ncurses-6.0-20160213/0000755000175100001440000000000012657724520012466 5ustar tomusersncurses-6.0-20160213/VERSION0000644000175100001440000000002312657642574013541 0ustar tomusers5:0:9 6.0 20160213 ncurses-6.0-20160213/misc/0000755000175100001440000000000012646557566013435 5ustar tomusersncurses-6.0-20160213/misc/csort0000755000175100001440000000450407554350661014505 0ustar tomusers#!/bin/sh # $Id: csort,v 1.2 2002/10/19 21:42:09 tom Exp $ ############################################################################## # Copyright (c) 2002 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # override anything that might cause 'sort' to do the wrong thing... LANG=C; export LANG LANGUAGE=C; export LANGUAGE LC_ALL=C; export LC_ALL LC_CTYPE=C; export LC_CTYPE sort $* ncurses-6.0-20160213/misc/ncurses.supp0000644000175100001440000001136311065242136016006 0ustar tomusers# $Id: ncurses.supp,v 1.7 2008/09/20 18:43:42 tom Exp $ ############################################################################## # Copyright (c) 2008 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # This is a warning-suppression file for valgrind and ncurses. # # ncurses can also be configured using the --disable-leaks option, which # allows an application to call _nc_freeall() or _nc_free_and_exit(), to # free all of ncurses' "permanent" memory. # # Some of these leaks can be freed if the application does its own cleanup, # for example: # delscreen(SP); # del_curterm(cur_term); # However, few applications do this. { ncurses_leak__nc_add_to_try Memcheck:Leak fun:*alloc fun:_nc_add_to_try } { ncurses_leak__nc_home_terminfo Memcheck:Leak fun:malloc fun:_nc_home_terminfo } { ncurses_leak__nc_init_wacs Memcheck:Leak fun:calloc fun:_nc_init_wacs } { ncurses_leak__nc_keyname Memcheck:Leak fun:calloc fun:_nc_keyname } { ncurses_leak__nc_keyname_2 Memcheck:Leak fun:malloc fun:strdup fun:_nc_keyname } { ncurses_leak__nc_printf_string Memcheck:Leak fun:malloc fun:_nc_doalloc fun:_nc_printf_string } { ncurses_leak__nc_read_termtype Memcheck:Leak fun:*alloc fun:_nc_read_termtype fun:_nc_read_file_entry } { ncurses_leak__nc_read_termtype_2 Memcheck:Leak fun:*alloc fun:_nc_doalloc fun:_nc_read_termtype fun:_nc_read_file_entry } { ncurses_leak__nc_scroll_optimize Memcheck:Leak fun:*alloc fun:_nc_hash_map fun:_nc_scroll_optimize } { ncurses_leak__nc_scroll_optimize_2 Memcheck:Leak fun:*alloc fun:_nc_doalloc fun:_nc_scroll_optimize } { ncurses_leak__nc_setupscreen Memcheck:Leak fun:calloc fun:_nc_setupscreen fun:newterm } { ncurses_leak__nc_setupscreen_2 Memcheck:Leak fun:calloc fun:newwin fun:_nc_setupscreen } { ncurses_leak__nc_setupterm_1 Memcheck:Leak fun:malloc fun:strdup fun:_nc_setupterm } { ncurses_leak__nc_setupterm Memcheck:Leak fun:calloc fun:_nc_setupterm } { ncurses_leak__nc_setupscreen_3 Memcheck:Leak fun:calloc fun:_nc_makenew fun:newwin fun:_nc_setupscreen } { ncurses_leak__nc_set_buffer Memcheck:Leak fun:malloc fun:_nc_set_buffer } { ncurses_leak__nc_tparm_analyze Memcheck:Leak fun:*alloc fun:_nc_doalloc fun:_nc_tparm_analyze } { ncurses_leak__nc_trace_alloc Memcheck:Leak fun:*alloc fun:_nc_doalloc fun:_nc_trace_alloc } { ncurses_leak_start_color Memcheck:Leak fun:calloc fun:start_color } { ncurses_leak_tparm Memcheck:Leak fun:realloc fun:_nc_doalloc fun:tparm } { ncurses_leak_tparam_internal Memcheck:Leak fun:realloc fun:_nc_doalloc fun:get_space fun:save_number fun:tparam_internal } ncurses-6.0-20160213/misc/menu.ref0000644000175100001440000000350306625702042015055 0ustar tomusersLIBRARY MENU2 INITINSTANCE DESCRIPTION 'NCurses 1.9.9e-1 for OS/2 - menu library' EXPORTS "menu_items" @1 ;NONAME "current_item" @2 ;NONAME "new_item" @3 ;NONAME "new_menu" @4 ;NONAME "item_opts" @5 ;NONAME "menu_opts" @6 ;NONAME "item_init" @7 ;NONAME "item_term" @8 ;NONAME "menu_init" @9 ;NONAME "menu_term" @10 ;NONAME "menu_sub" @12 ;NONAME "menu_win" @13 ;NONAME "item_description" @14 ;NONAME "item_name" @15 ;NONAME "menu_mark" @16 ;NONAME "menu_pattern" @17 ;NONAME "item_userptr" @18 ;NONAME "menu_userptr" @19 ;NONAME "menu_back" @20 ;NONAME "menu_fore" @21 ;NONAME "menu_grey" @22 ;NONAME "free_item" @23 ;NONAME "free_menu" @24 ;NONAME "item_count" @25 ;NONAME "item_index" @26 ;NONAME "item_opts_off" @27 ;NONAME "item_opts_on" @28 ;NONAME "menu_driver" @29 ;NONAME "menu_opts_off" @30 ;NONAME "menu_opts_on" @31 ;NONAME "menu_pad" @32 ;NONAME "pos_menu_cursor" @33 ;NONAME "post_menu" @34 ;NONAME "scale_menu" @35 ;NONAME "set_current_item" @36 ;NONAME "set_item_init" @37 ;NONAME "set_item_opts" @39 ;NONAME "set_item_term" @40 ;NONAME "set_item_userptr" @41 ;NONAME "set_item_value" @42 ;NONAME "set_menu_back" @43 ;NONAME "set_menu_fore" @44 ;NONAME "set_menu_format" @45 ;NONAME "set_menu_grey" @46 ;NONAME "set_menu_init" @47 ;NONAME "set_menu_items" @48 ;NONAME "set_menu_mark" @49 ;NONAME "set_menu_opts" @50 ;NONAME "set_menu_pad" @51 ;NONAME "set_menu_pattern" @52 ;NONAME "set_menu_sub" @53 ;NONAME "set_menu_term" @54 ;NONAME "set_menu_userptr" @55 ;NONAME "set_menu_win" @56 ;NONAME "set_top_row" @57 ;NONAME "top_row" @58 ;NONAME "unpost_menu" @59 ;NONAME "item_value" @60 ;NONAME "item_visible" @61 ;NONAME "menu_format" @62 ;NONAME ncurses-6.0-20160213/misc/magic0000644000175100001440000000444312521216102014407 0ustar tomusers# $Id: magic,v 1.1 2015/05/02 18:49:38 tom Exp $ ############################################################################## # Copyright (c) 2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # for reference, from file 5.22: 0 string \032\001 Compiled terminfo entry # ncurses-specific 0 string \210\210 Screen-dump (ncurses) ncurses-6.0-20160213/misc/ncurses.def0000644000175100001440000002707107130475211015560 0ustar tomusersLIBRARY ncurses5 INITINSTANCE TERMINSTANCE DESCRIPTION "NCurses-5-1-20000704, module ncurses" CODE LOADONCALL DATA LOADONCALL NONSHARED MULTIPLE EXPORTS "BC" @662 NONAME "COLORS" @503 NONAME "COLOR_PAIR" @36 NONAME "COLOR_PAIRS" @504 NONAME "COLS" @511 NONAME "ESCDELAY" @513 NONAME "LINES" @510 NONAME "PAIR_NUMBER" @209 NONAME "PC" @660 NONAME "SP" @1003 NONAME "TABSIZE" @512 NONAME "UP" @661 NONAME "_nc_access" @6 NONAME "_nc_add_to_try" @7 NONAME "_nc_align_termtype" @8 NONAME "_nc_background" @9 NONAME "_nc_baudrate" @10 NONAME "_nc_cap_hash_table" @805 NONAME "_nc_capalias_table" @806 NONAME "_nc_capcmp" @707 NONAME "_nc_captoinfo" @829 NONAME "_nc_check_termtype" @15 NONAME "_nc_comment_end" @819 NONAME "_nc_comment_start" @818 NONAME "_nc_copy_entry" @16 NONAME "_nc_copy_termtype" @22 NONAME "_nc_curr_col" @816 NONAME "_nc_curr_file_pos" @817 NONAME "_nc_curr_line" @815 NONAME "_nc_curr_token" @803 NONAME "_nc_disable_period" @23 NONAME "_nc_do_color" @1037 NONAME "_nc_doalloc" @25 NONAME "_nc_entry_match" @710 NONAME "_nc_err_abort" @826 NONAME "_nc_expand_try" @27 NONAME "_nc_expanded" @51 NONAME "_nc_fallback" @625 NONAME "_nc_find_entry" @809 NONAME "_nc_find_type_entry" @810 NONAME "_nc_first_name" @622 NONAME "_nc_flush" @54 NONAME "_nc_free_entries" @712 NONAME "_nc_free_termtype" @58 NONAME "_nc_freeall" @59 NONAME "_nc_freewin" @60 NONAME "_nc_get_hash_table" @63 NONAME "_nc_get_table" @808 NONAME "_nc_get_token" @811 NONAME "_nc_get_tty_mode" @65 NONAME "_nc_get_type" @823 NONAME "_nc_getenv_num" @67 NONAME "_nc_has_mouse" @73 NONAME "_nc_hash_map" @84 NONAME "_nc_head" @700 NONAME "_nc_home_terminfo" @91 NONAME "_nc_info_hash_table" @804 NONAME "_nc_infoalias_table" @807 NONAME "_nc_infotocap" @830 NONAME "_nc_init_acs" @92 NONAME "_nc_init_entry" @702 NONAME "_nc_init_keytry" @93 NONAME "_nc_keep_tic_dir" @95 NONAME "_nc_key_names" @96 NONAME "_nc_keypad" @1024 NONAME "_nc_make_oldhash" @97 NONAME "_nc_makenew" @1025 NONAME "_nc_memmove" @98 NONAME "_nc_merge_entry" @704 NONAME "_nc_msec_cost" @103 NONAME "_nc_mvcur_init" @1014 NONAME "_nc_mvcur_resume" @106 NONAME "_nc_mvcur_wrap" @1015 NONAME "_nc_name_match" @623 NONAME "_nc_nulls_sent" @116 NONAME "_nc_oldnums" @117 NONAME "_nc_ospeed" @118 NONAME "_nc_outch" @1026 NONAME "_nc_outstr" @1033 NONAME "_nc_panelhook" @119 NONAME "_nc_panic_mode" @814 NONAME "_nc_parse_entry" @706 NONAME "_nc_printf_string" @120 NONAME "_nc_push_token" @812 NONAME "_nc_read_entry" @620 NONAME "_nc_read_entry_source" @709 NONAME "_nc_read_file_entry" @621 NONAME "_nc_read_termcap" @127 NONAME "_nc_remove_key" @129 NONAME "_nc_remove_string" @130 NONAME "_nc_render" @1027 NONAME "_nc_reset_input" @813 NONAME "_nc_resolve_uses" @711 NONAME "_nc_ripoffline" @132 NONAME "_nc_save_str" @703 NONAME "_nc_screen_chain" @137 NONAME "_nc_screen_init" @142 NONAME "_nc_screen_resume" @143 NONAME "_nc_screen_wrap" @144 NONAME "_nc_scroll_oldhash" @145 NONAME "_nc_scroll_optimize" @1029 NONAME "_nc_scroll_window" @1030 NONAME "_nc_scrolln" @146 NONAME "_nc_set_buffer" @147 NONAME "_nc_set_source" @822 NONAME "_nc_set_tty_mode" @148 NONAME "_nc_set_type" @824 NONAME "_nc_set_writedir" @152 NONAME "_nc_setupscreen" @1031 NONAME "_nc_sigaction" @158 NONAME "_nc_signal_handler" @1034 NONAME "_nc_slk_format" @159 NONAME "_nc_slk_initialize" @160 NONAME "_nc_start_line" @821 NONAME "_nc_suppress_warnings" @828 NONAME "_nc_synchook" @1035 NONAME "_nc_syntax" @820 NONAME "_nc_syserr_abort" @825 NONAME "_nc_tail" @701 NONAME "_nc_tic_dir" @161 NONAME "_nc_tic_expand" @162 NONAME "_nc_tic_written" @167 NONAME "_nc_timed_wait" @1036 NONAME "_nc_tinfo_fkeys" @169 NONAME "_nc_tracing" @1010 NONAME "_nc_trans_string" @170 NONAME "_nc_user_definable" @172 NONAME "_nc_visbuf" @1012 NONAME "_nc_visbuf2" @178 NONAME "_nc_vsscanf" @183 NONAME "_nc_waddch_nosync" @1028 NONAME "_nc_warning" @827 NONAME "_nc_wrap_entry" @705 NONAME "_nc_write_entry" @708 NONAME "acs_map" @506 NONAME "addch" @1 NONAME "addchnstr" @2 NONAME "addchstr" @3 NONAME "addnstr" @4 NONAME "addstr" @5 NONAME "assume_default_colors" @184 NONAME "attr_get" @14 NONAME "attr_off" @185 NONAME "attr_on" @186 NONAME "attr_set" @17 NONAME "attroff" @11 NONAME "attron" @12 NONAME "attrset" @13 NONAME "baudrate" @18 NONAME "beep" @19 NONAME "bkgd" @20 NONAME "bkgdset" @21 NONAME "boolcodes" @601 NONAME "boolfnames" @602 NONAME "boolnames" @600 NONAME "border" @24 NONAME "box" @26 NONAME "can_change_color" @28 NONAME "cbreak" @29 NONAME "chgat" @30 NONAME "clear" @31 NONAME "clearok" @32 NONAME "clrtobot" @33 NONAME "clrtoeol" @34 NONAME "color_content" @35 NONAME "color_set" @187 NONAME "copywin" @37 NONAME "cur_term" @515 NONAME "curs_set" @38 NONAME "curscr" @501 NONAME "curses_version" @188 NONAME "def_prog_mode" @39 NONAME "def_shell_mode" @40 NONAME "define_key" @189 NONAME "del_curterm" @641 NONAME "delay_output" @41 NONAME "delch" @42 NONAME "deleteln" @45 NONAME "delscreen" @43 NONAME "delwin" @44 NONAME "derwin" @46 NONAME "doupdate" @47 NONAME "dupwin" @48 NONAME "echo" @49 NONAME "echochar" @50 NONAME "endwin" @52 NONAME "erase" @193 NONAME "erasechar" @53 NONAME "filter" @55 NONAME "flash" @56 NONAME "flushinp" @57 NONAME "getbkgd" @211 NONAME "getch" @61 NONAME "getmouse" @356 NONAME "getnstr" @62 NONAME "getstr" @64 NONAME "getwin" @66 NONAME "halfdelay" @68 NONAME "has_colors" @69 NONAME "has_ic" @70 NONAME "has_il" @71 NONAME "has_key" @234 NONAME "hline" @72 NONAME "idcok" @74 NONAME "idlok" @75 NONAME "immedok" @76 NONAME "inch" @77 NONAME "inchnstr" @78 NONAME "inchstr" @79 NONAME "init_color" @81 NONAME "init_pair" @82 NONAME "initscr" @80 NONAME "innstr" @83 NONAME "insch" @85 NONAME "insdelln" @86 NONAME "insertln" @87 NONAME "insnstr" @88 NONAME "insstr" @89 NONAME "instr" @90 NONAME "intrflush" @94 NONAME "is_linetouched" @100 NONAME "is_wintouched" @101 NONAME "isendwin" @99 NONAME "keybound" @238 NONAME "keyname" @102 NONAME "keyok" @240 NONAME "keypad" @104 NONAME "killchar" @105 NONAME "leaveok" @107 NONAME "longname" @108 NONAME "mcprint" @242 NONAME "meta" @109 NONAME "mouse_trafo" @251 NONAME "mouseinterval" @360 NONAME "mousemask" @358 NONAME "move" @110 NONAME "mvaddch" @111 NONAME "mvaddchnstr" @112 NONAME "mvaddchstr" @113 NONAME "mvaddnstr" @114 NONAME "mvaddstr" @115 NONAME "mvchgat" @121 NONAME "mvcur" @122 NONAME "mvdelch" @123 NONAME "mvderwin" @124 NONAME "mvgetch" @125 NONAME "mvgetnstr" @126 NONAME "mvgetstr" @128 NONAME "mvhline" @131 NONAME "mvinch" @133 NONAME "mvinchnstr" @134 NONAME "mvinchstr" @135 NONAME "mvinnstr" @136 NONAME "mvinsch" @138 NONAME "mvinsnstr" @139 NONAME "mvinsstr" @140 NONAME "mvinstr" @141 NONAME "mvprintw" @149 NONAME "mvscanw" @150 NONAME "mvvline" @151 NONAME "mvwaddch" @153 NONAME "mvwaddchnstr" @154 NONAME "mvwaddchstr" @155 NONAME "mvwaddnstr" @156 NONAME "mvwaddstr" @157 NONAME "mvwchgat" @163 NONAME "mvwdelch" @164 NONAME "mvwgetch" @165 NONAME "mvwgetnstr" @166 NONAME "mvwgetstr" @168 NONAME "mvwhline" @171 NONAME "mvwin" @173 NONAME "mvwinch" @174 NONAME "mvwinchnstr" @175 NONAME "mvwinchstr" @176 NONAME "mvwinnstr" @177 NONAME "mvwinsch" @179 NONAME "mvwinsnstr" @180 NONAME "mvwinsstr" @181 NONAME "mvwinstr" @182 NONAME "mvwprintw" @190 NONAME "mvwscanw" @191 NONAME "mvwvline" @192 NONAME "napms" @194 NONAME "newpad" @195 NONAME "newscr" @502 NONAME "newterm" @196 NONAME "newwin" @197 NONAME "nl" @198 NONAME "nocbreak" @199 NONAME "nodelay" @200 NONAME "noecho" @201 NONAME "nonl" @202 NONAME "noqiflush" @203 NONAME "noraw" @204 NONAME "notimeout" @205 NONAME "numcodes" @604 NONAME "numfnames" @605 NONAME "numnames" @603 NONAME "ospeed" @663 NONAME "overlay" @206 NONAME "overwrite" @207 NONAME "pair_content" @208 NONAME "pechochar" @210 NONAME "pnoutrefresh" @212 NONAME "prefresh" @213 NONAME "printw" @214 NONAME "putp" @215 NONAME "putwin" @216 NONAME "qiflush" @217 NONAME "raw" @218 NONAME "redrawwin" @219 NONAME "refresh" @220 NONAME "reset_prog_mode" @222 NONAME "reset_shell_mode" @223 NONAME "resetty" @221 NONAME "resizeterm" @263 NONAME "restartterm" @643 NONAME "ripoffline" @224 NONAME "savetty" @225 NONAME "scanw" @226 NONAME "scr_dump" @227 NONAME "scr_init" @228 NONAME "scr_restore" @232 NONAME "scr_set" @233 NONAME "scrl" @229 NONAME "scroll" @230 NONAME "scrollok" @231 NONAME "set_curterm" @640 NONAME "set_term" @236 NONAME "setscrreg" @235 NONAME "setupterm" @644 NONAME "slk_attr" @266 NONAME "slk_attr_set" @270 NONAME "slk_attroff" @237 NONAME "slk_attron" @239 NONAME "slk_attrset" @241 NONAME "slk_clear" @243 NONAME "slk_color" @272 NONAME "slk_init" @244 NONAME "slk_label" @245 NONAME "slk_noutrefresh" @246 NONAME "slk_refresh" @247 NONAME "slk_restore" @248 NONAME "slk_set" @249 NONAME "slk_touch" @250 NONAME "standend" @253 NONAME "standout" @252 NONAME "start_color" @254 NONAME "stdscr" @500 NONAME "strcodes" @608 NONAME "strfnames" @609 NONAME "strnames" @606 NONAME "subpad" @255 NONAME "subwin" @256 NONAME "syncok" @257 NONAME "termattrs" @258 NONAME "termname" @259 NONAME "tgetent" @645 NONAME "tgetflag" @646 NONAME "tgetnum" @647 NONAME "tgetstr" @648 NONAME "tgoto" @649 NONAME "tigetflag" @260 NONAME "tigetnum" @261 NONAME "tigetstr" @262 NONAME "timeout" @274 NONAME "tparm" @653 NONAME "tputs" @655 NONAME "ttytype" @514 NONAME "typeahead" @264 NONAME "unctrl" @361 NONAME "ungetch" @265 NONAME "ungetmouse" @357 NONAME "untouchwin" @267 NONAME "use_default_colors" @276 NONAME "use_env" @268 NONAME "use_extended_names" @278 NONAME "vidattr" @269 NONAME "vidputs" @271 NONAME "vline" @273 NONAME "vw_printw" @284 NONAME "vw_scanw" @285 NONAME "vwprintw" @275 NONAME "vwscanw" @277 NONAME "waddch" @279 NONAME "waddchnstr" @280 NONAME "waddchstr" @281 NONAME "waddnstr" @282 NONAME "waddstr" @283 NONAME "wattr_get" @291 NONAME "wattr_off" @293 NONAME "wattr_on" @292 NONAME "wattr_set" @286 NONAME "wattroff" @289 NONAME "wattron" @288 NONAME "wattrset" @290 NONAME "wbkgd" @295 NONAME "wbkgdset" @296 NONAME "wborder" @299 NONAME "wchgat" @301 NONAME "wclear" @302 NONAME "wclrtobot" @303 NONAME "wclrtoeol" @304 NONAME "wcolor_set" @287 NONAME "wcursyncup" @305 NONAME "wdelch" @306 NONAME "wdeleteln" @307 NONAME "wechochar" @308 NONAME "wenclose" @359 NONAME "werase" @310 NONAME "wgetch" @312 NONAME "wgetnstr" @313 NONAME "wgetstr" @315 NONAME "whline" @318 NONAME "winch" @320 NONAME "winchnstr" @321 NONAME "winchstr" @322 NONAME "winnstr" @323 NONAME "winsch" @325 NONAME "winsdelln" @326 NONAME "winsertln" @327 NONAME "winsnstr" @328 NONAME "winsstr" @329 NONAME "winstr" @330 NONAME "wmouse_trafo" @294 NONAME "wmove" @338 NONAME "wnoutrefresh" @339 NONAME "wprintw" @340 NONAME "wredrawln" @341 NONAME "wrefresh" @342 NONAME "wresize" @343 NONAME "wscanw" @344 NONAME "wscrl" @345 NONAME "wsetscrreg" @346 NONAME "wstandend" @348 NONAME "wstandout" @347 NONAME "wsyncdown" @349 NONAME "wsyncup" @350 NONAME "wtimeout" @351 NONAME "wtouchln" @352 NONAME "wvline" @354 NONAME ncurses-6.0-20160213/misc/gen_edit.sh0000755000175100001440000001032711736067205015536 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 2004-2011,2012 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey # # $Id: gen_edit.sh,v 1.5 2012/04/01 15:04:37 tom Exp $ # Generate a sed-script for converting the terminfo.src to the form which will # be installed. # # Assumes: # The leaf directory names (lib, tabset, terminfo) # linux_dft=linux2.2 : ${datadir=/usr/share} : ${WHICH_LINUX=$linux_dft} : ${WHICH_XTERM=xterm-new} : ${XTERM_KBS=BS} # If we're not installing into /usr/share/, we'll have to adjust the location # of the tabset files in terminfo.src (which are in a parallel directory). TABSET=${datadir}/tabset if test "x$TABSET" != "x/usr/share/tabset" ; then cat <&2 cat <&2 cat </dev/null` if test "x$system" = xLinux then case x`uname -r` in x1.*) WHICH_LINUX=linux-c ;; x2.[0-4]*) WHICH_LINUX=linux2.2 ;; *) WHICH_LINUX=linux3.0 ;; esac else WHICH_LINUX=$linux_dft fi ;; xlinux*) # allow specific setting ;; *) WHICH_LINUX=$linux_dft ;; esac if test $WHICH_LINUX != $linux_dft then echo "** using $WHICH_LINUX terminal description for Linux console" >&2 cat </dev/null ) if test "$ext_funcs" = 1 ; then cat </dev/null ) if ( cd $TICDIR 2>/dev/null ) then cd $TICDIR TICDIR=`pwd` if test $TICDIR != $TERMINFO ; then # Well, we tried. Some systems lie to us, so the # installer will have to double-check. echo "Verify if $TICDIR and $TERMINFO are the same." echo "The new terminfo is in $TERMINFO; the other should be a link to it." echo "Otherwise, remove $TICDIR and link it to $TERMINFO." fi else cd ${DESTDIR}$prefix # Construct a symbolic link that only assumes $ticdir has the # same $prefix as the other installed directories. RELATIVE=`echo $ticdir|sed -e 's%^'$prefix'/%%'` if test "$RELATIVE" != "$ticdir" ; then RELATIVE=../`echo $ticdir|sed -e 's%^'$prefix'/%%' -e 's%^/%%'` fi if ( @LN_S@ $RELATIVE $TICDIR ) then echo '** sym-linked '$TICDIR' for compatibility' else echo '** could not sym-link '$TICDIR' for compatibility' fi fi fi # vile:shmode ncurses-6.0-20160213/misc/emx.src0000644000175100001440000004535610422522051014717 0ustar tomusers############################################################################## # Copyright (c) 1998-2003,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: emx.src,v 1.9 2006/04/22 21:46:17 tom Exp $ # This is a reformatted copy of the terminfo source for OS/2 EMX from # Juan Jose Garcia Ripoll . # http://www.arrakis.es/~worm/ #---------------------------------------------------------------------------- # # This section describes terminal classes and maker brands that are still # quite common. # #### Specials # # Special "terminals". These are used to label tty lines when you don't # know what kind of terminal is on it. The characteristics of an unknown # terminal are the lowest common denominator - they look about like a ti 700. # dumb|80-column dumb tty, am, cols#80, bel=^G, cr=^M, cud1=^J, ind=^J, unknown|unknown terminal type, gn, use=dumb, lpr|printer|line printer, hc, os, cols#132, lines#66, bel=^G, cr=^M, cub1=^H, cud1=^J, ff=^L, ind=^J, glasstty|classic glass tty interpreting ASCII control characters, am, cols#80, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, ht=^I, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, #### ANSI.SYS/ISO 6429/ECMA-48 Capabilities # # See the end-of-file comment for more on these. # # The IBM PC alternate character set. Plug this into any Intel console entry. # We use \E[11m for rmacs rather than \E[12m so the string can use the # ROM graphics for control characters such as the diamond, up- and down-arrow. # This works with the System V, Linux, and BSDI consoles. It's a safe bet this # will work with any Intel console, they all seem to have inherited \E[11m # from the ANSI.SYS de-facto standard. klone+acs|alternate character set for ansi.sys displays, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, rmacs=\E[10m, smacs=\E[11m, # Highlight controls corresponding to the ANSI.SYS standard. Most # console drivers for Intel boxes obey these. Makes the same assumption # about \E[11m as klone+acs. True ANSI/ECMA-48 would have , # , but this isn't a documented feature of ANSI.SYS. klone+sgr|attribute control for ansi.sys displays, blink=\E[5m, bold=\E[1m, invis=\E[8m, rev=\E[7m, rmacs=\E[10m, rmpch=\E[10m, rmso=\E[m, rmul=\E[m, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m, sgr0=\E[0;10m, smacs=\E[11m, smpch=\E[11m, smso=\E[7m, smul=\E[4m, use=klone+acs, # Highlight controls corresponding to the ANSI.SYS standard. *All* # console drivers for Intel boxes obey these. Does not assume \E[11m will # work; uses \E[12m instead, which is pretty bulletproof but loses you the ACS # diamond and arrow characters under curses. klone+sgr-dumb|attribute control for ansi.sys displays (no ESC [ 11 m), blink=\E[5m, bold=\E[1m, invis=\E[8m, rev=\E[7m, rmacs=\E[10m, rmso=\E[m, rmul=\E[m, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;12%;m, sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m, use=klone+acs, # ANSI.SYS color control. # The DOS 5 manual asserts that these sequences meet the ISO 6429 standard. klone+color|color control for ansi.sys and ISO6429-compatible displays, colors#8, ncv#3, pairs#64, op=\E[37;40m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, # This is better than klone+color, it doesn't assume white-on-black as the # default color pair, but many `ANSI' terminals don't grok the cap. ecma+color|color control for ECMA-48-compatible terminals, AX, colors#8, ncv#3, pairs#64, op=\E[39;49m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, #### ANSI/ECMA-48 terminals and terminal emulators # # See near the end of this file for details on ANSI conformance. # Don't mess with these entries! Lots of other entries depend on them! # # This section lists entries in a least-capable to most-capable order. # if you're in doubt about what `ANSI' matches yours, try them in that # order and back off from the first that breaks. ansi-mini|any ansi terminal with pessimistic assumptions, am, cols#80, it#8, lines#24, clear=\E[H\E[2J$<50>, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H, ht=^I, # # ANSI.SYS entries # # This completely describes the sequences specified in the DOS 2.1 ANSI.SYS # documentation (except for the keyboard key reassignment feature, which # doen't fit the model well). The klone+acs sequences were valid # though undocumented. The capability is untested but should work for # keys F1-F10 (%p1 values outside this range will yield unpredictable results). # From: Eric S. Raymond Nov 7 1995 ansi.sys-old|ANSI.SYS under PC-DOS 2.1, am, mir, msgr, xon, cols#80, lines#25, clear=\E[2J, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[k, home=\E[H, is2=\E[m\E[?7h, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, pfkey=\E[0;%p1%{58}%+%d;%p2"%s", rc=\E[u, rmam=\E[?7l, sc=\E[s, smam=\E[?7h, u6=\E[%i%d;%dR, u7=\E[6n, use=klone+color, use=klone+acs, use=klone+sgr, ansi.sys|ANSI.SYS 3.1 and later versions, el=\E[K, use=ansi.sys-old, ### EMX termcap.dat compatibility modes # # Keypad: Home=\0G Up=\0H PrPag=\0I # ka1,kh kcuu1 kpp,ka3 # # Left=\0K 5=\0L Right=\0M # kcub1 kb2 kcuf1 # # End=\0O Down=\0P NxPag=\0Q # kc1,kend kcud1 kc3,knp # # Ins=\0R Del=\0S # kich1 kdch1 # # On keyboard with 12 function keys, # shifted f-keys: F13-F24 # control f-keys: F25-F36 # alt f-keys: F37-F48 # The shift/control/alt keys do not modify each other, but alt overrides both, # and control overrides shift. # # Also (possibly only EMX, so we don't put it in ansi.sys, etc): set the # no_color_video to inform the application that standout(1), underline(2) # reverse(4) and invisible(64) don't work with color. emx-base|DOS special keys, bce, bw, it#8, ncv#71, bel=^G, ka1=\0G, ka3=\0I, kb2=\0L, kbs=^H, kc1=\0O, kc3=\0Q, kcbt=\0^O, kcub1=\0K, kcud1=\0P, kcuf1=\0M, kcuu1=\0H, kdch1=\0S, kend=\0O, kf1=\0;, kf10=\0D, kf11=\0\205, kf12=\0\206, kf13=\0T, kf14=\0U, kf15=\0V, kf16=\0W, kf17=\0X, kf18=\0Y, kf19=\0Z, kf2=\0<, kf20=\0[, kf21=\0\\, kf22=\0], kf23=\0\207, kf24=\0\210, kf25=\0\^, kf26=\0_, kf27=\0`, kf28=\0a, kf29=\0b, kf3=\0=, kf30=\0c, kf31=\0d, kf32=\0e, kf33=\0f, kf34=\0g, kf35=\0\211, kf36=\0\212, kf37=\0h, kf38=\0i, kf39=\0j, kf4=\0>, kf40=\0k, kf41=\0l, kf42=\0m, kf43=\0n, kf44=\0o, kf45=\0p, kf46=\0q, kf47=\0\213, kf48=\0\214, kf5=\0?, kf6=\0@, kf7=\0A, kf8=\0B, kf9=\0C, khome=\0G, kich1=\0R, knp=\0Q, kpp=\0I, use=ansi.sys, # # To properly translate termcap.dat -> terminfo.src remember these # equivalences: # ti <-> smcup string to start programs using cup(termcap) # te <-> rmcup string to end programs using cup # so <-> smso begin standout mode # se <-> rmso exit standout mode # us <-> smul begin underline mode # ue <-> rmul exit underline mode # mb <-> blink turn on blinking # md <-> bold turn on extra bright (bold) mode # mr <-> rev turn on reverse video mode # me <-> sgr0 turn off all atributes # # On my terminal, \E[4m looks dim. ansi-emx|ANSI.SYS color, blink=\E[5m, bold=\E[1m, kmous=\E[M, rev=\E[7m, rmcup=\E[0m, rmso=\E[0m, rmul@, sgr0=\E[0m, smcup=\E[0;37;40m, smso=\E[7m, smul@, use=emx-base, window|ANSI.SYS window, blink=\E[5m, bold=\E[1;37;47m, rev=\E[1;37;47m, rmcup=\E[0m, rmso=\E[0;37;40m, rmul=\E[0;37;40m, sgr0=\E[0;37;40m, smcup=\E[0;37;40m, smso=\E[1;37;47m, smul=\E[1;31;47m, use=emx-base, os2|OS/2-emx ANSI.SYS, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cuu=\E[%p1%dA, cuu1=\E[A, rc=\E[u, sc=\E[s, use=ansi-emx, use=mono, mono|ANSI.SYS mono, blink=\E[5m, bold=\E[1m, rev=\E[7m, rmcup=\E[0m, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smcup=\E[0m, smso=\E[1m, smul=\E[4m, use=emx-base, # same as mono, but use reverse video for standout (nice for Emacs) rmono|ANSI.SYS reverse mono, smso=\E[7m, use=mono, # same as mono, but use a readable color for underlining mono2|ANSI.SYS mono2, rmul=\E[0m, smul=\E[1;31;40m, use=mono, # nice colors for Emacs (white on blue, mode line white on cyan) ansi-color-2-emx|ANSI.SYS color 2, rmcup=\E[0m, rmso=\E[0;37;44m, rmul=\E[0m, sgr0=\E[0;37;44m, smcup=\E[0;37;44m, smso=\E[1;37;46m, smul=\E[1;31;40m, use=ansi-emx, # nice colors for Emacs (white on black, mode line black on cyan) ansi-color-3-emx|ANSI.SYS color 3, rmcup=\E[0m, rmso=\E[0m, rmul=\E[0m, sgr0=\E[0m, smcup=\E[0m, smso=\E[30;46m, smul=\E[1;31;40m, use=ansi-emx, #### X terminal emulators # # X10/6.6 11/7/86, minus alternate screen, plus (csr) # (xterm: ":MT:" changed to ":km:"; added / based on init string; # removed (hs, eslok, tsl=\E[?E\E[?%i%dT, fsl=\E[?F, dsl=\E[?E) # as these seem not to work -- esr) x10term|vs100-x10|xterm terminal emulator (X10 window system), am, km, mir, msgr, xenl, xon, cols#80, it#8, lines#65, bold=\E[1m, clear=\E[H\E[2J, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E\E[m\E[?7h\E[?1;4l, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rev=\E[7m, ri=\EM, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, # X11R6 xterm. This is known good for the XFree86 version under Linux. # It is *way* more featureful than the stock X consortium entry (has acsc, # for starters). The key is actually the \E[M prefix returned by # xterm's internal mouse-tracking facility; ncurses will interpret the # following three bytes of mouse status information. # From: Eric S. Raymond 14 Dec 1995 xterm-r6|xterm terminal emulator (X11R6 Window System), am, km, mir, msgr, xenl, xon, cols#80, it#8, lines#65, acsc=++\,\,--..00II``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, enacs=\E(B\E)0, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\EOe, kent=\EOM, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khome=\EO\0, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=^O, rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E<, sc=\E7, sgr0=\E[m, smacs=^N, smam=\E[?7h, smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3k, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c, xterm-bold|xterm terminal emulator (X11R6 Window System) standout w/bold, smso=\E[1m, use=xterm, xterms|vs100s|xterm terminal emulator (small screen 24x80), cols#80, lines#24, use=xterm, # (kterm: this had extension capabilities ":KJ:TY=ascii:" -- esr) kterm|kterm kanji terminal emulator (X window system), eslok, hs, csr=\E[%i%p1%d;%p2%dr, dsl=\E[?H, fsl=\E[?F, rc=\E8, sc=\E7, tsl=\E[?E\E[?%i%dT, use=xterm, use=ecma+color, # See the note on ICH/ICH1 VERSUS RMIR/SMIR near the end of file xterm-nic|xterm with ich/ich1 suppressed for non-curses programs, ich@, ich1@, use=xterm, # Should work with the color xterm on the X11R6 contrib tape. # Assumes the xterm attribute default is black on white. # From: Eric S. Raymond March 4 1996 xterm-color|xterm with color support, op=\E[30;47m, use=xterm, use=klone+color, # From: Thomas Dickey 13 Dec 1995 rxvt|rxvt terminal emulator, kend=\EOw, khome=\E[H, kmous@, use=xterm, use=klone+color, # From: David J. MacKenzie 20 Apr 1995 # Here's a termcap entry I've been using for xterm_color, which comes # with BSD/OS 2.0, and the X11R6 contrib tape too I think. Besides the # color stuff, I also have a status line defined as the window manager # title bar. [I have translated it to terminfo -- ESR] xterm-pcolor|xterm with color used for highlights and status line, hs, wsl#40, bold=\E[1m\E[43m, dsl=\E]0;\007, fsl=^G, rev=\E[7m\E[34m, smso=\E[7m\E[31m, smul=\E[4m\E[42m, tsl=\E]0;, use=xterm, # HP ships this, except for the pb#9600 which was merged in from BSD termcap. hpterm|X-hpterm|hp X11 terminal emulator, am, da, db, mir, xhp, cols#80, lh#2, lines#24, lm#0, lw#8, nlab#8, pb#9600, xmc#0, bel=^G, bold=\E&dB, cbt=\Ei, clear=\E&a0y0C\EJ, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP, dim=\E&dH, dl1=\EM, ed=\EJ$<1>, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1, il1=\EL, ind=^J, kbs=^H, kclr=\EJ, kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL, kind=\ES, kll=\EF, knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, ktbc=\E3, meml=\El, memu=\Em, pfkey=\E&f%p1%dk%p2%l%dL%p2%s, pfloc=\E&f1a%p1%dk%p2%l%dL%p2%s, pfx=\E&f2a%p1%dk%p2%l%dL%p2%s, pln=\E&f%p1%dk%p2%l%dd0L%p2%s, rev=\E&dB, ri=\ET, rmacs=^O, rmir=\ER, rmkx=\E&s0A, rmln=\E&j@, rmso=\E&d@, rmul=\E&d@, sgr=\E&d%?%p7%t%'s'%c%;%p1%p3%|%p6%|%{2}%*%p2%{4}%*%+%p4%+%p5%{8}%*%+%'@'%+%c%?%p9%t%'\016'%c%e%'\017'%c%;, sgr0=\E&d@, smacs=^N, smir=\EQ, smkx=\E&s1A, smln=\E&jB, smso=\E&dJ, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY, # This entry describes an xterm with Sun-style function keys enabled # via the X resource setting "xterm*sunFunctionKeys:true" # To understand / note that L1,L2 and F11,F12 are the same. # The ... keys are L3-L10. We don't set # because we want it to be seen as . # The ... keys are R1-R15. We treat some of these in accordance # with their Sun keyboard labels instead. # From: Simon J. Gerraty 10 Jan 1996 xterm-sun|xterm with sunFunctionKeys true, kb2=\E[218z, kcpy=\E[197z, kend=\E[220z, kf1=\E[224z, kf10=\E[233z, kf11=\E[192z, kf12=\E[193z, kf13=\E[194z, kf14=\E[195z, kf15=\E[196z, kf17=\E[198z, kf18=\E[199z, kf19=\E[200z, kf2=\E[225z, kf20=\E[201z, kf3=\E[226z, kf31=\E[208z, kf32=\E[209z, kf33=\E[210z, kf34=\E[211z, kf35=\E[212z, kf36=\E[213z, kf38=\E[215z, kf4=\E[227z, kf40=\E[217z, kf42=\E[219z, kf44=\E[221z, kf5=\E[228z, kf6=\E[229z, kf7=\E[230z, kf8=\E[231z, kf9=\E[232z, kfnd=\E[200z, khlp=\E[196z, khome=\E[214z, kich1=\E[2z, knp=\E[222z, kpp=\E[216z, kund=\E[195z, use=xterm, xterms-sun|small (80x24) xterm with sunFunctionKeys true, cols#80, lines#24, use=xterm-sun, # This is for the extensible terminal emulator on the X11R6 contrib tape. emu|emu native mode, mir, msgr, xon, colors#15, cols#80, it#8, lines#24, pairs#64, vt#200, acsc=61a\202f\260g2j\213k\214l\215m\216n\217o\220q\222s\224t\225u\226v\227w\230x\231~\244, bel=^G, blink=\ES\EW, bold=\ES\EU, civis=\EZ, clear=\EP\EE0;0;, cnorm=\Ea, cr=^M, csr=\Ek%p1%d;%p2%d;, cub=\Eq-%p1%d;, cub1=^H, cud=\Ep%p1%d;, cud1=\EB, cuf=\Eq%p1%d;, cuf1=\ED, cup=\EE%p1%d;%p2%d;, cuu=\Ep-%p1%d;, cuu1=\EA, dch=\EI%p1%d;, dch1=\EI1;, dl=\ER%p1%d;, dl1=\ER1;, ech=\Ej%p1%d;, ed=\EN, el=\EK, el1=\EL, enacs=\0, home=\EE0;0;, ht=^I, hts=\Eh, il=\EQ%p1%d;, il1=\EQ1;, ind=\EG, is2=\ES\Er0;\Es0;, kbs=^H, kcub1=\EC, kcud1=\EB, kcuf1=\ED, kcuu1=\EA, kdch1=\177, kent=^M, kf0=\EF00, kf1=\EF01, kf10=\EF10, kf11=\EF11, kf12=\EF12, kf13=\EF13, kf14=\EF14, kf15=\EF15, kf16=\EF16, kf17=\EF17, kf18=\EF18, kf19=\EF19, kf2=\EF02, kf20=\EF20, kf3=\EF03, kf4=\EF04, kf5=\EF05, kf6=\EF06, kf7=\EF07, kf8=\EF08, kf9=\EF09, kfnd=\Efind, kich1=\Eins, knp=\Enext, kpp=\Eprior, kslt=\Esel, oc=\Es0;\Er0;, rev=\ES\ET, ri=\EF, rmacs=\0, rmir=\EX, rmso=\ES, rmul=\ES, rs2=\ES\Es0;\Er0;, setab=\Es%i%p1%d;, setaf=\Er%i%p1%d;, sgr0=\ES, smacs=\0, smir=\EY, smso=\ES\ET, smul=\ES\EV, tbc=\Ej, ############################################################################### # Aliases which conflict with terminfo.src ansi|ANSI.SYS color, use=ansi-emx, ansi-color-2|ANSI.SYS color 2, use=ansi-color-2-emx, ansi-color-3|ANSI.SYS color 3, use=ansi-color-3-emx, xterm|vs100|xterm terminal emulator (X11R6 Window System), use=xterm-r6, ncurses-6.0-20160213/misc/Makefile.in0000644000175100001440000001430512615467620015470 0ustar tomusers# $Id: Makefile.in,v 1.65 2015/11/01 20:01:20 tom Exp $ ############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # # Makefile for ncurses miscellany directory # # This makes/installs the terminfo database # # The variable 'srcdir' refers to the source-distribution, and can be set with # the configure script by "--srcdir=DIR". # # The rules are organized to produce the libraries for the configured models, # and the programs with the configured default model. # turn off _all_ suffix rules; we'll generate our own .SUFFIXES : SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile CF_MFLAGS = @cf_cv_makeflags@ @SET_MAKE@ DESTDIR = @DESTDIR@ top_srcdir = @top_srcdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ datarootdir = @datarootdir@ datadir = @datadir@ includesubdir = @includesubdir@ INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir) tabsetdir = $(datadir)/tabset ticdir = @TERMINFO@ ticfile = $(ticdir).db source = @TERMINFO_SRC@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_DATA = @INSTALL_DATA@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ ################################################################################ all : terminfo.tmp depend : sources :: terminfo.tmp install : @MISC_INSTALL_DATA@ install.libs install.data : terminfo.tmp \ $(DESTDIR)$(libdir) \ $(DESTDIR)$(datadir) \ $(DESTDIR)$(tabsetdir) DESTDIR=${DESTDIR} \ prefix=${prefix} \ exec_prefix=${exec_prefix} \ bindir=${bindir} \ top_srcdir=${top_srcdir} \ srcdir=${srcdir} \ datadir=${datadir} \ ticdir=${ticdir} \ source=terminfo.tmp \ cross_compiling=@cross_compiling@ \ $(SHELL) ./run_tic.sh @cd $(srcdir)/tabset && \ $(SHELL) -c 'for i in * ; do \ if test -f $$i ; then \ echo installing $$i; \ $(INSTALL_DATA) $$i $(DESTDIR)$(tabsetdir)/$$i; \ fi; done' NCURSES_CONFIG = ncurses@DFT_ARG_SUFFIX@@cf_cv_abi_version@-config install.libs :: $(DESTDIR)$(bindir) ncurses-config $(INSTALL_SCRIPT) ncurses-config $(DESTDIR)$(bindir)/$(NCURSES_CONFIG) # some packagers prefer to be able to construct pc-files on servers where # pkg-config is not installed. Work around that by creating the library # directory during this rule: @MAKE_PC_FILES@install.libs :: pc-files @MAKE_PC_FILES@ @$(SHELL) -c 'case "x$(DESTDIR)$(PKG_CONFIG_LIBDIR)" in \ (x/*) \ mkdir -p $(DESTDIR)$(PKG_CONFIG_LIBDIR); \ for name in *.pc; do \ echo installing $$name; \ $(INSTALL_DATA) $$name $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$$name; \ done \ ;; \ (*) \ echo "...skip actual install: no destination was given" ; \ ;; \ esac' @MAKE_PC_FILES@sources :: pc-files @MAKE_PC_FILES@pc-files : @MAKE_PC_FILES@ $(SHELL) ./gen-pkgconfig @MAKE_PC_FILES@ touch $@ terminfo.tmp : run_tic.sed $(source) echo '** adjusting tabset paths' sed -f run_tic.sed $(source) >terminfo.tmp run_tic.sed : WHICH_XTERM=@WHICH_XTERM@ \ XTERM_KBS=@XTERM_KBS@ \ datadir=${datadir} \ $(SHELL) $(srcdir)/gen_edit.sh >$@ $(DESTDIR)$(bindir) \ $(DESTDIR)$(libdir) \ $(DESTDIR)$(datadir) \ $(DESTDIR)$(tabsetdir) : mkdir -p $@ uninstall : @MISC_UNINSTALL_DATA@ uninstall.libs uninstall.data : -test -d $(DESTDIR)$(tabsetdir) && rm -rf $(DESTDIR)$(tabsetdir) -test -d $(DESTDIR)$(ticdir) && rm -rf $(DESTDIR)$(ticdir) -test -f $(DESTDIR)$(ticfile) && rm -f $(DESTDIR)$(ticfile) uninstall.libs : -rm -f $(DESTDIR)$(bindir)/$(NCURSES_CONFIG) @MAKE_PC_FILES@ @$(SHELL) -c 'case x$(DESTDIR)$(PKG_CONFIG_LIBDIR) in \ (x/*) \ for name in *.pc; do \ echo uninstalling $$name; \ rm -f $(DESTDIR)$(PKG_CONFIG_LIBDIR)/$$name; \ done \ ;; \ esac' tags : @MAKE_UPPER_TAGS@TAGS : mostlyclean : -rm -f terminfo.tmp -rm -f run_tic.sed @MAKE_PC_FILES@ -rm -f *.pc pc-files -rm -f core tags TAGS *~ *.bak *.ln *.atac trace clean :: mostlyclean distclean : clean @MAKE_PC_FILES@ -rm -f gen-pkgconfig -rm -f Makefile run_tic.sh ncurses-config realclean : distclean ############################################################################### # The remainder of this file is automatically generated during configuration ############################################################################### ncurses-6.0-20160213/misc/ncurses.ref0000644000175100001440000005055006625701317015603 0ustar tomusersLIBRARY ncurses2 INITINSTANCE DESCRIPTION 'NCurses 1.9.9e-1 for OS/2 - base library' EXPORTS ;************ ;* curses.h * ;************ "stdscr" @500 NONAME ; variable "curscr" @501 NONAME ; variable "newscr" @502 NONAME ; variable "COLORS" @503 NONAME ; variable "COLOR_PAIRS" @504 NONAME ; variable "color_pairs" @505 NONAME ; variable "acs_map" @506 NONAME ; variable "LINES" @510 NONAME ; variable "COLS" @511 NONAME ; variable "TABSIZE" @512 NONAME ; variable "ESCDELAY" @513 NONAME ; variable "ttytype" @514 NONAME ; variable "cur_term" @515 NONAME ; variable "addch" @1 NONAME ; generated "addchnstr" @2 NONAME ; generated "addchstr" @3 NONAME ; generated "addnstr" @4 NONAME ; generated "addstr" @5 NONAME ; generated ; "addnwstr" @6 NONAME ; missing ; "addwstr" @7 NONAME ; missing ; "add_wch" @8 NONAME ; missing ; "add_wchnstr" @9 NONAME ; missing ; "add_wchstr" @10 NONAME ; missing "attroff" @11 NONAME ; generated "attron" @12 NONAME ; generated "attrset" @13 NONAME ; generated "attr_get" @14 NONAME ; generated ; "attr_off" @15 NONAME ; implemented << NO!! ; "attr_on" @16 NONAME ; implemented << NO!! "attr_set" @17 NONAME ; generated "baudrate" @18 NONAME ; implemented "beep" @19 NONAME ; implemented "bkgd" @20 NONAME ; generated "bkgdset" @21 NONAME ; generated ; "bkgrndset" @22 NONAME ; missing ; "bkgrnd" @23 NONAME ; missing "border" @24 NONAME ; generated ; "border_set" @25 NONAME ; missing "box" @26 NONAME ; generated ; "box_set" @27 NONAME ; missing "can_change_color" @28 NONAME ; implemented "cbreak" @29 NONAME ; implemented "chgat" @30 NONAME ; generated "clear" @31 NONAME ; generated "clearok" @32 NONAME ; implemented "clrtobot" @33 NONAME ; generated "clrtoeol" @34 NONAME ; generated "color_content" @35 NONAME ; implemented "COLOR_PAIR" @36 NONAME ; generated "copywin" @37 NONAME ; implemented "curs_set" @38 NONAME ; implemented "def_prog_mode" @39 NONAME ; implemented "def_shell_mode" @40 NONAME ; implemented "delay_output" @41 NONAME ; implemented "delch" @42 NONAME ; generated "delscreen" @43 NONAME ; implemented "delwin" @44 NONAME ; implemented "deleteln" @45 NONAME ; generated "derwin" @46 NONAME ; implemented "doupdate" @47 NONAME ; implemented "dupwin" @48 NONAME ; implemented "echo" @49 NONAME ; implemented "echochar" @50 NONAME ; generated ; "echo_wchar" @51 NONAME ; missing "endwin" @52 NONAME ; implemented "erasechar" @53 NONAME ; implemented ; "erase_wchar" @54 NONAME ; missing "filter" @55 NONAME ; implemented "flash" @56 NONAME ; implemented "flushinp" @57 NONAME ; implemented ; "getbkgd" @58 NONAME ; missing ; "getbkgrnd" @59 NONAME ; missing ; "getcchar" @60 NONAME ; missing "getch" @61 NONAME ; generated "getnstr" @62 NONAME ; generated ; "getn_wstr" @63 NONAME ; missing "getstr" @64 NONAME ; generated ; "get_wch" @65 NONAME ; missing "getwin" @66 NONAME ; not in XPG4 ; "get_wstr" @67 NONAME ; missing "halfdelay" @68 NONAME ; implemented "has_colors" @69 NONAME ; implemented "has_ic" @70 NONAME ; implemented "has_il" @71 NONAME ; implemented "hline" @72 NONAME ; generated ; "hline_set" @73 NONAME ; missing "idcok" @74 NONAME ; implemented "idlok" @75 NONAME ; implemented "immedok" @76 NONAME ; implemented "inch" @77 NONAME ; generated "inchnstr" @78 NONAME ; generated "inchstr" @79 NONAME ; generated "initscr" @80 NONAME ; implemented "init_color" @81 NONAME ; implemented "init_pair" @82 NONAME ; implemented "innstr" @83 NONAME ; generated ; "innwstr" @84 NONAME ; missing "insch" @85 NONAME ; generated "insdelln" @86 NONAME ; generated "insertln" @87 NONAME ; generated "insnstr" @88 NONAME ; generated "insstr" @89 NONAME ; generated "instr" @90 NONAME ; generated ; "ins_nwstr" @91 NONAME ; missing ; "ins_wch" @92 NONAME ; missing ; "ins_wstr" @93 NONAME ; missing "intrflush" @94 NONAME ; implemented ; "inwstr" @95 NONAME ; missing ; "in_wch" @96 NONAME ; missing ; "in_wchstr" @97 NONAME ; missing ; "in_wchntr" @98 NONAME ; missing "isendwin" @99 NONAME ; implemented "is_linetouched" @100 NONAME ; implemented "is_wintouched" @101 NONAME ; implemented "keyname" @102 NONAME ; implemented ; "key_name" @103 NONAME ; missing "keypad" @104 NONAME ; implemented "killchar" @105 NONAME ; implemented ; "killwchar" @106 NONAME ; missing "leaveok" @107 NONAME ; implemented "longname" @108 NONAME ; implemented "meta" @109 NONAME ; implemented "move" @110 NONAME ; generated "mvaddch" @111 NONAME ; generated "mvaddchnstr" @112 NONAME ; generated "mvaddchstr" @113 NONAME ; generated "mvaddnstr" @114 NONAME ; generated "mvaddstr" @115 NONAME ; generated ; "mvaddnwstr" @116 NONAME ; missing ; "mvaddwstr" @117 NONAME ; missing ; "mvadd_wch" @118 NONAME ; missing ; "mvadd_wchnstr" @119 NONAME ; missing ; "mvadd_wchstr" @120 NONAME ; missing "mvchgat" @121 NONAME ; generated "mvcur" @122 NONAME ; implemented "mvdelch" @123 NONAME ; generated "mvderwin" @124 NONAME ; implemented "mvgetch" @125 NONAME ; generated "mvgetnstr" @126 NONAME ; generated ; "mvgetn_wstr" @127 NONAME ; missing "mvgetstr" @128 NONAME ; generated ; "mvget_wch" @129 NONAME ; missing ; "mvget_wstr" @130 NONAME ; missing "mvhline" @131 NONAME ; generated ; "mvhline_set" @132 NONAME ; missing "mvinch" @133 NONAME ; generated "mvinchnstr" @134 NONAME ; generated "mvinchstr" @135 NONAME ; generated "mvinnstr" @136 NONAME ; generated ; "mvinnwstr" @137 NONAME ; missing "mvinsch" @138 NONAME ; generated "mvinsnstr" @139 NONAME ; generated "mvinsstr" @140 NONAME ; generated "mvinstr" @141 NONAME ; generated ; "mvins_nwstr" @142 NONAME ; missing ; "mvins_wch" @143 NONAME ; missing ; "mvins_wstr" @144 NONAME ; missing ; "mvinwstr" @145 NONAME ; missing ; "mvin_wch" @146 NONAME ; missing ; "mvin_wchstr" @147 NONAME ; missing ; "mvin_wchntr" @148 NONAME ; missing "mvprintw" @149 NONAME ; implemented "mvscanw" @150 NONAME ; implemented "mvvline" @151 NONAME ; generated ; "mvvline_set" @152 NONAME ; missing "mvwaddch" @153 NONAME ; generated "mvwaddchnstr" @154 NONAME ; generated "mvwaddchstr" @155 NONAME ; generated "mvwaddnstr" @156 NONAME ; generated "mvwaddstr" @157 NONAME ; generated ; "mvwaddnwstr" @158 NONAME ; missing ; "mvwaddwstr" @159 NONAME ; missing ; "mvwadd_wch" @160 NONAME ; missing ; "mvwadd_wchnstr" @161 NONAME ; missing ; "mvwadd_wchstr" @162 NONAME ; missing "mvwchgat" @163 NONAME ; generated "mvwdelch" @164 NONAME ; generated "mvwgetch" @165 NONAME ; generated "mvwgetnstr" @166 NONAME ; generated ; "mvwgetn_wstr" @167 NONAME ; missing "mvwgetstr" @168 NONAME ; generated ; "mvwget_wch" @169 NONAME ; missing ; "mvwget_wstr" @170 NONAME ; missing "mvwhline" @171 NONAME ; generated ; "mvwhline_set" @172 NONAME ; missing "mvwin" @173 NONAME ; implemented "mvwinch" @174 NONAME ; generated "mvwinchnstr" @175 NONAME ; generated "mvwinchstr" @176 NONAME ; generated "mvwinnstr" @177 NONAME ; generated ; "mvwinnwstr" @178 NONAME ; missing "mvwinsch" @179 NONAME ; generated "mvwinsnstr" @180 NONAME ; generated "mvwinsstr" @181 NONAME ; generated "mvwinstr" @182 NONAME ; generated ; "mvwins_nwstr" @183 NONAME ; missing ; "mvwins_wch" @184 NONAME ; missing ; "mvwins_wstr" @185 NONAME ; missing ; "mvwinwstr" @186 NONAME ; missing ; "mvwin_wch" @187 NONAME ; missing ; "mvwin_wchnstr" @188 NONAME ; missing ; "mvwin_wchstr" @189 NONAME ; missing "mvwprintw" @190 NONAME ; implemented "mvwscanw" @191 NONAME ; implemented "mvwvline" @192 NONAME ; generated ; "mvwvline_set" @193 NONAME ; missing "napms" @194 NONAME ; implemented "newpad" @195 NONAME ; implemented "newterm" @196 NONAME ; implemented "newwin" @197 NONAME ; implemented "nl" @198 NONAME ; implemented "nocbreak" @199 NONAME ; implemented "nodelay" @200 NONAME ; implemented "noecho" @201 NONAME ; implemented "nonl" @202 NONAME ; implemented "noqiflush" @203 NONAME ; implemented "noraw" @204 NONAME ; implemented "notimeout" @205 NONAME ; implemented "overlay" @206 NONAME ; implemented "overwrite" @207 NONAME ; implemented "pair_content" @208 NONAME ; implemented "PAIR_NUMBER" @209 NONAME ; generated "pechochar" @210 NONAME ; implemented ; "pecho_wchar" @211 NONAME ; missing "pnoutrefresh" @212 NONAME ; implemented "prefresh" @213 NONAME ; implemented "printw" @214 NONAME ; implemented "putp" @215 NONAME ; implemented "putwin" @216 NONAME ; implemented "qiflush" @217 NONAME ; implemented "raw" @218 NONAME ; implemented "redrawwin" @219 NONAME ; generated "refresh" @220 NONAME ; generated "resetty" @221 NONAME ; implemented "reset_prog_mode" @222 NONAME ; implemented "reset_shell_mode" @223 NONAME ; implemented "ripoffline" @224 NONAME ; implemented "savetty" @225 NONAME ; implemented "scanw" @226 NONAME ; implemented "scr_dump" @227 NONAME ; implemented "scr_init" @228 NONAME ; implemented "scrl" @229 NONAME ; generated "scroll" @230 NONAME ; generated "scrollok" @231 NONAME ; implemented "scr_restore" @232 NONAME ; implemented "scr_set" @233 NONAME ; implemented ; "setcchar" @234 NONAME ; missing "setscrreg" @235 NONAME ; generated "set_term" @236 NONAME ; implemented "slk_attroff" @237 NONAME ; implemented ; "slk_attr_off" @238 NONAME ; missing "slk_attron" @239 NONAME ; implemented ; "slk_attr_on" @240 NONAME ; missing "slk_attrset" @241 NONAME ; implemented ; "slk_attr_set" @242 NONAME ; missing "slk_clear" @243 NONAME ; implemented "slk_init" @244 NONAME ; implemented "slk_label" @245 NONAME ; implemented "slk_noutrefresh" @246 NONAME ; implemented "slk_refresh" @247 NONAME ; implemented "slk_restore" @248 NONAME ; implemented "slk_set" @249 NONAME ; implemented "slk_touch" @250 NONAME ; implemented ; "slk_wset" @251 NONAME ; missing "standout" @252 NONAME ; generated "standend" @253 NONAME ; generated "start_color" @254 NONAME ; implemented "subpad" @255 NONAME ; implemented "subwin" @256 NONAME ; implemented "syncok" @257 NONAME ; implemented "termattrs" @258 NONAME ; implemented "termname" @259 NONAME ; implemented "tigetflag" @260 NONAME ; implemented "tigetnum" @261 NONAME ; implemented "tigetstr" @262 NONAME ; implemented ; "timeout" @263 NONAME ; implemented << NO!! "typeahead" @264 NONAME ; implemented "ungetch" @265 NONAME ; implemented ; "unget_wch" @266 NONAME ; missing "untouchwin" @267 NONAME ; generated "use_env" @268 NONAME ; implemented "vidattr" @269 NONAME ; implemented ; "vid_attr" @270 NONAME ; missing "vidputs" @271 NONAME ; implemented ; "vid_puts" @272 NONAME ; missing "vline" @273 NONAME ; generated ; "vline_set" @274 NONAME ; missing "vwprintw" @275 NONAME ; implemented ; "vw_printw" @276 NONAME ; implemented << NO!! "vwscanw" @277 NONAME ; implemented ; "vw_scanw" @278 NONAME ; implemented << NO!! "waddch" @279 NONAME ; implemented "waddchnstr" @280 NONAME ; implemented "waddchstr" @281 NONAME ; generated "waddnstr" @282 NONAME ; implemented "waddstr" @283 NONAME ; generated ; "waddwstr" @284 NONAME ; missing ; "wadd_wch" @285 NONAME ; missing ; "wadd_wchnstr" @286 NONAME ; missing ; "wadd_wchstr" @287 NONAME ; missing "wattron" @288 NONAME ; generated "wattroff" @289 NONAME ; generated "wattrset" @290 NONAME ; generated "wattr_get" @291 NONAME ; generated "wattr_on" @292 NONAME ; implemented "wattr_off" @293 NONAME ; implemented ; "wattr_set" @294 NONAME ; implemented << NO!! "wbkgd" @295 NONAME ; implemented "wbkgdset" @296 NONAME ; generated ; "wbkgrndset" @297 NONAME ; missing ; "wbkgrnd" @298 NONAME ; missing "wborder" @299 NONAME ; implemented ; "wborder_set" @300 NONAME ; missing "wchgat" @301 NONAME ; implemented "wclear" @302 NONAME ; implemented "wclrtobot" @303 NONAME ; implemented "wclrtoeol" @304 NONAME ; implemented "wcursyncup" @305 NONAME ; implemented "wdelch" @306 NONAME ; implemented "wdeleteln" @307 NONAME ; generated "wechochar" @308 NONAME ; implemented ; "wecho_wchar" @309 NONAME ; missing "werase" @310 NONAME ; implemented ; "wgetbkgrnd" @311 NONAME ; missing "wgetch" @312 NONAME ; implemented "wgetnstr" @313 NONAME ; implemented ; "wgetn_wstr" @314 NONAME ; missing "wgetstr" @315 NONAME ; generated ; "wget_wch" @316 NONAME ; missing ; "wget_wstr" @317 NONAME ; missing "whline" @318 NONAME ; implemented ; "whline_set" @319 NONAME ; missing "winch" @320 NONAME ; generated "winchnstr" @321 NONAME ; implemented "winchstr" @322 NONAME ; generated "winnstr" @323 NONAME ; implemented ; "winnwstr" @324 NONAME ; missing "winsch" @325 NONAME ; implemented "winsdelln" @326 NONAME ; implemented "winsertln" @327 NONAME ; generated "winsnstr" @328 NONAME ; implemented "winsstr" @329 NONAME ; generated "winstr" @330 NONAME ; generated ; "wins_nwstr" @331 NONAME ; missing ; "wins_wch" @332 NONAME ; missing ; "wins_wstr" @333 NONAME ; missing ; "winwstr" @334 NONAME ; missing ; "win_wch" @335 NONAME ; missing ; "win_wchnstr" @336 NONAME ; missing ; "win_wchstr" @337 NONAME ; missing "wmove" @338 NONAME ; implemented "wnoutrefresh" @339 NONAME ; implemented "wprintw" @340 NONAME ; implemented "wredrawln" @341 NONAME ; implemented "wrefresh" @342 NONAME ; implemented "wresize" @343 NONAME ; implemented "wscanw" @344 NONAME ; implemented "wscrl" @345 NONAME ; implemented "wsetscrreg" @346 NONAME ; implemented "wstandout" @347 NONAME ; generated "wstandend" @348 NONAME ; generated "wsyncdown" @349 NONAME ; implemented "wsyncup" @350 NONAME ; implemented "wtimeout" @351 NONAME ; implemented "wtouchln" @352 NONAME ; implemented ; "wunctrl" @353 NONAME ; missing "wvline" @354 NONAME ; implemented ; "wvline_set" @355 NONAME ; missing "getmouse" @356 NONAME "ungetmouse" @357 NONAME "mousemask" @358 NONAME "wenclose" @359 NONAME "mouseinterval" @360 NONAME ; from unctrl.h "unctrl" @361 NONAME ; publics for tracing "_tracef" @400 NONAME "_tracedump" @401 NONAME "_traceattr" @402 NONAME "_tracechar" @403 NONAME "_tracemouse" @404 NONAME "trace" @405 NONAME ;********** ;* term.h * ;********** "boolnames" @600 NONAME ; variable "boolcodes" @601 NONAME ; variable "boolfnames" @602 NONAME ; variable "numnames" @603 NONAME ; variable "numcodes" @604 NONAME ; variable "numfnames" @605 NONAME ; variable "strnames" @606 NONAME ; variable "strcodes" @608 NONAME ; variable "strfnames" @609 NONAME ; variable ; internals "_nc_read_entry" @620 NONAME "_nc_read_file_entry" @621 NONAME "_nc_first_name" @622 NONAME "_nc_name_match" @623 NONAME "_nc_read_termcap_entry" @624 NONAME "_nc_fallback" @625 NONAME ; entry points "set_curterm" @640 NONAME "del_curterm" @641 NONAME ; entry points ; "putp" @642 NONAME ; already defined "restartterm" @643 NONAME "setupterm" @644 NONAME "tgetent" @645 NONAME "tgetflag" @646 NONAME "tgetnum" @647 NONAME "tgetstr" @648 NONAME "tgoto" @649 NONAME ; "tigetflag" @650 NONAME ; already defined ; "tigetnum" @651 NONAME ; already defined ; "tigetstr" @652 NONAME ; already defined "tparm" @653 NONAME "tparam" @654 NONAME "tputs" @655 NONAME ;************* ;* termcap.h * ;************* ; the functions are already defined in term.h "PC" @660 NONAME "UP" @661 NONAME "BC" @662 NONAME "ospeed" @663 NONAME ;**************** ;* term_entry.h * ;**************** "_nc_head" @700 NONAME "_nc_tail" @701 NONAME ; alloc_entry.c: elementary allocation code "_nc_init_entry" @702 NONAME "_nc_save_str" @703 NONAME "_nc_merge_entry" @704 NONAME "_nc_wrap_entry" @705 NONAME ; parse_entry.c: entry-parsing code "_nc_parse_entry" @706 NONAME "_nc_capcmp" @707 NONAME ; write_entry.c: writing an entry to the file system "_nc_write_entry" @708 NONAME ; comp_parse.c: entry list handling "_nc_read_entry_source" @709 NONAME "_nc_entry_match" @710 NONAME "_nc_resolve_uses" @711 NONAME "_nc_free_entries" @712 NONAME ;********* ;* tic.h * ;********* ; "_nc_tracing" @800 NONAME ; defined below ; "_nc_tracef" @801 NONAME ; missing ; "_nc_visbuf" @802 NONAME ; defined below "_nc_curr_token" @803 NONAME "_nc_info_hash_table" @804 NONAME "_nc_cap_hash_table" @805 NONAME "_nc_capalias_table" @806 NONAME "_nc_infoalias_table" @807 NONAME "_nc_get_table" @808 NONAME ; comp_hash.c: name lookup "_nc_find_entry" @809 NONAME "_nc_find_type_entry" @810 NONAME ; comp_scan.c: lexical analysis "_nc_get_token" @811 NONAME "_nc_push_token" @812 NONAME "_nc_reset_input" @813 NONAME "_nc_panic_mode" @814 NONAME "_nc_curr_line" @815 NONAME "_nc_curr_col" @816 NONAME "_nc_curr_file_pos" @817 NONAME "_nc_comment_start" @818 NONAME "_nc_comment_end" @819 NONAME "_nc_syntax" @820 NONAME "_nc_start_line" @821 NONAME ; comp_error.c: warning & abort messages "_nc_set_source" @822 NONAME "_nc_get_type" @823 NONAME "_nc_set_type" @824 NONAME "_nc_syserr_abort" @825 NONAME "_nc_err_abort" @826 NONAME "_nc_warning" @827 NONAME "_nc_suppress_warnings" @828 NONAME ; captoinfo.c: capability conversion "_nc_captoinfo" @829 NONAME "_nc_infotocap" @830 NONAME ; comp_main.c: compiler main ; "_nc_progname" @831 NONAME ; no need to export it ; ***************** ; NCurses internals -- just for progs/*.exe and the library itself. ; ***************** ; For broken linkers ; "_nc_screen" @1000 NONAME ; "_nc_alloc_screen" @1001 NONAME ; "_nc_set_screen" @1002 NONAME ; For not so broken linkers "SP" @1003 NONAME ; Who knows what this is for "_slk_init" @1004 NONAME "slk_initialize" @1005 NONAME ; Tracing -- all functions used internally "_nc_tracing" @1010 NONAME "_nc_tputs_trace" @1011 NONAME "_nc_visbuf" @1012 NONAME ; lib_acs.c "init_acs" @1013 NONAME ; lib_mvcur.c "_nc_mvcur_init" @1014 NONAME "_nc_mvcur_wrap" @1015 NONAME "_nc_mvcur_scrolln" @1016 NONAME ; lib_mouse.c "_nc_mouse_init" @1017 NONAME "_nc_mouse_event" @1018 NONAME "_nc_mouse_inline" @1019 NONAME "_nc_mouse_parse" @1020 NONAME "_nc_mouse_wrap" @1021 NONAME "_nc_mouse_resume" @1022 NONAME "_nc_max_click_interval" @1023 NONAME ; elsewhere ... "_nc_keypad" @1024 NONAME "_nc_makenew" @1025 NONAME "_nc_outch" @1026 NONAME "_nc_render" @1027 NONAME "_nc_waddch_nosync" @1028 NONAME "_nc_scroll_optimize" @1029 NONAME "_nc_scroll_window" @1030 NONAME "_nc_setupscreen" @1031 NONAME "_nc_backspace" @1032 NONAME "_nc_outstr" @1033 NONAME "_nc_signal_handler" @1034 NONAME "_nc_synchook" @1035 NONAME "_nc_timed_wait" @1036 NONAME "_nc_do_color" @1037 NONAME ncurses-6.0-20160213/misc/makellib0000755000175100001440000001101007176643406015123 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 1998,2000 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996,1997,2000 # # $Id: makellib,v 1.8 2000/10/28 21:37:10 tom Exp $ # System-dependent wrapper for 'lint' that creates a lint-library via the # following method (XXX is the name of the library): # a. If the file llib-lXXX doesn't exist, create it using the make-rule # b. Process llib-lXXX with the system's lint utility, making # llib-lXXX.ln # c. Install llib-lXXX.ln in the lib directory. # # Using the intermediate file llib-lXXX bypasses a weakness of lint (passing # through warning messages from the original source-files). # # There are two drawbacks to this approach: # a. On a few systems, you'll have to manually-edit the llib-lXXX file # to get a usable lint-library (not all C-preprocessors work well). # b. The system's lint utility won't recognize -lXXX as a lint-library # (Use tdlint as a wrapper; it's designed for this). # # Parameters: # $1 = library name # $* = C-preprocessor options # ARCH=`uname -s` if test "x$ARCH" = "xSunOS" ; then case `uname -r` in 5.*) ARCH=Solaris ;; esac fi # DST="$HOME/lib/$ARCH/lint" OPT="" LLIB="" llib="" # while test $# != 0 do case $1 in -L*) DST="$DST `echo $1|sed -e 's/^-L//'`" ;; -*) OPT="$OPT $1" ;; *) if test -z "$LLIB" then LLIB=$1 else llib=llib-l$1 fi ;; esac shift done if test -z "$LLIB" then echo '? no library name specified' exit 1 elif test -z "$llib" then llib="llib-l$LLIB" fi if test ! -f $llib ; then if ( make $llib ) then : else exit 1 fi fi rm -f $llib.ln $llib.c TARGET=$LLIB case "$ARCH" in AIX) CREATE="-uvxo$LLIB -Nn4000" TARGET=$llib.c ln $llib $TARGET ;; Solaris) CREATE="-C$llib" TARGET=$llib.c ln $llib $TARGET ;; FreeBSD) CREATE="-g -z -C$LLIB" TARGET=$llib.c ln $llib $TARGET ;; CLIX) CREATE="-DLINTLIBRARY -vxo$LLIB" TARGET=$llib.c ln $llib $TARGET ;; IRIX*) CREATE="-DLINTLIBRARY -vxyo$LLIB" TARGET=$llib.c ln $llib $TARGET ;; UNIX_SV) CREATE="-DLINTLIBRARY -vxyo$LLIB" TARGET=$llib.c ln $llib $TARGET ;; *) echo "Sorry. I do not know how to build a lint-library for $ARCH" exit 1 esac echo OPT "$OPT" echo TARGET "$TARGET" echo LIBNAME "$llib" if ( lint $CREATE $OPT $TARGET ) then if test -f $llib.ln then for p in $HOME/lib $HOME/lib/$ARCH $HOME/lib/$ARCH/lint do if test ! -d $p then mkdir $p fi done for p in $DST do cp $llib.ln $p/ done rm -f $llib.ln fi fi if test "x$TARGET" = "x$llib.c" ; then rm -f $TARGET fi ncurses-6.0-20160213/misc/tdlint0000755000175100001440000000647207176636320014656 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 1998 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996 # # $Id: tdlint,v 1.5 2000/10/28 20:53:36 tom Exp $ # # Lint-script that allows user's own lint libraries, in addition to the ones # installed in the system. # OPT="" DIRS="" LIBS="" FILES="" ARCH=`uname -s` if test -z "$ARCH" ; then echo '? uname not found' exit 1 else case $ARCH in AIX) set - $* -Nn4000 ;; IRIX) set - $* -n -lc ;; FreeBSD) set - $* -g -p -u -v -z ;; SunOS) case `uname -r` in 5.*) ARCH=Solaris set - $* -n -lc ;; esac ;; esac fi # LIBDIR=$HOME/lib/$ARCH/lint ;export LIBDIR for p in $HOME/lib/$ARCH/lint /usr/lib/lint /usr/lib do if [ -d $p ] then DIRS="$DIRS $p" fi done # while [ $# != 0 ] do case $1 in -D*\"*) ;; -L*) DIRS="`echo $1|sed -e 's/^-L//'` $DIRS" ;; -l*) lib="llib-l`echo $1 | sed -e 's/^-l//'`.ln" found=no for p in $DIRS do echo -n testing $p/$lib if [ -f $p/$lib ] then LIBS="$LIBS $p/$lib" echo " (ok)" found=yes break fi echo done if [ $found = no ] then echo "ignored library $1" fi ;; -n) if [ -z "$OPT" ] then OPT="-I." fi OPT="$OPT $1" ;; -*) OPT="$OPT $1" ;; *) FILES="$FILES $1" ;; esac shift done # eval lint $OPT $FILES $LIBS ncurses-6.0-20160213/misc/menu.def0000644000175100001440000000445407130475212015043 0ustar tomusersLIBRARY menu5 INITINSTANCE TERMINSTANCE DESCRIPTION "NCurses-5-1-20000704, module menu" CODE LOADONCALL DATA LOADONCALL NONSHARED MULTIPLE EXPORTS "_nc_Calculate_Item_Length_and_Width" @11 NONAME "_nc_Connect_Items" @38 NONAME "_nc_Default_Item" @63 NONAME "_nc_Default_Menu" @64 NONAME "_nc_Disconnect_Items" @65 NONAME "_nc_Draw_Menu" @66 NONAME "_nc_Link_Items" @67 NONAME "_nc_Match_Next_Character_In_Item_Name" @68 NONAME "_nc_New_TopRow_and_CurrentItem" @69 NONAME "_nc_Post_Item" @70 NONAME "_nc_Show_Menu" @71 NONAME "_nc_menu_cursor_pos" @72 NONAME "current_item" @2 NONAME "free_item" @23 NONAME "free_menu" @24 NONAME "item_count" @25 NONAME "item_description" @14 NONAME "item_index" @26 NONAME "item_init" @7 NONAME "item_name" @15 NONAME "item_opts" @5 NONAME "item_opts_off" @27 NONAME "item_opts_on" @28 NONAME "item_term" @8 NONAME "item_userptr" @18 NONAME "item_value" @60 NONAME "item_visible" @61 NONAME "menu_back" @20 NONAME "menu_driver" @29 NONAME "menu_fore" @21 NONAME "menu_format" @62 NONAME "menu_grey" @22 NONAME "menu_init" @9 NONAME "menu_items" @1 NONAME "menu_mark" @16 NONAME "menu_opts" @6 NONAME "menu_opts_off" @30 NONAME "menu_opts_on" @31 NONAME "menu_pad" @32 NONAME "menu_pattern" @17 NONAME "menu_request_by_name" @73 NONAME "menu_request_name" @74 NONAME "menu_spacing" @75 NONAME "menu_sub" @12 NONAME "menu_term" @10 NONAME "menu_userptr" @19 NONAME "menu_win" @13 NONAME "new_item" @3 NONAME "new_menu" @4 NONAME "pos_menu_cursor" @33 NONAME "post_menu" @34 NONAME "scale_menu" @35 NONAME "set_current_item" @36 NONAME "set_item_init" @37 NONAME "set_item_opts" @39 NONAME "set_item_term" @40 NONAME "set_item_userptr" @41 NONAME "set_item_value" @42 NONAME "set_menu_back" @43 NONAME "set_menu_fore" @44 NONAME "set_menu_format" @45 NONAME "set_menu_grey" @46 NONAME "set_menu_init" @47 NONAME "set_menu_items" @48 NONAME "set_menu_mark" @49 NONAME "set_menu_opts" @50 NONAME "set_menu_pad" @51 NONAME "set_menu_pattern" @52 NONAME "set_menu_spacing" @76 NONAME "set_menu_sub" @53 NONAME "set_menu_term" @54 NONAME "set_menu_userptr" @55 NONAME "set_menu_win" @56 NONAME "set_top_row" @57 NONAME "top_row" @58 NONAME "unpost_menu" @59 NONAME ncurses-6.0-20160213/misc/terminfo.src0000644000175100001440000374416612646557566016016 0ustar tomusers######## TERMINAL TYPE DESCRIPTIONS SOURCE FILE # # This version of terminfo.src is distributed with ncurses and is maintained # by Thomas E. Dickey (TD). # # Report bugs and new terminal descriptions to # bug-ncurses@gnu.org # # $Revision: 1.561 $ # $Date: 2016/01/17 00:25:26 $ # # The original header is preserved below for reference. It is noted that there # is a "newer" version which differs in some cosmetic details (but actually # stopped updates several years ago); we have decided to not change the header # unless there is also a change in content. # # To further muddy the waters, it is noted that changes to this file as part of # maintenance of ncurses (since 1996) are generally conceded to be copyright # under the ncurses MIT-style license. That was the effect of the agreement # which the principal authors of ncurses made in 1998. However, since much of # the file itself is of unknown authorship (and the disclaimer below makes it # obvious that Raymond cannot or will not convey rights over those parts), # there is no explicit copyright notice on the file itself. # # It would also be a nuisance to split the file into unknown/known authorship # and move pieces as they are maintained, since many of the maintenance changes # have been small corrections to Raymond's translations to/from termcap format, # correcting the data but not the accompanying annotations. # # In any case, note that almost half of this file is not data but annotations # which reflect creative effort. Furthermore, the structure of entries to # reuse common chunks also is creative (and subject to copyright). Finally, # some portions of the data are derivative work under a compatible MIT-style # license from xterm. # #------------------------------------------------------------------------------ # Version 10.2.1 # terminfo syntax # # Eric S. Raymond (current maintainer) # John Kunze, Berkeley # Craig Leres, Berkeley # # Please e-mail changes to terminfo@thyrsus.com; the old termcap@berkeley.edu # address is no longer valid. The latest version can always be found at # . # # PURPOSE OF THIS FILE: # # This file describes the capabilities of various character-cell terminals, # as needed by software such as screen-oriented editors. # # Other terminfo and termcap files exist, supported by various OS vendors # or as relics of various older versions of UNIX. This one is the longest # and most comprehensive one in existence. It subsumes not only the entirety # of the historical 4.4BSD, GNU, System V and SCO termcap files and the BRL # termcap file, but also large numbers of vendor-maintained termcap and # terminfo entries more complete and carefully tested than those in historical # termcap/terminfo versions. # # Pointers to related resources (including the ncurses distribution) may # be found at . # # INTERNATIONALIZATION: # # This file uses only the US-ASCII character set (no ISO8859 characters). # # This file assumes a US-ASCII character set. If you need to fix this, start # by global-replacing \E(B and \E)B with the appropriate ISO 6429 enablers # for your character set. \E(A and \E)A enables the British character set # with the pound sign at position 2/3. # # In a Japanese-processing environment using EUC/Japanese or Shift-JIS, # C1 characters are considered the first-byte set of the Japanese encodings, # so \E)0 should be avoided in and initialization strings. # # FILE FORMAT: # # The version you are looking at may be in any of three formats: master # (terminfo with OT capabilities), stock terminfo, or termcap. You can tell # which by the format given in the header above. # # The master format is accepted and generated by the terminfo tools in the # ncurses suite; it differs from stock (System V-compatible) terminfo only # in that it admits a group of capabilities (prefixed `OT') equivalent to # various obsolete termcap capabilities. You can, thus, convert from master # to stock terminfo simply by filtering with `sed "/OT[^,]*,/s///"'; but if # you have ncurses `tic -I' is nicer (among other things, it automatically # outputs entries in a canonical form). # # The termcap version is generated automatically from the master version # using tic -C. This filtering leaves in the OT capabilities under their # original termcap names. All translated entries fit within the 1023-byte # string-table limit of archaic termcap libraries except where explicitly # noted below. Note that the termcap translation assumes that your termcap # library can handle multiple tc capabilities in an entry. 4.4BSD has this # capability. Older versions of GNU termcap, through 1.3, do not. # # For details on these formats, see terminfo(5) in the ncurses distribution, # and termcap(5) in the 4.4BSD Unix Programmer's Manual. Be aware that 4.4BSD # curses has been declared obsolete by the caretakers of the 4.4BSD sources # as of June 1995; they are encouraging everyone to migrate to ncurses. # # Note: unlike some other distributed terminfo files (Novell Unix & SCO's), # no entry in this file has embedded comments. This is so source translation # to termcap only has to carry over leading comments. Also, no name field # contains embedded whitespace (such whitespace confuses rdist). # # Further note: older versions of this file were often installed with an editor # script (reorder) that moved the most common terminal types to the front of # the file. This should no longer be necessary, as the file is now ordered # roughly by type frequency with ANSI/VT100 and other common types up front. # # Some information has been merged in from terminfo files distributed by # USL and SCO (see COPYRIGHTS AND OTHER DELUSIONS below). Much information # comes from vendors who maintain official terminfos for their hardware # (notably DEC and Wyse). # # A detailed change history is included at the end of this file. # # FILE ORGANIZATION: # # Comments in this file begin with # - they cannot appear in the middle # of a terminfo/termcap entry (this feature had to be sacrificed in order # to allow standard terminfo and termcap syntax to be generated cleanly from # the master format). Individual capabilities are commented out by # placing a period between the colon and the capability name. # # The file is divided up into major sections (headed by lines beginning with # the string "########") and minor sections (beginning with "####"); do # # grep "^####" | more # # to see a listing of section headings. The intent of the divisions is # (a) to make it easier to find things, and (b) to order the database so # that important and frequently-encountered terminal types are near the # front (so that you'll get reasonable search efficiency from a linear # search of the termcap form even if you don't use reorder). Minor sections # usually correspond to manufacturers or standard terminal classes. # Parenthesized words following manufacturer names are type prefixes or # product line names used by that manufacturers. # # HOW TO READ THE ENTRIES: # # The first name in an entry is the canonical name for the model or # type, last entry is a verbose description. Others are mnemonic synonyms for # the terminal. # # Terminal names look like - # The part to the left of the dash, if a dash is present, describes the # particular hardware of the terminal. The part to the right may be used # for flags indicating special ROMs, extra memory, particular terminal modes, # or user preferences. # # All names should be in lower case, for consistency in typing. # # The following are conventionally used suffixes: # -2p Has two pages of memory. Likewise 4p, 8p, etc. # -am Enable auto-margin. # -m Monochrome. Suppress color support # -mc Magic-cookie. Some terminals (notably older Wyses) can # only support one attribute without magic-cookie lossage. # Their base entry is usually paired with another that # uses magic cookies to support multiple attributes. # -nam No auto-margin - suppress capability # -nl No labels - suppress soft labels # -ns No status line - suppress status line # -rv Terminal in reverse video mode (black on white) # -s Enable status line. # -vb Use visible bell () rather than . # -w Wide - in 132 column mode. # If a name has multiple suffixes and one is a line height, that one should # go first. Thus `aaa-30-s-rv' is recommended over `aaa-s-rv-30'. # # Entries with embedded plus signs are designed to be included through use/tc # capabilities, not used as standalone entries. # # To avoid search clashes, some older all-numeric names for terminals have # been removed (i.e., "33" for the Model 33 Teletype, "2621" for the HP2621). # All primary names of terminals now have alphanumeric prefixes. # # Comments marked "esr" are mostly results of applying the termcap-compiler # code packaged with ncurses and contemplating the resulting error messages. # In many cases, these indicated obvious fixes to syntax garbled by the # composers. In a few cases, I was able to deduce corrected forms for garbled # capabilities by looking at context. All the information in the original # entries is preserved in the comments. # # In the comments, terminfo capability names are bracketed with <> (angle # brackets). Termcap capability names are bracketed with :: (colons). # # INTERPRETATION OF USER CAPABILITIES # # The System V Release 4 and XPG4 terminfo format defines ten string # capabilities for use by applications, .... In this file, we use # certain of these capabilities to describe functions which are not covered # by terminfo. The mapping is as follows: # # u9 terminal enquire string (equiv. to ANSI/ECMA-48 DA) # u8 terminal answerback description # u7 cursor position request (equiv. to VT100/ANSI/ECMA-48 DSR 6) # u6 cursor position report (equiv. to ANSI/ECMA-48 CPR) # # The terminal enquire string should elicit an answerback response # from the terminal. Common values for will be ^E (on older ASCII # terminals) or \E[c (on newer VT100/ANSI/ECMA-48-compatible terminals). # # The cursor position request () string should elicit a cursor position # report. A typical value (for VT100 terminals) is \E[6n. # # The terminal answerback description (u8) must consist of an expected # answerback string. The string may contain the following scanf(3)-like # escapes: # # %c Accept any character # %[...] Accept any number of characters in the given set # # The cursor position report () string must contain two scanf(3)-style # %d format elements. The first of these must correspond to the Y coordinate # and the second to the %d. If the string contains the sequence %i, it is # taken as an instruction to decrement each value after reading it (this is # the inverse sense from the cup string). The typical CPR value is # \E[%i%d;%dR (on VT100/ANSI/ECMA-48-compatible terminals). # # These capabilities are used by tack(1m), the terminfo action checker # (distributed with ncurses 5.0). # # TABSET FILES # # All the entries in this file have been edited to assume that the tabset # files directory is /usr/share/tabset, in conformance with the File Hierarchy # Standard for Linux and open-source BSD systems. Some vendors (notably Sun) # use /usr/lib/tabset or (more recently) /usr/share/lib/tabset. # # No curses package we know of actually uses these files. If their location # is an issue, you will have to hand-patch the file locations before compiling # this file. # # REQUEST FOR CONTACT INFORMATION AND HISTORICAL MATERIAL # # As the ANSI/ECMA-48 standard and variants take firmer hold, and as # character-cell terminals are increasingly replaced by X displays, much of # this file is becoming a historical document (this is part of the reason for # the new organization, which puts ANSI types, xterm, Unix consoles, # and vt100 up front in confidence that this will catch 95% of new hardware). # # For the terminal types still alive, I'd like to have manufacturer's # contact data (Internet address and/or snail-mail + phone). # # I'm also interested in enriching the comments so that the latter portions of # the file do in fact become a potted history of VDT technology as seen by # UNIX hackers. Ideally, I'd like the headers for each manufacturer to # include its live/dead/out-of-the-business status, and for as many # terminal types as possible to be tagged with information like years # of heaviest use, popularity, and interesting features. # # I'm especially interested in identifying the obscure entries listed under # `Miscellaneous obsolete terminals, manufacturers unknown' before the tribal # wisdom about them gets lost. If you know a lot about obscure old terminals, # please go to the terminfo resource page, grab the UFO file (ufo.ti), and # eyeball it for things you can identify and describe. # # If you have been around long enough to contribute, please read the file # with this in mind and send me your annotations. # # COPYRIGHTS AND OTHER DELUSIONS # # The BSD ancestor of this file had a standard Regents of the University of # California copyright with dates from 1980 to 1993. # # Some information has been merged in from a terminfo file SCO distributes. # It has an obnoxious boilerplate copyright which I'm ignoring because they # took so much of the content from the ancestral BSD versions of this file # and didn't attribute it, thereby violating the BSD Regents' copyright. # # Not that anyone should care. However many valid functions copyrights may # serve, putting one on a termcap/terminfo file with hundreds of anonymous # contributors makes about as much sense as copyrighting a wall-full of # graffiti -- it's legally dubious, ethically bogus, and patently ridiculous. # # This file deliberately has no copyright. It belongs to no one and everyone. # If you claim you own it, you will merely succeed in looking like a fool. # Use it as you like. Use it at your own risk. Copy and redistribute freely. # There are no guarantees anywhere. Svaha! # ######## ANSI, UNIX CONSOLE, AND SPECIAL TYPES # # This section describes terminal classes and brands that are still # quite common. # #### Specials # # Special "terminals". These are used to label tty lines when you don't # know what kind of terminal is on it. The characteristics of an unknown # terminal are the lowest common denominator - they look about like a ti 700. # dumb|80-column dumb tty, am, cols#80, bel=^G, cr=^M, cud1=^J, ind=^J, unknown|unknown terminal type, gn, use=dumb, lpr|printer|line printer, OTbs, hc, os, cols#132, lines#66, bel=^G, cr=^M, cub1=^H, cud1=^J, ff=^L, ind=^J, glasstty|classic glass tty interpreting ASCII control characters, OTbs, am, cols#80, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, ht=^I, kcub1=^H, kcud1=^J, nel=^M^J, .kbs=^H, vanilla|dumb tty, OTbs, bel=^G, cr=^M, cud1=^J, ind=^J, # This is almost the same as "dumb", but with no prespecified width. # DEL and ^C are hardcoded to act as kill characters. # ^D acts as a line break (just like newline). # It also interprets # \033];xxx\007 # for compatibility with xterm -TD 9term|Plan9 terminal emulator for X, am, OTnl=^J, bel=^G, cud1=^J, #### ANSI.SYS/ISO 6429/ECMA-48 Capabilities # # See the end-of-file comment for more on these. # # ANSI capabilities are broken up into pieces, so that a terminal # implementing some ANSI subset can use many of them. ansi+local1, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cuu1=\E[A, ansi+local, cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC, cuu=\E[%p1%dA, use=ansi+local1, ansi+tabs, cbt=\E[Z, ht=^I, hts=\EH, tbc=\E[3g, ansi+inittabs, it#8, use=ansi+tabs, ansi+erase, clear=\E[H\E[J, ed=\E[J, el=\E[K, ansi+rca, hpa=\E[%p1%{1}%+%dG, vpa=\E[%p1%{1}%+%dd, ansi+cup, cup=\E[%i%p1%d;%p2%dH, home=\E[H, ansi+rep, rep=%p1%c\E[%p2%{1}%-%db, ansi+idl1, dl1=\E[M, il1=\E[L, ansi+idl, dl=\E[%p1%dM, il=\E[%p1%dL, use=ansi+idl1, ansi+idc, dch1=\E[P, ich=\E[%p1%d@, ich1=\E[@, rmir=\E6, smir=\E6, ansi+arrows, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, ansi+sgr|ansi graphic renditions, blink=\E[5m, invis=\E[8m, rev=\E[7m, sgr=\E[0%?%p3%t;7%;%?%p4%t;5%;%?%p7%t;8%;m, sgr0=\E[0m, ansi+sgrso|ansi standout only, rmso=\E[m, smso=\E[7m, ansi+sgrul|ansi underline only, rmul=\E[m, smul=\E[4m, ansi+sgrbold|ansi graphic renditions; assuming terminal has bold; not dim, bold=\E[1m, sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;%;%?%p7%t8;%;m, use=ansi+sgr, use=ansi+sgrso, use=ansi+sgrul, ansi+sgrdim|ansi graphic renditions; assuming terminal has dim; not bold, dim=\E[2m, sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p5%t2;%;%?%p7%t8;%;m, use=ansi+sgr, use=ansi+sgrso, use=ansi+sgrul, ansi+csr|ansi scroll-region plus cursor save & restore, csr=\E[%i%p1%d;%p2%dr, rc=\E8, sc=\E7, # The normal (ANSI) flavor of "media copy" building block asserts that # characters sent to the printer do not echo on the screen. DEC terminals # can also be put into autoprinter mode, where each line is sent to the # printer as you move off that line, e.g., by a carriage return. ansi+pp|ansi printer port, mc5i, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, dec+pp|DEC autoprinter mode, mc0=\E[i, mc4=\E[?4i, mc5=\E[?5i, # The IBM PC alternate character set. Plug this into any Intel console entry. # We use \E[11m for rmacs rather than \E[12m so the string can use the # ROM graphics for control characters such as the diamond, up- and down-arrow. # This works with the System V, Linux, and BSDI consoles. It's a safe bet this # will work with any Intel console, they all seem to have inherited \E[11m # from the ANSI.SYS de-facto standard. klone+acs|alternate character set for ansi.sys displays, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, rmacs=\E[10m, smacs=\E[11m, # Highlight controls corresponding to the ANSI.SYS standard. Most # console drivers for Intel boxes obey these. Makes the same assumption # about \E[11m as klone+acs. True ANSI/ECMA-48 would have , # , but this isn't a documented feature of ANSI.SYS. klone+sgr|attribute control for ansi.sys displays, blink=\E[5m, bold=\E[1m, rev=\E[7m, rmpch=\E[10m, rmso=\E[m, rmul=\E[m, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p9%t;11%;m, sgr0=\E[0;10m, smpch=\E[11m, smso=\E[7m, smul=\E[4m, use=klone+acs, # Most Intel boxes do not treat "invis" (invisible) text. klone+sgr8|attribute control for ansi.sys displays, invis=\E[8m, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m, use=klone+sgr, # Highlight controls corresponding to the ANSI.SYS standard. *All* # console drivers for Intel boxes obey these. Does not assume \E[11m will # work; uses \E[12m instead, which is pretty bulletproof but loses you the ACS # diamond and arrow characters under curses. klone+sgr-dumb|attribute control for ansi.sys displays (no ESC [ 11 m), blink=\E[5m, bold=\E[1m, invis=\E[8m, rev=\E[7m, rmso=\E[m, rmul=\E[m, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;12%;m, sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m, use=klone+acs, # KOI8-R (RFC1489) acs (alternate character set) # From: Qing Long , 24 Feb 1996. klone+koi8acs|alternate character set for ansi.sys displays with KOI8 charset, acsc=+\020\,\021-\036.^_0\215`\004a\237f\234g\232h\222i\220j\205k\203l\202m\204n\212o\213p\216q\0r\217s\214t\206u\207v\210w\211x\201y\230z\231{\267|\274}L~\225, rmacs=\E[10m, smacs=\E[11m, # ANSI.SYS color control. The setab/setaf caps depend on the coincidence # between SVr4/XPG4's color numbers and ANSI.SYS attributes. Here are longer # but equivalent strings that don't rely on that coincidence: # setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, # setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, # The DOS 5 manual asserts that these sequences meet the ISO 6429 standard. # They match a subset of ECMA-48. klone+color|color control for ansi.sys and ISO6429-compatible displays, colors#8, ncv#3, pairs#64, op=\E[37;40m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, # This is better than klone+color, it doesn't assume white-on-black as the # default color pair, but many `ANSI' terminals don't grok the cap. ecma+color|color control for ECMA-48-compatible terminals, AX, colors#8, ncv#3, pairs#64, op=\E[39;49m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, # Attribute control for ECMA-48-compatible terminals ecma+sgr|attribute capabilities for true ECMA-48 terminals, rmso=\E[27m, rmul=\E[24m, use=klone+sgr8, # For comparison, here are all the capabilities implied by the Intel # Binary Compatibility Standard (level 2) that fit within terminfo. # For more detail on this rather pathetic standard, see the comments # near the end of this file. ibcs2|Intel Binary Compatibility Standard prescriptions, cbt=\E[Z, clear=\Ec, cub=\E[%p1%dD, cub1=\E[1D, cud=\E[%p1%dB, cud1=\E[1B, cuf=\E[%p1%dC, cuf1=\E[1C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[1A, dch=\E[%p1%dP, dispc=\E=%p1%dg, ech=\E[%p1%dX, hpa=\E[%i%p1%dG, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, indn=\E[%p1%dS, rc=\E7, rin=\E[%p1%dT, rmam=\E[?7l, sc=\E7, smam=\E[?7h, tbc=\E[g, vpa=\E[%i%p1%dd, #### ANSI/ECMA-48 terminals and terminal emulators # # See near the end of this file for details on ANSI conformance. # Don't mess with these entries! Lots of other entries depend on them! # # This section lists entries in a least-capable to most-capable order. # if you're in doubt about what `ANSI' matches yours, try them in that # order and back off from the first that breaks. # ansi-mr is for ANSI terminals with ONLY relative cursor addressing # and more than one page of memory. It uses local motions instead of # direct cursor addressing, and makes almost no assumptions. It does # assume auto margins, no padding and/or xon/xoff, and a 24x80 screen. ansi-mr|mem rel cup ansi, am, xon, cols#80, lines#24, use=vanilla, use=ansi+erase, use=ansi+local1, # ansi-mini is a bare minimum ANSI terminal. This should work on anything, but # beware of screen size problems and memory relative cursor addressing. ansi-mini|any ansi terminal with pessimistic assumptions, am, xon, cols#80, lines#24, use=vanilla, use=ansi+cup, use=ansi+erase, # ansi-mtabs adds relative addressing and minimal tab support ansi-mtabs|any ansi terminal with pessimistic assumptions, it#8, ht=^I, use=ansi-mini, use=ansi+local1, # ANSI X3.64 from emory!mlhhh (Hugh Hansard) via BRL # # The following is an entry for the full ANSI 3.64 (1977). It lacks # padding, but most terminals using the standard are "fast" enough # not to require any -- even at 9600 bps. If you encounter problems, # try including the padding specifications. # # Note: the :as: and :ae: specifications are not implemented here, for # the available termcap documentation does not make clear WHICH alternate # character set to specify. ANSI 3.64 seems to make allowances for several. # Please make the appropriate adjustments to fit your needs -- that is # if you will be using alternate character sets. # # There are very few terminals running the full ANSI 3.64 standard, # so I could only test this entry on one verified terminal (Visual 102). # I would appreciate the results on other terminals sent to me. # # Please report comments, changes, and problems to: # # U.S. MAIL: Hugh Hansard # Box: 22830 # Emory University # Atlanta, GA. 30322. # # USENET {akgua,msdc,sb1,sb6,gatech}!emory!mlhhh. # # (Added vt100 , to quiet a tic warning --esr) ansi77|ansi 3.64 standard 1977 version, OTbs, am, mir, cols#80, it#8, lines#24, bel=^G, clear=\E[;H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M$<5*/>, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il1=\E[L$<5*/>, ind=\ED, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOR, kf4=\EOS, khome=\E[H, nel=^M\ED, rc=\E8, ri=\EM, rmir=\E[4l, rmso=\E[m, rmul=\E[m, sc=\E7, smir=\E[4h, smso=\E[7m, smul=\E[4m, # Procomm and some other ANSI emulations don't recognize all of the ANSI- # standard capabilities. This entry deletes , , , , and # / capabilities, forcing curses to use repetitions of , # , and . Also deleted and , as QModem up to # 5.03 doesn't recognize these. Finally, we delete and , which seem # to confuse many emulators. On the other hand, we can count on these programs # doing //. Older versions of this entry featured # , but now seems to be more common under # ANSI.SYS influence. # From: Eric S. Raymond Oct 30 1995 pcansi-m|pcansi-mono|ibm-pc terminal programs claiming to be ansi (mono mode), OTbs, am, mir, msgr, cols#80, it#8, lines#24, bel=^G, cbt=\E[Z, clear=\E[H\E[J, cr=^M, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH, il1=\E[L, ind=^J, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, tbc=\E[3g, use=klone+sgr-dumb, pcansi-25-m|pcansi25m|ibm-pc terminal programs with 25 lines (mono mode), lines#25, use=pcansi-m, pcansi-33-m|pcansi33m|ibm-pc terminal programs with 33 lines (mono mode), lines#33, use=pcansi-m, pcansi-43-m|ansi43m|ibm-pc terminal programs with 43 lines (mono mode), lines#43, use=pcansi-m, # The color versions. All PC emulators do color... pcansi|ibm-pc terminal programs claiming to be ansi, use=klone+color, use=pcansi-m, pcansi-25|pcansi25|ibm-pc terminal programs with 25 lines, lines#25, use=pcansi, pcansi-33|pcansi33|ibm-pc terminal programs with 33 lines, lines#33, use=pcansi, pcansi-43|pcansi43|ibm-pc terminal programs with 43 lines, lines#43, use=pcansi, # ansi-m -- full ANSI X3.64 with ANSI.SYS-compatible attributes, no color. # If you want pound signs rather than dollars, replace `B' with `A' # in the , , , and capabilities. # From: Eric S. Raymond Nov 6 1995 ansi-m|ansi-mono|ANSI X3.64-1979 terminal with ANSI.SYS compatible attributes, mc5i, cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC, cuu=\E[%p1%dA, dch=\E[%p1%dP, dl=\E[%p1%dM, ech=\E[%p1%dX, el1=\E[1K, hpa=\E[%i%p1%dG, ht=\E[I, ich=\E[%p1%d@, il=\E[%p1%dL, indn=\E[%p1%dS, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kich1=\E[L, mc4=\E[4i, mc5=\E[5i, nel=\r\E[S, rep=%p1%c\E[%p2%{1}%-%db, rin=\E[%p1%dT, s0ds=\E(B, s1ds=\E)B, s2ds=\E*B, s3ds=\E+B, tbc=\E[3g, vpa=\E[%i%p1%dd, use=pcansi-m, ansi+enq|ncurses extension for ANSI ENQ, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?%[;0123456789]c, u9=\E[c, # ansi -- this terminfo expresses the largest subset of X3.64 that will fit in # standard terminfo. Assumes ANSI.SYS-compatible attributes and color. # From: Eric S. Raymond Nov 6 1995 ansi|ansi/pc-term compatible with color, use=ansi+enq, use=ecma+color, use=klone+sgr8, use=ansi-m, # ansi-generic is a vanilla ANSI terminal. This is assumed to implement # all the normal ANSI stuff with no extensions. It assumes # insert/delete line/char is there, so it won't work with # vt100 clones. It assumes video attributes for bold, blink, # underline, and reverse, which won't matter much if the terminal # can't do some of those. Padding is assumed to be zero, which # shouldn't hurt since xon/xoff is assumed. ansi-generic|generic ansi standard terminal, am, xon, cols#80, lines#24, use=vanilla, use=ansi+csr, use=ansi+cup, use=ansi+rca, use=ansi+erase, use=ansi+tabs, use=ansi+local, use=ansi+idc, use=ansi+idl, use=ansi+rep, use=ansi+sgrbold, use=ansi+arrows, #### DOS ANSI.SYS variants # # This completely describes the sequences specified in the DOS 2.1 ANSI.SYS # documentation (except for the keyboard key reassignment feature, which # doesn't fit the model well). The klone+acs sequences were valid # though undocumented. The capability is untested but should work for # keys F1-F10 (%p1 values outside this range will yield unpredictable results). # From: Eric S. Raymond Nov 7 1995 ansi.sys-old|ANSI.SYS under PC-DOS 2.1, OTbs, am, mir, msgr, xon, cols#80, lines#25, clear=\E[2J, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[k, home=\E[H, is2=\E[m\E[?7h, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, pfkey=\E[0;%p1%{58}%+%d;%p2"%s"p, rc=\E[u, rmam=\E[?7l, sc=\E[s, smam=\E[?7h, u6=\E[%i%d;%dR, u7=\E[6n, use=klone+color, use=klone+sgr8, # Keypad: Home=\0G Up=\0H PrPag=\0I # ka1,kh kcuu1 kpp,ka3 # # Left=\0K 5=\0L Right=\0M # kcub1 kb2 kcuf1 # # End=\0O Down=\0P NxPag=\0Q # kc1,kend kcud1 kc3,knp # # Ins=\0R Del=\0S # kich1 kdch1 # # On keyboard with 12 function keys, # shifted f-keys: F13-F24 # control f-keys: F25-F36 # alt f-keys: F37-F48 # The shift/control/alt keys do not modify each other, but alt overrides both, # and control overrides shift. # # capability for F1-F48 -TD ansi.sys|ANSI.SYS 3.1 and later versions, el=\E[K, ka1=\0G, ka3=\0I, kb2=\0L, kbs=^H, kc1=\0O, kc3=\0Q, kcbt=\0^O, kcub1=\0K, kcud1=\0P, kcuf1=\0M, kcuu1=\0H, kdch1=\0S, kend=\0O, kf1=\0;, kf10=\0D, kf11=\0\205, kf12=\0\206, kf13=\0T, kf14=\0U, kf15=\0V, kf16=\0W, kf17=\0X, kf18=\0Y, kf19=\0Z, kf2=\0<, kf20=\0[, kf21=\0\\, kf22=\0], kf23=\0\207, kf24=\0\210, kf25=\0\^, kf26=\0_, kf27=\0`, kf28=\0a, kf29=\0b, kf3=\0=, kf30=\0c, kf31=\0d, kf32=\0e, kf33=\0f, kf34=\0g, kf35=\0\211, kf36=\0\212, kf37=\0h, kf38=\0i, kf39=\0j, kf4=\0>, kf40=\0k, kf41=\0l, kf42=\0m, kf43=\0n, kf44=\0o, kf45=\0p, kf46=\0q, kf47=\0\213, kf48=\0\214, kf5=\0?, kf6=\0@, kf7=\0A, kf8=\0B, kf9=\0C, khome=\0G, kich1=\0R, knp=\0Q, kpp=\0I, pfkey=\E[0;%?%p1%{11}%<%t%'\:'%e%p1%{13}%<%t%'z'%e%p1%{23}%<%t%'G'%e%p1%{25}%<%t%'p'%e%p1%'#'%<%t%'E'%e%p1%'%'%<%t%'f'%e%p1%'/'%<%t%'C'%e%{92}%;%p1%+%d;%p2"%s"p, use=ansi.sys-old, # # Define IBM PC keypad keys for vi as per MS-Kermit while using ANSI.SYS. # This should only be used when the terminal emulator cannot redefine the keys. # Since redefining keys with ansi.sys also affects PC-DOS programs, the key # definitions must be restored. If the terminal emulator is quit while in vi # or others using /, the keypad will not be defined as per PC-DOS. # The PgUp and PgDn are prefixed with ESC so that tn3270 can be used on Unix # (^U and ^D are already defined for tn3270). The ESC is safe for vi but it # does "beep". ESC ESC i is used for Ins to avoid tn3270 ESC i for coltab. # Note that is always BS, because PC-dos can tolerate this change. # Caution: vi is limited to 256 string bytes, longer crashes or weirds out vi. # Consequently the End keypad key could not be set (it is relatively safe and # actually useful because it sends ^@ O, which beeps and opens a line above). ansi.sysk|ansisysk|PC-DOS 3.1 ANSI.SYS with keypad redefined for vi, is2=U2 PC-DOS 3.1 ANSI.SYS with keypad redefined for vi 9-29-86\n\E[;75;8p, rmkx=\E[;71;0;71p\E[;72;0;72p\E[;73;0;73p\E[;77;0;77p\E[;80;0;80p\E[;81;0;81p\E[;82;0;82p\E[;83;0;83p, smkx=\E[;71;30p\E[;72;11p\E[;73;27;21p\E[;77;12p\E[;80;10p\E[;81;27;4p\E[;82;27;27;105p\E[;83;127p, use=ansi.sys, # # Adds ins/del line/character, hence vi reverse scrolls/inserts/deletes nicer. nansi.sys|nansisys|PC-DOS Public Domain NANSI.SYS, dch1=\E[1P, dl1=\E[1M, ich1=\E[1@, il1=\E[1L, is2=U3 PC-DOS Public Domain NANSI.SYS 9-23-86\n, use=ansi.sys, # # See ansi.sysk and nansi.sys above. nansi.sysk|nansisysk|PC-DOS Public Domain NANSI.SYS with keypad redefined for vi, dch1=\E[1P, dl1=\E[1M, ich1=\E[1@, il1=\E[1L, is2=U4 PC-DOS Public Domain NANSI.SYS with keypad redefined for vi 9-29-86\n\E[;75;8p, use=ansi.sysk, #### Atari ST terminals # From Guido Flohr . # tw52|tw52-color|Toswin window manager with color, bce, colors#16, pairs#256, oc=\Eb?\Ec0, op=\Eb?\Ec0, setab=\Ec%?%p1%{0}%=%t?%e%p1%{7}%=%t0%e%p1%{15}%=%t7%e%p1%{48}%+%c, setaf=\Eb%?%p1%{0}%=%t?%e%p1%{7}%=%t0%e%p1%{15}%=%t7%e%p1%{48}%+%c, setb=\Ec%?%p1%{0}%=%t?%e%p1%{7}%=%t0%e%p1%{15}%=%t7%e%p1%{48}%+%c, setf=\Eb%?%p1%{0}%=%t?%e%p1%{7}%=%t0%e%p1%{15}%=%t7%e%p1%{48}%+%c, use=tw52-m, tw52-m|Toswin window manager monochrome, ul, ma#999, bold=\Eya, dch1=\Ea, dim=\EyB, is2=\Ev\Eq\Ez_\Ee\Ei\Eb?\Ec0, rev=\EyP, rmso=\EzQ, rmul=\EzH, rs2=\Ev\Eq\Ez_\Ee\Ei\Eb?\Ec0, sgr0=\Ez_, smso=\EyQ, smul=\EyH, use=at-m, tt52|Atari TT medium and high resolution, lines#30, use=at-color, st52-color|at-color|atari-color|atari_st-color|Atari ST with color, bce, colors#16, pairs#256, is2=\Ev\Eq\Ee\Eb1\Ec0, rs2=\Ev\Eq\Ee\Eb1\Ec0, setab=\Ec%?%p1%{0}%=%t1%e%p1%{1}%=%t2%e%p1%{2}%=%t3%e%p1%{3}%=%t>%e%p1%{4}%=%t4%e%p1%{5}%=%t7%e%p1%{6}%=%t5%e%p1%{7}%=%t0%e%p1%{8}%=%t8%e%p1%{9}%=%t9%e%p1%{10}%=%t\:%e%p1%{11}%=%t;%e%p1%{12}%=%t<%e%p1%{13}%=%t=%e%p1%{14}%=%t6%e?, setaf=\Eb%?%p1%{0}%=%t1%e%p1%{1}%=%t2%e%p1%{2}%=%t3%e%p1%{3}%=%t>%e%p1%{4}%=%t4%e%p1%{5}%=%t7%e%p1%{6}%=%t5%e%p1%{7}%=%t0%e%p1%{8}%=%t8%e%p1%{9}%=%t9%e%p1%{10}%=%t\:%e%p1%{11}%=%t;%e%p1%{12}%=%t<%e%p1%{13}%=%t=%e%p1%{14}%=%t6%e?, setb=\Ec%?%p1%{0}%=%t1%e%p1%{1}%=%t2%e%p1%{2}%=%t3%e%p1%{3}%=%t>%e%p1%{4}%=%t4%e%p1%{5}%=%t7%e%p1%{6}%=%t5%e%p1%{7}%=%t0%e%p1%{8}%=%t8%e%p1%{9}%=%t9%e%p1%{10}%=%t\:%e%p1%{11}%=%t;%e%p1%{12}%=%t<%e%p1%{13}%=%t=%e%p1%{14}%=%t6%e?, setf=\Eb%?%p1%{0}%=%t1%e%p1%{1}%=%t2%e%p1%{2}%=%t3%e%p1%{3}%=%t>%e%p1%{4}%=%t4%e%p1%{5}%=%t7%e%p1%{6}%=%t5%e%p1%{7}%=%t0%e%p1%{8}%=%t8%e%p1%{9}%=%t9%e%p1%{10}%=%t\:%e%p1%{11}%=%t;%e%p1%{12}%=%t<%e%p1%{13}%=%t=%e%p1%{14}%=%t6%e?, use=st52, st52|st52-m|at|at-m|atari|atari-m|atari_st|atarist-m|Atari ST, am, eo, mir, npc, cols#80, it#8, lines#24, bel=^G, civis=\Ef, clear=\EE, cnorm=\Ee, cr=^M, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM, ed=\EJ, el=\EK, el1=\Eo, home=\EH, ht=^I, il1=\EL, ind=^J, is2=\Ev\Eq\Ee, kLFT=\Ed, kRIT=\Ec, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\177, kf1=\EP, kf10=\EY, kf11=\Ep, kf12=\Eq, kf13=\Er, kf14=\Es, kf15=\Et, kf16=\Eu, kf17=\Ev, kf18=\Ew, kf19=\Ex, kf2=\EQ, kf20=\Ey, kf3=\ER, kf4=\ES, kf5=\ET, kf6=\EU, kf7=\EV, kf8=\EW, kf9=\EX, khlp=\EH, khome=\EE, kich1=\EI, knp=\Eb, kpp=\Ea, kund=\EK, nel=^M^J, rc=\Ek, rev=\Ep, ri=\EI, rmso=\Eq, rs2=\Ev\Eq\Ee, sc=\Ej, sgr0=\Eq, smso=\Ep, tw100|toswin vt100 window mgr, eo, mir, msgr, xon, colors#8, cols#80, it#8, lines#24, pairs#64, vt#3, acsc=++\,\,--..00II``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\Ef, clear=\E[2J\E[H, cnorm=\Ee, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\EB, cuf=\E[%p1%dC, cuf1=\EC, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EA, dch1=\Ea, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il1=\EL, ind=^J, is2=\E<\E)0, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\177, kf1=\EOP, kf10=\EOY, kf11=\Ep, kf12=\Eq, kf13=\Er, kf14=\Es, kf15=\Et, kf16=\Eu, kf17=\Ev, kf18=\Ew, kf19=\Ex, kf2=\EOQ, kf20=\Ey, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, khlp=\EH, khome=\E\EE, kich1=\EI, knp=\Eb, kpp=\E\Ea, kund=\EK, ll=\E[24H, nel=\EE, oc=\E[30;47m, op=\E[30;47m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E[?7h, rmir=\Ei, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\E<\E[20l\E[?3;6;9l\E[r\Eq\E(B\017\E)0\E>, sc=\E7, setb=\E[4%p1%'0'%+%Pa%?%ga%'0'%=%t0%e%ga%'1'%=%t4%e%ga%'2'%=%t2%e%ga%'3'%=%t6%e%ga%'4'%=%t1%e%ga%'5'%=%t5%e%ga%'6'%=%t3%e7%;m, setf=\E[3%p1%'0'%+%Pa%?%ga%'0'%=%t0%e%ga%'1'%=%t4%e%ga%'2'%=%t2%e%ga%'3'%=%t6%e%ga%'4'%=%t1%e%ga%'5'%=%t5%e%ga%'6'%=%t3%e7%;m, sgr0=\E[m, smacs=^N, smcup=\E[?7l, smir=\Eh, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, # The entries for stv52 and stv52pc probably need a revision. stv52|MiNT virtual console, am, msgr, cols#80, it#8, lines#30, bel=^G, blink=\Er, bold=\EyA, civis=\Ef, clear=\EE, cnorm=\E. \Ee, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\E.", dim=\Em, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL, ind=\n$<2*/>, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\177, kf1=\EP, kf10=\EY, kf11=\Ep, kf12=\Eq, kf13=\Er, kf14=\Es, kf15=\Et, kf16=\Eu, kf17=\Ev, kf18=\Ew, kf19=\Ex, kf2=\EQ, kf20=\Ey, kf3=\ER, kf4=\ES, kf5=\ET, kf6=\EU, kf7=\EV, kf8=\EW, kf9=\EX, khlp=\EH, khome=\EE, kich1=\EI, knp=\Eb, kpp=\Ea, kund=\EK, nel=\r\n$<2*/>, op=\Eb@\EcO, rev=\Ep, ri=\EI$<2*/>, rmcup=\Ev\E. \Ee\Ez_, rmso=\Eq, rmul=\EzH, rs1=\Ez_\Eb@\EcA, sgr0=\Ez_, smcup=\Ev\Ee\Ez_, smso=\Ep, smul=\EyH, stv52pc|MiNT virtual console with PC charset, am, msgr, cols#80, it#8, lines#30, acsc=+\257\,\256-\^.v0\333I\374`\177a\260f\370g\361h\261j\331k\277l\332m\300n\305o\377p-q\304r-s_t+u+v+w+x\263y\363z\362{\343|\366}\234~\371, bel=^G, blink=\Er, bold=\EyA, civis=\Ef, clear=\EE, cnorm=\E. \Ee, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\E.", dim=\Em, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL, ind=\n$<2*/>, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\177, kf1=\EP, kf10=\EY, kf11=\Ep, kf12=\Eq, kf13=\Er, kf14=\Es, kf15=\Et, kf16=\Eu, kf17=\Ev, kf18=\Ew, kf19=\Ex, kf2=\EQ, kf20=\Ey, kf3=\ER, kf4=\ES, kf5=\ET, kf6=\EU, kf7=\EV, kf8=\EW, kf9=\EX, khlp=\EH, khome=\EE, kich1=\EI, knp=\Eb, kpp=\Ea, kund=\EK, nel=\r\n$<2*/>, rev=\Ep, ri=\EI$<2*/>, rmcup=\Ev\E. \Ee\Ez_, rmso=\Eq, rmul=\EzH, rs1=\Ez_\Eb@\EcA, sgr0=\Ez_, smcup=\Ev\Ee\Ez_, smso=\Ep, smul=\EyH, # From: Simson L. Garfinkel atari-old|atari st, OTbs, am, cols#80, it#8, lines#25, clear=\EH\EJ, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM, ed=\EJ, el=\EK, ht=^I, il1=\EL, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, ri=\EI, rmso=\Eq, sgr0=\Eq, smso=\Ep, # UniTerm terminal program for the Atari ST: 49-line VT220 emulation mode # From: Paul M. Aoki uniterm|uniterm49|UniTerm VT220 emulator with 49 lines, lines#49, is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;49r\E[49;1H, use=vt220, # MiNT VT52 emulation. 80 columns, 25 rows. # MiNT is Now TOS, the operating system which comes with all Ataris now # (mainly Atari Falcon). This termcap is for the VT52 emulation you get # under tcsh/zsh/bash/sh/ksh/ash/csh when you run MiNT in `console' mode # From: Per Persson , 27 Feb 1996 st52-old|Atari ST with VT52 emulation, am, km, cols#80, lines#25, bel=^G, civis=\Ef, clear=\EH\EJ, cnorm=\Ee, cr=^M, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL, ind=^J, ka1=\E#7, ka3=\E#5, kb2=\E#9, kbs=^H, kc1=\E#1, kc3=\E#3, kclr=\E#7, kcub1=\E#K, kcud1=\E#P, kcuf1=\E#M, kcuu1=\E#H, kf0=\E#D, kf1=\E#;, kf2=\E#<, kf3=\E#=, kf4=\E#>, kf5=\E#?, kf6=\E#@, kf7=\E#A, kf8=\E#B, kf9=\E#C, khome=\E#G, kil1=\E#R, kind=\E#2, kri=\E#8, lf0=f10, nel=^M^J, rc=\Ek, ri=\EI, rmcup=, rmso=\Eq, rs1=\Ez_\Eb@\EcA, sc=\Ej, sgr0=\Eq, smcup=\Ee, smso=\Ep, #### Apple Terminal.app # nsterm*|Apple_Terminal - AppKit Terminal.app # # Terminal.app is a Terminal emulator bundled with NeXT's NeXTStep and # OPENSTEP/Mach operating systems, and with Apple's Rhapsody, Mac OS X # Server and Mac OS X operating systems. There is also a # "terminal.app" in GNUStep, but I believe it to be an unrelated # codebase and I have not attempted to describe it here. # # For NeXTStep, OPENSTEP/Mach, Rhapsody and Mac OS X Server 1.0, you # are pretty much on your own. Use "nsterm-7-m" and hope for the best. # You might also try "nsterm-7" and "nsterm-old" if you suspect your # version supports color. # # To determine the version of Terminal.app you're using by running: # # echo "$TERM_PROGRAM" "$TERM_PROGRAM_VERSION" # # For Apple_Terminal v309+, use "nsterm-256color" (or "nsterm-bce") # # For Apple_Terminal v200+, use "nsterm-16color" (a.k.a. "nsterm") # # For Apple_Terminal v71+/v100+, use "nsterm-bce". # # For Apple_Terminal v51+, use "nsterm-7-c" or "nsterm-7-c-s". # # For Apple_Terminal v41+, use "nsterm-old", or "nsterm-s". # # For all earlier versions (Apple_Terminal), try "nsterm-7-m" # (monochrome) or "nsterm-7" (color); "nsterm-7-m-s" and "nsterm-7-s" # might work too, but really you're on your own here since these # systems are very obsolete and I can't test them. I do welcome # patches, though :). # Other Terminals: # # For GNUstep_Terminal, you're probably best off using "linux" or # writing your own terminfo. # For MacTelnet, you're on your own. It's a different codebase, and # seems to be somewhere between "vt102", "ncsa" and "xterm-color". # For iTerm.app, see "iterm". # # The AppKit Terminal.app descriptions all have names beginning with # "nsterm". Note that the statusline (-s) versions use the window # titlebar as a phony status line, and may produce warnings during # compilation as a result ("tsl uses 0 parameters, expected 1".) # Ignore these warnings, or even ignore these entries entirely. Apps # which need to position the cursor or do other fancy stuff inside the # status line won't work with these entries. They're primarily useful # for programs like Pine which provide simple notifications in the # status line. Please note that non-ASCII characters don't work right # in the status line, since Terminal.app incorrectly interprets their # Unicode codepoints as MacRoman codepoints (in earlier Mac OS X # versions) or only accepts status lines consisting entirely of # characters from the first 256 Unicode positions (including C1 but # not C0 or DEL.) # # The Mythology* of AppKit Terminal.app: # # In the days of NeXTSTep 0.x and 1.x there were two incompatible # bundled terminal emulators, Shell and Terminal. Scott Hess wrote a # shareware replacement for Terminal called "Stuart" which NeXT bought # and used as the basis for the Terminal.app in NeXTstep 2+, # OPENSTEP/Mach, Apple Rhapsody, Mac OS X Server 1.0, and Mac OS X. I # don't know the TERM_PROGRAM and TERM_PROGRAM_VERSION settings or # capabilities for the early versions, but I believe that the # TERM_PROGRAM_VERSION may have been reset at some point. # # The early versions were tailored to the NeXT character set. Sometime # after the Apple aquisition the encoding was swiched to MacRoman # (initally with serious altcharset bugs due to incomplete conversion # of the old NeXT code,) and then later to UTF-8. Alos sometime during # or just prior to the early days of Mac OS X, the Terminal grew ANSI # 8-color support (initially buggy when combined with attributes, but # that was later fixed.) More recently, around Mac OS X version 10.3 # or so (Terminal.app v100+) xterm-like 16-color support was added. In # some versions (for instance 133-1 which shipped with Mac OS X # version 10.4) this suffered from the bug, but that seems to # have been fixed in Mac OS X version 10.5 (Terminal.app v240.2+). # # In the early days of Mac OS X the terminal was fairly buggy and # would routinely crash under load. Many of these bugs seem to have # been fixed around Mac OS X version 10.3 (Terminal.app v100+) but # some may still remain. This change seems to correspond to # Terminal.app reporting "xterm-color" as $TERM rather than "vt100" as # it did previously. # # * This may correspond with what actually happened, but I don't # know. It is based on guesswork, hearsay, private correspondence, # my faulty memory, and the following online sources and references: # # [1] "Three Scotts and a Duane" by Simson L. Garfinkel # http://www.nextcomputers.org/NeXTfiles/Articles/NeXTWORLD/93.8/93.8.Dec.Community1.html # # [2] NeXTSTEP entry from Wikipedia, the free encyclopedia # https://secure.wikimedia.org/wikipedia/en/wiki/Nextstep # # * Renamed the AppKit Terminal.app entry from "Apple_Terminal" to # "nsterm" to comply with the name length and case conventions and # limitations of various software packages [notably Solaris terminfo # and UNIX.] A single Apple_Terminal alias is retained for # backwards-compatbility. # # * Added function key support (F1-F4). These only work in Terminal.app # version 51, hopefully the capabilities won't cause problems for people # using version 41. # # * Added "full color" (-c) entries which support the 16-color mode in # version 51. # # * By default, version 51 uses UTF-8 encoding with broken altcharset # support, so "ASCII" (-7) entries without altcharset support were # added. # nsterm - AppKit Terminal.app # # Apple's Mac OS X includes a Terminal.app derived from the old NeXT # Terminal.app. It is a partial VT100 emulation with some xterm-like # extensions. This terminfo was written to describe versions 41 # (shipped with Mac OS X version 10.0) and 51 (shipped with Mac OS X # version 10.1) of Terminal.app. # # Terminal.app runs under the Mac OS X Quartz windowing system (and # other AppKit-supported windowing systems.) On the Mac OS X machine I # use, the executable for Terminal.app is: # /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal # # If you're looking for a description of the full-screen system # console which runs under Apple's Darwin operating system on PowerPC # platforms, see the "xnuppc" entry instead. # # There were no function keys in version 41. In version 51, there are # four working function keys (F1, F2, F3 and F4.) The function keys # are included in all of these entries. # # It does not support mouse pointer position reporting. Under some # circumstances the cursor can be positioned using option-click; this # works by comparing the cursor position and the selected position, # and simulating enough cursor-key presses to move the cursor to the # selected position. This technique fails in all but the simplest # applications. # # It provides partial ANSI color support (background colors interacted # badly with bold in version 41, though, as reflected in :ncv:.) The # monochrome (-m) entries are useful if you've disabled color support # or use a monochrome monitor. The full color (-c) entries are useful # in version 51, which doesn't exhibit the background color bug. They # also enable an xterm-compatible 16-color mode. # # The configurable titlebar is set using xterm-compatible sequences; # it is used as a status bar in the statusline (-s) entries. Its width # depends on font sizes and window sizes, but 50 characters seems to # be the default for an 80x24 window. # # The MacRoman character encoding is used for some of the alternate # characters in the "MacRoman" entries; the "ASCII" (-7) entries # disable alternate character set support entirely, and the "VT100" # (-acs) entries rely instead on Terminal.app's own buggy VT100 # graphics emulation, which seems to think the character encoding is # the old NeXT charset instead of MacRoman. The "ASCII" (-7) entries # are useful in Terminal.app version 51, which supports UTF-8 and # other ASCII-compatible character encodings but does not correctly # implement VT100 graphics; once VT100 graphics are correctly # implemented in Terminal.app, the "VT100" (-acs) entries should be # usable in any ASCII-compatible character encoding [except perhaps # in UTF-8, where some experts argue for disallowing alternate # characters entirely.] # # Terminal.app reports "vt100" as the terminal type, but exports # several environment variables which may aid detection in a shell # profile (i.e. .profile or .login): # # TERM=vt100 # TERM_PROGRAM=Apple_Terminal # TERM_PROGRAM_VERSION=41 # in Terminal.app version 41 # TERM_PROGRAM_VERSION=51 # in Terminal.app version 51 # # For example, the following Bourne shell script would detect the # correct terminal type: # # if [ :"$TERM" = :"vt100" -a :"$TERM_PROGRAM" = :"Apple_Terminal" ] # then # export TERM # if [ :"$TERM_PROGRAM_VERSION" = :41 ] # then # TERM="nsterm-old" # else # TERM="nsterm-c-7" # fi # fi # # In a C shell derivative, this would be accomplished by: # # if ( $?TERM && $?TERM_PROGRAM && $?TERM_PROGRAM_VERSION) then # if ( :"$TERM" == :"vt100" && :"$TERM_PROGRAM" == :"Apple_Terminal" ) then # if ( :"$TERM_PROGRAM_VERSION" == :41 ) then # setenv TERM "nsterm-old" # else # setenv TERM "nsterm-c-7" # endif # endif # endif # The '+' entries are building blocks nsterm+7|AppKit Terminal.app v41+ basic capabilities w/ASCII charset, am, bw, msgr, xenl, xon, cols#80, it#8, lines#24, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, kbs=\177, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kent=\EOM, rc=\E8, rev=\E[7m, ri=\EM, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m, sgr0=\E[m, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=vt100+enq, use=vt100+pfkeys, nsterm+acs|AppKit Terminal.app v41+ basic capabilities w/VT100 alternate-charset, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, enacs=\E(B\E)0, rmacs=^O, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, use=nsterm+7, nsterm+mac|AppKit Terminal.app v41+ basic capabilities w/MacRoman alternate-charset, acsc=+\335\,\334-\366.\3770#`\327a\:f\241g\261h#i\360jjkkllmmnno\370p\370q\321rrssttuuvvwwxxy\262z\263{\271|\255}\243~\245, enacs=\E(B\E)0, rmacs=^O, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, use=nsterm+7, # compare with xterm+sl-twm nsterm+s|AppKit Terminal.app v41+ status-line (window titlebar) support, wsl#50, use=xterm+sl-twm, nsterm+c|AppKit Terminal.app v51+ full color support (including 16 colors), op=\E[0m, use=ibm+16color, nsterm+c41|AppKit Terminal.app v41 color support, colors#8, ncv#37, pairs#64, op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, # These are different combinations of the building blocks # ASCII charset (-7) nsterm-m-7|nsterm-7-m|AppKit Terminal.app v41+ w/ASCII charset (monochrome), use=nsterm+7, nsterm-m-s-7|nsterm-7-m-s|AppKit Terminal.app v41+ w/ASCII charset (monochrome w/statusline), use=nsterm+s, use=nsterm+7, nsterm-7|AppKit Terminal.app v41+ w/ASCII charset (color), use=nsterm+c41, use=nsterm+7, nsterm-7-c|nsterm-c-7|AppKit Terminal.app v51+ w/ASCII charset (full color), use=nsterm+c, use=nsterm+7, nsterm-s-7|nsterm-7-s|AppKit Terminal.app v41+ w/ASCII charset (color w/statusline), use=nsterm+s, use=nsterm+c41, use=nsterm+7, nsterm-c-s-7|nsterm-7-c-s|AppKit Terminal.app v51+ w/ASCII charset (full color w/statusline), use=nsterm+s, use=nsterm+c, use=nsterm+7, # VT100 alternate-charset (-acs) nsterm-m-acs|nsterm-acs-m|AppKit Terminal.app v41+ w/VT100 alternate-charset (monochrome), use=nsterm+acs, nsterm-m-s-acs|nsterm-acs-m-s|AppKit Terminal.app v41+ w/VT100 alternate-charset (monochrome w/statusline), use=nsterm+s, use=nsterm+acs, nsterm-acs|AppKit Terminal.app v41+ w/VT100 alternate-charset (color), use=nsterm+c41, use=nsterm+acs, nsterm-c-acs|nsterm-acs-c|AppKit Terminal.app v51+ w/VT100 alternate-charset (full color), use=nsterm+c, use=nsterm+acs, nsterm-s-acs|nsterm-acs-s|AppKit Terminal.app v41+ w/VT100 alternate-charset (color w/statusline), use=nsterm+s, use=nsterm+c41, use=nsterm+acs, nsterm-c-s-acs|nsterm-acs-c-s|AppKit Terminal.app v51+ w/VT100 alternate-charset (full color w/statusline), use=nsterm+s, use=nsterm+c, use=nsterm+acs, # MacRoman charset nsterm-m|AppKit Terminal.app v41+ w/MacRoman charset (monochrome), use=nsterm+mac, nsterm-m-s|AppKit Terminal.app v41+ w/MacRoman charset (monochrome w/statusline), use=nsterm+s, use=nsterm+mac, nsterm-old|AppKit Terminal.app v41+ w/MacRoman charset (color), use=nsterm+c41, use=nsterm+mac, nsterm-c|AppKit Terminal.app v51+ w/MacRoman charset (full color), use=nsterm+c, use=nsterm+mac, nsterm-s|AppKit Terminal.app v41+ w/MacRoman charset (color w/statusline), use=nsterm+s, use=nsterm+c41, use=nsterm+mac, nsterm-c-s|AppKit Terminal.app v51+ w/MacRoman charset (full color w/statusline), use=nsterm+s, use=nsterm+c, use=nsterm+mac, # In Mac OS X version 10.5 the format of the preferences has changed # and a new, more complex technique is needed, e.g., # # python -c 'import sys,objc;NSUserDefaults=objc.lookUpClass( # "NSUserDefaults");ud=NSUserDefaults.alloc(); # ud.init();prefs=ud.persistentDomainForName_( # "com.apple.Terminal");prefs["Window Settings"][ # prefs["Default Window Settings"]]["TerminalType" # ]=sys.argv[1];ud.setPersistentDomain_forName_(prefs, # "com.apple.Terminal")' nsterm-16color # # and it is still not settable from the preferences dialog. This is # tracked under rdar://problem/7365108 and rdar://problem/7365134 # in Apple's bug reporter. # # In OS X 10.7 (Leopard) the TERM which can be set in the preferences dialog # defaults to xterm-color. Alternative selections are ansi, dtterm, rxvt, # vt52, vt100, vt102 and xterm. nsterm-16color|AppKit Terminal.app v240.2+ with Mac OS X version 10.5, bw@, mir, npc, civis=\E[?25l, cnorm=\E[?25h, dch=\E[%p1%dP, dch1=\E[P, flash=\E[?5h$<200/>\E[?5l, hpa=\E[%i%p1%dG, ich=\E[%p1%d@, ich1=\E[@, kdch1=\E[3~, kend=\E[F, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[22~, kf19=\E[33~, kf20=\E[34~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H, knp=\E[6~, kpp=\E[5~, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, smcup=\E7\E[?47h, smir=\E[4h, vpa=\E[%i%p1%dd, kLFT5=\E[5D, kRIT5=\E[5C, use=nsterm-c-s-acs, # The versions of Terminal.app in Mac OS X version 10.3.x seem to have # the background color erase feature. The newer version 240.2 in Mac OS X # version 10.5 does not. # # This entry is based on newsgroup comments by Alain Bench, Christian Ebert, # and D P Schreber comparing to nsterm-c-s-acs. # # In Mac OS X version 10.4 and earlier, D P Schreber notes that $TERM # can be set in Terminal.app, e.g., # # defaults write com.apple.Terminal TermCapString nsterm-bce # # and that it is not set in Terminal's preferences dialog. # # Modified for OS X 10.8, omitting bw based on testing with tack -TD # # Notes: # * The terminal description matches the default settings. # * The keyboard is configurable via a dialog. # * By default khome, kend, knext and kprev are honored only with a # shift-modifier. # * There are bindings for control left/right arrow (but not up/down). # Added those to nsterm-16color, which is the version used for OS X 10.6 # * "Allow VT100 application keypage mode" is by default disabled. # There is no way to press keypad-comma unless application mode is enabled # and used. # * 132-column mode stopped working during vttest's tests. Consider it broken. # * CHT, REP, SU, SD are buggy. # * ECH works (also in Leopard), but is not used here for compatibility. # * The terminal preferences dialog replaces xterm-color by xterm-16color and # xterm-256color. However, it adds "nsterm", so it is possible to use the # nsterm entry from this file to override the MacPorts (20110404) or # system (20081102) copy of this file. # + In OS X 10.8 (Mountain Lion) the TERM which can be set in the preferences # dialog defaults to xterm-256color. Alternative selections are ansi, # dtterm, rxvt, vt52, vt100, vt102, xterm and xterm-16color. However, # the menu says "Declare terminal as" without promising to actually emulate # the corresponding terminals. Indeed, changing TERM does not affect the # emulation itself. This means that # + the function-keys do not match for dtterm for kf1-kf4 as well as # khome/kend # + the color model is the same for each setting of TERM (does not match # ansi or dtterm). # + the shift/control/meta key modifiers from rxvt and xterm variants are not # recognised except for a few special cases, i.e., kRIT5 and kLFT5. # + the vt52 emulation does not give a usable shell because screen-clearing # does not work as expected. # + selecting "xterm" or "xterm-16color" sets TERM to "xterm-256color". # + OSX 10.9 (Yosemite) added more extended keys in the default configuration # as well as unmasking F10 (which had been used in the window manager). Those # keys are listed in this entry. nsterm-bce|AppKit Terminal.app v71+/v100.1.8+ with Mac OS X version 10.3/10.4 (bce), bce, use=nsterm-16color, # This is tested with OS X 10.8 (Mountain Lion), 2012/08/11 # TERM_PROGRAM_VERSION=309 # Earlier reports state that these differences also apply to OS X 10.7 (Lion), # TERM_PROGRAM_VERSION=303 nsterm-256color|Terminal.app in OS X 10.8, use=xterm+256setaf, use=nsterm-bce, nsterm-build326|Terminal.app in OS X 10.9, kDC=\E[3;2~, kLFT=\E[1;2D, kRIT=\E[1;2C, kcbt=\E[Z, kf18=\E[32~, kDC5=\E[3;5~, kDC7=\E[3;5~, kLFT3=\Eb, kLFT5=\E[1;5D, kRIT3=\Ef, kRIT5=\E[1;5C, use=nsterm-256color, # actually "343.7" nsterm-build343|Terminal.app in OS X 10.10, kend=\EOF, khome=\EOH, use=nsterm-build326, # reviewed Terminal.app in El Capitan (version 2.6 build 361) -TD # Using vttest: # + no vt52 mode for cursor keys, though vt52 screen works in vttest # + f1-f4 map to pf1-pf4 # + no vt220 support aside from DECTCEM and ECH # + there are no protected areas. Forget about anything above vt220. # + in ECMA-48 cursor movement, VPR and HPR fail. Others work. # + vttest color 11.6.4 and 11.6.5 (bce for ED/EL and ECH/indexing) are bce # + but bce fails for 11.6.7.2 (test repeat). # + SD (11.6.7.3) also fails, but SL/SR/SU work. # + 11.6.6 (test insert/delete char/line with bce) has several failures. # + normal (not X10 or Highlight tracking) mouse now works. # + mouse any-event works # + mouse button-event works # + in alternate screen: # mode 47/48 work # mode 1047 fails to restore cursor position (do not use) # mode 1049 fails to restore screen contents (do not use) # + dtterm window-modify operations work (some messages are not printed) # + dtterm window-report gives size of window in characters/pixels as # well as state of window. # Using tack: # + there is no difference between cnorm/cvvis # + has dim/invis/blink (no protect of course) # + most function keys with shift/control modifiers give beep # (user can configure, but out-of-the-box is what I record) # + shift-F5 is \E[25~ through shift-F12 is \E[34~ (skips \E[30~ between # F8 and F9). # + kLFT5/kRIT5 work, but not up/down with control-modifier # + kLFT/kRIT work, but not up/down with shift-modifier # + there are a few predefined bindings with Alt, but no clear pattern. # + uses alt-key as UTF-8 "meta" something like xterm altSendsEscape # Using ncurses test-program with xterm-new: # + no italics # Using xterm's scripts: # + palette for 256-colors is hardcoded. # + no support for "dynamic colors" # + no support for tcap-query. nsterm-build361|Terminal.app in OS X 10.11, kmous=\E[M, use=nsterm-build343, # This is an alias which should always point to the "current" version nsterm|Apple_Terminal|AppKit Terminal.app, use=nsterm-build361, # iTerm.app from http://iterm.sourceforge.net/ is an alternative (and # more featureful) terminal emulator for Mac OS X. It is similar # enough in capabilities to nsterm-16color that I have derived this # description from that one, but as far as I know they share no code. # Many of the features are user-configurable, but I attempt only to # describe the default configuration. # # NOTE: When tack tests (csr) + (nel) iTerm.app crashes, so (csr) is # disabled. iTerm.app|iterm|iTerm.app terminal emulator for Mac OS X, bce, bw@, csr@, dim@, kend=\EOF, khome=\EOH, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, use=xterm+256setaf, use=nsterm-16color, # xnuppc - Darwin PowerPC Console (a.k.a. "darwin") # # On PowerPC platforms, Apple's Darwin operating system uses a # full-screen system console derived from a NetBSD framebuffer # console. It is an ANSI-style terminal, and is not really VT-100 # compatible. # # Under Mac OS X, this is the system console driver used while in # single-user mode [reachable by holding down Command-S during the # boot process] and when logged in using console mode [reachable by # typing ">console" at the graphical login prompt.] # # If you're looking for a description of the Terminal.app terminal # emulator which runs under the Mac OS X Quartz windowing system (and # other AppKit-supported windowing systems,) see the "nsterm" # entry instead. # # NOTE: Under Mac OS X version 10.1, the default login window does not # prompt for user name, instead requiring an icon to be selected from # a list of known users. Since the special ">console" login is not in # this list, you must make one of two changes in the Login Window # panel of the Login section of System Prefs to make the special # ">console" login accessible. The first option is to enable 'Show # "Other User" in list for network users', which will add a special # "Other..." icon to the graphical login panel. Selecting "Other..." # will present the regular graphical login prompt. The second option # is to change the 'Display Login Window as:' setting to 'Name and # password entry fields', which replaces the login panel with a # graphical login prompt. # # There are no function keys, at least not in Darwin 1.3. # # It has no mouse support. # # It has full ANSI color support, and color combines correctly with # all three supported attributes: bold, inverse-video and underline. # However, bold colored text is almost unreadable (bolding is # accomplished using shifting and or-ing, and looks smeared) so bold # has been excluded from the list of color-compatible attributes # [using (ncv)]. The monochrome entry (-m) is useful if you use a # monochrome monitor. # # There is one serious bug with this terminal emulation's color # support: repositioning the cursor onto a cell with non-matching # colors obliterates that cell's contents, replacing it with a blank # and displaying a colored cursor in the "current" colors. There is # no complete workaround at present [other than using the monochrome # (-m) entries,] but removing the (msgr) capability seemed to help. # # The "standout" chosen was simple reverse-video, although a colorful # standout might be more aesthetically pleasing. Similarly, the bold # chosen is the terminal's own smeared bold, although a simple # color-change might be more readable. The color-bold (-b) entries # uses magenta colored text for bolding instead. The fancy color (-f # and -f2) entries use color for bold, standout and underlined text # (underlined text is still underlined, though.) # # Apparently the terminal emulator does support a VT-100-style # alternate character set, but all the alternate character set # positions have been left blank in the font. For this reason, no # alternate character set capabilities have been included in this # description. The console driver appears to be ASCII-only, so (enacs) # has been excluded [although the VT-100 sequence does work.] # # The default Mac OS X and Darwin installation reports "vt100" as the # terminal type, and exports no helpful environment variables. To fix # this, change the "console" entry in /etc/ttys from "vt100" to # "xnuppc-WxH", where W and H are the character dimensions of your # console (see below.) # # The font used by the terminal emulator is apparently one originally # drawn by Ka-Ping Yee, and uses 8x16-pixel characters. This # file includes descriptions for the following geometries: # # Pixels Characters Entry Name (append -m for monochrome) # ------------------------------------------------------------------- # 640x400 80x25 xnuppc-80x25 # 640x480 80x30 xnuppc-80x30 # 720x480 90x30 xnuppc-90x30 # 800x600 100x37 xnuppc-100x37 # 896x600 112x37 xnuppc-112x37 # 1024x640 128x40 xnuppc-128x40 # 1024x768 128x48 xnuppc-128x48 # 1152x768 144x48 xnuppc-144x48 # 1280x1024 160x64 xnuppc-160x64 # 1600x1024 200x64 xnuppc-200x64 # 1600x1200 200x75 xnuppc-200x75 # 2048x1536 256x96 xnuppc-256x96 # # The basic "xnuppc" entry includes no size information, and the # emulator includes no reporting capability, so you'll be at the mercy # of the TTY device (which reports incorrectly on my hardware.) The # color-bold entries do not include size information. # The '+' entries are building blocks xnuppc+basic|Darwin PowerPC Console basic capabilities, am, bce, mir, xenl, it#8, bold=\E[1m, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dsl=\E]2;\007, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ind=^J, kbs=\177, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, rc=\E8, rev=\E[7m, ri=\EM, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m, sgr0=\E[m, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=vt100+keypad, xnuppc+c|Darwin PowerPC Console ANSI color support, colors#8, ncv#32, pairs#64, op=\E[37;40m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, xnuppc+b|Darwin PowerPC Console color-bold support, ncv#32, bold=\E[35m, sgr=\E[0%?%p6%t;35%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m, use=xnuppc+basic, xnuppc+f|Darwin PowerPC Console fancy color support, ncv#35, sgr=\E[0%?%p6%t;35%;%?%p2%t;36;4%;%?%p1%t;33;44%;%?%p3%t;7%;m, smso=\E[33;44m, smul=\E[36;4m, use=xnuppc+b, xnuppc+f2|Darwin PowerPC Console alternate fancy color support, ncv#35, bold=\E[33m, sgr=\E[0%?%p6%t;33%;%?%p2%t;34%;%?%p1%t;31;47%;%?%p3%t;7%;m, smso=\E[31;47m, smul=\E[34m, use=xnuppc+basic, # Building blocks for specific screen sizes xnuppc+80x25|Darwin PowerPC Console 80x25 support (640x400 pixels), cols#80, lines#25, xnuppc+80x30|Darwin PowerPC Console 80x30 support (640x480 pixels), cols#80, lines#30, xnuppc+90x30|Darwin PowerPC Console 90x30 support (720x480 pixels), cols#90, lines#30, xnuppc+100x37|Darwin PowerPC Console 100x37 support (800x600 pixels), cols#100, lines#37, xnuppc+112x37|Darwin PowerPC Console 112x37 support (896x600 pixels), cols#112, lines#37, xnuppc+128x40|Darwin PowerPC Console 128x40 support (1024x640 pixels), cols#128, lines#40, xnuppc+128x48|Darwin PowerPC Console 128x48 support (1024x768 pixels), cols#128, lines#48, xnuppc+144x48|Darwin PowerPC Console 144x48 support (1152x768 pixels), cols#144, lines#48, xnuppc+160x64|Darwin PowerPC Console 160x64 support (1280x1024 pixels), cols#160, lines#64, xnuppc+200x64|Darwin PowerPC Console 200x64 support (1600x1024 pixels), cols#200, lines#64, xnuppc+200x75|Darwin PowerPC Console 200x75 support (1600x1200 pixels), cols#200, lines#75, xnuppc+256x96|Darwin PowerPC Console 256x96 support (2048x1536 pixels), cols#256, lines#96, # These are different combinations of the building blocks xnuppc-m|darwin-m|Darwin PowerPC Console (monochrome), use=xnuppc+basic, xnuppc|darwin|Darwin PowerPC Console (color), use=xnuppc+c, use=xnuppc+basic, xnuppc-m-b|darwin-m-b|Darwin PowerPC Console (monochrome w/color-bold), use=xnuppc+b, xnuppc-b|darwin-b|Darwin PowerPC Console (color w/color-bold), use=xnuppc+b, use=xnuppc+c, xnuppc-m-f|darwin-m-f|Darwin PowerPC Console (fancy monochrome), use=xnuppc+f, xnuppc-f|darwin-f|Darwin PowerPC Console (fancy color), use=xnuppc+f, use=xnuppc+c, xnuppc-m-f2|darwin-m-f2|Darwin PowerPC Console (alternate fancy monochrome), use=xnuppc+f2, xnuppc-f2|darwin-f2|Darwin PowerPC Console (alternate fancy color), use=xnuppc+f2, use=xnuppc+c, # Combinations for specific screen sizes xnuppc-80x25-m|darwin-80x25-m|Darwin PowerPC Console (monochrome) 80x25, use=xnuppc+80x25, use=xnuppc+basic, xnuppc-80x25|darwin-80x25|Darwin PowerPC Console (color) 80x25, use=xnuppc+c, use=xnuppc+80x25, use=xnuppc+basic, xnuppc-80x30-m|darwin-80x30-m|Darwin PowerPC Console (monochrome) 80x30, use=xnuppc+80x30, use=xnuppc+basic, xnuppc-80x30|darwin-80x30|Darwin PowerPC Console (color) 80x30, use=xnuppc+c, use=xnuppc+80x30, use=xnuppc+basic, xnuppc-90x30-m|darwin-90x30-m|Darwin PowerPC Console (monochrome) 90x30, use=xnuppc+90x30, use=xnuppc+basic, xnuppc-90x30|darwin-90x30|Darwin PowerPC Console (color) 90x30, use=xnuppc+c, use=xnuppc+90x30, use=xnuppc+basic, xnuppc-100x37-m|darwin-100x37-m|Darwin PowerPC Console (monochrome) 100x37, use=xnuppc+100x37, use=xnuppc+basic, xnuppc-100x37|darwin-100x37|Darwin PowerPC Console (color) 100x37, use=xnuppc+c, use=xnuppc+100x37, use=xnuppc+basic, xnuppc-112x37-m|darwin-112x37-m|Darwin PowerPC Console (monochrome) 112x37, use=xnuppc+112x37, use=xnuppc+basic, xnuppc-112x37|darwin-112x37|Darwin PowerPC Console (color) 112x37, use=xnuppc+c, use=xnuppc+112x37, use=xnuppc+basic, xnuppc-128x40-m|darwin-128x40-m|Darwin PowerPC Console (monochrome) 128x40, use=xnuppc+128x40, use=xnuppc+basic, xnuppc-128x40|darwin-128x40|Darwin PowerPC Console (color) 128x40, use=xnuppc+c, use=xnuppc+128x40, use=xnuppc+basic, xnuppc-128x48-m|darwin-128x48-m|Darwin PowerPC Console (monochrome) 128x48, use=xnuppc+128x48, use=xnuppc+basic, xnuppc-128x48|darwin-128x48|Darwin PowerPC Console (color) 128x48, use=xnuppc+c, use=xnuppc+128x48, use=xnuppc+basic, xnuppc-144x48-m|darwin-144x48-m|Darwin PowerPC Console (monochrome) 144x48, use=xnuppc+144x48, use=xnuppc+basic, xnuppc-144x48|darwin-144x48|Darwin PowerPC Console (color) 144x48, use=xnuppc+c, use=xnuppc+144x48, use=xnuppc+basic, xnuppc-160x64-m|darwin-160x64-m|Darwin PowerPC Console (monochrome) 160x64, use=xnuppc+160x64, use=xnuppc+basic, xnuppc-160x64|darwin-160x64|Darwin PowerPC Console (color) 160x64, use=xnuppc+c, use=xnuppc+160x64, use=xnuppc+basic, xnuppc-200x64-m|darwin-200x64-m|Darwin PowerPC Console (monochrome) 200x64, use=xnuppc+200x64, use=xnuppc+basic, xnuppc-200x64|darwin-200x64|Darwin PowerPC Console (color) 200x64, use=xnuppc+c, use=xnuppc+200x64, use=xnuppc+basic, xnuppc-200x75-m|darwin-200x75-m|Darwin PowerPC Console (monochrome) 200x75, use=xnuppc+200x75, use=xnuppc+basic, xnuppc-200x75|darwin-200x75|Darwin PowerPC Console (color) 200x75, use=xnuppc+c, use=xnuppc+200x75, use=xnuppc+basic, xnuppc-256x96-m|darwin-256x96-m|Darwin PowerPC Console (monochrome) 256x96, use=xnuppc+256x96, use=xnuppc+basic, xnuppc-256x96|darwin-256x96|Darwin PowerPC Console (color) 256x96, use=xnuppc+c, use=xnuppc+256x96, use=xnuppc+basic, #### BeOS # # BeOS entry for Terminal program Seems to be almost ANSI beterm|BeOS Terminal, am, eo, mir, msgr, xenl, xon, colors#8, cols#80, it#8, lines#25, ncv#5, pairs#64, bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[11~, kf10=\E[20~, kf11=\E[21~, kf12=\E[22~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[16~, kf7=\E[17~, kf8=\E[18~, kf9=\E[19~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, op=\E[m, rc=\E8, rev=\E[7m, ri=\EM, rmir=\E[4l, rmkx=\E[?4l, rmso=\E[m, rmul=\E[24m, rs1=\Ec, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, setb=\E[%p1%{40}%+%cm, setf=\E[%p1%{30}%+%cm, sgr0=\E[0;10m, smir=\E[4h, smkx=\E[?4h, smso=\E[7m, smul=\E[4m, u6=\E[%i%p1%d;%p2%dR, u7=\E[6n, vpa=\E[%i%p1%dd, #### Linux consoles # # This entry is good for the 1.2.13 or later version of the Linux console. # # *************************************************************************** # * * # * WARNING: * # * Linuxes come with a default keyboard mapping kcbt=^I. This entry, in * # * response to user requests, assumes kcbt=\E[Z, the ANSI/ECMA reverse-tab * # * character. Here are the keymap replacement lines that will set this up: * # * * # keycode 15 = Tab Tab # alt keycode 15 = Meta_Tab # shift keycode 15 = F26 # string F26 ="\033[Z" # * * # * This has to use a key slot which is unfortunate (any unused one will * # * do, F26 is the higher-numbered one). The change ought to be built * # * into the kernel tables. * # * * # *************************************************************************** # # All linux kernels since 1.2.13 (at least) set the screen size # themselves; this entry assumes that capability. # linux-basic|linux console, am, bce, eo, mir, msgr, xenl, xon, it#8, ncv#18, U8#1, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, bel=^G, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h\E[?5l$<200/>, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, kb2=\E[G, kbs=\177, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, rc=\E8, rev=\E[7m, ri=\EM, rmam=\E[?7l, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E]R, sc=\E7, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p9%t;11%;m, smam=\E[?7h, smir=\E[4h, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, use=vt102+enq, use=klone+sgr, use=ecma+color, linux-m|Linux console no color, colors@, pairs@, setab@, setaf@, setb@, setf@, use=linux, # The 1.3.x kernels add color-change capabilities; if yours doesn't have this # and it matters, turn off . The %02x escape used to implement this is # not supposedly back-portable to older SV curses (although it has worked fine # on Solaris for several years) and not supported in ncurses versions before # 1.9.9. linux-c-nc|linux console with color-change, ccc, initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x, oc=\E]R, use=linux-basic, # From: Dennis Henriksen , 9 July 1996 linux-c|linux console 1.3.6+ for older ncurses, ccc, initc=\E]P%?%p1%{9}%>%t%p1%{10}%-%'a'%+%c%e%p1%d%;%p2%{255}%*%{1000}%/%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'a'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'a'%+%c%e%gx%d%;%p3%{255}%*%{1000}%/%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'a'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'a'%+%c%e%gx%d%;%p4%{255}%*%{1000}%/%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'a'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'a'%+%c%e%gx%d%;, oc=\E]R, use=linux-basic, # The 2.2.x kernels add a private mode that sets the cursor type; use that to # get a block cursor for cvvis. # reported by Frank Heckenbach . linux2.2|linux 2.2.x console, civis=\E[?25l\E[?1c, cnorm=\E[?25h\E[?0c, cvvis=\E[?25h\E[?8c, use=linux-c-nc, # Linux 2.6.x has a fix for SI/SO to work with UTF-8 encoding added here: # http://lkml.indiana.edu/hypermail/linux/kernel/0602.2/0868.html # Using SI/SO has the drawback that it confuses screen. SCS would work. # However, SCS is buggy (see comment in Debian #515609) -TD # Further, this breaks longstanding workarounds for Linux console's line # drawing (see Debian 665959) -TD linux2.6|linux 2.6.x console, rmacs=^O, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, use=linux2.2, # The 3.0 kernel adds support for clearing scrollback buffer (capability E3). # It is the same as xterm's erase-saved-lines feature. linux3.0|linux 3.0 kernels, E3=\E[3J, use=linux2.6, # This is Linux console for ncurses. linux|linux console, use=linux2.2, # Subject: linux 2.6.26 vt back_color_erase # Changes to the Linux console driver broke bce model as reported in # https://bugzilla.novell.com/show_bug.cgi?id=418613 # apparently from # http://lkml.org/lkml/2008/4/26/305 # http://lkml.org/lkml/2008/10/3/66 linux2.6.26|linux console w/o bce, bce@, use=linux2.6, # See the note on ICH/ICH1 VERSUS RMIR/SMIR near the end of file linux-nic|linux with ich/ich1 suppressed for non-curses programs, ich@, ich1@, use=linux, # This assumes you have used setfont(8) to load one of the Linux koi8-r fonts. # acsc entry from Pavel Roskin" , 29 Sep 1997. linux-koi8|linux with koi8 alternate character set, acsc=+\020\,\021-\030.^Y0\215`\004a\221f\234g\237h\220i\276j\205k\203l\202m\204n\212o~p\0q\0r\0s_t\206u\207v\211w\210x\201y\230z\231{\267|\274~\224, use=linux, use=klone+koi8acs, # Another entry for KOI8-r with Qing Long's acsc. # (which one better complies with the standard?) linux-koi8r|linux with koi8-r alternate character set, use=linux, use=klone+koi8acs, # Entry for the latin1 and latin2 fonts linux-lat|linux with latin1 or latin2 alternate character set, acsc=+\020\,\021-\030.^Y0\333`\004a\013f\370g\361h\260i\316j\211k\214l\206m\203n\305o~p\304q\212r\304s_t\207u\215v\301w\302x\205y\363z\362{\343|\330}\234~\376, use=linux, # This uses graphics from VT codeset instead of from cp437. # reason: cp437 (aka "straight to font") is not functional under luit. # from: Andrey V Lukyanov . linux-vt|linux console using VT codes for graphics, acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~, rmacs=\E(K, rmpch@, sgr@, sgr0=\E[0m\E(K\017, smacs=\E(0, smpch@, use=linux, # This is based on the Linux console (relies on the console to perform some # of the functionality), but does not recognize as many control sequences. # The program comes bundled with an old (circa 1998) copy of the Linux # console terminfo. It recognizes some non-ANSI/VT100 sequences such as # \E* move cursor to home, as as \E[H # \E,X same as \E(X # \EE move cursor to beginning of row # \E[y,xf same as \E[y,xH # # Note: The status-line support is buggy (dsl does not work). kon|kon2|jfbterm|Kanji ON Linux console, ccc@, hs, civis@, cnorm@, cvvis@, dsl=\E[?H, flash@, fsl=\E[?F, initc@, initp@, kcbt@, oc@, op=\E[37;40m, rs1=\Ec, tsl=\E[?T, use=linux, # 16-color linux console entry; this works with a 256-character # console font but bright background colors turn into dim ones when # you use a 512-character console font. This uses bold for bright # foreground colors and blink for bright background colors. linux-16color|linux console with 16 colors, colors#16, ncv#63, pairs#256, setab=\E[4%p1%{8}%m%d%?%p1%{7}%>%t;5%e;25%;m, setaf=\E[3%p1%{8}%m%d%?%p1%{7}%>%t;1%e;21%;m, use=linux, # bterm (bogl 0.1.18) # Implementation is in bogl-term.c # Key capabilities from linux terminfo entry # # Notes: # bterm only supports acs using wide-characters, has case for these: qjxamlkut # bterm does not support sgr, since it only processes one parameter -TD bterm|bogl virtual terminal, am, bce, colors#8, cols#80, lines#24, pairs#64, acsc=aajjkkllmmqqttuuxx, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, cub1=^H, cud1=^J, cup=\E[%i%p1%d;%p2%dH, ed=\E[J, el=\E[K, home=\E[H, ind=^J, kb2=\E[G, kbs=\177, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, op=\E[49m\E[39m, rev=\E[7m, ri=\EM, rmacs=^O, rmso=\E[27m, rmul=\E[24m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[0m, smacs=^N, smso=\E[7m, smul=\E[4m, #### Mach # # From: Matthew Vernon mach|Mach Console, am, km, cols#80, it#8, lines#25, bel=^G, blink=\E[5m, bold=\E[1m, clear=\Ec, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=\177, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[9, kend=\E[Y, kf1=\EOP, kf10=\EOY, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, khome=\E[H, kich1=\E[@, kll=\E[F, knp=\E[U, kpp=\E[V, rev=\E[7m, rmso=\E[0m, rmul=\E[24m, sgr0=\E[0m, smso=\E[7m, smul=\E[4m, mach-bold|Mach Console with bold instead of underline, rmul=\E[0m, smul=\E[1m, use=mach, mach-color|Mach Console with ANSI color, colors#8, pairs#64, dim=\E[2m, invis=\E[8m, op=\E[37;40m, rmso=\E[27m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=mach, # From: Samuel Thibault # Source: git://git.sv.gnu.org/hurd/gnumach.git # Files: i386/i386at/kd.c # # Added nel, hpa, sgr and removed rmacs, smacs based on source -TD mach-gnu|GNU Mach, acsc=+>\,<-\^.v0\333`+a\261f\370g\361h\260i#j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, ech=\E[%p1%dX, el1=\E[1K, hpa=\E[%i%p1%dG, ich=\E[%p1%d@, ich1=\E[@, indn=\E[%p1%dS, invis=\E[8m, nel=\EE, rin=\E[%p1%dT, sgr=\E[0%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;m, use=mach, mach-gnu-color|Mach Console with ANSI color, colors#8, pairs#64, op=\E[37;40m, rmso=\E[27m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=mach-gnu, # From: Marcus Brinkmann # http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/hurd/hurd/console/ # # Comments in the original are summarized here: # # hurd uses 8-bit characters (km). # # Although it doesn't do XON/XOFF, we don't want padding characters (xon). # # Regarding compatibility to vt100: hurd doesn't specify , as we don't # have the eat_newline_glitch. It doesn't support setting or removing tab # stops (hts/tbc). # # hurd uses ^H instead of \E[D for cub1, as only ^H implements and it is # one byte instead three. # # is not included because hurd has insert mode. # # hurd doesn't use ^J for scrolling, because this could put things into the # scrollback buffer. # # gsbom/grbom are used to enable/disable real bold (not intensity bright) mode. # This is a GNU extension. # # The original has commented-out ncv, but is restored here. # # Reading the source, RIS resets cnorm, but not xmous. hurd|The GNU Hurd console server, am, bce, bw, eo, km, mir, msgr, xenl, xon, colors#8, it#8, ncv#18, pairs#64, acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\Ec, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, flash=\Eg, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, invis=\E[8m, kb2=\E[G, kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, ritm=\E[23m, rmacs=\E[10m, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\EM\E[?1000l, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m, sgr0=\E[0m, sitm=\E[3m, smacs=\E[11m, smir=\E[4h, smso=\E[7m, smul=\E[4m, vpa=\E[%i%p1%dd, grbom=\E[>1l, gsbom=\E[>1h, #### QNX # # QNX 4.0 Console # Michael's original version of this entry had , , # ; this was so terminfo applications could write the lower # right corner without triggering a scroll. The ncurses terminfo library can # handle this case with the capability, and prefers for better # optimization. Bug: The capability resets attributes. # From: Michael Hunter 30 Jul 1996 # (removed: ) qnx|qnx4|qnx console, daisy, km, mir, msgr, xhpa, xt, colors#8, cols#80, it#4, lines#25, ncv#3, pairs#8, acsc=O\333a\261j\331k\277l\332m\300n\305o\337q\304s\334t\303u\264v\301w\302x\263, bel=^G, blink=\E{, bold=\E<, civis=\Ey0, clear=\EH\EJ, cnorm=\Ey1, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\Ey2, dch1=\Ef, dl1=\EF, ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\Ee, il1=\EE, ind=^J, kBEG=\377\356, kCAN=\377\263, kCMD=\377\267, kCPY=\377\363, kCRT=\377\364, kDL=\377\366, kEND=\377\301, kEOL=\377\311, kEXT=\377\367, kFND=\377\370, kHLP=\377\371, kHOM=\377\260, kIC=\377\340, kLFT=\377\264, kMOV=\377\306, kMSG=\377\304, kNXT=\377\272, kOPT=\377\372, kPRT=\377\275, kPRV=\377\262, kRDO=\377\315, kRES=\377\374, kRIT=\377\266, kRPL=\377\373, kSAV=\377\307, kSPD=\377\303, kUND=\377\337, kbeg=\377\300, kcan=\377\243, kcbt=\377\0, kclo=\377\343, kclr=\377\341, kcmd=\377\245, kcpy=\377\265, kcrt=\377\305, kctab=\377\237, kcub1=\377\244, kcud1=\377\251, kcuf1=\377\246, kcuu1=\377\241, kdch1=\377\254, kdl1=\377\274, ked=\377\314, kel=\377\310, kend=\377\250, kent=\377\320, kext=\377\270, kf1=\377\201, kf10=\377\212, kf11=\377\256, kf12=\377\257, kf13=\377\213, kf14=\377\214, kf15=\377\215, kf16=\377\216, kf17=\377\217, kf18=\377\220, kf19=\377\221, kf2=\377\202, kf20=\377\222, kf21=\377\223, kf22=\377\224, kf23=\377\333, kf24=\377\334, kf25=\377\225, kf26=\377\226, kf27=\377\227, kf28=\377\230, kf29=\377\231, kf3=\377\203, kf30=\377\232, kf31=\377\233, kf32=\377\234, kf33=\377\235, kf34=\377\236, kf35=\377\276, kf36=\377\277, kf37=\377\321, kf38=\377\322, kf39=\377\323, kf4=\377\204, kf40=\377\324, kf41=\377\325, kf42=\377\326, kf43=\377\327, kf44=\377\330, kf45=\377\331, kf46=\377\332, kf47=\377\316, kf48=\377\317, kf5=\377\205, kf6=\377\206, kf7=\377\207, kf8=\377\210, kf9=\377\211, kfnd=\377\346, khlp=\377\350, khome=\377\240, khts=\377\342, kich1=\377\253, kil1=\377\273, kind=\377\261, kmov=\377\351, kmrk=\377\355, kmsg=\377\345, knp=\377\252, knxt=\377\312, kopn=\377\357, kopt=\377\353, kpp=\377\242, kprt=\377\255, kprv=\377\302, krdo=\377\336, kref=\377\354, kres=\377\360, krfr=\377\347, kri=\377\271, krmir=\377\313, krpl=\377\362, krst=\377\352, ksav=\377\361, kslt=\377\247, kspd=\377\335, ktbc=\377\344, kund=\377\365, mvpa=\E!%p1%02d, op=\ER, rep=\Eg%p2%{32}%+%c%p1%c, rev=\E(, ri=\EI, rmcup=\Eh\ER, rmso=\E), rmul=\E], rs1=\ER, setb=\E@%p1%Pb%gb%gf%d%d, setf=\E@%p1%Pf%gb%gf%d%d, sgr0=\E}\E]\E>\E), smcup=\Ei, smso=\E(, smul=\E[, # # qnxt|qnxt4|QNX4 terminal, crxm, use=qnx4, # qnxm|QNX4 with mouse events, maddr#1, chr=\E/, cvr=\E", is1=\E/0t, mcub=\E/>1h, mcub1=\E/>7h, mcud=\E/>1h, mcud1=\E/>1l\E/>9h, mcuf=\E/>1h\E/>9l, mcuf1=\E/>7l, mcuu=\E/>6h, mcuu1=\E/>6l, rmicm=\E/>2l, smicm=\E/>2h, use=qnx4, # qnxw|QNX4 windows, xvpa, use=qnxm, # # Monochrome QNX4 terminal or console. Setting this terminal type will # allow an application running on a color console to behave as if it # were a monochrome terminal. Output will be through stdout instead of # console writes because the term routines will recognize that the # terminal name starts with 'qnxt'. # qnxtmono|Monochrome QNX4 terminal or console, colors@, pairs@, scp@, use=qnx4, # From: Federico Bianchi , 1 Jul 1998 # (esr: commented out and to avoid warnings.) # (TD: derive from original qnx4 entry) qnxt2|qnx 2.15 serial terminal, am, civis@, cnorm@, cvvis@, dch1@, ich1@, kRES@, kRPL@, kUND@, kspd@, rep@, rmcup@, rmso=\E>, setb@, setf@, smcup@, smso=\E<, use=qnx4, # QNX ANSI terminal definition qansi-g|QNX ANSI, am, eslok, hs, xon, colors#8, cols#80, it#8, lines#25, ncv#19, pairs#64, wsl#80, acsc=Oa``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[2J\E[H, cnorm=\E[?25h\E[?12l, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[1M, dsl=\E[r, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K\E[X, flash=\E[?5h$<200>\E[?5l, fsl=\E[?6h\E8, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[1@, il=\E[%p1%dL, il1=\E[1L, ind=\E[S, indn=\E[%p1%dS, invis=\E[9m, is2=\E>\E[?1l\E[?7h\E[0;10;39;49m, is3=\E(B\E)0, kBEG=\ENn, kCAN=\E[s, kCMD=\E[t, kCPY=\ENs, kCRT=\ENt, kDL=\ENv, kEXT=\ENw, kFND=\ENx, kHLP=\ENy, kHOM=\E[h, kLFT=\E[d, kNXT=\E[u, kOPT=\ENz, kPRV=\E[v, kRIT=\E[c, kbs=^H, kcan=\E[S, kcbt=\E[Z, kclo=\ENc, kclr=\ENa, kcmd=\E[G, kcpy=\E[g, kctab=\E[z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[p, kend=\E[Y, kext=\E[y, kf1=\EOP, kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf13=\EOp, kf14=\EOq, kf15=\EOr, kf16=\EOs, kf17=\EOt, kf18=\EOu, kf19=\EOv, kf2=\EOQ, kf20=\EOw, kf21=\EOx, kf22=\EOy, kf23=\EOz, kf24=\EOa, kf25=\E[1~, kf26=\E[2~, kf27=\E[3~, kf28=\E[4~, kf29=\E[5~, kf3=\EOR, kf30=\E[6~, kf31=\E[7~, kf32=\E[8~, kf33=\E[9~, kf34=\E[10~, kf35=\E[11~, kf36=\E[12~, kf37=\E[17~, kf38=\E[18~, kf39=\E[19~, kf4=\EOS, kf40=\E[20~, kf41=\E[21~, kf42=\E[22~, kf43=\E[23~, kf44=\E[24~, kf45=\E[25~, kf46=\E[26~, kf47=\E[27~, kf48=\E[28~, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, kfnd=\ENf, khlp=\ENh, khome=\E[H, khts=\ENb, kich1=\E[@, kil1=\E[`, kind=\E[a, kmov=\ENi, kmrk=\ENm, kmsg=\ENe, knp=\E[U, kopn=\ENo, kopt=\ENk, kpp=\E[V, kref=\ENl, kres=\ENp, krfr=\ENg, kri=\E[b, krpl=\ENr, krst=\ENj, ksav=\ENq, kslt=\E[T, ktbc=\ENd, kund=\ENu, ll=\E[99H, nel=\EE, op=\E[39;49m, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmacs=^O, rmam=\E[?7l, rmso=\E[27m, rmul=\E[24m, rs1=\017\E[?7h\E[0;39;49m$<2>\E>\E[?1l, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%t;7%;%?%p7%t;9%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E7\E1;24r\E[?6l\E[25;%i%p1%dH, # qansi|QNX ansi with console writes, daisy, xhpa, use=qansi-g, # qansi-t|QNX ansi without console writes, crxm, use=qansi, # qansi-m|QNX ansi with mouse, maddr#1, chr=\E[, cvr=\E], is1=\E[0t, mcub=\E[>1h, mcub1=\E[>7h, mcud=\E[>1h, mcud1=\E[>1l\E[>9h, mcuf=\E[>1h\E[>9l, mcuf1=\E[>7l, mcuu=\E[>6h, mcuu1=\E[>6l, rmicm=\E[>2l, smicm=\E[>2h, use=qansi, # qansi-w|QNX ansi for windows, xvpa, use=qansi-m, #### SCO consoles # SCO console and SOS-Syscons console for 386bsd # (scoansi: had unknown capabilities # :Gc=N:Gd=K:Gh=M:Gl=L:Gu=J:Gv=\072:\ # :GC=E:GD=B:GH=D:GL=\64:GU=A:GV=\63:GR=C: # :G1=?:G2=Z:G3=@:G4=Y:G5=;:G6=I:G7=H:G8=<:\ # :CW=\E[M:NU=\E[N:RF=\E[O:RC=\E[P:\ # :WL=\E[S:WR=\E[T:CL=\E[U:CR=\E[V:\ # I renamed GS/GE/HM/EN/PU/PD/RT and added klone+sgr-dumb, based # on the =\E[12m -- esr) # # klone+sgr-dumb is an error since the acsc does not match -TD # # In this description based on SCO's keyboard(HW) manpage list of default # function key values: # F13-F24 are shifted F1-F12 # F25-F36 are control F1-F12 # F37-F48 are shift+control F1-F12 # # hpa/vpa work in the console, but not in scoterm: # hpa=\E[%p1%dG, # vpa=\E[%p1%dd, # # SCO's terminfo uses # kLFT=\E[d, # kRIT=\E[c, # which do not work (console or scoterm). # # Console documents only 3 attributes can be set with SGR (so we don't use sgr). scoansi-old|SCO Extended ANSI standard crt (5.0.5), OTbs, am, bce, eo, xon, colors#8, cols#80, it#8, lines#25, pairs#64, acsc=+/\,.-\230.\2310[5566778899\:\:;;<<==>>FFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXX`\204a0fxgqh2jYk?lZm@nEqDtCu4vAwBx3yszr{c}\034~\207, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[=14;12C, clear=\E[H\E[2J, cnorm=\E[=10;12C, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[=0;12C, dch=\E[%p1%dP, dch1=\E[P, dispc=\E[=%p1%dg, dl=\E[%p1%dM, dl1=\E[M, ed=\E[m\E[J, el=\E[m\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, invis=\E[8m, kbeg=\E[E, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kend=\E[F, kf1=\E[M, kf10=\E[V, kf11=\E[W, kf12=\E[X, kf13=\E[Y, kf15=\E[a, kf16=\E[b, kf17=\E[c, kf18=\E[d, kf19=\E[e, kf2=\E[N, kf20=\E[f, kf21=\E[g, kf22=\E[h, kf23=\E[i, kf24=\E[j, kf25=\E[k, kf26=\E[l, kf27=\E[m, kf28=\E[n, kf29=\E[o, kf3=\E[O, kf30=\E[p, kf31=\E[q, kf32=\E[r, kf33=\E[s, kf34=\E[t, kf35=\E[u, kf36=\E[v, kf37=\E[w, kf38=\E[x, kf39=\E[y, kf4=\E[P, kf40=\E[z, kf41=\E[@, kf42=\E[[, kf43=\E[\\, kf44=\E[], kf45=\E[\^, kf46=\E[_, kf47=\E[`, kf48=\E[{, kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H, kich1=\E[L, knp=\E[G, kpp=\E[I, op=\E[0;37;40m, rc=\E8, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmacs=\E[10m, rmam=\E[?7l, rmso=\E[m, rmul=\E[m, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[0;10m, smacs=\E[12m, smam=\E[?7h, smso=\E[7m, smul=\E[4m, scoansi-new|SCO Extended ANSI standard crt (5.0.6), km, civis=\E[=0c, cnorm=\E[=1c, csr=\E[%i%p1%d;%p2%dr, cvvis=\E[=2c, mgc=\E[=r, oc=\E[51m, op=\E[50m, rep=\E[%p1%d;%p2%db, rmm=\E[=11L, sgr=\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;12%e;10%;m, smgb=\E[=1;0m, smgbp=\E[=1;%i%p1%dm, smglp=\E[=2;%i%p1%dm, smgr=\E[=3;0m, smgrp=\E[=3;%i%p1%dm, smgt=\E[=0;0m, smgtp=\E[=0;%i%p1%dm, smm=\E[=10L, wind=\E[%i%p1%d;%p2%d;%i%p3%d;%p4%dr, use=scoansi-old, # make this easy to change... scoansi|SCO Extended ANSI standard crt, use=scoansi-old, #### SGI consoles # Sent by Stefan Stapelberg , 24 Feb 1997, this is # from SGI's terminfo database. SGI's entry shows F9-F12 with the codes # for the application keypad mode. We have added iris-ansi-ap rather than # change the original to keypad mode. # # (iris-ansi: added rmam/smam based on init string -- esr) # # This entry, and those derived from it, is used in xwsh (also known as # winterm). Some capabilities that do not fit into the terminfo model # include the shift- and control-functionkeys: # # F1-F12 generate different codes when shift or control modifiers are used. # For example: # F1 \E[001q # shift F1 \E[013q # control-F1 \E[025q # # In application keypad mode, F9-F12 generate codes like vt100 PF1-PF4, i.e., # \EOP to \EOS. The shifted and control modifiers still do the same thing. # # The cursor keys also have different codes: # control-up \E[162q # control-down \E[165q # control-left \E[159q # control-right \E[168q # # shift-up \E[161q # shift-down \E[164q # shift-left \E[158q # shift-right \E[167q # # control-tab \[072q # iris-ansi|iris-ansi-net|IRIS emulating 40 line ANSI terminal (almost VT100), am, cols#80, it#8, lines#40, bel=^G, bold=\E[1m, clear=\E[H\E[2J, cnorm=\E[9/y\E[12/y\E[=6l, cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[10/y\E[=1h\E[=2l\E[=6h, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=\ED, is2=\E[?1l\E>\E[?7h\E[100g\E[0m\E7\E[r\E8, kDC=\E[P, kEND=\E[147q, kHOM=\E[143q, kLFT=\E[158q, kPRT=\E[210q, kRIT=\E[167q, kSPD=\E[218q, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kend=\E[146q, kent=^M, kf1=\E[001q, kf10=\E[010q, kf11=\E[011q, kf12=\E[012q, kf2=\E[002q, kf3=\E[003q, kf4=\E[004q, kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q, kf9=\E[009q, khome=\E[H, kich1=\E[139q, knp=\E[154q, kpp=\E[150q, kprt=\E[209q, krmir=\E[146q, kspd=\E[217q, nel=\EE, pfkey=\EP101;%p1%d.y%p2%s\E\\, rc=\E8, rev=\E[7m, ri=\EM, rmam=\E[?7l, rmso=\E[m, rmul=\E[m, sc=\E7, sgr0=\E[m, smam=\E[?7h, smso=\E[1;7m, smul=\E[4m, tbc=\E[3g, iris-ansi-ap|IRIS ANSI in application-keypad mode, is2=\E[?1l\E=\E[?7h, kent=\EOM, kf10=\E[010q, kf11=\E[011q, kf12=\E[012q, kf9=\E[009q, use=iris-ansi, # From the man-page, this is a quasi-vt100 emulator that runs on SGI's IRIX # (T.Dickey 98/1/24) iris-color|xwsh|IRIX ANSI with color, ncv#33, csr=\E[%i%p1%d;%p2%dr, dch=\E[%p1%dP, dim=\E[2m, ech=\E[%p1%dX, ich=\E[%p1%d@, rc=\E8, ritm=\E[23m, rmul=\E[24m, rs1=\Ec, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sitm=\E[3m, use=vt100+enq, use=klone+color, use=iris-ansi-ap, #### OpenBSD consoles # # From: Alexei Malinin ; October, 2011. # # The following terminal descriptions for the AMD/Intel PC console # were prepared based on information contained in the OpenBSD-4.9 # termtypes.master and wscons(4) & vga(4) manuals (2010, November). # # Added bce based on testing with tack -TD # Added several capabilities to pccon+base, reading wsemul_vt100_subr.c -TD # Changed kbs to DEL and removed keys that duplicate stty settings -TD # # Notes from testing with vttest: # fails wrapping test # no 8-bit controls # identifies as vt200 with selective erase, but does not implement DECSCA # no vt52 mode # also lacks these: # ESC # 8 DEC Screen Alignment Test (DECALN). # CSI ? 5 h Reverse Video (DECSCNM). # pccon+keys|OpenBSD PC keyboard keys, kbs=\177, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[8~, kent=^M, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf21=\E[35~, kf22=\E[36~, kf23=\E[37~, kf24=\E[38~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[7~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krfr=^R, pccon+sgr+acs0|sgr and simple ASCII pseudographics for OpenBSD PC console, acsc=+>\,<-\^.v0#`+a\:f\\h#i#j+k+l+m+n+o~p-q-r-s_t+u+v+w+x|y#z#{*|!}#~o, sgr=\E[0%?%p1%p3%|%t;7%;%?%p6%t;1%;%?%p2%t;4%;m, sgr0=\E[m, pccon+sgr+acs|sgr and default ASCII pseudographics for OpenBSD PC console, acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, enacs=\E)0$<5>, rmacs=\E(B$<5>, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<2>, sgr0=\E[m\E(B$<5>, smacs=\E(0$<5>, # underline renders as color pccon+colors|ANSI colors for OpenBSD PC console, bce, colors#8, ncv#2, pairs#64, op=\E[47;30m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, pccon+base|base capabilities for OpenBSD PC console, am, km, mc5i, msgr, npc, nxon, xenl, xon, cols#80, it#8, lines#24, bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il1=\E[L, ind=\ED, nel=\EE, rev=\E[7m, ri=\EM, rmam=\E[?7l, rmso=\E[27m, rmul=\E[24m, rs2=\Ec$<50>, smam=\E[?7h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n, pccon0-m|OpenBSD PC console without colors & with simple ASCII pseudographics, use=pccon+sgr+acs0, use=pccon+base, use=pccon+keys, pccon0|OpenBSD PC console with simple ASCII pseudographics, use=pccon0-m, use=pccon+colors, pccon-m|OpenBSD PC console without colors, use=pccon+base, use=pccon+sgr+acs, use=pccon+keys, pccon|OpenBSD PC console, use=pccon-m, use=pccon+colors, #### NetBSD consoles # # pcvt termcap database entries (corresponding to release 3.31) # Author's last edit-date: [Fri Sep 15 20:29:10 1995] # # (For the terminfo master file, I translated these into terminfo syntax. # Then I dropped all the pseudo-HP entries. we don't want and can't use # the :Xs: flag. Then I split :is: into a size-independent and a # size-dependent . Finally, I added / -- esr) # NOTE: has been taken out of this entry. for reference, it should # be . For discussion, see ICH/ICH1 VERSUS RMIR/SMIR below. # (esr: added and to resolve NetBSD Problem Report #4583) pcvtXX|pcvt vt200 emulator (DEC VT220), am, km, mir, msgr, xenl, it#8, vt#3, acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, indn=\E[%p1%dS, is1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, kbs=\177, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\E[17~, kf2=\E[18~, kf3=\E[19~, kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~, khome=\E[1~, kich1=\E[2~, kll=\E[4~, knp=\E[6~, kpp=\E[5~, nel=\EE, rc=\E8, rev=\E[7m, rf=/usr/share/tabset/vt100, ri=\EM, rin=\E[%p1%dT, rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr0=\E[m, smacs=\E(0, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, # NetBSD/FreeBSD vt220 terminal emulator console (pc keyboard & monitor) # termcap entries for pure VT220-Emulation and 25, 28, 35, 40, 43 and # 50 lines entries; 80 columns pcvt25|dec vt220 emulation with 25 lines, cols#80, lines#25, is2=\E[1;25r\E[25;1H, use=pcvtXX, pcvt28|dec vt220 emulation with 28 lines, cols#80, lines#28, is2=\E[1;28r\E[28;1H, use=pcvtXX, pcvt35|dec vt220 emulation with 35 lines, cols#80, lines#35, is2=\E[1;35r\E[35;1H, use=pcvtXX, pcvt40|dec vt220 emulation with 40 lines, cols#80, lines#40, is2=\E[1;40r\E[40;1H, use=pcvtXX, pcvt43|dec vt220 emulation with 43 lines, cols#80, lines#43, is2=\E[1;43r\E[43;1H, use=pcvtXX, pcvt50|dec vt220 emulation with 50 lines, cols#80, lines#50, is2=\E[1;50r\E[50;1H, use=pcvtXX, # NetBSD/FreeBSD vt220 terminal emulator console (pc keyboard & monitor) # termcap entries for pure VT220-Emulation and 25, 28, 35, 40, 43 and # 50 lines entries; 132 columns pcvt25w|dec vt220 emulation with 25 lines and 132 cols, cols#132, lines#25, is2=\E[1;25r\E[25;1H, use=pcvtXX, pcvt28w|dec vt220 emulation with 28 lines and 132 cols, cols#132, lines#28, is2=\E[1;28r\E[28;1H, use=pcvtXX, pcvt35w|dec vt220 emulation with 35 lines and 132 cols, cols#132, lines#35, is2=\E[1;35r\E[35;1H, use=pcvtXX, pcvt40w|dec vt220 emulation with 40 lines and 132 cols, cols#132, lines#40, is2=\E[1;40r\E[40;1H, use=pcvtXX, pcvt43w|dec vt220 emulation with 43 lines and 132 cols, cols#132, lines#43, is2=\E[1;43r\E[43;1H, use=pcvtXX, pcvt50w|dec vt220 emulation with 50 lines and 132 cols, cols#132, lines#50, is2=\E[1;50r\E[50;1H, use=pcvtXX, # OpenBSD implements a color variation pcvt25-color|dec vt220 emulation with 25 lines and color, cols#80, lines#25, is2=\E[1;25r\E[25;1H, kf1=\EOP, kf10=\E[29~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf5=\E[17~, kf6=\E[18~, kf7=\E[19~, kf8=\E[20~, kf9=\E[21~, use=pcvtXX, use=ecma+color, # Terminfo entries to enable the use of the ncurses library in colour on a # NetBSD-arm32 console (only tested on a RiscPC). # Created by Dave Millen 22.07.98 # modified codes for setf/setb to setaf/setab, then to klone+color, corrected # typo in invis - TD arm100|arm100-am|Arm(RiscPC) ncurses compatible (for 640x480), am, bce, msgr, xenl, xon, cols#80, it#8, lines#30, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, clear=\E[H\E[J$<50>, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA, cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=^J, invis=\E[8m$<2>, ka1=\E[q, ka3=\E[s, kb2=\E[r, kbs=^H, kc1=\E[p, kc3=\E[n, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kent=\E[M, kf0=\E[y, kf1=\E[P, kf10=\E[x, kf2=\E[Q, kf3=\E[R, kf4=\E[S, kf5=\E[t, kf6=\E[u, kf7=\E[v, kf8=\E[l, kf9=\E[w, rc=\E8, rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;$<2>, sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m$<2>, smul=\E[4m$<2>, tbc=\E[3g, use=ecma+sgr, use=klone+color, arm100-w|arm100-wam|Arm(RiscPC) ncurses compatible (for 1024x768), cols#132, lines#50, use=arm100, # NetBSD/x68k console vt200 emulator. This port runs on a 68K machine # manufactured by Sharp for the Japenese market. # From Minoura Makoto , 12 May 1996 x68k|x68k-ite|NetBSD/x68k ITE, cols#96, lines#32, kclr=\E[9~, khlp=\E[28~, use=vt220, # : # Entry for the DNARD OpenFirmware console, close to ANSI but not quite. # # (still unfinished, but good enough so far.) ofcons|DNARD OpenFirmware console, bw, cols#80, lines#30, bel=^G, blink=\2335m, bold=\2331m, clear=^L, cr=^M, cub=\233%p1%dD, cub1=\233D, cud=\233%p1%dB, cud1=\233B, cuf=\233%p1%dC, cuf1=\233C, cup=\233%i%p1%d;%p2%dH, cuu=\233%p1%dA, cuu1=\233A, dch=\233%p1%dP, dch1=\233P, dim=\2332m, dl=\233%p1%dM, dl1=\233M, ed=\233J, el=\233K, flash=^G, ht=^I, ich=\233%p1%d@, ich1=\233@, il=\233%p1%dL, il1=\233L, ind=^J, invis=\2338m, kbs=^H, kcub1=\233D, kcud1=\233B, kcuf1=\233C, kcuu1=\233A, kdch1=\233P, kf1=\2330P, kf10=\2330M, kf2=\2330Q, kf3=\2330W, kf4=\2330x, kf5=\2330t, kf6=\2330u, kf7=\2330q, kf8=\2330r, kf9=\2330p, knp=\233/, kpp=\233?, nel=^M^J, rev=\2337m, rmso=\2330m, rmul=\2330m, sgr=\2330%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p5%t2%;%?%p7%t8%;%?%p1%p3%|%t;7%;m, sgr0=\2330m, smso=\2337m, smul=\2334m, # NetBSD "wscons" emulator in vt220 mode. # This entry is based on the NetBSD termcap entry, correcting the ncv value. # The emulator renders underlined text in red. Colors are otherwise usable. # # Testing the emulator and reading the source code (NetBSD 2.0), it appears # that "vt220" is inaccurate. There are a few vt220-features, but most of the # vt220 screens in vttest do not work with this emulator. For instance, it # identifies itself (primary DA response) as a vt220 with selective erase. But # the selective erase feature does not work. The secondary response is copied # from Kermit's emulation of vt220, does not correspond to actual vt220. At # the level of detail in a termcap, it is a passable emulator, since ECH does # work. Don't use it on a VMS system -TD wsvt25|NetBSD wscons in 25 line DEC VT220 mode, bce, msgr, colors#8, cols#80, it#8, lines#25, ncv#2, pairs#64, civis=\E[?25l, cnorm=\E[?25h, is2=\E[r\E[25;1H, kdch1=\E[3~, kend=\E[8~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[7~, op=\E[m, rs1=\Ec, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=vt220, wsvt25m|NetBSD wscons in 25 line DEC VT220 mode with Meta, km, use=wsvt25, # NetBSD 6.x still uses wscons, with minor changes (2014/02/22) -TD # # TERM is by default vt100 for the console, wsvt25 for other ttys. # Initial testing set TERM=xterm, based on comments by developers, found too # many differences to continue in that path. However, test-results may be # useful to people curious about compatibility with xterm. # # Testing with tack: # ----------------- # Failed: cbt, bel, flash, cvvis, smul (color), blink, invis # There is color-bleeding in the color-pairs screen. # Attributes do not work with color # Failed: vpa/hpa # Failed: kf1-kf4, kf13-kf48, khome, kend # (effectively xterm-r6 for function-keys) # None of the function or cursor key-modifiers are encoded. # Console hangs in the smm/rmm test if TERM=xterm, does not show test # # Testing with vttest: # ------------------- # Identifies as vt220 with selective erase # (however, selective erase refers to DECSCA, SPA) # Does not implement vt52 # Uses spaces to simulate double-size characters # Does not support 8-bit controls # Does not support VT220 reports # Does not support send/receive mode # Supports ECH (like rxvt) # Does not support DECSCA # Does not support any of the ISO-6429 cursor-movement # Does not support any of the ISO-6429 miscellaneous tests # (SL/SR also leave unexpected char on screen too) # Background does not change in menu 11.6.9 (SGR 22-27) # None of the xterm special features tests work netbsd6|NetBSD wscons in 25 line DEC VT100 mode, kbs=\177, use=wsvt25, # `rasterconsole' provided by 4.4BSD, NetBSD and OpenBSD on SPARC, and # DECstation/pmax. rcons|BSD rasterconsole, use=sun-il, # Color version of above. Color currently only provided by NetBSD. rcons-color|BSD rasterconsole with ANSI color, bce, colors#8, pairs#64, op=\E[m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=rcons, # mgterm -- MGL/MGL2, MobileGear Graphic Library # for PocketBSD,PocketLinux,NetBSD/{hpcmips,mac68k} # -- the setf/setb are probably incorrect, more likely setaf/setab -TD # -- compare with cons25w mgterm, OTbs, OTpt, am, bce, bw, eo, km, msgr, npc, colors#8, cols#80, it#8, lines#18, pairs#64, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[30;1m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, hpa=\E[%i%p1%d`, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, kb2=\E[E, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kend=\E[F, kf1=\E[M, kf10=\E[V, kf11=\E[W, kf12=\E[X, kf2=\E[N, kf3=\E[O, kf4=\E[P, kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H, kich1=\E[L, knp=\E[G, kpp=\E[I, nel=\E[E, op=\E[x, rc=\E8, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmso=\E[m, rs2=\E[x\E[m\Ec, sc=\E7, setb=\E[4%p1%dm, setf=\E[3%p1%dm, sgr0=\E[m, smso=\E[7m, vpa=\E[%i%p1%dd, #### FreeBSD console entries # # From: Andrey Chernov 29 Mar 1996 # Andrey Chernov maintains the FreeBSD termcap distributions. # # Note: Users of FreeBSD 2.1.0 and older versions must either upgrade # or comment out the :cb: capability in the console entry. # # Alexander Lukyanov reports: # I have seen FreeBSD-2.1.5R... The old el1 bug changed, but it is still there. # Now el1 clears not only to the line beginning, but also a large chunk # of previous line. But there is another bug - ech does not work at all. # # for syscons # common entry without semigraphics # Bug: The capability resets attributes. # Bug? The ech and el1 attributes appear to move the cursor in some cases; for # instance el1 does if the cursor is moved to the right margin first. Removed # by T.Dickey 97/5/3 (ech=\E[%p1%dX, el1=\E[1K) # # Setting colors turns off reverse; we cannot guarantee order, so use ncv. # Note that this disables standout with color. # # The emulator sends difference strings based on shift- and control-keys, # like scoansi: # F13-F24 are shifted F1-F12 # F25-F36 are control F1-F12 # F37-F48 are shift+control F1-F12 cons25w|ansiw|ansi80x25-raw|freebsd console (25-line raw mode), am, bce, bw, eo, msgr, npc, colors#8, cols#80, it#8, lines#25, ncv#21, pairs#64, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cnorm=\E[=0C, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[=1C, dch=\E[%p1%dP, dch1=\E[P, dim=\E[30;1m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%i%p1%d`, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, kb2=\E[E, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kend=\E[F, kf1=\E[M, kf10=\E[V, kf11=\E[W, kf12=\E[X, kf13=\E[Y, kf14=\E[Z, kf15=\E[a, kf16=\E[b, kf17=\E[c, kf18=\E[d, kf19=\E[e, kf2=\E[N, kf20=\E[f, kf21=\E[g, kf22=\E[h, kf23=\E[i, kf24=\E[j, kf25=\E[k, kf26=\E[l, kf27=\E[m, kf28=\E[n, kf29=\E[o, kf3=\E[O, kf30=\E[p, kf31=\E[q, kf32=\E[r, kf33=\E[s, kf34=\E[t, kf35=\E[u, kf36=\E[v, kf37=\E[w, kf38=\E[x, kf39=\E[y, kf4=\E[P, kf40=\E[z, kf41=\E[@, kf42=\E[[, kf43=\E[\\, kf44=\E[], kf45=\E[\^, kf46=\E[_, kf47=\E[`, kf48=\E[{, kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H, kich1=\E[L, knp=\E[G, kpp=\E[I, nel=\E[E, op=\E[x, rc=\E8, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmso=\E[m, rs2=\E[x\E[m\Ec, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0%?%p1%t;2;7%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;30;1%;%?%p6%t;1%;m, sgr0=\E[m, smso=\E[7m, vpa=\E[%i%p1%dd, cons25|ansis|ansi80x25|freebsd console (25-line ansi mode), acsc=-\030.^Y0\333`\004a\260f\370g\361h\261i\025j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263y\363z\362~\371, use=cons25w, cons25-debian|freebsd console with debian backspace (25-line ansi mode), kbs=\177, kdch1=\E[3~, use=cons25, cons25-m|ansis-mono|ansi80x25-mono|freebsd console (25-line mono ansi mode), colors@, pairs@, bold@, dim@, op@, rmul=\E[m, setab@, setaf@, sgr=\E[0%?%p1%t;2;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;m, smul=\E[4m, use=cons25, cons30|ansi80x30|freebsd console (30-line ansi mode), lines#30, use=cons25, cons30-m|ansi80x30-mono|freebsd console (30-line mono ansi mode), lines#30, use=cons25-m, cons43|ansi80x43|freebsd console (43-line ansi mode), lines#43, use=cons25, cons43-m|ansi80x43-mono|freebsd console (43-line mono ansi mode), lines#43, use=cons25-m, cons50|ansil|ansi80x50|freebsd console (50-line ansi mode), lines#50, use=cons25, cons50-m|ansil-mono|ansi80x50-mono|freebsd console (50-line mono ansi mode), lines#50, use=cons25-m, cons60|ansi80x60|freebsd console (60-line ansi mode), lines#60, use=cons25, cons60-m|ansi80x60-mono|freebsd console (60-line mono ansi mode), lines#60, use=cons25-m, cons25r|pc3r|ibmpc3r|cons25-koi8-r|freebsd console w/koi8-r cyrillic, acsc=-\030.^Y0\215`\004a\220f\234h\221i\025j\205k\203l\202m\204n\212q\0t\206u\207v\211w\210x\201y\230z\231~\225, use=cons25w, cons25r-m|pc3r-m|ibmpc3r-mono|cons25-koi8r-m|freebsd console w/koi8-r cyrillic (mono), colors@, pairs@, op@, rmul=\E[m, setab@, setaf@, sgr=\E[0%?%p1%t;2;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;30;1%;%?%p6%t;1%;m, smul=\E[4m, use=cons25r, cons50r|cons50-koi8r|freebsd console w/koi8-r cyrillic (50 lines), lines#50, use=cons25r, cons50r-m|cons50-koi8r-m|freebsd console w/koi8-r cyrillic (50-line mono), lines#50, use=cons25r-m, cons60r|cons60-koi8r|freebsd console w/koi8-r cyrillic (60 lines), lines#60, use=cons25r, cons60r-m|cons60-koi8r-m|freebsd console w/koi8-r cyrillic (60-line mono), lines#60, use=cons25r-m, # ISO 8859-1 FreeBSD console cons25l1|cons25-iso8859|freebsd console w/iso 8859-1 chars, acsc=+\253\,\273-\030.\031`\201a\202f\207g\210i\247j\213k\214l\215m\216n\217o\220p\221q\222r\223s\224t\225u\226v\227w\230x\231y\232z\233~\237, use=cons25w, cons25l1-m|cons25-iso-m|freebsd console w/iso 8859-1 chars (mono), colors@, pairs@, bold@, dim@, op@, rmul=\E[m, setab@, setaf@, sgr=\E[0%?%p1%t;2;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;m, smul=\E[4m, use=cons25l1, cons50l1|cons50-iso8859|freebsd console w/iso 8859-1 chars (50 lines), lines#50, use=cons25l1, cons50l1-m|cons50-iso-m|freebsd console w/iso 8859-1 chars (50-line mono), lines#50, use=cons25l1-m, cons60l1|cons60-iso|freebsd console w/iso 8859-1 chars (60 lines), lines#60, use=cons25l1, cons60l1-m|cons60-iso-m|freebsd console w/iso 8859-1 chars (60-line mono), lines#60, use=cons25l1-m, # Starting with FreeBSD 8, an alternative configuration for syscons is provided, # which is intended to be xterm-compatible. See for example # http://svnweb.freebsd.org/base/stable/8/sys/dev/syscons/ # in particular scterm-teken.c # # For FreeBSD 9 and 10: # -------------------- # The /etc/ttys entries for console and other ttys are all configured to set # TERM=xterm. # # Testing with tack: # There is no VT100 line-drawing (uses +'s and -'s) # Shifted f1-f12 give cons25 codes, rather than xterm function-keys # # Testing with vttest: # Menu 2 diamonds don't work, blink ditto, light background ditto # The terminal identifies itself as VT100 with AVO # There is no VT52 support # There is no doublesize character support # The terminal supports ECH (like rxvt) # The terminal does not support send/receive mode # The terminal supports all of the ISO-6429 cursor-movement # The terminal supports some of the ISO-6429 miscellaneous tests # (SL/SR also leave unexpected char on screen too) # # Considering cons25 as a base, the line-drawing mostly works, but is missing # the cells which happen to have ASCII control-character values: # - ^X arrow pointing up # . ^Y arrow pointing down # i ^Y lantern # ` ^D diamond # # Those are removed from this entry's acsc string to avoid confusion. # The resulting description provides correct line-drawing and function-keys -TD teken|syscons with teken, bw@, mir, xenl, acsc=0\333a\260f\370g\361h\261j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263y\363z\362~\371, civis=\E[?25l, cnorm=\E[?25h, cvvis@, hpa=\E[%i%p1%dG, hts=\EH, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[F, kent=^M, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, rmir=\E[4l, smir=\E[4h, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd, use=cons25, #### 386BSD and BSD/OS Consoles # # This was the original 386BSD console entry (I think). # Some places it's named oldpc3|oldibmpc3. # From: Alex R.N. Wetmore origpc3|origibmpc3|IBM PC 386BSD Console, OTbs, am, bw, eo, xon, cols#80, lines#25, acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263, bold=\E[7m, clear=\Ec, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, ed=\E[J, el=\E[K, home=\E[H, ind=\E[S, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[Y, ri=\E[T, rmso=\E[1;0x\E[2;7x, rmul=\E[1;0x\E[2;7x, sgr0=\E[m\E[1;0x\E[2;7x, smso=\E[1;7x\E[2;0x, smul=\E[1;7x\E[2;0x, # description of BSD/386 console emulator in version 1.0 (supplied by BSDI) oldpc3|oldibmpc3|old IBM PC BSD/386 Console, OTbs, km, lines#25, bel=^G, bold=\E[=15F, cr=^M, cud1=^J, dim=\E[=8F, dl1=\E[M, ht=^I, il1=\E[L, ind=^J, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kich1=\E[L, kll=\E[F, knp=\E[G, kpp=\E[I, nel=^M^J, sgr0=\E[=R, # Description of BSD/OS console emulator in version 1.1, 2.0, 2.1 # Note, the emulator supports many of the additional console features # listed in the iBCS2 (e.g. character-set selection) though not all # are described here. This entry really ought to be upgraded. # Also note, the console will also work with fewer lines after doing # "stty rows NN", e.g. to use 24 lines. # (Color support from Kevin Rosenberg , 2 May 1996) # Bug: The capability resets attributes. bsdos-pc|IBM PC BSD/OS Console, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;1%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m, use=bsdos-pc-nobold, bsdos-pc-nobold|BSD/OS PC console w/o bold, use=klone+color, use=bsdos-pc-m, bsdos-pc-m|bsdos-pc-mono|BSD/OS PC console mono, OTbs, am, eo, km, xon, cols#80, it#8, lines#25, bel=^G, clear=\Ec, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kich1=\E[L, kll=\E[F, knp=\E[G, kpp=\E[I, nel=^M^J, rc=\E8, sc=\E7, sgr=\E[0;10%?%p1%t;7%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m%?%p5%t\E[=8F%;, use=klone+sgr8, # Old names for BSD/OS PC console used in releases before 4.1. pc3|BSD/OS on the PC Console, use=bsdos-pc-nobold, ibmpc3|pc3-bold|BSD/OS on the PC Console with bold instead of underline, use=bsdos-pc, # BSD/OS on the SPARC bsdos-sparc|Sun SPARC BSD/OS Console, use=sun, # BSD/OS on the PowerPC bsdos-ppc|PowerPC BSD/OS Console, use=bsdos-pc, #### DEC VT52 # (// capabilities aren't in DEC's official entry -- esr) # # Actually (TD pointed this out at the time the acsc string was added): # vt52 shouldn't define full acsc since most of the cells don't match. # see vt100 manual page A-31. This is the list that does match: # f degree # g plus/minus # h right-arrow # k down-arrow # m scan-1 # o scan-3 # q scan-5 # s scan-7 # The line-drawing happens to work in several terminal emulators, but should # not be used as a guide to the capabilities of the vt52. Note in particular # that vt52 does not support line-drawing characters (the scan-X values refer # to a crude plotting feature) -TD vt52|dec vt52, OTbs, cols#80, it#8, lines#24, acsc=+h.k0affggolpnqprrss, bel=^G, clear=\EH\EJ, cr=^M, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ, el=\EK, home=\EH, ht=^I, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, nel=^M^J, ri=\EI, rmacs=\EG, smacs=\EF, #### DEC VT100 and compatibles # # DEC terminals from the vt100 forward are collected here. Older DEC terminals # and micro consoles can be found in the `obsolete' section. More details on # the relationship between the VT100 and ANSI X3.64/ISO 6429/ECMA-48 may be # found near the end of this file. # # Except where noted, these entries are DEC's official terminfos. # Contact Bill Hedberg of Terminal Support # Engineering for more information. Updated terminfos and termcaps # are kept available at ftp://gatekeeper.dec.com/pub/DEC/termcaps. # # In October 1995 DEC sold its terminals business, including the VT and Dorio # line and trademark, to SunRiver Data Systems. SunRiver has since changed # its name to Boundless Technologies; see http://www.boundless.com. # # NOTE: Any VT100 emulation, whether in hardware or software, almost # certainly includes what DEC called the `Level 1 editing extension' codes; # only the very oldest VT100s lacked these and there probably aren't any of # those left alive. To capture these, use one of the VT102 entries. # # Note that the glitch in vt100 is not quite the same as on the Concept, # since the cursor is left in a different position while in the # weird state (concept at beginning of next line, vt100 at end # of this line) so all versions of vi before 3.7 don't handle # right on vt100. The correct way to handle is when # you output the char in column 80, immediately output CR LF # and then assume you are in column 1 of the next line. If # is on, am should be on too. # # I assume you have smooth scroll off or are at a slow enough baud # rate that it doesn't matter (1200? or less). Also this assumes # that you set auto-nl to "on", if you set it off use vt100-nam # below. # # The padding requirements listed here are guesses. It is strongly # recommended that xon/xoff be enabled, as this is assumed here. # # The vt100 uses and rather than // because the # tab settings are in non-volatile memory and don't need to be # reset upon login. Also setting the number of columns glitches # the screen annoyingly. You can type "reset" to get them set. # # The VT100 series terminals have cursor ("arrows") keys which can operate # in two different modes: Cursor Mode and Application Mode. Cursor Mode # is the reset state, and is assumed to be the normal state. Application # Mode is the "set" state. In Cursor Mode, the cursor keys transmit # "Esc [ {code}" sequences, conforming to ANSI standards. In Application # Mode, the cursor keys transmit "Esc O " sequences. Application Mode # was provided primarily as an aid to the porting of VT52 applications. It is # assumed that the cursor keys are normally in Cursor Mode, and expected that # applications such as vi will always transmit the string. Therefore, # the definitions for the cursor keys are made to match what the terminal # transmits after the string is transmitted. If the string # is a null string or is not defined, then cursor keys are assumed to be in # "Cursor Mode", and the cursor keys definitions should match that assumption, # else the application may fail. It is also expected that applications will # always transmit the string to the terminal before they exit. # # The VT100 series terminals have an auxiliary keypad, commonly referred to as # the "Numeric Keypad", because it is a cluster of numeric and function keys. # The Numeric Keypad which can operate in two different modes: Numeric Mode and # Application Mode. Numeric Mode is the reset state, and is assumed to be # the normal state. Application Mode is the "set" state. In Numeric Mode, # the numeric and punctuation keys transmit ASCII 7-bit characters, and the # Enter key transmits the same as the Return key (Note: the Return key # can be configured to send either LF (\015) or CR LF). In Application Mode, # all the keypad keys transmit "Esc O {code}" sequences. The PF1 - PF4 keys # always send the same "Esc O {code}" sequences. It is assumed that the keypad # is normally in Numeric Mode. If an application requires that the keypad be # in Application Mode then it is expected that the user, or the application, # will set the TERM environment variable to point to a terminfo entry which has # defined the string to include the codes that switch the keypad into # Application Mode, and the terminfo entry will also define function key # fields to match the Application Mode control codes. If the string # is a null string or is not defined, then the keypad is assumed to be in # Numeric Mode. If the string switches the keypad into Application # Mode, it is expected that the string will contain the control codes # necessary to reset the keypad to "Normal" mode, and it is also expected that # applications which transmit the string will also always transmit the # string to the terminal before they exit. # # Here's a diagram of the VT100 keypad keys with their bindings. # The top line is the name of the key (some DEC keyboards have the keys # labelled somewhat differently, like GOLD instead of PF1, but this is # the most "official" name). The second line is the escape sequence it # generates in Application Keypad mode (where "$" means the ESC # character). The third line contains two items, first the mapping of # the key in terminfo, and then in termcap. # _______________________________________ # | PF1 | PF2 | PF3 | PF4 | # | $OP | $OQ | $OR | $OS | # |_kf1__k1_|_kf2__k2_|_kf3__k3_|_kf4__k4_| # | 7 8 9 - | # | $Ow | $Ox | $Oy | $Om | # |_kf9__k9_|_kf10_k;_|_kf0__k0_|_________| # | 4 | 5 | 6 | , | # | $Ot | $Ou | $Ov | $Ol | # |_kf5__k5_|_kf6__k6_|_kf7__k7_|_kf8__k8_| # | 1 | 2 | 3 | | # | $Oq | $Or | $Os | enter | # |_ka1__K1_|_kb2__K2_|_ka3__K3_| $OM | # | 0 | . | | # | $Op | $On | | # |___kc1_______K4____|_kc3__K5_|_kent_@8_| # # Note however, that the arrangement of the 5-key ka1-kc3 do not follow the # terminfo guidelines. That is a compromise used to assign the remaining # keys on the keypad to kf5-kf0, used on older systems with legacy termcap # support: vt100+keypad|dec vt100 numeric keypad no fkeys, ka1=\EOq, ka3=\EOs, kb2=\EOr, kc1=\EOp, kc3=\EOn, vt100+pfkeys|dec vt100 numeric keypad, kent=\EOM, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, use=vt100+keypad, vt100+fnkeys|dec vt100 numeric keypad, kf0=\EOy, kf10=\EOx, kf5=\EOt, kf6=\EOu, kf7=\EOv, kf8=\EOl, kf9=\EOw, use=vt100+pfkeys, # # A better adaptation to modern keyboards such as the PC's, which have a dozen # function keys and the keypad 2,4,6,8 keys are labeled with arrows keys, is to # use the 5-key arrangement to model the arrow keys as suggested in the # terminfo guidelines: # _______________________________________ # | PF1 | PF2 | PF3 | PF4 | # | $OP | $OQ | $OR | $OS | # |_kf1__k1_|_kf2__k2_|_kf3__k3_|_kf4__k4_| # | 7 8 9 - | # | $Ow | $Ox | $Oy | $Om | # |_ka1__K1_|_________|_ka3__K3_|_________| # | 4 | 5 | 6 | , | # | $Ot | $Ou | $Ov | $Ol | # |_________|_kb2__K2_|_________|_________| # | 1 | 2 | 3 | | # | $Oq | $Or | $Os | enter | # |_kc1__K4_|_________|_kc3__K5_| $OM | # | 0 | . | | # | $Op | $On | | # |___________________|_________|_kent_@8_| # vt220+keypad|dec vt220 numeric keypad, ka1=\EOw, ka3=\EOy, kb2=\EOu, kc1=\EOq, kc3=\EOs, kent=\EOM, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, ka2=\EOx, kb1=\EOt, kb3=\EOv, kc2=\EOr, # vt100+enq|ncurses extension for vt100-style ENQ, u8=\E[?1;2c, use=ansi+enq, vt102+enq|ncurses extension for vt102-style ENQ, u8=\E[?6c, use=ansi+enq, # # And here, for those of you with orphaned VT100s lacking documentation, is # a description of the soft switches invoked when you do `Set Up'. # # Scroll 0-Jump Shifted 3 0-# # | 1-Smooth | 1-British pound sign # | Autorepeat 0-Off | Wrap Around 0-Off # | | 1-On | | 1-On # | | Screen 0-Dark Bkg | | New Line 0-Off # | | | 1-Light Bkg | | | 1-On # | | | Cursor 0-Underline | | | Interlace 0-Off # | | | | 1-Block | | | | 1-On # | | | | | | | | # 1 1 0 1 1 1 1 1 0 1 0 0 0 0 1 0 <--Standard Settings # | | | | | | | | # | | | Auto XON/XOFF 0-Off | | | Power 0-60 Hz # | | | 1-On | | | 1-50 Hz # | | Ansi/VT52 0-VT52 | | Bits Per Char. 0-7 Bits # | | 1-ANSI | | 1-8 Bits # | Keyclick 0-Off | Parity 0-Off # | 1-On | 1-On # Margin Bell 0-Off Parity Sense 0-Odd # 1-On 1-Even # # The following SET-UP modes are assumed for normal operation: # ANSI_MODE AUTO_XON/XOFF_ON NEWLINE_OFF 80_COLUMNS # WRAP_AROUND_ON JUMP_SCROLL_OFF # Other SET-UP modes may be set for operator convenience or communication # requirements; I recommend # AUTOREPEAT_ON BLOCK_CURSOR MARGIN_BELL_OFF SHIFTED_3_# # Unless you have a graphics add-on such as Digital Engineering's VT640 # (and even then, whenever it can be arranged!) you should set # INTERLACE_OFF # # (vt100: I added / based on the init string, also . -- esr) vt100|vt100-am|dec vt100 (w/advanced video), OTbs, am, mc5i, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, clear=\E[H\E[J$<50>, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA, cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=^J, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<2>, sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m$<2>, smul=\E[4m$<2>, tbc=\E[3g, use=vt100+fnkeys, vt100nam|vt100-nam|vt100 no automargins, am@, xenl@, use=vt100-am, vt100-vb|dec vt100 (w/advanced video) & no beep, bel@, flash=\E[?5h\E[?5l, use=vt100, # Ordinary vt100 in 132 column ("wide") mode. vt100-w|vt100-w-am|dec vt100 132 cols (w/advanced video), cols#132, lines#24, rs2=\E>\E[?3h\E[?4l\E[?5l\E[?8h, use=vt100-am, vt100-w-nam|vt100-nam-w|dec vt100 132 cols (w/advanced video no automargin), cols#132, lines#14, vt@, rs2=\E>\E[?3h\E[?4l\E[?5l\E[?8h, use=vt100-nam, # vt100 with no advanced video. vt100-nav|vt100 without advanced video option, xmc#1, blink@, bold@, rev@, rmso=\E[m, rmul@, sgr@, sgr0@, smso=\E[7m, smul@, use=vt100, vt100-nav-w|vt100-w-nav|dec vt100 132 cols 14 lines (no advanced video option), cols#132, lines#14, use=vt100-nav, # vt100 with one of the 24 lines used as a status line. # We put the status line on the top. vt100-s|vt100-s-top|vt100-top-s|vt100 for use with top sysline, eslok, hs, lines#23, clear=\E[2;1H\E[J$<50>, csr=\E[%i%i%p1%d;%p2%dr, cup=\E[%i%p1%{1}%+%d;%p2%dH$<5>, dsl=\E7\E[1;24r\E8, fsl=\E8, home=\E[2;1H, is2=\E7\E[2;24r\E8, tsl=\E7\E[1;%p1%dH\E[1K, use=vt100-am, # Status line at bottom. # Clearing the screen will clobber status line. vt100-s-bot|vt100-bot-s|vt100 for use with bottom sysline, eslok, hs, lines#23, dsl=\E7\E[1;24r\E8, fsl=\E8, is2=\E[1;23r\E[23;1H, tsl=\E7\E[24;%p1%dH\E[1K, use=vt100-am, # Most of the `vt100' emulators out there actually emulate a vt102 # This entry (or vt102-nsgr) is probably the right thing to use for # these. vt102|dec vt102, dch1=\E[P, dl1=\E[M, il1=\E[L, rmir=\E[4l, smir=\E[4h, use=vt100, vt102-w|dec vt102 in wide mode, cols#132, rs3=\E[?3h, use=vt102, # Many brain-dead PC comm programs that pretend to be `vt100-compatible' # fail to interpret the ^O and ^N escapes properly. Symptom: the # string in the canonical vt100 entry above leaves the screen littered # with little snowflake or star characters (IBM PC ROM character \017 = ^O) # after highlight turnoffs. This entry should fix that, and even leave # ACS support working, at the cost of making multiple-highlight changes # slightly more expensive. # From: Eric S. Raymond July 22 1995 vt102-nsgr|vt102 no sgr (use if you see snowflakes after highlight changes), sgr@, sgr0=\E[m, use=vt102, # VT125 Graphics CRT. Clear screen also erases graphics # Some vt125's came configured with vt102 support. vt125|vt125 graphics terminal, mir, clear=\E[H\E[2J\EPpS(E)\E\\$<50>, use=vt100, # This isn't a DEC entry, it came from University of Wisconsin. # (vt131: I added / based on the init string, also -- esr) vt131|dec vt131, OTbs, am, xenl, cols#80, it#8, lines#24, vt#3, bel=^G, blink=\E[5m$<2/>, bold=\E[1m$<2/>, clear=\E[;H\E[2J$<50/>, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C$<2/>, cup=\E[%i%p1%d;%p2%dH$<5/>, cuu1=\E[A$<2/>, ed=\E[J$<50/>, el=\E[K$<3/>, home=\E[H, ht=^I, is2=\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, nel=^M^J, rc=\E8, rev=\E[7m$<2/>, ri=\EM$<5/>, rmam=\E[?7h, rmkx=\E[?1l\E>, rmso=\E[m$<2/>, rmul=\E[m$<2/>, rs1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr0=\E[m$<2/>, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m$<2/>, smul=\E[4m$<2/>, # vt132 - like vt100 but slower and has ins/del line and such. # I'm told that / are backwards in the terminal from the # manual and from the ANSI standard, this describes the actual # terminal. I've never actually used a vt132 myself, so this # is untested. # vt132|DEC vt132, xenl, dch1=\E[P$<7>, dl1=\E[M$<99>, il1=\E[L$<99>, ind=\n$<30>, ip=$<7>, rmir=\E[4h, smir=\E[4l, use=vt100, # This vt220 description maps F5--F9 to the second block of function keys # at the top of the keyboard. The "DO" key is used as F10 to avoid conflict # with the key marked (ESC) on the vt220. See vt220d for an alternate mapping. # PF1--PF4 are used as F1--F4. # # added msgr -TD vt220-old|vt200-old|DEC VT220 in vt100 emulation mode, OTbs, OTpt, am, mir, msgr, xenl, xon, cols#80, lines#24, vt#3, OTnl=^J, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, civis=\E[?25l, clear=\E[H\E[2J$<50>, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH$<10>, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J$<50>, el=\E[K$<3>, home=\E[H, ht=^I, if=/usr/share/tabset/vt100, il1=\E[L, ind=\ED$<20/>, is2=\E[1;24r\E[24;1H, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[29~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[17~, kf6=\E[18~, kf7=\E[19~, kf8=\E[20~, kf9=\E[21~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, rc=\E8, rev=\E[7m$<2>, rf=/usr/share/tabset/vt100, ri=\EM$<14/>, rmacs=\E(B$<4>, rmam=\E[?7l, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<2>, sgr0=\E[m$<2>, smacs=\E(0$<2>, smam=\E[?7h, smir=\E[4h, smso=\E[7m, smul=\E[4m, # A much better description of the VT200/220; used to be vt220-8 # changed rmacs/smacs from shift-in/shift-out to vt200-old's explicit G0/G1 # designation to accommodate bug in pcvt -TD # # Here's a picture of the VT220 editing keypad: # +--------+--------+--------+ # | Find | Insert | Remove | # +--------+--------+--------+ # | Select | Prev | Next | # +--------+--------+--------+ vt220|vt200|dec vt220, OTbs, am, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0, flash=\E[?5h$<200/>\E[?5l, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, if=/usr/share/tabset/vt100, il=\E[%p1%dL, il1=\E[L, ind=\ED, is2=\E[?7h\E[>\E[?1l\E F\E[?4l, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krdo=\E[29~, kslt=\E[4~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E(B$<4>, rmam=\E[?7l, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\E[?3l, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<2>, sgr0=\E[m\E(B, smacs=\E(0$<2>, smam=\E[?7h, smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=ansi+pp, use=ansi+enq, vt220-w|vt200-w|DEC vt220 in wide mode, cols#132, rs3=\E[?3h, use=vt220, vt220-8bit|vt220-8|vt200-8bit|vt200-8|dec vt220/200 in 8-bit mode, OTbs, am, mc5i, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\2335m, bold=\2331m, clear=\233H\233J, cr=^M, csr=\233%i%p1%d;%p2%dr, cub=\233%p1%dD, cub1=^H, cud=\233%p1%dB, cud1=^J, cuf=\233%p1%dC, cuf1=\233C, cup=\233%i%p1%d;%p2%dH, cuu=\233%p1%dA, cuu1=\233A, dch=\233%p1%dP, dch1=\233P, dl=\233%p1%dM, dl1=\233M, ech=\233%p1%dX, ed=\233J, el=\233K, el1=\2331K, enacs=\E)0, flash=\233?5h$<200/>\233?5l, home=\233H, ht=^I, hts=\EH, ich=\233%p1%d@, if=/usr/share/tabset/vt100, il=\233%p1%dL, il1=\233L, ind=\ED, is2=\233?7h\233>\233?1l\E F\233?4l, kbs=^H, kcub1=\233D, kcud1=\233B, kcuf1=\233C, kcuu1=\233A, kdch1=\2333~, kf1=\EOP, kf10=\23321~, kf11=\23323~, kf12=\23324~, kf13=\23325~, kf14=\23326~, kf17=\23331~, kf18=\23332~, kf19=\23333~, kf2=\EOQ, kf20=\23334~, kf3=\EOR, kf4=\EOS, kf6=\23317~, kf7=\23318~, kf8=\23319~, kf9=\23320~, kfnd=\2331~, khlp=\23328~, khome=\233H, kich1=\2332~, knp=\2336~, kpp=\2335~, krdo=\23329~, kslt=\2334~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, mc0=\233i, mc4=\2334i, mc5=\2335i, nel=\EE, rc=\E8, rev=\2337m, ri=\EM, rmacs=\E(B, rmam=\233?7l, rmir=\2334l, rmso=\23327m, rmul=\23324m, rs1=\233?3l, sc=\E7, sgr=\2330%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<2>, sgr0=\2330m\E(B, smacs=\E(0, smam=\233?7h, smir=\2334h, smso=\2337m, smul=\2334m, tbc=\2333g, # vt220d: # This vt220 description regards F6--F10 as the second block of function keys # at the top of the keyboard. This mapping follows the description given # in the VT220 Programmer Reference Manual and agrees with the labeling # on some terminals that emulate the vt220. There is no support for an F5. # See vt220 for an alternate mapping. # vt220d|DEC VT220 in vt100 mode with DEC function key labeling, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~, kf5@, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, use=vt220-old, vt220-nam|v200-nam|VT220 in vt100 mode with no auto margins, am@, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h, use=vt220, # vt220 termcap written Tue Oct 25 20:41:10 1988 by Alex Latzko # (not an official DEC entry!) # The problem with real vt220 terminals is they don't send escapes when in # in vt220 mode. This can be gotten around two ways. 1> don't send # escapes or 2> put the vt220 into vt100 mode and use all the nifty # features of vt100 advanced video which it then has. # # This entry takes the view of putting a vt220 into vt100 mode so # you can use the escape key in emacs and everything else which needs it. # # You probably don't want to use this on a VMS machine since VMS will think # it has a vt220 and will get fouled up coming out of emacs # # From: Alexander Latzko , 30 Dec 1996 # (Added vt100 , to quiet a tic warning -- esr) # added msgr -TD vt200-js|vt220-js|dec vt200 series with jump scroll, am, msgr, cols#80, bel=^G, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il1=\E[L, ind=\ED, is2=\E[61"p\E[H\E[?3l\E[?4l\E[?1h\E[?5l\E[?6l\E[?7h\E[?8h\E[?25h\E>\E[m, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, nel=^M\ED, rc=\E8, rf=/usr/share/tabset/vt100, ri=\EM, rmdc=, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m$<5/>, rmul=\E[24m, rs1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, smdc=, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m$<5/>, smul=\E[4m, # This was DEC's vt320. Use the purpose-built one below instead #vt320|DEC VT320 in vt100 emulation mode, # use=vt220, # Use v320n for SCO's LYRIX. Otherwise, use Adam Thompson's vt320-nam. # vt320nam|v320n|DEC VT320 in vt100 emul. mode with NO AUTO WRAP mode, am@, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h, use=vt220, # These entries are not DEC's official ones, they were purpose-built for the # VT320. Here are the designer's notes: # is end on a PC kbd. Actually 'select' on a VT. Mapped to # 'Erase to End of Field'... since nothing seems to use 'end' anyways... # khome is Home on a PC kbd. Actually 'FIND' on a VT. # Things that use usually use tab anyways... and things that don't use # tab usually use instead... # kprv is same as tab - Backtab is useless... # I left out because of its RIDICULOUS complexity, # and the resulting fact that it causes the termcap translation of the entry # to SMASH the 1k-barrier... # From: Adam Thompson Sept 10 1995 # (vt320: uncommented --esr) vt320|vt300|dec vt320 7 bit terminal, am, hs, mir, msgr, xenl, cols#80, lines#24, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H, kbs=\177, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kel=\E[4~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, knxt=^I, kpp=\E[5~, kprv=\E[Z, kslt=\E[4~, nel=\EE, rc=\E8, rev=\E[7m, rf=/usr/share/tabset/vt300, ri=\EM, rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<2>, sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=dec+pp, use=vt220+keypad, use=dec+sl, use=ansi+enq, vt320-nam|vt300-nam|dec vt320 7 bit terminal with no am to make SAS happy, am@, is2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h\E[1;24r\E[24;1H, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h\E[1;24r\E[24;1H, use=vt320, # We have to init 132-col mode, not 80-col mode. vt320-w|vt300-w|dec vt320 wide 7 bit terminal, cols#132, wsl#132, is2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H, rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H, use=vt320, vt320-w-nam|vt300-w-nam|dec vt320 wide 7 bit terminal with no am, am@, is2=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;24r\E[24;1H, rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;24r\E[24;1H, use=vt320-w, # VT330 and VT340 -- These are ReGIS and SIXEL graphics terminals # which are pretty much a superset of the VT320. They have the # host writable status line, yet another different DRCS matrix size, # and such, but they add the DEC Technical character set, Multiple text # pages, selectable length pages, and the like. The difference between # the vt330 and vt340 is that the latter has only 2 planes and a monochrome # monitor, the former has 4 planes and a color monitor. These terminals # support VT131 and ANSI block mode, but as with much of these things, # termcap/terminfo doesn't deal with these features. # # Note that this entry is are set up in what was the standard way for GNU # Emacs v18 terminal modes to deal with the cursor keys in that the arrow # keys were switched into application mode at the same time the numeric pad # is switched into application mode. This changes the definitions of the # arrow keys. Emacs v19 is smarter and mines its keys directly out of # your termcap or terminfo entry, # # From: Daniel Glasser , 13 Oct 1993 # (vt340: string capability "sb=\E[M" corrected to "sr"; # also, added / based on the init string -- esr) vt340|dec-vt340|vt330|dec-vt330|dec vt340 graphics terminal with 24 line page, am, eslok, hs, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, dsl=\E[2$~\r\E[1$}\E[K\E[$}, ed=\E[J, el=\E[K, flash=\E[?5h\E[?5l$<200/>, fsl=\E[$}, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, is2=\E<\E F\E>\E[?1h\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, nel=^M\ED, rc=\E8, rev=\E[7m, rf=/usr/share/tabset/vt300, ri=\EM, rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs1=\E[?3l, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<2>, sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[2$~\E[1$}\E[1;%dH, # DEC doesn't supply a vt400 description, so we add Daniel Glasser's # (originally written with vt420 as its primary name, and usable for it). # # VT400/420 -- This terminal is a superset of the vt320. It adds the multiple # text pages and long text pages with selectable length of the vt340, along # with left and right margins, rectangular area text copy, fill, and erase # operations, selected region character attribute change operations, # page memory and rectangle checksums, insert/delete column, reception # macros, and other features too numerous to remember right now. TERMCAP # can only take advantage of a few of these added features. # # Note that this entry is are set up in what was the standard way for GNU # Emacs v18 terminal modes to deal with the cursor keys in that the arrow # keys were switched into application mode at the same time the numeric pad # is switched into application mode. This changes the definitions of the # arrow keys. Emacs v19 is smarter and mines its keys directly out of # your termcap entry, # # From: Daniel Glasser , 13 Oct 1993 # (vt400: string capability ":sb=\E[M:" corrected to ":sr=\E[M:"; # also, added / based on the init string -- esr) vt400|vt400-24|dec-vt400|dec vt400 24x80 column autowrap, am, eslok, hs, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J$<10/>, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, dsl=\E[2$~\r\E[1$}\E[K\E[$}, ed=\E[J$<10/>, el=\E[K$<4/>, flash=\E[?5h\E[?5l$<200/>, fsl=\E[$}, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\ED, is2=\E<\E F\E>\E[?1h\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, nel=^M\ED, rc=\E8, rev=\E[7m, rf=/usr/share/tabset/vt300, ri=\EM, rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs1=\E<\E[?3l\E[!p\E[?7h, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<2>, sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[2$~\E[1$}\E[1;%dH, use=dec+sl, # (vt420: I removed , it collided with . I also restored # a missing -- esr) # add msgr and other capabilities from vt220 -TD vt420|DEC VT420, am, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, civis=\E[?25l, clear=\E[H\E[2J$<50>, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K, enacs=\E)0, flash=\E[?5h$<200/>\E[?5l, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, if=/usr/share/tabset/vt300, il=\E[%p1%dL, il1=\E[L, ind=\ED, is2=\E[1;24r\E[24;1H, is3=\E[?67h\E[64;1"p, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf1=\EOP, kf10=\E[29~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[17~, kf6=\E[18~, kf7=\E[19~, kf8=\E[20~, kf9=\E[21~, kfnd=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, nel=\EE, rc=\E8, rev=\E[7m$<2>, rf=/usr/share/tabset/vt300, ri=\EM, rmacs=\E(B$<4>, rmam=\E[?7l, rmir=\E[4l, rmkx=\E>, rmsc=\E[?0;0r\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, rmso=\E[27m, rmul=\E[24m, rs3=\E[?67h\E[64;1"p, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<2>, sgr0=\E[m\E(B$<2>, smacs=\E(0$<2>, smam=\E[?7h, smir=\E[4h, smkx=\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=ansi+pp, use=dec+sl, use=ansi+enq, # DEC VT220 and up support DECUDK (user-defined keys). DECUDK (i.e., pfx) # takes two parameters, the key and the string. Translating the key is # straightforward (keys 1-5 are not defined on real terminals, though some # emulators define these): # # if (key < 16) then value = key; # else if (key < 21) then value = key + 1; # else if (key < 25) then value = key + 2; # else if (key < 27) then value = key + 3; # else if (key < 30) then value = key + 4; # else value = key + 5; # # The string must be the hexadecimal equivalent, e.g., "5052494E" for "PRINT". # There's no provision in terminfo for emitting a string in this format, so the # application has to know it. # vt420pc|DEC VT420 w/PC keyboard, kdch1=\177, kend=\E[4~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[11;2~, kf14=\E[12;2~, kf15=\E[13;2~, kf16=\E[14;2~, kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\E[12~, kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[23~, kf26=\E[24~, kf27=\E[25~, kf28=\E[26~, kf29=\E[28~, kf3=\E[13~, kf30=\E[29~, kf31=\E[31~, kf32=\E[32~, kf33=\E[33~, kf34=\E[34~, kf35=\E[35~, kf36=\E[36~, kf37=\E[23;2~, kf38=\E[24;2~, kf39=\E[25;2~, kf4=\E[14~, kf40=\E[26;2~, kf41=\E[28;2~, kf42=\E[29;2~, kf43=\E[31;2~, kf44=\E[32;2~, kf45=\E[33;2~, kf46=\E[34;2~, kf47=\E[35;2~, kf48=\E[36;2~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H, pctrm=USR_TERM\:vt420pcdos\:, pfx=\EP1;1|%?%{16}%p1%>%t%{0}%e%{21}%p1%>%t%{1}%e%{25}%p1%>%t%{2}%e%{27}%p1%>%t%{3}%e%{30}%p1%>%t%{4}%e%{5}%;%p1%+%d/%p2%s\E\\, use=vt420, vt420pcdos|DEC VT420 w/PC for DOS Merge, lines#25, dispc=%?%p1%{19}%=%t\E\023\021%e%p1%{32}%<%t\E%p1%c%e%p1%{127}%=%t\E\177%e%p1%c%;, pctrm@, rmsc=\E[?0;0r\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sgr@, sgr0=\E[m, smsc=\E[?1;2r\E[34h, use=vt420pc, vt420f|DEC VT420 with VT kbd; VT400 mode; F1-F5 used as Fkeys, kdch1=\177, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H, lf1=\EOP, lf2=\EOQ, lf3=\EOR, lf4=\EOS, use=vt420, vt510|DEC VT510, use=vt420, vt510pc|DEC VT510 w/PC keyboard, use=vt420pc, vt510pcdos|DEC VT510 w/PC for DOS Merge, use=vt420pcdos, # VT520/VT525 # # The VT520 is a monochrome text terminal capable of managing up to # four independent sessions in the terminal. It has multiple ANSI # emulations (VT520, VT420, VT320, VT220, VT100, VT PCTerm, SCO Console) # and ASCII emulations (WY160/60, PCTerm, 50/50+, 150/120, TVI 950, # 925 910+, ADDS A2). This terminfo data is for the ANSI emulations only. # # Terminal Set-Up is entered by pressing [F3], [Caps Lock]/[F3] or # [Alt]/[Print Screen] depending upon which keyboard and which # terminal mode is being used. If Set-Up has been disabled or # assigned to an unknown key, Set-Up may be entered by pressing # [F3] as the first key after power up, regardless of keyboard type. vt520|DEC VT520, use=ansi+rca, use=vt420, use=ansi+tabs, vt525|DEC VT525, use=vt520, # I just got a brand new Boundless VT520 with that company's "ANSI 2011" # Keyboard, which replaces the old LK41R-AA keyboard. # # In trying to get the function keys to work, I had to cobble my own # terminfo.src entry, since the existing vt520 entry doesn't include most of # the function keys. If I blend the entries for "vt420f" and "vt220+keypad" # I seem to get them all -Mike Gran vt520ansi|Boundless VT520 ANSI, use=ansi+rca, use=vt420f, use=vt220+keypad, use=ansi+tabs, #### VT100 emulations # # John Hawkinson tells us that the EWAN telnet for Windows # (the best Windows telnet as of September 1995) presents the name `dec-vt100' # to telnetd. Michael Deutschmann informs us # that this works best with a stock vt100 entry. dec-vt100|EWAN telnet's vt100 emulation, use=vt100, # From: Adrian Garside <94ajg2@eng.cam.ac.uk>, 19 Nov 1996 dec-vt220|DOS tnvt200 terminal emulator, am@, use=vt220, # Zstem340 is an (IMHO) excellent VT emulator for PC's. I recommend it to # anyone who needs PC VT340 emulation. (or anything below that level, for # that matter -- DEC's ALL-in-1 seems happy with it, as does INFOPLUS's # RDBM systems, it includes ReGIS and SiXel support! I'm impressed... # I can send the address if requested. # (z340: changed garbled \E[5?l to \E[?5l, DEC smooth scroll off -- esr) # From: Adam Thompson Sept 10 1995 z340|zstem vt340 terminal emulator 132col 42line, lines#42, is2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h\E[1;42r\E[42;1H, rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h\E[1;42r\E[42;1H, use=vt320-w, z340-nam|zstem vt340 terminal emulator 132col 42line (no automatic margins), am@, is2=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;42r\E[42;1H, rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;42r\E[42;1H, use=z340, # CRT is shareware. It implements some xterm features, including mouse. crt|crt-vt220|CRT 2.3 emulating VT220, bce, msgr, ncv@, hts=\EH, use=vt100+enq, use=vt220, use=ecma+color, # PuTTY 0.55 (released 3 August 2004) # http://www.chiark.greenend.org.uk/~sgtatham/putty/ # # Comparing with 0.51, vttest is much better (only a few problems with the # cursor position reports and wrapping). # # PuTTY 0.51 (released 14 December 2000) # # This emulates vt100 + vt52 (plus a few vt220 features: ech, SRM, DECTCEM, as # well as SCO and Atari, color palettes from Linux console). Reading the code, # it is intended to be VT102 plus selected features. By default, it sets $TERM # to xterm, which is incorrect, since several features are misimplemented: # # Alt+key always sends ESC+key, so 'km' capability is removed. # # Control responses, wrapping and tabs are buggy, failing a couple of # screens in vttest. # # xterm mouse support is not implemented (unrelease version may). # # Several features such as backspace/delete are optional; this entry documents # the default behavior -TD putty|PuTTY terminal emulator, am, bce, bw, ccc, mir, msgr, xenl, xon, XT, colors#8, it#8, ncv#22, pairs#64, U8#1, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\ED, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P, dispc=%?%p1%{8}%=%t\E%%G\342\227\230\E%%@%e%p1%{10}%=%t\E%%G\342\227\231\E%%@%e%p1%{12}%=%t\E%%G\342\231\0\E%%@%e%p1%{13}%=%t\E%%G\342\231\252\E%%@%e%p1%{14}%=%t\E%%G\342\231\253\E%%@%e%p1%{15}%=%t\E%%G\342\230\274\E%%@%e%p1%{27}%=%t\E%%G\342\206\220\E%%@%e%p1%{155}%=%t\E%%G\340\202\242\E%%@%e%p1%c%;, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=\E[?5h\E[?5l, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS, initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x, is2=\E7\E[r\E[m\E[?7h\E[?1;4;6l\E[4l\E8\E>\E]R, kLFT=\E[D, kRIT=\E[C, kb2=\E[G, kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\E[4~, khome=\E[1~, kich1=\E[2~, kind=\E[B, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kri=\E[A, kspd=^Z, nel=^M^J, oc=\E]R, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l, rmir=\E[4l, rmkx=\E[?1l\E>, rmpch=\E[10m, rmso=\E[27m, rmul=\E[24m, rs2=\E<\E["p\E[50;6"p\Ec\E[?3l\E]R\E[?1000l, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smpch=\E[11m, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, E3=\E[3J, use=putty+fnkeys, use=vt102+enq, use=xterm+sl, vt100-putty|Reset PuTTY to pure vt100, rs2=\E<\E["p\Ec\E[?3l\E]R\E[40"p\E[61"p\E[50;1;2"p, use=vt100, putty-256color|PuTTY 0.58 with xterm 256-colors, use=xterm+256setaf, use=putty, putty-noapp|putty with cursor keys in normal mode, kLFT=\EOD, kRIT=\EOC, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kind=\EOB, kri=\EOA, rmkx=\E>, smkx=\E=, use=putty, # One of the keyboard selections is "VT100+". # pterm (the X11 port) uses shifted F1-F10 as F11-F20 putty-vt100|VT100+ keyboard layout, use=putty+fnkeys+vt100, use=putty, putty-sco|putty with SCO function keys, use=putty+fnkeys+sco, use=putty, # PuTTY has more than one section in its Keyboard configuration: # a) backspace/delete, which we ignore since that choice largely depends on # whether one matches Unix and BSD or Linux. # b) home/end keys, also ignored because the "rxvt" setting sends keys which # are unrelated to rxvt's actual settings. # c) function keys and keypad - this is the interesting part. None of the # selections match any of their respective namesakes, but they are shown # here to help users who expect that the selections do what is implied. # # This is the default setting for PuTTY putty+fnkeys|fn-keys for PuTTY, use=putty+fnkeys+esc, putty+fnkeys+esc|ESC[n~ fn-keys for PuTTY, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, putty+fnkeys+linux|Linux fn-keys for PuTTY, kf1=\E[[A, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, use=putty+fnkeys+esc, putty+fnkeys+xterm|Xterm R6 fn-keys for PuTTY, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, use=putty+fnkeys+esc, putty+fnkeys+vt400|VT400 fn-keys for PuTTY, use=putty+fnkeys+esc, # Shifted F1 is F11. F13-F20 inherit from the defaults, and the last distinct # key is F20. putty+fnkeys+vt100|VT100+ fn-keys for PuTTY, kf1=\EOP, kf10=\EOY, kf11=\EOZ, kf12=\EO[, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, use=putty+fnkeys+esc, # Unlike xterm-sco, this leaves kmous ambiguous with kf1. # # Use modifiers to obtain function keys past 12: # F1-F12 - normal # F13-F24 - shift # F25-F36 - control/alt # F37-F48 - control/shift # putty+fnkeys+sco|SCO fn-keys for PuTTY, kbeg=\E[E, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kend=\E[F, kf1=\E[M, kf10=\E[V, kf11=\E[W, kf12=\E[X, kf13=\E[Y, kf14=\E[Z, kf15=\E[a, kf16=\E[b, kf17=\E[c, kf18=\E[d, kf19=\E[e, kf2=\E[N, kf20=\E[f, kf21=\E[g, kf22=\E[h, kf23=\E[i, kf24=\E[j, kf25=\E[k, kf26=\E[l, kf27=\E[m, kf28=\E[n, kf29=\E[o, kf3=\E[O, kf30=\E[p, kf31=\E[q, kf32=\E[r, kf33=\E[s, kf34=\E[t, kf35=\E[u, kf36=\E[v, kf37=\E[w, kf38=\E[x, kf39=\E[y, kf4=\E[P, kf40=\E[z, kf41=\E[@, kf42=\E[[, kf43=\E[\\, kf44=\E[], kf45=\E[\^, kf46=\E[_, kf47=\E[`, kf48=\E[{, kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H, kich1=\E[L, knp=\E[G, kpp=\E[I, # This entry is for Tera Term Pro version 2.3, for MS-Windows 95/NT written by # T. Teranishi dated Mar 10, 1998. It is a free software terminal emulator # (communication program) which supports: # # - Serial port connections. # - TCP/IP (telnet) connections. # - VT100 emulation, and selected VT200/300 emulation. # - TEK4010 emulation. # - File transfer protocols (Kermit, XMODEM, ZMODEM, B-PLUS and # Quick-VAN). # - Scripts using the "Tera Term Language". # - Japanese and Russian character sets. # # The program does not come with terminfo or termcap entries. However, the # emulation (testing with vttest and ncurses) is reasonably close to vt100 (no # vt52 or doublesize character support; blinking is done with color). Besides # the HPA, VPA extensions it also implements CPL and CNL. # # All of the function keys can be remapped. This description shows the default # mapping, as installed. Both vt100 PF1-PF4 keys and quasi-vt220 F1-F4 keys # are supported. F13-F20 are obtained by shifting F3-F10. The editing keypad # is laid out like vt220, rather than the face codes on the PC keyboard, i.e, # kfnd Insert # kslt Delete # kich1 Home # kdch1 PageUp # kpp End # knp PageDown # # ANSI colors are implemented, but cannot be combined with video attributes # except for reverse. # # No fonts are supplied with the program, so the acsc string is chosen to # correspond with the default Microsoft terminal font. # # Tera Term recognizes some xterm sequences, including those for setting and # retrieving the window title, and for setting the window size (i.e., using # "resize -s"), though it does not pass SIGWINCH to the application if the # user resizes the window with the mouse. teraterm2.3|Tera Term Pro, km, xon@, ncv#43, vt@, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h\E[?5l$<200/>, hpa=\E[%i%p1%dG, il=\E[%p1%dL, il1=\E[L, kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, op=\E[100m, rev=\E[7m, ri=\EM, rmso=\E[27m, rmul=\E[24m, sgr0=\E[0m\017, smso=\E[7m, smul=\E[4m, vpa=\E[%i%p1%dd, use=vt100+enq, use=klone+color, use=vt100, # Version 4.59 has regular vt100 line-drawing (so it is no longer necessary # to choose a Windows OEM font). # # Testing with tack: # - it does not have xenl (suppress that) # - underline seems to work with color (modify ncv). # Testing with vttest: # - wrapping differs from vt100 (menu 1). # - it recognizes xterm's X10 and normal mouse tracking, but none of the # other flavors. # - it recognizes the dtterm window controls for reporting size in # characters and pixels. # - it passes SIGWINCH. teraterm4.59|Tera Term Pro, bce, xenl@, ncv#41, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, kmous=\E[M, use=teraterm2.3, teraterm|Tera Term, use=teraterm4.59, # Tested with WinNT 4.0, the telnet application assumes the screensize is # 25x80. This entry uses the 'Terminal' font, to get line-drawing characters. # # Other notes: # a) Fails tack's cup (cursor-addressing) test, though cup works well enough # for casual (occasional) use. Also fails several of the vttest screens, # but that is not unusual for vt100 "emulators". # b) Does not implement vt100 keypad # c) Recognizes a subset of vt52 controls. ms-vt100|MS telnet imitating dec vt100, lines#25, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, ka1@, ka3@, kb2@, kc1@, kc3@, kent@, kf0@, kf1@, kf10@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, kf9@, tbc@, use=vt102+enq, use=vt100, # Tested with Windows 2000, the telnet application runs in a console window, # also using 'Terminal' font. # # Other notes: # a) This version has no function keys or numeric keypad. Unlike the older # version, the numeric keypad is entirely ignored. # b) The program sets $TERM to "ansi", which of course is inaccurate. ms-vt100-color|vtnt|windows 2000 ansi (sic), bce, dch=\E[%p1%dP, ich=\E[%p1%d@, use=ecma+color, use=ms-vt100, # Based on comments from Federico Bianchi: # # vt100+ is basically a VT102-noSGR with ANSI.SYS colors and a different # scheme for PF keys. # # and PuTTY wishlist: # # The modifiers are represented as the codes listed above, prefixed to # the normal sequences. If the modifier is pressed alone, its sequence # is transmitted twice in succession. If multiple modifiers apply, # they're transmitted in the order shift, control, alt. # # Shift \E^S # Alt \E^A, # Ctrl \E^C, ms-vt100+|vt100+|windows XP vt100+ (sic), kdch1=\E-, kend=\Ek, kf1=\E1, kf10=\E0, kf11=\E!, kf12=\E@, kf13=\E\023\E1, kf14=\E\023\E2, kf15=\E\023\E3, kf16=\E\023\E4, kf17=\E\023\E5, kf18=\E\023\E6, kf19=\E\023\E7, kf2=\E2, kf20=\E\023\E8, kf21=\E\023\E9, kf22=\E\023\E0, kf23=\E\023\E!, kf24=\E\023\E@, kf25=\E\003\E1, kf26=\E\003\E2, kf27=\E\003\E3, kf28=\E\003\E4, kf29=\E\003\E5, kf3=\E3, kf30=\E\003\E6, kf31=\E\003\E7, kf32=\E\003\E8, kf33=\E\003\E9, kf34=\E\003\E0, kf35=\E\003\E!, kf36=\E\003\E@, kf37=\E\001\E1, kf38=\E\001\E2, kf39=\E\001\E3, kf4=\E4, kf40=\E\001\E4, kf41=\E\001\E5, kf42=\E\001\E6, kf43=\E\001\E7, kf44=\E\001\E8, kf45=\E\001\E9, kf46=\E\001\E0, kf47=\E\001\E!, kf48=\E\001\E@, kf5=\E5, kf6=\E6, kf7=\E7, kf8=\E8, kf9=\E9, khome=\Eh, kich1=\E+, knp=\E/, kpp=\E?, use=ms-vt100-color, ms-vt-utf8|vt-utf8|UTF-8 flavor of vt100+, use=ms-vt100+, # expect-5.44.1.15/example/tkterm # a minimal subset of a vt100 (compare with "news-unk). # # The missing "=" in smkx is not a typo (here), but an error in tkterm. tt|tkterm|Don Libes' tk text widget terminal emulator, clear=\E[H\E[J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%p1%d;%p2%dH, cuu1=\E[A, ind=^J, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, rmkx=\E[?1l\E>, rmso=\E[m, smkx=\E[?1h\E, smso=\E[7m, ######## X TERMINAL EMULATORS #### XTERM # # You can add the following line to your .Xdefaults to change the terminal type # set by the xterms you start up to my-xterm: # # *termName: my-xterm # # System administrators can change the default entry for xterm instances # by adding a similar line to /usr/X11/lib/X11/app-defaults/XTerm. In either # case, xterm will detect and reject an invalid terminal type, falling back # to the default of xterm. # # X10/6.6 11/7/86, minus alternate screen, plus (csr) # (xterm: ":MT:" changed to ":km:"; added / based on init string; # removed (hs, eslok, tsl=\E[?E\E[?%i%dT, fsl=\E[?F, dsl=\E[?E) # as these seem not to work -- esr) x10term|vs100-x10|xterm terminal emulator (X10 window system), OTbs, am, km, mir, msgr, xenl, xon, cols#80, it#8, lines#65, bold=\E[1m, clear=\E[H\E[2J, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E\E[m\E[?7h\E[?1;4l, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rev=\E[7m, ri=\EM, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, # Compatible with the R5 xterm # (from the XFree86 3.2 distribution, removed) # added khome/kend, rmir/smir, rmul/smul, hts based on the R5 xterm code - TD # corrected typos in rs2 string - TD # added u6-u9 -TD xterm-r5|xterm R5 version, OTbs, am, km, msgr, xenl, cols#80, it#8, lines#24, bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kdl1=\E[31~, kel=\E[8~, kend=\E[4~, kf0=\EOq, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kil1=\E[30~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, rc=\E8, rev=\E[7m, ri=\EM, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs2=\E>\E[?1;3;4;5;6l\E[4l\E[?7h\E[m\E[r\E[2J\E[H, sc=\E7, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m, sgr0=\E[m, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=vt100+enq, # Compatible with the R6 xterm # (from XFree86 3.2 distribution, and added, removed) # added khome/kend, hts based on the R6 xterm code - TD # (khome/kend do not actually work in X11R5 or X11R6, but many people use this # for compatibility with other emulators). xterm-r6|xterm X11R6 version, OTbs, am, km, mir, msgr, xenl, cols#80, it#8, lines#24, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, enacs=\E)0, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, meml=\El, memu=\Em, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8, sc=\E7, sgr0=\E[m, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=vt100+enq, xterm-old|antique xterm version, use=xterm-r6, # This is the base xterm entry for the xterm supplied with XFree86 3.2 & up. # The name has been changed and some aliases have been removed. xterm-xf86-v32|xterm terminal emulator (XFree86 3.2 Window System), OTbs, am, bce, km, mir, msgr, xenl, XT, cols#80, it#8, lines#24, ncv@, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=\E[?5h$<100/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>, kbeg=\EOE, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\177, kend=\EOF, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khome=\EOH, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, meml=\El, memu=\Em, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs1=^O, rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>, sc=\E7, setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, use=vt100+enq, use=ecma+color, use=vt220+keypad, # This is the stock xterm entry supplied with XFree86 3.3, which uses VT100 # codes for F1-F4 except while in VT220 mode. xterm-xf86-v33|xterm terminal emulator (XFree86 3.3 Window System), kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, use=xterm-xf86-v32, # This version was released in XFree86 3.3.3 (November 1998). # Besides providing printer support, it exploits a new feature that allows # xterm to use terminfo-based descriptions with the titeInhibit resource. # -- the distribution contained incorrect khome/kend values -TD xterm-xf86-v333|xterm terminal emulator (XFree86 3.3.3 Window System), blink=\E[5m, ich1@, invis=\E[8m, is2=\E[!p\E[?3;4l\E[4l\E>, kdch1=\E[3~, kfnd@, kslt@, rmcup=\E[?1047l\E[?1048l, rs1=\Ec, rs2=\E[!p\E[?3;4l\E[4l\E>, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, smcup=\E[?1048h\E[?1047h, use=ansi+pp, use=xterm-xf86-v33, # This version was released in XFree86 4.0. xterm-xf86-v40|xterm terminal emulator (XFree86 4.0 Window System), npc, kDC=\E[3;5~, kEND=\EO5F, kHOM=\EO5H, kIC=\E[2;5~, kLFT=\EO5D, kNXT=\E[6;5~, kPRV=\E[5;5~, kRIT=\EO5C, ka1@, ka3@, kb2=\EOE, kc1@, kc3@, kcbt=\E[Z, kdch1=\E[3~, kend=\EOF, kf13=\EO2P, kf14=\EO2Q, kf15=\EO2R, kf16=\EO2S, kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\EO5P, kf26=\EO5Q, kf27=\EO5R, kf28=\EO5S, kf29=\E[15;5~, kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~, kf37=\EO6P, kf38=\EO6Q, kf39=\EO6R, kf40=\EO6S, kf41=\E[15;6~, kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, khome=\EOH, rmcup=\E[?1049l, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;, smcup=\E[?1049h, use=xterm-xf86-v333, # This version was released in XFree86 4.3. xterm-xf86-v43|xterm terminal emulator (XFree86 4.3 Window System), kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C, kbeg@, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, use=xterm-xf86-v40, # This version was released in XFree86 4.4. xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System), cnorm=\E[?12l\E[?25h, cvvis=\E[?12;25h, indn=\E[%p1%dS, rin=\E[%p1%dT, use=xterm-xf86-v43, xterm-xfree86|xterm terminal emulator (XFree86), use=xterm-xf86-v44, # This version reflects the current xterm features. xterm-new|modern xterm terminal emulator, npc, indn=\E[%p1%dS, kb2=\EOE, kcbt=\E[Z, kent=\EOM, rin=\E[%p1%dT, use=xterm+pcfkeys, use=xterm+tmux, use=xterm-basic, # This fragment is for people who cannot agree on what the backspace key # should send. xterm+kbs|fragment for backspace key, kbs=^H, # # This fragment describes as much of XFree86 xterm's "pc-style" function # keys as will fit into terminfo's 60 function keys. # From ctlseqs.ms: # Code Modifiers # --------------------------------- # 2 Shift # 3 Alt # 4 Shift + Alt # 5 Control # 6 Shift + Control # 7 Alt + Control # 8 Shift + Alt + Control # --------------------------------- # The meta key may also be used as a modifier in this scheme, adding another # bit to the parameter. xterm+pcfkeys|fragment for PC-style fkeys, use=xterm+app, use=xterm+pcf2, use=xterm+pcc2, use=xterm+pce2, # xterm+noapp|fragment with cursor keys in normal mode, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[F, khome=\E[H, xterm+app|fragment with cursor keys in application mode, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\EOF, khome=\EOH, # # The "PC-style" modifier scheme was introduced in xterm patch #94 (1999/3/27) # and revised in patch #167 (2002/8/24). Some other terminal emulators copied # the earlier scheme, as noted in the "use=" clauses in this file. # # The original assignments from patch #94 for cursor-keys had some technical # issues: # # A parameter for a function-key to represent a modifier is just more # bits. But for a cursor-key it may change the behavior of the # application. For instance, emacs decodes the first parameter of a # cursor-key as a repeat count. # # A parameterized string should (really) not begin with SS3 (\EO). # Rather, CSI (\E[) should be used. # # For these reasons, the original assignments were deprecated. For # compatibility reasons, they are still available as a setting of xterm's # modifyCursorKeys resource. These fragments list the modified cursor-keys # that might apply to xterm+pcfkeys with different values of that resource. xterm+pcc3|fragment with modifyCursorKeys:3, kLFT=\E[>1;2D, kRIT=\E[>1;2C, kind=\E[>1;2B, kri=\E[>1;2A, kDN=\E[>1;2B, kDN3=\E[>1;3B, kDN4=\E[>1;4B, kDN5=\E[>1;5B, kDN6=\E[>1;6B, kDN7=\E[>1;7B, kLFT3=\E[>1;3D, kLFT4=\E[>1;4D, kLFT5=\E[>1;5D, kLFT6=\E[>1;6D, kLFT7=\E[>1;7D, kRIT3=\E[>1;3C, kRIT4=\E[>1;4C, kRIT5=\E[>1;5C, kRIT6=\E[>1;6C, kRIT7=\E[>1;7C, kUP=\E[>1;2A, kUP3=\E[>1;3A, kUP4=\E[>1;4A, kUP5=\E[>1;5A, kUP6=\E[>1;6A, kUP7=\E[>1;7A, xterm+pcc2|fragment with modifyCursorKeys:2, kLFT=\E[1;2D, kRIT=\E[1;2C, kind=\E[1;2B, kri=\E[1;2A, kDN=\E[1;2B, kDN3=\E[1;3B, kDN4=\E[1;4B, kDN5=\E[1;5B, kDN6=\E[1;6B, kDN7=\E[1;7B, kLFT3=\E[1;3D, kLFT4=\E[1;4D, kLFT5=\E[1;5D, kLFT6=\E[1;6D, kLFT7=\E[1;7D, kRIT3=\E[1;3C, kRIT4=\E[1;4C, kRIT5=\E[1;5C, kRIT6=\E[1;6C, kRIT7=\E[1;7C, kUP=\E[1;2A, kUP3=\E[1;3A, kUP4=\E[1;4A, kUP5=\E[1;5A, kUP6=\E[1;6A, kUP7=\E[1;7A, xterm+pcc1|fragment with modifyCursorKeys:1, kLFT=\E[2D, kRIT=\E[2C, kind=\E[2B, kri=\E[2A, kDN=\E[2B, kDN3=\E[3B, kDN4=\E[4B, kDN5=\E[5B, kDN6=\E[6B, kDN7=\E[7B, kLFT3=\E[3D, kLFT4=\E[4D, kLFT5=\E[5D, kLFT6=\E[6D, kLFT7=\E[7D, kRIT3=\E[3C, kRIT4=\E[4C, kRIT5=\E[5C, kRIT6=\E[6C, kRIT7=\E[7C, kUP=\E[2A, kUP3=\E[3A, kUP4=\E[4A, kUP5=\E[5A, kUP6=\E[6A, kUP7=\E[7A, xterm+pcc0|fragment with modifyCursorKeys:0, kLFT=\EO2D, kRIT=\EO2C, kind=\EO2B, kri=\EO2A, kDN=\EO2B, kDN3=\EO3B, kDN4=\EO4B, kDN5=\EO5B, kDN6=\EO6B, kDN7=\EO7B, kLFT3=\EO3D, kLFT4=\EO4D, kLFT5=\EO5D, kLFT6=\EO6D, kLFT7=\EO7D, kRIT3=\EO3C, kRIT4=\EO4C, kRIT5=\EO5C, kRIT6=\EO6C, kRIT7=\EO7C, kUP=\EO2A, kUP3=\EO3A, kUP4=\EO4A, kUP5=\EO5A, kUP6=\EO6A, kUP7=\EO7A, # # Here are corresponding fragments from xterm patch #216: # xterm+pcf0|fragment with modifyFunctionKeys:0, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\EO2P, kf14=\EO2Q, kf15=\EO2R, kf16=\EO2S, kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\EO5P, kf26=\EO5Q, kf27=\EO5R, kf28=\EO5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~, kf37=\EO6P, kf38=\EO6Q, kf39=\EO6R, kf4=\EOS, kf40=\EO6S, kf41=\E[15;6~, kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, kf49=\EO3P, kf5=\E[15~, kf50=\EO3Q, kf51=\EO3R, kf52=\EO3S, kf53=\E[15;3~, kf54=\E[17;3~, kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~, kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~, kf61=\EO4P, kf62=\EO4Q, kf63=\EO4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, # xterm+pcf2|fragment with modifyFunctionKeys:2, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~, kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~, kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~, kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, # # Chunks from xterm #230: xterm+pce2|fragment with modifyCursorKeys:2, kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~, kNXT=\E[6;2~, kPRV=\E[5;2~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kDC3=\E[3;3~, kDC4=\E[3;4~, kDC5=\E[3;5~, kDC6=\E[3;6~, kDC7=\E[3;7~, kEND3=\E[1;3F, kEND4=\E[1;4F, kEND5=\E[1;5F, kEND6=\E[1;6F, kEND7=\E[1;7F, kHOM3=\E[1;3H, kHOM4=\E[1;4H, kHOM5=\E[1;5H, kHOM6=\E[1;6H, kHOM7=\E[1;7H, kIC3=\E[2;3~, kIC4=\E[2;4~, kIC5=\E[2;5~, kIC6=\E[2;6~, kIC7=\E[2;7~, kNXT3=\E[6;3~, kNXT4=\E[6;4~, kNXT5=\E[6;5~, kNXT6=\E[6;6~, kNXT7=\E[6;7~, kPRV3=\E[5;3~, kPRV4=\E[5;4~, kPRV5=\E[5;5~, kPRV6=\E[5;6~, kPRV7=\E[5;7~, use=xterm+edit, xterm+edit|fragment for 6-key editing-keypad, kdch1=\E[3~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, use=xterm+pc+edit, xterm+pc+edit|fragment for pc-style editing keypad, kend=\E[4~, khome=\E[1~, xterm+vt+edit|fragment for vt220-style editing keypad, kfnd=\E[1~, kslt=\E[4~, # # Those chunks use the new-style (the xterm oldFunctionKeys resource is false). # Alternatively, the same scheme with old-style function keys as in xterm-r6 # is shown here (because that is used in mrxvt and mlterm): xterm+r6f2|xterm with oldFunctionKeys and modifyFunctionKeys:2, kf1=\E[11~, kf13=\E[11;2~, kf14=\E[12;2~, kf15=\E[13;2~, kf16=\E[14;2~, kf2=\E[12~, kf25=\E[11;5~, kf26=\E[12;5~, kf27=\E[13;5~, kf28=\E[14;5~, kf3=\E[13~, kf37=\E[11;6~, kf38=\E[12;6~, kf39=\E[13;6~, kf4=\E[14~, kf40=\E[14;6~, kf49=\E[11;3~, kf50=\E[12;3~, kf51=\E[13;3~, kf52=\E[14;3~, kf61=\E[11;4~, kf62=\E[12;4~, kf63=\E[13;4~, use=xterm+pcf2, # # This chunk is used for building the VT220/Sun/PC keyboard variants. xterm-basic|modern xterm terminal emulator - common, OTbs, am, bce, km, mir, msgr, xenl, AX, XT, colors#8, cols#80, it#8, lines#24, pairs#64, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h$<100/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, is2=\E[!p\E[?3;4l\E[4l\E>, kmous=\E[M, meml=\El, memu=\Em, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, ritm=\E[23m, rmacs=\E(B, rmam=\E[?7l, rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmm=\E[?1034l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec, rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m, sgr0=\E(B\E[m, sitm=\E[3m, smacs=\E(0, smam=\E[?7h, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, E3=\E[3J, use=ansi+pp, use=xterm+kbs, use=vt100+enq, # From: David J. MacKenzie , 14 Nov 1997 # In retrospect, something like xterm-r6 was intended here -TD xterm-xi|xterm on XI Graphics Accelerated X under BSD/OS 3.1, rmso=\E[m, rmul=\E[m, use=xterm-xf86-v33, # 16-colors is one of the variants of XFree86 3.3 xterm, updated for 4.0 (T.Dickey) # If configured to support 88- or 256-colors (which is fairly common in 2009), # xterm also recognizes the control sequences for initc -TD xterm-16color|xterm with 16 colors like aixterm, ccc, initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\, use=ibm+16color, use=xterm-new, # 256-colors is a compile-time feature of XFree86 xterm beginning with # patch #111 (1999/7/10) -TD xterm+256color|xterm 256-color feature, ccc, colors#256, pairs#32767, initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\, setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m, setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m, setb@, setf@, # palette is hardcoded... xterm+256setaf|xterm 256-color (set-only), ccc@, colors#256, pairs#32767, initc@, setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m, setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m, setb@, setf@, # 88-colors is a compile-time feature of XFree86 xterm beginning with # patch #115 (1999/9/18) -TD # # Note that the escape sequences used are the same as for 256-colors - xterm # has a different table of default color resource values. If built for # 256-colors, it can still handle an 88-color palette by using the initc # capability. # # At this time (2007/7/14), except for rxvt 2.7.x, none of the other terminals # which support the xterm+256color feature support the associated initc # capability. So it is cancelled in the entries which use this and/or the # xterm+256color block. # # The default color palette for the 256- and 88-colors are different. A # given executable will have one palette (perhaps compiled-in). If the program # supports xterm's control sequence, it can be programmed using initc. xterm+88color|xterm 88-color feature, colors#88, pairs#7744, use=xterm+256color, # These variants of XFree86 3.9.16 xterm are built as a configure option. xterm-256color|xterm with 256 colors, use=xterm+256color, use=xterm-new, xterm-88color|xterm with 88 colors, use=xterm+88color, use=xterm-256color, # This chunk is based on suggestions by Ailin Nemui and Nicholas Marriott, who # asked for some of xterm's advanced features to be added to its terminfo # entry. It defines extended capabilities not found in standard terminfo or # termcap. These are useful in tmux, for instance, hence the name. # # One caveat in adding extended capabilities in ncurses is that if the names # are longer than two characters, then they will not be visible through the # termcap interface. # # Ms modifies the selection/clipboard. Its parameters are # p1 = the storage unit (clipboard, selection or cut buffer) # p2 = the base64-encoded clipboard content. # # Ss is used to set the cursor style as described by the DECSCUSR # function to a block or underline. # Se resets the cursor style to the terminal power-on default. # # Cs and Cr set and reset the cursor colour. xterm+tmux|advanced xterm features used in tmux, Cr=\E]112\007, Cs=\E]12;%p1%s\007, Ms=\E]52;%p1%s;%p2%s\007, Se=\E[2 q, Ss=\E[%p1%d q, # This is another variant, for XFree86 4.0 xterm (T.Dickey) # This is an 8-bit version of xterm, which emulates DEC vt220 with ANSI color. # To use it, your decTerminalID resource must be set to 200 or above. # # HTS \E H \210 # RI \E M \215 # SS3 \E O \217 # CSI \E [ \233 # xterm-8bit|xterm terminal emulator 8-bit controls (X Window System), OTbs, am, bce, km, mc5i, mir, msgr, npc, xenl, AX, colors#8, cols#80, it#8, lines#24, pairs#64, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\2335m, bold=\2331m, cbt=\233Z, civis=\233?25l, clear=\233H\2332J, cnorm=\233?25l\233?25h, cr=^M, csr=\233%i%p1%d;%p2%dr, cub=\233%p1%dD, cub1=^H, cud=\233%p1%dB, cud1=^J, cuf=\233%p1%dC, cuf1=\233C, cup=\233%i%p1%d;%p2%dH, cuu=\233%p1%dA, cuu1=\233A, cvvis=\233?12;25h, dch=\233%p1%dP, dch1=\233P, dl=\233%p1%dM, dl1=\233M, ech=\233%p1%dX, ed=\233J, el=\233K, el1=\2331K, flash=\233?5h$<100/>\233?5l, home=\233H, hpa=\233%i%p1%dG, ht=^I, hts=\210, ich=\233%p1%d@, il=\233%p1%dL, il1=\233L, ind=^J, invis=\2338m, is2=\E[62"p\E G\233m\233?7h\E>\E7\233?1;3;4;6l\2334l\233r\E8, ka1=\217w, ka3=\217u, kb2=\217y, kbeg=\217E, kc1=\217q, kc3=\217s, kcbt=\233Z, kcub1=\217D, kcud1=\217B, kcuf1=\217C, kcuu1=\217A, kdch1=\2333~, kend=\2334~, kent=\217M, kf1=\23311~, kf10=\23321~, kf11=\23323~, kf12=\23324~, kf13=\23325~, kf14=\23326~, kf15=\23328~, kf16=\23329~, kf17=\23331~, kf18=\23332~, kf19=\23333~, kf2=\23312~, kf20=\23334~, kf3=\23313~, kf4=\23314~, kf5=\23315~, kf6=\23317~, kf7=\23318~, kf8=\23319~, kf9=\23320~, khome=\2331~, kich1=\2332~, kmous=\233M, knp=\2336~, kpp=\2335~, mc0=\233i, mc4=\2334i, mc5=\2335i, meml=\El, memu=\Em, op=\23339;49m, rc=\E8, rev=\2337m, ri=\215, rmacs=\E(B, rmam=\233?7l, rmcup=\233?1049l, rmir=\2334l, rmkx=\233?1l\E>, rmso=\23327m, rmul=\23324m, rs1=\Ec, rs2=\E[62"p\E G\233m\233?7h\E>\E7\233?1;3;4;6l\2334l\233r\E8, sc=\E7, setab=\2334%p1%dm, setaf=\2333%p1%dm, setb=\2334%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, setf=\2333%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, sgr=\2330%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;, sgr0=\2330m\E(B, smacs=\E(0, smam=\233?7h, smcup=\233?1049h, smir=\2334h, smkx=\233?1h\E=, smso=\2337m, smul=\2334m, tbc=\2333g, u6=\233[%i%d;%dR, u7=\E[6n, u8=\233[?1;2c, u9=\E[c, vpa=\233%i%p1%dd, use=xterm+kbs, xterm-hp|xterm with hpterm function keys, kclr=\EJ, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kend=\EF, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\Eh, kich1=\EQ, knp=\ES, kpp=\ET, use=xterm-basic, xterm-sco|xterm with SCO function keys, kbeg=\E[E, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kend=\E[F, kf1=\E[M, kf10=\E[V, kf11=\E[W, kf12=\E[X, kf13=\E[Y, kf14=\E[Z, kf15=\E[a, kf16=\E[b, kf17=\E[c, kf18=\E[d, kf19=\E[e, kf2=\E[N, kf20=\E[f, kf21=\E[g, kf22=\E[h, kf23=\E[i, kf24=\E[j, kf25=\E[k, kf26=\E[l, kf27=\E[m, kf28=\E[n, kf29=\E[o, kf3=\E[O, kf30=\E[p, kf31=\E[q, kf32=\E[r, kf33=\E[s, kf34=\E[t, kf35=\E[u, kf36=\E[v, kf37=\E[w, kf38=\E[x, kf39=\E[y, kf4=\E[P, kf40=\E[z, kf41=\E[@, kf42=\E[[, kf43=\E[\\, kf44=\E[], kf45=\E[\^, kf46=\E[_, kf47=\E[`, kf48=\E[{, kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H, kich1=\E[L, kmous=\E[>M, knp=\E[G, kpp=\E[I, use=xterm-basic, # The xterm-new description has all of the features, but is not completely # compatible with vt220. If you are using a Sun or PC keyboard, set the # sunKeyboard resource to true: # + maps the editing keypad # + interprets control-function-key as a second array of keys, so a # 12-fkey keyboard can support vt220's 20-fkeys. # + maps numeric keypad "+" to ",". # + uses DEC-style control sequences for the application keypad. # xterm-vt220|xterm emulating vt220, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\E[4~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, use=xterm+app, use=xterm+edit, use=xterm-basic, use=vt220+keypad, xterm-vt52|xterm emulating dec vt52, cols#80, it#8, lines#24, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, clear=\EH\EJ, cr=^M, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%' '%+%c%p2%' '%+%c, cuu1=\EA, ed=\EJ, el=\EK, home=\EH, ht=^I, ind=^J, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, nel=^M^J, ri=\EI, rmacs=\EG, smacs=\EF, use=xterm+kbs, xterm-noapp|xterm with cursor keys in normal mode, rmcup@, rmkx=\E>, smcup@, smkx=\E=, use=xterm+noapp, use=xterm, xterm-24|vs100|xterms|xterm terminal emulator (X Window System), lines#24, use=xterm-old, # This is xterm for ncurses. xterm|xterm terminal emulator (X Window System), use=xterm-new, # This entry assumes that xterm's handling of VT100 SI/SO is disabled by # setting the vt100Graphics resource to false. xterm-utf8|xterm with no VT100 line-drawing in UTF-8 mode, U8#1, use=xterm, # These building-blocks allow access to the X titlebar and icon name as a # status line. There are a few problems in using them in entries: # # a) tsl should have a parameter to denote the column on which to transfer to # the status line. # b) the "0" code for xterm updates both icon-title and window title. Some # window managers such as twm (and possibly window managers descended from # it such as tvtwm, ctwm, and vtwm) track windows by icon-name. Thus, you # don't want to mess with icon-name when using those window managers. # # The extension "TS" is preferable, because it does not accept a parameter. # However, if you are using a non-extended terminfo, "TS" is not visible. xterm+sl|access X title line and icon name, hs, dsl=\E]0;\007, fsl=^G, tsl=\E]0;, TS=\E]0;, xterm+sl-twm|access X title line (pacify twm-descended window managers), hs, dsl=\E]2;\007, fsl=^G, tsl=\E]2;, TS=\E]2;, # In contrast, this block can be used for a DEC vt320 and up. There are two # controls used. # # DECSASD (select active status display) # \E[0$} Main display # \E[1$} Status line # # DECSSDT (select status line type) # \E[0$~ No status line # \E[1$~ Indicator status line # \E[2$~ Host-writable status line # # The building block assumes that the terminal always shows something at the # status line (either the indicator, or status line). That is because if no # status line is used, then the terminal makes that line part of the user # window, changing its size without notice. # # Because there is no "esl" (enable status line) capability, the "tsl" # capability ensures that the status line is host-writable. A DEC terminal # will clear the status line when changing from indicator to host-writable # mode. # # Once on the status line, the row part of cursor addressing is ignored. Since # tsl expects a parameter (to specify the column), the shortest addressing that # can be used for this purpose is HPA, e.g., \E[5d to go to column 5. # dec+sl|DEC VTxx status line, eslok, hs, dsl=\E[1$~, fsl=\E[0$}, tsl=\E[2$~\E[1$}\E[%i%p1%d`, # # The following xterm variants don't depend on your base version # # xterm with bold instead of underline xterm-bold|xterm terminal emulator (X11R6 Window System) standout w/bold, sgr=%?%p9%t\016%e\017%;B\E[0%?%p6%t;1%;%?%p2%t;1%;%?%p1%p3%|%t;7%;m, smso=\E[7m, smul=\E[1m, use=xterm-old, # See the note on ICH/ICH1 VERSUS RMIR/SMIR near the end of file xterm-nic|xterm with ich/ich1 suppressed for non-curses programs, ich@, ich1@, use=xterm, # From: Mark Sheppard , 4 May 1996 xterm1|xterm terminal emulator ignoring the alternate screen buffer, rmcup@, smcup@, use=xterm, #### XTERM Mouse # The xterm mouse protocol is used by other terminal emulators. # In this section, two extended capabilities are used to illustrate the mouse # protocol: XM and xm. The "XM" capability is recognized by ncurses to allow # enabling/disabling other mouse protocols. The "xm" capability describes the # mouse response; currently there is no interpreter which would use this # information to make the mouse support completely data-driven. # Here is the "original" xterm mouse protocol. # # First seen in X10.3, February 1986, this likely dates from 1985 based on the # copyright dates in the sources. A comment in charproc.c notes "MIT bogus # sequence", referring to the fact that it does not correspond to a "real" # terminal. The mouse responses for the X10 protocol are sent only for # button-presses. xterm+x10mouse|X10 xterm mouse protocol, kmous=\E[M, XM=\E[?9%?%p1%{1}%=%th%el%;, xm=\E[M%p3%' '%+%c%p2%'!'%+%c%p1%'!'%+%c, xterm-x10mouse|X10 xterm mouse, use=xterm+x10mouse, use=xterm, # Here is the conventional xterm mouse protocol, introduced with X11R1 in # September 1987. # # The mouse responses for the X11 protocol covered button releases, as well as # modifiers: # shift 4 # alt/meta 8 (technically the "mod1" mask, because X11 has no such keys) # control 16 # # The modifiers are not reflected in this description because as used in xterm # they are normally inaccessible because the translations resources assign # shift and control to other features. However, they are important because # they take up space in the first byte of the response. The other bits of this # byte are used to encode the button number for both presses and releases. # In the X11 protocol, any button-release is encoded with "3" (the lowest 2 # bits in the byte). Later work on XFree86 xterm used the remaining 3 bits to # provide additional features, e.g., wheel mouse. # # X11R1's xterm also supported an "emacs" mouse protocol, with final character # "t" or "T", which was activated by double-clicking. The "t" response was # used when the starting/ending positions were the same. # # X11R3 (February 1988) added the highlight/tracking mode. # # X11R4 (December 1989) added the control sequences document, listing the # control sequences for the X10/X11 protocols without descriptions. It also # mentioned the "emacs" ("T") response. Comments in button.c referred to the # X11 protocol as "DEC vt200 compatible", although DEC offered no such terminal. # # X11R5 (November 1993) gave a description of the mouse protocol. # # X11R6 (January 1995) moved the control sequences document out of the xterm # source-directory to xc/doc/specs/xterm, polishing the formatting but adding # no new information. xterm+x11mouse|X11 xterm mouse protocol, kmous=\E[M, XM=\E[?1000%?%p1%{1}%=%th%el%;, xm=\E[M%?%p4%t3%e%p3%' '%+%c%;%p2%'!'%+%c%p1%'!'%+%c, xterm-x11mouse|X11 mouse, use=xterm+x11mouse, use=xterm, # Here is a suggested description of the xterm highlighting protocol. # A more complicated example could be constructed to account for the "t" # response. xterm+x11hilite|X11 xterm mouse protocol with highlight, kmous=\E[M, XM=\E[?1001%?%p1%{1}%=%th%el%;, xm=\E[%p7%'!'%+%p6%'!'%+%c%p9%'!'%+%c%p8%'!'%+%c%p2%'!'%+%c%p1%'!'%+%cT, xterm-x11hilite|X11 mouse with highlight, use=xterm+x11mouse, use=xterm, # The preceding were the sources from X Consortium. Other sources (or patches) # were available. Starting in mid-1995, XFree86 developers collected some of # those changes and began improvements, e.g., to support color. This was, by # the way, around the same time that rxvt developers began implementing color, # though dates (and attributions) are not well documented. I became interested # in xterm in late 1995, and involved in early 1996. To complete the picture, # CDE's dtterm was introduced around the same time, with no mouse protocol -TD # xterm patch #83 (1998/10/7), added Jason Bacon's changes to provide an # "any-event" mouse mode. xterm+sm+1002|xterm any-event mouse, kmous=\E[M, XM=\E[?1002%?%p1%{1}%=%th%el%;, xterm-1002|xterm any-event mouse, use=xterm+sm+1002, use=xterm, xterm+sm+1003|testing xterm-mouse, kmous=\E[M, XM=\E[?1003%?%p1%{1}%=%th%el%;, xterm-1003|testing xterm-mouse, use=xterm+sm+1003, use=xterm, # xterm patch #116 (1999/9/25) added Stephen P Wall's changes to support DEC # locator mode. # xterm patch #120 (1999/10/28) added my change to support wheel mouse, by # dropping support for the X11 mouse protocol's shift-modifier and using # available bits in the first byte of the response to encode buttons 4 and 5. # xterm patch #126 (2000/2/8) amended that change to avoid conflicting with # older configurations which might have used the obsolete modifiers. # xterm patch #262 (2010/8/30) added Ryan Johnson's changes to provide a mode # where the coordinates in the mouse response would be encoded in UTF-8, # thereby extending the range of coordinates past 222=(255-33). This is the # "1005" mouse mode. xterm+sm+1005|xterm UTF-8 mouse, kmous=\E[M, XM=\E[?1005;1000%?%p1%{1}%=%th%el%;, xm=\E[M%?%p4%t3%e%p3%' '%+%c%;%p2%'!'%+%u%p1%'!'%+%u, xterm-1005|xterm UTF-8 mouse, use=xterm+sm+1005, use=xterm, # xterm patch #277 (2012/1/7) provides a mode where the mouse response uses # SGR-style parameters. # # Someone stated that the 1005 mouse mode would not be handled properly in luit. # (By the way, this is a problem with the X11 protocol). A more plausible # criticism is that the responses provided by the 1005 mode are not distinct # from the non-1005 responses. # # As an alternative (and fixing the longstanding limitation of X11 mouse # protocol regarding button-releases), I provided this: xterm+sm+1006|xterm SGR-mouse, kmous=\E[<, XM=\E[?1006;1000%?%p1%{1}%=%th%el%;, xm=\E[<%p1%d;%p2%d;%p3%d;%?%p4%tM%em%;, xterm-1006|xterm SGR-mouse, use=xterm+sm+1006, use=xterm, #### KTERM # (kterm: this had extension capabilities ":KJ:TY=ascii:" -- esr) # (kterm should not invoke DEC Graphics as the alternate character set # -- Kenji Rikitake) # (proper setting of enacs, smacs, rmacs makes kterm to use DEC Graphics # -- MATSUMOTO Shoji) # kterm implements acsc via built-in table of X Drawable's kterm|kterm kanji terminal emulator (X window system), eslok, hs, XT, ncv@, acsc=``aajjkkllmmnnooppqqrrssttuuvvwwxx~~, csr=\E[%i%p1%d;%p2%dr, dsl=\E[?H, enacs=, fsl=\E[?F, kmous=\E[M, rc=\E8, rmacs=\E(B, rmam=\E[?7l, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;, sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, tsl=\E[?E\E[?%i%p1%dT, use=xterm-r6, use=ecma+color, kterm-color|kterm-co|kterm with ANSI colors, ncv@, use=kterm, use=ecma+color, #### Other XTERM # These (xtermc and xtermm) are distributed with Solaris. They refer to a # variant of xterm which is apparently no longer supported, but are interesting # because they illustrate SVr4 curses mouse controls - T.Dickey xtermm|xterm terminal emulator (monocrome), OTbs, am, km, mir, msgr, xenl, btns#3, cols#80, it#8, lines#24, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink@, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0, getm=\E[%p1%dY, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\E[Y, kf0=\EOy, kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, khome=\E[H, kmous=\E[^_, knp=\E[U, kpp=\E[V, rc=\E8, reqmp=\E[492Z, rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E@0\E[?4r, rmso=\E[m, rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smcup=\E@0\E[?4s\E[?4h\E@1, smso=\E[7m, tbc=\E[3g, use=vt100+fnkeys, xtermc|xterm terminal emulator (color), colors#8, ncv#7, pairs#64, op=\E[100m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, use=xtermm, # From: David J. MacKenzie 20 Apr 1995 # Here's a termcap entry I've been using for xterm_color, which comes # with BSD/OS 2.0, and the X11R6 contrib tape too I think. Besides the # color stuff, I also have a status line defined as the window manager # title bar. [I have translated it to terminfo -- ESR] xterm-pcolor|xterm with color used for highlights and status line, wsl#40, bold=\E[1;43m, rev=\E[7;34m, sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1;43%;%?%p2%t;4;42%;%?%p1%t;7;31%;%?%p3%t;7;34%;%?%p4%t;5%;%?%p7%t;8%;m, smso=\E[7;31m, smul=\E[4;42m, use=xterm+sl, use=xterm-r6, # This describes the capabilities of color_xterm, an xterm variant from # before ECMA-64 color support was folded into the main-line xterm release. # This entry is straight from color_xterm's maintainer. # From: Jacob Mandelson , 09 Nov 1996 # The README's with the distribution also say that it supports SGR 21, 24, 25 # and 27, but they are not present in the terminfo or termcap. color_xterm|cx|cx100|color_xterm color terminal emulator for X, OTbs, am, km, mir, msgr, xenl, XT, cols#80, it#8, lines#65, ncv@, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, home=\E[H, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, is1=\E[r\E[m\E[?7h\E[?4;6l\E[4l, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\E[8~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[7~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmcup=\E>\E[?41;1r, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\E(B\017\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E<, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;, sgr0=\E[0m\017, smacs=^N, smam=\E[?7h, smcup=\E[?1;41s\E[?1;41h\E=, smir=\E[4h, smso=\E[7m, smul=\E[4m, use=ecma+color, use=vt220+keypad, # The 'nxterm' distributed with Redhat Linux 5.2 is a slight rehack of # xterm-sb_right-ansi-3d, which implements ANSI colors, but does not support # SGR 39 or 49. SGR 0 does reset colors (along with everything else). This # description is "compatible" with color_xterm, rxvt and XFree86 xterm, except # that each of those implements the home, end, delete keys differently. # # Redhat Linux 6.x distributes XFree86 xterm as "nxterm", which uses bce # colors; note that this is not compatible with the 5.2 version. # csw (2002-05-15): make xterm-color primary instead of nxterm, to # match XFree86's xterm.terminfo usage and prevent circular links xterm-color|nxterm|generic color xterm, ncv@, op=\E[m, use=xterm-r6, use=klone+color, # This entry describes an xterm with Sun-style function keys enabled # via the X resource setting "xterm*sunFunctionKeys:true" # To understand / note that L1,L2 and F11,F12 are the same. # The ... keys are L3-L10. We don't set # because we want it to be seen as . # The ... keys are R1-R15. We treat some of these in accordance # with their Sun keyboard labels instead. # From: Simon J. Gerraty 10 Jan 1996 xterm-sun|xterm with sunFunctionKeys true, kb2=\E[218z, kcpy=\E[197z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3z, kend=\E[220z, kent=\EOM, kf1=\E[224z, kf10=\E[233z, kf11=\E[192z, kf12=\E[193z, kf13=\E[194z, kf14=\E[195z, kf15=\E[196z, kf17=\E[198z, kf18=\E[199z, kf19=\E[200z, kf2=\E[225z, kf20=\E[201z, kf3=\E[226z, kf31=\E[208z, kf32=\E[209z, kf33=\E[210z, kf34=\E[211z, kf35=\E[212z, kf36=\E[213z, kf38=\E[215z, kf4=\E[227z, kf40=\E[217z, kf42=\E[219z, kf44=\E[221z, kf45=\E[222z, kf46=\E[234z, kf47=\E[235z, kf5=\E[228z, kf6=\E[229z, kf7=\E[230z, kf8=\E[231z, kf9=\E[232z, kfnd=\E[200z, khlp=\E[196z, khome=\E[214z, kich1=\E[2z, knp=\E[222z, kpp=\E[216z, kund=\E[195z, use=xterm-basic, xterms-sun|small (80x24) xterm with sunFunctionKeys true, cols#80, lines#24, use=xterm-sun, #### GNOME (VTE) # this describes the alpha-version of Gnome terminal shipped with Redhat 6.0 gnome-rh62|Gnome terminal, bce, kdch1=\177, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, use=xterm-color, # GNOME Terminal 1.4.0.4 (Redhat 7.2) # # This implements a subset of vt102 with a random selection of features from # other terminals such as color and function-keys. # # shift-f1 to shift-f10 are f11 to f20 # # NumLock changes the application keypad to approximate vt100 keypad, except # that there is no escape sequence matching comma (,). # # Other defects observed: # vt100 LNM mode is not implemented. # vt100 80/132 column mode is not implemented. # vt100 DECALN is not implemented. # vt100 DECSCNM mode is not implemented, so flash does not work. # vt100 TBC (tab reset) is not implemented. # xterm alternate screen controls do not restore cursor position properly # it hangs in tack after running function-keys test. gnome-rh72|GNOME Terminal, bce, km@, civis=\E[?25l, cnorm=\E[?25h, kdch1=\E[3~, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rmam=\E[?7l, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m%?%p9%t\016%e\017%;, sgr0=\E[0m\017, smam=\E[?7h, tbc@, use=xterm-color, # GNOME Terminal 2.0.1 (Redhat 8.0) # # Documentation now claims it implements vt220 (which is demonstrably false). # However, it does implement ECH, which is a vt220 feature. And there are # workable vt100 LNM, DECALN, DECSNM modes, making it possible to display # more of its bugs using vttest. # # However, note that bce and msgr are broken in this release. Tabs (tbc and # hts) are broken as well. Sometimes flash (as in xterm-new) works. # # kf1 and kf10 are not tested since they're assigned (hardcoded?) to menu # operations. Shift-tab generates a distinct sequence so it can be argued # that it implements kcbt. gnome-rh80|GNOME Terminal, bce@, msgr@, ech=\E[%p1%dX, flash=\E[?5h$<100/>\E[?5l, kbs=\177, kcbt=\E^I, op=\E[39;49m, use=gnome-rh72, # GNOME Terminal 2.2.1 (Redhat 9.0) # # bce and msgr are repaired. gnome-rh90|GNOME Terminal, bce, msgr, XT, hpa=\E[%i%p1%dG, kDC=\E[3;2~, kLFT=\EO2D, kRIT=\EO2C, kb2=\E[E, kcbt=\E[Z, kend=\EOF, khome=\EOH, tbc=\E[3g, vpa=\E[%i%p1%dd, use=xterm+pcf0, use=xterm+pcfkeys, use=gnome-rh80, # GNOME Terminal 2.14.2 (Fedora Core 5) # Ed Catmur notes that gnome-terminal has recognized soft-reset since May 2002. gnome-fc5|GNOME Terminal, rs1=\Ec, rs2=\E7\E[r\E8\E[m\E[?7h\E[!p\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h, use=ansi+enq, use=xterm+pcc0, use=gnome-rh90, # GNOME Terminal 2.18.1 (2007 snapshot) # # For any "recent" version of gnome-terminal, it is futile to attempt to # support modifiers on cursor- and keypad keys because the program usually # is hardcoded to set $TERM to "xterm", and on startup, it builds a subset # of the keys (which more/less correspond to the termcap values), and will # interpret those according to the $TERM value, but others not in the # terminfo according to some constantly changing set of hacker guidelines -TD vte-2007|VTE in GNOME Terminal snapshot 2.18.1, use=xterm+pcc2, use=gnome-fc5, gnome-2007|GNOME Terminal snapshot 2.18.1, use=vte-2007, # GNOME Terminal 2.22.3 (2008 snapshot) # # In vttest, it claims to be a vt220 with national replacement character-sets, # but aside from the identifier string, implements only a small fraction of # vt220's behavior, which will make it less usable on a VMS system (unclear # what the intent of the developer is, since the NRC feature exposed in vttest # by this change does not work). vte-2008|VTE in GNOME Terminal snapshot 2.22.3, use=vte+pcfkeys, use=vte-2007, gnome-2008|GNOME Terminal snapshot 2.22.3, use=vte-2008, # GNOME Terminal 3.6.0 (2012) # VTE 0.34.1 was marked in git 2012-10-15 (three days after patch was applied # in ncurses). It inherited from gnome-fc5, which broke the modified forms # of f1-f4 -TD # # Testing with tack shows that flash does not/has not worked -TD vte-2012|VTE 0.34.1, ncv#16, dim=\E[2m, flash@, invis=\E[8m, ritm=\E[23m, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3%|%t;7%;m%?%p9%t\016%e\017%;, sitm=\E[3m, use=vte-2008, # Version 3.6.1 sets TERM to xterm-256color (still hardcoded), which has # 61 differences from a correct entry for gnome terminal. gnome-2012|GNOME Terminal 3.6.0, use=vte-2012, # GNOME terminal may automatically use the contents of the "xterm" terminfo to # supply key information which is not built into the program. With 2.22.3, # this list is built into the program (which addresses the inadvertant use of # random terminfo data, though using a set of values which does not correspond # to any that xterm produces - still not solving the problem that GNOME # terminal hardcodes the $TERM variable as "xterm"). # # terminfo modifier code keys # kf13-kf24 shift 2 F1 to F12 # kf25-kf36 control 5 F1 to F12 # kf37-kf48 shift/control 6 F1 to F12 # kf49-kf60 alt 3 F1 to F12 # kf61-kf63 shift-alt 4 F1 to F3 # # The parameters with \EO (SS3) are technically an error, since SS3 should have # no parameters. This appears to be rote copying based on xterm+pcc0. vte+pcfkeys|VTE's variation on xterm+pcfkeys, kf1=\EOP, kf13=\EO1;2P, kf14=\EO1;2Q, kf15=\EO1;2R, kf16=\EO1;2S, kf2=\EOQ, kf25=\EO1;5P, kf26=\EO1;5Q, kf27=\EO1;5R, kf28=\EO1;5S, kf3=\EOR, kf37=\EO1;6P, kf38=\EO1;6Q, kf39=\EO1;6R, kf4=\EOS, kf40=\EO1;6S, kf49=\EO1;3P, kf50=\EO1;3Q, kf51=\EO1;3R, kf52=\EO1;3S, kf61=\EO1;4P, kf62=\EO1;4Q, kf63=\EO1;4R, use=xterm+pcfkeys, gnome+pcfkeys|VTE's variation on xterm+pcfkeys, use=vte+pcfkeys, # deprecated - use "vte" for newer versions gnome|GNOME Terminal, use=vte-2012, # relevant changes were made in January 2014 vte-2014|VTE 0.35.1, use=xterm+pcfkeys, use=vte-2012, vte|VTE aka GNOME Terminal, use=vte-2014, vte-256color|VTE with xterm 256-colors, use=xterm+256color, use=vte, gnome-256color|GNOME Terminal with xterm 256-colors, use=vte-256color, # XFCE Terminal 0.2.5.4beta2 # # This is based on some of the same source code, e.g., the VTE library, as # gnome-terminal, but has fewer features, fails more screens in vttest. # Since most of the terminfo-related behavior is due to the VTE library, # the terminfo is the same as gnome-terminal. xfce|Xfce Terminal, use=vte-2008, #### Other GNOME # Multi-Gnome-Terminal 1.6.2 # # This does not use VTE, and does have different behavior (compare xfce and # gnome). mgt|Multi GNOME Terminal, indn=\E[%p1%dS, rin=\E[%p1%dT, use=xterm-xf86-v333, #### KDE # This is kvt 0-18.7, shipped with Redhat 6.0 (though whether it supports bce # or not is debatable). kvt|KDE terminal, bce, km@, kdch1=\177, kend=\E[F, khome=\E[H, use=xterm-color, # Konsole 1.0.1 # (formerly known as kvt) # # This program hardcodes $TERM to 'xterm', which is not accurate. However, to # simplify this entry (and point out why konsole isn't xterm), we base this on # xterm-r6. The default keyboard appears to be 'linux'. # # Notes: # a) konsole implements several features from XFree86 xterm, though none of # that is documented - except of course in its source code - apparently # because its implementors are unaccustomed to reading documentation - as # evidenced by the sparse and poorly edited documentation distributed with # konsole. Some features such as the 1049 private mode are recognized but # incorrectly implemented as a duplicate of the 47 private mode. # b) even with the "vt100 (historical)" keyboard setting, the numeric keypad # sends PC-style escapes rather than vt100. # c) fails vttest menu 3 (Test of character sets) because it does not properly # parse some control sequences. Also fails vttest Primary Device Attributes # by sending a bogus code (in the source it says it's supposed to be a # vt220, which is doubly incorrect because it does not implement vt220 # control sequences except for a few special cases). Treat it as a # mildly-broken vt102. # # Update for konsole 1.3.2: # The 1049 private mode works (but see the other xterm screens in vttest). # Primary Device Attributes now returns the code for a vt100 with advanced # video option. Perhaps that's intended to be a "mildly-broken vt102". # # Updated for konsole 1.6.4: # add konsole-solaris # # Updated for konsole 1.6.6: # add control-key modifiers for function-keys, etc. # # Updated for konsole 2.12.4: # add sitm/ritm # # vttest menu 1 shows that both konsole and gnome terminal do wrapping # different from xterm (and vt100's). They have the same behavior in this # detail, but it is unclear which copies the other. konsole-base|KDE console window, bce, km@, npc, XT, ncv@, bel@, blink=\E[5m, civis=\E[?25l, cnorm=\E[?25h, ech=\E[%p1%dX, flash=\E[?5h$<100/>\E[?5l, hpa=\E[%i%p1%dG, indn=\E[%p1%dS, kbs=\177, kdch1=\E[3~, kend=\E[4~, kf1@, kf10@, kf11@, kf12@, kf13@, kf14@, kf15@, kf16@, kf17@, kf18@, kf19@, kf2@, kf20@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, kf9@, kfnd@, khome=\E[1~, kslt@, rin=\E[%p1%dT, ritm=\E[23m, rmam=\E[?7l, rmso=\E[27m, rmul=\E[24m, rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;, sgr0=\E[0m\017, sitm=\E[3m, smam=\E[?7h, vpa=\E[%i%p1%dd, use=ecma+color, use=xterm-r6, konsole-linux|KDE console window with linux keyboard, kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13@, kf14@, kf15@, kf16@, kf17@, kf18@, kf19@, kf2=\E[[B, kf20@, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, use=konsole-base, konsole-solaris|KDE console window with Solaris keyboard, kbs=^H, kend=\E[4~, khome=\E[1~, use=konsole-vt100, # KDE's "XFree86 3.x.x" keyboard is based on reading the xterm terminfo rather # than testing the code. konsole-xf3x|KDE console window with keyboard for XFree86 3.x xterm, kend=\E[4~, khome=\E[1~, use=konsole-vt100, # The value for kbs reflects local customization rather than the settings used # for XFree86 xterm. konsole-xf4x|KDE console window with keyboard for XFree86 4.x xterm, kend=\EOF, khome=\EOH, use=konsole+pcfkeys, use=konsole-vt100, # Konsole does not implement shifted cursor-keys. konsole+pcfkeys|konsole subset of xterm+pcfkeys, kLFT@, kRIT@, kcbt=\E[Z, kind@, kri@, kDN@, kUP@, use=xterm+pcc2, use=xterm+pcf0, # KDE's "vt100" keyboard has no relationship to any terminal that DEC made, but # it is still useful for deriving the other entries. konsole-vt100|KDE console window with vt100 (sic) keyboard, kbs=\177, kdch1=\E[3~, kend=\E[F, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13@, kf14@, kf15@, kf16@, kf17@, kf18@, kf19@, kf2=\E[12~, kf20@, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H, use=konsole-base, konsole-vt420pc|KDE console window with vt420 pc keyboard, kbs=^H, kdch1=\177, use=konsole-vt100, konsole-16color|klone of xterm-16color, ncv#32, use=ibm+16color, use=konsole, # make a default entry for konsole konsole|KDE console window, use=konsole-xf4x, konsole-256color|KDE console window with xterm 256-colors, use=xterm+256setaf, use=konsole, #### MLTERM # http://mlterm.sourceforge.net/ mlterm|multi lingual terminal emulator, use=mlterm3, # Tested mlterm 3.2.2: # mlterm 3.x has made changes, but they are not reflected in the included # mlterm.ti; this entry is based on testing with tack and vttest -TD mlterm3|multi lingual terminal emulator, kf1=\E[11~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, ritm=\E[23m, sitm=\E[3m, use=xterm+app, use=xterm+pcf0, use=xterm+pcc2, use=xterm+pce2, use=mlterm2, # This is mlterm 2.9.3's mlterm.ti, with some additions/corrections -TD # # It is nominally a vt102 emulator, with features borrowed from rxvt and # xterm. # # The function keys are numbered based on shift/control/alt modifiers, except # that the control-modifier itself is used to spawn a new copy of mlterm (the # "-P" option). So control/F1 to control/F12 may not be usable, depending on # how it is configured. # # kf1 to kf12 \E[11~ to \E[24~ # shift kf1 to kf12 \E[11;2~ to \E[24;2~ # alt kf1 to kf12 \E[11;3~ to \E[24;3~ # shift/alt kf1 to kf12 \E[11;4~ to \E[24;4~ # control kf1 to kf12 \E[11;5~ to \E[24;5~ (maybe) # control/shift kf1 to kf12 \E[11;6~ to \E[24;6~ # control/alt kf1 to kf12 \E[11;7~ to \E[24;7~ # control/shift/alt kf1 to kf12 \E[11;8~ to \E[24;8~ # mlterm2|multi lingual terminal emulator, am, eslok, km, mc5i, mir, msgr, npc, xenl, XT, colors#8, cols#80, it#8, lines#24, pairs#64, acsc=00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS, is2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>, kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\EOF, kent=\EOM, kfnd=\E[1~, khome=\EOH, kich1=\E[2~, kind=\EO1;2B, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kri=\EO1;2A, kslt=\E[4~, mc0=\E[i, nel=\EE, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmacs=\E(B, rmam=\E[?7l, rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>\E[?1000l, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;, sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd, use=mlterm+pcfkeys, use=xterm+r6f2, # The insert/delete/home/end keys do not respond to modifiers because mlterm # looks in its termcap to decide which string to send. If it used terminfo # (when available), it could use the extended names introduced for xterm. mlterm+pcfkeys|fragment for PC-style fkeys, kLFT=\EO1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\EO1;2C, kDN=\EO1;2B, kDN3=\EO1;3B, kDN4=\EO1;4B, kDN5=\EO1;5B, kDN6=\EO1;6B, kDN7=\EO1;7B, kIC5=\E[2;5~, kIC6=\E[2;6~, kLFT3=\EO1;3D, kLFT4=\EO1;4D, kLFT5=\EO1;5D, kLFT6=\EO1;6D, kLFT7=\EO1;7D, kNXT5=\E[6;5~, kNXT6=\E[6;6~, kPRV5=\E[5;5~, kPRV6=\E[5;6~, kRIT3=\EO1;3C, kRIT4=\EO1;4C, kRIT5=\EO1;5C, kRIT6=\EO1;6C, kRIT7=\EO1;7C, kUP=\EO1;2A, kUP3=\EO1;3A, kUP4=\EO1;4A, kUP5=\EO1;5A, kUP6=\EO1;6A, kUP7=\EO1;7A, mlterm-256color|mlterm 3.0 with xterm 256-colors, use=xterm+256color, use=mlterm, #### RXVT # From: Thomas Dickey 04 Oct 1997 # Updated: Oezguer Kesim 02 Nov 1997 # Notes: # rxvt 2.21b uses # smacs=\E(B\E)U^N, rmacs=\E(B\E)0^O, # but some applications don't work with that. # It also has an AIX extension # box2=lqkxjmwuvtn, # and # ech=\E[%p1%dX, # but the latter does not work correctly. # # The distributed terminfo says it implements hpa and vpa, but they are not # implemented correctly, using relative rather than absolute positioning. # # rxvt is normally configured to look for "xterm" or "xterm-color" as $TERM. # Since rxvt is not really compatible with xterm, it should be configured as # "rxvt" or "rxvt-color". # # removed dch/dch1 because they are inconsistent with bce/ech -TD # remove km as per tack test -TD rxvt-basic|rxvt terminal base (X Window System), OTbs, am, bce, eo, mir, msgr, xenl, xon, XT, cols#80, it#8, lines#24, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=\E[?5h\E[?5l, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, is1=\E[?47l\E=\E[?1l, is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kbs=^H, kcbt=\E[Z, kmous=\E[M, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E>, rmso=\E[27m, rmul=\E[24m, rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h, s0ds=\E(B, s1ds=\E(0, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;, sgr0=\E[0m\017, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h, smkx=\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, use=vt100+enq, use=rxvt+pcfkeys, use=vt220+keypad, # Key Codes from rxvt reference: # # Note: Shift + F1-F10 generates F11-F20 # # For the keypad, use Shift to temporarily override Application-Keypad # setting use Num_Lock to toggle Application-Keypad setting if Num_Lock # is off, escape sequences toggle Application-Keypad setting. # Also note that values of Home, End, Delete may have been compiled # differently on your system. # # Normal Shift Control Ctrl+Shift # Tab ^I ESC [ Z ^I ESC [ Z # BackSpace ^H ^? ^? ^? # Find ESC [ 1 ~ ESC [ 1 $ ESC [ 1 ^ ESC [ 1 @ # Insert ESC [ 2 ~ paste ESC [ 2 ^ ESC [ 2 @ # Execute ESC [ 3 ~ ESC [ 3 $ ESC [ 3 ^ ESC [ 3 @ # Select ESC [ 4 ~ ESC [ 4 $ ESC [ 4 ^ ESC [ 4 @ # Prior ESC [ 5 ~ scroll-up ESC [ 5 ^ ESC [ 5 @ # Next ESC [ 6 ~ scroll-down ESC [ 6 ^ ESC [ 6 @ # Home ESC [ 7 ~ ESC [ 7 $ ESC [ 7 ^ ESC [ 7 @ # End ESC [ 8 ~ ESC [ 8 $ ESC [ 8 ^ ESC [ 8 @ # Delete ESC [ 3 ~ ESC [ 3 $ ESC [ 3 ^ ESC [ 3 @ # F1 ESC [ 11 ~ ESC [ 23 ~ ESC [ 11 ^ ESC [ 23 ^ # F2 ESC [ 12 ~ ESC [ 24 ~ ESC [ 12 ^ ESC [ 24 ^ # F3 ESC [ 13 ~ ESC [ 25 ~ ESC [ 13 ^ ESC [ 25 ^ # F4 ESC [ 14 ~ ESC [ 26 ~ ESC [ 14 ^ ESC [ 26 ^ # F5 ESC [ 15 ~ ESC [ 28 ~ ESC [ 15 ^ ESC [ 28 ^ # F6 ESC [ 17 ~ ESC [ 29 ~ ESC [ 17 ^ ESC [ 29 ^ # F7 ESC [ 18 ~ ESC [ 31 ~ ESC [ 18 ^ ESC [ 31 ^ # F8 ESC [ 19 ~ ESC [ 32 ~ ESC [ 19 ^ ESC [ 32 ^ # F9 ESC [ 20 ~ ESC [ 33 ~ ESC [ 20 ^ ESC [ 33 ^ # F10 ESC [ 21 ~ ESC [ 34 ~ ESC [ 21 ^ ESC [ 34 ^ # F11 ESC [ 23 ~ ESC [ 23 $ ESC [ 23 ^ ESC [ 23 @ # F12 ESC [ 24 ~ ESC [ 24 $ ESC [ 24 ^ ESC [ 24 @ # F13 ESC [ 25 ~ ESC [ 25 $ ESC [ 25 ^ ESC [ 25 @ # F14 ESC [ 26 ~ ESC [ 26 $ ESC [ 26 ^ ESC [ 26 @ # F15 (Help) ESC [ 28 ~ ESC [ 28 $ ESC [ 28 ^ ESC [ 28 @ # F16 (Menu) ESC [ 29 ~ ESC [ 29 $ ESC [ 29 ^ ESC [ 29 @ # F17 ESC [ 31 ~ ESC [ 31 $ ESC [ 31 ^ ESC [ 31 @ # F18 ESC [ 32 ~ ESC [ 32 $ ESC [ 32 ^ ESC [ 32 @ # F19 ESC [ 33 ~ ESC [ 33 $ ESC [ 33 ^ ESC [ 33 @ # F20 ESC [ 34 ~ ESC [ 34 $ ESC [ 34 ^ ESC [ 34 @ # # Application # Up ESC [ A ESC [ a ESC O a ESC O A # Down ESC [ B ESC [ b ESC O b ESC O B # Right ESC [ C ESC [ c ESC O c ESC O C # Left ESC [ D ESC [ d ESC O d ESC O D # KP_Enter ^M ESC O M # KP_F1 ESC O P ESC O P # KP_F2 ESC O Q ESC O Q # KP_F3 ESC O R ESC O R # KP_F4 ESC O S ESC O S # XK_KP_Multiply * ESC O j # XK_KP_Add + ESC O k # XK_KP_Separator , ESC O l # XK_KP_Subtract - ESC O m # XK_KP_Decimal . ESC O n # XK_KP_Divide / ESC O o # XK_KP_0 0 ESC O p # XK_KP_1 1 ESC O q # XK_KP_2 2 ESC O r # XK_KP_3 3 ESC O s # XK_KP_4 4 ESC O t # XK_KP_5 5 ESC O u # XK_KP_6 6 ESC O v # XK_KP_7 7 ESC O w # XK_KP_8 8 ESC O x # XK_KP_9 9 ESC O y # # The source-code for rxvt actually defines mappings for F21-F35, using # "ESC [ 35 ~" to "ESC [ 49 ~". Keyboards with more than 12 function keys # are rare, so this entry uses the shift- and control-modifiers as in # xterm+pcfkeys to define keys past F12. # # kIC is normally not used, since rxvt performs a paste for that (shifted # insert), unless private mode 35 is set. # # kDN, kDN5, kDN6, etc are extensions based on the names from xterm+pcfkeys -TD # Removed kDN6, etc (control+shift) since rxvt does not implement this -TD rxvt+pcfkeys|fragment for PC-style fkeys, kDC=\E[3$, kEND=\E[8$, kHOM=\E[7$, kIC=\E[2$, kLFT=\E[d, kNXT=\E[6$, kPRV=\E[5$, kRIT=\E[c, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kel=\E[8\^, kend=\E[8~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf21=\E[23$, kf22=\E[24$, kf23=\E[11\^, kf24=\E[12\^, kf25=\E[13\^, kf26=\E[14\^, kf27=\E[15\^, kf28=\E[17\^, kf29=\E[18\^, kf3=\E[13~, kf30=\E[19\^, kf31=\E[20\^, kf32=\E[21\^, kf33=\E[23\^, kf34=\E[24\^, kf35=\E[25\^, kf36=\E[26\^, kf37=\E[28\^, kf38=\E[29\^, kf39=\E[31\^, kf4=\E[14~, kf40=\E[32\^, kf41=\E[33\^, kf42=\E[34\^, kf43=\E[23@, kf44=\E[24@, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khome=\E[7~, kich1=\E[2~, kind=\E[a, knp=\E[6~, kpp=\E[5~, kri=\E[b, kslt=\E[4~, kDC5=\E[3\^, kDC6=\E[3@, kDN=\E[b, kDN5=\EOb, kEND5=\E[8\^, kEND6=\E[8@, kHOM5=\E[7\^, kHOM6=\E[7@, kIC5=\E[2\^, kIC6=\E[2@, kLFT5=\EOd, kNXT5=\E[6\^, kNXT6=\E[6@, kPRV5=\E[5\^, kPRV6=\E[5@, kRIT5=\EOc, kUP=\E[a, kUP5=\EOa, # rxvt was originally "xvt", first announced in April 1993: # http://www.informatica.co.cr/linux-desktops/research/1993/0416.html # # Though its change-log does not mention this, John Davis has stated that he # was the author of the changes to use the bce ("new color model") which was # incorporated into rxvt 2.11 (June 15, 1995). The change-log does not give # dates, nor give developer's names. Initial color support was added for rxvt # "2.0", which was sometime in 1994. # # rxvt had usable color support with 2.16 (April 2, 1996), with some help by my work on # vttest, as well as bug reports to Mark Olesen. For instance, the fix # mentioned here # http://web.archiveorange.com/archive/v/6ETvLb5wHtbbzCaS4S9J # was from one of my bug-reports -TD # # While the color model both for xterm and rxvt was based on Linux console, # Olesen (or possibly Davis) diverged in one respect from Linux's bce color # behavior: inserting/deleting characters does not fill the newly empty cell # with the default background color. rxvt|rxvt terminal emulator (X Window System), ncv@, hpa=\E[%i%p1%dG, kf0=\E[21~, sgr0=\E[m\017, vpa=\E[%i%p1%dd, use=rxvt-basic, use=ecma+color, rxvt-color|rxvt terminal emulator (X Window System), use=rxvt, rxvt-256color|rxvt 2.7.9 with xterm 256-colors, use=xterm+256color, use=rxvt, rxvt-88color|rxvt 2.7.9 with xterm 88-colors, use=xterm+88color, use=rxvt, rxvt-xpm|rxvt terminal emulator (X Window System), use=rxvt, rxvt-cygwin|rxvt terminal emulator (X Window System) on cygwin, acsc=+\257\,\256-\^0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, use=rxvt, rxvt-cygwin-native|rxvt terminal emulator (native MS Window System port) on cygwin, acsc=+\257\,\256-\^0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330~\376, use=rxvt-cygwin, # This variant is supposed to work with rxvt 2.7.7 when compiled with # NO_BRIGHTCOLOR defined. rxvt needs more work... rxvt-16color|rxvt with 16 colors like aixterm, ncv#32, use=ibm+16color, use=rxvt, #### MRXVT # mrxvt 0.5.4 # # mrxvt is based on rxvt 2.7.11, but has by default XTERM_FKEYS defined, which # makes its function-keys different from other flavors of rxvt -TD # # Testing with tack: # + made custom description (below) to work, though it sets TERM=xterm. # # Testing with vttest: # + While "based on" rxvt, some of the basic functionality is broken. The # window collapses to a single line when running several of the screens # in vttest, e.g., the tests for cursor movement, screen features, # double-sized characters. # + The vt52 test works properly, but this is an exception. Due to the # other bug(s) most of vttest is untestable. # + the color test using ECH shows a gap in the bce model, like rxvt. # # Testing with xterm "vttest" scripts: # + resize.pl does not work because mrxvt does implement CSI 18 t # (not in rxvt, but not documented by mrxvt) but not CSI 19 t. # + none of the "dynamic colors" (OSC colors) scripts work. mrxvt|multitabbed rxvt, XT, kEND=\E[8;2~, kHOM=\E[7;2~, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[8~, khome=\E[7~, kEND3=\E[8;3~, kEND4=\E[8;4~, kEND5=\E[8;5~, kEND6=\E[8;6~, kEND7=\E[8;7~, kHOM3=\E[7;3~, kHOM4=\E[7;4~, kHOM5=\E[7;5~, kHOM6=\E[7;6~, kHOM7=\E[7;7~, use=xterm+r6f2, use=xterm+pcfkeys, use=rxvt, mrxvt-256color|multitabbed rxvt with 256 colors, use=xterm+256color, use=mrxvt, #### ETERM # From: Michael Jennings # # Eterm 0.9.3 # # removed kf0 which conflicts with kf10 -TD # remove cvvis which conflicts with cnorm -TD # Eterm does not implement control/shift cursor keys such as kDN6, or kPRV/kNXT # but does otherwise follow the rxvt+pcfkeys model -TD # remove nonworking flash -TD # remove km as per tack test -TD Eterm|Eterm-color|Eterm with xterm-style color support (X Window System), am, bce, bw, eo, mc5i, mir, msgr, xenl, xon, XT, btns#5, cols#80, it#8, lines#24, lm#0, ncv@, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, is1=\E[?47l\E>\E[?1l, is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kNXT@, kPRV@, ka1=\E[7~, ka3=\E[5~, kb2=\EOu, kbeg=\EOu, kbs=^H, kc1=\E[8~, kc3=\E[6~, kent=\EOM, khlp=\E[28~, kmous=\E[M, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=, rmso=\E[27m, rmul=\E[24m, rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E7\E[?47h, smir=\E[4h, smkx=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, use=vt100+enq, use=rxvt+pcfkeys, use=ecma+color, Eterm-256color|Eterm with xterm 256-colors, use=xterm+256color, use=Eterm, Eterm-88color|Eterm with 88 colors, use=xterm+88color, use=Eterm, #### ATERM # Based on rxvt 2.4.8, it has a few differences in key bindings aterm|AfterStep terminal, XT, kbs=\177, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, use=rxvt, #### XITERM # xiterm 0.5-5.2 # This is not based on xterm's source... # vttest shows several problems with keyboard, cursor-movements. # see also http://invisible-island.net/xterm/xterm.faq.html#bug_xiterm xiterm|internationalized terminal emulator for X, km@, kbs=\177, kdch1=\E[3~, use=klone+color, use=xterm-r6, #### HPTERM # HP ships this (HPUX 9 and 10), except for the pb#9600 which was merged in # from BSD termcap. (hpterm: added empty , we have no idea what ACS # chars look like --esr) hpterm|X-hpterm|hp X11 terminal emulator, am, da, db, mir, xhp, cols#80, lh#2, lines#24, lm#0, lw#8, nlab#8, pb#9600, xmc#0, acsc=, bel=^G, bold=\E&dB, cbt=\Ei, clear=\E&a0y0C\EJ, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP, dim=\E&dH, dl1=\EM, ed=\EJ$<1>, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1, il1=\EL, ind=^J, kbs=^H, kclr=\EJ, kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL, kind=\ES, kll=\EF, knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, ktbc=\E3, meml=\El, memu=\Em, pfkey=\E&f%p1%dk%p2%l%dL%p2%s, pfloc=\E&f1a%p1%dk%p2%l%dL%p2%s, pfx=\E&f2a%p1%dk%p2%l%dL%p2%s, pln=\E&f%p1%dk%p2%l%dd0L%p2%s, rev=\E&dB, ri=\ET, rmacs=^O, rmir=\ER, rmkx=\E&s0A, rmln=\E&j@, rmso=\E&d@, rmul=\E&d@, sgr=\E&d%?%p7%t%{115}%c%;%p1%p3%|%p6%|%{2}%*%p2%{4}%*%+%p4%+%p5%{8}%*%+%{64}%+%c%?%p9%t%'\016'%c%e%'\017'%c%;, sgr0=\E&d@, smacs=^N, smir=\EQ, smkx=\E&s1A, smln=\E&jB, smso=\E&dJ, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY, # HPUX 11 provides a color version. hpterm-color|HP X11 terminal emulator with color, ccc, colors#64, pairs#8, home=\E&a0y0C, initp=\E&v%p2%da%p3%db%p4%dc%p5%dx%p6%dy%p7%dz%p1%dI, op=\E&v0S, scp=\E&v%p1%dS, use=hpterm, #### EMU # This is for the extensible terminal emulator on the X11R6 contrib tape. # It corresponds to emu's internal emulation: # emu -term emu # emu's default sets TERM to "xterm", but that doesn't work well -TD # fixes: remove bogus rmacs/smacs, change oc to op, add bce, am -TD # fixes: add civis, cnorm, sgr -TD emu|emu native mode, am, bce, mir, msgr, xon, colors#15, cols#80, it#8, lines#24, pairs#64, vt#200, acsc=61a\202f\260g2j\213k\214l\215m\216n\217o\220q\222s\224t\225u\226v\227w\230x\231~\244, bel=^G, blink=\EW, bold=\EU, civis=\EZ, clear=\EP\EE0;0;, cnorm=\Ea, cr=^M, csr=\Ek%p1%d;%p2%d;, cub=\Eq-%p1%d;, cub1=^H, cud=\Ep%p1%d;, cud1=\EB, cuf=\Eq%p1%d;, cuf1=\EC, cup=\EE%p1%d;%p2%d;, cuu=\Ep-%p1%d;, cuu1=\EA, dch=\EI%p1%d;, dch1=\EI1;, dl=\ER%p1%d;, dl1=\ER1;, ech=\Ej%p1%d;, ed=\EN, el=\EK, el1=\EL, home=\EE0;0;, ht=^I, hts=\Eh, il=\EQ%p1%d;, il1=\EQ1;, ind=\EG, is2=\ES\Er0;\Es0;, kbs=^H, kcub1=\EC, kcud1=\EB, kcuf1=\ED, kcuu1=\EA, kdch1=\177, kent=^M, kf0=\EF00, kf1=\EF01, kf10=\EF10, kf11=\EF11, kf12=\EF12, kf13=\EF13, kf14=\EF14, kf15=\EF15, kf16=\EF16, kf17=\EF17, kf18=\EF18, kf19=\EF19, kf2=\EF02, kf20=\EF20, kf3=\EF03, kf4=\EF04, kf5=\EF05, kf6=\EF06, kf7=\EF07, kf8=\EF08, kf9=\EF09, kfnd=\Efind, kich1=\Eins, knp=\Enext, kpp=\Eprior, kslt=\Esel, op=\Es0;\Er0;, rev=\ET, ri=\EF, rmir=\EX, rmso=\ES, rmul=\ES, rs2=\ES\Es0;\Er0;, setab=\Es%i%p1%d;, setaf=\Er%i%p1%d;, sgr=\ES%?%p1%t\ET%;%?%p2%t\EV%;%?%p3%t\ET%;%?%p4%t\EW%;%?%p6%t\EU%;, sgr0=\ES, smir=\EY, smso=\ET, smul=\EV, tbc=\Ej, # vt220 Terminfo entry for the Emu emulation, corresponds to # emu -term vt220 # with NumLock set (to make the keypad transmit kf0-kf9). # fixes: add am, xenl, corrected sgr0 -TD emu-220|Emu-220 (vt200-7bit mode), am, xenl, xon, cols#80, it#8, lines#24, vt#200, acsc=aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G, blink=\E[0;5m, bold=\E[0;1m, civis=\E[?25l, clear=\E[2J\E[H, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[1D, cud=\E[%p1%dB, cud1=\E[1B, cuf=\E[%p1%dC, cuf1=\E[1C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[1A, dch=\E[%p1%dP, dch1=\E[1P, dl=\E[%p1%dM, dl1=\E[1M, ed=\E[0J, el=\E[0K, el1=\E[1K, enacs=\E)0, home=\E[H, ht=^I, hts=\EH, if=/usr/share/tabset/vt300, il=\E[%p1%dL, il1=\E[1L, ind=\ED, is2=\E>\E[?1l\E[?3l\E[4l\E[?7h, kbs=^H, kcmd=\E[29~, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kent=\EOM, kf0=\EOp, kf1=\EOq, kf10=\EOl, kf11=\EOm, kf12=\EOn, kf13=\EOP, kf14=\EOQ, kf15=\EOR, kf16=\EOS, kf2=\EOr, kf26=\E[17~, kf27=\E[18~, kf28=\E[19~, kf29=\E[20~, kf3=\EOs, kf30=\E[21~, kf34=\E[26~, kf37=\E[31~, kf38=\E[32~, kf39=\E[33~, kf4=\EOt, kf40=\E[34~, kf5=\EOu, kf6=\EOv, kf7=\EOw, kf8=\EOx, kf9=\EOy, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, rc=\E8, rev=\E[0;7m, ri=\EM, rmacs=^O, rmcup=\E>, rmkx=\E>, rmso=\E[m, rmul=\E[m, rs2=\E[4l\E[34l\E[?1l\E[?3l\E[?5l\E[?7h, sc=\E7, sgr=\E[0%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m, smacs=^N, smcup=\E[?1l\E=, smkx=\E=, smso=\E[0;7m, smul=\E[0;4m, tbc=\E[3g, #### MVTERM # A commercial product, Reportedly a version of Xterm with an OPEN LOOK UI, # print interface, ANSI X3.64 colour escape sequences, etc. Newsgroup postings # indicate that it emulates more than one terminal, but incompletely. # # This is adapted from a FreeBSD bug-report by Daniel Rudy # It is based on vt102's entry, with some subtle differences, but also # has status line # supports ANSI colors (except for 'op' string) # apparently implements alternate screen like xterm # does not use padding, of course. mvterm|vv100|SwitchTerm aka mvTERM, am, eslok, hs, km, mir, msgr, xenl, colors#8, cols#80, it#8, lines#24, pairs#64, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, dsl=\E[?E, ed=\E[J, el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0, fsl=\E[?F, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOy, kf10=\EOx, kf5=\EOt, kf6=\EOu, kf7=\EOv, kf8=\EOl, kf9=\EOw, op=\E[100m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E[2J\E[?47l\E8, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs2=\E>\E[1;3;4;5;6l\E[?7h\E[100m\E[m\E[r\E[2J\E[H, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smcup=\E7\E[?47h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[?E\E[?%i%p1%dT, use=vt100+fnkeys, #### MTERM # # This application is available by email from . # # "mterm -type ansi" sets $TERM to "ansi" mterm-ansi|ANSI emulation, am, bw, mir, msgr, it#8, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%i%p1%d`, ht=^I, ich1=, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, invis=\E[8m, is2=\E)0\017, kbs=^H, nel=\EE, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmacs=^O, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m, smacs=^N, smir=\E[4h, smso=\E[7m, smul=\E[4m, vpa=\E[%i%p1%dd, # mterm normally sets $TERM to "mterm" mterm|mouse-sun|Der Mouse term, am, bw, mir, it#8, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^N, cuf1=^S, cup=\006%p1%d.%p2%d., cuu1=^X, dch1=^Y, dl1=^K, ed=^B, el=^C, home=^P, ht=^I, il1=^A, ind=^U, kbs=^H, ll=^R, nel=^M^U, ri=^W, rmir=^O, rmso=^T, smir=^Q, smso=^V, # "mterm -type decansi" sets $TERM to "decansi" # # note: kdch1, kfnd, kslt are in the source code, but do not work -TD decansi|ANSI emulation with DEC compatibility hacks, am, mir, msgr, xenl, colors#8, it#8, pairs#64, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, enacs=\E(B\E)0, home=\E[H, hpa=\E[%i%p1%d`, ht=^I, ich1=, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, invis=\E[8m, is2=\E)0\E[r\017, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, nel=\EE, op=\E[0m, rc=\E8, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m, smacs=^N, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, u6=\E[%i%d;%dR, u7=\E[6n, vpa=\E[%i%p1%dd, #### VWM # http://vwm.sourceforge.net/ # # VWM 2.0.2 (2009-05-01) # vwmterm is a terminal emulator written for the VWM console window manager. # This version is obsolete, replaced by libvterm in 2.1.0 (2009-10-23). vwmterm|(vwm term), am, bce, ccc, mir, msgr, npc, xenl, xon, colors#8, pairs#64, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?25h, dim=\E[2m, ed=\E[J, el=\E[K, home=\E[H, il1=\E[L, ind=^J, invis=\E[8m, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~, kf11=\E[22~, kf12=\E[23~, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, knp=\E[6~, kpp=\E[5~, rev=\E[7m, rmacs=\E[10m, rmam=\E[?7l, rmcup=\E[?1049l, rs1=\E[H\E[J\E[m\Ec, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m, sgr0=\E[0;10m, smacs=\E[11m, smam=\E[?7h, smcup=\E[?1049h, smso=\E[3m, smul=\E[4m, #### MGR # # MGR is a Bell Labs window system lighter-weight than X. # These entries describe MGR's xterm-equivalent. # They are courtesy of Vincent Broman 14 Jan 1997 # mgr|Bellcore MGR (non X) window system terminal emulation, am, km, bel=^G, bold=\E2n, civis=\E9h, clear=^L, cnorm=\Eh, cr=^M, csr=\E%p1%d;%p2%dt, cub1=^H, cud1=\Ef, cuf1=\Er, cup=\E%p2%d;%p1%dM, cuu1=\Eu, cvvis=\E0h, dch=\E%p1%dE$<5>, dch1=\EE, dl=\E%p1%dd$<3*>, dl1=\Ed$<3>, ed=\EC, el=\Ec, hd=\E1;2f, ht=^I, hu=\E1;2u, ich=\E%p1%dA$<5>, ich1=\EA, il=\E%p1%da$<3*>, il1=\Ea$<3>, ind=^J, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, nel=^M^J, rev=\E1n, rmam=\E5S, rmso=\E0n, rmul=\E0n, sgr0=\E0n, smam=\E5s, smso=\E1n, smul=\E4n, mgr-sun|Mgr window with Sun keyboard, ka1=\E[214z, ka3=\E[216z, kb2=\E[218z, kc1=\E[220z, kc3=\E[222z, kcpy=\E[197z, kend=\E[220z, kent=\E[250z, kf1=\E[224z, kf10=\E[233z, kf11=\E[234z, kf12=\E[235z, kf2=\E[225z, kf3=\E[226z, kf4=\E[227z, kf5=\E[228z, kf6=\E[229z, kf7=\E[230z, kf8=\E[231z, kf9=\E[232z, kfnd=\E[200z, khlp=\E[207z, khome=\E[214z, knp=\E[222z, kopn=\E[198z, kpp=\E[216z, kund=\E[195z, use=mgr, mgr-linux|Mgr window with Linux keyboard, ka1=\E[H, ka3=\E[5~, kb2=\E[G, kc1=\E[Y, kc3=\E[6~, kdch1=\E[3~, kend=\E[4~, kf0=\E[[J, kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, knp=\E[6~, kpp=\E[5~, use=mgr, #### SIMPLETERM # st.suckless.org # st-0.4.1 # # This version uses a table which supports a single modifier (a subset of # xterm's keys, using the same scheme). Because it supports only a single # modifier in this table, function keys f36-f48 are normally unavailable # because they are assigned to modifier-4. # # The program assigns TERM to match the program name (the upstream source says # "st", but Debian renames it to "stterm"). # # The source includes two entries which are not useful here: # st-meta| simpleterm with meta key, # st-meta-256color| simpleterm with meta key and 256 colors, # because st's notion of "meta" does not correspond to the terminfo definition. # Rather, it acts like xterm - when the meta feature is disabled. # # Removed invis -TD # Added eo, removed ul -TD # # Reviewed st 0.5: # implements control-modifier, but not control-shift for special keys # implements alt-modifier, but not alt-shift for special keys st|stterm| simpleterm 0.4.1, am, bce, eo, hs, mir, msgr, xenl, colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?25h, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0, flash=\E[?5h\E[?5l, fsl=^G, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS, is2=\E[4l\E>\E[?1034l, kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C, ka1=\E[1~, ka3=\E[5~, kb2=\EOu, kbs=\177, kc1=\E[4~, kc3=\E[6~, kcbt=\E[Z, kclr=\E[3;5~, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kdl1=\E[3;2~, ked=\E[1;5F, kel=\E[1;2F, kend=\E[4~, kent=\EOM, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~, kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~, kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~, kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kil1=\E[2;5~, kind=\E[1;2B, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, krmir=\E[2;2~, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, ritm=\E[23m, rmacs=\E(B, rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[m, rs1=\Ec, rs2=\E[4l\E>\E[?1034l, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m, sgr0=\E[0m, sitm=\E[3m, smacs=\E(0, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E]0;, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd, # # st-0.1.1 # # Note: the original terminfo description uses leading blank to persuade # ncurses to use "st" as its name. Proper fix for that is to use "st" as an # alias. # # Reading the code shows it should work for aixterm 16-colors # - added st-16color # # Using tack: # - set eo (erase-overstrike) # - set xenl # - tbc doesn't work # - hts works # - cbt doesn't work # - shifted cursor-keys send sequences like rxvt # - sgr referred to unimplemented "invis" mode. # Fixes: add eo and xenl per tack, remove nonworking cbt, hts and tbc, invis simpleterm|old-st| simpleterm 0.1.1, am, eo, mir, msgr, ul, xenl, colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS, kbs=\177, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, knp=\E[6~, kpp=\E[5~, op=\E[37;40m, rc=\E8, rev=\E[7m, rmacs=\E(B, rmso=\E[m, rmul=\E[m, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m, sgr0=\E[0m, smacs=\E(0, smso=\E[7m, smul=\E[4m, st-16color|stterm-16color|simpleterm with 16-colors, use=ibm+16color, use=st, # 256 colors "works", but when running xterm's test-scripts, some garbage is # shown in the titlebar. # # terminal wants to use TERM=stterm-256color, but that is longer than 14 # characters, making the choice nonportable. st-256color|stterm-256color|simpleterm with 256 colors, use=xterm+256color, use=st, #### TERMINATOR # https://code.google.com/p/jessies/ # Tested using their Debian package org.jessies.terminator 6.104.3256 on 64-bit # Debian/current -TD (2011/8/20) # # There are some packaging problems: # a) using Java, the program starts off using 50Mb, and climbs from there, # up to 114Mb after testing (no scrollback). # b) it insists on reinstalling its terminal description in $HOME/.terminfo # (two copies, just in case the host happens to be Mac OS X). # I deleted this after testing with tack. # # Issues/features found with tack: # a) tbc does not work (implying that hts also is broken). # Comparing with the tabs utility shows a problem with the last tabstop on # a line. # b) has xterm-style shifted function-key strings # meta also is used, but control is ignored. # c) has xterm-style modifiers for cursor keys (shift, control, shift+control, meta) # d) some combinations of shift/control send xterm-style sequences for # insert/delete/home/end. # e) numeric keypad sends only numbers (compare with vttest). # f) meta mode (km) is not implemented. # # Issues found with ncurses test-program: # a) bce is inconsistently implemented # b) widths of Unicode values above 256 do not always agree with wcwidth. # # Checked with vttest, found low degree of compatibility there. # # Checked with xterm's scripts, found that the 256-color palette is fixed. # # Fixes: # a) add sgr string # b) corrected sgr0 to reset alternate character set # c) modified smacs/rmacs to use SCS rather than SI/SO # d) removed bce # e) removed km terminator|Terminator no line wrap, eo, mir, msgr, xenl, xon, colors#256, cols#80, it#8, lines#24, lm#0, pairs#32767, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=^G, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, is1=\E[?47l\E=\E[?1l, is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E(B, rmcup=\E[?47l\E8, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E>, s0ds=\E(B, s1ds=\E(0, sc=\E7, setab=\E[48;5;%p1%dm, setaf=\E[38;5;%p1%dm, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;, sgr0=\E[m\E(B, smacs=\E(0, smcup=\E7\E[?47h, smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, use=xterm+sl-twm, #### TERMINOLOGY # http://enlightenment.org # # Tested terminology-0.3.0, 0.6.1, using tack and vttest. This is not a vt100 # emulator, nor is it compatible with xterm, but it uses a few features from # both -TD # # General comments: # cursor does not fill on focus # there are pervasive problems with clearing/erasing parts of the screen # resizing the window causes it to stop listening to the keyboard # tack - # doesn't understand vt100 CPR needed for resize # no CBT # no cvvis # has invis # no blink # uses bce model for colors, but (see below) fails the vttest screens # has partial support for 256color feature. # tack function-keys (a subset of xterm+pcf0), and # tack cursor-keys (a subset of xterm+pce2): # ctrl+shift (ignored) # 2 shift # shift-alt modifier -> shift (2) # 3 alt # 4 # 5 ctrl # tack modifiers did not work for fkeys in 0.3.0; subset works in 0.6.1 # ctrl + khome/kend works - none of the other modifiers do # vttest - # spits lots of messages from termptyesc.c especially in vttest. # no 132-column mode # fails menu 1, 2 (definitely not vt100-compatible) # primary (claims vt420 with several options, apparently none work) and # secondary report says (perhaps... vt420): \E[>41;285;0c # CHA, HPR, VPA, CNL, CPL work # BCE with ED/EL - fail # BCE with ECH/indexing - fail # SD/SU work # unlike teken, background light/dark works # can set title # X10 and Normal mouse work # Any-event mouse works # Mouse button-event works # # This description uses xterm+pcf0, which is misleading because the program # does not handle combinations of modifiers - but listing them all would # involve more effort than its developers spent -TD terminology|EFL-based terminal emulator, mc5i@, xon@, blink@, ed@, el@, el1@, invis=\E[8m, kLFT=\E[1;2D, kRIT=\E[1;2C, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kind=\E[1;2B, kri=\E[1;2A, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;$<2>, vpa=\E[%i%p1%dd, kDC3=\E[3;3~, kDC4=\E[3;4~, kDC5=\E[3;5~, kDC6=\E[3;6~, kDC7=\E[3;7~, kDN=\E[1;2B, kDN3=\E[1;3B, kDN4=\E[1;4B, kDN5=\E[1;5B, kDN6=\E[1;6B, kDN7=\E[1;7B, kEND5=\E[1;5F, kHOM5=\E[1;5H, kLFT3=\E[1;3D, kLFT4=\E[1;4D, kLFT5=\E[1;5D, kLFT6=\E[1;6D, kLFT7=\E[1;7D, kRIT3=\E[1;3C, kRIT4=\E[1;4C, kRIT5=\E[1;5C, kRIT6=\E[1;6C, kRIT7=\E[1;7C, kUP=\E[1;2A, use=xterm+pcf0, use=vt100, use=xterm+256setaf, ######## UNIX VIRTUAL TERMINALS, VIRTUAL CONSOLES, AND TELNET CLIENTS # # Columbus UNIX virtual terminal. This terminal also appears in # UNIX 4.0 and successors as line discipline 1 (?), but is # undocumented and does not really work quite right. cbunix|cb unix virtual terminal, OTbs, am, da, db, cols#80, lines#24, lm#0, bel=^G, clear=\EL, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EG%p2%c%p1%c, cuu1=\EA, dch1=\EM, dl1=\EN, ed=\EL, el=\EK, ich1=\EO, il1=\EP, ind=^J, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\EE, rmso=\Eb^D, rmul=\Eb^A, smso=\Ea^D, smul=\Ea^A, # (vremote: removed obsolete ":nl@:" -- esr) vremote|virtual remote terminal, am@, cols#79, use=cbunix, pty|4bsd pseudo teletype, cup=\EG%p1%{32}%+%c%p2%{32}%+%c, rmso=\Eb$, rmul=\Eb!, smso=\Ea$, smul=\Ea!, use=cbunix, #### Emacs # The codes supported by the term.el terminal emulation in GNU Emacs 19.30 eterm|gnu emacs term.el terminal emulation, am, mir, xenl, cols#80, lines#24, bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, rev=\E[7m, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smcup=\E7\E[?47h, smir=\E[4h, smso=\E[7m, smul=\E[4m, # The codes supported by the term.el terminal emulation in GNU Emacs 22.2 eterm-color|Emacs term.el terminal emulator term-protocol-version 0.96, am, mir, msgr, xenl, colors#8, cols#80, lines#24, pairs#64, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, kbs=\177, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\E[4~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec, sc=\E7, setab=\E[%p1%'('%+%dm, setaf=\E[%p1%{30}%+%dm, sgr=\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;m, sgr0=\E[m, smir=\E[4h, smso=\E[7m, smul=\E[4m, u6=\E[%i%d;%dR, u7=\E[6n, #### Screen # Entries for use by the `screen' program by Juergen Weigert, # Michael Schroeder, Oliver Laumann. The screen and # screen-w entries came with version 3.7.1. The screen2 and screen3 entries # come from University of Wisconsin and may be older. # (screen: added on ANSI model -- esr) # # 'screen' defines extensions to termcap. Some are used in its terminal # description: # G0 (bool) Terminal can deal with ISO 2022 font selection sequences. # AX (bool) Does understand ANSI set default fg/bg color # (\E[39m / \E[49m). # S0 (str) Switch charset 'G0' to the specified charset. # E0 (str) Switch charset 'G0' back to standard charset. # # Initially tested with screen 3.09.08 # # According to its manual page # # Screen is a full-screen window manager that multiplexes a physical # terminal between several processes (typically interactive shells). Each # virtual terminal provides the functions of a DEC VT100 terminal and, in # addition, several control functions from the ISO 6429 (ECMA 48, ANSI # X3.64) and ISO 2022 standards (e.g. insert/delete line and support for # multiple character sets). # # However, there is a design error in its support for video highlights. The # program uses a table (rendlist) which equates the SGR codes to terminal # capabilities. That, and color-decoding are hardcoded in screen; its behavior # is modified only by the presence or absence of the corresponding capabilities. # Not by their values. # # If screen sets the TERMCAP variable, it uses hardcoded strings which # correspond to the rendlist table. # # The table gives this information: # # SGR capability # --- --------- # 1 bold # 2 dim # 3 standout # 4 underline # 5 blink # - (unused 6) # 7 reverse # - (unused 8-21) # 22 reset bold, standout and dim # 23 reset standout # 24 reset underline # 25 reset blink # - (unused 26) # 27 reset reverse # # ECMA-48 differs from this: 3 and 23 set and reset italics, respectively. # ECMA-48 does not define "standout" - that is a termcap/terminfo abstraction. # Without some redesign of screen, it is not possible to extend the set of # capabilities. Substitution would be possible, e.g., sending italics in # place of underline. # # Because screen uses hard-coded parsing, it does not check if two capabilities # use the same value. For example, changing standout to be the same as any of # the other capabilities will confuse screen. Curses applications which use # sgr are not impacted (because that usually resets all capabilities before # setting any), but termcap applications do not use sgr -TD screen|VT 100/ANSI X3.64 virtual terminal, OTbs, OTpt, am, km, mir, msgr, xenl, G0, colors#8, cols#80, it#8, lines#24, ncv@, pairs#64, U8#1, acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=\Eg, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E)0, kbs=^H, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m, rs2=\Ec\E[?1000l\E[?25h, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[3m, smul=\E[4m, tbc=\E[3g, E0=\E(B, S0=\E(%p1%c, use=ecma+color, # The bce and status-line entries are from screen 3.9.13 (and require some # changes to .screenrc). screen-bce|VT 100/ANSI X3.64 virtual terminal with bce, bce, ech@, use=screen, screen-s|VT 100/ANSI X3.64 virtual terminal with hardstatus line, dsl=\E_\E\\, fsl=\E\\, tsl=\E_, use=screen, # ====================================================================== # Entries for GNU Screen with 16 colors. # Those variations permit to benefit from 16 colors palette, and from # bold font and blink attribute separated from bright colors. But they # are less portable than the generic "screen" 8 color entries: Their # usage makes real sense only if the terminals you attach and reattach # do all support 16 color palette. screen-16color|GNU Screen with 16 colors, use=ibm+16color, use=screen, screen-16color-s|GNU Screen with 16 colors and status line, use=ibm+16color, use=screen-s, screen-16color-bce|GNU Screen with 16 colors and BCE, use=ibm+16color, use=screen-bce, screen-16color-bce-s|GNU Screen with 16 colors using BCE and status line, bce, use=ibm+16color, use=screen-s, # ====================================================================== # Entries for GNU Screen 4.02 with --enable-colors256. screen-256color|GNU Screen with 256 colors, use=xterm+256setaf, use=screen, screen-256color-s|GNU Screen with 256 colors and status line, use=xterm+256setaf, use=screen-s, screen-256color-bce|GNU Screen with 256 colors and BCE, bce, use=xterm+256setaf, use=screen-bce, screen-256color-bce-s|GNU Screen with 256 colors using BCE and status line, bce, use=xterm+256setaf, use=screen-s, screen.xterm-256color|GNU Screen with xterm using 256 colors, use=xterm+256setaf, use=screen.xterm-new, screen.konsole-256color|GNU Screen with konsole using 256 colors, use=xterm+256setaf, use=screen.konsole, screen.vte-256color|GNU Screen with vte using 256 colors, use=xterm+256setaf, use=screen.vte, screen.putty-256color|GNU Screen with putty using 256 colors, use=xterm+256setaf, use=screen.putty, screen.mlterm-256color|GNU Screen with mlterm using 256 colors, use=xterm+256setaf, use=screen.mlterm, # ====================================================================== # Read the fine manpage: # When screen tries to figure out a terminal name for # itself, it first looks for an entry named "screen.", # where is the contents of your $TERM variable. If # no such entry exists, screen tries "screen" (or "screen-w" # if the terminal is wide (132 cols or more)). If even this # entry cannot be found, "vt100" is used as a substitute. # # Notwithstanding the manpage, screen uses its own notion of the termcap # and some keys from "screen." are ignored. Here is an entry which # covers those (tested with screen 4.00.02) -TD screen+fkeys|function-keys according to screen, kend=\E[4~, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kfnd@, khome=\E[1~, kslt@, # See explanation before "screen" entry. Cancel italics so that applications # do not assume screen supports the feature. Add this tweak to entries which # extend screen for terminals which do support italics. screen+italics|screen cannot support italics, ritm@, sitm@, # # Here are a few customized entries which are useful -TD # # Notes: # (a) screen does not support invis. # (b) screen's implementation of bw is incorrect according to tack. # (c) screen appears to hardcode the strings for khome/kend, making it # necessary to override the "use=" clause's values (screen+fkeys). # (d) screen sets $TERMCAP to a termcap-formatted copy of the 'screen' entry, # which is NOT the same as the terminfo screen.. # (e) when screen finds one of these customized entries, it sets $TERM to # match. Hence, no "screen.xterm" entry is provided, since that would # create heartburn for people running remote xterm's. # # xterm (-xfree86 or -r6) does not normally support kIC, kNXT and kPRV # since the default translations override the built-in keycode # translation. They are suppressed here to show what is tested by tack. screen.xterm-xfree86|screen.xterm-new|screen customized for modern xterm, bce@, bw, invis@, kIC@, kNXT@, kPRV@, meml@, memu@, sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;m, E3@, use=screen+italics, use=screen+fkeys, use=xterm-new, #:screen.xterm|screen for modern xterm, #: use=screen.xterm-new, # xterm-r6 does not really support khome/kend unless it is propped up by # the translations resource. screen.xterm-r6|screen customized for X11R6 xterm, bw, use=screen+fkeys, use=xterm-r6, # Color applications running in screen and TeraTerm do not play well together # on Solaris because Sun's curses implementation gets confused. screen.teraterm|disable ncv in teraterm, ncv#127, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, use=screen+fkeys, use=screen, # Other terminals screen.rxvt|screen in rxvt, bw, XT, cvvis@, flash@, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, use=screen+fkeys, use=vt100+enq, use=rxvt+pcfkeys, use=vt220+keypad, use=screen, screen.Eterm|screen in Eterm, use=screen+fkeys, use=Eterm, screen.mrxvt|screen in mrxvt, use=screen+fkeys, use=mrxvt, screen.vte|screen in any VTE-based terminal, use=screen+italics, use=screen+fkeys, use=vte, screen.gnome|screen in GNOME Terminal, use=screen+italics, use=screen+fkeys, use=gnome, screen.konsole|screen in KDE console window, use=screen+italics, use=screen+fkeys, use=konsole, # fix the backspace key screen.linux|screen in linux console, bw, kbs=\177, kcbt@, use=screen+fkeys, use=screen, screen.mlterm|screen in mlterm, use=screen+fkeys, use=mlterm, screen.putty|screen in putty, use=screen+fkeys, use=putty, # The default "screen" entry is reasonably portable, but not optimal for the # most widely-used terminal emulators. The "bce" capability is supported in # screen since 3.9.13, and when used, will require fewer characters to be sent # to the terminal for updates. # # If you are using only terminals which support bce, then you can use this # feature in your screen configuration. # # Adding these lines to your ".screenrc" file will allow using these customized # entries: # term screen-bce # bce on # defbce on screen-bce.xterm-new|screen optimized for modern xterm, bce, ech@, use=screen+italics, use=screen.xterm-new, screen-bce.rxvt|screen optimized for rxvt, bce, ech@, use=screen.rxvt, screen-bce.Eterm|screen optimized for Eterm, bce, ech@, use=screen.Eterm, screen-bce.mrxvt|screen optimized for mrxvt, bce, ech@, use=screen.mrxvt, screen-bce.gnome|screen optimized for GNOME-Terminal, bce, ech@, use=screen+italics, use=screen.gnome, screen-bce.konsole|screen optimized for KDE console window, bce, ech@, use=screen+italics, use=screen.konsole, screen-bce.linux|screen optimized for linux console, bce, ech@, use=screen.linux, screen-w|VT 100/ANSI X3.64 virtual terminal with 132 cols, cols#132, use=screen, screen2|old VT 100/ANSI X3.64 virtual terminal, cols#80, it#8, lines#24, cbt=\E[Z, clear=\E[2J\E[H, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=, il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=\E~, kf1=\ES, kf2=\ET, kf3=\EU, kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, kf9=\E0I, khome=\EH, nel=^M^J, rc=\E8, ri=\EM, rmir=\E[4l, rmso=\E[23m, rmul=\E[24m, rs1=\Ec, sc=\E7, sgr0=\E[m, smir=\E[4h, smso=\E[3m, smul=\E[4m, tbc=\E[3g, # (screen3: removed unknown ":xv:LP:G0:" -- esr) screen3|older VT 100/ANSI X3.64 virtual terminal, km, mir, msgr, cols#80, it#8, lines#24, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E)0, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmir=\E[4l, rmkx=\E>, rmso=\E[23m, rmul=\E[24m, rs1=\Ec, sc=\E7, sgr0=\E[m, smir=\E[4h, smkx=\E=, smso=\E[3m, smul=\E[4m, tbc=\E[3g, # tmux is compatible with screen, but has support for italics, and some of the # xterm cursor bits. tmux|tmux terminal multiplexer, ritm=\E[23m, rmso=\E[27m, sitm=\E[3m, smso=\E[7m, Ms@, use=xterm+sl, use=xterm+tmux, use=screen, tmux-256color|tmux with 256 colors, use=xterm+256setaf, use=tmux, #### NCSA Telnet # Francesco Potorti : # NCSA telnet is one of the most used telnet clients for the Macintosh. It has # been maintained until recently by the National Center for Supercomputer # Applications, and it is feature rich, stable and free. It can be downloaded # from www.ncsa.edu. This terminfo description file is based on xterm-vt220, # xterm+sl, and the docs at NCSA. It works well. # # NCSA Telnet 2.6 for Macintosh in vt220 8-bit emulation mode # The terminal options should be set as follows: # Xterm sequences ON # use VT wrap mode ON # use Emacs arrow keys OFF # CTRL-COMND is Emacs meta ON # 8 bit mode ON # answerback string: "ncsa-vt220-8" # setup keys: all disabled # # Application mode is not used. # # Other special mappings: # Apple VT220 # HELP Find # HOME Insert here # PAGEUP Remove # DEL Select # END Prev Screen # PAGEDOWN Next Screen # # Though it supports ANSI color, NCSA Telnet uses color to represent blinking # text. # # The status-line manipulation is a mapping of the xterm-compatible control # sequences for setting the window-title. So you must use tsl and fsl in # pairs, since the latter ends the string that is loaded to the window-title. ncsa-m|ncsa-vt220-8|NCSA Telnet 2.6 for Macintosh in vt220-8 mode, am, km, mir, msgr, xenl, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0, flash=\E[?5h\E[?5l, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, if=/usr/share/tabset/vt100, il=\E[%p1%dL, il1=\E[L, ind=\n$<150*>, is2=\E7\E[r\E[m\E[?7h\E[?1;4;6l\E[4l\E8\E>, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[4~, kend=\E[5~, kf1=\E[17~, kf10=\E[28~, kf11=\E[29~, kf12=\E[31~, kf13=\E[32~, kf14=\E[33~, kf15=\E[34~, kf2=\E[18, kf3=\E[19~, kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~, kf9=\E[26~, khlp=\E[1~, khome=\E[2~, knp=\E[6~, kpp=\E[3~, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, rf=/usr/share/tabset/vt100, ri=\EM, rmacs=\E(B, rmam=\E[?7l, rmcup=\E[2J\E8, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;4;6l\E[4l\E>, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;, sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smcup=\E7, smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, u8=\E[?62;1;6c, use=xterm+sl, use=ansi+enq, ncsa|NCSA Telnet 2.7 for Macintosh in vt220-8 mode, use=ncsa-m, use=klone+color, ncsa-ns|NCSA Telnet 2.7 for Macintosh in vt220-8 mode, hs@, dsl@, fsl@, tsl@, use=ncsa, ncsa-m-ns|NCSA Telnet 2.6 for Macintosh in vt220-8 mode, hs@, dsl@, fsl@, tsl@, use=ncsa-m, # alternate -TD: # The documented function-key mapping refers to the Apple Extended Keyboard # (e.g., NCSA Telnet's F1 corresponds to a VT220 F6). We use the VT220-style # codes, however, since the numeric keypad (VT100) PF1-PF4 are available on # some keyboards and many applications require these as F1-F4. # ncsa-vt220|NCSA Telnet using vt220-compatible function keys, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, use=ncsa, #### Pilot Pro Palm-Top # # Termcap for Top Gun Telnet and SSH on the Palm Pilot. # https://web.archive.org/web/20051103015726/http://www.ai/~iang/TGssh/ pilot|tgtelnet|Top Gun Telnet on the Palm Pilot Professional, OTbs, am, xenl, cols#39, lines#16, bel=^G, clear=\Ec, cr=^M, cub1=^H, cud1=^J, cup=\Em%p1%{32}%+%c%p2%{32}%+%c, home=\Em\s\s, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, knp=^L, kpp=^K, nel=\Em~\s, rmso=\EB, smso=\Eb, # From: Federico Bianchi # These entries are for the Embeddable Linux Kernel System (ELKS) # project - an heavily stripped down Linux to be run on 16 bit # boxes or, eventually, to be used in embedded systems - and have been # adapted from the stock ELKS termcap. The project itself looks stalled, # and the latest improvements I know of date back to March 2000. # # To cope with the ELKS dumb console I added an "elks-glasstty" entry; # as an added bonus, this deals with all the capabilities common to # both VT52 and ANSI (or, eventually, "special") modes. elks-glasstty|ELKS glass-TTY capabilities, OTbs, am, cols#80, it#8, lines#25, bel=^G, cr=^M, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, elks-vt52|ELKS vt52 console, clear=\EH\EJ, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, el=\EK, home=\EH, use=elks-glasstty, elks-ansi|ELKS ANSI console, clear=\E[H\E[2J, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H, rmso=\E[m, smso=\E[7m, use=elks-glasstty, # As a matter of fact, ELKS 0.0.83 on PCs defaults to ANSI emulation # instead of VT52, but the "elks" entry still refers to the latter. elks|default ELKS console, use=elks-vt52, # Project SIBO (for Psion 3 palmtops) console is identical to the ELKS # one but in screen size sibo|ELKS SIBO console, cols#61, it#8, lines#20, use=elks-vt52, ######## COMMERCIAL WORKSTATION CONSOLES # #### Alpha consoles # # This is from the OSF/1 Release 1.0 termcap file pccons|pcconsole|ANSI (mostly) Alpha PC console terminal emulation, am, xon, cols#80, lines#25, bel=^G, clear=\E[H\E[2J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, el=\E[K, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, nel=^M^J, rev=\E[7m, rmso=\E[m, sgr0=\E[m, smso=\E[7m, #### Sun consoles # # :is1: resets scrolling region in case a previous user had used "tset vt100" oldsun|Sun Microsystems Workstation console, OTbs, am, km, mir, msgr, cols#80, it#8, lines#34, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, is1=\E[1r, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, rmso=\E[m, sgr0=\E[m, smso=\E[7m, # From: Alexander Lukyanov , 14 Nov 1995 # capability later corrected by J.T. Conklin # SGR 1, 4 aren't supported - removed bold/underline (T.Dickey 17 Jan 1998) sun-il|Sun Microsystems console with working insert-line, am, km, msgr, cols#80, lines#34, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, kb2=\E[218z, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kend=\E[220z, kf1=\E[224z, kf10=\E[233z, kf11=\E[234z, kf12=\E[235z, kf2=\E[225z, kf3=\E[226z, kf4=\E[227z, kf5=\E[228z, kf6=\E[229z, kf7=\E[230z, kf8=\E[231z, kf9=\E[232z, khome=\E[214z, kich1=\E[247z, knp=\E[222z, kopt=\E[194z, kpp=\E[216z, kres=\E[193z, kund=\E[195z, rev=\E[7m, rmso=\E[m, rmul@, rs2=\E[s, sgr=\E[0%?%p1%p3%|%t;7%;m, sgr0=\E[m, smso=\E[7m, u8=\E[1t, u9=\E[11t, # On some versions of CGSIX framebuffer firmware (SparcStation 5), / # flake out on the last line. Unfortunately, without them the terminal has no # way to scroll. sun-cgsix|sun-ss5|Sun SparcStation 5 console, il@, il1@, use=sun-il, # If you are using an SS5, change the sun definition to use sun-ss5. sun|sun1|sun2|Sun Microsystems Inc. workstation console, use=sun-il, sun+sl|Sun Workstation window status line, hs, dsl=\E]l\E\\, fsl=\E\\, tsl=\E]l, # From: Tue Sep 24 13:14:44 1985 sun-s|Sun Microsystems Workstation window with status line, hs, dsl=\E]l\E\\, fsl=\E\\, tsl=\E]l, use=sun, sun-e-s|sun-s-e|Sun Microsystems Workstation with status hacked for emacs, hs, dsl=\E]l\E\\, fsl=\E\\, tsl=\E]l, use=sun-e, sun-48|Sun 48-line window, cols#80, lines#48, use=sun, sun-34|Sun 34-line window, cols#80, lines#34, use=sun, sun-24|Sun 24-line window, cols#80, lines#24, use=sun, sun-17|Sun 17-line window, cols#80, lines#17, use=sun, sun-12|Sun 12-line window, cols#80, lines#12, use=sun, sun-1|Sun 1-line window for sysline, eslok, hs, cols#80, lines#1, dsl=^L, fsl=\E[K, tsl=^M, use=sun, sun-e|sun-nic|sune|Sun Microsystems Workstation without insert character, ich1@, rmir@, smir@, use=sun, sun-c|sun-cmd|Sun Microsystems Workstation console with scrollable history, lines#35, rmcup=\E[>4h, smcup=\E[>4l, use=sun, sun-type4|Sun Workstation console with type 4 keyboard, kcub1=\E[217z, kcud1=\E[221z, kcuf1=\E[219z, kcuu1=\E[215z, use=sun-il, # Most of the current references to sun-color are from users wondering why this # is the default on install. Details from reading the wscons manpage, adding # cub, etc., here (rather than in the base sun-il entry) since it is not clear # when those were added -TD (2005-05-28) # # According to wscons manpage, color is supported only on IA systems. # Sun's terminfo entry documents bold and smul/rmul capabilities, but wscons # does not list these. It also sets ncv#3, however that corresponds to # underline and standout. # # Since the documentation and terminfo do not agree, see also current code at # https://web.archive.org/web/20091231042744/http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/io/tem_safe.c # # That (actually a different driver which "supports" sun-color) also supports # these features: # vpa=\E[%i%p1%dd # hpa=\E[%i%p1%d` # cbt=\E[Z # dim=\E[2m # blink=\E[5m # It supports bold, but not underline -TD (2009-09-19) sun-color|Sun Microsystems Workstation console with color support (IA systems), colors#8, ncv#3, pairs#64, bold=\E[1m, cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC, cuu=\E[%p1%dA, home=\E[H, op=\E[0m, rs2=\E[s, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, sgr=\E[0%?%p6%t;1%;%?%p1%p3%|%t;7%;m, sgr0=\E[m, smso=\E[7m, use=sun, #### Iris consoles # # (wsiris: this had extension capabilities # :HS=\E7F2:HE=\E7F7:\ # :CT#2:CZ=*Bblack,red,green,yellow,blue,magenta,cyan,*Fwhite: # See the note on Iris extensions near the end of this file. # Finally, removed suboptimal =\EH\EJ and added & # from BRL -- esr) wsiris|iris40|iris emulating a 40 line visual 50 (approximately), OTbs, OTnc, OTpt, am, OTkn#3, cols#80, it#8, lines#40, OTnl=\EB, bel=^G, clear=\Ev, cnorm=\E>, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\E;, dim=\E7F2, dl1=\EM, ed=\EJ, el=\EK, flash=\E7F4\E7B1\013\E7F7\E7B0, home=\EH, ht=^I, il1=\EL, ind=^J, is2=\E7B0\E7F7\E7C2\E7R3, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=\E0, kf1=\E1, kf2=\E2, kf3=\E3, kf4=\E4, kf5=\E5, kf6=\E6, kf7=\E7, kf8=\E8, kf9=\E9, ri=\EI, rmso=\E0@, rmul=\E7R3\E0@, sgr0=\E7F7, smso=\E9P, smul=\E7R2\E9P, #### NeWS consoles # # Console terminal windows under the NeWS (Sun's Display Postscript windowing # environment). Note: these have nothing to do with Sony's News workstation # line. # # Entry for NeWS's psterm from Eric Messick & Hugh Daniel # (psterm: unknown ":sl=\EOl:el=\ENl:" removed -- esr) psterm|psterm-basic|NeWS psterm-80x34, OTbs, am, hs, km, ul, cols#80, it#8, lines#34, blink=\EOb, bold=\EOd, clear=^L, csr=\EE%p1%d;%p2%d;, cub1=\ET, cud1=\EP, cuf1=\EV, cup=\E%p1%d;%p2%d;, cuu1=\EY, dch1=\EF, dl1=\EK, ed=\EB, el=\EC, flash=\EZ, fsl=\ENl, home=\ER, ht=^I, il1=\EA, ind=\EW, is1=\EN*, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, ll=\EU, rc=^\, rev=\EOr, ri=\EX, rmcup=\ENt, rmir=\ENi, rmso=\ENo, rmul=\ENu, sc=^], sgr0=\EN*, smcup=\EOt, smir=\EOi, smso=\EOo, smul=\EOu, tsl=\EOl, psterm-96x48|NeWS psterm 96x48, cols#96, lines#48, use=psterm, psterm-90x28|NeWS psterm 90x28, cols#90, lines#28, use=psterm, psterm-80x24|NeWS psterm 80x24, cols#80, lines#24, use=psterm, # This is a faster termcap for psterm. Warning: if you use this termcap, # some control characters you type will do strange things to the screen. # (psterm-fast: unknown ":sl=^Ol:el=^Nl:" -- esr) psterm-fast|NeWS psterm fast version (flaky ctrl chars), OTbs, am, hs, km, ul, cols#80, it#8, lines#34, blink=^Ob, bold=^Od, clear=^L, csr=\005%p1%d;%p2%d;, cub1=^T, cud1=^P, cuf1=^V, cup=\004%p1%d;%p2%d;, cuu1=^Y, dch1=^F, dl1=^K, ed=^B, el=^C, flash=^Z, fsl=^Nl, home=^R, ht=^I, il1=^A, ind=^W, is1=^N*, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, ll=^U, rc=^\, rev=^Or, ri=^X, rmcup=^Nt, rmir=^Ni, rmso=^No, rmul=^Nu, sc=^], sgr0=^N*, smcup=^Ot, smir=^Oi, smso=^Oo, smul=^Ou, tsl=^Ol, #### NeXT consoles # # Use `glasstty' for the Workspace application # # From: Dave Wetzel 22 Dec 1995 next|NeXT console, am, xt, cols#80, it#8, lines#24, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, rmso=\E[4;1m, sgr0=\E[m, smso=\E[4;2m, nextshell|NeXT Shell application, am, cols#80, bel=^G, cr=^M, cub1=^H, cud1=^J, ht=^I, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, #### Sony NEWS workstations # # (news-unk: this had :KB=news: -- esr) news-unk|SONY NEWS vt100 emulator common entry, OTbs, OTpt, am, xenl, cols#80, OTnl=^J, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, if=/usr/share/tabset/vt100, il=\E[%p1%dL, il1=\E[L, is2=\E[?7h\E[?1h\E[?3l\E7\E8, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOY, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, rc=\E8, rev=\E[7m, ri=\EM, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[r, sc=\E7, sgr0=\E[m, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, # # (news-29: this had :TY=ascii: --esr) news-29, lines#29, use=news-unk, # (news-29-euc: this had :TY=euc: --esr) news-29-euc, use=news-29, # (news-29-sjis: this had :TY=sjis: --esr) news-29-sjis, use=news-29, # # (news-33: this had :TY=ascii: --esr) news-33, lines#33, use=news-unk, # (news-33-euc: this had :TY=euc: --esr) news-33-euc, use=news-33, # (news-33-sjis: this had :TY=sjis: --esr) news-33-sjis, use=news-33, # # (news-42: this had :TY=ascii: --esr) news-42, lines#42, use=news-unk, # (news-42-euc: this had :TY=euc: --esr) news-42-euc, use=news-42, # (news-42-sjis: this had :TY=sjis: --esr) news-42-sjis, use=news-42, # # NEWS-OS old termcap entry # # (news-old-unk: this had :KB=news:TY=sjis: --esr) news-old-unk|SONY NEWS vt100 emulator common entry, OTbs, OTpt, am, xenl, cols#80, vt#3, OTnl=^J, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[;H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K, home=\E[H, ht=^I, if=/usr/share/tabset/vt100, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rc=\E8, rev=\E[7m, ri=\EM, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr0=\E[m, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, # # (nwp512: this had :DE=^H:, which I think means --esr) nwp512|news|nwp514|news40|vt100-bm|old sony vt100 emulator 40 lines, OTbs, lines#40, is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;40r\E8, use=news-old-unk, # # (nwp512-a: this had :TY=ascii: and the alias vt100-bm --esr) nwp512-a|nwp514-a|news-a|news42|news40-a|sony vt100 emulator 42 line, lines#42, is2=\E[?7h\E[?1l\E[?3l\E7\E[1;42r\E8, use=news-old-unk, # # (nwp-512-o: this had :KB=nwp410:DE=^H: I interpret the latter as . --esr) nwp512-o|nwp514-o|news-o|news40-o|vt100-bm-o|sony vt100 emulator 40 lines, OTbs, lines#40, is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;40r\E8, use=news-old-unk, # # (nwp513: this had :DE=^H: and the alias vt100-bm --esr) nwp513|nwp518|nwe501|newscbm|news31|sony vt100 emulator 33 lines, OTbs, lines#31, is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;31r\E8, use=news-old-unk, # # (nwp513-a: this had :TY=ascii: and :DE=^H:, which I interpret as ; --esr) # also the alias vt100-bm. nwp513-a|nwp518-a|nwe501-a|nwp251-a|newscbm-a|news31-a|newscbm33|news33|old sony vt100 emulator 33 lines, OTbs, lines#33, is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;33r\E8, use=news-old-unk, # # (nwp513-o: had :DE=^H:, I think that's ; also the alias vt100-bm --esr) nwp513-o|nwp518-o|nwe501-o|nwp251-o|newscbm-o|news31-o|old sony vt100 emulator 33 lines, OTbs, lines#31, is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;31r\E8, use=news-old-unk, # # (news28: this had :DE=^H:, I think that's , and :KB=nws1200: --esr) news28|sony vt100 emulator 28 lines, OTbs, lines#28, is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;28r\E8, use=news-old-unk, # # (news29: this had :TY=ascii:KB=nws1200:\ --esr) news29|news28-a|sony vt100 emulator 29 lines, lines#29, is2=\E7\E[r\E8\EE\EE\EE\EM\EM\EM\E[?7h\E[?1l\E[?3l\E7\E[1;29r\E8, use=news-old-unk, # # (news511: this had :TY=sjis: --esr) nwp511|nwp-511|nwp-511 vt100, OTbs, OTpt, am, xenl, cols#80, lines#24, clear=\E[;H\E[2J$<20/>, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A$<2/>, dl1=\E[M, ed=\E[J$<30/>, el=\E[K$<3/>, flash=\E[?5h\0\0\0\0\0\0\0\0\0\0\0\0\0\E[?5l, il1=\E[L, is2=\E[?5l\E[?1l\E>\E[?7h\E[?8h, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\E#W, khome=\E[H, ri=\EM$<5/>, rmso=\E[m$<2/>, rmul=\E[m$<2/>, rs2=\E7\E[r\E8\E[?5l\E[?1l\E>\E[?7h\E[?8h, smso=\E[7m$<2/>, smul=\E[4m$<2/>, # (news517: this had :TY=sjis:. --esr) nwp517|nwp-517|nwp-517 vt200 80 cols 30 rows, eslok, hs, cols#80, lines#30, OTi2=\E[2$~\n, dsl=\E[1$~, fsl=\E[0$}, is2=\E7\E[r\E8\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, tsl=\E[1$}\E[;%df, use=vt200, # (news517-w: this had :TY=sjis:. --esr) nwp517-w|nwp-517-w|nwp-517 vt200 132 cols 50 rows, eslok, hs, cols#132, lines#50, OTi2=\E[2$~\n, dsl=\E[1$~, fsl=\E[0$}, is2=\E7\E[r\E8\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h, rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h, tsl=\E[1$}\E[;%df, use=vt200, #### Common Desktop Environment # # This ships with Sun's CDE in Solaris 2.5 # Corrected Sun Aug 9 1998 by Alexander V. Lukyanov dtterm|CDE desktop terminal, am, mir, msgr, xenl, xon, cols#80, it#8, lines#24, lm#0, ncv@, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=\E[?5h$<200>\E[?5l, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, invis=\E[8m, is2=\E F\E>\E[?1l\E[?7h\E[?45l, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmso=\E[22;27m, rmul=\E[24m, sc=\E7, sgr=\E[0%?%p1%t;2;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h, smso=\E[2;7m, smul=\E[4m, tbc=\E[3g, use=ecma+color, ######## Non-Unix Consoles # #### EMX termcap.dat compatibility modes # # Also (possibly only EMX, so we don't put it in ansi.sys, etc): set the # no_color_video to inform the application that standout(1), underline(2) # reverse(4) and invisible(64) don't work with color. emx-base|DOS special keys, bce, bw, it#8, ncv#71, bel=^G, use=ansi.sys, # Except for the "-emx" suffixes, these are as distributed with EMX 0.9b, # a Unix-style environment used on OS/2. (Note that the suffix makes some # names longer than 14 characters, the nominal maximum). # # Removed: rmacs=\E[10m, smacs=\E[11m, because OS/2 does not implement acs. ansi-emx|ANSI.SYS color, am, bce, eo, mir, msgr, xon, colors#8, cols#80, it#8, lines#25, pairs#64, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[1;33;44m\E[H\E[J, cnorm=\E[?25h, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dp, ed=\E[J, el=\E[K, flash=\E[?5h\E[?5l, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, ind=^J, kb2=\E[G, kbs=^H, kf0=\0D, kll=\0O, kspd=^Z, nel=^M^J, rev=\E[5;37;41m, rmir=\E[4l, rmpch=\E[10m, rmso=\E[0;44m\E[1;33m, rmul=\E[0;44m\E[1;33m, rs1=\Ec, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[0m\E[1;33;44m, smir=\E[4h, smpch=\E[11m, smso=\E[0;31;47m, smul=\E[1;31;44m, tbc=\E[3g, u8=\E[?6c, u9=\E[c, use=emx-base, # nice colors for Emacs (white on blue, mode line white on cyan) ansi-color-2-emx|ANSI.SYS color 2, clear=\E[0;37;44m\E[H\E[J, rev=\E[1;37;46m, rmso=\E[0;37;44m, rmul=\E[0;37;44m, rs1=\Ec, setaf=\E[3%p1%dm, sgr0=\E[0;37;44m, smso=\E[1;37;46m, smul=\E[1;36;44m, use=ansi-emx, # nice colors for Emacs (white on black, mode line black on cyan) ansi-color-3-emx|ANSI.SYS color 3, clear=\E[0;37;40m\E[H\E[J, rev=\E[1;37;46m, rmso=\E[0;37;40m, rmul=\E[0;37;40m, rs1=\Ec, setaf=\E[3%p1%dm, sgr0=\E[0;10m, smso=\E[1;37;46m, smul=\E[0;36;40m, use=ansi-emx, mono-emx|stupid monochrome ansi terminal with only one kind of emphasis, am, cols#80, it#8, lines#24, clear=\E[H\E[2J$<50>, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H, ht=^I, kb2=\E[G, kbs=^H, kcub1=\0K, kcud1=\0P, kcuf1=\0M, kcuu1=\0H, kf0=\0D, kf1=\0;, kf2=\0<, kf3=\0=, kf4=\0>, kf5=\0?, kf6=\0@, kf7=\0A, kf8=\0B, kf9=\0C, khome=\0G, kich1=\0R, kll=\0O, knp=\0Q, kpp=\0I, nel=^M^J, rev=\E[7m, sgr0=\E[0m, #### Cygwin # Use this for cygwin32 (tested with beta 19.1) # underline is colored bright magenta # shifted kf1-kf12 are kf11-kf22 cygwinB19|ansi emulation for cygwin32, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, rmam@, smam@, use=ansi.sys, # Use this for cygwin (tested with version 1.1.0). # I've combined pcansi and linux. Some values of course were different and # I've indicated which of these were and which I used. # Cheers, earnie_boyd@yahoo.com # several changes based on running with tack and comparing with older entry -TD # more changes from csw: # add cbt [backtab] # remove eo [erase overstrike with blank] # change clear was \E[H\E[J now \E[2J (faster?) # remove cols # remove lines # remove ncv#3 [colors collide with highlights, bitmask] not applicable # to MSDOS box? # add cub [cursor back param] # add cuf [cursor forward param] # add cuu [cursor up param] # add cud [cursor down param] # add hs [has status line] # add fsl [return from status line] # add tsl [go to status line] # add smacs [Start alt charset] (not sure if this works) # add rmacs [End alt charset] (ditto) # add smcup [enter_ca_mode] (save console; thanks Corinna) # add rmcup [exit_ca_mode] (restore console; thanks Corinna) # add kb2 [center of keypad] # add u8 [user string 8] \E[?6c # add el [clear to end of line] \E[K # Notes: # cnorm [make cursor normal] not implemented # flash [flash] not implemented # blink [blink] not implemented very usefully in cygwin? \E[5m # dim [dim] not implemented very usefully in cygwin? \E[2m # cub1 [cursor back 1] typically \E[D, but ^H is faster? # kNXT [shifted next key] not implemented # kPRV [shifted prev key] not implemented # khome [home key] really is \E[1~ NOT \E[H # tbc [clear tab stops] not implemented # xenl [newline ignnored after 80 cols] messes up last line? Ehud Karni # smpch [Start PC charset] is \E[11m, same as smacs # rmpch [End PC charset] is \E[10m, same as rmacs # mir [move in insert mode] fails in tack? # bce [back color erase] causes problems with change background color? # cvvis [make cursor very visible] causes a stackdump when testing with # testcurs using the output option? \E[?25h\E[?8c # civis [make cursor invisible] causes everything to stackdump? \E[?25l\E[?1c # ech [erase characters param] broken \E[%p1%dX # kcbt [back-tab key] not implemented in cygwin? \E[Z # # 2005/11/12 -TD # Remove cbt since it does not work in current cygwin # Add 'mir' and 'in' flags based on tack cygwin|ansi emulation for Cygwin, am, hs, mir, msgr, xon, colors#8, it#8, pairs#64, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, fsl=^G, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, kb2=\E[G, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E[10m, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmpch=\E[10m, rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E]R, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m, sgr0=\E[0;10m, smacs=\E[11m, smcup=\E7\E[?47h, smir=\E[4h, smpch=\E[11m, smso=\E[7m, smul=\E[4m, tsl=\E];, vpa=\E[%i%p1%dd, use=vt102+enq, # I've supplied this so that you can help test new values and add other # features. Cheers, earnie_boyd@yahoo.com. # # Some features are from pcansi. The op value is from linux. Function-keys # are from linux. These have been tested not to cause problems. xenl was in # this list, but DOES cause problems so it has been removed cygwinDBG|Debug Version for Cygwin, am, eo, mir, msgr, xon, colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cnorm=\E[?25h, cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h\E[?5l$<200/>, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, kNXT=\E[6$, kPRV=\E[5$, kb2=\E[G, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E[10m, rmir=\E[4l, rmso=\E[m, rmul=\E[m, rs1=\Ec\E]R, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;12%;m, sgr0=\E[0;10m, smacs=\E[11m, smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, use=vt102+enq, #### DJGPP # Key definitions: # The encodings for unshifted arrow keys, F1-F12, Home, Insert, etc. match the # encodings used by other x86 environments. All others are invented for DJGPP. # Oddly enough, while several combinations of modifiers are tabulated, there is # none for shifted cursor keys. # # F1 \E[[A # F2 \E[[B # F3 \E[[C # F4 \E[[D # F5 \E[[E # F6 \E[17~ # F7 \E[18~ # F8 \E[19~ # F9 \E[20~ # F10 \E[21~ # F11 \E[23~ # F12 \E[24~ # # Delete \E[3~ # Down Arrow \E[B # End \E[4~ # Home \E[1~ # Insert \E[2~ # Left Arrow \E[D # Page Down \E[6~ # Page Up \E[5~ # Right Arrow \E[C # Up Arrow \E[A # # Shift-F1 \E[25~ # Shift-F2 \E[26~ # Shift-F3 \E[27~ # Shift-F4 \E[28~ # Shift-F5 \E[29~ # Shift-F6 \E[30~ # Shift-F7 \E[31~ # Shift-F8 \E[32~ # Shift-F9 \E[33~ # Shift-F10 \E[34~ # Shift-F11 \E[35~ # Shift-F12 \E[36~ # # Ctrl-F1 \E[47~ # Ctrl-F2 \E[48~ # Ctrl-F3 \E[49~ # Ctrl-F4 \E[50~ # Ctrl-F5 \E[51~ # Ctrl-F6 \E[52~ # Ctrl-F7 \E[53~ # Ctrl-F8 \E[54~ # Ctrl-F9 \E[55~ # Ctrl-F10 \E[56~ # Ctrl-F11 \E[57~ # Ctrl-F12 \E[58~ # # Ctrl-Delete \E[43~ # Ctrl-Down Arrow \E[38~ # Ctrl-End \E[44~ # Ctrl-Home \E[41~ # Ctrl-Insert \E[42~ # Ctrl-Left Arrow \E[39~ # Ctrl-Page Down \E[46~ # Ctrl-Page Up \E[45~ # Ctrl-Right Arrow \E[40~ # Ctrl-Up Arrow \E[37~ # # Alt-F1 \E[59~ # Alt-F2 \E[60~ # Alt-F3 \E[61~ # Alt-F4 \E[62~ # Alt-F5 \E[63~ # Alt-F6 \E[64~ # Alt-F7 \E[65~ # Alt-F8 \E[66~ # Alt-F9 \E[67~ # Alt-F10 \E[68~ # Alt-F11 \E[79~ # Alt-F12 \E[80~ # # Alt-Delete \E[65~ # Alt-Down Arrow \E[60~ # Alt-End \E[66~ # Alt-Home \E[41~ # Alt-Insert \E[64~ # Alt-Left Arrow \E[61~ # Alt-Page Down \E[68~ # Alt-Page Up \E[67~ # Alt-Right Arrow \E[62~ # Alt-Up Arrow \E[59~ # # Also: # Alt-A \E[82~ # Alt-B \E[82~ # Alt-C \E[83~ # Alt-D \E[84~ # Alt-E \E[85~ # Alt-F \E[86~ # Alt-G \E[87~ # Alt-H \E[88~ # Alt-I \E[89~ # Alt-J \E[90~ # Alt-K \E[91~ # Alt-L \E[92~ # Alt-M \E[93~ # Alt-N \E[94~ # Alt-O \E[95~ # Alt-P \E[96~ # Alt-Q \E[97~ # Alt-R \E[98~ # Alt-S \E[99~ # Alt-T \E[100~ # Alt-U \E[101~ # Alt-V \E[102~ # Alt-W \E[103~ # Alt-X \E[104~ # Alt-Y \E[105~ # Alt-Z \E[106~ djgpp|ansi emulation for DJGPP alpha, am, bce, msgr, xhp, xon, xt, colors#8, it#8, pairs#64, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[1v, clear=\E[H\E[J, cnorm=\E[v, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[2v, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, invis=\E[8m, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, nel=^M^J, op=\E[37;40m, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmso=\E[m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr=\E[0%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%e;25%;%?%p6%t;1%;%?%p7%t;8%;m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, vpa=\E[%i%p1%dd, djgpp203|Entry for DJGPP 2.03, OTbs, am, cols#80, it#8, lines#25, bel=^G, cr=^M, cub1=^H, cud1=^J, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, djgpp204|Entry for DJGPP 2.04, OTbs, am, AX, colors#8, cols#80, it#8, lines#25, ncv#3, pairs#64, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[1v, clear=\E[H\E[2J, cnorm=\E[v, cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[2v, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, invis=\E[8m, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf0=\E[21~, kf1=\E[[A, kf10=\E[21~, kf2=\E[[B, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kll=\E[4~, knp=\E[6~, kpp=\E[5~, nel=^M^J, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmso=\E[m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[m, smso=\E[7m, smul=\E[4m, #### U/Win # This is tested using U/Win's telnet. Scrolling is omitted because it is # buggy. Another odd bug appears when displaying "~" in alternate character # set (the emulator spits out error messages). Compare with att6386 -TD uwin|U/Win 3.2 console, am, eo, in, msgr, xenl, xon, colors#8, it#8, ncv#58, pairs#64, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kend=\E[Y, kf1=\EOP, kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, khome=\E[H, kich1=\E[@, nel=^M^J, op=\E[39;49m, rc=\E8, rev=\E[7m, rmacs=\E[10m, rmir=\E[4l, rmpch=\E[10m, rmso=\E[27m, rmul=\E[m, rs1=\Ec\E]R, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[0;10m, smacs=\E[11m, smir=\E[4h, smpch=\E[11m, smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n, #### Microsoft (miscellaneous) # This entry fits the Windows NT console when the _POSIX_TERM environment # variable is set to 'on'. While the Windows NT POSIX console is seldom used, # the Telnet client supplied with both the Windows for WorkGroup 3.11 TCP/IP # stack and the Win32 (i.e., Windows 95 and Windows NT 3.1 or later) operating # systems is not, and (surprise!) they match very well. # # See: MS Knowledge Base item Q108581, dated 13-MAY-1997, titled "Setting Up # VI POSIX Editor for Windows NT 3.1". True to Microsoft form, not only # are the installation instructions a pile of mind-numbing bureaucratese, # but the termcap entry is actually broken and unusable as given; the :do: # capability is misspelled "d". # # To use this, you need to a bunch of environment variables: # # SET _POSIX_TERM=on # SET TERM=ansi # SET TERMCAP=location of termcap file in POSIX file format # which is case-sensitive. # e.g. SET TERMCAP=//D/RESKIT35/posix/termcap # SET TMP=//C/TEMP # # Important note: setting the TMP environment variable in POSIX style renders # it incompatible with a lot of other applications, including Visual C++. So # you should have a separate command window just for vi. All the other # variables may be permanently set in the Control Panel\System applet. # # You can find out more about the restrictions of this facility at # . # # From: Federico Bianchi , 15 Jan 1997 ansi-nt|psx_ansi|Microsoft Windows NT console POSIX ANSI mode, am, bw, msgr, cols#80, it#8, lines#25, bel=^G, clear=\E[2J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ind=\E[S, kbs=^H, kcub1=\E[D, kcud1=\E[V, kcuf1=\E[C, kcuu1=\E[A, nel=\r\E[S, rc=\E[u, rev=\E[7m, ri=\E[T, rmso=\E[m, sc=\E[s, sgr0=\E[0m, smso=\E[7m, # From: jew@venus.sunquest.com # Date: 19 Feb 93 23:41:07 GMT # Here's a combination of ansi and vt100 termcap # entries that works nearly perfectly for me # (Gateway 2000 Handbook and Microsoft Works 3.0): pcmw|PC running Microsoft Works, am, xenl, cols#80, it#8, lines#24, vt#3, bel=^G, blink=\E[5m$<2/>, bold=\E[1m$<2/>, clear=\E[;H\E[2J$<50/>, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C$<2/>, cup=\E[%i%p1%d;%p2%dH$<5/>, cuu1=\E[A$<2/>, ed=\E[J$<50/>, el=\E[K$<3/>, home=\E[H, ht=^I, hts=\EH$<2/>, ind=\ED$<5/>, is2=\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, nel=\r\ED$<5/>, rc=\E8, rev=\E[7m$<2/>, rf=/usr/share/tabset/vt100, ri=\EM$<5/>, rmso=\E[m$<2/>, rmul=\E[m$<2/>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr0=\E[m$<2/>, smso=\E[7m$<2/>, smul=\E[4m$<2/>, tbc=\E[3g$<2/>, # From: Federico Bianchi # This is the entry for the OpenNT terminal. # The ntconsole name is for backward compatability. # This is for OpenNT 2.0 and later. # Later OpenNT was renamed to Interix. # # Presently it is distributed by Microsoft as Services For Unix (SFU). # The 3.5 beta contains ncurses 4.2 (that is header files and executables, # the documentation dates from 1.9.9e) -TD interix|opennt|opennt-25|ntconsole|ntconsole-25|OpenNT-term compatible with color, am, bw, msgr, colors#8, cols#80, lines#25, ncv#3, pairs#64, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, bel=^G, bold=\E[1m, cbt=\E[Z, clear=\E[2J, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[M, kend=\E[U, kf0=\EFA, kf1=\EF1, kf10=\EFA, kf11=\EFB, kf12=\EFC, kf13=\EFD, kf14=\EFE, kf15=\EFF, kf16=\EFG, kf17=\EFH, kf18=\EFI, kf19=\EFJ, kf2=\EF2, kf20=\EFK, kf21=\EFL, kf22=\EFM, kf23=\EFN, kf24=\EFO, kf25=\EFP, kf26=\EFQ, kf27=\EFR, kf28=\EFS, kf29=\EFT, kf3=\EF3, kf30=\EFU, kf31=\EFV, kf32=\EFW, kf33=\EFX, kf34=\EFY, kf35=\EFZ, kf36=\EFa, kf37=\EFb, kf38=\EFc, kf39=\EFd, kf4=\EF4, kf40=\EFe, kf41=\EFf, kf42=\EFg, kf43=\EFh, kf44=\EFi, kf45=\EFj, kf46=\EFk, kf47=\EFm, kf48=\EFn, kf49=\EFo, kf5=\EF5, kf50=\EFp, kf51=\EFq, kf52=\EFr, kf53=\EFs, kf54=\EFt, kf55=\EFu, kf56=\EFv, kf57=\EFw, kf58=\EFx, kf59=\EFy, kf6=\EF6, kf60=\EFz, kf61=\EF+, kf62=\EF-, kf63=\EF\014 kf64=\EF$, kf7=\EF7, kf8=\EF8, kf9=\EF9, kich1=\E[L, kll=\E[U, knp=\E[T, kpp=\E[S, ll=\E[U, nel=^M^J, op=\E[m, rc=\E[u, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmcup=\E[2b\E[u\r\E[K, rmso=\E[m, rmul=\E[m, rs1=\Ec, sc=\E[s, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, setb=\E[%p1%{40}%+%dm, setf=\E[%p1%{30}%+%dm, sgr0=\E[0m, smcup=\E[s\E[1b, smso=\E[7m, smul=\E[4m, opennt-35|ntconsole-35|OpenNT-term35 compatible with color, lines#35, use=opennt, opennt-50|ntconsole-50|OpenNT-term50 compatible with color, lines#50, use=opennt, opennt-60|ntconsole-60|OpenNT-term60 compatible with color, lines#60, use=opennt, opennt-100|ntconsole-100|OpenNT-term100 compatible with color, lines#100, use=opennt, # OpenNT wide terminals opennt-w|opennt-25-w|ntconsole-w|ntconsole-25-w|OpenNT-term-w compat with color, cols#125, use=opennt, opennt-35-w|ntconsole-35-w|OpenNT-term35-w compatible with color, lines#35, use=opennt-w, opennt-50-w|ntconsole-50-w|OpenNT-term50-w compatible with color, lines#50, use=opennt-w, opennt-60-w|ntconsole-60-w|OpenNT-term60-w compatible with color, lines#60, use=opennt-w, opennt-w-vt|opennt-25-w-vt|ntconsole-w-vt|ntconsole-25-w-vt|OpenNT-term-w-vt compat with color, cols#132, use=opennt, # OpenNT terminals with no smcup/rmcup (names match termcap entries) interix-nti|opennt-nti|opennt-25-nti|ntconsole-25-nti|OpenNT-nti compatible with color, rmcup@, smcup@, use=opennt, opennt-35-nti|ntconsole-35-nti|OpenNT-term35-nti compatible with color, lines#35, use=opennt-nti, opennt-50-nti|ntconsole-50-nti|OpenNT-term50-nti compatible with color, lines#50, use=opennt-nti, opennt-60-nti|ntconsole-60-nti|OpenNT-term60-nti compatible with color, lines#60, use=opennt-nti, opennt-100-nti|ntconsole-100-nti|OpenNT-term100-nti compatible with color, lines#100, use=opennt-nti, ######## COMMON TERMINAL TYPES # # This section describes terminal classes and maker brands that are still # quite common, but have proprietary command sets not blessed by ANSI. # #### Altos # # Altos made a moderately successful line of UNIX boxes. In 1990 they were # bought out by Acer, a major Taiwanese manufacturer of PC-clones. # Acer has a web site at http://www.acer.com. # # Altos descriptions from Ted Mittelstaedt 4 Sep 1993 # His comments suggest they were shipped with the system. # # (altos2: had extension capabilities # :c0=^A`\r:c1=^Aa\r:c2=^Ab\r:c3=^Ac\r:\ # :c4=^Ad\r:c5=^Ae\r:c6=^Af\r:c7=^Ag\r:\ # :c8=^Ah\r:c9=^Ai\r:cA=^Aj\r:cB=^Ak\r:\ # :cC=^Al\r:cD=^Am\r:cE=^An\r:cF=^Ao\r: # :XU=^Aq\r:XD=^Ar\r:XR=^As\r:XL=^At\r:\ # :YU=^AQ\r:YD=^AR\r:YR=^AS\r:YL=^AT\r:\ # :HL=^AP\r:SP=\E[i:\ # :IS=\E[@:DE=\E[P:IL=\E[L:NS=\E[S:PS=\E[T:\ # :LO=\E[0q:LC=\E[5q:LL=\E[6q:\ # Comparison with the k* capabilities makes it obvious that the c* things are # shift keys. I have renamed them to keys 32 and up accordingly. Also, # :sr: was given as a boolean-- esr) altos2|alt2|altos-2|altos II, cols#80, it#8, lines#24, xmc#0, clear=\E[H\E[2J, cr=^M, cub1=^H, cud1=\E[1B, cuf1=\E[1C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[1A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@, if=/usr/share/tabset/vt100, il1=\E[L, ind=^J, is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, kDL=^Am\r, kEOL=^An\r, kbs=^H, kcbt=^AK\r, kclr=^AL\r, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=^AM\r, kel=^AN\r, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf32=^A`\r, kf33=^Aa\r, kf34=^Ab\r, kf35=^Ac\r, kf36=^Ad\r, kf37=^Ae\r, kf38=^Af\r, kf39=^Ag\r, kf4=^AC\r, kf40=^Ah\r, kf41=^Ai\r, kf42=^Aj\r, kf43=^Ak\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=\E[f, kil1=^AJ\r, kind=^AO\r, nel=^M^J, rmam=\E[?7l, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smso=\E[7m, smul=\E[4m, # (altos3: had extension capabilities # :c0=^A`\r:c1=^Aa\r:c2=^Ab\r:c3=^Ac\r:\ # :c4=^Ad\r:c5=^Ae\r:c6=^Af\r:c7=^Ag\r:\ # :c8=^Ah\r:c9=^Ai\r:cA=^Aj\r:cB=^Ak\r:\ # :cC=^Al\r:cD=^Am\r:cE=^An\r:cF=^Ao\r: # :XU=^Aq\r:XD=^Ar\r:XR=^As\r:XL=^At\r:\ # :HL=^AP\r:SP=\E[i:\ # :IS=\E[@:DE=\E[P:IL=\E[L:NS=\E[S:PS=\E[T: altos3|altos5|alt3|alt5|altos-3|altos-5|altos III or V, blink=\E[5p, ri=\EM, sgr0=\E[p, use=altos2, altos4|alt4|altos-4|altos IV, use=wy50, # (altos7: had extension capabilities: # :GG#0:GI=\EH8:GF=\EH7:\ # :c0=^A`\r:c1=^Aa\r:c2=^Ab\r:c3=^Ac\r:\ # :c4=^Ad\r:c5=^Ae\r:c6=^Af\r:c7=^Ag\r:\ # :c8=^Ah\r:c9=^Ai\r:cA=^Aj\r:cB=^Ak\r:\ # :cC=^Al\r:cD=^Am\r:cE=^An\r:cF=^Ao\r: # Comparison with the k* capabilities makes it obvious that the c* things are # shift keys. I have renamed them to keys 32 and up accordingly. I have # also made this entry relative to adm12 in order to give it an . The # imported by use=adm+sgr may work, let me know. -- esr) altos7|alt7|altos VII, am, mir, cols#80, lines#24, xmc#0, acsc=j5k3l2m1n8q\:t4u9v=w0x6, blink=\EG2, bold=\EGt, clear=\E+^^, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dim=\EGp, dl1=\ER, ed=\EY, el=\ET, home=^^, ht=^I, il1=\EE, ind=^J, invis=\EG1, is2=\E`\:\Ee(\EO\Ee6\Ec41\E~4\Ec21\Eu\E~2, kDL=^Am\r, kEOL=^An\r, kbs=^H, kcbt=^AK\r, kclr=^AL\r, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=^AM\r, kel=^AN\r, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf32=^A`\r, kf33=^Aa\r, kf34=^Ab\r, kf35=^Ac\r, kf36=^Ad\r, kf37=^Ae\r, kf38=^Af\r, kf39=^Ag\r, kf4=^AC\r, kf40=^Ah\r, kf41=^Ai\r, kf42=^Aj\r, kf43=^Ak\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kil1=^AJ\r, kind=^AO\r, knp=\EK, kpp=\EJ, mc4=\EJ, mc5=\Ed#, nel=^M^J, ri=\Ej, rmir=\Er, smir=\Eq, use=adm+sgr, altos7pc|alt7pc|altos PC VII, kend=\ET, use=altos7, #### Hewlett-Packard (hp) # # Hewlett-Packard # 8000 Foothills Blvd # Roseville, CA 95747 # Vox: 1-(916)-785-4363 (Technical response line for VDTs) # 1-(800)-633-3600 (General customer support) # # # As of March 1998, HP no longer has any terminals in production. # The 700 series (22, 32, 41, 44, 92, 94, 96, 98) is still being # supported (they still have parts). So are the 2392a and 2394a. # See the WORKSTATION CONSOLES section for the 700s. # # Generic HP terminal - this should (hopefully) work on any HP terminal. hpgeneric|hp|hewlett-packard generic terminal, OTbs, OTpt, am, da, db, mir, xhp, cols#80, lines#24, lm#0, vt#6, bel=^G, clear=\EH\EJ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\E&a%p2%dc%p1%dY$<6>, cuu1=\EA, dch1=\EP, dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1, il1=\EL, ind=^J, kbs=^H, kcbt=\Ei, rmir=\ER, rmso=\E&d@, rmul=\E&d@, sgr0=\E&d@, smir=\EQ, smso=\E&dJ, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY, hp110|hewlett-packard model 110 portable, lines#16, use=hpgeneric, hp+pfk+cr|hp function keys with CR, kf1=\Ep\r, kf2=\Eq\r, kf3=\Er\r, kf4=\Es\r, kf5=\Et\r, kf6=\Eu\r, kf7=\Ev\r, kf8=\Ew\r, hp+pfk-cr|hp function keys w/o CR, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, # The hp2621s use the same keys for the arrows and function keys, # but not separate escape sequences. These definitions allow the # user to use those keys as arrow keys rather than as function # keys. hp+pfk+arrows|hp alternate arrow definitions, kcub1=\Eu\r, kcud1=\Ew\r, kcuf1=\Ev\r, kcuu1=\Et\r, kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, khome=\Ep\r, kind=\Er\r, kll=\Eq\r, kri=\Es\r, hp+arrows|hp arrow definitions, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\Eh, kind=\ES, kll=\EF, kri=\ET, # Generic stuff from the HP 262x series # hp262x|HP 262x terminals, xhp, blink=\E&dA, dch1=\EP$<2>, ed=\EJ, ht=\011$<2>, ind=\ES, invis=\E&dS, ip=$<2>, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, khome=\Eh, kich1=\EQ, kil1=\EL, kind=\ES, knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, rev=\E&dB, rmkx=\E&s0A, rmso=\E&d@, rmul=\E&d@, sgr=\E&d%{64}%?%p1%t%{66}%|%;%?%p2%t%{68}%|%;%?%p3%t%{66}%|%;%?%p4%t%{65}%|%;%c, sgr0=\E&d@, smkx=\E&s1A, smso=\E&dB, smul=\E&dD, # Note: no on HPs since that homes to top of memory, not screen. # Due to severe 2621 braindamage, the only way to get the arrow keys to # transmit anything at all is to turn on the function key labels # with , and even then the user has to hold down shift! # The default 2621 turns off the labels except when it has to to # enable the function keys. If your installation prefers labels # on all the time, or off all the time (at the "expense" of the # function keys), use 2621-nl or 2621-wl. # # Note: there are newer ROMs for 2621's that allow you to set # strap A so the regular arrow keys xmit \EA, etc, as with the # 2645. However, even with this strap set, the terminal stops # xmitting if you reset it, until you unset and reset the strap! # Since there is no way to set/unset the strap with an escape # sequence, we don't use it in the default. # If you like, you can use 2621-ba (brain-damaged arrow keys). hp2621-ba|2621 w/new rom and strap A set, rmkx@, smkx@, use=hp+arrows, use=hp2621, # hp2621 with function labels. Most of the time they are off, # but inside vi, the function key labels appear. You have to # hold down shift to get them to xmit. hp2621|hp2621a|hp2621A|2621|2621a|2621A|hp2621-wl|2621-wl|hp 2621 w/labels, is2=\E&jA\r, rmkx=\E&jA, use=hp2621-fl, hp2621-fl|hp 2621, xhp@, xon, pb#19200, cbt=\Ei, cup=\E&a%p2%dc%p1%dY, dch1=\EP$<2>, ht=\011$<2>, ip=$<2>, is2=\E&j@\r, rmkx=\E&j@, rmso=\E&d@, rmul=\E&d@, sgr0=\E&d@, smkx=\E&jB, smso=\E&dD, smul=\E&dD, use=hp+pfk+cr, use=hpgeneric, # To use hp2621p printer, setenv TERM=2621p, PRINTER=2612p hp2621p|hp 2621 with printer, mc4=\E&p13C, mc5=\E&p11C, use=hp2621, hp2621p-a|hp2621p with fn as arrows, use=hp+pfk+arrows, use=hp2621p, # hp2621 with k45 keyboard hp2621-k45|hp2621k45|k45|hp 2621 with 45 keyboard, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\Eh, rmkx=\E&s0A, smkx=\E&s1A, use=hp2621, # 2621 using all 48 lines of memory, only 24 visible at any time. hp2621-48|48 line 2621, lines#48, cup=\E&a%p2%dc%p1%dR, home=\EH, vpa=\E&a%p1%dR, use=hp2621, # 2621 with no labels ever. Also prevents vi delays on escape. hp2621-nl|hp 2621 with no labels, kcub1@, kcud1@, kcuf1@, kcuu1@, khome@, rmkx@, smkx@, use=hp2621-fl, # Needed for UCB ARPAVAX console, since lsi-11 expands tabs # (wrong). # hp2621-nt|hp 2621 w/no tabs, ht@, use=hp2621, # Hp 2624 B with 4 or 10 pages of memory. # # Some assumptions are made with this entry. These settings are # NOT set up by the initialization strings. # # Port Configuration # RecvPace=Xon/Xoff # XmitPace=Xon/Xoff # StripNulDel=Yes # # Terminal Configuration # InhHndShk=Yes # InhDC2=Yes # XmitFnctn(A)=No # InhEolWrp=No # # Note: the 2624 DOES have a true , believe it or not! # # The 2624 has an "error line" to which messages can be sent. # This is CLOSE to what is expected for a "status line". However, # after a message is sent to the "error line", the next carriage # return is EATEN and the "error line" is turned back off again! # So I guess we can't define , , , , , . # # This entry supports emacs (and any other program that uses raw # mode) at 4800 baud and less. I couldn't get the padding right # for 9600. # # (hp2624: replaced NUL sequences in flash with mandatory pauses -- esr) hp2624|hp2624a|hp2624b|hp2624b-4p|Hewlett Packard 2624 B, da, db, lm#96, flash=\E&w13F$<66/>\E&w12F$<66/>\E&w13F$<66/>\E&w12F, use=hp+labels, use=scrhp, # This hp2626 entry does not use any of the fancy windowing stuff # of the 2626. # # Indeed, terminfo does not yet handle such stuff. Since changing # any window clears memory, it is probably not possible to use # this for screen opt. # # ed is incredibly slow most of the time - I am guessing at the # exact padding. Since the terminal uses xoff/xon this is intended # only for cost computation, so that the terminal will prefer el # or even dl1 which is probably faster! # # \ED\EJ\EC hack for ed from Ed Bradford - apparently ed is only # extra slow on the last line of the window. # # The padding probably should be changed. # hp2626|hp2626a|hp2626p|hp 2626, da, db, lm#0, pb#19200, ed=\ED\EJ$<500>\EC, indn=\E&r%p1%dD, ip=$<4>, is2=\E&j@\r, rin=\E&r%p1%dU, use=hp+pfk-cr, use=hp+labels, use=scrhp, # This entry is for sysline. It allocates a 23 line window with # a 115 line workspace for regular use, and a 1 line window for # the status line. # # This assumes port 2 is being used. # Turn off horizontal line, Create ws #1 with 115 lines, # Create ws #2 with 1 line, Create window #1 lines 1-23, # Create window #2 lines 24-24, Attach cursor to workspace #1. # Note that this clears the tabs so it must be done by tset before # it sets the tabs. # hp2626-s|hp 2626 using only 23 lines, eslok, hs, lines#23, fsl=\E&d@\E&w7f2p1I\E&w4f1I, is1=\E&q3t0{0H \E&w0f115n1I \E&w0f1n2I \E&w2f1i0d0u22l0S \E&w2f2i0d23u23l0S \E&w7f2p1I \r, tsl=\E&w7f2p2I\E&w4f2I\r\EK\E&a%p1%dC, use=hp2626, # Force terminal back to 24 lines after being 23. hp2626-ns|hp 2626 using all 24 lines, is1=\E&q3t0{0H \E&w0f118n1I \E&w0f1n2I \E&w2f1i0d0u23l0S \E&w3f2I \E&w7f2p1I \r, use=hp2626, # Various entries useful for small windows on 2626. hp2626-12|hewlett-packard 2626 12 lines, lines#12, use=hp2626, hp2626-12x40|hewlett-packard 2626 12 lines 40 columns, cols#40, lines#12, use=hp2626, hp2626-x40|hewlett-packard 2626 40 columns, cols#40, use=hp2626, hp2626-12-s|hewlett-packard 2626 11 lines plus status, lines#11, use=hp2626-s, # # hp2627 color tubes from University of Wisconsin # hp2627a-rev|hp 2627 with reverse video colors, cr=^M, cud1=^J, ht=^I, ind=^J, is2=\E&v0m1a0b0c1x1y1z1i0a0b1c1x1y1z0i0S\E&j@\r\E3\r, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, rmul=\E&v0S\E&d@, smul=\E&dD\E&v1S, use=hp2621-nl, hp2627a|hp 2627 color terminal with no labels, cr=^M, cud1=^J, ht=^I, ind=^J, is2=\E&v0m1a1b0c1i0a1b1c2i1a0b0c0i0S\E&j@\r\E3\r, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, rmso=\E&v0S, rmul=\E&v0S\E&d@, smso=\E&v2S, smul=\E&dD\E&v1S, use=hp2621-nl, hp2627c|hp 2627 color (cyan) terminal with no labels, cr=^M, cud1=^J, ht=^I, ind=^J, is2=\E&v0m1a0b0c2i1a1b0c1i0a1b1c0i0S\E&j@\r\E3\r, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, use=hp2627a, # hp2640a doesn't have the Y cursor addressing feature, and C is # memory relative instead of screen relative, as we need. # hp2640a|hp 2640a, cup@, rmkx@, smkx@, use=hp2645, hp2640b|hp2644a|hp 264x series, rmkx@, smkx@, use=hp2645, # (hp2641a: removed unknown :gu: -- esr) hp2641a|hp2645a|hp2647a|HP 264?A series BRL entry, am, da, db, mir, xhp, cols#80, lines#24, bel=^G, clear=\EH\EJ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\E&a%p2%2dc%p1%2dY, cuu1=\EA, dch1=\EP, dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%2dC, ht=^I, if=/usr/share/tabset/std, il1=\EL, ind=^J, is2=\EE$<500/>, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, rmir=\ER, rmso=\E&d@, smir=\EQ, smso=\E&dB, vpa=\E&a%p1%2dY, # This terminal should be used at 4800 baud or less. It needs padding for # plain characters at 9600, I guessed at an appropriate cr delay. It really # wants ^E/^F handshaking, but that doesn't work well even if you write # software to support it. hp2645|hp45|HP 2645 series, pb#9600, blink=\E&dA, cr=\r$<20>, dim=\E&dH, kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL, kind=\ES, knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, rev=\E&dB, rmkx=\E&s0A, sgr=\E&d%{64}%?%p1%t%{66}%|%;%?%p2%t%{68}%|%;%?%p3%t%{66}%|%;%?%p4%t%{65}%|%;%?%p5%t%{72}%|%;%?%p6%t%{66}%|%;%c, sgr0=\E&d@, smkx=\E&s1A, smul=\E&dD, use=hpgeneric, # You should use this terminal at 4800 baud or less. hp2648|hp2648a|HP 2648a graphics terminal, clear=\EH\EJ$<50>, cup=\E&a%p2%dc%p1%dY$<20>, dch1=\EP$<7>, ip=$<5>, use=hp2645, # The HP 150 terminal is a fairly vanilla HP terminal, with the # clreol standout problem. It also has graphics capabilities and # a touch screen, which we don't describe here. hp150|hewlett packard Model 150, OTbs, use=hp2622, # HP 2382a terminals, "the little ones." They don't have any # alternate character set support and sending out ^N/^O will # leave the screen blank. hp2382a|hp2382|hewlett packard 2382a, da, db, lh#1, lm#48, acsc@, pln=\E&f0a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d0L%?%ga%!%t %;%p2%s, rmacs@, sgr=\E&d%{0}%Pa%?%p4%t%{1}%ga%+%Pa%;%?%p1%p3%|%p6%|%t%{2}%ga%+%Pa%;%?%p2%p6%|%t%{4}%ga%+%Pa%;%?%p1%p5%|%t%{8}%ga%+%Pa%;%?%p7%t%?%ga%ts%ga%{64}%+%e%{83}%;%e%?%ga%t%ga%{64}%+%e%{64}%;%;%c, sgr0=\E&d@, smacs@, use=hp+labels, use=scrhp, hp2621-a|hp2621a-a|hp2621 with fn as arrows, use=hp+pfk+arrows, use=hp2621-fl, # newer hewlett packard terminals newhpkeyboard|generic entry for HP extended keyboard, kbs=^H, kcbt=\Ei, kclr=\EJ, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, khome=\Eh, kich1=\EQ, kil1=\EL, kind=\ET, kll=\EF, knp=\EU, kpp=\EV, kri=\ES, krmir=\ER, rmkx=\E&s0A, smkx=\E&s1A, use=hp+pfk-cr, newhp|generic entry for new hewlett packard terminals, am, bw, mir, xhp, xon, cols#80, lines#24, pb#4800, acsc=2[3@4>5I9(\:'JSKWLQMAO#P$Q;R!S"T1U2V4W3X\:Y+Z*dHjGkTlRmFn/q\,t5u6v8w7x., bel=^G, blink=\E&dA, bold=\E&dF, cbt=\Ei, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cuu1=\EA, dch1=\EP$<2>, dim=\E&dH, dl1=\EM, ed=\EJ, el=\EK, ht=\011$<2>, hts=\E1, il1=\EL, ind=^J, invis=\E&dS, ip=$<2>, is1=\E&jB$<8>, nel=^M^J, pfkey=\E&f0a%p1%dk0d%p2%l%dL%p2%s, pfloc=\E&f1a%p1%dk0d%p2%l%dL%p2%s, pfx=\E&f2a%p1%dk0d%p2%l%dL%p2%s, rev=\E&dB, ri=\ET, rmacs=^O, rmir=\ER, rmso=\E&d@, rmul=\E&d@, rs1=\Eg, sgr=\E&d%{0}%Pa%?%p4%t%{1}%ga%+%Pa%;%?%p1%p3%|%p6%|%t%{2}%ga%+%Pa%;%?%p2%p6%|%t%{4}%ga%+%Pa%;%?%p1%p5%|%t%{8}%ga%+%Pa%;%?%p7%t%?%ga%ts%ga%{64}%+%e%{83}%;%e%?%ga%t%ga%{64}%+%e%{64}%;%;%c%?%p9%t\016%e\017%;, sgr0=\E&d@\017, smacs=^N, smir=\EQ, smso=\E&dJ, smul=\E&dD, tbc=\E3, use=newhpkeyboard, memhp|memory relative addressing for new HP ttys, vt#6, clear=\EH\EJ$<40>, cub=\E&a-%p1%dC, cud=\E&a+%p1%dR, cuf=\E&a+%p1%dC, cup=\E&a%p1%dr%p2%dC, cuu=\E&a-%p1%dR, home=\EH, hpa=\E&a%p1%dC, ll=\E&a23R\r, mrcup=\E&a%p1%dr%p2%dC, vpa=\E&a%p1%dR, use=newhp, scrhp|screen relative addressing for new HP ttys, clear=\E&a0c0Y\EJ$<40>, cub=\E&a-%p1%dC, cud=\E&a+%p1%dR, cuf=\E&a+%p1%dC, cup=\E&a%p1%dy%p2%dC$<10>, cuu=\E&a-%p1%dR, home=\E&a0y0C, hpa=\E&a%p1%dC, ll=\E&a0y0C\EA, mrcup=\E&a%p1%dr%p2%dC, vpa=\E&a%p1%dY, use=newhp, # (hp+labels: added label values from a BRL termcap -- esr) hp+labels|"standard" label info for new HP ttys, lh#2, lw#8, nlab#8, lf0=f1, lf1=f2, lf2=f3, lf3=f4, lf4=f5, lf5=f6, lf6=f7, lf7=f8, pln=\E&f2a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d0L%?%ga%!%t %;%p2%s, rmln=\E&j@, smln=\E&jB, hp+printer|"standard" printer info for HP ttys, ff=\E&p4u0C, mc0=\EH\E&p4dF, mc4=\E&p13C, mc5=\E&p11C, # The new hp2621b is kind of a cross between the old 2621 and the # new 262x series of machines. It has dip-switched options. # The firmware has a bug in it such that if you give it a null # length label, the following character is eaten! hp2621b|hp 2621b with old style keyboard, lh#1, lm#48, lw#8, nlab#8, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\Eh, kind=\ET, kll=\EF, kri=\ES, pln=\E&f0a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d3L%?%ga%!%t%{32}%c%;%p2%s\E%{111}%p1%+%c\r, smln=\E&jB, use=hp2621, hp2621b-p|hp 2621b with printer, use=hp+printer, use=hp2621b, # hp2621b - new 2621b with new extended keyboard # these are closer to the new 26xx series than the other 2621b hp2621b-kx|hp 2621b with extended keyboard, use=newhpkeyboard, use=hp2621b, hp2621b-kx-p|hp 2621b with new keyboard & printer, use=hp+printer, use=hp2621b-kx, # Some assumptions are made in the following entries. # These settings are NOT set up by the initialization strings. # # Port Configuration # RecvPace=Xon/Xoff XmitPace=Xon/Xoff StripNulDel=Yes # # Terminal Configuration # InhHndShk(G)=Yes InhDC2(H)=Yes # XmitFnctn(A)=No InhEolWrp=No # # # Hp 2622a & hp2623a display and graphics terminals # hp2622|hp2622a|hp 2622, da, db, lm#0, pb#19200, is2=\E&dj@\r, use=hp+pfk-cr, use=hp+labels, use=scrhp, # The 2623 is a 2622 with extra graphics hardware. hp2623|hp2623a|hp 2623, use=hp2622, hp2624b-p|hp2624b-4p-p|hewlett packard 2624 B with printer, use=hp+printer, use=hp2624, # The hewlett packard B can have an optional extra 6 pages of memory. hp2624-10p|hp2624a-10p|hp2624b-10p|hewlett packard 2624 B w/ 10 pages of memory, lm#240, use=hp2624, hp2624b-10p-p|hewlett packard 2624 B w/ extra memory & printer, lm#240, use=hp2624b-p, # Color manipulations for HP terminals hp+color|hp with colors, ccc, colors#16, ncv#17, pairs#7, initp=\E&v%?%p2%{1000}%=%t1%e.%p2%d%;a%?%p3%{1000}%=%t1%e.%p3%d%;b%?%p4%{1000}%=%t1%e.%p4%d%;c%?%p5%{1000}%=%t1%e.%p5%d%;x%?%p6%{1000}%=%t1%e.%p6%d%;y%?%p7%{1000}%=%t1%e.%p7%d%;z%p1%dI, oc=\E&v0m1a1b1c0I\E&v1a1I\E&v1b2I\E&v1a1b3I\E&v1c4I\E&v1a1c5I\E&v1b1c6I\E&v1x1y7I, op=\E&v0S, scp=\E&v%p1%dS, # sets the screen to be 80 columns wide hp2397a|hp2397|hewlett packard 2397A color terminal, is2=\E&w6f80X, use=memhp, use=hp+labels, use=hp+color, # HP 700/44 Setup parameters: # Terminal Mode HP-PCterm # Inhibit Auto Wrap NO # Status Line Host Writable # PC Character Set YES # Twenty-Five Line Mode YES # XON/XOFF @128 or 64 (sc) # Keycode Mode NO or YES (sc) # Backspace Key BS or BS/DEL # # sets pcterm; autowrap; 25 lines; pc char set; prog DEL key; # \E\\? does not turn off keycode mode # sets alternate start/stop; keycode on hpansi|hp700|hewlett packard 700/44 in HP-PCterm mode, am, eo, xenl, xon, cols#80, lines#25, acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263, bel=^G, cbt=\E[Z, civis=\E[?25l, clear=\E[2J\E[H, cnorm=\E[?25h, cr=^M, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L, ind=^J, is2=\E[44"p\E[?7h\E[>10h\E[>12h\EP1;1|3/7F\E\\, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[4~, kf1=\E[17~, kf10=\E[28~, kf2=\E[18~, kf3=\E[19~, kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~, kf9=\E[26~, khome=\E[1~, knp=\E[6~, kpp=\E[5~, rmam=\E[?7l, rmsc=\E[>11l\EP1**x0/11;1/13\E[m\E\\, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smsc=\E[>11h\EPO**x0/65;1/67\E\\$<250>, smso=\E[7m, smul=\E[4m, xoffc=g, xonc=e, # # (hp2392: copied here from hpex -- esr) hp2392|239x series, cols#80, cbt=\Ei, cup=\E&a%p1%dy%p2%dC, kf1=\Ep\r, kf2=\Eq\r, kf3=\Er\r, kf4=\Es\r, kf5=\Et\r, kf6=\Eu\r, kf7=\Ev\r, kf8=\Ew\r, khome=\Eh, kind=\EU, knp=\Eu, kpp=\Ev, kri=\EV, rmir=\ER, rmul=\E&d@, smir=\EQ, smul=\E&dD, vpa=\E&a%p1%dY, use=hpsub, hpsub|hp terminals -- capability subset, am, da, db, mir, xhp, xon, lines#24, bel=^G, clear=\EH\EJ, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cuu1=\EA, dch1=\EP, dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I, if=/usr/share/tabset/stdcrt, il1=\EL, ind=^J, is2=\E&s1A\E<\E&k0\\, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\Eh, rmkx=\E&s0A, rmso=\E&d@, sgr0=\E&d@, smkx=\E&s1A, smso=\E&dB, # hpex: # May be used for most 24 x 80 hp terminals, # but has no padding added, so may allow runover in some terminals at high # baud rates. Will not work for hp2640a or hp2640b terminals, hp98x6 and # hp98x5 terminal emulators or hp98x6 consoles. # Adds xy-cursor addressing, vertical cursor addressing, home, # last line, and underline capabilities. # # (hpex: removed memory-lock capabilities ":ml=\El:mu=\Em:", # moved here from hpsub -- esr) hpex|hp extended capabilites, cr=^M, cud1=^J, cup=\E&a%p1%dy%p2%dC, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, rmir=\ER, rmul=\E&d@, smir=\EQ, smul=\E&dD, vpa=\E&a%p1%dY, use=hpsub, # From: Ville Sulko , 05 Aug 1996 hp2|hpex2|hewlett-packard extended capabilities newer version, am, da, db, mir, xhp, cols#80, lh#2, lines#24, lm#0, lw#8, nlab#8, xmc#0, bel=^G, clear=\E&a0y0C\EJ, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP, dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1, il1=\EL, ind=^J, kbs=^H, kclr=\EJ, kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL, kind=\ES, kll=\EF, knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, ktbc=\E3, meml=\El, memu=\Em, pfkey=\E&f%p1%dk%p2%l%dL%p2%s, pfloc=\E&f1a%p1%dk%p2%l%dL%p2%s, pfx=\E&f2a%p1%dk%p2%l%dL%p2%s, pln=\E&f%p1%dk%p2%l%dd0L%p2%s, rmir=\ER, rmkx=\E&s0A, rmln=\E&j@, rmso=\E&d@, rmul=\E&d@, sgr=\E&d%?%p7%t%{115}%c%;%p1%p3%|%p6%|%{2}%*%p2%{4}%*%+%p4%+%p5%{8}%*%+%{64}%+%c%?%p9%t%'\016'%c%e%'\017'%c%;, sgr0=\E&d@, smir=\EQ, smkx=\E&s1A, smln=\E&jB, smso=\E&dB, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY, # HP 236 console # From: hp236|hp236 internal terminal emulator, OTbs, am, cols#80, lines#24, clear=\EF, cnorm=\EDE, cub1=^H, cup=\EE%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, cvvis=\EDB, dch1=\EJ, dl1=\EH, el=\EK, ich1=\EI, il1=\EG, rmso=\ECI, sgr0=\ECI, smso=\EBI, # This works on a hp300 console running Utah 4.3 BSD # From: Craig Leres hp300h|HP Catseye console, OTbs, am, da, db, mir, xhp, cols#128, lines#51, lm#0, xmc#0, bel=^G, cbt=\Ei, clear=\E&a0y0C\EJ, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP, dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I, if=/usr/share/tabset/stdcrt, il1=\EL, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\Eh, rmir=\ER, rmkx=\E&s0A, rmso=\E&d@, rmul=\E&d@, sgr0=\E&d@, smir=\EQ, smkx=\E&s1A, smso=\E&dB, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY, # From: Greg Couch hp9837|hp98720|hp98721|HP 9000/300 workstations, OTbs, am, da, db, mir, xhp, cols#128, it#8, lines#46, lm#0, bel=^G, cbt=\Ei, clear=\E&a0y0C\EJ, cub1=^H, cud1=\EB, cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP, dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1, il1=\EL, ind=^J, is2=\E&v0m1b0i&j@, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, khome=\Eh, kich1=\EQ, kil1=\EL, knp=\EU, kpp=\EV, rmir=\ER, rmkx=\E&s0A, rmso=\E&v0S, rmul=\E&d@, sgr0=\E&d@, smir=\EQ, smkx=\E&s1A, smso=\E&v5S, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY, # HP 9845 desktop computer from BRL # (hp9845: removed unknown capability :gu: -- esr) hp9845|HP 9845, OTbs, am, da, db, eo, mir, xhp, cols#80, lines#21, OTbc=\ED, clear=\EH\EJ, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\E&a%p2%2dc%p1%2dY, cuu1=\EA, dch1=\EP, dl1=\EM, ed=\EJ, el=\EK, if=/usr/share/tabset/std, il1=\EL, rmir=\ER, rmso=\E&d@, smir=\EQ, smso=\E&dB, # From: Charles A. Finnell of MITRE , developed 07SEP90 # (hp98550: replaced /usr/share/tabset/9837 with std because ,; # added empty to avoid warnings re / --esr) hp98550|hp98550a|HP 9000 Series 300 color console, OTbs, am, da, db, mir, xhp, cols#128, it#8, lines#49, lm#0, acsc=, bel=^G, blink=\E&dA, bold=\E&dJ, cbt=\Ei, civis=\E*dR, clear=\EH\EJ, cnorm=\E*dQ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP, dim=\E&dH, dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1, if=/usr/share/tabset/std, il1=\EL, ind=^J, invis=\E&ds, kbs=^H, kclr=\EJ, kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL, kind=\ES, kll=\EF, knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, ktbc=\E3, rev=\E&dJ, rmacs=^O, rmir=\ER, rmkx=\E&s0A, rmso=\E&d@, rmul=\E&d@, sgr0=\E&d@, smacs=^N, smir=\EQ, smkx=\E&s1A, smso=\E&dJ, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY, # From: Victor Duchovni # (hp700-wy: removed obsolete ":nl=^J:"; # replaced /usr/share/tabset/hp700-wy with std because , -- esr) hp700-wy|HP700/41 emulating wyse30, OTbs, am, bw, mir, msgr, cols#80, it#8, lines#24, xmc#1, cbt=\EI, clear=^Z, cr=^M, cub1=^H, cud1=^V, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET$<10/>, home=^^, ht=^I, hts=\E1, if=/usr/share/tabset/stdcrt, il1=\EE$<0.7*/>, is1=\E~"\EC\Er\E(\EG0\003\E`9\E`1, kbs=\177, kcbt=\EI, kclr=^Z, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, ked=\EY, kel=\ET, khome=^^, khts=\EI, kich1=\Eq, krmir=\Er, ll=^^^K, ri=\Ej, rmir=\Er, rmso=\EG0$<10/>, rmul=\EG0$<10/>, sgr0=\EG0$<10/>, smir=\Eq, smso=\EG4$<10/>, smul=\EG8$<10/>, tbc=\E0, vpa=\E[%p1%{32}%+%c, hp70092|hp70092a|hp70092A|HP 700/92, am, da, db, xhp, cols#80, lh#2, lines#24, lm#0, lw#8, nlab#8, acsc=0cjgktlrmfn/q\,t5u6v8w7x., bel=^G, blink=\E&dA, bold=\E&dB, cbt=\Ei, clear=\E&a0y0C\EJ, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP, dim=\E&dH, dl1=\EM, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1, il1=\EL, kbs=^H, kclr=\EJ, kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL, kind=\ES, kll=\EF, knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, ktbc=\E3, rev=\E&dB, ri=\ET, rmacs=^O, rmir=\ER, rmkx=\E&s0A, rmln=\E&j@, rmso=\E&d@, rmul=\E&d@, sgr0=\E&d@, smacs=^N, smir=\EQ, smkx=\E&s1A, smln=\E&jB, smso=\E&dJ, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY, bobcat|sbobcat|HP 9000 model 300 console, am, da, db, mir, xhp, cols#128, it#8, lines#47, xmc#0, cbt=\Ei, clear=\EH\EJ, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\E&a%p1%dy%p2%dC$<6/>, cuu1=\EA, dch1=\EP, dl1=\EM$<10*/>, ed=\EJ, el=\EK, hpa=\E&a%p1%dC$<6/>, ht=^I, il1=\EL$<10*/>, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\Eh, nel=^M^J, rmir=\ER, rmkx=\E&s0A, rmso=\E&d@, rmul=\E&d@, sgr0=\E&d@, smir=\EQ, smkx=\E&s1A, smso=\E&dB, smul=\E&dD, vpa=\E&a%p1%dY$<6/>, gator-t|HP 9000 model 237 emulating extra-tall AAA, lines#94, use=gator, gator|HP 9000 model 237 emulating AAA, bw, km, mir, ul, cols#128, it#8, lines#47, bel=^G, cbt=\E[Z, clear=\E[H\E[J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\EM, dch=\E[%p1%dP$<4/>, dch1=\E[P, dl=\E[%p1%dM$<1*/>, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%i%p1%d`, ht=^I, ich=\E[%p1%d@$<4/>, ich1=\E[@, il=\E[%p1%dL$<1*/>, il1=\E[L, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, rep=%p1%c\E[%p2%db$<1*/>, rev=\E[7m, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, gator-52|HP 9000 model 237 emulating VT52, cols#128, lines#47, use=vt52, gator-52t|HP 9000 model 237 emulating extra-tall VT52, lines#94, use=gator-52, #### Honeywell-Bull # # From: Michael Haardt 11 Jan 93 # # Honeywell Bull terminal. Its cursor and function keys send single # control characters and it has standout/underline glitch. Most programs # do not like these features/bugs. Visual bell is realized by flashing the # "keyboard locked" LED. dku7003-dumb|Honeywell Bull DKU 7003 dumb mode, cols#80, lines#25, clear=^]^_, cr=^M, cub1=^Y, cud1=^K, cuf1=^X, cup=\E[%i%p1%d;%p2%dH, cuu1=^Z, ed=^_, el=\E[K, flash=\E[2h\E[2l, home=^], ht=^I, ind=^J, kbs=^H, kcub1=^Y, kcud1=^K, kcuf1=^X, kcuu1=^Z, khome=^], nel=^M^J, dku7003|Honeywell Bull DKU 7003 all features described, msgr, xmc#1, blink=\E[5m, bold=\E[7m, dim=\E[2m, rev=\E[7m, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, use=dku7003-dumb, #### Lear-Siegler (adm) # # These guys are long since out of the terminals business, but # in 1995 many current terminals still have an adm type as one of their # emulations (usually their stupidest, and usually labeled adm3, though # these `adm3' emulations normally have adm3a+ capabilities). # # WARNING: Some early ADM terminals (including the ADM3 and ADM5) had a # `diagnostic feature' that sending them a ^G while pin 22 (`Ring Indicator') # was being held to ground would trigger a send of the top line on the screen. # A quick fix might be to drop back to a cheesy 4-wire cable with pin 22 # hanging in the air. (Thanks to Eric Fischer, , # for clearing up this point.) adm1a|adm1|lsi adm1a, am, cols#80, lines#24, bel=^G, clear=\E;$<1>, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, home=^^, ind=^J, adm2|lsi adm2, OTbs, am, cols#80, lines#24, bel=^G, clear=\E;, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, home=^^, ich1=\EQ, il1=\EE, ind=^J, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, # (adm3: removed obsolete ":ma=^K^P:" -- esr) adm3|lsi adm3, OTbs, am, cols#80, lines#24, bel=^G, clear=^Z, cr=^M, cub1=^H, cud1=^J, ind=^J, # The following ADM-3A switch settings are assumed for normal operation: # SPACE U/L_DISP CLR_SCRN 24_LINE # CUR_CTL LC_EN AUTO_NL FDX # Other switches may be set for operator convenience or communication # requirements. I recommend # DISABLE_KB_LOCK LOCAL_OFF 103 202_OFF # ETX_OFF EOT_OFF # Most of these terminals required an option ROM to support lower case display. # Open the case and look at the motherboard; if you see an open 24-pin DIP # socket, you may be out of luck. # # (adm3a: some capabilities merged in from BRl entry -- esr) adm3a|lsi adm3a, OTbs, am, cols#80, lines#24, OTma=^K^P, OTnl=^J, bel=^G, clear=\032$<1/>, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, home=^^, ind=^J, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, rs2=^N, adm3a+|adm3a plus, kbs=^H, use=adm3a, # (adm5: removed obsolete ":ma=^Hh^Jj^Kk^Ll^^H:" & duplicate ":do=^J:" -- esr) adm5|lsi adm5, xmc#1, bel=^G, cr=^M, cud1=^J, ed=\EY, el=\ET, kbs=^H, khome=^^, rmso=\EG, smso=\EG, use=adm3a+, # A lot of terminals other than adm11s use these. Wherever you see # use=adm+sgr with some of its capabilities disabled, try the # disabled ones. They may well work but not have been documented or # expressed in the using entry. We'd like to cook up an but the # / sequences of the using entries vary too much. adm+sgr|adm style highlight capabilities, invis=\EG1, rev=\EG4, rmso=\EG0, rmul=\EG0, sgr0=\EG0, smso=\EG4, smul=\EG8, # LSI ADM-11 from George William Hartwig, Jr. via BRL # Status line additions from Stephen J. Muir # from . could also # be ^Z, according to his entry. # (adm11: =\EG4 was obviously erroneous because it also said # =\EG4. Looking at other ADMs confirms this -- esr) adm11|LSI ADM-11, OTbs, am, hs, OTkn#8, cols#80, lines#24, OTnl=^J, bel=^G, blink=\EG2, clear=\E*, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dsl=\Eh, ed=\EY, el=\ET, fsl=\E(\r, home=^^, ht=^I, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, khome=^^, nel=^M^J, tsl=\EF\E), use=adm+sgr, # From: Andrew Scott Beals # Corrected by Olaf Siebert , 11 May 1995 # Supervisor mode info by Ari Wuolle, , 27 Aug 1996 # (adm12: removed obsolete ":kn:ma=j^Jk^P^K^Pl ^R^L^L :". This formerly had # =\Eq but that looked wrong; this is from Dave Yost # via BRL. That entry asserted , but I've left that out because # neither earlier nor later ADMSs have it -- esr) # # You will need to get into the supervisor setup before you can set # baudrate etc. for your ADM-12+. Press Shift-Ctrl-Setup and you should # see a lot more setup options. # # While in supervisor setup you can also use following codes: # # Ctrl-P Personality character selections (configure for example what # arrow keys send, if I recall correctly) # Ctrl-T tabs 1-80 use left&right to move and up to set and # Ctrl-V tabs 81-158 down to clear tab. Shift-Ctrl-M sets right margin at cursor # Ctrl-B Binary setup (probably not needed. I think that everything can # be set using normal setup) # Ctrl-A Answerback mode (enter answerback message) # Ctrl-U User friendly mode (normal setup) # Ctrl-D Defaults entire setup and function keys from EPROM tables # Ctrl-S Save both setup and functions keys. Takes from 6 to 10 seconds. # Ctrl-R Reads both setup and functions keys from NVM. # Shift-Ctrl-X Unlock keyboard and cancel received X-OFF status # # ADM-12+ supports hardware handshaking, but it is DTR/CTS as opposed to # RTS/CTS used nowadays with virtually every modem and computer. 19200 # bps works fine with hardware flow control. # # The following null-modem cable should fix this and enable you to use # RTS/CTS handshaking (which Linux supports, use CRTSCTS setting). Also # set ADM-12+ for DTR handshaking from supervisor setup. # # PC Serial ADM-12+ # -------- ------- # 2 - 3 # 3 - 2 # 4 - 5 # 5 - 20 # 6,8 - 4 # 7 - 7 # 20 - 6,8 # adm12|lsi adm12, OTbs, OTpt, am, mir, OTug#1, cols#80, it#8, lines#24, bel=^G, clear=^Z, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, home=^^, hts=\E1, ich1=\EQ, il1=\EE, is2=\E0 \E1 \E1 \E1 \E1 \E1 \E1 \E1 \E1, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf0=^A0\r, kf1=^A1\r, kf2=^A2\r, kf3=^A3\r, kf4=^A4\r, kf5=^A5\r, kf6=^A6\r, kf7=^A7\r, kf8=^A8\r, kf9=^A9\r, rmir=\Er, smir=\Eq, tbc=\E0, use=adm+sgr, # (adm20: removed obsolete ":kn#7:" -- esr) adm20|lear siegler adm20, OTbs, am, cols#80, it#8, lines#24, bel=^G, cbt=\EI, clear=^Z, cr=^M, cub1=^H, cuf1=^L, cup=\E=%i%p2%{31}%+%c%p1%{31}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, home=^^, ht=^I, ich1=\EQ, il1=\EE, kf1=^A, kf2=^B, kf3=^W, kf4=^D, kf5=^E, kf6=^X, kf7=^Z, rmso=\E(, sgr0=\E(, smso=\E), adm21|lear siegler adm21, xmc#1, bel=^G, cr=^M, cud1=^J, dch1=\EW, dl1=\ER$<30*>, ed=\EY, el=\ET, ich1=\EQ, il1=\EE$<30*>, ind=^J, invis@, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, use=adm+sgr, use=adm3a, # (adm22: ":em=:" was an obvious typo for ":ei=:"; also, # removed obsolete ":kn#7:ma=j^Jk^P^K^Pl ^R^L^L :"; # removed bogus-looking \200 from before . -- esr) adm22|lsi adm22, OTbs, am, cols#80, lines#24, bel=^G, cbt=\EI, clear=\E+, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\Ey, el=\Et, home=^^, ht=\Ei, ich1=\EQ, il1=\EE, is2=\E%\014\014\014\016\003\0\003\002\003\002\0\0\0\0\0\0\0\0\0\0\0, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, khome=^^, lf1=F1, lf2=F2, lf3=F3, lf4=F4, lf5=F5, lf6=F6, lf7=F7, rmso=\E(, sgr0=\E(, smso=\E), # ADM 31 DIP Switches # # This information comes from two versions of the manual for the # Lear-Siegler ADM 31. # # Main board: # rear of case # +-||||-------------------------------------+ # + S1S2 ||S + # + ||3 + # + + # + ||S + # + ||4 + # + + # + + # + + # + + # + + # +-+ +-+ # + + # + S5 S6 S7 + # + == == == + # +----------------------------------------------+ # front of case (keyboard) # # S1 - Data Rate - Modem # S2 - Data Rate - Printer # ------------------------ # Data Rate Setting # ------------------- # 50 0 0 0 0 # 75 1 0 0 0 # 110 0 1 0 0 # 134.5 1 1 0 0 # 150 0 0 1 0 # 300 1 0 1 0 # 600 0 1 1 0 # 1200 1 1 1 0 # 1800 0 0 0 1 # 2000 1 0 0 1 # 2400 0 1 0 1 # 3600 1 1 0 1 # 4800 0 0 1 1 # 7200 1 0 1 1 # 9600 0 1 1 1 # x 1 1 1 1 # # S3 - Interface/Printer/Attributes # --------------------------------- # Printer Busy Control # sw1 sw2 sw3 # --------------- # off off off Busy not active, CD disabled # off off on Busy not active, CD enabled # off on off Busy active on J5-20, CD disabled # on off off Busy active on J5-19, CD disabled - Factory Set. # on off on Busy active on J5-19, CD enabled # # sw4 Used in conjuction with S4 for comm interface control - Fact 0 # # sw5 Secondary Channel Control (Hardware implementation only) - Fact 0 # # sw6 ON enables printer BUSY active LOW - Factory Setting # OFF enables printer BUSY active HIGH - If set to this, ADM31 senses # # sw7 ON - steady cursor - Factory Setting # OFF - blinking cursor # # sw8 ON causes selected attribute character to be displayed # OFF causes SPACE to be displayed instead - Factory Setting # # S4 - Interface # -------------- # Modem Interface # S3 S4 S4 S4 S4 # sw4 sw1 sw2 sw3 sw4 # --------------------------- # OFF ON OFF ON OFF Enable RS-232C interface, Direct Connect and # Current Loop disabled - Factory Setting # ON ON OFF ON OFF Enable Current Loop interface, Direct Connect # disabled # OFF OFF ON OFF ON Enable Direct Connect interface, RS-232C and # Current Loop Disabled # # sw5 ON disables dot stretching mode - Factory Setting # OFF enables dot stretching mode # sw6 ON enables blanking function # OFF enables underline function - Factory Setting # sw7 ON causes NULLS to be displayed as NULLS # OFF causes NULLS to be displayed as SPACES - Factory Setting # # S5 - Word Structure # ------------------- # sw1 ON enables BREAK key - Factory Setting # OFF disables BREAK key # sw2 ON selects 50Hz monitor refresh rate # OFF selects 60Hz monitor refresh rate - Factory Setting # # Modem Port Selection # sw3 sw4 sw5 # --------------- # ON ON ON Selects 7 DATA bits, even parity, 2 STOP bits # OFF ON ON Selects 7 DATA bits, odd parity, 2 STOP bits # ON OFF ON Selects 7 DATA bits, even parity, 1 STOP bit - Factory Set. # OFF OFF ON Selects 7 DATA bits, odd parity, 1 STOP bit # ON ON OFF Selects 8 DATA bits, no parity, 2 STOP bits # OFF ON OFF Selects 8 DATA bits, no parity, 1 STOP bit # ON OFF OFF Selects 8 DATA bits, even parity, 1 STOP bit # OFF OFF OFF Selects 8 DATA bits, odd parity, 1 STOP bit # # sw6 ON sends bit 8 a 1 (mark) # OFF sends bit 8 as 0 (space) - Factory Setting # sw7 ON selects Block Mode # OFF selects Conversation Mode - Factory Setting # sw8 ON selects Full Duplex operation # OFF selects Half Duplex operation - Factory Setting # # S6 - Printer # ------------ # sw1, sw2, sw6, sw7 Reserved - Factory 0 # # Printer Port Selection # same as Modem above, bit 8 (when 8 DATA bits) is always = 0 # # sw8 ON enables Printer Port # OFF disables Printer Port - Factory Setting # # S7 - Polling Address # -------------------- # sw1-7 Establish ASCII character which designates terminal polling address # ON = logic 0 # OFF = logic 1 - Factory Setting # sw8 ON enables Polling Option # OFF disables Polling Option - Factory Setting # # # On some older adm31s, S4 does not exist, and S5-sw6 is not defined. # # This adm31 entry uses underline as the standout mode. # If the adm31 gives you trouble with standout mode, check the DIP switch in # position 6, bank @c11, 25% from back end of the circuit board. Should be # OFF. If there is no such switch, you have an old adm31 and must use oadm31. # (adm31: removed obsolete ":ma=j^Jk^P^K^Pl ^R^L^L :" -- esr) adm31|lsi adm31 with sw6 set for underline mode, OTbs, am, mir, cols#80, lines#24, bel=^G, clear=\E*, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, home=^^, il1=\EE, ind=^J, is2=\Eu\E0, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf0=^A0\r, kf1=^A1\r, kf2=^A2\r, kf3=^A3\r, kf4=^A4\r, kf5=^A5\r, kf6=^A6\r, kf7=^A7\r, kf8=^A8\r, kf9=^A9\r, rmir=\Er, rmso=\EG0, rmul=\EG0, sgr0=\EG0, smir=\Eq, smso=\EG1, smul=\EG1, adm31-old|o31|old adm31, rmul@, smso=\EG4, smul@, use=adm31, # LSI ADM-36 from Col. George L. Sicherman via BRL adm36|LSI ADM36, OTbs, OTpt, OTkn#4, if=/usr/share/tabset/vt100, is2=\E<\E>\E[6;?2;?7;?8h\E[4;20;?1;?3;?4;?5;?6;?18;?19l, use=vt100, # (adm42: removed obsolete ":ma=^K^P:" -- esr) adm42|lsi adm42, OTbs, am, cols#80, lines#24, bel=^G, cbt=\EI, clear=\E;, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, cvvis=\EC\E3 \E3(, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, ht=^I, il1=\EE$<270>, ind=^J, invis@, ip=$<6*>, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, pad=\177, rmir=\Er, rmul@, smir=\Eq, smul@, use=adm+sgr, # The following termcap for the Lear Siegler ADM-42 leaves the # "system line" at the bottom of the screen blank (for those who # find it distracting otherwise) adm42-ns|lsi adm-42 with no system line, cbt=\EI\EF \011, clear=\E;\EF \011, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<6>\EF \011, dch1=\EW\EF \011, dl1=\ER\EF \011, ed=\EY\EF \011, el=\ET\EF \011, il1=\EE\EF \011, rmir=\Er\EF \011, smir=\Eq\EF \011, use=adm42, # ADM 1178 terminal -- rather like an ADM-42. Manual is dated March 1 1985. # The insert mode of this terminal is commented out because it's broken for our # purposes in that it will shift the position of every character on the page, # not just the cursor line! # From: Michael Driscoll 10 July 1996 adm1178|1178|lsi adm1178, am, cols#80, lines#24, xmc#1, bel=^G, bold=\E(, cbt=\EI, clear=\E+, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, cvvis=\EC\E3 \E3(, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, home=^^, ht=^I, il1=\EE, ind=^J, ip=$<6*/>, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, pad=\177, rev=\EG4, rmso=\EG0, rmul=\EG0, sgr0=\E), smso=\EG4, smul=\EG1, #### Prime # # Yes, Prime made terminals. These entries were posted by Kevin J. Cummings # on 14 Dec 1992 and lightly edited by esr. # Prime merged with ComputerVision in the late 1980s; you can reach them at: # # ComputerVision Services # 500 Old Connecticut Path # Framingham, Mass. # # Standout mode is dim reverse-video. pt100|pt200|wren|fenix|prime pt100/pt200, am, bw, mir, msgr, cols#80, it#8, lines#24, cbt=\E[Z, clear=\E?, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\ED, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E0%p1%{33}%+%c%p2%{33}%+%c, cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl1=\E[M, ed=\E[J\E[r, el=\E[K\E[t, flash=\E$$<200/>\E$P, home=\E$B, ht=^I, il1=\E[L\E[t, ind=^J, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E$A, nel=^M^J, rmcup=, rmir=\E[4l, rmkx=\E[>13l, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smcup=\E[>1l\E[>2l\E[>16l\E[4l\E[>9l\E[20l\E[>3l\E[>7h\E[>12l\E[1Q, smir=\E[4h, smkx=\E[>13h, smso=\E[2;7m, smul=\E[4m, pt100w|pt200w|wrenw|fenixw|prime pt100/pt200 in 132-column mode, cols#132, cup=\E[%i%p1%d;%p2%dH, use=pt100, pt250|Prime PT250, rmso@, smso@, use=pt100, pt250w|Prime PT250 in 132-column mode, rmso@, smso@, use=pt100w, #### Qume (qvt) # # Qume, Inc. # 3475-A North 1st Street # San Jose CA 95134 # Vox: (800)-457-4447 # Fax: (408)-473-1510 # Net: josed@techsupp.wyse.com (Jose D'Oliveira) # # Qume was bought by Wyse, but still (as of early 1995) has its own support # group and production division. # # Discontinued Qume models: # # The qvt101 and qvt102 listed here are long obsolete; so is the qvt101+ # built to replace them, and a qvt119+ which was a 101+ with available wide # mode (132 columns). There was a qvt103 which added vt100/vt131 emulations # and an ANSI-compatible qvt203 that replaced it. Qume started producing # ANSI-compatible terminals with the qvt323 and qvt61. # # Current Qume models (as of February 1995): # # All current Qume terminals have ANSI-compatible operation modes. # Qume is still producing the qvt62, which features emulations for other # popular lines such as ADDS, and dual-host capabilities. The qvt82 is # designed for use as a SCO ANSI terminal. The qvt70 is a color terminal # with many emulations including Wyse370, Wyse 325, etc. Their newest # model is the qvt520, which is vt420-compatible. # # There are some ancient printing Qume terminals under `Daisy Wheel Printers' # # If you inherit a Qume without docs, try Ctrl-Shift-Setup to enter its # setup mode. Shift-s should be a configuration save to NVRAM. qvt101|qvt108|qume qvt 101 and QVT 108, xmc#1, use=qvt101+, # This used to have but no or . The BSD termcap # file had . I've done the safe thing and yanked # both. The is from BSD, which also claimed bold=\E( and dim=\E). # What seems to be going on here is that this entry was designed so that # the normal highlight is bold and standout is dim plus something else # (reverse-video maybe? But then, are there two sequences?) # # Added kdch1, kil1, kdl1 based on screenshot -TD: # http://www.vintagecomputer.net/qume/qvt-108/qume_qvt-108_keyboard.jpg qvt101+|qvt101p|qume qvt 101 PLUS product, am, bw, hs, ul, cols#80, lines#24, xmc#0, bel=^G, cbt=\EI, clear=^Z, cnorm=\E.4, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, dsl=\Eg\Ef\r, ed=\EY, el=\ET, flash=\Eb$<200>\Ed, fsl=^M, home=^^, ht=^I, hts=\E1, ich1=\EQ, il1=\EE, ind=^J, invis@, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kf1=^A@\r, kf10=^AI\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, mc4=\EA, mc5=\E@, rmso=\E(, smso=\E0P\E), tbc=\E3, tsl=\Eg\Ef, use=adm+sgr, qvt102|qume qvt 102, cnorm=\E., use=qvt101, # (qvt103: added / based on init string -- esr) qvt103|qume qvt 103, am, xenl, xon, cols#80, it#8, lines#24, vt#3, bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, clear=\E[H\E[2J$<50>, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA, cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, home=\E[H, ht=^I, hts=\EH, ind=^J, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rc=\E8, rev=\E[7m$<2>, ri=\EM$<5>, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m$<2>, sgr0=\E[m$<2>, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m$<2>, smul=\E[4m$<2>, tbc=\E[3g, qvt103-w|qume qvt103 132 cols, cols#132, lines#24, rs2=\E>\E[?3h\E[?4l\E[?5l\E[?8h, use=qvt103, qvt119+|qvt119p|qvt119|qume qvt 119 and 119PLUS terminals, am, hs, mir, msgr, cols#80, lines#24, xmc#0, bel=^G, cbt=\EI, clear=\E*1, cnorm=\E.4, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, cvvis=\E.2, dch1=\EW, dl1=\ER, dsl=\Eg\Ef\r, ed=\Ey, el=\Et, flash=\En0$<200>\En1, fsl=^M, home=^^, ht=^I, hts=\E1, il1=\EE, ind=^J, is2=\EDF\EC\EG0\Er\E(\E%EX, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, mc4=\EA, mc5=\E@, ri=\EJ, rmir=\Er, smir=\Eq, smul=\EG8, tbc=\E3, tsl=\Eg\Ef, use=adm+sgr, qvt119+-25|qvt119p-25|QVT 119 PLUS with 25 data lines, lines#25, use=qvt119+, qvt119+-w|qvt119p-w|qvt119-w|QVT 119 and 119 PLUS in 132 column mode, cols#132, is2=\EDF\EC\EG0\Er\E(\E%\EX\En4, use=qvt119+, qvt119+-25-w|qvt119p-25-w|qvt119-25-w|QVT 119 and 119 PLUS 132 by 25, lines#25, use=qvt119+, qvt203|qvt203+|qume qvt 203 Plus, dch1=\E[P$<7>, dl1=\E[M$<99>, il1=\E[L$<99>, ind=\n$<30>, ip=$<7>, kf0=\E[29~, kf1=\E[17~, kf2=\E[18~, kf3=\E[19~, kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~, kf9=\E[28~, rmir=\E[4l, smir=\E[4h, use=qvt103, qvt203-w|qvt203-w-am|qume qvt 203 PLUS in 132 cols (w/advanced video), cols#132, lines#24, rs2=\E>\E[?3h\E[?4l\E[?5l\E[?8h, use=qvt203, # # Since a command is present for enabling 25 data lines, # a specific terminfo entry may be generated for the 203. # If one is desired for the QVT 119 PLUS then 25 lines must # be selected in the status line (setup line 9). # qvt203-25|QVT 203 PLUS with 25 by 80 column mode, cols#80, lines#25, is2=\E[=40h\E[?3l, use=qvt203, qvt203-25-w|QVT 203 PLUS with 25 by 132 columns, cols#132, lines#25, rs2=\E[?3h\E[=40h, use=qvt203, #### Televideo (tvi) # # TeleVideo # 550 East Brokaw Road # PO Box 49048 95161 # San Jose CA 95112 # Vox: (408)-954-8333 # Fax: (408)-954-0623 # # # These require incredible amounts of padding. # # All of these terminals (912 to 970 and the tvipt) are discontinued. Newer # Televideo terminals are ANSI and PC-ANSI compatible. tvi803|televideo 803, clear=\E*$<10>, use=tvi950, # Vanilla tvi910 -- W. Gish 10/29/86 # Switch settings are: # # S1 1 2 3 4 # D D D D 9600 # D D D U 50 # D D U D 75 # D D U U 110 # D U D D 135 # D U D U 150 # D U U D 300 # D U U U 600 # U D D D 1200 # U D D U 1800 # U D U D 2400 # U D U U 3600 # U U D D 4800 # U U D U 7200 # U U U D 9600 # U U U U 19200 # # S1 5 6 7 8 # U D X D 7N1 (data bits, parity, stop bits) (X means ignored) # U D X U 7N2 # U U D D 7O1 # U U D U 7O2 # U U U D 7E1 # U U U U 7E2 # D D X D 8N1 # D D X U 8N2 # D U D D 8O1 # D U U U 8E2 # # S1 9 Autowrap # U on # D off # # S1 10 CR/LF # U do CR/LF when CR received # D do CR when CR received # # S2 1 Mode # U block # D conversational # # S2 2 Duplex # U half # D full # # S2 3 Hertz # U 50 # D 60 # # S2 4 Edit mode # U local # D duplex # # S2 5 Cursor type # U underline # D block # # S2 6 Cursor down key # U send ^J # D send ^V # # S2 7 Screen colour # U green on black # D black on green # # S2 8 DSR status (pin 6) # U disconnected # D connected # # S2 9 DCD status (pin 8) # U disconnected # D duplex # # S2 10 DTR status (pin 20) # U disconnected # D duplex # (tvi910: removed obsolete ":ma=^Kk^Ll^R^L:"; added , , , # , , , , from SCO entry -- esr) tvi910|televideo model 910, OTbs, am, msgr, cols#80, it#8, lines#24, xmc#1, bel=^G, cbt=\EI, clear=^Z, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=\EY, el=\ET, home=\E=\001\001, hpa=\E]%p1%{32}%+%c, ht=^I, if=/usr/share/tabset/stdcrt, ind=^J, invis@, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, vpa=\E[%p1%{32}%+%c, use=adm+sgr, # From: Alan R. Rogers # as subsequently hacked over by someone at SCO # (tvi910+: removed obsolete ":ma=^K^P^L :" -- esr) # # Here are the 910+'s DIP switches (U = up, D = down, X = don't care): # # S1 1 2 3 4: # D D D D 9600 D D D U 50 D D U D 75 D D U U 110 # D U D D 135 D U D U 150 D U U D 300 D U U U 600 # U D D D 1200 U D D U 1800 U D U D 2400 U D U U 3600 # U U D D 4800 U U D U 7200 U U U D 9600 U U U U 19200 # # S1 5 6 7 8: # U D X D 7N1 U D X U 7N2 U U D D 7O1 U U D U 7O2 # U U U D 7E1 U U U U 7E2 D D X D 8N1 D D X U 8N2 # D U D D 8O1 D U U U 8E2 # # S1 9 Autowrap (U = on, D = off) # S1 10 CR/LF (U = CR/LF on CR received, D = CR on CR received) # S2 1 Mode (U = block, D = conversational) # S2 2 Duplex (U = half, D = full) # S2 3 Hertz (U = 50, D = 60) # S2 4 Edit mode (U = local, D = duplex) # S2 5 Cursor type (U = underline, D = block) # S2 6 Cursor down key (U = send ^J, D = send ^V) # S2 7 Screen colour (U = green on black, D = black on green) # S2 8 DSR status (pin 6) (U = disconnected, D = connected) # S2 9 DCD status (pin 8) (U = disconnected, D = connected) # S2 10 DTR status (pin 20) (U = disconnected, D = connected) # tvi910+|televideo 910+, dch1=\EW, dl1=\ER$<33*>, home=^^, ich1=\EQ, il1=\EE$<33*>, kf0=^A@\r, kf1=^AA\r, kf2=^AB\r, kf3=^AC\r, kf4=^AD\r, kf5=^AE\r, kf6=^AF\r, kf7=^AG\r, kf8=^AH\r, kf9=^AI\r, ll=\E=7\s, use=tvi910, # (tvi912: removed obsolete ":ma=^K^P^L :", added and # from BRL entry -- esr) tvi912|tvi914|tvi920|old televideo 912/914/920, OTbs, OTpt, am, msgr, cols#80, it#8, lines#24, xmc#1, bel=^G, clear=^Z, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER$<33*>, ed=\Ey, el=\ET, flash=\Eb$<50/>\Ed, home=^^, ht=^I, hts=\E1, ich1=\EQ, if=/usr/share/tabset/stdcrt, il1=\EE$<33*>, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, rmso=\Ek, rmul=\Em, smso=\Ej, smul=\El, tbc=\E3, # We got some new tvi912c terminals that act really weird on the regular # termcap, so one of our gurus worked this up. Seems that cursor # addressing is broken. tvi912cc|tvi912 at cowell college, cup@, use=tvi912c, # tvi{912,920}[bc] - TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C # From: Benjamin C. W. Sittler # # Someone has put a scanned copy of the manual online at: # http://vt100.net/televideo/912b-om/ # # These terminals were produced ca. 1979, and had a 12" monochrome # screen, supported 75-9600 baud (no handshaking), monochrome, 7-bit # ASCII, and were generally similar to adm3a but with attributes # (including some with magic cookies), fancy half-duplex mode, and # different bugs. # # Some operations reqire truly incredible amounts of padding. The # insert_line () and delete_line () operations in particular # are so slow as to be nearly unusable. # # There may or may not have been a separate, earlier series of 912/920 # terminals (without the "B" and "C" suffix); I have never seen one, # and the manual only describes the "B" and "C" series. The 912 and 920 # are quite distinct from the 914 and 924, which were much nicer non- # magic-cookie terminals similar to the 950. # # This is a new description for the following TeleVideo terminals, # distinguished chiefly by their keyboards: # # TVI-912B - very odd layout, no function keys (84 keys) # TVI-920B - typewriter layout, no function keys (103 keys) # TVI-912C - very odd layout, function keys F1-F11 (82 keys) # TVI-920C - typewriter layout, function keys F1-F11 (101 keys) # # To choose a setting for the TERM variable, start with the model: # # Model || base name # ----------||----------- # TVI-912B || tvi912b # TVI-912C || tvi912c # TVI-920B || tvi920b # TVI-920C || tvi920c # # Then add a suffix from the following table describing installed options # and how you'd like to use the terminal: # # Use Video | Second | Visual | Magic | Page || feature # Attributes | Page | Bell | Cookies | Print || suffix # ------------|--------|--------|---------|-------||--------- # No | No | N/A | N/A | No || -unk # No | No | N/A | N/A | Yes || -p # No | Yes | No | N/A | No || -2p-unk # No | Yes | No | N/A | Yes || -2p-p # No | Yes | Yes | N/A | No || -vb-unk # No | Yes | Yes | N/A | Yes || -vb-p # Yes | No | N/A | No | N/A || # Yes | No | N/A | Yes | N/A || -mc # Yes | Yes | No | No | N/A || -2p # Yes | Yes | No | Yes | N/A || -2p-mc # Yes | Yes | Yes | No | N/A || -vb # Yes | Yes | Yes | Yes | N/A || -vb-mc # # So e.g. a model 920 C with second page memory option, visual bell # and no magic cookies would be tvi920c-vb; a model 912 B without the # second page memory option and using magic cookies would be # tvi912b-mc # # PADDING # # At 9600 baud, the terminal is prone to overflow its input buffer # during complex operations (insert/delete # character/line/screen/page), and it does not signal this over the # RS232 cable. The typical symptom of an overrun is that the terminal # starts beeping, and output becomes garbled. # # The padding delays in this terminfo were derived using tack(1) # running on a Linux box connected to a TVI-920C with a later-model # (A49C1-style) ROM running at 9600 baud, so your mileage may # vary. The numbers below seem to give the terminal enough time so # that it doesn't overflow its input buffer and start losing # characters. # # KEYS # # If you want to use the FUNCT key on a tvi912[bc], use the # corresponding tvi920[bc] terminfo with FUNCT + ... equivalents from # the following table (these also work on the 920 series): # # Unshifted Function Keys: # # Key | capname|| Equivalent # -----|--------||------------ # F1 | || FUNCT + @ # F2 | || FUNCT + A # F3 | || FUNCT + B # F4 | || FUNCT + C # F5 | || FUNCT + D # F6 | || FUNCT + E # F7 | || FUNCT + F # F8 | || FUNCT + G # F9 | || FUNCT + H # F10 | || FUNCT + I # F11 | || FUNCT + J # # Shifted Function Keys: # # SHIFT + Key | capname|| Equivalent # -------------|--------||------------ # SHIFT + F1 | || FUNCT + ` # SHIFT + F2 | || FUNCT + a # SHIFT + F3 | || FUNCT + b # SHIFT + F4 | || FUNCT + c # SHIFT + F5 | || FUNCT + d # SHIFT + F6 | || FUNCT + e # SHIFT + F7 | || FUNCT + f # SHIFT + F8 | || FUNCT + g # SHIFT + F9 | || FUNCT + h # SHIFT + F10 | || FUNCT + i # SHIFT + F11 | || FUNCT + j # # PORTS AND SWITCH SETTINGS # # Here are the switch settings for the TVI-912B/TVI-920B and # TVI-912C/TVI-920C: # # S1 (Line), and S3 (Printer) baud rates -- put one, and only one, switch down: # 2: 9600 3: 4800 4: 2400 5: 1200 # 6: 600 7: 300 8: 150 9: 75 # 10: 110 # # S2 UART/Terminal options: # Up Down # 1: Not used Not allowed # 2: Alternate character set Standard character set # 3: Full duplex Half duplex # 4: 50 Hz refresh 60 Hz refresh # 5: No parity Send parity # 6: 2 stop bits 1 stop bit # 7: 8 data bits 7 data bits # 8: Not used Not allowed on Rev E or lower # 9: Even parity Odd parity # 10: Steady cursor Blinking cursor # (On Rev E or lower, use W25 instead of switch 10.) # # S5 UART/Terminal options: # Open Closed # 1: P3-6 Not connected DSR received on P3-6 # 2: P3-8 Not connected DCD received on P3-8 # # 3 Open, 4 Open: P3-20 Not connected # 3 Open, 4 Closed: DTR on when terminal is on # 3 Closed, 4 Open: DTR is connected to RTS # 3 Closed, 4 Closed: Not allowed # # 5 Closed: HDX printer (hardware control) Rev. K with extension port off, # all data transmitted out of the modem port (P3) will also be # transmitted out of the printer port (P4). # # 6 Open, 7 Open: Not allowed # 6 Open, 7 Closed: 20ma current loop input # 6 Closed, 7 Open: RS232 input # 6 Closed, 7 Closed: Not allowed # # Jumper options: # If the jumper is installed, the effect will occur (the next time the terminal # is switched on). # # S4/W31: Enables automatic LF upon receipt of CR from # remote or keyboard. # S4/W32: Enables transmission of EOT at the end of Send. If not # installed, a carriage return is sent. # S4/W33: Disables automatic carriage return in column 80. # S4/W34: Selects Page Print Mode as initial condition. If not # installed, Extension Mode is selected. # # NON-STANDARD CAPABILITIES # # Sending or returns a cursor position report in the format # YX\r, where Y and X are as in . This format is described in # and , but it's not clear how one should write an # appropriate scanf string, since we need to subtract %' ' from the # character after reading it. The capability is used by tack(1) # to synchronize during padding tests, and seems to work for that # purpose. # # This description also includes the obsolete termcap capabilities # has_hardware_tabs () and backspaces_with_bs (). # # FEATURES NOT YET DESCRIBED IN THIS TERMINFO # # The FUNCT modifier actually works with every normal key by sending # ^AX\r, where X is the sequence normally sent by that key. This is a # sort of meta key not currently describable in terminfo. # # There are quite a few other keys (especially on the 920 models,) but # they are for the most part only useful in block mode. # # These terminals have lots of forms manipulation features, mainly # useful in block mode, including "clear X to nulls" (vs. "clear X to # spaces"; nulls are sentinels for "send X" operations); "send X" # operations for uploading all or part of the screen; and block-mode # editing keys (they don't send escape sequences, but manipulate video # memory directly). Block mode is used for local editing, and protect # mode (in conjunction with the "write protect" attribute, # a.k.a. half-intensity outside of protect mode) is used to control # which parts of the screen are edited/sent/printed (by ). # # There are at least two major families of ROM, "early" and # A49B1/A49C1; the major difference seems to be that the latter ROMs # support a few extra escape sequences for manipulating the off-screen # memory page, and for sending whole pages back to the host (mainly # useful in block mode.) The descriptions in this file don't use any # of those sequences: set cursor position including page (\E-PYX, # where P is \s for page 0 and ! for page 1 [actually only the LSB of # P is taken into account, so e.g. 0 and 1 work too,] and Y and X are # as in ); read cursor position (\E/), which is analogous to # and returns PYX\r, where P is \s for page 0 or ! for page 1, and YX # are as in , and some "send page" features mainly useful for # forms manipulation. # # The keyboard enable (\E") and disable (\E#) sequences are unused, # except that a terminal reset () enables the keyboard. # # Auto-flip mode (\Ev) is likely faster than the scrolling mode (\Ew) # enabled in , but auto-flip is very jarring so we don't use it. # # BUGS # # At least up to the A49B1 and A49C1 ROMs, there are no \Eb and \Ed # sequences (I infer that in some TeleVideo terminal they may invert # and uninvert the display) so the sequence given here is a # cheesy page-flip instead. # # The back_tab () sequence (\EI) doesn't work according to # tack(1), so it is not included in the descriptions below. # # It's not clear whether auto_left_margin () flag should be set # for these terminals; tack says yes, so it is set here, but this # differs from other descriptions I've seen. # # Extension print mode () echoes all characters to the printer # port [in addition to displaying them] except for the page print mode # sequence (); this is a slight violation of the terminfo # definition for but I don't expect it to cause problems. We # reset to page print mode in since it may have been enabled # accidentally. # # The descriptions with plus signs (+) are building blocks. tvi912b-unk|tvi912c-unk|TeleVideo TVI-912B or TVI-912C (no attributes), OTbs, OTpt, am, bw, cols#80, it#8, lines#24, bel=^G, clear=\032$<50>, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%' '%+%c%p2%' '%+%c, cuu1=^K, dch1=\EW$<30>, dl1=\ER$<1*>$<100>, ed=\Ey$<2*>$<10>, el=\ET$<15>, home=^^, ht=^I, hts=\E1, ich1=\EQ$<30>, if=/usr/share/tabset/stdcrt, il1=\EE$<1*>$<100>, ind=\n$<10>, is2=\Ew\EA\E'\E"\E(, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\177, kent=^M, khome=^^, mc4=\EA, mc5=\E@, rs1=\Ek\010\Em\010\Eq\032, tbc=\E3, u6=%c%c\r, u7=\E?, u8=%c%c\r, u9=\E?, # This isn't included in the basic capabilities because it is # typically unusable in combination with the full range of video # attributes, since the magic cookie attributes turn into ASCII # control characters, and the half-intensity ("protected") attribute # converts all affected characters to spaces. tvi912b+printer|TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C page print support, mc0=\EP, # This uses half-intensity mode () for standout (), and # exposes no other attributes (half-intensity is the only attribute # that does not generate a magic cookie.) tvi912b+dim|TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C half-intensity attribute support, msgr, dim=\E), rmso=\E(, sgr=\E%?%p1%p5%|%t)%e(%;, sgr0=\E(, smso=\E), # Full magic-cookie attribute support, with half-intensity reverse # video for standout. Note that we add a space in the sequence # to give a consistent magic-cookie count. Also note that uses # backspacing (in the TVI-supported order) to apply all requested # attributes with only a single magic cookie. tvi912b+mc|TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C full magic-cookie attribute support, xmc#1, blink=\E\^, dim=\E)\s, invis=\E_, rev=\Ej, rmso=\E(\Ek, rmul=\Em, sgr=\E%?%p1%p5%|%t)%e(%; \010\E%?%p1%p3%|%tj%ek%;\010\E%?%p2%tl%em%;\010\E%?%p7%t_%e%?%p4%t\^%eq%;%;, sgr0=\E(\Ek\010\Em\010\Eq, smso=\E)\Ej, smul=\El, # This uses the second page memory option to save & restore screen # contents. If your terminal is missing the option, this description # should still work, but that has not been tested. tvi912b+2p|TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C second page memory option support, flash=\EK$<100>\EK, rmcup=\032$<50>\EK\E=7\s, smcup=\EK\032$<50>\E(\Ek\010\Em\010\Eq\032$<50>, # This simulates flashing by briefly toggling to the other page # (kludge!) tvi912b+vb|TeleVideo TVI-912B/TVI-920B and TVI-912C/TVI-920C second page memory option "visible bell" support, bel=\EK$<100>\EK, use=tvi912b+2p, # Function keys ( .. are shifted .. ) tvi920b+fn|TeleVideo TVI-920B and TVI-920C function key support, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^A`\r, kf13=^Aa\r, kf14=^Ab\r, kf15=^Ac\r, kf16=^Ad\r, kf17=^Ae\r, kf18=^Af\r, kf19=^Ag\r, kf2=^AA\r, kf20=^Ah\r, kf21=^Ai\r, kf22=^Aj\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, # Combinations of the basic building blocks tvi912b-2p-unk|tvi912c-2p-unk|tvi912b-unk-2p|tvi912c-unk-2p|TeleVideo TVI-912B or TVI-912C (second page memory option; no attributes), use=tvi912b+2p, use=tvi912b-unk, tvi912b-vb-unk|tvi912c-vb-unk|tvi912b-unk-vb|tvi912c-unk-vb|TeleVideo TVI-912B or TVI-912C (second page memory option "visible bell"; no attributes), use=tvi912b+vb, use=tvi912b-unk, tvi912b-p|tvi912c-p|TeleVideo TVI-912B or TVI-912C (no attributes; page print), use=tvi912b+printer, use=tvi912b-unk, tvi912b-2p-p|tvi912c-2p-p|tvi912b-p-2p|tvi912c-p-2p|TeleVideo TVI-912B or TVI-912C (second page memory option; no attributes; page print), use=tvi912b+2p, use=tvi912b+printer, use=tvi912b-unk, tvi912b-vb-p|tvi912c-vb-p|tvi912b-p-vb|tvi912c-p-vb|TeleVideo TVI-912B or TVI-912C (second page memory option "visible bell"; no attributes; page print), use=tvi912b+vb, use=tvi912b+printer, use=tvi912b-unk, tvi912b-2p|tvi912c-2p|TeleVideo TVI-912B or TVI-912C (second page memory option; half-intensity attribute), use=tvi912b+2p, use=tvi912b+dim, use=tvi912b-unk, tvi912b-2p-mc|tvi912c-2p-mc|tvi912b-mc-2p|tvi912c-mc-2p|TeleVideo TVI-912B or TVI-912C (second page memory option; magic cookies), use=tvi912b+2p, use=tvi912b+mc, use=tvi912b-unk, tvi912b-vb|tvi912c-vb|TeleVideo TVI-912B or TVI-912C (second page memory option "visible bell"; half-intensity attribute), use=tvi912b+vb, use=tvi912b+dim, use=tvi912b-unk, tvi912b-vb-mc|tvi912c-vb-mc|tvi912b-mc-vb|tvi912c-mc-vb|TeleVideo TVI-912B or TVI-912C (second page memory option "visible bell"; magic cookies), use=tvi912b+vb, use=tvi912b+mc, use=tvi912b-unk, tvi912b|tvi912c|TeleVideo TVI-912B or TVI-912C (half-intensity attribute), use=tvi912b+dim, use=tvi912b-unk, tvi912b-mc|tvi912c-mc|TeleVideo TVI-912B or TVI-912C (magic cookies), use=tvi912b+mc, use=tvi912b-unk, tvi920b-unk|tvi920c-unk|TeleVideo TVI-920B or TVI-920C (no attributes), use=tvi920b+fn, use=tvi912b-unk, tvi920b-2p-unk|tvi920c-2p-unk|tvi920b-unk-2p|tvi920c-unk-2p|TeleVideo TVI-920B or TVI-920C (second page memory option; no attributes), use=tvi920b+fn, use=tvi912b+2p, use=tvi912b-unk, tvi920b-vb-unk|tvi920c-vb-unk|tvi920b-unk-vb|tvi920c-unk-vb|TeleVideo TVI-920B or TVI-920C (second page memory option "visible bell"; no attributes), use=tvi920b+fn, use=tvi912b+vb, use=tvi912b-unk, tvi920b-p|tvi920c-p|TeleVideo TVI-920B or TVI-920C (no attributes; page print), use=tvi920b+fn, use=tvi912b+printer, use=tvi912b-unk, tvi920b-2p-p|tvi920c-2p-p|tvi920b-p-2p|tvi920c-p-2p|TeleVideo TVI-920B or TVI-920C (second page memory option; no attributes; page print), use=tvi920b+fn, use=tvi912b+2p, use=tvi912b+printer, use=tvi912b-unk, tvi920b-vb-p|tvi920c-vb-p|tvi920b-p-vb|tvi920c-p-vb|TeleVideo TVI-920B or TVI-920C (second page memory option "visible bell"; no attributes; page print), use=tvi920b+fn, use=tvi912b+vb, use=tvi912b+printer, use=tvi912b-unk, tvi920b-2p|tvi920c-2p|TeleVideo TVI-920B or TVI-920C (second page memory option; half-intensity attribute), use=tvi920b+fn, use=tvi912b+2p, use=tvi912b+dim, use=tvi912b-unk, tvi920b-2p-mc|tvi920c-2p-mc|tvi920b-mc-2p|tvi920c-mc-2p|TeleVideo TVI-920B or TVI-920C (second page memory option; magic cookies), use=tvi920b+fn, use=tvi912b+2p, use=tvi912b+mc, use=tvi912b-unk, tvi920b-vb|tvi920c-vb|TeleVideo TVI-920B or TVI-920C (second page memory option "visible bell"; half-intensity attribute), use=tvi920b+fn, use=tvi912b+vb, use=tvi912b+dim, use=tvi912b-unk, tvi920b-vb-mc|tvi920c-vb-mc|tvi920b-mc-vb|tvi920c-mc-vb|TeleVideo TVI-920B or TVI-920C (second page memory option "visible bell"; magic cookies), use=tvi920b+fn, use=tvi912b+vb, use=tvi912b+mc, use=tvi912b-unk, tvi920b|tvi920c|TeleVideo TVI-920B or TVI-920C (half-intensity attribute), use=tvi920b+fn, use=tvi912b+dim, use=tvi912b-unk, tvi920b-mc|tvi920c-mc|TeleVideo TVI-920B or TVI-920C (magic cookies), use=tvi920b+fn, use=tvi912b+mc, use=tvi912b-unk, # Televideo 921 and variants # From: Tim Theisen 22 Sept 1995 # (tvi921: removed :ko=bt: before translation, I see no backtab cap; # also added empty to suppress tic warning -- esr) tvi921|televideo model 921 with sysline same as page & real vi function, OTbs, OTpt, am, hs, xenl, xhp, cols#80, lines#24, xmc#0, acsc=, clear=^Z, cnorm=\E.3, cr=^M, cub1=^H, cud1=^V, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<3/>, cuu1=^K, cvvis=\E.2, dch1=\EW, dl1=\ER$<1*/>, dsl=\Ef\r\Eg, ed=\EY, el=\ET, fsl=\Eg, home=^^, ht=^I, ich1=\EQ, if=/usr/share/tabset/stdcrt, il1=\EE, ind=^J, invis@, is2=\El\E"\EF1\E.3\017\EA\E<, kbs=^H, kclr=^Z, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER$<1*/>, ked=\EY, kel=\ET, kich1=\EQ, kil1=\EE, nel=^M^J, rmacs=\E%%, rmir=, smacs=\E$, smir=, tsl=\Ef\EG0, use=adm+sgr, # without the beeper # (tvi92B: removed :ko=bt: before translation, I see no backtab cap; # also added empty to suppress tic warning -- esr) tvi92B|televideo model 921 with sysline same as page & real vi function & no beeper, am, hs, xenl, xhp, cols#80, lines#24, xmc#0, acsc=, clear=^Z, cnorm=\E.3, cr=^M, cub1=^H, cud1=^V, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<3/>, cuu1=^K, cvvis=\E.2, dch1=\EW, dl1=\ER$<1*/>, dsl=\Ef\r\Eg, ed=\EY, el=\ET, flash=\Eb$<200/>\Ed, fsl=\Eg, home=^^, ht=^I, ich1=\EQ, if=/usr/share/tabset/stdcrt, il1=\EE, ind=^J, invis@, is2=\El\E"\EF1\E.3\017\EA\E<, kbs=^H, kclr=^Z, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER$<1*/>, ked=\EY, kel=\ET, kich1=\EQ, kil1=\EE, nel=^M^J, rmacs=\E%%, smacs=\E$, tsl=\Ef\EG0, use=adm+sgr, # (tvi92D: removed :ko=bt: before translation, I see no backtab cap -- esr) tvi92D|tvi92B with DTR instead of XON/XOFF & better padding, dl1=\ER$<2*/>, il1=\EE$<2*/>, is2=\El\E"\EF1\E.3\016\EA\E<, kdl1=\ER$<2*/>, kil1=\EE$<2*/>, use=tvi92B, # (tvi924: This used to have , . I put the new strings # in from a BSD termcap file because it looks like they do something the # old ones skip -- esr) tvi924|televideo tvi924, am, bw, hs, in, mir, msgr, xenl, xon, cols#80, it#8, lines#24, wsl#80, xmc#0, bel=^G, blink=\EG2, cbt=\EI, civis=\E.0, clear=\E*0, cnorm=\E.3, cr=^M, csr=\E_%p1%{32}%+%c%p2%{32}%+%c, cub1=^H, cud1=^V, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, cvvis=\E.1, dch1=\EW, dl1=\ER, dsl=\Es0\Ef\031, ed=\Ey, el=\Et, flash=\Eb$<200>\Ed, fsl=\031\Es1, home=^^, ht=^I, hts=\E1, ich1=\EQ, if=/usr/share/tabset/stdcrt, il1=\EE, ind=^J, invis@, is1=\017\E%\E'\E(\EDF\EC\EG0\EN0\Es0\Ev0, kbs=^H, kclr=\E*0, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\Ey, kel=\Et, kf0=^A@\r, kf1=^AA\r, kf10=^AJ\r, kf11=^AK\r, kf12=^AL\r, kf13=^AM\r, kf14=^AN\r, kf15=^AO\r, kf2=^AB\r, kf3=^AC\r, kf4=^AD\r, kf5=^AE\r, kf6=^AF\r, kf7=^AG\r, kf8=^AH\r, kf9=^AI\r, khome=^^, kich1=\EQ, kil1=\EE, lf0=F1, lf1=F2, lf10=F11, lf2=F3, lf3=F4, lf4=F5, lf5=F6, lf6=F7, lf7=F8, lf8=F9, lf9=F10, pfkey=\E|%p1%{49}%+%c%p2%s\031, ri=\Ej, tbc=\E3, tsl=\Ef, use=adm+sgr, # TVI925 DIP switches. In each of these, D = Down and U = Up, # # Here are the settings for the external (baud) switches (S1): # # Position Baud # 7 8 9 10 [Printer] # 1 2 3 4 [Main RS232] # ----------------------------------------------------- # D D D D 9600 # D D D U 50 # D D U D 75 # D D U U 110 # D U D D 135 # D U D U 150 # D U U D 300 # D U U U 600 # U D D D 1200 # U D D U 1800 # U D U D 2400 # U D U U 3600 # U U D D 4800 # U U D U 7200 # U U U D 9600 # U U U U 19200 # # # Settings for word length and stop-bits (S1) # # Position Description # 5 6 # --------------------------- # U - 7-bit word # D - 8-bit word # - U 2 stop bits # - D 1 stop bit # # # S2 (external) settings # # Position Up Dn Description # -------------------------------------------- # 1 X Local edit # X Duplex edit (transmit editing keys) # -------------------------------------------- # 2 X 912/920 emulation # X 925 # -------------------------------------------- # 3 X # 4 X No parity # 5 X # -------------------------------------------- # 3 X # 4 X Odd parity # 5 X # -------------------------------------------- # 3 X # 4 X Even parity # 5 X # -------------------------------------------- # 3 X # 4 X Mark parity # 5 X # -------------------------------------------- # 3 X # 4 X Space parity # 5 X # -------------------------------------------- # 6 X White on black display # X Black on white display # -------------------------------------------- # 7 X Half Duplex # 8 X # -------------------------------------------- # 7 X Full Duplex # 8 X # -------------------------------------------- # 7 X Block mode # 8 X # -------------------------------------------- # 9 X 50 Hz # X 60 Hz # -------------------------------------------- # 10 X CR/LF (Auto LF) # X CR only # # S3 (internal switch) settings: # # Position Up Dn Description # -------------------------------------------- # 1 X Keyclick off # X Keyclick on # -------------------------------------------- # 2 X English # 3 X # -------------------------------------------- # 2 X German # 3 X # -------------------------------------------- # 2 X French # 3 X # -------------------------------------------- # 2 X Spanish # 3 X # -------------------------------------------- # 4 X Blinking block cursor # 5 X # -------------------------------------------- # 4 X Blinking underline cursor # 5 X # -------------------------------------------- # 4 X Steady block cursor # 5 X # -------------------------------------------- # 4 X Steady underline cursor # 5 X # -------------------------------------------- # 6 X Screen blanking timer (ON) # X Screen blanking timer (OFF) # -------------------------------------------- # 7 X Page attributes # X Line attributes # -------------------------------------------- # 8 X DCD disconnected # X DCD connected # -------------------------------------------- # 9 X DSR disconnected # X DSR connected # -------------------------------------------- # 10 X DTR Disconnected # X DTR connected # -------------------------------------------- # # (tvi925: BSD has . I got and from there -- esr) tvi925|televideo 925, OTbs, am, bw, hs, ul, cols#80, lines#24, xmc#1, bel=^G, cbt=\EI, clear=^Z, cnorm=\E.4, cr=^M, cub1=^H, cud1=^V, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, cvvis=\E.2, dch1=\EW, dl1=\ER, dsl=\Eh, ed=\EY, el=\ET, flash=\Eb$<200>\Ed, fsl=^M\Eg, home=^^, ht=^I, hts=\E1, ich1=\EQ, il1=\EE, ind=^J, invis@, is2=\El\E", kbs=^H, kclr=^Z, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, ri=\Ej, tbc=\E3, tsl=\Eh\Ef, use=adm+sgr, # TeleVideo 925 from Mitch Bradley via BRL # to avoid "magic cookie" standout glitch: tvi925-hi|TeleVideo Model 925 with half intensity standout mode, xmc@, kbs=^H, kcub1=^H, kcud1=^J, rmso=\E(, smso=\E), use=tvi925, # From: Todd Litwin 28 May 1993 # Originally Tim Curry, Univ. of Central Fla., 5/21/82 # for additional capabilities, # The following tvi descriptions from B:pjphar and virus!mike # is for all 950s. It sets the following attributes: # full duplex (\EDF) write protect off (\E() # conversation mode (\EC) graphics mode off (\E%) # white on black (\Ed) auto page flip off (\Ew) # turn off status line (\Eg) clear status line (\Ef\r) # normal video (\E0) monitor mode off (\EX or \Eu) # edit mode (\Er) load blank char to space (\Ee\040) # line edit mode (\EO) enable buffer control (^O) # protect mode off (\E\047) duplex edit keys (\El) # program unshifted send key to send line all (\E016) # program shifted send key to send line unprotected (\E004) # set the following to nulls: # field delimiter (\Ex0\200\200) # line delimiter (\Ex1\200\200) # start-protected field delimiter (\Ex2\200\200) # end-protected field delimiter (\Ex3\200\200) # set end of text delimiter to carriage return/null (\Ex4\r\200) # # TVI 950 Switch Setting Reference Charts # # TABLE 1: # # S1 1 2 3 4 5 6 7 8 9 10 # +-----------------------+-----+-----+-----------------------+ # | Computer Baud Rate |Data |Stop | Printer Baud Rate | # | |Bits |Bits | | # +------+-----------------------+-----+-----+-----------------------+ # | Up | See | 7 | 2 | See | # +------+-----------------------+-----+-----+-----------------------+ # | Down | TABLE 2 | 8 | 1 | TABLE 2 | # +------+-----------------------+-----+-----+-----------------------+ # # # S2 1 2 3 4 5 6 7 8 9 10 # +-----+-----+-----------------+-----+-----------+-----+-----+ # |Edit |Cursr| Parity |Video|Transmiss'n| Hz |Click| # +------+-----+-----+-----------------+-----+-----------+-----+-----+ # | Up | Dplx|Blink| See |GonBk| See | 60 | Off | # +------+-----+-----+-----------------+-----+-----------+-----+-----+ # | Down |Local|St'dy| TABLE 3 |BkonG| CHART | 50 | On | # +------+-----+-----+-----------------+-----+-----------+-----+-----+ # # TABLE 2: # # +-----------+-----+-----+-----+-----+-----------+ # | Display | 1 | 2 | 3 | 4 | Baud | # +-----------+-----+-----+-----+-----+ | # | Printer | 7 | 8 | 9 | 10 | Rate | # +-----------+-----+-----+-----+-----+-----------+ # | D | D | D | D | 9600 | # | U | D | D | D | 50 | # | D | U | D | D | 75 | # | U | U | D | D | 110 | # | D | D | U | D | 135 | # | U | D | U | D | 150 | # | D | U | U | D | 300 | # | U | U | U | D | 600 | # | D | D | D | U | 1200 | # | U | D | D | U | 1800 | # | D | U | D | U | 2400 | # | U | U | D | U | 3600 | # | D | D | U | U | 4800 | # | U | D | U | U | 7200 | # | D | U | U | U | 9600 | # | U | U | U | U | 19200 | # +-----+-----+-----+-----+-----------+ # # TABLE 3: # +-----+-----+-----+-----------+ # | 3 | 4 | 5 | Parity | # +-----+-----+-----+-----------+ # | X | X | D | None | # | D | D | U | Odd | # | D | U | U | Even | # | U | D | U | Mark | # | U | U | U | Space | # +-----+-----+-----+-----------+ # X = don't care # # CHART: # +-----+-----+-----------------+ # | 7 | 8 | Communication | # +-----+-----+-----------------+ # | D | D | Half Duplex | # | D | U | Full Duplex | # | U | D | Block | # | U | U | Local | # +-----+-----+-----------------+ # # (tvi950: early versions had obsolete ":ma=^Vj^Kk^Hh^Ll^^H:". # I also inserted and ; the :ko: string indicated that # should be present and all tvi native modes use the same string for this. # Finally, note that BSD has cud1=^V. -- esr) tvi950|televideo 950, OTbs, am, hs, mir, msgr, xenl, xon, cols#80, it#8, lines#24, xmc#1, acsc=b\011c\014d\re\ni\013, bel=^G, cbt=\EI, clear=\E*, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, dsl=\Eg\Ef\r, ed=\Ey, el=\Et, flash=\Eb$<200/>\Ed, fsl=^M, home=^^, ht=^I, hts=\E1, ich1=\EQ, il1=\EE, ind=^J, invis@, is2=\EDF\EC\Ed\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\El\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0\Ef\r, kbs=^H, kcbt=\EI, kclr=\E*, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\Ey, kel=\Et, kf0=^A0\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, mc4=\Ea, mc5=\E`, ri=\Ej, rmacs=^X, rmir=\Er, smacs=^U, smir=\Eq, tbc=\E3, tsl=\Eg\Ef, use=adm+sgr, # # is for 950 with two pages adds the following: # set 48 line page (\E\\2) # place cursor at page 0, line 24, column 1 (\E-07 ) # set local (no send) edit keys (\Ek) # # two page 950 adds the following: # when entering ex, set 24 line page (\E\\1) # when exiting ex, reset 48 line page (\E\\2) # place cursor at 0,24,1 (\E-07 ) # set duplex (send) edit keys (\El) when entering vi # set local (no send) edit keys (\Ek) when exiting vi # tvi950-2p|televideo950 w/2 pages, is2=\EDF\EC\Ed\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\Ek\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0\E\\2\E-07 \011, rmcup=\E\\2\E-07\s, rmkx=\Ek, smcup=\E\\1\E-07\s, smkx=\El, use=tvi950, # # is for 950 with four pages adds the following: # set 96 line page (\E\\3) # place cursor at page 0, line 24, column 1 (\E-07 ) # # four page 950 adds the following: # when entering ex, set 24 line page (\E\\1) # when exiting ex, reset 96 line page (\E\\3) # place cursor at 0,24,1 (\E-07 ) # tvi950-4p|televideo950 w/4 pages, is2=\EDF\EC\Ed\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\Ek\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0\E\\3\E-07 \011, rmcup=\E\\3\E-07\s, rmkx=\Ek, smcup=\E\\1\E-07\s, smkx=\El, use=tvi950, # # for reverse video 950 changes the following: # set reverse video (\Ed) # # set vb accordingly (\Ed ...delay... \Eb) # tvi950-rv|televideo950 rev video, flash=\Ed$<200/>\Eb, is2=\EDF\EC\Eb\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\El\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0, use=tvi950, # tvi950-rv-2p uses the appropriate entries from 950-2p and 950-rv tvi950-rv-2p|televideo950 rev video w/2 pages, flash=\Ed$<200/>\Eb, is2=\EDF\EC\Eb\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\Ek\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0\E\\2\E-07\s, rmcup=\E\\2\E-07\s, rmkx=\Ek, smcup=\E\\1\E-07\s, smkx=\El, use=tvi950, # tvi950-rv uses the appropriate entries from 950-4p and 950-rv tvi950-rv-4p|televideo950 rev video w/4 pages, flash=\Ed$<200/>\Eb, is2=\EDF\EC\Eb\EG0\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\Ek\E016\E004\Ex0\0\0\Ex1\0\0\Ex2\0\0\011\Ex3\0\0\Ex4\r\0\E\\3\E-07\s, rmcup=\E\\3\E-07\s, rmkx=\Ek, smcup=\E\\1\E-07\s, smkx=\El, use=tvi950, # From: Andreas Stolcke # (tvi955: removed obsolete ":ma:=^Vj^Kk^Hh^Ll^^H"; # removed incorrect (and overridden) ":do=^J:"; fixed broken continuations in # the :rs: string, inserted the implied by the termcap :ko: string. Note # the :ko: string had :cl: in it, which means that one of the original # , had to be wrong; set because that's what # the 950 has. Finally, corrected the string to match the 950 and what # ko implies -- esr) # If the BSD termcap file was right, would # also work. tvi955|televideo 955, OTbs, mc5i, msgr@, it#8, xmc@, acsc=0_`RjHkGlFmEnIoPqKsQtMuLvOwNxJ, blink=\EG2, civis=\E.0, cnorm=\E.2, cud1=^V, cup=\E[%i%p1%d;%p2%dH, cvvis=\E.1, dim=\E[=5h, ind@, invis=\EG1, is2=\E[=3l\EF1\Ed\EG0\E[=5l\E%\El, kctab=\E2, khts=\E1, knp=\EK, kpp=\EJ, krmir=\EQ, ktbc=\E3, mc0=\EP, rmacs=\E%%, rmam=\E[=7l, rmxon=^N, rs1=\EDF\EC\Eg\Er\EO\E'\E(\Ew\EX\Ee \017\E0P\E6\0\E0p\E4\0\Ef\r, sgr0=\EG0\E[=5l, smacs=\E$, smam=\E[=7h, smxon=^O, use=tvi950, tvi955-w|955-w|televideo955 w/132 cols, cols#132, is2=\E[=3h\EF1\Ed\EG0\E[=5l\E%\El, use=tvi955, # use half-intensity as normal mode, full intensity as tvi955-hb|955-hb|televideo955 half-bright, bold=\E[=5l, dim@, is2=\E[=3l\EF1\Ed\EG0\E[=5h\E%\El, sgr0=\EG0\E[=5h, use=tvi955, # From: Humberto Appleton , 880521 UT Austin # (tvi970: removed ":sg#0:"; removed =\E[m, =\E[m; # added ////// from BRL. # According to BRL we could have =\E>, =\E= but I'm not sure what # it does to the function keys. I deduced /. # also added empty to suppress tic warning, -- esr) tvi970|televideo 970, OTbs, OTpt, am, da, db, mir, msgr, cols#80, it#8, lines#24, acsc=, cbt=\E[Z, clear=\E[H\E[2J, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\ED, cuf1=\E[C, cup=\E[%i%p1%d;%p2%df, cuu1=\EM, cvvis=\E[1Q, dch1=\E[P, dl1=\E[M, dsl=\Eg\Ef\r, ed=\E[J, el=\E[K, flash=\E[5m$<200/>\E[m, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, il1=\E[L, is2=\E<\E[?21l\E[19h\E[1Q\E[10l\E[7l\E[H\E[2J, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E?a, kf2=\E?b, kf3=\E?c, kf4=\E?d, kf5=\E?e, kf6=\E?f, kf7=\E?g, kf8=\E?h, kf9=\E?i, khome=\E[H, ri=\EM, rmacs=\E(B, rmam=\E[?7h, rmcup=, rmir=\E[4l, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smacs=\E(B, smam=\E[?7l, smcup=\E[?20l\E[?7h\E[1Q, smir=\E[4h, smso=\E[7m, smul=\E[4m, vpa=\E[%i%p1%dd, tvi970-vb|televideo 970 with visual bell, flash=\E[?5h\0\0\0\0\0\0\0\0\0\0\0\0\0\E[?5l, use=tvi970, tvi970-2p|televideo 970 with using 2 pages of memory, rmcup=\E[H\E[J\E[V, smcup=\E[U\E[?20l\E[?7h\E[1Q, use=tvi970, # Works with vi and rogue. NOTE: Esc v sets autowrap on, Esc u sets 80 chars # per line (rather than 40), Esc K chooses the normal character set. Not sure # padding is needed, but adapted from the tvi920c termcap. The and # strings are klutzy, but at least use no screen space. # (tvipt: removed obsolete ":ma=^Kk^Ll^R^L:". I wish we knew , # its absence means =\Ev isn't safe to use. -- esr) # From: Gene Rochlin 9/19/84. # The ////, and caps are from BRL, which says: # F1 and F2 should be programmed as ^A and ^B; required for UNIFY. tvipt|televideo personal terminal, OTbs, am, cols#80, lines#24, cbt=\EI, clear=^Z, cub1=^H, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dl1=\ER$<5*>, ed=\EY, el=\ET, home=^^, if=/usr/share/tabset/stdcrt, il1=\EE$<5*>, is2=\Ev\Eu\EK, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf0=^A, kf1=^B, khome=^^, mc4=^T, mc5=^R, rmso=\EF, rmul=\EF, smso=\EG1@A\EH, smul=\EG1B@\EH, # From: Nathan Peterson , 03 Sep 1996 tvi9065|televideo 9065, am, bw, chts, hs, mc5i, mir, msgr, xenl, xon, cols#80, it#8, lh#1, lines#25, lm#0, lw#9, ma#4, nlab#8, vt#0, wnum#0, wsl#30, acsc='r0_jhkglfmeniopqksqtmulvownxj, bel=^G, blink=\EG2, bold=\EG\,, cbt=\EI, civis=\E.0, clear=^Z, cnorm=\E.3, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^V, cuf=\E[%p1%dC, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu=\E[%p1%dA, cuu1=^K, cvvis=\E.2, dch=\E[%p1%dP, dch1=\EW, dim=\EGp, dl=\E[%p1%dM, dl1=\ER, dsl=\E_30\r, ech=\E[%p1%d@, ed=\EY, el=\ET, flash=\Eb$<15>\Ed, fsl=^M, home=^^, ht=^I, hts=\E1, ich=\E[%p1%d@, if=/usr/share/tabset/stdcrt, il=\E[%p1%dL, il1=\EE, ind=^J, indn=\E[%p1%dS, invis=\EG1, ip=$<3>, is1=\E"\E%\E'\E(\EG@\EO\EX\E[=5l\E[=6l\E[=7h\Ed\Er, is2=\EF2\EG0\E\\L, is3=\E<\E[=4l\E[=8h, kHOM=\E\s\s\s, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, ll=\E[25;1H, mc0=\E[0;0i, mc4=\Ea, mc5=\E`, nel=^M^J, pfkey=\E|%p1%{48}%+%c3%p2%s\031, pfloc=\E|%p1%{48}%+%c2%p2%s\031, pfx=\E|%p1%{48}%+%c1%p2%s\031, pln=\E_%p1%{63}%+%c%p2%s\r, prot=\E&, rep=\E[%p2%db%p1%c, rev=\EG4, rf=/usr/share/tabset/stdcrt, ri=\Ej, rin=\E[%p1%dT, rmacs=\E%%, rmam=\E[=7l, rmcup=\E.3\Er\E[1;25r\E[25;0H, rmdc=\0, rmir=\Er, rmln=\E[4;1v, rmso=\EG0, rmul=\EG0, rmxon=^N, rs1=\EC\EDF\E[0;0v\E[8;1v\E[=65l, rs2=\E.b\E[10;20v\E[14;1v\E[3;0v\E[7;0v\E[=11.h\E[=12.h\E[=13.h\E[=14.h\E[=15l\E[=20h\E[=60l\E[=61h\E[=9l\E[=10l\E[=21l\E[=23l\E[=3l\E_40\E_50\En\Ew\Ee \Ex0\0\0\Ex1\0\0\Ex2\0\0\Ex3\0\0\Ex4\0\0\E1, rs3=\E[=19h\E.3\E9\E0O\0\0\0\0\0\E0o\0\0\0\0\0\E0J\177\0\0\0\0, sgr=\EG0%?%p1%t\EGt%;%?%p2%t\EG8%;%?%p3%t\EG4%;%?%p4%t\EG2%;%?%p5%t\EGp%;%?%p6%t\EG\,%;%?%p7%t\EG1%;%?%p8%t\E&%;%?%p9%t\E$%e\E%%%;, sgr0=\EG0\E%, smacs=\E$, smam=\E=7h, smcup=\E.2, smdc=\Er, smir=\Eq, smln=\E[4;2v, smso=\EGt, smul=\EG8, smxon=^O, tbc=\E3, tsl=\E[4;1v\E_30, uc=\EG8\EG0, #### Visual (vi) # # In September 1993, Visual Technology of Westboro, Massachusetts, # merged with White Pine Software of Nashua, New Hampshire. # # White Pine Software may be contacted at +1 603/886-9050. # Or visit White Pine on the World Wide Web at URL http://www.wpine.com. # # Visual 50 from Beau Shekita, BTL-Whippany # Recently I hacked together the following termcap for Visual # Technology's Visual 50 terminal. It's a slight modification of # the vt52 termcap. # It's intended to run when the Visual 50 is in vt52 emulation mode # (I know what you're thinking; if it's emulating a vt52, then why # another termcap? Well, it turns out that the Visual 50 can handle # and db(?) among other things, which the vt52 can't) # The termcap works OK for the most part. The only problem is on # character inserts. The whole line gets painfully redrawn for each # character typed. Any suggestions? # Beau's entry is combined with the vi50 entry from University of Wisconsin. # Note especially the function. - are really l4-l6 in # disguise; - are really l1-l3. vi50|visual 50, OTbs, OTpt, am, da, db, msgr, cols#80, it#8, lines#24, OTnl=^J, bel=^G, cbt=\Ez$<4/>, clear=\EH\EJ, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM$<3*/>, ed=\EJ, el=\EK$<16/>, home=\EH, ht=^I, il1=\EL, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\EP, kf2=\EQ, kf3=\ER, kf4=\EV, kf5=\EE, kf6=\E], kf7=\EL, kf8=\Ev, kf9=\EM, khome=\EH, nel=^M^J, ri=\EI, rmso=\ET, rmul=\EW, smso=\EU, smul=\ES, # this one was BSD & SCO's vi50 vi50adm|visual 50 in adm3a mode, am, msgr, cols#80, it#8, lines#24, bel=^G, clear=^Z, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dl1=\EM, ed=\Ek, el=\EK, home=\EH, ht=^I, il1=\EL, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\EH, rmso=\ET, smso=\EU, # From: Jeff Siegal vi55|Visual 55, OTbs, am, mir, msgr, cols#80, it#8, lines#24, clear=\Ev, csr=\E_%p1%{65}%+%c%p2%{65}%+%c, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\Ew, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL, is2=\Ev\E_AX\Eb\EW\E9P\ET, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, ri=\EI, rmir=\Eb, rmso=\ET, smir=\Ea, smso=\EU, # Visual 200 from BRL # The following switch settings are assumed for normal operation: # FULL_DUPLEX SCROLL CR # AUTO_NEW_LINE_ON VISUAL_200_EMULATION_MODE # Other switches may be set for operator convenience or communication # requirements. # Character insertion is kludged in order to get around the "beep" misfeature. # (This cap is commented out because / is more efficient -- esr) # Supposedly "4*" delays should be used for , , , , # and strings, but we seem to get along fine without them. vi200|visual 200, OTbs, OTpt, am, mir, msgr, OTkn#10, cols#80, it#8, lines#24, acsc=, bel=^G, cbt=\Ez, clear=\Ev, cnorm=\Ec, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\Ed, dch1=\EO, dim=\E4, dl1=\EM, ed=\Ey, el=\Ex, home=\EH, ht=^I, hts=\E1, il1=\EL, ind=^J, invis=\Ea, kbs=^H, kclr=\Ev, kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EO, kdl1=\EM, ked=\EJ, kel=\Et, kf0=\E?p, kf1=\E?q, kf2=\E?r, kf3=\E?s, kf4=\E?t, kf5=\E?u, kf6=\E?v, kf7=\E?w, kf8=\E?x, kf9=\E?y, khome=\EH, khts=\E1, kich1=\Ei, kil1=\EL, krmir=\Ej, mc0=\EH\E], mc4=\EX, mc5=\EW, ri=\EI, rmacs=\EG, rmkx=\E>, rmso=\E3, rs1=\E3\Eb\Ej\E\El\EG\Ec\Ek\EX, sgr0=\E3\Eb, smacs=\EF, smkx=\E=, smso=\E4, tbc=\Eg, # The older Visuals didn't come with function keys. This entry uses # and so that the keypad keys can be used as function keys. # If your version of vi doesn't support function keys you may want # to use vi200-f. vi200-f|visual 200 no function keys, is2=\E3\Eb\Ej\E\\\El\EG\Ed\Ek, kf0=\E?p, kf1=\E?q, kf2=\E?r, kf3=\E?s, kf4=\E?t, kf5=\E?u, kf6=\E?v, kf7=\E?w, kf8=\E?x, kf9=\E?y, rmkx=\E>, rmso@, smkx=\E=, smso@, use=vi200, vi200-rv|visual 200 reverse video, cnorm@, cvvis@, ri@, rmso=\E3, smso=\E4, use=vi200, # the function keys are programmable but we don't reprogram them to their # default values with because programming them is very verbose. maybe # an initialization file should be made for the 300 and they could be stuck # in it. # (vi300: added / based on init string -- esr) vi300|visual 300 ansi x3.64, am, bw, mir, xenl, cols#80, lines#24, bel=^G, cbt=\E[Z, clear=\E[H\E[2J, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P$<40>, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il1=\E[L, ind=^J, is2=\E[7s\E[2;3;4;20;?5;?6l\E[12;?7h\E[1Q\E[0;1(D\E[8s, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E_A\E\\, kf2=\E_B\E\\, kf3=\E_C\E\\, kf4=\E_D\E\\, kf5=\E_E\E\\, kf6=\E_F\E\\, kf7=\E_G\E\\, kf8=\E_H\E\\, kf9=\E_I\E\\, khome=\E[H, ri=\EM, rmam=\E[?7l, rmir=\E[4l, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smir=\E[4h, smso=\E[1m, smul=\E[4m, # some of the vi300s have older firmware that has the command # sequence for setting editing extent reversed. vi300-old|visual 300 with old firmware (set edit extent reversed), is2=\E[7s\E[2;3;4;20;?5;?6l\E[12;?7h\E[2Q\E[0;1(D\E[8s, use=vi300, # Visual 500 prototype entry from University of Wisconsin. # The best place to look for the escape sequences is page A1-1 of the # Visual 500 manual. The initialization sequence given here may be # overkill, but it does leave out some of the initializations which can # be done with the menus in set-up mode. # The :xp: line below is so that emacs can understand the padding requirements # of this slow terminal. :xp: is 10 time the padding factor. # (vi500: removed unknown :xp#4: termcap; # also added empty to suppress tic warning -- esr) vi500|visual 500, am, mir, msgr, cols#80, it#8, lines#33, acsc=, cbt=\Ez$<4/>, clear=\Ev$<6*/>, cr=^M, csr=\E(%p1%{32}%+%c%p2%{32}%+%c, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EO$<3*/>, dl1=\EM$<3*/>, ed=\Ey$<3*/>, el=\Ex$<16/>, home=\EH, ht=\011$<8/>, il1=\EL\Ex$<3*/>, ind=^J, is2=\E3\E\001\E\007\E\003\Ek\EG\Ed\EX\El\E>\Eb\E\\, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\EH, nel=^M^J, rmacs=^O, rmir=\Ej, rmso=\E^G, rmul=\E^C, smacs=^N, smir=\Ei, smso=\E^H, smul=\E^D, # The visual 550 is a visual 300 with tektronix graphics, # and with 33 lines. clear screen is modified here to # also clear the graphics. vi550|visual 550 ansi x3.64, lines#33, clear=\030\E[H\E[2J, use=vi300, vi603|visual603|visual 603, hs, mir, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, csr=\E[%i%p1%d;%p2%dr, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, dsl=\EP2;1~\E\\, ed=\E[J, el=\E[K, fsl=\E\\, il1=\E[L, ind=\ED, is1=\E>\E[?3l\E[?4l\E[?7h\E[?8h\E[1;24r, rev=\E[7m, ri=\EM, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, sgr0=\E[m, smir=\E[4h, smso=\E[7m, smul=\E[4m, tsl=\EP2~, use=vt100, #### Wyse (wy) # # Wyse Technology # 3471 North First Street # San Jose, CA 95134 # Vox: (408)-473-1200 # Fax: (408) 473-1222 # Web: http://www.wyse.com # # Wyse sales can be reached by phone at 1-800-GET-WYSE. Tech support is at # (800)-800-WYSE (option 5 gets you a human). There's a Web page at the # obvious address, . They keep terminfo entries at # https://web.archive.org/web/19970712022641/http://www.wyse.co.uk/support/appnotes/idxappnt.htm # # # Wyse bought out Link Technology, Inc. in 1990 and closed it down in 1995. # They now own the Qume and Amdek brands, too. So these are the people to # talk with about all Link, Qume, and Amdek terminals. # # These entries include a few small fixes. # I canceled the bel capacities in the vb entries. # I made two trivial syntax fixes in the wyse30 entry. # I made some entries relative to adm+sgr. # # # Note: The wyse75, wyse85, and wyse99 have been discontinued. # Although the Wyse 30 can support more than one attribute # it requires magic cookies to do so. Many applications do not # function well with magic cookies. The following terminfo uses # the protect mode to support one attribute (dim) without cookies. # If more than one attribute is needed then the wy30-mc terminfo # should be used. # wy30|wyse30|Wyse 30, am, bw, hs, mc5i, mir, msgr, xon, cols#80, lh#1, lines#24, lw#8, ma#1, nlab#8, wsl#45, acsc=0wa_h[jukslrmqnxqzttuyv]wpxv, bel=^G, cbt=\EI, civis=\E`0, clear=\E+$<80>, cnorm=\E`1, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<10>, dim=\E`7\E), dl1=\ER$<1>, dsl=\EF\r, ed=\EY$<80>, el=\ET, flash=\E`8$<100/>\E`9, fsl=^M, home=^^, ht=\011$<1>, hts=\E1, il1=\EE$<2>, ind=\n$<2>, ip=$<2>, is2=\E'\E(\E\^3\E`9\016\024, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kent=\E7, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, khome=^^, kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, krpl=\Er, ll=^^^K, mc0=\EP, mc4=^T, mc5=^X, nel=^M^J, pfx=\Ez%p1%{63}%+%c%p2%s\177, pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E`7\E), ri=\Ej$<3>, rmacs=\EH^C, rmir=\Er, rmln=\EA11, rmso=\E(, sgr=%?%p1%p5%p8%|%|%t\E`7\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;, sgr0=\E(\EH\003, smacs=\EH^B, smir=\Eq, smln=\EA10, smso=\E`7\E), tbc=\E0, tsl=\EF, # # This terminal description uses the non-hidden attribute mode # (with magic cookie). # # (wy30-mc: added to suppress tic warning --esr) wy30-mc|wyse30-mc|wyse 30 with magic cookies, msgr@, ma@, xmc#1, blink=\EG2, dim=\EGp, prot=\EG0\E), rmacs=\EG0\EH\003, rmcup=\EG0, rmso=\EG0, sgr=\EG%{48}%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;, sgr0=\EG0\E(\EH\003, smacs=\EG0\EH\002, smcup=, smso=\EG4, use=wy30, use=adm+sgr, # The mandatory pause used by does not work with # older versions of terminfo. If you see this effect then # unset xon and delete the / from the delay. # i.e. change $<100/> to $<100> wy30-vb|wyse30-vb|wyse 30 visible bell, bel@, use=wy30, # # The Wyse 50 can support one attribute (e.g. Dim, Inverse, # Normal) without magic cookies by using the protect mode. # The following description uses this feature, but when more # than one attribute is put on the screen at once, all attributes # will be changed to be the same as the last attribute given. # The Wyse 50 can support more attributes when used with magic # cookies. The wy50-mc terminal description uses magic cookies # to correctly handle multiple attributes on a screen. # wy50|wyse50|Wyse 50, am, bw, hs, mc5i, mir, msgr, xon, cols#80, lh#1, lines#24, lw#8, ma#1, nlab#8, wsl#45, acsc=0wa_h[jukslrmqnxqzttuyv]wpxv, bel=^G, cbt=\EI, civis=\E`0, clear=\E+$<20>, cnorm=\E`1, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<1>, dim=\E`7\E), dl1=\ER, dsl=\EF\r, ed=\EY$<20>, el=\ET, flash=\E`8$<100/>\E`9, fsl=^M, home=^^, ht=^I, hts=\E1, il1=\EE, ind=\n$<2>, ip=$<1>, is1=\E`\:\E`9$<30>, is2=\016\024\E'\E(, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=^^^K, mc0=\EP, mc4=^T, mc5=^X, nel=^M^J, pfx=\Ez%p1%{63}%+%c%p2%s\177, pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E`7\E), rev=\E`6\E), ri=\Ej, rmacs=\EH^C, rmir=\Er, rmln=\EA11, rmso=\E(, sgr=%?%p1%p3%|%t\E`6\E)%e%p5%p8%|%t\E`7\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;, sgr0=\E(\EH\003, smacs=\EH^B, smir=\Eq, smln=\EA10, smso=\E`6\E), tbc=\E0, tsl=\EF, # # This terminal description uses the non-hidden attribute mode # (with magic cookie). # # The mandatory pause used by flash does not work with some # older versions of terminfo. If you see this effect then # unset and delete the / from the delay. # i.e. change $<100/> to $<100> # (wy50-mc: added to suppress tic warning --esr) wy50-mc|wyse50-mc|wyse 50 with magic cookies, msgr@, ma@, xmc#1, blink=\EG2, dim=\EGp, prot=\EG0\E), rev=\EG4, rmacs=\EG0\EH\003, rmcup=\EG0, rmso=\EG0, sgr=\EG%{48}%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;, sgr0=\EG0\E(\EH\003, smacs=\EG0\EH\002, smcup=, smso=\EGt, use=wy50, use=adm+sgr, wy50-vb|wyse50-vb|wyse 50 visible bell, bel@, use=wy50, wy50-w|wyse50-w|wyse 50 132-column, cols#132, lw#7, nlab#16, wsl#97, cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<2>, is1=\E`;\E`9$<30>, use=wy50, wy50-wvb|wyse50-wvb|wyse 50 132-column visible bell, bel@, use=wy50-w, # # The Wyse 350 is a Wyse 50 with color. # Unfortunately this means that it has magic cookies. # The color attributes are designed to overlap the reverse, dim and # underline attributes. This is nice for monochrome applications # because you can make underline stuff green (or any other color) # but for true color applications it's not so hot because you cannot # mix color with reverse, dim or underline. # To further complicate things one of the attributes must be # black (either the foreground or the background). In reverse video # the background changes color with black letters. In normal video # the foreground changes colors on a black background. # This terminfo uses some of the more advanced features of curses # to display both color and blink. In the final analysis I am not # sure that the wy350 runs better with this terminfo than it does # with the wy50 terminfo (with user adjusted colors). # # The mandatory pause used by flash does not work with # older versions of terminfo. If you see this effect then # unset xon and delete the / from the delay. # i.e. change $<100/> to $<100> # # Bug: The capability resets attributes. wy350|wyse350|Wyse 350, am, bw, hs, mc5i, mir, xon, colors#8, cols#80, lh#1, lines#24, lw#8, ncv#55, nlab#8, pairs#8, wsl#45, xmc#1, acsc=0wa_h[jukslrmqnxqzttuyv]wpxv, bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E+$<20>, cnorm=\E`1, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<1>, dim=\EGp, dl1=\ER, dsl=\EF\r, ed=\EY$<20>, el=\ET, flash=\E`8$<100/>\E`9, fsl=^M, home=^^, ht=^I, hts=\E1, il1=\EE, ind=\n$<2>, ip=$<1>, is1=\E`\:\E`9$<30>, is2=\016\024\E'\E(, is3=\E%?, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=^^^K, mc0=\EP, mc4=^T, mc5=^X, nel=^M^J, oc=\E%?, op=\EG0, pfx=\Ez%p1%{63}%+%c%p2%s\177, pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\EG0\E), ri=\Ej, rmacs=\EG0\EH\003, rmir=\Er, rmln=\EA11, setb=, setf=%?%p1%{0}%=%t%{76}%e%p1%{1}%=%t%{64}%e%p1%{2}%=%t%{8}%e%p1%{3}%=%t%{72}%e%p1%{4}%=%t%{4}%e%p1%{5}%=%t%{68}%e%p1%{6}%=%t%{12}%e%p1%{7}%=%t%{0}%;%PC\EG%gC%gA%+%{48}%+%c, sgr=%{0}%?%p4%t%{2}%|%;%?%p7%t%{1}%|%;%PA\EG%?%gC%t%gC%e%{0}%?%p1%t%{4}%|%;%?%p2%t%{8}%|%;%?%p3%t%{4}%|%;%?%p5%t%{64}%|%;%;%gA%+%{48}%+%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;, sgr0=\EG0\E(\EH\003%{0}%PA%{0}%PC, smacs=\EG0\EH\002, smir=\Eq, smln=\EA10, tbc=\E0, tsl=\EF, use=adm+sgr, wy350-vb|wyse350-vb|wyse 350 visible bell, bel@, use=wy350, wy350-w|wyse350-w|wyse 350 132-column, cols#132, lw#7, nlab#16, wsl#97, cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<2>, is1=\E`;\E`9$<30>, use=wy350, wy350-wvb|wyse350-wvb|wyse 350 132-column visible bell, bel@, use=wy350-w, # # This terminfo description is untested. # The wyse100 emulates an adm31, so the adm31 entry should work. # wy100|wyse 100, hs, mir, cols#80, lines#24, xmc#1, bel=^G, clear=\E;, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, dsl=\EA31, ed=\EY, el=\ET, fsl=^M, il1=\EE, ind=^J, invis@, is2=\Eu\E0, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, khome=\E{, rmir=\Er, smir=\Eq, tsl=\EF, use=adm+sgr, # # The Wyse 120/150 has most of the features of the Wyse 60. # This terminal does not need padding up to 9600 baud! # should be set but the clear screen fails when in # alt-charset mode. Try \EcE\s\s\E+\s if the screen is really clear # then set . # wy120|wyse120|wy150|wyse150|Wyse 120/150, am, bw, hs, km, mc5i, mir, msgr, xon, cols#80, it#8, lh#1, lines#24, lw#8, nlab#8, pb#9601, wsl#45, acsc=+/\,.0[a2fxgqh1ihjYk?lZm@nEqDtCu4vAwBx3yszr{c~~, bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E+$<50>, cnorm=\E`1, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<7>, dim=\EGp, dl1=\ER$<3>, dsl=\EF\r, ed=\EY$<50>, el=\ET$<4>, flash=\E`8$<100/>\E`9, fsl=^M, home=^^, ht=\011$<1>, hts=\E1, il1=\EE$<3>, ind=\n$<3>, ip=$<2>, is1=\EcB0\EcC1, is2=\Ed$\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016\024\El, is3=\EwJ\Ew1$<150>, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=^^^K, mc0=\EP, mc4=^T, mc5=\Ed#, nel=\r\n$<3>, pfloc=\EZ2%p1%{63}%+%c%p2%s\177, pfx=\EZ1%p1%{63}%+%c%p2%s\177, pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<2>, rmacs=\EcD, rmam=\Ed., rmcup=\Ew1, rmir=\Er, rmln=\EA11, rmxon=\Ec20, rs1=\E~!\E~4$<30>, rs2=\EeF\E`\:$<70>, rs3=\EwG\Ee($<100>, sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c, sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/, smcup=\Ew0, smir=\Eq, smln=\EA10, smso=\EGt, smxon=\Ec21, tbc=\E0, tsl=\EF, use=adm+sgr, # wy120-w|wyse120-w|wy150-w|wyse150-w|wyse 120/150 132-column, cols#132, lw#7, nlab#16, wsl#97, cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<12>, ip=$<4>, rs2=\E`;$<70>, use=wy120, # wy120-25|wyse120-25|wy150-25|wyse150-25|wyse 120/150 80-column 25-lines, lh@, lines#25, lw@, nlab@, pln@, rs3=\EwG\Ee)$<100>, use=wy120, # wy120-25-w|wyse120-25-w|wy150-25-w|wyse150-25-w|wyse 120/150 132-column 25-lines, lh@, lines#25, lw@, nlab@, pln@, rs3=\EwG\Ee)$<100>, use=wy120-w, # wy120-vb|wyse120-vb|wy150-vb|wyse150-vb|Wyse 120/150 visible bell, bel@, use=wy120, # wy120-w-vb|wy120-wvb|wyse120-wvb|wy150-w-vb|wyse150-w-vb|Wyse 120/150 132-column visible bell, bel@, use=wy120-w, # # The Wyse 60 is like the Wyse 50 but with more padding. # The reset strings are slow and the pad times very depending # on other parameters such as font loading. I have tried # to follow the following outline: # # -> set personality # -> set number of columns # -> set number of lines # -> select the proper font # -> do the initialization # -> set up display memory (2 pages) # # The Wyse 60's that have vt100 emulation are slower than the # older Wyse 60's. This change happened mid-1987. # The capabilities effected are # # The meta key is only half right. This terminal will return the # high order bit set when you hit CTRL-function_key # # It may be useful to assign two function keys with the # values \E=(\s look at old data in page 1 # \E=W, look at bottom of page 1 # where \s is a space ( ). # # Note: # The Wyse 60 runs faster when the XON/XOFF # handshake is turned off. # # (wy60: we use \E{ rather than ^^ for home (both are documented) to avoid # a bug reported by Robert Dunn, -- esr) wy60|wyse60|Wyse 60, am, bw, hs, km, mc5i, mir, msgr, cols#80, lh#1, lines#24, lw#8, nlab#8, wsl#45, acsc=+/\,.0[a2fxgqh1ihjYk?lZm@nEqDtCu4vAwBx3yszr{c~~, bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E+$<100>, cnorm=\E`1, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<11>, dclk=\E`b, dim=\EGp, dl1=\ER$<5>, dsl=\EF\r, ed=\EY$<100>, el=\ET, flash=\E`8$<100/>\E`9, fsl=^M, home=\E{, ht=\011$<1>, hts=\E1, il1=\EE$<4>, ind=\n$<5>, ip=$<3>, is1=\EcB0\EcC1, is2=\Ed$\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016\024\El, is3=\EwJ\Ew1$<150>, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=\E{^K, mc0=\EP, mc4=^T, mc5=\Ed#, nel=\r\n$<3>, pfloc=\EZ2%p1%{63}%+%c%p2%s\177, pfx=\EZ1%p1%{63}%+%c%p2%s\177, pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<7>, rmacs=\EcD, rmam=\Ed., rmclk=\E`c, rmcup=\Ew1, rmir=\Er, rmln=\EA11, rmxon=\Ec20, rs1=\E~!\E~4$<150>, rs2=\EeG$<150>, rs3=\EwG\Ee($<200>, sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c, sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/, smcup=\Ew0, smir=\Eq, smln=\EA10, smso=\EGt, smxon=\Ec21, tbc=\E0, tsl=\EF, use=adm+sgr, # wy60-w|wyse60-w|wyse 60 132-column, cols#132, lw#7, nlab#16, wsl#97, cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<16>, ip=$<5>, rs2=\EeF$<150>\E`;$<150>, use=wy60, # wy60-25|wyse60-25|wyse 60 80-column 25-lines, lh@, lines#25, lw@, nlab@, pln@, rs3=\EwG\Ee)$<200>, use=wy60, wy60-25-w|wyse60-25-w|wyse 60 132-column 25-lines, lh@, lines#25, lw@, nlab@, pln@, rs3=\EwG\Ee)$<200>, use=wy60-w, # wy60-42|wyse60-42|wyse 60 80-column 42-lines, lines#42, clear=\E+$<260>, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<2>, dch1=\EW$<16>, dl1=\ER$<11>, ed=\Ey$<260>, il1=\EE$<11>, ind=\n$<9>, ip=$<5>, is1=\EcB2\EcC3, nel=\r\n$<6>, ri=\Ej$<10>, rs3=\Ee*$<150>, use=wy60, wy60-42-w|wyse60-42-w|wyse 60 132-column 42-lines, cols#132, lw#7, nlab#16, wsl#97, clear=\E+$<260>, cup=\Ea%i%p1%dR%p2%dC$<2>, dch1=\EW$<19>, ed=\Ey$<260>, home=\036$<2>, ip=$<6>, nel=\r\n$<11>, rs2=\EeF$<150>\E`;$<150>, use=wy60-42, # wy60-43|wyse60-43|wyse 60 80-column 43-lines, lh@, lines#43, lw@, nlab@, pln@, rs3=\Ee+$<150>, use=wy60-42, wy60-43-w|wyse60-43-w|wyse 60 132-column 43-lines, lh@, lines#43, lw@, nlab@, pln@, rs3=\Ee+$<150>, use=wy60-42-w, # wy60-vb|wyse60-vb|Wyse 60 visible bell, bel@, use=wy60, wy60-w-vb|wy60-wvb|wyse60-wvb|Wyse 60 132-column visible bell, bel@, use=wy60-w, # The Wyse-99GT looks at lot like the Wyse 60 except that it # does not have the 42/43 line mode. In the Wyse-60 the "lines" # setup parameter controls the number of lines on the screen. # For the Wyse 99GT the "lines" setup parameter controls the # number of lines in a page. The screen can display 25 lines max. # The Wyse-99GT also has personalities for the VT220 and # Tektronix 4014. But this has no bearing on the native mode. # # (msgr) should be set but the clear screen fails when in # alt-charset mode. Try \EcE\s\s\E+\s if the screen is really clear # then set msgr, else use msgr@. # # u0 -> enter Tektronix mode # u1 -> exit Tektronix mode # wy99gt|wyse99gt|Wyse 99gt, msgr@, clear=\E+$<130>, dch1=\EW$<7>, dl1=\ER$<4>, ed=\Ey$<130>, el=\Et$<5>, flash=\E`8$<100/>\E`9, ht=\011$<1>, il1=\EE$<4>, ind=\n$<4>, ip=$<2>, is3=\Ew0$<20>, nel@, ri=\Ej$<3>, rmcup=\Ew0, rs2=\E`\:$<150>, smcup=\Ew1, u0=\E~>\E8, u1=\E[42h, use=wy60, # wy99gt-w|wyse99gt-w|wyse 99gt 132-column, cols#132, lw#7, nlab#16, wsl#97, clear=\E+$<160>, cup=\Ea%i%p1%dR%p2%dC$<2>, dch1=\EW$<9>, ed=\Ey$<160>, ip=$<4>, rs2=\E`;$<150>, use=wy99gt, # wy99gt-25|wyse99gt-25|wyse 99gt 80-column 25-lines, lh@, lines#25, lw@, nlab@, pln@, rs2=\E`\:$<150>, rs3=\EwG\Ee)$<200>, use=wy99gt, # wy99gt-25-w|wyse99gt-25-w|wyse 99gt 132-column 25-lines, lh@, lines#25, lw@, nlab@, pln@, rs2=\E`;$<150>, use=wy99gt-w, # wy99gt-vb|wyse99gt-vb|Wyse 99gt visible bell, bel@, use=wy99gt, # wy99gt-w-vb|wy99gt-wvb|wyse99gt-wvb|Wyse 99gt 132-column visible bell, bel@, use=wy99gt-w, # Can't set tabs! Other bugs (ANSI mode only): # - can't redefine function keys (anyway, key redefinition in ANSI mode # is too much complex to be described); # - meta key can't be described (the terminal forgets it when reset); # The xon-xoff handshaking can't be disabled while in ansi personality, so # emacs can't work at speed greater than 9600 baud. No padding is needed at # this speed. # dch1 has been commented out because it causes annoying glittering when # vi deletes one character at the beginning of a line with tabs in it. # dch makes sysgen(1M) have a horrible behaviour when deleting # a screen and makes screen(1) behave badly, so it is disabled too. The nice # thing is that vi goes crazy if smir-rmir are present and both dch-dch1 are # not, so smir and rmir are commented out as well. # From: Francesco Potorti` , 24 Aug 1998 wy99-ansi|Wyse WY-99GT in ansi mode (int'l PC keyboard), am, km, mc5i, mir, msgr, xenl, cols#80, it#8, lines#25, vt#3, acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J$<200>, cnorm=\E[34h\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD$<1>, cub1=\010$<1>, cud=\E[%p1%dB, cud1=\ED, cuf=\E[%p1%dC$<1>, cuf1=\E[C$<1>, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, cvvis=\E[34l\E[?25h, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J$<8*>, el=\E[K$<1>, el1=\E[1K$<1>, enacs=\E)0, flash=\E[?5h$<30/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n$<1>, invis=\E[8m, is2=\E7\E[1r\E8\E[2;3;4;13;20;34;39;36l\E[12;16;34h\E[?1;3;4;5;10;18l\E[?7;8;25h\E>\E[?5W\E(B\017\E[4i, kbs=^H, kcbt=\E[z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf17=\E[K, kf18=\E[31~, kf19=\E[32~, kf2=\EOQ, kf20=\E[33~, kf21=\E[34~, kf22=\E[35~, kf23=\E[1~, kf24=\E[2~, kf3=\EOR, kf4=\EOS, kf5=\E[M, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, ll=\E[24E, mc0=\E[?19h, mc4=\E[4i, mc5=\E[5i, nel=\EE, prot=\E[1"q, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l, rmso=\E[27m, rmul=\E[24m, rs2=\E[61"p\E[40h\E[?6l\E[1r\E[2;3;4;13;20;34;39;36l\E[12;16;34h\E[?1;3;4;5;10;18l\E[?7;8;25h\E>\E[?5W\E(B\017\E[24E\E[4i, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%O%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m\E[%?%p8%t1%;"q%?%p9%t\016%e\017%;, sgr0=\E[m\017\E["q, smacs=^N, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h, smso=\E[7m, smul=\E[4m, vpa=\E[%i%p1%dd, # This is the american terminal. Here tabs work fine. # From: Francesco Potorti` , 24 Aug 1998 wy99a-ansi|Wyse WY-99GT in ansi mode (US PC keyboard), hts=\EH, is3=\E[?5l, rs3=\E[?5l, tbc=\E[3g, use=wy99-ansi, # This terminal (firmware version 02) has a lot of bugs: # - can't set tabs; # - other bugs in ANSI modes (see above). # This description disables handshaking when using cup. This is because # GNU emacs doesn't like Xon-Xoff handshaking. This means the terminal # cannot be used at speeds greater than 9600 baud, because at greater # speeds handshaking is needed even for character sending. If you use # DTR handshaking, you can use even greater speeds. # From: Francesco Potorti` , 24 Aug 1998 wy99f|wy99fgt|wy-99fgt|Wyse WY-99GT (int'l PC keyboard), am, bw, hs, km, mc5i, mir, msgr, xon, cols#80, it#8, lines#25, wsl#46, acsc='x+y.w_vi~j(k'l&m%n)o9q*s8t-u.v\,w+x=, bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E'\E(\032, cnorm=\E`4\E`1, cr=^M, cub1=^H, cud1=\Ej, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, cvvis=\E`2\E`1, dch1=\EW, dim=\EGp, dl1=\ER, dsl=\EF\r, ed=\EY$<8*>, el=\ET$<8>, enacs=\Ec@1J$<2000>, flash=\E\^1$<30/>\E\^0, fsl=^M, home=^^, ht=^I, il1=\EE, ind=^J, invis=\EG3, is2=\Eu\Ee6\EC\EDF\Ec21\Ec31\Ec62\Ec72\Ee;\016\E'\EeL\E`9\E\^0\E`1\E`4\Ee.\E`\:\Ee1\EG0\E(\Ed/\Ee4\Ed*\EO\E`I\Er\Ee"\EcD\024, ka1=^^, ka3=\EJ, kbs=^H, kc1=\ET, kc3=\EK, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^A`\r, kf14=^Aa\r, kf15=^Ab\r, kf16=^Ac\r, kf17=^Ad\r, kf18=^Ae\r, kf19=^Af\r, kf2=^AA\r, kf20=^Ag\r, kf21=^Ah\r, kf22=^Ai\r, kf23=^Aj\r, kf24=^Ak\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, kprt=\EP, mc0=\EP, mc4=^T, mc5=\Ed#, nel=^_, prot=\E), rev=\EG4, ri=\Ej, rmacs=\EcD, rmam=\Ed., rmcup=\Ec21\Ec31, rmir=\Er, rmso=\EG0, rmxon=\Ec20\Ec30, rs2=\Eu\E~4\Ee6\EC\EDF\Ec21\Ec31\Ec62\Ec72\Ee;\016\E'\EeL\E`9\E\^0\E`1\E`4\Ee.\E`\:\Ee)\Ew\EwG\Ew0\Ee1\EG0\E(\Ed/\Ee4\Ed*\EO\E`I\Er\Ee"\Ec@0B\EcD\024, sgr=\E(\EG%{48}%?%p1%p3%O%t%{4}%+%;%?%p2%t%{8}%+%;%?%p4%t%{2}%+%;%?%p5%t%{64}%+%;%?%p7%t%{1}%+%;%c%?%p8%t\E)%;%?%p9%t\EcE%e\EcD%;, sgr0=\E(\EG0, smacs=\EcE, smam=\Ed/, smcup=\Ec20\Ec30, smir=\Eq, smso=\EG4, smxon=\Ec21\Ec31, tsl=\EF, # This is the american terminal. Here tabs work. # From: Francesco Potorti` , 24 Aug 1998 wy99fa|wy99fgta|wy-99fgta|Wyse WY-99GT (US PC keyboard), hts=\E1, tbc=\E0, use=wy99f, # # The Wyse 160 is combination of the WY-60 and the WY-99gt. # The reset strings are slow and the pad times very depending # on other parameters such as font loading. I have tried # to follow the following outline: # # -> set personality # -> set number of columns # -> set number of lines # -> select the proper font # -> do the initialization # -> set up display memory (2 pages) # # The display memory may be used for either text or graphics. # When "Display Memory = Shared" the terminal will have more pages # but garbage may be left on the screen when you switch from # graphics to text. If "Display Memory = Unshared" then the # text area will be only one page long. # # (wy160: we use \E{ rather than ^^ for home (both are documented) to avoid # a bug reported by Robert Dunn, -- esr) wy160|wyse160|Wyse 160, am, bw, hs, km, mc5i, mir, msgr, cols#80, lh#1, lines#24, lw#8, nlab#8, wsl#38, acsc=+/\,.0[a2fxgqh1ihjYk?lZm@nEqDtCu4vAwBx3yszr{c~~, bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E+$<30>, cnorm=\E`1, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<5>, dclk=\E`b, dim=\EGp, dl1=\ER$<1>, dsl=\EF\r, ed=\EY$<30>, el=\ET$<5>, flash=\E`8$<100/>\E`9, fsl=^M, home=\E{, ht=^I, hts=\E1, il1=\EE$<1>, ind=\n$<1>, ip=$<2>, is1=\EcB0\EcC1, is2=\Ed$\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016\024\El, is3=\Ew0$<100>, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=\E{^K, mc0=\EP, mc4=^T, mc5=\Ed#, nel=\r\n$<1>, pfloc=\EZ2%p1%{63}%+%c%p2%s\177, pfx=\EZ1%p1%{63}%+%c%p2%s\177, pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<1>, rmacs=\EcD, rmam=\Ed., rmclk=\E`c, rmcup=\Ew0, rmir=\Er, rmln=\EA11, rmxon=\Ec20, rs1=\E~!\E~4$<70>, rs2=\E`\:$<100>, rs3=\EwG\Ee($<140>, sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c, sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/, smcup=\Ew1, smir=\Eq, smln=\EA10, smso=\EGt, smxon=\Ec21, tbc=\E0, tsl=\EF, use=adm+sgr, # wy160-w|wyse160-w|wyse 160 132-column, cols#132, lw#7, nlab#16, wsl#90, cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<9>, rs2=\EeF$<150>\E`;$<150>, use=wy160, # wy160-25|wyse160-25|wyse 160 80-column 25-lines, lh@, lines#25, lw@, nlab@, pln@, rs3=\EwG\Ee)$<200>, use=wy160, wy160-25-w|wyse160-25-w|wyse 160 132-column 25-lines, lh@, lines#25, lw@, nlab@, pln@, rs3=\EwG\Ee)$<200>, use=wy160-w, # wy160-42|wyse160-42|wyse 160 80-column 42-lines, lines#42, clear=\E+$<50>, dl1=\ER$<2>, ed=\Ey$<50>, il1=\EE$<2>, ind=\n$<2>, is1=\EcB2\EcC3, nel=\r\n$<2>, ri=\Ej$<2>, rs3=\Ee*$<150>, use=wy160, wy160-42-w|wyse160-42-w|wyse 160 132-column 42-lines, cols#132, lw#7, nlab#16, wsl#90, cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<8>, ip=$<3>, rs2=\EeF$<150>\E`;$<150>, use=wy160-42, # wy160-43|wyse160-43|wyse 160 80-column 43-lines, lh@, lines#43, lw@, nlab@, pln@, rs3=\Ee+$<150>, use=wy160-42, wy160-43-w|wyse160-43-w|wyse 160 132-column 43-lines, lh@, lines#43, lw@, nlab@, pln@, rs3=\Ee+$<150>, use=wy160-42-w, # wy160-vb|wyse160-vb|Wyse 160 visible bell, bel@, use=wy160, wy160-w-vb|wy160-wvb|wyse160-wvb|Wyse 160 132-column visible bell, bel@, use=wy160-w, # # The Wyse 75 is a vt100 lookalike without advanced video. # # The Wyse 75 can support one attribute (e.g. Dim, Inverse, # Underline) without magic cookies. The following description # uses this capability, but when more than one attribute is # put on the screen at once, all attributes will be changed # to be the same as the last attribute given. # The Wyse 75 can support more attributes when used with magic # cookies. The wy75-mc terminal description uses magic cookies # to correctly handle multiple attributes on a screen. # wy75|wyse75|wyse 75, am, hs, mc5i, mir, msgr, xenl, xon, cols#80, lines#24, ma#1, pb#1201, wsl#78, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J$<30>, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr$<2>, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP$<3*>, dch1=\E[P$<3>, dim=\E[0t\E[2m, dl=\E[%p1%dM$<1*>, dl1=\E[M, dsl=\E[>\,\001\001\E[>-\001\001, ech=\E[%p1%dX, ed=\E[J$<30>, el=\E[K$<3>, el1=\E[1K$<3>, enacs=\E)0, flash=\E[30h\E\,\E[30l$<250>, fsl=^A, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@$<1*>, il=\E[%p1%dL$<2*>, il1=\E[L$<2>, ind=\n$<2>, ip=$<1>, is1=\E[2;4;20;30l\E[?1;10l\E[12h\E[?7;8;25h, is2=\E>\E(B\E)0\017, is3=\E[m, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdl1=\E[M, kel=\E[K, kf1=\E[?5i, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\E[?3i, kf20=\E[34~, kf21=\E[35~, kf3=\E[2i, kf4=\E[@, kf5=\E[M, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, khome=\E[H, kich1=\E[@, kil1=\E[L, knp=\E[6~, kpp=\E[5~, kprt=\E[?5i, kslt=\E[4~, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[1t\E[7m, ri=\EM$<2>, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E>, rmso=\E[m, rmul=\E[m, rs1=\E[13l\E[3l\E!p, rs2=\E[35h\E[?3l$<80>, rs3=\E[?5l, sc=\E7, sgr=%?%p5%t\E[0t%;%?%p3%p1%|%t\E[1t%;%?%p2%t\E[2t%;%?%p4%t\E[3t%;%?%p1%p2%p3%p4%p5%|%|%|%|%t\E[7m%e\E[m%;%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h, smkx=\E[?1l\E[?7h\E=, smso=\E[1t\E[7m, smul=\E[2t\E[4m, tbc=\E[3g, tsl=\E[>\,\001, use=vt220+keypad, # # This terminal description uses the non-hidden attribute mode # (with magic cookie). # wy75-mc|wyse75-mc|wyse 75 with magic cookies, msgr@, ma@, xmc#1, blink=\E[2p, dim=\E[1p, invis=\E[4p, is3=\E[m\E[p, rev=\E[16p, rmacs=\E[0p\017, rmso=\E[0p, rmul=\E[0p, sgr=\E[%{0}%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{16}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{1}%|%;%?%p7%t%{4}%|%;%dp%?%p9%t\016%e\017%;, sgr0=\E[0p\017, smacs=\E[0p\016, smso=\E[17p, smul=\E[8p, use=wy75, wy75-vb|wyse75-vb|wyse 75 with visible bell, pb@, bel@, use=wy75, wy75-w|wyse75-w|wyse 75 in 132 column mode, cols#132, wsl#130, rs2=\E[35h\E[?3h$<80>, use=wy75, wy75-wvb|wyse75-wvb|wyse 75 with visible bell 132 columns, pb@, bel@, use=wy75-w, # # Wyse 85 emulating a vt220 7 bit mode. # 24 line screen with status line. # # The vt220 mode permits more function keys but it wipes out # the escape key. I strongly recommend that be set to # escape (esc). # The terminal may have to be set for 8 data bits and 2 stop # bits for the arrow keys to work. # The Wyse 85 runs faster with XON/XOFF enabled. Also the # and work best when XON/XOFF is set. and # leave trash on the screen when used without XON/XOFF. # wy85|wyse85|wyse 85, am, hs, mc5i, mir, msgr, xenl, xon, cols#80, it#8, lines#24, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J$<110>, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH$<1>, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP$<3*>, dch1=\E[P$<3>, dim=\E[2m, dl=\E[%p1%dM$<3*>, dl1=\E[M$<3>, dsl=\E[40l, ech=\E[%p1%dX, ed=\E[J$<110>, el=\E[K$<1>, el1=\E[1K, enacs=\E)0, flash=\E[30h\E\,\E[30l$<300>, fsl=\E[1;24r\E8, home=\E[H, ht=\011$<1>, hts=\EH, ich=\E[%p1%d@$<4*>, il=\E[%p1%dL$<5*>, il1=\E[L$<5>, ind=\n$<3>, invis=\E[8m, ip=$<3>, is1=\E[62;1"p\E[?5W, is2=\E[2;4;20;30l\E[?1;4;10;16l\E[12h\E[?7;8;25h$<16>, is3=\E>\E(B\E)0\017\E[m, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, khome=\E[26~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, ri=\EM$<3>, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E>, rmso=\E[m, rmul=\E[m, rs1=\E[13l\E[3l\E!p, rs2=\E[35h\E[?3l$<70>, rs3=\E[?5l, sc=\E7, sgr=\E[0%?%p2%t;4%;%?%p3%p1%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h, smkx=\E[?1l\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[40h\E7\E[25;%i%p1%dH, use=vt220+keypad, # # Wyse 85 with visual bell. wy85-vb|wyse85-vb|wyse 85 with visible bell, bel@, flash=\E[30h\E\,\E[30l$<300>, use=wy85, # # Wyse 85 in 132-column mode. wy85-w|wyse85-w|wyse 85 in 132-column mode, cols#132, wsl#132, rs2=\E[35h\E[?3h$<70>, use=wy85, # # Wyse 85 in 132-column mode with visual bell. wy85-wvb|wyse85-wvb|wyse 85 with visible bell 132-columns, bel@, use=wy85-w, # From: Kevin Turner , 12 Jul 1998 # This copes with an apparent firmware bug in the wy85. He writes: # "What I did was change leave the terminal cursor keys set to Normal # (instead of application), and change \E[ to \233 for all the keys in # terminfo. At one point, I found some reference indicating that this # terminal bug (not sending \E[) was acknowledged by Wyse (so it's not just # me), but I can't find that and the server under my bookmark to "Wyse # Technical" isn't responding. So there's the question of wether the wy85 # terminfo should reflect the manufactuer's intended behaviour of the terminal # or the actual." wy85-8bit|wyse85-8bit|wyse 85 in 8-bit mode, am, hs, mc5i, mir, msgr, xenl, xon, cols#80, it#8, lines#24, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J$<110>, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH$<1>, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP$<3*>, dch1=\E[P$<3>, dim=\E[2m, dl=\E[%p1%dM$<3*>, dl1=\E[M$<3>, dsl=\E[40l, ech=\E[%p1%dX, ed=\E[J$<110>, el=\E[K$<1>, el1=\E[1K, enacs=\E)0, flash=\E[30h\E\,\E[30l$<300>, fsl=\E[1;24r\E8, home=\E[H, ht=\011$<1>, hts=\EH, ich=\E[%p1%d@$<4*>, il=\E[%p1%dL$<5*>, il1=\E[L$<5>, ind=\n$<3>, invis=\E[8m, ip=$<3>, is1=\E[62;1"p\E[?5W, is2=\E[2;4;20;30l\E[?1;4;10;16l\E[12h\E[?7;8;25h$<16>, is3=\E>\E(B\E)0\017\E[m, ka1=\EOw, ka3=\EOy, kb2=\EOu, kbs=^H, kc1=\EOq, kc3=\EOs, kcub1=\233D, kcud1=\233B, kcuf1=\233C, kcuu1=\233A, kdch1=\2333~, kent=\EOM, kf1=\EOP, kf10=\23321~, kf11=\23323~, kf12=\23324~, kf13=\23325~, kf14=\23326~, kf15=\23328~, kf16=\23329~, kf17=\23331~, kf18=\23332~, kf19=\23333~, kf2=\EOQ, kf20=\23334~, kf3=\EOR, kf4=\EOS, kf6=\23317~, kf7=\23318~, kf8=\23319~, kf9=\23320~, kfnd=\2331~, khlp=\23328~, khome=\23326~, kich1=\2332~, knp=\2336~, kpp=\2335~, kslt=\2334~, lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, ri=\EM$<3>, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E>, rmso=\E[m, rmul=\E[m, rs1=\E[13l\E[3l\E!p, rs2=\E[35h\E[?3l$<70>, rs3=\E[?5l, sc=\E7, sgr=\E[0%?%p2%t;4%;%?%p3%p1%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;+m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h, smkx=\E[?1l\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[40h\E7\E[25;%i%p1%dH, # # Wyse 185 emulating a vt320 7 bit mode. # # This terminal always displays 25 lines. These lines may be used # as 24 data lines and a terminal status line (top or bottom) or # 25 data lines. The 48 and 50 line modes change the page size # and not the number of lines on the screen. # # The Compose Character key can be used as a meta key if changed # by set-up. # wy185|wyse185|wyse 185, am, hs, km, mc5i, mir, msgr, xenl, xon, cols#80, it#8, lines#24, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J$<40>, cnorm=\E[34h\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr$<20>, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?25h\E[34l, dch=\E[%p1%dP$<3>, dch1=\E[P$<3>, dim=\E[2m, dl=\E[%p1%dM$<2*>, dl1=\E[M$<2>, dsl=\E7\E[99;0H\E[K\E8, ech=\E[%p1%dX, ed=\E[J$<40>, el=\E[K, el1=\E[1K, enacs=\E)0, flash=\E[30h\E\,\E[30l$<100>, fsl=\E[1;24r\E8, home=\E[H, hpa=\E[%i%p1%d`, ht=^I, hts=\EH, ich=\E[%p1%d@$<2>, il=\E[%p1%dL$<3*>, il1=\E[L$<3>, ind=\n$<2>, invis=\E[8m, ip=$<4>, is1=\E[?5W, is2=\E[2;4;20;30l\E[?1;4;10;16l\E[12h\E[?7;8;25h, is3=\E>\E(B\E)0\017\E[m, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, khome=\E[26~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, ri=\EM$<2>, rmacs=^O, rmam=\E[?7l, rmcup=\E[ R, rmir=\E[4l, rmkx=\E>, rmso=\E[27m, rmul=\E[24m, rs1=\E[13l\E[3l\E\\\E[63;1"p\E[!p, rs2=\E[35h\E[?3l, rs3=\E[?5l\E[47h\E[40l\E[r, sc=\E7, sgr=\E[0%?%p2%t;4%;%?%p3%p1%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E[ Q, smir=\E[4h, smkx=\E[?1l\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E7\E[99;%i%p1%dH, vpa=\E[%i%p1%dd, use=vt220+keypad, # # Wyse 185 with 24 data lines and top status (terminal status) wy185-24|wyse185-24|wyse 185 with 24 data lines, hs@, dsl@, fsl@, rs3=\E[?5l\E[47h\E[40l\E[1;24r, tsl@, use=wy185, # # Wyse 185 with visual bell. wy185-vb|wyse185-vb|wyse 185+flash, bel@, use=wy185, # # Wyse 185 in 132-column mode. wy185-w|wyse185-w|wyse 185 in 132-column mode, cols#132, wsl#132, dch=\E[%p1%dP$<7>, dch1=\E[P$<7>, ich=\E[%p1%d@$<7>, ip=$<7>, rs2=\E[35h\E[?3h, use=wy185, # # Wyse 185 in 132-column mode with visual bell. wy185-wvb|wyse185-wvb|wyse 185+flash+132 cols, bel@, use=wy185-w, # wy325 terminfo entries # Done by Joe H. Davis 3-9-92 # lines 25 columns 80 # wy325|wyse325|Wyse epc, am, bw, hs, mc5i, mir, cols#80, lh#1, lines#24, lw#8, nlab#8, pb#9601, wsl#45, acsc=+/\,.0[a2fxgqh1ihjYk?lZm@nEqDtCu4vAwBx3yszr{c~~, bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E+$<50>, cnorm=\E`1, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<7>, dim=\EGp, dl1=\ER$<3>, dsl=\EF\r, ed=\EY$<50>, el=\ET$<4>, flash=\E`8$<100/>\E`9, fsl=^M, home=^^, ht=^I, hts=\E1, il1=\EE$<3>, ind=\n$<3>, ip=$<2>, is1=\EcB0\EcC1, is2=\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016\024\El, is3=\Ew0$<16>, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\Eq, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=^^^K, mc0=\EP, mc4=^T, mc5=\Ed#, pfloc=\EZ2%p1%{63}%+%c%p2%s\177, pfx=\EZ1%p1%{63}%+%c%p2%s\177, pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<2>, rmacs=\EcD, rmam=\Ed., rmcup=\Ew0, rmir=\Er, rmln=\EA11, rs1=\E~!\E~4$<30>, rs2=\EeF\E`\:$<70>, rs3=\EwG\Ee($<100>, sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c, sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/, smcup=\Ew1, smir=\Eq, smln=\EA10, smso=\EGt, tbc=\E0, tsl=\EF, use=adm+sgr, # # lines 24 columns 80 vb # wy325-vb|wyse325-vb|wyse-325 with visual bell, bel@, use=wy325, # # lines 24 columns 132 # wy325-w|wyse325-w|wy325w-24|wyse-325 in wide mode, cols#132, lw#7, nlab#16, wsl#97, cup=\Ea%i%p1%dR%p2%dC, dch1=\EW$<12>, ip=$<4>, rs2=\E`;$<70>, use=wy325, # # lines 25 columns 80 # wy325-25|wyse325-25|wy325-80|wyse-325|wyse-325 25 lines, lh@, lines#25, lw@, nlab@, pln@, rs3=\EwG\Ee)$<100>, use=wy325, # # lines 25 columns 132 # wy325-25w|wyse325-25w|wy325 132 columns, lh@, lines#25, lw@, nlab@, pln@, rs3=\EwG\Ee)$<100>, use=wy325-w, # # lines 25 columns 132 vb # wy325-w-vb|wy325-wvb|wyse325-wvb|wyse-325 wide mode reverse video, bel@, use=wy325-w, # # lines 42 columns 80 # wy325-42|wyse325-42|wyse-325 42 lines, lh@, lines#42, lw@, nlab@, pln@, rs3=\EwG\Ee)$<100>, use=wy325, # # lines 42 columns 132 # wy325-42w|wyse325-42w|wyse-325 42 lines wide mode, lh@, lines#42, lw@, nlab@, pln@, rs3=\EwG\Ee)$<100>, use=wy325-w, # # lines 42 columns 132 vb # wy325-42w-vb|wy325-42wvb|wyse-325 42 lines wide mode visual bell, bel@, use=wy325-w, # # lines 43 columns 80 # wy325-43|wyse325-43|wyse-325 43 lines, lh@, lines#43, lw@, nlab@, pln@, use=wy325, # # lines 43 columns 132 # wy325-43w|wyse325-43w|wyse-325 43 lines wide mode, lh@, lines#43, lw@, nlab@, pln@, rs3=\EwG\Ee)$<100>, use=wy325-w, # # lines 43 columns 132 vb # wy325-43w-vb|wy325-43wvb|wyse-325 43 lines wide mode visual bell, bel@, use=wy325-w, # Wyse 370 -- 24 line screen with status line. # # The terminal may have to be set for 8 data bits and 2 stop # bits for the arrow keys to work. # # If you change keyboards the terminal will send different # escape sequences. # The following definition is for the basic terminal without # function keys. # # -> enter Tektronix 4010/4014 mode # -> exit Tektronix 4010/4014 mode # -> enter ASCII mode (from any ANSI mode) # -> exit ASCII mode (goto native ANSI mode) # -> enter Tek 4207 ANSI mode (from any ANSI mode) # -> exit Tek 4207 mode (goto native ANSI mode) # # Bug: The capability resets attributes. wy370-nk|wyse 370 without function keys, am, ccc, hs, mc5i, mir, msgr, xenl, xon, colors#64, cols#80, it#8, lines#24, ncv#48, pairs#64, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J$<40>, cnorm=\E[34h\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH$<1>, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?25h\E[34l, dch=\E[%p1%dP$<1*>, dch1=\E[P$<1>, dclk=\E[31h, dim=\E[2m, dl=\E[%p1%dM$<2*>, dl1=\E[M$<2>, dsl=\E[40l, ech=\E[%p1%dX$<.1*>, ed=\E[J$<40>, el=\E[K$<10>, el1=\E[1K$<12>, enacs=\E)0, flash=\E[30h\E\,\E[30l$<300>, fsl=\E[1;24r\E8, home=\E[H, hpa=\E[%i%p1%d`, ht=\011$<1>, hts=\EH, ich=\E[%p1%d@$<1*>, il=\E[%p1%dL$<2*>, il1=\E[L$<2>, ind=\n$<2>, initc=\E[66;%p1%d;%?%p2%{250}%<%t%{0}%e%p2%{500}%<%t%{16}%e%p2%{750}%<%t%{32}%e%{48}%;%?%p3%{250}%<%t%{0}%e%p3%{500}%<%t%{4}%e%p3%{750}%<%t%{8}%e%{12}%;%?%p4%{250}%<%t%{0}%e%p4%{500}%<%t%{1}%e%p4%{750}%<%t%{2}%e%{3}%;%{1}%+%+%+%dw, invis=\E[8m, ip=$<1>, is1=\E[90;1"p\E[?5W$<6>, is2=\E[2;4;20;30;40l\E[?1;10;16l\E[12h\E[?7;8;25h, is3=\E>\017\E)0\E(B\E[63;0w\E[m, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, oc=\E[60w\E[63;0w\E[66;1;4w\E[66;2;13w\E[66;3;16w\E[66;4;49w\E[66;5;51w\E[66;6;61w\E[66;7;64w, op=\E[m, rc=\E8, rev=\E[7m, ri=\EM$<2>, rmacs=^O, rmam=\E[?7l, rmclk=\E[31l, rmcup=\E[ R, rmir=\E[4l, rmkx=\E>, rmso=\E[27m, rmul=\E[24m, rs1=\E[13l\E[3l\E!p\E[?4i, rs2=\E[35h\E[?3l$<8>, rs3=\E[?5l, sc=\E7, setb=\E[62;%p1%dw, setf=\E[61;%p1%dw, sgr=\E[0%?%p2%t;4%;%?%p3%p1%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E[ Q, smir=\E[4h, smkx=\E[?1l\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[40l\E[40h\E7\E[99;%i%p1%dH, u0=\E[?38h\E8, u1=\E[?38l\E)0, u2=\E[92;52"p, u3=\E~B, u4=\E[92;76"p, u5=\E%!1\E[90;1"p, vpa=\E[%i%p1%dd, # # Function key set for the ASCII (wy-50 compatible) keyboard # This is the default 370. # wy370|wyse370|wy370-101k|Wyse 370 with 101 key keyboard, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\EOQ, kdl1=\EOQ, kent=\EOM, kf1=\E[?4i, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf2=\E[?3i, kf3=\E[2i, kf4=\E[@, kf5=\E[M, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H, kich1=\EOP, kil1=\EOP, knp=\E[U, kpp=\E[V, use=wy370-nk, # # Function key set for the VT-320 (and wy85) compatible keyboard # wy370-105k|Wyse 370 with 105 key keyboard, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, khome=\E[26~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4, use=wy370-nk, use=vt220+keypad, # # Function key set for the PC compatible keyboard # wy370-EPC|Wyse 370 with 102 key keyboard, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[1~, kent=\EOM, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[M, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H, kich1=\E[2~, knp=\E[U, kpp=\E[V, use=wy370-nk, # # Wyse 370 with visual bell. wy370-vb|Wyse 370 with visible bell, bel@, use=wy370, # # Wyse 370 in 132-column mode. wy370-w|Wyse 370 in 132-column mode, cols#132, wsl#132, rs2=\E[35h\E[?3h$<70>, use=wy370, # # Wyse 370 in 132-column mode with visual bell. wy370-wvb|Wyse 370 with visible bell 132-columns, flash=\E[30h\E\,\E[30l$<300>, use=wy370-w, wy370-rv|Wyse 370 reverse video, rs3=\E[32h\E[?5h, use=wy370, # # Wyse 99gt Tektronix 4010/4014 emulator, # wy99gt-tek|Wyse 99gt Tektronix 4010/4014 emulator, am, os, cols#74, lines#35, bel=^G, clear=\E^L, cr=^M, cub1=^H, cud1=^J, cuf1=\s, cup=\035%{3040}%{89}%p1%*%-%Py%p2%{55}%*%Px%gy%{128}%/%{31}%&%{32}%+%c%gy%{3}%&%{4}%*%gx%{3}%&%+%{96}%+%c%gy%{004}%/%{31}%&%{96}%+%c%gx%{128}%/%{31}%&%{32}%+%c%gx%{004}%/%{31}%&%{64}%+%c\037, cuu1=^K, ff=^L, hd=\036HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\037, home=^]7`x @\037, hu=\036DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\037, is2=\E8, nel=^M^J, u0=\E~>\E8, u1=\E[42h, # # Wyse 160 Tektronix 4010/4014 emulator, # wy160-tek|Wyse 160 Tektronix 4010/4014 emulator, cup=\035%{3103}%{91}%p1%*%-%Py%p2%{55}%*%Px%gy%{128}%/%{31}%&%{32}%+%c%gy%{3}%&%{4}%*%gx%{3}%&%+%{96}%+%c%gy%{004}%/%{31}%&%{96}%+%c%gx%{128}%/%{31}%&%{32}%+%c%gx%{004}%/%{31}%&%{64}%+%c\037, home=^]8`g @\037, use=wy99gt-tek, # # Wyse 370 Tektronix 4010/4014 emulator, # wy370-tek|Wyse 370 Tektronix 4010/4014 emulator, am, os, cols#80, lines#36, bel=^G, clear=\E^L, cr=^M, cub1=^H, cud1=^J, cuf1=\s, cup=\035%{775}%{108}%p1%*%{5}%/%-%Py%p2%{64}%*%{4}%+%{5}%/%Px%gy%{32}%/%{31}%&%{32}%+%c%gy%{31}%&%{96}%+%c%gx%{32}%/%{31}%&%{32}%+%c%gx%{31}%&%{64}%+%c\037, cuu1=^K, ff=^L, hd=\036HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\037, home=^]8g @\037, hu=\036DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\037, is2=\E8, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^I, kcuu1=^K, nel=^M^J, u0=\E[?38h\E8, u1=\E[?38l\E)0, # Vendor-supplied Wyse entries end here. # #TITLE: TERMINFO ENTRY WY520 #DATE: 8/5/93 # The WY520 terminfo is based on the WY285 entry published on the WYSE # BBS with the addition of more function keys and special keys. # # rs1 -> set personality # rs2 -> set number of columns # rs3 -> set number of lines # is1 -> select the proper font # is2 -> do the initialization # is3 -> If this string is empty then rs3 gets sent. # # Wyse 520 emulating a vt420 7 bit mode with default ANSI keyboard # - The BS key is programmed to generate BS in smcup since # is2 doesn't seem to work. # - Remove and shift/Remove: delete a character # - Insert : enter insert mode # - Find : delete to end of file # - Select : clear a line # - F11, F12, F13: send default sequences (not ESC, BS, LF) # - F14 : Home key # - Bottom status line (host writable line) is used. # - smkx,rmkx are removed because this would put the numeric # keypad in Dec application mode which doesn't seem to work # with SCO applications. # wy520|wyse520|wyse 520, am, hs, km, mc5i, mir, xenl, xon, cols#80, it#8, lines#24, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J$<40>, cnorm=\E[34h\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr$<20>, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?25h\E[34l, dch=\E[%p1%dP$<3>, dch1=\E[P$<30>, dim=\E[2m, dl=\E[%p1%dM$<2*>, dl1=\E[M$<2>, dsl=\E[0$~, ech=\E[%p1%dX, ed=\E[J$<40>, el=\E[K, el1=\E[1K, enacs=\E)0, fsl=\E[0$}, home=\E[H, hpa=\E[%i%p1%d`, ht=^I, hts=\EH, ich=\E[%p1%d@$<2>, il=\E[%p1%dL$<3*>, il1=\E[L$<3>, ind=\n$<2>, invis=\E[8m, ip=$<4>, is1=\E[?5W, is2=\E[2;4;20;30l\E[?1;4;10;16l\E[12h\E[?7;8;25;67h, is3=\E>\E(B\E)0\017\E[m, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, ked=\E[1~, kel=\E[4~, kent=\EOM, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, khome=\E[26~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, ri=\EM$<2>, rmacs=^O, rmam=\E[?7l, rmcup=\E[ R, rmir=\E[4l, rmso=\E[m, rmul=\E[24m, rs1=\E[13l\E[3l\E\\\E[63;1"p\E[!p, rs2=\E[35h\E[?3l, rs3=\E[?5l\E[47h\E[40l\E[r, sc=\E7, sgr=\E[0%?%p2%t;4%;%?%p3%p1%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E[ Q\E[?67;8h, smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[2$~\E[1$}\E[%i%p1%d`, vpa=\E[%i%p1%dd, use=vt220+keypad, # # Wyse 520 with 24 data lines and status (terminal status) wy520-24|wyse520-24|wyse 520 with 24 data lines, hs@, dsl@, fsl@, rs3=\E[?5l\E[47h\E[40l\E[1;24r, tsl@, use=wy520, # # Wyse 520 with visual bell. wy520-vb|wyse520-vb|wyse 520 with visible bell, flash=\E[30h\E\,\E[30l$<100>, use=wy520, # # Wyse 520 in 132-column mode. wy520-w|wyse520-w|wyse 520 in 132-column mode, cols#132, wsl#132, dch=\E[%p1%dP$<7>, dch1=\E[P$<7>, ich=\E[%p1%d@$<7>, ip=$<7>, rs2=\E[35h\E[?3h, use=wy520, # # Wyse 520 in 132-column mode with visual bell. wy520-wvb|wyse520-wvb|wyse 520 with visible bell 132-columns, flash=\E[30h\E\,\E[30l$<100>, use=wy520-w, # # # Wyse 520 emulating a vt420 7 bit mode. # The DEL key is programmed to generate BS in is2. # With EPC keyboard. # - 'End' key will clear till end of line on EPC keyboard # - Shift/End : ignored. # - Insert : enter insert mode. # - Delete : delete a character (have to change interrupt character # to CTRL-C: stty intr '^c') for it to work since the # Delete key sends 7FH. wy520-epc|wyse520-epc|wyse 520 with EPC keyboard, kdch1=\177, kel=\E[4~, kend=\E[4~, kf0=\E[21~, kf1=\E[11~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, khome=\E[H, use=wy520, # # Wyse 520 with 24 data lines and status (terminal status) # with EPC keyboard. wy520-epc-24|wyse520-pc-24|wyse 520 with 24 data lines and EPC keyboard, hs@, dsl@, fsl@, rs3=\E[?5l\E[47h\E[40l\E[1;24r, tsl@, use=wy520-epc, # # Wyse 520 with visual bell. wy520-epc-vb|wyse520-pc-vb|wyse 520 with visible bell and EPC keyboard, flash=\E[30h\E\,\E[30l$<100>, use=wy520-epc, # # Wyse 520 in 132-column mode. wy520-epc-w|wyse520-epc-w|wyse 520 in 132-column mode with EPC keyboard, cols#132, wsl#132, dch=\E[%p1%dP$<7>, dch1=\E[P$<7>, ich=\E[%p1%d@$<7>, ip=$<7>, rs2=\E[35h\E[?3h, use=wy520-epc, # # Wyse 520 in 132-column mode with visual bell. wy520-epc-wvb|wyse520-p-wvb|wyse 520 with visible bell 132-columns and EPC keyboard, flash=\E[30h\E\,\E[30l$<100>, use=wy520-epc-w, # # Wyse 520 in 80-column, 36 lines wy520-36|wyse520-36|wyse 520 with 36 data lines, hs@, lines#36, dsl@, fsl@, rs3=\E[?5l\E[36*|\E[36t\E[40l\E[1;36r, tsl@, use=wy520, # # Wyse 520 in 80-column, 48 lines wy520-48|wyse520-48|wyse 520 with 48 data lines, hs@, lines#48, dsl@, fsl@, rs3=\E[?5l\E[48*|\E[48t\E[40l\E[1;48r, tsl@, use=wy520, # # Wyse 520 in 132-column, 36 lines wy520-36w|wyse520-36w|wyse 520 with 132 columns and 36 data lines, cols#132, wsl#132, rs2=\E[?3h, rs3=\E[?5l\E[36*|\E[36t\E[40l\E[1;36r\E[132$|, use=wy520-36, # # Wyse 520 in 132-column, 48 lines wy520-48w|wyse520-48w|wyse 520 with 48 data lines, cols#132, wsl#132, rs2=\E[?3h, rs3=\E[?5l\E[48*|\E[48t\E[40l\E[1;48r\E[132$|, use=wy520-48, # # # Wyse 520 in 80-column, 36 lines with EPC keyboard wy520-36pc|wyse520-36pc|wyse 520 with 36 data lines and EPC keyboard, hs@, lines#36, dsl@, fsl@, rs3=\E[?5l\E[36*|\E[36t\E[40l\E[1;36r, tsl@, use=wy520-epc, # # Wyse 520 in 80-column, 48 lines with EPC keyboard wy520-48pc|wyse520-48pc|wyse 520 with 48 data lines and EPC keyboard, hs@, lines#48, dsl@, fsl@, rs3=\E[?5l\E[48*|\E[48t\E[40l\E[1;48r, tsl@, use=wy520-epc, # # Wyse 520 in 132-column, 36 lines with EPC keyboard wy520-36wpc|wyse520-36wpc|wyse 520 with 36 data lines and EPC keyboard, cols#132, wsl#132, rs2=\E[?3h, rs3=\E[?5l\E[36*|\E[36t\E[40l\E[1;36r\E[132$|, use=wy520-36pc, # # Wyse 520 in 132-column, 48 lines with EPC keyboard wy520-48wpc|wyse520-48wpc|wyse 520 with 48 data lines and EPC keyboard, cols#132, wsl#132, rs2=\E[?3h, rs3=\E[?5l\E[48*|\E[48t\E[40l\E[1;48r\E[132$|, use=wy520-48pc, # From: John Gilmore # (wyse-vp: removed , there's no such # file and we don't know what is -- esr) wyse-vp|Wyse 50 in ADDS Viewpoint emulation mode with "enhance" on, OTbs, am, cols#80, it#8, lines#24, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=^F, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, dch1=\EW, dl1=\El, ed=\Ek, el=\EK, home=^A, ht=^I, il1=\EM, ind=^J, is2=\E`\:\E`9\017\Er, kbs=^H, kcub1=^U, kcud1=^J, kcuf1=^F, kcuu1=^Z, khome=^A, ll=^A^Z, nel=^M^J, rmir=\Er, rmso=^O, rmul=^O, rs1=\E`\:\E`9\017\Er, sgr0=^O, smir=\Eq, smso=^N, smul=^N, wy75ap|wyse75ap|wy-75ap|wyse-75ap|Wyse WY-75 Applications and Cursor keypad, is2=\E[1;24r\E[?10;3l\E[?1;25h\E[4l\E[m\E(B\E=, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, khome=\EOH, rmkx=\E[?1l\E>$<10/>, smkx=\E[?1h\E=$<10/>, use=wy75, # From: Eric Freudenthal wy100q|Wyse 100 for Quotron, OTbs, cols#80, lines#24, xmc#1, cbt=\EI, clear=^Z, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, home=^^, il1=\EE, invis@, is2=\E`\:\0\EC\EDF\E0\E'\E(\EA21, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, ri=\Ej, rmir=\Er, smir=\Eq, use=adm+sgr, #### Kermit terminal emulations # # Obsolete Kermit versions may be listed in the section describing obsolete # non-ANSI terminal emulators later in the file. # # KERMIT standard all versions. # Straight ascii keyboard. :sr=\EI: not avail. many versions + bug prone in vi. # (kermit: removed obsolete ":ma=^Hh^Jj^Kk^Ll^^H:" -- esr) # From: greg small 9-25-84 kermit|standard kermit, OTbs, cols#80, lines#24, clear=\EE, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ, el=\EK, home=\EH, is2=K0 Standard Kermit 9-25-84\n, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, kermit-am|standard kermit plus auto-margin, am, is2=K1 Standard Kermit plus Automatic Margins\n, use=kermit, # IBMPC Kermit 1.2. # Bugs: , : do not work except at beginning of line! does # not work, but fake with :cl=\EH\EJ (since :cd=\EJ: works at beginning of # line). # From: greg small 8-30-84 pckermit|pckermit12|UCB IBMPC Kermit 1.2, am, lines#25, clear=\EH\EJ, ed@, el@, is2=K2 UCB IBMPC Kermit 1.2 8-30-84\n, use=kermit, # IBMPC Kermit 1.20 # Cannot use line 25, now acts funny like ansi special scrolling region. # Initialization must escape from that region by cursor position to line 24. # Cannot use character insert because 1.20 goes crazy if insert at col 80. # Does not use :am: because autowrap is lost when kermit dropped and restarted. # From: greg small 12-19-84 pckermit120|UCB IBMPC Kermit 1.20, it#8, lines#24, cud1=\EB, cvvis=\EO\Eq\EEK3, dch1=\EN, dl1=\EM, ht=^I, il1=\EL, is2=\EO\Eq\EJ\EY7 K3 UCB IBMPC Kermit 1.20 12-19-84\n, rmir@, rmso=\Eq, smir@, smso=\Ep, use=kermit, # MS-DOS Kermit 2.27 for the IBMPC # Straight ascii keyboard. :sr=\EI: not avail. many versions + bug prone in vi. # Cannot use line 25, now acts funny like ansi special scrolling region. # Initialization must escape from that region by cursor position to line 24. # Does not use am: because autowrap is lost when kermit dropped and restarted. # Reverse video for standout like H19. # (msk227: removed obsolete ":ma=^Hh^Jj^Kk^Ll^^H:" -- esr) # From: greg small 3-17-85 msk227|mskermit227|MS-DOS Kermit 2.27 for the IBMPC, OTbs, am@, cols#80, it#8, lines#24, clear=\EE, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\EO\Eq\EG\EwK4, dch1=\EN, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL, is2=\EO\Eq\EG\Ew\EJ\EY7 K4 MS Kermit 2.27 for the IBMPC 3-17-85\n, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, rc=\Ek, rmir=\EO, rmso=\Eq, sc=\Ej, smir=\E@, smso=\Ep, # MS-DOS Kermit 2.27 with automatic margins # From: greg small 3-17-85 msk227am|mskermit227am|UCB MS-DOS Kermit 2.27 with automatic margins, am, cvvis=\EO\Eq\EG\EvK5, is2=\EO\Eq\EG\Ev\EJ\EY7 K5 MS Kermit 2.27 +automatic margins 3-17-85\n, use=msk227, # MS-DOS Kermit 2.27 UCB 227.14 for the IBM PC # Automatic margins now default. Use ansi for highlights. # Define function keys. # (msk22714: removed obsolete ":kn#10:" -- esr) # From: greg small 3-17-85 msk22714|mskermit22714|UCB MS-DOS Kermit 2.27 UCB 227.14 IBM PC, am, bold=\E[1m, cvvis=\EO\Eq\EG\EvK6, is2=\EO\Eq\EG\Ev\EJ\EY7 K6 MS Kermit 2.27 UCB 227.14 IBM PC 3-17-85\n, kf0=\E0, kf1=\E1, kf2=\E2, kf3=\E3, kf4=\E4, kf5=\E5, kf6=\E6, kf7=\E7, kf8=\E8, kf9=\E9, rev=\E[7m, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[1m, smul=\E[4m, use=mskermit227, # This was designed for a VT320 emulator, but it is probably a good start # at support for the VT320 itself. # Please send changes with explanations to bug-gnu-emacs@prep.ai.mit.edu. # (vt320-k3: I added / based on the init string -- esr) vt320-k3|MS-Kermit 3.00's vt320 emulation, am, eslok, hs, km, mir, msgr, xenl, cols#80, it#8, lines#49, pb#9600, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J, cmdch=\E, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, dsl=\E[0$~, ech=\E[%p1%dX, ed=\E[J, el=\E[K, flash=\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l, fsl=\E[0$}, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E>\E F\E[?1h\E[?7h\E[r\E[2$~, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdl1=\E[3~, kf0=\E[21~, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, nel=^M^J, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dL, rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs1=\E(B\E)B\E>\E F\E[4;20l\E[12h\E[?1;5;6;38;42l\E[?7;25h\E[4i\E[?4i\E[m\E[r\E[2$~, sc=\E7, sgr0=\E[m, smacs=\E(0, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[1$}\r\E[K, vpa=\E[%i%p1%dd, # From: Joseph Gil 13 Dec 1991 # ACS capabilities from Philippe De Muyter 30 May 1996 # (I removed a bogus boolean :mo: and added , , -- esr) vt320-k311|dec vt320 series as defined by kermit 3.11, am, eslok, hs, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[;H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, dsl=\E[2$~\r\E[1$}\E[K\E[$}, ed=\E[J, el=\E[K, flash=\E[?5h\E[?5l, fsl=\E[$}, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L$<3/>, ind=\ED, is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, nel=^M\ED, rc=\E8, rev=\E[7m, rf=/usr/share/tabset/vt100, ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs1=\E[?3l, sc=\E7, sgr0=\E[m, smacs=^N, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[2$~\E[1$}\E[1;%dH, ######## NON-ANSI TERMINAL EMULATIONS # #### Avatar # # These entries attempt to describe Avatar, a terminal emulation used with # MS-DOS bulletin-board systems. It was designed to give ANSI-like # capabilities, but with cheaper (shorter) control sequences. Messy design, # excessively dependent on PC idiosyncracies, but apparently rather popular # in the BBS world. # # No color support. Avatar doesn't fit either of the Tektronix or HP color # models that terminfo knows about. An Avatar color attribute is the # low 7 bits of the IBM-PC display-memory attribute. Bletch. # # I wrote these entries while looking at the Avatar spec. I don't have # the facilities to test them. Let me know if they work, or don't. # # Avatar escapes not used by these entries (because maybe you're smarter # and more motivated than I am and can figure out how to wrap terminfo # around some of them, and because they are weird enough to be funny): # level 0: # ^L -- clear window/reset current attribute to default # ^V^A%p1%c -- set current color attribute, parameter decodes as follows: # # bit: 6 5 4 3 2 1 0 # | | | | | # +---+---+ | +---+---+ # | | | # | | foreground color # | foreground intensity # background color # level 0+: # ^V^J%p1%c%p2%c%p3%c%p4%c%p5%c -- scroll (p2,p3) to (p4,p5) up by p1 lines # ^V^K%p1%c%p2%c%p3%c%p4%c%p5%c -- scroll (p2,p3) to (p4,p5) down by p1 lines # ^V^L%p1%c%p2%c%p3%c -- clear p2 lines and p3 cols w/attr %p1 # ^V^M%p1%c%p2%c%p3%c%p4%c -- fill p3 lines & p4 cols w/char p2+attr %p1 # (^V^L and ^V^M set the current attribute as a side-effect.) # ^V ^Y [...] -- repeat pattern. specifies the number of bytes # in the pattern, the number of times the pattern # should be repeated. If either value is 0, no-op. # The pattern can contain Avatar console codes, # including other ^V ^Y patterns. # level 1: # ^V^O -- clockwise mode on; turn print direction right each time you # hit a window edge (yes, really). Turned off by CR # ^V^P -- no-op # ^V^Q%c -- query the driver # ^V^R -- driver reset # ^V^S -- Sound tone (PC-specific) # ^V^T -- change highlight at current cursor poition to %c # ^V^U%p1%c%p2%c -- highlight window with attribute # ^V^V%p1%c%p2%c%p3%c%p4%c%p5%c # -- define window # # From: Eric S. Raymond 1 Nov 1995 # (The ///// capabilities exist only to # tell ncurses that the corresponding highlights exist; it should use , # which is the only method that will actually work for multiple highlights.) # # Update by TD - 2004: half of this was inconsistent. Found documentation # and repaired most of the damage. sgr0 is probably incorrect, but the # available documentation gives no clues for a workable string. avatar0|avatar terminal emulator level 0, am, bce, msgr, cols#80, it#8, lines#25, blink=^V^B, bold=^V^A^P, cr=^M, cub1=^V^E, cud1=^V^D, cuf1=^V^F, cup=\026\010%p1%c%p2%c, cuu1=^V^C, el=^V^G, ind=^J, invis=^V^A\0, rep=\031%p1%c%p2%c, rev=^V^Ap, rmacs@, rs2=^L, sgr=%?%p1%p2%|%p3%|%p6%|%p7%|%t\026\001%?%p7%t%{128}%e%{0}%?%p1%t%{112}%|%;%?%p2%t%{1}%|%;%?%p3%t%{112}%|%;%?%p6%t%{16}%|%;%;%c%;%?%p4%t\026\002%;, sgr0=^V^A^G, smacs@, smso=^V^Ap, smul=^V^A^A, use=klone+acs, # From: Eric S. Raymond 1 Nov 1995 avatar0+|avatar terminal emulator level 0+, dch1=^V^N, rmir=\026\n\0\0\0\0, smir=^V^I, use=avatar0, # From: Eric S. Raymond 1 Nov 1995 avatar|avatar1|avatar terminal emulator level 1, civis=^V'^B, cnorm=^V'^A, cvvis=^V^C, dl1=^V-, il1=^V+, rmam=^V", rmir=^V^P, smam=^V$, use=avatar0+, #### RBcomm # # RBComm is a lean and mean terminal emulator written by the Interrupt List # maintainer, Ralf Brown. It was fairly popular in the late DOS years (early # '90s), especially in the BBS world, and still has some loyal users due to # its very small memory footprint and to a cute macro language. rbcomm|IBM PC with RBcomm and EMACS keybindings, am, bw, mir, msgr, xenl, cols#80, it#8, lines#25, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=^L, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^C, cuf1=^B, cup=\037%p2%{32}%+%c%p1%{32}%+%c, cuu1=^^, dch1=^W, dl=\E[%p1%dM, dl1=^Z, ech=\E[%p1%dX, ed=^F5, el=^P^P, ht=^I, il=\E[%p1%dL, il1=^K, ind=\ED, invis=\E[8m, is2=\017\035\E(B\E)0\E[?7h\E[?3l\E[>8g, kbs=^H, kcub1=^B, kcud1=^N, kcuf1=^F, kcuu1=^P, khome=^A, nel=^M\ED, rc=\E8, rep=\030%p1%c%p2%c, rev=^R, ri=\EM, rmcup=, rmdc=, rmir=^], rmkx=\E>, rmso=^U, rmul=^U, rs1=\017\E(B\E)0\025\E[?3l\E[>8g, sc=\E7, sgr0=\E[m, smcup=, smdc=, smir=^\, smkx=\E=, smso=^R, smul=^T, rbcomm-nam|IBM PC with RBcomm without autowrap, am@, bel=^G, cr=^M, cud1=^J, ht=^I, ind=^J, is2=\017\035\E(B\E)0\E[?7l\E[?3l\E[>8g, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, use=rbcomm, rbcomm-w|IBM PC with RBcomm in 132 column mode, cols#132, bel=^G, cr=^M, cud1=^J, ht=^I, ind=^J, is2=\017\035\E(B\E)0\E[?7h\E[?3h\E[>8g, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, use=rbcomm, ######## LCD DISPLAYS # #### Matrix Orbital # from: Eric Z. Ayers (eric@ale.org) # # Matrix Orbital 20x4 LCD display # Command Character is 0xFE (decimal 254, octal 376) # # On this device, cursor addressability isn't possible. The LCD expects: # 0xfe G # for cup: %p1 == row and %p2 is column # # This line: # cup=\376G%p2%c%p1%c # LOOKS like it will work, but sometimes only one of the two numbers is sent. # See the terminfo (5) manpage commented regarding 'Terminals which use "%c"'. # # Alas, there is no cursor upline capability on this display. # # These entries add some 'sanity stuff' to the clear function. That is, it # does a 'clear' and also turns OFF auto scroll, turns ON Auto Line Wrapping, # and turns off the cursor blinking and stuff like that. # # NOTE: calling 'beep' turns on the backlight (bell) # NOTE: calling 'flash' turns it on and back off (visual bell) # MtxOrb|Generic Matrix Orbital LCD display, bel=\376B^A, clear=\376X\376C\376R\376K\376T, cnorm=\376K\376T, cub1=\376L, cuf1=\376M, flash=\376B\001$<200>\376F, home=\376H, MtxOrb204|20x4 Matrix Orbital LCD display, cols#20, lines#4, use=MtxOrb, MtxOrb162|16x2 Matrix Orbital LCD display, cols#16, lines#2, use=MtxOrb, # The end ######## OLDER TERMINAL TYPES # # This section is devoted to older commercial terminal brands that are now # discontinued, but known to be still in use or represented by emulations. # #### AT&T (att, tty) # # This section also includes Teletype-branded VDTs. # # The AT&T/Teletype terminals group was sold to SunRiver Data Systems (now # Boundless Technologies); for details, see the header comment on the ADDS # section. # # These are AT&T's official terminfo entries. All-caps aliases have been # removed. # att2300|sv80|AT&T 2300 Video Information Terminal 80 column mode, am, eo, mir, msgr, xon, cols#80, it#8, lines#24, bel=^G, clear=\E[H\E[J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H, kcbt=\E[Z, kclr=\E[J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, kf1=\E[1r, kf10=\E[10r, kf11=\E[11r, kf12=\E[12r, kf13=\E[13r, kf14=\E[14r, kf15=\E[15r, kf16=\E[16r, kf2=\E[2r, kf3=\E[3r, kf4=\E[4r, kf5=\E[5r, kf6=\E[6r, kf7=\E[7r, kf8=\E[8r, kf9=\E[9r, khome=\E[H, kich1=\E[@, kil1=\E[L, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rev=\E[7m, rmir=\E[4l, rmso=\E[m, sgr0=\E[m, smir=\E[4h, smso=\E[7m, att2350|AT&T 2350 Video Information Terminal 80 column mode, mc0@, mc4@, mc5@, use=att2300, # Must setup RETURN KEY - CR, REC'VD LF - INDEX. # Seems upward compatible with vt100, plus ins/del line/char. # On sgr, the protection parameter is ignored. # No check is made to make sure that only 3 parameters are output. # standout= reverse + half-intensity = 3 | 5. # bold= reverse + underline = 2 | 3. # note that half-bright blinking doesn't look different from normal blinking. # NOTE:you must program the function keys first, label second! # (att4410: a BSD entry has been seen with the following capabilities: # , , , , , # , , , -- esr) att5410v1|att4410v1|tty5410v1|AT&T 4410/5410 80 columns - version 1, am, hs, mir, msgr, xon, cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80, acsc=++\,\,--..00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[2;7m, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dim=\E[2m, dl1=\E[M, ed=\E[J, el=\E[K, fsl=\E8, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L, ind=^J, invis=\E[8m, is1=\E[?3l\E)0, is3=\E[1;03q f1 \EOP\E[2;03q f2 \EOQ\E[3;03q f3 \EOR\E[4;03q f4 \EOS\E[5;03q f5 \EOT\E[6;03q f6 \EOU\E[7;03q f7 \EOV\E[8;03q f8 \EOW, kbs=^H, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, khome=\E[H, kll=\E[24;1H, ll=\E[24H, nel=^M^J, pfx=\E[%p1%1d;%p2%l%2.2dq f%p1%1d %p2%s, pln=\E[%p1%d;00q%p2%:-16s, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l\E[2;0y, sc=\E7, sgr=\E[0%?%p1%p5%|%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%p6%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smso=\E[7m, smul=\E[4m, tsl=\E7\E[25;%p1%{1}%+%dH, att4410v1-w|att5410v1-w|tty5410v1-w|AT&T 4410/5410 132 columns - version 1, cols#132, wsl#132, is1=\E[?3h\E)0, rs2=\Ec\E[?3h\E[2;0y, use=att5410v1, att4410|att5410|tty5410|AT&T 4410/5410 80 columns - version 2, OTbs, pfx=\E[%p1%d;%p2%l%02dq f%p1%d %p2%s, use=att5410v1, att5410-w|att4410-w|4410-w|tty5410-w|5410-w|AT&T 4410/5410 in 132 column mode, cols#132, wsl#132, is1=\E[?3h\E)0, rs2=\Ec\E[?3h\E[2;0y, use=att4410, # 5410 in terms of a vt100 # (v5410: added / based on init string -- esr) v5410|att5410 in terms of a vt100, am, mir, msgr, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, clear=\E[H\E[J$<50>, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<5>, cuu1=\E[A$<2>, dch1=\E[P, dl1=\E[M, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ich1=\E[@, il1=\E[L, ind=^J, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, rc=\E8, rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<2>, sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[1;7m$<2>, smul=\E[4m$<2>, tbc=\E[3g, use=vt100+fnkeys, # # Teletype Model 5420 -- A souped up 5410, with multiple windows, # even! the 5420 has three modes: scroll, window or page mode # this terminfo should work in scroll or window mode, but doesn't # take advantage of any of the differences between them. # # Has memory below (2 lines!) # 3 pages of memory (plus some spare) # The 5410 sequences for , , ,
, , , , # , would work for these, but these work in both scroll and window # mode... Unset insert character so insert mode works # sets 80 column mode, # escape sequence: # 1) turn off all fonts # 2) function keys off, keyboard lock off, control display off, # insert mode off, erasure mode off, # 3) full duplex, monitor mode off, send graphics off, nl on lf off # 4) reset origin mode # 5) set line wraparound # 6) exit erasure mode, positional attribute mode, and erasure extent mode # 7) clear margins # 8) program ENTER to transmit ^J, # We use \212 to program the ^J because a bare ^J will get translated by # UNIX into a CR/LF. The enter key is needed for AT&T uOMS. # 1 2 3 4 5 6 7 8 # set screen color to black, # No representation in terminfo for the delete word key: kdw1=\Ed # Key capabilities assume the power-up send sequence... # This is not strictly necessary, but it helps maximize # memory usefulness: , # Alternate sgr0: , # Alternate sgr: , # smkx programs the SYS PF keys to send a set sequence. # It also sets up labels f1, f2, ..., f8, and sends edit keys. # This string causes them to send the strings - # when pressed in SYS PF mode. # (att4415: I added / based on the init string -- esr) att4415|tty5420|att5420|AT&T 4415/5420 80 cols, OTbs, db, mir, xon, lh#2, lm#78, lw#8, nlab#8, wsl#55, cbt=\E[Z, clear=\E[x\E[J, cnorm=\E[11;0j, cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC, cup=\E[%i%p1%d;%p2%dx, cuu=\E[%p1%dA, cvvis=\E[11;1j, dch=\E[%p1%dP, dl=\E[%p1%dM, ech=\E[%p1%ds\E[%p1%dD, flash=\E[?5h$<200>\E[?5l, home=\E[x, hpa=\E[%p1%{1}%+%dG, hts=\EH, ich=\E[%p1%d@, ich1@, il=\E[%p1%dL, indn=\E[%p1%dE, is1=\E[?3l$<100>, is2=\E[m\017\E[1;2;3;4;6l\E[12;13;14;20l\E[?6;97;99l\E[?7h\E[4i\Ex\E[21;1j\212, is3=\E[?5l, kbeg=\Et, kcbt=\E[Z, kdch1=\E[P, kdl1=\E[M, kel=\E[2K, kend=\Ez, kent=\Eent, kf1=\EOc, kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kich1=\E[4h, kil1=\E[L, kind=\E[T, kll=\Eu, knp=\E[U, kpp=\E[V, kri=\E[S, lf1=F1, lf2=F2, lf3=F3, lf4=F4, lf5=F5, lf6=F6, lf7=F7, lf8=F8, ll=\Ew, mc0=\E[?2i, mc4=\E[?9i, mc5=\E[?4i, mrcup=\E[%i%p1%d;%p2%dt, pfx=\E[%p1%d;%p2%l%02dq F%p1%d %p2%s, pln=\E[%p1%d;0;0;0q%p2%:-16.16s, prot=\EV, rin=\E[%p1%dF, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[19;0j\E[21;1j\212, rmln=\E|, sgr=\E[0%?%p1%p5%|%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%p6%|%t;7%;%?%p7%t;8%;m%?%p8%t\EV%;%?%p9%t\016%e\017%;, sgr0=\E[m\017, smam=\E[?7h, smir=\E[4h, smkx=\E[19;1j\E[21;4j\Eent, smln=\E~, tbc=\E[3g, tsl=\E7\E[25;%p1%{8}%+%dH, vpa=\E[%p1%{1}%+%dd, use=att4410, att4415-w|tty5420-w|att5420-w|AT&T 4415/5420 132 cols, cols#132, lm#54, wsl#97, is1=\E[?3h$<100>, use=att4415, att4415-rv|tty5420-rv|att5420-rv|AT&T 4415/5420 80 cols/rv, flash=\E[?5l$<200>\E[?5h, is3=\E[?5h, use=att4415, att4415-w-rv|tty5420-w-rv|att5420-w-rv|AT&T 4415/5420 132 cols/rv, cols#132, lm#54, wsl#97, flash=\E[?5l$<200>\E[?5h, is1=\E[?3h$<100>, is3=\E[?5h, use=att4415, # Note that this mode permits programming USER PF KEYS and labels # However, when you program user pf labels you have to reselect # user pf keys to make them appear! att4415+nl|tty5420+nl|att5420+nl|generic AT&T 4415/5420 changes for not changing labels, kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, pfx=\E[%p1%d;%p2%l%02d;0;1q F%p1%d %p2%s, pln=\E[%p1%d;0;0;1q%p2%:-16.16s, att4415-nl|tty5420-nl|att5420-nl|AT&T 4415/5420 without changing labels, kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, use=att4415+nl, use=att4415, att4415-rv-nl|tty5420-rv-nl|att5420-rv-nl|AT&T 4415/5420 reverse video without changing labels, kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, use=att4415+nl, use=att4415-rv, att4415-w-nl|tty5420-w-nl|att5420-w-nl|AT&T 4415/5420 132 cols without changing labels, kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, use=att4415+nl, use=att4415-w, att4415-w-rv-n|tty5420-w-rv-n|att5420-w-rv-n|AT&T 4415/5420 132 cols reverse without changing labels, kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, use=att4415+nl, use=att4415-w-rv, att5420_2|AT&T 5420 model 2 80 cols, am, db, hs, mir, msgr, xon, cols#80, it#8, lh#2, lines#24, lm#78, lw#8, nlab#8, wsl#55, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, blink=\E[5m, cbt=\E[1Z, clear=\EH\EJ, cnorm=\E[11;0j, cr=\EG, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[1B, cuf=\E[%p1%dC, cuf1=\E[1C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[1A, cvvis=\E[11;1j, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%ds\E[%p1%dD, ed=\E[0J, el=\E[0K, el1=\E[1K, flash=\E[?5h$<200>\E[?5l, fsl=\E8, home=\E[H, hpa=\E[%p1%{1}%+%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dE, invis=\E[8m, is1=\E[0;23r\Ex\Ey\E[2;0j\E[3;3j\E[4;0j\E[5;0j\E[6;0j\E[7;0j\E[8;0j\E[9;1j\E[10;0j\E[15;0j\E[16;1j\E[19;0j\E[20;1j\E[29;0j\E[1;24r, kbeg=\Et, kbs=^H, kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, kel=\E[2K, kend=\Ez, kent=^J, kf1=\EOc, kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, khome=\E[H, kich1=\E[4h, kil1=\E[L, kind=\E[T, kll=\Eu, knp=\E[U, kpp=\E[V, kri=\E[S, lf1=F1, lf2=F2, lf3=F3, lf4=F4, lf5=F5, lf6=F6, lf7=F7, lf8=F8, ll=\Ew, mc0=\E[?;2i, mc4=\E[4i, mc5=\E[5i, mrcup=\E[%i%p1%d;%p2%dt, nel=^M^J, pfx=\E[%p1%d;%p2%l%02dq F%p1%d %p2%s\E~, pln=\E[%p1%d;0;0;0q%p2%:-16.16s\E~, prot=\EV, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dF, rmacs=^O, rmkx=\E[19;0j, rmln=\E|, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l\E[2;0y, sc=\E7, sgr=\E[0%?%p1%p5%|%t;2%;%?%p2%p6%|%t;4%;%?%p4%t;5%;%?%p3%p1%|%p6%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smkx=\E[19;1j, smln=\E~, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E7\E[25;%p1%{8}%+%dH, vpa=\E[%p1%{1}%+%dd, att5420_2-w|AT&T 5420 model 2 in 132 column mode, cols#132, is1=\E[0;23r\Ex\Ey\E[2;0j\E[3;3j\E[4;0j\E[5;1j\E[6;0j\E[7;0j\E[8;0j\E[9;1j\E[10;0j\E[15;0j\E[16;1j\E[19;0j\E[20;1j\E[29;0j\E[1;24r, use=att5420_2, att4418|att5418|AT&T 5418 80 cols, am, xon, cols#80, lines#24, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, clear=\E[H\E[2J, cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[1P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[0K, home=\E[H, ich=\E[%p1%d@, ich1=\E[1@, il=\E[%p1%dL, il1=\E[1L, ind=^J, is1=\E[?3l, is2=\E)0\E?6l\E?5l, kclr=\E[%%, kcub1=\E@, kcud1=\EU, kcuf1=\EA, kcuu1=\ES, kent=\E[, kf1=\E[h, kf10=\E[m, kf11=\E[n, kf12=\E[o, kf13=\E[H, kf14=\E[I, kf15=\E[J, kf18=\E[K, kf19=\E[L, kf2=\E[i, kf20=\E[E, kf21=\E[_, kf22=\E[M, kf23=\E[N, kf24=\E[O, kf3=\E[j, kf6=\E[k, kf7=\E[l, kf8=\E[f, kf9=\E[w, khome=\Ec, rc=\E8, rev=\E[7m, rmacs=^O, rmso=\E[m, rmul=\E[m, sc=\E7, sgr0=\E[m\017, smacs=^N, smso=\E[7m, smul=\E[4m, att4418-w|att5418-w|AT&T 5418 132 cols, cols#132, is1=\E[?3h, use=att5418, att4420|tty4420|teletype 4420, OTbs, da, db, eo, msgr, ul, xon, cols#80, lines#24, lm#72, bel=^G, clear=\EH\EJ, cr=\EG, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EP, dl1=\EM, ed=\EJ, el=\Ez, home=\EH, il1=\EL, ind=\EH\EM\EY7\s, kcbt=\EO, kclr=\EJ, kcub1=^H, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, kf0=\EU, kf3=\E@, khome=\EH, kich1=\E\^, kil1=\EL, kind=\ES, kri=\ET, lf0=segment advance, lf3=cursor tab, rmdc@, rmso=\E~, rmul=\EZ, smdc@, smso=\E}, smul=\E\\, # The following is a terminfo entry for the Teletype 4424 # asynchronous keyboard-display terminal. It supports # the vi editor. The terminal must be set up as follows, # # HIGHLIGHT DEFINITION 3-TONE # DISPLAY FUNCTION GROUP III # # The second entry below provides limited (a la adm3a) # operation under GROUP II. # # This must be used with DISPLAY FUNCTION GROUP I or III # and HIGHLIGHT DEFINITION 3-TONE # The terminal has either bold or blink, depending on options # # (att4424: commented out =\E[1m, we don't need bright locked on -- esr) att4424|tty4424|teletype 4424, OTbs, am, xon, cols#80, lines#24, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E3, bold=\E3, cbt=\EO, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\EB, cuf=\E[%p1%dC, cuf1=\EC, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EA, dch=\E[%p1%dP, dch1=\EP, dim=\EW, dl=\E[%p1%dM, dl1=\EM, ed=\EJ, el=\Ez, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E\^, il=\E[%p1%dL, il1=\EL, ind=^J, is2=\E[20l\E[?7h, kbs=^H, kclr=\EJ, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, nel=\EE, rev=\E}, ri=\ET, rmacs=\E(B, rmso=\E~, rmul=\EZ, sgr=\E[%?%p1%t7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p6%p4%|%t;5%;%?%p5%t;0%;m, sgr0=\EX\E~\EZ\E4\E(B, smacs=\E(0, smso=\E}, smul=\E\\, tbc=\EF, att4424-1|tty4424-1|teletype 4424 in display function group I, kclr@, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome@, use=att4424, # This entry is not one of AT&T's official ones, it was translated from the # 4.4BSD termcap file. The highlight strings are different from att4424. # I have no idea why this is -- older firmware version, maybe? # The following two lines are the comment originally attached to the entry: # This entry appears to avoid the top line - I have no idea why. # From: jwb Wed Mar 31 13:25:09 1982 remote from ihuxp att4424m|tty4424m|teletype 4424M, am, da, db, mir, cols#80, it#8, lines#23, bel=^G, clear=\E[2;H\E[J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH\E[B, cuu1=\E[A, dch1=\EP, dl1=\EM, el=\E[K, ht=^I, ich1=\E\^, il1=\EL, ind=^J, ip=$<2/>, is2=\E[m\E[2;24r, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, nel=^M^J, ri=\ET, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, # The Teletype 5425 is really version 2 of the Teletype 5420. It # is quite similar, except for some minor differences. No page # mode, for example, so all of the sequences used above have # to change back to what's being used for the 5410. Many of the # option settings have changed their numbering as well. # # This has been tested on a preliminary model. # # (att5425: added / based on the init string -- esr) att5425|tty5425|att4425|AT&T 4425/5425, am, da, db, hs, mir, msgr, xenl, xon, cols#80, it#8, lh#2, lines#24, lm#78, lw#8, nlab#8, wsl#55, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[2;7m, cbt=\E[Z, clear=\E[H\E[J, cnorm=\E[12;0j, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[12;1j, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%ds\E[%p1%dD, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=\E[?5h$<200>\E[?5l, fsl=\E8, home=\E[H, hpa=\E[%p1%{1}%+%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dE, invis=\E[8m, is1=\E<\E[?3l$<100>, is2=\E[m\017\E[1;2;3;4;6l\E[12;13;14;20l\E[?6;97;99l\E[?7h\E[4i\Ex\E[25;1j\212, is3=\E[?5l, kbeg=\Et, kbs=^H, kcbt=\E[Z, kclr=\E[J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, kel=\E[2K, kend=\Ez, kent=\Eent, kf1=\EOc, kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, khome=\E[H, kich1=\E[4h, kil1=\E[L, kind=\E[T, kri=\E[S, ll=\E[24H, mc0=\E[?2i, mc4=\E[?9i, mc5=\E[?4i, nel=^M^J, pfx=\E[%p1%d;%p2%l%02dq F%p1%1d %p2%s, pln=\E[%p1%d;0;0;0q%p2%:-16.16s, prot=\EV, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dF, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[21;0j\E[25;1j\212, rmln=\E|, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l\E[2;0y, sc=\E7, sgr=\E[0%?%p5%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%p6%|%t;7%;%?%p7%t;8%;m%?%p8%t\EV%;%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h, smkx=\E[21;1j\E[25;4j\Eent\E~, smln=\E~, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E7\E[25;%p1%{8}%+%dH, vpa=\E[%p1%{1}%+%dd, att5425-nl|tty5425-nl|att4425-nl|AT&T 4425/5425 80 columns no labels, smkx=\E[21;1j\E[25;4j\Eent, use=att4425, att5425-w|att4425-w|tty5425-w|teletype 4425/5425 in 132 column mode, cols#132, lm#54, wsl#97, is1=\E[?3h$<100>, use=tty5425, # (att4426: his had bogus capabilities: :ri=\EM:, :ri=\E[1U:. # I also added / -- esr) att4426|tty4426|teletype 4426S, am, da, db, xon, cols#80, lines#24, lm#48, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, bold=\E[5m, clear=\E[H\E[2J\E[1U\E[H\E[2J\E[1V, cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\EP, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[0K, home=\E[H, hpa=\E[%p1%dG, ht=^I, hts=\E1, ich=\E[%p1%d@, ich1=\E\^, il=\E[%p1%dL, il1=\EL, ind=^J, indn=\E[%p1%dS, is1=\Ec\E[?7h, is2=\E[m\E[1;24r, kbs=^H, kcbt=\EO, kclr=\E[2J, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, khome=\E[H, kll=\E[24;1H, ll=\E[24H, nel=^M^J, rc=\E8, rev=\E[7m, ri=\ET, rin=\E[%p1%dT, rmacs=\E(B, rmam=\E[?7l, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l\E[2;0y, sc=\E7, sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smso=\E[5m, smul=\E[4m, tbc=\E[3g, vpa=\E[%p1%dd, # Terminfo entry for the AT&T 510 A Personal Terminal # Function keys 9 - 16 are available only after the # screen labeled (soft keys/action blocks) are labeled. Function key # 9 corresponds to the leftmost touch target on the screen, # function key 16 corresponds to the rightmost. # # This entry is based on one done by Ernie Rice at Summit, NJ and # changed by Anne Gallup, Skokie, IL, ttrdc!anne att510a|bct510a|AT&T 510A Personal Terminal, am, mir, msgr, xenl, xon, cols#80, lh#2, lines#24, lw#7, nlab#8, acsc=+g\,h-f.e`bhrisjjkkllmmnnqqttuuvvwwxx{{||}}~~, bel=^G, blink=\E[5m, bold=\E[2;7m, cbt=\E[Z, civis=\E[11;0|, clear=\E[H\E[J, cnorm=\E[11;3|, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[11;2|, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[0K, el1=\E[1K, enacs=\E(B\E)1, ff=^L, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, is1=\E(B\E)1\E[2l, is3=\E[21;1|\212, kLFT=\E[u, kRIT=\E[v, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOm, kf10=\EOd, kf11=\EOe, kf12=\EOf, kf13=\EOg, kf14=\EOh, kf15=\EOi, kf16=\EOj, kf2=\EOV, kf3=\EOu, kf4=\ENj, kf5=\ENe, kf6=\ENf, kf7=\ENh, kf8=\E[H, kf9=\EOc, kind=\E[S, kri=\E[T, mc0=\E[0i, mc4=\E[?8i, mc5=\E[?4i, nel=\EE, pln=\E[%p1%dp%p2%:-16s, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmkx=\E[19;0|, rmso=\E[m, rmul=\E[m, sc=\E7, sgr=\E[0%?%p5%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%p6%|%t;7%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smkx=\E[19;1|, smso=\E[7m, smul=\E[4m, tbc=\E[3g, # Terminfo entry for the AT&T 510 D Personal Terminal # Function keys 9 through 16 are accessed by bringing up the # system blocks. # Function key 9 corresponds to the leftmost touch target on the screen, # function key 16 corresponds to the rightmost. # # There are problems with soft key labeling. These are due to # strangenesses in the native terminal that are impossible to # describe in a terminfo. att510d|bct510d|AT&T 510D Personal Terminal, am, da, db, mir, msgr, xenl, xon, cols#80, lh#2, lines#24, lm#48, lw#7, nlab#8, acsc=+g\,h-f.e`bhrisjjkkllmmnnqqttuuvvwwxx{{||}}~~, bel=^G, blink=\E[5m, bold=\E[2;7m, cbt=\E[Z, clear=\E[H\E[J, cnorm=\E[11;3|, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[11;2|, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[0K, el1=\E[1K, enacs=\E(B\E)1, ff=^L, home=\E[H, hpa=\E[%p1%{1}%+%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS, invis=\E[8m, is1=\E(B\E)1\E[5;0|, is3=\E[21;1|\212, kLFT=\E[u, kRIT=\E[v, kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOm, kf10=\EOd, kf11=\EOe, kf12=\EOf, kf13=\EOg, kf14=\EOh, kf15=\EOi, kf16=\EOj, kf2=\EOV, kf3=\EOu, kf4=\ENj, kf5=\ENe, kf6=\ENf, kf7=\ENh, kf8=\E[H, kf9=\EOc, kind=\E[S, kri=\E[T, ll=\E#2, mc0=\E[0i, mc4=\E[?8i, mc5=\E[?4i, mgc=\E\:, nel=\EE, pln=\E[%p1%dp%p2%:-16s, rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmacs=^O, rmir=\E[4l, rmkx=\E[19;0|, rmln=\E<, rmso=\E[m, rmul=\E[m, rmxon=\E[29;1|, rs2=\E[5;0|, sc=\E7, sgr=\E[0%?%p5%p6%|%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%p6%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smgl=\E4, smgr=\E5, smir=\E[4h, smkx=\E[19;1|, smln=\E?, smso=\E[7m, smul=\E[4m, smxon=\E[29;0|, tbc=\E[3g, vpa=\E[%p1%{1}%+%dd, # (att500: I merged this with the att513 entry, att500 just used att513 -- esr) att500|att513|AT&T 513 using page mode, am, chts, mir, msgr, xenl, xon, cols#80, lh#2, lines#24, lw#8, nlab#8, acsc=+g\,h-f.e`bhrisjjkkllmmnnqqttuuvvwwxx{{||}}~~, bel=^G, blink=\E[5m, bold=\E[2;7m, cbt=\E[Z, clear=\E[H\E[J, cnorm=\E[11;0|, cr=^M, csr=%i\E[%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[11;1|, dch=\E[%p1%dP, dch1=\E[P$<1>, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)1, home=\E[H, hpa=\E[%p1%{1}%+%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dE, invis=\E[8m, is1=\E?\E[3;3|\E[10;0|\E[21;1|\212\E[6;1|\E[1{\E[?99l, kBEG=\ENB, kCAN=\EOW, kCMD=\EOU, kCPY=\END, kCRT=\EON, kDC=\ENF, kDL=\ENE, kEND=\ENN, kEOL=\EOA, kEXT=\EOK, kFND=\EOX, kHLP=\EOM, kHOM=\ENM, kIC=\ENJ, kLFT=\ENK, kMOV=\ENC, kMSG=\EOL, kNXT=\ENH, kOPT=\EOR, kPRT=\EOZ, kPRV=\ENG, kRDO=\EOT, kRES=\EOQ, kRIT=\ENL, kRPL=\EOY, kSAV=\EOO, kSPD=\EOP, kUND=\EOS, kbeg=\E9, kbs=^H, kcan=\EOw, kcbt=\E[Z, kclo=\EOV, kclr=\E[J, kcmd=\EOu, kcpy=\ENd, kcrt=\EOn, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\ENf, kdl1=\ENe, kel=\EOa, kend=\E0, kent=\Eent, kext=\EOk, kf1=\EOc, kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kfnd=\EOx, khlp=\EOm, khome=\E[H, kich1=\ENj, kind=\E[S, kmov=\ENc, kmrk=\ENi, kmsg=\EOl, knp=\E[U, knxt=\ENh, kopn=\EOv, kopt=\EOr, kpp=\E[V, kprt=\EOz, kprv=\ENg, krdo=\EOt, kref=\EOb, kres=\EOq, krfr=\ENa, kri=\E[T, krpl=\EOy, krst=\EOB, ksav=\EOo, kslt=\ENI, kspd=\EOp, kund=\EOs, ll=\E#2, mc0=\E[?98l\E[0i, mc4=\E[?98l\E[?8i, mc5=\E[?98l\E[?4i, nel=\EE, pfkey=\E[%p1%d;%p2%l%d;3;0p F%p1%d %p2%s, pfloc=\E[%p1%d;%p2%l%d;2;0p F%p1%d %p2%s, pfx=\E[%p1%d;%p2%l%d;1;0p F%p1%d %p2%s, pln=\E[%p1%dp%p2%:-16s, rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM, rin=\E[%p1%dF, rmacs=^O, rmir=\E[4l, rmkx=\E[19;0|\E[21;1|\212, rmln=\E<, rmso=\E[m, rmul=\E[m, rs1=\E?\E[3;3|\E[10;0|\E[21;1|\212\E[6;1|\E[1{\E[?99l\E[2;0|\E[6;1|\E[8;0|\E[19;0|\E[1{\E[?99l, rs2=\E[5;0|, sc=\E7, sgr=\E[0%?%p1%p5%|%t;2%;%?%p2%p6%|%t;4%;%?%p4%t;5%;%?%p3%p1%|%p6%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smir=\E[4h, smkx=\E[19;1|\E[21;4|\Eent, smln=\E?, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%p1%{1}%+%dd, # 01-07-88 # printer must be set to EMUL ANSI to accept ESC codes # stops at top margin # sets cpi 10,lpi 6,form 66,left 1,right 132,top 1,bottom 66,font # and alt font ascii,wrap on,tabs cleared # disables newline on LF,Emphasized off # The capability sets form length att5310|att5320|AT&T Model 53210 or 5320 matrix printer, xhpa, xvpa, bufsz#8192, cols#132, cps#120, it#8, lines#66, orc#10, orhi#100, orl#12, orvi#72, cpi=%?%p1%{10}%=%t\E[w%e%p1%{12}%=%t\E[2w%e%p1%{5}%=%t\E[5w%e%p1%{13}%=%p1%{14}%=%O%t\E[3w%e%p1%{16}%=%p1%{17}%=%O%t\E[4w%e%p1%{6}%=%t\E[6w%e%p1%{7}%=%t\E[7w%e%p1%{8}%=%t\E[8w%;, cr=^M, csnm=%?%p1%{0}%=%tusascii%e%p1%{1}%=%tenglish%e%p1%{2}%=%tfinnish%e%p1%{3}%=%tjapanese%e%p1%{4}%=%tnorwegian%e%p1%{5}%=%tswedish%e%p1%{6}%=%tgermanic%e%p1%{7}%=%tfrench%e%p1%{8}%=%tcanadian_french%e%p1%{9}%=%titalian%e%p1%{10}%=%tspanish%e%p1%{11}%=%tline%e%p1%{12}%=%tsecurity%e%p1%{13}%=%tebcdic%e%p1%{14}%=%tapl%e%p1%{15}%=%tmosaic%;, cud=\E[%p1%de, cud1=^J, cuf=\E[%p1%da, cuf1=\s, cuu1=\EM, ff=^L, hpa=\E[%p1%d`, ht=^I, is1=\Ec, is2=\E[20l\r, lpi=%?%p1%{2}%=%t\E[4z%e%p1%{3}%=%t\E[5z%e%p1%{4}%=%t\E[6z%e%p1%{6}%=%t\E[z%e%p1%{8}%=%t\E[2z%e%p1%{12}%=%t\E[3z%;, rshm=\E[m, scs=%?%p1%{0}%=%t\E(B%e%p1%{1}%=%t\E(A%e%p1%{2}%=%t\E(C%e%p1%{3}%=%t\E(D%e%p1%{4}%=%t\E(E%e%p1%{5}%=%t\E(H%e%p1%{6}%=%t\E(K%e%p1%{7}%=%t\E(R%e%p1%{8}%=%t\E(Q%e%p1%{9}%=%t\E(Y%e%p1%{10}%=%t\E(Z%e%p1%{11}%=%t\E(0%e%p1%{12}%=%t\E(1%e%p1%{13}%=%t\E(3%e%p1%{14}%=%t\E(8%e%p1%{15}%=%t\E(}%;, smgbp=\E[;%p1%dr, smglp=\E[%{1}%p1%+%ds, smgrp=\E[;%{1}%p1%+%ds, smgtp=\E[%p1%dr, sshm=\E[5m, u0=\E[%p1%dt, vpa=\E[%p1%dd, # Teletype 5620, firmware version 1.1 (8;7;3) or earlier from BRL # The following SET-UP modes are assumed for normal operation: # CR_DEF=CR NL_DEF=INDEX DUPLEX=FULL # Other SET-UP modes may be set for operator convenience or communication # requirements. This termcap description is for the Resident Terminal Mode. # No delays specified; use "stty ixon -ixany" to enable DC3/DC1 flow control! # The BRL entry also said: UNSAFE :ll=\E[70H: att5620-1|tty5620-1|dmd1|Teletype 5620 with old ROMs, am, xon, cols#88, it#8, lines#70, vt#3, bel=^G, clear=\E[H\E[J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS, kbs=^H, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kll=\E[70;1H, nel=^M^J, rc=\E8, ri=\E[T, rin=\E[%p1%dT, rs1=\Ec, sc=\E7, # 5620 terminfo (2.0 or later ROMS with char attributes) # The following SET-UP modes are assumed for normal operation: # DUPLEX=FULL GEN_FLOW=ON NEWLINE=INDEX RETURN=CR # Other SET-UP modes may be set for operator convenience or communication # requirements. This termcap description is for Resident Terminal Mode. No # delays are specified; use "stty ixon -ixany" to enable DC3/DC1 flow control! # assumptions: (scroll forward one line) is only done at screen bottom # Be aware that older versions of the dmd have a firmware bug that affects # parameter defaulting; for this terminal, the 0 in \E[0m is not optional. # is from an otherwise inferior BRL for this terminal. That entry # also has =\E[70H commented out and marked unsafe. # For more, see the 5620 FAQ maintained by David Breneman . att5620|dmd|tty5620|ttydmd|5620|5620 terminal 88 columns, OTbs, am, msgr, npc, xon, cols#88, it#8, lines#70, bel=^G, bold=\E[2m, clear=\E[H\E[J, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, kbs=^H, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kll=\E[70;1H, nel=^J, pfx=\E[%p1%d;%p2%l%dq%p2%s, rc=\E8, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmso=\E[0m, rmul=\E[0m, rs1=\Ec, sc=\E7, sgr0=\E[0m, smso=\E[7m, smul=\E[4m, att5620-24|tty5620-24|dmd-24|teletype dmd 5620 in a 24x80 layer, lines#24, use=att5620, att5620-34|tty5620-34|dmd-34|teletype dmd 5620 in a 34x80 layer, lines#34, use=att5620, # 5620 layer running the "S" system's downloaded graphics handler: att5620-s|tty5620-s|layer|vitty|5620 S layer, OTbs, OTpt, am, cols#80, it#8, lines#72, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cup=\EY%p2%{32}%+%c%p1%{32}%+%c, cuu1=^K, dl1=\ED, el=\EK, flash=\E^G, ht=^I, il1=\EI, ind=^J, kbs=^H, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kll=\E[70;1H, # Entries for thru refer to the shifted system pf keys. # # Entries for thru refer to the alternate keypad mode # keys: = * / + 7 8 9 - 4 5 6 , 1 2 3 0 . ENTER att605|AT&T 605 80 column 102key keyboard, am, eo, xon, cols#80, lines#24, lw#8, nlab#8, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, fsl=\E8, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il1=\E[L, ind=^J, invis=\E[8m, is1=\E[8;0|\E[?\E[13;20l\E[?\E[12h, is2=\E[m\017, kLFT=\E[ A, kRIT=\E[ @, kbs=^H, kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, kend=\E[24;1H, kf1=\EOc, kf10=\ENp, kf11=\ENq, kf12=\ENr, kf13=\ENs, kf14=\ENt, kf15=\EOC, kf16=\EOD, kf17=\EOE, kf18=\EOF, kf19=\EOG, kf2=\EOd, kf20=\EOH, kf21=\EOI, kf22=\EOJ, kf23=\ENO, kf24=\ENP, kf25=\ENQ, kf26=\ENR, kf27=\ENS, kf28=\ENT, kf29=\EOP, kf3=\EOe, kf30=\EOQ, kf31=\EOR, kf32=\EOS, kf33=\EOw, kf34=\EOx, kf35=\EOy, kf36=\EOm, kf37=\EOt, kf38=\EOu, kf39=\EOv, kf4=\EOf, kf40=\EOl, kf41=\EOq, kf42=\EOr, kf43=\EOs, kf44=\EOp, kf45=\EOn, kf46=\EOM, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H, kich1=\E[@, kil1=\E[L, kind=\E[S, knp=\E[U, kpp=\E[V, ll=\E[24H, mc4=\E[?4i, mc5=\E[?5i, nel=\EE, pfx=\E[%p1%d;%p2%l%02dq F%p1%1d %p2%s, pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rev=\E[7m, rmacs=^O, rmir=\E[4l, rmln=\E[2p, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l, sc=\E7, sgr0=\E[m\017, smacs=\E)0\016, smir=\E[4h, smln=\E[p, smso=\E[7m, smul=\E[4m, tsl=\E7\E[25;%i%p1%dx, att605-pc|ATT 605 in pc term mode, acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263, cbt=\E[Z, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ich1=\E[@, il1=\E[L, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, kend=\E[F, kf1=\E[M, kf10=\E[V, kf2=\E[N, kf3=\E[O, kf4=\E[P, kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H, kich1=\E[@, knp=\E[G, kpp=\E[I, rmsc=\E[50;0|$<400>, smsc=\E[?11l\E[50;1|$<250>, xoffc=g, xonc=e, use=att605, att605-w|AT&T 605-w 132 column 102 key keyboard, cols#132, wsl#132, is1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h\E(B\E)0, use=att605, # (att610: I added / based on the init string. I also # added and because the BSD file says the att615s have them, # and the 615 is like a 610 with a big keyboard, and most of their other # smart terminals support the same sequence -- esr) att610|AT&T 610; 80 column; 98key keyboard, am, eslok, hs, mir, msgr, xenl, xon, cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h\E[?12l, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h$<200>\E[?5l, fsl=\E8, home=\E[H, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, indn=\E[%p1%dS, invis=\E[8m, is1=\E[8;0|\E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h\E(B\E)0, is2=\E[m\017, is3=\E(B\E)0, kLFT=\E[ @, kRIT=\E[ A, kbs=^H, kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOc, kf10=\ENp, kf11=\ENq, kf12=\ENr, kf13=\ENs, kf14=\ENt, kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H, kind=\E[S, kri=\E[T, ll=\E[24H, mc4=\E[?4i, mc5=\E[?5i, nel=\EE, pfx=\E[%p1%d;%p2%l%02dq F%p1%1d %p2%s, pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmln=\E[2p, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h, smln=\E[p, smso=\E[7m, smul=\E[4m, tsl=\E7\E[25;%i%p1%dx, att610-w|AT&T 610; 132 column; 98key keyboard, cols#132, wsl#132, is1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h, use=att610, att610-103k|AT&T 610; 80 column; 103key keyboard, kBEG=\ENB, kCAN=\EOW, kCMD=\EOU, kCPY=\END, kCRT=\EON, kDC=\ENF, kDL=\ENE, kEND=\ENN, kEOL=\EOA, kEXT=\EOK, kFND=\EOX, kHLP=\EOM, kMOV=\ENC, kMSG=\EOL, kNXT=\ENH, kOPT=\EOR, kPRT=\EOZ, kPRV=\ENG, kRDO=\EOT, kRES=\EOQ, kRPL=\EOY, kSAV=\EOO, kSPD=\EOP, kUND=\EOS, kbeg=\E9, kcan=\EOw, kclo=\EOV, kcmd=\EOu, kcpy=\ENd, kcrt=\EOn, kdch1=\ENf, kdl1=\ENe, kel=\EOa, kend=\E0, kent=^M, kext=\EOk, kf10@, kf11@, kf12@, kf13@, kf14@, kf9@, kfnd=\EOx, khlp=\EOm, kich1=\ENj, kmov=\ENc, kmrk=\ENi, kmsg=\EOl, knp=\E[U, knxt=\ENh, kopn=\EOv, kopt=\EOr, kpp=\E[V, kprt=\EOz, kprv=\ENg, krdo=\EOt, kref=\EOb, kres=\EOq, krfr=\ENa, krmir=\ENj, krpl=\EOy, krst=\EOB, ksav=\EOo, kslt=\ENI, kspd=\EOp, kund=\EOs, use=att610, att610-103k-w|AT&T 610; 132 column; 103key keyboard, cols#132, wsl#132, is1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h, use=att610-103k, att615|AT&T 615; 80 column; 98key keyboard, kLFT=\E[ A, kRIT=\E[ @, kf15=\EOC, kf16=\EOD, kf17=\EOE, kf18=\EOF, kf19=\EOG, kf20=\EOH, kf21=\EOI, kf22=\EOJ, kf23=\ENO, kf24=\ENP, kf25=\ENQ, kf26=\ENR, kf27=\ENS, kf28=\ENT, kf29=\EOP, kf30=\EOQ, kf31=\EOR, kf32=\EOS, kf33=\EOw, kf34=\EOx, kf35=\EOy, kf36=\EOm, kf37=\EOt, kf38=\EOu, kf39=\EOv, kf40=\EOl, kf41=\EOq, kf42=\EOr, kf43=\EOs, kf44=\EOp, kf45=\EOn, kf46=\EOM, use=att610, att615-w|AT&T 615; 132 column; 98key keyboard, kLFT=\E[ A, kRIT=\E[ @, kf15=\EOC, kf16=\EOD, kf17=\EOE, kf18=\EOF, kf19=\EOG, kf20=\EOH, kf21=\EOI, kf22=\EOJ, kf23=\ENO, kf24=\ENP, kf25=\ENQ, kf26=\ENR, kf27=\ENS, kf28=\ENT, kf29=\EOP, kf30=\EOQ, kf31=\EOR, kf32=\EOS, kf33=\EOw, kf34=\EOx, kf35=\EOy, kf36=\EOm, kf37=\EOt, kf38=\EOu, kf39=\EOv, kf40=\EOl, kf41=\EOq, kf42=\EOr, kf43=\EOs, kf44=\EOp, kf45=\EOn, kf46=\EOM, use=att610-w, att615-103k|AT&T 615; 80 column; 103key keyboard, kLFT=\E[ A, kRIT=\E[ @, use=att610-103k, att615-103k-w|AT&T 615; 132 column; 103key keyboard, kLFT=\E[ A, kRIT=\E[ @, use=att610-103k-w, # (att620: I added / based on the init string and # / from a BSD termcap -- esr) att620|AT&T 620; 80 column; 98key keyboard, am, eslok, hs, mir, msgr, xenl, xon, cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h\E[?12l, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h$<200>\E[?5l, fsl=\E8, home=\E[H, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, indn=\E[%p1%dS, invis=\E[8m, is1=\E[8;0|\E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h, is2=\E[m\017, is3=\E(B\E)0, kLFT=\E[ A, kRIT=\E[ @, kbs=^H, kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOc, kf10=\ENp, kf11=\ENq, kf12=\ENr, kf13=\ENs, kf14=\ENt, kf15=\EOC, kf16=\EOD, kf17=\EOE, kf18=\EOF, kf19=\EOG, kf2=\EOd, kf20=\EOH, kf21=\EOI, kf22=\EOJ, kf23=\ENO, kf24=\ENP, kf25=\ENQ, kf26=\ENR, kf27=\ENS, kf28=\ENT, kf29=\EOP, kf3=\EOe, kf30=\EOQ, kf31=\EOR, kf32=\EOS, kf33=\EOw, kf34=\EOx, kf35=\EOy, kf36=\EOm, kf37=\EOt, kf38=\EOu, kf39=\EOv, kf4=\EOf, kf40=\EOl, kf41=\EOq, kf42=\EOr, kf43=\EOs, kf44=\EOp, kf45=\EOn, kf46=\EOM, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H, kind=\E[S, kri=\E[T, ll=\E[24H, mc4=\E[?4i, mc5=\E[?5i, nel=\EE, pfx=\E[%p1%d;%p2%l%02dq F%p1%1d %p2%s, pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmacs=\E(B\017, rmam=\E[?7l, rmir=\E[4l, rmln=\E[2p, rmso=\E[m, rmul=\E[m, rs2=\Ec\E[?3l, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%t;7%;%?%p7%t;8%;m%?%p9%t\E)0\016%e\E(B\017%;, sgr0=\E[m\E(B\017, smacs=\E)0\016, smam=\E[?7h, smir=\E[4h, smln=\E[p, smso=\E[7m, smul=\E[4m, tsl=\E7\E[25;%i%p1%dx, att620-w|AT&T 620; 132 column; 98key keyboard, cols#132, wsl#132, is1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h, use=att620, att620-103k|AT&T 620; 80 column; 103key keyboard, kBEG=\ENB, kCAN=\EOW, kCMD=\EOU, kCPY=\END, kCRT=\EON, kDC=\ENF, kDL=\ENE, kEND=\ENN, kEOL=\EOA, kEXT=\EOK, kFND=\EOX, kHLP=\EOM, kMOV=\ENC, kMSG=\EOL, kNXT=\ENH, kOPT=\EOR, kPRT=\EOZ, kPRV=\ENG, kRDO=\EOT, kRES=\EOQ, kRPL=\EOY, kSAV=\EOO, kSPD=\EOP, kUND=\EOS, kbeg=\E9, kcan=\EOw, kclo=\EOV, kcmd=\EOu, kcpy=\ENd, kcrt=\EOn, kdch1=\ENf, kdl1=\ENe, kel=\EOa, kend=\E0, kent=^M, kext=\EOk, kf10@, kf11@, kf12@, kf13@, kf14@, kf15@, kf16@, kf17@, kf18@, kf19@, kf20@, kf21@, kf22@, kf23@, kf24@, kf25@, kf26@, kf27@, kf28@, kf29@, kf30@, kf31@, kf32@, kf33@, kf34@, kf35@, kf36@, kf37@, kf38@, kf39@, kf40@, kf41@, kf42@, kf43@, kf44@, kf45@, kf46@, kf9@, kfnd=\EOx, khlp=\EOm, kich1=\ENj, kmov=\ENc, kmrk=\ENi, kmsg=\EOl, knp=\E[U, knxt=\ENh, kopn=\EOv, kopt=\EOr, kpp=\E[V, kprt=\EOz, kprv=\ENg, krdo=\EOt, kref=\EOb, kres=\EOq, krfr=\ENa, krmir=\ENj, krpl=\EOy, krst=\EOB, ksav=\EOo, kslt=\ENI, kspd=\EOp, kund=\EOs, use=att620, att620-103k-w|AT&T 620; 132 column; 103key keyboard, cols#132, wsl#132, is1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h, use=att620-103k, # AT&T (formerly Teletype) 630 Multi-Tasking Graphics terminal # The following SETUP modes are assumed for normal operation: # Local_Echo=Off Gen_Flow=On Return=CR Received_Newline=LF # Font_Size=Large Non-Layers_Window_Cols=80 # Non-Layers_Window_Rows=60 # Other SETUP modes may be set for operator convenience or communication # requirements. Some capabilities assume a printer attached to the Aux EIA # port. This termcap description is for the Fixed Non-Layers Window. No # delays are specified; use "stty ixon -ixany" to enable DC3/DC1 flow control! # (att630: added , and from a BSD termcap file -- esr) att630|AT&T 630 windowing terminal, OTbs, am, da, db, mir, msgr, npc, xon, cols#80, it#8, lines#60, lm#0, bel=^G, blink=\E[5m, cbt=\E[Z, clear=\E[H\E[J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\ED, indn=\E[%p1%dS, is2=\E[m, kbs=^H, kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, kent=^M, kf10=\ENp, kf11=\ENq, kf12=\ENr, kf13=\ENs, kf14=\ENt, kf15=\ENu, kf16=\ENv, kf17=\ENw, kf18=\ENx, kf19=\ENy, kf20=\ENz, kf21=\EN{, kf22=\EN|, kf23=\EN}, kf24=\EN~, kf9=\ENo, khome=\E[H, kich1=\E[@, kil1=\E[L, mc4=\E[?4i, mc5=\E[?5i, nel=^M^J, pfx=\E[%p1%d;%p2%l%dq%p2%s, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmir=\E[4l, rmso=\E[m, rmul=\E[m, rs2=\Ec, sc=\E7, sgr=\E[0%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%p4%|%t;7%;m, sgr0=\E[m, smir=\E[4h, smso=\E[7m, smul=\E[4m, att630-24|5630-24|5630DMD-24|630MTG-24|AT&T 630 windowing terminal 24 lines, lines#24, use=att630, # This is the att700 entry for 700 native emulation of the AT&T 700 # terminal. Comments are relative to changes from the 605V2 entry and # att730 on which the entry is based. Comments show the terminfo # capability name, termcap name, and description. # # Here is what's going onm in the init string: # ESC [ 50;4| set 700 native mode (really is 605) # x ESC [ 56;ps| set lines to 24: ps=0; 40: ps=1 (plus status line) # ESC [ 53;0| set GenFlow to Xon/Xoff # ESC [ 8 ;0| set CR on NL # x ESC [ ? 3 l/h set workspace: 80 col(l); 132 col(h) # ESC [ ? 4 l jump scroll # ESC [ ? 5 l/h video: normal (l); reverse (h) # ESC [ ?13 l Labels on # ESC [ ?15 l parity check = no # ESC [ 13 l monitor mode off # ESC [ 20 l LF on NL (not CRLF on NL) # ESC [ ? 7 h autowrap on # ESC [ 12 h local echo off # ESC ( B GO = ASCII # ESC ) 0 G1 = Special Char & Line Drawing # ESC [ ? 31 l Set 7 bit controls # # Note: Most terminals, especially the 600 family use Reverse Video for # standout mode. DEC also uses reverse video. The VT100 uses bold in addition # Assume we should stay with reverse video for 70.. However, the 605V2 exits # standout mode with \E[m (all normal attributes). The 730 entry simply # exits reverse video which would leave other current attributes intact. It # was assumed the 730 entry to be more correct so rmso has changed. The # 605V2 has no sequences to turn individual attributes off, thus its setting # and the rmso/smso settings from the 730. # # Note: For the same reason as above in rmso I changed exit under-score mode # to specifically turn off underscore, rather than return to all normal # attributes # # Note: The following pkey_xmit is taken from the 605V2 which contained the # capability as pfxl. It was changed here to pfx since pfxl # will only compile successfully with Unix 4.0 tic. Also note that pfx only # allows strings to be parameters and label values must be programmed as # constant strings. Supposedly the pfxl of Version 4.0 allows both labels # and strings to be parameters. The 605V2 pfx entry should be examined later # in this regard. For reference the 730 pfxl entry is shown here for comparison # 730 pfx entry: # pfxl=\E[%?%p1%{25}%<%t%p1%e%p1%{24}%-%;%d;%p2%l%02d%?%p1%{25}%<%tq\s\s\s # SYS\s\s\s\s\sF%p1%:-2d\s\s%e;0;3q%;%p2%s, # # (for 4.0 tic) # pfxl=\E[%p1%d;%p2%l%02dq%?%p1%{9}%<%t F%p1%1d %;%p2%s, # # (for <4.0 tic) # pfx=\E[%p1%d;%p2%l%02dq%?%p1%{9}%<%t F%p1%1d %;%p2%s, # # From the AT&T 705 Multi-tasking terminal user's guide Page 8-8,8-9 # # Port1 Interface # # modular 10 pin Connector # Left side Right side # Pin 1 2 3 4 5 6 7 8 9 10 # # Key (notch) at bottom # # Pin 1 DSR # 3 DCD # 4 DTR # 5 Sig Ground # 6 RD # 7 SD # 8 CTS # 9 RTS # 10 Frame Ground # # The manual is 189 pages and is loaded with details about the escape codes, # etc..... Available from AT&T CIC 800-432-6600... # ask for Document number 999-300-660.. # att700|AT&T 700 24x80 column display w/102key keyboard, am, eslok, hs, mir, msgr, xenl, xon, cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h\E[?12l, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=\E[?5h$<200>\E[?5l, fln=4\,4, fsl=\E8, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, invis=\E[8m, is2=\E[50;4|\E[53;0|\E[8;0|\E[?4;13;15l\E[13;20l\E[?7h\E[12h\E(B\E)0\E[?31l\E[0m\017, is3=\E(B\E)0, kLFT=\E[ A, kRIT=\E[ @, kbs=^H, kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, kend=\E[24;1H, kf1=\EOc, kf10=\ENp, kf11=\ENq, kf12=\ENr, kf13=\ENs, kf14=\ENt, kf15=\EOC, kf16=\EOD, kf17=\EOE, kf18=\EOF, kf19=\EOG, kf2=\EOd, kf20=\EOH, kf21=\EOI, kf22=\EOJ, kf23=\ENO, kf24=\ENP, kf25=\ENQ, kf26=\ENR, kf27=\ENS, kf28=\ENT, kf29=\EOq, kf3=\EOe, kf30=\EOr, kf31=\EOs, kf32=\EOt, kf33=\EOu, kf34=\EOv, kf35=\EOw, kf36=\EOx, kf37=\EOy, kf38=\EOu, kf39=\EOv, kf4=\EOf, kf40=\EOl, kf41=\EOq, kf42=\EOr, kf43=\EOs, kf44=\EOp, kf45=\EOn, kf46=\EOM, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H, kich1=\E[@, kil1=\E[L, knp=\E[U, kpp=\E[V, ll=\E[24H, mc0=\E[i, mc4=\E[?4i, mc5=\E[?5i, nel=\EE, pfx=\E[%p1%d;%p2%l%02dq%?%p1%{9}%<%t F%p1%1d %;%p2%s, pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM, rmacs=^O, rmir=\E[4l, rmln=\E[2p, rmso=\E[27m, rmul=\E[24m, rmxon=\E[53;3|, rs1=\Ec\E[?3;5l\E[56;0|, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smir=\E[4h, smln=\E[p, smso=\E[7m, smul=\E[4m, smxon=\E[53;0|, tbc=\E[3g, tsl=\E7\E[99;%i%p1%dx, # This entry was modified 3/13/90 by JWE. # fixes include additions of , correcting , and modification # of . (See comments below) # att730 has status line of 80 chars # These were commented out: , , # the and up keys are used for shifted system Fkeys # NOTE: JWE 3/13/90 The 98 key keyboard translation for shift/HOME is # currently the same as (unshifted HOME or \E[H). On the 102, 102+1 # and 122 key keyboards, the 730's translation is \E[2J. For consistency # has been commented out. The user can uncomment if using the # 102, 102+1, or 122 key keyboards # kHOM=\E[2J, # (att730: I added / based on the init string -- esr) att730|AT&T 730 windowing terminal, am, da, db, eslok, hs, mir, msgr, npc, xenl, xon, cols#80, it#8, lh#2, lines#60, lm#0, lw#8, nlab#24, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h\E[?12l, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=\E[?5h$<200>\E[?5l, fsl=\E8, home=\E[H, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, invis=\E[8m, is1=\E[8;0|\E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h\E(B\E)B, is2=\E[m\017, is3=\E(B\E)0, kLFT=\E[ @, kRIT=\E[ A, kbs=^H, kcbt=\E[Z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOc, kf10=\ENp, kf11=\ENq, kf12=\ENr, kf13=\ENs, kf14=\ENt, kf15=\ENu, kf16=\ENv, kf17=\ENw, kf18=\ENx, kf19=\ENy, kf2=\EOd, kf20=\ENz, kf21=\EN{, kf22=\EN|, kf23=\EN}, kf24=\EN~, kf25=\EOC, kf26=\EOD, kf27=\EOE, kf28=\EOF, kf29=\EOG, kf3=\EOe, kf30=\EOH, kf31=\EOI, kf32=\EOJ, kf33=\ENO, kf34=\ENP, kf35=\ENQ, kf36=\ENR, kf37=\ENS, kf38=\ENT, kf39=\EOU, kf4=\EOf, kf40=\EOV, kf41=\EOW, kf42=\EOX, kf43=\EOY, kf44=\EOZ, kf45=\EO[, kf46=\EO\s, kf47=\EO], kf48=\EO\^, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H, kich1=\E[@, kil1=\E[L, kind=\E[S, kri=\E[T, mc0=\E[?19h\E[0i, mc4=\E[?4i, mc5=\E[?5i, nel=\EE, pfx=\E[%?%p1%{25}%<%t%p1%e%p1%{24}%-%;%d;%p2%l%02d%?%p1%{25}%<%tq SYS F%p1%:-2d %e;0;3q%;%p2%s, pfxl=\E[%p1%d;%p2%l%02d;0;0q%p3%:-16.16s%p2%s, pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmln=\E[?13h, rmso=\E[27m, rmul=\E[24m, rmxon=\E[?21l, rs2=\Ec\E[?3l, sc=\E7, sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h, smln=\E[?13l, smso=\E[7m, smul=\E[4m, smxon=\E[?21h, swidm=\E#6, tsl=\E7\E[;%i%p1%dx, att730-41|730MTG-41|AT&T 730-41 windowing terminal Version, lines#41, use=att730, att730-24|730MTG-24|AT&T 730-24 windowing terminal Version, lines#24, use=att730, att730r|730MTGr|AT&T 730 rev video windowing terminal Version, flash=\E[?5l$<200>\E[?5h, is1=\E[8;0|\E[?3;4;13;15l\E[?5h\E[13;20l\E[?7h\E[12h\E(B\E)B, use=att730, att730r-41|730MTG-41r|AT&T 730r-41 rev video windowing terminal Version, lines#41, use=att730r, att730r-24|730MTGr-24|AT&T 730r-24 rev video windowing terminal Version, lines#24, use=att730r, # The following represents the screen layout along with the associated # bezel buttons for the 5430/pt505 terminal. The "kf" designations do # not appear on the screen but are shown to reference the bezel buttons. # The "CMD", "MAIL", and "REDRAW" buttons are shown in their approximate # position relative to the screen. # # # # +----------------------------------------------------------------+ # | | # XXXX | kf0 kf24 | XXXX # | | # | | # XXXX | kf1 kf23 | XXXX # | | # | | # XXXX | kf2 kf22 | XXXX # | | # | | # XXXX | kf3 kf21 | XXXX # | | # | | # XXXX | kf4 kf20 | XXXX # | | # | | # XXXX | kf5 kf19 | XXXX # | | # | | # XXXX | kf6 kf18 | XXXX # | | # | | # XXXX | | XXXX # | | # | | # +----------------------------------------------------------------+ # # XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX # # Note: XXXX represents the screen buttons # CMD REDRAW # # MAIL # # version 1 note: # The character string sent by key 'kf26' may be user programmable # to send either \E[16s, or \E[26s. # The character string sent by key 'krfr' may be user programmable # to send either \E[17s, or \E[27s. # # Depression of the "CMD" key sends \E! (kcmd) # Depression of the "MAIL" key sends \E[26s (kf26) # "REDRAW" same as "REFRESH" (krfr) # # "kf" functions adds carriage return to output string if terminal is in # 'new line' mode. # # The following are functions not covered in the table above: # # Set keyboard character (SKC): \EPn1;Pn2w # Pn1= 0 Back Space key # Pn1= 1 Break key # Pn2= Program char (hex) # # Screen Definition (SDF): \E[Pn1;Pn2;Pn3;Pn4;Pn5t # Pn1= Window number (1-39) # Pn2-Pn5= Y;X;Y;X coordinates # # Screen Selection (SSL): \E[Pnu # Pn= Window number # # Set Terminal Modes (SM): \E[Pnh # Pn= 3 Graphics mode # Pn= > Cursor blink # Pn= < Enter new line mode # Pn= = Enter reverse insert/replace mode # Pn= ? Enter no scroll mode # # Reset Terminal Mode (RM): \E[Pnl # Pn= 3 Exit graphics mode # Pn= > Exit cursor blink # Pn= < Exit new line mode # Pn= = Exit reverse insert/replace mode # Pn= ? Exit no scroll mode # # Screen Status Report (SSR): \E[Pnp # Pn= 0 Request current window number # Pn= 1 Request current window dimensions # # Device Status Report (DSR): \E[6n Request cursor position # # Call Status Report (CSR): \E[Pnv # Pn= 0 Call failed # Pn= 1 Call successful # # Transparent Button String (TBS): \E[Pn1;Pn2;Pn3;{string # Pn1= Button number to be loaded # Pn2= Character count of "string" # Pn3= Key mode being loaded: # 0= Unshifted # 1= Shifted # 2= Control # String= Text string (15 chars max) # # Screen Number Report (SNR): \E[Pnp # Pn= Screen number # # Screen Dimension Report (SDR): \E[Pn1;Pn2r # Pn1= Number of rows available in window # Pn2= Number of columns available in window # # Cursor Position Report (CPR): \E[Pn1;Pn2R # Pn1= "Y" Position of cursor # Pn2= "X" Position of cursor # # Request Answer Back (RAB): \E[c # # Answer Back Response (ABR): \E[?;*;30;VSV # *= 0 No printer available # *= 2 Printer available # V= Software version number # SV= Software sub version number # (printer-available field not documented in v1) # # Screen Alignment Aid: \En # # Bell (lower pitch): \E[x # # Dial Phone Number: \EPdstring\ # string= Phone number to be dialed # # Set Phone Labels: \EPpstring\ # string= Label for phone buttons # # Set Clock: \EPchour;minute;second\ # # Position Clock: \EPsY;X\ # Y= "Y" coordinate # X= "X" coordinate # # Delete Clock: \Epr\ # # Programming The Function Buttons: \EPfPn;string\ # Pn= Button number (00-06, 18-24) # (kf00-kf06, kf18-kf24) # string= Text to sent on button depression # # The following in version 2 only: # # Request For Local Directory Data: \EPp12;\ # # Local Directory Data to host: \EPp11;LOCAL...DIRECTORY...DATA\ # # Request for Local Directory Data in print format: \EPp13;\ # # Enable 'Prt on Line' mode: \022 (DC2) # # Disable 'Prt on Line' mode: \024 (DC4) # # 05-Aug-86: # The following Terminfo entry describes functions which are supported by # the AT&T 5430/pt505 terminal software version 2 and later. att505|pt505|att5430|gs5430|AT&T Personal Terminal 505 or 5430 GETSET terminal, am, xon, cols#80, it#8, lines#24, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[2J\E[H, cnorm=\E[>l, cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[>h, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[0K, el1=\E[2K, home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=^J, is1=\EPr\\E[0u\E[2J\E[0;0H\E[m\E[3l\E[l\E[=l\E[?l, kbs=^H, kcmd=\E!, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\E[00s, kf1=\E[01s, kf18=\E[18s, kf19=\E[19s, kf2=\E[02s, kf20=\E[20s, kf21=\E[21s, kf22=\E[22s, kf23=\E[23s, kf24=\E[24s, kf26=\E[26s, kf3=\E[03s, kf4=\E[04s, kf5=\E[05s, kf6=\E[06s, krfr=\E[27s, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, rmacs=\E[10m, rmam=\E[11;1j, rmir=\E[4l, rmso=\E[m, rmul=\E[m, rs1=\Ec, sc=\E7, sgr0=\E[m, smacs=\E[11m, smam=\E[11;0j, smir=\E[4h, smso=\E[1m, smul=\E[4m, # The following Terminfo entry describes functions which are supported by # the AT&T 5430/pt505 terminal software version 1. att505-24|pt505-24|gs5430-24|AT&T PT505 or 5430 GETSET version 1 24 lines, lines#24, mc4@, mc5@, rc@, rmam@, sc@, smam@, use=att505, tt505-22|pt505-22|gs5430-22|AT&T PT505 or 5430 GETSET version 1 22 lines, lines#22, use=att505, # #### ------------------ TERMINFO FILE CAN BE SPLIT HERE --------------------- # This cut mark helps make life less painful for people running ncurses tic # on machines with relatively little RAM. The file can be broken in half here # cleanly and compiled in sections -- no `use' references cross this cut # going forward. # #### Ampex (Dialogue) # # Yes, these are the same people who are better-known for making audio- and # videotape. I'm told they are located in Redwood City, CA. # # From: Fri Sep 11 22:38:32 1981 # (ampex80: some capabilities merged in from SCO's entry -- esr) ampex80|a80|d80|dialogue|dialogue80|ampex dialogue 80, OTbs, am, bw, ul, cols#80, it#8, lines#24, bel=^G, cbt=\EI, clear=\E*$<75>, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER$<5*>, ed=\Ey, el=\Et, ht=^I, hts=\E1, ich1=\EQ, il1=\EE$<5*>, ind=^J, is2=\EA, rmso=\Ek, rmul=\Em, smso=\Ej, smul=\El, tbc=\E3, # This entry was from somebody anonymous, Tue Aug 9 20:11:37 1983, who wrote: ampex175|ampex d175, am, cols#80, lines#24, bel=^G, clear=\E+, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\Ey, el=\Et, home=^^, ich1=\EQ, il1=\EE, ind=^J, is2=\EX\EA\EF, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, khome=^^, kich1=\EQ, kil1=\EE, ll=^^^K, rmcup=\EF, rmso=\Ek, rmul=\Em, smcup=\EN, smso=\Ej, smul=\El, # No backspace key in the main QWERTY cluster. Fortunately, it has a # NEWLINE/PAGE key just above RETURN that sends a strange single-character # code. Given a suitable Unix (one that lets you set an echo-erase-as-BS-SP-BS # mode), this key can be used as the erase key; I find I like this. Because # some people and some systems may not, there is another termcap ("ampex175") # that suppresses this little eccentricity by omitting the relevant capability. ampex175-b|ampex d175 using left arrow for erase, kbs=^_, use=ampex175, # From: Richard Bascove # (ampex210: removed obsolete ":kn#10:" -- esr) ampex210|a210|ampex a210, OTbs, am, hs, xenl, cols#80, it#8, lines#24, xmc#1, cbt=\EI, clear=\E*, cub1=^H, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\Ey, el=\Et, flash=\EU\EX\EU\EX\EU\EX\EU\EX, fsl=\E.2, home=^^, ht=^I, ich1=\EQ, if=/usr/share/tabset/std, il1=\EE, invis@, is2=\EC\Eu\E'\E(\El\EA\E%\E{\E.2\EG0\Ed\En, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kf0=^A0\r, kf1=^A1\r, kf2=^A2\r, kf3=^A3\r, kf4=^A4\r, kf5=^A5\r, kf6=^A6\r, kf7=^A7\r, kf8=^A8\r, kf9=^A9\r, khome=^^, tsl=\E.0\Eg\E}\Ef, use=adm+sgr, # (ampex219: I added / based on the init string, added # from ampex219w, added =\E[?3l, irresistibly suggested by , # and moved the padding to be *after* the caps -- esr) ampex219|ampex-219|amp219|Ampex with Automargins, hs, xenl, cols#80, it#8, lines#24, bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, cbt=\E[Z, clear=\E[H\E[2J$<50>, cnorm=\E[?3l, cr=^M, csr=%i\E[%p1%2d;%p2%2dr, cub1=^H, cud1=\E[B, cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<5>, cuu1=\E[A$<2>, cvvis=\E[?3h, dim=\E[1m, ed=\E[J$<50>, el=\E[K$<3>, home=\E[H, ht=^I, ind=^J, is2=\E>\E[?1l\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\E[21~, kf1=\E[7~, kf2=\E[8~, kf3=\E[9~, kf4=\E[10~, kf5=\E[11~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H, rev=\E[7m, ri=\EM$<5>, rmam=\E[?7l, rmkx=\E>, rmso=\E[m$<2>, rmul=\E[m$<2>, sgr0=\E[m$<2>, smam=\E[?7h, smkx=\E=, smso=\E[7m$<2>, smul=\E[4m$<2>, ampex219w|ampex-219w|amp219w|Ampex 132 cols, cols#132, lines#24, bel=^G, cr=^M, cud1=^J, ind=^J, is2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h, use=ampex219, # (ampex232: removed , no file and no --esr) ampex232|ampex-232|Ampex Model 232, am, cols#80, lines#24, xmc#1, cbt=\EI, civis=\E.0, clear=\E+, cnorm=\E.4, cub1=^H, cud1=^V, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER$<5*/>, ed=\EY, el=\ET, flash=\Eb$<200/>\Ed, ht=^I, ich1=\EQ, il1=\EE$<5*/>, invis@, is2=\Eg\El, kbs=^H, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kf0=^A@\r, kf1=^AA\r, kf2=^AB\r, kf3=^AC\r, kf4=^AD\r, kf5=^AE\r, kf6=^AF\r, kf7=^AG\r, kf8=^AH\r, kf9=^AI\r, khome=^^, use=adm+sgr, # (ampex: removed , no file and no -- esr) ampex232w|Ampex Model 232 / 132 columns, cols#132, lines#24, is2=\E\034Eg\El, use=ampex232, #### Ann Arbor (aa) # # Ann Arbor made dream terminals for hackers -- large screen sizes and huge # numbers of function keys. At least some used monitors in portrait mode, # allowing up to 76-character screen heights! They were reachable at: # # Ann Arbor Terminals # 6175 Jackson Road # Ann Arbor, MI 48103 # (313)-663-8000 # # But in 1996 the phone number reaches some kitschy retail shop, and Ann Arbor # can't be found on the Web; I fear they're long dead. R.I.P. # # Originally from Mike O'Brien@Rand and Howard Katseff at Bell Labs. # Highly modified 6/22 by Mike O'Brien. # split out into several for the various screen sizes by dave-yost@rand # Modifications made 3/82 by Mark Horton # Modified by Tom Quarles at UCB for greater efficiency and more diversity # status line moved to top of screen, removed 5/82 # Some unknown person at SCO then hacked the init strings to make them more # efficient. # # assumes the following setup: # A menu: 0000 1010 0001 0000 # B menu: 9600 0100 1000 0000 0000 1000 0000 17 19 # C menu: 56 66 0 0 9600 0110 1100 # D menu: 0110 1001 1 0 # # Briefly, the settings are for the following modes: # (values are for bit set/clear with * indicating our preference # and the value used to test these termcaps) # Note that many of these settings are irrelevent to the terminfo # and are just set to the default mode of the terminal as shipped # by the factory. # # A menu: 0000 1010 0001 0000 # Block/underline cursor* # blinking/nonblinking cursor* # key click/no key click* # bell/no bell at column 72* # # key pad is cursor control*/key pad is numeric # return and line feed/return for key * # repeat after .5 sec*/no repeat # repeat at 25/15 chars per sec. * # # hold data until pause pressed/process data unless pause pressed* # slow scroll/no slow scroll* # Hold in area/don't hold in area* # functions keys have default*/function keys disabled on powerup # # show/don't show position of cursor during page transmit* # unused # unused # unused # # B menu: 9600 0100 1000 0000 0000 1000 0000 17 19 # Baud rate (9600*) # # 2 bits of parity - 00=odd,01=even*,10=space,11=mark # 1 stop bit*/2 stop bits # parity error detection off*/on # # keyboard local/on line* # half/full duplex* # disable/do not disable keyboard after data transmission* # # transmit entire page/stop transmission at cursor* # transfer/do not transfer protected characters* # transmit all characters/transmit only selected characters* # transmit all selected areas/transmit only 1 selected area* # # transmit/do not transmit line separators to host* # transmit/do not transmit page tab stops tabs to host* # transmit/do not transmit column tab stop tabs to host* # transmit/do not transmit graphics control (underline,inverse..)* # # enable*/disable auto XON/XOFF control # require/do not require receipt of a DC1 from host after each LF* # pause key acts as a meta key/pause key is pause* # unused # # unused # unused # unused # unused # # XON character (17*) # XOFF character (19*) # # C menu: 56 66 0 0 9600 0110 1100 # number of lines to print data on (printer) (56*) # # number of lines on a sheet of paper (printer) (66*) # # left margin (printer) (0*) # # number of pad chars on new line to printer (0*) # # printer baud rate (9600*) # # printer parity: 00=odd,01=even*,10=space,11=mark # printer stop bits: 2*/1 # print/do not print guarded areas* # # new line is: 01=LF,10=CR,11=CRLF* # unused # unused # # D menu: 0110 1001 1 0 # LF is newline/LF is down one line, same column* # wrap to preceding line if move left from col 1*/don't wrap # wrap to next line if move right from col 80*/don't wrap # backspace is/is not destructive* # # display*/ignore DEL character # display will not/will scroll* # page/column tab stops* # erase everything*/erase unprotected only # # editing extent: 0=display,1=line*,2=field,3=area # # unused # annarbor4080|aa4080|ann arbor 4080, OTbs, am, cols#80, lines#40, bel=^G, clear=\014$<2>, cr=^M, cub1=^H, cud1=^J, cuf1=^_, cup=\017%p2%{10}%/%{16}%*%p2%{10}%m%+%c%p1%?%p1%{19}%>%t%{12}%+%;%{64}%+%c, cuu1=^N, home=^K, ht=^I, hts=^]^P1, ind=^J, kbs=^^, kcub1=^H, kcud1=^J, kcuf1=^_, kcuu1=^N, khome=^K, tbc=^\^P^P, # Strange Ann Arbor terminal from BRL aas1901|Ann Arbor K4080 w/S1901 mod, am, cols#80, lines#40, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=^_, cuu1=^N, home=^K, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, ll=^O\0c, nel=^M^J, # If you're using the GNU termcap library, add # :cS=\E[%p1%d;%p2%d;%p3%d;%p4%dp: # to these capabilities. This is the nonstandard GNU termcap scrolling # capability, arguments are: # 1. Total number of lines on the screen. # 2. Number of lines above desired scroll region. # 3. Number of lines below (outside of) desired scroll region. # 4. Total number of lines on the screen, the same as the first parameter. # The generic Ann Arbor entry is the only one that uses this. aaa+unk|aaa-unk|ann arbor ambassador (internal - don't use this directly), OTbs, am, km, mc5i, mir, xon, cols#80, it#8, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J$<156>, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^K, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K$<5>, home=\E[H, hpa=\E[%p1%{1}%+%dG, ht=^I, hts=\EH, ich=\E[%p1%d@$<4*>, ich1=\E[@$<4>, il=\E[%p1%dL, il1=\E[L$<3>, ind=^K, invis=\E[8m, is1=\E[m\E7\E[H\E9\E8, is3=\E[1Q\E[>20;30l\EP`+x~M\E\\, kbs=^H, kcbt=\E[Z, kclr=\E[J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, kf1=\EOA, kf10=\EOJ, kf11=\EOK, kf12=\EOL, kf13=\EOM, kf14=\EON, kf15=\EOO, kf16=\EOP, kf17=\EOQ, kf18=\EOR, kf19=\EOS, kf2=\EOB, kf20=\EOT, kf21=\EOU, kf22=\EOV, kf23=\EOW, kf24=\EOX, kf3=\EOC, kf4=\EOD, kf5=\EOE, kf6=\EOF, kf7=\EOG, kf8=\EOH, kf9=\EOI, khome=\E[H, kich1=\E[@, kil1=\E[L, krmir=\E6, mc0=\E[0i, mc4=^C, mc5=\E[v, mc5p=\E[%p1%dv, rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, rmkx=\EP`>y~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\E\\, rmm=\E[>52l, rmso=\E[m, rmul=\E[m, sc=\E7, sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;%;%?%p7%t8;%;m, sgr0=\E[m, smkx=\EP`>z~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\E\\, smm=\E[>52h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%p1%{1}%+%dd, aaa+rv|ann arbor ambassador in reverse video, blink=\E[5;7m, bold=\E[1;7m, invis=\E[7;8m, is1=\E[7m\E7\E[H\E9\E8, rev=\E[m, rmso=\E[7m, rmul=\E[7m, rs1=\E[H\E[7m\E[J$<156>, sgr=\E[%?%p2%t4;%;%?%p4%t5;%;%?%p6%t1;%;%?%p1%p2%|%p3%!%t7;%;%?%p7%t8;%;m\016, sgr0=\E[7m\016, smso=\E[m, smul=\E[4;7m, # Ambassador with the DEC option, for partial vt100 compatibility. aaa+dec|ann arbor ambassador in dec vt100 mode, acsc=aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}, csr=\E[%i%p1%d;%p2%dr, enacs=\E(0, rmacs=^N, sgr=\E[%?%p2%t4;%;%?%p4%t5;%;%?%p6%t1;%;%?%p1%p3%|%!%t7;%;%?%p7%t8;%;m%?%p9%t\017%e\016%;, smacs=^O, aaa-18|ann arbor ambassador/18 lines, lines#18, is2=\E7\E[60;0;0;18p\E8, rmcup=\E[60;0;0;18p\E[60;1H\E[K, smcup=\E[18;0;0;18p, use=aaa+unk, aaa-18-rv|ann arbor ambassador/18 lines+reverse video, use=aaa+rv, use=aaa-18, aaa-20|ann arbor ambassador/20 lines, lines#20, is2=\E7\E[60;0;0;20p\E8, rmcup=\E[60;0;0;20p\E[60;1H\E[K, smcup=\E[20;0;0;20p, use=aaa+unk, aaa-22|ann arbor ambassador/22 lines, lines#22, is2=\E7\E[60;0;0;22p\E8, rmcup=\E[60;0;0;22p\E[60;1H\E[K, smcup=\E[22;0;0;22p, use=aaa+unk, aaa-24|ann arbor ambassador/24 lines, lines#24, is2=\E7\E[60;0;0;24p\E8, rmcup=\E[60;0;0;24p\E[60;1H\E[K, smcup=\E[24;0;0;24p, use=aaa+unk, aaa-24-rv|ann arbor ambassador/24 lines+reverse video, use=aaa+rv, use=aaa-24, aaa-26|ann arbor ambassador/26 lines, lines#26, is2=\E7\E[60;0;0;26p\E8, rmcup=\E[60;0;0;26p\E[26;1H\E[K, smcup=\E[H\E[J$<156>\E[26;0;0;26p, use=aaa+unk, aaa-28|ann arbor ambassador/28 lines, lines#28, is2=\E7\E[60;0;0;28p\E8, rmcup=\E[60;0;0;28p\E[28;1H\E[K, smcup=\E[H\E[J$<156>\E[28;0;0;28p, use=aaa+unk, aaa-30-s|aaa-s|ann arbor ambassador/30 lines w/status, eslok, hs, lines#29, dsl=\E7\E[60;0;0;30p\E[1;1H\E[K\E[H\E8\r\n\E[K, fsl=\E[>51l, is2=\r\n\E[A\E7\E[60;1;0;30p\E8, rmcup=\E[60;1;0;30p\E[29;1H\E[K, smcup=\E[H\E[J$<156>\E[30;1;0;30p\E[30;1H\E[K, tsl=\E[>51h\E[1;%p1%dH\E[2K, use=aaa+unk, aaa-30-s-rv|aaa-s-rv|ann arbor ambassador/30 lines+status+reverse video, use=aaa+rv, use=aaa-30-s, aaa-s-ctxt|aaa-30-s-ctxt|ann arbor ambassador/30 lines+status+save context, rmcup=\E[60;1;0;30p\E[59;1H\E[K, smcup=\E[30;1H\E[K\E[30;1;0;30p, use=aaa-30-s, aaa-s-rv-ctxt|aaa-30-s-rv-ct|ann arbor ambassador/30 lines+status+save context+reverse video, rmcup=\E[60;1;0;30p\E[59;1H\E[K, smcup=\E[30;1H\E[K\E[30;1;0;30p, use=aaa-30-s-rv, aaa|aaa-30|ambas|ambassador|ann arbor ambassador/30 lines, lines#30, is2=\E7\E[60;0;0;30p\E8, rmcup=\E[60;0;0;30p\E[30;1H\E[K, smcup=\E[H\E[J$<156>\E[30;0;0;30p, use=aaa+unk, aaa-30-rv|aaa-rv|ann arbor ambassador/30 lines in reverse video, use=aaa+rv, use=aaa-30, aaa-30-ctxt|aaa-ctxt|ann arbor ambassador/30 lines; saving context, rmcup=\E[60;0;0;30p\E[60;1H\E[K, smcup=\E[30;0;0;30p, use=aaa-30, aaa-30-rv-ctxt|aaa-rv-ctxt|ann arbor ambassador/30 lines reverse video; saving context, rmcup=\E[60;0;0;30p\E[60;1H\E[K, smcup=\E[30;0;0;30p, use=aaa+rv, use=aaa-30, aaa-36|ann arbor ambassador/36 lines, lines#36, is2=\E7\E[60;0;0;36p\E8, rmcup=\E[60;0;0;36p\E[36;1H\E[K, smcup=\E[H\E[J$<156>\E[36;0;0;36p, use=aaa+unk, aaa-36-rv|ann arbor ambassador/36 lines+reverse video, use=aaa+rv, use=aaa-36, aaa-40|ann arbor ambassador/40 lines, lines#40, is2=\E7\E[60;0;0;40p\E8, rmcup=\E[60;0;0;40p\E[40;1H\E[K, smcup=\E[H\E[J$<156>\E[40;0;0;40p, use=aaa+unk, aaa-40-rv|ann arbor ambassador/40 lines+reverse video, use=aaa+rv, use=aaa-40, aaa-48|ann arbor ambassador/48 lines, lines#48, is2=\E7\E[60;0;0;48p\E8, rmcup=\E[60;0;0;48p\E[48;1H\E[K, smcup=\E[H\E[J$<156>\E[48;0;0;48p, use=aaa+unk, aaa-48-rv|ann arbor ambassador/48 lines+reverse video, use=aaa+rv, use=aaa-48, aaa-60-s|ann arbor ambassador/59 lines+status, eslok, hs, lines#59, dsl=\E7\E[60;0;0;60p\E[1;1H\E[K\E[H\E8\r\n\E[K, fsl=\E[>51l, is2=\r\n\E[A\E7\E[60;1;0;60p\E8, tsl=\E[>51h\E[1;%p1%dH\E[2K, use=aaa+unk, aaa-60-s-rv|ann arbor ambassador/59 lines+status+reverse video, use=aaa+rv, use=aaa-60-s, aaa-60-dec-rv|ann arbor ambassador/dec mode+59 lines+status+rev video, use=aaa+dec, use=aaa+rv, use=aaa-60-s, aaa-60|ann arbor ambassador/60 lines, lines#60, is2=\E7\E[60;0;0;60p\E[1Q\E[m\E[>20;30l\E8, use=aaa+unk, aaa-60-rv|ann arbor ambassador/60 lines+reverse video, use=aaa+rv, use=aaa-60, aaa-db|ann arbor ambassador 30/destructive backspace, OTbs@, cub1=\E[D, is3=\E[1Q\E[m\E[>20l\E[>30h, use=aaa-30, guru|guru-33|guru+unk|ann arbor guru/33 lines 80 cols, lines#33, flash=\E[>59h$<100>\E[>59l, is2=\E7\E[255;0;0;33;80;80p\E8\E[J, is3=\E[>59l, rmcup=\E[255p\E[255;1H\E[K, smcup=\E[33p, use=aaa+unk, guru+rv|guru changes for reverse video, flash=\E[>59l$<100>\E[>59h, is3=\E[>59h, guru-rv|guru-33-rv|ann arbor guru/33 lines+reverse video, use=guru+rv, use=guru-33, guru+s|guru status line, eslok, hs, dsl=\E7\E[;0p\E[1;1H\E[K\E[H\E8\r\n\E[K, fsl=\E[>51l, rmcup=\E[255;1p\E[255;1H\E[K, smcup=, tsl=\E[>51h\E[1;%p1%dH\E[2K, guru-nctxt|guru with no saved context, smcup=\E[H\E[J$<156>\E[33p\E[255;1H\E[K, use=guru, guru-s|guru-33-s|ann arbor guru/33 lines+status, lines#32, is2=\r\n\E[A\E7\E[255;1;0;33;80;80p\E8\E[J, smcup=\E[33;1p\E[255;1H\E[K, use=guru+s, use=guru+unk, guru-24|ann arbor guru 24 lines, cols#80, lines#24, is2=\E7\E[255;0;0;24;80;80p\E8\E[J, smcup=\E[24p, use=guru+unk, guru-44|ann arbor guru 44 lines, cols#97, lines#44, is2=\E7\E[255;0;0;44;97;100p\E8\E[J, smcup=\E[44p, use=guru+unk, guru-44-s|ann arbor guru/44 lines+status, lines#43, is2=\r\n\E[A\E7\E[255;1;0;44;80;80p\E8\E[J, smcup=\E[44;1p\E[255;1H\E[K, use=guru+s, use=guru+unk, guru-76|guru with 76 lines by 89 cols, cols#89, lines#76, is2=\E7\E[255;0;0;76;89;100p\E8\E[J, smcup=\E[76p, use=guru+unk, guru-76-s|ann arbor guru/76 lines+status, cols#89, lines#75, is2=\r\n\E[A\E7\E[255;1;0;76;89;100p\E8\E[J, smcup=\E[76;1p\E[255;1H\E[K, use=guru+s, use=guru+unk, guru-76-lp|guru-lp|guru with page bigger than line printer, cols#134, lines#76, is2=\E7\E[255;0;0;76;134;134p\E8\E[J, smcup=\E[76p, use=guru+unk, guru-76-w|guru 76 lines by 178 cols, cols#178, lines#76, is2=\E7\E[255;0;0;76;178;178p\E8\E[J, smcup=\E[76p, use=guru+unk, guru-76-w-s|ann arbor guru/76 lines+status+wide, cols#178, lines#75, is2=\r\n\E[A\E7\E[255;1;0;76;178;178p\E8\E[J, smcup=\E[76;1p\E[255;1H\E[K, use=guru+s, use=guru+unk, guru-76-wm|guru 76 lines by 178 cols with 255 cols memory, cols#178, lines#76, is2=\E7\E[255;0;0;76;178;255p\E8\E[J, smcup=\E[76p, use=guru+unk, aaa-rv-unk|ann arbor unknown type, lh#0, lw#0, nlab#0, blink=\E[5;7m, bold=\E[1;7m, home=\E[H, invis=\E[7;8m, is1=\E[7m\E7\E[H\E9\E8, rev=\E[m, rmso=\E[7m, rmul=\E[7m, rs1=\E[H\E[7m\E[J, sgr=\E[%?%p6%t1;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p1%!%t7;%;%?%p7%t8;%;m, sgr0=\E[7m, smso=\E[m, smul=\E[4;7m, #### Applied Digital Data Systems (adds) # # ADDS itself is long gone. ADDS was bought by NCR, and the same group made # ADDS and NCR terminals. When AT&T and NCR merged, the engineering for # terminals was merged again. Then AT&T sold the terminal business to # SunRiver, which later changed its name to Boundless Technologies. The # engineers from Teletype, AT&T terminals, ADDS, and NCR (who are still there # as of early 1995) are at: # # Boundless Technologies # 100 Marcus Boulevard # Hauppauge, NY 11788-3762 # Vox: (800)-231-5445 # Fax: (516)-342-7378 # Web: http://boundless.com # # Their voice mail used to describe the place as "SunRiver (formerly ADDS)". # In 1995 Boundless acquired DEC's terminals business. # # Regent: lowest common denominator, works on all regents. # (regent: renamed ":bc:" to ":le:" -- esr) regent|Adds Regent Series, OTbs, am, cols#80, lines#24, bel=^G, clear=^L, cr=^M, cub1=^U, cud1=^J, cuf1=^F, cuu1=^Z, home=\EY\s\s, ind=^J, ll=^A, # Regent 100 has a bug where if computer sends escape when user is holding # down shift key it gets confused, so we avoid escape. regent100|Adds Regent 100, xmc#1, bel=^G, cup=\013%p1%' '%+%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%c, kf0=^B1\r, kf1=^B2\r, kf2=^B3\r, kf3=^B4\r, kf4=^B5\r, kf5=^B6\r, kf6=^B7\r, kf7=^B8\r, lf0=F1, lf1=F2, lf2=F3, lf3=F4, lf4=F5, lf5=F6, lf6=F7, lf7=F8, rmso=\E0@, rmul=\E0@, sgr0=\E0@, smso=\E0P, smul=\E0`, use=regent, regent20|Adds Regent 20, bel=^G, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, ed=\Ek, el=\EK, use=regent, regent25|Adds Regent 25, bel=^G, kcub1=^U, kcud1=^J, kcuf1=^F, kcuu1=^Z, khome=^A, use=regent20, regent40|Adds Regent 40, xmc#1, bel=^G, dl1=\El$<2*>, il1=\EM$<2*>, kf0=^B1\r, kf1=^B2\r, kf2=^B3\r, kf3=^B4\r, kf4=^B5\r, kf5=^B6\r, kf6=^B7\r, kf7=^B8\r, lf0=F1, lf1=F2, lf2=F3, lf3=F4, lf4=F5, lf5=F6, lf6=F7, lf7=F8, rmso=\E0@, rmul=\E0@, sgr0=\E0@, smso=\E0P, smul=\E0`, use=regent25, regent40+|Adds Regent 40+, is2=\EB, use=regent40, regent60|regent200|Adds Regent 60, dch1=\EE, is2=\EV\EB, kdch1=\EE, kich1=\EF, krmir=\EF, rmir=\EF, rmso=\ER\E0@\EV, smir=\EF, smso=\ER\E0P\EV, use=regent40+, # From: Thu Jul 9 09:27:33 1981 # (viewpoint: added , function key, and capabilities -- esr) viewpoint|addsviewpoint|adds viewpoint, OTbs, am, cols#80, lines#24, bel=^G, clear=^L, cnorm=\017\E0`, cr=^M, cub1=^H, cud1=^J, cuf1=^F, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, cvvis=\017\E0P, dl1=\El, ed=\Ek$<16.1*>, el=\EK$<16>, ind=^J, is2=\017\E0`, kcub1=^U, kcud1=^J, kcuf1=^F, kcuu1=^Z, kf0=^B1, kf2=^B2, kf3=^B!, kf4=^B", kf5=^B#, khome=^A, ll=^A, rmso=^O, rmul=^O, sgr0=^O, smso=^N, smul=^N, # Some viewpoints have bad ROMs that foo up on ^O screwpoint|adds viewpoint with ^O bug, cvvis@, rmso@, rmul@, smso@, smul@, use=viewpoint, # From: Jay S. Rouman 5 Jul 92 # The /// strings were added by ESR from specs. # Theory; the vp3a+ wants \E0%c to set highlights, where normal=01000000, # underline=01100000, rev=01010000, blink=01000010,dim=01000001, # invis=01000100 and %c is the logical or of desired attributes. # There is also a `tag bit' enabling attributes, set by \E) and unset by \E(. # # Update by TD - 2004: # Adapted from # https://web.archive.org/web/19990922005103/http://www.cs.utk.edu/~shuford/terminal/adds_viewpoint_news.txt # # COMMANDS ASCII CODE # # Address, Absolute ESC,=,row,column # Beep BEL # Aux Port Enable ESC,@ # Aux Port Disable ESC,A # Backspace BS # Cursor back BS # Cursor down LF # Cursor forward FF # Cursor home RS # Cursor up VT # Cursor supress ETB # Cursor enable CAN # Erase to end of line ESC,T # Erase to end of page ESC,Y # Erase screen SUB # Keyboard lock SI # Keyboard unlock SO # Read current cursor position ESC,? # Set Attribute ESC,0,x (see below for values of x) # Tag bit reset ESC,( # Tag bit set ESC,) # Transparent Print on ESC,3 # Transparent Print off ESC,4 # # # ATTRIBUTES # # Normal @ 0100 # Half Intensity A 0101 # Blinking B 0102 # Half Intensity Blinking C 0103 # Reverse Video P 0120 # Reverse Video Half Intensity Q 0121 # Reverse Video Blinking R 0122 # Reverse Video Half Intensity # Blinking S 0123 # Underlined ` 0140 # Underlined Half Intensity a 0141 # Underlined Blinking b 0142 # Underlined Half Intensity # Blinking c 0143 # Video suppress D 0104 vp3a+|viewpoint3a+|adds viewpoint 3a+, am, bw, cols#80, it#8, lines#24, blink=\E0B\E), civis=^W, clear=\E*$<80>, cnorm=^X, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dim=\E0A\E), ed=\EY$<80>, el=\ET, home=^^, ht=^I, ind=^J, invis=\E0D\E), kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, nel=^M^J, rev=\E0P\E), rmso=\E(, sgr=%?%p1%p2%|%p3%|%p4%|%p5%|%p7%|%t\E0%{64}%?%p1%t%{17}%|%;%?%p2%t%{32}%|%;%?%p3%t%{16}%|%;%?%p4%t%{2}%|%;%?%p5%t%{1}%|%;%c%?%p7%tD%;\E)%e\E(%;, sgr0=\E(, smso=\E0Q\E), smul=\E0`\E), vp60|viewpoint60|addsvp60|adds viewpoint60, use=regent40, # # adds viewpoint 90 - from cornell # Note: emacs sends ei occasionally to insure the terminal is out of # insert mode. This unfortunately puts the viewpoint90 IN insert # mode. A hack to get around this is . (Also, # - :ei=:im=: must be present in the termcap translation.) # - indicates glitch that attributes stick to location # - means it's safe to move in standout mode # - : clears screen and visual attributes without affecting # the status line # Function key and label capabilities merged in from SCO. vp90|viewpoint90|adds viewpoint 90, OTbs, bw, msgr, xhp, cols#80, lines#24, clear=\EG\Ek, cub1=^H, cud1=^J, cuf1=^F, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, dch1=\EE, dl1=\El, ed=\Ek, el=\EK, home=\EY\s\s, ht=^I, ich1=\EF \EF\025, ind=^J, kbs=^H, kcub1=^U, kcud1=^J, kcuf1=^F, kcuu1=^Z, kf0=^B1\r, kf1=^B2\r, kf10=^B;\r, kf2=^B3\r, kf3=^B4\r, kf4=^B5\r, kf5=^B6\r, kf6=^B7\r, kf7=^B8\r, kf8=^B9\r, kf9=^B\:\r, khome=^A, lf0=F1, lf1=F2, lf10=F11, lf2=F3, lf3=F4, lf4=F5, lf5=F6, lf6=F7, lf7=F8, lf8=F9, lf9=F10, ll=^A, rmso=\ER\E0@\EV, rmul=\ER\E0@\EV, sgr0=\ER\E0@\EV, smso=\ER\E0Q\EV, smul=\ER\E0`\EV, # Note: if return acts weird on a980, check internal switch #2 # on the top chip on the CONTROL pc board. adds980|a980|adds consul 980, OTbs, am, cols#80, lines#24, bel=^G, clear=\014$<1>\013@, cr=^M, cub1=^H, cud1=^J, cuf1=\E^E01, cup=\013%p1%{64}%+%c\E\005%p2%2d, dl1=\E\017$<13>, il1=\E\016$<13>, ind=^J, kf0=\E0, kf1=\E1, kf2=\E2, kf3=\E3, kf4=\E4, kf5=\E5, kf6=\E6, kf7=\E7, kf8=\E8, kf9=\E9, rmso=^O, sgr0=^O, smso=^Y^^^N, #### C. Itoh Electronics # # As of 1995 these people no longer make terminals (they're still in the # printer business). Their terminals were all clones of the DEC VT series. # They're located in Orange County, CA. # # CIT 80 - vt-52 emulator, the termcap has been modified to remove # the delay times and do an auto tab set rather than the indirect # file used in vt100. cit80|cit-80|citoh 80, OTbs, am, cols#80, lines#24, clear=\E[H\EJ, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, ed=\EJ, el=\EK, ff=^L, ind=^J, is2=\E>, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, rmkx=\E[?1l\E>, smkx=\E[?1h\E=, # From: Tim Wood Fri Sep 27 09:39:12 PDT 1985 # (cit101: added / based on init string, merged this with c101 -- esr) cit101|citc|C.itoh fast vt100, OTbs, am, xenl, cols#80, lines#24, bel=^G, clear=\E[H\E[2J, cnorm=\E[V\E8, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, cvvis=\E7\E[U, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, flash=\E[?5h$<200/>\E[?5l, ich1=\E[@, il1=\E[L, is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[3g\E[>5g, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, # CIE Terminals CIT-101e from Geoff Kuenning via BRL # The following termcap entry was created from the Callan cd100 entry. The # last two lines (with the capabilities in caps) are used by RM-cobol to allow # full selection of combinations of reverse video, underline, and blink. # (cit101e: removed unknown :f0=\EOp:f1=\EOq:f2=\EOr:f3=\EOs:f4=\EOt:f5=\EOu:\ # f6=\EOv:f7=\EOw:f8=\EOx:f9=\EOy:AB=\E[0;5m:AL=\E[m:AR=\E[0;7m:AS=\E[0;5;7m:\ # :NB=\E[0;1;5m:NM=\E[0;1m:NR=\E[0;1;7m:NS=\E[0;1;5;7m: -- esr) cit101e|C. Itoh CIT-101e, OTbs, OTpt, am, mir, msgr, cols#80, it#8, lines#24, acsc=, clear=\E[H\E[J, cnorm=, csr=\E[%i%p1%2d;%p2%2dr, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, cvvis=\E[?1l\E[?4l\E[?7h, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, if=/usr/share/tabset/vt100, il1=\E[L, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\EOT, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOm, kf6=\EOl, kf7=\EOM, kf8=\EOn, rc=\E8, ri=\EM, rmacs=^O, rmir=\E[4l, rmkx=\E>, rmso=\E[m, rmul=\E[m, sc=\E7, smacs=^N, smir=\E[4h, smkx=\E=, smso=\E[7m, smul=\E[4m, # From: David S. Lawyer, June 1997: # The CIT 101-e was made in Japan in 1983-4 and imported by CIE # Terminals in Irvine, CA. It was part of CITOH Electronics. In the # late 1980's CIT Terminals went out of business. # There is no need to use the initialization string is=... (by invoking # tset or setterm etc.) provided that the terminal has been manually set # up (and the setup saved with ^S) to be compatible with this termcap. To be # compatible it should be in ANSI mode (not VT52). A set-up that # works is to set all the manually setable stuff to factory defaults # by pressing ^D in set-up mode. Then increse the brighness with the # up-arrow key since the factory default will likely be dim on an old # terminal. Then change any options you want (provided that they are # compatible with the termcap). For my terminal I set: Screen # Background: light; Keyclicks: silent; Auto wraparound: on; CRT saver: # on. I also set up mine for parity (but you may not need it). Then # save the setup with ^S. # (cit101e-rv: added empty to suppress a tic warning. --esr) cit101e-rv|Citoh CIT-101e (sets reverse video), am, eo, mir, msgr, xenl, xon, cols#80, it#8, lines#24, OTnl=\EM, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[1v, clear=\E[H\E[J, cnorm=\E[0;3;4v, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[3;5v, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, flash=\E[?5l\E[?5h$<200/>, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS, is2=\E<\E>\E[?1l\E[?3l\E[?4l\E[?5h\E[?7h\E[?8h\E[3g\E[>5g\E(B\E[m\E[20l\E[1;24r\E[24;1H, kbs=\177, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmcup=, rmir=\E[4l, rmso=\E[m, rmul=\E[m, rs1=\Ec\E[?7h\E[>5g, sc=\E7, sgr0=\E[m, smcup=\E[>5g\E[?7h\E[?5h, smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%p1%d;%p2%dR, u7=\E[6n, u8=\E[?6c, u9=\E[c, cit101e-n|CIT-101e w/o am, am@, cvvis=\E[?1l\E[?4l\E[?7l, kbs=^H, kcub1=^H, kcud1=^J, use=cit101e, cit101e-132|CIT-101e with 132 cols, cols#132, kbs=^H, kcub1=^H, kcud1=^J, use=cit101e, cit101e-n132|CIT-101e with 132 cols w/o am, am@, cols#132, cvvis=\E[?1l\E[?4l\E[?7l, kbs=^H, kcub1=^H, kcud1=^J, use=cit101e, # CIE Terminals CIT-500 from BRL # The following SET-UP modes are assumed for normal operation: # GENERATE_XON/XOFF:YES DUPLEX:FULL NEWLINE:OFF # AUTOWRAP:ON MODE:ANSI SCREEN_LENGTH:64_LINES # DSPLY_CNTRL_CODES?NO PAGE_WIDTH:80 EDIT_MODE:OFF # Other SET-UP modes may be set for operator convenience or communication # requirements. # Hardware tabs are assumed to be set every 8 columns; they can be set up # by the "reset", "tset", or "tabs" utilities. No delays are specified; use # "stty ixon -ixany" to enable DC3/DC1 flow control! # (cit500: I added / based on the init string -- esr) cit500|CIE Terminals CIT-500, OTbs, OTpt, mir, msgr, xon, OTkn#10, cols#80, it#8, lines#64, vt#3, acsc=, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\EJ, el=\EK, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E<\E)0, kbs=^H, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[P, kdl1=\E[M, ked=\EJ, kel=\EK, kf0=\EOP, kf1=\EOQ, kf2=\EOR, kf3=\EOS, kf4=\EOU, kf5=\EOV, kf6=\EOW, kf7=\EOX, kf8=\EOY, kf9=\EOZ, khome=\E[H, kich1=\E[4h, kil1=\E[L, krmir=\E[4l, lf0=PF1, lf1=PF2, lf2=PF3, lf3=PF4, lf4=F15, lf5=F16, lf6=F17, lf7=F18, lf8=F19, lf9=F20, ll=\E[64H, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\E<\E2\E[20l\E[?6l\E[r\E[m\E[q\E(B\017\E)0\E>, sc=\E7, sgr0=\E[m, smacs=^N, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, # C. Itoh printers begin here citoh|ci8510|8510|c.itoh 8510a, cols#80, it#8, bold=\E!, cub1@, is2=\E(009\,017\,025\,033\,041\,049\,057\,065\,073., rep=\ER%p2%03d%p1%c, ri=\Er, rmul=\EY, sgr0=\E"\EY, smul=\EX, use=lpr, citoh-pica|citoh in pica, is1=\EN, use=citoh, citoh-elite|citoh in elite, cols#96, is1=\EE, is2=\E(009\,017\,025\,033\,041\,049\,057\,065\,073\,081\,089., use=citoh, citoh-comp|citoh in compressed, cols#136, is1=\EQ, is2=\E(009\,017\,025\,033\,041\,049\,057\,065\,073\,081\,089\,097\,105\,113\,121\,129., use=citoh, # citoh has infinite cols because we don't want lp ever inserting \n\t**. citoh-prop|citoh-ps|ips|citoh in proportional spacing mode, cols#32767, is1=\EP, use=citoh, citoh-6lpi|citoh in 6 lines per inch mode, is3=\EA, use=citoh, citoh-8lpi|citoh in 8 lines per inch mode, lines#88, is3=\EB, use=citoh, #### Control Data (cdc) # cdc456|cdc 456 terminal, OTbs, am, cols#80, lines#24, bel=^G, clear=^Y^X, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E1%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, dl1=\EJ, ed=^X, el=^V, home=^Y, il1=\EL, ind=^J, # Assorted CDC terminals from BRL (improvements by DAG & Ferd Brundick) cdc721|CDC Viking, OTbs, am, cols#80, lines#24, clear=^L, cuf1=^X, cup=\002%p2%{32}%+%c%p1%{32}%+%c, cuu1=^W, el=^K, home=^Y, kcub1=^H, kcud1=^J, kcuf1=^I, kcuu1=^W, khome=^Y, cdc721ll|CDC Vikingll, OTbs, am, cols#132, lines#24, clear=^L, cuf1=^X, cup=\002%p2%{32}%+%c%p1%{32}%+%c, cuu1=^W, el=^K, home=^Y, kcub1=^H, kcud1=^J, kcuf1=^I, kcuu1=^W, khome=^Y, # (cdc752: the BRL entry had :ll=\E1 ^Z: commented out cdc752|CDC 752, OTbs, am, bw, xhp, cols#80, lines#24, bel=^G, clear=\030\E1\s\s, cr=^M, cub1=^H, cud1=^J, cuf1=^U, cup=\E1%p2%{32}%+%c%p1%{32}%+%c, cuu1=^Z, el=^V, home=\E1\s\s, ind=^J, ll=^Y, rs1=\E1 \030\002\003\017, # CDC 756 # The following switch/key settings are assumed for normal operation: # 96 chars SCROLL FULL duplex not BLOCK # Other switches may be set according to communication requirements. # Insert/delete-character cannot be used, as the whole display is affected. # "so" & "se" are commented out until jove handles "sg" correctly. cdc756|CDC 756, OTbs, am, bw, OTkn#10, cols#80, lines#24, bel=^G, clear=^Y^X, cr=^M, cub1=^H, cud1=^J, cuf1=^U, cup=\E1%p2%{32}%+%c%p1%{32}%+%c, cuu1=^Z, dl1=\EJ$<6*/>, ed=^X, el=^V, home=^Y, il1=\EL$<6*/>, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^U, kcuu1=^Z, kdch1=\EI, kdl1=\EL, ked=^X, kel=^V, kf0=\EA, kf1=\EB, kf2=\EC, kf3=\ED, kf4=\EE, kf5=\EF, kf6=\EG, kf7=\EH, kf8=\Ea, kf9=\Eb, khome=^Y, khts=^O, kich1=\EK, kil1=\EL, lf0=F1, lf1=F2, lf2=F3, lf3=F4, lf4=F5, lf5=F6, lf6=F7, lf7=F8, lf8=F9, lf9=F10, ll=^Y^Z, rs1=\031\030\002\003\017, # # CDC 721 from Robert Viduya, Ga. Tech. via BRL. # # Part of the long initialization string defines the "DOWN" key to the left # of the tab key to send an ESC. The real ESC key is positioned way out # in right field. # # The termcap won't work in 132 column mode due to the way it it moves the # cursor. Termcap doesn't have the capability (as far as I could tell) to # handle the 721 in 132 column mode. # # (cdc721: changed :ri: to :sr: -- esr) cdc721-esc|Control Data 721, OTbs, OTpt, am, bw, msgr, xon, OTkn#10, cols#80, it#8, lines#30, bel=^G, blink=^N, cbt=^^^K, clear=^L, cub1=^H, cud1=^Z, cuf1=^X, cup=\002%p2%{32}%+%c%p1%{32}%+%c, cuu1=^W, dch1=^^N, dim=^\, dl1=^^Q, ed=^^P, el=^K, home=^Y, hts=^^^RW, ich1=^^O, il1=^^R, ind=\036W =\036U, invis=^^^R[, is2=\036\022B\003\036\035\017\022\025\035\036E\036\022H\036\022J\036\022L\036\022N\036\022P\036\022Q\036\022\036\022\^\036\022b\036\022i\036W =\036\022Z\036\011C1-` `!k/o, kbs=^H, kcub1=^H, kcud1=^Z, kcuf1=^X, kcuu1=^W, kf0=^^q, kf1=^^r, kf2=^^s, kf3=^^t, kf4=^^u, kf5=^^v, kf6=^^w, kf7=^^x, kf8=^^y, kf9=^^z, khome=^Y, ll=^B =, rev=^^D, ri=\036W =\036V, rmir=, rmkx=^^^Rl, rmso=^^E, rmul=^], sgr0=\017\025\035\036E\036\022\\, smir=, smkx=^^^Rk, smso=^^D, smul=^\, tbc=^^^RY, #### Getronics # # Getronics is a Dutch electronics company that at one time was called # `Geveke' and made async terminals; but (according to the company itself!) # they've lost all their documentation on the command set. The hardware # documentation suggests the terminals were actually manufactured by a # Taiwanese electronics company named Cal-Comp. There are known # to have been at least two models, the 33 and the 50. # # The 50 seems to be a top end vt220 clone, with the addition of a higher # screen resolution, a larger screen, at least 1 page of memory above and # below the screen, apparently pages of memory right and left of the screen # which can be panned, and about 75 function keys (15 function keys x normal, # shift, control, func A, func B). It also has more setup possibilities than # the vt220. The monitor case is dated November 1978 and the keyboard case is # May 1982. # # The vt100 emulation works as is. The entry below describes the rather # non-conformant (but more featureful) ANSI mode. # # From: Stephen Peterson , 27 May 1995 visa50|geveke visa 50 terminal in ansi 80 character mode, bw, mir, msgr, cols#80, lines#25, acsc=0_aaffggh jjkkllmmnnooqqssttuuvvwwxx, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dX, dch1=\E[X, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, flash=\E[?5h\E[?5l, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, is2=\E0;2m\E[1;25r\E[25;1H\E[?3l\E[?7h\E[?8h, ka1=\E[f, ka3=\EOQ, kb2=\EOP, kbs=^H, kc1=\EOR, kc3=\EOS, kcub1=\E[D, kcud1=\E[A, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kdl1=\EOS, kf0=\E010, kf1=\E001, kf10=\E011, kf2=\E002, kf3=\E003, kf4=\E004, kf5=\E005, kf6=\E006, kf7=\E007, kf8=\E008, kf9=\E009, khome=\E[f, lf2=A delete char, lf3=A insert line, lf4=A delete line, lf5=A clear, lf6=A ce of/cf gn, lf7=A print, lf8=A on-line, lf9=A funcl0=A send, nel=^M^J, rev=\E[7m, rmacs=\E[3l, rmam=\E[?7l, rmir=\E[4l, rmkx=\E>, rmso=\E[0;2m, rmul=\E[0m, sgr0=\E[0;2m, smacs=\E3h, smam=\E?7h, smir=\E[4h, smkx=\E=, smso=\E[2;7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, #### Human Designed Systems (Concept) # # Human Designed Systems # 400 Fehley Drive # King of Prussia, PA 19406 # Vox: (610)-277-8300 # Fax: (610)-275-5739 # Net: support@hds.com # # John Martin is their termcap expert. They're mostly out of # the character-terminal business now (1995) and making X terminals. In # particular, the whole `Concept' line described here was discontinued long # ago. # # From: Sat Jun 27 07:41:20 1981 # Extensive changes to c108 by arpavax:eric Feb 1982 # Some unknown person at SCO then translated it to terminfo. # # There seem to be a number of different versions of the C108 PROMS # (with bug fixes in its Z-80 program). # # The first one that we had would lock out the keyboard of you # sent lots of short lines (like /usr/dict/words) at 9600 baud. # Try that on your C108 and see if it sends a ^S when you type it. # If so, you have an old version of the PROMs. # # You should configure the C108 to send ^S/^Q before running this. # It is much faster (at 9600 baud) than the c100 because the delays # are not fixed. # new status line display entries for c108-8p: # - init str #3 - setup term for status display - # set programmer mode, select window 2, define window at last # line of memory, set bkgnd stat mesg there, select window 0. # # - to status line - select window 2, home cursor, erase to # end-of-window, 1/2 bright on, goto(line#0, col#?) # # - from status line - 1/2 bright off, select window 0 # # - disable status display - set bkgnd status mesg with # illegal window # # # There are probably more function keys that should be added but # I don't know what they are. # # No delays needed on c108 because of ^S/^Q handshaking # c108|concept108|c108-8p|concept108-8p|concept 108 w/8 pages, is3=\EU\E z"\Ev\001\177 !p\E ;"\E z \Ev \001\177p\Ep\n, rmcup=\Ev \001\177p\Ep\r\n, use=c108-4p, c108-4p|concept108-4p|concept 108 w/4 pages, OTbs, eslok, hs, xon, pb@, acsc=jEkTl\\mMqLxU, cnorm=\Ew, cr=^M, cup=\Ea%p1%?%p1%{95}%>%t\001%{96}%-%;%{32}%+%c%p2%?%p2%{95}%>%t\001%{96}%-%;%{32}%+%c, cvvis=\EW, dch1=\E 1$<16*>, dsl=\E ;\177, fsl=\Ee\E z\s, ind=^J, is1=\EK\E!\E F, is3=\EU\E z"\Ev\177 !p\E ;"\E z \Ev \001 p\Ep\n, rmacs=\Ej\s, rmcup=\Ev \001 p\Ep\r\n, smacs=\Ej!, smcup=\EU\Ev 8p\Ep\r\E\025, tsl=\E z"\E?\E\005\EE\Ea %+\s, use=c100, c108-rv|c108-rv-8p|concept 108 w/8 pages in reverse video, rmcup=\Ev \002 p\Ep\r\n, smcup=\EU\Ev 8p\Ep\r, use=c108-rv-4p, c108-rv-4p|concept108rv4p|concept 108 w/4 pages in reverse video, flash=\EK$<200>\Ek, is1=\Ek, rmso=\Ee, smso=\EE, use=c108-4p, c108-w|c108-w-8p|concept108-w-8|concept108-w8p|concept 108 w/8 pages in wide mode, cols#132, is1=\E F\E", rmcup=\Ev ^A0\001D\Ep\r\n, smcup=\EU\Ev 8\001D\Ep\r, use=c108-8p, # Concept 100: # These have only window relative cursor addressing, not screen # relative. To get it to work right here, smcup/rmcup (which # were invented for the concept) lock you into a one page # window for screen style programs. # # To get out of the one page window, we use a clever trick: # we set the window size to zero ("\Ev " in rmcup) which the # terminal recognizes as an error and resets the window to all # of memory. # # This trick works on c100 but does not on c108, sigh. # # Some tty drivers use cr3 for concept, others use nl3, hence # the delays on cr and ind below. This padding is only needed at # 9600 baud and up. One or the other is commented out depending on # local conventions. # # 2 ms padding on isn't always enough. 6 works fine. Maybe # less than 6 but more than 2 will work. # # Note: can't use function keys f7-f10 because they are # indistinguishable from arrow keys (!), also, del char and # clear eol use xon/xoff so they probably won't work very well. # # Also note that we don't define insrt/del char/delline/eop/send # because they don't transmit unless we reset them - I figured # it was a bad idea to clobber their definitions. # # The sequence changes the escape character to ^^ so that # escapes will be passed through to the printer. Only trouble # is that ^^ won't be - ^^ was chosen to be unlikely. # Unfortunately, if you're sending raster bits through to be # plotted, any character you choose will be likely, so we lose. # # \EQ"\EY(^W (send anything from printer to host, for xon/xoff) # cannot be # in is2 because it will hang a c100 with no printer # if sent twice. c100|concept100|concept|c104|c100-4p|hds concept 100, OTbs, am, eo, mir, ul, xenl, cols#80, lines#24, pb#9600, vt#8, bel=^G, blink=\EC, clear=\E?\E\005$<2*>, cr=$<9>\r, cub1=^H, cud1=^J, cuf1=\E=, cup=\Ea%p1%{32}%+%c%p2%{32}%+%c, cuu1=\E;, dch1=\E\021$<16*>, dim=\EE, dl1=\E\002$<3*>, ed=\E\005$<16*>, el=\E\025$<16>, flash=\Ek$<200>\EK, ht=\011$<8>, il1=\E\022$<3*>, ind=^J, invis=\EH, ip=$<16*>, is1=\EK, is2=\EU\Ef\E7\E5\E8\El\ENH\E\0\Eo&\0\Eo'\E\Eo!\0\E\007!\E\010A@ \E4#\:"\E\:a\E4#;"\E\:b\E4#<"\E\:c, is3=\Ev $<6>\Ep\n, kbs=^H, kcbt=\E', kctab=\E_, kcub1=\E>, kcud1=\E<, kcuf1=\E=, kcuu1=\E;, kdch1=\E^Q, kdl1=\E^B, ked=\E^C, kel=\E^S, kf1=\E5, kf2=\E6, kf3=\E7, kf4=\E8, kf5=\E9, kf6=\E\:a, kf7=\E\:b, kf8=\E\:c, khome=\E?, khts=\E], kich1=\E^P, kil1=\E^R, kind=\E[, knp=\E-, kpp=\E., kri=\E\\, krmir=\E\0, mc4=\036o \E\EQ!\EYP\027, mc5=\EQ"\EY(\027\EYD\Eo \036, prot=\EI, rep=\Er%p1%c%p2%{32}%+%c$<.2*>, rev=\ED, rmcup=\Ev $<6>\Ep\r\n, rmir=\E\s\s, rmkx=\Ex, rmso=\Ed, rmul=\Eg, sgr0=\EN@, smcup=\EU\Ev 8p\Ep\r\E\025$<16>, smir=\E^P, smkx=\EX, smso=\ED, smul=\EG, c100-rv|c100-rv-4p|concept100-rv|c100 rev video, cnorm@, cvvis@, flash=\EK$<200>\Ek, is1=\Ek, rmso=\Ee, smso=\EE, use=c100, oc100|oconcept|c100-1p|old 1 page concept 100, in, is3@, use=c100, # From: Walter Skorski , 16-oct-1996. # Lots of notes, originally inline, but ncurses doesn't grok that. # # am: not available in power on mode, but turned on with \E[=107;207h in # is2=. Also, \E=124l in is2= could have been used to prevent needing # to specify xenl:, but that would have rendered the last space on the # last line useless. # bw: Not available in power on mode, but turned on with \E[=107;207h in # is2=. # clear: Could be done with \E[2J alone, except that vi (and probably most # other programs) assume that this also homes the cursor. # dsl: Go to window 2, go to the beginning of the line, use a line feed to # scroll the window, and go back to window 1. # is2: the string may cause a warning to be issued by tic that it # found a very long line and that it suspects that a comma is missing # somewhere. This warning can be ignored (unless it comes up more than # once). The initialization string contains the following commands: # # [Setup mode items changed from factory defaults:] # \E)0 set alternate character set to # graphics # ^O set character set to default # [In case it wasn't] # \E[m turn off all attributes # [In case they weren't off] # \E[=107; cursor wrap and # 207h character wrap on # \E[90;3u set Fkey definitions to "transmit" # defaults # \E[92;3u set cursor key definitions to # "transmit" defaults # \E[43;1u set shift F13 to transmit... # \177\E$P\177 # \E[44;1u set shift F14 to transmit... # \177\E$Q\177 # \E[45;1u set shift F15 to transmit... # \177\E$R\177 # \E[46;1u set shift F16 to transmit... # \177\E$S\177 # \E[200;1u set shift up to transmit... # \177\E$A\177 # \E[201;1u set shift down to transmit... # \177\E$B\177 # \E[202;1u set shift right to transmit... # \177\E$C\177 # \E[203;1u set shift left to transmit... # \177\E$D\177 # \E[204;1u set shift home to transmit... # \177\E$H\177 # \E[212;1u set backtab to transmit... # \177\E$I\177 # \E[213;1u set shift backspace to transmit... # \177\E$^H\177 # \E[214;1u set shift del to transmit... # "\E$\177" # [Necessary items not mentioned in setup mode:] # \E[2!w move to window 2 # \E[25;25w define window as line 25 of memory # \E[!w move to window 1 # \E[2*w show current line of window 2 as # status line # \E[2+x set meta key to use high bit # \E[;3+} move underline to bottom of character # # All Fkeys are set to their default transmit definitions with \E[90;3u # in is2=. IMPORTANT: to use this terminal definition, the "quit" stty # setting MUST be redefined or deactivated, because the default is # contained in almost all of this terminal's Fkey strings! If for some # reason "quit" cannot be altered, the Fkeys can, but it would be # necessary to change ^| to ^] in all of these definitions, and add # \E[2;029!t to is2. # lines: is set to 24 because this terminal refuses to treat the 25th # line normally. # ll: Not available in power on mode, but turned on with \E[=107;207h in # is2=. # lm: Pointless, given that this definition locks a single screen of # memory into view, but what the hey... # rmso: Could use \E[1;7!{ to turn off only bold and reverse (leaving any # other attributes alone), but some programs expect this to turn off # everything. # rmul: Could use \E[4!{ to turn off only underline (leaving any other # attributes alone), but some programs expect this to turn off # everything. # sgr: Attributes are set on this terminal with the string \E[ followed by # a list of attribute code numbers (in decimal, separated by # semicolons), followed by the character m. The attribute code # numbers are: # 1 for bold; # 2 for dim (which is ignored in power on mode); # 4 for underline; # 5 for blinking; # 7 for inverse; # 8 for not displayable; and # =99 for protected (except that there are strange side # effects to protected characters which make them inadvisable). # The mapping of terminfo parameters to attributes is as follows: # %p1 (standout) = bold and inverse together; # %p2 (underline) = underline; # %p3 (reverse) = inverse; # %p4 (blink) = blinking; # %p5 (dim) is ignored; # %p6 (bold) = bold; # %p7 (invisible) = not displayable; # %p8 (protected) is ignored; and # %p9 (alt char set) = alt char set. # The code to do this is: # \E[0 OUTPUT \E[0 # %?%p1%p6%O IF (standout; bold) OR # %t;1 THEN OUTPUT ;1 # %; ENDIF # %?%p2 IF underline # %t;4 THEN OUTPUT ;4 # %; ENDIF # %?%p4 IF blink # %t;5 THEN OUTPUT ;5 # %; ENDIF # %?%p1%p3%O IF (standout; reverse) OR # %t;7 THEN OUTPUT ;7 # %; ENDIF # %?%p7 IF invisible # %t;8 THEN OUTPUT ;8 # %; ENDIF # m OUTPUT m # %?%p9 IF altcharset # %t^N THEN OUTPUT ^N # %e^O ELSE OUTPUT ^O # %; ENDIF # sgr0: Everything is turned off (including alternate character set), since # there is no way of knowing what it is that the program wants turned # off. # smul: The "underline" attribute is reconfigurable to an overline or # strikethru, or (as done with \E[;3+} in is2=), to a line at the true # bottom of the character cell. This was done to allow for more readable # underlined characters, and to be able to distinguish between an # underlined space, an underscore, and an underlined underscore. # xenl: Terminal can be configured to not need this, but this "glitch" # behavior is actually preferable with autowrap terminals. # # Parameters kf31= thru kf53= actually contain the strings sent by the shifted # Fkeys. There are no parameters for shifted Fkeys in terminfo. The is2 # string modifies the 'O' in kf43 to kf46 to a '$'. # # kcbt was originally ^I but redefined in is2=. # kHOM was \E[H originally but redefined in is2=, as were a number of # other keys. # kDC was originally \177 but redefined in is2=. # # kbs: Shift was also ^H originally but redefined as \E$^H in is2=. # tsl: Go to window 2, then do an hpa=. # #------- flash=\E[8;3!}^G\E[3;3!} #------- flash=\E[?5h$<100>\E[?5l # There are two ways to flash the screen, both of which have their drawbacks. # The first is to set the bell mode to video, transmit a bell character, and # set the bell mode back - but to what? There is no way of knowing what the # user's old bell setting was before we messed with it. Worse, the command to # set the bell mode also sets the key click volume, and there is no way to say # "leave that alone", or to know what it's set to, either. # The second way to do a flash is to set the screen to inverse video, pad for a # tenth of a second, and set it back - but like before, there's no way to know # that the screen wasn't ALREADY in inverse video, or that the user may prefer # it that way. The point is moot anyway, since vi (and probably other # programs) assume that by defining flash=, you want the computer to use it # INSTEAD of bel=, rather than as a secondary type of signal. # #------- cvvis=\E[+{ # The is the power on setting, which is also as visible as the cursor # gets. #------- wind=\E[%i%p1%d;%p2%d;%p3%{1}%+%d;%p4%{1}%+%dw # Windowing is possible, but not defined here because it is also used to # emulate status line functions. Allowing a program to set a window could # clobber the status line or render it unusable. There is additional memory, # but screen scroll functions are destructive and do not make use of it. # #------- dim= Not available in power on mode. # You have a choice of defining low intensity characters as "half bright" and # high intensity as "normal", or defining low as "normal" and high as "bold". # No matter which you choose, only one of either "half bright" or "bold" is # available at any time, so taking the time to override the default is # pointless. # #------- prot=\E[=0;99m # Not defined, because it appears to have some strange side effects. #------- pfkey=%?%p1%{24}%<%p1%{30}%>%p1%{54}%<%A%O%t\E[%p1%du\177%p2%s\177%; #------- pfloc=%?%p1%{24}%<%p1%{30}%>%p1%{54}%<%A%O%t\E[%p1%du\177%p2%s\177%; #------- pfx=%?%p1%{24}%<%p1%{30}%>%p1%{54}%<%A%O%t\E[%p1%d;1u\177%p2%s\177%; # Available, but making them available to programs is inadvisable. # The code to do this is: # %?%p1%{24}%< IF ((key; 24) <; # %p1%{30}%> ((key; 30) >; # %p1%{54}%< (key; 54) < # %A ) AND # %O ) OR # [that is, "IF key < 24 OR (key > 30 AND key < 54)",] # %t\E[ THEN OUTPUT \E[ # %p1%d OUTPUT (key) as decimal # [next line applies to pfx only] # ;1 OUTPUT ;1 # u OUTPUT u # \177 OUTPUT \177 # %p2%s OUTPUT (string) as string # \177 OUTPUT \177 # [DEL chosen as delimiter, but could be any character] # [implied: ELSE do nothing] # %; ENDIF # #------- rs2= # Not defined since anything it might do could be done faster and easier with # either Meta-Shift-Reset or the main power switch. # #------- smkx=\E[1!z #------- rmkx=\E[!z # These sequences apply to the cursor and setup keys only, not to the # numeric keypad. But it doesn't matter anyway, since making these # available to programs is inadvisable. # For the key definitions below, all sequences beginning with \E$ are # custom and programmed into the terminal via is2. \E$ also has no # meaning to any other terminal. # #------- cmdch=\E[;%p1%d!t # Available, but making it available to programs is inadvisable. #------- smxon=\E[1*q # Available, but making it available to programs is inadvisable. # Terminal will send XON/XOFF on buffer overflow. #------- rmxon=\E[*q # Available, but making it available to programs is inadvisable. # Terminal will not notify on buffer overflow. #------- smm=\E[2+x #------- rmm=\E[+x # Available, but making them available to programs is inadvisable. # # Printing: # It's not made clear in the manuals, but based on other ansi/vt type # terminals, it's a good guess that this terminal is capable of both # "transparent print" (which doesn't copy data to the screen, and # therefore needs mc5i: specified to say so) and "auxilliary print" # (which does duplicate printed data on the screen, in which case mc4= # and mc5= should use the \E[?4i and \E[?5i strings instead). hds200|Human Designed Systems HDS200, am, bw, eslok, hs, km, mir, msgr, xenl, xon, cols#80, it#8, lines#24, lm#0, acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G, blink=\E[0;5m, bold=\E[0;1m, cbt=\E[Z, civis=\E[6+{, clear=\E[H\E[J, cnorm=\E[+{, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, dsl=\E[2!w\r\n\E[!w, ed=\E[J, el=\E[K, el1=\E[1K, fsl=\E[!w, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, invis=\E[0;8m, is2=\E)0\017\E[m\E[=107;207h\E[90;3u\E[92;3u\E[43;1u\177\E$P\177\E[44;1u\177\E$Q\177\E[45;1u\177\E$R\177\E[46;1u\177\E$S\177\E[200;1u\177\E$A\177\E[201;1u\177\E$B\177\E[202;1u\177\E$C\177\E[203;1u\177\E$D\177\E[204;1u\177\E$H\177\E[212;1u\177\E$I\177\E[213;1u\177\E$\010\177\E[214;1u"\E$\177"\E[2!w\E[25;25w\E[!w\E[2*w\E[2+x\E[;3+}, kDC=\E$\177, kHOM=\E$H, kLFT=\E$D, kRIT=\E$C, kbs=^H, kcbt=\E$I, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kent=^M, kf1=^\001\r, kf10=^\010\r, kf11=^\011\r, kf12=^\012\r, kf13=\EOP, kf14=\EOQ, kf15=\EOR, kf16=\EOS, kf17=^\017\r, kf18=^\018\r, kf19=^\019\r, kf2=^\002\r, kf20=^\020\r, kf21=^\021\r, kf22=^\022\r, kf23=^\023\r, kf3=^\003\r, kf31=^\031\r, kf32=^\032\r, kf33=^\033\r, kf34=^\034\r, kf35=^\035\r, kf36=^\036\r, kf37=^\037\r, kf38=^\038\r, kf39=^\039\r, kf4=^\004\r, kf40=^\040\r, kf41=^\041\r, kf42=^\042\r, kf43=\E$P, kf44=\E$Q, kf45=\E$R, kf46=\E$S, kf47=^\047\r, kf48=^\048\r, kf49=^\049\r, kf5=^\005\r, kf50=^\050\r, kf51=^\051\r, kf52=^\052\r, kf53=^\053\r, kf6=^\006\r, kf7=^\007\r, kf8=^\008\r, kf9=^\009\r, khome=\E[H, kind=\E[T, knp=\E[U, kpp=\E[V, kri=\E[S, ll=\E[H\E[A, nel=\E[E, rc=\E8, rev=\E[0;7m, ri=\EM, rmacs=^O, rmir=\E[4l, rmso=\E[m\017, rmul=\E[m\017, sc=\E7, sgr=\E[0%?%p1%p6%O%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%O%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, smir=\E[4h, smso=\E[0;1;7m, smul=\E[0;4m, tbc=\E[3g, tsl=\E[2!w\E[%i%p1%dG, vpa=\E[%i%p1%dd, use=ansi+pp, # through included to specify padding needed in raw mode. # (avt-ns: added empty to suppress a tic warning --esr) avt-ns|concept avt no status line, OTbs, am, eo, mir, ul, xenl, xon, cols#80, it#8, lines#24, lm#192, acsc=, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J$<38>, cnorm=\E[=119l, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[=119h, dch1=\E[P, dim=\E[1!{, dl=\E[%p1%dM$<4*>, dl1=\E[M$<4>, ed=\E[J$<96>, el=\E[K$<6>, home=\E[H, hpa=\E[%p1%{1}%+%dG, ht=\011$<4>, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL$<4*>, il1=\E[L$<4>, ind=\n$<8>, invis=\E[8m, ip=$<4>, is1=\E[=103l\E[=205l, is2=\E[1*q\E[2!t\E[7!t\E[=4;101;119;122l\E[=107;118;207h\E)1\E[1Q\EW\E[!y\E[!z\E>\E[0\:0\:32!r\E[0*w\E[w\E2\r\n\E[2;27!t, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E^B\r, ked=\E^D\r, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, kich1=\E^A\r, kil1=\E^C\r, ll=\E[24H, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, pfloc=\E[%p1%d;0u#%p2%s#, pfx=\E[%p1%d;1u#%p2%s#, prot=\E[99m, rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM$<4>, rmacs=\016$<1>, rmcup=\E[w\E2\r\n, rmir=\E[4l, rmkx=\E[!z\E[0;2u, rmso=\E[7!{, rmul=\E[4!{, sc=\E7, sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;%;%?%p7%t8;%;%?%p8%t99;%;m%?%p5%t\E[1!{%;%?%p9%t\017%e\016%;$<1>, sgr0=\E[m\016$<1>, smacs=\017$<1>, smcup=\E[=4l\E[1;24w\E2\r, smir=\E[4h, smkx=\E[1!z\E[0;3u, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%p1%{1}%+%dd, avt-rv-ns|concept avt in reverse video mode/no status line, flash=\E[=205l$<200>\E[=205h, is1=\E[=103l\E[=205h, use=avt-ns, avt-w-ns|concept avt in 132 column mode/no status line, is1=\E[=103h\E[=205l, smcup=\E[H\E[1;24;1;132w, use=avt-ns, avt-w-rv-ns|concept avt in 132 column mode/no status line/reverse video, flash=\E[=205l$<200>\E[=205h, is1=\E[=103h\E[=205h, smcup=\E[H\E[1;24;1;132w, use=avt-ns, # Concept AVT with status line. We get the status line using the # "Background status line" feature of the terminal. We swipe the # first line of memory in window 2 for the status line, keeping # 191 lines of memory and 24 screen lines for regular use. # The first line is used instead of the last so that this works # on both 4 and 8 page AVTs. (Note the lm#191 or 192 - this # assumes an 8 page AVT but lm isn't currently used anywhere.) # avt+s|concept avt status line changes, eslok, hs, lm#191, dsl=\E[0*w, fsl=\E[1;1!w, is3=\E[2w\E[2!w\E[1;1;1;80w\E[H\E[2*w\E[1!w\E2\r\n, rmcup=\E[2w\E2\r\n, smcup=\E[2;25w\E2\r, tsl=\E[2;1!w\E[;%p1%dH\E[2K, avt|avt-s|concept-avt|avt w/80 columns, use=avt+s, use=avt-ns, avt-rv|avt-rv-s|avt reverse video w/sl, flash=\E[=205l$<200>\E[=205h, is1=\E[=103l\E[=205h, use=avt+s, use=avt-ns, avt-w|avt-w-s|concept avt 132 cols+status, is1=\E[=103h\E[=205l, smcup=\E[H\E[1;24;1;132w, use=avt+s, use=avt-ns, avt-w-rv|avt-w-rv-s|avt wide+status+rv, flash=\E[=205l$<200>\E[=205h, is1=\E[=103h\E[=205h, smcup=\E[H\E[1;24;1;132w, use=avt+s, use=avt-ns, #### Contel Business Systems. # # Contel c300 and c320 terminals. contel300|contel320|c300|Contel Business Systems C-300 or C-320, am, in, xon, cols#80, lines#24, xmc#1, bel=^G, clear=\EK, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EX%p1%{32}%+%c\EY%p2%{32}%+%c, cuu1=\EA, dch1=\EO$<5.5*>, dl1=\EM$<5.5*>, ed=\EJ$<5.5*>, el=\EI$<5.5>, flash=\020\002$<200/>\020\003, home=\EH, hts=\E1, ich1=\EN, il1=\EL$<5.5*>, ind=^J, ip=$<5.5*>, kbs=^H, kf0=\ERJ, kf1=\ERA, kf2=\ERB, kf3=\ERC, kf4=\ERD, kf5=\ERE, kf6=\ERF, kf7=\ERG, kf8=\ERH, kf9=\ERI, ll=\EH\EA, rmso=\E!\0, sgr0=\E!\0, smso=\E!\r, tbc=\E3, # Contel c301 and c321 terminals. contel301|contel321|c301|c321|Contel Business Systems C-301 or C-321, flash@, ich1@, ip@, rmso=\E!\0$<20>, smso=\E!\r$<20>, use=contel300, #### Data General (dg) # # According to James Carlson writing in January 1995, # the terminals group at Data General was shut down in 1991; all these # terminals have thus been discontinued. # # DG terminals have function keys that respond to the SHIFT and CTRL keys, # e.g., SHIFT-F1 generates a different code from F1. To number the keys # sequentially, first the unmodified key codes are listed as F1 through F15. # Then their SHIFT versions are listed as F16 through F30, their CTRL versions # are listed as F31 through F45, and their CTRL-SHIFT versions are listed as # F46 through F60. This is done in the private "includes" below whose names # start with "dgkeys+". # # DG terminals generally support 8 bit characters. For each of these terminals # two descriptions are supplied: # 1) A default description for 8 bits/character communications, which # uses the default DG international character set and keyboard codes. # 2) A description with suffix "-7b" for 7 bits/character communications. # This description must use the NON-DEFAULT native keyboard language. # Unmodified fkeys (kf1-kf11), Shift fkeys (kf12-kf22), Ctrl fkeys (kf23-kf33), # Ctrl/Shift fdkeys (kf34-kf44). dgkeys+8b|Private entry describing DG terminal 8-bit ANSI mode special keys, ka1=\233020z, ka3=\233021z, kc1=\233022z, kc3=\233023z, kclr=\2332J, kcub1=\233D, kcud1=\233B, kcuf1=\233C, kcuu1=\233A, kel=\233K, kf1=\233001z, kf10=\233010z, kf11=\233011z, kf12=\233012z, kf13=\233013z, kf14=\233014z, kf15=\233000z, kf16=\233101z, kf17=\233102z, kf18=\233103z, kf19=\233104z, kf2=\233002z, kf20=\233105z, kf21=\233106z, kf22=\233107z, kf23=\233108z, kf24=\233109z, kf25=\233110z, kf26=\233111z, kf27=\233112z, kf28=\233113z, kf29=\233114z, kf3=\233003z, kf30=\233100z, kf31=\233201z, kf32=\233202z, kf33=\233203z, kf34=\233204z, kf35=\233205z, kf36=\233206z, kf37=\233207z, kf38=\233208z, kf39=\233209z, kf4=\233004z, kf40=\233210z, kf41=\233211z, kf42=\233212z, kf43=\233213z, kf44=\233214z, kf45=\233200z, kf46=\233301z, kf47=\233302z, kf48=\233303z, kf49=\233304z, kf5=\233005z, kf50=\233305z, kf51=\233306z, kf52=\233307z, kf53=\233308z, kf54=\233309z, kf55=\233310z, kf56=\233311z, kf57=\233312z, kf58=\233313z, kf59=\233314z, kf6=\233006z, kf60=\233300z, kf7=\233007z, kf8=\233008z, kf9=\233009z, khome=\233H, kprt=\233i, dgkeys+7b|Private entry describing DG terminal 7-bit ANSI mode special keys, ka1=\E[020z, ka3=\E[021z, kc1=\E[022z, kc3=\E[023z, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kel=\E[K, kf1=\E[001z, kf10=\E[010z, kf11=\E[011z, kf12=\E[012z, kf13=\E[013z, kf14=\E[014z, kf15=\E[000z, kf16=\E[101z, kf17=\E[102z, kf18=\E[103z, kf19=\E[104z, kf2=\E[002z, kf20=\E[105z, kf21=\E[106z, kf22=\E[107z, kf23=\E[108z, kf24=\E[109z, kf25=\E[110z, kf26=\E[111z, kf27=\E[112z, kf28=\E[113z, kf29=\E[114z, kf3=\E[003z, kf30=\E[100z, kf31=\E[201z, kf32=\E[202z, kf33=\E[203z, kf34=\E[204z, kf35=\E[205z, kf36=\E[206z, kf37=\E[207z, kf38=\E[208z, kf39=\E[209z, kf4=\E[004z, kf40=\E[210z, kf41=\E[211z, kf42=\E[212z, kf43=\E[213z, kf44=\E[214z, kf45=\E[200z, kf46=\E[301z, kf47=\E[302z, kf48=\E[303z, kf49=\E[304z, kf5=\E[005z, kf50=\E[305z, kf51=\E[306z, kf52=\E[307z, kf53=\E[308z, kf54=\E[309z, kf55=\E[310z, kf56=\E[311z, kf57=\E[312z, kf58=\E[313z, kf59=\E[314z, kf6=\E[006z, kf60=\E[300z, kf7=\E[007z, kf8=\E[008z, kf9=\E[009z, khome=\E[H, kprt=\E[i, dgkeys+11|Private entry describing 11 minimal-subset DG mode special keys, kclr=^L, kcub1=^Y, kcud1=^Z, kcuf1=^X, kcuu1=^W, kel=^K, kf1=^^q, kf10=^^z, kf11=^^{, kf12=^^a, kf13=^^b, kf14=^^c, kf15=^^d, kf16=^^e, kf17=^^f, kf18=^^g, kf19=^^h, kf2=^^r, kf20=^^i, kf21=^^j, kf22=^^k, kf23=^^1, kf24=^^2, kf25=^^3, kf26=^^4, kf27=^^5, kf28=^^6, kf29=^^7, kf3=^^s, kf30=^^8, kf31=^^9, kf32=^^\:, kf33=^^;, kf34=^^!, kf35=^^", kf36=^^#, kf37=^^$, kf38=^^%%, kf39=^^&, kf4=^^t, kf40=^^', kf41=^^(, kf42=^^), kf43=^^*, kf44=^^+, kf5=^^u, kf6=^^v, kf7=^^w, kf8=^^x, kf9=^^y, khome=^H, dgkeys+15|Private entry describing 15 DG mode special keys, kHOM=^^^H, kLFT=^^^Y, kRIT=^^^X, ka1=^^\\, ka3=^^], kc1=^^\^, kc3=^^_, kf1=^^q, kf10=^^z, kf11=^^{, kf12=^^|, kf13=^^}, kf14=^^~, kf15=^^p, kf16=^^a, kf17=^^b, kf18=^^c, kf19=^^d, kf2=^^r, kf20=^^e, kf21=^^f, kf22=^^g, kf23=^^h, kf24=^^i, kf25=^^j, kf26=^^k, kf27=^^l, kf28=^^m, kf29=^^n, kf3=^^s, kf30=^^`, kf31=^^1, kf32=^^2, kf33=^^3, kf34=^^4, kf35=^^5, kf36=^^6, kf37=^^7, kf38=^^8, kf39=^^9, kf4=^^t, kf40=^^\:, kf41=^^;, kf42=^^<, kf43=^^=, kf44=^^>, kf45=^^0, kf46=^^!, kf47=^^", kf48=^^#, kf49=^^$, kf5=^^u, kf50=^^%%, kf51=^^&, kf52=^^', kf53=^^(, kf54=^^), kf55=^^*, kf56=^^+, kf57=^^\,, kf58=^^-, kf59=^^., kf6=^^v, kf60=^^\s, kf7=^^w, kf8=^^x, kf9=^^y, # Data General color terminals use the "Tektronix" color model. The total # number of colors varies with the terminal model, as does support for # attributes used in conjunction with color. # Removed u7, u8 definitions since they conflict with tack: # Preserve user-defined colors in at least some cases. # u7=^^Fh, # Default is ACM mode. # u8=^^F}20^^Fi^^F}21, # dgunix+fixed|Fixed color info for DG D430C terminals in DG-UNIX mode, bce, colors#16, ncv#53, pairs#256, op=\036Ad\036Bd, setab=\036B%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%{48}%+%c, setaf=\036A%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%{48}%+%c, setb=\036B%p1%{48}%+%c, setf=\036A%p1%{48}%+%c, dg+fixed|Fixed color info for DG D430C terminals in DG mode, use=dgunix+fixed, # Video attributes are coordinated using static variables set by "sgr", then # checked by "op", "seta[bf]", and "set[bf]" to refresh the attribute settings. # (D=dim, U=underline, B=blink, R=reverse.) dg+color8|Color info for Data General D220 and D230C terminals in ANSI mode, bce, colors#8, ncv#16, pairs#64, op=\E[%?%gD%t2;%;%?%gU%t4;%;%?%gB%t5;%;%?%gR%t7;%;m, setab=\E[4%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m, setaf=\E[3%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m, setb=\E[4%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m, setf=\E[3%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m, dg+color|Color info for Data General D470C terminals in ANSI mode, colors#16, ncv#53, pairs#256, setab=\E[%?%p1%{8}%<%t4%p1%e=%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m, setaf=\E[%?%p1%{8}%<%t3%p1%e<%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m, setb=\E[%?%p1%{8}%<%t4%e=%;%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m, setf=\E[%?%p1%{8}%<%t3%e<%;%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m, use=dg+color8, dgmode+color8|Color info for Data General D220/D230C terminals in DG mode, bce, colors#8, ncv#16, pairs#64, op=\036Ad\036Bd, setab=\036B%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%{48}%+%c, setaf=\036A%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%{48}%+%c, setb=\036B%p1%{48}%+%c, setf=\036A%p1%{48}%+%c, dgmode+color|Color info for Data General D470C terminals in DG mode, colors#16, pairs#256, setab=\036B%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%{48}%+%c, setaf=\036A%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%{48}%+%c, use=dgmode+color8, dgunix+ccc|Configurable color info for DG D430C terminals in DG-UNIX mode, bce, ccc, colors#52, ncv#53, pairs#26, initp=\036RG0%p1%02X%p2%{255}%*%{1000}%/%02X%p3%{255}%*%{1000}%/%02X%p4%{255}%*%{1000}%/%02X%p5%{255}%*%{1000}%/%02X%p6%{255}%*%{1000}%/%02X%p7%{255}%*%{1000}%/%02X, oc=\036RG01A00FF00000000\036RG01B00000000FF00\036RG01C007F00000000\036RG01D000000007F00, op=\036RF4831A\036RF2E31B\036RF1D31C\036RF3F31D, scp=\036RG2%p1%02X, # Colors are in the order: normal, reverse, dim, dim + reverse. dg+ccc|Configurable color info for DG D430C terminals in DG mode, bce, ccc, colors#52, ncv#53, pairs#26, initp=\036RG0%p1%{16}%/%{48}%+%c%p1%{16}%m%{48}%+%c%p2%{255}%*%{1000}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c%p3%{255}%*%{1000}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c%p4%{255}%*%{1000}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c%p5%{255}%*%{1000}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c%p6%{255}%*%{1000}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c%p7%{255}%*%{1000}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c, oc=\036RG01\:00??00000000\036RG01;00000000??00\036RG01<007?00000000\036RG01=000000007?00, op=\036RF4831\:\036RF2>31;\036RF1=31<\036RF3?31=, scp=\036RG2%p1%{16}%/%{48}%+%c%p1%{16}%m%{48}%+%c, # The generic DG terminal type (an 8-bit-clean subset of the 6053) # Initialization string 1 sets: # ^R - vertical scrolling enabled # ^C - blinking enabled dg-generic|Generic Data General terminal in DG mode, am, bw, msgr, xon, cols#80, lines#24, bel=^G, blink=^N, clear=^L, cr=^M, cub1=^Y, cud1=^Z, cuf1=^X, cup=\020%p2%c%p1%c, cuu1=^W, dim=^\, el=^K, ind=^J, is1=^R^C, mc0=^Q, nel=^J, rmso=^], rmul=^U, sgr0=^O^U^], smso=^\, smul=^T, use=dgkeys+11, # According to the 4.4BSD termcap file, the dg200 should be the # termcap equivalent of \020%p2%{128}%+%c%p1%{128}%+%c (in termcap # notation that's "^P%r%+\200%+\200"). Those \200s are suspicious, # maybe they were originally nuls (which would fit). dg200|data general dasher 200, OTbs, am, bw, cols#80, lines#24, bel=^G, clear=^L, cr=^M, cub1=^Y, cud1=^Z, cuf1=^X, cup=\020%p2%c%p1%c, cuu1=^W, el=^K, home=^H, ind=^J, kcub1=^Y, kcud1=^Z, kcuf1=^X, kcuu1=^W, kf0=^^z, kf1=^^q, kf2=^^r, kf3=^^s, kf4=^^t, kf5=^^u, kf6=^^v, kf7=^^w, kf8=^^x, kf9=^^y, khome=^H, lf0=f10, nel=^J, rmso=^^E, rmul=^U, smso=^^D, smul=^T, # Data General 210/211 (and 410?) from Lee Pearson (umich!lp) via BRL dg210|dg-ansi|Data General 210/211, am, cols#80, lines#24, OTnl=\E[B, clear=\E[2J, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K, home=\E[H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, nel=\r\E[H\E[A\n, rmso=\E[0;m, rmul=\E[0;m, smso=\E[7;m, smul=\E[4;m, # From: Peter N. Wan # courtesy of Carlos Rucalde of Vantage Software, Inc. # (dg211: this had ., which was an ancient termcap hangover. # I suspect the d200 function keys actually work on the dg211, check it out.) dg211|Data General d211, cnorm=^L, cvvis=^L^R, ht=^I, ind@, kbs=^Y, kf0@, kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, kf9@, lf0@, nel=^M^Z, rmcup=^L, rmso=\036E$<0/>, smcup=^L^R, smso=\036D$<5/>, use=dg200, # dg450 from Cornell (not official) dg450|dg6134|data general 6134, cub1@, cuf1=^X, use=dg200, # Not official... # Note: lesser Dasher terminals will not work with vi because vi insists upon # having a command to move straight down from any position on the bottom line # and scroll the screen up, or a direct vertical scroll command. The 460 and # above have both, the D210/211, for instance, has neither. We must use ANSI # mode rather than DG mode because standard UNIX tty drivers assume that ^H is # backspace on all terminals. This is not so in DG mode. # (dg460-ansi: removed obsolete ":kn#6:"; also removed ":mu=\EW:", on the # grounds that there is no matching ":ml:" dg460-ansi|Data General Dasher 460 in ANSI-mode, OTbs, am, msgr, ul, cols#80, it#8, lines#24, OTnl=\ED, blink=\E[5m, clear=\E[2J, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, dch1=\E[P, dim=\E[2m, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L, ind=\E[S, is2=^^F@, kbs=\E[D, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\E[001z, kf1=\E[002z, kf2=\E[003z, kf3=\E[004z, kf4=\E[005z, kf5=\E[006z, kf6=\E[007z, kf7=\E[008z, kf8=\E[009z, kf9=\E[00\:z, khome=\E[H, lf0=f1, lf1=f2, lf2=f3, lf3=f4, lf4=f5, lf5=f6, lf6=f7, lf7=f8, lf9=f10, mc0=\E[i, rev=\E[7m, ri=\E[T, rmso=\E[m, rmul=\E[05, sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m, sgr0=\E(B\E[m, smso=\E[7m, smul=\E[4m, u6=\E[%d;%dR, u7=\E[6n, u8=\E[5n, u9=\E[0n, # From: Wayne Throop (not official) # Data General 605x # Ought to work for a Model 6242, Type D210 as well as a 605x. # Note that the cursor-down key transmits ^Z. Job control users, beware! # This also matches a posted description of something called a `Dasher 100' # so there's a dg100 alias here. # (dg6053: the 4.4BSD file had , , . -- esr) dg6053-old|dg100|data general 6053, OTbs, am, bw, ul, cols#80, lines#24, OTbc=^Y, bel=^G, clear=^L, cnorm=^L, cr=^M, cub1=^Y, cud1=^Z, cuf1=^X, cup=\020%p2%c%p1%c, cuu1=^W, cvvis=^L^R, el=^K, home=^H, ht=^I, is2=^R, kbs=^Y, kcub1=^Y, kcud1=^Z, kcuf1=^X, kcuu1=^W, kf0=^^q, kf1=^^r, kf2=^^s, kf3=^^t, kf4=^^u, kf5=^^v, kf6=^^w, kf7=^^x, kf8=^^y, kf9=^^z, khome=^H, rmcup=^L, rmso=\0^^E, rmul=^U, smcup=^L^R, smso=\0\0\0\0\0\036D, smul=^T, # (Some performance can be gained over the generic DG terminal type) dg6053|6053|6053-dg|dg605x|605x|605x-dg|d2|d2-dg|Data General DASHER 6053, xon@, home=^P\0\0, ll=^P\0^W, use=dg-generic, # Like 6053, but adds reverse video and more keypad and function keys. d200|d200-dg|Data General DASHER D200, bold=^^D^T, home@, ll@, rev=^^D, rmso=^^E^], sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;%?%p4%t\016%e\017%;%?%p1%p5%|%t\034%e\035%;, sgr0=\017\025\035\036E, smso=^^D^\, use=dgkeys+15, use=dg6053, # DASHER D210 series terminals in ANSI mode. # Reverse video, no insert/delete character/line, 7 bits/character only. # # Initialization string 1 sets: # <0 - scrolling enabled # <1 - blink enabled # <4 - print characters regardless of attributes d210|d214|Data General DASHER D210 series, am, bw, msgr, xon, cols#80, lines#24, bel=^G, blink=\E[5m, bold=\E[4;7m, clear=\E[2J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dim=\E[2m, ed=\E[J, el=\E[K, el1=\E[1K, home=\E[H, ind=^J, is1=\E[<0;<1;<4l, ll=\E[H\E[A, nel=^J, rev=\E[7m, rmso=\E[m, rmul=\E[m, sgr=\E[%?%p4%t5;%;%?%p2%p6%|%t4;%;%?%p1%p5%|%t2;%;%?%p1%p3%|%p6%|%t7;%;m, sgr0=\E[m, smso=\E[2;7m, smul=\E[4m, use=dgkeys+7b, # DASHER D210 series terminals in DG mode. # Like D200, but adds clear to end-of-screen and needs XON/XOFF. d210-dg|d214-dg|Data General DASHER D210 series in DG mode, xon, ed=^^FF, use=d200-dg, # DASHER D211 series terminals in ANSI mode. # Like the D210, but with 8-bit characters and local printer support. # # Initialization string 2 sets: # \E[2;1;1;1v # 2;1 - 8 bit operations # 1;1 - 8 bit (international) keyboard language # \E(B - default primary character set (U.S. ASCII) # \E)4 - default secondary character set (international) # ^O - primary character set # d211|d215|Data General DASHER D211 series, km, is2=\E[2;1;1;1v\E(B\E)4\017, mc0=\E[i, use=dgkeys+8b, use=d210, # Initialization string 2 sets: # \E[2;0;1;0v # 2;0 - 7 bit operations # 1;0 - 7 bit (native) keyboard language # \E(0 - default character set (the keyboard native language) # ^O - primary character set d211-7b|d215-7b|Data General DASHER D211 series in 7 bit mode, km@, is2=\E[2;0;1;0v\E(0\017, use=dgkeys+7b, use=d211, # Like the D210 series, but adds support for 8-bit characters. # # Reset string 2 sets: # ^^N - secondary character set # ^^FS0> - 8 bit international character set # ^^O - primary character set # ^^FS00 - default character set (matching the native keyboard language) # d211-dg|d215-dg|Data General DASHER D211 series in DG mode, km, rs2=\036N\036FS0>\036O\036FS00, use=d210-dg, d216-dg|d216e-dg|d216+dg|d216e+dg|d217-dg|Data General DASHER D216 series in DG mode, use=d211-dg, # Enhanced DG mode with changes to be more UNIX compatible. d216-unix|d216e-unix|d216+|d216e+|Data General DASHER D216+ in DG-UNIX mode, mc5i, it#8, acsc=a\177j$k"l!m#n)q+t'u&v(w%x*, blink=^^PI, clear=^^PH, cub1=^^PD, cud1=^^PB, cuf1=^^PC, cuu1=^^PA, el=^^PE, home=^^PF, hpa=\020%p1%c\177, ht=^I, ind=^J, is1=\022\003\036P@1, is3=\036Fz0, kHOM=^^Pf, kLFT=^^Pd, kPRT=^^P1, kRIT=^^Pc, kclr=^^PH, kcub1=^^PD, kcud1=^^PB, kcuf1=^^PC, kcuu1=^^PA, kel=^^PE, khome=^^PF, kprt=^^P0, mc0=\036F?9, mc4=^^Fa, mc5=^^F`, rmacs=\036FS00, rs2=\036N\036FS0E\036O\036FS00, sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;\036P%?%p4%tI%eJ%;%?%p1%p5%|%t\034%e\035%;\036FS%?%p9%t11%e00%;, sgr0=\036PJ\025\035\036E\036FS00, smacs=\036FS11, vpa=\020\177%p1%c, use=dgkeys+15, use=d216-dg, d216-unix-25|d216+25|Data General DASHER D216+ in DG-UNIX mode with 25 lines, lines#25, is3=\036Fz2, use=d216+, d217-unix|Data General DASHER D217 in DG-UNIX mode, use=d216-unix, d217-unix-25|Data General DASHER D217 in DG-UNIX mode with 25 lines, use=d216-unix-25, # DASHER D220 color terminal in ANSI mode. # Like the D470C but with fewer colors and screen editing features. # # Initialization string 1 sets: # \E[<0;<1;<4l # <0 - scrolling enabled # <1 - blink enabled # <4 - print characters regardless of attributes # \E[m - all attributes off # Reset string 1 sets: # \Ec - initial mode defaults (RIS) # d220|Data General DASHER D220, mc5i@, dl@, dl1@, il@, il1@, is1=\E[<0;<1;<4l\E[m, mc4@, mc5@, rs1=\Ec, use=dg+color8, use=d470c, d220-7b|Data General DASHER D220 in 7 bit mode, mc5i@, dl@, dl1@, il@, il1@, is1=\E[<0;<1;<4l\E[m, mc4@, mc5@, rs1=\Ec, use=dg+color8, use=d470c-7b, # Initialization string 3 sets: # - default cursor (solid rectangle) # Reset string 2 sets: # ^^N - secondary character set # ^^FS0> - 8 bit international character set # ^^O - primary character set # ^^FS00 - default character set (matching the native keyboard language) # d220-dg|Data General DASHER D220 color terminal in DG mode, mc5i@, dl1@, home@, il1@, is2@, is3=\036FQ2, ll@, mc4@, mc5@, rs1@, rs2=\036N\036FS0>\036O\036FS00, use=dgmode+color8, use=d470c-dg, # DASHER D230C color terminal in ANSI mode. # Like the D220 but with minor ANSI compatibility improvements. # d230c|d230|Data General DASHER D230C, blink=\E[5;50m, bold=\E[4;7;50m, dim=\E[2;50m, nel=^M^J, rev=\E[7;50m, rmkx=\E[2;1v, rmso=\E[50m, rmul=\E[50m, sgr=\E[50%?%p1%p3%|%p6%|%t;7%{1}%e%{0}%;%PR%?%p4%t;5%{1}%e%{0}%;%PB%?%p2%p6%|%t;4%{1}%e%{0}%;%PU%?%p1%p5%|%t;2%{1}%e%{0}%;%PDm\E)%?%p9%t6\016%e4\017%;, sgr0=\E[50m\E)4\017, smkx=\E[2;0v, smso=\E[2;7;50m, smul=\E[4;50m, use=dgkeys+7b, use=d220, d230c-dg|d230-dg|Data General DASHER D230C in DG mode, use=d220-dg, # DASHER D400/D450 series terminals. # These add intelligent features like insert/delete to the D200 series. # # Initialization string 2 sets: # ^^FQ2 - default cursor (solid rectangle) # ^^FW - character protection disabled # ^^FJ - normal (80 column) mode # ^^F\^ - horizontal scrolling enabled (for alignment) # ^^FX004? - margins at columns 0 and 79 # ^^F] - horizontal scrolling disabled # ^^O - primary character set # ^^FS00 - default character set (the keyboard native language) # - (should reset scrolling regions, but that glitches the screen) # Reset string 1 sets: # ^^FA - all terminal defaults except scroll rate # Reset string 2 sets: # ^^F] - horizontal scrolling disabled # ^^FT0 - jump scrolling # d400|d400-dg|d450|d450-dg|Data General DASHER D400/D450 series, mc5i, acsc=j$k"l!m#n)q+t'u&v(w%x*, civis=\036FQ0, cnorm=\036FQ2, dch1=^^K, dl1=^^FI, enacs=\036N\036FS11\036O, home=^^FG, hpa=\020%p1%c\177, ich1=^^J, il1=^^FH, is2=\036FQ2\036FW\036FJ\036F\^\036FX004?\036F]\036O\036FS00, ll=\036FG\027, mc4=^^Fa, mc5=^^F`, ri=^^I, rmacs=^^O, rs1=^^FA, rs2=\036F]\036FT0, sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;%?%p4%t\016%e\017%;%?%p1%p5%|%t\034%e\035%;\036%?%p9%tN%eO%;, sgr0=\017\025\035\036E\036O, smacs=^^N, vpa=\020\177%p1%c, use=d210-dg, # DASHER D410/D460 series terminals in ANSI mode. # These add a large number of intelligent terminal features. # # Initialization string 1 sets: # \E[<0;<1;<2;<4l # <0 - scrolling enabled # <1 - blink enabled # <2 - horizontal scrolling enabled (for alignment) # <4 - print characters regardless of attributes # \E[5;0v - normal (80 column) mode # \E[1;1;80w - margins at columns 1 and 80 # \E[1;6;<2h # 1 - print all characters even if protected # 6 - character protection disabled # <2 - horizontal scrolling disabled # - (should reset scrolling regions, but that glitches the screen) # # Initialization string 2 sets: # \E[3;2;2;1;1;1v # 3;2 - default cursor (solid rectangle) # 2;1 - 8 bit operations # 1;1 - international keyboard language # \E(B - default primary character set (U.S. ASCII) # \E)4 - default secondary character set (international) # ^O - primary character set # # Reset string 1 sets: # \Ec - initial mode defaults (RIS) # \E[<2h - horizontal scrolling disabled # # Reset string 2 sets: # \E[4;0;2;1;1;1v # 4;0 - jump scrolling # 2;1 - 8 bit operations # 1;1 - 8 bit (international) keyboard language # \E(B - default primary character set (U.S. ASCII) # \E)4 - default secondary character set (international) # d410|d411|d460|d461|Data General DASHER D410/D460 series, mc5i, acsc=j$k"l!m#n)q+t'u&v(w%x*, civis=\E[3;0v, cnorm=\E[3;2v, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, is1=\E[<0;<1;<2;<4l\E[5;0v\E[1;1;80w\E[1;6;<2h, is2=\E[3;2;2;1;1;1v\E(B\E)4\017, mc4=\E[4i, mc5=\E[5i, ri=\EM, rmacs=\E)4\017, rs1=\Ec\E[<2h, rs2=\E[4;0;2;1;1;1v\E(B\E)4, sgr=\E[%?%p1%t2;7%;%?%p3%t7;%;%?%p4%t5;%;%?%p2%t4;%;%?%p1%p5%|%t2;%;%?%p6%t4;7;%;m\E)%?%p9%t6\016%e4\017%;, sgr0=\E[m\E)4\017, smacs=\E)6\016, use=d211, # Initialization string 2 sets: # \E[3;2;2;0;1;0v # 3;2 - default cursor (solid rectangle) # 2;0 - 7 bit operations # 1;0 - 7 bit (native) keyboard language # \E(0 - default character set (the keyboard native language) # ^O - primary character set # # Reset string 2 sets: # \E[4;0;2;0;1;0v # 4;0 - jump scrolling # 2;0 - 7 bit operations # 1;0 - 7 bit (native) keyboard language # \E(0 - default character set (the keyboard native language) # d410-7b|d411-7b|d460-7b|d461-7b|Data General DASHER D410/D460 series in 7 bit mode, km@, enacs=\E)6, is2=\E[3;2;2;0;1;0v\E(0\017, rmacs=^O, rs2=\E[4;0;2;0;1;0v\E(0, sgr=\E[%?%p1%p3%|%p6%|%t7;%;%?%p4%t5;%;%?%p2%p6%|%t4;%;%?%p1%p5%|%t2;%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, use=dgkeys+7b, use=d410, d410-dg|d460-dg|d411-dg|d461-dg|Data General DASHER D410/D460 series in DG mode, km, enacs@, rmacs=\036FS00, sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;%?%p4%t\016%e\017%;%?%p1%p5%|%t\034%e\035%;\036FS%?%p9%t11%e00%;, sgr0=\017\025\035\036E\036FS00, smacs=\036FS11, use=d400-dg, # DASHER D410/D460 series terminals in wide (126 columns) ANSI mode. # # Initialization string 1 sets: # \E[<0;<1;<2;<4l # <0 - scrolling enabled # <1 - blink enabled # <2 - horizontal scrolling enabled (for alignment) # <4 - print characters regardless of attributes # \E[5;1v - compressed (135 column) mode # \E[1;1;126 - margins at columns 1 and 126 # \E[1;6;<2h # 1 - print all characters even if protected # 6 - character protection disabled # <2 - horizontal scrolling disabled # - (should reset scrolling regions, but that glitches the screen) # # Reset string 1 sets: # \Ec - initial mode defaults (RIS) # \E[5;1v - compressed (135 column) mode # \E[1;1;126w - margins at columns 1 and 126 # \E[<2h - horizontal scrolling disabled # d410-w|d411-w|d460-w|d461-w|Data General DASHER D410/D460 series in wide mode, cols#126, is1=\E[<0;<1;<2;<4l\E[5;1v\E[1;1;126w\E[1;6;<2h, rs1=\Ec\E[5;1v\E[1;1;126w\E[<2h, use=d410, d410-7b-w|d411-7b-w|d460-7b-w|d461-7b-w|Data General DASHER D410/D460 series in wide 7 bit mode, cols#126, is1=\E[<0;<1;<2;<4l\E[5;1v\E[1;1;126w\E[1;6;<2h, rs1=\Ec\E[5;1v\E[1;1;126w\E[<2h, use=d410-7b, d412-dg|d462-dg|d462e-dg|d412+dg|d462+dg|d413-dg|d463-dg|Data General DASHER D412/D462 series in DG mode, use=d410-dg, # These add intelligent features like scrolling regions. d412-unix|d462-unix|d412+|d462+|Data General DASHER D412+/D462+ series in Unix mode, civis=\036FQ0, clear=^^FE, cnorm=\036FQ5, cup=\036FP%p2%2.2X%p1%2.2X, dch1=^^K, dl1=^^FI, home=^^FG, hpa=\036FP%p1%2.2XFF, ich1=^^J, il1=^^FH, is2=\036FQ5\036FW\036FJ\036F\^\036FX004F\036O\036FS00, ll=\036FG\036PA, mc0=^A, rc=\036F}11, ri=^^I, rs1=\036FA\036FT0, rs2=\036P@1, sc=\036F}10, vpa=\036FPFF%p1%2.2X, wind=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{23}%p2%>%t000%;\036FX%p3%2.2X%p4%2.2X, use=d216+, d412-unix-w|d462-unix-w|d412+w|d462+w|Data General DASHER D412+/D462+ series in wide Unix mode, cols#132, is2=\036FQ5\036FW\036FK\036F\^\036FX0083\036O\036FS00, rs2=\036P@1\036FK\036FX0083, wind=\036FB%?%p1%t%p1%2.2X1%;%p2%p1%-%{1}%+%2.2X1%?%{23}%p2%>%t001%;\036FX%p3%2.2X%p4%2.2X, use=d412-unix, d412-unix-25|d462-unix-25|d412+25|d462+25|Data General DASHER D412+/D462+ series in Unix mode with 25 lines, lines#25, is3=\036Fz2, wind=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{24}%p2%>%t000%;\036FX%p3%2.2X%p4%2.2X, use=d462+, d412-unix-s|d462-unix-s|d412+s|d462+s|Data General DASHER D412+/D462+ in Unix mode with status line, eslok, hs, clear=\036FG\036PH, fsl=\036F}01\022, is3=\036Fz2\036F}00\036FB180000\036F}01, ll@, tsl=\036F}00\036FP%p1%2.2X18\036PG, wind=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{23}%p2%>%t%{23}%p2%-%2.2X0%;000\036FX%p3%2.2X%p4%2.2X, use=d462+, # Relative cursor motions are confined to the current window, # which is not what the scrolling region specification expects. # Thus, relative vertical cursor positioning must be deleted. d412-unix-sr|d462-unix-sr|d412+sr|d462+sr|Data General DASHER D412+/D462+ in Unix mode with scrolling region, csr=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{23}%p2%>%t000%;, cud1@, cuu1@, ll@, use=d462+, d413-unix|d463-unix|Data General DASHER D413/D463 series in DG-UNIX mode, use=d412-unix, d413-unix-w|d463-unix-w|Data General DASHER D413/D463 series in wide DG-UNIX mode, use=d412-unix-w, d413-unix-25|d463-unix-25|Data General DASHER D413/D463 series in DG-UNIX mode with 25 lines, use=d412-unix-25, d413-unix-s|d463-unix-s|Data General DASHER D413/D463 in DG-UNIX mode with status line, use=d412-unix-s, d413-unix-sr|d463-unix-sr|Data General DASHER D413/D463 in DG-UNIX mode with scrolling region, use=d412-unix-sr, d414-unix|d464-unix|Data General D414/D464 in DG-UNIX mode, use=d413-unix, d414-unix-w|d464-unix-w|Data General D414/D464 in wide DG-UNIX mode, use=d413-unix-w, d414-unix-25|d464-unix-25|Data General D414/D464 in DG-UNIX mode with 25 lines, use=d413-unix-25, d414-unix-s|d464-unix-s|Data General D414/D464 in DG-UNIX mode with status line, use=d413-unix-s, d414-unix-sr|d464-unix-sr|Data General D414/D464 in DG-UNIX mode with scrolling region, use=d413-unix-sr, d430c-dg|d430-dg|Data General D430C in DG mode, use=d413-dg, use=dg+fixed, d430c-dg-ccc|d430-dg-ccc|Data General D430C in DG mode with configurable colors, use=d413-dg, use=dg+ccc, d430c-unix|d430-unix|Data General D430C in DG-UNIX mode, use=d413-unix, use=dgunix+fixed, d430c-unix-w|d430-unix-w|Data General D430C in wide DG-UNIX mode, use=d413-unix-w, use=dgunix+fixed, d430c-unix-25|d430-unix-25|Data General D430C in DG-UNIX mode with 25 lines, use=d413-unix-25, use=dgunix+fixed, d430c-unix-s|d430-unix-s|Data General D430C in DG-UNIX mode with status line, use=d413-unix-s, use=dgunix+fixed, d430c-unix-sr|d430-unix-sr|Data General D430C in DG-UNIX mode with scrolling region, use=d413-unix-sr, use=dgunix+fixed, d430c-unix-ccc|d430-unix-ccc|Data General D430C in DG-UNIX mode with configurable colors, use=d413-unix, use=dgunix+ccc, d430c-unix-w-ccc|d430-unix-w-ccc|Data General D430C in wide DG-UNIX mode with configurable colors, use=d413-unix-w, use=dgunix+ccc, d430c-unix-25-ccc|d430-unix-25-ccc|Data General D430C in DG-UNIX mode with 25 lines and configurable colors, use=d413-unix-25, use=dgunix+ccc, d430c-unix-s-ccc|d430-unix-s-ccc|Data General D430C in DG-UNIX mode with status line and configurable colors, use=d413-unix-s, use=dgunix+ccc, d430c-unix-sr-ccc|d430-unix-sr-ccc|Data General D430C in DG-UNIX mode with scrolling region and configurable colors, use=d413-unix-sr, use=dgunix+ccc, # DASHER D470C color terminal in ANSI mode. # Like the D460 but with 16 colors and without a compressed mode. # # Initialization string 1 sets: # \E[<0;<1;<2;<4l # <0 - scrolling enabled # <1 - blink enabled # <2 - horizontal scrolling enabled (for alignment) # <4 - print characters regardless of attributes # \E[1;1;80w - margins at columns 1 and 80 # \E[1;6;<2h # 1 - print all characters even if protected # 6 - character protection disabled # <2 - horizontal scrolling disabled # - (should reset scrolling regions, but that glitches the screen) # d470c|d470|Data General DASHER D470C, is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h, sgr=\E[%?%p3%t7;%;%?%p4%t5;%;%?%p2%t4;%;%?%p6%t4;7;%;%?%p1%t2;7;%;%?%p5%t2;%;m\E)%?%p9%t6\016%e4\017%;, use=dg+color, use=d460, d470c-7b|d470-7b|Data General DASHER D470C in 7 bit mode, is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h, sgr=\E[%?%p3%t7;%;%?%p4%t5;%;%?%p2%t4;%;%?%p6%t4;7;%;%?%p1%t2;7;%;%?%p5%t2;%;m%?%p9%t\016%e\017%;, use=dg+color, use=d460-7b, # Initialization string 2 sets: # ^^FQ2 - default cursor (solid rectangle) # ^^FW - character protection disabled # ^^F\^ - horizontal scrolling enabled (for alignment) # ^^FX004? - margins at columns 0 and 79 # ^^F] - horizontal scrolling disabled # ^^O - primary character set # ^^FS00 - default character set (the keyboard native language) # - (should reset scrolling regions, but that glitches the screen) # d470c-dg|d470-dg|Data General DASHER D470C in DG mode, is2=\036FQ2\036FW\036F\^\036FX004?\036F]\036O\036FS00, use=dgmode+color, use=d460-dg, # DASHER D555 terminal in ANSI mode. # Like a D411, but has an integrated phone. d555|Data General DASHER D555, use=d411, d555-7b|Data General DASHER D555 in 7-bit mode, use=d411-7b, d555-w|Data General DASHER D555 in wide mode, use=d411-w, d555-7b-w|Data General DASHER D555 in wide 7-bit mode, use=d411-7b-w, d555-dg|Data General DASHER D555 series in DG mode, use=d411-dg, # DASHER D577 terminal in ANSI mode. # Like a D411, but acts as a keyboard for serial printers ("KSR" modes). d577|Data General DASHER D577, use=d411, d577-7b|Data General DASHER D577 in 7-bit mode, use=d411-7b, d577-w|Data General DASHER D577 in wide mode, use=d411-w, d577-7b-w|Data General DASHER D577 in wide 7-bit mode, use=d411-7b-w, d577-dg|d578-dg|Data General DASHER D577/D578 series in DG mode, use=d411-dg, # DASHER D578 terminal. # Like a D577, but without compressed mode; like a D470C in this respect. # # Initialization string 1 sets: # \E[<0;<1;<2;<4l # <0 - scrolling enabled # <1 - blink enabled # <2 - horizontal scrolling enabled (for alignment) # <4 - print characters regardless of attributes # \E[1;1;80w - margins at columns 1 and 80 # \E[1;6;<2h # 1 - print all characters even if protected # 6 - character protection disabled # <2 - horizontal scrolling disabled # - (should reset scrolling regions, but that glitches the screen) # d578|Data General DASHER D578, is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h, use=d577, d578-7b|Data General DASHER D578 in 7-bit mode, is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h, use=d577-7b, #### Datamedia (dm) # # Datamedia was headquartered in Nashua, New Hampshire until it went # out of business in 1993, but the ID plates on the terminals referred # to the factory in Pennsauken, NJ. The factory was sold to a PCB board # manufacturer which threw out all information about the terminals. # cs10|colorscan|Datamedia Color Scan 10, msgr, cols#80, lines#24, bel=^G, clear=\E[H\E[J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%02d;%p2%02dH, cuu1=\E[A, ed=\E[J, el=\E[K, ind=^J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, cs10-w|Datamedia Color Scan 10 with 132 columns, cols#132, cup=\E[%i%p1%02d;%p2%03dH, use=cs10, # (dm1520: removed obsolete ":ma=^\ ^_^P^YH:" -- esr) dm1520|dm1521|datamedia 1520, OTbs, am, xenl, cols#80, it#8, lines#24, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=^\, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^], home=^Y, ht=^I, ind=^J, kcub1=^H, kcud1=^J, kcuf1=^\, kcuu1=^_, khome=^Y, # dm2500: this terminal has both and . Applications using # termcap/terminfo directly (rather than through ncurses) might be confused. dm2500|datamedia2500|datamedia 2500, OTbs, OTnc, cols#80, lines#24, bel=^G, clear=^^^^\177, cub1=^H, cud1=^J, cuf1=^\, cup=\014%p2%{96}%^%c%p1%{96}%^%c, cuu1=^Z, dch1=\020\010\030\035$<10*>, dl1=\020\032\030\035$<10*>, el=^W, home=^B, ich1=\020\034\030\035$<10*>, il1=\020\n\030\035\030\035$<15>, ind=^J, pad=\377, rmdc=^X^], rmir=\377\377\030\035$<10>, rmso=^X^], smdc=^P, smir=^P, smso=^N, # dmchat is like DM2500, but DOES need "all that padding" (jcm 1/31/82) # also, has a meta-key. # From: # (dmchat: ":MT:" changed to ":km:" -- esr) dmchat|dmchat version of datamedia 2500, km, dl1=\020\032\030\035$<2/>, il1=\020\n\030\035\030\035$<1*/>, use=dm2500, # (dm3025: ":MT:" changed to ":km:" -- esr) dm3025|datamedia 3025a, OTbs, km, cols#80, it#8, lines#24, bel=^G, clear=\EM$<2>, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p2%{32}%+%c%p1%{32}%+%c, cuu1=\EA, dch1=\010$<6>, dl1=\EP\EA\EQ$<130>, ed=\EJ$<2>, el=\EK, home=\EH, ht=^I, il1=\EP\n\EQ$<130>, ind=^J, ip=$<6>, is2=\EQ\EU\EV, rmdc=\EQ, rmir=\EQ, rmso=\EO0, smdc=\EP, smir=\EP, smso=\EO1, dm3045|datamedia 3045a, OTbs, am, eo, km@, ul, xenl, dch1=\EB$<6>, dl1@, il1@, is2=\EU\EV, kcuf1=\EC, kcuu1=\EA, kf0=\Ey\r, kf1=\Ep\r, kf2=\Eq\r, kf3=\Er\r, kf4=\Es\r, kf5=\Et\r, kf6=\Eu\r, kf7=\Ev\r, kf8=\Ew\r, kf9=\Ex\r, khome=\EH, pad=\177, rmdc@, rmir=\EP, rmso@, smdc@, smso@, use=dm3025, # Datamedia DT80 soft switches: # 1 0=Jump 1=Smooth # Autorepeat 0=off 1=on # Screen 0=Dark 1=light # Cursor 0=u/l 1=block # # 2 Margin Bell 0=off 1=on # Keyclick 0=off 1=on # Ansi/VT52 0=VT52 1=Ansi # Xon/Xoff 0=Off 1=On # # 3 Shift3 0=Hash 1=UK Pound # Wrap 0=Off 1=On # Newline 0=Off 1=On # Interlace 0=Off 1=On # # 4 Parity 0=Odd 1=Even # Parity 0=Off 1=On # Bits/Char 0=7 1=8 # Power 0=60Hz 1=50Hz # # 5 Line Interface 0=EIA 1=Loop # Aux Interface 0=EIA 1=Loop # Local Copy 0=Off 1=On # Spare # # 6 Aux Parity 0=Odd 1=Even # Aux Parity 0=Off 1=On # Aux Bits/Char 0=7 1=8 # CRT Saver 0=Off 1=On # dm80/1 is a vt100 lookalike, but it doesn't seem to need any padding. dm80|dmdt80|dt80|datamedia dt80/1, clear=\E[2J\E[H, cud1=^J, cuf1=\E[C, cup=%i\E[%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K, home=\E[H, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, ri=\EM, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, use=vt100, # except in 132 column mode, where it needs a little padding. # This is still less padding than the vt100, and you can always turn on # the ^S/^Q handshaking, so you can use vt100 flavors for things like # reverse video. dm80w|dmdt80w|dt80w|datamedia dt80/1 in 132 char mode, cols#132, clear=\E[H\E[2J$<50/>, cud1=^J, cup=\E[%i%p1%d;%p2%dH$<5/>, cuu1=\E[A$<5/>, ed=\E[0J$<20/>, el=\E[0K$<20/>, use=dm80, # From: Adam Thompson Sept 10 1995 dt80-sas|Datamedia DT803/DTX for SAS usage, am, bw, cols#80, lines#24, acsc=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~, bel=^G, clear=^L, cr=^M, csr=\E=%p1%{32}%+%c%{32}%c\E#1\E=%p2%{32}%+%c%{32}%c\E#2, cub1=^H, cud1=\EB, cuf1=^\, cup=\E=%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, dl1=\EM, ed=^K, el=^], ff=^L, home=^Y, ht=^I, hts=\E'1, il1=\EL, ind=\EB, is2=\E)0\E<\EP\E'0\E$2, kclr=^L, kcub1=^H, kcud1=^J, kcuf1=^\, kcuu1=^_, ked=^K, kel=^], khome=^Y, mc4=^O, mc5=^N, rev=\E$2\004, ri=\EI, rmacs=\EG, rmso=^X, sgr0=^X, smacs=\EF, smso=\E$2\004, tbc=\E'0, # Datamedia Excel 62, 64 from Gould/SEL UTX/32 via BRL # These aren't end-all Excel termcaps; but do insert/delete char/line # and name some of the extra function keys. (Mike Feldman ccvaxa!feldman) # The naming convention has been bent somewhat, with the use of E? (where # E is for 'Excel') as # a name. This was done to distinguish the entries # from the other Datamedias in use here, and yet to associate a model of # the Excel terminals with the regular datamedia terminals that share # major characteristics. excel62|excel64|datamedia Excel 62, dch1=\E[P, kbs=^H, kcub1=^H, kcud1=^J, kf5=\EOu, kf6=\EOv, kf7=\EOw, kf8=\EOx, kf9=\EOy, rmir=\E[4l, smir=\E[4h, use=dt80, excel62-w|excel64-w|datamedia Excel 62 in 132 char mode, dch1=\E[P, kbs=^H, kcub1=^H, kcud1=^J, kf5=\EOu, kf6=\EOv, kf7=\EOw, kf8=\EOx, kf9=\EOy, rmir=\E[4l, smir=\E[4h, use=dt80w, excel62-rv|excel64-rv|datamedia Excel 62 in reverse video mode, dch1=\E[P, flash=\E[?5l\E[?5h, kbs=^H, kcub1=^H, kcud1=^J, kf5=\EOu, kf6=\EOv, kf7=\EOw, kf8=\EOx, kf9=\EOy, rmir=\E[4l, smir=\E[4h, use=dt80, #### Falco # # Falco Data Products # 440 Potrero Avenue # Sunnyvale, CA 940864-196 # Vox: (800)-325-2648 # Fax: (408)-745-7860 # Net: techsup@charm.sys.falco.com # # Current Falco models as of 1995 are generally ANSI-compatible and support # emulations of DEC VT-series, Wyse, and Televideo types. # # Test version for Falco ts-1. See for info # This terminal was released around 1983 and was discontinued long ago. # The standout and underline highlights are the same. falco|ts1|ts-1|falco ts-1, OTbs, am, cols#80, it#8, lines#24, bel=^G, clear=\E*, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET\EG0\010, home=^^, ht=^I, il1=\EE, ind=^J, is2=\Eu\E3, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf0=^A0\r, rmir=\Er, rmso=\Eg0, rmul=\Eg0, sgr0=\Eg0, smir=\Eq, smso=\Eg1, smul=\Eg1, falco-p|ts1p|ts-1p|falco ts-1 with paging option, OTbs, am, da, db, mir, msgr, ul, cols#80, it#8, lines#24, bel=^G, cbt=\EI, clear=\E*, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=\E[A, dch1=\EW, dl1=\ER, ed=\EY, el=\ET\EG0\010\Eg0, ht=^I, il1=\EE, ind=^J, is2=\EZ\E3\E_c, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, rmcup=\E_b, rmir=\Er, rmso=\Eg0, rmul=\Eg0, sgr0=\Eg0, smcup=\E_d, smir=\Eq, smso=\Eg4, smul=\Eg1, # (ts100: I added / based on the init string -- esr) ts100|ts100-sp|falco ts100-sp, am, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, clear=\E[H\E[J$<50>, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA, cuu1=\E[A$<2>, dch1=\E~W, dl1=\E~R, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ich1=\E~Q, il1=\E~E, ind=^J, is1=\E~)\E~ea, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, rc=\E8, rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<2>, sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[1;7m$<2>, smul=\E[4m$<2>, tbc=\E[3g, use=vt100+fnkeys, ts100-ctxt|falco ts-100 saving context, rmcup=\E~_b, smcup=\E~_d\E[2J, use=ts100, #### Florida Computer Graphics # # Florida Computer Graphics Beacon System, using terminal emulator program # "host.com", as provided by FCG. This description is for an early release # of the "host" program. Known bug: clears the whole screen, so it's # commented out. # From: David Bryant 1/7/83 beacon|FCG Beacon System, am, da, db, cols#80, lines#32, bel=\ESTART\r\E37\r\EEND\r$<1>, blink=\ESTART\r\E61\,1\r\EEND\r, clear=\EZ$<10>, cr=^M, cub1=^H, cud1=^J, cuf1=\EV, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<20>, cuu1=\EU, dch1=\EW, dl1=\ER, el=\ET, home=\EH$<10>, ich1=\EQ, il1=\EE, ind=^J, rev=\ESTART\r\E59\,1\r\EEND\r, rmcup=, rmso=\ESTART\r\E70\,0\r\EEND\r$<20>, rmul=\ESTART\r\E60\,0\r\EEND\r, sgr0=\ESTART\r\E78\r\E70\,0\r\EEND\r$<20>, smcup=\ESTART\r\E2\,0\r\E12\r\EEND\r$<10>, smso=\ESTART\r\E70\,6\r\EEND\r$<20>, smul=\ESTART\r\E60\,1\r\EEND\r, #### Fluke # # The f1720a differences from ANSI: no auto margin, destructive # tabs, # of lines, funny highlighting and underlining f1720|f1720a|fluke 1720A, xt, cols#80, lines#16, xmc#1, bel=^G, clear=\E[H\E[2J, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K, ind=\ED, is2=\E[H\E[2J, kcub1=^_, kcud1=^], kcuf1=^^, kcuu1=^\, ri=\EM, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, #### Liberty Electronics (Freedom) # # Liberty Electronics # 48089 Fremont Blvd # Fremont CA 94538 # Vox: (510)-623-6000 # Fax: (510)-623-7021 # From: # (f100: added empty to suppress a tic warning; # made this relative to adm+sgr -- note that isn't # known to work for f100 but does on the f110. --esr) f100|freedom|freedom100|freedom model 100, OTbs, am, bw, hs, mir, msgr, xon, cols#80, lines#24, acsc=, bel=^G, cbt=\EI, clear=^Z, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER$<11.5*>, dsl=\Eg\Ef\r, ed=\EY, el=\ET, flash=\Eb$<200>\Ed, fsl=^M, home=^^, hpa=\E]%p1%{32}%+%c, ht=^I, hts=\E1, il1=\EE$<8.5*>, ind=^J, ip=$<6>, is2=\Eg\Ef\r\Ed, kbs=^H, kcbt=\EI, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kf1=^A@\r, kf10=^AI\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, ri=\Ej, rmacs=\E$, rmir=\Er, smacs=\E%%, smir=\Eq, tbc=\E3, tsl=\Eg\Ef, vpa=\E[%p1%{32}%+%c, use=adm+sgr, f100-rv|freedom-rv|freedom 100 in reverse video, flash=\Ed$<200>\Eb, is2=\Eg\Ef\r\Eb, use=f100, # The f110 and f200 have problems with vi(1). They use the ^V # code for the down cursor key. When kcud1 is defined in terminfo # as ^V, the Control Character Quoting capability (^V in insert mode) # is lost! It cannot be remapped in vi because it is necessary to enter # a ^V to to quote the ^V that is being remapped!!! # # f110/f200 users will have to decide whether # to lose the down cursor key or the quoting capability. We will opt # initially for leaving the quoting capability out, since use of VI # is not generally applicable to most interactive applications # (f110: added , & from f100 -- esr) f110|freedom110|Liberty Freedom 110, bw@, eslok, it#8, wsl#80, blink=\EG2, bold=\EG0, civis=\E.1, cnorm=\E.2, cud1=^V, dim=\EG@, dl1=\ER, dsl=\Ef\r, flash=\Eb$<200/>\Ed, il1=\EE, ip@, is2@, kclr=^^, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kf0=^AI\r, kf10@, kich1=\EQ, kil1=\EE, mc4=\Ea, mc5=\E`, ri=\EJ, rmacs=\E%%, rmir=\Er\EO, smacs=\E$, smir=\EO\Eq, smso=\EG<, tsl=\Ef, use=f100, f110-14|Liberty Freedom 110 14inch, dch1@, use=f110, f110-w|Liberty Freedom 110 - 132 cols, cols#132, use=f110, f110-14w|Liberty Freedom 110 14in/132 cols, cols#132, dch1@, use=f110, # (f200: added to suppress tic warnings re / --esr) f200|freedom200|Liberty Freedom 200, OTbs, am, eslok, hs, mir, msgr, xon, cols#80, it#8, lines#24, wsl#80, acsc=, bel=^G, blink=\EG2, bold=\EG0, cbt=\EI, civis=\E.0, clear=^Z, cnorm=\E.1, cr=^M, csr=\Em0%p1%{32}%+%c%p2%{32}%+%c, cub1=^H, cud1=^V, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dim=\EG@, dl1=\ER, dsl=\Ef\r, ed=\EY, el=\ET, flash=\Eo$<200/>\En, fsl=^M, home=^^, hpa=\E]%p1%{32}%+%c, hts=\E1, il1=\EE, ind=^J, kbs=^H, kclr=^^, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, kich1=\EQ, kil1=\EE, mc4=\Ea, mc5=\E`, ri=\EJ, rmacs=\E%%, rmir=\Er, smacs=\E$, smir=\Eq, smso=\EG<, tbc=\E3, tsl=\Ef, vpa=\E[%p1%{32}%+%c, use=adm+sgr, f200-w|Liberty Freedom 200 - 132 cols, cols#132, use=f200, # The f200 has the ability to reprogram the down cursor key. The key is # reprogrammed to ^J (linefeed). This value is remembered in non-volatile RAM, # so powering the terminal off and on will not cause the change to be lost. f200vi|Liberty Freedom 200 for vi, flash=\Eb$<200/>\Ed, kcud1=^J, use=f200, f200vi-w|Liberty Freedom 200 - 132 cols for vi, cols#132, use=f200vi, #### GraphOn (go) # # Graphon Corporation # 544 Division Street # Campbell, CA 95008 # Vox: (408)-370-4080 # Fax: (408)-370-5047 # Net: troy@graphon.com (Troy Morrison) # # # The go140 and go225 have been discontinued. GraphOn now makes X terminals, # including one odd hybrid that starts out life on power-up as a character # terminal, than can be switched to X graphics mode (driven over the serial # line) by an escape sequence. No info on this beast yet. # (go140: I added / based on the init string -- esr) go140|graphon go-140, OTbs, cols#80, it#8, lines#24, clear=\E[H\E[2J$<10/>, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J$<10/>, el=\E[K, ht=^I, if=/usr/share/tabset/vt100, il1=\E[L, is2=\E<\E=\E[?3l\E[?7l\E(B\E[J\E7\E[;r\E8\E[m\E[q, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, ri=\EM, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, go140w|graphon go-140 in 132 column mode, am, cols#132, is2=\E<\E=\E[?3h\E[?7h\E(B\E[J\E7\E[;r\E8\E[m\E[q, use=go140, # Hacked up vt200 termcap to handle GO-225/VT220 # From: # (go225: I added / based on the init string -- esr) go225|go-225|Graphon 225, OTbs, am, mir, xenl, cols#80, it#8, lines#25, vt#3, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il1=\E[L, ind=\ED, is2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, rc=\E8, rev=\E[7m, rf=/usr/share/tabset/vt100, ri=\EM, rmam=\E[?7l, rmcup=\E[!p\E[?7h\E[2;1;1#w, rmir=\E[4l, rmkx=\E>, rmso=\E[27m, rmul=\E[24m, rs1=\E[!p\E[?7h\E[2;1;1#w, sc=\E7, sgr0=\E[m, smam=\E[?7h, smcup=\E[2;0#w\E[1;25r, smir=\E[4h, smkx=\E=, smso=\E[7m, smul=\E[4m, #### Harris (Beehive) # # Bletch. These guys shared the Terminal Brain Damage laurels with Hazeltine. # Their terminal group is ancient history now (1995) though the parent # company is still in business. # # Beehive documentation is undated and marked Preliminary and has no figures # so we must have early Superbee2 (Model 600, according to phone conversation # with mfr.). It has proved reliable except for some missing padding # (notably after \EK and at bottom of screen). # # The key idea is that AEP mode is poison for & that US's in # the local memory should be avoided like the plague. That means # that the 2048 character local buffer is used as 25 lines of 80 # characters, period. No scrolling local memory, folks. It also # appears that we cannot use naked INS LINE feature since it uses # US. The sbi fakes with an 80-space insert that may be too # slow at low speeds; also spaces get converted to \040 which is # too long for some programs (not vi). DEL LINE is ok but slow. # # The string is designed for last line of screen ONLY; cup to # 25th line corrects the motion inherent in scrolling to Page 1. # # There is one understood bug. It is that the screen appears to # pop to a new (blank) page after a , or leave a half-line # ellipsis to a quad that is the extra 48 memory locations. The # data received is dumped into memory but not displayed. Not to # worry if is being used; the lines not displayed will be, # whenever the cursor is moved up there. Since is addressed # relative to MEMORY of window, nothing is lost; but beware of # relative cursor motion (,,,). Recommended, # therefore, is setenv MORE -c . # # WARNING: Not all features tested. # # Timings are assembled from 3 sources. Some timings may reflect # SB2/Model 300 that were used if more conservative. # Tested on a Model 600 at 1200 and 9600 bd. # # The BACKSPACEkb option is cute. The NEWLINE key, so cleverly # placed on the keyboard and useless because of AEP, is made # into a backspace key. In use ESC must be pressed twice (to send) # and sending ^C must be prefixed by ESC to avoid that weird # transmit mode associated with ENTER key. # # IF TERMINAL EVER GOES CATATONIC with the cursor buzzing across # the screen, then it has dropped into ENTER mode; hit # RESET--ONLINE--!tset. # # As delivered this machine has a FATAL feature that will throw # it into that strange transmit state (SPOW) if the space bar is # hit after a CR is received, but before receiving a LF (or a # few others). # # The circuits MUST be modified to eliminate the SPOW latch. # This is done by strapping on chip A46 of the I/O board; cut # the p.c. connection to Pin 5 and strap Pin 5 to Pin 8 of that # chip. This mod has been checked out on a Mod 600 of Superbee II. # With this modification absurdly high timings on cr are # unnecessary. # # NOTE WELL that the rear panel switch should be set to CR/LF, # not AEP! # sb1|beehive superbee, OTbs, am, bw, da, db, mir, ul, xsb, cols#80, lines#25, xmc#1, bel=^G, cbt=\E`$<650>, clear=\EH$<1>\EJ$<3>, cr=$<1>\r, cub1=^H, cud1=^J, cuf1=\EC$<3>, cup=\EF%p2%03d%p1%03d, cuu1=\EA$<3>, dch1=\EP$<3>, dl1=\EM$<100>, ed=\EJ$<3>, el=\EK$<3>, home=\EH$<1>, ht=^I, hts=\E1, il1=\EN\EL$<3>\EQ \EP$<3> \EO\ER\EA$<3>, ind=^J, is2=\EE$<3>\EX\EZ\EO\Eb\Eg\ER, kbs=^_, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdl1=\EM, ked=\EJ, kel=\EK, kf0=\E2, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, kf9=\E1, khome=\EH, kich1=\EQ\EO, krmir=\ER, lf0=TAB CLEAR, lf9=TAB SET, rmcup=, rmir=\ER, rmso=\E_3, rmul=\E_3, sgr0=\E_3, smcup=\EO, smir=\EQ\EO, smso=\E_1, smul=\E_0, tbc=\E3, sbi|superbee|beehive superbee at Indiana U., xsb, cr=\r$<1>, il1=\EN$<1>\EL$<9>\EQ \EP$<9> \EO\ER\EA, use=sb1, # Alternate (older) description of Superbee - f1=escape, f2=^C. # Note: there are at least 3 kinds of superbees in the world. The sb1 # holds onto escapes and botches ^C's. The sb2 is the best of the 3. # The sb3 puts garbage on the bottom of the screen when you scroll with # the switch in the back set to CRLF instead of AEP. This description # is tested on the sb2 but should work on all with either switch setting. # The f1/f2 business is for the sb1 and the can be taken out for # the other two if you want to try to hit that tiny escape key. # This description is tricky: being able to use cup depends on there being # 2048 bytes of memory and the hairy string. superbee-xsb|beehive super bee, am, da, db, xsb, cols#80, it#8, lines#25, clear=\EH\EJ$<3>, cnorm=^J, cr=\r$<1000>, cub1=^H, cud1=^J, cuf1=\EC, cup=\EF%p2%3d%p1%3d, cuu1=\EA$<3>, dch1=\EP$<3>, dl1=\EM$<100>, ed=\EJ$<3>, el=\EK$<3>, home=\EH, ht=^I, hts=\E1, ind=\n\0\0\0\n\0\0\0\EA\EK\0\0\0\ET\ET, is2=\EH\EJ, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\EH, rmso=\E_3, sgr0=\E_3, smso=\E_1, tbc=\E3, # This loses on lines > 80 chars long, use at your own risk superbeeic|super bee with insert char, ich1=, rmir=\ER, smir=\EQ, use=superbee-xsb, sb2|sb3|fixed superbee, xsb@, use=superbee, #### Beehive Medical Electronics # # Steve Seymour writes (Wed, 03 Feb 1999): # Regarding your question though; Beehive terminals weren't made by Harris. # They were made by Beehive Medical Electronics in Utah. They went out of # business in the early '80s. # # (OK, then, I don't know why a couple of these say "harris beehive".) # # Reports are that most of these Beehive entries (except superbee) have not # been tested and do not work right. is a trouble spot. Be warned. # (bee: was empty, which is obviously bogus -- esr) beehive|bee|harris beehive, OTbs, am, mir, cols#80, lines#24, cbt=\E>, clear=\EE, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EF%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EP, dl1=\EM, ed=\EJ, el=\EK, home=\EH, il1=\EL, kbs=^H, kcbt=\E>, kclr=\EE, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM, kel=\EK, khome=\EH, kich1=\EQ, kil1=\EL, krmir=\E@, rmir=\E@, rmso=\Ed@, rmul=\Ed@, sgr0=\Ed@, smir=\EQ, smso=\EdP, smul=\Ed`, # set tab is ^F, clear (one) tab is ^V, no way to clear all tabs. # good grief - does this entry make :sg:/:ug: when it doesn't have to? # look at those spaces in /. Seems strange to me... # (beehive: removed, no such file. If you # really care, cook up one using ^F -- esr) beehive3|bh3m|beehiveIIIm|harris beehive 3m, OTbs, am, cols#80, it#8, lines#20, bel=^G, clear=^E^R, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cuu1=^K, dl1=\021$<350>, ed=^R, el=^P, home=^E, ht=^I, hts=^F, il1=\023$<160>, ind=^J, ll=^E^K, rmso=\s^_, smso=^]\s, beehive4|bh4|beehive 4, am, cols#80, lines#24, bel=^G, clear=\EE, cr=^M, cub1=\ED, cud1=^J, cuf1=\EC, cuu1=\EA, ed=\EJ, el=\EK, home=\EH, ind=^J, # There was an early Australian kit-built computer called a "Microbee". # It's not clear whether this is for one of those or for a relative # of the Beehive. microb|microbee|micro bee series, OTbs, am, cols#80, it#8, lines#24, bel=^G, clear=\EE, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EF%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ, el=\EK, ht=^I, ind=^J, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew, kf9=\Ex, khome=\EH, rmso=\Ed@, rmul=\Ed@, sgr0=\Ed@, smso=\s\EdP, smul=\Ed`, # 8675, 8686, and bee from Cyrus Rahman # (8675: changed k10, k11...k16 to k;, F1...F6 -- esr) ha8675|harris 8675, is2=\ES\E#\E*\Eh\Em\E?\E1\E9\E@\EX\EU, kf1=^F, kf10=\Ed, kf11=^W, kf12=\ER, kf13=\EE, kf14=\EI, kf15=\Ei, kf16=\Eg, kf2=^P, kf3=^N, kf4=^V, kf5=^J, kf6=^T, kf7=^H, kf8=\177, kf9=\Ee, use=bee, # (8686: changed k10, k11...k16 to k;, F1...F6; fixed broken continuation # in :is: -- esr) ha8686|harris 8686, is2=\ES\E#\E*\Eh\Em\E?\E1\E9\E@\EX\EU\E"*Z01\E"8F35021B7C83#\E"8F45021B7D83#\E"8F55021B7E83#\E"8F65021B7F83#\E"8F75021B7383#\E"8F851BD7#\E"8F95021B7083#\E"8FA5021B7183#\E"8FB5021B7283#, kf1=\002\Ep\003, kf10=\Ej, kf11=\EW, kf12=\002\E{\003, kf13=\002\E|\003, kf14=\002\E}\003, kf15=\002\E~\003, kf16=\002\E\177\003, kf2=\002\Eq\003, kf3=\002\Er\003, kf4=\002\Es\003, kf5=\E3, kf6=\EI, kf7=\ER, kf8=\EJ, kf9=\E(, use=bee, #### Hazeltine # # Hazeltine appears to be out of the terminal business as of 1995. These # guys were co-owners of the Terminal Brain Damage Hall Of Fame along with # Harris. They have a hazeltine.com domain (but no web page there ) and can # be reached at: # # Hazeltine # 450 East Pulaski Road # Greenlawn, New York 11740 # # As late as 1993, manuals for the terminal product line could still be # purchased from: # # TRW Customer Service Division # 15 Law Drive # P.O. Box 2076 # Fairfield, NJ 07007-2078 # # They're now (1998) a subsidiary of General Electric, operating under the # marque "GEC-Marconi Hazeltine" and doing military avionics. Web page # at . # # Since is blank, when you want to erase something you # are out of luck. You will have to do ^L's a lot to # redraw the screen. h1000 is untested. It doesn't work in # vi - this terminal is too dumb for even vi. (The code is # there but it isn't debugged for this case.) hz1000|hazeltine 1000, OTbs, cols#80, lines#12, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=\s, home=^K, ind=^J, # From: Thu Aug 20 09:09:18 1981 hz1420|hazeltine 1420, OTbs, am, cols#80, lines#24, bel=^G, clear=\E^\, cr=^M, cub1=^H, cud1=^J, cuf1=^P, cup=\E\021%p2%c%p1%{32}%+%c, cuu1=\E^L, dl1=\E^S, ed=\E^X, el=\E^O, ht=^N, il1=\E^Z, ind=^J, rmso=\E^Y, smso=\E^_, # New "safe" cursor movement (11/87) from . Prevents # freakout with out-of-range args and tn3270. No hz since it needs to # receive tildes. hz1500|hazeltine 1500, OTbs, am, hz, cols#80, lines#24, bel=^G, clear=~^\, cr=^M, cub1=^H, cud1=~^K, cuf1=^P, cup=~\021%p2%p2%?%{30}%>%t%{32}%+%;%{96}%+%c%p1%{96}%+%c, cuu1=~^L, dl1=~\023$<40>, ed=~\030$<10>, el=~^O, home=~^R, il1=~\032$<40>, ind=^J, kcub1=^H, kcud1=^J, kcuf1=^P, kcuu1=~^L, khome=~^R, rmso=~^Y, smso=~^_, # h1510 assumed to be in sane escape mode. Else use h1500. # (h1510: early versions of this entry apparently had ", # , but these caps were commented out in 8.3; also, # removed incorrect and overridden ":do=^J:" -- esr) hz1510|hazeltine 1510, OTbs, am, cols#80, lines#24, bel=^G, clear=\E^\, cr=^M, cub1=^H, cud1=\E^K, cuf1=^P, cup=\E\021%p2%c%p1%c, cuu1=\E^L, dl1=\E^S, ed=\E^X, el=\E^O, il1=\E^Z, ind=^J, # Hazeltine 1520 # The following switch settings are assumed for normal operation: # FULL CR U/L_CASE ESCAPE # FORMAT_OFF EOM_A_OFF EOM_B_OFF WRAPAROUND_ON # Other switches may be set for operator convenience or communication # requirements. hz1520|Hazeltine 1520, OTbs, am, bw, msgr, cols#80, lines#24, bel=^G, bold=\E^_, clear=\E^\, cr=^M, cub1=^H, cud1=^J, cuf1=^P, cup=\E\021%p2%c%p1%c, cuu1=\E^L, dl1=\E^S, ed=\E^X, el=\E^O, home=\E^R, il1=\E^Z, ind=^J, kbs=^H, kclr=\E^\, kcub1=^H, kcud1=\E^K, kcuf1=^P, kcuu1=\E^L, kdl1=\E^S, ked=\E^X, kel=\E^O, khome=\E^R, kil1=\E^Z, rmso=\E^Y, rs1=\E$\E\005\E?\E\031, sgr0=\E^Y, smso=\E^_, # This version works with the escape switch off # (h1520: removed incorrect and overridden ":do=^J:" -- esr) hz1520-noesc|hazeltine 1520, am, hz, cols#80, lines#24, bel=^G, clear=~^\, cr=^M, cub1=^H, cud1=~^K, cuf1=^P, cup=~\021%p2%c%p1%c$<1>, cuu1=~^L, dl1=~^S, ed=~^X, el=~^O, home=~^R, il1=~^Z, ind=^J, rmso=~^Y, smso=~^_, # Note: the h1552 appears to be the first Hazeltine terminal which # is not braindamaged. It has tildes and backprimes and everything! # Be sure the auto lf/cr switch is set to cr. hz1552|hazeltine 1552, OTbs, cud1=^J, dl1=\EO, il1=\EE, kf1=\EP, kf2=\EQ, kf3=\ER, lf1=blue, lf2=red, lf3=green, use=vt52, hz1552-rv|hazeltine 1552 reverse video, cud1=^J, rmso=\ET, smso=\ES, use=hz1552, # Note: h2000 won't work well because of a clash between upper case and ~'s. hz2000|hazeltine 2000, OTbs, OTnc, am, cols#74, lines#27, bel=^G, clear=~\034$<6>, cub1=^H, cud1=^J, cup=~\021%p2%c%p1%c, dl1=~\023$<6>, home=~^R, il1=~\032$<6>, ind=^J, pad=\177, # Date: Fri Jul 23 10:27:53 1982. Some unknown person wrote: # I tested this termcap entry for the Hazeltine Esprit with vi. It seems # to work ok. There is one problem though if one types a lot of garbage # characters very fast vi seems not able to keep up and hangs while trying # to insert. That's in insert mode while trying to insert in the middle of # a line. It might be because the Esprit doesn't have insert char and delete # char as a built in function. Vi has to delete to end of line and then # redraw the rest of the line. esprit|Hazeltine Esprit I, OTbs, am, bw, cols#80, lines#24, bel=^G, cbt=\E^T, clear=\E^\, cr=^M, cub1=^H, cud1=\E^K, cuf1=^P, cup=\E\021%p2%c%p1%c, cuu1=\E^L, dl1=\E^S, ed=\E^W, el=\E^O, home=\E^R, il1=\E^Z, ind=^J, is2=\E?, kbs=^H, kcub1=^H, kcud1=\E^K, kcuf1=^P, kcuu1=\E^L, kf0=^B0^J, kf1=^B1^J, kf2=^B2^J, kf3=^B3^J, kf4=^B4^J, kf5=^B5^J, kf6=^B6^J, kf7=^B7^J, kf8=^B8^J, kf9=^B9^J, khome=\E^R, lf0=0, lf1=1, lf2=2, lf3=3, lf4=4, lf5=5, lf6=6, lf7=7, lf8=8, lf9=9, rmkx=\E>, rmso=\E^Y, smkx=\E<, smso=\E^_, esprit-am|hazeltine esprit auto-margin, am, use=esprit, # Hazeltine Modular-1 from Cliff Shackelton via BRL # Vi it seems always wants to send a control J for "do" and it turned out # that the terminal would work somewhat if the auto LF/CR was turned off. # (hmod1: removed :dn=~^K: -- esr) hmod1|Hazeltine Modular 1, OTbs, am, hz, cols#80, lines#24, bel=^G, cbt=~^T, clear=~^\, cr=^M, cub1=^H, cud1=~^K, cuf1=^P, cup=~\021%p2%c%p1%c, cuu1=~^L, dl1=~^S, home=~^R, il1=~^Z, ind=^J, kcub1=^H, kcud1=~^K, kcuf1=^P, kcuu1=~^L, khome=~^R, rc=~^Q, rmso=~^Y, sc=~^E, sgr0=~^Y, smso=~^_, # # Hazeltine Executive 80 Model 30 (1554?) # from Will Martin via BRL # Like VT100, except for different "am" behavior. hazel|exec80|h80|he80|Hazeltine Executive 80, OTbs, OTpt, am, cols#80, it#8, lines#24, vt#3, OTnl=^J, bel=^G, blink=\E[5m$<2/>, bold=\E[1m$<2/>, clear=\E[;H\E[2J$<50/>, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C$<2/>, cup=\E[%i%p1%d;%p2%dH$<5/>, cuu1=\E[A$<2/>, ed=\E[J$<50/>, el=\E[K$<3/>, home=\E[H, ht=^I, is2=\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rc=\E8, rev=\E[7m$<2/>, rf=/usr/share/tabset/vt100, ri=\EM$<5/>, rmkx=\E[?1l\E>, rmso=\E[m$<2/>, rmul=\E[m$<2/>, rs1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr0=\E[m$<2/>, smkx=\E[?1h\E=, smso=\E[7m$<2/>, smul=\E[4m$<2/>, #### IBM # ibm327x|line mode IBM 3270 style, gn, clear=^M^J, el=^M, home=^M, ibm3101|i3101|IBM 3101-10, OTbs, am, xon, cols#80, lines#24, bel=^G, clear=\EK, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ, el=\EI, home=\EH, hts=\E0, ind=^J, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, nel=^M^J, tbc=\EH, ibm3151|IBM 3151 display, is2=\E S, rmacs=\E>B, rmcup=\E>B, rs2=\E S, s0ds=\E>B, sgr=\E4%{64}%?%p1%t%{65}%|%;%?%p2%t%{66}%|%;%?%p3%t%{65}%|%;%?%p4%t%{68}%|%;%?%p5%t%{64}%|%;%?%p6%t%{72}%|%;%?%p7%t%{80}%|%;%c%?%p9%t\E>A%e\E>B%;, sgr0=\E4@\E>B, smacs=\E>A, smcup=\E>B, use=ibm3162, # From: Mark Easter 29 Oct 1992 # removed kend, knp, kpp -TD # # From: Stephen Powell 23 Apr 2015 # Added ich1 (kich1 without ich1 doesn't make sense). # Added il1 (kil1 without il1 doesn't make sense). # Added xon (terminal uses XON/XOFF flow control). # ibm3161|ibm3163|wy60-316X|wyse60-316X|IBM 3161/3163 display, OTbs, am, mir, msgr, xon, cols#80, it#8, lines#24, acsc=j\352k\353l\354m\355n\356q\361t\364u\365v\366w\367x\370, bel=^G, blink=\E4D, bold=\E4H, clear=\EH\EJ, cr=^M, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EQ, dl1=\EO, ed=\EJ, el=\EI, home=\EH, ich1=\EP \010, il1=\EN, ind=^J, invis=\E4P, kbs=^H, kcbt=\E2, kclr=\EL\r, kctab=\E1, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EQ, kdl1=\EO, ked=\EJ, kel=\EI, kf1=\Ea\r, kf10=\Ej\r, kf11=\Ek\r, kf12=\El\r, kf13=\E!a\r, kf14=\E!b\r, kf15=\E!c\r, kf16=\E!d\r, kf17=\E!e\r, kf18=\E!f\r, kf19=\E!g\r, kf2=\Eb\r, kf20=\E!h\r, kf21=\E!i\r, kf22=\E!j\r, kf23=\E!k\r, kf24=\E!l\r, kf3=\Ec\r, kf4=\Ed\r, kf5=\Ee\r, kf6=\Ef\r, kf7=\Eg\r, kf8=\Eh\r, kf9=\Ei\r, khome=\EH, khts=\E0, kich1=\EP \010, kil1=\EN, ktbc=\E 1, mc4=^P^T, mc5=^P^R, rev=\E4A, rmcup=\E>A, rmso=\E4@, rmul=\E4@, sgr=\E4%{64}%?%p1%t%{65}%|%;%?%p2%t%{66}%|%;%?%p3%t%{65}%|%;%?%p4%t%{68}%|%;%?%p5%t%{64}%|%;%?%p6%t%{72}%|%;%?%p7%t%{80}%|%;%c%?%p9%t\E>A%e\E<@%;, sgr0=\E4@\E<@, smcup=\E>A, smso=\E4A, smul=\E4B, ibm3161-C|IBM 3161-C NLS terminal using cartridge, rmcup=\E>B, s0ds=\E>B, s1ds=\E>A, smcup=\E>B, use=ibm3161, # # From: Stephen Powell 23 Apr 2015 # Deleted il1. (il1 will now be inherited from ibm3161-C, which inherits # it from ibm3161. # ibm3162|IBM 3162 display, blink=\E4$a, bold=\E4(a, invis=\E40a, rev=\E4!a, rmso=\E4>b, rmul=\E4=b, sgr0=\E4@, smso=\E4!a, smul=\E4"a, use=ibm3161-C, # This really should not use setab/setaf, but it is clear that the # original terminfo does not toggle red/blue colors as in setb/setf. ibm3164|i3164|IBM 3164, msgr, colors#8, pairs#64, op=\E4 "@, rmcup=\E!9(N\E>B, s0ds=\E>B, s1ds=\E>A, setab=\E4 %p1%{64}%+%c, setaf=\E4%?%p1%t %p1%{32}%+%c%e!'%;@, smcup=\E!9/N\E>B, use=ibm3161, ibm5151|wy60-AT|wyse60-AT|IBM 5151 Monochrome display, am, bw, msgr, xon, cols#80, it#8, lines#25, acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%i%p1%dG, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, invis=\E[8m, is2=\Ec, kbs=^H, kcbt=\E[Z, kclr=\E[144q, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, ked=\E[148q, kel=\E[142q, kend=\E[146q, kf1=\E[001q, kf10=\E[010q, kf11=\E[011q, kf12=\E[012q, kf13=\E[013q, kf14=\E[014q, kf15=\E[015q, kf16=\E[016q, kf17=\E[017q, kf18=\E[018q, kf19=\E[019q, kf2=\E[002q, kf20=\E[020q, kf21=\E[021q, kf22=\E[022q, kf23=\E[023q, kf24=\E[024q, kf25=\E[025q, kf26=\E[026q, kf27=\E[027q, kf28=\E[028q, kf29=\E[029q, kf3=\E[003q, kf30=\E[030q, kf31=\E[031q, kf32=\E[032q, kf33=\E[033q, kf34=\E[034q, kf35=\E[035q, kf36=\E[036q, kf4=\E[004q, kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q, kf9=\E[009q, khome=\E[H, kich1=\E[139q, kil1=\E[140q, kind=\E[151q, knp=\E[154q, kpp=\E[150q, kri=\E[155q, krmir=\E[4l, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmir=\E[4l, rmso=\E[m, rmul=\E[m, rs2=\Ec, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;m, sgr0=\E[0m, smir=\E[4h, smso=\E[7m, smul=\E[4m, ibmaed|IBM Experimental display, OTbs, am, eo, msgr, cols#80, it#8, lines#52, clear=\EH\EK, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EQ, dl1=\EO, ed=\EJ, el=\EI, flash=\EG, home=\EH, ht=^I, ich1=\EP, il1=\EN, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, rmso=\E0, sgr0=\E0, smso=\E0, ibm-apl|apl|IBM apl terminal simulator, lines#25, use=dm1520, # (ibmmono: this had an unknown `sb' boolean, I changed it to `bs'. # Also it had ":I0=f10:" which pretty obviously should be "l0=f10" -- esr) ibmmono|IBM workstation monochrome, eslok, hs, bold=\EZ, dl1=\EM, dsl=\Ej\EY8 \EI\Ek, fsl=\Ek, il1=\EL, invis=\EF\Ef0;\Eb0;, kbs=^H, kf0=\E<, kf1=\ES, kf2=\ET, kf3=\EU, kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, kf9=\EY, khome=\EH, kich1=\0, kind=\EE, knp=\EE, kpp=\Eg, kri=\EG, lf0=f10, rev=\Ep, ri=\EA, rmso=\Ez, rmul=\Ew, sgr0=\Ew\Eq\Ez\EB, smso=\EZ, smul=\EW, tsl=\Ej\EY8%+ \Eo, use=ibm3101, ibmega|IBM Enhanced Color Display, cr=^M, cud1=^J, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, use=ibmmono, # This color scheme is assumed in some recent IBM terminal descriptions # (green on black, emulated on a 16-color terminal). ibm+color|IBM color definitions, colors#8, ncv#3, pairs#64, op=\E[32m\E[40m, setb=\E[%?%p1%{0}%=%t40m%e%p1%{1}%=%t41m%e%p1%{2}%=%t42m%e%p1%{3}%=%t43m%e%p1%{4}%=%t44m%e%p1%{5}%=%t45m%e%p1%{6}%=%t46m%e%p1%{7}%=%t107m%;, setf=\E[%?%p1%{0}%=%t30m%e%p1%{1}%=%t31m%e%p1%{2}%=%t32m%e%p1%{3}%=%t33m%e%p1%{4}%=%t34m%e%p1%{5}%=%t35m%e%p1%{6}%=%t36m%e%p1%{7}%=%t97m%;, ibm+16color|IBM aixterm color definitions, colors#16, pairs#256, setab=\E[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm, setaf=\E[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm, setb=%p1%{8}%/%{6}%*%{4}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m, setf=%p1%{8}%/%{6}%*%{3}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m, ibm5154|IBM 5154 Color display, colors#8, ncv@, pairs#64, bold@, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ibm5151, use=ibm+color, ibmega-c|ibm5154-c|IBM Enhanced Color Display with standout and underline, rmso=\EB, rmul=\EB, smso=\EF\Ef3;, smul=\EF\Ef2;, use=ibmmono, ibmvga-c|IBM VGA display color termcap, cr=^M, cud1=^J, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, use=ibmega-c, ibmvga|IBM VGA display, cr=^M, cud1=^J, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, use=ibmega, # ibmapa* and ibmmono entries come from ACIS 4.3 distribution rtpc|ibmapa16|IBM 6155 Extended Monochrome Graphics Display, lines#32, dsl=\Ej\EY@ \EI\Ek, tsl=\Ej\EY@%+ \Eo, use=ibmmono, ibm6155|IBM 6155 Black & White display, blink@, bold@, use=ibm5151, # Advanced Monochrome (6153) and Color (6154) Graphics Display: ibmapa8c|ibmapa8|IBM 6154 Advanced Graphics Display, lines#31, dsl=\Ej\EY? \EI\Ek, tsl=\Ej\EY?%+ \Eo, use=ibmmono, ibmapa8c-c|ibm6154-c|IBM 6154 Advanced Color Graphics Display, lines#31, dim=\EF\Ef7;, dsl=\Ej\EY? \EI\Ek, tsl=\Ej\EY?%+ \Eo, use=ibmega-c, ibm6154|IBM 6154 Color displays, blink@, bold=\E[12m, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;12%;m, sgr0=\E[0;10m, use=ibm5154, ibm6153|IBM 6153 Black & White display, blink@, bold=\E[12m, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;12%;m, sgr0=\E[0;10m, use=ibm5151, ibm6153-90|IBM 6153 Black & White display, cols#90, lines#36, blink@, bold@, use=ibm5151, ibm6153-40|IBM 6153 Black & White display, cols#40, lines#12, use=ibm6153-90, ibm8512|ibm8513|IBM color VGA Terminal, am, mir, msgr, cols#80, it#8, lines#25, acsc=jjkkllmmnnqqttuuvvwwxx, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cub1=\E[D, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, il=\E[%p1%dL, il1=\E[L, is2=\Eb\E[m\017\E[?7h, kcud1=\E[B, kcuu1=\E[A, kf0=\E[010q, kf1=\E[001q, kf2=\E[002q, kf3=\E[003q, kf4=\E[004q, kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q, kf9=\E[009q, khome=\E[H, rc=\E[u, rev=\E[7m, rmacs=^O, rmam=\E[?7l, rmcup=\E[20h, rmdc=\E[4l, rmir=\E[4l, rmso=\E[m, rmul=\E[m, rs1=\Eb\E[m\017\E[?7h\E[H\E[J, sc=\E[s, sgr0=\E[m, smacs=^N, smam=\E[?7h, smcup=\E[20;4l\E[?7h\Eb, smdc=\E[4h, smir=\E[4h, smso=\E[7m, smul=\E[4m, use=ibm8503, hft-c|HFT with Color, colors#8, pairs#64, acsc=jjkkllmmnnqqttuuvvwwxx, s0ds=\E(B, s1ds=\E(0, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[0m\E(B, use=ibm5151, use=ibm+color, hft-c-old|HFT with Color PC850, colors#8, pairs#64, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ibm5151, use=ibm+color, hft-old|AIWS High Function Terminal, am, xon, cols#80, lines#25, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L, ind=^J, invis=\E[8m, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[001q, kf2=\E[002q, kf3=\E[003q, kf4=\E[004q, kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q, kf9=\E[009q, khome=\E[H, knp=\E[153q, kpp=\E[159q, ktbc=\E[010q, rev=\E[7m, rmir=\E6, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smir=\E6, smso=\E[7m, smul=\E[4m, use=ibm+color, ibm-system1|system1|ibm system/1 computer, am, xt, cols#80, lines#24, bel=^G, clear=^Z, cub1=^H, cuf1=^\, cup=\005%p1%{32}%+%c%p2%{32}%+%c, cuu1=^^, home=^K, ind=^J, # lft-pc850 : IBM Low Function Terminal Device # lft "supports" underline, bold, and blink in the sense that the lft code # sets all the right bits. HOWEVER, depending upon the adapter, these # attributes may or may not be supported by the device driver. lft|lft-pc850|LFT-PC850|IBM LFT PC850 Device, am, bw, msgr, xon, cols#80, it#8, lines#25, acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[2J, el=\E[0K, home=\E[H, hpa=\E[%i%p1%dG, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, indn=\E[%p1%dS, invis=\E[8m, is2=\Ec, kbs=^H, kcbt=\E[Z, kclr=\E[144q, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, ked=\E[148q, kel=\E[142q, kend=\E[146q, kf1=\E[001q, kf10=\E[010q, kf11=\E[011q, kf12=\E[012q, kf13=\E[013q, kf14=\E[014q, kf15=\E[015q, kf16=\E[016q, kf17=\E[017q, kf18=\E[018q, kf19=\E[019q, kf2=\E[002q, kf20=\E[020q, kf21=\E[021q, kf22=\E[022q, kf23=\E[023q, kf24=\E[024q, kf25=\E[025q, kf26=\E[026q, kf27=\E[027q, kf28=\E[028q, kf29=\E[029q, kf3=\E[003q, kf30=\E[030q, kf31=\E[031q, kf32=\E[032q, kf33=\E[033q, kf34=\E[034q, kf35=\E[035q, kf36=\E[036q, kf4=\E[004q, kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q, kf9=\E[009q, khome=\E[H, kich1=\E[139q, kil1=\E[140q, kind=\E[151q, knp=\E[154q, kpp=\E[150q, kri=\E[155q, krmir=\E[4l, rev=\E[7m, ri=\EL, rin=\E[%p1%dT, rmacs=\E(B, rmir=\E[4l, rmso=\E[0m, rmul=\E[0m, rs2=\Ec, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;, sgr0=\E[0m, smacs=\E(0, smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, # "Megapel" refers to the display adapter, which was used with the IBM RT # aka IBM 6150. ibm5081|hft|IBM Megapel Color display, acsc=jjkkllmmnnqqttuuvvwwxx, blink@, bold@, s0ds=\E(B, s1ds=\E(0, sgr0=\E[0m\E(B, use=ibm5154, ibm5081-c|ibmmpel-c|IBM 5081 1024x1024 256/4096 Megapel enhanced color display, eslok, hs, lines#33, dsl=\Ej\EYA \EI\Ek, fsl=\Ek, tsl=\Ej\EYA%+ \Eo, use=ibmega-c, ibm8503|ibm8507|ibm8604|IBM 8503 B & W VGA display, use=hft-c, ibm8514|IBM 8514/a color VGA display, eslok, hs, dsl=\Ej\EYI \EI\Ek, fsl=\Ek, tsl=\Ej\EYI%+ \Eo, use=hft, ibm8514-c|IBM 8514 color display with standout and underline, eslok, hs, lines#41, cr=^M, cud1=^J, dsl=\Ej\EYI \EI\Ek, fsl=\Ek, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, tsl=\Ej\EYI%+ \Eo, use=ibmega-c, # # AIX entries. IBM ships these with AIX 3.2.5. # -- added rc, sc based on manpage -TD # Note that we could use ibm+16color, but that is not how IBM defines this one. aixterm|IBM Aixterm Terminal Emulator, eslok, hs, acsc=jjkkllmmnnqqttuuvvwwxx, bold=\E[1m, dsl=\E[?E, fsl=\E[?F, rc=\E8, ri@, s0ds=\E(B, s1ds=\E(0, sc=\E7, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;, sgr0=\E[0;10m\E(B, tsl=\E[?%p1%dT, use=ibm6154, aixterm-m|IBM AIXterm Monochrome Terminal Emulator, eslok, hs, acsc=jjkkllmmnnqqttuuvvwwxx, bold=\E[1m, dsl=\E[?E, fsl=\E[?F, ri@, s0ds=\E(B, s1ds=\E(0, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m, sgr0=\E[0;10m\E(B, tsl=\E[?%p1%dT, use=ibm6153, aixterm-m-old|old IBM AIXterm Monochrome Terminal Emulator, eslok, hs, bold=\E[1m, dsl=\E[?E, fsl=\E[?F, ri@, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m, tsl=\E[?%p1%dT, use=ibm6153, jaixterm|IBM Kanji Aixterm Terminal Eemulator, acsc@, use=aixterm, jaixterm-m|IBM Kanji AIXterm Monochrome Terminal Emulator, acsc@, use=aixterm-m, # This flavor is adapted from xterm, in turn from aixterm documentation -TD aixterm-16color|IBM Aixterm Terminal Emulator with 16 colors, use=ibm+16color, use=aixterm, #### Infoton/General Terminal Corp. # # gt100 sounds like something DEC would come out with. Let's hope they don't. i100|gt100|gt100a|General Terminal 100A (formerly Infoton 100), OTbs, am, cols#80, lines#24, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\Ef%p2%{32}%+%c%p1%{32}%+%c, cuu1=\EA, dl1=\EM, ed=\EJ, el=\EK, flash=\Eb$<200/>\Ea, home=\EH, il1=\EL, ind=^J, rmso=\Ea, smso=\Eb, i400|infoton 400, OTbs, am, cols#80, lines#25, bel=^G, clear=\E[2J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%3d;%p2%3dH, cuu1=\E[A, dch1=\E[4h\E[2Q\E[P\E[4l\E[0Q, dl1=\E[M, el=\E[N, il1=\E[L, ind=^J, rmir=\E[4l\E[0Q, smir=\E[4h\E[2Q, # (addrinfo: removed obsolete ":bc=^Z:" -- esr) addrinfo, am, cols#80, lines#24, bel=^G, clear=^L, cr=^M, cub1=^Z, cud1=^J, cuf1=^Y, cup=\037%p1%c%p2%c, cuu1=^\, ed=^K, home=^H, ind=^J, ll=^H^\, # (infoton: used to have the no-ops , , -- esr) infoton, am, cols#80, lines#24, bel=^G, clear=^L, cr=^M, cub1=^Z, cud1=^J, cuf1=^Y, cuu1=^\, ed=^K, ind=^J, ll=^H^\, # The ICL6402 was actually the Kokusai Display System 6402. # The 6404 was the KDS7372 (color version of the 6402). # # ICL6404 control codes follow: # #code function #~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #ctrl-A set SOM position at cursor position #ctrl-G Bell #ctrl-H Backspace #ctrl-I Horiz tab #ctrl-J Linefeed #ctrl-K Cursor up #ctrl-L Cursor right #ctrl-M Carriage return #ctrl-N Disable xon/xoff to host #ctrl-O Enable xon/xoff to host #ctrl-R Enable bidirectional mode #ctrl-T Disable bidirectional mode #ctrl-V Cursor down #ctrl-Z Clear unprotected data to insert char #ctrl-^ Cursor home #ctrl-_ Newline # #ESC lead-in char for multiple character command # #ESC space R execute power on sequence #ESC ! p1 p2 define scroll region: # p1 = scroll top line: 20h - 37h # p1 = scroll bottom line: 20h - 37h #ESC " unlock keyboard #ESC # lock keyboard #ESC $ Semi-graphics mode on #ESC % Semi-graphics mode off #ESC & protect mode on #ESC ' protect mode off #ESC ( write protect mode off (full intensity) #ESC ) write protect mode on (half intensity) # #ESC * clear screen #ESC + clear unprotected data to insert char #ESC , clear unprotected data to half intensity spaces #ESC - p1 p2 p3 p4 address cursor to page, row, column: # p1 = page number 0 - 3 # p2 = row 20h - 7fh # p3 = column (lo) 20h - 7fh # p4 = column (hi) 20h - 21h (only 132 col) #ESC . p1 set cursor style: # p1 = 0 invisible cursor # p1 = 1 block blinking cursor # p1 = 2 block steady cursor # p1 = 3 underline blinking cursor # p1 = 4 underline steady cursor #ESC / transmit cursor location (page, row, column) #ESC 0 p1 p2 p3 p4 program edit key: # p1 = edit key code: '@'-'S', '`'-'s' # p2 p3 p4 = program data (3 bytes) # #ESC 1 set tab #ESC 2 clear tab at cursor #ESC 3 clear all tabs #ESC 4 send unprotect line to cursor #ESC 5 send unprotect page to cursor #ESC 6 send line to cursor #ESC 7 send page to cursor #ESC 8 n set scroll mode: # n = 0 set jump scroll # n = 1 set smooth scroll #ESC 9 n control display: # n = 0 display off # n = 1 display on #ESC : clear unprotected data to null #ESC ; clear unprotected data to insert char # #ESC < keyclick on #ESC = p1 p2 address cursor to row, column # p1 = row 20h - 7fh # p2 = column (lo) 20h - 7fh # p3 = column (hi) 20h - 21h (only 132 col) #ESC > keyclick off #ESC ? transmit cursor location (row, column) # #ESC @ copy print mode on #ESC A copy print mode off #ESC B block mode on #ESC C block mode off (conversation mode) #ESC D F set full duplex #ESC D H set half duplex #ESC E line insert #ESC F p1 p2 set page colour (p1 = f/grnd, p2 = b/grnd) # 0 = black, 1 = red, 2 = green, 3 = yellow # 4 = blue, 5 = magenta, 6 = cyan, 7 = white #ESC G n set serial field attribute (n = 30h - 3Fh) #ESC H n full graphics mode: # n = 0 exit full graphics mode # n = 1 enter full graphics mode #ESC I back tab #ESC J back page #ESC K forward page # #ESC L unformatted page print #ESC M L move window left (132 col mode only) #ESC M R move window right (132 col mode only) #ESC N set page edit (clear line edit) #ESC O set line edit (clear page edit) #ESC P formatted page print #ESC Q character insert #ESC R line delete #ESC S send message unprotected only #ESC T erase line to insert char #ESC U set monitor mode (see ESC X, ESC u) # #ESC V n select video attribute mode: # n = 0 serial field attribute mode # n = 1 parallel character attribute mode #ESC V 2 n define line attribute: # n = 0 single width single height # n = 1 single width double height # n = 2 double width single height # n = 3 double width double height #ESC V 3 n select character font: # n = 0 system font # n = 1 user defined font #ESC V 4 n select screen mode: # n = 0 page screen mode # n = 1 virtual screen mode #ESC V 5 n control mouse mode: # n = 0 disable mouse # n = 1 enable sample mode # n = 2 send mouse information # n = 3 enable request mode #ESC W character delete #ESC X clear monitor mode (see ESC U, ESC u) #ESC Y erase page to insert char # #ESC Z n send user/status line: # n = 0 send user line # n = 1 send status line # n = 2 send terminal ID #ESC [ p1 p2 p3 set character attribute (parallel char mode): # p1: 0 = normal # 1 = blank # 2 = blink # 3 = blink blank (= blank) # 4 = reverse # 5 = reverse blank # 6 = reverse blink # 7 = reverse blink blank (= reverse blank) # 8 = underline # 9 = underline blank # : = underline blink # ; = underline blink blank # < = reverse underline # = = reverse underline blank # > = reverse underline blink # ? = reverse underline blink blank # p2, p3: f/grnd, b/grnd colour # (see ESC F for colours) # use ZZ for mono, eg. # ESC [ 0 Z Z for normal # ESC [ 4 Z Z for inverse etc. # #ESC \ n set page size: # n = 1 24 lines/page # n = 2 48 lines/page # n = 3 72 lines/page # n = 4 96 lines/page #ESC ] n set Wordstar mode: # n = 0 normal (KDS7372) mode # n = 1 Wordstar mode # #ESC b set foreground colour screen # #ESC c n enter self-test mode: # n = 0 exit self test mode # n = 1 ROM test # n = 2 RAM test # n = 3 NVRAM test # n = 4 screen display test # n = 5 main/printer port test # n = 6 mouse port test # n = 7 graphics board test # n = 8 graphics memory test # n = 9 display all 'E' # n = : display all 'H' #ESC d set background colour screen # #ESC e n program insert char (n = insert char) #ESC f text CR load user status line with 'text' # #ESC g display user status line on 25th line #ESC h display system status line on 25th line #ESC i tab #ESC j reverse linefeed #ESC k n duplex/local edit mode: # n = 0 duplex edit mode # n = 1 local edit mode #ESC l n select virtual screen: # n = 0 screen 1 # n = 1 screen 2 #ESC m save current config to NVRAM #ESC n p1 select display screen: # p1 = 0 screen 1 # p1 = 1 screen 2 # p1 = 2 screen 3 # p1 = 3 screen 4 #ESC o p1 p2 set characters/line and attribute: # p1 = 0 80 chars/line # #ESC o p1 p2 set characters/line and attribute: # p1 = 0 80 chars/line # p1 = 1 132 chars/line # p2 = 0 single width single height # p2 = 1 single width double height # p2 = 2 double width single height # p2 = 3 double width double height # #ESC q insert mode on #ESC r edit mode on #ESC s send message all #ESC t erase line to null #ESC u clear monitor mode (see ESC U, ESC X) #ESC v autopage mode on #ESC w autopage mode off #ESC x p1 p2 p3 define delimiter code... #ESC y erase page to null # #ESC z 2 p1 p2 p3 p4 draw quadrangle: # p1 = starting row # p2 = starting column # p3 = end row # p4 = end column # #ESC { p1 p2 p3 p4 configure main port # (baud, stop bits, parity, word length) # #ESC | p1 p2 text Ctrl-Y program function key with 'text': # p1 = function key code: # '1' - ';' normal f1- f11 # '<' - 'F' shifted f1 - f11 # p2 = program mode: # 1 = FDX # 2 = LOC # 3 = HDX # Ctrl-Y = terminator # (use Ctrl-P to escape ^P, ^Y ) # #ESC } p1 p2 p3 p4 configure printer port # (baud, stop bits, parity, word length) #ESC ~ send system status # # Codes and info from Peter Disdale 12 May 1997 # # Entry is by esr going solely on above information and is UNTESTED. # This actually looks a lot like a Televideo 9xx. # This entry uses page 0 and is monochrome; I'm not brave enough to try # to make color work without a test terminal. The capability is a guess. # The initialization string sets conversation mode, blinking underline cursor, # full duplex, parallel attribute mode, display user status line, white # foreground, black background, normal highlight. # icl6404|kds7372|icl6402|kds6402|ICL 6404 aka Kokusai Display Systems 7372, OTbs, am, hs, cols#80, lines#24, bel=^G, blink=\E[2ZZ, cbt=\EI, civis=\E.0, clear=\E*, cnorm=\E.3, cr=^M, csr=\E!%+%p1%{32}%+%p2%{32} cud1=\026, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{80}%m%{32}%+%c%p2%{80}%>%{32}%+%c, cuu1=^K, cvvis=\E.1, dch1=\EW, dl1=\ER, home=^^, ht=^I, hts=\E1, il1=\EE, invis=\E[1ZZ, is1=\EC\E.3\EDF\EV1\Eg\E[0ZZ, nel=^_, rev=\E[4ZZ, rmir=\Er, rmso=\E[%gh%{4}%^%Ph%gh%dZZ, rmul=\E[%gh%{8}%^%Ph%gh%dZZ, rs2=\Eo1, sgr=\E[%'0'%?%p1%t%'8'%|%;%?%p2%t%'8'%|%;%?%p3%t%'4'%|%;%?%p4%t%'2'%|%;%?%p7%t%'1'%|%;%cZZ, sgr0=\E[0ZZ, smir=\Eq, smso=\E[8ZZ, smul=\E[8ZZ, tbc=\E3, icl6404-w|kds7372-w|ICL 6404 aka Kokusai Display Systems 7372 132 cols, rs2=\Eo1, use=icl6404, #### Interactive Systems Corp # # ISC used to sell OEMed and customized hardware to support ISC UNIX. # ISC UNIX still exists in 1995, but ISC itself is no more; they got # bought out by Sun. # # From: Wed Sep 16 08:06:44 1981 # (intext: removed obsolete ":ma=^K^P^R^L^L ::bc=^_:", also the # ":le=^_:" later overridden -- esr) intext|Interactive Systems Corporation modified owl 1200, OTbs, am, cols#80, it#8, lines#24, xmc#1, bel=^G, cbt=^Y, clear=\014$<132>, cr=^M, cub1=^H, cud1=^J, cuf1=^^, cup=\017%p1%{32}%+%c%p2%{32}%+%c, cuu1=^\, dch1=\022$<5.5*>, dl1=\021$<5.5*>, ed=\026J$<5.5*>, el=^Kp^R, ht=^I, il1=\020$<5.5*>, ind=^J, ip=$<5.5*>, kbs=^H, kcub1=^_, kcud1=^J, kcuf1=^^, kcuu1=^\, kf0=^VJ\r, kf1=^VA\r, kf2=^VB\r, kf3=^VC\r, kf4=^VD\r, kf5=^VE\r, kf6=^VF\r, kf7=^VG\r, kf8=^VH\r, kf9=^VI\r, khome=^Z, rmir=^V<, rmkx=^V9, rmso=^V#\s, smir=^V;, smkx=\036\:\264\026%%, smso=^V$\,, intext2|intextii|INTERACTIVE modified owl 1251, am, bw, ul, cols#80, lines#24, xmc#0, bel=^G, cbt=\E[Z, clear=\E[H\E[2J, cr=^M, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, flash=\E[;;;;;;;;;2;;u$<200/>\E[;;;;;;;;;1;;u, hpa=\E[%p1%{1}%+%dG, ht=^I, ich1=\E[@, il1=\E[L, ind=\E[S, kbs=^H, kcub1=\ED\r, kcud1=\EB\r, kcuf1=\EC\r, kcuu1=\EA\r, kf0=\E@\r, kf1=\EP\r, kf2=\EQ\r, kf3=\ES\r, kf4=\ET\r, kf5=\EU\r, kf6=\EV\r, kf7=\EW\r, kf8=\EX\r, kf9=\EY\r, khome=\ER\r, lf0=REFRSH, lf1=DEL CH, lf2=TABSET, lf3=GOTO, lf4=+PAGE, lf5=+SRCH, lf6=-PAGE, lf7=-SRCH, lf8=LEFT, lf9=RIGHT, ri=\E[T, rmso=\E[2 D, rmul=\E[2 D, smso=\E[6 D, smul=\E[18 D, #### Kimtron (abm, kt) # # Kimtron seems to be history, but as March 1998 these people are still # offering repair services for Kimtron equipment: # # Com/Pair Monitor Service # 1105 N. Cliff Ave. # Sioux Falls, South Dakota 57103 # # WATS voice: 1-800/398-4946 # POTS fax: +1 605/338-8709 # POTS voice: +1 605/338-9650 # Email: # Internet/Web: # # Kimtron entries include (undocumented) codes for: enter dim mode, # enter bold mode, enter reverse mode, turn off all attributes. # # Kimtron ABM 85 added by Dual Systems # (abm85: removed duplicated ":kd=^J:" -- esr) abm85|Kimtron ABM 85, OTbs, am, bw, msgr, cols#80, it#8, lines#24, xmc#1, cbt=\EI, clear=\E*, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\Ey, el=\Et, ht=^I, if=/usr/share/tabset/stdcrt, il1=\EE, is2=\EC\EX\Eg\En\E%\Er\E(\Ek\Em\Eq, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, rmir=\Er, rmso=\Ek, rmul=\Em, smir=\EQ, smso=\Ej, smul=\El, # Kimtron ABM 85H added by Dual Systems. # Some notes about the abm85h entries: # 1) there are several firmware revs of 85H in the world. Use abm85h-old for # firmware revs prior to SP51 # 2) Make sure to use abm85h entry if the terminal is in 85h mode and the # abm85e entry if it is in tvi920 emulation mode. They are incompatible # in some places and NOT software settable i.e., can't fix it) # 3) In 85h mode, the arrow keys and special functions transmit when # the terminal is in dup-edit, and work only locally in local-edit. # Vi won't swallow `del char' for instance, but turns on # dup-edit anyway so that the arrow keys will work right. If the # arrow keys don't work the way you like, change , , and # . Note that 920E mode does not have software commands to toggle # between dup and local edit, so you get whatever was set last on the # terminal. # 4) attribute is nice, but seems too slow to work correctly # (\Eb\Ed) # 5) Make sure `hidden' attributes are selected. If `embedded' attributes # are selected, the entry should be removed. # 6) auto new-line should be on (selectable from setup mode only) # # From: Erik Fair Sun Oct 27 07:21:05 1985 abm85h|Kimtron ABM 85H native mode, hs, xmc@, bel=^G, cnorm=\E.4, cvvis=\E.2, dim=\E), dsl=\Ee, flash@, fsl=^M, invis@, is2=\EC\EN\EX\024\016\EA\Ea\E%\E9\Ee\Er\En\E"\E}\E'\E(\Ef\r\EG0\Ed\E.4\El, kcud1=^V, sgr0=\E(\EG0, smir=\EZ, tsl=\Eg\Ef, use=adm+sgr, use=abm85, abm85e|Kimtron ABM 85H in 920E mode, xmc@, bel=^G, dim=\E), flash@, is2=\EC\EX\EA\E%\E9\Ee\Er\En\E"\E}\E'\E(\Ef\r\Ek\Eq\Em, rev=\Ej, sgr0=\E(\Ek, smir=\EZ, use=abm85, abm85h-old|oabm85h|o85h|Kimtron ABM 85H with old firmware rev., xmc@, bel=^G, dim=\E), is2=\E}\EC\EX\Ee\En\E%\Er\E(\Ek\Em\Eq\Ed\ET\EC\E9\EF, rev=\Ej, sgr0=\E(\Ek, smir=\EZ, use=abm85, # From: # (kt7: removed obsolete :ma=^V^J^L :" -- esr) kt7|kimtron model kt-7, OTbs, am, cols#80, it#8, lines#24, cbt=\EI, clear=^Z, cub1=^H, cud1=^V, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, fsl=\Eg, home=^^, ht=^I, ich1=\EQ, if=/usr/share/tabset/stdcrt, il1=\EE, invis@, is2=\El\E", kbs=^H, kcbt=\EI, kclr=^Z, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, tsl=\Ef, use=adm+sgr, # Renamed TB=^I to :ta:, BE=^G to :bl:, BS=^H to :kb:, N to :kS: (based on the # other kt7 entry and the adjacent key capabilities). Removed EE which is # identical to :mh:. Removed :ES=\EGD: which is some kind of highlight # but we can't figure out what. kt7ix|kimtron model kt-7 or 70 in IX mode, am, bw, cols#80, it#8, lines#25, acsc=jYk?lZm@nEqDt4uCvAwBx3, bel=^G, blink=\EG2, cbt=\EI, civis=\E.0, clear=\E*, cnorm=\E.3, cr=^M, cub1=^H, cud1=^V, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dim=\EG@, dl1=\ER, dsl=\Ef\r, ed=\EY, el=\ET, fsl=^M, home=^^, ht=^I, ich1=\EQ, il1=\EE, ind=^J, is2=\EG0\E s\017\E~, kbs=^H, kcbt=\EI, kclr=\E*, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdl1=\ER, ked=\EY, kel=\ET, kend=\EY, kf0=^AI\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, knp=\EJ, nel=^M^J, pulse=\EK, rmacs=\E%%, rmir=, rmso=\EG0, rmul=\EG0, sgr0=\EG0, smacs=\E$, smir=, smso=\EG4, smul=\EG8, tsl=\Ef, #### Microdata/MDIS # # This was a line of terminals made by McDonnell-Douglas Information Systems. # These entries come direct from MDIS documentation. I have edited them only # to move primary names of the form p[0-9] * to aliases, and to comment out # / in a couple of entries without strings. I have # also removed the change history; the last version indicates this is # version 4.3 by A.Barkus, September 1990 (earliest entry is October 1989). # # McDonnell Information Systems Terminal Family History # ========================================= # # Prism-1, Prism-2 and P99: # Ancient Microdata and CMC terminals, vaguely like Adds Regent 25. # # Prism-4 and Prism-5: # Slightly less ancient range of Microdata terminals. Follow-on from # Prism-2, but with many enhancements. P5 has eight display pages. # # Prism-6: # A special terminal for use with library systems, primarily in Germany. # Limited numbers. Similar functionality to P5 (except attributes?). # # Prism-7, Prism-8 and Prism-9: # More recent range of MDIS terminals, in which P7 and P8 # replace the P4 & P5, with added functionality, and P9 is the flagship. # The P9 has two emulation modes - P8 and ANSI - and includes a # large number of the DEC VT220 control sequences. Both # P8 and P9 support 80c/24ln/8pg and 132cl/24li/4pg formats. # # Prism-12 and Prism-14: # Latest range, functionally very similar to the P9. The P14 has a # black-on-white overscanning screen. # # The terminfo definitions given here are: # # p2 - Prism-2 (or Prism-1 or P99). # # p4 - Prism-4 (and older P7s & P8s). # p5 - Prism-5 (or Prism-6). # # p7 - Prism-7. # p8 - Prism-8 (in national or multinational mode). # p8-w - 132 column version of p8. # p9 - Prism-9 in ANSI mode. # p9-w - 132 column version of p9. # p9-8 - Prism-9 in Prism-8 emulation mode. # p9-8-w - As p9-8, but with 132 columns. # # p12 - Prism-12 in ANSI mode. # p12-w - 132 column version of p12. # p12-m - Prism-12 in MDC emulation mode. # p12-m-w - As p12-m, but with 132 columns. # p14 - Prism-14 in ANSI mode. # p14-w - 132 column version of p14. # p14-m - Prism-14 in MDC emulation mode. # p14-m-w - As p14-m, but with 132 columns. # # p2: Prism-2 # ----------- # # Includes Prism-1 and basic P99 without SP or MP loaded. # The simplest form of Prism-type terminal. # Basic cursor movement and clearing operations only. # No video attributes. # Notes: # Horizontal cursor qualifiers of NUL, XON and XOFF are mapped to the next # value up, followed by backspace. # prism2|MDC Prism-2, am, bw, msgr, cols#80, lines#24, bel=^G, clear=\014$<20>, cr=^M, cub1=^H, cud1=^J, cuf1=^F, cup=\013%p1%{32}%+%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c, cuu1=^Z, ed=\EJ, el=\EK, home=^A, hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c, ind=^J, kbs=^H, khome=^A, vpa=\013%p1%{32}%+%c, # p4: Prism-4 # ----------- # # Includes early versions of P7 & P8. # Basic family definition for most Prisms (except P2 and P9 ANSI). # Notes: # Horizontal cursor qualifiers of NUL, XON and XOFF are mapped to the next # value up, followed by backspace. # Cursor key definitions removed because they interfere with vi and csh keys. # prism4|p4|P4|MDC Prism-4, am, bw, hs, mc5i, msgr, cols#80, lines#24, wsl#72, xmc#1, bel=^G, blink=^CB, civis=^]\344, clear=\014$<20>, cnorm=^]\342, cr=^M, cub1=^H, cud1=^J, cuf1=^F, cup=\013%p1%{32}%+%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c, cuu1=^Z, dim=^CA, dsl=\035\343\035\345, ed=\EJ, el=\EK, fsl=^]\345, home=^A, hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c, ind=^J, invis=^CH, kbs=^H, khome=^A, mc0=\EU, mc4=\ET, mc5=\ER, rev=^CD, rmso=^C\s, rmul=^C\s, sgr=\003%{64}%?%p1%p3%|%t%{4}%+%;%?%p2%t%{16}%+%;%?%p4%t%{2}%+%;%?%p5%t%{1}%+%;%?%p7%t%{8}%+%;%c%?%p9%t\016%e\017%;, sgr0=^C\s, smso=^CD, smul=^CP, tsl=^]\343, vpa=\013%p1%{32}%+%c, # p5: Prism-5 # ----------- # # Same definition as p4. Includes Prism-6 (not tested!). # Does not use any multi-page features. # prism5|p5|P5|MDC Prism-5, use=p4, # p7: Prism-7 # ----------- # # Similar definition to p4. Uses ANSI cursor motion to avoid network problems. # Notes: # Use p4 for very early models of P7. # Rev-index removed; can't send nulls to terminal in 8-bit modes. # prism7|p7|P7|MDC Prism-7, cup=\E[%i%p1%d;%p2%dH, hpa@, vpa@, use=p4, # p8: Prism-8 # ----------- # # Similar definition to p7. Uses ANSI cursor motion to avoid network problems. # Supports national and multinational character sets. # Notes: # Alternate char set operations only work in multinational mode. # Use p4 for very early models of P8. # Rev-index removed; can't send nulls to terminal in 8-bit modes. # (esr: commented out / because there's no ) # prism8|p8|P8|MDC Prism-8, cup=\E[%i%p1%d;%p2%dH, hpa=\E[%i%p1%d`, is2=\E[<12h, vpa=\E[%i%p1%dd, use=p4, # p8-w: Prism-8 in 132 column mode # -------------------------------- # # 'Wide' version of p8. # Notes: # Rev-index removed; can't send nulls to terminal in 8-bit modes. # prism8-w|p8-w|P8-W|MDC Prism-8 in 132 column mode, cols#132, is2=\E[<12h\E[<14h, use=p8, # p9: Prism-9 in ANSI mode # ------------------------- # # The "flagship" model of this generation of terminals. # ANSI X3.64 (ISO 6429) standard sequences, plus many DEC VT220 ones. # Notes: # Tabs only reset by "reset". Otherwise assumes default (8 cols). # Fixes to deal with terminal firmware bugs: # . 'ri' uses insert-line since rev index doesn't always # . 'sgr0' has extra '0' since esc[m fails # . 'fsl' & 'dsl' use illegal char since cr is actioned wrong on line 25 # Not covered in the current definition: # . Labels # . Programming Fn keys # . Graphic characters (defaults correctly to vt100) # . Padding values (sets xon) # (esr: commented out / because there's no ) # prism9|p9|P9|MDC Prism-9 in ANSII mode, am, bw, hs, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, wsl#72, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[<4l, clear=^L, cnorm=\E[<4h, cr=^M, csr=\E[%i%p1%d;%p2%d%%v, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, dsl=\E[%}\024, ech=\E[%p1%dX, ed=\E[J$<10>, el=\E[K, fsl=^T, home=\E[H, hpa=\E[%i%p1%d`, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E[&p\E[<12l\E F, kbs=^H, kclr=^L, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[H, nel=^M^J, prot=\E[32%{, rc=\E[%z, rep=\E[%p2%db%p1%c, rev=\E[7m, ri=\E[L, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs2=\E[&p\E[<12l\E F\E[3g\E[9;17;25;33;41;49;57;65;73 N, sc=\E[%y, sgr=\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p6%t;1%;m%?%p8%t\E[32%%{%;%?%p9%t\016%e\017%;, sgr0=\E[0m\017, smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[%i%p1%d%%}, vpa=\E[%i%p1%dd, use=ansi+pp, # p9-w: Prism-9 in 132 column mode # -------------------------------- # # 'Wide' version of p9. # prism9-w|p9-w|P9-W|MDC Prism-9 in 132 column mode, cols#132, is2=\E[&p\E[<12l\E F\E[<14h, rs2=\E[&p\E[<12l\E F\E[<14h, use=p9, # p9-8: Prism-9 in P8 mode # ------------------------ # # P9 terminal in P8 emulation mode. # Similar to p8 definition. # Insertion and deletion operations possible. # prism9-8|p9-8|P9-8|MDC Prism-9 in P8 mode, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, use=p8, # p9-8-w: Prism-9 in P8 and 132 column modes # ------------------------------------------ # # P9 terminal in P8 emulation mode and 132 column mode. # prism9-8-w|p9-8-w|P9-8-W|MDC Prism-9 in Prism 8 emulation and 132 column mode, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, use=p8-w, # p12: Prism-12 in ANSI mode # --------------------------- # # See p9 definition. # prism12|p12|P12|MDC Prism-12 in ANSI mode, use=p9, # p12-w: Prism-12 in 132 column mode # ---------------------------------- # # 'Wide' version of p12. # prism12-w|p12-w|P12-W|MDC Prism-12 in 132 column mode, use=p9-w, # p12-m: Prism-12 in MDC emulation mode # ------------------------------------- # # P12 terminal in MDC emulation mode. # Similar to p8 definition. # Insertion and deletion operations possible. # prism12-m|p12-m|P12-M|MDC Prism-12 in MDC emulation mode, use=p9-8, # p12-m-w: Prism-12 in MDC emulation and 132 column modes # ------------------------------------------------------- # # P12 terminal in MDC emulation mode and 132 column mode. # prism12-m-w|p12-m-w|P12-M-W|MDC Prism-12 in MDC emulation and 132 column mode, use=p9-8-w, # p14: Prism-14 in ANSII mode # --------------------------- # # See p9 definition. # prism14|p14|P14|MDC Prism-14 in ANSII mode, use=p9, # p14-w: Prism-14 in 132 column mode # ---------------------------------- # # 'Wide' version of p14. # prism14-w|p14-w|P14-W|MDC Prism-14 in 132 column mode, use=p9-w, # p14-m: Prism-14 in MDC emulation mode # ------------------------------------- # # P14 terminal in MDC emulation mode. # Similar to p8 definition. # Insertion and deletion operations possible. # prism14-m|p14-m|P14-M|MDC Prism-14 in MDC emulation mode, use=p9-8, # p14-m-w: Prism-14 in MDC emulation and 132 column modes # ------------------------------------------------------- # # P14 terminal in MDC emulation mode and 132 column mode. # prism14-m-w|p14-m-w|P14-M-W|MDC Prism-14 in MDC emulation and 132 column mode, use=p9-8-w, # End of McDonnell Information Systems Prism definitions # These things were popular in the Pick database community at one time # From: George Land 24 Sep 1996 p8gl|prism8gl|McDonnell-Douglas Prism-8 alternate definition, am, bw, hs, mir, cols#80, lines#24, ma#1, wsl#78, xmc#1, bel=^G, blink=^CB, clear=^L, cr=^M, cub1=^U, cud1=^J, cuf1=^F, cup=\E[%i%p1%d;%p2%dH, cuu1=^Z, dch1=\s^H, dim=^CA, dl1=^P, ed=\EJ, el=\EK, home=^A, ind=^J, invis=^CH, kbs=^H, kcub1=^U, kcud1=^J, kcuf1=^F, kcuu1=^Z, kdch1=\s^H, kdl1=^P, ked=\EJ, kel=\EK, kf1=^A@\r, kf10=^AI\r, kf12=^AJ\r, kf13=^AK\r, kf14=^AL\r, kf15=^AM\r, kf16=^AN\r, kf17=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^A, lf1=F1, lf10=F10, lf2=F2, lf3=F3, lf4=F4, lf5=F5, lf6=F6, lf7=F7, lf8=F8, lf9=F9, nel=^J^M, pad=\0, rev=^CD, rmso=^C\s, rmul=^C\s, sgr0=^C\s, smso=^CE, smul=^C0, #### Microterm (act, mime) # # The mime1 entries refer to the Microterm Mime I or Mime II. # The default mime is assumed to be in enhanced act iv mode. # # New "safe" cursor movement (5/87) from . Prevents # freakout with out-of-range args on Sytek multiplexors. No and # since it gets confused and it's too dim anyway. No # since Sytek insists ^S means xoff. # (act4: found ":ic=2^S:ei=:im=:ip=.1*^V:" commented out in 8.3 -- esr) act4|microterm|microterm act iv, OTbs, am, cols#80, lines#24, bel=^G, clear=\014$<12/>, cr=^M, cub1=^H, cud1=^K, cuf1=^X, cup=\024%p1%{24}%+%c%p2%p2%?%{47}%>%t%{48}%+%;%{80}%+%c, cuu1=^Z, dch1=\004$<.1*/>, dl1=\027$<2.3*/>, ed=\037$<2.2*/>, el=\036$<.1*/>, home=^], il1=\001<2.3*/>, ind=^J, kcub1=^H, kcud1=^K, kcuf1=^X, kcuu1=^Z, # The padding on :sr: and :ta: for act5 and mime is a guess and not final. # The act 5 has hardware tabs, but they are in columns 8, 16, 24, 32, 41 (!)... # (microterm5: removed obsolete ":ma==^Z^P^Xl^Kj:" -- esr) act5|microterm5|microterm act v, kcub1=^H, kcud1=^K, kcuf1=^X, kcuu1=^Z, ri=\EH$<3>, uc=^H\EA, use=act4, # Mimes using brightness for standout. Half bright is really dim unless # you turn up the brightness so far that lines show up on the screen. mime-fb|full bright mime1, is2=^S\E, rmso=^S, smso=^Y, use=mime, mime-hb|half bright mime1, is2=^Y\E, rmso=^Y, smso=^S, use=mime, # (mime: removed obsolete ":ma=^X ^K^J^Z^P:"; removed ":do=^K:" that overrode # the more plausible ":do=^J:" -- esr) # uc was at one time disabled to get around a curses bug, be wary of it mime|mime1|mime2|mimei|mimeii|microterm mime1, OTbs, am, cols#80, it#8, lines#24, vt#9, bel=^G, clear=^]^C, cr=^M, cub1=^H, cud1=^J, cuf1=^X, cup=\024%p1%{24}%+%c%p2%p2%?%{32}%>%t%{48}%+%;%{80}%+%c, cuu1=^Z, dl1=\027$<80>, ed=^_, el=^^, home=^], ht=\011$<2>, il1=\001$<80>, ind=^J, is2=^S\E^Q, kcub1=^H, kcud1=^K, kcuf1=^X, kcuu1=^Z, ri=\022$<3>, uc=^U, # These termcaps (for mime2a) put the terminal in low intensity mode # since high intensity mode is so obnoxious. mime2a-s|microterm mime2a (emulating an enhanced soroc iq120), OTbs, am, cols#80, lines#24, bel=^G, clear=\EL, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EI, dch1=\ED, dl1=\027$<20*>, ed=\EJ$<20*>, el=\EK, home=^^, il1=\001$<20*>, ind=^J, ip=$<2>, is2=\E), kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, ri=\EI, rmir=^Z, rmso=\E;, rmul=\E7, smir=\EE, smso=\E\:, smul=\E6, # This is the preferred mode (but ^X can't be used as a kill character) mime2a|mime2a-v|microterm mime2a (emulating an enhanced vt52), OTbs, cols#80, it#8, lines#24, bel=^G, clear=\EL, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=^N, dl1=\027$<20*>, ed=\EQ$<20*>, el=\EP, home=\EH, ht=^I, il1=\001$<20*>, ind=^J, ip=$<2>, is2=^Y, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, ri=\EA, rmir=^Z, rmso=\E9, rmul=\E5, smir=^O, smso=\E8, smul=\E4, # (mime3a: removed obsolete ":ma=^X ^K^J^Z^P:" -- esr) mime3a|mime1 emulating 3a, am@, kcub1=^H, kcud1=^K, kcuf1=^X, kcuu1=^Z, use=adm3a, mime3ax|mime-3ax|mime1 emulating enhanced 3a, it#8, dl1=\027$<80>, ed=^_, el=^X, ht=\011$<3>, il1=\001$<80>, use=mime3a, # Wed Mar 9 18:53:21 1983 # We run our terminals at 2400 baud, so there might be some timing problems at # higher speeds. The major improvements in this model are the terminal now # scrolls down and insert mode works without redrawing the rest of the line # to the right of the cursor. This is done with a bit of a kludge using the # exit graphics mode to get out of insert, but it does not appear to hurt # anything when using vi at least. If you have some users using act4s with # programs that use curses and graphics mode this could be a problem. mime314|mm314|mime 314, am, cols#80, lines#24, clear=^L, cub1=^H, cuf1=^X, cup=\024%p1%c%p2%c, cuu1=^Z, dch1=^D, dl1=^W, ed=^_, el=^^, home=^], ht=^I, il1=^A, kcub1=^H, kcud1=^K, kcuf1=^X, kcuu1=^Z, rmir=^V, smir=^S, # Microterm mime 340 from University of Wisconsin mm340|mime340|mime 340, cols#80, lines#24, clear=\032$<12/>, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\E#$<2.1*/>, dl1=\EV$<49.6/>, ed=\037$<2*/>, el=\EL$<2.1/>, ht=^I, il1=\EU$<46/>, ind=^J, is2=\E\,, kbs=^H, kcub1=^H, kcud1=^J, kcuu1=^K, nel=^M^J, # This came from University of Wisconsin marked "astro termcap for jooss". # (mt4520-rv: removed obsolete ":kn#4:" and incorrect ":ri=\E[C:"; # also added / based on the init string -- esr) mt4520-rv|micro-term 4520 reverse video, am, hs, msgr, xenl, xon, cols#80, it#8, lines#24, wsl#80, bel=^G, clear=\E[H\E[J, cnorm=\E[0V\E8, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E7\E[0U, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, flash=\E[?5l$<200/>\E[?5h, fsl=\E[?5l\E[?5h, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\ED, is2=\E(B\E[2l\E>\E[20l\E[?3l\E[?5h\E[?7h\E[1;24r\E[24;1H\E[H\E[J, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, ll=\E[24;1H, nel=\EE, rc=\E8, rf=/usr/share/tabset/vt100, ri=\EM, rmam=\E[?7l, rmso=\E[0m, rmul=\E[24m, rs1=\E(B\E[2l\E>\E[20l\E[?3l\E[?5h\E[?7h\E[H\E[J, sc=\E7, sgr0=\E[m, smam=\E[?7h, smso=\E[7m, smul=\E[4m, tbc=\E[g, tsl=\E[25;1H, # Fri Aug 5 08:11:57 1983 # This entry works for the ergo 4000 with the following setups: # ansi,wraparound,newline disabled, xon/xoff disabled in both # setup a & c. # # WARNING!!! There are multiple versions of ERGO 4000 microcode # Be advised that very early versions DO NOT WORK RIGHT !! # Microterm does have a ROM exchange program- use it or lose big # (ergo400: added / based on the init string -- esr) ergo4000|microterm ergo 4000, da, db, msgr, cols#80, lines#66, bel=^G, clear=\E[H\E[2J$<80>, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[1P$<80>, dl1=\E[1M$<5*>, ed=\E[0J$<15>, el=\E[0K$<13>, ht=^I, il1=\E[1L$<5*>, ind=\ED$<20*>, is2=\E<\E=\E[?1l\E[?4l\E[?5l\E[?7h\E[?8h$<300>, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, ri=\EM$<20*>, rmam=\E[?7l, rmir=\E[4l, rmkx=\E=$<4>, rmso=\E[m$<20>, sgr0=\E[m$<20>, smam=\E[?7m, smir=\E[4h$<6>, smkx=\E=$<4>, smso=\E[7m$<20>, #### NCR # # NCR's terminal group was merged with AT&T's when AT&T bought the company. # For what happened to that group, see the ADDS section. # # There is an NCR4103 terminal that's just a re-badged Wyse-50. # # The following vendor-supplied termcaps were captured from the Boundless # Technologies site, 8 March 1998. I removed all-upper-case names that were # identical, except for case, to lower-case ones. I also uncommented the acsc # capabilities.X # # The Intecolor emulation of the NCR 2900/260C color terminal is basically a # DEC vt200/300 with color capabilities added. ncr260intan|NCR Intecolor emulation of the 2900_260C with an ANSI keyboard, colors#8, pairs#64, op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ncr260vt300an, # The Intecolor emulation of the NCR 2900/260C color terminal is basically a # DEC vt200/300 with color capabilities added. ncr260intwan|NCR Intecolor emulation of the 2900_260C with an ANSI keyboard, colors#8, pairs#64, op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ncr260vt300wan, # The Intecolor emulation of the NCR 2900/260C color terminal is basically a # DEC vt200/300 with color capabilities added. ncr260intpp|NCR Intecolor emulation of the 2900_260C with a PC+ keyboard, colors#8, pairs#64, op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ncr260vt300pp, # The Intecolor emulation of the NCR 2900/260C color terminal is basicly a # DEC vt200/300 with color capabilities added. ncr260intwpp|NCR Intecolor emulation of the 2900_260C with a PC+ keyboard in 132 column mode, colors#8, pairs#64, op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ncr260vt300wpp, # This definition for ViewPoint supports several attributes. This means # that it has magic cookies (extra spaces where the attributes begin). # Some applications do not function well with magic cookies. The System # Administrator's Shell in NCR Unix SVR4 1.03 is one such application. # If supporting various attributes is not vital, 'xmc#1' and the extra # attributes can be removed. # Mapping to ASCII character set ('acsc' capability) can also be # restored if needed. ncr260vppp|NCR 2900_260 viewpoint, am, bw, hs, km, mc5i, mir, msgr, xon, cols#80, lines#24, nlab#32, xmc#1, acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\014$<40>, cnorm=\E`5, cr=\r$<2>, cub1=\010$<2>, cud1=\n$<2>, cuf1=\006$<2>, cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<5>, cuu1=\032$<2>, dch1=\EW$<2>, dim=\EGp, dl1=\El$<2>, dsl=\E`c, ed=\Ek$<2>, el=\EK$<2>, fsl=^M, home=\036$<2>, ht=^I, hts=\E1, il1=\EM$<2>, ind=\n$<2>, invis=\EG1, is2=\Ee6\E~%$<100>\E+\E`\:\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0\EcC1\Ee7$<100>, kDC=\El, kEND=\Ek, kHOM=^A, kPRT=\E7, kRIT=^F, ka1=^A, ka3=\EJ, kbs=^H, kc1=\ET, kc3=\EJ, kcub1=^U, kcud1=^J, kcuf1=^F, kcuu1=^Z, kdch1=\EW, kend=\EK, kf1=^B1\r, kf10=^B\:\r, kf11=^B;\r, kf12=^B<\r, kf13=^B=\r, kf14=^B>\r, kf15=^B?\r, kf16=^B@\r, kf17=^B!\r, kf18=^B"\r, kf19=^B#\r, kf2=^B2\r, kf20=^B$\r, kf21=\002%^M, kf22=^B&\r, kf23=^B'\r, kf24=^B(\r, kf25=^B)\r, kf26=^B*\r, kf27=^B+\r, kf28=^B\,\r, kf29=^B-\r, kf3=^B3\r, kf30=^B.\r, kf31=^B/\r, kf32=^B0\r, kf4=^B4\r, kf5=^B5\r, kf6=^B6\r, kf7=^B7\r, kf8=^B8\r, kf9=^B9\r, khome=^A, kich1=\Eq, knp=\EJ, kpp=\EJ, kprt=\EP, ll=\001$<5>, mc0=\EP$<100>, mc4=^T, mc5=^R, mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<5>, nel=\037$<2>, rev=\EG4, ri=\Ej$<2>, rmacs=\EcB0\EH\003, rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20, rs2=\Ee6\E~%$<100>\E+\E`\:\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0\EcC1\Ee7$<100>, sgr0=\EG0\EH\003, smacs=\EcB1\EH\002, smir=\Eq, smso=\EG4, smul=\EG8, smxon=\Ec21, tsl=\EF, ncr260vpwpp|NCR 2900_260 viewpoint wide mode, cols#132, cup=\Ea%i%p1%dR%p2%dC$<30>, is2=\Ee6\E~%$<100>\E+\E`;\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0\EcC1\Ee7$<100>, rs2=\Ee6\E~%$<100>\E+\E`;\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0\EcC1\Ee7$<100>, use=ncr260vppp, ncr260vt100an|NCR 2900_260 vt100 with ansi kybd, am, hs, mir, msgr, xenl, xon, cols#80, lines#24, nlab#32, acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[2J\E[1;1H$<20>, cnorm=\E[?25h, cr=\r$<1>, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD$<5>, cub1=\E[D$<5>, cud=\E[%p1%dB$<5>, cud1=\E[B$<5>, cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>, cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA$<5>, cuu1=\E[A$<5>, dch=\E[%p1%dP$<5>, dch1=\E[1P$<5>, dl=\E[%p1%dM$<5>, dl1=\E[M$<5>, dsl=\E[0$~\E[1$~, ech=\E[%p1%dX, ed=\E[0J$<5>, el=\E[0K$<3>, el1=\E[1K$<3>, fsl=\E[0$}, home=\E[H$<1>, hpa=\E[%p1%dG$<40>, ht=^I, hts=\EH, ich=\E[%p1%d@$<5>, il=\E[%p1%dL$<5>, il1=\E[L$<5>, ind=\ED$<5>, indn=\E[%p1%dE$<5>, invis=\E[8m, is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krdo=\E[29~, kslt=\E[4~, nel=\EE$<5>, rc=\E8, rev=\E[7m, ri=\EM$<5>, rmacs=^O, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[0m, rmul=\E[0m, rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;$<20>, sgr0=\E[0m\017$<20>, smacs=^N, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[1;7m, smul=\E[4m, tbc=\E[3g, tsl=\E[2$~\E[1$}, vpa=\E[%p1%dd$<40>, use=vt220+keypad, ncr260vt100wan|NCR 2900_260 vt100 wide mode ansi kybd, cols#132, cup=\E[%i%p1%d;%p2%dH$<30>, is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, use=ncr260vt100an, ncr260vt100pp|NCR 2900_260 vt100 with PC+ kybd, is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, ka1=\E[H, ka3=\EOu, kb2=\E[V, kc3=\E[U, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[4~, kend=\E[5~, khome=\E[2~, kich1=\E[1~, knp=\E[6~, kpp=\E[3~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, rmkx=\E>, rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, smkx=\E=, use=ncr260vt100an, ncr260vt100wpp|NCR 2900_260 vt100 wide mode pc+ kybd, cols#132, cup=\E[%i%p1%d;%p2%dH$<30>, is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, use=ncr260vt100pp, ncr260vt200an|NCR 2900_260 vt200 with ansi kybd, am, hs, mir, msgr, xenl, xon, cols#80, lines#24, nlab#32, acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[2J\E[1;1H$<20>, cnorm=\E[?25h, cr=\r$<1>, csr=\E[%i%p1%d;%p2%dr$<5>, cub=\E[%p1%dD$<5>, cub1=\E[D$<5>, cud=\E[%p1%dB$<5>, cud1=\E[B$<5>, cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>, cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA$<5>, cuu1=\E[A$<5>, dch=\E[%p1%dP$<5>, dch1=\E[1P$<5>, dl=\E[%p1%dM$<5>, dl1=\E[M$<5>, dsl=\E[0$~\E[1$~, ech=\E[%p1%dX$<5>, ed=\E[0J, el=\E[0K$<5>, el1=\E[1K$<5>, fsl=\E[0$}, home=\E[H, hpa=\E[%p1%dG$<40>, ht=^I, hts=\EH, ich=\E[%p1%d@$<5>, il=\E[%p1%dL$<5>, il1=\E[L$<5>, ind=\ED$<5>, indn=\E[%p1%dE$<5>, invis=\E[8m, is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf0=\EOy, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf21=\E[31~, kf22=\E[32~, kf23=\E[33~, kf24=\E[34~, kf25=\E[35~, kf26=\E[1~, kf27=\E[2~, kf28=\E[3~, kf29=\E[4~, kf3=\EOR, kf30=\E[5~, kf31=\E[6~, kf32=\E[7~, kf33=\E[8~, kf34=\E[9~, kf35=\E[10~, kf4=\EOS, kf5=\E[M, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krdo=\E[29~, kslt=\E[4~, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM$<5>, rmacs=\017$<20>, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;$<20>, sgr0=\E[0m\017$<20>, smacs=\016$<20>, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[2$~\E[1$}, vpa=\E[%p1%dd$<40>, use=vt220+keypad, ncr260vt200wan|NCR 2900_260 vt200 wide mode ansi kybd, cols#132, cup=\E[%i%p1%d;%p2%dH$<30>, is2=\E[!p\E[?3;7;19;67h\E[?4l\E(B\E)0\017\E[2J\E[1;1H$<200>, rs2=\E[!p\E[?3;7;19;67h\E[?4l\E(B\E)0\017\E[2J\E[1;1H$<200>, use=ncr260vt200an, ncr260vt200pp|NCR 2900_260 vt200 with pc+ kybd, ka1=\E[H, ka3=\EOu, kb2=\E[V, kc3=\E[U, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[4~, kend=\E[1~, khome=\E[H, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, rmkx=\E>, smkx=\E=, use=ncr260vt200an, ncr260vt200wpp|NCR 2900_260 vt200 wide mode pc+ kybd, cols#132, cup=\E[%i%p1%d;%p2%dH$<30>, is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, use=ncr260vt200pp, ncr260vt300an|NCR 2900_260 vt300 with ansi kybd, am, hs, mir, msgr, xenl, xon, cols#80, lines#24, nlab#32, acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[2J\E[1;1H$<20>, cnorm=\E[?25h, cr=\r$<1>, csr=\E[%i%p1%d;%p2%dr$<5>, cub=\E[%p1%dD$<5>, cub1=\E[D$<5>, cud=\E[%p1%dB$<5>, cud1=\E[B$<5>, cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>, cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA$<5>, cuu1=\E[A$<5>, dch=\E[%p1%dP$<5>, dch1=\E[1P$<5>, dl=\E[%p1%dM$<5>, dl1=\E[M$<5>, dsl=\E[0$~\E[1$~, ech=\E[%p1%dX$<5>, ed=\E[0J, el=\E[0K$<5>, el1=\E[1K$<5>, fsl=\E[0$}, home=\E[H, hpa=\E[%p1%dG$<40>, ht=^I, hts=\EH, ich=\E[%p1%d@$<5>, il=\E[%p1%dL$<5>, il1=\E[L$<5>, ind=\ED$<5>, indn=\E[%p1%dE$<5>, invis=\E[8m, is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf0=\EOy, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf20=\E[34~, kf21=\E[31~, kf22=\E[32~, kf23=\E[33~, kf24=\E[34~, kf25=\E[35~, kf26=\E[1~, kf27=\E[2~, kf28=\E[3~, kf29=\E[4~, kf30=\E[5~, kf31=\E[6~, kf32=\E[7~, kf33=\E[8~, kf34=\E[9~, kf35=\E[10~, kf5=\E[M, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krdo=\E[29~, kslt=\E[4~, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM$<5>, rmacs=\017$<20>, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;$<20>, sgr0=\E[0m\017$<20>, smacs=\016$<20>, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[2$~\E[1$}, vpa=\E[%p1%dd$<40>, use=vt220+keypad, ncr260vt300wan|NCR 2900_260 vt300 wide mode ansi kybd, cols#132, cup=\E[%i%p1%d;%p2%dH$<30>, is2=\E[!p\E[?3;7;19;67h\E[?4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H$<200>, rs2=\E[!p\E[?3;7;19;67h\E[?4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H$<200>, use=ncr260vt300an, ncr260vt300pp|NCR 2900_260 vt300 with pc+ kybd, ka1=\E[H, ka3=\EOu, kb2=\E[V, kc3=\E[U, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[4~, kend=\E[1~, khome=\E[H, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, rmkx=\E>, smkx=\E=, use=ncr260vt300an, NCR260VT300WPP|ncr260vt300wpp|NCR 2900_260 vt300 wide mode pc+ kybd, cols#132, cup=\E[%i%p1%d;%p2%dH$<30>, is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H\E>$<200>, use=ncr260vt300pp, # This terminfo file contains color capabilities for the Wyse325 emulation of # the NCR 2900/260C color terminal. Because of the structure of the command # (escape sequence) used to set color attributes, one of the fore/background # colors must be preset to a given value. I have set the background color to # black. The user can change this setup by altering the last section of the # 'setf' definition. The escape sequence to set color attributes is # ESC d y 1 # In addition, the background color can be changed through the desk accessories. # The capablitiy 'op' sets colors to green on black (default combination). # # NOTE: The NCR Unix System Administrator's Shell will not function properly # if the 'pairs' capability is defined. Un-Comment the 'pairs' # capability and recompile if you wish to have it included. # ncr260wy325pp|NCR 2900_260 wyse 325, am, bw, hs, km, mc5i, mir, msgr, xon, colors#16, cols#80, lines#24, ncv#33, nlab#32, acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E*$<10>, cnorm=\E`1, cr=^M, cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<10>, cuu1=\013$<5>, cvvis=\E`5, dch1=\EW$<50>, dl1=\ER$<5>, dsl=\E`c, ed=\Ey$<5>, el=\Et$<5>, fsl=^M, home=\036$<5>, ht=^I, hts=\E1, il1=\EE$<5>, ind=\n$<5>, invis=\EG1, is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, kDC=\ER, kEND=\EY, kHOM=\E{, kNXT=\EK, kPRT=\E7, kPRV=\EJ, kRIT=^L, ka1=^^, kb2=\EJ, kbs=^H, kc1=\ET, kc3=\EK, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kend=\ET, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf17=^A`\r, kf18=^Aa\r, kf19=^Ab\r, kf2=^AA\r, kf20=^Ac\r, kf21=^Ad\r, kf22=^Ae\r, kf23=^Af\r, kf24=^Ag\r, kf25=^Ah\r, kf26=^Ai\r, kf27=^Aj\r, kf28=^Ak\r, kf29=^Al\r, kf3=^AB\r, kf30=^Am\r, kf31=^An\r, kf32=^Ao\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\Eq, knp=\EK, kpp=\EJ, kprt=\EP, mc0=\EP, mc4=^T, mc5=^R, mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<10>, nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH\003\EcB0, rmam=\Ed., rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20, rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, setb=\s, setf=%?%p1%{0}%=%t%{49}%e%p1%{1}%=%t%{50}%e%p1%{2}%=%t%{51}%e%p1%{3}%=%t%{52}%e%p1%{4}%=%t%{53}%e%p1%{5}%=%t%{54}%e%p1%{6}%=%t%{55}%e%p1%{7}%=%t%{64}%e%p1%{8}%=%t%{57}%e%p1%{9}%=%t%{58}%e%p1%{10}%=%t%{59}%e%p1%{11}%=%t%{60}%e%p1%{12}%=%t%{61}%e%p1%{13}%=%t%{62}%e%p1%{14}%=%t%{63}%e%p1%{15}%=%t%{56}%;\Edy%c11$<100>, sgr0=\EG0\EcB0\EcD$<15>, smacs=\EH\002\EcB1, smam=\Ed/, smir=\Eq, smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0, tsl=\EF, ncr260wy325wpp|NCR 2900_260 wyse 325 wide mode, cols#132, cup=\Ea%i%p1%dR%p2%dC$<30>, is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, use=ncr260wy325pp, # This definition for Wyse 350 supports several attributes. This means # that it has magic cookies (extra spaces where the attributes begin). # Some applications do not function well with magic cookies. The System # Administrator's Shell in NCR Unix SVR4 1.03 is one such application. # If supporting various attributes is not vital, 'xmc#1' and the extra # attributes can be removed. # Mapping to ASCII character set ('acsc' capability) can also be # restored if needed. # In addition, color capabilities have been added to this file. The drawback, # however, is that the background color has to be black. The foreground colors # are numbered 0 through 15. # # NOTE: The NCR Unix System Administrator's Shell does not function properly # with the 'pairs' capability defined as below. If you wish to # have it included, Un-comment it and recompile (using 'tic'). # ncr260wy350pp|NCR 2900_260 wyse 350, am, bw, hs, km, mc5i, mir, msgr, xon, colors#16, cols#80, lines#24, ncv#33, nlab#32, pairs#16, xmc#1, acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E+$<20>, cnorm=\E`1, cr=^M, cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<40>, cuu1=\013$<5>, cvvis=\E`5, dch1=\EW$<50>, dim=\EGp, dl1=\ER$<5>, dsl=\E`c, ed=\Ey$<5>, el=\Et$<5>, fsl=^M, home=\036$<10>, ht=^I, hts=\E1, il1=\EE$<5>, ind=\n$<5>, invis=\EG1, is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, kDC=\ER, kEND=\EY, kHOM=\E{, kPRT=\E7, kRIT=^L, ka1=^^, kbs=^H, kc1=\ET, kc3=\EK, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kend=\ET, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf17=^A`\r, kf18=^Aa\r, kf19=^Ab\r, kf2=^AA\r, kf20=^Ac\r, kf21=^Ad\r, kf22=^Ae\r, kf23=^Af\r, kf24=^Ag\r, kf25=^Ah\r, kf26=^Ai\r, kf27=^Aj\r, kf28=^Ak\r, kf29=^Al\r, kf3=^AB\r, kf30=^Am\r, kf31=^An\r, kf32=^Ao\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\Eq, knp=\EK, kpp=\EJ, kprt=\EP, mc0=\EP$<10>, mc4=^T, mc5=^R, mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<20>, nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH\003\EcB0, rmam=\Ed., rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20, rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, setb=\s, setf=%?%p1%{0}%=%t%{49}%e%p1%{1}%=%t%{50}%e%p1%{2}%=%t%{51}%e%p1%{3}%=%t%{52}%e%p1%{4}%=%t%{53}%e%p1%{5}%=%t%{54}%e%p1%{6}%=%t%{55}%e%p1%{7}%=%t%{102}%e%p1%{8}%=%t%{97}%e%p1%{9}%=%t%{98}%e%p1%{10}%=%t%{99}%e%p1%{11}%=%t%{101}%e%p1%{12}%=%t%{106}%e%p1%{13}%=%t%{110}%e%p1%{14}%=%t%{111}%e%p1%{15}%=%t%{56}%;\Em0%c$<100>, sgr0=\EG0\EH\003\EcD, smacs=\EH\002\EcB1, smam=\Ed/, smir=\Eq, smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0, tsl=\EF, ncr260wy350wpp|NCR 2900_260 wyse 350 wide mode, cols#132, cup=\Ea%i%p1%dR%p2%dC$<30>, is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<200>, rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<200>, use=ncr260wy350pp, # This definition for Wyse 50+ supports several attributes. This means # that it has magic cookies (extra spaces where the attributes begin). # Some applications do not function well with magic cookies. The System # Administrator's Shell in NCR Unix SVR4 1.03 is one such application. # If supporting various attributes is not vital, 'xmc#1' and the extra # attributes can be removed. # Mapping to ASCII character set ('acsc' capability) can also be # restored if needed. # (ncr260wy50+pp: originally contained commented-out # , as well as the commented-out one there -- esr) ncr260wy50+pp|NCR 2900_260 wyse 50+, am, bw, hs, km, mc5i, mir, msgr, xon, cols#80, lines#24, nlab#32, xmc#1, acsc=0wa_h[jukslrmqnxqzttuyv]wpxv, bel=^G, blink=\EG2, cbt=\EI$<5>, civis=\E`0, clear=\E+$<20>, cnorm=\E`1, cr=^M, cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<30>, cuu1=\013$<5>, cvvis=\E`5, dch1=\EW$<50>, dim=\EGp, dl1=\ER$<5>, dsl=\E`c, ed=\EY$<5>, el=\ET$<5>, fsl=^M, home=\036$<10>, ht=\011$<5>, hts=\E1$<5>, il1=\EE$<5>, ind=\n$<5>, invis=\EG1, is2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, kDC=\ER, kEND=\EY, kHOM=\E{, kPRT=\E7, kRIT=^L, ka1=^^, kbs=^H, kc1=\ET, kc3=\EK, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kend=\ET, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf17=^A`\r, kf18=^Aa\r, kf19=^Ab\r, kf2=^AA\r, kf20=^Ac\r, kf21=^Ad\r, kf22=^Ae\r, kf23=^Af\r, kf24=^Ag\r, kf25=^Ah\r, kf26=^Ai\r, kf27=^Aj\r, kf28=^Ak\r, kf29=^Al\r, kf3=^AB\r, kf30=^Am\r, kf31=^An\r, kf32=^Ao\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\Eq, knp=\EK, kpp=\EJ, kprt=\EP, mc0=\EP$<10>, mc4=^T, mc5=^R, mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<10>, nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH^C, rmam=\Ed., rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20, rs2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, sgr0=\EG0\EH\003$<15>, smacs=\EH^B, smam=\Ed/, smir=\Eq, smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0$<5>, tsl=\EF, ncr260wy50+wpp|NCR 2900_260 wyse 50+ wide mode, cols#132, cup=\Ea%i%p1%dR%p2%dC$<30>, is2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<200>, rs2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<200>, use=ncr260wy50+pp, ncr260wy60pp|NCR 2900_260 wyse 60, am, bw, hs, km, mc5i, mir, msgr, xon, cols#80, lines#24, nlab#32, acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2, cbt=\EI$<15>, civis=\E`0, clear=\E*$<100>, cnorm=\E`1, cr=^M, cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<10>, cuu1=\013$<5>, cvvis=\E`5, dch1=\EW$<50>, dl1=\ER$<5>, dsl=\E`c, ed=\Ey$<5>, el=\Et$<5>, fsl=^M, home=\036$<25>, ht=\011$<15>, hts=\E1$<15>, il1=\EE$<5>, ind=\n$<5>, invis=\EG1, is2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, kDC=\ER, kEND=\EY, kHOM=\E{, kNXT=\EK, kPRT=\E7, kPRV=\EJ, kRIT=^L, ka1=^^, kb2=\EJ, kbs=^H, kc1=\ET, kc3=\EK, kcbt=\EI$<15>, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kend=\ET, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf17=^A`\r, kf18=^Aa\r, kf19=^Ab\r, kf2=^AA\r, kf20=^Ac\r, kf21=^Ad\r, kf22=^Ae\r, kf23=^Af\r, kf24=^Ag\r, kf25=^Ah\r, kf26=^Ai\r, kf27=^Aj\r, kf28=^Ak\r, kf29=^Al\r, kf3=^AB\r, kf30=^Am\r, kf31=^An\r, kf32=^Ao\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\Eq, knp=\EK, kpp=\EJ, kprt=\EP, mc0=\EP, mc4=^T, mc5=^R, mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<30>, nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH^C, rmam=\Ed., rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20, rs2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, sgr0=\EG0\EcB0\EcD$<15>, smacs=\EH^B, smam=\Ed/, smir=\Eq, smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0$<15>, tsl=\EF, ncr260wy60wpp|NCR 2900_260 wyse 60 wide mode, cols#132, cup=\Ea%i%p1%dR%p2%dC$<30>, is2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, rs2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>, use=ncr260wy60pp, ncr160vppp|NCR 2900_160 viewpoint, use=ncr260vppp, ncr160vpwpp|NCR 2900_160 viewpoint wide mode, use=ncr260vpwpp, ncr160vt100an|NCR 2900_160 vt100 with ansi kybd, use=ncr260vt100an, ncr160vt100pp|NCR 2900_160 vt100 with PC+ kybd, use=ncr260vt100pp, ncr160vt100wan|NCR 2900_160 vt100 wide mode ansi kybd, use=ncr260vt100wan, ncr160vt100wpp|NCR 2900_160 vt100 wide mode pc+ kybd, use=ncr260vt100wpp, ncr160vt200an|NCR 2900_160 vt200 with ansi kybd, use=ncr260vt200an, ncr160vt200pp|NCR 2900_160 vt200 with pc+ kybd, use=ncr260vt200pp, ncr160vt200wan|NCR 2900_160 vt200 wide mode ansi kybd, use=ncr260vt200wan, ncr160vt200wpp|NCR 2900_160 vt200 wide mode pc+ kybd, use=ncr260vt200wpp, ncr160vt300an|NCR 2900_160 vt300 with ansi kybd, use=ncr260vt300an, ncr160vt300pp|NCR 2900_160 vt300 with pc+ kybd, use=ncr260vt300pp, ncr160vt300wan|NCR 2900_160 vt300 wide mode ansi kybd, use=ncr260vt300wan, ncr160vt300wpp|NCR 2900_160 vt300 wide mode pc+ kybd, use=ncr260vt300wpp, ncr160wy50+pp|NCR 2900_160 wyse 50+, use=ncr260wy50+pp, ncr160wy50+wpp|NCR 2900_160 wyse 50+ wide mode, use=ncr260wy50+wpp, ncr160wy60pp|NCR 2900_160 wyse 60, use=ncr260wy60pp, ncr160wy60wpp|NCR 2900_160 wyse 60 wide mode, use=ncr260wy60wpp, ncrvt100an|ncrvt100pp|NCR vt100 for the 2900 terminal, am, hs, mc5i, mir, msgr, xon, cols#80, it#8, lines#24, nlab#32, acsc=``aaffgghhiijjkkllmmnnqqttuuvvwwxxyyzz~~, bel=^G, blink=\E[5m$<30>, bold=\E[1m$<30>, clear=\E[2J\E[1;1H$<300>, cr=^M, csr=\E[%i%p1%d;%p2%dr$<100>, cub=\E[%p1%dD$<30>, cub1=\E[D$<2>, cud=\E[%p1%dB$<30>, cud1=\E[B$<2>, cuf=\E[%p1%dC$<30>, cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<100>, cuu=\E[%p1%dA$<30>, cuu1=\E[A$<2>, dch=\E[%p1%dP$<40>, dch1=\E[1P$<10>, dl=\E[%p1%dM$<70>, dl1=\E[M$<40>, dsl=\E[31l$<25>, ed=\E[0J$<300>, el=\E[0K$<30>, el1=\E[1K$<30>, enacs=\E(B\E)0$<40>, fsl=1$<10>, home=\E[H$<2>$<80>, ht=^I, hts=\EH, il=\E[%p1%dL$<80>, il1=\E[B\E[L$<80>, ind=\ED, is2=\E[12h\E[?10l\E%/0n\E[P\031\E[?3l\E(B\E)0$<200>, kLFT=\E[D, kRIT=\E[C, ka1=\E[H, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kent=^M, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, mc0=\E[i$<100>, nel=\EE, rc=\E8, rev=\E[7m$<30>, ri=\EM$<50>, rmacs=\017$<90>, rmir=\E[4l$<80>, rmso=\E[0m$<30>, rmul=\E[0m$<30>, rs2=\Ec\E[12;31h\E[?3;4;5;10l\E[?6;7;19;25h\E[33;34l\E[0m\E(B\E)0\E%/0n\E[P\031$<200>, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<100>, sgr0=\017\E[0m$<120>, smacs=\016$<90>, smir=\E[4h$<80>, smso=\E[7m$<30>, smul=\E[4m$<30>, tbc=\E[3g$<40>, tsl=\E[>+1$<70>, ncrvt100wan|NCRVT100WPP|ncrvt100wpp|NCR VT100 emulation of the 2900 terminal, cols#132, is2=\E[12h\E[?10l\E%/0n\E[P\031\E[?3h\E(B\E)0$<200>, rs2=\Ec\E[12;31h\E[?4;5;10l\E?3;6;7;19;25h\E[33;34l\E[0m\E(B\E)0\E%/0n\E[P\031$<200>, use=ncrvt100an, # # Vendor-supplied NCR termcaps end here # NCR7900 DIP switches: # # Switch A: # 1-4 - Baud Rate # 5 - Parity (Odd/Even) # 6 - Don't Send or Do Send Spaces # 7 - Parity Enable # 8 - Stop Bits (One/Two) # # Switch B: # 1 - Upper/Lower Shift # 2 - Typewriter Shift # 3 - Half Duplex / Full Duplex # 4 - Light/Dark Background # 5-6 - Carriage Return Without / With Line Feed # 7 - Extended Mode # 8 - Suppress Keyboard Display # # Switch C: # 1 - End of line entry disabled/enabled # 2 - Conversational mode / (Local?) Mode # 3 - Control characters displayed / not displayed # 4 - (2-wire?) / 4-wire communications # 5 - RTS on and off for each character # 6 - (50Hz?) / 60 Hz # 7 - Exit after level zero diagnostics # 8 - RS-232 interface # # Switch D: # 1 - Reverse Channel (yes / no) # 2 - Manual answer (no / yes) # 3-4 - Cursor appearance # 5 - Communication Rate # 6 - Enable / Disable EXT turnoff # 7 - Enable / Disable CR turnoff # 8 - Enable / Disable backspace # # Since each attribute parameter is 0 or 1, we shift each attribute (standout, # reverse, blink, dim, and underline) the appropriate number of bits (by # multiplying the 0 or 1 by a correct factor to shift) so the bias character, # '@' is (effectively) "or"ed with each attribute to generate the proper third # character in the 0 sequence. The string implements the following # equation: # # ((((('@' + P5) | (P4 << 1)) | (P3 << 3)) | (P2 << 4)) | (p1 * 17)) => # ((((('@' + P5) + (P4 << 1)) + (P3 << 3)) + (P2 << 4)) + (p1 * 17)) # # Where: P1 <==> Standout attribute parameter # P2 <==> Underline attribute parameter # P3 <==> Reverse attribute parameter # P4 <==> Blink attribute parameter # P5 <==> Dim attribute parameter # From , init string hacked by SCO. ncr7900i|ncr7900|ncr 7900 model 1, am, bw, ul, cols#80, lines#24, xmc#1, bel=^G, blink=\E0B, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=^F, cup=\E1%p2%c%p1%c, cuu1=^Z, dim=\E0A, ed=\Ek, el=\EK, ind=^J, is2=\E0@\010\E3\E4\E7, kcub1=^U, kcud1=^J, kcuf1=^F, kcuu1=^Z, khome=^A, ll=^A, mc4=^T, mc5=^R, rev=\E0P, rmso=\E0@, rmul=\E0@, sgr=\E0%p5%{64}%+%p4%{2}%*%+%p3%{16}%*%+%p2%{32}%*%+%p1%{17}%*%+%c, sgr0=\E0@, smso=\E0Q, smul=\E0`, ncr7900iv|ncr 7900 model 4, am, bw, eslok, hs, cols#80, lines#24, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cup=\013%p1%{64}%+%c\E\005%p2%02d, dl1=\E^O, dsl=\Ey1, fsl=\Ek\Ey5, home=\013@\E^E00, il1=\E^N, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\ES, kf2=\ET, kf3=\EU, kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, khome=\EH, lf6=blue, lf7=red, lf8=white, nel=^M^J, tsl=\Ej\Ex5\Ex1\EY8%p1%{32}%+%c\Eo, # Warning: This terminal will lock out the keyboard when it receives a CTRL-D. # The user can enter a CTRL-B to get out of this locked state. # In , we want to output the character given by the formula: # ((col / 10) * 16) + (col % 10) where "col" is "p1" ncr7901|ncr 7901 model, am, bw, ul, cols#80, lines#24, bel=^G, blink=\E0B, civis=^W, clear=^L, cnorm=^X, cr=^M, cub1=^H, cud1=^J, cuf1=^F, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, dim=\E0A, ed=\Ek, el=\EK, hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%c, ind=^J, is2=\E4^O, kclr=^L, kcub1=^U, kcud1=^J, kcuf1=^F, kcuu1=^Z, khome=^H, ll=^A, mc4=^T, mc5=^R, rev=\E0P, rmso=^O, rmul=^O, sgr=\E0%p5%{64}%+%p4%{2}%*%+%p3%{16}%*%+%p2%{32}%*%+%p1%{17}%*%+%c\016, sgr0=^O, smso=\E0Q\016, smul=\E0`\016, vpa=\013%p1%{64}%+%c, # Newbury Data Recording Limited (Newbury Data) # # Have been manufacturing and reselling various peripherals for a long time # They don't make terminals anymore, but are still in business (in 2007). # Their e-mail address is at ndsales@newburydata.co.uk # and their post address is: # # Newbury Data Recording Ltd, # Premier Park, Road One, # Winsford, Cheshire, CW7 3PT # # Their technical support is still good, they sent me for free a printed copy # of the 9500 user manual and I got it just 1 week after I first contacted them # (in 2005)! # NDR 9500 # Manufactured in the early/mid eighties, behaves almost the same as a # Televideo 950. Take a 950, change its cabinet for a more 80s-ish one (but # keep the same keyboard layout), add an optional 25-line mode, replace the DIP # switches with a menu and remove the "lock line" feature (ESC ! 1 and ESC ! # 2), here is the NDR 9500. Even the line-lock, albeit disabled, is # recognized: if you type in "ESC !", the next (third) character is not # echoed, showing that the terminal was actually waiting for a parameter! ndr9500|nd9500|Newbury Data 9500, am, bw, hs, mc5i, mir, msgr, ul, xon, cols#80, lines#24, wsl#79, acsc=jDkClBmAnIqKtMuLvOwNxJ, bel=^G, cbt=\EI, civis=\E.0, clear=\E;, cnorm=\E.1, cr=^M, cub1=^H, cud1=^V, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dim=\E), dl1=\ER, dsl=\Eh, ed=\EY, el=\ET, flash=\Eb$<50/>\Ed, fsl=^M, home=^^, ht=^I, hts=\E1, ich1=\EQ, il1=\EE, ind=^J, is2=\Ew\E'\EDF\El\Er\EO, kDC=\Er, kDL=\EO, kEOL=\Et, kIC=\Eq, kcbt=\EI, kclr=^Z, kcub1=^H, kcud1=^V, kcuf1=^L, kcuu1=^K, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kent=^M, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^A`\r, kf13=^Aa\r, kf14=^Ab\r, kf15=^Ac\r, kf16=^Ad\r, kf17=^Ae\r, kf18=^Af\r, kf19=^Ag\r, kf2=^AA\r, kf20=^Ah\r, kf21=^Ai\r, kf22=^Aj\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, kprt=\EP, mc4=\Ea, mc5=\E`, nel=^_, pfloc=\E|%{48}%p1%+%c2%p2\031, pfx=\E|%{48}%p1%+%c1%p2\031, prot=\E), ri=\Ej, rmacs=\E%%, rmir=\Er, rmso=\E(, rmxon=^N, sgr=\EG0\E%%%%\E(%?%p1%p5%p8%|%|%t\E)%;%?%p9%t\E$%;, sgr0=\EG0\E%%\E(, smacs=\E$, smir=\Eq, smso=\E), smxon=^O, tbc=\E3, tsl=\Eg\Ef\011%p1%{32}%+%c, .kbs=^H, ndr9500-nl|NDR 9500 with no status line, hs@, wsl@, dsl@, fsl@, tsl@, use=ndr9500, ndr9500-25|NDR 9500 with 25th line enabled, lines#25, use=ndr9500, ndr9500-25-nl|NDR 9500 with 25 lines and no status line, lines#25, use=ndr9500-nl, ndr9500-mc|NDR 9500 with magic cookies (enables underline inverse video invisible and blink), msgr@, xmc#1, blink=\EG2, invis=\EG1, rev=\EG4, rmso=\EG0, rmul=\EG0, sgr=\E%%\E(%?%p5%p8%|%t\E)%;%?%p9%t\E$%;\EG%{48}%?%p7%t%{1}%+%;%?%p4%t%{2}%+%;%?%p3%p1%|%t%{4}%+%;%?%p2%t%{8}%+%;%c, sgr0=\EG0\E%%\E(, smso=\EG4, smul=\EG8, use=ndr9500, ndr9500-25-mc|NDR 500 with 25 lines and magic cookies, lines#25, use=ndr9500-mc, ndr9500-mc-nl|NDR 9500 with magic cookies and no status line, hs@, wsl@, dsl@, fsl@, tsl@, use=ndr9500-mc, ndr9500-25-mc-nl|NDR 9500 with 25 lines and magic cookies and no status line, lines#25, use=ndr9500-mc-nl, #### Perkin-Elmer (Owl) # # These are official terminfo entries from within Perkin-Elmer. # bantam|pe550|pe6100|perkin elmer 550, OTbs, cols#80, lines#24, bel=^G, clear=\EK$<20>, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EX%p1%{32}%+%c\EY%p2%{32}%+%c, cuu1=\EA, el=\EI$<20>, home=\EH, ind=^J, ll=\EH\EA, fox|pe1100|perkin elmer 1100, OTbs, am, cols#80, lines#24, bel=^G, clear=\EH\EJ$<132>, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EX%p1%{32}%+%c\EY%p2%{32}%+%c, cuu1=\EA, ed=\EJ$<5.5*>, el=\EI, flash=\020\002$<200/>\020\003, home=\EH, hts=\E1, ind=^J, ll=\EH\EA, tbc=\E3, owl|pe1200|perkin elmer 1200, OTbs, am, in, cols#80, lines#24, bel=^G, clear=\EH\EJ$<132>, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EX%p1%{32}%+%c\EY%p2%{32}%+%c, cuu1=\EA, dch1=\EO$<5.5*>, dl1=\EM$<5.5*>, ed=\EJ$<5.5*>, el=\EI$<5.5>, flash=\020\002$<200/>\020\003, home=\EH, hts=\E1, ich1=\EN, il1=\EL$<5.5*>, ind=^J, ip=$<5.5*>, kbs=^H, kf0=\ERJ, kf1=\ERA, kf2=\ERB, kf3=\ERC, kf4=\ERD, kf5=\ERE, kf6=\ERF, kf7=\ERG, kf8=\ERH, kf9=\ERI, ll=\EH\EA, rmso=\E!\0, sgr0=\E!\0, smso=\E!^H, tbc=\E3, pe1251|pe6300|pe6312|perkin elmer 1251, am, cols#80, it#8, lines#24, pb#300, vt#8, xmc#1, bel=^G, clear=\EK$<332>, cr=^M, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EX%p1%{32}%+%c\EY%p2%{32}%+%c, cuu1=\EA, ed=\EJ$<20*>, el=\EI$<10*>, home=\EH, hts=\E1, ind=^J, kf0=\ERA, kf1=\ERB, kf10=\ERK, kf2=\ERC, kf3=\ERD, kf4=\ERE, kf5=\ERF, kf6=\ERG, kf7=\ERH, kf8=\ERI, kf9=\ERJ, tbc=\E3, # (pe7000m: this had # rmul=\E!\0, smul=\E!\040, # which is probably wrong, it collides with kf0 pe7000m|perkin elmer 7000 series monochrome monitor, am, cols#80, lines#24, bel=^G, cbt=\E!Y, clear=\EK, cr=^M, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\ES%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ, el=\EI, home=\EH, ind=^J, is1=\E!\0\EW 7o\Egf\ES7\s, kbs=^H, kcub1=\E!V, kcud1=\E!U, kcuf1=\E!W, kcuu1=\E!T, kf0=\E!\0, kf1=\E!^A, kf10=\E!^J, kf2=\E!^B, kf3=\E!^C, kf4=\E!^D, kf5=\E!^E, kf6=\E!^F, kf7=\E!^G, kf8=\E!^H, kf9=\E!^I, khome=\E!S, ll=\ES7\s, ri=\ER, pe7000c|perkin elmer 7000 series colour monitor, is1=\E!\0\EW 7o\Egf\Eb0\Ec7\ES7\s, rmso=\Eb0, rmul=\E!\0, smso=\Eb2, smul=\E!\s, use=pe7000m, #### Sperry Univac # # Sperry Univac has merged with Burroughs to form Unisys. # # This entry is for the Sperry UTS30 terminal running the TTY # utility under control of CP/M Plus 1R1. The functionality # provided is comparable to the DEC vt100. # (uts30: I added / based on the init string -- esr) uts30|sperry uts30 with cp/m@1R1, am, bw, hs, cols#80, lines#24, wsl#40, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\ER, clear=^L, cnorm=\ES, cr=^M, csr=\EU%p1%{32}%+%c%p2%{32}%+%c, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\EM, dl=\E[%p1%dM, dl1=\EL, ed=\E[J, el=\E[K, fsl=^M, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\EO, il=\E[%p1%dL, il1=\EN, ind=^J, indn=\E[%p1%dB, is2=\E[U 7\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, khome=\E[H, rc=\EX, rev=\E[7m, rf=/usr/share/tabset/vt100, ri=\EI, rin=\E[%p1%dA, rmacs=\Ed, rmam=\E[?7l, rmso=\E[m, rmul=\E[m, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\EW, sgr0=\E[m, smacs=\EF, smam=\E[?7m, smso=\E[7m, smul=\E[4m, tsl=\E], uc=\EPB, #### Tandem # # Tandem builds these things for use with its line of fault-tolerant # transaction-processing computers. They aren't generally available # on the merchant market, and so are fairly uncommon. # tandem6510|adm3a repackaged by Tandem, use=adm3a, # A funny series of terminal that TANDEM uses. The actual model numbers # have a fourth digit after 653 that designates minor variants. These are # natively block-mode and rather ugly, but they have a character mode which # this doubtless(?) exploits. There is a 6520 that is slightly dumber. # (tandem653: had ":sb=\ES:", probably someone's mistake for sf; also, # removed , no such file -- esr) tandem653|t653x|Tandem 653x multipage terminal, OTbs, am, da, db, hs, cols#80, lines#24, wsl#64, xmc#1, clear=\EI, cub1=^H, cud1=^J, cuf1=\EC, cup=\023%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dsl=\Eo\r, ed=\EJ, el=\EK, fsl=^M, home=\EH, ind=\ES, ri=\ET, rmso=\E6\s, rmul=\E6\s, sgr0=\E6\s, smso=\E6$, smul=\E60, tsl=\Eo, #### Tandy/Radio Shack # # Tandy has a line of VDTs distinct from its microcomputers. # dmterm|deskmate terminal, am, bw, cols#80, lines#24, bel=^G, civis=\EG5, clear=\Ej, cnorm=\EG6, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\ES, dl1=\ER, ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\EQ, il1=\EP, ind=\EX, invis@, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=\E1, kf1=\E2, kf2=\E3, kf3=\E4, kf4=\E5, kf5=\E6, kf6=\E7, kf7=\E8, kf8=\E9, kf9=\E0, khome=\EH, lf0=f1, lf1=f2, lf2=f3, lf3=f4, lf4=f5, lf5=f6, lf6=f7, lf7=f8, lf8=f9, lf9=f10, ll=\EE, rmul@, smul@, use=adm+sgr, dt100|dt-100|Tandy DT-100 terminal, xon, cols#80, lines#24, xmc#1, acsc=jjkkllmmnnqqttuuvvwwxx, bel=^G, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%p1%2d;%p2%2dr, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\010\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L, ind=^J, is2=\E[?3l\E)0\E(B, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[?3i, kf10=\E[?5i, kf2=\E[2i, kf3=\E[@, kf4=\E[M, kf5=\E[17~, kf6=\E[18~, kf7=\E[19~, kf8=\E[20~, kf9=\E[21~, khome=\E[H, knp=\E[29~, kpp=\E[28~, lf1=f1, lf2=f2, lf3=f3, lf4=f4, lf5=f5, lf6=f6, lf7=f7, lf8=f8, ri=\EM, rmacs=^O, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smacs=^N, smso=\E[7m, smul=\E[4m, dt100w|dt-100w|Tandy DT-100 terminal (wide mode), cols#132, use=dt100, dt110|Tandy DT-110 emulating ansi, xon, cols#80, lines#24, acsc=jjkkllmmnnqqttuuvvwwxx, bel=^G, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\010\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[0P, dl1=\E[0M, ed=\E[0J, el=\E[0K, enacs=\E(B\E)0, home=\E[H, ht=^I, ich1=\E[0@, il1=\E[0L, ind=^J, is2=\E[?3l\E)0\E(B, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[K, kf1=\E[1~, kf10=\E[10~, kf2=\E[2~, kf3=\E[3~, kf4=\E[4~, kf5=\E[5~, kf6=\E[6~, kf7=\E[7~, kf8=\E[8~, kf9=\E[9~, khome=\E[G, kich1=\E[@, knp=\E[26~, kpp=\E[25~, lf0=f1, lf1=f2, lf2=f3, lf3=f4, lf4=f5, lf5=f6, lf6=f7, lf7=f8, lf8=f9, lf9=f10, ri=\EM, rmacs=^O, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smacs=^N, smso=\E[7m, smul=\E[4m, pt210|TRS-80 PT-210 printing terminal, hc, os, cols#80, bel=^G, cr=^M, cud1=^J, ind=^J, #### Tektronix (tek) # # Tektronix tubes are graphics terminals. Most of them use modified # oscilloscope technology incorporating a long-persistence green phosphor, # and support vector graphics on a main screen with an attached "dialogue # area" for interactive text. # tek|tek4012|tektronix 4012, OTbs, os, cols#75, lines#35, bel=^G, clear=\E\014$<1000>, cr=^M, cub1=^H, cud1=^J, ff=\014$<1000>, is2=\E^O, # (tek4013: added to suppress tic warnings re / --esr) tek4013|tektronix 4013, acsc=, rmacs=\E^O, smacs=\E^N, use=tek4012, tek4014|tektronix 4014, cols#81, lines#38, is2=\E\017\E9, use=tek4012, # (tek4015: added to suppress tic warnings re / --esr) tek4015|tektronix 4015, acsc=, rmacs=\E^O, smacs=\E^N, use=tek4014, tek4014-sm|tektronix 4014 in small font, cols#121, lines#58, is2=\E\017\E\:, use=tek4014, # (tek4015-sm: added to suppress tic warnings re / --esr) tek4015-sm|tektronix 4015 in small font, acsc=, rmacs=\E^O, smacs=\E^N, use=tek4014-sm, # Tektronix 4023 from Andrew Klossner # # You need to have "stty nl2" in effect. Some versions of tset(1) know # how to set it for you. # # It's got the Magic Cookie problem around stand-out mode. If you can't # live with Magic Cookie, remove the :so: and :se: fields and do without # reverse video. If you like reverse video stand-out mode but don't want # it to flash, change the letter 'H' to 'P' in the :so: field. tek4023|tektronix 4023, OTbs, am, OTdN#4, cols#80, lines#24, vt#4, xmc#1, OTnl=^J, bel=^G, clear=\E\014$<4/>, cr=^M, cub1=^H, cud1=^J, cuf1=^I, cup=\034%p2%{32}%+%c%p1%{32}%+%c, kbs=^H, rmso=^_@, smso=^_P, # It is recommended that you run the 4025 at 4800 baud or less; # various bugs in the terminal appear at 9600. It wedges at the # bottom of memory (try "cat /usr/dict/words"); ^S and ^Q typed # on keyboard don't work. You have to hit BREAK twice to get # one break at any speed - this is a documented feature. # Can't use cursor motion because it's memory relative, and # because it only works in the workspace, not the monitor. # Same for home. Likewise, standout only works in the workspace. # # was commented out since vi and rogue seem to work better # simulating it with lots of spaces! # # and had 145ms of padding, but that slowed down vi's ^U # and didn't seem necessary. # tek4024|tek4025|tek4027|tektronix 4024/4025/4027, OTbs, am, da, db, cols#80, it#8, lines#34, lm#0, bel=^G, clear=\037era\r\n\n, cmdch=^_, cr=^M, cub=\037lef %p1%d\r, cub1=^H, cud=\037dow %p1%d\r, cud1=^F^J, cuf=\037rig %p1%d\r, cuf1=\037rig\r, cuu=\037up %p1%d\r, cuu1=^K, dch1=\037dch\r, dl=\037dli %p1%d\r\006, dl1=\037dli\r\006, ed=\037dli 50\r, ht=^I, ich1=\037ich\r \010, il=\037up\r\037ili %p1%d\r, il1=\037up\r\037ili\r, ind=^F^J, is2=!com 31\r\n\037sto 9 17 25 33 41 49 57 65 73\r, rmkx=\037lea p2\r\037lea p4\r\037lea p6\r\037lea p8\r\037lea f5\r, smkx=\037lea p4 /h/\r\037lea p8 /k/\r\037lea p6 / /\r\037lea p2 /j/\r\037lea f5 /H/\r, tek4025-17|tek 4025 17 line window, lines#17, use=tek4025, tek4025-17-ws|tek 4025 17 line window in workspace, is2=!com 31\r\n\037sto 9 17 25 33 41 49 57 65 73\r\037wor 17\r\037mon 17\r, rmcup=\037mon h\r, rmso=\037att s\r, smcup=\037wor h\r, smso=\037att e\r, use=tek4025-17, tek4025-ex|tek4027-ex|tek 4025/4027 w/!, is2=\037com 33\r\n!sto 9 17 25 33 41 49 57 65 73\r, rmcup=\037com 33\r, smcup=!com 31\r, use=tek4025, # Tektronix 4025a # From: Doug Gwyn # The following status modes are assumed for normal operation (replace the # initial "!" by whatever the current command character is): # !COM 29 # NOTE: changes command character to GS (^]) # ^]DUP # ^]ECH R # ^]EOL # ^]RSS T # ^]SNO N # ^]STO 9 17 25 33 41 49 57 65 73 # Other modes may be set according to communication requirements. # If the command character is inadvertently changed, termcap can't restore it. # Insert-character cannot be made to work on both top and bottom rows. # Clear-to-end-of-display emulation via !DLI 988 is too grotty to use, alas. # There also seems to be a problem with vertical motion, perhaps involving # delete/insert-line, following a typed carriage return. This terminal sucks. # Delays not specified; use "stty ixon -ixany" to enable DC3/DC1 flow control! # (tek4025a: removed obsolete ":xx:". This may mean the tek4025a entry won't # work any more. -- esr) tek4025a|Tektronix 4025A, OTbs, OTpt, am, bw, da, db, xon, cols#80, it#8, lines#34, bel=^G, cbt=\035bac;, clear=\035era;\n\035rup;, cmdch=^], cr=^M, cub=\035lef %p1%d;, cub1=^H, cud=\035dow %p1%d;, cud1=^J, cuf=\035rig %p1%d;, cuf1=\035rig;, cuu=\035up %p1%d;, cuu1=^K, dch=\035dch %p1%d;, dch1=\035dch;, dl=\035dli %p1%d;, dl1=\035dli;, el=\035dch 80;, hpa=\r\035rig %p1%d;, ht=^I, il1=\013\035ili;, ind=^J, indn=\035dow %p1%d;, rs2=!com 29\035del 0\035rss t\035buf\035buf n\035cle\035dis\035dup\035ech r\035eol\035era g\035for n\035pad 203\035pad 209\035sno n\035sto 9 17 25 33 41 49 57 65 73\035wor 0;, tbc=\035sto;, # From: cbosg!teklabs!davem Wed Sep 16 21:11:41 1981 # Here's the command file that I use to get rogue to work on the 4025. # It should work with any program using the old curses (e.g. it better # not try to scroll, or cursor addressing won't work. Also, you can't # see the cursor.) # (This "learns" the arrow keys for rogue. I have adapted it for termcap - mrh) tek4025-cr|tek 4025 for curses and rogue, OTbs, am, cols#80, it#8, lines#33, clear=\037era;, cub1=^H, cud1=^F^J, cuf1=\037rig;, cup=\037jum%i%p1%d\,%p2%d;, cuu1=^K, ht=^I, ind=^F^J, is2=!com 31\r\n\037sto 9 17 25 33 41 49 57 65 73\r, rmcup=\037wor 0, smcup=\037wor 33h, # next two lines commented out since curses only allows 128 chars, sigh. # :ti=\037lea p1/b/\037lea p2/j/\037lea p3/n/\037lea p4/h/\037lea p5/ /\037lea p6/l/\037lea p7/y/\037lea p8/k/\037lea p9/u/\037lea p./f/\037lea pt/`era w/13\037lea p0/s/\037wor 33h:\ # :te=\037lea p1\037lea p2\037lea p3\037lea p4\037lea pt\037lea p5\037lea p6\037lea p7\037lea p8\037lea p9/la/13\037lea p.\037lea p0\037wor 0: tek4025ex|4025ex|4027ex|tek 4025 w/!, is2=\037com 33\r\n!sto 9\,17\,25\,33\,41\,49\,57\,65\,73\r, rmcup=\037com 33\r, smcup=!com 31\r, use=tek4025, tek4105|tektronix 4105, OTbs, am, mir, msgr, ul, xenl, xt, cols#79, it#8, lines#29, acsc=, bel=^G, blink=\E[=3;<7m, bold=\E[=7;<4m, cbt=\E[Z, clear=\E[2J\E[H, cr=^M, cub1=\E[1D, cud1=\E[1B, cuf1=\E[1C, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[1A, dch1=\E[1P, dim=\E[=1;<6m, dl1=\E[1M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il1=\E[1L, ind=\E[S, invis=\E[=6;<5, is1=\E%!1\E[m, is2=\E%!1\E[?6141\E[m, kbs=^H, kcub1=\E[1D, kcud1=\E[1B, kcuf1=\E[1C, kcuu1=\E[1A, rev=\E[=1;<3m, ri=\E[T, rmacs=\E[m, rmcup=, rmir=\E[4l, rmso=\E[=0;<1m, rmul=\E[=0;<1m, sgr0=\E[=0;<1m, smacs=\E[1m, smcup=\E%!1\E[?6l\E[2J, smir=\E[4h, smso=\E[=2;<3m, smul=\E[=5;<2m, tbc=\E[1g, # (tek4105-30: I added / based on the init string -- esr) tek4105-30|4015 emulating 30 line vt100, am, mir, msgr, xenl, xon, cols#80, it#8, lines#30, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, clear=\E[H\E[J$<50>, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA, cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=^J, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, rc=\E8, rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<2>, sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[1;7m$<2>, smul=\E[4m$<2>, tbc=\E[3g, use=vt100+fnkeys, # Tektronix 4105 from BRL # The following setup modes are assumed for normal operation: # CODE ansi CRLF no DABUFFER 141 # DAENABLE yes DALINES 30 DAMODE replace # DAVISIBILITY yes ECHO no EDITMARGINS 1 30 # FLAGGING input INSERTREPLACE replace LFCR no # ORIGINMODE relative PROMPTMODE no SELECTCHARSET G0 B # SELECTCHARSET G1 0 TABS -2 # Other setup modes may be set for operator convenience or communication # requirements; I recommend # ACURSOR 1 0 AUTOREPEAT yes AUTOWRAP yes # BYPASSCANCEL CURSORKEYMODE no DAINDEX 1 0 0 # EOFSTRING '' EOLSTRING EOMCHARS # GAMODE overstrike GCURSOR 0 100 0 GSPEED 10 1 # IGNOREDEL no KEYEXCHAR
NVDEFINE -53 "" # PROMPTSTRING '' QUEUESIZE 2460 WINDOW 0 0 4095 3132 # XMTDELAY 0 # and factory color maps. After setting these modes, save them with NVSAVE. No # delays are specified; use "stty ixon -ixany" to enable DC3/DC1 flow control! # "IC" cannot be used in combination with "im" & "ei". # "tek4105a" is just a guess: tek4105a|Tektronix 4105, OTbs, OTpt, msgr, xon, OTkn#8, cols#80, it#8, lines#30, vt#3, acsc=, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E%!0\ETD00\E%!1, clear=\E[H\E[J, cnorm=\E%!0\ETD10\E%!1, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, cvvis=\E%!0\ETD70\E%!1, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS, is2=\E%!1, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOA, kf1=\EOB, kf2=\EOC, kf3=\EOD, kf4=\EOP, kf5=\EOQ, kf6=\EOR, kf7=\EOS, lf0=F1, lf1=F2, lf2=F3, lf3=F4, lf4=F5, lf5=F6, lf6=F8, ll=\E[30;H, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmacs=^O, rmcup=\E%!0\ELBH=\E%!1, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs2=\030\E%!0\EKC\E\014\EKR0\EKF0\ENM0\ELBH=\ETF8000010F40\ELI100\ELLA>\ELM0\EKE0\ENF1\EKS0\END0\E%!1\Ec\E[?3;5l\E[?7;8h\E[r\E[m\E>, sc=\E7, sgr0=\E[m, smacs=^N, smcup=\E[?6l, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, # # Tektronix 4106/4107/4109 from BRL # The following setup modes are assumed for normal operation: # CODE ansi COLUMNMODE 80 CRLF no # DABUFFER 141 DAENABLE yes DALINES 32 # DAMODE replace DAVISIBILITY yes ECHO no # EDITMARGINS 1 32 FLAGGING input INSERTREPLACE replace # LFCR no LOCKKEYBOARD no ORIGINMODE relative # PROMPTMODE no SELECTCHARSET G0 B SELECTCHARSET G1 0 # TABS -2 # Other setup modes may be set for operator convenience or communication # requirements; I recommend # ACURSOR 1 0 AUTOREPEAT yes AUTOWRAP yes # BYPASSCANCEL CURSORKEYMODE no DAINDEX 1 0 0 # EOFSTRING '' EOLSTRING EOMCHARS # GAMODE overstrike GCURSOR 0 100 0 GSPEED 9 3 # IGNOREDEL no KEYEXCHAR
NVDEFINE -53 "" # PROMPTSTRING '' QUEUESIZE 2620 WINDOW 0 0 4095 3132 # XMTDELAY 0 # and factory color maps. After setting these modes, save them with NVSAVE. No # delays are specified; use "stty ixon -ixany" to enable DC3/DC1 flow control! # "IC" cannot be used in combination with "im" & "ei". tek4106brl|tek4107brl|tek4109brl|Tektronix 4106 4107 or 4109, msgr, xon, cols#80, it#8, lines#32, vt#3, acsc=, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E%!0\ETD00\E%!1, clear=\E[H\E[J, cnorm=\E%!0\ETD10\E%!1, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, cvvis=\E%!0\ETD70\E%!1, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS, is2=\E%!1, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOA, kf1=\EOB, kf2=\EOC, kf3=\EOD, kf4=\EOP, kf5=\EOQ, kf6=\EOR, kf7=\EOS, lf0=F1, lf1=F2, lf2=F3, lf3=F4, lf4=F5, lf5=F6, lf6=F8, ll=\E[32;H, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmacs=^O, rmcup=\E%!0\ELBH=\E%!1, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\030\E%!0\EKC\E\014\EKR0\EKF0\ENM0\ELBH=\ETF8000010F40\ELI100\ELLB0\ELM0\EKE0\ENF1\EKS0\END0\ERE0\E%!1\Ec\E[?3;5l\E[?7;8h\E[r\E[m\E>, sc=\E7, sgr0=\E[m, smacs=^N, smcup=\E[?6l, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7;42m, smul=\E[4m, tbc=\E[3g, # Tektronix 4107/4109 interpret 4 modes using "\E%!" followed by a code: # 0 selects Tek mode, i.e., \E%!0 # 1 selects ANSI mode # 2 selects ANSI edit-mode # 3 selects VT52 mode # # One odd thing about the description (which has been unchanged since the 90s) # is that the cursor addressing is using VT52 mode, and a few others use the # VT52's non-CSI versions of ANSI, e.g., \EJ. tek4107|tek4109|tektronix terminals 4107 4109, OTbs, am, mir, msgr, ul, xenl, xt, cols#79, it#8, lines#29, bel=^G, blink=\E%!1\E[5m$<2>\E%!0, bold=\E%!1\E[1m$<2>\E%!0, clear=\ELZ, cnorm=\E%!0, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\E%!3, dim=\E%!1\E[<0m$<2>\E%!0, ed=\EJ, el=\EK, ht=^I, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, rev=\E%!1\E[7m$<2>\E%!0, ri=\EI, rmso=\E%!1\E[m$<2>\E%!0, rmul=\E%!1\E[m$<2>\E%!0, sgr=\E%%!1\E[%?%p1%t;7;5%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t<0%;%?%p6%t;1%;m$<2>\E%%!0, sgr0=\E%!1\E[m$<2>\E%!0, smso=\E%!1\E[7;5m$<2>\E%!0, smul=\E%!1\E[4m$<2>\E%!0, # Tektronix 4207 with sysline. In the ancestral termcap file this was 4107-s; # see the note attached to tek4207. tek4207-s|Tektronix 4207 with sysline but no memory, eslok, hs, dsl=\E7\E[?6l\E[2K\E[?6h\E8, fsl=\E[?6h\E8, is1=\E%!1\E[2;32r\E[132D\E[2g\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[J, is2=\E7\E[?6l\E[2K\E[?6h\E8, tsl=\E7\E[?6l\E[2K\E[;%i%df, use=tek4107, # The 4110 series may be a wonderful graphics series, but they make the 4025 # look good for screen editing. In the dialog area, you can't move the cursor # off the bottom line. Out of the dialog area, ^K moves it up, but there # is no way to scroll. # # Note that there is a floppy for free from Tek that makes the # 4112 emulate the vt52 (use the vt52 termcap). There is also # an expected enhancement that will use ANSI standard sequences. # # 4112 in non-dialog area pretending to scroll. It really wraps # but vi is said to work (more or less) in this mode. # # 'vi' works reasonably well with this entry. # otek4112|o4112-nd|otek4113|otek4114|old tektronix 4110 series, am, cols#80, lines#34, bel=^G, clear=\E^L, cr=^M, cub1=^H, cud1=^J, cuu1=^K, ind=^J, rmcup=\EKA1\ELV1, smcup=\EKA0\ELV0\EMG0, # The 4112 with the ANSI compatibility enhancement tek4112|tek4114|tektronix 4110 series, OTbs, am, db, cols#80, lines#34, cbt=\E[Z, clear=\E[2J\E[0;0H, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\EM, dch1=\E[P, dl1=\E[M, ed=\E[0J, el=\E[0K, ich1=\E[@, il1=\E[L, ind=\E7\E[0;0H\E[M\E8, is2=\E3!1, ri=\E7\E[0;0H\E[L\E8, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, tek4112-nd|4112 not in dialog area, OTns, cuu1=^K, use=tek4112, tek4112-5|4112 in 5 line dialog area, lines#5, use=tek4112, # (tek4113: this used to have "", someone's mistake; # removed ", ", which had been commented out in 8.3. # Note, the !0 and !1 sequences in /// were # previously \0410 and \0411 sequences...I don't *think* they were supposed # to be 4-digit octal -- esr) tek4113|tektronix 4113 color graphics with 5 line dialog area, OTbs, am, da, eo, cols#80, lines#5, clear=\ELZ, cub1=^H, cud1=^J, cuf1=\ELM1 \ELM0, flash=\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERB0, is2=\EKA1\ELL5\ELV0\ELV1, uc=\010\ELM1_\ELM0, tek4113-34|tektronix 4113 color graphics with 34 line dialog area, lines#34, is2=\EKA1\ELLB2\ELV0\ELV1, use=tek4113, # :ns: left off to allow vi visual mode. APL font (:as=\E^N:/:ae=\E^O:) not # supported here. :uc: is slow, but looks nice. Suggest setenv MORE -up . # :vb: needs enough delay to let you see the background color being toggled. tek4113-nd|tektronix 4113 color graphics with no dialog area, OTbs, am, eo, cols#80, it#8, lines#34, clear=\E^L, cub1=^H, cud1=^J, cuf1=^I, cuu1=^K, cvvis=\ELZ\EKA0, flash=\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERB0, home=\ELF7l\177 @, ht=^I, is2=\ELZ\EKA0\ELF7l\177 @, ll=\ELF hl @, rmso=\EMT1, smso=\EMT2, uc=\010\EMG1_\EMG0, # This entry is from Tek. Inc. (Brian Biehl) # (tek4115: :bc: renamed to :le:, / added based on init string -- esr) otek4115|Tektronix 4115, OTbs, am, da, db, eo, cols#80, it#8, lines#34, cbt=\E[Z, clear=\E[H\E[2J, cnorm=\E%!0\ELBG8\E%!1\E[34;1H, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, cvvis=\E%!0\ELBB2\E%!1, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, if=/usr/share/tabset/vt100, il1=\E[L, is2=\E%!0\E%\014\ELV0\EKA1\ELBB2\ENU@=\ELLB2\ELM0\ELV1\EKYA?\E%!1\E[<1l\E[?7h\E[?8h\E[34;1H\E[34B\E[m, kbs=^H, ri=\EM, rmam=\E[?7l, rmcup=\E%!0\ELBG8\E%!1\E[34;1H\E[J, rmir=\E[4l, rmkx=\E>, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smcup=\E%!0\ELBB2\E%!1, smir=\E[4h, smkx=\E=, smso=\E[7m, smul=\E[4m, tek4115|newer tektronix 4115 entry with more ANSI capabilities, am, xon, cols#80, lines#34, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%p1%{1}%+%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, rmam=\E[?7l, rmso=\E[m, rmul=\E[m, sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;%;%?%p7%t8;%;m, sgr0=\E[m, smam=\E[?7h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%p1%{1}%+%dd, # The tek4125 emulates a vt100 incorrectly - the scrolling region # command is ignored. The following entry replaces with the needed # , , and ; removes some cursor pad commands that the tek4125 # chokes on; and adds a lot of initialization for the tek dialog area. # Note that this entry uses all 34 lines and sets the cursor color to green. # Steve Jacobson 8/85 # (tek4125: there were two "\!"s in the is that I replaced with "\E!"; # commented out, =\E1 because there's no -- esr) tek4125|tektronix 4125, lines#34, csr@, dl1=\E[1M, il1=\E[1L, is2=\E%\E!0\EQD1\EUX03\EKA\ELBB2\ELCE0\ELI100\ELJ2\ELLB2\ELM0\ELS1\ELX00\ELV1\E%\E!1\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, rc@, sc@, smkx=\E=, use=vt100, # From: # (tek4207: This was the termcap file's entry for the 4107/4207, but SCO # supplied another, less capable 4107 entry. So we'll use that for 4107 and # note that if jcoker wasn't confused you may be able to use this one. # I merged in ,,,, from a BRL entry -- esr) tek4207|Tektronix 4207 graphics terminal with memory, am, bw, mir, msgr, ul, xenl, cols#80, it#8, lines#32, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J$<156/>, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\EM, dch1=\E[P$<4/>, dl1=\E[M$<3/>, ed=\E[J, el=\E[K$<5/>, home=\E[H, ht=^I, ich1=\E[@$<4/>, il1=\E[L$<3/>, ind=\E[S, invis=\E[=6;<5, is2=\E%!0\ELBP0\E%!1\E[H\E[2g\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[J, kcub1=\E[D, kcud1=\ED, kcuf1=\E[C, kcuu1=\EM, khome=\E[H, rev=\E[7m, ri=\E[T, rmcup=\E[?6h\E%!0\ELBP0\E%!1\E[32;1f, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smcup=\E[?6l\E[H\E[J, smso=\E[7m, smul=\E[4m, tbc=\E[1g, # From: Thu Oct 31 12:54:27 1985 # (tek4404: There was a "\!" in that I replaced with "\E!". # Tab had been given as \E2I,that must be the tab-set capability -- esr) tek4404|tektronix 4404, OTbs, cols#80, it#8, lines#32, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[1M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\E[2I, il1=\E[1L, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, rc=\E8, rmcup=\E[1;1H\E[0J\E[?6h\E[?1l, rmir=\E[4l, rmkx=\E[?1h, rmso=\E[27m, rmul=\E[m, sc=\E7, sgr0=\E[m, smcup=\E%\E!1\E[1;32r\E[?6l\E>, smir=\E[4h, smkx=\E[?1l, smso=\E[7m, smul=\E[4m, # Some unknown person wrote: # I added the is string - straight Unix has ESC ; in the login # string which sets a ct8500 into monitor mode (aka 4025 snoopy # mode). The is string here cleans up a few things (but not # everything). ct8500|tektronix ct8500, am, bw, da, db, cols#80, lines#25, bel=^G, cbt=\E^I, clear=\E^E, cr=^M, cub1=^H, cud1=^J, cuf1=\ES, cup=\E|%p1%{32}%+%c%p2%{32}%+%c, cuu1=\ER, dch1=\E^], dl1=\E^M, ed=\E^U, el=\E^T, ht=^I, ich1=\E^\, il1=\E^L, ind=^J, is2=\037\EZ\Ek, ri=\E^A, rmso=\E\s, rmul=\E\s, sgr0=\E\s, smso=\E$, smul=\E!, # Tektronix 4205 terminal. # # am is not defined because the wrap around occurs not when the char. # is placed in the 80'th column, but when we are attempting to type # the 81'st character on the line. (esr: hmm, this is like the vt100 # version of xenl, perhaps am + xenl would work!) # # Bold, dim, and standout are simulated by colors and thus not allowed # with colors. The tektronix color table is mapped into the RGB color # table by setf/setb. All colors are reset to factory specifications by oc. # The cap uses RGB notation to define colors. for arguments 1-3 the # interval (0-1000) is broken into 8 smaller sub-intervals (125). Each sub- # interval then maps into pre-defined value. tek4205|tektronix 4205, ccc, mir, msgr, colors#8, cols#80, it#8, lines#30, ncv#49, pairs#63, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[=7;<4m, cbt=\E[Z, clear=\E[2J\E[H, cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch1=\E[1P, dim=\E[=1;<6m, dl=\E[%p1%dM, dl1=\E[1M, ech=\E%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0, home=\E[H, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[1L, ind=\ED, initc=\E%%!0\ETF4%?%p1%{0}%=%t0%e%p1%{1}%=%t4%e%p1%{2}%=%t3%e%p1%{3}%=%t5%e%p1%{4}%=%t2%e%p1%{5}%=%t6%e%p1%{6}%=%t7%e1%;%?%p2%{125}%<%t0%e%p2%{250}%<%tA2%e%p2%{375}%<%tA?%e%p2%{500}%<%tC8%e%p2%{625}%<%tD4%e%p2%{750}%<%tE1%e%p2%{875}%<%tE\:%eF4%;%?%p3%{125}%<%t0%e%p3%{250}%<%tA2%e%p3%{375}%<%tA?%e%p3%{500}%<%tC8%e%p3%{625}%<%tD4%e%p3%{750}%<%tE1%e%p3%{875}%<%tE\:%eF4%;%?%p4%{125}%<%t0%e%p4%{250}%<%tA2%e%p4%{375}%<%tA?%e%p4%{500}%<%tC8%e%p4%{625}%<%tD4%e%p4%{750}%<%tE1%e%p4%{875}%<%tE\:%eF4%;\E%%!1, invis=\E[=6;<5, is1=\E%!0\ETM1\E%!1\E[m, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\EOA, kf1=\EOB, kf2=\EOC, kf3=\EOD, kf4=\EP, kf5=\EQ, kf6=\ER, kf7=\ES, oc=\E%!0\ETFB000001F4F4F42F40030F404A4C because of a bug in old vi (if stty says you have # a "newline" style terminal (-crmode) vi figures all it needs is nl # to get crlf, even if is not ^M.) # (tty40: removed obsolete ":nl=\EG\EB:", it's just do+cr -- esr) tty40|ds40|ds40-2|dataspeed40|teletype dataspeed 40/2, OTbs, xon, cols#80, lines#24, clear=\EH$<20>\EJ$<80>, cr=\EG, cub1=^H, cud1=\EB, cuf1=\EC, cuu1=\E7, dch1=\EP$<50>, dl1=\EM$<50>, ed=\EJ$<75>, home=\EH$<10>, ht=\E@$<10>, hts=\E1, ich1=\E\^$<50>, il1=\EL$<50>, ind=\ES$<20>, kbs=^], kcub1=^H, mc4=^T, mc5=\022$<2000>, ri=\ET$<10>, rmso=\E4, rs2=\023\ER$<60>, smso=\E3, tbc=\EH\E2$<80>, tty43|model 43 teletype, OTbs, am, hc, os, xon, cols#132, bel=^G, cr=^M, cub1=^H, cud1=^J, ind=^J, kbs=^H, #### Tymshare # # You can add to put this 40-column mode, though I can't # for the life of me think why anyone would want to. scanset|sc410|sc415|Tymshare Scan Set, am, bw, msgr, cols#80, lines#24, acsc=j%k4l, sc=^B, smacs=^N, #### Volker-Craig (vc) # # If you saw a Byte Magazine cover with a terminal on it during the early # 1980s, it was probably one of these. Carl Helmers liked them because # they could crank 19.2 and were cheap (that is, he liked them until he tried # to program one...) # # Missing in vc303a and vc303 descriptions: they scroll 2 lines at a time # every other linefeed. vc303|vc103|vc203|volker-craig 303, OTbs, OTns, am, cols#80, lines#24, bel=^G, clear=\014$<40>, cr=^M, cub1=^H, cud1=^J, cuf1=^I, cuu1=^N, home=\013$<40>, kcub1=^H, kcud1=^J, kcuf1=^I, kcuu1=^N, ll=\017$<1>W, vc303a|vc403a|volker-craig 303a, clear=\030$<40>, cuf1=^U, cuu1=^Z, el=\026$<20>, home=\031$<40>, kcuf1=^U, kcuu1=^Z, ll=^P, use=vc303, # (vc404: removed obsolete ":ma=^Z^P^U :" -- esr) vc404|volker-craig 404, OTbs, am, cols#80, lines#24, bel=^G, clear=\030$<40>, cr=^M, cub1=^H, cud1=^J, cuf1=^U, cup=\020%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, ed=\027$<40>, el=\026$<20>, home=\031$<40>, ind=^J, kcub1=^H, kcud1=^J, kcuf1=^U, kcuu1=^Z, vc404-s|volker-craig 404 w/standout mode, cud1=^J, rmso=^O, smso=^N, use=vc404, # From: # (vc414: merged in cup/dl1/home from an old vc414h-noxon) vc414|vc414h|Volker-Craig 414H in sane escape mode., OTbs, am, cols#80, lines#24, clear=\E\034$<40>, cud1=\E^K, cuf1=^P, cup=\E\021%p2%c%p1%c$<40>, cuu1=\E^L, dch1=\E3, dl1=\E\023$<40>, ed=\E^X, el=\E\017$<10/>, home=\E^R, ich1=\E\:, il1=\E\032$<40>, kcub1=^H, kcud1=\E^K, kcuf1=^P, kcuu1=\E^L, kf0=\EA, kf1=\EB, kf2=\EC, kf3=\ED, kf4=\EE, kf5=\EF, kf6=\EG, kf7=\EH, khome=\E^R, lf0=PF1, lf1=PF2, lf2=PF3, lf3=PF4, lf4=PF5, lf5=PF6, lf6=PF7, lf7=PF8, rmso=\E^_, smso=\E^Y, vc415|volker-craig 415, clear=^L, use=vc404, ######## OBSOLETE PERSONAL-MICRO CONSOLES AND EMULATIONS # #### IBM PC and clones # # The pcplot IBM-PC terminal emulation program is really messed up. It is # supposed to emulate a vt-100, but emulates the wraparound bug incorrectly, # doesn't support scrolling regions, ignores add line commands, and ignores # delete line commands. Consequently, the resulting behavior looks like a # crude adm3a-type terminal. # Steve Jacobson 8/85 pcplot|pc-plot terminal emulation program, xenl@, csr@, dl@, dl1@, il@, il1@, rc@, sc@, use=vt100, # KayPro II from Richard G Turner # I've found that my KayPro II, running MDM730, continues to emulate an # ADM-3A terminal, just like I was running TERM.COM. On our 4.2 UNIX # system the following termcap entry works well: # I have noticed a couple of minor glitches, but nothing I can't work # around. (I added two capabilities from the BRL entry -- esr) kaypro|kaypro2|kaypro II, OTbs, am, cols#80, lines#24, bel=^G, clear=\032$<1/>, cr=^M, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dl1=\ER, ed=^W, el=^X, home=^^, il1=\EE, ind=^J, kcud1=^J, kcuf1=^L, kcuu1=^K, # From IBM, Thu May 5 19:35:27 1983 # (ibmpc: commented out =\200R because we don't know -- esr) ibm-pc|ibm5051|5051|IBM Personal Computer (no ANSI.SYS), OTbs, am, cols#80, lines#24, bel=^G, clear=^L^K, cr=^M^^, cub1=^], cud1=^J, cuf1=^\, cuu1=^^, home=^K, ind=\n$<10>, kcud1=^_, ibmpc|wy60-PC|wyse60-PC|IBM PC/XT running PC/IX, OTbs, am, bw, eo, hs, km, msgr, ul, cols#80, it#8, lines#24, acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263, bel=^G, blink=\E[5m, bold=\E[1m, clear=\Ec, cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%i%p1%dG, ind=\E[S\E[B, indn=\E[%p1%dS\E[%p1%dB, invis=\E[30;40m, kbs=^H, kcbt=^], kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kend=\E[Y, kf1=\240, kf10=\251, kf2=\241, kf3=\242, kf4=\243, kf5=\244, kf6=\245, kf7=\246, kf8=\247, kf9=\250, khome=\E[H, kich1=\E[^H, knp=\E[U, kpp=\E[V, ll=\E[24;1H, nel=^M, rev=\E[7m, ri=\E[T\E[A, rin=\E[%p1%dT\E[%p1%dA, rmso=\E[m, rmul=\E[m, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t30;40%;m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, #### Apple II # # Apple II firmware console first, then various 80-column cards and # terminal emulators. For two cents I'd toss all these in the UFO file # along with the 40-column apple entries. # # From: brsmith@umn-cs.cs.umn.edu (Brian R. Smith) via BRL # 'it#8' tells UNIX that you have tabs every 8 columns. This is a # function of TIC, not the firmware. # The clear key on a IIgs will do something like clear-screen, # depending on what you're in. appleIIgs|appleIIe|appleIIc|Apple 80 column firmware interface, OTbs, am, bw, eo, msgr, cols#80, it#8, lines#24, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=^\, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^], home=^Y, ht=^I, ind=^W, kbs=^H, kclr=^X, kcub1=^H, kcud1=^J, kcuf1=^U, kcuu1=^K, kdch1=\177, nel=^M^W, ri=^V, rmso=^N, smso=^O, # Apple //e with 80-column card, entry from BRL # The modem interface is permitted to discard LF (maybe DC1), otherwise # passing characters to the 80-column firmware via COUT (PR#3 assumed). # Auto-wrap does not work right due to newline scrolling delay, which also # requires that you set "stty cr2". # Note: Cursor addressing is only available via the Pascal V1.1 entry, # not via the BASIC PR#3 hook. All this nonsense can be avoided only by # using a terminal emulation program instead of the built-in firmware. apple2e|Apple //e, bw, msgr, cols#80, lines#24, bel=^G, clear=\014$<100/>, cub1=^H, cud1=^J, cuu1=^_, ed=\013$<4*/>, el=\035$<4/>, home=^Y, ht=^I, ind=^W, is2=^R^N, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^U, kcuu1=^K, nel=\r$<100/>, rev=^O, ri=^V, rmso=^N, rs1=^R^N, sgr0=^N, smso=^O, # mcvax!vu44!vu45!wilcke uses the "ap" entry together with Ascii Express Pro # 4.20, with incoming and outgoing terminals both on 0, emulation On. apple2e-p|Apple //e via Pascal, cup=\036%p2%{32}%+%c%p1%{32}%+%c, kbs=^H, kcub1=^H, kcud1=^J, use=apple2e, # (ASCII Express) MouseTalk "Standard Apple //" emulation from BRL # Enable DC3/DC1 flow control with "stty ixon -ixany". apple-ae|ASCII Express, OTbs, am, bw, msgr, nxon, xon, cols#80, it#8, lines#24, bel=\007$<500/>, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=^U, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^], home=^Y, ind=^W, is2=^R^N, kclr=^X, kcub1=^H, kcud1=^J, kcuf1=^U, kcuu1=^K, rev=^O, ri=^V, rmso=^N, rs1=^R^N, sgr0=^N, smso=^O, appleII|apple ii plus, OTbs, am, cols#80, it#8, lines#24, clear=^L, cnorm=^TC2, cub1=^H, cud1=^J, cuf1=^\, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, cvvis=^TC6, ed=^K, el=^], flash=\024G1$<200/>\024T1, home=\E^Y, ht=^I, is2=\024T1\016, kcud1=^J, kcuf1=^U, rmso=^N, sgr0=^N, smso=^O, # Originally by Gary Ford 21NOV83 # From: Fri Oct 11 21:27:00 1985 apple-80|apple II with smarterm 80 col, OTbs, am, bw, cols#80, lines#24, cbt=^R, clear=\014$<10*/>, cr=\r$<10*/>, cub1=^H, cud1=^J, cuf1=^\, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=\013$<10*/>, el=\035$<10/>, home=^Y, apple-soroc|apple emulating soroc 120, am, cols#80, lines#24, bel=^G, clear=\E*$<300>, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=\EY, el=\ET, home=^^, ind=^J, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, # From Peter Harrison, Computer Graphics Lab, San Francisco # ucbvax!ucsfmis!harrison .....uucp # ucbvax!ucsfmis!harrison@BERKELEY .......ARPA # "These two work. If you don't have the inverse video chip for the # Apple with videx then remove the :so: and :se: fields." # (apple-videx: this used to be called DaleApple -- esr) apple-videx|Apple with videx videoterm 80 column board with inverse video, OTbs, am, xenl, cols#80, it#8, lines#24, clear=\014$<300/>, cub1=^H, cud1=^J, cuf1=^\, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^], home=^Y, ht=^I, kcub1=^H, kcud1=^J, kcuf1=^U, khome=^Y, rmso=^Z2, sgr0=^Z2, smso=^Z3, # My system [for reference] : Apple ][+, 64K, Ultraterm display card, # Apple Cat ][ 212 modem, + more all # controlled by ASCII Express: Pro. # From Dave Shaver apple-uterm-vb|Videx Ultraterm for Apple micros with Visible Bell, OTbs, am, eo, xt, cols#80, lines#24, acsc=, clear=^L, cuf1=^\, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^], flash=^W35^W06, home=^Y, is2=^V4^W06\017\rVisible Bell Installed.\016\r\n, rmso=^N, smso=^O, apple-uterm|Ultraterm for Apple micros, OTbs, am, eo, xt, cols#80, lines#24, acsc=, clear=^L, cuf1=^\, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^], home=^Y, is2=^V4^W06\016, rmso=^N, smso=^O, # from trwrba!bwong (Bradley W. Wong): # # This entry assumes that you are using an apple with the UCSD Pascal # language card. SYSTEM.MISCINFO is assumed to be the same as that # supplied with the standard apple except that screenwidth should be set # using SETUP to 80 columns. Note that the right arrow is not mapped in # this termcap entry. This is because that key, on the Apple, transmits # a ^U and would thus preempt the more useful "up" function of vi. # # HMH 2/23/81 apple80p|80-column apple with Pascal card, am, bw, cols#80, lines#24, clear=^Y^L, cuf1=^\\:, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=^K, el=^], home=^Y, kcub1=^H, # # Apple II+ equipped with Videx 80 column card # # Terminfo from ihnp4!ihu1g!djc1 (Dave Christensen) via BRL; # manually converted by D A Gwyn # # DO NOT use any terminal emulation with this data base, it works directly # with the Videx card. This has been tested with vi 1200 baud and works fine. # # This works great for vi, except I've noticed in pre-R2, ^U will scroll back # 1 screen, while in R2 ^U doesn't. # For inverse alternate character set add: # =^O:=^N: # (apple-v: added it#8 -- esr) apple-videx2|Apple II+ w/ Videx card (similar to Datamedia h1520), am, xenl, cols#80, it#8, lines#24, bel=\007$<100/>, clear=\014$<16*/>, cr=^M, cub1=^H, cud1=^J, cuf1=^\, cup=\036%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, ed=\013$<16*/>, el=^], home=^Y, ht=\011$<8/>, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^\, kcuu1=^_, khome=^Y, rmso=^Z2, smso=^Z3, apple-videx3|vapple|Apple II with 80 col card, OTbs, am, cols#80, lines#24, clear=\Ev, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, el=\Ex, home=\EH, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=\EP, kf1=\EQ, kf2=\ER, kf3=\E\s, kf4=\E!, kf5=\E", kf6=\E#, kf7=\E$, kf8=\E%%, kf9=\E&, khome=\EH, #From: decvax!cbosgd!cbdkc1!mww Mike Warren via BRL aepro|Apple II+ running ASCII Express Pro--vt52, OTbs, cols#80, lines#24, clear=\014$<300/>, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ, el=\EK, home=\EH, # UCSD addition: Yet another termcap from Brian Kantor's Micro Munger Factory apple-vm80|ap-vm80|apple with viewmax-80, OTbs, cols#80, lines#24, clear=\014$<300/>, cuf1=^\\:, cup=\036%p1%{32}%+%c%p2%{32}%+%c$<100/>, cuu1=^_, ed=\013$<300/>, el=^], home=\031$<200/>, #### Apple Lisa & Macintosh # # (lisa: changed to -- esr) lisa|apple lisa console display (black on white), OTbs, am, eo, msgr, cols#88, it#8, lines#32, acsc=jdkclfmenbqattuvvuwsx`, civis=\E[5h, clear=^L, cnorm=\E[5l, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L, is2=\E>\E[m\014, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, rmacs=\E[10m, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smacs=\E[11m, smso=\E[7m, smul=\E[4m, liswb|apple lisa console display (white on black), is2=\E>\E[0;7m\014, rmso=\E[0;7m, rmul=\E[0;7m, smso=\E[m, smul=\E[4m, use=lisa, # lisaterm from ulysses!gamma!epsilon!mb2c!jed (John E. Duncan III) via BRL; # revised by Ferd Brundick # # These entries assume that the 'Auto Wraparound' is enabled. # Xon-Xoff flow control should also be enabled. # # The vt100 uses :rs2: and :rf: rather than :is2:/:tbc:/:hts: because the tab # settings are in non-volatile memory and don't need to be reset upon login. # Also setting the number of columns glitches the screen annoyingly. # You can type "reset" to get them set. # lisaterm|Apple Lisa or Lisa/2 running LisaTerm vt100 emulation, OTbs, OTpt, am, xenl, xon, OTkn#4, cols#80, it#8, lines#24, vt#3, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH, ind=^J, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOP, kf1=\EOQ, kf2=\EOR, kf3=\EOS, lf0=F1, lf1=F2, lf2=F3, lf3=F4, rc=\E8, rev=\E[7m, ri=\EM, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\E>\E[?1l\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r, sc=\E7, sgr0=\E[m, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, # Lisaterm in 132 column ("wide") mode. lisaterm-w|Apple Lisa with Lisaterm in 132 column mode, cols#132, kbs=^H, kcub1=^H, kcud1=^J, use=lisaterm, # Although MacTerminal has insert/delete line, it is commented out here # since it is much faster and cleaner to use the "lock scrolling region" # method of inserting and deleting lines due to the MacTerminal implementation. # Also, the "Insert/delete ch" strings have an extra character appended to them # due to a bug in MacTerminal V1.1. Blink is disabled since it is not # supported by MacTerminal. mac|macintosh|Macintosh with MacTerminal, xenl, OTdN#30, blink@, dch1=\E[P$<7/>, ich1=\E[@$<9/>, ip=$<7/>, use=lisa, # Lisaterm in 132 column ("wide") mode. mac-w|macterminal-w|Apple Macintosh with Macterminal in 132 column mode, cols#132, use=mac, #### Radio Shack/Tandy # # (coco3: This had "ta" used incorrectly as a boolean and bl given as "bl#7". # I read these as mistakes for ":it#8:" and ":bl=\007:" respectively -- esr) # From: <{pbrown,ctl}@ocf.berkeley.edu> 12 Mar 90 coco3|os9LII|Tandy CoCo3 24*80 OS9 Level II, OTbs, am, cols#80, it#8, lines#24, bel=^G, blink=^_", bold=\E\:^A, civis=^E\s, clear=\014$<5*/>, cnorm=^E!, cub1=^H, cud1=^J, cuf1=^F, cup=\002%p2%{32}%+%c%p1%{32}%+%c$<2/>, cuu1=^I, dl1=^_1, ed=^K, el=^D, home=^A, il1=^_0, kcub1=^H, kcud1=^J, kcuf1=^I, kcuu1=^L, rev=^_\s, rmso=^_!, rmul=^_#, sgr0=\037!\E\:\0, smso=^_\s, smul=^_", # (trs2: removed obsolete ":nl=^_:" -- esr) trs2|trsII|trs80II|Radio Shack Model II using P&T CP/M, OTbs, am, msgr, cols#80, it#8, lines#24, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^_, cuf1=^], cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^^, dl1=^K, ed=^B, el=^A, home=^F, ht=^I, il1=^D, ind=^J, kbs=^H, kcub1=^\, kcud1=^_, kcuf1=^], kcuu1=^^, rmso=^O, sgr0=^O, smso=^N, # From: Kevin Braunsdorf # (This had extension capabilities # :BN=\E[?33h:BF=\E[?33l:UC=\E[_ q:BC=\E[\177 q:\ # :CN=\ERC:CF=\ERc:NR=\ERD:NM=\ER@: # I also deleted the unnecessary ":kn#2:", ":sg#0:" -- esr) trs16|trs-80 model 16 console, OTbs, am, cols#80, it#8, lines#24, acsc=jak`l_mbquvewcxs, bel=^G, civis=\ERc, clear=^L, cnorm=\ERC, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EQ, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\EP, il1=\EL, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=^A, kf1=^B, kf2=^D, kf3=^L, kf4=^U, kf5=^P, kf6=^N, kf7=^S, khome=^W, lf0=f1, lf1=f2, lf2=f3, lf3=f4, lf4=f5, lf5=f6, lf6=f7, lf7=f8, mc4=\E]+, mc5=\E]=, rmacs=\ERg, rmso=\ER@, sgr0=\ER@, smacs=\ERG, smso=\ERD, #### Commodore Business Machines # # Formerly located in West Chester, PA; went spectacularly bust in 1994 # after years of shaky engineering and egregious mismanagement. Made one # really nice machine (the Amiga) and boatloads of nasty ones (PET, C-64, # C-128, VIC-20). The C-64 is said to have been the most popular machine # ever (most units sold); they can still be found gathering dust in closets # everywhere. # # From: Kent Polk , 30 May 90 # Added a few more entries, converted caret-type control sequence (^x) entries # to '\0xx' entries since a couple of people mentioned losing '^x' sequences. # Corrections by Ty Sarna , Sat Feb 28 18:55:15 1998 # # :as:, :ae: Support for alternate character sets. # :ve=\E[\040p:vi=\E[\060\040p: cursor visible/invisible. # :xn: vt100 kludginess at column 80/NEWLINE ignore after 80 cols(Concept) # This one appears to fix a problem I always had with a line ending # at 'width+1' (I think) followed by a blank line in vi. The blank # line tended to disappear and reappear depending on how the screen # was refreshed. Note that this is probably needed only if you use # something like a Dnet Fterm with the window sized to some peculiar # dimension larger than 80 columns. # :k0=\E9~: map F10 to k0 - could have F0-9 -> k0-9, but ... F10 was 'k;' # (amiga: removed obsolete :kn#10:, # also added empty to suppress a warning --esr) amiga|Amiga ANSI, OTbs, am, bw, xenl, cols#80, lines#24, acsc=, bel=^G, blink=\E[7;2m, bold=\E[1m, cbt=\E[Z, civis=\E[0 p, clear=\E[H\E[J, cnorm=\E[ p, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, invis=\E[8m, is2=\E[20l, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\E[9~, kf1=\E[0~, kf2=\E[1~, kf3=\E[2~, kf4=\E[3~, kf5=\E[4~, kf6=\E[5~, kf7=\E[6~, kf8=\E[7~, kf9=\E[8~, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmacs=^O, rmso=\E[m, rmul=\E[m, rs1=\Ec, sgr0=\E[m, smacs=^N, smso=\E[7m, smul=\E[4m, # From: Hans Verkuil , 4 Dec 1995 # (amiga: added empty to suppress a warning. # I'm told this entry screws up badly with AS225, the Amiga # TCP/IP package once from Commodore, and now sold by InterWorks.--esr) amiga-h|Hans Verkuil's Amiga ANSI, OTbs, bw, msgr, cols#80, lines#24, acsc=, bel=^G, blink=\2337;2m, bold=\2331m, cbt=\233Z, civis=\2330 p, clear=\233H\233J, cnorm=\233 p, cr=^M, cub=\233%p1%dD, cub1=\233D, cud=\233%p1%dB, cud1=\233B, cuf=\233%p1%dC, cuf1=\233C, cup=\233%i%p1%d;%p2%dH, cuu=\233%p1%dA, cuu1=\233A, dch=\233%p1%dP, dch1=\233P, dim=\2332m, ech=\233%p1%dP, ed=\233J, el=\233K, flash=^G, home=\233H, ht=^I, ich=\233%p1%d@, ich1=\233@, ind=\233S, indn=\233%p1%dS, invis=\2338m, is2=\23320l, kbs=^H, kcub1=\233D, kcud1=\233B, kcuf1=\233C, kcuu1=\233A, kdch1=\177, kf0=\2339~, kf1=\2330~, kf2=\2331~, kf3=\2332~, kf4=\2333~, kf5=\2334~, kf6=\2335~, kf7=\2336~, kf8=\2337~, kf9=\2338~, nel=\233B\r, rev=\2337m, ri=\233T, rin=\233%p1%dT, rmacs=^O, rmcup=\233?7h, rmso=\2330m, rmul=\2330m, rs1=\Ec, sgr0=\2330m, smacs=^N, smcup=\233?7l, smso=\2337m, smul=\2334m, # From: Henning 'Faroul' Peters , 25 Sep 1999 # # Pavel Fedin added # Home Shift+Left # End Shift+Right # PgUp Shift+Up # PgDn Shift+Down amiga-8bit|Amiga ANSI using 8-bit controls, acsc=, dl=\233%p1%dM, dl1=\233M, il=\233%p1%dL, il1=\233L, ind=\204, indn@, kend=\233 @, khome=\233 A, knp=\233S, kpp=\233T, ri=\215, rin@, use=amiga-h, # From: Ruediger Kuhlmann , 18 Jul 2000 # requires use of appropriate preferences settings. amiga-vnc|Amiga using VNC console (black on light gray), am, da, db, msgr, ndscr, btns#1, colors#16, cols#80, lines#24, lm#0, ncv#0, pairs#256, bel=^G, blink=\E[7;2m, bold=\E[1m, civis=\E[0p, clear=\E[H\E[J, cnorm=\E[p\E[>?6l, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[>?6h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[1M, ed=\E[J, el=\E[K, flash=^G, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[1L, ind=\ED, indn=\E[%p1%dS, invis=\E8m, is2=\E[>?2;18l\E[>?26;?6;20;>?15;?7;>?22;>?8h, kbs=^H, kcbt=\233Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kf0=\E[9~, kf1=\E[0~, kf2=\E[1~, kf3=\E[2~, kf4=\E[3~, kf5=\E[4~, kf6=\E[5~, kf7=\E[6~, kf8=\E[7~, kf9=\E[8~, khlp=\E[?~, khome=\E[44~, kll=\E[45~, kmous=\E[M, knp=\E[42~, kpp=\E[41~, nel=\EE, oc=\E[0m, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmcup=\E[?7h\E[r\E[J, rmkx=\E[?1l, rmso=\E[21m, rmul=\E[24m, rs1=\Ec, rs2=\E[>?2;18l\E[>?26;?6;20;>?15;?7;>?22;>?8h, setab=\E[%?%p1%{8}%>%t%'F'%p1%+%d%e4%p1%d%;m, setaf=\E[%?%p1%{8}%>%t%'2'%p1%+%d%e3%p1%d%;m, sgr0=\E[0m\017\E[30;85;>15m, smcup=\E[?7h, smkx=\E[?1h, smso=\E[1m, smul=\E[4m, # MorphOS on Genesi Pegasos # By Pavel Fedin morphos, acsc=, dl=\233%p1%dM, dl1=\233M, il=\233%p1%dL, il1=\233L, ind=\204, indn@, kend=\23345~, kf11=\23320~, kf12=\23321~, khome=\23344~, kich1=\23340~, knp=\23342~, kpp=\23341~, ri=\215, rin@, use=amiga-h, # Commodore B-128 microcomputer from Doug Tyrol # I'm trying to write a termcap for a commodore b-128, and I'm # having a little trouble. I've had to map most of my control characters # to something that unix will accept (my delete-char is a ctrl-t, etc), # and create some functions (like cm), but thats life. # The problem is with the arrow keys - right, and up work fine, but # left deletes the previous character and down I just can't figure out. # Jove knows what I want, but I don't know what it's sending to me (it # isn't thats bound to next-line in jove). # Anybody got any ideas? Here's my termcap. # DAG -- I changed his "^n" entries to "\n"; see if that works. # commodore|b-128|Commodore B-128 micro, am, bw, OTdN#20, cols#80, lines#24, pb#150, OTbc=^H, OTnl=^M, clear=\E\006$<10/>, cr=^M, cud1=^J, cuf1=^F, cup=\E\013%p1%2d\,%p2%2d\,$<20/>, cuu1=^P, dch1=\177$<10*/>, dl1=\Ed$<10*/>, el=\Eq$<10/>, home=\E^E, ht=\011$<5/>, ich1=\E\n$<5/>, il1=\Ei$<10/>, kcub1=^B, kcud1=^J, kcuf1=^F, kcuu1=^P, khome=\E^E, rmir=, smir=, #### North Star # # North Star Advantage from Lt. Fickie via BRL northstar|North Star Advantage, OTbs, cols#80, lines#24, clear=\004$<200/>, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<1/>, ed=\017$<200/>, el=\016$<200/>, home=\034\032$<200/>, #### Osborne # # Thu Jul 7 03:55:16 1983 # # As an aside, be careful; it may sound like an anomaly on the # Osborne, but with the 80-column upgrade, it's too easy to # enter lines >80 columns! # # I've already had several comments... # The Osborne-1 with the 80-col option is capable of being # 52, 80, or 104 characters wide; default to 80 for compatibility # with most systems. # # The tab is destructive on the Ozzie; make sure to 'stty -tabs'. osborne-w|osborne1-w|osborne I in 104-column mode, msgr, ul, xt, cols#104, lines#24, bel=^G, clear=^Z, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, el=\ET, ich1=\EQ, il1=\EE, ind=^J, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, rmso=\E(, rmul=\Em, smso=\E), smul=\El, # Osborne I from ptsfa!rhc (Robert Cohen) via BRL osborne|osborne1|osborne I in 80-column mode, OTbs, am, mir, msgr, ul, xhp, OTdB#4, cols#80, lines#24, clear=^Z, cub1=\010$<4>, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW$<4/>, dl1=\ER, el=\ET, il1=\EE, is2=^Z, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, rmir=, rmso=\E), rmul=\Em, smir=\EQ, smso=\E(, smul=\El, # # Osborne Executive definition from BRL # Similar to tvi920 # Added by David Milligan and Tom Smith (SMU) osexec|Osborne executive, OTbs, am, OTug#1, cols#80, lines#24, xmc#1, OTnl=^J, bel=^G, clear=^Z, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, home=^^, hts=\E1, ich1=\EQ, il1=\EE, is2=\Eq\Ek\Em\EA\Ex0, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kf0=^A@\r, kf1=^AA\r, kf2=^AB\r, kf3=^AC\r, kf4=^AD\r, kf5=^AE\r, kf6=^AF\r, kf7=^AG\r, kf8=^AH\r, kf9=^AI\r, rmir=, rmso=\Ek, rmul=\Em, smir=, smso=\Ej, smul=\El, tbc=\E3, #### Console types for obsolete UNIX clones # # Coherent, Minix, Venix, and several lesser-known kin were OSs for 8088 # machines that tried to emulate the UNIX look'n'feel. Coherent and Venix # were commercial, Minix an educational tool sold in conjunction with a book. # Memory-segmentation limits and a strong tendency to look like V7 long after # it was obsolete made all three pretty lame. Venix croaked early. Coherent # and Minix were ported to 32-bit Intel boxes, only to be run over by a # steamroller named `Linux' (which, to be fair, traces some lineage to Minix). # Coherent's vendor, the Mark Williams Company, went belly-up in 1994. There # are also, I'm told, Minix ports that ran on Amiga and Atari machines and # even as single processes under SunOS and the Macintosh OS. # # See # https://web.archive.org/web/20120703021949/http://www.minix3.org/manpages/html4/console.html minix|minix console (v3), acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, kdch1=\177, kend=\E[Y, kf0=\E[21~, kf1=\E[11~, kf10=\E[21~, kf11=\E[11;2~, kf12=\E[12;2~, kf13=\E[13;2~, kf14=\E[14;2~, kf15=\E[15;2~, kf16=\E[17;2~, kf17=\E[18;2~, kf18=\E[19;2~, kf19=\E[20;2~, kf2=\E[12~, kf20=\E[21;2~, kf21=\E[11;5~, kf22=\E[12;5~, kf23=\E[13;5~, kf24=\E[14;5~, kf25=\E[15;5~, kf26=\E[17;5~, kf27=\E[18;5~, kf28=\E[19;5~, kf29=\E[20;5~, kf3=\E[13~, kf30=\E[21;5~, kf31=\E[11;6~, kf32=\E[12;6~, kf33=\E[13;6~, kf34=\E[14;6~, kf35=\E[15;6~, kf36=\E[17;6~, kf37=\E[18;6~, kf38=\E[19;6~, kf39=\E[20;6~, kf4=\E[14~, kf40=\E[21;6~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kich1=\E[@, knp=\E[U, kpp=\E[V, lf0@, lf1@, lf2@, lf3@, lf4@, lf5@, use=minix-3.0, minix-3.0|minix console (v3.0), use=ecma+color, use=minix-1.7, # See # http://www.minix-vmd.org/pub/Minix-vmd/1.7.0/wwwman/man4/console.4.html # This is the entry provided with minix 1.7.4, with bogus :ri: removed. minix-1.7|minix console (v1.7), am, xenl, cols#80, it#8, lines#25, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[0J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[K, el1=\E[2K, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E[0m, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\E[Y, kf1=\E[V, kf2=\E[U, kf3=\E[T, kf4=\E[S, kf5=\E[G, khome=\E[H, lf0=End, lf1=PgUp, lf2=PgDn, lf3=Num +, lf4=Num -, lf5=Num 5, nel=^M^J, rev=\E[7m, ri=\EM, rmso=\E[0m, rmul=\E[0m, sgr0=\E[0m, smso=\E[7m, smul=\E[4m, # Corrected Jan 14, 1997 by Vincent Broman minix-old|minix-1.5|minix console (v1.5), xon, cols#80, it#8, lines#25, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[0J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[K, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\E[Y, kf1=\E[V, kf2=\E[U, kf3=\E[T, kf4=\E[S, kf5=\E[G, khome=\E[H, nel=^M^J, rev=\E[7m, ri=\EM, rmso=\E[0m, rmul=\E[0m, sgr0=\E[0m, smso=\E[7m, smul=\E[4m, # The linewrap option can be specified by editing /usr/include/minix/config.h # before recompiling the minix 1.5 kernel. minix-old-am|minix console with linewrap, am, use=minix-old, pc-minix|minix console on an Intel box, use=klone+acs, use=minix-3.0, # According to the Coherent 2.3 manual, the PC console is similar # to a z19. The differences seem to be (1) 25 lines, (2) no status # line, (3) standout is broken, (4) ins/del line is broken, (5) # has blinking and bold. pc-coherent|pcz19|coherent|IBM PC console running Coherent, am, mir, cols#80, it#8, lines#25, bel=^G, clear=\EE, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EN, ed=\EJ, el=\EK, home=\EH, ht=^I, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\EH, ri=\EI, rmir=\EO, rmso=\Eq, sgr0=\Eq, smir=\E@, smso=\Ep, # According to the Venix 1.1 manual, the PC console is similar # to a DEC vt52. Differences seem to be (1) arrow keys send # different strings, (2) enhanced standout, (3) added insert/delete line. # Note in particular that it doesn't have automatic margins. # There are other keys (f1-f10, kpp, knp, kcbt, kich1, kdch1) but they # not described here because this derives from an old termcap entry. pc-venix|venix|IBM PC console running Venix, cols#80, it#8, lines#25, bel=^G, clear=\EH\EJ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM, ed=\EJ, el=\EK, ht=^I, il1=\EL, ind=^J, kbs=^H, kcub1=\EK, kcud1=\EP, kcuf1=\EM, kcuu1=\EH, khome=\EG, ri=\EI, #### Miscellaneous microcomputer consoles # # If you know anything more about any of these, please tell me. # # The MAI Basic Four computer was obsolete at the end of the 1980s. # It may be used as a terminal by putting it in "line" mode as seen on # one of the status lines. # Initialization is similar to CIT80. will set ANSI mode for you. # Hardware tabs set by at 8-spacing. Auto line wrap causes glitches so # wrap mode is reset by . Using =\E[S caused errors so I # used \ED instead. # From: bf347@lafn.org (David Lawyer), 28 Jun 1997 mai|basic4|MAI Basic Four in ansi mode, am, da, db, mir, msgr, cols#82, it#8, lines#25, bel=^G, blink=\E[5m, bold=\E[1m, clear=^]^_, cnorm=\E[?7h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=^X, cup=\E[%i%p1%d;%p2%dH, cuu1=^Z, cvvis=\E[?7l, dch1=\E[1P, dl1=\E[M, ed=^_, el=^^, home=^], ht=^I, if=/usr/share/tabset/vt100, il1=\E[L, ind=\ED, is2=\E>\E[?1h\E[?7h\E[?5l\017\E(B\E[m\E[20l\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, nel=^M\ED, rc=\E8, rev=\E[7m, ri=\E[T, rmir=\E[4l, rmso=\E[m, rmul=\E[m, sc=\E7, sgr0=\E[m, smir=\E[4h, smso=\E[7m, smul=\E[4m, # basis from Peter Harrison, Computer Graphics Lab, San Francisco # ucbvax!ucsfmis!harrison ...uucp / ucbvax!ucsfmis!harrison@BERKELEY ...ARPA # # On Sat, 7 Aug 1999, Torsten Jerzembeck wrote: # The Basis 108 was a Apple II clone, manufactured by the "Basis # Mikrocomputer GmbH" in Munster, Germany (the company still exists today, # about 1,5 km from where I live, but doesn't build own computers any # more). A Basis 108 featured a really heavy (cast aluminium?) case, was # equipped with one or two 5.25" disk drives, had a monochrome and colour # video output for a TV set or a dedicated monitor and several slots for # Apple II cards. Basis 108 were quite popular at german schools before # the advent of the IBM PC. They run, for example, the UCSD Pascal # development system (which I used even in 1993 to program the steering # and data recording for our school's experimental solar panel :), Apple DOS # or CP/M. # (basis: removed obsolete ":ma=^K^P^R^L^L :nl=5000*^J:" -- esr) basis|BASIS108 computer with terminal translation table active, clear=\E*$<300/>, cud1=\n$<5000/>, ed=\EY, el=\ET, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, rmso=\E), sgr0=\E), smso=\E(, use=adm3a, # luna's BMC terminal emulator luna|luna68k|LUNA68K Bitmap console, cols#88, lines#46, use=ansi-mini, megatek|pegasus workstation terminal emulator, am, os, cols#83, lines#60, # The Xerox 820 was a Z80 micro with a snazzy XEROX PARC-derived # interface (pre-Macintosh by several years) that went nowhere. xerox820|x820|Xerox 820, am, cols#80, lines#24, bel=^G, clear=\032$<1>, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=^Q, el=^X, home=^^, ind=^J, #### Videotex and teletext # # \E\:1} switch to te'le'informatique mode (ascii terminal/ISO 6429) # \E[?3l 80 columns # \E[?4l scrolling on # \E[12h local echo off # \Ec reset: G0 U.S. charset (to get #,@,{,},...), 80 cols, clear screen # \E)0 G1 DEC set (line graphics) # # From: Igor Tamitegama , 18 Jan 1997 m2-nam|minitel|minitel-2|minitel-2-nam|France Telecom Minitel 2 mode te'le'informatique, OTbs, eslok, hs, xenl, cols#80, it#8, lines#24, wsl#72, xmc#0, acsc=aaffggjjkkllmmnnooqqssttuuvvwwxx, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[<1h, clear=\E[H\E[J, cnorm=\E[<1l, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, flash=^G, fsl=^J, home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=^J, ip=$<7/>, is1=\E\:1}\Ec\E[?4l\E[12h, is2=\Ec\E[12h\E)0, is3=\E[?3l kbs=\010, kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, kf0=\EOp, kf1=\EOq, kf10=\EOp, kf2=\EOr, kf3=\EOs, kf4=\EOt, kf5=\EOu, kf6=\EOv, kf7=\EOw, kf8=\EOx, kf9=\EOy, khome=\E[H, kich1=\E[4h, kil1=\E[4l, knp=\EOn, kpp=\EOR, ll=\E[24;80H, mc0=\E[i, nel=^M^J, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmir=\E[4l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E[?4l\E[12h, rs2=\Ec\E)0, sc=\E7, sgr0=\E[m, smacs=^N, smir=\E[4h, smso=\E[7m, smul=\E[4m, tsl=^_@A, u6=\E[%i%d;%dR, u7=\E[6n, # From: Alexandre Montaron , 18 Jun 1998 # minitel1|minitel 1, am, bw, eslok, hs, hz, msgr, colors#8, cols#40, lines#24, pairs#8, bel=^G, blink=\EH, civis=^T, clear=^L, cnorm=^Q, cr=^M, cub1=^H, cud1=^J, cuf1=^I, cup=\037%p1%'A'%+%c%p2%'A'%+%c, cuu1=^K, el=^X, flash=\037@A\EW \177\022\177\022P\r\030\n, fsl=^J, home=^^, ind=^J, is2=\E;`ZQ\E\:iC\E\:iE\021, nel=^M^J, op=\EG, rep=%p1%c\022%p2%'?'%+%c, rev=\E], ri=^K, rmso=\E\\, setf=\E%?%p1%{1}%=%tD%e%p1%{3}%=%tF%e%p1%{4}%=%tA%e%p1%{6}%=%tC%e%p1%'@'%+%c%;, sgr=%?%p1%t\E]%;%?%p3%t\E]%;%?%p4%t\EH%;, sgr0=\EI\E\\, smso=\E], tsl=\037@%p1%'A'%+%c, u6=\037%c%'A'%-%c%'A'%-, u7=\Ea, .acsc=}#f0g1\,\,+../, .enacs=^Y, .rs2=^L, .u8=\001Br4\004, .u9=\E9{, # is2=Fnct TE, Fnct ER, Fnct CM et pour finir: curseur ON. minitel1b|minitel 1-bistandard (in 40cols mode), mir, cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC, cuu=\E[%p1%dA, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el1=\E[1K, il=\E[%p1%dL, il1=\E[L, is1=\E;iYA\E;jYC, kclr=\E[2J, kctab=^I, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M, khome=\E[H, kich1=\E[4h, kil1=\E[L, rmir=\E[4l, smir=\E[4h, .ich=\E[%p1%d@, .ich1=\E[@, .kel=^X, .rmkx=\E;jYA, .smkx=\E;iYA\E;jYC, .u8=\001Cu<\004, use=minitel1, # rmkx posait des problemes (logout en sortant de vi). minitel1b-80|minitel 1-bistandard (standard teleinformatique), am@, bw@, hz@, colors@, cols#80, it#8, pairs@, blink=\E[5m, bold=\E[1m, civis=\037@A\024\n, clear=\E[H\E[J, cnorm=\037@A\021\n, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H, ht=^I, ind=\ED, is1@, is2@, kbs=\EOl, kcan=\EOQ, kent=\EOM, kf0=\EOp, kf1=\EOq, kf2=\EOr, kf3=\EOs, kf4=\EOt, kf5=\EOu, kf6=\EOv, kf7=\EOw, kf8=\EOx, kf9=\EOy, khlp=\EOm, knp=\EOn, kpp=\EOR, krfr=\EOS, nel=\EE, op@, rc=\E8, rep@, rev=\E[7m, ri=\EM, rmkx@, rmso=\E[27m, rmul=\E[24m, rs2=\E[H\E[J\E[m, sc=\E7, setf@, sgr@, sgr0=\E[m, smkx@, smso=\E[7m, smul=\E[4m, u6@, u7@, .acsc=}#f[, .enacs=^O, .mc0=\E[i, .rmacs=^O, .rs2=\Ec, .sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;%;m, .smacs=^N, use=minitel1b, minitel1b-nb|minitel 1b (40cols) noir & blanc sans couleurs avec bold et dim ..., colors@, pairs@, acsc=`>a9f!j%k4l%t\n\n\n\n\n\n\n\n%;%?%p1%{15}%>%t\n\n\n\n\n\n\n\n%;%?%p1%{4}%&%t\n\n\n\n%;%?%p1%{2}%&%t\n\n%;%?%p1%{1}%&%t\n%;%?%p2%{07}%>%t\011\011\011\011\011\011\011\011%;%?%p2%{15}%>%t\011\011\011\011\011\011\011\011%;%?%p2%{23}%>%t\011\011\011\011\011\011\011\011%;%?%p2%{31}%>%t\011\011\011\011\011\011\011\011%;%?%p2%{4}%&%t\011\011\011\011%;%?%p2%{2}%&%t\011\011%;%?%p2%{1}%&%t\011%;, cuu1=^K, home=^^, nel=^M^J, .el=^X, .ind=^J, .rep=%p1%c\022%p2%'?'%+%c, .ri=^K, # Also: # viewdata-rv works with some applications (e.g. emacs, xemacs) but fails with vim. viewdata-rv|prestel/viewdata terminals with reverse capabilitie (as green), xmc#1, rmso=\EG, smso=\EB, use=viewdata, ######## OBSOLETE VDT TYPES # # These terminals are *long* dead -- these entries are retained for # historical interest only. #### Amtek Business Machines # # (abm80: early versions of this entry apparently had ":se=\E^_:so=\E^Y", # but these caps were commented out in 8.3; also, removed overridden # ":do=^J:" -- esr) abm80|amtek business machines 80, OTbs, am, bw, cols#80, lines#24, cbt=^T, clear=\E^\, cub1=^H, cud1=\E^K, cuf1=^P, cup=\E\021%p2%{32}%+%c%p1%{32}%+%c, cuu1=\E^L, dl1=\E^S, ed=\E^X, el=\E^O, home=\E^R, il1=\E^Z, #### Bell Labs blit terminals # # These were AT&T's official entries. The 5620 FAQ maintained by # David Breneman has this to say: # # Actually, in the beginning was the Jerq, and the Jerq was white with a # green face, and Locanthi and Pike looked upon the Jerq and said the Jerq # was good. But lo, upon the horizon loomed a mighty management-type person # (known now only by the initials VP) who said, the mighty Jerq must stay # alone, and could not go forth into the world. So Locanthi and Pike put the # Jerq to sleep, cloned its parts, and the Blit was brought forth unto the # world. And the Jerq lived the rest of its days in research, but never # strayed from those paths. # # In all seriousness, the Blit was originally known as the Jerq, but when # it started to be shown outside of the halls of the Bell Labs Research # organization, the management powers that be decided that the name could # not remain. So it was renamed to be Blit. This was in late 1981. # # (The AT&T 5620 was the commercialized Blit. Its successors were the 630, # 730, and 730+.) # blit|jerq|blit running teletype rom, am, eo, ul, xon, cols#87, it#8, lines#72, bel=^G, clear=^L, cr=^M, cub1=\ED, cud1=^J, cuf1=\EC, cup=\EY%p2%{32}%+%c%p1%{32}%+%c, cuu1=\EA, dch=\Ee%p1%{32}%+%c, dch1=\Ee!, dl=\EE%p1%{32}%+%c, dl1=\EE!, el=\EK, ht=^I, ich=\Ef%p1%{32}%+%c, ich1=\Ef!, il=\EF%p1%{32}%+%c, il1=\EF!, ind=^J, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\Ex, kf2=\Ey, kf3=\Ez, # (cbblit: here's a BSD termcap that says -- esr) cbblit|fixterm|blit running columbus code, cols#88, ed=\EJ, flash=\E^G, ich1@, mc4=^T, mc5=^R, mc5p=\EP%p1%03d, rmir=\ER, rmso=\EV!, rmul=\EV", smir=\EQ, smso=\EU!, smul=\EU", use=blit, oblit|ojerq|first version of blit rom, am, da, db, eo, mir, ul, xon, cols#88, it#8, lines#72, bel=^G, clear=^L, cr=^M, cub1=\ED, cud1=^J, cuf1=\EC, cup=\EY%p2%{32}%+%c%p1%{32}%+%c, cuu1=\EA, dch1=\EO, dl=\Ee%p1%{32}%+%c, dl1=\EE, ed=\EJ, el=\EK, flash=\E^G, ht=^I, il=\Ef%p1%{32}%+%c, il1=\EF, ind=^J, kbs=^H, rmir=\ER, smir=\EQ, #### Bolt, Beranek & Newman (bbn) # # The BitGraph was a product of the now-defunct BBN Computer Corporation. # The parent company, best known as the architects of the Internet, is # still around. # # Jeff DelPapa writes: # The bitgraph was a large white box that contained a monochrome bitmap # display, and a 68000 to run it. You could download code and run it on # the cpu, it had 128kb (I think) of memory. I used one in the late # 70's, sure beat a vt100. It had one strange feature tho -- it used # the cpu to bitblt pixels to scroll, it took longer than the refresh # rate, and looked like a rubber sheet stretching, then snapping # upwards. It had everything the early mac had, except a floppy drive a # small screen (it had a 17" crisp beauty) and a real OS. They (Bolt # Beranek and Neuman) sold at most a few hundred of them to the real # world. DOD may have bought more... # # Entries for the BitGraph terminals. The problem # with scrolling in vi can only be fixed by getting BBN to put # smarter scroll logic in the terminal or changing vi or padding # scrolls with about 500 ms delay. # # I always thought the problem was related to the terminal # counting newlines in its input buffer before scrolling and # then moving the screen that much. Then vi comes along and # paints lines in on the bottom line of the screen, so you get # this big white gap. bitgraph|bg2.0nv|bg3.10nv|bbn bitgraph 2.0 or later (normal video), flash=\E[?5h$<200/>\E[?5l, is2=\E>\E[?5l\E[?7h, use=bg2.0, bg2.0rv|bg3.10rv|bbn bitgraph 2.0 (reverse video), flash=\E[?5l$<200/>\E[?5h, is2=\E>\E[?5h\E[?7h, use=bg2.0, bg2.0|bg3.10|bbn bitgraph 2.0 or later (no init), OTbs, xenl, cols#85, lines#64, bel=^G, clear=\E[H\E[J$<150>, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=%i\E[%p1%d;%p2%dH, cuu1=\E[A, dl1=\E[M$<2*>, ed=\E[J$<150>, el=\E[K$<2>, ht=^I, il1=\E[L$<2*>, ind=\n$<280>, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4, rc=\E8, rmkx=\E>, rmso=\E[m, sc=\E7, sgr0=\E[m, smkx=\E=, smso=\E[7m, bg1.25rv|bbn bitgraph 1.25 (reverse video), flash=\E[?5l$<200/>\E[?5h, is2=\E>\E[?5h\E[?7h, use=bg1.25, bg1.25nv|bbn bitgraph 1.25 (normal video), flash=\E[?5h$<200/>\E[?5l, is2=\E>\E[?5l\E[?7h, use=bg1.25, # (bg1.25: I added / based on the init string -- esr) bg1.25|bbn bitgraph 1.25, cols#85, lines#64, bel=^G, clear=\E[H\E[J$<150>, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=%i\E[%p1%d;%p2%dH, cuu1=\E[A, dl1=\E[M$<2*>, ed=\E[J$<150>, el=\E[K$<2>, ht=^I, il1=\E[L$<2*>, ind=\n$<280>, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\EP, kf2=\EQ, kf3=\ER, kf4=\ES, lf1=PF1, lf2=PF2, lf3=PF3, lf4=PF4, ll=\E[64;1H, rmam=\E[?7l, rmkx=\E>, rmso=\E[m, sgr0=\E[m, smam=\E[?7h, smkx=\E=, smso=\E[7m, #### Bull (bq, dku, vip) # # (Adapted for terminfo; AIX extension capabilities translated -- esr) #============================================# # BULL QUESTAR 210 `SDP' terminals emulation # #============================================# # # Description written by R.K.Saunders (Bull Transac) # # Modifications written by F. Girard (Bull MTS) # 19-05-87 V02.00.01 # 17-12-87 V02.00.02 # 15-09-89 V02.00.05 # # Typical technical selections F1 (modes SDP/ROLL): # ------------------------------------------------------- # | 01 02 03 04 05 06 07 08 09 10 | # | 1010 0011 1010 0110 0110 0001 0100 0000 0000 0000 | # | | # | 11 12 13 14 15 16 17 18 19 20 | # | 0000 0110 100? 0000 0000 0000 0001 0000 0000 0001 | # | | # | 21 22 23 24 25 26 27 28 29 30 | # | 0011 0000 0001 1000 0000 0000 0000 0000 0000 0000 | # | | # | 31 32 33 34 35 36 37 38 39 40 | # | 1010 0011 0000 0000 0000 0000 0000 0000 0000 0000 | # ------------------------------------------------------- # Typical firmware identification F5 "etat 6": # P287.02.04b (AZERTY) # P297.11.04 (24-pin: 2732) or P798.11.04 (28-pin: 2764) # P298.03.03 (monochrome) or P374.03.02 (colour) # # SM SDP mode (VIP command): ^[[?=h # RIS (erases screen): ^[c # DMI disable keyboard: ^[` # SM double rendition mode: ^[[?>h # RM solicited status mode: ^[[5l # RM character mode: ^[[>l # RM echoplex mode: ^[[12l # RM column tab mode: ^[[18l # RM forbid SS2 keyboard mode: ^[[?h\EPY99\:98\E\\, is2=\E[5;>;12;18;?h\EPY99\:98\E\\, smir=\E[4h, smso=\E[0;7m, smul=\E[0;4m, tbc=\E[3g, tsl=\EPY99\:98\E\\\E[0;98v\E[2;7m, tws2102-sna|dku7102-sna|BULL Questar tws2102 for SNA, dsl=\E[0;98v\E[2J\E[v, fsl=\E[v, is3=\Eb, tsl=\E[0;98v, use=tws-generic, tws2103|xdku|BULL Questar tws2103, ht=^I, use=tws-generic, tws2103-sna|dku7103-sna|BULL Questar tws2103 for SNA, ht=^I, use=tws2102-sna, dku7102-old|BULL Questar 200 DKU7102 (microcode version < 6), clear=\E[2J\E[H, cup@, dl@, dl1@, dsl=\EPY99\:98\E\\\E[0;98v\E[2J\E[H\E[v, el=\E[K\E[m, il@, il1@, tsl=\EPY99\:98\E\\\E[0;98v\E[H\E[2;7m, use=tws-generic, dku7202|BULL Questar 200 DKU7202 (colour/character attributes), blink=\E[0;2;4m, dim=\E[0;5m, ht=^I, is3=\E[?3h\Eb, sgr=\E[0%?%p1%t;2;4;5;7%;%?%p3%t;7%;%?%p2%t;2%;%?%p4%t;2;4%;%?%p5%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;, smso=\E[0;4;5;7m, smul=\E[0;2m, use=tws-generic, #=========================================================# # BULL QUESTAR 303 & 310 `DEC VT 320' terminals emulation # #=========================================================# # # Description written by J. Staerck (BULL SA) # Copyright (c) 1989 BULL SA #--------------------------------------------------------------------------- # This entry is used for terminals with vt320 emulation mode # and following set-up : # 8 bit ISO Latin Character Set (ISO 8859-1), # 7 bit Control Characters, # 80 columns screen. # Hereafter are some DEC vt terminals' commands. (valid on vt200 and 300) # They are used in string capabilities with vt220-320 emulation mode. # In the following DEC definitions, two kinds of terminfo databases are # provided : # 1. the first with Command Sequence Introducer starting with escape # sequence in 7 bits characters ex. ESC [ : 2 chars. in 7-bit mode. # 2. the second with Command Sequence Introducer starting with escape # sequence in 8 bits characters ex. ESC [ : 1 char. 'CSI' =x9B. # Soft Terminal Reset esc [ ! p # RIS (erases screen): esc c # DECKPNM numeric keypad mode: esc > # DECKPAM applic. keypad mode: esc = # DECSTBM Scrolling region: esc [ r # SCS select G0 = US: esc ( B # SCS select G1 = line-graphic: esc ) 0 # Select 7-bit C1 controls: esc sp F # Select 8-bit C1 controls: esc sp G # Select cursor home: esc [ H # Select erase screen: esc [ J # SM KAM lock keyboard: esc [ 2 h # RM KAM unlock keyboard: esc [ 2 l # SM SRM local echo off: esc [ 1 2 h # RM SRM local echo on: esc [ 1 2 l # SM LNM New line : esc [ 2 0 h # RM LNM return = CR only: esc [ 2 0 l # SM DECCKM cursor keys mode: esc [ ? 1 h # RM DECCKM appli. keys mode: esc [ ? 1 l # SM DECANM ANSI mode on: esc [ ? 2 h # RM DECANM ANSI mode off: esc [ ? 2 l # SM DECCOLM 132-column screen: esc [ ? 3 h # RM DECCOLM 80-column screen: esc [ ? 3 l # SM DECSCLM Smooth scroll: esc [ ? 4 h # RM DECSCLM Jump scroll: esc [ ? 4 l # SM DECSCNM screen light backgr. esc [ ? 5 h # RM DECSCNM screen dark backgr. esc [ ? 5 l # SM DECOM move within margins: esc [ ? 6 h # RM DECOM move outside margins: esc [ ? 6 l # SM DECAWM auto right margin: esc [ ? 7 h # RM DECAWM auto right margin: esc [ ? 7 l # SM DECARM auto repeat: esc [ ? 8 h # RM DECARM auto repeat: esc [ ? 8 l # DECSASD Select active main: esc [ 0 $ } # DECSASD Select active status: esc [ 1 $ } # DECSSDT Select status none: esc [ 0 $ ~ # DECSSDT Select status indic.: esc [ 1 $ ~ # DECSSDT Select status host-wr: esc [ 2 $ ~ # SM DECTCEM Visible cursor: esc [ ? 2 5 h # RM DECTCEM Invisible cursor: esc [ ? 2 5 l # SM DECNCRM 7 bits NCR set: esc [ ? 4 2 h # RM DECNCRM Multi or ISO latin: esc [ ? 4 2 l # SM DECNKM numeric keypad mode: esc [ ? 6 6 h # RM DECNKM numeric keypad appl.: esc [ ? 6 6 l # SM DECKBUM clavier informatique esc [ ? 6 8 h # RM DECKBUM clavier bureautique: esc [ ? 6 8 l # DECSCL vt300 mode 8-bit ctrl: esc [ 6 3 " p # or DECSCL vt300 mode 8-bit ctrl: esc [ 6 3 ; 0 " p # or DECSCL vt300 mode 8-bit ctrl: esc [ 6 3 ; 2 " p # DECSCL vt300 mode 7-bit ctrl: esc [ 6 3 ; 1 " p # Char. and Line attributes: esc [ Ps ... Ps m # with: 0 All off, 1 Bold, 4 Underline, 5 Blinking, 7 Reverse # and : 22 Bold off, 24 Underline off, 25 Blinking off, 27 Reverse off # # This entry covers BQ303, BQ306, BQ310, Q303, Q306, Q310 bq300|Bull vt320 ISO Latin 1 80 columns terminal, am, eo, eslok, hs, km, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, dsl=\E[1$}\E[2$~\n\E[0$}, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=\E[?5h$<50>\E[?5l, fsl=\E[0$}, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED, is1=\E[63;1"p\E[2h, is2=\E[?2h\E[?3l\E[?5l\E[?7h\E[?8h\E>\E[?1l\E F\E[?42l\E[?4l, is3=\E[0$}\E[?25h\E[2l\E[H\E[J, ka1=\EOw, ka3=\EOy, kb2=\EOu, kbs=^H, kc1=\EOq, kc3=\EOs, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krdo=\E[29~, kslt=\E[4~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E(B, rmam=\E[?7l, rmcup=\E[?7h, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m, rs1=\E[!p, rs2=\E[?3l, s0ds=\E(B, s1ds=\E(0, sc=\E7, sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m%?%p9%t\E(0%e\E(B%;, sgr0=\E[0m\E(B, smacs=\E(0, smam=\E[?7h, smcup=\E[?7l\E[?1l\E(B, smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[1$}\E[2$~, use=ansi+pp, bq300-rv|Bull vt320 reverse 80 columns, flash=\E[?5l$<50>\E[?5h, is2=\E[?2h\E[?3l\E[?5h\E[?7h\E[?8h\E>\E[?1l\E F\E[?42l\E[?4l, use=bq300, bq300-w|Bull vt320 132 columns, cols#132, wsl#132, is2=\E[?2h\E[?3h\E[?5l\E[?7h\E[?8h\E>\E[?1l\E F\E[?42l\E[?4l, rs2=\E[?3h, use=bq300, bq300-w-rv|Bull vt320 reverse mode 132 columns, cols#132, wsl#132, flash=\E[?5l$<50>\E[?5h, is2=\E[?2h\E[?3h\E[?5h\E[?7h\E[?8h\E>\E[?1l\E F\E[?42l\E[?4l, rs2=\E[?3h, use=bq300, # This entry is used for terminals with vt320 emulation mode # and following set-up : # 8 bit ISO Latin Character Set (ISO 8859-1), # 8 bit Control Characters, (CSI coded as x9B for ESC [) # 80 columns screen. # Soft Terminal Reset csi ! p # RIS (erases screen): esc c # DECKPNM numeric keypad mode: esc > # DECKPAM applic. keypad mode: esc = # DECSTBM Scrolling region: esc [ r # SCS select G0 = US: esc ( B # SCS select G1 = line-graphic: esc ) 0 # Select 7-bit C1 controls: esc sp F # Select 8-bit C1 controls: esc sp G # Select cursor home: csi H # Select erase screen: csi J # SM KAM lock keyboard: csi 2 h # RM KAM unlock keyboard: csi 2 l # SM SRM local echo off: csi 1 2 h # RM SRM local echo on: csi 1 2 l # SM LNM New line : csi 2 0 h # RM LNM return = CR only: csi 2 0 l # SM DECCKM cursor keys mode: csi ? 1 h # RM DECCKM appli. keys mode: csi ? 1 l # SM DECANM ANSI mode on: csi ? 2 h # RM DECANM ANSI mode off: csi ? 2 l # SM DECCOLM 132-column screen: csi ? 3 h # RM DECCOLM 80-column screen: csi ? 3 l # SM DECSCLM Smooth scroll: csi ? 4 h # RM DECSCLM Jump scroll: csi ? 4 l # SM DECSCNM screen light backgr. csi ? 5 h # RM DECSCNM screen dark backgr. csi ? 5 l # SM DECOM move within margins: csi ? 6 h # RM DECOM move outside margins: csi ? 6 l # SM DECAWM auto right margin: csi ? 7 h # RM DECAWM auto right margin: csi ? 7 l # SM DECARM auto repeat: csi ? 8 h # RM DECARM auto repeat: csi ? 8 l # DECSASD Select active main: csi 0 $ } # DECSASD Select active status: csi 1 $ } # DECSSDT Select status none: csi 0 $ ~ # DECSSDT Select status indic.: csi 1 $ ~ # DECSSDT Select status host-wr: csi 2 $ ~ # SM DECTCEM Visible cursor: csi ? 2 5 h # RM DECTCEM Invisible cursor: csi ? 2 5 l # SM DECNCRM 7 bits NCR set: csi ? 4 2 h # RM DECNCRM Multi or ISO latin: csi ? 4 2 l # DECSCL vt300 mode 8-bit ctrl: csi 6 3 " p # or DECSCL vt300 mode 8-bit ctrl: csi 6 3 ; 0 " p # DECSCL vt300 mode 7-bit ctrl: csi 6 3 ; 1 " p # Char. and Line attributes: csi Ps ... Ps m # with: 0 All off, 1 Bold, 4 Underline, 5 Blinking, 7 Reverse # and : 22 Bold off, 24 Underline off, 25 Blinking off, 27 Reverse off # (bq300-8: ,,,,, to get under 1024 --esr) bq300-8|Bull vt320 full 8 bits 80 columns, am, eo, eslok, hs, km, mc5i, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, wsl#80, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\2335m, bold=\2331m, civis=\233?25l, clear=\233H\233J, cnorm=\233?25h, cr=^M, csr=\233%i%p1%d;%p2%dr, cub=\233%p1%dD, cub1=\2331D, cud=\233%p1%dB, cud1=\2331B, cuf=\233%p1%dC, cuf1=\2331C, cup=\233%i%p1%d;%p2%dH, cuu=\233%p1%dA, cuu1=\2331A, dch=\233%p1%dP, dch1=\233P, dl=\233%p1%dM, dl1=\233M, dsl=\2331$}\2332$~\n\2330$}, ech=\233%p1%dX, ed=\233J, el=\233K, el1=\2331K, enacs=\E(B\E)0, flash=\233?5h$<50>\233?5l, fsl=\2330$}, home=\233H, ht=^I, hts=\EH, ich=\233%p1%d@, il=\233%p1%dL, il1=\233L, ind=\ED, is1=\E[63;2"p\E[2h, is2=\E[?2h\E[?3l\E[?5l\E[?7h\E[?8h\E>\E[?1l\E G\E[?42l\E[?4l, is3=\2330$}\233?25h\2332l\233H\233J, ka1=\217w, ka3=\217y, kb2=\217u, kbs=^H, kc1=\217q, kc3=\217s, kcub1=\233D, kcud1=\233B, kcuf1=\233C, kcuu1=\233A, kdch1=\2333~, kf1=\217P, kf10=\23321~, kf11=\23323~, kf12=\23324~, kf13=\23325~, kf14=\23326~, kf15=\23328~, kf16=\23329~, kf17=\23331~, kf18=\23332~, kf19=\23333~, kf2=\217Q, kf20=\23334~, kf3=\217R, kf4=\217S, kf6=\23317~, kf7=\23318~, kf8=\23319~, kf9=\23320~, kfnd=\2331~, khlp=\23328~, kich1=\2332~, knp=\2336~, kpp=\2335~, krdo=\23329~, kslt=\2334~, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, mc0=\233i, mc4=\2334i, mc5=\2335i, nel=\EE, rc=\E8, rev=\2337m, ri=\EM, rmacs=\E(B, rmam=\233?7l, rmcup=\233?7h, rmir=\2334l, rmkx=\233?1l\E>, rmso=\23327m, rmul=\23324m, rs1=\E[!p, rs2=\E[?3l, s0ds=\E(B, s1ds=\E(0, sc=\E7, sgr=\233%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m%?%p9%t\E(0%e\E(B%;, sgr0=\2330m\E(B, smacs=\E(0, smam=\233?7h, smcup=\233?7l\233?1l\E(B, smir=\2334h, smso=\2337m, smul=\2334m, tbc=\2333g, tsl=\2331$}\2332$~, bq300-8rv|Bull vt320 8-bit reverse mode 80 columns, flash=\233?5l$<50>\233?5h, is2=\E[?2h\E[?3l\E[?5h\E[?7h\E[?8h\E>\E[?1l\E G\E[?42l\E[?4l, use=bq300-8, bq300-8w|Bull vt320 8-bit 132 columns, cols#132, wsl#132, is2=\E[?2h\E[?3h\E[?5l\E[?7h\E[?8h\E>\E[?1l\E G\E[?42l\E[?4l, rs2=\233?3h, use=bq300-8, bq300-w-8rv|Bull vt320 8-bit reverse mode 132 columns, cols#132, wsl#132, flash=\233?5l$<50>\233?5h, is2=\E[?2h\E[?3h\E[?5h\E[?7h\E[?8h\E>\E[?1l\E G\E[?42l\E[?4l, rs2=\233?3h, use=bq300-8, # This entry is used for terminals with vt320 emulation mode # a 102 keys keyboard (PC scancode !) and following set-up : # 8 bit ISO Latin Character Set (ISO 8859-1), # 7 bit Control Characters, # 80 columns screen. bq300-pc|Questar 303 with PC keyboard ISO Latin 1 80 columns, kbs=^H, kdch1=\E[3~, kend=\E[4~, kf1=\E[17~, kf10=\E[28~, kf11=\E[29~, kf12=\E[31~, kf13@, kf14@, kf15@, kf16@, kf17@, kf18@, kf19@, kf2=\E[18~, kf20@, kf3=\E[19~, kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~, kf9=\E[26~, kfnd@, khlp@, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krdo@, kslt@, lf1@, lf2@, lf3@, lf4@, use=bq300, bq300-pc-rv|Questar 303 with PC keyboard reverse mode 80 columns, flash=\E[?5l$<50>\E[?5h, is2=\E[?2h\E[?3l\E[?5h\E[?7h\E[?8h\E>\E[?1l\E F\E[?42l\E[?4l, use=bq300-pc, bq300-pc-w|Questar 303 with PC keyboard 132 columns terminal, cols#132, wsl#132, is2=\E[?2h\E[?3h\E[?5l\E[?7h\E[?8h\E>\E[?1l\E F\E[?42l\E[?4l, rs2=\E[?3h, use=bq300-pc, bq300-pc-w-rv|Questar 303 with PC keyboard reverse mode 132 columns, cols#132, wsl#132, flash=\E[?5l$<50>\E[?5h, is2=\E[?2h\E[?3h\E[?5h\E[?7h\E[?8h\E>\E[?1l\E F\E[?42l\E[?4l, rs2=\E[?3h, use=bq300-pc, # 8 bit ISO Latin Character Set (ISO 8859-1), # 8 bit Control Characters, # 80 columns screen. bq300-8-pc|Q306-8-pc|Questar 303 with PC keyboard in full 8 bits 80 columns, kbs=^H, kdch1=\2333~, kend=\2334~, kf1=\23317~, kf10=\23328~, kf11=\23329~, kf12=\23331~, kf13@, kf14@, kf15@, kf16@, kf17@, kf18@, kf19@, kf2=\23318~, kf20@, kf3=\23319~, kf4=\23320~, kf5=\23321~, kf6=\23323~, kf7=\23324~, kf8=\23325~, kf9=\23326~, kfnd@, khlp@, khome=\2331~, kich1=\2332~, knp=\2336~, kpp=\2335~, krdo@, kslt@, lf1@, lf2@, lf3@, lf4@, use=bq300-8, bq300-8-pc-rv|Questar 303 with PC keyboard full 8 bits reverse mode 80 columns, flash=\E[?5l$<50>\E[?5h, is2=\E[?2h\E[?3l\E[?5h\E[?7h\E[?8h\E>\E[?1l\E G\E[?42l\E[?4l, use=bq300-8-pc, bq300-8-pc-w|Questar 303 with PC keyboard full 8 bits 132 columns, cols#132, wsl#132, is2=\E[?2h\E[?3h\E[?5l\E[?7h\E[?8h\E>\E[?1l\E G\E[?42l\E[?4l, rs2=\E[?3h, use=bq300-8-pc, bq300-8-pc-w-rv|Questar 303 with PC keyboard full 8 bits reverse 132 columns, cols#132, wsl#132, flash=\E[?5l$<50>\E[?5h, is2=\E[?2h\E[?3h\E[?5h\E[?7h\E[?8h\E>\E[?1l\E G\E[?42l\E[?4l, rs2=\E[?3h, use=bq300-8-pc, #======================================================# # BULL QUESTAR 310 `VIP 7800/8800' terminals emulation # #======================================================# # normal mode, 8 bits, 80 columns terminal. # RES reset : ^[e # RIS reset initial state: ^[c # BLE bell enable ^[h # BLD bell disable ^[g # CAMS char. attr. mode set ^[[D # CAMR char. attr. mode reset ^[[G # CLR clear ^[` # KBU keyboard unlock (set) ^[[W # KBL keyboard lock (reset) ^[[X # CM character mode (async.) ^[k # NEP non echoplex mode (by host) ^[l # EP echoplex mode (by host) ^[m # IM insert mode set ^[[I # IM insert mode reset ^[[J # RMS roll mode set ^[r # RMR roll mode reset ^[q # SM78 set mode vip7800 ^[[1q # SD scroll up (72 lines) ^[[0s # SD scroll down (72 lines) ^[[1s # RBM block mode reset ^[[E # SLS status line set ^[w # SLR status line reset ^[v # SLL status line lock ^[O # LGS Line-graphic mode set ^[G # LGR Line-graphic mode reset ^[F # TBC tab clear (at cursor pos.) ^[[g # TBI tab initialize ^[[N # TBS tab set (at cursor pos.) ^[p # PDS print data space ^[[0p # PHD print host data ^[[3p # PDT print data terminator ^[[

u # SSP0 partition 0 set ^[[00u # SSP1 partition n format 1 ^[[PnPnSTRINGu # SSP2 partition n format 2 ^[[PnPnSTRINGu # SSP3 partition n format 3 ^[[PnPnu # ATR attribute (visual) # blink : ^[sB # dim : ^[sL # hide (blank) : ^[sH # restore : ^[sR # inverse video : ^[sI # prot. : ^[sP # underline : ^[s_ # reset : ^{ # # This covers the vip7800 and BQ3155-vip7800 vip|Bull Questar 3155-7800, am, eslok, hs, km, mc5i, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, wsl#80, acsc=0pjdkblamcnkqitgufvhwexj, bel=^G, blink=\EsB, cbt=\E[Z, clear=\E`, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\E[%i%p1%03d%p2%03df, cuu1=\EA, dch1=\E[P, dim=\EsL, dl1=\E[M, dsl=\Ev, ed=\EJ, el=\EK, flash=\007$<80>\007$<80>\007, fsl=\EO, home=\EH, ht=^I, hts=\Ep, ich1=\E[I, ind=^J, invis=\EsH, is2=\E[00u\E[<>001001024080024080u\E[01u, is3=\Er\E[W\E`, kHOM=\EH, kLFT=\Eo, kRIT=\Eu, kbs=^H, kcbt=\E[Z, kclr=\E`, kctab=\E[g, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\E[P, kdl1=\E[M, ked=\EJ, kel=\EK, kf1=\E0, kf10=\ET, kf11=\E\\, kf12=\E\^, kf13@, kf14@, kf15@, kf16@, kf17@, kf18@, kf19@, kf2=\E2, kf20@, kf21=\E1, kf22=\E5, kf23=\E7, kf24=\E9, kf25=\E;, kf26=\E=, kf27=\E?, kf28=\EQ, kf29=\ES, kf3=\E6, kf30=\EV, kf31=\E], kf32=\E_, kf4=\E8, kf5=\E\:, kf6=\E<, kf7=\E>, kf8=\EP, kf9=\ER, khome=\EH, khts=\Ep, kich1=\E[I, kil1=\E[L, kind=\E[0s, kll=\EH\EA, kri=\E[1s, krmir=\E[J, ktbc=\E[N, lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, ll=\EH\EA, mc0=\E[0p, mc4=\E[, rmacs=\EF, rmir=\E[J, rmso=\EsR, rmul=\EsR, rs1=\Ec, rs2=\E[G, s0ds=\EF, s1ds=\EG, sgr0=\EsR\EsU\EF, smacs=\EG, smir=\E[I, smso=\EsI, smul=\Es_, tbc=\E[N, tsl=\Ew, # normal screen, 8 bits, 132 columns terminal. vip-w|vip7800-w|Q310-vip-w|Q310-vip-w-am|Questar 3155-vip7800 wide, cols#132, wsl#132, is2=\E[00u\E[<>001001024132024132u\E[01u, use=vip, vip-H|vip7800-H|Q310-vip-H|Q310-vip-H-am|Questar 3155-vip7800 72 lines, lines#72, is2=\E[00u\E[<>001001024080072080u\E[01u, use=vip, vip-Hw|vip7800-Hw|Q310-vip-Hw|Questar 3155-vip7800 wide 72 lines, cols#132, lines#72, wsl#132, is2=\E[00u\E[<>001001024132072132u\E[01u, use=vip, #### Chromatics # # I have put the long strings in /. Ti sets up a window # that is smaller than the screen, and puts up a warning message # outside the window. Te erases the warning message, puts the # window back to be the whole screen, and puts the cursor at just # below the small window. I defined and to really turn # the cursor on and off, but I have taken this out since I don't # like the cursor being turned off when vi exits. cg7900|chromatics|chromatics 7900, am, cols#80, lines#40, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=^], cup=\001M%p2%d\,%p1%d\,, cuu1=^K, dch1=^A<1, dl1=^A<2, ed=^Al, el=^A`, home=^\, ich1=^A>1, il1=^A>2, ind=^J, ll=^A|, rmcup=\001W0\,40\,85\,48\,\014\001W0\,0\,85\,48\,\001M0\,40\,, rmso=\001C1\,\001c2\,, smcup=\001P0\001O1\001R1\001C4\,\001c0\,\014\001M0\,42\,WARNING DOUBLE ENTER ESCAPE and \025\001C1\,\001c2\,\001W0\,0\,79\,39\,, smso=\001C4\,\001c7\,, uc=\001\001_\001\0, #### Computer Automation # ca22851|computer automation 22851, am, cols#80, lines#24, bel=^G, clear=\014$<8>, cr=^M, cub1=^U, cud1=^J, cuf1=^I, cup=\002%i%p1%c%p2%c, cuu1=^V, ed=^\, el=^], home=^^, ind=^J, kcub1=^U, kcud1=^W, kcuu1=^V, khome=^^, #### Cybernex # # This entry has correct padding and the undocumented "ri" capability cyb83|xl83|cybernex xl-83, OTbs, am, cols#80, lines#24, bel=^G, clear=\014$<62>, cr=^M, cub1=^H, cud1=^J, cuf1=^I, cup=\027%p1%{32}%+%c%p2%{32}%+%c, cuu1=^N, ed=\020$<62>, el=\017$<3>, home=^K, ind=^J, kcub1=^H, kcud1=^J, kcuf1=^I, kcuu1=^N, ri=^N, # (mdl110: removed obsolete ":ma=^Z^P:" and overridden ":cd=145^NA^W:" -- esr) cyb110|mdl110|cybernex mdl-110, OTbs, am, cols#80, lines#24, bel=^G, clear=\030$<70>, cr=^M, cub1=^H, cud1=^J, cuf1=^U, cup=\020%p1%{32}%+%c%p2%{32}%+%c, cuu1=^Z, dch1=\016A\036$<3.5>, dl1=\016A\016\036$<40>, ed=\016@\026$<6>, el=\016@\026$<145>, home=^Y, ht=\011$<43>, ich1=\016A\035$<3.5>, il1=\016A\016\035$<65>, ind=^J, rmso=^NG, smso=^NF, #### Datapoint # # Datapoint is gone. They used to be headquartered in Texas. # They created ARCnet, an Ethernet competitor that flourished for a while # in the early 1980s before 3COM got wise and cut its prices. The service # side of Datapoint still lives (1995) in the form of Intelogic Trace. # dp3360|datapoint|datapoint 3360, OTbs, am, cols#82, lines#25, bel=^G, clear=^]^_, cr=^M, cub1=^H, cud1=^J, cuf1=^X, cuu1=^Z, ed=^_, el=^^, home=^], ind=^J, # From: Jan Willem Stumpel , 11 May 1997 # The Datapoint 8242 Workstation was sold at least between 1985 # and 1989. To make the terminal work with this entry, press # CONTROL-INT-INT to take the terminal off-line, and type (opt). # Set the options AUTO ROLL, ROLL DN, and ESC KBD on, and AUTO # CR/LF off. Use control-shift-[] as escape key, control-I as tab, # shift-F1 to shift-F5 as F6 to F10 (unshifted F1 to F5 are in # fact unusable because the strings sent by the terminal conflict # with other keys). # The terminal is capable of displaying "box draw" characters. # For each graphic character you must send 2 ESC's (\E\E) followed # by a control character as follows: # character meaning # ========= ======= # ctrl-E top tee # ctrl-F right tee # ctrl-G bottom tee # ctrl-H left tee # ctrl-I cross # ctrl-J top left corner # ctrl-K top right corner # ctrl-L bottom left corner # ctrl-M bottom right corner # ctrl-N horizontal line # ctrl-O vertical line # Unfortunately this cannot be fitted into the termcap/terminfo # description scheme. dp8242|datapoint 8242, msgr, cols#80, lines#25, bel=^G, civis=^Y, clear=\025\E\004\027\030, cnorm=^X, cr=^M, cub1=^H, cud1=^J, cup=\011%p2%'\0'%+%c%p1%'\0'%+%c, dl1=\E^Z, ed=^W, el=^V, home=^U, ht=^I, il1=\E^T, ind=^C, is1=\E\014\E\016\0\230\0\317\025\027\030\E\004, kbs=^H, kcub1=^D, kcud1=^B, kcuf1=^F, kcuu1=^E, kf1=^G\Ee, kf10=\EK\Ea, kf2=^I\Ed, kf3=^J\Ec, kf4=^J\Eb, kf5=^S\Ea, kf6=\EO\Ee, kf7=\EN\Ed, kf8=\EM\Ec, kf9=\EL\Eb, nel=^M^J, rep=\E\023%p1%c%p2%c, ri=^K, rmso=\E^D, rmul=\E^D, rs1=\E\014\E\016\0\230\0\317\025\027\030\E\004, smso=\E^E, smul=\E^F, wind=\E\014\E\016%p1%'\0'%+%c%p2%'\0'%+%c%p3%'\0'%+%c%p4%'\0'%+%c\025, #### DEC terminals (Obsolete types: DECwriter and vt40/42/50) # # These entries are DEC's official terminfos for its older terminals. # Contact Bill Hedberg of Terminal Support # Engineering for more information. Updated terminfos and termcaps # are kept available at ftp://gatekeeper.dec.com/pub/DEC/termcaps. # gt40|dec gt40, OTbs, os, cols#72, lines#30, bel=^G, cr=^M, cub1=^H, cud1=^J, gt42|dec gt42, OTbs, os, cols#72, lines#40, bel=^G, cr=^M, cub1=^H, cud1=^J, vt50|dec vt50, OTbs, cols#80, lines#12, bel=^G, clear=\EH\EJ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cuu1=\EA, ed=\EJ, el=\EK, ht=^I, ind=^J, vt50h|dec vt50h, OTbs, cols#80, lines#12, bel=^G, clear=\EH\EJ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ, el=\EK, ht=^I, ind=^J, ri=\EI, # (vt61: there's a BSD termcap that claims , ) vt61|vt-61|vt61.5|dec vt61, cols#80, lines#24, bel=^G, clear=\EH\EJ$<120>, cr=\r$<20>, cub1=^H, cud1=^J, cuf1=\EC$<20>, cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<20>, cuu1=\EA$<20>, ed=\EJ$<120>, el=\EK$<70>, ht=^I, ind=\n$<20>, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, ri=\E$<20>I, # The gigi does standout with red! # (gigi: I added / based on the init string, corrected cub1 -- esr) gigi|vk100|dec gigi graphics terminal, OTbs, am, xenl, cols#84, lines#24, bel=^G, clear=\E[H\E[2J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, ed=\E[J, el=\E[K, ht=^I, ind=^J, is2=\E>\E[?3l\E[?4l\E[?5l\E[?20l\E[?7h\E[?8h, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, ri=\EM, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7;31m, smul=\E[4m, # DEC PRO-350 console (VT220-style). The 350 was DEC's attempt to produce # a PC differentiated from the IBM clones. It was a total, ludicrous, # grossly-overpriced failure (among other things, DEC's OS didn't include # a format program, so you had to buy pre-formatted floppies from DEC at # a hefty premium!). pro350|decpro|dec pro console, OTbs, cols#80, it#8, lines#24, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, clear=\EH\EJ, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ, el=\EK, home=\EH, ht=^I, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=\EE, kf1=\EF, kf2=\EG, kf3=\EH, kf4=\EI, kf5=\EJ, kf6=\Ei, kf7=\Ej, khome=\EH, ri=\EI, rmacs=\EG, rmso=\E^N, rmul=\E^C, smacs=\EF, smso=\E^H, smul=\E^D, dw1|decwriter I, OTbs, hc, os, cols#72, bel=^G, cr=^M, cub1=^H, cud1=^J, ind=^J, dw2|decwriter|dw|decwriter II, OTbs, hc, os, cols#132, bel=^G, cr=^M, cub1=^H, cud1=^J, ind=^J, kbs=^H, # \E(B Use U.S. character set (otherwise # => british pound !) # \E[20l Disable "linefeed newline" mode (else puts \r after \n,\f,\v) # \E[w 10 char/in pitch # \E[1;132 full width horizontal margins # \E[2g clear all tab stops # \E[z 6 lines/in # \E[66t 66 lines/page (for \f) # \E[1;66r full vertical page can be printed # \E[4g clear vertical tab stops # \E> disable alternate keypad mode (so it transmits numbers!) # \E[%i%p1%du set tab stop at column %d (origin == 1) # (Full syntax is \E[n;n;n;n;n;...;nu where each 'n' is # a tab stop) # # The dw3 does standout with wide characters. # dw3|la120|decwriter III, OTbs, hc, os, cols#132, bel=^G, cr=^M, cub1=^H, cud1=^J, ht=^I, ind=^J, is1=\E(B\E[20l\E[w\E[0;132s\E[2g\E[z\E[66t\E[1;66r\E[4g\E>, is2=\E[9;17;25;33;41;49;57;65;73;81;89;97;105;113;121;129u\r, kbs=^H, rmso=\E[w, sgr0=\E[w, smso=\E[6w, dw4|decwriter IV, OTbs, am, hc, os, cols#132, bel=^G, cr=^M, cub1=^H, cud1=^J, ht=^I, ind=^J, is2=\Ec, kbs=^H, kf0=\EOP, kf1=\EOQ, kf2=\EOR, kf3=\EOS, # These aren't official ln03|dec ln03 laser printer, hc, cols#80, lines#66, bel=^G, cr=^M, cud1=^J, hd=\EK, ht=^I, hu=\EL, ind=^J, nel=^M^J, rmso=\E[22m, rmul=\E[24m, sgr0=\E[m, smso=\E[1m, smul=\E[4m, ln03-w|dec ln03 laser printer 132 cols, cols#132, bel=^G, cr=^M, cud1=^J, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, use=ln03, #### Delta Data (dd) # # Untested. The cup sequence is hairy enough that it probably needs work. # The idea is ctrl(O), dd(row), dd(col), where dd(x) is x - 2*(x%16) + '9'. # There are BSD-derived termcap entries floating around for this puppy # that are *certainly* wrong. delta|dd5000|delta data 5000, OTbs, am, cols#80, lines#27, bel=^G, clear=^NR, cub1=^H, cud1=^J, cuf1=^Y, cup=\017%p1%p1%{16}%m%{2}%*%-%{57}%+%c%p2%p2%{16}%m%{2}%*%-%{57}%+%c, cuu1=^Z, dch1=^NV, el=^NU, home=^NQ, ind=^J, #### Digital Data Research (ddr) # # (ddr: I added / based on the init string -- esr) ddr|rebus3180|ddr3180|Rebus/DDR 3180 vt100 emulator, OTbs, am, xenl, cols#80, it#8, lines#24, vt#3, blink=\E[5m$<2/>, bold=\E[1m$<2/>, clear=\E[H\E[2J$<50/>, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C$<2/>, cup=\E[%i%p1%d;%p2%dH$<5/>, cuu1=\E[A$<2/>, ed=\E[J$<50/>, el=\E[K$<3/>, home=\E[H, ht=^I, ind=\ED$<5/>, is2=\E[1;24r\E[24;1H, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rc=\E8, rev=\E[7m$<2/>, rf=/usr/share/tabset/vt100, ri=\EM$<5/>, rmam=\E[7l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m$<2/>, rs1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, sgr0=\E[m$<2/>, smam=\E[7l, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m$<2/>, #### Evans & Sutherland # # Jon Leech tells us: # The ps300 was the Evans & Sutherland Picture System 300, a high # performance 3D vector graphics system with a bunch of specialized hardware. # Approximate date of release was 1982 (early 80s, anyway), and it had several # evolutions including (limited) color versions such as the PS330C. PS300s # were effectively obsolete by the late 80s, replaced by raster graphics # systems, although specialized applications like molecular modelling # hung onto them for a while longer. AFAIK all E&S vector graphics systems # are out of production, though of course E&S is very much alive (in 1996). # (ps300: changed ":pt@:" to "it@" -- esr) # ps300|Picture System 300, xt, it@, rmso@, rmul@, smso@, smul@, use=vt100, #### General Electric (ge) # terminet1200|terminet300|tn1200|tn300|terminet|GE terminet 1200, OTbs, hc, os, cols#120, bel=^G, cr=^M, cud1=^J, ind=^J, #### Heathkit/Zenith # # Here is a description of the H19 DIP switches: # # S401 # 0-3 = baud rate as follows: # # 3 2 1 0 # --- --- --- --- # 0 0 1 1 300 baud # 0 1 0 1 1200 baud # 1 0 0 0 2400 baud # 1 0 1 0 4800 baud # 1 1 0 0 9600 baud # 1 1 0 1 19.2K baud # # 4 = parity (0 = no parity) # 5 = even parity (0 = odd parity) # 6 = stick parity (0 = normal parity) # 7 = full duplex (0 = half duplex) # # S402 # 0 = block cursor (0 = underscore cursor) # 1 = no key click (0 = keyclick) # 2 = wrap at end of line (0 = no wrap) # 3 = auto LF on CR (0 = no LF on CR) # 4 = auto CR on LF (0 = no CR on LF) # 5 = ANSI mode (0 = VT52 mode) # 6 = keypad shifted (0 = keypad unshifted) # 7 = 50Hz refresh (1 = 60Hz refresh) # # Factory Default settings are as follows: # 7 6 5 4 3 2 1 0 # S401 1 0 0 0 1 1 0 0 # S402 0 0 0 0 0 0 0 0 # (h19: I added / based on the init string; # also added empty to suppress a tic warning -- esr) h19-a|h19a|heath-ansi|heathkit-a|heathkit h19 ansi mode, OTbs, am, mir, msgr, cols#80, it#8, lines#24, acsc=, bel=^G, clear=\E[2J, cnorm=\E[>4l, cr=^M, cub1=^H, cud1=\E[1B, cuf1=\E[1C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[1A, cvvis=\E[>4h, dch1=\E[1P, dl1=\E[1M$<1*>, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il1=\E[1L$<1*>, ind=^J, is2=\E<\E[>1;2;3;4;5;6;7;8;9l\E[m\E[11m\E[?7h, kbs=^H, kcub1=\E[1D, kcud1=\E[1B, kcuf1=\E[1C, kcuu1=\E[1A, kf1=\EOS, kf2=\EOT, kf3=\EOU, kf4=\EOV, kf5=\EOW, kf6=\EOP, kf7=\EOQ, kf8=\EOR, khome=\E[H, lf6=blue, lf7=red, lf8=white, ri=\EM, rmacs=\E[11m, rmam=\E[?7l, rmir=\E[4l, rmso=\E[m, smacs=\E[10m, smam=\E[?7h, smir=\E[4h, smso=\E[7m, h19-bs|heathkit w/keypad shifted, rmkx=\Eu, smkx=\Et, use=h19-b, h19-us|h19us|h19-smul|heathkit w/keypad shifted/underscore cursor, rmkx=\Eu, smkx=\Et, use=h19-u, # (h19: merged in from BSDI hp19-e entry>; # also added empty to suppress a tic warning --esr) # From: Tim Pierce , 23 Feb 1998 # Tim tells us that: # I have an old Zenith-19 terminal at home that still gets a lot of use. # This terminal suffers from the same famous insert-mode padding lossage # that has been acknowledged for the Z29 terminal. Emacs is nearly # unusable on this box, since even a half-scroll up or down the window # causes flaming terminal death. # # On the Z19, the only way I have found around this problem is to remove # the :al: and :dl: entries entirely. No amount of extra padding will # help (I have tried up to 20000). Removing and # makes Emacs a little slower, but it remains in the land of the living. # Big win. h19|heath|h19-b|heathkit|heath-19|z19|zenith|heathkit h19, OTbs, am, eslok, hs, mir, msgr, cols#80, it#8, lines#24, acsc=+h.kaiggjdkclfmenbozqas{tvutvuwsx`~\^, bel=^G, clear=\EE, cnorm=\Ey4, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\Ex4, dch1=\EN, ed=\EJ, el=\EK, fsl=\Ek\Ey5, home=\EH, ht=^I, ind=^J, ip=$<1.5/>, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\ES, kf2=\ET, kf3=\EU, kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, khome=\EH, lf6=blue, lf7=red, lf8=white, ri=\EI, rmacs=\EG, rmir=\EO, rmso=\Eq, smacs=\EF, smir=\E@, smso=\Ep, tsl=\Ej\Ex5\EY8%p1%{32}%+%c\Eo\Eo, h19-u|heathkit with underscore cursor, cnorm@, cvvis@, use=h19-b, h19-g|h19g|heathkit w/block cursor, cnorm=\Ex4, cvvis@, use=h19-b, alto-h19|altoh19|altoheath|alto-heath|alto emulating heathkit h19, lines#60, dl1=\EM, il1=\EL, use=h19, # The major problem with the Z29 is that it requires more padding than the Z19. # # The problem with declaring an H19 to be synonymous with a Z29 is that # it needs more padding. It especially loses if a program attempts # to put the Z29 into insert mode and insert text at 9600 baud. It # even loses worse if the program attempts to insert tabs at 9600 # baud. Adding padding to text that is inserted loses because in # order to make the Z29 not die, one must add so much padding that # whenever the program tries to use insert mode, the effective # rate is about 110 baud. # # What program would want to put the terminal into insert mode # and shove stuff at it at 9600 baud you ask? # # Emacs. Emacs seems to want to do the mathematically optimal # thing in doing a redisplay rather than the practical thing. # When it is about to output a line on top of a line that is # already on the screen, instead of just killing to the end of # the line and outputting the new line, it compares the old line # and the new line and if there are any similarities, it # constructs the new line by deleting the text on the old line # on the terminal that is already there and then inserting new # text into the line to transform it into the new line that is # to be displayed. The Z29 does not react kindly to this. # # But don't cry for too long.... There is a solution. You can make # a termcap entry for the Z29 that says the Z29 has no insert mode. # Then Emacs cannot use it. "Oh, no, but now inserting into a # line will be really slow", you say. Well there is a sort of a # solution to that too. There is an insert character option on # the Z29 that will insert one character. Unfortunately, it # involves putting the terminal into ansi mode, inserting the # character, and changing it back to H19 mode. All this takes 12 # characters. Pretty expensive to insert one character, but it # works. Either Emacs doesn't try to use its inserting hack when # it's only given an insert character ability or the Z29 doesn't # require padding with this (the former is probably more likely, # but I haven't checked it out). # (z29: added empty to suppress a tic warning, merged in # status line capabilities from BRL entry --esr) z29|zenith29|z29b|zenith z29b, OTbs, OTpt, am, eslok, hs, mir, msgr, OTkn#10, cols#80, lines#24, OTbc=\ED, acsc=, bel=^G, cbt=\E-, clear=\EE$<14>, cnorm=\Ey4, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\E$<1>A, cvvis=\Ex4, dch1=\EN$<0.1*>, dl1=\EM$<1/>, dsl=\Ey1, ed=\EJ$<14>, el=\EK$<1>, fsl=\Ek\Ey5, home=\EH, ht=^I, ich1=\E<\E[1@\E[?2h$<1>, il1=\EL$<1/>, ind=\n$<2>, is2=\E<\E[?2h\Ev, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=\E~, kf1=\ES, kf2=\ET, kf3=\EU, kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, kf9=\E0I, khome=\EH, lf0=home, ri=\EI$<2/>, rmacs=\EF, rmir=\EO, rmso=\Eq, rmul=\Es0, smacs=\EG, smir=\E@, smso=\Ep, smul=\Es8, tsl=\Ej\Ex5\Ex1\EY8%+ \Eo, # z29 in ansi mode. Assumes that the cursor is in the correct state, and that # the world is stable. causes the terminal to be reset to the state # indicated by the name. kc -> key click, nkc -> no key click, uc -> underscore # cursor, bc -> block cursor. # From: Mike Meyers # (z29a: replaced nonexistent befause # looks vt100-compatible -- esr) z29a|z29a-kc-bc|h29a-kc-bc|heath/zenith 29 in ansi mode, OTbs, OTpt, am, eslok, hs, mir, msgr, OTkn#10, cols#80, it#8, lines#24, OTbc=\ED, bel=^G, blink=\E[5m, bold=\E[2m, clear=\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[1P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, dsl=\E[>1l, ed=\E[J, el=\E[K, fsl=\E[u\E[>5l, home=\E[H, ht=^I, hts=\EH, if=/usr/share/tabset/vt100, il=\E[%p1%dL, il1=\E[L, ind=\ED, kbs=^H, kclr=\E[J, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, ked=\E[J, kf0=\E[~, kf1=\EOS, kf2=\EOT, kf3=\EOU, kf4=\EOV, kf5=\EOW, kf6=\EOP, kf7=\EOQ, kf8=\EOR, kf9=\EOX, khome=\E[H, lf0=help, mc0=\E#7, nel=^M\ED, rc=\E[r, rev=\E[7m, ri=\EM, rmcup=\E[?7h, rmso=\E[m, rmul=\E[m, rs1=\E<\E[1;24r\E[24;1H\E[?7h\E[>4h\E[>1;2;3;5;6;7;8;9l\E[m\E[11m, sc=\E[s, sgr0=\E[m, smcup=\E[?7l, smso=\E[7;2m, smul=\E[4m, tbc=\E[3g, tsl=\E[s\E[>5;1h\E[25;%i%dH\E[1K, z29a-kc-uc|h29a-kc-uc|z29 ansi mode with keyckick and underscore cursor, rs1=\E<\E[1;24r\E[24;1H\E[?7h\E[>1;2;3;4;5;6;7;8;9l\E[m\E[11m, use=z29a, z29a-nkc-bc|h29a-nkc-bc|z29 ansi mode with block cursor and no keyclick, rs1=\E<\E[1;24r\E[24;1H\E[?7h\E[>2;4h\E[>1;3;5;6;7;8;9l\E[m\E[11m, use=z29a, z29a-nkc-uc|h29a-nkc-uc|z29 ansi mode with underscore cursor and no keyclick, rs1=\E<\E[1;24r\E[24;1H\E[?7h\E[>2h\E[>1;3;4;5;6;7;8;9l\E[m\E[11m, use=z29a, # From: Jeff Bartig 31 Mar 1995 z39-a|z39a|zenith39-a|zenith39-ansi|Zenith 39 in ANSI mode, am, eslok, hs, mc5i, mir, msgr, xon, cols#80, lines#24, acsc=0a``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[1Z, civis=\E[>5h, clear=\E[2J\E[H, cnorm=\E[>5l, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[1P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[1M, dsl=\E[>1l, ed=\E[0J, el=\E[0K, el1=\E[1K, fsl=\E[u, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[1L, ind=^J, is2=\E<\E[>1;3;5;6;7l\E[0m\E[2J, ka1=\EOw, ka3=\EOu, kb2=\EOy, kbs=^H, kc1=\EOq, kc3=\EOs, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, ked=\E[J, kf1=\EOS, kf2=\EOT, kf3=\EOU, kf4=\EOV, kf5=\EOW, kf6=\EOP, kf7=\EOQ, kf8=\EOR, kf9=\EOX, khlp=\E[~, khome=\E[H, ll=\E[24;1H, mc0=\E[?19h\E[i, mc4=\E[4i, mc5=\E[5i, rc=\E[u, rev=\E[7m, rmacs=\E(B, rmir=\E[4l, rmkx=\E[>7l, rmso=\E[0m, rmul=\E[0m, rs2=\E<\Ec\0, sc=\E[s, sgr0=\E[0m, smacs=\E(0, smir=\E[4h, smkx=\E[>7h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E[s\E[>1h\E[25;%i%p1%dH, # From: Brad Brahms z100|h100|z110|z-100|h-100|heath/zenith z-100 pc with color monitor, cnorm=\Ey4\Em70, cvvis=\Ex4\Em71, use=z100bw, # (z100bw: removed obsolete ":kn#10:", added empty -- esr) z100bw|h100bw|z110bw|z-100bw|h-100bw|heath/zenith z-100 pc, OTbs, OTpt, mir, msgr, OTkn#10, cols#80, it#8, lines#24, acsc=+h.kaiggjdkclfmenbozqas{tvutvuwsx`~\^, clear=\EE$<5*/>, cnorm=\Ey4, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<1*/>, cuu1=\EA, cvvis=\Ex4, dch1=\EN$<1*/>, dl1=\EM$<5*/>, ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL$<5*/>, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=\EJ, kf1=\ES, kf2=\ET, kf3=\EU, kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, kf9=\EOI, khome=\EH, ri=\EI, rmacs=\EG, rmir=\EO, rmso=\Eq, smacs=\EF, smir=\E@, smso=\Ep, p19|h19-b with il1/dl1, dl1=\EM$<2*/>, il1=\EL$<2*/>, use=h19-b, # From: # (ztx: removed duplicate :sr: -- esr) ztx|ztx11|zt-1|htx11|ztx-1-a|ztx-10 or 11, OTbs, am, eslok, hs, cols#80, it#8, lines#24, clear=\EE, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM, dsl=\Ey1, ed=\EJ, el=\EK, fsl=\Ek\Ey5, home=\EH, ht=^I, il1=\EL, is2=\Ej\EH\Eq\Ek\Ev\Ey1\Ey5\EG\Ey8\Ey9\Ey>, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=\ES, kf1=\EB, kf2=\EU, kf3=\EV, kf4=\EW, kf5=\EP, kf6=\EQ, kf7=\ER, ri=\EI, rmso=\Eq, rmul=\Eq, smso=\Es5, smul=\Es2, tsl=\Ej\Ex5\Ex1\EY8%+ \Eo, #### IMS International (ims) # # There was a company called IMS International located in Carson City, # Nevada, that flourished from the mid-70s to mid-80s. They made S-100 # bus/Z80 hardware and a line of terminals called Ultimas. # # From: Erik Fair Sun Oct 27 07:21:05 1985 ims950-b|bare ims950 no init string, is2@, use=ims950, # (ims950: removed obsolete ":ko@:" -- esr) ims950|ims televideo 950 emulation, xenl@, flash@, kbs@, kcub1@, kcud1@, kcuf1@, kcuu1@, kf0@, kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, kf9@, khome@, use=tvi950, # (ims950-rv: removed obsolete ":ko@:" -- esr) ims950-rv|ims tvi950 rev video, xenl@, flash@, kbs@, kcub1@, kcud1@, kcuf1@, kcuu1@, kf0@, kf1@, kf2@, kf3@, kf4@, kf5@, kf6@, kf7@, kf8@, kf9@, khome@, use=tvi950-rv, ims-ansi|ultima2|ultimaII|IMS Ultima II, OTbs, am, cols#80, it#8, lines#24, clear=\E[H\E[2J, cub1=^H, cud1=\ED, cuf1=\EC, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\EM, ed=\E[0J, el=\E[0K, ht=^I, if=/usr/share/tabset/vt100, is2=\E[m\E[>14l\E[?1;?5;20l\E>\E[1m\r, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, ri=\EM, rmso=\E[m\E[1m, rmul=\E[m\E[1m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, #### Intertec Data Systems # # I think this company is long dead as of 1995. They made an early CP/M # micro called the "Intertec Superbrain" that was moderately popular, # then sank out of sight. # superbrain|intertec superbrain, OTbs, am, bw, cols#80, lines#24, OTbc=^U, bel=^G, clear=\014$<5*>, cr=^M, cub1=^H, cud1=^J, cuf1=^F, cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<20>, cuu1=^K, ed=\E~k<10*>, el=\E~K$<15>, ht=^I, ind=^J, kcub1=^U, kcud1=^J, kcuf1=^F, kcuu1=^K, rmcup=^L, smcup=^L, # (intertube: a Gould entry via BRL asserted smul=\E0@$<200/>, # rmul=\E0A$<200/>; my guess is the highlight letter is bit-coded like an ADM, # and the reverse is actually true. Try it. -- esr) intertube|intertec|Intertec InterTube, OTbs, am, cols#80, lines#25, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=^F, cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<50>, cuu1=^Z, home=^A, ind=^J, rmso=\E0@, smso=\E0P, # The intertube 2 has the "full duplex" problem like the tek 4025: if you # are typing and a command comes in, the keystrokes you type get interspersed # with the command and it messes up intertube2|intertec data systems intertube 2, OTbs, cup=\016%p1%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%c, el=\EK, hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%c, ll=^K^X\r, vpa=\013%p1%c, use=intertube, #### Ithaca Intersystems # # This company made S100-bus personal computers long ago in the pre-IBM-PC # past. They used to be reachable at: # # Ithaca Intersystems # 1650 Hanshaw Road # Ithaca, New York 14850 # # However, the outfit went bankrupt years ago. # # The Graphos III was a color graphics terminal from Ithaca Intersystems. # These entries were written (originally in termcap syntax) by Brian Yandell # and Mike Meyer at the # University of Wisconsin. # (graphos: removed obsolete and syntactically incorrect :kn=4:, # removed and # no such file & no -- esr) graphos|graphos III, am, mir, cols#80, it#8, lines#24, clear=\E[H\E[2J, cnorm=\Ez56;2;0;0z\Ez73z\Ez4;1;1z, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\Ez4;2;1z\Ez56;2;80;24z, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=\ED, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, khome=\E[H, nel=^M\ED, rc=\E8, ri=\EM, rmdc=\E[4l, rmir=\E[4l, rmso=\E[m, sc=\E7, sgr0=\E[m, smdc=\E[4h, smir=\E[4h, smso=\E[7m, graphos-30|graphos III with 30 lines, lines#30, cvvis=\Ez4;2;1z\Ez56;2;80;30z, use=graphos, #### Modgraph # # These people used to be reachable at: # # Modgraph, Inc # 1393 Main Street, # Waltham, MA 02154 # Vox: (617)-890-5796. # # However, if you call that number today you'll get an insurance company. # I have mail from "Michael Berman, V.P. Sales, Modgraph" dated # 26 Feb 1997 that says: # # Modgraph GX-1000, replaced by GX-2000. Both are out of production, have been # for ~7 years. Modgraph still in business. Products are rugged laptop and # portable PC's and specialized CRT and LCD monitors (rugged, rack-mount # panel-mount etc). I can be emailed at sonfour@aol.com # # Peter D. Smith notes that his modgraph manual was # dated 1984. According to the manual, it featured Tek 4010/4014 # graphics and DEC VT100/VT52 + ADM-3A emulation with a VT220-style keyboard. # modgraph|mod24|modgraph terminal emulating vt100, xenl@, cols#80, lines#24, cvvis=\E\^9;0s\E\^7;1s, is2=\E\^9;0s\E\^7;1s\E[3g\E\^11;9s\E\^11;17s\E\^11;25s\E\^11;33s\E\^11;41s\E\^11;49s\E\^11;57s\E\^11;65s\E\^11;73s\E\^11;81s\E\^11;89s, rf@, ri=\EM\E[K$<5/>, use=vt100, # The GX-1000 manual is dated 1984. This looks rather like a VT-52. modgraph2|modgraph gx-1000 80x24 with keypad not enabled, am, da, db, cols#80, it#8, lines#24, clear=\EH\EJ$<50/>, cub1=^H, cud1=\EB$<2/>, cuf1=\EC$<2/>, cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<5/>, cuu1=\EA$<2/>, ed=\EJ$<50/>, el=\EK$<3/>, ht=^I, is2=\E<\E\^5;2s\E\^7;1s\E[3g\E\^11;9s\E\^11;17s\E\^11;25s\E\^11;33s\E\^11;41s\E\^11;49s\E\^11;57s\E\^11;65s\E\^11;73s\E\^11;81s\E\^11;89s\E\^12;0s\E\^14;2s\E\^15;9s\E\^25;1s\E\^9;1s\E\^27;1, ri=\EI$<5/>, # # Modgraph from Nancy L. Cider # BUG NOTE from Barbara E. Ringers : # If we set TERM=vt100, and set the Modgraph screen to 24 lines, setting a # mark and using delete-to-killbuffer work correctly. However, we would # like normal mode of operation to be using a Modgraph with 48 line setting. # If we set TERM=mod (which is a valid entry in termcap with 48 lines) # the setting mark and delete-to-killbuffer results in the deletion of only # the line the mark is set on. # We've discovered that the delete-to-killbuffer works correctly # with TERM=mod and screen set to 80x48 but it's not obvious. Only # the first line disappears but a ctrl-l shows that it did work # correctly. modgraph48|mod|Modgraph w/48 lines, OTbs, OTpt, am, xenl, cols#80, it#8, lines#48, vt#3, OTnl=^J, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[;H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, ed=\E[J, el=\E[K, flash=\E[?5h\E[0q\E[1;2q\E[?5l\E[0q\E[4;3q, home=\E[H, ht=^I, is2=\E<\E[1;48r\E[0q\E[3;4q\E=\E[?1h, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, rc=\E8, rev=\E[7m, ri=\EM, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\E=\E[0q\E>, sc=\E7, sgr0=\E[m, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, #### Morrow Designs # # This was George Morrow's company. They started in the late 1970s making # S100-bus machines. They used to be reachable at: # # Morrow # 600 McCormick St. # San Leandro, CA 94577 # # but they're long gone now (1995). # # The mt70 terminal was shipped with the Morrow MD-3 microcomputer. # Jeff's specimen was dated June 1984. # From: Jeff Wieland 24 Feb 1995 mt70|mt-70|Morrow MD-70; native Morrow mode, am, mir, msgr, xon, cols#80, it#8, lines#24, acsc=+z\,{-x.yOi`|jGkFlEmDnHqJtLuKvNwMxI, bel=^G, cbt=\EI, civis=\E"0, clear=^Z, cnorm=\E"2, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<1>, cuu1=^K, dch1=\EW, dim=\EG2, dl1=\ER, ed=\EY, el=\ET$<10>, flash=\EK1$<200>\EK0, home=^^, ht=^I, ich1=\EQ, il1=\EE, ind=^J, invis@, is1=\E"2\EG0\E], kbs=^H, kcbt=^A^Z\r, kclr=^An\r, kcub1=^AL\r, kcud1=^AK\r, kcuf1=^AM\r, kcuu1=^AJ\r, kdch1=\177, kf1=^A@\r, kf10=^AI\r, kf11=^A`\r, kf12=^Aa\r, kf13=^Ab\r, kf14=^Ac\r, kf15=^Ad\r, kf16=^Ae\r, kf17=^Af\r, kf18=^Ag\r, kf19=^Ah\r, kf2=^AA\r, kf20=^Ai\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khlp=^AO\r, khome=^AN\r, nel=^_, rmacs=\E%%, rmcup=, smacs=\E$, smcup=\E"2\EG0\E], smul=\EG1, tbc=\E0, use=adm+sgr, #### Motorola # # Motorola EXORterm 155 from {decvax, ihnp4}!philabs!sbcs!megad!seth via BRL # (Seth H Zirin) ex155|Motorola Exorterm 155, OTbs, am, bw, OTkn#5, OTug#1, cols#80, lines#24, cbt=\E[, clear=\EX, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EE%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\ET, el=\EU, home=\E@, ht=\EZ, kbs=^H, kcbt=\E[, kclr=\EX, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, ked=\ET, kel=\EU, khome=\E@, rmso=\Ec\ED, rmul=\Eg\ED, smso=\Eb\ED, smul=\Ef\ED, #### Omron # # This company is still around in 1995, manufacturing point-of-sale systems. omron|Omron 8025AG, OTbs, am, da, db, cols#80, lines#24, bel=^G, clear=\EJ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cuu1=\EA, cvvis=\EN, dch1=\EP, dl1=\EM, ed=\ER, el=\EK, home=\EH, il1=\EL, ind=\ES, ri=\ET, rmso=\E4, smso=\Ef, #### Ramtek # # Ramtek was a vendor of high-end graphics terminals around 1979-1983; they # were competition for things like the Tektronics 4025. # # Ramtek 6221 from BRL, probably by Doug Gwyn # The following SET-UP modes are assumed for normal operation: # UNDERLINE_CURSOR ANSI_MODE AUTO_XON/XOFF_ON # NEWLINE_OFF 80_COLUMNS # Other SET-UP modes may be set for operator convenience or communication # requirements; I recommend # SMOOTH_SCROLL AUTO_REPEAT_ON 3_#_SHIFTED WRAP_AROUND_ON # Hardware tabs are assumed to be every 8 columns; they can be set up by the # "reset", "tset", or "tabs" utilities (use rt6221-w, 160 columns, for this). # Note that the Control-E key is useless on this brain-damaged terminal. No # delays are specified; use "stty ixon -ixany" to enable DC3/DC1 flow control! rt6221|Ramtek 6221 80x24, OTbs, OTpt, msgr, xon, OTkn#4, cols#80, it#8, lines#24, vt#3, acsc=, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[>5l, clear=\E[1;1H\E[J, cnorm=\E[>5h\E[>9h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^K, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, cvvis=\E[>7h\E[>9l, ed=\E[J, el=\E[K, home=\E[1;1H, ht=^I, hts=\EH, ind=^J, is2=\E)0, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\EOP, kf1=\EOQ, kf2=\EOR, kf3=\EOS, lf0=PF1, lf1=PF2, lf2=PF3, lf3=PF4, ll=\E[24;1H, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmkx=\E>, rmso=\E[m, rmul=\E[m, rs1=\E[1w\E[>37m\E[>39m\E[1v\E[20l\E[?3l\E[?6l\E[>5h\E[>6h\E[>7h\E[>8l\E[>9h\E[>10l\E[1;24r\E[m\E[q\E(B\017\E)0\E#5\E>, sc=\E7, sgr0=\E[m, smacs=^N, smkx=\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, # [TO DO: Check out: short forms of ho/cl and ll; reset (\Ec)]. rt6221-w|Ramtek 6221 160x48, cols#160, lines#48, ll=\E[48;1H, use=rt6221, #### RCA # # RCA VP3301 or VP3501 rca|rca vp3301/vp3501, OTbs, cols#40, lines#24, clear=^L, cuf1=^U, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, home=^Z, rmso=\E\ES0, smso=\E\ES1, #### Selanar # # Selanar HiREZ-100 from BRL, probably by Doug Gwyn # The following SET-UP modes are assumed for normal operation: # SET_DEFAULT_TABS 48_LINES 80_COLUMNS # ONLINE ANSI CURSOR_VISIBLE # VT102_AUTO_WRAP_ON VT102_NEWLINE_OFF VT102_MONITOR_MODE_OFF # LOCAL_ECHO_OFF US_CHAR_SET WPS_TERMINAL_DISABLED # CPU_AUTO_XON/XOFF_ENABLED PRINT_FULL_SCREEN # For use with graphics software, all graphics modes should be set to factory # default. Other SET-UP modes may be set for operator convenience or # communication requirements. No delays are specified; use "stty ixon -ixany" # to enable DC3/DC1 flow control! # I commented out the scrolling capabilities since they are too slow. hirez100|Selanar HiREZ-100, OTbs, OTpt, mir, msgr, xon, OTkn#4, cols#80, it#8, lines#48, vt#3, acsc=, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, is2=\E<\E)0, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf0=\EOP, kf1=\EOQ, kf2=\EOR, kf3=\EOS, lf0=PF1, lf1=PF2, lf2=PF3, lf3=PF4, ll=\E[48H, mc0=\E[i, mc4=\E[4i\E[?4i, mc5=\E[?5i\E[5i, nel=\EE, rc=\E8, rev=\E[7m, rmacs=^O, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\030\E2\E<\E[4i\E[?4i\E[12h\E[2;4;20l\E[?0;7h\E[?1;3;6;19l\E[r\E[m\E(B\017\E)0\E>, sc=\E7, sgr0=\E[m, smacs=^N, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, hirez100-w|Selanar HiREZ-100 in 132-column mode, cols#132, use=hirez100, #### Signetics # # From University of Wisconsin vsc|Signetics Vsc Video driver by RMC, am, msgr, cols#80, it#8, lines#26, clear=\E[;H\E[2J$<50/>, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, rev=^_\s, rmso=^_!, rmul=^_#, sgr0=^_!, smso=^_\s, smul=^_", #### Soroc # # Alan Frisbie writes: # # As you may recall, the Soroc logo consisted of their name, # with the letter "S" superimposed over an odd design. This # consisted of a circle with a slightly smaller 15 degree (approx.) # wedge with rounded corners inside it. The color was sort of # a metallic gold/yellow. # # If I had been more of a beer drinker it might have been obvious # to me, but it took a clue from their service department to make # me exclaim, "Of course!" The circular object was the top of # a beer can (the old removable pop-top style) and "Soroc" was an # anagram for "Coors". # # I can just imagine the founders of the company sitting around # one evening, tossing back a few and trying to decide what to # call their new company and what to use for a logo. # # (soroc120: removed obsolete ":ma=^K^P^R^L^L :" -- esr) soroc120|iq120|soroc|soroc iq120, clear=\E*$<2>, cud1=^J, ed=\EY, el=\ET, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, use=adm3a, soroc140|iq140|soroc iq140, OTbs, am, mir, cols#80, lines#24, bel=^G, cbt=\EI, clear=\E+, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\Ew, dl1=\Er$<.7*>, ed=\Ey, el=\Et, home=^^, il1=\Ee$<1*>, ind=^J, kbs=^H, kcuf1=^L, kcuu1=^K, kf0=^A0\r, kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, ll=^^^K, rmir=\E8, rmso=\E\177, rmul=\E^A, smir=\E9, smso=\E\177, smul=\E^A, #### Southwest Technical Products # # These guys made an early personal micro called the M6800. # The ct82 was probably its console terminal. # # (swtp: removed obsolete ":bc=^D:" -- esr) swtp|ct82|southwest technical products ct82, am, cols#82, lines#20, bel=^G, clear=^L, cr=^M, cub1=^D, cud1=^J, cuf1=^S, cup=\013%p2%c%p1%c, cuu1=^A, dch1=^\^H, dl1=^Z, ed=^V, el=^F, home=^P, ich1=^\^X, il1=^\^Y, ind=^N, is2=\034\022\036\023\036\004\035\027\011\023\036\035\036\017\035\027\022\011, ll=^C, ri=^O, rmso=^^^F, smso=^^^V, #### Synertek # # Bob Manson writes (28 Apr 1995): # # Synertek used to make ICs, various 6502-based single-board process # control and hobbyist computers, and assorted peripherals including a # series of small inexpensive terminals (I think they were one of the # first to have a "terminal-on-a-keyboard", where the terminal itself # was only slightly larger than the keyboard). # # They apparently had a KTM-1 model, which I've never seen. The KTM-2/40 # was a 40x24 terminal that could connect to a standard TV through a # video modulator. The KTM-2/80 was the 80-column version (the 2/40 # could be upgraded to the 2/80 by adding 2 2114 SRAMs and a new ROM). # I have a KTM-2/80 still in working order. The KTM-2s had fully # socketed parts, used 2 6507s, a 6532 as keyboard scanner, a program # ROM and 2 ROMs as character generators. They were incredibly simple, # and I've never had any problems with mine (witness the fact that mine # was made in 1981 and is still working great... I've blown the video # output transistor a couple of times, but it's a 2N2222 :-) # # The KTM-3 (which is what is listed in the terminfo file) was their # attempt at putting a KTM-2 in a box (and some models came with a # CRT). It wasn't much different from the KTM-2 hardware-wise, but the # control and escape sequences are very different. The KTM-3 was always # real broken, at least according to the folks I've talked to about it. # # The padding in the entry is probably off--these terminals were very # slow (it takes like 100ms for the KTM-2 to clear the screen...) And # anyone with any sanity replaced the ROMs with something that provided # a reasonable subset of VT100 functionality, since the usual ROMs were # obviously very primitive... oh, you could get an upgraded ROM from # Synertek for some incredible amount of money, but what hacker with an # EPROM burner would do that? :) # # Sorry I don't have any contact info; I believe they were located in # Sunnyvale, and I'm fairly sure they are still manufacturing ICs # (they've gone to ASICs and FPGAs), but I doubt they're in the computer # business these days. # # Tested, seems to work fine with vi. synertek|ktm|synertek380|synertek ktm 3/80 tubeless terminal, am, cols#80, lines#24, clear=^Z, cub1=^H, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=\EJ, el=\EK, #### Tab Office Products # # TAB Products Co. - Palo Alto, California # Electronic Office Products, # 1451 California Avenue 94304 # # I think they're out of business. # # The tab 132 uses xon/xoff, so no padding needed. # / have nothing to do with arrow keys. # sets 80 col mode, normal video, autowrap on (for ). # Seems to be no way to get rid of status line. # The manual for this puppy was dated June 1981. It claims to be VT52- # compatible but looks more vt100-like. tab132|tab|tab132-15|tab 132/15, da, db, OTdN@, cols#80, lines#24, lm#96, cud1=^J, cup=\E[%i%p1%d;%p2%dH, dch1=\E[P, dl1=\E[M, il1=\E[L, is2=\E[?7h\E[?3l\E[?5l, kcub1=\E[D, kcud1=\E[B, kcuu1=\E[A, rmir=\E[4l, rmkx@, smir=\E[4h, smkx@, use=vt100, tab132-w|tab132 in wide mode, cols#132, is2=\E[?7h\E[?3h\E[?5l, use=tab132, tab132-rv|tab132 in reverse-video mode, is2=\E[?7h\E[?3l\E[?5h, use=tab132, tab132-w-rv|tab132 in reverse-video/wide mode, is2=\E[?7h\E[?3h\E[?5h, use=tab132-w, #### Teleray # # Research Incorporated # 6425 Flying Cloud Drive # Eden Prairie, MN 55344 # Vox: (612)-941-3300 # # The Teleray terminals were all discontinued in 1992-93. RI still services # and repairs these beasts, but no longer manufactures them. The Teleray # people believe that all the types listed below are very rare now (1995). # There was a newer line of Telerays (Model 7, Model 20, Model 30, and # Model 100) that were ANSI-compatible. # # Note two things called "teleray". Reorder should move the common one # to the front if you have either. A dumb teleray with the cursor stuck # on the bottom and no obvious model number is probably a 3700. # t3700|dumb teleray 3700, OTbs, cols#80, lines#24, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, ind=^J, t3800|teleray 3800 series, OTbs, cols#80, it#8, lines#24, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=\EJ, el=\EK, home=\EH, ht=^I, ind=^J, ll=\EY7\s, t1061|teleray|teleray 1061, OTbs, am, km, xhp, xt, cols#80, it#8, lines#24, xmc#1, bel=^G, clear=\014$<1>, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EQ, dl1=\EM$<2*>, ed=\EJ$<1>, el=\EK, home=\EH, ht=^I, hts=\EF, ich1=\EP, il1=\EL$<2*>, ind=^J, ip=$<0.4*>, is2=\Ee\EU01^Z1\EV\EU02^Z2\EV\EU03^Z3\EV\EU04^Z4\EV\EU05^Z5\EV\EU06^Z6\EV\EU07^Z7\EV\EU08^Z8\EV\Ef, kf1=^Z1, kf2=^Z2, kf3=^Z3, kf4=^Z4, kf5=^Z5, kf6=^Z6, kf7=^Z7, kf8=^Z8, rmso=\ER@, rmul=\ER@, smso=\s\ERD, smul=\ERH, tbc=\EG, t1061f|teleray 1061 with fast PROMs, dl1=\EM, il1=\EL, ip@, use=t1061, # "Teleray Arpa Special", officially designated as # "Teleray Arpa network model 10" with "Special feature 720". # This is the new (1981) fast microcode updating the older "arpa" proms # (which gave meta-key and programmable-fxn keys). 720 is much much faster, # converts the keypad to programmable function keys, and has other goodies. # Standout mode is still broken (magic cookie, etc) so is suppressed as no # programs handle such lossage properly. # Note: this is NOT the old termcap's "t1061f with fast proms." # From: J. Lepreau Tue Feb 1 06:39:37 1983, Univ of Utah # (t10: removed overridden ":so@:se@:us@:ue@:" -- esr) t10|teleray 10 special, OTbs, km, xhp, xt, cols#80, it#8, lines#24, xmc#2, clear=\Ej$<30/>, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EQ, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\EP, il1=\EL, ind=\Eq, pad=\0, ri=\Ep, rmso=\ER@, rmul=\ER@, smso=\ERD, smul=\ERH, # teleray 16 - map the arrow keys for vi/rogue, shifted to up/down page, and # back/forth words. Put the function keys (f1-f10) where they can be # found, and turn off the other magic keys along the top row, except # for line/local. Do the magic appropriate to make the page shifts work. # Also toggle ^S/^Q for those of us who use Emacs. t16|teleray 16, am, da, db, mir, xhp, xt, cols#80, lines#24, bel=^G, clear=\E[H\E[2J, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=%i\E[%p1%d;%p2%df, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[0J, el=\E[0K, home=\E[H, ht=^I, il1=\E[L, ind=^J, kf1=^Z1, kf10=^Z0, kf2=^Z2, kf3=^Z3, kf4=^Z4, kf5=^Z5, kf6=^Z6, kf7=^Z7, kf8=^Z8, kf9=^Z9, ri=\E[T, rmcup=\E[V\E[24;1f\E[?38h, rmir=\E[4l, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smcup=\E[U\E[?38l, smir=\E[4h, smso=\E[7m, smul=\E[4m, #### Texas Instruments (ti) # # The Silent 700 was so called because it was built around a quiet thermal # printer. It was portable, equipped with an acoustic coupler, and pretty # neat for its day. ti700|ti733|ti735|ti745|ti800|ti silent 700/733/735/745 or omni 800, OTbs, hc, os, cols#80, bel=^G, cr=\r$<162>, cub1=^H, cud1=^J, ind=^J, # # Texas Instruments 916 VDT 7 bit control mode # ti916|ti916-220-7|Texas Instruments 916 VDT 8859/1 vt220 mode 7 bit CTRL, da, db, in, msgr, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[2J$<6>, cnorm=\E[?25h, cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC, cup=\E[%p1%i%p1%d;%p2%dH, cuu=\E[%p1%dA, dch=\E[%p1%dP$<250>, dch1=\E[P, dl=\E[%p1%dM, ech=\E[%p1%dX$<20>, ed=\E[J$<6>, el=\E[0K, el1=\E[1K, enacs=\E(B\E)0, ff=^L, flash=\E[?5h\E[?5l$<6>, hpa=\E[%p1%{1}%+%dG, hts=\E[0W, ich=\E[%p1%d@$<250>, il=\E[%p1%dL$<36>, ip=$<10>, is2=\E[1;24r\E[24;1H, kcmd=\E[29~, kdch1=\E[P, kent=^J, kf1=\E[17~, kf10=\E[28~, kf11=\E[29~, kf12=\E[31~, kf2=\E[18~, kf3=\E[19~, kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~, kf9=\E[26~, khome=\E[H, kich1=\E[@, knp=\E[S, kpp=\E[T, kprt=^X, prot=\E&, rmacs=\017$<2>, rs2=\E[!p, sgr@, smacs=\016$<2>, tbc=\E[3g, vpa=\E[%p1%{1}%+%dd, use=vt220, # # Texas Instruments 916 VDT 8 bit control mode # ti916-8|ti916-220-8|Texas Instruments 916 VDT 8859/1 8 vt220 mode bit CTRL, kcmd=\23329~, kcub1=\233D, kcud1=\233B, kcuf1=\233C, kcuu1=\233A, kdch1=\233P, kent=^J, kf1=\23317~, kf10=\23328~, kf11=\23329~, kf12=\23331~, kf2=\23318~, kf3=\23319~, kf4=\23320~, kf5=\23321~, kf6=\23323~, kf7=\23324~, kf8=\23325~, kf9=\23326~, khome=\233H, kich1=\233@, knp=\233S, kpp=\233T, kprt=^X, use=ti916, # # Texas Instruments 916 VDT 8859/1 7 bit control 132 column mode # ti916-132|Texas Instruments 916 VDT vt220 132 column, cols#132, use=ti916, # # Texas Instruments 916 VDT 8859/1 8 bit control 132 column mode # ti916-8-132|Texas Instruments 916 VDT 8-bit vt220 132 column, cols#132, use=ti916-8, ti924|Texas Instruments 924 VDT 8859/1 7 bit CTRL, OTbs, am, xon, cols#80, it#8, lines#24, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[2J\E[H, cnorm=\E[?25h, cr=^M, csr=%i\E[%p1%d;%p2%dr, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=%i\E[%p1%d;%p2%dH, cuu1=\E[A, cvvis=\E[?31h, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH, il1=\E[L, ind=\ED, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[16~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kich1=\E[@, rc=\E8, rev=\E[7m, ri=\EM, rmso=\E[m, rmul=\E[m, sc=\E7, sgr0=\E[m, smso=\E[7m, smul=\E[4m, tbc=\E[3g, ti924-8|Texas Instruments 924 VDT 8859/1 8 bit CTRL, am, xon, cols#80, it#8, lines#24, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[2J\E[H, cnorm=\E[?25h, cr=^M, csr=%i\E[%p1%d;%p2%dr, cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=%i\E[%p1%d;%p2%dH, cuu1=\E[A, cvvis=\E[?31h, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, hts=\EH, il1=\E[L, ind=\ED, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\233P, kf1=\217P, kf2=\217Q, kf3=\217R, kf4=\217S, kf5=\23316~, kf6=\23317~, kf7=\23318~, kf8=\23319~, kf9=\23320~, kich1=\233@, rc=\E8, rev=\E[7m, ri=\EM, rmso=\E[m, rmul=\E[m, sc=\E7, sgr0=\E[m, smso=\E[7m, smul=\E[4m, tbc=\E[3g, ti924w|Texas Instruments 924 VDT 7 bit - 132 column mode, cols#132, use=ti924, ti924-8w|Texas Instruments 924 VDT 8 bit - 132 column mode, cols#132, use=ti924-8, ti931|Texas Instruments 931 VDT, OTbs, am, xon, cols#80, lines#24, bel=^G, blink=\E4P, clear=\EL, cnorm=\E4@, cr=^M, cub1=\ED, cud1=\EB, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EQ, dl1=\EO, ed=\EJ, el=\EI, home=\EH, ich1=\ER\EP\EM, il1=\EN, ind=\Ea, invis=\E4H, is2=\EGB\E(@B@@\E), kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EQ, kdl1=\EO, kf1=\Ei1, kf2=\Ei2, kf3=\Ei3, kf4=\Ei4, kf5=\Ei5, kf6=\Ei6, kf7=\Ei7, kf8=\Ei8, kf9=\Ei9, kich1=\EP, kil1=\EN, rev=\E4B, ri=\Eb, rmso=\E4@, rmul=\E4@, sgr0=\E4@, smso=\E4A, smul=\E4D, ti926|Texas Instruments 926 VDT 8859/1 7 bit CTRL, csr@, ind=\E[1S, ri=\E[1T, use=ti924, # (ti926-8: I corrected this from the broken SCO entry -- esr) ti926-8|Texas Instruments 926 VDT 8859/1 8 bit CTRL, csr@, ind=\2331S, ri=\2331T, use=ti924-8, ti_ansi|basic entry for ti928, am, bce, eo, xenl, xon, colors#8, cols#80, it#8, lines#25, pairs#64, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[2J\E[H, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich1=\E[@, il1=\E[L, ind=\E[S, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[F, kf0=\E[V, kf1=\E[M, kf2=\E[N, kf3=\E[O, kf4=\E[P, kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H, knp=\E[G, kpp=\E[I, op=\E[37;40m, ri=\E[T, rmso=\E[m, rmul=\E[m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[m, smso=\E[7m, smul=\E[4m, # # 928 VDT 7 bit control mode # ti928|Texas Instruments 928 VDT 8859/1 7 bit CTRL, kdch1=\E[P, kend=\E_1\E\\, kent=\E[8~, kf1=\E[17~, kf10=\E[28~, kf11=\E[29~, kf12=\E[31~, kf13=\E[32~, kf15=\E[34~, kf2=\E[18~, kf3=\E[19~, kf4=\E[20~, kf5=\E[21~, kf6=\E[23~, kf7=\E[24~, kf8=\E[25~, kf9=\E[26~, kich1=\E[@, knp=\E[S, kpp=\E[T, kprt=\E[35~, use=ti_ansi, # # 928 VDT 8 bit control mode # ti928-8|Texas Instruments 928 VDT 8859/1 8 bit CTRL, kdch1=\233P, kend=\2371\234, kent=\2338~, kf1=\23317~, kf10=\23328~, kf11=\23329~, kf12=\23331~, kf13=\23332~, kf15=\23334~, kf2=\23318~, kf3=\23319~, kf4=\23320~, kf5=\23321~, kf6=\23323~, kf7=\23324~, kf8=\23325~, kf9=\23326~, khome=\233H, kich1=\233@, knp=\233S, kpp=\233T, kprt=\23335~, use=ti_ansi, #### Zentec (zen) # # (zen30: removed obsolete :ma=^L ^R^L^K^P:. This entry originally # had just =\EG6 which I think means standout was supposed to be # dim-reverse using ADM12-style attributes. ADM12 / and # might work-- esr) zen30|z30|zentec 30, OTbs, am, mir, ul, cols#80, lines#24, bel=^G, clear=\E*, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dim=\EG2, dl1=\ER$<1.5*>, ed=\EY, el=\ET$<1.0*>, home=^^, il1=\EE$<1.5*>, ind=^J, rmir=\Er, rmul@, smir=\Eq, smso=\EG6, smul@, use=adm+sgr, # (zen50: this had extension capabilities # :BS=^U:CL=^V:CR=^B: # UK/DK/RK/LK/HM were someone's aliases for ku/kd/kl/kr/kh, # which were also in the original entry -- esr) # (zen50: removed obsolete ":ma=^Hh^Ll^Jj^Kk:" -- esr) zen50|z50|zentec zephyr, OTbs, am, cols#80, lines#24, xmc#1, clear=\E+, cub1=^H, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, dch1=\EW, dl1=\ER, ed=\EY, el=\ET, ich1=\EQ, il1=\EE, invis@, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, rmul@, smul@, use=adm+sgr, # CCI 4574 (Office Power) from Will Martin via BRL cci|cci1|z8001|zen8001|CCI Custom Zentec 8001, OTbs, am, bw, cols#80, lines#24, blink=\EM", clear=\EH\EJ, cnorm=\EP, csr=\ER%p1%{32}%+%c%p2%{32}%+%c, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\EF\EQ\EM \ER 7, dim=\EM!, ed=\EJ, el=\EK, home=\EH, invis=\EM(, is2=\EM \EF\ET\EP\ER 7, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\EH, mc4=^T, mc5=^R, rev=\EM$, ri=\EI, rmso=\EM\s, rmul=\EM\s, sgr0=\EM\s, smso=\EM$, smul=\EM0, ######## OBSOLETE UNIX CONSOLES # #### Apollo consoles # # Apollo got bought by Hewlett-Packard. The Apollo workstations are # labeled HP700s now. # # From: Gary Darland apollo|apollo console, OTbs, am, mir, cols#88, lines#53, clear=^L, cub1=^H, cud1=\EB, cuf1=\EC, cup=\EM%p1%{32}%+%c%p2%d), cuu1=\EA, dch1=\EP, dl1=\EL, ed=\EJ, el=\EK, hpa=\EN%p1%d, il1=\EI, ind=\EE, ri=\ED, rmcup=\EX, rmir=\ER, rmso=\ET, rmul=\EV, smcup=\EW, smir=\EQ, smso=\ES, smul=\EU, vpa=\EO+\s, # We don't know whether or not the apollo guys replicated DEC's firmware bug # in the VT132 that reversed /. To be on the safe side, disable # both these capabilities. apollo_15P|apollo 15 inch display, rmir@, smir@, use=vt132, apollo_19L|apollo 19 inch display, rmir@, smir@, use=vt132, apollo_color|apollo color display, rmir@, smir@, use=vt132, #### AT&T consoles # This actually describes the generic SVr4 display driver for Intel boxes. # The isn't documented and therefore may not be reliable. # From: Eric Raymond Mon Nov 27 19:00:53 EST 1995 att6386|at386|386at|AT&T WGS 6386 console, am, bw, eo, xon, cols#80, it#8, lines#25, acsc=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[=C, clear=\E[2J\E[H, cnorm=\E[=1C, cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[1M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[1@, il=\E[%p1%dL, il1=\E[1L, ind=\E[S, indn=\E[%p1%dS, invis=\E[9m, is2=\E[0;10;39m, kbs=^H, kcbt=^], kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kend=\E[Y, kf1=\EOP, kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, khome=\E[H, kich1=\E[@, knp=\E[U, kpp=\E[V, krmir=\E0, nel=\r\E[S, rc=\E8, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmacs=\E[10m, rmso=\E[m, rmul=\E[m, sc=\E7, sgr=\E[10m\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p9%t;12%e;10%;%?%p7%t;9%;m, sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, use=klone+color, # (pc6300plus: removed ":KM=/usr/lib/ua/kmap.s5:"; renamed BO/EE/CI/CV -- esr) pc6300plus|AT&T 6300 plus, OTbs, am, xon, cols#80, lines#24, bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[=C, clear=\E[2J\E[H, cnorm=\E[=1C, cr=^M, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, dch1=\E[1P, dim=\E[2m, dl1=\E[1M, ed=\E[0J, el=\E[0K, home=\E[H, hts=\EH, ich1=\E[1@, il1=\E[1L, ind=^J, invis=\E[9m, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOc, kf10=\EOu, kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\EOk, nel=^M^J, rev=\E[7m, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, tbc=\E[3g, # From: Benjamin C. W. Sittler # # I have a UNIX PC which I use as a terminal attached to my Linux PC. # Unfortunately, the UNIX PC terminfo entry that comes with ncurses # is broken. All the special key sequences are broken, making it unusable # with Emacs. The problem stems from the following: # # The UNIX PC has a plethora of keys (103 of them, and there's no numeric # keypad!), loadable fonts, and strange highlighting modes ("dithered" # half-intensity, "smeared" bold, and real strike-out, for example.) It also # uses resizable terminal windows, but the bundled terminal program always # uses an 80x24 window (and doesn't support seem to support a 132-column # mode.) # # HISTORY: The UNIX PC was one of the first machines with a GUI, and used a # library which was a superset of SVr3.5 curses (called tam, for "terminal # access method".) tam includes support for real, overlapping windows, # onscreen function key labels, and bitmap graphics. But since the primary # user interface on the UNIX PC was a GUI program (ua, for "user # assistant",) and remote administration was considered important for the # machine, tam also supported VT100-compatible terminals attached to the # serial port or used across the StarLan network. To simulate the extra keys # not present on a VT100, users could press ESC and a two-letter sequence, # such as u d (Undo) or U D (Shift-Undo.) These two-letter sequences, # however, were not the same as those sent by the actual Undo key. The # actual Undo key sends ESC 0 s unshifted, and ESC 0 S shifted, for example. # (If you're interested in adding some of the tam calls to ncurses, btw, I # have the full documentation and several programs which use tam. It also # used an extended terminfo format to describe key sequences, special # highlighting modes, etc.) # # KEYS: This means that ncurses would quite painful on the UNIX PC, since # there are two sequences for every key-modifier combination (local keyboard # sequence and remote "VT100" sequence.) But I doubt many people are trying # to use ncurses on the UNIX PC, since ncurses doesn't properly handle the # GUI. Unfortunately, the terminfo entry (and the termcap, too, I presume) # seem to have been built from the manual describing the VT100 sequences. # This means it doesn't work for a real live UNIX PC. # # FONTS: The UNIX PC also has a strange interpretation of "alternate # character set". Rather than the VT100 graphics you might expect, it allows # up to 8 custom fonts to be loaded at any given time. This means that # programs expecting VT100 graphics will usually be disappointed. For this # reason I have disabled the smacs/rmacs sequences, but they could easily be # re-enabled. Here are the relevant control sequences (from the ESCAPE(7) # manpage), should you wish to do so: # # SGR10 - Select font 0 - ESC [ 10 m or SO # SGR11 - Select font 1 - ESC [ 11 m or SI # SGR12 - Select font 2 - ESC [ 12 m # ... (etc.) # SGR17 - Select font 7 - ESC [ 17 m # # Graphics for line drawing are not reliably found at *any* character # location because the UNIX PC has dynamically reloadable fonts. I use font # 0 for regular text and font 1 for italics, but this is by no means # universal. So ASCII line drawing is in order if smacs/rmacs are enabled. # # MISC: The cursor visible/cursor invisible sequences were swapped in the # distributed terminfo. # # To ameliorate these problems (and fix a few highlighting bugs) I rewrote # the UNIX PC terminfo entry. The modified version works great with Lynx, # Emacs, and XEmacs running on my Linux PC and displaying on the UNIX PC # attached by serial cable. In Emacs, even the Undo key works, and many # applications can now use the F1-F8 keys. # # esr's notes: # Terminfo entry for the AT&T Unix PC 7300 # from escape(7) in Unix PC 7300 Manual. # Somewhat similar to a vt100-am (but different enough # to redo this from scratch.) # # /*************************************************************** # * # * FONT LOADING PROGRAM FOR THE UNIX PC # * # * This routine loads a font defined in the file ALTFONT # * into font memory slot #1. Once the font has been loaded, # * it can be used as an alternative character set. # * # * The call to ioctl with the argument WIOCLFONT is the key # * to this routine. For more information, see window(7) in # * the PC 7300 documentation. # ***************************************************************/ # #include /* needed for strcpy call */ # #include /* needed for ioctl call */ # #define FNSIZE 60 /* font name size */ # #define ALTFONT "/usr/lib/wfont/special.8.ft" /* font file */ # /* # * The file /usr/lib/wfont/special.8.ft comes with the # * standard PC software. It defines a graphics character set # * similar to that of the Teletype 5425 terminal. To view # * this or other fonts in /usr/lib/wfont, use the command # * cfont . For further information on fonts see # * cfont(1) in the PC 7300 documentation. # */ # # struct altfdata /* structure for alt font data */ # { # short altf_slot; /* memory slot number */ # char altf_name[FNSIZE]; /* font name (file name) */ # }; # ldfont() # { # int wd; /* window in which altfont will be */ # struct altfdata altf; # altf.altf_slot=1; # strcpy(altf.altf_name,ALTFONT); # for (wd =1; wd < 12; wd++) { # ioctl(wd, WIOCLFONT,&altf); # } # } # # (att7300: added /// from the BSDI entry, # they're confirmed by the man page for the System V display---esr) # att7300|unixpc|pc7300|3b1|s4|AT&T UNIX PC Model 7300, am, xon, cols#80, it#8, lines#24, bel=^G, blink=\E[9m, bold=\E[1m, cbt=\E^I, civis=\E[=1C, clear=\E[2J\E[H, cnorm=\E[=0C, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[0J, el=\E[0K, home=\E[H, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[9m, is1=\017\E[=1w, kBEG=\ENB, kCAN=\EOW, kCPY=\END, kCRT=\EON, kDC=\ENF, kDL=\ENE, kEND=\ENN, kEOL=\EOA, kFND=\EOX, kHLP=\EOM, kHOM=\ENM, kIC=\ENJ, kLFT=\ENK, kMOV=\ENC, kNXT=\ENH, kOPT=\EOR, kPRV=\ENG, kRDO=\EOT, kRIT=\ENL, kRPL=\EOY, kSAV=\EOO, kUND=\EOS, kbeg=\ENb, kbs=^H, kcan=\EOw, kcbt=\E[Z, kclo=\EOV, kclr=\E[J, kcmd=\EOu, kcpy=\ENd, kcrt=\EOn, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\ENf, ked=\E[J, kel=\EOa, kend=\E0, kext=\EOk, kf1=\EOc, kf2=\EOd, kf3=\EOe, kf4=\EOf, kf5=\EOg, kf6=\EOh, kf7=\EOi, kf8=\EOj, kfnd=\EOx, khlp=\EOm, khome=\E[H, kich1=\ENj, kind=\E[B, kmov=\ENc, kmrk=\ENi, knp=\E[U, knxt=\ENh, kopn=\EOv, kopt=\EOr, kpp=\E[V, kprt=\EOz, kprv=\ENg, krdo=\EOt, kref=\EOb, krfr=\ENa, kri=\E[A, krpl=\EOy, krst=\EOB, ksav=\EOo, kslt=\ENI, kund=\EOs, nel=\EE, rev=\E[7m, ri=\EM, rmso=\E[m, rmul=\E[m, sgr0=\E[0;10m, smso=\E[7m, smul=\E[4m, #### Convergent Technology # # Burroughs bought Convergent shortly before it merged with Univac. # CTOS is (I believe) dead. Probably the aws is too (this entry dates # from 1991 or earlier). # # Convergent AWS workstation from Gould/SEL UTX/32 via BRL # (aws: removed unknown :dn=^K: -- esr) aws|Convergent Technologies AWS workstation under UTX and Xenix, am, OTug#0, cols#80, lines#28, xmc#0, OTbc=^H, OTma=\016h\013j\001k\022l\002m, OTnl=^J, acsc=, clear=^L, cud1=^K, cuf1=^R, cup=\EC%p2%c%p1%c, cuu1=^A, dch1=\EDC, dl1=\EDL, ed=\EEF, el=\EEL, hpa=\EH%p1%c, ich1=\EIC, il1=\EIL, ind=\ESU, kbs=^H, kcub1=^N, kcud1=^K, kcuf1=^R, kcuu1=^A, ri=\ESD, rmacs=\EAAF, rmso=\EARF, rmul=\EAUF, smacs=\EAAN, smso=\EARN, smul=\EAUN, vpa=\EV%p1%c, awsc|Convergent Technologies AWS workstation under CTOS, am, OTug#0, cols#80, lines#24, xmc#0, OTbc=^N, OTma=\016h\013j\001k\022l\002m, acsc=, clear=^L, cud1=^K, cuf1=^R, cup=\EC%p2%c%p1%c, cuu1=^A, ed=\EEF, el=\EEL, kbs=^H, kcub1=^N, kcud1=^K, kcuf1=^R, kcuu1=^A, rmacs=\EAAF, rmso=\EAA, rmul=\EAA, smacs=\EAAN, smso=\EAE, smul=\EAC, #### DEC consoles # # The MicroVax console. Tim Theisen writes: # The digital uVax II's had a graphic display called a qdss. It was # supposed to be a high performance graphic accelerator, but it was # late to market and barely appeared before faster dumb frame buffers # appeared. I have only used this display while running X11. However, # during bootup, it was in text mode, and probably had a terminal emulator # within it. And that is what your termcap entry is for. In graphics # mode the screen size is 1024x864 pixels. qdss|qdcons|qdss glass tty, OTbs, am, cols#128, lines#57, clear=\032$<1/>, cub1=^H, cud1=^J, cuf1=^L, cup=\E=%p1%c%p2%c, cuu1=^K, #### Fortune Systems consoles # # Fortune made a line of 68K-based UNIX boxes that were pretty nifty # in their day; I (esr) used one myself for a year or so around 1984. # They had no graphics, though, and couldn't compete against Suns and # the like. R.I.P. # # From: Robert Nathanson via tut Wed Oct 5, 1983 # (This had extension capabilities # :rv=\EH:re=\EI:rg=0:GG=0:\ # :CO=\E\\:WL=^Aa\r:WR=^Ab\r:CL=^Ac\r:CR=^Ad\r:DL=^Ae\r:RF=^Af\r:\ # :RC=^Ag\r:CW=^Ah\r:NU=^Aj\r:EN=^Ak\r:HM=^Al:PL=^Am\r:\ # :PU=^An\r:PD=^Ao\r:PR=^Ap\r:HP=^A@\r:RT=^Aq\r:TB=\r:CN=\177:MP=\E+F: # It had both ":bs:" and ":bs=^H:"; I removed the latter. Also, it had # ":sg=0:" and ":ug=0:"; evidently the composer was trying (unnecessarily) # to force both magic cookie glitches off. Once upon a time, I # used a Fortune myself, so I know the capabilities of the form ^A[a-z]\r are # function keys; thus the "Al" value for HM was certainly an error. I renamed # EN/PD/PU/CO/CF/RT according to the XENIX/TC mappings, but not HM/DL/RF/RC. # I think :rv: and :re: are start/end reverse video and :rg: is a nonexistent # "reverse-video-glitch" capability; I have put :rv: and :re: in with standard # names below. I've removed obsolete ":nl=5^J:" as there is a :do: -- esr) fos|fortune|Fortune system, OTbs, am, bw, cols#80, lines#25, acsc=j*k(l m"q&v%w#x-, bel=^G, blink=\EN, civis=\E], clear=\014$<20>, cnorm=\E\\, cr=^M, cub1=^H, cud1=\n$<3>, cup=\034C%p1%{32}%+%c%p2%{32}%+%c, cuu1=\013$<3>, cvvis=\E\:, dch1=\034W$<5>, dl1=\034R$<15>, ed=\034Y$<3*>, el=^\Z, home=\036$<10>, ht=^Z, ich1=\034Q$<5>, il1=\034E$<15>, ind=^J, is2=^_.., kbs=^H, kcub1=^Aw\r, kcud1=^Ay\r, kcuf1=^Az\r, kcuu1=^Ax\r, kend=^Ak\r, kent=^Aq, kf1=^Aa\r, kf2=^Ab\r, kf3=^Ac\r, kf4=^Ad\r, kf5=^Ae\r, kf6=^Af\r, kf7=^Ag\r, kf8=^Ah\r, khome=^A?\r, knp=^Ao\r, kpp=^An\r, nel=^M^J, rev=\EH, rmacs=^O, rmso=^\I`, rmul=^\IP, sgr0=\EI, smacs=\Eo, smso=^\H`, smul=^\HP, #### Masscomp consoles # # Masscomp has gone out of business. Their product line was purchased by # comany in Georgia (US) called "XS International", parts and service may # still be available through them. # # (masscomp: ":MT:" changed to ":km:"; -- esr) masscomp|masscomp workstation console, OTbs, km, mir, cols#80, it#8, lines#24, clear=\E[2J, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, ht=^I, il1=\E[L, is2=\EGc\EGb\EGw, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, rmir=\E[4l, rmso=\E[m, rmul=\EGau, smir=\E[4h, smso=\E[7m, smul=\EGu, masscomp1|masscomp large screen version 1, cols#104, lines#36, use=masscomp, masscomp2|masscomp large screen version 2, cols#64, lines#21, use=masscomp, #### OSF Unix # # OSF/1 1.1 Snapshot 2 pmcons|pmconsole|PMAX console, am, cols#128, lines#57, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuu1=^K, ht=^I, ind=^J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, #### Other consoles # The following is a version of the ibm-pc entry distributed with PC/IX, # (Interactive Systems' System 3 for the Big Blue), modified by Richard # McIntosh at UCB/CSM. The :pt: and :uc: have been removed from the original, # (the former is untrue, and the latter failed under UCB/man); standout and # underline modes have been added. Note: this entry describes the "native" # capabilities of the PC monochrome display, without ANY emulation; most # communications packages (but NOT PC/IX connect) do some kind of emulation. pcix|PC/IX console, am, bw, eo, cols#80, lines#24, clear=\Ec, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%2d;%p2%2dH, cuu1=\E[A, ed=\E[J, el=\E[K, home=\E[H, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smso=\E[7m, smul=\E[4m, # (ibmpcx: this entry used to be known as ibmx. # It formerly included the following extension capabilities: # :GC=b:GL=v:GR=t:RT=^J:\ # :GH=\E[196g:GV=\E[179g:\ # :GU=\E[193g:GD=\E[194g:\ # :G1=\E[191g:G2=\E[218g:G3=\E[192g:G4=\E[217g:\ # :CW=\E[E:NU=\E[F:RF=\E[G:RC=\E[H:\ # :WL=\E[K:WR=\E[L:CL=\E[M:CR=\E[N:\ # I renamed GS/GE/WL/WR/CL/CR/PU/PD/HM/EN; also, removed a duplicate # ":kh=\E[Y:". Added IBM-PC forms characters and highlights, they match # what was there before. -- esr) ibmpcx|xenix|ibmx|IBM PC xenix console display, OTbs, am, msgr, cols#80, lines#25, clear=^L, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ich1=\E[@, il1=\E[L, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[d, kf1=\E[K, kf2=\E[L, kf3=\E[M, kf4=\E[N, khome=\E[Y, knp=\E[e, kpp=\E[Z, use=klone+acs, use=klone+sgr8, ######## OTHER OBSOLETE TYPES # # These terminals are *long* dead -- these entries are retained for # historical interest only. # #### Obsolete non-ANSI software emulations # # CTRM terminal emulator # 1. underlining is not allowed with colors: first, is is simulated by # black on white, second, it disables background color manipulations. # 2. BLINKING, REVERSE and BOLD are allowed with colors, # so we have to save their status in the static registers A, B and H # respectively, to be able to restore them when color changes # (because any color change turns off ALL attributes) # 3. and sequences alternate modes, # rather than simply entering them. Thus we have to check the # static register B and H to determine the status, before sending the # escape sequence. # 4. now must set the status of all 3 register (A,B,H) to zero # and then reset colors # 5. implementation of the protect mode would badly penalize the performance. # we would have to use \E&bn sequence to turn off colors (as well as all # other attributes), and keep the status of protect mode in yet another # static variable. If someone really needs this mode, they would have to # create another terminfo entry. # 6. original color-pair is white on black. # store the information about colors into static registers # 7. set foreground color. it performs the following steps. # 1) turn off all attributes # 2) turn on the background and video attributes that have been turned # on before (this information is stored in static registers X,Y,Z,A,B,H,D). # 3) turn on foreground attributes # 4) store information about foreground into U,V,W static registers # 8. turn on background: similar to turn on foreground above ctrm|C terminal emulator, am, bce, xon, colors#8, cols#80, lh#0, lines#24, lm#0, lw#0, ncv#2, nlab#0, pairs#63, pb#19200, vt#6, bel=^G, blink=\E&dA%{1}%PA, bold=%?%gH%{0}%=%t\E&dH%{1}%PH%;, cbt=\Ei, clear=\EH\EJ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\E&a%p2%dc%p1%dY, cuu1=\EA, dch1=\EP$<2>, dl1=\EM, ed=\EJ, el=\EK, hpa=\E&a%p1%dC, ht=\011$<2>, hts=\E1, il1=\EL, ind=^J, ip=$<2>, is2=\E&jA\r, kbs=^H, kcub1=\Eu\r, kcud1=\Ew\r, kcuf1=\Ev\r, kcuu1=\Et\r, kf1=\Ep\r, kf2=\Eq\r, kf3=\Er\r, kf4=\Es\r, kf5=\Et\r, kf6=\Eu\r, kf7=\Ev\r, kf8=\Ew\r, khome=\Ep\r, op=\E&bn\E&bB\E&bG\E&bR%{0}%PX%{0}%PY%{0}%PZ%{1}%PW%{1}%PV%{1}%PU, rev=%?%gB%{0}%=%t\E&dB%{1}%PB%;, rmir=\ER, rmkx=\E&jA, setb=\E&bn%?%gA%t\E&dA%;%?%gB%t\E&dB%;%?%gH%t\E&dH%;%?%gU%t\E&bR%;%?%gV%t\E&bG%;%?%gW%t\E&bB%;%?%p1%{1}%&%t\E&bb%{1}%e%{0}%;%PZ%?%p1%{2}%&%t\E&bg%{1}%e%{0}%;%PY%?%p1%{4}%&%t\E&br%{1}%e%{0}%;%PX, setf=\E&bn%?%gA%t\E&dA%;%?%gB%t\E&dB%;%?%gH%t\E&dH%;%?%gX%t\E&br%;%?%gY%t\E&bg%;%?%gZ%t\E&bb%;%?%p1%{1}%&%t\E&bB%{1}%e%{0}%;%PW%?%p1%{2}%&%t\E&bG%{1}%e%{0}%;%PV%?%p1%{4}%&%t\E&bR%{1}%e%{0}%;%PU, sgr=\E&d@%{0}%PA%{0}%PB%{0}%PD%{0}%PH%?%p1%p3%p5%|%|%t\E&dB%{1}%PB%;%?%p4%t\E&dA%{1}%PA%;%?%p6%t\E&dH%{1}%PH%;%?%p2%t\E&dD%;, sgr0=\E&d@%{0}%PA%{0}%PB%{0}%PH, smir=\EQ, smkx=\E&jB, smso=\E&dD, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY, # gs6300 - can't use blue foreground, it clashes with underline; # it's simulated with cyan # Bug: The capability probably resets attributes. # (gs6300: commented out (no ) --esr) gs6300|emots|AT&T PC6300 with EMOTS terminal emulator, am, bce, msgr, xon, colors#8, cols#80, it#8, lines#24, pairs#63, acsc=++\,\,--..``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E[m, kbs=^H, kcbt=^R^I, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\E[0s, kf2=\E[24s, kf3=\E[1s, kf4=\E[23s, kf5=\E[2s, kf6=\E[22s, kf7=\E[3s, kf8=\E[21s, khome=\E[H, mc4=\E[4i, mc5=\E[5i, op=\E[?;m, rev=\E[7m, ri=\E[L, rmacs=\E[10m, rs1=\Ec, setb=\E[?;%p1%dm, setf=\E[?%?%p1%{0}%=%t0%e%p1%{1}%=%t2%e%p1%{1}%-%d%;m, sgr0=\E[m\E[10m, smacs=\E[11m, smso=\E[1m, smul=\E[4m, # From: 29 Oct 85 05:40:18 GMT # MS-Kermit with Heath-19 emulation mode enabled # (h19k: changed ":pt@:" to ":it@" h19k|h19kermit|heathkit emulation provided by Kermit (no auto margin), am@, da, db, xt, it@, ht@, use=h19-u, # Apple Macintosh with Versaterm, a terminal emulator distributed by Synergy # Software (formerly Peripherals Computers & Supplies, Inc) of # 2457 Perkiomen Ave., Reading, PA 19606, 1-800-876-8376. They can # also be reached at support@synergy.com. versaterm|versaterm vt100 emulator for the macintosh, am, xenl, cols#80, it#8, lines#24, bel=^G, blink=\E[5m$<2/>, bold=\E[1m$<2/>, clear=\E[;H\E[2J$<50/>, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C$<2/>, cup=\E[%i%p1%d;%p2%dH$<5/>, cuu1=\E[A$<2/>, dch1=\E[1P$<7/>, dl1=\E[1M$<9/>, ed=\E[J$<50/>, el=\E[K$<3/>, home=\E[H, ht=^I, ich1=\E[1@$<7/>, il1=\E[1L$<9/>, is2=\E[1;24r\E[24;1H, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, nel=^M^J, rc=\E8, rev=\E[7m$<2/>, rf=/usr/share/tabset/vt100, ri=\EM$<5/>, rmkx=\E>\E[?1l, rmso=\E[m$<2/>, rmul=\E[m$<2/>, rs1=\E>, sc=\E7, sgr0=\E[m$<2/>, smkx=\E=\E[?1h, smso=\E[7m$<2/>, smul=\E[4m$<2/>, # From: Rick Thomas # (xtalk: I added / based on the init string. xtalk|IBM PC with xtalk communication program (versions up to 3.4), am, mir, msgr, xon, cols#80, it#8, lines#24, vt#3, xmc#1, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, clear=\E[H\E[J$<50>, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C$<2>, cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA, cuu1=\E[A$<2>, dl1=\E[M$<99>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, il1=\E[L$<99>, ind=^J, kbs=^H, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m\s, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sgr0=\E[m, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m\s, tbc=\E[3g, use=vt100+fnkeys, # The official PC terminal emulator program of the AT&T Product Centers. # Note - insert mode commented out - doesn't seem to work on AT&T PC. simterm|attpc running simterm, am, cols#80, lines#24, bel=^G, clear=\EH\EJ, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\ER, dl1=\EM, ed=\EJ, el=\EK, home=\EH, il1=\EL, ind=^J, rmcup=\EVE, rmso=\E&d@, sgr0=\E&d@, smcup=\EVS, smso=\E&dB, #### Daisy wheel printers # # This section collects Diablo, DTC, Xerox, Qume, and other daisy # wheel terminals. These are now largely obsolete. # # (diablo1620: removed , no such file -- esr) diablo1620|diablo1720|diablo450|ipsi|diablo 1620, hc, os, cols#132, it#8, cub1=^H, cud1=^J, cuu1=\E^J, hd=\ED, hpa=\E\011%i%p1%c, ht=^I, hts=\E1, hu=\EU, kbs=^H, tbc=\E2, diablo1620-m8|diablo1640-m8|diablo 1620 w/8 column left margin, cols#124, is2=\r \E9, use=diablo1620, # (diablo1640: removed , no such file -- esr) diablo1640|diablo1730|diablo1740|diablo630|x1700|diablo|xerox|diablo 1640, bel=^G, rmso=\E&, rmul=\ER, smso=\EW, smul=\EE, use=diablo1620, # (diablo1640-lm: removed , no such # file -- esr) diablo1640-lm|diablo-lm|xerox-lm|diablo 1640 with indented left margin, cols#124, rmso=\E&, rmul=\ER, smso=\EW, smul=\EE, use=diablo1620, diablo1740-lm|630-lm|1730-lm|x1700-lm|diablo 1740 printer, use=diablo1640-lm, # DTC 382 with VDU. Has no so we fake it with . Standout # works but won't go away without dynamite . # The terminal has tabs, but I'm getting tired of fighting the braindamage. # If no tab is set or the terminal's in a bad mood, it glitches the screen # around all of memory. Note that return puts a blank ("a return character") # in the space the cursor was at, so we use ^P return (and thus ^P newline for # newline). Note also that if you turn off :pt: and let Unix expand tabs, # curses won't work (some old BSD versions) because it doesn't clear this bit, # and cursor addressing sends a tab for row/column 9. What a losing terminal! # I have been unable to get tabs set in all 96 lines - it always leaves at # least one line with no tabs in it, and once you tab through that line, # it completely weirds out. # (dtc382: change to -- it just does a clear --esr) dtc382|DTC 382, am, da, db, xhp, cols#80, lines#24, lm#96, bel=^G, clear=\020\035$<20>, cnorm=^Pb, cr=^P^M, cub1=^H, cuf1=^PR, cup=\020\021%p2%c%p1%c, cuu1=^P^L, cvvis=^PB, dch1=^X, dl1=^P^S, ed=\020\025\020\023\020\023, el=^P^U, home=^P^R, il1=^P^Z, ind=^J, pad=\177, rmcup=, rmir=^Pi, rmul=^P \0, smcup=\020\035$<20>, smir=^PI, smul=^P ^P, dtc300s|DTC 300s, hc, os, cols#132, bel=^G, cr=^M, cub1=^H, cud1=^J, cuu1=^Z, ff=^L, hd=\Eh, ht=^I, hts=\E1, hu=\EH, ind=^J, kbs=^H, tbc=\E3, gsi|mystery gsi terminal, hc, os, cols#132, bel=^G, cr=^M, cub1=^H, cud1=^J, cuu1=^Z, hd=\Eh, ht=^I, hu=\EH, ind=^J, aj830|aj832|aj|anderson jacobson, hc, os, bel=^G, cr=^M, cub1=^H, cud1=^J, cuu1=\E7, hd=\E9, hu=\E8, ind=^J, # From: Chris Torek Thu, 7 Nov 85 18:21:58 EST aj510|Anderson-Jacobson model 510, am, mir, cols#80, lines#24, clear=^L, cub1=^H, cuf1=\EX, cup=\E#%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EY, dch1=\E'D$<.1*>, dl1=\E&D$<2*/>, ed=\E'P, el=\E'L, ich1=, il1=\E&I$<2*/>, ip=$<.1*/>, kcub1=\EW, kcud1=\EZ, kcuf1=\EX, kcuu1=\EY, pad=\177, rmcup=\E"N, rmir=\E'J, rmso=\E"I, rmul=\E"U, smcup=\E"N, smir=\E'I, smso=\E"I, smul=\E"U, # From: Thu Aug 20 09:09:18 1981 # This is incomplete, but it's a start. nec5520|nec|spinwriter|nec 5520, hc, os, cols#132, it#8, bel=^G, cr=^M, cub1=^H, cud1=^J, cuu1=\E9, ff=^L, hd=\E]s\n\E]W, ht=^I, hts=\E1, hu=\E]s\E9\E]W, ind=^J, kbs=^H, tbc=\E3, qume5|qume|Qume Sprint 5, hc, os, cols#80, it#8, bel=^G, cr=^M, cub1=^H, cud1=^J, cuu1=^Z, ff=^L, hd=\Eh, ht=^I, hts=\E1, hu=\EH, ind=^J, kbs=^H, tbc=\E3, # I suspect the xerox 1720 is the same as the diablo 1620. xerox1720|x1720|x1750|xerox 1720, hc, os, cols#132, it#8, bel=^G, cr=^M, cub1=^H, cud1=^J, ff=^L, ht=^I, hts=\E1, ind=^J, tbc=\E2, #### Miscellaneous obsolete terminals, manufacturers unknown # # If you have any information about these (like, a manufacturer's name, # and a date on the serial-number plate) please send it! cad68-3|cgc3|cad68 basic monitor transparent mode size 3 chars, OTbs, am, cols#73, lines#36, clear=^Z, cub1=^H, cuf1=^L, cuu1=^K, home=^^, cad68-2|cgc2|cad68 basic monitor transparent mode size 2 chars, OTbs, am, cols#85, lines#39, clear=^Z, cub1=^H, cuf1=^L, cuu1=^K, home=^^, kcub1=\E3, kcud1=\E2, kcuf1=\E4, kcuu1=\E1, kf1=\E5, kf2=\E6, kf3=\E7, kf4=\E8, rmso=\Em^C, smso=\Em^L, cops10|cops|cops-10|cops 10, am, bw, cols#80, lines#24, bel=^G, clear=\030$<30/>, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\020%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, ed=^W, el=^V, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^Y, # (d132: removed duplicate :ic=\E5:, # merged in capabilities from a BRL entry -- esr) d132|datagraphix|datagraphix 132a, da, db, in, cols#80, lines#30, bel=^G, clear=^L, cnorm=\Em\En, cr=^M, cub1=^H, cud1=^J, cuf1=\EL, cup=\E8%i%p1%3d%p2%3d, cuu1=\EK, cvvis=\Ex, dch1=\E6, home=\ET, ht=^I, ich1=\E5, il1=\E3, ind=^J, kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, ri=\Ew, # The d800 was an early portable terminal from c.1984-85 that looked a lot # like the original Compaq `lunchbox' portable (but no handle). It had a vt220 # mode (which is what this entry looks like) and several other lesser-known # emulations. d800|Direct 800/A, OTbs, am, da, db, msgr, xhp, cols#80, it#8, lines#24, acsc=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~, bel=^G, clear=\E[1;1H\E[2J, cnorm=\E[>12h, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, cvvis=\E[>12l, ed=\E[J, el=\E[K, ht=^I, ind=\ED, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, ri=\EM, rmacs=\E[m, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smacs=\E[1m, smso=\E[7m, smul=\E[4m, digilog|digilog 333, OTbs, cols#80, lines#16, bel=^G, cr=^M, cub1=^H, cud1=^J, cuf1=^I, cuu1=^O, el=^X, home=^N, ind=^J, # The DWK was a terminal manufactured in the Soviet Union c.1986 dwk|dwk-vt|dwk terminal, am, cols#80, it#8, lines#24, acsc=+\^\,Q-S.M0\177`+a\:f'g#h#i#jXkClJmFnNo~qUs_tEuPv\\wKxW~_, bel=^G, clear=\EH\EJ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EP, ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\EQ, ind=^J, kbs=\177, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\Ee, kf1=\Ef1, kf10=\Ef0, kf2=\Ef2, kf3=\Ef3, kf4=\Ef4, kf5=\Ef5, kf6=\Ef6, kf7=\Ef7, kf8=\Ef8, kf9=\Ef9, kich1=\Ed, knp=\Eh, kpp=\Eg, nel=^M^J, rev=\ET, ri=\ES, rmacs=\EG, rmso=\EX, sgr0=\EX, smacs=\EF, smso=\ET, env230|envision230|envision 230 graphics terminal, xenl@, enacs@, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rmacs@, sgr=\E[0%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m$<2>, sgr0=\E[0m$<2>, smacs@, use=vt100, # These execuports were impact-printer ttys with a 30- or maybe 15-cps acoustic # coupler attached, the whole rig fitting in a suitcase and more or less # portable. Hot stuff for c.1977 :-) -- esr ep48|ep4080|execuport 4080, OTbs, am, os, cols#80, bel=^G, cr=^M, cub1=^H, cud1=^J, hd=^\, hu=^^, ind=^J, ep40|ep4000|execuport 4000, cols#136, use=ep4080, # Adam Thompson tells us: # Informer series - these are all portable units, resembling older # automatic bread-baking machines. The terminal looks like a `clamshell' # design, but isn't. The structure is similar to the Direct terminals, # but only half the width. The entire unit is only about 10" wide. # It features an 8" screen (6" or 7" if you have color!), and an 9"x6" # keyboard. All the keys are crammed together, much like some laptop # PCs today, but perhaps less well organized...all these units have a # bewildering array of plugs on the back, including a built-in modem. # The 305 was a color version of the 304; the 306 and 307 were mono and # color terminals built for IBM bisync protocols. # From: Paul Leondis ifmr|Informer D304, OTbs, am, cols#80, lines#24, clear=\EZ, cub1=^H, cud1=^J, cuf1=\EC, cup=\EY%p2%{32}%+%c%p1%{32}%+%c, cuu1=\EA, dch1=\E\\, ed=\E/, el=\EQ, home=\EH, ich1=\E[, ri=\En, rmso=\EK, sgr0=\EK, smso=\EJ, # Entry largely based on wy60 and has the features of wy60ak. opus3n1+|Esprit Opus3n1+ in wy60 mode with ANSI arrow keys, am, bw, hs, km, mir, msgr, ul, xon, cols#80, lh#1, lines#24, lw#8, nlab#8, wsl#80, acsc=0wa_h[jukslrmqnxqzttuyv]wpxv, bel=^G, blink=\EG2, cbt=\EI, civis=\E`0, clear=\E*$<100>, cnorm=\E`1, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\Ea%i%p1%dR%p2%dC, cuu1=^K, dch1=\EW$<11>, dim=\EGp, dl1=\ER$<5>, dsl=\Ez(\r, ed=\EY$<100>, el=\ET, fsl=^M, home=\036$<2>, ht=\011$<5>, hts=\E1, if=/usr/share/tabset/std, il1=\EE$<4>, ind=^J, ip=$<3>, is2=\E`\:\Ee(\EO\Ee6\Ec41\E~4\Ec21\Ed/\Ezz&\E[A\177\Ezz'\E[B\177\Ezz(\E[D\177\Ezz)\E[C\177\Ezz<\E[Q\177\Ezz`\E[F\177\EA1*\EZH12, kHOM=\E{, kbs=^H, kcbt=\EI, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\EW, kdl1=\ER, ked=\EY, kel=\ET, kend=\E[F, kent=\E7, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, mc0=\EP, mc4=^T, mc5=^R, nel=\r\n$<3>, pfloc=\EZ2%p1%{63}%+%c%p2%s\177, pfx=\EZ1%p1%{63}%+%c%p2%s\177, pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<7>, rmacs=\EH^C, rmam=\Ed., rmcup=, rmir=\Er, rmln=\EA11, rmxon=\Ec20, rs1=\E~!\E~4$<150>, rs2=\EeF$<150>, rs3=\EwG\Ee($<150>, sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;\EG%{48}%?%p2%t%{8}%|%;%?%p1%p3%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c, sgr0=\E(\EH\003\EG0\EcD, smacs=\EH^B, smam=\Ed/, smcup=\Ezz&\E[A\177\Ezz'\E[B\177\Ezz(\E[D\177\Ezz)\E[C\177\Ezz<\E[Q\177, smir=\Eq, smln=\EA10, smxon=\Ec21, tbc=\E0, tsl=\Ez(, uc=\EG8\EG0, use=adm+sgr, teletec|Teletec Datascreen, OTbs, am, cols#80, lines#24, bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=^_, cuu1=^K, home=^^, ind=^J, # From: Mark Dornfeld # This description is for the LANPAR Technologies VISION 3220 # terminal from 1984/85. The function key definitions k0-k5 represent the # edit keypad: FIND, INSERT HERE, REMOVE, SELECT, PREV SCREEN, # NEXT SCREEN. The key definitions k6-k9 represent the PF1 to PF4 keys. # # Kenneth Randell writes on 31 Dec 1998: # I had a couple of scopes (3221) like this once where I used to work, around # the 1987 time frame if memory serves me correctly. These scopes were made # by an outfit called LANPAR Technologies, and were meant to me DEC VT 220 # compatible. The 3220 was a plain text terminal like the VT-220, the 3221 # was a like the VT-240 (monochrome with Regis + Sixel graphics), and the 3222 # was like the VT-241 (color with Regis + Sixel Graphics). These terminals # (3221) cost about $1500 each, and one was always broken -- had to be sent # back to the shop for repairs. # The only real advantage these scopes had over the VT-240's were: # 1) They were faster in the Regis display, or at least the ones I did # 2) They had a handy debugging feature where you could split-screen the # scope, the graphics would appear on the top, and the REGIS commands would # appear on the bottom. I don't remember the VT-240s being able to do that. # I would swear that LANPAR Technologies was in MA someplace, but since I # don't work at the same place anymore, and those terminals and manuals were # long since junked, I cannot be any more sure than that. # # (v3220: removed obsolete ":kn#10:", # I added / based on the init string -- esr) v3220|LANPAR Vision II model 3220/3221/3222, OTbs, am, mir, xenl, cols#80, it#8, lines#24, clear=\E[H\E[J, cub1=^H, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, ht=^I, il1=\E[L, is2=\E>\E[?3l\E[?7h\E[?8h\E[p, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf0=\E[1~, kf1=\E[2~, kf2=\E[3~, kf3=\E[4~, kf4=\E[5~, kf5=\E[6~, kf6=\E[OP, kf7=\E[OQ, kf8=\E[OR, kf9=\E[OS, khome=\E[H, ri=\EM, rmam=\E[?7l, rmir=\E[4l, rmkx=\E>, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smam=\E[?7h, smir=\E[4h, smkx=\E=, smso=\E[7m, smul=\E[4m, ######## ICH/ICH1 VERSUS RMIR/SMIR # # Some non-curses applications get confused if both ich/ich1 and rmir/smir # are present; the symptom is doubled characters in an update using insert. # These applications are technically correct; in both 4.3BSD termcap and # terminfo, you're not actually supposed to specify both ich/ich1 and rmir/smir # unless the terminal needs both. To my knowledge, no terminal still in this # file requires both other than the very obsolete dm2500. # # For ncurses-based applications this is not a problem, as ncurses uses # one or the other as appropriate but never mixes the two. Therefore we # have not corrected entries like `linux' and `xterm' that specify both. # If you see doubled characters from these, use the linux-nic and xterm-nic # entries that suppress ich/ich1. And upgrade to ncurses! # ######## VT100/ANSI/ISO 6429/ECMA-48/PC-TERM TERMINAL STANDARDS # # ANSI X3.64 has been withdrawn and replaced by ECMA-48. The ISO 6429 and # ECMA-48 standards are said to be almost identical, but are not the same # as X3.64 (though for practical purposes they are close supersets of it). # # You can obtain ECMA-48 for free by sending email to helpdesk@ecma.ch # requesting the standard(s) you want (i.e. ECMA-48, "Control Functions for # Coded Character Sets"), include your snail-mail address, and you should # receive the document in due course. Don't expect an email acknowledgement. # # Related standards include "X3.4-1977: American National Standard Code for # Information Interchange" (the ASCII standard) and "X3.41.1974: # Code-Extension Techniques for Use with the 7-Bit Coded Character Set of # American National Standard for Information Interchange." I believe (but # am not certain) that these are effectively identical to ECMA-6 and ECMA-35 # respectively. # #### VT100/ANSI/ECMA-48 # # ANSI Standard (X3.64) Control Sequences for Video Terminals and Peripherals # and ECMA-48 Control Functions for Coded Character Sets. # # Much of the content of this comment is adapted from a table prepared by # Richard Shuford, based on a 1984 Byte article. Terminfo correspondences, # discussion of some terminfo-related issues, and updates to capture ECMA-48 # have been added. Control functions described in ECMA-48 only are tagged # with * after their names. # # The table is a complete list of the defined ANSI X3.64/ECMA-48 control # sequences. In the main table, \E stands for an escape (\033) character, # SPC for space. Pn stands for a single numeric parameter to be inserted # in decimal ASCII. Ps stands for a list of such parameters separated by # semicolons. Parameter meanings for most parametrized sequences are # decribed in the notes. # # Sequence Sequence Parameter or # Mnemonic Name Sequence Value Mode terminfo # ----------------------------------------------------------------------------- # APC Applicatn Program Command \E _ - Delim - # BEL Bell * ^G - - bel # BPH Break Permitted Here * \E B - * - # BS Backpace * ^H - EF - # CAN Cancel * ^X - - - (A) # CBT Cursor Backward Tab \E [ Pn Z 1 eF cbt # CCH Cancel Previous Character \E T - - - # CHA Cursor Horizntal Absolute \E [ Pn G 1 eF hpa (B) # CHT Cursor Horizontal Tab \E [ Pn I 1 eF tab (C) # CMD Coding Method Delimiter * \E # CNL Cursor Next Line \E [ Pn E 1 eF nel (D) # CPL Cursor Preceding Line \E [ Pn F 1 eF - # CPR Cursor Position Report \E [ Pn ; Pn R 1, 1 - - (E) # CSI Control Sequence Intro \E [ - Intro - # CTC Cursor Tabulation Control \E [ Ps W 0 eF - (F) # CUB Cursor Backward \E [ Pn D 1 eF cub # CUD Cursor Down \E [ Pn B 1 eF cud # CUF Cursor Forward \E [ Pn C 1 eF cuf # CUP Cursor Position \E [ Pn ; Pn H 1, 1 eF cup (G) # CUU Cursor Up \E [ Pn A 1 eF cuu # CVT Cursor Vertical Tab \E [ Pn Y - eF - (H) # DA Device Attributes \E [ Pn c 0 - - # DAQ Define Area Qualification \E [ Ps o 0 - - # DCH Delete Character \E [ Pn P 1 eF dch # DCS Device Control String \E P - Delim - # DL Delete Line \E [ Pn M 1 eF dl # DLE Data Link Escape * ^P - - - # DMI Disable Manual Input \E \ - Fs - # DSR Device Status Report \E [ Ps n 0 - - (I) # DTA Dimension Text Area * \E [ Pn ; Pn SPC T - PC - # EA Erase in Area \E [ Ps O 0 eF - (J) # ECH Erase Character \E [ Pn X 1 eF ech # ED Erase in Display \E [ Ps J 0 eF ed (J) # EF Erase in Field \E [ Ps N 0 eF - # EL Erase in Line \E [ Ps K 0 eF el (J) # EM End of Medium * ^Y - - - # EMI Enable Manual Input \E b Fs - # ENQ Enquire ^E - - - # EOT End Of Transmission ^D - * - # EPA End of Protected Area \E W - - - (K) # ESA End of Selected Area \E G - - - # ESC Escape ^[ - - - # ETB End Transmission Block ^W - - - # ETX End of Text ^C - - - # FF Form Feed ^L - - - # FNK Function Key * \E [ Pn SPC W - - - # GCC Graphic Char Combination* \E [ Pn ; Pn SPC B - - - # FNT Font Selection \E [ Pn ; Pn SPC D 0, 0 FE - # GSM Graphic Size Modify \E [ Pn ; Pn SPC B 100, 100 FE - (L) # GSS Graphic Size Selection \E [ Pn SPC C none FE - # HPA Horz Position Absolute \E [ Pn ` 1 FE - (B) # HPB Char Position Backward \E [ j 1 FE - # HPR Horz Position Relative \E [ Pn a 1 FE - (M) # HT Horizontal Tab * ^I - FE - (N) # HTJ Horz Tab w/Justification \E I - FE - # HTS Horizontal Tab Set \E H - FE hts # HVP Horz & Vertical Position \E [ Pn ; Pn f 1, 1 FE - (G) # ICH Insert Character \E [ Pn @ 1 eF ich # IDCS ID Device Control String \E [ SPC O - * - # IGS ID Graphic Subrepertoire \E [ SPC M - * - # IL Insert Line \E [ Pn L 1 eF il # IND Index \E D - FE - # INT Interrupt \E a - Fs - # JFY Justify \E [ Ps SPC F 0 FE - # IS1 Info Separator #1 * ^_ - * - # IS2 Info Separator #1 * ^^ - * - # IS3 Info Separator #1 * ^] - * - # IS4 Info Separator #1 * ^\ - * - # LF Line Feed ^J - - - # LS1R Locking Shift Right 1 * \E ~ - - - # LS2 Locking Shift 2 * \E n - - - # LS2R Locking Shift Right 2 * \E } - - - # LS3 Locking Shift 3 * \E o - - - # LS3R Locking Shift Right 3 * \E | - - - # MC Media Copy \E [ Ps i 0 - - (S) # MW Message Waiting \E U - - - # NAK Negative Acknowledge * ^U - * - # NBH No Break Here * \E C - - - # NEL Next Line \E E - FE nel (D) # NP Next Page \E [ Pn U 1 eF - # NUL Null * ^@ - - - # OSC Operating System Command \E ] - Delim - # PEC Pres. Expand/Contract * \E Pn SPC Z 0 - - # PFS Page Format Selection * \E Pn SPC J 0 - - # PLD Partial Line Down \E K - FE - (T) # PLU Partial Line Up \E L - FE - (U) # PM Privacy Message \E ^ - Delim - # PP Preceding Page \E [ Pn V 1 eF - # PPA Page Position Absolute * \E [ Pn SPC P 1 FE - # PPB Page Position Backward * \E [ Pn SPC R 1 FE - # PPR Page Position Forward * \E [ Pn SPC Q 1 FE - # PTX Parallel Texts * \E [ \ - - - # PU1 Private Use 1 \E Q - - - # PU2 Private Use 2 \E R - - - # QUAD Typographic Quadding \E [ Ps SPC H 0 FE - # REP Repeat Char or Control \E [ Pn b 1 - rep # RI Reverse Index \E M - FE - (V) # RIS Reset to Initial State \E c - Fs - # RM Reset Mode * \E [ Ps l - - - (W) # SACS Set Add. Char. Sep. * \E [ Pn SPC / 0 - - # SAPV Sel. Alt. Present. Var. * \E [ Ps SPC ] 0 - - (X) # SCI Single-Char Introducer \E Z - - - # SCO Sel. Char. Orientation * \E [ Pn ; Pn SPC k - - - # SCS Set Char. Spacing * \E [ Pn SPC g - - - # SD Scroll Down \E [ Pn T 1 eF rin # SDS Start Directed String * \E [ Pn ] 1 - - # SEE Select Editing Extent \E [ Ps Q 0 - - (Y) # SEF Sheet Eject & Feed * \E [ Ps ; Ps SPC Y 0,0 - - # SGR Select Graphic Rendition \E [ Ps m 0 FE sgr (O) # SHS Select Char. Spacing * \E [ Ps SPC K 0 - - # SI Shift In ^O - - - (P) # SIMD Sel. Imp. Move Direct. * \E [ Ps ^ - - - # SL Scroll Left \E [ Pn SPC @ 1 eF - # SLH Set Line Home * \E [ Pn SPC U - - - # SLL Set Line Limit * \E [ Pn SPC V - - - # SLS Set Line Spacing * \E [ Pn SPC h - - - # SM Select Mode \E [ Ps h none - - (W) # SO Shift Out ^N - - - (Q) # SOH Start Of Heading * ^A - - - # SOS Start of String * \E X - - - # SPA Start of Protected Area \E V - - - (Z) # SPD Select Pres. Direction * \E [ Ps ; Ps SPC S 0,0 - - # SPH Set Page Home * \E [ Ps SPC G - - - # SPI Spacing Increment \E [ Pn ; Pn SPC G none FE - # SPL Set Page Limit * \E [ Ps SPC j - - - # SPQR Set Pr. Qual. & Rapid. * \E [ Ps SPC X 0 - - # SR Scroll Right \E [ Pn SPC A 1 eF - # SRCS Set Reduced Char. Sep. * \E [ Pn SPC f 0 - - # SRS Start Reversed String * \E [ Ps [ 0 - - # SSA Start of Selected Area \E F - - - # SSU Select Size Unit * \E [ Pn SPC I 0 - - # SSW Set Space Width * \E [ Pn SPC [ none - - # SS2 Single Shift 2 (G2 set) \E N - Intro - # SS3 Single Shift 3 (G3 set) \E O - Intro - # ST String Terminator \E \ - Delim - # STAB Selective Tabulation * \E [ Pn SPC ^ - - - # STS Set Transmit State \E S - - - # STX Start pf Text * ^B - - - # SU Scroll Up \E [ Pn S 1 eF indn # SUB Substitute * ^Z - - - # SVS Select Line Spacing * \E [ Pn SPC \ 1 - - # SYN Synchronous Idle * ^F - - - # TAC Tabul. Aligned Centered * \E [ Pn SPC b - - - # TALE Tabul. Al. Leading Edge * \E [ Pn SPC a - - - # TATE Tabul. Al. Trailing Edge* \E [ Pn SPC ` - - - # TBC Tab Clear \E [ Ps g 0 FE tbc # TCC Tabul. Centered on Char * \E [ Pn SPC c - - - # TSR Tabulation Stop Remove * \E [ Pn SPC d - FE - # TSS Thin Space Specification \E [ Pn SC E none FE - # VPA Vert. Position Absolute \E [ Pn d 1 FE vpa # VPB Line Position Backward * \E [ Pn k 1 FE - # VPR Vert. Position Relative \E [ Pn e 1 FE - (R) # VT Vertical Tabulation * ^K - FE - # VTS Vertical Tabulation Set \E J - FE - # # --------------------------------------------------------------------------- # # Notes: # # Some control characters are listed in the ECMA-48 standard without # being assigned functions relevant to terminal control there (they # referred to other standards such as ISO 1745 or ECMA-35). They are listed # here anyway for completeness. # # (A) ECMA-48 calls this "CancelCharacter" but retains the CCH abbreviation. # # (B) There seems to be some confusion abroad between CHA and HPA. Most # `ANSI' terminals accept the CHA sequence, not the HPA. but terminfo calls # the capability (hpa). ECMA-48 calls this "Cursor Character Absolute" but # preserved the CHA abbreviation. # # (C) CHT corresponds to terminfo (tab). Usually it has the value ^I. # Occasionally (as on, for example, certain HP terminals) this has the HTJ # value. ECMA-48 calls this "Cursor Forward Tabulation" but preserved the # CHT abbreviation. # # (D) terminfo (nel) is usually \r\n rather than ANSI \EE. # # (E) ECMA-48 calls this "Active Position Report" but preserves the CPR # abbreviation. # # (F) CTC parameter values: 0 = set char tab, 1 = set line tab, 2 = clear # char tab, 3 = clear line tab, 4 = clear all char tabs on current line, # 5 = clear all char tabs, 6 = clear all line tabs. # # (G) CUP and HVP are identical in effect. Some ANSI.SYS versions accept # HVP, but always allow CUP as an alternate. ECMA-48 calls HVP "Character # Position Absolute" but retains the HVP abbreviation. # # (H) ECMA calls this "Cursor Line Tabulation" but preserves the CVT # abbreviation. # # (I) DSR parameter values: 0 = ready, 1 = busy, 2 = busy, will send DSR # later, 3 = malfunction, 4 = malfunction, will send DSR later, 5 = request # DSR, 6 = request CPR response. # # (J) ECMA calls ED "Erase In Page". EA/ED/EL parameters: 0 = clear to end, # 1 = clear from beginning, 2 = clear. # # (K) ECMA calls this "End of Guarded Area" but preserves the EPA abbreviation. # # (L) The GSM parameters are vertical and horizontal parameters to scale by. # # (M) Some ANSI.SYS versions accept HPR, but more commonly `ANSI' terminals # use CUF for this function and ignore HPR. ECMA-48 calls this "Character # Position Relative" but retains the HPR abbreviation. # # (N) ECMA-48 calls this "Character Tabulation" but retains the HT # abbreviation. # # (O) SGR parameter values: 0 = default mode (attributes off), 1 = bold, # 2 = dim, 3 = italicized, 4 = underlined, 5 = slow blink, 6 = fast blink, # 7 = reverse video, 8 = invisible, 9 = crossed-out (marked for deletion), # 10 = primary font, 10 + n (n in 1..9) = nth alternative font, 20 = Fraktur, # 21 = double underline, 22 = turn off 2, 23 = turn off 3, 24 = turn off 4, # 25 = turn off 5, 26 = proportional spacing, 27 = turn off 7, 28 = turn off # 8, 29 = turn off 9, 30 = black fg, 31 = red fg, 32 = green fg, 33 = yellow # fg, 34 = blue fg, 35 = magenta fg, 36 = cyan fg, 37 = white fg, 38 = set # fg color as in CCIT T.416, 39 = set default fg color, 40 = black bg # 41 = red bg, 42 = green bg, 43 = yellow bg, 44 = blue bg, 45 = magenta bg, # 46 = cyan bg, 47 = white bg, 48 = set bg color as in CCIT T.416, 39 = set # default bg color, 50 = turn off 26, 51 = framed, 52 = encircled, 53 = # overlined, 54 = turn off 51 & 52, 55 = not overlined, 56-59 = reserved, # 61-65 = variable highlights for ideograms. # # (P) SI is also called LSO, Locking Shift Zero. # # (Q) SI is also called LS1, Locking Shift One. # # (R) Some ANSI.SYS versions accept VPR, but more commonly `ANSI' terminals # use CUD for this function and ignore VPR. ECMA calls it `Line Position # Absolute' but retains the VPA abbreviation. # # (S) MC parameters: 0 = start xfer to primary aux device, 1 = start xfer from # primary aux device, 2 = start xfer to secondary aux device, 3 = start xfer # from secondary aux device, 4 = stop relay to primary aux device, 5 = # start relay to primary aux device, 6 = stop relay to secondary aux device, # 7 = start relay to secondary aux device. # # (T) ECMA-48 calls this "Partial Line Forward" but retains the PLD # abbreviation. # # (U) ECMA-48 calls this "Partial Line Backward" but retains the PLU # abbreviation. # # (V) ECMA-48 calls this "Reverse Line Feed" but retains the RI abbreviation. # # (W) RM/SM modes are as follows: 1 = Guarded Area Transfer Mode (GATM), # 2 = Keyboard Action Mode (KAM), 3 = Control Representation Mode (CRM), # 4 = Insertion Replacement Mode, 5 = Status Report Transfer Mode (SRTM), # 6 = Erasure Mode (ERM), 7 = Line Editing Mode (LEM), 8 = Bi-Directional # Support Mode (BDSM), 9 = Device Component Select Mode (DCSM), # 10 = Character Editing Mode (HEM), 11 = Positioning Unit Mode (PUM), # 12 = Send/Receive Mode, 13 = Format Effector Action Mode (FEAM), # 14 = Format Effector Transfer Mode (FETM), 15 = Multiple Area Transfer # Mode (MATM), 16 = Transfer Termination Mode, 17 = Selected Area Transfer # Mode, 18 = Tabulation Stop Mode, 19 = Editing Boundary Mode, 20 = Line Feed # New Line Mode (LF/NL), Graphic Rendition Combination Mode (GRCM), 22 = # Zero Default Mode (ZDM). The EBM and LF/NL modes have actually been removed # from ECMA-48's 5th edition but are listed here for reference. # # (X) Select Alternate Presentation Variants is used only for non-Latin # alphabets. # # (Y) "Select Editing Extent" (SEE) was ANSI "Select Edit Extent Mode" (SEM). # # (Z) ECMA-48 calls this "Start of Guarded Area" but retains the SPA # abbreviation. # # --------------------------------------------------------------------------- # # Abbreviations: # # Intro an Introducer of some kind of defined sequence; the normal 7-bit # X3.64 Control Sequence Introducer is the two characters "Escape [" # # Delim a Delimiter # # x/y identifies a character by position in the ASCII table (column/row) # # eF editor function (see explanation) # # FE format effector (see explanation) # # F is a Final character in # an Escape sequence (F from 3/0 to 7/14 in the ASCII table) # a control sequence (F from 4/0 to 7/14) # # Gs is a graphic character appearing in strings (Gs ranges from # 2/0 to 7/14) in the ASCII table # # Ce is a control represented as a single bit combination in the C1 set # of controls in an 8-bit character set # # C0 the familiar set of 7-bit ASCII control characters # # C1 roughly, the set of control chars available only in 8-bit systems. # This is too complicated to explain fully here, so read Jim Fleming's # article in the February 1983 BYTE, especially pages 214 through 224. # # Fe is a Final character of a 2-character Escape sequence that has an # equivalent representation in an 8-bit environment as a Ce-type # (Fe ranges from 4/0 to 5/15) # # Fs is a Final character of a 2-character Escape sequence that is # standardized internationally with identical representation in 7-bit # and 8-bit environments and is independent of the currently # designated C0 and C1 control sets (Fs ranges from 6/0 to 7/14) # # I is an Intermediate character from 2/0 to 2/15 (inclusive) in the # ASCII table # # P is a parameter character from 3/0 to 3/15 (inclusive) in the ASCII # table # # Pn is a numeric parameter in a control sequence, a string of zero or # more characters ranging from 3/0 to 3/9 in the ASCII table # # Ps is a variable number of selective parameters in a control sequence # with each selective parameter separated from the other by the code # 3/11 (which usually represents a semicolon); Ps ranges from # 3/0 to 3/9 and includes 3/11 # # * Not relevant to terminal control, listed for completeness only. # # Format Effectors versus Editor Functions # # A format effector specifies how following output is to be displayed. # An editor function allows you to modify the display. Informally # format effectors may be destructive; format effectors should not be. # # For instance, a format effector that moves the "active position" (the # cursor or equivalent) one space to the left would be useful when you want to # create an overstrike, a compound character made of two standard characters # overlaid. Control-H, the Backspace character, is actually supposed to be a # format effector, so you can do this. But many systems use it in a # nonstandard fashion, as an editor function, deleting the character to the # left of the cursor and moving the cursor left. When Control-H is assumed to # be an editor function, you cannot predict whether its use will create an # overstrike unless you also know whether the output device is in an "insert # mode" or an "overwrite mode". When Control-H is used as a format effector, # its effect can always be predicted. The familiar characters carriage # return, linefeed, formfeed, etc., are defined as format effectors. # # NOTES ON THE DEC VT100 IMPLEMENTATION # # Control sequences implemented in the VT100 are as follows: # # CPR, CUB, CUD, CUF, CUP, CUU, DA, DSR, ED, EL, HTS, HVP, IND, # LNM, NEL, RI, RIS, RM, SGR, SM, TBC # # plus several private DEC commands. # # Erasing parts of the display (EL and ED) in the VT100 is performed thus: # # Erase from cursor to end of line Esc [ 0 K or Esc [ K # Erase from beginning of line to cursor Esc [ 1 K # Erase line containing cursor Esc [ 2 K # Erase from cursor to end of screen Esc [ 0 J or Esc [ J # Erase from beginning of screen to cursor Esc [ 1 J # Erase entire screen Esc [ 2 J # # Some brain-damaged terminal/emulators respond to Esc [ J as if it were # Esc [ 2 J, but this is wrong; the default is 0. # # The VT100 responds to receiving the DA (Device Attributes) control # # Esc [ c (or Esc [ 0 c) # # by transmitting the sequence # # Esc [ ? l ; Ps c # # where Ps is a character that describes installed options. # # The VT100's cursor location can be read with the DSR (Device Status # Report) control # # Esc [ 6 n # # The VT100 reports by transmitting the CPR sequence # # Esc [ Pl ; Pc R # # where Pl is the line number and Pc is the column number (in decimal). # # The specification for the DEC VT100 is document EK-VT100-UG-003. #### ANSI.SYS # # Here is a description of the color and attribute controls supported in the # the ANSI.SYS driver under MS-DOS. Most console drivers and ANSI # terminal emulators for Intel boxes obey these. They are a proper subset # of the ECMA-48 escapes. # # 0 all attributes off # 1 foreground bright # 4 underscore on # 5 blink on/background bright (not reliable with brown) # 7 reverse-video # 8 set blank (non-display) # 10 set primary font # 11 set first alternate font (on PCs, display ROM characters 1-31) # 12 set second alternate font (on PCs, display IBM high-half chars) # # Color attribute sets # 3n set foreground color / 0=black, 1=red, 2=green, 3=brown, # 4n set background color \ 4=blue, 5=magenta, 6=cyan, 7=white # Bright black becomes gray. Bright brown becomes yellow, # These coincide with the prescriptions of the ISO 6429/ECMA-48 standard. # # * If the 5 attribute is on and you set a background color (40-47) it is # supposed to enable bright background. # # * Many VGA cards (such as the Paradise and compatibles) do the wrong thing # when you try to set a "bright brown" (yellow) background with attribute # 5 (you get a blinking yellow foreground instead). A few displays # (including the System V console) support an attribute 6 that undoes this # braindamage (this is required by iBCS2). # # * Some older versions of ANSI.SYS have a bug that causes thems to require # ESC [ Pn k as EL rather than the ANSI ESC [ Pn K. (This is not ECMA-48 # compatible.) #### Intel Binary Compatibility Standard # # For comparison, here are the capabilities implied by the Intel Binary # Compatibility Standard for UNIX systems (Intel order number 468366-001). # These recommendations are optional. IBCS2 allows the leading escape to # be either the 7-bit \E[ or 8-bit \0233 introducer, in accordance with # the ANSI X.364/ISO 6429/ECMA-48 standard. Here are the iBCS2 capabilities # (as described in figure 9-3 of the standard). Those expressed in the ibcs2 # terminfo entry are followed with the corresponding capability in parens: # # CSI k disable (n=0) or enable (n=1) keyclick # CSI 2h lock keyboard # CSI 2i send screen as input # CSI 2l unlock keyboard # CSI 6m enable background color intensity # CSI <0-2>c reserved # CSI <0-59>m select graphic rendition # CSI ;H (cup) cursor to line n and column m # CSI ;f cursor to line n and column m # CSI @ (ich) insert characters # CSI A (cuu) cursor up n lines # CSI B (cud) cursor down n lines # CSI C (cuu) cursor right n characters # CSI D (cud) cursor left n characters # CSI E cursor down n lines and in first column # CSI F cursor up n lines and in first column # CSI G (hpa) position cursor at column n-1 # CSI J (ed) erase in display # CSI K (el) erase in line # CSI L (il) insert line(s) # CSI P (dch) delete characters # CSI S (indn) scroll up n lines # CSI T (rin) scroll down n lines # CSI X (ech) erase characters # CSI Z (cbt) back up n tab stops # CSI ` cursor to column n on line # CSI a (cuu) cursor right n characters # CSI d (vpa) cursor to line n # CSI e cursor down n lines and in first column # CSI g (cbt) clear all tabs # CSI z make virtual terminal n active # CSI ?7h (smam) turn automargin on # CSI ?7l (rmam) turn automargin off # CSI s save cursor position # CSI u restore cursor position to saved value # CSI =A set overscan color # CSI =F set normal foreground color # CSI =G set normal background color # CSI =H set reverse foreground color # CSI =I set reverse foreground color # CSI =J set graphic foreground color # CSI =K set graphic foreground color # CSI =g (dispc) display n from alternate graphics character set # CSI =

;B set bell parameters # CSI =;C set cursor parameters # CSI =D enable/disable intensity of background color # CSI =E set/clear blink vs. bold background # CSI 7 (sc) (sc) save cursor position # CSI 8 (rc) (rc) restore cursor position to saved value # CSI H (hts) (hts) set tab stop # CSI Q define function key string # (string must begin and end with delimiter char) # CSI c (clear) clear screen # # The lack of any specification for attributes in SGR (among other things) # makes this a wretchedly weak standard. The table above is literally # everything iBSC2 has to say about terminal escape sequences; there is # no further discussion of their meaning or how to set the parameters # in these sequences at all. # ######## NONSTANDARD CAPABILITY TRANSLATIONS USED IN THIS FILE # # The historical termcap file entries were written primarily in 4.4BSD termcap. # The 4.4BSD termcap set was substantially larger than the original 4.1BSD set, # with the extension names chosen for compatibility with the termcap names # assigned in System V terminfo. There are some variant extension sets out # there. We try to describe them here. # #### XENIX extensions: # # The XENIX extensions include a set of function-key capabilities as follows: # # code XENIX variable name terminfo name name clashes? # ---- ------------------- ------------- ----------------------- # CL key_char_left # CR key_char_right # CW key_change_window create_window # EN key_end kend # HM key_home khome # HP ?? # LD key_delete_line kdl1 # LF key_linefeed label_off # NU key_next_unlocked_cell # PD key_page_down knp # PL ?? # PN start_print mc5 # PR ?? # PS stop_print mc4 # PU key_page_up kpp pulse # RC key_recalc remove_clock # RF key_toggle_ref req_for_input # RT key_return kent # UP key_up_arrow kcuu1 parm_up_cursor # WL key_word_left # WR key_word_right # # The XENIX extensions also include the following character-set and highlight # capabilities: # # XENIX terminfo function # ----- -------- ------------------------------ # GS smacs start alternate character set # GE rmacs end alternate character set # GG :as:/:ae: glitch (analogous to :sg:/:ug:) # bo blink begin blink (not used in /etc/termcap) # be end blink (not used in /etc/termcap) # bb blink glitch (not used in /etc/termcap) # it dim begin dim (not used in /etc/termcap) # ie end dim (not used in /etc/termcap) # ig dim glitch (not used in /etc/termcap) # # Finally, XENIX also used the following forms-drawing capabilities: # # single double type ASCII approximation # ------ ------ ------------- ------------------- # GV Gv vertical line | # GH Gv horizontal line - _ # G1 G5 top right corner _ | # G2 G6 top left corner | # G3 G7 bottom left corner |_ # G4 G8 bottom right corner _| # GD Gd down-tick character T # GL Gl left-tick character -| # GR Gr right-tick character |- # GC Gc middle intersection -|- # GU Gu up-tick character _|_ # # These were invented to take advantage of the IBM PC ROM character set. One # can compose an acsc string from the single-width characters as follows # "j{G4}k{G1}l{G2}m{G3}q{GH}x{GV}t{GR}u{GL}v{GU}w{GD}n{GC}" # When translating a termcap file, ncurses tic will do this automatically. # The double forms characters don't fit the SVr4 terminfo model. # #### AT&T Extensions: # # The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of # nonstandard capabilities. Its signature is the KM capability, used to name # some sort of keymap file. EE, BO, CI, CV, XS, DS, FL and FE are in this # set. Comments in the original, and a little cross-checking with other AT&T # documentation, seem to establish that BO=:mr: (start reverse video), DS=:mh: # (start dim), XS=:mk: (secure/invisible mode), EE=:me: (end highlights), # FL=:LO: (enable soft labels), FE=:LF: (disable soft labels), CI=:vi: (make # cursor invisible), and CV=:ve: (make cursor normal). # #### HP Extensions # # The HP library (as of mid-1995, their term.h file version 70.1) appears to # have the System V capabilities up to SVr1 level. After that, it supports # two nonstandard caps meml and memu corresponding to the old termcap :ml:, # :mu: capabilities. After that, it supports caps plab_norm, label_on, # label_off, and key_f11..key_f63 capabilities like SVr4's. This makes the # HP binary format incompatible with SVr4's. # #### IBM Extensions # # There is a set of nonstandard terminfos used by IBM's AIX operating system. # The AIX terminfo library diverged from SVr1 terminfo, and replaces all # capabilities following prtr_non with the following special capabilties: # box[12], batt[12], colb[0123456789], colf[0123456789], f[01234567], kbtab, # kdo, kcmd, kcpn, kend, khlp, knl, knpn, kppn, kppn, kquit, ksel, kscl, kscr, # ktab, kmpf[123456789], apstr, ksf1..ksf10, kf11...kf63, kact, topl, btml, # rvert, lvert. Some of these are identical to XPG4/SVr4 equivalents: # kcmd, kend, khlp, and kf11...kf63. Two others (kbtab and ksel) can be # renamed (to kcbt and kslt). The places in the box[12] capabilities # correspond to acsc chars, here is the mapping: # # box1[0] = ACS_ULCORNER # box1[1] = ACS_HLINE # box1[2] = ACS_URCORNER # box1[3] = ACS_VLINE # box1[4] = ACS_LRCORNER # box1[5] = ACS_LLCORNER # box1[6] = ACS_TTEE # box1[7] = ACS_RTEE # box1[8] = ACS_BTEE # box1[9] = ACS_LTEE # box1[10] = ACS_PLUS # # The box2 characters are the double-line versions of these forms graphics. # The AIX binary terminfo format is incompatible with SVr4's. # #### Iris console extensions: # # HS is half-intensity start; HE is half-intensity end # CT is color terminal type (for Curses & rogue) # CP is color change escape sequence # CZ are color names (for Curses & rogue) # # The ncurses tic utility recognizes HS as an alias for mh . # #### TC Extensions: # # There is a set of extended termcaps associated with something # called the "Terminal Control" or TC package created by MainStream Systems, # Winfield Kansas. This one also uses GS/GE for as/ae, and also uses # CF for civis and CO for cvvis. Finally, they define a boolean :ct: # that flags color terminals. # ######## NCURSES USER-DEFINABLE CAPABILITIES # # Extensions added after ncurses 5.0 generally use the "-x" option of tic and # infocmp to manipulate user-definable capabilities. Those that are intended # for use in either terminfo or termcap use 2-character names. Extended # function keys do not use 2-character names, and are available only with # terminfo. # # As of mid-2012, no other terminfo/termcap implementation than ncurses # supports this extension; termcap libraries can as noted above make limited # use of the feature. # # ncurses makes explicit checks for a few user-definable capabilities: AX, U8, # XM. # #### SCREEN Extensions: # # The screen program uses the termcap interface. It recognizes a few useful # nonstandard capabilities. Those are used in this file. # # AX (bool) Does understand ANSI set default fg/bg color (\E[39m / # \E[49m). # G0 (bool) Terminal can deal with ISO 2022 font selection sequences. # E0 (str) Switch charset 'G0' back to standard charset. # S0 (str) Switch charset 'G0' to the specified charset. # XT (bool) Terminal understands special xterm sequences (OSC, mouse # tracking). # # AX is relatively straightforward; it is interpreted by ncurses to say that # SGR 39/49 reset the terminal's foreground and background colors to their # "default". # # XT is harder, since screen's manpage does not give more details. For that, # we must read screen's source-code. When XT is set, screen assumes # # a) OSC 1 sets the title string, e.g., for the icon. Recent versions of # screen may also set the terminal's name, which is (for xterm) distinct # from the icon name. # b) OSC 20 sets the background pixmap. This is an rxvt feature. # c) OSC 39 and OSC 49 set the default foreground/background colors. Again # this is an rxvt feature. # d) certain mode settings enable the mouse: 9, 1000, 1001, 1002, 1003. # These are from xterm, although xterm accepts mouse codes that may not be # recognized by screen, e.g., 1005, 1006. # e) colors beyond 0..7 are implemented by xterm's aixterm-like 16-color # sequence. However, because screen uses only termcap, the values returned # by Af/Ab are not usable because they rely on expressions that termcap # does not support. Therefore, screen uses a hardcoded string to work # around the limitation. # f) all entries named "*xterm*" or "*rxvt*" have the bce flag set. # # The other ISO-2022 features are rarely used, but provided here to make # screen's termcap features available. # #### XTERM Extensions: # # Most of the xterm extensions are for function-keys. Since patch #94 (in # 1999), xterm has supported shift/control/alt/meta modifiers which produce # additional function-key strings. Some other developers copied the feature, # though they did not follow xterm's lead in patch #167 (in 2002), to make # these key definitions less ambiguous. # # A few terminals provide similar functionality (sending distinct keys when # a modifier is used), including rxvt. # # These are the extended keys defined in this file: # # kDC3 kDC4 kDC5 kDC6 kDC7 kDN kDN3 kDN4 kDN5 kDN6 kDN7 kEND3 kEND4 kEND5 kEND6 # kEND7 kHOM3 kHOM4 kHOM5 kHOM6 kHOM7 kIC3 kIC4 kIC5 kIC6 kIC7 kLFT3 kLFT4 # kLFT5 kLFT6 kLFT7 kNXT3 kNXT4 kNXT5 kNXT6 kNXT7 kPRV3 kPRV4 kPRV5 kPRV6 kPRV7 # kRIT3 kRIT4 kRIT5 kRIT6 kRIT7 kUP kUP3 kUP4 kUP5 kUP6 kUP7 ka2 kb1 kb3 kc2 # # Here are the other xterm-related extensions which are used in this file: # # Cr is a string capability which resets the cursor color # Cs is a string capability which sets the cursor color to a given value. # The single string parameter is the color name/number, according to the # implementation. # Ms modifies the selection/clipboard. Its parameters are # p1 = the storage unit (clipboard, selection or cut buffer) # p2 = the base64-encoded clipboard content. # Se resets the cursor style to the terminal power-on default. # Ss is a string capability with one numeric parameter. It is used to set the # cursor style as described by the DECSCUSR function to a block or # underline. # TS is a string capability which acts like "tsl", but uses no parameter and # goes to the first column of the "status line". # XM is a string capability which overrides ncurses's built-in string which # enables/disables xterm mouse mode. # xm shows the format of the mouse responses. Parameters are (from zero): # p1 = y-ordinate # p2 = x-ordinate # p3 = button # p4 = state, e.g., pressed or released # p6 = y-ordinate starting region # p7 = x-ordinate starting region # p8 = y-ordinate ending region # p9 = x-ordinate ending region # Other extensions, used in xm: # %u = UTF-8 # #### Miscellaneous extensions: # # gsbom/grbom are used to enable/disable real bold (not intensity bright) mode. # This was implemented for the Hurd. # E3 clears the terminal's scrollback buffer. This was implemented in the # Linux 3.0 kernel as a security feature. It matches a feature which was # added in xterm patch #107. # U8 is a numeric capability which denotes a terminal emulator which does not # support VT100 SI/SO when processing UTF-8 encoding. Set this to a nonzero # value to enable it. # ######## CHANGE HISTORY # # The last /etc/termcap version maintained by John Kunze was 8.3, dated 8/5/94. # Releases 9 and 10 (up until the release of ncurses 4.2 in 1998) were # maintained by Eric S. Raymond as part of the ncurses project. # # This file contains all the capability information present in John Kunze's # last version of the termcap master file, except as noted in the change # comments at end of file. Some information about very ancient obsolete # capabilities has been moved to comments. Some all-numeric names of older # terminals have been retired. # # I changed :MT: to :km: (the 4.4BSD name) everywhere. I commented out some # capabilities (EP, dF, dT, dV, kn, ma, ml, mu, xr, xx) that are no longer # used by BSD curses. # # The 9.1.0 version of this file was translated from my lightly-edited copy of # 8.3, then mechanically checked against 8.3 using Emacs Lisp code written for # the purpose. Unless the ncurses tic implementation and the Lisp code were # making perfectly synchronized mistakes which I then failed to catch by # eyeball, the translation was correct and perfectly information-preserving. # # Major version number bumps correspond to major version changes in ncurses. # # Here is a log of the changes since then: # # 9.1.0 (Wed Feb 1 04:50:32 EST 1995): # * First terminfo master translated from 8.3. # 9.2.0 (Wed Feb 1 12:21:45 EST 1995): # * Replaced Wyse entries with updated entries supplied by vendor. # # 9.3.0 (Mon Feb 6 19:14:40 EST 1995): # * Added contact & status info from G. Clark Brown . # 9.3.1 (Tue Feb 7 12:00:24 EST 1995): # * Better XENIX keycap translation. Describe TC termcaps. # * Contact and history info supplied by Qume. # 9.3.2 (Sat Feb 11 23:40:02 EST 1995): # * Raided the Shuford FTP site for recent termcaps/terminfos. # * Added information on X3.64 and VT100 standard escape sequences. # 9.3.3 (Mon Feb 13 12:26:15 EST 1995): # * Added a correct X11R6 xterm entry. # * Fixed terminfo translations of padding. # 9.3.4 (Wed Feb 22 19:27:34 EST 1995): # * Added correct acsc/smacs/rmacs strings for vt100 and xterm. # * Added u6/u7/u8/u9 capabilities. # * Added PCVT entry. # 9.3.5 (Thu Feb 23 09:37:12 EST 1995): # * Emacs uses :so:, not :mr:, for its mode line. Fix linux entry # to use reverse-video standout so Emacs will look right. # * Added el1 capability to ansi. # * Added smacs/rmacs to ansi.sys. # # 9.4.0 (Sat Feb 25 16:43:25 EST 1995): # * New mt70 entry. # * Added COPYRIGHTS AND OTHER DELUSIONS. # * Added AT&T 23xx & 500/513, vt220 and vt420, opus3n1+, netronics # smartvid & smarterm, ampex 175 & 219 & 232, # env230, falco ts100, fluke, intertube, superbrain, ncr7901, vic20, # ozzie, trs200, tr600, Tandy & Texas Instruments VDTs, intext2, # screwpoint, fviewpoint, Contel Business Systems, Datamedia Colorscan, # adm36, mime314, ergo4000, ca22851. Replaced att7300, esprit, dd5500. # * Replaced the Perkin-Elmer entries with vendor's official ones. # * Restored the old minimal-ansi entry, luna needs it. # * Fixed some incorrect ip and proportional-padding translations. # 9.4.1 (Mon Feb 27 14:18:33 EST 1995): # * Fix linux & AT386 sgr strings to do A_ALTCHARSET turnoff correctly. # * Make the xterm entry 65 lines again; create xterm25 and xterm24 # to force a particular height. # * Added beehive4 and reorganized other Harris entries. # 9.4.2 (Thu Mar 9 01:45:44 EST 1995): # * Merged in DEC's official entries for its terminals. The only old # entry I kept was Doug Gwyn's alternate vt100 (as vt100-avo). # * Replaced the translated BBN Bitgraph entries with purpose-built # ones from AT&T's SVr3. # * Replaced the AT&T entries with AT&T's official terminfos. # * Added teleray 16, vc415, cops10. # * Merged in many individual capabilities from SCO terminfo files. # 9.4.3 (Mon Mar 13 02:37:53 EST 1995): # * Typo fixes. # * Change linux entry so A_PROTECT enables IBM-PC ROM characters. # 9.4.4 (Mon Mar 27 12:32:35 EST 1995): # * Added tty35, Ann Arbor Guru series. vi300 and 550, cg7900, tvi803, # pt210, ibm3164, IBM System 1, ctrm, Tymshare scanset, dt200, adm21, # simterm, citoh and variants. # * Replaced sol entry with sol1 and sol2. # * Replaced Qume QVT and Freedom-series entries with purpose-built # terminfo entries. # * Enhanced vt220, tvi910, tvi924, hpterm, hp2645, adm42, tek # and dg200 entries using caps from from SCO. # * Added the usual set of function-key mappings to ANSI entry. # * Corrected xterm's function-key capabilities. # 9.4.5 (Tue Mar 28 14:27:49 EST 1995): # * Fix in xterm entry, cub and cud are not reliable under X11R6. # 9.4.6 (Thu Mar 30 14:52:15 EST 1995): # * Fix in xterm entry, get the arrow keys right. # * Change some \0 escapes to \200. # 9.4.7 (Tue Apr 4 11:27:11 EDT 1995) # * Added apple (Videx card), adm1a, oadm31. # * Fixed malformed ampex csr. # * Fixed act4, cyb110; they had old-style prefix padding left in. # * Changed mandatory to advisory padding in many entries. # * Replaced HP entries up to hpsub with purpose-built ones. # * Blank rmir/smir/rmdc/smdc capabilities removed. # * Small fixes merged in from SCO entries for lpr, fos, tvi910+, tvi924. # 9.4.8 (Fri Apr 7 09:36:34 EDT 1995): # * Replaced the Ann Arbor entries with SCO's, the init strings are # more efficient (but the entries otherwise identical). # * Added dg211 from Shuford archive. # * Added synertek, apple-soroc, ibmpc, pc-venix, pc-coherent, xtalk, # adm42-nl, pc52, gs6300, xerox820, uts30. # * Pull SCO's padding into vi200 entry. # * Improved capabilities for tvi4107 and other Televideo and Viewpoint # entries merged in from SCO's descriptions. # * Fixed old-style prefix padding on zen50, h1500. # * Moved old superbee entry to superbee-xsb, pulled in new superbee # entry from SCO's description. # * Reorganized the special entries. # * Added lm#0 to cbunix and virtual entries. # # 9.5.0 (Mon Apr 10 11:30:00 EDT 1995): # * Restored cdc456tst. # * Fixed sb1 entry, SCO erroneously left out the xsb glitch. # * Added megatek, beacon, microkit. # * Freeze for ncurses-1.9 release. # 9.5.1 (Fri Apr 21 12:46:42 EDT 1995): # * Added historical data for TAB. # * Comment fixes from David MacKenzie. # * Added the new BSDI pc3 entry. # 9.5.2 (Tue Apr 25 17:27:52 EDT 1995) # * A change in the tic -C logic now ensures that all entries in # the termcap translation will fit in < 1024 bytes. # * Added `bobcat' and `gator' HP consoles and the Nu machine entries # from GNU termcap file. This merges in all their local information. # 9.5.3 (Tue Apr 25 22:28:13 EDT 1995) # * Changed tic -C logic to dump all capabilities used by GNU termcap. # * Added warnings about entries with long translations (restoring # all the GNU termcaps pushes a few over the edge). # 9.5.4 (Wed Apr 26 15:35:09 EDT 1995) # * Yet another tic change, and a couple of entry tweaks, to reduce the # number of long (> 1024) termcap translations back to 0. # # 9.6.0 (Mon May 1 10:35:54 EDT 1995) # * Added kf13-kf20 to Linux entry. # * Regularize Prime terminal names. # * Historical data on Synertek. # * Freeze for ncurses-1.9.1. # 9.6.1 (Sat May 6 02:00:52 EDT 1995): # * Added true xterm-color entry, renamed djm's pseudo-color entry. # * Eliminate whitespace in short name fields, this tanks some scripts. # * Name field changes to shorten some long entries. # * Termcap translation now automatically generates empty rmir/smir # when ich1/ich is present (copes with an ancient vi bug). # * Added `screen' entries from FSF's screen-3.6.2. # * Added linux-nic and xterm-nic entries. # 9.6.2 (Sat May 6 17:00:55 EDT 1995): # * Change linux entry to use smacs=\E[11m and have an explicit acsc, # eliminating some special-case code in ncurses. # # 9.7.0 (Tue May 9 18:03:12 EDT 1995): # * Added vt320-k3, rsvidtx from the Emacs termcap.dat file. I think # that captures everything unique from it. # * Added reorder script generator. # * Freeze for ncurses 1.9.2 release. # 9.7.1 (Thu Jun 29 09:35:22 EDT 1995): # * Added Sean Farley's kspd, flash, rs1 capabilities for linux. # * Added Olaf Siebert's corrections for adm12. # * ansi-pc-color now includes the colors and pairs caps, so that # entries which use it will inherit them automatically. # * The linux entry can now recognize the center (keypad 5) key. # * Removed some junk that found its way into Linux acsc. # # 9.8.0 (Fri Jul 7 04:46:57 EDT 1995): # * Add 50% cut mark as a desperate hack to reduce tic's core usage. # * xterm doesn't try to use application keypad mode any more. # * Freeze for ncurses-1.9.3 release. # 9.8.1 (Thu Jul 19 17:02:12 EDT 1995): # * Added corrected sun entry from vendor. # * Added csr capability to linux entry. # * Peter Wemm says the at386 hpa should be \E[%i%p1%dG, not \E[%p1%dG. # * Added vt102-nsgr to cope with stupid IBM PC `VT100' emulators. # * Some commented-out caps in long entries come back in, my code # for computing string-table lengths had a bug in it. # * pcansi series modified to fit comm-program reality better. # 9.8.2 (Sat Sep 9 23:35:00 EDT 1995): # * BSD/OS actually ships the ibmpc3 bold entry as its console. # * Correct some bad aliases in the pcansi series # * Added entry for QNX console. # * Clean up duplicate long names for use with 4.4 library. # * Change vt100 standout to be normal reverse vide, not bright reverse; # this makes the Emacs status line look better. # 9.8.3 (Sun Sep 10 13:07:34 EDT 1995): # * Added Adam Thompson's VT320 entries, also his dtx-sas and z340. # * Minor surgery, mostly on name strings, to shorten termcap version. # # 9.9.0 (Sat Sep 16 23:03:48 EDT 1995): # * Added dec-vt100 for use with the EWAN emulator. # * Added kmous to xterm for use with xterm's mouse-tracking facility. # * Freeze for 1.9.5 alpha release. # 9.9.1 (Wed Sep 20 13:46:09 EDT 1995): # * Changed xterm lines to 24, the X11R6 default. # 9.9.2 (Sat Sep 23 21:29:21 EDT 1995): # * Added 7 newly discovered, undocumented acsc characters to linux # entry (the pryz{|} characters). # * ncurses no longer steals A_PROTECT. Simplify linux sgr accordingly. # * Correct two typos in the xterm entries introduced in 9.9.1. # * I finally figured out how to translate ko capabilities. Done. # * Added tvi921 entries from Tim Theisen. # * Cleanup: dgd211 -> dg211, adm42-nl -> adm42-nsl. # * Removed mystery tec entry, it was neither interesting nor useful. # * shortened altos3, qvt203, tvi910+, tvi92D, tvi921-g, tvi955, vi200-f, # vi300-ss, att505-24, contel301, dm3045, f200vi, pe7000c, vc303a, # trs200, wind26, wind40, wind50, cdc456tst, dku7003, f110, dg211, # by making them relative to use capabilities # * Added cuf1=^L to tvi925 from deleted variant tvi925a. # * fixed cup in adm22 entry and parametrized strings in vt320-k3. # * added it#8 to entries that used to have :pt: -- tvi912, vi200, # ampex80, # * Translate all home=\E[;H capabilities to home=\E[H, they're # equivalent. # * Translate \E[0m -> \E[m in [rs]mso, [rs]mul, and init strings of # vt100 and ANSI-like terminals. # 9.9.3 (Tue Sep 26 20:11:15 EDT 1995): # * Added it#8 and ht=\t to *all* entries with :pt:; the ncurses tic # does this now, too. # * fviewpoint is gone, it duplicated screwpoint. # * Added hp2627, graphos, graphos-30, hpex, ibmega, ibm8514, ibm8514-c, # ibmvga, ibmvga-c, minix, mm340, mt4520-rv, screen2, screen3, # versaterm, vi500, vsc, vt131, vt340, vt400 entries from UW. # The UW vi50 replaces the old one, which becomes vi50adm, # * No more embedded commas in name fields. # # 9.10.0 (Wed Oct 4 15:39:37 EDT 1995): # * XENIX forms characters in fos, trs16, scoansi become acsc strings, # * Introduced klone+* entries for describing Intel-console behavior. # * Linux kbs is default-mapped to delete for some brain-dead reason. # * -nsl -> -ns. The -pp syntax is obsolete. # * Eliminate [A-Z]* primaries in accordance with SVr4 terminfo docs. # * Make xterm entry do application-keypad mode again. I got complaints # that it was messing up someone's 3270 emulator. # * Added some longname fields in order to avoid warning messages from # older tic implementations. # * According to ctlseqs.ms, xterm has a full vt100 graphics set. Use # it! (This gives us pi, greater than, less than, and a few more.) # * Freeze for ncurses-1.9.6 release. # 9.10.1 (Sat Oct 21 22:18:09 EDT 1995): # * Add xon to a number of console entries, they're memory-mapped and # don't need padding. # * Correct the use dependencies in the ansi series. # * Hand-translate more XENIX capabilities. # * Added hpterm entry for HP's X terminal emulator. # * Added aixterm entries. # * Shortened four names so everything fits in 14 chars. # # 9.11.0 (Thu Nov 2 17:29:35 EST 1995): # * Added ibcs2 entry and info on iBCS2 standard. # * Corrected hpa/vpa in linux entry. They still fail the worm test. # * We can handle the HP meml/memu capability now. # * Added smacs to klone entries, just as documentation. # * Carrected ansi.sys and cit-500 entries. # * Added z39, vt320-k311, v220c, and avatar entries. # * Make pcansi use the ansi.sys invis capability. # * Added DIP switch descriptions for vt100, adm31, tvi910, tvi920c, # tvi925, tvi950, dt80, ncr7900i, h19. # * X3.64 has been withdrawn, change some references. # * Removed function keys from ansi-m entry. # * Corrected ansi.sys entry. # * Freeze for ncurses-1.9.7 release. # 9.11.1 (Tue Nov 6 18:18:38 EST 1995): # * Added rmam/smam capabilities to many entries based on init strings. # * Added correct hpa/vpa to linux. # * Reduced several entries relative to vt52. # 9.11.2 (Tue Nov 7 00:21:06 EST 1995): # * Exiled some utterly unidentifiable custom and homebrew types to the # UFO file; also, obsolete small-screen hardware; also, entries which # look flat-out incorrect, garbled, or redundant. These include the # following entries: carlock, cdc456tst, microkit, qdss, ramtek, tec, # tec400, tec500, ubell, wind, wind16, wind40, wind50, plasma, agile, # apple, bch, daleblit, nucterm, ttywilliams, nuterminal, nu24, bnu, # fnu, nunix-30, nunix-61, exidy, ex3000, sexidy, pc52, sanyo55, # yterm10, yterm11, yterm10nat, aed, aed-ucb, compucolor, compucolor2, # vic20, dg1, act5s, netx, smartvid, smarterm, sol, sol2, dt200, # trs80, trs100, trs200, trs600, xitex, rsvidtx, vid, att2300-x40, # att2350-x40, att4410-nfk, att5410-ns, otty5410, att5425-nl-w, # tty5425-fk, tty5425-w-fk, cita, c108-na, c108-rv-na, c100-rv-na, # c108-na-acs, c108-rv-na-acs, ims950-ns, infotonKAS, ncr7900i-na, # regent60na, scanset-n, tvi921-g, tvi925n, tvi925vbn, tvi925vb, # vc404-na, vc404-s-na, vt420nam, vt420f-nam, vt420pc-nam, vt510nam, # vt510pc-nam, vt520nam, vt525nam, xterm25, xterm50, xterm65, xterms. # * Corrected pcvt25h as suggested by Brian C. Grayson # . # 9.11.3 (Thu Nov 9 12:14:40 EST 1995): # * Added kspd=\E[P, kcbt=\E[Z, to linux entry, changed kbs back to ^H. # * Added kent=\EOM to xterm entry. # # 9.11.4 (Fri Nov 10 08:31:35 EST 1995): # * Corrected gigi entry. # * Restored cuf/cud1 to xterm, their apparent bugginess was due to # bad hpa/vpa capabilities. # * Corrected flash strings to have a uniform delay of .2 sec. No # more speed-dependent NUL-padding! # * terminfo capabilities in comments bracketed with <>. # 9.11.5 (Fri Nov 10 15:35:02 EST 1995): # * Replaced pcvt with the 3.31 pcvt entries. # * Freeze for 1.9.7a. # 9.11.6 (Mon Nov 13 10:20:24 EST 1995): # * Added emu entry from the X11R6 contrib tape sources. # # 9.12.0 (Wed Nov 29 04:22:25 EST 1995): # * Improved iris-ansi and sun entries. # * More flash string improvements. # * Corrected wy160 & wy160 as suggested by Robert Dunn # * Added dim to at386. # * Reconciled pc3 and ibmpc3 with the BSDI termcap file. Keith says # he's ready to start using the termcap generated from this one. # * Added vt102-w, vt220-w, xterm-bold, wyse-vp, wy75ap, att4424m, # ln03, lno3-w, h19-g, z29a*, qdss. Made vt200 an alias of vt220. # * Improved hpterm, apollo consoles, fos, qvt101, tvi924. tvi925, # att610, att620, att630, # * Changed hazeltine name prefix from h to hz. # * Sent t500 to the UFI file. # * I think we've sucked all the juice out of BSDI's termcap file now. # * Freeze for ncurses 1.9.8 release # 9.12.1 (Thu Nov 30 03:14:06 EST 1995) # * Unfreeze, linux kbs needed to be fixed. # * Tim Theisen pinned down a bug in the DMD firmware. # 9.12.2 (Thu Nov 30 19:08:55 EST 1995): # * Fixes to ansi and klone capabilities (thank you, Aaron Ucko). # (The broken ones had been shadowed by sgr.) # 9.12.3 (Thu Dec 7 17:47:22 EST 1995): # * Added documentation on ECMA-48 standard. # * New Amiga entry. # 9.12.4 (Thu Dec 14 04:16:39 EST 1995): # * More ECMA-48 stuff # * Corrected typo in minix entry, added pc-minix. # * Corrected khome/kend in xterm (thank you again, Aaron Ucko). # * Added rxvt entry. # * Added 1.3.x color-change capabilities to linux entry. # 9.12.5 (Tue Dec 19 00:22:10 EST 1995): # * Corrected rxvt entry khome/kend. # * Corrected linux color change capabilities. # * NeXT entries from Dave Wetzel. # * Cleaned up if and rf file names (all in /usr/share now). # * Changed linux op capability to avoid screwing up a background color # pair set by setterm. # 9.12.6 (Wed Feb 7 16:14:35 EST 1996): # * Added xterm-sun. # 9.12.7 (Fri Feb 9 13:27:35 EST 1996): # * Added visa50. # # 9.13.0 (Sun Mar 10 00:13:08 EST 1996): # * Another sweep through the Shuford archive looking for new info. # * Added dg100 alias to dg6053 based on a comp.terminals posting. # * Added st52 from Per Persson. # * Added eterm from the GNU Emacs 19.30 distribution. # * Freeze for 1.9.9. # 9.13.1 (Fri Mar 29 14:06:46 EST 1996): # * FreeBSD console entries from Andrew Chernov. # * Removed duplicate Atari st52 name. # 9.13.2 (Tue May 7 16:10:06 EDT 1996) # * xterm doesn't actually have ACS_BLOCK. # * Change klone+color setf/setb to simpler forms that can be # translated into termcap. # * Added xterm1. # * Removed mechanically-generated junk capabilities from cons* entries. # * Added color support to bsdos. # 9.13.3 (Thu May 9 10:35:51 EDT 1996): # * Added Wyse 520 entries from Wm. Randolph Franklin . # * Created ecma+color, linux can use it. Also added ech to linux. # * Teach xterm about more keys. Add Thomas Dickey's 3.1.2E updates. # * Add descriptions to FreeBSD console entries. Also shorten # some aliases to <= 14 chars for portability. # * Added x68k console # * Added OTbs to several VT-series entries. # 9.13.4 (Wed May 22 10:54:09 EDT 1996): # * screen entry update for 3.7.1 from Michael Alan Dorman. # 9.13.5 (Wed Jun 5 11:22:41 EDT 1996): # * kterm correction due to Kenji Rikitake. # * ACS correction in vt320-kll due to Phillippe De Muyter. # 9.13.6 (Sun Jun 16 15:01:07 EDT 1996): # * Sun console entry correction from J.T. Conklin. # * Changed all DEC VT300 and up terminals to use VT300 tab set # 9.13.7 (Mon Jul 8 20:14:32 EDT 1996): # * Added smul to linux entry (we never noticed it was missing # because of sgr!). # * Added rmln to hp+labels (deduced from other HP entries). # * Added vt100 acsc capability to vt220, vt340, vt400, d800, dt80-sas, # pro350, att7300, 5420_2, att4418, att4424, att4426, att505, vt320-k3. # * Corrected vt220 acsc. # * The klone+sgr and klone+sgr-dumb entries now use klone+acs; # this corresponds to reality and helps prevent some tic warnings. # * Added sgr0 to c101, pcix, vt100-nav, screen2, oldsun, next, altos2, # hpgeneric, hpansi, hpsub, hp236, hp700-wy, bobcat, dku7003, adm11, # adm12, adm20, adm21, adm22, adm31, adm36, adm42, pt100, pt200, # qvt101, tvi910, tvi921, tvi92B, tvi925, tvi950, tvi970, wy30-mc, # wy50-mc, wy100, wyse-vp, ampex232, regent100, viewpoint, vp90, # adds980, cit101, cit500, contel300, cs10, dm80, falco, falco-p, # f1720a, go140, sb1, superbeeic, microb, ibm8512, kt7, ergo4000, # owl, uts30, dmterm, dt100, dt100, dt110, appleII, apple-videx, # lisa, trsII, atari, st52, pc-coherent, basis, m2-man, bg2.0, bg1.25, # dw3, ln03, ims-ansi, graphos, t16, zen30, xtalk, simterm, d800, # ifmr, v3220, wy100q, tandem653, ibmaed. # * Added DWK terminal description. # 9.13.8 (Wed Jul 10 11:45:21 EDT 1996): # * Many entries now have highlights inherited from adm+sgr. # * xterm entry now corresponds to XFree86 3.1.2E, with color. # * xtitle and xtitle-twm enable access to the X status line. # * Added linux-1.3.6 color palette caps in conventional format. # * Added adm1178 terminal. # * Move fos and apollo terminals to obsolete category. # * Aha! The BRL terminals file told us what the Iris extensions mean. # * Added, from the BRL termcap file: rt6221, rt6221-w, northstar, # commodore, cdc721-esc, excel62, osexec. Replaced from the BRL file: # cit500, adm11. # 9.13.9 (Mon Jul 15 00:32:51 EDT 1996): # * Added, from the BRL termcap file: cdc721, cdc721l, cdc752, cdc756, # aws, awsc, zentec8001, modgraph48, rca vp3301/vp3501, ex155. # * Corrected, from BRL termcap file: vi50. # * Better rxvt entry & corrected xterm entries from Thomas Dickey. # 9.13.10 (Mon Jul 15 12:20:13 EDT 1996): # * Added from BRL: cit101e & variants, hmod1, vi200, ansi77, att5620-1, # att5620-s, att5620-s, dg210, aas1901, hz1520, hp9845, osborne # (old osborne moved to osborne-w), tvi970-vb, tvi970-2p, tvi925-hi, # tek4105brl, tek4106brl, tek4107brl,tek4109brl, hazel, aepro, # apple40p, apple80p, appleIIgs, apple2e, apple2e-p, apple-ae. # * Paired-attribute fixes to various terminals. # * Sun entry corrections from A. Lukyanov & Gert-Jan Vons. # * xterm entry corrections from Thomas Dickey. # 9.13.11 (Tue Jul 30 16:42:58 EDT 1996): # * Added t916 entry, translated from a termcap in SCO's support area. # * New qnx entry from Michael Hunter. # 9.13.12 (Mon Aug 5 14:31:11 EDT 1996): # * Added hpex2 from Ville Sulko. # * Fixed a bug that ran the qnx and pcvtXX together. # 9.13.13 (Fri Aug 9 01:16:17 EDT 1996): # * Added dtterm entry from Solaris CDE. # 9.13.14 (Tue Sep 10 15:31:56 EDT 1996): # * corrected pairs#8 typo in dtterm entry. # * added tvi9065. # 9.13.15 (Sun Sep 15 02:47:05 EDT 1996): # * updated xterm entry to cover 3.1.2E's new features. # 9.13.16 (Tue Sep 24 12:47:43 EDT 1996): # * Added new minix entry # * Removed aliases of the form ^[0-9]* for obsolete terminals. # * Commented out linux-old, nobody's using pre-1.2 kernels now. # 9.13.17 (Fri Sep 27 13:25:38 EDT 1996): # * Added Prism entries and kt7ix. # * Caution notes about EWAN and tabset files. # * Changed /usr/lib/tabset -> /usr/share/tabset. # * Added acsc/rmacs/smacs to vt52. # 9.13.18 (Mon Oct 28 13:24:59 EST 1996): # * Merged in Thomas Dickey's reorganization of the xterm entries; # added technical corrections to avoid warning messages. # 9.13.19 (Sat Nov 16 16:05:49 EST 1996): # * Added rmso=\E[27m in Linux entry. # * Added koi8-r support for Linux console. # * Replace xterm entries with canonical ones from XFree86 3.2. # 9.13.20 (Sun Nov 17 23:02:51 EST 1996): # * Added color_xterm from Jacob Mandelson # 9.13.21 (Mon Nov 18 12:43:42 EST 1996): # * Back off the xterm entry to use r6 as a base. # 9.13.22 (Sat Nov 30 11:51:31 EST 1996): # * Added dec-vt220 at Adrian Garside's request. # #-(original-changelog-1996/12/29-to-1998/02/28-by-TD)--------------------------- # # 10.1.0 (Sun Dec 29 02:36:31 EST 1996): withdrawn # * Minor corrections to xterm entries. # * Replaced EWAN telnet entry. # * Dropped the reorder script generator. It was a fossil. # 9.13.23 (Fri Feb 21 16:36:06 EST 1997): # * Replaced minitel-2 entry. # * Added MGR, ansi-nt. # 9.13.24 (Sun Feb 23 20:55:23 EST 1997): # * Thorsten Lockert added termcap `bs' to a lot of types, working from # the 4.4BSD Lite2 file. # # 10.1.1 (Sat May 3 21:41:27 EDT 1997): # * Use setaf/setab consistently with SVr4. # * Remove ech, el1 from cons25w, they do not work in FreeBSD 2.1.5 # 10.1.2 (Sat May 24 21:10:57 EDT 1997) # * update xterm-xf86-v32 to match XFree86 3.2A (changes F1-F4) # * add xterm-16color, for XFree86 3.3 # 10.1.3 (Sat May 31 12:21:05 EDT 1997) # * correct typo in emu # * correct typo in vt102-w (Robert Wuest) # * make new entry xterm-xf86-v33, restored xterm-xf86-v32. # 10.1.4 (Sun Jun 15 08:29:05 EDT 1997) # * remove ech capability from rxvt (it does the wrong thing) # 10.1.5 (Sat Jun 28 21:34:36 EDT 1997) # * remove spurious newlines from several entries (hp+color, wy50, # wy350, wy370-nk, wy99gt-tek, wy370-tek, ibm3161, tek4205, ctrm, # gs6300) # 10.1.6 (Sat Jul 5 15:08:16 EDT 1997) # * correct rmso capability of wy50-mc # 10.1.7 (Sat Jul 12 20:05:55 EDT 1997) # * add cbt to xterm-xf86-v32 # * disentangle some entries from 'xterm', preferring xterm-r6 in case # 'xterm' is derived from xterm-xf86-v32, which implements ech and # other capabilities not in xterm-r6. # * remove alternate character set from kterm entry. # 10.1.8 (Sat Aug 2 18:43:18 EDT 1997) # * correct acsc entries for ACS_LANTERN, which is 'i', not 'I'. # 10.1.9 (Sat Aug 23 17:54:38 EDT 1997) # * add xterm-8bit entry. # 10.1.10 (Sat Oct 4 18:17:13 EDT 1997) # * repair several places where early version of tic replaced \, with \\\, # * make acsc entries canonical form (sorted, uniq). # * modify acsc entries for linux, linux-koi8 # * new rxvt entry, from corrected copy of distribution in rxvt 2.21b # * add color, mouse support to kterm. # 10.1.11 (Sat Oct 11 14:57:10 EDT 1997) # * correct wy120 smxon/tbc capabilities which were stuck together. # 10.1.12 (Sat Oct 18 17:38:41 EDT 1997) # * add entry for xterm-xf86-v39t # 10.1.13 (Sat Nov 8 13:43:33 EST 1997) # * add u8,u9 to sun-il description # 10.1.14 (Sat Nov 22 19:59:03 EST 1997) # * add vt220-js, pilot, rbcomm, datapoint entries from esr's 27-jun-97 # version. # * add hds200 description (Walter Skorski) # * add EMX 0.9b descriptions # * correct rmso/smso capabilities in wy30-mc and wy50-mc (Daniel Weaver) # * rename xhpterm back to hpterm. # 10.1.15 (Sat Nov 29 19:21:59 EST 1997) # * change initc in linux-c-nc to use 0..1000 range. # 10.1.16 (Sat Dec 13 19:41:59 EST 1997) # * remove hpa/vpa from rxvt, which implements them incorrectly. # * add sgr0 for rxvt. # * remove bogus smacs/rmacs from EMX descriptions. # 10.1.17 (Sat Dec 20 17:54:10 EST 1997) # * revised entry for att7300 # 10.1.18 (Sat Jan 3 17:58:49 EST 1998) # * use \0 rather than \200. # * rename rxvt-color to rxvt to match rxvt 2.4.5 distribution. # 10.1.19 (Sat Jan 17 14:24:57 EST 1998) # * change xterm (xterm-xf86-v40), xterm-8bit rs1 to use hard reset. # * rename xterm-xf86-v39t to xterm-xf86-v40 # * remove bold/underline from sun console entries since they're not # implemented. # 10.1.20 (Sat Jan 24 11:02:51 EST 1998) # * add beterm entry (Fred Fish) # * add irix-color/xwsh entry. # * turn ncv off for linux. # 10.1.21 (Sat Jan 31 17:39:16 EST 1998) # * set ncv for FreeBSD console (treat colors with reverse specially). # * remove sgr string from qnx based on report by Xiaodan Tang # 10.1.22 (Wed Feb 11 18:40:12 EST 1998) # * remove spurious commas from descriptions # * correct xterm-8bit to match XFree86 3.9Ad F1-F4. # 10.1.23 (Sat Feb 28 17:48:38 EST 1998) # * add linux-koi8r to replace linux-koi8 (which uses a corrupt acsc, # apparently based on cp-866). # #-(replaced-changelog-1998/02/28-by-ESR)---------------------------------------- # # 9.13.23 (Fri Feb 21 16:36:06 EST 1997): # * Replaced minitel-2 entry. # * Added MGR, ansi-nt. # * Minor corrections to xterm entries. # * Replaced EWAN telnet entry. # * Dropped the reorder script generator. It was a fossil. # 9.13.24 (Sun Feb 23 20:55:23 EST 1997): # * Thorsten Lockert added termcap `bs' to a lot of types, working from # the 4.4BSD Lite2 file. # 9.13.25 (Fri Jun 20 12:33:36 EDT 1997): # * Added Datapoint 8242, pilot, ansi_psx, rbcomm, vt220js. # * Updated iris-ansi; corrected vt102-w. # * Switch base xterm entry to 3.3 level. # 9.13.26 (Mon Jun 30 22:45:45 EDT 1997) # * Added basic4. # * Removed rmir/smir from tv92B. # # 10.2.0 (Sat Feb 28 12:47:36 EST 1998): # * add hds200 description (Walter Skorski) # * add beterm entry (Fred Fish) # * add Thomas Dickey's xterm-xf86-v40, xterm-8bit, xterm-16color, # iris-color entries. # * add emx entries. # * Replaced unixpc entry with Benjamin Sittler's corrected version. # * Replaced xterm/rxvt/emu/syscons entries with Thomas Dickey's # versions. # * remove sgr string from qnx based on report by Xiaodan Tang # * Added u8/u9, removed rmul/smul from sun-il. # * 4.2 tic displays \0 rather than \200. # * add linux-koi8r to replace linux-koi8 (which uses a corrupt acsc, # apparently based on cp-866). # * Merged in Pavel Roskin's acsc for linux-koi8 # * Corrected some erroneous \\'s to \. # * 4.2 ncurses has been changed to use setaf/setab, consistent w/SysV. # * II -> ii in pcvtXX, screen, xterm. # * Removed \n chars following ANSI escapes in sgr & friends. # * Updated Wyse entries. # * h19 corrections from Tim Pierce. # * Noted that the dm2500 has both ich and smir. # * added pccons for the Alpha under OSF/1. # * Added Sony NEWS workstation entries and cit101e-rv. # * Reverted `amiga'; to Kent Polk's version, as I'm told # the Verkuil entry messes up with Amiga Telnet. # 10.2.1 (Sun Mar 8 18:32:04 EST 1998): # * Corrected attributions in 10.2.0 release notes. # * Scanned the Shuford archive for new terminfos and information. # * Removed sgr from qnx entry (Thomas Dickey). # * Added entries for ICL and Kokusai Data Systems terminals. # * Incorporated NCR terminfos from the Boundless Technology FTP site. # * Incorporated att700 from the Boundless Technology FTP site. # * Miscellaneous contact-address and Web-page updates. # #-(changelog-beginning-ncurses-4.2)--------------------------------------------- # # 1998/5/9 # * add nxterm and xterm-color terminfo description (request by Cristian # Gafton ). # * modify rxvt terminfo description to clear alternate screen before # switching back to normal screen, for compatibility with applications # which use xterm (reported by Manoj Kasichainula ). # * modify linux terminfo description to reset color palette (reported # by Telford Tendys ). # # 1998/7/4 # * merge changes from current XFree86 xterm terminfo descriptions. # # 1998/7/25 # * Added minitel1 entries from Alexander Montaron. # * Added qnxt2 from Federico Bianchi. # * Added arm100 terminfo entries from Dave Millen. # # 1998/8/6 # * Added ncsa telnet entries from Francesco Potorti # # 1998/8/15 # * modify ncsa telnet entry to reflect color, other capabilities based on # examination of the source code - T.Dickey. # # 1998/8/22 # * Corrected some erroneous \\'s to \ (eterm, osborne) - TD. # # 1998/8/29 # * Added Francesco Potorti's tuned Wyse 99 entries. # * dtterm enacs correction from Alexander V. Lukyanov. # * Add ncsa-ns, ncsa-m-ns and ncsa-m entries from esr version. # * correct a typo in icl6404 entry. # * add xtermm and xtermc # # 1998/9/26 # * format most %'char' sequences to %{number} # * adapt IBM AIX 3.2.5 terminfo - T.Dickey # * merge Data General terminfo from Hasufin - TD # # 1998/10/10 # * update xterm-xfree86 to current (patch 84), for is2/rs2 changes - TD # * correct initialization string in xterm-r5, add misc other features # to correspond with xterm patch 84 - TD # # 1998/12/19 # * update xterm-xfree86 to current (patch 90), smcur/rmcur changes - TD # * add Mathew Vernon's mach console entries # * corrections for ncsa function-keys (report by Larry Virden) # # 1998/12/19 # * change linux to use ncv#2, since underline does not work with color - TD # # 1999/1/9 # * add kbt to iris-ansi, document other shift/control functionkeys - TD # * correct iris-ansi and iris-ansi-ap with respect to normal vs keypad # application modes, change kent to use the correct keypad code - TD # # 1999/1/10 # * add entry for Tera Term - TD # # 1999/1/23 # * minor improvements for teraterm entry - TD # * rename several entries used by BSDI: bsdos to bsdos-pc-nobold, # and bsdos-bold to bsdos-pc (Jeffrey C Honig) # # 1999/2/20 # * resolve ambiguity of kend/kll/kslt and khome/kfnd/kich1 strings in # xterm and ncsa entries by removing the unneeded ones. Note that # some entries will return kend & khome versus kslt and kfnd, for # PC-style keyboards versus strict vt220 compatiblity - TD # # 1999/3/13 # * adjust xterm-xfree86 khome/kend to match default PC-style keyboard # tables - TD # * add 'crt' entry - TD # * correct typos in 'linux-c' entry - TD # # 1999/3/14 # * update entries for BSD/OS console to use klone+sgr and klone+color # (Jeffrey C Honig) # # 1999/3/27 # * adjust xterm-xfree86 miscellaneous keypad keys, as per patch #94 - TD. # # 1999/4/10 # * add linux-lat, from RedHat patches to ncurses 4.2 # # 1999/4/17 # * add complete set of default function-key definitions for scoansi - TD. # # 1999/7/3 # * add cnorm, cvvis for Linux 2.2 kernels # # 1999/7/24 # * add kmous to xterm-r5 -TD # * correct entries xterm+sl and xterm+sl-twm, which were missing the # parent "use" clause -TD # # 1999/7/31 # * corrected cnorm, added el1 in 'screen' description -TD # # 1999/8/14 # * add ms-vt100 -TD # # 1999/8/21 # * corrections to beterm entry -TD # # 1999/8/28 # * add cygwin entry -TD # # 1999/9/4 # * minor corrections for beterm entry -TD # # 1999/9/18 # * add acsc string to HP 70092 terminfo entry -Joerg Wunsch # # 1999/9/25 # * add amiga-8bit entry # * add console entries from NetBSD: ofcons, wsvt25, wsvt25m, rcons, # rcons-color, based on # ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/termcap/termcap.src # * add alias for iris-ansi-net # # 1999/10/2 # * corrected scoansi entry's acsc, some function keys, add color -TD # # 1999/10/23 # * add cnorm, cvvis to cons25w, and modify ncv to add 'dim' -TD # * reorder ncsa entries to make ncsa-vt220 use the alternate function # key mapping, leaving Potorti's entries more like he named them -TD # * remove enter/exit am-mode from cygwin -TD # # 1999/10/30 # * correct typos in several entries (missing '[' from CSI): # mgr-sun, ncsa-m, vt320-k3, att505, avt-ns, as well as smir/rmir # strings for avt-ns -TD # * add 'dim' to ncv mask for linux (report by Klaus Weide). # # 1999/11/27 # * correct kf1-kf4 in xterm-r6 which were vt100-style PF1-PF4 -TD # * add hts to xterm-r6, and u6-u9 to xterm-r5 -TD # * add xterm-88color and xterm-256color -TD # # 1999/12/4 # * add "obsolete" termcap strings -TD # * add kvt and gnome entries -TD # # 1999/12/11 # * correct cup string for regent100 -TD # # 2000/1/1 # * update mach, add mach-color based on Debian diffs for ncurses 5.0 -TD # * add entries for xterm-hp, xterm-vt220, xterm-vt52 and xterm-noapp -TD # * change OTrs capabilities to rs2 -TD # * add obsolete and extended capabilities to 'screen' -TD # # 2000/1/5 # * remove kf0 from rxvt, vt520, vt525 and ibm5151 since it conflicts # with kf10 -TD # * updated xterm-xf86-v40, making kdch1 correspond to vt220 'Remove', # and adding kcbt -TD # # 2000/1/12 # * remove incorrect khome/kend from xterm-xf86-v333, which was based on # nonstandard resource settings -TD # # 2000/2/26 # * minor fixes for xterm-*, based on Debian #58530 -TD # # 2000/3/4 # * add several terminal types from esr's "11.0", as well as comments. # bq300*, dku7102-old, dku7202, hft, lft, pcmw, pmcons, tws*, vip*, # vt220-8bit, vt220-old, wy85-8bit # # 2000/3/18 # * add several terminal types from esr's "11.0.1" (ansi-*). # * update OTxx capabilities for changes on 2000/3/4. # * revert part of vt220 change (request by Todd C Miller for OpenBSD) # # 2000/3/26 # * move screen's AX extension to ecma+color, modify several entries to # use that, adjusting ncv as needed -TD # # 2000/4/8 # * add bsdos-pc-m, bsdos-pc-mono (Jeffrey C Honig) # * correct spelling error in entry name: bq300-rv was given as bg300-rv # in esr's version. # # 2000/4/15 # * add cud, ech, etc., to beterm based on feedback from Rico Tudor -TD # * correct color definition for ibm3164, make minor changes to other # IBM terminal definitions based on recent terminfo descriptions -TD # # 2000/4/22 # * add mgterm, from NetBSD -TD # * add alias sun-cgsix for sun-ss5 as per NetBSD # * change cons25w to use rs2 for reset rather than rs1 -TD # * add rc/sc to aixterm based on manpage -TD # # 2000/5/13 # * remove ncv from xterm-16color, xterm-256color # # 2000/6/10 # * add kmous capability to linux to use Joerg Schoen's gpm patch. # # 2000/7/1 # * add Eterm (Michael Jennings) # # 2000-07-18 # * add amiga-vnc entry. # # 2000-08-12 # * correct description of Top Gun Telnet. # * add kterm-color # # 2000-08-26 # * add qansi* entries from QNX ftp site. # # 2000-09-16 # * add Matrix Orbital entries by Eric Z. Ayers). # * add xterm-basic, xterm-sco entries, update related entries to XFree86 # 4.0.1c -TD # # 2000-09-17 # * add S0, E0 extensions to screen's entry -TD # # 2000-09-23 # * several corrections based on tic's new parameter-checking code -TD # * modify xterm-r6 and similar rs2 sequences which had \E7...\E8 # bracketing sequences that reset video attributes (\E8 would restore # them) -TD # # 2000-11-11 # * rename cygwin to cygwinB19, adapt newer entry from Earnie Boyd -TD # # 2000-12-16 # * improved scoansi, based on SCO man-page, and testing console, # scoterm with tack -TD # # 2001-01-27 # * modify kterm to use acsc via SCS controls. # # 2001-02-10 # * screen 3.9.8 allows xterm mouse controls to pass-through # # 2001-03-11 # * remove spurious "%|" from some xterm entries. # # 2001-03-31 # * modify 'screen' khome/kend to match screen 3.09.08 # * add examples of 'screen' customization (screen.xterm-xfree86, # screen.xterm-r6, screen.teraterm) -TD # # 2001-04-14 # * correct definitions of shifted editing keys for xterm-xfree86 -TD # * add "Apple_Terminal" entries -Benjamin Sittler # * remove time-delays from "Apple_Terminal" entries -TD # * make sgr entries time-delays consistent with individual caps -TD # # 2001-05-05 # * corrected/updated screen.xterm-xfree86 # # 2001-05-19 # * ELKS descriptions, from Federico Bianchi # * add u6 (CSR) to Eterm (Michael Jennings). # # 2001-07-21 # * renamed "Apple_Terminal" entries to "nsterm" to work with Solaris's # tic which handles names no longer than 14 characters. Add # corresponding descriptions for the Darwin PowerPC console named # "xnuppc" -Benjamin Sittler # # 2001-09-01 # * change kbs in mach entries to ^? (Marcus Brinkmann). # # 2001-11-17 # * add "putty" entry -TD # * updated "Apple_Terminal" entries -Benjamin Sittler # # 2001-11-24 # * add ms-vt100-color entry -TD # * add "konsole" entries -TD # # 2001-12-08 # * update gnome entry to Redhat 7.2 -TD # # 2002-05-25 # * add kf13-kf48 strings to cons25w -TD # * add pcvt25-color entry -TD # * changed a few /usr/lib/tabset -> /usr/share/tabset. # * improve some features of scoansi entry based on SCO's version -TD # * add scoansi-new entry corresponding to OpenServer 5.0.6 # # 2002-06-15 # * add kcbt to screen entry -TD # # 2002-06-22 # * add rxvt-16color, ibm+16color, mvterm entries -TD # # 2002-09-28 # * split out linux-basic entry, making linux-c inherit from that, and # in turn linux (with cnorm, etc) inherit from linux-c-nc to reflect # the history of this console type -TD # * scaled the linux-c terminfo entry to match linux-c-nc, i.e., the # r/g/b parameters of initc are in the range 0 to 1000 -TD # # 2002-10-05 # * minor fix for scale-factor of linux-c and linux-c-nc -TD # # 2002-11-09 # * split-out vt100+keypad and vt220+keypad, fix interchanged ka3/kb2 # in the latter -TD # # 2002-11-16 # * add entries for mterm (mterm, mterm-ansi, decansi) -TD # * ncr260wy350pp has only 16 color pairs -TD # * add sun-type4 from NetBSD -TD # * update xterm-xfree86 to current (patch 170) -TD # * add screen-bce, screen-s entries -TD # * add xterm-1002, xterm-1003 entries -TD # # 2003-01-11 # * update homepage for Top Gun Telnet/SSH # # 2003-01-25 # * reduce duplication in emx entries, added emx-base -TD # # 2003-05-24 # * corrected acs for screen.teraterm -TD # * add tkterm entry -TD # # 2003-07-15 # * cygwin changes from Charles Wilson: # misc/terminfo.src (nxterm|xterm-color): make xterm-color # primary instead of nxterm, to match XFree86's xterm.terminfo # usage and to prevent circular links. # (rxvt): add additional codes from rxvt.org. # (rxvt-color): new alias # (rxvt-xpm): new alias # (rxvt-cygwin): like rxvt, but with special acsc codes. # (rxvt-cygwin-native): ditto. rxvt may be run under XWindows, or # with a "native" MSWin GUI. Each takes different acsc codes, # which are both different from the "normal" rxvt's acsc. # (cygwin): cygwin-in-cmd.exe window. Lots of fixes. # (cygwinDBG): ditto. # # 2003-09-27 # * update gnome terminal entries -TD # # 2003-10-04 # * add entries for djgpp 2.03 and 2.04 -TD # # 2003-10-25 # * add alias for vtnt -TD # * update xterm-xfree86 for XFree86 4.4 -TD # # 2003-11-22 # * add linux-vt (Andrey V Lukyanov) # # 2003-12-20 # * add screen.linux -TD # # 2004-01-10 # * revised/improved entries for tvi912b, tvi920b (Benjamin Sittler) # # 2004-01-17 # * add OpenNT/Interix/SFU entries (Federico Bianchi) # * add vt100+ and vt-utf8 entries -TD # * add uwin entry -TD # # 2004-03-27 # * add sgr strings to several common entries lacking them, e.g., # screen, to make the entries more portable -TD # * remove cvvis from rxvt entry, since it is the same as cnorm -TD # * similar fixups for cvvis/cnorm various entries -TD # # 2004-05-22 # * remove 'ncv' from xterm-256color (patch 188) -TD # # 2004-06-26 # * add mlterm -TD # * add xterm-xf86-v44 -TD # * modify xterm-new aka xterm-xfree86 to accommodate luit, which relies # on G1 being used via an ISO-2022 escape sequence (report by # Juliusz Chroboczek) -TD # * add 'hurd' entry -TD # # 2004-07-03 # * make xterm-xf86-v43 derived from xterm-xf86-v40 rather than # xterm-basic -TD # * align with xterm #192's use of xterm-new -TD # * update xterm-new and xterm-8bit for cvvis/cnorm strings -TD # * make xterm-new the default "xterm" -TD # # 2004-07-10 # * minor fixes for emu -TD # * add emu-220 # * add rmam/smam to linux (Trevor Van Bremen) # * change wyse acsc strings to use 'i' map rather than 'I' -TD # * fixes for avatar0 -TD # * fixes for vp3a+ -TD # # 2004-07-17 # * add xterm-pc-fkeys -TD # * review/update gnome and gnome-rh90 entries (prompted by # Redhat Bugzilla #122815) -TD # * review/update konsole entries -TD # * add sgr, correct sgr0 for kterm and mlterm -TD # * correct tsl string in kterm -TD # # 2004-07-24 # * make ncsa-m rmacs/smacs consistent with sgr -TD # * add sgr, rc/sc and ech to syscons entries -TD # * add function-keys to decansi -TD # * add sgr to mterm-ansi -TD # * add sgr, civis, cnorm to emu -TD # * correct/simplify cup in addrinfo -TD # * corrections for gnome and konsole entries # (Redhat Bugzilla #122815) -Hans de Goede # * modify DEC entries (vt220, etc), to add sgr string, and to use # ISO-2022 strings for rmacs/smacs -TD # # 2004-07-31 # * rename xterm-pc-fkeys to xterm+pcfkeys -TD # # 2004-08-07 # * improved putty entry -Robert de Bath # # 2004-08-14 # * remove dch/dch1 from rxvt because they are implemented inconsistently # with the common usage of bce/ech -TD # * remove khome from vt220 (vt220's have no home key) -TD # * add rxvt+pcfkeys -TD # # 2004-08-21 # * modify several entries to ensure xterm mouse and cursor visibility # are reset in rs2 string: hurd, putty, gnome, konsole-base, mlterm, # Eterm, screen. (The xterm entries are left alone - old ones for # compatibility, and the new ones do not require this change) -TD # # 2004-08-28 # * add morphos entry -Pavel Fedin # * modify amiga-8bit to add khome/kend/knp/kpp -Pavel Fedin # * corrected \E[5?l to \E[?5l in vt320 entries -TD # # 2004-11-20 # * update wsvt25 entry -TD # # 2005-01-29 # * update pairs for xterm-88color and xterm-256color to reflect the # ncurses extended-color support -TD # # 2005-02-26 # * modify sgr/sgr0 in xterm-new to improve tgetent's derived "me" -TD # * add aixterm-16color to demonstrate 16-color capability -TD # # 2005-04-23 # * add media-copy to vt100 -TD # * corrected acsc string for vt52 -TD # # 2005-04-30 # * add kUP, kDN (user-defined shifted up/down arrow) definitions for # xterm-new -TD # * add kUP5, kUP6, etc., for xterm-new and rxvt -TD # # 2005-05-07 # * re-corrected acsc string for vt52 -TD # # 2005-05-28 # * corrected sun-il sgr string which referred to bold and underline -TD # * add sun-color entry -TD # # 2005-07-23 # * modify sgr0 in several entries to reset alternate-charset as in the # sgr string -TD # * modify sgr string of prism9 to better match the individual # attributes -TD # # 2005-10-15 # * correct order of use= in rxvt-basic -TD # # 2005-10-26 # * use kind/kri as shifted up/down cursor keys for xterm-new -TD # # 2005-11-12 # * other minor fixes to cygwin based on tack -TD # * correct smacs in cygwin (report by Baurzhan Ismagulov). # # 2006-02-18 # * add nsterm-16color entry -TD # * remove ncv flag from xterm-16color -TD # * remove setf/setb from xterm-256color to match xterm #209 -TD # * update mlterm entry to 2.9.2 -TD # # 2006-02-25 # * fixes to make nsterm-16color match report # by Christian Ebert -Alain Bench # # 2006-04-22 # * add xterm+256color building block -TD # * add gnome-256color, putty-256color, rxvt-256color -TD # # 2006-05-06 # * add hpterm-color -TD # # 2006-06-24 # * add xterm+pcc0, xterm+pcc1, xterm+pcc2, xterm+pcc3 -TD # * add gnome-fc5 (prompted by GenToo #122566) -TD # * remove obsolete/misleading comments about kcbt on Linux -Alain Bench # * improve xterm-256color by combining the ibm+16color setaf/setab # strings with SGR 48. The setf/setb strings also are cancelled here # rather than omitted so derived entries will cancel those also -Alain # Bench # # 2006-07-01 # * add some notes regarding copyright to terminfo.src -TD # * use rxvt+pcfkeys in Eterm -TD # * remove km and flash from gnome, Eterm and rxvt since they do not work # as one would expect (km sends ESC rather than setting the 8th bit # of the key) -TD # * add/use ansi+enq, vt100+enq and vt102+enq -TD # * add konsole-solaris -TD # # 2006-07-22 # * update xterm-sun and xterm-sco entries to match xterm #216 -TD # * modify is2/rs2 strings for xterm-r6 as per fix in xterm #148 -TD # * modify xterm-24 to inherit from "xterm" -TD # * add xiterm entry -TD # * add putty-vt100 entry -TD # * corrected spelling of Michael A Dorman's name, prompted by # http://www.advogato.org/person/mdorman/diary.html -TD # # 2006-08-05 # * add xterm+pcf0, xterm+pcf2 from xterm #216 -TD # * update xterm+pcfkeys to match xterm #216 -TD # # 2006-08-17 # * make descriptions of xterm entries consistent with its terminfo -TD # # 2006-08-26 # * add xfce, mgt -TD # # 2006-09-02 # * correct acsc string in kterm -TD # # 2006-09-09 # * add kon entry -TD # * remove invis from linux and related entries, add klone+sgr8 for those # that implement the feature (or have not been shown to lack it) -TD # # 2006-09-23 # * add ka2, kb1, kb3, kc2 to vt220-keypad as an extension -TD # * minor improvements to rxvt+pcfkeys -TD # # 2006-09-30 # * fix a few typos in if/then/else expressions -TD # # 2006-10-07 # * add several GNU Screen variations with 16- and 256-colors, and # status line (Alain Bench). # # 2007-03-03 # * add Newbury Data entries (Jean-Charles Billaud). # # 2007-06-10 # * corrected xterm+pcf2 modifiers for F1-F4, match xterm #226 -TD # # 2007-07-14 # * restore section of pre-ncurses-4.2 changelog to fix attribution -TD # * add konsole-256color entry -TD # # 2007-08-18 # * add 9term entry (request by Juhapekka Tolvanen) -TD # # 2007-10-13 # * correct kIC in rxvt+pcfkeys (prompted by Debian #446444) -TD # * add shift-control- and control-modified keys for rxvt editing # keypad -TD # * update mlterm entry to 2.9.3 -TD # * add mlterm+pcfkeys -TD # # 2007-10-20 # * move kLFT, kRIT, kind and kri capabilities from xterm-new to # xterm+pcc0, etc., to make the corresponding building blocks reflect # xterm's capabilities -TD # * add mrxvt entry -TD # * add xterm+r6f2, use in mlterm and mrxvt entries -TD # # 2007-11-03 # * correct acsc strings for h19 and z100 (Benjamin Sittler) # # 2007-11-11 # * use xterm-xf86-v44 for "xterm-xfree86", reflecting changes to # xterm starting with patch #216 -TD # * make legacy xterm entries such as xterm-24 inherit from xterm-old, # to match xterm #230 -TD # * extend xterm+pccX entries to match xterm #230 -TD # * add xterm+app, xterm+noapp, from xterm #230 -TD # * add/use xterm+pce2 from xterm #230, in xterm+pcfkeys -TD # # 2008-04-19 # * add screen.rxvt -TD # # 2008-04-28 # * add screen+fkeys (prompted by Debian #478094) -TD # # 2008-06-28 # * add screen.mlterm -TD # * improve mlterm and mlterm+pcfkeys -TD # # 2008-08-23 # * add Eterm-256color, Eterm-88color -TD # * add rxvt-88color -TD # # 2008-10-12 # * add teraterm4.59 entry, use that as primary teraterm entry, rename # original to teraterm2.3 -TD # * update "gnome" to 2.22.3 -TD # * update "konsole" to 1.6.6 -TD # * add "aterm" -TD # * add "linux2.6.26" -TD # # 2008-11-15 # * change several \E[2g (clear tab at current column) to \E[3g # (clear all tabs) to match definition for tbc capability -TD # # 2008-11-29 # * add eterm-color -TD # # 2009-01-10 # * add screen.Eterm -TD # # 2009-03-28 # * correct typo in pfkey of ansi.sys-old # (report by Kalle Olavi Niemitalo) # * move function- and cursor-keys from emx-base to ansi.sys, and create # a pfkey capability which handles F1-F48 -TD # # 2009-05-02 # * add vwmterm entry (Bryan Christ) # # 2009-09-19 # * change ncv and op capabilities in sun-color to match Sun's entry for # this (report by Laszlo Peter) # * improve interix smso by using reverse rather than bold (report by # Kristof Zelechovski). # # 2009-10-03 # * remove unnecessary kcan assignment to ^C from putty (Sven Joachim) # * add linux-16color (Benjamin Sittler) # * correct initc capability of linux-c-nc end-of-range (Benjamin Sittler) # * similar change for dg+ccc and dgunix+ccc (Benjamin Sittler) # * add ccc and initc capabilities to xterm-16color -TD # # 2009-10-31 # * updated nsterm* entries (Benjamin Sittler, prompted by GenToo #206201) # # 2009-12-12 # * updated nsterm* entries (Benjamin Sittler, Emanuele Giaquinta) # # 2009-12-19 # * add bw (auto-left-margin) to nsterm* entries (Benjamin Sittler) # * rename minix to minix-1.7, add minix entry for Minux3 -TD # # 2009-12-26 # * add bterm (bogl 0.1.18) -TD # * minor fix to rxvt+pcfkeys -TD # # 2010-02-06 # * update mrxvt to 0.5.4, add mrxvt-256color -TD # # 2010-02-13 # * add several screen-bce.XXX entries -TD # # 2010-02-23 # * modify screen-bce.XXX entries to exclude ech, since screen's color # model does not clear with color for that feature -TD # # 2010-03-20 # * rename atari and st52 to atari-old, st52-old, use newer entries from # FreeMiNT by Guido Flohr (from patch/report by Alan Hourihane). # # 2010-06-12 # * add mlterm-256color entry -TD # # 2010-07-17 # * add hard-reset for rs2 to wsvt25 to help ensure that reset ends # the alternate character set (patch by Nicholas Marriott) # # 2010-08-28 # * improve acsc for vt52 (Benjamin Sittler) # * modify nsterm entries for consistent sgr/sgr0 -TD # * modify xnuppc entries for consistent sgr/sgr0 -TD # * add invis to tek4115 sgr -TD # # 2010-09-11 # * reformat acsc strings to canonical format -TD # # 2010-09-25 # * add "XT" capability to entries for terminals that support both # xterm-style mouse- and title-controls, for "screen" which # special-cases TERM beginning with "xterm" or "rxvt" -TD # # 2010-10-02 # * fill in no-parameter forms of cursor-movement where a parameterized # form is available -TD # * fill in missing cursor controls where the form of the controls is # ANSI -TD # * add parameterized cursor-controls to linux-basic (report by Dae) -TD # # 2010-10-09 # * correct comparison used for setting 16-colors in linux-16color # entry (Novell #644831) -TD # * improve linux-16color entry, using "dim" for color-8 which makes it # gray rather than black like color-0 -TD # # 2010-11-20 # * make "vte" the principal entry defining "gnome", since GNOME terminal # is merely one of several terminals whose behavior is provided by this # library -TD # # 2010-11-27 # * fix typo in rmso for tek4106 -Goran Weinholt # # 2010-12-11 # * suppress ncv in screen entry, allowing underline -Alejandro R. Sedeno # * also suppress ncv in konsole-base -TD # # 2011-02-05 # * add U8 feature to denote entries for terminal emulators which do not # support VT100 SI/SO when processing UTF-8 encoding -TD # * add xterm-utf8 as a demo of the U8 feature -TD # # 2011-02-20 # * add cons25-debian entry (Brian M Carlson, Debian #607662). # # 2011-06-11 # * update minix entry to minix 3.2 (Thomas Cort). # # 2011-07-09 # * fix inconsistent tabset path in pcmw (Todd C. Miller). # * remove a backslash which continued comment, obscuring altos3 # definition with OpenBSD toolset (Nicholas Marriott). # # 2011-07-16 # * add/use xterm+tmux chunk from xterm #271 -TD # * resync xterm-new entry from xterm #271 -TD # * add E3 extended capability to linux-basic (Miroslav Lichvar) # * add linux2.2, linux2.6, linux3.0 entries to give context for E3 -TD # * add SI/SO change to linux2.6 entry (Debian #515609) -TD # # 2011-07-21 # * add kich1 to sun (Yuri Pankov) # * use bold rather than reverse for smso in sun-color (Yuri Pankov). # # 2011-08-06 # * corrected k9 in dg460-ansi, add other features based on manuals -TD # # 2011-08-20 # * minor cleanup of X-terminal emulator section -TD # * add terminator entry -TD # * add simpleterm entry -TD # # 2011-09-10 # * add xterm+kbs fragment from xterm #272 -TD # # 2011-11-12 # * add pccon entries for OpenBSD console (Alexei Malinin) # # 2011-12-17 # * corrected old changelog comments -TD # # 2011-11-24 # * add putty-sco -TD # # 2012-01-28 # * add mach-gnu (Samuel Thibault) # * add mach-gnu-color, tweaks to mach-gnu -TD # * make sgr for sun-color agree with smso -TD # * make sgr for prism9 agree with other caps -TD # * make sgr for icl6404 agree with other caps -TD # * make sgr for ofcons agree with other caps -TD # * make sgr for att5410v1, att4415, att620 agree with other caps -TD # * make sgr for aaa-unk, aaa-rv agree with other caps -TD # * make sgr for avt-ns agree with other caps -TD # # 2012-02-11 # * make sgr for xterm-pcolor agree with other caps -TD # * make sgr for att5425 agree with other caps -TD # * make sgr for att630 agree with other caps -TD # * make sgr for linux entries agree with other caps -TD # * make sgr for tvi9065 agree with other caps -TD # * make sgr for ncr260vt200an agree with other caps -TD # * make sgr for ncr160vt100pp agree with other caps -TD # * make sgr for ncr260vt300an agree with other caps -TD # * make sgr for aaa-60-dec-rv, aaa+dec agree with other caps -TD # * make sgr for cygwin, cygwinDBG agree with other caps -TD # # 2012-03-31 # * correct order of use-clauses in st-256color -TD # # 2012-04-01 # * revert 2011-07-16 change to "linux" alias, return to "linux2.2" -TD # # 2012-04-14 # * document all of the user-defined capabilities in one place -TD # * add XT to some places to improve usefulness for other applications # than screen, which would like to pretend that xterm's title is # a status-line. -TD # * change use-clauses in ansi-mtabs, hp2626, and hp2622 based on review # of ordering and overrides -TD # # 2012-04-21 # * add msgr to vt420, similar DEC vtXXX entries -TD # * add several missing vt420 capabilities from vt220 -TD # * factor out ansi+pp from several entries -TD # * change xterm+sl and xterm+sl-twm to include only the status-line # capabilities and not "use=xterm", making them more generally useful # as building-blocks -TD # * add dec+sl building block, as example -TD # # 2012-04-28 # * fix some inconsistencies between vt320/vt420, e.g., cnorm/civis -TD # * add eslok flag to dec+sl -TD # * dec+sl applies to vt320 and up -TD # * drop wsl width from xterm+sl -TD # * reuse xterm+sl in putty and nsca-m -TD # * add ansi+tabs to vt520 -TD # * add ansi+enq to vt220-vt520 -TD # # 2012-05-05 # * remove p6 (bold) from opus3n1+ for consistency -TD # * remove acs stuff from env230 per clues in Ingres termcap -TD # * modify env230 sgr/sgr0 to match other capabilities -TD # * modify smacs/rmacs in bq300-8 to match sgr/sgr0 -TD # * make sgr for dku7202 agree with other caps -TD # * make sgr for ibmpc agree with other caps -TD # * make sgr for tek4107 agree with other caps -TD # * make sgr for ndr9500 agree with other caps -TD # * make sgr for sco-ansi agree with other caps -TD # * make sgr for d410 agree with other caps -TD # * make sgr for d210 agree with other caps -TD # * make sgr for d470c, d470c-7b agree with other caps -TD # # 2012-05-12 # * rewrite vt520 entry based on vt420 -TD # * corrected 'op' for bterm (report by Samuel Thibault) -TD # # 2012-06-02 # * add kdch1 to wsvt25 entry from NetBSD CVS (reported by David Lord, # analysis by Martin Husemann). # * add cnorm/civis to wsvt25 entry from NetBSD CVS (report/analysis by # Onno van der Linden). # * add kdch1 aka "Remove" to vt220 and vt220-8 entries -TD # * add kdch1, etc., to qvt108 -TD # * add dl1/il1 to some entries based on dl/il values -TD # * add dl to simpleterm -TD # # 2012-06-10 # * modify some older xterm entries to align with xterm source -TD # * separate "xterm-old" alias from "xterm-r6" -TD # # 2012-07-28 # * add E3 to xterm-basic and putty -TD # # 2012-08-11 # * add nsterm-256color, make this the default nsterm -TD # * remove bw from nsterm-bce, per testing with tack -TD # # 2012-10-12 # * add vte-2012, gnome-2012, making these the defaults for vte/gnome # (patch by Christian Persch). # # 2012-11-02 # * reviewed vte-2012, reverted most of the change since it was incorrect # based on testing with tack -TD # * un-cancel the initc in vte-256color, since this was implemented # starting with version 0.20 in 2009 -TD # # 2013-03-16 # * correct typo in sgr string for sun-color, # add bold for consistency with sgr, # change smso for consistency with sgr -TD # * correct typo in sgr string for terminator -TD # * add blink to the attributes masked by ncv in linux-16color (report # by Benjamin Sittler) # # 2013-03-23 # * change initialization for vt220, similar entries for consistency # with cursor-key strings (NetBSD #47674) -TD # * further improvements to linux-16color (Benjamin Sittler) # # 2013-05-11 # * move nsterm-related entries out of "obsolete" section to more # plausible "ansi consoles" -TD # * additional cleanup of table-of-contents by reordering -TD # # 2013-06-07 # * added note to clarify Terminal.app's non-emulation of the various # terminal types listed in the preferences dialog -TD # # 2013-11-02 # * use TS extension to describe xterm's title-escapes -TD # * modify terminator and nsterm-s to use xterm+sl-twm building block -TD # * update hurd.ti, add xenl to reflect 2011-03-06 change in # http://git.savannah.gnu.org/cgit/hurd/hurd.git/log/console/display.c # (Debian #727119). # * simplify pfkey expression in ansi.sys -TD # # 2013-11-10 # * split-out building blocks xterm+sm+1002 and xterm+sm+1003 -TD # # 2014-02-22 # * updated notes for wsvt25 based on tack and vttest -TD # * add teken entry to show actual properties of FreeBSD's "xterm" # console -TD # # 2014-03-22 # * add terminology entry -TD # * add mlterm3 entry, use that as "mlterm" -TD # * inherit mlterm-256color from mlterm -TD # # 2014-03-23 # * fix typo in "mlterm" entry (report by Gabriele Balducci) -TD # # 2014-03-30 # * cancel ccc in putty-256color and konsole-256color for consistency # with the cancelled initc capability (patch by Sven Zuhlsdorf). # * add xterm+256setaf building block for various terminals which only # get the 256-color feature half-implemented -TD # * updated "st" entry (leaving the 0.1.1 version as "simpleterm") to # 0.4.1 -TD # # 2014-05-03 # * add vt520ansi (Mike Gran) # # 2014-05-24 # * correct several entries which had termcap-style padding used in # terminfo: adm21, aj510, alto-h19, att605-pc, x820 -TD # * correct syntax for padding in some entries: dg211, h19 -TD # * correct ti924-8 which had confused padding versus octal escapes -TD # * correct padding in sbi entry -TD # # 2014-06-07 # * update xterm-new to patch #305 -TD # + change screen's smso to use SGR 7 (ECMA-80 reverse) rather than SGR 3 # (italic). This was a long-ago typo in screen 3.1.1 which was # overlooked until a few terminal emulators implemented the feature -TD # # 2014-06-09 # > fix regression in screen terminfo entries (reports by Christian # Ebert, Gabriele Balducci) -TD # + revert the change to screen; see notes for why this did not work -TD # + cancel sitm/ritm for entries which extend "screen", to work around # screen's hardcoded behavior for SGR 3 -TD # # 2014-06-14 # + modify sgr for screen.xterm-new to support dim capability -TD # + add dim capability to nsterm+7 -TD # + cancel dim capability for iterm -TD # + add dim, invis capabilities to vte-2012 -TD # + add sitm/ritm to konsole-base and mlterm3 -TD # # 2014-10-06 # + add xterm-1005 and xterm-1006 entries, with suggested extension # capability "xm" -TD # # 2014-10-07 # + update test-report for mrxvt -TD # # 2014-10-11 # + add xterm-x10mouse, xterm-x11mouse, etc. -TD # # 2014-10-18 # + reviewed terminology 0.6.1, add function key definitions. None of # the vt100-compatibility issues were improved -TD # # 2015-04-22 # + add 'dim' capability to screen entry (report by Leonardo B Schenkel) # + add several key definitions to nsterm-bce to match preconfigured # keys, e.g., with OSX 10.9 and 10.10 (report by Leonardo B Schenkel) # # 2015-05-02 # + remove unnecessary ';' from E3 capabilities -TD # + add tmux entry, derived from screen (patch by Nicholas Marriott). # + split-out recent change to nsterm-bce as nsterm-build326, and add # nsterm-build342 to reflect changes with successive releases of OSX # (discussion with Leonardo B Schenkel) # + add xon, ich1, il1 to ibm3161 (patch by Stephen Powell, # Debian #783806) # # 2015-05-17 # + remove screen-bce.mlterm, since mlterm does not do "bce" -TD # + add several screen.XXX entries to support the respective variations # for 256 colors -TD # # 2015-05-23 # + add putty+fnkeys* building-block entries -TD # # 2015-05-30 # + remove spurious "%;" from st entry (report by Daniel Pitts) -TD # + add vte-2014, update vte to use that -TD # # 2015-06-27 # + comment-out "screen.xterm" entry, and inherit screen.xterm-256color # from xterm-new (report by Richard Birkett) -TD # # 2015-07-25 # + add status line to tmux via xterm+sl (patch by Nicholas Marriott). # + fixes for st 0.5 from testing with tack -TD # # 2015-10-24 # + updated minitel entries to fix kel problem with emacs, and add # minitel1b-nb (Alexandre Montaron). # + reviewed/updated nsterm entry Terminal.app in OSX -TD # + replace some dead URLs in commands with equivalents from the # Internet Archive -TD # # 2015-11-14 # + add bold to pccon+sgr+acs and pccon-base (Tati Chevron). # + add keys f12-f124 to pccon+keys (Tati Chevron). # # 2015-11-21 # + fix some inconsistencies in the pccon* entries -TD # # 2015-11-28 # + add viewdata (Alexandre Montaron). # # 2016-01-16 # + tidy up comments about hardcoded 256color palette (report by # Leonardo Brondani Schenkel) -TD # + add putty-noapp entry, and amend putty entry to use application mode # for better consistency with xterm (report by Leonardo Brondani # Schenkel) -TD # ######## SHANTIH! SHANTIH! SHANTIH! ncurses-6.0-20160213/misc/makedef.cmd0000644000175100001440000001445110422534352015475 0ustar tomusers/**************************************************************************** * Copyright (c) 1998,2006 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: makedef.cmd,v 1.5 2006/04/22 23:14:50 tom Exp $ * * Author: Juan Jose Garcia Ripoll . * Webpage: http://www.arrakis.es/~worm/ * * makedef.cmd - update a DLL export list using a newly created library file * in a.out format, plus an old .DEF file. * * standard output gets a sorted list with all entrypoints with entrycodes. * This list, plus a few .def sentences (LIBRARY, DESCRIPTION and EXPORT) * is used to build a new .def file. * * `_nc_*' symbols are ignored. * * returns 1 when the old def_file is corrupted -- that is, export items are * not properly formatted. * * returns 0 if everything went OK. */ parse arg lib_file def_file lib_file = translate(lib_file,'\','/') def_file = translate(def_file,'\','/') call CleanQueue /* * `codes' is the stem that links a code to every symbol * `names' is the stem where symbols are stored sequentially * `last' is the index of the last symbol defined */ last = 0 used. = 0 codes. = 0 names. = '' tmp_name = 'foo.tmp' /* * This sed expression cleans empty lines, comments and special .DEF * commands, such as LIBRARY..., EXPORTS..., etc */ tidy_up = '"/^[A-Z]/d;s/[ ][ ]*/ /g;s/;.*$//g;s/^[ ]*//g;/^[ ]*$/d"' /* * First we find all public symbols (functions and variables). Next we * concatenate this list with the old one, sorting it and wiping out * all unused data (comments, DLL directives, blanks, etc). All this * information is pushed into a REXX private list with the RXQUEUE * utility program. */ '@echo off' 'emxexp -u' lib_file '>' tmp_name 'cat' tmp_name def_file '| sed' tidy_up '| sort > foo2.tmp' 'type foo2.tmp | rxqueue' 'del' tmp_name '1>NUL' /* * This loop runs over the queue items */ do while queued() > 0 /* * We retrieve the symbol name (NEW_NAME) and its number (NEW_NUMBER) * When the line comes from `emximp's output, there's no number, so * we assign it the special value 0. */ parse pull new_symbol '@'new_code rest if Left(new_symbol,1) = '"' then parse var new_symbol '"' new_name '"' rest else do echo 'Symbol 'new_symbol' was not quoted' new_name = new_symbol end if new_code = '' then new_code = 0 /* * Here, one would place all smart checks that would kill unused symbols. * However, export tables are not that big, so why bothering? if Left(new_name,4) = '_nc_' then iterate */ /* * The algorithm: * IF (this is the 2nd time the symbol appears) THEN * (this symbol comes from a .DEF file) * it has a valid code that we store * we mark that code as used * ELIF (it has no number) THEN * (it's a new symbol) * we increase the counter of defined symbols * we assign it the special number 0 * (later on it'll be assigned an unused export code) * ELSE * this symbol was in the old DLL and it's no longer * here, so we skip it. */ select when new_name = '' then 'echo Warning: empty symbol found 1>&2' when names.last = new_name then do codes.last = new_code used.new_code = 1 end when new_code = 0 then do last = last + 1 names.last = new_name codes.last = 0 end otherwise 'echo Warning: symbol "'new_name'" has disappeared 1>&2' end /* select */ end /* do while queued() */ /* * Finally we scan the stem, writing out all symbols with export codes. * Those that did not have a valid one (just 0) are assigned a new one. */ new_code = 1 inx = 1 do while inx <= last if codes.inx = 0 then do do while used.new_code \= 0 new_code = new_code + 1 end codes.inx = new_code used.new_code = 1 end say ' "'names.inx'" @'codes.inx' NONAME' inx = inx + 1 end 'del foo2.tmp 1>NUL' exit 0 /* * Cleans the REXX queue by pulling and forgetting every line. * This is needed, at least, when `makedef.cmd' starts, because an aborted * REXX program might have left some rubbish in. */ CleanQueue: procedure do while queued() > 0 parse pull foo end return ncurses-6.0-20160213/misc/panel.ref0000644000175100001440000000062606625700164015216 0ustar tomusersLIBRARY panel2 INITINSTANCE DESCRIPTION 'NCurses 1.9.9e-1 for OS/2 - panel library' EXPORTS "panel_window" @1 "update_panels" @2 "hide_panel" @3 "show_panel" @4 "del_panel" @5 "top_panel" @6 "bottom_panel" @7 "new_panel" @8 "panel_above" @9 "panel_below" @10 "set_panel_userptr" @11 "panel_userptr" @12 "move_panel" @13 "replace_panel" @14 "panel_hidden" @15 ncurses-6.0-20160213/misc/form.ref0000644000175100001440000000502206625701710015053 0ustar tomusersLIBRARY FORM2 INITINSTANCE DESCRIPTION 'NCurses 1.9.9e-1 for OS/2 - forms library' EXPORTS ; ; SHARED VARIABLES ; "TYPE_ALPHA" @1 ;NONAME "TYPE_ALNUM" @2 ;NONAME "TYPE_ENUM" @3 ;NONAME "TYPE_INTEGER" @4 ;NONAME "TYPE_NUMERIC" @5 ;NONAME "TYPE_REGEXP" @6 ;NONAME "_nc_Default_Form" @10 ;NONAME "_nc_Default_Field" @11 ;NONAME ; ; FIELD FUNCTIONS ; "new_fieldtype" @20 ;NONAME "link_fieldtype" @21 ;NONAME "free_fieldtype" @22 ;NONAME "set_fieldtype_arg" @23 ;NONAME "set_fieldtype_choice" @24 ;NONAME "new_field" @30 ;NONAME "dup_field" @31 ;NONAME "link_field" @32 ;NONAME "free_field" @33 ;NONAME "field_info" @34 ;NONAME "dynamic_field_info" @35 ;NONAME "set_max_field" @36 ;NONAME "move_field" @37 ;NONAME "set_field_type" @38 ;NONAME "set_new_page" @39 ;NONAME "set_field_just" @40 ;NONAME "field_just" @41 ;NONAME "set_field_fore" @42 ;NONAME "set_field_back" @43 ;NONAME "set_field_pad" @44 ;NONAME "field_pad" @45 ;NONAME "set_field_buffer" @46 ;NONAME "set_field_status" @47 ;NONAME "set_field_userptr" @48 ;NONAME "set_field_opts" @49 ;NONAME "field_opts_on" @50 ;NONAME "field_opts_off" @51 ;NONAME "field_fore" @52 ;NONAME "field_back" @53 ;NONAME "new_page" @54 ;NONAME "field_status" @55 ;NONAME "field_arg" @56 ;NONAME "field_userptr" @57 ;NONAME "field_type" @58 ;NONAME "field_buffer" @59 ;NONAME "field_opts" @60 ;NONAME ; ; FORM FUNCTIONS ; "new_form" @100 ;NONAME "form_fields" @101 ;NONAME "current_field" @102 ;NONAME "form_win" @103 ;NONAME "form_sub" @104 ;NONAME "form_init" @105 ;NONAME "form_term" @106 ;NONAME "field_init" @107 ;NONAME "field_term" @108 ;NONAME "free_form" @109 ;NONAME "set_form_fields" @110 ;NONAME "field_count" @111 ;NONAME "set_form_win" @112 ;NONAME "set_form_sub" @113 ;NONAME "set_current_field" @114 ;NONAME "field_index" @115 ;NONAME "set_form_page" @116 ;NONAME "form_page" @117 ;NONAME "scale_form" @118 ;NONAME "set_form_init" @119 ;NONAME "set_form_term" @120 ;NONAME "set_field_init" @121 ;NONAME "set_field_term" @122 ;NONAME "post_form" @123 ;NONAME "unpost_form" @124 ;NONAME "pos_form_cursor" @125 ;NONAME "form_driver" @126 ;NONAME "set_form_userptr" @127 ;NONAME "set_form_opts" @128 ;NONAME "form_opts_on" @129 ;NONAME "form_opts_off" @130 ;NONAME "form_userptr" @131 ;NONAME "form_opts" @132 ;NONAME "data_ahead" @133 ;NONAME "data_behind" @134 ;NONAME ncurses-6.0-20160213/misc/shlib0000755000175100001440000001165310552211140014433 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 1998-2003,2005 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996 # # $Id: shlib,v 1.11 2007/01/13 17:09:52 tom Exp $ # Use this script as a wrapper when running executables linked to shared # libraries on systems that use the $LD_LIBRARY_PATH variable and don't embed # the soname's path within the linked executable (such as IRIX), e.g, # # shlib knight # # Setting LD_LIBRARY_PATH, overrides/supplements the loader's normal search # path, and works on most systems. The drawback is that then the environment # variable has to be set to run the programs within this directory tree. # # For Linux (and other systems using the GNU loader), we can use the rpath # directive, which embeds the pathname of the library within the executable. # Using the Linux loader's rpath directive introduces a constraint, since # it's embedded into the binary, and means that the binary cannot be moved # around (though it'll work if the $exec_prefix convention that puts the bin # and lib directories under the same parent is followed). # # Using the actual soname (e.g., ../lib/libncurses.so) alone, is a more # flexible solution; you can link without having to set the environment # variable, and on some systems (IRIX) you can even run the resulting binaries # without setting LD_LIBRARY_PATH. # # Using a conventional link, with -L and -l options on Linux results in a # statically linked executable, which we don't want at all. # # Special cases: # # BeOS R4.5 uses $LIBRARY_PATH rather than $LD_LIBRARY_PATH. # Cygwin uses $PATH # Mac OS X uses $DYLD_LIBRARY_PATH # # Other cases not handled by this script: # # AIX uses $LIBPATH # IRIX64 may use $LD_LIBRARY64_PATH or $LD_LIBRARYN32_PATH # Solaris may use $LD_LIBRARY_PATH_64 # CDPATH= # # Make sure that we use the PATH that was set in run_tic.sh if test -n "$SHLIB_PATH" ; then PATH=$SHLIB_PATH export PATH fi # Find the lib-directory for this build tree q="" for p in lib ../lib ../../lib ../../../lib do if test -d $p; then q=`cd $p; pwd` break elif test -f configure && test ! -d ../$p ; then break fi done # Set the environment variable. if test -n "$q" ; then system= if test -n "$SHLIB_HOST" ; then system="$SHLIB_HOST" elif test -n "$PATHEXT" ; then system=cygwin elif test -n "$LIBRARY_PATH" ; then system=beos elif test -n "$DYLD_LIBRARY_PATH" ; then system=darwin elif test -n "$LD_LIBRARY_PATH"; then system=unix else for r in $q/*.* do if test -f "$r" then case $r in *.dll) system=cygwin ;; *.dylib) system=darwin ;; esac fi test -n "$system" && break done fi case .$system in .cygwin*) variable=PATH ;; .beos*) variable=LIBRARY_PATH ;; .darwin*) variable=DYLD_LIBRARY_PATH ;; *) variable=LD_LIBRARY_PATH ;; esac eval 'test -z "$'$variable'" && '$variable'=":"' eval $variable'="$q:$'$variable'"' eval 'export '$variable fi eval "$*" ncurses-6.0-20160213/misc/cmpdef.cmd0000644000175100001440000001155510422534352015341 0ustar tomusers/**************************************************************************** * Copyright (c) 1998,2006 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: cmpdef.cmd,v 1.3 2006/04/22 23:14:50 tom Exp $ * * Author: Juan Jose Garcia Ripoll . * Webpage: http://www.arrakis.es/~worm/ * * cmpdef.cmd - compares two .def files, checking whether they have * the same entries with the same export codes. * * returns 0 if there are no conflicts between the files -- that is, * the newer one can replace the older one. * * returns 1 when either of the files is not properly formatted and * when there are conflicts: two symbols having the same export code. * * the standard output shows a list with newly added symbols, plus * replaced symbols and conflicts. */ parse arg def_file1 def_file2 def_file1 = translate(def_file1,'\','/') def_file2 = translate(def_file2,'\','/') call CleanQueue /* * `cmp' is zero when the last file is valid and upward compatible * `numbers' is the stem where symbols are stored */ cmp = 0 names. = '' numbers. = 0 /* * This sed expression cleans empty lines, comments and special .DEF * commands, such as LIBRARY..., EXPORTS..., etc */ tidy_up = '"s/[ ][ ]*/ /g;s/;.*//g;/^[ ]*$/d;/^[a-zA-Z]/d;"' /* * First we find all public symbols from the original DLL. All this * information is pushed into a REXX private list with the RXQUEUE * utility program. */ '@echo off' 'type' def_file1 '| sed' tidy_up '| sort | rxqueue' do while queued() > 0 /* * We retrieve the symbol name (NAME) and its number (NUMBER) */ parse pull '"' name '"' '@'number rest if number = '' || name = '' then do say 'Corrupted file' def_file1 say 'Symbol' name 'has no number' exit 1 end else do numbers.name = number names.number = name end end /* * Now we find all public symbols from the new DLL, and compare. */ 'type' def_file2 '| sed' tidy_up '| sort | rxqueue' do while queued() > 0 parse pull '"' name '"' '@'number rest if name = '' | number = '' then do say 'Corrupted file' def_file2 say 'Symbol' name 'has no number' exit 1 end if numbers.name = 0 then do cmp = 1 if names.number = '' then say 'New symbol' name 'with code @'number else say 'Conflict old =' names.number ', new =' name 'at @'number end else if numbers.name \= number then do cmp = 1 say name 'Symbol' name 'changed from @'numbers.name 'to @'number end end /* do */ exit cmp /* * Cleans the REXX queue by pulling and forgetting every line. * This is needed, at least, when `cmpdef.cmd' starts, because an aborted * REXX program might have left some rubbish in. */ CleanQueue: procedure do while queued() > 0 parse pull foo end return ncurses-6.0-20160213/misc/form.def0000644000175100001440000000565407130475212015045 0ustar tomusersLIBRARY form5 INITINSTANCE TERMINSTANCE DESCRIPTION "NCurses-5-1-20000704, module form" CODE LOADONCALL DATA LOADONCALL NONSHARED MULTIPLE EXPORTS "TYPE_ALNUM" @2 NONAME "TYPE_ALPHA" @1 NONAME "TYPE_ENUM" @3 NONAME "TYPE_INTEGER" @4 NONAME "TYPE_IPV4" @7 NONAME "TYPE_NUMERIC" @5 NONAME "TYPE_REGEXP" @6 NONAME "_nc_Copy_Argument" @8 NONAME "_nc_Copy_Type" @9 NONAME "_nc_Default_Field" @11 NONAME "_nc_Default_FieldType" @12 NONAME "_nc_Default_Form" @10 NONAME "_nc_First_Active_Field" @13 NONAME "_nc_Free_Argument" @14 NONAME "_nc_Free_Type" @15 NONAME "_nc_Internal_Validation" @16 NONAME "_nc_Make_Argument" @17 NONAME "_nc_Position_Form_Cursor" @18 NONAME "_nc_Refresh_Current_Field" @19 NONAME "_nc_Set_Current_Field" @25 NONAME "_nc_Set_Form_Page" @26 NONAME "_nc_Synchronize_Attributes" @27 NONAME "_nc_Synchronize_Options" @28 NONAME "current_field" @102 NONAME "data_ahead" @133 NONAME "data_behind" @134 NONAME "dup_field" @31 NONAME "dynamic_field_info" @35 NONAME "field_arg" @56 NONAME "field_back" @53 NONAME "field_buffer" @59 NONAME "field_count" @111 NONAME "field_fore" @52 NONAME "field_index" @115 NONAME "field_info" @34 NONAME "field_init" @107 NONAME "field_just" @41 NONAME "field_opts" @60 NONAME "field_opts_off" @51 NONAME "field_opts_on" @50 NONAME "field_pad" @45 NONAME "field_status" @55 NONAME "field_term" @108 NONAME "field_type" @58 NONAME "field_userptr" @57 NONAME "form_driver" @126 NONAME "form_fields" @101 NONAME "form_init" @105 NONAME "form_opts" @132 NONAME "form_opts_off" @130 NONAME "form_opts_on" @129 NONAME "form_page" @117 NONAME "form_request_by_name" @29 NONAME "form_request_name" @61 NONAME "form_sub" @104 NONAME "form_term" @106 NONAME "form_userptr" @131 NONAME "form_win" @103 NONAME "free_field" @33 NONAME "free_fieldtype" @22 NONAME "free_form" @109 NONAME "link_field" @32 NONAME "link_fieldtype" @21 NONAME "move_field" @37 NONAME "new_field" @30 NONAME "new_fieldtype" @20 NONAME "new_form" @100 NONAME "new_page" @54 NONAME "pos_form_cursor" @125 NONAME "post_form" @123 NONAME "scale_form" @118 NONAME "set_current_field" @114 NONAME "set_field_back" @43 NONAME "set_field_buffer" @46 NONAME "set_field_fore" @42 NONAME "set_field_init" @121 NONAME "set_field_just" @40 NONAME "set_field_opts" @49 NONAME "set_field_pad" @44 NONAME "set_field_status" @47 NONAME "set_field_term" @122 NONAME "set_field_type" @38 NONAME "set_field_userptr" @48 NONAME "set_fieldtype_arg" @23 NONAME "set_fieldtype_choice" @24 NONAME "set_form_fields" @110 NONAME "set_form_init" @119 NONAME "set_form_opts" @128 NONAME "set_form_page" @116 NONAME "set_form_sub" @113 NONAME "set_form_term" @120 NONAME "set_form_userptr" @127 NONAME "set_form_win" @112 NONAME "set_max_field" @36 NONAME "set_new_page" @39 NONAME "unpost_form" @124 NONAME ncurses-6.0-20160213/misc/chkdef.cmd0000644000175100001440000001041510422534352015321 0ustar tomusers/**************************************************************************** * Copyright (c) 1998,2006 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: chkdef.cmd,v 1.3 2006/04/22 23:14:50 tom Exp $ * * Author: Juan Jose Garcia Ripoll . * Webpage: http://www.arrakis.es/~worm/ * * chkdef.cmd - checks that a .def file has no conflicts and is properly * formatted. * * returns nonzero if two symbols have the same code or a line has a wrong * format. * * returns 0 otherwise * * the standard output shows conflicts. */ parse arg def_file def_file = translate(def_file,'\','/') call CleanQueue /* * `cmp' is zero when the file is valid * `codes' associates a name to a code * `names' associates a code to a name */ cmp = 0 codes. = 0 names. = '' /* * This sed expression cleans empty lines, comments and special .DEF * commands, such as LIBRARY..., EXPORTS..., etc */ tidy_up = '"s/[ ][ ]*/ /g;s/;.*//g;/^[ ]*$/d;/^[a-zA-Z]/d;"' /* * First we find all public symbols from the original DLL. All this * information is pushed into a REXX private list with the RXQUEUE * utility program. */ '@echo off' 'type' def_file '| sed' tidy_up '| sort | rxqueue' do while queued() > 0 /* * We retrieve the symbol name (NEW_NAME) and its code (NEW_CODE) */ parse pull '"' new_name '"' '@'new_code rest select when (new_code = '') | (new_name = '') then /* The input was not properly formatted */ do say 'Error: symbol "'new_name'" has no export code or is empty' cmp = 1 end when codes.new_name \= 0 then /* This symbol was already defined */ if codes.new_name \= new_code then do cmp = 2 say 'Symbol "'new_name'" multiply defined' end when names.new_code \= '' then /* This code was already assigned to a symbol */ if names.new_code \= new_name then do cmp = 3 say 'Conflict with "'names.new_code'" & "'new_name'" being @'new_code end otherwise do codes.new_name = new_code names.new_code = new_name end end /* select */ end exit cmp CleanQueue: procedure do while queued() > 0 parse pull foo end return ncurses-6.0-20160213/misc/panel.def0000644000175100001440000000105407130475213015170 0ustar tomusersLIBRARY panel5 INITINSTANCE TERMINSTANCE DESCRIPTION "NCurses-5-1-20000704, module panel" CODE LOADONCALL DATA LOADONCALL NONSHARED MULTIPLE EXPORTS "bottom_panel" @7 NONAME "del_panel" @5 NONAME "hide_panel" @3 NONAME "move_panel" @13 NONAME "new_panel" @8 NONAME "panel_above" @9 NONAME "panel_below" @10 NONAME "panel_hidden" @15 NONAME "panel_userptr" @12 NONAME "panel_window" @1 NONAME "replace_panel" @14 NONAME "set_panel_userptr" @11 NONAME "show_panel" @4 NONAME "top_panel" @6 NONAME "update_panels" @2 NONAME ncurses-6.0-20160213/misc/gen-pkgconfig.in0000644000175100001440000001302112546041755016463 0ustar tomusers#!@SHELL@ # $Id: gen-pkgconfig.in,v 1.29 2015/07/04 20:37:01 tom Exp $ ############################################################################## # Copyright (c) 2009-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey # # The complete configure script for ncurses is the ncurses5-config (or similar # name, depending on the flavor, e.g., ncursesw5-config, ncurses6-config, etc). # That provides more information than pkg-config, and is the portable and # recommended solution. # # For each library, generate a ".pc" file which depends on the base ncurses # library, except that the tinfo library does not depend on ncurses. LIB_NAME=@LIB_NAME@ TINFO_NAME=@TINFO_NAME@ PANEL_NAME=@PANEL_NAME@ MENU_NAME=@MENU_NAME@ FORM_NAME=@FORM_NAME@ CXX_NAME=@CXX_NAME@ DFT_DEP_SUFFIX=@DFT_DEP_SUFFIX@ TINFO_ARG_SUFFIX=@TINFO_ARG_SUFFIX@ CXX_LIB_SUFFIX=@CXX_LIB_SUFFIX@ suffix=@PC_MODULE_SUFFIX@ prefix="@prefix@" exec_prefix="@exec_prefix@" includedir="@includedir@@includesubdir@" libdir="@libdir@" show_prefix='@prefix@' show_exec_prefix='@exec_prefix@' show_includedir='@includedir@@includesubdir@' show_libdir='@libdir@' MAIN_LIBRARY="${LIB_NAME}@USE_ARG_SUFFIX@" SUB_LIBRARY="${TINFO_ARG_SUFFIX}" PANEL_LIBRARY="${PANEL_NAME}@USE_ARG_SUFFIX@" MENU_LIBRARY="${MENU_NAME}@USE_ARG_SUFFIX@" FORM_LIBRARY="${FORM_NAME}@USE_ARG_SUFFIX@" CFLAGS="@PKG_CFLAGS@" if test "$includedir" != "/usr/include" ; then includetop=`echo "$includedir" | sed -e 's,/include/[^/]*$,/include,'` test "$includetop" = "/usr/include" && includetop="$includedir" if test "x$includetop" != "x$includedir" then CFLAGS="$CFLAGS -I${includetop}" fi CFLAGS="$CFLAGS -I\${includedir}" fi LDFLAGS= if test "$libdir" != "/usr/lib" ; then LDFLAGS="$LDFLAGS -L\${libdir}" fi if test "x@EXTRA_LDFLAGS@" != "x" ; then LDFLAGS="$LDFLAGS @EXTRA_LDFLAGS@" fi # Check if we should specify the tinfo library explicitly so that terminfo # functions or curses variables (which also reside in tinfo) can be linked # using the -lncurses option. NEED_TINFO=no if test "x@TINFO_LIBS@" != "x" && \ test "x$TINFO_ARG_SUFFIX" != "x$MAIN_LIBRARY" then case "x$LDFLAGS" in (*--as-needed*) NEED_TINFO=yes ;; esac case "x$LDFLAGS" in (*,-rpath,*) ;; (*) NEED_TINFO=yes ;; esac fi for name in @PC_MODULES_TO_MAKE@ do name="${name}" LIBS="-l$name" desc="ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" reqs= if test $name = $MAIN_LIBRARY ; then desc="$desc library" test $NEED_TINFO = yes && LIBS="$LIBS -l$TINFO_ARG_SUFFIX" elif test $name = $SUB_LIBRARY ; then desc="$desc terminal interface library" elif expr $name : ".*${CXX_NAME}.*" >/dev/null ; then reqs="$PANEL_LIBRARY${suffix}, $MENU_LIBRARY${suffix}, $FORM_LIBRARY${suffix}, $MAIN_LIBRARY${suffix}" desc="$desc add-on library" else reqs="$MAIN_LIBRARY${suffix}" desc="$desc add-on library" fi if test $name != $SUB_LIBRARY && \ test $SUB_LIBRARY != $MAIN_LIBRARY && \ test $name != $TINFO_NAME && \ test $NEED_TINFO != yes ; then test -n "$reqs" && reqs="$reqs, " reqs="${reqs}${SUB_LIBRARY}${suffix}" fi echo "** creating ${name}${suffix}.pc" cat >${name}${suffix}.pc < if test x@WITH_OVERWRITE@ = xno ; then case $includedir in $prefix/include/ncurses@LIB_SUFFIX@@EXTRA_SUFFIX@) includedir=`echo "$includedir" | sed -e 's,/[^/]*$,,'` ;; esac fi test $# = 0 && exec @SHELL@ $0 --error while test $# -gt 0; do case "$1" in # basic configuration --prefix) echo "$prefix" ;; --exec-prefix) echo "$exec_prefix" ;; # compile/link --cflags) INCS="@PKG_CFLAGS@" if test "x@WITH_OVERWRITE@" = xno ; then INCS="$INCS -I${includesubdir}" fi if test "${includedir}" != /usr/include ; then INCS="$INCS -I${includedir}" fi sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO $INCS ENDECHO ;; --libs) if test "$libdir" = /usr/lib then LIBDIR= else LIBDIR=-L$libdir fi if test @TINFO_NAME@ = @LIB_NAME@ ; then sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO $LIBDIR @EXTRA_LDFLAGS@ -l${THIS} @LIBS@ ENDECHO else sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO $LIBDIR @EXTRA_LDFLAGS@ -l${THIS} -l${TINFO_LIB} @LIBS@ ENDECHO fi ;; # identification --version) echo "@NCURSES_MAJOR@.@NCURSES_MINOR@.@NCURSES_PATCH@" ;; --abi-version) echo "@cf_cv_abi_version@" ;; --mouse-version) echo "@NCURSES_MOUSE_VERSION@" ;; # locations --bindir) echo "${bindir}" ;; --datadir) echo "${datadir}" ;; --includedir) echo "${includedir}" ;; --libdir) echo "${libdir}" ;; --mandir) echo "${mandir}" ;; --terminfo) echo "@TERMINFO@" ;; --terminfo-dirs) echo "@TERMINFO_DIRS@" ;; --termpath) echo "@TERMPATH@" ;; # general info --help) cat <&2 exit 1 ;; esac shift done # vi:ts=4 sw=4 # vile:shmode ncurses-6.0-20160213/misc/cleantic.cmd0000644000175100001440000000504310422534352015660 0ustar tomusers/**************************************************************************** * Copyright (c) 1998,2006 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: cleantic.cmd,v 1.4 2006/04/22 23:14:50 tom Exp $ * * Author: Juan Jose Garcia Ripoll . * Webpage: http://www.arrakis.es/~worm/ */ parse arg dir pause dir = translate(dir,'\','/'); letters = '0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z' if dir = '' then dir = '.' 'echo Cleaning 'dir 'for %%1 in ('letters') do @if not exist 'dir'\%%1\* (echo Cleaning ...\%%1 & rd %%1 2>NUL)' ncurses-6.0-20160213/Makefile.os20000644000175100001440000002105510422522051014612 0ustar tomusers############################################################################## # Copyright (c) 1998-2000,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ################################################################################ # $Id: Makefile.os2,v 1.11 2006/04/22 21:46:17 tom Exp $ # # Wrapper Makefile for ncurses library under OS/2. # Author: Juan Jose Garcia Ripoll . # Webpage: http://www.arrakis.es/~worm/ ################################################################################ # # Notes (from I Zakharevich) # ~~~~~~~~~~~~~~~~~~~~~~~~~~ # I could build the library with the following sequence of commands: # # touch Makefile # make -f Makefile.os2 config # make -f Makefile.os2 CC=gcc HOSTCC=gcc CXX=gcc # # Ignoring the following errors: # Invalid configuration `os2'... # ... ac_maketemp="make": not found # ... syntax error: `done' unexpected # No rule to make target `lib/ncurses4.dll' # # You may need to run # # rm make.defs # make -f Makefile.os2 make.defs # # if the build of misc/panel.def fails. # # If you do not have perl, the configuration will fail. Use autoconf to # generate the EMX-specific configure script (see README.emx), and run the # configure script to generate the makefiles. Then, run # # make -f Makefile.os2 make.dlls # # Notes (from J J G Ripoll) # ~~~~~~~~~~~~~~~~~~~~~~~~~ # The `make.defs' rule creates the new '.def' files and outputs a diagnostic # about symbols that disappear from one release to the other, as well as # checks about the new '.def' consistency. If there were no problems, the # maintainer is free to replace the `.ref' files with the newer ones using the # `save.defs' rule. So, the only tough work is ensuring that the symbols that # disappear are not essential. # # I first thought about killing '_nc_*' symbols, but it seems that some of # them --_nc_panel_hook, _nc_ada*, etc-- are needed outside ncurses.dll. # However, the whole size of the export table will not be larger than 1k or # so. # # [installation] # # The way things are handled in misc/Makefile is not well suited for OS/2, # where only emx.src is needed. Thus, I've written a few wrapper rules in # Makefile.os2 that handle installation/deinstallation. # # [distribution] # # There's also a new rule that configures and builds a sort of binary # distribution, much like the one I prepared for 1.9.9e. It's `os2dist'. # ################################################################################ all :: config # This is for configuring # What is a useful value for this? CONFIG_OPTS = --enable-termcap WWWGET = lynx -source MV_F = mv -f DLL_LN_OPTS = -Zcrtdll -Zdll -Zomf -Zmt config: config.cache config.cache: configure.cmd configure -$(MV_F) $@ $@.ref configure.cmd $(CONFIG_OPTS) configure.cmd: configure convert_configure.pl perl convert_configure.pl configure > $@ convert_configure.pl: $(WWWGET) ftp://ftp.math.ohio-state.edu/pub/users/ilya/os2/$@ > $@ install :: echo *** echo *** Do not use this command. Use install.os2 instead. echo *** exit 2 install.os2 : install.emxdata install.libs install.progs include ./Makefile all :: make.dlls # # DLLs and that stuff # LIBRARIES = ncurses form menu panel DLL_TAG = $(NCURSES_MAJOR) LIB_TAG = _s DLL_ROOTS = $(addsuffix $(DLL_TAG), $(LIBRARIES)) DLLS = $(addsuffix .dll, $(addprefix ./lib/, $(DLL_ROOTS))) LIB_ROOTS = $(addsuffix $(LIB_TAG), $(LIBRARIES)) LIBS = $(addsuffix .lib, $(addprefix ./lib/, $(LIB_ROOTS))) LIBS_AOUT = $(addsuffix .a, $(addprefix ./lib/, $(LIB_ROOTS))) DEFS = $(addsuffix .def, $(addprefix ./misc/, $(LIBRARIES))) DLL_SIGNATURE = NCurses-$(NCURSES_MAJOR)-$(NCURSES_MINOR)-$(NCURSES_PATCH) ./lib/%$(LIB_TAG).lib : ./misc/%.def emximp -o $@ $< ./lib/%$(LIB_TAG).a : ./misc/%.def emximp -o $@ $< ./lib/%$(DLL_TAG).dll : ./lib/%.a emxomf -o ./lib/$*$(DLL_TAG).lib $< if [ "$*" = "ncurses" ]; then \ gcc $(LDFLAGS) $(DLL_LN_OPTS) ./lib/$*$(DLL_TAG).lib \ ./misc/$*.def -o $@; \ else \ gcc $(LDFLAGS) $(DLL_LN_OPTS) ./lib/$*$(DLL_TAG).lib \ ./lib/ncurses$(LIB_TAG).lib ./misc/$*.def -o $@; \ fi -rm -f ./lib/$*$(DLL_TAG).lib make.dlls : $(DEFS) $(LIBS) $(DLLS) $(LIBS_AOUT) $(DEFS) : make.defs LIBDIR = $(DESTDIR)$(libdir) $(LIBDIR) : mkdir -p $@ install.libs :: $(LIBS) $(DLLS) $(LIBDIR) @for i in $(DLL_ROOTS); do \ echo installing ./lib/$$i.dll as $(LIBDIR)/$$i.dll; \ $(INSTALL_DATA) ./lib/$$i.dll $(LIBDIR)/$$i.dll; done @for i in $(LIB_ROOTS); do \ echo installing ./lib/$$i.lib as $(LIBDIR)/$$i.lib; \ $(INSTALL_DATA) ./lib/$$i.lib $(LIBDIR)/$$i.lib; done uninstall.libs :: -@for i in $(DLL_ROOTS); do \ echo uninstalling $(LIBDIR)/$$i.dll; \ rm -f $(LIBDIR)/$$i.dll; done -@for i in $(LIB_ROOTS); do \ echo uninstalling $(LIBDIR)/$$i.lib; \ rm -f $(LIBDIR)/$$i.lib; done make.defs : for i in $(LIBRARIES); do \ echo LIBRARY $${i}$(DLL_TAG) INITINSTANCE TERMINSTANCE > ./misc/$$i.def; \ echo DESCRIPTION \"$(DLL_SIGNATURE), module $$i\" >> ./misc/$$i.def; \ echo CODE LOADONCALL >> ./misc/$$i.def; \ echo DATA LOADONCALL NONSHARED MULTIPLE >> ./misc/$$i.def; \ echo EXPORTS >> ./misc/$$i.def; \ echo Creating $$i.def; \ (cmd /C ".\\misc\\makedef.cmd ./lib/$$i.a ./misc/$$i.ref >> ./misc/$$i.def" \ && cmd /C ".\\misc\\chkdef.cmd ./misc/$$i.def") \ || exit 1; \ done touch make.defs save.defs : for i in $(LIBRARIES); do \ test -f ./misc/$$i.def && cp ./misc/$$i.def ./misc/$$i.ref; \ done clean \ os2clean :: -rm -f $(DLLS) $(LIBS) realclean :: -rm -f $(addprefix ./misc/, $(addsuffix .def, $(LIBRARIES))) # # This is a simplified version of misc/Makefile # TICDIR = $(DESTDIR)$(datadir)/terminfo TABSETDIR = $(DESTDIR)$(datadir)/tabset $(TICDIR) : mkdir -p $@ install \ install.emxdata :: $(TICDIR) -@rm -fr $(TICDIR)/* echo Building terminfo database, please wait... set TERMINFO=$(TICDIR); ./progs/tic ./misc/emx.src echo Installing the terminfo cleaner and the sources... cp ./misc/emx.src ./misc/cleantic.cmd $(TICDIR) ./misc/cleantic.cmd $(TICDIR) uninstall \ uninstall.emxdata :: -cd $(TICDIR) && rm -rf * -cd $(TABSETDIR) && rm -rf * # # This is for preparing binary distributions # OS2NAME=ncurses-$(NCURSES_MAJOR).$(NCURSES_MINOR)-emx # # FIXME: this assumes that we can rerun the configure script, changing only # the install-prefix. That means we cannot provide "interesting" options # when building. # os2dist : $(MAKE) -f Makefile.os2 os2clean ./configure --without-debug --with-install-prefix=`pwd|sed -e 's@^.:@@'`/$(OS2NAME) $(MAKE) -f Makefile.os2 $(CF_MFLAGS) install.os2 -rm -f $(OS2NAME).zip echo NCurses-$(NCURSES_MAJOR).$(NCURSES_MINOR)-$(NCURSES_PATCH) for emx > $(OS2NAME)/FILE_ID.DIZ echo Binary release. >> $(OS2NAME)/FILE_ID.DIZ zip -r $(OS2NAME).zip ./$(OS2NAME) clean \ os2clean :: -rm -rf $(OS2NAME) -rm -f $(OS2NAME).zip ncurses-6.0-20160213/package/0000755000175100001440000000000012657642574014071 5ustar tomusersncurses-6.0-20160213/package/debian-mingw64/0000755000175100001440000000000012657642574016604 5ustar tomusersncurses-6.0-20160213/package/debian-mingw64/rules0000755000175100001440000000576312532645304017661 0ustar tomusers#!/usr/bin/make -f # Made with the aid of dh_make, by Craig Small # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Cristoph Lameter. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) BUILD_CC = gcc CC_NORMAL = -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wconversion CC_STRICT = $(CC_NORMAL) -W -Wbad-function-cast -Wcast-align -Wcast-qual -Wmissing-declarations -Wnested-externs -Wpointer-arith -Wwrite-strings -ansi -pedantic TARGET = x86_64-w64-mingw32 MINGW_BIN = /usr/bin MINGW_TOP = /usr/$(TARGET) MINGW_TMP = $(CURDIR)/debian/mingw64-ncurses6 CFLAGS = $(CC_NORMAL) CONFIG_OPTIONS = \ --disable-echo \ --disable-db-install \ --disable-getcap \ --disable-hard-tabs \ --disable-leaks \ --disable-macros \ --disable-overwrite \ --disable-termcap \ --enable-interop \ --enable-pc-files \ --enable-term-driver \ --enable-warnings \ --enable-widec \ --verbose \ --with-abi-version=6 \ --with-cxx-shared \ --with-develop \ --with-fallbacks=unknown,rxvt \ --with-shared \ --with-trace \ --with-xterm-kbs=DEL \ --without-ada \ --without-debug \ --without-manpages \ --without-progs \ --without-tests export CFLAGS BUILD_CC ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif configure: configure-stamp configure-stamp: dh_testdir CC=$(TARGET)-gcc \ CFLAGS="$(CFLAGS)" \ ./configure \ --host=$(TARGET) \ --target=$(TARGET) \ --prefix=$(MINGW_TOP) \ --with-build-cc=$(BUILD_CC) \ --with-pkg-config-libdir=/usr/$(TARGET)/lib/pkgconfig \ $(CONFIG_OPTIONS) touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir $(MAKE) touch build-stamp clean: dh_testdir dh_testroot [ ! -f makefile ] || $(MAKE) distclean rm -f configure-stamp build-stamp install-stamp dh_clean install: install-stamp install-stamp: build-stamp dh_testdir dh_testroot dh_clean -k dh_installdirs $(MAKE) install.libs DESTDIR=$(MINGW_TMP) mkdir -p $(MINGW_TMP)$(MINGW_BIN) for name in $(MINGW_TMP)$(MINGW_TOP)/bin/*-config; \ do \ base=`basename $$name`; \ ln -v $$name $(MINGW_TMP)$(MINGW_BIN)/$(TARGET)-$$base; \ done touch install-stamp # Build architecture-independent files here. binary-indep: build install # No binary-indep target. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installchangelogs NEWS # dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install install-stamp ncurses-6.0-20160213/package/debian-mingw64/control0000644000175100001440000000102712224077412020166 0ustar tomusersSource: ncurses6 Section: libdevel Priority: optional Maintainer: Thomas E. Dickey Homepage: http://invisible-island.net/ncurses/ Build-Depends: debhelper (>= 7) Standards-Version: 3.8.2 Package: mingw64-ncurses6 Architecture: any Depends: ${misc:Depends} Description: shared libraries for terminal handling The ncurses library routines are a terminal-independent method of updating character screens with reasonable optimization. . This package is used for testing ABI 6 with the MinGW 64-bit port. ncurses-6.0-20160213/package/debian-mingw64/watch0000644000175100001440000000014611764363707017632 0ustar tomusersversion=3 opts=passive ftp://invisible-island.net/ncurses/current/ncurses\.tar.gz \ debian uupdate ncurses-6.0-20160213/package/debian-mingw64/source/0000755000175100001440000000000012432004723020057 5ustar tomusersncurses-6.0-20160213/package/debian-mingw64/source/format0000644000175100001440000000001512432004723021266 0ustar tomusers3.0 (native) ncurses-6.0-20160213/package/debian-mingw64/changelog0000644000175100001440000000046512657642574020463 0ustar tomusersncurses6 (6.0+20160213) unstable; urgency=low * latest weekly patch -- Thomas E. Dickey Sat, 13 Feb 2016 10:02:21 -0500 ncurses6 (5.9-20131005) unstable; urgency=low * initial release -- Thomas E. Dickey Sat, 05 Oct 2013 13:35:29 -0400 ncurses-6.0-20160213/package/debian-mingw64/compat0000644000175100001440000000000211363402276017764 0ustar tomusers5 ncurses-6.0-20160213/package/debian-mingw64/copyright0000644000175100001440000001176412642031005020517 0ustar tomusersUpstream source http://invisible-island.net/ncurses/ncurses.html This package is used for testing builds of ncurses. Current ncurses maintainer: Thomas Dickey ------------------------------------------------------------------------------- Files: * Copyright: 1998-2015,2016 Free Software Foundation, Inc. Licence: X11 Files: aclocal.m4 package Copyright: 1996-2015,2016 by Thomas E. Dickey Licence: X11 Files: doc/html/NCURSES-Programming-HOWTO.html Copyright: 2001 by Pradeep Padala Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. ------------------------------------------------------------------------------- Files: install-sh Copyright: 1994 X Consortium Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other deal- ings in this Software without prior written authorization from the X Consor- tium. ------------------------------------------------------------------------------- Files: progs/tset.c ncurses/tinfo/read_termcap.c Copyright: 1980,1991,1992,1993 The Regents of the University of California. License: BSD Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- vile: txtmode file-encoding=utf-8 ncurses-6.0-20160213/package/ncursesw.sym0000644000175100001440000004463212572642121016465 0ustar tomusers# $Id: ncursesw.sym,v 1.25 2015/09/05 19:36:49 tom Exp $ # script for shared library symbol-visibility using libtool # # This file was generated by ncu-mapsyms # Configure options (5.1.20000708) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.2.20001021) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.3.20021019) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.4.20040208) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.5.20051010) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.6.20061217) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.7.20081102) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.8.20110226) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-broken_linker --with-hashed-db --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20110404) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-broken_linker --with-hashed-db --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20150530) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-broken_linker --with-hashed-db --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace # Configure options (6.0.current) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-broken_linker --with-hashed-db --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace BC COLORS COLOR_PAIR COLOR_PAIRS COLS ESCDELAY LINES PAIR_NUMBER PC SP TABSIZE TYPE_ALNUM TYPE_ALPHA TYPE_ENUM TYPE_INTEGER TYPE_IPV4 TYPE_NUMERIC TYPE_REGEXP UP _nc_Default_Field _nc_Default_Form _nc_access _nc_add_to_try _nc_align_termtype _nc_alloc_entry_leaks _nc_altcharset_name _nc_basename _nc_capcmp _nc_captoinfo_leaks _nc_check_termtype _nc_check_termtype2 _nc_comp_scan_leaks _nc_copy_termtype _nc_curr_col _nc_curr_line _nc_db_close _nc_db_first _nc_db_have_data _nc_db_next _nc_db_open _nc_db_put _nc_disable_period _nc_doalloc _nc_entry_match _nc_env_access _nc_err_abort _nc_eventlist_timeout _nc_fallback _nc_find_entry _nc_find_type_entry _nc_first_db _nc_first_name _nc_flush _nc_flush_sp _nc_free_and_exit _nc_free_entries _nc_free_termtype _nc_free_tic _nc_free_tinfo _nc_free_tparm _nc_freeall _nc_get_alias_table _nc_get_hash_table _nc_get_locale _nc_get_screensize _nc_get_source _nc_get_table _nc_get_tty_mode _nc_get_tty_mode_sp _nc_get_type _nc_getenv_num _nc_globals _nc_handle_sigwinch _nc_has_mouse _nc_head _nc_home_terminfo _nc_info_hash_table _nc_infotocap _nc_init_acs _nc_init_acs_sp _nc_init_termtype _nc_is_abs_path _nc_is_dir_path _nc_is_file_path _nc_keep_tic_dir _nc_keyname_leaks _nc_keypad _nc_last_db _nc_leaks_tinfo _nc_locale_breaks_acs _nc_name_match _nc_next_db _nc_optimize_enable _nc_outc_wrapper _nc_outch _nc_outch_sp _nc_outchars _nc_panelhook _nc_panelhook_sp _nc_pathlast _nc_prescreen _nc_putchar _nc_putchar_sp _nc_putp _nc_putp_flush _nc_putp_flush_sp _nc_putp_sp _nc_read_entry _nc_read_entry_source _nc_read_file_entry _nc_read_termtype _nc_reset_input _nc_resolve_uses _nc_resolve_uses2 _nc_retrace_attr_t _nc_retrace_bool _nc_retrace_chtype _nc_retrace_cptr _nc_retrace_cvoid_ptr _nc_retrace_int _nc_retrace_int_attr_t _nc_retrace_ptr _nc_retrace_sp _nc_retrace_unsigned _nc_retrace_void_ptr _nc_retrace_win _nc_ripoffline _nc_rootname _nc_safe_strcat _nc_safe_strcpy _nc_screen_chain _nc_screen_of _nc_set_buffer _nc_set_buffer_sp _nc_set_no_padding _nc_set_source _nc_set_tty_mode _nc_set_tty_mode_sp _nc_set_type _nc_set_writedir _nc_setupterm _nc_str_copy _nc_str_init _nc_str_null _nc_strict_bsd _nc_suppress_warnings _nc_syntax _nc_syserr_abort _nc_tail _nc_tgetent_leaks _nc_tic_dir _nc_tic_expand _nc_tic_written _nc_timed_wait _nc_tinfo_fkeys _nc_tparm_analyze _nc_tparm_err _nc_tputs_trace _nc_trace_buf _nc_trace_bufcat _nc_tracechar _nc_tracing _nc_trans_string _nc_trim_sgr0 _nc_unicode_locale _nc_update_screensize _nc_user_definable _nc_utf8_outch _nc_visbuf _nc_visbuf2 _nc_visbufn _nc_viscbuf _nc_viswbuf _nc_viswbufn _nc_viswibuf _nc_wacs _nc_warning _nc_wchstrlen _nc_wcrtomb _nc_write_entry _nc_write_object _traceattr _traceattr2 _tracecchar_t _tracecchar_t2 _tracechar _tracechtype _tracechtype2 _tracef acs_map add_wch add_wchnstr add_wchstr addch addchnstr addchstr addnstr addnwstr addstr addwstr assume_default_colors assume_default_colors_sp attr_get attr_off attr_on attr_set attroff attron attrset baudrate baudrate_sp beep beep_sp bkgd bkgdset bkgrnd bkgrndset boolcodes boolfnames boolnames border border_set bottom_panel box box_set can_change_color can_change_color_sp cbreak cbreak_sp ceiling_panel chgat clear clearok clrtobot clrtoeol color_content color_content_sp color_set copywin cur_term current_field current_item curs_set curs_set_sp curscr curses_version data_ahead data_behind def_prog_mode def_prog_mode_sp def_shell_mode def_shell_mode_sp define_key define_key_sp del_curterm del_curterm_sp del_panel delay_output delay_output_sp delch deleteln delscreen delwin derwin doupdate doupdate_sp dup_field dupwin dynamic_field_info echo echo_sp echo_wchar echochar endwin endwin_sp erase erasechar erasechar_sp erasewchar field_arg field_back field_buffer field_count field_fore field_index field_info field_init field_just field_opts field_opts_off field_opts_on field_pad field_status field_term field_type field_userptr filter filter_sp flash flash_sp flushinp flushinp_sp form_driver form_driver_w form_fields form_init form_opts form_opts_off form_opts_on form_page form_request_by_name form_request_name form_sub form_term form_userptr form_win free_field free_fieldtype free_form free_item free_menu get_escdelay get_escdelay_sp get_wch get_wstr getattrs getbegx getbegy getbkgd getbkgrnd getcchar getch getcurx getcury getmaxx getmaxy getmouse getmouse_sp getn_wstr getnstr getparx getpary getstr getwin getwin_sp ground_panel halfdelay halfdelay_sp has_colors has_colors_sp has_ic has_ic_sp has_il has_il_sp has_key has_key_sp has_mouse has_mouse_sp hide_panel hline hline_set idcok idlok immedok in_wch in_wchnstr in_wchstr inch inchnstr inchstr init_color init_color_sp init_pair init_pair_sp initscr innstr innwstr ins_nwstr ins_wch ins_wstr insch insdelln insertln insnstr insstr instr intrflush intrflush_sp inwstr is_cleared is_idcok is_idlok is_immedok is_keypad is_leaveok is_linetouched is_nodelay is_notimeout is_pad is_scrollok is_subwin is_syncok is_term_resized is_term_resized_sp is_wintouched isendwin isendwin_sp item_count item_description item_index item_init item_name item_opts item_opts_off item_opts_on item_term item_userptr item_value item_visible key_defined key_defined_sp key_name keybound keybound_sp keyname keyname_sp keyok keyok_sp keypad killchar killchar_sp killwchar leaveok link_field link_fieldtype longname mcprint mcprint_sp menu_back menu_driver menu_fore menu_format menu_grey menu_init menu_items menu_mark menu_opts menu_opts_off menu_opts_on menu_pad menu_pattern menu_request_by_name menu_request_name menu_spacing menu_sub menu_term menu_userptr menu_win meta mouse_trafo mouseinterval mouseinterval_sp mousemask mousemask_sp move move_field move_panel mvadd_wch mvadd_wchnstr mvadd_wchstr mvaddch mvaddchnstr mvaddchstr mvaddnstr mvaddnwstr mvaddstr mvaddwstr mvchgat mvcur mvcur_sp mvdelch mvderwin mvget_wch mvget_wstr mvgetch mvgetn_wstr mvgetnstr mvgetstr mvhline mvhline_set mvin_wch mvin_wchnstr mvin_wchstr mvinch mvinchnstr mvinchstr mvinnstr mvinnwstr mvins_nwstr mvins_wch mvins_wstr mvinsch mvinsnstr mvinsstr mvinstr mvinwstr mvprintw mvscanw mvvline mvvline_set mvwadd_wch mvwadd_wchnstr mvwadd_wchstr mvwaddch mvwaddchnstr mvwaddchstr mvwaddnstr mvwaddnwstr mvwaddstr mvwaddwstr mvwchgat mvwdelch mvwget_wch mvwget_wstr mvwgetch mvwgetn_wstr mvwgetnstr mvwgetstr mvwhline mvwhline_set mvwin mvwin_wch mvwin_wchnstr mvwin_wchstr mvwinch mvwinchnstr mvwinchstr mvwinnstr mvwinnwstr mvwins_nwstr mvwins_wch mvwins_wstr mvwinsch mvwinsnstr mvwinsstr mvwinstr mvwinwstr mvwprintw mvwscanw mvwvline mvwvline_set napms napms_sp new_field new_fieldtype new_form new_form_sp new_item new_menu new_menu_sp new_page new_panel new_prescr newpad newpad_sp newscr newterm newterm_sp newwin newwin_sp nl nl_sp nocbreak nocbreak_sp nodelay noecho noecho_sp nofilter nofilter_sp nonl nonl_sp noqiflush noqiflush_sp noraw noraw_sp notimeout numcodes numfnames numnames ospeed overlay overwrite pair_content pair_content_sp panel_above panel_below panel_hidden panel_userptr panel_window pecho_wchar pechochar pnoutrefresh pos_form_cursor pos_menu_cursor post_form post_menu prefresh printw putp putp_sp putwin qiflush qiflush_sp raw raw_sp redrawwin refresh replace_panel reset_prog_mode reset_prog_mode_sp reset_shell_mode reset_shell_mode_sp resetty resetty_sp resize_term resize_term_sp resizeterm resizeterm_sp restartterm restartterm_sp ripoffline ripoffline_sp savetty savetty_sp scale_form scale_menu scanw scr_dump scr_init scr_init_sp scr_restore scr_restore_sp scr_set scr_set_sp scrl scroll scrollok set_current_field set_current_item set_curterm set_curterm_sp set_escdelay set_escdelay_sp set_field_back set_field_buffer set_field_fore set_field_init set_field_just set_field_opts set_field_pad set_field_status set_field_term set_field_type set_field_userptr set_fieldtype_arg set_fieldtype_choice set_form_fields set_form_init set_form_opts set_form_page set_form_sub set_form_term set_form_userptr set_form_win set_item_init set_item_opts set_item_term set_item_userptr set_item_value set_max_field set_menu_back set_menu_fore set_menu_format set_menu_grey set_menu_init set_menu_items set_menu_mark set_menu_opts set_menu_pad set_menu_pattern set_menu_spacing set_menu_sub set_menu_term set_menu_userptr set_menu_win set_new_page set_panel_userptr set_tabsize set_tabsize_sp set_term set_top_row setcchar setscrreg setupterm show_panel slk_attr slk_attr_off slk_attr_on slk_attr_set slk_attr_set_sp slk_attr_sp slk_attroff slk_attroff_sp slk_attron slk_attron_sp slk_attrset slk_attrset_sp slk_clear slk_clear_sp slk_color slk_color_sp slk_init slk_init_sp slk_label slk_label_sp slk_noutrefresh slk_noutrefresh_sp slk_refresh slk_refresh_sp slk_restore slk_restore_sp slk_set slk_set_sp slk_touch slk_touch_sp slk_wset standend standout start_color start_color_sp stdscr strcodes strfnames strnames subpad subwin syncok term_attrs term_attrs_sp termattrs termattrs_sp termname termname_sp tgetent tgetent_sp tgetflag tgetflag_sp tgetnum tgetnum_sp tgetstr tgetstr_sp tgoto tigetflag tigetflag_sp tigetnum tigetnum_sp tigetstr tigetstr_sp timeout tiparm top_panel top_row touchline touchwin tparm tputs tputs_sp trace ttytype typeahead typeahead_sp unctrl unctrl_sp unget_wch unget_wch_sp ungetch ungetch_sp ungetmouse ungetmouse_sp unpost_form unpost_menu untouchwin update_panels update_panels_sp use_default_colors use_default_colors_sp use_env use_env_sp use_extended_names use_legacy_coding use_legacy_coding_sp use_screen use_tioctl use_tioctl_sp use_window vid_attr vid_attr_sp vid_puts vid_puts_sp vidattr vidattr_sp vidputs vidputs_sp vline vline_set vw_printw vw_scanw vwprintw vwscanw wadd_wch wadd_wchnstr wadd_wchstr waddch waddchnstr waddchstr waddnstr waddnwstr waddstr waddwstr wattr_get wattr_off wattr_on wattr_set wattroff wattron wattrset wbkgd wbkgdset wbkgrnd wbkgrndset wborder wborder_set wchgat wclear wclrtobot wclrtoeol wcolor_set wcursyncup wdelch wdeleteln wecho_wchar wechochar wenclose werase wget_wch wget_wstr wgetbkgrnd wgetch wgetch_events wgetdelay wgetn_wstr wgetnstr wgetnstr_events wgetparent wgetscrreg wgetstr whline whline_set win_wch win_wchnstr win_wchstr winch winchnstr winchstr winnstr winnwstr wins_nwstr wins_wch wins_wstr winsch winsdelln winsertln winsnstr winsstr winstr winwstr wmouse_trafo wmove wnoutrefresh wprintw wredrawln wrefresh wresize wscanw wscrl wsetscrreg wstandend wstandout wsyncdown wsyncup wtimeout wtouchln wunctrl wunctrl_sp wvline wvline_set ncurses-6.0-20160213/package/ncursestw.map0000644000175100001440000006444012572641751016625 0ustar tomusers# $Id: ncursestw.map,v 1.32 2015/09/05 19:35:05 tom Exp $ # script for shared library symbol-versioning using ld # # This file was generated by ncu-mapsyms # Configure options (5.7.20081102) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.8.20110226) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --enable-widec --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-widec --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20110404) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --enable-widec --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-widec --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20150530) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --enable-widec --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-widec --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace # Configure options (6.0.current) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --enable-widec --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-widec --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace NCURSES_TIC_5.0.19991023 { global: _nc_capcmp; _nc_check_termtype; _nc_entry_match; _nc_infotocap; _nc_read_entry_source; _nc_reset_input; _nc_resolve_uses; _nc_set_writedir; _nc_syntax; _nc_tic_expand; _nc_tic_written; _nc_trans_string; _nc_write_entry; local: _nc_captoinfo; _nc_comment_end; _nc_comment_start; _nc_copy_entry; _nc_curr_file_pos; _nc_curr_token; _nc_get_token; _nc_init_entry; _nc_merge_entry; _nc_panic_mode; _nc_parse_entry; _nc_push_token; _nc_save_str; _nc_start_line; _nc_wrap_entry; }; NCURSES_TIC_5.1.20000708 { global: _nc_disable_period; } NCURSES_TIC_5.0.19991023; NCURSES_TIC_5.5.20051010 { global: _nc_alloc_entry_leaks; _nc_captoinfo_leaks; _nc_check_termtype2; _nc_comp_scan_leaks; _nc_resolve_uses2; } NCURSES_TIC_5.1.20000708; NCURSES_TIC_5.7.20081102 { global: _nc_free_tic; local: _nc_comp_captab_leaks; _nc_leaks_tic; } NCURSES_TIC_5.5.20051010; NCURSES_TIC_5.9.20150530 { global: _nc_strict_bsd; } NCURSES_TIC_5.7.20081102; NCURSES_TIC_6.0.current { global: _nc_write_object; local: _*; } NCURSES_TIC_5.9.20150530; NCURSES_TINFO_5.0.19991023 { global: BC; PC; SP; UP; _nc_access; _nc_add_to_try; _nc_copy_termtype; _nc_curr_col; _nc_curr_line; _nc_doalloc; _nc_err_abort; _nc_fallback; _nc_find_entry; _nc_find_type_entry; _nc_first_name; _nc_free_entries; _nc_free_termtype; _nc_free_tparm; _nc_freeall; _nc_get_hash_table; _nc_get_table; _nc_get_tty_mode; _nc_get_type; _nc_getenv_num; _nc_head; _nc_home_terminfo; _nc_init_acs; _nc_keep_tic_dir; _nc_keypad; _nc_name_match; _nc_outch; _nc_read_entry; _nc_read_file_entry; _nc_screen_chain; _nc_set_buffer; _nc_set_source; _nc_set_tty_mode; _nc_set_type; _nc_suppress_warnings; _nc_syserr_abort; _nc_tail; _nc_tic_dir; _nc_timed_wait; _nc_trace_buf; _nc_tracing; _nc_update_screensize; _nc_visbuf; _nc_visbuf2; _nc_warning; _tracechar; baudrate; cbreak; curs_set; curses_version; def_prog_mode; def_shell_mode; define_key; del_curterm; delay_output; erasechar; flushinp; halfdelay; has_ic; has_il; has_key; idcok; idlok; intrflush; keybound; keyname; keyok; keypad; killchar; longname; meta; napms; nocbreak; nodelay; noqiflush; noraw; notimeout; ospeed; putp; qiflush; raw; reset_prog_mode; reset_shell_mode; resetty; savetty; set_curterm; setupterm; termname; tgetent; tgetflag; tgetnum; tgetstr; tgoto; tigetflag; tigetnum; tigetstr; tparm; tputs; trace; typeahead; unctrl; use_env; wtimeout; local: _nc_baudrate; _nc_expand_try; _nc_init_keytry; _nc_nulls_sent; _nc_ospeed; _nc_read_termcap; _nc_read_termcap_entry; _nc_remove_key; _nc_remove_string; _nc_trace_tries; _nc_tracebits; }; NCURSES_TINFO_5.1.20000708 { global: _nc_align_termtype; _nc_flush; _nc_tinfo_fkeys; _nc_user_definable; use_extended_names; } NCURSES_TINFO_5.0.19991023; NCURSES_TINFO_5.2.20001021 { global: _nc_basename; _nc_env_access; _nc_safe_strcat; _nc_safe_strcpy; _nc_str_copy; _nc_str_init; _nc_str_null; } NCURSES_TINFO_5.1.20000708; NCURSES_TINFO_5.3.20021019 { global: _nc_rootname; _nc_tparm_err; _nc_visbufn; } NCURSES_TINFO_5.2.20001021; NCURSES_TINFO_5.4.20040208 { global: _nc_get_locale; _nc_locale_breaks_acs; _nc_pathlast; _nc_retrace_attr_t; _nc_retrace_bool; _nc_retrace_chtype; _nc_retrace_int; _nc_retrace_ptr; _nc_retrace_sp; _nc_retrace_unsigned; _nc_retrace_win; _nc_tparm_analyze; _nc_trace_bufcat; _nc_unicode_locale; _traceattr; _traceattr2; _tracechtype; _tracechtype2; _tracef; key_defined; local: _nc_altcharset_name; _nc_trace_ttymode; } NCURSES_TINFO_5.3.20021019; NCURSES_TINFO_5.5.20051010 { global: _nc_get_source; _nc_retrace_cptr; _nc_retrace_cvoid_ptr; _nc_retrace_void_ptr; _nc_setupterm; _nc_trim_sgr0; local: _nc_delink_entry; _nc_free_entry; } NCURSES_TINFO_5.4.20040208; NCURSES_TINFO_5.6.20061217 { global: _nc_db_close; _nc_db_first; _nc_db_have_data; _nc_db_next; _nc_db_open; _nc_db_put; _nc_eventlist_timeout; _nc_first_db; _nc_handle_sigwinch; _nc_is_abs_path; _nc_is_dir_path; _nc_is_file_path; _nc_keyname_leaks; _nc_last_db; _nc_next_db; _nc_read_termtype; _nc_tgetent_leaks; _nc_viscbuf; local: _nc_db_get; _nc_db_have_index; _nc_hashed_db; _nc_viscbuf2; } NCURSES_TINFO_5.5.20051010; NCURSES_TINFO_5.7.20081102 { global: _nc_COLS; _nc_LINES; _nc_TABSIZE; _nc__nc_outchars; _nc_acs_map; _nc_boolcodes; _nc_boolfnames; _nc_boolnames; _nc_codes_leaks; _nc_count_outchars; _nc_cur_term; _nc_curscr; _nc_free_tinfo; _nc_get_alias_table; _nc_get_screensize; _nc_globals; _nc_init_pthreads; _nc_leaks_tinfo; _nc_locked_tracef; _nc_mutex_lock; _nc_mutex_trylock; _nc_mutex_unlock; _nc_names_leaks; _nc_newscr; _nc_numcodes; _nc_numfnames; _nc_numnames; _nc_prescreen; _nc_ptr_Cols; _nc_ptr_Lines; _nc_screen_of; _nc_set_no_padding; _nc_set_tputs_trace; _nc_stdscr; _nc_strcodes; _nc_strfnames; _nc_strnames; _nc_tracechar; _nc_ttytype; _nc_use_tracef; _nc_viswbuf; _nc_viswbufn; _nc_viswibuf; _tracecchar_t; _tracecchar_t2; set_tabsize; local: _nc__nc_tputs_trace; _nc_keyname; _nc_mutex_init; _nc_unctrl; _nc_viswbuf2; } NCURSES_TINFO_5.6.20061217; NCURSES_TINFO_5.8.20110226 { global: _nc_flush_sp; _nc_get_tty_mode_sp; _nc_init_acs_sp; _nc_outc_wrapper; _nc_outch_sp; _nc_putp; _nc_putp_flush; _nc_putp_flush_sp; _nc_putp_sp; _nc_retrace_int_attr_t; _nc_set_buffer_sp; _nc_set_tty_mode_sp; _nc_sigprocmask; baudrate_sp; cbreak_sp; curs_set_sp; def_prog_mode_sp; def_shell_mode_sp; define_key_sp; del_curterm_sp; delay_output_sp; erasechar_sp; flushinp_sp; halfdelay_sp; has_ic_sp; has_il_sp; has_key_sp; intrflush_sp; key_defined_sp; keybound_sp; keyname_sp; keyok_sp; killchar_sp; longname_sp; napms_sp; new_prescr; nocbreak_sp; noqiflush_sp; noraw_sp; putp_sp; qiflush_sp; raw_sp; reset_prog_mode_sp; reset_shell_mode_sp; resetty_sp; savetty_sp; set_curterm_sp; set_tabsize_sp; termname_sp; tgetent_sp; tgetflag_sp; tgetnum_sp; tgetstr_sp; tigetflag_sp; tigetnum_sp; tigetstr_sp; tiparm; tputs_sp; typeahead_sp; unctrl_sp; use_env_sp; local: _nc_get_cur_term; _nc_get_cur_term_sp; _nc_get_hash_info; _nc_ptr_Tabsize; _nc_retrace_char; _nc_setup_tinfo; _nc_tinfo_cmdch; } NCURSES_TINFO_5.7.20081102; NCURSES_TINFO_5.9.20150530 { global: _nc_init_termtype; _nc_putchar; _nc_putchar_sp; use_tioctl; use_tioctl_sp; local: _*; _nc_comp_error_leaks; _nc_db_iterator_leaks; _nc_setenv_num; } NCURSES_TINFO_5.8.20110226; NCURSESTW_5.7.20081102 { global: COLOR_PAIR; PAIR_NUMBER; TYPE_ALNUM; TYPE_ALPHA; TYPE_ENUM; TYPE_INTEGER; TYPE_IPV4; TYPE_NUMERIC; TYPE_REGEXP; _nc_COLORS; _nc_COLOR_PAIRS; _nc_Default_Field; # deprecated in ABI6 _nc_Default_Form; # deprecated in ABI6 _nc_ESCDELAY; _nc_free_and_exit; _nc_has_mouse; # deprecated in ABI6 _nc_optimize_enable; _nc_panelhook; _nc_ripoffline; _nc_wacs; _nc_wcrtomb; add_wch; add_wchnstr; add_wchstr; addch; addchnstr; addchstr; addnstr; addnwstr; addstr; addwstr; assume_default_colors; attr_get; attr_off; attr_on; attr_set; attroff; attron; attrset; beep; bkgd; bkgdset; bkgrnd; bkgrndset; border; border_set; bottom_panel; box; box_set; can_change_color; chgat; clear; clearok; clrtobot; clrtoeol; color_content; color_set; copywin; current_field; current_item; data_ahead; data_behind; del_panel; delch; deleteln; delscreen; delwin; derwin; doupdate; dup_field; dupwin; dynamic_field_info; echo; echo_wchar; echochar; endwin; erase; erasewchar; field_arg; field_back; field_buffer; field_count; field_fore; field_index; field_info; field_init; field_just; field_opts; field_opts_off; field_opts_on; field_pad; field_status; field_term; field_type; field_userptr; filter; flash; form_driver; form_fields; form_init; form_opts; form_opts_off; form_opts_on; form_page; form_request_by_name; form_request_name; form_sub; form_term; form_userptr; form_win; free_field; free_fieldtype; free_form; free_item; free_menu; get_wch; get_wstr; getattrs; getbegx; getbegy; getbkgd; getbkgrnd; getcchar; getch; getcurx; getcury; getmaxx; getmaxy; getmouse; getn_wstr; getnstr; getparx; getpary; getstr; getwin; has_colors; hide_panel; hline; hline_set; immedok; in_wch; in_wchnstr; in_wchstr; inch; inchnstr; inchstr; init_color; init_pair; initscr; innstr; innwstr; ins_nwstr; ins_wch; ins_wstr; insch; insdelln; insertln; insnstr; insstr; instr; inwstr; is_cleared; is_idcok; is_idlok; is_immedok; is_keypad; is_leaveok; is_linetouched; is_nodelay; is_notimeout; is_scrollok; is_syncok; is_term_resized; is_wintouched; isendwin; item_count; item_description; item_index; item_init; item_name; item_opts; item_opts_off; item_opts_on; item_term; item_userptr; item_value; item_visible; key_name; killwchar; leaveok; link_field; link_fieldtype; mcprint; menu_back; menu_driver; menu_fore; menu_format; menu_grey; menu_init; menu_items; menu_mark; menu_opts; menu_opts_off; menu_opts_on; menu_pad; menu_pattern; menu_request_by_name; menu_request_name; menu_spacing; menu_sub; menu_term; menu_userptr; menu_win; mouse_trafo; mouseinterval; mousemask; move; move_field; move_panel; mvadd_wch; mvadd_wchnstr; mvadd_wchstr; mvaddch; mvaddchnstr; mvaddchstr; mvaddnstr; mvaddnwstr; mvaddstr; mvaddwstr; mvchgat; mvcur; mvdelch; mvderwin; mvget_wch; mvget_wstr; mvgetch; mvgetn_wstr; mvgetnstr; mvgetstr; mvhline; mvhline_set; mvin_wch; mvin_wchnstr; mvin_wchstr; mvinch; mvinchnstr; mvinchstr; mvinnstr; mvinnwstr; mvins_nwstr; mvins_wch; mvins_wstr; mvinsch; mvinsnstr; mvinsstr; mvinstr; mvinwstr; mvprintw; mvscanw; mvvline; mvvline_set; mvwadd_wch; mvwadd_wchnstr; mvwadd_wchstr; mvwaddch; mvwaddchnstr; mvwaddchstr; mvwaddnstr; mvwaddnwstr; mvwaddstr; mvwaddwstr; mvwchgat; mvwdelch; mvwget_wch; mvwget_wstr; mvwgetch; mvwgetn_wstr; mvwgetnstr; mvwgetstr; mvwhline; mvwhline_set; mvwin; mvwin_wch; mvwin_wchnstr; mvwin_wchstr; mvwinch; mvwinchnstr; mvwinchstr; mvwinnstr; mvwinnwstr; mvwins_nwstr; mvwins_wch; mvwins_wstr; mvwinsch; mvwinsnstr; mvwinsstr; mvwinstr; mvwinwstr; mvwprintw; mvwscanw; mvwvline; mvwvline_set; new_field; new_fieldtype; new_form; new_item; new_menu; new_page; new_panel; newpad; newterm; newwin; nl; noecho; nofilter; nonl; overlay; overwrite; pair_content; panel_above; panel_below; panel_hidden; panel_userptr; panel_window; pecho_wchar; pechochar; pnoutrefresh; pos_form_cursor; pos_menu_cursor; post_form; post_menu; prefresh; printw; putwin; redrawwin; refresh; replace_panel; resize_term; resizeterm; restartterm; ripoffline; scale_form; scale_menu; scanw; scr_dump; scr_init; scr_restore; scr_set; scrl; scroll; scrollok; set_current_field; set_current_item; set_escdelay; set_field_back; set_field_buffer; set_field_fore; set_field_init; set_field_just; set_field_opts; set_field_pad; set_field_status; set_field_term; set_field_type; set_field_userptr; set_fieldtype_arg; set_fieldtype_choice; set_form_fields; set_form_init; set_form_opts; set_form_page; set_form_sub; set_form_term; set_form_userptr; set_form_win; set_item_init; set_item_opts; set_item_term; set_item_userptr; set_item_value; set_max_field; set_menu_back; set_menu_fore; set_menu_format; set_menu_grey; set_menu_init; set_menu_items; set_menu_mark; set_menu_opts; set_menu_pad; set_menu_pattern; set_menu_spacing; set_menu_sub; set_menu_term; set_menu_userptr; set_menu_win; set_new_page; set_panel_userptr; set_term; set_top_row; setcchar; setscrreg; show_panel; slk_attr; slk_attr_off; slk_attr_on; slk_attr_set; slk_attroff; slk_attron; slk_attrset; slk_clear; slk_color; slk_init; slk_label; slk_noutrefresh; slk_refresh; slk_restore; slk_set; slk_touch; slk_wset; standend; standout; start_color; subpad; subwin; syncok; term_attrs; termattrs; timeout; top_panel; top_row; touchline; touchwin; unget_wch; ungetch; ungetmouse; unpost_form; unpost_menu; untouchwin; update_panels; use_default_colors; use_legacy_coding; use_screen; use_window; vid_attr; vid_puts; vidattr; vidputs; vline; vline_set; vw_printw; vw_scanw; vwprintw; vwscanw; wadd_wch; wadd_wchnstr; wadd_wchstr; waddch; waddchnstr; waddchstr; waddnstr; waddnwstr; waddstr; waddwstr; wattr_get; wattr_off; wattr_on; wattr_set; wattroff; wattron; wattrset; wbkgd; wbkgdset; wbkgrnd; wbkgrndset; wborder; wborder_set; wchgat; wclear; wclrtobot; wclrtoeol; wcolor_set; wcursyncup; wdelch; wdeleteln; wecho_wchar; wechochar; wenclose; werase; wget_wch; wget_wstr; wgetbkgrnd; wgetch; wgetch_events; wgetn_wstr; wgetnstr; wgetnstr_events; wgetparent; wgetscrreg; wgetstr; whline; whline_set; win_wch; win_wchnstr; win_wchstr; winch; winchnstr; winchstr; winnstr; winnwstr; wins_nwstr; wins_wch; wins_wstr; winsch; winsdelln; winsertln; winsnstr; winsstr; winstr; winwstr; wmouse_trafo; wmove; wnoutrefresh; wprintw; wredrawln; wrefresh; wresize; wscanw; wscrl; wsetscrreg; wstandend; wstandout; wsyncdown; wsyncup; wtouchln; wunctrl; wvline; wvline_set; local: _nc_Calculate_Item_Length_and_Width; _nc_Calculate_Text_Width; _nc_Connect_Items; _nc_Copy_Argument; _nc_Copy_Type; _nc_Default_FieldType; _nc_Default_Item; _nc_Default_Menu; _nc_Disconnect_Items; _nc_Draw_Menu; _nc_First_Active_Field; _nc_Free_Argument; _nc_Free_Type; _nc_Internal_Validation; _nc_Link_Items; _nc_Make_Argument; _nc_Match_Next_Character_In_Item_Name; _nc_New_TopRow_and_CurrentItem; _nc_Position_Form_Cursor; _nc_Post_Item; _nc_Refresh_Current_Field; _nc_Set_Current_Field; _nc_Set_Form_Page; _nc_Show_Menu; _nc_Synchronize_Attributes; _nc_Synchronize_Options; _nc_Touchline; _nc_Touchpan; _nc_Widen_String; _nc_Wnoutrefresh; _nc_build_wch; _nc_dPanel; _nc_dStack; _nc_do_color; _nc_expanded; _nc_fifo_dump; _nc_freewin; _nc_hash_map; _nc_init_wacs; _nc_insert_ch; _nc_is_charable; _nc_linedump; _nc_make_oldhash; _nc_makenew; _nc_memmove; _nc_menu_cursor_pos; _nc_msec_cost; _nc_mvcur_init; _nc_mvcur_resume; _nc_mvcur_wrap; _nc_my_visbuf; _nc_oldnums; _nc_printf_string; _nc_render; _nc_reset_colors; _nc_retrace_field; _nc_retrace_field_ptr; _nc_retrace_field_type; _nc_retrace_form; _nc_retrace_form_hook; _nc_retrace_item; _nc_retrace_item_opts; _nc_retrace_item_ptr; _nc_retrace_menu; _nc_retrace_menu_hook; _nc_retrace_menu_opts; _nc_retrace_panel; _nc_screen_init; _nc_screen_resume; _nc_screen_wrap; _nc_scroll_oldhash; _nc_scroll_optimize; _nc_scroll_window; _nc_scrolln; _nc_setupscreen; _nc_signal_handler; _nc_slk_initialize; _nc_synchook; _nc_to_char; _nc_to_widechar; _nc_trace_xnames; _nc_tracemouse; _nc_ungetch; _nc_varargs; _nc_vsscanf; _nc_waddch_nosync; _nc_wchstrlen; _nc_wgetch; _tracedump; _tracemouse; }; NCURSESTW_5.8.20110226 { global: _nc_panelhook_sp; assume_default_colors_sp; beep_sp; can_change_color_sp; ceiling_panel; color_content_sp; doupdate_sp; echo_sp; endwin_sp; filter_sp; flash_sp; get_escdelay; get_escdelay_sp; getmouse_sp; getwin_sp; ground_panel; has_colors_sp; has_mouse; has_mouse_sp; init_color_sp; init_pair_sp; is_pad; is_subwin; is_term_resized_sp; isendwin_sp; mcprint_sp; mouseinterval_sp; mousemask_sp; mvcur_sp; new_form_sp; new_menu_sp; newpad_sp; newterm_sp; newwin_sp; nl_sp; noecho_sp; nofilter_sp; nonl_sp; pair_content_sp; resize_term_sp; resizeterm_sp; restartterm_sp; ripoffline_sp; scr_init_sp; scr_restore_sp; scr_set_sp; set_escdelay_sp; slk_attr_set_sp; slk_attr_sp; slk_attroff_sp; slk_attron_sp; slk_attrset_sp; slk_clear_sp; slk_color_sp; slk_init_sp; slk_label_sp; slk_noutrefresh_sp; slk_refresh_sp; slk_restore_sp; slk_set_sp; slk_touch_sp; start_color_sp; term_attrs_sp; termattrs_sp; unget_wch_sp; ungetch_sp; ungetmouse_sp; update_panels_sp; use_default_colors_sp; use_legacy_coding_sp; vid_attr_sp; vid_puts_sp; vidattr_sp; vidputs_sp; wunctrl_sp; local: _nc_TYPE_ALNUM; _nc_TYPE_ALPHA; _nc_TYPE_ENUM; _nc_TYPE_INTEGER; _nc_TYPE_IPV4; _nc_TYPE_NUMERIC; _nc_TYPE_REGEXP; _nc_curscr_of; _nc_do_color_sp; _nc_form_cursor; _nc_format_slks; _nc_free_and_exit_sp; _nc_freeall_sp; _nc_fty_generic; _nc_generic_fieldtype; _nc_get_fieldbuffer; _nc_hash_map_sp; _nc_insert_wch; _nc_linedump_sp; _nc_make_oldhash_sp; _nc_makenew_sp; _nc_msec_cost_sp; _nc_mvcur_init_sp; _nc_mvcur_resume_sp; _nc_mvcur_wrap_sp; _nc_newscr_of; _nc_printf_string_sp; _nc_ptr_Escdelay; _nc_reset_colors_sp; _nc_retrace_mmask_t; _nc_ripoffline_sp; _nc_screen_init_sp; _nc_screen_resume_sp; _nc_screen_wrap_sp; _nc_scroll_oldhash_sp; _nc_scroll_optimize_sp; _nc_scrolln_sp; _nc_set_generic_fieldtype; _nc_setupscreen_sp; _nc_stdscr_of; } NCURSESTW_5.7.20081102; NCURSESTW_5.9.20150530 { global: form_driver_w; wgetdelay; local: _*; _nc_mvcur; _nc_mvcur_sp; _nc_trace_mmask_t; } NCURSESTW_5.8.20110226; ncurses-6.0-20160213/package/mingw-ncurses.spec0000644000175100001440000000653012657642574017552 0ustar tomusers%?mingw_package_header Summary: shared libraries for terminal handling Name: mingw32-ncurses6 Version: 6.0 Release: 20160213 License: X11 Group: Development/Libraries Source: ncurses-%{version}-%{release}.tgz # URL: http://invisible-island.net/ncurses/ BuildRequires: mingw32-filesystem >= 95 BuildRequires: mingw32-gcc BuildRequires: mingw32-binutils BuildRequires: mingw64-filesystem >= 95 BuildRequires: mingw64-gcc BuildRequires: mingw64-binutils %define CC_NORMAL -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wconversion %define CC_STRICT %{CC_NORMAL} -W -Wbad-function-cast -Wcast-align -Wcast-qual -Wmissing-declarations -Wnested-externs -Wpointer-arith -Wwrite-strings -ansi -pedantic %description -n mingw32-ncurses6 Cross-compiling support for ncurses to mingw32. The ncurses library routines are a terminal-independent method of updating character screens with reasonable optimization. This package is used for testing ABI 6 with cross-compiles to MinGW. %package -n mingw64-ncurses6 Summary: Curses library for MinGW64 %description -n mingw64-ncurses6 Cross-compiling support for ncurses to mingw64. The ncurses library routines are a terminal-independent method of updating character screens with reasonable optimization. This package is used for testing ABI 6 with cross-compiles to MinGW. %prep %define CFG_OPTS \\\ --disable-echo \\\ --disable-db-install \\\ --disable-getcap \\\ --disable-hard-tabs \\\ --disable-leaks \\\ --disable-macros \\\ --disable-overwrite \\\ --disable-termcap \\\ --enable-const \\\ --enable-ext-colors \\\ --enable-ext-mouse \\\ --enable-ext-putwin \\\ --enable-interop \\\ --enable-sp-funcs \\\ --enable-term-driver \\\ --enable-warnings \\\ --enable-widec \\\ --verbose \\\ --with-cxx-shared \\\ --with-develop \\\ --with-fallbacks=unknown,rxvt \\\ --with-shared \\\ --with-tparm-arg=intptr_t \\\ --with-trace \\\ --with-xterm-kbs=DEL \\\ --without-ada \\\ --without-debug \\\ --with-install-prefix=$RPM_BUILD_ROOT \\\ --without-manpages \\\ --without-progs \\\ --without-tests %define debug_package %{nil} %setup -q -n ncurses-%{version}-%{release} %build mkdir BUILD-W32 pushd BUILD-W32 CFLAGS="%{CC_NORMAL}" \ CC=%{mingw32_cc} \ %mingw32_configure %{CFG_OPTS} make popd mkdir BUILD-W64 pushd BUILD-W64 CFLAGS="%{CC_NORMAL}" \ CC=%{mingw64_cc} \ %mingw64_configure %{CFG_OPTS} make popd %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT%{_bindir} pushd BUILD-W32 %{mingw32_make} install.libs for name in $RPM_BUILD_ROOT%{mingw32_bindir}/*-config; \ do \ base=`basename $name`; \ ln -v $name $RPM_BUILD_ROOT%{_bindir}/%{mingw32_target}-$base; \ done popd pushd BUILD-W64 %{mingw64_make} install.libs for name in $RPM_BUILD_ROOT%{mingw64_bindir}/*-config; \ do \ base=`basename $name`; \ ln -v $name $RPM_BUILD_ROOT%{_bindir}/%{mingw64_target}-$base; \ done popd %clean rm -rf $RPM_BUILD_ROOT %files -n mingw32-ncurses6 %defattr(-,root,root,-) %{_bindir}/%{mingw32_target}-* %{mingw32_bindir}/* %{mingw32_includedir}/* %{mingw32_libdir}/* %files -n mingw64-ncurses6 %defattr(-,root,root,-) %{_bindir}/%{mingw64_target}-* %{mingw64_bindir}/* %{mingw64_includedir}/* %{mingw64_libdir}/* %changelog * Sat Sep 20 2014 Thomas E. Dickey - adjust install-rules for ncurses*-config * Sat Aug 03 2013 Thomas E. Dickey - initial version, using mingw-pdcurses package as a guide. ncurses-6.0-20160213/package/ncursestw.sym0000644000175100001440000004501212572642121016642 0ustar tomusers# $Id: ncursestw.sym,v 1.24 2015/09/05 19:36:49 tom Exp $ # script for shared library symbol-visibility using libtool # # This file was generated by ncu-mapsyms # Configure options (5.7.20081102) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.8.20110226) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --enable-widec --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-widec --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20110404) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --enable-widec --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-widec --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20150530) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --enable-widec --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-widec --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace # Configure options (6.0.current) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --enable-widec --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --enable-widec --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-widec --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace BC COLOR_PAIR PAIR_NUMBER PC SP TYPE_ALNUM TYPE_ALPHA TYPE_ENUM TYPE_INTEGER TYPE_IPV4 TYPE_NUMERIC TYPE_REGEXP UP _nc_COLORS _nc_COLOR_PAIRS _nc_COLS _nc_Default_Field _nc_Default_Form _nc_ESCDELAY _nc_LINES _nc_TABSIZE _nc__nc_outchars _nc_access _nc_acs_map _nc_add_to_try _nc_align_termtype _nc_basename _nc_boolcodes _nc_boolfnames _nc_boolnames _nc_capcmp _nc_check_termtype2 _nc_codes_leaks _nc_copy_termtype _nc_count_outchars _nc_cur_term _nc_curr_col _nc_curr_line _nc_curscr _nc_db_close _nc_db_first _nc_db_have_data _nc_db_next _nc_db_open _nc_db_put _nc_disable_period _nc_doalloc _nc_entry_match _nc_env_access _nc_err_abort _nc_eventlist_timeout _nc_fallback _nc_find_entry _nc_find_type_entry _nc_first_db _nc_first_name _nc_flush _nc_flush_sp _nc_free_and_exit _nc_free_entries _nc_free_termtype _nc_free_tic _nc_free_tinfo _nc_freeall _nc_get_alias_table _nc_get_hash_table _nc_get_locale _nc_get_screensize _nc_get_source _nc_get_table _nc_get_tty_mode _nc_get_tty_mode_sp _nc_get_type _nc_getenv_num _nc_globals _nc_handle_sigwinch _nc_has_mouse _nc_head _nc_home_terminfo _nc_infotocap _nc_init_acs _nc_init_acs_sp _nc_init_pthreads _nc_init_termtype _nc_is_abs_path _nc_is_dir_path _nc_is_file_path _nc_keep_tic_dir _nc_keypad _nc_last_db _nc_leaks_tinfo _nc_locale_breaks_acs _nc_locked_tracef _nc_mutex_lock _nc_mutex_trylock _nc_mutex_unlock _nc_name_match _nc_names_leaks _nc_newscr _nc_next_db _nc_numcodes _nc_numfnames _nc_numnames _nc_optimize_enable _nc_outc_wrapper _nc_outch _nc_outch_sp _nc_panelhook _nc_panelhook_sp _nc_pathlast _nc_prescreen _nc_ptr_Cols _nc_ptr_Lines _nc_putchar _nc_putchar_sp _nc_putp _nc_putp_flush _nc_putp_flush_sp _nc_putp_sp _nc_read_entry _nc_read_entry_source _nc_read_file_entry _nc_read_termtype _nc_reset_input _nc_resolve_uses2 _nc_retrace_attr_t _nc_retrace_bool _nc_retrace_chtype _nc_retrace_cptr _nc_retrace_cvoid_ptr _nc_retrace_int _nc_retrace_int_attr_t _nc_retrace_ptr _nc_retrace_sp _nc_retrace_unsigned _nc_retrace_void_ptr _nc_retrace_win _nc_ripoffline _nc_rootname _nc_safe_strcat _nc_safe_strcpy _nc_screen_chain _nc_screen_of _nc_set_buffer _nc_set_buffer_sp _nc_set_no_padding _nc_set_source _nc_set_tputs_trace _nc_set_tty_mode _nc_set_tty_mode_sp _nc_set_type _nc_set_writedir _nc_setupterm _nc_sigprocmask _nc_stdscr _nc_str_copy _nc_str_init _nc_str_null _nc_strcodes _nc_strfnames _nc_strict_bsd _nc_strnames _nc_suppress_warnings _nc_syntax _nc_syserr_abort _nc_tail _nc_tic_dir _nc_tic_expand _nc_tic_written _nc_timed_wait _nc_tinfo_fkeys _nc_tparm_analyze _nc_tparm_err _nc_trace_buf _nc_tracechar _nc_tracing _nc_trans_string _nc_trim_sgr0 _nc_ttytype _nc_unicode_locale _nc_update_screensize _nc_use_tracef _nc_user_definable _nc_visbuf _nc_visbuf2 _nc_visbufn _nc_viscbuf _nc_viswbuf _nc_viswbufn _nc_viswibuf _nc_wacs _nc_warning _nc_wcrtomb _nc_write_entry _nc_write_object _traceattr _traceattr2 _tracecchar_t _tracecchar_t2 _tracechtype _tracechtype2 _tracef add_wch add_wchnstr add_wchstr addch addchnstr addchstr addnstr addnwstr addstr addwstr assume_default_colors assume_default_colors_sp attr_get attr_off attr_on attr_set attroff attron attrset baudrate baudrate_sp beep beep_sp bkgd bkgdset bkgrnd bkgrndset border border_set bottom_panel box box_set can_change_color can_change_color_sp cbreak cbreak_sp ceiling_panel chgat clear clearok clrtobot clrtoeol color_content color_content_sp color_set copywin current_field current_item curs_set curs_set_sp curses_version data_ahead data_behind def_prog_mode def_prog_mode_sp def_shell_mode def_shell_mode_sp define_key define_key_sp del_curterm del_curterm_sp del_panel delay_output delay_output_sp delch deleteln delscreen delwin derwin doupdate doupdate_sp dup_field dupwin dynamic_field_info echo echo_sp echo_wchar echochar endwin endwin_sp erase erasechar erasechar_sp erasewchar field_arg field_back field_buffer field_count field_fore field_index field_info field_init field_just field_opts field_opts_off field_opts_on field_pad field_status field_term field_type field_userptr filter filter_sp flash flash_sp flushinp flushinp_sp form_driver form_driver_w form_fields form_init form_opts form_opts_off form_opts_on form_page form_request_by_name form_request_name form_sub form_term form_userptr form_win free_field free_fieldtype free_form free_item free_menu get_escdelay get_escdelay_sp get_wch get_wstr getattrs getbegx getbegy getbkgd getbkgrnd getcchar getch getcurx getcury getmaxx getmaxy getmouse getmouse_sp getn_wstr getnstr getparx getpary getstr getwin getwin_sp ground_panel halfdelay halfdelay_sp has_colors has_colors_sp has_ic has_ic_sp has_il has_il_sp has_key has_key_sp has_mouse has_mouse_sp hide_panel hline hline_set idcok idlok immedok in_wch in_wchnstr in_wchstr inch inchnstr inchstr init_color init_color_sp init_pair init_pair_sp initscr innstr innwstr ins_nwstr ins_wch ins_wstr insch insdelln insertln insnstr insstr instr intrflush intrflush_sp inwstr is_cleared is_idcok is_idlok is_immedok is_keypad is_leaveok is_linetouched is_nodelay is_notimeout is_pad is_scrollok is_subwin is_syncok is_term_resized is_term_resized_sp is_wintouched isendwin isendwin_sp item_count item_description item_index item_init item_name item_opts item_opts_off item_opts_on item_term item_userptr item_value item_visible key_defined key_defined_sp key_name keybound keybound_sp keyname keyname_sp keyok keyok_sp keypad killchar killchar_sp killwchar leaveok link_field link_fieldtype longname longname_sp mcprint mcprint_sp menu_back menu_driver menu_fore menu_format menu_grey menu_init menu_items menu_mark menu_opts menu_opts_off menu_opts_on menu_pad menu_pattern menu_request_by_name menu_request_name menu_spacing menu_sub menu_term menu_userptr menu_win meta mouse_trafo mouseinterval mouseinterval_sp mousemask mousemask_sp move move_field move_panel mvadd_wch mvadd_wchnstr mvadd_wchstr mvaddch mvaddchnstr mvaddchstr mvaddnstr mvaddnwstr mvaddstr mvaddwstr mvchgat mvcur mvcur_sp mvdelch mvderwin mvget_wch mvget_wstr mvgetch mvgetn_wstr mvgetnstr mvgetstr mvhline mvhline_set mvin_wch mvin_wchnstr mvin_wchstr mvinch mvinchnstr mvinchstr mvinnstr mvinnwstr mvins_nwstr mvins_wch mvins_wstr mvinsch mvinsnstr mvinsstr mvinstr mvinwstr mvprintw mvscanw mvvline mvvline_set mvwadd_wch mvwadd_wchnstr mvwadd_wchstr mvwaddch mvwaddchnstr mvwaddchstr mvwaddnstr mvwaddnwstr mvwaddstr mvwaddwstr mvwchgat mvwdelch mvwget_wch mvwget_wstr mvwgetch mvwgetn_wstr mvwgetnstr mvwgetstr mvwhline mvwhline_set mvwin mvwin_wch mvwin_wchnstr mvwin_wchstr mvwinch mvwinchnstr mvwinchstr mvwinnstr mvwinnwstr mvwins_nwstr mvwins_wch mvwins_wstr mvwinsch mvwinsnstr mvwinsstr mvwinstr mvwinwstr mvwprintw mvwscanw mvwvline mvwvline_set napms napms_sp new_field new_fieldtype new_form new_form_sp new_item new_menu new_menu_sp new_page new_panel new_prescr newpad newpad_sp newterm newterm_sp newwin newwin_sp nl nl_sp nocbreak nocbreak_sp nodelay noecho noecho_sp nofilter nofilter_sp nonl nonl_sp noqiflush noqiflush_sp noraw noraw_sp notimeout ospeed overlay overwrite pair_content pair_content_sp panel_above panel_below panel_hidden panel_userptr panel_window pecho_wchar pechochar pnoutrefresh pos_form_cursor pos_menu_cursor post_form post_menu prefresh printw putp putp_sp putwin qiflush qiflush_sp raw raw_sp redrawwin refresh replace_panel reset_prog_mode reset_prog_mode_sp reset_shell_mode reset_shell_mode_sp resetty resetty_sp resize_term resize_term_sp resizeterm resizeterm_sp restartterm restartterm_sp ripoffline ripoffline_sp savetty savetty_sp scale_form scale_menu scanw scr_dump scr_init scr_init_sp scr_restore scr_restore_sp scr_set scr_set_sp scrl scroll scrollok set_current_field set_current_item set_curterm set_curterm_sp set_escdelay set_escdelay_sp set_field_back set_field_buffer set_field_fore set_field_init set_field_just set_field_opts set_field_pad set_field_status set_field_term set_field_type set_field_userptr set_fieldtype_arg set_fieldtype_choice set_form_fields set_form_init set_form_opts set_form_page set_form_sub set_form_term set_form_userptr set_form_win set_item_init set_item_opts set_item_term set_item_userptr set_item_value set_max_field set_menu_back set_menu_fore set_menu_format set_menu_grey set_menu_init set_menu_items set_menu_mark set_menu_opts set_menu_pad set_menu_pattern set_menu_spacing set_menu_sub set_menu_term set_menu_userptr set_menu_win set_new_page set_panel_userptr set_tabsize set_tabsize_sp set_term set_top_row setcchar setscrreg setupterm show_panel slk_attr slk_attr_off slk_attr_on slk_attr_set slk_attr_set_sp slk_attr_sp slk_attroff slk_attroff_sp slk_attron slk_attron_sp slk_attrset slk_attrset_sp slk_clear slk_clear_sp slk_color slk_color_sp slk_init slk_init_sp slk_label slk_label_sp slk_noutrefresh slk_noutrefresh_sp slk_refresh slk_refresh_sp slk_restore slk_restore_sp slk_set slk_set_sp slk_touch slk_touch_sp slk_wset standend standout start_color start_color_sp subpad subwin syncok term_attrs term_attrs_sp termattrs termattrs_sp termname termname_sp tgetent tgetent_sp tgetflag tgetflag_sp tgetnum tgetnum_sp tgetstr tgetstr_sp tgoto tigetflag tigetflag_sp tigetnum tigetnum_sp tigetstr tigetstr_sp timeout tiparm top_panel top_row touchline touchwin tparm tputs tputs_sp trace typeahead typeahead_sp unctrl unctrl_sp unget_wch unget_wch_sp ungetch ungetch_sp ungetmouse ungetmouse_sp unpost_form unpost_menu untouchwin update_panels update_panels_sp use_default_colors use_default_colors_sp use_env use_env_sp use_extended_names use_legacy_coding use_legacy_coding_sp use_screen use_tioctl use_tioctl_sp use_window vid_attr vid_attr_sp vid_puts vid_puts_sp vidattr vidattr_sp vidputs vidputs_sp vline vline_set vw_printw vw_scanw vwprintw vwscanw wadd_wch wadd_wchnstr wadd_wchstr waddch waddchnstr waddchstr waddnstr waddnwstr waddstr waddwstr wattr_get wattr_off wattr_on wattr_set wattroff wattron wattrset wbkgd wbkgdset wbkgrnd wbkgrndset wborder wborder_set wchgat wclear wclrtobot wclrtoeol wcolor_set wcursyncup wdelch wdeleteln wecho_wchar wechochar wenclose werase wget_wch wget_wstr wgetbkgrnd wgetch wgetch_events wgetdelay wgetn_wstr wgetnstr wgetnstr_events wgetparent wgetscrreg wgetstr whline whline_set win_wch win_wchnstr win_wchstr winch winchnstr winchstr winnstr winnwstr wins_nwstr wins_wch wins_wstr winsch winsdelln winsertln winsnstr winsstr winstr winwstr wmouse_trafo wmove wnoutrefresh wprintw wredrawln wrefresh wresize wscanw wscrl wsetscrreg wstandend wstandout wsyncdown wsyncup wtimeout wtouchln wunctrl wunctrl_sp wvline wvline_set ncurses-6.0-20160213/package/ncursest.sym0000644000175100001440000004147612572642121016465 0ustar tomusers# $Id: ncursest.sym,v 1.26 2015/09/05 19:36:49 tom Exp $ # script for shared library symbol-visibility using libtool # # This file was generated by ncu-mapsyms # Configure options (5.7.20081102) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.8.20110226) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20110404) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20150530) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace # Configure options (6.0.current) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace BC COLOR_PAIR PAIR_NUMBER PC SP TYPE_ALNUM TYPE_ALPHA TYPE_ENUM TYPE_INTEGER TYPE_IPV4 TYPE_NUMERIC TYPE_REGEXP UP _nc_COLORS _nc_COLOR_PAIRS _nc_COLS _nc_Default_Field _nc_Default_Form _nc_ESCDELAY _nc_LINES _nc_TABSIZE _nc__nc_outchars _nc_access _nc_acs_map _nc_add_to_try _nc_align_termtype _nc_basename _nc_boolcodes _nc_boolfnames _nc_boolnames _nc_capcmp _nc_check_termtype2 _nc_codes_leaks _nc_copy_termtype _nc_count_outchars _nc_cur_term _nc_curr_col _nc_curr_line _nc_curscr _nc_db_close _nc_db_first _nc_db_have_data _nc_db_next _nc_db_open _nc_db_put _nc_disable_period _nc_doalloc _nc_entry_match _nc_env_access _nc_err_abort _nc_eventlist_timeout _nc_fallback _nc_find_entry _nc_find_type_entry _nc_first_db _nc_first_name _nc_flush _nc_flush_sp _nc_free_and_exit _nc_free_entries _nc_free_termtype _nc_free_tic _nc_free_tinfo _nc_freeall _nc_get_alias_table _nc_get_hash_table _nc_get_locale _nc_get_screensize _nc_get_source _nc_get_table _nc_get_tty_mode _nc_get_tty_mode_sp _nc_get_type _nc_getenv_num _nc_globals _nc_handle_sigwinch _nc_has_mouse _nc_head _nc_home_terminfo _nc_infotocap _nc_init_acs _nc_init_acs_sp _nc_init_pthreads _nc_init_termtype _nc_is_abs_path _nc_is_dir_path _nc_is_file_path _nc_keep_tic_dir _nc_keypad _nc_last_db _nc_leaks_tinfo _nc_locale_breaks_acs _nc_locked_tracef _nc_mutex_lock _nc_mutex_trylock _nc_mutex_unlock _nc_name_match _nc_names_leaks _nc_newscr _nc_next_db _nc_numcodes _nc_numfnames _nc_numnames _nc_optimize_enable _nc_outc_wrapper _nc_outch _nc_outch_sp _nc_panelhook _nc_panelhook_sp _nc_pathlast _nc_prescreen _nc_ptr_Cols _nc_ptr_Lines _nc_putchar _nc_putchar_sp _nc_putp _nc_putp_flush _nc_putp_flush_sp _nc_putp_sp _nc_read_entry _nc_read_entry_source _nc_read_file_entry _nc_read_termtype _nc_reset_input _nc_resolve_uses2 _nc_retrace_attr_t _nc_retrace_bool _nc_retrace_chtype _nc_retrace_cptr _nc_retrace_cvoid_ptr _nc_retrace_int _nc_retrace_int_attr_t _nc_retrace_ptr _nc_retrace_sp _nc_retrace_unsigned _nc_retrace_void_ptr _nc_retrace_win _nc_ripoffline _nc_rootname _nc_safe_strcat _nc_safe_strcpy _nc_screen_chain _nc_screen_of _nc_set_buffer _nc_set_buffer_sp _nc_set_no_padding _nc_set_source _nc_set_tputs_trace _nc_set_tty_mode _nc_set_tty_mode_sp _nc_set_type _nc_set_writedir _nc_setupterm _nc_sigprocmask _nc_stdscr _nc_str_copy _nc_str_init _nc_str_null _nc_strcodes _nc_strfnames _nc_strict_bsd _nc_strnames _nc_suppress_warnings _nc_syntax _nc_syserr_abort _nc_tail _nc_tic_dir _nc_tic_expand _nc_tic_written _nc_timed_wait _nc_tinfo_fkeys _nc_tparm_analyze _nc_tparm_err _nc_trace_buf _nc_tracechar _nc_tracing _nc_trans_string _nc_trim_sgr0 _nc_ttytype _nc_unicode_locale _nc_update_screensize _nc_use_tracef _nc_user_definable _nc_visbuf _nc_visbuf2 _nc_visbufn _nc_viscbuf _nc_warning _nc_write_entry _nc_write_object _traceattr _traceattr2 _tracechtype _tracechtype2 _tracef addch addchnstr addchstr addnstr addstr assume_default_colors assume_default_colors_sp attr_get attr_off attr_on attr_set attroff attron attrset baudrate baudrate_sp beep beep_sp bkgd bkgdset border bottom_panel box can_change_color can_change_color_sp cbreak cbreak_sp ceiling_panel chgat clear clearok clrtobot clrtoeol color_content color_content_sp color_set copywin current_field current_item curs_set curs_set_sp curses_version data_ahead data_behind def_prog_mode def_prog_mode_sp def_shell_mode def_shell_mode_sp define_key define_key_sp del_curterm del_curterm_sp del_panel delay_output delay_output_sp delch deleteln delscreen delwin derwin doupdate doupdate_sp dup_field dupwin dynamic_field_info echo echo_sp echochar endwin endwin_sp erase erasechar erasechar_sp field_arg field_back field_buffer field_count field_fore field_index field_info field_init field_just field_opts field_opts_off field_opts_on field_pad field_status field_term field_type field_userptr filter filter_sp flash flash_sp flushinp flushinp_sp form_driver form_fields form_init form_opts form_opts_off form_opts_on form_page form_request_by_name form_request_name form_sub form_term form_userptr form_win free_field free_fieldtype free_form free_item free_menu get_escdelay get_escdelay_sp getattrs getbegx getbegy getbkgd getch getcurx getcury getmaxx getmaxy getmouse getmouse_sp getnstr getparx getpary getstr getwin getwin_sp ground_panel halfdelay halfdelay_sp has_colors has_colors_sp has_ic has_ic_sp has_il has_il_sp has_key has_key_sp has_mouse has_mouse_sp hide_panel hline idcok idlok immedok inch inchnstr inchstr init_color init_color_sp init_pair init_pair_sp initscr innstr insch insdelln insertln insnstr insstr instr intrflush intrflush_sp is_cleared is_idcok is_idlok is_immedok is_keypad is_leaveok is_linetouched is_nodelay is_notimeout is_pad is_scrollok is_subwin is_syncok is_term_resized is_term_resized_sp is_wintouched isendwin isendwin_sp item_count item_description item_index item_init item_name item_opts item_opts_off item_opts_on item_term item_userptr item_value item_visible key_defined key_defined_sp keybound keybound_sp keyname keyname_sp keyok keyok_sp keypad killchar killchar_sp leaveok link_field link_fieldtype longname longname_sp mcprint mcprint_sp menu_back menu_driver menu_fore menu_format menu_grey menu_init menu_items menu_mark menu_opts menu_opts_off menu_opts_on menu_pad menu_pattern menu_request_by_name menu_request_name menu_spacing menu_sub menu_term menu_userptr menu_win meta mouse_trafo mouseinterval mouseinterval_sp mousemask mousemask_sp move move_field move_panel mvaddch mvaddchnstr mvaddchstr mvaddnstr mvaddstr mvchgat mvcur mvcur_sp mvdelch mvderwin mvgetch mvgetnstr mvgetstr mvhline mvinch mvinchnstr mvinchstr mvinnstr mvinsch mvinsnstr mvinsstr mvinstr mvprintw mvscanw mvvline mvwaddch mvwaddchnstr mvwaddchstr mvwaddnstr mvwaddstr mvwchgat mvwdelch mvwgetch mvwgetnstr mvwgetstr mvwhline mvwin mvwinch mvwinchnstr mvwinchstr mvwinnstr mvwinsch mvwinsnstr mvwinsstr mvwinstr mvwprintw mvwscanw mvwvline napms napms_sp new_field new_fieldtype new_form new_form_sp new_item new_menu new_menu_sp new_page new_panel new_prescr newpad newpad_sp newterm newterm_sp newwin newwin_sp nl nl_sp nocbreak nocbreak_sp nodelay noecho noecho_sp nofilter nofilter_sp nonl nonl_sp noqiflush noqiflush_sp noraw noraw_sp notimeout ospeed overlay overwrite pair_content pair_content_sp panel_above panel_below panel_hidden panel_userptr panel_window pechochar pnoutrefresh pos_form_cursor pos_menu_cursor post_form post_menu prefresh printw putp putp_sp putwin qiflush qiflush_sp raw raw_sp redrawwin refresh replace_panel reset_prog_mode reset_prog_mode_sp reset_shell_mode reset_shell_mode_sp resetty resetty_sp resize_term resize_term_sp resizeterm resizeterm_sp restartterm restartterm_sp ripoffline ripoffline_sp savetty savetty_sp scale_form scale_menu scanw scr_dump scr_init scr_init_sp scr_restore scr_restore_sp scr_set scr_set_sp scrl scroll scrollok set_current_field set_current_item set_curterm set_curterm_sp set_escdelay set_escdelay_sp set_field_back set_field_buffer set_field_fore set_field_init set_field_just set_field_opts set_field_pad set_field_status set_field_term set_field_type set_field_userptr set_fieldtype_arg set_fieldtype_choice set_form_fields set_form_init set_form_opts set_form_page set_form_sub set_form_term set_form_userptr set_form_win set_item_init set_item_opts set_item_term set_item_userptr set_item_value set_max_field set_menu_back set_menu_fore set_menu_format set_menu_grey set_menu_init set_menu_items set_menu_mark set_menu_opts set_menu_pad set_menu_pattern set_menu_spacing set_menu_sub set_menu_term set_menu_userptr set_menu_win set_new_page set_panel_userptr set_tabsize set_tabsize_sp set_term set_top_row setscrreg setupterm show_panel slk_attr slk_attr_set slk_attr_set_sp slk_attr_sp slk_attroff slk_attroff_sp slk_attron slk_attron_sp slk_attrset slk_attrset_sp slk_clear slk_clear_sp slk_color slk_color_sp slk_init slk_init_sp slk_label slk_label_sp slk_noutrefresh slk_noutrefresh_sp slk_refresh slk_refresh_sp slk_restore slk_restore_sp slk_set slk_set_sp slk_touch slk_touch_sp standend standout start_color start_color_sp subpad subwin syncok termattrs termattrs_sp termname termname_sp tgetent tgetent_sp tgetflag tgetflag_sp tgetnum tgetnum_sp tgetstr tgetstr_sp tgoto tigetflag tigetflag_sp tigetnum tigetnum_sp tigetstr tigetstr_sp timeout tiparm top_panel top_row touchline touchwin tparm tputs tputs_sp trace typeahead typeahead_sp unctrl unctrl_sp ungetch ungetch_sp ungetmouse ungetmouse_sp unpost_form unpost_menu untouchwin update_panels update_panels_sp use_default_colors use_default_colors_sp use_env use_env_sp use_extended_names use_legacy_coding use_legacy_coding_sp use_screen use_tioctl use_tioctl_sp use_window vidattr vidattr_sp vidputs vidputs_sp vline vw_printw vw_scanw vwprintw vwscanw waddch waddchnstr waddchstr waddnstr waddstr wattr_get wattr_off wattr_on wattr_set wattroff wattron wattrset wbkgd wbkgdset wborder wchgat wclear wclrtobot wclrtoeol wcolor_set wcursyncup wdelch wdeleteln wechochar wenclose werase wgetch wgetch_events wgetdelay wgetnstr wgetnstr_events wgetparent wgetscrreg wgetstr whline winch winchnstr winchstr winnstr winsch winsdelln winsertln winsnstr winsstr winstr wmouse_trafo wmove wnoutrefresh wprintw wredrawln wrefresh wresize wscanw wscrl wsetscrreg wstandend wstandout wsyncdown wsyncup wtimeout wtouchln wvline ncurses-6.0-20160213/package/mingw-ncurses.nsi0000644000175100001440000001263012657642574017407 0ustar tomusers; $Id: mingw-ncurses.nsi,v 1.145 2016/02/13 15:02:20 tom Exp $ ; TODO add examples ; TODO bump ABI to 6 ; Define the application name !define APPNAME "ncurses" !define EXENAME "ncurses.exe" !define VERSION_MAJOR "6" !define VERSION_MINOR "0" !define VERSION_YYYY "2016" !define VERSION_MMDD "0213" !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD} !define MY_ABI "5" !define MY_MODEL "w" !define SUBKEY "ncurses" !define INSTALL "${APPNAME} (Console)" !define VERSION ${VERSION_MAJOR}.${VERSION_MINOR} !define VERSION_FULL ${VERSION}-${VERSION_PATCH} ; Main Install settings Name "${INSTALL}" InstallDir "c:\mingw" InstallDirRegKey HKLM "Software\${SUBKEY}" "$INSTDIR\bin" OutFile "NSIS-Output\${APPNAME}-${VERSION_FULL}-setup.exe" CRCCheck on SetCompressor /SOLID lzma VIAddVersionKey ProductName "${SUBKEY}" VIAddVersionKey CompanyName "http://invisible-island.net" VIAddVersionKey FileDescription "NCurses Installer (MinGW)" VIAddVersionKey FileVersion ${VERSION_FULL} VIAddVersionKey ProductVersion ${VERSION_FULL} VIAddVersionKey Comments "This installer was built with NSIS and cross-compiling to MinGW." VIAddVersionKey InternalName "${APPNAME}-${VERSION_FULL}-setup.exe" ; This is a dotted set of numbers limited to 16-bits each VIProductVersion "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_YYYY}.${VERSION_MMDD}" ; Modern interface settings !include "MUI.nsh" !define MUI_ABORTWARNING ;!define MUI_FINISHPAGE_RUN ;"$INSTDIR\bin\${EXENAME}" !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "..\COPYING" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ; Set languages (first is default language) !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_RESERVEFILE_LANGDLL InstType "Full" ; SectionIn 1 InstType "Typical" ; SectionIn 2 InstType "Minimal" ; SectionIn 3 Section "${APPNAME}" Section1 SectionIn 1 2 3 ; Set Section properties SetOverwrite on ; Set Section Files and Shortcuts SetOutPath "$INSTDIR\bin" File ".\bin\*.dll" SetOutPath "$INSTDIR\share\${APPNAME}" File /oname=README.txt "..\README" File /oname=README-mingw.txt "..\README.mingw" CreateDirectory "$SMPROGRAMS\${INSTALL}" CreateShortCut "$SMPROGRAMS\${INSTALL}\${APPNAME}.lnk" "$INSTDIR\bin\${EXENAME}" CreateShortCut "$SMPROGRAMS\${INSTALL}\Uninstall.lnk" "$INSTDIR\uninstall.exe" SectionEnd Section "development" Section2 SectionIn 1 2 ; Set Section properties SetOverwrite on ; Set Section Files and Shortcuts SetOutPath "$INSTDIR\share\${APPNAME}" SetOutPath "$INSTDIR\include\${APPNAME}${MY_MODEL}" File ".\include\${APPNAME}${MY_MODEL}\*.h" SetOutPath "$INSTDIR\lib" File ".\lib\*.a" SectionEnd Section "examples" Section3 SectionIn 1 ; Set Section properties SetOverwrite on ; Set Section Files and Shortcuts SetOutPath "$INSTDIR\lib\${APPNAME}" SectionEnd Section -FinishSection WriteRegStr HKLM "Software\${SUBKEY}" "" "$INSTDIR" WriteRegStr HKLM "Software\${SUBKEY}" "Environment" "" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALL}" "DisplayName" "${APPNAME} ${VERSION_FULL} (Console)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALL}" "UninstallString" "$INSTDIR\uninstall.exe" WriteUninstaller "$INSTDIR\uninstall.exe" SectionEnd ; Modern install component descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${Section1} "${SUBKEY} runtime" !insertmacro MUI_DESCRIPTION_TEXT ${Section2} "Development headers and libraries" !insertmacro MUI_DESCRIPTION_TEXT ${Section3} "Examples" !insertmacro MUI_FUNCTION_DESCRIPTION_END ;Uninstall section Section Uninstall ;Remove from registry... DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALL}" DeleteRegKey HKLM "SOFTWARE\${SUBKEY}" ; Delete self Delete "$INSTDIR\uninstall.exe" ; Delete Shortcuts Delete "$SMPROGRAMS\${INSTALL}\${APPNAME}.lnk" Delete "$SMPROGRAMS\${INSTALL}\Uninstall.lnk" ; Clean up application Delete "$INSTDIR\bin\libform${MY_MODEL}${MY_ABI}.dll" Delete "$INSTDIR\bin\libmenu${MY_MODEL}${MY_ABI}.dll" Delete "$INSTDIR\bin\libncurses++${MY_MODEL}${MY_ABI}.dll" Delete "$INSTDIR\bin\libncurses${MY_MODEL}${MY_ABI}.dll" Delete "$INSTDIR\bin\libpanel${MY_MODEL}${MY_ABI}.dll" Delete "$INSTDIR\include\${APPNAME}${MY_MODEL}\*.h" Delete "$INSTDIR\lib\libform${MY_MODEL}.a" Delete "$INSTDIR\lib\libmenu${MY_MODEL}.a" Delete "$INSTDIR\lib\libncurses++${MY_MODEL}.a" Delete "$INSTDIR\lib\libncurses${MY_MODEL}.a" Delete "$INSTDIR\lib\libpanel${MY_MODEL}.a" Delete "$INSTDIR\lib\libform${MY_MODEL}.dll.a" Delete "$INSTDIR\lib\libmenu${MY_MODEL}.dll.a" Delete "$INSTDIR\lib\libncurses++${MY_MODEL}.dll.a" Delete "$INSTDIR\lib\libncurses${MY_MODEL}.dll.a" Delete "$INSTDIR\lib\libpanel${MY_MODEL}.dll.a" Delete "$INSTDIR\lib\${APPNAME}\*.exe" Delete "$INSTDIR\share\${APPNAME}\*.*" ; Remove remaining directories RMDir "$SMPROGRAMS\${INSTALL}" RMDir "$INSTDIR\share\${APPNAME}" RMDir "$INSTDIR\share" RMDir "$INSTDIR\lib\${APPNAME}" RMDir "$INSTDIR\lib" RMDir "$INSTDIR\include\${APPNAME}${MY_MODEL}" RMDir "$INSTDIR\include" RMDir "$INSTDIR\bin" RMDir "$INSTDIR\" SectionEndncurses-6.0-20160213/package/debian-mingw/0000755000175100001440000000000012657642574016432 5ustar tomusersncurses-6.0-20160213/package/debian-mingw/rules0000755000175100001440000000576112532645255017512 0ustar tomusers#!/usr/bin/make -f # Made with the aid of dh_make, by Craig Small # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Cristoph Lameter. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) BUILD_CC = gcc CC_NORMAL = -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wconversion CC_STRICT = $(CC_NORMAL) -W -Wbad-function-cast -Wcast-align -Wcast-qual -Wmissing-declarations -Wnested-externs -Wpointer-arith -Wwrite-strings -ansi -pedantic TARGET = i686-w64-mingw32 MINGW_BIN = /usr/bin MINGW_TOP = /usr/$(TARGET) MINGW_TMP = $(CURDIR)/debian/mingw32-ncurses6 CFLAGS = $(CC_NORMAL) CONFIG_OPTIONS = \ --disable-echo \ --disable-db-install \ --disable-getcap \ --disable-hard-tabs \ --disable-leaks \ --disable-macros \ --disable-overwrite \ --disable-termcap \ --enable-interop \ --enable-pc-files \ --enable-term-driver \ --enable-warnings \ --enable-widec \ --verbose \ --with-abi-version=6 \ --with-cxx-shared \ --with-develop \ --with-fallbacks=unknown,rxvt \ --with-shared \ --with-trace \ --with-xterm-kbs=DEL \ --without-ada \ --without-debug \ --without-manpages \ --without-progs \ --without-tests export CFLAGS BUILD_CC ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif configure: configure-stamp configure-stamp: dh_testdir CC=$(TARGET)-gcc \ CFLAGS="$(CFLAGS)" \ ./configure \ --host=$(TARGET) \ --target=$(TARGET) \ --prefix=$(MINGW_TOP) \ --with-build-cc=$(BUILD_CC) \ --with-pkg-config-libdir=/usr/$(TARGET)/lib/pkgconfig \ $(CONFIG_OPTIONS) touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir $(MAKE) touch build-stamp clean: dh_testdir dh_testroot [ ! -f makefile ] || $(MAKE) distclean rm -f configure-stamp build-stamp install-stamp dh_clean install: install-stamp install-stamp: build-stamp dh_testdir dh_testroot dh_clean -k dh_installdirs $(MAKE) install.libs DESTDIR=$(MINGW_TMP) mkdir -p $(MINGW_TMP)$(MINGW_BIN) for name in $(MINGW_TMP)$(MINGW_TOP)/bin/*-config; \ do \ base=`basename $$name`; \ ln -v $$name $(MINGW_TMP)$(MINGW_BIN)/$(TARGET)-$$base; \ done touch install-stamp # Build architecture-independent files here. binary-indep: build install # No binary-indep target. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installchangelogs NEWS # dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install install-stamp ncurses-6.0-20160213/package/debian-mingw/control0000644000175100001440000000102712224065136020014 0ustar tomusersSource: ncurses6 Section: libdevel Priority: optional Maintainer: Thomas E. Dickey Homepage: http://invisible-island.net/ncurses/ Build-Depends: debhelper (>= 7) Standards-Version: 3.8.2 Package: mingw32-ncurses6 Architecture: any Depends: ${misc:Depends} Description: shared libraries for terminal handling The ncurses library routines are a terminal-independent method of updating character screens with reasonable optimization. . This package is used for testing ABI 6 with the MinGW 32-bit port. ncurses-6.0-20160213/package/debian-mingw/watch0000644000175100001440000000014611764363707017460 0ustar tomusersversion=3 opts=passive ftp://invisible-island.net/ncurses/current/ncurses\.tar.gz \ debian uupdate ncurses-6.0-20160213/package/debian-mingw/source/0000755000175100001440000000000012432004712017703 5ustar tomusersncurses-6.0-20160213/package/debian-mingw/source/format0000644000175100001440000000001512432004712021112 0ustar tomusers3.0 (native) ncurses-6.0-20160213/package/debian-mingw/changelog0000644000175100001440000000046512657642574020311 0ustar tomusersncurses6 (6.0+20160213) unstable; urgency=low * latest weekly patch -- Thomas E. Dickey Sat, 13 Feb 2016 10:02:21 -0500 ncurses6 (5.9-20131005) unstable; urgency=low * initial release -- Thomas E. Dickey Sat, 05 Oct 2013 13:35:29 -0400 ncurses-6.0-20160213/package/debian-mingw/compat0000644000175100001440000000000211363402276017612 0ustar tomusers5 ncurses-6.0-20160213/package/debian-mingw/copyright0000644000175100001440000001176412642031005020345 0ustar tomusersUpstream source http://invisible-island.net/ncurses/ncurses.html This package is used for testing builds of ncurses. Current ncurses maintainer: Thomas Dickey ------------------------------------------------------------------------------- Files: * Copyright: 1998-2015,2016 Free Software Foundation, Inc. Licence: X11 Files: aclocal.m4 package Copyright: 1996-2015,2016 by Thomas E. Dickey Licence: X11 Files: doc/html/NCURSES-Programming-HOWTO.html Copyright: 2001 by Pradeep Padala Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. ------------------------------------------------------------------------------- Files: install-sh Copyright: 1994 X Consortium Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other deal- ings in this Software without prior written authorization from the X Consor- tium. ------------------------------------------------------------------------------- Files: progs/tset.c ncurses/tinfo/read_termcap.c Copyright: 1980,1991,1992,1993 The Regents of the University of California. License: BSD Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- vile: txtmode file-encoding=utf-8 ncurses-6.0-20160213/package/ncursest.map0000644000175100001440000006014712572642021016425 0ustar tomusers# $Id: ncursest.map,v 1.31 2015/09/05 19:35:45 tom Exp $ # script for shared library symbol-versioning using ld # # This file was generated by ncu-mapsyms # Configure options (5.7.20081102) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.8.20110226) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20110404) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20150530) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace # Configure options (6.0.current) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-reentrant --enable-sp-funcs --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-broken_linker --with-hashed-db --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-weak-symbols --with-pthread --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --enable-wgetch-events --with-hashed-db --with-pthread --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-weak-symbols --with-broken_linker --with-pthread --with-termlib --with-ticlib --with-trace NCURSES_TIC_5.0.19991023 { global: _nc_capcmp; _nc_check_termtype; _nc_entry_match; _nc_infotocap; _nc_read_entry_source; _nc_reset_input; _nc_resolve_uses; _nc_set_writedir; _nc_syntax; _nc_tic_expand; _nc_tic_written; _nc_trans_string; _nc_write_entry; local: _nc_captoinfo; _nc_comment_end; _nc_comment_start; _nc_copy_entry; _nc_curr_file_pos; _nc_curr_token; _nc_get_token; _nc_init_entry; _nc_merge_entry; _nc_panic_mode; _nc_parse_entry; _nc_push_token; _nc_save_str; _nc_start_line; _nc_wrap_entry; }; NCURSES_TIC_5.1.20000708 { global: _nc_disable_period; } NCURSES_TIC_5.0.19991023; NCURSES_TIC_5.5.20051010 { global: _nc_alloc_entry_leaks; _nc_captoinfo_leaks; _nc_check_termtype2; _nc_comp_scan_leaks; _nc_resolve_uses2; } NCURSES_TIC_5.1.20000708; NCURSES_TIC_5.7.20081102 { global: _nc_free_tic; local: _nc_comp_captab_leaks; _nc_leaks_tic; } NCURSES_TIC_5.5.20051010; NCURSES_TIC_5.9.20150530 { global: _nc_strict_bsd; } NCURSES_TIC_5.7.20081102; NCURSES_TIC_6.0.current { global: _nc_write_object; local: _*; } NCURSES_TIC_5.9.20150530; NCURSES_TINFO_5.0.19991023 { global: BC; PC; SP; UP; _nc_access; _nc_add_to_try; _nc_copy_termtype; _nc_curr_col; _nc_curr_line; _nc_doalloc; _nc_err_abort; _nc_fallback; _nc_find_entry; _nc_find_type_entry; _nc_first_name; _nc_free_entries; _nc_free_termtype; _nc_free_tparm; _nc_freeall; _nc_get_hash_table; _nc_get_table; _nc_get_tty_mode; _nc_get_type; _nc_getenv_num; _nc_head; _nc_home_terminfo; _nc_init_acs; _nc_keep_tic_dir; _nc_keypad; _nc_name_match; _nc_outch; _nc_read_entry; _nc_read_file_entry; _nc_screen_chain; _nc_set_buffer; _nc_set_source; _nc_set_tty_mode; _nc_set_type; _nc_suppress_warnings; _nc_syserr_abort; _nc_tail; _nc_tic_dir; _nc_timed_wait; _nc_trace_buf; _nc_tracing; _nc_update_screensize; _nc_visbuf; _nc_visbuf2; _nc_warning; _tracechar; baudrate; cbreak; curs_set; curses_version; def_prog_mode; def_shell_mode; define_key; del_curterm; delay_output; erasechar; flushinp; halfdelay; has_ic; has_il; has_key; idcok; idlok; intrflush; keybound; keyname; keyok; keypad; killchar; longname; meta; napms; nocbreak; nodelay; noqiflush; noraw; notimeout; ospeed; putp; qiflush; raw; reset_prog_mode; reset_shell_mode; resetty; savetty; set_curterm; setupterm; termname; tgetent; tgetflag; tgetnum; tgetstr; tgoto; tigetflag; tigetnum; tigetstr; tparm; tputs; trace; typeahead; unctrl; use_env; wtimeout; local: _nc_baudrate; _nc_expand_try; _nc_init_keytry; _nc_nulls_sent; _nc_ospeed; _nc_read_termcap; _nc_read_termcap_entry; _nc_remove_key; _nc_remove_string; _nc_trace_tries; _nc_tracebits; }; NCURSES_TINFO_5.1.20000708 { global: _nc_align_termtype; _nc_flush; _nc_tinfo_fkeys; _nc_user_definable; use_extended_names; } NCURSES_TINFO_5.0.19991023; NCURSES_TINFO_5.2.20001021 { global: _nc_basename; _nc_env_access; _nc_safe_strcat; _nc_safe_strcpy; _nc_str_copy; _nc_str_init; _nc_str_null; } NCURSES_TINFO_5.1.20000708; NCURSES_TINFO_5.3.20021019 { global: _nc_rootname; _nc_tparm_err; _nc_visbufn; } NCURSES_TINFO_5.2.20001021; NCURSES_TINFO_5.4.20040208 { global: _nc_get_locale; _nc_locale_breaks_acs; _nc_pathlast; _nc_retrace_attr_t; _nc_retrace_bool; _nc_retrace_chtype; _nc_retrace_int; _nc_retrace_ptr; _nc_retrace_sp; _nc_retrace_unsigned; _nc_retrace_win; _nc_tparm_analyze; _nc_trace_bufcat; _nc_unicode_locale; _traceattr; _traceattr2; _tracechtype; _tracechtype2; _tracef; key_defined; local: _nc_altcharset_name; _nc_trace_ttymode; } NCURSES_TINFO_5.3.20021019; NCURSES_TINFO_5.5.20051010 { global: _nc_get_source; _nc_retrace_cptr; _nc_retrace_cvoid_ptr; _nc_retrace_void_ptr; _nc_setupterm; _nc_trim_sgr0; local: _nc_delink_entry; _nc_free_entry; } NCURSES_TINFO_5.4.20040208; NCURSES_TINFO_5.6.20061217 { global: _nc_db_close; _nc_db_first; _nc_db_have_data; _nc_db_next; _nc_db_open; _nc_db_put; _nc_eventlist_timeout; _nc_first_db; _nc_handle_sigwinch; _nc_is_abs_path; _nc_is_dir_path; _nc_is_file_path; _nc_keyname_leaks; _nc_last_db; _nc_next_db; _nc_read_termtype; _nc_tgetent_leaks; _nc_viscbuf; local: _nc_db_get; _nc_db_have_index; _nc_hashed_db; _nc_viscbuf2; } NCURSES_TINFO_5.5.20051010; NCURSES_TINFO_5.7.20081102 { global: _nc_COLS; _nc_LINES; _nc_TABSIZE; _nc__nc_outchars; _nc_acs_map; _nc_boolcodes; _nc_boolfnames; _nc_boolnames; _nc_codes_leaks; _nc_count_outchars; _nc_cur_term; _nc_curscr; _nc_free_tinfo; _nc_get_alias_table; _nc_get_screensize; _nc_globals; _nc_init_pthreads; _nc_leaks_tinfo; _nc_locked_tracef; _nc_mutex_lock; _nc_mutex_trylock; _nc_mutex_unlock; _nc_names_leaks; _nc_newscr; _nc_numcodes; _nc_numfnames; _nc_numnames; _nc_prescreen; _nc_ptr_Cols; _nc_ptr_Lines; _nc_screen_of; _nc_set_no_padding; _nc_set_tputs_trace; _nc_stdscr; _nc_strcodes; _nc_strfnames; _nc_strnames; _nc_tracechar; _nc_ttytype; _nc_use_tracef; set_tabsize; local: _nc__nc_tputs_trace; _nc_keyname; _nc_mutex_init; _nc_unctrl; } NCURSES_TINFO_5.6.20061217; NCURSES_TINFO_5.8.20110226 { global: _nc_flush_sp; _nc_get_tty_mode_sp; _nc_init_acs_sp; _nc_outc_wrapper; _nc_outch_sp; _nc_putp; _nc_putp_flush; _nc_putp_flush_sp; _nc_putp_sp; _nc_retrace_int_attr_t; _nc_set_buffer_sp; _nc_set_tty_mode_sp; _nc_sigprocmask; baudrate_sp; cbreak_sp; curs_set_sp; def_prog_mode_sp; def_shell_mode_sp; define_key_sp; del_curterm_sp; delay_output_sp; erasechar_sp; flushinp_sp; halfdelay_sp; has_ic_sp; has_il_sp; has_key_sp; intrflush_sp; key_defined_sp; keybound_sp; keyname_sp; keyok_sp; killchar_sp; longname_sp; napms_sp; new_prescr; nocbreak_sp; noqiflush_sp; noraw_sp; putp_sp; qiflush_sp; raw_sp; reset_prog_mode_sp; reset_shell_mode_sp; resetty_sp; savetty_sp; set_curterm_sp; set_tabsize_sp; termname_sp; tgetent_sp; tgetflag_sp; tgetnum_sp; tgetstr_sp; tigetflag_sp; tigetnum_sp; tigetstr_sp; tiparm; tputs_sp; typeahead_sp; unctrl_sp; use_env_sp; local: _nc_get_cur_term; _nc_get_cur_term_sp; _nc_get_hash_info; _nc_ptr_Tabsize; _nc_retrace_char; _nc_setup_tinfo; _nc_tinfo_cmdch; } NCURSES_TINFO_5.7.20081102; NCURSES_TINFO_5.9.20150530 { global: _nc_init_termtype; _nc_putchar; _nc_putchar_sp; use_tioctl; use_tioctl_sp; local: _*; _nc_comp_error_leaks; _nc_db_iterator_leaks; _nc_setenv_num; } NCURSES_TINFO_5.8.20110226; NCURSEST_5.7.20081102 { global: COLOR_PAIR; PAIR_NUMBER; TYPE_ALNUM; TYPE_ALPHA; TYPE_ENUM; TYPE_INTEGER; TYPE_IPV4; TYPE_NUMERIC; TYPE_REGEXP; _nc_COLORS; _nc_COLOR_PAIRS; _nc_Default_Field; # deprecated in ABI6 _nc_Default_Form; # deprecated in ABI6 _nc_ESCDELAY; _nc_free_and_exit; _nc_has_mouse; # deprecated in ABI6 _nc_optimize_enable; _nc_panelhook; _nc_ripoffline; addch; addchnstr; addchstr; addnstr; addstr; assume_default_colors; attr_get; attr_off; attr_on; attr_set; attroff; attron; attrset; beep; bkgd; bkgdset; border; bottom_panel; box; can_change_color; chgat; clear; clearok; clrtobot; clrtoeol; color_content; color_set; copywin; current_field; current_item; data_ahead; data_behind; del_panel; delch; deleteln; delscreen; delwin; derwin; doupdate; dup_field; dupwin; dynamic_field_info; echo; echochar; endwin; erase; field_arg; field_back; field_buffer; field_count; field_fore; field_index; field_info; field_init; field_just; field_opts; field_opts_off; field_opts_on; field_pad; field_status; field_term; field_type; field_userptr; filter; flash; form_driver; form_fields; form_init; form_opts; form_opts_off; form_opts_on; form_page; form_request_by_name; form_request_name; form_sub; form_term; form_userptr; form_win; free_field; free_fieldtype; free_form; free_item; free_menu; getattrs; getbegx; getbegy; getbkgd; getch; getcurx; getcury; getmaxx; getmaxy; getmouse; getnstr; getparx; getpary; getstr; getwin; has_colors; hide_panel; hline; immedok; inch; inchnstr; inchstr; init_color; init_pair; initscr; innstr; insch; insdelln; insertln; insnstr; insstr; instr; is_cleared; is_idcok; is_idlok; is_immedok; is_keypad; is_leaveok; is_linetouched; is_nodelay; is_notimeout; is_scrollok; is_syncok; is_term_resized; is_wintouched; isendwin; item_count; item_description; item_index; item_init; item_name; item_opts; item_opts_off; item_opts_on; item_term; item_userptr; item_value; item_visible; leaveok; link_field; link_fieldtype; mcprint; menu_back; menu_driver; menu_fore; menu_format; menu_grey; menu_init; menu_items; menu_mark; menu_opts; menu_opts_off; menu_opts_on; menu_pad; menu_pattern; menu_request_by_name; menu_request_name; menu_spacing; menu_sub; menu_term; menu_userptr; menu_win; mouse_trafo; mouseinterval; mousemask; move; move_field; move_panel; mvaddch; mvaddchnstr; mvaddchstr; mvaddnstr; mvaddstr; mvchgat; mvcur; mvdelch; mvderwin; mvgetch; mvgetnstr; mvgetstr; mvhline; mvinch; mvinchnstr; mvinchstr; mvinnstr; mvinsch; mvinsnstr; mvinsstr; mvinstr; mvprintw; mvscanw; mvvline; mvwaddch; mvwaddchnstr; mvwaddchstr; mvwaddnstr; mvwaddstr; mvwchgat; mvwdelch; mvwgetch; mvwgetnstr; mvwgetstr; mvwhline; mvwin; mvwinch; mvwinchnstr; mvwinchstr; mvwinnstr; mvwinsch; mvwinsnstr; mvwinsstr; mvwinstr; mvwprintw; mvwscanw; mvwvline; new_field; new_fieldtype; new_form; new_item; new_menu; new_page; new_panel; newpad; newterm; newwin; nl; noecho; nofilter; nonl; overlay; overwrite; pair_content; panel_above; panel_below; panel_hidden; panel_userptr; panel_window; pechochar; pnoutrefresh; pos_form_cursor; pos_menu_cursor; post_form; post_menu; prefresh; printw; putwin; redrawwin; refresh; replace_panel; resize_term; resizeterm; restartterm; ripoffline; scale_form; scale_menu; scanw; scr_dump; scr_init; scr_restore; scr_set; scrl; scroll; scrollok; set_current_field; set_current_item; set_escdelay; set_field_back; set_field_buffer; set_field_fore; set_field_init; set_field_just; set_field_opts; set_field_pad; set_field_status; set_field_term; set_field_type; set_field_userptr; set_fieldtype_arg; set_fieldtype_choice; set_form_fields; set_form_init; set_form_opts; set_form_page; set_form_sub; set_form_term; set_form_userptr; set_form_win; set_item_init; set_item_opts; set_item_term; set_item_userptr; set_item_value; set_max_field; set_menu_back; set_menu_fore; set_menu_format; set_menu_grey; set_menu_init; set_menu_items; set_menu_mark; set_menu_opts; set_menu_pad; set_menu_pattern; set_menu_spacing; set_menu_sub; set_menu_term; set_menu_userptr; set_menu_win; set_new_page; set_panel_userptr; set_term; set_top_row; setscrreg; show_panel; slk_attr; slk_attr_set; slk_attroff; slk_attron; slk_attrset; slk_clear; slk_color; slk_init; slk_label; slk_noutrefresh; slk_refresh; slk_restore; slk_set; slk_touch; standend; standout; start_color; subpad; subwin; syncok; termattrs; timeout; top_panel; top_row; touchline; touchwin; ungetch; ungetmouse; unpost_form; unpost_menu; untouchwin; update_panels; use_default_colors; use_legacy_coding; use_screen; use_window; vidattr; vidputs; vline; vw_printw; vw_scanw; vwprintw; vwscanw; waddch; waddchnstr; waddchstr; waddnstr; waddstr; wattr_get; wattr_off; wattr_on; wattr_set; wattroff; wattron; wattrset; wbkgd; wbkgdset; wborder; wchgat; wclear; wclrtobot; wclrtoeol; wcolor_set; wcursyncup; wdelch; wdeleteln; wechochar; wenclose; werase; wgetch; wgetch_events; wgetnstr; wgetnstr_events; wgetparent; wgetscrreg; wgetstr; whline; winch; winchnstr; winchstr; winnstr; winsch; winsdelln; winsertln; winsnstr; winsstr; winstr; wmouse_trafo; wmove; wnoutrefresh; wprintw; wredrawln; wrefresh; wresize; wscanw; wscrl; wsetscrreg; wstandend; wstandout; wsyncdown; wsyncup; wtouchln; wvline; local: _nc_Calculate_Item_Length_and_Width; _nc_Calculate_Text_Width; _nc_Connect_Items; _nc_Copy_Argument; _nc_Copy_Type; _nc_Default_FieldType; _nc_Default_Item; _nc_Default_Menu; _nc_Disconnect_Items; _nc_Draw_Menu; _nc_First_Active_Field; _nc_Free_Argument; _nc_Free_Type; _nc_Internal_Validation; _nc_Link_Items; _nc_Make_Argument; _nc_Match_Next_Character_In_Item_Name; _nc_New_TopRow_and_CurrentItem; _nc_Position_Form_Cursor; _nc_Post_Item; _nc_Refresh_Current_Field; _nc_Set_Current_Field; _nc_Set_Form_Page; _nc_Show_Menu; _nc_Synchronize_Attributes; _nc_Synchronize_Options; _nc_Touchline; _nc_Touchpan; _nc_Wnoutrefresh; _nc_dPanel; _nc_dStack; _nc_do_color; _nc_expanded; _nc_fifo_dump; _nc_freewin; _nc_hash_map; _nc_insert_ch; _nc_linedump; _nc_make_oldhash; _nc_makenew; _nc_memmove; _nc_menu_cursor_pos; _nc_msec_cost; _nc_mvcur_init; _nc_mvcur_resume; _nc_mvcur_wrap; _nc_my_visbuf; _nc_oldnums; _nc_printf_string; _nc_render; _nc_reset_colors; _nc_retrace_field; _nc_retrace_field_ptr; _nc_retrace_field_type; _nc_retrace_form; _nc_retrace_form_hook; _nc_retrace_item; _nc_retrace_item_opts; _nc_retrace_item_ptr; _nc_retrace_menu; _nc_retrace_menu_hook; _nc_retrace_menu_opts; _nc_retrace_panel; _nc_screen_init; _nc_screen_resume; _nc_screen_wrap; _nc_scroll_oldhash; _nc_scroll_optimize; _nc_scroll_window; _nc_scrolln; _nc_setupscreen; _nc_signal_handler; _nc_slk_initialize; _nc_synchook; _nc_trace_xnames; _nc_tracemouse; _nc_ungetch; _nc_varargs; _nc_vsscanf; _nc_waddch_nosync; _nc_wgetch; _tracedump; _tracemouse; }; NCURSEST_5.8.20110226 { global: _nc_panelhook_sp; assume_default_colors_sp; beep_sp; can_change_color_sp; ceiling_panel; color_content_sp; doupdate_sp; echo_sp; endwin_sp; filter_sp; flash_sp; get_escdelay; get_escdelay_sp; getmouse_sp; getwin_sp; ground_panel; has_colors_sp; has_mouse; has_mouse_sp; init_color_sp; init_pair_sp; is_pad; is_subwin; is_term_resized_sp; isendwin_sp; mcprint_sp; mouseinterval_sp; mousemask_sp; mvcur_sp; new_form_sp; new_menu_sp; newpad_sp; newterm_sp; newwin_sp; nl_sp; noecho_sp; nofilter_sp; nonl_sp; pair_content_sp; resize_term_sp; resizeterm_sp; restartterm_sp; ripoffline_sp; scr_init_sp; scr_restore_sp; scr_set_sp; set_escdelay_sp; slk_attr_set_sp; slk_attr_sp; slk_attroff_sp; slk_attron_sp; slk_attrset_sp; slk_clear_sp; slk_color_sp; slk_init_sp; slk_label_sp; slk_noutrefresh_sp; slk_refresh_sp; slk_restore_sp; slk_set_sp; slk_touch_sp; start_color_sp; termattrs_sp; ungetch_sp; ungetmouse_sp; update_panels_sp; use_default_colors_sp; use_legacy_coding_sp; vidattr_sp; vidputs_sp; local: _nc_TYPE_ALNUM; _nc_TYPE_ALPHA; _nc_TYPE_ENUM; _nc_TYPE_INTEGER; _nc_TYPE_IPV4; _nc_TYPE_NUMERIC; _nc_TYPE_REGEXP; _nc_curscr_of; _nc_do_color_sp; _nc_form_cursor; _nc_format_slks; _nc_free_and_exit_sp; _nc_freeall_sp; _nc_fty_generic; _nc_generic_fieldtype; _nc_get_fieldbuffer; _nc_hash_map_sp; _nc_linedump_sp; _nc_make_oldhash_sp; _nc_makenew_sp; _nc_msec_cost_sp; _nc_mvcur_init_sp; _nc_mvcur_resume_sp; _nc_mvcur_wrap_sp; _nc_newscr_of; _nc_printf_string_sp; _nc_ptr_Escdelay; _nc_reset_colors_sp; _nc_retrace_mmask_t; _nc_ripoffline_sp; _nc_screen_init_sp; _nc_screen_resume_sp; _nc_screen_wrap_sp; _nc_scroll_oldhash_sp; _nc_scroll_optimize_sp; _nc_scrolln_sp; _nc_set_generic_fieldtype; _nc_setupscreen_sp; _nc_stdscr_of; } NCURSEST_5.7.20081102; NCURSEST_5.9.20150530 { global: wgetdelay; local: _*; _nc_mvcur; _nc_mvcur_sp; _nc_trace_mmask_t; } NCURSEST_5.8.20110226; ncurses-6.0-20160213/package/ncurses.map0000644000175100001440000006177612572641024016254 0ustar tomusers# $Id: ncurses.map,v 1.35 2015/09/05 19:27:16 tom Exp $ # script for shared library symbol-versioning using ld # # This file was generated by ncu-mapsyms # Configure options (5.0.19991023) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.1.20000708) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.2.20001021) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.3.20021019) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.4.20040208) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.5.20051010) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.6.20061217) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.7.20081102) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.8.20110226) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-broken_linker --with-hashed-db --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20110404) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-broken_linker --with-hashed-db --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20150530) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-broken_linker --with-hashed-db --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace # Configure options (6.0.current) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-broken_linker --with-hashed-db --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace NCURSES_5.0.19991023 { global: COLORS; COLOR_PAIR; COLOR_PAIRS; ESCDELAY; PAIR_NUMBER; TYPE_ALNUM; TYPE_ALPHA; TYPE_ENUM; TYPE_INTEGER; TYPE_IPV4; TYPE_NUMERIC; TYPE_REGEXP; _nc_Default_Field; # deprecated in ABI6 _nc_Default_Form; # deprecated in ABI6 _nc_free_and_exit; _nc_has_mouse; # deprecated in ABI6 _nc_panelhook; _nc_ripoffline; addch; addchnstr; addchstr; addnstr; addstr; attr_get; attr_off; attr_on; attr_set; attroff; attron; attrset; beep; bkgd; bkgdset; border; bottom_panel; box; can_change_color; chgat; clear; clearok; clrtobot; clrtoeol; color_content; color_set; copywin; current_field; current_item; data_ahead; data_behind; del_panel; delch; deleteln; delscreen; delwin; derwin; doupdate; dup_field; dupwin; dynamic_field_info; echo; echochar; endwin; field_arg; field_back; field_buffer; field_count; field_fore; field_index; field_info; field_init; field_just; field_opts; field_opts_off; field_opts_on; field_pad; field_status; field_term; field_type; field_userptr; filter; flash; form_driver; form_fields; form_init; form_opts; form_opts_off; form_opts_on; form_page; form_request_by_name; form_request_name; form_sub; form_term; form_userptr; form_win; free_field; free_fieldtype; free_form; free_item; free_menu; getbkgd; getch; getmouse; getnstr; getstr; getwin; has_colors; hide_panel; hline; immedok; inch; inchnstr; inchstr; init_color; init_pair; initscr; innstr; insch; insdelln; insertln; insnstr; insstr; instr; is_linetouched; is_wintouched; isendwin; item_count; item_description; item_index; item_init; item_name; item_opts; item_opts_off; item_opts_on; item_term; item_userptr; item_value; item_visible; leaveok; link_field; link_fieldtype; mcprint; menu_back; menu_driver; menu_fore; menu_format; menu_grey; menu_init; menu_items; menu_mark; menu_opts; menu_opts_off; menu_opts_on; menu_pad; menu_pattern; menu_request_by_name; menu_request_name; menu_spacing; menu_sub; menu_term; menu_userptr; menu_win; mouse_trafo; mouseinterval; mousemask; move; move_field; move_panel; mvaddch; mvaddchnstr; mvaddchstr; mvaddnstr; mvaddstr; mvchgat; mvcur; mvdelch; mvderwin; mvgetch; mvgetnstr; mvgetstr; mvhline; mvinch; mvinchnstr; mvinchstr; mvinnstr; mvinsch; mvinsnstr; mvinsstr; mvinstr; mvprintw; mvscanw; mvvline; mvwaddch; mvwaddchnstr; mvwaddchstr; mvwaddnstr; mvwaddstr; mvwchgat; mvwdelch; mvwgetch; mvwgetnstr; mvwgetstr; mvwhline; mvwin; mvwinch; mvwinchnstr; mvwinchstr; mvwinnstr; mvwinsch; mvwinsnstr; mvwinsstr; mvwinstr; mvwprintw; mvwscanw; mvwvline; new_field; new_fieldtype; new_form; new_item; new_menu; new_page; new_panel; newpad; newterm; newwin; nl; noecho; nonl; overlay; overwrite; pair_content; panel_above; panel_below; panel_hidden; panel_userptr; panel_window; pechochar; pnoutrefresh; pos_form_cursor; pos_menu_cursor; post_form; post_menu; prefresh; printw; putwin; redrawwin; refresh; replace_panel; resizeterm; restartterm; ripoffline; scale_form; scale_menu; scanw; scr_dump; scr_init; scr_restore; scr_set; scrl; scroll; scrollok; set_current_field; set_current_item; set_field_back; set_field_buffer; set_field_fore; set_field_init; set_field_just; set_field_opts; set_field_pad; set_field_status; set_field_term; set_field_type; set_field_userptr; set_fieldtype_arg; set_fieldtype_choice; set_form_fields; set_form_init; set_form_opts; set_form_page; set_form_sub; set_form_term; set_form_userptr; set_form_win; set_item_init; set_item_opts; set_item_term; set_item_userptr; set_item_value; set_max_field; set_menu_back; set_menu_fore; set_menu_format; set_menu_grey; set_menu_init; set_menu_items; set_menu_mark; set_menu_opts; set_menu_pad; set_menu_pattern; set_menu_spacing; set_menu_sub; set_menu_term; set_menu_userptr; set_menu_win; set_new_page; set_panel_userptr; set_term; set_top_row; setscrreg; show_panel; slk_attr; slk_attr_off; slk_attr_on; slk_attr_set; slk_attroff; slk_attron; slk_attrset; slk_clear; slk_color; slk_init; slk_label; slk_noutrefresh; slk_refresh; slk_restore; slk_set; slk_touch; standend; standout; start_color; subpad; subwin; syncok; termattrs; timeout; top_panel; top_row; ungetch; ungetmouse; unpost_form; unpost_menu; untouchwin; update_panels; use_default_colors; vid_attr; vidattr; vidputs; vline; vw_printw; vw_scanw; vwprintw; vwscanw; waddch; waddchnstr; waddchstr; waddnstr; waddstr; wattr_get; wattr_off; wattr_on; wattr_set; wattroff; wattron; wattrset; wbkgd; wbkgdset; wborder; wchgat; wclear; wclrtobot; wclrtoeol; wcolor_set; wcursyncup; wdelch; wdeleteln; wechochar; wenclose; werase; wgetch; wgetnstr; wgetstr; whline; winch; winchnstr; winchstr; winnstr; winsch; winsdelln; winsertln; winsnstr; winsstr; winstr; wmouse_trafo; wmove; wnoutrefresh; wprintw; wredrawln; wrefresh; wresize; wscanw; wscrl; wsetscrreg; wstandend; wstandout; wsyncdown; wsyncup; wtouchln; wvline; local: _nc_Calculate_Item_Length_and_Width; _nc_Connect_Items; _nc_Copy_Argument; _nc_Copy_Type; _nc_Default_FieldType; _nc_Default_Item; _nc_Default_Menu; _nc_Disconnect_Items; _nc_Draw_Menu; _nc_First_Active_Field; _nc_Free_Argument; _nc_Free_Type; _nc_Internal_Validation; _nc_Link_Items; _nc_Make_Argument; _nc_Match_Next_Character_In_Item_Name; _nc_New_TopRow_and_CurrentItem; _nc_Position_Form_Cursor; _nc_Post_Item; _nc_Refresh_Current_Field; _nc_Set_Current_Field; _nc_Set_Form_Page; _nc_Show_Menu; _nc_Synchronize_Attributes; _nc_Synchronize_Options; _nc_background; _nc_do_color; _nc_expanded; _nc_freewin; _nc_hash_map; _nc_lib_traceatr; _nc_lib_tracedmp; _nc_lib_tracemouse; _nc_make_oldhash; _nc_makenew; _nc_memmove; _nc_menu_cursor_pos; _nc_msec_cost; _nc_mvcur_init; _nc_mvcur_resume; _nc_mvcur_wrap; _nc_oldnums; _nc_outstr; _nc_printf_string; _nc_render; _nc_screen_init; _nc_screen_resume; _nc_screen_wrap; _nc_scroll_oldhash; _nc_scroll_optimize; _nc_scroll_window; _nc_scrolln; _nc_setupscreen; _nc_sigaction; _nc_signal_handler; _nc_slk_format; _nc_slk_initialize; _nc_synchook; _nc_trace_xnames; _nc_vsscanf; _nc_waddch_nosync; }; NCURSES_5.1.20000708 { global: assume_default_colors; erase; touchline; touchwin; } NCURSES_5.0.19991023; NCURSES_5.3.20021019 { global: is_term_resized; resize_term; local: _nc_reset_colors; _nc_varargs; _nc_wgetch; } NCURSES_5.1.20000708; NCURSES_5.4.20040208 { global: _nc_optimize_enable; local: _nc_Touchline; _nc_Touchpan; _nc_Wnoutrefresh; _nc_dPanel; _nc_dStack; _nc_fifo_dump; _nc_insert_ch; _nc_linedump; _nc_my_visbuf; _tracedump; _tracemouse; } NCURSES_5.3.20021019; NCURSES_5.5.20051010 { local: _nc_Calculate_Text_Width; _nc_retrace_field; _nc_retrace_field_ptr; _nc_retrace_field_type; _nc_retrace_form; _nc_retrace_form_hook; _nc_retrace_item; _nc_retrace_item_opts; _nc_retrace_item_ptr; _nc_retrace_menu; _nc_retrace_menu_hook; _nc_retrace_menu_opts; _nc_retrace_panel; } NCURSES_5.4.20040208; NCURSES_5.6.20061217 { global: getbegx; getbegy; getcurx; getcury; getmaxx; getmaxy; getparx; getpary; nofilter; use_legacy_coding; wgetch_events; wgetnstr_events; } NCURSES_5.5.20051010; NCURSES_5.7.20081102 { global: getattrs; is_cleared; is_idcok; is_idlok; is_immedok; is_keypad; is_leaveok; is_nodelay; is_notimeout; is_scrollok; is_syncok; set_escdelay; use_screen; use_window; wgetparent; wgetscrreg; local: _nc_tracemouse; _nc_ungetch; } NCURSES_5.6.20061217; NCURSES_5.8.20110226 { global: _nc_panelhook_sp; assume_default_colors_sp; beep_sp; can_change_color_sp; ceiling_panel; color_content_sp; doupdate_sp; echo_sp; endwin_sp; filter_sp; flash_sp; get_escdelay; get_escdelay_sp; getmouse_sp; getwin_sp; ground_panel; has_colors_sp; has_mouse; has_mouse_sp; init_color_sp; init_pair_sp; is_pad; is_subwin; is_term_resized_sp; isendwin_sp; mcprint_sp; mouseinterval_sp; mousemask_sp; mvcur_sp; new_form_sp; new_menu_sp; newpad_sp; newterm_sp; newwin_sp; nl_sp; noecho_sp; nofilter_sp; nonl_sp; pair_content_sp; resize_term_sp; resizeterm_sp; restartterm_sp; ripoffline_sp; scr_init_sp; scr_restore_sp; scr_set_sp; set_escdelay_sp; slk_attr_set_sp; slk_attr_sp; slk_attroff_sp; slk_attron_sp; slk_attrset_sp; slk_clear_sp; slk_color_sp; slk_init_sp; slk_label_sp; slk_noutrefresh_sp; slk_refresh_sp; slk_restore_sp; slk_set_sp; slk_touch_sp; start_color_sp; termattrs_sp; ungetch_sp; ungetmouse_sp; update_panels_sp; use_default_colors_sp; use_legacy_coding_sp; vidattr_sp; vidputs_sp; local: _nc_TYPE_ALNUM; _nc_TYPE_ALPHA; _nc_TYPE_ENUM; _nc_TYPE_INTEGER; _nc_TYPE_IPV4; _nc_TYPE_NUMERIC; _nc_TYPE_REGEXP; _nc_curscr_of; _nc_do_color_sp; _nc_form_cursor; _nc_format_slks; _nc_free_and_exit_sp; _nc_freeall_sp; _nc_fty_generic; _nc_generic_fieldtype; _nc_get_fieldbuffer; _nc_hash_map_sp; _nc_linedump_sp; _nc_make_oldhash_sp; _nc_makenew_sp; _nc_msec_cost_sp; _nc_mvcur_init_sp; _nc_mvcur_resume_sp; _nc_mvcur_wrap_sp; _nc_newscr_of; _nc_printf_string_sp; _nc_reset_colors_sp; _nc_retrace_mmask_t; _nc_ripoffline_sp; _nc_screen_init_sp; _nc_screen_resume_sp; _nc_screen_wrap_sp; _nc_scroll_oldhash_sp; _nc_scroll_optimize_sp; _nc_scrolln_sp; _nc_set_generic_fieldtype; _nc_setupscreen_sp; _nc_stdscr_of; } NCURSES_5.7.20081102; NCURSES_5.9.20150530 { global: wgetdelay; local: _*; _nc_mvcur; _nc_mvcur_sp; _nc_trace_mmask_t; } NCURSES_5.8.20110226; NCURSES_TIC_5.0.19991023 { global: _nc_capcmp; _nc_check_termtype; _nc_entry_match; _nc_infotocap; _nc_read_entry_source; _nc_reset_input; _nc_resolve_uses; _nc_set_writedir; _nc_syntax; _nc_tic_expand; _nc_tic_written; _nc_trans_string; _nc_write_entry; local: _nc_captoinfo; _nc_comment_end; _nc_comment_start; _nc_copy_entry; _nc_curr_file_pos; _nc_curr_token; _nc_get_token; _nc_init_entry; _nc_merge_entry; _nc_panic_mode; _nc_parse_entry; _nc_push_token; _nc_save_str; _nc_start_line; _nc_wrap_entry; }; NCURSES_TIC_5.1.20000708 { global: _nc_disable_period; } NCURSES_TIC_5.0.19991023; NCURSES_TIC_5.5.20051010 { global: _nc_alloc_entry_leaks; _nc_captoinfo_leaks; _nc_check_termtype2; _nc_comp_scan_leaks; _nc_resolve_uses2; } NCURSES_TIC_5.1.20000708; NCURSES_TIC_5.7.20081102 { global: _nc_free_tic; local: _nc_comp_captab_leaks; _nc_leaks_tic; } NCURSES_TIC_5.5.20051010; NCURSES_TIC_5.9.20150530 { global: _nc_strict_bsd; } NCURSES_TIC_5.7.20081102; NCURSES_TIC_6.0.current { global: _nc_write_object; local: _*; } NCURSES_TIC_5.9.20150530; NCURSES_TINFO_5.0.19991023 { global: BC; COLS; LINES; PC; SP; TABSIZE; UP; _nc_access; _nc_add_to_try; _nc_copy_termtype; _nc_curr_col; _nc_curr_line; _nc_doalloc; _nc_err_abort; _nc_fallback; _nc_find_entry; _nc_find_type_entry; _nc_first_name; _nc_free_entries; _nc_free_termtype; _nc_free_tparm; _nc_freeall; _nc_get_hash_table; _nc_get_table; _nc_get_tty_mode; _nc_get_type; _nc_getenv_num; _nc_head; _nc_home_terminfo; _nc_info_hash_table; _nc_init_acs; _nc_keep_tic_dir; _nc_keypad; _nc_name_match; _nc_outch; _nc_read_entry; _nc_read_file_entry; _nc_screen_chain; _nc_set_buffer; _nc_set_source; _nc_set_tty_mode; _nc_set_type; _nc_suppress_warnings; _nc_syserr_abort; _nc_tail; _nc_tic_dir; _nc_timed_wait; _nc_tinfo_fkeysf; _nc_trace_buf; _nc_tracing; _nc_update_screensize; _nc_visbuf; _nc_visbuf2; _nc_warning; _tracechar; acs_map; baudrate; boolcodes; boolfnames; boolnames; cbreak; cur_term; curs_set; curscr; curses_version; def_prog_mode; def_shell_mode; define_key; del_curterm; delay_output; erasechar; flushinp; halfdelay; has_ic; has_il; has_key; idcok; idlok; intrflush; keybound; keyname; keyok; keypad; killchar; longname; meta; napms; newscr; nocbreak; nodelay; noqiflush; noraw; notimeout; numcodes; numfnames; numnames; ospeed; putp; qiflush; raw; reset_prog_mode; reset_shell_mode; resetty; savetty; set_curterm; setupterm; stdscr; strcodes; strfnames; strnames; termname; tgetent; tgetflag; tgetnum; tgetstr; tgoto; tigetflag; tigetnum; tigetstr; tparm; tputs; trace; ttytype; typeahead; unctrl; use_env; wtimeout; local: _nc_baudrate; _nc_cap_hash_table; _nc_capalias_table; _nc_expand_try; _nc_infoalias_table; _nc_init_keytry; _nc_key_names; _nc_nulls_sent; _nc_ospeed; _nc_read_termcap; _nc_read_termcap_entry; _nc_remove_key; _nc_remove_string; _nc_trace_tries; _nc_tracebits; }; NCURSES_TINFO_5.1.20000708 { global: _nc_align_termtype; _nc_flush; _nc_tinfo_fkeys; _nc_user_definable; use_extended_names; } NCURSES_TINFO_5.0.19991023; NCURSES_TINFO_5.2.20001021 { global: _nc_basename; _nc_env_access; _nc_safe_strcat; _nc_safe_strcpy; _nc_str_copy; _nc_str_init; _nc_str_null; } NCURSES_TINFO_5.1.20000708; NCURSES_TINFO_5.3.20021019 { global: _nc_rootname; _nc_tparm_err; _nc_visbufn; } NCURSES_TINFO_5.2.20001021; NCURSES_TINFO_5.4.20040208 { global: _nc_get_locale; _nc_locale_breaks_acs; _nc_outchars; _nc_pathlast; _nc_retrace_attr_t; _nc_retrace_bool; _nc_retrace_chtype; _nc_retrace_int; _nc_retrace_ptr; _nc_retrace_sp; _nc_retrace_unsigned; _nc_retrace_win; _nc_tparm_analyze; _nc_tputs_trace; _nc_trace_bufcat; _nc_unicode_locale; _traceattr; _traceattr2; _tracechtype; _tracechtype2; _tracef; key_defined; local: _nc_altcharset_name; _nc_trace_ttymode; } NCURSES_TINFO_5.3.20021019; NCURSES_TINFO_5.5.20051010 { global: _nc_get_source; _nc_retrace_cptr; _nc_retrace_cvoid_ptr; _nc_retrace_void_ptr; _nc_setupterm; _nc_trim_sgr0; local: _nc_delink_entry; _nc_free_entry; } NCURSES_TINFO_5.4.20040208; NCURSES_TINFO_5.6.20061217 { global: _nc_db_close; _nc_db_first; _nc_db_have_data; _nc_db_next; _nc_db_open; _nc_db_put; _nc_eventlist_timeout; _nc_first_db; _nc_handle_sigwinch; _nc_is_abs_path; _nc_is_dir_path; _nc_is_file_path; _nc_keyname_leaks; _nc_last_db; _nc_next_db; _nc_read_termtype; _nc_tgetent_leaks; _nc_viscbuf; local: _nc_db_get; _nc_db_have_index; _nc_hashed_db; _nc_viscbuf2; } NCURSES_TINFO_5.5.20051010; NCURSES_TINFO_5.7.20081102 { global: _nc_free_tinfo; _nc_get_alias_table; _nc_get_screensize; _nc_globals; _nc_leaks_tinfo; _nc_prescreen; _nc_screen_of; _nc_set_no_padding; _nc_tracechar; set_tabsize; local: _nc_keyname; _nc_unctrl; } NCURSES_TINFO_5.6.20061217; NCURSES_TINFO_5.8.20110226 { global: _nc_flush_sp; _nc_get_tty_mode_sp; _nc_init_acs_sp; _nc_outc_wrapper; _nc_outch_sp; _nc_putp; _nc_putp_flush; _nc_putp_flush_sp; _nc_putp_sp; _nc_retrace_int_attr_t; _nc_set_buffer_sp; _nc_set_tty_mode_sp; baudrate_sp; cbreak_sp; curs_set_sp; def_prog_mode_sp; def_shell_mode_sp; define_key_sp; del_curterm_sp; delay_output_sp; erasechar_sp; flushinp_sp; halfdelay_sp; has_ic_sp; has_il_sp; has_key_sp; intrflush_sp; key_defined_sp; keybound_sp; keyname_sp; keyok_sp; killchar_sp; napms_sp; new_prescr; nocbreak_sp; noqiflush_sp; noraw_sp; putp_sp; qiflush_sp; raw_sp; reset_prog_mode_sp; reset_shell_mode_sp; resetty_sp; savetty_sp; set_curterm_sp; set_tabsize_sp; termname_sp; tgetent_sp; tgetflag_sp; tgetnum_sp; tgetstr_sp; tigetflag_sp; tigetnum_sp; tigetstr_sp; tiparm; tputs_sp; typeahead_sp; unctrl_sp; use_env_sp; local: _nc_get_hash_info; _nc_retrace_char; _nc_setup_tinfo; _nc_tinfo_cmdch; } NCURSES_TINFO_5.7.20081102; NCURSES_TINFO_5.9.20150530 { global: _nc_init_termtype; _nc_putchar; _nc_putchar_sp; use_tioctl; use_tioctl_sp; local: _*; _nc_comp_error_leaks; _nc_db_iterator_leaks; _nc_setenv_num; } NCURSES_TINFO_5.8.20110226; ncurses-6.0-20160213/package/debian/0000755000175100001440000000000012657642574015313 5ustar tomusersncurses-6.0-20160213/package/debian/rules0000755000175100001440000001354012601607126016355 0ustar tomusers#!/usr/bin/make -f # Made with the aid of dh_make, by Craig Small # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Cristoph Lameter. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # packages PACKAGES.indep = # ncurses6-docs PACKAGES.arch = ncurses6 ncursest6 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) CC_NORMAL = -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wconversion CC_STRICT = $(CC_NORMAL) -W -Wbad-function-cast -Wcast-align -Wcast-qual -Wmissing-declarations -Wnested-externs -Wpointer-arith -Wwrite-strings -ansi -pedantic MY_ABI=6 MY_DIR=/usr MYDATA=/usr/local/ncurses/share/terminfo NORMAL_DIR=$(CURDIR)/debian/ncurses$(MY_ABI) THREAD_DIR=$(CURDIR)/debian/ncursest$(MY_ABI) CFLAGS = $(shell dpkg-buildflags --get CFLAGS) $(CC_NORMAL) CPPFLAGS = $(shell dpkg-buildflags --get CPPFLAGS) LDFLAGS = $(shell dpkg-buildflags --get LDFLAGS) ifneq ($(MY_DIR),/usr) RPATH_ENV = RPATH_LIST=../lib:$(MY_DIR)/lib RPATH_OPT = --enable-rpath else RPATH_ENV = RPATH_OPT = --disable-rpath --disable-rpath-hack endif ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif verbose = # -v configure = \ $(RPATH_ENV) \ CFLAGS="$(CFLAGS)" \ CPPFLAGS="$(CPPFLAGS)" \ LDFLAGS="$(LDFLAGS)" ../../configure $(RPATH_OPT) \ --host=$(DEB_HOST_GNU_TYPE) \ --build=$(DEB_BUILD_GNU_TYPE) \ --prefix=$(MY_DIR) \ --with-default-terminfo-dir=$(MYDATA) \ --with-terminfo-dirs=$(MYDATA):/usr/share/terminfo \ --disable-echo \ --disable-getcap \ --disable-leaks \ --disable-macros \ --disable-overwrite \ --disable-termcap \ --enable-hard-tabs \ --enable-pc-files \ --enable-warnings \ --enable-wgetch-events \ --enable-widec \ --program-suffix=$(MY_ABI) \ --verbose \ --with-abi-version=$(MY_ABI) \ --with-develop \ --with-extra-suffix=$(MY_ABI) \ --with-shared \ --with-termlib \ --with-ticlib \ --with-trace \ --with-cxx-shared \ --with-terminfo-dirs=/lib/terminfo:/usr/share/terminfo \ --with-versioned-syms \ --with-xterm-kbs=DEL \ --without-ada \ --without-debug \ --without-normal NCURSES6_DIR = $(CURDIR)/debian/ncurses6 NCURSEST6_DIR = $(CURDIR)/debian/ncursest6 .PHONY: all config build install binary clean config-indep config-arch \ build-indep build-arch install-indep install-arch binary-indep \ binary-arch all: build config: config-indep config-arch build: build-indep build-arch install: install-indep install-arch binary: binary-indep binary-arch clean: dh_testdir dh_testroot dh_clean $(verbose) rm -rf t config-indep: $(PACKAGES.indep:%=config-%-stamp) config-arch: $(PACKAGES.arch:%=config-%-stamp) build-indep: $(PACKAGES.indep:%=build-%-stamp) build-arch: $(PACKAGES.arch:%=build-%-stamp) install-indep: $(PACKAGES.indep:%=install-%-stamp) install-arch: $(PACKAGES.arch:%=install-%-stamp) config-ncurses6-stamp: dh_testdir rm -rf t/ncurses6 mkdir -p t/ncurses6 cd t/ncurses6; $(configure) touch $@ config-ncursest6-stamp: dh_testdir rm -rf t/ncursest6 mkdir -p t/ncursest6 cd t/ncursest6; $(configure) \ --enable-interop \ --enable-sp-funcs \ --program-suffix=t$(MY_ABI) \ --with-pthread touch $@ build-ncurses6-stamp: config-ncurses6-stamp dh_testdir $(MAKE) -C t/ncurses6 touch $@ build-ncursest6-stamp: config-ncursest6-stamp dh_testdir $(MAKE) -C t/ncursest6 touch $@ install-ncurses6-stamp: build-ncurses6-stamp dh_testdir dh_testroot dh_installdirs $(verbose) dh_prep $(verbose) -pncurses6 $(MAKE) -C t/ncurses6 install.libs install.progs DESTDIR=$(NCURSES6_DIR) $(MAKE) -C t/ncurses6/test ncurses LOCAL_LIBDIR=$(MY_DIR)/lib mv t/ncurses6/test/ncurses $(NCURSES6_DIR)$(MY_DIR)/bin/ncurses$(MY_ABI) touch $@ install-ncursest6-stamp: build-ncursest6-stamp dh_testdir dh_testroot dh_installdirs $(verbose) dh_prep $(verbose) -pncursest6 $(MAKE) -C t/ncursest6 install.libs install.progs DESTDIR=$(NCURSEST6_DIR) $(MAKE) -C t/ncursest6/test ncurses LOCAL_LIBDIR=$(MY_DIR)/lib mv t/ncursest6/test/ncurses $(NCURSEST6_DIR)$(MY_DIR)/bin/ncursest$(MY_ABI) touch $@ # Build architecture-independent files here. binary-indep: install-indep ifneq ($(PACKAGES.indep),) rm -f $(PACKAGES.indep:%=install-%-stamp) dh_testdir dh_testroot dh_installdocs $(verbose) $(PACKAGES.indep:%=-p%) dh_installman $(verbose) $(PACKAGES.indep:%=-p%) dh_installexamples $(verbose) $(PACKAGES.indep:%=-p%) dh_installchangelogs $(verbose) $(PACKAGES.indep:%=-p%) NEWS dh_compress $(verbose) $(PACKAGES.indep:%=-p%) dh_fixperms $(verbose) $(PACKAGES.indep:%=-p%) dh_installdeb $(verbose) $(PACKAGES.indep:%=-p%) dh_gencontrol $(verbose) $(PACKAGES.indep:%=-p%) dh_md5sums $(verbose) $(PACKAGES.indep:%=-p%) dh_builddeb $(verbose) $(PACKAGES.indep:%=-p%) endif # Build architecture-dependent files here. binary-arch: install-arch ifneq ($(PACKAGES.arch),) rm -f $(PACKAGES.arch:%=install-%-stamp) dh_testdir dh_testroot dh_installchangelogs $(verbose) $(PACKAGES.arch:%=-p%) NEWS dh_strip $(verbose) $(PACKAGES.arch:%=-p%) dh_compress $(verbose) $(PACKAGES.arch:%=-p%) dh_fixperms $(verbose) $(PACKAGES.arch:%=-p%) dh_installdeb $(verbose) $(PACKAGES.arch:%=-p%) dh_makeshlibs $(verbose) $(PACKAGES.arch:%=-p%) dh_shlibdeps $(verbose) $(PACKAGES.arch:%=-p%) dh_gencontrol $(verbose) $(PACKAGES.arch:%=-p%) dh_md5sums $(verbose) $(PACKAGES.arch:%=-p%) dh_builddeb $(verbose) $(PACKAGES.arch:%=-p%) endif ncurses-6.0-20160213/package/debian/control0000644000175100001440000000143612550276252016706 0ustar tomusersSource: ncurses6 Section: libdevel Priority: optional Maintainer: Thomas E. Dickey Homepage: http://invisible-island.net/ncurses/ Build-Depends: debhelper (>= 7) Standards-Version: 3.8.2 Package: ncurses6 Architecture: any Depends: ${misc:Depends} Description: shared libraries for terminal handling The ncurses library routines are a terminal-independent method of updating character screens with reasonable optimization. . This package is used for testing ABI 6. Package: ncursest6 Architecture: any Depends: ${misc:Depends} Description: shared libraries for terminal handling The ncurses library routines are a terminal-independent method of updating character screens with reasonable optimization. . This package is used for testing ABI 6 with pthreads. ncurses-6.0-20160213/package/debian/watch0000644000175100001440000000014611764363707016341 0ustar tomusersversion=3 opts=passive ftp://invisible-island.net/ncurses/current/ncurses\.tar.gz \ debian uupdate ncurses-6.0-20160213/package/debian/source/0000755000175100001440000000000012432004703016564 5ustar tomusersncurses-6.0-20160213/package/debian/source/format0000644000175100001440000000001512432004703017773 0ustar tomusers3.0 (native) ncurses-6.0-20160213/package/debian/changelog0000644000175100001440000000046512657642574017172 0ustar tomusersncurses6 (6.0+20160213) unstable; urgency=low * latest weekly patch -- Thomas E. Dickey Sat, 13 Feb 2016 10:02:21 -0500 ncurses6 (5.9-20120608) unstable; urgency=low * initial release -- Thomas E. Dickey Fri, 08 Jun 2012 07:54:29 -0400 ncurses-6.0-20160213/package/debian/compat0000644000175100001440000000000211363402276016473 0ustar tomusers5 ncurses-6.0-20160213/package/debian/copyright0000644000175100001440000001176412642031005017226 0ustar tomusersUpstream source http://invisible-island.net/ncurses/ncurses.html This package is used for testing builds of ncurses. Current ncurses maintainer: Thomas Dickey ------------------------------------------------------------------------------- Files: * Copyright: 1998-2015,2016 Free Software Foundation, Inc. Licence: X11 Files: aclocal.m4 package Copyright: 1996-2015,2016 by Thomas E. Dickey Licence: X11 Files: doc/html/NCURSES-Programming-HOWTO.html Copyright: 2001 by Pradeep Padala Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. ------------------------------------------------------------------------------- Files: install-sh Copyright: 1994 X Consortium Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other deal- ings in this Software without prior written authorization from the X Consor- tium. ------------------------------------------------------------------------------- Files: progs/tset.c ncurses/tinfo/read_termcap.c Copyright: 1980,1991,1992,1993 The Regents of the University of California. License: BSD Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- vile: txtmode file-encoding=utf-8 ncurses-6.0-20160213/package/ncurses.spec0000644000175100001440000000505212657642574016431 0ustar tomusersSummary: shared libraries for terminal handling Name: ncurses6 Version: 6.0 Release: 20160213 License: X11 Group: Development/Libraries Source: ncurses-%{version}-%{release}.tgz # URL: http://invisible-island.net/ncurses/ %define CC_NORMAL -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wconversion %define CC_STRICT %{CC_NORMAL} -W -Wbad-function-cast -Wcast-align -Wcast-qual -Wmissing-declarations -Wnested-externs -Wpointer-arith -Wwrite-strings -ansi -pedantic %global MY_ABI 6 # save value before redefining %global sys_libdir %{_libdir} # was redefined... #global _prefix /usr/local/ncurses#{MY_ABI} %global MY_PKG %{sys_libdir}/pkgconfig %define MYDATA /usr/local/ncurses/share/terminfo %description The ncurses library routines are a terminal-independent method of updating character screens with reasonable optimization. This package is used for testing ABI %{MY_ABI}. %prep %define debug_package %{nil} %setup -q -n ncurses-%{version}-%{release} %build CFLAGS="%{CC_NORMAL}" \ RPATH_LIST=../lib:%{_prefix}/lib \ %configure \ --target %{_target_platform} \ --prefix=%{_prefix} \ --includedir='${prefix}/include' \ --with-default-terminfo-dir=%{MYDATA} \ --with-install-prefix=$RPM_BUILD_ROOT \ --with-terminfo-dirs=%{MYDATA}:/usr/share/terminfo \ --disable-echo \ --disable-getcap \ --disable-leaks \ --disable-macros \ --disable-overwrite \ --disable-termcap \ --enable-hard-tabs \ --enable-pc-files \ --enable-rpath \ --enable-warnings \ --enable-wgetch-events \ --enable-widec \ --verbose \ --program-suffix=%{MY_ABI} \ --with-abi-version=%{MY_ABI} \ --with-develop \ --with-shared \ --with-termlib \ --with-ticlib \ --with-trace \ --with-cxx-shared \ --with-extra-suffix=%{MY_ABI} \ --with-pkg-config-libdir=%{MY_PKG} \ --with-versioned-syms \ --with-xterm-kbs=DEL \ --without-ada \ --without-debug \ --without-normal make %install rm -rf $RPM_BUILD_ROOT make install.libs install.progs rm -f test/ncurses ( cd test && make ncurses LOCAL_LIBDIR=%{_libdir} && mv ncurses $RPM_BUILD_ROOT/%{_bindir}/ncurses%{MY_ABI} ) %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %{_bindir}/* %{_includedir}/* %{_libdir}/* %{MY_PKG}/*.pc %changelog * Sun Apr 26 2015 Thomas E. Dickey - move package to /usr * Sun Apr 12 2015 Thomas E. Dickey - factor-out MY_ABI * Sat Mar 09 2013 Thomas E. Dickey - add --with-cxx-shared option to demonstrate c++ binding as shared library * Sat Oct 27 2012 Thomas E. Dickey - add ncurses program as "ncurses6" to provide demonstration. * Fri Jun 08 2012 Thomas E. Dickey - initial version. ncurses-6.0-20160213/package/ncurses.sym0000644000175100001440000004273412572642121016277 0ustar tomusers# $Id: ncurses.sym,v 1.24 2015/09/05 19:36:49 tom Exp $ # script for shared library symbol-visibility using libtool # # This file was generated by ncu-mapsyms # Configure options (5.0.19991023) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.1.20000708) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.2.20001021) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.3.20021019) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.4.20040208) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.5.20051010) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.6.20061217) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.7.20081102) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.8.20110226) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-broken_linker --with-hashed-db --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20110404) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-broken_linker --with-hashed-db --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20150530) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-broken_linker --with-hashed-db --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace # Configure options (6.0.current) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-broken_linker --with-hashed-db --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --with-hashed-db --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --with-broken_linker --with-termlib --with-ticlib --with-trace BC COLORS COLOR_PAIR COLOR_PAIRS COLS ESCDELAY LINES PAIR_NUMBER PC SP TABSIZE TYPE_ALNUM TYPE_ALPHA TYPE_ENUM TYPE_INTEGER TYPE_IPV4 TYPE_NUMERIC TYPE_REGEXP UP _nc_Default_Field _nc_Default_Form _nc_access _nc_add_to_try _nc_align_termtype _nc_alloc_entry_leaks _nc_basename _nc_capcmp _nc_captoinfo_leaks _nc_check_termtype _nc_check_termtype2 _nc_comp_scan_leaks _nc_copy_termtype _nc_curr_col _nc_curr_line _nc_db_close _nc_db_first _nc_db_have_data _nc_db_next _nc_db_open _nc_db_put _nc_disable_period _nc_doalloc _nc_entry_match _nc_env_access _nc_err_abort _nc_eventlist_timeout _nc_fallback _nc_find_entry _nc_find_type_entry _nc_first_db _nc_first_name _nc_flush _nc_flush_sp _nc_free_and_exit _nc_free_entries _nc_free_termtype _nc_free_tic _nc_free_tinfo _nc_free_tparm _nc_freeall _nc_get_alias_table _nc_get_hash_table _nc_get_locale _nc_get_screensize _nc_get_source _nc_get_table _nc_get_tty_mode _nc_get_tty_mode_sp _nc_get_type _nc_getenv_num _nc_globals _nc_handle_sigwinch _nc_has_mouse _nc_head _nc_home_terminfo _nc_info_hash_table _nc_infotocap _nc_init_acs _nc_init_acs_sp _nc_init_termtype _nc_is_abs_path _nc_is_dir_path _nc_is_file_path _nc_keep_tic_dir _nc_keyname_leaks _nc_keypad _nc_last_db _nc_leaks_tinfo _nc_locale_breaks_acs _nc_name_match _nc_next_db _nc_optimize_enable _nc_outc_wrapper _nc_outch _nc_outch_sp _nc_outchars _nc_panelhook _nc_panelhook_sp _nc_pathlast _nc_prescreen _nc_putchar _nc_putchar_sp _nc_putp _nc_putp_flush _nc_putp_flush_sp _nc_putp_sp _nc_read_entry _nc_read_entry_source _nc_read_file_entry _nc_read_termtype _nc_reset_input _nc_resolve_uses _nc_resolve_uses2 _nc_retrace_attr_t _nc_retrace_bool _nc_retrace_chtype _nc_retrace_cptr _nc_retrace_cvoid_ptr _nc_retrace_int _nc_retrace_int_attr_t _nc_retrace_ptr _nc_retrace_sp _nc_retrace_unsigned _nc_retrace_void_ptr _nc_retrace_win _nc_ripoffline _nc_rootname _nc_safe_strcat _nc_safe_strcpy _nc_screen_chain _nc_screen_of _nc_set_buffer _nc_set_buffer_sp _nc_set_no_padding _nc_set_source _nc_set_tty_mode _nc_set_tty_mode_sp _nc_set_type _nc_set_writedir _nc_setupterm _nc_str_copy _nc_str_init _nc_str_null _nc_strict_bsd _nc_suppress_warnings _nc_syntax _nc_syserr_abort _nc_tail _nc_tgetent_leaks _nc_tic_dir _nc_tic_expand _nc_tic_written _nc_timed_wait _nc_tinfo_fkeys _nc_tinfo_fkeysf _nc_tparm_analyze _nc_tparm_err _nc_tputs_trace _nc_trace_buf _nc_trace_bufcat _nc_tracechar _nc_tracing _nc_trans_string _nc_trim_sgr0 _nc_unicode_locale _nc_update_screensize _nc_user_definable _nc_visbuf _nc_visbuf2 _nc_visbufn _nc_viscbuf _nc_warning _nc_write_entry _nc_write_object _traceattr _traceattr2 _tracechar _tracechtype _tracechtype2 _tracef acs_map addch addchnstr addchstr addnstr addstr assume_default_colors assume_default_colors_sp attr_get attr_off attr_on attr_set attroff attron attrset baudrate baudrate_sp beep beep_sp bkgd bkgdset boolcodes boolfnames boolnames border bottom_panel box can_change_color can_change_color_sp cbreak cbreak_sp ceiling_panel chgat clear clearok clrtobot clrtoeol color_content color_content_sp color_set copywin cur_term current_field current_item curs_set curs_set_sp curscr curses_version data_ahead data_behind def_prog_mode def_prog_mode_sp def_shell_mode def_shell_mode_sp define_key define_key_sp del_curterm del_curterm_sp del_panel delay_output delay_output_sp delch deleteln delscreen delwin derwin doupdate doupdate_sp dup_field dupwin dynamic_field_info echo echo_sp echochar endwin endwin_sp erase erasechar erasechar_sp field_arg field_back field_buffer field_count field_fore field_index field_info field_init field_just field_opts field_opts_off field_opts_on field_pad field_status field_term field_type field_userptr filter filter_sp flash flash_sp flushinp flushinp_sp form_driver form_fields form_init form_opts form_opts_off form_opts_on form_page form_request_by_name form_request_name form_sub form_term form_userptr form_win free_field free_fieldtype free_form free_item free_menu get_escdelay get_escdelay_sp getattrs getbegx getbegy getbkgd getch getcurx getcury getmaxx getmaxy getmouse getmouse_sp getnstr getparx getpary getstr getwin getwin_sp ground_panel halfdelay halfdelay_sp has_colors has_colors_sp has_ic has_ic_sp has_il has_il_sp has_key has_key_sp has_mouse has_mouse_sp hide_panel hline idcok idlok immedok inch inchnstr inchstr init_color init_color_sp init_pair init_pair_sp initscr innstr insch insdelln insertln insnstr insstr instr intrflush intrflush_sp is_cleared is_idcok is_idlok is_immedok is_keypad is_leaveok is_linetouched is_nodelay is_notimeout is_pad is_scrollok is_subwin is_syncok is_term_resized is_term_resized_sp is_wintouched isendwin isendwin_sp item_count item_description item_index item_init item_name item_opts item_opts_off item_opts_on item_term item_userptr item_value item_visible key_defined key_defined_sp keybound keybound_sp keyname keyname_sp keyok keyok_sp keypad killchar killchar_sp leaveok link_field link_fieldtype longname mcprint mcprint_sp menu_back menu_driver menu_fore menu_format menu_grey menu_init menu_items menu_mark menu_opts menu_opts_off menu_opts_on menu_pad menu_pattern menu_request_by_name menu_request_name menu_spacing menu_sub menu_term menu_userptr menu_win meta mouse_trafo mouseinterval mouseinterval_sp mousemask mousemask_sp move move_field move_panel mvaddch mvaddchnstr mvaddchstr mvaddnstr mvaddstr mvchgat mvcur mvcur_sp mvdelch mvderwin mvgetch mvgetnstr mvgetstr mvhline mvinch mvinchnstr mvinchstr mvinnstr mvinsch mvinsnstr mvinsstr mvinstr mvprintw mvscanw mvvline mvwaddch mvwaddchnstr mvwaddchstr mvwaddnstr mvwaddstr mvwchgat mvwdelch mvwgetch mvwgetnstr mvwgetstr mvwhline mvwin mvwinch mvwinchnstr mvwinchstr mvwinnstr mvwinsch mvwinsnstr mvwinsstr mvwinstr mvwprintw mvwscanw mvwvline napms napms_sp new_field new_fieldtype new_form new_form_sp new_item new_menu new_menu_sp new_page new_panel new_prescr newpad newpad_sp newscr newterm newterm_sp newwin newwin_sp nl nl_sp nocbreak nocbreak_sp nodelay noecho noecho_sp nofilter nofilter_sp nonl nonl_sp noqiflush noqiflush_sp noraw noraw_sp notimeout numcodes numfnames numnames ospeed overlay overwrite pair_content pair_content_sp panel_above panel_below panel_hidden panel_userptr panel_window pechochar pnoutrefresh pos_form_cursor pos_menu_cursor post_form post_menu prefresh printw putp putp_sp putwin qiflush qiflush_sp raw raw_sp redrawwin refresh replace_panel reset_prog_mode reset_prog_mode_sp reset_shell_mode reset_shell_mode_sp resetty resetty_sp resize_term resize_term_sp resizeterm resizeterm_sp restartterm restartterm_sp ripoffline ripoffline_sp savetty savetty_sp scale_form scale_menu scanw scr_dump scr_init scr_init_sp scr_restore scr_restore_sp scr_set scr_set_sp scrl scroll scrollok set_current_field set_current_item set_curterm set_curterm_sp set_escdelay set_escdelay_sp set_field_back set_field_buffer set_field_fore set_field_init set_field_just set_field_opts set_field_pad set_field_status set_field_term set_field_type set_field_userptr set_fieldtype_arg set_fieldtype_choice set_form_fields set_form_init set_form_opts set_form_page set_form_sub set_form_term set_form_userptr set_form_win set_item_init set_item_opts set_item_term set_item_userptr set_item_value set_max_field set_menu_back set_menu_fore set_menu_format set_menu_grey set_menu_init set_menu_items set_menu_mark set_menu_opts set_menu_pad set_menu_pattern set_menu_spacing set_menu_sub set_menu_term set_menu_userptr set_menu_win set_new_page set_panel_userptr set_tabsize set_tabsize_sp set_term set_top_row setscrreg setupterm show_panel slk_attr slk_attr_off slk_attr_on slk_attr_set slk_attr_set_sp slk_attr_sp slk_attroff slk_attroff_sp slk_attron slk_attron_sp slk_attrset slk_attrset_sp slk_clear slk_clear_sp slk_color slk_color_sp slk_init slk_init_sp slk_label slk_label_sp slk_noutrefresh slk_noutrefresh_sp slk_refresh slk_refresh_sp slk_restore slk_restore_sp slk_set slk_set_sp slk_touch slk_touch_sp standend standout start_color start_color_sp stdscr strcodes strfnames strnames subpad subwin syncok termattrs termattrs_sp termname termname_sp tgetent tgetent_sp tgetflag tgetflag_sp tgetnum tgetnum_sp tgetstr tgetstr_sp tgoto tigetflag tigetflag_sp tigetnum tigetnum_sp tigetstr tigetstr_sp timeout tiparm top_panel top_row touchline touchwin tparm tputs tputs_sp trace ttytype typeahead typeahead_sp unctrl unctrl_sp ungetch ungetch_sp ungetmouse ungetmouse_sp unpost_form unpost_menu untouchwin update_panels update_panels_sp use_default_colors use_default_colors_sp use_env use_env_sp use_extended_names use_legacy_coding use_legacy_coding_sp use_screen use_tioctl use_tioctl_sp use_window vid_attr vidattr vidattr_sp vidputs vidputs_sp vline vw_printw vw_scanw vwprintw vwscanw waddch waddchnstr waddchstr waddnstr waddstr wattr_get wattr_off wattr_on wattr_set wattroff wattron wattrset wbkgd wbkgdset wborder wchgat wclear wclrtobot wclrtoeol wcolor_set wcursyncup wdelch wdeleteln wechochar wenclose werase wgetch wgetch_events wgetdelay wgetnstr wgetnstr_events wgetparent wgetscrreg wgetstr whline winch winchnstr winchstr winnstr winsch winsdelln winsertln winsnstr winsstr winstr wmouse_trafo wmove wnoutrefresh wprintw wredrawln wrefresh wresize wscanw wscrl wsetscrreg wstandend wstandout wsyncdown wsyncup wtimeout wtouchln wvline ncurses-6.0-20160213/package/ncursesw.map0000644000175100001440000006443212572641634016442 0ustar tomusers# $Id: ncursesw.map,v 1.37 2015/09/05 19:33:48 tom Exp $ # script for shared library symbol-versioning using ld # # This file was generated by ncu-mapsyms # Configure options (5.1.20000708) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.2.20001021) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.3.20021019) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.4.20040208) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.5.20051010) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.6.20061217) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.7.20081102) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.8.20110226) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-broken_linker --with-hashed-db --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20110404) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-broken_linker --with-hashed-db --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-termlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace --without-cxx-binding # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace --without-cxx-binding # Configure options (5.9.20150530) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-broken_linker --with-hashed-db --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace # Configure options (6.0.current) # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-getcap --enable-getcap-cache --enable-hard-tabs --enable-termcap --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-interop --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-broken_linker --with-hashed-db --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-sp-funcs --enable-widec --with-termlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-wgetch-events --enable-widec --with-hashed-db --with-termlib --with-ticlib --with-trace # --disable-getcap --disable-leaks --disable-root-environ --disable-termcap --enable-hard-tabs --enable-widec --with-broken_linker --with-termlib --with-ticlib --with-trace NCURSES_TIC_5.0.19991023 { global: _nc_capcmp; _nc_check_termtype; _nc_entry_match; _nc_infotocap; _nc_read_entry_source; _nc_reset_input; _nc_resolve_uses; _nc_set_writedir; _nc_syntax; _nc_tic_expand; _nc_tic_written; _nc_trans_string; _nc_write_entry; local: _nc_captoinfo; _nc_comment_end; _nc_comment_start; _nc_copy_entry; _nc_curr_file_pos; _nc_curr_token; _nc_get_token; _nc_init_entry; _nc_merge_entry; _nc_panic_mode; _nc_parse_entry; _nc_push_token; _nc_save_str; _nc_start_line; _nc_wrap_entry; }; NCURSES_TIC_5.1.20000708 { global: _nc_disable_period; } NCURSES_TIC_5.0.19991023; NCURSES_TIC_5.5.20051010 { global: _nc_alloc_entry_leaks; _nc_captoinfo_leaks; _nc_check_termtype2; _nc_comp_scan_leaks; _nc_resolve_uses2; } NCURSES_TIC_5.1.20000708; NCURSES_TIC_5.7.20081102 { global: _nc_free_tic; local: _nc_comp_captab_leaks; _nc_leaks_tic; } NCURSES_TIC_5.5.20051010; NCURSES_TIC_5.9.20150530 { global: _nc_strict_bsd; } NCURSES_TIC_5.7.20081102; NCURSES_TIC_6.0.current { global: _nc_write_object; local: _*; } NCURSES_TIC_5.9.20150530; NCURSES_TINFO_5.0.19991023 { global: BC; COLS; LINES; PC; SP; TABSIZE; UP; _nc_access; _nc_add_to_try; _nc_copy_termtype; _nc_curr_col; _nc_curr_line; _nc_doalloc; _nc_err_abort; _nc_fallback; _nc_find_entry; _nc_find_type_entry; _nc_first_name; _nc_free_entries; _nc_free_termtype; _nc_free_tparm; _nc_freeall; _nc_get_hash_table; _nc_get_table; _nc_get_tty_mode; _nc_get_type; _nc_getenv_num; _nc_head; _nc_home_terminfo; _nc_info_hash_table; _nc_init_acs; _nc_keep_tic_dir; _nc_keypad; _nc_name_match; _nc_outch; _nc_read_entry; _nc_read_file_entry; _nc_screen_chain; _nc_set_buffer; _nc_set_source; _nc_set_tty_mode; _nc_set_type; _nc_suppress_warnings; _nc_syserr_abort; _nc_tail; _nc_tic_dir; _nc_timed_wait; _nc_trace_buf; _nc_tracing; _nc_update_screensize; _nc_visbuf; _nc_visbuf2; _nc_warning; _tracechar; acs_map; baudrate; boolcodes; boolfnames; boolnames; cbreak; cur_term; curs_set; curscr; curses_version; def_prog_mode; def_shell_mode; define_key; del_curterm; delay_output; erasechar; flushinp; halfdelay; has_ic; has_il; has_key; idcok; idlok; intrflush; keybound; keyname; keyok; keypad; killchar; longname; meta; napms; newscr; nocbreak; nodelay; noqiflush; noraw; notimeout; numcodes; numfnames; numnames; ospeed; putp; qiflush; raw; reset_prog_mode; reset_shell_mode; resetty; savetty; set_curterm; setupterm; stdscr; strcodes; strfnames; strnames; termname; tgetent; tgetflag; tgetnum; tgetstr; tgoto; tigetflag; tigetnum; tigetstr; tparm; tputs; trace; ttytype; typeahead; unctrl; use_env; wtimeout; local: _nc_baudrate; _nc_cap_hash_table; _nc_capalias_table; _nc_expand_try; _nc_infoalias_table; _nc_init_keytry; _nc_key_names; _nc_nulls_sent; _nc_ospeed; _nc_read_termcap; _nc_read_termcap_entry; _nc_remove_key; _nc_remove_string; _nc_trace_tries; _nc_tracebits; }; NCURSES_TINFO_5.1.20000708 { global: _nc_align_termtype; _nc_flush; _nc_tinfo_fkeys; _nc_user_definable; _nc_utf8_outch; use_extended_names; } NCURSES_TINFO_5.0.19991023; NCURSES_TINFO_5.2.20001021 { global: _nc_basename; _nc_env_access; _nc_safe_strcat; _nc_safe_strcpy; _nc_str_copy; _nc_str_init; _nc_str_null; } NCURSES_TINFO_5.1.20000708; NCURSES_TINFO_5.3.20021019 { global: _nc_rootname; _nc_tparm_err; _nc_visbufn; } NCURSES_TINFO_5.2.20001021; NCURSES_TINFO_5.4.20040208 { global: _nc_altcharset_name; _nc_get_locale; _nc_locale_breaks_acs; _nc_outchars; _nc_pathlast; _nc_retrace_attr_t; _nc_retrace_bool; _nc_retrace_chtype; _nc_retrace_int; _nc_retrace_ptr; _nc_retrace_sp; _nc_retrace_unsigned; _nc_retrace_win; _nc_tparm_analyze; _nc_tputs_trace; _nc_trace_bufcat; _nc_unicode_locale; _nc_viswbuf; _nc_viswbufn; _traceattr; _traceattr2; _tracecchar_t; _tracecchar_t2; _tracechtype; _tracechtype2; _tracef; key_defined; local: _nc_trace_ttymode; _nc_viswbuf2; } NCURSES_TINFO_5.3.20021019; NCURSES_TINFO_5.5.20051010 { global: _nc_get_source; _nc_retrace_cptr; _nc_retrace_cvoid_ptr; _nc_retrace_void_ptr; _nc_setupterm; _nc_trim_sgr0; _nc_viswibuf; local: _nc_delink_entry; _nc_free_entry; } NCURSES_TINFO_5.4.20040208; NCURSES_TINFO_5.6.20061217 { global: _nc_db_close; _nc_db_first; _nc_db_have_data; _nc_db_next; _nc_db_open; _nc_db_put; _nc_eventlist_timeout; _nc_first_db; _nc_handle_sigwinch; _nc_is_abs_path; _nc_is_dir_path; _nc_is_file_path; _nc_keyname_leaks; _nc_last_db; _nc_next_db; _nc_read_termtype; _nc_tgetent_leaks; _nc_viscbuf; local: _nc_db_get; _nc_db_have_index; _nc_hashed_db; _nc_viscbuf2; } NCURSES_TINFO_5.5.20051010; NCURSES_TINFO_5.7.20081102 { global: _nc_free_tinfo; _nc_get_alias_table; _nc_get_screensize; _nc_globals; _nc_leaks_tinfo; _nc_prescreen; _nc_screen_of; _nc_set_no_padding; _nc_tracechar; set_tabsize; local: _nc_keyname; _nc_unctrl; } NCURSES_TINFO_5.6.20061217; NCURSES_TINFO_5.8.20110226 { global: _nc_flush_sp; _nc_get_tty_mode_sp; _nc_init_acs_sp; _nc_outc_wrapper; _nc_outch_sp; _nc_putp; _nc_putp_flush; _nc_putp_flush_sp; _nc_putp_sp; _nc_retrace_int_attr_t; _nc_set_buffer_sp; _nc_set_tty_mode_sp; baudrate_sp; cbreak_sp; curs_set_sp; def_prog_mode_sp; def_shell_mode_sp; define_key_sp; del_curterm_sp; delay_output_sp; erasechar_sp; flushinp_sp; halfdelay_sp; has_ic_sp; has_il_sp; has_key_sp; intrflush_sp; key_defined_sp; keybound_sp; keyname_sp; keyok_sp; killchar_sp; napms_sp; new_prescr; nocbreak_sp; noqiflush_sp; noraw_sp; putp_sp; qiflush_sp; raw_sp; reset_prog_mode_sp; reset_shell_mode_sp; resetty_sp; savetty_sp; set_curterm_sp; set_tabsize_sp; termname_sp; tgetent_sp; tgetflag_sp; tgetnum_sp; tgetstr_sp; tigetflag_sp; tigetnum_sp; tigetstr_sp; tiparm; tputs_sp; typeahead_sp; unctrl_sp; use_env_sp; local: _nc_get_hash_info; _nc_retrace_char; _nc_setup_tinfo; _nc_tinfo_cmdch; } NCURSES_TINFO_5.7.20081102; NCURSES_TINFO_5.9.20150530 { global: _nc_init_termtype; _nc_putchar; _nc_putchar_sp; use_tioctl; use_tioctl_sp; local: _*; _nc_comp_error_leaks; _nc_db_iterator_leaks; _nc_setenv_num; } NCURSES_TINFO_5.8.20110226; NCURSESW_5.1.20000708 { global: COLORS; COLOR_PAIR; COLOR_PAIRS; ESCDELAY; PAIR_NUMBER; TYPE_ALNUM; TYPE_ALPHA; TYPE_ENUM; TYPE_INTEGER; TYPE_IPV4; TYPE_NUMERIC; TYPE_REGEXP; _nc_Default_Field; # deprecated in ABI6 _nc_Default_Form; # deprecated in ABI6 _nc_free_and_exit; _nc_has_mouse; # deprecated in ABI6 _nc_panelhook; _nc_ripoffline; addch; addchnstr; addchstr; addnstr; addstr; assume_default_colors; attr_get; attr_off; attr_on; attr_set; attroff; attron; attrset; beep; bkgd; bkgdset; border; bottom_panel; box; can_change_color; chgat; clear; clearok; clrtobot; clrtoeol; color_content; color_set; copywin; current_field; current_item; data_ahead; data_behind; del_panel; delch; deleteln; delscreen; delwin; derwin; doupdate; dup_field; dupwin; dynamic_field_info; echo; echochar; endwin; erase; field_arg; field_back; field_buffer; field_count; field_fore; field_index; field_info; field_init; field_just; field_opts; field_opts_off; field_opts_on; field_pad; field_status; field_term; field_type; field_userptr; filter; flash; form_driver; form_fields; form_init; form_opts; form_opts_off; form_opts_on; form_page; form_request_by_name; form_request_name; form_sub; form_term; form_userptr; form_win; free_field; free_fieldtype; free_form; free_item; free_menu; getbkgd; getch; getmouse; getnstr; getstr; getwin; has_colors; hide_panel; hline; immedok; inch; inchnstr; inchstr; init_color; init_pair; initscr; innstr; insch; insdelln; insertln; insnstr; insstr; instr; is_linetouched; is_wintouched; isendwin; item_count; item_description; item_index; item_init; item_name; item_opts; item_opts_off; item_opts_on; item_term; item_userptr; item_value; item_visible; leaveok; link_field; link_fieldtype; mcprint; menu_back; menu_driver; menu_fore; menu_format; menu_grey; menu_init; menu_items; menu_mark; menu_opts; menu_opts_off; menu_opts_on; menu_pad; menu_pattern; menu_request_by_name; menu_request_name; menu_spacing; menu_sub; menu_term; menu_userptr; menu_win; mouse_trafo; mouseinterval; mousemask; move; move_field; move_panel; mvaddch; mvaddchnstr; mvaddchstr; mvaddnstr; mvaddstr; mvchgat; mvcur; mvdelch; mvderwin; mvgetch; mvgetnstr; mvgetstr; mvhline; mvinch; mvinchnstr; mvinchstr; mvinnstr; mvinsch; mvinsnstr; mvinsstr; mvinstr; mvprintw; mvscanw; mvvline; mvwaddch; mvwaddchnstr; mvwaddchstr; mvwaddnstr; mvwaddstr; mvwchgat; mvwdelch; mvwgetch; mvwgetnstr; mvwgetstr; mvwhline; mvwin; mvwinch; mvwinchnstr; mvwinchstr; mvwinnstr; mvwinsch; mvwinsnstr; mvwinsstr; mvwinstr; mvwprintw; mvwscanw; mvwvline; new_field; new_fieldtype; new_form; new_item; new_menu; new_page; new_panel; newpad; newterm; newwin; nl; noecho; nonl; overlay; overwrite; pair_content; panel_above; panel_below; panel_hidden; panel_userptr; panel_window; pechochar; pnoutrefresh; pos_form_cursor; pos_menu_cursor; post_form; post_menu; prefresh; printw; putwin; redrawwin; refresh; replace_panel; resizeterm; restartterm; ripoffline; scale_form; scale_menu; scanw; scr_dump; scr_init; scr_restore; scr_set; scrl; scroll; scrollok; set_current_field; set_current_item; set_field_back; set_field_buffer; set_field_fore; set_field_init; set_field_just; set_field_opts; set_field_pad; set_field_status; set_field_term; set_field_type; set_field_userptr; set_fieldtype_arg; set_fieldtype_choice; set_form_fields; set_form_init; set_form_opts; set_form_page; set_form_sub; set_form_term; set_form_userptr; set_form_win; set_item_init; set_item_opts; set_item_term; set_item_userptr; set_item_value; set_max_field; set_menu_back; set_menu_fore; set_menu_format; set_menu_grey; set_menu_init; set_menu_items; set_menu_mark; set_menu_opts; set_menu_pad; set_menu_pattern; set_menu_spacing; set_menu_sub; set_menu_term; set_menu_userptr; set_menu_win; set_new_page; set_panel_userptr; set_term; set_top_row; setscrreg; show_panel; slk_attr; slk_attr_off; slk_attr_on; slk_attr_set; slk_attroff; slk_attron; slk_attrset; slk_clear; slk_color; slk_init; slk_label; slk_noutrefresh; slk_refresh; slk_restore; slk_set; slk_touch; standend; standout; start_color; subpad; subwin; syncok; termattrs; timeout; top_panel; top_row; touchline; touchwin; ungetch; ungetmouse; unpost_form; unpost_menu; untouchwin; update_panels; use_default_colors; vid_attr; vidattr; vidputs; vline; vw_printw; vw_scanw; vwprintw; vwscanw; waddch; waddchnstr; waddchstr; waddnstr; waddstr; wattr_get; wattr_off; wattr_on; wattr_set; wattroff; wattron; wattrset; wbkgd; wbkgdset; wborder; wchgat; wclear; wclrtobot; wclrtoeol; wcolor_set; wcursyncup; wdelch; wdeleteln; wechochar; wenclose; werase; wgetch; wgetnstr; wgetstr; whline; winch; winchnstr; winchstr; winnstr; winsch; winsdelln; winsertln; winsnstr; winsstr; winstr; wmouse_trafo; wmove; wnoutrefresh; wprintw; wredrawln; wrefresh; wresize; wscanw; wscrl; wsetscrreg; wstandend; wstandout; wsyncdown; wsyncup; wtouchln; wvline; local: _nc_Calculate_Item_Length_and_Width; _nc_Connect_Items; _nc_Copy_Argument; _nc_Copy_Type; _nc_Default_FieldType; _nc_Default_Item; _nc_Default_Menu; _nc_Disconnect_Items; _nc_Draw_Menu; _nc_First_Active_Field; _nc_Free_Argument; _nc_Free_Type; _nc_Internal_Validation; _nc_Link_Items; _nc_Make_Argument; _nc_Match_Next_Character_In_Item_Name; _nc_New_TopRow_and_CurrentItem; _nc_Position_Form_Cursor; _nc_Post_Item; _nc_Refresh_Current_Field; _nc_Set_Current_Field; _nc_Set_Form_Page; _nc_Show_Menu; _nc_Synchronize_Attributes; _nc_Synchronize_Options; _nc_background; _nc_do_color; _nc_expanded; _nc_freewin; _nc_hash_map; _nc_make_oldhash; _nc_makenew; _nc_memmove; _nc_menu_cursor_pos; _nc_msec_cost; _nc_mvcur_init; _nc_mvcur_resume; _nc_mvcur_wrap; _nc_oldnums; _nc_outstr; _nc_printf_string; _nc_render; _nc_screen_init; _nc_screen_resume; _nc_screen_wrap; _nc_scroll_oldhash; _nc_scroll_optimize; _nc_scroll_window; _nc_scrolln; _nc_setupscreen; _nc_sigaction; _nc_signal_handler; _nc_slk_format; _nc_slk_initialize; _nc_synchook; _nc_vsscanf; _nc_waddch_nosync; }; NCURSESW_5.3.20021019 { global: _nc_wacs; _nc_wchstrlen; add_wch; add_wchnstr; add_wchstr; addnwstr; addwstr; bkgrnd; bkgrndset; border_set; box_set; echo_wchar; erasewchar; get_wch; get_wstr; getbkgrnd; getcchar; getn_wstr; hline_set; in_wch; in_wchnstr; in_wchstr; innwstr; ins_nwstr; ins_wch; ins_wstr; inwstr; is_term_resized; key_name; killwchar; mvadd_wch; mvadd_wchnstr; mvadd_wchstr; mvaddnwstr; mvaddwstr; mvget_wch; mvget_wstr; mvgetn_wstr; mvhline_set; mvin_wch; mvin_wchnstr; mvin_wchstr; mvinnwstr; mvins_nwstr; mvins_wch; mvins_wstr; mvinwstr; mvvline_set; mvwadd_wch; mvwadd_wchnstr; mvwadd_wchstr; mvwaddnwstr; mvwaddwstr; mvwget_wch; mvwget_wstr; mvwgetn_wstr; mvwhline_set; mvwin_wch; mvwin_wchnstr; mvwin_wchstr; mvwinnwstr; mvwins_nwstr; mvwins_wch; mvwins_wstr; mvwinwstr; mvwvline_set; resize_term; setcchar; term_attrs; unget_wch; vid_puts; vline_set; wadd_wch; wadd_wchnstr; wadd_wchstr; waddnwstr; waddwstr; wbkgrnd; wbkgrndset; wborder_set; wecho_wchar; wget_wch; wget_wstr; wgetn_wstr; whline_set; win_wch; win_wchnstr; win_wchstr; winnwstr; wins_nwstr; wins_wch; wins_wstr; winwstr; wunctrl; wvline_set; local: _nc_init_wacs; _nc_reset_colors; _nc_varargs; _nc_wgetch; } NCURSESW_5.1.20000708; NCURSESW_5.4.20040208 { global: _nc_optimize_enable; pecho_wchar; slk_wset; local: _nc_Touchline; _nc_Touchpan; _nc_Wnoutrefresh; _nc_dPanel; _nc_dStack; _nc_fifo_dump; _nc_insert_ch; _nc_is_charable; _nc_linedump; _nc_my_visbuf; _nc_to_char; _nc_to_widechar; _nc_trace_xnames; _tracedump; _tracemouse; } NCURSESW_5.3.20021019; NCURSESW_5.5.20051010 { global: _nc_wcrtomb; local: _nc_Calculate_Text_Width; _nc_Widen_String; _nc_build_wch; _nc_retrace_field; _nc_retrace_field_ptr; _nc_retrace_field_type; _nc_retrace_form; _nc_retrace_form_hook; _nc_retrace_item; _nc_retrace_item_opts; _nc_retrace_item_ptr; _nc_retrace_menu; _nc_retrace_menu_hook; _nc_retrace_menu_opts; _nc_retrace_panel; } NCURSESW_5.4.20040208; NCURSESW_5.6.20061217 { global: getbegx; getbegy; getcurx; getcury; getmaxx; getmaxy; getparx; getpary; nofilter; use_legacy_coding; wgetbkgrnd; wgetch_events; wgetnstr_events; } NCURSESW_5.5.20051010; NCURSESW_5.7.20081102 { global: getattrs; is_cleared; is_idcok; is_idlok; is_immedok; is_keypad; is_leaveok; is_nodelay; is_notimeout; is_scrollok; is_syncok; set_escdelay; use_screen; use_window; wgetparent; wgetscrreg; local: _nc_tracemouse; _nc_ungetch; } NCURSESW_5.6.20061217; NCURSESW_5.8.20110226 { global: _nc_panelhook_sp; assume_default_colors_sp; beep_sp; can_change_color_sp; ceiling_panel; color_content_sp; doupdate_sp; echo_sp; endwin_sp; filter_sp; flash_sp; get_escdelay; get_escdelay_sp; getmouse_sp; getwin_sp; ground_panel; has_colors_sp; has_mouse; has_mouse_sp; init_color_sp; init_pair_sp; is_pad; is_subwin; is_term_resized_sp; isendwin_sp; mcprint_sp; mouseinterval_sp; mousemask_sp; mvcur_sp; new_form_sp; new_menu_sp; newpad_sp; newterm_sp; newwin_sp; nl_sp; noecho_sp; nofilter_sp; nonl_sp; pair_content_sp; resize_term_sp; resizeterm_sp; restartterm_sp; ripoffline_sp; scr_init_sp; scr_restore_sp; scr_set_sp; set_escdelay_sp; slk_attr_set_sp; slk_attr_sp; slk_attroff_sp; slk_attron_sp; slk_attrset_sp; slk_clear_sp; slk_color_sp; slk_init_sp; slk_label_sp; slk_noutrefresh_sp; slk_refresh_sp; slk_restore_sp; slk_set_sp; slk_touch_sp; start_color_sp; term_attrs_sp; termattrs_sp; unget_wch_sp; ungetch_sp; ungetmouse_sp; update_panels_sp; use_default_colors_sp; use_legacy_coding_sp; vid_attr_sp; vid_puts_sp; vidattr_sp; vidputs_sp; wunctrl_sp; local: _nc_TYPE_ALNUM; _nc_TYPE_ALPHA; _nc_TYPE_ENUM; _nc_TYPE_INTEGER; _nc_TYPE_IPV4; _nc_TYPE_NUMERIC; _nc_TYPE_REGEXP; _nc_curscr_of; _nc_do_color_sp; _nc_form_cursor; _nc_format_slks; _nc_free_and_exit_sp; _nc_freeall_sp; _nc_fty_generic; _nc_generic_fieldtype; _nc_get_fieldbuffer; _nc_hash_map_sp; _nc_insert_wch; _nc_linedump_sp; _nc_make_oldhash_sp; _nc_makenew_sp; _nc_msec_cost_sp; _nc_mvcur_init_sp; _nc_mvcur_resume_sp; _nc_mvcur_wrap_sp; _nc_newscr_of; _nc_printf_string_sp; _nc_reset_colors_sp; _nc_retrace_mmask_t; _nc_ripoffline_sp; _nc_screen_init_sp; _nc_screen_resume_sp; _nc_screen_wrap_sp; _nc_scroll_oldhash_sp; _nc_scroll_optimize_sp; _nc_scrolln_sp; _nc_set_generic_fieldtype; _nc_setupscreen_sp; _nc_stdscr_of; } NCURSESW_5.7.20081102; NCURSESW_5.9.20150530 { global: form_driver_w; wgetdelay; local: _*; _nc_mvcur; _nc_mvcur_sp; _nc_trace_mmask_t; } NCURSESW_5.8.20110226; ncurses-6.0-20160213/include/0000755000175100001440000000000012657655731014120 5ustar tomusersncurses-6.0-20160213/include/headers0000644000175100001440000000503212230622225015431 0ustar tomusers# $Id: headers,v 1.13 2013/10/20 00:32:21 tom Exp $ ############################################################################## # Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # curses.h unctrl.h ncurses_dll.h # Support for termcap (and tic, etc.), which can be a separate library @ termlib term.h termcap.h # Headers used only for tic, other programs using internal interfaces @ ticlib $(srcdir)/tic.h $(srcdir)/term_entry.h $(srcdir)/nc_tparm.h # Porting @ port_win32con $(srcdir)/ncurses_mingw.h $(srcdir)/nc_mingw.h # vile:makemode ncurses-6.0-20160213/include/curses.tail0000644000175100001440000001761412657655731016310 0ustar tomusers/* $Id: curses.tail,v 1.23 2016/02/13 16:37:45 tom Exp $ */ /* * vile:cmode: * This file is part of ncurses, designed to be appended after curses.h.in * (see that file for the relevant copyright). */ /* mouse interface */ #if NCURSES_MOUSE_VERSION > 1 #define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 5)) #else #define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 6)) #endif #define NCURSES_BUTTON_RELEASED 001L #define NCURSES_BUTTON_PRESSED 002L #define NCURSES_BUTTON_CLICKED 004L #define NCURSES_DOUBLE_CLICKED 010L #define NCURSES_TRIPLE_CLICKED 020L #define NCURSES_RESERVED_EVENT 040L /* event masks */ #define BUTTON1_RELEASED NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED) #define BUTTON1_PRESSED NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED) #define BUTTON1_CLICKED NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED) #define BUTTON1_DOUBLE_CLICKED NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED) #define BUTTON1_TRIPLE_CLICKED NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED) #define BUTTON2_RELEASED NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED) #define BUTTON2_PRESSED NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED) #define BUTTON2_CLICKED NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED) #define BUTTON2_DOUBLE_CLICKED NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED) #define BUTTON2_TRIPLE_CLICKED NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED) #define BUTTON3_RELEASED NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED) #define BUTTON3_PRESSED NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED) #define BUTTON3_CLICKED NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED) #define BUTTON3_DOUBLE_CLICKED NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED) #define BUTTON3_TRIPLE_CLICKED NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED) #define BUTTON4_RELEASED NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED) #define BUTTON4_PRESSED NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED) #define BUTTON4_CLICKED NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED) #define BUTTON4_DOUBLE_CLICKED NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED) #define BUTTON4_TRIPLE_CLICKED NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED) /* * In 32 bits the version-1 scheme does not provide enough space for a 5th * button, unless we choose to change the ABI by omitting the reserved-events. */ #if NCURSES_MOUSE_VERSION > 1 #define BUTTON5_RELEASED NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED) #define BUTTON5_PRESSED NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED) #define BUTTON5_CLICKED NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED) #define BUTTON5_DOUBLE_CLICKED NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED) #define BUTTON5_TRIPLE_CLICKED NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED) #define BUTTON_CTRL NCURSES_MOUSE_MASK(6, 0001L) #define BUTTON_SHIFT NCURSES_MOUSE_MASK(6, 0002L) #define BUTTON_ALT NCURSES_MOUSE_MASK(6, 0004L) #define REPORT_MOUSE_POSITION NCURSES_MOUSE_MASK(6, 0010L) #else #define BUTTON1_RESERVED_EVENT NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT) #define BUTTON2_RESERVED_EVENT NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT) #define BUTTON3_RESERVED_EVENT NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT) #define BUTTON4_RESERVED_EVENT NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT) #define BUTTON_CTRL NCURSES_MOUSE_MASK(5, 0001L) #define BUTTON_SHIFT NCURSES_MOUSE_MASK(5, 0002L) #define BUTTON_ALT NCURSES_MOUSE_MASK(5, 0004L) #define REPORT_MOUSE_POSITION NCURSES_MOUSE_MASK(5, 0010L) #endif #define ALL_MOUSE_EVENTS (REPORT_MOUSE_POSITION - 1) /* macros to extract single event-bits from masks */ #define BUTTON_RELEASE(e, x) ((e) & NCURSES_MOUSE_MASK(x, 001)) #define BUTTON_PRESS(e, x) ((e) & NCURSES_MOUSE_MASK(x, 002)) #define BUTTON_CLICK(e, x) ((e) & NCURSES_MOUSE_MASK(x, 004)) #define BUTTON_DOUBLE_CLICK(e, x) ((e) & NCURSES_MOUSE_MASK(x, 010)) #define BUTTON_TRIPLE_CLICK(e, x) ((e) & NCURSES_MOUSE_MASK(x, 020)) #define BUTTON_RESERVED_EVENT(e, x) ((e) & NCURSES_MOUSE_MASK(x, 040)) typedef struct { short id; /* ID to distinguish multiple devices */ int x, y, z; /* event coordinates (character-cell) */ mmask_t bstate; /* button state bits */ } MEVENT; extern NCURSES_EXPORT(bool) has_mouse(void); extern NCURSES_EXPORT(int) getmouse (MEVENT *); extern NCURSES_EXPORT(int) ungetmouse (MEVENT *); extern NCURSES_EXPORT(mmask_t) mousemask (mmask_t, mmask_t *); extern NCURSES_EXPORT(bool) wenclose (const WINDOW *, int, int); extern NCURSES_EXPORT(int) mouseinterval (int); extern NCURSES_EXPORT(bool) wmouse_trafo (const WINDOW*, int*, int*, bool); extern NCURSES_EXPORT(bool) mouse_trafo (int*, int*, bool); /* generated */ #if NCURSES_SP_FUNCS extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_mouse) (SCREEN*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(getmouse) (SCREEN*, MEVENT *); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetmouse) (SCREEN*,MEVENT *); extern NCURSES_EXPORT(mmask_t) NCURSES_SP_NAME(mousemask) (SCREEN*, mmask_t, mmask_t *); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mouseinterval) (SCREEN*, int); #endif #ifndef NCURSES_NOMACROS #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen) #endif /* other non-XSI functions */ extern NCURSES_EXPORT(int) mcprint (char *, int); /* direct data to printer */ extern NCURSES_EXPORT(int) has_key (int); /* do we have given key? */ #if NCURSES_SP_FUNCS extern NCURSES_EXPORT(int) NCURSES_SP_NAME(has_key) (SCREEN*, int); /* do we have given key? */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mcprint) (SCREEN*, char *, int); /* direct data to printer */ #endif /* Debugging : use with libncurses_g.a */ extern NCURSES_EXPORT(void) _tracef (const char *, ...) GCC_PRINTFLIKE(1,2); extern NCURSES_EXPORT(char *) _traceattr (attr_t); extern NCURSES_EXPORT(char *) _traceattr2 (int, chtype); extern NCURSES_EXPORT(char *) _tracechar (int); extern NCURSES_EXPORT(char *) _tracechtype (chtype); extern NCURSES_EXPORT(char *) _tracechtype2 (int, chtype); #if NCURSES_WIDECHAR #define _tracech_t _tracecchar_t extern NCURSES_EXPORT(char *) _tracecchar_t (const cchar_t *); #define _tracech_t2 _tracecchar_t2 extern NCURSES_EXPORT(char *) _tracecchar_t2 (int, const cchar_t *); #else #define _tracech_t _tracechtype #define _tracech_t2 _tracechtype2 #endif extern NCURSES_EXPORT(void) trace (const unsigned int); /* trace masks */ #define TRACE_DISABLE 0x0000 /* turn off tracing */ #define TRACE_TIMES 0x0001 /* trace user and system times of updates */ #define TRACE_TPUTS 0x0002 /* trace tputs calls */ #define TRACE_UPDATE 0x0004 /* trace update actions, old & new screens */ #define TRACE_MOVE 0x0008 /* trace cursor moves and scrolls */ #define TRACE_CHARPUT 0x0010 /* trace all character outputs */ #define TRACE_ORDINARY 0x001F /* trace all update actions */ #define TRACE_CALLS 0x0020 /* trace all curses calls */ #define TRACE_VIRTPUT 0x0040 /* trace virtual character puts */ #define TRACE_IEVENT 0x0080 /* trace low-level input processing */ #define TRACE_BITS 0x0100 /* trace state of TTY control bits */ #define TRACE_ICALLS 0x0200 /* trace internal/nested calls */ #define TRACE_CCALLS 0x0400 /* trace per-character calls */ #define TRACE_DATABASE 0x0800 /* trace read/write of terminfo/termcap data */ #define TRACE_ATTRS 0x1000 /* trace attribute updates */ #define TRACE_SHIFT 13 /* number of bits in the trace masks */ #define TRACE_MAXIMUM ((1 << TRACE_SHIFT) - 1) /* maximum trace level */ #if defined(TRACE) || defined(NCURSES_TEST) extern NCURSES_EXPORT_VAR(int) _nc_optimize_enable; /* enable optimizations */ extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *); #define OPTIMIZE_MVCUR 0x01 /* cursor movement optimization */ #define OPTIMIZE_HASHMAP 0x02 /* diff hashing to detect scrolls */ #define OPTIMIZE_SCROLL 0x04 /* scroll optimization */ #define OPTIMIZE_ALL 0xff /* enable all optimizations (dflt) */ #endif #include #ifdef __cplusplus #ifndef NCURSES_NOMACROS /* these names conflict with STL */ #undef box #undef clear #undef erase #undef move #undef refresh #endif /* NCURSES_NOMACROS */ } #endif #endif /* __NCURSES_H */ ncurses-6.0-20160213/include/nc_panel.h0000644000175100001440000000632511223716522016036 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer 1997 * * and: Thomas E. Dickey * ****************************************************************************/ /* * $Id: nc_panel.h,v 1.7 2009/07/04 18:20:02 tom Exp $ * * nc_panel.h * * Headerfile to provide an interface for the panel layer into * the SCREEN structure of the ncurses core. */ #ifndef NC_PANEL_H #define NC_PANEL_H 1 #ifdef __cplusplus extern "C" { #endif struct panel; /* Forward Declaration */ struct panelhook { struct panel *top_panel; struct panel *bottom_panel; struct panel *stdscr_pseudo_panel; #if NO_LEAKS int (*destroy) (struct panel *); #endif }; struct screen; /* Forward declaration */ /* Retrieve the panelhook of the specified screen */ extern NCURSES_EXPORT(struct panelhook *) _nc_panelhook (void); #if NCURSES_SP_FUNCS extern NCURSES_EXPORT(struct panelhook *) NCURSES_SP_NAME(_nc_panelhook) (SCREEN *); #endif #ifdef __cplusplus } #endif #endif /* NC_PANEL_H */ ncurses-6.0-20160213/include/ncurses_defs0000644000175100001440000001224412505232503016505 0ustar tomusers# $Id: ncurses_defs,v 1.69 2015/03/27 10:47:31 tom Exp $ ############################################################################## # Copyright (c) 2000-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # See "MKncurses_def.sh" for an explanation. # # (hint: don't try to define NDEBUG ;-) BROKEN_LINKER BSD_TPUTS CGETENT_CONST /* nothing */ CPP_HAS_PARAM_INIT CURSES_ACS_ARRAY acs_map CURSES_WACS_ARRAY _nc_wacs DECL_ERRNO ETIP_NEEDS_MATH_H GCC_NORETURN /* nothing */ GCC_UNUSED /* nothing */ HAVE_ASSUME_DEFAULT_COLORS HAVE_BIG_CORE HAVE_BSD_CGETENT HAVE_BSD_SIGNAL_H HAVE_BTOWC HAVE_BUILTIN_H HAVE_CHGAT 1 HAVE_COLOR_SET 1 HAVE_DIRENT_H HAVE_ERRNO HAVE_FCNTL_H HAVE_FILTER 1 HAVE_FORM_H HAVE_GETBEGX 1 HAVE_GETCURX 1 HAVE_GETCWD HAVE_GETEGID HAVE_GETEUID HAVE_GETMAXX 1 HAVE_GETNSTR HAVE_GETOPT_H HAVE_GETPARX 1 HAVE_GETTIMEOFDAY HAVE_GETTTYNAM HAVE_GETWIN 1 HAVE_GPM_H HAVE_GPP_BUILTIN_H HAVE_GXX_BUILTIN_H HAVE_HAS_KEY HAVE_INTTYPES_H HAVE_IOSTREAM HAVE_ISASCII HAVE_ISSETUGID HAVE_LANGINFO_CODESET HAVE_LIBC_H HAVE_LIBDBMALLOC HAVE_LIBDMALLOC HAVE_LIBFORM HAVE_LIBGPM HAVE_LIBMENU HAVE_LIBMPATROL HAVE_LIBPANEL HAVE_LIMITS_H HAVE_LINK HAVE_LOCALE_H HAVE_LONG_FILE_NAMES HAVE_MATH_H HAVE_MBLEN HAVE_MBRLEN HAVE_MBRTOWC HAVE_MBSRTOWCS HAVE_MBSTOWCS HAVE_MBTOWC HAVE_MENU_H HAVE_MKSTEMP HAVE_MVVLINE 1 HAVE_MVWVLINE 1 HAVE_NANOSLEEP HAVE_NC_ALLOC_H HAVE_PANEL_H HAVE_POLL HAVE_POLL_H HAVE_PURIFY HAVE_PUTENV HAVE_PUTWC HAVE_PUTWIN 1 HAVE_REGEXPR_H_FUNCS HAVE_REGEXP_H_FUNCS HAVE_REGEX_H_FUNCS HAVE_REMOVE HAVE_RESIZETERM HAVE_RESIZE_TERM HAVE_RIPOFFLINE 1 HAVE_SCR_DUMP 1 HAVE_SELECT HAVE_SETBUF HAVE_SETBUFFER HAVE_SETENV HAVE_SETUPTERM 1 HAVE_SETVBUF HAVE_SGTTY_H HAVE_SIGACTION HAVE_SIGVEC HAVE_SIZECHANGE HAVE_SLK_COLOR HAVE_SLK_INIT 1 HAVE_SNPRINTF HAVE_STDINT_H HAVE_STRDUP HAVE_STRLCAT HAVE_STRLCPY HAVE_STRSTR HAVE_SYMLINK HAVE_SYS_BSDTYPES_H HAVE_SYS_IOCTL_H HAVE_SYS_PARAM_H HAVE_SYS_POLL_H HAVE_SYS_SELECT_H HAVE_SYS_TERMIO_H HAVE_SYS_TIMES_H HAVE_SYS_TIME_H HAVE_SYS_TIME_SELECT HAVE_TCGETATTR HAVE_TCGETPGRP HAVE_TELL HAVE_TERMATTRS 1 HAVE_TERMIOS_H HAVE_TERMIO_H HAVE_TERMNAME 1 HAVE_TERM_ENTRY_H 1 HAVE_TERM_H 1 HAVE_TGETENT 1 HAVE_TIGETNUM 1 HAVE_TIGETSTR 1 HAVE_TIMES HAVE_TTYENT_H HAVE_TYPEAHEAD 1 HAVE_TYPEINFO HAVE_TYPE_ATTR_T HAVE_TYPE_SIGACTION HAVE_UNCTRL_H 1 HAVE_UNISTD_H HAVE_UNLINK HAVE_USE_DEFAULT_COLORS HAVE_USE_ENV 1 HAVE_USE_EXTENDED_NAMES HAVE_USE_SCREEN HAVE_USE_WINDOW HAVE_VFSCANF HAVE_VIDPUTS 1 HAVE_VID_PUTS 1 HAVE_VSNPRINTF HAVE_VSSCANF HAVE_WCSRTOMBS HAVE_WCSTOMBS HAVE_WCTOB HAVE_WCTOMB HAVE_WCTYPE_H HAVE_WINSSTR 1 HAVE_WORKING_POLL HAVE_WRESIZE HAVE_WSYNCDOWN 1 HAVE__DOSCAN MIXEDCASE_FILENAMES NCURSES_CHAR_EQ NCURSES_EXPANDED NCURSES_EXT_COLORS NCURSES_EXT_FUNCS NCURSES_EXT_PUTWIN NCURSES_NO_PADDING NCURSES_OSPEED_COMPAT NCURSES_PATHSEP ':' NCURSES_WIDECHAR NEED_PTEM_H NO_LEAKS PURE_TERMINFO STDC_HEADERS SVR4_ACTION SVR4_TERMIO SYSTEM_NAME "unknown" TERMINFO "none" TERMPATH "none" TIME_WITH_SYS_TIME TYPEOF_CHTYPE USE_COLORFGBG USE_GETCAP USE_GETCAP_CACHE USE_HARD_TABS USE_HASHED_DB USE_HASHMAP USE_HOME_TERMINFO USE_LINKS USE_MY_MEMMOVE USE_OK_BCOPY USE_PTHREADS_EINTR USE_RCS_IDS USE_REENTRANT USE_SAFE_SPRINTF USE_SCROLL_HINTS USE_SIGWINCH USE_STRING_HACKS USE_SYMLINKS USE_SYSMOUSE USE_WEAK_SYMBOLS USE_WIDEC_SUPPORT USE_XMC_SUPPORT ncurses-6.0-20160213/include/term_entry.h0000644000175100001440000002006212570450460016443 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1998-on * ****************************************************************************/ /* $Id: term_entry.h,v 1.47 2015/08/30 00:41:20 tom Exp $ */ /* * term_entry.h -- interface to entry-manipulation code */ #ifndef NCURSES_TERM_ENTRY_H_incl #define NCURSES_TERM_ENTRY_H_incl 1 #ifdef __cplusplus extern "C" { #endif #include /* * see db_iterator.c - this enumeration lists the places searched for a * terminal description and defines the order in which they are searched. */ typedef enum { dbdTIC = 0, /* special, used by tic when writing entry */ #if NCURSES_USE_DATABASE dbdEnvOnce, /* the $TERMINFO environment variable */ dbdHome, /* $HOME/.terminfo */ dbdEnvList, /* the $TERMINFO_DIRS environment variable */ dbdCfgList, /* the compiled-in TERMINFO_DIRS value */ dbdCfgOnce, /* the compiled-in TERMINFO value */ #endif #if NCURSES_USE_TERMCAP dbdEnvOnce2, /* the $TERMCAP environment variable */ dbdEnvList2, /* the $TERMPATH environment variable */ dbdCfgList2, /* the compiled-in TERMPATH */ #endif dbdLAST } DBDIRS; #define MAX_USES 32 #define MAX_CROSSLINKS 16 typedef struct entry { TERMTYPE tterm; unsigned nuses; struct { char *name; struct entry *link; long line; } uses[MAX_USES]; int ncrosslinks; struct entry *crosslinks[MAX_CROSSLINKS]; long cstart, cend; long startline; struct entry *next; struct entry *last; } ENTRY; /* *INDENT-OFF* */ #if NCURSES_XNAMES #define NUM_BOOLEANS(tp) (tp)->num_Booleans #define NUM_NUMBERS(tp) (tp)->num_Numbers #define NUM_STRINGS(tp) (tp)->num_Strings #define EXT_NAMES(tp,i,limit,index,table) (i >= limit) ? tp->ext_Names[index] : table[i] #else #define NUM_BOOLEANS(tp) BOOLCOUNT #define NUM_NUMBERS(tp) NUMCOUNT #define NUM_STRINGS(tp) STRCOUNT #define EXT_NAMES(tp,i,limit,index,table) table[i] #endif #define NUM_EXT_NAMES(tp) (unsigned) ((tp)->ext_Booleans + (tp)->ext_Numbers + (tp)->ext_Strings) #define for_each_boolean(n,tp) for(n = 0; n < NUM_BOOLEANS(tp); n++) #define for_each_number(n,tp) for(n = 0; n < NUM_NUMBERS(tp); n++) #define for_each_string(n,tp) for(n = 0; n < NUM_STRINGS(tp); n++) #if NCURSES_XNAMES #define for_each_ext_boolean(n,tp) for(n = BOOLCOUNT; (int) n < (int) NUM_BOOLEANS(tp); n++) #define for_each_ext_number(n,tp) for(n = NUMCOUNT; (int) n < (int) NUM_NUMBERS(tp); n++) #define for_each_ext_string(n,tp) for(n = STRCOUNT; (int) n < (int) NUM_STRINGS(tp); n++) #endif #define ExtBoolname(tp,i,names) EXT_NAMES(tp, i, BOOLCOUNT, (i - (tp->num_Booleans - tp->ext_Booleans)), names) #define ExtNumname(tp,i,names) EXT_NAMES(tp, i, NUMCOUNT, (i - (tp->num_Numbers - tp->ext_Numbers)) + tp->ext_Booleans, names) #define ExtStrname(tp,i,names) EXT_NAMES(tp, i, STRCOUNT, (i - (tp->num_Strings - tp->ext_Strings)) + (tp->ext_Numbers + tp->ext_Booleans), names) extern NCURSES_EXPORT_VAR(ENTRY *) _nc_head; extern NCURSES_EXPORT_VAR(ENTRY *) _nc_tail; #define for_entry_list(qp) for (qp = _nc_head; qp; qp = qp->next) #define MAX_LINE 132 #define NULLHOOK (bool(*)(ENTRY *))0 /* * Note that WANTED and PRESENT are not simple inverses! If a capability * has been explicitly cancelled, it's not considered WANTED. */ #define WANTED(s) ((s) == ABSENT_STRING) #define PRESENT(s) (((s) != ABSENT_STRING) && ((s) != CANCELLED_STRING)) #define ANDMISSING(p,q) \ {if (PRESENT(p) && !PRESENT(q)) _nc_warning(#p " but no " #q);} #define PAIRED(p,q) \ { \ if (PRESENT(q) && !PRESENT(p)) \ _nc_warning(#q " but no " #p); \ if (PRESENT(p) && !PRESENT(q)) \ _nc_warning(#p " but no " #q); \ } /* alloc_entry.c: elementary allocation code */ extern NCURSES_EXPORT(ENTRY *) _nc_copy_entry (ENTRY *oldp); extern NCURSES_EXPORT(char *) _nc_save_str (const char *const); extern NCURSES_EXPORT(void) _nc_init_entry (TERMTYPE *const); extern NCURSES_EXPORT(void) _nc_merge_entry (TERMTYPE *const, TERMTYPE *const); extern NCURSES_EXPORT(void) _nc_wrap_entry (ENTRY *const, bool); /* alloc_ttype.c: elementary allocation code */ extern NCURSES_EXPORT(void) _nc_align_termtype (TERMTYPE *, TERMTYPE *); extern NCURSES_EXPORT(void) _nc_copy_termtype (TERMTYPE *, const TERMTYPE *); /* free_ttype.c: elementary allocation code */ extern NCURSES_EXPORT(void) _nc_free_termtype (TERMTYPE *); /* lib_acs.c */ extern NCURSES_EXPORT(void) _nc_init_acs (void); /* corresponds to traditional 'init_acs()' */ /* lib_termcap.c: trim sgr0 string for termcap users */ extern NCURSES_EXPORT(char *) _nc_trim_sgr0 (TERMTYPE *); /* parse_entry.c: entry-parsing code */ #if NCURSES_XNAMES extern NCURSES_EXPORT_VAR(bool) _nc_user_definable; extern NCURSES_EXPORT_VAR(bool) _nc_disable_period; #endif extern NCURSES_EXPORT(int) _nc_parse_entry (ENTRY *, int, bool); extern NCURSES_EXPORT(int) _nc_capcmp (const char *, const char *); /* write_entry.c: writing an entry to the file system */ extern NCURSES_EXPORT(void) _nc_set_writedir (const char *); extern NCURSES_EXPORT(void) _nc_write_entry (TERMTYPE *const); extern NCURSES_EXPORT(int) _nc_write_object(TERMTYPE *, char *, unsigned *, unsigned); /* comp_parse.c: entry list handling */ extern NCURSES_EXPORT(void) _nc_read_entry_source (FILE*, char*, int, bool, bool (*)(ENTRY*)); extern NCURSES_EXPORT(bool) _nc_entry_match (char *, char *); extern NCURSES_EXPORT(int) _nc_resolve_uses (bool); /* obs 20040705 */ extern NCURSES_EXPORT(int) _nc_resolve_uses2 (bool, bool); extern NCURSES_EXPORT(void) _nc_free_entries (ENTRY *); extern NCURSES_IMPEXP void NCURSES_API (*_nc_check_termtype)(TERMTYPE *); /* obs 20040705 */ extern NCURSES_IMPEXP void NCURSES_API (*_nc_check_termtype2)(TERMTYPE *, bool); /* trace_xnames.c */ extern NCURSES_EXPORT(void) _nc_trace_xnames (TERMTYPE *); /* *INDENT-ON* */ #ifdef __cplusplus } #endif #endif /* NCURSES_TERM_ENTRY_H_incl */ ncurses-6.0-20160213/include/unctrl.h.in0000644000175100001440000000611011172437604016167 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* * unctrl.h * * Display a printable version of a control character. * Control characters are displayed in caret notation (^x), DELETE is displayed * as ^?. Printable characters are displayed as is. */ /* $Id: unctrl.h.in,v 1.11 2009/04/18 21:00:52 tom Exp $ */ #ifndef NCURSES_UNCTRL_H_incl #define NCURSES_UNCTRL_H_incl 1 #undef NCURSES_VERSION #define NCURSES_VERSION "@NCURSES_MAJOR@.@NCURSES_MINOR@" #ifdef __cplusplus extern "C" { #endif #include #undef unctrl NCURSES_EXPORT(NCURSES_CONST char *) unctrl (chtype); #if @NCURSES_SP_FUNCS@ NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(unctrl) (SCREEN*, chtype); #endif #ifdef __cplusplus } #endif #endif /* NCURSES_UNCTRL_H_incl */ ncurses-6.0-20160213/include/nc_string.h0000644000175100001440000000706112253200477016244 0ustar tomusers/**************************************************************************** * Copyright (c) 2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2012 * ****************************************************************************/ #ifndef STRING_HACKS_H #define STRING_HACKS_H 1 #include /* * $Id: nc_string.h,v 1.4 2013/12/15 01:09:19 tom Exp $ * * String-hacks. Use these macros to stifle warnings on (presumably) correct * uses of strcat, strcpy and sprintf. * * By the way - * A fundamental limitation of the interfaces (and frequent issue in bug * reports using these functions) is that sizes are passed as unsigned values * (with associated sign-extension problems), limiting their effectiveness * when checking for buffer overflow. */ #ifdef __cplusplus #define NCURSES_VOID /* nothing */ #else #define NCURSES_VOID (void) #endif #if USE_STRING_HACKS && HAVE_STRLCAT #define _nc_STRCAT(d,s,n) NCURSES_VOID strlcat((d),(s),NCURSES_CAST(size_t,n)) #else #define _nc_STRCAT(d,s,n) NCURSES_VOID strcat((d),(s)) #endif #if USE_STRING_HACKS && HAVE_STRLCPY #define _nc_STRCPY(d,s,n) NCURSES_VOID strlcpy((d),(s),NCURSES_CAST(size_t,n)) #else #define _nc_STRCPY(d,s,n) NCURSES_VOID strcpy((d),(s)) #endif #if USE_STRING_HACKS && HAVE_SNPRINTF #define _nc_SPRINTF NCURSES_VOID snprintf #define _nc_SLIMIT(n) NCURSES_CAST(size_t,n), #else #define _nc_SPRINTF NCURSES_VOID sprintf #define _nc_SLIMIT(n) /* nothing */ #endif #endif /* STRING_HACKS_H */ ncurses-6.0-20160213/include/Caps.osf1r50000644000175100001440000020456312517201603016035 0ustar tomusers############################################################################## # Copyright (c) 2002-2011,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas Dickey # # $Id: Caps.osf1r5,v 1.7 2015/04/26 15:25:55 tom Exp $ # # This is an adaptation of ncurses' termcap/terminfo capability table, which # is designed to align with OSF/1 version 5 (Tru64) terminfo. # # This table is used to generate initializers for tables that drive tic, # infocmp, and the library compilation code used to support the termcap # compatibility hack. It is also used to generate the tabular portion of the # terminfo(5) man page; lines beginning with `#%' are passed through to become # the terminfo table. # # This file has three major sections; a standard-capabilities table, two # extension-capability tables, and a section of aliases declarations. # The first two have the same format, as follows: # # FILE FORMAT # # Column 1: terminfo variable name # Column 2: terminfo capability name # Column 3: capability type (boolean, numeric, or string) # Column 4: termcap capability name # Column 5: KEY_xxx name, if any, `-' otherwise # Column 6: value for KEY_xxx name, if any, `-' otherwise # Column 7: Lead with `Y' if capability should be emitted in termcap # translations, `-' otherwise # Column 8: capability description # # The codes following [Y-] in column 7 describe the versions of termcap which # use the given capability. This information is not used by the curses library # proper; rather, it's there to help the terminfo maintainer avoid emitting # termcap entry translations that are more than 1023 bytes long (and tank a # lot of old termcap-using programs). The codes read as follows: # B = mentioned in the BSD man page for 4.4BSD curses # C = used by the 4.4BSD curses library # G = mentioned in the documentation for GNU termcap # E = used by GNU Emacs # K = remove this terminfo capability when translating to standard format # The important codes are C and E. A cap with C or E should be preserved in # translation if possible. The problem is that preserving all such caps may # lead to some termcap translations being too long. The termcap maintainer # has a bit of a juggling act to do...potential problem cases are marked with # an asterisk (*). # # The aliases section has the following format: # # Column 1: either `capalias' or `infoalias' # Column 2: name to be aliased # Column 3: what name it should translate to. The name IGNORE means it # should be discarded with a warning message. # Column 4: name of the extension set (used for compiler warning messages) # Column 5: capability description (usually an associated terminfo variable) # # HANDLING TERMCAP AND TERMINFO EXTENSIONS # # There are basically five different ways to handle termcap and terminfo # extensions: # # 1. Don't list the capname here, or list it but comment it out (the latter # is preferable; someone might want to handle it in the future). If you do # this, the capability will be treated as unknown and raise a warning from # the compiler. # # 2. Alias it. This is appropriate if the capability has the same meaning # as an already-supported one. The compiler will handle aliasing, emitting # an appropriate informational message whenever an alias fires. # # 3. List it in the standard table. You almost certainly do *not* want # to do this -- the capabilities in that one, and their order, have been # carefully chosen to be SVr4-binary-compatible when they're written out # as a terminfo object, and breaking this would be bad. It's up to the ncurses # library what to do with the terminfo data after it's read in. # # 4. List it in the aliases table with an IGNORE target field. If you # do this, the capability will be ignored on input (though the user will # get a warning message about it). # # 5. List it in the extensions table. If you do this, the compiler will # silently accept the capability, but the curses library proper will never # see it (because it won't be written out as part of the terminfo object # format). It's up to you what you have the compiler do with it. # # There are two opposite reasons to choose option 5. One is when you want # to eat the capability silently and discard it when doing translations # to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are # in this class. Nothing will ever use them again. # # More usually, you want the compiler to try to deduce something from the # capability value that it can use to translate it into your output format. # You'll need to write custom code, probably in postprocess_termcap() or # postprocess_terminfo(), to handle the translation. # # CONTROLLING ENTRY LENGTH # # Notes on specific elisions made to fit translations within 1023 bytes: # # Machines with IBM PC-like keyboards want to be able to define the following # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap- # only environments for End or Home-Down), key_dc, and key_ic. This is also # the set of keys the `joe' editor will be upset if it can't see. So don't # trim those out of the set to be translated to termcap, or various users of # the termcap file will become irate. # # It might look tempting to leave those long init strings out of translations. # We can't do it (yet); 4.4BSD tput and tset use them. # # We retain the sgr capability in translation in spite of the fact that neither # 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are # hard to understand without it, and (b) the entries in which it is long tend # to be older types that don't use up a lot of string space on function keys. # The tic(1) translation code will complain and elide it if it makes a critical # difference (there is special code in tic to recognize this situation). # # Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion # optimizer in BSD curses didn't use them. This omission seems to be the # single most effective one, it shortened the resolved length of all thirteen # problem entries in the 9.9.0 version of the terminfo master below critical. # # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap # translations go back over critical if we do this. As 4.4BSD curses fades # into history and GNU termcap's application base shrinks towards being GNU # Emacs only, we'll probably elide out some BSD-only capabilities in order # to buy space for non-essentials Emacs is still using. Capabilities high # on that hit list: rc, sc, uc. # ############################################################################# # # STANDARD CAPABILITIES # #%The following is a complete table of the capabilities included in a #%terminfo description block and available to terminfo-using code. In each #%line of the table, #% #%The \fBvariable\fR is the name by which the programmer (at the terminfo level) #%accesses the capability. #% #%The \fBcapname\fR is the short name used in the text of the database, #%and is used by a person updating the database. #%Whenever possible, capnames are chosen to be the same as or similar to #%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses #%identical or very similar names). Semantics are also intended to match #%those of the specification. #% #%The termcap code is the old #%.B termcap #%capability name (some capabilities are new, and have names which termcap #%did not originate). #%.P #%Capability names have no hard length limit, but an informal limit of 5 #%characters has been adopted to keep them short and to allow the tabs in #%the source file #%.B Caps #%to line up nicely. #% #%Finally, the description field attempts to convey the semantics of the #%capability. You may find some codes in the description field: #%.TP #%(P) #%indicates that padding may be specified #%.TP #%#[1-9] #%in the description field indicates that the string is passed through tparm with #%parms as given (#\fIi\fP). #%.TP #%(P*) #%indicates that padding may vary in proportion to the number of #%lines affected #%.TP #%(#\d\fIi\fP\u) #%indicates the \fIi\fP\uth\d parameter. #% #%.PP #% These are the boolean capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBBooleans name Code\fR auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column auto_right_margin am bool am - - YBCGE terminal has automatic margins no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C) ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp) eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept) erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank generic_type gn bool gn - - YB-G- generic line type hard_copy hc bool hc - - YBCG- hardcopy terminal has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit) has_status_line hs bool hs - - YB-G- has extra status line insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls memory_above da bool da - - YBCG- display may be retained above the screen memory_below db bool db - - YB-GE display may be retained below the screen move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode over_strike os bool os - - YBCG- terminal can overstrike status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061) tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine) transparent_underline ul bool ul - - YBCGE underline character overstrikes xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking back_color_erase bce bool ut - - ----- screen erased with background color can_change ccc bool cc - - ----- terminal can re-define existing colors col_addr_glitch xhpa bool YA - - ----- only positive motion for hpa/mhpa caps cpi_changes_res cpix bool YF - - ----- changing character pitch changes resolution cr_cancels_micro_mode crxm bool YB - - ----- using cr turns off micro mode hard_cursor chts bool HC - - ----- cursor is hard to see has_print_wheel daisy bool YC - - ----- printer needs operator to change character set hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix) lpi_changes_res lpix bool YG - - ----- changing line pitch changes resolution needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup no_pad_char npc bool NP - - ----- pad character does not exist prtr_silent mc5i bool 5i - - ----- printer will not echo on screen row_addr_glitch xvpa bool YD - - ----- only positive motion for vpa/mvpa caps semi_auto_right_margin sam bool YE - - ----- printing in last column causes cr #%.TE #%.ad #% #%These are the numeric capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBNumeric name Code\fR columns cols num co - - YBCGE number of columns in a line init_tabs it num it - - YB-G- tabs initially every # spaces lines lines num li - - YBCGE number of lines on screen or page lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix) width_status_line wsl num ws - - YB-G- number of columns in status line bit_image_entwining bitwin num Yo - - ----- number of passes for each bit-image row bit_image_type bitype num Yp - - ----- type of bit-image device buffer_capacity bufsz num Ya - - ----- numbers of bytes buffered before printing buttons btns num BT - - ----- number of buttons on mouse dot_vert_spacing spinv num Yb - - ----- spacing of pins vertically in pins per inch dot_horz_spacing spinh num Yc - - ----- spacing of dots horizontally in dots per inch label_height lh num lh - - ----- rows in each label label_width lw num lw - - ----- columns in each label max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle max_colors colors num Co - - ----- maximum number of colors on screen max_micro_address maddr num Yd - - ----- maximum value in micro_..._address max_micro_jump mjump num Ye - - ----- maximum value in parm_..._micro max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen maximum_windows wnum num MW - - ----- maximum number of definable windows micro_col_size mcs num Yf - - ----- character step size when in micro mode micro_line_size mls num Yg - - ----- line step size when in micro mode no_color_video ncv num NC - - ----- video attributes that can not be used with colors number_of_pins npins num Yh - - ----- numbers of pins in print-head num_labels nlab num Nl - - ----- number of labels on screen output_res_char orc num Yi - - ----- horizontal resolution in units per line output_res_line orl num Yj - - ----- vertical resolution in units per line output_res_horz_inch orhi num Yk - - ----- horizontal resolution in units per inch output_res_vert_inch orvi num Yl - - ----- vertical resolution in units per inch print_rate cps num Ym - - ----- print rate in characters per second wide_char_size widcs num Yn - - ----- character step size when in double wide mode #%.TE #%.ad #% #%These are the string capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR back_tab cbt str bt - - YBCGE back tab (P) bell bel str bl - - YB-GE audible signal (bell) (P) carriage_return cr str cr - - YBCGE carriage return (P*) (P*) change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P) clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P) clear_screen clear str cl - - YBCGE clear screen and home cursor (P*) clr_eol el str ce - - YBCGE clear to end of line (P) clr_eos ed str cd - - YBCGE clear to end of screen (P*) column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P) command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !? cursor_address cup str cm - - YBCGE move to row #1 columns #2 cursor_down cud1 str do - - YBCGE down one line cursor_home home str ho - - YBCGE home cursor (if no cup) cursor_invisible civis str vi - - YB-G- make cursor invisible cursor_left cub1 str le - - YBCGE move left one space cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2 cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis) cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space) cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup) cursor_up cuu1 str up - - YBCGE up one line cursor_visible cvvis str vs - - YBCGE make cursor very visible delete_character dch1 str dc - - YBCGE delete character (P*) delete_line dl1 str dl - - YBCGE delete line (P*) dis_status_line dsl str ds - - YB-G- disable status line down_half_line hd str hd - - YB-G- half a line down enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P) enter_blink_mode blink str mb - - YB-G- turn on blinking enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode enter_ca_mode smcup str ti - - YBCGE string to start programs using cup enter_delete_mode smdc str dm - - YBCGE enter delete mode enter_dim_mode dim str mh - - YB-G- turn on half-bright mode enter_insert_mode smir str im - - YBCGE enter insert mode enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible) enter_protected_mode prot str mp - - -B-G-* turn on protected mode enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode enter_standout_mode smso str so - - YBCGE begin standout mode enter_underline_mode smul str us - - YBCGE begin underline mode erase_chars ech str ec - - YB-G- erase #1 characters (P) exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P) exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup exit_delete_mode rmdc str ed - - YBCGE end delete mode exit_insert_mode rmir str ei - - YBCGE exit insert mode exit_standout_mode rmso str se - - YBCGE exit standout mode exit_underline_mode rmul str ue - - YBCGE exit underline mode flash_screen flash str vb - - YBCGE visible bell (may not move cursor) form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*) from_status_line fsl str fs - - YB-G- return from status line init_1string is1 str i1 - - YB-G- initialization string init_2string is2 str is - - YB-G- initialization string init_3string is3 str i3 - - YB-G- initialization string init_file if str if - - YB-G- name of initialization file insert_character ich1 str ic - - YBCGE insert character (P) insert_line il1 str al - - YBCGE insert line (P*) insert_padding ip str ip - - YBCGE insert padding after inserted character key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key key_f10 kf10 str k; KEY_F(10) - ----E F10 function key key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key key_home khome str kh KEY_HOME 0406 YBCGE home key key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down) key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0 lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1 lab_f10 lf10 str la - - ----- label on function key f10 if not f10 lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2 lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3 lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4 lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5 lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6 lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7 lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8 lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9 meta_off rmm str mo - - YB-G-* turn off meta mode meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on) newline nel str nw - - YB-G-* newline (behave like cr followed by lf) pad_char pad str pc - - YBCGE padding char (instead of null) parm_dch dch str DC - - YB-GE delete #1 characters (P*) parm_delete_line dl str DL - - YBCGE delete #1 lines (P*) parm_down_cursor cud str DO - - YBCGE down #1 lines (P*) parm_ich ich str IC - - YB-GE insert #1 characters (P*) parm_index indn str SF - - YBCG- scroll forward #1 lines (P) parm_insert_line il str AL - - YBCGE insert #1 lines (P*) parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P) parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*) parm_rindex rin str SR - - YBCG- scroll back #1 lines (P) parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*) pkey_key pfkey str pk - - -B--- program function key #1 to type string #2 pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2 pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2 print_screen mc0 str ps - - -B-G-* print contents of screen prtr_off mc4 str pf - - -B-G-* turn off printer prtr_on mc5 str po - - -B-G-* turn on printer repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*) reset_1string rs1 str r1 - - -B--- reset string reset_2string rs2 str r2 - - -B--- reset string reset_3string rs3 str r3 - - -B--- reset string reset_file rf str rf - - -B--- name of reset file restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor row_address vpa str cv - - -B-GE* vertical position #1 absolute (P) save_cursor sc str sc - - YBCG- save current cursor position (P) scroll_forward ind str sf - - YBCGE scroll text up (P) scroll_reverse ri str sr - - YBCGE scroll text down (P) set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9) set_tab hts str st - - YB-G- set a tab in every row, current columns set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4 tab ht str ta - - YBCGE tab to next 8-space hardware tab stop to_status_line tsl str ts - - YB-G- move to status line, column #1 underline_char uc str uc - - YBCG- underline char and move past it up_half_line hu str hu - - YB-G- half a line up init_prog iprog str iP - - -B--- path name of program for initialization key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes # # SVr1 capabilities stop here. IBM's version of terminfo is the same as # SVr4 up to this point, but has a different set afterwards. # # OSF1 differences start here, based on IBM version: # box_chars_1 box1 str bx - - ----K box characters primary set box_chars_2 box2 str by - - ----K box characters secondary set box_attr_1 batt1 str Bx - - ----K attributes for box1 box_attr_2 batt2 str By - - ----K attributes for box2 color_bg_0 colb0 str d0 - - ----K background color 0 color_bg_1 colb1 str d1 - - ----K background color 1 color_bg_2 colb2 str d2 - - ----K background color 2 color_bg_3 colb3 str d3 - - ----K background color 3 color_bg_4 colb4 str d4 - - ----K background color 4 color_bg_5 colb5 str d5 - - ----K background color 5 color_bg_6 colb6 str d6 - - ----K background color 6 color_bg_7 colb7 str d7 - - ----K background color 7 color_fg_0 colf0 str c0 - - ----K foreground color 0 color_fg_1 colf1 str c1 - - ----K foreground color 1 color_fg_2 colf2 str c2 - - ----K foreground color 2 color_fg_3 colf3 str c3 - - ----K foreground color 3 color_fg_4 colf4 str c4 - - ----K foreground color 4 color_fg_5 colf5 str c5 - - ----K foreground color 5 color_fg_6 colf6 str c6 - - ----K foreground color 6 color_fg_7 colf7 str c7 - - ----K foreground color 7 font_0 font0 str f0 - - ----- select font 0 font_1 font1 str f1 - - ----- select font 1 font_2 font2 str f2 - - ----- select font 2 font_3 font3 str f3 - - ----- select font 3 font_4 font4 str f4 - - ----K select font 4 font_5 font5 str f5 - - ----K select font 5 font_6 font6 str f6 - - ----K select font 6 font_7 font7 str f7 - - ----K select font 7 key_back_tab kbtab str k0 - - ----- backtab key key_do kdo str ki - - ----K do request key key_command kcmd str kc KEY_COMMAND 0545 ----- command key key_command_pane kcpn str kW - - ----K command-pane key key_end kend str @7 KEY_END 0550 ----- end key key_help khlp str %1 KEY_HELP 0553 ----- help key key_newline knl str nl - - ----K newline key key_next_pane knpn str kv - - ----K next-pane key key_prev_cmd kppn str kp - - ----K previous-command key key_prev_pane kppn str kV - - ----K previous-pane key key_quit kquit str kQ - - ----K quit key key_select kslt str *6 KEY_SELECT 0601 ----- select key key_scroll_left kscl str kz - - ----K scroll left key_scroll_right kscr str kZ - - ----K scroll right key_tab ktab str ko - - ----K tab key key_smap_in1 kmpf1 str Kv - - ----K special mapped key 1 input key_smap_out1 kmpt1 str KV - - ----K special mapped key 1 output key_smap_in2 kmpf2 str Kw - - ----K special mapped key 2 input key_smap_out2 kmpt2 str KW - - ----K special mapped key 2 output key_smap_in3 kmpf3 str Kx - - ----K special mapped key 3 input key_smap_out3 kmpt3 str KX - - ----K special mapped key 3 output key_smap_in4 kmpf4 str Ky - - ----K special mapped key 4 input key_smap_out4 kmpt4 str KY - - ----K special mapped key 4 output key_smap_in5 kmpf5 str Kz - - ----K special mapped key 5 input key_smap_out5 kmpt5 str KZ - - ----K special mapped key 5 output appl_defined_str apstr str za - - ----K application-defined string # The key_smap_in[6789] and key_smap_out[6789] capabilities are described in # the Tru64 manual pages. key_smap_in6 kmpf6 str Kr - - ----K special mapped key 6 input key_smap_out6 kmpt6 str KR - - ----K special mapped key 6 output key_smap_in7 kmpf7 str Ks - - ----K special mapped key 7 input key_smap_out7 kmpt7 str KS - - ----K special mapped key 7 output key_smap_in8 kmpf8 str Kt - - ----K special mapped key 8 input key_smap_out8 kmpt8 str KT - - ----K special mapped key 8 output key_smap_in9 kmpf9 str Ku - - ----K special mapped key 9 input key_smap_out9 kmpt9 str KU - - ----K special mapped key 9 output key_sf1 ksf1 str S1 - - ----K special function key 1 key_sf2 ksf2 str S2 - - ----K special function key 2 key_sf3 ksf3 str S3 - - ----K special function key 3 key_sf4 ksf4 str S4 - - ----K special function key 4 key_sf5 ksf5 str S5 - - ----K special function key 5 key_sf6 ksf6 str S6 - - ----K special function key 6 key_sf7 ksf7 str S7 - - ----K special function key 7 key_sf8 ksf8 str S8 - - ----K special function key 8 key_sf9 ksf9 str S9 - - ----K special function key 9 key_sf10 ksf10 str SA - - ----K special function key 10 # key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key key_f20 kf20 str FA KEY_F(20) - ----E F20 function key key_f21 kf21 str FB KEY_F(21) - ----E F21 function key key_f22 kf22 str FC KEY_F(22) - ----E F22 function key key_f23 kf23 str FD KEY_F(23) - ----E F23 function key key_f24 kf24 str FE KEY_F(24) - ----E F24 function key key_f25 kf25 str FF KEY_F(25) - ----E F25 function key key_f26 kf26 str FG KEY_F(26) - ----E F26 function key key_f27 kf27 str FH KEY_F(27) - ----E F27 function key key_f28 kf28 str FI KEY_F(28) - ----E F28 function key key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key key_f30 kf30 str FK KEY_F(30) - ----E F30 function key key_f31 kf31 str FL KEY_F(31) - ----E F31 function key key_f32 kf32 str FM KEY_F(32) - ----E F32 function key key_f33 kf33 str FN KEY_F(33) - ----E F33 function key key_f34 kf34 str FO KEY_F(34) - ----E F34 function key key_f35 kf35 str FP KEY_F(35) - ----E F35 function key key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key key_action kact str kJ KEY_ACTION 0541 ----K sent by action key acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100 alt_scancode_esc scesa str S8 - - ----- Alternate escape for scancode emulation bit_image_repeat birep str Xy - - ----- Repeat bit image cell #1 #2 times bit_image_newline binel str Zz - - ----- Move to next row of the bit image bit_image_carriage_return bicr str Yv - - ----- Move to beginning of same row change_char_pitch cpi str ZA - - ----- Change number of characters per inch to #1 change_line_pitch lpi str ZB - - ----- Change number of lines per inch to #1 change_res_horz chr str ZC - - ----- Change horizontal resolution to #1 change_res_vert cvr str ZD - - ----- Change vertical resolution to #1 char_padding rmp str rP - - ----- like ip but when in insert mode char_set_names csnm str Zy - - ----- Produce #1'th item from list of character set names clear_margins mgc str MC - - ----- clear right and left soft margins clr_bol el1 str cb - - ----- Clear to beginning of line code_set_init csin str ci - - ----- Init sequence for multiple codesets color_names colornm str Yw - - ----- Give name for color #1 create_window cwin str CW - - ----- define a window #1 from #2,#3 to #4,#5 define_bit_image_region defbi str Yx - - ----- Define rectangular bit image region define_char defc str ZE - - ----- Define a character #1, #2 dots wide, descender #3 device_type devt str dv - - ----- Indicate language/codeset support dial_phone dial str DI - - ----- dial number #1 display_clock dclk str DK - - ----- display clock display_pc_char dispc str S1 - - ----- Display PC character #1 ena_acs enacs str eA - - ----- enable alternate char set end_bit_image_region endbi str Yy - - ----- End a bit-image region enter_am_mode smam str SA - - ----- turn on automatic margins enter_doublewide_mode swidm str ZF - - ----- Enter double-wide mode enter_draft_quality sdrfq str ZG - - ----- Enter draft-quality mode enter_italics_mode sitm str ZH - - ----- Enter italic mode enter_leftward_mode slm str ZI - - ----- Start leftward carriage motion enter_micro_mode smicm str ZJ - - ----- Start micro-motion mode enter_near_letter_quality snlq str ZK - - ----- Enter NLQ mode enter_normal_quality snrmq str ZL - - ----- Enter normal-quality mode enter_pc_charset_mode smpch str S2 - - ----- Enter PC character display mode enter_scancode_mode smsc str S4 - - ----- Enter PC scancode mode enter_shadow_mode sshm str ZM - - ----- Enter shadow-print mode enter_subscript_mode ssubm str ZN - - ----- Enter subscript mode enter_superscript_mode ssupm str ZO - - ----- Enter superscript mode enter_upward_mode sum str ZP - - ----- Start upward carriage motion enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking exit_am_mode rmam str RA - - ----- turn off automatic margins exit_doublewide_mode rwidm str ZQ - - ----- End double-wide mode exit_italics_mode ritm str ZR - - ----- End italic mode exit_leftward_mode rlm str ZS - - ----- End left-motion mode exit_micro_mode rmicm str ZT - - ----- End micro-motion mode exit_pc_charset_mode rmpch str S3 - - ----- Exit PC character display mode exit_scancode_mode rmsc str S5 - - ----- Exit PC scancode mode exit_shadow_mode rshm str ZU - - ----- End shadow-print mode exit_subscript_mode rsubm str ZV - - ----- End subscript mode exit_superscript_mode rsupm str ZW - - ----- End superscript mode exit_upward_mode rum str ZX - - ----- End reverse character motion exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking fixed_pause pause str PA - - ----- pause for 2-3 seconds flash_hook hook str fh - - ----- flash switch hook get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented. goto_window wingo str WG - - ----- go to window #1 hangup hup str HU - - ----- hang-up phone initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4) initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7) key_beg kbeg str @1 KEY_BEG 0542 ----- begin key key_btab kcbt str kB KEY_BTAB 0632 ----- back-tab key key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key key_close kclo str @3 KEY_CLOSE 0544 ----- close key key_copy kcpy str @5 KEY_COPY 0546 ----- copy key key_create kcrt str @6 KEY_CREATE 0547 ----- create key key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key key_exit kext str @9 KEY_EXIT 0551 ----- exit key key_f37 kf37 str FR KEY_F(37) - ----E F37 function key key_f38 kf38 str FS KEY_F(38) - ----E F38 function key key_f39 kf39 str FT KEY_F(39) - ----E F39 function key key_f40 kf40 str FU KEY_F(40) - ----E F40 function key key_f41 kf41 str FV KEY_F(41) - ----E F41 function key key_f42 kf42 str FW KEY_F(42) - ----E F42 function key key_f43 kf43 str FX KEY_F(43) - ----E F43 function key key_f44 kf44 str FY KEY_F(44) - ----E F44 function key key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key key_find kfnd str @0 KEY_FIND 0552 ----- find key key_mark kmrk str %2 KEY_MARK 0554 ----- mark key key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred key_move kmov str %4 KEY_MOVE 0556 ----- move key key_next knxt str %5 KEY_NEXT 0557 ----- next key key_open kopn str %6 KEY_OPEN 0560 ----- open key key_options kopt str %7 KEY_OPTIONS 0561 ----- options key key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key key_print kprt str %9 KEY_PRINT 0532 ----- print key key_redo krdo str %0 KEY_REDO 0563 ----- redo key key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key key_restart krst str &4 KEY_RESTART 0567 ----- restart key key_resume kres str &5 KEY_RESUME 0570 ----- resume key key_save ksav str &6 KEY_SAVE 0571 ----- save key key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key key_send kEND str *7 KEY_SEND 0602 ----- shifted end key key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key key_undo kund str &8 KEY_UNDO 0630 ----- undo key label_format fln str Lf - - ----- label format label_off rmln str LF - - ----- turn off soft labels label_on smln str LO - - ----- turn on soft labels micro_column_address mhpa str ZY - - ----- Like column_address in micro mode micro_down mcud1 str ZZ - - ----- Like cursor_down in micro mode micro_left mcub1 str Za - - ----- Like cursor_left in micro mode micro_right mcuf1 str Zb - - ----- Like cursor_right in micro mode micro_row_address mvpa str Zc - - ----- Like row_address #1 in micro mode micro_up mcuu1 str Zd - - ----- Like cursor_up in micro mode mouse_info minfo str Mi - - ----- Mouse status information order_of_pins porder str Ze - - ----- Match software bits to print-head pins orig_colors oc str oc - - ----- Set all color pairs to the original ones orig_pair op str op - - ----- Set default pair to its original value parm_down_micro mcud str Zf - - ----- Like parm_down_cursor in micro mode parm_left_micro mcub str Zg - - ----- Like parm_left_cursor in micro mode parm_right_micro mcuf str Zh - - ----- Like parm_right_cursor in micro mode parm_up_micro mcuu str Zi - - ----- Like parm_up_cursor in micro mode pc_term_options pctrm str S6 - - ----- PC terminal options pkey_plab pfxl str xl - - ----- Program function key #1 to type string #2 and show string #3 plab_norm pln str pn - - ----- program label #1 to show string #2 pulse pulse str PU - - ----- select pulse dialing quick_dial qdial str QD - - ----- dial number #1 without checking req_for_input rfi str RF - - ----- send next input char (for ptys) req_mouse_pos reqmp str RQ - - ----- Request mouse position remove_clock rmclk str RC - - ----- remove clock scancode_escape scesc str S7 - - ----- Escape for scancode emulation select_char_set scs str Zj - - ----- Select character set, #1 set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII) set1_des_seq s1ds str s1 - - ----- Shift to codeset 1 set2_des_seq s2ds str s2 - - ----- Shift to codeset 2 set3_des_seq s3ds str s3 - - ----- Shift to codeset 3 set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape set_background setb str Sb - - ----- Set background color #1 set_bottom_margin smgb str Zk - - ----- Set bottom margin at current line set_bottom_margin_parm smgbp str Zl - - ----- Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom set_clock sclk str SC - - ----- set clock, #1 hrs #2 mins #3 secs set_color_band setcolor str Yz - - ----- Change to ribbon color #1 set_color_pair scp str sp - - ----- Set current color pair to #1 set_foreground setf str Sf - - ----- Set foreground color #1 set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap). set_left_margin_parm smglp str Zm - - ----- Set left (right) margin at column #1 set_lr_margin smglr str ML - - ----- Set both left and right margins to #1, #2. (ML is not in BSD termcap). set_page_length slines str YZ - - ----- Set page length to #1 lines set_right_margin smgr str MR - - ----- set right soft margin at current column set_right_margin_parm smgrp str Zn - - ----- Set right margin at column #1 set_tb_margin smgtb str MT - - ----- Sets both top and bottom margins to #1, #2 set_top_margin smgt str Zo - - ----- Set top margin at current line set_top_margin_parm smgtp str Zp - - ----- Set top (bottom) margin at row #1 start_bit_image sbim str Zq - - ----- Start printing bit image graphics start_char_set_def scsd str Zr - - ----- Start character set definition #1, with #2 characters in the set stop_bit_image rbim str Zs - - ----- Stop printing bit image graphics stop_char_set_def rcsd str Zt - - ----- End definition of character set #1 subscript_characters subcs str Zu - - ----- List of subscriptable characters superscript_characters supcs str Zv - - ----- List of superscriptable characters these_cause_cr docr str Zw - - ----- Printing any of these characters causes CR tone tone str TO - - ----- select touch tone dialing user0 u0 str u0 - - ----- User string #0 user1 u1 str u1 - - ----- User string #1 user2 u2 str u2 - - ----- User string #2 user3 u3 str u3 - - ----- User string #3 user4 u4 str u4 - - ----- User string #4 user5 u5 str u5 - - ----- User string #5 user6 u6 str u6 - - ----- User string #6 user7 u7 str u7 - - ----- User string #7 user8 u8 str u8 - - ----- User string #8 user9 u9 str u9 - - ----- User string #9 wait_tone wait str WA - - ----- wait for dial-tone xoff_character xoffc str XF - - ----- XOFF character xon_character xonc str XN - - ----- XON character zero_motion zerom str Zx - - ----- No motion for subsequent character set_pglen_inch slength str YI - - ----- Set page length to #1 hundredth of an inch (some implementations use sL for termcap). enter_horizontal_hl_mode ehhlm str Xh - - ----- Enter horizontal highlight mode enter_left_hl_mode elhlm str Xl - - ----- Enter left highlight mode enter_low_hl_mode elohlm str Xo - - ----- Enter low highlight mode enter_right_hl_mode erhlm str Xr - - ----- Enter right highlight mode enter_top_hl_mode ethlm str Xt - - ----- Enter top highlight mode enter_vertical_hl_mode evhlm str Xv - - ----- Enter vertical highlight mode set_a_attributes sgr1 str sA - - ----- Define second set of video attributes #1-#6 # # # # %%-STOP-HERE-%% # # Don't move this casually! In fact, don't move it at all unless you're # either doing it to add System V or XPG4 extensions, or have decided you # don't care about SVr4 binary compatibility. # ############################################################################# # # TERMCAP EXTENSION CAPABILITIES # # The capabilities below are either obsolete or extensions on certain systems. # They are not used by SVR4 terminfo. Some are used by captoinfo to translate # termcap sources; the rest are listed for completeness, and in case somebody # cares about them enough to hack in code that will translate them into # terminfo capabilities. # # The first part of the list is from Ross Ridge's `mytinfo' package # (comp.sources.unix, volume 26); the variable names and terminfo names (as # well as the termcap codes) match his list. # # This group of codes is not marked obsolete in 4.4BSD, but have no direct # terminfo equivalents. The rs capability is specially translated to terminfo # r2, and vice versa, if an entry does not already have an r2. Similarly, # i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2). # The ug capability is thrown away, but assumed to be whatever sg is if the # latter is nonzero and we're dumping in termcap format. # termcap_init2 OTi2 str i2 - - YB--- secondary initialization string termcap_reset OTrs str rs - - YB-G- terminal reset string magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul # # Obsolete termcap capabilities. Some are used for termcap translation. The # code uses the 'OT' prefix we put on obsolete capabilities to suppress # printing them in terminfo source dumps of compiled entries. # backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line carriage_return_delay OTdC num dC - - YB-G- pad needed for CR new_line_delay OTdN num dN - - YB-G- pad needed for LF linefeed_if_not_lf OTnl str nl - - YBCGE use to move down backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H # # GNU termcap library extensions. The GNU termcap file distributed with # Emacs no longer uses these, but MT showed up in pre-9.0 versions of the # BSD termcap file. The name clash with terminfo MT is resolved by type # info; MT is converted to km. # gnu_has_meta_key OTMT bool MT - - ----E has meta key # gnu_tab_width OTtw num tw - - ----E tab width in spaces # # GNU termcap *does* include the following extended capability, Only the # now-obsolete Ann Arbor terminals used it. # # gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region # # The following comments describe capnames so ancient that I believe no # software uses them any longer. Some of these have to go because they # clash with terminfo names in ways that cannot be resolved by type # information. # # These mytinfo codes are not used in the 4.4BSD curses code. They are # marked obsolete in the 4.4BSD manual pages. # # There is one conflict with terminfo; ma is in both. This conflict is # resolved by type information. # # The `ko' capability is translated by special code. It should contain a # comma-separated list of capabilities for which there are corresponding keys. # The `kn' code is accepted but ignored. # # The `ma' capability seems to have been designed to map between the rogue(2) # motion keys (including jkhl) and characters emitted by arrow keys on some # primitive pre-ANSI terminals. It's so obsolete it's fossilized... # # Here is a description of memory_lock_above and memory_unlock: # "You can 'freeze' data on the screen by turning on Memory Lock in a line of # text. All lines above the cursor's current line become locked in place on # the screen. Then enter data normally. When the screen fills up, any # further data entered forces the first line of unfrozen line text to scroll # under the frozen data. Lines scrolled off the screen are inserted into # memory immediately preceding the first frozen line." (from the HP 700/96 # User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l. # # Applications that use terminfo are supposed to behave as though xr is # always true. # linefeed_is_newline OTNL bool NL - - YB--- move down with \n # even_parity OTEP bool EP - - -B--- terminal requires even parity # odd_parity OTOP bool OP - - -B--- terminal requires odd parity # half_duplex OTHD bool HD - - -B--- terminal is half-duplex # lower_case_only OTLC bool LC - - -B--- terminal has only lower case # upper_case_only OTUC bool UC - - -B--- terminal has only upper case backspace_delay OTdB num dB - - YB-G- padding required for ^H # form_feed_delay OTdF num dF - - -B-G- padding required for ^L horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I # vertical_tab_delay OTdV num dV - - -B--- padding required for ^V number_of_function_keys OTkn num kn - - -B-G- count of function keys other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps arrow_key_map OTma str ma - - YBC-- map arrow keys rogue(1) motion keys # memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line # memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I return_does_clr_eol OTxr bool xr - - YB--- return clears the line # tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch # # mytinfo described this as a termcap capability, but it's not listed in the # 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses # package, like System V, behaves as though it is always true. # # rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line # # University of Waterloo termcap extensions (as described in mytinfo). # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot # be resolved by a type check. The descriptions are guesses from what was # in the mytinfo tables. # # key_interrupt_char OTki str ki - - ----- string set by interrupt key (?) # key_kill_char OTkk str kk - - ----- string set by kill key (?) # key_suspend_char OTkz str kz - - ----- string set by suspend key (?) # initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?) # ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return # # Nonstandard capabilities unique to Ross Ridge's `mytinfo' package. # SR clashes with a terminfo name; this ambiguity cannot be resolved by a type # check. # # scroll_left OTsl1 str Sl - - ----- scroll screen leftward # scroll_right OTsr1 str Sr - - ----- scroll screen rightward # parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters # parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters # # The mytinfo capabilities end here. # # XENIX extensions: # # Xenix defined its own set of forms-drawing capabilities: # # cap IBM ASCII description ACS ASCII # --- ----------- -------------------- ------------- ------ # G1 191 \277 M-? single upper right ACS_URCORNER # G2 218 \332 M-Z single upper left ACS_ULCORNER # G3 192 \300 M-@ single lower left ACS_LLCORNER # G4 217 \331 M-Y single lower right ACS_LRCORNER # G5 187 \273 M-; double upper right # G6 201 \311 M-I double upper left # G7 200 \310 M-H double lower left # G8 188 \274 M-< double lower right # GC 197 \305 M-E single intersection ACS_PLUS _ _ # GD 194 \302 M-B single down-tick ACS_TTEE | # GH 196 \304 M-D single horizontal line ACS_HLINE # GL 180 \264 M-4 single left tick ACS_RTEE -| # GR 195 \303 M-C single right tick ACS_LTEE |- # GU 193 \301 M-A single up tick ACS_BTEE _|_ # GV 179 \263 M-3 single vertical line ACS_VLINE # Gc 206 \316 M-N double intersection # Gd 203 \313 M-K double down tick # Gh 205 \315 M-M double horizontal line # Gl 204 \204 M-L double left tick # Gr 185 \271 M-9 double right tick # Gu 202 \312 M-J double up tick # Gv 186 \272 M-: double vertical line # # The compiler will translate the single-line caps and discard the others # (via IGNORE aliases further down). We don't want to do normal pad # translation on these, they're often single-character printable ASCII # strings that happen to be numerics. There's awk code in parametrized.sh # that detects the acs_ prefix and uses it to suppress pad translation. # These terminfo names are invented. # acs_ulcorner OTG2 str G2 - - ----- single upper left acs_llcorner OTG3 str G3 - - ----- single lower left acs_urcorner OTG1 str G1 - - ----- single upper right acs_lrcorner OTG4 str G4 - - ----- single lower right acs_ltee OTGR str GR - - ----- tee pointing right acs_rtee OTGL str GL - - ----- tee pointing left acs_btee OTGU str GU - - ----- tee pointing up acs_ttee OTGD str GD - - ----- tee pointing down acs_hline OTGH str GH - - ----- single horizontal line acs_vline OTGV str GV - - ----- single vertical line acs_plus OTGC str GC - - ----- single intersection # ############################################################################# # # TERMINFO EXTENSION CAPABILITIES # # This section is almost all comments. What it's mainly for is to describe # what capabilities need to be squeezed out to get down to the XSI Curses # standard set. They are flagged with K. # # HP extensions # # These extensions follow ptr_non (replacing everything after it) in HP # terminfo files. Except for memory_lock and memory_unlock, they are # functionally identical to SVr4 extensions, but they make the binary format # different. Grrr.... # memory_lock meml str ml - - ----K lock memory above cursor memory_unlock memu str mu - - ----K unlock memory #plab_norm pln str pn - - ----- program label #1 to show string #2 #label_on smln str LO - - ----- turn on soft labels #label_off rmln str LF - - ----- turn off soft labels #key_f11 kf11 str F1 - - ----- F11 function key #key_f12 kf12 str F2 - - ----- F12 function key #key_f13 kf13 str F3 - - ----- F13 function key #key_f14 kf14 str F4 - - ----- F14 function key #key_f15 kf15 str F5 - - ----- F15 function key #key_f16 kf16 str F6 - - ----- F16 function key #key_f17 kf17 str F7 - - ----- F17 function key #key_f18 kf18 str F8 - - ----- F18 function key #key_f19 kf19 str F9 - - ----- F19 function key #key_f20 kf20 str FA - - ----- F20 function key #key_f21 kf21 str FB - - ----- F21 function key #key_f22 kf22 str FC - - ----- F22 function key #key_f23 kf23 str FD - - ----- F23 function key #key_f24 kf24 str FE - - ----- F24 function key #key_f25 kf25 str FF - - ----- F25 function key #key_f26 kf26 str FG - - ----- F26 function key #key_f27 kf27 str FH - - ----- F27 function key #key_f28 kf28 str FI - - ----- F28 function key #key_f29 kf29 str FJ - - ----- F29 function key #key_f30 kf30 str FK - - ----- F30 function key #key_f31 kf31 str FL - - ----- F31 function key #key_f32 kf32 str FM - - ----- F32 function key #key_f33 kf33 str FN - - ----- F33 function key #key_f34 kf34 str FO - - ----- F34 function key #key_f35 kf35 str FP - - ----- F35 function key #key_f36 kf36 str FQ - - ----- F36 function key #key_f37 kf37 str FR - - ----- F37 function key #key_f38 kf38 str FS - - ----- F38 function key #key_f39 kf39 str FT - - ----- F39 function key #key_f40 kf40 str FU - - ----- F40 function key #key_f41 kf41 str FV - - ----- F41 function key #key_f42 kf42 str FW - - ----- F42 function key #key_f43 kf43 str FX - - ----- F43 function key #key_f44 kf44 str FY - - ----- F44 function key #key_f45 kf45 str FZ - - ----- F45 function key #key_f46 kf46 str Fa - - ----- F46 function key #key_f47 kf47 str Fb - - ----- F47 function key #key_f48 kf48 str Fc - - ----- F48 function key #key_f49 kf49 str Fd - - ----- F49 function key #key_f50 kf50 str Fe - - ----- F50 function key #key_f51 kf51 str Ff - - ----- F51 function key #key_f52 kf52 str Fg - - ----- F52 function key #key_f53 kf53 str Fh - - ----- F53 function key #key_f54 kf54 str Fi - - ----- F54 function key #key_f55 kf55 str Fj - - ----- F55 function key #key_f56 kf56 str Fk - - ----- F56 function key #key_f57 kf57 str Fl - - ----- F57 function key #key_f58 kf58 str Fm - - ----- F58 function key #key_f59 kf59 str Fn - - ----- F59 function key #key_f60 kf60 str Fo - - ----- F60 function key #key_f61 kf61 str Fp - - ----- F61 function key #key_f62 kf62 str Fq - - ----- F62 function key #key_f63 kf63 str Fr - - ----- F63 function key # # IBM extensions # # These extensions follow ptr_non (replacing everything after it) in IBM # terminfo files. # # The places in the box[12] capabilities correspond to acsc characters, here is # the mapping: # # box1[0] = ACS_ULCORNER # box1[1] = ACS_HLINE # box1[2] = ACS_URCORNER # box1[3] = ACS_VLINE # box1[4] = ACS_LRCORNER # box1[5] = ACS_LLCORNER # box1[6] = ACS_TTEE # box1[7] = ACS_RTEE # box1[8] = ACS_BTEE # box1[9] = ACS_LTEE # box1[10] = ACS_PLUS # # The box2 characters are the double-line versions of these forms graphics. # #box_chars_1 box1 str bx - - ----K box characters primary set #box_chars_2 box2 str by - - ----K box characters secondary set #box_attr_1 batt1 str Bx - - ----K attributes for box1 #box_attr_2 batt2 str By - - ----K attributes for box2 #color_bg_0 colb0 str d0 - - ----K background color 0 #color_bg_1 colb1 str d1 - - ----K background color 1 #color_bg_2 colb2 str d2 - - ----K background color 2 #color_bg_3 colb3 str d3 - - ----K background color 3 #color_bg_4 colb4 str d4 - - ----K background color 4 #color_bg_5 colb5 str d5 - - ----K background color 5 #color_bg_6 colb6 str d6 - - ----K background color 6 #color_bg_7 colb7 str d7 - - ----K background color 7 #color_fg_0 colf0 str c0 - - ----K foreground color 0 #color_fg_1 colf1 str c1 - - ----K foreground color 1 #color_fg_2 colf2 str c2 - - ----K foreground color 2 #color_fg_3 colf3 str c3 - - ----K foreground color 3 #color_fg_4 colf4 str c4 - - ----K foreground color 4 #color_fg_5 colf5 str c5 - - ----K foreground color 5 #color_fg_6 colf6 str c6 - - ----K foreground color 6 #color_fg_7 colf7 str c7 - - ----K foreground color 7 #font_0 font0 str f0 - - ----- select font 0 #font_1 font1 str f1 - - ----- select font 1 #font_2 font2 str f2 - - ----- select font 2 #font_3 font3 str f3 - - ----- select font 3 #font_4 font4 str f4 - - ----K select font 4 #font_5 font5 str f5 - - ----K select font 5 #font_6 font6 str f6 - - ----K select font 6 #font_7 font7 str f7 - - ----K select font 7 #key_back_tab kbtab str k0 - - ----- backtab key #key_do kdo str ki - - ----K do request key #key_command kcmd str kd - - ----K command-request key #key_command_pane kcpn str kW - - ----K command-pane key #key_end kend str kw - - ----- end key #key_help khlp str kq - - ----- help key #key_newline knl str nl - - ----K newline key #key_next_pane knpn str kv - - ----K next-pane key #key_prev_cmd kppn str kp - - ----K previous-command key #key_prev_pane kppn str kV - - ----K previous-pane key #key_quit kquit str kQ - - ----K quit key #key_select ksel str kU - - ----- select key #key_scroll_left kscl str kz - - ----K scroll left #key_scroll_right kscr str kZ - - ----K scroll right #key_tab ktab str ko - - ----K tab key #key_smap_in1 kmpf1 str Kv - - ----K special mapped key 1 input #key_smap_out1 kmpt1 str KV - - ----K special mapped key 1 output #key_smap_in2 kmpf2 str Kw - - ----K special mapped key 2 input #key_smap_out2 kmpt2 str KW - - ----K special mapped key 2 output #key_smap_in3 kmpf3 str Kx - - ----K special mapped key 3 input #key_smap_out3 kmpt3 str KX - - ----K special mapped key 3 output #key_smap_in4 kmpf4 str Ky - - ----K special mapped key 4 input #key_smap_out4 kmpt4 str KY - - ----K special mapped key 4 output #key_smap_in5 kmpf5 str Kz - - ----K special mapped key 5 input #key_smap_out5 kmpt5 str KZ - - ----K special mapped key 5 output #appl_defined_str apstr str za - - ----K application-defined string # The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in # the IBM manual pages, so the cap name strings are guesses. The terminfo # names are almost certainly right, the termcap ones almost certainly wrong. #key_smap_in6 kmpf6 str k! - - ----K special mapped key 6 input #key_smap_out6 kmpt6 str K@ - - ----K special mapped key 6 output #key_smap_in7 kmpf7 str k# - - ----K special mapped key 7 input #key_smap_out7 kmpt7 str K$ - - ----K special mapped key 7 output #key_smap_in8 kmpf8 str k% - - ----K special mapped key 8 input #key_smap_out8 kmpt8 str K^ - - ----K special mapped key 8 output #key_smap_in9 kmpf9 str k& - - ----K special mapped key 9 input #key_smap_out9 kmpt9 str K* - - ----K special mapped key 9 output # Undocumented capabilities end here #key_sf1 ksf1 str S1 - - ----K special function key 1 #key_sf2 ksf2 str S2 - - ----K special function key 2 #key_sf3 ksf3 str S3 - - ----K special function key 3 #key_sf4 ksf4 str S4 - - ----K special function key 4 #key_sf5 ksf5 str S5 - - ----K special function key 5 #key_sf6 ksf6 str S6 - - ----K special function key 6 #key_sf7 ksf7 str S7 - - ----K special function key 7 #key_sf8 ksf8 str S8 - - ----K special function key 8 #key_sf9 ksf9 str S9 - - ----K special function key 9 #key_sf10 ksf10 str SA - - ----K special function key 10 # AIX version 3 documents different codes for F11, F12 and does not mention # F13-F64. AIX version 4 uses the same naming for F0-F63 as above. #key_f11 kf11 str k< - - ----- function key 11 #key_f12 kf12 str k> - - ----- function key 12 # Undocumented capabilities end here. #key_action kact str kJ - - ----K sent by action key # The IBM docs say these capabilities are for table-drawing, and are # valid only for aixterm descriptions. #enter_topline_mode topl str tp - - ----K start top-line mode #enter_bottom_mode btml str bm - - ----K start bottom-line mode #enter_rvert_mode rvert str rv - - ----K start right-vertical mode #enter_lvert_mode lvert str lv - - ----K start left-vertical mode # ############################################################################# # # ALIAS DECLARATIONS # # Here we set up aliases for translating extensions into standard terminfo. # #---------------------------------- Termcap aliases ------------------------- # # BSD aliases: # # This is a common error in many termcap files. We'll get notified during # translation when this (or any other alias) fires. # capalias sb sr BSD scroll text down # # AT&T extensions: # # The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of # nonstandard capabilities. Its signature is the KM capability, used to name # some sort of keymap file. EE, BO, CI, CV, XS, DS, FL and FE are in this # set. Comments in the original, and a little cross-checking with other AT&T # documentation, seem to establish the following mappings: # capalias BO mr AT&T enter_reverse_mode capalias CI vi AT&T cursor_invisible capalias CV ve AT&T cursor_normal capalias DS mh AT&T enter_dim_mode #capalias EE me AT&T exit_attribute_mode capalias FE LF AT&T label_on capalias FL LO AT&T label_off capalias XS mk AT&T enter_secure_mode # # We comment out EE because the conflicting XENIX EE is more common in # old entries. # # XENIX extensions: # # These are the ones we know how to translate directly: # capalias EE mh XENIX exit_attribute_mode capalias GE ae XENIX exit_alt_charset_mode capalias GS as XENIX enter_alt_charset_mode capalias CF vi XENIX cursor_invis capalias CO ve XENIX cursor_normal capalias EN @7 XENIX key_end capalias HM kh XENIX key_home capalias LD kL XENIX key_dl capalias PD kN XENIX key_npage capalias PN po XENIX prtr_off capalias PS pf XENIX prtr_on capalias PU kP XENIX key_ppage capalias RT @8 XENIX kent capalias UP ku XENIX kcuu1 capalias G6 IGNORE XENIX double-ACS_ULCORNER capalias G7 IGNORE XENIX double-ACS_LLCORNER capalias G5 IGNORE XENIX double-ACS_URCORNER capalias G8 IGNORE XENIX double-ACS_LRCORNER capalias Gr IGNORE XENIX double-ACS_LTEE capalias Gr IGNORE XENIX double-ACS_RTEE capalias Gu IGNORE XENIX double-ACS_BTEE capalias Gd IGNORE XENIX double ACS_TTEE capalias Gh IGNORE XENIX double-ACS_HLINE capalias Gv IGNORE XENIX double-ACS_VLINE capalias Gc IGNORE XENIX double-ACS_PLUS capalias GG IGNORE XENIX acs-glitch # # IBM extensions: # capalias kq %1 IBM key_help # # Iris extensions: # capalias HS mh IRIS enter_dim_mode # # Tektronix extensions: # capalias KA k; Tek key_f10 capalias KB F1 Tek key_f11 capalias KC F2 Tek key_f12 capalias KD F3 Tek key_f13 capalias KE F4 Tek key_f14 capalias KF F5 Tek key_f15 capalias BC Sb Tek set_background capalias FC Sf Tek set_foreground # # There are also the following: # # XENIX XENIX variable name name clash with terminfo? # ----- ------------------- ------------------------- # CL key_char_left # CR key_char_right # CW key_change_window # HP ?? # LF key_linefeed label_off # NU key_next_unlocked_cell # PL ?? # PR ?? # RC key_recalc remove_clock # RF key_toggle_ref req_for_input # WL key_word_left # WR key_word_right # # If you know what any of the question-marked ones mean, please tell us. # #--------------------------------- Terminfo aliases ------------------------ # # IBM extensions: # infoalias font0 s0ds IBM set0_des_seq infoalias font1 s1ds IBM set1_des_seq infoalias font2 s2ds IBM set2_des_seq infoalias font3 s3ds IBM set3_des_seq infoalias kbtab kcbt IBM key_backtab infoalias ksel kslt IBM key_select # # Some others are identical to SVr4/XPG4 capabilities, in particular: # kcmd, kend, khlp, and kf11...kf63. # ############################################################################# ncurses-6.0-20160213/include/Makefile.in0000644000175100001440000001143612560353243016154 0ustar tomusers# $Id: Makefile.in,v 1.43 2015/08/05 09:25:55 tom Exp $ ############################################################################## # Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-2001 # # Makefile for ncurses source code. # # This makes/installs ncurses include-files # # The variable 'srcdir' refers to the source-distribution, and can be set with # the configure script by "--srcdir=DIR". # turn off _all_ suffix rules; we'll generate our own .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile DESTDIR = @DESTDIR@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ includesubdir = @includesubdir@ INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir) INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ AWK = @AWK@ LN_S = @LN_S@ CTAGS = @CTAGS@ ETAGS = @ETAGS@ VERSION = @cf_cv_rel_version@ # The "Caps" file specifies the terminfo database format, as well as the list # of function keys. TERMINFO_CAPS = $(srcdir)/@TERMINFO_CAPS@ # These files are generated by the configure script CONFIG_SRC = \ MKterm.h.awk \ curses.head \ ncurses_dll.h \ termcap.h \ unctrl.h # These files are generated by this makefile AUTO_SRC = \ curses.h \ hashsize.h \ ncurses_def.h \ parametrized.h \ config.h \ term.h ################################################################################ all \ libs \ depend \ sources \ install :: $(AUTO_SRC) curses.h : $(TERMINFO_CAPS) \ curses.head \ $(srcdir)/curses.tail \ $(srcdir)/MKkey_defs.sh cat curses.head >$@ AWK=$(AWK) $(SHELL) $(srcdir)/MKkey_defs.sh $(TERMINFO_CAPS) >>$@ $(SHELL) -c 'if test "@NCURSES_CH_T@" = "cchar_t" ; then cat $(srcdir)/curses.wide >>$@ ; fi' cat $(srcdir)/curses.tail >>$@ term.h: $(TERMINFO_CAPS) MKterm.h.awk $(AWK) -f MKterm.h.awk $(TERMINFO_CAPS) > $@ $(SHELL) $(srcdir)/edit_cfg.sh ../include/ncurses_cfg.h $@ hashsize.h: $(TERMINFO_CAPS) $(srcdir)/MKhashsize.sh $(SHELL) $(srcdir)/MKhashsize.sh $(TERMINFO_CAPS) >$@ ncurses_def.h: $(srcdir)/ncurses_defs $(srcdir)/MKncurses_def.sh AWK=$(AWK) $(SHELL) $(srcdir)/MKncurses_def.sh $(srcdir)/ncurses_defs >$@ parametrized.h: $(TERMINFO_CAPS) $(srcdir)/MKparametrized.sh AWK=$(AWK) $(SHELL) $(srcdir)/MKparametrized.sh $(TERMINFO_CAPS) >$@ # This is required by pthread.h on MinGW config.h: touch $@ tags: $(CTAGS) *.[ch] @MAKE_UPPER_TAGS@TAGS: @MAKE_UPPER_TAGS@ $(ETAGS) *.[ch] mostlyclean :: -rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace clean :: mostlyclean -rm -f $(AUTO_SRC) -rm -rf *.dSYM distclean :: clean -rm -f Makefile $(CONFIG_SRC) config.h realclean :: distclean ############################################################################### # The remainder of this file is automatically generated during configuration ############################################################################### ncurses-6.0-20160213/include/MKncurses_def.sh0000755000175100001440000000627007746521242017204 0ustar tomusers#! /bin/sh # $Id: MKncurses_def.sh,v 1.2 2003/10/25 16:19:46 tom Exp $ ############################################################################## # Copyright (c) 2000 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # MKncurses_def.sh -- generate fallback definitions for ncurses_cfg.h # # Author: Thomas E. Dickey 2000 # # Given the choice between constructs such as # # #if defined(foo) && foo # #if foo # # we chose the latter. It is guaranteed by the language standard, and there # appear to be no broken compilers that do not honor that detail. But some # people want to use gcc's -Wundef option (corresponding to one of the less # useful features in Watcom's compiler) to check for misspellings. So we # generate a set of fallback definitions to quiet the warnings without making # the code ugly. # DEFS="${1-ncurses_defs}" cat < line. 0 means varies magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix) width_status_line wsl num ws - - YB-G- number of columns in status line num_labels nlab num Nl - - ----- number of labels on screen label_height lh num lh - - ----- rows in each label label_width lw num lw - - ----- columns in each label max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle maximum_windows wnum num MW - - ----- maximum number of definable windows # These came in with SVr4's color support max_colors colors num Co - - ----- maximum number of colors on screen max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen no_color_video ncv num NC - - ----- video attributes that cannot be used with colors #%.TE #%.ad #% #%The following numeric capabilities are present in the SVr4.0 term structure, #%but are not yet documented in the man page. They came in with SVr4's #%printer support. #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBNumeric name Code\fR buffer_capacity bufsz num Ya - - ----- numbers of bytes buffered before printing dot_vert_spacing spinv num Yb - - ----- spacing of pins vertically in pins per inch dot_horz_spacing spinh num Yc - - ----- spacing of dots horizontally in dots per inch max_micro_address maddr num Yd - - ----- maximum value in micro_..._address max_micro_jump mjump num Ye - - ----- maximum value in parm_..._micro micro_col_size mcs num Yf - - ----- character step size when in micro mode micro_line_size mls num Yg - - ----- line step size when in micro mode number_of_pins npins num Yh - - ----- numbers of pins in print-head output_res_char orc num Yi - - ----- horizontal resolution in units per line output_res_line orl num Yj - - ----- vertical resolution in units per line output_res_horz_inch orhi num Yk - - ----- horizontal resolution in units per inch output_res_vert_inch orvi num Yl - - ----- vertical resolution in units per inch print_rate cps num Ym - - ----- print rate in characters per second wide_char_size widcs num Yn - - ----- character step size when in double wide mode buttons btns num BT - - ----- number of buttons on mouse bit_image_entwining bitwin num Yo - - ----- number of passes for each bit-image row bit_image_type bitype num Yp - - ----- type of bit-image device #%.TE #%.ad #% #%These are the string capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR back_tab cbt str bt - - YBCGE back tab (P) bell bel str bl - - YB-GE audible signal (bell) (P) carriage_return cr str cr - - YBCGE carriage return (P*) (P*) change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P) clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P) clear_screen clear str cl - - YBCGE clear screen and home cursor (P*) clr_eol el str ce - - YBCGE clear to end of line (P) clr_eos ed str cd - - YBCGE clear to end of screen (P*) column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P) command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !? cursor_address cup str cm - - YBCGE move to row #1 columns #2 cursor_down cud1 str do - - YBCGE down one line cursor_home home str ho - - YBCGE home cursor (if no cup) cursor_invisible civis str vi - - YB-G- make cursor invisible cursor_left cub1 str le - - YBCGE move left one space cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2 cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis) cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space) cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup) cursor_up cuu1 str up - - YBCGE up one line cursor_visible cvvis str vs - - YBCGE make cursor very visible delete_character dch1 str dc - - YBCGE delete character (P*) delete_line dl1 str dl - - YBCGE delete line (P*) dis_status_line dsl str ds - - YB-G- disable status line down_half_line hd str hd - - YB-G- half a line down enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P) enter_blink_mode blink str mb - - YB-G- turn on blinking enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode enter_ca_mode smcup str ti - - YBCGE string to start programs using cup enter_delete_mode smdc str dm - - YBCGE enter delete mode enter_dim_mode dim str mh - - YB-G- turn on half-bright mode enter_insert_mode smir str im - - YBCGE enter insert mode enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible) enter_protected_mode prot str mp - - -B-G-* turn on protected mode enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode enter_standout_mode smso str so - - YBCGE begin standout mode enter_underline_mode smul str us - - YBCGE begin underline mode erase_chars ech str ec - - YB-G- erase #1 characters (P) exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P) exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup exit_delete_mode rmdc str ed - - YBCGE end delete mode exit_insert_mode rmir str ei - - YBCGE exit insert mode exit_standout_mode rmso str se - - YBCGE exit standout mode exit_underline_mode rmul str ue - - YBCGE exit underline mode flash_screen flash str vb - - YBCGE visible bell (may not move cursor) form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*) from_status_line fsl str fs - - YB-G- return from status line init_1string is1 str i1 - - YB-G- initialization string init_2string is2 str is - - YB-G- initialization string init_3string is3 str i3 - - YB-G- initialization string init_file if str if - - YB-G- name of initialization file insert_character ich1 str ic - - YBCGE insert character (P) insert_line il1 str al - - YBCGE insert line (P*) insert_padding ip str ip - - YBCGE insert padding after inserted character key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key key_f10 kf10 str k; KEY_F(10) - ----E F10 function key key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key key_home khome str kh KEY_HOME 0406 YBCGE home key key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down) key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0 lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1 lab_f10 lf10 str la - - ----- label on function key f10 if not f10 lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2 lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3 lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4 lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5 lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6 lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7 lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8 lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9 meta_off rmm str mo - - YB-G-* turn off meta mode meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on) newline nel str nw - - YB-G-* newline (behave like cr followed by lf) pad_char pad str pc - - YBCGE padding char (instead of null) parm_dch dch str DC - - YB-GE delete #1 characters (P*) parm_delete_line dl str DL - - YBCGE delete #1 lines (P*) parm_down_cursor cud str DO - - YBCGE down #1 lines (P*) parm_ich ich str IC - - YB-GE insert #1 characters (P*) parm_index indn str SF - - YBCG- scroll forward #1 lines (P) parm_insert_line il str AL - - YBCGE insert #1 lines (P*) parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P) parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*) parm_rindex rin str SR - - YBCG- scroll back #1 lines (P) parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*) pkey_key pfkey str pk - - -B--- program function key #1 to type string #2 pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2 pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2 print_screen mc0 str ps - - -B-G-* print contents of screen prtr_off mc4 str pf - - -B-G-* turn off printer prtr_on mc5 str po - - -B-G-* turn on printer repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*) reset_1string rs1 str r1 - - -B--- reset string reset_2string rs2 str r2 - - -B--- reset string reset_3string rs3 str r3 - - -B--- reset string reset_file rf str rf - - -B--- name of reset file restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor row_address vpa str cv - - -B-GE* vertical position #1 absolute (P) save_cursor sc str sc - - YBCG- save current cursor position (P) scroll_forward ind str sf - - YBCGE scroll text up (P) scroll_reverse ri str sr - - YBCGE scroll text down (P) set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9) set_tab hts str st - - YB-G- set a tab in every row, current columns set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4 tab ht str ta - - YBCGE tab to next 8-space hardware tab stop to_status_line tsl str ts - - YB-G- move to status line, column #1 underline_char uc str uc - - YBCG- underline char and move past it up_half_line hu str hu - - YB-G- half a line up init_prog iprog str iP - - -B--- path name of program for initialization key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes # # IBM extensions # # These extensions follow ptr_non (replacing everything after it) in IBM # terminfo files. # # The places in the box[12] capabilities correspond to acsc characters, here is # the mapping: # # box1[0] = ACS_ULCORNER # box1[1] = ACS_HLINE # box1[2] = ACS_URCORNER # box1[3] = ACS_VLINE # box1[4] = ACS_LRCORNER # box1[5] = ACS_LLCORNER # box1[6] = ACS_TTEE # box1[7] = ACS_RTEE # box1[8] = ACS_BTEE # box1[9] = ACS_LTEE # box1[10] = ACS_PLUS # # The box2 characters are the double-line versions of these forms graphics. # box_chars_1 box1 str bx - - ----K box characters primary set box_chars_2 box2 str by - - ----K box characters secondary set box_attr_1 batt1 str Bx - - ----K attributes for box1 box_attr_2 batt2 str By - - ----K attributes for box2 color_bg_0 colb0 str d0 - - ----K background color 0 color_bg_1 colb1 str d1 - - ----K background color 1 color_bg_2 colb2 str d2 - - ----K background color 2 color_bg_3 colb3 str d3 - - ----K background color 3 color_bg_4 colb4 str d4 - - ----K background color 4 color_bg_5 colb5 str d5 - - ----K background color 5 color_bg_6 colb6 str d6 - - ----K background color 6 color_bg_7 colb7 str d7 - - ----K background color 7 color_fg_0 colf0 str c0 - - ----K foreground color 0 color_fg_1 colf1 str c1 - - ----K foreground color 1 color_fg_2 colf2 str c2 - - ----K foreground color 2 color_fg_3 colf3 str c3 - - ----K foreground color 3 color_fg_4 colf4 str c4 - - ----K foreground color 4 color_fg_5 colf5 str c5 - - ----K foreground color 5 color_fg_6 colf6 str c6 - - ----K foreground color 6 color_fg_7 colf7 str c7 - - ----K foreground color 7 font_0 font0 str f0 - - ----K select font 0 font_1 font1 str f1 - - ----K select font 1 font_2 font2 str f2 - - ----K select font 2 font_3 font3 str f3 - - ----K select font 3 font_4 font4 str f4 - - ----K select font 4 font_5 font5 str f5 - - ----K select font 5 font_6 font6 str f6 - - ----K select font 6 font_7 font7 str f7 - - ----K select font 7 key_back_tab kbtab str k0 - - ----K backtab key key_do kdo str ki - - ----K do request key key_command kcmd str kd - - ----K command-request key key_command_pane kcpn str kW - - ----K command-pane key key_end kend str kw KEY_END 0550 ----- end key key_help khlp str kq - - ----- help key key_newline knl str nl - - ----K newline key key_next_pane knpn str kv - - ----K next-pane key key_prev_cmd kppn str kp - - ----K previous-command key key_prev_pane kppn str kV - - ----K previous-pane key key_quit kquit str kQ - - ----K quit key key_select_aix ksel str kU - - ----- select key key_scroll_left kscl str kz - - ----K scroll left key_scroll_right kscr str kZ - - ----K scroll right key_tab ktab str ko - - ----K tab key key_smap_in1 kmpf1 str Kv - - ----K special mapped key 1 input key_smap_out1 kmpt1 str KV - - ----K special mapped key 1 output key_smap_in2 kmpf2 str Kw - - ----K special mapped key 2 input key_smap_out2 kmpt2 str KW - - ----K special mapped key 2 output key_smap_in3 kmpf3 str Kx - - ----K special mapped key 3 input key_smap_out3 kmpt3 str KX - - ----K special mapped key 3 output key_smap_in4 kmpf4 str Ky - - ----K special mapped key 4 input key_smap_out4 kmpt4 str KY - - ----K special mapped key 4 output key_smap_in5 kmpf5 str Kz - - ----K special mapped key 5 input key_smap_out5 kmpt5 str KZ - - ----K special mapped key 5 output appl_defined_str apstr str za - - ----K application-defined string key_smap_in6 kmpf6 str kr - - ----K special mapped key 6 input key_smap_out6 kmpt6 str KR - - ----K special mapped key 6 output key_smap_in7 kmpf7 str ks - - ----K special mapped key 7 input key_smap_out7 kmpt7 str KS - - ----K special mapped key 7 output key_smap_in8 kmpf8 str kt - - ----K special mapped key 8 input key_smap_out8 kmpt8 str KT - - ----K special mapped key 8 output key_smap_in9 kmpf9 str ku - - ----K special mapped key 9 input key_smap_out9 kmpt9 str KU - - ----K special mapped key 9 output key_sf1 ksf1 str S1 - - ----K special function key 1 key_sf2 ksf2 str S2 - - ----K special function key 2 key_sf3 ksf3 str S3 - - ----K special function key 3 key_sf4 ksf4 str S4 - - ----K special function key 4 key_sf5 ksf5 str S5 - - ----K special function key 5 key_sf6 ksf6 str S6 - - ----K special function key 6 key_sf7 ksf7 str S7 - - ----K special function key 7 key_sf8 ksf8 str S8 - - ----K special function key 8 key_sf9 ksf9 str S9 - - ----K special function key 9 key_sf10 ksf10 str S0 - - ----K special function key 10 key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key key_f20 kf20 str FA KEY_F(20) - ----E F20 function key key_f21 kf21 str FB KEY_F(21) - ----E F21 function key key_f22 kf22 str FC KEY_F(22) - ----E F22 function key key_f23 kf23 str FD KEY_F(23) - ----E F23 function key key_f24 kf24 str FE KEY_F(24) - ----E F24 function key key_f25 kf25 str FF KEY_F(25) - ----E F25 function key key_f26 kf26 str FG KEY_F(26) - ----E F26 function key key_f27 kf27 str FH KEY_F(27) - ----E F27 function key key_f28 kf28 str FI KEY_F(28) - ----E F28 function key key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key key_f30 kf30 str FK KEY_F(30) - ----E F30 function key key_f31 kf31 str FL KEY_F(31) - ----E F31 function key key_f32 kf32 str FM KEY_F(32) - ----E F32 function key key_f33 kf33 str FN KEY_F(33) - ----E F33 function key key_f34 kf34 str FO KEY_F(34) - ----E F34 function key key_f35 kf35 str FP KEY_F(35) - ----E F35 function key key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key key_f37 kf37 str FR KEY_F(37) - ----E F37 function key key_f38 kf38 str FS KEY_F(38) - ----E F38 function key key_f39 kf39 str FT KEY_F(39) - ----E F39 function key key_f40 kf40 str FU KEY_F(40) - ----E F40 function key key_f41 kf41 str FV KEY_F(41) - ----E F41 function key key_f42 kf42 str FW KEY_F(42) - ----E F42 function key key_f43 kf43 str FX KEY_F(43) - ----E F43 function key key_f44 kf44 str FY KEY_F(44) - ----E F44 function key key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key key_action kact str kJ - - ----K sent by action key # The IBM docs say these capabilities are for table-drawing, and are # valid only for aixterm descriptions. enter_topline_mode topl str tp - - ----K start top-line mode enter_bottom_mode btml str bm - - ----K start bottom-line mode enter_rvert_mode rvert str rv - - ----K start right-vertical mode enter_lvert_mode lvert str lv - - ----K start left-vertical mode # # SVr4 capabilities resume here. Note that key_end is in the IBM-extensions. # char_padding rmp str rP - - ----- like ip but when in insert mode acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100 plab_norm pln str pn - - ----- program label #1 to show string #2 key_btab kcbt str kB KEY_BTAB 0541 ----- back-tab key enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking enter_am_mode smam str SA - - ----- turn on automatic margins exit_am_mode rmam str RA - - ----- turn off automatic margins xon_character xonc str XN - - ----- XON character xoff_character xoffc str XF - - ----- XOFF character ena_acs enacs str eA - - ----- enable alternate char set label_on smln str LO - - ----- turn on soft labels label_off rmln str LF - - ----- turn off soft labels key_beg kbeg str @1 KEY_BEG 0542 ----- begin key key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key key_close kclo str @3 KEY_CLOSE 0544 ----- close key #key_command kcmd str @4 KEY_COMMAND 0545 ----- command key key_copy kcpy str @5 KEY_COPY 0546 ----- copy key key_create kcrt str @6 KEY_CREATE 0547 ----- create key #key_end kend str @7 KEY_END 0550 ----- end key key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key key_exit kext str @9 KEY_EXIT 0551 ----- exit key key_find kfnd str @0 KEY_FIND 0552 ----- find key #key_help khlp str %1 KEY_HELP 0553 ----- help key key_mark kmrk str %2 KEY_MARK 0554 ----- mark key key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key key_move kmov str %4 KEY_MOVE 0556 ----- move key key_next knxt str %5 KEY_NEXT 0557 ----- next key key_open kopn str %6 KEY_OPEN 0560 ----- open key key_options kopt str %7 KEY_OPTIONS 0561 ----- options key key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key key_print kprt str %9 KEY_PRINT 0532 ----- print key key_redo krdo str %0 KEY_REDO 0563 ----- redo key key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key key_restart krst str &4 KEY_RESTART 0567 ----- restart key key_resume kres str &5 KEY_RESUME 0570 ----- resume key key_save ksav str &6 KEY_SAVE 0571 ----- save key key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key key_undo kund str &8 KEY_UNDO 0630 ----- undo key key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key key_select kslt str *6 KEY_SELECT 0601 ----- select key key_send kEND str *7 KEY_SEND 0602 ----- shifted end key key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key req_for_input rfi str RF - - ----- send next input char (for ptys) clr_bol el1 str cb - - ----- Clear to beginning of line clear_margins mgc str MC - - ----- clear right and left soft margins set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap). set_right_margin smgr str MR - - ----- set right soft margin at current column label_format fln str Lf - - ----- label format set_clock sclk str SC - - ----- set clock, #1 hrs #2 mins #3 secs display_clock dclk str DK - - ----- display clock remove_clock rmclk str RC - - ----- remove clock create_window cwin str CW - - ----- define a window #1 from #2,#3 to #4,#5 goto_window wingo str WG - - ----- go to window #1 hangup hup str HU - - ----- hang-up phone dial_phone dial str DI - - ----- dial number #1 quick_dial qdial str QD - - ----- dial number #1 without checking tone tone str TO - - ----- select touch tone dialing pulse pulse str PU - - ----- select pulse dialing flash_hook hook str fh - - ----- flash switch hook fixed_pause pause str PA - - ----- pause for 2-3 seconds wait_tone wait str WA - - ----- wait for dial-tone user0 u0 str u0 - - ----- User string #0 user1 u1 str u1 - - ----- User string #1 user2 u2 str u2 - - ----- User string #2 user3 u3 str u3 - - ----- User string #3 user4 u4 str u4 - - ----- User string #4 user5 u5 str u5 - - ----- User string #5 user6 u6 str u6 - - ----- User string #6 user7 u7 str u7 - - ----- User string #7 user8 u8 str u8 - - ----- User string #8 user9 u9 str u9 - - ----- User string #9 # # SVr4 added these capabilities to support color # orig_pair op str op - - ----- Set default pair to its original value orig_colors oc str oc - - ----- Set all color pairs to the original ones initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4) initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7) set_color_pair scp str sp - - ----- Set current color pair to #1 set_foreground setf str Sf - - ----- Set foreground color #1 set_background setb str Sb - - ----- Set background color #1 # # SVr4 added these capabilities to support printers # change_char_pitch cpi str ZA - - ----- Change number of characters per inch to #1 change_line_pitch lpi str ZB - - ----- Change number of lines per inch to #1 change_res_horz chr str ZC - - ----- Change horizontal resolution to #1 change_res_vert cvr str ZD - - ----- Change vertical resolution to #1 define_char defc str ZE - - ----- Define a character #1, #2 dots wide, descender #3 enter_doublewide_mode swidm str ZF - - ----- Enter double-wide mode enter_draft_quality sdrfq str ZG - - ----- Enter draft-quality mode enter_italics_mode sitm str ZH - - ----- Enter italic mode enter_leftward_mode slm str ZI - - ----- Start leftward carriage motion enter_micro_mode smicm str ZJ - - ----- Start micro-motion mode enter_near_letter_quality snlq str ZK - - ----- Enter NLQ mode enter_normal_quality snrmq str ZL - - ----- Enter normal-quality mode enter_shadow_mode sshm str ZM - - ----- Enter shadow-print mode enter_subscript_mode ssubm str ZN - - ----- Enter subscript mode enter_superscript_mode ssupm str ZO - - ----- Enter superscript mode enter_upward_mode sum str ZP - - ----- Start upward carriage motion exit_doublewide_mode rwidm str ZQ - - ----- End double-wide mode exit_italics_mode ritm str ZR - - ----- End italic mode exit_leftward_mode rlm str ZS - - ----- End left-motion mode exit_micro_mode rmicm str ZT - - ----- End micro-motion mode exit_shadow_mode rshm str ZU - - ----- End shadow-print mode exit_subscript_mode rsubm str ZV - - ----- End subscript mode exit_superscript_mode rsupm str ZW - - ----- End superscript mode exit_upward_mode rum str ZX - - ----- End reverse character motion micro_column_address mhpa str ZY - - ----- Like column_address in micro mode micro_down mcud1 str ZZ - - ----- Like cursor_down in micro mode micro_left mcub1 str Za - - ----- Like cursor_left in micro mode micro_right mcuf1 str Zb - - ----- Like cursor_right in micro mode micro_row_address mvpa str Zc - - ----- Like row_address #1 in micro mode micro_up mcuu1 str Zd - - ----- Like cursor_up in micro mode order_of_pins porder str Ze - - ----- Match software bits to print-head pins parm_down_micro mcud str Zf - - ----- Like parm_down_cursor in micro mode parm_left_micro mcub str Zg - - ----- Like parm_left_cursor in micro mode parm_right_micro mcuf str Zh - - ----- Like parm_right_cursor in micro mode parm_up_micro mcuu str Zi - - ----- Like parm_up_cursor in micro mode select_char_set scs str Zj - - ----- Select character set, #1 set_bottom_margin smgb str Zk - - ----- Set bottom margin at current line set_bottom_margin_parm smgbp str Zl - - ----- Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom set_left_margin_parm smglp str Zm - - ----- Set left (right) margin at column #1 set_right_margin_parm smgrp str Zn - - ----- Set right margin at column #1 set_top_margin smgt str Zo - - ----- Set top margin at current line set_top_margin_parm smgtp str Zp - - ----- Set top (bottom) margin at row #1 start_bit_image sbim str Zq - - ----- Start printing bit image graphics start_char_set_def scsd str Zr - - ----- Start character set definition #1, with #2 characters in the set stop_bit_image rbim str Zs - - ----- Stop printing bit image graphics stop_char_set_def rcsd str Zt - - ----- End definition of character set #1 subscript_characters subcs str Zu - - ----- List of subscriptable characters superscript_characters supcs str Zv - - ----- List of superscriptable characters these_cause_cr docr str Zw - - ----- Printing any of these characters causes CR zero_motion zerom str Zx - - ----- No motion for subsequent character #%.TE #%.ad #% #%The following string capabilities are present in the SVr4.0 term structure, #%but were originally not documented in the man page. #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw18. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR char_set_names csnm str Zy - - ----- Produce #1'th item from list of character set names key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred mouse_info minfo str Mi - - ----- Mouse status information req_mouse_pos reqmp str RQ - - ----- Request mouse position get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented. set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape pkey_plab pfxl str xl - - ----- Program function key #1 to type string #2 and show string #3 device_type devt str dv - - ----- Indicate language/codeset support code_set_init csin str ci - - ----- Init sequence for multiple codesets set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII) set1_des_seq s1ds str s1 - - ----- Shift to codeset 1 set2_des_seq s2ds str s2 - - ----- Shift to codeset 2 set3_des_seq s3ds str s3 - - ----- Shift to codeset 3 set_lr_margin smglr str ML - - ----- Set both left and right margins to #1, #2. (ML is not in BSD termcap). set_tb_margin smgtb str MT - - ----- Sets both top and bottom margins to #1, #2 bit_image_repeat birep str Xy - - ----- Repeat bit image cell #1 #2 times bit_image_newline binel str Zz - - ----- Move to next row of the bit image bit_image_carriage_return bicr str Yv - - ----- Move to beginning of same row color_names colornm str Yw - - ----- Give name for color #1 define_bit_image_region defbi str Yx - - ----- Define rectangular bit image region end_bit_image_region endbi str Yy - - ----- End a bit-image region set_color_band setcolor str Yz - - ----- Change to ribbon color #1 set_page_length slines str YZ - - ----- Set page length to #1 lines # # SVr4 added these capabilities for direct PC-clone support # display_pc_char dispc str S1 - - ----- Display PC character #1 enter_pc_charset_mode smpch str S2 - - ----- Enter PC character display mode exit_pc_charset_mode rmpch str S3 - - ----- Exit PC character display mode enter_scancode_mode smsc str S4 - - ----- Enter PC scancode mode exit_scancode_mode rmsc str S5 - - ----- Exit PC scancode mode pc_term_options pctrm str S6 - - ----- PC terminal options scancode_escape scesc str S7 - - ----- Escape for scancode emulation alt_scancode_esc scesa str S8 - - ----- Alternate escape for scancode emulation #%.TE #%.ad #% #%.in .8i #%The XSI Curses standard added these hardcopy capabilities. #%They were used in some post-4.1 versions of System V curses, #%e.g., Solaris 2.5 and IRIX 6.x. #%Except for \fBYI\fP, the \fBncurses\fR termcap names for them are invented. #%According to the XSI Curses standard, they have no termcap names. #%If your compiled terminfo entries use these, #%they may not be binary-compatible with System V terminfo #%entries after SVr4.1; beware! #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR enter_horizontal_hl_mode ehhlm str Xh - - ----- Enter horizontal highlight mode enter_left_hl_mode elhlm str Xl - - ----- Enter left highlight mode enter_low_hl_mode elohlm str Xo - - ----- Enter low highlight mode enter_right_hl_mode erhlm str Xr - - ----- Enter right highlight mode enter_top_hl_mode ethlm str Xt - - ----- Enter top highlight mode enter_vertical_hl_mode evhlm str Xv - - ----- Enter vertical highlight mode set_a_attributes sgr1 str sA - - ----- Define second set of video attributes #1-#6 set_pglen_inch slength str YI - - ----- Set page length to #1 hundredth of an inch (some implementations use sL for termcap). #%.TE #%.ad # # The magic token below tells the tic compiler-generator code that all the caps # past it should be ignored (not written out) when dumping terminfo objects. It # also tells the man page table generator not to pass through following lines # This means we can have obsolete capabilities and pseudo-capabilities that are # recognized for termcap or terminfo compilation, but not output. # # %%-STOP-HERE-%% # # Don't move this casually! In fact, don't move it at all unless you're # either doing it to add System V or XPG4 extensions, or have decided you # don't care about SVr4 binary compatibility. # ############################################################################# # # TERMCAP EXTENSION CAPABILITIES # # The capabilities below are either obsolete or extensions on certain systems. # They are not used by SVR4 terminfo. Some are used by captoinfo to translate # termcap sources; the rest are listed for completeness, and in case somebody # cares about them enough to hack in code that will translate them into # terminfo capabilities. # # The first part of the list is from Ross Ridge's `mytinfo' package # (comp.sources.unix, volume 26); the variable names and terminfo names (as # well as the termcap codes) match his list. # # This group of codes is not marked obsolete in 4.4BSD, but have no direct # terminfo equivalents. The rs capability is specially translated to terminfo # r2, and vice versa, if an entry does not already have an r2. Similarly, # i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2). # The ug capability is thrown away, but assumed to be whatever sg is if the # latter is nonzero and we're dumping in termcap format. # termcap_init2 OTi2 str i2 - - YB--- secondary initialization string termcap_reset OTrs str rs - - YB-G- terminal reset string magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul # # Obsolete termcap capabilities. Some are used for termcap translation. The # code uses the 'OT' prefix we put on obsolete capabilities to suppress # printing them in terminfo source dumps of compiled entries. # backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line carriage_return_delay OTdC num dC - - YB-G- pad needed for CR new_line_delay OTdN num dN - - YB-G- pad needed for LF linefeed_if_not_lf OTnl str nl - - YBCGE use to move down backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H # # GNU termcap library extensions. The GNU termcap file distributed with # Emacs no longer uses these, but MT showed up in pre-9.0 versions of the # BSD termcap file. The name clash with terminfo MT is resolved by type # info; MT is converted to km. # gnu_has_meta_key OTMT bool MT - - ----E has meta key # gnu_tab_width OTtw num tw - - ----E tab width in spaces # # GNU termcap *does* include the following extended capability, Only the # now-obsolete Ann Arbor terminals used it. # # gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region # # The following comments describe capnames so ancient that I believe no # software uses them any longer. Some of these have to go because they # clash with terminfo names in ways that cannot be resolved by type # information. # # These mytinfo codes are not used in the 4.4BSD curses code. They are # marked obsolete in the 4.4BSD manual pages. # # There is one conflict with terminfo; ma is in both. This conflict is # resolved by type information. # # The `ko' capability is translated by special code. It should contain a # comma-separated list of capabilities for which there are corresponding keys. # The `kn' code is accepted but ignored. # # The `ma' capability seems to have been designed to map between the rogue(2) # motion keys (including jkhl) and characters emitted by arrow keys on some # primitive pre-ANSI terminals. It's so obsolete it's fossilized... # # Here is a description of memory_lock_above and memory_unlock: # "You can 'freeze' data on the screen by turning on Memory Lock in a line of # text. All lines above the cursor's current line become locked in place on # the screen. Then enter data normally. When the screen fills up, any # further data entered forces the first line of unfrozen line text to scroll # under the frozen data. Lines scrolled off the screen are inserted into # memory immediately preceding the first frozen line." (from the HP 700/96 # User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l. # # Applications that use terminfo are supposed to behave as though xr is # always true. # linefeed_is_newline OTNL bool NL - - YB--- move down with \n # even_parity OTEP bool EP - - -B--- terminal requires even parity # odd_parity OTOP bool OP - - -B--- terminal requires odd parity # half_duplex OTHD bool HD - - -B--- terminal is half-duplex # lower_case_only OTLC bool LC - - -B--- terminal has only lower case # upper_case_only OTUC bool UC - - -B--- terminal has only upper case backspace_delay OTdB num dB - - YB-G- padding required for ^H # form_feed_delay OTdF num dF - - -B-G- padding required for ^L horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I # vertical_tab_delay OTdV num dV - - -B--- padding required for ^V number_of_function_keys OTkn num kn - - -B-G- count of function keys other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps arrow_key_map OTma str ma - - YBC-- map arrow keys rogue(1) motion keys # memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line # memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I return_does_clr_eol OTxr bool xr - - YB--- return clears the line # tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch # # mytinfo described this as a termcap capability, but it's not listed in the # 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses # package, like System V, behaves as though it is always true. # # rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line # # University of Waterloo termcap extensions (as described in mytinfo). # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot # be resolved by a type check. The descriptions are guesses from what was # in the mytinfo tables. # # key_interrupt_char OTki str ki - - ----- string set by interrupt key (?) # key_kill_char OTkk str kk - - ----- string set by kill key (?) # key_suspend_char OTkz str kz - - ----- string set by suspend key (?) # initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?) # ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return # # Nonstandard capabilities unique to Ross Ridge's `mytinfo' package. # SR clashes with a terminfo name; this ambiguity cannot be resolved by a type # check. # # scroll_left OTsl1 str Sl - - ----- scroll screen leftward # scroll_right OTsr1 str Sr - - ----- scroll screen rightward # parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters # parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters # # The mytinfo capabilities end here. # # XENIX extensions: # # Xenix defined its own set of forms-drawing capabilities: # # cap IBM ASCII description ACS ASCII # --- ----------- -------------------- ------------- ------ # G1 191 \277 M-? single upper right ACS_URCORNER # G2 218 \332 M-Z single upper left ACS_ULCORNER # G3 192 \300 M-@ single lower left ACS_LLCORNER # G4 217 \331 M-Y single lower right ACS_LRCORNER # G5 187 \273 M-; double upper right # G6 201 \311 M-I double upper left # G7 200 \310 M-H double lower left # G8 188 \274 M-< double lower right # GC 197 \305 M-E single intersection ACS_PLUS _ _ # GD 194 \302 M-B single down-tick ACS_TTEE | # GH 196 \304 M-D single horizontal line ACS_HLINE # GL 180 \264 M-4 single left tick ACS_RTEE -| # GR 195 \303 M-C single right tick ACS_LTEE |- # GU 193 \301 M-A single up tick ACS_BTEE _|_ # GV 179 \263 M-3 single vertical line ACS_VLINE # Gc 206 \316 M-N double intersection # Gd 203 \313 M-K double down tick # Gh 205 \315 M-M double horizontal line # Gl 204 \204 M-L double left tick # Gr 185 \271 M-9 double right tick # Gu 202 \312 M-J double up tick # Gv 186 \272 M-: double vertical line # # The compiler will translate the single-line caps and discard the others # (via IGNORE aliases further down). We don't want to do normal pad # translation on these, they're often single-character printable ASCII # strings that happen to be numerics. There's awk code in parametrized.sh # that detects the acs_ prefix and uses it to suppress pad translation. # These terminfo names are invented. # acs_ulcorner OTG2 str G2 - - ----- single upper left acs_llcorner OTG3 str G3 - - ----- single lower left acs_urcorner OTG1 str G1 - - ----- single upper right acs_lrcorner OTG4 str G4 - - ----- single lower right acs_ltee OTGR str GR - - ----- tee pointing right acs_rtee OTGL str GL - - ----- tee pointing left acs_btee OTGU str GU - - ----- tee pointing up acs_ttee OTGD str GD - - ----- tee pointing down acs_hline OTGH str GH - - ----- single horizontal line acs_vline OTGV str GV - - ----- single vertical line acs_plus OTGC str GC - - ----- single intersection # ############################################################################# # # TERMINFO EXTENSION CAPABILITIES # # This section is almost all comments. What it's mainly for is to describe # what capabilities need to be squeezed out to get down to the XSI Curses # standard set. They are flagged with K. # # HP extensions # # These extensions follow ptr_non (replacing everything after it) in HP # terminfo files. Except for memory_lock and memory_unlock, they are # functionally identical to SVr4 extensions, but they make the binary format # different. Grrr.... # memory_lock meml str ml - - ----K lock memory above cursor memory_unlock memu str mu - - ----K unlock memory #plab_norm pln str pn - - ----- program label #1 to show string #2 #label_on smln str LO - - ----- turn on soft labels #label_off rmln str LF - - ----- turn off soft labels #key_f11 kf11 str F1 - - ----- F11 function key #key_f12 kf12 str F2 - - ----- F12 function key #key_f13 kf13 str F3 - - ----- F13 function key #key_f14 kf14 str F4 - - ----- F14 function key #key_f15 kf15 str F5 - - ----- F15 function key #key_f16 kf16 str F6 - - ----- F16 function key #key_f17 kf17 str F7 - - ----- F17 function key #key_f18 kf18 str F8 - - ----- F18 function key #key_f19 kf19 str F9 - - ----- F19 function key #key_f20 kf20 str FA - - ----- F20 function key #key_f21 kf21 str FB - - ----- F21 function key #key_f22 kf22 str FC - - ----- F22 function key #key_f23 kf23 str FD - - ----- F23 function key #key_f24 kf24 str FE - - ----- F24 function key #key_f25 kf25 str FF - - ----- F25 function key #key_f26 kf26 str FG - - ----- F26 function key #key_f27 kf27 str FH - - ----- F27 function key #key_f28 kf28 str FI - - ----- F28 function key #key_f29 kf29 str FJ - - ----- F29 function key #key_f30 kf30 str FK - - ----- F30 function key #key_f31 kf31 str FL - - ----- F31 function key #key_f32 kf32 str FM - - ----- F32 function key #key_f33 kf33 str FN - - ----- F33 function key #key_f34 kf34 str FO - - ----- F34 function key #key_f35 kf35 str FP - - ----- F35 function key #key_f36 kf36 str FQ - - ----- F36 function key #key_f37 kf37 str FR - - ----- F37 function key #key_f38 kf38 str FS - - ----- F38 function key #key_f39 kf39 str FT - - ----- F39 function key #key_f40 kf40 str FU - - ----- F40 function key #key_f41 kf41 str FV - - ----- F41 function key #key_f42 kf42 str FW - - ----- F42 function key #key_f43 kf43 str FX - - ----- F43 function key #key_f44 kf44 str FY - - ----- F44 function key #key_f45 kf45 str FZ - - ----- F45 function key #key_f46 kf46 str Fa - - ----- F46 function key #key_f47 kf47 str Fb - - ----- F47 function key #key_f48 kf48 str Fc - - ----- F48 function key #key_f49 kf49 str Fd - - ----- F49 function key #key_f50 kf50 str Fe - - ----- F50 function key #key_f51 kf51 str Ff - - ----- F51 function key #key_f52 kf52 str Fg - - ----- F52 function key #key_f53 kf53 str Fh - - ----- F53 function key #key_f54 kf54 str Fi - - ----- F54 function key #key_f55 kf55 str Fj - - ----- F55 function key #key_f56 kf56 str Fk - - ----- F56 function key #key_f57 kf57 str Fl - - ----- F57 function key #key_f58 kf58 str Fm - - ----- F58 function key #key_f59 kf59 str Fn - - ----- F59 function key #key_f60 kf60 str Fo - - ----- F60 function key #key_f61 kf61 str Fp - - ----- F61 function key #key_f62 kf62 str Fq - - ----- F62 function key #key_f63 kf63 str Fr - - ----- F63 function key # ############################################################################# # # ALIAS DECLARATIONS # # Here we set up aliases for translating extensions into standard terminfo. # #---------------------------------- Termcap aliases ------------------------- # # BSD aliases: # # This is a common error in many termcap files. We'll get notified during # translation when this (or any other alias) fires. # capalias sb sr BSD scroll text down # # AT&T extensions: # # The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of # nonstandard capabilities. Its signature is the KM capability, used to name # some sort of keymap file. EE, BO, CI, CV, XS, DS, FL and FE are in this # set. Comments in the original, and a little cross-checking with other AT&T # documentation, seem to establish the following mappings: # capalias BO mr AT&T enter_reverse_mode capalias CI vi AT&T cursor_invisible capalias CV ve AT&T cursor_normal capalias DS mh AT&T enter_dim_mode #capalias EE me AT&T exit_attribute_mode capalias FE LF AT&T label_on capalias FL LO AT&T label_off capalias XS mk AT&T enter_secure_mode # # We comment out EE because the conflicting XENIX EE is more common in # old entries. # # XENIX extensions: # # These are the ones we know how to translate directly: # capalias EE mh XENIX exit_attribute_mode capalias GE ae XENIX exit_alt_charset_mode capalias GS as XENIX enter_alt_charset_mode capalias CF vi XENIX cursor_invis capalias CO ve XENIX cursor_normal capalias EN @7 XENIX key_end capalias HM kh XENIX key_home capalias LD kL XENIX key_dl capalias PD kN XENIX key_npage capalias PN po XENIX prtr_off capalias PS pf XENIX prtr_on capalias PU kP XENIX key_ppage capalias RT @8 XENIX kent capalias UP ku XENIX kcuu1 capalias G6 IGNORE XENIX double-ACS_ULCORNER capalias G7 IGNORE XENIX double-ACS_LLCORNER capalias G5 IGNORE XENIX double-ACS_URCORNER capalias G8 IGNORE XENIX double-ACS_LRCORNER capalias Gr IGNORE XENIX double-ACS_LTEE capalias Gr IGNORE XENIX double-ACS_RTEE capalias Gu IGNORE XENIX double-ACS_BTEE capalias Gd IGNORE XENIX double ACS_TTEE capalias Gh IGNORE XENIX double-ACS_HLINE capalias Gv IGNORE XENIX double-ACS_VLINE capalias Gc IGNORE XENIX double-ACS_PLUS capalias GG IGNORE XENIX acs-glitch # # IBM extensions: # capalias kq %1 IBM key_help # # Iris extensions: # capalias HS mh IRIS enter_dim_mode # # Tektronix extensions: # capalias KA k; Tek key_f10 capalias KB F1 Tek key_f11 capalias KC F2 Tek key_f12 capalias KD F3 Tek key_f13 capalias KE F4 Tek key_f14 capalias KF F5 Tek key_f15 capalias BC Sb Tek set_background capalias FC Sf Tek set_foreground # # There are also the following: # # XENIX XENIX variable name name clash with terminfo? # ----- ------------------- ------------------------- # CL key_char_left # CR key_char_right # CW key_change_window # HP ?? # LF key_linefeed label_off # NU key_next_unlocked_cell # PL ?? # PR ?? # RC key_recalc remove_clock # RF key_toggle_ref req_for_input # WL key_word_left # WR key_word_right # # If you know what any of the question-marked ones mean, please tell us. # #--------------------------------- Terminfo aliases ------------------------ # # IBM extensions: # infoalias font0 s0ds IBM set0_des_seq infoalias font1 s1ds IBM set1_des_seq infoalias font2 s2ds IBM set2_des_seq infoalias font3 s3ds IBM set3_des_seq infoalias kbtab kcbt IBM key_backtab infoalias ksel kslt IBM key_select # # Some others are identical to SVr4/XPG4 capabilities, in particular: # kcmd, kend, khlp, and kf11...kf63. # ############################################################################# ncurses-6.0-20160213/include/capdefaults.c0000644000175100001440000001030211107663457016544 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2008 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* $Id: capdefaults.c,v 1.14 2008/11/16 00:19:59 juergen Exp $ */ /* * Compute obsolete capabilities. The reason this is an include file is * that the two places where it's needed want the macros to generate * offsets to different structures. See the file Caps for explanations of * these conversions. * * Note: This code is the functional inverse of the first part of * postprocess_termcap(). */ { char *strp; short capval; #define EXTRACT_DELAY(str) \ (short) (strp = strchr(str, '*'), strp ? atoi(strp+1) : 0) /* current (4.4BSD) capabilities marked obsolete */ if (VALID_STRING(carriage_return) && (capval = EXTRACT_DELAY(carriage_return))) carriage_return_delay = capval; if (VALID_STRING(newline) && (capval = EXTRACT_DELAY(newline))) new_line_delay = capval; /* current (4.4BSD) capabilities not obsolete */ if (!VALID_STRING(termcap_init2) && VALID_STRING(init_3string)) { termcap_init2 = init_3string; init_3string = ABSENT_STRING; } if (!VALID_STRING(termcap_reset) && VALID_STRING(reset_2string) && !VALID_STRING(reset_1string) && !VALID_STRING(reset_3string)) { termcap_reset = reset_2string; reset_2string = ABSENT_STRING; } if (magic_cookie_glitch_ul == ABSENT_NUMERIC && magic_cookie_glitch != ABSENT_NUMERIC && VALID_STRING(enter_underline_mode)) magic_cookie_glitch_ul = magic_cookie_glitch; /* totally obsolete capabilities */ linefeed_is_newline = (char) (VALID_STRING(newline) && (strcmp("\n", newline) == 0)); if (VALID_STRING(cursor_left) && (capval = EXTRACT_DELAY(cursor_left))) backspace_delay = capval; if (VALID_STRING(tab) && (capval = EXTRACT_DELAY(tab))) horizontal_tab_delay = capval; #undef EXTRACT_DELAY } ncurses-6.0-20160213/include/nc_mingw.h0000644000175100001440000000607511447472254016073 0ustar tomusers/**************************************************************************** * Copyright (c) 2008-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas Dickey, 2008-on * * * ****************************************************************************/ /* $Id: nc_mingw.h,v 1.3 2010/09/25 22:16:12 juergen Exp $ */ #ifndef NC_MINGW_H #define NC_MINGW_H 1 #ifdef WINVER # if WINVER < 0x0501 # error WINVER must at least be 0x0501 # endif #else # define WINVER 0x0501 #endif #include #undef sleep #define sleep(n) Sleep((n) * 1000) #undef gettimeofday #define gettimeofday(tv,tz) _nc_gettimeofday(tv,tz) #include /* for struct timeval */ extern int _nc_gettimeofday(struct timeval *, void *); #undef HAVE_GETTIMEOFDAY #define HAVE_GETTIMEOFDAY 1 #define SIGHUP 1 #define SIGKILL 9 #define getlogin() "username" #undef wcwidth #define wcwidth(ucs) _nc_wcwidth(ucs) extern int _nc_wcwidth(wchar_t); #endif /* NC_MINGW_H */ ncurses-6.0-20160213/include/curses.h.in0000644000175100001440000020351112650776257016204 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* $Id: curses.h.in,v 1.243 2016/01/23 22:20:31 tom Exp $ */ #ifndef __NCURSES_H #define __NCURSES_H #define CURSES 1 #define CURSES_H 1 /* These are defined only in curses.h, and are used for conditional compiles */ #define NCURSES_VERSION_MAJOR @NCURSES_MAJOR@ #define NCURSES_VERSION_MINOR @NCURSES_MINOR@ #define NCURSES_VERSION_PATCH @NCURSES_PATCH@ /* This is defined in more than one ncurses header, for identification */ #undef NCURSES_VERSION #define NCURSES_VERSION "@NCURSES_MAJOR@.@NCURSES_MINOR@" /* * Identify the mouse encoding version. */ #define NCURSES_MOUSE_VERSION @NCURSES_MOUSE_VERSION@ /* * Definitions to facilitate DLL's. */ #include #if @HAVE_STDINT_H@ #include #endif /* * User-definable tweak to disable the include of . */ #ifndef NCURSES_ENABLE_STDBOOL_H #define NCURSES_ENABLE_STDBOOL_H @cf_cv_header_stdbool_h@ #endif /* * NCURSES_ATTR_T is used to quiet compiler warnings when building ncurses * configured using --disable-macros. */ #ifndef NCURSES_ATTR_T #define NCURSES_ATTR_T int #endif /* * Expands to 'const' if ncurses is configured using --enable-const. Note that * doing so makes it incompatible with other implementations of X/Open Curses. */ #undef NCURSES_CONST #define NCURSES_CONST @NCURSES_CONST@ #undef NCURSES_INLINE #define NCURSES_INLINE @NCURSES_INLINE@ /* * The internal type used for color values, and for color-pairs. The latter * allows the curses library to enumerate the combinations of foreground and * background colors used by an application, and is normally the product of the * total foreground and background colors. * * X/Open uses "short" for both of these types, ultimately because they are * numbers from the terminal database, which uses 16-bit signed values. */ #undef NCURSES_COLOR_T #define NCURSES_COLOR_T short #undef NCURSES_PAIRS_T #define NCURSES_PAIRS_T short /* * Definition used to make WINDOW and similar structs opaque. */ #ifndef @cf_cv_enable_opaque@ #define NCURSES_OPAQUE @NCURSES_OPAQUE@ #endif /* * The reentrant code relies on the opaque setting, but adds features. */ #ifndef NCURSES_REENTRANT #define NCURSES_REENTRANT @cf_cv_enable_reentrant@ #endif /* * Control whether bindings for interop support are added. */ #undef NCURSES_INTEROP_FUNCS #define NCURSES_INTEROP_FUNCS @NCURSES_INTEROP_FUNCS@ /* * The internal type used for window dimensions. */ #undef NCURSES_SIZE_T #define NCURSES_SIZE_T @NCURSES_SIZE_T@ /* * Control whether tparm() supports varargs or fixed-parameter list. */ #undef NCURSES_TPARM_VARARGS #define NCURSES_TPARM_VARARGS @NCURSES_TPARM_VARARGS@ /* * Control type used for tparm's arguments. While X/Open equates long and * char* values, this is not always workable for 64-bit platforms. */ #undef NCURSES_TPARM_ARG #define NCURSES_TPARM_ARG @NCURSES_TPARM_ARG@ /* * Control whether ncurses uses wcwidth() for checking width of line-drawing * characters. */ #undef NCURSES_WCWIDTH_GRAPHICS #define NCURSES_WCWIDTH_GRAPHICS @NCURSES_WCWIDTH_GRAPHICS@ /* * NCURSES_CH_T is used in building the library, but not used otherwise in * this header file, since that would make the normal/wide-character versions * of the header incompatible. */ #undef NCURSES_CH_T #define NCURSES_CH_T @NCURSES_CH_T@ #if @cf_cv_enable_lp64@ && defined(_LP64) typedef unsigned chtype; typedef unsigned mmask_t; #else typedef @cf_cv_typeof_chtype@ chtype; typedef @cf_cv_typeof_mmask_t@ mmask_t; #endif /* * We need FILE, etc. Include this before checking any feature symbols. */ #include /* * With XPG4, you must define _XOPEN_SOURCE_EXTENDED, it is redundant (or * conflicting) when _XOPEN_SOURCE is 500 or greater. If NCURSES_WIDECHAR is * not already defined, e.g., if the platform relies upon nonstandard feature * test macros, define it at this point if the standard feature test macros * indicate that it should be defined. */ #ifndef NCURSES_WIDECHAR #if defined(_XOPEN_SOURCE_EXTENDED) || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500)) #define NCURSES_WIDECHAR 1 #else #define NCURSES_WIDECHAR 0 #endif #endif /* NCURSES_WIDECHAR */ #include /* we need va_list */ #if NCURSES_WIDECHAR #include /* we want wchar_t */ #endif /* X/Open and SVr4 specify that curses implements 'bool'. However, C++ may also * implement it. If so, we must use the C++ compiler's type to avoid conflict * with other interfaces. * * A further complication is that may declare 'bool' to be a * different type, such as an enum which is not necessarily compatible with * C++. If we have , make 'bool' a macro, so users may #undef it. * Otherwise, let it remain a typedef to avoid conflicts with other #define's. * In either case, make a typedef for NCURSES_BOOL which can be used if needed * from either C or C++. */ #undef TRUE #define TRUE 1 #undef FALSE #define FALSE 0 typedef @cf_cv_type_of_bool@ NCURSES_BOOL; #if @USE_CXX_BOOL@ /* __cplusplus, etc. */ /* use the C++ compiler's bool type */ #define NCURSES_BOOL bool #else /* c89, c99, etc. */ #if NCURSES_ENABLE_STDBOOL_H #include /* use whatever the C compiler decides bool really is */ #define NCURSES_BOOL bool #else /* there is no predefined bool - use our own */ #undef bool #define bool NCURSES_BOOL #endif #endif /* !__cplusplus, etc. */ #ifdef __cplusplus extern "C" { #define NCURSES_CAST(type,value) static_cast(value) #else #define NCURSES_CAST(type,value) (type)(value) #endif /* * X/Open attributes. In the ncurses implementation, they are identical to the * A_ attributes. */ #define WA_ATTRIBUTES A_ATTRIBUTES #define WA_NORMAL A_NORMAL #define WA_STANDOUT A_STANDOUT #define WA_UNDERLINE A_UNDERLINE #define WA_REVERSE A_REVERSE #define WA_BLINK A_BLINK #define WA_DIM A_DIM #define WA_BOLD A_BOLD #define WA_ALTCHARSET A_ALTCHARSET #define WA_INVIS A_INVIS #define WA_PROTECT A_PROTECT #define WA_HORIZONTAL A_HORIZONTAL #define WA_LEFT A_LEFT #define WA_LOW A_LOW #define WA_RIGHT A_RIGHT #define WA_TOP A_TOP #define WA_VERTICAL A_VERTICAL #if @NCURSES_EXT_FUNCS@ #define WA_ITALIC A_ITALIC /* ncurses extension */ #endif /* colors */ #define COLOR_BLACK 0 #define COLOR_RED 1 #define COLOR_GREEN 2 #define COLOR_YELLOW 3 #define COLOR_BLUE 4 #define COLOR_MAGENTA 5 #define COLOR_CYAN 6 #define COLOR_WHITE 7 /* line graphics */ #if @BROKEN_LINKER@ || NCURSES_REENTRANT NCURSES_WRAPPED_VAR(chtype*, acs_map); #define acs_map NCURSES_PUBLIC_VAR(acs_map()) #else extern NCURSES_EXPORT_VAR(chtype) acs_map[]; #endif #define NCURSES_ACS(c) (acs_map[NCURSES_CAST(unsigned char,(c))]) /* VT100 symbols begin here */ #define ACS_ULCORNER NCURSES_ACS('l') /* upper left corner */ #define ACS_LLCORNER NCURSES_ACS('m') /* lower left corner */ #define ACS_URCORNER NCURSES_ACS('k') /* upper right corner */ #define ACS_LRCORNER NCURSES_ACS('j') /* lower right corner */ #define ACS_LTEE NCURSES_ACS('t') /* tee pointing right */ #define ACS_RTEE NCURSES_ACS('u') /* tee pointing left */ #define ACS_BTEE NCURSES_ACS('v') /* tee pointing up */ #define ACS_TTEE NCURSES_ACS('w') /* tee pointing down */ #define ACS_HLINE NCURSES_ACS('q') /* horizontal line */ #define ACS_VLINE NCURSES_ACS('x') /* vertical line */ #define ACS_PLUS NCURSES_ACS('n') /* large plus or crossover */ #define ACS_S1 NCURSES_ACS('o') /* scan line 1 */ #define ACS_S9 NCURSES_ACS('s') /* scan line 9 */ #define ACS_DIAMOND NCURSES_ACS('`') /* diamond */ #define ACS_CKBOARD NCURSES_ACS('a') /* checker board (stipple) */ #define ACS_DEGREE NCURSES_ACS('f') /* degree symbol */ #define ACS_PLMINUS NCURSES_ACS('g') /* plus/minus */ #define ACS_BULLET NCURSES_ACS('~') /* bullet */ /* Teletype 5410v1 symbols begin here */ #define ACS_LARROW NCURSES_ACS(',') /* arrow pointing left */ #define ACS_RARROW NCURSES_ACS('+') /* arrow pointing right */ #define ACS_DARROW NCURSES_ACS('.') /* arrow pointing down */ #define ACS_UARROW NCURSES_ACS('-') /* arrow pointing up */ #define ACS_BOARD NCURSES_ACS('h') /* board of squares */ #define ACS_LANTERN NCURSES_ACS('i') /* lantern symbol */ #define ACS_BLOCK NCURSES_ACS('0') /* solid square block */ /* * These aren't documented, but a lot of System Vs have them anyway * (you can spot pprryyzz{{||}} in a lot of AT&T terminfo strings). * The ACS_names may not match AT&T's, our source didn't know them. */ #define ACS_S3 NCURSES_ACS('p') /* scan line 3 */ #define ACS_S7 NCURSES_ACS('r') /* scan line 7 */ #define ACS_LEQUAL NCURSES_ACS('y') /* less/equal */ #define ACS_GEQUAL NCURSES_ACS('z') /* greater/equal */ #define ACS_PI NCURSES_ACS('{') /* Pi */ #define ACS_NEQUAL NCURSES_ACS('|') /* not equal */ #define ACS_STERLING NCURSES_ACS('}') /* UK pound sign */ /* * Line drawing ACS names are of the form ACS_trbl, where t is the top, r * is the right, b is the bottom, and l is the left. t, r, b, and l might * be B (blank), S (single), D (double), or T (thick). The subset defined * here only uses B and S. */ #define ACS_BSSB ACS_ULCORNER #define ACS_SSBB ACS_LLCORNER #define ACS_BBSS ACS_URCORNER #define ACS_SBBS ACS_LRCORNER #define ACS_SBSS ACS_RTEE #define ACS_SSSB ACS_LTEE #define ACS_SSBS ACS_BTEE #define ACS_BSSS ACS_TTEE #define ACS_BSBS ACS_HLINE #define ACS_SBSB ACS_VLINE #define ACS_SSSS ACS_PLUS #undef ERR #define ERR (-1) #undef OK #define OK (0) /* values for the _flags member */ #define _SUBWIN 0x01 /* is this a sub-window? */ #define _ENDLINE 0x02 /* is the window flush right? */ #define _FULLWIN 0x04 /* is the window full-screen? */ #define _SCROLLWIN 0x08 /* bottom edge is at screen bottom? */ #define _ISPAD 0x10 /* is this window a pad? */ #define _HASMOVED 0x20 /* has cursor moved since last refresh? */ #define _WRAPPED 0x40 /* cursor was just wrappped */ /* * this value is used in the firstchar and lastchar fields to mark * unchanged lines */ #define _NOCHANGE -1 /* * this value is used in the oldindex field to mark lines created by insertions * and scrolls. */ #define _NEWINDEX -1 typedef struct screen SCREEN; typedef struct _win_st WINDOW; typedef chtype attr_t; /* ...must be at least as wide as chtype */ #if NCURSES_WIDECHAR #if @NCURSES_LIBUTF8@ #ifdef mblen /* libutf8.h defines it w/o undefining first */ #undef mblen #endif #include #endif #if @NEED_WCHAR_H@ #include /* ...to get mbstate_t, etc. */ #endif #if @NCURSES_WCHAR_T@ typedef unsigned short wchar_t@NCURSES_OK_WCHAR_T@; #endif #if @NCURSES_WINT_T@ typedef unsigned int wint_t@NCURSES_OK_WCHAR_T@; #endif /* * cchar_t stores an array of CCHARW_MAX wide characters. The first is * normally a spacing character. The others are non-spacing. If those * (spacing and nonspacing) do not fill the array, a null L'\0' follows. * Otherwise, a null is assumed to follow when extracting via getcchar(). */ #define CCHARW_MAX @NCURSES_CCHARW_MAX@ typedef struct { attr_t attr; wchar_t chars[CCHARW_MAX]; #if @NCURSES_EXT_COLORS@ #undef NCURSES_EXT_COLORS #define NCURSES_EXT_COLORS @NCURSES_PATCH@ int ext_color; /* color pair, must be more than 16-bits */ #endif } cchar_t; #endif /* NCURSES_WIDECHAR */ #if !NCURSES_OPAQUE struct ldat; struct _win_st { NCURSES_SIZE_T _cury, _curx; /* current cursor position */ /* window location and size */ NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */ NCURSES_SIZE_T _begy, _begx; /* screen coords of upper-left-hand corner */ short _flags; /* window state flags */ /* attribute tracking */ attr_t _attrs; /* current attribute for non-space character */ chtype _bkgd; /* current background char/attribute pair */ /* option values set by user */ bool _notimeout; /* no time out on function-key entry? */ bool _clear; /* consider all data in the window invalid? */ bool _leaveok; /* OK to not reset cursor on exit? */ bool _scroll; /* OK to scroll this window? */ bool _idlok; /* OK to use insert/delete line? */ bool _idcok; /* OK to use insert/delete char? */ bool _immed; /* window in immed mode? (not yet used) */ bool _sync; /* window in sync mode? */ bool _use_keypad; /* process function keys into KEY_ symbols? */ int _delay; /* 0 = nodelay, <0 = blocking, >0 = delay */ struct ldat *_line; /* the actual line data */ /* global screen state */ NCURSES_SIZE_T _regtop; /* top line of scrolling region */ NCURSES_SIZE_T _regbottom; /* bottom line of scrolling region */ /* these are used only if this is a sub-window */ int _parx; /* x coordinate of this window in parent */ int _pary; /* y coordinate of this window in parent */ WINDOW *_parent; /* pointer to parent if a sub-window */ /* these are used only if this is a pad */ struct pdat { NCURSES_SIZE_T _pad_y, _pad_x; NCURSES_SIZE_T _pad_top, _pad_left; NCURSES_SIZE_T _pad_bottom, _pad_right; } _pad; NCURSES_SIZE_T _yoffset; /* real begy is _begy + _yoffset */ #if NCURSES_WIDECHAR cchar_t _bkgrnd; /* current background char/attribute pair */ #if @NCURSES_EXT_COLORS@ int _color; /* current color-pair for non-space character */ #endif #endif }; #endif /* NCURSES_OPAQUE */ /* * This is an extension to support events... */ #if @NCURSES_EXT_FUNCS@ #ifdef NCURSES_WGETCH_EVENTS #if !defined(__BEOS__) || defined(__HAIKU__) /* Fix _nc_timed_wait() on BEOS... */ # define NCURSES_EVENT_VERSION 1 #endif /* !defined(__BEOS__) */ /* * Bits to set in _nc_event.data.flags */ # define _NC_EVENT_TIMEOUT_MSEC 1 # define _NC_EVENT_FILE 2 # define _NC_EVENT_FILE_READABLE 2 # if 0 /* Not supported yet... */ # define _NC_EVENT_FILE_WRITABLE 4 # define _NC_EVENT_FILE_EXCEPTION 8 # endif typedef struct { int type; union { long timeout_msec; /* _NC_EVENT_TIMEOUT_MSEC */ struct { unsigned int flags; int fd; unsigned int result; } fev; /* _NC_EVENT_FILE */ } data; } _nc_event; typedef struct { int count; int result_flags; /* _NC_EVENT_TIMEOUT_MSEC or _NC_EVENT_FILE_READABLE */ _nc_event *events[1]; } _nc_eventlist; extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *); /* experimental */ extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *);/* experimental */ #endif /* NCURSES_WGETCH_EVENTS */ #endif /* NCURSES_EXT_FUNCS */ /* * GCC (and some other compilers) define '__attribute__'; we're using this * macro to alert the compiler to flag inconsistencies in printf/scanf-like * function calls. Just in case '__attribute__' isn't defined, make a dummy. * Old versions of G++ do not accept it anyway, at least not consistently with * GCC. */ #if !(defined(__GNUC__) || defined(__GNUG__) || defined(__attribute__)) #define __attribute__(p) /* nothing */ #endif /* * We cannot define these in ncurses_cfg.h, since they require parameters to be * passed (that is non-portable). If you happen to be using gcc with warnings * enabled, define * GCC_PRINTF * GCC_SCANF * to improve checking of calls to printw(), etc. */ #ifndef GCC_PRINTFLIKE #if defined(GCC_PRINTF) && !defined(printf) #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) #else #define GCC_PRINTFLIKE(fmt,var) /*nothing*/ #endif #endif #ifndef GCC_SCANFLIKE #if defined(GCC_SCANF) && !defined(scanf) #define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var))) #else #define GCC_SCANFLIKE(fmt,var) /*nothing*/ #endif #endif #ifndef GCC_NORETURN #define GCC_NORETURN /* nothing */ #endif #ifndef GCC_UNUSED #define GCC_UNUSED /* nothing */ #endif /* * Curses uses a helper function. Define our type for this to simplify * extending it for the sp-funcs feature. */ typedef int (*NCURSES_OUTC)(int); /* * Function prototypes. This is the complete X/Open Curses list of required * functions. Those marked `generated' will have sources generated from the * macro definitions later in this file, in order to satisfy XPG4.2 * requirements. */ extern NCURSES_EXPORT(int) addch (const chtype); /* generated */ extern NCURSES_EXPORT(int) addchnstr (const chtype *, int); /* generated */ extern NCURSES_EXPORT(int) addchstr (const chtype *); /* generated */ extern NCURSES_EXPORT(int) addnstr (const char *, int); /* generated */ extern NCURSES_EXPORT(int) addstr (const char *); /* generated */ extern NCURSES_EXPORT(int) attroff (NCURSES_ATTR_T); /* generated */ extern NCURSES_EXPORT(int) attron (NCURSES_ATTR_T); /* generated */ extern NCURSES_EXPORT(int) attrset (NCURSES_ATTR_T); /* generated */ extern NCURSES_EXPORT(int) attr_get (attr_t *, NCURSES_PAIRS_T *, void *); /* generated */ extern NCURSES_EXPORT(int) attr_off (attr_t, void *); /* generated */ extern NCURSES_EXPORT(int) attr_on (attr_t, void *); /* generated */ extern NCURSES_EXPORT(int) attr_set (attr_t, NCURSES_PAIRS_T, void *); /* generated */ extern NCURSES_EXPORT(int) baudrate (void); /* implemented */ extern NCURSES_EXPORT(int) beep (void); /* implemented */ extern NCURSES_EXPORT(int) bkgd (chtype); /* generated */ extern NCURSES_EXPORT(void) bkgdset (chtype); /* generated */ extern NCURSES_EXPORT(int) border (chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype); /* generated */ extern NCURSES_EXPORT(int) box (WINDOW *, chtype, chtype); /* generated */ extern NCURSES_EXPORT(bool) can_change_color (void); /* implemented */ extern NCURSES_EXPORT(int) cbreak (void); /* implemented */ extern NCURSES_EXPORT(int) chgat (int, attr_t, NCURSES_PAIRS_T, const void *); /* generated */ extern NCURSES_EXPORT(int) clear (void); /* generated */ extern NCURSES_EXPORT(int) clearok (WINDOW *,bool); /* implemented */ extern NCURSES_EXPORT(int) clrtobot (void); /* generated */ extern NCURSES_EXPORT(int) clrtoeol (void); /* generated */ extern NCURSES_EXPORT(int) color_content (NCURSES_COLOR_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*,NCURSES_COLOR_T*); /* implemented */ extern NCURSES_EXPORT(int) color_set (NCURSES_PAIRS_T,void*); /* generated */ extern NCURSES_EXPORT(int) COLOR_PAIR (int); /* generated */ extern NCURSES_EXPORT(int) copywin (const WINDOW*,WINDOW*,int,int,int,int,int,int,int); /* implemented */ extern NCURSES_EXPORT(int) curs_set (int); /* implemented */ extern NCURSES_EXPORT(int) def_prog_mode (void); /* implemented */ extern NCURSES_EXPORT(int) def_shell_mode (void); /* implemented */ extern NCURSES_EXPORT(int) delay_output (int); /* implemented */ extern NCURSES_EXPORT(int) delch (void); /* generated */ extern NCURSES_EXPORT(void) delscreen (SCREEN *); /* implemented */ extern NCURSES_EXPORT(int) delwin (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) deleteln (void); /* generated */ extern NCURSES_EXPORT(WINDOW *) derwin (WINDOW *,int,int,int,int); /* implemented */ extern NCURSES_EXPORT(int) doupdate (void); /* implemented */ extern NCURSES_EXPORT(WINDOW *) dupwin (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) echo (void); /* implemented */ extern NCURSES_EXPORT(int) echochar (const chtype); /* generated */ extern NCURSES_EXPORT(int) erase (void); /* generated */ extern NCURSES_EXPORT(int) endwin (void); /* implemented */ extern NCURSES_EXPORT(char) erasechar (void); /* implemented */ extern NCURSES_EXPORT(void) filter (void); /* implemented */ extern NCURSES_EXPORT(int) flash (void); /* implemented */ extern NCURSES_EXPORT(int) flushinp (void); /* implemented */ extern NCURSES_EXPORT(chtype) getbkgd (WINDOW *); /* generated */ extern NCURSES_EXPORT(int) getch (void); /* generated */ extern NCURSES_EXPORT(int) getnstr (char *, int); /* generated */ extern NCURSES_EXPORT(int) getstr (char *); /* generated */ extern NCURSES_EXPORT(WINDOW *) getwin (FILE *); /* implemented */ extern NCURSES_EXPORT(int) halfdelay (int); /* implemented */ extern NCURSES_EXPORT(bool) has_colors (void); /* implemented */ extern NCURSES_EXPORT(bool) has_ic (void); /* implemented */ extern NCURSES_EXPORT(bool) has_il (void); /* implemented */ extern NCURSES_EXPORT(int) hline (chtype, int); /* generated */ extern NCURSES_EXPORT(void) idcok (WINDOW *, bool); /* implemented */ extern NCURSES_EXPORT(int) idlok (WINDOW *, bool); /* implemented */ extern NCURSES_EXPORT(void) immedok (WINDOW *, bool); /* implemented */ extern NCURSES_EXPORT(chtype) inch (void); /* generated */ extern NCURSES_EXPORT(int) inchnstr (chtype *, int); /* generated */ extern NCURSES_EXPORT(int) inchstr (chtype *); /* generated */ extern NCURSES_EXPORT(WINDOW *) initscr (void); /* implemented */ extern NCURSES_EXPORT(int) init_color (NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T); /* implemented */ extern NCURSES_EXPORT(int) init_pair (NCURSES_PAIRS_T,NCURSES_COLOR_T,NCURSES_COLOR_T); /* implemented */ extern NCURSES_EXPORT(int) innstr (char *, int); /* generated */ extern NCURSES_EXPORT(int) insch (chtype); /* generated */ extern NCURSES_EXPORT(int) insdelln (int); /* generated */ extern NCURSES_EXPORT(int) insertln (void); /* generated */ extern NCURSES_EXPORT(int) insnstr (const char *, int); /* generated */ extern NCURSES_EXPORT(int) insstr (const char *); /* generated */ extern NCURSES_EXPORT(int) instr (char *); /* generated */ extern NCURSES_EXPORT(int) intrflush (WINDOW *,bool); /* implemented */ extern NCURSES_EXPORT(bool) isendwin (void); /* implemented */ extern NCURSES_EXPORT(bool) is_linetouched (WINDOW *,int); /* implemented */ extern NCURSES_EXPORT(bool) is_wintouched (WINDOW *); /* implemented */ extern NCURSES_EXPORT(NCURSES_CONST char *) keyname (int); /* implemented */ extern NCURSES_EXPORT(int) keypad (WINDOW *,bool); /* implemented */ extern NCURSES_EXPORT(char) killchar (void); /* implemented */ extern NCURSES_EXPORT(int) leaveok (WINDOW *,bool); /* implemented */ extern NCURSES_EXPORT(char *) longname (void); /* implemented */ extern NCURSES_EXPORT(int) meta (WINDOW *,bool); /* implemented */ extern NCURSES_EXPORT(int) move (int, int); /* generated */ extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype); /* generated */ extern NCURSES_EXPORT(int) mvaddchnstr (int, int, const chtype *, int); /* generated */ extern NCURSES_EXPORT(int) mvaddchstr (int, int, const chtype *); /* generated */ extern NCURSES_EXPORT(int) mvaddnstr (int, int, const char *, int); /* generated */ extern NCURSES_EXPORT(int) mvaddstr (int, int, const char *); /* generated */ extern NCURSES_EXPORT(int) mvchgat (int, int, int, attr_t, NCURSES_PAIRS_T, const void *); /* generated */ extern NCURSES_EXPORT(int) mvcur (int,int,int,int); /* implemented */ extern NCURSES_EXPORT(int) mvdelch (int, int); /* generated */ extern NCURSES_EXPORT(int) mvderwin (WINDOW *, int, int); /* implemented */ extern NCURSES_EXPORT(int) mvgetch (int, int); /* generated */ extern NCURSES_EXPORT(int) mvgetnstr (int, int, char *, int); /* generated */ extern NCURSES_EXPORT(int) mvgetstr (int, int, char *); /* generated */ extern NCURSES_EXPORT(int) mvhline (int, int, chtype, int); /* generated */ extern NCURSES_EXPORT(chtype) mvinch (int, int); /* generated */ extern NCURSES_EXPORT(int) mvinchnstr (int, int, chtype *, int); /* generated */ extern NCURSES_EXPORT(int) mvinchstr (int, int, chtype *); /* generated */ extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int); /* generated */ extern NCURSES_EXPORT(int) mvinsch (int, int, chtype); /* generated */ extern NCURSES_EXPORT(int) mvinsnstr (int, int, const char *, int); /* generated */ extern NCURSES_EXPORT(int) mvinsstr (int, int, const char *); /* generated */ extern NCURSES_EXPORT(int) mvinstr (int, int, char *); /* generated */ extern NCURSES_EXPORT(int) mvprintw (int,int, const char *,...) /* implemented */ GCC_PRINTFLIKE(3,4); extern NCURSES_EXPORT(int) mvscanw (int,int, NCURSES_CONST char *,...) /* implemented */ GCC_SCANFLIKE(3,4); extern NCURSES_EXPORT(int) mvvline (int, int, chtype, int); /* generated */ extern NCURSES_EXPORT(int) mvwaddch (WINDOW *, int, int, const chtype); /* generated */ extern NCURSES_EXPORT(int) mvwaddchnstr (WINDOW *, int, int, const chtype *, int);/* generated */ extern NCURSES_EXPORT(int) mvwaddchstr (WINDOW *, int, int, const chtype *); /* generated */ extern NCURSES_EXPORT(int) mvwaddnstr (WINDOW *, int, int, const char *, int); /* generated */ extern NCURSES_EXPORT(int) mvwaddstr (WINDOW *, int, int, const char *); /* generated */ extern NCURSES_EXPORT(int) mvwchgat (WINDOW *, int, int, int, attr_t, NCURSES_PAIRS_T, const void *);/* generated */ extern NCURSES_EXPORT(int) mvwdelch (WINDOW *, int, int); /* generated */ extern NCURSES_EXPORT(int) mvwgetch (WINDOW *, int, int); /* generated */ extern NCURSES_EXPORT(int) mvwgetnstr (WINDOW *, int, int, char *, int); /* generated */ extern NCURSES_EXPORT(int) mvwgetstr (WINDOW *, int, int, char *); /* generated */ extern NCURSES_EXPORT(int) mvwhline (WINDOW *, int, int, chtype, int); /* generated */ extern NCURSES_EXPORT(int) mvwin (WINDOW *,int,int); /* implemented */ extern NCURSES_EXPORT(chtype) mvwinch (WINDOW *, int, int); /* generated */ extern NCURSES_EXPORT(int) mvwinchnstr (WINDOW *, int, int, chtype *, int); /* generated */ extern NCURSES_EXPORT(int) mvwinchstr (WINDOW *, int, int, chtype *); /* generated */ extern NCURSES_EXPORT(int) mvwinnstr (WINDOW *, int, int, char *, int); /* generated */ extern NCURSES_EXPORT(int) mvwinsch (WINDOW *, int, int, chtype); /* generated */ extern NCURSES_EXPORT(int) mvwinsnstr (WINDOW *, int, int, const char *, int); /* generated */ extern NCURSES_EXPORT(int) mvwinsstr (WINDOW *, int, int, const char *); /* generated */ extern NCURSES_EXPORT(int) mvwinstr (WINDOW *, int, int, char *); /* generated */ extern NCURSES_EXPORT(int) mvwprintw (WINDOW*,int,int, const char *,...) /* implemented */ GCC_PRINTFLIKE(4,5); extern NCURSES_EXPORT(int) mvwscanw (WINDOW *,int,int, NCURSES_CONST char *,...) /* implemented */ GCC_SCANFLIKE(4,5); extern NCURSES_EXPORT(int) mvwvline (WINDOW *,int, int, chtype, int); /* generated */ extern NCURSES_EXPORT(int) napms (int); /* implemented */ extern NCURSES_EXPORT(WINDOW *) newpad (int,int); /* implemented */ extern NCURSES_EXPORT(SCREEN *) newterm (NCURSES_CONST char *,FILE *,FILE *); /* implemented */ extern NCURSES_EXPORT(WINDOW *) newwin (int,int,int,int); /* implemented */ extern NCURSES_EXPORT(int) nl (void); /* implemented */ extern NCURSES_EXPORT(int) nocbreak (void); /* implemented */ extern NCURSES_EXPORT(int) nodelay (WINDOW *,bool); /* implemented */ extern NCURSES_EXPORT(int) noecho (void); /* implemented */ extern NCURSES_EXPORT(int) nonl (void); /* implemented */ extern NCURSES_EXPORT(void) noqiflush (void); /* implemented */ extern NCURSES_EXPORT(int) noraw (void); /* implemented */ extern NCURSES_EXPORT(int) notimeout (WINDOW *,bool); /* implemented */ extern NCURSES_EXPORT(int) overlay (const WINDOW*,WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) overwrite (const WINDOW*,WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) pair_content (NCURSES_PAIRS_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*); /* implemented */ extern NCURSES_EXPORT(int) PAIR_NUMBER (int); /* generated */ extern NCURSES_EXPORT(int) pechochar (WINDOW *, const chtype); /* implemented */ extern NCURSES_EXPORT(int) pnoutrefresh (WINDOW*,int,int,int,int,int,int);/* implemented */ extern NCURSES_EXPORT(int) prefresh (WINDOW *,int,int,int,int,int,int); /* implemented */ extern NCURSES_EXPORT(int) printw (const char *,...) /* implemented */ GCC_PRINTFLIKE(1,2); extern NCURSES_EXPORT(int) putwin (WINDOW *, FILE *); /* implemented */ extern NCURSES_EXPORT(void) qiflush (void); /* implemented */ extern NCURSES_EXPORT(int) raw (void); /* implemented */ extern NCURSES_EXPORT(int) redrawwin (WINDOW *); /* generated */ extern NCURSES_EXPORT(int) refresh (void); /* generated */ extern NCURSES_EXPORT(int) resetty (void); /* implemented */ extern NCURSES_EXPORT(int) reset_prog_mode (void); /* implemented */ extern NCURSES_EXPORT(int) reset_shell_mode (void); /* implemented */ extern NCURSES_EXPORT(int) ripoffline (int, int (*)(WINDOW *, int)); /* implemented */ extern NCURSES_EXPORT(int) savetty (void); /* implemented */ extern NCURSES_EXPORT(int) scanw (NCURSES_CONST char *,...) /* implemented */ GCC_SCANFLIKE(1,2); extern NCURSES_EXPORT(int) scr_dump (const char *); /* implemented */ extern NCURSES_EXPORT(int) scr_init (const char *); /* implemented */ extern NCURSES_EXPORT(int) scrl (int); /* generated */ extern NCURSES_EXPORT(int) scroll (WINDOW *); /* generated */ extern NCURSES_EXPORT(int) scrollok (WINDOW *,bool); /* implemented */ extern NCURSES_EXPORT(int) scr_restore (const char *); /* implemented */ extern NCURSES_EXPORT(int) scr_set (const char *); /* implemented */ extern NCURSES_EXPORT(int) setscrreg (int,int); /* generated */ extern NCURSES_EXPORT(SCREEN *) set_term (SCREEN *); /* implemented */ extern NCURSES_EXPORT(int) slk_attroff (const chtype); /* implemented */ extern NCURSES_EXPORT(int) slk_attr_off (const attr_t, void *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) slk_attron (const chtype); /* implemented */ extern NCURSES_EXPORT(int) slk_attr_on (attr_t,void*); /* generated:WIDEC */ extern NCURSES_EXPORT(int) slk_attrset (const chtype); /* implemented */ extern NCURSES_EXPORT(attr_t) slk_attr (void); /* implemented */ extern NCURSES_EXPORT(int) slk_attr_set (const attr_t,NCURSES_PAIRS_T,void*); /* implemented */ extern NCURSES_EXPORT(int) slk_clear (void); /* implemented */ extern NCURSES_EXPORT(int) slk_color (NCURSES_PAIRS_T); /* implemented */ extern NCURSES_EXPORT(int) slk_init (int); /* implemented */ extern NCURSES_EXPORT(char *) slk_label (int); /* implemented */ extern NCURSES_EXPORT(int) slk_noutrefresh (void); /* implemented */ extern NCURSES_EXPORT(int) slk_refresh (void); /* implemented */ extern NCURSES_EXPORT(int) slk_restore (void); /* implemented */ extern NCURSES_EXPORT(int) slk_set (int,const char *,int); /* implemented */ extern NCURSES_EXPORT(int) slk_touch (void); /* implemented */ extern NCURSES_EXPORT(int) standout (void); /* generated */ extern NCURSES_EXPORT(int) standend (void); /* generated */ extern NCURSES_EXPORT(int) start_color (void); /* implemented */ extern NCURSES_EXPORT(WINDOW *) subpad (WINDOW *, int, int, int, int); /* implemented */ extern NCURSES_EXPORT(WINDOW *) subwin (WINDOW *, int, int, int, int); /* implemented */ extern NCURSES_EXPORT(int) syncok (WINDOW *, bool); /* implemented */ extern NCURSES_EXPORT(chtype) termattrs (void); /* implemented */ extern NCURSES_EXPORT(char *) termname (void); /* implemented */ extern NCURSES_EXPORT(void) timeout (int); /* generated */ extern NCURSES_EXPORT(int) touchline (WINDOW *, int, int); /* generated */ extern NCURSES_EXPORT(int) touchwin (WINDOW *); /* generated */ extern NCURSES_EXPORT(int) typeahead (int); /* implemented */ extern NCURSES_EXPORT(int) ungetch (int); /* implemented */ extern NCURSES_EXPORT(int) untouchwin (WINDOW *); /* generated */ extern NCURSES_EXPORT(void) use_env (bool); /* implemented */ extern NCURSES_EXPORT(void) use_tioctl (bool); /* implemented */ extern NCURSES_EXPORT(int) vidattr (chtype); /* implemented */ extern NCURSES_EXPORT(int) vidputs (chtype, NCURSES_OUTC); /* implemented */ extern NCURSES_EXPORT(int) vline (chtype, int); /* generated */ extern NCURSES_EXPORT(int) vwprintw (WINDOW *, const char *,va_list); /* implemented */ extern NCURSES_EXPORT(int) vw_printw (WINDOW *, const char *,va_list); /* generated */ extern NCURSES_EXPORT(int) vwscanw (WINDOW *, NCURSES_CONST char *,va_list); /* implemented */ extern NCURSES_EXPORT(int) vw_scanw (WINDOW *, NCURSES_CONST char *,va_list); /* generated */ extern NCURSES_EXPORT(int) waddch (WINDOW *, const chtype); /* implemented */ extern NCURSES_EXPORT(int) waddchnstr (WINDOW *,const chtype *,int); /* implemented */ extern NCURSES_EXPORT(int) waddchstr (WINDOW *,const chtype *); /* generated */ extern NCURSES_EXPORT(int) waddnstr (WINDOW *,const char *,int); /* implemented */ extern NCURSES_EXPORT(int) waddstr (WINDOW *,const char *); /* generated */ extern NCURSES_EXPORT(int) wattron (WINDOW *, int); /* generated */ extern NCURSES_EXPORT(int) wattroff (WINDOW *, int); /* generated */ extern NCURSES_EXPORT(int) wattrset (WINDOW *, int); /* generated */ extern NCURSES_EXPORT(int) wattr_get (WINDOW *, attr_t *, NCURSES_PAIRS_T *, void *); /* generated */ extern NCURSES_EXPORT(int) wattr_on (WINDOW *, attr_t, void *); /* implemented */ extern NCURSES_EXPORT(int) wattr_off (WINDOW *, attr_t, void *); /* implemented */ extern NCURSES_EXPORT(int) wattr_set (WINDOW *, attr_t, NCURSES_PAIRS_T, void *); /* generated */ extern NCURSES_EXPORT(int) wbkgd (WINDOW *, chtype); /* implemented */ extern NCURSES_EXPORT(void) wbkgdset (WINDOW *,chtype); /* implemented */ extern NCURSES_EXPORT(int) wborder (WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype); /* implemented */ extern NCURSES_EXPORT(int) wchgat (WINDOW *, int, attr_t, NCURSES_PAIRS_T, const void *);/* implemented */ extern NCURSES_EXPORT(int) wclear (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) wclrtobot (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) wclrtoeol (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) wcolor_set (WINDOW*,NCURSES_PAIRS_T,void*); /* implemented */ extern NCURSES_EXPORT(void) wcursyncup (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) wdelch (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) wdeleteln (WINDOW *); /* generated */ extern NCURSES_EXPORT(int) wechochar (WINDOW *, const chtype); /* implemented */ extern NCURSES_EXPORT(int) werase (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) wgetch (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) wgetnstr (WINDOW *,char *,int); /* implemented */ extern NCURSES_EXPORT(int) wgetstr (WINDOW *, char *); /* generated */ extern NCURSES_EXPORT(int) whline (WINDOW *, chtype, int); /* implemented */ extern NCURSES_EXPORT(chtype) winch (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) winchnstr (WINDOW *, chtype *, int); /* implemented */ extern NCURSES_EXPORT(int) winchstr (WINDOW *, chtype *); /* generated */ extern NCURSES_EXPORT(int) winnstr (WINDOW *, char *, int); /* implemented */ extern NCURSES_EXPORT(int) winsch (WINDOW *, chtype); /* implemented */ extern NCURSES_EXPORT(int) winsdelln (WINDOW *,int); /* implemented */ extern NCURSES_EXPORT(int) winsertln (WINDOW *); /* generated */ extern NCURSES_EXPORT(int) winsnstr (WINDOW *, const char *,int); /* implemented */ extern NCURSES_EXPORT(int) winsstr (WINDOW *, const char *); /* generated */ extern NCURSES_EXPORT(int) winstr (WINDOW *, char *); /* generated */ extern NCURSES_EXPORT(int) wmove (WINDOW *,int,int); /* implemented */ extern NCURSES_EXPORT(int) wnoutrefresh (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) wprintw (WINDOW *, const char *,...) /* implemented */ GCC_PRINTFLIKE(2,3); extern NCURSES_EXPORT(int) wredrawln (WINDOW *,int,int); /* implemented */ extern NCURSES_EXPORT(int) wrefresh (WINDOW *); /* implemented */ extern NCURSES_EXPORT(int) wscanw (WINDOW *, NCURSES_CONST char *,...) /* implemented */ GCC_SCANFLIKE(2,3); extern NCURSES_EXPORT(int) wscrl (WINDOW *,int); /* implemented */ extern NCURSES_EXPORT(int) wsetscrreg (WINDOW *,int,int); /* implemented */ extern NCURSES_EXPORT(int) wstandout (WINDOW *); /* generated */ extern NCURSES_EXPORT(int) wstandend (WINDOW *); /* generated */ extern NCURSES_EXPORT(void) wsyncdown (WINDOW *); /* implemented */ extern NCURSES_EXPORT(void) wsyncup (WINDOW *); /* implemented */ extern NCURSES_EXPORT(void) wtimeout (WINDOW *,int); /* implemented */ extern NCURSES_EXPORT(int) wtouchln (WINDOW *,int,int,int); /* implemented */ extern NCURSES_EXPORT(int) wvline (WINDOW *,chtype,int); /* implemented */ /* * These are also declared in : */ extern NCURSES_EXPORT(int) tigetflag (NCURSES_CONST char *); /* implemented */ extern NCURSES_EXPORT(int) tigetnum (NCURSES_CONST char *); /* implemented */ extern NCURSES_EXPORT(char *) tigetstr (NCURSES_CONST char *); /* implemented */ extern NCURSES_EXPORT(int) putp (const char *); /* implemented */ #if NCURSES_TPARM_VARARGS extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...); /* special */ #else extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG); /* special */ extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...); /* special */ #endif extern NCURSES_EXPORT(char *) tiparm (const char *, ...); /* special */ /* * These functions are not in X/Open, but we use them in macro definitions: */ extern NCURSES_EXPORT(int) getattrs (const WINDOW *); /* generated */ extern NCURSES_EXPORT(int) getcurx (const WINDOW *); /* generated */ extern NCURSES_EXPORT(int) getcury (const WINDOW *); /* generated */ extern NCURSES_EXPORT(int) getbegx (const WINDOW *); /* generated */ extern NCURSES_EXPORT(int) getbegy (const WINDOW *); /* generated */ extern NCURSES_EXPORT(int) getmaxx (const WINDOW *); /* generated */ extern NCURSES_EXPORT(int) getmaxy (const WINDOW *); /* generated */ extern NCURSES_EXPORT(int) getparx (const WINDOW *); /* generated */ extern NCURSES_EXPORT(int) getpary (const WINDOW *); /* generated */ /* * vid_attr() was implemented originally based on a draft of X/Open curses. */ #if !NCURSES_WIDECHAR #define vid_attr(a,pair,opts) vidattr(a) #endif /* * These functions are extensions - not in X/Open Curses. */ #if @NCURSES_EXT_FUNCS@ #undef NCURSES_EXT_FUNCS #define NCURSES_EXT_FUNCS @NCURSES_PATCH@ typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *); typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *); extern NCURSES_EXPORT(bool) is_term_resized (int, int); extern NCURSES_EXPORT(char *) keybound (int, int); extern NCURSES_EXPORT(const char *) curses_version (void); extern NCURSES_EXPORT(int) assume_default_colors (int, int); extern NCURSES_EXPORT(int) define_key (const char *, int); extern NCURSES_EXPORT(int) get_escdelay (void); extern NCURSES_EXPORT(int) key_defined (const char *); extern NCURSES_EXPORT(int) keyok (int, bool); extern NCURSES_EXPORT(int) resize_term (int, int); extern NCURSES_EXPORT(int) resizeterm (int, int); extern NCURSES_EXPORT(int) set_escdelay (int); extern NCURSES_EXPORT(int) set_tabsize (int); extern NCURSES_EXPORT(int) use_default_colors (void); extern NCURSES_EXPORT(int) use_extended_names (bool); extern NCURSES_EXPORT(int) use_legacy_coding (int); extern NCURSES_EXPORT(int) use_screen (SCREEN *, NCURSES_SCREEN_CB, void *); extern NCURSES_EXPORT(int) use_window (WINDOW *, NCURSES_WINDOW_CB, void *); extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int); extern NCURSES_EXPORT(void) nofilter(void); /* * These extensions provide access to information stored in the WINDOW even * when NCURSES_OPAQUE is set: */ extern NCURSES_EXPORT(WINDOW *) wgetparent (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_cleared (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_idcok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_idlok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_immedok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_keypad (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_leaveok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_nodelay (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_notimeout (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_pad (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_scrollok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_subwin (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(bool) is_syncok (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(int) wgetdelay (const WINDOW *); /* @GENERATED_EXT_FUNCS@ */ extern NCURSES_EXPORT(int) wgetscrreg (const WINDOW *, int *, int *); /* @GENERATED_EXT_FUNCS@ */ #else #define curses_version() NCURSES_VERSION #endif /* * Extra extension-functions, which pass a SCREEN pointer rather than using * a global variable SP. */ #if @NCURSES_SP_FUNCS@ #undef NCURSES_SP_FUNCS #define NCURSES_SP_FUNCS @NCURSES_PATCH@ #define NCURSES_SP_NAME(name) name##_sp /* Define the sp-funcs helper function */ #define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC) typedef int (*NCURSES_SP_OUTC)(SCREEN*, int); extern NCURSES_EXPORT(SCREEN *) new_prescr (void); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(baudrate) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(beep) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(can_change_color) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(cbreak) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(curs_set) (SCREEN*, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(color_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_prog_mode) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_shell_mode) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(delay_output) (SCREEN*, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(doupdate) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(echo) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(endwin) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(char) NCURSES_SP_NAME(erasechar) (SCREEN*);/* implemented:SP_FUNC */ extern NCURSES_EXPORT(void) NCURSES_SP_NAME(filter) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flash) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flushinp) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(getwin) (SCREEN*, FILE *); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(halfdelay) (SCREEN*, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_colors) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_ic) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_il) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_color) (SCREEN*, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_pair) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(intrflush) (SCREEN*, WINDOW*, bool); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(isendwin) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(keyname) (SCREEN*, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(char) NCURSES_SP_NAME(killchar) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(napms) (SCREEN*, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newpad) (SCREEN*, int, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (SCREEN*, NCURSES_CONST char *, FILE *, FILE *); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newwin) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nl) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nocbreak) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noecho) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nonl) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(void) NCURSES_SP_NAME(noqiflush) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noraw) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(pair_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(void) NCURSES_SP_NAME(qiflush) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(raw) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_prog_mode) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_shell_mode) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resetty) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ripoffline) (SCREEN*, int, int (*)(WINDOW *, int)); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(savetty) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_init) (SCREEN*, const char *); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_restore) (SCREEN*, const char *); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_set) (SCREEN*, const char *); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attroff) (SCREEN*, const chtype); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attron) (SCREEN*, const chtype); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attrset) (SCREEN*, const chtype); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(slk_attr) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attr_set) (SCREEN*, const attr_t, NCURSES_PAIRS_T, void*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_clear) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_color) (SCREEN*, NCURSES_PAIRS_T); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_init) (SCREEN*, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(slk_label) (SCREEN*, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_noutrefresh) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_refresh) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_restore) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_set) (SCREEN*, int, const char *, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_touch) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(start_color) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(termattrs) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(termname) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(typeahead) (SCREEN*, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetch) (SCREEN*, int); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_env) (SCREEN*, bool); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_tioctl) (SCREEN*, bool); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidattr) (SCREEN*, chtype); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidputs) (SCREEN*, chtype, NCURSES_SP_OUTC); /* implemented:SP_FUNC */ #if @NCURSES_EXT_FUNCS@ extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(assume_default_colors) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(define_key) (SCREEN*, const char *, int); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(get_escdelay) (SCREEN*); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(is_term_resized) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(key_defined) (SCREEN*, const char *); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(keyok) (SCREEN*, int, bool); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(void) NCURSES_SP_NAME(nofilter) (SCREEN*); /* implemented */ /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resize_term) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resizeterm) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_escdelay) (SCREEN*, int); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_tabsize) (SCREEN*, int); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_default_colors) (SCREEN*); /* implemented:EXT_SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int); /* implemented:EXT_SP_FUNC */ #endif #else #undef NCURSES_SP_FUNCS #define NCURSES_SP_FUNCS 0 #define NCURSES_SP_NAME(name) name #define NCURSES_SP_OUTC NCURSES_OUTC #endif /* attributes */ #define NCURSES_ATTR_SHIFT 8 #define NCURSES_BITS(mask,shift) (NCURSES_CAST(chtype,(mask)) << ((shift) + NCURSES_ATTR_SHIFT)) #define A_NORMAL (@cf_cv_1UL@ - @cf_cv_1UL@) #define A_ATTRIBUTES NCURSES_BITS(~(@cf_cv_1UL@ - @cf_cv_1UL@),0) #define A_CHARTEXT (NCURSES_BITS(@cf_cv_1UL@,0) - @cf_cv_1UL@) #define A_COLOR NCURSES_BITS(((@cf_cv_1UL@) << 8) - @cf_cv_1UL@,0) #define A_STANDOUT NCURSES_BITS(@cf_cv_1UL@,8) #define A_UNDERLINE NCURSES_BITS(@cf_cv_1UL@,9) #define A_REVERSE NCURSES_BITS(@cf_cv_1UL@,10) #define A_BLINK NCURSES_BITS(@cf_cv_1UL@,11) #define A_DIM NCURSES_BITS(@cf_cv_1UL@,12) #define A_BOLD NCURSES_BITS(@cf_cv_1UL@,13) #define A_ALTCHARSET NCURSES_BITS(@cf_cv_1UL@,14) #define A_INVIS NCURSES_BITS(@cf_cv_1UL@,15) #define A_PROTECT NCURSES_BITS(@cf_cv_1UL@,16) #define A_HORIZONTAL NCURSES_BITS(@cf_cv_1UL@,17) #define A_LEFT NCURSES_BITS(@cf_cv_1UL@,18) #define A_LOW NCURSES_BITS(@cf_cv_1UL@,19) #define A_RIGHT NCURSES_BITS(@cf_cv_1UL@,20) #define A_TOP NCURSES_BITS(@cf_cv_1UL@,21) #define A_VERTICAL NCURSES_BITS(@cf_cv_1UL@,22) #if @NCURSES_EXT_FUNCS@ #define A_ITALIC NCURSES_BITS(@cf_cv_1UL@,23) /* ncurses extension */ #endif /* * Most of the pseudo functions are macros that either provide compatibility * with older versions of curses, or provide inline functionality to improve * performance. */ /* * These pseudo functions are always implemented as macros: */ #define getyx(win,y,x) (y = getcury(win), x = getcurx(win)) #define getbegyx(win,y,x) (y = getbegy(win), x = getbegx(win)) #define getmaxyx(win,y,x) (y = getmaxy(win), x = getmaxx(win)) #define getparyx(win,y,x) (y = getpary(win), x = getparx(win)) #define getsyx(y,x) do { if (newscr) { \ if (is_leaveok(newscr)) \ (y) = (x) = -1; \ else \ getyx(newscr,(y), (x)); \ } \ } while(0) #define setsyx(y,x) do { if (newscr) { \ if ((y) == -1 && (x) == -1) \ leaveok(newscr, TRUE); \ else { \ leaveok(newscr, FALSE); \ wmove(newscr, (y), (x)); \ } \ } \ } while(0) #ifndef NCURSES_NOMACROS /* * These miscellaneous pseudo functions are provided for compatibility: */ #define wgetstr(w, s) wgetnstr(w, s, -1) #define getnstr(s, n) wgetnstr(stdscr, s, (n)) #define setterm(term) setupterm(term, 1, (int *)0) #define fixterm() reset_prog_mode() #define resetterm() reset_shell_mode() #define saveterm() def_prog_mode() #define crmode() cbreak() #define nocrmode() nocbreak() #define gettmode() /* It seems older SYSV curses versions define these */ #if !NCURSES_OPAQUE #define getattrs(win) NCURSES_CAST(int, (win) ? (win)->_attrs : A_NORMAL) #define getcurx(win) ((win) ? (win)->_curx : ERR) #define getcury(win) ((win) ? (win)->_cury : ERR) #define getbegx(win) ((win) ? (win)->_begx : ERR) #define getbegy(win) ((win) ? (win)->_begy : ERR) #define getmaxx(win) ((win) ? ((win)->_maxx + 1) : ERR) #define getmaxy(win) ((win) ? ((win)->_maxy + 1) : ERR) #define getparx(win) ((win) ? (win)->_parx : ERR) #define getpary(win) ((win) ? (win)->_pary : ERR) #endif /* NCURSES_OPAQUE */ #define wstandout(win) (wattrset(win,A_STANDOUT)) #define wstandend(win) (wattrset(win,A_NORMAL)) #define wattron(win,at) wattr_on(win, NCURSES_CAST(attr_t, at), NULL) #define wattroff(win,at) wattr_off(win, NCURSES_CAST(attr_t, at), NULL) #if !NCURSES_OPAQUE #if NCURSES_WIDECHAR && @NCURSES_EXT_COLORS@ #define wattrset(win,at) ((win) \ ? ((win)->_color = NCURSES_CAST(int, PAIR_NUMBER(at)), \ (win)->_attrs = NCURSES_CAST(attr_t, at), \ OK) \ : ERR) #else #define wattrset(win,at) ((win) \ ? ((win)->_attrs = NCURSES_CAST(attr_t, at), \ OK) \ : ERR) #endif #endif /* NCURSES_OPAQUE */ #define scroll(win) wscrl(win,1) #define touchwin(win) wtouchln((win), 0, getmaxy(win), 1) #define touchline(win, s, c) wtouchln((win), s, c, 1) #define untouchwin(win) wtouchln((win), 0, getmaxy(win), 0) #define box(win, v, h) wborder(win, v, v, h, h, 0, 0, 0, 0) #define border(ls, rs, ts, bs, tl, tr, bl, br) wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br) #define hline(ch, n) whline(stdscr, ch, (n)) #define vline(ch, n) wvline(stdscr, ch, (n)) #define winstr(w, s) winnstr(w, s, -1) #define winchstr(w, s) winchnstr(w, s, -1) #define winsstr(w, s) winsnstr(w, s, -1) #if !NCURSES_OPAQUE #define redrawwin(win) wredrawln(win, 0, ((win) ? (win)->_maxy+1 : -1)) #endif /* NCURSES_OPAQUE */ #define waddstr(win,str) waddnstr(win,str,-1) #define waddchstr(win,str) waddchnstr(win,str,-1) /* * These apply to the first 256 color pairs. */ #define COLOR_PAIR(n) NCURSES_BITS((n), 0) #define PAIR_NUMBER(a) (NCURSES_CAST(int,((NCURSES_CAST(unsigned long,(a)) & A_COLOR) >> NCURSES_ATTR_SHIFT))) /* * pseudo functions for standard screen */ #define addch(ch) waddch(stdscr,(ch)) #define addchnstr(str,n) waddchnstr(stdscr,(str),(n)) #define addchstr(str) waddchstr(stdscr,(str)) #define addnstr(str,n) waddnstr(stdscr,(str),(n)) #define addstr(str) waddnstr(stdscr,(str),-1) #define attr_get(ap,cp,o) wattr_get(stdscr,(ap),(cp),(o)) #define attr_off(a,o) wattr_off(stdscr,(a),(o)) #define attr_on(a,o) wattr_on(stdscr,(a),(o)) #define attr_set(a,c,o) wattr_set(stdscr,(a),(c),(o)) #define attroff(at) wattroff(stdscr,(at)) #define attron(at) wattron(stdscr,(at)) #define attrset(at) wattrset(stdscr,(at)) #define bkgd(ch) wbkgd(stdscr,(ch)) #define bkgdset(ch) wbkgdset(stdscr,(ch)) #define chgat(n,a,c,o) wchgat(stdscr,(n),(a),(c),(o)) #define clear() wclear(stdscr) #define clrtobot() wclrtobot(stdscr) #define clrtoeol() wclrtoeol(stdscr) #define color_set(c,o) wcolor_set(stdscr,(c),(o)) #define delch() wdelch(stdscr) #define deleteln() winsdelln(stdscr,-1) #define echochar(c) wechochar(stdscr,(c)) #define erase() werase(stdscr) #define getch() wgetch(stdscr) #define getstr(str) wgetstr(stdscr,(str)) #define inch() winch(stdscr) #define inchnstr(s,n) winchnstr(stdscr,(s),(n)) #define inchstr(s) winchstr(stdscr,(s)) #define innstr(s,n) winnstr(stdscr,(s),(n)) #define insch(c) winsch(stdscr,(c)) #define insdelln(n) winsdelln(stdscr,(n)) #define insertln() winsdelln(stdscr,1) #define insnstr(s,n) winsnstr(stdscr,(s),(n)) #define insstr(s) winsstr(stdscr,(s)) #define instr(s) winstr(stdscr,(s)) #define move(y,x) wmove(stdscr,(y),(x)) #define refresh() wrefresh(stdscr) #define scrl(n) wscrl(stdscr,(n)) #define setscrreg(t,b) wsetscrreg(stdscr,(t),(b)) #define standend() wstandend(stdscr) #define standout() wstandout(stdscr) #define timeout(delay) wtimeout(stdscr,(delay)) #define wdeleteln(win) winsdelln(win,-1) #define winsertln(win) winsdelln(win,1) /* * mv functions */ #define mvwaddch(win,y,x,ch) (wmove((win),(y),(x)) == ERR ? ERR : waddch((win),(ch))) #define mvwaddchnstr(win,y,x,str,n) (wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),(n))) #define mvwaddchstr(win,y,x,str) (wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),-1)) #define mvwaddnstr(win,y,x,str,n) (wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),(n))) #define mvwaddstr(win,y,x,str) (wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),-1)) #define mvwchgat(win,y,x,n,a,c,o) (wmove((win),(y),(x)) == ERR ? ERR : wchgat((win),(n),(a),(c),(o))) #define mvwdelch(win,y,x) (wmove((win),(y),(x)) == ERR ? ERR : wdelch(win)) #define mvwgetch(win,y,x) (wmove((win),(y),(x)) == ERR ? ERR : wgetch(win)) #define mvwgetnstr(win,y,x,str,n) (wmove((win),(y),(x)) == ERR ? ERR : wgetnstr((win),(str),(n))) #define mvwgetstr(win,y,x,str) (wmove((win),(y),(x)) == ERR ? ERR : wgetstr((win),(str))) #define mvwhline(win,y,x,c,n) (wmove((win),(y),(x)) == ERR ? ERR : whline((win),(c),(n))) #define mvwinch(win,y,x) (wmove((win),(y),(x)) == ERR ? NCURSES_CAST(chtype, ERR) : winch(win)) #define mvwinchnstr(win,y,x,s,n) (wmove((win),(y),(x)) == ERR ? ERR : winchnstr((win),(s),(n))) #define mvwinchstr(win,y,x,s) (wmove((win),(y),(x)) == ERR ? ERR : winchstr((win),(s))) #define mvwinnstr(win,y,x,s,n) (wmove((win),(y),(x)) == ERR ? ERR : winnstr((win),(s),(n))) #define mvwinsch(win,y,x,c) (wmove((win),(y),(x)) == ERR ? ERR : winsch((win),(c))) #define mvwinsnstr(win,y,x,s,n) (wmove((win),(y),(x)) == ERR ? ERR : winsnstr((win),(s),(n))) #define mvwinsstr(win,y,x,s) (wmove((win),(y),(x)) == ERR ? ERR : winsstr((win),(s))) #define mvwinstr(win,y,x,s) (wmove((win),(y),(x)) == ERR ? ERR : winstr((win),(s))) #define mvwvline(win,y,x,c,n) (wmove((win),(y),(x)) == ERR ? ERR : wvline((win),(c),(n))) #define mvaddch(y,x,ch) mvwaddch(stdscr,(y),(x),(ch)) #define mvaddchnstr(y,x,str,n) mvwaddchnstr(stdscr,(y),(x),(str),(n)) #define mvaddchstr(y,x,str) mvwaddchstr(stdscr,(y),(x),(str)) #define mvaddnstr(y,x,str,n) mvwaddnstr(stdscr,(y),(x),(str),(n)) #define mvaddstr(y,x,str) mvwaddstr(stdscr,(y),(x),(str)) #define mvchgat(y,x,n,a,c,o) mvwchgat(stdscr,(y),(x),(n),(a),(c),(o)) #define mvdelch(y,x) mvwdelch(stdscr,(y),(x)) #define mvgetch(y,x) mvwgetch(stdscr,(y),(x)) #define mvgetnstr(y,x,str,n) mvwgetnstr(stdscr,(y),(x),(str),(n)) #define mvgetstr(y,x,str) mvwgetstr(stdscr,(y),(x),(str)) #define mvhline(y,x,c,n) mvwhline(stdscr,(y),(x),(c),(n)) #define mvinch(y,x) mvwinch(stdscr,(y),(x)) #define mvinchnstr(y,x,s,n) mvwinchnstr(stdscr,(y),(x),(s),(n)) #define mvinchstr(y,x,s) mvwinchstr(stdscr,(y),(x),(s)) #define mvinnstr(y,x,s,n) mvwinnstr(stdscr,(y),(x),(s),(n)) #define mvinsch(y,x,c) mvwinsch(stdscr,(y),(x),(c)) #define mvinsnstr(y,x,s,n) mvwinsnstr(stdscr,(y),(x),(s),(n)) #define mvinsstr(y,x,s) mvwinsstr(stdscr,(y),(x),(s)) #define mvinstr(y,x,s) mvwinstr(stdscr,(y),(x),(s)) #define mvvline(y,x,c,n) mvwvline(stdscr,(y),(x),(c),(n)) /* * Some wide-character functions can be implemented without the extensions. */ #if !NCURSES_OPAQUE #define getbkgd(win) ((win) ? ((win)->_bkgd) : 0) #endif /* NCURSES_OPAQUE */ #define slk_attr_off(a,v) ((v) ? ERR : slk_attroff(a)) #define slk_attr_on(a,v) ((v) ? ERR : slk_attron(a)) #if !NCURSES_OPAQUE #if NCURSES_WIDECHAR && @NCURSES_EXT_COLORS@ #define wattr_set(win,a,p,opts) (((win) \ ? ((win)->_attrs = ((a) & ~A_COLOR), \ (win)->_color = (p)) \ : OK), \ OK) #define wattr_get(win,a,p,opts) ((void)(((a) != (void *)0) ? (*(a) = (win) ? (win)->_attrs : 0) : OK), \ (void)(((p) != (void *)0) ? (*(p) = (NCURSES_PAIRS_T) ((win) ? (win)->_color : 0)) : OK), \ OK) #else #define wattr_set(win,a,p,opts) (((win) \ ? ((win)->_attrs = (((a) & ~A_COLOR) | (attr_t)COLOR_PAIR(p))) \ : OK), \ OK) #define wattr_get(win,a,p,opts) ((void)(((a) != (void *)0) ? (*(a) = (win) ? (win)->_attrs : 0) : OK), \ (void)(((p) != (void *)0) ? (*(p) = (NCURSES_PAIRS_T) ((win) ? PAIR_NUMBER((win)->_attrs) : 0)) : OK), \ OK) #endif #endif /* NCURSES_OPAQUE */ /* * X/Open curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use * varargs.h. It adds new calls vw_printw/vw_scanw, which are supposed to * use POSIX stdarg.h. The ncurses versions of vwprintw/vwscanw already * use stdarg.h, so... */ #define vw_printw vwprintw #define vw_scanw vwscanw /* * Export fallback function for use in C++ binding. */ #if !@HAVE_VSSCANF@ #define vsscanf(a,b,c) _nc_vsscanf(a,b,c) NCURSES_EXPORT(int) vsscanf(const char *, const char *, va_list); #endif /* * These macros are extensions - not in X/Open Curses. */ #if @NCURSES_EXT_FUNCS@ #if !NCURSES_OPAQUE #define is_cleared(win) ((win) ? (win)->_clear : FALSE) #define is_idcok(win) ((win) ? (win)->_idcok : FALSE) #define is_idlok(win) ((win) ? (win)->_idlok : FALSE) #define is_immedok(win) ((win) ? (win)->_immed : FALSE) #define is_keypad(win) ((win) ? (win)->_use_keypad : FALSE) #define is_leaveok(win) ((win) ? (win)->_leaveok : FALSE) #define is_nodelay(win) ((win) ? ((win)->_delay == 0) : FALSE) #define is_notimeout(win) ((win) ? (win)->_notimeout : FALSE) #define is_pad(win) ((win) ? ((win)->_flags & _ISPAD) != 0 : FALSE) #define is_scrollok(win) ((win) ? (win)->_scroll : FALSE) #define is_subwin(win) ((win) ? ((win)->_flags & _SUBWIN) != 0 : FALSE) #define is_syncok(win) ((win) ? (win)->_sync : FALSE) #define wgetdelay(win) ((win) ? (win)->_delay : 0) #define wgetparent(win) ((win) ? (win)->_parent : 0) #define wgetscrreg(win,t,b) ((win) ? (*(t) = (win)->_regtop, *(b) = (win)->_regbottom, OK) : ERR) #endif #endif #endif /* NCURSES_NOMACROS */ /* * Public variables. * * Notes: * a. ESCDELAY was an undocumented feature under AIX curses. * It gives the ESC expire time in milliseconds. * b. ttytype is needed for backward compatibility */ #if NCURSES_REENTRANT NCURSES_WRAPPED_VAR(WINDOW *, curscr); NCURSES_WRAPPED_VAR(WINDOW *, newscr); NCURSES_WRAPPED_VAR(WINDOW *, stdscr); NCURSES_WRAPPED_VAR(char *, ttytype); NCURSES_WRAPPED_VAR(int, COLORS); NCURSES_WRAPPED_VAR(int, COLOR_PAIRS); NCURSES_WRAPPED_VAR(int, COLS); NCURSES_WRAPPED_VAR(int, ESCDELAY); NCURSES_WRAPPED_VAR(int, LINES); NCURSES_WRAPPED_VAR(int, TABSIZE); #define curscr NCURSES_PUBLIC_VAR(curscr()) #define newscr NCURSES_PUBLIC_VAR(newscr()) #define stdscr NCURSES_PUBLIC_VAR(stdscr()) #define ttytype NCURSES_PUBLIC_VAR(ttytype()) #define COLORS NCURSES_PUBLIC_VAR(COLORS()) #define COLOR_PAIRS NCURSES_PUBLIC_VAR(COLOR_PAIRS()) #define COLS NCURSES_PUBLIC_VAR(COLS()) #define ESCDELAY NCURSES_PUBLIC_VAR(ESCDELAY()) #define LINES NCURSES_PUBLIC_VAR(LINES()) #define TABSIZE NCURSES_PUBLIC_VAR(TABSIZE()) #else extern NCURSES_EXPORT_VAR(WINDOW *) curscr; extern NCURSES_EXPORT_VAR(WINDOW *) newscr; extern NCURSES_EXPORT_VAR(WINDOW *) stdscr; extern NCURSES_EXPORT_VAR(char) ttytype[]; extern NCURSES_EXPORT_VAR(int) COLORS; extern NCURSES_EXPORT_VAR(int) COLOR_PAIRS; extern NCURSES_EXPORT_VAR(int) COLS; extern NCURSES_EXPORT_VAR(int) ESCDELAY; extern NCURSES_EXPORT_VAR(int) LINES; extern NCURSES_EXPORT_VAR(int) TABSIZE; #endif /* * Pseudo-character tokens outside ASCII range. The curses wgetch() function * will return any given one of these only if the corresponding k- capability * is defined in your terminal's terminfo entry. * * Some keys (KEY_A1, etc) are arranged like this: * a1 up a3 * left b2 right * c1 down c3 * * A few key codes do not depend upon the terminfo entry. */ #define KEY_CODE_YES 0400 /* A wchar_t contains a key code */ #define KEY_MIN 0401 /* Minimum curses key */ #define KEY_BREAK 0401 /* Break key (unreliable) */ #define KEY_SRESET 0530 /* Soft (partial) reset (unreliable) */ #define KEY_RESET 0531 /* Reset or hard reset (unreliable) */ ncurses-6.0-20160213/include/nc_alloc.h0000644000175100001440000001057512101050443016020 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-on * ****************************************************************************/ /* $Id: nc_alloc.h,v 1.22 2013/01/26 21:56:51 tom Exp $ */ #ifndef NC_ALLOC_included #define NC_ALLOC_included 1 /* *INDENT-OFF* */ #ifdef __cplusplus extern "C" { #endif #if defined(HAVE_LIBDMALLOC) && HAVE_LIBDMALLOC #include #undef strndup /* workaround for #define in GLIBC 2.7 */ #include /* Gray Watson's library */ #else #undef HAVE_LIBDMALLOC #define HAVE_LIBDMALLOC 0 #endif #if defined(HAVE_LIBDBMALLOC) && HAVE_LIBDBMALLOC #include /* Conor Cahill's library */ #else #undef HAVE_LIBDBMALLOC #define HAVE_LIBDBMALLOC 0 #endif #if defined(HAVE_LIBMPATROL) && HAVE_LIBMPATROL #include /* Memory-Patrol library */ #else #undef HAVE_LIBMPATROL #define HAVE_LIBMPATROL 0 #endif #ifndef NO_LEAKS #define NO_LEAKS 0 #endif #if HAVE_LIBDBMALLOC || HAVE_LIBDMALLOC || NO_LEAKS #define HAVE_NC_FREEALL 1 struct termtype; extern NCURSES_EXPORT(void) _nc_free_and_exit(int) GCC_NORETURN; extern NCURSES_EXPORT(void) _nc_free_tinfo(int) GCC_NORETURN; extern NCURSES_EXPORT(void) _nc_free_tic(int) GCC_NORETURN; extern NCURSES_EXPORT(void) _nc_free_tparm(void); extern NCURSES_EXPORT(void) _nc_leaks_dump_entry(void); extern NCURSES_EXPORT(void) _nc_leaks_tic(void); #if NCURSES_SP_FUNCS extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_free_and_exit)(SCREEN*, int) GCC_NORETURN; #endif #define ExitProgram(code) _nc_free_and_exit(code) #endif /* NO_LEAKS, etc */ #ifndef HAVE_NC_FREEALL #define HAVE_NC_FREEALL 0 #endif #ifndef ExitProgram #define ExitProgram(code) exit(code) #endif /* doalloc.c */ extern NCURSES_EXPORT(void *) _nc_doalloc(void *, size_t); #if !HAVE_STRDUP #undef strdup #define strdup _nc_strdup extern NCURSES_EXPORT(char *) _nc_strdup(const char *); #endif /* entries.c */ extern NCURSES_EXPORT(void) _nc_leaks_tinfo(void); #define typeMalloc(type,elts) (type *)malloc((size_t)(elts)*sizeof(type)) #define typeCalloc(type,elts) (type *)calloc((size_t)(elts),sizeof(type)) #define typeRealloc(type,elts,ptr) (type *)_nc_doalloc(ptr, (size_t)(elts)*sizeof(type)) #ifdef __cplusplus } #endif /* *INDENT-ON* */ #endif /* NC_ALLOC_included */ ncurses-6.0-20160213/include/nc_tparm.h0000644000175100001440000001006711720014562016055 0ustar tomusers/**************************************************************************** * Copyright (c) 2006-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2006 * ****************************************************************************/ /* $Id: nc_tparm.h,v 1.6 2012/02/18 21:34:42 tom Exp $ */ #ifndef NC_TPARM_included #define NC_TPARM_included 1 /* * Cast parameters past the formatting-string for tparm() to match the * assumption of the varargs code. */ #ifndef TPARM_ARG #ifdef NCURSES_TPARM_ARG #define TPARM_ARG NCURSES_TPARM_ARG #else #define TPARM_ARG long #endif #endif /* TPARAM_ARG */ #define TPARM_N(n) (TPARM_ARG)(n) #define TPARM_9(a,b,c,d,e,f,g,h,i,j) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g),TPARM_N(h),TPARM_N(i),TPARM_N(j)) #if NCURSES_TPARM_VARARGS #define TPARM_8(a,b,c,d,e,f,g,h,i) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g),TPARM_N(h),TPARM_N(i)) #define TPARM_7(a,b,c,d,e,f,g,h) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g),TPARM_N(h)) #define TPARM_6(a,b,c,d,e,f,g) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g)) #define TPARM_5(a,b,c,d,e,f) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f)) #define TPARM_4(a,b,c,d,e) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e)) #define TPARM_3(a,b,c,d) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d)) #define TPARM_2(a,b,c) tparm(a,TPARM_N(b),TPARM_N(c)) #define TPARM_1(a,b) tparm(a,TPARM_N(b)) #define TPARM_0(a) tparm(a) #else #define TPARM_8(a,b,c,d,e,f,g,h,i) TPARM_9(a,b,c,d,e,f,g,h,i,0) #define TPARM_7(a,b,c,d,e,f,g,h) TPARM_8(a,b,c,d,e,f,g,h,0) #define TPARM_6(a,b,c,d,e,f,g) TPARM_7(a,b,c,d,e,f,g,0) #define TPARM_5(a,b,c,d,e,f) TPARM_6(a,b,c,d,e,f,0) #define TPARM_4(a,b,c,d,e) TPARM_5(a,b,c,d,e,0) #define TPARM_3(a,b,c,d) TPARM_4(a,b,c,d,0) #define TPARM_2(a,b,c) TPARM_3(a,b,c,0) #define TPARM_1(a,b) TPARM_2(a,b,0) #define TPARM_1(a,b) TPARM_2(a,b,0) #define TPARM_0(a) TPARM_1(a,0) #endif #endif /* NC_TPARM_included */ ncurses-6.0-20160213/include/MKparametrized.sh0000755000175100001440000000656212340132647017370 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 1998-2006,2014 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: MKparametrized.sh,v 1.7 2014/05/24 15:07:19 tom Exp $ # # MKparametrized.sh -- generate indirection vectors for various sort methods # # The output of this script is C source for an array specifying whether # termcap strings should undergo parameter and padding translation. # CAPS="${1-Caps}" cat < 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* $Id: termcap.h.in,v 1.16 2001/03/24 21:53:27 tom Exp $ */ #ifndef NCURSES_TERMCAP_H_incl #define NCURSES_TERMCAP_H_incl 1 #undef NCURSES_VERSION #define NCURSES_VERSION "@NCURSES_MAJOR@.@NCURSES_MINOR@" #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #undef NCURSES_CONST #define NCURSES_CONST @NCURSES_CONST@ #undef NCURSES_OSPEED #define NCURSES_OSPEED @NCURSES_OSPEED@ extern NCURSES_EXPORT_VAR(char) PC; extern NCURSES_EXPORT_VAR(char *) UP; extern NCURSES_EXPORT_VAR(char *) BC; extern NCURSES_EXPORT_VAR(NCURSES_OSPEED) ospeed; #if !defined(NCURSES_TERM_H_incl) extern NCURSES_EXPORT(char *) tgetstr (NCURSES_CONST char *, char **); extern NCURSES_EXPORT(char *) tgoto (const char *, int, int); extern NCURSES_EXPORT(int) tgetent (char *, const char *); extern NCURSES_EXPORT(int) tgetflag (NCURSES_CONST char *); extern NCURSES_EXPORT(int) tgetnum (NCURSES_CONST char *); extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int)); #endif #ifdef __cplusplus } #endif #endif /* NCURSES_TERMCAP_H_incl */ ncurses-6.0-20160213/include/ncurses_cfg.hin0000644000175100001440000000652412575107762017123 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997-on * ****************************************************************************/ /* * $Id: ncurses_cfg.hin,v 1.8 2015/09/12 20:49:54 tom Exp $ * * This is a template-file used to generate the "ncurses_cfg.h" file. * * Rather than list every definition, the configuration script substitutes the * definitions that it finds using 'sed'. You need a patch (original date * 971222) to autoconf 2.12 or 2.13 to do this. * * See: * http://invisible-island.net/autoconf/ * ftp://invisible-island.net/autoconf/ */ #ifndef NC_CONFIG_H #define NC_CONFIG_H @DEFS@ #include /* The C compiler may not treat these properly but C++ has to */ #ifdef __cplusplus #undef const #undef inline #elif !defined(__clang__) #if defined(lint) || defined(TRACE) #undef inline #define inline /* nothing */ #endif #endif /* On HP-UX, the C compiler doesn't grok mbstate_t without -D_XOPEN_SOURCE=500. However, this causes problems on IRIX. So, we #define mbstate_t to int in configure.in only for the C compiler if needed. */ #ifndef __cplusplus #ifdef NEED_MBSTATE_T_DEF #define mbstate_t int #endif #endif #endif /* NC_CONFIG_H */ ncurses-6.0-20160213/include/Caps0000644000175100001440000020011512517201603014704 0ustar tomusers############################################################################## # Copyright (c) 1998-2011,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Zeyd M. Ben-Halim 1992,1995 # and: Eric S. Raymond # # $Id: Caps,v 1.39 2015/04/26 15:25:55 tom Exp $ # # This is the master termcap/terminfo capability table. # # This table is used to generate initializers for tables that drive tic, # infocmp, and the library compilation code used to support the termcap # compatibility hack. It is also used to generate the tabular portion of the # terminfo(5) man page; lines beginning with `#%' are passed through to become # the terminfo table. # # This file has three major sections; a standard-capabilities table, two # extension-capability tables, and a section of aliases declarations. # The first two have the same format, as follows: # # FILE FORMAT # # Column 1: terminfo variable name # Column 2: terminfo capability name # Column 3: capability type (boolean, numeric, or string) # Column 4: termcap capability name # Column 5: KEY_xxx name, if any, `-' otherwise # Column 6: value for KEY_xxx name, if any, `-' otherwise # Column 7: Lead with `Y' if capability should be emitted in termcap # translations, `-' otherwise # Column 8: capability description # # The codes following [Y-] in column 7 describe the versions of termcap which # use the given capability. This information is not used by the curses library # proper; rather, it's there to help the terminfo maintainer avoid emitting # termcap entry translations that are more than 1023 bytes long (and tank a # lot of old termcap-using programs). The codes read as follows: # B = mentioned in the BSD man page for 4.4BSD curses # C = used by the 4.4BSD curses library # G = mentioned in the documentation for GNU termcap # E = used by GNU Emacs # K = remove this terminfo capability when translating to standard format # The important codes are C and E. A cap with C or E should be preserved in # translation if possible. The problem is that preserving all such caps may # lead to some termcap translations being too long. The termcap maintainer # has a bit of a juggling act to do...potential problem cases are marked with # an asterisk (*). # # The aliases section has the following format: # # Column 1: either `capalias' or `infoalias' # Column 2: name to be aliased # Column 3: what name it should translate to. The name IGNORE means it # should be discarded with a warning message. # Column 4: name of the extension set (used for compiler warning messages) # Column 5: capability description (usually an associated terminfo variable) # # HANDLING TERMCAP AND TERMINFO EXTENSIONS # # There are basically five different ways to handle termcap and terminfo # extensions: # # 1. Don't list the capname here, or list it but comment it out (the latter # is preferable; someone might want to handle it in the future). If you do # this, the capability will be treated as unknown and raise a warning from # the compiler. # # 2. Alias it. This is appropriate if the capability has the same meaning # as an already-supported one. The compiler will handle aliasing, emitting # an appropriate informational message whenever an alias fires. # # 3. List it in the standard table. You almost certainly do *not* want # to do this -- the capabilities in that one, and their order, have been # carefully chosen to be SVr4-binary-compatible when they're written out # as a terminfo object, and breaking this would be bad. It's up to the ncurses # library what to do with the terminfo data after it's read in. # # 4. List it in the aliases table with an IGNORE target field. If you # do this, the capability will be ignored on input (though the user will # get a warning message about it). # # 5. List it in the extensions table. If you do this, the compiler will # silently accept the capability, but the curses library proper will never # see it (because it won't be written out as part of the terminfo object # format). It's up to you what you have the compiler do with it. # # There are two opposite reasons to choose option 5. One is when you want # to eat the capability silently and discard it when doing translations # to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are # in this class. Nothing will ever use them again. # # More usually, you want the compiler to try to deduce something from the # capability value that it can use to translate it into your output format. # You'll need to write custom code, probably in postprocess_termcap() or # postprocess_terminfo(), to handle the translation. # # CONTROLLING ENTRY LENGTH # # Notes on specific elisions made to fit translations within 1023 bytes: # # Machines with IBM PC-like keyboards want to be able to define the following # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap- # only environments for End or Home-Down), key_dc, and key_ic. This is also # the set of keys the `joe' editor will be upset if it can't see. So don't # trim those out of the set to be translated to termcap, or various users of # the termcap file will become irate. # # It might look tempting to leave those long init strings out of translations. # We can't do it (yet); 4.4BSD tput and tset use them. # # We retain the sgr capability in translation in spite of the fact that neither # 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are # hard to understand without it, and (b) the entries in which it is long tend # to be older types that don't use up a lot of string space on function keys. # The tic(1) translation code will complain and elide it if it makes a critical # difference (there is special code in tic to recognize this situation). # # Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion # optimizer in BSD curses didn't use them. This omission seems to be the # single most effective one, it shortened the resolved length of all thirteen # problem entries in the 9.9.0 version of the terminfo master below critical. # # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap # translations go back over critical if we do this. As 4.4BSD curses fades # into history and GNU termcap's application base shrinks towards being GNU # Emacs only, we'll probably elide out some BSD-only capabilities in order # to buy space for non-essentials Emacs is still using. Capabilities high # on that hit list: rc, sc, uc. # ############################################################################# # # STANDARD CAPABILITIES # #%The following is a complete table of the capabilities included in a #%terminfo description block and available to terminfo-using code. In each #%line of the table, #% #%The \fBvariable\fR is the name by which the programmer (at the terminfo level) #%accesses the capability. #% #%The \fBcapname\fR is the short name used in the text of the database, #%and is used by a person updating the database. #%Whenever possible, capnames are chosen to be the same as or similar to #%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses #%identical or very similar names). Semantics are also intended to match #%those of the specification. #% #%The termcap code is the old #%.B termcap #%capability name (some capabilities are new, and have names which termcap #%did not originate). #%.P #%Capability names have no hard length limit, but an informal limit of 5 #%characters has been adopted to keep them short and to allow the tabs in #%the source file #%.B Caps #%to line up nicely. #% #%Finally, the description field attempts to convey the semantics of the #%capability. You may find some codes in the description field: #%.TP #%(P) #%indicates that padding may be specified #%.TP #%#[1-9] #%in the description field indicates that the string is passed through tparm with #%parms as given (#\fIi\fP). #%.TP #%(P*) #%indicates that padding may vary in proportion to the number of #%lines affected #%.TP #%(#\d\fIi\fP\u) #%indicates the \fIi\fP\uth\d parameter. #% #%.PP #% These are the boolean capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBBooleans name Code\fR auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column auto_right_margin am bool am - - YBCGE terminal has automatic margins no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C) ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp) eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept) erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank generic_type gn bool gn - - YB-G- generic line type hard_copy hc bool hc - - YBCG- hardcopy terminal has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit) has_status_line hs bool hs - - YB-G- has extra status line insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls memory_above da bool da - - YBCG- display may be retained above the screen memory_below db bool db - - YB-GE display may be retained below the screen move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode over_strike os bool os - - YBCG- terminal can overstrike status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061) tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine) transparent_underline ul bool ul - - YBCGE underline character overstrikes xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required prtr_silent mc5i bool 5i - - ----- printer will not echo on screen hard_cursor chts bool HC - - ----- cursor is hard to see non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup no_pad_char npc bool NP - - ----- pad character does not exist non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive can_change ccc bool cc - - ----- terminal can re-define existing colors back_color_erase bce bool ut - - ----- screen erased with background color hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix) col_addr_glitch xhpa bool YA - - ----- only positive motion for hpa/mhpa caps cr_cancels_micro_mode crxm bool YB - - ----- using cr turns off micro mode has_print_wheel daisy bool YC - - ----- printer needs operator to change character set row_addr_glitch xvpa bool YD - - ----- only positive motion for vpa/mvpa caps semi_auto_right_margin sam bool YE - - ----- printing in last column causes cr cpi_changes_res cpix bool YF - - ----- changing character pitch changes resolution lpi_changes_res lpix bool YG - - ----- changing line pitch changes resolution #%.TE #%.ad #% #%These are the numeric capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBNumeric name Code\fR columns cols num co - - YBCGE number of columns in a line init_tabs it num it - - YB-G- tabs initially every # spaces lines lines num li - - YBCGE number of lines on screen or page lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix) width_status_line wsl num ws - - YB-G- number of columns in status line num_labels nlab num Nl - - ----- number of labels on screen label_height lh num lh - - ----- rows in each label label_width lw num lw - - ----- columns in each label max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle maximum_windows wnum num MW - - ----- maximum number of definable windows # These came in with SVr4's color support max_colors colors num Co - - ----- maximum number of colors on screen max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen no_color_video ncv num NC - - ----- video attributes that cannot be used with colors #%.TE #%.ad #% #%The following numeric capabilities are present in the SVr4.0 term structure, #%but are not yet documented in the man page. They came in with SVr4's #%printer support. #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBNumeric name Code\fR buffer_capacity bufsz num Ya - - ----- numbers of bytes buffered before printing dot_vert_spacing spinv num Yb - - ----- spacing of pins vertically in pins per inch dot_horz_spacing spinh num Yc - - ----- spacing of dots horizontally in dots per inch max_micro_address maddr num Yd - - ----- maximum value in micro_..._address max_micro_jump mjump num Ye - - ----- maximum value in parm_..._micro micro_col_size mcs num Yf - - ----- character step size when in micro mode micro_line_size mls num Yg - - ----- line step size when in micro mode number_of_pins npins num Yh - - ----- numbers of pins in print-head output_res_char orc num Yi - - ----- horizontal resolution in units per line output_res_line orl num Yj - - ----- vertical resolution in units per line output_res_horz_inch orhi num Yk - - ----- horizontal resolution in units per inch output_res_vert_inch orvi num Yl - - ----- vertical resolution in units per inch print_rate cps num Ym - - ----- print rate in characters per second wide_char_size widcs num Yn - - ----- character step size when in double wide mode buttons btns num BT - - ----- number of buttons on mouse bit_image_entwining bitwin num Yo - - ----- number of passes for each bit-image row bit_image_type bitype num Yp - - ----- type of bit-image device #%.TE #%.ad #% #%These are the string capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR back_tab cbt str bt - - YBCGE back tab (P) bell bel str bl - - YB-GE audible signal (bell) (P) carriage_return cr str cr - - YBCGE carriage return (P*) (P*) change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P) clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P) clear_screen clear str cl - - YBCGE clear screen and home cursor (P*) clr_eol el str ce - - YBCGE clear to end of line (P) clr_eos ed str cd - - YBCGE clear to end of screen (P*) column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P) command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !? cursor_address cup str cm - - YBCGE move to row #1 columns #2 cursor_down cud1 str do - - YBCGE down one line cursor_home home str ho - - YBCGE home cursor (if no cup) cursor_invisible civis str vi - - YB-G- make cursor invisible cursor_left cub1 str le - - YBCGE move left one space cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2 cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis) cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space) cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup) cursor_up cuu1 str up - - YBCGE up one line cursor_visible cvvis str vs - - YBCGE make cursor very visible delete_character dch1 str dc - - YBCGE delete character (P*) delete_line dl1 str dl - - YBCGE delete line (P*) dis_status_line dsl str ds - - YB-G- disable status line down_half_line hd str hd - - YB-G- half a line down enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P) enter_blink_mode blink str mb - - YB-G- turn on blinking enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode enter_ca_mode smcup str ti - - YBCGE string to start programs using cup enter_delete_mode smdc str dm - - YBCGE enter delete mode enter_dim_mode dim str mh - - YB-G- turn on half-bright mode enter_insert_mode smir str im - - YBCGE enter insert mode enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible) enter_protected_mode prot str mp - - -B-G-* turn on protected mode enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode enter_standout_mode smso str so - - YBCGE begin standout mode enter_underline_mode smul str us - - YBCGE begin underline mode erase_chars ech str ec - - YB-G- erase #1 characters (P) exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P) exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup exit_delete_mode rmdc str ed - - YBCGE end delete mode exit_insert_mode rmir str ei - - YBCGE exit insert mode exit_standout_mode rmso str se - - YBCGE exit standout mode exit_underline_mode rmul str ue - - YBCGE exit underline mode flash_screen flash str vb - - YBCGE visible bell (may not move cursor) form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*) from_status_line fsl str fs - - YB-G- return from status line init_1string is1 str i1 - - YB-G- initialization string init_2string is2 str is - - YB-G- initialization string init_3string is3 str i3 - - YB-G- initialization string init_file if str if - - YB-G- name of initialization file insert_character ich1 str ic - - YBCGE insert character (P) insert_line il1 str al - - YBCGE insert line (P*) insert_padding ip str ip - - YBCGE insert padding after inserted character key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key key_f10 kf10 str k; KEY_F(10) - ----E F10 function key key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key key_home khome str kh KEY_HOME 0406 YBCGE home key key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down) key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0 lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1 lab_f10 lf10 str la - - ----- label on function key f10 if not f10 lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2 lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3 lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4 lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5 lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6 lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7 lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8 lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9 meta_off rmm str mo - - YB-G-* turn off meta mode meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on) newline nel str nw - - YB-G-* newline (behave like cr followed by lf) pad_char pad str pc - - YBCGE padding char (instead of null) parm_dch dch str DC - - YB-GE delete #1 characters (P*) parm_delete_line dl str DL - - YBCGE delete #1 lines (P*) parm_down_cursor cud str DO - - YBCGE down #1 lines (P*) parm_ich ich str IC - - YB-GE insert #1 characters (P*) parm_index indn str SF - - YBCG- scroll forward #1 lines (P) parm_insert_line il str AL - - YBCGE insert #1 lines (P*) parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P) parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*) parm_rindex rin str SR - - YBCG- scroll back #1 lines (P) parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*) pkey_key pfkey str pk - - -B--- program function key #1 to type string #2 pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2 pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2 print_screen mc0 str ps - - -B-G-* print contents of screen prtr_off mc4 str pf - - -B-G-* turn off printer prtr_on mc5 str po - - -B-G-* turn on printer repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*) reset_1string rs1 str r1 - - -B--- reset string reset_2string rs2 str r2 - - -B--- reset string reset_3string rs3 str r3 - - -B--- reset string reset_file rf str rf - - -B--- name of reset file restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor row_address vpa str cv - - -B-GE* vertical position #1 absolute (P) save_cursor sc str sc - - YBCG- save current cursor position (P) scroll_forward ind str sf - - YBCGE scroll text up (P) scroll_reverse ri str sr - - YBCGE scroll text down (P) set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9) set_tab hts str st - - YB-G- set a tab in every row, current columns set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4 tab ht str ta - - YBCGE tab to next 8-space hardware tab stop to_status_line tsl str ts - - YB-G- move to status line, column #1 underline_char uc str uc - - YBCG- underline char and move past it up_half_line hu str hu - - YB-G- half a line up init_prog iprog str iP - - -B--- path name of program for initialization key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes # # SVr1 capabilities stop here. IBM's version of terminfo is the same as # SVr4 up to this point, but has a different set afterwards. # char_padding rmp str rP - - ----- like ip but when in insert mode acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100 plab_norm pln str pn - - ----- program label #1 to show string #2 key_btab kcbt str kB KEY_BTAB 0541 ----- back-tab key enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking enter_am_mode smam str SA - - ----- turn on automatic margins exit_am_mode rmam str RA - - ----- turn off automatic margins xon_character xonc str XN - - ----- XON character xoff_character xoffc str XF - - ----- XOFF character ena_acs enacs str eA - - ----- enable alternate char set label_on smln str LO - - ----- turn on soft labels label_off rmln str LF - - ----- turn off soft labels key_beg kbeg str @1 KEY_BEG 0542 ----- begin key key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key key_close kclo str @3 KEY_CLOSE 0544 ----- close key key_command kcmd str @4 KEY_COMMAND 0545 ----- command key key_copy kcpy str @5 KEY_COPY 0546 ----- copy key key_create kcrt str @6 KEY_CREATE 0547 ----- create key key_end kend str @7 KEY_END 0550 ----- end key key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key key_exit kext str @9 KEY_EXIT 0551 ----- exit key key_find kfnd str @0 KEY_FIND 0552 ----- find key key_help khlp str %1 KEY_HELP 0553 ----- help key key_mark kmrk str %2 KEY_MARK 0554 ----- mark key key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key key_move kmov str %4 KEY_MOVE 0556 ----- move key key_next knxt str %5 KEY_NEXT 0557 ----- next key key_open kopn str %6 KEY_OPEN 0560 ----- open key key_options kopt str %7 KEY_OPTIONS 0561 ----- options key key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key key_print kprt str %9 KEY_PRINT 0532 ----- print key key_redo krdo str %0 KEY_REDO 0563 ----- redo key key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key key_restart krst str &4 KEY_RESTART 0567 ----- restart key key_resume kres str &5 KEY_RESUME 0570 ----- resume key key_save ksav str &6 KEY_SAVE 0571 ----- save key key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key key_undo kund str &8 KEY_UNDO 0630 ----- undo key key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key key_select kslt str *6 KEY_SELECT 0601 ----- select key key_send kEND str *7 KEY_SEND 0602 ----- shifted end key key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key req_for_input rfi str RF - - ----- send next input char (for ptys) key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key key_f20 kf20 str FA KEY_F(20) - ----E F20 function key key_f21 kf21 str FB KEY_F(21) - ----E F21 function key key_f22 kf22 str FC KEY_F(22) - ----E F22 function key key_f23 kf23 str FD KEY_F(23) - ----E F23 function key key_f24 kf24 str FE KEY_F(24) - ----E F24 function key key_f25 kf25 str FF KEY_F(25) - ----E F25 function key key_f26 kf26 str FG KEY_F(26) - ----E F26 function key key_f27 kf27 str FH KEY_F(27) - ----E F27 function key key_f28 kf28 str FI KEY_F(28) - ----E F28 function key key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key key_f30 kf30 str FK KEY_F(30) - ----E F30 function key key_f31 kf31 str FL KEY_F(31) - ----E F31 function key key_f32 kf32 str FM KEY_F(32) - ----E F32 function key key_f33 kf33 str FN KEY_F(33) - ----E F33 function key key_f34 kf34 str FO KEY_F(34) - ----E F34 function key key_f35 kf35 str FP KEY_F(35) - ----E F35 function key key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key key_f37 kf37 str FR KEY_F(37) - ----E F37 function key key_f38 kf38 str FS KEY_F(38) - ----E F38 function key key_f39 kf39 str FT KEY_F(39) - ----E F39 function key key_f40 kf40 str FU KEY_F(40) - ----E F40 function key key_f41 kf41 str FV KEY_F(41) - ----E F41 function key key_f42 kf42 str FW KEY_F(42) - ----E F42 function key key_f43 kf43 str FX KEY_F(43) - ----E F43 function key key_f44 kf44 str FY KEY_F(44) - ----E F44 function key key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key clr_bol el1 str cb - - ----- Clear to beginning of line clear_margins mgc str MC - - ----- clear right and left soft margins set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap). set_right_margin smgr str MR - - ----- set right soft margin at current column label_format fln str Lf - - ----- label format set_clock sclk str SC - - ----- set clock, #1 hrs #2 mins #3 secs display_clock dclk str DK - - ----- display clock remove_clock rmclk str RC - - ----- remove clock create_window cwin str CW - - ----- define a window #1 from #2,#3 to #4,#5 goto_window wingo str WG - - ----- go to window #1 hangup hup str HU - - ----- hang-up phone dial_phone dial str DI - - ----- dial number #1 quick_dial qdial str QD - - ----- dial number #1 without checking tone tone str TO - - ----- select touch tone dialing pulse pulse str PU - - ----- select pulse dialing flash_hook hook str fh - - ----- flash switch hook fixed_pause pause str PA - - ----- pause for 2-3 seconds wait_tone wait str WA - - ----- wait for dial-tone user0 u0 str u0 - - ----- User string #0 user1 u1 str u1 - - ----- User string #1 user2 u2 str u2 - - ----- User string #2 user3 u3 str u3 - - ----- User string #3 user4 u4 str u4 - - ----- User string #4 user5 u5 str u5 - - ----- User string #5 user6 u6 str u6 - - ----- User string #6 user7 u7 str u7 - - ----- User string #7 user8 u8 str u8 - - ----- User string #8 user9 u9 str u9 - - ----- User string #9 # # SVr4 added these capabilities to support color # orig_pair op str op - - ----- Set default pair to its original value orig_colors oc str oc - - ----- Set all color pairs to the original ones initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4) initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7) set_color_pair scp str sp - - ----- Set current color pair to #1 set_foreground setf str Sf - - ----- Set foreground color #1 set_background setb str Sb - - ----- Set background color #1 # # SVr4 added these capabilities to support printers # change_char_pitch cpi str ZA - - ----- Change number of characters per inch to #1 change_line_pitch lpi str ZB - - ----- Change number of lines per inch to #1 change_res_horz chr str ZC - - ----- Change horizontal resolution to #1 change_res_vert cvr str ZD - - ----- Change vertical resolution to #1 define_char defc str ZE - - ----- Define a character #1, #2 dots wide, descender #3 enter_doublewide_mode swidm str ZF - - ----- Enter double-wide mode enter_draft_quality sdrfq str ZG - - ----- Enter draft-quality mode enter_italics_mode sitm str ZH - - ----- Enter italic mode enter_leftward_mode slm str ZI - - ----- Start leftward carriage motion enter_micro_mode smicm str ZJ - - ----- Start micro-motion mode enter_near_letter_quality snlq str ZK - - ----- Enter NLQ mode enter_normal_quality snrmq str ZL - - ----- Enter normal-quality mode enter_shadow_mode sshm str ZM - - ----- Enter shadow-print mode enter_subscript_mode ssubm str ZN - - ----- Enter subscript mode enter_superscript_mode ssupm str ZO - - ----- Enter superscript mode enter_upward_mode sum str ZP - - ----- Start upward carriage motion exit_doublewide_mode rwidm str ZQ - - ----- End double-wide mode exit_italics_mode ritm str ZR - - ----- End italic mode exit_leftward_mode rlm str ZS - - ----- End left-motion mode exit_micro_mode rmicm str ZT - - ----- End micro-motion mode exit_shadow_mode rshm str ZU - - ----- End shadow-print mode exit_subscript_mode rsubm str ZV - - ----- End subscript mode exit_superscript_mode rsupm str ZW - - ----- End superscript mode exit_upward_mode rum str ZX - - ----- End reverse character motion micro_column_address mhpa str ZY - - ----- Like column_address in micro mode micro_down mcud1 str ZZ - - ----- Like cursor_down in micro mode micro_left mcub1 str Za - - ----- Like cursor_left in micro mode micro_right mcuf1 str Zb - - ----- Like cursor_right in micro mode micro_row_address mvpa str Zc - - ----- Like row_address #1 in micro mode micro_up mcuu1 str Zd - - ----- Like cursor_up in micro mode order_of_pins porder str Ze - - ----- Match software bits to print-head pins parm_down_micro mcud str Zf - - ----- Like parm_down_cursor in micro mode parm_left_micro mcub str Zg - - ----- Like parm_left_cursor in micro mode parm_right_micro mcuf str Zh - - ----- Like parm_right_cursor in micro mode parm_up_micro mcuu str Zi - - ----- Like parm_up_cursor in micro mode select_char_set scs str Zj - - ----- Select character set, #1 set_bottom_margin smgb str Zk - - ----- Set bottom margin at current line set_bottom_margin_parm smgbp str Zl - - ----- Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom set_left_margin_parm smglp str Zm - - ----- Set left (right) margin at column #1 set_right_margin_parm smgrp str Zn - - ----- Set right margin at column #1 set_top_margin smgt str Zo - - ----- Set top margin at current line set_top_margin_parm smgtp str Zp - - ----- Set top (bottom) margin at row #1 start_bit_image sbim str Zq - - ----- Start printing bit image graphics start_char_set_def scsd str Zr - - ----- Start character set definition #1, with #2 characters in the set stop_bit_image rbim str Zs - - ----- Stop printing bit image graphics stop_char_set_def rcsd str Zt - - ----- End definition of character set #1 subscript_characters subcs str Zu - - ----- List of subscriptable characters superscript_characters supcs str Zv - - ----- List of superscriptable characters these_cause_cr docr str Zw - - ----- Printing any of these characters causes CR zero_motion zerom str Zx - - ----- No motion for subsequent character #%.TE #%.ad #% #%The following string capabilities are present in the SVr4.0 term structure, #%but were originally not documented in the man page. #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw18. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR char_set_names csnm str Zy - - ----- Produce #1'th item from list of character set names key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred mouse_info minfo str Mi - - ----- Mouse status information req_mouse_pos reqmp str RQ - - ----- Request mouse position get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented. set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape pkey_plab pfxl str xl - - ----- Program function key #1 to type string #2 and show string #3 device_type devt str dv - - ----- Indicate language/codeset support code_set_init csin str ci - - ----- Init sequence for multiple codesets set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII) set1_des_seq s1ds str s1 - - ----- Shift to codeset 1 set2_des_seq s2ds str s2 - - ----- Shift to codeset 2 set3_des_seq s3ds str s3 - - ----- Shift to codeset 3 set_lr_margin smglr str ML - - ----- Set both left and right margins to #1, #2. (ML is not in BSD termcap). set_tb_margin smgtb str MT - - ----- Sets both top and bottom margins to #1, #2 bit_image_repeat birep str Xy - - ----- Repeat bit image cell #1 #2 times bit_image_newline binel str Zz - - ----- Move to next row of the bit image bit_image_carriage_return bicr str Yv - - ----- Move to beginning of same row color_names colornm str Yw - - ----- Give name for color #1 define_bit_image_region defbi str Yx - - ----- Define rectangular bit image region end_bit_image_region endbi str Yy - - ----- End a bit-image region set_color_band setcolor str Yz - - ----- Change to ribbon color #1 set_page_length slines str YZ - - ----- Set page length to #1 lines # # SVr4 added these capabilities for direct PC-clone support # display_pc_char dispc str S1 - - ----- Display PC character #1 enter_pc_charset_mode smpch str S2 - - ----- Enter PC character display mode exit_pc_charset_mode rmpch str S3 - - ----- Exit PC character display mode enter_scancode_mode smsc str S4 - - ----- Enter PC scancode mode exit_scancode_mode rmsc str S5 - - ----- Exit PC scancode mode pc_term_options pctrm str S6 - - ----- PC terminal options scancode_escape scesc str S7 - - ----- Escape for scancode emulation alt_scancode_esc scesa str S8 - - ----- Alternate escape for scancode emulation #%.TE #%.ad #% #%.in .8i #%The XSI Curses standard added these hardcopy capabilities. #%They were used in some post-4.1 versions of System V curses, #%e.g., Solaris 2.5 and IRIX 6.x. #%Except for \fBYI\fP, the \fBncurses\fR termcap names for them are invented. #%According to the XSI Curses standard, they have no termcap names. #%If your compiled terminfo entries use these, #%they may not be binary-compatible with System V terminfo #%entries after SVr4.1; beware! #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR enter_horizontal_hl_mode ehhlm str Xh - - ----- Enter horizontal highlight mode enter_left_hl_mode elhlm str Xl - - ----- Enter left highlight mode enter_low_hl_mode elohlm str Xo - - ----- Enter low highlight mode enter_right_hl_mode erhlm str Xr - - ----- Enter right highlight mode enter_top_hl_mode ethlm str Xt - - ----- Enter top highlight mode enter_vertical_hl_mode evhlm str Xv - - ----- Enter vertical highlight mode set_a_attributes sgr1 str sA - - ----- Define second set of video attributes #1-#6 set_pglen_inch slength str YI - - ----- Set page length to #1 hundredth of an inch (some implementations use sL for termcap). #%.TE #%.ad # # The magic token below tells the tic compiler-generator code that all the caps # past it should be ignored (not written out) when dumping terminfo objects. It # also tells the man page table generator not to pass through following lines # This means we can have obsolete capabilities and pseudo-capabilities that are # recognized for termcap or terminfo compilation, but not output. # # %%-STOP-HERE-%% # # Don't move this casually! In fact, don't move it at all unless you're # either doing it to add System V or XPG4 extensions, or have decided you # don't care about SVr4 binary compatibility. # ############################################################################# # # TERMCAP EXTENSION CAPABILITIES # # The capabilities below are either obsolete or extensions on certain systems. # They are not used by SVR4 terminfo. Some are used by captoinfo to translate # termcap sources; the rest are listed for completeness, and in case somebody # cares about them enough to hack in code that will translate them into # terminfo capabilities. # # The first part of the list is from Ross Ridge's `mytinfo' package # (comp.sources.unix, volume 26); the variable names and terminfo names (as # well as the termcap codes) match his list. # # This group of codes is not marked obsolete in 4.4BSD, but have no direct # terminfo equivalents. The rs capability is specially translated to terminfo # r2, and vice versa, if an entry does not already have an r2. Similarly, # i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2). # The ug capability is thrown away, but assumed to be whatever sg is if the # latter is nonzero and we're dumping in termcap format. # termcap_init2 OTi2 str i2 - - YB--- secondary initialization string termcap_reset OTrs str rs - - YB-G- terminal reset string magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul # # Obsolete termcap capabilities. Some are used for termcap translation. The # code uses the 'OT' prefix we put on obsolete capabilities to suppress # printing them in terminfo source dumps of compiled entries. # backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line carriage_return_delay OTdC num dC - - YB-G- pad needed for CR new_line_delay OTdN num dN - - YB-G- pad needed for LF linefeed_if_not_lf OTnl str nl - - YBCGE use to move down backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H # # GNU termcap library extensions. The GNU termcap file distributed with # Emacs no longer uses these, but MT showed up in pre-9.0 versions of the # BSD termcap file. The name clash with terminfo MT is resolved by type # info; MT is converted to km. # gnu_has_meta_key OTMT bool MT - - ----E has meta key # gnu_tab_width OTtw num tw - - ----E tab width in spaces # # GNU termcap *does* include the following extended capability, Only the # now-obsolete Ann Arbor terminals used it. # # gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region # # The following comments describe capnames so ancient that I believe no # software uses them any longer. Some of these have to go because they # clash with terminfo names in ways that cannot be resolved by type # information. # # These mytinfo codes are not used in the 4.4BSD curses code. They are # marked obsolete in the 4.4BSD manual pages. # # There is one conflict with terminfo; ma is in both. This conflict is # resolved by type information. # # The `ko' capability is translated by special code. It should contain a # comma-separated list of capabilities for which there are corresponding keys. # The `kn' code is accepted but ignored. # # The `ma' capability seems to have been designed to map between the rogue(2) # motion keys (including jkhl) and characters emitted by arrow keys on some # primitive pre-ANSI terminals. It's so obsolete it's fossilized... # # Here is a description of memory_lock_above and memory_unlock: # "You can 'freeze' data on the screen by turning on Memory Lock in a line of # text. All lines above the cursor's current line become locked in place on # the screen. Then enter data normally. When the screen fills up, any # further data entered forces the first line of unfrozen line text to scroll # under the frozen data. Lines scrolled off the screen are inserted into # memory immediately preceding the first frozen line." (from the HP 700/96 # User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l. # # Applications that use terminfo are supposed to behave as though xr is # always true. # linefeed_is_newline OTNL bool NL - - YB--- move down with \n # even_parity OTEP bool EP - - -B--- terminal requires even parity # odd_parity OTOP bool OP - - -B--- terminal requires odd parity # half_duplex OTHD bool HD - - -B--- terminal is half-duplex # lower_case_only OTLC bool LC - - -B--- terminal has only lower case # upper_case_only OTUC bool UC - - -B--- terminal has only upper case backspace_delay OTdB num dB - - YB-G- padding required for ^H # form_feed_delay OTdF num dF - - -B-G- padding required for ^L horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I # vertical_tab_delay OTdV num dV - - -B--- padding required for ^V number_of_function_keys OTkn num kn - - -B-G- count of function keys other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps arrow_key_map OTma str ma - - YBC-- map arrow keys rogue(1) motion keys # memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line # memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I return_does_clr_eol OTxr bool xr - - YB--- return clears the line # tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch # # mytinfo described this as a termcap capability, but it's not listed in the # 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses # package, like System V, behaves as though it is always true. # # rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line # # University of Waterloo termcap extensions (as described in mytinfo). # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot # be resolved by a type check. The descriptions are guesses from what was # in the mytinfo tables. # # key_interrupt_char OTki str ki - - ----- string set by interrupt key (?) # key_kill_char OTkk str kk - - ----- string set by kill key (?) # key_suspend_char OTkz str kz - - ----- string set by suspend key (?) # initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?) # ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return # # Nonstandard capabilities unique to Ross Ridge's `mytinfo' package. # SR clashes with a terminfo name; this ambiguity cannot be resolved by a type # check. # # scroll_left OTsl1 str Sl - - ----- scroll screen leftward # scroll_right OTsr1 str Sr - - ----- scroll screen rightward # parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters # parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters # # The mytinfo capabilities end here. # # XENIX extensions: # # Xenix defined its own set of forms-drawing capabilities: # # cap IBM ASCII description ACS ASCII # --- ----------- -------------------- ------------- ------ # G1 191 \277 M-? single upper right ACS_URCORNER # G2 218 \332 M-Z single upper left ACS_ULCORNER # G3 192 \300 M-@ single lower left ACS_LLCORNER # G4 217 \331 M-Y single lower right ACS_LRCORNER # G5 187 \273 M-; double upper right # G6 201 \311 M-I double upper left # G7 200 \310 M-H double lower left # G8 188 \274 M-< double lower right # GC 197 \305 M-E single intersection ACS_PLUS _ _ # GD 194 \302 M-B single down-tick ACS_TTEE | # GH 196 \304 M-D single horizontal line ACS_HLINE # GL 180 \264 M-4 single left tick ACS_RTEE -| # GR 195 \303 M-C single right tick ACS_LTEE |- # GU 193 \301 M-A single up tick ACS_BTEE _|_ # GV 179 \263 M-3 single vertical line ACS_VLINE # Gc 206 \316 M-N double intersection # Gd 203 \313 M-K double down tick # Gh 205 \315 M-M double horizontal line # Gl 204 \204 M-L double left tick # Gr 185 \271 M-9 double right tick # Gu 202 \312 M-J double up tick # Gv 186 \272 M-: double vertical line # # The compiler will translate the single-line caps and discard the others # (via IGNORE aliases further down). We don't want to do normal pad # translation on these, they're often single-character printable ASCII # strings that happen to be numerics. There's awk code in parametrized.sh # that detects the acs_ prefix and uses it to suppress pad translation. # These terminfo names are invented. # acs_ulcorner OTG2 str G2 - - ----- single upper left acs_llcorner OTG3 str G3 - - ----- single lower left acs_urcorner OTG1 str G1 - - ----- single upper right acs_lrcorner OTG4 str G4 - - ----- single lower right acs_ltee OTGR str GR - - ----- tee pointing right acs_rtee OTGL str GL - - ----- tee pointing left acs_btee OTGU str GU - - ----- tee pointing up acs_ttee OTGD str GD - - ----- tee pointing down acs_hline OTGH str GH - - ----- single horizontal line acs_vline OTGV str GV - - ----- single vertical line acs_plus OTGC str GC - - ----- single intersection # ############################################################################# # # TERMINFO EXTENSION CAPABILITIES # # This section is almost all comments. What it's mainly for is to describe # what capabilities need to be squeezed out to get down to the XSI Curses # standard set. They are flagged with K. # # HP extensions # # These extensions follow ptr_non (replacing everything after it) in HP # terminfo files. Except for memory_lock and memory_unlock, they are # functionally identical to SVr4 extensions, but they make the binary format # different. Grrr.... # memory_lock meml str ml - - ----K lock memory above cursor memory_unlock memu str mu - - ----K unlock memory #plab_norm pln str pn - - ----- program label #1 to show string #2 #label_on smln str LO - - ----- turn on soft labels #label_off rmln str LF - - ----- turn off soft labels #key_f11 kf11 str F1 - - ----- F11 function key #key_f12 kf12 str F2 - - ----- F12 function key #key_f13 kf13 str F3 - - ----- F13 function key #key_f14 kf14 str F4 - - ----- F14 function key #key_f15 kf15 str F5 - - ----- F15 function key #key_f16 kf16 str F6 - - ----- F16 function key #key_f17 kf17 str F7 - - ----- F17 function key #key_f18 kf18 str F8 - - ----- F18 function key #key_f19 kf19 str F9 - - ----- F19 function key #key_f20 kf20 str FA - - ----- F20 function key #key_f21 kf21 str FB - - ----- F21 function key #key_f22 kf22 str FC - - ----- F22 function key #key_f23 kf23 str FD - - ----- F23 function key #key_f24 kf24 str FE - - ----- F24 function key #key_f25 kf25 str FF - - ----- F25 function key #key_f26 kf26 str FG - - ----- F26 function key #key_f27 kf27 str FH - - ----- F27 function key #key_f28 kf28 str FI - - ----- F28 function key #key_f29 kf29 str FJ - - ----- F29 function key #key_f30 kf30 str FK - - ----- F30 function key #key_f31 kf31 str FL - - ----- F31 function key #key_f32 kf32 str FM - - ----- F32 function key #key_f33 kf33 str FN - - ----- F33 function key #key_f34 kf34 str FO - - ----- F34 function key #key_f35 kf35 str FP - - ----- F35 function key #key_f36 kf36 str FQ - - ----- F36 function key #key_f37 kf37 str FR - - ----- F37 function key #key_f38 kf38 str FS - - ----- F38 function key #key_f39 kf39 str FT - - ----- F39 function key #key_f40 kf40 str FU - - ----- F40 function key #key_f41 kf41 str FV - - ----- F41 function key #key_f42 kf42 str FW - - ----- F42 function key #key_f43 kf43 str FX - - ----- F43 function key #key_f44 kf44 str FY - - ----- F44 function key #key_f45 kf45 str FZ - - ----- F45 function key #key_f46 kf46 str Fa - - ----- F46 function key #key_f47 kf47 str Fb - - ----- F47 function key #key_f48 kf48 str Fc - - ----- F48 function key #key_f49 kf49 str Fd - - ----- F49 function key #key_f50 kf50 str Fe - - ----- F50 function key #key_f51 kf51 str Ff - - ----- F51 function key #key_f52 kf52 str Fg - - ----- F52 function key #key_f53 kf53 str Fh - - ----- F53 function key #key_f54 kf54 str Fi - - ----- F54 function key #key_f55 kf55 str Fj - - ----- F55 function key #key_f56 kf56 str Fk - - ----- F56 function key #key_f57 kf57 str Fl - - ----- F57 function key #key_f58 kf58 str Fm - - ----- F58 function key #key_f59 kf59 str Fn - - ----- F59 function key #key_f60 kf60 str Fo - - ----- F60 function key #key_f61 kf61 str Fp - - ----- F61 function key #key_f62 kf62 str Fq - - ----- F62 function key #key_f63 kf63 str Fr - - ----- F63 function key # # IBM extensions # # These extensions follow ptr_non (replacing everything after it) in IBM # terminfo files. # # The places in the box[12] capabilities correspond to acsc characters, here is # the mapping: # # box1[0] = ACS_ULCORNER # box1[1] = ACS_HLINE # box1[2] = ACS_URCORNER # box1[3] = ACS_VLINE # box1[4] = ACS_LRCORNER # box1[5] = ACS_LLCORNER # box1[6] = ACS_TTEE # box1[7] = ACS_RTEE # box1[8] = ACS_BTEE # box1[9] = ACS_LTEE # box1[10] = ACS_PLUS # # The box2 characters are the double-line versions of these forms graphics. # box_chars_1 box1 str bx - - ----K box characters primary set #box_chars_2 box2 str by - - ----K box characters secondary set #box_attr_1 batt1 str Bx - - ----K attributes for box1 #box_attr_2 batt2 str By - - ----K attributes for box2 #color_bg_0 colb0 str d0 - - ----K background color 0 #color_bg_1 colb1 str d1 - - ----K background color 1 #color_bg_2 colb2 str d2 - - ----K background color 2 #color_bg_3 colb3 str d3 - - ----K background color 3 #color_bg_4 colb4 str d4 - - ----K background color 4 #color_bg_5 colb5 str d5 - - ----K background color 5 #color_bg_6 colb6 str d6 - - ----K background color 6 #color_bg_7 colb7 str d7 - - ----K background color 7 #color_fg_0 colf0 str c0 - - ----K foreground color 0 #color_fg_1 colf1 str c1 - - ----K foreground color 1 #color_fg_2 colf2 str c2 - - ----K foreground color 2 #color_fg_3 colf3 str c3 - - ----K foreground color 3 #color_fg_4 colf4 str c4 - - ----K foreground color 4 #color_fg_5 colf5 str c5 - - ----K foreground color 5 #color_fg_6 colf6 str c6 - - ----K foreground color 6 #color_fg_7 colf7 str c7 - - ----K foreground color 7 #font_0 font0 str f0 - - ----- select font 0 #font_1 font1 str f1 - - ----- select font 1 #font_2 font2 str f2 - - ----- select font 2 #font_3 font3 str f3 - - ----- select font 3 #font_4 font4 str f4 - - ----K select font 4 #font_5 font5 str f5 - - ----K select font 5 #font_6 font6 str f6 - - ----K select font 6 #font_7 font7 str f7 - - ----K select font 7 #key_back_tab kbtab str k0 - - ----- backtab key #key_do kdo str ki - - ----K do request key #key_command kcmd str kd - - ----K command-request key #key_command_pane kcpn str kW - - ----K command-pane key #key_end kend str kw - - ----- end key #key_help khlp str kq - - ----- help key #key_newline knl str nl - - ----K newline key #key_next_pane knpn str kv - - ----K next-pane key #key_prev_cmd kppn str kp - - ----K previous-command key #key_prev_pane kppn str kV - - ----K previous-pane key #key_quit kquit str kQ - - ----K quit key #key_select ksel str kU - - ----- select key #key_scroll_left kscl str kz - - ----K scroll left #key_scroll_right kscr str kZ - - ----K scroll right #key_tab ktab str ko - - ----K tab key #key_smap_in1 kmpf1 str Kv - - ----K special mapped key 1 input #key_smap_out1 kmpt1 str KV - - ----K special mapped key 1 output #key_smap_in2 kmpf2 str Kw - - ----K special mapped key 2 input #key_smap_out2 kmpt2 str KW - - ----K special mapped key 2 output #key_smap_in3 kmpf3 str Kx - - ----K special mapped key 3 input #key_smap_out3 kmpt3 str KX - - ----K special mapped key 3 output #key_smap_in4 kmpf4 str Ky - - ----K special mapped key 4 input #key_smap_out4 kmpt4 str KY - - ----K special mapped key 4 output #key_smap_in5 kmpf5 str Kz - - ----K special mapped key 5 input #key_smap_out5 kmpt5 str KZ - - ----K special mapped key 5 output #appl_defined_str apstr str za - - ----K application-defined string # The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in # the IBM manual pages, so the cap name strings are guesses. The terminfo # names are almost certainly right, the termcap ones almost certainly wrong. #key_smap_in6 kmpf6 str k! - - ----K special mapped key 6 input #key_smap_out6 kmpt6 str K@ - - ----K special mapped key 6 output #key_smap_in7 kmpf7 str k# - - ----K special mapped key 7 input #key_smap_out7 kmpt7 str K$ - - ----K special mapped key 7 output #key_smap_in8 kmpf8 str k% - - ----K special mapped key 8 input #key_smap_out8 kmpt8 str K^ - - ----K special mapped key 8 output #key_smap_in9 kmpf9 str k& - - ----K special mapped key 9 input #key_smap_out9 kmpt9 str K* - - ----K special mapped key 9 output # Undocumented capabilities end here #key_sf1 ksf1 str S1 - - ----K special function key 1 #key_sf2 ksf2 str S2 - - ----K special function key 2 #key_sf3 ksf3 str S3 - - ----K special function key 3 #key_sf4 ksf4 str S4 - - ----K special function key 4 #key_sf5 ksf5 str S5 - - ----K special function key 5 #key_sf6 ksf6 str S6 - - ----K special function key 6 #key_sf7 ksf7 str S7 - - ----K special function key 7 #key_sf8 ksf8 str S8 - - ----K special function key 8 #key_sf9 ksf9 str S9 - - ----K special function key 9 #key_sf10 ksf10 str SA - - ----K special function key 10 # AIX version 3 documents different codes for F11, F12 and does not mention # F13-F64. AIX version 4 uses the same naming for F0-F63 as above. #key_f11 kf11 str k< - - ----- function key 11 #key_f12 kf12 str k> - - ----- function key 12 # Undocumented capabilities end here. #key_action kact str kJ - - ----K sent by action key # The IBM docs say these capabilities are for table-drawing, and are # valid only for aixterm descriptions. #enter_topline_mode topl str tp - - ----K start top-line mode #enter_bottom_mode btml str bm - - ----K start bottom-line mode #enter_rvert_mode rvert str rv - - ----K start right-vertical mode #enter_lvert_mode lvert str lv - - ----K start left-vertical mode # ############################################################################# # # ALIAS DECLARATIONS # # Here we set up aliases for translating extensions into standard terminfo. # #---------------------------------- Termcap aliases ------------------------- # # BSD aliases: # # This is a common error in many termcap files. We'll get notified during # translation when this (or any other alias) fires. # capalias sb sr BSD scroll text down # # AT&T extensions: # # The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of # nonstandard capabilities. Its signature is the KM capability, used to name # some sort of keymap file. EE, BO, CI, CV, XS, DS, FL and FE are in this # set. Comments in the original, and a little cross-checking with other AT&T # documentation, seem to establish the following mappings: # capalias BO mr AT&T enter_reverse_mode capalias CI vi AT&T cursor_invisible capalias CV ve AT&T cursor_normal capalias DS mh AT&T enter_dim_mode #capalias EE me AT&T exit_attribute_mode capalias FE LF AT&T label_on capalias FL LO AT&T label_off capalias XS mk AT&T enter_secure_mode # # We comment out EE because the conflicting XENIX EE is more common in # old entries. # # XENIX extensions: # # These are the ones we know how to translate directly: # capalias EE mh XENIX exit_attribute_mode capalias GE ae XENIX exit_alt_charset_mode capalias GS as XENIX enter_alt_charset_mode capalias CF vi XENIX cursor_invis capalias CO ve XENIX cursor_normal capalias EN @7 XENIX key_end capalias HM kh XENIX key_home capalias LD kL XENIX key_dl capalias PD kN XENIX key_npage capalias PN po XENIX prtr_off capalias PS pf XENIX prtr_on capalias PU kP XENIX key_ppage capalias RT @8 XENIX kent capalias UP ku XENIX kcuu1 capalias G6 IGNORE XENIX double-ACS_ULCORNER capalias G7 IGNORE XENIX double-ACS_LLCORNER capalias G5 IGNORE XENIX double-ACS_URCORNER capalias G8 IGNORE XENIX double-ACS_LRCORNER capalias Gr IGNORE XENIX double-ACS_LTEE capalias Gr IGNORE XENIX double-ACS_RTEE capalias Gu IGNORE XENIX double-ACS_BTEE capalias Gd IGNORE XENIX double ACS_TTEE capalias Gh IGNORE XENIX double-ACS_HLINE capalias Gv IGNORE XENIX double-ACS_VLINE capalias Gc IGNORE XENIX double-ACS_PLUS capalias GG IGNORE XENIX acs-glitch # # IBM extensions: # capalias kq %1 IBM key_help # # Iris extensions: # capalias HS mh IRIS enter_dim_mode # # Tektronix extensions: # capalias KA k; Tek key_f10 capalias KB F1 Tek key_f11 capalias KC F2 Tek key_f12 capalias KD F3 Tek key_f13 capalias KE F4 Tek key_f14 capalias KF F5 Tek key_f15 capalias BC Sb Tek set_background capalias FC Sf Tek set_foreground # # There are also the following: # # XENIX XENIX variable name name clash with terminfo? # ----- ------------------- ------------------------- # CL key_char_left # CR key_char_right # CW key_change_window # HP ?? # LF key_linefeed label_off # NU key_next_unlocked_cell # PL ?? # PR ?? # RC key_recalc remove_clock # RF key_toggle_ref req_for_input # WL key_word_left # WR key_word_right # # If you know what any of the question-marked ones mean, please tell us. # #--------------------------------- Terminfo aliases ------------------------ # # IBM extensions: # infoalias font0 s0ds IBM set0_des_seq infoalias font1 s1ds IBM set1_des_seq infoalias font2 s2ds IBM set2_des_seq infoalias font3 s3ds IBM set3_des_seq infoalias kbtab kcbt IBM key_backtab infoalias ksel kslt IBM key_select # # Some others are identical to SVr4/XPG4 capabilities, in particular: # kcmd, kend, khlp, and kf11...kf63. # ############################################################################# ncurses-6.0-20160213/include/MKkey_defs.sh0000755000175100001440000001234712116662001016461 0ustar tomusers#! /bin/sh # $Id: MKkey_defs.sh,v 1.15 2013/03/09 16:32:01 tom Exp $ ############################################################################## # Copyright (c) 2001-2003,2013 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # MKkey_defs.sh -- generate function-key definitions for curses.h # # Author: Thomas E. Dickey 2001 # # Extract function-key definitions from the Caps file # : ${AWK-awk} DATA=${1-Caps} data=data$$ pass1=pass1_$$ pass2=pass2_$$ pass3=pass3_$$ pass4=pass4_$$ trap 'rm -f $data pass[1234]_$$' 0 1 2 5 15 # change repeated tabs (used for readability) to single tabs (needed to make # awk see the right field alignment of the corresponding columns): if sort -k 6 $DATA >$data 2>/dev/null then # POSIX sed -e 's/[ ][ ]*/ /g' < $DATA |sort -n -k 6 >$data elif sort -n +5 $DATA >$data 2>/dev/null then # SunOS (and SVr4, marked as obsolete but still recognized) sed -e 's/[ ][ ]*/ /g' < $DATA |sort -n +5 >$data else echo "Your sort utility is broken. Please install one that works." >&2 exit 1 fi # add keys that we generate automatically: cat >>$data <$output <$data ' function print_cols(text,cols) { printf "%s", text len = length(text); while (len < cols) { printf " " len += 8; } } function decode(keycode) { result = 0; if (substr(keycode, 1, 2) == "0x") { digits="0123456789abcdef"; } else if (substr(keycode, 1, 1) == "0") { digits="01234567"; } else { digits="0123456789"; } while (length(keycode) != 0) { digit=substr(keycode, 1, 1); keycode=substr(keycode, 2); result = result * length(digits) + index(digits, digit) - 1; } return result; } BEGIN { maxkey='$maxkey'; pass='$pass'; key_max=1; bits=1; while (key_max < maxkey) { bits = bits + 1; key_max = (key_max * 2) + 1; } octal_fmt = sprintf ("%%0%do", (bits + 2) / 3 + 1); } /^$/ {next;} /^#/ {next;} /^capalias/ {next;} /^infoalias/ {next;} $5 != "-" && $6 != "-" { if ($6 == "+") { if (pass == 1 || pass == 2) next; thiskey=maxkey + 1; } else { if (pass == 3) next; thiskey=decode($6); } if (thiskey > maxkey) maxkey = thiskey; if (pass == 2 || pass == 3) { showkey=sprintf(octal_fmt, thiskey); if ($5 == "KEY_F(0)" ) { printf "#define " print_cols("KEY_F0", 16); print_cols(showkey, 16); print "/* Function keys. Space for 64 */"; printf "#define " print_cols("KEY_F(n)", 16); print_cols("(KEY_F0+(n))", 16); print "/* Value of function key n */" } else { printf "#define " print_cols($5, 16); print_cols(showkey, 16); printf "/*" for (i = 8; i <= NF; i++) printf " %s", $i print " */" } } } END { if (pass == 1) { print maxkey; } else if (pass == 4) { print ""; printf "#define "; print_cols("KEY_MAX", 16); result = sprintf (octal_fmt, key_max); print_cols(result, 16); printf "/* Maximum key value is "; printf octal_fmt, maxkey; print " */"; } } ' if test $pass = 1 ; then maxkey=`cat $pass1` fi done cat $pass2 cat $pass3 cat $pass4 ncurses-6.0-20160213/include/Caps.keys0000644000175100001440000021230312517201603015660 0ustar tomusers############################################################################## # Copyright (c) 2001-2013,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas Dickey # and: Ilya Zakharevich # # $Id: Caps.keys,v 1.8 2015/04/26 15:25:55 tom Exp $ # # This is an adaptation of ncurses' termcap/terminfo capability table, which # is illustrates an experimental extension to describe alt-, shift- and # control-modifiers applied to function and normal keys, as done on IBM pc's. # # This table is used to generate initializers for tables that drive tic, # infocmp, and the library compilation code used to support the termcap # compatibility hack. It is also used to generate the tabular portion of the # terminfo(5) man page; lines beginning with `#%' are passed through to become # the terminfo table. # # This file has three major sections; a standard-capabilities table, two # extension-capability tables, and a section of aliases declarations. # The first two have the same format, as follows: # # FILE FORMAT # # Column 1: terminfo variable name # Column 2: terminfo capability name # Column 3: capability type (boolean, numeric, or string) # Column 4: termcap capability name # Column 5: KEY_xxx name, if any, `-' otherwise # Column 6: value for KEY_xxx name, if any, `-' otherwise # Column 7: Lead with `Y' if capability should be emitted in termcap # translations, `-' otherwise # Column 8: capability description # # The codes following [Y-] in column 7 describe the versions of termcap which # use the given capability. This information is not used by the curses library # proper; rather, it's there to help the terminfo maintainer avoid emitting # termcap entry translations that are more than 1023 bytes long (and tank a # lot of old termcap-using programs). The codes read as follows: # B = mentioned in the BSD man page for 4.4BSD curses # C = used by the 4.4BSD curses library # G = mentioned in the documentation for GNU termcap # E = used by GNU Emacs # K = remove this terminfo capability when translating to standard format # The important codes are C and E. A cap with C or E should be preserved in # translation if possible. The problem is that preserving all such caps may # lead to some termcap translations being too long. The termcap maintainer # has a bit of a juggling act to do...potential problem cases are marked with # an asterisk (*). # # The aliases section has the following format: # # Column 1: either `capalias' or `infoalias' # Column 2: name to be aliased # Column 3: what name it should translate to. The name IGNORE means it # should be discarded with a warning message. # Column 4: name of the extension set (used for compiler warning messages) # Column 5: capability description (usually an associated terminfo variable) # # HANDLING TERMCAP AND TERMINFO EXTENSIONS # # There are basically five different ways to handle termcap and terminfo # extensions: # # 1. Don't list the capname here, or list it but comment it out (the latter # is preferable; someone might want to handle it in the future). If you do # this, the capability will be treated as unknown and raise a warning from # the compiler. # # 2. Alias it. This is appropriate if the capability has the same meaning # as an already-supported one. The compiler will handle aliasing, emitting # an appropriate informational message whenever an alias fires. # # 3. List it in the standard table. You almost certainly do *not* want # to do this -- the capabilities in that one, and their order, have been # carefully chosen to be SVr4-binary-compatible when they're written out # as a terminfo object, and breaking this would be bad. It's up to the ncurses # library what to do with the terminfo data after it's read in. # # 4. List it in the aliases table with an IGNORE target field. If you # do this, the capability will be ignored on input (though the user will # get a warning message about it). # # 5. List it in the extensions table. If you do this, the compiler will # silently accept the capability, but the curses library proper will never # see it (because it won't be written out as part of the terminfo object # format). It's up to you what you have the compiler do with it. # # There are two opposite reasons to choose option 5. One is when you want # to eat the capability silently and discard it when doing translations # to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are # in this class. Nothing will ever use them again. # # More usually, you want the compiler to try to deduce something from the # capability value that it can use to translate it into your output format. # You'll need to write custom code, probably in postprocess_termcap() or # postprocess_terminfo(), to handle the translation. # # CONTROLLING ENTRY LENGTH # # Notes on specific elisions made to fit translations within 1023 bytes: # # Machines with IBM PC-like keyboards want to be able to define the following # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap- # only environments for End or Home-Down), key_dc, and key_ic. This is also # the set of keys the `joe' editor will be upset if it can't see. So don't # trim those out of the set to be translated to termcap, or various users of # the termcap file will become irate. # # It might look tempting to leave those long init strings out of translations. # We can't do it (yet); 4.4BSD tput and tset use them. # # We retain the sgr capability in translation in spite of the fact that neither # 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are # hard to understand without it, and (b) the entries in which it is long tend # to be older types that don't use up a lot of string space on function keys. # The tic(1) translation code will complain and elide it if it makes a critical # difference (there is special code in tic to recognize this situation). # # Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion # optimizer in BSD curses didn't use them. This omission seems to be the # single most effective one, it shortened the resolved length of all thirteen # problem entries in the 9.9.0 version of the terminfo master below critical. # # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap # translations go back over critical if we do this. As 4.4BSD curses fades # into history and GNU termcap's application base shrinks towards being GNU # Emacs only, we'll probably elide out some BSD-only capabilities in order # to buy space for non-essentials Emacs is still using. Capabilities high # on that hit list: rc, sc, uc. # ############################################################################# # # STANDARD CAPABILITIES # #%The following is a complete table of the capabilities included in a #%terminfo description block and available to terminfo-using code. In each #%line of the table, #% #%The \fBvariable\fR is the name by which the programmer (at the terminfo level) #%accesses the capability. #% #%The \fBcapname\fR is the short name used in the text of the database, #%and is used by a person updating the database. #%Whenever possible, capnames are chosen to be the same as or similar to #%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses #%identical or very similar names). Semantics are also intended to match #%those of the specification. #% #%The termcap code is the old #%.B termcap #%capability name (some capabilities are new, and have names which termcap #%did not originate). #%.P #%Capability names have no hard length limit, but an informal limit of 5 #%characters has been adopted to keep them short and to allow the tabs in #%the source file #%.B Caps #%to line up nicely. #% #%Finally, the description field attempts to convey the semantics of the #%capability. You may find some codes in the description field: #%.TP #%(P) #%indicates that padding may be specified #%.TP #%#[1-9] #%in the description field indicates that the string is passed through tparm with #%parms as given (#\fIi\fP). #%.TP #%(P*) #%indicates that padding may vary in proportion to the number of #%lines affected #%.TP #%(#\d\fIi\fP\u) #%indicates the \fIi\fP\uth\d parameter. #% #%.PP #% These are the boolean capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBBooleans name Code\fR auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column auto_right_margin am bool am - - YBCGE terminal has automatic margins no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C) ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp) eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept) erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank generic_type gn bool gn - - YB-G- generic line type hard_copy hc bool hc - - YBCG- hardcopy terminal has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit) has_status_line hs bool hs - - YB-G- has extra status line insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls memory_above da bool da - - YBCG- display may be retained above the screen memory_below db bool db - - YB-GE display may be retained below the screen move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode over_strike os bool os - - YBCG- terminal can overstrike status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061) tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine) transparent_underline ul bool ul - - YBCGE underline character overstrikes xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required prtr_silent mc5i bool 5i - - ----- printer will not echo on screen hard_cursor chts bool HC - - ----- cursor is hard to see non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup no_pad_char npc bool NP - - ----- pad character does not exist non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive can_change ccc bool cc - - ----- terminal can re-define existing colors back_color_erase bce bool ut - - ----- screen erased with background color hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix) col_addr_glitch xhpa bool YA - - ----- only positive motion for hpa/mhpa caps cr_cancels_micro_mode crxm bool YB - - ----- using cr turns off micro mode has_print_wheel daisy bool YC - - ----- printer needs operator to change character set row_addr_glitch xvpa bool YD - - ----- only positive motion for vpa/mvpa caps semi_auto_right_margin sam bool YE - - ----- printing in last column causes cr cpi_changes_res cpix bool YF - - ----- changing character pitch changes resolution lpi_changes_res lpix bool YG - - ----- changing line pitch changes resolution #%.TE #%.ad #% #%These are the numeric capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBNumeric name Code\fR columns cols num co - - YBCGE number of columns in a line init_tabs it num it - - YB-G- tabs initially every # spaces lines lines num li - - YBCGE number of lines on screen or page lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix) width_status_line wsl num ws - - YB-G- number of columns in status line num_labels nlab num Nl - - ----- number of labels on screen label_height lh num lh - - ----- rows in each label label_width lw num lw - - ----- columns in each label max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle maximum_windows wnum num MW - - ----- maximum number of definable windows # These came in with SVr4's color support max_colors colors num Co - - ----- maximum number of colors on screen max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen no_color_video ncv num NC - - ----- video attributes that cannot be used with colors #%.TE #%.ad #% #%The following numeric capabilities are present in the SVr4.0 term structure, #%but are not yet documented in the man page. They came in with SVr4's #%printer support. #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBNumeric name Code\fR buffer_capacity bufsz num Ya - - ----- numbers of bytes buffered before printing dot_vert_spacing spinv num Yb - - ----- spacing of pins vertically in pins per inch dot_horz_spacing spinh num Yc - - ----- spacing of dots horizontally in dots per inch max_micro_address maddr num Yd - - ----- maximum value in micro_..._address max_micro_jump mjump num Ye - - ----- maximum value in parm_..._micro micro_col_size mcs num Yf - - ----- character step size when in micro mode micro_line_size mls num Yg - - ----- line step size when in micro mode number_of_pins npins num Yh - - ----- numbers of pins in print-head output_res_char orc num Yi - - ----- horizontal resolution in units per line output_res_line orl num Yj - - ----- vertical resolution in units per line output_res_horz_inch orhi num Yk - - ----- horizontal resolution in units per inch output_res_vert_inch orvi num Yl - - ----- vertical resolution in units per inch print_rate cps num Ym - - ----- print rate in characters per second wide_char_size widcs num Yn - - ----- character step size when in double wide mode buttons btns num BT - - ----- number of buttons on mouse bit_image_entwining bitwin num Yo - - ----- number of passes for each bit-image row bit_image_type bitype num Yp - - ----- type of bit-image device #%.TE #%.ad #% #%These are the string capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR back_tab cbt str bt - - YBCGE back tab (P) bell bel str bl - - YB-GE audible signal (bell) (P) carriage_return cr str cr - - YBCGE carriage return (P*) (P*) change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P) clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P) clear_screen clear str cl - - YBCGE clear screen and home cursor (P*) clr_eol el str ce - - YBCGE clear to end of line (P) clr_eos ed str cd - - YBCGE clear to end of screen (P*) column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P) command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !? cursor_address cup str cm - - YBCGE move to row #1 columns #2 cursor_down cud1 str do - - YBCGE down one line cursor_home home str ho - - YBCGE home cursor (if no cup) cursor_invisible civis str vi - - YB-G- make cursor invisible cursor_left cub1 str le - - YBCGE move left one space cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2 cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis) cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space) cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup) cursor_up cuu1 str up - - YBCGE up one line cursor_visible cvvis str vs - - YBCGE make cursor very visible delete_character dch1 str dc - - YBCGE delete character (P*) delete_line dl1 str dl - - YBCGE delete line (P*) dis_status_line dsl str ds - - YB-G- disable status line down_half_line hd str hd - - YB-G- half a line down enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P) enter_blink_mode blink str mb - - YB-G- turn on blinking enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode enter_ca_mode smcup str ti - - YBCGE string to start programs using cup enter_delete_mode smdc str dm - - YBCGE enter delete mode enter_dim_mode dim str mh - - YB-G- turn on half-bright mode enter_insert_mode smir str im - - YBCGE enter insert mode enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible) enter_protected_mode prot str mp - - -B-G-* turn on protected mode enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode enter_standout_mode smso str so - - YBCGE begin standout mode enter_underline_mode smul str us - - YBCGE begin underline mode erase_chars ech str ec - - YB-G- erase #1 characters (P) exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P) exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup exit_delete_mode rmdc str ed - - YBCGE end delete mode exit_insert_mode rmir str ei - - YBCGE exit insert mode exit_standout_mode rmso str se - - YBCGE exit standout mode exit_underline_mode rmul str ue - - YBCGE exit underline mode flash_screen flash str vb - - YBCGE visible bell (may not move cursor) form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*) from_status_line fsl str fs - - YB-G- return from status line init_1string is1 str i1 - - YB-G- initialization string init_2string is2 str is - - YB-G- initialization string init_3string is3 str i3 - - YB-G- initialization string init_file if str if - - YB-G- name of initialization file insert_character ich1 str ic - - YBCGE insert character (P) insert_line il1 str al - - YBCGE insert line (P*) insert_padding ip str ip - - YBCGE insert padding after inserted character key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key key_f10 kf10 str k; KEY_F(10) - ----E F10 function key key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key key_home khome str kh KEY_HOME 0406 YBCGE home key key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down) key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0 lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1 lab_f10 lf10 str la - - ----- label on function key f10 if not f10 lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2 lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3 lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4 lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5 lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6 lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7 lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8 lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9 meta_off rmm str mo - - YB-G-* turn off meta mode meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on) newline nel str nw - - YB-G-* newline (behave like cr followed by lf) pad_char pad str pc - - YBCGE padding char (instead of null) parm_dch dch str DC - - YB-GE delete #1 characters (P*) parm_delete_line dl str DL - - YBCGE delete #1 lines (P*) parm_down_cursor cud str DO - - YBCGE down #1 lines (P*) parm_ich ich str IC - - YB-GE insert #1 characters (P*) parm_index indn str SF - - YBCG- scroll forward #1 lines (P) parm_insert_line il str AL - - YBCGE insert #1 lines (P*) parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P) parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*) parm_rindex rin str SR - - YBCG- scroll back #1 lines (P) parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*) pkey_key pfkey str pk - - -B--- program function key #1 to type string #2 pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2 pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2 print_screen mc0 str ps - - -B-G-* print contents of screen prtr_off mc4 str pf - - -B-G-* turn off printer prtr_on mc5 str po - - -B-G-* turn on printer repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*) reset_1string rs1 str r1 - - -B--- reset string reset_2string rs2 str r2 - - -B--- reset string reset_3string rs3 str r3 - - -B--- reset string reset_file rf str rf - - -B--- name of reset file restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor row_address vpa str cv - - -B-GE* vertical position #1 absolute (P) save_cursor sc str sc - - YBCG- save current cursor position (P) scroll_forward ind str sf - - YBCGE scroll text up (P) scroll_reverse ri str sr - - YBCGE scroll text down (P) set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9) set_tab hts str st - - YB-G- set a tab in every row, current columns set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4 tab ht str ta - - YBCGE tab to next 8-space hardware tab stop to_status_line tsl str ts - - YB-G- move to status line, column #1 underline_char uc str uc - - YBCG- underline char and move past it up_half_line hu str hu - - YB-G- half a line up init_prog iprog str iP - - -B--- path name of program for initialization key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes # # SVr1 capabilities stop here. IBM's version of terminfo is the same as # SVr4 up to this point, but has a different set afterwards. # char_padding rmp str rP - - ----- like ip but when in insert mode acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100 plab_norm pln str pn - - ----- program label #1 to show string #2 key_btab kcbt str kB KEY_BTAB 0541 ----- back-tab key enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking enter_am_mode smam str SA - - ----- turn on automatic margins exit_am_mode rmam str RA - - ----- turn off automatic margins xon_character xonc str XN - - ----- XON character xoff_character xoffc str XF - - ----- XOFF character ena_acs enacs str eA - - ----- enable alternate char set label_on smln str LO - - ----- turn on soft labels label_off rmln str LF - - ----- turn off soft labels key_beg kbeg str @1 KEY_BEG 0542 ----- begin key key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key key_close kclo str @3 KEY_CLOSE 0544 ----- close key key_command kcmd str @4 KEY_COMMAND 0545 ----- command key key_copy kcpy str @5 KEY_COPY 0546 ----- copy key key_create kcrt str @6 KEY_CREATE 0547 ----- create key key_end kend str @7 KEY_END 0550 ----- end key key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key key_exit kext str @9 KEY_EXIT 0551 ----- exit key key_find kfnd str @0 KEY_FIND 0552 ----- find key key_help khlp str %1 KEY_HELP 0553 ----- help key key_mark kmrk str %2 KEY_MARK 0554 ----- mark key key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key key_move kmov str %4 KEY_MOVE 0556 ----- move key key_next knxt str %5 KEY_NEXT 0557 ----- next key key_open kopn str %6 KEY_OPEN 0560 ----- open key key_options kopt str %7 KEY_OPTIONS 0561 ----- options key key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key key_print kprt str %9 KEY_PRINT 0532 ----- print key key_redo krdo str %0 KEY_REDO 0563 ----- redo key key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key key_restart krst str &4 KEY_RESTART 0567 ----- restart key key_resume kres str &5 KEY_RESUME 0570 ----- resume key key_save ksav str &6 KEY_SAVE 0571 ----- save key key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key key_undo kund str &8 KEY_UNDO 0630 ----- undo key key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key key_select kslt str *6 KEY_SELECT 0601 ----- select key key_send kEND str *7 KEY_SEND 0602 ----- shifted end key key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key req_for_input rfi str RF - - ----- send next input char (for ptys) key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key key_f20 kf20 str FA KEY_F(20) - ----E F20 function key key_f21 kf21 str FB KEY_F(21) - ----E F21 function key key_f22 kf22 str FC KEY_F(22) - ----E F22 function key key_f23 kf23 str FD KEY_F(23) - ----E F23 function key key_f24 kf24 str FE KEY_F(24) - ----E F24 function key key_f25 kf25 str FF KEY_F(25) - ----E F25 function key key_f26 kf26 str FG KEY_F(26) - ----E F26 function key key_f27 kf27 str FH KEY_F(27) - ----E F27 function key key_f28 kf28 str FI KEY_F(28) - ----E F28 function key key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key key_f30 kf30 str FK KEY_F(30) - ----E F30 function key key_f31 kf31 str FL KEY_F(31) - ----E F31 function key key_f32 kf32 str FM KEY_F(32) - ----E F32 function key key_f33 kf33 str FN KEY_F(33) - ----E F33 function key key_f34 kf34 str FO KEY_F(34) - ----E F34 function key key_f35 kf35 str FP KEY_F(35) - ----E F35 function key key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key key_f37 kf37 str FR KEY_F(37) - ----E F37 function key key_f38 kf38 str FS KEY_F(38) - ----E F38 function key key_f39 kf39 str FT KEY_F(39) - ----E F39 function key key_f40 kf40 str FU KEY_F(40) - ----E F40 function key key_f41 kf41 str FV KEY_F(41) - ----E F41 function key key_f42 kf42 str FW KEY_F(42) - ----E F42 function key key_f43 kf43 str FX KEY_F(43) - ----E F43 function key key_f44 kf44 str FY KEY_F(44) - ----E F44 function key key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key clr_bol el1 str cb - - ----- Clear to beginning of line clear_margins mgc str MC - - ----- clear right and left soft margins set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap). set_right_margin smgr str MR - - ----- set right soft margin at current column label_format fln str Lf - - ----- label format set_clock sclk str SC - - ----- set clock, #1 hrs #2 mins #3 secs display_clock dclk str DK - - ----- display clock remove_clock rmclk str RC - - ----- remove clock create_window cwin str CW - - ----- define a window #1 from #2,#3 to #4,#5 goto_window wingo str WG - - ----- go to window #1 hangup hup str HU - - ----- hang-up phone dial_phone dial str DI - - ----- dial number #1 quick_dial qdial str QD - - ----- dial number #1 without checking tone tone str TO - - ----- select touch tone dialing pulse pulse str PU - - ----- select pulse dialing flash_hook hook str fh - - ----- flash switch hook fixed_pause pause str PA - - ----- pause for 2-3 seconds wait_tone wait str WA - - ----- wait for dial-tone user0 u0 str u0 - - ----- User string #0 user1 u1 str u1 - - ----- User string #1 user2 u2 str u2 - - ----- User string #2 user3 u3 str u3 - - ----- User string #3 user4 u4 str u4 - - ----- User string #4 user5 u5 str u5 - - ----- User string #5 user6 u6 str u6 - - ----- User string #6 user7 u7 str u7 - - ----- User string #7 user8 u8 str u8 - - ----- User string #8 user9 u9 str u9 - - ----- User string #9 # # NCurses extensions for keys accessible on most PC consoles # key_sup kUP str !5 KEY_SUP + ----- shifted up-arrow key key_sdown kDOWN str !6 KEY_SDOWN + ----- shifted down-arrow key key_sbackspace kBS str !7 KEY_SBACKSPACE + ----- shifted backspace key key_c_delete kcdelete str !8 KEY_C_DELETE + ----- control- delete-character key key_c_end kcend str !9 KEY_C_END + ----- control- end key key_c_home kchom str !0 KEY_C_HOME + ----- control- home key key_c_insert kcinsert str !_ KEY_C_INSERT + ----- control- insert-character key key_c_left kclft str %k KEY_C_LEFT + ----- control- left-arrow key key_c_next kcnxt str %l KEY_C_NEXT + ----- control- next key key_c_previous kcprv str %m KEY_C_PREVIOUS + ----- control- previous key key_c_print kcprt str %n KEY_C_PRINT + ----- control- print key key_c_right kcrit str %o KEY_C_RIGHT + ----- control- right-arrow key key_c_backspace kcbs str %p KEY_C_BACKSPACE + ----- control- backspace key key_c_up kcup str %q KEY_C_UP + ----- control- up-arrow key key_c_down kcdown str %r KEY_C_DOWN + ----- control- down-arrow key key_a_delete kadelete str %s KEY_A_DELETE + ----- alt- delete-character key key_a_end kaend str %t KEY_A_END + ----- alt- end key key_a_home kahom str %u KEY_A_HOME + ----- alt- home key key_a_insert kainsert str %v KEY_A_INSERT + ----- alt- insert-character key key_a_left kalft str %w KEY_A_LEFT + ----- alt- left-arrow key key_a_next kanxt str %x KEY_A_NEXT + ----- alt- next key key_a_previous kaprv str %y KEY_A_PREVIOUS + ----- alt- previous key key_a_print kaprt str %z KEY_A_PRINT + ----- alt- print key key_a_right karit str %! KEY_A_RIGHT + ----- alt- right-arrow key key_a_backspace kabs str %@ KEY_A_BACKSPACE + ----- alt- backspace key key_a_up kaup str %# KEY_A_UP + ----- alt- up-arrow key key_a_down kadown str %$ KEY_A_DOWN + ----- alt- down-arrow key key_a_a kaa str $a KEY_A_A + ----- alt- a key key_a_b kab str $b KEY_A_B + ----- alt- b key key_a_c kac str $c KEY_A_C + ----- alt- c key key_a_d kad str $d KEY_A_D + ----- alt- d key key_a_e kae str $e KEY_A_E + ----- alt- e key key_a_f kaf str $f KEY_A_F + ----- alt- f key key_a_g kag str $g KEY_A_G + ----- alt- g key key_a_h kah str $h KEY_A_H + ----- alt- h key key_a_i kai str $i KEY_A_I + ----- alt- i key key_a_j kaj str $j KEY_A_J + ----- alt- j key key_a_k kak str $k KEY_A_K + ----- alt- k key key_a_l kal str $l KEY_A_L + ----- alt- l key key_a_m kam str $m KEY_A_M + ----- alt- m key key_a_n kan str $n KEY_A_N + ----- alt- n key key_a_o kao str $o KEY_A_O + ----- alt- o key key_a_p kap str $p KEY_A_P + ----- alt- p key key_a_q kaq str $q KEY_A_Q + ----- alt- q key key_a_r kar str $r KEY_A_R + ----- alt- r key key_a_s kas str $s KEY_A_S + ----- alt- s key key_a_t kat str $t KEY_A_T + ----- alt- t key key_a_u kau str $u KEY_A_U + ----- alt- u key key_a_v kav str $v KEY_A_V + ----- alt- v key key_a_w kaw str $w KEY_A_W + ----- alt- w key key_a_x kax str $x KEY_A_X + ----- alt- x key key_a_y kay str $y KEY_A_Y + ----- alt- y key key_a_z kaz str $z KEY_A_Z + ----- alt- z key key_a_0 ka_0 str $0 KEY_A_0 + ----- alt- 0 key key_a_1 ka_1 str $1 KEY_A_1 + ----- alt- 1 key key_a_2 ka_2 str $2 KEY_A_2 + ----- alt- 2 key key_a_3 ka_3 str $3 KEY_A_3 + ----- alt- 3 key key_a_4 ka_4 str $4 KEY_A_4 + ----- alt- 4 key key_a_5 ka_5 str $5 KEY_A_5 + ----- alt- 5 key key_a_6 ka_6 str $6 KEY_A_6 + ----- alt- 6 key key_a_7 ka_7 str $7 KEY_A_7 + ----- alt- 7 key key_a_8 ka_8 str $8 KEY_A_8 + ----- alt- 8 key key_a_9 ka_9 str $9 KEY_A_9 + ----- alt- 9 key key_a_backtick ka_bt str $` KEY_A_BACKTICK + ----- alt- ` key key_a_under ka_und str $_ KEY_A_UNDER + ----- alt- _ key key_a_equals ka_eq str $= KEY_A_EQUALS + ----- alt- = key key_a_bar ka_bsl str $| KEY_A_BAR + ----- alt- | key key_a_lbracker ka_lbr str $[ KEY_A_LBRACKER + ----- alt- [ key key_a_rbracker ka_rbr str $] KEY_A_RBRACKER + ----- alt- ] key key_a_semi ka_semi str $; KEY_A_SEMI + ----- alt- ; key key_a_tick ka_tick str $' KEY_A_TICK + ----- alt- ' key key_a_comma ka_com str $, KEY_A_COMMA + ----- alt- , key key_a_dot ka_dot str $. KEY_A_DOT + ----- alt- . key key_a_question ka_sla str $? KEY_A_QUESTION + ----- alt- ? key key_a_divide ka_div str $/ KEY_A_DIVIDE + ----- alt- keypad / key key_a_multiply ka_mul str $* KEY_A_MULTIPLY + ----- alt- keypad * key key_a_add ka_add str $+ KEY_A_ADD + ----- alt- keypad + key key_a_subtract ka_sub str $- KEY_A_SUBTRACT + ----- alt- keypad - key key_a_kenter ka_kent str $< KEY_A_KENTER + ----- alt- keypad enter key key_a_enter ka_ent str $> KEY_A_ENTER + ----- alt- enter key key_c_at kcat str %% KEY_C_AT + ----- control- @ key key_c_divide kcdiv str %/ KEY_C_DIVIDE + ----- control- keypad / key key_c_multiply kcmul str %* KEY_C_MULTIPLY + ----- control- keypad * key key_c_add kcadd str %+ KEY_C_ADD + ----- control- keypad + key key_c_subtract kcsub str %- KEY_C_SUBTRACT + ----- control- keypad - key # # SVr4 added these capabilities to support color # orig_pair op str op - - ----- Set default pair to its original value orig_colors oc str oc - - ----- Set all color pairs to the original ones initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4) initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7) set_color_pair scp str sp - - ----- Set current color pair to #1 set_foreground setf str Sf - - ----- Set foreground color #1 set_background setb str Sb - - ----- Set background color #1 # # SVr4 added these capabilities to support printers # change_char_pitch cpi str ZA - - ----- Change number of characters per inch to #1 change_line_pitch lpi str ZB - - ----- Change number of lines per inch to #1 change_res_horz chr str ZC - - ----- Change horizontal resolution to #1 change_res_vert cvr str ZD - - ----- Change vertical resolution to #1 define_char defc str ZE - - ----- Define a character #1, #2 dots wide, descender #3 enter_doublewide_mode swidm str ZF - - ----- Enter double-wide mode enter_draft_quality sdrfq str ZG - - ----- Enter draft-quality mode enter_italics_mode sitm str ZH - - ----- Enter italic mode enter_leftward_mode slm str ZI - - ----- Start leftward carriage motion enter_micro_mode smicm str ZJ - - ----- Start micro-motion mode enter_near_letter_quality snlq str ZK - - ----- Enter NLQ mode enter_normal_quality snrmq str ZL - - ----- Enter normal-quality mode enter_shadow_mode sshm str ZM - - ----- Enter shadow-print mode enter_subscript_mode ssubm str ZN - - ----- Enter subscript mode enter_superscript_mode ssupm str ZO - - ----- Enter superscript mode enter_upward_mode sum str ZP - - ----- Start upward carriage motion exit_doublewide_mode rwidm str ZQ - - ----- End double-wide mode exit_italics_mode ritm str ZR - - ----- End italic mode exit_leftward_mode rlm str ZS - - ----- End left-motion mode exit_micro_mode rmicm str ZT - - ----- End micro-motion mode exit_shadow_mode rshm str ZU - - ----- End shadow-print mode exit_subscript_mode rsubm str ZV - - ----- End subscript mode exit_superscript_mode rsupm str ZW - - ----- End superscript mode exit_upward_mode rum str ZX - - ----- End reverse character motion micro_column_address mhpa str ZY - - ----- Like column_address in micro mode micro_down mcud1 str ZZ - - ----- Like cursor_down in micro mode micro_left mcub1 str Za - - ----- Like cursor_left in micro mode micro_right mcuf1 str Zb - - ----- Like cursor_right in micro mode micro_row_address mvpa str Zc - - ----- Like row_address #1 in micro mode micro_up mcuu1 str Zd - - ----- Like cursor_up in micro mode order_of_pins porder str Ze - - ----- Match software bits to print-head pins parm_down_micro mcud str Zf - - ----- Like parm_down_cursor in micro mode parm_left_micro mcub str Zg - - ----- Like parm_left_cursor in micro mode parm_right_micro mcuf str Zh - - ----- Like parm_right_cursor in micro mode parm_up_micro mcuu str Zi - - ----- Like parm_up_cursor in micro mode select_char_set scs str Zj - - ----- Select character set, #1 set_bottom_margin smgb str Zk - - ----- Set bottom margin at current line set_bottom_margin_parm smgbp str Zl - - ----- Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom set_left_margin_parm smglp str Zm - - ----- Set left (right) margin at column #1 set_right_margin_parm smgrp str Zn - - ----- Set right margin at column #1 set_top_margin smgt str Zo - - ----- Set top margin at current line set_top_margin_parm smgtp str Zp - - ----- Set top (bottom) margin at row #1 start_bit_image sbim str Zq - - ----- Start printing bit image graphics start_char_set_def scsd str Zr - - ----- Start character set definition #1, with #2 characters in the set stop_bit_image rbim str Zs - - ----- Stop printing bit image graphics stop_char_set_def rcsd str Zt - - ----- End definition of character set #1 subscript_characters subcs str Zu - - ----- List of subscriptable characters superscript_characters supcs str Zv - - ----- List of superscriptable characters these_cause_cr docr str Zw - - ----- Printing any of these characters causes CR zero_motion zerom str Zx - - ----- No motion for subsequent character #%.TE #%.ad #% #%The following string capabilities are present in the SVr4.0 term structure, #%but were originally not documented in the man page. #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw18. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR char_set_names csnm str Zy - - ----- Produce #1'th item from list of character set names key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred mouse_info minfo str Mi - - ----- Mouse status information req_mouse_pos reqmp str RQ - - ----- Request mouse position get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented. set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape pkey_plab pfxl str xl - - ----- Program function key #1 to type string #2 and show string #3 device_type devt str dv - - ----- Indicate language/codeset support code_set_init csin str ci - - ----- Init sequence for multiple codesets set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII) set1_des_seq s1ds str s1 - - ----- Shift to codeset 1 set2_des_seq s2ds str s2 - - ----- Shift to codeset 2 set3_des_seq s3ds str s3 - - ----- Shift to codeset 3 set_lr_margin smglr str ML - - ----- Set both left and right margins to #1, #2. (ML is not in BSD termcap). set_tb_margin smgtb str MT - - ----- Sets both top and bottom margins to #1, #2 bit_image_repeat birep str Xy - - ----- Repeat bit image cell #1 #2 times bit_image_newline binel str Zz - - ----- Move to next row of the bit image bit_image_carriage_return bicr str Yv - - ----- Move to beginning of same row color_names colornm str Yw - - ----- Give name for color #1 define_bit_image_region defbi str Yx - - ----- Define rectangular bit image region end_bit_image_region endbi str Yy - - ----- End a bit-image region set_color_band setcolor str Yz - - ----- Change to ribbon color #1 set_page_length slines str YZ - - ----- Set page length to #1 lines # # SVr4 added these capabilities for direct PC-clone support # display_pc_char dispc str S1 - - ----- Display PC character #1 enter_pc_charset_mode smpch str S2 - - ----- Enter PC character display mode exit_pc_charset_mode rmpch str S3 - - ----- Exit PC character display mode enter_scancode_mode smsc str S4 - - ----- Enter PC scancode mode exit_scancode_mode rmsc str S5 - - ----- Exit PC scancode mode pc_term_options pctrm str S6 - - ----- PC terminal options scancode_escape scesc str S7 - - ----- Escape for scancode emulation alt_scancode_esc scesa str S8 - - ----- Alternate escape for scancode emulation #%.TE #%.ad #% #%.in .8i #%The XSI Curses standard added these hardcopy capabilities. #%They were used in some post-4.1 versions of System V curses, #%e.g., Solaris 2.5 and IRIX 6.x. #%Except for \fBYI\fP, the \fBncurses\fR termcap names for them are invented. #%According to the XSI Curses standard, they have no termcap names. #%If your compiled terminfo entries use these, #%they may not be binary-compatible with System V terminfo #%entries after SVr4.1; beware! #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR enter_horizontal_hl_mode ehhlm str Xh - - ----- Enter horizontal highlight mode enter_left_hl_mode elhlm str Xl - - ----- Enter left highlight mode enter_low_hl_mode elohlm str Xo - - ----- Enter low highlight mode enter_right_hl_mode erhlm str Xr - - ----- Enter right highlight mode enter_top_hl_mode ethlm str Xt - - ----- Enter top highlight mode enter_vertical_hl_mode evhlm str Xv - - ----- Enter vertical highlight mode set_a_attributes sgr1 str sA - - ----- Define second set of video attributes #1-#6 set_pglen_inch slength str YI - - ----- Set page length to #1 hundredth of an inch (some implementations use sL for termcap). #%.TE #%.ad # # The magic token below tells the tic compiler-generator code that all the caps # past it should be ignored (not written out) when dumping terminfo objects. It # also tells the man page table generator not to pass through following lines # This means we can have obsolete capabilities and pseudo-capabilities that are # recognized for termcap or terminfo compilation, but not output. # # %%-STOP-HERE-%% # # Don't move this casually! In fact, don't move it at all unless you're # either doing it to add System V or XPG4 extensions, or have decided you # don't care about SVr4 binary compatibility. # ############################################################################# # # TERMCAP EXTENSION CAPABILITIES # # The capabilities below are either obsolete or extensions on certain systems. # They are not used by SVR4 terminfo. Some are used by captoinfo to translate # termcap sources; the rest are listed for completeness, and in case somebody # cares about them enough to hack in code that will translate them into # terminfo capabilities. # # The first part of the list is from Ross Ridge's `mytinfo' package # (comp.sources.unix, volume 26); the variable names and terminfo names (as # well as the termcap codes) match his list. # # This group of codes is not marked obsolete in 4.4BSD, but have no direct # terminfo equivalents. The rs capability is specially translated to terminfo # r2, and vice versa, if an entry does not already have an r2. Similarly, # i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2). # The ug capability is thrown away, but assumed to be whatever sg is if the # latter is nonzero and we're dumping in termcap format. # termcap_init2 OTi2 str i2 - - YB--- secondary initialization string termcap_reset OTrs str rs - - YB-G- terminal reset string magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul # # Obsolete termcap capabilities. Some are used for termcap translation. The # code uses the 'OT' prefix we put on obsolete capabilities to suppress # printing them in terminfo source dumps of compiled entries. # backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line carriage_return_delay OTdC num dC - - YB-G- pad needed for CR new_line_delay OTdN num dN - - YB-G- pad needed for LF linefeed_if_not_lf OTnl str nl - - YBCGE use to move down backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H # # GNU termcap library extensions. The GNU termcap file distributed with # Emacs no longer uses these, but MT showed up in pre-9.0 versions of the # BSD termcap file. The name clash with terminfo MT is resolved by type # info; MT is converted to km. # gnu_has_meta_key OTMT bool MT - - ----E has meta key # gnu_tab_width OTtw num tw - - ----E tab width in spaces # # GNU termcap *does* include the following extended capability, Only the # now-obsolete Ann Arbor terminals used it. # # gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region # # The following comments describe capnames so ancient that I believe no # software uses them any longer. Some of these have to go because they # clash with terminfo names in ways that cannot be resolved by type # information. # # These mytinfo codes are not used in the 4.4BSD curses code. They are # marked obsolete in the 4.4BSD manual pages. # # There is one conflict with terminfo; ma is in both. This conflict is # resolved by type information. # # The `ko' capability is translated by special code. It should contain a # comma-separated list of capabilities for which there are corresponding keys. # The `kn' code is accepted but ignored. # # The `ma' capability seems to have been designed to map between the rogue(2) # motion keys (including jkhl) and characters emitted by arrow keys on some # primitive pre-ANSI terminals. It's so obsolete it's fossilized... # # Here is a description of memory_lock_above and memory_unlock: # "You can 'freeze' data on the screen by turning on Memory Lock in a line of # text. All lines above the cursor's current line become locked in place on # the screen. Then enter data normally. When the screen fills up, any # further data entered forces the first line of unfrozen line text to scroll # under the frozen data. Lines scrolled off the screen are inserted into # memory immediately preceding the first frozen line." (from the HP 700/96 # User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l. # # Applications that use terminfo are supposed to behave as though xr is # always true. # linefeed_is_newline OTNL bool NL - - YB--- move down with \n # even_parity OTEP bool EP - - -B--- terminal requires even parity # odd_parity OTOP bool OP - - -B--- terminal requires odd parity # half_duplex OTHD bool HD - - -B--- terminal is half-duplex # lower_case_only OTLC bool LC - - -B--- terminal has only lower case # upper_case_only OTUC bool UC - - -B--- terminal has only upper case backspace_delay OTdB num dB - - YB-G- padding required for ^H # form_feed_delay OTdF num dF - - -B-G- padding required for ^L horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I # vertical_tab_delay OTdV num dV - - -B--- padding required for ^V number_of_function_keys OTkn num kn - - -B-G- count of function keys other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps arrow_key_map OTma str ma - - YBC-- map arrow keys rogue(1) motion keys # memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line # memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I return_does_clr_eol OTxr bool xr - - YB--- return clears the line # tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch # # mytinfo described this as a termcap capability, but it's not listed in the # 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses # package, like System V, behaves as though it is always true. # # rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line # # University of Waterloo termcap extensions (as described in mytinfo). # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot # be resolved by a type check. The descriptions are guesses from what was # in the mytinfo tables. # # key_interrupt_char OTki str ki - - ----- string set by interrupt key (?) # key_kill_char OTkk str kk - - ----- string set by kill key (?) # key_suspend_char OTkz str kz - - ----- string set by suspend key (?) # initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?) # ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return # # Nonstandard capabilities unique to Ross Ridge's `mytinfo' package. # SR clashes with a terminfo name; this ambiguity cannot be resolved by a type # check. # # scroll_left OTsl1 str Sl - - ----- scroll screen leftward # scroll_right OTsr1 str Sr - - ----- scroll screen rightward # parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters # parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters # # The mytinfo capabilities end here. # # XENIX extensions: # # Xenix defined its own set of forms-drawing capabilities: # # cap IBM ASCII description ACS ASCII # --- ----------- -------------------- ------------- ------ # G1 191 \277 M-? single upper right ACS_URCORNER # G2 218 \332 M-Z single upper left ACS_ULCORNER # G3 192 \300 M-@ single lower left ACS_LLCORNER # G4 217 \331 M-Y single lower right ACS_LRCORNER # G5 187 \273 M-; double upper right # G6 201 \311 M-I double upper left # G7 200 \310 M-H double lower left # G8 188 \274 M-< double lower right # GC 197 \305 M-E single intersection ACS_PLUS _ _ # GD 194 \302 M-B single down-tick ACS_TTEE | # GH 196 \304 M-D single horizontal line ACS_HLINE # GL 180 \264 M-4 single left tick ACS_RTEE -| # GR 195 \303 M-C single right tick ACS_LTEE |- # GU 193 \301 M-A single up tick ACS_BTEE _|_ # GV 179 \263 M-3 single vertical line ACS_VLINE # Gc 206 \316 M-N double intersection # Gd 203 \313 M-K double down tick # Gh 205 \315 M-M double horizontal line # Gl 204 \204 M-L double left tick # Gr 185 \271 M-9 double right tick # Gu 202 \312 M-J double up tick # Gv 186 \272 M-: double vertical line # # The compiler will translate the single-line caps and discard the others # (via IGNORE aliases further down). We don't want to do normal pad # translation on these, they're often single-character printable ASCII # strings that happen to be numerics. There's awk code in parametrized.sh # that detects the acs_ prefix and uses it to suppress pad translation. # These terminfo names are invented. # acs_ulcorner OTG2 str G2 - - ----- single upper left acs_llcorner OTG3 str G3 - - ----- single lower left acs_urcorner OTG1 str G1 - - ----- single upper right acs_lrcorner OTG4 str G4 - - ----- single lower right acs_ltee OTGR str GR - - ----- tee pointing right acs_rtee OTGL str GL - - ----- tee pointing left acs_btee OTGU str GU - - ----- tee pointing up acs_ttee OTGD str GD - - ----- tee pointing down acs_hline OTGH str GH - - ----- single horizontal line acs_vline OTGV str GV - - ----- single vertical line acs_plus OTGC str GC - - ----- single intersection # ############################################################################# # # TERMINFO EXTENSION CAPABILITIES # # This section is almost all comments. What it's mainly for is to describe # what capabilities need to be squeezed out to get down to the XSI Curses # standard set. They are flagged with K. # # HP extensions # # These extensions follow ptr_non (replacing everything after it) in HP # terminfo files. Except for memory_lock and memory_unlock, they are # functionally identical to SVr4 extensions, but they make the binary format # different. Grrr.... # memory_lock meml str ml - - ----K lock memory above cursor memory_unlock memu str mu - - ----K unlock memory #plab_norm pln str pn - - ----- program label #1 to show string #2 #label_on smln str LO - - ----- turn on soft labels #label_off rmln str LF - - ----- turn off soft labels #key_f11 kf11 str F1 - - ----- F11 function key #key_f12 kf12 str F2 - - ----- F12 function key #key_f13 kf13 str F3 - - ----- F13 function key #key_f14 kf14 str F4 - - ----- F14 function key #key_f15 kf15 str F5 - - ----- F15 function key #key_f16 kf16 str F6 - - ----- F16 function key #key_f17 kf17 str F7 - - ----- F17 function key #key_f18 kf18 str F8 - - ----- F18 function key #key_f19 kf19 str F9 - - ----- F19 function key #key_f20 kf20 str FA - - ----- F20 function key #key_f21 kf21 str FB - - ----- F21 function key #key_f22 kf22 str FC - - ----- F22 function key #key_f23 kf23 str FD - - ----- F23 function key #key_f24 kf24 str FE - - ----- F24 function key #key_f25 kf25 str FF - - ----- F25 function key #key_f26 kf26 str FG - - ----- F26 function key #key_f27 kf27 str FH - - ----- F27 function key #key_f28 kf28 str FI - - ----- F28 function key #key_f29 kf29 str FJ - - ----- F29 function key #key_f30 kf30 str FK - - ----- F30 function key #key_f31 kf31 str FL - - ----- F31 function key #key_f32 kf32 str FM - - ----- F32 function key #key_f33 kf33 str FN - - ----- F33 function key #key_f34 kf34 str FO - - ----- F34 function key #key_f35 kf35 str FP - - ----- F35 function key #key_f36 kf36 str FQ - - ----- F36 function key #key_f37 kf37 str FR - - ----- F37 function key #key_f38 kf38 str FS - - ----- F38 function key #key_f39 kf39 str FT - - ----- F39 function key #key_f40 kf40 str FU - - ----- F40 function key #key_f41 kf41 str FV - - ----- F41 function key #key_f42 kf42 str FW - - ----- F42 function key #key_f43 kf43 str FX - - ----- F43 function key #key_f44 kf44 str FY - - ----- F44 function key #key_f45 kf45 str FZ - - ----- F45 function key #key_f46 kf46 str Fa - - ----- F46 function key #key_f47 kf47 str Fb - - ----- F47 function key #key_f48 kf48 str Fc - - ----- F48 function key #key_f49 kf49 str Fd - - ----- F49 function key #key_f50 kf50 str Fe - - ----- F50 function key #key_f51 kf51 str Ff - - ----- F51 function key #key_f52 kf52 str Fg - - ----- F52 function key #key_f53 kf53 str Fh - - ----- F53 function key #key_f54 kf54 str Fi - - ----- F54 function key #key_f55 kf55 str Fj - - ----- F55 function key #key_f56 kf56 str Fk - - ----- F56 function key #key_f57 kf57 str Fl - - ----- F57 function key #key_f58 kf58 str Fm - - ----- F58 function key #key_f59 kf59 str Fn - - ----- F59 function key #key_f60 kf60 str Fo - - ----- F60 function key #key_f61 kf61 str Fp - - ----- F61 function key #key_f62 kf62 str Fq - - ----- F62 function key #key_f63 kf63 str Fr - - ----- F63 function key # # IBM extensions # # These extensions follow ptr_non (replacing everything after it) in IBM # terminfo files. # # The places in the box[12] capabilities correspond to acsc characters, here is # the mapping: # # box1[0] = ACS_ULCORNER # box1[1] = ACS_HLINE # box1[2] = ACS_URCORNER # box1[3] = ACS_VLINE # box1[4] = ACS_LRCORNER # box1[5] = ACS_LLCORNER # box1[6] = ACS_TTEE # box1[7] = ACS_RTEE # box1[8] = ACS_BTEE # box1[9] = ACS_LTEE # box1[10] = ACS_PLUS # # The box2 characters are the double-line versions of these forms graphics. # box_chars_1 box1 str bx - - ----K box characters primary set #box_chars_2 box2 str by - - ----K box characters secondary set #box_attr_1 batt1 str Bx - - ----K attributes for box1 #box_attr_2 batt2 str By - - ----K attributes for box2 #color_bg_0 colb0 str d0 - - ----K background color 0 #color_bg_1 colb1 str d1 - - ----K background color 1 #color_bg_2 colb2 str d2 - - ----K background color 2 #color_bg_3 colb3 str d3 - - ----K background color 3 #color_bg_4 colb4 str d4 - - ----K background color 4 #color_bg_5 colb5 str d5 - - ----K background color 5 #color_bg_6 colb6 str d6 - - ----K background color 6 #color_bg_7 colb7 str d7 - - ----K background color 7 #color_fg_0 colf0 str c0 - - ----K foreground color 0 #color_fg_1 colf1 str c1 - - ----K foreground color 1 #color_fg_2 colf2 str c2 - - ----K foreground color 2 #color_fg_3 colf3 str c3 - - ----K foreground color 3 #color_fg_4 colf4 str c4 - - ----K foreground color 4 #color_fg_5 colf5 str c5 - - ----K foreground color 5 #color_fg_6 colf6 str c6 - - ----K foreground color 6 #color_fg_7 colf7 str c7 - - ----K foreground color 7 #font_0 font0 str f0 - - ----- select font 0 #font_1 font1 str f1 - - ----- select font 1 #font_2 font2 str f2 - - ----- select font 2 #font_3 font3 str f3 - - ----- select font 3 #font_4 font4 str f4 - - ----K select font 4 #font_5 font5 str f5 - - ----K select font 5 #font_6 font6 str f6 - - ----K select font 6 #font_7 font7 str f7 - - ----K select font 7 #key_back_tab kbtab str k0 - - ----- backtab key #key_do kdo str ki - - ----K do request key #key_command kcmd str kd - - ----K command-request key #key_command_pane kcpn str kW - - ----K command-pane key #key_end kend str kw - - ----- end key #key_help khlp str kq - - ----- help key #key_newline knl str nl - - ----K newline key #key_next_pane knpn str kv - - ----K next-pane key #key_prev_cmd kppn str kp - - ----K previous-command key #key_prev_pane kppn str kV - - ----K previous-pane key #key_quit kquit str kQ - - ----K quit key #key_select ksel str kU - - ----- select key #key_scroll_left kscl str kz - - ----K scroll left #key_scroll_right kscr str kZ - - ----K scroll right #key_tab ktab str ko - - ----K tab key #key_smap_in1 kmpf1 str Kv - - ----K special mapped key 1 input #key_smap_out1 kmpt1 str KV - - ----K special mapped key 1 output #key_smap_in2 kmpf2 str Kw - - ----K special mapped key 2 input #key_smap_out2 kmpt2 str KW - - ----K special mapped key 2 output #key_smap_in3 kmpf3 str Kx - - ----K special mapped key 3 input #key_smap_out3 kmpt3 str KX - - ----K special mapped key 3 output #key_smap_in4 kmpf4 str Ky - - ----K special mapped key 4 input #key_smap_out4 kmpt4 str KY - - ----K special mapped key 4 output #key_smap_in5 kmpf5 str Kz - - ----K special mapped key 5 input #key_smap_out5 kmpt5 str KZ - - ----K special mapped key 5 output #appl_defined_str apstr str za - - ----K application-defined string # The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in # the IBM manual pages, so the cap name strings are guesses. The terminfo # names are almost certainly right, the termcap ones almost certainly wrong. #key_smap_in6 kmpf6 str k! - - ----K special mapped key 6 input #key_smap_out6 kmpt6 str K@ - - ----K special mapped key 6 output #key_smap_in7 kmpf7 str k# - - ----K special mapped key 7 input #key_smap_out7 kmpt7 str K$ - - ----K special mapped key 7 output #key_smap_in8 kmpf8 str k% - - ----K special mapped key 8 input #key_smap_out8 kmpt8 str K^ - - ----K special mapped key 8 output #key_smap_in9 kmpf9 str k& - - ----K special mapped key 9 input #key_smap_out9 kmpt9 str K* - - ----K special mapped key 9 output # Undocumented capabilities end here #key_sf1 ksf1 str S1 - - ----K special function key 1 #key_sf2 ksf2 str S2 - - ----K special function key 2 #key_sf3 ksf3 str S3 - - ----K special function key 3 #key_sf4 ksf4 str S4 - - ----K special function key 4 #key_sf5 ksf5 str S5 - - ----K special function key 5 #key_sf6 ksf6 str S6 - - ----K special function key 6 #key_sf7 ksf7 str S7 - - ----K special function key 7 #key_sf8 ksf8 str S8 - - ----K special function key 8 #key_sf9 ksf9 str S9 - - ----K special function key 9 #key_sf10 ksf10 str SA - - ----K special function key 10 # AIX version 3 documents different codes for F11, F12 and does not mention # F13-F64. AIX version 4 uses the same naming for F0-F63 as above. #key_f11 kf11 str k< - - ----- function key 11 #key_f12 kf12 str k> - - ----- function key 12 # Undocumented capabilities end here. #key_action kact str kJ - - ----K sent by action key # The IBM docs say these capabilities are for table-drawing, and are # valid only for aixterm descriptions. #enter_topline_mode topl str tp - - ----K start top-line mode #enter_bottom_mode btml str bm - - ----K start bottom-line mode #enter_rvert_mode rvert str rv - - ----K start right-vertical mode #enter_lvert_mode lvert str lv - - ----K start left-vertical mode # ############################################################################# # # ALIAS DECLARATIONS # # Here we set up aliases for translating extensions into standard terminfo. # #---------------------------------- Termcap aliases ------------------------- # # BSD aliases: # # This is a common error in many termcap files. We'll get notified during # translation when this (or any other alias) fires. # capalias sb sr BSD scroll text down # # AT&T extensions: # # The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of # nonstandard capabilities. Its signature is the KM capability, used to name # some sort of keymap file. EE, BO, CI, CV, XS, DS, FL and FE are in this # set. Comments in the original, and a little cross-checking with other AT&T # documentation, seem to establish the following mappings: # capalias BO mr AT&T enter_reverse_mode capalias CI vi AT&T cursor_invisible capalias CV ve AT&T cursor_normal capalias DS mh AT&T enter_dim_mode #capalias EE me AT&T exit_attribute_mode capalias FE LF AT&T label_on capalias FL LO AT&T label_off capalias XS mk AT&T enter_secure_mode # # We comment out EE because the conflicting XENIX EE is more common in # old entries. # # XENIX extensions: # # These are the ones we know how to translate directly: # capalias EE mh XENIX exit_attribute_mode capalias GE ae XENIX exit_alt_charset_mode capalias GS as XENIX enter_alt_charset_mode capalias CF vi XENIX cursor_invis capalias CO ve XENIX cursor_normal capalias EN @7 XENIX key_end capalias HM kh XENIX key_home capalias LD kL XENIX key_dl capalias PD kN XENIX key_npage capalias PN po XENIX prtr_off capalias PS pf XENIX prtr_on capalias PU kP XENIX key_ppage capalias RT @8 XENIX kent capalias UP ku XENIX kcuu1 capalias G6 IGNORE XENIX double-ACS_ULCORNER capalias G7 IGNORE XENIX double-ACS_LLCORNER capalias G5 IGNORE XENIX double-ACS_URCORNER capalias G8 IGNORE XENIX double-ACS_LRCORNER capalias Gr IGNORE XENIX double-ACS_LTEE capalias Gr IGNORE XENIX double-ACS_RTEE capalias Gu IGNORE XENIX double-ACS_BTEE capalias Gd IGNORE XENIX double ACS_TTEE capalias Gh IGNORE XENIX double-ACS_HLINE capalias Gv IGNORE XENIX double-ACS_VLINE capalias Gc IGNORE XENIX double-ACS_PLUS capalias GG IGNORE XENIX acs-glitch # # IBM extensions: # capalias kq %1 IBM key_help # # Iris extensions: # capalias HS mh IRIS enter_dim_mode # # Tektronix extensions: # capalias KA k; Tek key_f10 capalias KB F1 Tek key_f11 capalias KC F2 Tek key_f12 capalias KD F3 Tek key_f13 capalias KE F4 Tek key_f14 capalias KF F5 Tek key_f15 capalias BC Sb Tek set_background capalias FC Sf Tek set_foreground # # There are also the following: # # XENIX XENIX variable name name clash with terminfo? # ----- ------------------- ------------------------- # CL key_char_left # CR key_char_right # CW key_change_window # HP ?? # LF key_linefeed label_off # NU key_next_unlocked_cell # PL ?? # PR ?? # RC key_recalc remove_clock # RF key_toggle_ref req_for_input # WL key_word_left # WR key_word_right # # If you know what any of the question-marked ones mean, please tell us. # #--------------------------------- Terminfo aliases ------------------------ # # IBM extensions: # infoalias font0 s0ds IBM set0_des_seq infoalias font1 s1ds IBM set1_des_seq infoalias font2 s2ds IBM set2_des_seq infoalias font3 s3ds IBM set3_des_seq infoalias kbtab kcbt IBM key_backtab infoalias ksel kslt IBM key_select # # Some others are identical to SVr4/XPG4 capabilities, in particular: # kcmd, kend, khlp, and kf11...kf63. # ############################################################################# ncurses-6.0-20160213/include/Caps.uwin0000644000175100001440000015441112517201445015700 0ustar tomusers############################################################################## # Copyright (c) 2001-2010,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas Dickey # # $Id: Caps.uwin,v 1.6 2015/04/26 15:24:21 tom Exp $ # # This is an adaptation of ncurses' termcap/terminfo capability table, which # is designed to align with U/Win's terminfo. # # This table is used to generate initializers for tables that drive tic, # infocmp, and the library compilation code used to support the termcap # compatibility hack. It is also used to generate the tabular portion of the # terminfo(5) man page; lines beginning with `#%' are passed through to become # the terminfo table. # # This file has three major sections; a standard-capabilities table, two # extension-capability tables, and a section of aliases declarations. # The first two have the same format, as follows: # # FILE FORMAT # # Column 1: terminfo variable name # Column 2: terminfo capability name # Column 3: capability type (boolean, numeric, or string) # Column 4: termcap capability name # Column 5: KEY_xxx name, if any, `-' otherwise # Column 6: value for KEY_xxx name, if any, `-' otherwise # Column 7: Lead with `Y' if capability should be emitted in termcap # translations, `-' otherwise # Column 8: capability description # # The codes following [Y-] in column 7 describe the versions of termcap which # use the given capability. This information is not used by the curses library # proper; rather, it's there to help the terminfo maintainer avoid emitting # termcap entry translations that are more than 1023 bytes long (and tank a # lot of old termcap-using programs). The codes read as follows: # B = mentioned in the BSD man page for 4.4BSD curses # C = used by the 4.4BSD curses library # G = mentioned in the documentation for GNU termcap # E = used by GNU Emacs # K = remove this terminfo capability when translating to standard format # The important codes are C and E. A cap with C or E should be preserved in # translation if possible. The problem is that preserving all such caps may # lead to some termcap translations being too long. The termcap maintainer # has a bit of a juggling act to do...potential problem cases are marked with # an asterisk (*). # # The aliases section has the following format: # # Column 1: either `capalias' or `infoalias' # Column 2: name to be aliased # Column 3: what name it should translate to. The name IGNORE means it # should be discarded with a warning message. # Column 4: name of the extension set (used for compiler warning messages) # Column 5: capability description (usually an associated terminfo variable) # # HANDLING TERMCAP AND TERMINFO EXTENSIONS # # There are basically five different ways to handle termcap and terminfo # extensions: # # 1. Don't list the capname here, or list it but comment it out (the latter # is preferable; someone might want to handle it in the future). If you do # this, the capability will be treated as unknown and raise a warning from # the compiler. # # 2. Alias it. This is appropriate if the capability has the same meaning # as an already-supported one. The compiler will handle aliasing, emitting # an appropriate informational message whenever an alias fires. # # 3. List it in the standard table. You almost certainly do *not* want # to do this -- the capabilities in that one, and their order, have been # carefully chosen to be SVr4-binary-compatible when they're written out # as a terminfo object, and breaking this would be bad. It's up to the ncurses # library what to do with the terminfo data after it's read in. # # 4. List it in the aliases table with an IGNORE target field. If you # do this, the capability will be ignored on input (though the user will # get a warning message about it). # # 5. List it in the extensions table. If you do this, the compiler will # silently accept the capability, but the curses library proper will never # see it (because it won't be written out as part of the terminfo object # format). It's up to you what you have the compiler do with it. # # There are two opposite reasons to choose option 5. One is when you want # to eat the capability silently and discard it when doing translations # to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are # in this class. Nothing will ever use them again. # # More usually, you want the compiler to try to deduce something from the # capability value that it can use to translate it into your output format. # You'll need to write custom code, probably in postprocess_termcap() or # postprocess_terminfo(), to handle the translation. # # CONTROLLING ENTRY LENGTH # # Notes on specific elisions made to fit translations within 1023 bytes: # # Machines with IBM PC-like keyboards want to be able to define the following # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap- # only environments for End or Home-Down), key_dc, and key_ic. This is also # the set of keys the `joe' editor will be upset if it can't see. So don't # trim those out of the set to be translated to termcap, or various users of # the termcap file will become irate. # # It might look tempting to leave those long init strings out of translations. # We can't do it (yet); 4.4BSD tput and tset use them. # # We retain the sgr capability in translation in spite of the fact that neither # 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are # hard to understand without it, and (b) the entries in which it is long tend # to be older types that don't use up a lot of string space on function keys. # The tic(1) translation code will complain and elide it if it makes a critical # difference (there is special code in tic to recognize this situation). # # Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion # optimizer in BSD curses didn't use them. This omission seems to be the # single most effective one, it shortened the resolved length of all thirteen # problem entries in the 9.9.0 version of the terminfo master below critical. # # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap # translations go back over critical if we do this. As 4.4BSD curses fades # into history and GNU termcap's application base shrinks towards being GNU # Emacs only, we'll probably elide out some BSD-only capabilities in order # to buy space for non-essentials Emacs is still using. Capabilities high # on that hit list: rc, sc, uc. # ############################################################################# # # STANDARD CAPABILITIES # #%The following is a complete table of the capabilities included in a #%terminfo description block and available to terminfo-using code. In each #%line of the table, #% #%The \fBvariable\fR is the name by which the programmer (at the terminfo level) #%accesses the capability. #% #%The \fBcapname\fR is the short name used in the text of the database, #%and is used by a person updating the database. #%Whenever possible, capnames are chosen to be the same as or similar to #%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses #%identical or very similar names). Semantics are also intended to match #%those of the specification. #% #%The termcap code is the old #%.B termcap #%capability name (some capabilities are new, and have names which termcap #%did not originate). #%.P #%Capability names have no hard length limit, but an informal limit of 5 #%characters has been adopted to keep them short and to allow the tabs in #%the source file #%.B Caps #%to line up nicely. #% #%Finally, the description field attempts to convey the semantics of the #%capability. You may find some codes in the description field: #%.TP #%(P) #%indicates that padding may be specified #%.TP #%#[1-9] #%in the description field indicates that the string is passed through tparm with #%parms as given (#\fIi\fP). #%.TP #%(P*) #%indicates that padding may vary in proportion to the number of #%lines affected #%.TP #%(#\d\fIi\fP\u) #%indicates the \fIi\fP\uth\d parameter. #% #%.PP #% These are the boolean capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBBooleans name Code\fR auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column auto_right_margin am bool am - - YBCGE terminal has automatic margins no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C) ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp) eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept) erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank generic_type gn bool gn - - YB-G- generic line type hard_copy hc bool hc - - YBCG- hardcopy terminal has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit) has_status_line hs bool hs - - YB-G- has extra status line insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls memory_above da bool da - - YBCG- display may be retained above the screen memory_below db bool db - - YB-GE display may be retained below the screen move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode over_strike os bool os - - YBCG- terminal can overstrike status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061) tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine) transparent_underline ul bool ul - - YBCGE underline character overstrikes xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required prtr_silent mc5i bool 5i - - ----- printer will not echo on screen hard_cursor chts bool HC - - ----- cursor is hard to see non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup no_pad_char npc bool NP - - ----- pad character does not exist non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive back_color_erase bce bool ut - - ----- screen erased with background color can_change ccc bool cc - - ----- terminal can re-define existing colors hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix) #%.TE #%.ad #% #%These are the numeric capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBNumeric name Code\fR columns cols num co - - YBCGE number of columns in a line init_tabs it num it - - YB-G- tabs initially every # spaces lines lines num li - - YBCGE number of lines on screen or page lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix) width_status_line wsl num ws - - YB-G- number of columns in status line num_labels nlab num Nl - - ----- number of labels on screen label_height lh num lh - - ----- rows in each label label_width lw num lw - - ----- columns in each label buttons btns num BT - - ----- number of buttons on mouse #max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle #maximum_windows wnum num MW - - ----- maximum number of defineable windows # These came in with SVr4's color support max_colors colors num Co - - ----- maximum number of colors on screen max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen no_color_video ncv num NC - - ----- video attributes that cannot be used with colors #%.TE #%.ad #% #%The following numeric capabilities are present in the SVr4.0 term structure, #%but are not yet documented in the man page. They came in with SVr4's #%printer support. #% #%.na #% #%These are the string capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR back_tab cbt str bt - - YBCGE back tab (P) bell bel str bl - - YB-GE audible signal (bell) (P) carriage_return cr str cr - - YBCGE carriage return (P*) (P*) change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P) clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P) clear_screen clear str cl - - YBCGE clear screen and home cursor (P*) clr_eol el str ce - - YBCGE clear to end of line (P) clr_eos ed str cd - - YBCGE clear to end of screen (P*) column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P) command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !? cursor_address cup str cm - - YBCGE move to row #1 columns #2 cursor_down cud1 str do - - YBCGE down one line cursor_home home str ho - - YBCGE home cursor (if no cup) cursor_invisible civis str vi - - YB-G- make cursor invisible cursor_left cub1 str le - - YBCGE move left one space cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2 cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis) cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space) cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup) cursor_up cuu1 str up - - YBCGE up one line cursor_visible cvvis str vs - - YBCGE make cursor very visible delete_character dch1 str dc - - YBCGE delete character (P*) delete_line dl1 str dl - - YBCGE delete line (P*) dis_status_line dsl str ds - - YB-G- disable status line down_half_line hd str hd - - YB-G- half a line down enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P) enter_blink_mode blink str mb - - YB-G- turn on blinking enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode enter_ca_mode smcup str ti - - YBCGE string to start programs using cup enter_delete_mode smdc str dm - - YBCGE enter delete mode enter_dim_mode dim str mh - - YB-G- turn on half-bright mode enter_insert_mode smir str im - - YBCGE enter insert mode enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible) enter_protected_mode prot str mp - - -B-G-* turn on protected mode enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode enter_standout_mode smso str so - - YBCGE begin standout mode enter_underline_mode smul str us - - YBCGE begin underline mode erase_chars ech str ec - - YB-G- erase #1 characters (P) exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P) exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup exit_delete_mode rmdc str ed - - YBCGE end delete mode exit_insert_mode rmir str ei - - YBCGE exit insert mode exit_standout_mode rmso str se - - YBCGE exit standout mode exit_underline_mode rmul str ue - - YBCGE exit underline mode flash_screen flash str vb - - YBCGE visible bell (may not move cursor) form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*) from_status_line fsl str fs - - YB-G- return from status line init_1string is1 str i1 - - YB-G- initialization string init_2string is2 str is - - YB-G- initialization string init_3string is3 str i3 - - YB-G- initialization string init_file if str if - - YB-G- name of initialization file insert_character ich1 str ic - - YBCGE insert character (P) insert_line il1 str al - - YBCGE insert line (P*) insert_padding ip str ip - - YBCGE insert padding after inserted character key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key key_f10 kf10 str k; KEY_F(10) - ----E F10 function key key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key key_home khome str kh KEY_HOME 0406 YBCGE home key key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down) key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0 lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1 lab_f10 lf10 str la - - ----- label on function key f10 if not f10 lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2 lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3 lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4 lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5 lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6 lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7 lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8 lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9 meta_off rmm str mo - - YB-G-* turn off meta mode meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on) newline nel str nw - - YB-G-* newline (behave like cr followed by lf) pad_char pad str pc - - YBCGE padding char (instead of null) parm_dch dch str DC - - YB-GE delete #1 characters (P*) parm_delete_line dl str DL - - YBCGE delete #1 lines (P*) parm_down_cursor cud str DO - - YBCGE down #1 lines (P*) parm_ich ich str IC - - YB-GE insert #1 characters (P*) parm_index indn str SF - - YBCG- scroll forward #1 lines (P) parm_insert_line il str AL - - YBCGE insert #1 lines (P*) parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P) parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*) parm_rindex rin str SR - - YBCG- scroll back #1 lines (P) parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*) pkey_key pfkey str pk - - -B--- program function key #1 to type string #2 pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2 pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2 print_screen mc0 str ps - - -B-G-* print contents of screen prtr_off mc4 str pf - - -B-G-* turn off printer prtr_on mc5 str po - - -B-G-* turn on printer repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*) reset_1string rs1 str r1 - - -B--- reset string reset_2string rs2 str r2 - - -B--- reset string reset_3string rs3 str r3 - - -B--- reset string reset_file rf str rf - - -B--- name of reset file restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor row_address vpa str cv - - -B-GE* vertical position #1 absolute (P) save_cursor sc str sc - - YBCG- save current cursor position (P) scroll_forward ind str sf - - YBCGE scroll text up (P) scroll_reverse ri str sr - - YBCGE scroll text down (P) set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9) set_tab hts str st - - YB-G- set a tab in every row, current columns set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4 tab ht str ta - - YBCGE tab to next 8-space hardware tab stop to_status_line tsl str ts - - YB-G- move to status line, column #1 underline_char uc str uc - - YBCG- underline char and move past it up_half_line hu str hu - - YB-G- half a line up init_prog iprog str iP - - -B--- path name of program for initialization key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes # # SVr1 capabilities stop here. IBM's version of terminfo is the same as # SVr4 up to this point, but has a different set afterwards. # char_padding rmp str rP - - ----- like ip but when in insert mode acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100 plab_norm pln str pn - - ----- program label #1 to show string #2 key_btab kcbt str kB KEY_BTAB 0541 ----- back-tab key enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking enter_am_mode smam str SA - - ----- turn on automatic margins exit_am_mode rmam str RA - - ----- turn off automatic margins xon_character xonc str XN - - ----- XON character xoff_character xoffc str XF - - ----- XOFF character ena_acs enacs str eA - - ----- enable alternate char set label_on smln str LO - - ----- turn on soft labels label_off rmln str LF - - ----- turn off soft labels key_beg kbeg str @1 KEY_BEG 0542 ----- begin key key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key key_close kclo str @3 KEY_CLOSE 0544 ----- close key key_command kcmd str @4 KEY_COMMAND 0545 ----- command key key_copy kcpy str @5 KEY_COPY 0546 ----- copy key key_create kcrt str @6 KEY_CREATE 0547 ----- create key key_end kend str @7 KEY_END 0550 ----- end key key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key key_exit kext str @9 KEY_EXIT 0551 ----- exit key key_find kfnd str @0 KEY_FIND 0552 ----- find key key_help khlp str %1 KEY_HELP 0553 ----- help key key_mark kmrk str %2 KEY_MARK 0554 ----- mark key key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key key_move kmov str %4 KEY_MOVE 0556 ----- move key key_next knxt str %5 KEY_NEXT 0557 ----- next key key_open kopn str %6 KEY_OPEN 0560 ----- open key key_options kopt str %7 KEY_OPTIONS 0561 ----- options key key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key key_print kprt str %9 KEY_PRINT 0532 ----- print key key_redo krdo str %0 KEY_REDO 0563 ----- redo key key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key key_restart krst str &4 KEY_RESTART 0567 ----- restart key key_resume kres str &5 KEY_RESUME 0570 ----- resume key key_save ksav str &6 KEY_SAVE 0571 ----- save key key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key key_undo kund str &8 KEY_UNDO 0630 ----- undo key key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key key_select kslt str *6 KEY_SELECT 0601 ----- select key key_send kEND str *7 KEY_SEND 0602 ----- shifted end key key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key req_for_input rfi str RF - - ----- send next input char (for ptys) key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key key_f20 kf20 str FA KEY_F(20) - ----E F20 function key key_f21 kf21 str FB KEY_F(21) - ----E F21 function key key_f22 kf22 str FC KEY_F(22) - ----E F22 function key key_f23 kf23 str FD KEY_F(23) - ----E F23 function key key_f24 kf24 str FE KEY_F(24) - ----E F24 function key key_f25 kf25 str FF KEY_F(25) - ----E F25 function key key_f26 kf26 str FG KEY_F(26) - ----E F26 function key key_f27 kf27 str FH KEY_F(27) - ----E F27 function key key_f28 kf28 str FI KEY_F(28) - ----E F28 function key key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key key_f30 kf30 str FK KEY_F(30) - ----E F30 function key key_f31 kf31 str FL KEY_F(31) - ----E F31 function key key_f32 kf32 str FM KEY_F(32) - ----E F32 function key key_f33 kf33 str FN KEY_F(33) - ----E F33 function key key_f34 kf34 str FO KEY_F(34) - ----E F34 function key key_f35 kf35 str FP KEY_F(35) - ----E F35 function key key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key key_f37 kf37 str FR KEY_F(37) - ----E F37 function key key_f38 kf38 str FS KEY_F(38) - ----E F38 function key key_f39 kf39 str FT KEY_F(39) - ----E F39 function key key_f40 kf40 str FU KEY_F(40) - ----E F40 function key key_f41 kf41 str FV KEY_F(41) - ----E F41 function key key_f42 kf42 str FW KEY_F(42) - ----E F42 function key key_f43 kf43 str FX KEY_F(43) - ----E F43 function key key_f44 kf44 str FY KEY_F(44) - ----E F44 function key key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key clr_bol el1 str cb - - ----- Clear to beginning of line clear_margins mgc str MC - - ----- clear right and left soft margins set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap). set_right_margin smgr str MR - - ----- set right soft margin at current column device_type devt str dv - - ----- Indicate language/codeset support code_set_init csin str ci - - ----- Init sequence for multiple codesets set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII) set1_des_seq s1ds str s1 - - ----- Shift to codeset 1 set2_des_seq s2ds str s2 - - ----- Shift to codeset 2 set3_des_seq s3ds str s3 - - ----- Shift to codeset 3 key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred mouse_info minfo str Mi - - ----- Mouse status information req_mouse_pos reqmp str RQ - - ----- Request mouse position get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented. release_mouse relm str Rm - - ----- Curses should release the mouse */ color_names colornm str Yw - - ----- Give name for color #1 initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4) initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7) orig_colors oc str oc - - ----- Set all color pairs to the original ones orig_pair op str op - - ----- Set default pair to its original value set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape set_background setb str Sb - - ----- Set background color #1 set_color_pair scp str sp - - ----- Set current color pair to #1 set_foreground setf str Sf - - ----- Set foreground color #1 #%.TE #%.ad #% # The magic token below tells the tic compiler-generator code that all the caps # past it should be ignored (not written out) when dumping terminfo objects. It # also tells the man page table generator not to pass through following lines # This means we can have obsolete capabilities and pseudo-capabilities that are # recognized for termcap or terminfo compilation, but not output. # # %%-STOP-HERE-%% # # Don't move this casually! In fact, don't move it at all unless you're # either doing it to add System V or XPG4 extensions, or have decided you # don't care about SVr4 binary compatibility. # ############################################################################# # # TERMCAP EXTENSION CAPABILITIES # # The capabilities below are either obsolete or extensions on certain systems. # They are not used by SVR4 terminfo. Some are used by captoinfo to translate # termcap sources; the rest are listed for completeness, and in case somebody # cares about them enough to hack in code that will translate them into # terminfo capabilities. # # The first part of the list is from Ross Ridge's `mytinfo' package # (comp.sources.unix, volume 26); the variable names and terminfo names (as # well as the termcap codes) match his list. # # This group of codes is not marked obsolete in 4.4BSD, but have no direct # terminfo equivalents. The rs capability is specially translated to terminfo # r2, and vice versa, if an entry does not already have an r2. Similarly, # i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2). # The ug capability is thrown away, but assumed to be whatever sg is if the # latter is nonzero and we're dumping in termcap format. # termcap_init2 OTi2 str i2 - - YB--- secondary initialization string termcap_reset OTrs str rs - - YB-G- terminal reset string magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul # # Obsolete termcap capabilities. Some are used for termcap translation. The # code uses the 'OT' prefix we put on obsolete capabilities to suppress # printing them in terminfo source dumps of compiled entries. # backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line carriage_return_delay OTdC num dC - - YB-G- pad needed for CR new_line_delay OTdN num dN - - YB-G- pad needed for LF linefeed_if_not_lf OTnl str nl - - YBCGE use to move down backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H # # GNU termcap library extensions. The GNU termcap file distributed with # Emacs no longer uses these, but MT showed up in pre-9.0 versions of the # BSD termcap file. The name clash with terminfo MT is resolved by type # info; MT is converted to km. # gnu_has_meta_key OTMT bool MT - - ----E has meta key # gnu_tab_width OTtw num tw - - ----E tab width in spaces # # GNU termcap *does* include the following extended capability, Only the # now-obsolete Ann Arbor terminals used it. # # gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region # # The following comments describe capnames so ancient that I believe no # software uses them any longer. Some of these have to go because they # clash with terminfo names in ways that cannot be resolved by type # information. # # These mytinfo codes are not used in the 4.4BSD curses code. They are # marked obsolete in the 4.4BSD manual pages. # # There is one conflict with terminfo; ma is in both. This conflict is # resolved by type information. # # The `ko' capability is translated by special code. It should contain a # comma-separated list of capabilities for which there are corresponding keys. # The `kn' code is accepted but ignored. # # The `ma' capability seems to have been designed to map between the rogue(2) # motion keys (including jkhl) and characters emitted by arrow keys on some # primitive pre-ANSI terminals. It's so obsolete it's fossilized... # # Here is a description of memory_lock_above and memory_unlock: # "You can 'freeze' data on the screen by turning on Memory Lock in a line of # text. All lines above the cursor's current line become locked in place on # the screen. Then enter data normally. When the screen fills up, any # further data entered forces the first line of unfrozen line text to scroll # under the frozen data. Lines scrolled off the screen are inserted into # memory immediately preceding the first frozen line." (from the HP 700/96 # User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l. # # Applications that use terminfo are supposed to behave as though xr is # always true. # linefeed_is_newline OTNL bool NL - - YB--- move down with \n # even_parity OTEP bool EP - - -B--- terminal requires even parity # odd_parity OTOP bool OP - - -B--- terminal requires odd parity # half_duplex OTHD bool HD - - -B--- terminal is half-duplex # lower_case_only OTLC bool LC - - -B--- terminal has only lower case # upper_case_only OTUC bool UC - - -B--- terminal has only upper case backspace_delay OTdB num dB - - YB-G- padding required for ^H # form_feed_delay OTdF num dF - - -B-G- padding required for ^L horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I # vertical_tab_delay OTdV num dV - - -B--- padding required for ^V number_of_function_keys OTkn num kn - - -B-G- count of function keys other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps arrow_key_map OTma str ma - - YBC-- map arrow keys rogue(1) motion keys # memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line # memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I return_does_clr_eol OTxr bool xr - - YB--- return clears the line # tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch # # mytinfo described this as a termcap capability, but it's not listed in the # 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses # package, like System V, behaves as though it is always true. # # rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line # # University of Waterloo termcap extensions (as described in mytinfo). # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot # be resolved by a type check. The descriptions are guesses from what was # in the mytinfo tables. # # key_interrupt_char OTki str ki - - ----- string set by interrupt key (?) # key_kill_char OTkk str kk - - ----- string set by kill key (?) # key_suspend_char OTkz str kz - - ----- string set by suspend key (?) # initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?) # ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return # # Nonstandard capabilities unique to Ross Ridge's `mytinfo' package. # SR clashes with a terminfo name; this ambiguity cannot be resolved by a type # check. # # scroll_left OTsl1 str Sl - - ----- scroll screen leftward # scroll_right OTsr1 str Sr - - ----- scroll screen rightward # parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters # parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters # # The mytinfo capabilities end here. # # XENIX extensions: # # Xenix defined its own set of forms-drawing capabilities: # # cap IBM ASCII description ACS ASCII # --- ----------- -------------------- ------------- ------ # G1 191 \277 M-? single upper right ACS_URCORNER # G2 218 \332 M-Z single upper left ACS_ULCORNER # G3 192 \300 M-@ single lower left ACS_LLCORNER # G4 217 \331 M-Y single lower right ACS_LRCORNER # G5 187 \273 M-; double upper right # G6 201 \311 M-I double upper left # G7 200 \310 M-H double lower left # G8 188 \274 M-< double lower right # GC 197 \305 M-E single intersection ACS_PLUS _ _ # GD 194 \302 M-B single down-tick ACS_TTEE | # GH 196 \304 M-D single horizontal line ACS_HLINE # GL 180 \264 M-4 single left tick ACS_RTEE -| # GR 195 \303 M-C single right tick ACS_LTEE |- # GU 193 \301 M-A single up tick ACS_BTEE _|_ # GV 179 \263 M-3 single vertical line ACS_VLINE # Gc 206 \316 M-N double intersection # Gd 203 \313 M-K double down tick # Gh 205 \315 M-M double horizontal line # Gl 204 \204 M-L double left tick # Gr 185 \271 M-9 double right tick # Gu 202 \312 M-J double up tick # Gv 186 \272 M-: double vertical line # # The compiler will translate the single-line caps and discard the others # (via IGNORE aliases further down). We don't want to do normal pad # translation on these, they're often single-character printable ASCII # strings that happen to be numerics. There's awk code in parametrized.sh # that detects the acs_ prefix and uses it to suppress pad translation. # These terminfo names are invented. # acs_ulcorner OTG2 str G2 - - ----- single upper left acs_llcorner OTG3 str G3 - - ----- single lower left acs_urcorner OTG1 str G1 - - ----- single upper right acs_lrcorner OTG4 str G4 - - ----- single lower right acs_ltee OTGR str GR - - ----- tee pointing right acs_rtee OTGL str GL - - ----- tee pointing left acs_btee OTGU str GU - - ----- tee pointing up acs_ttee OTGD str GD - - ----- tee pointing down acs_hline OTGH str GH - - ----- single horizontal line acs_vline OTGV str GV - - ----- single vertical line acs_plus OTGC str GC - - ----- single intersection # ############################################################################# # # TERMINFO EXTENSION CAPABILITIES # # This section is almost all comments. What it's mainly for is to describe # what capabilities need to be squeezed out to get down to the XSI Curses # standard set. They are flagged with K. # # HP extensions # # These extensions follow ptr_non (replacing everything after it) in HP # terminfo files. Except for memory_lock and memory_unlock, they are # functionally identical to SVr4 extensions, but they make the binary format # different. Grrr.... # memory_lock meml str ml - - ----K lock memory above cursor memory_unlock memu str mu - - ----K unlock memory #plab_norm pln str pn - - ----- program label #1 to show string #2 #label_on smln str LO - - ----- turn on soft labels #label_off rmln str LF - - ----- turn off soft labels #key_f11 kf11 str F1 - - ----- F11 function key #key_f12 kf12 str F2 - - ----- F12 function key #key_f13 kf13 str F3 - - ----- F13 function key #key_f14 kf14 str F4 - - ----- F14 function key #key_f15 kf15 str F5 - - ----- F15 function key #key_f16 kf16 str F6 - - ----- F16 function key #key_f17 kf17 str F7 - - ----- F17 function key #key_f18 kf18 str F8 - - ----- F18 function key #key_f19 kf19 str F9 - - ----- F19 function key #key_f20 kf20 str FA - - ----- F20 function key #key_f21 kf21 str FB - - ----- F21 function key #key_f22 kf22 str FC - - ----- F22 function key #key_f23 kf23 str FD - - ----- F23 function key #key_f24 kf24 str FE - - ----- F24 function key #key_f25 kf25 str FF - - ----- F25 function key #key_f26 kf26 str FG - - ----- F26 function key #key_f27 kf27 str FH - - ----- F27 function key #key_f28 kf28 str FI - - ----- F28 function key #key_f29 kf29 str FJ - - ----- F29 function key #key_f30 kf30 str FK - - ----- F30 function key #key_f31 kf31 str FL - - ----- F31 function key #key_f32 kf32 str FM - - ----- F32 function key #key_f33 kf33 str FN - - ----- F33 function key #key_f34 kf34 str FO - - ----- F34 function key #key_f35 kf35 str FP - - ----- F35 function key #key_f36 kf36 str FQ - - ----- F36 function key #key_f37 kf37 str FR - - ----- F37 function key #key_f38 kf38 str FS - - ----- F38 function key #key_f39 kf39 str FT - - ----- F39 function key #key_f40 kf40 str FU - - ----- F40 function key #key_f41 kf41 str FV - - ----- F41 function key #key_f42 kf42 str FW - - ----- F42 function key #key_f43 kf43 str FX - - ----- F43 function key #key_f44 kf44 str FY - - ----- F44 function key #key_f45 kf45 str FZ - - ----- F45 function key #key_f46 kf46 str Fa - - ----- F46 function key #key_f47 kf47 str Fb - - ----- F47 function key #key_f48 kf48 str Fc - - ----- F48 function key #key_f49 kf49 str Fd - - ----- F49 function key #key_f50 kf50 str Fe - - ----- F50 function key #key_f51 kf51 str Ff - - ----- F51 function key #key_f52 kf52 str Fg - - ----- F52 function key #key_f53 kf53 str Fh - - ----- F53 function key #key_f54 kf54 str Fi - - ----- F54 function key #key_f55 kf55 str Fj - - ----- F55 function key #key_f56 kf56 str Fk - - ----- F56 function key #key_f57 kf57 str Fl - - ----- F57 function key #key_f58 kf58 str Fm - - ----- F58 function key #key_f59 kf59 str Fn - - ----- F59 function key #key_f60 kf60 str Fo - - ----- F60 function key #key_f61 kf61 str Fp - - ----- F61 function key #key_f62 kf62 str Fq - - ----- F62 function key #key_f63 kf63 str Fr - - ----- F63 function key # # IBM extensions # # These extensions follow ptr_non (replacing everything after it) in IBM # terminfo files. # # The places in the box[12] capabilities correspond to acsc characters, here is # the mapping: # # box1[0] = ACS_ULCORNER # box1[1] = ACS_HLINE # box1[2] = ACS_URCORNER # box1[3] = ACS_VLINE # box1[4] = ACS_LRCORNER # box1[5] = ACS_LLCORNER # box1[6] = ACS_TTEE # box1[7] = ACS_RTEE # box1[8] = ACS_BTEE # box1[9] = ACS_LTEE # box1[10] = ACS_PLUS # # The box2 characters are the double-line versions of these forms graphics. # box_chars_1 box1 str bx - - ----K box characters primary set #box_chars_2 box2 str by - - ----K box characters secondary set #box_attr_1 batt1 str Bx - - ----K attributes for box1 #box_attr_2 batt2 str By - - ----K attributes for box2 #color_bg_0 colb0 str d0 - - ----K background color 0 #color_bg_1 colb1 str d1 - - ----K background color 1 #color_bg_2 colb2 str d2 - - ----K background color 2 #color_bg_3 colb3 str d3 - - ----K background color 3 #color_bg_4 colb4 str d4 - - ----K background color 4 #color_bg_5 colb5 str d5 - - ----K background color 5 #color_bg_6 colb6 str d6 - - ----K background color 6 #color_bg_7 colb7 str d7 - - ----K background color 7 #color_fg_0 colf0 str c0 - - ----K foreground color 0 #color_fg_1 colf1 str c1 - - ----K foreground color 1 #color_fg_2 colf2 str c2 - - ----K foreground color 2 #color_fg_3 colf3 str c3 - - ----K foreground color 3 #color_fg_4 colf4 str c4 - - ----K foreground color 4 #color_fg_5 colf5 str c5 - - ----K foreground color 5 #color_fg_6 colf6 str c6 - - ----K foreground color 6 #color_fg_7 colf7 str c7 - - ----K foreground color 7 #font_0 font0 str f0 - - ----- select font 0 #font_1 font1 str f1 - - ----- select font 1 #font_2 font2 str f2 - - ----- select font 2 #font_3 font3 str f3 - - ----- select font 3 #font_4 font4 str f4 - - ----K select font 4 #font_5 font5 str f5 - - ----K select font 5 #font_6 font6 str f6 - - ----K select font 6 #font_7 font7 str f7 - - ----K select font 7 #key_back_tab kbtab str k0 - - ----- backtab key #key_do kdo str ki - - ----K do request key #key_command kcmd str kd - - ----K command-request key #key_command_pane kcpn str kW - - ----K command-pane key #key_end kend str kw - - ----- end key #key_help khlp str kq - - ----- help key #key_newline knl str nl - - ----K newline key #key_next_pane knpn str kv - - ----K next-pane key #key_prev_cmd kppn str kp - - ----K previous-command key #key_prev_pane kppn str kV - - ----K previous-pane key #key_quit kquit str kQ - - ----K quit key #key_select ksel str kU - - ----- select key #key_scroll_left kscl str kz - - ----K scroll left #key_scroll_right kscr str kZ - - ----K scroll right #key_tab ktab str ko - - ----K tab key #key_smap_in1 kmpf1 str Kv - - ----K special mapped key 1 input #key_smap_out1 kmpt1 str KV - - ----K special mapped key 1 output #key_smap_in2 kmpf2 str Kw - - ----K special mapped key 2 input #key_smap_out2 kmpt2 str KW - - ----K special mapped key 2 output #key_smap_in3 kmpf3 str Kx - - ----K special mapped key 3 input #key_smap_out3 kmpt3 str KX - - ----K special mapped key 3 output #key_smap_in4 kmpf4 str Ky - - ----K special mapped key 4 input #key_smap_out4 kmpt4 str KY - - ----K special mapped key 4 output #key_smap_in5 kmpf5 str Kz - - ----K special mapped key 5 input #key_smap_out5 kmpt5 str KZ - - ----K special mapped key 5 output #appl_defined_str apstr str za - - ----K application-defined string # The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in # the IBM manual pages, so the cap name strings are guesses. The terminfo # names are almost certainly right, the termcap ones almost certainly wrong. #key_smap_in6 kmpf6 str k! - - ----K special mapped key 6 input #key_smap_out6 kmpt6 str K@ - - ----K special mapped key 6 output #key_smap_in7 kmpf7 str k# - - ----K special mapped key 7 input #key_smap_out7 kmpt7 str K$ - - ----K special mapped key 7 output #key_smap_in8 kmpf8 str k% - - ----K special mapped key 8 input #key_smap_out8 kmpt8 str K^ - - ----K special mapped key 8 output #key_smap_in9 kmpf9 str k& - - ----K special mapped key 9 input #key_smap_out9 kmpt9 str K* - - ----K special mapped key 9 output # Undocumented capabilities end here #key_sf1 ksf1 str S1 - - ----K special function key 1 #key_sf2 ksf2 str S2 - - ----K special function key 2 #key_sf3 ksf3 str S3 - - ----K special function key 3 #key_sf4 ksf4 str S4 - - ----K special function key 4 #key_sf5 ksf5 str S5 - - ----K special function key 5 #key_sf6 ksf6 str S6 - - ----K special function key 6 #key_sf7 ksf7 str S7 - - ----K special function key 7 #key_sf8 ksf8 str S8 - - ----K special function key 8 #key_sf9 ksf9 str S9 - - ----K special function key 9 #key_sf10 ksf10 str SA - - ----K special function key 10 # AIX version 3 documents different codes for F11, F12 and does not mention # F13-F64. AIX version 4 uses the same naming for F0-F63 as above. #key_f11 kf11 str k< - - ----- function key 11 #key_f12 kf12 str k> - - ----- function key 12 # Undocumented capabilities end here. #key_action kact str kJ - - ----K sent by action key # The IBM docs say these capabilities are for table-drawing, and are # valid only for aixterm descriptions. #enter_topline_mode topl str tp - - ----K start top-line mode #enter_bottom_mode btml str bm - - ----K start bottom-line mode #enter_rvert_mode rvert str rv - - ----K start right-vertical mode #enter_lvert_mode lvert str lv - - ----K start left-vertical mode # ############################################################################# # # ALIAS DECLARATIONS # # Here we set up aliases for translating extensions into standard terminfo. # #---------------------------------- Termcap aliases ------------------------- # # BSD aliases: # # This is a common error in many termcap files. We'll get notified during # translation when this (or any other alias) fires. # capalias sb sr BSD scroll text down # # AT&T extensions: # # The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of # nonstandard capabilities. Its signature is the KM capability, used to name # some sort of keymap file. EE, BO, CI, CV, XS, DS, FL and FE are in this # set. Comments in the original, and a little cross-checking with other AT&T # documentation, seem to establish the following mappings: # capalias BO mr AT&T enter_reverse_mode capalias CI vi AT&T cursor_invisible capalias CV ve AT&T cursor_normal capalias DS mh AT&T enter_dim_mode #capalias EE me AT&T exit_attribute_mode capalias FE LF AT&T label_on capalias FL LO AT&T label_off capalias XS mk AT&T enter_secure_mode # # We comment out EE because the conflicting XENIX EE is more common in # old entries. # # XENIX extensions: # # These are the ones we know how to translate directly: # capalias EE mh XENIX exit_attribute_mode capalias GE ae XENIX exit_alt_charset_mode capalias GS as XENIX enter_alt_charset_mode capalias CF vi XENIX cursor_invis capalias CO ve XENIX cursor_normal capalias EN @7 XENIX key_end capalias HM kh XENIX key_home capalias LD kL XENIX key_dl capalias PD kN XENIX key_npage capalias PN po XENIX prtr_off capalias PS pf XENIX prtr_on capalias PU kP XENIX key_ppage capalias RT @8 XENIX kent capalias UP ku XENIX kcuu1 capalias G6 IGNORE XENIX double-ACS_ULCORNER capalias G7 IGNORE XENIX double-ACS_LLCORNER capalias G5 IGNORE XENIX double-ACS_URCORNER capalias G8 IGNORE XENIX double-ACS_LRCORNER capalias Gr IGNORE XENIX double-ACS_LTEE capalias Gr IGNORE XENIX double-ACS_RTEE capalias Gu IGNORE XENIX double-ACS_BTEE capalias Gd IGNORE XENIX double ACS_TTEE capalias Gh IGNORE XENIX double-ACS_HLINE capalias Gv IGNORE XENIX double-ACS_VLINE capalias Gc IGNORE XENIX double-ACS_PLUS capalias GG IGNORE XENIX acs-glitch # # IBM extensions: # capalias kq %1 IBM key_help # # Iris extensions: # capalias HS mh IRIS enter_dim_mode # # Tektronix extensions: # capalias KA k; Tek key_f10 capalias KB F1 Tek key_f11 capalias KC F2 Tek key_f12 capalias KD F3 Tek key_f13 capalias KE F4 Tek key_f14 capalias KF F5 Tek key_f15 capalias BC Sb Tek set_background capalias FC Sf Tek set_foreground # # There are also the following: # # XENIX XENIX variable name name clash with terminfo? # ----- ------------------- ------------------------- # CL key_char_left # CR key_char_right # CW key_change_window # HP ?? # LF key_linefeed label_off # NU key_next_unlocked_cell # PL ?? # PR ?? # RC key_recalc remove_clock # RF key_toggle_ref req_for_input # WL key_word_left # WR key_word_right # # If you know what any of the question-marked ones mean, please tell us. # #--------------------------------- Terminfo aliases ------------------------ # # IBM extensions: # infoalias font0 s0ds IBM set0_des_seq infoalias font1 s1ds IBM set1_des_seq infoalias font2 s2ds IBM set2_des_seq infoalias font3 s3ds IBM set3_des_seq infoalias kbtab kcbt IBM key_backtab infoalias ksel kslt IBM key_select # # Some others are identical to SVr4/XPG4 capabilities, in particular: # kcmd, kend, khlp, and kf11...kf63. # ############################################################################# ncurses-6.0-20160213/include/ncurses_dll.h.in0000644000175100001440000001030612367254154017203 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* $Id: ncurses_dll.h.in,v 1.9 2014/08/02 21:30:20 tom Exp $ */ #ifndef NCURSES_DLL_H_incl #define NCURSES_DLL_H_incl 1 /* 2014-08-02 workaround for broken MinGW compiler. * Oddly, only TRACE is mapped to trace - the other -D's are okay. * suggest TDM as an alternative. */ #if defined(__MINGW64__) #elif defined(__MINGW32__) #if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8) #ifdef trace #undef trace #define TRACE #endif #endif /* broken compiler */ #endif /* MingW */ /* * For reentrant code, we map the various global variables into SCREEN by * using functions to access them. */ #define NCURSES_PUBLIC_VAR(name) @NCURSES_WRAP_PREFIX@##name #define NCURSES_WRAPPED_VAR(type,name) extern type NCURSES_PUBLIC_VAR(name)(void) /* no longer needed on cygwin or mingw, thanks to auto-import */ /* but this structure may be useful at some point for an MSVC build */ /* so, for now unconditionally define the important flags */ /* "the right way" for proper static and dll+auto-import behavior */ #undef NCURSES_DLL #define NCURSES_STATIC #if defined(__CYGWIN__) || defined(__MINGW32__) # if defined(NCURSES_DLL) # if defined(NCURSES_STATIC) # undef NCURSES_STATIC # endif # endif # undef NCURSES_IMPEXP # undef NCURSES_API # undef NCURSES_EXPORT # undef NCURSES_EXPORT_VAR # if defined(NCURSES_DLL) /* building a DLL */ # define NCURSES_IMPEXP __declspec(dllexport) # elif defined(NCURSES_STATIC) /* building or linking to a static library */ # define NCURSES_IMPEXP /* nothing */ # else /* linking to the DLL */ # define NCURSES_IMPEXP __declspec(dllimport) # endif # define NCURSES_API __cdecl # define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API # define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type #endif /* Take care of non-cygwin platforms */ #if !defined(NCURSES_IMPEXP) # define NCURSES_IMPEXP /* nothing */ #endif #if !defined(NCURSES_API) # define NCURSES_API /* nothing */ #endif #if !defined(NCURSES_EXPORT) # define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API #endif #if !defined(NCURSES_EXPORT_VAR) # define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type #endif #endif /* NCURSES_DLL_H_incl */ ncurses-6.0-20160213/include/hashed_db.h0000644000175100001440000000667712322340406016165 0ustar tomusers/**************************************************************************** * Copyright (c) 2006 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2006 * ****************************************************************************/ /* * $Id: hashed_db.h,v 1.6 2014/04/12 22:41:10 tom Exp $ */ #ifndef HASHED_DB_H #define HASHED_DB_H 1 #include #if USE_HASHED_DB #define DB_DBM_HSEARCH 0 /* quiet gcc -Wundef with db6 */ #include #ifndef DBN_SUFFIX #define DBM_SUFFIX ".db" #endif #ifdef DB_VERSION_MAJOR #define HASHED_DB_API DB_VERSION_MAJOR #else #define HASHED_DB_API 1 /* e.g., db 1.8.5 */ #endif extern NCURSES_EXPORT(DB *) _nc_db_open(const char * /* path */, bool /* modify */); extern NCURSES_EXPORT(bool) _nc_db_have_data(DBT * /* key */, DBT * /* data */, char ** /* buffer */, int * /* size */); extern NCURSES_EXPORT(bool) _nc_db_have_index(DBT * /* key */, DBT * /* data */, char ** /* buffer */, int * /* size */); extern NCURSES_EXPORT(int) _nc_db_close(DB * /* db */); extern NCURSES_EXPORT(int) _nc_db_first(DB * /* db */, DBT * /* key */, DBT * /* data */); extern NCURSES_EXPORT(int) _nc_db_next(DB * /* db */, DBT * /* key */, DBT * /* data */); extern NCURSES_EXPORT(int) _nc_db_get(DB * /* db */, DBT * /* key */, DBT * /* data */); extern NCURSES_EXPORT(int) _nc_db_put(DB * /* db */, DBT * /* key */, DBT * /* data */); #endif #endif /* HASHED_DB_H */ ncurses-6.0-20160213/include/nc_termios.h0000644000175100001440000001145112331243032016405 0ustar tomusers/**************************************************************************** * Copyright (c) 2011,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2011 * ****************************************************************************/ /* $Id: nc_termios.h,v 1.3 2014/05/03 19:40:10 juergen Exp $ */ #ifndef NC_TERMIOS_included #define NC_TERMIOS_included 1 #if HAVE_TERMIOS_H && HAVE_TCGETATTR #else /* !HAVE_TERMIOS_H */ #if HAVE_TERMIO_H /* Add definitions to make termio look like termios. * But ifdef it, since there are some implementations * that try to do this for us in a fake . */ #ifndef TCSADRAIN #define TCSADRAIN TCSETAW #endif #ifndef TCSAFLUSH #define TCSAFLUSH TCSETAF #endif #ifndef tcsetattr #define tcsetattr(fd, cmd, arg) ioctl(fd, cmd, arg) #endif #ifndef tcgetattr #define tcgetattr(fd, arg) ioctl(fd, TCGETA, arg) #endif #ifndef cfgetospeed #define cfgetospeed(t) ((t)->c_cflag & CBAUD) #endif #ifndef TCIFLUSH #define TCIFLUSH 0 #endif #ifndef tcflush #define tcflush(fd, arg) ioctl(fd, TCFLSH, arg) #endif #else /* !HAVE_TERMIO_H */ #if __MINGW32__ /* lflag bits */ #define ISIG 0x0001 #define ICANON 0x0002 #define ECHO 0x0004 #define ECHOE 0x0008 #define ECHOK 0x0010 #define ECHONL 0x0020 #define NOFLSH 0x0040 #define IEXTEN 0x0100 #define VEOF 4 #define VERASE 5 #define VINTR 6 #define VKILL 7 #define VMIN 9 #define VQUIT 10 #define VTIME 16 /* iflag bits */ #define IGNBRK 0x00001 #define BRKINT 0x00002 #define IGNPAR 0x00004 #define INPCK 0x00010 #define ISTRIP 0x00020 #define INLCR 0x00040 #define IGNCR 0x00080 #define ICRNL 0x00100 #define IXON 0x00400 #define IXOFF 0x01000 #define PARMRK 0x10000 /* oflag bits */ #define OPOST 0x00001 /* cflag bits */ #define CBAUD 0x0100f #define B0 0x00000 #define B50 0x00001 #define B75 0x00002 #define B110 0x00003 #define B134 0x00004 #define B150 0x00005 #define B200 0x00006 #define B300 0x00007 #define B600 0x00008 #define B1200 0x00009 #define B1800 0x0000a #define B2400 0x0000b #define B4800 0x0000c #define B9600 0x0000d #define CSIZE 0x00030 #define CS8 0x00030 #define CSTOPB 0x00040 #define CREAD 0x00080 #define PARENB 0x00100 #define PARODD 0x00200 #define HUPCL 0x00400 #define CLOCAL 0x00800 #define TCIFLUSH 0 #define TCSADRAIN 3 #ifndef cfgetospeed #define cfgetospeed(t) ((t)->c_cflag & CBAUD) #endif #ifndef tcsetattr #define tcsetattr(fd, opt, arg) _nc_mingw_tcsetattr(fd, opt, arg) #endif #ifndef tcgetattr #define tcgetattr(fd, arg) _nc_mingw_tcgetattr(fd, arg) #endif #ifndef tcflush #define tcflush(fd, queue) _nc_mingw_tcflush(fd, queue) #endif #undef ttyname #define ttyname(fd) NULL #endif /* __MINGW32__ */ #endif /* HAVE_TERMIO_H */ #endif /* HAVE_TERMIOS_H */ #endif /* NC_TERMIOS_included */ ncurses-6.0-20160213/include/Caps.hpux110000644000175100001440000020143112517201603016033 0ustar tomusers############################################################################## # Copyright (c) 2002-2011,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas Dickey # # $Id: Caps.hpux11,v 1.7 2015/04/26 15:25:55 tom Exp $ # # This is an adaptation of ncurses' termcap/terminfo capability table, which # is designed to align with HPUX 11.x's terminfo. # # This table is used to generate initializers for tables that drive tic, # infocmp, and the library compilation code used to support the termcap # compatibility hack. It is also used to generate the tabular portion of the # terminfo(5) man page; lines beginning with `#%' are passed through to become # the terminfo table. # # This file has three major sections; a standard-capabilities table, two # extension-capability tables, and a section of aliases declarations. # The first two have the same format, as follows: # # FILE FORMAT # # Column 1: terminfo variable name # Column 2: terminfo capability name # Column 3: capability type (boolean, numeric, or string) # Column 4: termcap capability name # Column 5: KEY_xxx name, if any, `-' otherwise # Column 6: value for KEY_xxx name, if any, `-' otherwise # Column 7: Lead with `Y' if capability should be emitted in termcap # translations, `-' otherwise # Column 8: capability description # # The codes following [Y-] in column 7 describe the versions of termcap which # use the given capability. This information is not used by the curses library # proper; rather, it's there to help the terminfo maintainer avoid emitting # termcap entry translations that are more than 1023 bytes long (and tank a # lot of old termcap-using programs). The codes read as follows: # B = mentioned in the BSD man page for 4.4BSD curses # C = used by the 4.4BSD curses library # G = mentioned in the documentation for GNU termcap # E = used by GNU Emacs # K = remove this terminfo capability when translating to standard format # The important codes are C and E. A cap with C or E should be preserved in # translation if possible. The problem is that preserving all such caps may # lead to some termcap translations being too long. The termcap maintainer # has a bit of a juggling act to do...potential problem cases are marked with # an asterisk (*). # # The aliases section has the following format: # # Column 1: either `capalias' or `infoalias' # Column 2: name to be aliased # Column 3: what name it should translate to. The name IGNORE means it # should be discarded with a warning message. # Column 4: name of the extension set (used for compiler warning messages) # Column 5: capability description (usually an associated terminfo variable) # # HANDLING TERMCAP AND TERMINFO EXTENSIONS # # There are basically five different ways to handle termcap and terminfo # extensions: # # 1. Don't list the capname here, or list it but comment it out (the latter # is preferable; someone might want to handle it in the future). If you do # this, the capability will be treated as unknown and raise a warning from # the compiler. # # 2. Alias it. This is appropriate if the capability has the same meaning # as an already-supported one. The compiler will handle aliasing, emitting # an appropriate informational message whenever an alias fires. # # 3. List it in the standard table. You almost certainly do *not* want # to do this -- the capabilities in that one, and their order, have been # carefully chosen to be SVr4-binary-compatible when they're written out # as a terminfo object, and breaking this would be bad. It's up to the ncurses # library what to do with the terminfo data after it's read in. # # 4. List it in the aliases table with an IGNORE target field. If you # do this, the capability will be ignored on input (though the user will # get a warning message about it). # # 5. List it in the extensions table. If you do this, the compiler will # silently accept the capability, but the curses library proper will never # see it (because it won't be written out as part of the terminfo object # format). It's up to you what you have the compiler do with it. # # There are two opposite reasons to choose option 5. One is when you want # to eat the capability silently and discard it when doing translations # to terminfo with tic -I. Some very old obsolete BSD caps like :kn: are # in this class. Nothing will ever use them again. # # More usually, you want the compiler to try to deduce something from the # capability value that it can use to translate it into your output format. # You'll need to write custom code, probably in postprocess_termcap() or # postprocess_terminfo(), to handle the translation. # # CONTROLLING ENTRY LENGTH # # Notes on specific elisions made to fit translations within 1023 bytes: # # Machines with IBM PC-like keyboards want to be able to define the following # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap- # only environments for End or Home-Down), key_dc, and key_ic. This is also # the set of keys the `joe' editor will be upset if it can't see. So don't # trim those out of the set to be translated to termcap, or various users of # the termcap file will become irate. # # It might look tempting to leave those long init strings out of translations. # We can't do it (yet); 4.4BSD tput and tset use them. # # We retain the sgr capability in translation in spite of the fact that neither # 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are # hard to understand without it, and (b) the entries in which it is long tend # to be older types that don't use up a lot of string space on function keys. # The tic(1) translation code will complain and elide it if it makes a critical # difference (there is special code in tic to recognize this situation). # # Yes, BSD tset(1) uses hpa. We elide hpa/vpa anyway because the motion # optimizer in BSD curses didn't use them. This omission seems to be the # single most effective one, it shortened the resolved length of all thirteen # problem entries in the 9.9.0 version of the terminfo master below critical. # # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap # translations go back over critical if we do this. As 4.4BSD curses fades # into history and GNU termcap's application base shrinks towards being GNU # Emacs only, we'll probably elide out some BSD-only capabilities in order # to buy space for non-essentials Emacs is still using. Capabilities high # on that hit list: rc, sc, uc. # ############################################################################# # # STANDARD CAPABILITIES # #%The following is a complete table of the capabilities included in a #%terminfo description block and available to terminfo-using code. In each #%line of the table, #% #%The \fBvariable\fR is the name by which the programmer (at the terminfo level) #%accesses the capability. #% #%The \fBcapname\fR is the short name used in the text of the database, #%and is used by a person updating the database. #%Whenever possible, capnames are chosen to be the same as or similar to #%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses #%identical or very similar names). Semantics are also intended to match #%those of the specification. #% #%The termcap code is the old #%.B termcap #%capability name (some capabilities are new, and have names which termcap #%did not originate). #%.P #%Capability names have no hard length limit, but an informal limit of 5 #%characters has been adopted to keep them short and to allow the tabs in #%the source file #%.B Caps #%to line up nicely. #% #%Finally, the description field attempts to convey the semantics of the #%capability. You may find some codes in the description field: #%.TP #%(P) #%indicates that padding may be specified #%.TP #%#[1-9] #%in the description field indicates that the string is passed through tparm with #%parms as given (#\fIi\fP). #%.TP #%(P*) #%indicates that padding may vary in proportion to the number of #%lines affected #%.TP #%(#\d\fIi\fP\u) #%indicates the \fIi\fP\uth\d parameter. #% #%.PP #% These are the boolean capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBBooleans name Code\fR auto_left_margin bw bool bw - - YB-G- cub1 wraps from column 0 to last column auto_right_margin am bool am - - YBCGE terminal has automatic margins no_esc_ctlc xsb bool xb - - YBCG- beehive (f1=escape, f2=ctrl C) ceol_standout_glitch xhp bool xs - - YBCGE standout not erased by overwriting (hp) eat_newline_glitch xenl bool xn - - YBCGE newline ignored after 80 cols (concept) erase_overstrike eo bool eo - - YBCG- can erase overstrikes with a blank generic_type gn bool gn - - YB-G- generic line type hard_copy hc bool hc - - YBCG- hardcopy terminal has_meta_key km bool km - - YB-GE Has a meta key (i.e., sets 8th-bit) has_status_line hs bool hs - - YB-G- has extra status line insert_null_glitch in bool in - - YBCGE insert mode distinguishes nulls memory_above da bool da - - YBCG- display may be retained above the screen memory_below db bool db - - YB-GE display may be retained below the screen move_insert_mode mir bool mi - - YBCGE safe to move while in insert mode move_standout_mode msgr bool ms - - YBCGE safe to move while in standout mode over_strike os bool os - - YBCG- terminal can overstrike status_line_esc_ok eslok bool es - - YB-G- escape can be used on the status line dest_tabs_magic_smso xt bool xt - - YBCGE tabs destructive, magic so char (t1061) tilde_glitch hz bool hz - - YB-GE cannot print ~'s (Hazeltine) transparent_underline ul bool ul - - YBCGE underline character overstrikes xon_xoff xon bool xo - - YB--- terminal uses xon/xoff handshaking # end booleans for HPUX 9, 10 (non-color curses) needs_xon_xoff nxon bool nx - - ----- padding will not work, xon/xoff required prtr_silent mc5i bool 5i - - ----- printer will not echo on screen hard_cursor chts bool HC - - ----- cursor is hard to see non_rev_rmcup nrrmc bool NR - - ----- smcup does not reverse rmcup no_pad_char npc bool NP - - ----- pad character does not exist non_dest_scroll_region ndscr bool ND - - ----- scrolling region is non-destructive can_change ccc bool cc - - ----- terminal can re-define existing colors back_color_erase bce bool ut - - ----- screen erased with background color hue_lightness_saturation hls bool hl - - ----- terminal uses only HLS color notation (Tektronix) col_addr_glitch xhpa bool YA - - ----- only positive motion for hpa/mhpa caps cr_cancels_micro_mode crxm bool YB - - ----- using cr turns off micro mode has_print_wheel daisy bool YC - - ----- printer needs operator to change character set row_addr_glitch xvpa bool YD - - ----- only positive motion for vpa/mvpa caps semi_auto_right_margin sam bool YE - - ----- printing in last column causes cr cpi_changes_res cpix bool YF - - ----- changing character pitch changes resolution lpi_changes_res lpix bool YG - - ----- changing line pitch changes resolution #%.TE #%.ad #% #%These are the numeric capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBNumeric name Code\fR columns cols num co - - YBCGE number of columns in a line init_tabs it num it - - YB-G- tabs initially every # spaces lines lines num li - - YBCGE number of lines on screen or page lines_of_memory lm num lm - - YB-G- lines of memory if > line. 0 means varies magic_cookie_glitch xmc num sg - - YBCGE number of blank characters left by smso or rmso padding_baud_rate pb num pb - - YB-GE lowest baud rate where padding needed virtual_terminal vt num vt - - YB--- virtual terminal number (CB/unix) width_status_line wsl num ws - - YB-G- number of columns in status line # end numbers for HPUX 9, 10 (non-color curses) num_labels nlab num Nl - - ----- number of labels on screen label_height lh num lh - - ----- rows in each label label_width lw num lw - - ----- columns in each label max_attributes ma num ma - - YBC-- maximum combined attributes terminal can handle maximum_windows wnum num MW - - ----- maximum number of definable windows # These came in with SVr4's color support max_colors colors num Co - - ----- maximum number of colors on screen max_pairs pairs num pa - - ----- maximum number of color-pairs on the screen no_color_video ncv num NC - - ----- video attributes that cannot be used with colors #%.TE #%.ad #% #%The following numeric capabilities are present in the SVr4.0 term structure, #%but are not yet documented in the man page. They came in with SVr4's #%printer support. #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBNumeric name Code\fR buffer_capacity bufsz num Ya - - ----- numbers of bytes buffered before printing dot_vert_spacing spinv num Yb - - ----- spacing of pins vertically in pins per inch dot_horz_spacing spinh num Yc - - ----- spacing of dots horizontally in dots per inch max_micro_address maddr num Yd - - ----- maximum value in micro_..._address max_micro_jump mjump num Ye - - ----- maximum value in parm_..._micro micro_col_size mcs num Yf - - ----- character step size when in micro mode micro_line_size mls num Yg - - ----- line step size when in micro mode number_of_pins npins num Yh - - ----- numbers of pins in print-head output_res_char orc num Yi - - ----- horizontal resolution in units per line output_res_line orl num Yj - - ----- vertical resolution in units per line output_res_horz_inch orhi num Yk - - ----- horizontal resolution in units per inch output_res_vert_inch orvi num Yl - - ----- vertical resolution in units per inch print_rate cps num Ym - - ----- print rate in characters per second wide_char_size widcs num Yn - - ----- character step size when in double wide mode buttons btns num BT - - ----- number of buttons on mouse bit_image_entwining bitwin num Yo - - ----- number of passes for each bit-image row bit_image_type bitype num Yp - - ----- type of bit-image device #%.TE #%.ad #% #%These are the string capabilities: #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR back_tab cbt str bt - - YBCGE back tab (P) bell bel str bl - - YB-GE audible signal (bell) (P) carriage_return cr str cr - - YBCGE carriage return (P*) (P*) change_scroll_region csr str cs - - YBCGE change region to line #1 to line #2 (P) clear_all_tabs tbc str ct - - YB-G- clear all tab stops (P) clear_screen clear str cl - - YBCGE clear screen and home cursor (P*) clr_eol el str ce - - YBCGE clear to end of line (P) clr_eos ed str cd - - YBCGE clear to end of screen (P*) column_address hpa str ch - - -B-GE* horizontal position #1, absolute (P) command_character cmdch str CC - - YB-G- terminal settable cmd character in prototype !? cursor_address cup str cm - - YBCGE move to row #1 columns #2 cursor_down cud1 str do - - YBCGE down one line cursor_home home str ho - - YBCGE home cursor (if no cup) cursor_invisible civis str vi - - YB-G- make cursor invisible cursor_left cub1 str le - - YBCGE move left one space cursor_mem_address mrcup str CM - - YB-G- memory relative cursor addressing, move to row #1 columns #2 cursor_normal cnorm str ve - - YBCGE make cursor appear normal (undo civis/cvvis) cursor_right cuf1 str nd - - YBCGE non-destructive space (move right one space) cursor_to_ll ll str ll - - YBCGE last line, first column (if no cup) cursor_up cuu1 str up - - YBCGE up one line cursor_visible cvvis str vs - - YBCGE make cursor very visible delete_character dch1 str dc - - YBCGE delete character (P*) delete_line dl1 str dl - - YBCGE delete line (P*) dis_status_line dsl str ds - - YB-G- disable status line down_half_line hd str hd - - YB-G- half a line down enter_alt_charset_mode smacs str as - - YB-G- start alternate character set (P) enter_blink_mode blink str mb - - YB-G- turn on blinking enter_bold_mode bold str md - - YB-G- turn on bold (extra bright) mode enter_ca_mode smcup str ti - - YBCGE string to start programs using cup enter_delete_mode smdc str dm - - YBCGE enter delete mode enter_dim_mode dim str mh - - YB-G- turn on half-bright mode enter_insert_mode smir str im - - YBCGE enter insert mode enter_secure_mode invis str mk - - -B-G-* turn on blank mode (characters invisible) enter_protected_mode prot str mp - - -B-G-* turn on protected mode enter_reverse_mode rev str mr - - YB-G- turn on reverse video mode enter_standout_mode smso str so - - YBCGE begin standout mode enter_underline_mode smul str us - - YBCGE begin underline mode erase_chars ech str ec - - YB-G- erase #1 characters (P) exit_alt_charset_mode rmacs str ae - - YB-G- end alternate character set (P) exit_attribute_mode sgr0 str me - - YB-GE turn off all attributes exit_ca_mode rmcup str te - - YBCGE strings to end programs using cup exit_delete_mode rmdc str ed - - YBCGE end delete mode exit_insert_mode rmir str ei - - YBCGE exit insert mode exit_standout_mode rmso str se - - YBCGE exit standout mode exit_underline_mode rmul str ue - - YBCGE exit underline mode flash_screen flash str vb - - YBCGE visible bell (may not move cursor) form_feed ff str ff - - YB-G- hardcopy terminal page eject (P*) from_status_line fsl str fs - - YB-G- return from status line init_1string is1 str i1 - - YB-G- initialization string init_2string is2 str is - - YB-G- initialization string init_3string is3 str i3 - - YB-G- initialization string init_file if str if - - YB-G- name of initialization file insert_character ich1 str ic - - YBCGE insert character (P) insert_line il1 str al - - YBCGE insert line (P*) insert_padding ip str ip - - YBCGE insert padding after inserted character key_backspace kbs str kb KEY_BACKSPACE 0407 YB-G- backspace key key_catab ktbc str ka KEY_CATAB 0526 -B-G-* clear-all-tabs key key_clear kclr str kC KEY_CLEAR 0515 -B-G-* clear-screen or erase key key_ctab kctab str kt KEY_CTAB 0525 -B-G-* clear-tab key key_dc kdch1 str kD KEY_DC 0512 YB-G- delete-character key key_dl kdl1 str kL KEY_DL 0510 -B-G-* delete-line key key_down kcud1 str kd KEY_DOWN 0402 YBCGE down-arrow key key_eic krmir str kM KEY_EIC 0514 -B-G-* sent by rmir or smir in insert mode key_eol kel str kE KEY_EOL 0517 -B-G-* clear-to-end-of-line key key_eos ked str kS KEY_EOS 0516 -B-G-* clear-to-end-of-screen key key_f0 kf0 str k0 KEY_F(0) 0410 YBCGE F0 function key key_f1 kf1 str k1 KEY_F(1) - YBCGE F1 function key key_f10 kf10 str k; KEY_F(10) - ----E F10 function key key_f2 kf2 str k2 KEY_F(2) - YBCGE F2 function key key_f3 kf3 str k3 KEY_F(3) - YBCGE F3 function key key_f4 kf4 str k4 KEY_F(4) - YBCGE F4 function key key_f5 kf5 str k5 KEY_F(5) - YBCGE F5 function key key_f6 kf6 str k6 KEY_F(6) - YBCGE F6 function key key_f7 kf7 str k7 KEY_F(7) - YBCGE F7 function key key_f8 kf8 str k8 KEY_F(8) - YBCGE F8 function key key_f9 kf9 str k9 KEY_F(9) - YBCGE F9 function key key_home khome str kh KEY_HOME 0406 YBCGE home key key_ic kich1 str kI KEY_IC 0513 YB-GE insert-character key key_il kil1 str kA KEY_IL 0511 -B-G-* insert-line key key_left kcub1 str kl KEY_LEFT 0404 YBCGE left-arrow key key_ll kll str kH KEY_LL 0533 YB-G- lower-left key (home down) key_npage knp str kN KEY_NPAGE 0522 YB-GE next-page key key_ppage kpp str kP KEY_PPAGE 0523 YB-GE previous-page key key_right kcuf1 str kr KEY_RIGHT 0405 YBCGE right-arrow key key_sf kind str kF KEY_SF 0520 -B-G-* scroll-forward key key_sr kri str kR KEY_SR 0521 -B-G-* scroll-backward key key_stab khts str kT KEY_STAB 0524 -B-G-* set-tab key key_up kcuu1 str ku KEY_UP 0403 YBCGE up-arrow key keypad_local rmkx str ke - - YBCGE leave 'keyboard_transmit' mode keypad_xmit smkx str ks - - YBCGE enter 'keyboard_transmit' mode lab_f0 lf0 str l0 - - -B-G-* label on function key f0 if not f0 lab_f1 lf1 str l1 - - -B-G-* label on function key f1 if not f1 lab_f10 lf10 str la - - ----- label on function key f10 if not f10 lab_f2 lf2 str l2 - - -B-G-* label on function key f2 if not f2 lab_f3 lf3 str l3 - - -B-G-* label on function key f3 if not f3 lab_f4 lf4 str l4 - - -B-G-* label on function key f4 if not f4 lab_f5 lf5 str l5 - - -B-G-* label on function key f5 if not f5 lab_f6 lf6 str l6 - - -B-G-* label on function key f6 if not f6 lab_f7 lf7 str l7 - - -B-G-* label on function key f7 if not f7 lab_f8 lf8 str l8 - - -B-G-* label on function key f8 if not f8 lab_f9 lf9 str l9 - - -B-G-* label on function key f9 if not f9 meta_off rmm str mo - - YB-G-* turn off meta mode meta_on smm str mm - - YB-G-* turn on meta mode (8th-bit on) newline nel str nw - - YB-G-* newline (behave like cr followed by lf) pad_char pad str pc - - YBCGE padding char (instead of null) parm_dch dch str DC - - YB-GE delete #1 characters (P*) parm_delete_line dl str DL - - YBCGE delete #1 lines (P*) parm_down_cursor cud str DO - - YBCGE down #1 lines (P*) parm_ich ich str IC - - YB-GE insert #1 characters (P*) parm_index indn str SF - - YBCG- scroll forward #1 lines (P) parm_insert_line il str AL - - YBCGE insert #1 lines (P*) parm_left_cursor cub str LE - - YBCGE move #1 characters to the left (P) parm_right_cursor cuf str RI - - YBCGE move #1 characters to the right (P*) parm_rindex rin str SR - - YBCG- scroll back #1 lines (P) parm_up_cursor cuu str UP - - YBCGE up #1 lines (P*) pkey_key pfkey str pk - - -B--- program function key #1 to type string #2 pkey_local pfloc str pl - - -B--- program function key #1 to execute string #2 pkey_xmit pfx str px - - -B--- program function key #1 to transmit string #2 print_screen mc0 str ps - - -B-G-* print contents of screen prtr_off mc4 str pf - - -B-G-* turn off printer prtr_on mc5 str po - - -B-G-* turn on printer repeat_char rep str rp - - YB-GE repeat char #1 #2 times (P*) reset_1string rs1 str r1 - - -B--- reset string reset_2string rs2 str r2 - - -B--- reset string reset_3string rs3 str r3 - - -B--- reset string reset_file rf str rf - - -B--- name of reset file restore_cursor rc str rc - - YBCG- restore cursor to position of last save_cursor row_address vpa str cv - - -B-GE* vertical position #1 absolute (P) save_cursor sc str sc - - YBCG- save current cursor position (P) scroll_forward ind str sf - - YBCGE scroll text up (P) scroll_reverse ri str sr - - YBCGE scroll text down (P) set_attributes sgr str sa - - YB-G- define video attributes #1-#9 (PG9) set_tab hts str st - - YB-G- set a tab in every row, current columns set_window wind str wi - - -B-GE current window is lines #1-#2 cols #3-#4 tab ht str ta - - YBCGE tab to next 8-space hardware tab stop to_status_line tsl str ts - - YB-G- move to status line, column #1 underline_char uc str uc - - YBCG- underline char and move past it up_half_line hu str hu - - YB-G- half a line up init_prog iprog str iP - - -B--- path name of program for initialization key_a1 ka1 str K1 KEY_A1 0534 YB-GE upper left of keypad key_a3 ka3 str K3 KEY_A3 0535 YB-GE upper right of keypad key_b2 kb2 str K2 KEY_B2 0536 YB-GE center of keypad key_c1 kc1 str K4 KEY_C1 0537 YB-GE lower left of keypad key_c3 kc3 str K5 KEY_C3 0540 YB-GE lower right of keypad prtr_non mc5p str pO - - -B-G-* turn on printer for #1 bytes # # SVr1 capabilities stop here. IBM's version of terminfo is the same as # SVr4 up to this point, but has a different set afterwards. # # HPUX defines these if __HP_CURSES_COMPAT is defined: memory_lock meml str ml - - ----K lock memory above cursor memory_unlock memu str mu - - ----K unlock memory # # plab_norm pln str pn - - ----- program label #1 to show string #2 label_on smln str LO - - ----- turn on soft labels label_off rmln str LF - - ----- turn off soft labels key_f11 kf11 str F1 KEY_F(11) - ----E F11 function key key_f12 kf12 str F2 KEY_F(12) - ----E F12 function key key_f13 kf13 str F3 KEY_F(13) - ----E F13 function key key_f14 kf14 str F4 KEY_F(14) - ----E F14 function key key_f15 kf15 str F5 KEY_F(15) - ----E F15 function key key_f16 kf16 str F6 KEY_F(16) - ----E F16 function key key_f17 kf17 str F7 KEY_F(17) - ----E F17 function key key_f18 kf18 str F8 KEY_F(18) - ----E F18 function key key_f19 kf19 str F9 KEY_F(19) - ----E F19 function key key_f20 kf20 str FA KEY_F(20) - ----E F20 function key key_f21 kf21 str FB KEY_F(21) - ----E F21 function key key_f22 kf22 str FC KEY_F(22) - ----E F22 function key key_f23 kf23 str FD KEY_F(23) - ----E F23 function key key_f24 kf24 str FE KEY_F(24) - ----E F24 function key key_f25 kf25 str FF KEY_F(25) - ----E F25 function key key_f26 kf26 str FG KEY_F(26) - ----E F26 function key key_f27 kf27 str FH KEY_F(27) - ----E F27 function key key_f28 kf28 str FI KEY_F(28) - ----E F28 function key key_f29 kf29 str FJ KEY_F(29) - ----E F29 function key key_f30 kf30 str FK KEY_F(30) - ----E F30 function key key_f31 kf31 str FL KEY_F(31) - ----E F31 function key key_f32 kf32 str FM KEY_F(32) - ----E F32 function key key_f33 kf33 str FN KEY_F(33) - ----E F33 function key key_f34 kf34 str FO KEY_F(34) - ----E F34 function key key_f35 kf35 str FP KEY_F(35) - ----E F35 function key key_f36 kf36 str FQ KEY_F(36) - ----E F36 function key key_f37 kf37 str FR KEY_F(37) - ----E F37 function key key_f38 kf38 str FS KEY_F(38) - ----E F38 function key key_f39 kf39 str FT KEY_F(39) - ----E F39 function key key_f40 kf40 str FU KEY_F(40) - ----E F40 function key key_f41 kf41 str FV KEY_F(41) - ----E F41 function key key_f42 kf42 str FW KEY_F(42) - ----E F42 function key key_f43 kf43 str FX KEY_F(43) - ----E F43 function key key_f44 kf44 str FY KEY_F(44) - ----E F44 function key key_f45 kf45 str FZ KEY_F(45) - ----E F45 function key key_f46 kf46 str Fa KEY_F(46) - ----E F46 function key key_f47 kf47 str Fb KEY_F(47) - ----E F47 function key key_f48 kf48 str Fc KEY_F(48) - ----E F48 function key key_f49 kf49 str Fd KEY_F(49) - ----E F49 function key key_f50 kf50 str Fe KEY_F(50) - ----E F50 function key key_f51 kf51 str Ff KEY_F(51) - ----E F51 function key key_f52 kf52 str Fg KEY_F(52) - ----E F52 function key key_f53 kf53 str Fh KEY_F(53) - ----E F53 function key key_f54 kf54 str Fi KEY_F(54) - ----E F54 function key key_f55 kf55 str Fj KEY_F(55) - ----E F55 function key key_f56 kf56 str Fk KEY_F(56) - ----E F56 function key key_f57 kf57 str Fl KEY_F(57) - ----E F57 function key key_f58 kf58 str Fm KEY_F(58) - ----E F58 function key key_f59 kf59 str Fn KEY_F(59) - ----E F59 function key key_f60 kf60 str Fo KEY_F(60) - ----E F60 function key key_f61 kf61 str Fp KEY_F(61) - ----E F61 function key key_f62 kf62 str Fq KEY_F(62) - ----E F62 function key key_f63 kf63 str Fr KEY_F(63) - ----E F63 function key # end of strings in HPUX 9 char_padding rmp str rP - - ----- like ip but when in insert mode acs_chars acsc str ac - - ----- graphics charset pairs, based on vt100 key_btab kcbt str kB KEY_BTAB 0541 ----- back-tab key enter_xon_mode smxon str SX - - ----- turn on xon/xoff handshaking exit_xon_mode rmxon str RX - - ----- turn off xon/xoff handshaking enter_am_mode smam str SA - - ----- turn on automatic margins exit_am_mode rmam str RA - - ----- turn off automatic margins xon_character xonc str XN - - ----- XON character xoff_character xoffc str XF - - ----- XOFF character ena_acs enacs str eA - - ----- enable alternate char set key_beg kbeg str @1 KEY_BEG 0542 ----- begin key key_cancel kcan str @2 KEY_CANCEL 0543 ----- cancel key key_close kclo str @3 KEY_CLOSE 0544 ----- close key key_command kcmd str @4 KEY_COMMAND 0545 ----- command key key_copy kcpy str @5 KEY_COPY 0546 ----- copy key key_create kcrt str @6 KEY_CREATE 0547 ----- create key key_end kend str @7 KEY_END 0550 ----- end key key_enter kent str @8 KEY_ENTER 0527 ----- enter/send key key_exit kext str @9 KEY_EXIT 0551 ----- exit key key_find kfnd str @0 KEY_FIND 0552 ----- find key key_help khlp str %1 KEY_HELP 0553 ----- help key key_mark kmrk str %2 KEY_MARK 0554 ----- mark key key_message kmsg str %3 KEY_MESSAGE 0555 ----- message key key_move kmov str %4 KEY_MOVE 0556 ----- move key key_next knxt str %5 KEY_NEXT 0557 ----- next key key_open kopn str %6 KEY_OPEN 0560 ----- open key key_options kopt str %7 KEY_OPTIONS 0561 ----- options key key_previous kprv str %8 KEY_PREVIOUS 0562 ----- previous key key_print kprt str %9 KEY_PRINT 0532 ----- print key key_redo krdo str %0 KEY_REDO 0563 ----- redo key key_reference kref str &1 KEY_REFERENCE 0564 ----- reference key key_refresh krfr str &2 KEY_REFRESH 0565 ----- refresh key key_replace krpl str &3 KEY_REPLACE 0566 ----- replace key key_restart krst str &4 KEY_RESTART 0567 ----- restart key key_resume kres str &5 KEY_RESUME 0570 ----- resume key key_save ksav str &6 KEY_SAVE 0571 ----- save key key_suspend kspd str &7 KEY_SUSPEND 0627 ----- suspend key key_undo kund str &8 KEY_UNDO 0630 ----- undo key key_sbeg kBEG str &9 KEY_SBEG 0572 ----- shifted begin key key_scancel kCAN str &0 KEY_SCANCEL 0573 ----- shifted cancel key key_scommand kCMD str *1 KEY_SCOMMAND 0574 ----- shifted command key key_scopy kCPY str *2 KEY_SCOPY 0575 ----- shifted copy key key_screate kCRT str *3 KEY_SCREATE 0576 ----- shifted create key key_sdc kDC str *4 KEY_SDC 0577 ----- shifted delete-character key key_sdl kDL str *5 KEY_SDL 0600 ----- shifted delete-line key key_select kslt str *6 KEY_SELECT 0601 ----- select key key_send kEND str *7 KEY_SEND 0602 ----- shifted end key key_seol kEOL str *8 KEY_SEOL 0603 ----- shifted clear-to-end-of-line key key_sexit kEXT str *9 KEY_SEXIT 0604 ----- shifted exit key key_sfind kFND str *0 KEY_SFIND 0605 ----- shifted find key key_shelp kHLP str #1 KEY_SHELP 0606 ----- shifted help key key_shome kHOM str #2 KEY_SHOME 0607 ----- shifted home key key_sic kIC str #3 KEY_SIC 0610 ----- shifted insert-character key key_sleft kLFT str #4 KEY_SLEFT 0611 ----- shifted left-arrow key key_smessage kMSG str %a KEY_SMESSAGE 0612 ----- shifted message key key_smove kMOV str %b KEY_SMOVE 0613 ----- shifted move key key_snext kNXT str %c KEY_SNEXT 0614 ----- shifted next key key_soptions kOPT str %d KEY_SOPTIONS 0615 ----- shifted options key key_sprevious kPRV str %e KEY_SPREVIOUS 0616 ----- shifted previous key key_sprint kPRT str %f KEY_SPRINT 0617 ----- shifted print key key_sredo kRDO str %g KEY_SREDO 0620 ----- shifted redo key key_sreplace kRPL str %h KEY_SREPLACE 0621 ----- shifted replace key key_sright kRIT str %i KEY_SRIGHT 0622 ----- shifted right-arrow key key_srsume kRES str %j KEY_SRSUME 0623 ----- shifted resume key key_ssave kSAV str !1 KEY_SSAVE 0624 ----- shifted save key key_ssuspend kSPD str !2 KEY_SSUSPEND 0625 ----- shifted suspend key key_sundo kUND str !3 KEY_SUNDO 0626 ----- shifted undo key req_for_input rfi str RF - - ----- send next input char (for ptys) clr_bol el1 str cb - - ----- Clear to beginning of line clear_margins mgc str MC - - ----- clear right and left soft margins set_left_margin smgl str ML - - ----- set left soft margin at current column. See smgl. (ML is not in BSD termcap). set_right_margin smgr str MR - - ----- set right soft margin at current column label_format fln str Lf - - ----- label format set_clock sclk str SC - - ----- set clock, #1 hrs #2 mins #3 secs display_clock dclk str DK - - ----- display clock remove_clock rmclk str RC - - ----- remove clock create_window cwin str CW - - ----- define a window #1 from #2,#3 to #4,#5 goto_window wingo str WG - - ----- go to window #1 hangup hup str HU - - ----- hang-up phone dial_phone dial str DI - - ----- dial number #1 quick_dial qdial str QD - - ----- dial number #1 without checking tone tone str TO - - ----- select touch tone dialing pulse pulse str PU - - ----- select pulse dialing flash_hook hook str fh - - ----- flash switch hook fixed_pause pause str PA - - ----- pause for 2-3 seconds wait_tone wait str WA - - ----- wait for dial-tone user0 u0 str u0 - - ----- User string #0 user1 u1 str u1 - - ----- User string #1 user2 u2 str u2 - - ----- User string #2 user3 u3 str u3 - - ----- User string #3 user4 u4 str u4 - - ----- User string #4 user5 u5 str u5 - - ----- User string #5 user6 u6 str u6 - - ----- User string #6 user7 u7 str u7 - - ----- User string #7 user8 u8 str u8 - - ----- User string #8 user9 u9 str u9 - - ----- User string #9 # # SVr4 added these capabilities to support color # orig_pair op str op - - ----- Set default pair to its original value orig_colors oc str oc - - ----- Set all color pairs to the original ones initialize_color initc str Ic - - ----- initialize color #1 to (#2,#3,#4) initialize_pair initp str Ip - - ----- Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7) set_color_pair scp str sp - - ----- Set current color pair to #1 set_foreground setf str Sf - - ----- Set foreground color #1 set_background setb str Sb - - ----- Set background color #1 # # SVr4 added these capabilities to support printers # change_char_pitch cpi str ZA - - ----- Change number of characters per inch to #1 change_line_pitch lpi str ZB - - ----- Change number of lines per inch to #1 change_res_horz chr str ZC - - ----- Change horizontal resolution to #1 change_res_vert cvr str ZD - - ----- Change vertical resolution to #1 define_char defc str ZE - - ----- Define a character #1, #2 dots wide, descender #3 enter_doublewide_mode swidm str ZF - - ----- Enter double-wide mode enter_draft_quality sdrfq str ZG - - ----- Enter draft-quality mode enter_italics_mode sitm str ZH - - ----- Enter italic mode enter_leftward_mode slm str ZI - - ----- Start leftward carriage motion enter_micro_mode smicm str ZJ - - ----- Start micro-motion mode enter_near_letter_quality snlq str ZK - - ----- Enter NLQ mode enter_normal_quality snrmq str ZL - - ----- Enter normal-quality mode enter_shadow_mode sshm str ZM - - ----- Enter shadow-print mode enter_subscript_mode ssubm str ZN - - ----- Enter subscript mode enter_superscript_mode ssupm str ZO - - ----- Enter superscript mode enter_upward_mode sum str ZP - - ----- Start upward carriage motion exit_doublewide_mode rwidm str ZQ - - ----- End double-wide mode exit_italics_mode ritm str ZR - - ----- End italic mode exit_leftward_mode rlm str ZS - - ----- End left-motion mode exit_micro_mode rmicm str ZT - - ----- End micro-motion mode exit_shadow_mode rshm str ZU - - ----- End shadow-print mode exit_subscript_mode rsubm str ZV - - ----- End subscript mode exit_superscript_mode rsupm str ZW - - ----- End superscript mode exit_upward_mode rum str ZX - - ----- End reverse character motion micro_column_address mhpa str ZY - - ----- Like column_address in micro mode micro_down mcud1 str ZZ - - ----- Like cursor_down in micro mode micro_left mcub1 str Za - - ----- Like cursor_left in micro mode micro_right mcuf1 str Zb - - ----- Like cursor_right in micro mode micro_row_address mvpa str Zc - - ----- Like row_address #1 in micro mode micro_up mcuu1 str Zd - - ----- Like cursor_up in micro mode order_of_pins porder str Ze - - ----- Match software bits to print-head pins parm_down_micro mcud str Zf - - ----- Like parm_down_cursor in micro mode parm_left_micro mcub str Zg - - ----- Like parm_left_cursor in micro mode parm_right_micro mcuf str Zh - - ----- Like parm_right_cursor in micro mode parm_up_micro mcuu str Zi - - ----- Like parm_up_cursor in micro mode select_char_set scs str Zj - - ----- Select character set, #1 set_bottom_margin smgb str Zk - - ----- Set bottom margin at current line set_bottom_margin_parm smgbp str Zl - - ----- Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom set_left_margin_parm smglp str Zm - - ----- Set left (right) margin at column #1 set_right_margin_parm smgrp str Zn - - ----- Set right margin at column #1 set_top_margin smgt str Zo - - ----- Set top margin at current line set_top_margin_parm smgtp str Zp - - ----- Set top (bottom) margin at row #1 start_bit_image sbim str Zq - - ----- Start printing bit image graphics start_char_set_def scsd str Zr - - ----- Start character set definition #1, with #2 characters in the set stop_bit_image rbim str Zs - - ----- Stop printing bit image graphics stop_char_set_def rcsd str Zt - - ----- End definition of character set #1 subscript_characters subcs str Zu - - ----- List of subscriptable characters superscript_characters supcs str Zv - - ----- List of superscriptable characters these_cause_cr docr str Zw - - ----- Printing any of these characters causes CR zero_motion zerom str Zx - - ----- No motion for subsequent character #%.TE #%.ad #% #%The following string capabilities are present in the SVr4.0 term structure, #%but were originally not documented in the man page. #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw18. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR char_set_names csnm str Zy - - ----- Produce #1'th item from list of character set names key_mouse kmous str Km KEY_MOUSE 0631 ----- Mouse event has occurred mouse_info minfo str Mi - - ----- Mouse status information req_mouse_pos reqmp str RQ - - ----- Request mouse position get_mouse getm str Gm - - ----- Curses should get button events, parameter #1 not documented. set_a_foreground setaf str AF - - ----- Set foreground color to #1, using ANSI escape set_a_background setab str AB - - ----- Set background color to #1, using ANSI escape pkey_plab pfxl str xl - - ----- Program function key #1 to type string #2 and show string #3 device_type devt str dv - - ----- Indicate language/codeset support code_set_init csin str ci - - ----- Init sequence for multiple codesets set0_des_seq s0ds str s0 - - ----- Shift to codeset 0 (EUC set 0, ASCII) set1_des_seq s1ds str s1 - - ----- Shift to codeset 1 set2_des_seq s2ds str s2 - - ----- Shift to codeset 2 set3_des_seq s3ds str s3 - - ----- Shift to codeset 3 set_lr_margin smglr str ML - - ----- Set both left and right margins to #1, #2. (ML is not in BSD termcap). set_tb_margin smgtb str MT - - ----- Sets both top and bottom margins to #1, #2 bit_image_repeat birep str Xy - - ----- Repeat bit image cell #1 #2 times bit_image_newline binel str Zz - - ----- Move to next row of the bit image bit_image_carriage_return bicr str Yv - - ----- Move to beginning of same row color_names colornm str Yw - - ----- Give name for color #1 define_bit_image_region defbi str Yx - - ----- Define rectangular bit image region end_bit_image_region endbi str Yy - - ----- End a bit-image region set_color_band setcolor str Yz - - ----- Change to ribbon color #1 set_page_length slines str YZ - - ----- Set page length to #1 lines # # SVr4 added these capabilities for direct PC-clone support # display_pc_char dispc str S1 - - ----- Display PC character #1 enter_pc_charset_mode smpch str S2 - - ----- Enter PC character display mode exit_pc_charset_mode rmpch str S3 - - ----- Exit PC character display mode enter_scancode_mode smsc str S4 - - ----- Enter PC scancode mode exit_scancode_mode rmsc str S5 - - ----- Exit PC scancode mode pc_term_options pctrm str S6 - - ----- PC terminal options scancode_escape scesc str S7 - - ----- Escape for scancode emulation alt_scancode_esc scesa str S8 - - ----- Alternate escape for scancode emulation #%.TE #%.ad #% #%.in .8i #%The XSI Curses standard added these hardcopy capabilities. #%They were used in some post-4.1 versions of System V curses, #%e.g., Solaris 2.5 and IRIX 6.x. #%Except for \fBYI\fP, the \fBncurses\fR termcap names for them are invented. #%According to the XSI Curses standard, they have no termcap names. #%If your compiled terminfo entries use these, #%they may not be binary-compatible with System V terminfo #%entries after SVr4.1; beware! #% #%.na #%.TS H #%center expand; #%c l l c #%c l l c #%lw25 lw6 lw2 lw20. #%\fBVariable Cap- TCap Description\fR #%\fBString name Code\fR set_pglen_inch slength str YI - - ----- Set page length to #1 hundredth of an inch (some implementations use sL for termcap). enter_horizontal_hl_mode ehhlm str Xh - - ----- Enter horizontal highlight mode enter_left_hl_mode elhlm str Xl - - ----- Enter left highlight mode enter_low_hl_mode elohlm str Xo - - ----- Enter low highlight mode enter_right_hl_mode erhlm str Xr - - ----- Enter right highlight mode enter_top_hl_mode ethlm str Xt - - ----- Enter top highlight mode enter_vertical_hl_mode evhlm str Xv - - ----- Enter vertical highlight mode set_a_attributes sgr1 str sA - - ----- Define second set of video attributes #1-#6 exit_horizontal_hl_mode rhhlm str XH - - ----K Exit horizontal highlight mode exit_left_hl_mode rlhlm str XL - - ----K Exit left highlight mode exit_low_hl_mode rlohlm str XO - - ----K Exit low highlight mode exit_right_hl_mode rrhlm str XR - - ----K Exit right highlight mode exit_top_hl_mode rthlm str XT - - ----K Exit top highlight mode exit_vertical_hl_mode rvhlm str XV - - ----K Exit vertical highlight mode #%.TE #%.ad # # The magic token below tells the tic compiler-generator code that all the caps # past it should be ignored (not written out) when dumping terminfo objects. It # also tells the man page table generator not to pass through following lines # This means we can have obsolete capabilities and pseudo-capabilities that are # recognized for termcap or terminfo compilation, but not output. # # %%-STOP-HERE-%% # # Don't move this casually! In fact, don't move it at all unless you're # either doing it to add System V or XPG4 extensions, or have decided you # don't care about SVr4 binary compatibility. # ############################################################################# # # TERMCAP EXTENSION CAPABILITIES # # The capabilities below are either obsolete or extensions on certain systems. # They are not used by SVR4 terminfo. Some are used by captoinfo to translate # termcap sources; the rest are listed for completeness, and in case somebody # cares about them enough to hack in code that will translate them into # terminfo capabilities. # # The first part of the list is from Ross Ridge's `mytinfo' package # (comp.sources.unix, volume 26); the variable names and terminfo names (as # well as the termcap codes) match his list. # # This group of codes is not marked obsolete in 4.4BSD, but have no direct # terminfo equivalents. The rs capability is specially translated to terminfo # r2, and vice versa, if an entry does not already have an r2. Similarly, # i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2). # The ug capability is thrown away, but assumed to be whatever sg is if the # latter is nonzero and we're dumping in termcap format. # termcap_init2 OTi2 str i2 - - YB--- secondary initialization string termcap_reset OTrs str rs - - YB-G- terminal reset string magic_cookie_glitch_ul OTug num ug - - YBCGE number of blanks left by ul # # Obsolete termcap capabilities. Some are used for termcap translation. The # code uses the 'OT' prefix we put on obsolete capabilities to suppress # printing them in terminfo source dumps of compiled entries. # backspaces_with_bs OTbs bool bs - - YBCGE uses ^H to move left crt_no_scrolling OTns bool ns - - YBCG- crt cannot scroll no_correctly_working_cr OTnc bool nc - - YBCG- no way to go to start of line carriage_return_delay OTdC num dC - - YB-G- pad needed for CR new_line_delay OTdN num dN - - YB-G- pad needed for LF linefeed_if_not_lf OTnl str nl - - YBCGE use to move down backspace_if_not_bs OTbc str bc - - YBCGE move left, if not ^H # # GNU termcap library extensions. The GNU termcap file distributed with # Emacs no longer uses these, but MT showed up in pre-9.0 versions of the # BSD termcap file. The name clash with terminfo MT is resolved by type # info; MT is converted to km. # gnu_has_meta_key OTMT bool MT - - ----E has meta key # gnu_tab_width OTtw num tw - - ----E tab width in spaces # # GNU termcap *does* include the following extended capability, Only the # now-obsolete Ann Arbor terminals used it. # # gnu_change_scroll_region OTcS str cS - - ---GE alternate set scrolling region # # The following comments describe capnames so ancient that I believe no # software uses them any longer. Some of these have to go because they # clash with terminfo names in ways that cannot be resolved by type # information. # # These mytinfo codes are not used in the 4.4BSD curses code. They are # marked obsolete in the 4.4BSD manual pages. # # There is one conflict with terminfo; ma is in both. This conflict is # resolved by type information. # # The `ko' capability is translated by special code. It should contain a # comma-separated list of capabilities for which there are corresponding keys. # The `kn' code is accepted but ignored. # # The `ma' capability seems to have been designed to map between the rogue(2) # motion keys (including jkhl) and characters emitted by arrow keys on some # primitive pre-ANSI terminals. It's so obsolete it's fossilized... # # Here is a description of memory_lock_above and memory_unlock: # "You can 'freeze' data on the screen by turning on Memory Lock in a line of # text. All lines above the cursor's current line become locked in place on # the screen. Then enter data normally. When the screen fills up, any # further data entered forces the first line of unfrozen line text to scroll # under the frozen data. Lines scrolled off the screen are inserted into # memory immediately preceding the first frozen line." (from the HP 700/96 # User's manual). VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l. # # Applications that use terminfo are supposed to behave as though xr is # always true. # linefeed_is_newline OTNL bool NL - - YB--- move down with \n # even_parity OTEP bool EP - - -B--- terminal requires even parity # odd_parity OTOP bool OP - - -B--- terminal requires odd parity # half_duplex OTHD bool HD - - -B--- terminal is half-duplex # lower_case_only OTLC bool LC - - -B--- terminal has only lower case # upper_case_only OTUC bool UC - - -B--- terminal has only upper case backspace_delay OTdB num dB - - YB-G- padding required for ^H # form_feed_delay OTdF num dF - - -B-G- padding required for ^L horizontal_tab_delay OTdT num dT - - YB-G- padding required for ^I # vertical_tab_delay OTdV num dV - - -B--- padding required for ^V number_of_function_keys OTkn num kn - - -B-G- count of function keys other_non_function_keys OTko str ko - - -B-G- list of self-mapped keycaps arrow_key_map OTma str ma - - YBC-- map arrow keys rogue(1) motion keys # memory_lock_above OTml str ml - - -B--- lock visible screen memory above the current line # memory_unlock OTmu str mu - - -B--- unlock visible screen memory above the current line has_hardware_tabs OTpt bool pt - - YB--- has 8-char tabs invoked with ^I return_does_clr_eol OTxr bool xr - - YB--- return clears the line # tek_4025_insert_line OTxx bool xx - - -BC-- Tektronix 4025 insert-line glitch # # mytinfo described this as a termcap capability, but it's not listed in the # 4.4BSD man pages, and not found in the 4.4BSD termcap file. The ncurses # package, like System V, behaves as though it is always true. # # rind_only_at_top OTxq bool xq - - ----- reverse index only works from top line # # University of Waterloo termcap extensions (as described in mytinfo). # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot # be resolved by a type check. The descriptions are guesses from what was # in the mytinfo tables. # # key_interrupt_char OTki str ki - - ----- string set by interrupt key (?) # key_kill_char OTkk str kk - - ----- string set by kill key (?) # key_suspend_char OTkz str kz - - ----- string set by suspend key (?) # initialization_messy OTxc bool xc - - ----- initialization leaves garbage on the screen (?) # ind_at_bottom_does_cr OTxl bool xl - - ----- index does a carriage return # # Nonstandard capabilities unique to Ross Ridge's `mytinfo' package. # SR clashes with a terminfo name; this ambiguity cannot be resolved by a type # check. # # scroll_left OTsl1 str Sl - - ----- scroll screen leftward # scroll_right OTsr1 str Sr - - ----- scroll screen rightward # parm_scroll_left OTsl str SL - - ----- scroll screen leftward #1 characters # parm_scroll_right OTsr str SR - - ----- scroll screen rightward #1 characters # # The mytinfo capabilities end here. # # XENIX extensions: # # Xenix defined its own set of forms-drawing capabilities: # # cap IBM ASCII description ACS ASCII # --- ----------- -------------------- ------------- ------ # G1 191 \277 M-? single upper right ACS_URCORNER # G2 218 \332 M-Z single upper left ACS_ULCORNER # G3 192 \300 M-@ single lower left ACS_LLCORNER # G4 217 \331 M-Y single lower right ACS_LRCORNER # G5 187 \273 M-; double upper right # G6 201 \311 M-I double upper left # G7 200 \310 M-H double lower left # G8 188 \274 M-< double lower right # GC 197 \305 M-E single intersection ACS_PLUS _ _ # GD 194 \302 M-B single down-tick ACS_TTEE | # GH 196 \304 M-D single horizontal line ACS_HLINE # GL 180 \264 M-4 single left tick ACS_RTEE -| # GR 195 \303 M-C single right tick ACS_LTEE |- # GU 193 \301 M-A single up tick ACS_BTEE _|_ # GV 179 \263 M-3 single vertical line ACS_VLINE # Gc 206 \316 M-N double intersection # Gd 203 \313 M-K double down tick # Gh 205 \315 M-M double horizontal line # Gl 204 \204 M-L double left tick # Gr 185 \271 M-9 double right tick # Gu 202 \312 M-J double up tick # Gv 186 \272 M-: double vertical line # # The compiler will translate the single-line caps and discard the others # (via IGNORE aliases further down). We don't want to do normal pad # translation on these, they're often single-character printable ASCII # strings that happen to be numerics. There's awk code in parametrized.sh # that detects the acs_ prefix and uses it to suppress pad translation. # These terminfo names are invented. # acs_ulcorner OTG2 str G2 - - ----- single upper left acs_llcorner OTG3 str G3 - - ----- single lower left acs_urcorner OTG1 str G1 - - ----- single upper right acs_lrcorner OTG4 str G4 - - ----- single lower right acs_ltee OTGR str GR - - ----- tee pointing right acs_rtee OTGL str GL - - ----- tee pointing left acs_btee OTGU str GU - - ----- tee pointing up acs_ttee OTGD str GD - - ----- tee pointing down acs_hline OTGH str GH - - ----- single horizontal line acs_vline OTGV str GV - - ----- single vertical line acs_plus OTGC str GC - - ----- single intersection # ############################################################################# # # TERMINFO EXTENSION CAPABILITIES # # This section is almost all comments. What it's mainly for is to describe # what capabilities need to be squeezed out to get down to the XSI Curses # standard set. They are flagged with K. # # HP extensions # # These extensions follow ptr_non (replacing everything after it) in HP # terminfo files. Except for memory_lock and memory_unlock, they are # functionally identical to SVr4 extensions, but they make the binary format # different. Grrr.... # #memory_lock meml str ml - - ----K memory lock above #memory_unlock memu str mu - - ----K memory unlock #plab_norm pln str pn - - ----- program label #1 to show string #2 #label_on smln str LO - - ----- turn on soft labels #label_off rmln str LF - - ----- turn off soft labels #key_f11 kf11 str F1 - - ----- F11 function key #key_f12 kf12 str F2 - - ----- F12 function key #key_f13 kf13 str F3 - - ----- F13 function key #key_f14 kf14 str F4 - - ----- F14 function key #key_f15 kf15 str F5 - - ----- F15 function key #key_f16 kf16 str F6 - - ----- F16 function key #key_f17 kf17 str F7 - - ----- F17 function key #key_f18 kf18 str F8 - - ----- F18 function key #key_f19 kf19 str F9 - - ----- F19 function key #key_f20 kf20 str FA - - ----- F20 function key #key_f21 kf21 str FB - - ----- F21 function key #key_f22 kf22 str FC - - ----- F22 function key #key_f23 kf23 str FD - - ----- F23 function key #key_f24 kf24 str FE - - ----- F24 function key #key_f25 kf25 str FF - - ----- F25 function key #key_f26 kf26 str FG - - ----- F26 function key #key_f27 kf27 str FH - - ----- F27 function key #key_f28 kf28 str FI - - ----- F28 function key #key_f29 kf29 str FJ - - ----- F29 function key #key_f30 kf30 str FK - - ----- F30 function key #key_f31 kf31 str FL - - ----- F31 function key #key_f32 kf32 str FM - - ----- F32 function key #key_f33 kf33 str FN - - ----- F33 function key #key_f34 kf34 str FO - - ----- F34 function key #key_f35 kf35 str FP - - ----- F35 function key #key_f36 kf36 str FQ - - ----- F36 function key #key_f37 kf37 str FR - - ----- F37 function key #key_f38 kf38 str FS - - ----- F38 function key #key_f39 kf39 str FT - - ----- F39 function key #key_f40 kf40 str FU - - ----- F40 function key #key_f41 kf41 str FV - - ----- F41 function key #key_f42 kf42 str FW - - ----- F42 function key #key_f43 kf43 str FX - - ----- F43 function key #key_f44 kf44 str FY - - ----- F44 function key #key_f45 kf45 str FZ - - ----- F45 function key #key_f46 kf46 str Fa - - ----- F46 function key #key_f47 kf47 str Fb - - ----- F47 function key #key_f48 kf48 str Fc - - ----- F48 function key #key_f49 kf49 str Fd - - ----- F49 function key #key_f50 kf50 str Fe - - ----- F50 function key #key_f51 kf51 str Ff - - ----- F51 function key #key_f52 kf52 str Fg - - ----- F52 function key #key_f53 kf53 str Fh - - ----- F53 function key #key_f54 kf54 str Fi - - ----- F54 function key #key_f55 kf55 str Fj - - ----- F55 function key #key_f56 kf56 str Fk - - ----- F56 function key #key_f57 kf57 str Fl - - ----- F57 function key #key_f58 kf58 str Fm - - ----- F58 function key #key_f59 kf59 str Fn - - ----- F59 function key #key_f60 kf60 str Fo - - ----- F60 function key #key_f61 kf61 str Fp - - ----- F61 function key #key_f62 kf62 str Fq - - ----- F62 function key #key_f63 kf63 str Fr - - ----- F63 function key # # IBM extensions # # These extensions follow ptr_non (replacing everything after it) in IBM # terminfo files. # # The places in the box[12] capabilities correspond to acsc characters, here is # the mapping: # # box1[0] = ACS_ULCORNER # box1[1] = ACS_HLINE # box1[2] = ACS_URCORNER # box1[3] = ACS_VLINE # box1[4] = ACS_LRCORNER # box1[5] = ACS_LLCORNER # box1[6] = ACS_TTEE # box1[7] = ACS_RTEE # box1[8] = ACS_BTEE # box1[9] = ACS_LTEE # box1[10] = ACS_PLUS # # The box2 characters are the double-line versions of these forms graphics. # box_chars_1 box1 str bx - - ----K box characters primary set #box_chars_2 box2 str by - - ----K box characters secondary set #box_attr_1 batt1 str Bx - - ----K attributes for box1 #box_attr_2 batt2 str By - - ----K attributes for box2 #color_bg_0 colb0 str d0 - - ----K background color 0 #color_bg_1 colb1 str d1 - - ----K background color 1 #color_bg_2 colb2 str d2 - - ----K background color 2 #color_bg_3 colb3 str d3 - - ----K background color 3 #color_bg_4 colb4 str d4 - - ----K background color 4 #color_bg_5 colb5 str d5 - - ----K background color 5 #color_bg_6 colb6 str d6 - - ----K background color 6 #color_bg_7 colb7 str d7 - - ----K background color 7 #color_fg_0 colf0 str c0 - - ----K foreground color 0 #color_fg_1 colf1 str c1 - - ----K foreground color 1 #color_fg_2 colf2 str c2 - - ----K foreground color 2 #color_fg_3 colf3 str c3 - - ----K foreground color 3 #color_fg_4 colf4 str c4 - - ----K foreground color 4 #color_fg_5 colf5 str c5 - - ----K foreground color 5 #color_fg_6 colf6 str c6 - - ----K foreground color 6 #color_fg_7 colf7 str c7 - - ----K foreground color 7 #font_0 font0 str f0 - - ----- select font 0 #font_1 font1 str f1 - - ----- select font 1 #font_2 font2 str f2 - - ----- select font 2 #font_3 font3 str f3 - - ----- select font 3 #font_4 font4 str f4 - - ----K select font 4 #font_5 font5 str f5 - - ----K select font 5 #font_6 font6 str f6 - - ----K select font 6 #font_7 font7 str f7 - - ----K select font 7 #key_back_tab kbtab str k0 - - ----- backtab key #key_do kdo str ki - - ----K do request key #key_command kcmd str kd - - ----K command-request key #key_command_pane kcpn str kW - - ----K command-pane key #key_end kend str kw - - ----- end key #key_help khlp str kq - - ----- help key #key_newline knl str nl - - ----K newline key #key_next_pane knpn str kv - - ----K next-pane key #key_prev_cmd kppn str kp - - ----K previous-command key #key_prev_pane kppn str kV - - ----K previous-pane key #key_quit kquit str kQ - - ----K quit key #key_select ksel str kU - - ----- select key #key_scroll_left kscl str kz - - ----K scroll left #key_scroll_right kscr str kZ - - ----K scroll right #key_tab ktab str ko - - ----K tab key #key_smap_in1 kmpf1 str Kv - - ----K special mapped key 1 input #key_smap_out1 kmpt1 str KV - - ----K special mapped key 1 output #key_smap_in2 kmpf2 str Kw - - ----K special mapped key 2 input #key_smap_out2 kmpt2 str KW - - ----K special mapped key 2 output #key_smap_in3 kmpf3 str Kx - - ----K special mapped key 3 input #key_smap_out3 kmpt3 str KX - - ----K special mapped key 3 output #key_smap_in4 kmpf4 str Ky - - ----K special mapped key 4 input #key_smap_out4 kmpt4 str KY - - ----K special mapped key 4 output #key_smap_in5 kmpf5 str Kz - - ----K special mapped key 5 input #key_smap_out5 kmpt5 str KZ - - ----K special mapped key 5 output #appl_defined_str apstr str za - - ----K application-defined string # The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in # the IBM manual pages, so the cap name strings are guesses. The terminfo # names are almost certainly right, the termcap ones almost certainly wrong. #key_smap_in6 kmpf6 str k! - - ----K special mapped key 6 input #key_smap_out6 kmpt6 str K@ - - ----K special mapped key 6 output #key_smap_in7 kmpf7 str k# - - ----K special mapped key 7 input #key_smap_out7 kmpt7 str K$ - - ----K special mapped key 7 output #key_smap_in8 kmpf8 str k% - - ----K special mapped key 8 input #key_smap_out8 kmpt8 str K^ - - ----K special mapped key 8 output #key_smap_in9 kmpf9 str k& - - ----K special mapped key 9 input #key_smap_out9 kmpt9 str K* - - ----K special mapped key 9 output # Undocumented capabilities end here #key_sf1 ksf1 str S1 - - ----K special function key 1 #key_sf2 ksf2 str S2 - - ----K special function key 2 #key_sf3 ksf3 str S3 - - ----K special function key 3 #key_sf4 ksf4 str S4 - - ----K special function key 4 #key_sf5 ksf5 str S5 - - ----K special function key 5 #key_sf6 ksf6 str S6 - - ----K special function key 6 #key_sf7 ksf7 str S7 - - ----K special function key 7 #key_sf8 ksf8 str S8 - - ----K special function key 8 #key_sf9 ksf9 str S9 - - ----K special function key 9 #key_sf10 ksf10 str SA - - ----K special function key 10 # AIX version 3 documents different codes for F11, F12 and does not mention # F13-F64. AIX version 4 uses the same naming for F0-F63 as above. #key_f11 kf11 str k< - - ----- function key 11 #key_f12 kf12 str k> - - ----- function key 12 # Undocumented capabilities end here. #key_action kact str kJ - - ----K sent by action key # The IBM docs say these capabilities are for table-drawing, and are # valid only for aixterm descriptions. #enter_topline_mode topl str tp - - ----K start top-line mode #enter_bottom_mode btml str bm - - ----K start bottom-line mode #enter_rvert_mode rvert str rv - - ----K start right-vertical mode #enter_lvert_mode lvert str lv - - ----K start left-vertical mode # ############################################################################# # # ALIAS DECLARATIONS # # Here we set up aliases for translating extensions into standard terminfo. # #---------------------------------- Termcap aliases ------------------------- # # BSD aliases: # # This is a common error in many termcap files. We'll get notified during # translation when this (or any other alias) fires. # capalias sb sr BSD scroll text down # # AT&T extensions: # # The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of # nonstandard capabilities. Its signature is the KM capability, used to name # some sort of keymap file. EE, BO, CI, CV, XS, DS, FL and FE are in this # set. Comments in the original, and a little cross-checking with other AT&T # documentation, seem to establish the following mappings: # capalias BO mr AT&T enter_reverse_mode capalias CI vi AT&T cursor_invisible capalias CV ve AT&T cursor_normal capalias DS mh AT&T enter_dim_mode #capalias EE me AT&T exit_attribute_mode capalias FE LF AT&T label_on capalias FL LO AT&T label_off capalias XS mk AT&T enter_secure_mode # # We comment out EE because the conflicting XENIX EE is more common in # old entries. # # XENIX extensions: # # These are the ones we know how to translate directly: # capalias EE mh XENIX exit_attribute_mode capalias GE ae XENIX exit_alt_charset_mode capalias GS as XENIX enter_alt_charset_mode capalias CF vi XENIX cursor_invis capalias CO ve XENIX cursor_normal capalias EN @7 XENIX key_end capalias HM kh XENIX key_home capalias LD kL XENIX key_dl capalias PD kN XENIX key_npage capalias PN po XENIX prtr_off capalias PS pf XENIX prtr_on capalias PU kP XENIX key_ppage capalias RT @8 XENIX kent capalias UP ku XENIX kcuu1 capalias G6 IGNORE XENIX double-ACS_ULCORNER capalias G7 IGNORE XENIX double-ACS_LLCORNER capalias G5 IGNORE XENIX double-ACS_URCORNER capalias G8 IGNORE XENIX double-ACS_LRCORNER capalias Gr IGNORE XENIX double-ACS_LTEE capalias Gr IGNORE XENIX double-ACS_RTEE capalias Gu IGNORE XENIX double-ACS_BTEE capalias Gd IGNORE XENIX double ACS_TTEE capalias Gh IGNORE XENIX double-ACS_HLINE capalias Gv IGNORE XENIX double-ACS_VLINE capalias Gc IGNORE XENIX double-ACS_PLUS capalias GG IGNORE XENIX acs-glitch # # IBM extensions: # capalias kq %1 IBM key_help # # Iris extensions: # capalias HS mh IRIS enter_dim_mode # # Tektronix extensions: # capalias KA k; Tek key_f10 capalias KB F1 Tek key_f11 capalias KC F2 Tek key_f12 capalias KD F3 Tek key_f13 capalias KE F4 Tek key_f14 capalias KF F5 Tek key_f15 capalias BC Sb Tek set_background capalias FC Sf Tek set_foreground # # There are also the following: # # XENIX XENIX variable name name clash with terminfo? # ----- ------------------- ------------------------- # CL key_char_left # CR key_char_right # CW key_change_window # HP ?? # LF key_linefeed label_off # NU key_next_unlocked_cell # PL ?? # PR ?? # RC key_recalc remove_clock # RF key_toggle_ref req_for_input # WL key_word_left # WR key_word_right # # If you know what any of the question-marked ones mean, please tell us. # #--------------------------------- Terminfo aliases ------------------------ # # IBM extensions: # infoalias font0 s0ds IBM set0_des_seq infoalias font1 s1ds IBM set1_des_seq infoalias font2 s2ds IBM set2_des_seq infoalias font3 s3ds IBM set3_des_seq infoalias kbtab kcbt IBM key_backtab infoalias ksel kslt IBM key_select # # Some others are identical to SVr4/XPG4 capabilities, in particular: # kcmd, kend, khlp, and kf11...kf63. # ############################################################################# ncurses-6.0-20160213/include/edit_cfg.sh0000755000175100001440000000550607411225330016205 0ustar tomusers#!/bin/sh # $Id: edit_cfg.sh,v 1.12 2001/12/23 00:52:40 tom Exp $ ############################################################################## # Copyright (c) 1998,2000,2001 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996,1997,2000 # # Edit the default value of the term.h file based on the autoconf-generated # values: # # $1 = ncurses_cfg.h # $2 = term.h # BAK=save$$ TMP=edit$$ trap "rm -f $BAK $TMP" 0 1 2 5 15 for name in \ HAVE_TCGETATTR \ HAVE_TERMIOS_H \ HAVE_TERMIO_H \ BROKEN_LINKER do mv $2 $BAK if ( grep "[ ]$name[ ]" $1 2>&1 >$TMP ) then value=1 else value=0 fi echo '** edit: '$name $value sed \ -e "s@#define ${name}.*\$@#define $name $value@" \ -e "s@#if $name\$@#if $value /* $name */@" \ -e "s@#if !$name\$@#if $value /* !$name */@" \ $BAK >$2 if (cmp -s $2 $BAK) then mv $BAK $2 else rm -f $BAK fi done ncurses-6.0-20160213/include/tic.h0000644000175100001440000003055211731153122015030 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996 on * ****************************************************************************/ /* * $Id: tic.h,v 1.69 2012/03/17 18:22:10 tom Exp $ * tic.h - Global variables and structures for the terminfo * compiler. */ #ifndef __TIC_H #define __TIC_H /* *INDENT-OFF* */ #ifdef __cplusplus extern "C" { #endif #include /* for the _tracef() prototype, ERR/OK, bool defs */ /* ** The format of compiled terminfo files is as follows: ** ** Header (12 bytes), containing information given below ** Names Section, containing the names of the terminal ** Boolean Section, containing the values of all of the ** boolean capabilities ** A null byte may be inserted here to make ** sure that the Number Section begins on an ** even word boundary. ** Number Section, containing the values of all of the numeric ** capabilities, each as a short integer ** String Section, containing short integer offsets into the ** String Table, one per string capability ** String Table, containing the actual characters of the string ** capabilities. ** ** NOTE that all short integers in the file are stored using VAX/PDP-style ** byte-order, i.e., least-significant byte first. ** ** There is no structure definition here because it would only confuse ** matters. Terminfo format is a raw byte layout, not a structure ** dump. If you happen to be on a little-endian machine with 16-bit ** shorts that requires no padding between short members in a struct, ** then there is a natural C structure that captures the header, but ** not very helpfully. */ #define MAGIC 0432 /* first two bytes of a compiled entry */ #undef BYTE #define BYTE(p,n) (unsigned char)((p)[n]) #define IS_NEG1(p) ((BYTE(p,0) == 0377) && (BYTE(p,1) == 0377)) #define IS_NEG2(p) ((BYTE(p,0) == 0376) && (BYTE(p,1) == 0377)) #define LOW_MSB(p) (BYTE(p,0) + 256*BYTE(p,1)) #define IS_TIC_MAGIC(p) (LOW_MSB(p) == MAGIC) /* * The "maximum" here is misleading; XSI guarantees minimum values, which a * given implementation may exceed. */ #define MAX_NAME_SIZE 512 /* maximum legal name field size (XSI:127) */ #define MAX_ENTRY_SIZE 4096 /* maximum legal entry size */ /* * The maximum size of individual name or alias is guaranteed in XSI to be at * least 14, since that corresponds to the older filename lengths. Newer * systems allow longer aliases, though not many terminal descriptions are * written to use them. The MAX_ALIAS symbol is used for warnings. */ #if HAVE_LONG_FILE_NAMES #define MAX_ALIAS 32 /* smaller than POSIX minimum for PATH_MAX */ #else #define MAX_ALIAS 14 /* SVr3 filename length */ #endif /* location of user's personal info directory */ #define PRIVATE_INFO "%s/.terminfo" /* plug getenv("HOME") into %s */ /* * Some traces are designed to be used via tic's verbose option (and similar in * infocmp and toe) rather than the 'trace()' function. So we use the bits * above the normal trace() parameter as a debug-level. */ #define MAX_DEBUG_LEVEL 15 #define DEBUG_LEVEL(n) ((n) << TRACE_SHIFT) #define set_trace_level(n) \ _nc_tracing &= DEBUG_LEVEL(MAX_DEBUG_LEVEL), \ _nc_tracing |= DEBUG_LEVEL(n) #ifdef TRACE #define DEBUG(n, a) if (_nc_tracing >= DEBUG_LEVEL(n)) _tracef a #else #define DEBUG(n, a) /*nothing*/ #endif extern NCURSES_EXPORT_VAR(unsigned) _nc_tracing; extern NCURSES_EXPORT(void) _nc_tracef (char *, ...) GCC_PRINTFLIKE(1,2); extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *); extern NCURSES_EXPORT(const char *) _nc_visbuf2 (int, const char *); /* * These are the types of tokens returned by the scanner. The first * three are also used in the hash table of capability names. The scanner * returns one of these values after loading the specifics into the global * structure curr_token. */ #define BOOLEAN 0 /* Boolean capability */ #define NUMBER 1 /* Numeric capability */ #define STRING 2 /* String-valued capability */ #define CANCEL 3 /* Capability to be cancelled in following tc's */ #define NAMES 4 /* The names for a terminal type */ #define UNDEF 5 /* Undefined */ #define NO_PUSHBACK -1 /* used in pushtype to indicate no pushback */ /* * The global structure in which the specific parts of a * scanned token are returned. * */ struct token { char *tk_name; /* name of capability */ int tk_valnumber; /* value of capability (if a number) */ char *tk_valstring; /* value of capability (if a string) */ }; extern NCURSES_EXPORT_VAR(struct token) _nc_curr_token; /* * Offsets to string capabilities, with the corresponding functionkey * codes. */ struct tinfo_fkeys { unsigned offset; chtype code; }; #if BROKEN_LINKER #define _nc_tinfo_fkeys _nc_tinfo_fkeysf() extern NCURSES_EXPORT(const struct tinfo_fkeys *) _nc_tinfo_fkeysf (void); #else extern NCURSES_EXPORT_VAR(const struct tinfo_fkeys) _nc_tinfo_fkeys[]; #endif typedef short HashValue; /* * The file comp_captab.c contains an array of these structures, one * per possible capability. These are indexed by a hash table array of * pointers to the same structures for use by the parser. */ struct name_table_entry { const char *nte_name; /* name to hash on */ int nte_type; /* BOOLEAN, NUMBER or STRING */ HashValue nte_index; /* index of associated variable in its array */ HashValue nte_link; /* index in table of next hash, or -1 */ }; /* * Use this structure to hide differences between terminfo and termcap * tables. */ typedef struct { unsigned table_size; const HashValue *table_data; HashValue (*hash_of)(const char *); int (*compare_names)(const char *, const char *); } HashData; struct alias { const char *from; const char *to; const char *source; }; extern NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool); extern NCURSES_EXPORT(const HashData *) _nc_get_hash_info (bool); extern NCURSES_EXPORT(const HashValue *) _nc_get_hash_table (bool); extern NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool); #define NOTFOUND ((struct name_table_entry *) 0) /* * The casts are required for correct sign-propagation with systems such as * AIX, IRIX64, Solaris which default to unsigned characters. The C standard * leaves this detail unspecified. */ /* out-of-band values for representing absent capabilities */ #define ABSENT_BOOLEAN ((signed char)-1) /* 255 */ #define ABSENT_NUMERIC (-1) #define ABSENT_STRING (char *)0 /* out-of-band values for representing cancels */ #define CANCELLED_BOOLEAN ((signed char)-2) /* 254 */ #define CANCELLED_NUMERIC (-2) #define CANCELLED_STRING (char *)(-1) #define VALID_BOOLEAN(s) ((unsigned char)(s) <= 1) /* reject "-1" */ #define VALID_NUMERIC(s) ((s) >= 0) #define VALID_STRING(s) ((s) != CANCELLED_STRING && (s) != ABSENT_STRING) /* termcap entries longer than this may break old binaries */ #define MAX_TERMCAP_LENGTH 1023 /* this is a documented limitation of terminfo */ #define MAX_TERMINFO_LENGTH 4096 #ifndef TERMINFO #define TERMINFO "/usr/share/terminfo" #endif #ifdef NCURSES_TERM_ENTRY_H_incl /* access.c */ extern NCURSES_EXPORT(unsigned) _nc_pathlast (const char *); extern NCURSES_EXPORT(bool) _nc_is_abs_path (const char *); extern NCURSES_EXPORT(bool) _nc_is_dir_path (const char *); extern NCURSES_EXPORT(bool) _nc_is_file_path (const char *); extern NCURSES_EXPORT(char *) _nc_basename (char *); extern NCURSES_EXPORT(char *) _nc_rootname (char *); /* comp_hash.c: name lookup */ extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_entry (const char *, const HashValue *); extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_type_entry (const char *, int, bool); /* comp_scan.c: lexical analysis */ extern NCURSES_EXPORT(int) _nc_get_token (bool); extern NCURSES_EXPORT(void) _nc_panic_mode (char); extern NCURSES_EXPORT(void) _nc_push_token (int); extern NCURSES_EXPORT(void) _nc_reset_input (FILE *, char *); extern NCURSES_EXPORT_VAR(int) _nc_curr_col; extern NCURSES_EXPORT_VAR(int) _nc_curr_line; extern NCURSES_EXPORT_VAR(int) _nc_syntax; extern NCURSES_EXPORT_VAR(int) _nc_strict_bsd; extern NCURSES_EXPORT_VAR(long) _nc_comment_end; extern NCURSES_EXPORT_VAR(long) _nc_comment_start; extern NCURSES_EXPORT_VAR(long) _nc_curr_file_pos; extern NCURSES_EXPORT_VAR(long) _nc_start_line; #define SYN_TERMINFO 0 #define SYN_TERMCAP 1 /* comp_error.c: warning & abort messages */ extern NCURSES_EXPORT(const char *) _nc_get_source (void); extern NCURSES_EXPORT(void) _nc_err_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; extern NCURSES_EXPORT(void) _nc_get_type (char *name); extern NCURSES_EXPORT(void) _nc_set_source (const char *const); extern NCURSES_EXPORT(void) _nc_set_type (const char *const); extern NCURSES_EXPORT(void) _nc_syserr_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; extern NCURSES_EXPORT(void) _nc_warning (const char *const,...) GCC_PRINTFLIKE(1,2); extern NCURSES_EXPORT_VAR(bool) _nc_suppress_warnings; /* comp_expand.c: expand string into readable form */ extern NCURSES_EXPORT(char *) _nc_tic_expand (const char *, bool, int); /* comp_scan.c: decode string from readable form */ extern NCURSES_EXPORT(int) _nc_trans_string (char *, char *); /* captoinfo.c: capability conversion */ extern NCURSES_EXPORT(char *) _nc_captoinfo (const char *, const char *, int const); extern NCURSES_EXPORT(char *) _nc_infotocap (const char *, const char *, int const); /* home_terminfo.c */ extern NCURSES_EXPORT(char *) _nc_home_terminfo (void); /* lib_tparm.c */ #define NUM_PARM 9 extern NCURSES_EXPORT_VAR(int) _nc_tparm_err; extern NCURSES_EXPORT(int) _nc_tparm_analyze(const char *, char **, int *); /* lib_tputs.c */ extern NCURSES_EXPORT_VAR(int) _nc_nulls_sent; /* Add one for every null sent */ /* comp_main.c: compiler main */ extern const char * _nc_progname; /* db_iterator.c */ extern NCURSES_EXPORT(const char *) _nc_next_db(DBDIRS *, int *); extern NCURSES_EXPORT(const char *) _nc_tic_dir (const char *); extern NCURSES_EXPORT(void) _nc_first_db(DBDIRS *, int *); extern NCURSES_EXPORT(void) _nc_last_db(void); /* write_entry.c */ extern NCURSES_EXPORT(int) _nc_tic_written (void); #endif /* NCURSES_TERM_ENTRY_H_incl */ #ifdef __cplusplus } #endif /* *INDENT-ON* */ #endif /* __TIC_H */ ncurses-6.0-20160213/include/MKhashsize.sh0000755000175100001440000000476410516537463016531 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 1998,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: MKhashsize.sh,v 1.7 2006/10/22 00:45:39 tom Exp $ # # MKhashsize.sh --- generate size include for hash functions # echo "/*" echo " * hashsize.h -- hash and token table constants" echo " */" CAPS="${1-Caps}" TABSIZE=`grep -v '^[ #]' $CAPS | grep -v "^$" | grep -v "^capalias"| grep -v "^infoalias" | wc -l` echo "" echo "#define CAPTABSIZE ${TABSIZE}" echo "#define HASHTABSIZE (${TABSIZE} * 2)" ncurses-6.0-20160213/include/curses.wide0000644000175100001440000004266112273267200016267 0ustar tomusers/* $Id: curses.wide,v 1.46 2014/02/01 22:00:32 tom Exp $ */ /* * vile:cmode: * This file is part of ncurses, designed to be appended after curses.h.in * (see that file for the relevant copyright). */ #define _XOPEN_CURSES 1 #if NCURSES_WIDECHAR extern NCURSES_EXPORT_VAR(cchar_t *) _nc_wacs; #define NCURSES_WACS(c) (&_nc_wacs[NCURSES_CAST(unsigned char,(c))]) #define WACS_BSSB NCURSES_WACS('l') #define WACS_SSBB NCURSES_WACS('m') #define WACS_BBSS NCURSES_WACS('k') #define WACS_SBBS NCURSES_WACS('j') #define WACS_SBSS NCURSES_WACS('u') #define WACS_SSSB NCURSES_WACS('t') #define WACS_SSBS NCURSES_WACS('v') #define WACS_BSSS NCURSES_WACS('w') #define WACS_BSBS NCURSES_WACS('q') #define WACS_SBSB NCURSES_WACS('x') #define WACS_SSSS NCURSES_WACS('n') #define WACS_ULCORNER WACS_BSSB #define WACS_LLCORNER WACS_SSBB #define WACS_URCORNER WACS_BBSS #define WACS_LRCORNER WACS_SBBS #define WACS_RTEE WACS_SBSS #define WACS_LTEE WACS_SSSB #define WACS_BTEE WACS_SSBS #define WACS_TTEE WACS_BSSS #define WACS_HLINE WACS_BSBS #define WACS_VLINE WACS_SBSB #define WACS_PLUS WACS_SSSS #define WACS_S1 NCURSES_WACS('o') /* scan line 1 */ #define WACS_S9 NCURSES_WACS('s') /* scan line 9 */ #define WACS_DIAMOND NCURSES_WACS('`') /* diamond */ #define WACS_CKBOARD NCURSES_WACS('a') /* checker board */ #define WACS_DEGREE NCURSES_WACS('f') /* degree symbol */ #define WACS_PLMINUS NCURSES_WACS('g') /* plus/minus */ #define WACS_BULLET NCURSES_WACS('~') /* bullet */ /* Teletype 5410v1 symbols */ #define WACS_LARROW NCURSES_WACS(',') /* arrow left */ #define WACS_RARROW NCURSES_WACS('+') /* arrow right */ #define WACS_DARROW NCURSES_WACS('.') /* arrow down */ #define WACS_UARROW NCURSES_WACS('-') /* arrow up */ #define WACS_BOARD NCURSES_WACS('h') /* board of squares */ #define WACS_LANTERN NCURSES_WACS('i') /* lantern symbol */ #define WACS_BLOCK NCURSES_WACS('0') /* solid square block */ /* ncurses extensions */ #define WACS_S3 NCURSES_WACS('p') /* scan line 3 */ #define WACS_S7 NCURSES_WACS('r') /* scan line 7 */ #define WACS_LEQUAL NCURSES_WACS('y') /* less/equal */ #define WACS_GEQUAL NCURSES_WACS('z') /* greater/equal */ #define WACS_PI NCURSES_WACS('{') /* Pi */ #define WACS_NEQUAL NCURSES_WACS('|') /* not equal */ #define WACS_STERLING NCURSES_WACS('}') /* UK pound sign */ /* double lines */ #define WACS_BDDB NCURSES_WACS('C') #define WACS_DDBB NCURSES_WACS('D') #define WACS_BBDD NCURSES_WACS('B') #define WACS_DBBD NCURSES_WACS('A') #define WACS_DBDD NCURSES_WACS('G') #define WACS_DDDB NCURSES_WACS('F') #define WACS_DDBD NCURSES_WACS('H') #define WACS_BDDD NCURSES_WACS('I') #define WACS_BDBD NCURSES_WACS('R') #define WACS_DBDB NCURSES_WACS('Y') #define WACS_DDDD NCURSES_WACS('E') #define WACS_D_ULCORNER WACS_BDDB #define WACS_D_LLCORNER WACS_DDBB #define WACS_D_URCORNER WACS_BBDD #define WACS_D_LRCORNER WACS_DBBD #define WACS_D_RTEE WACS_DBDD #define WACS_D_LTEE WACS_DDDB #define WACS_D_BTEE WACS_DDBD #define WACS_D_TTEE WACS_BDDD #define WACS_D_HLINE WACS_BDBD #define WACS_D_VLINE WACS_DBDB #define WACS_D_PLUS WACS_DDDD /* thick lines */ #define WACS_BTTB NCURSES_WACS('L') #define WACS_TTBB NCURSES_WACS('M') #define WACS_BBTT NCURSES_WACS('K') #define WACS_TBBT NCURSES_WACS('J') #define WACS_TBTT NCURSES_WACS('U') #define WACS_TTTB NCURSES_WACS('T') #define WACS_TTBT NCURSES_WACS('V') #define WACS_BTTT NCURSES_WACS('W') #define WACS_BTBT NCURSES_WACS('Q') #define WACS_TBTB NCURSES_WACS('X') #define WACS_TTTT NCURSES_WACS('N') #define WACS_T_ULCORNER WACS_BTTB #define WACS_T_LLCORNER WACS_TTBB #define WACS_T_URCORNER WACS_BBTT #define WACS_T_LRCORNER WACS_TBBT #define WACS_T_RTEE WACS_TBTT #define WACS_T_LTEE WACS_TTTB #define WACS_T_BTEE WACS_TTBT #define WACS_T_TTEE WACS_BTTT #define WACS_T_HLINE WACS_BTBT #define WACS_T_VLINE WACS_TBTB #define WACS_T_PLUS WACS_TTTT /* * Function prototypes for wide-character operations. * * "generated" comments should include ":WIDEC" to make the corresponding * functions ifdef'd in lib_gen.c * * "implemented" comments do not need this marker. */ extern NCURSES_EXPORT(int) add_wch (const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) add_wchnstr (const cchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) add_wchstr (const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) addnwstr (const wchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) addwstr (const wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) bkgrnd (const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(void) bkgrndset (const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) border_set (const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*); /* generated:WIDEC */ extern NCURSES_EXPORT(int) box_set (WINDOW *, const cchar_t *, const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) echo_wchar (const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) erasewchar (wchar_t*); /* implemented */ extern NCURSES_EXPORT(int) get_wch (wint_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) get_wstr (wint_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) getbkgrnd (cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) getcchar (const cchar_t *, wchar_t*, attr_t*, NCURSES_PAIRS_T*, void*); /* implemented */ extern NCURSES_EXPORT(int) getn_wstr (wint_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) hline_set (const cchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) in_wch (cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) in_wchnstr (cchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) in_wchstr (cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) innwstr (wchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) ins_nwstr (const wchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) ins_wch (const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) ins_wstr (const wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) inwstr (wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(NCURSES_CONST char*) key_name (wchar_t); /* implemented */ extern NCURSES_EXPORT(int) killwchar (wchar_t *); /* implemented */ extern NCURSES_EXPORT(int) mvadd_wch (int, int, const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvadd_wchnstr (int, int, const cchar_t *, int);/* generated:WIDEC */ extern NCURSES_EXPORT(int) mvadd_wchstr (int, int, const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvaddnwstr (int, int, const wchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvaddwstr (int, int, const wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvget_wch (int, int, wint_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvget_wstr (int, int, wint_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvgetn_wstr (int, int, wint_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvhline_set (int, int, const cchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvin_wch (int, int, cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvin_wchnstr (int, int, cchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvin_wchstr (int, int, cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvinnwstr (int, int, wchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvins_nwstr (int, int, const wchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvins_wch (int, int, const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvins_wstr (int, int, const wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvinwstr (int, int, wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvvline_set (int, int, const cchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwadd_wch (WINDOW *, int, int, const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwadd_wchnstr (WINDOW *, int, int, const cchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwadd_wchstr (WINDOW *, int, int, const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwaddnwstr (WINDOW *, int, int, const wchar_t *, int);/* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwaddwstr (WINDOW *, int, int, const wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwget_wch (WINDOW *, int, int, wint_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwget_wstr (WINDOW *, int, int, wint_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwgetn_wstr (WINDOW *, int, int, wint_t *, int);/* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwhline_set (WINDOW *, int, int, const cchar_t *, int);/* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwin_wch (WINDOW *, int, int, cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwin_wchnstr (WINDOW *, int,int, cchar_t *,int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwin_wchstr (WINDOW *, int, int, cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwinnwstr (WINDOW *, int, int, wchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwins_nwstr (WINDOW *, int,int, const wchar_t *,int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwins_wch (WINDOW *, int, int, const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwins_wstr (WINDOW *, int, int, const wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwinwstr (WINDOW *, int, int, wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) mvwvline_set (WINDOW *, int,int, const cchar_t *,int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) pecho_wchar (WINDOW *, const cchar_t *); /* implemented */ extern NCURSES_EXPORT(int) setcchar (cchar_t *, const wchar_t *, const attr_t, NCURSES_PAIRS_T, const void *); /* implemented */ extern NCURSES_EXPORT(int) slk_wset (int, const wchar_t *, int); /* implemented */ extern NCURSES_EXPORT(attr_t) term_attrs (void); /* implemented */ extern NCURSES_EXPORT(int) unget_wch (const wchar_t); /* implemented */ extern NCURSES_EXPORT(int) vid_attr (attr_t, NCURSES_PAIRS_T, void *); /* implemented */ extern NCURSES_EXPORT(int) vid_puts (attr_t, NCURSES_PAIRS_T, void *, NCURSES_OUTC); /* implemented */ extern NCURSES_EXPORT(int) vline_set (const cchar_t *, int); /* generated:WIDEC */ extern NCURSES_EXPORT(int) wadd_wch (WINDOW *,const cchar_t *); /* implemented */ extern NCURSES_EXPORT(int) wadd_wchnstr (WINDOW *,const cchar_t *,int); /* implemented */ extern NCURSES_EXPORT(int) wadd_wchstr (WINDOW *,const cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) waddnwstr (WINDOW *,const wchar_t *,int); /* implemented */ extern NCURSES_EXPORT(int) waddwstr (WINDOW *,const wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) wbkgrnd (WINDOW *,const cchar_t *); /* implemented */ extern NCURSES_EXPORT(void) wbkgrndset (WINDOW *,const cchar_t *); /* implemented */ extern NCURSES_EXPORT(int) wborder_set (WINDOW *,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*); /* implemented */ extern NCURSES_EXPORT(int) wecho_wchar (WINDOW *, const cchar_t *); /* implemented */ extern NCURSES_EXPORT(int) wget_wch (WINDOW *, wint_t *); /* implemented */ extern NCURSES_EXPORT(int) wget_wstr (WINDOW *, wint_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) wgetbkgrnd (WINDOW *, cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) wgetn_wstr (WINDOW *,wint_t *, int); /* implemented */ extern NCURSES_EXPORT(int) whline_set (WINDOW *, const cchar_t *, int); /* implemented */ extern NCURSES_EXPORT(int) win_wch (WINDOW *, cchar_t *); /* implemented */ extern NCURSES_EXPORT(int) win_wchnstr (WINDOW *, cchar_t *, int); /* implemented */ extern NCURSES_EXPORT(int) win_wchstr (WINDOW *, cchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) winnwstr (WINDOW *, wchar_t *, int); /* implemented */ extern NCURSES_EXPORT(int) wins_nwstr (WINDOW *, const wchar_t *, int); /* implemented */ extern NCURSES_EXPORT(int) wins_wch (WINDOW *, const cchar_t *); /* implemented */ extern NCURSES_EXPORT(int) wins_wstr (WINDOW *, const wchar_t *); /* generated:WIDEC */ extern NCURSES_EXPORT(int) winwstr (WINDOW *, wchar_t *); /* implemented */ extern NCURSES_EXPORT(wchar_t*) wunctrl (cchar_t *); /* implemented */ extern NCURSES_EXPORT(int) wvline_set (WINDOW *, const cchar_t *, int); /* implemented */ #if NCURSES_SP_FUNCS extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(term_attrs) (SCREEN*); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(unget_wch) (SCREEN*, const wchar_t); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(wchar_t*) NCURSES_SP_NAME(wunctrl) (SCREEN*, cchar_t *); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_attr) (SCREEN*, attr_t, NCURSES_PAIRS_T, void *); /* implemented:SP_FUNC */ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_puts) (SCREEN*, attr_t, NCURSES_PAIRS_T, void *, NCURSES_SP_OUTC); /* implemented:SP_FUNC */ #endif #ifndef NCURSES_NOMACROS /* * XSI curses macros for XPG4 conformance. */ #define add_wch(c) wadd_wch(stdscr,(c)) #define add_wchnstr(str,n) wadd_wchnstr(stdscr,(str),(n)) #define add_wchstr(str) wadd_wchstr(stdscr,(str)) #define addnwstr(wstr,n) waddnwstr(stdscr,(wstr),(n)) #define addwstr(wstr) waddwstr(stdscr,(wstr)) #define bkgrnd(c) wbkgrnd(stdscr,(c)) #define bkgrndset(c) wbkgrndset(stdscr,(c)) #define border_set(l,r,t,b,tl,tr,bl,br) wborder_set(stdscr,(l),(r),(t),(b),tl,tr,bl,br) #define box_set(w,v,h) wborder_set((w),(v),(v),(h),(h),0,0,0,0) #define echo_wchar(c) wecho_wchar(stdscr,(c)) #define get_wch(c) wget_wch(stdscr,(c)) #define get_wstr(t) wget_wstr(stdscr,(t)) #define getbkgrnd(wch) wgetbkgrnd(stdscr,(wch)) #define getn_wstr(t,n) wgetn_wstr(stdscr,(t),(n)) #define hline_set(c,n) whline_set(stdscr,(c),(n)) #define in_wch(c) win_wch(stdscr,(c)) #define in_wchnstr(c,n) win_wchnstr(stdscr,(c),(n)) #define in_wchstr(c) win_wchstr(stdscr,(c)) #define innwstr(c,n) winnwstr(stdscr,(c),(n)) #define ins_nwstr(t,n) wins_nwstr(stdscr,(t),(n)) #define ins_wch(c) wins_wch(stdscr,(c)) #define ins_wstr(t) wins_wstr(stdscr,(t)) #define inwstr(c) winwstr(stdscr,(c)) #define vline_set(c,n) wvline_set(stdscr,(c),(n)) #define wadd_wchstr(win,str) wadd_wchnstr((win),(str),-1) #define waddwstr(win,wstr) waddnwstr((win),(wstr),-1) #define wget_wstr(w,t) wgetn_wstr((w),(t),-1) #define win_wchstr(w,c) win_wchnstr((w),(c),-1) #define wins_wstr(w,t) wins_nwstr((w),(t),-1) #if !NCURSES_OPAQUE #define wgetbkgrnd(win,wch) ((win) ? (*(wch) = (win)->_bkgrnd) : *(wch), OK) #endif #define mvadd_wch(y,x,c) mvwadd_wch(stdscr,(y),(x),(c)) #define mvadd_wchnstr(y,x,s,n) mvwadd_wchnstr(stdscr,(y),(x),(s),(n)) #define mvadd_wchstr(y,x,s) mvwadd_wchstr(stdscr,(y),(x),(s)) #define mvaddnwstr(y,x,wstr,n) mvwaddnwstr(stdscr,(y),(x),(wstr),(n)) #define mvaddwstr(y,x,wstr) mvwaddwstr(stdscr,(y),(x),(wstr)) #define mvget_wch(y,x,c) mvwget_wch(stdscr,(y),(x),(c)) #define mvget_wstr(y,x,t) mvwget_wstr(stdscr,(y),(x),(t)) #define mvgetn_wstr(y,x,t,n) mvwgetn_wstr(stdscr,(y),(x),(t),(n)) #define mvhline_set(y,x,c,n) mvwhline_set(stdscr,(y),(x),(c),(n)) #define mvin_wch(y,x,c) mvwin_wch(stdscr,(y),(x),(c)) #define mvin_wchnstr(y,x,c,n) mvwin_wchnstr(stdscr,(y),(x),(c),(n)) #define mvin_wchstr(y,x,c) mvwin_wchstr(stdscr,(y),(x),(c)) #define mvinnwstr(y,x,c,n) mvwinnwstr(stdscr,(y),(x),(c),(n)) #define mvins_nwstr(y,x,t,n) mvwins_nwstr(stdscr,(y),(x),(t),(n)) #define mvins_wch(y,x,c) mvwins_wch(stdscr,(y),(x),(c)) #define mvins_wstr(y,x,t) mvwins_wstr(stdscr,(y),(x),(t)) #define mvinwstr(y,x,c) mvwinwstr(stdscr,(y),(x),(c)) #define mvvline_set(y,x,c,n) mvwvline_set(stdscr,(y),(x),(c),(n)) #define mvwadd_wch(win,y,x,c) (wmove(win,(y),(x)) == ERR ? ERR : wadd_wch((win),(c))) #define mvwadd_wchnstr(win,y,x,s,n) (wmove(win,(y),(x)) == ERR ? ERR : wadd_wchnstr((win),(s),(n))) #define mvwadd_wchstr(win,y,x,s) (wmove(win,(y),(x)) == ERR ? ERR : wadd_wchstr((win),(s))) #define mvwaddnwstr(win,y,x,wstr,n) (wmove(win,(y),(x)) == ERR ? ERR : waddnwstr((win),(wstr),(n))) #define mvwaddwstr(win,y,x,wstr) (wmove(win,(y),(x)) == ERR ? ERR : waddwstr((win),(wstr))) #define mvwget_wch(win,y,x,c) (wmove(win,(y),(x)) == ERR ? ERR : wget_wch((win),(c))) #define mvwget_wstr(win,y,x,t) (wmove(win,(y),(x)) == ERR ? ERR : wget_wstr((win),(t))) #define mvwgetn_wstr(win,y,x,t,n) (wmove(win,(y),(x)) == ERR ? ERR : wgetn_wstr((win),(t),(n))) #define mvwhline_set(win,y,x,c,n) (wmove(win,(y),(x)) == ERR ? ERR : whline_set((win),(c),(n))) #define mvwin_wch(win,y,x,c) (wmove(win,(y),(x)) == ERR ? ERR : win_wch((win),(c))) #define mvwin_wchnstr(win,y,x,c,n) (wmove(win,(y),(x)) == ERR ? ERR : win_wchnstr((win),(c),(n))) #define mvwin_wchstr(win,y,x,c) (wmove(win,(y),(x)) == ERR ? ERR : win_wchstr((win),(c))) #define mvwinnwstr(win,y,x,c,n) (wmove(win,(y),(x)) == ERR ? ERR : winnwstr((win),(c),(n))) #define mvwins_nwstr(win,y,x,t,n) (wmove(win,(y),(x)) == ERR ? ERR : wins_nwstr((win),(t),(n))) #define mvwins_wch(win,y,x,c) (wmove(win,(y),(x)) == ERR ? ERR : wins_wch((win),(c))) #define mvwins_wstr(win,y,x,t) (wmove(win,(y),(x)) == ERR ? ERR : wins_wstr((win),(t))) #define mvwinwstr(win,y,x,c) (wmove(win,(y),(x)) == ERR ? ERR : winwstr((win),(c))) #define mvwvline_set(win,y,x,c,n) (wmove(win,(y),(x)) == ERR ? ERR : wvline_set((win),(c),(n))) #endif /* NCURSES_NOMACROS */ #if defined(TRACE) || defined(NCURSES_TEST) extern NCURSES_EXPORT(const char *) _nc_viswbuf(const wchar_t *); extern NCURSES_EXPORT(const char *) _nc_viswibuf(const wint_t *); #endif #endif /* NCURSES_WIDECHAR */ ncurses-6.0-20160213/include/ncurses_mingw.h0000644000175100001440000000667412331243043017143 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 2008-on * * * ****************************************************************************/ /* $Id: ncurses_mingw.h,v 1.3 2014/05/03 19:40:19 juergen Exp $ */ /* * This is a placeholder up to now and describes what needs to be implemented * to support I/O to external terminals with ncurses on the Windows OS. */ #if __MINGW32__ #ifndef _NC_MINGWH #define _NC_MINGWH #define USE_CONSOLE_DRIVER 1 #undef TERMIOS #define TERMIOS 1 typedef unsigned char cc_t; typedef unsigned int tcflag_t; typedef unsigned int speed_t; typedef unsigned short otcflag_t; typedef unsigned char ospeed_t; #define NCCS 18 struct termios { tcflag_t c_iflag; tcflag_t c_oflag; tcflag_t c_cflag; tcflag_t c_lflag; char c_line; cc_t c_cc[NCCS]; speed_t c_ispeed; speed_t c_ospeed; }; extern NCURSES_EXPORT(int) _nc_mingw_tcsetattr( int fd, int optional_actions, const struct termios* arg); extern NCURSES_EXPORT(int) _nc_mingw_tcgetattr( int fd, struct termios* arg); extern NCURSES_EXPORT(int) _nc_mingw_tcflush( int fd, int queue); extern NCURSES_EXPORT(void) _nc_set_term_driver(void* term); #endif /* _NC_MINGWH */ #endif /* __MINGW32__ */ ncurses-6.0-20160213/include/MKterm.h.awk.in0000644000175100001440000004104112203746524016642 0ustar tomusers# vile:awkmode BEGIN { print "/****************************************************************************" print " * Copyright (c) 1998-2011,2013 Free Software Foundation, Inc. *" print " * *" print " * Permission is hereby granted, free of charge, to any person obtaining a *" print " * copy of this software and associated documentation files (the *" print " * \"Software\"), to deal in the Software without restriction, including *" print " * without limitation the rights to use, copy, modify, merge, publish, *" print " * distribute, distribute with modifications, sublicense, and/or sell *" print " * copies of the Software, and to permit persons to whom the Software is *" print " * furnished to do so, subject to the following conditions: *" print " * *" print " * The above copyright notice and this permission notice shall be included *" print " * in all copies or substantial portions of the Software. *" print " * *" print " * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS *" print " * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *" print " * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *" print " * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *" print " * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *" print " * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *" print " * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *" print " * *" print " * Except as contained in this notice, the name(s) of the above copyright *" print " * holders shall not be used in advertising or otherwise to promote the *" print " * sale, use or other dealings in this Software without prior written *" print " * authorization. *" print " ****************************************************************************/" print "" print "/****************************************************************************/" print "/* Author: Zeyd M. Ben-Halim 1992,1995 */" print "/* and: Eric S. Raymond */" print "/* and: Thomas E. Dickey 1995-on */" print "/****************************************************************************/" print "" print "/* $Id: MKterm.h.awk.in,v 1.62 2013/08/17 19:21:56 tom Exp $ */" print "" print "/*" print "** term.h -- Definition of struct term" print "*/" print "" print "#ifndef NCURSES_TERM_H_incl" print "#define NCURSES_TERM_H_incl 1" print "" print "#undef NCURSES_VERSION" print "#define NCURSES_VERSION \"@NCURSES_MAJOR@.@NCURSES_MINOR@\"" print "" print "#include " print "" print "#ifdef __cplusplus" print "extern \"C\" {" print "#endif" print "" print "/* Make this file self-contained by providing defaults for the HAVE_TERMIO[S]_H" print " * definition (based on the system for which this was configured)." print " */" print "" print "#undef NCURSES_CONST" print "#define NCURSES_CONST @NCURSES_CONST@" print "" print "#undef NCURSES_SBOOL" print "#define NCURSES_SBOOL @NCURSES_SBOOL@" print "" print "#undef NCURSES_USE_DATABASE" print "#define NCURSES_USE_DATABASE @NCURSES_USE_DATABASE@" print "" print "#undef NCURSES_USE_TERMCAP" print "#define NCURSES_USE_TERMCAP @NCURSES_USE_TERMCAP@" print "" print "#undef NCURSES_XNAMES" print "#define NCURSES_XNAMES @NCURSES_XNAMES@" print "" print "/* We will use these symbols to hide differences between" print " * termios/termio/sgttyb interfaces." print " */" print "#undef TTY" print "#undef SET_TTY" print "#undef GET_TTY" print "" print "/* Assume POSIX termio if we have the header and function */" print "/* #if HAVE_TERMIOS_H && HAVE_TCGETATTR */" print "#if @HAVE_TERMIOS_H@ && @HAVE_TCGETATTR@" print "" print "#undef TERMIOS" print "#define TERMIOS 1" print "" print "#include " print "#define TTY struct termios" print "" print "#else /* !HAVE_TERMIOS_H */" print "" print "/* #if HAVE_TERMIO_H */" print "#if @HAVE_TERMIO_H@" print "" print "#undef TERMIOS" print "#define TERMIOS 1" print "" print "#include " print "#define TTY struct termio" print "" print "#else /* !HAVE_TERMIO_H */" print "" print "#if __MINGW32__" print "# include " print "# define TTY struct termios" print "#else" print "#undef TERMIOS" print "#include " print "#include " print "#define TTY struct sgttyb" print "#endif /* MINGW32 */" print "#endif /* HAVE_TERMIO_H */" print "" print "#endif /* HAVE_TERMIOS_H */" print "" print "#ifdef TERMIOS" print "#define GET_TTY(fd, buf) tcgetattr(fd, buf)" print "#define SET_TTY(fd, buf) tcsetattr(fd, TCSADRAIN, buf)" print "#else" print "#define GET_TTY(fd, buf) gtty(fd, buf)" print "#define SET_TTY(fd, buf) stty(fd, buf)" print "#endif" print "" print "#define NAMESIZE 256" print "" print "#define CUR cur_term->type." print "" } $2 == "%%-STOP-HERE-%%" { print "" printf "#define BOOLWRITE %d\n", BoolCount printf "#define NUMWRITE %d\n", NumberCount printf "#define STRWRITE %d\n", StringCount print "" print "/* older synonyms for some capabilities */" print "#define beehive_glitch no_esc_ctlc" print "#define teleray_glitch dest_tabs_magic_smso" print "#define micro_char_size micro_col_size" print "" print "#ifdef __INTERNAL_CAPS_VISIBLE" } /^#/ {next;} $1 == "acs_chars" {acsindex = StringCount} $3 == "bool" { printf "#define %-30s CUR Booleans[%d]\n", $1, BoolCount++ } $3 == "num" { printf "#define %-30s CUR Numbers[%d]\n", $1, NumberCount++ } $3 == "str" { printf "#define %-30s CUR Strings[%d]\n", $1, StringCount++ } END { print "#endif /* __INTERNAL_CAPS_VISIBLE */" print "" print "" print "/*" print " * Predefined terminfo array sizes" print " */" printf "#define BOOLCOUNT %d\n", BoolCount printf "#define NUMCOUNT %d\n", NumberCount printf "#define STRCOUNT %d\n", StringCount print "" print "/* used by code for comparing entries */" print "#define acs_chars_index ", acsindex print "" print "typedef struct termtype { /* in-core form of terminfo data */" print " char *term_names; /* str_table offset of term names */" print " char *str_table; /* pointer to string table */" print " NCURSES_SBOOL *Booleans; /* array of boolean values */" print " short *Numbers; /* array of integer values */" print " char **Strings; /* array of string offsets */" print "" print "#if NCURSES_XNAMES" print " char *ext_str_table; /* pointer to extended string table */" print " char **ext_Names; /* corresponding names */" print "" print " unsigned short num_Booleans;/* count total Booleans */" print " unsigned short num_Numbers; /* count total Numbers */" print " unsigned short num_Strings; /* count total Strings */" print "" print " unsigned short ext_Booleans;/* count extensions to Booleans */" print " unsigned short ext_Numbers; /* count extensions to Numbers */" print " unsigned short ext_Strings; /* count extensions to Strings */" print "#endif /* NCURSES_XNAMES */" print "" print "} TERMTYPE;" print "" print "typedef struct term { /* describe an actual terminal */" print " TERMTYPE type; /* terminal type description */" print " short Filedes; /* file description being written to */" print " TTY Ottyb, /* original state of the terminal */" print " Nttyb; /* current state of the terminal */" print " int _baudrate; /* used to compute padding */" print " char * _termname; /* used for termname() */" print "} TERMINAL;" print "" print "#if @BROKEN_LINKER@ && !@cf_cv_enable_reentrant@" print "extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;" print "#elif @cf_cv_enable_reentrant@" print "NCURSES_WRAPPED_VAR(TERMINAL *, cur_term);" print "#define cur_term NCURSES_PUBLIC_VAR(cur_term())" print "#else" print "extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;" print "#endif" print "" print "#if @BROKEN_LINKER@ || @cf_cv_enable_reentrant@" print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolnames);" print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolcodes);" print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolfnames);" print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numnames);" print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numcodes);" print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numfnames);" print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strnames);" print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strcodes);" print "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strfnames);" print "" print "#define boolnames NCURSES_PUBLIC_VAR(boolnames())" print "#define boolcodes NCURSES_PUBLIC_VAR(boolcodes())" print "#define boolfnames NCURSES_PUBLIC_VAR(boolfnames())" print "#define numnames NCURSES_PUBLIC_VAR(numnames())" print "#define numcodes NCURSES_PUBLIC_VAR(numcodes())" print "#define numfnames NCURSES_PUBLIC_VAR(numfnames())" print "#define strnames NCURSES_PUBLIC_VAR(strnames())" print "#define strcodes NCURSES_PUBLIC_VAR(strcodes())" print "#define strfnames NCURSES_PUBLIC_VAR(strfnames())" print "" print "#else" print "" print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolnames[];" print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolcodes[];" print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolfnames[];" print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numnames[];" print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numcodes[];" print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numfnames[];" print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strnames[];" print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strcodes[];" print "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strfnames[];" print "" print "#endif" print "" print "/* internals */" print "extern NCURSES_EXPORT(int) _nc_set_tty_mode (TTY *buf);" print "extern NCURSES_EXPORT(int) _nc_get_tty_mode (TTY *buf);" print "extern NCURSES_EXPORT(int) _nc_read_entry (const char * const, char * const, TERMTYPE *const);" print "extern NCURSES_EXPORT(int) _nc_read_file_entry (const char *const, TERMTYPE *);" print "extern NCURSES_EXPORT(void) _nc_init_termtype (TERMTYPE *const);" print "extern NCURSES_EXPORT(int) _nc_read_termtype (TERMTYPE *, char *, int);" print "extern NCURSES_EXPORT(char *) _nc_first_name (const char *const);" print "extern NCURSES_EXPORT(int) _nc_name_match (const char *const, const char *const, const char *const);" print "extern NCURSES_EXPORT(const TERMTYPE *) _nc_fallback (const char *);" print "" print "/* entry points */" print "extern NCURSES_EXPORT(TERMINAL *) set_curterm (TERMINAL *);" print "extern NCURSES_EXPORT(int) del_curterm (TERMINAL *);" print "" print "/* miscellaneous entry points */" print "extern NCURSES_EXPORT(int) restartterm (NCURSES_CONST char *, int, int *);" print "extern NCURSES_EXPORT(int) setupterm (NCURSES_CONST char *,int,int *);" print "" print "/* terminfo entry points, also declared in curses.h */" print "#if !defined(__NCURSES_H)" print "extern NCURSES_EXPORT(char *) tigetstr (NCURSES_CONST char *);" print "extern NCURSES_EXPORT_VAR(char) ttytype[];" print "extern NCURSES_EXPORT(int) putp (const char *);" print "extern NCURSES_EXPORT(int) tigetflag (NCURSES_CONST char *);" print "extern NCURSES_EXPORT(int) tigetnum (NCURSES_CONST char *);" print "" print "#if @NCURSES_TPARM_VARARGS@ /* NCURSES_TPARM_VARARGS */" print "extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...); /* special */" print "#else" print "extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, long,long,long,long,long,long,long,long,long); /* special */" print "extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...); /* special */" print "#endif" print "" print "extern NCURSES_EXPORT(char *) tiparm (const char *, ...); /* special */" print "" print "#endif /* __NCURSES_H */" print "" print "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */" print "#if !defined(NCURSES_TERMCAP_H_incl)" print "extern NCURSES_EXPORT(char *) tgetstr (NCURSES_CONST char *, char **);" print "extern NCURSES_EXPORT(char *) tgoto (const char *, int, int);" print "extern NCURSES_EXPORT(int) tgetent (char *, const char *);" print "extern NCURSES_EXPORT(int) tgetflag (NCURSES_CONST char *);" print "extern NCURSES_EXPORT(int) tgetnum (NCURSES_CONST char *);" print "extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int));" print "#endif /* NCURSES_TERMCAP_H_incl */" print "" print "/*" print " * Include curses.h before term.h to enable these extensions." print " */" print "#if defined(NCURSES_SP_FUNCS) && (NCURSES_SP_FUNCS != 0)" print "" print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tigetstr) (SCREEN*, NCURSES_CONST char *);" print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(putp) (SCREEN*, const char *);" print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tigetflag) (SCREEN*, NCURSES_CONST char *);" print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tigetnum) (SCREEN*, NCURSES_CONST char *);" print "" print "#if @NCURSES_TPARM_VARARGS@ /* NCURSES_TPARM_VARARGS */" print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tparm) (SCREEN*, NCURSES_CONST char *, ...); /* special */" print "#else" print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tparm) (SCREEN*, NCURSES_CONST char *, long,long,long,long,long,long,long,long,long); /* special */" print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tparm_varargs) (SCREEN*, NCURSES_CONST char *, ...); /* special */" print "#endif" print "" print "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */" print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tgetstr) (SCREEN*, NCURSES_CONST char *, char **);" print "extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tgoto) (SCREEN*, const char *, int, int);" print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetent) (SCREEN*, char *, const char *);" print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetflag) (SCREEN*, NCURSES_CONST char *);" print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetnum) (SCREEN*, NCURSES_CONST char *);" print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tputs) (SCREEN*, const char *, int, NCURSES_SP_OUTC);" print "" print "extern NCURSES_EXPORT(TERMINAL *) NCURSES_SP_NAME(set_curterm) (SCREEN*, TERMINAL *);" print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(del_curterm) (SCREEN*, TERMINAL *);" print "" print "extern NCURSES_EXPORT(int) NCURSES_SP_NAME(restartterm) (SCREEN*, NCURSES_CONST char *, int, int *);" print "#endif /* NCURSES_SP_FUNCS */" print "" print "#ifdef __cplusplus" print "}" print "#endif" print "" print "#endif /* NCURSES_TERM_H_incl */" } ncurses-6.0-20160213/Ada95/0000755000175100001440000000000012657723566013342 5ustar tomusersncurses-6.0-20160213/Ada95/package/0000755000175100001440000000000012642031005014703 5ustar tomusersncurses-6.0-20160213/Ada95/package/AdaCurses.spec0000644000175100001440000000426012517275413017451 0ustar tomusersSummary: AdaCurses - Ada95 binding for ncurses %define AppProgram AdaCurses %define AppVersion MAJOR.MINOR %define AppRelease YYYYMMDD # $Id: AdaCurses.spec,v 1.15 2015/04/26 23:55:55 tom Exp $ Name: %{AppProgram} Version: %{AppVersion} Release: %{AppRelease} License: MIT Group: Applications/Development URL: ftp://invisible-island.net/%{AppProgram} Source0: %{AppProgram}-%{AppRelease}.tgz Packager: Thomas Dickey %description This is the Ada95 binding from the ncurses MAJOR.MINOR distribution, for patch-date YYYYMMDD. In addition to a library, this package installs sample programs in "bin/AdaCurses" to avoid conflict with other packages. %prep %define debug_package %{nil} # http://fedoraproject.org/wiki/EPEL:Packaging_Autoprovides_and_Requires_Filtering %filter_from_requires /libAdaCurses.so.1/d %filter_setup %setup -q -n %{AppProgram}-%{AppRelease} %build %define ada_libdir %{_prefix}/lib/ada/adalib INSTALL_PROGRAM='${INSTALL}' \ ./configure \ --target %{_target_platform} \ --prefix=%{_prefix} \ --bindir=%{_bindir} \ --libdir=%{_libdir} \ --mandir=%{_mandir} \ --datadir=%{_datadir} \ --disable-rpath-link \ --with-shared \ --with-ada-sharedlib make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT ( cd samples && make install.examples \ DESTDIR=$RPM_BUILD_ROOT \ BINDIR=$RPM_BUILD_ROOT%{_bindir}/%{AppProgram} ) %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %{_bindir}/adacurses*-config %{_bindir}/%{AppProgram}/* %{_libdir}/libAdaCurses.* %{ada_libdir}/libAdaCurses.* %{ada_libdir}/terminal_interface* %{_mandir}/man1/adacurses*-config.1* %{_datadir}/%{AppProgram}/* %{_datadir}/ada/adainclude/terminal_interface* %changelog # each patch should add its ChangeLog entries here * Thu Mar 31 2011 Thomas Dickey - use --with-shared option for consistency with --with-ada-sharelib - ensure that MY_DATADIR is set when installing examples - add ada_libdir symbol to handle special case where libdir is /usr/lib64 - use --disable-rpath-link to link sample programs without rpath * Fri Mar 25 2011 Thomas Dickey - initial version ncurses-6.0-20160213/Ada95/package/debian/0000755000175100001440000000000012642031005016125 5ustar tomusersncurses-6.0-20160213/Ada95/package/debian/rules0000755000175100001440000000424212517254741017226 0ustar tomusers#!/usr/bin/make -f # MAde with the aid of dh_make, by Craig Small # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Cristoph Lameter. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) TARGET_DIR = $(CURDIR)/debian/adacurses SAMPLE_DIR = $(TARGET_DIR)/usr/bin/AdaCurses CFLAGS = ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif configure: configure-stamp configure-stamp: dh_testdir CFLAGS="$(CFLAGS)" ./configure \ --host=$(DEB_HOST_GNU_TYPE) \ --build=$(DEB_BUILD_GNU_TYPE) \ --prefix=/usr \ --disable-rpath-link \ --with-shared \ --with-ada-sharedlib \ --without-pkg-config touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir $(MAKE) touch build-stamp clean: dh_testdir dh_testroot [ ! -f makefile ] || $(MAKE) distclean rm -f configure-stamp build-stamp install-stamp dh_clean install: install-stamp install-stamp: build-stamp dh_testdir dh_testroot dh_clean -k dh_installdirs $(MAKE) install DESTDIR=$(TARGET_DIR) # FIXME: it would be nice to make these into separate packages ( cd samples && $(MAKE) install.examples DESTDIR=$(TARGET_DIR) BINDIR=$(SAMPLE_DIR) ) ( cd doc && $(MAKE) install.html DESTDIR=$(TARGET_DIR) ) touch install-stamp # Build architecture-independent files here. binary-indep: build install # No binary-indep target. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installdocs dh_installexamples dh_installchangelogs NEWS dh_strip dh_compress dh_fixperms dh_installdeb dh_makeshlibs dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install install-stamp ncurses-6.0-20160213/Ada95/package/debian/control0000644000175100001440000000114311543162464017544 0ustar tomusersSource: adacurses Maintainer: Thomas E. Dickey Section: misc Priority: optional Standards-Version: 3.8.4 Build-Depends: debhelper (>= 5) Homepage: http://invisible-island.net/adacurses/ Package: adacurses Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: AdaCurses - Ada95 binding for ncurses This package installs as "adacurses" to avoid conflict with other packages. This is the Ada95 binding from the ncurses distribution. . In addition to a library, this package installs sample programs in "bin/AdaCurses" to avoid conflict with other packages. ncurses-6.0-20160213/Ada95/package/debian/watch0000644000175100001440000000015011543160762017166 0ustar tomusersversion=3 opts=passive ftp://invisible-island.net/AdaCurses/AdaCurses-([\d.]+)\.tgz \ debian uupdate ncurses-6.0-20160213/Ada95/package/debian/docs0000644000175100001440000000000711411671635017011 0ustar tomusersREADME ncurses-6.0-20160213/Ada95/package/debian/source/0000755000175100001440000000000012525715155017444 5ustar tomusersncurses-6.0-20160213/Ada95/package/debian/source/format0000644000175100001440000000001512525715155020653 0ustar tomusers3.0 (native) ncurses-6.0-20160213/Ada95/package/debian/compat0000644000175100001440000000000211363402276017336 0ustar tomusers5 ncurses-6.0-20160213/Ada95/package/debian/copyright0000644000175100001440000000732212642031005020064 0ustar tomusersUpstream source http://invisible-island.net/ncurses/ncurses-examples.html Current ncurses maintainer: Thomas Dickey ------------------------------------------------------------------------------- Files: * Copyright: 1998-2015,2016 Free Software Foundation, Inc. Licence: X11 Files: aclocal.m4 package Copyright: 2010-2015,2016 by Thomas E. Dickey Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. ------------------------------------------------------------------------------- Files: install-sh Copyright: 1994 X Consortium Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other deal- ings in this Software without prior written authorization from the X Consor- tium. FSF changes to this file are in the public domain. Calling this script install-sh is preferred over install.sh, to prevent `make' implicit rules from creating a file called install from it when there is no Makefile. This script is compatible with the BSD install script, but was written from scratch. It can only install one file at a time, a restriction shared with many OS's install programs. On Debian systems, the complete text of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-2' -- vile: txtmode file-encoding=utf-8 ncurses-6.0-20160213/Ada95/package/AdaCurses-doc.spec0000644000175100001440000000227712517273463020225 0ustar tomusersSummary: AdaCurses - Ada95 binding documentation for ncurses %define AppProgram AdaCurses %define AppVersion MAJOR.MINOR %define AppRelease YYYYMMDD %define AppPackage %{AppProgram}-doc # $Id: AdaCurses-doc.spec,v 1.3 2015/04/26 23:39:31 tom Exp $ Name: %{AppPackage} Version: %{AppVersion} Release: %{AppRelease} License: MIT Group: Applications/Development URL: ftp://invisible-island.net/%{AppProgram} Source0: %{AppProgram}-%{AppRelease}.tgz Packager: Thomas Dickey %description This is the Ada95 binding documentation from the ncurses MAJOR.MINOR distribution, for patch-date YYYYMMDD. %prep %define debug_package %{nil} %setup -q -n %{AppProgram}-%{AppRelease} %build INSTALL_PROGRAM='${INSTALL}' \ ./configure \ --target %{_target_platform} \ --prefix=%{_prefix} \ --datadir=%{_datadir} \ --with-ada-sharedlib %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT (cd doc && make install.html DESTDIR=$RPM_BUILD_ROOT ) %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %{_datadir}/doc/AdaCurses %changelog # each patch should add its ChangeLog entries here * Sat Mar 26 2011 Thomas Dickey - initial version ncurses-6.0-20160213/Ada95/include/0000755000175100001440000000000012560514435014747 5ustar tomusersncurses-6.0-20160213/Ada95/include/ncurses_defs0000644000175100001440000001137212137025771017361 0ustar tomusers# $Id: ncurses_defs,v 1.44 2013/04/27 19:50:17 tom Exp $ ############################################################################## # Copyright (c) 2000-2012,2013 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # See "MKncurses_def.sh" for an explanation. # # (hint: don't try to define NDEBUG ;-) BROKEN_LINKER BSD_TPUTS CPP_HAS_PARAM_INIT CURSES_ACS_ARRAY acs_map CURSES_WACS_ARRAY _nc_wacs DECL_ERRNO ETIP_NEEDS_MATH_H GCC_NORETURN /* nothing */ GCC_UNUSED /* nothing */ HAVE_BIG_CORE HAVE_BSD_CGETENT HAVE_BSD_SIGNAL_H HAVE_BTOWC HAVE_BUILTIN_H HAVE_CHGAT 1 HAVE_COLOR_SET 1 HAVE_DIRENT_H HAVE_ERRNO HAVE_FCNTL_H HAVE_FILTER 1 HAVE_FORM_H HAVE_GETBEGX 1 HAVE_GETCURX 1 HAVE_GETCWD HAVE_GETEGID HAVE_GETEUID HAVE_GETMAXX 1 HAVE_GETNSTR HAVE_GETOPT_H HAVE_GETPARX 1 HAVE_GETTIMEOFDAY HAVE_GETTTYNAM HAVE_GETWIN 1 HAVE_GPM_H HAVE_GPP_BUILTIN_H HAVE_GXX_BUILTIN_H HAVE_HAS_KEY HAVE_IOSTREAM HAVE_ISASCII HAVE_ISSETUGID HAVE_LANGINFO_CODESET HAVE_LIBC_H HAVE_LIBDBMALLOC HAVE_LIBDMALLOC HAVE_LIBFORM HAVE_LIBGPM HAVE_LIBMENU HAVE_LIBMPATROL HAVE_LIBPANEL HAVE_LIMITS_H HAVE_LINK HAVE_LOCALE_H HAVE_LONG_FILE_NAMES HAVE_MBLEN HAVE_MBRLEN HAVE_MBRTOWC HAVE_MBSRTOWCS HAVE_MBSTOWCS HAVE_MBTOWC HAVE_MENU_H HAVE_MKSTEMP HAVE_MVVLINE 1 HAVE_MVWVLINE 1 HAVE_NANOSLEEP HAVE_NC_ALLOC_H HAVE_PANEL_H HAVE_POLL HAVE_POLL_H HAVE_PURIFY HAVE_PUTWC HAVE_PUTWIN 1 HAVE_REGEXPR_H_FUNCS HAVE_REGEXP_H_FUNCS HAVE_REGEX_H_FUNCS HAVE_REMOVE HAVE_RESIZETERM HAVE_RESIZE_TERM HAVE_RIPOFFLINE 1 HAVE_SELECT HAVE_SETBUF HAVE_SETBUFFER HAVE_SETUPTERM 1 HAVE_SETVBUF HAVE_SIGACTION HAVE_SIGVEC HAVE_SIZECHANGE HAVE_SLK_COLOR HAVE_SLK_INIT 1 HAVE_STRSTR HAVE_SYMLINK HAVE_SYS_BSDTYPES_H HAVE_SYS_IOCTL_H HAVE_SYS_PARAM_H HAVE_SYS_POLL_H HAVE_SYS_SELECT_H HAVE_SYS_TERMIO_H HAVE_SYS_TIMES_H HAVE_SYS_TIME_H HAVE_SYS_TIME_SELECT HAVE_TCGETATTR HAVE_TCGETPGRP HAVE_TELL HAVE_TERMATTRS 1 HAVE_TERMIOS_H HAVE_TERMIO_H HAVE_TERMNAME 1 HAVE_TERM_H 1 HAVE_TGETENT 1 HAVE_TIGETNUM 1 HAVE_TIGETSTR 1 HAVE_TIMES HAVE_TTYENT_H HAVE_TYPEAHEAD 1 HAVE_TYPEINFO HAVE_TYPE_ATTR_T HAVE_TYPE_SIGACTION HAVE_UNISTD_H HAVE_UNLINK HAVE_USE_DEFAULT_COLORS HAVE_VFSCANF HAVE_VSNPRINTF HAVE_VSSCANF HAVE_WCSRTOMBS HAVE_WCSTOMBS HAVE_WCTOB HAVE_WCTOMB HAVE_WCTYPE_H HAVE_WINSSTR 1 HAVE_WORKING_POLL HAVE_WRESIZE HAVE__DOSCAN MIXEDCASE_FILENAMES NCURSES_CHAR_EQ NCURSES_EXPANDED NCURSES_EXT_COLORS NCURSES_EXT_FUNCS NCURSES_NO_PADDING NCURSES_PATHSEP ':' NEED_PTEM_H NO_LEAKS PURE_TERMINFO STDC_HEADERS SVR4_ACTION SVR4_TERMIO SYSTEM_NAME "unknown" TERMINFO "none" TERMPATH "none" TIME_WITH_SYS_TIME TYPEOF_CHTYPE USE_COLORFGBG USE_DATABASE USE_GETCAP USE_GETCAP_CACHE USE_HARD_TABS USE_HASHED_DB USE_HASHMAP USE_HOME_TERMINFO USE_LINKS USE_MY_MEMMOVE USE_OK_BCOPY USE_RCS_IDS USE_REENTRANT USE_SAFE_SPRINTF USE_SCROLL_HINTS USE_SIGWINCH USE_SYMLINKS USE_SYSMOUSE USE_TERMCAP USE_WEAK_SYMBOLS USE_WIDEC_SUPPORT USE_XMC_SUPPORT ncurses-6.0-20160213/Ada95/include/Makefile.in0000644000175100001440000000702312560514435017016 0ustar tomusers# $Id: Makefile.in,v 1.4 2015/08/05 23:15:41 tom Exp $ ############################################################################## # Copyright (c) 2010-2011,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey # # Makefile for ncurses source code. # # This makes header files used when building Ada95 as a separate tree. # # The variable 'srcdir' refers to the source-distribution, and can be set with # the configure script by "--srcdir=DIR". # turn off _all_ suffix rules; we'll generate our own .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile DESTDIR = @DESTDIR@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ AWK = @AWK@ # These files are generated by this makefile AUTO_SRC = \ ncurses_def.h ################################################################################ all \ libs \ depend \ sources \ install :: $(AUTO_SRC) uninstall :: ncurses_def.h: $(srcdir)/ncurses_defs $(srcdir)/MKncurses_def.sh AWK=$(AWK) $(SHELL) $(srcdir)/MKncurses_def.sh $(srcdir)/ncurses_defs >$@ tags: ctags *.[ch] @MAKE_UPPER_TAGS@TAGS: @MAKE_UPPER_TAGS@ etags *.[ch] mostlyclean :: -rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace clean :: mostlyclean -rm -f $(AUTO_SRC) distclean :: clean -rm -f Makefile realclean :: distclean ############################################################################### # The remainder of this file is automatically generated during configuration ############################################################################### ncurses-6.0-20160213/Ada95/include/MKncurses_def.sh0000755000175100001440000000627007746521242020047 0ustar tomusers#! /bin/sh # $Id: MKncurses_def.sh,v 1.2 2003/10/25 16:19:46 tom Exp $ ############################################################################## # Copyright (c) 2000 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # MKncurses_def.sh -- generate fallback definitions for ncurses_cfg.h # # Author: Thomas E. Dickey 2000 # # Given the choice between constructs such as # # #if defined(foo) && foo # #if foo # # we chose the latter. It is guaranteed by the language standard, and there # appear to be no broken compilers that do not honor that detail. But some # people want to use gcc's -Wundef option (corresponding to one of the less # useful features in Watcom's compiler) to check for misspellings. So we # generate a set of fallback definitions to quiet the warnings without making # the code ugly. # DEFS="${1-ncurses_defs}" cat < 1997 * ****************************************************************************/ /* * $Id: ncurses_cfg.hin,v 1.7 2005/01/02 01:26:58 tom Exp $ * * This is a template-file used to generate the "ncurses_cfg.h" file. * * Rather than list every definition, the configuration script substitutes the * definitions that it finds using 'sed'. You need a patch (original date * 971222) to autoconf 2.12 or 2.13 to do this. * * See: * http://invisible-island.net/autoconf/ * ftp://invisible-island.net/autoconf/ */ #ifndef NC_CONFIG_H #define NC_CONFIG_H @DEFS@ #include /* The C compiler may not treat these properly but C++ has to */ #ifdef __cplusplus #undef const #undef inline #else #if defined(lint) || defined(TRACE) #undef inline #define inline /* nothing */ #endif #endif /* On HP-UX, the C compiler doesn't grok mbstate_t without -D_XOPEN_SOURCE=500. However, this causes problems on IRIX. So, we #define mbstate_t to int in configure.in only for the C compiler if needed. */ #ifndef __cplusplus #ifdef NEED_MBSTATE_T_DEF #define mbstate_t int #endif #endif #endif /* NC_CONFIG_H */ ncurses-6.0-20160213/Ada95/aclocal.m40000644000175100001440000035452112615262355015200 0ustar tomusersdnl*************************************************************************** dnl Copyright (c) 2010-2014,2015 Free Software Foundation, Inc. * dnl * dnl Permission is hereby granted, free of charge, to any person obtaining a * dnl copy of this software and associated documentation files (the * dnl "Software"), to deal in the Software without restriction, including * dnl without limitation the rights to use, copy, modify, merge, publish, * dnl distribute, distribute with modifications, sublicense, and/or sell * dnl copies of the Software, and to permit persons to whom the Software is * dnl furnished to do so, subject to the following conditions: * dnl * dnl The above copyright notice and this permission notice shall be included * dnl in all copies or substantial portions of the Software. * dnl * dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. * dnl * dnl Except as contained in this notice, the name(s) of the above copyright * dnl holders shall not be used in advertising or otherwise to promote the * dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl dnl Author: Thomas E. Dickey dnl dnl $Id: aclocal.m4,v 1.109 2015/11/01 01:03:41 tom Exp $ dnl Macros used in NCURSES Ada95 auto-configuration script. dnl dnl These macros are maintained separately from NCURSES. The copyright on dnl this file applies to the aggregation of macros and does not affect use of dnl these macros in other applications. dnl dnl See http://invisible-island.net/autoconf/ for additional information. dnl dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl CF_ACVERSION_CHECK version: 5 updated: 2014/06/04 19:11:49 dnl ------------------ dnl Conditionally generate script according to whether we're using a given autoconf. dnl dnl $1 = version to compare against dnl $2 = code to use if AC_ACVERSION is at least as high as $1. dnl $3 = code to use if AC_ACVERSION is older than $1. define([CF_ACVERSION_CHECK], [ ifdef([AC_ACVERSION], ,[ifdef([AC_AUTOCONF_VERSION],[m4_copy([AC_AUTOCONF_VERSION],[AC_ACVERSION])],[m4_copy([m4_PACKAGE_VERSION],[AC_ACVERSION])])])dnl ifdef([m4_version_compare], [m4_if(m4_version_compare(m4_defn([AC_ACVERSION]), [$1]), -1, [$3], [$2])], [CF_ACVERSION_COMPARE( AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])), AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), AC_ACVERSION, [$2], [$3])])])dnl dnl --------------------------------------------------------------------------- dnl CF_ACVERSION_COMPARE version: 3 updated: 2012/10/03 18:39:53 dnl -------------------- dnl CF_ACVERSION_COMPARE(MAJOR1, MINOR1, TERNARY1, dnl MAJOR2, MINOR2, TERNARY2, dnl PRINTABLE2, not FOUND, FOUND) define([CF_ACVERSION_COMPARE], [ifelse(builtin([eval], [$2 < $5]), 1, [ifelse([$8], , ,[$8])], [ifelse([$9], , ,[$9])])])dnl dnl --------------------------------------------------------------------------- dnl CF_ADA_INCLUDE_DIRS version: 8 updated: 2013/10/14 04:24:07 dnl ------------------- dnl Construct the list of include-options for the C programs in the Ada95 dnl binding. AC_DEFUN([CF_ADA_INCLUDE_DIRS], [ ACPPFLAGS="-I. -I../include -I../../include $ACPPFLAGS" if test "$srcdir" != "."; then ACPPFLAGS="-I\${srcdir}/../../include $ACPPFLAGS" fi if test "$GCC" != yes; then ACPPFLAGS="$ACPPFLAGS -I\${includedir}" elif test "$includedir" != "/usr/include"; then if test "$includedir" = '${prefix}/include' ; then if test x$prefix != x/usr ; then ACPPFLAGS="$ACPPFLAGS -I\${includedir}" fi else ACPPFLAGS="$ACPPFLAGS -I\${includedir}" fi fi AC_SUBST(ACPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_ADAFLAGS version: 1 updated: 2010/06/19 15:22:18 dnl --------------- dnl Add to $ADAFLAGS, which is substituted into makefile and scripts. AC_DEFUN([CF_ADD_ADAFLAGS],[ ADAFLAGS="$ADAFLAGS $1" AC_SUBST(ADAFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_CFLAGS version: 12 updated: 2015/04/12 15:39:00 dnl ------------- dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS dnl The second parameter if given makes this macro verbose. dnl dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS, dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily dnl confused by the quotes (which require backslashes to keep them usable). AC_DEFUN([CF_ADD_CFLAGS], [ cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $1 do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,$cf_tst_cppflags) ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)]) CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)]) CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)]) EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi AC_SUBST(EXTRA_CPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_INCDIR version: 14 updated: 2015/05/25 20:53:04 dnl ------------- dnl Add an include-directory to $CPPFLAGS. Don't add /usr/include, since it's dnl redundant. We don't normally need to add -I/usr/local/include for gcc, dnl but old versions (and some misinstalled ones) need that. To make things dnl worse, gcc 3.x may give error messages if -I/usr/local/include is added to dnl the include-path). AC_DEFUN([CF_ADD_INCDIR], [ if test -n "$1" ; then for cf_add_incdir in $1 do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" AC_TRY_COMPILE([#include ], [printf("Hello")], [], [cf_have_incdir=yes]) CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then CF_VERBOSE(adding $cf_add_incdir to include-path) ifelse([$2],,CPPFLAGS,[$2])="$ifelse([$2],,CPPFLAGS,[$2]) -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIB version: 2 updated: 2010/06/02 05:03:05 dnl ---------- dnl Add a library, used to enforce consistency. dnl dnl $1 = library to add, without the "-l" dnl $2 = variable to update (default $LIBS) AC_DEFUN([CF_ADD_LIB],[CF_ADD_LIBS(-l$1,ifelse($2,,LIBS,[$2]))])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIBDIR version: 10 updated: 2015/04/18 08:56:57 dnl ------------- dnl Adds to the library-path dnl dnl Some machines have trouble with multiple -L options. dnl dnl $1 is the (list of) directory(s) to add dnl $2 is the optional name of the variable to update (default LDFLAGS) dnl AC_DEFUN([CF_ADD_LIBDIR], [ if test -n "$1" ; then for cf_add_libdir in $1 do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then CF_VERBOSE(adding $cf_add_libdir to library-path) ifelse([$2],,LDFLAGS,[$2])="-L$cf_add_libdir $ifelse([$2],,LDFLAGS,[$2])" fi fi done fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIBS version: 2 updated: 2014/07/13 14:33:27 dnl ----------- dnl Add one or more libraries, used to enforce consistency. Libraries are dnl prepended to an existing list, since their dependencies are assumed to dnl already exist in the list. dnl dnl $1 = libraries to add, with the "-l", etc. dnl $2 = variable to update (default $LIBS) AC_DEFUN([CF_ADD_LIBS],[ cf_add_libs="$1" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in [$]ifelse($2,,LIBS,[$2]) do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done ifelse($2,,LIBS,[$2])="$cf_add_libs" ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_SUBDIR_PATH version: 4 updated: 2013/10/08 17:47:05 dnl ------------------ dnl Append to a search-list for a nonstandard header/lib-file dnl $1 = the variable to return as result dnl $2 = the package name dnl $3 = the subdirectory, e.g., bin, include or lib dnl $4 = the directory under which we will test for subdirectories dnl $5 = a directory that we do not want $4 to match AC_DEFUN([CF_ADD_SUBDIR_PATH], [ test "x$4" != "x$5" && \ test -d "$4" && \ ifelse([$5],NONE,,[(test -z "$5" || test x$5 = xNONE || test "x$4" != "x$5") &&]) { test -n "$verbose" && echo " ... testing for $3-directories under $4" test -d $4/$3 && $1="[$]$1 $4/$3" test -d $4/$3/$2 && $1="[$]$1 $4/$3/$2" test -d $4/$3/$2/$3 && $1="[$]$1 $4/$3/$2/$3" test -d $4/$2/$3 && $1="[$]$1 $4/$2/$3" test -d $4/$2/$3/$2 && $1="[$]$1 $4/$2/$3/$2" } ])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31 dnl -------------- dnl Allow user to disable a normally-on option. AC_DEFUN([CF_ARG_DISABLE], [CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_OPTION version: 5 updated: 2015/05/10 19:52:14 dnl ------------- dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus dnl values. dnl dnl Parameters: dnl $1 = option name dnl $2 = help-string dnl $3 = action to perform if option is not default dnl $4 = action if perform if option is default dnl $5 = default option value (either 'yes' or 'no') AC_DEFUN([CF_ARG_OPTION], [AC_ARG_ENABLE([$1],[$2],[test "$enableval" != ifelse([$5],no,yes,no) && enableval=ifelse([$5],no,no,yes) if test "$enableval" != "$5" ; then ifelse([$3],,[ :]dnl ,[ $3]) ifelse([$4],,,[ else $4]) fi],[enableval=$5 ifelse([$4],,,[ $4 ])dnl ])])dnl dnl --------------------------------------------------------------------------- dnl CF_AR_FLAGS version: 6 updated: 2015/10/10 15:25:05 dnl ----------- dnl Check for suitable "ar" (archiver) options for updating an archive. dnl dnl In particular, handle some obsolete cases where the "-" might be omitted, dnl as well as a workaround for breakage of make's archive rules by the GNU dnl binutils "ar" program. AC_DEFUN([CF_AR_FLAGS],[ AC_REQUIRE([CF_PROG_AR]) AC_CACHE_CHECK(for options to update archives, cf_cv_ar_flags,[ cf_cv_ar_flags=unknown for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv do # check if $ARFLAGS already contains this choice if test "x$ARFLAGS" != "x" ; then cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"` if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then cf_cv_ar_flags= break fi fi rm -f conftest.$ac_cv_objext rm -f conftest.a cat >conftest.$ac_ext <&AC_FD_CC $AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext 2>&AC_FD_CC 1>/dev/null if test -f conftest.a ; then cf_cv_ar_flags=$cf_ar_flags break fi else CF_VERBOSE(cannot compile test-program) break fi done rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext ]) if test -n "$ARFLAGS" ; then if test -n "$cf_cv_ar_flags" ; then ARFLAGS="$ARFLAGS $cf_cv_ar_flags" fi else ARFLAGS=$cf_cv_ar_flags fi AC_SUBST(ARFLAGS) ]) dnl --------------------------------------------------------------------------- dnl CF_BUILD_CC version: 7 updated: 2012/10/06 15:31:55 dnl ----------- dnl If we're cross-compiling, allow the user to override the tools and their dnl options. The configure script is oriented toward identifying the host dnl compiler, etc., but we need a build compiler to generate parts of the dnl source. dnl dnl $1 = default for $CPPFLAGS dnl $2 = default for $LIBS AC_DEFUN([CF_BUILD_CC],[ CF_ACVERSION_CHECK(2.52,, [AC_REQUIRE([CF_PROG_EXT])]) if test "$cross_compiling" = yes ; then # defaults that we might want to override : ${BUILD_CFLAGS:=''} : ${BUILD_CPPFLAGS:='ifelse([$1],,,[$1])'} : ${BUILD_LDFLAGS:=''} : ${BUILD_LIBS:='ifelse([$2],,,[$2])'} : ${BUILD_EXEEXT:='$x'} : ${BUILD_OBJEXT:='o'} AC_ARG_WITH(build-cc, [ --with-build-cc=XXX the build C compiler ($BUILD_CC)], [BUILD_CC="$withval"], [AC_CHECK_PROGS(BUILD_CC, gcc cc cl)]) AC_MSG_CHECKING(for native build C compiler) AC_MSG_RESULT($BUILD_CC) AC_MSG_CHECKING(for native build C preprocessor) AC_ARG_WITH(build-cpp, [ --with-build-cpp=XXX the build C preprocessor ($BUILD_CPP)], [BUILD_CPP="$withval"], [BUILD_CPP='${BUILD_CC} -E']) AC_MSG_RESULT($BUILD_CPP) AC_MSG_CHECKING(for native build C flags) AC_ARG_WITH(build-cflags, [ --with-build-cflags=XXX the build C compiler-flags ($BUILD_CFLAGS)], [BUILD_CFLAGS="$withval"]) AC_MSG_RESULT($BUILD_CFLAGS) AC_MSG_CHECKING(for native build C preprocessor-flags) AC_ARG_WITH(build-cppflags, [ --with-build-cppflags=XXX the build C preprocessor-flags ($BUILD_CPPFLAGS)], [BUILD_CPPFLAGS="$withval"]) AC_MSG_RESULT($BUILD_CPPFLAGS) AC_MSG_CHECKING(for native build linker-flags) AC_ARG_WITH(build-ldflags, [ --with-build-ldflags=XXX the build linker-flags ($BUILD_LDFLAGS)], [BUILD_LDFLAGS="$withval"]) AC_MSG_RESULT($BUILD_LDFLAGS) AC_MSG_CHECKING(for native build linker-libraries) AC_ARG_WITH(build-libs, [ --with-build-libs=XXX the build libraries (${BUILD_LIBS})], [BUILD_LIBS="$withval"]) AC_MSG_RESULT($BUILD_LIBS) # this assumes we're on Unix. BUILD_EXEEXT= BUILD_OBJEXT=o : ${BUILD_CC:='${CC}'} if ( test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '${CC}' ) ; then AC_MSG_ERROR([Cross-build requires two compilers. Use --with-build-cc to specify the native compiler.]) fi else : ${BUILD_CC:='${CC}'} : ${BUILD_CPP:='${CPP}'} : ${BUILD_CFLAGS:='${CFLAGS}'} : ${BUILD_CPPFLAGS:='${CPPFLAGS}'} : ${BUILD_LDFLAGS:='${LDFLAGS}'} : ${BUILD_LIBS:='${LIBS}'} : ${BUILD_EXEEXT:='$x'} : ${BUILD_OBJEXT:='o'} fi AC_SUBST(BUILD_CC) AC_SUBST(BUILD_CPP) AC_SUBST(BUILD_CFLAGS) AC_SUBST(BUILD_CPPFLAGS) AC_SUBST(BUILD_LDFLAGS) AC_SUBST(BUILD_LIBS) AC_SUBST(BUILD_EXEEXT) AC_SUBST(BUILD_OBJEXT) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CC_ENV_FLAGS version: 2 updated: 2015/04/12 15:39:00 dnl --------------- dnl Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content dnl into CC. This will not help with broken scripts that wrap the compiler with dnl options, but eliminates a more common category of user confusion. AC_DEFUN([CF_CC_ENV_FLAGS], [ # This should have been defined by AC_PROG_CC : ${CC:=cc} AC_MSG_CHECKING(\$CC variable) case "$CC" in (*[[\ \ ]]-[[IUD]]*) AC_MSG_RESULT(broken) AC_MSG_WARN(your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options) # humor him... cf_flags=`echo "$CC" | sed -e 's/^[[^ ]]*[[ ]]//'` CC=`echo "$CC" | sed -e 's/[[ ]].*//'` CF_ADD_CFLAGS($cf_flags) ;; (*) AC_MSG_RESULT(ok) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_CFG_DEFAULTS version: 11 updated: 2015/04/17 21:13:04 dnl --------------- dnl Determine the default configuration into which we'll install ncurses. This dnl can be overridden by the user's command-line options. There's two items to dnl look for: dnl 1. the prefix (e.g., /usr) dnl 2. the header files (e.g., /usr/include/ncurses) dnl We'll look for a previous installation of ncurses and use the same defaults. dnl dnl We don't use AC_PREFIX_DEFAULT, because it gets evaluated too soon, and dnl we don't use AC_PREFIX_PROGRAM, because we cannot distinguish ncurses's dnl programs from a vendor's. AC_DEFUN([CF_CFG_DEFAULTS], [ AC_MSG_CHECKING(for prefix) if test "x$prefix" = "xNONE" ; then case "$cf_cv_system_name" in # non-vendor systems don't have a conflict (openbsd*|freebsd*|mirbsd*|linux*|cygwin*|msys*|k*bsd*-gnu|mingw*) prefix=/usr ;; (*) prefix=$ac_default_prefix ;; esac fi AC_MSG_RESULT($prefix) if test "x$prefix" = "xNONE" ; then AC_MSG_CHECKING(for default include-directory) test -n "$verbose" && echo 1>&AC_FD_MSG for cf_symbol in \ $includedir \ $includedir/ncurses \ $prefix/include \ $prefix/include/ncurses \ /usr/local/include \ /usr/local/include/ncurses \ /usr/include \ /usr/include/ncurses do cf_dir=`eval echo $cf_symbol` if test -f $cf_dir/curses.h ; then if ( fgrep NCURSES_VERSION $cf_dir/curses.h 2>&1 >/dev/null ) ; then includedir="$cf_symbol" test -n "$verbose" && echo $ac_n " found " 1>&AC_FD_MSG break fi fi test -n "$verbose" && echo " tested $cf_dir" 1>&AC_FD_MSG done AC_MSG_RESULT($includedir) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_CACHE version: 12 updated: 2012/10/02 20:55:03 dnl -------------- dnl Check if we're accidentally using a cache from a different machine. dnl Derive the system name, as a check for reusing the autoconf cache. dnl dnl If we've packaged config.guess and config.sub, run that (since it does a dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM dnl which is useful in cross-compiles. dnl dnl Note: we would use $ac_config_sub, but that is one of the places where dnl autoconf 2.5x broke compatibility with autoconf 2.13 AC_DEFUN([CF_CHECK_CACHE], [ if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then ifelse([$1],,[AC_CANONICAL_HOST],[$1]) system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" if test -z "$system_name" ; then system_name="`(hostname) 2>/dev/null`" fi fi test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name",[Define to the system name.]) AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"]) test -z "$system_name" && system_name="$cf_cv_system_name" test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name) if test ".$system_name" != ".$cf_cv_system_name" ; then AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)) AC_MSG_ERROR("Please remove config.cache and try again.") fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CLANG_COMPILER version: 2 updated: 2013/11/19 19:23:35 dnl ----------------- dnl Check if the given compiler is really clang. clang's C driver defines dnl __GNUC__ (fooling the configure script into setting $GCC to yes) but does dnl not ignore some gcc options. dnl dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from dnl the wrappers for gcc and g++ warnings. dnl dnl $1 = GCC (default) or GXX dnl $2 = CLANG_COMPILER (default) dnl $3 = CFLAGS (default) or CXXFLAGS AC_DEFUN([CF_CLANG_COMPILER],[ ifelse([$2],,CLANG_COMPILER,[$2])=no if test "$ifelse([$1],,[$1],GCC)" = yes ; then AC_MSG_CHECKING(if this is really Clang ifelse([$1],GXX,C++,C) compiler) cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])" ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -Qunused-arguments" AC_TRY_COMPILE([],[ #ifdef __clang__ #else make an error #endif ],[ifelse([$2],,CLANG_COMPILER,[$2])=yes cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" ],[]) ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS" AC_MSG_RESULT($ifelse([$2],,CLANG_COMPILER,[$2])) fi ]) dnl --------------------------------------------------------------------------- dnl CF_CURSES_HEADER version: 5 updated: 2015/04/23 20:35:30 dnl ---------------- dnl Find a "curses" header file, e.g,. "curses.h", or one of the more common dnl variations of ncurses' installs. dnl dnl $1 = ncurses when looking for ncurses, or is empty AC_DEFUN([CF_CURSES_HEADER],[ AC_CACHE_CHECK(if we have identified curses headers,cf_cv_ncurses_header,[ cf_cv_ncurses_header=none for cf_header in \ ncurses.h ifelse($1,,,[$1/ncurses.h]) \ curses.h ifelse($1,,,[$1/curses.h]) ifelse($1,,[ncurses/ncurses.h ncurses/curses.h]) do AC_TRY_COMPILE([#include <${cf_header}>], [initscr(); tgoto("?", 0,0)], [cf_cv_ncurses_header=$cf_header; break],[]) done ]) if test "$cf_cv_ncurses_header" = none ; then AC_MSG_ERROR(No curses header-files found) fi # cheat, to get the right #define's for HAVE_NCURSES_H, etc. AC_CHECK_HEADERS($cf_cv_ncurses_header) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DIRNAME version: 4 updated: 2002/12/21 19:25:52 dnl ---------- dnl "dirname" is not portable, so we fake it with a shell script. AC_DEFUN([CF_DIRNAME],[$1=`echo $2 | sed -e 's%/[[^/]]*$%%'`])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_ECHO version: 13 updated: 2015/04/18 08:56:57 dnl --------------- dnl You can always use "make -n" to see the actual options, but it's hard to dnl pick out/analyze warning messages when the compile-line is long. dnl dnl Sets: dnl ECHO_LT - symbol to control if libtool is verbose dnl ECHO_LD - symbol to prefix "cc -o" lines dnl RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o) dnl SHOW_CC - symbol to put before explicit "cc -c" lines dnl ECHO_CC - symbol to put before any "cc" line dnl AC_DEFUN([CF_DISABLE_ECHO],[ AC_MSG_CHECKING(if you want to see long compiling messages) CF_ARG_DISABLE(echo, [ --disable-echo do not display "compiling" commands], [ ECHO_LT='--silent' ECHO_LD='@echo linking [$]@;' RULE_CC='@echo compiling [$]<' SHOW_CC='@echo compiling [$]@' ECHO_CC='@' ],[ ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' ]) AC_MSG_RESULT($enableval) AC_SUBST(ECHO_LT) AC_SUBST(ECHO_LD) AC_SUBST(RULE_CC) AC_SUBST(SHOW_CC) AC_SUBST(ECHO_CC) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_GNAT_PROJECTS version: 1 updated: 2014/06/01 11:34:00 dnl ------------------------ AC_DEFUN([CF_DISABLE_GNAT_PROJECTS],[ AC_MSG_CHECKING(if we want to use GNAT projects) CF_ARG_DISABLE(gnat-projects, [ --disable-gnat-projects test: disable GNAT projects even if usable], [enable_gnat_projects=no], [enable_gnat_projects=yes]) AC_MSG_RESULT($enable_gnat_projects) ])dnl dnl --------------------------------------------------------------------------- dnl CF_FIND_LIBRARY version: 9 updated: 2008/03/23 14:48:54 dnl --------------- dnl Look for a non-standard library, given parameters for AC_TRY_LINK. We dnl prefer a standard location, and use -L options only if we do not find the dnl library in the standard library location(s). dnl $1 = library name dnl $2 = library class, usually the same as library name dnl $3 = includes dnl $4 = code fragment to compile/link dnl $5 = corresponding function-name dnl $6 = flag, nonnull if failure should not cause an error-exit dnl dnl Sets the variable "$cf_libdir" as a side-effect, so we can see if we had dnl to use a -L option. AC_DEFUN([CF_FIND_LIBRARY], [ eval 'cf_cv_have_lib_'$1'=no' cf_libdir="" AC_CHECK_FUNC($5, eval 'cf_cv_have_lib_'$1'=yes',[ cf_save_LIBS="$LIBS" AC_MSG_CHECKING(for $5 in -l$1) LIBS="-l$1 $LIBS" AC_TRY_LINK([$3],[$4], [AC_MSG_RESULT(yes) eval 'cf_cv_have_lib_'$1'=yes' ], [AC_MSG_RESULT(no) CF_LIBRARY_PATH(cf_search,$2) for cf_libdir in $cf_search do AC_MSG_CHECKING(for -l$1 in $cf_libdir) LIBS="-L$cf_libdir -l$1 $cf_save_LIBS" AC_TRY_LINK([$3],[$4], [AC_MSG_RESULT(yes) eval 'cf_cv_have_lib_'$1'=yes' break], [AC_MSG_RESULT(no) LIBS="$cf_save_LIBS"]) done ]) ]) eval 'cf_found_library=[$]cf_cv_have_lib_'$1 ifelse($6,,[ if test $cf_found_library = no ; then AC_MSG_ERROR(Cannot link $1 library) fi ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_FIND_LINKAGE version: 20 updated: 2015/04/18 08:56:57 dnl --------------- dnl Find a library (specifically the linkage used in the code fragment), dnl searching for it if it is not already in the library path. dnl See also CF_ADD_SEARCHPATH. dnl dnl Parameters (4-on are optional): dnl $1 = headers for library entrypoint dnl $2 = code fragment for library entrypoint dnl $3 = the library name without the "-l" option or ".so" suffix. dnl $4 = action to perform if successful (default: update CPPFLAGS, etc) dnl $5 = action to perform if not successful dnl $6 = module name, if not the same as the library name dnl $7 = extra libraries dnl dnl Sets these variables: dnl $cf_cv_find_linkage_$3 - yes/no according to whether linkage is found dnl $cf_cv_header_path_$3 - include-directory if needed dnl $cf_cv_library_path_$3 - library-directory if needed dnl $cf_cv_library_file_$3 - library-file if needed, e.g., -l$3 AC_DEFUN([CF_FIND_LINKAGE],[ # If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these # will be set on completion of the AC_TRY_LINK below. cf_cv_header_path_$3= cf_cv_library_path_$3= CF_MSG_LOG([Starting [FIND_LINKAGE]($3,$6)]) cf_save_LIBS="$LIBS" AC_TRY_LINK([$1],[$2],[ cf_cv_find_linkage_$3=yes cf_cv_header_path_$3=/usr/include cf_cv_library_path_$3=/usr/lib ],[ LIBS="-l$3 $7 $cf_save_LIBS" AC_TRY_LINK([$1],[$2],[ cf_cv_find_linkage_$3=yes cf_cv_header_path_$3=/usr/include cf_cv_library_path_$3=/usr/lib cf_cv_library_file_$3="-l$3" ],[ cf_cv_find_linkage_$3=no LIBS="$cf_save_LIBS" CF_VERBOSE(find linkage for $3 library) CF_MSG_LOG([Searching for headers in [FIND_LINKAGE]($3,$6)]) cf_save_CPPFLAGS="$CPPFLAGS" cf_test_CPPFLAGS="$CPPFLAGS" CF_HEADER_PATH(cf_search,ifelse([$6],,[$3],[$6])) for cf_cv_header_path_$3 in $cf_search do if test -d $cf_cv_header_path_$3 ; then CF_VERBOSE(... testing $cf_cv_header_path_$3) CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_$3" AC_TRY_COMPILE([$1],[$2],[ CF_VERBOSE(... found $3 headers in $cf_cv_header_path_$3) cf_cv_find_linkage_$3=maybe cf_test_CPPFLAGS="$CPPFLAGS" break],[ CPPFLAGS="$cf_save_CPPFLAGS" ]) fi done if test "$cf_cv_find_linkage_$3" = maybe ; then CF_MSG_LOG([Searching for $3 library in [FIND_LINKAGE]($3,$6)]) cf_save_LIBS="$LIBS" cf_save_LDFLAGS="$LDFLAGS" ifelse([$6],,,[ CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-l$3 $7 $cf_save_LIBS" AC_TRY_LINK([$1],[$2],[ CF_VERBOSE(... found $3 library in system) cf_cv_find_linkage_$3=yes]) CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" ]) if test "$cf_cv_find_linkage_$3" != yes ; then CF_LIBRARY_PATH(cf_search,$3) for cf_cv_library_path_$3 in $cf_search do if test -d $cf_cv_library_path_$3 ; then CF_VERBOSE(... testing $cf_cv_library_path_$3) CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-l$3 $7 $cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_$3" AC_TRY_LINK([$1],[$2],[ CF_VERBOSE(... found $3 library in $cf_cv_library_path_$3) cf_cv_find_linkage_$3=yes cf_cv_library_file_$3="-l$3" break],[ CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS" ]) fi done CPPFLAGS="$cf_save_CPPFLAGS" LDFLAGS="$cf_save_LDFLAGS" fi else cf_cv_find_linkage_$3=no fi ],$7) ]) LIBS="$cf_save_LIBS" if test "$cf_cv_find_linkage_$3" = yes ; then ifelse([$4],,[ CF_ADD_INCDIR($cf_cv_header_path_$3) CF_ADD_LIBDIR($cf_cv_library_path_$3) CF_ADD_LIB($3) ],[$4]) else ifelse([$5],,AC_MSG_WARN(Cannot find $3 library),[$5]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_FIXUP_ADAFLAGS version: 2 updated: 2015/04/17 21:13:04 dnl ----------------- dnl make ADAFLAGS consistent with CFLAGS AC_DEFUN([CF_FIXUP_ADAFLAGS],[ AC_MSG_CHECKING(optimization options for ADAFLAGS) case "$CFLAGS" in (*-g*) CF_ADD_ADAFLAGS(-g) ;; esac case "$CFLAGS" in (*-O*) cf_O_flag=`echo "$CFLAGS" |sed -e 's/^.*-O/-O/' -e 's/[[ ]].*//'` CF_ADD_ADAFLAGS($cf_O_flag) ;; esac AC_MSG_RESULT($ADAFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_ATTRIBUTES version: 17 updated: 2015/04/12 15:39:00 dnl ----------------- dnl Test for availability of useful gcc __attribute__ directives to quiet dnl compiler warnings. Though useful, not all are supported -- and contrary dnl to documentation, unrecognized directives cause older compilers to barf. AC_DEFUN([CF_GCC_ATTRIBUTES], [ if test "$GCC" = yes then cat > conftest.i < conftest.$ac_ext <&AC_FD_CC case $cf_attribute in (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <>confdefs.h case $cf_attribute in (noreturn) AC_DEFINE_UNQUOTED(GCC_NORETURN,$cf_directive,[Define to noreturn-attribute for gcc]) ;; (printf) cf_value='/* nothing */' if test "$cf_printf_attribute" != no ; then cf_value='__attribute__((format(printf,fmt,var)))' AC_DEFINE(GCC_PRINTF,1,[Define to 1 if the compiler supports gcc-like printf attribute.]) fi AC_DEFINE_UNQUOTED(GCC_PRINTFLIKE(fmt,var),$cf_value,[Define to printf-attribute for gcc]) ;; (scanf) cf_value='/* nothing */' if test "$cf_scanf_attribute" != no ; then cf_value='__attribute__((format(scanf,fmt,var)))' AC_DEFINE(GCC_SCANF,1,[Define to 1 if the compiler supports gcc-like scanf attribute.]) fi AC_DEFINE_UNQUOTED(GCC_SCANFLIKE(fmt,var),$cf_value,[Define to sscanf-attribute for gcc]) ;; (unused) AC_DEFINE_UNQUOTED(GCC_UNUSED,$cf_directive,[Define to unused-attribute for gcc]) ;; esac fi done else fgrep define conftest.i >>confdefs.h fi rm -rf conftest* fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_VERSION version: 7 updated: 2012/10/18 06:46:33 dnl -------------- dnl Find version of gcc AC_DEFUN([CF_GCC_VERSION],[ AC_REQUIRE([AC_PROG_CC]) GCC_VERSION=none if test "$GCC" = yes ; then AC_MSG_CHECKING(version of $CC) GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`" test -z "$GCC_VERSION" && GCC_VERSION=unknown AC_MSG_RESULT($GCC_VERSION) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_WARNINGS version: 32 updated: 2015/04/12 15:39:00 dnl --------------- dnl Check if the compiler supports useful warning options. There's a few that dnl we don't use, simply because they're too noisy: dnl dnl -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x) dnl -Wredundant-decls (system headers make this too noisy) dnl -Wtraditional (combines too many unrelated messages, only a few useful) dnl -Wwrite-strings (too noisy, but should review occasionally). This dnl is enabled for ncurses using "--enable-const". dnl -pedantic dnl dnl Parameter: dnl $1 is an optional list of gcc warning flags that a particular dnl application might want to use, e.g., "no-unused" for dnl -Wno-unused dnl Special: dnl If $with_ext_const is "yes", add a check for -Wwrite-strings dnl AC_DEFUN([CF_GCC_WARNINGS], [ AC_REQUIRE([CF_GCC_VERSION]) CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS) CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS) cat > conftest.$ac_ext </dev/null >/dev/null && cf_cv_gnatprep_opt_t=yes ]) test "$cf_cv_gnatprep_opt_t" = yes && GNATPREP_OPTS="-T $GNATPREP_OPTS" AC_SUBST(GNATPREP_OPTS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_GENERICS version: 3 updated: 2015/04/17 21:13:04 dnl ---------------- AC_DEFUN([CF_GNAT_GENERICS], [ AC_REQUIRE([CF_GNAT_VERSION]) AC_MSG_CHECKING(if GNAT supports generics) case $cf_gnat_version in (3.[[1-9]]*|[[4-9]].*) cf_gnat_generics=yes ;; (*) cf_gnat_generics=no ;; esac AC_MSG_RESULT($cf_gnat_generics) if test "$cf_gnat_generics" = yes then cf_compile_generics=generics cf_generic_objects="\${GENOBJS}" else cf_compile_generics= cf_generic_objects= fi AC_SUBST(cf_compile_generics) AC_SUBST(cf_generic_objects) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_PROJECTS version: 8 updated: 2015/04/17 21:13:04 dnl ---------------- dnl GNAT projects are configured with ".gpr" project files. dnl GNAT libraries are a further development, using the project feature. AC_DEFUN([CF_GNAT_PROJECTS], [ AC_REQUIRE([CF_GNAT_VERSION]) AC_REQUIRE([CF_DISABLE_GNAT_PROJECTS]) cf_gnat_libraries=no cf_gnat_projects=no if test "$enable_gnat_projects" != no ; then AC_MSG_CHECKING(if GNAT supports project files) case $cf_gnat_version in (3.[[0-9]]*) ;; (*) case $cf_cv_system_name in (cygwin*|msys*) ;; (*) mkdir conftest.src conftest.bin conftest.lib cd conftest.src rm -rf conftest* *~conftest* cat >>library.gpr <>confpackage.ads <>confpackage.adb <&AC_FD_CC 2>&1 ) ; then cf_gnat_projects=yes fi cd .. if test -f conftest.lib/confpackage.ali then cf_gnat_libraries=yes fi rm -rf conftest* *~conftest* ;; esac ;; esac AC_MSG_RESULT($cf_gnat_projects) fi # enable_gnat_projects if test $cf_gnat_projects = yes then AC_MSG_CHECKING(if GNAT supports libraries) AC_MSG_RESULT($cf_gnat_libraries) fi if test "$cf_gnat_projects" = yes then USE_OLD_MAKERULES="#" USE_GNAT_PROJECTS="" else USE_OLD_MAKERULES="" USE_GNAT_PROJECTS="#" fi if test "$cf_gnat_libraries" = yes then USE_GNAT_LIBRARIES="" else USE_GNAT_LIBRARIES="#" fi AC_SUBST(USE_OLD_MAKERULES) AC_SUBST(USE_GNAT_PROJECTS) AC_SUBST(USE_GNAT_LIBRARIES) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_SIGINT version: 1 updated: 2011/03/27 20:07:59 dnl -------------- dnl Check if gnat supports SIGINT, and presumably tasking. For the latter, it dnl is noted that gnat may compile a tasking unit even for configurations which dnl fail at runtime. AC_DEFUN([CF_GNAT_SIGINT],[ AC_CACHE_CHECK(if GNAT supports SIGINT,cf_cv_gnat_sigint,[ CF_GNAT_TRY_LINK([with Ada.Interrupts.Names; package ConfTest is pragma Warnings (Off); -- the next pragma exists since 3.11p pragma Unreserve_All_Interrupts; pragma Warnings (On); protected Process is procedure Stop; function Continue return Boolean; pragma Attach_Handler (Stop, Ada.Interrupts.Names.SIGINT); private Done : Boolean := False; end Process; end ConfTest;], [package body ConfTest is protected body Process is procedure Stop is begin Done := True; end Stop; function Continue return Boolean is begin return not Done; end Continue; end Process; end ConfTest;], [cf_cv_gnat_sigint=yes], [cf_cv_gnat_sigint=no])]) if test $cf_cv_gnat_sigint = yes ; then USE_GNAT_SIGINT="" else USE_GNAT_SIGINT="#" fi AC_SUBST(USE_GNAT_SIGINT) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_TRY_LINK version: 3 updated: 2011/03/19 14:47:45 dnl ---------------- dnl Verify that a test program compiles/links with GNAT. dnl $cf_ada_make is set to the program that compiles/links dnl $ADAFLAGS may be set to the GNAT flags. dnl dnl $1 is the text of the spec dnl $2 is the text of the body dnl $3 is the shell command to execute if successful dnl $4 is the shell command to execute if not successful AC_DEFUN([CF_GNAT_TRY_LINK], [ rm -rf conftest* *~conftest* cat >>conftest.ads <>conftest.adb <&AC_FD_CC 2>&1 ) ; then ifelse($3,, :,[ $3]) ifelse($4,,,[else $4]) fi rm -rf conftest* *~conftest* ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_TRY_RUN version: 5 updated: 2011/03/19 14:47:45 dnl --------------- dnl Verify that a test program compiles and runs with GNAT dnl $cf_ada_make is set to the program that compiles/links dnl $ADAFLAGS may be set to the GNAT flags. dnl dnl $1 is the text of the spec dnl $2 is the text of the body dnl $3 is the shell command to execute if successful dnl $4 is the shell command to execute if not successful AC_DEFUN([CF_GNAT_TRY_RUN], [ rm -rf conftest* *~conftest* cat >>conftest.ads <>conftest.adb <&AC_FD_CC 2>&1 ) ; then if ( ./conftest 1>&AC_FD_CC 2>&1 ) ; then ifelse($3,, :,[ $3]) ifelse($4,,,[ else $4]) fi ifelse($4,,,[else $4]) fi rm -rf conftest* *~conftest* ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_VERSION version: 20 updated: 2015/04/18 08:56:57 dnl --------------- dnl Verify version of GNAT. AC_DEFUN([CF_GNAT_VERSION], [ AC_MSG_CHECKING(for gnat version) cf_gnat_version=`${cf_ada_make:-gnatmake} -v 2>&1 | \ grep '[[0-9]].[[0-9]][[0-9]]*' |\ sed -e '2,$d' -e 's/[[^0-9 \.]]//g' -e 's/^[[ ]]*//' -e 's/ .*//'` AC_MSG_RESULT($cf_gnat_version) case $cf_gnat_version in (3.1[[1-9]]*|3.[[2-9]]*|[[4-9]].*|20[[0-9]][[0-9]]) cf_cv_prog_gnat_correct=yes ;; (*) AC_MSG_WARN(Unsupported GNAT version $cf_gnat_version. We require 3.11 or better. Disabling Ada95 binding.) cf_cv_prog_gnat_correct=no ;; esac ]) dnl --------------------------------------------------------------------------- dnl CF_GNU_SOURCE version: 6 updated: 2005/07/09 13:23:07 dnl ------------- dnl Check if we must define _GNU_SOURCE to get a reasonable value for dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect dnl (or misfeature) of glibc2, which breaks portability of many applications, dnl since it is interwoven with GNU extensions. dnl dnl Well, yes we could work around it... AC_DEFUN([CF_GNU_SOURCE], [ AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[ AC_TRY_COMPILE([#include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_cv_gnu_source=no], [cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" AC_TRY_COMPILE([#include ],[ #ifdef _XOPEN_SOURCE make an error #endif], [cf_cv_gnu_source=no], [cf_cv_gnu_source=yes]) CPPFLAGS="$cf_save" ]) ]) test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" ])dnl dnl --------------------------------------------------------------------------- dnl CF_HEADER_PATH version: 13 updated: 2015/04/15 19:08:48 dnl -------------- dnl Construct a search-list of directories for a nonstandard header-file dnl dnl Parameters dnl $1 = the variable to return as result dnl $2 = the package name AC_DEFUN([CF_HEADER_PATH], [ $1= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` CF_ADD_SUBDIR_PATH($1,$2,include,$cf_header_path,NONE) cf_header_path_list="$cf_header_path_list [$]$1" ;; esac done fi # add the variations for the package we are looking for CF_SUBDIR_PATH($1,$2,include) test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && $1="[$]$1 $includedir" test -d $includedir/$2 && $1="[$]$1 $includedir/$2" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && $1="[$]$1 $oldincludedir" test -d $oldincludedir/$2 && $1="[$]$1 $oldincludedir/$2" } $1="[$]$1 $cf_header_path_list" ])dnl dnl --------------------------------------------------------------------------- dnl CF_HELP_MESSAGE version: 3 updated: 1998/01/14 10:56:23 dnl --------------- dnl Insert text into the help-message, for readability, from AC_ARG_WITH. AC_DEFUN([CF_HELP_MESSAGE], [AC_DIVERT_HELP([$1])dnl ])dnl dnl --------------------------------------------------------------------------- dnl CF_INCLUDE_DIRS version: 10 updated: 2014/09/19 20:58:42 dnl --------------- dnl Construct the list of include-options according to whether we're building dnl in the source directory or using '--srcdir=DIR' option. AC_DEFUN([CF_INCLUDE_DIRS], [ if test "$srcdir" != "."; then CPPFLAGS="-I\${srcdir}/../include $CPPFLAGS" fi CPPFLAGS="-I../include $CPPFLAGS" if test "$srcdir" != "."; then CPPFLAGS="-I\${srcdir} $CPPFLAGS" fi CPPFLAGS="-I. $CPPFLAGS" AC_SUBST(CPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_INTEL_COMPILER version: 7 updated: 2015/04/12 15:39:00 dnl ----------------- dnl Check if the given compiler is really the Intel compiler for Linux. It dnl tries to imitate gcc, but does not return an error when it finds a mismatch dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK. dnl dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from dnl the wrappers for gcc and g++ warnings. dnl dnl $1 = GCC (default) or GXX dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS dnl $3 = CFLAGS (default) or CXXFLAGS AC_DEFUN([CF_INTEL_COMPILER],[ AC_REQUIRE([AC_CANONICAL_HOST]) ifelse([$2],,INTEL_COMPILER,[$2])=no if test "$ifelse([$1],,[$1],GCC)" = yes ; then case $host_os in (linux*|gnu*) AC_MSG_CHECKING(if this is really Intel ifelse([$1],GXX,C++,C) compiler) cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])" ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -no-gcc" AC_TRY_COMPILE([],[ #ifdef __INTEL_COMPILER #else make an error #endif ],[ifelse([$2],,INTEL_COMPILER,[$2])=yes cf_save_CFLAGS="$cf_save_CFLAGS -we147" ],[]) ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS" AC_MSG_RESULT($ifelse([$2],,INTEL_COMPILER,[$2])) ;; esac fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_LARGEFILE version: 9 updated: 2015/04/18 08:56:57 dnl ------------ dnl Add checks for large file support. AC_DEFUN([CF_LARGEFILE],[ ifdef([AC_FUNC_FSEEKO],[ AC_SYS_LARGEFILE if test "$enable_largefile" != no ; then AC_FUNC_FSEEKO # Normally we would collect these definitions in the config.h, # but (like _XOPEN_SOURCE), some environments rely on having these # defined before any of the system headers are included. Another # case comes up with C++, e.g., on AIX the compiler compiles the # header files by themselves before looking at the body files it is # told to compile. For ncurses, those header files do not include # the config.h test "$ac_cv_sys_large_files" != no && CPPFLAGS="$CPPFLAGS -D_LARGE_FILES " test "$ac_cv_sys_largefile_source" != no && CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE " test "$ac_cv_sys_file_offset_bits" != no && CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits " AC_CACHE_CHECK(whether to use struct dirent64, cf_cv_struct_dirent64,[ AC_TRY_COMPILE([ #include #include ],[ /* if transitional largefile support is setup, this is true */ extern struct dirent64 * readdir(DIR *); struct dirent64 *x = readdir((DIR *)0); struct dirent *y = readdir((DIR *)0); int z = x - y; ], [cf_cv_struct_dirent64=yes], [cf_cv_struct_dirent64=no]) ]) test "$cf_cv_struct_dirent64" = yes && AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Define to 1 if we have struct dirent64]) fi ]) ]) dnl --------------------------------------------------------------------------- dnl CF_LD_RPATH_OPT version: 6 updated: 2015/04/12 15:39:00 dnl --------------- dnl For the given system and compiler, find the compiler flags to pass to the dnl loader to use the "rpath" feature. AC_DEFUN([CF_LD_RPATH_OPT], [ AC_REQUIRE([CF_CHECK_CACHE]) LD_RPATH_OPT= AC_MSG_CHECKING(for an rpath option) case $cf_cv_system_name in (irix*) if test "$GCC" = yes; then LD_RPATH_OPT="-Wl,-rpath," else LD_RPATH_OPT="-rpath " fi ;; (linux*|gnu*|k*bsd*-gnu) LD_RPATH_OPT="-Wl,-rpath," ;; (openbsd[[2-9]].*|mirbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (dragonfly*|freebsd*) LD_RPATH_OPT="-rpath " ;; (netbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (osf*|mls+*) LD_RPATH_OPT="-rpath " ;; (solaris2*) LD_RPATH_OPT="-R" ;; (*) ;; esac AC_MSG_RESULT($LD_RPATH_OPT) case "x$LD_RPATH_OPT" in (x-R*) AC_MSG_CHECKING(if we need a space after rpath option) cf_save_LIBS="$LIBS" CF_ADD_LIBS(${LD_RPATH_OPT}$libdir) AC_TRY_LINK(, , cf_rpath_space=no, cf_rpath_space=yes) LIBS="$cf_save_LIBS" AC_MSG_RESULT($cf_rpath_space) test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIBRARY_PATH version: 10 updated: 2015/04/15 19:08:48 dnl --------------- dnl Construct a search-list of directories for a nonstandard library-file dnl dnl Parameters dnl $1 = the variable to return as result dnl $2 = the package name AC_DEFUN([CF_LIBRARY_PATH], [ $1= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` CF_ADD_SUBDIR_PATH($1,$2,lib,$cf_library_path,NONE) cf_library_path_list="$cf_library_path_list [$]$1" ;; esac done fi CF_SUBDIR_PATH($1,$2,lib) $1="$cf_library_path_list [$]$1" ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIB_PREFIX version: 12 updated: 2015/10/17 19:03:33 dnl ------------- dnl Compute the library-prefix for the given host system dnl $1 = variable to set define([CF_LIB_PREFIX], [ case $cf_cv_system_name in (OS/2*|os2*) if test "$DFT_LWR_MODEL" = libtool; then LIB_PREFIX='lib' else LIB_PREFIX='' fi ;; (*) LIB_PREFIX='lib' ;; esac ifelse($1,,,[$1=$LIB_PREFIX]) AC_SUBST(LIB_PREFIX) ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIB_SUFFIX version: 25 updated: 2015/04/17 21:13:04 dnl ------------- dnl Compute the library file-suffix from the given model name dnl $1 = model name dnl $2 = variable to set (the nominal library suffix) dnl $3 = dependency variable to set (actual filename) dnl The variable $LIB_SUFFIX, if set, prepends the variable to set. AC_DEFUN([CF_LIB_SUFFIX], [ case X$1 in (Xlibtool) $2='.la' $3=[$]$2 ;; (Xdebug) $2='_g.a' $3=[$]$2 ;; (Xprofile) $2='_p.a' $3=[$]$2 ;; (Xshared) case $cf_cv_system_name in (aix[[5-7]]*) $2='.so' $3=[$]$2 ;; (cygwin*|msys*|mingw*) $2='.dll' $3='.dll.a' ;; (darwin*) $2='.dylib' $3=[$]$2 ;; (hpux*) case $target in (ia64*) $2='.so' $3=[$]$2 ;; (*) $2='.sl' $3=[$]$2 ;; esac ;; (*) $2='.so' $3=[$]$2 ;; esac ;; (*) $2='.a' $3=[$]$2 ;; esac if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}" then $2="${LIB_SUFFIX}${EXTRA_SUFFIX}[$]{$2}" $3="${LIB_SUFFIX}${EXTRA_SUFFIX}[$]{$3}" fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIB_TYPE version: 5 updated: 2015/04/17 21:13:04 dnl ----------- dnl Compute the string to append to -library from the given model name dnl $1 = model name dnl $2 = variable to set dnl The variable $LIB_SUFFIX, if set, prepends the variable to set. AC_DEFUN([CF_LIB_TYPE], [ case $1 in (libtool) $2='' ;; (normal) $2='' ;; (debug) $2='_g' ;; (profile) $2='_p' ;; (shared) $2='' ;; esac test -n "$LIB_SUFFIX" && $2="${LIB_SUFFIX}[$]{$2}" ])dnl dnl --------------------------------------------------------------------------- dnl CF_LINK_DATAONLY version: 10 updated: 2012/10/06 17:41:51 dnl ---------------- dnl Some systems have a non-ANSI linker that doesn't pull in modules that have dnl only data (i.e., no functions), for example NeXT. On those systems we'll dnl have to provide wrappers for global tables to ensure they're linked dnl properly. AC_DEFUN([CF_LINK_DATAONLY], [ AC_MSG_CHECKING([if data-only library module links]) AC_CACHE_VAL(cf_cv_link_dataonly,[ rm -f conftest.a cat >conftest.$ac_ext <&AC_FD_CC 1>/dev/null fi rm -f conftest.$ac_ext data.o cat >conftest.$ac_ext <&AC_FD_CC 1>/dev/null fi rm -f conftest.$ac_ext func.o ( eval $RANLIB conftest.a ) 2>&AC_FD_CC >/dev/null cf_saveLIBS="$LIBS" LIBS="conftest.a $LIBS" AC_TRY_RUN([ int main() { extern int testfunc(); ${cf_cv_main_return:-return} (!testfunc()); } ], [cf_cv_link_dataonly=yes], [cf_cv_link_dataonly=no], [cf_cv_link_dataonly=unknown]) LIBS="$cf_saveLIBS" ]) AC_MSG_RESULT($cf_cv_link_dataonly) if test "$cf_cv_link_dataonly" = no ; then AC_DEFINE(BROKEN_LINKER,1,[if data-only library module does not link]) BROKEN_LINKER=1 fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_MAKEFLAGS version: 17 updated: 2015/08/05 20:44:28 dnl ------------ dnl Some 'make' programs support ${MAKEFLAGS}, some ${MFLAGS}, to pass 'make' dnl options to lower-levels. It's very useful for "make -n" -- if we have it. dnl (GNU 'make' does both, something POSIX 'make', which happens to make the dnl ${MAKEFLAGS} variable incompatible because it adds the assignments :-) AC_DEFUN([CF_MAKEFLAGS], [ AC_CACHE_CHECK(for makeflags variable, cf_cv_makeflags,[ cf_cv_makeflags='' for cf_option in '-${MAKEFLAGS}' '${MFLAGS}' do cat >cf_makeflags.tmp </dev/null | fgrep -v "ing directory" | sed -e 's,[[ ]]*$,,'` case "$cf_result" in (.*k|.*kw) cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` case "$cf_result" in (.*CC=*) cf_cv_makeflags= ;; (*) cf_cv_makeflags=$cf_option ;; esac break ;; (.-) ;; (*) echo "given option \"$cf_option\", no match \"$cf_result\"" ;; esac done rm -f cf_makeflags.tmp ]) AC_SUBST(cf_cv_makeflags) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MAKE_TAGS version: 6 updated: 2010/10/23 15:52:32 dnl ------------ dnl Generate tags/TAGS targets for makefiles. Do not generate TAGS if we have dnl a monocase filesystem. AC_DEFUN([CF_MAKE_TAGS],[ AC_REQUIRE([CF_MIXEDCASE_FILENAMES]) AC_CHECK_PROGS(CTAGS, exctags ctags) AC_CHECK_PROGS(ETAGS, exetags etags) AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS:-ctags}, yes, no) if test "$cf_cv_mixedcase" = yes ; then AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS:-etags}, yes, no) else MAKE_UPPER_TAGS=no fi if test "$MAKE_UPPER_TAGS" = yes ; then MAKE_UPPER_TAGS= else MAKE_UPPER_TAGS="#" fi if test "$MAKE_LOWER_TAGS" = yes ; then MAKE_LOWER_TAGS= else MAKE_LOWER_TAGS="#" fi AC_SUBST(CTAGS) AC_SUBST(ETAGS) AC_SUBST(MAKE_UPPER_TAGS) AC_SUBST(MAKE_LOWER_TAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MIXEDCASE_FILENAMES version: 7 updated: 2015/04/12 15:39:00 dnl ---------------------- dnl Check if the file-system supports mixed-case filenames. If we're able to dnl create a lowercase name and see it as uppercase, it doesn't support that. AC_DEFUN([CF_MIXEDCASE_FILENAMES], [ AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[ if test "$cross_compiling" = yes ; then case $target_alias in (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*) cf_cv_mixedcase=no ;; (*) cf_cv_mixedcase=yes ;; esac else rm -f conftest CONFTEST echo test >conftest if test -f CONFTEST ; then cf_cv_mixedcase=no else cf_cv_mixedcase=yes fi rm -f conftest CONFTEST fi ]) test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if filesystem supports mixed-case filenames.]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MKSTEMP version: 9 updated: 2012/10/03 04:34:49 dnl ---------- dnl Check for a working mkstemp. This creates two files, checks that they are dnl successfully created and distinct (AmigaOS apparently fails on the last). AC_DEFUN([CF_MKSTEMP],[ AC_CACHE_CHECK(for working mkstemp, cf_cv_func_mkstemp,[ rm -rf conftest* AC_TRY_RUN([ #include #include #include #include #include int main() { char *tmpl = "conftestXXXXXX"; char name[2][80]; int n; int result = 0; int fd; struct stat sb; umask(077); for (n = 0; n < 2; ++n) { strcpy(name[n], tmpl); if ((fd = mkstemp(name[n])) >= 0) { if (!strcmp(name[n], tmpl) || stat(name[n], &sb) != 0 || (sb.st_mode & S_IFMT) != S_IFREG || (sb.st_mode & 077) != 0) { result = 1; } close(fd); } } if (result == 0 && !strcmp(name[0], name[1])) result = 1; ${cf_cv_main_return:-return}(result); } ],[cf_cv_func_mkstemp=yes ],[cf_cv_func_mkstemp=no ],[cf_cv_func_mkstemp=maybe]) ]) if test "x$cf_cv_func_mkstemp" = xmaybe ; then AC_CHECK_FUNC(mkstemp) fi if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then AC_DEFINE(HAVE_MKSTEMP,1,[Define to 1 if mkstemp() is available and working.]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32 dnl ---------- dnl Write a debug message to config.log, along with the line number in the dnl configure script. AC_DEFUN([CF_MSG_LOG],[ echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_ADDON version: 5 updated: 2015/04/26 18:06:58 dnl ---------------- dnl Configure an ncurses add-on, built outside the ncurses tree. AC_DEFUN([CF_NCURSES_ADDON],[ AC_REQUIRE([CF_NCURSES_CONFIG]) AC_PROVIDE([CF_SUBST_NCURSES_VERSION]) AC_MSG_CHECKING(if you want wide-character code) AC_ARG_ENABLE(widec, [ --enable-widec compile with wide-char/UTF-8 code], [with_widec=$enableval], [with_widec=no]) AC_MSG_RESULT($with_widec) if test "$with_widec" = yes ; then CF_UTF8_LIB CF_NCURSES_CONFIG(ncursesw) else CF_NCURSES_CONFIG(ncurses) fi if test "$NCURSES_CONFIG_PKG" != none ; then cf_version=`$PKG_CONFIG --modversion $NCURSES_CONFIG_PKG 2>/dev/null` NCURSES_MAJOR=`echo "$cf_version" | sed -e 's/\..*//'` NCURSES_MINOR=`echo "$cf_version" | sed -e 's/^[[0-9]][[0-9]]*\.//' -e 's/\..*//'` NCURSES_PATCH=`echo "$cf_version" | sed -e 's/^[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.//'` cf_cv_abi_version=`$PKG_CONFIG --variable=abi_version $NCURSES_CONFIG_PKG 2>/dev/null` if test -z "$cf_cv_abi_version" then cf_cv_abi_version=`$PKG_CONFIG --variable=major_version $NCURSES_CONFIG_PKG 2>/dev/null` fi elif test "$NCURSES_CONFIG" != none ; then cf_version=`$NCURSES_CONFIG --version 2>/dev/null` NCURSES_MAJOR=`echo "$cf_version" | sed -e 's/\..*//'` NCURSES_MINOR=`echo "$cf_version" | sed -e 's/^[[0-9]][[0-9]]*\.//' -e 's/\..*//'` NCURSES_PATCH=`echo "$cf_version" | sed -e 's/^[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.//'` # ABI version is not available from headers cf_cv_abi_version=`$NCURSES_CONFIG --abi-version 2>/dev/null` else for cf_name in MAJOR MINOR PATCH do cat >conftest.$ac_ext < AUTOCONF_$cf_name NCURSES_VERSION_$cf_name CF_EOF cf_try="$ac_cpp conftest.$ac_ext 2>&5 | fgrep AUTOCONF_$cf_name >conftest.out" AC_TRY_EVAL(cf_try) if test -f conftest.out ; then cf_result=`cat conftest.out | sed -e "s/^.*AUTOCONF_$cf_name[[ ]][[ ]]*//"` eval NCURSES_$cf_name=\"$cf_result\" # cat conftest.$ac_ext # cat conftest.out fi done cf_cv_abi_version=${NCURSES_MAJOR} fi cf_cv_rel_version=${NCURSES_MAJOR}.${NCURSES_MINOR} dnl Show the computed version, for logging cf_cv_timestamp=`date` AC_MSG_RESULT(Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)) dnl We need these values in the generated headers AC_SUBST(NCURSES_MAJOR) AC_SUBST(NCURSES_MINOR) AC_SUBST(NCURSES_PATCH) dnl We need these values in the generated makefiles AC_SUBST(cf_cv_rel_version) AC_SUBST(cf_cv_abi_version) dnl FIXME - not needed for Ada95 AC_SUBST(cf_cv_builtin_bool) AC_SUBST(cf_cv_header_stdbool_h) AC_SUBST(cf_cv_type_of_bool)dnl ]) dnl --------------------------------------------------------------------------- dnl CF_NCURSES_CC_CHECK version: 4 updated: 2007/07/29 10:39:05 dnl ------------------- dnl Check if we can compile with ncurses' header file dnl $1 is the cache variable to set dnl $2 is the header-file to include dnl $3 is the root name (ncurses or ncursesw) AC_DEFUN([CF_NCURSES_CC_CHECK],[ AC_TRY_COMPILE([ ]ifelse($3,ncursesw,[ #define _XOPEN_SOURCE_EXTENDED #undef HAVE_LIBUTF8_H /* in case we used CF_UTF8_LIB */ #define HAVE_LIBUTF8_H /* to force ncurses' header file to use cchar_t */ ])[ #include <$2>],[ #ifdef NCURSES_VERSION ]ifelse($3,ncursesw,[ #ifndef WACS_BSSB make an error #endif ])[ printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ] ,[$1=$2] ,[$1=no]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_CONFIG version: 17 updated: 2015/07/07 04:22:07 dnl ----------------- dnl Tie together the configure-script macros for ncurses, preferring these in dnl order: dnl a) ".pc" files for pkg-config, using $NCURSES_CONFIG_PKG dnl b) the "-config" script from ncurses, using $NCURSES_CONFIG dnl c) just plain libraries dnl dnl $1 is the root library name (default: "ncurses") AC_DEFUN([CF_NCURSES_CONFIG],[ AC_REQUIRE([CF_PKG_CONFIG]) cf_ncuconfig_root=ifelse($1,,ncurses,$1) cf_have_ncuconfig=no if test "x${PKG_CONFIG:=none}" != xnone; then AC_MSG_CHECKING(pkg-config for $cf_ncuconfig_root) if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then AC_MSG_RESULT(yes) AC_MSG_CHECKING(if the $cf_ncuconfig_root package files work) cf_have_ncuconfig=unknown cf_save_CPPFLAGS="$CPPFLAGS" cf_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags $cf_ncuconfig_root`" CF_ADD_LIBS(`$PKG_CONFIG --libs $cf_ncuconfig_root`) AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr(); mousemask(0,0); tgoto((char *)0, 0, 0);], [AC_TRY_RUN([#include <${cf_cv_ncurses_header:-curses.h}> int main(void) { char *xx = curses_version(); return (xx == 0); }], [cf_have_ncuconfig=yes], [cf_have_ncuconfig=no], [cf_have_ncuconfig=maybe])], [cf_have_ncuconfig=no]) AC_MSG_RESULT($cf_have_ncuconfig) test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes if test "$cf_have_ncuconfig" != "yes" then CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" NCURSES_CONFIG_PKG=none else AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) NCURSES_CONFIG_PKG=$cf_ncuconfig_root fi else AC_MSG_RESULT(no) NCURSES_CONFIG_PKG=none fi else NCURSES_CONFIG_PKG=none fi if test "x$cf_have_ncuconfig" = "xno"; then echo "Looking for ${cf_ncuconfig_root}-config" CF_ACVERSION_CHECK(2.52, [AC_CHECK_TOOLS(NCURSES_CONFIG, ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)], [AC_PATH_PROGS(NCURSES_CONFIG, ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)]) if test "$NCURSES_CONFIG" != none ; then CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" CF_ADD_LIBS(`$NCURSES_CONFIG --libs`) # even with config script, some packages use no-override for curses.h CF_CURSES_HEADER(ifelse($1,,ncurses,$1)) dnl like CF_NCURSES_CPPFLAGS AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) dnl like CF_NCURSES_LIBS CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_ncuconfig_root) AC_DEFINE_UNQUOTED($cf_nculib_ROOT) dnl like CF_NCURSES_VERSION cf_cv_ncurses_version=`$NCURSES_CONFIG --version` else CF_NCURSES_CPPFLAGS(ifelse($1,,ncurses,$1)) CF_NCURSES_LIBS(ifelse($1,,ncurses,$1)) fi else NCURSES_CONFIG=none fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_CPPFLAGS version: 21 updated: 2012/10/06 08:57:51 dnl ------------------- dnl Look for the SVr4 curses clone 'ncurses' in the standard places, adjusting dnl the CPPFLAGS variable so we can include its header. dnl dnl The header files may be installed as either curses.h, or ncurses.h (would dnl be obsolete, except that some packagers prefer this name to distinguish it dnl from a "native" curses implementation). If not installed for overwrite, dnl the curses.h file would be in an ncurses subdirectory (e.g., dnl /usr/include/ncurses), but someone may have installed overwriting the dnl vendor's curses. Only very old versions (pre-1.9.2d, the first autoconf'd dnl version) of ncurses don't define either __NCURSES_H or NCURSES_VERSION in dnl the header. dnl dnl If the installer has set $CFLAGS or $CPPFLAGS so that the ncurses header dnl is already in the include-path, don't even bother with this, since we cannot dnl easily determine which file it is. In this case, it has to be . dnl dnl The optional parameter gives the root name of the library, in case it is dnl not installed as the default curses library. That is how the dnl wide-character version of ncurses is installed. AC_DEFUN([CF_NCURSES_CPPFLAGS], [AC_REQUIRE([CF_WITH_CURSES_DIR]) AC_PROVIDE([CF_CURSES_CPPFLAGS])dnl cf_ncuhdr_root=ifelse($1,,ncurses,$1) test -n "$cf_cv_curses_dir" && \ test "$cf_cv_curses_dir" != "no" && { \ CF_ADD_INCDIR($cf_cv_curses_dir/include/$cf_ncuhdr_root) } AC_CACHE_CHECK(for $cf_ncuhdr_root header in include-path, cf_cv_ncurses_h,[ cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" for cf_header in $cf_header_list do CF_NCURSES_CC_CHECK(cf_cv_ncurses_h,$cf_header,$1) test "$cf_cv_ncurses_h" != no && break done ]) CF_NCURSES_HEADER CF_TERM_HEADER # some applications need this, but should check for NCURSES_VERSION AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) CF_NCURSES_VERSION ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_HEADER version: 4 updated: 2015/04/15 19:08:48 dnl ----------------- dnl Find a "curses" header file, e.g,. "curses.h", or one of the more common dnl variations of ncurses' installs. dnl dnl See also CF_CURSES_HEADER, which sets the same cache variable. AC_DEFUN([CF_NCURSES_HEADER],[ if test "$cf_cv_ncurses_h" != no ; then cf_cv_ncurses_header=$cf_cv_ncurses_h else AC_CACHE_CHECK(for $cf_ncuhdr_root include-path, cf_cv_ncurses_h2,[ test -n "$verbose" && echo CF_HEADER_PATH(cf_search,$cf_ncuhdr_root) test -n "$verbose" && echo search path $cf_search cf_save2_CPPFLAGS="$CPPFLAGS" for cf_incdir in $cf_search do CF_ADD_INCDIR($cf_incdir) for cf_header in \ ncurses.h \ curses.h do CF_NCURSES_CC_CHECK(cf_cv_ncurses_h2,$cf_header,$1) if test "$cf_cv_ncurses_h2" != no ; then cf_cv_ncurses_h2=$cf_incdir/$cf_header test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&AC_FD_MSG break fi test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&AC_FD_MSG done CPPFLAGS="$cf_save2_CPPFLAGS" test "$cf_cv_ncurses_h2" != no && break done test "$cf_cv_ncurses_h2" = no && AC_MSG_ERROR(not found) ]) CF_DIRNAME(cf_1st_incdir,$cf_cv_ncurses_h2) cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header fi CF_ADD_INCDIR($cf_1st_incdir) fi # Set definitions to allow ifdef'ing for ncurses.h case $cf_cv_ncurses_header in (*ncurses.h) AC_DEFINE(HAVE_NCURSES_H,1,[Define to 1 if we have ncurses.h]) ;; esac case $cf_cv_ncurses_header in (ncurses/curses.h|ncurses/ncurses.h) AC_DEFINE(HAVE_NCURSES_NCURSES_H,1,[Define to 1 if we have ncurses/ncurses.h]) ;; (ncursesw/curses.h|ncursesw/ncurses.h) AC_DEFINE(HAVE_NCURSESW_NCURSES_H,1,[Define to 1 if we have ncursesw/ncurses.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_LIBS version: 17 updated: 2015/04/15 19:08:48 dnl --------------- dnl Look for the ncurses library. This is a little complicated on Linux, dnl because it may be linked with the gpm (general purpose mouse) library. dnl Some distributions have gpm linked with (bsd) curses, which makes it dnl unusable with ncurses. However, we don't want to link with gpm unless dnl ncurses has a dependency, since gpm is normally set up as a shared library, dnl and the linker will record a dependency. dnl dnl The optional parameter gives the root name of the library, in case it is dnl not installed as the default curses library. That is how the dnl wide-character version of ncurses is installed. AC_DEFUN([CF_NCURSES_LIBS], [AC_REQUIRE([CF_NCURSES_CPPFLAGS]) cf_nculib_root=ifelse($1,,ncurses,$1) # This works, except for the special case where we find gpm, but # ncurses is in a nonstandard location via $LIBS, and we really want # to link gpm. cf_ncurses_LIBS="" cf_ncurses_SAVE="$LIBS" AC_CHECK_LIB(gpm,Gpm_Open, [AC_CHECK_LIB(gpm,initscr, [LIBS="$cf_ncurses_SAVE"], [cf_ncurses_LIBS="-lgpm"])]) case $host_os in (freebsd*) # This is only necessary if you are linking against an obsolete # version of ncurses (but it should do no harm, since it's static). if test "$cf_nculib_root" = ncurses ; then AC_CHECK_LIB(mytinfo,tgoto,[cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS"]) fi ;; esac CF_ADD_LIBS($cf_ncurses_LIBS) if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then CF_ADD_LIBS(-l$cf_nculib_root) else CF_FIND_LIBRARY($cf_nculib_root,$cf_nculib_root, [#include <${cf_cv_ncurses_header:-curses.h}>], [initscr()], initscr) fi if test -n "$cf_ncurses_LIBS" ; then AC_MSG_CHECKING(if we can link $cf_nculib_root without $cf_ncurses_LIBS) cf_ncurses_SAVE="$LIBS" for p in $cf_ncurses_LIBS ; do q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` if test "$q" != "$LIBS" ; then LIBS="$q" fi done AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr(); mousemask(0,0); tgoto((char *)0, 0, 0);], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) LIBS="$cf_ncurses_SAVE"]) fi CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_nculib_root) AC_DEFINE_UNQUOTED($cf_nculib_ROOT) ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_VERSION version: 14 updated: 2012/10/06 08:57:51 dnl ------------------ dnl Check for the version of ncurses, to aid in reporting bugs, etc. dnl Call CF_CURSES_CPPFLAGS first, or CF_NCURSES_CPPFLAGS. We don't use dnl AC_REQUIRE since that does not work with the shell's if/then/else/fi. AC_DEFUN([CF_NCURSES_VERSION], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_CACHE_CHECK(for ncurses version, cf_cv_ncurses_version,[ cf_cv_ncurses_version=no cf_tempfile=out$$ rm -f $cf_tempfile AC_TRY_RUN([ #include <${cf_cv_ncurses_header:-curses.h}> #include int main() { FILE *fp = fopen("$cf_tempfile", "w"); #ifdef NCURSES_VERSION # ifdef NCURSES_VERSION_PATCH fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); # else fprintf(fp, "%s\n", NCURSES_VERSION); # endif #else # ifdef __NCURSES_H fprintf(fp, "old\n"); # else make an error # endif #endif ${cf_cv_main_return:-return}(0); }],[ cf_cv_ncurses_version=`cat $cf_tempfile`],,[ # This will not work if the preprocessor splits the line after the # Autoconf token. The 'unproto' program does that. cat > conftest.$ac_ext < #undef Autoconf #ifdef NCURSES_VERSION Autoconf NCURSES_VERSION #else #ifdef __NCURSES_H Autoconf "old" #endif ; #endif EOF cf_try="$ac_cpp conftest.$ac_ext 2>&AC_FD_CC | grep '^Autoconf ' >conftest.out" AC_TRY_EVAL(cf_try) if test -f conftest.out ; then cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[[^"]]*"%%' -e 's%".*%%'` test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" rm -f conftest.out fi ]) rm -f $cf_tempfile ]) test "$cf_cv_ncurses_version" = no || AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_OBJ_SUBDIR version: 7 updated: 2015/04/17 21:13:04 dnl ------------- dnl Compute the object-directory name from the given model name AC_DEFUN([CF_OBJ_SUBDIR], [ case $1 in (libtool) $2='obj_lo' ;; (normal) $2='objects' ;; (debug) $2='obj_g' ;; (profile) $2='obj_p' ;; (shared) case $cf_cv_system_name in (cygwin|msys) $2='objects' ;; (*) $2='obj_s' ;; esac esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_PATHSEP version: 7 updated: 2015/04/12 15:39:00 dnl ---------- dnl Provide a value for the $PATH and similar separator (or amend the value dnl as provided in autoconf 2.5x). AC_DEFUN([CF_PATHSEP], [ AC_MSG_CHECKING(for PATH separator) case $cf_cv_system_name in (os2*) PATH_SEPARATOR=';' ;; (*) ${PATH_SEPARATOR:=':'} ;; esac ifelse([$1],,,[$1=$PATH_SEPARATOR]) AC_SUBST(PATH_SEPARATOR) AC_MSG_RESULT($PATH_SEPARATOR) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PATH_SYNTAX version: 16 updated: 2015/04/18 08:56:57 dnl -------------- dnl Check the argument to see that it looks like a pathname. Rewrite it if it dnl begins with one of the prefix/exec_prefix variables, and then again if the dnl result begins with 'NONE'. This is necessary to work around autoconf's dnl delayed evaluation of those symbols. AC_DEFUN([CF_PATH_SYNTAX],[ if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".[$]$1" in (.\[$]\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX ;; (.\[$]{*prefix}*|.\[$]{*dir}*) eval $1="[$]$1" case ".[$]$1" in (.NONE/*) $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` ;; (*) ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_PKG_CONFIG version: 10 updated: 2015/04/26 18:06:58 dnl ------------- dnl Check for the package-config program, unless disabled by command-line. AC_DEFUN([CF_PKG_CONFIG], [ AC_MSG_CHECKING(if you want to use pkg-config) AC_ARG_WITH(pkg-config, [ --with-pkg-config{=path} enable/disable use of pkg-config], [cf_pkg_config=$withval], [cf_pkg_config=yes]) AC_MSG_RESULT($cf_pkg_config) case $cf_pkg_config in (no) PKG_CONFIG=none ;; (yes) CF_ACVERSION_CHECK(2.52, [AC_PATH_TOOL(PKG_CONFIG, pkg-config, none)], [AC_PATH_PROG(PKG_CONFIG, pkg-config, none)]) ;; (*) PKG_CONFIG=$withval ;; esac test -z "$PKG_CONFIG" && PKG_CONFIG=none if test "$PKG_CONFIG" != none ; then CF_PATH_SYNTAX(PKG_CONFIG) elif test "x$cf_pkg_config" != xno ; then AC_MSG_WARN(pkg-config is not installed) fi AC_SUBST(PKG_CONFIG) ])dnl dnl --------------------------------------------------------------------------- dnl CF_POSIX_C_SOURCE version: 9 updated: 2015/04/12 15:39:00 dnl ----------------- dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed. dnl dnl POSIX.1-1990 _POSIX_SOURCE dnl POSIX.1-1990 and _POSIX_SOURCE and dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2 dnl Bindings Option dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L dnl X/Open 2000 _POSIX_C_SOURCE=200112L dnl dnl Parameters: dnl $1 is the nominal value for _POSIX_C_SOURCE AC_DEFUN([CF_POSIX_C_SOURCE], [ cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1]) cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE) CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE) AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[ CF_MSG_LOG(if the symbol is already defined go no further) AC_TRY_COMPILE([#include ],[ #ifndef _POSIX_C_SOURCE make an error #endif], [cf_cv_posix_c_source=no], [cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[[12]]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then AC_TRY_COMPILE([#include ],[ #ifdef _POSIX_SOURCE make an error #endif],[], cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE") fi CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE) CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" CF_MSG_LOG(if the second compile does not leave our definition intact error) AC_TRY_COMPILE([#include ],[ #ifndef _POSIX_C_SOURCE make an error #endif],, [cf_cv_posix_c_source=no]) CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" ]) ]) if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" CF_ADD_CFLAGS($cf_cv_posix_c_source) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_AR version: 1 updated: 2009/01/01 20:15:22 dnl ---------- dnl Check for archiver "ar". AC_DEFUN([CF_PROG_AR],[ AC_CHECK_TOOL(AR, ar, ar) ]) dnl --------------------------------------------------------------------------- dnl CF_PROG_AWK version: 1 updated: 2006/09/16 11:40:59 dnl ----------- dnl Check for awk, ensure that the check found something. AC_DEFUN([CF_PROG_AWK], [ AC_PROG_AWK test -z "$AWK" && AC_MSG_ERROR(No awk program found) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_CC version: 4 updated: 2014/07/12 18:57:58 dnl ---------- dnl standard check for CC, plus followup sanity checks dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name AC_DEFUN([CF_PROG_CC],[ ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)]) CF_GCC_VERSION CF_ACVERSION_CHECK(2.52, [AC_PROG_CC_STDC], [CF_ANSI_CC_REQD]) CF_CC_ENV_FLAGS ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_CC_C_O version: 3 updated: 2010/08/14 18:25:37 dnl -------------- dnl Analogous to AC_PROG_CC_C_O, but more useful: tests only $CC, ensures that dnl the output file can be renamed, and allows for a shell variable that can dnl be used later. The parameter is either CC or CXX. The result is the dnl cache variable: dnl $cf_cv_prog_CC_c_o dnl $cf_cv_prog_CXX_c_o AC_DEFUN([CF_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])dnl AC_MSG_CHECKING([whether [$]$1 understands -c and -o together]) AC_CACHE_VAL(cf_cv_prog_$1_c_o, [ cat > conftest.$ac_ext < int main() { ${cf_cv_main_return:-return}(0); } CF_EOF # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='[$]$1 -c conftest.$ac_ext -o conftest2.$ac_objext >&AC_FD_CC' if AC_TRY_EVAL(ac_try) && test -f conftest2.$ac_objext && AC_TRY_EVAL(ac_try); then eval cf_cv_prog_$1_c_o=yes else eval cf_cv_prog_$1_c_o=no fi rm -rf conftest* ])dnl if test $cf_cv_prog_$1_c_o = yes; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_EGREP version: 2 updated: 2015/04/18 08:56:57 dnl ------------- dnl AC_PROG_EGREP was introduced in autoconf 2.53. dnl This macro adds a check to ensure the script found something. AC_DEFUN([CF_PROG_EGREP], [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi]) EGREP=$ac_cv_prog_egrep AC_SUBST([EGREP]) test -z "$EGREP" && AC_MSG_ERROR(No egrep program found) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_EXT version: 13 updated: 2015/04/18 09:03:58 dnl ----------- dnl Compute $PROG_EXT, used for non-Unix ports, such as OS/2 EMX. AC_DEFUN([CF_PROG_EXT], [ AC_REQUIRE([CF_CHECK_CACHE]) case $cf_cv_system_name in (os2*) CFLAGS="$CFLAGS -Zmt" CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__" CXXFLAGS="$CXXFLAGS -Zmt" # autoconf's macro sets -Zexe and suffix both, which conflict:w LDFLAGS="$LDFLAGS -Zmt -Zcrtdll" ac_cv_exeext=.exe ;; esac AC_EXEEXT AC_OBJEXT PROG_EXT="$EXEEXT" AC_SUBST(PROG_EXT) test -n "$PROG_EXT" && AC_DEFINE_UNQUOTED(PROG_EXT,"$PROG_EXT",[Define to the program extension (normally blank)]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_GNAT version: 3 updated: 2015/04/18 08:56:57 dnl ------------ dnl Check for gnatmake, ensure that it is complete. AC_DEFUN([CF_PROG_GNAT],[ cf_ada_make=gnatmake AC_CHECK_PROG(gnat_exists, $cf_ada_make, yes, no) if test "$ac_cv_prog_gnat_exists" = no; then cf_ada_make= cf_cv_prog_gnat_correct=no else CF_GNAT_VERSION AC_CHECK_PROG(M4_exists, m4, yes, no) if test "$ac_cv_prog_M4_exists" = no; then cf_cv_prog_gnat_correct=no echo Ada95 binding required program m4 not found. Ada95 binding disabled. fi if test "$cf_cv_prog_gnat_correct" = yes; then AC_MSG_CHECKING(if GNAT works) CF_GNAT_TRY_RUN([procedure conftest;], [with Text_IO; with GNAT.OS_Lib; procedure conftest is begin Text_IO.Put ("Hello World"); Text_IO.New_Line; GNAT.OS_Lib.OS_Exit (0); end conftest;],[cf_cv_prog_gnat_correct=yes],[cf_cv_prog_gnat_correct=no]) AC_MSG_RESULT($cf_cv_prog_gnat_correct) fi fi AC_SUBST(cf_ada_make) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_LN_S version: 2 updated: 2010/08/14 18:25:37 dnl ------------ dnl Combine checks for "ln -s" and "ln -sf", updating $LN_S to include "-f" dnl option if it is supported. AC_DEFUN([CF_PROG_LN_S],[ AC_PROG_LN_S AC_MSG_CHECKING(if $LN_S -f options work) rm -f conf$$.src conf$$dst echo >conf$$.dst echo first >conf$$.src if $LN_S -f conf$$.src conf$$.dst 2>/dev/null; then cf_prog_ln_sf=yes else cf_prog_ln_sf=no fi rm -f conf$$.dst conf$$src AC_MSG_RESULT($cf_prog_ln_sf) test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f" ])dnl dnl --------------------------------------------------------------------------- dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50 dnl ---------------- dnl Remove all -U and -D options that refer to the given symbol from a list dnl of C compiler options. This works around the problem that not all dnl compilers process -U and -D options from left-to-right, so a -U option dnl cannot be used to cancel the effect of a preceding -D option. dnl dnl $1 = target (which could be the same as the source variable) dnl $2 = source (including '$') dnl $3 = symbol to remove define([CF_REMOVE_DEFINE], [ $1=`echo "$2" | \ sed -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[[ ]]/ /g' \ -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'` ])dnl dnl --------------------------------------------------------------------------- dnl CF_REMOVE_LIB version: 1 updated: 2007/02/17 14:11:52 dnl ------------- dnl Remove the given library from the symbol dnl dnl $1 = target (which could be the same as the source variable) dnl $2 = source (including '$') dnl $3 = library to remove define([CF_REMOVE_LIB], [ # remove $3 library from $2 $1=`echo "$2" | sed -e 's/-l$3[[ ]]//g' -e 's/-l$3[$]//'` ])dnl dnl --------------------------------------------------------------------------- dnl CF_SHARED_OPTS version: 89 updated: 2015/08/15 18:38:59 dnl -------------- dnl -------------- dnl Attempt to determine the appropriate CC/LD options for creating a shared dnl library. dnl dnl Notes: dnl a) ${LOCAL_LDFLAGS} is used to link executables that will run within dnl the build-tree, i.e., by making use of the libraries that are compiled in dnl $rel_builddir/lib We avoid compiling-in a $rel_builddir/lib path for the dnl shared library since that can lead to unexpected results at runtime. dnl b) ${LOCAL_LDFLAGS2} has the same intention but assumes that the shared dnl libraries are compiled in ../../lib dnl dnl The variable 'cf_cv_do_symlinks' is used to control whether we configure dnl to install symbolic links to the rel/abi versions of shared libraries. dnl dnl The variable 'cf_cv_shlib_version' controls whether we use the rel or abi dnl version when making symbolic links. dnl dnl The variable 'cf_cv_shlib_version_infix' controls whether shared library dnl version numbers are infix (ex: libncurses..dylib) or postfix dnl (ex: libncurses.so.). dnl dnl Some loaders leave 'so_locations' lying around. It's nice to clean up. AC_DEFUN([CF_SHARED_OPTS], [ AC_REQUIRE([CF_LD_RPATH_OPT]) RM_SHARED_OPTS= LOCAL_LDFLAGS= LOCAL_LDFLAGS2= LD_SHARED_OPTS= INSTALL_LIB="-m 644" : ${rel_builddir:=.} shlibdir=$libdir AC_SUBST(shlibdir) MAKE_DLLS="#" AC_SUBST(MAKE_DLLS) cf_cv_do_symlinks=no cf_ld_rpath_opt= test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT" AC_MSG_CHECKING(if release/abi version should be used for shared libs) AC_ARG_WITH(shlib-version, [ --with-shlib-version=X Specify rel or abi version for shared libs], [test -z "$withval" && withval=auto case $withval in (yes) cf_cv_shlib_version=auto ;; (rel|abi|auto) cf_cv_shlib_version=$withval ;; (*) AC_MSG_RESULT($withval) AC_MSG_ERROR([option value must be one of: rel, abi, or auto]) ;; esac ],[cf_cv_shlib_version=auto]) AC_MSG_RESULT($cf_cv_shlib_version) cf_cv_rm_so_locs=no cf_try_cflags= # Some less-capable ports of gcc support only -fpic CC_SHARED_OPTS= if test "$GCC" = yes then AC_MSG_CHECKING(which $CC option to use) cf_save_CFLAGS="$CFLAGS" for CC_SHARED_OPTS in -fPIC -fpic '' do CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS" AC_TRY_COMPILE([#include ],[int x = 1],[break],[]) done AC_MSG_RESULT($CC_SHARED_OPTS) CFLAGS="$cf_save_CFLAGS" fi cf_cv_shlib_version_infix=no case $cf_cv_system_name in (aix4.[3-9]*|aix[[5-7]]*) if test "$GCC" = yes; then CC_SHARED_OPTS='-Wl,-brtl' MK_SHARED_LIB='${CC} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@' else CC_SHARED_OPTS='-brtl' # as well as '-qpic=large -G' or perhaps "-bM:SRE -bnoentry -bexpall" MK_SHARED_LIB='${CC} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@' fi ;; (beos*) MK_SHARED_LIB='${CC} ${CFLAGS} -o $[@] -Xlinker -soname=`basename $[@]` -nostart -e 0' ;; (cygwin*) CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cf_cv_shlib_version=cygdll cf_cv_shlib_version_infix=cygdll shlibdir=$bindir MAKE_DLLS= cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\[$]1 IMPORT_LIB=\`echo "\[$]1" | sed -e 's/cyg/lib/' -e 's/[[0-9]]*\.dll[$]/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \[$]SHARED_LIB ** IMPORT_LIB \[$]IMPORT_LIB EOF exec \[$]* -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (msys*) CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cf_cv_shlib_version=msysdll cf_cv_shlib_version_infix=msysdll shlibdir=$bindir MAKE_DLLS= cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\[$]1 IMPORT_LIB=\`echo "\[$]1" | sed -e 's/msys-/lib/' -e 's/[[0-9]]*\.dll[$]/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \[$]SHARED_LIB ** IMPORT_LIB \[$]IMPORT_LIB EOF exec \[$]* -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (darwin*) cf_try_cflags="no-cpp-precomp" CC_SHARED_OPTS="-dynamic" MK_SHARED_LIB='${CC} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $[@]` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi cf_cv_shlib_version_infix=yes AC_CACHE_CHECK([if ld -search_paths_first works], cf_cv_ldflags_search_paths_first, [ cf_save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], cf_cv_ldflags_search_paths_first=yes, cf_cv_ldflags_search_paths_first=no) LDFLAGS=$cf_save_LDFLAGS]) if test $cf_cv_ldflags_search_paths_first = yes; then LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi ;; (hpux[[7-8]]*) # HP-UX 8.07 ld lacks "+b" option used for libdir search-list if test "$GCC" != yes; then CC_SHARED_OPTS='+Z' fi MK_SHARED_LIB='${LD} -b -o $[@]' INSTALL_LIB="-m 555" ;; (hpux*) # (tested with gcc 2.7.2 -- I don't have c89) if test "$GCC" = yes; then LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}' else CC_SHARED_OPTS='+Z' LD_SHARED_OPTS='-Wl,+b,${libdir}' fi MK_SHARED_LIB='${LD} +b ${libdir} -b -o $[@]' # HP-UX shared libraries must be executable, and should be # readonly to exploit a quirk in the memory manager. INSTALL_LIB="-m 555" ;; (interix*) test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_shared_soname='`basename $@`' fi CC_SHARED_OPTS= MK_SHARED_LIB='${CC} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $@' ;; (irix*) if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi # tested with IRIX 5.2 and 'cc'. if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' MK_SHARED_LIB='${CC} -shared -rdata_shared -soname `basename $[@]` -o $[@]' else MK_SHARED_LIB='${CC} -shared -Wl,-soname,`basename $[@]` -o $[@]' fi cf_cv_rm_so_locs=yes ;; (linux*|gnu*|k*bsd*-gnu) if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; (mingw*) cf_cv_shlib_version=mingw cf_cv_shlib_version_infix=mingw shlibdir=$bindir MAKE_DLLS= if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-Wl,--enable-auto-import" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS" fi CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\[$]1 IMPORT_LIB=\`echo "\[$]1" | sed -e 's/[[0-9]]*\.dll[$]/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \[$]SHARED_LIB ** IMPORT_LIB \[$]IMPORT_LIB EOF exec \[$]* -shared -Wl,--enable-auto-import,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (openbsd[[2-9]].*|mirbsd*) if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; (nto-qnx*|openbsd*|freebsd[[12]].*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" MK_SHARED_LIB='${LD} -Bshareable -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; (dragonfly*|freebsd*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS" EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; (netbsd*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" if test "$cf_cv_shlib_version" = auto; then if test -f /usr/libexec/ld.elf_so; then cf_cv_shlib_version=abi else cf_cv_shlib_version=rel fi fi CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $[@]' else MK_SHARED_LIB='${CC} -Wl,-shared -Wl,-Bshareable -o $[@]' fi ;; (osf*|mls+*) # tested with OSF/1 V3.2 and 'cc' # tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't # link with shared libs). MK_SHARED_LIB='${LD} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $[@]`' case $host_os in (osf4*) MK_SHARED_LIB="${MK_SHARED_LIB} -msym" ;; esac MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $[@]' if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi cf_cv_rm_so_locs=yes ;; (sco3.2v5*) # also uw2* and UW7: hops 13-Apr-98 # tested with osr5.0.5 if test "$GCC" != yes; then CC_SHARED_OPTS='-belf -KPIC' fi MK_SHARED_LIB='${LD} -dy -G -h `basename $[@] .${REL_VERSION}`.${ABI_VERSION} -o [$]@' if test "$cf_cv_enable_rpath" = yes ; then # only way is to set LD_RUN_PATH but no switch for it RUN_PATH=$libdir fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel LINK_PROGS='LD_RUN_PATH=${libdir}' LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib' ;; (sunos4*) # tested with SunOS 4.1.1 and gcc 2.7.0 if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='${LD} -assert pure-text -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; (solaris2*) # tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2 # tested with SunOS 5.10 (solaris 10) and gcc 3.4.3 if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS" fi CF_SHARED_SONAME if test "$GCC" != yes; then cf_save_CFLAGS="$CFLAGS" for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O do CFLAGS="$cf_shared_opts $cf_save_CFLAGS" AC_TRY_COMPILE([#include ],[printf("Hello\n");],[break]) done CFLAGS="$cf_save_CFLAGS" CC_SHARED_OPTS=$cf_shared_opts MK_SHARED_LIB='${CC} -dy -G -h '$cf_cv_shared_soname' -o $[@]' else MK_SHARED_LIB='${CC} -shared -dy -G -h '$cf_cv_shared_soname' -o $[@]' fi ;; (sysv5uw7*|unix_sv*) # tested with UnixWare 7.1.0 (gcc 2.95.2 and cc) if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='${LD} -d y -G -o [$]@' ;; (*) CC_SHARED_OPTS='unknown' MK_SHARED_LIB='echo unknown' ;; esac # This works if the last tokens in $MK_SHARED_LIB are the -o target. case "$cf_cv_shlib_version" in (rel|abi) case "$MK_SHARED_LIB" in (*'-o $[@]') test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes ;; (*) AC_MSG_WARN(ignored --with-shlib-version) ;; esac ;; esac if test -n "$cf_try_cflags" then cat > conftest.$ac_ext < int main(int argc, char *argv[[]]) { printf("hello\n"); return (argv[[argc-1]] == 0) ; } EOF cf_save_CFLAGS="$CFLAGS" for cf_opt in $cf_try_cflags do CFLAGS="$cf_save_CFLAGS -$cf_opt" AC_MSG_CHECKING(if CFLAGS option -$cf_opt works) if AC_TRY_EVAL(ac_compile); then AC_MSG_RESULT(yes) cf_save_CFLAGS="$CFLAGS" else AC_MSG_RESULT(no) fi done CFLAGS="$cf_save_CFLAGS" fi # RPATH_LIST is a colon-separated list of directories test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}" test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}" test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations" CF_VERBOSE(CC_SHARED_OPTS: $CC_SHARED_OPTS) CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB) AC_SUBST(CC_SHARED_OPTS) AC_SUBST(LD_RPATH_OPT) AC_SUBST(LD_SHARED_OPTS) AC_SUBST(MK_SHARED_LIB) AC_SUBST(RM_SHARED_OPTS) AC_SUBST(LINK_PROGS) AC_SUBST(LINK_TESTS) AC_SUBST(EXTRA_LDFLAGS) AC_SUBST(LOCAL_LDFLAGS) AC_SUBST(LOCAL_LDFLAGS2) AC_SUBST(INSTALL_LIB) AC_SUBST(RPATH_LIST) ])dnl dnl --------------------------------------------------------------------------- dnl CF_SHARED_SONAME version: 3 updated: 2008/09/08 18:34:43 dnl ---------------- dnl utility macro for CF_SHARED_OPTS, constructs "$cf_cv_shared_soname" for dnl substitution into MK_SHARED_LIB string for the "-soname" (or similar) dnl option. dnl dnl $1 is the default that should be used for "$cf_cv_shlib_version". dnl If missing, use "rel". define([CF_SHARED_SONAME], [ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=ifelse($1,,rel,$1) if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $[@] .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $[@]`' fi ]) dnl --------------------------------------------------------------------------- dnl CF_STRIP_G_OPT version: 3 updated: 2002/12/21 19:25:52 dnl -------------- dnl Remove "-g" option from the compiler options AC_DEFUN([CF_STRIP_G_OPT], [$1=`echo ${$1} | sed -e 's%-g %%' -e 's%-g$%%'`])dnl dnl --------------------------------------------------------------------------- dnl CF_SUBDIR_PATH version: 7 updated: 2014/12/04 04:33:06 dnl -------------- dnl Construct a search-list for a nonstandard header/lib-file dnl $1 = the variable to return as result dnl $2 = the package name dnl $3 = the subdirectory, e.g., bin, include or lib AC_DEFUN([CF_SUBDIR_PATH], [ $1= CF_ADD_SUBDIR_PATH($1,$2,$3,$prefix,NONE) for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ [$]HOME do CF_ADD_SUBDIR_PATH($1,$2,$3,$cf_subdir_prefix,$prefix) done ])dnl dnl --------------------------------------------------------------------------- dnl CF_TERM_HEADER version: 4 updated: 2015/04/15 19:08:48 dnl -------------- dnl Look for term.h, which is part of X/Open curses. It defines the interface dnl to terminfo database. Usually it is in the same include-path as curses.h, dnl but some packagers change this, breaking various applications. AC_DEFUN([CF_TERM_HEADER],[ AC_CACHE_CHECK(for terminfo header, cf_cv_term_header,[ case ${cf_cv_ncurses_header} in (*/ncurses.h|*/ncursesw.h) cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[[^.]]*\.h$%term.h%'` ;; (*) cf_term_header=term.h ;; esac for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" do AC_TRY_COMPILE([#include #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> ],[int x = auto_left_margin],[ cf_cv_term_header="$cf_test"],[ cf_cv_term_header=unknown ]) test "$cf_cv_term_header" != unknown && break done ]) # Set definitions to allow ifdef'ing to accommodate subdirectories case $cf_cv_term_header in (*term.h) AC_DEFINE(HAVE_TERM_H,1,[Define to 1 if we have term.h]) ;; esac case $cf_cv_term_header in (ncurses/term.h) AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h]) ;; (ncursesw/term.h) AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_TOP_BUILDDIR version: 2 updated: 2013/07/27 17:38:32 dnl --------------- dnl Define a top_builddir symbol, for applications that need an absolute path. AC_DEFUN([CF_TOP_BUILDDIR], [ top_builddir=ifelse($1,,`pwd`,$1) AC_SUBST(top_builddir) ])dnl dnl --------------------------------------------------------------------------- dnl CF_TRY_XOPEN_SOURCE version: 1 updated: 2011/10/30 17:09:50 dnl ------------------- dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we dnl can define it successfully. AC_DEFUN([CF_TRY_XOPEN_SOURCE],[ AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[ AC_TRY_COMPILE([ #include #include #include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_cv_xopen_source=no], [cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" AC_TRY_COMPILE([ #include #include #include ],[ #ifdef _XOPEN_SOURCE make an error #endif], [cf_cv_xopen_source=no], [cf_cv_xopen_source=$cf_XOPEN_SOURCE]) CPPFLAGS="$cf_save" ]) ]) if test "$cf_cv_xopen_source" != no ; then CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE) CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE) cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" CF_ADD_CFLAGS($cf_temp_xopen_source) fi ]) dnl --------------------------------------------------------------------------- dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59 dnl -------- dnl Make an uppercase version of a variable dnl $1=uppercase($2) AC_DEFUN([CF_UPPER], [ $1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` ])dnl dnl --------------------------------------------------------------------------- dnl CF_UTF8_LIB version: 8 updated: 2012/10/06 08:57:51 dnl ----------- dnl Check for multibyte support, and if not found, utf8 compatibility library AC_DEFUN([CF_UTF8_LIB], [ AC_CACHE_CHECK(for multibyte character support,cf_cv_utf8_lib,[ cf_save_LIBS="$LIBS" AC_TRY_LINK([ #include ],[putwc(0,0);], [cf_cv_utf8_lib=yes], [CF_FIND_LINKAGE([ #include ],[putwc(0,0);],utf8, [cf_cv_utf8_lib=add-on], [cf_cv_utf8_lib=no]) ])]) # HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between # ncurses/ncursesw: if test "$cf_cv_utf8_lib" = "add-on" ; then AC_DEFINE(HAVE_LIBUTF8_H,1,[Define to 1 if we should include libutf8.h]) CF_ADD_INCDIR($cf_cv_header_path_utf8) CF_ADD_LIBDIR($cf_cv_library_path_utf8) CF_ADD_LIBS($cf_cv_library_file_utf8) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12 dnl ---------- dnl Use AC_VERBOSE w/o the warnings AC_DEFUN([CF_VERBOSE], [test -n "$verbose" && echo " $1" 1>&AC_FD_MSG CF_MSG_LOG([$1]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WEAK_SYMBOLS version: 1 updated: 2008/08/16 19:18:06 dnl --------------- dnl Check for compiler-support for weak symbols. dnl This works with "recent" gcc. AC_DEFUN([CF_WEAK_SYMBOLS],[ AC_CACHE_CHECK(if $CC supports weak symbols,cf_cv_weak_symbols,[ AC_TRY_COMPILE([ #include ], [ #if defined(__GNUC__) # if defined __USE_ISOC99 # define _cat_pragma(exp) _Pragma(#exp) # define _weak_pragma(exp) _cat_pragma(weak name) # else # define _weak_pragma(exp) # endif # define _declare(name) __extension__ extern __typeof__(name) name # define weak_symbol(name) _weak_pragma(name) _declare(name) __attribute__((weak)) #endif weak_symbol(fopen); ],[cf_cv_weak_symbols=yes],[cf_cv_weak_symbols=no]) ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_ADA_COMPILER version: 2 updated: 2010/06/26 17:35:58 dnl -------------------- dnl Command-line option to specify the Ada95 compiler. AC_DEFUN([CF_WITH_ADA_COMPILER],[ AC_MSG_CHECKING(for ada-compiler) AC_ARG_WITH(ada-compiler, [ --with-ada-compiler=CMD specify Ada95 compiler command (default gnatmake)], [cf_ada_compiler=$withval], [cf_ada_compiler=gnatmake]) AC_SUBST(cf_ada_compiler) AC_MSG_RESULT($cf_ada_compiler) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_ADA_INCLUDE version: 2 updated: 2010/06/26 17:35:58 dnl ------------------- dnl Command-line option to specify where Ada includes will install. AC_DEFUN([CF_WITH_ADA_INCLUDE],[ AC_MSG_CHECKING(for ada-include) CF_WITH_PATH(ada-include, [ --with-ada-include=DIR Ada includes are in DIR], ADA_INCLUDE, PREFIX/share/ada/adainclude, [$]prefix/share/ada/adainclude) AC_SUBST(ADA_INCLUDE) AC_MSG_RESULT($ADA_INCLUDE) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_ADA_OBJECTS version: 2 updated: 2010/06/26 17:35:58 dnl ------------------- dnl Command-line option to specify where Ada objects will install. AC_DEFUN([CF_WITH_ADA_OBJECTS],[ AC_MSG_CHECKING(for ada-objects) CF_WITH_PATH(ada-objects, [ --with-ada-objects=DIR Ada objects are in DIR], ADA_OBJECTS, PREFIX/lib/ada/adalib, [$]prefix/lib/ada/adalib) AC_SUBST(ADA_OBJECTS) AC_MSG_RESULT($ADA_OBJECTS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_ADA_SHAREDLIB version: 4 updated: 2014/05/31 21:08:37 dnl --------------------- dnl Command-line option to specify if an Ada95 shared-library should be built, dnl and optionally what its soname should be. AC_DEFUN([CF_WITH_ADA_SHAREDLIB],[ AC_MSG_CHECKING(if an Ada95 shared-library should be built) AC_ARG_WITH(ada-sharedlib, [ --with-ada-sharedlib=soname build shared-library (requires GNAT projects)], [with_ada_sharedlib=$withval], [with_ada_sharedlib=no]) AC_MSG_RESULT($with_ada_sharedlib) ADA_SHAREDLIB='lib$(LIB_NAME).so.1' MAKE_ADA_SHAREDLIB="#" if test "x$with_ada_sharedlib" != xno then MAKE_ADA_SHAREDLIB= if test "x$with_ada_sharedlib" != xyes then ADA_SHAREDLIB="$with_ada_sharedlib" fi fi AC_SUBST(ADA_SHAREDLIB) AC_SUBST(MAKE_ADA_SHAREDLIB) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_CURSES_DIR version: 3 updated: 2010/11/20 17:02:38 dnl ------------------ dnl Wrapper for AC_ARG_WITH to specify directory under which to look for curses dnl libraries. AC_DEFUN([CF_WITH_CURSES_DIR],[ AC_MSG_CHECKING(for specific curses-directory) AC_ARG_WITH(curses-dir, [ --with-curses-dir=DIR directory in which (n)curses is installed], [cf_cv_curses_dir=$withval], [cf_cv_curses_dir=no]) AC_MSG_RESULT($cf_cv_curses_dir) if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then CF_PATH_SYNTAX(withval) if test -d "$cf_cv_curses_dir" then CF_ADD_INCDIR($cf_cv_curses_dir/include) CF_ADD_LIBDIR($cf_cv_curses_dir/lib) fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_LIB_PREFIX version: 1 updated: 2012/01/21 19:28:10 dnl ------------------ dnl Allow the library-prefix to be overridden. OS/2 EMX originally had no dnl "lib" prefix, e.g., because it used the dll naming convention. dnl dnl $1 = variable to set AC_DEFUN([CF_WITH_LIB_PREFIX], [ AC_MSG_CHECKING(if you want to have a library-prefix) AC_ARG_WITH(lib-prefix, [ --with-lib-prefix override library-prefix], [with_lib_prefix=$withval], [with_lib_prefix=auto]) AC_MSG_RESULT($with_lib_prefix) if test $with_lib_prefix = auto then CF_LIB_PREFIX($1) elif test $with_lib_prefix = no then LIB_PREFIX= else LIB_PREFIX=$with_lib_prefix fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_PATH version: 11 updated: 2012/09/29 15:04:19 dnl ------------ dnl Wrapper for AC_ARG_WITH to ensure that user supplies a pathname, not just dnl defaulting to yes/no. dnl dnl $1 = option name dnl $2 = help-text dnl $3 = environment variable to set dnl $4 = default value, shown in the help-message, must be a constant dnl $5 = default value, if it's an expression & cannot be in the help-message dnl AC_DEFUN([CF_WITH_PATH], [AC_ARG_WITH($1,[$2 ](default: ifelse([$4],,empty,[$4])),, ifelse([$4],,[withval="${$3}"],[withval="${$3:-ifelse([$5],,[$4],[$5])}"]))dnl if ifelse([$5],,true,[test -n "$5"]) ; then CF_PATH_SYNTAX(withval) fi eval $3="$withval" AC_SUBST($3)dnl ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_PKG_CONFIG_LIBDIR version: 10 updated: 2015/08/22 17:10:56 dnl ------------------------- dnl Allow the choice of the pkg-config library directory to be overridden. AC_DEFUN([CF_WITH_PKG_CONFIG_LIBDIR],[ case $PKG_CONFIG in (no|none|yes) AC_MSG_CHECKING(for pkg-config library directory) ;; (*) AC_MSG_CHECKING(for $PKG_CONFIG library directory) ;; esac PKG_CONFIG_LIBDIR=no AC_ARG_WITH(pkg-config-libdir, [ --with-pkg-config-libdir=XXX use given directory for installing pc-files], [PKG_CONFIG_LIBDIR=$withval], [test "x$PKG_CONFIG" != xnone && PKG_CONFIG_LIBDIR=yes]) case x$PKG_CONFIG_LIBDIR in (x/*) ;; (xyes) # Look for the library directory using the same prefix as the executable if test "x$PKG_CONFIG" = xnone then cf_path=$prefix else cf_path=`echo "$PKG_CONFIG" | sed -e 's,/[[^/]]*/[[^/]]*$,,'` fi # If you don't like using the default architecture, you have to specify the # intended library directory and corresponding compiler/linker options. # # This case allows for Debian's 2014-flavor of multiarch, along with the # most common variations before that point. Some other variants spell the # directory differently, e.g., "pkg-config", and put it in unusual places. # pkg-config has always been poorly standardized, which is ironic... case x`(arch) 2>/dev/null` in (*64) cf_search_path="\ $cf_path/lib/*64-linux-gnu \ $cf_path/share \ $cf_path/lib64 \ $cf_path/lib32 \ $cf_path/lib" ;; (*) cf_search_path="\ $cf_path/lib/*-linux-gnu \ $cf_path/share \ $cf_path/lib32 \ $cf_path/lib \ $cf_path/libdata" ;; esac CF_VERBOSE(list...) for cf_config in $cf_search_path do CF_VERBOSE(checking $cf_config/pkgconfig) if test -d $cf_config/pkgconfig then PKG_CONFIG_LIBDIR=$cf_config/pkgconfig AC_MSG_CHECKING(done) break fi done ;; (*) ;; esac if test "x$PKG_CONFIG_LIBDIR" != xno ; then AC_MSG_RESULT($PKG_CONFIG_LIBDIR) fi AC_SUBST(PKG_CONFIG_LIBDIR) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_PTHREAD version: 7 updated: 2015/04/18 08:56:57 dnl --------------- dnl Check for POSIX thread library. AC_DEFUN([CF_WITH_PTHREAD], [ AC_MSG_CHECKING(if you want to link with the pthread library) AC_ARG_WITH(pthread, [ --with-pthread use POSIX thread library], [with_pthread=$withval], [with_pthread=no]) AC_MSG_RESULT($with_pthread) if test "$with_pthread" != no ; then AC_CHECK_HEADER(pthread.h,[ AC_DEFINE(HAVE_PTHREADS_H,1,[Define to 1 if we have pthreads.h header]) for cf_lib_pthread in pthread c_r do AC_MSG_CHECKING(if we can link with the $cf_lib_pthread library) cf_save_LIBS="$LIBS" CF_ADD_LIB($cf_lib_pthread) AC_TRY_LINK([ #include ],[ int rc = pthread_create(0,0,0,0); int r2 = pthread_mutexattr_settype(0, 0); ],[with_pthread=yes],[with_pthread=no]) LIBS="$cf_save_LIBS" AC_MSG_RESULT($with_pthread) test "$with_pthread" = yes && break done if test "$with_pthread" = yes ; then CF_ADD_LIB($cf_lib_pthread) AC_DEFINE(HAVE_LIBPTHREADS,1,[Define to 1 if we have pthreads library]) else AC_MSG_ERROR(Cannot link with pthread library) fi ]) fi ]) dnl --------------------------------------------------------------------------- dnl CF_WITH_SYSTYPE version: 1 updated: 2013/01/26 16:26:12 dnl --------------- dnl For testing, override the derived host system-type which is used to decide dnl things such as the linker commands used to build shared libraries. This is dnl normally chosen automatically based on the type of system which you are dnl building on. We use it for testing the configure script. dnl dnl This is different from the --host option: it is used only for testing parts dnl of the configure script which would not be reachable with --host since that dnl relies on the build environment being real, rather than mocked up. AC_DEFUN([CF_WITH_SYSTYPE],[ CF_CHECK_CACHE([AC_CANONICAL_SYSTEM]) AC_ARG_WITH(system-type, [ --with-system-type=XXX test: override derived host system-type], [AC_MSG_WARN(overriding system type to $withval) cf_cv_system_name=$withval host_os=$withval ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_XOPEN_SOURCE version: 50 updated: 2015/10/17 19:03:33 dnl --------------- dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions, dnl or adapt to the vendor's definitions to get equivalent functionality, dnl without losing the common non-POSIX features. dnl dnl Parameters: dnl $1 is the nominal value for _XOPEN_SOURCE dnl $2 is the nominal value for _POSIX_C_SOURCE AC_DEFUN([CF_XOPEN_SOURCE],[ AC_REQUIRE([AC_CANONICAL_HOST]) cf_XOPEN_SOURCE=ifelse([$1],,500,[$1]) cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2]) cf_xopen_source= case $host_os in (aix[[4-7]]*) cf_xopen_source="-D_ALL_SOURCE" ;; (cygwin|msys) cf_XOPEN_SOURCE=600 ;; (darwin[[0-8]].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; (darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; (freebsd*|dragonfly*) # 5.x headers associate # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L cf_POSIX_C_SOURCE=200112L cf_XOPEN_SOURCE=600 cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" ;; (hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; (hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; (irix[[56]].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; (linux*|gnu*|mint*|k*bsd*-gnu) CF_GNU_SOURCE ;; (minix*) cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... ;; (mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks and other headers which use u_int / u_short types cf_XOPEN_SOURCE= CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) ;; (netbsd*) cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw ;; (openbsd[[4-9]]*) # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=600 ;; (openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; (os2*) cf_XOPEN_SOURCE= ;; (osf[[45]]*) cf_xopen_source="-D_OSF_SOURCE" ;; (nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; (sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; (solaris2.*) cf_xopen_source="-D__EXTENSIONS__" cf_cv_xopen_source=broken ;; (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2) cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE= ;; (*) CF_TRY_XOPEN_SOURCE CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) ;; esac if test -n "$cf_xopen_source" ; then CF_ADD_CFLAGS($cf_xopen_source,true) fi dnl In anything but the default case, we may have system-specific setting dnl which is still not guaranteed to provide all of the entrypoints that dnl _XOPEN_SOURCE would yield. if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then AC_MSG_CHECKING(if _XOPEN_SOURCE really is set) AC_TRY_COMPILE([#include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_XOPEN_SOURCE_set=yes], [cf_XOPEN_SOURCE_set=no]) AC_MSG_RESULT($cf_XOPEN_SOURCE_set) if test $cf_XOPEN_SOURCE_set = yes then AC_TRY_COMPILE([#include ],[ #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE make an error #endif], [cf_XOPEN_SOURCE_set_ok=yes], [cf_XOPEN_SOURCE_set_ok=no]) if test $cf_XOPEN_SOURCE_set_ok = no then AC_MSG_WARN(_XOPEN_SOURCE is lower than requested) fi else CF_TRY_XOPEN_SOURCE fi fi ]) ncurses-6.0-20160213/Ada95/samples/0000755000175100001440000000000012560514435014770 5ustar tomusersncurses-6.0-20160213/Ada95/samples/ncurses2-attr_test.adb0000644000175100001440000003355411042670476021227 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2007,2008 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.9 $ -- $Date: 2008/07/26 18:47:26 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Terminfo; use Terminal_Interface.Curses.Terminfo; with Ada.Characters.Handling; with Ada.Strings.Fixed; procedure ncurses2.attr_test is function subset (super, sub : Character_Attribute_Set) return Boolean; function intersect (b, a : Character_Attribute_Set) return Boolean; function has_A_COLOR (attr : Attributed_Character) return Boolean; function show_attr (row : Line_Position; skip : Natural; attr : Character_Attribute_Set; name : String; once : Boolean) return Line_Position; procedure attr_getc (skip : in out Integer; fg, bg : in out Color_Number; result : out Boolean); function subset (super, sub : Character_Attribute_Set) return Boolean is begin if (super.Stand_Out or not sub.Stand_Out) and (super.Under_Line or not sub.Under_Line) and (super.Reverse_Video or not sub.Reverse_Video) and (super.Blink or not sub.Blink) and (super.Dim_Character or not sub.Dim_Character) and (super.Bold_Character or not sub.Bold_Character) and (super.Alternate_Character_Set or not sub.Alternate_Character_Set) and (super.Invisible_Character or not sub.Invisible_Character) -- and -- (super.Protected_Character or not sub.Protected_Character) and -- (super.Horizontal or not sub.Horizontal) and -- (super.Left or not sub.Left) and -- (super.Low or not sub.Low) and -- (super.Right or not sub.Right) and -- (super.Top or not sub.Top) and -- (super.Vertical or not sub.Vertical) then return True; else return False; end if; end subset; function intersect (b, a : Character_Attribute_Set) return Boolean is begin if (a.Stand_Out and b.Stand_Out) or (a.Under_Line and b.Under_Line) or (a.Reverse_Video and b.Reverse_Video) or (a.Blink and b.Blink) or (a.Dim_Character and b.Dim_Character) or (a.Bold_Character and b.Bold_Character) or (a.Alternate_Character_Set and b.Alternate_Character_Set) or (a.Invisible_Character and b.Invisible_Character) -- or -- (a.Protected_Character and b.Protected_Character) or -- (a.Horizontal and b.Horizontal) or -- (a.Left and b.Left) or -- (a.Low and b.Low) or -- (a.Right and b.Right) or -- (a.Top and b.Top) or -- (a.Vertical and b.Vertical) then return True; else return False; end if; end intersect; function has_A_COLOR (attr : Attributed_Character) return Boolean is begin if attr.Color /= Color_Pair (0) then return True; else return False; end if; end has_A_COLOR; -- Print some text with attributes. function show_attr (row : Line_Position; skip : Natural; attr : Character_Attribute_Set; name : String; once : Boolean) return Line_Position is function make_record (n : Integer) return Character_Attribute_Set; function make_record (n : Integer) return Character_Attribute_Set is -- unsupported means true a : Character_Attribute_Set := (others => False); m : Integer; rest : Integer; begin -- ncv is a bitmap with these fields -- A_STANDOUT, -- A_UNDERLINE, -- A_REVERSE, -- A_BLINK, -- A_DIM, -- A_BOLD, -- A_INVIS, -- A_PROTECT, -- A_ALTCHARSET -- It means no_color_video, -- video attributes that can't be used with colors -- see man terminfo.5 m := n mod 2; rest := n / 2; if 1 = m then a.Stand_Out := True; end if; m := rest mod 2; rest := rest / 2; if 1 = m then a.Under_Line := True; end if; m := rest mod 2; rest := rest / 2; if 1 = m then a.Reverse_Video := True; end if; m := rest mod 2; rest := rest / 2; if 1 = m then a.Blink := True; end if; m := rest mod 2; rest := rest / 2; if 1 = m then a.Bold_Character := True; end if; m := rest mod 2; rest := rest / 2; if 1 = m then a.Invisible_Character := True; end if; m := rest mod 2; rest := rest / 2; if 1 = m then a.Protected_Character := True; end if; m := rest mod 2; rest := rest / 2; if 1 = m then a.Alternate_Character_Set := True; end if; return a; end make_record; ncv : constant Integer := Get_Number ("ncv"); begin Move_Cursor (Line => row, Column => 8); Add (Str => name & " mode:"); Move_Cursor (Line => row, Column => 24); Add (Ch => '|'); if skip /= 0 then -- printw("%*s", skip, " ") Add (Str => Ada.Strings.Fixed."*" (skip, ' ')); end if; if once then Switch_Character_Attribute (Attr => attr); else Set_Character_Attributes (Attr => attr); end if; Add (Str => "abcde fghij klmno pqrst uvwxy z"); if once then Switch_Character_Attribute (Attr => attr, On => False); end if; if skip /= 0 then Add (Str => Ada.Strings.Fixed."*" (skip, ' ')); end if; Add (Ch => '|'); if attr /= Normal_Video then declare begin if not subset (super => Supported_Attributes, sub => attr) then Add (Str => " (N/A)"); elsif ncv > 0 and has_A_COLOR (Get_Background) then declare Color_Supported_Attributes : constant Character_Attribute_Set := make_record (ncv); begin if intersect (Color_Supported_Attributes, attr) then Add (Str => " (NCV) "); end if; end; end if; end; end if; return row + 2; end show_attr; procedure attr_getc (skip : in out Integer; fg, bg : in out Color_Number; result : out Boolean) is ch : constant Key_Code := Getchar; nc : constant Color_Number := Color_Number (Number_Of_Colors); begin result := True; if Ada.Characters.Handling.Is_Digit (Character'Val (ch)) then skip := ctoi (Code_To_Char (ch)); elsif ch = CTRL ('L') then Touch; Touch (Current_Window); Refresh; elsif Has_Colors then case ch is -- Note the mathematical elegance compared to the C version. when Character'Pos ('f') => fg := (fg + 1) mod nc; when Character'Pos ('F') => fg := (fg - 1) mod nc; when Character'Pos ('b') => bg := (bg + 1) mod nc; when Character'Pos ('B') => bg := (bg - 1) mod nc; when others => result := False; end case; else result := False; end if; end attr_getc; -- pairs could be defined as array ( Color_Number(0) .. colors - 1) of -- array (Color_Number(0).. colors - 1) of Boolean; pairs : array (Color_Pair'Range) of Boolean := (others => False); fg, bg : Color_Number := Black; -- = 0; xmc : constant Integer := Get_Number ("xmc"); skip : Integer := xmc; n : Integer; use Int_IO; begin pairs (0) := True; if skip < 0 then skip := 0; end if; n := skip; loop declare row : Line_Position := 2; normal : Attributed_Character := Blank2; -- ??? begin -- row := 2; -- weird, row is set to 0 without this. -- TODO delete the above line, it was a gdb quirk that confused me if Has_Colors then declare pair : constant Color_Pair := Color_Pair (fg * Color_Number (Number_Of_Colors) + bg); begin -- Go though each color pair. Assume that the number of -- Redefinable_Color_Pairs is 8*8 with predefined Colors 0..7 if not pairs (pair) then Init_Pair (pair, fg, bg); pairs (pair) := True; end if; normal.Color := pair; end; end if; Set_Background (Ch => normal); Erase; Add (Line => 0, Column => 20, Str => "Character attribute test display"); row := show_attr (row, n, (Stand_Out => True, others => False), "STANDOUT", True); row := show_attr (row, n, (Reverse_Video => True, others => False), "REVERSE", True); row := show_attr (row, n, (Bold_Character => True, others => False), "BOLD", True); row := show_attr (row, n, (Under_Line => True, others => False), "UNDERLINE", True); row := show_attr (row, n, (Dim_Character => True, others => False), "DIM", True); row := show_attr (row, n, (Blink => True, others => False), "BLINK", True); -- row := show_attr (row, n, (Protected_Character => True, -- others => False), "PROTECT", True); row := show_attr (row, n, (Invisible_Character => True, others => False), "INVISIBLE", True); row := show_attr (row, n, Normal_Video, "NORMAL", False); Move_Cursor (Line => row, Column => 8); if xmc > -1 then Add (Str => "This terminal does have the magic-cookie glitch"); else Add (Str => "This terminal does not have the magic-cookie glitch"); end if; Move_Cursor (Line => row + 1, Column => 8); Add (Str => "Enter a digit to set gaps on each side of " & "displayed attributes"); Move_Cursor (Line => row + 2, Column => 8); Add (Str => "^L = repaint"); if Has_Colors then declare tmp1 : String (1 .. 1); begin Add (Str => ". f/F/b/F toggle colors ("); Put (tmp1, Integer (fg)); Add (Str => tmp1); Add (Ch => '/'); Put (tmp1, Integer (bg)); Add (Str => tmp1); Add (Ch => ')'); end; end if; Refresh; end; declare result : Boolean; begin attr_getc (n, fg, bg, result); exit when not result; end; end loop; Set_Background (Ch => Blank2); Erase; End_Windows; end ncurses2.attr_test; ncurses-6.0-20160213/Ada95/samples/status.ads0000644000175100001440000000674007746514446017027 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Status -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Laurent Pautet -- Modified by: Juergen Pfeifer, 1997 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- This package has been contributed by Laurent Pautet -- -- -- with Ada.Interrupts.Names; package Status is pragma Warnings (Off); -- the next pragma exists since 3.11p pragma Unreserve_All_Interrupts; pragma Warnings (On); protected Process is procedure Stop; function Continue return Boolean; pragma Attach_Handler (Stop, Ada.Interrupts.Names.SIGINT); private Done : Boolean := False; end Process; end Status; ncurses-6.0-20160213/Ada95/samples/sample-form_demo.ads0000644000175100001440000000571107746514446020727 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Form_Demo -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Form_Demo is procedure Demo; end Sample.Form_Demo; ncurses-6.0-20160213/Ada95/samples/sample-menu_demo-handler.ads0000644000175100001440000000723211315445604022325 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Menu_Demo.Handler -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Menus; use Terminal_Interface.Curses.Menus; generic with function My_Driver (Men : Menu; K : Key_Code; Pan : Panel) return Boolean; package Sample.Menu_Demo.Handler is procedure Drive_Me (M : Menu; Lin : Line_Position; Col : Column_Position; Title : String := ""); -- Position the menu at the given point and drive it. procedure Drive_Me (M : Menu; Title : String := ""); -- Center menu and drive it. end Sample.Menu_Demo.Handler; ncurses-6.0-20160213/Ada95/samples/sample-header_handler.adb0000644000175100001440000001744712405113232021645 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Header_Handler -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.20 $ -- $Date: 2014/09/13 19:10:18 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Calendar; use Ada.Calendar; with Terminal_Interface.Curses.Text_IO.Integer_IO; with Sample.Manifest; use Sample.Manifest; pragma Elaborate_All (Terminal_Interface.Curses.Text_Io.Integer_IO); -- This package handles the painting of the header line of the screen. -- package body Sample.Header_Handler is package Int_IO is new Terminal_Interface.Curses.Text_IO.Integer_IO (Integer); use Int_IO; Header_Window : Window := Null_Window; Display_Hour : Integer := -1; -- hour last displayed Display_Min : Integer := -1; -- minute last displayed Display_Day : Integer := -1; -- day last displayed Display_Month : Integer := -1; -- month last displayed -- This is the routine handed over to the curses library to be called -- as initialization routine when ripping of the header lines from -- the screen. This routine must follow C conventions. function Init_Header_Window (Win : Window; Columns : Column_Count) return Integer; pragma Convention (C, Init_Header_Window); procedure Internal_Update_Header_Window (Do_Update : Boolean); -- The initialization must be called before Init_Screen. It steals two -- lines from the top of the screen. procedure Init_Header_Handler is begin Rip_Off_Lines (2, Init_Header_Window'Access); end Init_Header_Handler; procedure N_Out (N : Integer); -- Emit a two digit number and ensure that a leading zero is generated if -- necessary. procedure N_Out (N : Integer) is begin if N < 10 then Add (Header_Window, '0'); Put (Header_Window, N, 1); else Put (Header_Window, N, 2); end if; end N_Out; -- Paint the header window. The input parameter is a flag indicating -- whether or not the screen should be updated physically after painting. procedure Internal_Update_Header_Window (Do_Update : Boolean) is type Month_Name_Array is array (Month_Number'First .. Month_Number'Last) of String (1 .. 9); Month_Names : constant Month_Name_Array := ("January ", "February ", "March ", "April ", "May ", "June ", "July ", "August ", "September", "October ", "November ", "December "); Now : constant Time := Clock; Sec : constant Integer := Integer (Seconds (Now)); Hour : constant Integer := Sec / 3600; Minute : constant Integer := (Sec - Hour * 3600) / 60; Mon : constant Month_Number := Month (Now); D : constant Day_Number := Day (Now); begin if Header_Window /= Null_Window then if Minute /= Display_Min or else Hour /= Display_Hour or else Display_Day /= D or else Display_Month /= Mon then Move_Cursor (Header_Window, 0, 0); N_Out (D); Add (Header_Window, '.'); Add (Header_Window, Month_Names (Mon)); Move_Cursor (Header_Window, 1, 0); N_Out (Hour); Add (Header_Window, ':'); N_Out (Minute); Display_Min := Minute; Display_Hour := Hour; Display_Month := Mon; Display_Day := D; Refresh_Without_Update (Header_Window); if Do_Update then Update_Screen; end if; end if; end if; end Internal_Update_Header_Window; -- This routine is called in the keyboard input timeout handler. So it will -- periodically update the header line of the screen. procedure Update_Header_Window is begin Internal_Update_Header_Window (True); end Update_Header_Window; function Init_Header_Window (Win : Window; Columns : Column_Count) return Integer is Title : constant String := "Ada 95 ncurses Binding Sample"; Pos : Column_Position; begin Header_Window := Win; if Win /= Null_Window then if Has_Colors then Set_Background (Win => Win, Ch => (Ch => ' ', Color => Header_Color, Attr => Normal_Video)); Set_Character_Attributes (Win => Win, Attr => Normal_Video, Color => Header_Color); Erase (Win); end if; Leave_Cursor_After_Update (Win, True); Pos := Columns - Column_Position (Title'Length); Add (Win, 0, Pos / 2, Title); -- In this phase we must not allow a physical update, because -- ncurses is not properly initialized at this point. Internal_Update_Header_Window (False); return 0; else return -1; end if; end Init_Header_Window; end Sample.Header_Handler; ncurses-6.0-20160213/Ada95/samples/sample-keyboard_handler.ads0000644000175100001440000000665007746514446022260 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Keyboard_Handler -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; -- This package contains a centralized keyboard handler used throughout -- this example. The handler establishes a timeout mechanism that provides -- periodical updates of the common header lines used in this example. -- package Sample.Keyboard_Handler is function Get_Key (Win : Window := Standard_Window) return Real_Key_Code; -- The central routine for handling keystrokes. procedure Init_Keyboard_Handler; -- Initialize the keyboard end Sample.Keyboard_Handler; ncurses-6.0-20160213/Ada95/samples/ncurses2-getch_test.adb0000644000175100001440000002367112405113232021330 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2009,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.9 $ -- $Date: 2014/09/13 19:10:18 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- Character input test -- test the keypad feature with ncurses2.util; use ncurses2.util; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Mouse; use Terminal_Interface.Curses.Mouse; with Ada.Characters.Handling; with Ada.Strings.Bounded; with ncurses2.genericPuts; procedure ncurses2.getch_test is use Int_IO; function mouse_decode (ep : Mouse_Event) return String; function mouse_decode (ep : Mouse_Event) return String is Y : Line_Position; X : Column_Position; Button : Mouse_Button; State : Button_State; package BS is new Ada.Strings.Bounded.Generic_Bounded_Length (200); use BS; buf : Bounded_String := To_Bounded_String (""); begin -- Note that these bindings do not allow -- two button states, -- The C version can print {click-1, click-3} for example. -- They also don't have the 'id' or z coordinate. Get_Event (ep, Y, X, Button, State); -- TODO Append (buf, "id "); from C version Append (buf, "at ("); Append (buf, Column_Position'Image (X)); Append (buf, ", "); Append (buf, Line_Position'Image (Y)); Append (buf, ") state"); Append (buf, Mouse_Button'Image (Button)); Append (buf, " = "); Append (buf, Button_State'Image (State)); return To_String (buf); end mouse_decode; buf : String (1 .. 1024); -- TODO was BUFSIZE n : Integer; c : Key_Code; blockflag : Timeout_Mode := Blocking; firsttime : Boolean := True; tmp2 : Event_Mask; tmp6 : String (1 .. 6); tmp20 : String (1 .. 20); x : Column_Position; y : Line_Position; tmpx : Integer; incount : Integer := 0; begin Refresh; tmp2 := Start_Mouse (All_Events); Add (Str => "Delay in 10ths of a second ( for blocking input)? "); Set_Echo_Mode (SwitchOn => True); Get (Str => buf); Set_Echo_Mode (SwitchOn => False); Set_NL_Mode (SwitchOn => False); if Ada.Characters.Handling.Is_Digit (buf (1)) then Get (Item => n, From => buf, Last => tmpx); Set_Timeout_Mode (Mode => Delayed, Amount => n * 100); blockflag := Delayed; end if; c := Character'Pos ('?'); Set_Raw_Mode (SwitchOn => True); loop if not firsttime then Add (Str => "Key pressed: "); Put (tmp6, Integer (c), 8); Add (Str => tmp6); Add (Ch => ' '); if c = Key_Mouse then declare event : Mouse_Event; begin event := Get_Mouse; Add (Str => "KEY_MOUSE, "); Add (Str => mouse_decode (event)); Add (Ch => newl); end; elsif c >= Key_Min then Key_Name (c, tmp20); Add (Str => tmp20); -- I used tmp and got bitten by the length problem:-> Add (Ch => newl); elsif c > 16#80# then -- TODO fix, use constant if possible declare c2 : constant Character := Character'Val (c mod 16#80#); begin if Ada.Characters.Handling.Is_Graphic (c2) then Add (Str => "M-"); Add (Ch => c2); else Add (Str => "M-"); Add (Str => Un_Control ((Ch => c2, Color => Color_Pair'First, Attr => Normal_Video))); end if; Add (Str => " (high-half character)"); Add (Ch => newl); end; else declare c2 : constant Character := Character'Val (c mod 16#80#); begin if Ada.Characters.Handling.Is_Graphic (c2) then Add (Ch => c2); Add (Str => " (ASCII printable character)"); Add (Ch => newl); else Add (Str => Un_Control ((Ch => c2, Color => Color_Pair'First, Attr => Normal_Video))); Add (Str => " (ASCII control character)"); Add (Ch => newl); end if; end; end if; -- TODO I am not sure why this was in the C version -- the delay statement scroll anyway. Get_Cursor_Position (Line => y, Column => x); if y >= Lines - 1 then Move_Cursor (Line => 0, Column => 0); end if; Clear_To_End_Of_Line; end if; firsttime := False; if c = Character'Pos ('g') then declare package p is new ncurses2.genericPuts (1024); use p; use p.BS; timedout : Boolean := False; boundedbuf : Bounded_String; begin Add (Str => "getstr test: "); Set_Echo_Mode (SwitchOn => True); -- Note that if delay mode is set -- Get can raise an exception. -- The C version would print the string it had so far -- also TODO get longer length string, like the C version declare begin myGet (Str => boundedbuf); exception when Curses_Exception => Add (Str => "Timed out."); Add (Ch => newl); timedout := True; end; -- note that the Ada Get will stop reading at 1024. if not timedout then Set_Echo_Mode (SwitchOn => False); Add (Str => " I saw '"); myAdd (Str => boundedbuf); Add (Str => "'."); Add (Ch => newl); end if; end; elsif c = Character'Pos ('s') then ShellOut (True); elsif c = Character'Pos ('x') or c = Character'Pos ('q') or (c = Key_None and blockflag = Blocking) then exit; elsif c = Character'Pos ('?') then Add (Str => "Type any key to see its keypad value. Also:"); Add (Ch => newl); Add (Str => "g -- triggers a getstr test"); Add (Ch => newl); Add (Str => "s -- shell out"); Add (Ch => newl); Add (Str => "q -- quit"); Add (Ch => newl); Add (Str => "? -- repeats this help message"); Add (Ch => newl); end if; loop c := Getchar; exit when c /= Key_None; if blockflag /= Blocking then Put (tmp6, incount); -- argh string length! Add (Str => tmp6); Add (Str => ": input timed out"); Add (Ch => newl); else Put (tmp6, incount); Add (Str => tmp6); Add (Str => ": input error"); Add (Ch => newl); exit; end if; incount := incount + 1; end loop; end loop; End_Mouse (tmp2); Set_Timeout_Mode (Mode => Blocking, Amount => 0); -- amount is ignored Set_Raw_Mode (SwitchOn => False); Set_NL_Mode (SwitchOn => True); Erase; End_Windows; end ncurses2.getch_test; ncurses-6.0-20160213/Ada95/samples/ncurses2-acs_and_scroll.ads0000644000175100001440000000567707212274072022206 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.acs_and_scroll; ncurses-6.0-20160213/Ada95/samples/ncurses2-menu_test.adb0000644000175100001440000001504711542240500021200 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2006,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.8 $ -- $Date: 2011/03/23 00:39:28 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Menus; use Terminal_Interface.Curses.Menus; with Terminal_Interface.Curses.Mouse; use Terminal_Interface.Curses.Mouse; procedure ncurses2.menu_test is function menu_virtualize (c : Key_Code) return Key_Code; procedure xAdd (l : Line_Position; c : Column_Position; s : String); function menu_virtualize (c : Key_Code) return Key_Code is begin case c is when Character'Pos (newl) | Key_Exit => return Menu_Request_Code'Last + 1; -- MAX_COMMAND? TODO when Character'Pos ('u') => return M_ScrollUp_Line; when Character'Pos ('d') => return M_ScrollDown_Line; when Character'Pos ('b') | Key_Next_Page => return M_ScrollUp_Page; when Character'Pos ('f') | Key_Previous_Page => return M_ScrollDown_Page; when Character'Pos ('n') | Key_Cursor_Down => return M_Next_Item; when Character'Pos ('p') | Key_Cursor_Up => return M_Previous_Item; when Character'Pos (' ') => return M_Toggle_Item; when Key_Mouse => return c; when others => Beep; return c; end case; end menu_virtualize; MENU_Y : constant Line_Count := 8; MENU_X : constant Column_Count := 8; type String_Access is access String; animals : constant array (Positive range <>) of String_Access := (new String'("Lions"), new String'("Tigers"), new String'("Bears"), new String'("(Oh my!)"), new String'("Newts"), new String'("Platypi"), new String'("Lemurs")); items_a : constant Item_Array_Access := new Item_Array (1 .. animals'Last + 1); tmp : Event_Mask; procedure xAdd (l : Line_Position; c : Column_Position; s : String) is begin Add (Line => l, Column => c, Str => s); end xAdd; mrows : Line_Count; mcols : Column_Count; menuwin : Window; m : Menu; c1 : Key_Code; c : Driver_Result; r : Key_Code; begin tmp := Start_Mouse; xAdd (0, 0, "This is the menu test:"); xAdd (2, 0, " Use up and down arrow to move the select bar."); xAdd (3, 0, " 'n' and 'p' act like arrows."); xAdd (4, 0, " 'b' and 'f' scroll up/down (page), 'u' and 'd' (line)."); xAdd (5, 0, " Press return to exit."); Refresh; for i in animals'Range loop items_a.all (i) := New_Item (animals (i).all); end loop; items_a.all (animals'Last + 1) := Null_Item; m := New_Menu (items_a); Set_Format (m, Line_Position (animals'Last + 1) / 2, 1); Scale (m, mrows, mcols); menuwin := Create (mrows + 2, mcols + 2, MENU_Y, MENU_X); Set_Window (m, menuwin); Set_KeyPad_Mode (menuwin, True); Box (menuwin); -- 0,0? Set_Sub_Window (m, Derived_Window (menuwin, mrows, mcols, 1, 1)); Post (m); loop c1 := Getchar (menuwin); r := menu_virtualize (c1); c := Driver (m, r); exit when c = Unknown_Request; -- E_UNKNOWN_COMMAND? if c = Request_Denied then Beep; end if; -- continue ? end loop; Move_Cursor (Line => Lines - 2, Column => 0); Add (Str => "You chose: "); Add (Str => Name (Current (m))); Add (Ch => newl); Pause; -- the C version didn't use Pause, it spelled it out Post (m, False); -- unpost, not clear :-( declare begin Delete (menuwin); exception when Curses_Exception => null; end; -- menuwin has children so will raise the exception. Delete (m); End_Mouse (tmp); end ncurses2.menu_test; ncurses-6.0-20160213/Ada95/samples/ncurses2-test_sgr_attributes.ads0000644000175100001440000000570407212274052023325 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.test_sgr_attributes; ncurses-6.0-20160213/Ada95/samples/ncurses2-overlap_test.adb0000644000175100001440000001533612555017427021724 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2014,2015 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.7 $ -- $Date: 2015/07/25 23:43:19 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with Terminal_Interface.Curses; use Terminal_Interface.Curses; -- test effects of overlapping windows procedure ncurses2.overlap_test is procedure fillwin (win : Window; ch : Character); procedure crosswin (win : Window; ch : Character); procedure fillwin (win : Window; ch : Character) is y1 : Line_Position; x1 : Column_Position; begin Get_Size (win, y1, x1); for y in 0 .. y1 - 1 loop Move_Cursor (win, y, 0); for x in 0 .. x1 - 1 loop Add (win, Ch => ch); end loop; end loop; exception when Curses_Exception => null; -- write to lower right corner end fillwin; procedure crosswin (win : Window; ch : Character) is y1 : Line_Position; x1 : Column_Position; begin Get_Size (win, y1, x1); for y in 0 .. y1 - 1 loop for x in 0 .. x1 - 1 loop if ((x > (x1 - 1) / 3) and (x <= (2 * (x1 - 1)) / 3)) or (((y > (y1 - 1) / 3) and (y <= (2 * (y1 - 1)) / 3))) then Move_Cursor (win, y, x); Add (win, Ch => ch); end if; end loop; end loop; end crosswin; -- In a 24x80 screen like some xterms are, the instructions will -- be overwritten. ch : Character; win1 : Window := New_Window (9, 20, 3, 3); win2 : Window := New_Window (9, 20, 9, 16); begin Set_Raw_Mode (SwitchOn => True); Refresh; Move_Cursor (Line => 0, Column => 0); Add (Str => "This test shows the behavior of wnoutrefresh() with " & "respect to"); Add (Ch => newl); Add (Str => "the shared region of two overlapping windows A and B. " & "The cross"); Add (Ch => newl); Add (Str => "pattern in each window does not overlap the other."); Add (Ch => newl); Move_Cursor (Line => 18, Column => 0); Add (Str => "a = refresh A, then B, then doupdate. b = refresh B, " & "then A, then doupdate"); Add (Ch => newl); Add (Str => "c = fill window A with letter A. d = fill window B " & "with letter B."); Add (Ch => newl); Add (Str => "e = cross pattern in window A. f = cross pattern " & "in window B."); Add (Ch => newl); Add (Str => "g = clear window A. h = clear window B."); Add (Ch => newl); Add (Str => "i = overwrite A onto B. j = overwrite " & "B onto A."); Add (Ch => newl); Add (Str => "^Q/ESC = terminate test."); loop ch := Code_To_Char (Getchar); exit when ch = CTRL ('Q') or ch = CTRL ('['); -- QUIT or ESCAPE case ch is when 'a' => -- refresh window A first, then B Refresh_Without_Update (win1); Refresh_Without_Update (win2); Update_Screen; when 'b' => -- refresh window B first, then A Refresh_Without_Update (win2); Refresh_Without_Update (win1); Update_Screen; when 'c' => -- fill window A so it's visible fillwin (win1, 'A'); when 'd' => -- fill window B so it's visible fillwin (win2, 'B'); when 'e' => -- cross test pattern in window A crosswin (win1, 'A'); when 'f' => -- cross test pattern in window B crosswin (win2, 'B'); when 'g' => -- clear window A Clear (win1); Move_Cursor (win1, 0, 0); when 'h' => -- clear window B Clear (win2); Move_Cursor (win2, 0, 0); when 'i' => -- overwrite A onto B Overwrite (win1, win2); when 'j' => -- overwrite B onto A Overwrite (win2, win1); when others => null; end case; end loop; Delete (win2); Delete (win1); Erase; End_Windows; end ncurses2.overlap_test; ncurses-6.0-20160213/Ada95/samples/sample-form_demo-handler.ads0000644000175100001440000000723211315445551022325 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Form_Demo.Handler -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms; generic with function My_Driver (Frm : Form; K : Key_Code; Pan : Panel) return Boolean; package Sample.Form_Demo.Handler is procedure Drive_Me (F : Form; Lin : Line_Position; Col : Column_Position; Title : String := ""); -- Position the menu at the given point and drive it. procedure Drive_Me (F : Form; Title : String := ""); -- Center menu and drive it. end Sample.Form_Demo.Handler; ncurses-6.0-20160213/Ada95/samples/ncurses2-getch.ads0000644000175100001440000000566207212274045020324 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure getch_test; ncurses-6.0-20160213/Ada95/samples/ncurses2-genericputs.adb0000644000175100001440000001212511315445062021527 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2008,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.4 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body ncurses2.genericPuts is procedure myGet (Win : Window := Standard_Window; Str : out BS.Bounded_String; Len : Integer := -1) is function Wgetnstr (Win : Window; Str : char_array; Len : int) return int; pragma Import (C, Wgetnstr, "wgetnstr"); N : Integer := Len; Txt : char_array (0 .. size_t (Max_Length)); xStr : String (1 .. Max_Length); Cnt : Natural; begin if N < 0 then N := Max_Length; end if; if N > Max_Length then raise Constraint_Error; end if; Txt (0) := Interfaces.C.char'First; if Wgetnstr (Win, Txt, C_Int (N)) = Curses_Err then raise Curses_Exception; end if; To_Ada (Txt, xStr, Cnt, True); Str := To_Bounded_String (xStr (1 .. Cnt)); end myGet; procedure myPut (Str : out BS.Bounded_String; i : Integer; Base : Number_Base := 10) is package Int_IO is new Integer_IO (Integer); use Int_IO; tmp : String (1 .. BS.Max_Length); begin Put (tmp, i, Base); Str := To_Bounded_String (tmp); Trim (Str, Ada.Strings.Trim_End'(Ada.Strings.Left)); end myPut; procedure myAdd (Str : BS.Bounded_String) is begin Add (Str => To_String (Str)); end myAdd; -- from ncurses-aux procedure Fill_String (Cp : chars_ptr; Str : out BS.Bounded_String) is -- Fill the string with the characters referenced by the -- chars_ptr. -- Len : Natural; begin if Cp /= Null_Ptr then Len := Natural (Strlen (Cp)); if Max_Length < Len then raise Constraint_Error; end if; declare S : String (1 .. Len); begin S := Value (Cp); Str := To_Bounded_String (S); end; else Str := Null_Bounded_String; end if; end Fill_String; end ncurses2.genericPuts; ncurses-6.0-20160213/Ada95/samples/sample-curses_demo-attributes.ads0000644000175100001440000000574307746514446023461 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Curses_Demo.Attributes -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Curses_Demo.Attributes is procedure Demo; end Sample.Curses_Demo.Attributes; ncurses-6.0-20160213/Ada95/samples/ncurses2-trace_set.adb0000644000175100001440000004155112405113232021145 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses2.trace_set -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.6 $ -- $Date: 2014/09/13 19:10:18 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Trace; use Terminal_Interface.Curses.Trace; with Terminal_Interface.Curses.Menus; use Terminal_Interface.Curses.Menus; with Ada.Strings.Bounded; -- interactively set the trace level procedure ncurses2.trace_set is function menu_virtualize (c : Key_Code) return Key_Code; function subset (super, sub : Trace_Attribute_Set) return Boolean; function trace_or (a, b : Trace_Attribute_Set) return Trace_Attribute_Set; function trace_num (tlevel : Trace_Attribute_Set) return String; function tracetrace (tlevel : Trace_Attribute_Set) return String; function run_trace_menu (m : Menu; count : Integer) return Boolean; function menu_virtualize (c : Key_Code) return Key_Code is begin case c is when Character'Pos (newl) | Key_Exit => return Menu_Request_Code'Last + 1; -- MAX_COMMAND? TODO when Character'Pos ('u') => return M_ScrollUp_Line; when Character'Pos ('d') => return M_ScrollDown_Line; when Character'Pos ('b') | Key_Next_Page => return M_ScrollUp_Page; when Character'Pos ('f') | Key_Previous_Page => return M_ScrollDown_Page; when Character'Pos ('n') | Key_Cursor_Down => return M_Next_Item; when Character'Pos ('p') | Key_Cursor_Up => return M_Previous_Item; when Character'Pos (' ') => return M_Toggle_Item; when Key_Mouse => return c; when others => Beep; return c; end case; end menu_virtualize; type string_a is access String; type tbl_entry is record name : string_a; mask : Trace_Attribute_Set; end record; t_tbl : constant array (Positive range <>) of tbl_entry := ( (new String'("Disable"), Trace_Disable), (new String'("Times"), Trace_Attribute_Set'(Times => True, others => False)), (new String'("Tputs"), Trace_Attribute_Set'(Tputs => True, others => False)), (new String'("Update"), Trace_Attribute_Set'(Update => True, others => False)), (new String'("Cursor_Move"), Trace_Attribute_Set'(Cursor_Move => True, others => False)), (new String'("Character_Output"), Trace_Attribute_Set'(Character_Output => True, others => False)), (new String'("Ordinary"), Trace_Ordinary), (new String'("Calls"), Trace_Attribute_Set'(Calls => True, others => False)), (new String'("Virtual_Puts"), Trace_Attribute_Set'(Virtual_Puts => True, others => False)), (new String'("Input_Events"), Trace_Attribute_Set'(Input_Events => True, others => False)), (new String'("TTY_State"), Trace_Attribute_Set'(TTY_State => True, others => False)), (new String'("Internal_Calls"), Trace_Attribute_Set'(Internal_Calls => True, others => False)), (new String'("Character_Calls"), Trace_Attribute_Set'(Character_Calls => True, others => False)), (new String'("Termcap_TermInfo"), Trace_Attribute_Set'(Termcap_TermInfo => True, others => False)), (new String'("Maximium"), Trace_Maximum) ); package BS is new Ada.Strings.Bounded.Generic_Bounded_Length (300); function subset (super, sub : Trace_Attribute_Set) return Boolean is begin if (super.Times or not sub.Times) and (super.Tputs or not sub.Tputs) and (super.Update or not sub.Update) and (super.Cursor_Move or not sub.Cursor_Move) and (super.Character_Output or not sub.Character_Output) and (super.Calls or not sub.Calls) and (super.Virtual_Puts or not sub.Virtual_Puts) and (super.Input_Events or not sub.Input_Events) and (super.TTY_State or not sub.TTY_State) and (super.Internal_Calls or not sub.Internal_Calls) and (super.Character_Calls or not sub.Character_Calls) and (super.Termcap_TermInfo or not sub.Termcap_TermInfo) and True then return True; else return False; end if; end subset; function trace_or (a, b : Trace_Attribute_Set) return Trace_Attribute_Set is retval : Trace_Attribute_Set := Trace_Disable; begin retval.Times := (a.Times or b.Times); retval.Tputs := (a.Tputs or b.Tputs); retval.Update := (a.Update or b.Update); retval.Cursor_Move := (a.Cursor_Move or b.Cursor_Move); retval.Character_Output := (a.Character_Output or b.Character_Output); retval.Calls := (a.Calls or b.Calls); retval.Virtual_Puts := (a.Virtual_Puts or b.Virtual_Puts); retval.Input_Events := (a.Input_Events or b.Input_Events); retval.TTY_State := (a.TTY_State or b.TTY_State); retval.Internal_Calls := (a.Internal_Calls or b.Internal_Calls); retval.Character_Calls := (a.Character_Calls or b.Character_Calls); retval.Termcap_TermInfo := (a.Termcap_TermInfo or b.Termcap_TermInfo); return retval; end trace_or; -- Print the hexadecimal value of the mask so -- users can set it from the command line. function trace_num (tlevel : Trace_Attribute_Set) return String is result : Integer := 0; m : Integer := 1; begin if tlevel.Times then result := result + m; end if; m := m * 2; if tlevel.Tputs then result := result + m; end if; m := m * 2; if tlevel.Update then result := result + m; end if; m := m * 2; if tlevel.Cursor_Move then result := result + m; end if; m := m * 2; if tlevel.Character_Output then result := result + m; end if; m := m * 2; if tlevel.Calls then result := result + m; end if; m := m * 2; if tlevel.Virtual_Puts then result := result + m; end if; m := m * 2; if tlevel.Input_Events then result := result + m; end if; m := m * 2; if tlevel.TTY_State then result := result + m; end if; m := m * 2; if tlevel.Internal_Calls then result := result + m; end if; m := m * 2; if tlevel.Character_Calls then result := result + m; end if; m := m * 2; if tlevel.Termcap_TermInfo then result := result + m; end if; m := m * 2; return result'Img; end trace_num; function tracetrace (tlevel : Trace_Attribute_Set) return String is use BS; buf : Bounded_String := To_Bounded_String (""); begin -- The C version prints the hexadecimal value of the mask, we -- won't do that here because this is Ada. if tlevel = Trace_Disable then Append (buf, "Trace_Disable"); else if subset (tlevel, Trace_Attribute_Set'(Times => True, others => False)) then Append (buf, "Times"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(Tputs => True, others => False)) then Append (buf, "Tputs"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(Update => True, others => False)) then Append (buf, "Update"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(Cursor_Move => True, others => False)) then Append (buf, "Cursor_Move"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(Character_Output => True, others => False)) then Append (buf, "Character_Output"); Append (buf, ", "); end if; if subset (tlevel, Trace_Ordinary) then Append (buf, "Ordinary"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(Calls => True, others => False)) then Append (buf, "Calls"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(Virtual_Puts => True, others => False)) then Append (buf, "Virtual_Puts"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(Input_Events => True, others => False)) then Append (buf, "Input_Events"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(TTY_State => True, others => False)) then Append (buf, "TTY_State"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(Internal_Calls => True, others => False)) then Append (buf, "Internal_Calls"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(Character_Calls => True, others => False)) then Append (buf, "Character_Calls"); Append (buf, ", "); end if; if subset (tlevel, Trace_Attribute_Set'(Termcap_TermInfo => True, others => False)) then Append (buf, "Termcap_TermInfo"); Append (buf, ", "); end if; if subset (tlevel, Trace_Maximum) then Append (buf, "Maximium"); Append (buf, ", "); end if; end if; if To_String (buf) (Length (buf) - 1) = ',' then Delete (buf, Length (buf) - 1, Length (buf)); end if; return To_String (buf); end tracetrace; function run_trace_menu (m : Menu; count : Integer) return Boolean is i, p : Item; changed : Boolean; c, v : Key_Code; begin loop changed := (count /= 0); c := Getchar (Get_Window (m)); v := menu_virtualize (c); case Driver (m, v) is when Unknown_Request => return False; when others => i := Current (m); if i = Menus.Items (m, 1) then -- the first item for n in t_tbl'First + 1 .. t_tbl'Last loop if Value (i) then Set_Value (i, False); changed := True; end if; end loop; else for n in t_tbl'First + 1 .. t_tbl'Last loop p := Menus.Items (m, n); if Value (p) then Set_Value (Menus.Items (m, 1), False); changed := True; exit; end if; end loop; end if; if not changed then return True; end if; end case; end loop; end run_trace_menu; nc_tracing, mask : Trace_Attribute_Set; pragma Import (C, nc_tracing, "_nc_tracing"); items_a : constant Item_Array_Access := new Item_Array (t_tbl'First .. t_tbl'Last + 1); mrows : Line_Count; mcols : Column_Count; menuwin : Window; menu_y : constant Line_Position := 8; menu_x : constant Column_Position := 8; ip : Item; m : Menu; count : Integer; newtrace : Trace_Attribute_Set; begin Add (Line => 0, Column => 0, Str => "Interactively set trace level:"); Add (Line => 2, Column => 0, Str => " Press space bar to toggle a selection."); Add (Line => 3, Column => 0, Str => " Use up and down arrow to move the select bar."); Add (Line => 4, Column => 0, Str => " Press return to set the trace level."); Add (Line => 6, Column => 0, Str => "(Current trace level is "); Add (Str => tracetrace (nc_tracing) & " numerically: " & trace_num (nc_tracing)); Add (Ch => ')'); Refresh; for n in t_tbl'Range loop items_a.all (n) := New_Item (t_tbl (n).name.all); end loop; items_a.all (t_tbl'Last + 1) := Null_Item; m := New_Menu (items_a); Set_Format (m, 16, 2); Scale (m, mrows, mcols); Switch_Options (m, (One_Valued => True, others => False), On => False); menuwin := New_Window (mrows + 2, mcols + 2, menu_y, menu_x); Set_Window (m, menuwin); Set_KeyPad_Mode (menuwin, SwitchOn => True); Box (menuwin); Set_Sub_Window (m, Derived_Window (menuwin, mrows, mcols, 1, 1)); Post (m); for n in t_tbl'Range loop ip := Items (m, n); mask := t_tbl (n).mask; if mask = Trace_Disable then Set_Value (ip, nc_tracing = Trace_Disable); elsif subset (sub => mask, super => nc_tracing) then Set_Value (ip, True); end if; end loop; count := 1; while run_trace_menu (m, count) loop count := count + 1; end loop; newtrace := Trace_Disable; for n in t_tbl'Range loop ip := Items (m, n); if Value (ip) then mask := t_tbl (n).mask; newtrace := trace_or (newtrace, mask); end if; end loop; Trace_On (newtrace); Trace_Put ("trace level interactively set to " & tracetrace (nc_tracing)); Move_Cursor (Line => Lines - 4, Column => 0); Add (Str => "Trace level is "); Add (Str => tracetrace (nc_tracing)); Add (Ch => newl); Pause; -- was just Add(); Getchar Post (m, False); -- menuwin has subwindows I think, which makes an error. declare begin Delete (menuwin); exception when Curses_Exception => null; end; -- free_menu(m); -- free_item() end ncurses2.trace_set; ncurses-6.0-20160213/Ada95/samples/ncurses2-color_edit.ads0000644000175100001440000000567307212274074021361 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.color_edit; ncurses-6.0-20160213/Ada95/samples/ncurses2-demo_forms.adb0000644000175100001440000004157012405113232021327 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.7 $ -- $Date: 2014/09/13 19:10:18 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms; with Terminal_Interface.Curses.Forms.Field_User_Data; with Ada.Characters.Handling; with Ada.Strings; with Ada.Strings.Bounded; procedure ncurses2.demo_forms is package BS is new Ada.Strings.Bounded.Generic_Bounded_Length (80); type myptr is access Integer; -- The C version stores a pointer in the userptr and -- converts it into a long integer. -- The correct, but inconvenient way to do it is to use a -- pointer to long and keep the pointer constant. -- It just adds one memory piece to allocate and deallocate (not done here) package StringData is new Terminal_Interface.Curses.Forms.Field_User_Data (Integer, myptr); function edit_secure (me : Field; c_in : Key_Code) return Key_Code; function form_virtualize (f : Form; w : Window) return Key_Code; function my_form_driver (f : Form; c : Key_Code) return Boolean; function make_label (frow : Line_Position; fcol : Column_Position; label : String) return Field; function make_field (frow : Line_Position; fcol : Column_Position; rows : Line_Count; cols : Column_Count; secure : Boolean) return Field; procedure display_form (f : Form); procedure erase_form (f : Form); -- prints '*' instead of characters. -- Not that this keeps a bug from the C version: -- type in the psasword field then move off and back. -- the cursor is at position one, but -- this assumes it as at the end so text gets appended instead -- of overwtitting. function edit_secure (me : Field; c_in : Key_Code) return Key_Code is rows, frow : Line_Position; nrow : Natural; cols, fcol : Column_Position; nbuf : Buffer_Number; c : Key_Code := c_in; c2 : Character; use StringData; begin Info (me, rows, cols, frow, fcol, nrow, nbuf); -- TODO if result = Form_Ok and nbuf > 0 then -- C version checked the return value -- of Info, the Ada binding throws an exception I think. if nbuf > 0 then declare temp : BS.Bounded_String; temps : String (1 .. 10); -- TODO Get_Buffer povides no information on the field length? len : myptr; begin Get_Buffer (me, 1, Str => temps); -- strcpy(temp, field_buffer(me, 1)); Get_User_Data (me, len); temp := BS.To_Bounded_String (temps (1 .. len.all)); if c <= Key_Max then c2 := Code_To_Char (c); if Ada.Characters.Handling.Is_Graphic (c2) then BS.Append (temp, c2); len.all := len.all + 1; Set_Buffer (me, 1, BS.To_String (temp)); c := Character'Pos ('*'); else c := 0; end if; else case c is when REQ_BEG_FIELD | REQ_CLR_EOF | REQ_CLR_EOL | REQ_DEL_LINE | REQ_DEL_WORD | REQ_DOWN_CHAR | REQ_END_FIELD | REQ_INS_CHAR | REQ_INS_LINE | REQ_LEFT_CHAR | REQ_NEW_LINE | REQ_NEXT_WORD | REQ_PREV_WORD | REQ_RIGHT_CHAR | REQ_UP_CHAR => c := 0; -- we don't want to do inline editing when REQ_CLR_FIELD => if len.all /= 0 then temp := BS.To_Bounded_String (""); Set_Buffer (me, 1, BS.To_String (temp)); len.all := 0; end if; when REQ_DEL_CHAR | REQ_DEL_PREV => if len.all /= 0 then BS.Delete (temp, BS.Length (temp), BS.Length (temp)); Set_Buffer (me, 1, BS.To_String (temp)); len.all := len.all - 1; end if; when others => null; end case; end if; end; end if; return c; end edit_secure; mode : Key_Code := REQ_INS_MODE; function form_virtualize (f : Form; w : Window) return Key_Code is type lookup_t is record code : Key_Code; result : Key_Code; -- should be Form_Request_Code, but we need MAX_COMMAND + 1 end record; lookup : constant array (Positive range <>) of lookup_t := ( ( Character'Pos ('A') mod 16#20#, REQ_NEXT_CHOICE ), ( Character'Pos ('B') mod 16#20#, REQ_PREV_WORD ), ( Character'Pos ('C') mod 16#20#, REQ_CLR_EOL ), ( Character'Pos ('D') mod 16#20#, REQ_DOWN_FIELD ), ( Character'Pos ('E') mod 16#20#, REQ_END_FIELD ), ( Character'Pos ('F') mod 16#20#, REQ_NEXT_PAGE ), ( Character'Pos ('G') mod 16#20#, REQ_DEL_WORD ), ( Character'Pos ('H') mod 16#20#, REQ_DEL_PREV ), ( Character'Pos ('I') mod 16#20#, REQ_INS_CHAR ), ( Character'Pos ('K') mod 16#20#, REQ_CLR_EOF ), ( Character'Pos ('L') mod 16#20#, REQ_LEFT_FIELD ), ( Character'Pos ('M') mod 16#20#, REQ_NEW_LINE ), ( Character'Pos ('N') mod 16#20#, REQ_NEXT_FIELD ), ( Character'Pos ('O') mod 16#20#, REQ_INS_LINE ), ( Character'Pos ('P') mod 16#20#, REQ_PREV_FIELD ), ( Character'Pos ('R') mod 16#20#, REQ_RIGHT_FIELD ), ( Character'Pos ('S') mod 16#20#, REQ_BEG_FIELD ), ( Character'Pos ('U') mod 16#20#, REQ_UP_FIELD ), ( Character'Pos ('V') mod 16#20#, REQ_DEL_CHAR ), ( Character'Pos ('W') mod 16#20#, REQ_NEXT_WORD ), ( Character'Pos ('X') mod 16#20#, REQ_CLR_FIELD ), ( Character'Pos ('Y') mod 16#20#, REQ_DEL_LINE ), ( Character'Pos ('Z') mod 16#20#, REQ_PREV_CHOICE ), ( Character'Pos ('[') mod 16#20#, -- ESCAPE Form_Request_Code'Last + 1 ), ( Key_Backspace, REQ_DEL_PREV ), ( KEY_DOWN, REQ_DOWN_CHAR ), ( Key_End, REQ_LAST_FIELD ), ( Key_Home, REQ_FIRST_FIELD ), ( KEY_LEFT, REQ_LEFT_CHAR ), ( KEY_LL, REQ_LAST_FIELD ), ( Key_Next, REQ_NEXT_FIELD ), ( KEY_NPAGE, REQ_NEXT_PAGE ), ( KEY_PPAGE, REQ_PREV_PAGE ), ( Key_Previous, REQ_PREV_FIELD ), ( KEY_RIGHT, REQ_RIGHT_CHAR ), ( KEY_UP, REQ_UP_CHAR ), ( Character'Pos ('Q') mod 16#20#, -- QUIT Form_Request_Code'Last + 1 -- TODO MAX_FORM_COMMAND + 1 ) ); c : Key_Code := Getchar (w); me : constant Field := Current (f); begin if c = Character'Pos (']') mod 16#20# then if mode = REQ_INS_MODE then mode := REQ_OVL_MODE; else mode := REQ_INS_MODE; end if; c := mode; else for n in lookup'Range loop if lookup (n).code = c then c := lookup (n).result; exit; end if; end loop; end if; -- Force the field that the user is typing into to be in reverse video, -- while the other fields are shown underlined. if c <= Key_Max then c := edit_secure (me, c); Set_Background (me, (Reverse_Video => True, others => False)); elsif c <= Form_Request_Code'Last then c := edit_secure (me, c); Set_Background (me, (Under_Line => True, others => False)); end if; return c; end form_virtualize; function my_form_driver (f : Form; c : Key_Code) return Boolean is flag : constant Driver_Result := Driver (f, F_Validate_Field); begin if c = Form_Request_Code'Last + 1 and flag = Form_Ok then return True; else Beep; return False; end if; end my_form_driver; function make_label (frow : Line_Position; fcol : Column_Position; label : String) return Field is f : constant Field := Create (1, label'Length, frow, fcol, 0, 0); o : Field_Option_Set := Get_Options (f); begin if f /= Null_Field then Set_Buffer (f, 0, label); o.Active := False; Set_Options (f, o); end if; return f; end make_label; function make_field (frow : Line_Position; fcol : Column_Position; rows : Line_Count; cols : Column_Count; secure : Boolean) return Field is f : Field; use StringData; len : myptr; begin if secure then f := Create (rows, cols, frow, fcol, 0, 1); else f := Create (rows, cols, frow, fcol, 0, 0); end if; if f /= Null_Field then Set_Background (f, (Under_Line => True, others => False)); len := new Integer; len.all := 0; Set_User_Data (f, len); end if; return f; end make_field; procedure display_form (f : Form) is w : Window; rows : Line_Count; cols : Column_Count; begin Scale (f, rows, cols); w := New_Window (rows + 2, cols + 4, 0, 0); if w /= Null_Window then Set_Window (f, w); Set_Sub_Window (f, Derived_Window (w, rows, cols, 1, 2)); Box (w); -- 0,0 Set_KeyPad_Mode (w, True); end if; -- TODO if Post(f) /= Form_Ok then it's a procedure declare begin Post (f); exception when Eti_System_Error | Eti_Bad_Argument | Eti_Posted | Eti_Connected | Eti_Bad_State | Eti_No_Room | Eti_Not_Posted | Eti_Unknown_Command | Eti_No_Match | Eti_Not_Selectable | Eti_Not_Connected | Eti_Request_Denied | Eti_Invalid_Field | Eti_Current => Refresh (w); end; -- end if; end display_form; procedure erase_form (f : Form) is w : Window := Get_Window (f); s : Window := Get_Sub_Window (f); begin Post (f, False); Erase (w); Refresh (w); Delete (s); Delete (w); end erase_form; finished : Boolean := False; f : constant Field_Array_Access := new Field_Array (1 .. 12); secure : Field; myform : Form; w : Window; c : Key_Code; result : Driver_Result; begin Move_Cursor (Line => 18, Column => 0); Add (Str => "Defined form-traversal keys: ^Q/ESC- exit form"); Add (Ch => newl); Add (Str => "^N -- go to next field ^P -- go to previous field"); Add (Ch => newl); Add (Str => "Home -- go to first field End -- go to last field"); Add (Ch => newl); Add (Str => "^L -- go to field to left ^R -- go to field to right"); Add (Ch => newl); Add (Str => "^U -- move upward to field ^D -- move downward to field"); Add (Ch => newl); Add (Str => "^W -- go to next word ^B -- go to previous word"); Add (Ch => newl); Add (Str => "^S -- go to start of field ^E -- go to end of field"); Add (Ch => newl); Add (Str => "^H -- delete previous char ^Y -- delete line"); Add (Ch => newl); Add (Str => "^G -- delete current word ^C -- clear to end of line"); Add (Ch => newl); Add (Str => "^K -- clear to end of field ^X -- clear field"); Add (Ch => newl); Add (Str => "Arrow keys move within a field as you would expect."); Add (Line => 4, Column => 57, Str => "Forms Entry Test"); Refresh; -- describe the form f.all (1) := make_label (0, 15, "Sample Form"); f.all (2) := make_label (2, 0, "Last Name"); f.all (3) := make_field (3, 0, 1, 18, False); f.all (4) := make_label (2, 20, "First Name"); f.all (5) := make_field (3, 20, 1, 12, False); f.all (6) := make_label (2, 34, "Middle Name"); f.all (7) := make_field (3, 34, 1, 12, False); f.all (8) := make_label (5, 0, "Comments"); f.all (9) := make_field (6, 0, 4, 46, False); f.all (10) := make_label (5, 20, "Password:"); f.all (11) := make_field (5, 30, 1, 9, True); secure := f.all (11); f.all (12) := Null_Field; myform := New_Form (f); display_form (myform); w := Get_Window (myform); Set_Raw_Mode (SwitchOn => True); Set_NL_Mode (SwitchOn => True); -- lets us read ^M's while not finished loop c := form_virtualize (myform, w); result := Driver (myform, c); case result is when Form_Ok => Add (Line => 5, Column => 57, Str => Get_Buffer (secure, 1)); Clear_To_End_Of_Line; Refresh; when Unknown_Request => finished := my_form_driver (myform, c); when others => Beep; end case; end loop; erase_form (myform); -- TODO Free_Form(myform); -- for (c = 0; f[c] != 0; c++) free_field(f[c]); Set_Raw_Mode (SwitchOn => False); Set_NL_Mode (SwitchOn => True); end ncurses2.demo_forms; ncurses-6.0-20160213/Ada95/samples/sample-header_handler.ads0000644000175100001440000000636707746514446021715 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Header_Handler -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; -- This package handles the painting of the header line of the screen. -- package Sample.Header_Handler is procedure Init_Header_Handler; -- Initialize the handler for the headerlines. procedure Update_Header_Window; -- Update the information in the header window end Sample.Header_Handler; ncurses-6.0-20160213/Ada95/samples/status.adb0000644000175100001440000000652407746514446017006 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Status -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Laurent Pautet -- Modified by: Juergen Pfeifer, 1997 -- Version Control -- $Revision: 1.7 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- This package has been contributed by Laurent Pautet -- -- -- package body Status is protected body Process is procedure Stop is begin Done := True; end Stop; function Continue return Boolean is begin return not Done; end Continue; end Process; end Status; ncurses-6.0-20160213/Ada95/samples/sample-text_io_demo.adb0000644000175100001440000001616011542241134021372 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Text_IO_Demo -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2006,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.17 $ -- $Date: 2011/03/23 00:44:12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Numerics.Generic_Elementary_Functions; with Ada.Numerics.Complex_Types; use Ada.Numerics.Complex_Types; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Text_IO; use Terminal_Interface.Curses.Text_IO; with Terminal_Interface.Curses.Text_IO.Integer_IO; with Terminal_Interface.Curses.Text_IO.Float_IO; with Terminal_Interface.Curses.Text_IO.Enumeration_IO; with Terminal_Interface.Curses.Text_IO.Complex_IO; with Terminal_Interface.Curses.Text_IO.Fixed_IO; with Terminal_Interface.Curses.Text_IO.Decimal_IO; with Terminal_Interface.Curses.Text_IO.Modular_IO; with Sample.Manifest; use Sample.Manifest; with Sample.Function_Key_Setting; use Sample.Function_Key_Setting; with Sample.Keyboard_Handler; use Sample.Keyboard_Handler; with Sample.Explanation; use Sample.Explanation; pragma Elaborate_All (Terminal_Interface.Curses.Text_Io.Complex_IO); pragma Elaborate_All (Terminal_Interface.Curses.Text_Io.Decimal_IO); pragma Elaborate_All (Terminal_Interface.Curses.Text_Io.Enumeration_IO); pragma Elaborate_All (Terminal_Interface.Curses.Text_Io.Fixed_IO); pragma Elaborate_All (Terminal_Interface.Curses.Text_Io.Float_IO); pragma Elaborate_All (Terminal_Interface.Curses.Text_Io.Integer_IO); pragma Elaborate_All (Terminal_Interface.Curses.Text_Io.Modular_IO); package body Sample.Text_IO_Demo is type Weekday is (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday); type Fix is delta 0.1 range 0.0 .. 4.0; type Dec is delta 0.01 digits 5 range 0.0 .. 4.0; type Md is mod 5; package Math is new Ada.Numerics.Generic_Elementary_Functions (Float); package Int_IO is new Terminal_Interface.Curses.Text_IO.Integer_IO (Integer); use Int_IO; package Real_IO is new Terminal_Interface.Curses.Text_IO.Float_IO (Float); use Real_IO; package Enum_IO is new Terminal_Interface.Curses.Text_IO.Enumeration_IO (Weekday); use Enum_IO; package C_IO is new Terminal_Interface.Curses.Text_IO.Complex_IO (Ada.Numerics.Complex_Types); use C_IO; package F_IO is new Terminal_Interface.Curses.Text_IO.Fixed_IO (Fix); use F_IO; package D_IO is new Terminal_Interface.Curses.Text_IO.Decimal_IO (Dec); use D_IO; package M_IO is new Terminal_Interface.Curses.Text_IO.Modular_IO (Md); use M_IO; procedure Demo is W : Window; P : Panel := Create (Standard_Window); K : Real_Key_Code; Im : constant Complex := (0.0, 1.0); Fx : constant Dec := 3.14; Dc : constant Dec := 2.72; L : Md; begin Push_Environment ("TEXTIO"); Default_Labels; Notepad ("TEXTIO-PAD00"); Set_Echo_Mode (False); Set_Meta_Mode; Set_KeyPad_Mode; W := Sub_Window (Standard_Window, Lines - 2, Columns - 2, 1, 1); Box; Refresh_Without_Update; Set_Meta_Mode (W); Set_KeyPad_Mode (W); Immediate_Update_Mode (W, True); Set_Window (W); for I in 1 .. 10 loop Put ("Square root of "); Put (Item => I, Width => 5); Put (" is "); Put (Item => Math.Sqrt (Float (I)), Exp => 0, Aft => 7); New_Line; end loop; for W in Weekday loop Put (Item => W); Put (' '); end loop; New_Line; L := Md'First; for I in 1 .. 2 loop for J in Md'Range loop Put (L); Put (' '); L := L + 1; end loop; end loop; New_Line; Put (Im); New_Line; Put (Fx); New_Line; Put (Dc); New_Line; loop K := Get_Key; if K in Special_Key_Code'Range then case K is when QUIT_CODE => exit; when HELP_CODE => Explain_Context; when EXPLAIN_CODE => Explain ("TEXTIOKEYS"); when others => null; end case; end if; end loop; Set_Window (Null_Window); Erase; Refresh_Without_Update; Delete (P); Delete (W); Pop_Environment; end Demo; end Sample.Text_IO_Demo; ncurses-6.0-20160213/Ada95/samples/sample-curses_demo.adb0000644000175100001440000001417011542237320021224 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Curses_Demo -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2004,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.17 $ -- $Date: 2011/03/23 00:29:04 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Menus; use Terminal_Interface.Curses.Menus; with Terminal_Interface.Curses.Mouse; use Terminal_Interface.Curses.Mouse; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Panels.User_Data; with Sample.Manifest; use Sample.Manifest; with Sample.Helpers; use Sample.Helpers; with Sample.Function_Key_Setting; use Sample.Function_Key_Setting; with Sample.Explanation; use Sample.Explanation; with Sample.Menu_Demo.Handler; with Sample.Curses_Demo.Mouse; with Sample.Curses_Demo.Attributes; package body Sample.Curses_Demo is type User_Data is new Integer; type User_Data_Access is access all User_Data; package PUD is new Panels.User_Data (User_Data, User_Data_Access); -- We use above instantiation of the generic User_Data package to -- demonstrate and test the use of the user data mechanism. procedure Demo is function My_Driver (M : Menu; K : Key_Code; Pan : Panel) return Boolean; package Mh is new Sample.Menu_Demo.Handler (My_Driver); Itm : Item_Array_Access := new Item_Array' (New_Item ("Attributes Demo"), New_Item ("Mouse Demo"), Null_Item); M : Menu := New_Menu (Itm); U1 : constant User_Data_Access := new User_Data'(4711); U2 : User_Data_Access; function My_Driver (M : Menu; K : Key_Code; Pan : Panel) return Boolean is Idx : constant Positive := Get_Index (Current (M)); Result : Boolean := False; begin PUD.Set_User_Data (Pan, U1); -- set some user data, just for fun if K in User_Key_Code'Range then if K = QUIT then Result := True; elsif K = SELECT_ITEM then if Idx in Itm'Range then Hide (Pan); Update_Panels; end if; case Idx is when 1 => Sample.Curses_Demo.Attributes.Demo; when 2 => Sample.Curses_Demo.Mouse.Demo; when others => Not_Implemented; end case; if Idx in Itm'Range then Top (Pan); Show (Pan); Update_Panels; Update_Screen; end if; end if; end if; PUD.Get_User_Data (Pan, U2); -- get the user data pragma Assert (U1.all = U2.all and then U1 = U2); return Result; end My_Driver; begin if (1 + Item_Count (M)) /= Itm'Length then raise Constraint_Error; end if; if not Has_Mouse then declare O : Item_Option_Set; begin Get_Options (Itm.all (2), O); O.Selectable := False; Set_Options (Itm.all (2), O); end; end if; Push_Environment ("CURSES00"); Notepad ("CURSES-PAD00"); Default_Labels; Refresh_Soft_Label_Keys_Without_Update; Mh.Drive_Me (M, " Demo "); Pop_Environment; Delete (M); Free (Itm, True); end Demo; end Sample.Curses_Demo; ncurses-6.0-20160213/Ada95/samples/sample-form_demo-handler.adb0000644000175100001440000001067711315445062022310 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Form_Demo.Handler -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2004,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.14 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Sample.Form_Demo.Aux; package body Sample.Form_Demo.Handler is package Aux renames Sample.Form_Demo.Aux; procedure Drive_Me (F : Form; Title : String := "") is L : Line_Count; C : Column_Count; Y : Line_Position; X : Column_Position; begin Aux.Geometry (F, L, C, Y, X); Drive_Me (F, Y, X, Title); end Drive_Me; procedure Drive_Me (F : Form; Lin : Line_Position; Col : Column_Position; Title : String := "") is Pan : Panel := Aux.Create (F, Title, Lin, Col); V : Cursor_Visibility := Normal; Handle_CRLF : Boolean := True; begin Set_Cursor_Visibility (V); if Aux.Count_Active (F) = 1 then Handle_CRLF := False; end if; loop declare K : constant Key_Code := Aux.Get_Request (F, Pan, Handle_CRLF); R : Driver_Result; begin if (K = 13 or else K = 10) and then not Handle_CRLF then R := Unknown_Request; else R := Driver (F, K); end if; case R is when Form_Ok => null; when Unknown_Request => if My_Driver (F, K, Pan) then exit; end if; when others => Beep; end case; end; end loop; Set_Cursor_Visibility (V); Aux.Destroy (F, Pan); end Drive_Me; end Sample.Form_Demo.Handler; ncurses-6.0-20160213/Ada95/samples/Makefile.in0000644000175100001440000001122312560514435017034 0ustar tomusers############################################################################## # Copyright (c) 1998-2012,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Juergen Pfeifer, 1996 # # $Id: Makefile.in,v 1.49 2015/08/05 23:15:41 tom Exp $ # .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile x = @EXEEXT@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ datarootdir = @datarootdir@ datadir = @datadir@ libdir = @libdir@ includedir = @includedir@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ AWK = @AWK@ LN_S = @LN_S@ CC = @CC@ CFLAGS = @CFLAGS@ CPPFLAGS = @ACPPFLAGS@ \ -DHAVE_CONFIG_H -I$(srcdir) CCFLAGS = $(CPPFLAGS) $(CFLAGS) CFLAGS_NORMAL = $(CCFLAGS) CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) REL_VERSION = @cf_cv_rel_version@ ABI_VERSION = @cf_cv_abi_version@ LOCAL_LIBDIR = @top_builddir@/lib LINK = $(CC) LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@ RANLIB = @RANLIB@ ################################################################################ BINDIR = $(DESTDIR)$(bindir) DATADIR = $(DESTDIR)$(datadir) LIBDIR = $(DESTDIR)$(libdir) MY_DATADIR = $(DATADIR)/AdaCurses ################################################################################ ada_srcdir=../src LD_FLAGS = @LD_MODEL@ $(LOCAL_LIBS) @LDFLAGS@ @LIBS@ @LOCAL_LDFLAGS2@ $(LDFLAGS) ADA = @cf_ada_compiler@ ADAFLAGS = @ADAFLAGS@ -I$(srcdir) ADAMAKE = @cf_ada_make@ ADAMAKEFLAGS = -a -A$(srcdir) -A$(ada_srcdir) -A$(srcdir)/$(ada_srcdir) ALIB = @cf_ada_package@ ABASE = $(ALIB)-curses CARGS =-cargs $(ADAFLAGS) LARGS =-largs -L../lib -lAdaCurses @TEST_ARG2@ $(LD_FLAGS) @TEST_LIBS2@ PROGS = tour$x ncurses$x @USE_GNAT_SIGINT@ rain$x all :: $(PROGS) @echo made $@ sources : @echo made $@ libs \ install \ install.libs :: @echo made $@ uninstall \ uninstall.libs :: @echo made $@ install.examples :: $(BINDIR) $(PROGS) $(INSTALL) $(PROGS) $(BINDIR) install.examples :: $(MY_DATADIR) $(INSTALL_DATA) explain.txt $(MY_DATADIR) uninstall.examples :: -cd $(BINDIR) && rm -f $(PROGS) -rmdir $(BINDIR) -rm -f $(MY_DATADIR)/explain.txt -rmdir $(MY_DATADIR) $(BINDIR) \ $(MY_DATADIR) : mkdir -p $@ ncurses$x : $(ADAMAKE) $(ADAMAKEFLAGS) ncurses $(CARGS) $(LARGS) tour$x : $(ADAMAKE) $(ADAMAKEFLAGS) tour $(CARGS) $(LARGS) rain$x : $(ADAMAKE) $(ADAMAKEFLAGS) rain $(CARGS) $(LARGS) mostlyclean: @echo made $@ clean :: mostlyclean rm -f *.o *.ali b_t*.* *.s $(PROGS) a.out core b_*_test.c *.xr[bs] \ trace screendump b~*.ad[bs] distclean :: clean rm -f Makefile realclean :: distclean @echo made $@ ncurses-6.0-20160213/Ada95/samples/ncurses2-m.ads0000644000175100001440000000574307212274047017470 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package ncurses2.m is function main return Integer; end ncurses2.m; ncurses-6.0-20160213/Ada95/samples/sample-curses_demo-attributes.adb0000644000175100001440000001302007746514446023423 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Curses_Demo.Attributes -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Sample.Manifest; use Sample.Manifest; with Sample.Function_Key_Setting; use Sample.Function_Key_Setting; with Sample.Keyboard_Handler; use Sample.Keyboard_Handler; with Sample.Explanation; use Sample.Explanation; package body Sample.Curses_Demo.Attributes is procedure Demo is P : Panel := Create (Standard_Window); K : Real_Key_Code; begin Set_Meta_Mode; Set_KeyPad_Mode; Top (P); Push_Environment ("ATTRIBDEMO"); Default_Labels; Notepad ("ATTRIB-PAD00"); Set_Character_Attributes (Attr => (others => False)); Add (Line => 1, Column => Columns / 2 - 10, Str => "This is NORMAL"); Set_Character_Attributes (Attr => (Stand_Out => True, others => False)); Add (Line => 2, Column => Columns / 2 - 10, Str => "This is Stand_Out"); Set_Character_Attributes (Attr => (Under_Line => True, others => False)); Add (Line => 3, Column => Columns / 2 - 10, Str => "This is Under_Line"); Set_Character_Attributes (Attr => (Reverse_Video => True, others => False)); Add (Line => 4, Column => Columns / 2 - 10, Str => "This is Reverse_Video"); Set_Character_Attributes (Attr => (Blink => True, others => False)); Add (Line => 5, Column => Columns / 2 - 10, Str => "This is Blink"); Set_Character_Attributes (Attr => (Dim_Character => True, others => False)); Add (Line => 6, Column => Columns / 2 - 10, Str => "This is Dim_Character"); Set_Character_Attributes (Attr => (Bold_Character => True, others => False)); Add (Line => 7, Column => Columns / 2 - 10, Str => "This is Bold_Character"); Refresh_Without_Update; Update_Panels; Update_Screen; loop K := Get_Key; if K in Special_Key_Code'Range then case K is when QUIT_CODE => exit; when HELP_CODE => Explain_Context; when EXPLAIN_CODE => Explain ("ATTRIBKEYS"); when others => null; end case; end if; end loop; Pop_Environment; Clear; Refresh_Without_Update; Delete (P); Update_Panels; Update_Screen; end Demo; end Sample.Curses_Demo.Attributes; ncurses-6.0-20160213/Ada95/samples/ncurses2-color_test.adb0000644000175100001440000001471511042670465021367 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2006,2008 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.3 $ -- $Date: 2008/07/26 18:47:17 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Ada.Strings.Fixed; procedure ncurses2.color_test is use Int_IO; procedure show_color_name (y, x : Integer; color : Integer); color_names : constant array (0 .. 15) of String (1 .. 7) := ( "black ", "red ", "green ", "yellow ", "blue ", "magenta", "cyan ", "white ", "BLACK ", "RED ", "GREEN ", "YELLOW ", "BLUE ", "MAGENTA", "CYAN ", "WHITE " ); procedure show_color_name (y, x : Integer; color : Integer) is tmp5 : String (1 .. 5); begin if Number_Of_Colors > 8 then Put (tmp5, color); Add (Line => Line_Position (y), Column => Column_Position (x), Str => tmp5); else Add (Line => Line_Position (y), Column => Column_Position (x), Str => color_names (color)); end if; end show_color_name; top, width : Integer; hello : String (1 .. 5); -- tmp3 : String (1 .. 3); -- tmp2 : String (1 .. 2); begin Refresh; Add (Str => "There are "); -- Put(tmp3, Number_Of_Colors*Number_Of_Colors); Add (Str => Ada.Strings.Fixed.Trim (Integer'Image (Number_Of_Colors * Number_Of_Colors), Ada.Strings.Left)); Add (Str => " color pairs"); Add (Ch => newl); if Number_Of_Colors > 8 then width := 4; else width := 8; end if; if Number_Of_Colors > 8 then hello := "Test "; else hello := "Hello"; end if; for Bright in Boolean loop if Number_Of_Colors > 8 then top := 0; else top := Boolean'Pos (Bright) * (Number_Of_Colors + 3); end if; Clear_To_End_Of_Screen; Move_Cursor (Line => Line_Position (top) + 1, Column => 0); -- Put(tmp2, Number_Of_Colors); Add (Str => Ada.Strings.Fixed.Trim (Integer'Image (Number_Of_Colors), Ada.Strings.Left)); Add (Ch => 'x'); Add (Str => Ada.Strings.Fixed.Trim (Integer'Image (Number_Of_Colors), Ada.Strings.Left)); Add (Str => " matrix of foreground/background colors, bright *"); if Bright then Add (Str => "on"); else Add (Str => "off"); end if; Add (Ch => '*'); for i in 0 .. Number_Of_Colors - 1 loop show_color_name (top + 2, (i + 1) * width, i); end loop; for i in 0 .. Number_Of_Colors - 1 loop show_color_name (top + 3 + i, 0, i); end loop; for i in 1 .. Number_Of_Color_Pairs - 1 loop Init_Pair (Color_Pair (i), Color_Number (i mod Number_Of_Colors), Color_Number (i / Number_Of_Colors)); -- attron((attr_t) COLOR_PAIR(i)) -- Huh? Set_Color (Pair => Color_Pair (i)); if Bright then Switch_Character_Attribute (Attr => (Bold_Character => True, others => False)); end if; Add (Line => Line_Position (top + 3 + (i / Number_Of_Colors)), Column => Column_Position ((i mod Number_Of_Colors + 1) * width), Str => hello); Set_Character_Attributes; end loop; if Number_Of_Colors > 8 or Bright then Pause; end if; end loop; Erase; End_Windows; end ncurses2.color_test; ncurses-6.0-20160213/Ada95/samples/README0000644000175100001440000000473510422526414015654 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README,v 1.2 2006/04/22 22:24:12 tom Exp $ ------------------------------------------------------------------------------- The intention of the demo at this point in time is not to demonstrate all the features of (n)curses and its subsystems, but to give some sample sources how to use the binding at all. Ideally in the future we can combine both goals. ncurses-6.0-20160213/Ada95/samples/sample-menu_demo.adb0000644000175100001440000003500611542241134020663 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Menu_Demo -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2008,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.19 $ -- $Date: 2011/03/23 00:44:12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Menus; use Terminal_Interface.Curses.Menus; with Terminal_Interface.Curses.Menus.Menu_User_Data; with Terminal_Interface.Curses.Menus.Item_User_Data; with Sample.Manifest; use Sample.Manifest; with Sample.Function_Key_Setting; use Sample.Function_Key_Setting; with Sample.Menu_Demo.Handler; with Sample.Helpers; use Sample.Helpers; with Sample.Explanation; use Sample.Explanation; package body Sample.Menu_Demo is package Spacing_Demo is procedure Spacing_Test; end Spacing_Demo; package body Spacing_Demo is procedure Spacing_Test is function My_Driver (M : Menu; K : Key_Code; P : Panel) return Boolean; procedure Set_Option_Key; procedure Set_Select_Key; procedure Set_Description_Key; procedure Set_Hide_Key; package Mh is new Sample.Menu_Demo.Handler (My_Driver); I : Item_Array_Access := new Item_Array' (New_Item ("January", "31 Days"), New_Item ("February", "28/29 Days"), New_Item ("March", "31 Days"), New_Item ("April", "30 Days"), New_Item ("May", "31 Days"), New_Item ("June", "30 Days"), New_Item ("July", "31 Days"), New_Item ("August", "31 Days"), New_Item ("September", "30 Days"), New_Item ("October", "31 Days"), New_Item ("November", "30 Days"), New_Item ("December", "31 Days"), Null_Item); M : Menu := New_Menu (I); Flip_State : Boolean := True; Hide_Long : Boolean := False; type Format_Code is (Four_By_1, Four_By_2, Four_By_3); type Operations is (Flip, Reorder, Reformat, Reselect, Describe); type Change is array (Operations) of Boolean; pragma Pack (Change); No_Change : constant Change := Change'(others => False); Current_Format : Format_Code := Four_By_1; To_Change : Change := No_Change; function My_Driver (M : Menu; K : Key_Code; P : Panel) return Boolean is begin if M = Null_Menu then raise Menu_Exception; end if; if P = Null_Panel then raise Panel_Exception; end if; To_Change := No_Change; if K in User_Key_Code'Range then if K = QUIT then return True; end if; end if; if K in Special_Key_Code'Range then case K is when Key_F4 => To_Change (Flip) := True; return True; when Key_F5 => To_Change (Reformat) := True; Current_Format := Four_By_1; return True; when Key_F6 => To_Change (Reformat) := True; Current_Format := Four_By_2; return True; when Key_F7 => To_Change (Reformat) := True; Current_Format := Four_By_3; return True; when Key_F8 => To_Change (Reorder) := True; return True; when Key_F9 => To_Change (Reselect) := True; return True; when Key_F10 => if Current_Format /= Four_By_3 then To_Change (Describe) := True; return True; else return False; end if; when Key_F11 => Hide_Long := not Hide_Long; declare O : Item_Option_Set; begin for J in I'Range loop Get_Options (I.all (J), O); O.Selectable := True; if Hide_Long then case J is when 1 | 3 | 5 | 7 | 8 | 10 | 12 => O.Selectable := False; when others => null; end case; end if; Set_Options (I.all (J), O); end loop; end; return False; when others => null; end case; end if; return False; end My_Driver; procedure Set_Option_Key is O : Menu_Option_Set; begin if Current_Format = Four_By_1 then Set_Soft_Label_Key (8, ""); else Get_Options (M, O); if O.Row_Major_Order then Set_Soft_Label_Key (8, "O-Col"); else Set_Soft_Label_Key (8, "O-Row"); end if; end if; Refresh_Soft_Label_Keys_Without_Update; end Set_Option_Key; procedure Set_Select_Key is O : Menu_Option_Set; begin Get_Options (M, O); if O.One_Valued then Set_Soft_Label_Key (9, "Multi"); else Set_Soft_Label_Key (9, "Singl"); end if; Refresh_Soft_Label_Keys_Without_Update; end Set_Select_Key; procedure Set_Description_Key is O : Menu_Option_Set; begin if Current_Format = Four_By_3 then Set_Soft_Label_Key (10, ""); else Get_Options (M, O); if O.Show_Descriptions then Set_Soft_Label_Key (10, "-Desc"); else Set_Soft_Label_Key (10, "+Desc"); end if; end if; Refresh_Soft_Label_Keys_Without_Update; end Set_Description_Key; procedure Set_Hide_Key is begin if Hide_Long then Set_Soft_Label_Key (11, "Enab"); else Set_Soft_Label_Key (11, "Disab"); end if; Refresh_Soft_Label_Keys_Without_Update; end Set_Hide_Key; begin Push_Environment ("MENU01"); Notepad ("MENU-PAD01"); Default_Labels; Set_Soft_Label_Key (4, "Flip"); Set_Soft_Label_Key (5, "4x1"); Set_Soft_Label_Key (6, "4x2"); Set_Soft_Label_Key (7, "4x3"); Set_Option_Key; Set_Select_Key; Set_Description_Key; Set_Hide_Key; Set_Format (M, 4, 1); loop Mh.Drive_Me (M); exit when To_Change = No_Change; if To_Change (Flip) then if Flip_State then Flip_State := False; Set_Spacing (M, 3, 2, 0); else Flip_State := True; Set_Spacing (M); end if; elsif To_Change (Reformat) then case Current_Format is when Four_By_1 => Set_Format (M, 4, 1); when Four_By_2 => Set_Format (M, 4, 2); when Four_By_3 => declare O : Menu_Option_Set; begin Get_Options (M, O); O.Show_Descriptions := False; Set_Options (M, O); Set_Format (M, 4, 3); end; end case; Set_Option_Key; Set_Description_Key; elsif To_Change (Reorder) then declare O : Menu_Option_Set; begin Get_Options (M, O); O.Row_Major_Order := not O.Row_Major_Order; Set_Options (M, O); Set_Option_Key; end; elsif To_Change (Reselect) then declare O : Menu_Option_Set; begin Get_Options (M, O); O.One_Valued := not O.One_Valued; Set_Options (M, O); Set_Select_Key; end; elsif To_Change (Describe) then declare O : Menu_Option_Set; begin Get_Options (M, O); O.Show_Descriptions := not O.Show_Descriptions; Set_Options (M, O); Set_Description_Key; end; else null; end if; end loop; Set_Spacing (M); Pop_Environment; pragma Assert (Get_Index (Items (M, 1)) = Get_Index (I (1))); Delete (M); Free (I, True); end Spacing_Test; end Spacing_Demo; procedure Demo is -- We use this datatype only to test the instantiation of -- the Menu_User_Data generic package. No functionality -- behind it. type User_Data is new Integer; type User_Data_Access is access User_Data; -- Those packages are only instantiated to test the usability. -- No real functionality is shown in the demo. package MUD is new Menu_User_Data (User_Data, User_Data_Access); package IUD is new Item_User_Data (User_Data, User_Data_Access); function My_Driver (M : Menu; K : Key_Code; P : Panel) return Boolean; package Mh is new Sample.Menu_Demo.Handler (My_Driver); Itm : Item_Array_Access := new Item_Array' (New_Item ("Menu Layout Options"), New_Item ("Demo of Hook functions"), Null_Item); M : Menu := New_Menu (Itm); U1 : constant User_Data_Access := new User_Data'(4711); U2 : User_Data_Access; U3 : constant User_Data_Access := new User_Data'(4712); U4 : User_Data_Access; function My_Driver (M : Menu; K : Key_Code; P : Panel) return Boolean is Idx : constant Positive := Get_Index (Current (M)); begin if K in User_Key_Code'Range then if K = QUIT then return True; elsif K = SELECT_ITEM then if Idx in Itm'Range then Hide (P); Update_Panels; end if; case Idx is when 1 => Spacing_Demo.Spacing_Test; when others => Not_Implemented; end case; if Idx in Itm'Range then Top (P); Show (P); Update_Panels; Update_Screen; end if; end if; end if; return False; end My_Driver; begin Push_Environment ("MENU00"); Notepad ("MENU-PAD00"); Default_Labels; Refresh_Soft_Label_Keys_Without_Update; Set_Pad_Character (M, '|'); MUD.Set_User_Data (M, U1); IUD.Set_User_Data (Itm.all (1), U3); Mh.Drive_Me (M); MUD.Get_User_Data (M, U2); pragma Assert (U1 = U2 and U1.all = 4711); IUD.Get_User_Data (Itm.all (1), U4); pragma Assert (U3 = U4 and U3.all = 4712); Pop_Environment; Delete (M); Free (Itm, True); end Demo; end Sample.Menu_Demo; ncurses-6.0-20160213/Ada95/samples/sample-keyboard_handler.adb0000644000175100001440000002007611542240020022202 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Keyboard_Handler -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2006,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.16 $ -- $Date: 2011/03/23 00:34:24 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Strings; use Ada.Strings; with Ada.Strings.Fixed; use Ada.Strings.Fixed; with Ada.Strings.Maps.Constants; use Ada.Strings.Maps.Constants; with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; with Ada.Characters.Handling; use Ada.Characters.Handling; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms; with Terminal_Interface.Curses.Forms.Field_Types.Enumeration; use Terminal_Interface.Curses.Forms.Field_Types.Enumeration; with Sample.Header_Handler; use Sample.Header_Handler; with Sample.Form_Demo.Aux; use Sample.Form_Demo.Aux; with Sample.Manifest; use Sample.Manifest; with Sample.Form_Demo.Handler; -- This package contains a centralized keyboard handler used throughout -- this example. The handler establishes a timeout mechanism that provides -- periodical updates of the common header lines used in this example. -- package body Sample.Keyboard_Handler is In_Command : Boolean := False; function Get_Key (Win : Window := Standard_Window) return Real_Key_Code is K : Real_Key_Code; function Command return Real_Key_Code; function Command return Real_Key_Code is function My_Driver (F : Form; C : Key_Code; P : Panel) return Boolean; package Fh is new Sample.Form_Demo.Handler (My_Driver); type Label_Array is array (Label_Number) of String (1 .. 8); Labels : Label_Array; FA : Field_Array_Access := new Field_Array' (Make (0, 0, "Command:"), Make (Top => 0, Left => 9, Width => Columns - 11), Null_Field); K : Real_Key_Code := Key_None; N : Natural := 0; function My_Driver (F : Form; C : Key_Code; P : Panel) return Boolean is Ch : Character; begin if P = Null_Panel then raise Panel_Exception; end if; if C in User_Key_Code'Range and then C = QUIT then if Driver (F, F_Validate_Field) = Form_Ok then K := Key_None; return True; end if; elsif C in Normal_Key_Code'Range then Ch := Character'Val (C); if Ch = LF or else Ch = CR then if Driver (F, F_Validate_Field) = Form_Ok then declare Buffer : String (1 .. Positive (Columns - 11)); Cmdc : String (1 .. 8); begin Get_Buffer (Fld => FA.all (2), Str => Buffer); Trim (Buffer, Left); if Buffer (1) /= ' ' then Cmdc := To_Upper (Buffer (Cmdc'Range)); for I in Labels'Range loop if Cmdc = Labels (I) then K := Function_Key_Code (Function_Key_Number (I)); exit; end if; end loop; end if; return True; end; end if; end if; end if; return False; end My_Driver; begin In_Command := True; for I in Label_Number'Range loop Get_Soft_Label_Key (I, Labels (I)); Trim (Labels (I), Left); Translate (Labels (I), Upper_Case_Map); if Labels (I) (1) /= ' ' then N := N + 1; end if; end loop; if N > 0 then -- some labels were really set declare Enum_Info : Enumeration_Info (N); Enum_Field : Enumeration_Field; J : Positive := Enum_Info.Names'First; Frm : Form := Create (FA); begin for I in Label_Number'Range loop if Labels (I) (1) /= ' ' then Enum_Info.Names (J) := new String'(Labels (I)); J := J + 1; end if; end loop; Enum_Field := Create (Enum_Info, True); Set_Field_Type (FA.all (2), Enum_Field); Set_Background (FA.all (2), Normal_Video); Fh.Drive_Me (Frm, Lines - 3, 0); Delete (Frm); Update_Panels; Update_Screen; end; end if; Free (FA, True); In_Command := False; return K; end Command; begin Set_Timeout_Mode (Win, Delayed, 30000); loop K := Get_Keystroke (Win); if K = Key_None then -- a timeout occurred Update_Header_Window; elsif K = 3 and then not In_Command then -- CTRL-C K := Command; exit when K /= Key_None; else exit; end if; end loop; return K; end Get_Key; procedure Init_Keyboard_Handler is begin null; end Init_Keyboard_Handler; end Sample.Keyboard_Handler; ncurses-6.0-20160213/Ada95/samples/sample-curses_demo.ads0000644000175100001440000000571507746514446021274 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Curses_Demo -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Curses_Demo is procedure Demo; end Sample.Curses_Demo; ncurses-6.0-20160213/Ada95/samples/ncurses2-demo_panels.adb0000644000175100001440000003070711542241134021467 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2008,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.7 $ -- $Date: 2011/03/23 00:44:12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Panels.User_Data; with ncurses2.genericPuts; procedure ncurses2.demo_panels (nap_mseci : Integer) is use Int_IO; function mkpanel (color : Color_Number; rows : Line_Count; cols : Column_Count; tly : Line_Position; tlx : Column_Position) return Panel; procedure rmpanel (pan : in out Panel); procedure pflush; procedure wait_a_while (msec : Integer); procedure saywhat (text : String); procedure fill_panel (pan : Panel); nap_msec : Integer := nap_mseci; function mkpanel (color : Color_Number; rows : Line_Count; cols : Column_Count; tly : Line_Position; tlx : Column_Position) return Panel is win : Window; pan : Panel := Null_Panel; begin win := New_Window (rows, cols, tly, tlx); if Null_Window /= win then pan := New_Panel (win); if pan = Null_Panel then Delete (win); elsif Has_Colors then declare fg, bg : Color_Number; begin if color = Blue then fg := White; else fg := Black; end if; bg := color; Init_Pair (Color_Pair (color), fg, bg); Set_Background (win, (Ch => ' ', Attr => Normal_Video, Color => Color_Pair (color))); end; else Set_Background (win, (Ch => ' ', Attr => (Bold_Character => True, others => False), Color => Color_Pair (color))); end if; end if; return pan; end mkpanel; procedure rmpanel (pan : in out Panel) is win : Window := Panel_Window (pan); begin Delete (pan); Delete (win); end rmpanel; procedure pflush is begin Update_Panels; Update_Screen; end pflush; procedure wait_a_while (msec : Integer) is begin -- The C version had some #ifdef blocks here if msec = 1 then Getchar; else Nap_Milli_Seconds (msec); end if; end wait_a_while; procedure saywhat (text : String) is begin Move_Cursor (Line => Lines - 1, Column => 0); Clear_To_End_Of_Line; Add (Str => text); end saywhat; -- from sample-curses_demo.adb type User_Data is new String (1 .. 2); type User_Data_Access is access all User_Data; package PUD is new Panels.User_Data (User_Data, User_Data_Access); use PUD; procedure fill_panel (pan : Panel) is win : constant Window := Panel_Window (pan); num : constant Character := Get_User_Data (pan).all (2); tmp6 : String (1 .. 6) := "-panx-"; maxy : Line_Count; maxx : Column_Count; begin Move_Cursor (win, 1, 1); tmp6 (5) := num; Add (win, Str => tmp6); Clear_To_End_Of_Line (win); Box (win); Get_Size (win, maxy, maxx); for y in 2 .. maxy - 3 loop for x in 1 .. maxx - 3 loop Move_Cursor (win, y, x); Add (win, num); end loop; end loop; exception when Curses_Exception => null; end fill_panel; modstr : constant array (0 .. 5) of String (1 .. 5) := ("test ", "TEST ", "(**) ", "*()* ", "<--> ", "LAST " ); package p is new ncurses2.genericPuts (1024); use p; use p.BS; -- the C version said register int y, x; tmpb : BS.Bounded_String; begin Refresh; for y in 0 .. Integer (Lines - 2) loop for x in 0 .. Integer (Columns - 1) loop myPut (tmpb, (y + x) mod 10); myAdd (Str => tmpb); end loop; end loop; for y in 0 .. 4 loop declare p1, p2, p3, p4, p5 : Panel; U1 : constant User_Data_Access := new User_Data'("p1"); U2 : constant User_Data_Access := new User_Data'("p2"); U3 : constant User_Data_Access := new User_Data'("p3"); U4 : constant User_Data_Access := new User_Data'("p4"); U5 : constant User_Data_Access := new User_Data'("p5"); begin p1 := mkpanel (Red, Lines / 2 - 2, Columns / 8 + 1, 0, 0); Set_User_Data (p1, U1); p2 := mkpanel (Green, Lines / 2 + 1, Columns / 7, Lines / 4, Columns / 10); Set_User_Data (p2, U2); p3 := mkpanel (Yellow, Lines / 4, Columns / 10, Lines / 2, Columns / 9); Set_User_Data (p3, U3); p4 := mkpanel (Blue, Lines / 2 - 2, Columns / 8, Lines / 2 - 2, Columns / 3); Set_User_Data (p4, U4); p5 := mkpanel (Magenta, Lines / 2 - 2, Columns / 8, Lines / 2, Columns / 2 - 2); Set_User_Data (p5, U5); fill_panel (p1); fill_panel (p2); fill_panel (p3); fill_panel (p4); fill_panel (p5); Hide (p4); Hide (p5); pflush; saywhat ("press any key to continue"); wait_a_while (nap_msec); saywhat ("h3 s1 s2 s4 s5; press any key to continue"); Move (p1, 0, 0); Hide (p3); Show (p1); Show (p2); Show (p4); Show (p5); pflush; wait_a_while (nap_msec); saywhat ("s1; press any key to continue"); Show (p1); pflush; wait_a_while (nap_msec); saywhat ("s2; press any key to continue"); Show (p2); pflush; wait_a_while (nap_msec); saywhat ("m2; press any key to continue"); Move (p2, Lines / 3 + 1, Columns / 8); pflush; wait_a_while (nap_msec); saywhat ("s3;"); Show (p3); pflush; wait_a_while (nap_msec); saywhat ("m3; press any key to continue"); Move (p3, Lines / 4 + 1, Columns / 15); pflush; wait_a_while (nap_msec); saywhat ("b3; press any key to continue"); Bottom (p3); pflush; wait_a_while (nap_msec); saywhat ("s4; press any key to continue"); Show (p4); pflush; wait_a_while (nap_msec); saywhat ("s5; press any key to continue"); Show (p5); pflush; wait_a_while (nap_msec); saywhat ("t3; press any key to continue"); Top (p3); pflush; wait_a_while (nap_msec); saywhat ("t1; press any key to continue"); Top (p1); pflush; wait_a_while (nap_msec); saywhat ("t2; press any key to continue"); Top (p2); pflush; wait_a_while (nap_msec); saywhat ("t3; press any key to continue"); Top (p3); pflush; wait_a_while (nap_msec); saywhat ("t4; press any key to continue"); Top (p4); pflush; wait_a_while (nap_msec); for itmp in 0 .. 5 loop declare w4 : constant Window := Panel_Window (p4); w5 : constant Window := Panel_Window (p5); begin saywhat ("m4; press any key to continue"); Move_Cursor (w4, Lines / 8, 1); Add (w4, modstr (itmp)); Move (p4, Lines / 6, Column_Position (itmp) * (Columns / 8)); Move_Cursor (w5, Lines / 6, 1); Add (w5, modstr (itmp)); pflush; wait_a_while (nap_msec); saywhat ("m5; press any key to continue"); Move_Cursor (w4, Lines / 6, 1); Add (w4, modstr (itmp)); Move (p5, Lines / 3 - 1, (Column_Position (itmp) * 10) + 6); Move_Cursor (w5, Lines / 8, 1); Add (w5, modstr (itmp)); pflush; wait_a_while (nap_msec); end; end loop; saywhat ("m4; press any key to continue"); Move (p4, Lines / 6, 6 * (Columns / 8)); -- Move(p4, Lines / 6, itmp * (Columns / 8)); pflush; wait_a_while (nap_msec); saywhat ("t5; press any key to continue"); Top (p5); pflush; wait_a_while (nap_msec); saywhat ("t2; press any key to continue"); Top (p2); pflush; wait_a_while (nap_msec); saywhat ("t1; press any key to continue"); Top (p1); pflush; wait_a_while (nap_msec); saywhat ("d2; press any key to continue"); rmpanel (p2); pflush; wait_a_while (nap_msec); saywhat ("h3; press any key to continue"); Hide (p3); pflush; wait_a_while (nap_msec); saywhat ("d1; press any key to continue"); rmpanel (p1); pflush; wait_a_while (nap_msec); saywhat ("d4; press any key to continue"); rmpanel (p4); pflush; wait_a_while (nap_msec); saywhat ("d5; press any key to continue"); rmpanel (p5); pflush; wait_a_while (nap_msec); if nap_msec = 1 then exit; else nap_msec := 100; end if; end; end loop; Erase; End_Windows; end ncurses2.demo_panels; ncurses-6.0-20160213/Ada95/samples/ncurses2-genericputs.ads0000644000175100001440000000772011315445062021555 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2006,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.3 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; use Ada.Text_IO; with Ada.Strings.Bounded; use Ada.Strings.Bounded; with Interfaces.C; use Interfaces.C; with Interfaces.C.Strings; use Interfaces.C.Strings; with Terminal_Interface.Curses; generic Max : Natural; -- type mystring is private; -- type myint is package ncurses2.genericPuts is package BS is new Ada.Strings.Bounded.Generic_Bounded_Length (Max); use BS; procedure myGet (Win : Terminal_Interface.Curses.Window := Terminal_Interface.Curses.Standard_Window; Str : out BS.Bounded_String; Len : Integer := -1); procedure myPut (Str : out BS.Bounded_String; i : Integer; Base : Number_Base := 10); -- the default should be Ada.Text_IO.Integer_IO.Default_Base -- but Default_Base is hidden in the generic so doesn't exist! procedure myAdd (Str : BS.Bounded_String); procedure Fill_String (Cp : chars_ptr; Str : out BS.Bounded_String); end ncurses2.genericPuts; ncurses-6.0-20160213/Ada95/samples/sample-text_io_demo.ads0000644000175100001440000000571707746514446021445 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Text_IO_Demo -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Text_IO_Demo is procedure Demo; end Sample.Text_IO_Demo; ncurses-6.0-20160213/Ada95/samples/ncurses2-m.adb0000644000175100001440000003631511042670526017444 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2006,2008 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.8 $ -- $Date: 2008/07/26 18:47:50 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- TODO use Default_Character where appropriate -- This is an Ada version of ncurses -- I translated this because it tests the most features. with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Trace; use Terminal_Interface.Curses.Trace; with Ada.Text_IO; use Ada.Text_IO; with Ada.Characters.Latin_1; -- with Ada.Characters.Handling; with Ada.Command_Line; use Ada.Command_Line; with Ada.Strings.Unbounded; with ncurses2.util; use ncurses2.util; with ncurses2.getch_test; with ncurses2.attr_test; with ncurses2.color_test; with ncurses2.demo_panels; with ncurses2.color_edit; with ncurses2.slk_test; with ncurses2.acs_display; with ncurses2.acs_and_scroll; with ncurses2.flushinp_test; with ncurses2.test_sgr_attributes; with ncurses2.menu_test; with ncurses2.demo_pad; with ncurses2.demo_forms; with ncurses2.overlap_test; with ncurses2.trace_set; with ncurses2.getopt; use ncurses2.getopt; package body ncurses2.m is use Int_IO; function To_trace (n : Integer) return Trace_Attribute_Set; procedure usage; procedure Set_Terminal_Modes; function Do_Single_Test (c : Character) return Boolean; function To_trace (n : Integer) return Trace_Attribute_Set is a : Trace_Attribute_Set := (others => False); m : Integer; rest : Integer; begin m := n mod 2; if 1 = m then a.Times := True; end if; rest := n / 2; m := rest mod 2; if 1 = m then a.Tputs := True; end if; rest := rest / 2; m := rest mod 2; if 1 = m then a.Update := True; end if; rest := rest / 2; m := rest mod 2; if 1 = m then a.Cursor_Move := True; end if; rest := rest / 2; m := rest mod 2; if 1 = m then a.Character_Output := True; end if; rest := rest / 2; m := rest mod 2; if 1 = m then a.Calls := True; end if; rest := rest / 2; m := rest mod 2; if 1 = m then a.Virtual_Puts := True; end if; rest := rest / 2; m := rest mod 2; if 1 = m then a.Input_Events := True; end if; rest := rest / 2; m := rest mod 2; if 1 = m then a.TTY_State := True; end if; rest := rest / 2; m := rest mod 2; if 1 = m then a.Internal_Calls := True; end if; rest := rest / 2; m := rest mod 2; if 1 = m then a.Character_Calls := True; end if; rest := rest / 2; m := rest mod 2; if 1 = m then a.Termcap_TermInfo := True; end if; return a; end To_trace; -- these are type Stdscr_Init_Proc; function rip_footer ( Win : Window; Columns : Column_Count) return Integer; pragma Convention (C, rip_footer); function rip_footer ( Win : Window; Columns : Column_Count) return Integer is begin Set_Background (Win, (Ch => ' ', Attr => (Reverse_Video => True, others => False), Color => 0)); Erase (Win); Move_Cursor (Win, 0, 0); Add (Win, "footer:" & Columns'Img & " columns"); Refresh_Without_Update (Win); return 0; -- Curses_OK; end rip_footer; function rip_header ( Win : Window; Columns : Column_Count) return Integer; pragma Convention (C, rip_header); function rip_header ( Win : Window; Columns : Column_Count) return Integer is begin Set_Background (Win, (Ch => ' ', Attr => (Reverse_Video => True, others => False), Color => 0)); Erase (Win); Move_Cursor (Win, 0, 0); Add (Win, "header:" & Columns'Img & " columns"); -- 'Img is a GNAT extention Refresh_Without_Update (Win); return 0; -- Curses_OK; end rip_header; procedure usage is -- type Stringa is access String; use Ada.Strings.Unbounded; -- tbl : constant array (Positive range <>) of Stringa := ( tbl : constant array (Positive range <>) of Unbounded_String := ( To_Unbounded_String ("Usage: ncurses [options]"), To_Unbounded_String (""), To_Unbounded_String ("Options:"), To_Unbounded_String (" -a f,b set default-colors " & "(assumed white-on-black)"), To_Unbounded_String (" -d use default-colors if terminal " & "supports them"), To_Unbounded_String (" -e fmt specify format for soft-keys " & "test (e)"), To_Unbounded_String (" -f rip-off footer line " & "(can repeat)"), To_Unbounded_String (" -h rip-off header line " & "(can repeat)"), To_Unbounded_String (" -s msec specify nominal time for " & "panel-demo (default: 1, to hold)"), To_Unbounded_String (" -t mask specify default trace-level " & "(may toggle with ^T)") ); begin for n in tbl'Range loop Put_Line (Standard_Error, To_String (tbl (n))); end loop; -- exit(EXIT_FAILURE); -- TODO should we use Set_Exit_Status and throw and exception? end usage; procedure Set_Terminal_Modes is begin Set_Raw_Mode (SwitchOn => False); Set_Cbreak_Mode (SwitchOn => True); Set_Echo_Mode (SwitchOn => False); Allow_Scrolling (Mode => True); Use_Insert_Delete_Line (Do_Idl => True); Set_KeyPad_Mode (SwitchOn => True); end Set_Terminal_Modes; nap_msec : Integer := 1; function Do_Single_Test (c : Character) return Boolean is begin case c is when 'a' => getch_test; when 'b' => attr_test; when 'c' => if not Has_Colors then Cannot ("does not support color."); else color_test; end if; when 'd' => if not Has_Colors then Cannot ("does not support color."); elsif not Can_Change_Color then Cannot ("has hardwired color values."); else color_edit; end if; when 'e' => slk_test; when 'f' => acs_display; when 'o' => demo_panels (nap_msec); when 'g' => acs_and_scroll; when 'i' => flushinp_test (Standard_Window); when 'k' => test_sgr_attributes; when 'm' => menu_test; when 'p' => demo_pad; when 'r' => demo_forms; when 's' => overlap_test; when 't' => trace_set; when '?' => null; when others => return False; end case; return True; end Do_Single_Test; command : Character; my_e_param : Soft_Label_Key_Format := Four_Four; assumed_colors : Boolean := False; default_colors : Boolean := False; default_fg : Color_Number := White; default_bg : Color_Number := Black; -- nap_msec was an unsigned long integer in the C version, -- yet napms only takes an int! c : Integer; c2 : Character; optind : Integer := 1; -- must be initialized to one. optarg : getopt.stringa; length : Integer; tmpi : Integer; package myio is new Ada.Text_IO.Integer_IO (Integer); use myio; save_trace : Integer := 0; save_trace_set : Trace_Attribute_Set; function main return Integer is begin loop Qgetopt (c, Argument_Count, Argument'Access, "a:de:fhs:t:", optind, optarg); exit when c = -1; c2 := Character'Val (c); case c2 is when 'a' => -- Ada doesn't have scanf, it doesn't even have a -- regular expression library. assumed_colors := True; myio.Get (optarg.all, Integer (default_fg), length); myio.Get (optarg.all (length + 2 .. optarg.all'Length), Integer (default_bg), length); when 'd' => default_colors := True; when 'e' => myio.Get (optarg.all, tmpi, length); if tmpi > 3 then usage; return 1; end if; my_e_param := Soft_Label_Key_Format'Val (tmpi); when 'f' => Rip_Off_Lines (-1, rip_footer'Access); when 'h' => Rip_Off_Lines (1, rip_header'Access); when 's' => myio.Get (optarg.all, nap_msec, length); when 't' => myio.Get (optarg.all, save_trace, length); when others => usage; return 1; end case; end loop; -- the C version had a bunch of macros here. -- if (!isatty(fileno(stdin))) -- isatty is not available in the standard Ada so skip it. save_trace_set := To_trace (save_trace); Trace_On (save_trace_set); Init_Soft_Label_Keys (my_e_param); Init_Screen; Set_Background (Ch => (Ch => Blank, Attr => Normal_Video, Color => Color_Pair'First)); if Has_Colors then Start_Color; if default_colors then Use_Default_Colors; elsif assumed_colors then Assume_Default_Colors (default_fg, default_bg); end if; end if; Set_Terminal_Modes; Save_Curses_Mode (Curses); End_Windows; -- TODO add macro #if blocks. Put_Line ("Welcome to " & Curses_Version & ". Press ? for help."); loop Put_Line ("This is the ncurses main menu"); Put_Line ("a = keyboard and mouse input test"); Put_Line ("b = character attribute test"); Put_Line ("c = color test pattern"); Put_Line ("d = edit RGB color values"); Put_Line ("e = exercise soft keys"); Put_Line ("f = display ACS characters"); Put_Line ("g = display windows and scrolling"); Put_Line ("i = test of flushinp()"); Put_Line ("k = display character attributes"); Put_Line ("m = menu code test"); Put_Line ("o = exercise panels library"); Put_Line ("p = exercise pad features"); Put_Line ("q = quit"); Put_Line ("r = exercise forms code"); Put_Line ("s = overlapping-refresh test"); Put_Line ("t = set trace level"); Put_Line ("? = repeat this command summary"); Put ("> "); Flush; command := Ada.Characters.Latin_1.NUL; -- get_input: -- loop declare Ch : Character; begin Get (Ch); -- TODO if read(ch) <= 0 -- TODO ada doesn't have an Is_Space function command := Ch; -- TODO if ch = '\n' or '\r' are these in Ada? end; -- end loop get_input; declare begin if Do_Single_Test (command) then Flush_Input; Set_Terminal_Modes; Reset_Curses_Mode (Curses); Clear; Refresh; End_Windows; if command = '?' then Put_Line ("This is the ncurses capability tester."); Put_Line ("You may select a test from the main menu by " & "typing the"); Put_Line ("key letter of the choice (the letter to left " & "of the =)"); Put_Line ("at the > prompt. The commands `x' or `q' will " & "exit."); end if; -- continue; --why continue in the C version? end if; exception when Curses_Exception => End_Windows; end; exit when command = 'q'; end loop; Curses_Free_All; return 0; -- TODO ExitProgram(EXIT_SUCCESS); end main; end ncurses2.m; ncurses-6.0-20160213/Ada95/samples/ncurses2-acs_and_scroll.adb0000644000175100001440000006354511542237674022173 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2009,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.11 $ -- $Date: 2011/03/23 00:33:00 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- Windows and scrolling tester. -- Demonstrate windows with Ada.Strings.Fixed; with Ada.Strings; with ncurses2.util; use ncurses2.util; with ncurses2.genericPuts; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Mouse; use Terminal_Interface.Curses.Mouse; with Terminal_Interface.Curses.PutWin; use Terminal_Interface.Curses.PutWin; with Ada.Streams.Stream_IO; use Ada.Streams.Stream_IO; with Ada.Streams; use Ada.Streams; procedure ncurses2.acs_and_scroll is Macro_Quit : constant Key_Code := Character'Pos ('Q') mod 16#20#; Macro_Escape : constant Key_Code := Character'Pos ('[') mod 16#20#; Quit : constant Key_Code := CTRL ('Q'); Escape : constant Key_Code := CTRL ('['); Botlines : constant Line_Position := 4; type pair is record y : Line_Position; x : Column_Position; end record; type Frame; type FrameA is access Frame; f : File_Type; dumpfile : constant String := "screendump"; procedure Outerbox (ul, lr : pair; onoff : Boolean); function HaveKeyPad (w : Window) return Boolean; function HaveScroll (w : Window) return Boolean; procedure newwin_legend (curpw : Window); procedure transient (curpw : Window; msg : String); procedure newwin_report (win : Window := Standard_Window); procedure selectcell (uli : Line_Position; ulj : Column_Position; lri : Line_Position; lrj : Column_Position; p : out pair; b : out Boolean); function getwindow return Window; procedure newwin_move (win : Window; dy : Line_Position; dx : Column_Position); function delete_framed (fp : FrameA; showit : Boolean) return FrameA; -- A linked list -- I wish there was a standard library linked list. Oh well. type Frame is record next, last : FrameA; do_scroll : Boolean; do_keypad : Boolean; wind : Window; end record; current : FrameA; c : Key_Code; procedure Outerbox (ul, lr : pair; onoff : Boolean) is begin if onoff then -- Note the fix of an obscure bug -- try making a 1x1 box then enlarging it, the is a blank -- upper left corner! Add (Line => ul.y - 1, Column => ul.x - 1, Ch => ACS_Map (ACS_Upper_Left_Corner)); Add (Line => ul.y - 1, Column => lr.x + 1, Ch => ACS_Map (ACS_Upper_Right_Corner)); Add (Line => lr.y + 1, Column => lr.x + 1, Ch => ACS_Map (ACS_Lower_Right_Corner)); Add (Line => lr.y + 1, Column => ul.x - 1, Ch => ACS_Map (ACS_Lower_Left_Corner)); Move_Cursor (Line => ul.y - 1, Column => ul.x); Horizontal_Line (Line_Symbol => ACS_Map (ACS_Horizontal_Line), Line_Size => Integer (lr.x - ul.x) + 1); Move_Cursor (Line => ul.y, Column => ul.x - 1); Vertical_Line (Line_Symbol => ACS_Map (ACS_Vertical_Line), Line_Size => Integer (lr.y - ul.y) + 1); Move_Cursor (Line => lr.y + 1, Column => ul.x); Horizontal_Line (Line_Symbol => ACS_Map (ACS_Horizontal_Line), Line_Size => Integer (lr.x - ul.x) + 1); Move_Cursor (Line => ul.y, Column => lr.x + 1); Vertical_Line (Line_Symbol => ACS_Map (ACS_Vertical_Line), Line_Size => Integer (lr.y - ul.y) + 1); else Add (Line => ul.y - 1, Column => ul.x - 1, Ch => ' '); Add (Line => ul.y - 1, Column => lr.x + 1, Ch => ' '); Add (Line => lr.y + 1, Column => lr.x + 1, Ch => ' '); Add (Line => lr.y + 1, Column => ul.x - 1, Ch => ' '); Move_Cursor (Line => ul.y - 1, Column => ul.x); Horizontal_Line (Line_Symbol => Blank2, Line_Size => Integer (lr.x - ul.x) + 1); Move_Cursor (Line => ul.y, Column => ul.x - 1); Vertical_Line (Line_Symbol => Blank2, Line_Size => Integer (lr.y - ul.y) + 1); Move_Cursor (Line => lr.y + 1, Column => ul.x); Horizontal_Line (Line_Symbol => Blank2, Line_Size => Integer (lr.x - ul.x) + 1); Move_Cursor (Line => ul.y, Column => lr.x + 1); Vertical_Line (Line_Symbol => Blank2, Line_Size => Integer (lr.y - ul.y) + 1); end if; end Outerbox; function HaveKeyPad (w : Window) return Boolean is begin return Get_KeyPad_Mode (w); exception when Curses_Exception => return False; end HaveKeyPad; function HaveScroll (w : Window) return Boolean is begin return Scrolling_Allowed (w); exception when Curses_Exception => return False; end HaveScroll; procedure newwin_legend (curpw : Window) is package p is new genericPuts (200); use p; use p.BS; type string_a is access String; type rrr is record msg : string_a; code : Integer range 0 .. 3; end record; legend : constant array (Positive range <>) of rrr := ( ( new String'("^C = create window"), 0 ), ( new String'("^N = next window"), 0 ), ( new String'("^P = previous window"), 0 ), ( new String'("^F = scroll forward"), 0 ), ( new String'("^B = scroll backward"), 0 ), ( new String'("^K = keypad(%s)"), 1 ), ( new String'("^S = scrollok(%s)"), 2 ), ( new String'("^W = save window to file"), 0 ), ( new String'("^R = restore window"), 0 ), ( new String'("^X = resize"), 0 ), ( new String'("^Q%s = exit"), 3 ) ); buf : Bounded_String; do_keypad : constant Boolean := HaveKeyPad (curpw); do_scroll : constant Boolean := HaveScroll (curpw); pos : Natural; mypair : pair; use Ada.Strings.Fixed; begin Move_Cursor (Line => Lines - 4, Column => 0); for n in legend'Range loop pos := Ada.Strings.Fixed.Index (Source => legend (n).msg.all, Pattern => "%s"); -- buf := (others => ' '); buf := To_Bounded_String (legend (n).msg.all); case legend (n).code is when 0 => null; when 1 => if do_keypad then Replace_Slice (buf, pos, pos + 1, "yes"); else Replace_Slice (buf, pos, pos + 1, "no"); end if; when 2 => if do_scroll then Replace_Slice (buf, pos, pos + 1, "yes"); else Replace_Slice (buf, pos, pos + 1, "no"); end if; when 3 => if do_keypad then Replace_Slice (buf, pos, pos + 1, "/ESC"); else Replace_Slice (buf, pos, pos + 1, ""); end if; end case; Get_Cursor_Position (Line => mypair.y, Column => mypair.x); if Columns < mypair.x + 3 + Column_Position (Length (buf)) then Add (Ch => newl); elsif n /= 1 then -- n /= legen'First Add (Str => ", "); end if; myAdd (Str => buf); end loop; Clear_To_End_Of_Line; end newwin_legend; procedure transient (curpw : Window; msg : String) is begin newwin_legend (curpw); if msg /= "" then Add (Line => Lines - 1, Column => 0, Str => msg); Refresh; Nap_Milli_Seconds (1000); end if; Move_Cursor (Line => Lines - 1, Column => 0); if HaveKeyPad (curpw) then Add (Str => "Non-arrow"); else Add (Str => "All other"); end if; Add (Str => " characters are echoed, window should "); if not HaveScroll (curpw) then Add (Str => "not "); end if; Add (Str => "scroll"); Clear_To_End_Of_Line; end transient; procedure newwin_report (win : Window := Standard_Window) is y : Line_Position; x : Column_Position; use Int_IO; tmp2a : String (1 .. 2); tmp2b : String (1 .. 2); begin if win /= Standard_Window then transient (win, ""); end if; Get_Cursor_Position (win, y, x); Move_Cursor (Line => Lines - 1, Column => Columns - 17); Put (tmp2a, Integer (y)); Put (tmp2b, Integer (x)); Add (Str => "Y = " & tmp2a & " X = " & tmp2b); if win /= Standard_Window then Refresh; else Move_Cursor (win, y, x); end if; end newwin_report; procedure selectcell (uli : Line_Position; ulj : Column_Position; lri : Line_Position; lrj : Column_Position; p : out pair; b : out Boolean) is c : Key_Code; res : pair; i : Line_Position := 0; j : Column_Position := 0; si : constant Line_Position := lri - uli + 1; sj : constant Column_Position := lrj - ulj + 1; begin res.y := uli; res.x := ulj; loop Move_Cursor (Line => uli + i, Column => ulj + j); newwin_report; c := Getchar; case c is when Macro_Quit | Macro_Escape => -- on the same line macro calls interfere due to the # comment -- this is needed because keypad off affects all windows. -- try removing the ESCAPE and see what happens. b := False; return; when KEY_UP => i := i + si - 1; -- same as i := i - 1 because of Modulus arithmetic, -- on Line_Position, which is a Natural -- the C version uses this form too, interestingly. when KEY_DOWN => i := i + 1; when KEY_LEFT => j := j + sj - 1; when KEY_RIGHT => j := j + 1; when Key_Mouse => declare event : Mouse_Event; y : Line_Position; x : Column_Position; Button : Mouse_Button; State : Button_State; begin event := Get_Mouse; Get_Event (Event => event, Y => y, X => x, Button => Button, State => State); if y > uli and x > ulj then i := y - uli; j := x - ulj; -- same as when others => res.y := uli + i; res.x := ulj + j; p := res; b := True; return; else Beep; end if; end; when others => res.y := uli + i; res.x := ulj + j; p := res; b := True; return; end case; i := i mod si; j := j mod sj; end loop; end selectcell; function getwindow return Window is rwindow : Window; ul, lr : pair; result : Boolean; begin Move_Cursor (Line => 0, Column => 0); Clear_To_End_Of_Line; Add (Str => "Use arrows to move cursor, anything else to mark corner 1"); Refresh; selectcell (2, 1, Lines - Botlines - 2, Columns - 2, ul, result); if not result then return Null_Window; end if; Add (Line => ul.y - 1, Column => ul.x - 1, Ch => ACS_Map (ACS_Upper_Left_Corner)); Move_Cursor (Line => 0, Column => 0); Clear_To_End_Of_Line; Add (Str => "Use arrows to move cursor, anything else to mark corner 2"); Refresh; selectcell (ul.y, ul.x, Lines - Botlines - 2, Columns - 2, lr, result); if not result then return Null_Window; end if; rwindow := Sub_Window (Number_Of_Lines => lr.y - ul.y + 1, Number_Of_Columns => lr.x - ul.x + 1, First_Line_Position => ul.y, First_Column_Position => ul.x); Outerbox (ul, lr, True); Refresh; Refresh (rwindow); Move_Cursor (Line => 0, Column => 0); Clear_To_End_Of_Line; return rwindow; end getwindow; procedure newwin_move (win : Window; dy : Line_Position; dx : Column_Position) is cur_y, max_y : Line_Position; cur_x, max_x : Column_Position; begin Get_Cursor_Position (win, cur_y, cur_x); Get_Size (win, max_y, max_x); cur_x := Column_Position'Min (Column_Position'Max (cur_x + dx, 0), max_x - 1); cur_y := Line_Position'Min (Line_Position'Max (cur_y + dy, 0), max_y - 1); Move_Cursor (win, Line => cur_y, Column => cur_x); end newwin_move; function delete_framed (fp : FrameA; showit : Boolean) return FrameA is np : FrameA; begin fp.all.last.all.next := fp.all.next; fp.all.next.all.last := fp.all.last; if showit then Erase (fp.all.wind); Refresh (fp.all.wind); end if; Delete (fp.all.wind); if fp = fp.all.next then np := null; else np := fp.all.next; end if; -- TODO free(fp); return np; end delete_framed; Mask : Event_Mask := No_Events; Mask2 : Event_Mask; usescr : Window; begin if Has_Mouse then Register_Reportable_Event ( Button => Left, State => Clicked, Mask => Mask); Mask2 := Start_Mouse (Mask); end if; c := CTRL ('C'); Set_Raw_Mode (SwitchOn => True); loop transient (Standard_Window, ""); case c is when Character'Pos ('c') mod 16#20# => -- Ctrl('c') declare neww : constant FrameA := new Frame'(null, null, False, False, Null_Window); begin neww.all.wind := getwindow; if neww.all.wind = Null_Window then exit; -- was goto breakout; ha ha ha else if current = null then neww.all.next := neww; neww.all.last := neww; else neww.all.next := current.all.next; neww.all.last := current; neww.all.last.all.next := neww; neww.all.next.all.last := neww; end if; current := neww; Set_KeyPad_Mode (current.all.wind, True); current.all.do_keypad := HaveKeyPad (current.all.wind); current.all.do_scroll := HaveScroll (current.all.wind); end if; end; when Character'Pos ('N') mod 16#20# => -- Ctrl('N') if current /= null then current := current.all.next; end if; when Character'Pos ('P') mod 16#20# => -- Ctrl('P') if current /= null then current := current.all.last; end if; when Character'Pos ('F') mod 16#20# => -- Ctrl('F') if current /= null and then HaveScroll (current.all.wind) then Scroll (current.all.wind, 1); end if; when Character'Pos ('B') mod 16#20# => -- Ctrl('B') if current /= null and then HaveScroll (current.all.wind) then -- The C version of Scroll may return ERR which is ignored -- we need to avoid the exception -- with the 'and HaveScroll(current.wind)' Scroll (current.all.wind, -1); end if; when Character'Pos ('K') mod 16#20# => -- Ctrl('K') if current /= null then current.all.do_keypad := not current.all.do_keypad; Set_KeyPad_Mode (current.all.wind, current.all.do_keypad); end if; when Character'Pos ('S') mod 16#20# => -- Ctrl('S') if current /= null then current.all.do_scroll := not current.all.do_scroll; Allow_Scrolling (current.all.wind, current.all.do_scroll); end if; when Character'Pos ('W') mod 16#20# => -- Ctrl('W') if current /= current.all.next then Create (f, Name => dumpfile); -- TODO error checking if not Is_Open (f) then raise Curses_Exception; end if; Put_Window (current.all.wind, f); Close (f); current := delete_framed (current, True); end if; when Character'Pos ('R') mod 16#20# => -- Ctrl('R') declare neww : FrameA := new Frame'(null, null, False, False, Null_Window); begin Open (f, Mode => In_File, Name => dumpfile); neww := new Frame'(null, null, False, False, Null_Window); neww.all.next := current.all.next; neww.all.last := current; neww.all.last.all.next := neww; neww.all.next.all.last := neww; neww.all.wind := Get_Window (f); Close (f); Refresh (neww.all.wind); end; when Character'Pos ('X') mod 16#20# => -- Ctrl('X') if current /= null then declare tmp, ul, lr : pair; mx : Column_Position; my : Line_Position; tmpbool : Boolean; begin Move_Cursor (Line => 0, Column => 0); Clear_To_End_Of_Line; Add (Str => "Use arrows to move cursor, anything else " & "to mark new corner"); Refresh; Get_Window_Position (current.all.wind, ul.y, ul.x); selectcell (ul.y, ul.x, Lines - Botlines - 2, Columns - 2, tmp, tmpbool); if not tmpbool then -- the C version had a goto. I refuse gotos. Beep; else Get_Size (current.all.wind, lr.y, lr.x); lr.y := lr.y + ul.y - 1; lr.x := lr.x + ul.x - 1; Outerbox (ul, lr, False); Refresh_Without_Update; Get_Size (current.all.wind, my, mx); if my > tmp.y - ul.y then Get_Cursor_Position (current.all.wind, lr.y, lr.x); Move_Cursor (current.all.wind, tmp.y - ul.y + 1, 0); Clear_To_End_Of_Screen (current.all.wind); Move_Cursor (current.all.wind, lr.y, lr.x); end if; if mx > tmp.x - ul.x then for i in 0 .. my - 1 loop Move_Cursor (current.all.wind, i, tmp.x - ul.x + 1); Clear_To_End_Of_Line (current.all.wind); end loop; end if; Refresh_Without_Update (current.all.wind); lr := tmp; -- The C version passes invalid args to resize -- which returns an ERR. For Ada we avoid the exception. if lr.y /= ul.y and lr.x /= ul.x then Resize (current.all.wind, lr.y - ul.y + 0, lr.x - ul.x + 0); end if; Get_Window_Position (current.all.wind, ul.y, ul.x); Get_Size (current.all.wind, lr.y, lr.x); lr.y := lr.y + ul.y - 1; lr.x := lr.x + ul.x - 1; Outerbox (ul, lr, True); Refresh_Without_Update; Refresh_Without_Update (current.all.wind); Move_Cursor (Line => 0, Column => 0); Clear_To_End_Of_Line; Update_Screen; end if; end; end if; when Key_F10 => declare tmp : pair; tmpbool : Boolean; begin -- undocumented --- use this to test area clears selectcell (0, 0, Lines - 1, Columns - 1, tmp, tmpbool); Clear_To_End_Of_Screen; Refresh; end; when Key_Cursor_Up => newwin_move (current.all.wind, -1, 0); when Key_Cursor_Down => newwin_move (current.all.wind, 1, 0); when Key_Cursor_Left => newwin_move (current.all.wind, 0, -1); when Key_Cursor_Right => newwin_move (current.all.wind, 0, 1); when Key_Backspace | Key_Delete_Char => declare y : Line_Position; x : Column_Position; tmp : Line_Position; begin Get_Cursor_Position (current.all.wind, y, x); -- x := x - 1; -- I got tricked by the -1 = Max_Natural - 1 result -- y := y - 1; if not (x = 0 and y = 0) then if x = 0 then y := y - 1; Get_Size (current.all.wind, tmp, x); end if; x := x - 1; Delete_Character (current.all.wind, y, x); end if; end; when others => -- TODO c = '\r' ? if current /= null then declare begin Add (current.all.wind, Ch => Code_To_Char (c)); exception when Curses_Exception => null; -- this happens if we are at the -- lower right of a window and add a character. end; else Beep; end if; end case; newwin_report (current.all.wind); if current /= null then usescr := current.all.wind; else usescr := Standard_Window; end if; Refresh (usescr); c := Getchar (usescr); exit when c = Quit or (c = Escape and HaveKeyPad (usescr)); -- TODO when does c = ERR happen? end loop; -- TODO while current /= null loop -- current := delete_framed(current, False); -- end loop; Allow_Scrolling (Mode => True); End_Mouse (Mask2); Set_Raw_Mode (SwitchOn => True); Erase; End_Windows; end ncurses2.acs_and_scroll; ncurses-6.0-20160213/Ada95/samples/ncurses2-util.ads0000644000175100001440000000752210447516250020205 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses2.util -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.2 $ -- $Date: 2006/06/25 14:24:40 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Ada.Text_IO; package ncurses2.util is Blank : constant Character := ' '; Blank2 : constant Attributed_Character := (Ch => Blank, Attr => Normal_Video, Color => Color_Pair'First); newl : constant Character := Character'Val (10); function CTRL (c : Character) return Key_Code; function CTRL (c : Character) return Character; function Getchar (win : Window := Standard_Window) return Key_Code; procedure Getchar (win : Window := Standard_Window); procedure Pause; procedure Cannot (s : String); procedure ShellOut (message : Boolean); package Int_IO is new Ada.Text_IO.Integer_IO (Integer); function Is_Digit (c : Key_Code) return Boolean; procedure P (s : String); function Code_To_Char (c : Key_Code) return Character; function ctoi (c : Character) return Integer; end ncurses2.util; ncurses-6.0-20160213/Ada95/samples/sample-form_demo-aux.adb0000644000175100001440000002464511315445062021470 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Form_Demo.Aux -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2004,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.17 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; with Sample.Manifest; use Sample.Manifest; with Sample.Helpers; use Sample.Helpers; with Sample.Keyboard_Handler; use Sample.Keyboard_Handler; with Sample.Explanation; use Sample.Explanation; package body Sample.Form_Demo.Aux is procedure Geometry (F : Form; L : out Line_Count; -- Lines used for menu C : out Column_Count; -- Columns used for menu Y : out Line_Position; -- Proposed Line for menu X : out Column_Position) -- Proposed Column for menu is begin Scale (F, L, C); L := L + 2; -- count for frame at top and bottom C := C + 2; -- " -- Calculate horizontal coordinate at the screen center X := (Columns - C) / 2; Y := 1; -- start always in line 1 end Geometry; function Create (F : Form; Title : String; Lin : Line_Position; Col : Column_Position) return Panel is W, S : Window; L : Line_Count; C : Column_Count; Y : Line_Position; X : Column_Position; Pan : Panel; begin Geometry (F, L, C, Y, X); W := New_Window (L, C, Lin, Col); Set_Meta_Mode (W); Set_KeyPad_Mode (W); if Has_Colors then Set_Background (Win => W, Ch => (Ch => ' ', Color => Default_Colors, Attr => Normal_Video)); Set_Character_Attributes (Win => W, Color => Default_Colors, Attr => Normal_Video); Erase (W); end if; S := Derived_Window (W, L - 2, C - 2, 1, 1); Set_Meta_Mode (S); Set_KeyPad_Mode (S); Box (W); Set_Window (F, W); Set_Sub_Window (F, S); if Title'Length > 0 then Window_Title (W, Title); end if; Pan := New_Panel (W); Post (F); return Pan; end Create; procedure Destroy (F : Form; P : in out Panel) is W, S : Window; begin W := Get_Window (F); S := Get_Sub_Window (F); Post (F, False); Erase (W); Delete (P); Set_Window (F, Null_Window); Set_Sub_Window (F, Null_Window); Delete (S); Delete (W); Update_Panels; end Destroy; function Get_Request (F : Form; P : Panel; Handle_CRLF : Boolean := True) return Key_Code is W : constant Window := Get_Window (F); K : Real_Key_Code; Ch : Character; begin Top (P); loop K := Get_Key (W); if K in Special_Key_Code'Range then case K is when HELP_CODE => Explain_Context; when EXPLAIN_CODE => Explain ("FORMKEYS"); when Key_Home => return F_First_Field; when Key_End => return F_Last_Field; when QUIT_CODE => return QUIT; when Key_Cursor_Down => return F_Down_Char; when Key_Cursor_Up => return F_Up_Char; when Key_Cursor_Left => return F_Previous_Char; when Key_Cursor_Right => return F_Next_Char; when Key_Next_Page => return F_Next_Page; when Key_Previous_Page => return F_Previous_Page; when Key_Backspace => return F_Delete_Previous; when Key_Clear_Screen => return F_Clear_Field; when Key_Clear_End_Of_Line => return F_Clear_EOF; when others => return K; end case; elsif K in Normal_Key_Code'Range then Ch := Character'Val (K); case Ch is when CAN => return QUIT; -- CTRL-X when ACK => return F_Next_Field; -- CTRL-F when STX => return F_Previous_Field; -- CTRL-B when FF => return F_Left_Field; -- CTRL-L when DC2 => return F_Right_Field; -- CTRL-R when NAK => return F_Up_Field; -- CTRL-U when EOT => return F_Down_Field; -- CTRL-D when ETB => return F_Next_Word; -- CTRL-W when DC4 => return F_Previous_Word; -- CTRL-T when SOH => return F_Begin_Field; -- CTRL-A when ENQ => return F_End_Field; -- CTRL-E when HT => return F_Insert_Char; -- CTRL-I when SI => return F_Insert_Line; -- CTRL-O when SYN => return F_Delete_Char; -- CTRL-V when BS => return F_Delete_Previous; -- CTRL-H when EM => return F_Delete_Line; -- CTRL-Y when BEL => return F_Delete_Word; -- CTRL-G when VT => return F_Clear_EOF; -- CTRL-K when SO => return F_Next_Choice; -- CTRL-N when DLE => return F_Previous_Choice; -- CTRL-P when CR | LF => if Handle_CRLF then return F_New_Line; else return K; end if; when others => return K; end case; else return K; end if; end loop; end Get_Request; function Make (Top : Line_Position; Left : Column_Position; Text : String) return Field is Fld : Field; C : constant Column_Count := Column_Count (Text'Length); begin Fld := New_Field (1, C, Top, Left); Set_Buffer (Fld, 0, Text); Switch_Options (Fld, (Active => True, others => False), False); if Has_Colors then Set_Background (Fld => Fld, Color => Default_Colors); end if; return Fld; end Make; function Make (Height : Line_Count := 1; Width : Column_Count; Top : Line_Position; Left : Column_Position; Off_Screen : Natural := 0) return Field is Fld : constant Field := New_Field (Height, Width, Top, Left, Off_Screen); begin if Has_Colors then Set_Foreground (Fld => Fld, Color => Form_Fore_Color); Set_Background (Fld => Fld, Color => Form_Back_Color); else Set_Background (Fld, (Reverse_Video => True, others => False)); end if; return Fld; end Make; function Default_Driver (F : Form; K : Key_Code; P : Panel) return Boolean is begin if P = Null_Panel then raise Panel_Exception; end if; if K in User_Key_Code'Range and then K = QUIT then if Driver (F, F_Validate_Field) = Form_Ok then return True; end if; end if; return False; end Default_Driver; function Count_Active (F : Form) return Natural is N : Natural := 0; O : Field_Option_Set; H : constant Natural := Field_Count (F); begin if H > 0 then for I in 1 .. H loop Get_Options (Fields (F, I), O); if O.Active then N := N + 1; end if; end loop; end if; return N; end Count_Active; end Sample.Form_Demo.Aux; ncurses-6.0-20160213/Ada95/samples/ncurses2-menu_test.ads0000644000175100001440000000567207212274050021232 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.menu_test; ncurses-6.0-20160213/Ada95/samples/sample-my_field_type.adb0000644000175100001440000000722511042670536021555 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.My_Field_Type -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2006,2008 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.16 $ -- $Date: 2008/07/26 18:47:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- This is a very simple user defined field type. It accepts only a -- defined character as input into the field. -- package body Sample.My_Field_Type is -- That's simple. There are minimal field validity checks. function Field_Check (Fld : Field; Typ : My_Data) return Boolean is begin if Fld = Null_Field or Typ.Ch = Character'Val (0) then return False; end if; return True; end Field_Check; -- Check exactly against the specified character. function Character_Check (Ch : Character; Typ : My_Data) return Boolean is C : constant Character := Typ.Ch; begin return Ch = C; end Character_Check; end Sample.My_Field_Type; ncurses-6.0-20160213/Ada95/samples/ncurses2-getopt.adb0000644000175100001440000001554311541116417020510 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2008,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.8 $ -- $Date: 2011/03/19 12:09:51 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- A simplified version of the GNU getopt function -- copyright Free Software Foundtion with Ada.Strings.Fixed; with Ada.Strings.Bounded; with Ada.Text_IO; use Ada.Text_IO; package body ncurses2.getopt is nextchar : Natural := 0; -- Ncurses doesn't use the non option elements so we are spared -- the job of computing those. -- also the user is not allowed to modify argv or argc -- Doing so is Erroneous execution. -- long options are not handled. procedure Qgetopt (retval : out Integer; argc : Integer; argv : stringfunc; -- argv will be the Argument function. optstring : String; optind : in out Integer; -- ignored for ncurses, must be initialized to 1 by -- the caller Optarg : out stringa -- a garbage collector would be useful here. ) is package BS is new Ada.Strings.Bounded.Generic_Bounded_Length (200); use BS; optargx : Bounded_String; begin if argc < optind then retval := -1; return; end if; optargx := To_Bounded_String (""); if nextchar = 0 then if argv (optind) = "--" then -- the rest are non-options, we ignore them retval := -1; return; end if; if argv (optind)(1) /= '-' or argv (optind)'Length = 1 then optind := optind + 1; Optarg := new String'(argv (optind)); retval := 1; return; end if; nextchar := 2; -- skip the one hyphen. end if; -- Look at and handle the next short option-character. declare c : Character := argv (optind) (nextchar); temp : constant Natural := Ada.Strings.Fixed.Index (optstring, String'(1 => c)); begin if temp = 0 or c = ':' then Put_Line (Standard_Error, argv (optind) & ": invalid option -- " & c); c := '?'; return; end if; if optstring (temp + 1) = ':' then if optstring (temp + 2) = ':' then -- This is an option that accepts an argument optionally. if nextchar /= argv (optind)'Length then optargx := To_Bounded_String (argv (optind) (nextchar .. argv (optind)'Length)); else Optarg := null; end if; else -- This is an option that requires an argument. if nextchar /= argv (optind)'Length then optargx := To_Bounded_String (argv (optind) (nextchar .. argv (optind)'Length)); optind := optind + 1; elsif optind = argc then Put_Line (Standard_Error, argv (optind) & ": option requires an argument -- " & c); if optstring (optstring'First) = ':' then c := ':'; else c := '?'; end if; else -- increment it again when taking next ARGV-elt as argument. optind := optind + 1; optargx := To_Bounded_String (argv (optind)); optind := optind + 1; end if; end if; nextchar := 0; else -- no argument for the option if nextchar = argv (optind)'Length then optind := optind + 1; nextchar := 0; else nextchar := nextchar + 1; end if; end if; retval := Character'Pos (c); Optarg := new String'(To_String (optargx)); return; end; end Qgetopt; end ncurses2.getopt; ncurses-6.0-20160213/Ada95/samples/rain.ads0000644000175100001440000000602407746514446016430 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Rain -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Laurent Pautet -- Modified by: Juergen Pfeifer, 1997 -- Version Control -- $Revision: 1.6 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- -- procedure Rain; ncurses-6.0-20160213/Ada95/samples/ncurses2-trace_set.ads0000644000175100001440000000567207212274053021203 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses2.trace_set -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.trace_set; ncurses-6.0-20160213/Ada95/samples/ncurses2-test_sgr_attributes.adb0000644000175100001440000001750110447516250023305 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.2 $ -- $Date: 2006/06/25 14:24:40 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with ncurses2.util; use ncurses2.util; -- Graphic-rendition test (adapted from vttest) procedure ncurses2.test_sgr_attributes is procedure xAdd (l : Line_Position; c : Column_Position; s : String); procedure xAdd (l : Line_Position; c : Column_Position; s : String) is begin Add (Line => l, Column => c, Str => s); end xAdd; normal, current : Attributed_Character; begin for pass in reverse Boolean loop if pass then normal := (Ch => ' ', Attr => Normal_Video, Color => 0); else normal := (Ch => ' ', Attr => (Reverse_Video => True, others => False), Color => 0); end if; -- Use non-default colors if possible to exercise bce a little if Has_Colors then Init_Pair (1, White, Blue); normal.Color := 1; end if; Set_Background (Ch => normal); Erase; xAdd (1, 20, "Graphic rendition test pattern:"); xAdd (4, 1, "vanilla"); current := normal; current.Attr.Bold_Character := not current.Attr.Bold_Character; Set_Background (Ch => current); xAdd (4, 40, "bold"); current := normal; current.Attr.Under_Line := not current.Attr.Under_Line; Set_Background (Ch => current); xAdd (6, 6, "underline"); current := normal; current.Attr.Bold_Character := not current.Attr.Bold_Character; current.Attr.Under_Line := not current.Attr.Under_Line; Set_Background (Ch => current); xAdd (6, 45, "bold underline"); current := normal; current.Attr.Blink := not current.Attr.Blink; Set_Background (Ch => current); xAdd (8, 1, "blink"); current := normal; current.Attr.Blink := not current.Attr.Blink; current.Attr.Bold_Character := not current.Attr.Bold_Character; Set_Background (Ch => current); xAdd (8, 40, "bold blink"); current := normal; current.Attr.Under_Line := not current.Attr.Under_Line; current.Attr.Blink := not current.Attr.Blink; Set_Background (Ch => current); xAdd (10, 6, "underline blink"); current := normal; current.Attr.Bold_Character := not current.Attr.Bold_Character; current.Attr.Under_Line := not current.Attr.Under_Line; current.Attr.Blink := not current.Attr.Blink; Set_Background (Ch => current); xAdd (10, 45, "bold underline blink"); current := normal; current.Attr.Reverse_Video := not current.Attr.Reverse_Video; Set_Background (Ch => current); xAdd (12, 1, "negative"); current := normal; current.Attr.Bold_Character := not current.Attr.Bold_Character; current.Attr.Reverse_Video := not current.Attr.Reverse_Video; Set_Background (Ch => current); xAdd (12, 40, "bold negative"); current := normal; current.Attr.Under_Line := not current.Attr.Under_Line; current.Attr.Reverse_Video := not current.Attr.Reverse_Video; Set_Background (Ch => current); xAdd (14, 6, "underline negative"); current := normal; current.Attr.Bold_Character := not current.Attr.Bold_Character; current.Attr.Under_Line := not current.Attr.Under_Line; current.Attr.Reverse_Video := not current.Attr.Reverse_Video; Set_Background (Ch => current); xAdd (14, 45, "bold underline negative"); current := normal; current.Attr.Blink := not current.Attr.Blink; current.Attr.Reverse_Video := not current.Attr.Reverse_Video; Set_Background (Ch => current); xAdd (16, 1, "blink negative"); current := normal; current.Attr.Bold_Character := not current.Attr.Bold_Character; current.Attr.Blink := not current.Attr.Blink; current.Attr.Reverse_Video := not current.Attr.Reverse_Video; Set_Background (Ch => current); xAdd (16, 40, "bold blink negative"); current := normal; current.Attr.Under_Line := not current.Attr.Under_Line; current.Attr.Blink := not current.Attr.Blink; current.Attr.Reverse_Video := not current.Attr.Reverse_Video; Set_Background (Ch => current); xAdd (18, 6, "underline blink negative"); current := normal; current.Attr.Bold_Character := not current.Attr.Bold_Character; current.Attr.Under_Line := not current.Attr.Under_Line; current.Attr.Blink := not current.Attr.Blink; current.Attr.Reverse_Video := not current.Attr.Reverse_Video; Set_Background (Ch => current); xAdd (18, 45, "bold underline blink negative"); Set_Background (Ch => normal); Move_Cursor (Line => Lines - 2, Column => 1); if pass then Add (Str => "Dark"); else Add (Str => "Light"); end if; Add (Str => " background. "); Clear_To_End_Of_Line; Pause; end loop; Set_Background (Ch => Blank2); Erase; End_Windows; end ncurses2.test_sgr_attributes; ncurses-6.0-20160213/Ada95/samples/ncurses2-color_test.ads0000644000175100001440000000567307212274075021414 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.color_test; ncurses-6.0-20160213/Ada95/samples/ncurses2-getch_test.ads0000644000175100001440000000567307212274046021366 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.getch_test; ncurses-6.0-20160213/Ada95/samples/explain.txt0000644000175100001440000001721511541115445017173 0ustar tomusers#VERSION This is Version 00.90.00 of the demo package. #MENUKEYS In a menu you can use the following Keys in the whole application: - CTRL-X eXit the menu - CTRL-N Go to next item - CTRL-P Go to previous item - CTRL-U Scroll up one line - CTRL-D Scroll down one line - CTRL-F Scroll down one page - PAGE DOWN Scroll down one page - PAGE UP Scroll back one page - CTRL-B Scroll back one page - CTRL-Y Clear pattern - CTRL-H Delete last character from pattern - Backspace Delete last character from pattern - CTRL-A Next pattern match - CTRL-E Previous pattern match - CTRL-T Toggle item in a multi-selection menu - CR or LF Select an item - HOME Key Go to the first item - F3 Quit the menu - Cursor Down Down one item - Cursor Up Up one item - Cursor Left Left one item - Cursor Right Right one item - END Key Go to last item #FORMKEYS - CTRL-X eXit the form - CTRL-F Go forward to the next field - CTRL-B Go backward to the previous field - CTRL-L Go to the field left of the current one - CTRL-R Go to the field right of the current one - CTRL-U Go to the field above the current one - CTRL-D Go to the field below the current one - CTRL-W Go to the next word in the field - CTRL-T Go to the previous word in the field - CTRL-A Go to the beginning of the field - CTRL-E Go to the end of the field - CTRL-I Insert a blank character at the current position - CTRL-O Insert a line - CTRL-V Delete a character - CTRL-H Delete previous character - CTRL-Y Delete a line - CTRL-G Delete a word - CTRL-K Clear to end of field - CTRL-N Next choice in a choice field (Enumerations etc.) - CTRL-P Previous choice in a choice field. #HELP #HELPKEYS You may scroll with the Cursor Up/Down Keys. You may leave the help with the Function Key labeled 'Quit'. #INHELP You are already in the help system. You may leave the help with the Function Key labeled 'Quit'. #MAIN This is the main menu of the sample program for the ncurses Ada95 binding. The main intention of the demo is not to demonstrate or test all the features of ncurses and it's subsystems, but to provide to you some sample code how to use the binding with Ada95. You may select this options: * Look at some ncurses core functions * Look at some features of the menu subsystem * Look at some features of the form subsystem * Look at the output of the Ada.Text_IO like functions for ncurses. #MAINPAD You may press at any place in this demo CTRL-C. This will give you a command window. You can just type in the Label-String of a function key, then this key will be simulated. This should help you to run the application even if you run it on a terminal with no or only a few function keys. With CTRL-N and CTRL-P you may browse through the possible values in the command window. #MENU00 Here we give you a selection of various menu demonstrations. #MENU-PAD00 This menu itself is a demo for a single valued, 1-column menu with descriptions for the items, a marker and a padding character between the item name and the description. #MENU01 This is a demo of the some of the menu layout options. One of them is the spacing functionality. Just press the Key labeled "Flip" to flip between the non-spaced and a spaced version of the menu. Please note that this functionality is unique for ncurses and is not found in the SVr4 menu implementation. This is a menu that sometimes does not fit into it's window and therefore it becomes a scroll menu. You can also see here very nicely the pattern matching functionality of menus. Type for example a 'J' and you will be positioned to the next item after the current starting with a 'J'. Any more characters you type in make the pattern more specific. With CTRL-A and CTRL-Z (for more details press the Key labeled "Keys") you can browse through all the items matching the pattern. You may change the format of the menu. Just press one of the keys labeled "4x1", "4x2" or "4x3" to get a menu with that many rows and columns. With the Keys "O-Row" or "O-Col" (they occupy the same label and switch on selection) you can change the major order scheme for the menu. If "O-Col" is visible, the menu is currently major ordered by rows, you can switch to major column order by pressing the key. If "O-Row" is visible, it's just the reverse situation. This Key is not visible in "4x1" layout mode, because in this case the functionality makes no sense. With the Keys "Multi" or "Singl" (they occupy the same label and switch on selection) you can change whether or not the menu allows multiple or only single selection. With the Keys "+Desc" or "-Desc" (they occupy the same label and switch on selection) you can change whether or not the descriptions for each item should be displayed. Please not that this key is not visible in the "4x3" layout mode, because in this case the menu would not fit on a typical 80x24 screen. With the Keys "Disab" or "Enab" (they occupy the same label and switch on selection) you can dis- or enable the selectability of the month with 31 days. #MENU-PAD01 You may press "Flip" to see the effect of ncurses unique menu-spacing. The Keys "4x1", "4x2" and "4x3" will change the format of the menu. Please note that this is a scrolling menu. You may also play with the pattern matching functionality or try to change the format of the menu. For more details press the Key labeled "Help". #FORM00 This is a demo of the forms package. #FORM-PAD00 Please note that this demo is far from being complete. It really shows only a small part of the functionality of the forms package. Let's hope the next version will have a richer demo (You want to contribute ?). #NOTIMPL Sorry this functionality of the demo is not implemented at the moment. Remember this is a freeware project, so I can use only my very rare free time to continue coding. If you would like to contribute, you are very welcome ! #CURSES00 This is a menu where you can select some different demos of the ncurses functionality. #CURSES-PAD00 Please note that this demo is far from being complete. It really shows only a small part of the functionality of the curses package. Let's hope the next version will have a richer demo (You want to contribute ?). #MOUSEKEYS In this demo you may use this keys: - Key labeled "Help" to get a help - Key labeled "Keys" is what you are reading now - Key labeled "Quit" to leave the demo You may click the mouse buttons at any location at the screen and look at the protocol window ! #MOUSE00 A rather simple use of a mouse as demo. It's there just to test the code and to provide the sample source. It might be of interest, that the output into the protocol window is done by the (n)curses Text_IO subpackages. Especially the output of the button and state names is done by Ads's enumeration IO, which allows you to print the names of enumeration literals. That's really nice. #MOUSE-PAD00 This is a very simple demo of the mouse features of ncurses. It's there just to test whether or not the generated code for the binding really works on the different architectures (seems so). #ATTRIBDEMO Again this is a more than simple demo and just here to give you the sourcecode. #ATTRIBKEYS You may press one of the three well known standard keys of this demo. #ATTRIB-PAD00 Again this is a more than simple demo and just here to give you the source code. Feel free to contribute more. #TEXTIO #TEXTIOKEYS #TEXTIO-PAD00 #END ncurses-6.0-20160213/Ada95/samples/sample.adb0000644000175100001440000002042711542241134016716 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2008,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.18 $ -- $Date: 2011/03/23 00:44:12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Text_IO; with Ada.Exceptions; use Ada.Exceptions; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Menus; use Terminal_Interface.Curses.Menus; with Terminal_Interface.Curses.Menus.Menu_User_Data; with Terminal_Interface.Curses.Menus.Item_User_Data; with Sample.Manifest; use Sample.Manifest; with Sample.Function_Key_Setting; use Sample.Function_Key_Setting; with Sample.Keyboard_Handler; use Sample.Keyboard_Handler; with Sample.Header_Handler; use Sample.Header_Handler; with Sample.Explanation; use Sample.Explanation; with Sample.Menu_Demo.Handler; with Sample.Curses_Demo; with Sample.Form_Demo; with Sample.Menu_Demo; with Sample.Text_IO_Demo; with GNAT.OS_Lib; package body Sample is type User_Data is record Data : Integer; end record; type User_Access is access User_Data; package Ud is new Terminal_Interface.Curses.Menus.Menu_User_Data (User_Data, User_Access); package Id is new Terminal_Interface.Curses.Menus.Item_User_Data (User_Data, User_Access); procedure Whow is procedure Main_Menu; procedure Main_Menu is function My_Driver (M : Menu; K : Key_Code; Pan : Panel) return Boolean; package Mh is new Sample.Menu_Demo.Handler (My_Driver); I : Item_Array_Access := new Item_Array' (New_Item ("Curses Core Demo"), New_Item ("Menu Demo"), New_Item ("Form Demo"), New_Item ("Text IO Demo"), Null_Item); M : Menu := New_Menu (I); D1, D2 : User_Access; I1, I2 : User_Access; function My_Driver (M : Menu; K : Key_Code; Pan : Panel) return Boolean is Idx : constant Positive := Get_Index (Current (M)); begin if K in User_Key_Code'Range then if K = QUIT then return True; elsif K = SELECT_ITEM then if Idx <= 4 then Hide (Pan); Update_Panels; end if; case Idx is when 1 => Sample.Curses_Demo.Demo; when 2 => Sample.Menu_Demo.Demo; when 3 => Sample.Form_Demo.Demo; when 4 => Sample.Text_IO_Demo.Demo; when others => null; end case; if Idx <= 4 then Top (Pan); Show (Pan); Update_Panels; Update_Screen; end if; end if; end if; return False; end My_Driver; begin if (1 + Item_Count (M)) /= I'Length then raise Constraint_Error; end if; D1 := new User_Data'(Data => 4711); Ud.Set_User_Data (M, D1); I1 := new User_Data'(Data => 1174); Id.Set_User_Data (I.all (1), I1); Set_Spacing (Men => M, Row => 2); Default_Labels; Notepad ("MAINPAD"); Mh.Drive_Me (M, " Demo "); Ud.Get_User_Data (M, D2); pragma Assert (D1 = D2); pragma Assert (D1.Data = D2.Data); Id.Get_User_Data (I.all (1), I2); pragma Assert (I1 = I2); pragma Assert (I1.Data = I2.Data); Delete (M); Free (I, True); end Main_Menu; begin Initialize (PC_Style_With_Index); Init_Header_Handler; Init_Screen; if Has_Colors then Start_Color; Init_Pair (Pair => Default_Colors, Fore => Black, Back => White); Init_Pair (Pair => Menu_Back_Color, Fore => Black, Back => Cyan); Init_Pair (Pair => Menu_Fore_Color, Fore => Red, Back => Cyan); Init_Pair (Pair => Menu_Grey_Color, Fore => White, Back => Cyan); Init_Pair (Pair => Notepad_Color, Fore => Black, Back => Yellow); Init_Pair (Pair => Help_Color, Fore => Blue, Back => Cyan); Init_Pair (Pair => Form_Back_Color, Fore => Black, Back => Cyan); Init_Pair (Pair => Form_Fore_Color, Fore => Red, Back => Cyan); Init_Pair (Pair => Header_Color, Fore => Black, Back => Green); Set_Background (Ch => (Color => Default_Colors, Attr => Normal_Video, Ch => ' ')); Set_Character_Attributes (Attr => Normal_Video, Color => Default_Colors); Erase; Set_Soft_Label_Key_Attributes (Color => Header_Color); -- This propagates the attributes to the label window Refresh_Soft_Label_Keys; end if; Init_Keyboard_Handler; Set_Echo_Mode (False); Set_Raw_Mode; Set_Meta_Mode; Set_KeyPad_Mode; -- Initialize the Function Key Environment -- We have some fixed key throughout this sample Main_Menu; End_Windows; Curses_Free_All; exception when Event : others => Terminal_Interface.Curses.End_Windows; Text_IO.Put ("Exception: "); Text_IO.Put (Exception_Name (Event)); Text_IO.New_Line; GNAT.OS_Lib.OS_Exit (1); end Whow; end Sample; ncurses-6.0-20160213/Ada95/samples/ncurses2-flushinp_test.ads0000644000175100001440000000601007212274112022100 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; procedure ncurses2.flushinp_test (win : Terminal_Interface.Curses.Window); ncurses-6.0-20160213/Ada95/samples/sample-explanation.adb0000644000175100001440000003474212405113232021237 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Explanation -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.27 $ -- $Date: 2014/09/13 19:10:18 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- Poor mans help system. This scans a sequential file for key lines and -- then reads the lines up to the next key. Those lines are presented in -- a window as help or explanation. -- with Ada.Text_IO; use Ada.Text_IO; with Ada.Unchecked_Deallocation; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Sample.Keyboard_Handler; use Sample.Keyboard_Handler; with Sample.Manifest; use Sample.Manifest; with Sample.Function_Key_Setting; use Sample.Function_Key_Setting; with Sample.Helpers; use Sample.Helpers; package body Sample.Explanation is Help_Keys : constant String := "HELPKEYS"; In_Help : constant String := "INHELP"; File_Name : constant String := "explain.txt"; F : File_Type; type Help_Line; type Help_Line_Access is access Help_Line; pragma Controlled (Help_Line_Access); type String_Access is access String; pragma Controlled (String_Access); type Help_Line is record Prev, Next : Help_Line_Access; Line : String_Access; end record; procedure Explain (Key : String; Win : Window); procedure Release_String is new Ada.Unchecked_Deallocation (String, String_Access); procedure Release_Help_Line is new Ada.Unchecked_Deallocation (Help_Line, Help_Line_Access); function Search (Key : String) return Help_Line_Access; procedure Release_Help (Root : in out Help_Line_Access); function Check_File (Name : String) return Boolean; procedure Explain (Key : String) is begin Explain (Key, Null_Window); end Explain; procedure Explain (Key : String; Win : Window) is -- Retrieve the text associated with this key and display it in this -- window. If no window argument is passed, the routine will create -- a temporary window and use it. function Filter_Key return Real_Key_Code; procedure Unknown_Key; procedure Redo; procedure To_Window (C : in out Help_Line_Access; More : in out Boolean); Frame : Window := Null_Window; W : Window := Win; K : Real_Key_Code; P : Panel; Height : Line_Count; Width : Column_Count; Help : Help_Line_Access := Search (Key); Current : Help_Line_Access; Top_Line : Help_Line_Access; Has_More : Boolean := True; procedure Unknown_Key is begin Add (W, "Help message with ID "); Add (W, Key); Add (W, " not found."); Add (W, Character'Val (10)); Add (W, "Press the Function key labeled 'Quit' key to continue."); end Unknown_Key; procedure Redo is H : Help_Line_Access := Top_Line; begin if Top_Line /= null then for L in 0 .. (Height - 1) loop Add (W, L, 0, H.all.Line.all); exit when H.all.Next = null; H := H.all.Next; end loop; else Unknown_Key; end if; end Redo; function Filter_Key return Real_Key_Code is K : Real_Key_Code; begin loop K := Get_Key (W); if K in Special_Key_Code'Range then case K is when HELP_CODE => if not Find_Context (In_Help) then Push_Environment (In_Help, False); Explain (In_Help, W); Pop_Environment; Redo; end if; when EXPLAIN_CODE => if not Find_Context (Help_Keys) then Push_Environment (Help_Keys, False); Explain (Help_Keys, W); Pop_Environment; Redo; end if; when others => exit; end case; else exit; end if; end loop; return K; end Filter_Key; procedure To_Window (C : in out Help_Line_Access; More : in out Boolean) is L : Line_Position := 0; begin loop Add (W, L, 0, C.all.Line.all); L := L + 1; exit when C.all.Next = null or else L = Height; C := C.all.Next; end loop; if C.all.Next /= null then pragma Assert (L = Height); More := True; else More := False; end if; end To_Window; begin if W = Null_Window then Push_Environment ("HELP"); Default_Labels; Frame := New_Window (Lines - 2, Columns, 0, 0); if Has_Colors then Set_Background (Win => Frame, Ch => (Ch => ' ', Color => Help_Color, Attr => Normal_Video)); Set_Character_Attributes (Win => Frame, Attr => Normal_Video, Color => Help_Color); Erase (Frame); end if; Box (Frame); Set_Character_Attributes (Frame, (Reverse_Video => True, others => False)); Add (Frame, Lines - 3, 2, "Cursor Up/Down scrolls"); Set_Character_Attributes (Frame); -- Back to default. Window_Title (Frame, "Explanation"); W := Derived_Window (Frame, Lines - 4, Columns - 2, 1, 1); Refresh_Without_Update (Frame); Get_Size (W, Height, Width); Set_Meta_Mode (W); Set_KeyPad_Mode (W); Allow_Scrolling (W, True); Set_Echo_Mode (False); P := Create (Frame); Top (P); Update_Panels; else Clear (W); Refresh_Without_Update (W); end if; Current := Help; Top_Line := Help; if null = Help then Unknown_Key; loop K := Filter_Key; exit when K = QUIT_CODE; end loop; else To_Window (Current, Has_More); if Has_More then -- This means there are more lines available, so we have to go -- into a scroll manager. loop K := Filter_Key; if K in Special_Key_Code'Range then case K is when Key_Cursor_Down => if Current.all.Next /= null then Move_Cursor (W, Height - 1, 0); Scroll (W, 1); Current := Current.all.Next; Top_Line := Top_Line.all.Next; Add (W, Current.all.Line.all); end if; when Key_Cursor_Up => if Top_Line.all.Prev /= null then Move_Cursor (W, 0, 0); Scroll (W, -1); Top_Line := Top_Line.all.Prev; Current := Current.all.Prev; Add (W, Top_Line.all.Line.all); end if; when QUIT_CODE => exit; when others => null; end case; end if; end loop; else loop K := Filter_Key; exit when K = QUIT_CODE; end loop; end if; end if; Clear (W); if Frame /= Null_Window then Clear (Frame); Delete (P); Delete (W); Delete (Frame); Pop_Environment; end if; Update_Panels; Update_Screen; Release_Help (Help); end Explain; function Search (Key : String) return Help_Line_Access is Last : Natural; Buffer : String (1 .. 256); Root : Help_Line_Access := null; Current : Help_Line_Access; Tail : Help_Line_Access := null; function Next_Line return Boolean; function Next_Line return Boolean is H_End : constant String := "#END"; begin Get_Line (F, Buffer, Last); if Last = H_End'Length and then H_End = Buffer (1 .. Last) then return False; else return True; end if; end Next_Line; begin Reset (F); Outer : loop exit Outer when not Next_Line; if Last = (1 + Key'Length) and then Key = Buffer (2 .. Last) and then Buffer (1) = '#' then loop exit when not Next_Line; exit when Buffer (1) = '#'; Current := new Help_Line'(null, null, new String'(Buffer (1 .. Last))); if Tail = null then Release_Help (Root); Root := Current; else Tail.all.Next := Current; Current.all.Prev := Tail; end if; Tail := Current; end loop; exit Outer; end if; end loop Outer; return Root; end Search; procedure Release_Help (Root : in out Help_Line_Access) is Next : Help_Line_Access; begin loop exit when Root = null; Next := Root.all.Next; Release_String (Root.all.Line); Release_Help_Line (Root); Root := Next; end loop; end Release_Help; procedure Explain_Context is begin Explain (Context); end Explain_Context; procedure Notepad (Key : String) is H : constant Help_Line_Access := Search (Key); T : Help_Line_Access := H; N : Line_Count := 1; L : Line_Position := 0; W : Window; P : Panel; begin if H /= null then loop T := T.all.Next; exit when T = null; N := N + 1; end loop; W := New_Window (N + 2, Columns, Lines - N - 2, 0); if Has_Colors then Set_Background (Win => W, Ch => (Ch => ' ', Color => Notepad_Color, Attr => Normal_Video)); Set_Character_Attributes (Win => W, Attr => Normal_Video, Color => Notepad_Color); Erase (W); end if; Box (W); Window_Title (W, "Notepad"); P := New_Panel (W); T := H; loop Add (W, L + 1, 1, T.all.Line.all, Integer (Columns - 2)); L := L + 1; T := T.all.Next; exit when T = null; end loop; T := H; Release_Help (T); Refresh_Without_Update (W); Notepad_To_Context (P); end if; end Notepad; function Check_File (Name : String) return Boolean is The_File : File_Type; begin Open (The_File, In_File, Name); Close (The_File); return True; exception when Name_Error => return False; end Check_File; begin if Check_File ("/usr/share/AdaCurses/" & File_Name) then Open (F, In_File, "/usr/share/AdaCurses/" & File_Name); elsif Check_File (File_Name) then Open (F, In_File, File_Name); else Put_Line (Standard_Error, "The file explain.txt was not found in the current directory." ); raise Name_Error; end if; end Sample.Explanation; ncurses-6.0-20160213/Ada95/samples/ncurses2-flushinp_test.adb0000644000175100001440000001265607212274112022074 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with ncurses2.util; use ncurses2.util; procedure ncurses2.flushinp_test (win : Window) is procedure Continue (win : Window); procedure Continue (win : Window) is begin Set_Echo_Mode (False); Move_Cursor (win, 10, 1); Add (win, 10, 1, " Press any key to continue"); Refresh (win); Getchar (win); end Continue; h, by, sh : Line_Position; w, bx, sw : Column_Position; subWin : Window; begin Clear (win); Get_Size (win, h, w); Get_Window_Position (win, by, bx); sw := w / 3; sh := h / 3; subWin := Sub_Window (win, sh, sw, by + h - sh - 2, bx + w - sw - 2); if Has_Colors then Init_Pair (2, Cyan, Blue); Change_Background (subWin, Attributed_Character'(Ch => ' ', Color => 2, Attr => Normal_Video)); end if; Set_Character_Attributes (subWin, (Bold_Character => True, others => False)); Box (subWin); Add (subWin, 2, 1, "This is a subwindow"); Refresh (win); Set_Cbreak_Mode (True); Add (win, 0, 1, "This is a test of the flushinp() call."); Add (win, 2, 1, "Type random keys for 5 seconds."); Add (win, 3, 1, "These should be discarded (not echoed) after the subwindow " & "goes away."); Refresh (win); for i in 0 .. 4 loop Move_Cursor (subWin, 1, 1); Add (subWin, Str => "Time = "); Add (subWin, Str => Integer'Image (i)); Refresh (subWin); Nap_Milli_Seconds (1000); Flush_Input; end loop; Delete (subWin); Erase (win); Flash_Screen; Refresh (win); Nap_Milli_Seconds (1000); Add (win, 2, 1, Str => "If you were still typing when the window timer expired,"); Add (win, 3, 1, "or else you typed nothing at all while it was running,"); Add (win, 4, 1, "test was invalid. You'll see garbage or nothing at all. "); Add (win, 6, 1, "Press a key"); Move_Cursor (win, 9, 10); Refresh (win); Set_Echo_Mode (True); Getchar (win); Flush_Input; Add (win, 12, 0, "If you see any key other than what you typed, flushinp() is broken."); Continue (win); Move_Cursor (win, 9, 10); Delete_Character (win); Refresh (win); Move_Cursor (win, 12, 0); Clear_To_End_Of_Line; Add (win, "What you typed should now have been deleted; if not, wdelch() " & "failed."); Continue (win); Set_Cbreak_Mode (True); end ncurses2.flushinp_test; ncurses-6.0-20160213/Ada95/samples/ncurses2-demo_forms.ads0000644000175100001440000000567307212274076021372 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.demo_forms; ncurses-6.0-20160213/Ada95/samples/ncurses2-getopt.ads0000644000175100001440000000710010447516250020522 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.2 $ -- $Date: 2006/06/25 14:24:40 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package ncurses2.getopt is type stringa is access String; type stringfunc is access function (n : Positive) return String; procedure Qgetopt (retval : out Integer; argc : Integer; argv : stringfunc; optstring : String; optind : in out Integer; -- ignored for ncurses, must be initialized to 0 -- by the caller Optarg : out stringa -- a garbage collector would be useful here. ); end ncurses2.getopt; ncurses-6.0-20160213/Ada95/samples/ncurses2-acs_display.ads0000644000175100001440000000567407212274073021531 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.acs_display; ncurses-6.0-20160213/Ada95/samples/sample.ads0000644000175100001440000000566307746514446016770 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample is procedure Whow; end Sample; ncurses-6.0-20160213/Ada95/samples/sample-form_demo-aux.ads0000644000175100001440000001163211541117334021500 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Form_Demo.Aux -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms; package Sample.Form_Demo.Aux is procedure Geometry (F : Form; L : out Line_Count; C : out Column_Count; Y : out Line_Position; X : out Column_Position); -- Calculate the geometry for a panel being able to be used to display -- the menu. function Create (F : Form; Title : String; Lin : Line_Position; Col : Column_Position) return Panel; -- Create a panel decorated with a frame and the title at the specified -- position. The dimension of the panel is derived from the menus layout. procedure Destroy (F : Form; P : in out Panel); -- Destroy all the windowing structures associated with this menu and -- panel. function Get_Request (F : Form; P : Panel; Handle_CRLF : Boolean := True) return Key_Code; -- Centralized request driver for all menus in this sample. This -- gives us a common key binding for all menus. function Make (Top : Line_Position; Left : Column_Position; Text : String) return Field; -- create a label function Make (Height : Line_Count := 1; Width : Column_Count; Top : Line_Position; Left : Column_Position; Off_Screen : Natural := 0) return Field; -- create a editable field function Default_Driver (F : Form; K : Key_Code; P : Panel) return Boolean; function Count_Active (F : Form) return Natural; -- Count the number of active fields in the form end Sample.Form_Demo.Aux; ncurses-6.0-20160213/Ada95/samples/sample-menu_demo-handler.adb0000644000175100001440000001173011315445062022300 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Menu_Demo.Handler -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2004,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions : -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.16 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Sample.Menu_Demo.Aux; with Sample.Manifest; use Sample.Manifest; with Terminal_Interface.Curses.Mouse; use Terminal_Interface.Curses.Mouse; package body Sample.Menu_Demo.Handler is package Aux renames Sample.Menu_Demo.Aux; procedure Drive_Me (M : Menu; Title : String := "") is L : Line_Count; C : Column_Count; Y : Line_Position; X : Column_Position; begin Aux.Geometry (M, L, C, Y, X); Drive_Me (M, Y, X, Title); end Drive_Me; procedure Drive_Me (M : Menu; Lin : Line_Position; Col : Column_Position; Title : String := "") is Mask : Event_Mask := No_Events; Old : Event_Mask; Pan : Panel := Aux.Create (M, Title, Lin, Col); V : Cursor_Visibility := Invisible; begin -- We are only interested in Clicks with the left button Register_Reportable_Events (Left, All_Clicks, Mask); Old := Start_Mouse (Mask); Set_Cursor_Visibility (V); loop declare K : Key_Code := Aux.Get_Request (M, Pan); R : constant Driver_Result := Driver (M, K); begin case R is when Menu_Ok => null; when Unknown_Request => declare I : constant Item := Current (M); O : Item_Option_Set; begin if K = Key_Mouse then K := SELECT_ITEM; end if; Get_Options (I, O); if K = SELECT_ITEM and then not O.Selectable then Beep; else if My_Driver (M, K, Pan) then exit; end if; end if; end; when others => Beep; end case; end; end loop; End_Mouse (Old); Aux.Destroy (M, Pan); end Drive_Me; end Sample.Menu_Demo.Handler; ncurses-6.0-20160213/Ada95/samples/sample-helpers.ads0000644000175100001440000000640411541117407020402 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Helpers -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; -- This package contains some convenient helper routines used throughout -- this example. -- package Sample.Helpers is procedure Window_Title (Win : Window; Title : String); -- Put a title string into the first line of the window procedure Not_Implemented; end Sample.Helpers; ncurses-6.0-20160213/Ada95/samples/ncurses2-demo_panels.ads0000644000175100001440000000572207212274111021507 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.demo_panels (nap_mseci : Integer); ncurses-6.0-20160213/Ada95/samples/ncurses2-acs_display.adb0000644000175100001440000002470611042670506021502 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2006,2008 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.6 $ -- $Date: 2008/07/26 18:47:34 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with ncurses2.genericPuts; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Ada.Strings.Unbounded; with Ada.Strings.Fixed; procedure ncurses2.acs_display is use Int_IO; procedure show_upper_chars (first : Integer); function show_1_acs (N : Integer; name : String; code : Attributed_Character) return Integer; procedure show_acs_chars; procedure show_upper_chars (first : Integer) is C1 : constant Boolean := (first = 128); last : constant Integer := first + 31; package p is new ncurses2.genericPuts (200); use p; use p.BS; use Ada.Strings.Unbounded; tmpa : Unbounded_String; tmpb : BS.Bounded_String; begin Erase; Switch_Character_Attribute (Attr => (Bold_Character => True, others => False)); Move_Cursor (Line => 0, Column => 20); tmpa := To_Unbounded_String ("Display of "); if C1 then tmpa := tmpa & "C1"; else tmpa := tmpa & "GR"; end if; tmpa := tmpa & " Character Codes "; myPut (tmpb, first); Append (tmpa, To_String (tmpb)); Append (tmpa, " to "); myPut (tmpb, last); Append (tmpa, To_String (tmpb)); Add (Str => To_String (tmpa)); Switch_Character_Attribute (On => False, Attr => (Bold_Character => True, others => False)); Refresh; for code in first .. last loop declare row : constant Line_Position := Line_Position (4 + ((code - first) mod 16)); col : constant Column_Position := Column_Position (((code - first) / 16) * Integer (Columns) / 2); tmp3 : String (1 .. 3); tmpx : String (1 .. Integer (Columns / 4)); reply : Key_Code; begin Put (tmp3, code); myPut (tmpb, code, 16); tmpa := To_Unbounded_String (tmp3 & " (" & To_String (tmpb) & ')'); Ada.Strings.Fixed.Move (To_String (tmpa), tmpx, Justify => Ada.Strings.Right); Add (Line => row, Column => col, Str => tmpx & ' ' & ':' & ' '); if C1 then Set_NoDelay_Mode (Mode => True); end if; Add_With_Immediate_Echo (Ch => Code_To_Char (Key_Code (code))); -- TODO check this if C1 then reply := Getchar; while reply /= Key_None loop Add (Ch => Code_To_Char (reply)); Nap_Milli_Seconds (10); reply := Getchar; end loop; Set_NoDelay_Mode (Mode => False); end if; end; end loop; end show_upper_chars; function show_1_acs (N : Integer; name : String; code : Attributed_Character) return Integer is height : constant Integer := 16; row : constant Line_Position := Line_Position (4 + (N mod height)); col : constant Column_Position := Column_Position ((N / height) * Integer (Columns) / 2); tmpx : String (1 .. Integer (Columns) / 3); begin Ada.Strings.Fixed.Move (name, tmpx, Justify => Ada.Strings.Right, Drop => Ada.Strings.Left); Add (Line => row, Column => col, Str => tmpx & ' ' & ':' & ' '); -- we need more room than C because our identifiers are longer -- 22 chars actually Add (Ch => code); return N + 1; end show_1_acs; procedure show_acs_chars is n : Integer; begin Erase; Switch_Character_Attribute (Attr => (Bold_Character => True, others => False)); Add (Line => 0, Column => 20, Str => "Display of the ACS Character Set"); Switch_Character_Attribute (On => False, Attr => (Bold_Character => True, others => False)); Refresh; -- the following is useful to generate the below -- grep '^[ ]*ACS_' ../src/terminal_interface-curses.ads | -- awk '{print "n := show_1_acs(n, \""$1"\", ACS_Map("$1"));"}' n := show_1_acs (0, "ACS_Upper_Left_Corner", ACS_Map (ACS_Upper_Left_Corner)); n := show_1_acs (n, "ACS_Lower_Left_Corner", ACS_Map (ACS_Lower_Left_Corner)); n := show_1_acs (n, "ACS_Upper_Right_Corner", ACS_Map (ACS_Upper_Right_Corner)); n := show_1_acs (n, "ACS_Lower_Right_Corner", ACS_Map (ACS_Lower_Right_Corner)); n := show_1_acs (n, "ACS_Left_Tee", ACS_Map (ACS_Left_Tee)); n := show_1_acs (n, "ACS_Right_Tee", ACS_Map (ACS_Right_Tee)); n := show_1_acs (n, "ACS_Bottom_Tee", ACS_Map (ACS_Bottom_Tee)); n := show_1_acs (n, "ACS_Top_Tee", ACS_Map (ACS_Top_Tee)); n := show_1_acs (n, "ACS_Horizontal_Line", ACS_Map (ACS_Horizontal_Line)); n := show_1_acs (n, "ACS_Vertical_Line", ACS_Map (ACS_Vertical_Line)); n := show_1_acs (n, "ACS_Plus_Symbol", ACS_Map (ACS_Plus_Symbol)); n := show_1_acs (n, "ACS_Scan_Line_1", ACS_Map (ACS_Scan_Line_1)); n := show_1_acs (n, "ACS_Scan_Line_9", ACS_Map (ACS_Scan_Line_9)); n := show_1_acs (n, "ACS_Diamond", ACS_Map (ACS_Diamond)); n := show_1_acs (n, "ACS_Checker_Board", ACS_Map (ACS_Checker_Board)); n := show_1_acs (n, "ACS_Degree", ACS_Map (ACS_Degree)); n := show_1_acs (n, "ACS_Plus_Minus", ACS_Map (ACS_Plus_Minus)); n := show_1_acs (n, "ACS_Bullet", ACS_Map (ACS_Bullet)); n := show_1_acs (n, "ACS_Left_Arrow", ACS_Map (ACS_Left_Arrow)); n := show_1_acs (n, "ACS_Right_Arrow", ACS_Map (ACS_Right_Arrow)); n := show_1_acs (n, "ACS_Down_Arrow", ACS_Map (ACS_Down_Arrow)); n := show_1_acs (n, "ACS_Up_Arrow", ACS_Map (ACS_Up_Arrow)); n := show_1_acs (n, "ACS_Board_Of_Squares", ACS_Map (ACS_Board_Of_Squares)); n := show_1_acs (n, "ACS_Lantern", ACS_Map (ACS_Lantern)); n := show_1_acs (n, "ACS_Solid_Block", ACS_Map (ACS_Solid_Block)); n := show_1_acs (n, "ACS_Scan_Line_3", ACS_Map (ACS_Scan_Line_3)); n := show_1_acs (n, "ACS_Scan_Line_7", ACS_Map (ACS_Scan_Line_7)); n := show_1_acs (n, "ACS_Less_Or_Equal", ACS_Map (ACS_Less_Or_Equal)); n := show_1_acs (n, "ACS_Greater_Or_Equal", ACS_Map (ACS_Greater_Or_Equal)); n := show_1_acs (n, "ACS_PI", ACS_Map (ACS_PI)); n := show_1_acs (n, "ACS_Not_Equal", ACS_Map (ACS_Not_Equal)); n := show_1_acs (n, "ACS_Sterling", ACS_Map (ACS_Sterling)); if n = 0 then raise Constraint_Error; end if; end show_acs_chars; c1 : Key_Code; c : Character := 'a'; begin loop case c is when 'a' => show_acs_chars; when '0' | '1' | '2' | '3' => show_upper_chars (ctoi (c) * 32 + 128); when others => null; end case; Add (Line => Lines - 3, Column => 0, Str => "Note: ANSI terminals may not display C1 characters."); Add (Line => Lines - 2, Column => 0, Str => "Select: a=ACS, 0=C1, 1,2,3=GR characters, q=quit"); Refresh; c1 := Getchar; c := Code_To_Char (c1); exit when c = 'q' or c = 'x'; end loop; Pause; Erase; End_Windows; end ncurses2.acs_display; ncurses-6.0-20160213/Ada95/samples/sample-curses_demo-mouse.adb0000644000175100001440000002131311042670563022354 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Curses_Demo.Mouse -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2006,2008 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.16 $ -- $Date: 2008/07/26 18:48:19 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Mouse; use Terminal_Interface.Curses.Mouse; with Terminal_Interface.Curses.Text_IO; use Terminal_Interface.Curses.Text_IO; with Terminal_Interface.Curses.Text_IO.Integer_IO; with Terminal_Interface.Curses.Text_IO.Enumeration_IO; with Sample.Helpers; use Sample.Helpers; with Sample.Manifest; use Sample.Manifest; with Sample.Keyboard_Handler; use Sample.Keyboard_Handler; with Sample.Function_Key_Setting; use Sample.Function_Key_Setting; with Sample.Explanation; use Sample.Explanation; package body Sample.Curses_Demo.Mouse is package Int_IO is new Terminal_Interface.Curses.Text_IO.Integer_IO (Integer); use Int_IO; package Button_IO is new Terminal_Interface.Curses.Text_IO.Enumeration_IO (Mouse_Button); use Button_IO; package State_IO is new Terminal_Interface.Curses.Text_IO.Enumeration_IO (Button_State); use State_IO; procedure Demo is type Controls is array (1 .. 3) of Panel; Frame : Window; Msg : Window; Ctl : Controls; Pan : Panel; K : Real_Key_Code; V : Cursor_Visibility := Invisible; W : Window; Note : Window; Msg_L : constant Line_Count := 8; Lins : Line_Position := Lines; Cols : Column_Position; Mask : Event_Mask; procedure Show_Mouse_Event; procedure Show_Mouse_Event is Evt : constant Mouse_Event := Get_Mouse; Y : Line_Position; X : Column_Position; Button : Mouse_Button; State : Button_State; W : Window; begin Get_Event (Evt, Y, X, Button, State); Put (Msg, "Event at"); Put (Msg, " X="); Put (Msg, Integer (X), 3); Put (Msg, ", Y="); Put (Msg, Integer (Y), 3); Put (Msg, ", Btn="); Put (Msg, Button, 10); Put (Msg, ", Stat="); Put (Msg, State, 15); for I in Ctl'Range loop W := Get_Window (Ctl (I)); if Enclosed_In_Window (W, Evt) then Transform_Coordinates (W, Y, X, From_Screen); Put (Msg, ",Box("); Put (Msg, (I), 1); Put (Msg, ","); Put (Msg, Integer (Y), 1); Put (Msg, ","); Put (Msg, Integer (X), 1); Put (Msg, ")"); end if; end loop; New_Line (Msg); Flush (Msg); Update_Panels; Update_Screen; end Show_Mouse_Event; begin Push_Environment ("MOUSE00"); Notepad ("MOUSE-PAD00"); Default_Labels; Set_Cursor_Visibility (V); Note := Notepad_Window; if Note /= Null_Window then Get_Window_Position (Note, Lins, Cols); end if; Frame := Create (Msg_L, Columns, Lins - Msg_L, 0); if Has_Colors then Set_Background (Win => Frame, Ch => (Color => Default_Colors, Attr => Normal_Video, Ch => ' ')); Set_Character_Attributes (Win => Frame, Attr => Normal_Video, Color => Default_Colors); Erase (Frame); end if; Msg := Derived_Window (Frame, Msg_L - 2, Columns - 2, 1, 1); Pan := Create (Frame); Set_Meta_Mode; Set_KeyPad_Mode; Mask := Start_Mouse; Box (Frame); Window_Title (Frame, "Mouse Protocol"); Refresh_Without_Update (Frame); Allow_Scrolling (Msg, True); declare Middle_Column : constant Integer := Integer (Columns) / 2; Middle_Index : constant Natural := Ctl'First + (Ctl'Length / 2); Width : constant Column_Count := 5; Height : constant Line_Count := 3; Half : constant Column_Count := Width / 2; Space : constant Column_Count := 3; Position : Integer; W : Window; begin for I in Ctl'Range loop Position := ((I) - Integer (Middle_Index)) * Integer (Half + Space + Width) + Middle_Column; W := Create (Height, Width, 1, Column_Position (Position)); if Has_Colors then Set_Background (Win => W, Ch => (Color => Menu_Back_Color, Attr => Normal_Video, Ch => ' ')); Set_Character_Attributes (Win => W, Attr => Normal_Video, Color => Menu_Fore_Color); Erase (W); end if; Ctl (I) := Create (W); Box (W); Move_Cursor (W, 1, Half); Put (W, (I), 1); Refresh_Without_Update (W); end loop; end; Update_Panels; Update_Screen; loop K := Get_Key; if K in Special_Key_Code'Range then case K is when QUIT_CODE => exit; when HELP_CODE => Explain_Context; when EXPLAIN_CODE => Explain ("MOUSEKEYS"); when Key_Mouse => Show_Mouse_Event; when others => null; end case; end if; end loop; for I in Ctl'Range loop W := Get_Window (Ctl (I)); Clear (W); Delete (Ctl (I)); Delete (W); end loop; Clear (Frame); Delete (Pan); Delete (Msg); Delete (Frame); Set_Cursor_Visibility (V); End_Mouse (Mask); Pop_Environment; Update_Panels; Update_Screen; end Demo; end Sample.Curses_Demo.Mouse; ncurses-6.0-20160213/Ada95/samples/sample-manifest.ads0000644000175100001440000000775607746514446020601 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Manifest -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; package Sample.Manifest is QUIT : constant User_Key_Code := User_Key_Code'First; SELECT_ITEM : constant User_Key_Code := QUIT + 1; FKEY_HELP : constant Label_Number := 1; HELP_CODE : constant Special_Key_Code := Key_F1; FKEY_EXPLAIN : constant Label_Number := 2; EXPLAIN_CODE : constant Special_Key_Code := Key_F2; FKEY_QUIT : constant Label_Number := 3; QUIT_CODE : constant Special_Key_Code := Key_F3; Menu_Marker : constant String := "=> "; Default_Colors : constant Redefinable_Color_Pair := 1; Menu_Fore_Color : constant Redefinable_Color_Pair := 2; Menu_Back_Color : constant Redefinable_Color_Pair := 3; Menu_Grey_Color : constant Redefinable_Color_Pair := 4; Form_Fore_Color : constant Redefinable_Color_Pair := 5; Form_Back_Color : constant Redefinable_Color_Pair := 6; Notepad_Color : constant Redefinable_Color_Pair := 7; Help_Color : constant Redefinable_Color_Pair := 8; Header_Color : constant Redefinable_Color_Pair := 9; end Sample.Manifest; ncurses-6.0-20160213/Ada95/samples/ncurses2-slk_test.adb0000644000175100001440000001720411541115574021035 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2009,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.9 $ -- $Date: 2011/03/19 12:03:08 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Ada.Strings.Unbounded; with Interfaces.C; with Terminal_Interface.Curses.Aux; procedure ncurses2.slk_test is procedure myGet (Win : Window := Standard_Window; Str : out Ada.Strings.Unbounded.Unbounded_String; Len : Integer := -1); procedure myGet (Win : Window := Standard_Window; Str : out Ada.Strings.Unbounded.Unbounded_String; Len : Integer := -1) is use Ada.Strings.Unbounded; use Interfaces.C; use Terminal_Interface.Curses.Aux; function Wgetnstr (Win : Window; Str : char_array; Len : int) return int; pragma Import (C, Wgetnstr, "wgetnstr"); -- FIXME: how to construct "(Len > 0) ? Len : 80"? Ask : constant Interfaces.C.size_t := Interfaces.C.size_t'Val (Len + 80); Txt : char_array (0 .. Ask); begin Txt (0) := Interfaces.C.char'First; if Wgetnstr (Win, Txt, Txt'Length) = Curses_Err then raise Curses_Exception; end if; Str := To_Unbounded_String (To_Ada (Txt, True)); end myGet; use Int_IO; use Ada.Strings.Unbounded; c : Key_Code; buf : Unbounded_String; c2 : Character; fmt : Label_Justification := Centered; tmp : Integer; begin c := CTRL ('l'); loop Move_Cursor (Line => 0, Column => 0); c2 := Code_To_Char (c); case c2 is when Character'Val (Character'Pos ('l') mod 16#20#) => -- CTRL('l') Erase; Switch_Character_Attribute (Attr => (Bold_Character => True, others => False)); Add (Line => 0, Column => 20, Str => "Soft Key Exerciser"); Switch_Character_Attribute (On => False, Attr => (Bold_Character => True, others => False)); Move_Cursor (Line => 2, Column => 0); P ("Available commands are:"); P (""); P ("^L -- refresh screen"); P ("a -- activate or restore soft keys"); P ("d -- disable soft keys"); P ("c -- set centered format for labels"); P ("l -- set left-justified format for labels"); P ("r -- set right-justified format for labels"); P ("[12345678] -- set label; labels are numbered 1 through 8"); P ("e -- erase stdscr (should not erase labels)"); P ("s -- test scrolling of shortened screen"); P ("x, q -- return to main menu"); P (""); P ("Note: if activating the soft keys causes your terminal to"); P ("scroll up one line, your terminal auto-scrolls when anything"); P ("is written to the last screen position. The ncurses code"); P ("does not yet handle this gracefully."); Refresh; Restore_Soft_Label_Keys; when 'a' => Restore_Soft_Label_Keys; when 'e' => Clear; when 's' => Add (Line => 20, Column => 0, Str => "Press Q to stop the scrolling-test: "); loop c := Getchar; c2 := Code_To_Char (c); exit when c2 = 'Q'; -- c = ERR? -- TODO when c is not a character (arrow key) -- the behavior is different from the C version. Add (Ch => c2); end loop; when 'd' => Clear_Soft_Label_Keys; when 'l' => fmt := Left; when 'c' => fmt := Centered; when 'r' => fmt := Right; when '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' => Add (Line => 20, Column => 0, Str => "Please enter the label value: "); Set_Echo_Mode (SwitchOn => True); myGet (Str => buf); Set_Echo_Mode (SwitchOn => False); tmp := ctoi (c2); Set_Soft_Label_Key (Label_Number (tmp), To_String (buf), fmt); Refresh_Soft_Label_Keys; Move_Cursor (Line => 20, Column => 0); Clear_To_End_Of_Line; when 'x' | 'q' => exit; -- the C version needed a goto, ha ha -- breaks exit the case not the loop because fall-through -- happens in C! when others => Beep; end case; c := Getchar; -- TODO exit when c = EOF end loop; Erase; End_Windows; end ncurses2.slk_test; ncurses-6.0-20160213/Ada95/samples/sample-form_demo.adb0000644000175100001440000001331411542241134020660 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Form_Demo -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2006,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.16 $ -- $Date: 2011/03/23 00:44:12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms; with Terminal_Interface.Curses.Forms.Field_User_Data; with Sample.My_Field_Type; use Sample.My_Field_Type; with Sample.Explanation; use Sample.Explanation; with Sample.Form_Demo.Aux; use Sample.Form_Demo.Aux; with Sample.Function_Key_Setting; use Sample.Function_Key_Setting; with Sample.Form_Demo.Handler; with Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada; with Terminal_Interface.Curses.Forms.Field_Types.Enumeration; use Terminal_Interface.Curses.Forms.Field_Types.Enumeration; with Terminal_Interface.Curses.Forms.Field_Types.IntField; use Terminal_Interface.Curses.Forms.Field_Types.IntField; package body Sample.Form_Demo is type User_Data is record Data : Integer; end record; type User_Access is access User_Data; package Fld_U is new Terminal_Interface.Curses.Forms.Field_User_Data (User_Data, User_Access); type Weekday is (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday); package Weekday_Enum is new Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada (Weekday); Enum_Field : constant Enumeration_Field := Weekday_Enum.Create; procedure Demo is Mft : constant My_Data := (Ch => 'X'); FA : Field_Array_Access := new Field_Array' (Make (0, 14, "Sample Entry Form"), Make (2, 0, "WeekdayEnumeration"), Make (2, 20, "Numeric 1-10"), Make (2, 34, "Only 'X'"), Make (5, 0, "Multiple Lines offscreen(Scroll)"), Make (Width => 18, Top => 3, Left => 0), Make (Width => 12, Top => 3, Left => 20), Make (Width => 12, Top => 3, Left => 34), Make (Width => 46, Top => 6, Left => 0, Height => 4, Off_Screen => 2), Null_Field ); Frm : Terminal_Interface.Curses.Forms.Form := Create (FA); I_F : constant Integer_Field := (Precision => 0, Lower_Limit => 1, Upper_Limit => 10); F1, F2 : User_Access; package Fh is new Sample.Form_Demo.Handler (Default_Driver); begin Push_Environment ("FORM00"); Notepad ("FORM-PAD00"); Default_Labels; Set_Field_Type (FA.all (6), Enum_Field); Set_Field_Type (FA.all (7), I_F); Set_Field_Type (FA.all (8), Mft); F1 := new User_Data'(Data => 4711); Fld_U.Set_User_Data (FA.all (1), F1); Fh.Drive_Me (Frm); Fld_U.Get_User_Data (FA.all (1), F2); pragma Assert (F1 = F2); pragma Assert (F1.Data = F2.Data); Pop_Environment; Delete (Frm); Free (FA, True); end Demo; end Sample.Form_Demo; ncurses-6.0-20160213/Ada95/samples/ncurses2-color_edit.adb0000644000175100001440000002417411315445062021331 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2006,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.6 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with ncurses2.genericPuts; with Terminal_Interface.Curses; use Terminal_Interface.Curses; procedure ncurses2.color_edit is use Int_IO; type RGB_Enum is (Redx, Greenx, Bluex); procedure change_color (current : Color_Number; field : RGB_Enum; value : RGB_Value; usebase : Boolean); procedure change_color (current : Color_Number; field : RGB_Enum; value : RGB_Value; usebase : Boolean) is red, green, blue : RGB_Value; begin if usebase then Color_Content (current, red, green, blue); else red := 0; green := 0; blue := 0; end if; case field is when Redx => red := red + value; when Greenx => green := green + value; when Bluex => blue := blue + value; end case; declare begin Init_Color (current, red, green, blue); exception when Curses_Exception => Beep; end; end change_color; package x is new ncurses2.genericPuts (100); use x; tmpb : x.BS.Bounded_String; tmp4 : String (1 .. 4); tmp6 : String (1 .. 6); tmp8 : String (1 .. 8); -- This would be easier if Ada had a Bounded_String -- defined as a class instead of the inferior generic package, -- then I could define Put, Add, and Get for them. Blech. value : RGB_Value := 0; red, green, blue : RGB_Value; max_colors : constant Natural := Number_Of_Colors; current : Color_Number := 0; field : RGB_Enum := Redx; this_c : Key_Code := 0; begin Refresh; for i in Color_Number'(0) .. Color_Number (Number_Of_Colors) loop Init_Pair (Color_Pair (i), White, i); end loop; Move_Cursor (Line => Lines - 2, Column => 0); Add (Str => "Number: "); myPut (tmpb, Integer (value)); myAdd (Str => tmpb); loop Switch_Character_Attribute (On => False, Attr => (Bold_Character => True, others => False)); Add (Line => 0, Column => 20, Str => "Color RGB Value Editing"); Switch_Character_Attribute (On => False, Attr => (Bold_Character => True, others => False)); for i in Color_Number'(0) .. Color_Number (Number_Of_Colors) loop Move_Cursor (Line => 2 + Line_Position (i), Column => 0); if current = i then Add (Ch => '>'); else Add (Ch => ' '); end if; -- TODO if i <= color_names'Max then Put (tmp8, Integer (i)); Set_Character_Attributes (Color => Color_Pair (i)); Add (Str => " "); Set_Character_Attributes; Refresh; Color_Content (i, red, green, blue); Add (Str => " R = "); if current = i and field = Redx then Switch_Character_Attribute (On => True, Attr => (Stand_Out => True, others => False)); end if; Put (tmp4, Integer (red)); Add (Str => tmp4); if current = i and field = Redx then Set_Character_Attributes; end if; Add (Str => " G = "); if current = i and field = Greenx then Switch_Character_Attribute (On => True, Attr => (Stand_Out => True, others => False)); end if; Put (tmp4, Integer (green)); Add (Str => tmp4); if current = i and field = Greenx then Set_Character_Attributes; end if; Add (Str => " B = "); if current = i and field = Bluex then Switch_Character_Attribute (On => True, Attr => (Stand_Out => True, others => False)); end if; Put (tmp4, Integer (blue)); Add (Str => tmp4); if current = i and field = Bluex then Set_Character_Attributes; end if; Set_Character_Attributes; Add (Ch => ')'); end loop; Add (Line => Line_Position (Number_Of_Colors + 3), Column => 0, Str => "Use up/down to select a color, left/right to change " & "fields."); Add (Line => Line_Position (Number_Of_Colors + 4), Column => 0, Str => "Modify field by typing nnn=, nnn-, or nnn+. ? for help."); Move_Cursor (Line => 2 + Line_Position (current), Column => 0); this_c := Getchar; if Is_Digit (this_c) then value := 0; end if; case this_c is when KEY_UP => current := (current - 1) mod Color_Number (max_colors); when KEY_DOWN => current := (current + 1) mod Color_Number (max_colors); when KEY_RIGHT => field := RGB_Enum'Val ((RGB_Enum'Pos (field) + 1) mod 3); when KEY_LEFT => field := RGB_Enum'Val ((RGB_Enum'Pos (field) - 1) mod 3); when Character'Pos ('0') | Character'Pos ('1') | Character'Pos ('2') | Character'Pos ('3') | Character'Pos ('4') | Character'Pos ('5') | Character'Pos ('6') | Character'Pos ('7') | Character'Pos ('8') | Character'Pos ('9') => value := value * 10 + RGB_Value (ctoi (Code_To_Char (this_c))); when Character'Pos ('+') => change_color (current, field, value, True); when Character'Pos ('-') => change_color (current, field, -value, True); when Character'Pos ('=') => change_color (current, field, value, False); when Character'Pos ('?') => Erase; P (" RGB Value Editing Help"); P (""); P ("You are in the RGB value editor. Use the arrow keys to " & "select one of"); P ("the fields in one of the RGB triples of the current colors;" & " the one"); P ("currently selected will be reverse-video highlighted."); P (""); P ("To change a field, enter the digits of the new value; they" & " are echoed"); P ("as entered. Finish by typing `='. The change will take" & " effect instantly."); P ("To increment or decrement a value, use the same procedure," & " but finish"); P ("with a `+' or `-'."); P (""); P ("To quit, do `x' or 'q'"); Pause; Erase; when Character'Pos ('q') | Character'Pos ('x') => null; when others => Beep; end case; Move_Cursor (Line => Lines - 2, Column => 0); Put (tmp6, Integer (value)); Add (Str => "Number: " & tmp6); Clear_To_End_Of_Line; exit when this_c = Character'Pos ('x') or this_c = Character'Pos ('q'); end loop; Erase; End_Windows; end ncurses2.color_edit; ncurses-6.0-20160213/Ada95/samples/ncurses2-util.adb0000644000175100001440000001541212340207742020156 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses2.util -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2008,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.9 $ -- $Date: 2014/05/24 21:32:18 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; use Ada.Text_IO; with Terminal_Interface.Curses.Trace; use Terminal_Interface.Curses.Trace; with Interfaces.C; with Interfaces.C.Strings; with Ada.Characters.Handling; with ncurses2.genericPuts; package body ncurses2.util is -- #defines from C -- #define CTRL(x) ((x) & 0x1f) function CTRL (c : Character) return Key_Code is begin return Character'Pos (c) mod 16#20#; -- uses a property of ASCII -- A = 16#41#; a = 16#61#; ^A = 1 or 16#1# end CTRL; function CTRL (c : Character) return Character is begin return Character'Val (Character'Pos (c) mod 16#20#); -- uses a property of ASCII -- A = 16#41#; a = 16#61#; ^A = 1 or 16#1# end CTRL; save_trace : Trace_Attribute_Set; -- Common function to allow ^T to toggle trace-mode in the middle of a test -- so that trace-files can be made smaller. function Getchar (win : Window := Standard_Window) return Key_Code is c : Key_Code; begin -- #ifdef TRACE c := Get_Keystroke (win); while c = CTRL ('T') loop -- if _nc_tracing in C if Current_Trace_Setting /= Trace_Disable then save_trace := Current_Trace_Setting; Trace_Put ("TOGGLE-TRACING OFF"); Current_Trace_Setting := Trace_Disable; else Current_Trace_Setting := save_trace; end if; Trace_On (Current_Trace_Setting); if Current_Trace_Setting /= Trace_Disable then Trace_Put ("TOGGLE-TRACING ON"); end if; end loop; -- #else c := Get_Keystroke; return c; end Getchar; procedure Getchar (win : Window := Standard_Window) is begin if Getchar (win) < 0 then Beep; end if; end Getchar; procedure Pause is begin Move_Cursor (Line => Lines - 1, Column => 0); Add (Str => "Press any key to continue... "); Getchar; end Pause; procedure Cannot (s : String) is use Interfaces.C; use Interfaces.C.Strings; function getenv (x : char_array) return chars_ptr; pragma Import (C, getenv, "getenv"); tmp1 : char_array (0 .. 10); package p is new ncurses2.genericPuts (1024); use p; use p.BS; tmpb : BS.Bounded_String; Length : size_t; begin To_C ("TERM", tmp1, Length); Fill_String (getenv (tmp1), tmpb); Add (Ch => newl); myAdd (Str => "This " & tmpb & " terminal " & s); Pause; end Cannot; procedure ShellOut (message : Boolean) is use Interfaces.C; Txt : char_array (0 .. 10); Length : size_t; procedure system (x : char_array); pragma Import (C, system, "system"); begin To_C ("sh", Txt, Length); if message then Add (Str => "Shelling out..."); end if; Save_Curses_Mode (Mode => Curses); End_Windows; system (Txt); if message then Add (Str => "returned from shellout."); Add (Ch => newl); end if; Refresh; end ShellOut; function Is_Digit (c : Key_Code) return Boolean is begin if c >= 16#100# then return False; else return Ada.Characters.Handling.Is_Digit (Character'Val (c)); end if; end Is_Digit; procedure P (s : String) is begin Add (Str => s); Add (Ch => newl); end P; function Code_To_Char (c : Key_Code) return Character is begin if c > Character'Pos (Character'Last) then return Character'Val (0); -- maybe raise exception? else return Character'Val (c); end if; end Code_To_Char; -- This was untestable due to a bug in GNAT (3.12p) -- Hmm, what bug? I don't remember. function ctoi (c : Character) return Integer is begin return Character'Pos (c) - Character'Pos ('0'); end ctoi; end ncurses2.util; ncurses-6.0-20160213/Ada95/samples/sample-menu_demo-aux.adb0000644000175100001440000002133611315445062021463 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Menu_Demo.Aux -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2006,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.14 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; with Sample.Manifest; use Sample.Manifest; with Sample.Helpers; use Sample.Helpers; with Sample.Keyboard_Handler; use Sample.Keyboard_Handler; with Sample.Explanation; use Sample.Explanation; package body Sample.Menu_Demo.Aux is procedure Geometry (M : Menu; L : out Line_Count; C : out Column_Count; Y : out Line_Position; X : out Column_Position; Fy : out Line_Position; Fx : out Column_Position); procedure Geometry (M : Menu; L : out Line_Count; -- Lines used for menu C : out Column_Count; -- Columns used for menu Y : out Line_Position; -- Proposed Line for menu X : out Column_Position; -- Proposed Column for menu Fy : out Line_Position; -- Vertical inner frame Fx : out Column_Position) -- Horiz. inner frame is Spc_Desc : Column_Position; -- spaces between description and item begin Set_Mark (M, Menu_Marker); Spacing (M, Spc_Desc, Fy, Fx); Scale (M, L, C); Fx := Fx + Column_Position (Fy - 1); -- looks a bit nicer L := L + 2 * Fy; -- count for frame at top and bottom C := C + 2 * Fx; -- " -- Calculate horizontal coordinate at the screen center X := (Columns - C) / 2; Y := 1; -- always startin line 1 end Geometry; procedure Geometry (M : Menu; L : out Line_Count; -- Lines used for menu C : out Column_Count; -- Columns used for menu Y : out Line_Position; -- Proposed Line for menu X : out Column_Position) -- Proposed Column for menu is Fy : Line_Position; Fx : Column_Position; begin Geometry (M, L, C, Y, X, Fy, Fx); end Geometry; function Create (M : Menu; Title : String; Lin : Line_Position; Col : Column_Position) return Panel is W, S : Window; L : Line_Count; C : Column_Count; Y, Fy : Line_Position; X, Fx : Column_Position; Pan : Panel; begin Geometry (M, L, C, Y, X, Fy, Fx); W := New_Window (L, C, Lin, Col); Set_Meta_Mode (W); Set_KeyPad_Mode (W); if Has_Colors then Set_Background (Win => W, Ch => (Ch => ' ', Color => Menu_Back_Color, Attr => Normal_Video)); Set_Foreground (Men => M, Color => Menu_Fore_Color); Set_Background (Men => M, Color => Menu_Back_Color); Set_Grey (Men => M, Color => Menu_Grey_Color); Erase (W); end if; S := Derived_Window (W, L - Fy, C - Fx, Fy, Fx); Set_Meta_Mode (S); Set_KeyPad_Mode (S); Box (W); Set_Window (M, W); Set_Sub_Window (M, S); if Title'Length > 0 then Window_Title (W, Title); end if; Pan := New_Panel (W); Post (M); return Pan; end Create; procedure Destroy (M : Menu; P : in out Panel) is W, S : Window; begin W := Get_Window (M); S := Get_Sub_Window (M); Post (M, False); Erase (W); Delete (P); Set_Window (M, Null_Window); Set_Sub_Window (M, Null_Window); Delete (S); Delete (W); Update_Panels; end Destroy; function Get_Request (M : Menu; P : Panel) return Key_Code is W : constant Window := Get_Window (M); K : Real_Key_Code; Ch : Character; begin Top (P); loop K := Get_Key (W); if K in Special_Key_Code'Range then case K is when HELP_CODE => Explain_Context; when EXPLAIN_CODE => Explain ("MENUKEYS"); when Key_Home => return REQ_FIRST_ITEM; when QUIT_CODE => return QUIT; when Key_Cursor_Down => return REQ_DOWN_ITEM; when Key_Cursor_Up => return REQ_UP_ITEM; when Key_Cursor_Left => return REQ_LEFT_ITEM; when Key_Cursor_Right => return REQ_RIGHT_ITEM; when Key_End => return REQ_LAST_ITEM; when Key_Backspace => return REQ_BACK_PATTERN; when Key_Next_Page => return REQ_SCR_DPAGE; when Key_Previous_Page => return REQ_SCR_UPAGE; when others => return K; end case; elsif K in Normal_Key_Code'Range then Ch := Character'Val (K); case Ch is when CAN => return QUIT; -- CTRL-X when SO => return REQ_NEXT_ITEM; -- CTRL-N when DLE => return REQ_PREV_ITEM; -- CTRL-P when NAK => return REQ_SCR_ULINE; -- CTRL-U when EOT => return REQ_SCR_DLINE; -- CTRL-D when ACK => return REQ_SCR_DPAGE; -- CTRL-F when STX => return REQ_SCR_UPAGE; -- CTRL-B when EM => return REQ_CLEAR_PATTERN; -- CTRL-Y when BS => return REQ_BACK_PATTERN; -- CTRL-H when SOH => return REQ_NEXT_MATCH; -- CTRL-A when ENQ => return REQ_PREV_MATCH; -- CTRL-E when DC4 => return REQ_TOGGLE_ITEM; -- CTRL-T when CR | LF => return SELECT_ITEM; when others => return K; end case; else return K; end if; end loop; end Get_Request; end Sample.Menu_Demo.Aux; ncurses-6.0-20160213/Ada95/samples/sample-my_field_type.ads0000644000175100001440000000704610447516776021614 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.My_Field_Type -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms; with Terminal_Interface.Curses.Forms.Field_Types.User; use Terminal_Interface.Curses.Forms.Field_Types.User; -- This is a very simple user defined field type. It accepts only a -- defined character as input into the field. -- package Sample.My_Field_Type is type My_Data is new User_Defined_Field_Type with record Ch : Character; end record; function Field_Check (Fld : Field; Typ : My_Data) return Boolean; function Character_Check (Ch : Character; Typ : My_Data) return Boolean; end Sample.My_Field_Type; ncurses-6.0-20160213/Ada95/samples/ncurses2-slk_test.ads0000644000175100001440000000567107212274052021060 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.slk_test; ncurses-6.0-20160213/Ada95/samples/sample-menu_demo.ads0000644000175100001440000000571107746514446020730 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Menu_Demo -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Menu_Demo is procedure Demo; end Sample.Menu_Demo; ncurses-6.0-20160213/Ada95/samples/sample-explanation.ads0000644000175100001440000000672511315445551021273 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Explanation -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- Poor mans help system. This scans a sequential file for key lines and -- then reads the lines up to the next key. Those lines are presented in -- a window as help or explanation. -- package Sample.Explanation is procedure Explain (Key : String); -- Retrieve the text associated with this key and display it. procedure Explain_Context; -- Explain the current context. procedure Notepad (Key : String); -- Put a note on the screen and maintain it with the context Explanation_Not_Found : exception; Explanation_Error : exception; end Sample.Explanation; ncurses-6.0-20160213/Ada95/samples/sample-menu_demo-aux.ads0000644000175100001440000001016511541117367021507 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Menu_Demo.Aux -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; with Terminal_Interface.Curses.Menus; use Terminal_Interface.Curses.Menus; package Sample.Menu_Demo.Aux is procedure Geometry (M : Menu; L : out Line_Count; C : out Column_Count; Y : out Line_Position; X : out Column_Position); -- Calculate the geometry for a panel being able to be used to display -- the menu. function Create (M : Menu; Title : String; Lin : Line_Position; Col : Column_Position) return Panel; -- Create a panel decorated with a frame and the title at the specified -- position. The dimension of the panel is derived from the menus layout. procedure Destroy (M : Menu; P : in out Panel); -- Destroy all the windowing structures associated with this menu and -- panel. function Get_Request (M : Menu; P : Panel) return Key_Code; -- Centralized request driver for all menus in this sample. This -- gives us a common key binding for all menus. end Sample.Menu_Demo.Aux; ncurses-6.0-20160213/Ada95/samples/ncurses2-demo_pad.adb0000644000175100001440000005764112405113232020753 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.9 $ -- $Date: 2014/09/13 19:10:18 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.util; use ncurses2.util; with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Interfaces.C; with System.Storage_Elements; with System.Address_To_Access_Conversions; with Ada.Text_IO; -- with Ada.Real_Time; use Ada.Real_Time; -- TODO is there a way to use Real_Time or Ada.Calendar in place of -- gettimeofday? -- Demonstrate pads. procedure ncurses2.demo_pad is type timestruct is record seconds : Integer; microseconds : Integer; end record; type myfunc is access function (w : Window) return Key_Code; function gettime return timestruct; procedure do_h_line (y : Line_Position; x : Column_Position; c : Attributed_Character; to : Column_Position); procedure do_v_line (y : Line_Position; x : Column_Position; c : Attributed_Character; to : Line_Position); function padgetch (win : Window) return Key_Code; function panner_legend (line : Line_Position) return Boolean; procedure panner_legend (line : Line_Position); procedure panner_h_cleanup (from_y : Line_Position; from_x : Column_Position; to_x : Column_Position); procedure panner_v_cleanup (from_y : Line_Position; from_x : Column_Position; to_y : Line_Position); procedure panner (pad : Window; top_xp : Column_Position; top_yp : Line_Position; portyp : Line_Position; portxp : Column_Position; pgetc : myfunc); function gettime return timestruct is retval : timestruct; use Interfaces.C; type timeval is record tv_sec : long; tv_usec : long; end record; pragma Convention (C, timeval); -- TODO function from_timeval is new Ada.Unchecked_Conversion( -- timeval_a, System.Storage_Elements.Integer_Address); -- should Interfaces.C.Pointers be used here? package myP is new System.Address_To_Access_Conversions (timeval); use myP; t : constant Object_Pointer := new timeval; function gettimeofday (TP : System.Storage_Elements.Integer_Address; TZP : System.Storage_Elements.Integer_Address) return int; pragma Import (C, gettimeofday, "gettimeofday"); tmp : int; begin tmp := gettimeofday (System.Storage_Elements.To_Integer (myP.To_Address (t)), System.Storage_Elements.To_Integer (myP.To_Address (null))); if tmp < 0 then retval.seconds := 0; retval.microseconds := 0; else retval.seconds := Integer (t.all.tv_sec); retval.microseconds := Integer (t.all.tv_usec); end if; return retval; end gettime; -- in C, The behavior of mvhline, mvvline for negative/zero length is -- unspecified, though we can rely on negative x/y values to stop the -- macro. Except Ada makes Line_Position(-1) = Natural - 1 so forget it. procedure do_h_line (y : Line_Position; x : Column_Position; c : Attributed_Character; to : Column_Position) is begin if to > x then Move_Cursor (Line => y, Column => x); Horizontal_Line (Line_Size => Natural (to - x), Line_Symbol => c); end if; end do_h_line; procedure do_v_line (y : Line_Position; x : Column_Position; c : Attributed_Character; to : Line_Position) is begin if to > y then Move_Cursor (Line => y, Column => x); Vertical_Line (Line_Size => Natural (to - y), Line_Symbol => c); end if; end do_v_line; function padgetch (win : Window) return Key_Code is c : Key_Code; c2 : Character; begin c := Getchar (win); c2 := Code_To_Char (c); case c2 is when '!' => ShellOut (False); return Key_Refresh; when Character'Val (Character'Pos ('r') mod 16#20#) => -- CTRL('r') End_Windows; Refresh; return Key_Refresh; when Character'Val (Character'Pos ('l') mod 16#20#) => -- CTRL('l') return Key_Refresh; when 'U' => return Key_Cursor_Up; when 'D' => return Key_Cursor_Down; when 'R' => return Key_Cursor_Right; when 'L' => return Key_Cursor_Left; when '+' => return Key_Insert_Line; when '-' => return Key_Delete_Line; when '>' => return Key_Insert_Char; when '<' => return Key_Delete_Char; -- when ERR=> /* FALLTHRU */ when 'q' => return (Key_Exit); when others => return (c); end case; end padgetch; show_panner_legend : Boolean := True; function panner_legend (line : Line_Position) return Boolean is legend : constant array (0 .. 3) of String (1 .. 61) := ( "Use arrow keys (or U,D,L,R) to pan, q to quit (?,t,s flags) ", "Use ! to shell-out. Toggle legend:?, timer:t, scroll mark:s.", "Use +,- (or j,k) to grow/shrink the panner vertically. ", "Use <,> (or h,l) to grow/shrink the panner horizontally. "); legendsize : constant := 4; n : constant Integer := legendsize - Integer (Lines - line); begin if line < Lines and n >= 0 then Move_Cursor (Line => line, Column => 0); if show_panner_legend then Add (Str => legend (n)); end if; Clear_To_End_Of_Line; return show_panner_legend; end if; return False; end panner_legend; procedure panner_legend (line : Line_Position) is begin if not panner_legend (line) then Beep; end if; end panner_legend; procedure panner_h_cleanup (from_y : Line_Position; from_x : Column_Position; to_x : Column_Position) is begin if not panner_legend (from_y) then do_h_line (from_y, from_x, Blank2, to_x); end if; end panner_h_cleanup; procedure panner_v_cleanup (from_y : Line_Position; from_x : Column_Position; to_y : Line_Position) is begin if not panner_legend (from_y) then do_v_line (from_y, from_x, Blank2, to_y); end if; end panner_v_cleanup; procedure panner (pad : Window; top_xp : Column_Position; top_yp : Line_Position; portyp : Line_Position; portxp : Column_Position; pgetc : myfunc) is function f (y : Line_Position) return Line_Position; function f (x : Column_Position) return Column_Position; function greater (y1, y2 : Line_Position) return Integer; function greater (x1, x2 : Column_Position) return Integer; top_x : Column_Position := top_xp; top_y : Line_Position := top_yp; porty : Line_Position := portyp; portx : Column_Position := portxp; -- f[x] returns max[x - 1, 0] function f (y : Line_Position) return Line_Position is begin if y > 0 then return y - 1; else return y; -- 0 end if; end f; function f (x : Column_Position) return Column_Position is begin if x > 0 then return x - 1; else return x; -- 0 end if; end f; function greater (y1, y2 : Line_Position) return Integer is begin if y1 > y2 then return 1; else return 0; end if; end greater; function greater (x1, x2 : Column_Position) return Integer is begin if x1 > x2 then return 1; else return 0; end if; end greater; pymax : Line_Position; basey : Line_Position := 0; pxmax : Column_Position; basex : Column_Position := 0; c : Key_Code; scrollers : Boolean := True; before, after : timestruct; timing : Boolean := True; package floatio is new Ada.Text_IO.Float_IO (Long_Float); begin Get_Size (pad, pymax, pxmax); Allow_Scrolling (Mode => False); -- we don't want stdscr to scroll! c := Key_Refresh; loop -- During shell-out, the user may have resized the window. Adjust -- the port size of the pad to accommodate this. Ncurses -- automatically resizes all of the normal windows to fit on the -- new screen. if top_x > Columns then top_x := Columns; end if; if portx > Columns then portx := Columns; end if; if top_y > Lines then top_y := Lines; end if; if porty > Lines then porty := Lines; end if; case c is when Key_Refresh | Character'Pos ('?') => if c = Key_Refresh then Erase; else -- '?' show_panner_legend := not show_panner_legend; end if; panner_legend (Lines - 4); panner_legend (Lines - 3); panner_legend (Lines - 2); panner_legend (Lines - 1); when Character'Pos ('t') => timing := not timing; if not timing then panner_legend (Lines - 1); end if; when Character'Pos ('s') => scrollers := not scrollers; -- Move the top-left corner of the pad, keeping the -- bottom-right corner fixed. when Character'Pos ('h') => -- increase-columns: move left edge to left if top_x = 0 then Beep; else panner_v_cleanup (top_y, top_x, porty); top_x := top_x - 1; end if; when Character'Pos ('j') => -- decrease-lines: move top-edge down if top_y >= porty then Beep; else if top_y /= 0 then panner_h_cleanup (top_y - 1, f (top_x), portx); end if; top_y := top_y + 1; end if; when Character'Pos ('k') => -- increase-lines: move top-edge up if top_y = 0 then Beep; else top_y := top_y - 1; panner_h_cleanup (top_y, top_x, portx); end if; when Character'Pos ('l') => -- decrease-columns: move left-edge to right if top_x >= portx then Beep; else if top_x /= 0 then panner_v_cleanup (f (top_y), top_x - 1, porty); end if; top_x := top_x + 1; end if; -- Move the bottom-right corner of the pad, keeping the -- top-left corner fixed. when Key_Insert_Char => -- increase-columns: move right-edge to right if portx >= pxmax or portx >= Columns then Beep; else panner_v_cleanup (f (top_y), portx - 1, porty); portx := portx + 1; -- C had ++portx instead of portx++, weird. end if; when Key_Insert_Line => -- increase-lines: move bottom-edge down if porty >= pymax or porty >= Lines then Beep; else panner_h_cleanup (porty - 1, f (top_x), portx); porty := porty + 1; end if; when Key_Delete_Char => -- decrease-columns: move bottom edge up if portx <= top_x then Beep; else portx := portx - 1; panner_v_cleanup (f (top_y), portx, porty); end if; when Key_Delete_Line => -- decrease-lines if porty <= top_y then Beep; else porty := porty - 1; panner_h_cleanup (porty, f (top_x), portx); end if; when Key_Cursor_Left => -- pan leftwards if basex > 0 then basex := basex - 1; else Beep; end if; when Key_Cursor_Right => -- pan rightwards -- if (basex + portx - (pymax > porty) < pxmax) if basex + portx - Column_Position (greater (pymax, porty)) < pxmax then -- if basex + portx < pxmax or -- (pymax > porty and basex + portx - 1 < pxmax) then basex := basex + 1; else Beep; end if; when Key_Cursor_Up => -- pan upwards if basey > 0 then basey := basey - 1; else Beep; end if; when Key_Cursor_Down => -- pan downwards -- same as if (basey + porty - (pxmax > portx) < pymax) if basey + porty - Line_Position (greater (pxmax, portx)) < pymax then -- if (basey + porty < pymax) or -- (pxmax > portx and basey + porty - 1 < pymax) then basey := basey + 1; else Beep; end if; when Character'Pos ('H') | Key_Home | Key_Find => basey := 0; when Character'Pos ('E') | Key_End | Key_Select => if pymax < porty then basey := 0; else basey := pymax - porty; end if; when others => Beep; end case; -- more writing off the screen. -- Interestingly, the exception is not handled if -- we put a block around this. -- delcare --begin if top_y /= 0 and top_x /= 0 then Add (Line => top_y - 1, Column => top_x - 1, Ch => ACS_Map (ACS_Upper_Left_Corner)); end if; if top_x /= 0 then do_v_line (top_y, top_x - 1, ACS_Map (ACS_Vertical_Line), porty); end if; if top_y /= 0 then do_h_line (top_y - 1, top_x, ACS_Map (ACS_Horizontal_Line), portx); end if; -- exception when Curses_Exception => null; end; -- in C was ... pxmax > portx - 1 if scrollers and pxmax >= portx then declare length : constant Column_Position := portx - top_x - 1; lowend, highend : Column_Position; begin -- Instead of using floats, I'll use integers only. lowend := top_x + (basex * length) / pxmax; highend := top_x + ((basex + length) * length) / pxmax; do_h_line (porty - 1, top_x, ACS_Map (ACS_Horizontal_Line), lowend); if highend < portx then Switch_Character_Attribute (Attr => (Reverse_Video => True, others => False), On => True); do_h_line (porty - 1, lowend, Blank2, highend + 1); Switch_Character_Attribute (Attr => (Reverse_Video => True, others => False), On => False); do_h_line (porty - 1, highend + 1, ACS_Map (ACS_Horizontal_Line), portx); end if; end; else do_h_line (porty - 1, top_x, ACS_Map (ACS_Horizontal_Line), portx); end if; if scrollers and pymax >= porty then declare length : constant Line_Position := porty - top_y - 1; lowend, highend : Line_Position; begin lowend := top_y + (basey * length) / pymax; highend := top_y + ((basey + length) * length) / pymax; do_v_line (top_y, portx - 1, ACS_Map (ACS_Vertical_Line), lowend); if highend < porty then Switch_Character_Attribute (Attr => (Reverse_Video => True, others => False), On => True); do_v_line (lowend, portx - 1, Blank2, highend + 1); Switch_Character_Attribute (Attr => (Reverse_Video => True, others => False), On => False); do_v_line (highend + 1, portx - 1, ACS_Map (ACS_Vertical_Line), porty); end if; end; else do_v_line (top_y, portx - 1, ACS_Map (ACS_Vertical_Line), porty); end if; if top_y /= 0 then Add (Line => top_y - 1, Column => portx - 1, Ch => ACS_Map (ACS_Upper_Right_Corner)); end if; if top_x /= 0 then Add (Line => porty - 1, Column => top_x - 1, Ch => ACS_Map (ACS_Lower_Left_Corner)); end if; declare begin -- Here is another place where it is possible -- to write to the corner of the screen. Add (Line => porty - 1, Column => portx - 1, Ch => ACS_Map (ACS_Lower_Right_Corner)); exception when Curses_Exception => null; end; before := gettime; Refresh_Without_Update; declare -- the C version allows the panel to have a zero height -- wich raise the exception begin Refresh_Without_Update ( pad, basey, basex, top_y, top_x, porty - Line_Position (greater (pxmax, portx)) - 1, portx - Column_Position (greater (pymax, porty)) - 1); exception when Curses_Exception => null; end; Update_Screen; if timing then declare s : String (1 .. 7); elapsed : Long_Float; begin after := gettime; elapsed := (Long_Float (after.seconds - before.seconds) + Long_Float (after.microseconds - before.microseconds) / 1.0e6); Move_Cursor (Line => Lines - 1, Column => Columns - 20); floatio.Put (s, elapsed, Aft => 3, Exp => 0); Add (Str => s); Refresh; end; end if; c := pgetc (pad); exit when c = Key_Exit; end loop; Allow_Scrolling (Mode => True); end panner; Gridsize : constant := 3; Gridcount : Integer := 0; Pad_High : constant Line_Count := 200; Pad_Wide : constant Column_Count := 200; panpad : Window := New_Pad (Pad_High, Pad_Wide); begin if panpad = Null_Window then Cannot ("cannot create requested pad"); return; end if; for i in 0 .. Pad_High - 1 loop for j in 0 .. Pad_Wide - 1 loop if i mod Gridsize = 0 and j mod Gridsize = 0 then if i = 0 or j = 0 then Add (panpad, '+'); else -- depends on ASCII? Add (panpad, Ch => Character'Val (Character'Pos ('A') + Gridcount mod 26)); Gridcount := Gridcount + 1; end if; elsif i mod Gridsize = 0 then Add (panpad, '-'); elsif j mod Gridsize = 0 then Add (panpad, '|'); else declare -- handle the write to the lower right corner error begin Add (panpad, ' '); exception when Curses_Exception => null; end; end if; end loop; end loop; panner_legend (Lines - 4); panner_legend (Lines - 3); panner_legend (Lines - 2); panner_legend (Lines - 1); Set_KeyPad_Mode (panpad, True); -- Make the pad (initially) narrow enough that a trace file won't wrap. -- We'll still be able to widen it during a test, since that's required -- for testing boundaries. panner (panpad, 2, 2, Lines - 5, Columns - 15, padgetch'Access); Delete (panpad); End_Windows; -- Hmm, Erase after End_Windows Erase; end ncurses2.demo_pad; ncurses-6.0-20160213/Ada95/samples/ncurses2-overlap_test.ads0000644000175100001440000000567507212274051021742 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.overlap_test; ncurses-6.0-20160213/Ada95/samples/ncurses2.ads0000644000175100001440000000573207212274054017232 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package ncurses2 is pragma Pure (ncurses2); end ncurses2; ncurses-6.0-20160213/Ada95/samples/sample-curses_demo-mouse.ads0000644000175100001440000000573107746514446022420 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Curses_Demo.Mouse -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Curses_Demo.Mouse is procedure Demo; end Sample.Curses_Demo.Mouse; ncurses-6.0-20160213/Ada95/samples/sample-function_key_setting.ads0000644000175100001440000001077511541117303023173 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Function_Key_Setting -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; -- This package implements a simple stack of function key label environments. -- package Sample.Function_Key_Setting is procedure Push_Environment (Key : String; Reset : Boolean := True); -- Push the definition of the current function keys on an internal -- stack. If the reset flag is true, all labels are reset while -- pushed, so the new environment can assume a tabula rasa. -- The Key defines the new Help Context associated with the new -- Environment. This saves also the currently active Notepad. procedure Pop_Environment; -- Pop the Definitions from the stack and make them the current ones. -- This also restores the Help context and the previous Notepad. procedure Initialize (Mode : Soft_Label_Key_Format := PC_Style; Just : Label_Justification := Left); -- Initialize the environment function Context return String; -- Return the current context identifier function Find_Context (Key : String) return Boolean; -- Look for a context, return true if it is in the stack, -- false otherwise. procedure Notepad_To_Context (Pan : Panel); -- Add a panel representing a notepad to the current context. Function_Key_Stack_Error : exception; procedure Default_Labels; -- Set the default labels used in all environments function Notepad_Window return Window; -- Return the current notepad window or Null_Window if there is none. end Sample.Function_Key_Setting; ncurses-6.0-20160213/Ada95/samples/ncurses.adb0000644000175100001440000000603407212274072017123 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with ncurses2.m; use ncurses2.m; with GNAT.OS_Lib; use GNAT.OS_Lib; procedure ncurses is begin OS_Exit (main); end ncurses; ncurses-6.0-20160213/Ada95/samples/rain.adb0000644000175100001440000001421111056336677016401 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Rain -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Laurent Pautet -- Modified by: Juergen Pfeifer, 1997 -- Version Control -- $Revision: 1.8 $ -- $Date: 2008/08/30 21:38:07 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- -- with ncurses2.util; use ncurses2.util; with Ada.Numerics.Float_Random; use Ada.Numerics.Float_Random; with Status; use Status; with Terminal_Interface.Curses; use Terminal_Interface.Curses; procedure Rain is Visibility : Cursor_Visibility; subtype X_Position is Line_Position; subtype Y_Position is Column_Position; Xpos : array (1 .. 5) of X_Position; Ypos : array (1 .. 5) of Y_Position; done : Boolean; c : Key_Code; N : Integer; G : Generator; Max_X, X : X_Position; Max_Y, Y : Y_Position; procedure Next (J : in out Integer); procedure Cursor (X : X_Position; Y : Y_Position); procedure Next (J : in out Integer) is begin if J = 5 then J := 1; else J := J + 1; end if; end Next; procedure Cursor (X : X_Position; Y : Y_Position) is begin Move_Cursor (Line => X, Column => Y); end Cursor; pragma Inline (Cursor); begin Init_Screen; Set_NL_Mode; Set_Echo_Mode (False); Visibility := Invisible; Set_Cursor_Visibility (Visibility); Set_Timeout_Mode (Standard_Window, Non_Blocking, 0); Max_X := Lines - 5; Max_Y := Columns - 5; for I in Xpos'Range loop Xpos (I) := X_Position (Float (Max_X) * Random (G)) + 2; Ypos (I) := Y_Position (Float (Max_Y) * Random (G)) + 2; end loop; N := 1; done := False; while not done and Process.Continue loop X := X_Position (Float (Max_X) * Random (G)) + 2; Y := Y_Position (Float (Max_Y) * Random (G)) + 2; Cursor (X, Y); Add (Ch => '.'); Cursor (Xpos (N), Ypos (N)); Add (Ch => 'o'); -- Next (N); Cursor (Xpos (N), Ypos (N)); Add (Ch => 'O'); -- Next (N); Cursor (Xpos (N) - 1, Ypos (N)); Add (Ch => '-'); Cursor (Xpos (N), Ypos (N) - 1); Add (Str => "|.|"); Cursor (Xpos (N) + 1, Ypos (N)); Add (Ch => '-'); -- Next (N); Cursor (Xpos (N) - 2, Ypos (N)); Add (Ch => '-'); Cursor (Xpos (N) - 1, Ypos (N) - 1); Add (Str => "/\\"); Cursor (Xpos (N), Ypos (N) - 2); Add (Str => "| O |"); Cursor (Xpos (N) + 1, Ypos (N) - 1); Add (Str => "\\/"); Cursor (Xpos (N) + 2, Ypos (N)); Add (Ch => '-'); -- Next (N); Cursor (Xpos (N) - 2, Ypos (N)); Add (Ch => ' '); Cursor (Xpos (N) - 1, Ypos (N) - 1); Add (Str => " "); Cursor (Xpos (N), Ypos (N) - 2); Add (Str => " "); Cursor (Xpos (N) + 1, Ypos (N) - 1); Add (Str => " "); Cursor (Xpos (N) + 2, Ypos (N)); Add (Ch => ' '); Xpos (N) := X; Ypos (N) := Y; c := Getchar; case c is when Character'Pos ('q') => done := True; when Character'Pos ('Q') => done := True; when Character'Pos ('s') => Set_NoDelay_Mode (Standard_Window, False); when Character'Pos (' ') => Set_NoDelay_Mode (Standard_Window, True); when others => null; end case; Nap_Milli_Seconds (50); end loop; Visibility := Normal; Set_Cursor_Visibility (Visibility); End_Windows; Curses_Free_All; end Rain; ncurses-6.0-20160213/Ada95/samples/ncurses2-demo_pad.ads0000644000175100001440000000567107212274077021007 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.1 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.demo_pad; ncurses-6.0-20160213/Ada95/samples/sample-function_key_setting.adb0000644000175100001440000001730211542241134023144 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Function_Key_Setting -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.15 $ -- $Date: 2011/03/23 00:44:12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Unchecked_Deallocation; with Sample.Manifest; use Sample.Manifest; -- This package implements a simple stack of function key label environments. -- package body Sample.Function_Key_Setting is Max_Label_Length : constant Positive := 8; Number_Of_Keys : Label_Number := Label_Number'Last; Justification : Label_Justification := Left; subtype Label is String (1 .. Max_Label_Length); type Label_Array is array (Label_Number range <>) of Label; type Key_Environment (N : Label_Number := Label_Number'Last); type Env_Ptr is access Key_Environment; pragma Controlled (Env_Ptr); type String_Access is access String; pragma Controlled (String_Access); Active_Context : String_Access := new String'("MAIN"); Active_Notepad : Panel := Null_Panel; type Key_Environment (N : Label_Number := Label_Number'Last) is record Prev : Env_Ptr; Help : String_Access; Notepad : Panel; Labels : Label_Array (1 .. N); end record; procedure Release_String is new Ada.Unchecked_Deallocation (String, String_Access); procedure Release_Environment is new Ada.Unchecked_Deallocation (Key_Environment, Env_Ptr); Top_Of_Stack : Env_Ptr := null; procedure Push_Environment (Key : String; Reset : Boolean := True) is P : constant Env_Ptr := new Key_Environment (Number_Of_Keys); begin -- Store the current labels in the environment for I in 1 .. Number_Of_Keys loop Get_Soft_Label_Key (I, P.all.Labels (I)); if Reset then Set_Soft_Label_Key (I, " "); end if; end loop; P.all.Prev := Top_Of_Stack; -- now store active help context and notepad P.all.Help := Active_Context; P.all.Notepad := Active_Notepad; -- The notepad must now vanish and the new notepad is empty. if P.all.Notepad /= Null_Panel then Hide (P.all.Notepad); Update_Panels; end if; Active_Notepad := Null_Panel; Active_Context := new String'(Key); Top_Of_Stack := P; if Reset then Refresh_Soft_Label_Keys_Without_Update; end if; end Push_Environment; procedure Pop_Environment is P : Env_Ptr := Top_Of_Stack; begin if Top_Of_Stack = null then raise Function_Key_Stack_Error; else for I in 1 .. Number_Of_Keys loop Set_Soft_Label_Key (I, P.all.Labels (I), Justification); end loop; pragma Assert (Active_Context /= null); Release_String (Active_Context); Active_Context := P.all.Help; Refresh_Soft_Label_Keys_Without_Update; Notepad_To_Context (P.all.Notepad); Top_Of_Stack := P.all.Prev; Release_Environment (P); end if; end Pop_Environment; function Context return String is begin if Active_Context /= null then return Active_Context.all; else return ""; end if; end Context; function Find_Context (Key : String) return Boolean is P : Env_Ptr := Top_Of_Stack; begin if Active_Context.all = Key then return True; else loop exit when P = null; if P.all.Help.all = Key then return True; else P := P.all.Prev; end if; end loop; return False; end if; end Find_Context; procedure Notepad_To_Context (Pan : Panel) is W : Window; begin if Active_Notepad /= Null_Panel then W := Get_Window (Active_Notepad); Clear (W); Delete (Active_Notepad); Delete (W); end if; Active_Notepad := Pan; if Pan /= Null_Panel then Top (Pan); end if; Update_Panels; Update_Screen; end Notepad_To_Context; procedure Initialize (Mode : Soft_Label_Key_Format := PC_Style; Just : Label_Justification := Left) is begin case Mode is when PC_Style .. PC_Style_With_Index => Number_Of_Keys := 12; when others => Number_Of_Keys := 8; end case; Init_Soft_Label_Keys (Mode); Justification := Just; end Initialize; procedure Default_Labels is begin Set_Soft_Label_Key (FKEY_QUIT, "Quit"); Set_Soft_Label_Key (FKEY_HELP, "Help"); Set_Soft_Label_Key (FKEY_EXPLAIN, "Keys"); Refresh_Soft_Label_Keys_Without_Update; end Default_Labels; function Notepad_Window return Window is begin if Active_Notepad /= Null_Panel then return Get_Window (Active_Notepad); else return Null_Window; end if; end Notepad_Window; end Sample.Function_Key_Setting; ncurses-6.0-20160213/Ada95/samples/tour.adb0000644000175100001440000000570707746514446016456 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- tour -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Sample; use Sample; procedure Tour is begin Whow; end Tour; ncurses-6.0-20160213/Ada95/samples/tour.ads0000644000175100001440000000562207746514446016473 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Tour -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure Tour; ncurses-6.0-20160213/Ada95/samples/ncurses2-attr_test.ads0000644000175100001440000000573310447516250021243 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- ncurses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control -- $Revision: 1.2 $ -- $Date: 2006/06/25 14:24:40 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure ncurses2.attr_test; ncurses-6.0-20160213/Ada95/samples/sample-helpers.adb0000644000175100001440000000710011541116741020353 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding Samples -- -- -- -- Sample.Helpers -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control -- $Revision: 1.14 $ -- $Date: 2011/03/19 12:13:21 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Sample.Explanation; use Sample.Explanation; -- This package contains some convenient helper routines used throughout -- this example. -- package body Sample.Helpers is procedure Window_Title (Win : Window; Title : String) is Height : Line_Count; Width : Column_Count; Pos : Column_Position := 0; begin Get_Size (Win, Height, Width); if Title'Length < Width then Pos := (Width - Title'Length) / 2; end if; Add (Win, 0, Pos, Title); end Window_Title; procedure Not_Implemented is begin Explain ("NOTIMPL"); end Not_Implemented; end Sample.Helpers; ncurses-6.0-20160213/Ada95/Makefile.in0000644000175100001440000000565712560514435015406 0ustar tomusers# $Id: Makefile.in,v 1.22 2015/08/05 23:15:41 tom Exp $ ############################################################################## # Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Juergen Pfeifer, 1996 # # Version Control # $Revision: 1.22 $ # SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile SUBDIRS = @ADA_SUBDIRS@ CF_MFLAGS = @cf_cv_makeflags@ @SET_MAKE@ all \ libs \ sources \ install \ install.libs \ uninstall \ uninstall.libs :: for d in $(SUBDIRS); do \ (cd $$d ; $(MAKE) $(CF_MFLAGS) $@) ;\ done clean \ mostlyclean :: for d in $(SUBDIRS); do \ (cd $$d ; $(MAKE) $(CF_MFLAGS) $@) ;\ done distclean \ realclean :: for d in $(SUBDIRS); do \ (cd $$d ; $(MAKE) $(CF_MFLAGS) $@) ;\ done rm -rf lib for lib_kind in static dynamic; do \ rm -rf $${lib_kind}-ali; \ rm -rf $${lib_kind}-obj; \ done -rm -f config.cache config.log config.status include/ncurses_cfg.h -rm -f Makefile tags : @ preinstall : @ install.data : @ ncurses-6.0-20160213/Ada95/TODO0000644000175100001440000000600710422526331014010 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-1999,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: TODO,v 1.5 2006/04/22 22:23:21 tom Exp $ ------------------------------------------------------------------------------- -- Intensive testing Perhaps the delivery of the Beta will help a bit. -- Documentation Like most WEB pages: under continuous construction -- Style cleanup -- Alternate functions for procedures with out params Comfort purpose -- Sample program Under continuous construction (and it's not a WEB page!!!) -- Make the binding objects a shared library They are rather large, so it would make sense, otherwise Ada95 would look too large, although the generated code is as compact as C or C++. I'll wait a bit until the GNAT people provide some better support to construct shared libraries. -- Think about more inlining -- Check for memory leaks. Oh I would like it so much if the GNAT guys would put an optional GC into their system. ncurses-6.0-20160213/Ada95/README0000644000175100001440000000440607746514446014224 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- Author: Juergen Pfeifer, 1996 The documentation is provided in HTML format in the ./html subdirectory. The main document is named index.html ncurses-6.0-20160213/Ada95/configure.in0000644000175100001440000004645412577343240015654 0ustar tomusersdnl*************************************************************************** dnl Copyright (c) 2010-2014,2015 Free Software Foundation, Inc. * dnl * dnl Permission is hereby granted, free of charge, to any person obtaining a * dnl copy of this software and associated documentation files (the * dnl "Software"), to deal in the Software without restriction, including * dnl without limitation the rights to use, copy, modify, merge, publish, * dnl distribute, distribute with modifications, sublicense, and/or sell * dnl copies of the Software, and to permit persons to whom the Software is * dnl furnished to do so, subject to the following conditions: * dnl * dnl The above copyright notice and this permission notice shall be included * dnl in all copies or substantial portions of the Software. * dnl * dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. * dnl * dnl Except as contained in this notice, the name(s) of the above copyright * dnl holders shall not be used in advertising or otherwise to promote the * dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl dnl Author: Thomas E. Dickey dnl dnl $Id: configure.in,v 1.61 2015/09/19 20:33:36 tom Exp $ dnl Process this file with autoconf to produce a configure script. dnl dnl See http://invisible-island.net/autoconf/ for additional information. dnl dnl --------------------------------------------------------------------------- AC_PREREQ(2.52.20030208) AC_REVISION($Revision: 1.61 $) AC_INIT(gen/gen.c) AC_CONFIG_HEADER(include/ncurses_cfg.h:include/ncurses_cfg.hin) CF_TOP_BUILDDIR CF_WITH_SYSTYPE ### Save the given $CFLAGS to allow user-override. cf_user_CFLAGS="$CFLAGS" ### Default install-location CF_CFG_DEFAULTS ### Checks for programs. CF_PROG_CC(gnatgcc gcc cc) AC_PROG_CPP AC_PROG_GCC_TRADITIONAL CF_PROG_CC_C_O(CC) AC_ARG_PROGRAM CF_PROG_AWK CF_PROG_EGREP AC_PROG_INSTALL CF_PROG_LN_S AC_SYS_LONG_FILE_NAMES # if we find pkg-config, check if we should install the ".pc" files. CF_PKG_CONFIG CF_WITH_PKG_CONFIG_LIBDIR AC_MSG_CHECKING(if you want to build test-programs) AC_ARG_WITH(tests, [ --without-tests suppress build with test-programs], [cf_with_tests=$withval], [cf_with_tests=yes]) AC_MSG_RESULT($cf_with_tests) AC_MSG_CHECKING(if we should assume mixed-case filenames) AC_ARG_ENABLE(mixed-case, [ --enable-mixed-case tic should assume mixed-case filenames], [enable_mixedcase=$enableval], [enable_mixedcase=auto]) AC_MSG_RESULT($enable_mixedcase) if test "$enable_mixedcase" = "auto" ; then CF_MIXEDCASE_FILENAMES else cf_cv_mixedcase=$enable_mixedcase if test "$enable_mixedcase" = "yes" ; then AC_DEFINE(MIXEDCASE_FILENAMES) fi fi # do this after mixed-case option (tags/TAGS is not as important as tic). AC_PROG_MAKE_SET CF_MAKE_TAGS CF_MAKEFLAGS dnl These are standard among *NIX systems, but not when cross-compiling AC_CHECK_TOOL(RANLIB, ranlib, ':') AC_CHECK_TOOL(LD, ld, ld) AC_CHECK_TOOL(AR, ar, ar) CF_AR_FLAGS CF_PATHSEP dnl Special option for use by system-builders: the install-prefix is used to dnl adjust the location into which the actual install is done, so that an dnl archive can be built without modifying the host system's configuration. AC_MSG_CHECKING(if you have specified an install-prefix) AC_ARG_WITH(install-prefix, [ --with-install-prefix prefixes actual install-location ($DESTDIR)], [case "$withval" in (yes|no) ;; (*) DESTDIR="$withval" ;; esac]) AC_MSG_RESULT($DESTDIR) AC_SUBST(DESTDIR) ############################################################################### CF_HELP_MESSAGE(Build-Tools Needed to Compile Temporary Applications for Cross-compiling:) # If we're cross-compiling, allow the user to override the tools and their # options. The configure script is oriented toward identifying the host # compiler, etc., but we need a build compiler to generate parts of the source. CF_BUILD_CC ############################################################################### CF_HELP_MESSAGE(Options to Specify the Libraries Built/Used:) ### Options to allow the user to specify the set of libraries which are used. ### Use "--without-normal --with-shared" to allow the default model to be ### shared, for example. cf_list_models="" AC_MSG_CHECKING(if you want to build shared C-objects) AC_ARG_WITH(shared, [ --with-shared generate shared C-objects (needed for --with-ada-sharedlib)], [with_shared=$withval], [with_shared=no]) AC_MSG_RESULT($with_shared) test "$with_shared" = "yes" && cf_list_models="$cf_list_models shared" AC_MSG_CHECKING(for specified models) test -z "$cf_list_models" && cf_list_models=normal AC_MSG_RESULT($cf_list_models) ### Use the first model as the default, and save its suffix for use in building ### up test-applications. AC_MSG_CHECKING(for default model) DFT_LWR_MODEL=`echo "$cf_list_models" | $AWK '{print $1}'` AC_MSG_RESULT($DFT_LWR_MODEL) CF_UPPER(DFT_UPR_MODEL,$DFT_LWR_MODEL)dnl AC_SUBST(DFT_LWR_MODEL)dnl the default model ("normal") AC_SUBST(DFT_UPR_MODEL)dnl the default model ("NORMAL") CF_NCURSES_ADDON CF_WITH_LIB_PREFIX(cf_prefix) LIB_SUFFIX= AC_SUBST(LIB_SUFFIX) ############################################################################### dnl Not all ports of gcc support the -g option if test X"$CC_G_OPT" = X"" ; then CC_G_OPT='-g' test -n "$GCC" && test "${ac_cv_prog_cc_g}" != yes && CC_G_OPT='' fi AC_SUBST(CC_G_OPT) AC_MSG_CHECKING(for default loader flags) case $DFT_LWR_MODEL in (normal) LD_MODEL='' ;; (debug) LD_MODEL=$CC_G_OPT ;; (profile) LD_MODEL='-pg';; (shared) LD_MODEL='' ;; esac AC_SUBST(LD_MODEL)dnl the type of link (e.g., -g or -pg) AC_MSG_RESULT($LD_MODEL) CF_SHARED_OPTS # The test/sample programs in the original tree link using rpath option. # Make it optional for packagers. if test -n "$LOCAL_LDFLAGS" then AC_MSG_CHECKING(if you want to link sample programs with rpath option) AC_ARG_ENABLE(rpath-link, [ --enable-rpath-link link sample programs with rpath option], [with_rpath_link=$enableval], [with_rpath_link=yes]) AC_MSG_RESULT($with_rpath_link) if test "$with_rpath_link" = no then LOCAL_LDFLAGS= LOCAL_LDFLAGS2= fi fi ############################################################################### CF_HELP_MESSAGE(Fine-Tuning Your Configuration:) ### use option --enable-broken-linker to force on use of broken-linker support AC_MSG_CHECKING(if you want broken-linker support code) AC_ARG_ENABLE(broken_linker, [ --enable-broken_linker compile with broken-linker support code], [with_broken_linker=$enableval], [with_broken_linker=${BROKEN_LINKER:-no}]) AC_MSG_RESULT($with_broken_linker) BROKEN_LINKER=0 if test "$with_broken_linker" = yes ; then AC_DEFINE(BROKEN_LINKER) BROKEN_LINKER=1 elif test "$DFT_LWR_MODEL" = shared ; then case $cf_cv_system_name in (cygwin*) AC_DEFINE(BROKEN_LINKER) BROKEN_LINKER=1 CF_VERBOSE(cygwin linker is broken anyway) ;; esac fi AC_SUBST(BROKEN_LINKER) # Check to define _XOPEN_SOURCE "automatically" CF_XOPEN_SOURCE CF_LARGEFILE ### Enable compiling-in rcs id's AC_MSG_CHECKING(if RCS identifiers should be compiled-in) AC_ARG_WITH(rcs-ids, [ --with-rcs-ids compile-in RCS identifiers], [with_rcs_ids=$withval], [with_rcs_ids=no]) AC_MSG_RESULT($with_rcs_ids) test "$with_rcs_ids" = yes && AC_DEFINE(USE_RCS_IDS,1,[Define to 1 if RCS identifiers should be compiled-in)]) ############################################################################### CF_HELP_MESSAGE(Extensions:) ### Note that some functions (such as const) are normally disabled anyway. AC_MSG_CHECKING(if you want to build with function extensions) AC_ARG_ENABLE(ext-funcs, [ --disable-ext-funcs disable function-extensions], [with_ext_funcs=$enableval], [with_ext_funcs=yes]) AC_MSG_RESULT($with_ext_funcs) if test "$with_ext_funcs" = yes ; then NCURSES_EXT_FUNCS=1 AC_DEFINE(HAVE_USE_DEFAULT_COLORS,1,[Define to 1 if we have use_default_colors function]) AC_DEFINE(NCURSES_EXT_FUNCS,1,[Define to 1 if we have ncurses extended functions]) else NCURSES_EXT_FUNCS=0 fi AC_SUBST(NCURSES_EXT_FUNCS) ### use option --enable-const to turn on use of const beyond that in XSI. AC_MSG_CHECKING(for extended use of const keyword) AC_ARG_ENABLE(const, [ --enable-const compile with extra/non-standard const], [with_ext_const=$enableval], [with_ext_const=no]) AC_MSG_RESULT($with_ext_const) NCURSES_CONST='/*nothing*/' if test "$with_ext_const" = yes ; then NCURSES_CONST=const fi AC_SUBST(NCURSES_CONST) ############################################################################### # These options are relatively safe to experiment with. CF_HELP_MESSAGE(Development Code:) AC_MSG_CHECKING(if you want all development code) AC_ARG_WITH(develop, [ --without-develop disable development options], [with_develop=$withval], [with_develop=no]) AC_MSG_RESULT($with_develop) ############################################################################### # These are just experimental, probably should not be in a package: CF_HELP_MESSAGE(Experimental Code:) # This is still experimental (20080329), but should ultimately be moved to # the script-block --with-normal, etc. CF_WITH_PTHREAD AC_MSG_CHECKING(if you want to use weak-symbols for pthreads) AC_ARG_ENABLE(weak-symbols, [ --enable-weak-symbols enable weak-symbols for pthreads], [use_weak_symbols=$withval], [use_weak_symbols=no]) AC_MSG_RESULT($use_weak_symbols) if test "$use_weak_symbols" = yes ; then CF_WEAK_SYMBOLS else cf_cv_weak_symbols=no fi if test $cf_cv_weak_symbols = yes ; then AC_DEFINE(USE_WEAK_SYMBOLS,1,[Define to 1 to enable weak-symbols for pthreads]) fi PTHREAD= if test "$with_pthread" = "yes" ; then AC_DEFINE(USE_PTHREADS,1,[Define to 1 to use the pthreads library]) enable_reentrant=yes if test $cf_cv_weak_symbols = yes ; then PTHREAD=-lpthread fi fi AC_SUBST(PTHREAD) # OpenSUSE is installing ncurses6, using reentrant option. AC_CHECK_FUNC(_nc_TABSIZE,[assume_reentrant=yes], [assume_reentrant=no]) # Reentrant code has to be opaque; there's little advantage to making ncurses # opaque outside of that, so there is no --enable-opaque option. We can use # this option without --with-pthreads, but this will be always set for # pthreads. AC_MSG_CHECKING(if you want experimental reentrant code) AC_ARG_ENABLE(reentrant, [ --enable-reentrant compile with experimental reentrant code], [with_reentrant=$enableval], [with_reentrant=$assume_reentrant]) AC_MSG_RESULT($with_reentrant) if test "$with_reentrant" = yes ; then cf_cv_enable_reentrant=1 if test $cf_cv_weak_symbols = yes ; then CF_REMOVE_LIB(LIBS,$LIBS,pthread) elif test "$assume_reentrant" = no ; then LIB_SUFFIX="t${LIB_SUFFIX}" fi AC_DEFINE(USE_REENTRANT,1,[Define to 1 to compile with experimental reentrant code]) else cf_cv_enable_reentrant=0 fi AC_SUBST(cf_cv_enable_reentrant) ### Allow using a different wrap-prefix if test "$cf_cv_enable_reentrant" != 0 || test "$BROKEN_LINKER" = 1 ; then AC_MSG_CHECKING(for prefix used to wrap public variables) AC_ARG_WITH(wrap-prefix, [ --with-wrap-prefix=XXX override prefix used for public variables], [NCURSES_WRAP_PREFIX=$withval], [NCURSES_WRAP_PREFIX=_nc_]) AC_MSG_RESULT($NCURSES_WRAP_PREFIX) else NCURSES_WRAP_PREFIX=_nc_ fi AC_SUBST(NCURSES_WRAP_PREFIX) AC_DEFINE_UNQUOTED(NCURSES_WRAP_PREFIX,"$NCURSES_WRAP_PREFIX",[Define to override _nc_ ncurses internal prefix]) ############################################################################### CF_HELP_MESSAGE(Testing/development Options:) ### use option --disable-echo to suppress full display compiling commands CF_DISABLE_ECHO ### use option --enable-warnings to turn on all gcc warnings AC_MSG_CHECKING(if you want to see compiler warnings) AC_ARG_ENABLE(warnings, [ --enable-warnings build: turn on GCC compiler warnings], [with_warnings=$enableval]) AC_MSG_RESULT($with_warnings) if test "x$with_warnings" = "xyes"; then CF_ADD_ADAFLAGS(-gnatg) CF_GCC_WARNINGS(Wno-unknown-pragmas Wswitch-enum) fi CF_GCC_ATTRIBUTES ### use option --enable-assertions to turn on generation of assertion code AC_MSG_CHECKING(if you want to enable runtime assertions) AC_ARG_ENABLE(assertions, [ --enable-assertions test: turn on generation of assertion code], [with_assertions=$enableval], [with_assertions=no]) AC_MSG_RESULT($with_assertions) if test -n "$GCC" then if test "$with_assertions" = no then CPPFLAGS="$CPPFLAGS -DNDEBUG" else CF_ADD_ADAFLAGS(-gnata) fi fi ### use option --disable-leaks to suppress "permanent" leaks, for testing AC_DEFINE(HAVE_NC_ALLOC_H,1,[Define to 1 if we have nc_alloc.h header]) ### use option --enable-expanded to generate certain macros as functions AC_ARG_ENABLE(expanded, [ --enable-expanded test: generate functions for certain macros], [test "$enableval" = yes && AC_DEFINE(NCURSES_EXPANDED,1,[Define to 1 if ncurses macros should be expanded as functions])]) ### use option --disable-macros to suppress macros in favor of functions AC_ARG_ENABLE(macros, [ --disable-macros test: use functions rather than macros], [test "$enableval" = no && AC_DEFINE(NCURSES_NOMACROS,1,[Define to 1 if ncurses macros should be expanded as functions])]) # Normally we only add trace() to the debug-library. Allow this to be # extended to all models of the ncurses library: cf_all_traces=no case "$CFLAGS $CPPFLAGS" in (*-DTRACE*) cf_all_traces=yes ;; esac AC_MSG_CHECKING(whether to add trace feature to all models) AC_ARG_WITH(trace, [ --with-trace test: add trace() function to all models of ncurses], [cf_with_trace=$withval], [cf_with_trace=$cf_all_traces]) AC_MSG_RESULT($cf_with_trace) if test "$cf_with_trace" = yes ; then ADA_TRACE=TRUE CF_ADD_CFLAGS(-DTRACE) else ADA_TRACE=FALSE fi AC_SUBST(ADA_TRACE) CF_DISABLE_GNAT_PROJECTS ### Checks for libraries. case $cf_cv_system_name in (*mingw32*) ;; (*) AC_CHECK_FUNC(gettimeofday, AC_DEFINE(HAVE_GETTIMEOFDAY),[ AC_CHECK_LIB(bsd, gettimeofday, AC_DEFINE(HAVE_GETTIMEOFDAY,1,[Define to 1 if we have gettimeofday]) LIBS="$LIBS -lbsd")])dnl CLIX: bzero, select, gettimeofday ;; esac ### Checks for header files. AC_CHECK_SIZEOF([signed char], 0) AC_STDC_HEADERS AC_HEADER_DIRENT AC_HEADER_TIME ### checks for compiler characteristics AC_LANG_C AC_C_CONST ### Checks for external-data CF_LINK_DATAONLY ### Checks for library functions. CF_MKSTEMP dnl We'll do our own -g libraries, unless the user's overridden via $CFLAGS if test -z "$cf_user_CFLAGS" && test "$with_no_leaks" = no ; then CF_STRIP_G_OPT(CFLAGS) CF_STRIP_G_OPT(CXXFLAGS) fi CF_HELP_MESSAGE(Ada95 Binding Options:) cf_with_ada=yes dnl Check for availability of GNU Ada Translator (GNAT). dnl At the moment we support no other Ada95 compiler. if test "$cf_with_ada" != "no" ; then CF_PROG_GNAT if test "$cf_cv_prog_gnat_correct" = yes; then CF_FIXUP_ADAFLAGS CF_GNATPREP_OPT_T CF_GNAT_GENERICS CF_GNAT_SIGINT CF_GNAT_PROJECTS CF_WITH_ADA_COMPILER cf_ada_package=terminal_interface AC_SUBST(cf_ada_package) CF_WITH_ADA_INCLUDE CF_WITH_ADA_OBJECTS CF_WITH_ADA_SHAREDLIB else AC_MSG_ERROR(No usable Ada compiler found) fi else AC_MSG_ERROR(The Ada compiler is needed for this package) fi ################################################################################ # not needed TINFO_LDFLAGS2= AC_SUBST(TINFO_LDFLAGS2) TINFO_LIBS= AC_SUBST(TINFO_LIBS) ### Construct the list of include-directories to be generated CF_INCLUDE_DIRS CF_ADA_INCLUDE_DIRS ### Build up pieces for makefile rules AC_MSG_CHECKING(default library suffix) CF_LIB_TYPE($DFT_LWR_MODEL,DFT_ARG_SUFFIX)dnl AC_SUBST(DFT_ARG_SUFFIX)dnl the string to append to "-lncurses" ("") AC_MSG_RESULT($DFT_ARG_SUFFIX) AC_MSG_CHECKING(default library-dependency suffix) CF_LIB_SUFFIX($DFT_LWR_MODEL,DFT_LIB_SUFFIX,DFT_DEP_SUFFIX)dnl AC_SUBST(DFT_DEP_SUFFIX)dnl the corresponding library-suffix (".a") AC_MSG_RESULT($DFT_DEP_SUFFIX) AC_MSG_CHECKING(default object directory) CF_OBJ_SUBDIR($DFT_LWR_MODEL,DFT_OBJ_SUBDIR)dnl AC_SUBST(DFT_OBJ_SUBDIR)dnl the default object-directory ("obj") AC_MSG_RESULT($DFT_OBJ_SUBDIR) ### Set up low-level terminfo dependencies for makefiles. if test "$DFT_LWR_MODEL" = shared ; then case $cf_cv_system_name in (cygwin*) # "lib" files have ".dll.a" suffix, "cyg" files have ".dll" ;; (msys*) # "lib" files have ".dll.a" suffix, "msys-" files have ".dll" ;; esac fi USE_CFG_SUFFIX=${DFT_ARG_SUFFIX} AC_SUBST(USE_CFG_SUFFIX) ### Construct the list of subdirectories for which we'll customize makefiles ### with the appropriate compile-rules. SUB_MAKEFILES="gen/adacurses${USE_ARG_SUFFIX}-config:gen/adacurses-config.in" AC_DEFINE_UNQUOTED(NCURSES_PATHSEP,'$PATH_SEPARATOR',[Define to override ':' as the library path-separator]) ### Now that we're done running tests, add the compiler-warnings, if any CF_ADD_CFLAGS($EXTRA_CFLAGS) ################################################################################ TEST_ARG2= AC_SUBST(TEST_ARG2) TEST_LIBS2= AC_SUBST(TEST_LIBS2) dnl for separate build, this is good enough for "sh $(top_srcdir)/misc/shlib" NCURSES_SHLIB2="sh -c" AC_SUBST(NCURSES_SHLIB2) ADA_SUBDIRS="include gen src doc" if test "x$cf_with_tests" != "xno" ; then ADA_SUBDIRS="$ADA_SUBDIRS samples" fi for cf_dir in $ADA_SUBDIRS do SUB_MAKEFILES="$SUB_MAKEFILES $cf_dir/Makefile" done AC_SUBST(ADA_SUBDIRS) NCURSES_TREE="#" AC_SUBST(NCURSES_TREE) EXTERNAL_TREE= AC_SUBST(EXTERNAL_TREE) # match layout used by make-tar.sh ADAHTML_DIR=../doc/ada AC_SUBST(ADAHTML_DIR) if test "x$cross_compiling" = xyes ; then ADAGEN_LDFLAGS='$(CROSS_LDFLAGS)' else ADAGEN_LDFLAGS='$(NATIVE_LDFLAGS)' fi AC_SUBST(ADAGEN_LDFLAGS) AC_OUTPUT( \ $SUB_MAKEFILES \ doc/adacurses${DFT_ARG_SUFFIX}-config.1:doc/MKada_config.in \ Makefile,[ if test -z "$USE_OLD_MAKERULES" ; then $AWK -f $srcdir/mk-1st.awk <$srcdir/src/modules >>src/Makefile fi ],[ ### Special initialization commands, used to pass information from the ### configuration-run into config.status AWK="$AWK" DFT_ARG_SUFFIX="$DFT_ARG_SUFFIX" DFT_LWR_MODEL="$DFT_LWR_MODEL" LIB_NAME="$LIB_NAME" LIB_PREFIX="$LIB_PREFIX" LIB_SUFFIX="$LIB_SUFFIX" LN_S="$LN_S" NCURSES_MAJOR="$NCURSES_MAJOR" NCURSES_MINOR="$NCURSES_MINOR" NCURSES_PATCH="$NCURSES_PATCH" USE_OLD_MAKERULES="$USE_OLD_MAKERULES" cf_cv_abi_version="$cf_cv_abi_version" cf_cv_rel_version="$cf_cv_rel_version" cf_cv_rm_so_locs="$cf_cv_rm_so_locs" cf_cv_shared_soname='$cf_cv_shared_soname' cf_cv_shlib_version="$cf_cv_shlib_version" cf_cv_shlib_version_infix="$cf_cv_shlib_version_infix" cf_cv_system_name="$cf_cv_system_name" host="$host" target="$target" ],cat)dnl ${MAKE:-make} preinstall ncurses-6.0-20160213/Ada95/make-tar.sh0000755000175100001440000001210412525675205015366 0ustar tomusers#!/bin/sh # $Id: make-tar.sh,v 1.15 2015/05/16 17:12:37 tom Exp $ ############################################################################## # Copyright (c) 2010-2013,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # Construct a tar-file containing only the Ada95 tree as well as its associated # documentation. The reason for doing that is to simplify distributing the # ada binding as a separate package. CDPATH=: export CDPATH TARGET=`pwd` : ${ROOTNAME:=ncurses-Ada95} : ${PKG_NAME:=AdaCurses} : ${DESTDIR:=$TARGET} : ${TMPDIR:=/tmp} grep_assign() { grep_assign=`egrep "^$2\>" "$1" | sed -e "s/^$2[ ]*=[ ]*//" -e 's/"//g'` eval $2=\"$grep_assign\" } grep_patchdate() { grep_assign ../dist.mk NCURSES_MAJOR grep_assign ../dist.mk NCURSES_MINOR grep_assign ../dist.mk NCURSES_PATCH } # The rpm spec-file in the ncurses tree is a template. Fill in the version # information from dist.mk edit_specfile() { sed \ -e "s/\\/$NCURSES_MAJOR/g" \ -e "s/\\/$NCURSES_MINOR/g" \ -e "s/\\/$NCURSES_PATCH/g" $1 >$1.new chmod u+w $1 mv $1.new $1 } make_changelog() { test -f $1 && chmod u+w $1 cat >$1 <MANIFEST ) cd $BUILD || exit # Remove build-artifacts. find . -name RCS -exec rm -rf {} \; find $BUILD/$ROOTNAME -type d -exec rmdir {} \; 2>/dev/null find $BUILD/$ROOTNAME -type d -exec rmdir {} \; 2>/dev/null find $BUILD/$ROOTNAME -type d -exec rmdir {} \; 2>/dev/null # There is no need for this script in the tar file. rm -f $ROOTNAME/make-tar.sh # Remove build-artifacts. find . -name "*.gz" -exec rm -rf {} \; # Make the files writable... chmod -R u+w . tar cf - $ROOTNAME | gzip >$DESTDIR/$ROOTNAME.tar.gz cd $DESTDIR pwd ls -l $ROOTNAME.tar.gz # vi:ts=4 sw=4 ncurses-6.0-20160213/Ada95/configure0000755000175100001440000147564112610552253015251 0ustar tomusers#! /bin/sh # From configure.in Revision: 1.61 . # Guess values for system-dependent variables and create Makefiles. # Generated by Autoconf 2.52.20150926. # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} ac_unique_file="gen/gen.c" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${datarootdir}/info' mandir='${datarootdir}/man' # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. build=$build_alias host=$host_alias target=$target_alias # FIXME: should be removed in autoconf 3.0. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat < if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. EOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue cd $ac_subdir # A "../" for each directory in /$ac_subdir. ac_dots=`echo $ac_subdir | sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'` case $srcdir in .) # No --srcdir option. We are building in place. ac_sub_srcdir=$srcdir ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_sub_srcdir=$srcdir/$ac_subdir ;; *) # Relative path. ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;; esac # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_sub_srcdir/configure.gnu; then echo $SHELL $ac_sub_srcdir/configure.gnu --help=recursive elif test -f $ac_sub_srcdir/configure; then echo $SHELL $ac_sub_srcdir/configure --help=recursive elif test -f $ac_sub_srcdir/configure.ac || test -f $ac_sub_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\EOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. EOF exit 0 fi exec 5>config.log cat >&5 </dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` PATH = $PATH _ASUNAME } >&5 cat >&5 <\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" ac_sep=" " ;; *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" ac_sep=" " ;; esac # Get rid of the leading space. done # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. trap 'exit_status=$? # Save into config.log some information that might help in debugging. echo >&5 echo "## ----------------- ##" >&5 echo "## Cache variables. ##" >&5 echo "## ----------------- ##" >&5 echo >&5 # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } >&5 sed "/^$/d" confdefs.h >conftest.log if test -s conftest.log; then echo >&5 echo "## ------------ ##" >&5 echo "## confdefs.h. ##" >&5 echo "## ------------ ##" >&5 echo >&5 cat conftest.log >&5 fi (echo; echo) >&5 test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" >&5 echo "$as_me: exit $exit_status" >&5 rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:931: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} cat "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:942: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:950: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:966: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:970: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:976: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:978: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:980: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. It doesn't matter if # we pass some twice (in addition to the command line arguments). if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:999: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:1001: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return case `echo "testing\c" 2>/dev/null; echo 1,2,3`,`echo -n testing 2>/dev/null; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C= # newlines do not sed ;-) only broken shells would use this case anyway ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac echo "#! $SHELL" >conftest.sh echo "exit 0" >>conftest.sh chmod +x conftest.sh if { (echo "$as_me:1022: PATH=\".;.\"; conftest.sh") >&5 (PATH=".;."; conftest.sh) 2>&5 ac_status=$? echo "$as_me:1025: \$? = $ac_status" >&5 (exit $ac_status); }; then ac_path_separator=';' else ac_path_separator=: fi PATH_SEPARATOR="$ac_path_separator" rm -f conftest.sh ac_config_headers="$ac_config_headers include/ncurses_cfg.h:include/ncurses_cfg.hin" top_builddir=`pwd` ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:1055: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:1065: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:1069: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:1078: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:1082: error: $ac_config_sub $ac_cv_build_alias failed." >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1087: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:1094: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:1103: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1108: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then echo "$as_me:1116: checking target system type" >&5 echo $ECHO_N "checking target system type... $ECHO_C" >&6 if test "${ac_cv_target+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_target_alias=$target_alias test "x$ac_cv_target_alias" = "x" && ac_cv_target_alias=$ac_cv_host_alias ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || { { echo "$as_me:1125: error: $ac_config_sub $ac_cv_target_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1130: result: $ac_cv_target" >&5 echo "${ECHO_T}$ac_cv_target" >&6 target=$ac_cv_target target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" if test -z "$system_name" ; then system_name="`(hostname) 2>/dev/null`" fi fi test -n "$system_name" && cat >>confdefs.h <&6 else cf_cv_system_name="$system_name" fi test -z "$system_name" && system_name="$cf_cv_system_name" test -n "$cf_cv_system_name" && echo "$as_me:1162: result: Configuring for $cf_cv_system_name" >&5 echo "${ECHO_T}Configuring for $cf_cv_system_name" >&6 if test ".$system_name" != ".$cf_cv_system_name" ; then echo "$as_me:1166: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5 echo "${ECHO_T}Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&6 { { echo "$as_me:1168: error: \"Please remove config.cache and try again.\"" >&5 echo "$as_me: error: \"Please remove config.cache and try again.\"" >&2;} { (exit 1); exit 1; }; } fi # Check whether --with-system-type or --without-system-type was given. if test "${with_system_type+set}" = set; then withval="$with_system_type" { echo "$as_me:1176: WARNING: overriding system type to $withval" >&5 echo "$as_me: WARNING: overriding system type to $withval" >&2;} cf_cv_system_name=$withval host_os=$withval fi; ### Save the given $CFLAGS to allow user-override. cf_user_CFLAGS="$CFLAGS" ### Default install-location echo "$as_me:1188: checking for prefix" >&5 echo $ECHO_N "checking for prefix... $ECHO_C" >&6 if test "x$prefix" = "xNONE" ; then case "$cf_cv_system_name" in # non-vendor systems don't have a conflict (openbsd*|freebsd*|mirbsd*|linux*|cygwin*|msys*|k*bsd*-gnu|mingw*) prefix=/usr ;; (*) prefix=$ac_default_prefix ;; esac fi echo "$as_me:1200: result: $prefix" >&5 echo "${ECHO_T}$prefix" >&6 if test "x$prefix" = "xNONE" ; then echo "$as_me:1204: checking for default include-directory" >&5 echo $ECHO_N "checking for default include-directory... $ECHO_C" >&6 test -n "$verbose" && echo 1>&6 for cf_symbol in \ $includedir \ $includedir/ncurses \ $prefix/include \ $prefix/include/ncurses \ /usr/local/include \ /usr/local/include/ncurses \ /usr/include \ /usr/include/ncurses do cf_dir=`eval echo $cf_symbol` if test -f $cf_dir/curses.h ; then if ( fgrep NCURSES_VERSION $cf_dir/curses.h 2>&1 >/dev/null ) ; then includedir="$cf_symbol" test -n "$verbose" && echo $ac_n " found " 1>&6 break fi fi test -n "$verbose" && echo " tested $cf_dir" 1>&6 done echo "$as_me:1227: result: $includedir" >&5 echo "${ECHO_T}$includedir" >&6 fi ### Checks for programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return if test -n "$ac_tool_prefix"; then for ac_prog in gnatgcc gcc cc do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:1244: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:1259: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1267: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1270: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in gnatgcc gcc cc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:1283: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:1298: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1306: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1309: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi test -z "$CC" && { { echo "$as_me:1319: error: no acceptable cc found in \$PATH" >&5 echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:1324:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:1327: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:1330: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:1332: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:1335: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:1337: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:1340: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF #line 1344 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:1360: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:1363: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:1366: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. for ac_file in `ls a.exe conftest.exe 2>/dev/null; ls a.out conftest 2>/dev/null; ls a.* conftest.* 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; a.out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:1389: error: C compiler cannot create executables" >&5 echo "$as_me: error: C compiler cannot create executables" >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:1395: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:1400: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:1406: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1409: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:1416: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:1424: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:1431: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:1433: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:1436: checking for executable suffix" >&5 echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 if { (eval echo "$as_me:1438: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:1441: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:1457: error: cannot compute EXEEXT: cannot compile and link" >&5 echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:1463: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:1469: checking for object suffix" >&5 echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1475 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:1487: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1490: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:1502: error: cannot compute OBJEXT: cannot compile" >&5 echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:1509: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:1513: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1519 "configure" #include "confdefs.h" int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1534: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1537: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1540: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1543: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:1555: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:1561: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1567 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1579: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1582: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1585: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1588: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:1598: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1625: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1628: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1631: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1634: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line 1646 "configure" #include "confdefs.h" #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1659: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1662: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1665: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1668: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 1678 "configure" #include "confdefs.h" $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1690: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1693: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1696: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1699: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -rf conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return GCC_VERSION=none if test "$GCC" = yes ; then echo "$as_me:1729: checking version of $CC" >&5 echo $ECHO_N "checking version of $CC... $ECHO_C" >&6 GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`" test -z "$GCC_VERSION" && GCC_VERSION=unknown echo "$as_me:1733: result: $GCC_VERSION" >&5 echo "${ECHO_T}$GCC_VERSION" >&6 fi echo "$as_me:1737: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF #line 1745 "configure" #include "confdefs.h" #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:1794: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1797: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1800: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1803: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:1820: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:1823: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # This should have been defined by AC_PROG_CC : ${CC:=cc} echo "$as_me:1831: checking \$CC variable" >&5 echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6 case "$CC" in (*[\ \ ]-[IUD]*) echo "$as_me:1835: result: broken" >&5 echo "${ECHO_T}broken" >&6 { echo "$as_me:1837: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&5 echo "$as_me: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;} # humor him... cf_flags=`echo "$CC" | sed -e 's/^[^ ]*[ ]//'` CC=`echo "$CC" | sed -e 's/[ ].*//'` cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_flags do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi ;; (*) echo "$as_me:1923: result: ok" >&5 echo "${ECHO_T}ok" >&6 ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return echo "$as_me:1934: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line 1955 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:1960: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:1966: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line 1989 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:1993: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:1999: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:2036: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line 2046 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:2051: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2057: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line 2080 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:2084: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2090: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:2118: error: C preprocessor \"$CPP\" fails sanity check" >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return if test $ac_cv_c_compiler_gnu = yes; then echo "$as_me:2131: checking whether $CC needs -traditional" >&5 echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 if test "${ac_cv_prog_gcc_traditional+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_pattern="Autoconf.*'x'" cat >conftest.$ac_ext <<_ACEOF #line 2138 "configure" #include "confdefs.h" #include int Autoconf = TIOCGETP; _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -rf conftest* if test $ac_cv_prog_gcc_traditional = no; then cat >conftest.$ac_ext <<_ACEOF #line 2153 "configure" #include "confdefs.h" #include int Autoconf = TCGETA; _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes fi rm -rf conftest* fi fi echo "$as_me:2166: result: $ac_cv_prog_gcc_traditional" >&5 echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi echo "$as_me:2173: checking whether $CC understands -c and -o together" >&5 echo $ECHO_N "checking whether $CC understands -c and -o together... $ECHO_C" >&6 if test "${cf_cv_prog_CC_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat > conftest.$ac_ext < int main() { ${cf_cv_main_return:-return}(0); } CF_EOF # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' if { (eval echo "$as_me:2189: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2192: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (eval echo "$as_me:2194: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2197: \$? = $ac_status" >&5 (exit $ac_status); }; then eval cf_cv_prog_CC_c_o=yes else eval cf_cv_prog_CC_c_o=no fi rm -rf conftest* fi if test $cf_cv_prog_CC_c_o = yes; then echo "$as_me:2208: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:2211: result: no" >&5 echo "${ECHO_T}no" >&6 fi test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2232: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AWK="$ac_prog" echo "$as_me:2247: found $ac_dir/$ac_word" >&5 break done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:2255: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:2258: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done test -z "$AWK" && { { echo "$as_me:2265: error: No awk program found" >&5 echo "$as_me: error: No awk program found" >&2;} { (exit 1); exit 1; }; } echo "$as_me:2269: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:2279: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep test -z "$EGREP" && { { echo "$as_me:2283: error: No egrep program found" >&5 echo "$as_me: error: No egrep program found" >&2;} { (exit 1); exit 1; }; } # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:2299: checking for a BSD compatible install" >&5 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_IFS=$IFS; IFS=$ac_path_separator for ac_dir in $PATH; do IFS=$ac_save_IFS # Account for people who put trailing slashes in PATH elements. case $ac_dir/ in / | ./ | .// | /cC/* \ | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ | /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if $as_executable_p "$ac_dir/$ac_prog"; then if test $ac_prog = install && grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:2348: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:2359: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:2363: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:2366: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi echo "$as_me:2370: checking if $LN_S -f options work" >&5 echo $ECHO_N "checking if $LN_S -f options work... $ECHO_C" >&6 rm -f conf$$.src conf$$dst echo >conf$$.dst echo first >conf$$.src if $LN_S -f conf$$.src conf$$.dst 2>/dev/null; then cf_prog_ln_sf=yes else cf_prog_ln_sf=no fi rm -f conf$$.dst conf$$src echo "$as_me:2382: result: $cf_prog_ln_sf" >&5 echo "${ECHO_T}$cf_prog_ln_sf" >&6 test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f" echo "$as_me:2387: checking for long file names" >&5 echo $ECHO_N "checking for long file names... $ECHO_C" >&6 if test "${ac_cv_sys_long_file_names+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_sys_long_file_names=yes # Test for long file names in all the places we know might matter: # . the current directory, where building will happen # $prefix/lib where we will be installing things # $exec_prefix/lib likewise # eval it to expand exec_prefix. # $TMPDIR if set, where it might want to write temporary files # if $TMPDIR is not set: # /tmp where it might want to write temporary files # /var/tmp likewise # /usr/tmp likewise if test -n "$TMPDIR" && test -d "$TMPDIR" && test -w "$TMPDIR"; then ac_tmpdirs=$TMPDIR else ac_tmpdirs='/tmp /var/tmp /usr/tmp' fi for ac_dir in . $ac_tmpdirs `eval echo $prefix/lib $exec_prefix/lib` ; do test -d $ac_dir || continue test -w $ac_dir || continue # It is less confusing to not echo anything here. ac_xdir=$ac_dir/cf$$ (umask 077 && mkdir $ac_xdir 2>/dev/null) || continue ac_tf1=$ac_xdir/conftest9012345 ac_tf2=$ac_xdir/conftest9012346 (echo 1 >$ac_tf1) 2>/dev/null (echo 2 >$ac_tf2) 2>/dev/null ac_val=`cat $ac_tf1 2>/dev/null` if test ! -f $ac_tf1 || test "$ac_val" != 1; then ac_cv_sys_long_file_names=no rm -rf $ac_xdir 2>/dev/null break fi rm -rf $ac_xdir 2>/dev/null done fi echo "$as_me:2426: result: $ac_cv_sys_long_file_names" >&5 echo "${ECHO_T}$ac_cv_sys_long_file_names" >&6 if test $ac_cv_sys_long_file_names = yes; then cat >>confdefs.h <<\EOF #define HAVE_LONG_FILE_NAMES 1 EOF fi # if we find pkg-config, check if we should install the ".pc" files. echo "$as_me:2438: checking if you want to use pkg-config" >&5 echo $ECHO_N "checking if you want to use pkg-config... $ECHO_C" >&6 # Check whether --with-pkg-config or --without-pkg-config was given. if test "${with_pkg_config+set}" = set; then withval="$with_pkg_config" cf_pkg_config=$withval else cf_pkg_config=yes fi; echo "$as_me:2448: result: $cf_pkg_config" >&5 echo "${ECHO_T}$cf_pkg_config" >&6 case $cf_pkg_config in (no) PKG_CONFIG=none ;; (yes) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 echo "$as_me:2460: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word" echo "$as_me:2477: found $ac_dir/$ac_word" >&5 break fi done ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:2488: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:2491: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:2500: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_ac_pt_PKG_CONFIG="$ac_dir/$ac_word" echo "$as_me:2517: found $ac_dir/$ac_word" >&5 break fi done test -z "$ac_cv_path_ac_pt_PKG_CONFIG" && ac_cv_path_ac_pt_PKG_CONFIG="none" ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then echo "$as_me:2529: result: $ac_pt_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6 else echo "$as_me:2532: result: no" >&5 echo "${ECHO_T}no" >&6 fi PKG_CONFIG=$ac_pt_PKG_CONFIG else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi ;; (*) PKG_CONFIG=$withval ;; esac test -z "$PKG_CONFIG" && PKG_CONFIG=none if test "$PKG_CONFIG" != none ; then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$PKG_CONFIG" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval PKG_CONFIG="$PKG_CONFIG" case ".$PKG_CONFIG" in (.NONE/*) PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:2575: error: expected a pathname, not \"$PKG_CONFIG\"" >&5 echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG\"" >&2;} { (exit 1); exit 1; }; } ;; esac elif test "x$cf_pkg_config" != xno ; then { echo "$as_me:2582: WARNING: pkg-config is not installed" >&5 echo "$as_me: WARNING: pkg-config is not installed" >&2;} fi case $PKG_CONFIG in (no|none|yes) echo "$as_me:2588: checking for pkg-config library directory" >&5 echo $ECHO_N "checking for pkg-config library directory... $ECHO_C" >&6 ;; (*) echo "$as_me:2592: checking for $PKG_CONFIG library directory" >&5 echo $ECHO_N "checking for $PKG_CONFIG library directory... $ECHO_C" >&6 ;; esac PKG_CONFIG_LIBDIR=no # Check whether --with-pkg-config-libdir or --without-pkg-config-libdir was given. if test "${with_pkg_config_libdir+set}" = set; then withval="$with_pkg_config_libdir" PKG_CONFIG_LIBDIR=$withval else test "x$PKG_CONFIG" != xnone && PKG_CONFIG_LIBDIR=yes fi; case x$PKG_CONFIG_LIBDIR in (x/*) ;; (xyes) # Look for the library directory using the same prefix as the executable if test "x$PKG_CONFIG" = xnone then cf_path=$prefix else cf_path=`echo "$PKG_CONFIG" | sed -e 's,/[^/]*/[^/]*$,,'` fi # If you don't like using the default architecture, you have to specify the # intended library directory and corresponding compiler/linker options. # # This case allows for Debian's 2014-flavor of multiarch, along with the # most common variations before that point. Some other variants spell the # directory differently, e.g., "pkg-config", and put it in unusual places. # pkg-config has always been poorly standardized, which is ironic... case x`(arch) 2>/dev/null` in (*64) cf_search_path="\ $cf_path/lib/*64-linux-gnu \ $cf_path/share \ $cf_path/lib64 \ $cf_path/lib32 \ $cf_path/lib" ;; (*) cf_search_path="\ $cf_path/lib/*-linux-gnu \ $cf_path/share \ $cf_path/lib32 \ $cf_path/lib \ $cf_path/libdata" ;; esac test -n "$verbose" && echo " list..." 1>&6 echo "${as_me:-configure}:2647: testing list... ..." 1>&5 for cf_config in $cf_search_path do test -n "$verbose" && echo " checking $cf_config/pkgconfig" 1>&6 echo "${as_me:-configure}:2653: testing checking $cf_config/pkgconfig ..." 1>&5 if test -d $cf_config/pkgconfig then PKG_CONFIG_LIBDIR=$cf_config/pkgconfig echo "$as_me:2658: checking done" >&5 echo $ECHO_N "checking done... $ECHO_C" >&6 break fi done ;; (*) ;; esac if test "x$PKG_CONFIG_LIBDIR" != xno ; then echo "$as_me:2669: result: $PKG_CONFIG_LIBDIR" >&5 echo "${ECHO_T}$PKG_CONFIG_LIBDIR" >&6 fi echo "$as_me:2673: checking if you want to build test-programs" >&5 echo $ECHO_N "checking if you want to build test-programs... $ECHO_C" >&6 # Check whether --with-tests or --without-tests was given. if test "${with_tests+set}" = set; then withval="$with_tests" cf_with_tests=$withval else cf_with_tests=yes fi; echo "$as_me:2683: result: $cf_with_tests" >&5 echo "${ECHO_T}$cf_with_tests" >&6 echo "$as_me:2686: checking if we should assume mixed-case filenames" >&5 echo $ECHO_N "checking if we should assume mixed-case filenames... $ECHO_C" >&6 # Check whether --enable-mixed-case or --disable-mixed-case was given. if test "${enable_mixed_case+set}" = set; then enableval="$enable_mixed_case" enable_mixedcase=$enableval else enable_mixedcase=auto fi; echo "$as_me:2696: result: $enable_mixedcase" >&5 echo "${ECHO_T}$enable_mixedcase" >&6 if test "$enable_mixedcase" = "auto" ; then echo "$as_me:2700: checking if filesystem supports mixed-case filenames" >&5 echo $ECHO_N "checking if filesystem supports mixed-case filenames... $ECHO_C" >&6 if test "${cf_cv_mixedcase+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes ; then case $target_alias in (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*) cf_cv_mixedcase=no ;; (*) cf_cv_mixedcase=yes ;; esac else rm -f conftest CONFTEST echo test >conftest if test -f CONFTEST ; then cf_cv_mixedcase=no else cf_cv_mixedcase=yes fi rm -f conftest CONFTEST fi fi echo "$as_me:2727: result: $cf_cv_mixedcase" >&5 echo "${ECHO_T}$cf_cv_mixedcase" >&6 test "$cf_cv_mixedcase" = yes && cat >>confdefs.h <<\EOF #define MIXEDCASE_FILENAMES 1 EOF else cf_cv_mixedcase=$enable_mixedcase if test "$enable_mixedcase" = "yes" ; then cat >>confdefs.h <<\EOF #define MIXEDCASE_FILENAMES 1 EOF fi fi # do this after mixed-case option (tags/TAGS is not as important as tic). echo "$as_me:2745: checking whether ${MAKE-make} sets \${MAKE}" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:2765: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:2769: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi for ac_prog in exctags ctags do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2778: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CTAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CTAGS"; then ac_cv_prog_CTAGS="$CTAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CTAGS="$ac_prog" echo "$as_me:2793: found $ac_dir/$ac_word" >&5 break done fi fi CTAGS=$ac_cv_prog_CTAGS if test -n "$CTAGS"; then echo "$as_me:2801: result: $CTAGS" >&5 echo "${ECHO_T}$CTAGS" >&6 else echo "$as_me:2804: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CTAGS" && break done for ac_prog in exetags etags do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2815: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ETAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ETAGS"; then ac_cv_prog_ETAGS="$ETAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ETAGS="$ac_prog" echo "$as_me:2830: found $ac_dir/$ac_word" >&5 break done fi fi ETAGS=$ac_cv_prog_ETAGS if test -n "$ETAGS"; then echo "$as_me:2838: result: $ETAGS" >&5 echo "${ECHO_T}$ETAGS" >&6 else echo "$as_me:2841: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ETAGS" && break done # Extract the first word of "${CTAGS:-ctags}", so it can be a program name with args. set dummy ${CTAGS:-ctags}; ac_word=$2 echo "$as_me:2850: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE_LOWER_TAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE_LOWER_TAGS"; then ac_cv_prog_MAKE_LOWER_TAGS="$MAKE_LOWER_TAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_MAKE_LOWER_TAGS="yes" echo "$as_me:2865: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_MAKE_LOWER_TAGS" && ac_cv_prog_MAKE_LOWER_TAGS="no" fi fi MAKE_LOWER_TAGS=$ac_cv_prog_MAKE_LOWER_TAGS if test -n "$MAKE_LOWER_TAGS"; then echo "$as_me:2874: result: $MAKE_LOWER_TAGS" >&5 echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6 else echo "$as_me:2877: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$cf_cv_mixedcase" = yes ; then # Extract the first word of "${ETAGS:-etags}", so it can be a program name with args. set dummy ${ETAGS:-etags}; ac_word=$2 echo "$as_me:2884: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE_UPPER_TAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE_UPPER_TAGS"; then ac_cv_prog_MAKE_UPPER_TAGS="$MAKE_UPPER_TAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_MAKE_UPPER_TAGS="yes" echo "$as_me:2899: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_MAKE_UPPER_TAGS" && ac_cv_prog_MAKE_UPPER_TAGS="no" fi fi MAKE_UPPER_TAGS=$ac_cv_prog_MAKE_UPPER_TAGS if test -n "$MAKE_UPPER_TAGS"; then echo "$as_me:2908: result: $MAKE_UPPER_TAGS" >&5 echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6 else echo "$as_me:2911: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAKE_UPPER_TAGS=no fi if test "$MAKE_UPPER_TAGS" = yes ; then MAKE_UPPER_TAGS= else MAKE_UPPER_TAGS="#" fi if test "$MAKE_LOWER_TAGS" = yes ; then MAKE_LOWER_TAGS= else MAKE_LOWER_TAGS="#" fi echo "$as_me:2931: checking for makeflags variable" >&5 echo $ECHO_N "checking for makeflags variable... $ECHO_C" >&6 if test "${cf_cv_makeflags+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_makeflags='' for cf_option in '-${MAKEFLAGS}' '${MFLAGS}' do cat >cf_makeflags.tmp </dev/null | fgrep -v "ing directory" | sed -e 's,[ ]*$,,'` case "$cf_result" in (.*k|.*kw) cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` case "$cf_result" in (.*CC=*) cf_cv_makeflags= ;; (*) cf_cv_makeflags=$cf_option ;; esac break ;; (.-) ;; (*) echo "given option \"$cf_option\", no match \"$cf_result\"" ;; esac done rm -f cf_makeflags.tmp fi echo "$as_me:2965: result: $cf_cv_makeflags" >&5 echo "${ECHO_T}$cf_cv_makeflags" >&6 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:2971: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:2986: found $ac_dir/$ac_word" >&5 break done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:2994: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:2997: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:3006: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:3021: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB="':'" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:3030: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:3033: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. set dummy ${ac_tool_prefix}ld; ac_word=$2 echo "$as_me:3045: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_LD="${ac_tool_prefix}ld" echo "$as_me:3060: found $ac_dir/$ac_word" >&5 break done fi fi LD=$ac_cv_prog_LD if test -n "$LD"; then echo "$as_me:3068: result: $LD" >&5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:3071: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_LD"; then ac_ct_LD=$LD # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 echo "$as_me:3080: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_LD"; then ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_LD="ld" echo "$as_me:3095: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_LD" && ac_cv_prog_ac_ct_LD="ld" fi fi ac_ct_LD=$ac_cv_prog_ac_ct_LD if test -n "$ac_ct_LD"; then echo "$as_me:3104: result: $ac_ct_LD" >&5 echo "${ECHO_T}$ac_ct_LD" >&6 else echo "$as_me:3107: result: no" >&5 echo "${ECHO_T}no" >&6 fi LD=$ac_ct_LD else LD="$ac_cv_prog_LD" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:3119: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:3134: found $ac_dir/$ac_word" >&5 break done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:3142: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:3145: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:3154: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_AR="ar" echo "$as_me:3169: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="ar" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:3178: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:3181: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:3193: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:3208: found $ac_dir/$ac_word" >&5 break done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:3216: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:3219: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:3228: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_AR="ar" echo "$as_me:3243: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="ar" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:3252: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:3255: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi echo "$as_me:3264: checking for options to update archives" >&5 echo $ECHO_N "checking for options to update archives... $ECHO_C" >&6 if test "${cf_cv_ar_flags+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ar_flags=unknown for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv do # check if $ARFLAGS already contains this choice if test "x$ARFLAGS" != "x" ; then cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"` if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then cf_cv_ar_flags= break fi fi rm -f conftest.$ac_cv_objext rm -f conftest.a cat >conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3293: \$? = $ac_status" >&5 (exit $ac_status); } ; then echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&5 $AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext 2>&5 1>/dev/null if test -f conftest.a ; then cf_cv_ar_flags=$cf_ar_flags break fi else test -n "$verbose" && echo " cannot compile test-program" 1>&6 echo "${as_me:-configure}:3304: testing cannot compile test-program ..." 1>&5 break fi done rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext fi echo "$as_me:3312: result: $cf_cv_ar_flags" >&5 echo "${ECHO_T}$cf_cv_ar_flags" >&6 if test -n "$ARFLAGS" ; then if test -n "$cf_cv_ar_flags" ; then ARFLAGS="$ARFLAGS $cf_cv_ar_flags" fi else ARFLAGS=$cf_cv_ar_flags fi echo "$as_me:3323: checking for PATH separator" >&5 echo $ECHO_N "checking for PATH separator... $ECHO_C" >&6 case $cf_cv_system_name in (os2*) PATH_SEPARATOR=';' ;; (*) ${PATH_SEPARATOR:=':'} ;; esac echo "$as_me:3330: result: $PATH_SEPARATOR" >&5 echo "${ECHO_T}$PATH_SEPARATOR" >&6 echo "$as_me:3333: checking if you have specified an install-prefix" >&5 echo $ECHO_N "checking if you have specified an install-prefix... $ECHO_C" >&6 # Check whether --with-install-prefix or --without-install-prefix was given. if test "${with_install_prefix+set}" = set; then withval="$with_install_prefix" case "$withval" in (yes|no) ;; (*) DESTDIR="$withval" ;; esac fi; echo "$as_me:3346: result: $DESTDIR" >&5 echo "${ECHO_T}$DESTDIR" >&6 ############################################################################### # If we're cross-compiling, allow the user to override the tools and their # options. The configure script is oriented toward identifying the host # compiler, etc., but we need a build compiler to generate parts of the source. if test "$cross_compiling" = yes ; then # defaults that we might want to override : ${BUILD_CFLAGS:=''} : ${BUILD_CPPFLAGS:=''} : ${BUILD_LDFLAGS:=''} : ${BUILD_LIBS:=''} : ${BUILD_EXEEXT:='$x'} : ${BUILD_OBJEXT:='o'} # Check whether --with-build-cc or --without-build-cc was given. if test "${with_build_cc+set}" = set; then withval="$with_build_cc" BUILD_CC="$withval" else for ac_prog in gcc cc cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:3374: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_BUILD_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$BUILD_CC"; then ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_BUILD_CC="$ac_prog" echo "$as_me:3389: found $ac_dir/$ac_word" >&5 break done fi fi BUILD_CC=$ac_cv_prog_BUILD_CC if test -n "$BUILD_CC"; then echo "$as_me:3397: result: $BUILD_CC" >&5 echo "${ECHO_T}$BUILD_CC" >&6 else echo "$as_me:3400: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$BUILD_CC" && break done fi; echo "$as_me:3408: checking for native build C compiler" >&5 echo $ECHO_N "checking for native build C compiler... $ECHO_C" >&6 echo "$as_me:3410: result: $BUILD_CC" >&5 echo "${ECHO_T}$BUILD_CC" >&6 echo "$as_me:3413: checking for native build C preprocessor" >&5 echo $ECHO_N "checking for native build C preprocessor... $ECHO_C" >&6 # Check whether --with-build-cpp or --without-build-cpp was given. if test "${with_build_cpp+set}" = set; then withval="$with_build_cpp" BUILD_CPP="$withval" else BUILD_CPP='${BUILD_CC} -E' fi; echo "$as_me:3423: result: $BUILD_CPP" >&5 echo "${ECHO_T}$BUILD_CPP" >&6 echo "$as_me:3426: checking for native build C flags" >&5 echo $ECHO_N "checking for native build C flags... $ECHO_C" >&6 # Check whether --with-build-cflags or --without-build-cflags was given. if test "${with_build_cflags+set}" = set; then withval="$with_build_cflags" BUILD_CFLAGS="$withval" fi; echo "$as_me:3434: result: $BUILD_CFLAGS" >&5 echo "${ECHO_T}$BUILD_CFLAGS" >&6 echo "$as_me:3437: checking for native build C preprocessor-flags" >&5 echo $ECHO_N "checking for native build C preprocessor-flags... $ECHO_C" >&6 # Check whether --with-build-cppflags or --without-build-cppflags was given. if test "${with_build_cppflags+set}" = set; then withval="$with_build_cppflags" BUILD_CPPFLAGS="$withval" fi; echo "$as_me:3445: result: $BUILD_CPPFLAGS" >&5 echo "${ECHO_T}$BUILD_CPPFLAGS" >&6 echo "$as_me:3448: checking for native build linker-flags" >&5 echo $ECHO_N "checking for native build linker-flags... $ECHO_C" >&6 # Check whether --with-build-ldflags or --without-build-ldflags was given. if test "${with_build_ldflags+set}" = set; then withval="$with_build_ldflags" BUILD_LDFLAGS="$withval" fi; echo "$as_me:3456: result: $BUILD_LDFLAGS" >&5 echo "${ECHO_T}$BUILD_LDFLAGS" >&6 echo "$as_me:3459: checking for native build linker-libraries" >&5 echo $ECHO_N "checking for native build linker-libraries... $ECHO_C" >&6 # Check whether --with-build-libs or --without-build-libs was given. if test "${with_build_libs+set}" = set; then withval="$with_build_libs" BUILD_LIBS="$withval" fi; echo "$as_me:3467: result: $BUILD_LIBS" >&5 echo "${ECHO_T}$BUILD_LIBS" >&6 # this assumes we're on Unix. BUILD_EXEEXT= BUILD_OBJEXT=o : ${BUILD_CC:='${CC}'} if ( test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '${CC}' ) ; then { { echo "$as_me:3477: error: Cross-build requires two compilers. Use --with-build-cc to specify the native compiler." >&5 echo "$as_me: error: Cross-build requires two compilers. Use --with-build-cc to specify the native compiler." >&2;} { (exit 1); exit 1; }; } fi else : ${BUILD_CC:='${CC}'} : ${BUILD_CPP:='${CPP}'} : ${BUILD_CFLAGS:='${CFLAGS}'} : ${BUILD_CPPFLAGS:='${CPPFLAGS}'} : ${BUILD_LDFLAGS:='${LDFLAGS}'} : ${BUILD_LIBS:='${LIBS}'} : ${BUILD_EXEEXT:='$x'} : ${BUILD_OBJEXT:='o'} fi ############################################################################### ### Options to allow the user to specify the set of libraries which are used. ### Use "--without-normal --with-shared" to allow the default model to be ### shared, for example. cf_list_models="" echo "$as_me:3502: checking if you want to build shared C-objects" >&5 echo $ECHO_N "checking if you want to build shared C-objects... $ECHO_C" >&6 # Check whether --with-shared or --without-shared was given. if test "${with_shared+set}" = set; then withval="$with_shared" with_shared=$withval else with_shared=no fi; echo "$as_me:3512: result: $with_shared" >&5 echo "${ECHO_T}$with_shared" >&6 test "$with_shared" = "yes" && cf_list_models="$cf_list_models shared" echo "$as_me:3516: checking for specified models" >&5 echo $ECHO_N "checking for specified models... $ECHO_C" >&6 test -z "$cf_list_models" && cf_list_models=normal echo "$as_me:3519: result: $cf_list_models" >&5 echo "${ECHO_T}$cf_list_models" >&6 ### Use the first model as the default, and save its suffix for use in building ### up test-applications. echo "$as_me:3524: checking for default model" >&5 echo $ECHO_N "checking for default model... $ECHO_C" >&6 DFT_LWR_MODEL=`echo "$cf_list_models" | $AWK '{print $1}'` echo "$as_me:3527: result: $DFT_LWR_MODEL" >&5 echo "${ECHO_T}$DFT_LWR_MODEL" >&6 DFT_UPR_MODEL=`echo "$DFT_LWR_MODEL" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` echo "$as_me:3532: checking for specific curses-directory" >&5 echo $ECHO_N "checking for specific curses-directory... $ECHO_C" >&6 # Check whether --with-curses-dir or --without-curses-dir was given. if test "${with_curses_dir+set}" = set; then withval="$with_curses_dir" cf_cv_curses_dir=$withval else cf_cv_curses_dir=no fi; echo "$as_me:3542: result: $cf_cv_curses_dir" >&5 echo "${ECHO_T}$cf_cv_curses_dir" >&6 if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$withval" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval withval="$withval" case ".$withval" in (.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:3573: error: expected a pathname, not \"$withval\"" >&5 echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} { (exit 1); exit 1; }; } ;; esac if test -d "$cf_cv_curses_dir" then if test -n "$cf_cv_curses_dir/include" ; then for cf_add_incdir in $cf_cv_curses_dir/include do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 3606 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3618: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3621: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3624: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3627: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:3644: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi if test -n "$cf_cv_curses_dir/lib" ; then for cf_add_libdir in $cf_cv_curses_dir/lib do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:3680: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi fi fi cf_ncuconfig_root=ncurses cf_have_ncuconfig=no if test "x${PKG_CONFIG:=none}" != xnone; then echo "$as_me:3695: checking pkg-config for $cf_ncuconfig_root" >&5 echo $ECHO_N "checking pkg-config for $cf_ncuconfig_root... $ECHO_C" >&6 if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then echo "$as_me:3698: result: yes" >&5 echo "${ECHO_T}yes" >&6 echo "$as_me:3701: checking if the $cf_ncuconfig_root package files work" >&5 echo $ECHO_N "checking if the $cf_ncuconfig_root package files work... $ECHO_C" >&6 cf_have_ncuconfig=unknown cf_save_CPPFLAGS="$CPPFLAGS" cf_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags $cf_ncuconfig_root`" cf_add_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 3727 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:3739: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:3742: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:3745: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3748: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if test "$cross_compiling" = yes; then cf_have_ncuconfig=maybe else cat >conftest.$ac_ext <<_ACEOF #line 3754 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main(void) { char *xx = curses_version(); return (xx == 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:3761: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:3764: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:3766: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3769: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_have_ncuconfig=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_ncuconfig=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_ncuconfig=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:3786: result: $cf_have_ncuconfig" >&5 echo "${ECHO_T}$cf_have_ncuconfig" >&6 test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes if test "$cf_have_ncuconfig" != "yes" then CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" NCURSES_CONFIG_PKG=none else cat >>confdefs.h <<\EOF #define NCURSES 1 EOF NCURSES_CONFIG_PKG=$cf_ncuconfig_root fi else echo "$as_me:3804: result: no" >&5 echo "${ECHO_T}no" >&6 NCURSES_CONFIG_PKG=none fi else NCURSES_CONFIG_PKG=none fi if test "x$cf_have_ncuconfig" = "xno"; then echo "Looking for ${cf_ncuconfig_root}-config" if test -n "$ac_tool_prefix"; then for ac_prog in ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:3820: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NCURSES_CONFIG"; then ac_cv_prog_NCURSES_CONFIG="$NCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_NCURSES_CONFIG="$ac_tool_prefix$ac_prog" echo "$as_me:3835: found $ac_dir/$ac_word" >&5 break done fi fi NCURSES_CONFIG=$ac_cv_prog_NCURSES_CONFIG if test -n "$NCURSES_CONFIG"; then echo "$as_me:3843: result: $NCURSES_CONFIG" >&5 echo "${ECHO_T}$NCURSES_CONFIG" >&6 else echo "$as_me:3846: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$NCURSES_CONFIG" && break done fi if test -z "$NCURSES_CONFIG"; then ac_ct_NCURSES_CONFIG=$NCURSES_CONFIG for ac_prog in ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:3859: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_NCURSES_CONFIG"; then ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_ct_NCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_prog" echo "$as_me:3874: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_NCURSES_CONFIG=$ac_cv_prog_ac_ct_NCURSES_CONFIG if test -n "$ac_ct_NCURSES_CONFIG"; then echo "$as_me:3882: result: $ac_ct_NCURSES_CONFIG" >&5 echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6 else echo "$as_me:3885: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_NCURSES_CONFIG" && break done test -n "$ac_ct_NCURSES_CONFIG" || ac_ct_NCURSES_CONFIG="none" NCURSES_CONFIG=$ac_ct_NCURSES_CONFIG fi if test "$NCURSES_CONFIG" != none ; then CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" cf_add_libs="`$NCURSES_CONFIG --libs`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" # even with config script, some packages use no-override for curses.h echo "$as_me:3918: checking if we have identified curses headers" >&5 echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 if test "${cf_cv_ncurses_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_header=none for cf_header in \ ncurses.h ncurses/ncurses.h \ curses.h ncurses/curses.h do cat >conftest.$ac_ext <<_ACEOF #line 3930 "configure" #include "confdefs.h" #include <${cf_header}> int main () { initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3942: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3945: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3948: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3951: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_header=$cf_header; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:3962: result: $cf_cv_ncurses_header" >&5 echo "${ECHO_T}$cf_cv_ncurses_header" >&6 if test "$cf_cv_ncurses_header" = none ; then { { echo "$as_me:3966: error: No curses header-files found" >&5 echo "$as_me: error: No curses header-files found" >&2;} { (exit 1); exit 1; }; } fi # cheat, to get the right #define's for HAVE_NCURSES_H, etc. for ac_header in $cf_cv_ncurses_header do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:3976: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 3982 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:3986: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:3992: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:4011: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <conftest.$ac_ext <<_ACEOF #line 4064 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:4076: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4079: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:4082: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4085: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:4102: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi } echo "$as_me:4121: checking for $cf_ncuhdr_root header in include-path" >&5 echo $ECHO_N "checking for $cf_ncuhdr_root header in include-path... $ECHO_C" >&6 if test "${cf_cv_ncurses_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" for cf_header in $cf_header_list do cat >conftest.$ac_ext <<_ACEOF #line 4133 "configure" #include "confdefs.h" #include <$cf_header> int main () { #ifdef NCURSES_VERSION printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:4157: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4160: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:4163: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4166: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_h=$cf_header else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_h=no fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_ncurses_h" != no && break done fi echo "$as_me:4181: result: $cf_cv_ncurses_h" >&5 echo "${ECHO_T}$cf_cv_ncurses_h" >&6 if test "$cf_cv_ncurses_h" != no ; then cf_cv_ncurses_header=$cf_cv_ncurses_h else echo "$as_me:4188: checking for $cf_ncuhdr_root include-path" >&5 echo $ECHO_N "checking for $cf_ncuhdr_root include-path... $ECHO_C" >&6 if test "${cf_cv_ncurses_h2+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test -n "$verbose" && echo cf_search= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` test "x$cf_header_path" != "xNONE" && \ test -d "$cf_header_path" && \ { test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" test -d $cf_header_path/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root" test -d $cf_header_path/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root/include" test -d $cf_header_path/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include" test -d $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } cf_header_path_list="$cf_header_path_list $cf_search" ;; esac done fi # add the variations for the package we are looking for cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for include-directories under $prefix" test -d $prefix/include && cf_search="$cf_search $prefix/include" test -d $prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root" test -d $prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root/include" test -d $prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include" test -d $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" test -d $cf_subdir_prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root" test -d $cf_subdir_prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root/include" test -d $cf_subdir_prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include" test -d $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } done test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && cf_search="$cf_search $includedir" test -d $includedir/$cf_ncuhdr_root && cf_search="$cf_search $includedir/$cf_ncuhdr_root" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && cf_search="$cf_search $oldincludedir" test -d $oldincludedir/$cf_ncuhdr_root && cf_search="$cf_search $oldincludedir/$cf_ncuhdr_root" } cf_search="$cf_search $cf_header_path_list" test -n "$verbose" && echo search path $cf_search cf_save2_CPPFLAGS="$CPPFLAGS" for cf_incdir in $cf_search do if test -n "$cf_incdir" ; then for cf_add_incdir in $cf_incdir do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 4306 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:4318: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4321: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:4324: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4327: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:4344: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi for cf_header in \ ncurses.h \ curses.h do cat >conftest.$ac_ext <<_ACEOF #line 4367 "configure" #include "confdefs.h" #include <$cf_header> int main () { #ifdef NCURSES_VERSION printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:4391: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4394: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:4397: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4400: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_h2=$cf_header else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_h2=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test "$cf_cv_ncurses_h2" != no ; then cf_cv_ncurses_h2=$cf_incdir/$cf_header test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&6 break fi test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&6 done CPPFLAGS="$cf_save2_CPPFLAGS" test "$cf_cv_ncurses_h2" != no && break done test "$cf_cv_ncurses_h2" = no && { { echo "$as_me:4421: error: not found" >&5 echo "$as_me: error: not found" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:4426: result: $cf_cv_ncurses_h2" >&5 echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 cf_1st_incdir=`echo $cf_cv_ncurses_h2 | sed -e 's%/[^/]*$%%'` cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header fi if test -n "$cf_1st_incdir" ; then for cf_add_incdir in $cf_1st_incdir do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 4459 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:4471: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4474: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:4477: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4480: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:4497: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi fi # Set definitions to allow ifdef'ing for ncurses.h case $cf_cv_ncurses_header in (*ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_H 1 EOF ;; esac case $cf_cv_ncurses_header in (ncurses/curses.h|ncurses/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_NCURSES_H 1 EOF ;; (ncursesw/curses.h|ncursesw/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_NCURSES_H 1 EOF ;; esac echo "$as_me:4545: checking for terminfo header" >&5 echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case ${cf_cv_ncurses_header} in (*/ncurses.h|*/ncursesw.h) cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` ;; (*) cf_term_header=term.h ;; esac for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" do cat >conftest.$ac_ext <<_ACEOF #line 4563 "configure" #include "confdefs.h" #include #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> int main () { int x = auto_left_margin ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:4578: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4581: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:4584: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4587: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_term_header=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_term_header" != unknown && break done fi echo "$as_me:4603: result: $cf_cv_term_header" >&5 echo "${ECHO_T}$cf_cv_term_header" >&6 # Set definitions to allow ifdef'ing to accommodate subdirectories case $cf_cv_term_header in (*term.h) cat >>confdefs.h <<\EOF #define HAVE_TERM_H 1 EOF ;; esac case $cf_cv_term_header in (ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; (ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac # some applications need this, but should check for NCURSES_VERSION cat >>confdefs.h <<\EOF #define NCURSES 1 EOF echo "$as_me:4641: checking for ncurses version" >&5 echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 if test "${cf_cv_ncurses_version+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_version=no cf_tempfile=out$$ rm -f $cf_tempfile if test "$cross_compiling" = yes; then # This will not work if the preprocessor splits the line after the # Autoconf token. The 'unproto' program does that. cat > conftest.$ac_ext < #undef Autoconf #ifdef NCURSES_VERSION Autoconf NCURSES_VERSION #else #ifdef __NCURSES_H Autoconf "old" #endif ; #endif EOF cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" { (eval echo "$as_me:4667: \"$cf_try\"") >&5 (eval $cf_try) 2>&5 ac_status=$? echo "$as_me:4670: \$? = $ac_status" >&5 (exit $ac_status); } if test -f conftest.out ; then cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" rm -f conftest.out fi else cat >conftest.$ac_ext <<_ACEOF #line 4680 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include int main() { FILE *fp = fopen("$cf_tempfile", "w"); #ifdef NCURSES_VERSION # ifdef NCURSES_VERSION_PATCH fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); # else fprintf(fp, "%s\n", NCURSES_VERSION); # endif #else # ifdef __NCURSES_H fprintf(fp, "old\n"); # else make an error # endif #endif ${cf_cv_main_return:-return}(0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:4705: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:4708: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:4710: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4713: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_version=`cat $cf_tempfile` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f $cf_tempfile fi echo "$as_me:4727: result: $cf_cv_ncurses_version" >&5 echo "${ECHO_T}$cf_cv_ncurses_version" >&6 test "$cf_cv_ncurses_version" = no || cat >>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_root=ncurses # This works, except for the special case where we find gpm, but # ncurses is in a nonstandard location via $LIBS, and we really want # to link gpm. cf_ncurses_LIBS="" cf_ncurses_SAVE="$LIBS" echo "$as_me:4740: checking for Gpm_Open in -lgpm" >&5 echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 4748 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Gpm_Open (); int main () { Gpm_Open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:4767: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:4770: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:4773: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4776: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_Gpm_Open=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_Gpm_Open=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:4787: result: $ac_cv_lib_gpm_Gpm_Open" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 if test $ac_cv_lib_gpm_Gpm_Open = yes; then echo "$as_me:4790: checking for initscr in -lgpm" >&5 echo $ECHO_N "checking for initscr in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 4798 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:4817: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:4820: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:4823: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4826: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:4837: result: $ac_cv_lib_gpm_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_initscr" >&6 if test $ac_cv_lib_gpm_initscr = yes; then LIBS="$cf_ncurses_SAVE" else cf_ncurses_LIBS="-lgpm" fi fi case $host_os in (freebsd*) # This is only necessary if you are linking against an obsolete # version of ncurses (but it should do no harm, since it's static). if test "$cf_nculib_root" = ncurses ; then echo "$as_me:4852: checking for tgoto in -lmytinfo" >&5 echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmytinfo $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 4860 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char tgoto (); int main () { tgoto (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:4879: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:4882: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:4885: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4888: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_mytinfo_tgoto=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_mytinfo_tgoto=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:4899: result: $ac_cv_lib_mytinfo_tgoto" >&5 echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 if test $ac_cv_lib_mytinfo_tgoto = yes; then cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" fi fi ;; esac cf_add_libs="$cf_ncurses_LIBS" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then cf_add_libs="-l$cf_nculib_root" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" else eval 'cf_cv_have_lib_'$cf_nculib_root'=no' cf_libdir="" echo "$as_me:4948: checking for initscr" >&5 echo $ECHO_N "checking for initscr... $ECHO_C" >&6 if test "${ac_cv_func_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 4954 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char initscr (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_initscr) || defined (__stub___initscr) choke me #else f = initscr; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:4985: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:4988: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:4991: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4994: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:5004: result: $ac_cv_func_initscr" >&5 echo "${ECHO_T}$ac_cv_func_initscr" >&6 if test $ac_cv_func_initscr = yes; then eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else cf_save_LIBS="$LIBS" echo "$as_me:5011: checking for initscr in -l$cf_nculib_root" >&5 echo $ECHO_N "checking for initscr in -l$cf_nculib_root... $ECHO_C" >&6 LIBS="-l$cf_nculib_root $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5015 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5027: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5030: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5033: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5036: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:5038: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:5045: result: no" >&5 echo "${ECHO_T}no" >&6 cf_search= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` test "x$cf_library_path" != "xNONE" && \ test -d "$cf_library_path" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" test -d $cf_library_path/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root" test -d $cf_library_path/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root/lib" test -d $cf_library_path/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib" test -d $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" } cf_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $prefix" test -d $prefix/lib && cf_search="$cf_search $prefix/lib" test -d $prefix/lib/$cf_nculib_root && cf_search="$cf_search $prefix/lib/$cf_nculib_root" test -d $prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $prefix/lib/$cf_nculib_root/lib" test -d $prefix/$cf_nculib_root/lib && cf_search="$cf_search $prefix/$cf_nculib_root/lib" test -d $prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $prefix/$cf_nculib_root/lib/$cf_nculib_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" test -d $cf_subdir_prefix/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root" test -d $cf_subdir_prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root/lib" test -d $cf_subdir_prefix/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib" test -d $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" } done cf_search="$cf_library_path_list $cf_search" for cf_libdir in $cf_search do echo "$as_me:5113: checking for -l$cf_nculib_root in $cf_libdir" >&5 echo $ECHO_N "checking for -l$cf_nculib_root in $cf_libdir... $ECHO_C" >&6 LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5117 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5129: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5132: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5135: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5138: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:5140: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:5147: result: no" >&5 echo "${ECHO_T}no" >&6 LIBS="$cf_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi eval 'cf_found_library=$cf_cv_have_lib_'$cf_nculib_root if test $cf_found_library = no ; then { { echo "$as_me:5162: error: Cannot link $cf_nculib_root library" >&5 echo "$as_me: error: Cannot link $cf_nculib_root library" >&2;} { (exit 1); exit 1; }; } fi fi if test -n "$cf_ncurses_LIBS" ; then echo "$as_me:5170: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 echo $ECHO_N "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS... $ECHO_C" >&6 cf_ncurses_SAVE="$LIBS" for p in $cf_ncurses_LIBS ; do q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` if test "$q" != "$LIBS" ; then LIBS="$q" fi done cat >conftest.$ac_ext <<_ACEOF #line 5180 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5192: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5195: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5198: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5201: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:5203: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:5208: result: no" >&5 echo "${ECHO_T}no" >&6 LIBS="$cf_ncurses_SAVE" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi cf_nculib_ROOT=`echo "HAVE_LIB$cf_nculib_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking if you want wide-character code... $ECHO_C" >&6 # Check whether --enable-widec or --disable-widec was given. if test "${enable_widec+set}" = set; then enableval="$enable_widec" with_widec=$enableval else with_widec=no fi; echo "$as_me:5236: result: $with_widec" >&5 echo "${ECHO_T}$with_widec" >&6 if test "$with_widec" = yes ; then echo "$as_me:5240: checking for multibyte character support" >&5 echo $ECHO_N "checking for multibyte character support... $ECHO_C" >&6 if test "${cf_cv_utf8_lib+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save_LIBS="$LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5248 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5261: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5264: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5267: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5270: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_utf8_lib=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these # will be set on completion of the AC_TRY_LINK below. cf_cv_header_path_utf8= cf_cv_library_path_utf8= echo "${as_me:-configure}:5282: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5 cf_save_LIBS="$LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5287 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5300: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5303: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5306: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5309: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_find_linkage_utf8=yes cf_cv_header_path_utf8=/usr/include cf_cv_library_path_utf8=/usr/lib else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 LIBS="-lutf8 $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5323 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5336: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5339: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5342: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5345: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_find_linkage_utf8=yes cf_cv_header_path_utf8=/usr/include cf_cv_library_path_utf8=/usr/lib cf_cv_library_file_utf8="-lutf8" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_find_linkage_utf8=no LIBS="$cf_save_LIBS" test -n "$verbose" && echo " find linkage for utf8 library" 1>&6 echo "${as_me:-configure}:5362: testing find linkage for utf8 library ..." 1>&5 echo "${as_me:-configure}:5364: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5 cf_save_CPPFLAGS="$CPPFLAGS" cf_test_CPPFLAGS="$CPPFLAGS" cf_search= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` test "x$cf_header_path" != "xNONE" && \ test -d "$cf_header_path" && \ { test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" test -d $cf_header_path/include/utf8 && cf_search="$cf_search $cf_header_path/include/utf8" test -d $cf_header_path/include/utf8/include && cf_search="$cf_search $cf_header_path/include/utf8/include" test -d $cf_header_path/utf8/include && cf_search="$cf_search $cf_header_path/utf8/include" test -d $cf_header_path/utf8/include/utf8 && cf_search="$cf_search $cf_header_path/utf8/include/utf8" } cf_header_path_list="$cf_header_path_list $cf_search" ;; esac done fi # add the variations for the package we are looking for cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for include-directories under $prefix" test -d $prefix/include && cf_search="$cf_search $prefix/include" test -d $prefix/include/utf8 && cf_search="$cf_search $prefix/include/utf8" test -d $prefix/include/utf8/include && cf_search="$cf_search $prefix/include/utf8/include" test -d $prefix/utf8/include && cf_search="$cf_search $prefix/utf8/include" test -d $prefix/utf8/include/utf8 && cf_search="$cf_search $prefix/utf8/include/utf8" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" test -d $cf_subdir_prefix/include/utf8 && cf_search="$cf_search $cf_subdir_prefix/include/utf8" test -d $cf_subdir_prefix/include/utf8/include && cf_search="$cf_search $cf_subdir_prefix/include/utf8/include" test -d $cf_subdir_prefix/utf8/include && cf_search="$cf_search $cf_subdir_prefix/utf8/include" test -d $cf_subdir_prefix/utf8/include/utf8 && cf_search="$cf_search $cf_subdir_prefix/utf8/include/utf8" } done test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && cf_search="$cf_search $includedir" test -d $includedir/utf8 && cf_search="$cf_search $includedir/utf8" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && cf_search="$cf_search $oldincludedir" test -d $oldincludedir/utf8 && cf_search="$cf_search $oldincludedir/utf8" } cf_search="$cf_search $cf_header_path_list" for cf_cv_header_path_utf8 in $cf_search do if test -d $cf_cv_header_path_utf8 ; then test -n "$verbose" && echo " ... testing $cf_cv_header_path_utf8" 1>&6 echo "${as_me:-configure}:5455: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5 CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_utf8" cat >conftest.$ac_ext <<_ACEOF #line 5459 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:5472: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5475: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:5478: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5481: \$? = $ac_status" >&5 (exit $ac_status); }; }; then test -n "$verbose" && echo " ... found utf8 headers in $cf_cv_header_path_utf8" 1>&6 echo "${as_me:-configure}:5486: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5 cf_cv_find_linkage_utf8=maybe cf_test_CPPFLAGS="$CPPFLAGS" break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext fi done if test "$cf_cv_find_linkage_utf8" = maybe ; then echo "${as_me:-configure}:5504: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5 cf_save_LIBS="$LIBS" cf_save_LDFLAGS="$LDFLAGS" if test "$cf_cv_find_linkage_utf8" != yes ; then cf_search= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` test "x$cf_library_path" != "xNONE" && \ test -d "$cf_library_path" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" test -d $cf_library_path/lib/utf8 && cf_search="$cf_search $cf_library_path/lib/utf8" test -d $cf_library_path/lib/utf8/lib && cf_search="$cf_search $cf_library_path/lib/utf8/lib" test -d $cf_library_path/utf8/lib && cf_search="$cf_search $cf_library_path/utf8/lib" test -d $cf_library_path/utf8/lib/utf8 && cf_search="$cf_search $cf_library_path/utf8/lib/utf8" } cf_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $prefix" test -d $prefix/lib && cf_search="$cf_search $prefix/lib" test -d $prefix/lib/utf8 && cf_search="$cf_search $prefix/lib/utf8" test -d $prefix/lib/utf8/lib && cf_search="$cf_search $prefix/lib/utf8/lib" test -d $prefix/utf8/lib && cf_search="$cf_search $prefix/utf8/lib" test -d $prefix/utf8/lib/utf8 && cf_search="$cf_search $prefix/utf8/lib/utf8" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" test -d $cf_subdir_prefix/lib/utf8 && cf_search="$cf_search $cf_subdir_prefix/lib/utf8" test -d $cf_subdir_prefix/lib/utf8/lib && cf_search="$cf_search $cf_subdir_prefix/lib/utf8/lib" test -d $cf_subdir_prefix/utf8/lib && cf_search="$cf_search $cf_subdir_prefix/utf8/lib" test -d $cf_subdir_prefix/utf8/lib/utf8 && cf_search="$cf_search $cf_subdir_prefix/utf8/lib/utf8" } done cf_search="$cf_library_path_list $cf_search" for cf_cv_library_path_utf8 in $cf_search do if test -d $cf_cv_library_path_utf8 ; then test -n "$verbose" && echo " ... testing $cf_cv_library_path_utf8" 1>&6 echo "${as_me:-configure}:5579: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5 CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-lutf8 $cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_utf8" cat >conftest.$ac_ext <<_ACEOF #line 5585 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5598: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5601: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5604: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5607: \$? = $ac_status" >&5 (exit $ac_status); }; }; then test -n "$verbose" && echo " ... found utf8 library in $cf_cv_library_path_utf8" 1>&6 echo "${as_me:-configure}:5612: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5 cf_cv_find_linkage_utf8=yes cf_cv_library_file_utf8="-lutf8" break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi done CPPFLAGS="$cf_save_CPPFLAGS" LDFLAGS="$cf_save_LDFLAGS" fi else cf_cv_find_linkage_utf8=no fi fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save_LIBS" if test "$cf_cv_find_linkage_utf8" = yes ; then cf_cv_utf8_lib=add-on else cf_cv_utf8_lib=no fi fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:5654: result: $cf_cv_utf8_lib" >&5 echo "${ECHO_T}$cf_cv_utf8_lib" >&6 # HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between # ncurses/ncursesw: if test "$cf_cv_utf8_lib" = "add-on" ; then cat >>confdefs.h <<\EOF #define HAVE_LIBUTF8_H 1 EOF if test -n "$cf_cv_header_path_utf8" ; then for cf_add_incdir in $cf_cv_header_path_utf8 do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 5689 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:5701: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5704: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:5707: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5710: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:5727: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi if test -n "$cf_cv_library_path_utf8" ; then for cf_add_libdir in $cf_cv_library_path_utf8 do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:5763: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi cf_add_libs="$cf_cv_library_file_utf8" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi cf_ncuconfig_root=ncursesw cf_have_ncuconfig=no if test "x${PKG_CONFIG:=none}" != xnone; then echo "$as_me:5793: checking pkg-config for $cf_ncuconfig_root" >&5 echo $ECHO_N "checking pkg-config for $cf_ncuconfig_root... $ECHO_C" >&6 if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then echo "$as_me:5796: result: yes" >&5 echo "${ECHO_T}yes" >&6 echo "$as_me:5799: checking if the $cf_ncuconfig_root package files work" >&5 echo $ECHO_N "checking if the $cf_ncuconfig_root package files work... $ECHO_C" >&6 cf_have_ncuconfig=unknown cf_save_CPPFLAGS="$CPPFLAGS" cf_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags $cf_ncuconfig_root`" cf_add_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 5825 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5837: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5840: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5843: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5846: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if test "$cross_compiling" = yes; then cf_have_ncuconfig=maybe else cat >conftest.$ac_ext <<_ACEOF #line 5852 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main(void) { char *xx = curses_version(); return (xx == 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:5859: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5862: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:5864: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5867: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_have_ncuconfig=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_ncuconfig=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_ncuconfig=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:5884: result: $cf_have_ncuconfig" >&5 echo "${ECHO_T}$cf_have_ncuconfig" >&6 test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes if test "$cf_have_ncuconfig" != "yes" then CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" NCURSES_CONFIG_PKG=none else cat >>confdefs.h <<\EOF #define NCURSES 1 EOF NCURSES_CONFIG_PKG=$cf_ncuconfig_root fi else echo "$as_me:5902: result: no" >&5 echo "${ECHO_T}no" >&6 NCURSES_CONFIG_PKG=none fi else NCURSES_CONFIG_PKG=none fi if test "x$cf_have_ncuconfig" = "xno"; then echo "Looking for ${cf_ncuconfig_root}-config" if test -n "$ac_tool_prefix"; then for ac_prog in ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:5918: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NCURSES_CONFIG"; then ac_cv_prog_NCURSES_CONFIG="$NCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_NCURSES_CONFIG="$ac_tool_prefix$ac_prog" echo "$as_me:5933: found $ac_dir/$ac_word" >&5 break done fi fi NCURSES_CONFIG=$ac_cv_prog_NCURSES_CONFIG if test -n "$NCURSES_CONFIG"; then echo "$as_me:5941: result: $NCURSES_CONFIG" >&5 echo "${ECHO_T}$NCURSES_CONFIG" >&6 else echo "$as_me:5944: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$NCURSES_CONFIG" && break done fi if test -z "$NCURSES_CONFIG"; then ac_ct_NCURSES_CONFIG=$NCURSES_CONFIG for ac_prog in ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:5957: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_NCURSES_CONFIG"; then ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_ct_NCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_prog" echo "$as_me:5972: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_NCURSES_CONFIG=$ac_cv_prog_ac_ct_NCURSES_CONFIG if test -n "$ac_ct_NCURSES_CONFIG"; then echo "$as_me:5980: result: $ac_ct_NCURSES_CONFIG" >&5 echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6 else echo "$as_me:5983: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_NCURSES_CONFIG" && break done test -n "$ac_ct_NCURSES_CONFIG" || ac_ct_NCURSES_CONFIG="none" NCURSES_CONFIG=$ac_ct_NCURSES_CONFIG fi if test "$NCURSES_CONFIG" != none ; then CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" cf_add_libs="`$NCURSES_CONFIG --libs`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" # even with config script, some packages use no-override for curses.h echo "$as_me:6016: checking if we have identified curses headers" >&5 echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 if test "${cf_cv_ncurses_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_header=none for cf_header in \ ncurses.h ncursesw/ncurses.h \ curses.h ncursesw/curses.h do cat >conftest.$ac_ext <<_ACEOF #line 6028 "configure" #include "confdefs.h" #include <${cf_header}> int main () { initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6040: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6043: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6046: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6049: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_header=$cf_header; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:6060: result: $cf_cv_ncurses_header" >&5 echo "${ECHO_T}$cf_cv_ncurses_header" >&6 if test "$cf_cv_ncurses_header" = none ; then { { echo "$as_me:6064: error: No curses header-files found" >&5 echo "$as_me: error: No curses header-files found" >&2;} { (exit 1); exit 1; }; } fi # cheat, to get the right #define's for HAVE_NCURSES_H, etc. for ac_header in $cf_cv_ncurses_header do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:6074: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 6080 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:6084: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:6090: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:6109: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <conftest.$ac_ext <<_ACEOF #line 6162 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6174: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6177: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6180: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6183: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:6200: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi } echo "$as_me:6219: checking for $cf_ncuhdr_root header in include-path" >&5 echo $ECHO_N "checking for $cf_ncuhdr_root header in include-path... $ECHO_C" >&6 if test "${cf_cv_ncurses_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" for cf_header in $cf_header_list do cat >conftest.$ac_ext <<_ACEOF #line 6231 "configure" #include "confdefs.h" #define _XOPEN_SOURCE_EXTENDED #undef HAVE_LIBUTF8_H /* in case we used CF_UTF8_LIB */ #define HAVE_LIBUTF8_H /* to force ncurses' header file to use cchar_t */ #include <$cf_header> int main () { #ifdef NCURSES_VERSION #ifndef WACS_BSSB make an error #endif printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6263: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6266: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6269: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6272: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_h=$cf_header else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_h=no fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_ncurses_h" != no && break done fi echo "$as_me:6287: result: $cf_cv_ncurses_h" >&5 echo "${ECHO_T}$cf_cv_ncurses_h" >&6 if test "$cf_cv_ncurses_h" != no ; then cf_cv_ncurses_header=$cf_cv_ncurses_h else echo "$as_me:6294: checking for $cf_ncuhdr_root include-path" >&5 echo $ECHO_N "checking for $cf_ncuhdr_root include-path... $ECHO_C" >&6 if test "${cf_cv_ncurses_h2+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test -n "$verbose" && echo cf_search= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` test "x$cf_header_path" != "xNONE" && \ test -d "$cf_header_path" && \ { test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" test -d $cf_header_path/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root" test -d $cf_header_path/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root/include" test -d $cf_header_path/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include" test -d $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } cf_header_path_list="$cf_header_path_list $cf_search" ;; esac done fi # add the variations for the package we are looking for cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for include-directories under $prefix" test -d $prefix/include && cf_search="$cf_search $prefix/include" test -d $prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root" test -d $prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root/include" test -d $prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include" test -d $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" test -d $cf_subdir_prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root" test -d $cf_subdir_prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root/include" test -d $cf_subdir_prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include" test -d $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } done test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && cf_search="$cf_search $includedir" test -d $includedir/$cf_ncuhdr_root && cf_search="$cf_search $includedir/$cf_ncuhdr_root" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && cf_search="$cf_search $oldincludedir" test -d $oldincludedir/$cf_ncuhdr_root && cf_search="$cf_search $oldincludedir/$cf_ncuhdr_root" } cf_search="$cf_search $cf_header_path_list" test -n "$verbose" && echo search path $cf_search cf_save2_CPPFLAGS="$CPPFLAGS" for cf_incdir in $cf_search do if test -n "$cf_incdir" ; then for cf_add_incdir in $cf_incdir do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 6412 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6424: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6427: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6430: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6433: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:6450: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi for cf_header in \ ncurses.h \ curses.h do cat >conftest.$ac_ext <<_ACEOF #line 6473 "configure" #include "confdefs.h" #include <$cf_header> int main () { #ifdef NCURSES_VERSION printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6497: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6500: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6503: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6506: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_h2=$cf_header else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_h2=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test "$cf_cv_ncurses_h2" != no ; then cf_cv_ncurses_h2=$cf_incdir/$cf_header test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&6 break fi test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&6 done CPPFLAGS="$cf_save2_CPPFLAGS" test "$cf_cv_ncurses_h2" != no && break done test "$cf_cv_ncurses_h2" = no && { { echo "$as_me:6527: error: not found" >&5 echo "$as_me: error: not found" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:6532: result: $cf_cv_ncurses_h2" >&5 echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 cf_1st_incdir=`echo $cf_cv_ncurses_h2 | sed -e 's%/[^/]*$%%'` cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header fi if test -n "$cf_1st_incdir" ; then for cf_add_incdir in $cf_1st_incdir do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 6565 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6577: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6580: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6583: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6586: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:6603: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi fi # Set definitions to allow ifdef'ing for ncurses.h case $cf_cv_ncurses_header in (*ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_H 1 EOF ;; esac case $cf_cv_ncurses_header in (ncurses/curses.h|ncurses/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_NCURSES_H 1 EOF ;; (ncursesw/curses.h|ncursesw/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_NCURSES_H 1 EOF ;; esac echo "$as_me:6651: checking for terminfo header" >&5 echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case ${cf_cv_ncurses_header} in (*/ncurses.h|*/ncursesw.h) cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` ;; (*) cf_term_header=term.h ;; esac for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" do cat >conftest.$ac_ext <<_ACEOF #line 6669 "configure" #include "confdefs.h" #include #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> int main () { int x = auto_left_margin ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6684: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6687: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6690: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6693: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_term_header=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_term_header" != unknown && break done fi echo "$as_me:6709: result: $cf_cv_term_header" >&5 echo "${ECHO_T}$cf_cv_term_header" >&6 # Set definitions to allow ifdef'ing to accommodate subdirectories case $cf_cv_term_header in (*term.h) cat >>confdefs.h <<\EOF #define HAVE_TERM_H 1 EOF ;; esac case $cf_cv_term_header in (ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; (ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac # some applications need this, but should check for NCURSES_VERSION cat >>confdefs.h <<\EOF #define NCURSES 1 EOF echo "$as_me:6747: checking for ncurses version" >&5 echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 if test "${cf_cv_ncurses_version+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_version=no cf_tempfile=out$$ rm -f $cf_tempfile if test "$cross_compiling" = yes; then # This will not work if the preprocessor splits the line after the # Autoconf token. The 'unproto' program does that. cat > conftest.$ac_ext < #undef Autoconf #ifdef NCURSES_VERSION Autoconf NCURSES_VERSION #else #ifdef __NCURSES_H Autoconf "old" #endif ; #endif EOF cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" { (eval echo "$as_me:6773: \"$cf_try\"") >&5 (eval $cf_try) 2>&5 ac_status=$? echo "$as_me:6776: \$? = $ac_status" >&5 (exit $ac_status); } if test -f conftest.out ; then cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" rm -f conftest.out fi else cat >conftest.$ac_ext <<_ACEOF #line 6786 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include int main() { FILE *fp = fopen("$cf_tempfile", "w"); #ifdef NCURSES_VERSION # ifdef NCURSES_VERSION_PATCH fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); # else fprintf(fp, "%s\n", NCURSES_VERSION); # endif #else # ifdef __NCURSES_H fprintf(fp, "old\n"); # else make an error # endif #endif ${cf_cv_main_return:-return}(0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:6811: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:6814: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:6816: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6819: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_version=`cat $cf_tempfile` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f $cf_tempfile fi echo "$as_me:6833: result: $cf_cv_ncurses_version" >&5 echo "${ECHO_T}$cf_cv_ncurses_version" >&6 test "$cf_cv_ncurses_version" = no || cat >>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_root=ncursesw # This works, except for the special case where we find gpm, but # ncurses is in a nonstandard location via $LIBS, and we really want # to link gpm. cf_ncurses_LIBS="" cf_ncurses_SAVE="$LIBS" echo "$as_me:6846: checking for Gpm_Open in -lgpm" >&5 echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 6854 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Gpm_Open (); int main () { Gpm_Open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:6873: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:6876: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:6879: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6882: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_Gpm_Open=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_Gpm_Open=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:6893: result: $ac_cv_lib_gpm_Gpm_Open" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 if test $ac_cv_lib_gpm_Gpm_Open = yes; then echo "$as_me:6896: checking for initscr in -lgpm" >&5 echo $ECHO_N "checking for initscr in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 6904 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:6923: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:6926: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:6929: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6932: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:6943: result: $ac_cv_lib_gpm_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_initscr" >&6 if test $ac_cv_lib_gpm_initscr = yes; then LIBS="$cf_ncurses_SAVE" else cf_ncurses_LIBS="-lgpm" fi fi case $host_os in (freebsd*) # This is only necessary if you are linking against an obsolete # version of ncurses (but it should do no harm, since it's static). if test "$cf_nculib_root" = ncurses ; then echo "$as_me:6958: checking for tgoto in -lmytinfo" >&5 echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmytinfo $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 6966 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char tgoto (); int main () { tgoto (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:6985: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:6988: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:6991: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6994: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_mytinfo_tgoto=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_mytinfo_tgoto=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:7005: result: $ac_cv_lib_mytinfo_tgoto" >&5 echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 if test $ac_cv_lib_mytinfo_tgoto = yes; then cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" fi fi ;; esac cf_add_libs="$cf_ncurses_LIBS" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then cf_add_libs="-l$cf_nculib_root" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" else eval 'cf_cv_have_lib_'$cf_nculib_root'=no' cf_libdir="" echo "$as_me:7054: checking for initscr" >&5 echo $ECHO_N "checking for initscr... $ECHO_C" >&6 if test "${ac_cv_func_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 7060 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char initscr (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_initscr) || defined (__stub___initscr) choke me #else f = initscr; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7091: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7094: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7097: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7100: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:7110: result: $ac_cv_func_initscr" >&5 echo "${ECHO_T}$ac_cv_func_initscr" >&6 if test $ac_cv_func_initscr = yes; then eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else cf_save_LIBS="$LIBS" echo "$as_me:7117: checking for initscr in -l$cf_nculib_root" >&5 echo $ECHO_N "checking for initscr in -l$cf_nculib_root... $ECHO_C" >&6 LIBS="-l$cf_nculib_root $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 7121 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7133: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7136: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7139: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7142: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:7144: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:7151: result: no" >&5 echo "${ECHO_T}no" >&6 cf_search= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` test "x$cf_library_path" != "xNONE" && \ test -d "$cf_library_path" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" test -d $cf_library_path/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root" test -d $cf_library_path/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root/lib" test -d $cf_library_path/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib" test -d $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" } cf_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $prefix" test -d $prefix/lib && cf_search="$cf_search $prefix/lib" test -d $prefix/lib/$cf_nculib_root && cf_search="$cf_search $prefix/lib/$cf_nculib_root" test -d $prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $prefix/lib/$cf_nculib_root/lib" test -d $prefix/$cf_nculib_root/lib && cf_search="$cf_search $prefix/$cf_nculib_root/lib" test -d $prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $prefix/$cf_nculib_root/lib/$cf_nculib_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" test -d $cf_subdir_prefix/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root" test -d $cf_subdir_prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root/lib" test -d $cf_subdir_prefix/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib" test -d $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" } done cf_search="$cf_library_path_list $cf_search" for cf_libdir in $cf_search do echo "$as_me:7219: checking for -l$cf_nculib_root in $cf_libdir" >&5 echo $ECHO_N "checking for -l$cf_nculib_root in $cf_libdir... $ECHO_C" >&6 LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line 7223 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7235: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7238: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7241: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7244: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:7246: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:7253: result: no" >&5 echo "${ECHO_T}no" >&6 LIBS="$cf_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi eval 'cf_found_library=$cf_cv_have_lib_'$cf_nculib_root if test $cf_found_library = no ; then { { echo "$as_me:7268: error: Cannot link $cf_nculib_root library" >&5 echo "$as_me: error: Cannot link $cf_nculib_root library" >&2;} { (exit 1); exit 1; }; } fi fi if test -n "$cf_ncurses_LIBS" ; then echo "$as_me:7276: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 echo $ECHO_N "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS... $ECHO_C" >&6 cf_ncurses_SAVE="$LIBS" for p in $cf_ncurses_LIBS ; do q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` if test "$q" != "$LIBS" ; then LIBS="$q" fi done cat >conftest.$ac_ext <<_ACEOF #line 7286 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7298: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7301: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7304: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7307: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:7309: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:7314: result: no" >&5 echo "${ECHO_T}no" >&6 LIBS="$cf_ncurses_SAVE" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi cf_nculib_ROOT=`echo "HAVE_LIB$cf_nculib_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking pkg-config for $cf_ncuconfig_root... $ECHO_C" >&6 if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then echo "$as_me:7341: result: yes" >&5 echo "${ECHO_T}yes" >&6 echo "$as_me:7344: checking if the $cf_ncuconfig_root package files work" >&5 echo $ECHO_N "checking if the $cf_ncuconfig_root package files work... $ECHO_C" >&6 cf_have_ncuconfig=unknown cf_save_CPPFLAGS="$CPPFLAGS" cf_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags $cf_ncuconfig_root`" cf_add_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 7370 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7382: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7385: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7388: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7391: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if test "$cross_compiling" = yes; then cf_have_ncuconfig=maybe else cat >conftest.$ac_ext <<_ACEOF #line 7397 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main(void) { char *xx = curses_version(); return (xx == 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:7404: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7407: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:7409: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7412: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_have_ncuconfig=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_ncuconfig=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_ncuconfig=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:7429: result: $cf_have_ncuconfig" >&5 echo "${ECHO_T}$cf_have_ncuconfig" >&6 test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes if test "$cf_have_ncuconfig" != "yes" then CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" NCURSES_CONFIG_PKG=none else cat >>confdefs.h <<\EOF #define NCURSES 1 EOF NCURSES_CONFIG_PKG=$cf_ncuconfig_root fi else echo "$as_me:7447: result: no" >&5 echo "${ECHO_T}no" >&6 NCURSES_CONFIG_PKG=none fi else NCURSES_CONFIG_PKG=none fi if test "x$cf_have_ncuconfig" = "xno"; then echo "Looking for ${cf_ncuconfig_root}-config" if test -n "$ac_tool_prefix"; then for ac_prog in ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:7463: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NCURSES_CONFIG"; then ac_cv_prog_NCURSES_CONFIG="$NCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_NCURSES_CONFIG="$ac_tool_prefix$ac_prog" echo "$as_me:7478: found $ac_dir/$ac_word" >&5 break done fi fi NCURSES_CONFIG=$ac_cv_prog_NCURSES_CONFIG if test -n "$NCURSES_CONFIG"; then echo "$as_me:7486: result: $NCURSES_CONFIG" >&5 echo "${ECHO_T}$NCURSES_CONFIG" >&6 else echo "$as_me:7489: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$NCURSES_CONFIG" && break done fi if test -z "$NCURSES_CONFIG"; then ac_ct_NCURSES_CONFIG=$NCURSES_CONFIG for ac_prog in ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:7502: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_NCURSES_CONFIG"; then ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_ct_NCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_prog" echo "$as_me:7517: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_NCURSES_CONFIG=$ac_cv_prog_ac_ct_NCURSES_CONFIG if test -n "$ac_ct_NCURSES_CONFIG"; then echo "$as_me:7525: result: $ac_ct_NCURSES_CONFIG" >&5 echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6 else echo "$as_me:7528: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_NCURSES_CONFIG" && break done test -n "$ac_ct_NCURSES_CONFIG" || ac_ct_NCURSES_CONFIG="none" NCURSES_CONFIG=$ac_ct_NCURSES_CONFIG fi if test "$NCURSES_CONFIG" != none ; then CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" cf_add_libs="`$NCURSES_CONFIG --libs`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" # even with config script, some packages use no-override for curses.h echo "$as_me:7561: checking if we have identified curses headers" >&5 echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 if test "${cf_cv_ncurses_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_header=none for cf_header in \ ncurses.h ncurses/ncurses.h \ curses.h ncurses/curses.h do cat >conftest.$ac_ext <<_ACEOF #line 7573 "configure" #include "confdefs.h" #include <${cf_header}> int main () { initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:7585: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:7588: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:7591: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7594: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_header=$cf_header; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:7605: result: $cf_cv_ncurses_header" >&5 echo "${ECHO_T}$cf_cv_ncurses_header" >&6 if test "$cf_cv_ncurses_header" = none ; then { { echo "$as_me:7609: error: No curses header-files found" >&5 echo "$as_me: error: No curses header-files found" >&2;} { (exit 1); exit 1; }; } fi # cheat, to get the right #define's for HAVE_NCURSES_H, etc. for ac_header in $cf_cv_ncurses_header do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:7619: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 7625 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:7629: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:7635: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:7654: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <conftest.$ac_ext <<_ACEOF #line 7707 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:7719: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:7722: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:7725: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7728: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:7745: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi } echo "$as_me:7764: checking for $cf_ncuhdr_root header in include-path" >&5 echo $ECHO_N "checking for $cf_ncuhdr_root header in include-path... $ECHO_C" >&6 if test "${cf_cv_ncurses_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" for cf_header in $cf_header_list do cat >conftest.$ac_ext <<_ACEOF #line 7776 "configure" #include "confdefs.h" #include <$cf_header> int main () { #ifdef NCURSES_VERSION printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:7800: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:7803: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:7806: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7809: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_h=$cf_header else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_h=no fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_ncurses_h" != no && break done fi echo "$as_me:7824: result: $cf_cv_ncurses_h" >&5 echo "${ECHO_T}$cf_cv_ncurses_h" >&6 if test "$cf_cv_ncurses_h" != no ; then cf_cv_ncurses_header=$cf_cv_ncurses_h else echo "$as_me:7831: checking for $cf_ncuhdr_root include-path" >&5 echo $ECHO_N "checking for $cf_ncuhdr_root include-path... $ECHO_C" >&6 if test "${cf_cv_ncurses_h2+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test -n "$verbose" && echo cf_search= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` test "x$cf_header_path" != "xNONE" && \ test -d "$cf_header_path" && \ { test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" test -d $cf_header_path/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root" test -d $cf_header_path/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root/include" test -d $cf_header_path/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include" test -d $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } cf_header_path_list="$cf_header_path_list $cf_search" ;; esac done fi # add the variations for the package we are looking for cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for include-directories under $prefix" test -d $prefix/include && cf_search="$cf_search $prefix/include" test -d $prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root" test -d $prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root/include" test -d $prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include" test -d $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" test -d $cf_subdir_prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root" test -d $cf_subdir_prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root/include" test -d $cf_subdir_prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include" test -d $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } done test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && cf_search="$cf_search $includedir" test -d $includedir/$cf_ncuhdr_root && cf_search="$cf_search $includedir/$cf_ncuhdr_root" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && cf_search="$cf_search $oldincludedir" test -d $oldincludedir/$cf_ncuhdr_root && cf_search="$cf_search $oldincludedir/$cf_ncuhdr_root" } cf_search="$cf_search $cf_header_path_list" test -n "$verbose" && echo search path $cf_search cf_save2_CPPFLAGS="$CPPFLAGS" for cf_incdir in $cf_search do if test -n "$cf_incdir" ; then for cf_add_incdir in $cf_incdir do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 7949 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:7961: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:7964: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:7967: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7970: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:7987: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi for cf_header in \ ncurses.h \ curses.h do cat >conftest.$ac_ext <<_ACEOF #line 8010 "configure" #include "confdefs.h" #include <$cf_header> int main () { #ifdef NCURSES_VERSION printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8034: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8037: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8040: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8043: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_h2=$cf_header else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_h2=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test "$cf_cv_ncurses_h2" != no ; then cf_cv_ncurses_h2=$cf_incdir/$cf_header test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&6 break fi test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&6 done CPPFLAGS="$cf_save2_CPPFLAGS" test "$cf_cv_ncurses_h2" != no && break done test "$cf_cv_ncurses_h2" = no && { { echo "$as_me:8064: error: not found" >&5 echo "$as_me: error: not found" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:8069: result: $cf_cv_ncurses_h2" >&5 echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 cf_1st_incdir=`echo $cf_cv_ncurses_h2 | sed -e 's%/[^/]*$%%'` cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header fi if test -n "$cf_1st_incdir" ; then for cf_add_incdir in $cf_1st_incdir do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 8102 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8114: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8117: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8120: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8123: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:8140: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi fi # Set definitions to allow ifdef'ing for ncurses.h case $cf_cv_ncurses_header in (*ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_H 1 EOF ;; esac case $cf_cv_ncurses_header in (ncurses/curses.h|ncurses/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_NCURSES_H 1 EOF ;; (ncursesw/curses.h|ncursesw/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_NCURSES_H 1 EOF ;; esac echo "$as_me:8188: checking for terminfo header" >&5 echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case ${cf_cv_ncurses_header} in (*/ncurses.h|*/ncursesw.h) cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` ;; (*) cf_term_header=term.h ;; esac for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" do cat >conftest.$ac_ext <<_ACEOF #line 8206 "configure" #include "confdefs.h" #include #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> int main () { int x = auto_left_margin ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8221: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8224: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8227: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8230: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_term_header=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_term_header" != unknown && break done fi echo "$as_me:8246: result: $cf_cv_term_header" >&5 echo "${ECHO_T}$cf_cv_term_header" >&6 # Set definitions to allow ifdef'ing to accommodate subdirectories case $cf_cv_term_header in (*term.h) cat >>confdefs.h <<\EOF #define HAVE_TERM_H 1 EOF ;; esac case $cf_cv_term_header in (ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; (ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac # some applications need this, but should check for NCURSES_VERSION cat >>confdefs.h <<\EOF #define NCURSES 1 EOF echo "$as_me:8284: checking for ncurses version" >&5 echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 if test "${cf_cv_ncurses_version+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_version=no cf_tempfile=out$$ rm -f $cf_tempfile if test "$cross_compiling" = yes; then # This will not work if the preprocessor splits the line after the # Autoconf token. The 'unproto' program does that. cat > conftest.$ac_ext < #undef Autoconf #ifdef NCURSES_VERSION Autoconf NCURSES_VERSION #else #ifdef __NCURSES_H Autoconf "old" #endif ; #endif EOF cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" { (eval echo "$as_me:8310: \"$cf_try\"") >&5 (eval $cf_try) 2>&5 ac_status=$? echo "$as_me:8313: \$? = $ac_status" >&5 (exit $ac_status); } if test -f conftest.out ; then cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" rm -f conftest.out fi else cat >conftest.$ac_ext <<_ACEOF #line 8323 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include int main() { FILE *fp = fopen("$cf_tempfile", "w"); #ifdef NCURSES_VERSION # ifdef NCURSES_VERSION_PATCH fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); # else fprintf(fp, "%s\n", NCURSES_VERSION); # endif #else # ifdef __NCURSES_H fprintf(fp, "old\n"); # else make an error # endif #endif ${cf_cv_main_return:-return}(0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:8348: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8351: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:8353: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8356: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_version=`cat $cf_tempfile` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f $cf_tempfile fi echo "$as_me:8370: result: $cf_cv_ncurses_version" >&5 echo "${ECHO_T}$cf_cv_ncurses_version" >&6 test "$cf_cv_ncurses_version" = no || cat >>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_root=ncurses # This works, except for the special case where we find gpm, but # ncurses is in a nonstandard location via $LIBS, and we really want # to link gpm. cf_ncurses_LIBS="" cf_ncurses_SAVE="$LIBS" echo "$as_me:8383: checking for Gpm_Open in -lgpm" >&5 echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 8391 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Gpm_Open (); int main () { Gpm_Open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8410: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8413: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8416: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8419: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_Gpm_Open=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_Gpm_Open=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:8430: result: $ac_cv_lib_gpm_Gpm_Open" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 if test $ac_cv_lib_gpm_Gpm_Open = yes; then echo "$as_me:8433: checking for initscr in -lgpm" >&5 echo $ECHO_N "checking for initscr in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 8441 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8460: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8463: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8466: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8469: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:8480: result: $ac_cv_lib_gpm_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_initscr" >&6 if test $ac_cv_lib_gpm_initscr = yes; then LIBS="$cf_ncurses_SAVE" else cf_ncurses_LIBS="-lgpm" fi fi case $host_os in (freebsd*) # This is only necessary if you are linking against an obsolete # version of ncurses (but it should do no harm, since it's static). if test "$cf_nculib_root" = ncurses ; then echo "$as_me:8495: checking for tgoto in -lmytinfo" >&5 echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmytinfo $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 8503 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char tgoto (); int main () { tgoto (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8522: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8525: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8528: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8531: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_mytinfo_tgoto=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_mytinfo_tgoto=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:8542: result: $ac_cv_lib_mytinfo_tgoto" >&5 echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 if test $ac_cv_lib_mytinfo_tgoto = yes; then cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" fi fi ;; esac cf_add_libs="$cf_ncurses_LIBS" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then cf_add_libs="-l$cf_nculib_root" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" else eval 'cf_cv_have_lib_'$cf_nculib_root'=no' cf_libdir="" echo "$as_me:8591: checking for initscr" >&5 echo $ECHO_N "checking for initscr... $ECHO_C" >&6 if test "${ac_cv_func_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 8597 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char initscr (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_initscr) || defined (__stub___initscr) choke me #else f = initscr; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8628: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8631: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8634: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8637: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:8647: result: $ac_cv_func_initscr" >&5 echo "${ECHO_T}$ac_cv_func_initscr" >&6 if test $ac_cv_func_initscr = yes; then eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else cf_save_LIBS="$LIBS" echo "$as_me:8654: checking for initscr in -l$cf_nculib_root" >&5 echo $ECHO_N "checking for initscr in -l$cf_nculib_root... $ECHO_C" >&6 LIBS="-l$cf_nculib_root $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 8658 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8670: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8673: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8676: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8679: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:8681: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:8688: result: no" >&5 echo "${ECHO_T}no" >&6 cf_search= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` test "x$cf_library_path" != "xNONE" && \ test -d "$cf_library_path" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" test -d $cf_library_path/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root" test -d $cf_library_path/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root/lib" test -d $cf_library_path/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib" test -d $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" } cf_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $prefix" test -d $prefix/lib && cf_search="$cf_search $prefix/lib" test -d $prefix/lib/$cf_nculib_root && cf_search="$cf_search $prefix/lib/$cf_nculib_root" test -d $prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $prefix/lib/$cf_nculib_root/lib" test -d $prefix/$cf_nculib_root/lib && cf_search="$cf_search $prefix/$cf_nculib_root/lib" test -d $prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $prefix/$cf_nculib_root/lib/$cf_nculib_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" test -d $cf_subdir_prefix/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root" test -d $cf_subdir_prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root/lib" test -d $cf_subdir_prefix/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib" test -d $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" } done cf_search="$cf_library_path_list $cf_search" for cf_libdir in $cf_search do echo "$as_me:8756: checking for -l$cf_nculib_root in $cf_libdir" >&5 echo $ECHO_N "checking for -l$cf_nculib_root in $cf_libdir... $ECHO_C" >&6 LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line 8760 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8772: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8775: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8778: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8781: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:8783: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:8790: result: no" >&5 echo "${ECHO_T}no" >&6 LIBS="$cf_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi eval 'cf_found_library=$cf_cv_have_lib_'$cf_nculib_root if test $cf_found_library = no ; then { { echo "$as_me:8805: error: Cannot link $cf_nculib_root library" >&5 echo "$as_me: error: Cannot link $cf_nculib_root library" >&2;} { (exit 1); exit 1; }; } fi fi if test -n "$cf_ncurses_LIBS" ; then echo "$as_me:8813: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 echo $ECHO_N "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS... $ECHO_C" >&6 cf_ncurses_SAVE="$LIBS" for p in $cf_ncurses_LIBS ; do q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` if test "$q" != "$LIBS" ; then LIBS="$q" fi done cat >conftest.$ac_ext <<_ACEOF #line 8823 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8835: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8838: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8841: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8844: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:8846: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:8851: result: no" >&5 echo "${ECHO_T}no" >&6 LIBS="$cf_ncurses_SAVE" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi cf_nculib_ROOT=`echo "HAVE_LIB$cf_nculib_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h </dev/null` NCURSES_MAJOR=`echo "$cf_version" | sed -e 's/\..*//'` NCURSES_MINOR=`echo "$cf_version" | sed -e 's/^[0-9][0-9]*\.//' -e 's/\..*//'` NCURSES_PATCH=`echo "$cf_version" | sed -e 's/^[0-9][0-9]*\.[0-9][0-9]*\.//'` cf_cv_abi_version=`$PKG_CONFIG --variable=abi_version $NCURSES_CONFIG_PKG 2>/dev/null` if test -z "$cf_cv_abi_version" then cf_cv_abi_version=`$PKG_CONFIG --variable=major_version $NCURSES_CONFIG_PKG 2>/dev/null` fi elif test "$NCURSES_CONFIG" != none ; then cf_version=`$NCURSES_CONFIG --version 2>/dev/null` NCURSES_MAJOR=`echo "$cf_version" | sed -e 's/\..*//'` NCURSES_MINOR=`echo "$cf_version" | sed -e 's/^[0-9][0-9]*\.//' -e 's/\..*//'` NCURSES_PATCH=`echo "$cf_version" | sed -e 's/^[0-9][0-9]*\.[0-9][0-9]*\.//'` # ABI version is not available from headers cf_cv_abi_version=`$NCURSES_CONFIG --abi-version 2>/dev/null` else for cf_name in MAJOR MINOR PATCH do cat >conftest.$ac_ext < AUTOCONF_$cf_name NCURSES_VERSION_$cf_name CF_EOF cf_try="$ac_cpp conftest.$ac_ext 2>&5 | fgrep AUTOCONF_$cf_name >conftest.out" { (eval echo "$as_me:8904: \"$cf_try\"") >&5 (eval $cf_try) 2>&5 ac_status=$? echo "$as_me:8907: \$? = $ac_status" >&5 (exit $ac_status); } if test -f conftest.out ; then cf_result=`cat conftest.out | sed -e "s/^.*AUTOCONF_$cf_name[ ][ ]*//"` eval NCURSES_$cf_name=\"$cf_result\" # cat conftest.$ac_ext # cat conftest.out fi done cf_cv_abi_version=${NCURSES_MAJOR} fi cf_cv_rel_version=${NCURSES_MAJOR}.${NCURSES_MINOR} cf_cv_timestamp=`date` echo "$as_me:8925: result: Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)" >&5 echo "${ECHO_T}Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)" >&6 echo "$as_me:8928: checking if you want to have a library-prefix" >&5 echo $ECHO_N "checking if you want to have a library-prefix... $ECHO_C" >&6 # Check whether --with-lib-prefix or --without-lib-prefix was given. if test "${with_lib_prefix+set}" = set; then withval="$with_lib_prefix" with_lib_prefix=$withval else with_lib_prefix=auto fi; echo "$as_me:8938: result: $with_lib_prefix" >&5 echo "${ECHO_T}$with_lib_prefix" >&6 if test $with_lib_prefix = auto then case $cf_cv_system_name in (OS/2*|os2*) if test "$DFT_LWR_MODEL" = libtool; then LIB_PREFIX='lib' else LIB_PREFIX='' fi ;; (*) LIB_PREFIX='lib' ;; esac cf_prefix=$LIB_PREFIX elif test $with_lib_prefix = no then LIB_PREFIX= else LIB_PREFIX=$with_lib_prefix fi LIB_SUFFIX= ############################################################################### if test X"$CC_G_OPT" = X"" ; then CC_G_OPT='-g' test -n "$GCC" && test "${ac_cv_prog_cc_g}" != yes && CC_G_OPT='' fi echo "$as_me:8973: checking for default loader flags" >&5 echo $ECHO_N "checking for default loader flags... $ECHO_C" >&6 case $DFT_LWR_MODEL in (normal) LD_MODEL='' ;; (debug) LD_MODEL=$CC_G_OPT ;; (profile) LD_MODEL='-pg';; (shared) LD_MODEL='' ;; esac echo "$as_me:8981: result: $LD_MODEL" >&5 echo "${ECHO_T}$LD_MODEL" >&6 LD_RPATH_OPT= echo "$as_me:8985: checking for an rpath option" >&5 echo $ECHO_N "checking for an rpath option... $ECHO_C" >&6 case $cf_cv_system_name in (irix*) if test "$GCC" = yes; then LD_RPATH_OPT="-Wl,-rpath," else LD_RPATH_OPT="-rpath " fi ;; (linux*|gnu*|k*bsd*-gnu) LD_RPATH_OPT="-Wl,-rpath," ;; (openbsd[2-9].*|mirbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (dragonfly*|freebsd*) LD_RPATH_OPT="-rpath " ;; (netbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (osf*|mls+*) LD_RPATH_OPT="-rpath " ;; (solaris2*) LD_RPATH_OPT="-R" ;; (*) ;; esac echo "$as_me:9016: result: $LD_RPATH_OPT" >&5 echo "${ECHO_T}$LD_RPATH_OPT" >&6 case "x$LD_RPATH_OPT" in (x-R*) echo "$as_me:9021: checking if we need a space after rpath option" >&5 echo $ECHO_N "checking if we need a space after rpath option... $ECHO_C" >&6 cf_save_LIBS="$LIBS" cf_add_libs="${LD_RPATH_OPT}$libdir" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 9042 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9054: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9057: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9060: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9063: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_rpath_space=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_rpath_space=yes fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save_LIBS" echo "$as_me:9073: result: $cf_rpath_space" >&5 echo "${ECHO_T}$cf_rpath_space" >&6 test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " ;; esac RM_SHARED_OPTS= LOCAL_LDFLAGS= LOCAL_LDFLAGS2= LD_SHARED_OPTS= INSTALL_LIB="-m 644" : ${rel_builddir:=.} shlibdir=$libdir MAKE_DLLS="#" cf_cv_do_symlinks=no cf_ld_rpath_opt= test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT" echo "$as_me:9094: checking if release/abi version should be used for shared libs" >&5 echo $ECHO_N "checking if release/abi version should be used for shared libs... $ECHO_C" >&6 # Check whether --with-shlib-version or --without-shlib-version was given. if test "${with_shlib_version+set}" = set; then withval="$with_shlib_version" test -z "$withval" && withval=auto case $withval in (yes) cf_cv_shlib_version=auto ;; (rel|abi|auto) cf_cv_shlib_version=$withval ;; (*) echo "$as_me:9109: result: $withval" >&5 echo "${ECHO_T}$withval" >&6 { { echo "$as_me:9111: error: option value must be one of: rel, abi, or auto" >&5 echo "$as_me: error: option value must be one of: rel, abi, or auto" >&2;} { (exit 1); exit 1; }; } ;; esac else cf_cv_shlib_version=auto fi; echo "$as_me:9120: result: $cf_cv_shlib_version" >&5 echo "${ECHO_T}$cf_cv_shlib_version" >&6 cf_cv_rm_so_locs=no cf_try_cflags= # Some less-capable ports of gcc support only -fpic CC_SHARED_OPTS= if test "$GCC" = yes then echo "$as_me:9130: checking which $CC option to use" >&5 echo $ECHO_N "checking which $CC option to use... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" for CC_SHARED_OPTS in -fPIC -fpic '' do CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS" cat >conftest.$ac_ext <<_ACEOF #line 9137 "configure" #include "confdefs.h" #include int main () { int x = 1 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9149: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9152: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9155: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9158: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done echo "$as_me:9167: result: $CC_SHARED_OPTS" >&5 echo "${ECHO_T}$CC_SHARED_OPTS" >&6 CFLAGS="$cf_save_CFLAGS" fi cf_cv_shlib_version_infix=no case $cf_cv_system_name in (aix4.3-9*|aix[5-7]*) if test "$GCC" = yes; then CC_SHARED_OPTS='-Wl,-brtl' MK_SHARED_LIB='${CC} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@' else CC_SHARED_OPTS='-brtl' # as well as '-qpic=large -G' or perhaps "-bM:SRE -bnoentry -bexpall" MK_SHARED_LIB='${CC} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@' fi ;; (beos*) MK_SHARED_LIB='${CC} ${CFLAGS} -o $@ -Xlinker -soname=`basename $@` -nostart -e 0' ;; (cygwin*) CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cf_cv_shlib_version=cygdll cf_cv_shlib_version_infix=cygdll shlibdir=$bindir MAKE_DLLS= cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\$1 IMPORT_LIB=\`echo "\$1" | sed -e 's/cyg/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \$SHARED_LIB ** IMPORT_LIB \$IMPORT_LIB EOF exec \$* -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (msys*) CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cf_cv_shlib_version=msysdll cf_cv_shlib_version_infix=msysdll shlibdir=$bindir MAKE_DLLS= cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\$1 IMPORT_LIB=\`echo "\$1" | sed -e 's/msys-/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \$SHARED_LIB ** IMPORT_LIB \$IMPORT_LIB EOF exec \$* -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (darwin*) cf_try_cflags="no-cpp-precomp" CC_SHARED_OPTS="-dynamic" MK_SHARED_LIB='${CC} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $@` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $@' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi cf_cv_shlib_version_infix=yes echo "$as_me:9238: checking if ld -search_paths_first works" >&5 echo $ECHO_N "checking if ld -search_paths_first works... $ECHO_C" >&6 if test "${cf_cv_ldflags_search_paths_first+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" cat >conftest.$ac_ext <<_ACEOF #line 9247 "configure" #include "confdefs.h" int main () { int i; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9259: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9262: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9265: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9268: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ldflags_search_paths_first=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ldflags_search_paths_first=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LDFLAGS=$cf_save_LDFLAGS fi echo "$as_me:9279: result: $cf_cv_ldflags_search_paths_first" >&5 echo "${ECHO_T}$cf_cv_ldflags_search_paths_first" >&6 if test $cf_cv_ldflags_search_paths_first = yes; then LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi ;; (hpux[7-8]*) # HP-UX 8.07 ld lacks "+b" option used for libdir search-list if test "$GCC" != yes; then CC_SHARED_OPTS='+Z' fi MK_SHARED_LIB='${LD} -b -o $@' INSTALL_LIB="-m 555" ;; (hpux*) # (tested with gcc 2.7.2 -- I don't have c89) if test "$GCC" = yes; then LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}' else CC_SHARED_OPTS='+Z' LD_SHARED_OPTS='-Wl,+b,${libdir}' fi MK_SHARED_LIB='${LD} +b ${libdir} -b -o $@' # HP-UX shared libraries must be executable, and should be # readonly to exploit a quirk in the memory manager. INSTALL_LIB="-m 555" ;; (interix*) test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_shared_soname='`basename .${REL_VERSION}`.${ABI_VERSION}' else cf_shared_soname='`basename `' fi CC_SHARED_OPTS= MK_SHARED_LIB='${CC} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o ' ;; (irix*) if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi # tested with IRIX 5.2 and 'cc'. if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' MK_SHARED_LIB='${CC} -shared -rdata_shared -soname `basename $@` -o $@' else MK_SHARED_LIB='${CC} -shared -Wl,-soname,`basename $@` -o $@' fi cf_cv_rm_so_locs=yes ;; (linux*|gnu*|k*bsd*-gnu) if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $@`' fi MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' ;; (mingw*) cf_cv_shlib_version=mingw cf_cv_shlib_version_infix=mingw shlibdir=$bindir MAKE_DLLS= if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-Wl,--enable-auto-import" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS" fi CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\$1 IMPORT_LIB=\`echo "\$1" | sed -e 's/[0-9]*\.dll$/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \$SHARED_LIB ** IMPORT_LIB \$IMPORT_LIB EOF exec \$* -shared -Wl,--enable-auto-import,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (openbsd[2-9].*|mirbsd*) if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $@`' fi MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' ;; (nto-qnx*|openbsd*|freebsd[12].*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" MK_SHARED_LIB='${LD} -Bshareable -o $@' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; (dragonfly*|freebsd*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS" EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $@`' fi MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' ;; (netbsd*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" if test "$cf_cv_shlib_version" = auto; then if test -f /usr/libexec/ld.elf_so; then cf_cv_shlib_version=abi else cf_cv_shlib_version=rel fi fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $@`' fi MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $@' else MK_SHARED_LIB='${CC} -Wl,-shared -Wl,-Bshareable -o $@' fi ;; (osf*|mls+*) # tested with OSF/1 V3.2 and 'cc' # tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't # link with shared libs). MK_SHARED_LIB='${LD} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $@`' case $host_os in (osf4*) MK_SHARED_LIB="${MK_SHARED_LIB} -msym" ;; esac MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $@' if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi cf_cv_rm_so_locs=yes ;; (sco3.2v5*) # also uw2* and UW7: hops 13-Apr-98 # tested with osr5.0.5 if test "$GCC" != yes; then CC_SHARED_OPTS='-belf -KPIC' fi MK_SHARED_LIB='${LD} -dy -G -h `basename $@ .${REL_VERSION}`.${ABI_VERSION} -o $@' if test "$cf_cv_enable_rpath" = yes ; then # only way is to set LD_RUN_PATH but no switch for it RUN_PATH=$libdir fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel LINK_PROGS='LD_RUN_PATH=${libdir}' LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib' ;; (sunos4*) # tested with SunOS 4.1.1 and gcc 2.7.0 if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='${LD} -assert pure-text -o $@' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; (solaris2*) # tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2 # tested with SunOS 5.10 (solaris 10) and gcc 3.4.3 if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS" fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $@`' fi if test "$GCC" != yes; then cf_save_CFLAGS="$CFLAGS" for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O do CFLAGS="$cf_shared_opts $cf_save_CFLAGS" cat >conftest.$ac_ext <<_ACEOF #line 9504 "configure" #include "confdefs.h" #include int main () { printf("Hello\n"); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9516: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9519: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9522: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9525: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done CFLAGS="$cf_save_CFLAGS" CC_SHARED_OPTS=$cf_shared_opts MK_SHARED_LIB='${CC} -dy -G -h '$cf_cv_shared_soname' -o $@' else MK_SHARED_LIB='${CC} -shared -dy -G -h '$cf_cv_shared_soname' -o $@' fi ;; (sysv5uw7*|unix_sv*) # tested with UnixWare 7.1.0 (gcc 2.95.2 and cc) if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='${LD} -d y -G -o $@' ;; (*) CC_SHARED_OPTS='unknown' MK_SHARED_LIB='echo unknown' ;; esac # This works if the last tokens in $MK_SHARED_LIB are the -o target. case "$cf_cv_shlib_version" in (rel|abi) case "$MK_SHARED_LIB" in (*'-o $@') test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes ;; (*) { echo "$as_me:9562: WARNING: ignored --with-shlib-version" >&5 echo "$as_me: WARNING: ignored --with-shlib-version" >&2;} ;; esac ;; esac if test -n "$cf_try_cflags" then cat > conftest.$ac_ext < int main(int argc, char *argv[]) { printf("hello\n"); return (argv[argc-1] == 0) ; } EOF cf_save_CFLAGS="$CFLAGS" for cf_opt in $cf_try_cflags do CFLAGS="$cf_save_CFLAGS -$cf_opt" echo "$as_me:9584: checking if CFLAGS option -$cf_opt works" >&5 echo $ECHO_N "checking if CFLAGS option -$cf_opt works... $ECHO_C" >&6 if { (eval echo "$as_me:9586: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9589: \$? = $ac_status" >&5 (exit $ac_status); }; then echo "$as_me:9591: result: yes" >&5 echo "${ECHO_T}yes" >&6 cf_save_CFLAGS="$CFLAGS" else echo "$as_me:9595: result: no" >&5 echo "${ECHO_T}no" >&6 fi done CFLAGS="$cf_save_CFLAGS" fi # RPATH_LIST is a colon-separated list of directories test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}" test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}" test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations" test -n "$verbose" && echo " CC_SHARED_OPTS: $CC_SHARED_OPTS" 1>&6 echo "${as_me:-configure}:9610: testing CC_SHARED_OPTS: $CC_SHARED_OPTS ..." 1>&5 test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6 echo "${as_me:-configure}:9614: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 # The test/sample programs in the original tree link using rpath option. # Make it optional for packagers. if test -n "$LOCAL_LDFLAGS" then echo "$as_me:9620: checking if you want to link sample programs with rpath option" >&5 echo $ECHO_N "checking if you want to link sample programs with rpath option... $ECHO_C" >&6 # Check whether --enable-rpath-link or --disable-rpath-link was given. if test "${enable_rpath_link+set}" = set; then enableval="$enable_rpath_link" with_rpath_link=$enableval else with_rpath_link=yes fi; echo "$as_me:9630: result: $with_rpath_link" >&5 echo "${ECHO_T}$with_rpath_link" >&6 if test "$with_rpath_link" = no then LOCAL_LDFLAGS= LOCAL_LDFLAGS2= fi fi ############################################################################### ### use option --enable-broken-linker to force on use of broken-linker support echo "$as_me:9642: checking if you want broken-linker support code" >&5 echo $ECHO_N "checking if you want broken-linker support code... $ECHO_C" >&6 # Check whether --enable-broken_linker or --disable-broken_linker was given. if test "${enable_broken_linker+set}" = set; then enableval="$enable_broken_linker" with_broken_linker=$enableval else with_broken_linker=${BROKEN_LINKER:-no} fi; echo "$as_me:9652: result: $with_broken_linker" >&5 echo "${ECHO_T}$with_broken_linker" >&6 BROKEN_LINKER=0 if test "$with_broken_linker" = yes ; then cat >>confdefs.h <<\EOF #define BROKEN_LINKER 1 EOF BROKEN_LINKER=1 elif test "$DFT_LWR_MODEL" = shared ; then case $cf_cv_system_name in (cygwin*) cat >>confdefs.h <<\EOF #define BROKEN_LINKER 1 EOF BROKEN_LINKER=1 test -n "$verbose" && echo " cygwin linker is broken anyway" 1>&6 echo "${as_me:-configure}:9672: testing cygwin linker is broken anyway ..." 1>&5 ;; esac fi # Check to define _XOPEN_SOURCE "automatically" cf_XOPEN_SOURCE=500 cf_POSIX_C_SOURCE=199506L cf_xopen_source= case $host_os in (aix[4-7]*) cf_xopen_source="-D_ALL_SOURCE" ;; (cygwin|msys) cf_XOPEN_SOURCE=600 ;; (darwin[0-8].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; (darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; (freebsd*|dragonfly*) # 5.x headers associate # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L cf_POSIX_C_SOURCE=200112L cf_XOPEN_SOURCE=600 cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" ;; (hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; (hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; (irix[56].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; (linux*|gnu*|mint*|k*bsd*-gnu) echo "$as_me:9718: checking if we must define _GNU_SOURCE" >&5 echo $ECHO_N "checking if we must define _GNU_SOURCE... $ECHO_C" >&6 if test "${cf_cv_gnu_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 9725 "configure" #include "confdefs.h" #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9740: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9743: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9746: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9749: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_gnu_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" cat >conftest.$ac_ext <<_ACEOF #line 9758 "configure" #include "confdefs.h" #include int main () { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9773: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9776: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9779: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9782: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_gnu_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_gnu_source=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:9797: result: $cf_cv_gnu_source" >&5 echo "${ECHO_T}$cf_cv_gnu_source" >&6 test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" ;; (minix*) cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... ;; (mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks and other headers which use u_int / u_short types cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` echo "$as_me:9822: checking if we should define _POSIX_C_SOURCE" >&5 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 if test "${cf_cv_posix_c_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else echo "${as_me:-configure}:9828: testing if the symbol is already defined go no further ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 9831 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9846: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9849: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9852: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9855: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_posix_c_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then cat >conftest.$ac_ext <<_ACEOF #line 9876 "configure" #include "confdefs.h" #include int main () { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9891: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9894: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9897: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9900: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "${as_me:-configure}:9911: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" echo "${as_me:-configure}:9916: testing if the second compile does not leave our definition intact error ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 9919 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9934: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9937: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9940: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9943: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source=no fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:9959: result: $cf_cv_posix_c_source" >&5 echo "${ECHO_T}$cf_cv_posix_c_source" >&6 if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_cv_posix_c_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi ;; (netbsd*) cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw ;; (openbsd[4-9]*) # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=600 ;; (openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; (os2*) cf_XOPEN_SOURCE= ;; (osf[45]*) cf_xopen_source="-D_OSF_SOURCE" ;; (nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; (sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; (solaris2.*) cf_xopen_source="-D__EXTENSIONS__" cf_cv_xopen_source=broken ;; (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2) cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE= ;; (*) echo "$as_me:10080: checking if we should define _XOPEN_SOURCE" >&5 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 if test "${cf_cv_xopen_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 10087 "configure" #include "confdefs.h" #include #include #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10106: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10109: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10112: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10115: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" cat >conftest.$ac_ext <<_ACEOF #line 10124 "configure" #include "confdefs.h" #include #include #include int main () { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10143: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10146: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10149: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10152: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:10167: result: $cf_cv_xopen_source" >&5 echo "${ECHO_T}$cf_cv_xopen_source" >&6 if test "$cf_cv_xopen_source" != no ; then CFLAGS=`echo "$CFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_temp_xopen_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` echo "$as_me:10275: checking if we should define _POSIX_C_SOURCE" >&5 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 if test "${cf_cv_posix_c_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else echo "${as_me:-configure}:10281: testing if the symbol is already defined go no further ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 10284 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10299: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10302: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10305: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10308: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_posix_c_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then cat >conftest.$ac_ext <<_ACEOF #line 10329 "configure" #include "confdefs.h" #include int main () { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10344: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10347: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10350: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10353: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "${as_me:-configure}:10364: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" echo "${as_me:-configure}:10369: testing if the second compile does not leave our definition intact error ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 10372 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10387: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10390: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10393: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10396: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source=no fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:10412: result: $cf_cv_posix_c_source" >&5 echo "${ECHO_T}$cf_cv_posix_c_source" >&6 if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_cv_posix_c_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi ;; esac if test -n "$cf_xopen_source" ; then cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_xopen_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 echo "${as_me:-configure}:10570: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6 echo "${as_me:-configure}:10578: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6 echo "${as_me:-configure}:10586: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then echo "$as_me:10594: checking if _XOPEN_SOURCE really is set" >&5 echo $ECHO_N "checking if _XOPEN_SOURCE really is set... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 10597 "configure" #include "confdefs.h" #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10612: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10615: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10618: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10621: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_XOPEN_SOURCE_set=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_XOPEN_SOURCE_set=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:10630: result: $cf_XOPEN_SOURCE_set" >&5 echo "${ECHO_T}$cf_XOPEN_SOURCE_set" >&6 if test $cf_XOPEN_SOURCE_set = yes then cat >conftest.$ac_ext <<_ACEOF #line 10635 "configure" #include "confdefs.h" #include int main () { #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10650: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10653: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10656: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10659: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_XOPEN_SOURCE_set_ok=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_XOPEN_SOURCE_set_ok=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test $cf_XOPEN_SOURCE_set_ok = no then { echo "$as_me:10670: WARNING: _XOPEN_SOURCE is lower than requested" >&5 echo "$as_me: WARNING: _XOPEN_SOURCE is lower than requested" >&2;} fi else echo "$as_me:10675: checking if we should define _XOPEN_SOURCE" >&5 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 if test "${cf_cv_xopen_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 10682 "configure" #include "confdefs.h" #include #include #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10701: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10704: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10707: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10710: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" cat >conftest.$ac_ext <<_ACEOF #line 10719 "configure" #include "confdefs.h" #include #include #include int main () { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10738: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10741: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10744: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10747: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:10762: result: $cf_cv_xopen_source" >&5 echo "${ECHO_T}$cf_cv_xopen_source" >&6 if test "$cf_cv_xopen_source" != no ; then CFLAGS=`echo "$CFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_temp_xopen_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi fi fi # Check whether --enable-largefile or --disable-largefile was given. if test "${enable_largefile+set}" = set; then enableval="$enable_largefile" fi; if test "$enable_largefile" != no; then echo "$as_me:10867: checking for special C compiler options needed for large files" >&5 echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_largefile_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat >conftest.$ac_ext <<_ACEOF #line 10879 "configure" #include "confdefs.h" #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10899: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10902: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10905: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10908: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext CC="$CC -n32" rm -f conftest.$ac_objext if { (eval echo "$as_me:10918: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10921: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10924: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10927: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_largefile_CC=' -n32'; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi echo "$as_me:10941: result: $ac_cv_sys_largefile_CC" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6 if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi echo "$as_me:10947: checking for _FILE_OFFSET_BITS value needed for large files" >&5 echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_file_offset_bits+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_file_offset_bits=no cat >conftest.$ac_ext <<_ACEOF #line 10955 "configure" #include "confdefs.h" #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10975: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10978: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10981: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10984: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 10993 "configure" #include "confdefs.h" #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:11014: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:11017: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:11020: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11023: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_file_offset_bits=64; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi echo "$as_me:11034: result: $ac_cv_sys_file_offset_bits" >&5 echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6 if test "$ac_cv_sys_file_offset_bits" != no; then cat >>confdefs.h <&5 echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_large_files+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_large_files=no cat >conftest.$ac_ext <<_ACEOF #line 11052 "configure" #include "confdefs.h" #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:11072: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:11075: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:11078: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11081: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 11090 "configure" #include "confdefs.h" #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:11111: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:11114: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:11117: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11120: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_large_files=1; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi echo "$as_me:11131: result: $ac_cv_sys_large_files" >&5 echo "${ECHO_T}$ac_cv_sys_large_files" >&6 if test "$ac_cv_sys_large_files" != no; then cat >>confdefs.h <&5 echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_largefile_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_largefile_source=no cat >conftest.$ac_ext <<_ACEOF #line 11152 "configure" #include "confdefs.h" #include int main () { return !fseeko; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:11164: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:11167: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:11170: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11173: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 11182 "configure" #include "confdefs.h" #define _LARGEFILE_SOURCE 1 #include int main () { return !fseeko; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:11195: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:11198: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:11201: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11204: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_largefile_source=1; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi echo "$as_me:11215: result: $ac_cv_sys_largefile_source" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6 if test "$ac_cv_sys_largefile_source" != no; then cat >>confdefs.h <&5 echo $ECHO_N "checking for fseeko... $ECHO_C" >&6 if test "${ac_cv_func_fseeko+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 11235 "configure" #include "confdefs.h" #include int main () { return fseeko && fseeko (stdin, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:11247: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:11250: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:11253: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11256: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_fseeko=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_fseeko=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:11266: result: $ac_cv_func_fseeko" >&5 echo "${ECHO_T}$ac_cv_func_fseeko" >&6 if test $ac_cv_func_fseeko = yes; then cat >>confdefs.h <<\EOF #define HAVE_FSEEKO 1 EOF fi # Normally we would collect these definitions in the config.h, # but (like _XOPEN_SOURCE), some environments rely on having these # defined before any of the system headers are included. Another # case comes up with C++, e.g., on AIX the compiler compiles the # header files by themselves before looking at the body files it is # told to compile. For ncurses, those header files do not include # the config.h test "$ac_cv_sys_large_files" != no && CPPFLAGS="$CPPFLAGS -D_LARGE_FILES " test "$ac_cv_sys_largefile_source" != no && CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE " test "$ac_cv_sys_file_offset_bits" != no && CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits " echo "$as_me:11287: checking whether to use struct dirent64" >&5 echo $ECHO_N "checking whether to use struct dirent64... $ECHO_C" >&6 if test "${cf_cv_struct_dirent64+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 11294 "configure" #include "confdefs.h" #include #include int main () { /* if transitional largefile support is setup, this is true */ extern struct dirent64 * readdir(DIR *); struct dirent64 *x = readdir((DIR *)0); struct dirent *y = readdir((DIR *)0); int z = x - y; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:11315: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:11318: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:11321: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11324: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_struct_dirent64=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_struct_dirent64=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:11335: result: $cf_cv_struct_dirent64" >&5 echo "${ECHO_T}$cf_cv_struct_dirent64" >&6 test "$cf_cv_struct_dirent64" = yes && cat >>confdefs.h <<\EOF #define HAVE_STRUCT_DIRENT64 1 EOF fi ### Enable compiling-in rcs id's echo "$as_me:11345: checking if RCS identifiers should be compiled-in" >&5 echo $ECHO_N "checking if RCS identifiers should be compiled-in... $ECHO_C" >&6 # Check whether --with-rcs-ids or --without-rcs-ids was given. if test "${with_rcs_ids+set}" = set; then withval="$with_rcs_ids" with_rcs_ids=$withval else with_rcs_ids=no fi; echo "$as_me:11355: result: $with_rcs_ids" >&5 echo "${ECHO_T}$with_rcs_ids" >&6 test "$with_rcs_ids" = yes && cat >>confdefs.h <<\EOF #define USE_RCS_IDS 1 EOF ############################################################################### ### Note that some functions (such as const) are normally disabled anyway. echo "$as_me:11365: checking if you want to build with function extensions" >&5 echo $ECHO_N "checking if you want to build with function extensions... $ECHO_C" >&6 # Check whether --enable-ext-funcs or --disable-ext-funcs was given. if test "${enable_ext_funcs+set}" = set; then enableval="$enable_ext_funcs" with_ext_funcs=$enableval else with_ext_funcs=yes fi; echo "$as_me:11375: result: $with_ext_funcs" >&5 echo "${ECHO_T}$with_ext_funcs" >&6 if test "$with_ext_funcs" = yes ; then NCURSES_EXT_FUNCS=1 cat >>confdefs.h <<\EOF #define HAVE_USE_DEFAULT_COLORS 1 EOF cat >>confdefs.h <<\EOF #define NCURSES_EXT_FUNCS 1 EOF else NCURSES_EXT_FUNCS=0 fi ### use option --enable-const to turn on use of const beyond that in XSI. echo "$as_me:11393: checking for extended use of const keyword" >&5 echo $ECHO_N "checking for extended use of const keyword... $ECHO_C" >&6 # Check whether --enable-const or --disable-const was given. if test "${enable_const+set}" = set; then enableval="$enable_const" with_ext_const=$enableval else with_ext_const=no fi; echo "$as_me:11403: result: $with_ext_const" >&5 echo "${ECHO_T}$with_ext_const" >&6 NCURSES_CONST='/*nothing*/' if test "$with_ext_const" = yes ; then NCURSES_CONST=const fi ############################################################################### # These options are relatively safe to experiment with. echo "$as_me:11413: checking if you want all development code" >&5 echo $ECHO_N "checking if you want all development code... $ECHO_C" >&6 # Check whether --with-develop or --without-develop was given. if test "${with_develop+set}" = set; then withval="$with_develop" with_develop=$withval else with_develop=no fi; echo "$as_me:11423: result: $with_develop" >&5 echo "${ECHO_T}$with_develop" >&6 ############################################################################### # These are just experimental, probably should not be in a package: # This is still experimental (20080329), but should ultimately be moved to # the script-block --with-normal, etc. echo "$as_me:11432: checking if you want to link with the pthread library" >&5 echo $ECHO_N "checking if you want to link with the pthread library... $ECHO_C" >&6 # Check whether --with-pthread or --without-pthread was given. if test "${with_pthread+set}" = set; then withval="$with_pthread" with_pthread=$withval else with_pthread=no fi; echo "$as_me:11442: result: $with_pthread" >&5 echo "${ECHO_T}$with_pthread" >&6 if test "$with_pthread" != no ; then echo "$as_me:11446: checking for pthread.h" >&5 echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6 if test "${ac_cv_header_pthread_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 11452 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:11456: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:11462: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_pthread_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_pthread_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:11481: result: $ac_cv_header_pthread_h" >&5 echo "${ECHO_T}$ac_cv_header_pthread_h" >&6 if test $ac_cv_header_pthread_h = yes; then cat >>confdefs.h <<\EOF #define HAVE_PTHREADS_H 1 EOF for cf_lib_pthread in pthread c_r do echo "$as_me:11491: checking if we can link with the $cf_lib_pthread library" >&5 echo $ECHO_N "checking if we can link with the $cf_lib_pthread library... $ECHO_C" >&6 cf_save_LIBS="$LIBS" cf_add_libs="-l$cf_lib_pthread" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 11512 "configure" #include "confdefs.h" #include int main () { int rc = pthread_create(0,0,0,0); int r2 = pthread_mutexattr_settype(0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:11529: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:11532: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:11535: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11538: \$? = $ac_status" >&5 (exit $ac_status); }; }; then with_pthread=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 with_pthread=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save_LIBS" echo "$as_me:11548: result: $with_pthread" >&5 echo "${ECHO_T}$with_pthread" >&6 test "$with_pthread" = yes && break done if test "$with_pthread" = yes ; then cf_add_libs="-l$cf_lib_pthread" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >>confdefs.h <<\EOF #define HAVE_LIBPTHREADS 1 EOF else { { echo "$as_me:11576: error: Cannot link with pthread library" >&5 echo "$as_me: error: Cannot link with pthread library" >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:11585: checking if you want to use weak-symbols for pthreads" >&5 echo $ECHO_N "checking if you want to use weak-symbols for pthreads... $ECHO_C" >&6 # Check whether --enable-weak-symbols or --disable-weak-symbols was given. if test "${enable_weak_symbols+set}" = set; then enableval="$enable_weak_symbols" use_weak_symbols=$withval else use_weak_symbols=no fi; echo "$as_me:11595: result: $use_weak_symbols" >&5 echo "${ECHO_T}$use_weak_symbols" >&6 if test "$use_weak_symbols" = yes ; then echo "$as_me:11599: checking if $CC supports weak symbols" >&5 echo $ECHO_N "checking if $CC supports weak symbols... $ECHO_C" >&6 if test "${cf_cv_weak_symbols+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 11606 "configure" #include "confdefs.h" #include int main () { #if defined(__GNUC__) # if defined __USE_ISOC99 # define _cat_pragma(exp) _Pragma(#exp) # define _weak_pragma(exp) _cat_pragma(weak name) # else # define _weak_pragma(exp) # endif # define _declare(name) __extension__ extern __typeof__(name) name # define weak_symbol(name) _weak_pragma(name) _declare(name) __attribute__((weak)) #endif weak_symbol(fopen); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:11632: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:11635: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:11638: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11641: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_weak_symbols=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_weak_symbols=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:11652: result: $cf_cv_weak_symbols" >&5 echo "${ECHO_T}$cf_cv_weak_symbols" >&6 else cf_cv_weak_symbols=no fi if test $cf_cv_weak_symbols = yes ; then cat >>confdefs.h <<\EOF #define USE_WEAK_SYMBOLS 1 EOF fi PTHREAD= if test "$with_pthread" = "yes" ; then cat >>confdefs.h <<\EOF #define USE_PTHREADS 1 EOF enable_reentrant=yes if test $cf_cv_weak_symbols = yes ; then PTHREAD=-lpthread fi fi # OpenSUSE is installing ncurses6, using reentrant option. echo "$as_me:11681: checking for _nc_TABSIZE" >&5 echo $ECHO_N "checking for _nc_TABSIZE... $ECHO_C" >&6 if test "${ac_cv_func__nc_TABSIZE+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 11687 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char _nc_TABSIZE (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char _nc_TABSIZE (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub__nc_TABSIZE) || defined (__stub____nc_TABSIZE) choke me #else f = _nc_TABSIZE; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:11718: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:11721: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:11724: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11727: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func__nc_TABSIZE=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func__nc_TABSIZE=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:11737: result: $ac_cv_func__nc_TABSIZE" >&5 echo "${ECHO_T}$ac_cv_func__nc_TABSIZE" >&6 if test $ac_cv_func__nc_TABSIZE = yes; then assume_reentrant=yes else assume_reentrant=no fi # Reentrant code has to be opaque; there's little advantage to making ncurses # opaque outside of that, so there is no --enable-opaque option. We can use # this option without --with-pthreads, but this will be always set for # pthreads. echo "$as_me:11749: checking if you want experimental reentrant code" >&5 echo $ECHO_N "checking if you want experimental reentrant code... $ECHO_C" >&6 # Check whether --enable-reentrant or --disable-reentrant was given. if test "${enable_reentrant+set}" = set; then enableval="$enable_reentrant" with_reentrant=$enableval else with_reentrant=$assume_reentrant fi; echo "$as_me:11759: result: $with_reentrant" >&5 echo "${ECHO_T}$with_reentrant" >&6 if test "$with_reentrant" = yes ; then cf_cv_enable_reentrant=1 if test $cf_cv_weak_symbols = yes ; then # remove pthread library from $LIBS LIBS=`echo "$LIBS" | sed -e 's/-lpthread[ ]//g' -e 's/-lpthread$//'` elif test "$assume_reentrant" = no ; then LIB_SUFFIX="t${LIB_SUFFIX}" fi cat >>confdefs.h <<\EOF #define USE_REENTRANT 1 EOF else cf_cv_enable_reentrant=0 fi ### Allow using a different wrap-prefix if test "$cf_cv_enable_reentrant" != 0 || test "$BROKEN_LINKER" = 1 ; then echo "$as_me:11782: checking for prefix used to wrap public variables" >&5 echo $ECHO_N "checking for prefix used to wrap public variables... $ECHO_C" >&6 # Check whether --with-wrap-prefix or --without-wrap-prefix was given. if test "${with_wrap_prefix+set}" = set; then withval="$with_wrap_prefix" NCURSES_WRAP_PREFIX=$withval else NCURSES_WRAP_PREFIX=_nc_ fi; echo "$as_me:11792: result: $NCURSES_WRAP_PREFIX" >&5 echo "${ECHO_T}$NCURSES_WRAP_PREFIX" >&6 else NCURSES_WRAP_PREFIX=_nc_ fi cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6 # Check whether --enable-echo or --disable-echo was given. if test "${enable_echo+set}" = set; then enableval="$enable_echo" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then ECHO_LT='--silent' ECHO_LD='@echo linking $@;' RULE_CC='@echo compiling $<' SHOW_CC='@echo compiling $@' ECHO_CC='@' else ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' fi else enableval=yes ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' fi; echo "$as_me:11840: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 ### use option --enable-warnings to turn on all gcc warnings echo "$as_me:11844: checking if you want to see compiler warnings" >&5 echo $ECHO_N "checking if you want to see compiler warnings... $ECHO_C" >&6 # Check whether --enable-warnings or --disable-warnings was given. if test "${enable_warnings+set}" = set; then enableval="$enable_warnings" with_warnings=$enableval fi; echo "$as_me:11852: result: $with_warnings" >&5 echo "${ECHO_T}$with_warnings" >&6 if test "x$with_warnings" = "xyes"; then ADAFLAGS="$ADAFLAGS -gnatg" INTEL_COMPILER=no if test "$GCC" = yes ; then case $host_os in (linux*|gnu*) echo "$as_me:11864: checking if this is really Intel C compiler" >&5 echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -no-gcc" cat >conftest.$ac_ext <<_ACEOF #line 11869 "configure" #include "confdefs.h" int main () { #ifdef __INTEL_COMPILER #else make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:11886: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:11889: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:11892: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11895: \$? = $ac_status" >&5 (exit $ac_status); }; }; then INTEL_COMPILER=yes cf_save_CFLAGS="$cf_save_CFLAGS -we147" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" echo "$as_me:11906: result: $INTEL_COMPILER" >&5 echo "${ECHO_T}$INTEL_COMPILER" >&6 ;; esac fi CLANG_COMPILER=no if test "$GCC" = yes ; then echo "$as_me:11915: checking if this is really Clang C compiler" >&5 echo $ECHO_N "checking if this is really Clang C compiler... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Qunused-arguments" cat >conftest.$ac_ext <<_ACEOF #line 11920 "configure" #include "confdefs.h" int main () { #ifdef __clang__ #else make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:11937: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:11940: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:11943: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11946: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CLANG_COMPILER=yes cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" echo "$as_me:11957: result: $CLANG_COMPILER" >&5 echo "${ECHO_T}$CLANG_COMPILER" >&6 fi cat > conftest.$ac_ext <&5 echo "$as_me: checking for $CC warning options..." >&6;} cf_save_CFLAGS="$CFLAGS" EXTRA_CFLAGS="-Wall" for cf_opt in \ wd1419 \ wd1683 \ wd1684 \ wd193 \ wd593 \ wd279 \ wd810 \ wd869 \ wd981 do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" if { (eval echo "$as_me:11995: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:11998: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:12000: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" fi done CFLAGS="$cf_save_CFLAGS" elif test "$GCC" = yes then { echo "$as_me:12009: checking for $CC warning options..." >&5 echo "$as_me: checking for $CC warning options..." >&6;} cf_save_CFLAGS="$CFLAGS" EXTRA_CFLAGS= cf_warn_CONST="" test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings" cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs" test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings= for cf_opt in W Wall \ Wbad-function-cast \ Wcast-align \ Wcast-qual \ Wdeclaration-after-statement \ Wextra \ Winline \ Wmissing-declarations \ Wmissing-prototypes \ Wnested-externs \ Wpointer-arith \ Wshadow \ Wstrict-prototypes \ Wundef $cf_gcc_warnings $cf_warn_CONST Wno-unknown-pragmas Wswitch-enum do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" if { (eval echo "$as_me:12033: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12036: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:12038: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 case $cf_opt in (Wcast-qual) CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES" ;; (Winline) case $GCC_VERSION in ([34].*) test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 echo "${as_me:-configure}:12049: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 continue;; esac ;; (Wpointer-arith) case $GCC_VERSION in ([12].*) test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 echo "${as_me:-configure}:12059: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 continue;; esac ;; esac EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" fi done CFLAGS="$cf_save_CFLAGS" fi rm -rf conftest* fi if test "$GCC" = yes then cat > conftest.i <&5 echo "$as_me: checking for $CC __attribute__ directives..." >&6;} cat > conftest.$ac_ext <&5 case $cf_attribute in (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12147: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:12149: result: ... $cf_attribute" >&5 echo "${ECHO_T}... $cf_attribute" >&6 cat conftest.h >>confdefs.h case $cf_attribute in (noreturn) cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_PRINTF 1 EOF fi cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_SCANF 1 EOF fi cat >>confdefs.h <>confdefs.h <>confdefs.h fi rm -rf conftest* fi ### use option --enable-assertions to turn on generation of assertion code echo "$as_me:12209: checking if you want to enable runtime assertions" >&5 echo $ECHO_N "checking if you want to enable runtime assertions... $ECHO_C" >&6 # Check whether --enable-assertions or --disable-assertions was given. if test "${enable_assertions+set}" = set; then enableval="$enable_assertions" with_assertions=$enableval else with_assertions=no fi; echo "$as_me:12219: result: $with_assertions" >&5 echo "${ECHO_T}$with_assertions" >&6 if test -n "$GCC" then if test "$with_assertions" = no then CPPFLAGS="$CPPFLAGS -DNDEBUG" else ADAFLAGS="$ADAFLAGS -gnata" fi fi ### use option --disable-leaks to suppress "permanent" leaks, for testing cat >>confdefs.h <<\EOF #define HAVE_NC_ALLOC_H 1 EOF ### use option --enable-expanded to generate certain macros as functions # Check whether --enable-expanded or --disable-expanded was given. if test "${enable_expanded+set}" = set; then enableval="$enable_expanded" test "$enableval" = yes && cat >>confdefs.h <<\EOF #define NCURSES_EXPANDED 1 EOF fi; ### use option --disable-macros to suppress macros in favor of functions # Check whether --enable-macros or --disable-macros was given. if test "${enable_macros+set}" = set; then enableval="$enable_macros" test "$enableval" = no && cat >>confdefs.h <<\EOF #define NCURSES_NOMACROS 1 EOF fi; # Normally we only add trace() to the debug-library. Allow this to be # extended to all models of the ncurses library: cf_all_traces=no case "$CFLAGS $CPPFLAGS" in (*-DTRACE*) cf_all_traces=yes ;; esac echo "$as_me:12272: checking whether to add trace feature to all models" >&5 echo $ECHO_N "checking whether to add trace feature to all models... $ECHO_C" >&6 # Check whether --with-trace or --without-trace was given. if test "${with_trace+set}" = set; then withval="$with_trace" cf_with_trace=$withval else cf_with_trace=$cf_all_traces fi; echo "$as_me:12282: result: $cf_with_trace" >&5 echo "${ECHO_T}$cf_with_trace" >&6 if test "$cf_with_trace" = yes ; then ADA_TRACE=TRUE cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -DTRACE do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi else ADA_TRACE=FALSE fi echo "$as_me:12370: checking if we want to use GNAT projects" >&5 echo $ECHO_N "checking if we want to use GNAT projects... $ECHO_C" >&6 # Check whether --enable-gnat-projects or --disable-gnat-projects was given. if test "${enable_gnat_projects+set}" = set; then enableval="$enable_gnat_projects" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then enable_gnat_projects=no else enable_gnat_projects=yes fi else enableval=yes enable_gnat_projects=yes fi; echo "$as_me:12387: result: $enable_gnat_projects" >&5 echo "${ECHO_T}$enable_gnat_projects" >&6 ### Checks for libraries. case $cf_cv_system_name in (*mingw32*) ;; (*) echo "$as_me:12395: checking for gettimeofday" >&5 echo $ECHO_N "checking for gettimeofday... $ECHO_C" >&6 if test "${ac_cv_func_gettimeofday+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12401 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gettimeofday (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gettimeofday (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gettimeofday) || defined (__stub___gettimeofday) choke me #else f = gettimeofday; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12432: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12435: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12438: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12441: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gettimeofday=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_gettimeofday=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:12451: result: $ac_cv_func_gettimeofday" >&5 echo "${ECHO_T}$ac_cv_func_gettimeofday" >&6 if test $ac_cv_func_gettimeofday = yes; then cat >>confdefs.h <<\EOF #define HAVE_GETTIMEOFDAY 1 EOF else echo "$as_me:12460: checking for gettimeofday in -lbsd" >&5 echo $ECHO_N "checking for gettimeofday in -lbsd... $ECHO_C" >&6 if test "${ac_cv_lib_bsd_gettimeofday+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 12468 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gettimeofday (); int main () { gettimeofday (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12487: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12490: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12493: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12496: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bsd_gettimeofday=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_bsd_gettimeofday=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:12507: result: $ac_cv_lib_bsd_gettimeofday" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_gettimeofday" >&6 if test $ac_cv_lib_bsd_gettimeofday = yes; then cat >>confdefs.h <<\EOF #define HAVE_GETTIMEOFDAY 1 EOF LIBS="$LIBS -lbsd" fi fi ;; esac ### Checks for header files. echo "$as_me:12523: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12529 "configure" #include "confdefs.h" #include #include #include #include _ACEOF if { (eval echo "$as_me:12537: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:12543: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 12565 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 12583 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line 12604 "configure" #include "confdefs.h" #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) $ac_main_return(2); $ac_main_return (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:12630: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12633: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:12635: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12638: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:12651: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:12667: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12673 "configure" #include "confdefs.h" $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12679: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12682: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12685: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12688: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:12698: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for signed char... $ECHO_C" >&6 if test "${ac_cv_type_signed_char+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12714 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((signed char *) 0) return 0; if (sizeof (signed char)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12729: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12732: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12735: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12738: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_signed_char=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_signed_char=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:12748: result: $ac_cv_type_signed_char" >&5 echo "${ECHO_T}$ac_cv_type_signed_char" >&6 echo "$as_me:12751: checking size of signed char" >&5 echo $ECHO_N "checking size of signed char... $ECHO_C" >&6 if test "${ac_cv_sizeof_signed_char+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_signed_char" = yes; then if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF #line 12760 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (signed char)) >= 0)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12772: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12775: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12778: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12781: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF #line 12786 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (signed char)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12798: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12801: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12804: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12807: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF #line 12823 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (signed char)) >= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12835: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12838: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12841: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12844: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF #line 12860 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (signed char)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12872: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12875: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12878: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12881: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done ac_cv_sizeof_signed_char=$ac_lo else if test "$cross_compiling" = yes; then { { echo "$as_me:12894: error: cannot run test program while cross compiling" >&5 echo "$as_me: error: cannot run test program while cross compiling" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #line 12899 "configure" #include "confdefs.h" $ac_includes_default int main () { FILE *f = fopen ("conftest.val", "w"); if (!f) $ac_main_return (1); fprintf (f, "%d", (sizeof (signed char))); fclose (f); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:12915: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12918: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:12920: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12923: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_signed_char=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_signed_char=0 fi fi echo "$as_me:12939: result: $ac_cv_sizeof_signed_char" >&5 echo "${ECHO_T}$ac_cv_sizeof_signed_char" >&6 cat >>confdefs.h <&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12951 "configure" #include "confdefs.h" #include #include #include #include _ACEOF if { (eval echo "$as_me:12959: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:12965: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 12987 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 13005 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line 13026 "configure" #include "confdefs.h" #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) $ac_main_return(2); $ac_main_return (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:13052: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13055: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:13057: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13060: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:13073: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` echo "$as_me:13086: checking for $ac_hdr that defines DIR" >&5 echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13092 "configure" #include "confdefs.h" #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13107: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13110: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13113: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13116: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:13126: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6 if test "${ac_cv_lib_dir_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldir $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 13147 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13166: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13169: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13172: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13175: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dir_opendir=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dir_opendir=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:13186: result: $ac_cv_lib_dir_opendir" >&5 echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6 if test $ac_cv_lib_dir_opendir = yes; then LIBS="$LIBS -ldir" fi else echo "$as_me:13193: checking for opendir in -lx" >&5 echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6 if test "${ac_cv_lib_x_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lx $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 13201 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13220: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13223: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13226: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13229: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_x_opendir=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_x_opendir=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:13240: result: $ac_cv_lib_x_opendir" >&5 echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6 if test $ac_cv_lib_x_opendir = yes; then LIBS="$LIBS -lx" fi fi echo "$as_me:13248: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13254 "configure" #include "confdefs.h" #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13270: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13273: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13276: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13279: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:13289: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6 if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\EOF #define TIME_WITH_SYS_TIME 1 EOF fi ### checks for compiler characteristics ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return echo "$as_me:13307: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13313 "configure" #include "confdefs.h" int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13371: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13374: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13377: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13380: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:13390: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\EOF #define const EOF fi ### Checks for external-data echo "$as_me:13402: checking if data-only library module links" >&5 echo $ECHO_N "checking if data-only library module links... $ECHO_C" >&6 if test "${cf_cv_link_dataonly+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f conftest.a cat >conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13416: \$? = $ac_status" >&5 (exit $ac_status); } ; then mv conftest.o data.o && \ ( $AR $ARFLAGS conftest.a data.o ) 2>&5 1>/dev/null fi rm -f conftest.$ac_ext data.o cat >conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13439: \$? = $ac_status" >&5 (exit $ac_status); }; then mv conftest.o func.o && \ ( $AR $ARFLAGS conftest.a func.o ) 2>&5 1>/dev/null fi rm -f conftest.$ac_ext func.o ( eval $RANLIB conftest.a ) 2>&5 >/dev/null cf_saveLIBS="$LIBS" LIBS="conftest.a $LIBS" if test "$cross_compiling" = yes; then cf_cv_link_dataonly=unknown else cat >conftest.$ac_ext <<_ACEOF #line 13452 "configure" #include "confdefs.h" int main() { extern int testfunc(); ${cf_cv_main_return:-return} (!testfunc()); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:13463: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13466: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:13468: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13471: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_link_dataonly=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_link_dataonly=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi LIBS="$cf_saveLIBS" fi echo "$as_me:13486: result: $cf_cv_link_dataonly" >&5 echo "${ECHO_T}$cf_cv_link_dataonly" >&6 if test "$cf_cv_link_dataonly" = no ; then cat >>confdefs.h <<\EOF #define BROKEN_LINKER 1 EOF BROKEN_LINKER=1 fi ### Checks for library functions. echo "$as_me:13500: checking for working mkstemp" >&5 echo $ECHO_N "checking for working mkstemp... $ECHO_C" >&6 if test "${cf_cv_func_mkstemp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -rf conftest* if test "$cross_compiling" = yes; then cf_cv_func_mkstemp=maybe else cat >conftest.$ac_ext <<_ACEOF #line 13511 "configure" #include "confdefs.h" #include #include #include #include #include int main() { char *tmpl = "conftestXXXXXX"; char name[2][80]; int n; int result = 0; int fd; struct stat sb; umask(077); for (n = 0; n < 2; ++n) { strcpy(name[n], tmpl); if ((fd = mkstemp(name[n])) >= 0) { if (!strcmp(name[n], tmpl) || stat(name[n], &sb) != 0 || (sb.st_mode & S_IFMT) != S_IFREG || (sb.st_mode & 077) != 0) { result = 1; } close(fd); } } if (result == 0 && !strcmp(name[0], name[1])) result = 1; ${cf_cv_main_return:-return}(result); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:13549: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13552: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:13554: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13557: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_func_mkstemp=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_func_mkstemp=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:13572: result: $cf_cv_func_mkstemp" >&5 echo "${ECHO_T}$cf_cv_func_mkstemp" >&6 if test "x$cf_cv_func_mkstemp" = xmaybe ; then echo "$as_me:13575: checking for mkstemp" >&5 echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6 if test "${ac_cv_func_mkstemp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13581 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char mkstemp (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char mkstemp (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_mkstemp) || defined (__stub___mkstemp) choke me #else f = mkstemp; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13612: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13615: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13618: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13621: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_mkstemp=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_mkstemp=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:13631: result: $ac_cv_func_mkstemp" >&5 echo "${ECHO_T}$ac_cv_func_mkstemp" >&6 fi if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then cat >>confdefs.h <<\EOF #define HAVE_MKSTEMP 1 EOF fi if test -z "$cf_user_CFLAGS" && test "$with_no_leaks" = no ; then CFLAGS=`echo ${CFLAGS} | sed -e 's%-g %%' -e 's%-g$%%'` CXXFLAGS=`echo ${CXXFLAGS} | sed -e 's%-g %%' -e 's%-g$%%'` fi cf_with_ada=yes if test "$cf_with_ada" != "no" ; then cf_ada_make=gnatmake # Extract the first word of "$cf_ada_make", so it can be a program name with args. set dummy $cf_ada_make; ac_word=$2 echo "$as_me:13654: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_gnat_exists+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$gnat_exists"; then ac_cv_prog_gnat_exists="$gnat_exists" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_gnat_exists="yes" echo "$as_me:13669: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_gnat_exists" && ac_cv_prog_gnat_exists="no" fi fi gnat_exists=$ac_cv_prog_gnat_exists if test -n "$gnat_exists"; then echo "$as_me:13678: result: $gnat_exists" >&5 echo "${ECHO_T}$gnat_exists" >&6 else echo "$as_me:13681: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$ac_cv_prog_gnat_exists" = no; then cf_ada_make= cf_cv_prog_gnat_correct=no else echo "$as_me:13690: checking for gnat version" >&5 echo $ECHO_N "checking for gnat version... $ECHO_C" >&6 cf_gnat_version=`${cf_ada_make:-gnatmake} -v 2>&1 | \ grep '[0-9].[0-9][0-9]*' |\ sed -e '2,$d' -e 's/[^0-9 \.]//g' -e 's/^[ ]*//' -e 's/ .*//'` echo "$as_me:13695: result: $cf_gnat_version" >&5 echo "${ECHO_T}$cf_gnat_version" >&6 case $cf_gnat_version in (3.1[1-9]*|3.[2-9]*|[4-9].*|20[0-9][0-9]) cf_cv_prog_gnat_correct=yes ;; (*) { echo "$as_me:13703: WARNING: Unsupported GNAT version $cf_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&5 echo "$as_me: WARNING: Unsupported GNAT version $cf_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&2;} cf_cv_prog_gnat_correct=no ;; esac # Extract the first word of "m4", so it can be a program name with args. set dummy m4; ac_word=$2 echo "$as_me:13711: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_M4_exists+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$M4_exists"; then ac_cv_prog_M4_exists="$M4_exists" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_M4_exists="yes" echo "$as_me:13726: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_M4_exists" && ac_cv_prog_M4_exists="no" fi fi M4_exists=$ac_cv_prog_M4_exists if test -n "$M4_exists"; then echo "$as_me:13735: result: $M4_exists" >&5 echo "${ECHO_T}$M4_exists" >&6 else echo "$as_me:13738: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$ac_cv_prog_M4_exists" = no; then cf_cv_prog_gnat_correct=no echo Ada95 binding required program m4 not found. Ada95 binding disabled. fi if test "$cf_cv_prog_gnat_correct" = yes; then echo "$as_me:13747: checking if GNAT works" >&5 echo $ECHO_N "checking if GNAT works... $ECHO_C" >&6 rm -rf conftest* *~conftest* cat >>conftest.ads <>conftest.adb <&5 2>&1 ) ; then if ( ./conftest 1>&5 2>&1 ) ; then cf_cv_prog_gnat_correct=yes else cf_cv_prog_gnat_correct=no fi else cf_cv_prog_gnat_correct=no fi rm -rf conftest* *~conftest* echo "$as_me:13775: result: $cf_cv_prog_gnat_correct" >&5 echo "${ECHO_T}$cf_cv_prog_gnat_correct" >&6 fi fi if test "$cf_cv_prog_gnat_correct" = yes; then echo "$as_me:13782: checking optimization options for ADAFLAGS" >&5 echo $ECHO_N "checking optimization options for ADAFLAGS... $ECHO_C" >&6 case "$CFLAGS" in (*-g*) ADAFLAGS="$ADAFLAGS -g" ;; esac case "$CFLAGS" in (*-O*) cf_O_flag=`echo "$CFLAGS" |sed -e 's/^.*-O/-O/' -e 's/[ ].*//'` ADAFLAGS="$ADAFLAGS $cf_O_flag" ;; esac echo "$as_me:13799: result: $ADAFLAGS" >&5 echo "${ECHO_T}$ADAFLAGS" >&6 echo "$as_me:13802: checking if GNATPREP supports -T option" >&5 echo $ECHO_N "checking if GNATPREP supports -T option... $ECHO_C" >&6 if test "${cf_cv_gnatprep_opt_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_gnatprep_opt_t=no gnatprep -T 2>/dev/null >/dev/null && cf_cv_gnatprep_opt_t=yes fi echo "$as_me:13812: result: $cf_cv_gnatprep_opt_t" >&5 echo "${ECHO_T}$cf_cv_gnatprep_opt_t" >&6 test "$cf_cv_gnatprep_opt_t" = yes && GNATPREP_OPTS="-T $GNATPREP_OPTS" echo "$as_me:13816: checking if GNAT supports generics" >&5 echo $ECHO_N "checking if GNAT supports generics... $ECHO_C" >&6 case $cf_gnat_version in (3.[1-9]*|[4-9].*) cf_gnat_generics=yes ;; (*) cf_gnat_generics=no ;; esac echo "$as_me:13826: result: $cf_gnat_generics" >&5 echo "${ECHO_T}$cf_gnat_generics" >&6 if test "$cf_gnat_generics" = yes then cf_compile_generics=generics cf_generic_objects="\${GENOBJS}" else cf_compile_generics= cf_generic_objects= fi echo "$as_me:13838: checking if GNAT supports SIGINT" >&5 echo $ECHO_N "checking if GNAT supports SIGINT... $ECHO_C" >&6 if test "${cf_cv_gnat_sigint+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -rf conftest* *~conftest* cat >>conftest.ads <>conftest.adb <&5 2>&1 ) ; then cf_cv_gnat_sigint=yes else cf_cv_gnat_sigint=no fi rm -rf conftest* *~conftest* fi echo "$as_me:13886: result: $cf_cv_gnat_sigint" >&5 echo "${ECHO_T}$cf_cv_gnat_sigint" >&6 if test $cf_cv_gnat_sigint = yes ; then USE_GNAT_SIGINT="" else USE_GNAT_SIGINT="#" fi cf_gnat_libraries=no cf_gnat_projects=no if test "$enable_gnat_projects" != no ; then echo "$as_me:13899: checking if GNAT supports project files" >&5 echo $ECHO_N "checking if GNAT supports project files... $ECHO_C" >&6 case $cf_gnat_version in (3.[0-9]*) ;; (*) case $cf_cv_system_name in (cygwin*|msys*) ;; (*) mkdir conftest.src conftest.bin conftest.lib cd conftest.src rm -rf conftest* *~conftest* cat >>library.gpr <>confpackage.ads <>confpackage.adb <&5 2>&1 ) ; then cf_gnat_projects=yes fi cd .. if test -f conftest.lib/confpackage.ali then cf_gnat_libraries=yes fi rm -rf conftest* *~conftest* ;; esac ;; esac echo "$as_me:13959: result: $cf_gnat_projects" >&5 echo "${ECHO_T}$cf_gnat_projects" >&6 fi # enable_gnat_projects if test $cf_gnat_projects = yes then echo "$as_me:13965: checking if GNAT supports libraries" >&5 echo $ECHO_N "checking if GNAT supports libraries... $ECHO_C" >&6 echo "$as_me:13967: result: $cf_gnat_libraries" >&5 echo "${ECHO_T}$cf_gnat_libraries" >&6 fi if test "$cf_gnat_projects" = yes then USE_OLD_MAKERULES="#" USE_GNAT_PROJECTS="" else USE_OLD_MAKERULES="" USE_GNAT_PROJECTS="#" fi if test "$cf_gnat_libraries" = yes then USE_GNAT_LIBRARIES="" else USE_GNAT_LIBRARIES="#" fi echo "$as_me:13987: checking for ada-compiler" >&5 echo $ECHO_N "checking for ada-compiler... $ECHO_C" >&6 # Check whether --with-ada-compiler or --without-ada-compiler was given. if test "${with_ada_compiler+set}" = set; then withval="$with_ada_compiler" cf_ada_compiler=$withval else cf_ada_compiler=gnatmake fi; echo "$as_me:13998: result: $cf_ada_compiler" >&5 echo "${ECHO_T}$cf_ada_compiler" >&6 cf_ada_package=terminal_interface echo "$as_me:14003: checking for ada-include" >&5 echo $ECHO_N "checking for ada-include... $ECHO_C" >&6 # Check whether --with-ada-include or --without-ada-include was given. if test "${with_ada_include+set}" = set; then withval="$with_ada_include" else withval="${ADA_INCLUDE:-$prefix/share/ada/adainclude}" fi; if test -n "$prefix/share/ada/adainclude" ; then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$withval" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval withval="$withval" case ".$withval" in (.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:14039: error: expected a pathname, not \"$withval\"" >&5 echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} { (exit 1); exit 1; }; } ;; esac fi eval ADA_INCLUDE="$withval" echo "$as_me:14048: result: $ADA_INCLUDE" >&5 echo "${ECHO_T}$ADA_INCLUDE" >&6 echo "$as_me:14051: checking for ada-objects" >&5 echo $ECHO_N "checking for ada-objects... $ECHO_C" >&6 # Check whether --with-ada-objects or --without-ada-objects was given. if test "${with_ada_objects+set}" = set; then withval="$with_ada_objects" else withval="${ADA_OBJECTS:-$prefix/lib/ada/adalib}" fi; if test -n "$prefix/lib/ada/adalib" ; then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$withval" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval withval="$withval" case ".$withval" in (.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:14087: error: expected a pathname, not \"$withval\"" >&5 echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} { (exit 1); exit 1; }; } ;; esac fi eval ADA_OBJECTS="$withval" echo "$as_me:14096: result: $ADA_OBJECTS" >&5 echo "${ECHO_T}$ADA_OBJECTS" >&6 echo "$as_me:14099: checking if an Ada95 shared-library should be built" >&5 echo $ECHO_N "checking if an Ada95 shared-library should be built... $ECHO_C" >&6 # Check whether --with-ada-sharedlib or --without-ada-sharedlib was given. if test "${with_ada_sharedlib+set}" = set; then withval="$with_ada_sharedlib" with_ada_sharedlib=$withval else with_ada_sharedlib=no fi; echo "$as_me:14109: result: $with_ada_sharedlib" >&5 echo "${ECHO_T}$with_ada_sharedlib" >&6 ADA_SHAREDLIB='lib$(LIB_NAME).so.1' MAKE_ADA_SHAREDLIB="#" if test "x$with_ada_sharedlib" != xno then MAKE_ADA_SHAREDLIB= if test "x$with_ada_sharedlib" != xyes then ADA_SHAREDLIB="$with_ada_sharedlib" fi fi else { { echo "$as_me:14125: error: No usable Ada compiler found" >&5 echo "$as_me: error: No usable Ada compiler found" >&2;} { (exit 1); exit 1; }; } fi else { { echo "$as_me:14130: error: The Ada compiler is needed for this package" >&5 echo "$as_me: error: The Ada compiler is needed for this package" >&2;} { (exit 1); exit 1; }; } fi ################################################################################ # not needed TINFO_LDFLAGS2= TINFO_LIBS= ### Construct the list of include-directories to be generated if test "$srcdir" != "."; then CPPFLAGS="-I\${srcdir}/../include $CPPFLAGS" fi CPPFLAGS="-I../include $CPPFLAGS" if test "$srcdir" != "."; then CPPFLAGS="-I\${srcdir} $CPPFLAGS" fi CPPFLAGS="-I. $CPPFLAGS" ACPPFLAGS="-I. -I../include -I../../include $ACPPFLAGS" if test "$srcdir" != "."; then ACPPFLAGS="-I\${srcdir}/../../include $ACPPFLAGS" fi if test "$GCC" != yes; then ACPPFLAGS="$ACPPFLAGS -I\${includedir}" elif test "$includedir" != "/usr/include"; then if test "$includedir" = '${prefix}/include' ; then if test x$prefix != x/usr ; then ACPPFLAGS="$ACPPFLAGS -I\${includedir}" fi else ACPPFLAGS="$ACPPFLAGS -I\${includedir}" fi fi ### Build up pieces for makefile rules echo "$as_me:14170: checking default library suffix" >&5 echo $ECHO_N "checking default library suffix... $ECHO_C" >&6 case $DFT_LWR_MODEL in (libtool) DFT_ARG_SUFFIX='' ;; (normal) DFT_ARG_SUFFIX='' ;; (debug) DFT_ARG_SUFFIX='_g' ;; (profile) DFT_ARG_SUFFIX='_p' ;; (shared) DFT_ARG_SUFFIX='' ;; esac test -n "$LIB_SUFFIX" && DFT_ARG_SUFFIX="${LIB_SUFFIX}${DFT_ARG_SUFFIX}" echo "$as_me:14181: result: $DFT_ARG_SUFFIX" >&5 echo "${ECHO_T}$DFT_ARG_SUFFIX" >&6 echo "$as_me:14184: checking default library-dependency suffix" >&5 echo $ECHO_N "checking default library-dependency suffix... $ECHO_C" >&6 case X$DFT_LWR_MODEL in (Xlibtool) DFT_LIB_SUFFIX='.la' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (Xdebug) DFT_LIB_SUFFIX='_g.a' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (Xprofile) DFT_LIB_SUFFIX='_p.a' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (Xshared) case $cf_cv_system_name in (aix[5-7]*) DFT_LIB_SUFFIX='.so' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (cygwin*|msys*|mingw*) DFT_LIB_SUFFIX='.dll' DFT_DEP_SUFFIX='.dll.a' ;; (darwin*) DFT_LIB_SUFFIX='.dylib' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (hpux*) case $target in (ia64*) DFT_LIB_SUFFIX='.so' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (*) DFT_LIB_SUFFIX='.sl' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; esac ;; (*) DFT_LIB_SUFFIX='.so' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; esac ;; (*) DFT_LIB_SUFFIX='.a' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; esac if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}" then DFT_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_LIB_SUFFIX}" DFT_DEP_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_DEP_SUFFIX}" fi echo "$as_me:14242: result: $DFT_DEP_SUFFIX" >&5 echo "${ECHO_T}$DFT_DEP_SUFFIX" >&6 echo "$as_me:14245: checking default object directory" >&5 echo $ECHO_N "checking default object directory... $ECHO_C" >&6 case $DFT_LWR_MODEL in (libtool) DFT_OBJ_SUBDIR='obj_lo' ;; (normal) DFT_OBJ_SUBDIR='objects' ;; (debug) DFT_OBJ_SUBDIR='obj_g' ;; (profile) DFT_OBJ_SUBDIR='obj_p' ;; (shared) case $cf_cv_system_name in (cygwin|msys) DFT_OBJ_SUBDIR='objects' ;; (*) DFT_OBJ_SUBDIR='obj_s' ;; esac esac echo "$as_me:14261: result: $DFT_OBJ_SUBDIR" >&5 echo "${ECHO_T}$DFT_OBJ_SUBDIR" >&6 ### Set up low-level terminfo dependencies for makefiles. if test "$DFT_LWR_MODEL" = shared ; then case $cf_cv_system_name in (cygwin*) # "lib" files have ".dll.a" suffix, "cyg" files have ".dll" ;; (msys*) # "lib" files have ".dll.a" suffix, "msys-" files have ".dll" ;; esac fi USE_CFG_SUFFIX=${DFT_ARG_SUFFIX} ### Construct the list of subdirectories for which we'll customize makefiles ### with the appropriate compile-rules. SUB_MAKEFILES="gen/adacurses${USE_ARG_SUFFIX}-config:gen/adacurses-config.in" cat >>confdefs.h <confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overriden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if cmp -s $cache_file confcache; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:14479: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated automatically by configure. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false SHELL=\${CONFIG_SHELL-$SHELL} ac_cs_invocation="\$0 \$@" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } exec 6>&1 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\EOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` shift set dummy "$ac_option" "$ac_optarg" ${1+"$@"} shift ;; -*);; *) # This is not an option, so the user has probably given explicit # arguments. ac_need_defaults=false;; esac case $1 in # Handling of the options. EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:14655: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) shift CONFIG_FILES="$CONFIG_FILES $1" ac_need_defaults=false;; --header | --heade | --head | --hea ) shift CONFIG_HEADERS="$CONFIG_HEADERS $1" ac_need_defaults=false;; # This is an error. -*) { { echo "$as_me:14674: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done exec 5>>config.log cat >&5 << _ACEOF ## ----------------------- ## ## Running config.status. ## ## ----------------------- ## This file was extended by $as_me 2.52.20150926, executed with CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS > $ac_cs_invocation on `(hostname || uname -n) 2>/dev/null | sed 1q` _ACEOF EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "$SUB_MAKEFILES" ) CONFIG_FILES="$CONFIG_FILES $SUB_MAKEFILES" ;; "doc/adacurses${DFT_ARG_SUFFIX}-config.1" ) CONFIG_FILES="$CONFIG_FILES doc/adacurses${DFT_ARG_SUFFIX}-config.1:doc/MKada_config.in" ;; "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; "include/ncurses_cfg.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/ncurses_cfg.h:include/ncurses_cfg.hin" ;; *) { { echo "$as_me:14745: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. : ${TMPDIR=/tmp} { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=$TMPDIR/cs$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 { (exit 1); exit 1; } } EOF cat >>$CONFIG_STATUS <\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datarootdir@,$datarootdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@DEFS@,$DEFS,;t t s,@LIBS@,$LIBS,;t t s,@top_builddir@,$top_builddir,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@target@,$target,;t t s,@target_cpu@,$target_cpu,;t t s,@target_vendor@,$target_vendor,;t t s,@target_os@,$target_os,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;t t s,@CPP@,$CPP,;t t s,@AWK@,$AWK,;t t s,@EGREP@,$EGREP,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@LN_S@,$LN_S,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t s,@PKG_CONFIG_LIBDIR@,$PKG_CONFIG_LIBDIR,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@CTAGS@,$CTAGS,;t t s,@ETAGS@,$ETAGS,;t t s,@MAKE_LOWER_TAGS@,$MAKE_LOWER_TAGS,;t t s,@MAKE_UPPER_TAGS@,$MAKE_UPPER_TAGS,;t t s,@cf_cv_makeflags@,$cf_cv_makeflags,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@LD@,$LD,;t t s,@ac_ct_LD@,$ac_ct_LD,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@ARFLAGS@,$ARFLAGS,;t t s,@DESTDIR@,$DESTDIR,;t t s,@BUILD_CC@,$BUILD_CC,;t t s,@BUILD_CPP@,$BUILD_CPP,;t t s,@BUILD_CFLAGS@,$BUILD_CFLAGS,;t t s,@BUILD_CPPFLAGS@,$BUILD_CPPFLAGS,;t t s,@BUILD_LDFLAGS@,$BUILD_LDFLAGS,;t t s,@BUILD_LIBS@,$BUILD_LIBS,;t t s,@BUILD_EXEEXT@,$BUILD_EXEEXT,;t t s,@BUILD_OBJEXT@,$BUILD_OBJEXT,;t t s,@DFT_LWR_MODEL@,$DFT_LWR_MODEL,;t t s,@DFT_UPR_MODEL@,$DFT_UPR_MODEL,;t t s,@NCURSES_CONFIG@,$NCURSES_CONFIG,;t t s,@ac_ct_NCURSES_CONFIG@,$ac_ct_NCURSES_CONFIG,;t t s,@NCURSES_MAJOR@,$NCURSES_MAJOR,;t t s,@NCURSES_MINOR@,$NCURSES_MINOR,;t t s,@NCURSES_PATCH@,$NCURSES_PATCH,;t t s,@cf_cv_rel_version@,$cf_cv_rel_version,;t t s,@cf_cv_abi_version@,$cf_cv_abi_version,;t t s,@cf_cv_builtin_bool@,$cf_cv_builtin_bool,;t t s,@cf_cv_header_stdbool_h@,$cf_cv_header_stdbool_h,;t t s,@cf_cv_type_of_bool@,$cf_cv_type_of_bool,;t t s,@LIB_PREFIX@,$LIB_PREFIX,;t t s,@LIB_SUFFIX@,$LIB_SUFFIX,;t t s,@CC_G_OPT@,$CC_G_OPT,;t t s,@LD_MODEL@,$LD_MODEL,;t t s,@shlibdir@,$shlibdir,;t t s,@MAKE_DLLS@,$MAKE_DLLS,;t t s,@CC_SHARED_OPTS@,$CC_SHARED_OPTS,;t t s,@LD_RPATH_OPT@,$LD_RPATH_OPT,;t t s,@LD_SHARED_OPTS@,$LD_SHARED_OPTS,;t t s,@MK_SHARED_LIB@,$MK_SHARED_LIB,;t t s,@RM_SHARED_OPTS@,$RM_SHARED_OPTS,;t t s,@LINK_PROGS@,$LINK_PROGS,;t t s,@LINK_TESTS@,$LINK_TESTS,;t t s,@EXTRA_LDFLAGS@,$EXTRA_LDFLAGS,;t t s,@LOCAL_LDFLAGS@,$LOCAL_LDFLAGS,;t t s,@LOCAL_LDFLAGS2@,$LOCAL_LDFLAGS2,;t t s,@INSTALL_LIB@,$INSTALL_LIB,;t t s,@RPATH_LIST@,$RPATH_LIST,;t t s,@BROKEN_LINKER@,$BROKEN_LINKER,;t t s,@NCURSES_EXT_FUNCS@,$NCURSES_EXT_FUNCS,;t t s,@NCURSES_CONST@,$NCURSES_CONST,;t t s,@PTHREAD@,$PTHREAD,;t t s,@cf_cv_enable_reentrant@,$cf_cv_enable_reentrant,;t t s,@NCURSES_WRAP_PREFIX@,$NCURSES_WRAP_PREFIX,;t t s,@ECHO_LT@,$ECHO_LT,;t t s,@ECHO_LD@,$ECHO_LD,;t t s,@RULE_CC@,$RULE_CC,;t t s,@SHOW_CC@,$SHOW_CC,;t t s,@ECHO_CC@,$ECHO_CC,;t t s,@ADAFLAGS@,$ADAFLAGS,;t t s,@EXTRA_CFLAGS@,$EXTRA_CFLAGS,;t t s,@ADA_TRACE@,$ADA_TRACE,;t t s,@gnat_exists@,$gnat_exists,;t t s,@M4_exists@,$M4_exists,;t t s,@cf_ada_make@,$cf_ada_make,;t t s,@GNATPREP_OPTS@,$GNATPREP_OPTS,;t t s,@cf_compile_generics@,$cf_compile_generics,;t t s,@cf_generic_objects@,$cf_generic_objects,;t t s,@USE_GNAT_SIGINT@,$USE_GNAT_SIGINT,;t t s,@USE_OLD_MAKERULES@,$USE_OLD_MAKERULES,;t t s,@USE_GNAT_PROJECTS@,$USE_GNAT_PROJECTS,;t t s,@USE_GNAT_LIBRARIES@,$USE_GNAT_LIBRARIES,;t t s,@cf_ada_compiler@,$cf_ada_compiler,;t t s,@cf_ada_package@,$cf_ada_package,;t t s,@ADA_INCLUDE@,$ADA_INCLUDE,;t t s,@ADA_OBJECTS@,$ADA_OBJECTS,;t t s,@ADA_SHAREDLIB@,$ADA_SHAREDLIB,;t t s,@MAKE_ADA_SHAREDLIB@,$MAKE_ADA_SHAREDLIB,;t t s,@TINFO_LDFLAGS2@,$TINFO_LDFLAGS2,;t t s,@TINFO_LIBS@,$TINFO_LIBS,;t t s,@ACPPFLAGS@,$ACPPFLAGS,;t t s,@DFT_ARG_SUFFIX@,$DFT_ARG_SUFFIX,;t t s,@DFT_DEP_SUFFIX@,$DFT_DEP_SUFFIX,;t t s,@DFT_OBJ_SUBDIR@,$DFT_OBJ_SUBDIR,;t t s,@USE_CFG_SUFFIX@,$USE_CFG_SUFFIX,;t t s,@TEST_ARG2@,$TEST_ARG2,;t t s,@TEST_LIBS2@,$TEST_LIBS2,;t t s,@NCURSES_SHLIB2@,$NCURSES_SHLIB2,;t t s,@ADA_SUBDIRS@,$ADA_SUBDIRS,;t t s,@NCURSES_TREE@,$NCURSES_TREE,;t t s,@EXTERNAL_TREE@,$EXTERNAL_TREE,;t t s,@ADAHTML_DIR@,$ADAHTML_DIR,;t t s,@ADAGEN_LDFLAGS@,$ADAGEN_LDFLAGS,;t t CEOF EOF cat >>$CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed # It is possible to make a multiline substitution using escaped newlines. # Ensure that we do not split the substitution between script fragments. ac_BEG=$ac_end ac_END=`expr $ac_end + $ac_max_sed_lines` sed "1,${ac_BEG}d; ${ac_END}p; q" $tmp/subs.sed >$tmp/subs.next if test -s $tmp/subs.next; then grep '^s,@[^@,][^@,]*@,.*\\$' $tmp/subs.next >$tmp/subs.edit if test ! -s $tmp/subs.edit; then grep "^s,@[^@,][^@,]*@,.*,;t t$" $tmp/subs.next >$tmp/subs.edit if test ! -s $tmp/subs.edit; then if test $ac_beg -gt 1; then ac_end=`expr $ac_end - 1` continue fi fi fi fi if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" EOF cat >>$CONFIG_STATUS <<\EOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` else ac_dir_suffix= ac_dots= fi case $srcdir in .) ac_srcdir=. if test -z "$ac_dots"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_dots$srcdir$ac_dir_suffix ac_top_srcdir=$ac_dots$srcdir ;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_dots$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:15088: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated automatically by config.status. */ configure_input="Generated automatically from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:15106: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:15119: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } EOF cat >>$CONFIG_STATUS <<\EOF ac_warn_datarootdir=no if test x"$ac_file" != x-; then for ac_item in $ac_file_inputs do ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' $ac_item` if test -n "$ac_seen"; then ac_used=`grep '@datarootdir@' $ac_item` if test -z "$ac_used"; then { echo "$as_me:15135: WARNING: datarootdir was used implicitly but not set: $ac_seen" >&5 echo "$as_me: WARNING: datarootdir was used implicitly but not set: $ac_seen" >&2;} ac_warn_datarootdir=yes fi fi ac_seen=`grep '${datarootdir}' $ac_item` if test -n "$ac_seen"; then { echo "$as_me:15144: WARNING: datarootdir was used explicitly but not set: $ac_seen" >&5 echo "$as_me: WARNING: datarootdir was used explicitly but not set: $ac_seen" >&2;} ac_warn_datarootdir=yes fi done fi if test "x$ac_warn_datarootdir" = xyes; then ac_sed_cmds="$ac_sed_cmds | sed -e 's,@datarootdir@,\${prefix}/share,g' -e 's,\${datarootdir},\${prefix}/share,g'" fi EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then cp $tmp/out $ac_file for ac_name in prefix exec_prefix datarootdir do ac_seen=`fgrep -n '${'$ac_name'[:=].*}' $ac_file` if test -n "$ac_seen"; then ac_init=`egrep '[ ]*'$ac_name'[ ]*=' $ac_file` if test -z "$ac_init"; then ac_seen=`echo "$ac_seen" |sed -e 's,^,'$ac_file':,'` { echo "$as_me:15181: WARNING: Variable $ac_name is used but was not set: $ac_seen" >&5 echo "$as_me: WARNING: Variable $ac_name is used but was not set: $ac_seen" >&2;} fi fi done egrep -n '@[a-z_][a-z_0-9]+@' $ac_file >$tmp/out egrep -n '@[A-Z_][A-Z_0-9]+@' $ac_file >>$tmp/out if test -s $tmp/out; then ac_seen=`sed -e 's,^,'$ac_file':,' < $tmp/out` { echo "$as_me:15192: WARNING: Some variables may not be substituted: $ac_seen" >&5 echo "$as_me: WARNING: Some variables may not be substituted: $ac_seen" >&2;} fi else cat $tmp/out fi rm -f $tmp/out done EOF cat >>$CONFIG_STATUS <<\EOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_i turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_iA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_iB='\([ ]\),\1#\2define\3' ac_iC=' ' ac_iD='\4,;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:15241: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:15252: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:15265: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in EOF # Transform confdefs.h into a list of #define's. We won't use it as a sed # script, but as data to insert where we see @DEFS@. We expect AC_SAVE_DEFS to # be either 'cat' or 'sort'. cat confdefs.h | uniq >conftest.vals # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail echo ' rm -f conftest.frag' >> $CONFIG_STATUS while grep . conftest.vals >/dev/null do # Write chunks of a limited-size here document to conftest.frag. echo ' cat >> conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> $CONFIG_STATUS echo 'CEOF' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals # Run sed to substitute the contents of conftest.frag into $tmp/in at the # marker @DEFS@. echo ' cat >> conftest.edit < $tmp/out rm -f $tmp/in mv $tmp/out $tmp/in rm -f conftest.edit conftest.frag ' >> $CONFIG_STATUS cat >>$CONFIG_STATUS <<\EOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated automatically by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated automatically by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if cmp -s $ac_file $tmp/config.h 2>/dev/null; then { echo "$as_me:15323: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } fi rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done EOF cat >>$CONFIG_STATUS <<\EOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` case $ac_dest in default ) if test -z "$USE_OLD_MAKERULES" ; then $AWK -f $srcdir/mk-1st.awk <$srcdir/src/modules >>src/Makefile fi ;; esac done EOF cat >>$CONFIG_STATUS <<\EOF { (exit 0); exit 0; } EOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: exec 5>/dev/null $SHELL $CONFIG_STATUS || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi ${MAKE:-make} preinstall ncurses-6.0-20160213/Ada95/src/0000755000175100001440000000000012560764473014124 5ustar tomusersncurses-6.0-20160213/Ada95/src/c_threaded_variables.c0000644000175100001440000000537312340210232020361 0ustar tomusers/**************************************************************************** * Copyright (c) 2011,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Nicolas Boulenguez, 2011 * ****************************************************************************/ #include "c_threaded_variables.h" #define WRAP(type, name) \ type \ name ## _as_function () \ { \ return name; \ } /* *INDENT-OFF* */ WRAP(WINDOW *, stdscr) WRAP(WINDOW *, curscr) WRAP(int, LINES) WRAP(int, COLS) WRAP(int, TABSIZE) WRAP(int, COLORS) WRAP(int, COLOR_PAIRS) chtype acs_map_as_function(char inx) { return acs_map[(unsigned char) inx]; } /* *INDENT-ON* */ ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-modular_io.adb0000644000175100001440000000716511315445551025531 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Modular_IO -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; with Terminal_Interface.Curses.Text_IO.Aux; package body Terminal_Interface.Curses.Text_IO.Modular_IO is package Aux renames Terminal_Interface.Curses.Text_IO.Aux; package MIO is new Ada.Text_IO.Modular_IO (Num); procedure Put (Win : Window; Item : Num; Width : Field := Default_Width; Base : Number_Base := Default_Base) is Buf : String (1 .. Field'Last); begin MIO.Put (Buf, Item, Base); Aux.Put_Buf (Win, Buf, Width); end Put; procedure Put (Item : Num; Width : Field := Default_Width; Base : Number_Base := Default_Base) is begin Put (Get_Window, Item, Width, Base); end Put; end Terminal_Interface.Curses.Text_IO.Modular_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io.adb0000644000175100001440000002304512340207742023371 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.22 $ -- $Date: 2014/05/24 21:32:18 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package body Terminal_Interface.Curses.Text_IO is Default_Window : Window := Null_Window; procedure Set_Window (Win : Window) is begin Default_Window := Win; end Set_Window; function Get_Window return Window is begin if Default_Window = Null_Window then return Standard_Window; else return Default_Window; end if; end Get_Window; pragma Inline (Get_Window); procedure Flush (Win : Window) is begin Refresh (Win); end Flush; procedure Flush is begin Flush (Get_Window); end Flush; -------------------------------------------- -- Specification of line and page lengths -- -------------------------------------------- -- There are no set routines in this package. I assume, that you allocate -- the window with an appropriate size. -- A scroll-window is interpreted as an page with unbounded page length, -- i.e. it returns the conventional 0 as page length. function Line_Length (Win : Window) return Count is N_Lines : Line_Count; N_Cols : Column_Count; begin Get_Size (Win, N_Lines, N_Cols); -- if Natural (N_Cols) > Natural (Count'Last) then -- raise Layout_Error; -- end if; return Count (N_Cols); end Line_Length; function Line_Length return Count is begin return Line_Length (Get_Window); end Line_Length; function Page_Length (Win : Window) return Count is N_Lines : Line_Count; N_Cols : Column_Count; begin if Scrolling_Allowed (Win) then return 0; else Get_Size (Win, N_Lines, N_Cols); -- if Natural (N_Lines) > Natural (Count'Last) then -- raise Layout_Error; -- end if; return Count (N_Lines); end if; end Page_Length; function Page_Length return Count is begin return Page_Length (Get_Window); end Page_Length; ------------------------------------ -- Column, Line, and Page Control -- ------------------------------------ procedure New_Line (Win : Window; Spacing : Positive_Count := 1) is P_Size : constant Count := Page_Length (Win); begin if not Spacing'Valid then raise Constraint_Error; end if; for I in 1 .. Spacing loop if P_Size > 0 and then Line (Win) >= P_Size then New_Page (Win); else Add (Win, ASCII.LF); end if; end loop; end New_Line; procedure New_Line (Spacing : Positive_Count := 1) is begin New_Line (Get_Window, Spacing); end New_Line; procedure New_Page (Win : Window) is begin Clear (Win); end New_Page; procedure New_Page is begin New_Page (Get_Window); end New_Page; procedure Set_Col (Win : Window; To : Positive_Count) is Y : Line_Position; X1 : Column_Position; X2 : Column_Position; N : Natural; begin if not To'Valid then raise Constraint_Error; end if; Get_Cursor_Position (Win, Y, X1); N := Natural (To); N := N - 1; X2 := Column_Position (N); if X1 > X2 then New_Line (Win, 1); X1 := 0; end if; if X1 < X2 then declare Filler : constant String (Integer (X1) .. (Integer (X2) - 1)) := (others => ' '); begin Put (Win, Filler); end; end if; end Set_Col; procedure Set_Col (To : Positive_Count) is begin Set_Col (Get_Window, To); end Set_Col; procedure Set_Line (Win : Window; To : Positive_Count) is Y1 : Line_Position; Y2 : Line_Position; X : Column_Position; N : Natural; begin if not To'Valid then raise Constraint_Error; end if; Get_Cursor_Position (Win, Y1, X); pragma Warnings (Off, X); -- unreferenced N := Natural (To); N := N - 1; Y2 := Line_Position (N); if Y2 < Y1 then New_Page (Win); Y1 := 0; end if; if Y1 < Y2 then New_Line (Win, Positive_Count (Y2 - Y1)); end if; end Set_Line; procedure Set_Line (To : Positive_Count) is begin Set_Line (Get_Window, To); end Set_Line; function Col (Win : Window) return Positive_Count is Y : Line_Position; X : Column_Position; N : Natural; begin Get_Cursor_Position (Win, Y, X); N := Natural (X); N := N + 1; -- if N > Natural (Count'Last) then -- raise Layout_Error; -- end if; return Positive_Count (N); end Col; function Col return Positive_Count is begin return Col (Get_Window); end Col; function Line (Win : Window) return Positive_Count is Y : Line_Position; X : Column_Position; N : Natural; begin Get_Cursor_Position (Win, Y, X); N := Natural (Y); N := N + 1; -- if N > Natural (Count'Last) then -- raise Layout_Error; -- end if; return Positive_Count (N); end Line; function Line return Positive_Count is begin return Line (Get_Window); end Line; ----------------------- -- Characters Output -- ----------------------- procedure Put (Win : Window; Item : Character) is P_Size : constant Count := Page_Length (Win); Y : Line_Position; X : Column_Position; L : Line_Count; C : Column_Count; begin if P_Size > 0 then Get_Cursor_Position (Win, Y, X); Get_Size (Win, L, C); if (Y + 1) = L and then (X + 1) = C then New_Page (Win); end if; end if; Add (Win, Item); end Put; procedure Put (Item : Character) is begin Put (Get_Window, Item); end Put; -------------------- -- Strings-Output -- -------------------- procedure Put (Win : Window; Item : String) is P_Size : constant Count := Page_Length (Win); Y : Line_Position; X : Column_Position; L : Line_Count; C : Column_Count; begin if P_Size > 0 then Get_Cursor_Position (Win, Y, X); Get_Size (Win, L, C); if (Y + 1) = L and then (X + 1 + Item'Length) >= C then New_Page (Win); end if; end if; Add (Win, Item); end Put; procedure Put (Item : String) is begin Put (Get_Window, Item); end Put; procedure Put_Line (Win : Window; Item : String) is begin Put (Win, Item); New_Line (Win, 1); end Put_Line; procedure Put_Line (Item : String) is begin Put_Line (Get_Window, Item); end Put_Line; end Terminal_Interface.Curses.Text_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-complex_io.ads0000644000175100001440000000711411315445471025551 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Complex_IO -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Numerics.Generic_Complex_Types; generic with package Complex_Types is new Ada.Numerics.Generic_Complex_Types (<>); package Terminal_Interface.Curses.Text_IO.Complex_IO is use Complex_Types; Default_Fore : Field := 2; Default_Aft : Field := Real'Digits - 1; Default_Exp : Field := 3; procedure Put (Win : Window; Item : Complex; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); procedure Put (Item : Complex; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); private pragma Inline (Put); end Terminal_Interface.Curses.Text_IO.Complex_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.ads0000644000175100001440000000646311315445666027776 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address); type Internet_V4_Address_Field is new Field_Type with null record; procedure Set_Field_Type (Fld : Field; Typ : Internet_V4_Address_Field); pragma Inline (Set_Field_Type); end Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-complex_io.adb0000644000175100001440000000730311315446021025520 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Complex_IO -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Text_IO.Float_IO; package body Terminal_Interface.Curses.Text_IO.Complex_IO is package FIO is new Terminal_Interface.Curses.Text_IO.Float_IO (Complex_Types.Real'Base); procedure Put (Win : Window; Item : Complex; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp) is begin Put (Win, '('); FIO.Put (Win, Item.Re, Fore, Aft, Exp); Put (Win, ','); FIO.Put (Win, Item.Im, Fore, Aft, Exp); Put (Win, ')'); end Put; procedure Put (Item : Complex; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp) is begin Put (Get_Window, Item, Fore, Aft, Exp); end Put; end Terminal_Interface.Curses.Text_IO.Complex_IO; ncurses-6.0-20160213/Ada95/src/c_varargs_to_ada.c0000644000175100001440000000753212340207742017540 0ustar tomusers/**************************************************************************** * Copyright (c) 2011,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Nicolas Boulenguez, 2011 * ****************************************************************************/ /* Version Control $Id: c_varargs_to_ada.c,v 1.6 2014/05/24 21:32:18 tom Exp $ --------------------------------------------------------------------------*/ /* */ #include "c_varargs_to_ada.h" int set_field_type_alnum(FIELD *field, int minimum_width) { return set_field_type(field, TYPE_ALNUM, minimum_width); } int set_field_type_alpha(FIELD *field, int minimum_width) { return set_field_type(field, TYPE_ALPHA, minimum_width); } int set_field_type_enum(FIELD *field, char **value_list, int case_sensitive, int unique_match) { return set_field_type(field, TYPE_ENUM, value_list, case_sensitive, unique_match); } int set_field_type_integer(FIELD *field, int precision, long minimum, long maximum) { return set_field_type(field, TYPE_INTEGER, precision, minimum, maximum); } int set_field_type_numeric(FIELD *field, int precision, double minimum, double maximum) { return set_field_type(field, TYPE_NUMERIC, precision, minimum, maximum); } int set_field_type_regexp(FIELD *field, char *regular_expression) { return set_field_type(field, TYPE_REGEXP, regular_expression); } int set_field_type_ipv4(FIELD *field) { return set_field_type(field, TYPE_IPV4); } int set_field_type_user(FIELD *field, FIELDTYPE *fieldtype, void *arg) { return set_field_type(field, fieldtype, arg); } void * void_star_make_arg(va_list *list) { return va_arg(*list, void *); } #ifdef TRACE void _traces(const char *fmt, char *arg) { _tracef(fmt, arg); } #endif ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-aux.ads0000644000175100001440000000700111315445062024177 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Aux -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2006,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.14 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ private package Terminal_Interface.Curses.Text_IO.Aux is -- pragma Preelaborate (Aux); -- This routine is called from the Text_IO output routines for numeric -- and enumeration types. -- procedure Put_Buf (Win : Window; -- The output window Buf : String; -- The buffer containing the text Width : Field; -- The width of the output field Signal : Boolean := True; -- If true, we raise Layout_Error Ljust : Boolean := False); -- The Buf is left justified end Terminal_Interface.Curses.Text_IO.Aux; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-form_user_data.adb0000644000175100001440000001013312340207631026023 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Form_User_Data -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.15 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- | -- |===================================================================== -- | man page form__userptr.3x -- |===================================================================== -- | with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms.Form_User_Data is use type Interfaces.C.int; -- | -- | -- | procedure Set_User_Data (Frm : Form; Data : User_Access) is function Set_Form_Userptr (Frm : Form; Data : User_Access) return Eti_Error; pragma Import (C, Set_Form_Userptr, "set_form_userptr"); begin Eti_Exception (Set_Form_Userptr (Frm, Data)); end Set_User_Data; -- | -- | -- | function Get_User_Data (Frm : Form) return User_Access is function Form_Userptr (Frm : Form) return User_Access; pragma Import (C, Form_Userptr, "form_userptr"); begin return Form_Userptr (Frm); end Get_User_Data; procedure Get_User_Data (Frm : Form; Data : out User_Access) is begin Data := Get_User_Data (Frm); end Get_User_Data; end Terminal_Interface.Curses.Forms.Form_User_Data; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-menus-item_user_data.adb0000644000175100001440000000756712340207631026040 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Menus.Item_User_Data -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.14 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Menus.Item_User_Data is use type Interfaces.C.int; procedure Set_User_Data (Itm : Item; Data : User_Access) is function Set_Item_Userptr (Itm : Item; Addr : User_Access) return Eti_Error; pragma Import (C, Set_Item_Userptr, "set_item_userptr"); begin Eti_Exception (Set_Item_Userptr (Itm, Data)); end Set_User_Data; function Get_User_Data (Itm : Item) return User_Access is function Item_Userptr (Itm : Item) return User_Access; pragma Import (C, Item_Userptr, "item_userptr"); begin return Item_Userptr (Itm); end Get_User_Data; procedure Get_User_Data (Itm : Item; Data : out User_Access) is begin Data := Get_User_Data (Itm); end Get_User_Data; end Terminal_Interface.Curses.Menus.Item_User_Data; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-terminfo.adb0000644000175100001440000001542411315445062023543 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Terminfo -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2006,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.6 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; with Interfaces.C; use Interfaces.C; with Interfaces.C.Strings; use Interfaces.C.Strings; with Ada.Unchecked_Conversion; package body Terminal_Interface.Curses.Terminfo is function Is_MinusOne_Pointer (P : chars_ptr) return Boolean; function Is_MinusOne_Pointer (P : chars_ptr) return Boolean is type Weird_Address is new System.Storage_Elements.Integer_Address; Invalid_Pointer : constant Weird_Address := -1; function To_Weird is new Ada.Unchecked_Conversion (Source => chars_ptr, Target => Weird_Address); begin if To_Weird (P) = Invalid_Pointer then return True; else return False; end if; end Is_MinusOne_Pointer; pragma Inline (Is_MinusOne_Pointer); ------------------------------------------------------------------------------ function Get_Flag (Name : String) return Boolean is function tigetflag (id : char_array) return Curses_Bool; pragma Import (C, tigetflag); Txt : char_array (0 .. Name'Length); Length : size_t; begin To_C (Name, Txt, Length); if tigetflag (Txt) = Curses_Bool (Curses_True) then return True; else return False; end if; end Get_Flag; ------------------------------------------------------------------------------ procedure Get_String (Name : String; Value : out Terminfo_String; Result : out Boolean) is function tigetstr (id : char_array) return chars_ptr; pragma Import (C, tigetstr, "tigetstr"); Txt : char_array (0 .. Name'Length); Length : size_t; Txt2 : chars_ptr; begin To_C (Name, Txt, Length); Txt2 := tigetstr (Txt); if Txt2 = Null_Ptr then Result := False; elsif Is_MinusOne_Pointer (Txt2) then raise Curses_Exception; else Value := Terminfo_String (Fill_String (Txt2)); Result := True; end if; end Get_String; ------------------------------------------------------------------------------ function Has_String (Name : String) return Boolean is function tigetstr (id : char_array) return chars_ptr; pragma Import (C, tigetstr, "tigetstr"); Txt : char_array (0 .. Name'Length); Length : size_t; Txt2 : chars_ptr; begin To_C (Name, Txt, Length); Txt2 := tigetstr (Txt); if Txt2 = Null_Ptr then return False; elsif Is_MinusOne_Pointer (Txt2) then raise Curses_Exception; else return True; end if; end Has_String; ------------------------------------------------------------------------------ function Get_Number (Name : String) return Integer is function tigetstr (s : char_array) return C_Int; pragma Import (C, tigetstr); Txt : char_array (0 .. Name'Length); Length : size_t; begin To_C (Name, Txt, Length); return Integer (tigetstr (Txt)); end Get_Number; ------------------------------------------------------------------------------ procedure Put_String (Str : Terminfo_String; affcnt : Natural := 1; putc : putctype := null) is function tputs (str : char_array; affcnt : C_Int; putc : putctype) return C_Int; function putp (str : char_array) return C_Int; pragma Import (C, tputs); pragma Import (C, putp); Txt : char_array (0 .. Str'Length); Length : size_t; Err : C_Int; begin To_C (String (Str), Txt, Length); if putc = null then Err := putp (Txt); else Err := tputs (Txt, C_Int (affcnt), putc); end if; if Err = Curses_Err then raise Curses_Exception; end if; end Put_String; end Terminal_Interface.Curses.Terminfo; ncurses-6.0-20160213/Ada95/src/c_threaded_variables.h0000644000175100001440000000536012560764473020413 0ustar tomusers/**************************************************************************** * Copyright (c) 2011-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* $Id: c_threaded_variables.h,v 1.3 2015/08/06 23:09:47 tom Exp $ */ #ifndef __C_THREADED_VARIABLES_H #define __C_THREADED_VARIABLES_H #include #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #include extern WINDOW *stdscr_as_function(void); extern WINDOW *curscr_as_function(void); extern int LINES_as_function(void); extern int LINES_as_function(void); extern int COLS_as_function(void); extern int TABSIZE_as_function(void); extern int COLORS_as_function(void); extern int COLOR_PAIRS_as_function(void); extern chtype acs_map_as_function(char /* index */ ); #endif /* __C_THREADED_VARIABLES_H */ ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_user_data.adb0000644000175100001440000001015512340207631026147 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_User_Data -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.15 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; -- | -- |===================================================================== -- | man page form_field_userptr.3x -- |===================================================================== -- | package body Terminal_Interface.Curses.Forms.Field_User_Data is -- | -- | -- | use type Interfaces.C.int; procedure Set_User_Data (Fld : Field; Data : User_Access) is function Set_Field_Userptr (Fld : Field; Usr : User_Access) return Eti_Error; pragma Import (C, Set_Field_Userptr, "set_field_userptr"); begin Eti_Exception (Set_Field_Userptr (Fld, Data)); end Set_User_Data; -- | -- | -- | function Get_User_Data (Fld : Field) return User_Access is function Field_Userptr (Fld : Field) return User_Access; pragma Import (C, Field_Userptr, "field_userptr"); begin return Field_Userptr (Fld); end Get_User_Data; procedure Get_User_Data (Fld : Field; Data : out User_Access) is begin Data := Get_User_Data (Fld); end Get_User_Data; end Terminal_Interface.Curses.Forms.Field_User_Data; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-enumeration_io.adb0000644000175100001440000000776511315445471026423 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Enumeration_IO -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; with Ada.Characters.Handling; use Ada.Characters.Handling; with Terminal_Interface.Curses.Text_IO.Aux; package body Terminal_Interface.Curses.Text_IO.Enumeration_IO is package Aux renames Terminal_Interface.Curses.Text_IO.Aux; package EIO is new Ada.Text_IO.Enumeration_IO (Enum); procedure Put (Win : Window; Item : Enum; Width : Field := Default_Width; Set : Type_Set := Default_Setting) is Buf : String (1 .. Field'Last); Tset : Ada.Text_IO.Type_Set; begin if Set /= Mixed_Case then Tset := Ada.Text_IO.Type_Set'Val (Type_Set'Pos (Set)); else Tset := Ada.Text_IO.Lower_Case; end if; EIO.Put (Buf, Item, Tset); if Set = Mixed_Case then Buf (Buf'First) := To_Upper (Buf (Buf'First)); end if; Aux.Put_Buf (Win, Buf, Width, True, True); end Put; procedure Put (Item : Enum; Width : Field := Default_Width; Set : Type_Set := Default_Setting) is begin Put (Get_Window, Item, Width, Set); end Put; end Terminal_Interface.Curses.Text_IO.Enumeration_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms.adb0000644000175100001440000010053312340207631023037 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.32 $ -- $Date: 2014/05/24 21:31:05 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Unchecked_Deallocation; with Interfaces.C; use Interfaces.C; with Interfaces.C.Strings; use Interfaces.C.Strings; with Interfaces.C.Pointers; with Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms is use Terminal_Interface.Curses.Aux; type C_Field_Array is array (Natural range <>) of aliased Field; package F_Array is new Interfaces.C.Pointers (Natural, Field, C_Field_Array, Null_Field); ------------------------------------------------------------------------------ -- | -- | -- | -- subtype chars_ptr is Interfaces.C.Strings.chars_ptr; procedure Request_Name (Key : Form_Request_Code; Name : out String) is function Form_Request_Name (Key : C_Int) return chars_ptr; pragma Import (C, Form_Request_Name, "form_request_name"); begin Fill_String (Form_Request_Name (C_Int (Key)), Name); end Request_Name; function Request_Name (Key : Form_Request_Code) return String is function Form_Request_Name (Key : C_Int) return chars_ptr; pragma Import (C, Form_Request_Name, "form_request_name"); begin return Fill_String (Form_Request_Name (C_Int (Key))); end Request_Name; ------------------------------------------------------------------------------ -- | -- | -- | -- | -- |===================================================================== -- | man page form_field_new.3x -- |===================================================================== -- | -- | -- | function Create (Height : Line_Count; Width : Column_Count; Top : Line_Position; Left : Column_Position; Off_Screen : Natural := 0; More_Buffers : Buffer_Number := Buffer_Number'First) return Field is function Newfield (H, W, T, L, O, M : C_Int) return Field; pragma Import (C, Newfield, "new_field"); Fld : constant Field := Newfield (C_Int (Height), C_Int (Width), C_Int (Top), C_Int (Left), C_Int (Off_Screen), C_Int (More_Buffers)); begin if Fld = Null_Field then raise Form_Exception; end if; return Fld; end Create; -- | -- | -- | procedure Delete (Fld : in out Field) is function Free_Field (Fld : Field) return Eti_Error; pragma Import (C, Free_Field, "free_field"); begin Eti_Exception (Free_Field (Fld)); Fld := Null_Field; end Delete; -- | -- | -- | function Duplicate (Fld : Field; Top : Line_Position; Left : Column_Position) return Field is function Dup_Field (Fld : Field; Top : C_Int; Left : C_Int) return Field; pragma Import (C, Dup_Field, "dup_field"); F : constant Field := Dup_Field (Fld, C_Int (Top), C_Int (Left)); begin if F = Null_Field then raise Form_Exception; end if; return F; end Duplicate; -- | -- | -- | function Link (Fld : Field; Top : Line_Position; Left : Column_Position) return Field is function Lnk_Field (Fld : Field; Top : C_Int; Left : C_Int) return Field; pragma Import (C, Lnk_Field, "link_field"); F : constant Field := Lnk_Field (Fld, C_Int (Top), C_Int (Left)); begin if F = Null_Field then raise Form_Exception; end if; return F; end Link; -- | -- |===================================================================== -- | man page form_field_just.3x -- |===================================================================== -- | -- | -- | procedure Set_Justification (Fld : Field; Just : Field_Justification := None) is function Set_Field_Just (Fld : Field; Just : C_Int) return Eti_Error; pragma Import (C, Set_Field_Just, "set_field_just"); begin Eti_Exception (Set_Field_Just (Fld, C_Int (Field_Justification'Pos (Just)))); end Set_Justification; -- | -- | -- | function Get_Justification (Fld : Field) return Field_Justification is function Field_Just (Fld : Field) return C_Int; pragma Import (C, Field_Just, "field_just"); begin return Field_Justification'Val (Field_Just (Fld)); end Get_Justification; -- | -- |===================================================================== -- | man page form_field_buffer.3x -- |===================================================================== -- | -- | -- | procedure Set_Buffer (Fld : Field; Buffer : Buffer_Number := Buffer_Number'First; Str : String) is function Set_Fld_Buffer (Fld : Field; Bufnum : C_Int; S : char_array) return Eti_Error; pragma Import (C, Set_Fld_Buffer, "set_field_buffer"); begin Eti_Exception (Set_Fld_Buffer (Fld, C_Int (Buffer), To_C (Str))); end Set_Buffer; -- | -- | -- | procedure Get_Buffer (Fld : Field; Buffer : Buffer_Number := Buffer_Number'First; Str : out String) is function Field_Buffer (Fld : Field; B : C_Int) return chars_ptr; pragma Import (C, Field_Buffer, "field_buffer"); begin Fill_String (Field_Buffer (Fld, C_Int (Buffer)), Str); end Get_Buffer; function Get_Buffer (Fld : Field; Buffer : Buffer_Number := Buffer_Number'First) return String is function Field_Buffer (Fld : Field; B : C_Int) return chars_ptr; pragma Import (C, Field_Buffer, "field_buffer"); begin return Fill_String (Field_Buffer (Fld, C_Int (Buffer))); end Get_Buffer; -- | -- | -- | procedure Set_Status (Fld : Field; Status : Boolean := True) is function Set_Fld_Status (Fld : Field; St : C_Int) return Eti_Error; pragma Import (C, Set_Fld_Status, "set_field_status"); begin if Set_Fld_Status (Fld, Boolean'Pos (Status)) /= E_Ok then raise Form_Exception; end if; end Set_Status; -- | -- | -- | function Changed (Fld : Field) return Boolean is function Field_Status (Fld : Field) return C_Int; pragma Import (C, Field_Status, "field_status"); Res : constant C_Int := Field_Status (Fld); begin if Res = Curses_False then return False; else return True; end if; end Changed; -- | -- | -- | procedure Set_Maximum_Size (Fld : Field; Max : Natural := 0) is function Set_Field_Max (Fld : Field; M : C_Int) return Eti_Error; pragma Import (C, Set_Field_Max, "set_max_field"); begin Eti_Exception (Set_Field_Max (Fld, C_Int (Max))); end Set_Maximum_Size; -- | -- |===================================================================== -- | man page form_field_opts.3x -- |===================================================================== -- | -- | -- | procedure Set_Options (Fld : Field; Options : Field_Option_Set) is function Set_Field_Opts (Fld : Field; Opt : Field_Option_Set) return Eti_Error; pragma Import (C, Set_Field_Opts, "set_field_opts"); begin Eti_Exception (Set_Field_Opts (Fld, Options)); end Set_Options; -- | -- | -- | procedure Switch_Options (Fld : Field; Options : Field_Option_Set; On : Boolean := True) is function Field_Opts_On (Fld : Field; Opt : Field_Option_Set) return Eti_Error; pragma Import (C, Field_Opts_On, "field_opts_on"); function Field_Opts_Off (Fld : Field; Opt : Field_Option_Set) return Eti_Error; pragma Import (C, Field_Opts_Off, "field_opts_off"); begin if On then Eti_Exception (Field_Opts_On (Fld, Options)); else Eti_Exception (Field_Opts_Off (Fld, Options)); end if; end Switch_Options; -- | -- | -- | procedure Get_Options (Fld : Field; Options : out Field_Option_Set) is function Field_Opts (Fld : Field) return Field_Option_Set; pragma Import (C, Field_Opts, "field_opts"); begin Options := Field_Opts (Fld); end Get_Options; -- | -- | -- | function Get_Options (Fld : Field := Null_Field) return Field_Option_Set is Fos : Field_Option_Set; begin Get_Options (Fld, Fos); return Fos; end Get_Options; -- | -- |===================================================================== -- | man page form_field_attributes.3x -- |===================================================================== -- | -- | -- | procedure Set_Foreground (Fld : Field; Fore : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First) is function Set_Field_Fore (Fld : Field; Attr : Attributed_Character) return Eti_Error; pragma Import (C, Set_Field_Fore, "set_field_fore"); begin Eti_Exception (Set_Field_Fore (Fld, (Ch => Character'First, Color => Color, Attr => Fore))); end Set_Foreground; -- | -- | -- | procedure Foreground (Fld : Field; Fore : out Character_Attribute_Set) is function Field_Fore (Fld : Field) return Attributed_Character; pragma Import (C, Field_Fore, "field_fore"); begin Fore := Field_Fore (Fld).Attr; end Foreground; procedure Foreground (Fld : Field; Fore : out Character_Attribute_Set; Color : out Color_Pair) is function Field_Fore (Fld : Field) return Attributed_Character; pragma Import (C, Field_Fore, "field_fore"); begin Fore := Field_Fore (Fld).Attr; Color := Field_Fore (Fld).Color; end Foreground; -- | -- | -- | procedure Set_Background (Fld : Field; Back : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First) is function Set_Field_Back (Fld : Field; Attr : Attributed_Character) return Eti_Error; pragma Import (C, Set_Field_Back, "set_field_back"); begin Eti_Exception (Set_Field_Back (Fld, (Ch => Character'First, Color => Color, Attr => Back))); end Set_Background; -- | -- | -- | procedure Background (Fld : Field; Back : out Character_Attribute_Set) is function Field_Back (Fld : Field) return Attributed_Character; pragma Import (C, Field_Back, "field_back"); begin Back := Field_Back (Fld).Attr; end Background; procedure Background (Fld : Field; Back : out Character_Attribute_Set; Color : out Color_Pair) is function Field_Back (Fld : Field) return Attributed_Character; pragma Import (C, Field_Back, "field_back"); begin Back := Field_Back (Fld).Attr; Color := Field_Back (Fld).Color; end Background; -- | -- | -- | procedure Set_Pad_Character (Fld : Field; Pad : Character := Space) is function Set_Field_Pad (Fld : Field; Ch : C_Int) return Eti_Error; pragma Import (C, Set_Field_Pad, "set_field_pad"); begin Eti_Exception (Set_Field_Pad (Fld, C_Int (Character'Pos (Pad)))); end Set_Pad_Character; -- | -- | -- | procedure Pad_Character (Fld : Field; Pad : out Character) is function Field_Pad (Fld : Field) return C_Int; pragma Import (C, Field_Pad, "field_pad"); begin Pad := Character'Val (Field_Pad (Fld)); end Pad_Character; -- | -- |===================================================================== -- | man page form_field_info.3x -- |===================================================================== -- | -- | -- | procedure Info (Fld : Field; Lines : out Line_Count; Columns : out Column_Count; First_Row : out Line_Position; First_Column : out Column_Position; Off_Screen : out Natural; Additional_Buffers : out Buffer_Number) is type C_Int_Access is access all C_Int; function Fld_Info (Fld : Field; L, C, Fr, Fc, Os, Ab : C_Int_Access) return Eti_Error; pragma Import (C, Fld_Info, "field_info"); L, C, Fr, Fc, Os, Ab : aliased C_Int; begin Eti_Exception (Fld_Info (Fld, L'Access, C'Access, Fr'Access, Fc'Access, Os'Access, Ab'Access)); Lines := Line_Count (L); Columns := Column_Count (C); First_Row := Line_Position (Fr); First_Column := Column_Position (Fc); Off_Screen := Natural (Os); Additional_Buffers := Buffer_Number (Ab); end Info; -- | -- | -- | procedure Dynamic_Info (Fld : Field; Lines : out Line_Count; Columns : out Column_Count; Max : out Natural) is type C_Int_Access is access all C_Int; function Dyn_Info (Fld : Field; L, C, M : C_Int_Access) return Eti_Error; pragma Import (C, Dyn_Info, "dynamic_field_info"); L, C, M : aliased C_Int; begin Eti_Exception (Dyn_Info (Fld, L'Access, C'Access, M'Access)); Lines := Line_Count (L); Columns := Column_Count (C); Max := Natural (M); end Dynamic_Info; -- | -- |===================================================================== -- | man page form_win.3x -- |===================================================================== -- | -- | -- | procedure Set_Window (Frm : Form; Win : Window) is function Set_Form_Win (Frm : Form; Win : Window) return Eti_Error; pragma Import (C, Set_Form_Win, "set_form_win"); begin Eti_Exception (Set_Form_Win (Frm, Win)); end Set_Window; -- | -- | -- | function Get_Window (Frm : Form) return Window is function Form_Win (Frm : Form) return Window; pragma Import (C, Form_Win, "form_win"); W : constant Window := Form_Win (Frm); begin return W; end Get_Window; -- | -- | -- | procedure Set_Sub_Window (Frm : Form; Win : Window) is function Set_Form_Sub (Frm : Form; Win : Window) return Eti_Error; pragma Import (C, Set_Form_Sub, "set_form_sub"); begin Eti_Exception (Set_Form_Sub (Frm, Win)); end Set_Sub_Window; -- | -- | -- | function Get_Sub_Window (Frm : Form) return Window is function Form_Sub (Frm : Form) return Window; pragma Import (C, Form_Sub, "form_sub"); W : constant Window := Form_Sub (Frm); begin return W; end Get_Sub_Window; -- | -- | -- | procedure Scale (Frm : Form; Lines : out Line_Count; Columns : out Column_Count) is type C_Int_Access is access all C_Int; function M_Scale (Frm : Form; Yp, Xp : C_Int_Access) return Eti_Error; pragma Import (C, M_Scale, "scale_form"); X, Y : aliased C_Int; begin Eti_Exception (M_Scale (Frm, Y'Access, X'Access)); Lines := Line_Count (Y); Columns := Column_Count (X); end Scale; -- | -- |===================================================================== -- | man page menu_hook.3x -- |===================================================================== -- | -- | -- | procedure Set_Field_Init_Hook (Frm : Form; Proc : Form_Hook_Function) is function Set_Field_Init (Frm : Form; Proc : Form_Hook_Function) return Eti_Error; pragma Import (C, Set_Field_Init, "set_field_init"); begin Eti_Exception (Set_Field_Init (Frm, Proc)); end Set_Field_Init_Hook; -- | -- | -- | procedure Set_Field_Term_Hook (Frm : Form; Proc : Form_Hook_Function) is function Set_Field_Term (Frm : Form; Proc : Form_Hook_Function) return Eti_Error; pragma Import (C, Set_Field_Term, "set_field_term"); begin Eti_Exception (Set_Field_Term (Frm, Proc)); end Set_Field_Term_Hook; -- | -- | -- | procedure Set_Form_Init_Hook (Frm : Form; Proc : Form_Hook_Function) is function Set_Form_Init (Frm : Form; Proc : Form_Hook_Function) return Eti_Error; pragma Import (C, Set_Form_Init, "set_form_init"); begin Eti_Exception (Set_Form_Init (Frm, Proc)); end Set_Form_Init_Hook; -- | -- | -- | procedure Set_Form_Term_Hook (Frm : Form; Proc : Form_Hook_Function) is function Set_Form_Term (Frm : Form; Proc : Form_Hook_Function) return Eti_Error; pragma Import (C, Set_Form_Term, "set_form_term"); begin Eti_Exception (Set_Form_Term (Frm, Proc)); end Set_Form_Term_Hook; -- | -- |===================================================================== -- | man page form_fields.3x -- |===================================================================== -- | -- | -- | procedure Redefine (Frm : Form; Flds : Field_Array_Access) is function Set_Frm_Fields (Frm : Form; Items : System.Address) return Eti_Error; pragma Import (C, Set_Frm_Fields, "set_form_fields"); begin pragma Assert (Flds.all (Flds'Last) = Null_Field); if Flds.all (Flds'Last) /= Null_Field then raise Form_Exception; else Eti_Exception (Set_Frm_Fields (Frm, Flds.all (Flds'First)'Address)); end if; end Redefine; -- | -- | -- | function Fields (Frm : Form; Index : Positive) return Field is use F_Array; function C_Fields (Frm : Form) return Pointer; pragma Import (C, C_Fields, "form_fields"); P : Pointer := C_Fields (Frm); begin if P = null or else Index > Field_Count (Frm) then raise Form_Exception; else P := P + ptrdiff_t (C_Int (Index) - 1); return P.all; end if; end Fields; -- | -- | -- | function Field_Count (Frm : Form) return Natural is function Count (Frm : Form) return C_Int; pragma Import (C, Count, "field_count"); begin return Natural (Count (Frm)); end Field_Count; -- | -- | -- | procedure Move (Fld : Field; Line : Line_Position; Column : Column_Position) is function Move (Fld : Field; L, C : C_Int) return Eti_Error; pragma Import (C, Move, "move_field"); begin Eti_Exception (Move (Fld, C_Int (Line), C_Int (Column))); end Move; -- | -- |===================================================================== -- | man page form_new.3x -- |===================================================================== -- | -- | -- | function Create (Fields : Field_Array_Access) return Form is function NewForm (Fields : System.Address) return Form; pragma Import (C, NewForm, "new_form"); M : Form; begin pragma Assert (Fields.all (Fields'Last) = Null_Field); if Fields.all (Fields'Last) /= Null_Field then raise Form_Exception; else M := NewForm (Fields.all (Fields'First)'Address); if M = Null_Form then raise Form_Exception; end if; return M; end if; end Create; -- | -- | -- | procedure Delete (Frm : in out Form) is function Free (Frm : Form) return Eti_Error; pragma Import (C, Free, "free_form"); begin Eti_Exception (Free (Frm)); Frm := Null_Form; end Delete; -- | -- |===================================================================== -- | man page form_opts.3x -- |===================================================================== -- | -- | -- | procedure Set_Options (Frm : Form; Options : Form_Option_Set) is function Set_Form_Opts (Frm : Form; Opt : Form_Option_Set) return Eti_Error; pragma Import (C, Set_Form_Opts, "set_form_opts"); begin Eti_Exception (Set_Form_Opts (Frm, Options)); end Set_Options; -- | -- | -- | procedure Switch_Options (Frm : Form; Options : Form_Option_Set; On : Boolean := True) is function Form_Opts_On (Frm : Form; Opt : Form_Option_Set) return Eti_Error; pragma Import (C, Form_Opts_On, "form_opts_on"); function Form_Opts_Off (Frm : Form; Opt : Form_Option_Set) return Eti_Error; pragma Import (C, Form_Opts_Off, "form_opts_off"); begin if On then Eti_Exception (Form_Opts_On (Frm, Options)); else Eti_Exception (Form_Opts_Off (Frm, Options)); end if; end Switch_Options; -- | -- | -- | procedure Get_Options (Frm : Form; Options : out Form_Option_Set) is function Form_Opts (Frm : Form) return Form_Option_Set; pragma Import (C, Form_Opts, "form_opts"); begin Options := Form_Opts (Frm); end Get_Options; -- | -- | -- | function Get_Options (Frm : Form := Null_Form) return Form_Option_Set is Fos : Form_Option_Set; begin Get_Options (Frm, Fos); return Fos; end Get_Options; -- | -- |===================================================================== -- | man page form_post.3x -- |===================================================================== -- | -- | -- | procedure Post (Frm : Form; Post : Boolean := True) is function M_Post (Frm : Form) return Eti_Error; pragma Import (C, M_Post, "post_form"); function M_Unpost (Frm : Form) return Eti_Error; pragma Import (C, M_Unpost, "unpost_form"); begin if Post then Eti_Exception (M_Post (Frm)); else Eti_Exception (M_Unpost (Frm)); end if; end Post; -- | -- |===================================================================== -- | man page form_cursor.3x -- |===================================================================== -- | -- | -- | procedure Position_Cursor (Frm : Form) is function Pos_Form_Cursor (Frm : Form) return Eti_Error; pragma Import (C, Pos_Form_Cursor, "pos_form_cursor"); begin Eti_Exception (Pos_Form_Cursor (Frm)); end Position_Cursor; -- | -- |===================================================================== -- | man page form_data.3x -- |===================================================================== -- | -- | -- | function Data_Ahead (Frm : Form) return Boolean is function Ahead (Frm : Form) return C_Int; pragma Import (C, Ahead, "data_ahead"); Res : constant C_Int := Ahead (Frm); begin if Res = Curses_False then return False; else return True; end if; end Data_Ahead; -- | -- | -- | function Data_Behind (Frm : Form) return Boolean is function Behind (Frm : Form) return C_Int; pragma Import (C, Behind, "data_behind"); Res : constant C_Int := Behind (Frm); begin if Res = Curses_False then return False; else return True; end if; end Data_Behind; -- | -- |===================================================================== -- | man page form_driver.3x -- |===================================================================== -- | -- | -- | function Driver (Frm : Form; Key : Key_Code) return Driver_Result is function Frm_Driver (Frm : Form; Key : C_Int) return Eti_Error; pragma Import (C, Frm_Driver, "form_driver"); R : constant Eti_Error := Frm_Driver (Frm, C_Int (Key)); begin case R is when E_Unknown_Command => return Unknown_Request; when E_Invalid_Field => return Invalid_Field; when E_Request_Denied => return Request_Denied; when others => Eti_Exception (R); return Form_Ok; end case; end Driver; -- | -- |===================================================================== -- | man page form_page.3x -- |===================================================================== -- | -- | -- | procedure Set_Current (Frm : Form; Fld : Field) is function Set_Current_Fld (Frm : Form; Fld : Field) return Eti_Error; pragma Import (C, Set_Current_Fld, "set_current_field"); begin Eti_Exception (Set_Current_Fld (Frm, Fld)); end Set_Current; -- | -- | -- | function Current (Frm : Form) return Field is function Current_Fld (Frm : Form) return Field; pragma Import (C, Current_Fld, "current_field"); Fld : constant Field := Current_Fld (Frm); begin if Fld = Null_Field then raise Form_Exception; end if; return Fld; end Current; -- | -- | -- | procedure Set_Page (Frm : Form; Page : Page_Number := Page_Number'First) is function Set_Frm_Page (Frm : Form; Pg : C_Int) return Eti_Error; pragma Import (C, Set_Frm_Page, "set_form_page"); begin Eti_Exception (Set_Frm_Page (Frm, C_Int (Page))); end Set_Page; -- | -- | -- | function Page (Frm : Form) return Page_Number is function Get_Page (Frm : Form) return C_Int; pragma Import (C, Get_Page, "form_page"); P : constant C_Int := Get_Page (Frm); begin if P < 0 then raise Form_Exception; else return Page_Number (P); end if; end Page; function Get_Index (Fld : Field) return Positive is function Get_Fieldindex (Fld : Field) return C_Int; pragma Import (C, Get_Fieldindex, "field_index"); Res : constant C_Int := Get_Fieldindex (Fld); begin if Res = Curses_Err then raise Form_Exception; end if; return Positive (Natural (Res) + Positive'First); end Get_Index; -- | -- |===================================================================== -- | man page form_new_page.3x -- |===================================================================== -- | -- | -- | procedure Set_New_Page (Fld : Field; New_Page : Boolean := True) is function Set_Page (Fld : Field; Flg : C_Int) return Eti_Error; pragma Import (C, Set_Page, "set_new_page"); begin Eti_Exception (Set_Page (Fld, Boolean'Pos (New_Page))); end Set_New_Page; -- | -- | -- | function Is_New_Page (Fld : Field) return Boolean is function Is_New (Fld : Field) return C_Int; pragma Import (C, Is_New, "new_page"); Res : constant C_Int := Is_New (Fld); begin if Res = Curses_False then return False; else return True; end if; end Is_New_Page; procedure Free (FA : in out Field_Array_Access; Free_Fields : Boolean := False) is procedure Release is new Ada.Unchecked_Deallocation (Field_Array, Field_Array_Access); begin if FA /= null and then Free_Fields then for I in FA'First .. (FA'Last - 1) loop if FA.all (I) /= Null_Field then Delete (FA.all (I)); end if; end loop; end if; Release (FA); end Free; -- |===================================================================== function Default_Field_Options return Field_Option_Set is begin return Get_Options (Null_Field); end Default_Field_Options; function Default_Form_Options return Form_Option_Set is begin return Get_Options (Null_Form); end Default_Form_Options; end Terminal_Interface.Curses.Forms; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types.adb0000644000175100001440000002532312405112137025345 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.28 $ -- $Date: 2014/09/13 19:00:47 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; with Ada.Unchecked_Deallocation; with System.Address_To_Access_Conversions; -- | -- |===================================================================== -- | man page form_fieldtype.3x -- |===================================================================== -- | package body Terminal_Interface.Curses.Forms.Field_Types is use type System.Address; package Argument_Conversions is new System.Address_To_Access_Conversions (Argument); function Get_Fieldtype (F : Field) return C_Field_Type; pragma Import (C, Get_Fieldtype, "field_type"); function Get_Arg (F : Field) return System.Address; pragma Import (C, Get_Arg, "field_arg"); -- | -- |===================================================================== -- | man page form_field_validation.3x -- |===================================================================== -- | -- | -- | function Get_Type (Fld : Field) return Field_Type_Access is Low_Level : constant C_Field_Type := Get_Fieldtype (Fld); Arg : Argument_Access; begin if Low_Level = Null_Field_Type then return null; else if Low_Level = M_Builtin_Router or else Low_Level = M_Generic_Type or else Low_Level = M_Choice_Router or else Low_Level = M_Generic_Choice then Arg := Argument_Access (Argument_Conversions.To_Pointer (Get_Arg (Fld))); if Arg = null then raise Form_Exception; else return Arg.all.Typ; end if; else raise Form_Exception; end if; end if; end Get_Type; function Copy_Arg (Usr : System.Address) return System.Address is begin return Usr; end Copy_Arg; procedure Free_Arg (Usr : System.Address) is procedure Free_Type is new Ada.Unchecked_Deallocation (Field_Type'Class, Field_Type_Access); procedure Freeargs is new Ada.Unchecked_Deallocation (Argument, Argument_Access); To_Be_Free : Argument_Access := Argument_Access (Argument_Conversions.To_Pointer (Usr)); Low_Level : C_Field_Type; begin if To_Be_Free /= null then if To_Be_Free.all.Usr /= System.Null_Address then Low_Level := To_Be_Free.all.Cft; if Low_Level.all.Freearg /= null then Low_Level.all.Freearg (To_Be_Free.all.Usr); end if; end if; if To_Be_Free.all.Typ /= null then Free_Type (To_Be_Free.all.Typ); end if; Freeargs (To_Be_Free); end if; end Free_Arg; procedure Wrap_Builtin (Fld : Field; Typ : Field_Type'Class; Cft : C_Field_Type := C_Builtin_Router) is Usr_Arg : constant System.Address := Get_Arg (Fld); Low_Level : constant C_Field_Type := Get_Fieldtype (Fld); Arg : Argument_Access; function Set_Fld_Type (F : Field := Fld; Cf : C_Field_Type := Cft; Arg1 : Argument_Access) return Eti_Error; pragma Import (C, Set_Fld_Type, "set_field_type_user"); begin pragma Assert (Low_Level /= Null_Field_Type); if Cft /= C_Builtin_Router and then Cft /= C_Choice_Router then raise Form_Exception; else Arg := new Argument'(Usr => System.Null_Address, Typ => new Field_Type'Class'(Typ), Cft => Get_Fieldtype (Fld)); if Usr_Arg /= System.Null_Address then if Low_Level.all.Copyarg /= null then Arg.all.Usr := Low_Level.all.Copyarg (Usr_Arg); else Arg.all.Usr := Usr_Arg; end if; end if; Eti_Exception (Set_Fld_Type (Arg1 => Arg)); end if; end Wrap_Builtin; function Field_Check_Router (Fld : Field; Usr : System.Address) return Curses_Bool is Arg : constant Argument_Access := Argument_Access (Argument_Conversions.To_Pointer (Usr)); begin pragma Assert (Arg /= null and then Arg.all.Cft /= Null_Field_Type and then Arg.all.Typ /= null); if Arg.all.Cft.all.Fcheck /= null then return Arg.all.Cft.all.Fcheck (Fld, Arg.all.Usr); else return 1; end if; end Field_Check_Router; function Char_Check_Router (Ch : C_Int; Usr : System.Address) return Curses_Bool is Arg : constant Argument_Access := Argument_Access (Argument_Conversions.To_Pointer (Usr)); begin pragma Assert (Arg /= null and then Arg.all.Cft /= Null_Field_Type and then Arg.all.Typ /= null); if Arg.all.Cft.all.Ccheck /= null then return Arg.all.Cft.all.Ccheck (Ch, Arg.all.Usr); else return 1; end if; end Char_Check_Router; function Next_Router (Fld : Field; Usr : System.Address) return Curses_Bool is Arg : constant Argument_Access := Argument_Access (Argument_Conversions.To_Pointer (Usr)); begin pragma Assert (Arg /= null and then Arg.all.Cft /= Null_Field_Type and then Arg.all.Typ /= null); if Arg.all.Cft.all.Next /= null then return Arg.all.Cft.all.Next (Fld, Arg.all.Usr); else return 1; end if; end Next_Router; function Prev_Router (Fld : Field; Usr : System.Address) return Curses_Bool is Arg : constant Argument_Access := Argument_Access (Argument_Conversions.To_Pointer (Usr)); begin pragma Assert (Arg /= null and then Arg.all.Cft /= Null_Field_Type and then Arg.all.Typ /= null); if Arg.all.Cft.all.Prev /= null then return Arg.all.Cft.all.Prev (Fld, Arg.all.Usr); else return 1; end if; end Prev_Router; -- ----------------------------------------------------------------------- -- function C_Builtin_Router return C_Field_Type is T : C_Field_Type; begin if M_Builtin_Router = Null_Field_Type then T := New_Fieldtype (Field_Check_Router'Access, Char_Check_Router'Access); if T = Null_Field_Type then raise Form_Exception; else Eti_Exception (Set_Fieldtype_Arg (T, Make_Arg'Access, Copy_Arg'Access, Free_Arg'Access)); end if; M_Builtin_Router := T; end if; pragma Assert (M_Builtin_Router /= Null_Field_Type); return M_Builtin_Router; end C_Builtin_Router; -- ----------------------------------------------------------------------- -- function C_Choice_Router return C_Field_Type is T : C_Field_Type; begin if M_Choice_Router = Null_Field_Type then T := New_Fieldtype (Field_Check_Router'Access, Char_Check_Router'Access); if T = Null_Field_Type then raise Form_Exception; else Eti_Exception (Set_Fieldtype_Arg (T, Make_Arg'Access, Copy_Arg'Access, Free_Arg'Access)); Eti_Exception (Set_Fieldtype_Choice (T, Next_Router'Access, Prev_Router'Access)); end if; M_Choice_Router := T; end if; pragma Assert (M_Choice_Router /= Null_Field_Type); return M_Choice_Router; end C_Choice_Router; end Terminal_Interface.Curses.Forms.Field_Types; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-numeric.adb0000644000175100001440000000744612340207631027015 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.Numeric -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.14 $ -- $Date: 2014/05/24 21:31:05 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms.Field_Types.Numeric is procedure Set_Field_Type (Fld : Field; Typ : Numeric_Field) is type Double is new Interfaces.C.double; function Set_Fld_Type (F : Field := Fld; Arg1 : C_Int; Arg2 : Double; Arg3 : Double) return Eti_Error; pragma Import (C, Set_Fld_Type, "set_field_type_numeric"); begin Eti_Exception (Set_Fld_Type (Arg1 => C_Int (Typ.Precision), Arg2 => Double (Typ.Lower_Limit), Arg3 => Double (Typ.Upper_Limit))); Wrap_Builtin (Fld, Typ); end Set_Field_Type; end Terminal_Interface.Curses.Forms.Field_Types.Numeric; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-intfield.adb0000644000175100001440000000736612340207631027152 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.IntField -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.13 $ -- $Date: 2014/05/24 21:31:05 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms.Field_Types.IntField is procedure Set_Field_Type (Fld : Field; Typ : Integer_Field) is function Set_Fld_Type (F : Field := Fld; Arg1 : C_Int; Arg2 : C_Long_Int; Arg3 : C_Long_Int) return Eti_Error; pragma Import (C, Set_Fld_Type, "set_field_type_integer"); begin Eti_Exception (Set_Fld_Type (Arg1 => C_Int (Typ.Precision), Arg2 => C_Long_Int (Typ.Lower_Limit), Arg3 => C_Long_Int (Typ.Upper_Limit))); Wrap_Builtin (Fld, Typ); end Set_Field_Type; end Terminal_Interface.Curses.Forms.Field_Types.IntField; ncurses-6.0-20160213/Ada95/src/Makefile.in0000644000175100001440000002621612560514435016167 0ustar tomusers############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Juergen Pfeifer, 1996 # # $Id: Makefile.in,v 1.71 2015/08/05 23:15:41 tom Exp $ # .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile MODEL = ../../@DFT_OBJ_SUBDIR@ DESTDIR = @DESTDIR@ top_srcdir = @top_srcdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ libdir = @libdir@ LIBDIR = $(DESTDIR)$(libdir) ADA_INCLUDE = $(DESTDIR)@ADA_INCLUDE@ ADA_OBJECTS = $(DESTDIR)@ADA_OBJECTS@ INSTALL = @INSTALL@ INSTALL_LIB = @INSTALL@ @INSTALL_LIB@ AR = @AR@ ARFLAGS = @ARFLAGS@ AWK = @AWK@ LN_S = @LN_S@ CC = @CC@ CFLAGS = @CFLAGS@ CPPFLAGS = @ACPPFLAGS@ @CPPFLAGS@ \ -DHAVE_CONFIG_H -I$(srcdir) CCFLAGS = $(CPPFLAGS) $(CFLAGS) CFLAGS_NORMAL = $(CCFLAGS) CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) LINK = $(CC) LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@ RANLIB = @RANLIB@ ################################################################################ ADA = @cf_ada_compiler@ ADAPREP = gnatprep ADAFLAGS = @ADAFLAGS@ -I. -I$(srcdir) LIB_NAME = AdaCurses SONAME = @ADA_SHAREDLIB@ GNAT_PROJECT = $(srcdir)/library.gpr # build/source are the Ada95 tree BUILD_DIR = .. SOURCE_DIR = .. BUILD_DIR_LIB = $(BUILD_DIR)/lib SOURCE_DIR_SRC = $(SOURCE_DIR)/src ADAMAKE = @cf_ada_make@ ADAMAKEFLAGS = \ -P$(GNAT_PROJECT) \ -XBUILD_DIR=`cd $(BUILD_DIR);pwd` \ -XSOURCE_DIR=`cd $(SOURCE_DIR);pwd` \ -XSOURCE_DIR2=`cd $(srcdir);pwd` \ -XLIB_NAME=$(LIB_NAME) \ -XSONAME=$(SONAME) CARGS = -cargs $(ADAFLAGS) LARGS = STATIC_LIBNAME = lib$(LIB_NAME).a SHARED_LIBNAME = $(SONAME) SHARED_SYMLINK = lib$(LIB_NAME).so ALIB = @cf_ada_package@ ABASE = $(ALIB)-curses ################################################################################ GENERATED_SOURCES=$(ABASE).ads \ $(ABASE).adb \ $(ABASE)-aux.ads \ $(ABASE)-trace.ads \ $(ABASE)-menus.ads \ $(ABASE)-forms.ads \ $(ABASE)-mouse.ads \ $(ABASE)-panels.ads \ $(ABASE)-menus-menu_user_data.ads \ $(ABASE)-menus-item_user_data.ads \ $(ABASE)-forms-form_user_data.ads \ $(ABASE)-forms-field_types.ads \ $(ABASE)-forms-field_user_data.ads \ $(ABASE)-panels-user_data.ads ################################################################################ LIBOBJS=$(ALIB).o \ $(ABASE)-aux.o \ $(ABASE).o \ $(ABASE)-terminfo.o \ $(ABASE)-termcap.o \ $(ABASE)-putwin.o \ $(ABASE)-trace.o \ $(ABASE)-mouse.o \ $(ABASE)-panels.o \ $(ABASE)-menus.o \ $(ABASE)-forms.o \ $(ABASE)-forms-field_types.o \ $(ABASE)-forms-field_types-alpha.o \ $(ABASE)-forms-field_types-alphanumeric.o \ $(ABASE)-forms-field_types-intfield.o \ $(ABASE)-forms-field_types-numeric.o \ $(ABASE)-forms-field_types-regexp.o \ $(ABASE)-forms-field_types-enumeration.o \ $(ABASE)-forms-field_types-ipv4_address.o \ $(ABASE)-forms-field_types-user.o \ $(ABASE)-forms-field_types-user-choice.o \ $(ABASE)-text_io.o \ $(ABASE)-text_io-aux.o # Ada object files for generic packages. Since gnat 3.10 they are # also compiled GENOBJS=$(ABASE)-menus-menu_user_data.o \ $(ABASE)-menus-item_user_data.o \ $(ABASE)-forms-form_user_data.o \ $(ABASE)-forms-field_user_data.o \ $(ABASE)-forms-field_types-enumeration-ada.o \ $(ABASE)-panels-user_data.o \ $(ABASE)-text_io-integer_io.o \ $(ABASE)-text_io-float_io.o \ $(ABASE)-text_io-fixed_io.o \ $(ABASE)-text_io-decimal_io.o \ $(ABASE)-text_io-enumeration_io.o \ $(ABASE)-text_io-modular_io.o \ $(ABASE)-text_io-complex_io.o all :: $(BUILD_DIR_LIB)/$(STATIC_LIBNAME) @echo done $(ADA_INCLUDE) \ $(ADA_OBJECTS) \ $(LIBDIR) \ $(BUILD_DIR_LIB) : mkdir -p $@ sources : @echo made $@ libs \ install \ install.libs :: \ $(BUILD_DIR_LIB)/$(STATIC_LIBNAME) @echo made $(STATIC_LIBNAME) install \ install.libs :: \ $(BUILD_DIR_LIB)/$(STATIC_LIBNAME) \ $(ADA_OBJECTS) @$(INSTALL_LIB) \ $(BUILD_DIR_LIB)/$(STATIC_LIBNAME) \ $(ADA_OBJECTS) uninstall \ uninstall.libs :: @rm -f $(ADA_OBJECTS)/$(STATIC_LIBNAME) mostlyclean :: rm -f *.o *.ali b_t*.* *.s $(PROGS) a.out core b_*_test.c *.xr[bs] *.a clean :: mostlyclean rm -f $(ABASE)-trace.adb distclean :: clean rm -f Makefile realclean :: distclean BASEDEPS=$(ABASE).ads $(ABASE)-aux.ads $(ABASE).adb $(ABASE)-trace.adb : $(srcdir)/$(ABASE)-trace.adb_p rm -f $@ $(ADAPREP) -DADA_TRACE=@ADA_TRACE@ @GNATPREP_OPTS@ $(srcdir)/$(ABASE)-trace.adb_p $@ ############################################################################### # Use these definitions when building a shared library. SHARED_C_OBJS = c_varargs_to_ada.o c_threaded_variables.o ncurses_compat.o SHARED_OBJS = $(SHARED_C_OBJS) @USE_OLD_MAKERULES@$(LIBOBJS) @cf_generic_objects@ c_varargs_to_ada.o : $(srcdir)/c_varargs_to_ada.c $(CC) $(CFLAGS_DEFAULT) -c -o $@ $(srcdir)/c_varargs_to_ada.c c_threaded_variables.o : $(srcdir)/c_threaded_variables.c $(CC) $(CFLAGS_DEFAULT) -c -o $@ $(srcdir)/c_threaded_variables.c ncurses_compat.o : $(srcdir)/ncurses_compat.c $(CC) $(CFLAGS_DEFAULT) -c -o $@ $(srcdir)/ncurses_compat.c ############################################################################### # Use these definitions when building a static library. STATIC_C_OBJS = static_c_varargs_to_ada.o static_c_threaded_variables.o static_ncurses_compat.o STATIC_OBJS = $(STATIC_C_OBJS) @USE_OLD_MAKERULES@$(LIBOBJS) @cf_generic_objects@ static_c_varargs_to_ada.o : $(srcdir)/c_varargs_to_ada.c $(CC) $(CFLAGS_NORMAL) -c -o $@ $(srcdir)/c_varargs_to_ada.c static_c_threaded_variables.o : $(srcdir)/c_threaded_variables.c $(CC) $(CFLAGS_NORMAL) -c -o $@ $(srcdir)/c_threaded_variables.c static_ncurses_compat.o : $(srcdir)/ncurses_compat.c $(CC) $(CFLAGS_NORMAL) -c -o $@ $(srcdir)/ncurses_compat.c ############################################################################### @USE_OLD_MAKERULES@$(BUILD_DIR_LIB)/$(STATIC_LIBNAME) :: \ @USE_OLD_MAKERULES@ $(BUILD_DIR_LIB) \ @USE_OLD_MAKERULES@ $(STATIC_OBJS) @USE_OLD_MAKERULES@ $(AR) $(ARFLAGS) $@ $(STATIC_OBJS) $(BUILD_DIR)/static-ali : ; mkdir -p $@ $(BUILD_DIR)/static-obj : ; mkdir -p $@ STATIC_DIRS = \ $(BUILD_DIR_LIB) \ $(BUILD_DIR)/static-ali \ $(BUILD_DIR)/static-obj @USE_GNAT_PROJECTS@$(BUILD_DIR_LIB)/$(STATIC_LIBNAME) :: \ @USE_GNAT_PROJECTS@ $(ABASE)-trace.adb \ @USE_GNAT_PROJECTS@ $(STATIC_C_OBJS) \ @USE_GNAT_PROJECTS@ $(STATIC_DIRS) @USE_GNAT_PROJECTS@ $(ADAMAKE) $(ADAMAKEFLAGS) -XLIB_KIND=static @USE_GNAT_PROJECTS@ $(AR) $(ARFLAGS) $@ $(STATIC_C_OBJS) @USE_GNAT_PROJECTS@ @USE_GNAT_LIBRARIES@install \ @USE_GNAT_LIBRARIES@install.libs :: \ @USE_GNAT_LIBRARIES@ $(ADA_OBJECTS) @USE_GNAT_LIBRARIES@ $(INSTALL_LIB) \ @USE_GNAT_LIBRARIES@ $(BUILD_DIR)/static-ali/*.ali \ @USE_GNAT_LIBRARIES@ $(ADA_OBJECTS) uninstall \ uninstall.libs :: @rm -f $(ADA_OBJECTS)/$(STATIC_LIBNAME) @USE_GNAT_LIBRARIES@uninstall \ @USE_GNAT_LIBRARIES@uninstall.libs :: @USE_GNAT_LIBRARIES@ @$(SHELL) -c 'for name in $(BUILD_DIR)/static-ali/*.ali ; do rm -f $(ADA_OBJECTS)/`basename $$name`; done' $(BUILD_DIR)/dynamic-ali : ; mkdir -p $@ $(BUILD_DIR)/dynamic-obj : ; mkdir -p $@ SHARED_DIRS = \ $(BUILD_DIR_LIB) \ $(BUILD_DIR)/dynamic-ali \ $(BUILD_DIR)/dynamic-obj @MAKE_ADA_SHAREDLIB@all :: $(BUILD_DIR_LIB)/$(SHARED_LIBNAME) @MAKE_ADA_SHAREDLIB@$(BUILD_DIR_LIB)/$(SHARED_LIBNAME) :: \ @MAKE_ADA_SHAREDLIB@ $(ABASE)-trace.adb \ @MAKE_ADA_SHAREDLIB@ $(SHARED_DIRS) \ @MAKE_ADA_SHAREDLIB@ $(SHARED_OBJS) @MAKE_ADA_SHAREDLIB@ cp $(SHARED_OBJS) $(BUILD_DIR)/dynamic-obj/ @MAKE_ADA_SHAREDLIB@ $(ADAMAKE) $(ADAMAKEFLAGS) -XLIB_KIND=dynamic install \ install.libs :: $(ADA_INCLUDE) $(INSTALL_LIB) \ $(SOURCE_DIR_SRC)/*.ad[sb] \ $(ADA_INCLUDE) install \ install.libs :: $(ADA_INCLUDE) $(INSTALL_LIB) \ $(GENERATED_SOURCES) \ $(ADA_INCLUDE) uninstall \ uninstall.libs :: $(SHELL) -c 'for name in $(SOURCE_DIR_SRC)/*.ad[sb] $(GENERATED_SOURCES); do rm -f $(ADA_INCLUDE)/`basename $$name`; done' @MAKE_ADA_SHAREDLIB@install \ @MAKE_ADA_SHAREDLIB@install.libs :: $(ADA_OBJECTS) $(LIBDIR) @MAKE_ADA_SHAREDLIB@ $(INSTALL_LIB) \ @MAKE_ADA_SHAREDLIB@ $(BUILD_DIR)/dynamic-ali/* \ @MAKE_ADA_SHAREDLIB@ $(ADA_OBJECTS) @MAKE_ADA_SHAREDLIB@ $(INSTALL_LIB) \ @MAKE_ADA_SHAREDLIB@ $(BUILD_DIR_LIB)/$(SHARED_LIBNAME) \ @MAKE_ADA_SHAREDLIB@ $(LIBDIR) @MAKE_ADA_SHAREDLIB@ cd $(LIBDIR) && $(LN_S) $(SHARED_LIBNAME) $(SHARED_SYMLINK) @MAKE_ADA_SHAREDLIB@ @MAKE_ADA_SHAREDLIB@uninstall \ @MAKE_ADA_SHAREDLIB@uninstall.libs :: @MAKE_ADA_SHAREDLIB@ $(SHELL) -c 'for name in $(BUILD_DIR)/dynamic-ali/* ; do rm -f $(ADA_OBJECTS)/`basename $$name`; done' @MAKE_ADA_SHAREDLIB@ @MAKE_ADA_SHAREDLIB@uninstall \ @MAKE_ADA_SHAREDLIB@uninstall.libs :: @MAKE_ADA_SHAREDLIB@ rm -f $(LIBDIR)/$(SHARED_SYMLINK) @MAKE_ADA_SHAREDLIB@ rm -f $(LIBDIR)/$(SHARED_LIBNAME) clean :: rm -rf $(BUILD_DIR)/*-ali rm -rf $(BUILD_DIR)/*-obj rm -rf $(BUILD_DIR_LIB) ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-mouse.adb0000644000175100001440000002037512405113232023041 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Mouse -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.25 $ -- $Date: 2014/09/13 19:10:18 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; with Interfaces.C; use Interfaces.C; use Interfaces; package body Terminal_Interface.Curses.Mouse is use type System.Bit_Order; function Has_Mouse return Boolean is function Mouse_Avail return C_Int; pragma Import (C, Mouse_Avail, "has_mouse"); begin if Has_Key (Key_Mouse) or else Mouse_Avail /= 0 then return True; else return False; end if; end Has_Mouse; function Get_Mouse return Mouse_Event is type Event_Access is access all Mouse_Event; function Getmouse (Ev : Event_Access) return C_Int; pragma Import (C, Getmouse, "getmouse"); Event : aliased Mouse_Event; begin if Getmouse (Event'Access) = Curses_Err then raise Curses_Exception; end if; return Event; end Get_Mouse; procedure Register_Reportable_Event (Button : Mouse_Button; State : Button_State; Mask : in out Event_Mask) is Button_Nr : constant Natural := Mouse_Button'Pos (Button); State_Nr : constant Natural := Button_State'Pos (State); begin if Button in Modifier_Keys and then State /= Pressed then raise Curses_Exception; else if Button in Real_Buttons then Mask := Mask or ((2 ** (6 * Button_Nr)) ** State_Nr); else Mask := Mask or (BUTTON_CTRL ** (Button_Nr - 4)); end if; end if; end Register_Reportable_Event; procedure Register_Reportable_Events (Button : Mouse_Button; State : Button_States; Mask : in out Event_Mask) is begin for S in Button_States'Range loop if State (S) then Register_Reportable_Event (Button, S, Mask); end if; end loop; end Register_Reportable_Events; function Start_Mouse (Mask : Event_Mask := All_Events) return Event_Mask is function MMask (M : Event_Mask; O : access Event_Mask) return Event_Mask; pragma Import (C, MMask, "mousemask"); R : Event_Mask; Old : aliased Event_Mask; begin R := MMask (Mask, Old'Access); if R = No_Events then Beep; end if; return Old; end Start_Mouse; procedure End_Mouse (Mask : Event_Mask := No_Events) is begin if Mask /= No_Events then Beep; end if; end End_Mouse; procedure Dispatch_Event (Mask : Event_Mask; Button : out Mouse_Button; State : out Button_State); procedure Dispatch_Event (Mask : Event_Mask; Button : out Mouse_Button; State : out Button_State) is L : Event_Mask; begin Button := Alt; -- preset to non real button; if (Mask and BUTTON1_EVENTS) /= 0 then Button := Left; elsif (Mask and BUTTON2_EVENTS) /= 0 then Button := Middle; elsif (Mask and BUTTON3_EVENTS) /= 0 then Button := Right; elsif (Mask and BUTTON4_EVENTS) /= 0 then Button := Button4; end if; if Button in Real_Buttons then L := 2 ** (6 * Mouse_Button'Pos (Button)); for I in Button_State'Range loop if (Mask and L) /= 0 then State := I; exit; end if; L := 2 * L; end loop; else State := Pressed; if (Mask and BUTTON_CTRL) /= 0 then Button := Control; elsif (Mask and BUTTON_SHIFT) /= 0 then Button := Shift; elsif (Mask and BUTTON_ALT) /= 0 then Button := Alt; end if; end if; end Dispatch_Event; procedure Get_Event (Event : Mouse_Event; Y : out Line_Position; X : out Column_Position; Button : out Mouse_Button; State : out Button_State) is Mask : constant Event_Mask := Event.Bstate; begin X := Column_Position (Event.X); Y := Line_Position (Event.Y); Dispatch_Event (Mask, Button, State); end Get_Event; procedure Unget_Mouse (Event : Mouse_Event) is function Ungetmouse (Ev : Mouse_Event) return C_Int; pragma Import (C, Ungetmouse, "ungetmouse"); begin if Ungetmouse (Event) = Curses_Err then raise Curses_Exception; end if; end Unget_Mouse; function Enclosed_In_Window (Win : Window := Standard_Window; Event : Mouse_Event) return Boolean is function Wenclose (Win : Window; Y : C_Int; X : C_Int) return Curses_Bool; pragma Import (C, Wenclose, "wenclose"); begin if Wenclose (Win, C_Int (Event.Y), C_Int (Event.X)) = Curses_Bool_False then return False; else return True; end if; end Enclosed_In_Window; function Mouse_Interval (Msec : Natural := 200) return Natural is function Mouseinterval (Msec : C_Int) return C_Int; pragma Import (C, Mouseinterval, "mouseinterval"); begin return Natural (Mouseinterval (C_Int (Msec))); end Mouse_Interval; end Terminal_Interface.Curses.Mouse; ncurses-6.0-20160213/Ada95/src/library.gpr0000644000175100001440000000624112342477045016277 0ustar tomusers------------------------------------------------------------------------------ -- Copyright (c) 2010-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- $Id: library.gpr,v 1.9 2014/06/01 01:13:09 tom Exp $ -- http://gcc.gnu.org/onlinedocs/gnat_ugn_unw/Library-Projects.html -- http://www.adaworld.com/debian/debian-ada-policy.html project Library is Build_Dir := External ("BUILD_DIR"); Source_Dir := External ("SOURCE_DIR"); Source_Dir2 := External ("SOURCE_DIR2"); Kind := External ("LIB_KIND"); for Library_Name use External ("LIB_NAME"); for Library_Version use External ("SONAME"); for Library_Kind use Kind; for Library_Dir use Build_Dir & "/lib"; for Object_Dir use Build_Dir & "/" & Kind & "-obj"; for Library_ALI_Dir use Build_Dir & "/" & Kind & "-ali"; for Source_Dirs use (Source_Dir & "/src", Source_Dir2, Build_Dir & "/src"); for Library_Options use ("-lncurses", "-lpanel", "-lmenu", "-lform"); package Compiler is for Default_Switches ("Ada") use ("-g", "-O2", "-gnatafno", "-gnatVa", -- All validity checks "-gnatwa"); -- Activate all optional errors end Compiler; for Languages use ("C", "Ada"); end Library; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.adb0000644000175100001440000000703112340207631030011 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.13 $ -- $Date: 2014/05/24 21:31:05 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric is procedure Set_Field_Type (Fld : Field; Typ : AlphaNumeric_Field) is function Set_Fld_Type (F : Field := Fld; Arg1 : C_Int) return Eti_Error; pragma Import (C, Set_Fld_Type, "set_field_type_alnum"); begin Eti_Exception (Set_Fld_Type (Arg1 => C_Int (Typ.Minimum_Field_Width))); Wrap_Builtin (Fld, Typ); end Set_Field_Type; end Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-intfield.ads0000644000175100001440000000657411315445666027210 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.IntField -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.IntField is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.IntField); type Integer_Field is new Field_Type with record Precision : Natural; Lower_Limit : Integer; Upper_Limit : Integer; end record; procedure Set_Field_Type (Fld : Field; Typ : Integer_Field); pragma Inline (Set_Field_Type); end Terminal_Interface.Curses.Forms.Field_Types.IntField; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-enumeration_io.ads0000644000175100001440000000661211315445471026432 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Enumeration_IO -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type Enum is (<>); package Terminal_Interface.Curses.Text_IO.Enumeration_IO is Default_Width : Field := 0; Default_Setting : Type_Set := Mixed_Case; procedure Put (Win : Window; Item : Enum; Width : Field := Default_Width; Set : Type_Set := Default_Setting); procedure Put (Item : Enum; Width : Field := Default_Width; Set : Type_Set := Default_Setting); private pragma Inline (Put); end Terminal_Interface.Curses.Text_IO.Enumeration_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-terminfo.ads0000644000175100001440000001025307746514446023577 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Terminfo -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.3 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; package Terminal_Interface.Curses.Terminfo is pragma Preelaborate (Terminal_Interface.Curses.Terminfo); -- |===================================================================== -- | Man page curs_terminfo.3x -- |===================================================================== -- Not implemented: setupterm, setterm, set_curterm, del_curterm, -- restartterm, tparm, putp, vidputs, vidattr, -- mvcur type Terminfo_String is new String; -- | procedure Get_String (Name : String; Value : out Terminfo_String; Result : out Boolean); function Has_String (Name : String) return Boolean; -- AKA: tigetstr() -- | function Get_Flag (Name : String) return Boolean; -- AKA: tigetflag() -- | function Get_Number (Name : String) return Integer; -- AKA: tigetnum() type putctype is access function (c : Interfaces.C.int) return Interfaces.C.int; pragma Convention (C, putctype); -- | procedure Put_String (Str : Terminfo_String; affcnt : Natural := 1; putc : putctype := null); -- AKA: tputs() end Terminal_Interface.Curses.Terminfo; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-decimal_io.ads0000644000175100001440000000672711315445471025511 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Decimal_IO -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type Num is delta <> digits <>; package Terminal_Interface.Curses.Text_IO.Decimal_IO is Default_Fore : Field := Num'Fore; Default_Aft : Field := Num'Aft; Default_Exp : Field := 0; procedure Put (Win : Window; Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); procedure Put (Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); private pragma Inline (Put); end Terminal_Interface.Curses.Text_IO.Decimal_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.adb0000644000175100001440000000674412340207631027742 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.13 $ -- $Date: 2014/05/24 21:31:05 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address is procedure Set_Field_Type (Fld : Field; Typ : Internet_V4_Address_Field) is function Set_Fld_Type (F : Field := Fld) return Eti_Error; pragma Import (C, Set_Fld_Type, "set_field_type_ipv4"); begin Eti_Exception (Set_Fld_Type); Wrap_Builtin (Fld, Typ); end Set_Field_Type; end Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-putwin.ads0000644000175100001440000000614107746514446023303 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.PutWin -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.3 $ -- Binding Version 01.00 with Ada.Streams.Stream_IO; package Terminal_Interface.Curses.PutWin is procedure Put_Window (Win : Window; File : Ada.Streams.Stream_IO.File_Type); function Get_Window (File : Ada.Streams.Stream_IO.File_Type) return Window; end Terminal_Interface.Curses.PutWin; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-decimal_io.adb0000644000175100001440000000742511315445471025464 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Decimal_IO -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; with Terminal_Interface.Curses.Text_IO.Aux; package body Terminal_Interface.Curses.Text_IO.Decimal_IO is package Aux renames Terminal_Interface.Curses.Text_IO.Aux; package DIO is new Ada.Text_IO.Decimal_IO (Num); procedure Put (Win : Window; Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp) is Buf : String (1 .. Field'Last); Len : Field := Fore + 1 + Aft; begin if Exp > 0 then Len := Len + 1 + Exp; end if; DIO.Put (Buf, Item, Aft, Exp); Aux.Put_Buf (Win, Buf, Len, False); end Put; procedure Put (Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp) is begin Put (Get_Window, Item, Fore, Aft, Exp); end Put; end Terminal_Interface.Curses.Text_IO.Decimal_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-alpha.adb0000644000175100001440000000700412340207631026426 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.Alpha -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.13 $ -- $Date: 2014/05/24 21:31:05 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms.Field_Types.Alpha is procedure Set_Field_Type (Fld : Field; Typ : Alpha_Field) is function Set_Fld_Type (F : Field := Fld; Arg1 : C_Int) return Eti_Error; pragma Import (C, Set_Fld_Type, "set_field_type_alpha"); begin Eti_Exception (Set_Fld_Type (Arg1 => C_Int (Typ.Minimum_Field_Width))); Wrap_Builtin (Fld, Typ); end Set_Field_Type; end Terminal_Interface.Curses.Forms.Field_Types.Alpha; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-user-choice.adb0000644000175100001440000001225712340207631027555 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.User.Choice -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.20 $ -- $Date: 2014/05/24 21:31:05 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System.Address_To_Access_Conversions; with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms.Field_Types.User.Choice is package Argument_Conversions is new System.Address_To_Access_Conversions (Argument); function Generic_Next (Fld : Field; Usr : System.Address) return Curses_Bool is Result : Boolean; Udf : constant User_Defined_Field_Type_With_Choice_Access := User_Defined_Field_Type_With_Choice_Access (Argument_Access (Argument_Conversions.To_Pointer (Usr)).all.Typ); begin Result := Next (Fld, Udf.all); return Curses_Bool (Boolean'Pos (Result)); end Generic_Next; function Generic_Prev (Fld : Field; Usr : System.Address) return Curses_Bool is Result : Boolean; Udf : constant User_Defined_Field_Type_With_Choice_Access := User_Defined_Field_Type_With_Choice_Access (Argument_Access (Argument_Conversions.To_Pointer (Usr)).all.Typ); begin Result := Previous (Fld, Udf.all); return Curses_Bool (Boolean'Pos (Result)); end Generic_Prev; -- ----------------------------------------------------------------------- -- function C_Generic_Choice return C_Field_Type is Res : Eti_Error; T : C_Field_Type; begin if M_Generic_Choice = Null_Field_Type then T := New_Fieldtype (Generic_Field_Check'Access, Generic_Char_Check'Access); if T = Null_Field_Type then raise Form_Exception; else Res := Set_Fieldtype_Arg (T, Make_Arg'Access, Copy_Arg'Access, Free_Arg'Access); Eti_Exception (Res); Res := Set_Fieldtype_Choice (T, Generic_Next'Access, Generic_Prev'Access); Eti_Exception (Res); end if; M_Generic_Choice := T; end if; pragma Assert (M_Generic_Choice /= Null_Field_Type); return M_Generic_Choice; end C_Generic_Choice; end Terminal_Interface.Curses.Forms.Field_Types.User.Choice; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-fixed_io.adb0000644000175100001440000000742311315445471025163 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Fixed_IO -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; with Terminal_Interface.Curses.Text_IO.Aux; package body Terminal_Interface.Curses.Text_IO.Fixed_IO is package Aux renames Terminal_Interface.Curses.Text_IO.Aux; package FIXIO is new Ada.Text_IO.Fixed_IO (Num); procedure Put (Win : Window; Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp) is Buf : String (1 .. Field'Last); Len : Field := Fore + 1 + Aft; begin if Exp > 0 then Len := Len + 1 + Exp; end if; FIXIO.Put (Buf, Item, Aft, Exp); Aux.Put_Buf (Win, Buf, Len, False); end Put; procedure Put (Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp) is begin Put (Get_Window, Item, Fore, Aft, Exp); end Put; end Terminal_Interface.Curses.Text_IO.Fixed_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-menus-menu_user_data.adb0000644000175100001440000000754512340207631026042 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Menus.Menu_User_Data -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.15 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Menus.Menu_User_Data is use type Interfaces.C.int; procedure Set_User_Data (Men : Menu; Data : User_Access) is function Set_Menu_Userptr (Men : Menu; Data : User_Access) return Eti_Error; pragma Import (C, Set_Menu_Userptr, "set_menu_userptr"); begin Eti_Exception (Set_Menu_Userptr (Men, Data)); end Set_User_Data; function Get_User_Data (Men : Menu) return User_Access is function Menu_Userptr (Men : Menu) return User_Access; pragma Import (C, Menu_Userptr, "menu_userptr"); begin return Menu_Userptr (Men); end Get_User_Data; procedure Get_User_Data (Men : Menu; Data : out User_Access) is begin Data := Get_User_Data (Men); end Get_User_Data; end Terminal_Interface.Curses.Menus.Menu_User_Data; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-panels.adb0000644000175100001440000001416211315445062023200 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Panels -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2004,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.14 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; with Interfaces.C; package body Terminal_Interface.Curses.Panels is use type Interfaces.C.int; function Create (Win : Window) return Panel is function Newpanel (Win : Window) return Panel; pragma Import (C, Newpanel, "new_panel"); Pan : Panel; begin Pan := Newpanel (Win); if Pan = Null_Panel then raise Panel_Exception; end if; return Pan; end Create; procedure Bottom (Pan : Panel) is function Bottompanel (Pan : Panel) return C_Int; pragma Import (C, Bottompanel, "bottom_panel"); begin if Bottompanel (Pan) = Curses_Err then raise Panel_Exception; end if; end Bottom; procedure Top (Pan : Panel) is function Toppanel (Pan : Panel) return C_Int; pragma Import (C, Toppanel, "top_panel"); begin if Toppanel (Pan) = Curses_Err then raise Panel_Exception; end if; end Top; procedure Show (Pan : Panel) is function Showpanel (Pan : Panel) return C_Int; pragma Import (C, Showpanel, "show_panel"); begin if Showpanel (Pan) = Curses_Err then raise Panel_Exception; end if; end Show; procedure Hide (Pan : Panel) is function Hidepanel (Pan : Panel) return C_Int; pragma Import (C, Hidepanel, "hide_panel"); begin if Hidepanel (Pan) = Curses_Err then raise Panel_Exception; end if; end Hide; function Get_Window (Pan : Panel) return Window is function Panel_Win (Pan : Panel) return Window; pragma Import (C, Panel_Win, "panel_window"); Win : constant Window := Panel_Win (Pan); begin if Win = Null_Window then raise Panel_Exception; end if; return Win; end Get_Window; procedure Replace (Pan : Panel; Win : Window) is function Replace_Pan (Pan : Panel; Win : Window) return C_Int; pragma Import (C, Replace_Pan, "replace_panel"); begin if Replace_Pan (Pan, Win) = Curses_Err then raise Panel_Exception; end if; end Replace; procedure Move (Pan : Panel; Line : Line_Position; Column : Column_Position) is function Move (Pan : Panel; Line : C_Int; Column : C_Int) return C_Int; pragma Import (C, Move, "move_panel"); begin if Move (Pan, C_Int (Line), C_Int (Column)) = Curses_Err then raise Panel_Exception; end if; end Move; function Is_Hidden (Pan : Panel) return Boolean is function Panel_Hidden (Pan : Panel) return C_Int; pragma Import (C, Panel_Hidden, "panel_hidden"); begin if Panel_Hidden (Pan) = Curses_False then return False; else return True; end if; end Is_Hidden; procedure Delete (Pan : in out Panel) is function Del_Panel (Pan : Panel) return C_Int; pragma Import (C, Del_Panel, "del_panel"); begin if Del_Panel (Pan) = Curses_Err then raise Panel_Exception; end if; Pan := Null_Panel; end Delete; end Terminal_Interface.Curses.Panels; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-modular_io.ads0000644000175100001440000000660211315445551025545 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Modular_IO -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type Num is mod <>; package Terminal_Interface.Curses.Text_IO.Modular_IO is Default_Width : Field := Num'Width; Default_Base : Number_Base := 10; procedure Put (Win : Window; Item : Num; Width : Field := Default_Width; Base : Number_Base := Default_Base); procedure Put (Item : Num; Width : Field := Default_Width; Base : Number_Base := Default_Base); private pragma Inline (Put); end Terminal_Interface.Curses.Text_IO.Modular_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-numeric.ads0000644000175100001440000000656511315445666027054 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.Numeric -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.Numeric is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.Numeric); type Numeric_Field is new Field_Type with record Precision : Natural; Lower_Limit : Float; Upper_Limit : Float; end record; procedure Set_Field_Type (Fld : Field; Typ : Numeric_Field); pragma Inline (Set_Field_Type); end Terminal_Interface.Curses.Forms.Field_Types.Numeric; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-fixed_io.ads0000644000175100001440000000671111315445471025203 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Fixed_IO -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type Num is delta <>; package Terminal_Interface.Curses.Text_IO.Fixed_IO is Default_Fore : Field := Num'Fore; Default_Aft : Field := Num'Aft; Default_Exp : Field := 0; procedure Put (Win : Window; Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); procedure Put (Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); private pragma Inline (Put); end Terminal_Interface.Curses.Text_IO.Fixed_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.ads0000644000175100001440000000654111315445666030054 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric); type AlphaNumeric_Field is new Field_Type with record Minimum_Field_Width : Natural := 0; end record; procedure Set_Field_Type (Fld : Field; Typ : AlphaNumeric_Field); pragma Inline (Set_Field_Type); end Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-regexp.adb0000644000175100001440000000701712340207631026637 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.RegExp -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; use Interfaces.C; with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms.Field_Types.RegExp is procedure Set_Field_Type (Fld : Field; Typ : Regular_Expression_Field) is function Set_Ftyp (F : Field := Fld; Arg1 : char_array) return Eti_Error; pragma Import (C, Set_Ftyp, "set_field_type_regexp"); begin Eti_Exception (Set_Ftyp (Arg1 => To_C (Typ.Regular_Expression.all))); Wrap_Builtin (Fld, Typ); end Set_Field_Type; end Terminal_Interface.Curses.Forms.Field_Types.RegExp; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-termcap.adb0000644000175100001440000001553011315445062023351 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Termcap -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2006,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; with Interfaces.C; use Interfaces.C; with Interfaces.C.Strings; use Interfaces.C.Strings; package body Terminal_Interface.Curses.Termcap is function Get_Entry (Name : String) return Boolean is function tgetent (name : char_array; val : char_array) return C_Int; pragma Import (C, tgetent, "tgetent"); NameTxt : char_array (0 .. Name'Length); Length : size_t; ignored : constant char_array (0 .. 0) := (0 => nul); result : C_Int; begin To_C (Name, NameTxt, Length); result := tgetent (char_array (ignored), NameTxt); if result = -1 then raise Curses_Exception; else return Boolean'Val (result); end if; end Get_Entry; ------------------------------------------------------------------------------ function Get_Flag (Name : String) return Boolean is function tgetflag (id : char_array) return C_Int; pragma Import (C, tgetflag, "tgetflag"); Txt : char_array (0 .. Name'Length); Length : size_t; begin To_C (Name, Txt, Length); if tgetflag (Txt) = 0 then return False; else return True; end if; end Get_Flag; ------------------------------------------------------------------------------ procedure Get_Number (Name : String; Value : out Integer; Result : out Boolean) is function tgetnum (id : char_array) return C_Int; pragma Import (C, tgetnum, "tgetnum"); Txt : char_array (0 .. Name'Length); Length : size_t; begin To_C (Name, Txt, Length); Value := Integer (tgetnum (Txt)); if Value = -1 then Result := False; else Result := True; end if; end Get_Number; ------------------------------------------------------------------------------ procedure Get_String (Name : String; Value : out String; Result : out Boolean) is function tgetstr (id : char_array; buf : char_array) return chars_ptr; pragma Import (C, tgetstr, "tgetstr"); Txt : char_array (0 .. Name'Length); Length : size_t; Txt2 : chars_ptr; type t is new char_array (0 .. 1024); -- does it need to be 1024? Return_Buffer : constant t := (others => nul); begin To_C (Name, Txt, Length); Txt2 := tgetstr (Txt, char_array (Return_Buffer)); if Txt2 = Null_Ptr then Result := False; else Value := Fill_String (Txt2); Result := True; end if; end Get_String; function Get_String (Name : String) return Boolean is function tgetstr (Id : char_array; buf : char_array) return chars_ptr; pragma Import (C, tgetstr, "tgetstr"); Txt : char_array (0 .. Name'Length); Length : size_t; Txt2 : chars_ptr; type t is new char_array (0 .. 1024); -- does it need to be 1024? Phony_Txt : constant t := (others => nul); begin To_C (Name, Txt, Length); Txt2 := tgetstr (Txt, char_array (Phony_Txt)); if Txt2 = Null_Ptr then return False; else return True; end if; end Get_String; ------------------------------------------------------------------------------ function TGoto (Cap : String; Col : Column_Position; Row : Line_Position) return Termcap_String is function tgoto (cap : char_array; col : C_Int; row : C_Int) return chars_ptr; pragma Import (C, tgoto); Txt : char_array (0 .. Cap'Length); Length : size_t; begin To_C (Cap, Txt, Length); return Termcap_String (Fill_String (tgoto (Txt, C_Int (Col), C_Int (Row)))); end TGoto; end Terminal_Interface.Curses.Termcap; ncurses-6.0-20160213/Ada95/src/terminal_interface.ads0000644000175100001440000000605310447516776020457 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.14 $ -- $Date: 2006/06/25 14:30:22 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface is pragma Pure (Terminal_Interface); -- -- Everything is in the child units -- end Terminal_Interface; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-regexp.ads0000644000175100001440000000660211315446021026656 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.RegExp -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.RegExp is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.RegExp); type String_Access is access String; type Regular_Expression_Field is new Field_Type with record Regular_Expression : String_Access; end record; procedure Set_Field_Type (Fld : Field; Typ : Regular_Expression_Field); pragma Inline (Set_Field_Type); end Terminal_Interface.Curses.Forms.Field_Types.RegExp; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.adb0000644000175100001440000001037711542231164030422 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2004,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- $Date: 2011/03/22 23:36:20 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Characters.Handling; use Ada.Characters.Handling; package body Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada is function Create (Set : Type_Set := Mixed_Case; Case_Sensitive : Boolean := False; Must_Be_Unique : Boolean := False) return Enumeration_Field is I : Enumeration_Info (T'Pos (T'Last) - T'Pos (T'First) + 1); J : Positive := 1; begin I.Case_Sensitive := Case_Sensitive; I.Match_Must_Be_Unique := Must_Be_Unique; for E in T'Range loop I.Names (J) := new String'(T'Image (E)); -- The Image attribute defaults to upper case, so we have to handle -- only the other ones... if Set /= Upper_Case then I.Names (J).all := To_Lower (I.Names (J).all); if Set = Mixed_Case then I.Names (J).all (I.Names (J).all'First) := To_Upper (I.Names (J).all (I.Names (J).all'First)); end if; end if; J := J + 1; end loop; return Create (I, True); end Create; function Value (Fld : Field; Buf : Buffer_Number := Buffer_Number'First) return T is begin return T'Value (Get_Buffer (Fld, Buf)); end Value; end Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-enumeration.ads0000644000175100001440000001211511315445666027724 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.Enumeration -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C.Strings; package Terminal_Interface.Curses.Forms.Field_Types.Enumeration is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.Enumeration); type String_Access is access String; -- Type_Set is used by the child package Ada type Type_Set is (Lower_Case, Upper_Case, Mixed_Case); type Enum_Array is array (Positive range <>) of String_Access; type Enumeration_Info (C : Positive) is record Names : Enum_Array (1 .. C); Case_Sensitive : Boolean := False; Match_Must_Be_Unique : Boolean := False; end record; type Enumeration_Field is new Field_Type with private; function Create (Info : Enumeration_Info; Auto_Release_Names : Boolean := False) return Enumeration_Field; -- Make an fieldtype from the info. Enumerations are special, because -- they normally don't copy the enum values into a private store, so -- we have to care for the lifetime of the info we provide. -- The Auto_Release_Names flag may be used to automatically releases -- the strings in the Names array of the Enumeration_Info. function Make_Enumeration_Type (Info : Enumeration_Info; Auto_Release_Names : Boolean := False) return Enumeration_Field renames Create; procedure Release (Enum : in out Enumeration_Field); -- But we may want to release the field to release the memory allocated -- by it internally. After that the Enumeration field is no longer usable. -- The next type defintions are all ncurses extensions. They are typically -- not available in other curses implementations. procedure Set_Field_Type (Fld : Field; Typ : Enumeration_Field); pragma Inline (Set_Field_Type); private type CPA_Access is access Interfaces.C.Strings.chars_ptr_array; type Enumeration_Field is new Field_Type with record Case_Sensitive : Boolean := False; Match_Must_Be_Unique : Boolean := False; Arr : CPA_Access := null; end record; end Terminal_Interface.Curses.Forms.Field_Types.Enumeration; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-float_io.adb0000644000175100001440000000742211315445471025170 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Float_IO -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; with Terminal_Interface.Curses.Text_IO.Aux; package body Terminal_Interface.Curses.Text_IO.Float_IO is package Aux renames Terminal_Interface.Curses.Text_IO.Aux; package FIO is new Ada.Text_IO.Float_IO (Num); procedure Put (Win : Window; Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp) is Buf : String (1 .. Field'Last); Len : Field := Fore + 1 + Aft; begin if Exp > 0 then Len := Len + 1 + Exp; end if; FIO.Put (Buf, Item, Aft, Exp); Aux.Put_Buf (Win, Buf, Len, False); end Put; procedure Put (Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp) is begin Put (Get_Window, Item, Fore, Aft, Exp); end Put; end Terminal_Interface.Curses.Text_IO.Float_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-aux.adb0000644000175100001440000001242411315445062024163 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Aux -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2006,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.13 $ -- $Date: 2009/12/26 17:38:58 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package body Terminal_Interface.Curses.Text_IO.Aux is procedure Put_Buf (Win : Window; Buf : String; Width : Field; Signal : Boolean := True; Ljust : Boolean := False) is L : Field; Len : Field; W : Field := Width; LC : Line_Count; CC : Column_Count; Y : Line_Position; X : Column_Position; procedure Output (From, To : Field); procedure Output (From, To : Field) is begin if Len > 0 then if W = 0 then W := Len; end if; if Len > W then -- LRM A10.6 (7) says this W := Len; end if; pragma Assert (Len <= W); Get_Size (Win, LC, CC); if Column_Count (Len) > CC then if Signal then raise Layout_Error; else return; end if; else if Len < W and then not Ljust then declare Filler : constant String (1 .. (W - Len)) := (others => ' '); begin Put (Win, Filler); end; end if; Get_Cursor_Position (Win, Y, X); if (X + Column_Position (Len)) > CC then New_Line (Win); end if; Put (Win, Buf (From .. To)); if Len < W and then Ljust then declare Filler : constant String (1 .. (W - Len)) := (others => ' '); begin Put (Win, Filler); end; end if; end if; end if; end Output; begin pragma Assert (Win /= Null_Window); if Ljust then L := 1; for I in 1 .. Buf'Length loop exit when Buf (L) = ' '; L := L + 1; end loop; Len := L - 1; Output (1, Len); else -- input buffer is not left justified L := Buf'Length; for I in 1 .. Buf'Length loop exit when Buf (L) = ' '; L := L - 1; end loop; Len := Buf'Length - L; Output (L + 1, Buf'Length); end if; end Put_Buf; end Terminal_Interface.Curses.Text_IO.Aux; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-user.adb0000644000175100001440000001373512340207631026327 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.User -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.23 $ -- $Date: 2014/05/24 21:31:05 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System.Address_To_Access_Conversions; with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms.Field_Types.User is procedure Set_Field_Type (Fld : Field; Typ : User_Defined_Field_Type) is function Allocate_Arg (T : User_Defined_Field_Type'Class) return Argument_Access; function Set_Fld_Type (F : Field := Fld; Cft : C_Field_Type := C_Generic_Type; Arg1 : Argument_Access) return Eti_Error; pragma Import (C, Set_Fld_Type, "set_field_type_user"); function Allocate_Arg (T : User_Defined_Field_Type'Class) return Argument_Access is Ptr : constant Field_Type_Access := new User_Defined_Field_Type'Class'(T); begin return new Argument'(Usr => System.Null_Address, Typ => Ptr, Cft => Null_Field_Type); end Allocate_Arg; begin Eti_Exception (Set_Fld_Type (Arg1 => Allocate_Arg (Typ))); end Set_Field_Type; package Argument_Conversions is new System.Address_To_Access_Conversions (Argument); function Generic_Field_Check (Fld : Field; Usr : System.Address) return Curses_Bool is Result : Boolean; Udf : constant User_Defined_Field_Type_Access := User_Defined_Field_Type_Access (Argument_Access (Argument_Conversions.To_Pointer (Usr)).all.Typ); begin Result := Field_Check (Fld, Udf.all); return Curses_Bool (Boolean'Pos (Result)); end Generic_Field_Check; function Generic_Char_Check (Ch : C_Int; Usr : System.Address) return Curses_Bool is Result : Boolean; Udf : constant User_Defined_Field_Type_Access := User_Defined_Field_Type_Access (Argument_Access (Argument_Conversions.To_Pointer (Usr)).all.Typ); begin Result := Character_Check (Character'Val (Ch), Udf.all); return Curses_Bool (Boolean'Pos (Result)); end Generic_Char_Check; -- ----------------------------------------------------------------------- -- function C_Generic_Type return C_Field_Type is Res : Eti_Error; T : C_Field_Type; begin if M_Generic_Type = Null_Field_Type then T := New_Fieldtype (Generic_Field_Check'Access, Generic_Char_Check'Access); if T = Null_Field_Type then raise Form_Exception; else Res := Set_Fieldtype_Arg (T, Make_Arg'Access, Copy_Arg'Access, Free_Arg'Access); Eti_Exception (Res); end if; M_Generic_Type := T; end if; pragma Assert (M_Generic_Type /= Null_Field_Type); return M_Generic_Type; end C_Generic_Type; end Terminal_Interface.Curses.Forms.Field_Types.User; ncurses-6.0-20160213/Ada95/src/c_varargs_to_ada.h0000644000175100001440000000655012560764377017564 0ustar tomusers/**************************************************************************** * Copyright (c) 2011,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* $Id: c_varargs_to_ada.h,v 1.4 2015/08/06 23:08:47 tom Exp $ */ #ifndef __C_VARARGS_TO_ADA_H #define __C_VARARGS_TO_ADA_H #ifdef HAVE_CONFIG_H #include #else #include #endif #include #include extern int set_field_type_alnum(FIELD * /* field */ , int /* minimum_width */ ); extern int set_field_type_alpha(FIELD * /* field */ , int /* minimum_width */ ); extern int set_field_type_enum(FIELD * /* field */ , char ** /* value_list */ , int /* case_sensitive */ , int /* unique_match */ ); extern int set_field_type_integer(FIELD * /* field */ , int /* precision */ , long /* minimum */ , long /* maximum */ ); extern int set_field_type_numeric(FIELD * /* field */ , int /* precision */ , double /* minimum */ , double /* maximum */ ); extern int set_field_type_regexp(FIELD * /* field */ , char * /* regular_expression */ ); extern int set_field_type_ipv4(FIELD * /* field */ ); extern int set_field_type_user(FIELD * /* field */ , FIELDTYPE * /* fieldtype */ , void * /* arg */ ); extern void *void_star_make_arg(va_list * /* list */ ); #ifdef TRACE extern void _traces(const char * /* fmt */ ,char * /* arg */ ); #endif #endif /* __C_VARARGS_TO_ADA_H */ ncurses-6.0-20160213/Ada95/src/modules0000644000175100001440000000774111411507072015510 0ustar tomusers# $Id: modules,v 1.3 2010/06/26 23:33:14 tom Exp $ ############################################################################## # Copyright (c) 2010 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 2010 # # Library objects # rootname depend-spec depend-body unit $(ALIB) $(srcdir) none spec $(ABASE)-aux none $(srcdir) body $(ABASE) none . body $(ABASE)-terminfo $(srcdir) $(srcdir) body $(ABASE)-termcap $(srcdir) $(srcdir) body $(ABASE)-putwin $(srcdir) $(srcdir) body $(ABASE)-trace . . body $(ABASE)-mouse . $(srcdir) body $(ABASE)-panels . $(srcdir) body $(ABASE)-menus . $(srcdir) body $(ABASE)-forms . $(srcdir) body $(ABASE)-forms-field_types . $(srcdir) body $(ABASE)-forms-field_types-alpha $(srcdir) $(srcdir) body $(ABASE)-forms-field_types-alphanumeric $(srcdir) $(srcdir) body $(ABASE)-forms-field_types-intfield $(srcdir) $(srcdir) body $(ABASE)-forms-field_types-numeric $(srcdir) $(srcdir) body $(ABASE)-forms-field_types-regexp $(srcdir) $(srcdir) body $(ABASE)-forms-field_types-enumeration $(srcdir) $(srcdir) body $(ABASE)-forms-field_types-ipv4_address $(srcdir) $(srcdir) body $(ABASE)-forms-field_types-user $(srcdir) $(srcdir) body $(ABASE)-forms-field_types-user-choice $(srcdir) $(srcdir) body $(ABASE)-text_io $(srcdir) $(srcdir) body $(ABASE)-text_io-aux $(srcdir) $(srcdir) body $(ABASE)-menus-menu_user_data . $(srcdir) body $(ABASE)-menus-item_user_data . $(srcdir) body $(ABASE)-forms-form_user_data . $(srcdir) body $(ABASE)-forms-field_user_data . $(srcdir) body $(ABASE)-forms-field_types-enumeration-ada $(srcdir) $(srcdir) body $(ABASE)-panels-user_data . $(srcdir) body $(ABASE)-text_io-integer_io $(srcdir) $(srcdir) body $(ABASE)-text_io-float_io $(srcdir) $(srcdir) body $(ABASE)-text_io-fixed_io $(srcdir) $(srcdir) body $(ABASE)-text_io-decimal_io $(srcdir) $(srcdir) body $(ABASE)-text_io-enumeration_io $(srcdir) $(srcdir) body $(ABASE)-text_io-modular_io $(srcdir) $(srcdir) body $(ABASE)-text_io-complex_io $(srcdir) $(srcdir) body ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io.ads0000644000175100001440000001365711315445471023426 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.14 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; with Ada.IO_Exceptions; package Terminal_Interface.Curses.Text_IO is use type Ada.Text_IO.Count; subtype Count is Ada.Text_IO.Count; subtype Positive_Count is Count range 1 .. Count'Last; subtype Field is Ada.Text_IO.Field; subtype Number_Base is Integer range 2 .. 16; type Type_Set is (Lower_Case, Upper_Case, Mixed_Case); -- For most of the routines you will see a version without a Window -- type parameter. They will operate on a default window, which can -- be set by the user. It is initially equal to Standard_Window. procedure Set_Window (Win : Window); -- Set Win as the default window function Get_Window return Window; -- Get the current default window procedure Flush (Win : Window); procedure Flush; -------------------------------------------- -- Specification of line and page lengths -- -------------------------------------------- -- There are no set routines in this package. I assume, that you allocate -- the window with an appropriate size. -- A scroll-window is interpreted as an page with unbounded page length, -- i.e. it returns the conventional 0 as page length. function Line_Length (Win : Window) return Count; function Line_Length return Count; function Page_Length (Win : Window) return Count; function Page_Length return Count; ------------------------------------ -- Column, Line, and Page Control -- ------------------------------------ procedure New_Line (Win : Window; Spacing : Positive_Count := 1); procedure New_Line (Spacing : Positive_Count := 1); procedure New_Page (Win : Window); procedure New_Page; procedure Set_Col (Win : Window; To : Positive_Count); procedure Set_Col (To : Positive_Count); procedure Set_Line (Win : Window; To : Positive_Count); procedure Set_Line (To : Positive_Count); function Col (Win : Window) return Positive_Count; function Col return Positive_Count; function Line (Win : Window) return Positive_Count; function Line return Positive_Count; ----------------------- -- Characters-Output -- ----------------------- procedure Put (Win : Window; Item : Character); procedure Put (Item : Character); -------------------- -- Strings-Output -- -------------------- procedure Put (Win : Window; Item : String); procedure Put (Item : String); procedure Put_Line (Win : Window; Item : String); procedure Put_Line (Item : String); -- Exceptions Status_Error : exception renames Ada.IO_Exceptions.Status_Error; Mode_Error : exception renames Ada.IO_Exceptions.Mode_Error; Name_Error : exception renames Ada.IO_Exceptions.Name_Error; Use_Error : exception renames Ada.IO_Exceptions.Use_Error; Device_Error : exception renames Ada.IO_Exceptions.Device_Error; End_Error : exception renames Ada.IO_Exceptions.End_Error; Data_Error : exception renames Ada.IO_Exceptions.Data_Error; Layout_Error : exception renames Ada.IO_Exceptions.Layout_Error; end Terminal_Interface.Curses.Text_IO; ncurses-6.0-20160213/Ada95/src/ncurses_compat.c0000644000175100001440000001010312560764426017306 0ustar tomusers/**************************************************************************** * Copyright (c) 2011,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey, 2011 * ****************************************************************************/ /* Version Control $Id: ncurses_compat.c,v 1.3 2015/08/06 23:09:10 tom Exp $ --------------------------------------------------------------------------*/ /* * Provide compatibility with older versions of ncurses. */ #include #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #include #if defined(NCURSES_VERSION_PATCH) #if NCURSES_VERSION_PATCH < 20081122 extern bool has_mouse(void); extern int _nc_has_mouse(void); bool has_mouse(void) { return (bool)_nc_has_mouse(); } #endif /* * These are provided by lib_gen.c: */ #if NCURSES_VERSION_PATCH < 20070331 extern bool (is_keypad) (const WINDOW *); extern bool (is_scrollok) (const WINDOW *); bool is_keypad(const WINDOW *win) { return ((win)->_use_keypad); } bool (is_scrollok) (const WINDOW *win) { return ((win)->_scroll); } #endif #if NCURSES_VERSION_PATCH < 20060107 extern int (getbegx) (WINDOW *); extern int (getbegy) (WINDOW *); extern int (getcurx) (WINDOW *); extern int (getcury) (WINDOW *); extern int (getmaxx) (WINDOW *); extern int (getmaxy) (WINDOW *); extern int (getparx) (WINDOW *); extern int (getpary) (WINDOW *); int (getbegy) (WINDOW *win) { return ((win) ? (win)->_begy : ERR); } int (getbegx) (WINDOW *win) { return ((win) ? (win)->_begx : ERR); } int (getcury) (WINDOW *win) { return ((win) ? (win)->_cury : ERR); } int (getcurx) (WINDOW *win) { return ((win) ? (win)->_curx : ERR); } int (getmaxy) (WINDOW *win) { return ((win) ? ((win)->_maxy + 1) : ERR); } int (getmaxx) (WINDOW *win) { return ((win) ? ((win)->_maxx + 1) : ERR); } int (getpary) (WINDOW *win) { return ((win) ? (win)->_pary : ERR); } int (getparx) (WINDOW *win) { return ((win) ? (win)->_parx : ERR); } #endif #endif ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-integer_io.adb0000644000175100001440000000716511315445471025524 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Integer_IO -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; with Terminal_Interface.Curses.Text_IO.Aux; package body Terminal_Interface.Curses.Text_IO.Integer_IO is package Aux renames Terminal_Interface.Curses.Text_IO.Aux; package IIO is new Ada.Text_IO.Integer_IO (Num); procedure Put (Win : Window; Item : Num; Width : Field := Default_Width; Base : Number_Base := Default_Base) is Buf : String (1 .. Field'Last); begin IIO.Put (Buf, Item, Base); Aux.Put_Buf (Win, Buf, Width); end Put; procedure Put (Item : Num; Width : Field := Default_Width; Base : Number_Base := Default_Base) is begin Put (Get_Window, Item, Width, Base); end Put; end Terminal_Interface.Curses.Text_IO.Integer_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-alpha.ads0000644000175100001440000000647111315445666026473 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.Alpha -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.Alpha is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.Alpha); type Alpha_Field is new Field_Type with record Minimum_Field_Width : Natural := 0; end record; procedure Set_Field_Type (Fld : Field; Typ : Alpha_Field); pragma Inline (Set_Field_Type); end Terminal_Interface.Curses.Forms.Field_Types.Alpha; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-menus.adb0000644000175100001440000007464212340207631023053 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Menus -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.32 $ -- $Date: 2014/05/24 21:31:05 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Unchecked_Deallocation; with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; with Interfaces.C; use Interfaces.C; with Interfaces.C.Strings; use Interfaces.C.Strings; with Interfaces.C.Pointers; package body Terminal_Interface.Curses.Menus is type C_Item_Array is array (Natural range <>) of aliased Item; package I_Array is new Interfaces.C.Pointers (Natural, Item, C_Item_Array, Null_Item); use type System.Bit_Order; subtype chars_ptr is Interfaces.C.Strings.chars_ptr; ------------------------------------------------------------------------------ procedure Request_Name (Key : Menu_Request_Code; Name : out String) is function Request_Name (Key : C_Int) return chars_ptr; pragma Import (C, Request_Name, "menu_request_name"); begin Fill_String (Request_Name (C_Int (Key)), Name); end Request_Name; function Request_Name (Key : Menu_Request_Code) return String is function Request_Name (Key : C_Int) return chars_ptr; pragma Import (C, Request_Name, "menu_request_name"); begin return Fill_String (Request_Name (C_Int (Key))); end Request_Name; function Create (Name : String; Description : String := "") return Item is type Char_Ptr is access all Interfaces.C.char; function Newitem (Name, Desc : Char_Ptr) return Item; pragma Import (C, Newitem, "new_item"); type Name_String is new char_array (0 .. Name'Length); type Name_String_Ptr is access Name_String; pragma Controlled (Name_String_Ptr); type Desc_String is new char_array (0 .. Description'Length); type Desc_String_Ptr is access Desc_String; pragma Controlled (Desc_String_Ptr); Name_Str : constant Name_String_Ptr := new Name_String; Desc_Str : constant Desc_String_Ptr := new Desc_String; Name_Len, Desc_Len : size_t; Result : Item; begin To_C (Name, Name_Str.all, Name_Len); To_C (Description, Desc_Str.all, Desc_Len); Result := Newitem (Name_Str.all (Name_Str.all'First)'Access, Desc_Str.all (Desc_Str.all'First)'Access); if Result = Null_Item then raise Eti_System_Error; end if; return Result; end Create; procedure Delete (Itm : in out Item) is function Descname (Itm : Item) return chars_ptr; pragma Import (C, Descname, "item_description"); function Itemname (Itm : Item) return chars_ptr; pragma Import (C, Itemname, "item_name"); function Freeitem (Itm : Item) return Eti_Error; pragma Import (C, Freeitem, "free_item"); Ptr : chars_ptr; begin Ptr := Descname (Itm); if Ptr /= Null_Ptr then Interfaces.C.Strings.Free (Ptr); end if; Ptr := Itemname (Itm); if Ptr /= Null_Ptr then Interfaces.C.Strings.Free (Ptr); end if; Eti_Exception (Freeitem (Itm)); Itm := Null_Item; end Delete; ------------------------------------------------------------------------------- procedure Set_Value (Itm : Item; Value : Boolean := True) is function Set_Item_Val (Itm : Item; Val : C_Int) return Eti_Error; pragma Import (C, Set_Item_Val, "set_item_value"); begin Eti_Exception (Set_Item_Val (Itm, Boolean'Pos (Value))); end Set_Value; function Value (Itm : Item) return Boolean is function Item_Val (Itm : Item) return C_Int; pragma Import (C, Item_Val, "item_value"); begin if Item_Val (Itm) = Curses_False then return False; else return True; end if; end Value; ------------------------------------------------------------------------------- function Visible (Itm : Item) return Boolean is function Item_Vis (Itm : Item) return C_Int; pragma Import (C, Item_Vis, "item_visible"); begin if Item_Vis (Itm) = Curses_False then return False; else return True; end if; end Visible; ------------------------------------------------------------------------------- procedure Set_Options (Itm : Item; Options : Item_Option_Set) is function Set_Item_Opts (Itm : Item; Opt : Item_Option_Set) return Eti_Error; pragma Import (C, Set_Item_Opts, "set_item_opts"); begin Eti_Exception (Set_Item_Opts (Itm, Options)); end Set_Options; procedure Switch_Options (Itm : Item; Options : Item_Option_Set; On : Boolean := True) is function Item_Opts_On (Itm : Item; Opt : Item_Option_Set) return Eti_Error; pragma Import (C, Item_Opts_On, "item_opts_on"); function Item_Opts_Off (Itm : Item; Opt : Item_Option_Set) return Eti_Error; pragma Import (C, Item_Opts_Off, "item_opts_off"); begin if On then Eti_Exception (Item_Opts_On (Itm, Options)); else Eti_Exception (Item_Opts_Off (Itm, Options)); end if; end Switch_Options; procedure Get_Options (Itm : Item; Options : out Item_Option_Set) is function Item_Opts (Itm : Item) return Item_Option_Set; pragma Import (C, Item_Opts, "item_opts"); begin Options := Item_Opts (Itm); end Get_Options; function Get_Options (Itm : Item := Null_Item) return Item_Option_Set is Ios : Item_Option_Set; begin Get_Options (Itm, Ios); return Ios; end Get_Options; ------------------------------------------------------------------------------- procedure Name (Itm : Item; Name : out String) is function Itemname (Itm : Item) return chars_ptr; pragma Import (C, Itemname, "item_name"); begin Fill_String (Itemname (Itm), Name); end Name; function Name (Itm : Item) return String is function Itemname (Itm : Item) return chars_ptr; pragma Import (C, Itemname, "item_name"); begin return Fill_String (Itemname (Itm)); end Name; procedure Description (Itm : Item; Description : out String) is function Descname (Itm : Item) return chars_ptr; pragma Import (C, Descname, "item_description"); begin Fill_String (Descname (Itm), Description); end Description; function Description (Itm : Item) return String is function Descname (Itm : Item) return chars_ptr; pragma Import (C, Descname, "item_description"); begin return Fill_String (Descname (Itm)); end Description; ------------------------------------------------------------------------------- procedure Set_Current (Men : Menu; Itm : Item) is function Set_Curr_Item (Men : Menu; Itm : Item) return Eti_Error; pragma Import (C, Set_Curr_Item, "set_current_item"); begin Eti_Exception (Set_Curr_Item (Men, Itm)); end Set_Current; function Current (Men : Menu) return Item is function Curr_Item (Men : Menu) return Item; pragma Import (C, Curr_Item, "current_item"); Res : constant Item := Curr_Item (Men); begin if Res = Null_Item then raise Menu_Exception; end if; return Res; end Current; procedure Set_Top_Row (Men : Menu; Line : Line_Position) is function Set_Toprow (Men : Menu; Line : C_Int) return Eti_Error; pragma Import (C, Set_Toprow, "set_top_row"); begin Eti_Exception (Set_Toprow (Men, C_Int (Line))); end Set_Top_Row; function Top_Row (Men : Menu) return Line_Position is function Toprow (Men : Menu) return C_Int; pragma Import (C, Toprow, "top_row"); Res : constant C_Int := Toprow (Men); begin if Res = Curses_Err then raise Menu_Exception; end if; return Line_Position (Res); end Top_Row; function Get_Index (Itm : Item) return Positive is function Get_Itemindex (Itm : Item) return C_Int; pragma Import (C, Get_Itemindex, "item_index"); Res : constant C_Int := Get_Itemindex (Itm); begin if Res = Curses_Err then raise Menu_Exception; end if; return Positive (Natural (Res) + Positive'First); end Get_Index; ------------------------------------------------------------------------------- procedure Post (Men : Menu; Post : Boolean := True) is function M_Post (Men : Menu) return Eti_Error; pragma Import (C, M_Post, "post_menu"); function M_Unpost (Men : Menu) return Eti_Error; pragma Import (C, M_Unpost, "unpost_menu"); begin if Post then Eti_Exception (M_Post (Men)); else Eti_Exception (M_Unpost (Men)); end if; end Post; ------------------------------------------------------------------------------- procedure Set_Options (Men : Menu; Options : Menu_Option_Set) is function Set_Menu_Opts (Men : Menu; Opt : Menu_Option_Set) return Eti_Error; pragma Import (C, Set_Menu_Opts, "set_menu_opts"); begin Eti_Exception (Set_Menu_Opts (Men, Options)); end Set_Options; procedure Switch_Options (Men : Menu; Options : Menu_Option_Set; On : Boolean := True) is function Menu_Opts_On (Men : Menu; Opt : Menu_Option_Set) return Eti_Error; pragma Import (C, Menu_Opts_On, "menu_opts_on"); function Menu_Opts_Off (Men : Menu; Opt : Menu_Option_Set) return Eti_Error; pragma Import (C, Menu_Opts_Off, "menu_opts_off"); begin if On then Eti_Exception (Menu_Opts_On (Men, Options)); else Eti_Exception (Menu_Opts_Off (Men, Options)); end if; end Switch_Options; procedure Get_Options (Men : Menu; Options : out Menu_Option_Set) is function Menu_Opts (Men : Menu) return Menu_Option_Set; pragma Import (C, Menu_Opts, "menu_opts"); begin Options := Menu_Opts (Men); end Get_Options; function Get_Options (Men : Menu := Null_Menu) return Menu_Option_Set is Mos : Menu_Option_Set; begin Get_Options (Men, Mos); return Mos; end Get_Options; ------------------------------------------------------------------------------- procedure Set_Window (Men : Menu; Win : Window) is function Set_Menu_Win (Men : Menu; Win : Window) return Eti_Error; pragma Import (C, Set_Menu_Win, "set_menu_win"); begin Eti_Exception (Set_Menu_Win (Men, Win)); end Set_Window; function Get_Window (Men : Menu) return Window is function Menu_Win (Men : Menu) return Window; pragma Import (C, Menu_Win, "menu_win"); W : constant Window := Menu_Win (Men); begin return W; end Get_Window; procedure Set_Sub_Window (Men : Menu; Win : Window) is function Set_Menu_Sub (Men : Menu; Win : Window) return Eti_Error; pragma Import (C, Set_Menu_Sub, "set_menu_sub"); begin Eti_Exception (Set_Menu_Sub (Men, Win)); end Set_Sub_Window; function Get_Sub_Window (Men : Menu) return Window is function Menu_Sub (Men : Menu) return Window; pragma Import (C, Menu_Sub, "menu_sub"); W : constant Window := Menu_Sub (Men); begin return W; end Get_Sub_Window; procedure Scale (Men : Menu; Lines : out Line_Count; Columns : out Column_Count) is type C_Int_Access is access all C_Int; function M_Scale (Men : Menu; Yp, Xp : C_Int_Access) return Eti_Error; pragma Import (C, M_Scale, "scale_menu"); X, Y : aliased C_Int; begin Eti_Exception (M_Scale (Men, Y'Access, X'Access)); Lines := Line_Count (Y); Columns := Column_Count (X); end Scale; ------------------------------------------------------------------------------- procedure Position_Cursor (Men : Menu) is function Pos_Menu_Cursor (Men : Menu) return Eti_Error; pragma Import (C, Pos_Menu_Cursor, "pos_menu_cursor"); begin Eti_Exception (Pos_Menu_Cursor (Men)); end Position_Cursor; ------------------------------------------------------------------------------- procedure Set_Mark (Men : Menu; Mark : String) is type Char_Ptr is access all Interfaces.C.char; function Set_Mark (Men : Menu; Mark : Char_Ptr) return Eti_Error; pragma Import (C, Set_Mark, "set_menu_mark"); Txt : char_array (0 .. Mark'Length); Len : size_t; begin To_C (Mark, Txt, Len); Eti_Exception (Set_Mark (Men, Txt (Txt'First)'Access)); end Set_Mark; procedure Mark (Men : Menu; Mark : out String) is function Get_Menu_Mark (Men : Menu) return chars_ptr; pragma Import (C, Get_Menu_Mark, "menu_mark"); begin Fill_String (Get_Menu_Mark (Men), Mark); end Mark; function Mark (Men : Menu) return String is function Get_Menu_Mark (Men : Menu) return chars_ptr; pragma Import (C, Get_Menu_Mark, "menu_mark"); begin return Fill_String (Get_Menu_Mark (Men)); end Mark; ------------------------------------------------------------------------------- procedure Set_Foreground (Men : Menu; Fore : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First) is function Set_Menu_Fore (Men : Menu; Attr : Attributed_Character) return Eti_Error; pragma Import (C, Set_Menu_Fore, "set_menu_fore"); Ch : constant Attributed_Character := (Ch => Character'First, Color => Color, Attr => Fore); begin Eti_Exception (Set_Menu_Fore (Men, Ch)); end Set_Foreground; procedure Foreground (Men : Menu; Fore : out Character_Attribute_Set) is function Menu_Fore (Men : Menu) return Attributed_Character; pragma Import (C, Menu_Fore, "menu_fore"); begin Fore := Menu_Fore (Men).Attr; end Foreground; procedure Foreground (Men : Menu; Fore : out Character_Attribute_Set; Color : out Color_Pair) is function Menu_Fore (Men : Menu) return Attributed_Character; pragma Import (C, Menu_Fore, "menu_fore"); begin Fore := Menu_Fore (Men).Attr; Color := Menu_Fore (Men).Color; end Foreground; procedure Set_Background (Men : Menu; Back : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First) is function Set_Menu_Back (Men : Menu; Attr : Attributed_Character) return Eti_Error; pragma Import (C, Set_Menu_Back, "set_menu_back"); Ch : constant Attributed_Character := (Ch => Character'First, Color => Color, Attr => Back); begin Eti_Exception (Set_Menu_Back (Men, Ch)); end Set_Background; procedure Background (Men : Menu; Back : out Character_Attribute_Set) is function Menu_Back (Men : Menu) return Attributed_Character; pragma Import (C, Menu_Back, "menu_back"); begin Back := Menu_Back (Men).Attr; end Background; procedure Background (Men : Menu; Back : out Character_Attribute_Set; Color : out Color_Pair) is function Menu_Back (Men : Menu) return Attributed_Character; pragma Import (C, Menu_Back, "menu_back"); begin Back := Menu_Back (Men).Attr; Color := Menu_Back (Men).Color; end Background; procedure Set_Grey (Men : Menu; Grey : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First) is function Set_Menu_Grey (Men : Menu; Attr : Attributed_Character) return Eti_Error; pragma Import (C, Set_Menu_Grey, "set_menu_grey"); Ch : constant Attributed_Character := (Ch => Character'First, Color => Color, Attr => Grey); begin Eti_Exception (Set_Menu_Grey (Men, Ch)); end Set_Grey; procedure Grey (Men : Menu; Grey : out Character_Attribute_Set) is function Menu_Grey (Men : Menu) return Attributed_Character; pragma Import (C, Menu_Grey, "menu_grey"); begin Grey := Menu_Grey (Men).Attr; end Grey; procedure Grey (Men : Menu; Grey : out Character_Attribute_Set; Color : out Color_Pair) is function Menu_Grey (Men : Menu) return Attributed_Character; pragma Import (C, Menu_Grey, "menu_grey"); begin Grey := Menu_Grey (Men).Attr; Color := Menu_Grey (Men).Color; end Grey; procedure Set_Pad_Character (Men : Menu; Pad : Character := Space) is function Set_Menu_Pad (Men : Menu; Ch : C_Int) return Eti_Error; pragma Import (C, Set_Menu_Pad, "set_menu_pad"); begin Eti_Exception (Set_Menu_Pad (Men, C_Int (Character'Pos (Pad)))); end Set_Pad_Character; procedure Pad_Character (Men : Menu; Pad : out Character) is function Menu_Pad (Men : Menu) return C_Int; pragma Import (C, Menu_Pad, "menu_pad"); begin Pad := Character'Val (Menu_Pad (Men)); end Pad_Character; ------------------------------------------------------------------------------- procedure Set_Spacing (Men : Menu; Descr : Column_Position := 0; Row : Line_Position := 0; Col : Column_Position := 0) is function Set_Spacing (Men : Menu; D, R, C : C_Int) return Eti_Error; pragma Import (C, Set_Spacing, "set_menu_spacing"); begin Eti_Exception (Set_Spacing (Men, C_Int (Descr), C_Int (Row), C_Int (Col))); end Set_Spacing; procedure Spacing (Men : Menu; Descr : out Column_Position; Row : out Line_Position; Col : out Column_Position) is type C_Int_Access is access all C_Int; function Get_Spacing (Men : Menu; D, R, C : C_Int_Access) return Eti_Error; pragma Import (C, Get_Spacing, "menu_spacing"); D, R, C : aliased C_Int; begin Eti_Exception (Get_Spacing (Men, D'Access, R'Access, C'Access)); Descr := Column_Position (D); Row := Line_Position (R); Col := Column_Position (C); end Spacing; ------------------------------------------------------------------------------- function Set_Pattern (Men : Menu; Text : String) return Boolean is type Char_Ptr is access all Interfaces.C.char; function Set_Pattern (Men : Menu; Pattern : Char_Ptr) return Eti_Error; pragma Import (C, Set_Pattern, "set_menu_pattern"); S : char_array (0 .. Text'Length); L : size_t; Res : Eti_Error; begin To_C (Text, S, L); Res := Set_Pattern (Men, S (S'First)'Access); case Res is when E_No_Match => return False; when others => Eti_Exception (Res); return True; end case; end Set_Pattern; procedure Pattern (Men : Menu; Text : out String) is function Get_Pattern (Men : Menu) return chars_ptr; pragma Import (C, Get_Pattern, "menu_pattern"); begin Fill_String (Get_Pattern (Men), Text); end Pattern; ------------------------------------------------------------------------------- procedure Set_Format (Men : Menu; Lines : Line_Count; Columns : Column_Count) is function Set_Menu_Fmt (Men : Menu; Lin : C_Int; Col : C_Int) return Eti_Error; pragma Import (C, Set_Menu_Fmt, "set_menu_format"); begin Eti_Exception (Set_Menu_Fmt (Men, C_Int (Lines), C_Int (Columns))); end Set_Format; procedure Format (Men : Menu; Lines : out Line_Count; Columns : out Column_Count) is type C_Int_Access is access all C_Int; function Menu_Fmt (Men : Menu; Y, X : C_Int_Access) return Eti_Error; pragma Import (C, Menu_Fmt, "menu_format"); L, C : aliased C_Int; begin Eti_Exception (Menu_Fmt (Men, L'Access, C'Access)); Lines := Line_Count (L); Columns := Column_Count (C); end Format; ------------------------------------------------------------------------------- procedure Set_Item_Init_Hook (Men : Menu; Proc : Menu_Hook_Function) is function Set_Item_Init (Men : Menu; Proc : Menu_Hook_Function) return Eti_Error; pragma Import (C, Set_Item_Init, "set_item_init"); begin Eti_Exception (Set_Item_Init (Men, Proc)); end Set_Item_Init_Hook; procedure Set_Item_Term_Hook (Men : Menu; Proc : Menu_Hook_Function) is function Set_Item_Term (Men : Menu; Proc : Menu_Hook_Function) return Eti_Error; pragma Import (C, Set_Item_Term, "set_item_term"); begin Eti_Exception (Set_Item_Term (Men, Proc)); end Set_Item_Term_Hook; procedure Set_Menu_Init_Hook (Men : Menu; Proc : Menu_Hook_Function) is function Set_Menu_Init (Men : Menu; Proc : Menu_Hook_Function) return Eti_Error; pragma Import (C, Set_Menu_Init, "set_menu_init"); begin Eti_Exception (Set_Menu_Init (Men, Proc)); end Set_Menu_Init_Hook; procedure Set_Menu_Term_Hook (Men : Menu; Proc : Menu_Hook_Function) is function Set_Menu_Term (Men : Menu; Proc : Menu_Hook_Function) return Eti_Error; pragma Import (C, Set_Menu_Term, "set_menu_term"); begin Eti_Exception (Set_Menu_Term (Men, Proc)); end Set_Menu_Term_Hook; function Get_Item_Init_Hook (Men : Menu) return Menu_Hook_Function is function Item_Init (Men : Menu) return Menu_Hook_Function; pragma Import (C, Item_Init, "item_init"); begin return Item_Init (Men); end Get_Item_Init_Hook; function Get_Item_Term_Hook (Men : Menu) return Menu_Hook_Function is function Item_Term (Men : Menu) return Menu_Hook_Function; pragma Import (C, Item_Term, "item_term"); begin return Item_Term (Men); end Get_Item_Term_Hook; function Get_Menu_Init_Hook (Men : Menu) return Menu_Hook_Function is function Menu_Init (Men : Menu) return Menu_Hook_Function; pragma Import (C, Menu_Init, "menu_init"); begin return Menu_Init (Men); end Get_Menu_Init_Hook; function Get_Menu_Term_Hook (Men : Menu) return Menu_Hook_Function is function Menu_Term (Men : Menu) return Menu_Hook_Function; pragma Import (C, Menu_Term, "menu_term"); begin return Menu_Term (Men); end Get_Menu_Term_Hook; ------------------------------------------------------------------------------- procedure Redefine (Men : Menu; Items : Item_Array_Access) is function Set_Items (Men : Menu; Items : System.Address) return Eti_Error; pragma Import (C, Set_Items, "set_menu_items"); begin pragma Assert (Items.all (Items'Last) = Null_Item); if Items.all (Items'Last) /= Null_Item then raise Menu_Exception; else Eti_Exception (Set_Items (Men, Items.all'Address)); end if; end Redefine; function Item_Count (Men : Menu) return Natural is function Count (Men : Menu) return C_Int; pragma Import (C, Count, "item_count"); begin return Natural (Count (Men)); end Item_Count; function Items (Men : Menu; Index : Positive) return Item is use I_Array; function C_Mitems (Men : Menu) return Pointer; pragma Import (C, C_Mitems, "menu_items"); P : Pointer := C_Mitems (Men); begin if P = null or else Index > Item_Count (Men) then raise Menu_Exception; else P := P + ptrdiff_t (C_Int (Index) - 1); return P.all; end if; end Items; ------------------------------------------------------------------------------- function Create (Items : Item_Array_Access) return Menu is function Newmenu (Items : System.Address) return Menu; pragma Import (C, Newmenu, "new_menu"); M : Menu; begin pragma Assert (Items.all (Items'Last) = Null_Item); if Items.all (Items'Last) /= Null_Item then raise Menu_Exception; else M := Newmenu (Items.all'Address); if M = Null_Menu then raise Menu_Exception; end if; return M; end if; end Create; procedure Delete (Men : in out Menu) is function Free (Men : Menu) return Eti_Error; pragma Import (C, Free, "free_menu"); begin Eti_Exception (Free (Men)); Men := Null_Menu; end Delete; ------------------------------------------------------------------------------ function Driver (Men : Menu; Key : Key_Code) return Driver_Result is function Driver (Men : Menu; Key : C_Int) return Eti_Error; pragma Import (C, Driver, "menu_driver"); R : constant Eti_Error := Driver (Men, C_Int (Key)); begin case R is when E_Unknown_Command => return Unknown_Request; when E_No_Match => return No_Match; when E_Request_Denied | E_Not_Selectable => return Request_Denied; when others => Eti_Exception (R); return Menu_Ok; end case; end Driver; procedure Free (IA : in out Item_Array_Access; Free_Items : Boolean := False) is procedure Release is new Ada.Unchecked_Deallocation (Item_Array, Item_Array_Access); begin if IA /= null and then Free_Items then for I in IA'First .. (IA'Last - 1) loop if IA.all (I) /= Null_Item then Delete (IA.all (I)); end if; end loop; end if; Release (IA); end Free; ------------------------------------------------------------------------------- function Default_Menu_Options return Menu_Option_Set is begin return Get_Options (Null_Menu); end Default_Menu_Options; function Default_Item_Options return Item_Option_Set is begin return Get_Options (Null_Item); end Default_Item_Options; ------------------------------------------------------------------------------- end Terminal_Interface.Curses.Menus; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-putwin.adb0000644000175100001440000000763607746514446023274 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.PutWin -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.3 $ -- Binding Version 01.00 with Ada.Streams.Stream_IO.C_Streams; with Interfaces.C_Streams; with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.PutWin is package ICS renames Interfaces.C_Streams; package ACS renames Ada.Streams.Stream_IO.C_Streams; use type C_Int; procedure Put_Window (Win : Window; File : Ada.Streams.Stream_IO.File_Type) is function putwin (Win : Window; f : ICS.FILEs) return C_Int; pragma Import (C, putwin, "putwin"); R : constant C_Int := putwin (Win, ACS.C_Stream (File)); begin if R /= Curses_Ok then raise Curses_Exception; end if; end Put_Window; function Get_Window (File : Ada.Streams.Stream_IO.File_Type) return Window is function getwin (f : ICS.FILEs) return Window; pragma Import (C, getwin, "getwin"); W : constant Window := getwin (ACS.C_Stream (File)); begin if W = Null_Window then raise Curses_Exception; else return W; end if; end Get_Window; end Terminal_Interface.Curses.PutWin; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-float_io.ads0000644000175100001440000000671211315445471025212 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Float_IO -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type Num is digits <>; package Terminal_Interface.Curses.Text_IO.Float_IO is Default_Fore : Field := 2; Default_Aft : Field := Num'Digits - 1; Default_Exp : Field := 3; procedure Put (Win : Window; Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); procedure Put (Item : Num; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); private pragma Inline (Put); end Terminal_Interface.Curses.Text_IO.Float_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.ads0000644000175100001440000000723007746514446030457 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type T is (<>); package Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada); function Create (Set : Type_Set := Mixed_Case; Case_Sensitive : Boolean := False; Must_Be_Unique : Boolean := False) return Enumeration_Field; function Value (Fld : Field; Buf : Buffer_Number := Buffer_Number'First) return T; -- Translate the content of the fields buffer - indicated by the -- buffer number - into an enumeration value. If the buffer is empty -- or the content is invalid, a Constraint_Error is raises. end Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-text_io-integer_io.ads0000644000175100001440000000660411315445471025542 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Text_IO.Integer_IO -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type Num is range <>; package Terminal_Interface.Curses.Text_IO.Integer_IO is Default_Width : Field := Num'Width; Default_Base : Number_Base := 10; procedure Put (Win : Window; Item : Num; Width : Field := Default_Width; Base : Number_Base := Default_Base); procedure Put (Item : Num; Width : Field := Default_Width; Base : Number_Base := Default_Base); private pragma Inline (Put); end Terminal_Interface.Curses.Text_IO.Integer_IO; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-user.ads0000644000175100001440000001221611541120451026335 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.User -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.15 $ -- $Date: 2011/03/19 12:27:21 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; package Terminal_Interface.Curses.Forms.Field_Types.User is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.User); subtype C_Int is Interfaces.C.int; type User_Defined_Field_Type is abstract new Field_Type with null record; -- This is the root of the mechanism we use to create field types in -- Ada95. You should your own type derive from this one and implement -- the Field_Check and Character_Check functions for your own type. type User_Defined_Field_Type_Access is access all User_Defined_Field_Type'Class; function Field_Check (Fld : Field; Typ : User_Defined_Field_Type) return Boolean is abstract; -- If True is returned, the field is considered valid, otherwise it is -- invalid. function Character_Check (Ch : Character; Typ : User_Defined_Field_Type) return Boolean is abstract; -- If True is returned, the character is considered as valid for the -- field, otherwise as invalid. procedure Set_Field_Type (Fld : Field; Typ : User_Defined_Field_Type); -- This should work for all types derived from User_Defined_Field_Type. -- No need to reimplement it for your derived type. -- +---------------------------------------------------------------------- -- | Private Part. -- | Used by the Choice child package. private function C_Generic_Type return C_Field_Type; function Generic_Field_Check (Fld : Field; Usr : System.Address) return Curses_Bool; pragma Convention (C, Generic_Field_Check); -- This is the generic Field_Check_Function for the low-level fieldtype -- representing all the User_Defined_Field_Type derivatives. It routes -- the call to the Field_Check implementation for the type. function Generic_Char_Check (Ch : C_Int; Usr : System.Address) return Curses_Bool; pragma Convention (C, Generic_Char_Check); -- This is the generic Char_Check_Function for the low-level fieldtype -- representing all the User_Defined_Field_Type derivatives. It routes -- the call to the Character_Check implementation for the type. end Terminal_Interface.Curses.Forms.Field_Types.User; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-termcap.ads0000644000175100001440000001006607746514446023411 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Termcap -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.3 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Termcap is pragma Preelaborate (Terminal_Interface.Curses.Termcap); -- |===================================================================== -- | Man page curs_termcap.3x -- |===================================================================== -- Not implemented: tputs (see curs_terminfo) type Termcap_String is new String; -- | function TGoto (Cap : String; Col : Column_Position; Row : Line_Position) return Termcap_String; -- AKA: tgoto() -- | function Get_Entry (Name : String) return Boolean; -- AKA: tgetent() -- | function Get_Flag (Name : String) return Boolean; -- AKA: tgetflag() -- | procedure Get_Number (Name : String; Value : out Integer; Result : out Boolean); -- AKA: tgetnum() -- | procedure Get_String (Name : String; Value : out String; Result : out Boolean); function Get_String (Name : String) return Boolean; -- Returns True if the string is found. -- AKA: tgetstr() end Terminal_Interface.Curses.Termcap; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-enumeration.adb0000644000175100001440000001231212340207631027665 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.Enumeration -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Unchecked_Deallocation; with Interfaces.C; use Interfaces.C; with Interfaces.C.Strings; use Interfaces.C.Strings; with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; package body Terminal_Interface.Curses.Forms.Field_Types.Enumeration is function Create (Info : Enumeration_Info; Auto_Release_Names : Boolean := False) return Enumeration_Field is procedure Release_String is new Ada.Unchecked_Deallocation (String, String_Access); E : Enumeration_Field; L : constant size_t := 1 + size_t (Info.C); S : String_Access; begin E.Case_Sensitive := Info.Case_Sensitive; E.Match_Must_Be_Unique := Info.Match_Must_Be_Unique; E.Arr := new chars_ptr_array (size_t (1) .. L); for I in 1 .. Positive (L - 1) loop if Info.Names (I) = null then raise Form_Exception; end if; E.Arr.all (size_t (I)) := New_String (Info.Names (I).all); if Auto_Release_Names then S := Info.Names (I); Release_String (S); end if; end loop; E.Arr.all (L) := Null_Ptr; return E; end Create; procedure Release (Enum : in out Enumeration_Field) is I : size_t := 0; P : chars_ptr; begin loop P := Enum.Arr.all (I); exit when P = Null_Ptr; Free (P); Enum.Arr.all (I) := Null_Ptr; I := I + 1; end loop; Enum.Arr := null; end Release; procedure Set_Field_Type (Fld : Field; Typ : Enumeration_Field) is function Set_Fld_Type (F : Field := Fld; Arg1 : chars_ptr_array; Arg2 : C_Int; Arg3 : C_Int) return Eti_Error; pragma Import (C, Set_Fld_Type, "set_field_type_enum"); begin if Typ.Arr = null then raise Form_Exception; end if; Eti_Exception (Set_Fld_Type (Arg1 => Typ.Arr.all, Arg2 => C_Int (Boolean'Pos (Typ.Case_Sensitive)), Arg3 => C_Int (Boolean'Pos (Typ.Match_Must_Be_Unique)))); Wrap_Builtin (Fld, Typ, C_Choice_Router); end Set_Field_Type; end Terminal_Interface.Curses.Forms.Field_Types.Enumeration; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-forms-field_types-user-choice.ads0000644000175100001440000001176011541120503027566 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types.User.Choice -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2008,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.14 $ -- $Date: 2011/03/19 12:27:47 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; package Terminal_Interface.Curses.Forms.Field_Types.User.Choice is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.User.Choice); subtype C_Int is Interfaces.C.int; type User_Defined_Field_Type_With_Choice is abstract new User_Defined_Field_Type with null record; -- This is the root of the mechanism we use to create field types in -- Ada95 that allow the prev/next mechanism. You should your own type -- derive from this one and implement the Field_Check, Character_Check -- Next and Previous functions for your own type. type User_Defined_Field_Type_With_Choice_Access is access all User_Defined_Field_Type_With_Choice'Class; function Next (Fld : Field; Typ : User_Defined_Field_Type_With_Choice) return Boolean is abstract; -- If True is returned, the function successfully generated a next -- value into the fields buffer. function Previous (Fld : Field; Typ : User_Defined_Field_Type_With_Choice) return Boolean is abstract; -- If True is returned, the function successfully generated a previous -- value into the fields buffer. -- +---------------------------------------------------------------------- -- | Private Part. -- | private function C_Generic_Choice return C_Field_Type; function Generic_Next (Fld : Field; Usr : System.Address) return Curses_Bool; pragma Convention (C, Generic_Next); -- This is the generic next Choice_Function for the low-level fieldtype -- representing all the User_Defined_Field_Type derivatives. It routes -- the call to the Next implementation for the type. function Generic_Prev (Fld : Field; Usr : System.Address) return Curses_Bool; pragma Convention (C, Generic_Prev); -- This is the generic prev Choice_Function for the low-level fieldtype -- representing all the User_Defined_Field_Type derivatives. It routes -- the call to the Previous implementation for the type. end Terminal_Interface.Curses.Forms.Field_Types.User.Choice; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-trace.adb_p0000644000175100001440000000744212340207715023336 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Trace -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000-2009,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ #if ADA_TRACE then with Interfaces.C; use Interfaces.C; #end if; package body Terminal_Interface.Curses.Trace is #if ADA_TRACE then procedure Trace_On (x : Trace_Attribute_Set) is procedure traceC (y : Trace_Attribute_Set); pragma Import (C, traceC, "trace"); begin traceC (x); end Trace_On; procedure Trace_Put (str : String) is procedure tracef (format : char_array; s : char_array); pragma Import (C, tracef, "_traces"); -- _traces() is defined in c_varargs_to_ada.h begin tracef (To_C ("%s"), To_C (str)); end Trace_Put; #else procedure Trace_On (x : Trace_Attribute_Set) is pragma Warnings (Off, x); -- unreferenced begin null; end Trace_On; procedure Trace_Put (str : String) is pragma Warnings (Off, str); -- unreferenced begin null; end Trace_Put; #end if; end Terminal_Interface.Curses.Trace; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-panels-user_data.adb0000644000175100001440000000777011315446021025150 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Panels.User_Data -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels; package body Terminal_Interface.Curses.Panels.User_Data is use type Interfaces.C.int; procedure Set_User_Data (Pan : Panel; Data : User_Access) is function Set_Panel_Userptr (Pan : Panel; Addr : User_Access) return C_Int; pragma Import (C, Set_Panel_Userptr, "set_panel_userptr"); begin if Set_Panel_Userptr (Pan, Data) = Curses_Err then raise Panel_Exception; end if; end Set_User_Data; function Get_User_Data (Pan : Panel) return User_Access is function Panel_Userptr (Pan : Panel) return User_Access; pragma Import (C, Panel_Userptr, "panel_userptr"); begin return Panel_Userptr (Pan); end Get_User_Data; procedure Get_User_Data (Pan : Panel; Data : out User_Access) is begin Data := Get_User_Data (Pan); end Get_User_Data; end Terminal_Interface.Curses.Panels.User_Data; ncurses-6.0-20160213/Ada95/src/terminal_interface-curses-aux.adb0000644000175100001440000001213011315445604022506 0ustar tomusers------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Aux -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package body Terminal_Interface.Curses.Aux is -- -- Some helpers procedure Fill_String (Cp : chars_ptr; Str : out String) is -- Fill the string with the characters referenced by the -- chars_ptr. -- Len : Natural; begin if Cp /= Null_Ptr then Len := Natural (Strlen (Cp)); if Str'Length < Len then raise Constraint_Error; end if; declare S : String (1 .. Len); begin S := Value (Cp); Str (Str'First .. (Str'First + Len - 1)) := S (S'Range); end; else Len := 0; end if; if Len < Str'Length then Str ((Str'First + Len) .. Str'Last) := (others => ' '); end if; end Fill_String; function Fill_String (Cp : chars_ptr) return String is Len : Natural; begin if Cp /= Null_Ptr then Len := Natural (Strlen (Cp)); if Len = 0 then return ""; else declare S : String (1 .. Len); begin Fill_String (Cp, S); return S; end; end if; else return ""; end if; end Fill_String; procedure Eti_Exception (Code : Eti_Error) is begin case Code is when E_Ok => null; when E_System_Error => raise Eti_System_Error; when E_Bad_Argument => raise Eti_Bad_Argument; when E_Posted => raise Eti_Posted; when E_Connected => raise Eti_Connected; when E_Bad_State => raise Eti_Bad_State; when E_No_Room => raise Eti_No_Room; when E_Not_Posted => raise Eti_Not_Posted; when E_Unknown_Command => raise Eti_Unknown_Command; when E_No_Match => raise Eti_No_Match; when E_Not_Selectable => raise Eti_Not_Selectable; when E_Not_Connected => raise Eti_Not_Connected; when E_Request_Denied => raise Eti_Request_Denied; when E_Invalid_Field => raise Eti_Invalid_Field; when E_Current => raise Eti_Current; end case; end Eti_Exception; end Terminal_Interface.Curses.Aux; ncurses-6.0-20160213/Ada95/gen/0000755000175100001440000000000012657723566014113 5ustar tomusersncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-trace.ads.m40000644000175100001440000001441212340207631023331 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-trace__ads.htm')dnl include(M4MACRO)------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Trace -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 2000,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Eugene V. Melaragno 2000 -- Version Control: -- $Revision: 1.4 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Trace is pragma Preelaborate (Terminal_Interface.Curses.Trace); type Trace_Attribute_Set is record Times : Boolean; Tputs : Boolean; Update : Boolean; Cursor_Move : Boolean; Character_Output : Boolean; Calls : Boolean; Virtual_Puts : Boolean; Input_Events : Boolean; TTY_State : Boolean; Internal_Calls : Boolean; Character_Calls : Boolean; Termcap_TermInfo : Boolean; Attribute_Color : Boolean; end record; pragma Convention (C_Pass_By_Copy, Trace_Attribute_Set); for Trace_Attribute_Set use record Times at 0 range Curses_Constants.TRACE_TIMES_First .. Curses_Constants.TRACE_TIMES_Last; Tputs at 0 range Curses_Constants.TRACE_TPUTS_First .. Curses_Constants.TRACE_TPUTS_Last; Update at 0 range Curses_Constants.TRACE_UPDATE_First .. Curses_Constants.TRACE_UPDATE_Last; Cursor_Move at 0 range Curses_Constants.TRACE_MOVE_First .. Curses_Constants.TRACE_MOVE_Last; Character_Output at 0 range Curses_Constants.TRACE_CHARPUT_First .. Curses_Constants.TRACE_CHARPUT_Last; Calls at 0 range Curses_Constants.TRACE_CALLS_First .. Curses_Constants.TRACE_CALLS_Last; Virtual_Puts at 0 range Curses_Constants.TRACE_VIRTPUT_First .. Curses_Constants.TRACE_VIRTPUT_Last; Input_Events at 0 range Curses_Constants.TRACE_IEVENT_First .. Curses_Constants.TRACE_IEVENT_Last; TTY_State at 0 range Curses_Constants.TRACE_BITS_First .. Curses_Constants.TRACE_BITS_Last; Internal_Calls at 0 range Curses_Constants.TRACE_ICALLS_First .. Curses_Constants.TRACE_ICALLS_Last; Character_Calls at 0 range Curses_Constants.TRACE_CCALLS_First .. Curses_Constants.TRACE_CCALLS_Last; Termcap_TermInfo at 0 range Curses_Constants.TRACE_DATABASE_First .. Curses_Constants.TRACE_DATABASE_Last; Attribute_Color at 0 range Curses_Constants.TRACE_ATTRS_First .. Curses_Constants.TRACE_ATTRS_Last; end record; pragma Warnings (Off); for Trace_Attribute_Set'Size use Curses_Constants.Trace_Size; pragma Warnings (On); Trace_Disable : constant Trace_Attribute_Set := (others => False); Trace_Ordinary : constant Trace_Attribute_Set := (Times => True, Tputs => True, Update => True, Cursor_Move => True, Character_Output => True, others => False); Trace_Maximum : constant Trace_Attribute_Set := (others => True); ------------------------------------------------------------------------------ -- MANPAGE(`curs_trace.3x') -- ANCHOR(`trace()',`Trace_on') procedure Trace_On (x : Trace_Attribute_Set); -- The debugging library has trace. -- ANCHOR(`_tracef()',`Trace_Put') procedure Trace_Put (str : String); -- AKA Current_Trace_Setting : Trace_Attribute_Set; pragma Import (C, Current_Trace_Setting, "_nc_tracing"); end Terminal_Interface.Curses.Trace; ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-forms-field_user_data.ads.m40000644000175100001440000000746311315446021026500 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-forms-field_user_data__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_User_Data -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.16 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type User is limited private; type User_Access is access User; package Terminal_Interface.Curses.Forms.Field_User_Data is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_User_Data); -- MANPAGE(`form_field_userptr.3x') -- ANCHOR(`set_field_userptr',`Set_User_Data') procedure Set_User_Data (Fld : Field; Data : User_Access); -- AKA pragma Inline (Set_User_Data); -- ANCHOR(`field_userptr',`Get_User_Data') procedure Get_User_Data (Fld : Field; Data : out User_Access); -- AKA -- ANCHOR(`field_userptr',`Get_User_Data') function Get_User_Data (Fld : Field) return User_Access; -- AKA -- Sama as function pragma Inline (Get_User_Data); end Terminal_Interface.Curses.Forms.Field_User_Data; ncurses-6.0-20160213/Ada95/gen/Makefile.in0000644000175100001440000002753212560513367016156 0ustar tomusers############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Juergen Pfeifer, 1996 # # $Id: Makefile.in,v 1.85 2015/08/05 23:06:31 tom Exp $ # .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile x = @EXEEXT@ top_srcdir = @top_srcdir@ DESTDIR = @DESTDIR@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ includedir = @includedir@ INSTALL = @INSTALL@ INSTALL_PROG = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ AWK = @AWK@ LN_S = @LN_S@ CC = @CC@ HOST_CC = @BUILD_CC@ CFLAGS = @CFLAGS@ HOST_CFLAGS = @BUILD_CFLAGS@ CPPFLAGS = @CPPFLAGS@ HOST_CPPFLAGS = @ACPPFLAGS@ @BUILD_CPPFLAGS@ \ -DHAVE_CONFIG_H -I$(srcdir) CCFLAGS = $(HOST_CPPFLAGS) $(HOST_CFLAGS) CFLAGS_NORMAL = $(CCFLAGS) CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) REL_VERSION = @cf_cv_rel_version@ ABI_VERSION = @cf_cv_abi_version@ LOCAL_LIBDIR = @top_builddir@/lib LINK = $(HOST_CC) LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ # For the wide-character configuration combined with broken_linker, we need # addresses of ACS_xxx constants, which requires linking with the newly built # ncurses library. If cross-compiling, the developer has to fill in a workable # native library for this purpose. NATIVE_LDFLAGS = @LD_MODEL@ $(LOCAL_LIBS) @TINFO_LDFLAGS2@ $(LDFLAGS) @LIBS@ @LOCAL_LDFLAGS2@ $(LDFLAGS) @TINFO_LIBS@ CROSS_LDFLAGS = @BUILD_LDFLAGS@ @BUILD_LIBS@ ACTUAL_LDFLAGS = @ADAGEN_LDFLAGS@ RANLIB = @RANLIB@ M4 = m4 M4FLAGS = -DNCURSES_EXT_FUNCS=@NCURSES_EXT_FUNCS@ ADACURSES_CONFIG = adacurses@USE_CFG_SUFFIX@-config WRAPPER = @NCURSES_SHLIB2@ PROG_GENERATE = ./generate$x GENERATE = $(PROG_GENERATE) '@DFT_ARG_SUFFIX@' DEL_ADAMODE = sed -e '/^\-\-\ \ \-\*\-\ ada\ \-\*\-.*/d' GNATHTML = `type -p gnathtml || type -p gnathtml.pl 2>/dev/null` GNATHP = www.gnat.com ################################################################################ ALIB = @cf_ada_package@ ABASE = $(ALIB)-curses ADA_SRCDIR = ../src GEN_TARGETS = $(ADA_SRCDIR)/$(ABASE).ads \ $(ADA_SRCDIR)/$(ABASE).adb \ $(ADA_SRCDIR)/$(ABASE)-aux.ads \ $(ADA_SRCDIR)/$(ABASE)-trace.ads \ $(ADA_SRCDIR)/$(ABASE)-menus.ads \ $(ADA_SRCDIR)/$(ABASE)-forms.ads \ $(ADA_SRCDIR)/$(ABASE)-mouse.ads \ $(ADA_SRCDIR)/$(ABASE)-panels.ads \ $(ADA_SRCDIR)/$(ABASE)-menus-menu_user_data.ads \ $(ADA_SRCDIR)/$(ABASE)-menus-item_user_data.ads \ $(ADA_SRCDIR)/$(ABASE)-forms-form_user_data.ads \ $(ADA_SRCDIR)/$(ABASE)-forms-field_types.ads \ $(ADA_SRCDIR)/$(ABASE)-forms-field_user_data.ads \ $(ADA_SRCDIR)/$(ABASE)-panels-user_data.ads \ $(ADA_SRCDIR)/$(ABASE)_constants.ads GEN_SRC = $(srcdir)/$(ABASE).ads.m4 \ $(srcdir)/$(ABASE).adb.m4 \ $(srcdir)/$(ABASE)-aux.ads.m4 \ $(srcdir)/$(ABASE)-trace.ads.m4 \ $(srcdir)/$(ABASE)-menus.ads.m4 \ $(srcdir)/$(ABASE)-forms.ads.m4 \ $(srcdir)/$(ABASE)-mouse.ads.m4 \ $(srcdir)/$(ABASE)-panels.ads.m4 \ $(srcdir)/$(ABASE)-menus-menu_user_data.ads.m4 \ $(srcdir)/$(ABASE)-menus-item_user_data.ads.m4 \ $(srcdir)/$(ABASE)-forms-form_user_data.ads.m4 \ $(srcdir)/$(ABASE)-forms-field_types.ads.m4 \ $(srcdir)/$(ABASE)-forms-field_user_data.ads.m4 \ $(srcdir)/$(ABASE)-panels-user_data.ads.m4 all \ libs : $(GEN_TARGETS) @echo made $@ sources: $(DESTDIR)$(bindir) : mkdir -p $@ install \ install.libs :: $(DESTDIR)$(bindir) $(ADACURSES_CONFIG) $(INSTALL_PROG) $(ADACURSES_CONFIG) $(DESTDIR)$(bindir)/$(ADACURSES_CONFIG) uninstall \ uninstall.libs :: -rm -f $(DESTDIR)$(bindir)/$(ADACURSES_CONFIG) $(PROG_GENERATE): gen.o @ECHO_LD@ $(LINK) $(CFLAGS_NORMAL) gen.o $(ACTUAL_LDFLAGS) -o $@ gen.o: $(srcdir)/gen.c $(HOST_CC) $(CFLAGS_NORMAL) -c -o $@ $(srcdir)/gen.c $(ADA_SRCDIR)/$(ABASE)_constants.ads: $(PROG_GENERATE) $(WRAPPER) "$(GENERATE)" >$@ ################################################################################ $(ADA_SRCDIR)/$(ABASE).ads: $(srcdir)/$(ABASE).ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE).ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE).adb: $(srcdir)/$(ABASE).adb.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE).adb.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-aux.ads: $(srcdir)/$(ABASE)-aux.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-aux.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-trace.ads: $(srcdir)/$(ABASE)-trace.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-trace.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-menus.ads: $(srcdir)/$(ABASE)-menus.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-menus.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-forms.ads: $(srcdir)/$(ABASE)-forms.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-forms.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-mouse.ads: $(srcdir)/$(ABASE)-mouse.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-mouse.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-panels.ads: $(srcdir)/$(ABASE)-panels.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-panels.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-menus-menu_user_data.ads: \ $(srcdir)/$(ABASE)-menus-menu_user_data.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-menus-menu_user_data.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-menus-item_user_data.ads: \ $(srcdir)/$(ABASE)-menus-item_user_data.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-menus-item_user_data.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-forms-form_user_data.ads: \ $(srcdir)/$(ABASE)-forms-form_user_data.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-forms-form_user_data.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-forms-field_types.ads: \ $(srcdir)/$(ABASE)-forms-field_types.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-forms-field_types.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-forms-field_user_data.ads: \ $(srcdir)/$(ABASE)-forms-field_user_data.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-forms-field_user_data.ads.m4 |\ $(DEL_ADAMODE) >$@ $(ADA_SRCDIR)/$(ABASE)-panels-user_data.ads: \ $(srcdir)/$(ABASE)-panels-user_data.ads.m4 \ $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ $(srcdir)/$(ABASE)-panels-user_data.ads.m4 |\ $(DEL_ADAMODE) >$@ install.progs :: tags: ctags *.[ch] @MAKE_UPPER_TAGS@TAGS: @MAKE_UPPER_TAGS@ etags *.[ch] mostlyclean :: -rm -f a.out core $(PROG_GENERATE) *.o clean :: mostlyclean -rm -f $(GEN_TARGETS) instab.tmp *.ad[bs] *.html *.ali *.tmp distclean :: clean -rm -f $(ADACURSES_CONFIG) -rm -f Makefile realclean :: distclean HTML_DIR = @ADAHTML_DIR@ instab.tmp : table.m4 $(GEN_SRC) @rm -f $@ @for f in $(GEN_SRC) ; do \ $(M4) $(M4FLAGS) -DM4MACRO=table.m4 $$f | $(DEL_ADAMODE) >> $@ ;\ done; $(HTML_DIR)/table.html : instab.tmp @-touch $@ @-chmod +w $@ @echo ' $@ @echo 'PUBLIC "-//IETF//DTD HTML 3.0//EN">' >> $@ @echo '' >> $@ @echo '' >> $@ @echo 'Correspondence between ncurses C and Ada functions' >>$@ @echo '' >> $@ @echo '' >> $@ @echo '

Correspondence between ncurses C and Ada functions

' >>$@ @echo '

Sorted by C function name

' >>$@ @echo '' >>$@ @echo '' >>$@ @echo '' >>$@ @sort < instab.tmp >> $@ @echo '
C nameAda nameman page
' >>$@ @rm -f instab.tmp adahtml: test -n "$(GNATHTML)" || exit 1 @find $(HTML_DIR) -type f -exec rm -f {} \; @mkdir -p $(HTML_DIR) cp -p ../src/*.ad[sb] . && chmod +w *.ad[sb] @USE_OLD_MAKERULES@ ln -sf ../src/*.ali . @USE_GNAT_PROJECTS@ ln -sf ../static-ali/*.ali . @echo "Filtering generated files" @for f in $(GEN_SRC); do \ h=`basename $$f` ;\ g=`basename $$f .ads.m4` ;\ if test "$$g" != "$$h" ; then \ $(M4) $(M4FLAGS) -DM4MACRO=html.m4 $$f | $(DEL_ADAMODE) > $$g.ads ;\ echo "... $$g.ads" ;\ fi \ done @-rm -f $(HTML_DIR)/$(ALIB)*.htm* $(GNATHTML) -d -f $(ALIB)*.ads for f in html/$(ALIB)*.htm*; do \ a=`basename $$f` ; \ sed -e 's/You may also.*body.*//' <$$f |\ sed -e 's%GNAT%
GNAT%g' |\ sed -e 's%<A HREF%%g' |\ sed -e 's/3X/3x/g' |\ sed -e 's/$$\([ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxz0123456789_]*:.*\)\$$/@\1@/' |\ sed -e 's%</A>%%g' > $$a.tmp ;\ mv $$a.tmp $$f ;\ done @rm -f *.ad[sb] *.ali *.tmp @for f in funcs.htm main.htm ; do \ sed -e "\%\[ \]%d" < html/$$f > $$f ;\ mv $$f html/$$f ;\ done @rm -f "html/funcs/ .htm" @cp -pdrf html/* $(HTML_DIR)/ @rm -rf html html : adahtml $(HTML_DIR)/table.html @echo made $@ ############################################################################### # The remainder of this file is automatically generated during configuration ############################################################################### ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-forms-field_types.ads.m40000644000175100001440000002650012340207631025667 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-forms-field_user_data__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Field_Types -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.19 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; with Terminal_Interface.Curses.Aux; package Terminal_Interface.Curses.Forms.Field_Types is pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types); use type Interfaces.C.int; subtype C_Int is Interfaces.C.int; -- MANPAGE(`form_fieldtype.3x') type Field_Type is abstract tagged null record; -- Abstract base type for all field types. A concrete field type -- is an extension that adds some data elements describing formats or -- boundary values for the type and validation routines. -- For the builtin low-level fieldtypes, the validation routines are -- already defined by the low-level C library. -- The builtin types like Alpha or AlphaNumeric etc. are defined in -- child packages of this package. You may use one of them as example -- how to create you own child packages for low-level field types that -- you may have already written in C. type Field_Type_Access is access all Field_Type'Class; -- ANCHOR(`set_field_type()',`Set_Type') procedure Set_Field_Type (Fld : Field; Fld_Type : Field_Type) is abstract; -- AKA -- But: we hide the vararg mechanism of the C interface. You always -- have to pass a single Field_Type parameter. -- --------------------------------------------------------------------- -- MANPAGE(`form_field_validation.3x') -- ANCHOR(`field_type()',`Get_Type') function Get_Type (Fld : Field) return Field_Type_Access; -- AKA -- ALIAS(`field_arg()') -- In Ada95 we can combine these. If you try to retrieve the field type -- that is not defined as extension of the abstract tagged type above, -- you will raise a Form_Exception. -- This is not inlined -- +---------------------------------------------------------------------- -- | Private Part. -- | Most of this is used by the implementations of the child packages. -- | private type Makearg_Function is access function (Args : System.Address) return System.Address; pragma Convention (C, Makearg_Function); type Copyarg_Function is access function (Usr : System.Address) return System.Address; pragma Convention (C, Copyarg_Function); type Freearg_Function is access procedure (Usr : System.Address); pragma Convention (C, Freearg_Function); type Field_Check_Function is access function (Fld : Field; Usr : System.Address) return Curses_Bool; pragma Convention (C, Field_Check_Function); type Char_Check_Function is access function (Ch : C_Int; Usr : System.Address) return Curses_Bool; pragma Convention (C, Char_Check_Function); type Choice_Function is access function (Fld : Field; Usr : System.Address) return Curses_Bool; pragma Convention (C, Choice_Function); -- +---------------------------------------------------------------------- -- | This must be in sync with the FIELDTYPE structure in form.h -- | type Low_Level_Field_Type is record Status : Interfaces.C.unsigned_short; Ref_Count : Interfaces.C.long; Left, Right : System.Address; Makearg : Makearg_Function; Copyarg : Copyarg_Function; Freearg : Freearg_Function; Fcheck : Field_Check_Function; Ccheck : Char_Check_Function; Next, Prev : Choice_Function; end record; pragma Convention (C, Low_Level_Field_Type); type C_Field_Type is access all Low_Level_Field_Type; Null_Field_Type : constant C_Field_Type := null; -- +---------------------------------------------------------------------- -- | This four low-level fieldtypes are the ones associated with -- | fieldtypes handled by this binding. Any other low-level fieldtype -- | will result in a Form_Exception is function Get_Type. -- | M_Generic_Type : C_Field_Type := null; M_Generic_Choice : C_Field_Type := null; M_Builtin_Router : C_Field_Type := null; M_Choice_Router : C_Field_Type := null; -- Two wrapper functions to access those low-level fieldtypes defined -- in this package. function C_Builtin_Router return C_Field_Type; function C_Choice_Router return C_Field_Type; procedure Wrap_Builtin (Fld : Field; Typ : Field_Type'Class; Cft : C_Field_Type := C_Builtin_Router); -- This procedure has to be called by the Set_Field_Type implementation -- for builtin low-level fieldtypes to replace it by an Ada95 -- conformant Field_Type object. -- The parameter Cft must be C_Builtin_Router for regular low-level -- fieldtypes (like TYP_ALPHA or TYP_ALNUM) and C_Choice_Router for -- low-level fieldtypes witch choice functions (like TYP_ENUM). -- Any other value will raise a Form_Exception. function Make_Arg (Args : System.Address) return System.Address; pragma Import (C, Make_Arg, "void_star_make_arg"); -- This is the Makearg_Function for the internal low-level types -- introduced by this binding. function Copy_Arg (Usr : System.Address) return System.Address; pragma Convention (C, Copy_Arg); -- This is the Copyarg_Function for the internal low-level types -- introduced by this binding. procedure Free_Arg (Usr : System.Address); pragma Convention (C, Free_Arg); -- This is the Freearg_Function for the internal low-level types -- introduced by this binding. function Field_Check_Router (Fld : Field; Usr : System.Address) return Curses_Bool; pragma Convention (C, Field_Check_Router); -- This is the Field_Check_Function for the internal low-level types -- introduced to wrap the low-level types by a Field_Type derived -- type. It routes the call to the corresponding low-level validation -- function. function Char_Check_Router (Ch : C_Int; Usr : System.Address) return Curses_Bool; pragma Convention (C, Char_Check_Router); -- This is the Char_Check_Function for the internal low-level types -- introduced to wrap the low-level types by a Field_Type derived -- type. It routes the call to the corresponding low-level validation -- function. function Next_Router (Fld : Field; Usr : System.Address) return Curses_Bool; pragma Convention (C, Next_Router); -- This is the Choice_Function for the internal low-level types -- introduced to wrap the low-level types by a Field_Type derived -- type. It routes the call to the corresponding low-level next_choice -- function. function Prev_Router (Fld : Field; Usr : System.Address) return Curses_Bool; pragma Convention (C, Prev_Router); -- This is the Choice_Function for the internal low-level types -- introduced to wrap the low-level types by a Field_Type derived -- type. It routes the call to the corresponding low-level prev_choice -- function. -- This is the Argument structure maintained by all low-level field types -- introduced by this binding. type Argument is record Typ : Field_Type_Access; -- the Field_Type creating this record Usr : System.Address; -- original arg for builtin low-level types Cft : C_Field_Type; -- the original low-level type end record; type Argument_Access is access all Argument; -- +---------------------------------------------------------------------- -- | -- | Some Imports of libform routines to deal with low-level fieldtypes. -- | function New_Fieldtype (Fcheck : Field_Check_Function; Ccheck : Char_Check_Function) return C_Field_Type; pragma Import (C, New_Fieldtype, "new_fieldtype"); function Set_Fieldtype_Arg (Cft : C_Field_Type; Mak : Makearg_Function := Make_Arg'Access; Cop : Copyarg_Function := Copy_Arg'Access; Fre : Freearg_Function := Free_Arg'Access) return Aux.Eti_Error; pragma Import (C, Set_Fieldtype_Arg, "set_fieldtype_arg"); function Set_Fieldtype_Choice (Cft : C_Field_Type; Next, Prev : Choice_Function) return Aux.Eti_Error; pragma Import (C, Set_Fieldtype_Choice, "set_fieldtype_choice"); end Terminal_Interface.Curses.Forms.Field_Types; ncurses-6.0-20160213/Ada95/gen/normal.m40000644000175100001440000000476310422534476015643 0ustar tomusersdnl*************************************************************************** dnl Copyright (c) 1998,2006 Free Software Foundation, Inc. * dnl * dnl Permission is hereby granted, free of charge, to any person obtaining a * dnl copy of this software and associated documentation files (the * dnl "Software"), to deal in the Software without restriction, including * dnl without limitation the rights to use, copy, modify, merge, publish, * dnl distribute, distribute with modifications, sublicense, and/or sell * dnl copies of the Software, and to permit persons to whom the Software is * dnl furnished to do so, subject to the following conditions: * dnl * dnl The above copyright notice and this permission notice shall be included * dnl in all copies or substantial portions of the Software. * dnl * dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. * dnl * dnl Except as contained in this notice, the name(s) of the above copyright * dnl holders shall not be used in advertising or otherwise to promote the * dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl dnl $Id: normal.m4,v 1.2 2006/04/22 23:16:14 tom Exp $ define(`MANPAGE',`define(`MANPG',$1)dnl |===================================================================== -- | Man page MANPG -- |=====================================================================')dnl define(`ANCHOR',`define(`CFUNAME',`$1')define(`AFUNAME',`$2')'dnl |)dnl define(`AKA',``AKA': CFUNAME')dnl define(`ALIAS',``AKA': $1')dnl ncurses-6.0-20160213/Ada95/gen/gen.c0000644000175100001440000004526612657723566015045 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1996 * ****************************************************************************/ /* Version Control $Id: gen.c,v 1.70 2016/02/13 22:00:22 tom Exp $ --------------------------------------------------------------------------*/ /* This program prints on its standard output the source for the Terminal_Interface.Curses_Constants Ada package specification. This pure package only exports C constants to the Ada compiler. */ #ifdef HAVE_CONFIG_H #include #else #include #endif #include #include #include #include #undef UCHAR #undef UINT typedef unsigned char UCHAR; typedef unsigned int UINT; /* These global variables will be set by main () */ static int little_endian; static const char *my_program_invocation_name = NULL; static void my_error(const char *message) { fprintf(stderr, "%s: %s\n", my_program_invocation_name, message); exit(EXIT_FAILURE); } static void print_constant(const char *name, long value) { printf(" %-28s : constant := %ld;\n", name, value); } #define PRINT_NAMED_CONSTANT(name) \ print_constant (#name, name) static void print_comment(const char *message) { printf("\n -- %s\n\n", message); } /* * Make sure that KEY_MIN and KEY_MAX are defined. * main () will protest if KEY_MIN == 256 */ #ifndef KEY_MAX # define KEY_MAX 0777 #endif #ifndef KEY_MIN # define KEY_MIN 0401 #endif static UCHAR bit_is_set(const UCHAR * const data, const UINT offset) { const UCHAR byte = data[offset >> 3]; UINT bit; if (little_endian) bit = offset; /* offset */ else /* or */ bit = ~offset; /* 7 - offset */ bit &= 7; /* modulo 8 */ return (UCHAR) (byte & (1 << bit)); } /* Find lowest and highest used offset in a byte array. */ /* Returns 0 if and only if all bits are unset. */ static int find_pos(const UCHAR * const data, const UINT sizeof_data, UINT * const low, UINT * const high) { const UINT last = (sizeof_data << 3) - 1; UINT offset; for (offset = last; !bit_is_set(data, offset); offset--) if (!offset) /* All bits are 0. */ return 0; *high = offset; for (offset = 0; !bit_is_set(data, offset); offset++) { } *low = offset; return -1; } #define PRINT_BITMASK(c_type, ada_name, mask_macro) \ { \ UINT first, last; \ c_type mask = (mask_macro); \ if (!find_pos ((UCHAR *)&mask, sizeof (mask), &first, &last)) \ my_error ("failed to locate " ada_name); \ print_constant (ada_name "_First", first); \ print_constant (ada_name "_Last", last); \ } #define PRINT_NAMED_BITMASK(c_type, mask_macro) \ PRINT_BITMASK (c_type, #mask_macro, mask_macro) #define STRUCT_OFFSET(record, field) \ { \ UINT first, last; \ record mask; \ memset (&mask, 0, sizeof (mask)); \ memset (&mask.field, 0xff, sizeof(mask.field)); \ if (!find_pos ((UCHAR *)&mask, sizeof (mask), &first, &last)) \ my_error ("failed to locate" #record "_" #field); \ print_constant (#record "_" #field "_First", first); \ print_constant (#record "_" #field "_Last", last); \ } /*--------------------*/ /* Start of main (). */ /*--------------------*/ int main(int argc, const char *argv[]) { const int x = 0x12345678; little_endian = (*((const char *)&x) == 0x78); my_program_invocation_name = argv[0]; if (KEY_MIN == 256) my_error("unexpected value for KEY_MIN: 256"); if (argc != 2) my_error("Only one argument expected (DFT_ARG_SUFFIX)"); printf("-- Generated by the C program %s (source " __FILE__ ").\n", my_program_invocation_name); printf("-- Do not edit this file directly.\n"); printf("-- The values provided here may vary on your system.\n"); printf("\n"); printf("with System;\n"); printf("package Terminal_Interface.Curses_Constants is\n"); printf(" pragma Pure;\n"); printf("\n"); printf(" DFT_ARG_SUFFIX : constant String := \"%s\";\n", argv[1]); printf(" Bit_Order : constant System.Bit_Order := System.%s_Order_First;\n", little_endian ? "Low" : "High"); print_constant("Sizeof_Bool", 8 * sizeof(bool)); PRINT_NAMED_CONSTANT(OK); PRINT_NAMED_CONSTANT(ERR); printf(" pragma Warnings (Off); -- redefinition of Standard.True and False\n"); PRINT_NAMED_CONSTANT(TRUE); PRINT_NAMED_CONSTANT(FALSE); printf(" pragma Warnings (On);\n"); print_comment("Version of the ncurses library from extensions(3NCURSES)"); PRINT_NAMED_CONSTANT(NCURSES_VERSION_MAJOR); PRINT_NAMED_CONSTANT(NCURSES_VERSION_MINOR); printf(" Version : constant String := \"%d.%d\";\n", NCURSES_VERSION_MAJOR, NCURSES_VERSION_MINOR); print_comment("Character non-color attributes from attr(3NCURSES)"); printf(" -- attr_t and chtype may be signed in C.\n"); printf(" type attr_t is mod 2 ** %lu;\n", (long unsigned)(8 * sizeof(attr_t))); PRINT_NAMED_BITMASK(attr_t, A_CHARTEXT); PRINT_NAMED_BITMASK(attr_t, A_COLOR); PRINT_BITMASK(attr_t, "Attr", A_ATTRIBUTES & ~A_COLOR); PRINT_NAMED_BITMASK(attr_t, A_STANDOUT); PRINT_NAMED_BITMASK(attr_t, A_UNDERLINE); PRINT_NAMED_BITMASK(attr_t, A_REVERSE); PRINT_NAMED_BITMASK(attr_t, A_BLINK); PRINT_NAMED_BITMASK(attr_t, A_DIM); PRINT_NAMED_BITMASK(attr_t, A_BOLD); PRINT_NAMED_BITMASK(attr_t, A_PROTECT); PRINT_NAMED_BITMASK(attr_t, A_INVIS); PRINT_NAMED_BITMASK(attr_t, A_ALTCHARSET); PRINT_NAMED_BITMASK(attr_t, A_HORIZONTAL); PRINT_NAMED_BITMASK(attr_t, A_LEFT); PRINT_NAMED_BITMASK(attr_t, A_LOW); PRINT_NAMED_BITMASK(attr_t, A_RIGHT); PRINT_NAMED_BITMASK(attr_t, A_TOP); PRINT_NAMED_BITMASK(attr_t, A_VERTICAL); print_constant("chtype_Size", 8 * sizeof(chtype)); print_comment("predefined color numbers from color(3NCURSES)"); PRINT_NAMED_CONSTANT(COLOR_BLACK); PRINT_NAMED_CONSTANT(COLOR_RED); PRINT_NAMED_CONSTANT(COLOR_GREEN); PRINT_NAMED_CONSTANT(COLOR_YELLOW); PRINT_NAMED_CONSTANT(COLOR_BLUE); PRINT_NAMED_CONSTANT(COLOR_MAGENTA); PRINT_NAMED_CONSTANT(COLOR_CYAN); PRINT_NAMED_CONSTANT(COLOR_WHITE); print_comment("ETI return codes from ncurses.h"); PRINT_NAMED_CONSTANT(E_OK); PRINT_NAMED_CONSTANT(E_SYSTEM_ERROR); PRINT_NAMED_CONSTANT(E_BAD_ARGUMENT); PRINT_NAMED_CONSTANT(E_POSTED); PRINT_NAMED_CONSTANT(E_CONNECTED); PRINT_NAMED_CONSTANT(E_BAD_STATE); PRINT_NAMED_CONSTANT(E_NO_ROOM); PRINT_NAMED_CONSTANT(E_NOT_POSTED); PRINT_NAMED_CONSTANT(E_UNKNOWN_COMMAND); PRINT_NAMED_CONSTANT(E_NO_MATCH); PRINT_NAMED_CONSTANT(E_NOT_SELECTABLE); PRINT_NAMED_CONSTANT(E_NOT_CONNECTED); PRINT_NAMED_CONSTANT(E_REQUEST_DENIED); PRINT_NAMED_CONSTANT(E_INVALID_FIELD); PRINT_NAMED_CONSTANT(E_CURRENT); print_comment("Input key codes not defined in any ncurses manpage"); PRINT_NAMED_CONSTANT(KEY_MIN); PRINT_NAMED_CONSTANT(KEY_MAX); #ifdef KEY_CODE_YES PRINT_NAMED_CONSTANT(KEY_CODE_YES); #endif print_comment("Input key codes from getch(3NCURSES)"); PRINT_NAMED_CONSTANT(KEY_BREAK); PRINT_NAMED_CONSTANT(KEY_DOWN); PRINT_NAMED_CONSTANT(KEY_UP); PRINT_NAMED_CONSTANT(KEY_LEFT); PRINT_NAMED_CONSTANT(KEY_RIGHT); PRINT_NAMED_CONSTANT(KEY_HOME); PRINT_NAMED_CONSTANT(KEY_BACKSPACE); PRINT_NAMED_CONSTANT(KEY_F0); print_constant("KEY_F1", KEY_F(1)); print_constant("KEY_F2", KEY_F(2)); print_constant("KEY_F3", KEY_F(3)); print_constant("KEY_F4", KEY_F(4)); print_constant("KEY_F5", KEY_F(5)); print_constant("KEY_F6", KEY_F(6)); print_constant("KEY_F7", KEY_F(7)); print_constant("KEY_F8", KEY_F(8)); print_constant("KEY_F9", KEY_F(9)); print_constant("KEY_F10", KEY_F(10)); print_constant("KEY_F11", KEY_F(11)); print_constant("KEY_F12", KEY_F(12)); print_constant("KEY_F13", KEY_F(13)); print_constant("KEY_F14", KEY_F(14)); print_constant("KEY_F15", KEY_F(15)); print_constant("KEY_F16", KEY_F(16)); print_constant("KEY_F17", KEY_F(17)); print_constant("KEY_F18", KEY_F(18)); print_constant("KEY_F19", KEY_F(19)); print_constant("KEY_F20", KEY_F(20)); print_constant("KEY_F21", KEY_F(21)); print_constant("KEY_F22", KEY_F(22)); print_constant("KEY_F23", KEY_F(23)); print_constant("KEY_F24", KEY_F(24)); PRINT_NAMED_CONSTANT(KEY_DL); PRINT_NAMED_CONSTANT(KEY_IL); PRINT_NAMED_CONSTANT(KEY_DC); PRINT_NAMED_CONSTANT(KEY_IC); PRINT_NAMED_CONSTANT(KEY_EIC); PRINT_NAMED_CONSTANT(KEY_CLEAR); PRINT_NAMED_CONSTANT(KEY_EOS); PRINT_NAMED_CONSTANT(KEY_EOL); PRINT_NAMED_CONSTANT(KEY_SF); PRINT_NAMED_CONSTANT(KEY_SR); PRINT_NAMED_CONSTANT(KEY_NPAGE); PRINT_NAMED_CONSTANT(KEY_PPAGE); PRINT_NAMED_CONSTANT(KEY_STAB); PRINT_NAMED_CONSTANT(KEY_CTAB); PRINT_NAMED_CONSTANT(KEY_CATAB); PRINT_NAMED_CONSTANT(KEY_ENTER); PRINT_NAMED_CONSTANT(KEY_SRESET); PRINT_NAMED_CONSTANT(KEY_RESET); PRINT_NAMED_CONSTANT(KEY_PRINT); PRINT_NAMED_CONSTANT(KEY_LL); PRINT_NAMED_CONSTANT(KEY_A1); PRINT_NAMED_CONSTANT(KEY_A3); PRINT_NAMED_CONSTANT(KEY_B2); PRINT_NAMED_CONSTANT(KEY_C1); PRINT_NAMED_CONSTANT(KEY_C3); PRINT_NAMED_CONSTANT(KEY_BTAB); PRINT_NAMED_CONSTANT(KEY_BEG); PRINT_NAMED_CONSTANT(KEY_CANCEL); PRINT_NAMED_CONSTANT(KEY_CLOSE); PRINT_NAMED_CONSTANT(KEY_COMMAND); PRINT_NAMED_CONSTANT(KEY_COPY); PRINT_NAMED_CONSTANT(KEY_CREATE); PRINT_NAMED_CONSTANT(KEY_END); PRINT_NAMED_CONSTANT(KEY_EXIT); PRINT_NAMED_CONSTANT(KEY_FIND); PRINT_NAMED_CONSTANT(KEY_HELP); PRINT_NAMED_CONSTANT(KEY_MARK); PRINT_NAMED_CONSTANT(KEY_MESSAGE); PRINT_NAMED_CONSTANT(KEY_MOVE); PRINT_NAMED_CONSTANT(KEY_NEXT); PRINT_NAMED_CONSTANT(KEY_OPEN); PRINT_NAMED_CONSTANT(KEY_OPTIONS); PRINT_NAMED_CONSTANT(KEY_PREVIOUS); PRINT_NAMED_CONSTANT(KEY_REDO); PRINT_NAMED_CONSTANT(KEY_REFERENCE); PRINT_NAMED_CONSTANT(KEY_REFRESH); PRINT_NAMED_CONSTANT(KEY_REPLACE); PRINT_NAMED_CONSTANT(KEY_RESTART); PRINT_NAMED_CONSTANT(KEY_RESUME); PRINT_NAMED_CONSTANT(KEY_SAVE); PRINT_NAMED_CONSTANT(KEY_SBEG); PRINT_NAMED_CONSTANT(KEY_SCANCEL); PRINT_NAMED_CONSTANT(KEY_SCOMMAND); PRINT_NAMED_CONSTANT(KEY_SCOPY); PRINT_NAMED_CONSTANT(KEY_SCREATE); PRINT_NAMED_CONSTANT(KEY_SDC); PRINT_NAMED_CONSTANT(KEY_SDL); PRINT_NAMED_CONSTANT(KEY_SELECT); PRINT_NAMED_CONSTANT(KEY_SEND); PRINT_NAMED_CONSTANT(KEY_SEOL); PRINT_NAMED_CONSTANT(KEY_SEXIT); PRINT_NAMED_CONSTANT(KEY_SFIND); PRINT_NAMED_CONSTANT(KEY_SHELP); PRINT_NAMED_CONSTANT(KEY_SHOME); PRINT_NAMED_CONSTANT(KEY_SIC); PRINT_NAMED_CONSTANT(KEY_SLEFT); PRINT_NAMED_CONSTANT(KEY_SMESSAGE); PRINT_NAMED_CONSTANT(KEY_SMOVE); PRINT_NAMED_CONSTANT(KEY_SNEXT); PRINT_NAMED_CONSTANT(KEY_SOPTIONS); PRINT_NAMED_CONSTANT(KEY_SPREVIOUS); PRINT_NAMED_CONSTANT(KEY_SPRINT); PRINT_NAMED_CONSTANT(KEY_SREDO); PRINT_NAMED_CONSTANT(KEY_SREPLACE); PRINT_NAMED_CONSTANT(KEY_SRIGHT); PRINT_NAMED_CONSTANT(KEY_SRSUME); PRINT_NAMED_CONSTANT(KEY_SSAVE); PRINT_NAMED_CONSTANT(KEY_SSUSPEND); PRINT_NAMED_CONSTANT(KEY_SUNDO); PRINT_NAMED_CONSTANT(KEY_SUSPEND); PRINT_NAMED_CONSTANT(KEY_UNDO); PRINT_NAMED_CONSTANT(KEY_MOUSE); PRINT_NAMED_CONSTANT(KEY_RESIZE); print_comment("alternate character codes (ACS) from addch(3NCURSES)"); #define PRINT_ACS(name) print_constant (#name, &name - &acs_map[0]) PRINT_ACS(ACS_ULCORNER); PRINT_ACS(ACS_LLCORNER); PRINT_ACS(ACS_URCORNER); PRINT_ACS(ACS_LRCORNER); PRINT_ACS(ACS_LTEE); PRINT_ACS(ACS_RTEE); PRINT_ACS(ACS_BTEE); PRINT_ACS(ACS_TTEE); PRINT_ACS(ACS_HLINE); PRINT_ACS(ACS_VLINE); PRINT_ACS(ACS_PLUS); PRINT_ACS(ACS_S1); PRINT_ACS(ACS_S9); PRINT_ACS(ACS_DIAMOND); PRINT_ACS(ACS_CKBOARD); PRINT_ACS(ACS_DEGREE); PRINT_ACS(ACS_PLMINUS); PRINT_ACS(ACS_BULLET); PRINT_ACS(ACS_LARROW); PRINT_ACS(ACS_RARROW); PRINT_ACS(ACS_DARROW); PRINT_ACS(ACS_UARROW); PRINT_ACS(ACS_BOARD); PRINT_ACS(ACS_LANTERN); PRINT_ACS(ACS_BLOCK); PRINT_ACS(ACS_S3); PRINT_ACS(ACS_S7); PRINT_ACS(ACS_LEQUAL); PRINT_ACS(ACS_GEQUAL); PRINT_ACS(ACS_PI); PRINT_ACS(ACS_NEQUAL); PRINT_ACS(ACS_STERLING); print_comment("Menu_Options from opts(3MENU)"); PRINT_NAMED_BITMASK(Menu_Options, O_ONEVALUE); PRINT_NAMED_BITMASK(Menu_Options, O_SHOWDESC); PRINT_NAMED_BITMASK(Menu_Options, O_ROWMAJOR); PRINT_NAMED_BITMASK(Menu_Options, O_IGNORECASE); PRINT_NAMED_BITMASK(Menu_Options, O_SHOWMATCH); PRINT_NAMED_BITMASK(Menu_Options, O_NONCYCLIC); print_constant("Menu_Options_Size", 8 * sizeof(Menu_Options)); print_comment("Item_Options from menu_opts(3MENU)"); PRINT_NAMED_BITMASK(Item_Options, O_SELECTABLE); print_constant("Item_Options_Size", 8 * sizeof(Item_Options)); print_comment("Field_Options from field_opts(3FORM)"); PRINT_NAMED_BITMASK(Field_Options, O_VISIBLE); PRINT_NAMED_BITMASK(Field_Options, O_ACTIVE); PRINT_NAMED_BITMASK(Field_Options, O_PUBLIC); PRINT_NAMED_BITMASK(Field_Options, O_EDIT); PRINT_NAMED_BITMASK(Field_Options, O_WRAP); PRINT_NAMED_BITMASK(Field_Options, O_BLANK); PRINT_NAMED_BITMASK(Field_Options, O_AUTOSKIP); PRINT_NAMED_BITMASK(Field_Options, O_NULLOK); PRINT_NAMED_BITMASK(Field_Options, O_PASSOK); PRINT_NAMED_BITMASK(Field_Options, O_STATIC); print_constant("Field_Options_Size", 8 * sizeof(Field_Options)); print_comment("Field_Options from opts(3FORM)"); PRINT_NAMED_BITMASK(Field_Options, O_NL_OVERLOAD); PRINT_NAMED_BITMASK(Field_Options, O_BS_OVERLOAD); /* Field_Options_Size is defined below */ print_comment("MEVENT structure from mouse(3NCURSES)"); STRUCT_OFFSET(MEVENT, id); STRUCT_OFFSET(MEVENT, x); STRUCT_OFFSET(MEVENT, y); STRUCT_OFFSET(MEVENT, z); STRUCT_OFFSET(MEVENT, bstate); print_constant("MEVENT_Size", 8 * sizeof(MEVENT)); print_comment("mouse events from mouse(3NCURSES)"); { mmask_t all_events; #define PRINT_MOUSE_EVENT(event) \ print_constant (#event, event); \ all_events |= event all_events = 0; PRINT_MOUSE_EVENT(BUTTON1_RELEASED); PRINT_MOUSE_EVENT(BUTTON1_PRESSED); PRINT_MOUSE_EVENT(BUTTON1_CLICKED); PRINT_MOUSE_EVENT(BUTTON1_DOUBLE_CLICKED); PRINT_MOUSE_EVENT(BUTTON1_TRIPLE_CLICKED); #ifdef BUTTON1_RESERVED_EVENT PRINT_MOUSE_EVENT(BUTTON1_RESERVED_EVENT); #endif print_constant("all_events_button_1", (long)all_events); all_events = 0; PRINT_MOUSE_EVENT(BUTTON2_RELEASED); PRINT_MOUSE_EVENT(BUTTON2_PRESSED); PRINT_MOUSE_EVENT(BUTTON2_CLICKED); PRINT_MOUSE_EVENT(BUTTON2_DOUBLE_CLICKED); PRINT_MOUSE_EVENT(BUTTON2_TRIPLE_CLICKED); #ifdef BUTTON2_RESERVED_EVENT PRINT_MOUSE_EVENT(BUTTON2_RESERVED_EVENT); #endif print_constant("all_events_button_2", (long)all_events); all_events = 0; PRINT_MOUSE_EVENT(BUTTON3_RELEASED); PRINT_MOUSE_EVENT(BUTTON3_PRESSED); PRINT_MOUSE_EVENT(BUTTON3_CLICKED); PRINT_MOUSE_EVENT(BUTTON3_DOUBLE_CLICKED); PRINT_MOUSE_EVENT(BUTTON3_TRIPLE_CLICKED); #ifdef BUTTON3_RESERVED_EVENT PRINT_MOUSE_EVENT(BUTTON3_RESERVED_EVENT); #endif print_constant("all_events_button_3", (long)all_events); all_events = 0; PRINT_MOUSE_EVENT(BUTTON4_RELEASED); PRINT_MOUSE_EVENT(BUTTON4_PRESSED); PRINT_MOUSE_EVENT(BUTTON4_CLICKED); PRINT_MOUSE_EVENT(BUTTON4_DOUBLE_CLICKED); PRINT_MOUSE_EVENT(BUTTON4_TRIPLE_CLICKED); #ifdef BUTTON4_RESERVED_EVENT PRINT_MOUSE_EVENT(BUTTON4_RESERVED_EVENT); #endif print_constant("all_events_button_4", (long)all_events); } PRINT_NAMED_CONSTANT(BUTTON_CTRL); PRINT_NAMED_CONSTANT(BUTTON_SHIFT); PRINT_NAMED_CONSTANT(BUTTON_ALT); PRINT_NAMED_CONSTANT(REPORT_MOUSE_POSITION); PRINT_NAMED_CONSTANT(ALL_MOUSE_EVENTS); print_comment("trace selection from trace(3NCURSES)"); PRINT_NAMED_BITMASK(UINT, TRACE_TIMES); PRINT_NAMED_BITMASK(UINT, TRACE_TPUTS); PRINT_NAMED_BITMASK(UINT, TRACE_UPDATE); PRINT_NAMED_BITMASK(UINT, TRACE_MOVE); PRINT_NAMED_BITMASK(UINT, TRACE_CHARPUT); PRINT_NAMED_BITMASK(UINT, TRACE_CALLS); PRINT_NAMED_BITMASK(UINT, TRACE_VIRTPUT); PRINT_NAMED_BITMASK(UINT, TRACE_IEVENT); PRINT_NAMED_BITMASK(UINT, TRACE_BITS); PRINT_NAMED_BITMASK(UINT, TRACE_ICALLS); PRINT_NAMED_BITMASK(UINT, TRACE_CCALLS); PRINT_NAMED_BITMASK(UINT, TRACE_DATABASE); PRINT_NAMED_BITMASK(UINT, TRACE_ATTRS); print_constant("Trace_Size", 8 * sizeof(UINT)); printf("end Terminal_Interface.Curses_Constants;\n"); exit(EXIT_SUCCESS); } ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses.ads.m40000644000175100001440000022373612340207715022253 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses__ads.htm')dnl include(M4MACRO)------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.47 $ -- $Date: 2014/05/24 21:31:57 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System.Storage_Elements; with Interfaces.C; -- We need this for some assertions. with Terminal_Interface.Curses_Constants; package Terminal_Interface.Curses is pragma Preelaborate (Terminal_Interface.Curses); pragma Linker_Options ("-lncurses" & Curses_Constants.DFT_ARG_SUFFIX); Major_Version : constant := Curses_Constants.NCURSES_VERSION_MAJOR; Minor_Version : constant := Curses_Constants.NCURSES_VERSION_MINOR; NC_Version : String renames Curses_Constants.Version; type Window is private; Null_Window : constant Window; type Line_Position is new Integer; -- line coordinate type Column_Position is new Integer; -- column coordinate subtype Line_Count is Line_Position range 1 .. Line_Position'Last; -- Type to count lines. We do not allow null windows, so must be positive subtype Column_Count is Column_Position range 1 .. Column_Position'Last; -- Type to count columns. We do not allow null windows, so must be positive type Key_Code is new Integer; -- That is anything including real characters, special keys and logical -- request codes. -- FIXME: The "-1" should be Curses_Err subtype Real_Key_Code is Key_Code range -1 .. Curses_Constants.KEY_MAX; -- This are the codes that potentially represent a real keystroke. -- Not all codes may be possible on a specific terminal. To check the -- availability of a special key, the Has_Key function is provided. subtype Special_Key_Code is Real_Key_Code range Curses_Constants. KEY_MIN - 1 .. Real_Key_Code'Last; -- Type for a function- or special key number subtype Normal_Key_Code is Real_Key_Code range Character'Pos (Character'First) .. Character'Pos (Character'Last); -- This are the codes for regular (incl. non-graphical) characters. -- For those who like to use the original key names we produce them were -- they differ from the original. -- Constants for function- and special keys Key_None : constant Special_Key_Code := Curses_Constants.KEY_MIN - 1; Key_Min : constant Special_Key_Code := Curses_Constants.KEY_MIN; Key_Break : constant Special_Key_Code := Curses_Constants.KEY_BREAK; KEY_DOWN : constant Special_Key_Code := Curses_Constants.KEY_DOWN; Key_Cursor_Down : Special_Key_Code renames KEY_DOWN; KEY_UP : constant Special_Key_Code := Curses_Constants.KEY_UP; Key_Cursor_Up : Special_Key_Code renames KEY_UP; KEY_LEFT : constant Special_Key_Code := Curses_Constants.KEY_LEFT; Key_Cursor_Left : Special_Key_Code renames KEY_LEFT; KEY_RIGHT : constant Special_Key_Code := Curses_Constants.KEY_RIGHT; Key_Cursor_Right : Special_Key_Code renames KEY_RIGHT; Key_Home : constant Special_Key_Code := Curses_Constants.KEY_HOME; Key_Backspace : constant Special_Key_Code := Curses_Constants.KEY_BACKSPACE; Key_F0 : constant Special_Key_Code := Curses_Constants.KEY_F0; Key_F1 : constant Special_Key_Code := Curses_Constants.KEY_F1; Key_F2 : constant Special_Key_Code := Curses_Constants.KEY_F2; Key_F3 : constant Special_Key_Code := Curses_Constants.KEY_F3; Key_F4 : constant Special_Key_Code := Curses_Constants.KEY_F4; Key_F5 : constant Special_Key_Code := Curses_Constants.KEY_F5; Key_F6 : constant Special_Key_Code := Curses_Constants.KEY_F6; Key_F7 : constant Special_Key_Code := Curses_Constants.KEY_F7; Key_F8 : constant Special_Key_Code := Curses_Constants.KEY_F8; Key_F9 : constant Special_Key_Code := Curses_Constants.KEY_F9; Key_F10 : constant Special_Key_Code := Curses_Constants.KEY_F10; Key_F11 : constant Special_Key_Code := Curses_Constants.KEY_F11; Key_F12 : constant Special_Key_Code := Curses_Constants.KEY_F12; Key_F13 : constant Special_Key_Code := Curses_Constants.KEY_F13; Key_F14 : constant Special_Key_Code := Curses_Constants.KEY_F14; Key_F15 : constant Special_Key_Code := Curses_Constants.KEY_F15; Key_F16 : constant Special_Key_Code := Curses_Constants.KEY_F16; Key_F17 : constant Special_Key_Code := Curses_Constants.KEY_F17; Key_F18 : constant Special_Key_Code := Curses_Constants.KEY_F18; Key_F19 : constant Special_Key_Code := Curses_Constants.KEY_F19; Key_F20 : constant Special_Key_Code := Curses_Constants.KEY_F20; Key_F21 : constant Special_Key_Code := Curses_Constants.KEY_F21; Key_F22 : constant Special_Key_Code := Curses_Constants.KEY_F22; Key_F23 : constant Special_Key_Code := Curses_Constants.KEY_F23; Key_F24 : constant Special_Key_Code := Curses_Constants.KEY_F24; KEY_DL : constant Special_Key_Code := Curses_Constants.KEY_DL; Key_Delete_Line : Special_Key_Code renames KEY_DL; KEY_IL : constant Special_Key_Code := Curses_Constants.KEY_IL; Key_Insert_Line : Special_Key_Code renames KEY_IL; KEY_DC : constant Special_Key_Code := Curses_Constants.KEY_DC; Key_Delete_Char : Special_Key_Code renames KEY_DC; KEY_IC : constant Special_Key_Code := Curses_Constants.KEY_IC; Key_Insert_Char : Special_Key_Code renames KEY_IC; KEY_EIC : constant Special_Key_Code := Curses_Constants.KEY_EIC; Key_Exit_Insert_Mode : Special_Key_Code renames KEY_EIC; KEY_CLEAR : constant Special_Key_Code := Curses_Constants.KEY_CLEAR; Key_Clear_Screen : Special_Key_Code renames KEY_CLEAR; KEY_EOS : constant Special_Key_Code := Curses_Constants.KEY_EOS; Key_Clear_End_Of_Screen : Special_Key_Code renames KEY_EOS; KEY_EOL : constant Special_Key_Code := Curses_Constants.KEY_EOL; Key_Clear_End_Of_Line : Special_Key_Code renames KEY_EOL; KEY_SF : constant Special_Key_Code := Curses_Constants.KEY_SF; Key_Scroll_1_Forward : Special_Key_Code renames KEY_SF; KEY_SR : constant Special_Key_Code := Curses_Constants.KEY_SR; Key_Scroll_1_Backward : Special_Key_Code renames KEY_SR; KEY_NPAGE : constant Special_Key_Code := Curses_Constants.KEY_NPAGE; Key_Next_Page : Special_Key_Code renames KEY_NPAGE; KEY_PPAGE : constant Special_Key_Code := Curses_Constants.KEY_PPAGE; Key_Previous_Page : Special_Key_Code renames KEY_PPAGE; KEY_STAB : constant Special_Key_Code := Curses_Constants.KEY_STAB; Key_Set_Tab : Special_Key_Code renames KEY_STAB; KEY_CTAB : constant Special_Key_Code := Curses_Constants.KEY_CTAB; Key_Clear_Tab : Special_Key_Code renames KEY_CTAB; KEY_CATAB : constant Special_Key_Code := Curses_Constants.KEY_CATAB; Key_Clear_All_Tabs : Special_Key_Code renames KEY_CATAB; KEY_ENTER : constant Special_Key_Code := Curses_Constants.KEY_ENTER; Key_Enter_Or_Send : Special_Key_Code renames KEY_ENTER; KEY_SRESET : constant Special_Key_Code := Curses_Constants.KEY_SRESET; Key_Soft_Reset : Special_Key_Code renames KEY_SRESET; Key_Reset : constant Special_Key_Code := Curses_Constants.KEY_RESET; Key_Print : constant Special_Key_Code := Curses_Constants.KEY_PRINT; KEY_LL : constant Special_Key_Code := Curses_Constants.KEY_LL; Key_Bottom : Special_Key_Code renames KEY_LL; KEY_A1 : constant Special_Key_Code := Curses_Constants.KEY_A1; Key_Upper_Left_Of_Keypad : Special_Key_Code renames KEY_A1; KEY_A3 : constant Special_Key_Code := Curses_Constants.KEY_A3; Key_Upper_Right_Of_Keypad : Special_Key_Code renames KEY_A3; KEY_B2 : constant Special_Key_Code := Curses_Constants.KEY_B2; Key_Center_Of_Keypad : Special_Key_Code renames KEY_B2; KEY_C1 : constant Special_Key_Code := Curses_Constants.KEY_C1; Key_Lower_Left_Of_Keypad : Special_Key_Code renames KEY_C1; KEY_C3 : constant Special_Key_Code := Curses_Constants.KEY_C3; Key_Lower_Right_Of_Keypad : Special_Key_Code renames KEY_C3; KEY_BTAB : constant Special_Key_Code := Curses_Constants.KEY_BTAB; Key_Back_Tab : Special_Key_Code renames KEY_BTAB; KEY_BEG : constant Special_Key_Code := Curses_Constants.KEY_BEG; Key_Beginning : Special_Key_Code renames KEY_BEG; Key_Cancel : constant Special_Key_Code := Curses_Constants.KEY_CANCEL; Key_Close : constant Special_Key_Code := Curses_Constants.KEY_CLOSE; Key_Command : constant Special_Key_Code := Curses_Constants.KEY_COMMAND; Key_Copy : constant Special_Key_Code := Curses_Constants.KEY_COPY; Key_Create : constant Special_Key_Code := Curses_Constants.KEY_CREATE; Key_End : constant Special_Key_Code := Curses_Constants.KEY_END; Key_Exit : constant Special_Key_Code := Curses_Constants.KEY_EXIT; Key_Find : constant Special_Key_Code := Curses_Constants.KEY_FIND; Key_Help : constant Special_Key_Code := Curses_Constants.KEY_HELP; Key_Mark : constant Special_Key_Code := Curses_Constants.KEY_MARK; Key_Message : constant Special_Key_Code := Curses_Constants.KEY_MESSAGE; Key_Move : constant Special_Key_Code := Curses_Constants.KEY_MOVE; Key_Next : constant Special_Key_Code := Curses_Constants.KEY_NEXT; Key_Open : constant Special_Key_Code := Curses_Constants.KEY_OPEN; Key_Options : constant Special_Key_Code := Curses_Constants.KEY_OPTIONS; Key_Previous : constant Special_Key_Code := Curses_Constants.KEY_PREVIOUS; Key_Redo : constant Special_Key_Code := Curses_Constants.KEY_REDO; Key_Reference : constant Special_Key_Code := Curses_Constants.KEY_REFERENCE; Key_Refresh : constant Special_Key_Code := Curses_Constants.KEY_REFRESH; Key_Replace : constant Special_Key_Code := Curses_Constants.KEY_REPLACE; Key_Restart : constant Special_Key_Code := Curses_Constants.KEY_RESTART; Key_Resume : constant Special_Key_Code := Curses_Constants.KEY_RESUME; Key_Save : constant Special_Key_Code := Curses_Constants.KEY_SAVE; KEY_SBEG : constant Special_Key_Code := Curses_Constants.KEY_SBEG; Key_Shift_Begin : Special_Key_Code renames KEY_SBEG; KEY_SCANCEL : constant Special_Key_Code := Curses_Constants.KEY_SCANCEL; Key_Shift_Cancel : Special_Key_Code renames KEY_SCANCEL; KEY_SCOMMAND : constant Special_Key_Code := Curses_Constants.KEY_SCOMMAND; Key_Shift_Command : Special_Key_Code renames KEY_SCOMMAND; KEY_SCOPY : constant Special_Key_Code := Curses_Constants.KEY_SCOPY; Key_Shift_Copy : Special_Key_Code renames KEY_SCOPY; KEY_SCREATE : constant Special_Key_Code := Curses_Constants.KEY_SCREATE; Key_Shift_Create : Special_Key_Code renames KEY_SCREATE; KEY_SDC : constant Special_Key_Code := Curses_Constants.KEY_SDC; Key_Shift_Delete_Char : Special_Key_Code renames KEY_SDC; KEY_SDL : constant Special_Key_Code := Curses_Constants.KEY_SDL; Key_Shift_Delete_Line : Special_Key_Code renames KEY_SDL; Key_Select : constant Special_Key_Code := Curses_Constants.KEY_SELECT; KEY_SEND : constant Special_Key_Code := Curses_Constants.KEY_SEND; Key_Shift_End : Special_Key_Code renames KEY_SEND; KEY_SEOL : constant Special_Key_Code := Curses_Constants.KEY_SEOL; Key_Shift_Clear_End_Of_Line : Special_Key_Code renames KEY_SEOL; KEY_SEXIT : constant Special_Key_Code := Curses_Constants.KEY_SEXIT; Key_Shift_Exit : Special_Key_Code renames KEY_SEXIT; KEY_SFIND : constant Special_Key_Code := Curses_Constants.KEY_SFIND; Key_Shift_Find : Special_Key_Code renames KEY_SFIND; KEY_SHELP : constant Special_Key_Code := Curses_Constants.KEY_SHELP; Key_Shift_Help : Special_Key_Code renames KEY_SHELP; KEY_SHOME : constant Special_Key_Code := Curses_Constants.KEY_SHOME; Key_Shift_Home : Special_Key_Code renames KEY_SHOME; KEY_SIC : constant Special_Key_Code := Curses_Constants.KEY_SIC; Key_Shift_Insert_Char : Special_Key_Code renames KEY_SIC; KEY_SLEFT : constant Special_Key_Code := Curses_Constants.KEY_SLEFT; Key_Shift_Cursor_Left : Special_Key_Code renames KEY_SLEFT; KEY_SMESSAGE : constant Special_Key_Code := Curses_Constants.KEY_SMESSAGE; Key_Shift_Message : Special_Key_Code renames KEY_SMESSAGE; KEY_SMOVE : constant Special_Key_Code := Curses_Constants.KEY_SMOVE; Key_Shift_Move : Special_Key_Code renames KEY_SMOVE; KEY_SNEXT : constant Special_Key_Code := Curses_Constants.KEY_SNEXT; Key_Shift_Next_Page : Special_Key_Code renames KEY_SNEXT; KEY_SOPTIONS : constant Special_Key_Code := Curses_Constants.KEY_SOPTIONS; Key_Shift_Options : Special_Key_Code renames KEY_SOPTIONS; KEY_SPREVIOUS : constant Special_Key_Code := Curses_Constants.KEY_SPREVIOUS; Key_Shift_Previous_Page : Special_Key_Code renames KEY_SPREVIOUS; KEY_SPRINT : constant Special_Key_Code := Curses_Constants.KEY_SPRINT; Key_Shift_Print : Special_Key_Code renames KEY_SPRINT; KEY_SREDO : constant Special_Key_Code := Curses_Constants.KEY_SREDO; Key_Shift_Redo : Special_Key_Code renames KEY_SREDO; KEY_SREPLACE : constant Special_Key_Code := Curses_Constants.KEY_SREPLACE; Key_Shift_Replace : Special_Key_Code renames KEY_SREPLACE; KEY_SRIGHT : constant Special_Key_Code := Curses_Constants.KEY_SRIGHT; Key_Shift_Cursor_Right : Special_Key_Code renames KEY_SRIGHT; KEY_SRSUME : constant Special_Key_Code := Curses_Constants.KEY_SRSUME; Key_Shift_Resume : Special_Key_Code renames KEY_SRSUME; KEY_SSAVE : constant Special_Key_Code := Curses_Constants.KEY_SSAVE; Key_Shift_Save : Special_Key_Code renames KEY_SSAVE; KEY_SSUSPEND : constant Special_Key_Code := Curses_Constants.KEY_SSUSPEND; Key_Shift_Suspend : Special_Key_Code renames KEY_SSUSPEND; KEY_SUNDO : constant Special_Key_Code := Curses_Constants.KEY_SUNDO; Key_Shift_Undo : Special_Key_Code renames KEY_SUNDO; Key_Suspend : constant Special_Key_Code := Curses_Constants.KEY_SUSPEND; Key_Undo : constant Special_Key_Code := Curses_Constants.KEY_UNDO; Key_Mouse : constant Special_Key_Code := Curses_Constants.KEY_MOUSE; Key_Resize : constant Special_Key_Code := Curses_Constants.KEY_RESIZE; Key_Max : constant Special_Key_Code := Special_Key_Code'Last; subtype User_Key_Code is Key_Code range (Key_Max + 129) .. Key_Code'Last; -- This is reserved for user defined key codes. The range between Key_Max -- and the first user code is reserved for subsystems like menu and forms. -------------------------------------------------------------------------- type Color_Number is range -1 .. Integer (Interfaces.C.short'Last); for Color_Number'Size use Interfaces.C.short'Size; -- (n)curses uses a short for the color index -- The model is, that a Color_Number is an index into an array of -- (potentially) definable colors. Some of those indices are -- predefined (see below), although they may not really exist. Black : constant Color_Number := Curses_Constants.COLOR_BLACK; Red : constant Color_Number := Curses_Constants.COLOR_RED; Green : constant Color_Number := Curses_Constants.COLOR_GREEN; Yellow : constant Color_Number := Curses_Constants.COLOR_YELLOW; Blue : constant Color_Number := Curses_Constants.COLOR_BLUE; Magenta : constant Color_Number := Curses_Constants.COLOR_MAGENTA; Cyan : constant Color_Number := Curses_Constants.COLOR_CYAN; White : constant Color_Number := Curses_Constants.COLOR_WHITE; type RGB_Value is range 0 .. Integer (Interfaces.C.short'Last); for RGB_Value'Size use Interfaces.C.short'Size; -- Some system may allow to redefine a color by setting RGB values. type Color_Pair is range 0 .. 255; for Color_Pair'Size use 8; subtype Redefinable_Color_Pair is Color_Pair range 1 .. 255; -- (n)curses reserves 1 Byte for the color-pair number. Color Pair 0 -- is fixed (Black & White). A color pair is simply a combination of -- two colors described by Color_Numbers, one for the foreground and -- the other for the background type Character_Attribute_Set is record Stand_Out : Boolean; Under_Line : Boolean; Reverse_Video : Boolean; Blink : Boolean; Dim_Character : Boolean; Bold_Character : Boolean; Protected_Character : Boolean; Invisible_Character : Boolean; Alternate_Character_Set : Boolean; Horizontal : Boolean; Left : Boolean; Low : Boolean; Right : Boolean; Top : Boolean; Vertical : Boolean; end record; for Character_Attribute_Set use record Stand_Out at 0 range Curses_Constants.A_STANDOUT_First - Curses_Constants.Attr_First .. Curses_Constants.A_STANDOUT_Last - Curses_Constants.Attr_First; Under_Line at 0 range Curses_Constants.A_UNDERLINE_First - Curses_Constants.Attr_First .. Curses_Constants.A_UNDERLINE_Last - Curses_Constants.Attr_First; Reverse_Video at 0 range Curses_Constants.A_REVERSE_First - Curses_Constants.Attr_First .. Curses_Constants.A_REVERSE_Last - Curses_Constants.Attr_First; Blink at 0 range Curses_Constants.A_BLINK_First - Curses_Constants.Attr_First .. Curses_Constants.A_BLINK_Last - Curses_Constants.Attr_First; Dim_Character at 0 range Curses_Constants.A_DIM_First - Curses_Constants.Attr_First .. Curses_Constants.A_DIM_Last - Curses_Constants.Attr_First; Bold_Character at 0 range Curses_Constants.A_BOLD_First - Curses_Constants.Attr_First .. Curses_Constants.A_BOLD_Last - Curses_Constants.Attr_First; Protected_Character at 0 range Curses_Constants.A_PROTECT_First - Curses_Constants.Attr_First .. Curses_Constants.A_PROTECT_Last - Curses_Constants.Attr_First; Invisible_Character at 0 range Curses_Constants.A_INVIS_First - Curses_Constants.Attr_First .. Curses_Constants.A_INVIS_Last - Curses_Constants.Attr_First; Alternate_Character_Set at 0 range Curses_Constants.A_ALTCHARSET_First - Curses_Constants.Attr_First .. Curses_Constants.A_ALTCHARSET_Last - Curses_Constants.Attr_First; Horizontal at 0 range Curses_Constants.A_HORIZONTAL_First - Curses_Constants.Attr_First .. Curses_Constants.A_HORIZONTAL_Last - Curses_Constants.Attr_First; Left at 0 range Curses_Constants.A_LEFT_First - Curses_Constants.Attr_First .. Curses_Constants.A_LEFT_Last - Curses_Constants.Attr_First; Low at 0 range Curses_Constants.A_LOW_First - Curses_Constants.Attr_First .. Curses_Constants.A_LOW_Last - Curses_Constants.Attr_First; Right at 0 range Curses_Constants.A_RIGHT_First - Curses_Constants.Attr_First .. Curses_Constants.A_RIGHT_Last - Curses_Constants.Attr_First; Top at 0 range Curses_Constants.A_TOP_First - Curses_Constants.Attr_First .. Curses_Constants.A_TOP_Last - Curses_Constants.Attr_First; Vertical at 0 range Curses_Constants.A_VERTICAL_First - Curses_Constants.Attr_First .. Curses_Constants.A_VERTICAL_Last - Curses_Constants.Attr_First; end record; Normal_Video : constant Character_Attribute_Set := (others => False); type Attributed_Character is record Attr : Character_Attribute_Set; Color : Color_Pair; Ch : Character; end record; pragma Convention (C_Pass_By_Copy, Attributed_Character); -- This is the counterpart for the chtype in C. for Attributed_Character use record Ch at 0 range Curses_Constants.A_CHARTEXT_First .. Curses_Constants.A_CHARTEXT_Last; Color at 0 range Curses_Constants.A_COLOR_First .. Curses_Constants.A_COLOR_Last; pragma Warnings (Off); Attr at 0 range Curses_Constants.Attr_First .. Curses_Constants.Attr_Last; pragma Warnings (On); end record; for Attributed_Character'Size use Curses_Constants.chtype_Size; Default_Character : constant Attributed_Character := (Ch => Character'First, Color => Color_Pair'First, Attr => (others => False)); -- preelaboratable Normal_Video type Attributed_String is array (Positive range <>) of Attributed_Character; pragma Convention (C, Attributed_String); -- In this binding we allow strings of attributed characters. ------------------ -- Exceptions -- ------------------ Curses_Exception : exception; Wrong_Curses_Version : exception; -- Those exceptions are raised by the ETI (Extended Terminal Interface) -- subpackets for Menu and Forms handling. -- Eti_System_Error : exception; Eti_Bad_Argument : exception; Eti_Posted : exception; Eti_Connected : exception; Eti_Bad_State : exception; Eti_No_Room : exception; Eti_Not_Posted : exception; Eti_Unknown_Command : exception; Eti_No_Match : exception; Eti_Not_Selectable : exception; Eti_Not_Connected : exception; Eti_Request_Denied : exception; Eti_Invalid_Field : exception; Eti_Current : exception; -------------------------------------------------------------------------- -- External C variables -- Conceptually even in C this are kind of constants, but they are -- initialized and sometimes changed by the library routines at runtime -- depending on the type of terminal. I believe the best way to model -- this is to use functions. -------------------------------------------------------------------------- function Lines return Line_Count; pragma Inline (Lines); function Columns return Column_Count; pragma Inline (Columns); function Tab_Size return Natural; pragma Inline (Tab_Size); function Number_Of_Colors return Natural; pragma Inline (Number_Of_Colors); function Number_Of_Color_Pairs return Natural; pragma Inline (Number_Of_Color_Pairs); subtype ACS_Index is Character range Character'Val (0) .. Character'Val (127); function ACS_Map (Index : ACS_Index) return Attributed_Character; pragma Import (C, ACS_Map, "acs_map_as_function"); -- Constants for several characters from the Alternate Character Set -- You must use these constants as indices into the ACS_Map function -- to get the corresponding attributed character at runtime ACS_Upper_Left_Corner : constant ACS_Index := Character'Val (Curses_Constants.ACS_ULCORNER); ACS_Lower_Left_Corner : constant ACS_Index := Character'Val (Curses_Constants.ACS_LLCORNER); ACS_Upper_Right_Corner : constant ACS_Index := Character'Val (Curses_Constants.ACS_URCORNER); ACS_Lower_Right_Corner : constant ACS_Index := Character'Val (Curses_Constants.ACS_LRCORNER); ACS_Left_Tee : constant ACS_Index := Character'Val (Curses_Constants.ACS_LTEE); ACS_Right_Tee : constant ACS_Index := Character'Val (Curses_Constants.ACS_RTEE); ACS_Bottom_Tee : constant ACS_Index := Character'Val (Curses_Constants.ACS_BTEE); ACS_Top_Tee : constant ACS_Index := Character'Val (Curses_Constants.ACS_TTEE); ACS_Horizontal_Line : constant ACS_Index := Character'Val (Curses_Constants.ACS_HLINE); ACS_Vertical_Line : constant ACS_Index := Character'Val (Curses_Constants.ACS_VLINE); ACS_Plus_Symbol : constant ACS_Index := Character'Val (Curses_Constants.ACS_PLUS); ACS_Scan_Line_1 : constant ACS_Index := Character'Val (Curses_Constants.ACS_S1); ACS_Scan_Line_9 : constant ACS_Index := Character'Val (Curses_Constants.ACS_S9); ACS_Diamond : constant ACS_Index := Character'Val (Curses_Constants.ACS_DIAMOND); ACS_Checker_Board : constant ACS_Index := Character'Val (Curses_Constants.ACS_CKBOARD); ACS_Degree : constant ACS_Index := Character'Val (Curses_Constants.ACS_DEGREE); ACS_Plus_Minus : constant ACS_Index := Character'Val (Curses_Constants.ACS_PLMINUS); ACS_Bullet : constant ACS_Index := Character'Val (Curses_Constants.ACS_BULLET); ACS_Left_Arrow : constant ACS_Index := Character'Val (Curses_Constants.ACS_LARROW); ACS_Right_Arrow : constant ACS_Index := Character'Val (Curses_Constants.ACS_RARROW); ACS_Down_Arrow : constant ACS_Index := Character'Val (Curses_Constants.ACS_DARROW); ACS_Up_Arrow : constant ACS_Index := Character'Val (Curses_Constants.ACS_UARROW); ACS_Board_Of_Squares : constant ACS_Index := Character'Val (Curses_Constants.ACS_BOARD); ACS_Lantern : constant ACS_Index := Character'Val (Curses_Constants.ACS_LANTERN); ACS_Solid_Block : constant ACS_Index := Character'Val (Curses_Constants.ACS_BLOCK); ACS_Scan_Line_3 : constant ACS_Index := Character'Val (Curses_Constants.ACS_S3); ACS_Scan_Line_7 : constant ACS_Index := Character'Val (Curses_Constants.ACS_S7); ACS_Less_Or_Equal : constant ACS_Index := Character'Val (Curses_Constants.ACS_LEQUAL); ACS_Greater_Or_Equal : constant ACS_Index := Character'Val (Curses_Constants.ACS_GEQUAL); ACS_PI : constant ACS_Index := Character'Val (Curses_Constants.ACS_PI); ACS_Not_Equal : constant ACS_Index := Character'Val (Curses_Constants.ACS_NEQUAL); ACS_Sterling : constant ACS_Index := Character'Val (Curses_Constants.ACS_STERLING); -- MANPAGE(`curs_initscr.3x') -- | Not implemented: newterm, set_term, delscreen -- ANCHOR(`stdscr',`Standard_Window') function Standard_Window return Window; -- AKA pragma Import (C, Standard_Window, "stdscr_as_function"); pragma Inline (Standard_Window); -- ANCHOR(`curscr',`Current_Window') function Current_Window return Window; -- AKA pragma Import (C, Current_Window, "curscr_as_function"); pragma Inline (Current_Window); -- ANCHOR(`initscr()',`Init_Screen') procedure Init_Screen; -- ANCHOR(`initscr()',`Init_Windows') procedure Init_Windows renames Init_Screen; -- AKA pragma Inline (Init_Screen); -- pragma Inline (Init_Windows); -- ANCHOR(`endwin()',`End_Windows') procedure End_Windows; -- AKA procedure End_Screen renames End_Windows; pragma Inline (End_Windows); -- pragma Inline (End_Screen); -- ANCHOR(`isendwin()',`Is_End_Window') function Is_End_Window return Boolean; -- AKA pragma Inline (Is_End_Window); -- MANPAGE(`curs_move.3x') -- ANCHOR(`wmove()',`Move_Cursor') procedure Move_Cursor (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position); -- AKA -- ALIAS(`move()') pragma Inline (Move_Cursor); -- MANPAGE(`curs_addch.3x') -- ANCHOR(`waddch()',`Add') procedure Add (Win : Window := Standard_Window; Ch : Attributed_Character); -- AKA -- ALIAS(`addch()') procedure Add (Win : Window := Standard_Window; Ch : Character); -- Add a single character at the current logical cursor position to -- the window. Use the current windows attributes. -- ANCHOR(`mvwaddch()',`Add') procedure Add (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Ch : Attributed_Character); -- AKA -- ALIAS(`mvaddch()') procedure Add (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Ch : Character); -- Move to the position and add a single character into the window -- There are more Add routines, so the Inline pragma follows later -- ANCHOR(`wechochar()',`Add_With_Immediate_Echo') procedure Add_With_Immediate_Echo (Win : Window := Standard_Window; Ch : Attributed_Character); -- AKA -- ALIAS(`echochar()') procedure Add_With_Immediate_Echo (Win : Window := Standard_Window; Ch : Character); -- Add a character and do an immediate refresh of the screen. pragma Inline (Add_With_Immediate_Echo); -- MANPAGE(`curs_window.3x') -- Not Implemented: wcursyncup -- ANCHOR(`newwin()',`Create') function Create (Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count; First_Line_Position : Line_Position; First_Column_Position : Column_Position) return Window; -- Not Implemented: Default Number_Of_Lines, Number_Of_Columns -- the C version lets them be 0, see the man page. -- AKA pragma Inline (Create); function New_Window (Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count; First_Line_Position : Line_Position; First_Column_Position : Column_Position) return Window renames Create; -- pragma Inline (New_Window); -- ANCHOR(`delwin()',`Delete') procedure Delete (Win : in out Window); -- AKA -- Reset Win to Null_Window pragma Inline (Delete); -- ANCHOR(`subwin()',`Sub_Window') function Sub_Window (Win : Window := Standard_Window; Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count; First_Line_Position : Line_Position; First_Column_Position : Column_Position) return Window; -- AKA pragma Inline (Sub_Window); -- ANCHOR(`derwin()',`Derived_Window') function Derived_Window (Win : Window := Standard_Window; Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count; First_Line_Position : Line_Position; First_Column_Position : Column_Position) return Window; -- AKA pragma Inline (Derived_Window); -- ANCHOR(`dupwin()',`Duplicate') function Duplicate (Win : Window) return Window; -- AKA pragma Inline (Duplicate); -- ANCHOR(`mvwin()',`Move_Window') procedure Move_Window (Win : Window; Line : Line_Position; Column : Column_Position); -- AKA pragma Inline (Move_Window); -- ANCHOR(`mvderwin()',`Move_Derived_Window') procedure Move_Derived_Window (Win : Window; Line : Line_Position; Column : Column_Position); -- AKA pragma Inline (Move_Derived_Window); -- ANCHOR(`wsyncup()',`Synchronize_Upwards') procedure Synchronize_Upwards (Win : Window); -- AKA pragma Import (C, Synchronize_Upwards, "wsyncup"); -- ANCHOR(`wsyncdown()',`Synchronize_Downwards') procedure Synchronize_Downwards (Win : Window); -- AKA pragma Import (C, Synchronize_Downwards, "wsyncdown"); -- ANCHOR(`syncok()',`Set_Synch_Mode') procedure Set_Synch_Mode (Win : Window := Standard_Window; Mode : Boolean := False); -- AKA pragma Inline (Set_Synch_Mode); -- MANPAGE(`curs_addstr.3x') -- ANCHOR(`waddnstr()',`Add') procedure Add (Win : Window := Standard_Window; Str : String; Len : Integer := -1); -- AKA -- ALIAS(`waddstr()') -- ALIAS(`addnstr()') -- ALIAS(`addstr()') -- ANCHOR(`mvwaddnstr()',`Add') procedure Add (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : String; Len : Integer := -1); -- AKA -- ALIAS(`mvwaddstr()') -- ALIAS(`mvaddnstr()') -- ALIAS(`mvaddstr()') -- MANPAGE(`curs_addchstr.3x') -- ANCHOR(`waddchnstr()',`Add') procedure Add (Win : Window := Standard_Window; Str : Attributed_String; Len : Integer := -1); -- AKA -- ALIAS(`waddchstr()') -- ALIAS(`addchnstr()') -- ALIAS(`addchstr()') -- ANCHOR(`mvwaddchnstr()',`Add') procedure Add (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : Attributed_String; Len : Integer := -1); -- AKA -- ALIAS(`mvwaddchstr()') -- ALIAS(`mvaddchnstr()') -- ALIAS(`mvaddchstr()') pragma Inline (Add); -- MANPAGE(`curs_border.3x') -- | Not implemented: mvhline, mvwhline, mvvline, mvwvline -- | use Move_Cursor then Horizontal_Line or Vertical_Line -- ANCHOR(`wborder()',`Border') procedure Border (Win : Window := Standard_Window; Left_Side_Symbol : Attributed_Character := Default_Character; Right_Side_Symbol : Attributed_Character := Default_Character; Top_Side_Symbol : Attributed_Character := Default_Character; Bottom_Side_Symbol : Attributed_Character := Default_Character; Upper_Left_Corner_Symbol : Attributed_Character := Default_Character; Upper_Right_Corner_Symbol : Attributed_Character := Default_Character; Lower_Left_Corner_Symbol : Attributed_Character := Default_Character; Lower_Right_Corner_Symbol : Attributed_Character := Default_Character ); -- AKA -- ALIAS(`border()') pragma Inline (Border); -- ANCHOR(`box()',`Box') procedure Box (Win : Window := Standard_Window; Vertical_Symbol : Attributed_Character := Default_Character; Horizontal_Symbol : Attributed_Character := Default_Character); -- AKA pragma Inline (Box); -- ANCHOR(`whline()',`Horizontal_Line') procedure Horizontal_Line (Win : Window := Standard_Window; Line_Size : Natural; Line_Symbol : Attributed_Character := Default_Character); -- AKA -- ALIAS(`hline()') pragma Inline (Horizontal_Line); -- ANCHOR(`wvline()',`Vertical_Line') procedure Vertical_Line (Win : Window := Standard_Window; Line_Size : Natural; Line_Symbol : Attributed_Character := Default_Character); -- AKA -- ALIAS(`vline()') pragma Inline (Vertical_Line); -- MANPAGE(`curs_getch.3x') -- Not implemented: mvgetch, mvwgetch -- ANCHOR(`wgetch()',`Get_Keystroke') function Get_Keystroke (Win : Window := Standard_Window) return Real_Key_Code; -- AKA -- ALIAS(`getch()') -- Get a character from the keyboard and echo it - if enabled - to the -- window. -- If for any reason (i.e. a timeout) we could not get a character the -- returned keycode is Key_None. pragma Inline (Get_Keystroke); -- ANCHOR(`ungetch()',`Undo_Keystroke') procedure Undo_Keystroke (Key : Real_Key_Code); -- AKA pragma Inline (Undo_Keystroke); -- ANCHOR(`has_key()',`Has_Key') function Has_Key (Key : Special_Key_Code) return Boolean; -- AKA pragma Inline (Has_Key); -- | -- | Some helper functions -- | function Is_Function_Key (Key : Special_Key_Code) return Boolean; -- Return True if the Key is a function key (i.e. one of F0 .. F63) pragma Inline (Is_Function_Key); subtype Function_Key_Number is Integer range 0 .. 63; -- (n)curses allows for 64 function keys. function Function_Key (Key : Real_Key_Code) return Function_Key_Number; -- Return the number of the function key. If the code is not a -- function key, a CONSTRAINT_ERROR will be raised. pragma Inline (Function_Key); function Function_Key_Code (Key : Function_Key_Number) return Real_Key_Code; -- Return the key code for a given function-key number. pragma Inline (Function_Key_Code); -- MANPAGE(`curs_attr.3x') -- | Not implemented attr_off, wattr_off, -- | attr_on, wattr_on, attr_set, wattr_set -- PAIR_NUMBER -- PAIR_NUMBER(c) is the same as c.Color -- ANCHOR(`standout()',`Standout') procedure Standout (Win : Window := Standard_Window; On : Boolean := True); -- ALIAS(`wstandout()') -- ALIAS(`wstandend()') -- ANCHOR(`wattron()',`Switch_Character_Attribute') procedure Switch_Character_Attribute (Win : Window := Standard_Window; Attr : Character_Attribute_Set := Normal_Video; On : Boolean := True); -- if False we switch Off. -- Switches those Attributes set to true in the list. -- AKA -- ALIAS(`wattroff()') -- ALIAS(`attron()') -- ALIAS(`attroff()') -- ANCHOR(`wattrset()',`Set_Character_Attributes') procedure Set_Character_Attributes (Win : Window := Standard_Window; Attr : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First); -- AKA -- ALIAS(`attrset()') pragma Inline (Set_Character_Attributes); -- ANCHOR(`wattr_get()',`Get_Character_Attributes') function Get_Character_Attribute (Win : Window := Standard_Window) return Character_Attribute_Set; -- AKA -- ALIAS(`attr_get()') -- ANCHOR(`wattr_get()',`Get_Character_Attribute') function Get_Character_Attribute (Win : Window := Standard_Window) return Color_Pair; -- AKA pragma Inline (Get_Character_Attribute); -- ANCHOR(`wcolor_set()',`Set_Color') procedure Set_Color (Win : Window := Standard_Window; Pair : Color_Pair); -- AKA -- ALIAS(`color_set()') pragma Inline (Set_Color); -- ANCHOR(`wchgat()',`Change_Attributes') procedure Change_Attributes (Win : Window := Standard_Window; Count : Integer := -1; Attr : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First); -- AKA -- ALIAS(`chgat()') -- ANCHOR(`mvwchgat()',`Change_Attributes') procedure Change_Attributes (Win : Window := Standard_Window; Line : Line_Position := Line_Position'First; Column : Column_Position := Column_Position'First; Count : Integer := -1; Attr : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First); -- AKA -- ALIAS(`mvchgat()') pragma Inline (Change_Attributes); -- MANPAGE(`curs_beep.3x') -- ANCHOR(`beep()',`Beep') procedure Beep; -- AKA pragma Inline (Beep); -- ANCHOR(`flash()',`Flash_Screen') procedure Flash_Screen; -- AKA pragma Inline (Flash_Screen); -- MANPAGE(`curs_inopts.3x') -- | Not implemented : typeahead -- -- ANCHOR(`cbreak()',`Set_Cbreak_Mode') procedure Set_Cbreak_Mode (SwitchOn : Boolean := True); -- AKA -- ALIAS(`nocbreak()') pragma Inline (Set_Cbreak_Mode); -- ANCHOR(`raw()',`Set_Raw_Mode') procedure Set_Raw_Mode (SwitchOn : Boolean := True); -- AKA -- ALIAS(`noraw()') pragma Inline (Set_Raw_Mode); -- ANCHOR(`echo()',`Set_Echo_Mode') procedure Set_Echo_Mode (SwitchOn : Boolean := True); -- AKA -- ALIAS(`noecho()') pragma Inline (Set_Echo_Mode); -- ANCHOR(`meta()',`Set_Meta_Mode') procedure Set_Meta_Mode (Win : Window := Standard_Window; SwitchOn : Boolean := True); -- AKA pragma Inline (Set_Meta_Mode); -- ANCHOR(`keypad()',`Set_KeyPad_Mode') procedure Set_KeyPad_Mode (Win : Window := Standard_Window; SwitchOn : Boolean := True); -- AKA pragma Inline (Set_KeyPad_Mode); function Get_KeyPad_Mode (Win : Window := Standard_Window) return Boolean; -- This has no pendant in C. There you've to look into the WINDOWS -- structure to get the value. Bad practice, not repeated in Ada. type Half_Delay_Amount is range 1 .. 255; -- ANCHOR(`halfdelay()',`Half_Delay') procedure Half_Delay (Amount : Half_Delay_Amount); -- AKA pragma Inline (Half_Delay); -- ANCHOR(`intrflush()',`Set_Flush_On_Interrupt_Mode') procedure Set_Flush_On_Interrupt_Mode (Win : Window := Standard_Window; Mode : Boolean := True); -- AKA pragma Inline (Set_Flush_On_Interrupt_Mode); -- ANCHOR(`qiflush()',`Set_Queue_Interrupt_Mode') procedure Set_Queue_Interrupt_Mode (Win : Window := Standard_Window; Flush : Boolean := True); -- AKA -- ALIAS(`noqiflush()') pragma Inline (Set_Queue_Interrupt_Mode); -- ANCHOR(`nodelay()',`Set_NoDelay_Mode') procedure Set_NoDelay_Mode (Win : Window := Standard_Window; Mode : Boolean := False); -- AKA pragma Inline (Set_NoDelay_Mode); type Timeout_Mode is (Blocking, Non_Blocking, Delayed); -- ANCHOR(`wtimeout()',`Set_Timeout_Mode') procedure Set_Timeout_Mode (Win : Window := Standard_Window; Mode : Timeout_Mode; Amount : Natural); -- in Milliseconds -- AKA -- ALIAS(`timeout()') -- Instead of overloading the semantic of the sign of amount, we -- introduce the Timeout_Mode parameter. This should improve -- readability. For Blocking and Non_Blocking, the Amount is not -- evaluated. -- We do not inline this procedure. -- ANCHOR(`notimeout()',`Set_Escape_Time_Mode') procedure Set_Escape_Timer_Mode (Win : Window := Standard_Window; Timer_Off : Boolean := False); -- AKA pragma Inline (Set_Escape_Timer_Mode); -- MANPAGE(`curs_outopts.3x') -- ANCHOR(`nl()',`Set_NL_Mode') procedure Set_NL_Mode (SwitchOn : Boolean := True); -- AKA -- ALIAS(`nonl()') pragma Inline (Set_NL_Mode); -- ANCHOR(`clearok()',`Clear_On_Next_Update') procedure Clear_On_Next_Update (Win : Window := Standard_Window; Do_Clear : Boolean := True); -- AKA pragma Inline (Clear_On_Next_Update); -- ANCHOR(`idlok()',`Use_Insert_Delete_Line') procedure Use_Insert_Delete_Line (Win : Window := Standard_Window; Do_Idl : Boolean := True); -- AKA pragma Inline (Use_Insert_Delete_Line); -- ANCHOR(`idcok()',`Use_Insert_Delete_Character') procedure Use_Insert_Delete_Character (Win : Window := Standard_Window; Do_Idc : Boolean := True); -- AKA pragma Inline (Use_Insert_Delete_Character); -- ANCHOR(`leaveok()',`Leave_Cursor_After_Update') procedure Leave_Cursor_After_Update (Win : Window := Standard_Window; Do_Leave : Boolean := True); -- AKA pragma Inline (Leave_Cursor_After_Update); -- ANCHOR(`immedok()',`Immediate_Update_Mode') procedure Immediate_Update_Mode (Win : Window := Standard_Window; Mode : Boolean := False); -- AKA pragma Inline (Immediate_Update_Mode); -- ANCHOR(`scrollok()',`Allow_Scrolling') procedure Allow_Scrolling (Win : Window := Standard_Window; Mode : Boolean := False); -- AKA pragma Inline (Allow_Scrolling); function Scrolling_Allowed (Win : Window := Standard_Window) return Boolean; -- There is no such function in the C interface. pragma Inline (Scrolling_Allowed); -- ANCHOR(`wsetscrreg()',`Set_Scroll_Region') procedure Set_Scroll_Region (Win : Window := Standard_Window; Top_Line : Line_Position; Bottom_Line : Line_Position); -- AKA -- ALIAS(`setscrreg()') pragma Inline (Set_Scroll_Region); -- MANPAGE(`curs_refresh.3x') -- ANCHOR(`doupdate()',`Update_Screen') procedure Update_Screen; -- AKA pragma Inline (Update_Screen); -- ANCHOR(`wrefresh()',`Refresh') procedure Refresh (Win : Window := Standard_Window); -- AKA -- There is an overloaded Refresh for Pads. -- The Inline pragma appears there -- ALIAS(`refresh()') -- ANCHOR(`wnoutrefresh()',`Refresh_Without_Update') procedure Refresh_Without_Update (Win : Window := Standard_Window); -- AKA -- There is an overloaded Refresh_Without_Update for Pads. -- The Inline pragma appears there -- ANCHOR(`redrawwin()',`Redraw') procedure Redraw (Win : Window := Standard_Window); -- AKA -- ANCHOR(`wredrawln()',`Redraw') procedure Redraw (Win : Window := Standard_Window; Begin_Line : Line_Position; Line_Count : Positive); -- AKA pragma Inline (Redraw); -- MANPAGE(`curs_clear.3x') -- ANCHOR(`werase()',`Erase') procedure Erase (Win : Window := Standard_Window); -- AKA -- ALIAS(`erase()') pragma Inline (Erase); -- ANCHOR(`wclear()',`Clear') procedure Clear (Win : Window := Standard_Window); -- AKA -- ALIAS(`clear()') pragma Inline (Clear); -- ANCHOR(`wclrtobot()',`Clear_To_End_Of_Screen') procedure Clear_To_End_Of_Screen (Win : Window := Standard_Window); -- AKA -- ALIAS(`clrtobot()') pragma Inline (Clear_To_End_Of_Screen); -- ANCHOR(`wclrtoeol()',`Clear_To_End_Of_Line') procedure Clear_To_End_Of_Line (Win : Window := Standard_Window); -- AKA -- ALIAS(`clrtoeol()') pragma Inline (Clear_To_End_Of_Line); -- MANPAGE(`curs_bkgd.3x') -- ANCHOR(`wbkgdset()',`Set_Background') -- TODO: we could have Set_Background(Window; Character_Attribute_Set) -- because in C it is common to see bkgdset(A_BOLD) or -- bkgdset(COLOR_PAIR(n)) procedure Set_Background (Win : Window := Standard_Window; Ch : Attributed_Character); -- AKA -- ALIAS(`bkgdset()') pragma Inline (Set_Background); -- ANCHOR(`wbkgd()',`Change_Background') procedure Change_Background (Win : Window := Standard_Window; Ch : Attributed_Character); -- AKA -- ALIAS(`bkgd()') pragma Inline (Change_Background); -- ANCHOR(`wbkgdget()',`Get_Background') -- ? wbkgdget is not listed in curs_bkgd, getbkgd is thpough. function Get_Background (Win : Window := Standard_Window) return Attributed_Character; -- AKA -- ALIAS(`bkgdget()') pragma Inline (Get_Background); -- MANPAGE(`curs_touch.3x') -- ANCHOR(`untouchwin()',`Untouch') procedure Untouch (Win : Window := Standard_Window); -- AKA pragma Inline (Untouch); -- ANCHOR(`touchwin()',`Touch') procedure Touch (Win : Window := Standard_Window); -- AKA -- ANCHOR(`touchline()',`Touch') procedure Touch (Win : Window := Standard_Window; Start : Line_Position; Count : Positive); -- AKA pragma Inline (Touch); -- ANCHOR(`wtouchln()',`Change_Line_Status') procedure Change_Lines_Status (Win : Window := Standard_Window; Start : Line_Position; Count : Positive; State : Boolean); -- AKA pragma Inline (Change_Lines_Status); -- ANCHOR(`is_linetouched()',`Is_Touched') function Is_Touched (Win : Window := Standard_Window; Line : Line_Position) return Boolean; -- AKA -- ANCHOR(`is_wintouched()',`Is_Touched') function Is_Touched (Win : Window := Standard_Window) return Boolean; -- AKA pragma Inline (Is_Touched); -- MANPAGE(`curs_overlay.3x') -- ANCHOR(`copywin()',`Copy') procedure Copy (Source_Window : Window; Destination_Window : Window; Source_Top_Row : Line_Position; Source_Left_Column : Column_Position; Destination_Top_Row : Line_Position; Destination_Left_Column : Column_Position; Destination_Bottom_Row : Line_Position; Destination_Right_Column : Column_Position; Non_Destructive_Mode : Boolean := True); -- AKA pragma Inline (Copy); -- ANCHOR(`overwrite()',`Overwrite') procedure Overwrite (Source_Window : Window; Destination_Window : Window); -- AKA pragma Inline (Overwrite); -- ANCHOR(`overlay()',`Overlay') procedure Overlay (Source_Window : Window; Destination_Window : Window); -- AKA pragma Inline (Overlay); -- MANPAGE(`curs_deleteln.3x') -- ANCHOR(`winsdelln()',`Insert_Delete_Lines') procedure Insert_Delete_Lines (Win : Window := Standard_Window; Lines : Integer := 1); -- default is to insert one line above -- AKA -- ALIAS(`insdelln()') pragma Inline (Insert_Delete_Lines); -- ANCHOR(`wdeleteln()',`Delete_Line') procedure Delete_Line (Win : Window := Standard_Window); -- AKA -- ALIAS(`deleteln()') pragma Inline (Delete_Line); -- ANCHOR(`winsertln()',`Insert_Line') procedure Insert_Line (Win : Window := Standard_Window); -- AKA -- ALIAS(`insertln()') pragma Inline (Insert_Line); -- MANPAGE(`curs_getyx.3x') -- ANCHOR(`getmaxyx()',`Get_Size') procedure Get_Size (Win : Window := Standard_Window; Number_Of_Lines : out Line_Count; Number_Of_Columns : out Column_Count); -- AKA pragma Inline (Get_Size); -- ANCHOR(`getbegyx()',`Get_Window_Position') procedure Get_Window_Position (Win : Window := Standard_Window; Top_Left_Line : out Line_Position; Top_Left_Column : out Column_Position); -- AKA pragma Inline (Get_Window_Position); -- ANCHOR(`getyx()',`Get_Cursor_Position') procedure Get_Cursor_Position (Win : Window := Standard_Window; Line : out Line_Position; Column : out Column_Position); -- AKA pragma Inline (Get_Cursor_Position); -- ANCHOR(`getparyx()',`Get_Origin_Relative_To_Parent') procedure Get_Origin_Relative_To_Parent (Win : Window; Top_Left_Line : out Line_Position; Top_Left_Column : out Column_Position; Is_Not_A_Subwindow : out Boolean); -- AKA -- Instead of placing -1 in the coordinates as return, we use a Boolean -- to return the info that the window has no parent. pragma Inline (Get_Origin_Relative_To_Parent); -- MANPAGE(`curs_pad.3x') -- ANCHOR(`newpad()',`New_Pad') function New_Pad (Lines : Line_Count; Columns : Column_Count) return Window; -- AKA pragma Inline (New_Pad); -- ANCHOR(`subpad()',`Sub_Pad') function Sub_Pad (Pad : Window; Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count; First_Line_Position : Line_Position; First_Column_Position : Column_Position) return Window; -- AKA pragma Inline (Sub_Pad); -- ANCHOR(`prefresh()',`Refresh') procedure Refresh (Pad : Window; Source_Top_Row : Line_Position; Source_Left_Column : Column_Position; Destination_Top_Row : Line_Position; Destination_Left_Column : Column_Position; Destination_Bottom_Row : Line_Position; Destination_Right_Column : Column_Position); -- AKA pragma Inline (Refresh); -- ANCHOR(`pnoutrefresh()',`Refresh_Without_Update') procedure Refresh_Without_Update (Pad : Window; Source_Top_Row : Line_Position; Source_Left_Column : Column_Position; Destination_Top_Row : Line_Position; Destination_Left_Column : Column_Position; Destination_Bottom_Row : Line_Position; Destination_Right_Column : Column_Position); -- AKA pragma Inline (Refresh_Without_Update); -- ANCHOR(`pechochar()',`Add_Character_To_Pad_And_Echo_It') procedure Add_Character_To_Pad_And_Echo_It (Pad : Window; Ch : Attributed_Character); -- AKA procedure Add_Character_To_Pad_And_Echo_It (Pad : Window; Ch : Character); pragma Inline (Add_Character_To_Pad_And_Echo_It); -- MANPAGE(`curs_scroll.3x') -- ANCHOR(`wscrl()',`Scroll') procedure Scroll (Win : Window := Standard_Window; Amount : Integer := 1); -- AKA -- ALIAS(`scroll()') -- ALIAS(`scrl()') pragma Inline (Scroll); -- MANPAGE(`curs_delch.3x') -- ANCHOR(`wdelch()',`Delete_Character') procedure Delete_Character (Win : Window := Standard_Window); -- AKA -- ALIAS(`delch()') -- ANCHOR(`mvwdelch()',`Delete_Character') procedure Delete_Character (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position); -- AKA -- ALIAS(`mvdelch()') pragma Inline (Delete_Character); -- MANPAGE(`curs_inch.3x') -- ANCHOR(`winch()',`Peek') function Peek (Win : Window := Standard_Window) return Attributed_Character; -- ALIAS(`inch()') -- AKA -- ANCHOR(`mvwinch()',`Peek') function Peek (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position) return Attributed_Character; -- AKA -- ALIAS(`mvinch()') -- More Peek's follow, pragma Inline appears later. -- MANPAGE(`curs_insch.3x') -- ANCHOR(`winsch()',`Insert') procedure Insert (Win : Window := Standard_Window; Ch : Attributed_Character); -- AKA -- ALIAS(`insch()') -- ANCHOR(`mvwinsch()',`Insert') procedure Insert (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Ch : Attributed_Character); -- AKA -- ALIAS(`mvinsch()') -- MANPAGE(`curs_insstr.3x') -- ANCHOR(`winsnstr()',`Insert') procedure Insert (Win : Window := Standard_Window; Str : String; Len : Integer := -1); -- AKA -- ALIAS(`winsstr()') -- ALIAS(`insnstr()') -- ALIAS(`insstr()') -- ANCHOR(`mvwinsnstr()',`Insert') procedure Insert (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : String; Len : Integer := -1); -- AKA -- ALIAS(`mvwinsstr()') -- ALIAS(`mvinsnstr()') -- ALIAS(`mvinsstr()') pragma Inline (Insert); -- MANPAGE(`curs_instr.3x') -- ANCHOR(`winnstr()',`Peek') procedure Peek (Win : Window := Standard_Window; Str : out String; Len : Integer := -1); -- AKA -- ALIAS(`winstr()') -- ALIAS(`innstr()') -- ALIAS(`instr()') -- ANCHOR(`mvwinnstr()',`Peek') procedure Peek (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : out String; Len : Integer := -1); -- AKA -- ALIAS(`mvwinstr()') -- ALIAS(`mvinnstr()') -- ALIAS(`mvinstr()') -- MANPAGE(`curs_inchstr.3x') -- ANCHOR(`winchnstr()',`Peek') procedure Peek (Win : Window := Standard_Window; Str : out Attributed_String; Len : Integer := -1); -- AKA -- ALIAS(`winchstr()') -- ALIAS(`inchnstr()') -- ALIAS(`inchstr()') -- ANCHOR(`mvwinchnstr()',`Peek') procedure Peek (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : out Attributed_String; Len : Integer := -1); -- AKA -- ALIAS(`mvwinchstr()') -- ALIAS(`mvinchnstr()') -- ALIAS(`mvinchstr()') -- We do not inline the Peek procedures -- MANPAGE(`curs_getstr.3x') -- ANCHOR(`wgetnstr()',`Get') procedure Get (Win : Window := Standard_Window; Str : out String; Len : Integer := -1); -- AKA -- ALIAS(`wgetstr()') -- ALIAS(`getnstr()') -- ALIAS(`getstr()') -- actually getstr is not supported because that results in buffer -- overflows. -- ANCHOR(`mvwgetnstr()',`Get') procedure Get (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : out String; Len : Integer := -1); -- AKA -- ALIAS(`mvwgetstr()') -- ALIAS(`mvgetnstr()') -- ALIAS(`mvgetstr()') -- Get is not inlined -- MANPAGE(`curs_slk.3x') -- Not Implemented: slk_attr_on, slk_attr_off, slk_attr_set type Soft_Label_Key_Format is (Three_Two_Three, Four_Four, PC_Style, -- ncurses specific PC_Style_With_Index); -- " type Label_Number is new Positive range 1 .. 12; type Label_Justification is (Left, Centered, Right); -- ANCHOR(`slk_init()',`Init_Soft_Label_Keys') procedure Init_Soft_Label_Keys (Format : Soft_Label_Key_Format := Three_Two_Three); -- AKA pragma Inline (Init_Soft_Label_Keys); -- ANCHOR(`slk_set()',`Set_Soft_Label_Key') procedure Set_Soft_Label_Key (Label : Label_Number; Text : String; Fmt : Label_Justification := Left); -- AKA -- We do not inline this procedure -- ANCHOR(`slk_refresh()',`Refresh_Soft_Label_Key') procedure Refresh_Soft_Label_Keys; -- AKA pragma Inline (Refresh_Soft_Label_Keys); -- ANCHOR(`slk_noutrefresh()',`Refresh_Soft_Label_Keys_Without_Update') procedure Refresh_Soft_Label_Keys_Without_Update; -- AKA pragma Inline (Refresh_Soft_Label_Keys_Without_Update); -- ANCHOR(`slk_label()',`Get_Soft_Label_Key') procedure Get_Soft_Label_Key (Label : Label_Number; Text : out String); -- AKA -- ANCHOR(`slk_label()',`Get_Soft_Label_Key') function Get_Soft_Label_Key (Label : Label_Number) return String; -- AKA -- Same as function pragma Inline (Get_Soft_Label_Key); -- ANCHOR(`slk_clear()',`Clear_Soft_Label_Keys') procedure Clear_Soft_Label_Keys; -- AKA pragma Inline (Clear_Soft_Label_Keys); -- ANCHOR(`slk_restore()',`Restore_Soft_Label_Keys') procedure Restore_Soft_Label_Keys; -- AKA pragma Inline (Restore_Soft_Label_Keys); -- ANCHOR(`slk_touch()',`Touch_Soft_Label_Keys') procedure Touch_Soft_Label_Keys; -- AKA pragma Inline (Touch_Soft_Label_Keys); -- ANCHOR(`slk_attron()',`Switch_Soft_Label_Key_Attributes') procedure Switch_Soft_Label_Key_Attributes (Attr : Character_Attribute_Set; On : Boolean := True); -- AKA -- ALIAS(`slk_attroff()') pragma Inline (Switch_Soft_Label_Key_Attributes); -- ANCHOR(`slk_attrset()',`Set_Soft_Label_Key_Attributes') procedure Set_Soft_Label_Key_Attributes (Attr : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First); -- AKA pragma Inline (Set_Soft_Label_Key_Attributes); -- ANCHOR(`slk_attr()',`Get_Soft_Label_Key_Attributes') function Get_Soft_Label_Key_Attributes return Character_Attribute_Set; -- AKA -- ANCHOR(`slk_attr()',`Get_Soft_Label_Key_Attributes') function Get_Soft_Label_Key_Attributes return Color_Pair; -- AKA pragma Inline (Get_Soft_Label_Key_Attributes); -- ANCHOR(`slk_color()',`Set_Soft_Label_Key_Color') procedure Set_Soft_Label_Key_Color (Pair : Color_Pair); -- AKA pragma Inline (Set_Soft_Label_Key_Color); -- MANPAGE(`keybound.3x') -- Not Implemented: keybound -- MANPAGE(`keyok.3x') -- ANCHOR(`keyok()',`Enable_Key') procedure Enable_Key (Key : Special_Key_Code; Enable : Boolean := True); -- AKA pragma Inline (Enable_Key); -- MANPAGE(`define_key.3x') -- ANCHOR(`define_key()',`Define_Key') procedure Define_Key (Definition : String; Key : Special_Key_Code); -- AKA pragma Inline (Define_Key); -- MANPAGE(`curs_util.3x') -- | Not implemented : filter, use_env -- | putwin, getwin are in the child package PutWin -- -- ANCHOR(`keyname()',`Key_Name') procedure Key_Name (Key : Real_Key_Code; Name : out String); -- AKA -- The external name for a real keystroke. -- ANCHOR(`keyname()',`Key_Name') function Key_Name (Key : Real_Key_Code) return String; -- AKA -- Same as function -- We do not inline this routine -- ANCHOR(`unctrl()',`Un_Control') procedure Un_Control (Ch : Attributed_Character; Str : out String); -- AKA -- ANCHOR(`unctrl()',`Un_Control') function Un_Control (Ch : Attributed_Character) return String; -- AKA -- Same as function pragma Inline (Un_Control); -- ANCHOR(`delay_output()',`Delay_Output') procedure Delay_Output (Msecs : Natural); -- AKA pragma Inline (Delay_Output); -- ANCHOR(`flushinp()',`Flush_Input') procedure Flush_Input; -- AKA pragma Inline (Flush_Input); -- MANPAGE(`curs_termattrs.3x') -- ANCHOR(`baudrate()',`Baudrate') function Baudrate return Natural; -- AKA pragma Inline (Baudrate); -- ANCHOR(`erasechar()',`Erase_Character') function Erase_Character return Character; -- AKA pragma Inline (Erase_Character); -- ANCHOR(`killchar()',`Kill_Character') function Kill_Character return Character; -- AKA pragma Inline (Kill_Character); -- ANCHOR(`has_ic()',`Has_Insert_Character') function Has_Insert_Character return Boolean; -- AKA pragma Inline (Has_Insert_Character); -- ANCHOR(`has_il()',`Has_Insert_Line') function Has_Insert_Line return Boolean; -- AKA pragma Inline (Has_Insert_Line); -- ANCHOR(`termattrs()',`Supported_Attributes') function Supported_Attributes return Character_Attribute_Set; -- AKA pragma Inline (Supported_Attributes); -- ANCHOR(`longname()',`Long_Name') procedure Long_Name (Name : out String); -- AKA -- ANCHOR(`longname()',`Long_Name') function Long_Name return String; -- AKA -- Same as function pragma Inline (Long_Name); -- ANCHOR(`termname()',`Terminal_Name') procedure Terminal_Name (Name : out String); -- AKA -- ANCHOR(`termname()',`Terminal_Name') function Terminal_Name return String; -- AKA -- Same as function pragma Inline (Terminal_Name); -- MANPAGE(`curs_color.3x') -- COLOR_PAIR -- COLOR_PAIR(n) in C is the same as -- Attributed_Character(Ch => Nul, Color => n, Attr => Normal_Video) -- In C you often see something like c = c | COLOR_PAIR(n); -- This is equivalent to c.Color := n; -- ANCHOR(`start_color()',`Start_Color') procedure Start_Color; -- AKA pragma Import (C, Start_Color, "start_color"); -- ANCHOR(`init_pair()',`Init_Pair') procedure Init_Pair (Pair : Redefinable_Color_Pair; Fore : Color_Number; Back : Color_Number); -- AKA pragma Inline (Init_Pair); -- ANCHOR(`pair_content()',`Pair_Content') procedure Pair_Content (Pair : Color_Pair; Fore : out Color_Number; Back : out Color_Number); -- AKA pragma Inline (Pair_Content); -- ANCHOR(`has_colors()',`Has_Colors') function Has_Colors return Boolean; -- AKA pragma Inline (Has_Colors); -- ANCHOR(`init_color()',`Init_Color') procedure Init_Color (Color : Color_Number; Red : RGB_Value; Green : RGB_Value; Blue : RGB_Value); -- AKA pragma Inline (Init_Color); -- ANCHOR(`can_change_color()',`Can_Change_Color') function Can_Change_Color return Boolean; -- AKA pragma Inline (Can_Change_Color); -- ANCHOR(`color_content()',`Color_Content') procedure Color_Content (Color : Color_Number; Red : out RGB_Value; Green : out RGB_Value; Blue : out RGB_Value); -- AKA pragma Inline (Color_Content); -- MANPAGE(`curs_kernel.3x') -- | Not implemented: getsyx, setsyx -- type Curses_Mode is (Curses, Shell); -- ANCHOR(`def_prog_mode()',`Save_Curses_Mode') procedure Save_Curses_Mode (Mode : Curses_Mode); -- AKA -- ALIAS(`def_shell_mode()') pragma Inline (Save_Curses_Mode); -- ANCHOR(`reset_prog_mode()',`Reset_Curses_Mode') procedure Reset_Curses_Mode (Mode : Curses_Mode); -- AKA -- ALIAS(`reset_shell_mode()') pragma Inline (Reset_Curses_Mode); -- ANCHOR(`savetty()',`Save_Terminal_State') procedure Save_Terminal_State; -- AKA pragma Inline (Save_Terminal_State); -- ANCHOR(`resetty();',`Reset_Terminal_State') procedure Reset_Terminal_State; -- AKA pragma Inline (Reset_Terminal_State); type Stdscr_Init_Proc is access function (Win : Window; Columns : Column_Count) return Integer; pragma Convention (C, Stdscr_Init_Proc); -- N.B.: the return value is actually ignored, but it seems to be -- a good practice to return 0 if you think all went fine -- and -1 otherwise. -- ANCHOR(`ripoffline()',`Rip_Off_Lines') procedure Rip_Off_Lines (Lines : Integer; Proc : Stdscr_Init_Proc); -- AKA -- N.B.: to be more precise, this uses a ncurses specific enhancement of -- ripoffline(), in which the Lines argument absolute value is the -- number of lines to be ripped of. The official ripoffline() only -- uses the sign of Lines to remove a single line from bottom or top. pragma Inline (Rip_Off_Lines); type Cursor_Visibility is (Invisible, Normal, Very_Visible); -- ANCHOR(`curs_set()',`Set_Cursor_Visibility') procedure Set_Cursor_Visibility (Visibility : in out Cursor_Visibility); -- AKA pragma Inline (Set_Cursor_Visibility); -- ANCHOR(`napms()',`Nap_Milli_Seconds') procedure Nap_Milli_Seconds (Ms : Natural); -- AKA pragma Inline (Nap_Milli_Seconds); -- |===================================================================== -- | Some useful helpers. -- |===================================================================== type Transform_Direction is (From_Screen, To_Screen); procedure Transform_Coordinates (W : Window := Standard_Window; Line : in out Line_Position; Column : in out Column_Position; Dir : Transform_Direction := From_Screen); -- This procedure transforms screen coordinates into coordinates relative -- to the window and vice versa, depending on the Dir parameter. -- Screen coordinates are the position information for the physical device. -- An Curses_Exception will be raised if Line and Column are not in the -- Window or if you pass the Null_Window as argument. -- We do not inline this procedure -- MANPAGE(`default_colors.3x') Default_Color : constant Color_Number := -1; -- ANCHOR(`use_default_colors()',`Use_Default_Colors') procedure Use_Default_Colors; -- AKA pragma Inline (Use_Default_Colors); -- ANCHOR(`assume_default_colors()',`Assume_Default_Colors') procedure Assume_Default_Colors (Fore : Color_Number := Default_Color; Back : Color_Number := Default_Color); -- AKA pragma Inline (Assume_Default_Colors); -- MANPAGE(`curs_extend.3x') -- ANCHOR(`curses_version()',`Curses_Version') function Curses_Version return String; -- AKA -- ANCHOR(`use_extended_names()',`Use_Extended_Names') -- The returnvalue is the previous setting of the flag function Use_Extended_Names (Enable : Boolean) return Boolean; -- AKA -- MANPAGE(`curs_trace.3x') -- ANCHOR(`_nc_freeall()',`Curses_Free_All') procedure Curses_Free_All; -- AKA -- MANPAGE(`curs_scr_dump.3x') -- ANCHOR(`scr_dump()',`Screen_Dump_To_File') procedure Screen_Dump_To_File (Filename : String); -- AKA -- ANCHOR(`scr_restore()',`Screen_Restore_From_File') procedure Screen_Restore_From_File (Filename : String); -- AKA -- ANCHOR(`scr_init()',`Screen_Init_From_File') procedure Screen_Init_From_File (Filename : String); -- AKA -- ANCHOR(`scr_set()',`Screen_Set_File') procedure Screen_Set_File (Filename : String); -- AKA -- MANPAGE(`curs_print.3x') -- Not implemented: mcprint -- MANPAGE(`curs_printw.3x') -- Not implemented: printw, wprintw, mvprintw, mvwprintw, vwprintw, -- vw_printw -- Please use the Ada style Text_IO child packages for formatted -- printing. It does not make a lot of sense to map the printf style -- C functions to Ada. -- MANPAGE(`curs_scanw.3x') -- Not implemented: scanw, wscanw, mvscanw, mvwscanw, vwscanw, vw_scanw -- MANPAGE(`resizeterm.3x') -- Not Implemented: resizeterm -- MANPAGE(`wresize.3x') -- ANCHOR(`wresize()',`Resize') procedure Resize (Win : Window := Standard_Window; Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count); -- AKA private type Window is new System.Storage_Elements.Integer_Address; Null_Window : constant Window := 0; -- The next constants are generated and may be different on your -- architecture. -- Sizeof_Bool : constant := Curses_Constants.Sizeof_Bool; type Curses_Bool is mod 2 ** Sizeof_Bool; Curses_Bool_False : constant Curses_Bool := 0; end Terminal_Interface.Curses; ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-panels-user_data.ads.m40000644000175100001440000000742611315445551025477 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-panels-user_data__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Panels.User_Data -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.15 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type User is limited private; type User_Access is access all User; package Terminal_Interface.Curses.Panels.User_Data is pragma Preelaborate (Terminal_Interface.Curses.Panels.User_Data); -- MANPAGE(`panel.3x') -- ANCHOR(`set_panel_userptr',`Set_User_Data') procedure Set_User_Data (Pan : Panel; Data : User_Access); -- AKA pragma Inline (Set_User_Data); -- ANCHOR(`panel_userptr',`Get_User_Data') procedure Get_User_Data (Pan : Panel; Data : out User_Access); -- AKA -- ANCHOR(`panel_userptr',`Get_User_Data') function Get_User_Data (Pan : Panel) return User_Access; -- AKA -- Same as function pragma Inline (Get_User_Data); end Terminal_Interface.Curses.Panels.User_Data; ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-forms.ads.m40000644000175100001440000007175712340207715023403 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-forms__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Form -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.33 $ -- $Date: 2014/05/24 21:31:57 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System; with Ada.Characters.Latin_1; package Terminal_Interface.Curses.Forms is pragma Preelaborate (Terminal_Interface.Curses.Forms); pragma Linker_Options ("-lform" & Curses_Constants.DFT_ARG_SUFFIX); Space : Character renames Ada.Characters.Latin_1.Space; type Field is private; type Form is private; Null_Field : constant Field; Null_Form : constant Form; type Field_Justification is (None, Left, Center, Right); type Field_Option_Set is record Visible : Boolean; Active : Boolean; Public : Boolean; Edit : Boolean; Wrap : Boolean; Blank : Boolean; Auto_Skip : Boolean; Null_Ok : Boolean; Pass_Ok : Boolean; Static : Boolean; end record; pragma Convention (C_Pass_By_Copy, Field_Option_Set); for Field_Option_Set use record Visible at 0 range Curses_Constants.O_VISIBLE_First .. Curses_Constants.O_VISIBLE_Last; Active at 0 range Curses_Constants.O_ACTIVE_First .. Curses_Constants.O_ACTIVE_Last; Public at 0 range Curses_Constants.O_PUBLIC_First .. Curses_Constants.O_PUBLIC_Last; Edit at 0 range Curses_Constants.O_EDIT_First .. Curses_Constants.O_EDIT_Last; Wrap at 0 range Curses_Constants.O_WRAP_First .. Curses_Constants.O_WRAP_Last; Blank at 0 range Curses_Constants.O_BLANK_First .. Curses_Constants.O_BLANK_Last; Auto_Skip at 0 range Curses_Constants.O_AUTOSKIP_First .. Curses_Constants.O_AUTOSKIP_Last; Null_Ok at 0 range Curses_Constants.O_NULLOK_First .. Curses_Constants.O_NULLOK_Last; Pass_Ok at 0 range Curses_Constants.O_PASSOK_First .. Curses_Constants.O_PASSOK_Last; Static at 0 range Curses_Constants.O_STATIC_First .. Curses_Constants.O_STATIC_Last; end record; pragma Warnings (Off); for Field_Option_Set'Size use Curses_Constants.Field_Options_Size; pragma Warnings (On); function Default_Field_Options return Field_Option_Set; -- The initial defaults for the field options. pragma Inline (Default_Field_Options); type Form_Option_Set is record NL_Overload : Boolean; BS_Overload : Boolean; end record; pragma Convention (C_Pass_By_Copy, Form_Option_Set); for Form_Option_Set use record NL_Overload at 0 range Curses_Constants.O_NL_OVERLOAD_First .. Curses_Constants.O_NL_OVERLOAD_Last; BS_Overload at 0 range Curses_Constants.O_BS_OVERLOAD_First .. Curses_Constants.O_BS_OVERLOAD_Last; end record; pragma Warnings (Off); for Form_Option_Set'Size use Curses_Constants.Field_Options_Size; pragma Warnings (On); function Default_Form_Options return Form_Option_Set; -- The initial defaults for the form options. pragma Inline (Default_Form_Options); type Buffer_Number is new Natural; type Field_Array is array (Positive range <>) of aliased Field; pragma Convention (C, Field_Array); type Field_Array_Access is access Field_Array; procedure Free (FA : in out Field_Array_Access; Free_Fields : Boolean := False); -- Release the memory for an allocated field array -- If Free_Fields is True, call Delete() for all the fields in -- the array. subtype Form_Request_Code is Key_Code range (Key_Max + 1) .. (Key_Max + 57); -- The prefix F_ stands for "Form Request" F_Next_Page : constant Form_Request_Code := Key_Max + 1; F_Previous_Page : constant Form_Request_Code := Key_Max + 2; F_First_Page : constant Form_Request_Code := Key_Max + 3; F_Last_Page : constant Form_Request_Code := Key_Max + 4; F_Next_Field : constant Form_Request_Code := Key_Max + 5; F_Previous_Field : constant Form_Request_Code := Key_Max + 6; F_First_Field : constant Form_Request_Code := Key_Max + 7; F_Last_Field : constant Form_Request_Code := Key_Max + 8; F_Sorted_Next_Field : constant Form_Request_Code := Key_Max + 9; F_Sorted_Previous_Field : constant Form_Request_Code := Key_Max + 10; F_Sorted_First_Field : constant Form_Request_Code := Key_Max + 11; F_Sorted_Last_Field : constant Form_Request_Code := Key_Max + 12; F_Left_Field : constant Form_Request_Code := Key_Max + 13; F_Right_Field : constant Form_Request_Code := Key_Max + 14; F_Up_Field : constant Form_Request_Code := Key_Max + 15; F_Down_Field : constant Form_Request_Code := Key_Max + 16; F_Next_Char : constant Form_Request_Code := Key_Max + 17; F_Previous_Char : constant Form_Request_Code := Key_Max + 18; F_Next_Line : constant Form_Request_Code := Key_Max + 19; F_Previous_Line : constant Form_Request_Code := Key_Max + 20; F_Next_Word : constant Form_Request_Code := Key_Max + 21; F_Previous_Word : constant Form_Request_Code := Key_Max + 22; F_Begin_Field : constant Form_Request_Code := Key_Max + 23; F_End_Field : constant Form_Request_Code := Key_Max + 24; F_Begin_Line : constant Form_Request_Code := Key_Max + 25; F_End_Line : constant Form_Request_Code := Key_Max + 26; F_Left_Char : constant Form_Request_Code := Key_Max + 27; F_Right_Char : constant Form_Request_Code := Key_Max + 28; F_Up_Char : constant Form_Request_Code := Key_Max + 29; F_Down_Char : constant Form_Request_Code := Key_Max + 30; F_New_Line : constant Form_Request_Code := Key_Max + 31; F_Insert_Char : constant Form_Request_Code := Key_Max + 32; F_Insert_Line : constant Form_Request_Code := Key_Max + 33; F_Delete_Char : constant Form_Request_Code := Key_Max + 34; F_Delete_Previous : constant Form_Request_Code := Key_Max + 35; F_Delete_Line : constant Form_Request_Code := Key_Max + 36; F_Delete_Word : constant Form_Request_Code := Key_Max + 37; F_Clear_EOL : constant Form_Request_Code := Key_Max + 38; F_Clear_EOF : constant Form_Request_Code := Key_Max + 39; F_Clear_Field : constant Form_Request_Code := Key_Max + 40; F_Overlay_Mode : constant Form_Request_Code := Key_Max + 41; F_Insert_Mode : constant Form_Request_Code := Key_Max + 42; -- Vertical Scrolling F_ScrollForward_Line : constant Form_Request_Code := Key_Max + 43; F_ScrollBackward_Line : constant Form_Request_Code := Key_Max + 44; F_ScrollForward_Page : constant Form_Request_Code := Key_Max + 45; F_ScrollBackward_Page : constant Form_Request_Code := Key_Max + 46; F_ScrollForward_HalfPage : constant Form_Request_Code := Key_Max + 47; F_ScrollBackward_HalfPage : constant Form_Request_Code := Key_Max + 48; -- Horizontal Scrolling F_HScrollForward_Char : constant Form_Request_Code := Key_Max + 49; F_HScrollBackward_Char : constant Form_Request_Code := Key_Max + 50; F_HScrollForward_Line : constant Form_Request_Code := Key_Max + 51; F_HScrollBackward_Line : constant Form_Request_Code := Key_Max + 52; F_HScrollForward_HalfLine : constant Form_Request_Code := Key_Max + 53; F_HScrollBackward_HalfLine : constant Form_Request_Code := Key_Max + 54; F_Validate_Field : constant Form_Request_Code := Key_Max + 55; F_Next_Choice : constant Form_Request_Code := Key_Max + 56; F_Previous_Choice : constant Form_Request_Code := Key_Max + 57; -- For those who like the old 'C' style request names REQ_NEXT_PAGE : Form_Request_Code renames F_Next_Page; REQ_PREV_PAGE : Form_Request_Code renames F_Previous_Page; REQ_FIRST_PAGE : Form_Request_Code renames F_First_Page; REQ_LAST_PAGE : Form_Request_Code renames F_Last_Page; REQ_NEXT_FIELD : Form_Request_Code renames F_Next_Field; REQ_PREV_FIELD : Form_Request_Code renames F_Previous_Field; REQ_FIRST_FIELD : Form_Request_Code renames F_First_Field; REQ_LAST_FIELD : Form_Request_Code renames F_Last_Field; REQ_SNEXT_FIELD : Form_Request_Code renames F_Sorted_Next_Field; REQ_SPREV_FIELD : Form_Request_Code renames F_Sorted_Previous_Field; REQ_SFIRST_FIELD : Form_Request_Code renames F_Sorted_First_Field; REQ_SLAST_FIELD : Form_Request_Code renames F_Sorted_Last_Field; REQ_LEFT_FIELD : Form_Request_Code renames F_Left_Field; REQ_RIGHT_FIELD : Form_Request_Code renames F_Right_Field; REQ_UP_FIELD : Form_Request_Code renames F_Up_Field; REQ_DOWN_FIELD : Form_Request_Code renames F_Down_Field; REQ_NEXT_CHAR : Form_Request_Code renames F_Next_Char; REQ_PREV_CHAR : Form_Request_Code renames F_Previous_Char; REQ_NEXT_LINE : Form_Request_Code renames F_Next_Line; REQ_PREV_LINE : Form_Request_Code renames F_Previous_Line; REQ_NEXT_WORD : Form_Request_Code renames F_Next_Word; REQ_PREV_WORD : Form_Request_Code renames F_Previous_Word; REQ_BEG_FIELD : Form_Request_Code renames F_Begin_Field; REQ_END_FIELD : Form_Request_Code renames F_End_Field; REQ_BEG_LINE : Form_Request_Code renames F_Begin_Line; REQ_END_LINE : Form_Request_Code renames F_End_Line; REQ_LEFT_CHAR : Form_Request_Code renames F_Left_Char; REQ_RIGHT_CHAR : Form_Request_Code renames F_Right_Char; REQ_UP_CHAR : Form_Request_Code renames F_Up_Char; REQ_DOWN_CHAR : Form_Request_Code renames F_Down_Char; REQ_NEW_LINE : Form_Request_Code renames F_New_Line; REQ_INS_CHAR : Form_Request_Code renames F_Insert_Char; REQ_INS_LINE : Form_Request_Code renames F_Insert_Line; REQ_DEL_CHAR : Form_Request_Code renames F_Delete_Char; REQ_DEL_PREV : Form_Request_Code renames F_Delete_Previous; REQ_DEL_LINE : Form_Request_Code renames F_Delete_Line; REQ_DEL_WORD : Form_Request_Code renames F_Delete_Word; REQ_CLR_EOL : Form_Request_Code renames F_Clear_EOL; REQ_CLR_EOF : Form_Request_Code renames F_Clear_EOF; REQ_CLR_FIELD : Form_Request_Code renames F_Clear_Field; REQ_OVL_MODE : Form_Request_Code renames F_Overlay_Mode; REQ_INS_MODE : Form_Request_Code renames F_Insert_Mode; REQ_SCR_FLINE : Form_Request_Code renames F_ScrollForward_Line; REQ_SCR_BLINE : Form_Request_Code renames F_ScrollBackward_Line; REQ_SCR_FPAGE : Form_Request_Code renames F_ScrollForward_Page; REQ_SCR_BPAGE : Form_Request_Code renames F_ScrollBackward_Page; REQ_SCR_FHPAGE : Form_Request_Code renames F_ScrollForward_HalfPage; REQ_SCR_BHPAGE : Form_Request_Code renames F_ScrollBackward_HalfPage; REQ_SCR_FCHAR : Form_Request_Code renames F_HScrollForward_Char; REQ_SCR_BCHAR : Form_Request_Code renames F_HScrollBackward_Char; REQ_SCR_HFLINE : Form_Request_Code renames F_HScrollForward_Line; REQ_SCR_HBLINE : Form_Request_Code renames F_HScrollBackward_Line; REQ_SCR_HFHALF : Form_Request_Code renames F_HScrollForward_HalfLine; REQ_SCR_HBHALF : Form_Request_Code renames F_HScrollBackward_HalfLine; REQ_VALIDATION : Form_Request_Code renames F_Validate_Field; REQ_NEXT_CHOICE : Form_Request_Code renames F_Next_Choice; REQ_PREV_CHOICE : Form_Request_Code renames F_Previous_Choice; procedure Request_Name (Key : Form_Request_Code; Name : out String); function Request_Name (Key : Form_Request_Code) return String; -- Same as function pragma Inline (Request_Name); ------------------ -- Exceptions -- ------------------ Form_Exception : exception; -- MANPAGE(`form_field_new.3x') -- ANCHOR(`new_field()',`Create') function Create (Height : Line_Count; Width : Column_Count; Top : Line_Position; Left : Column_Position; Off_Screen : Natural := 0; More_Buffers : Buffer_Number := Buffer_Number'First) return Field; -- AKA -- An overloaded Create is defined later. Pragma Inline appears there. -- ANCHOR(`new_field()',`New_Field') function New_Field (Height : Line_Count; Width : Column_Count; Top : Line_Position; Left : Column_Position; Off_Screen : Natural := 0; More_Buffers : Buffer_Number := Buffer_Number'First) return Field renames Create; -- AKA pragma Inline (New_Field); -- ANCHOR(`free_field()',`Delete') procedure Delete (Fld : in out Field); -- AKA -- Reset Fld to Null_Field -- An overloaded Delete is defined later. Pragma Inline appears there. -- ANCHOR(`dup_field()',`Duplicate') function Duplicate (Fld : Field; Top : Line_Position; Left : Column_Position) return Field; -- AKA pragma Inline (Duplicate); -- ANCHOR(`link_field()',`Link') function Link (Fld : Field; Top : Line_Position; Left : Column_Position) return Field; -- AKA pragma Inline (Link); -- MANPAGE(`form_field_just.3x') -- ANCHOR(`set_field_just()',`Set_Justification') procedure Set_Justification (Fld : Field; Just : Field_Justification := None); -- AKA pragma Inline (Set_Justification); -- ANCHOR(`field_just()',`Get_Justification') function Get_Justification (Fld : Field) return Field_Justification; -- AKA pragma Inline (Get_Justification); -- MANPAGE(`form_field_buffer.3x') -- ANCHOR(`set_field_buffer()',`Set_Buffer') procedure Set_Buffer (Fld : Field; Buffer : Buffer_Number := Buffer_Number'First; Str : String); -- AKA -- Not inlined -- ANCHOR(`field_buffer()',`Get_Buffer') procedure Get_Buffer (Fld : Field; Buffer : Buffer_Number := Buffer_Number'First; Str : out String); -- AKA function Get_Buffer (Fld : Field; Buffer : Buffer_Number := Buffer_Number'First) return String; -- AKA -- Same but as function pragma Inline (Get_Buffer); -- ANCHOR(`set_field_status()',`Set_Status') procedure Set_Status (Fld : Field; Status : Boolean := True); -- AKA pragma Inline (Set_Status); -- ANCHOR(`field_status()',`Changed') function Changed (Fld : Field) return Boolean; -- AKA pragma Inline (Changed); -- ANCHOR(`set_field_max()',`Set_Maximum_Size') procedure Set_Maximum_Size (Fld : Field; Max : Natural := 0); -- AKA pragma Inline (Set_Maximum_Size); -- MANPAGE(`form_field_opts.3x') -- ANCHOR(`set_field_opts()',`Set_Options') procedure Set_Options (Fld : Field; Options : Field_Option_Set); -- AKA -- An overloaded version is defined later. Pragma Inline appears there -- ANCHOR(`field_opts_on()',`Switch_Options') procedure Switch_Options (Fld : Field; Options : Field_Option_Set; On : Boolean := True); -- AKA -- ALIAS(`field_opts_off()') -- An overloaded version is defined later. Pragma Inline appears there -- ANCHOR(`field_opts()',`Get_Options') procedure Get_Options (Fld : Field; Options : out Field_Option_Set); -- AKA -- ANCHOR(`field_opts()',`Get_Options') function Get_Options (Fld : Field := Null_Field) return Field_Option_Set; -- AKA -- An overloaded version is defined later. Pragma Inline appears there -- MANPAGE(`form_field_attributes.3x') -- ANCHOR(`set_field_fore()',`Set_Foreground') procedure Set_Foreground (Fld : Field; Fore : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First); -- AKA pragma Inline (Set_Foreground); -- ANCHOR(`field_fore()',`Foreground') procedure Foreground (Fld : Field; Fore : out Character_Attribute_Set); -- AKA -- ANCHOR(`field_fore()',`Foreground') procedure Foreground (Fld : Field; Fore : out Character_Attribute_Set; Color : out Color_Pair); -- AKA pragma Inline (Foreground); -- ANCHOR(`set_field_back()',`Set_Background') procedure Set_Background (Fld : Field; Back : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First); -- AKA pragma Inline (Set_Background); -- ANCHOR(`field_back()',`Background') procedure Background (Fld : Field; Back : out Character_Attribute_Set); -- AKA -- ANCHOR(`field_back()',`Background') procedure Background (Fld : Field; Back : out Character_Attribute_Set; Color : out Color_Pair); -- AKA pragma Inline (Background); -- ANCHOR(`set_field_pad()',`Set_Pad_Character') procedure Set_Pad_Character (Fld : Field; Pad : Character := Space); -- AKA pragma Inline (Set_Pad_Character); -- ANCHOR(`field_pad()',`Pad_Character') procedure Pad_Character (Fld : Field; Pad : out Character); -- AKA pragma Inline (Pad_Character); -- MANPAGE(`form_field_info.3x') -- ANCHOR(`field_info()',`Info') procedure Info (Fld : Field; Lines : out Line_Count; Columns : out Column_Count; First_Row : out Line_Position; First_Column : out Column_Position; Off_Screen : out Natural; Additional_Buffers : out Buffer_Number); -- AKA pragma Inline (Info); -- ANCHOR(`dynamic_field_info()',`Dynamic_Info') procedure Dynamic_Info (Fld : Field; Lines : out Line_Count; Columns : out Column_Count; Max : out Natural); -- AKA pragma Inline (Dynamic_Info); -- MANPAGE(`form_win.3x') -- ANCHOR(`set_form_win()',`Set_Window') procedure Set_Window (Frm : Form; Win : Window); -- AKA pragma Inline (Set_Window); -- ANCHOR(`form_win()',`Get_Window') function Get_Window (Frm : Form) return Window; -- AKA pragma Inline (Get_Window); -- ANCHOR(`set_form_sub()',`Set_Sub_Window') procedure Set_Sub_Window (Frm : Form; Win : Window); -- AKA pragma Inline (Set_Sub_Window); -- ANCHOR(`form_sub()',`Get_Sub_Window') function Get_Sub_Window (Frm : Form) return Window; -- AKA pragma Inline (Get_Sub_Window); -- ANCHOR(`scale_form()',`Scale') procedure Scale (Frm : Form; Lines : out Line_Count; Columns : out Column_Count); -- AKA pragma Inline (Scale); -- MANPAGE(`form_hook.3x') type Form_Hook_Function is access procedure (Frm : Form); pragma Convention (C, Form_Hook_Function); -- ANCHOR(`set_field_init()',`Set_Field_Init_Hook') procedure Set_Field_Init_Hook (Frm : Form; Proc : Form_Hook_Function); -- AKA pragma Inline (Set_Field_Init_Hook); -- ANCHOR(`set_field_term()',`Set_Field_Term_Hook') procedure Set_Field_Term_Hook (Frm : Form; Proc : Form_Hook_Function); -- AKA pragma Inline (Set_Field_Term_Hook); -- ANCHOR(`set_form_init()',`Set_Form_Init_Hook') procedure Set_Form_Init_Hook (Frm : Form; Proc : Form_Hook_Function); -- AKA pragma Inline (Set_Form_Init_Hook); -- ANCHOR(`set_form_term()',`Set_Form_Term_Hook') procedure Set_Form_Term_Hook (Frm : Form; Proc : Form_Hook_Function); -- AKA pragma Inline (Set_Form_Term_Hook); -- ANCHOR(`field_init()',`Get_Field_Init_Hook') function Get_Field_Init_Hook (Frm : Form) return Form_Hook_Function; -- AKA pragma Import (C, Get_Field_Init_Hook, "field_init"); -- ANCHOR(`field_term()',`Get_Field_Term_Hook') function Get_Field_Term_Hook (Frm : Form) return Form_Hook_Function; -- AKA pragma Import (C, Get_Field_Term_Hook, "field_term"); -- ANCHOR(`form_init()',`Get_Form_Init_Hook') function Get_Form_Init_Hook (Frm : Form) return Form_Hook_Function; -- AKA pragma Import (C, Get_Form_Init_Hook, "form_init"); -- ANCHOR(`form_term()',`Get_Form_Term_Hook') function Get_Form_Term_Hook (Frm : Form) return Form_Hook_Function; -- AKA pragma Import (C, Get_Form_Term_Hook, "form_term"); -- MANPAGE(`form_field.3x') -- ANCHOR(`set_form_fields()',`Redefine') procedure Redefine (Frm : Form; Flds : Field_Array_Access); -- AKA pragma Inline (Redefine); -- ANCHOR(`set_form_fields()',`Set_Fields') procedure Set_Fields (Frm : Form; Flds : Field_Array_Access) renames Redefine; -- AKA -- pragma Inline (Set_Fields); -- ANCHOR(`form_fields()',`Fields') function Fields (Frm : Form; Index : Positive) return Field; -- AKA pragma Inline (Fields); -- ANCHOR(`field_count()',`Field_Count') function Field_Count (Frm : Form) return Natural; -- AKA pragma Inline (Field_Count); -- ANCHOR(`move_field()',`Move') procedure Move (Fld : Field; Line : Line_Position; Column : Column_Position); -- AKA pragma Inline (Move); -- MANPAGE(`form_new.3x') -- ANCHOR(`new_form()',`Create') function Create (Fields : Field_Array_Access) return Form; -- AKA pragma Inline (Create); -- ANCHOR(`new_form()',`New_Form') function New_Form (Fields : Field_Array_Access) return Form renames Create; -- AKA -- pragma Inline (New_Form); -- ANCHOR(`free_form()',`Delete') procedure Delete (Frm : in out Form); -- AKA -- Reset Frm to Null_Form pragma Inline (Delete); -- MANPAGE(`form_opts.3x') -- ANCHOR(`set_form_opts()',`Set_Options') procedure Set_Options (Frm : Form; Options : Form_Option_Set); -- AKA pragma Inline (Set_Options); -- ANCHOR(`form_opts_on()',`Switch_Options') procedure Switch_Options (Frm : Form; Options : Form_Option_Set; On : Boolean := True); -- AKA -- ALIAS(`form_opts_off()') pragma Inline (Switch_Options); -- ANCHOR(`form_opts()',`Get_Options') procedure Get_Options (Frm : Form; Options : out Form_Option_Set); -- AKA -- ANCHOR(`form_opts()',`Get_Options') function Get_Options (Frm : Form := Null_Form) return Form_Option_Set; -- AKA pragma Inline (Get_Options); -- MANPAGE(`form_post.3x') -- ANCHOR(`post_form()',`Post') procedure Post (Frm : Form; Post : Boolean := True); -- AKA -- ALIAS(`unpost_form()') pragma Inline (Post); -- MANPAGE(`form_cursor.3x') -- ANCHOR(`pos_form_cursor()',`Position_Cursor') procedure Position_Cursor (Frm : Form); -- AKA pragma Inline (Position_Cursor); -- MANPAGE(`form_data.3x') -- ANCHOR(`data_ahead()',`Data_Ahead') function Data_Ahead (Frm : Form) return Boolean; -- AKA pragma Inline (Data_Ahead); -- ANCHOR(`data_behind()',`Data_Behind') function Data_Behind (Frm : Form) return Boolean; -- AKA pragma Inline (Data_Behind); -- MANPAGE(`form_driver.3x') type Driver_Result is (Form_Ok, Request_Denied, Unknown_Request, Invalid_Field); -- ANCHOR(`form_driver()',`Driver') function Driver (Frm : Form; Key : Key_Code) return Driver_Result; -- AKA -- Driver not inlined -- MANPAGE(`form_page.3x') type Page_Number is new Natural; -- ANCHOR(`set_current_field()',`Set_Current') procedure Set_Current (Frm : Form; Fld : Field); -- AKA pragma Inline (Set_Current); -- ANCHOR(`current_field()',`Current') function Current (Frm : Form) return Field; -- AKA pragma Inline (Current); -- ANCHOR(`set_form_page()',`Set_Page') procedure Set_Page (Frm : Form; Page : Page_Number := Page_Number'First); -- AKA pragma Inline (Set_Page); -- ANCHOR(`form_page()',`Page') function Page (Frm : Form) return Page_Number; -- AKA pragma Inline (Page); -- ANCHOR(`field_index()',`Get_Index') function Get_Index (Fld : Field) return Positive; -- AKA -- Please note that in this binding we start the numbering of fields -- with 1. So this is number is one more than you get from the low -- level call. pragma Inline (Get_Index); -- MANPAGE(`form_new_page.3x') -- ANCHOR(`set_new_page()',`Set_New_Page') procedure Set_New_Page (Fld : Field; New_Page : Boolean := True); -- AKA pragma Inline (Set_New_Page); -- ANCHOR(`new_page()',`Is_New_Page') function Is_New_Page (Fld : Field) return Boolean; -- AKA pragma Inline (Is_New_Page); -- MANPAGE(`form_requestname.3x') -- Not Implemented: form_request_name, form_request_by_name ------------------------------------------------------------------------------ private type Field is new System.Storage_Elements.Integer_Address; type Form is new System.Storage_Elements.Integer_Address; Null_Field : constant Field := 0; Null_Form : constant Form := 0; end Terminal_Interface.Curses.Forms; ncurses-6.0-20160213/Ada95/gen/table.m40000644000175100001440000000464710422534534015436 0ustar tomusersdnl*************************************************************************** dnl Copyright (c) 2000,2006 Free Software Foundation, Inc. * dnl * dnl Permission is hereby granted, free of charge, to any person obtaining a * dnl copy of this software and associated documentation files (the * dnl "Software"), to deal in the Software without restriction, including * dnl without limitation the rights to use, copy, modify, merge, publish, * dnl distribute, distribute with modifications, sublicense, and/or sell * dnl copies of the Software, and to permit persons to whom the Software is * dnl furnished to do so, subject to the following conditions: * dnl * dnl The above copyright notice and this permission notice shall be included * dnl in all copies or substantial portions of the Software. * dnl * dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. * dnl * dnl Except as contained in this notice, the name(s) of the above copyright * dnl holders shall not be used in advertising or otherwise to promote the * dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl dnl $Id: table.m4,v 1.2 2006/04/22 23:16:44 tom Exp $ define(`ANCHORIDX',`0')dnl define(`MANPAGE',`define(`MANPG',$1)')dnl divert(-1)dnl define(`ANCHOR',`divert(0)define(`ANCHORIDX',incr(ANCHORIDX))dnl $1$2MANPG divert(-1)') ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses.adb.m40000644000175100001440000024264612340207631022230 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses__adb.htm')dnl include(M4MACRO)------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses -- -- -- -- B O D Y -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.14 $ -- $Date: 2014/05/24 21:31:05 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System; with Terminal_Interface.Curses.Aux; with Interfaces.C; use Interfaces.C; with Interfaces.C.Strings; use Interfaces.C.Strings; with Ada.Characters.Handling; use Ada.Characters.Handling; with Ada.Strings.Fixed; package body Terminal_Interface.Curses is use Aux; use type System.Bit_Order; package ASF renames Ada.Strings.Fixed; type chtype_array is array (size_t range <>) of aliased Attributed_Character; pragma Convention (C, chtype_array); ------------------------------------------------------------------------------ function Key_Name (Key : Real_Key_Code) return String is function Keyname (K : C_Int) return chars_ptr; pragma Import (C, Keyname, "keyname"); Ch : Character; begin if Key <= Character'Pos (Character'Last) then Ch := Character'Val (Key); if Is_Control (Ch) then return Un_Control (Attributed_Character'(Ch => Ch, Color => Color_Pair'First, Attr => Normal_Video)); elsif Is_Graphic (Ch) then declare S : String (1 .. 1); begin S (1) := Ch; return S; end; else return ""; end if; else return Fill_String (Keyname (C_Int (Key))); end if; end Key_Name; procedure Key_Name (Key : Real_Key_Code; Name : out String) is begin ASF.Move (Key_Name (Key), Name); end Key_Name; ------------------------------------------------------------------------------ procedure Init_Screen is function Initscr return Window; pragma Import (C, Initscr, "initscr"); W : Window; begin W := Initscr; if W = Null_Window then raise Curses_Exception; end if; end Init_Screen; procedure End_Windows is function Endwin return C_Int; pragma Import (C, Endwin, "endwin"); begin if Endwin = Curses_Err then raise Curses_Exception; end if; end End_Windows; function Is_End_Window return Boolean is function Isendwin return Curses_Bool; pragma Import (C, Isendwin, "isendwin"); begin if Isendwin = Curses_Bool_False then return False; else return True; end if; end Is_End_Window; ------------------------------------------------------------------------------ procedure Move_Cursor (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position) is function Wmove (Win : Window; Line : C_Int; Column : C_Int ) return C_Int; pragma Import (C, Wmove, "wmove"); begin if Wmove (Win, C_Int (Line), C_Int (Column)) = Curses_Err then raise Curses_Exception; end if; end Move_Cursor; ------------------------------------------------------------------------------ procedure Add (Win : Window := Standard_Window; Ch : Attributed_Character) is function Waddch (W : Window; Ch : Attributed_Character) return C_Int; pragma Import (C, Waddch, "waddch"); begin if Waddch (Win, Ch) = Curses_Err then raise Curses_Exception; end if; end Add; procedure Add (Win : Window := Standard_Window; Ch : Character) is begin Add (Win, Attributed_Character'(Ch => Ch, Color => Color_Pair'First, Attr => Normal_Video)); end Add; procedure Add (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Ch : Attributed_Character) is function mvwaddch (W : Window; Y : C_Int; X : C_Int; Ch : Attributed_Character) return C_Int; pragma Import (C, mvwaddch, "mvwaddch"); begin if mvwaddch (Win, C_Int (Line), C_Int (Column), Ch) = Curses_Err then raise Curses_Exception; end if; end Add; procedure Add (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Ch : Character) is begin Add (Win, Line, Column, Attributed_Character'(Ch => Ch, Color => Color_Pair'First, Attr => Normal_Video)); end Add; procedure Add_With_Immediate_Echo (Win : Window := Standard_Window; Ch : Attributed_Character) is function Wechochar (W : Window; Ch : Attributed_Character) return C_Int; pragma Import (C, Wechochar, "wechochar"); begin if Wechochar (Win, Ch) = Curses_Err then raise Curses_Exception; end if; end Add_With_Immediate_Echo; procedure Add_With_Immediate_Echo (Win : Window := Standard_Window; Ch : Character) is begin Add_With_Immediate_Echo (Win, Attributed_Character'(Ch => Ch, Color => Color_Pair'First, Attr => Normal_Video)); end Add_With_Immediate_Echo; ------------------------------------------------------------------------------ function Create (Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count; First_Line_Position : Line_Position; First_Column_Position : Column_Position) return Window is function Newwin (Number_Of_Lines : C_Int; Number_Of_Columns : C_Int; First_Line_Position : C_Int; First_Column_Position : C_Int) return Window; pragma Import (C, Newwin, "newwin"); W : Window; begin W := Newwin (C_Int (Number_Of_Lines), C_Int (Number_Of_Columns), C_Int (First_Line_Position), C_Int (First_Column_Position)); if W = Null_Window then raise Curses_Exception; end if; return W; end Create; procedure Delete (Win : in out Window) is function Wdelwin (W : Window) return C_Int; pragma Import (C, Wdelwin, "delwin"); begin if Wdelwin (Win) = Curses_Err then raise Curses_Exception; end if; Win := Null_Window; end Delete; function Sub_Window (Win : Window := Standard_Window; Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count; First_Line_Position : Line_Position; First_Column_Position : Column_Position) return Window is function Subwin (Win : Window; Number_Of_Lines : C_Int; Number_Of_Columns : C_Int; First_Line_Position : C_Int; First_Column_Position : C_Int) return Window; pragma Import (C, Subwin, "subwin"); W : Window; begin W := Subwin (Win, C_Int (Number_Of_Lines), C_Int (Number_Of_Columns), C_Int (First_Line_Position), C_Int (First_Column_Position)); if W = Null_Window then raise Curses_Exception; end if; return W; end Sub_Window; function Derived_Window (Win : Window := Standard_Window; Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count; First_Line_Position : Line_Position; First_Column_Position : Column_Position) return Window is function Derwin (Win : Window; Number_Of_Lines : C_Int; Number_Of_Columns : C_Int; First_Line_Position : C_Int; First_Column_Position : C_Int) return Window; pragma Import (C, Derwin, "derwin"); W : Window; begin W := Derwin (Win, C_Int (Number_Of_Lines), C_Int (Number_Of_Columns), C_Int (First_Line_Position), C_Int (First_Column_Position)); if W = Null_Window then raise Curses_Exception; end if; return W; end Derived_Window; function Duplicate (Win : Window) return Window is function Dupwin (Win : Window) return Window; pragma Import (C, Dupwin, "dupwin"); W : constant Window := Dupwin (Win); begin if W = Null_Window then raise Curses_Exception; end if; return W; end Duplicate; procedure Move_Window (Win : Window; Line : Line_Position; Column : Column_Position) is function Mvwin (Win : Window; Line : C_Int; Column : C_Int) return C_Int; pragma Import (C, Mvwin, "mvwin"); begin if Mvwin (Win, C_Int (Line), C_Int (Column)) = Curses_Err then raise Curses_Exception; end if; end Move_Window; procedure Move_Derived_Window (Win : Window; Line : Line_Position; Column : Column_Position) is function Mvderwin (Win : Window; Line : C_Int; Column : C_Int) return C_Int; pragma Import (C, Mvderwin, "mvderwin"); begin if Mvderwin (Win, C_Int (Line), C_Int (Column)) = Curses_Err then raise Curses_Exception; end if; end Move_Derived_Window; procedure Set_Synch_Mode (Win : Window := Standard_Window; Mode : Boolean := False) is function Syncok (Win : Window; Mode : Curses_Bool) return C_Int; pragma Import (C, Syncok, "syncok"); begin if Syncok (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then raise Curses_Exception; end if; end Set_Synch_Mode; ------------------------------------------------------------------------------ procedure Add (Win : Window := Standard_Window; Str : String; Len : Integer := -1) is function Waddnstr (Win : Window; Str : char_array; Len : C_Int := -1) return C_Int; pragma Import (C, Waddnstr, "waddnstr"); Txt : char_array (0 .. Str'Length); Length : size_t; begin To_C (Str, Txt, Length); if Waddnstr (Win, Txt, C_Int (Len)) = Curses_Err then raise Curses_Exception; end if; end Add; procedure Add (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : String; Len : Integer := -1) is begin Move_Cursor (Win, Line, Column); Add (Win, Str, Len); end Add; ------------------------------------------------------------------------------ procedure Add (Win : Window := Standard_Window; Str : Attributed_String; Len : Integer := -1) is function Waddchnstr (Win : Window; Str : chtype_array; Len : C_Int := -1) return C_Int; pragma Import (C, Waddchnstr, "waddchnstr"); Txt : chtype_array (0 .. Str'Length); begin for Length in 1 .. size_t (Str'Length) loop Txt (Length - 1) := Str (Natural (Length)); end loop; Txt (Str'Length) := Default_Character; if Waddchnstr (Win, Txt, C_Int (Len)) = Curses_Err then raise Curses_Exception; end if; end Add; procedure Add (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : Attributed_String; Len : Integer := -1) is begin Move_Cursor (Win, Line, Column); Add (Win, Str, Len); end Add; ------------------------------------------------------------------------------ procedure Border (Win : Window := Standard_Window; Left_Side_Symbol : Attributed_Character := Default_Character; Right_Side_Symbol : Attributed_Character := Default_Character; Top_Side_Symbol : Attributed_Character := Default_Character; Bottom_Side_Symbol : Attributed_Character := Default_Character; Upper_Left_Corner_Symbol : Attributed_Character := Default_Character; Upper_Right_Corner_Symbol : Attributed_Character := Default_Character; Lower_Left_Corner_Symbol : Attributed_Character := Default_Character; Lower_Right_Corner_Symbol : Attributed_Character := Default_Character) is function Wborder (W : Window; LS : Attributed_Character; RS : Attributed_Character; TS : Attributed_Character; BS : Attributed_Character; ULC : Attributed_Character; URC : Attributed_Character; LLC : Attributed_Character; LRC : Attributed_Character) return C_Int; pragma Import (C, Wborder, "wborder"); begin if Wborder (Win, Left_Side_Symbol, Right_Side_Symbol, Top_Side_Symbol, Bottom_Side_Symbol, Upper_Left_Corner_Symbol, Upper_Right_Corner_Symbol, Lower_Left_Corner_Symbol, Lower_Right_Corner_Symbol) = Curses_Err then raise Curses_Exception; end if; end Border; procedure Box (Win : Window := Standard_Window; Vertical_Symbol : Attributed_Character := Default_Character; Horizontal_Symbol : Attributed_Character := Default_Character) is begin Border (Win, Vertical_Symbol, Vertical_Symbol, Horizontal_Symbol, Horizontal_Symbol); end Box; procedure Horizontal_Line (Win : Window := Standard_Window; Line_Size : Natural; Line_Symbol : Attributed_Character := Default_Character) is function Whline (W : Window; Ch : Attributed_Character; Len : C_Int) return C_Int; pragma Import (C, Whline, "whline"); begin if Whline (Win, Line_Symbol, C_Int (Line_Size)) = Curses_Err then raise Curses_Exception; end if; end Horizontal_Line; procedure Vertical_Line (Win : Window := Standard_Window; Line_Size : Natural; Line_Symbol : Attributed_Character := Default_Character) is function Wvline (W : Window; Ch : Attributed_Character; Len : C_Int) return C_Int; pragma Import (C, Wvline, "wvline"); begin if Wvline (Win, Line_Symbol, C_Int (Line_Size)) = Curses_Err then raise Curses_Exception; end if; end Vertical_Line; ------------------------------------------------------------------------------ function Get_Keystroke (Win : Window := Standard_Window) return Real_Key_Code is function Wgetch (W : Window) return C_Int; pragma Import (C, Wgetch, "wgetch"); C : constant C_Int := Wgetch (Win); begin if C = Curses_Err then return Key_None; else return Real_Key_Code (C); end if; end Get_Keystroke; procedure Undo_Keystroke (Key : Real_Key_Code) is function Ungetch (Ch : C_Int) return C_Int; pragma Import (C, Ungetch, "ungetch"); begin if Ungetch (C_Int (Key)) = Curses_Err then raise Curses_Exception; end if; end Undo_Keystroke; function Has_Key (Key : Special_Key_Code) return Boolean is function Haskey (Key : C_Int) return C_Int; pragma Import (C, Haskey, "has_key"); begin if Haskey (C_Int (Key)) = Curses_False then return False; else return True; end if; end Has_Key; function Is_Function_Key (Key : Special_Key_Code) return Boolean is L : constant Special_Key_Code := Special_Key_Code (Natural (Key_F0) + Natural (Function_Key_Number'Last)); begin if (Key >= Key_F0) and then (Key <= L) then return True; else return False; end if; end Is_Function_Key; function Function_Key (Key : Real_Key_Code) return Function_Key_Number is begin if Is_Function_Key (Key) then return Function_Key_Number (Key - Key_F0); else raise Constraint_Error; end if; end Function_Key; function Function_Key_Code (Key : Function_Key_Number) return Real_Key_Code is begin return Real_Key_Code (Natural (Key_F0) + Natural (Key)); end Function_Key_Code; ------------------------------------------------------------------------------ procedure Standout (Win : Window := Standard_Window; On : Boolean := True) is function wstandout (Win : Window) return C_Int; pragma Import (C, wstandout, "wstandout"); function wstandend (Win : Window) return C_Int; pragma Import (C, wstandend, "wstandend"); Err : C_Int; begin if On then Err := wstandout (Win); else Err := wstandend (Win); end if; if Err = Curses_Err then raise Curses_Exception; end if; end Standout; procedure Switch_Character_Attribute (Win : Window := Standard_Window; Attr : Character_Attribute_Set := Normal_Video; On : Boolean := True) is function Wattron (Win : Window; C_Attr : Attributed_Character) return C_Int; pragma Import (C, Wattron, "wattr_on"); function Wattroff (Win : Window; C_Attr : Attributed_Character) return C_Int; pragma Import (C, Wattroff, "wattr_off"); -- In Ada we use the On Boolean to control whether or not we want to -- switch on or off the attributes in the set. Err : C_Int; AC : constant Attributed_Character := (Ch => Character'First, Color => Color_Pair'First, Attr => Attr); begin if On then Err := Wattron (Win, AC); else Err := Wattroff (Win, AC); end if; if Err = Curses_Err then raise Curses_Exception; end if; end Switch_Character_Attribute; procedure Set_Character_Attributes (Win : Window := Standard_Window; Attr : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First) is function Wattrset (Win : Window; C_Attr : Attributed_Character) return C_Int; pragma Import (C, Wattrset, "wattrset"); -- ??? wattr_set begin if Wattrset (Win, (Ch => Character'First, Color => Color, Attr => Attr)) = Curses_Err then raise Curses_Exception; end if; end Set_Character_Attributes; function Get_Character_Attribute (Win : Window := Standard_Window) return Character_Attribute_Set is function Wattrget (Win : Window; Atr : access Attributed_Character; Col : access C_Short; Opt : System.Address) return C_Int; pragma Import (C, Wattrget, "wattr_get"); Attr : aliased Attributed_Character; Col : aliased C_Short; Res : constant C_Int := Wattrget (Win, Attr'Access, Col'Access, System.Null_Address); begin if Res = Curses_Ok then return Attr.Attr; else raise Curses_Exception; end if; end Get_Character_Attribute; function Get_Character_Attribute (Win : Window := Standard_Window) return Color_Pair is function Wattrget (Win : Window; Atr : access Attributed_Character; Col : access C_Short; Opt : System.Address) return C_Int; pragma Import (C, Wattrget, "wattr_get"); Attr : aliased Attributed_Character; Col : aliased C_Short; Res : constant C_Int := Wattrget (Win, Attr'Access, Col'Access, System.Null_Address); begin if Res = Curses_Ok then return Attr.Color; else raise Curses_Exception; end if; end Get_Character_Attribute; procedure Set_Color (Win : Window := Standard_Window; Pair : Color_Pair) is function Wset_Color (Win : Window; Color : C_Short; Opts : C_Void_Ptr) return C_Int; pragma Import (C, Wset_Color, "wcolor_set"); begin if Wset_Color (Win, C_Short (Pair), C_Void_Ptr (System.Null_Address)) = Curses_Err then raise Curses_Exception; end if; end Set_Color; procedure Change_Attributes (Win : Window := Standard_Window; Count : Integer := -1; Attr : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First) is function Wchgat (Win : Window; Cnt : C_Int; Attr : Attributed_Character; Color : C_Short; Opts : System.Address := System.Null_Address) return C_Int; pragma Import (C, Wchgat, "wchgat"); begin if Wchgat (Win, C_Int (Count), (Ch => Character'First, Color => Color_Pair'First, Attr => Attr), C_Short (Color)) = Curses_Err then raise Curses_Exception; end if; end Change_Attributes; procedure Change_Attributes (Win : Window := Standard_Window; Line : Line_Position := Line_Position'First; Column : Column_Position := Column_Position'First; Count : Integer := -1; Attr : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First) is begin Move_Cursor (Win, Line, Column); Change_Attributes (Win, Count, Attr, Color); end Change_Attributes; ------------------------------------------------------------------------------ procedure Beep is function Beeper return C_Int; pragma Import (C, Beeper, "beep"); begin if Beeper = Curses_Err then raise Curses_Exception; end if; end Beep; procedure Flash_Screen is function Flash return C_Int; pragma Import (C, Flash, "flash"); begin if Flash = Curses_Err then raise Curses_Exception; end if; end Flash_Screen; ------------------------------------------------------------------------------ procedure Set_Cbreak_Mode (SwitchOn : Boolean := True) is function Cbreak return C_Int; pragma Import (C, Cbreak, "cbreak"); function NoCbreak return C_Int; pragma Import (C, NoCbreak, "nocbreak"); Err : C_Int; begin if SwitchOn then Err := Cbreak; else Err := NoCbreak; end if; if Err = Curses_Err then raise Curses_Exception; end if; end Set_Cbreak_Mode; procedure Set_Raw_Mode (SwitchOn : Boolean := True) is function Raw return C_Int; pragma Import (C, Raw, "raw"); function NoRaw return C_Int; pragma Import (C, NoRaw, "noraw"); Err : C_Int; begin if SwitchOn then Err := Raw; else Err := NoRaw; end if; if Err = Curses_Err then raise Curses_Exception; end if; end Set_Raw_Mode; procedure Set_Echo_Mode (SwitchOn : Boolean := True) is function Echo return C_Int; pragma Import (C, Echo, "echo"); function NoEcho return C_Int; pragma Import (C, NoEcho, "noecho"); Err : C_Int; begin if SwitchOn then Err := Echo; else Err := NoEcho; end if; if Err = Curses_Err then raise Curses_Exception; end if; end Set_Echo_Mode; procedure Set_Meta_Mode (Win : Window := Standard_Window; SwitchOn : Boolean := True) is function Meta (W : Window; Mode : Curses_Bool) return C_Int; pragma Import (C, Meta, "meta"); begin if Meta (Win, Curses_Bool (Boolean'Pos (SwitchOn))) = Curses_Err then raise Curses_Exception; end if; end Set_Meta_Mode; procedure Set_KeyPad_Mode (Win : Window := Standard_Window; SwitchOn : Boolean := True) is function Keypad (W : Window; Mode : Curses_Bool) return C_Int; pragma Import (C, Keypad, "keypad"); begin if Keypad (Win, Curses_Bool (Boolean'Pos (SwitchOn))) = Curses_Err then raise Curses_Exception; end if; end Set_KeyPad_Mode; function Get_KeyPad_Mode (Win : Window := Standard_Window) return Boolean is function Is_Keypad (W : Window) return Curses_Bool; pragma Import (C, Is_Keypad, "is_keypad"); begin return (Is_Keypad (Win) /= Curses_Bool_False); end Get_KeyPad_Mode; procedure Half_Delay (Amount : Half_Delay_Amount) is function Halfdelay (Amount : C_Int) return C_Int; pragma Import (C, Halfdelay, "halfdelay"); begin if Halfdelay (C_Int (Amount)) = Curses_Err then raise Curses_Exception; end if; end Half_Delay; procedure Set_Flush_On_Interrupt_Mode (Win : Window := Standard_Window; Mode : Boolean := True) is function Intrflush (Win : Window; Mode : Curses_Bool) return C_Int; pragma Import (C, Intrflush, "intrflush"); begin if Intrflush (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then raise Curses_Exception; end if; end Set_Flush_On_Interrupt_Mode; procedure Set_Queue_Interrupt_Mode (Win : Window := Standard_Window; Flush : Boolean := True) is procedure Qiflush; pragma Import (C, Qiflush, "qiflush"); procedure No_Qiflush; pragma Import (C, No_Qiflush, "noqiflush"); begin if Win = Null_Window then raise Curses_Exception; end if; if Flush then Qiflush; else No_Qiflush; end if; end Set_Queue_Interrupt_Mode; procedure Set_NoDelay_Mode (Win : Window := Standard_Window; Mode : Boolean := False) is function Nodelay (Win : Window; Mode : Curses_Bool) return C_Int; pragma Import (C, Nodelay, "nodelay"); begin if Nodelay (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then raise Curses_Exception; end if; end Set_NoDelay_Mode; procedure Set_Timeout_Mode (Win : Window := Standard_Window; Mode : Timeout_Mode; Amount : Natural) is procedure Wtimeout (Win : Window; Amount : C_Int); pragma Import (C, Wtimeout, "wtimeout"); Time : C_Int; begin case Mode is when Blocking => Time := -1; when Non_Blocking => Time := 0; when Delayed => if Amount = 0 then raise Constraint_Error; end if; Time := C_Int (Amount); end case; Wtimeout (Win, Time); end Set_Timeout_Mode; procedure Set_Escape_Timer_Mode (Win : Window := Standard_Window; Timer_Off : Boolean := False) is function Notimeout (Win : Window; Mode : Curses_Bool) return C_Int; pragma Import (C, Notimeout, "notimeout"); begin if Notimeout (Win, Curses_Bool (Boolean'Pos (Timer_Off))) = Curses_Err then raise Curses_Exception; end if; end Set_Escape_Timer_Mode; ------------------------------------------------------------------------------ procedure Set_NL_Mode (SwitchOn : Boolean := True) is function NL return C_Int; pragma Import (C, NL, "nl"); function NoNL return C_Int; pragma Import (C, NoNL, "nonl"); Err : C_Int; begin if SwitchOn then Err := NL; else Err := NoNL; end if; if Err = Curses_Err then raise Curses_Exception; end if; end Set_NL_Mode; procedure Clear_On_Next_Update (Win : Window := Standard_Window; Do_Clear : Boolean := True) is function Clear_Ok (W : Window; Flag : Curses_Bool) return C_Int; pragma Import (C, Clear_Ok, "clearok"); begin if Clear_Ok (Win, Curses_Bool (Boolean'Pos (Do_Clear))) = Curses_Err then raise Curses_Exception; end if; end Clear_On_Next_Update; procedure Use_Insert_Delete_Line (Win : Window := Standard_Window; Do_Idl : Boolean := True) is function IDL_Ok (W : Window; Flag : Curses_Bool) return C_Int; pragma Import (C, IDL_Ok, "idlok"); begin if IDL_Ok (Win, Curses_Bool (Boolean'Pos (Do_Idl))) = Curses_Err then raise Curses_Exception; end if; end Use_Insert_Delete_Line; procedure Use_Insert_Delete_Character (Win : Window := Standard_Window; Do_Idc : Boolean := True) is procedure IDC_Ok (W : Window; Flag : Curses_Bool); pragma Import (C, IDC_Ok, "idcok"); begin IDC_Ok (Win, Curses_Bool (Boolean'Pos (Do_Idc))); end Use_Insert_Delete_Character; procedure Leave_Cursor_After_Update (Win : Window := Standard_Window; Do_Leave : Boolean := True) is function Leave_Ok (W : Window; Flag : Curses_Bool) return C_Int; pragma Import (C, Leave_Ok, "leaveok"); begin if Leave_Ok (Win, Curses_Bool (Boolean'Pos (Do_Leave))) = Curses_Err then raise Curses_Exception; end if; end Leave_Cursor_After_Update; procedure Immediate_Update_Mode (Win : Window := Standard_Window; Mode : Boolean := False) is procedure Immedok (Win : Window; Mode : Curses_Bool); pragma Import (C, Immedok, "immedok"); begin Immedok (Win, Curses_Bool (Boolean'Pos (Mode))); end Immediate_Update_Mode; procedure Allow_Scrolling (Win : Window := Standard_Window; Mode : Boolean := False) is function Scrollok (Win : Window; Mode : Curses_Bool) return C_Int; pragma Import (C, Scrollok, "scrollok"); begin if Scrollok (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then raise Curses_Exception; end if; end Allow_Scrolling; function Scrolling_Allowed (Win : Window := Standard_Window) return Boolean is function Is_Scroll_Ok (W : Window) return Curses_Bool; pragma Import (C, Is_Scroll_Ok, "is_scrollok"); begin return (Is_Scroll_Ok (Win) /= Curses_Bool_False); end Scrolling_Allowed; procedure Set_Scroll_Region (Win : Window := Standard_Window; Top_Line : Line_Position; Bottom_Line : Line_Position) is function Wsetscrreg (Win : Window; Lin : C_Int; Col : C_Int) return C_Int; pragma Import (C, Wsetscrreg, "wsetscrreg"); begin if Wsetscrreg (Win, C_Int (Top_Line), C_Int (Bottom_Line)) = Curses_Err then raise Curses_Exception; end if; end Set_Scroll_Region; ------------------------------------------------------------------------------ procedure Update_Screen is function Do_Update return C_Int; pragma Import (C, Do_Update, "doupdate"); begin if Do_Update = Curses_Err then raise Curses_Exception; end if; end Update_Screen; procedure Refresh (Win : Window := Standard_Window) is function Wrefresh (W : Window) return C_Int; pragma Import (C, Wrefresh, "wrefresh"); begin if Wrefresh (Win) = Curses_Err then raise Curses_Exception; end if; end Refresh; procedure Refresh_Without_Update (Win : Window := Standard_Window) is function Wnoutrefresh (W : Window) return C_Int; pragma Import (C, Wnoutrefresh, "wnoutrefresh"); begin if Wnoutrefresh (Win) = Curses_Err then raise Curses_Exception; end if; end Refresh_Without_Update; procedure Redraw (Win : Window := Standard_Window) is function Redrawwin (Win : Window) return C_Int; pragma Import (C, Redrawwin, "redrawwin"); begin if Redrawwin (Win) = Curses_Err then raise Curses_Exception; end if; end Redraw; procedure Redraw (Win : Window := Standard_Window; Begin_Line : Line_Position; Line_Count : Positive) is function Wredrawln (Win : Window; First : C_Int; Cnt : C_Int) return C_Int; pragma Import (C, Wredrawln, "wredrawln"); begin if Wredrawln (Win, C_Int (Begin_Line), C_Int (Line_Count)) = Curses_Err then raise Curses_Exception; end if; end Redraw; ------------------------------------------------------------------------------ procedure Erase (Win : Window := Standard_Window) is function Werase (W : Window) return C_Int; pragma Import (C, Werase, "werase"); begin if Werase (Win) = Curses_Err then raise Curses_Exception; end if; end Erase; procedure Clear (Win : Window := Standard_Window) is function Wclear (W : Window) return C_Int; pragma Import (C, Wclear, "wclear"); begin if Wclear (Win) = Curses_Err then raise Curses_Exception; end if; end Clear; procedure Clear_To_End_Of_Screen (Win : Window := Standard_Window) is function Wclearbot (W : Window) return C_Int; pragma Import (C, Wclearbot, "wclrtobot"); begin if Wclearbot (Win) = Curses_Err then raise Curses_Exception; end if; end Clear_To_End_Of_Screen; procedure Clear_To_End_Of_Line (Win : Window := Standard_Window) is function Wcleareol (W : Window) return C_Int; pragma Import (C, Wcleareol, "wclrtoeol"); begin if Wcleareol (Win) = Curses_Err then raise Curses_Exception; end if; end Clear_To_End_Of_Line; ------------------------------------------------------------------------------ procedure Set_Background (Win : Window := Standard_Window; Ch : Attributed_Character) is procedure WBackground (W : Window; Ch : Attributed_Character); pragma Import (C, WBackground, "wbkgdset"); begin WBackground (Win, Ch); end Set_Background; procedure Change_Background (Win : Window := Standard_Window; Ch : Attributed_Character) is function WChangeBkgd (W : Window; Ch : Attributed_Character) return C_Int; pragma Import (C, WChangeBkgd, "wbkgd"); begin if WChangeBkgd (Win, Ch) = Curses_Err then raise Curses_Exception; end if; end Change_Background; function Get_Background (Win : Window := Standard_Window) return Attributed_Character is function Wgetbkgd (Win : Window) return Attributed_Character; pragma Import (C, Wgetbkgd, "getbkgd"); begin return Wgetbkgd (Win); end Get_Background; ------------------------------------------------------------------------------ procedure Change_Lines_Status (Win : Window := Standard_Window; Start : Line_Position; Count : Positive; State : Boolean) is function Wtouchln (Win : Window; Sta : C_Int; Cnt : C_Int; Chg : C_Int) return C_Int; pragma Import (C, Wtouchln, "wtouchln"); begin if Wtouchln (Win, C_Int (Start), C_Int (Count), C_Int (Boolean'Pos (State))) = Curses_Err then raise Curses_Exception; end if; end Change_Lines_Status; procedure Touch (Win : Window := Standard_Window) is Y : Line_Position; X : Column_Position; begin Get_Size (Win, Y, X); pragma Warnings (Off, X); -- unreferenced Change_Lines_Status (Win, 0, Positive (Y), True); end Touch; procedure Untouch (Win : Window := Standard_Window) is Y : Line_Position; X : Column_Position; begin Get_Size (Win, Y, X); pragma Warnings (Off, X); -- unreferenced Change_Lines_Status (Win, 0, Positive (Y), False); end Untouch; procedure Touch (Win : Window := Standard_Window; Start : Line_Position; Count : Positive) is begin Change_Lines_Status (Win, Start, Count, True); end Touch; function Is_Touched (Win : Window := Standard_Window; Line : Line_Position) return Boolean is function WLineTouched (W : Window; L : C_Int) return Curses_Bool; pragma Import (C, WLineTouched, "is_linetouched"); begin if WLineTouched (Win, C_Int (Line)) = Curses_Bool_False then return False; else return True; end if; end Is_Touched; function Is_Touched (Win : Window := Standard_Window) return Boolean is function WWinTouched (W : Window) return Curses_Bool; pragma Import (C, WWinTouched, "is_wintouched"); begin if WWinTouched (Win) = Curses_Bool_False then return False; else return True; end if; end Is_Touched; ------------------------------------------------------------------------------ procedure Copy (Source_Window : Window; Destination_Window : Window; Source_Top_Row : Line_Position; Source_Left_Column : Column_Position; Destination_Top_Row : Line_Position; Destination_Left_Column : Column_Position; Destination_Bottom_Row : Line_Position; Destination_Right_Column : Column_Position; Non_Destructive_Mode : Boolean := True) is function Copywin (Src : Window; Dst : Window; Str : C_Int; Slc : C_Int; Dtr : C_Int; Dlc : C_Int; Dbr : C_Int; Drc : C_Int; Ndm : C_Int) return C_Int; pragma Import (C, Copywin, "copywin"); begin if Copywin (Source_Window, Destination_Window, C_Int (Source_Top_Row), C_Int (Source_Left_Column), C_Int (Destination_Top_Row), C_Int (Destination_Left_Column), C_Int (Destination_Bottom_Row), C_Int (Destination_Right_Column), Boolean'Pos (Non_Destructive_Mode) ) = Curses_Err then raise Curses_Exception; end if; end Copy; procedure Overwrite (Source_Window : Window; Destination_Window : Window) is function Overwrite (Src : Window; Dst : Window) return C_Int; pragma Import (C, Overwrite, "overwrite"); begin if Overwrite (Source_Window, Destination_Window) = Curses_Err then raise Curses_Exception; end if; end Overwrite; procedure Overlay (Source_Window : Window; Destination_Window : Window) is function Overlay (Src : Window; Dst : Window) return C_Int; pragma Import (C, Overlay, "overlay"); begin if Overlay (Source_Window, Destination_Window) = Curses_Err then raise Curses_Exception; end if; end Overlay; ------------------------------------------------------------------------------ procedure Insert_Delete_Lines (Win : Window := Standard_Window; Lines : Integer := 1) -- default is to insert one line above is function Winsdelln (W : Window; N : C_Int) return C_Int; pragma Import (C, Winsdelln, "winsdelln"); begin if Winsdelln (Win, C_Int (Lines)) = Curses_Err then raise Curses_Exception; end if; end Insert_Delete_Lines; procedure Delete_Line (Win : Window := Standard_Window) is begin Insert_Delete_Lines (Win, -1); end Delete_Line; procedure Insert_Line (Win : Window := Standard_Window) is begin Insert_Delete_Lines (Win, 1); end Insert_Line; ------------------------------------------------------------------------------ procedure Get_Size (Win : Window := Standard_Window; Number_Of_Lines : out Line_Count; Number_Of_Columns : out Column_Count) is function GetMaxY (W : Window) return C_Int; pragma Import (C, GetMaxY, "getmaxy"); function GetMaxX (W : Window) return C_Int; pragma Import (C, GetMaxX, "getmaxx"); Y : constant C_Int := GetMaxY (Win); X : constant C_Int := GetMaxX (Win); begin Number_Of_Lines := Line_Count (Y); Number_Of_Columns := Column_Count (X); end Get_Size; procedure Get_Window_Position (Win : Window := Standard_Window; Top_Left_Line : out Line_Position; Top_Left_Column : out Column_Position) is function GetBegY (W : Window) return C_Int; pragma Import (C, GetBegY, "getbegy"); function GetBegX (W : Window) return C_Int; pragma Import (C, GetBegX, "getbegx"); Y : constant C_Short := C_Short (GetBegY (Win)); X : constant C_Short := C_Short (GetBegX (Win)); begin Top_Left_Line := Line_Position (Y); Top_Left_Column := Column_Position (X); end Get_Window_Position; procedure Get_Cursor_Position (Win : Window := Standard_Window; Line : out Line_Position; Column : out Column_Position) is function GetCurY (W : Window) return C_Int; pragma Import (C, GetCurY, "getcury"); function GetCurX (W : Window) return C_Int; pragma Import (C, GetCurX, "getcurx"); Y : constant C_Short := C_Short (GetCurY (Win)); X : constant C_Short := C_Short (GetCurX (Win)); begin Line := Line_Position (Y); Column := Column_Position (X); end Get_Cursor_Position; procedure Get_Origin_Relative_To_Parent (Win : Window; Top_Left_Line : out Line_Position; Top_Left_Column : out Column_Position; Is_Not_A_Subwindow : out Boolean) is function GetParY (W : Window) return C_Int; pragma Import (C, GetParY, "getpary"); function GetParX (W : Window) return C_Int; pragma Import (C, GetParX, "getparx"); Y : constant C_Int := GetParY (Win); X : constant C_Int := GetParX (Win); begin if Y = -1 then Top_Left_Line := Line_Position'Last; Top_Left_Column := Column_Position'Last; Is_Not_A_Subwindow := True; else Top_Left_Line := Line_Position (Y); Top_Left_Column := Column_Position (X); Is_Not_A_Subwindow := False; end if; end Get_Origin_Relative_To_Parent; ------------------------------------------------------------------------------ function New_Pad (Lines : Line_Count; Columns : Column_Count) return Window is function Newpad (Lines : C_Int; Columns : C_Int) return Window; pragma Import (C, Newpad, "newpad"); W : Window; begin W := Newpad (C_Int (Lines), C_Int (Columns)); if W = Null_Window then raise Curses_Exception; end if; return W; end New_Pad; function Sub_Pad (Pad : Window; Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count; First_Line_Position : Line_Position; First_Column_Position : Column_Position) return Window is function Subpad (Pad : Window; Number_Of_Lines : C_Int; Number_Of_Columns : C_Int; First_Line_Position : C_Int; First_Column_Position : C_Int) return Window; pragma Import (C, Subpad, "subpad"); W : Window; begin W := Subpad (Pad, C_Int (Number_Of_Lines), C_Int (Number_Of_Columns), C_Int (First_Line_Position), C_Int (First_Column_Position)); if W = Null_Window then raise Curses_Exception; end if; return W; end Sub_Pad; procedure Refresh (Pad : Window; Source_Top_Row : Line_Position; Source_Left_Column : Column_Position; Destination_Top_Row : Line_Position; Destination_Left_Column : Column_Position; Destination_Bottom_Row : Line_Position; Destination_Right_Column : Column_Position) is function Prefresh (Pad : Window; Source_Top_Row : C_Int; Source_Left_Column : C_Int; Destination_Top_Row : C_Int; Destination_Left_Column : C_Int; Destination_Bottom_Row : C_Int; Destination_Right_Column : C_Int) return C_Int; pragma Import (C, Prefresh, "prefresh"); begin if Prefresh (Pad, C_Int (Source_Top_Row), C_Int (Source_Left_Column), C_Int (Destination_Top_Row), C_Int (Destination_Left_Column), C_Int (Destination_Bottom_Row), C_Int (Destination_Right_Column)) = Curses_Err then raise Curses_Exception; end if; end Refresh; procedure Refresh_Without_Update (Pad : Window; Source_Top_Row : Line_Position; Source_Left_Column : Column_Position; Destination_Top_Row : Line_Position; Destination_Left_Column : Column_Position; Destination_Bottom_Row : Line_Position; Destination_Right_Column : Column_Position) is function Pnoutrefresh (Pad : Window; Source_Top_Row : C_Int; Source_Left_Column : C_Int; Destination_Top_Row : C_Int; Destination_Left_Column : C_Int; Destination_Bottom_Row : C_Int; Destination_Right_Column : C_Int) return C_Int; pragma Import (C, Pnoutrefresh, "pnoutrefresh"); begin if Pnoutrefresh (Pad, C_Int (Source_Top_Row), C_Int (Source_Left_Column), C_Int (Destination_Top_Row), C_Int (Destination_Left_Column), C_Int (Destination_Bottom_Row), C_Int (Destination_Right_Column)) = Curses_Err then raise Curses_Exception; end if; end Refresh_Without_Update; procedure Add_Character_To_Pad_And_Echo_It (Pad : Window; Ch : Attributed_Character) is function Pechochar (Pad : Window; Ch : Attributed_Character) return C_Int; pragma Import (C, Pechochar, "pechochar"); begin if Pechochar (Pad, Ch) = Curses_Err then raise Curses_Exception; end if; end Add_Character_To_Pad_And_Echo_It; procedure Add_Character_To_Pad_And_Echo_It (Pad : Window; Ch : Character) is begin Add_Character_To_Pad_And_Echo_It (Pad, Attributed_Character'(Ch => Ch, Color => Color_Pair'First, Attr => Normal_Video)); end Add_Character_To_Pad_And_Echo_It; ------------------------------------------------------------------------------ procedure Scroll (Win : Window := Standard_Window; Amount : Integer := 1) is function Wscrl (Win : Window; N : C_Int) return C_Int; pragma Import (C, Wscrl, "wscrl"); begin if Wscrl (Win, C_Int (Amount)) = Curses_Err then raise Curses_Exception; end if; end Scroll; ------------------------------------------------------------------------------ procedure Delete_Character (Win : Window := Standard_Window) is function Wdelch (Win : Window) return C_Int; pragma Import (C, Wdelch, "wdelch"); begin if Wdelch (Win) = Curses_Err then raise Curses_Exception; end if; end Delete_Character; procedure Delete_Character (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position) is function Mvwdelch (Win : Window; Lin : C_Int; Col : C_Int) return C_Int; pragma Import (C, Mvwdelch, "mvwdelch"); begin if Mvwdelch (Win, C_Int (Line), C_Int (Column)) = Curses_Err then raise Curses_Exception; end if; end Delete_Character; ------------------------------------------------------------------------------ function Peek (Win : Window := Standard_Window) return Attributed_Character is function Winch (Win : Window) return Attributed_Character; pragma Import (C, Winch, "winch"); begin return Winch (Win); end Peek; function Peek (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position) return Attributed_Character is function Mvwinch (Win : Window; Lin : C_Int; Col : C_Int) return Attributed_Character; pragma Import (C, Mvwinch, "mvwinch"); begin return Mvwinch (Win, C_Int (Line), C_Int (Column)); end Peek; ------------------------------------------------------------------------------ procedure Insert (Win : Window := Standard_Window; Ch : Attributed_Character) is function Winsch (Win : Window; Ch : Attributed_Character) return C_Int; pragma Import (C, Winsch, "winsch"); begin if Winsch (Win, Ch) = Curses_Err then raise Curses_Exception; end if; end Insert; procedure Insert (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Ch : Attributed_Character) is function Mvwinsch (Win : Window; Lin : C_Int; Col : C_Int; Ch : Attributed_Character) return C_Int; pragma Import (C, Mvwinsch, "mvwinsch"); begin if Mvwinsch (Win, C_Int (Line), C_Int (Column), Ch) = Curses_Err then raise Curses_Exception; end if; end Insert; ------------------------------------------------------------------------------ procedure Insert (Win : Window := Standard_Window; Str : String; Len : Integer := -1) is function Winsnstr (Win : Window; Str : char_array; Len : Integer := -1) return C_Int; pragma Import (C, Winsnstr, "winsnstr"); Txt : char_array (0 .. Str'Length); Length : size_t; begin To_C (Str, Txt, Length); if Winsnstr (Win, Txt, Len) = Curses_Err then raise Curses_Exception; end if; end Insert; procedure Insert (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : String; Len : Integer := -1) is function Mvwinsnstr (Win : Window; Line : C_Int; Column : C_Int; Str : char_array; Len : C_Int) return C_Int; pragma Import (C, Mvwinsnstr, "mvwinsnstr"); Txt : char_array (0 .. Str'Length); Length : size_t; begin To_C (Str, Txt, Length); if Mvwinsnstr (Win, C_Int (Line), C_Int (Column), Txt, C_Int (Len)) = Curses_Err then raise Curses_Exception; end if; end Insert; ------------------------------------------------------------------------------ procedure Peek (Win : Window := Standard_Window; Str : out String; Len : Integer := -1) is function Winnstr (Win : Window; Str : char_array; Len : C_Int) return C_Int; pragma Import (C, Winnstr, "winnstr"); N : Integer := Len; Txt : char_array (0 .. Str'Length); Cnt : Natural; begin if N < 0 then N := Str'Length; end if; if N > Str'Length then raise Constraint_Error; end if; Txt (0) := Interfaces.C.char'First; if Winnstr (Win, Txt, C_Int (N)) = Curses_Err then raise Curses_Exception; end if; To_Ada (Txt, Str, Cnt, True); if Cnt < Str'Length then Str ((Str'First + Cnt) .. Str'Last) := (others => ' '); end if; end Peek; procedure Peek (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : out String; Len : Integer := -1) is begin Move_Cursor (Win, Line, Column); Peek (Win, Str, Len); end Peek; ------------------------------------------------------------------------------ procedure Peek (Win : Window := Standard_Window; Str : out Attributed_String; Len : Integer := -1) is function Winchnstr (Win : Window; Str : chtype_array; -- out Len : C_Int) return C_Int; pragma Import (C, Winchnstr, "winchnstr"); N : Integer := Len; Txt : constant chtype_array (0 .. Str'Length) := (0 => Default_Character); Cnt : Natural := 0; begin if N < 0 then N := Str'Length; end if; if N > Str'Length then raise Constraint_Error; end if; if Winchnstr (Win, Txt, C_Int (N)) = Curses_Err then raise Curses_Exception; end if; for To in Str'Range loop exit when Txt (size_t (Cnt)) = Default_Character; Str (To) := Txt (size_t (Cnt)); Cnt := Cnt + 1; end loop; if Cnt < Str'Length then Str ((Str'First + Cnt) .. Str'Last) := (others => (Ch => ' ', Color => Color_Pair'First, Attr => Normal_Video)); end if; end Peek; procedure Peek (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : out Attributed_String; Len : Integer := -1) is begin Move_Cursor (Win, Line, Column); Peek (Win, Str, Len); end Peek; ------------------------------------------------------------------------------ procedure Get (Win : Window := Standard_Window; Str : out String; Len : Integer := -1) is function Wgetnstr (Win : Window; Str : char_array; Len : C_Int) return C_Int; pragma Import (C, Wgetnstr, "wgetnstr"); N : Integer := Len; Txt : char_array (0 .. Str'Length); Cnt : Natural; begin if N < 0 then N := Str'Length; end if; if N > Str'Length then raise Constraint_Error; end if; Txt (0) := Interfaces.C.char'First; if Wgetnstr (Win, Txt, C_Int (N)) = Curses_Err then raise Curses_Exception; end if; To_Ada (Txt, Str, Cnt, True); if Cnt < Str'Length then Str ((Str'First + Cnt) .. Str'Last) := (others => ' '); end if; end Get; procedure Get (Win : Window := Standard_Window; Line : Line_Position; Column : Column_Position; Str : out String; Len : Integer := -1) is begin Move_Cursor (Win, Line, Column); Get (Win, Str, Len); end Get; ------------------------------------------------------------------------------ procedure Init_Soft_Label_Keys (Format : Soft_Label_Key_Format := Three_Two_Three) is function Slk_Init (Fmt : C_Int) return C_Int; pragma Import (C, Slk_Init, "slk_init"); begin if Slk_Init (Soft_Label_Key_Format'Pos (Format)) = Curses_Err then raise Curses_Exception; end if; end Init_Soft_Label_Keys; procedure Set_Soft_Label_Key (Label : Label_Number; Text : String; Fmt : Label_Justification := Left) is function Slk_Set (Label : C_Int; Txt : char_array; Fmt : C_Int) return C_Int; pragma Import (C, Slk_Set, "slk_set"); Txt : char_array (0 .. Text'Length); Len : size_t; begin To_C (Text, Txt, Len); if Slk_Set (C_Int (Label), Txt, C_Int (Label_Justification'Pos (Fmt))) = Curses_Err then raise Curses_Exception; end if; end Set_Soft_Label_Key; procedure Refresh_Soft_Label_Keys is function Slk_Refresh return C_Int; pragma Import (C, Slk_Refresh, "slk_refresh"); begin if Slk_Refresh = Curses_Err then raise Curses_Exception; end if; end Refresh_Soft_Label_Keys; procedure Refresh_Soft_Label_Keys_Without_Update is function Slk_Noutrefresh return C_Int; pragma Import (C, Slk_Noutrefresh, "slk_noutrefresh"); begin if Slk_Noutrefresh = Curses_Err then raise Curses_Exception; end if; end Refresh_Soft_Label_Keys_Without_Update; procedure Get_Soft_Label_Key (Label : Label_Number; Text : out String) is function Slk_Label (Label : C_Int) return chars_ptr; pragma Import (C, Slk_Label, "slk_label"); begin Fill_String (Slk_Label (C_Int (Label)), Text); end Get_Soft_Label_Key; function Get_Soft_Label_Key (Label : Label_Number) return String is function Slk_Label (Label : C_Int) return chars_ptr; pragma Import (C, Slk_Label, "slk_label"); begin return Fill_String (Slk_Label (C_Int (Label))); end Get_Soft_Label_Key; procedure Clear_Soft_Label_Keys is function Slk_Clear return C_Int; pragma Import (C, Slk_Clear, "slk_clear"); begin if Slk_Clear = Curses_Err then raise Curses_Exception; end if; end Clear_Soft_Label_Keys; procedure Restore_Soft_Label_Keys is function Slk_Restore return C_Int; pragma Import (C, Slk_Restore, "slk_restore"); begin if Slk_Restore = Curses_Err then raise Curses_Exception; end if; end Restore_Soft_Label_Keys; procedure Touch_Soft_Label_Keys is function Slk_Touch return C_Int; pragma Import (C, Slk_Touch, "slk_touch"); begin if Slk_Touch = Curses_Err then raise Curses_Exception; end if; end Touch_Soft_Label_Keys; procedure Switch_Soft_Label_Key_Attributes (Attr : Character_Attribute_Set; On : Boolean := True) is function Slk_Attron (Ch : Attributed_Character) return C_Int; pragma Import (C, Slk_Attron, "slk_attron"); function Slk_Attroff (Ch : Attributed_Character) return C_Int; pragma Import (C, Slk_Attroff, "slk_attroff"); Err : C_Int; Ch : constant Attributed_Character := (Ch => Character'First, Attr => Attr, Color => Color_Pair'First); begin if On then Err := Slk_Attron (Ch); else Err := Slk_Attroff (Ch); end if; if Err = Curses_Err then raise Curses_Exception; end if; end Switch_Soft_Label_Key_Attributes; procedure Set_Soft_Label_Key_Attributes (Attr : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First) is function Slk_Attrset (Ch : Attributed_Character) return C_Int; pragma Import (C, Slk_Attrset, "slk_attrset"); Ch : constant Attributed_Character := (Ch => Character'First, Attr => Attr, Color => Color); begin if Slk_Attrset (Ch) = Curses_Err then raise Curses_Exception; end if; end Set_Soft_Label_Key_Attributes; function Get_Soft_Label_Key_Attributes return Character_Attribute_Set is function Slk_Attr return Attributed_Character; pragma Import (C, Slk_Attr, "slk_attr"); Attr : constant Attributed_Character := Slk_Attr; begin return Attr.Attr; end Get_Soft_Label_Key_Attributes; function Get_Soft_Label_Key_Attributes return Color_Pair is function Slk_Attr return Attributed_Character; pragma Import (C, Slk_Attr, "slk_attr"); Attr : constant Attributed_Character := Slk_Attr; begin return Attr.Color; end Get_Soft_Label_Key_Attributes; procedure Set_Soft_Label_Key_Color (Pair : Color_Pair) is function Slk_Color (Color : C_Short) return C_Int; pragma Import (C, Slk_Color, "slk_color"); begin if Slk_Color (C_Short (Pair)) = Curses_Err then raise Curses_Exception; end if; end Set_Soft_Label_Key_Color; ------------------------------------------------------------------------------ procedure Enable_Key (Key : Special_Key_Code; Enable : Boolean := True) is function Keyok (Keycode : C_Int; On_Off : Curses_Bool) return C_Int; pragma Import (C, Keyok, "keyok"); begin if Keyok (C_Int (Key), Curses_Bool (Boolean'Pos (Enable))) = Curses_Err then raise Curses_Exception; end if; end Enable_Key; ------------------------------------------------------------------------------ procedure Define_Key (Definition : String; Key : Special_Key_Code) is function Defkey (Def : char_array; Key : C_Int) return C_Int; pragma Import (C, Defkey, "define_key"); Txt : char_array (0 .. Definition'Length); Length : size_t; begin To_C (Definition, Txt, Length); if Defkey (Txt, C_Int (Key)) = Curses_Err then raise Curses_Exception; end if; end Define_Key; ------------------------------------------------------------------------------ procedure Un_Control (Ch : Attributed_Character; Str : out String) is function Unctrl (Ch : Attributed_Character) return chars_ptr; pragma Import (C, Unctrl, "unctrl"); begin Fill_String (Unctrl (Ch), Str); end Un_Control; function Un_Control (Ch : Attributed_Character) return String is function Unctrl (Ch : Attributed_Character) return chars_ptr; pragma Import (C, Unctrl, "unctrl"); begin return Fill_String (Unctrl (Ch)); end Un_Control; procedure Delay_Output (Msecs : Natural) is function Delayoutput (Msecs : C_Int) return C_Int; pragma Import (C, Delayoutput, "delay_output"); begin if Delayoutput (C_Int (Msecs)) = Curses_Err then raise Curses_Exception; end if; end Delay_Output; procedure Flush_Input is function Flushinp return C_Int; pragma Import (C, Flushinp, "flushinp"); begin if Flushinp = Curses_Err then -- docu says that never happens, but... raise Curses_Exception; end if; end Flush_Input; ------------------------------------------------------------------------------ function Baudrate return Natural is function Baud return C_Int; pragma Import (C, Baud, "baudrate"); begin return Natural (Baud); end Baudrate; function Erase_Character return Character is function Erasechar return C_Int; pragma Import (C, Erasechar, "erasechar"); begin return Character'Val (Erasechar); end Erase_Character; function Kill_Character return Character is function Killchar return C_Int; pragma Import (C, Killchar, "killchar"); begin return Character'Val (Killchar); end Kill_Character; function Has_Insert_Character return Boolean is function Has_Ic return Curses_Bool; pragma Import (C, Has_Ic, "has_ic"); begin if Has_Ic = Curses_Bool_False then return False; else return True; end if; end Has_Insert_Character; function Has_Insert_Line return Boolean is function Has_Il return Curses_Bool; pragma Import (C, Has_Il, "has_il"); begin if Has_Il = Curses_Bool_False then return False; else return True; end if; end Has_Insert_Line; function Supported_Attributes return Character_Attribute_Set is function Termattrs return Attributed_Character; pragma Import (C, Termattrs, "termattrs"); Ch : constant Attributed_Character := Termattrs; begin return Ch.Attr; end Supported_Attributes; procedure Long_Name (Name : out String) is function Longname return chars_ptr; pragma Import (C, Longname, "longname"); begin Fill_String (Longname, Name); end Long_Name; function Long_Name return String is function Longname return chars_ptr; pragma Import (C, Longname, "longname"); begin return Fill_String (Longname); end Long_Name; procedure Terminal_Name (Name : out String) is function Termname return chars_ptr; pragma Import (C, Termname, "termname"); begin Fill_String (Termname, Name); end Terminal_Name; function Terminal_Name return String is function Termname return chars_ptr; pragma Import (C, Termname, "termname"); begin return Fill_String (Termname); end Terminal_Name; ------------------------------------------------------------------------------ procedure Init_Pair (Pair : Redefinable_Color_Pair; Fore : Color_Number; Back : Color_Number) is function Initpair (Pair : C_Short; Fore : C_Short; Back : C_Short) return C_Int; pragma Import (C, Initpair, "init_pair"); begin if Integer (Pair) >= Number_Of_Color_Pairs then raise Constraint_Error; end if; if Integer (Fore) >= Number_Of_Colors or else Integer (Back) >= Number_Of_Colors then raise Constraint_Error; end if; if Initpair (C_Short (Pair), C_Short (Fore), C_Short (Back)) = Curses_Err then raise Curses_Exception; end if; end Init_Pair; procedure Pair_Content (Pair : Color_Pair; Fore : out Color_Number; Back : out Color_Number) is type C_Short_Access is access all C_Short; function Paircontent (Pair : C_Short; Fp : C_Short_Access; Bp : C_Short_Access) return C_Int; pragma Import (C, Paircontent, "pair_content"); F, B : aliased C_Short; begin if Paircontent (C_Short (Pair), F'Access, B'Access) = Curses_Err then raise Curses_Exception; else Fore := Color_Number (F); Back := Color_Number (B); end if; end Pair_Content; function Has_Colors return Boolean is function Hascolors return Curses_Bool; pragma Import (C, Hascolors, "has_colors"); begin if Hascolors = Curses_Bool_False then return False; else return True; end if; end Has_Colors; procedure Init_Color (Color : Color_Number; Red : RGB_Value; Green : RGB_Value; Blue : RGB_Value) is function Initcolor (Col : C_Short; Red : C_Short; Green : C_Short; Blue : C_Short) return C_Int; pragma Import (C, Initcolor, "init_color"); begin if Initcolor (C_Short (Color), C_Short (Red), C_Short (Green), C_Short (Blue)) = Curses_Err then raise Curses_Exception; end if; end Init_Color; function Can_Change_Color return Boolean is function Canchangecolor return Curses_Bool; pragma Import (C, Canchangecolor, "can_change_color"); begin if Canchangecolor = Curses_Bool_False then return False; else return True; end if; end Can_Change_Color; procedure Color_Content (Color : Color_Number; Red : out RGB_Value; Green : out RGB_Value; Blue : out RGB_Value) is type C_Short_Access is access all C_Short; function Colorcontent (Color : C_Short; R, G, B : C_Short_Access) return C_Int; pragma Import (C, Colorcontent, "color_content"); R, G, B : aliased C_Short; begin if Colorcontent (C_Short (Color), R'Access, G'Access, B'Access) = Curses_Err then raise Curses_Exception; else Red := RGB_Value (R); Green := RGB_Value (G); Blue := RGB_Value (B); end if; end Color_Content; ------------------------------------------------------------------------------ procedure Save_Curses_Mode (Mode : Curses_Mode) is function Def_Prog_Mode return C_Int; pragma Import (C, Def_Prog_Mode, "def_prog_mode"); function Def_Shell_Mode return C_Int; pragma Import (C, Def_Shell_Mode, "def_shell_mode"); Err : C_Int; begin case Mode is when Curses => Err := Def_Prog_Mode; when Shell => Err := Def_Shell_Mode; end case; if Err = Curses_Err then raise Curses_Exception; end if; end Save_Curses_Mode; procedure Reset_Curses_Mode (Mode : Curses_Mode) is function Reset_Prog_Mode return C_Int; pragma Import (C, Reset_Prog_Mode, "reset_prog_mode"); function Reset_Shell_Mode return C_Int; pragma Import (C, Reset_Shell_Mode, "reset_shell_mode"); Err : C_Int; begin case Mode is when Curses => Err := Reset_Prog_Mode; when Shell => Err := Reset_Shell_Mode; end case; if Err = Curses_Err then raise Curses_Exception; end if; end Reset_Curses_Mode; procedure Save_Terminal_State is function Savetty return C_Int; pragma Import (C, Savetty, "savetty"); begin if Savetty = Curses_Err then raise Curses_Exception; end if; end Save_Terminal_State; procedure Reset_Terminal_State is function Resetty return C_Int; pragma Import (C, Resetty, "resetty"); begin if Resetty = Curses_Err then raise Curses_Exception; end if; end Reset_Terminal_State; procedure Rip_Off_Lines (Lines : Integer; Proc : Stdscr_Init_Proc) is function Ripoffline (Lines : C_Int; Proc : Stdscr_Init_Proc) return C_Int; pragma Import (C, Ripoffline, "_nc_ripoffline"); begin if Ripoffline (C_Int (Lines), Proc) = Curses_Err then raise Curses_Exception; end if; end Rip_Off_Lines; procedure Set_Cursor_Visibility (Visibility : in out Cursor_Visibility) is function Curs_Set (Curs : C_Int) return C_Int; pragma Import (C, Curs_Set, "curs_set"); Res : C_Int; begin Res := Curs_Set (Cursor_Visibility'Pos (Visibility)); if Res /= Curses_Err then Visibility := Cursor_Visibility'Val (Res); end if; end Set_Cursor_Visibility; procedure Nap_Milli_Seconds (Ms : Natural) is function Napms (Ms : C_Int) return C_Int; pragma Import (C, Napms, "napms"); begin if Napms (C_Int (Ms)) = Curses_Err then raise Curses_Exception; end if; end Nap_Milli_Seconds; ------------------------------------------------------------------------------ function Lines return Line_Count is function LINES_As_Function return Interfaces.C.int; pragma Import (C, LINES_As_Function, "LINES_as_function"); begin return Line_Count (LINES_As_Function); end Lines; function Columns return Column_Count is function COLS_As_Function return Interfaces.C.int; pragma Import (C, COLS_As_Function, "COLS_as_function"); begin return Column_Count (COLS_As_Function); end Columns; function Tab_Size return Natural is function TABSIZE_As_Function return Interfaces.C.int; pragma Import (C, TABSIZE_As_Function, "TABSIZE_as_function"); begin return Natural (TABSIZE_As_Function); end Tab_Size; function Number_Of_Colors return Natural is function COLORS_As_Function return Interfaces.C.int; pragma Import (C, COLORS_As_Function, "COLORS_as_function"); begin return Natural (COLORS_As_Function); end Number_Of_Colors; function Number_Of_Color_Pairs return Natural is function COLOR_PAIRS_As_Function return Interfaces.C.int; pragma Import (C, COLOR_PAIRS_As_Function, "COLOR_PAIRS_as_function"); begin return Natural (COLOR_PAIRS_As_Function); end Number_Of_Color_Pairs; ------------------------------------------------------------------------------ procedure Transform_Coordinates (W : Window := Standard_Window; Line : in out Line_Position; Column : in out Column_Position; Dir : Transform_Direction := From_Screen) is type Int_Access is access all C_Int; function Transform (W : Window; Y, X : Int_Access; Dir : Curses_Bool) return C_Int; pragma Import (C, Transform, "wmouse_trafo"); X : aliased C_Int := C_Int (Column); Y : aliased C_Int := C_Int (Line); D : Curses_Bool := Curses_Bool_False; R : C_Int; begin if Dir = To_Screen then D := 1; end if; R := Transform (W, Y'Access, X'Access, D); if R = Curses_False then raise Curses_Exception; else Line := Line_Position (Y); Column := Column_Position (X); end if; end Transform_Coordinates; ------------------------------------------------------------------------------ procedure Use_Default_Colors is function C_Use_Default_Colors return C_Int; pragma Import (C, C_Use_Default_Colors, "use_default_colors"); Err : constant C_Int := C_Use_Default_Colors; begin if Err = Curses_Err then raise Curses_Exception; end if; end Use_Default_Colors; procedure Assume_Default_Colors (Fore : Color_Number := Default_Color; Back : Color_Number := Default_Color) is function C_Assume_Default_Colors (Fore : C_Int; Back : C_Int) return C_Int; pragma Import (C, C_Assume_Default_Colors, "assume_default_colors"); Err : constant C_Int := C_Assume_Default_Colors (C_Int (Fore), C_Int (Back)); begin if Err = Curses_Err then raise Curses_Exception; end if; end Assume_Default_Colors; ------------------------------------------------------------------------------ function Curses_Version return String is function curses_versionC return chars_ptr; pragma Import (C, curses_versionC, "curses_version"); Result : constant chars_ptr := curses_versionC; begin return Fill_String (Result); end Curses_Version; ------------------------------------------------------------------------------ procedure Curses_Free_All is procedure curses_freeall; pragma Import (C, curses_freeall, "_nc_freeall"); begin -- Use this only for testing: you cannot use curses after calling it, -- so it has to be the "last" thing done before exiting the program. -- This will not really free ALL of memory used by curses. That is -- because it cannot free the memory used for stdout's setbuf. The -- _nc_free_and_exit() procedure can do that, but it can be invoked -- safely only from C - and again, that only as the "last" thing done -- before exiting the program. curses_freeall; end Curses_Free_All; ------------------------------------------------------------------------------ function Use_Extended_Names (Enable : Boolean) return Boolean is function use_extended_namesC (e : Curses_Bool) return C_Int; pragma Import (C, use_extended_namesC, "use_extended_names"); Res : constant C_Int := use_extended_namesC (Curses_Bool (Boolean'Pos (Enable))); begin if Res = C_Int (Curses_Bool_False) then return False; else return True; end if; end Use_Extended_Names; ------------------------------------------------------------------------------ procedure Screen_Dump_To_File (Filename : String) is function scr_dump (f : char_array) return C_Int; pragma Import (C, scr_dump, "scr_dump"); Txt : char_array (0 .. Filename'Length); Length : size_t; begin To_C (Filename, Txt, Length); if Curses_Err = scr_dump (Txt) then raise Curses_Exception; end if; end Screen_Dump_To_File; procedure Screen_Restore_From_File (Filename : String) is function scr_restore (f : char_array) return C_Int; pragma Import (C, scr_restore, "scr_restore"); Txt : char_array (0 .. Filename'Length); Length : size_t; begin To_C (Filename, Txt, Length); if Curses_Err = scr_restore (Txt) then raise Curses_Exception; end if; end Screen_Restore_From_File; procedure Screen_Init_From_File (Filename : String) is function scr_init (f : char_array) return C_Int; pragma Import (C, scr_init, "scr_init"); Txt : char_array (0 .. Filename'Length); Length : size_t; begin To_C (Filename, Txt, Length); if Curses_Err = scr_init (Txt) then raise Curses_Exception; end if; end Screen_Init_From_File; procedure Screen_Set_File (Filename : String) is function scr_set (f : char_array) return C_Int; pragma Import (C, scr_set, "scr_set"); Txt : char_array (0 .. Filename'Length); Length : size_t; begin To_C (Filename, Txt, Length); if Curses_Err = scr_set (Txt) then raise Curses_Exception; end if; end Screen_Set_File; ------------------------------------------------------------------------------ procedure Resize (Win : Window := Standard_Window; Number_Of_Lines : Line_Count; Number_Of_Columns : Column_Count) is function wresize (win : Window; lines : C_Int; columns : C_Int) return C_Int; pragma Import (C, wresize); begin if wresize (Win, C_Int (Number_Of_Lines), C_Int (Number_Of_Columns)) = Curses_Err then raise Curses_Exception; end if; end Resize; ------------------------------------------------------------------------------ end Terminal_Interface.Curses; ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-menus-menu_user_data.ads.m40000644000175100001440000000744311315446021026360 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-menus-menu_user_data__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Menus.Menu_User_Data -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.15 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type User is limited private; type User_Access is access User; package Terminal_Interface.Curses.Menus.Menu_User_Data is pragma Preelaborate (Terminal_Interface.Curses.Menus.Menu_User_Data); -- MANPAGE(`menu_userptr.3x') -- ANCHOR(`set_menu_userptr',`Set_User_Data') procedure Set_User_Data (Men : Menu; Data : User_Access); -- AKA pragma Inline (Set_User_Data); -- ANCHOR(`menu_userptr',`Get_User_Data') procedure Get_User_Data (Men : Menu; Data : out User_Access); -- AKA -- ANCHOR(`menu_userptr',`Get_User_Data') function Get_User_Data (Men : Menu) return User_Access; -- AKA -- Same as function pragma Inline (Get_User_Data); end Terminal_Interface.Curses.Menus.Menu_User_Data; ncurses-6.0-20160213/Ada95/gen/adacurses-config.in0000644000175100001440000000637612344664306017661 0ustar tomusers#! /bin/sh # $Id: adacurses-config.in,v 1.9 2014/06/07 19:32:22 Pascal.Pignard Exp $ ############################################################################## # Copyright (c) 2007-2010,2014 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # This script returns the options to add to `gnatmake' for using AdaCurses. DESTDIR=@DESTDIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ ADA_INCLUDE=@ADA_INCLUDE@ ADA_OBJECTS=@ADA_OBJECTS@ VERSION=@NCURSES_MAJOR@.@NCURSES_MINOR@.@NCURSES_PATCH@ CFLAGS="-aI$ADA_INCLUDE -aO$ADA_OBJECTS" LIBS="-L$ADA_OBJECTS -lAdaCurses" THIS="adacurses" case "x$1" in x--version) echo AdaCurses $VERSION ;; x--cflags) echo $CFLAGS ;; x--libs) echo $LIBS ;; x) # if no parameter is given, give what gnatmake needs echo "$CFLAGS -largs $LIBS" ;; x--help) cat <&2 exit 1 ;; esac ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-menus-item_user_data.ads.m40000644000175100001440000001000311315444167026345 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-menus-item_user_data__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Menus.Item_User_Data -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2006,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.17 $ -- $Date: 2009/12/26 17:31:35 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type User is limited private; type User_Access is access User; package Terminal_Interface.Curses.Menus.Item_User_Data is pragma Preelaborate (Terminal_Interface.Curses.Menus.Item_User_Data); -- The binding uses the same user pointer for menu items -- as the low level C implementation. So you can safely -- read or write the user pointer also with the C routines -- -- MANPAGE(`mitem_userptr.3x') -- ANCHOR(`set_item_userptr',`Set_User_Data') procedure Set_User_Data (Itm : Item; Data : User_Access); -- AKA pragma Inline (Set_User_Data); -- ANCHOR(`item_userptr',`Get_User_Data') procedure Get_User_Data (Itm : Item; Data : out User_Access); -- AKA -- ANCHOR(`item_userptr',`Get_User_Data') function Get_User_Data (Itm : Item) return User_Access; -- AKA -- Same as function pragma Inline (Get_User_Data); end Terminal_Interface.Curses.Menus.Item_User_Data; ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-aux.ads.m40000644000175100001440000001364712340207631023041 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-aux__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Aux -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.23 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System; with Interfaces.C; with Interfaces.C.Strings; use Interfaces.C.Strings; package Terminal_Interface.Curses.Aux is pragma Preelaborate (Terminal_Interface.Curses.Aux); use type Interfaces.C.int; subtype C_Int is Interfaces.C.int; subtype C_Short is Interfaces.C.short; subtype C_Long_Int is Interfaces.C.long; subtype C_Size_T is Interfaces.C.size_t; subtype C_UInt is Interfaces.C.unsigned; subtype C_ULong is Interfaces.C.unsigned_long; subtype C_Char_Ptr is Interfaces.C.Strings.chars_ptr; type C_Void_Ptr is new System.Address; -- This is how those constants are defined in ncurses. I see them also -- exactly like this in all ETI implementations I ever tested. So it -- could be that this is quite general, but please check with your curses. -- This is critical, because curses sometime mixes Boolean returns with -- returning an error status. Curses_Ok : constant C_Int := Curses_Constants.OK; Curses_Err : constant C_Int := Curses_Constants.ERR; Curses_True : constant C_Int := Curses_Constants.TRUE; Curses_False : constant C_Int := Curses_Constants.FALSE; -- Eti_Error: type for error codes returned by the menu and form subsystem type Eti_Error is (E_Current, E_Invalid_Field, E_Request_Denied, E_Not_Connected, E_Not_Selectable, E_No_Match, E_Unknown_Command, E_Not_Posted, E_No_Room, E_Bad_State, E_Connected, E_Posted, E_Bad_Argument, E_System_Error, E_Ok); procedure Eti_Exception (Code : Eti_Error); -- Do nothing if Code = E_Ok. -- Else dispatch the error code and raise the appropriate exception. procedure Fill_String (Cp : chars_ptr; Str : out String); -- Fill the Str parameter with the string denoted by the chars_ptr -- C-Style string. function Fill_String (Cp : chars_ptr) return String; -- Same but as function. private for Eti_Error'Size use C_Int'Size; pragma Convention (C, Eti_Error); for Eti_Error use (E_Current => Curses_Constants.E_CURRENT, E_Invalid_Field => Curses_Constants.E_INVALID_FIELD, E_Request_Denied => Curses_Constants.E_REQUEST_DENIED, E_Not_Connected => Curses_Constants.E_NOT_CONNECTED, E_Not_Selectable => Curses_Constants.E_NOT_SELECTABLE, E_No_Match => Curses_Constants.E_NO_MATCH, E_Unknown_Command => Curses_Constants.E_UNKNOWN_COMMAND, E_Not_Posted => Curses_Constants.E_NOT_POSTED, E_No_Room => Curses_Constants.E_NO_ROOM, E_Bad_State => Curses_Constants.E_BAD_STATE, E_Connected => Curses_Constants.E_CONNECTED, E_Posted => Curses_Constants.E_POSTED, E_Bad_Argument => Curses_Constants.E_BAD_ARGUMENT, E_System_Error => Curses_Constants.E_SYSTEM_ERROR, E_Ok => Curses_Constants.E_OK); end Terminal_Interface.Curses.Aux; ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-panels.ads.m40000644000175100001440000001317012340207715023520 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-panels__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Panels -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.22 $ -- $Date: 2014/05/24 21:31:57 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System; package Terminal_Interface.Curses.Panels is pragma Preelaborate (Terminal_Interface.Curses.Panels); pragma Linker_Options ("-lpanel" & Curses_Constants.DFT_ARG_SUFFIX); type Panel is private; --------------------------- -- Interface constants -- --------------------------- Null_Panel : constant Panel; ------------------- -- Exceptions -- ------------------- Panel_Exception : exception; -- MANPAGE(`panel.3x') -- ANCHOR(`new_panel()',`Create') function Create (Win : Window) return Panel; -- AKA pragma Inline (Create); -- ANCHOR(`new_panel()',`New_Panel') function New_Panel (Win : Window) return Panel renames Create; -- AKA -- pragma Inline (New_Panel); -- ANCHOR(`bottom_panel()',`Bottom') procedure Bottom (Pan : Panel); -- AKA pragma Inline (Bottom); -- ANCHOR(`top_panel()',`Top') procedure Top (Pan : Panel); -- AKA pragma Inline (Top); -- ANCHOR(`show_panel()',`Show') procedure Show (Pan : Panel); -- AKA pragma Inline (Show); -- ANCHOR(`update_panels()',`Update_Panels') procedure Update_Panels; -- AKA pragma Import (C, Update_Panels, "update_panels"); -- ANCHOR(`hide_panel()',`Hide') procedure Hide (Pan : Panel); -- AKA pragma Inline (Hide); -- ANCHOR(`panel_window()',`Get_Window') function Get_Window (Pan : Panel) return Window; -- AKA pragma Inline (Get_Window); -- ANCHOR(`panel_window()',`Panel_Window') function Panel_Window (Pan : Panel) return Window renames Get_Window; -- pragma Inline (Panel_Window); -- ANCHOR(`replace_panel()',`Replace') procedure Replace (Pan : Panel; Win : Window); -- AKA pragma Inline (Replace); -- ANCHOR(`move_panel()',`Move') procedure Move (Pan : Panel; Line : Line_Position; Column : Column_Position); -- AKA pragma Inline (Move); -- ANCHOR(`panel_hidden()',`Is_Hidden') function Is_Hidden (Pan : Panel) return Boolean; -- AKA pragma Inline (Is_Hidden); -- ANCHOR(`panel_above()',`Above') function Above (Pan : Panel) return Panel; -- AKA pragma Import (C, Above, "panel_above"); -- ANCHOR(`panel_below()',`Below') function Below (Pan : Panel) return Panel; -- AKA pragma Import (C, Below, "panel_below"); -- ANCHOR(`del_panel()',`Delete') procedure Delete (Pan : in out Panel); -- AKA pragma Inline (Delete); private type Panel is new System.Storage_Elements.Integer_Address; Null_Panel : constant Panel := 0; end Terminal_Interface.Curses.Panels; ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-mouse.ads.m40000644000175100001440000002226412532442567023403 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-mouse__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Mouse -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.32 $ -- $Date: 2015/05/30 23:19:19 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System; package Terminal_Interface.Curses.Mouse is pragma Preelaborate (Terminal_Interface.Curses.Mouse); -- MANPAGE(`curs_mouse.3x') -- mouse_trafo, wmouse_trafo are implemented as Transform_Coordinates -- in the parent package. -- -- Not implemented: -- REPORT_MOUSE_POSITION (i.e. as a parameter to Register_Reportable_Event -- or Start_Mouse) type Event_Mask is private; No_Events : constant Event_Mask; All_Events : constant Event_Mask; type Mouse_Button is (Left, -- aka: Button 1 Middle, -- aka: Button 2 Right, -- aka: Button 3 Button4, -- aka: Button 4 Control, -- Control Key Shift, -- Shift Key Alt); -- ALT Key subtype Real_Buttons is Mouse_Button range Left .. Button4; subtype Modifier_Keys is Mouse_Button range Control .. Alt; type Button_State is (Released, Pressed, Clicked, Double_Clicked, Triple_Clicked); type Button_States is array (Button_State) of Boolean; pragma Pack (Button_States); All_Clicks : constant Button_States := (Clicked .. Triple_Clicked => True, others => False); All_States : constant Button_States := (others => True); type Mouse_Event is private; -- MANPAGE(`curs_mouse.3x') function Has_Mouse return Boolean; -- Return true if a mouse device is supported, false otherwise. procedure Register_Reportable_Event (Button : Mouse_Button; State : Button_State; Mask : in out Event_Mask); -- Stores the event described by the button and the state in the mask. -- Before you call this the first time, you should initialize the mask -- with the Empty_Mask constant pragma Inline (Register_Reportable_Event); procedure Register_Reportable_Events (Button : Mouse_Button; State : Button_States; Mask : in out Event_Mask); -- Register all events described by the Button and the State bitmap. -- Before you call this the first time, you should initialize the mask -- with the Empty_Mask constant -- ANCHOR(`mousemask()',`Start_Mouse') -- There is one difference to mousmask(): we return the value of the -- old mask, that means the event mask value before this call. -- Not Implemented: The library version -- returns a Mouse_Mask that tells which events are reported. function Start_Mouse (Mask : Event_Mask := All_Events) return Event_Mask; -- AKA pragma Inline (Start_Mouse); procedure End_Mouse (Mask : Event_Mask := No_Events); -- Terminates the mouse, restores the specified event mask pragma Inline (End_Mouse); -- ANCHOR(`getmouse()',`Get_Mouse') function Get_Mouse return Mouse_Event; -- AKA pragma Inline (Get_Mouse); procedure Get_Event (Event : Mouse_Event; Y : out Line_Position; X : out Column_Position; Button : out Mouse_Button; State : out Button_State); -- !!! Warning: X and Y are screen coordinates. Due to ripped of lines they -- may not be identical to window coordinates. -- Not Implemented: Get_Event only reports one event, the C library -- version supports multiple events, e.g. {click-1, click-3} pragma Inline (Get_Event); -- ANCHOR(`ungetmouse()',`Unget_Mouse') procedure Unget_Mouse (Event : Mouse_Event); -- AKA pragma Inline (Unget_Mouse); -- ANCHOR(`wenclose()',`Enclosed_In_Window') function Enclosed_In_Window (Win : Window := Standard_Window; Event : Mouse_Event) return Boolean; -- AKA -- But : use event instead of screen coordinates. pragma Inline (Enclosed_In_Window); -- ANCHOR(`mouseinterval()',`Mouse_Interval') function Mouse_Interval (Msec : Natural := 200) return Natural; -- AKA pragma Inline (Mouse_Interval); private -- This can be as little as 32 bits (unsigned), or as long as the system's -- unsigned long. Declare it as the minimum size to handle all valid -- sizes. type Event_Mask is mod 4294967296; type Mouse_Event is record Id : Integer range Integer (Interfaces.C.short'First) .. Integer (Interfaces.C.short'Last); X, Y, Z : Integer range Integer (Interfaces.C.int'First) .. Integer (Interfaces.C.int'Last); Bstate : Event_Mask; end record; pragma Convention (C, Mouse_Event); for Mouse_Event use record Id at 0 range Curses_Constants.MEVENT_id_First .. Curses_Constants.MEVENT_id_Last; X at 0 range Curses_Constants.MEVENT_x_First .. Curses_Constants.MEVENT_x_Last; Y at 0 range Curses_Constants.MEVENT_y_First .. Curses_Constants.MEVENT_y_Last; Z at 0 range Curses_Constants.MEVENT_z_First .. Curses_Constants.MEVENT_z_Last; Bstate at 0 range Curses_Constants.MEVENT_bstate_First .. Curses_Constants.MEVENT_bstate_Last; end record; for Mouse_Event'Size use Curses_Constants.MEVENT_Size; Generation_Bit_Order : System.Bit_Order renames Curses_Constants.Bit_Order; BUTTON_CTRL : constant Event_Mask := Curses_Constants.BUTTON_CTRL; BUTTON_SHIFT : constant Event_Mask := Curses_Constants.BUTTON_SHIFT; BUTTON_ALT : constant Event_Mask := Curses_Constants.BUTTON_ALT; BUTTON1_EVENTS : constant Event_Mask := Curses_Constants.all_events_button_1; BUTTON2_EVENTS : constant Event_Mask := Curses_Constants.all_events_button_2; BUTTON3_EVENTS : constant Event_Mask := Curses_Constants.all_events_button_3; BUTTON4_EVENTS : constant Event_Mask := Curses_Constants.all_events_button_4; ALL_MOUSE_EVENTS : constant Event_Mask := Curses_Constants.ALL_MOUSE_EVENTS; No_Events : constant Event_Mask := 0; All_Events : constant Event_Mask := ALL_MOUSE_EVENTS; end Terminal_Interface.Curses.Mouse; ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-forms-form_user_data.ads.m40000644000175100001440000000744311315446021026356 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-forms-form_user_data__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Forms.Form_User_Data -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.15 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic type User is limited private; type User_Access is access User; package Terminal_Interface.Curses.Forms.Form_User_Data is pragma Preelaborate (Terminal_Interface.Curses.Forms.Form_User_Data); -- MANPAGE(`form_userptr.3x') -- ANCHOR(`set_form_userptr',`Set_User_Data') procedure Set_User_Data (Frm : Form; Data : User_Access); -- AKA pragma Inline (Set_User_Data); -- ANCHOR(`form_userptr',`Get_User_Data') procedure Get_User_Data (Frm : Form; Data : out User_Access); -- AKA -- ANCHOR(`form_userptr',`Get_User_Data') function Get_User_Data (Frm : Form) return User_Access; -- AKA -- Same as function pragma Inline (Get_User_Data); end Terminal_Interface.Curses.Forms.Form_User_Data; ncurses-6.0-20160213/Ada95/gen/html.m40000644000175100001440000000522710666376377015331 0ustar tomusersdnl*************************************************************************** dnl Copyright (c) 2000-2006,2007 Free Software Foundation, Inc. * dnl * dnl Permission is hereby granted, free of charge, to any person obtaining a * dnl copy of this software and associated documentation files (the * dnl "Software"), to deal in the Software without restriction, including * dnl without limitation the rights to use, copy, modify, merge, publish, * dnl distribute, distribute with modifications, sublicense, and/or sell * dnl copies of the Software, and to permit persons to whom the Software is * dnl furnished to do so, subject to the following conditions: * dnl * dnl The above copyright notice and this permission notice shall be included * dnl in all copies or substantial portions of the Software. * dnl * dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. * dnl * dnl Except as contained in this notice, the name(s) of the above copyright * dnl holders shall not be used in advertising or otherwise to promote the * dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl dnl $Id: html.m4,v 1.3 2007/09/01 23:59:59 tom Exp $ define(`ANCHORIDX',`0')dnl define(`MANPAGE',`define(`MANPG',$1)dnl |===================================================================== -- | Man page MANPG -- |=====================================================================')dnl define(`ANCHOR',`define(`ANCHORIDX',incr(ANCHORIDX))dnl `#'1A NAME="AFU`_'ANCHORIDX"`#'2dnl define(`CFUNAME',`$1')define(`AFUNAME',`$2')dnl |')dnl define(`AKA',``AKA': CFUNAME')dnl define(`ALIAS',``AKA': $1')dnl ncurses-6.0-20160213/Ada95/gen/terminal_interface-curses-menus.ads.m40000644000175100001440000005356112340207715023375 0ustar tomusers-- -*- ada -*- define(`HTMLNAME',`terminal_interface-curses-menus__ads.htm')dnl include(M4MACRO)dnl ------------------------------------------------------------------------------ -- -- -- GNAT ncurses Binding -- -- -- -- Terminal_Interface.Curses.Menu -- -- -- -- S P E C -- -- -- ------------------------------------------------------------------------------ -- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell -- -- copies of the Software, and to permit persons to whom the Software is -- -- furnished to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- -- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ -- Author: Juergen Pfeifer, 1996 -- Version Control: -- $Revision: 1.31 $ -- $Date: 2014/05/24 21:31:57 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System; with Ada.Characters.Latin_1; package Terminal_Interface.Curses.Menus is pragma Preelaborate (Terminal_Interface.Curses.Menus); pragma Linker_Options ("-lmenu" & Curses_Constants.DFT_ARG_SUFFIX); Space : Character renames Ada.Characters.Latin_1.Space; type Item is private; type Menu is private; --------------------------- -- Interface constants -- --------------------------- Null_Item : constant Item; Null_Menu : constant Menu; subtype Menu_Request_Code is Key_Code range (Key_Max + 1) .. (Key_Max + 17); -- The prefix M_ stands for "Menu Request" M_Left_Item : constant Menu_Request_Code := Key_Max + 1; M_Right_Item : constant Menu_Request_Code := Key_Max + 2; M_Up_Item : constant Menu_Request_Code := Key_Max + 3; M_Down_Item : constant Menu_Request_Code := Key_Max + 4; M_ScrollUp_Line : constant Menu_Request_Code := Key_Max + 5; M_ScrollDown_Line : constant Menu_Request_Code := Key_Max + 6; M_ScrollDown_Page : constant Menu_Request_Code := Key_Max + 7; M_ScrollUp_Page : constant Menu_Request_Code := Key_Max + 8; M_First_Item : constant Menu_Request_Code := Key_Max + 9; M_Last_Item : constant Menu_Request_Code := Key_Max + 10; M_Next_Item : constant Menu_Request_Code := Key_Max + 11; M_Previous_Item : constant Menu_Request_Code := Key_Max + 12; M_Toggle_Item : constant Menu_Request_Code := Key_Max + 13; M_Clear_Pattern : constant Menu_Request_Code := Key_Max + 14; M_Back_Pattern : constant Menu_Request_Code := Key_Max + 15; M_Next_Match : constant Menu_Request_Code := Key_Max + 16; M_Previous_Match : constant Menu_Request_Code := Key_Max + 17; -- For those who like the old 'C' names for the request codes REQ_LEFT_ITEM : Menu_Request_Code renames M_Left_Item; REQ_RIGHT_ITEM : Menu_Request_Code renames M_Right_Item; REQ_UP_ITEM : Menu_Request_Code renames M_Up_Item; REQ_DOWN_ITEM : Menu_Request_Code renames M_Down_Item; REQ_SCR_ULINE : Menu_Request_Code renames M_ScrollUp_Line; REQ_SCR_DLINE : Menu_Request_Code renames M_ScrollDown_Line; REQ_SCR_DPAGE : Menu_Request_Code renames M_ScrollDown_Page; REQ_SCR_UPAGE : Menu_Request_Code renames M_ScrollUp_Page; REQ_FIRST_ITEM : Menu_Request_Code renames M_First_Item; REQ_LAST_ITEM : Menu_Request_Code renames M_Last_Item; REQ_NEXT_ITEM : Menu_Request_Code renames M_Next_Item; REQ_PREV_ITEM : Menu_Request_Code renames M_Previous_Item; REQ_TOGGLE_ITEM : Menu_Request_Code renames M_Toggle_Item; REQ_CLEAR_PATTERN : Menu_Request_Code renames M_Clear_Pattern; REQ_BACK_PATTERN : Menu_Request_Code renames M_Back_Pattern; REQ_NEXT_MATCH : Menu_Request_Code renames M_Next_Match; REQ_PREV_MATCH : Menu_Request_Code renames M_Previous_Match; procedure Request_Name (Key : Menu_Request_Code; Name : out String); function Request_Name (Key : Menu_Request_Code) return String; -- Same as function ------------------ -- Exceptions -- ------------------ Menu_Exception : exception; -- -- Menu options -- type Menu_Option_Set is record One_Valued : Boolean; Show_Descriptions : Boolean; Row_Major_Order : Boolean; Ignore_Case : Boolean; Show_Matches : Boolean; Non_Cyclic : Boolean; end record; pragma Convention (C_Pass_By_Copy, Menu_Option_Set); for Menu_Option_Set use record One_Valued at 0 range Curses_Constants.O_ONEVALUE_First .. Curses_Constants.O_ONEVALUE_Last; Show_Descriptions at 0 range Curses_Constants.O_SHOWDESC_First .. Curses_Constants.O_SHOWDESC_Last; Row_Major_Order at 0 range Curses_Constants.O_ROWMAJOR_First .. Curses_Constants.O_ROWMAJOR_Last; Ignore_Case at 0 range Curses_Constants.O_IGNORECASE_First .. Curses_Constants.O_IGNORECASE_Last; Show_Matches at 0 range Curses_Constants.O_SHOWMATCH_First .. Curses_Constants.O_SHOWMATCH_Last; Non_Cyclic at 0 range Curses_Constants.O_NONCYCLIC_First .. Curses_Constants.O_NONCYCLIC_Last; end record; pragma Warnings (Off); for Menu_Option_Set'Size use Curses_Constants.Menu_Options_Size; pragma Warnings (On); function Default_Menu_Options return Menu_Option_Set; -- Initial default options for a menu. pragma Inline (Default_Menu_Options); -- -- Item options -- type Item_Option_Set is record Selectable : Boolean; end record; pragma Convention (C_Pass_By_Copy, Item_Option_Set); for Item_Option_Set use record Selectable at 0 range Curses_Constants.O_SELECTABLE_First .. Curses_Constants.O_SELECTABLE_Last; end record; pragma Warnings (Off); for Item_Option_Set'Size use Curses_Constants.Item_Options_Size; pragma Warnings (On); function Default_Item_Options return Item_Option_Set; -- Initial default options for an item. pragma Inline (Default_Item_Options); -- -- Item Array -- type Item_Array is array (Positive range <>) of aliased Item; pragma Convention (C, Item_Array); type Item_Array_Access is access Item_Array; procedure Free (IA : in out Item_Array_Access; Free_Items : Boolean := False); -- Release the memory for an allocated item array -- If Free_Items is True, call Delete() for all the items in -- the array. -- MANPAGE(`mitem_new.3x') -- ANCHOR(`new_item()',`Create') function Create (Name : String; Description : String := "") return Item; -- AKA -- Not inlined. -- ANCHOR(`new_item()',`New_Item') function New_Item (Name : String; Description : String := "") return Item renames Create; -- AKA -- ANCHOR(`free_item()',`Delete') procedure Delete (Itm : in out Item); -- AKA -- Resets Itm to Null_Item -- MANPAGE(`mitem_value.3x') -- ANCHOR(`set_item_value()',`Set_Value') procedure Set_Value (Itm : Item; Value : Boolean := True); -- AKA pragma Inline (Set_Value); -- ANCHOR(`item_value()',`Value') function Value (Itm : Item) return Boolean; -- AKA pragma Inline (Value); -- MANPAGE(`mitem_visible.3x') -- ANCHOR(`item_visible()',`Visible') function Visible (Itm : Item) return Boolean; -- AKA pragma Inline (Visible); -- MANPAGE(`mitem_opts.3x') -- ANCHOR(`set_item_opts()',`Set_Options') procedure Set_Options (Itm : Item; Options : Item_Option_Set); -- AKA -- An overloaded Set_Options is defined later. Pragma Inline appears there -- ANCHOR(`item_opts_on()',`Switch_Options') procedure Switch_Options (Itm : Item; Options : Item_Option_Set; On : Boolean := True); -- AKA -- ALIAS(`item_opts_off()') -- An overloaded Switch_Options is defined later. -- Pragma Inline appears there -- ANCHOR(`item_opts()',`Get_Options') procedure Get_Options (Itm : Item; Options : out Item_Option_Set); -- AKA -- ANCHOR(`item_opts()',`Get_Options') function Get_Options (Itm : Item := Null_Item) return Item_Option_Set; -- AKA -- An overloaded Get_Options is defined later. Pragma Inline appears there -- MANPAGE(`mitem_name.3x') -- ANCHOR(`item_name()',`Name') procedure Name (Itm : Item; Name : out String); -- AKA function Name (Itm : Item) return String; -- AKA -- Implemented as function pragma Inline (Name); -- ANCHOR(`item_description();',`Description') procedure Description (Itm : Item; Description : out String); -- AKA function Description (Itm : Item) return String; -- AKA -- Implemented as function pragma Inline (Description); -- MANPAGE(`mitem_current.3x') -- ANCHOR(`set_current_item()',`Set_Current') procedure Set_Current (Men : Menu; Itm : Item); -- AKA pragma Inline (Set_Current); -- ANCHOR(`current_item()',`Current') function Current (Men : Menu) return Item; -- AKA pragma Inline (Current); -- ANCHOR(`set_top_row()',`Set_Top_Row') procedure Set_Top_Row (Men : Menu; Line : Line_Position); -- AKA pragma Inline (Set_Top_Row); -- ANCHOR(`top_row()',`Top_Row') function Top_Row (Men : Menu) return Line_Position; -- AKA pragma Inline (Top_Row); -- ANCHOR(`item_index()',`Get_Index') function Get_Index (Itm : Item) return Positive; -- AKA -- Please note that in this binding we start the numbering of items -- with 1. So this is number is one more than you get from the low -- level call. pragma Inline (Get_Index); -- MANPAGE(`menu_post.3x') -- ANCHOR(`post_menu()',`Post') procedure Post (Men : Menu; Post : Boolean := True); -- AKA -- ALIAS(`unpost_menu()') pragma Inline (Post); -- MANPAGE(`menu_opts.3x') -- ANCHOR(`set_menu_opts()',`Set_Options') procedure Set_Options (Men : Menu; Options : Menu_Option_Set); -- AKA pragma Inline (Set_Options); -- ANCHOR(`menu_opts_on()',`Switch_Options') procedure Switch_Options (Men : Menu; Options : Menu_Option_Set; On : Boolean := True); -- AKA -- ALIAS(`menu_opts_off()') pragma Inline (Switch_Options); -- ANCHOR(`menu_opts()',`Get_Options') procedure Get_Options (Men : Menu; Options : out Menu_Option_Set); -- AKA -- ANCHOR(`menu_opts()',`Get_Options') function Get_Options (Men : Menu := Null_Menu) return Menu_Option_Set; -- AKA pragma Inline (Get_Options); -- MANPAGE(`menu_win.3x') -- ANCHOR(`set_menu_win()',`Set_Window') procedure Set_Window (Men : Menu; Win : Window); -- AKA pragma Inline (Set_Window); -- ANCHOR(`menu_win()',`Get_Window') function Get_Window (Men : Menu) return Window; -- AKA pragma Inline (Get_Window); -- ANCHOR(`set_menu_sub()',`Set_Sub_Window') procedure Set_Sub_Window (Men : Menu; Win : Window); -- AKA pragma Inline (Set_Sub_Window); -- ANCHOR(`menu_sub()',`Get_Sub_Window') function Get_Sub_Window (Men : Menu) return Window; -- AKA pragma Inline (Get_Sub_Window); -- ANCHOR(`scale_menu()',`Scale') procedure Scale (Men : Menu; Lines : out Line_Count; Columns : out Column_Count); -- AKA pragma Inline (Scale); -- MANPAGE(`menu_cursor.3x') -- ANCHOR(`pos_menu_cursor()',`Position_Cursor') procedure Position_Cursor (Men : Menu); -- AKA pragma Inline (Position_Cursor); -- MANPAGE(`menu_mark.3x') -- ANCHOR(`set_menu_mark()',`Set_Mark') procedure Set_Mark (Men : Menu; Mark : String); -- AKA pragma Inline (Set_Mark); -- ANCHOR(`menu_mark()',`Mark') procedure Mark (Men : Menu; Mark : out String); -- AKA function Mark (Men : Menu) return String; -- AKA -- Implemented as function pragma Inline (Mark); -- MANPAGE(`menu_attributes.3x') -- ANCHOR(`set_menu_fore()',`Set_Foreground') procedure Set_Foreground (Men : Menu; Fore : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First); -- AKA pragma Inline (Set_Foreground); -- ANCHOR(`menu_fore()',`Foreground') procedure Foreground (Men : Menu; Fore : out Character_Attribute_Set); -- AKA -- ANCHOR(`menu_fore()',`Foreground') procedure Foreground (Men : Menu; Fore : out Character_Attribute_Set; Color : out Color_Pair); -- AKA pragma Inline (Foreground); -- ANCHOR(`set_menu_back()',`Set_Background') procedure Set_Background (Men : Menu; Back : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First); -- AKA pragma Inline (Set_Background); -- ANCHOR(`menu_back()',`Background') procedure Background (Men : Menu; Back : out Character_Attribute_Set); -- AKA -- ANCHOR(`menu_back()',`Background') procedure Background (Men : Menu; Back : out Character_Attribute_Set; Color : out Color_Pair); -- AKA pragma Inline (Background); -- ANCHOR(`set_menu_grey()',`Set_Grey') procedure Set_Grey (Men : Menu; Grey : Character_Attribute_Set := Normal_Video; Color : Color_Pair := Color_Pair'First); -- AKA pragma Inline (Set_Grey); -- ANCHOR(`menu_grey()',`Grey') procedure Grey (Men : Menu; Grey : out Character_Attribute_Set); -- AKA -- ANCHOR(`menu_grey()',`Grey') procedure Grey (Men : Menu; Grey : out Character_Attribute_Set; Color : out Color_Pair); -- AKA pragma Inline (Grey); -- ANCHOR(`set_menu_pad()',`Set_Pad_Character') procedure Set_Pad_Character (Men : Menu; Pad : Character := Space); -- AKA pragma Inline (Set_Pad_Character); -- ANCHOR(`menu_pad()',`Pad_Character') procedure Pad_Character (Men : Menu; Pad : out Character); -- AKA pragma Inline (Pad_Character); -- MANPAGE(`menu_spacing.3x') -- ANCHOR(`set_menu_spacing()',`Set_Spacing') procedure Set_Spacing (Men : Menu; Descr : Column_Position := 0; Row : Line_Position := 0; Col : Column_Position := 0); -- AKA pragma Inline (Set_Spacing); -- ANCHOR(`menu_spacing()',`Spacing') procedure Spacing (Men : Menu; Descr : out Column_Position; Row : out Line_Position; Col : out Column_Position); -- AKA pragma Inline (Spacing); -- MANPAGE(`menu_pattern.3x') -- ANCHOR(`set_menu_pattern()',`Set_Pattern') function Set_Pattern (Men : Menu; Text : String) return Boolean; -- AKA -- Return TRUE if the pattern matches, FALSE otherwise pragma Inline (Set_Pattern); -- ANCHOR(`menu_pattern()',`Pattern') procedure Pattern (Men : Menu; Text : out String); -- AKA pragma Inline (Pattern); -- MANPAGE(`menu_format.3x') -- ANCHOR(`set_menu_format()',`Set_Format') procedure Set_Format (Men : Menu; Lines : Line_Count; Columns : Column_Count); -- Not implemented: 0 argument for Lines or Columns; -- instead use Format to get the current sizes -- The default format is 16 rows, 1 column. Calling -- set_menu_format with a null menu pointer will change this -- default. A zero row or column argument to set_menu_format -- is interpreted as a request not to change the current -- value. -- AKA pragma Inline (Set_Format); -- ANCHOR(`menu_format()',`Format') procedure Format (Men : Menu; Lines : out Line_Count; Columns : out Column_Count); -- AKA pragma Inline (Format); -- MANPAGE(`menu_hook.3x') type Menu_Hook_Function is access procedure (Men : Menu); pragma Convention (C, Menu_Hook_Function); -- ANCHOR(`set_item_init()',`Set_Item_Init_Hook') procedure Set_Item_Init_Hook (Men : Menu; Proc : Menu_Hook_Function); -- AKA pragma Inline (Set_Item_Init_Hook); -- ANCHOR(`set_item_term()',`Set_Item_Term_Hook') procedure Set_Item_Term_Hook (Men : Menu; Proc : Menu_Hook_Function); -- AKA pragma Inline (Set_Item_Term_Hook); -- ANCHOR(`set_menu_init()',`Set_Menu_Init_Hook') procedure Set_Menu_Init_Hook (Men : Menu; Proc : Menu_Hook_Function); -- AKA pragma Inline (Set_Menu_Init_Hook); -- ANCHOR(`set_menu_term()',`Set_Menu_Term_Hook') procedure Set_Menu_Term_Hook (Men : Menu; Proc : Menu_Hook_Function); -- AKA pragma Inline (Set_Menu_Term_Hook); -- ANCHOR(`item_init()',`Get_Item_Init_Hook') function Get_Item_Init_Hook (Men : Menu) return Menu_Hook_Function; -- AKA pragma Inline (Get_Item_Init_Hook); -- ANCHOR(`item_term()',`Get_Item_Term_Hook') function Get_Item_Term_Hook (Men : Menu) return Menu_Hook_Function; -- AKA pragma Inline (Get_Item_Term_Hook); -- ANCHOR(`menu_init()',`Get_Menu_Init_Hook') function Get_Menu_Init_Hook (Men : Menu) return Menu_Hook_Function; -- AKA pragma Inline (Get_Menu_Init_Hook); -- ANCHOR(`menu_term()',`Get_Menu_Term_Hook') function Get_Menu_Term_Hook (Men : Menu) return Menu_Hook_Function; -- AKA pragma Inline (Get_Menu_Term_Hook); -- MANPAGE(`menu_items.3x') -- ANCHOR(`set_menu_items()',`Redefine') procedure Redefine (Men : Menu; Items : Item_Array_Access); -- AKA pragma Inline (Redefine); procedure Set_Items (Men : Menu; Items : Item_Array_Access) renames Redefine; -- pragma Inline (Set_Items); -- ANCHOR(`menu_items()',`Items') function Items (Men : Menu; Index : Positive) return Item; -- AKA pragma Inline (Items); -- ANCHOR(`item_count()',`Item_Count') function Item_Count (Men : Menu) return Natural; -- AKA pragma Inline (Item_Count); -- MANPAGE(`menu_new.3x') -- ANCHOR(`new_menu()',`Create') function Create (Items : Item_Array_Access) return Menu; -- AKA -- Not inlined function New_Menu (Items : Item_Array_Access) return Menu renames Create; -- ANCHOR(`free_menu()',`Delete') procedure Delete (Men : in out Menu); -- AKA -- Reset Men to Null_Menu -- Not inlined -- MANPAGE(`menu_driver.3x') type Driver_Result is (Menu_Ok, Request_Denied, Unknown_Request, No_Match); -- ANCHOR(`menu_driver()',`Driver') function Driver (Men : Menu; Key : Key_Code) return Driver_Result; -- AKA -- Driver is not inlined -- ANCHOR(`menu_requestname.3x') -- Not Implemented: menu_request_name, menu_request_by_name ------------------------------------------------------------------------------- private type Item is new System.Storage_Elements.Integer_Address; type Menu is new System.Storage_Elements.Integer_Address; Null_Item : constant Item := 0; Null_Menu : constant Menu := 0; end Terminal_Interface.Curses.Menus; ncurses-6.0-20160213/Ada95/doc/0000755000175100001440000000000012560514435014071 5ustar tomusersncurses-6.0-20160213/Ada95/doc/Makefile.in0000644000175100001440000000621612560514435016143 0ustar tomusers# $Id: Makefile.in,v 1.4 2015/08/05 23:15:41 tom Exp $ ############################################################################## # Copyright (c) 2011-2012,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey # # Makefile for AdaCurses manual pages. SHELL = @SHELL@ VPATH = @srcdir@ DESTDIR = @DESTDIR@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ mandir = @mandir@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ DFT_ARG_SUFFIX = @DFT_ARG_SUFFIX@ THIS = AdaCurses DOCDIR = $(DESTDIR)$(datadir)/doc/$(THIS) MANDIR = $(DESTDIR)$(mandir)/man1 all \ sources \ depend \ tags : $(DOCDIR) \ $(MANDIR) : mkdir -p $@ install install.man : $(MANDIR) $(INSTALL_DATA) adacurses${DFT_ARG_SUFFIX}-config.1 $(MANDIR) uninstall uninstall.man : -rm -f $(MANDIR)/adacurses${DFT_ARG_SUFFIX}-config.1 # HTML documentation is optional, usually in a separate package. install.html : $(DOCDIR) cd $(srcdir) && tar -cf - *.htm* ada | tar -C $(DOCDIR) -xf - uninstall.html : -rm -rf $(DOCDIR) mostlyclean : -rm -f core tags TAGS *~ *.bak *.ln *.atac trace clean: mostlyclean distclean realclean: clean -rm -f Makefile *-config.1 ncurses-6.0-20160213/Ada95/mk-1st.awk0000644000175100001440000000662111530702161015140 0ustar tomusers# $Id: mk-1st.awk,v 1.4 2011/02/22 09:40:01 tom Exp $ ############################################################################## # Copyright (c) 2010,2011 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey # # Generate compile-rules for the Ada95 modules that we are using in libraries # or programs. This script is used for older versions of gnatmake, which do # not build libraries reliably, e.g., gnatmake 3.15. # # Fields in src/modules: # $1 = module name # $2 = directory where spec-dependency ".ads" is found # $3 = directory where body-dependency ".adb" is found # $4 = unit to compile (spec or body) # BEGIN { printf "\n"; printf "# generated by Ada95/mk-1st.awk\n"; } /^[#]/ { next } /^$/ { next } { printf "\n"; printf "%s.o :", $1; if ( $2 == "none" ) { pre_spec = ""; } else if ( $2 == "." ) { pre_spec = ""; printf " \\\n\t\t%s.ads", $1; } else { pre_spec = sprintf("%s/", $2); printf " \\\n\t\t%s%s.ads", pre_spec, $1; } if ( $3 == "none" ) { pre_body = ""; } else if ( $3 == "." ) { pre_body = ""; printf " \\\n\t\t%s.adb", $1; } else { pre_body = sprintf("%s/", $3); printf " \\\n\t\t%s%s.adb", pre_body, $1; printf " \\\n\t\t$(BASEDEPS)"; } if ( $4 == "spec" ) { suffix = "ads"; prefix = pre_spec; } else { suffix = "adb"; prefix = pre_body; } printf "\n"; printf "\t$(ADA) $(ADAFLAGS) -c -o $@ %s%s.%s\n", prefix, $1, suffix } END { print "" } ncurses-6.0-20160213/menu/0000755000175100001440000000000012650770520013424 5ustar tomusersncurses-6.0-20160213/menu/m_item_nam.c0000644000175100001440000000742611326664012015703 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_item_nam * * Get menus item name and description * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_item_nam.c,v 1.15 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : char *item_name(const ITEM *item) | | Description : Return name of menu item | | Return Values : See above; returns NULL if item is invalid +--------------------------------------------------------------------------*/ NCURSES_EXPORT(const char *) item_name(const ITEM * item) { T((T_CALLED("item_name(%p)"), (const void *)item)); returnCPtr((item) ? item->name.str : (char *)0); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : char *item_description(const ITEM *item) | | Description : Returns description of item | | Return Values : See above; Returns NULL if item is invalid +--------------------------------------------------------------------------*/ NCURSES_EXPORT(const char *) item_description(const ITEM * item) { T((T_CALLED("item_description(%p)"), (const void *)item)); returnCPtr((item) ? item->description.str : (char *)0); } /* m_item_nam.c ends here */ ncurses-6.0-20160213/menu/m_sub.c0000644000175100001440000001054711326664013014702 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_sub * * Menus subwindow association routines * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_sub.c,v 1.12 2010/01/23 21:20:11 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_sub(MENU *menu, WINDOW *win) | | Description : Sets the subwindow of the menu. | | Return Values : E_OK - success | E_POSTED - menu is already posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_menu_sub(MENU * menu, WINDOW *win) { T((T_CALLED("set_menu_sub(%p,%p)"), (void *)menu, (void *)win)); if (menu) { if (menu->status & _POSTED) RETURN(E_POSTED); else #if NCURSES_SP_FUNCS { /* We ensure that usersub is never null. So even if a null WINDOW parameter is passed, we store the SCREENS stdscr. The only MENU that can have a null usersub is the static _nc_default_Menu. */ SCREEN *sp = _nc_screen_of(menu->usersub); menu->usersub = win ? win : sp->_stdscr; _nc_Calculate_Item_Length_and_Width(menu); } #else menu->usersub = win; #endif } else _nc_Default_Menu.usersub = win; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : WINDOW* menu_sub(const MENU *menu) | | Description : Returns a pointer to the subwindow of the menu | | Return Values : NULL on error, otherwise a pointer to the window +--------------------------------------------------------------------------*/ NCURSES_EXPORT(WINDOW *) menu_sub(const MENU * menu) { const MENU *m = Normalize_Menu(menu); T((T_CALLED("menu_sub(%p)"), (const void *)menu)); returnWin(Get_Menu_Window(m)); } /* m_sub.c ends here */ ncurses-6.0-20160213/menu/headers0000644000175100001440000000427510543525011014762 0ustar tomusers############################################################################## # Copyright (c) 1998,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996 # $(srcdir)/eti.h $(srcdir)/menu.h # vile:makemode ncurses-6.0-20160213/menu/menu.priv.h0000644000175100001440000001554512425171144015527 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /* $Id: menu.priv.h,v 1.25 2014/11/01 14:47:00 tom Exp $ */ /*************************************************************************** * Module menu.priv.h * * Top level private header file for all libnmenu modules * ***************************************************************************/ #ifndef MENU_PRIV_H_incl #define MENU_PRIV_H_incl 1 /* *INDENT-OFF* */ #include "curses.priv.h" #include "mf_common.h" #include "menu.h" /* Backspace code */ #define BS (8) extern NCURSES_EXPORT_VAR(ITEM) _nc_Default_Item; extern NCURSES_EXPORT_VAR(MENU) _nc_Default_Menu; /* Normalize item to default if none was given */ #define Normalize_Item( item ) ((item)=(item)?(item):&_nc_Default_Item) /* Normalize menu to default if none was given */ #define Normalize_Menu( menu ) ((menu)=(menu)?(menu):&_nc_Default_Menu) #define Get_Menu_Screen( menu ) (menu->userwin ? \ _nc_screen_of(menu->userwin) : CURRENT_SCREEN) /* Get the user defined (framing) window of the menu */ #define Get_Menu_UserWin(menu) ((menu)->userwin ? \ (menu)->userwin : CURRENT_SCREEN->_stdscr) /* Normalize menu window */ #define Get_Menu_Window( menu ) \ ((menu)->usersub ? (menu)->usersub : Get_Menu_UserWin(menu)) /* menu specific status flags */ #define _LINK_NEEDED (0x04) #define _MARK_ALLOCATED (0x08) #define ALL_MENU_OPTS ( \ O_ONEVALUE | \ O_SHOWDESC | \ O_ROWMAJOR | \ O_IGNORECASE | \ O_SHOWMATCH | \ O_NONCYCLIC ) #define ALL_ITEM_OPTS (O_SELECTABLE) /* Move to the window position of an item and draw it */ #define Move_And_Post_Item(menu,item) \ {wmove((menu)->win,(menu)->spc_rows*(item)->y,((menu)->itemlen+(menu)->spc_cols)*(item)->x);\ _nc_Post_Item((menu),(item));} #define Move_To_Current_Item(menu,item) \ if ( (item) != (menu)->curitem)\ {\ Move_And_Post_Item(menu,item);\ Move_And_Post_Item(menu,(menu)->curitem);\ } /* This macro ensures, that the item becomes visible, if possible with the specified row as the top row of the window. If this is not possible, the top row will be adjusted and the value is stored in the row argument. */ #define Adjust_Current_Item(menu,row,item) \ { if ((item)->y < row) \ row = (short) (item)->y; \ if ( (item)->y >= (row + (menu)->arows) ) \ row = (short) (( (item)->y < ((menu)->rows - row) ) \ ? (item)->y \ : (menu)->rows - (menu)->arows); \ _nc_New_TopRow_and_CurrentItem(menu,row,item); } /* Reset the match pattern buffer */ #define Reset_Pattern(menu) \ { (menu)->pindex = 0; \ (menu)->pattern[0] = '\0'; } #define UChar(c) ((unsigned char)(c)) /* Internal functions. */ extern NCURSES_EXPORT(void) _nc_Draw_Menu (const MENU *); extern NCURSES_EXPORT(void) _nc_Show_Menu (const MENU *); extern NCURSES_EXPORT(void) _nc_Calculate_Item_Length_and_Width (MENU *); extern NCURSES_EXPORT(int) _nc_Calculate_Text_Width(const TEXT *); extern NCURSES_EXPORT(void) _nc_Post_Item (const MENU *, const ITEM *); extern NCURSES_EXPORT(bool) _nc_Connect_Items (MENU *, ITEM **); extern NCURSES_EXPORT(void) _nc_Disconnect_Items (MENU *); extern NCURSES_EXPORT(void) _nc_New_TopRow_and_CurrentItem (MENU *,int, ITEM *); extern NCURSES_EXPORT(void) _nc_Link_Items (MENU *); extern NCURSES_EXPORT(int) _nc_Match_Next_Character_In_Item_Name (MENU*,int,ITEM**); extern NCURSES_EXPORT(int) _nc_menu_cursor_pos (const MENU* menu, const ITEM* item, int* pY, int* pX); #ifdef TRACE #define returnItem(code) TRACE_RETURN1(code,item) #define returnItemPtr(code) TRACE_RETURN1(code,item_ptr) #define returnItemOpts(code) TRACE_RETURN1(code,item_opts) #define returnMenu(code) TRACE_RETURN1(code,menu) #define returnMenuHook(code) TRACE_RETURN1(code,menu_hook) #define returnMenuOpts(code) TRACE_RETURN1(code,menu_opts) extern NCURSES_EXPORT(ITEM *) _nc_retrace_item (ITEM *); extern NCURSES_EXPORT(ITEM **) _nc_retrace_item_ptr (ITEM **); extern NCURSES_EXPORT(Item_Options) _nc_retrace_item_opts (Item_Options); extern NCURSES_EXPORT(MENU *) _nc_retrace_menu (MENU *); extern NCURSES_EXPORT(Menu_Hook) _nc_retrace_menu_hook (Menu_Hook); extern NCURSES_EXPORT(Menu_Options) _nc_retrace_menu_opts (Menu_Options); #else /* !TRACE */ #define returnItem(code) return code #define returnItemPtr(code) return code #define returnItemOpts(code) return code #define returnMenu(code) return code #define returnMenuHook(code) return code #define returnMenuOpts(code) return code #endif /* TRACE/!TRACE */ /* *INDENT-ON* */ #endif /* MENU_PRIV_H_incl */ ncurses-6.0-20160213/menu/m_item_val.c0000644000175100001440000001105311326664012015701 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_item_val * * Set and get menus item values * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_item_val.c,v 1.15 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_item_value(ITEM *item, int value) | | Description : Programmatically set the item's selection value. This is | only allowed if the item is selectable at all and if | it is not connected to a single-valued menu. | If the item is connected to a posted menu, the menu | will be redisplayed. | | Return Values : E_OK - success | E_REQUEST_DENIED - not selectable or single valued menu +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_item_value(ITEM * item, bool value) { MENU *menu; T((T_CALLED("set_item_value(%p,%d)"), (void *)item, value)); if (item) { menu = item->imenu; if ((!(item->opt & O_SELECTABLE)) || (menu && (menu->opt & O_ONEVALUE))) RETURN(E_REQUEST_DENIED); if (item->value ^ value) { item->value = value ? TRUE : FALSE; if (menu) { if (menu->status & _POSTED) { Move_And_Post_Item(menu, item); _nc_Show_Menu(menu); } } } } else _nc_Default_Item.value = value; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : bool item_value(const ITEM *item) | | Description : Return the selection value of the item | | Return Values : TRUE - if item is selected | FALSE - if item is not selected +--------------------------------------------------------------------------*/ NCURSES_EXPORT(bool) item_value(const ITEM * item) { T((T_CALLED("item_value(%p)"), (const void *)item)); returnBool((Normalize_Item(item)->value) ? TRUE : FALSE); } /* m_item_val.c ends here */ ncurses-6.0-20160213/menu/m_pattern.c0000644000175100001440000001212211326664012015554 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_pattern * * Pattern matching handling * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_pattern.c,v 1.16 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : char *menu_pattern(const MENU *menu) | | Description : Return the value of the pattern buffer. | | Return Values : NULL - if there is no pattern buffer allocated | EmptyString - if there is a pattern buffer but no | pattern is stored | PatternString - as expected +--------------------------------------------------------------------------*/ NCURSES_EXPORT(char *) menu_pattern(const MENU * menu) { static char empty[] = ""; T((T_CALLED("menu_pattern(%p)"), (const void *)menu)); returnPtr(menu ? (menu->pattern ? menu->pattern : empty) : 0); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_pattern(MENU *menu, const char *p) | | Description : Set the match pattern for a menu and position to the | first item that matches. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid menu or pattern pointer | E_BAD_STATE - menu in user hook routine | E_NOT_CONNECTED - no items connected to menu | E_NO_MATCH - no item matches pattern +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_menu_pattern(MENU * menu, const char *p) { ITEM *matchitem; int matchpos; T((T_CALLED("set_menu_pattern(%p,%s)"), (void *)menu, _nc_visbuf(p))); if (!menu || !p) RETURN(E_BAD_ARGUMENT); if (!(menu->items)) RETURN(E_NOT_CONNECTED); if (menu->status & _IN_DRIVER) RETURN(E_BAD_STATE); Reset_Pattern(menu); if (!(*p)) { pos_menu_cursor(menu); RETURN(E_OK); } if (menu->status & _LINK_NEEDED) _nc_Link_Items(menu); matchpos = menu->toprow; matchitem = menu->curitem; assert(matchitem); while (*p) { if (!isprint(UChar(*p)) || (_nc_Match_Next_Character_In_Item_Name(menu, *p, &matchitem) != E_OK)) { Reset_Pattern(menu); pos_menu_cursor(menu); RETURN(E_NO_MATCH); } p++; } /* This is reached if there was a match. So we position to the new item */ Adjust_Current_Item(menu, matchpos, matchitem); RETURN(E_OK); } /* m_pattern.c ends here */ ncurses-6.0-20160213/menu/m_item_opt.c0000644000175100001440000001413211326664012015722 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_item_opt * * Menus item option routines * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_item_opt.c,v 1.18 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_item_opts(ITEM *item, Item_Options opts) | | Description : Set the options of the item. If there are relevant | changes, the item is connected and the menu is posted, | the menu will be redisplayed. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid item options +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_item_opts(ITEM * item, Item_Options opts) { T((T_CALLED("set_menu_opts(%p,%d)"), (void *)item, opts)); opts &= ALL_ITEM_OPTS; if (opts & ~ALL_ITEM_OPTS) RETURN(E_BAD_ARGUMENT); if (item) { if (item->opt != opts) { MENU *menu = item->imenu; item->opt = opts; if ((!(opts & O_SELECTABLE)) && item->value) item->value = FALSE; if (menu && (menu->status & _POSTED)) { Move_And_Post_Item(menu, item); _nc_Show_Menu(menu); } } } else _nc_Default_Item.opt = opts; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int item_opts_off(ITEM *item, Item_Options opts) | | Description : Switch of the options for this item. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid options +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) item_opts_off(ITEM * item, Item_Options opts) { ITEM *citem = item; /* use a copy because set_item_opts must detect NULL item itself to adjust its behavior */ T((T_CALLED("item_opts_off(%p,%d)"), (void *)item, opts)); if (opts & ~ALL_ITEM_OPTS) RETURN(E_BAD_ARGUMENT); else { Normalize_Item(citem); opts = citem->opt & ~(opts & ALL_ITEM_OPTS); returnCode(set_item_opts(item, opts)); } } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int item_opts_on(ITEM *item, Item_Options opts) | | Description : Switch on the options for this item. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid options +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) item_opts_on(ITEM * item, Item_Options opts) { ITEM *citem = item; /* use a copy because set_item_opts must detect NULL item itself to adjust its behavior */ T((T_CALLED("item_opts_on(%p,%d)"), (void *)item, opts)); opts &= ALL_ITEM_OPTS; if (opts & ~ALL_ITEM_OPTS) RETURN(E_BAD_ARGUMENT); else { Normalize_Item(citem); opts = citem->opt | opts; returnCode(set_item_opts(item, opts)); } } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : Item_Options item_opts(const ITEM *item) | | Description : Switch of the options for this item. | | Return Values : Items options +--------------------------------------------------------------------------*/ NCURSES_EXPORT(Item_Options) item_opts(const ITEM * item) { T((T_CALLED("item_opts(%p)"), (const void *)item)); returnItemOpts(ALL_ITEM_OPTS & Normalize_Item(item)->opt); } /* m_item_opt.c ends here */ ncurses-6.0-20160213/menu/m_items.c0000644000175100001440000001166411326664012015232 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_items * * Connect and disconnect items to and from menus * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_items.c,v 1.17 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_items(MENU *menu, ITEM **items) | | Description : Sets the item pointer array connected to menu. | | Return Values : E_OK - success | E_POSTED - menu is already posted | E_CONNECTED - one or more items are already connected | to another menu. | E_BAD_ARGUMENT - An incorrect menu or item array was | passed to the function +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_menu_items(MENU * menu, ITEM ** items) { T((T_CALLED("set_menu_items(%p,%p)"), (void *)menu, (void *)items)); if (!menu || (items && !(*items))) RETURN(E_BAD_ARGUMENT); if (menu->status & _POSTED) RETURN(E_POSTED); if (menu->items) _nc_Disconnect_Items(menu); if (items) { if (!_nc_Connect_Items(menu, items)) RETURN(E_CONNECTED); } menu->items = items; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : ITEM **menu_items(const MENU *menu) | | Description : Returns a pointer to the item pointer array of the menu | | Return Values : NULL on error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(ITEM **) menu_items(const MENU * menu) { T((T_CALLED("menu_items(%p)"), (const void *)menu)); returnItemPtr(menu ? menu->items : (ITEM **) 0); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int item_count(const MENU *menu) | | Description : Get the number of items connected to the menu. If the | menu pointer is NULL we return -1. | | Return Values : Number of items or -1 to indicate error. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) item_count(const MENU * menu) { T((T_CALLED("item_count(%p)"), (const void *)menu)); returnCode(menu ? menu->nitems : -1); } /* m_items.c ends here */ ncurses-6.0-20160213/menu/m_format.c0000644000175100001440000001252211764761032015401 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_format * * Set and get maximum numbers of rows and columns in menus * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_format.c,v 1.18 2012/06/09 23:54:02 tom Exp $") #define minimum(a,b) ((a)<(b) ? (a): (b)) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_format(MENU *menu, int rows, int cols) | | Description : Sets the maximum number of rows and columns of items | that may be displayed at one time on a menu. If the | menu contains more items than can be displayed at | once, the menu will be scrollable. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid values passed | E_NOT_CONNECTED - there are no items connected | E_POSTED - the menu is already posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_menu_format(MENU * menu, int rows, int cols) { int total_rows, total_cols; T((T_CALLED("set_menu_format(%p,%d,%d)"), (void *)menu, rows, cols)); if (rows < 0 || cols < 0) RETURN(E_BAD_ARGUMENT); if (menu) { if (menu->status & _POSTED) RETURN(E_POSTED); if (!(menu->items)) RETURN(E_NOT_CONNECTED); if (rows == 0) rows = menu->frows; if (cols == 0) cols = menu->fcols; if (menu->pattern) Reset_Pattern(menu); menu->frows = (short)rows; menu->fcols = (short)cols; assert(rows > 0 && cols > 0); total_rows = (menu->nitems - 1) / cols + 1; total_cols = (menu->opt & O_ROWMAJOR) ? minimum(menu->nitems, cols) : (menu->nitems - 1) / total_rows + 1; menu->rows = (short)total_rows; menu->cols = (short)total_cols; menu->arows = (short)minimum(total_rows, rows); menu->toprow = 0; menu->curitem = *(menu->items); assert(menu->curitem); SetStatus(menu, _LINK_NEEDED); _nc_Calculate_Item_Length_and_Width(menu); } else { if (rows > 0) _nc_Default_Menu.frows = (short)rows; if (cols > 0) _nc_Default_Menu.fcols = (short)cols; } RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void menu_format(const MENU *menu, int *rows, int *cols) | | Description : Returns the maximum number of rows and columns that may | be displayed at one time on menu. | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) menu_format(const MENU * menu, int *rows, int *cols) { if (rows) *rows = Normalize_Menu(menu)->frows; if (cols) *cols = Normalize_Menu(menu)->fcols; } /* m_format.c ends here */ ncurses-6.0-20160213/menu/m_scale.c0000644000175100001440000000722411326664012015175 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_scale * * Menu scaling routine * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_scale.c,v 1.10 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int scale_menu(const MENU *menu) | | Description : Returns the minimum window size necessary for the | subwindow of menu. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid menu pointer | E_NOT_CONNECTED - no items are connected to menu +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) scale_menu(const MENU * menu, int *rows, int *cols) { T((T_CALLED("scale_menu(%p,%p,%p)"), (const void *)menu, (void *)rows, (void *)cols)); if (!menu) RETURN(E_BAD_ARGUMENT); if (menu->items && *(menu->items)) { if (rows) *rows = menu->height; if (cols) *cols = menu->width; RETURN(E_OK); } else RETURN(E_NOT_CONNECTED); } /* m_scale.c ends here */ ncurses-6.0-20160213/menu/llib-lmenut0000644000175100001440000002537012563672565015617 0ustar tomusers/**************************************************************************** * Copyright (c) 2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2010-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./m_attribs.c */ #include #undef set_menu_fore int set_menu_fore( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_fore chtype menu_fore( const MENU *menu) { return(*(chtype *)0); } #undef set_menu_back int set_menu_back( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_back chtype menu_back( const MENU *menu) { return(*(chtype *)0); } #undef set_menu_grey int set_menu_grey( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_grey chtype menu_grey( const MENU *menu) { return(*(chtype *)0); } /* ./m_cursor.c */ #undef _nc_menu_cursor_pos int _nc_menu_cursor_pos( const MENU *menu, const ITEM *item, int *pY, int *pX) { return(*(int *)0); } #undef pos_menu_cursor int pos_menu_cursor( const MENU *menu) { return(*(int *)0); } /* ./m_driver.c */ #undef _nc_Match_Next_Character_In_Item_Name int _nc_Match_Next_Character_In_Item_Name( MENU *menu, int ch, ITEM **item) { return(*(int *)0); } #undef menu_driver int menu_driver( MENU *menu, int c) { return(*(int *)0); } /* ./m_format.c */ #undef set_menu_format int set_menu_format( MENU *menu, int rows, int cols) { return(*(int *)0); } #undef menu_format void menu_format( const MENU *menu, int *rows, int *cols) { /* void */ } /* ./m_global.c */ #undef _nc_Default_Menu MENU _nc_Default_Menu; #undef _nc_Default_Item ITEM _nc_Default_Item; #undef _nc_Connect_Items NCURSES_BOOL _nc_Connect_Items( MENU *menu, ITEM **items) { return(*(NCURSES_BOOL *)0); } #undef _nc_Disconnect_Items void _nc_Disconnect_Items( MENU *menu) { /* void */ } #undef _nc_Calculate_Text_Width int _nc_Calculate_Text_Width( const TEXT *item) { return(*(int *)0); } #undef _nc_Calculate_Item_Length_and_Width void _nc_Calculate_Item_Length_and_Width( MENU *menu) { /* void */ } #undef _nc_Link_Items void _nc_Link_Items( MENU *menu) { /* void */ } #undef _nc_Show_Menu void _nc_Show_Menu( const MENU *menu) { /* void */ } #undef _nc_New_TopRow_and_CurrentItem void _nc_New_TopRow_and_CurrentItem( MENU *menu, int new_toprow, ITEM *new_current_item) { /* void */ } /* ./m_hook.c */ #undef set_menu_init int set_menu_init( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef menu_init Menu_Hook menu_init( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_menu_term int set_menu_term( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef menu_term Menu_Hook menu_term( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_item_init int set_item_init( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef item_init Menu_Hook item_init( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_item_term int set_item_term( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef item_term Menu_Hook item_term( const MENU *menu) { return(*(Menu_Hook *)0); } /* ./m_item_cur.c */ #undef set_current_item int set_current_item( MENU *menu, ITEM *item) { return(*(int *)0); } #undef current_item ITEM *current_item( const MENU *menu) { return(*(ITEM **)0); } #undef item_index int item_index( const ITEM *item) { return(*(int *)0); } /* ./m_item_nam.c */ #undef item_name const char *item_name( const ITEM *item) { return(*(const char **)0); } #undef item_description const char *item_description( const ITEM *item) { return(*(const char **)0); } /* ./m_item_new.c */ #undef new_item ITEM *new_item( const char *name, const char *description) { return(*(ITEM **)0); } #undef free_item int free_item( ITEM *item) { return(*(int *)0); } #undef set_menu_mark int set_menu_mark( MENU *menu, const char *mark) { return(*(int *)0); } #undef menu_mark const char *menu_mark( const MENU *menu) { return(*(const char **)0); } /* ./m_item_opt.c */ #undef set_item_opts int set_item_opts( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts_off int item_opts_off( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts_on int item_opts_on( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts Item_Options item_opts( const ITEM *item) { return(*(Item_Options *)0); } /* ./m_item_top.c */ #undef set_top_row int set_top_row( MENU *menu, int row) { return(*(int *)0); } #undef top_row int top_row( const MENU *menu) { return(*(int *)0); } /* ./m_item_use.c */ #undef set_item_userptr int set_item_userptr( ITEM *item, void *userptr) { return(*(int *)0); } #undef item_userptr void *item_userptr( const ITEM *item) { return(*(void **)0); } /* ./m_item_val.c */ #undef set_item_value int set_item_value( ITEM *item, NCURSES_BOOL value) { return(*(int *)0); } #undef item_value NCURSES_BOOL item_value( const ITEM *item) { return(*(NCURSES_BOOL *)0); } /* ./m_item_vis.c */ #undef item_visible NCURSES_BOOL item_visible( const ITEM *item) { return(*(NCURSES_BOOL *)0); } /* ./m_items.c */ #undef set_menu_items int set_menu_items( MENU *menu, ITEM **items) { return(*(int *)0); } #undef menu_items ITEM **menu_items( const MENU *menu) { return(*(ITEM ***)0); } #undef item_count int item_count( const MENU *menu) { return(*(int *)0); } /* ./m_new.c */ #undef new_menu_sp MENU *new_menu_sp( SCREEN *sp, ITEM **items) { return(*(MENU **)0); } #undef new_menu MENU *new_menu( ITEM **items) { return(*(MENU **)0); } #undef free_menu int free_menu( MENU *menu) { return(*(int *)0); } /* ./m_opts.c */ #undef set_menu_opts int set_menu_opts( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts_off int menu_opts_off( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts_on int menu_opts_on( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts Menu_Options menu_opts( const MENU *menu) { return(*(Menu_Options *)0); } /* ./m_pad.c */ #undef set_menu_pad int set_menu_pad( MENU *menu, int pad) { return(*(int *)0); } #undef menu_pad int menu_pad( const MENU *menu) { return(*(int *)0); } /* ./m_pattern.c */ #undef menu_pattern char *menu_pattern( const MENU *menu) { return(*(char **)0); } #undef set_menu_pattern int set_menu_pattern( MENU *menu, const char *p) { return(*(int *)0); } /* ./m_post.c */ #undef _nc_Post_Item void _nc_Post_Item( const MENU *menu, const ITEM *item) { /* void */ } #undef _nc_Draw_Menu void _nc_Draw_Menu( const MENU *menu) { /* void */ } #undef post_menu int post_menu( MENU *menu) { return(*(int *)0); } #undef unpost_menu int unpost_menu( MENU *menu) { return(*(int *)0); } /* ./m_req_name.c */ #undef menu_request_name const char *menu_request_name( int request) { return(*(const char **)0); } #undef menu_request_by_name int menu_request_by_name( const char *str) { return(*(int *)0); } /* ./m_scale.c */ #undef scale_menu int scale_menu( const MENU *menu, int *rows, int *cols) { return(*(int *)0); } /* ./m_spacing.c */ #undef set_menu_spacing int set_menu_spacing( MENU *menu, int s_desc, int s_row, int s_col) { return(*(int *)0); } #undef menu_spacing int menu_spacing( const MENU *menu, int *s_desc, int *s_row, int *s_col) { return(*(int *)0); } /* ./m_sub.c */ #undef set_menu_sub int set_menu_sub( MENU *menu, WINDOW *win) { return(*(int *)0); } #undef menu_sub WINDOW *menu_sub( const MENU *menu) { return(*(WINDOW **)0); } /* ./m_trace.c */ #undef _nc_retrace_item ITEM *_nc_retrace_item( ITEM *code) { return(*(ITEM **)0); } #undef _nc_retrace_item_ptr ITEM **_nc_retrace_item_ptr( ITEM **code) { return(*(ITEM ***)0); } #undef _nc_retrace_item_opts Item_Options _nc_retrace_item_opts( Item_Options code) { return(*(Item_Options *)0); } #undef _nc_retrace_menu MENU *_nc_retrace_menu( MENU *code) { return(*(MENU **)0); } #undef _nc_retrace_menu_hook Menu_Hook _nc_retrace_menu_hook( Menu_Hook code) { return(*(Menu_Hook *)0); } #undef _nc_retrace_menu_opts Menu_Options _nc_retrace_menu_opts( Menu_Options code) { return(*(Menu_Options *)0); } /* ./m_userptr.c */ #undef set_menu_userptr int set_menu_userptr( MENU *menu, void *userptr) { return(*(int *)0); } #undef menu_userptr void *menu_userptr( const MENU *menu) { return(*(void **)0); } /* ./m_win.c */ #undef set_menu_win int set_menu_win( MENU *menu, WINDOW *win) { return(*(int *)0); } #undef menu_win WINDOW *menu_win( const MENU *menu) { return(*(WINDOW **)0); } ncurses-6.0-20160213/menu/llib-lmenu0000644000175100001440000002537012563672363015427 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./m_attribs.c */ #include #undef set_menu_fore int set_menu_fore( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_fore chtype menu_fore( const MENU *menu) { return(*(chtype *)0); } #undef set_menu_back int set_menu_back( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_back chtype menu_back( const MENU *menu) { return(*(chtype *)0); } #undef set_menu_grey int set_menu_grey( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_grey chtype menu_grey( const MENU *menu) { return(*(chtype *)0); } /* ./m_cursor.c */ #undef _nc_menu_cursor_pos int _nc_menu_cursor_pos( const MENU *menu, const ITEM *item, int *pY, int *pX) { return(*(int *)0); } #undef pos_menu_cursor int pos_menu_cursor( const MENU *menu) { return(*(int *)0); } /* ./m_driver.c */ #undef _nc_Match_Next_Character_In_Item_Name int _nc_Match_Next_Character_In_Item_Name( MENU *menu, int ch, ITEM **item) { return(*(int *)0); } #undef menu_driver int menu_driver( MENU *menu, int c) { return(*(int *)0); } /* ./m_format.c */ #undef set_menu_format int set_menu_format( MENU *menu, int rows, int cols) { return(*(int *)0); } #undef menu_format void menu_format( const MENU *menu, int *rows, int *cols) { /* void */ } /* ./m_global.c */ #undef _nc_Default_Menu MENU _nc_Default_Menu; #undef _nc_Default_Item ITEM _nc_Default_Item; #undef _nc_Connect_Items NCURSES_BOOL _nc_Connect_Items( MENU *menu, ITEM **items) { return(*(NCURSES_BOOL *)0); } #undef _nc_Disconnect_Items void _nc_Disconnect_Items( MENU *menu) { /* void */ } #undef _nc_Calculate_Text_Width int _nc_Calculate_Text_Width( const TEXT *item) { return(*(int *)0); } #undef _nc_Calculate_Item_Length_and_Width void _nc_Calculate_Item_Length_and_Width( MENU *menu) { /* void */ } #undef _nc_Link_Items void _nc_Link_Items( MENU *menu) { /* void */ } #undef _nc_Show_Menu void _nc_Show_Menu( const MENU *menu) { /* void */ } #undef _nc_New_TopRow_and_CurrentItem void _nc_New_TopRow_and_CurrentItem( MENU *menu, int new_toprow, ITEM *new_current_item) { /* void */ } /* ./m_hook.c */ #undef set_menu_init int set_menu_init( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef menu_init Menu_Hook menu_init( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_menu_term int set_menu_term( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef menu_term Menu_Hook menu_term( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_item_init int set_item_init( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef item_init Menu_Hook item_init( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_item_term int set_item_term( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef item_term Menu_Hook item_term( const MENU *menu) { return(*(Menu_Hook *)0); } /* ./m_item_cur.c */ #undef set_current_item int set_current_item( MENU *menu, ITEM *item) { return(*(int *)0); } #undef current_item ITEM *current_item( const MENU *menu) { return(*(ITEM **)0); } #undef item_index int item_index( const ITEM *item) { return(*(int *)0); } /* ./m_item_nam.c */ #undef item_name const char *item_name( const ITEM *item) { return(*(const char **)0); } #undef item_description const char *item_description( const ITEM *item) { return(*(const char **)0); } /* ./m_item_new.c */ #undef new_item ITEM *new_item( const char *name, const char *description) { return(*(ITEM **)0); } #undef free_item int free_item( ITEM *item) { return(*(int *)0); } #undef set_menu_mark int set_menu_mark( MENU *menu, const char *mark) { return(*(int *)0); } #undef menu_mark const char *menu_mark( const MENU *menu) { return(*(const char **)0); } /* ./m_item_opt.c */ #undef set_item_opts int set_item_opts( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts_off int item_opts_off( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts_on int item_opts_on( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts Item_Options item_opts( const ITEM *item) { return(*(Item_Options *)0); } /* ./m_item_top.c */ #undef set_top_row int set_top_row( MENU *menu, int row) { return(*(int *)0); } #undef top_row int top_row( const MENU *menu) { return(*(int *)0); } /* ./m_item_use.c */ #undef set_item_userptr int set_item_userptr( ITEM *item, void *userptr) { return(*(int *)0); } #undef item_userptr void *item_userptr( const ITEM *item) { return(*(void **)0); } /* ./m_item_val.c */ #undef set_item_value int set_item_value( ITEM *item, NCURSES_BOOL value) { return(*(int *)0); } #undef item_value NCURSES_BOOL item_value( const ITEM *item) { return(*(NCURSES_BOOL *)0); } /* ./m_item_vis.c */ #undef item_visible NCURSES_BOOL item_visible( const ITEM *item) { return(*(NCURSES_BOOL *)0); } /* ./m_items.c */ #undef set_menu_items int set_menu_items( MENU *menu, ITEM **items) { return(*(int *)0); } #undef menu_items ITEM **menu_items( const MENU *menu) { return(*(ITEM ***)0); } #undef item_count int item_count( const MENU *menu) { return(*(int *)0); } /* ./m_new.c */ #undef new_menu_sp MENU *new_menu_sp( SCREEN *sp, ITEM **items) { return(*(MENU **)0); } #undef new_menu MENU *new_menu( ITEM **items) { return(*(MENU **)0); } #undef free_menu int free_menu( MENU *menu) { return(*(int *)0); } /* ./m_opts.c */ #undef set_menu_opts int set_menu_opts( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts_off int menu_opts_off( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts_on int menu_opts_on( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts Menu_Options menu_opts( const MENU *menu) { return(*(Menu_Options *)0); } /* ./m_pad.c */ #undef set_menu_pad int set_menu_pad( MENU *menu, int pad) { return(*(int *)0); } #undef menu_pad int menu_pad( const MENU *menu) { return(*(int *)0); } /* ./m_pattern.c */ #undef menu_pattern char *menu_pattern( const MENU *menu) { return(*(char **)0); } #undef set_menu_pattern int set_menu_pattern( MENU *menu, const char *p) { return(*(int *)0); } /* ./m_post.c */ #undef _nc_Post_Item void _nc_Post_Item( const MENU *menu, const ITEM *item) { /* void */ } #undef _nc_Draw_Menu void _nc_Draw_Menu( const MENU *menu) { /* void */ } #undef post_menu int post_menu( MENU *menu) { return(*(int *)0); } #undef unpost_menu int unpost_menu( MENU *menu) { return(*(int *)0); } /* ./m_req_name.c */ #undef menu_request_name const char *menu_request_name( int request) { return(*(const char **)0); } #undef menu_request_by_name int menu_request_by_name( const char *str) { return(*(int *)0); } /* ./m_scale.c */ #undef scale_menu int scale_menu( const MENU *menu, int *rows, int *cols) { return(*(int *)0); } /* ./m_spacing.c */ #undef set_menu_spacing int set_menu_spacing( MENU *menu, int s_desc, int s_row, int s_col) { return(*(int *)0); } #undef menu_spacing int menu_spacing( const MENU *menu, int *s_desc, int *s_row, int *s_col) { return(*(int *)0); } /* ./m_sub.c */ #undef set_menu_sub int set_menu_sub( MENU *menu, WINDOW *win) { return(*(int *)0); } #undef menu_sub WINDOW *menu_sub( const MENU *menu) { return(*(WINDOW **)0); } /* ./m_trace.c */ #undef _nc_retrace_item ITEM *_nc_retrace_item( ITEM *code) { return(*(ITEM **)0); } #undef _nc_retrace_item_ptr ITEM **_nc_retrace_item_ptr( ITEM **code) { return(*(ITEM ***)0); } #undef _nc_retrace_item_opts Item_Options _nc_retrace_item_opts( Item_Options code) { return(*(Item_Options *)0); } #undef _nc_retrace_menu MENU *_nc_retrace_menu( MENU *code) { return(*(MENU **)0); } #undef _nc_retrace_menu_hook Menu_Hook _nc_retrace_menu_hook( Menu_Hook code) { return(*(Menu_Hook *)0); } #undef _nc_retrace_menu_opts Menu_Options _nc_retrace_menu_opts( Menu_Options code) { return(*(Menu_Options *)0); } /* ./m_userptr.c */ #undef set_menu_userptr int set_menu_userptr( MENU *menu, void *userptr) { return(*(int *)0); } #undef menu_userptr void *menu_userptr( const MENU *menu) { return(*(void **)0); } /* ./m_win.c */ #undef set_menu_win int set_menu_win( MENU *menu, WINDOW *win) { return(*(int *)0); } #undef menu_win WINDOW *menu_win( const MENU *menu) { return(*(WINDOW **)0); } ncurses-6.0-20160213/menu/Makefile.in0000644000175100001440000001272212560514435015476 0ustar tomusers# $Id: Makefile.in,v 1.64 2015/08/05 23:15:41 tom Exp $ ############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # # Makefile for menu source code. # # This makes the following: # libraries (normal/debug/profile/shared) # # The variable 'srcdir' refers to the source-distribution, and can be set with # the configure script by "--srcdir=DIR". # # The rules are organized to produce the libraries for the configured models, # turn off _all_ suffix rules; we'll generate our own .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile x = @EXEEXT@ o = .@OBJEXT@ MODEL = @DFT_LWR_MODEL@ DESTDIR = @DESTDIR@ top_srcdir = @top_srcdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ includesubdir = @includesubdir@ INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir) PACKAGE = @PACKAGE@ LIBTOOL = @LIBTOOL@ LIBTOOL_OPTS = @LIBTOOL_OPTS@ @EXPORT_SYMS@ LIBTOOL_CLEAN = @LIB_CLEAN@ LIBTOOL_COMPILE = @LIB_COMPILE@ LIBTOOL_LINK = @LIB_LINK@ LIBTOOL_INSTALL = @LIB_INSTALL@ LIBTOOL_UNINSTALL = @LIB_UNINSTALL@ LT_UNDEF = @LT_UNDEF@ INSTALL = @INSTALL@ INSTALL_LIB = @INSTALL@ @INSTALL_LIB@ INSTALL_PROG = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ AR = @AR@ ARFLAGS = @ARFLAGS@ AWK = @AWK@ LD = @LD@ LN_S = @LN_S@ CTAGS = @CTAGS@ ETAGS = @ETAGS@ CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ CPPFLAGS = -I${top_srcdir}/ncurses -DHAVE_CONFIG_H @CPPFLAGS@ CCFLAGS = $(CPPFLAGS) $(CFLAGS) CFLAGS_LIBTOOL = $(CCFLAGS) CFLAGS_NORMAL = $(CCFLAGS) CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) LINK = $(LIBTOOL_LINK) LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@ SHLIB_DIRS = -L../lib SHLIB_LIST = $(SHLIB_DIRS) -lncurses@USE_LIB_SUFFIX@ @SHLIB_LIST@ RPATH_LIST = @RPATH_LIST@ RESULTING_SYMS = @RESULTING_SYMS@ VERSIONED_SYMS = @VERSIONED_SYMS@ MK_SHARED_LIB = @MK_SHARED_LIB@ NCURSES_MAJOR = @NCURSES_MAJOR@ NCURSES_MINOR = @NCURSES_MINOR@ REL_VERSION = @cf_cv_rel_version@ ABI_VERSION = @cf_cv_abi_version@ RANLIB = @LIB_PREP@ LIBRARIES = @Libs_To_Make@ LINT = @LINT@ LINT_OPTS = @LINT_OPTS@ LINT_LIBS = -lmenu -lncurses @LIBS@ AUTO_SRC = \ ../include/menu.h \ ../include/eti.h \ ../include/mf_common.h ################################################################################ all \ libs \ install :: $(AUTO_SRC) $(LIBRARIES) sources : $(AUTO_SRC) $(DESTDIR)$(bindir) \ $(DESTDIR)$(libdir) : mkdir -p $@ # make copies to simplify include-paths while still keeping menu's include # file in this directory. ../include/menu.h : $(srcdir)/menu.h -rm -f $@ cp $(srcdir)/menu.h $@ ../include/eti.h : $(srcdir)/eti.h -rm -f $@ cp $(srcdir)/eti.h $@ ../include/mf_common.h : $(srcdir)/mf_common.h -rm -f $@ cp $(srcdir)/mf_common.h $@ HEADER_DEPS = \ $(srcdir)/menu.priv.h \ $(AUTO_SRC) \ ../include/curses.h tags: $(CTAGS) *.[ch] @MAKE_UPPER_TAGS@TAGS: @MAKE_UPPER_TAGS@ $(ETAGS) *.[ch] mostlyclean :: -rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace clean :: mostlyclean -rm -f $(AUTO_SRC) -rm -rf .libs *.dSYM distclean :: clean -rm -f Makefile realclean :: distclean ############################################################################### # The remainder of this file is automatically generated during configuration ############################################################################### ncurses-6.0-20160213/menu/m_item_top.c0000644000175100001440000001104411326664012015721 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_item_top * * Set and get top menus item * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_item_top.c,v 1.11 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_top_row(MENU *menu, int row) | | Description : Makes the specified row the top row in the menu | | Return Values : E_OK - success | E_BAD_ARGUMENT - not a menu pointer or invalid row | E_NOT_CONNECTED - there are no items for the menu +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_top_row(MENU * menu, int row) { ITEM *item; T((T_CALLED("set_top_row(%p,%d)"), (void *)menu, row)); if (menu) { if (menu->status & _IN_DRIVER) RETURN(E_BAD_STATE); if (menu->items == (ITEM **) 0) RETURN(E_NOT_CONNECTED); if ((row < 0) || (row > (menu->rows - menu->arows))) RETURN(E_BAD_ARGUMENT); } else RETURN(E_BAD_ARGUMENT); if (row != menu->toprow) { if (menu->status & _LINK_NEEDED) _nc_Link_Items(menu); item = menu->items[(menu->opt & O_ROWMAJOR) ? (row * menu->cols) : row]; assert(menu->pattern); Reset_Pattern(menu); _nc_New_TopRow_and_CurrentItem(menu, row, item); } RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int top_row(const MENU *) | | Description : Return the top row of the menu | | Return Values : The row number or ERR if there is no row +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) top_row(const MENU * menu) { T((T_CALLED("top_row(%p)"), (const void *)menu)); if (menu && menu->items && *(menu->items)) { assert((menu->toprow >= 0) && (menu->toprow < menu->rows)); returnCode(menu->toprow); } else returnCode(ERR); } /* m_item_top.c ends here */ ncurses-6.0-20160213/menu/m_spacing.c0000644000175100001440000001127711726763455015554 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_spacing * * Routines to handle spacing between entries * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_spacing.c,v 1.19 2012/03/10 23:43:41 tom Exp $") #define MAX_SPC_DESC ((TABSIZE) ? (TABSIZE) : 8) #define MAX_SPC_COLS ((TABSIZE) ? (TABSIZE) : 8) #define MAX_SPC_ROWS (3) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_spacing(MENU *menu,int desc, int r, int c); | | Description : Set the spacing between entries | | Return Values : E_OK - on success +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_menu_spacing(MENU * menu, int s_desc, int s_row, int s_col) { MENU *m; /* split for ATAC workaround */ T((T_CALLED("set_menu_spacing(%p,%d,%d,%d)"), (void *)menu, s_desc, s_row, s_col)); m = Normalize_Menu(menu); assert(m); if (m->status & _POSTED) RETURN(E_POSTED); if (((s_desc < 0) || (s_desc > MAX_SPC_DESC)) || ((s_row < 0) || (s_row > MAX_SPC_ROWS)) || ((s_col < 0) || (s_col > MAX_SPC_COLS))) RETURN(E_BAD_ARGUMENT); m->spc_desc = (short)(s_desc ? s_desc : 1); m->spc_rows = (short)(s_row ? s_row : 1); m->spc_cols = (short)(s_col ? s_col : 1); _nc_Calculate_Item_Length_and_Width(m); RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int menu_spacing (const MENU *,int *,int *,int *); | | Description : Retrieve info about spacing between the entries | | Return Values : E_OK - on success +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) menu_spacing(const MENU * menu, int *s_desc, int *s_row, int *s_col) { const MENU *m; /* split for ATAC workaround */ T((T_CALLED("menu_spacing(%p,%p,%p,%p)"), (const void *)menu, (void *)s_desc, (void *)s_row, (void *)s_col)); m = Normalize_Menu(menu); assert(m); if (s_desc) *s_desc = m->spc_desc; if (s_row) *s_row = m->spc_rows; if (s_col) *s_col = m->spc_cols; RETURN(E_OK); } /* m_spacing.c ends here */ ncurses-6.0-20160213/menu/m_new.c0000644000175100001440000001320611326664013014675 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_new * * Creation and destruction of new menus * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_new.c,v 1.21 2010/01/23 21:20:11 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : MENU* _nc_new_menu(SCREEN*, ITEM **items) | | Description : Creates a new menu connected to the item pointer | array items and returns a pointer to the new menu. | The new menu is initialized with the values from the | default menu. | | Return Values : NULL on error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(MENU *) NCURSES_SP_NAME(new_menu) (NCURSES_SP_DCLx ITEM ** items) { int err = E_SYSTEM_ERROR; MENU *menu = typeCalloc(MENU, 1); T((T_CALLED("new_menu(%p,%p)"), (void *)SP_PARM, (void *)items)); if (menu) { *menu = _nc_Default_Menu; menu->status = 0; menu->rows = menu->frows; menu->cols = menu->fcols; #if NCURSES_SP_FUNCS /* This ensures userwin and usersub are always non-null, so we can derive always the SCREEN that this menu is running on. */ menu->userwin = SP_PARM->_stdscr; menu->usersub = SP_PARM->_stdscr; #endif if (items && *items) { if (!_nc_Connect_Items(menu, items)) { err = E_NOT_CONNECTED; free(menu); menu = (MENU *) 0; } else err = E_OK; } } if (!menu) SET_ERROR(err); returnMenu(menu); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : MENU *new_menu(ITEM **items) | | Description : Creates a new menu connected to the item pointer | array items and returns a pointer to the new menu. | The new menu is initialized with the values from the | default menu. | | Return Values : NULL on error +--------------------------------------------------------------------------*/ #if NCURSES_SP_FUNCS NCURSES_EXPORT(MENU *) new_menu(ITEM ** items) { return NCURSES_SP_NAME(new_menu) (CURRENT_SCREEN, items); } #endif /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int free_menu(MENU *menu) | | Description : Disconnects menu from its associated item pointer | array and frees the storage allocated for the menu. | | Return Values : E_OK - success | E_BAD_ARGUMENT - Invalid menu pointer passed | E_POSTED - Menu is already posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) free_menu(MENU * menu) { T((T_CALLED("free_menu(%p)"), (void *)menu)); if (!menu) RETURN(E_BAD_ARGUMENT); if (menu->status & _POSTED) RETURN(E_POSTED); if (menu->items) _nc_Disconnect_Items(menu); if ((menu->status & _MARK_ALLOCATED) && menu->mark) free(menu->mark); free(menu); RETURN(E_OK); } /* m_new.c ends here */ ncurses-6.0-20160213/menu/m_global.c0000644000175100001440000004350712311135002015335 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_global * * Globally used internal routines and the default menu and item structures * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_global.c,v 1.28 2014/03/15 20:37:22 tom Exp $") static char mark[] = "-"; /* *INDENT-OFF* */ NCURSES_EXPORT_VAR(MENU) _nc_Default_Menu = { 16, /* Nr. of chars high */ 1, /* Nr. of chars wide */ 16, /* Nr. of items high */ 1, /* Nr. of items wide */ 16, /* Nr. of formatted items high */ 1, /* Nr. of formatted items wide */ 16, /* Nr. of items high (actual) */ 0, /* length of widest name */ 0, /* length of widest description */ 1, /* length of mark */ 1, /* length of one item */ 1, /* Spacing for descriptor */ 1, /* Spacing for columns */ 1, /* Spacing for rows */ (char *)0, /* buffer used to store match chars */ 0, /* Index into pattern buffer */ (WINDOW *)0, /* Window containing entire menu */ (WINDOW *)0, /* Portion of menu displayed */ (WINDOW *)0, /* User's window */ (WINDOW *)0, /* User's subwindow */ (ITEM **)0, /* List of items */ 0, /* Total Nr. of items in menu */ (ITEM *)0, /* Current item */ 0, /* Top row of menu */ (chtype)A_REVERSE, /* Attribute for selection */ (chtype)A_NORMAL, /* Attribute for nonselection */ (chtype)A_UNDERLINE, /* Attribute for inactive */ ' ', /* Pad character */ (Menu_Hook)0, /* Menu init */ (Menu_Hook)0, /* Menu term */ (Menu_Hook)0, /* Item init */ (Menu_Hook)0, /* Item term */ (void *)0, /* userptr */ mark, /* mark */ ALL_MENU_OPTS, /* options */ 0 /* status */ }; NCURSES_EXPORT_VAR(ITEM) _nc_Default_Item = { { (char *)0, 0 }, /* name */ { (char *)0, 0 }, /* description */ (MENU *)0, /* Pointer to parent menu */ (char *)0, /* Userpointer */ ALL_ITEM_OPTS, /* options */ 0, /* Item Nr. */ 0, /* y */ 0, /* x */ FALSE, /* value */ (ITEM *)0, /* left */ (ITEM *)0, /* right */ (ITEM *)0, /* up */ (ITEM *)0 /* down */ }; /* *INDENT-ON* */ /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : static void ComputeMaximum_NameDesc_Lenths(MENU *menu) | | Description : Calculates the maximum name and description lengths | of the items connected to the menu | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_INLINE static void ComputeMaximum_NameDesc_Lengths(MENU * menu) { unsigned MaximumNameLength = 0; unsigned MaximumDescriptionLength = 0; ITEM **items; unsigned check; assert(menu && menu->items); for (items = menu->items; *items; items++) { check = (unsigned)_nc_Calculate_Text_Width(&((*items)->name)); if (check > MaximumNameLength) MaximumNameLength = check; check = (unsigned)_nc_Calculate_Text_Width(&((*items)->description)); if (check > MaximumDescriptionLength) MaximumDescriptionLength = check; } menu->namelen = (short)MaximumNameLength; menu->desclen = (short)MaximumDescriptionLength; T(("ComputeMaximum_NameDesc_Lengths %d,%d", menu->namelen, menu->desclen)); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : static void ResetConnectionInfo(MENU *, ITEM **) | | Description : Reset all informations in the menu and the items in | the item array that indicates a connection | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_INLINE static void ResetConnectionInfo(MENU * menu, ITEM ** items) { ITEM **item; assert(menu && items); for (item = items; *item; item++) { (*item)->index = 0; (*item)->imenu = (MENU *) 0; } if (menu->pattern) free(menu->pattern); menu->pattern = (char *)0; menu->pindex = 0; menu->items = (ITEM **) 0; menu->nitems = 0; } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : bool _nc_Connect_Items(MENU *menu, ITEM **items) | | Description : Connect the items in the item array to the menu. | Decorate all the items with a number and a backward | pointer to the menu. | | Return Values : TRUE - successful connection | FALSE - connection failed +--------------------------------------------------------------------------*/ NCURSES_EXPORT(bool) _nc_Connect_Items(MENU * menu, ITEM ** items) { ITEM **item; unsigned int ItemCount = 0; if (menu && items) { for (item = items; *item; item++) { if ((*item)->imenu) { /* if a item is already connected, reject connection */ break; } } if (!(*item)) /* we reached the end, so there was no connected item */ { for (item = items; *item; item++) { if (menu->opt & O_ONEVALUE) { (*item)->value = FALSE; } (*item)->index = (short)ItemCount++; (*item)->imenu = menu; } } } else return (FALSE); if (ItemCount != 0) { menu->items = items; menu->nitems = (short)ItemCount; ComputeMaximum_NameDesc_Lengths(menu); if ((menu->pattern = typeMalloc(char, (unsigned)(1 + menu->namelen)))) { Reset_Pattern(menu); set_menu_format(menu, menu->frows, menu->fcols); menu->curitem = *items; menu->toprow = 0; return (TRUE); } } /* If we fall through to this point, we have to reset all items connection and inform about a reject connection */ ResetConnectionInfo(menu, items); return (FALSE); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void _nc_Disconnect_Items(MENU *menu) | | Description : Disconnect the menus item array from the menu | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) _nc_Disconnect_Items(MENU * menu) { if (menu && menu->items) ResetConnectionInfo(menu, menu->items); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int _nc_Calculate_Text_Width(const TEXT * item) | | Description : Calculate the number of columns for a TEXT. | | Return Values : the width +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) _nc_Calculate_Text_Width(const TEXT * item /*FIXME: limit length */ ) { #if USE_WIDEC_SUPPORT int result = item->length; T((T_CALLED("_nc_menu_text_width(%p)"), (const void *)item)); if (result != 0 && item->str != 0) { int count = (int)mbstowcs(0, item->str, 0); wchar_t *temp = 0; if (count > 0 && (temp = typeMalloc(wchar_t, 2 + count)) != 0) { int n; result = 0; mbstowcs(temp, item->str, (unsigned)count); for (n = 0; n < count; ++n) { int test = wcwidth(temp[n]); if (test <= 0) test = 1; result += test; } free(temp); } } returnCode(result); #else return item->length; #endif } /* * Calculate the actual width of a menu entry for wide-characters. */ #if USE_WIDEC_SUPPORT static int calculate_actual_width(MENU * menu, bool name) { int width = 0; int check = 0; ITEM **items; assert(menu && menu->items); if (menu->items != 0) { for (items = menu->items; *items; items++) { if (name) { check = _nc_Calculate_Text_Width(&((*items)->name)); } else { check = _nc_Calculate_Text_Width(&((*items)->description)); } if (check > width) width = check; } } else { width = (name ? menu->namelen : menu->desclen); } T(("calculate_actual_width %s = %d/%d", name ? "name" : "desc", width, name ? menu->namelen : menu->desclen)); return width; } #else #define calculate_actual_width(menu, name) (name ? menu->namelen : menu->desclen) #endif /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void _nc_Calculate_Item_Length_and_Width(MENU *menu) | | Description : Calculate the length of an item and the width of the | whole menu. | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) _nc_Calculate_Item_Length_and_Width(MENU * menu) { int l; assert(menu); menu->height = (short)(1 + menu->spc_rows * (menu->arows - 1)); l = calculate_actual_width(menu, TRUE); l += menu->marklen; if ((menu->opt & O_SHOWDESC) && (menu->desclen > 0)) { l += calculate_actual_width(menu, FALSE); l += menu->spc_desc; } menu->itemlen = (short)l; l *= menu->cols; l += (menu->cols - 1) * menu->spc_cols; /* for the padding between the columns */ menu->width = (short)l; T(("_nc_CalculateItem_Length_and_Width columns %d, item %d, width %d", menu->cols, menu->itemlen, menu->width)); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void _nc_Link_Item(MENU *menu) | | Description : Statically calculate for every item its four neighbors. | This depends on the orientation of the menu. This | static approach simplifies navigation in the menu a lot. | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) _nc_Link_Items(MENU * menu) { if (menu && menu->items && *(menu->items)) { int i, j; ITEM *item; int Number_Of_Items = menu->nitems; int col = 0, row = 0; int Last_in_Row; int Last_in_Column; bool cycle = (menu->opt & O_NONCYCLIC) ? FALSE : TRUE; ClrStatus(menu, _LINK_NEEDED); if (menu->opt & O_ROWMAJOR) { int Number_Of_Columns = menu->cols; for (i = 0; i < Number_Of_Items; i++) { item = menu->items[i]; Last_in_Row = row * Number_Of_Columns + (Number_Of_Columns - 1); item->left = (col) ? /* if we are not in the leftmost column, we can use the predecessor in the items array */ menu->items[i - 1] : (cycle ? menu->items[(Last_in_Row >= Number_Of_Items) ? Number_Of_Items - 1 : Last_in_Row] : (ITEM *) 0); item->right = ((col < (Number_Of_Columns - 1)) && ((i + 1) < Number_Of_Items) )? menu->items[i + 1] : (cycle ? menu->items[row * Number_Of_Columns] : (ITEM *) 0 ); Last_in_Column = (menu->rows - 1) * Number_Of_Columns + col; item->up = (row) ? menu->items[i - Number_Of_Columns] : (cycle ? menu->items[(Last_in_Column >= Number_Of_Items) ? Number_Of_Items - 1 : Last_in_Column] : (ITEM *) 0); item->down = ((i + Number_Of_Columns) < Number_Of_Items) ? menu->items[i + Number_Of_Columns] : (cycle ? menu->items[(row + 1) < menu->rows ? Number_Of_Items - 1 : col] : (ITEM *) 0); item->x = (short)col; item->y = (short)row; if (++col == Number_Of_Columns) { row++; col = 0; } } } else { int Number_Of_Rows = menu->rows; for (j = 0; j < Number_Of_Items; j++) { item = menu->items[i = (col * Number_Of_Rows + row)]; Last_in_Column = (menu->cols - 1) * Number_Of_Rows + row; item->left = (col) ? menu->items[i - Number_Of_Rows] : (cycle ? (Last_in_Column >= Number_Of_Items) ? menu->items[Last_in_Column - Number_Of_Rows] : menu->items[Last_in_Column] : (ITEM *) 0); item->right = ((i + Number_Of_Rows) < Number_Of_Items) ? menu->items[i + Number_Of_Rows] : (cycle ? menu->items[row] : (ITEM *) 0); Last_in_Row = col * Number_Of_Rows + (Number_Of_Rows - 1); item->up = (row) ? menu->items[i - 1] : (cycle ? menu->items[(Last_in_Row >= Number_Of_Items) ? Number_Of_Items - 1 : Last_in_Row] : (ITEM *) 0); item->down = (row < (Number_Of_Rows - 1)) ? (menu->items[((i + 1) < Number_Of_Items) ? i + 1 : (col - 1) * Number_Of_Rows + row + 1]) : (cycle ? menu->items[col * Number_Of_Rows] : (ITEM *) 0 ); item->x = (short)col; item->y = (short)row; if ((++row) == Number_Of_Rows) { col++; row = 0; } } } } } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void _nc_Show_Menu(const MENU* menu) | | Description : Update the window that is associated with the menu | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) _nc_Show_Menu(const MENU * menu) { WINDOW *win; int maxy, maxx; assert(menu); if ((menu->status & _POSTED) && !(menu->status & _IN_DRIVER)) { /* adjust the internal subwindow to start on the current top */ assert(menu->sub); mvderwin(menu->sub, menu->spc_rows * menu->toprow, 0); win = Get_Menu_Window(menu); maxy = getmaxy(win); maxx = getmaxx(win); if (menu->height < maxy) maxy = menu->height; if (menu->width < maxx) maxx = menu->width; copywin(menu->sub, win, 0, 0, 0, 0, maxy - 1, maxx - 1, 0); pos_menu_cursor(menu); } } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void _nc_New_TopRow_and_CurrentItem( | MENU *menu, | int new_toprow, | ITEM *new_current_item) | | Description : Redisplay the menu so that the given row becomes the | top row and the given item becomes the new current | item. | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) _nc_New_TopRow_and_CurrentItem( MENU * menu, int new_toprow, ITEM * new_current_item) { ITEM *cur_item; bool mterm_called = FALSE; bool iterm_called = FALSE; assert(menu); if (menu->status & _POSTED) { if (new_current_item != menu->curitem) { Call_Hook(menu, itemterm); iterm_called = TRUE; } if (new_toprow != menu->toprow) { Call_Hook(menu, menuterm); mterm_called = TRUE; } cur_item = menu->curitem; assert(cur_item); menu->toprow = (short)(((menu->rows - menu->frows) >= 0) ? min(menu->rows - menu->frows, new_toprow) : 0); menu->curitem = new_current_item; if (mterm_called) { Call_Hook(menu, menuinit); } if (iterm_called) { /* this means, move from the old current_item to the new one... */ Move_To_Current_Item(menu, cur_item); Call_Hook(menu, iteminit); } if (mterm_called || iterm_called) { _nc_Show_Menu(menu); } else pos_menu_cursor(menu); } else { /* if we are not posted, this is quite simple */ menu->toprow = (short)(((menu->rows - menu->frows) >= 0) ? min(menu->rows - menu->frows, new_toprow) : 0); menu->curitem = new_current_item; } } /* m_global.c ends here */ ncurses-6.0-20160213/menu/m_item_new.c0000644000175100001440000002151111764761143015721 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_item_new * * Create and destroy menu items * * Set and get marker string for menu * ***************************************************************************/ #include "menu.priv.h" #if USE_WIDEC_SUPPORT #if HAVE_WCTYPE_H #include #endif #endif MODULE_ID("$Id: m_item_new.c,v 1.33 2012/06/09 23:55:15 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : bool Is_Printable_String(const char *s) | | Description : Checks whether or not the string contains only printable | characters. | | Return Values : TRUE - if string is printable | FALSE - if string contains non-printable characters +--------------------------------------------------------------------------*/ static bool Is_Printable_String(const char *s) { int result = TRUE; #if USE_WIDEC_SUPPORT int count = (int)mbstowcs(0, s, 0); wchar_t *temp = 0; assert(s); if (count > 0 && (temp = typeCalloc(wchar_t, (2 + (unsigned)count))) != 0) { int n; mbstowcs(temp, s, (unsigned)count); for (n = 0; n < count; ++n) if (!iswprint((wint_t) temp[n])) { result = FALSE; break; } free(temp); } #else assert(s); while (*s) { if (!isprint(UChar(*s))) { result = FALSE; break; } s++; } #endif return result; } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : ITEM *new_item(char *name, char *description) | | Description : Create a new item with name and description. Return | a pointer to this new item. | N.B.: an item must(!) have a name. | | Return Values : The item pointer or NULL if creation failed. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(ITEM *) new_item(const char *name, const char *description) { ITEM *item; T((T_CALLED("new_item(\"%s\", \"%s\")"), name ? name : "", description ? description : "")); if (!name || (*name == '\0') || !Is_Printable_String(name)) { item = (ITEM *) 0; SET_ERROR(E_BAD_ARGUMENT); } else { item = typeCalloc(ITEM, 1); if (item) { *item = _nc_Default_Item; /* hope we have struct assignment */ item->name.length = (unsigned short)strlen(name); item->name.str = name; if (description && (*description != '\0') && Is_Printable_String(description)) { item->description.length = (unsigned short)strlen(description); item->description.str = description; } else { item->description.length = 0; item->description.str = (char *)0; } } else SET_ERROR(E_SYSTEM_ERROR); } returnItem(item); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int free_item(ITEM *item) | | Description : Free the allocated storage for this item. | N.B.: a connected item can't be freed. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid value has been passed | E_CONNECTED - item is still connected to a menu +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) free_item(ITEM * item) { T((T_CALLED("free_item(%p)"), (void *)item)); if (!item) RETURN(E_BAD_ARGUMENT); if (item->imenu) RETURN(E_CONNECTED); free(item); RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_mark( MENU *menu, const char *mark ) | | Description : Set the mark string used to indicate the current | item (single-valued menu) or the selected items | (multi-valued menu). | The mark argument may be NULL, in which case no | marker is used. | This might be a little bit tricky, because this may | affect the geometry of the menu, which we don't allow | if it is already posted. | | Return Values : E_OK - success | E_BAD_ARGUMENT - an invalid value has been passed | E_SYSTEM_ERROR - no memory to store mark +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_menu_mark(MENU * menu, const char *mark) { short l; T((T_CALLED("set_menu_mark(%p,%s)"), (void *)menu, _nc_visbuf(mark))); if (mark && (*mark != '\0') && Is_Printable_String(mark)) l = (short)strlen(mark); else l = 0; if (menu) { char *old_mark = menu->mark; unsigned short old_status = menu->status; if (menu->status & _POSTED) { /* If the menu is already posted, the geometry is fixed. Then we can only accept a mark with exactly the same length */ if (menu->marklen != l) RETURN(E_BAD_ARGUMENT); } menu->marklen = l; if (l) { menu->mark = strdup(mark); if (menu->mark) { if (menu != &_nc_Default_Menu) SetStatus(menu, _MARK_ALLOCATED); } else { menu->mark = old_mark; menu->marklen = (short)((old_mark != 0) ? strlen(old_mark) : 0); RETURN(E_SYSTEM_ERROR); } } else menu->mark = (char *)0; if ((old_status & _MARK_ALLOCATED) && old_mark) free(old_mark); if (menu->status & _POSTED) { _nc_Draw_Menu(menu); _nc_Show_Menu(menu); } else { /* Recalculate the geometry */ _nc_Calculate_Item_Length_and_Width(menu); } } else { returnCode(set_menu_mark(&_nc_Default_Menu, mark)); } RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : char *menu_mark(const MENU *menu) | | Description : Return a pointer to the marker string | | Return Values : The marker string pointer or NULL if no marker defined +--------------------------------------------------------------------------*/ NCURSES_EXPORT(const char *) menu_mark(const MENU * menu) { T((T_CALLED("menu_mark(%p)"), (const void *)menu)); returnPtr(Normalize_Menu(menu)->mark); } /* m_item_new.c */ ncurses-6.0-20160213/menu/m_opts.c0000644000175100001440000001614511326664012015075 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_opts * * Menus option routines * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_opts.c,v 1.20 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_opts(MENU *menu, Menu_Options opts) | | Description : Set the options for this menu. If the new settings | end up in a change of the geometry of the menu, it | will be recalculated. This operation is forbidden if | the menu is already posted. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid menu options | E_POSTED - menu is already posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_menu_opts(MENU * menu, Menu_Options opts) { T((T_CALLED("set_menu_opts(%p,%d)"), (void *)menu, opts)); opts &= ALL_MENU_OPTS; if (opts & ~ALL_MENU_OPTS) RETURN(E_BAD_ARGUMENT); if (menu) { if (menu->status & _POSTED) RETURN(E_POSTED); if ((opts & O_ROWMAJOR) != (menu->opt & O_ROWMAJOR)) { /* we need this only if the layout really changed ... */ if (menu->items && menu->items[0]) { menu->toprow = 0; menu->curitem = menu->items[0]; assert(menu->curitem); set_menu_format(menu, menu->frows, menu->fcols); } } menu->opt = opts; if (opts & O_ONEVALUE) { ITEM **item; if (((item = menu->items) != (ITEM **) 0)) for (; *item; item++) (*item)->value = FALSE; } if (opts & O_SHOWDESC) /* this also changes the geometry */ _nc_Calculate_Item_Length_and_Width(menu); } else _nc_Default_Menu.opt = opts; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int menu_opts_off(MENU *menu, Menu_Options opts) | | Description : Switch off the options for this menu. If the new settings | end up in a change of the geometry of the menu, it | will be recalculated. This operation is forbidden if | the menu is already posted. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid options | E_POSTED - menu is already posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) menu_opts_off(MENU * menu, Menu_Options opts) { MENU *cmenu = menu; /* use a copy because set_menu_opts must detect NULL menu itself to adjust its behavior */ T((T_CALLED("menu_opts_off(%p,%d)"), (void *)menu, opts)); opts &= ALL_MENU_OPTS; if (opts & ~ALL_MENU_OPTS) RETURN(E_BAD_ARGUMENT); else { Normalize_Menu(cmenu); opts = cmenu->opt & ~opts; returnCode(set_menu_opts(menu, opts)); } } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int menu_opts_on(MENU *menu, Menu_Options opts) | | Description : Switch on the options for this menu. If the new settings | end up in a change of the geometry of the menu, it | will be recalculated. This operation is forbidden if | the menu is already posted. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid menu options | E_POSTED - menu is already posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) menu_opts_on(MENU * menu, Menu_Options opts) { MENU *cmenu = menu; /* use a copy because set_menu_opts must detect NULL menu itself to adjust its behavior */ T((T_CALLED("menu_opts_on(%p,%d)"), (void *)menu, opts)); opts &= ALL_MENU_OPTS; if (opts & ~ALL_MENU_OPTS) RETURN(E_BAD_ARGUMENT); else { Normalize_Menu(cmenu); opts = cmenu->opt | opts; returnCode(set_menu_opts(menu, opts)); } } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : Menu_Options menu_opts(const MENU *menu) | | Description : Return the options for this menu. | | Return Values : Menu options +--------------------------------------------------------------------------*/ NCURSES_EXPORT(Menu_Options) menu_opts(const MENU * menu) { T((T_CALLED("menu_opts(%p)"), (const void *)menu)); returnMenuOpts(ALL_MENU_OPTS & Normalize_Menu(menu)->opt); } /* m_opts.c ends here */ ncurses-6.0-20160213/menu/mf_common.h0000644000175100001440000000754611764762436015577 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /* $Id: mf_common.h,v 0.24 2012/06/10 00:06:54 tom Exp $ */ /* Common internal header for menu and form library */ #ifndef MF_COMMON_H_incl #define MF_COMMON_H_incl 1 #include #include #include #include #include #include #include #include #if DECL_ERRNO extern int errno; #endif /* in case of debug version we ignore the suppression of assertions */ #ifdef TRACE # ifdef NDEBUG # undef NDEBUG # endif #endif #include #if USE_RCS_IDS #define MODULE_ID(id) static const char Ident[] = id; #else #define MODULE_ID(id) /*nothing */ #endif /* Maximum regular 8-bit character code */ #define MAX_REGULAR_CHARACTER (0xff) #define SET_ERROR(code) (errno=(code)) #define GET_ERROR() (errno) #ifdef TRACE #define RETURN(code) returnCode( SET_ERROR(code) ) #else #define RETURN(code) return( SET_ERROR(code) ) #endif /* The few common values in the status fields for menus and forms */ #define _POSTED (0x01U) /* menu or form is posted */ #define _IN_DRIVER (0x02U) /* menu or form is processing hook routine */ #define SetStatus(target,mask) (target)->status |= (unsigned short) (mask) #define ClrStatus(target,mask) (target)->status = (unsigned short) (target->status & (~mask)) /* Call object hook */ #define Call_Hook( object, handler ) \ if ( (object) != 0 && ((object)->handler) != (void *) 0 )\ {\ SetStatus(object, _IN_DRIVER);\ (object)->handler(object);\ ClrStatus(object, _IN_DRIVER);\ } #endif /* MF_COMMON_H_incl */ ncurses-6.0-20160213/menu/m_trace.c0000644000175100001440000000607012650770520015205 0ustar tomusers/**************************************************************************** * Copyright (c) 2004-2010,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_trace.c,v 1.5 2016/01/23 21:32:00 tom Exp $") NCURSES_EXPORT(ITEM *) _nc_retrace_item(ITEM * code) { T((T_RETURN("%p"), (void *)code)); return code; } NCURSES_EXPORT(ITEM **) _nc_retrace_item_ptr(ITEM ** code) { T((T_RETURN("%p"), (void *)code)); return code; } NCURSES_EXPORT(Item_Options) _nc_retrace_item_opts(Item_Options code) { T((T_RETURN("%d"), code)); return code; } NCURSES_EXPORT(MENU *) _nc_retrace_menu(MENU * code) { T((T_RETURN("%p"), (void *)code)); return code; } NCURSES_EXPORT(Menu_Hook) _nc_retrace_menu_hook(Menu_Hook code) { T((T_RETURN("%p"), TR_FUNC(code))); return code; } NCURSES_EXPORT(Menu_Options) _nc_retrace_menu_opts(Menu_Options code) { T((T_RETURN("%d"), code)); return code; } ncurses-6.0-20160213/menu/m_item_use.c0000644000175100001440000000776311326664012015730 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_item_use * * Associate application data with menu items * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_item_use.c,v 1.17 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_item_userptr(ITEM *item, void *userptr) | | Description : Set the pointer that is reserved in any item to store | application relevant informations. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_item_userptr(ITEM * item, void *userptr) { T((T_CALLED("set_item_userptr(%p,%p)"), (void *)item, (void *)userptr)); Normalize_Item(item)->userptr = userptr; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void *item_userptr(const ITEM *item) | | Description : Return the pointer that is reserved in any item to store | application relevant informations. | | Return Values : Value of the pointer. If no such pointer has been set, | NULL is returned. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void *) item_userptr(const ITEM * item) { T((T_CALLED("item_userptr(%p)"), (const void *)item)); returnVoidPtr(Normalize_Item(item)->userptr); } /* m_item_use.c */ ncurses-6.0-20160213/menu/m_req_name.c0000644000175100001440000001206612510023267015672 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_request_name * * Routines to handle external names of menu requests * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_req_name.c,v 1.23 2015/04/04 18:00:23 tom Exp $") #define DATA(s) { s } static const char request_names[MAX_MENU_COMMAND - MIN_MENU_COMMAND + 1][14] = { DATA("LEFT_ITEM"), DATA("RIGHT_ITEM"), DATA("UP_ITEM"), DATA("DOWN_ITEM"), DATA("SCR_ULINE"), DATA("SCR_DLINE"), DATA("SCR_DPAGE"), DATA("SCR_UPAGE"), DATA("FIRST_ITEM"), DATA("LAST_ITEM"), DATA("NEXT_ITEM"), DATA("PREV_ITEM"), DATA("TOGGLE_ITEM"), DATA("CLEAR_PATTERN"), DATA("BACK_PATTERN"), DATA("NEXT_MATCH"), DATA("PREV_MATCH") }; #define A_SIZE (sizeof(request_names)/sizeof(request_names[0])) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : const char * menu_request_name (int request); | | Description : Get the external name of a menu request. | | Return Values : Pointer to name - on success | NULL - on invalid request code +--------------------------------------------------------------------------*/ NCURSES_EXPORT(const char *) menu_request_name(int request) { T((T_CALLED("menu_request_name(%d)"), request)); if ((request < MIN_MENU_COMMAND) || (request > MAX_MENU_COMMAND)) { SET_ERROR(E_BAD_ARGUMENT); returnCPtr((const char *)0); } else returnCPtr(request_names[request - MIN_MENU_COMMAND]); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int menu_request_by_name (const char *str); | | Description : Search for a request with this name. | | Return Values : Request Id - on success | E_NO_MATCH - request not found +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) menu_request_by_name(const char *str) { /* because the table is so small, it doesn't really hurt to run sequentially through it. */ size_t i = 0; char buf[16]; T((T_CALLED("menu_request_by_name(%s)"), _nc_visbuf(str))); if (str != 0 && (i = strlen(str)) != 0) { if (i > sizeof(buf) - 2) i = sizeof(buf) - 2; memcpy(buf, str, i); buf[i] = '\0'; for (i = 0; buf[i] != '\0'; ++i) { buf[i] = (char)toupper(UChar(buf[i])); } for (i = 0; i < A_SIZE; i++) { if (strcmp(request_names[i], buf) == 0) returnCode(MIN_MENU_COMMAND + (int)i); } } RETURN(E_NO_MATCH); } /* m_req_name.c ends here */ ncurses-6.0-20160213/menu/llib-lmenutw0000644000175100001440000002537012563672507016002 0ustar tomusers/**************************************************************************** * Copyright (c) 2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2010-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./m_attribs.c */ #include #undef set_menu_fore int set_menu_fore( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_fore chtype menu_fore( const MENU *menu) { return(*(chtype *)0); } #undef set_menu_back int set_menu_back( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_back chtype menu_back( const MENU *menu) { return(*(chtype *)0); } #undef set_menu_grey int set_menu_grey( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_grey chtype menu_grey( const MENU *menu) { return(*(chtype *)0); } /* ./m_cursor.c */ #undef _nc_menu_cursor_pos int _nc_menu_cursor_pos( const MENU *menu, const ITEM *item, int *pY, int *pX) { return(*(int *)0); } #undef pos_menu_cursor int pos_menu_cursor( const MENU *menu) { return(*(int *)0); } /* ./m_driver.c */ #undef _nc_Match_Next_Character_In_Item_Name int _nc_Match_Next_Character_In_Item_Name( MENU *menu, int ch, ITEM **item) { return(*(int *)0); } #undef menu_driver int menu_driver( MENU *menu, int c) { return(*(int *)0); } /* ./m_format.c */ #undef set_menu_format int set_menu_format( MENU *menu, int rows, int cols) { return(*(int *)0); } #undef menu_format void menu_format( const MENU *menu, int *rows, int *cols) { /* void */ } /* ./m_global.c */ #undef _nc_Default_Menu MENU _nc_Default_Menu; #undef _nc_Default_Item ITEM _nc_Default_Item; #undef _nc_Connect_Items NCURSES_BOOL _nc_Connect_Items( MENU *menu, ITEM **items) { return(*(NCURSES_BOOL *)0); } #undef _nc_Disconnect_Items void _nc_Disconnect_Items( MENU *menu) { /* void */ } #undef _nc_Calculate_Text_Width int _nc_Calculate_Text_Width( const TEXT *item) { return(*(int *)0); } #undef _nc_Calculate_Item_Length_and_Width void _nc_Calculate_Item_Length_and_Width( MENU *menu) { /* void */ } #undef _nc_Link_Items void _nc_Link_Items( MENU *menu) { /* void */ } #undef _nc_Show_Menu void _nc_Show_Menu( const MENU *menu) { /* void */ } #undef _nc_New_TopRow_and_CurrentItem void _nc_New_TopRow_and_CurrentItem( MENU *menu, int new_toprow, ITEM *new_current_item) { /* void */ } /* ./m_hook.c */ #undef set_menu_init int set_menu_init( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef menu_init Menu_Hook menu_init( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_menu_term int set_menu_term( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef menu_term Menu_Hook menu_term( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_item_init int set_item_init( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef item_init Menu_Hook item_init( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_item_term int set_item_term( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef item_term Menu_Hook item_term( const MENU *menu) { return(*(Menu_Hook *)0); } /* ./m_item_cur.c */ #undef set_current_item int set_current_item( MENU *menu, ITEM *item) { return(*(int *)0); } #undef current_item ITEM *current_item( const MENU *menu) { return(*(ITEM **)0); } #undef item_index int item_index( const ITEM *item) { return(*(int *)0); } /* ./m_item_nam.c */ #undef item_name const char *item_name( const ITEM *item) { return(*(const char **)0); } #undef item_description const char *item_description( const ITEM *item) { return(*(const char **)0); } /* ./m_item_new.c */ #undef new_item ITEM *new_item( const char *name, const char *description) { return(*(ITEM **)0); } #undef free_item int free_item( ITEM *item) { return(*(int *)0); } #undef set_menu_mark int set_menu_mark( MENU *menu, const char *mark) { return(*(int *)0); } #undef menu_mark const char *menu_mark( const MENU *menu) { return(*(const char **)0); } /* ./m_item_opt.c */ #undef set_item_opts int set_item_opts( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts_off int item_opts_off( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts_on int item_opts_on( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts Item_Options item_opts( const ITEM *item) { return(*(Item_Options *)0); } /* ./m_item_top.c */ #undef set_top_row int set_top_row( MENU *menu, int row) { return(*(int *)0); } #undef top_row int top_row( const MENU *menu) { return(*(int *)0); } /* ./m_item_use.c */ #undef set_item_userptr int set_item_userptr( ITEM *item, void *userptr) { return(*(int *)0); } #undef item_userptr void *item_userptr( const ITEM *item) { return(*(void **)0); } /* ./m_item_val.c */ #undef set_item_value int set_item_value( ITEM *item, NCURSES_BOOL value) { return(*(int *)0); } #undef item_value NCURSES_BOOL item_value( const ITEM *item) { return(*(NCURSES_BOOL *)0); } /* ./m_item_vis.c */ #undef item_visible NCURSES_BOOL item_visible( const ITEM *item) { return(*(NCURSES_BOOL *)0); } /* ./m_items.c */ #undef set_menu_items int set_menu_items( MENU *menu, ITEM **items) { return(*(int *)0); } #undef menu_items ITEM **menu_items( const MENU *menu) { return(*(ITEM ***)0); } #undef item_count int item_count( const MENU *menu) { return(*(int *)0); } /* ./m_new.c */ #undef new_menu_sp MENU *new_menu_sp( SCREEN *sp, ITEM **items) { return(*(MENU **)0); } #undef new_menu MENU *new_menu( ITEM **items) { return(*(MENU **)0); } #undef free_menu int free_menu( MENU *menu) { return(*(int *)0); } /* ./m_opts.c */ #undef set_menu_opts int set_menu_opts( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts_off int menu_opts_off( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts_on int menu_opts_on( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts Menu_Options menu_opts( const MENU *menu) { return(*(Menu_Options *)0); } /* ./m_pad.c */ #undef set_menu_pad int set_menu_pad( MENU *menu, int pad) { return(*(int *)0); } #undef menu_pad int menu_pad( const MENU *menu) { return(*(int *)0); } /* ./m_pattern.c */ #undef menu_pattern char *menu_pattern( const MENU *menu) { return(*(char **)0); } #undef set_menu_pattern int set_menu_pattern( MENU *menu, const char *p) { return(*(int *)0); } /* ./m_post.c */ #undef _nc_Post_Item void _nc_Post_Item( const MENU *menu, const ITEM *item) { /* void */ } #undef _nc_Draw_Menu void _nc_Draw_Menu( const MENU *menu) { /* void */ } #undef post_menu int post_menu( MENU *menu) { return(*(int *)0); } #undef unpost_menu int unpost_menu( MENU *menu) { return(*(int *)0); } /* ./m_req_name.c */ #undef menu_request_name const char *menu_request_name( int request) { return(*(const char **)0); } #undef menu_request_by_name int menu_request_by_name( const char *str) { return(*(int *)0); } /* ./m_scale.c */ #undef scale_menu int scale_menu( const MENU *menu, int *rows, int *cols) { return(*(int *)0); } /* ./m_spacing.c */ #undef set_menu_spacing int set_menu_spacing( MENU *menu, int s_desc, int s_row, int s_col) { return(*(int *)0); } #undef menu_spacing int menu_spacing( const MENU *menu, int *s_desc, int *s_row, int *s_col) { return(*(int *)0); } /* ./m_sub.c */ #undef set_menu_sub int set_menu_sub( MENU *menu, WINDOW *win) { return(*(int *)0); } #undef menu_sub WINDOW *menu_sub( const MENU *menu) { return(*(WINDOW **)0); } /* ./m_trace.c */ #undef _nc_retrace_item ITEM *_nc_retrace_item( ITEM *code) { return(*(ITEM **)0); } #undef _nc_retrace_item_ptr ITEM **_nc_retrace_item_ptr( ITEM **code) { return(*(ITEM ***)0); } #undef _nc_retrace_item_opts Item_Options _nc_retrace_item_opts( Item_Options code) { return(*(Item_Options *)0); } #undef _nc_retrace_menu MENU *_nc_retrace_menu( MENU *code) { return(*(MENU **)0); } #undef _nc_retrace_menu_hook Menu_Hook _nc_retrace_menu_hook( Menu_Hook code) { return(*(Menu_Hook *)0); } #undef _nc_retrace_menu_opts Menu_Options _nc_retrace_menu_opts( Menu_Options code) { return(*(Menu_Options *)0); } /* ./m_userptr.c */ #undef set_menu_userptr int set_menu_userptr( MENU *menu, void *userptr) { return(*(int *)0); } #undef menu_userptr void *menu_userptr( const MENU *menu) { return(*(void **)0); } /* ./m_win.c */ #undef set_menu_win int set_menu_win( MENU *menu, WINDOW *win) { return(*(int *)0); } #undef menu_win WINDOW *menu_win( const MENU *menu) { return(*(WINDOW **)0); } ncurses-6.0-20160213/menu/m_item_cur.c0000644000175100001440000001156011326664012015713 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_item_cur * * Set and get current menus item * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_item_cur.c,v 1.18 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_current_item(MENU *menu, const ITEM *item) | | Description : Make the item the current item | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_current_item(MENU * menu, ITEM * item) { T((T_CALLED("set_current_item(%p,%p)"), (void *)menu, (void *)item)); if (menu && item && (item->imenu == menu)) { if (menu->status & _IN_DRIVER) RETURN(E_BAD_STATE); assert(menu->curitem); if (item != menu->curitem) { if (menu->status & _LINK_NEEDED) { /* * Items are available, but they are not linked together. * So we have to link here. */ _nc_Link_Items(menu); } assert(menu->pattern); Reset_Pattern(menu); /* adjust the window to make item visible and update the menu */ Adjust_Current_Item(menu, menu->toprow, item); } } else RETURN(E_BAD_ARGUMENT); RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : ITEM *current_item(const MENU *menu) | | Description : Return the menus current item | | Return Values : Item pointer or NULL if failure +--------------------------------------------------------------------------*/ NCURSES_EXPORT(ITEM *) current_item(const MENU * menu) { T((T_CALLED("current_item(%p)"), (const void *)menu)); returnItem((menu && menu->items) ? menu->curitem : (ITEM *) 0); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int item_index(const ITEM *) | | Description : Return the logical index of this item. | | Return Values : The index or ERR if this is an invalid item pointer +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) item_index(const ITEM * item) { T((T_CALLED("item_index(%p)"), (const void *)item)); returnCode((item && item->imenu) ? item->index : ERR); } /* m_item_cur.c ends here */ ncurses-6.0-20160213/menu/m_hook.c0000644000175100001440000001654212650770520015054 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_hook * * Assign application specific routines for automatic invocation by menus * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_hook.c,v 1.17 2016/01/23 21:32:00 tom Exp $") /* "Template" macro to generate function to set application specific hook */ #define GEN_HOOK_SET_FUNCTION( typ, name ) \ NCURSES_IMPEXP int NCURSES_API set_ ## typ ## _ ## name (MENU *menu, Menu_Hook func )\ {\ T((T_CALLED("set_" #typ "_" #name "(%p,%p)"), (void *) menu, TR_FUNC(func)));\ (Normalize_Menu(menu) -> typ ## name = func );\ RETURN(E_OK);\ } /* "Template" macro to generate function to get application specific hook */ #define GEN_HOOK_GET_FUNCTION( typ, name ) \ NCURSES_IMPEXP Menu_Hook NCURSES_API typ ## _ ## name ( const MENU *menu )\ {\ T((T_CALLED(#typ "_" #name "(%p)"), (const void *) menu));\ returnMenuHook(Normalize_Menu(menu) -> typ ## name);\ } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_init(MENU *menu, void (*f)(MENU *)) | | Description : Set user-exit which is called when menu is posted | or just after the top row changes. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ GEN_HOOK_SET_FUNCTION(menu, init) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void (*)(MENU *) menu_init(const MENU *menu) | | Description : Return address of user-exit function which is called | when a menu is posted or just after the top row | changes. | | Return Values : Menu init function address or NULL +--------------------------------------------------------------------------*/ GEN_HOOK_GET_FUNCTION(menu, init) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_term (MENU *menu, void (*f)(MENU *)) | | Description : Set user-exit which is called when menu is unposted | or just before the top row changes. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ GEN_HOOK_SET_FUNCTION(menu, term) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void (*)(MENU *) menu_term(const MENU *menu) | | Description : Return address of user-exit function which is called | when a menu is unposted or just before the top row | changes. | | Return Values : Menu finalization function address or NULL +--------------------------------------------------------------------------*/ GEN_HOOK_GET_FUNCTION(menu, term) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_item_init (MENU *menu, void (*f)(MENU *)) | | Description : Set user-exit which is called when menu is posted | or just after the current item changes. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ GEN_HOOK_SET_FUNCTION(item, init) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void (*)(MENU *) item_init (const MENU *menu) | | Description : Return address of user-exit function which is called | when a menu is posted or just after the current item | changes. | | Return Values : Item init function address or NULL +--------------------------------------------------------------------------*/ GEN_HOOK_GET_FUNCTION(item, init) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_item_term (MENU *menu, void (*f)(MENU *)) | | Description : Set user-exit which is called when menu is unposted | or just before the current item changes. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ GEN_HOOK_SET_FUNCTION(item, term) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void (*)(MENU *) item_init (const MENU *menu) | | Description : Return address of user-exit function which is called | when a menu is unposted or just before the current item | changes. | | Return Values : Item finalization function address or NULL +--------------------------------------------------------------------------*/ GEN_HOOK_GET_FUNCTION(item, term) /* m_hook.c ends here */ ncurses-6.0-20160213/menu/m_attribs.c0000644000175100001440000001525311726763455015576 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_attribs * * Control menus display attributes * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_attribs.c,v 1.17 2012/03/10 23:43:41 tom Exp $") /* Macro to redraw menu if it is posted and changed */ #define Refresh_Menu(menu) \ if ( (menu) && ((menu)->status & _POSTED) )\ {\ _nc_Draw_Menu( menu );\ _nc_Show_Menu( menu );\ } /* "Template" macro to generate a function to set a menus attribute */ #define GEN_MENU_ATTR_SET_FCT( name ) \ NCURSES_IMPEXP int NCURSES_API set_menu_ ## name (MENU* menu, chtype attr) \ {\ T((T_CALLED("set_menu_" #name "(%p,%s)"), (void *) menu, _traceattr(attr))); \ if (!(attr==A_NORMAL || (attr & A_ATTRIBUTES)==attr))\ RETURN(E_BAD_ARGUMENT);\ if (menu && ( menu -> name != attr))\ {\ (menu -> name) = attr;\ Refresh_Menu(menu);\ }\ Normalize_Menu( menu ) -> name = attr;\ RETURN(E_OK);\ } /* "Template" macro to generate a function to get a menu's attribute */ #define GEN_MENU_ATTR_GET_FCT( name ) \ NCURSES_IMPEXP chtype NCURSES_API menu_ ## name (const MENU * menu)\ {\ T((T_CALLED("menu_" #name "(%p)"), (const void *) menu));\ returnAttr(Normalize_Menu( menu ) -> name);\ } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_fore(MENU *menu, chtype attr) | | Description : Set the attribute for selectable items. In single- | valued menus this is used to highlight the current | item ((i.e. where the cursor is), in multi-valued | menus this is used to highlight the selected items. | | Return Values : E_OK - success | E_BAD_ARGUMENT - an invalid value has been passed +--------------------------------------------------------------------------*/ GEN_MENU_ATTR_SET_FCT(fore) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : chtype menu_fore(const MENU* menu) | | Description : Return the attribute used for selectable items that | are current (single-valued menu) or selected (multi- | valued menu). | | Return Values : Attribute value +--------------------------------------------------------------------------*/ GEN_MENU_ATTR_GET_FCT(fore) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_back(MENU *menu, chtype attr) | | Description : Set the attribute for selectable but not yet selected | items. | | Return Values : E_OK - success | E_BAD_ARGUMENT - an invalid value has been passed +--------------------------------------------------------------------------*/ GEN_MENU_ATTR_SET_FCT(back) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : chtype menu_back(const MENU *menu) | | Description : Return the attribute used for selectable but not yet | selected items. | | Return Values : Attribute value +--------------------------------------------------------------------------*/ GEN_MENU_ATTR_GET_FCT(back) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_grey(MENU *menu, chtype attr) | | Description : Set the attribute for unselectable items. | | Return Values : E_OK - success | E_BAD_ARGUMENT - an invalid value has been passed +--------------------------------------------------------------------------*/ GEN_MENU_ATTR_SET_FCT(grey) /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : chtype menu_grey(const MENU *menu) | | Description : Return the attribute used for non-selectable items | | Return Values : Attribute value +--------------------------------------------------------------------------*/ GEN_MENU_ATTR_GET_FCT(grey) /* m_attribs.c ends here */ ncurses-6.0-20160213/menu/m_userptr.c0000644000175100001440000000776211326664012015621 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_userptr * * Associate application data with menus * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_userptr.c,v 1.17 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_userptr(MENU *menu, void *userptr) | | Description : Set the pointer that is reserved in any menu to store | application relevant informations. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_menu_userptr(MENU * menu, void *userptr) { T((T_CALLED("set_menu_userptr(%p,%p)"), (void *)menu, (void *)userptr)); Normalize_Menu(menu)->userptr = userptr; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void *menu_userptr(const MENU *menu) | | Description : Return the pointer that is reserved in any menu to | store application relevant informations. | | Return Values : Value of the pointer. If no such pointer has been set, | NULL is returned +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void *) menu_userptr(const MENU * menu) { T((T_CALLED("menu_userptr(%p)"), (const void *)menu)); returnVoidPtr(Normalize_Menu(menu)->userptr); } /* m_userptr.c ends here */ ncurses-6.0-20160213/menu/modules0000644000175100001440000000640311326622607015023 0ustar tomusers# $Id: modules,v 1.18 2010/01/23 16:36:23 tom Exp $ ############################################################################## # Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # @ base # Library objects m_attribs lib $(srcdir) $(HEADER_DEPS) m_cursor lib $(srcdir) $(HEADER_DEPS) m_driver lib $(srcdir) $(HEADER_DEPS) m_format lib $(srcdir) $(HEADER_DEPS) m_global lib $(srcdir) $(HEADER_DEPS) m_hook lib $(srcdir) $(HEADER_DEPS) m_item_cur lib $(srcdir) $(HEADER_DEPS) m_item_nam lib $(srcdir) $(HEADER_DEPS) m_item_new lib $(srcdir) $(HEADER_DEPS) m_item_opt lib $(srcdir) $(HEADER_DEPS) m_item_top lib $(srcdir) $(HEADER_DEPS) m_item_use lib $(srcdir) $(HEADER_DEPS) m_item_val lib $(srcdir) $(HEADER_DEPS) m_item_vis lib $(srcdir) $(HEADER_DEPS) m_items lib $(srcdir) $(HEADER_DEPS) m_new lib $(srcdir) $(HEADER_DEPS) m_opts lib $(srcdir) $(HEADER_DEPS) m_pad lib $(srcdir) $(HEADER_DEPS) m_pattern lib $(srcdir) $(HEADER_DEPS) m_post lib $(srcdir) $(HEADER_DEPS) m_req_name lib $(srcdir) $(HEADER_DEPS) m_scale lib $(srcdir) $(HEADER_DEPS) m_spacing lib $(srcdir) $(HEADER_DEPS) m_sub lib $(srcdir) $(HEADER_DEPS) m_trace lib $(srcdir) $(HEADER_DEPS) m_userptr lib $(srcdir) $(HEADER_DEPS) m_win lib $(srcdir) $(HEADER_DEPS) # vile:makemode ncurses-6.0-20160213/menu/m_win.c0000644000175100001440000001053511326664013014703 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_win * * Menus window association routines * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_win.c,v 1.17 2010/01/23 21:20:11 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_win(MENU *menu, WINDOW *win) | | Description : Sets the window of the menu. | | Return Values : E_OK - success | E_POSTED - menu is already posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_menu_win(MENU * menu, WINDOW *win) { T((T_CALLED("set_menu_win(%p,%p)"), (void *)menu, (void *)win)); if (menu) { if (menu->status & _POSTED) RETURN(E_POSTED); else #if NCURSES_SP_FUNCS { /* We ensure that userwin is never null. So even if a null WINDOW parameter is passed, we store the SCREENS stdscr. The only MENU that can have a null userwin is the static _nc_default_Menu. */ SCREEN *sp = _nc_screen_of(menu->userwin); menu->userwin = win ? win : sp->_stdscr; _nc_Calculate_Item_Length_and_Width(menu); } #else menu->userwin = win; #endif } else _nc_Default_Menu.userwin = win; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : WINDOW* menu_win(const MENU*) | | Description : Returns pointer to the window of the menu | | Return Values : NULL on error, otherwise pointer to window +--------------------------------------------------------------------------*/ NCURSES_EXPORT(WINDOW *) menu_win(const MENU * menu) { const MENU *m = Normalize_Menu(menu); T((T_CALLED("menu_win(%p)"), (const void *)menu)); returnWin(Get_Menu_UserWin(m)); } /* m_win.c ends here */ ncurses-6.0-20160213/menu/m_driver.c0000644000175100001440000004010611726763455015414 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_driver * * Central dispatching routine * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_driver.c,v 1.31 2012/03/10 23:43:41 tom Exp $") /* Macros */ /* Remove the last character from the match pattern buffer */ #define Remove_Character_From_Pattern(menu) \ (menu)->pattern[--((menu)->pindex)] = '\0' /* Add a new character to the match pattern buffer */ #define Add_Character_To_Pattern(menu,ch) \ { (menu)->pattern[((menu)->pindex)++] = (char) (ch);\ (menu)->pattern[(menu)->pindex] = '\0'; } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : static bool Is_Sub_String( | bool IgnoreCaseFlag, | const char *part, | const char *string) | | Description : Checks whether or not part is a substring of string. | | Return Values : TRUE - if it is a substring | FALSE - if it is not a substring +--------------------------------------------------------------------------*/ static bool Is_Sub_String( bool IgnoreCaseFlag, const char *part, const char *string ) { assert(part && string); if (IgnoreCaseFlag) { while (*string && *part) { if (toupper(UChar(*string++)) != toupper(UChar(*part))) break; part++; } } else { while (*string && *part) if (*part != *string++) break; part++; } return ((*part) ? FALSE : TRUE); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int _nc_Match_Next_Character_In_Item_Name( | MENU *menu, | int ch, | ITEM **item) | | Description : This internal routine is called for a menu positioned | at an item with three different classes of characters: | - a printable character; the character is added to | the current pattern and the next item matching | this pattern is searched. | - NUL; the pattern stays as it is and the next item | matching the pattern is searched | - BS; the pattern stays as it is and the previous | item matching the pattern is searched | | The item parameter contains on call a pointer to | the item where the search starts. On return - if | a match was found - it contains a pointer to the | matching item. | | Return Values : E_OK - an item matching the pattern was found | E_NO_MATCH - nothing found +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) _nc_Match_Next_Character_In_Item_Name (MENU * menu, int ch, ITEM ** item) { bool found = FALSE, passed = FALSE; int idx, last; T((T_CALLED("_nc_Match_Next_Character(%p,%d,%p)"), (void *)menu, ch, (void *)item)); assert(menu && item && *item); idx = (*item)->index; if (ch && ch != BS) { /* if we become to long, we need no further checking : there can't be a match ! */ if ((menu->pindex + 1) > menu->namelen) RETURN(E_NO_MATCH); Add_Character_To_Pattern(menu, ch); /* we artificially position one item back, because in the do...while loop we start with the next item. This means, that with a new pattern search we always start the scan with the actual item. If we do a NEXT_PATTERN oder PREV_PATTERN search, we start with the one after or before the actual item. */ if (--idx < 0) idx = menu->nitems - 1; } last = idx; /* this closes the cycle */ do { if (ch == BS) { /* we have to go backward */ if (--idx < 0) idx = menu->nitems - 1; } else { /* otherwise we always go forward */ if (++idx >= menu->nitems) idx = 0; } if (Is_Sub_String((bool)((menu->opt & O_IGNORECASE) != 0), menu->pattern, menu->items[idx]->name.str) ) found = TRUE; else passed = TRUE; } while (!found && (idx != last)); if (found) { if (!((idx == (*item)->index) && passed)) { *item = menu->items[idx]; RETURN(E_OK); } /* This point is reached, if we fully cycled through the item list and the only match we found is the starting item. With a NEXT_PATTERN or PREV_PATTERN scan this means, that there was no additional match. If we searched with an expanded new pattern, we should never reach this point, because if the expanded pattern matches also the actual item we will find it in the first attempt (passed==FALSE) and we will never cycle through the whole item array. */ assert(ch == 0 || ch == BS); } else { if (ch && ch != BS && menu->pindex > 0) { /* if we had no match with a new pattern, we have to restore it */ Remove_Character_From_Pattern(menu); } } RETURN(E_NO_MATCH); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int menu_driver(MENU* menu, int c) | | Description : Central dispatcher for the menu. Translates the logical | request 'c' into a menu action. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid menu pointer | E_BAD_STATE - menu is in user hook routine | E_NOT_POSTED - menu is not posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) menu_driver(MENU * menu, int c) { #define NAVIGATE(dir) \ if (!item->dir)\ result = E_REQUEST_DENIED;\ else\ item = item->dir int result = E_OK; ITEM *item; int my_top_row, rdiff; T((T_CALLED("menu_driver(%p,%d)"), (void *)menu, c)); if (!menu) RETURN(E_BAD_ARGUMENT); if (menu->status & _IN_DRIVER) RETURN(E_BAD_STATE); if (!(menu->status & _POSTED)) RETURN(E_NOT_POSTED); item = menu->curitem; my_top_row = menu->toprow; assert(item); if ((c > KEY_MAX) && (c <= MAX_MENU_COMMAND)) { if (!((c == REQ_BACK_PATTERN) || (c == REQ_NEXT_MATCH) || (c == REQ_PREV_MATCH))) { assert(menu->pattern); Reset_Pattern(menu); } switch (c) { case REQ_LEFT_ITEM: /*=================*/ NAVIGATE(left); break; case REQ_RIGHT_ITEM: /*==================*/ NAVIGATE(right); break; case REQ_UP_ITEM: /*===============*/ NAVIGATE(up); break; case REQ_DOWN_ITEM: /*=================*/ NAVIGATE(down); break; case REQ_SCR_ULINE: /*=================*/ if (my_top_row == 0 || !(item->up)) result = E_REQUEST_DENIED; else { --my_top_row; item = item->up; } break; case REQ_SCR_DLINE: /*=================*/ if ((my_top_row + menu->arows >= menu->rows) || !(item->down)) { /* only if the menu has less items than rows, we can deny the request. Otherwise the epilogue of this routine adjusts the top row if necessary */ result = E_REQUEST_DENIED; } else { my_top_row++; item = item->down; } break; case REQ_SCR_DPAGE: /*=================*/ rdiff = menu->rows - (menu->arows + my_top_row); if (rdiff > menu->arows) rdiff = menu->arows; if (rdiff <= 0) result = E_REQUEST_DENIED; else { my_top_row += rdiff; while (rdiff-- > 0 && item != 0 && item->down != 0) item = item->down; } break; case REQ_SCR_UPAGE: /*=================*/ rdiff = (menu->arows < my_top_row) ? menu->arows : my_top_row; if (rdiff <= 0) result = E_REQUEST_DENIED; else { my_top_row -= rdiff; while (rdiff-- > 0 && item != 0 && item->up != 0) item = item->up; } break; case REQ_FIRST_ITEM: /*==================*/ item = menu->items[0]; break; case REQ_LAST_ITEM: /*=================*/ item = menu->items[menu->nitems - 1]; break; case REQ_NEXT_ITEM: /*=================*/ if ((item->index + 1) >= menu->nitems) { if (menu->opt & O_NONCYCLIC) result = E_REQUEST_DENIED; else item = menu->items[0]; } else item = menu->items[item->index + 1]; break; case REQ_PREV_ITEM: /*=================*/ if (item->index <= 0) { if (menu->opt & O_NONCYCLIC) result = E_REQUEST_DENIED; else item = menu->items[menu->nitems - 1]; } else item = menu->items[item->index - 1]; break; case REQ_TOGGLE_ITEM: /*===================*/ if (menu->opt & O_ONEVALUE) { result = E_REQUEST_DENIED; } else { if (menu->curitem->opt & O_SELECTABLE) { menu->curitem->value = !menu->curitem->value; Move_And_Post_Item(menu, menu->curitem); _nc_Show_Menu(menu); } else result = E_NOT_SELECTABLE; } break; case REQ_CLEAR_PATTERN: /*=====================*/ /* already cleared in prologue */ break; case REQ_BACK_PATTERN: /*====================*/ if (menu->pindex > 0) { assert(menu->pattern); Remove_Character_From_Pattern(menu); pos_menu_cursor(menu); } else result = E_REQUEST_DENIED; break; case REQ_NEXT_MATCH: /*==================*/ assert(menu->pattern); if (menu->pattern[0]) result = _nc_Match_Next_Character_In_Item_Name(menu, 0, &item); else { if ((item->index + 1) < menu->nitems) item = menu->items[item->index + 1]; else { if (menu->opt & O_NONCYCLIC) result = E_REQUEST_DENIED; else item = menu->items[0]; } } break; case REQ_PREV_MATCH: /*==================*/ assert(menu->pattern); if (menu->pattern[0]) result = _nc_Match_Next_Character_In_Item_Name(menu, BS, &item); else { if (item->index) item = menu->items[item->index - 1]; else { if (menu->opt & O_NONCYCLIC) result = E_REQUEST_DENIED; else item = menu->items[menu->nitems - 1]; } } break; default: /*======*/ result = E_UNKNOWN_COMMAND; break; } } else { /* not a command */ if (!(c & ~((int)MAX_REGULAR_CHARACTER)) && isprint(UChar(c))) result = _nc_Match_Next_Character_In_Item_Name(menu, c, &item); #ifdef NCURSES_MOUSE_VERSION else if (KEY_MOUSE == c) { MEVENT event; WINDOW *uwin = Get_Menu_UserWin(menu); getmouse(&event); if ((event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED | BUTTON1_TRIPLE_CLICKED)) && wenclose(uwin, event.y, event.x)) { /* we react only if the click was in the userwin, that means * inside the menu display area or at the decoration window. */ WINDOW *sub = Get_Menu_Window(menu); int ry = event.y, rx = event.x; /* screen coordinates */ result = E_REQUEST_DENIED; if (mouse_trafo(&ry, &rx, FALSE)) { /* rx, ry are now "curses" coordinates */ if (ry < sub->_begy) { /* we clicked above the display region; this is * interpreted as "scroll up" request */ if (event.bstate & BUTTON1_CLICKED) result = menu_driver(menu, REQ_SCR_ULINE); else if (event.bstate & BUTTON1_DOUBLE_CLICKED) result = menu_driver(menu, REQ_SCR_UPAGE); else if (event.bstate & BUTTON1_TRIPLE_CLICKED) result = menu_driver(menu, REQ_FIRST_ITEM); RETURN(result); } else if (ry > sub->_begy + sub->_maxy) { /* we clicked below the display region; this is * interpreted as "scroll down" request */ if (event.bstate & BUTTON1_CLICKED) result = menu_driver(menu, REQ_SCR_DLINE); else if (event.bstate & BUTTON1_DOUBLE_CLICKED) result = menu_driver(menu, REQ_SCR_DPAGE); else if (event.bstate & BUTTON1_TRIPLE_CLICKED) result = menu_driver(menu, REQ_LAST_ITEM); RETURN(result); } else if (wenclose(sub, event.y, event.x)) { /* Inside the area we try to find the hit item */ int i, x, y, err; ry = event.y; rx = event.x; if (wmouse_trafo(sub, &ry, &rx, FALSE)) { for (i = 0; i < menu->nitems; i++) { err = _nc_menu_cursor_pos(menu, menu->items[i], &y, &x); if (E_OK == err) { if ((ry == y) && (rx >= x) && (rx < x + menu->itemlen)) { item = menu->items[i]; result = E_OK; break; } } } if (E_OK == result) { /* We found an item, now we can handle the click. * A single click just positions the menu cursor * to the clicked item. A double click toggles * the item. */ if (event.bstate & BUTTON1_DOUBLE_CLICKED) { _nc_New_TopRow_and_CurrentItem(menu, my_top_row, item); menu_driver(menu, REQ_TOGGLE_ITEM); result = E_UNKNOWN_COMMAND; } } } } } } else result = E_REQUEST_DENIED; } #endif /* NCURSES_MOUSE_VERSION */ else result = E_UNKNOWN_COMMAND; } if (item == 0) { result = E_BAD_STATE; } else if (E_OK == result) { /* Adjust the top row if it turns out that the current item unfortunately doesn't appear in the menu window */ if (item->y < my_top_row) my_top_row = item->y; else if (item->y >= (my_top_row + menu->arows)) my_top_row = item->y - menu->arows + 1; _nc_New_TopRow_and_CurrentItem(menu, my_top_row, item); } RETURN(result); } /* m_driver.c ends here */ ncurses-6.0-20160213/menu/READ.ME0000644000175100001440000000516710422534201014360 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-2003,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: READ.ME,v 1.9 2006/04/22 23:13:05 tom Exp $ ------------------------------------------------------------------------------- This is a clone of the menu library that is available with typical System V curses implementations (ETI). It is modelled after the documentation that comes for this library with a 386 based SVR4 implementation (ESIX). The development environment was and is an ELF based Linux system. For things that still need doing, see the TO-DO file in the top-level directory. Juergen Pfeifer ncurses-6.0-20160213/menu/m_cursor.c0000644000175100001440000001117111326664012015417 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_cursor * * Correctly position a menu's cursor * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_cursor.c,v 1.22 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : _nc_menu_cursor_pos | | Description : Return position of logical cursor to current item | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid menu | E_NOT_POSTED - Menu is not posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) _nc_menu_cursor_pos(const MENU * menu, const ITEM * item, int *pY, int *pX) { if (!menu || !pX || !pY) return (E_BAD_ARGUMENT); else { if ((ITEM *) 0 == item) item = menu->curitem; assert(item != (ITEM *) 0); if (!(menu->status & _POSTED)) return (E_NOT_POSTED); *pX = item->x * (menu->spc_cols + menu->itemlen); *pY = (item->y - menu->toprow) * menu->spc_rows; } return (E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : pos_menu_cursor | | Description : Position logical cursor to current item in menu | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid menu | E_NOT_POSTED - Menu is not posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) pos_menu_cursor(const MENU * menu) { WINDOW *win, *sub; int x = 0, y = 0; int err = _nc_menu_cursor_pos(menu, (ITEM *) 0, &y, &x); T((T_CALLED("pos_menu_cursor(%p)"), (const void *)menu)); if (E_OK == err) { win = Get_Menu_UserWin(menu); sub = menu->usersub ? menu->usersub : win; assert(win && sub); if ((menu->opt & O_SHOWMATCH) && (menu->pindex > 0)) x += (menu->pindex + menu->marklen - 1); wmove(sub, y, x); if (win != sub) { wcursyncup(sub); wsyncup(sub); untouchwin(sub); } } RETURN(err); } /* m_cursor.c ends here */ ncurses-6.0-20160213/menu/menu.h0000644000175100001440000002725611165775427014570 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2007,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /* $Id: menu.h,v 1.20 2009/04/05 00:28:07 tom Exp $ */ #ifndef ETI_MENU #define ETI_MENU #ifdef AMIGA #define TEXT TEXT_ncurses #endif #include #include #ifdef __cplusplus extern "C" { #endif typedef int Menu_Options; typedef int Item_Options; /* Menu options: */ #define O_ONEVALUE (0x01) #define O_SHOWDESC (0x02) #define O_ROWMAJOR (0x04) #define O_IGNORECASE (0x08) #define O_SHOWMATCH (0x10) #define O_NONCYCLIC (0x20) /* Item options: */ #define O_SELECTABLE (0x01) typedef struct { const char* str; unsigned short length; } TEXT; typedef struct tagITEM { TEXT name; /* name of menu item */ TEXT description; /* description of item, optional in display */ struct tagMENU *imenu; /* Pointer to parent menu */ void *userptr; /* Pointer to user defined per item data */ Item_Options opt; /* Item options */ short index; /* Item number if connected to a menu */ short y; /* y and x location of item in menu */ short x; bool value; /* Selection value */ struct tagITEM *left; /* neighbor items */ struct tagITEM *right; struct tagITEM *up; struct tagITEM *down; } ITEM; typedef void (*Menu_Hook)(struct tagMENU *); typedef struct tagMENU { short height; /* Nr. of chars high */ short width; /* Nr. of chars wide */ short rows; /* Nr. of items high */ short cols; /* Nr. of items wide */ short frows; /* Nr. of formatted items high */ short fcols; /* Nr. of formatted items wide */ short arows; /* Nr. of items high (actual) */ short namelen; /* Max. name length */ short desclen; /* Max. description length */ short marklen; /* Length of mark, if any */ short itemlen; /* Length of one item */ short spc_desc; /* Spacing for descriptor */ short spc_cols; /* Spacing for columns */ short spc_rows; /* Spacing for rows */ char *pattern; /* Buffer to store match chars */ short pindex; /* Index into pattern buffer */ WINDOW *win; /* Window containing menu */ WINDOW *sub; /* Subwindow for menu display */ WINDOW *userwin; /* User's window */ WINDOW *usersub; /* User's subwindow */ ITEM **items; /* array of items */ short nitems; /* Nr. of items in menu */ ITEM *curitem; /* Current item */ short toprow; /* Top row of menu */ chtype fore; /* Selection attribute */ chtype back; /* Nonselection attribute */ chtype grey; /* Inactive attribute */ unsigned char pad; /* Pad character */ Menu_Hook menuinit; /* User hooks */ Menu_Hook menuterm; Menu_Hook iteminit; Menu_Hook itemterm; void *userptr; /* Pointer to menus user data */ char *mark; /* Pointer to marker string */ Menu_Options opt; /* Menu options */ unsigned short status; /* Internal state of menu */ } MENU; /* Define keys */ #define REQ_LEFT_ITEM (KEY_MAX + 1) #define REQ_RIGHT_ITEM (KEY_MAX + 2) #define REQ_UP_ITEM (KEY_MAX + 3) #define REQ_DOWN_ITEM (KEY_MAX + 4) #define REQ_SCR_ULINE (KEY_MAX + 5) #define REQ_SCR_DLINE (KEY_MAX + 6) #define REQ_SCR_DPAGE (KEY_MAX + 7) #define REQ_SCR_UPAGE (KEY_MAX + 8) #define REQ_FIRST_ITEM (KEY_MAX + 9) #define REQ_LAST_ITEM (KEY_MAX + 10) #define REQ_NEXT_ITEM (KEY_MAX + 11) #define REQ_PREV_ITEM (KEY_MAX + 12) #define REQ_TOGGLE_ITEM (KEY_MAX + 13) #define REQ_CLEAR_PATTERN (KEY_MAX + 14) #define REQ_BACK_PATTERN (KEY_MAX + 15) #define REQ_NEXT_MATCH (KEY_MAX + 16) #define REQ_PREV_MATCH (KEY_MAX + 17) #define MIN_MENU_COMMAND (KEY_MAX + 1) #define MAX_MENU_COMMAND (KEY_MAX + 17) /* * Some AT&T code expects MAX_COMMAND to be out-of-band not * just for menu commands but for forms ones as well. */ #if defined(MAX_COMMAND) # if (MAX_MENU_COMMAND > MAX_COMMAND) # error Something is wrong -- MAX_MENU_COMMAND is greater than MAX_COMMAND # elif (MAX_COMMAND != (KEY_MAX + 128)) # error Something is wrong -- MAX_COMMAND is already inconsistently defined. # endif #else # define MAX_COMMAND (KEY_MAX + 128) #endif /* --------- prototypes for libmenu functions ----------------------------- */ extern NCURSES_EXPORT(ITEM **) menu_items (const MENU *); extern NCURSES_EXPORT(ITEM *) current_item (const MENU *); extern NCURSES_EXPORT(ITEM *) new_item (const char *,const char *); extern NCURSES_EXPORT(MENU *) new_menu (ITEM **); extern NCURSES_EXPORT(Item_Options) item_opts (const ITEM *); extern NCURSES_EXPORT(Menu_Options) menu_opts (const MENU *); extern NCURSES_EXPORT(Menu_Hook) item_init (const MENU *); extern NCURSES_EXPORT(Menu_Hook) item_term (const MENU *); extern NCURSES_EXPORT(Menu_Hook) menu_init (const MENU *); extern NCURSES_EXPORT(Menu_Hook) menu_term (const MENU *); extern NCURSES_EXPORT(WINDOW *) menu_sub (const MENU *); extern NCURSES_EXPORT(WINDOW *) menu_win (const MENU *); extern NCURSES_EXPORT(const char *) item_description (const ITEM *); extern NCURSES_EXPORT(const char *) item_name (const ITEM *); extern NCURSES_EXPORT(const char *) menu_mark (const MENU *); extern NCURSES_EXPORT(const char *) menu_request_name (int); extern NCURSES_EXPORT(char *) menu_pattern (const MENU *); extern NCURSES_EXPORT(void *) menu_userptr (const MENU *); extern NCURSES_EXPORT(void *) item_userptr (const ITEM *); extern NCURSES_EXPORT(chtype) menu_back (const MENU *); extern NCURSES_EXPORT(chtype) menu_fore (const MENU *); extern NCURSES_EXPORT(chtype) menu_grey (const MENU *); extern NCURSES_EXPORT(int) free_item (ITEM *); extern NCURSES_EXPORT(int) free_menu (MENU *); extern NCURSES_EXPORT(int) item_count (const MENU *); extern NCURSES_EXPORT(int) item_index (const ITEM *); extern NCURSES_EXPORT(int) item_opts_off (ITEM *,Item_Options); extern NCURSES_EXPORT(int) item_opts_on (ITEM *,Item_Options); extern NCURSES_EXPORT(int) menu_driver (MENU *,int); extern NCURSES_EXPORT(int) menu_opts_off (MENU *,Menu_Options); extern NCURSES_EXPORT(int) menu_opts_on (MENU *,Menu_Options); extern NCURSES_EXPORT(int) menu_pad (const MENU *); extern NCURSES_EXPORT(int) pos_menu_cursor (const MENU *); extern NCURSES_EXPORT(int) post_menu (MENU *); extern NCURSES_EXPORT(int) scale_menu (const MENU *,int *,int *); extern NCURSES_EXPORT(int) set_current_item (MENU *menu,ITEM *item); extern NCURSES_EXPORT(int) set_item_init (MENU *, Menu_Hook); extern NCURSES_EXPORT(int) set_item_opts (ITEM *,Item_Options); extern NCURSES_EXPORT(int) set_item_term (MENU *, Menu_Hook); extern NCURSES_EXPORT(int) set_item_userptr (ITEM *, void *); extern NCURSES_EXPORT(int) set_item_value (ITEM *,bool); extern NCURSES_EXPORT(int) set_menu_back (MENU *,chtype); extern NCURSES_EXPORT(int) set_menu_fore (MENU *,chtype); extern NCURSES_EXPORT(int) set_menu_format (MENU *,int,int); extern NCURSES_EXPORT(int) set_menu_grey (MENU *,chtype); extern NCURSES_EXPORT(int) set_menu_init (MENU *, Menu_Hook); extern NCURSES_EXPORT(int) set_menu_items (MENU *,ITEM **); extern NCURSES_EXPORT(int) set_menu_mark (MENU *, const char *); extern NCURSES_EXPORT(int) set_menu_opts (MENU *,Menu_Options); extern NCURSES_EXPORT(int) set_menu_pad (MENU *,int); extern NCURSES_EXPORT(int) set_menu_pattern (MENU *,const char *); extern NCURSES_EXPORT(int) set_menu_sub (MENU *,WINDOW *); extern NCURSES_EXPORT(int) set_menu_term (MENU *, Menu_Hook); extern NCURSES_EXPORT(int) set_menu_userptr (MENU *,void *); extern NCURSES_EXPORT(int) set_menu_win (MENU *,WINDOW *); extern NCURSES_EXPORT(int) set_top_row (MENU *,int); extern NCURSES_EXPORT(int) top_row (const MENU *); extern NCURSES_EXPORT(int) unpost_menu (MENU *); extern NCURSES_EXPORT(int) menu_request_by_name (const char *); extern NCURSES_EXPORT(int) set_menu_spacing (MENU *,int,int,int); extern NCURSES_EXPORT(int) menu_spacing (const MENU *,int *,int *,int *); extern NCURSES_EXPORT(bool) item_value (const ITEM *); extern NCURSES_EXPORT(bool) item_visible (const ITEM *); extern NCURSES_EXPORT(void) menu_format (const MENU *,int *,int *); #if NCURSES_SP_FUNCS extern NCURSES_EXPORT(MENU *) NCURSES_SP_NAME(new_menu) (SCREEN*, ITEM **); #endif #ifdef __cplusplus } #endif #endif /* ETI_MENU */ ncurses-6.0-20160213/menu/m_pad.c0000644000175100001440000001040611726763455014665 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_pad * * Control menus padding character * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_pad.c,v 1.13 2012/03/10 23:43:41 tom Exp $") /* Macro to redraw menu if it is posted and changed */ #define Refresh_Menu(menu) \ if ( (menu) && ((menu)->status & _POSTED) )\ {\ _nc_Draw_Menu( menu );\ _nc_Show_Menu( menu ); \ } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int set_menu_pad(MENU* menu, int pad) | | Description : Set the character to be used to separate the item name | from its description. This must be a printable | character. | | Return Values : E_OK - success | E_BAD_ARGUMENT - an invalid value has been passed +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_menu_pad(MENU * menu, int pad) { bool do_refresh = (menu != (MENU *) 0); T((T_CALLED("set_menu_pad(%p,%d)"), (void *)menu, pad)); if (!isprint(UChar(pad))) RETURN(E_BAD_ARGUMENT); Normalize_Menu(menu); menu->pad = (unsigned char)pad; if (do_refresh) Refresh_Menu(menu); RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int menu_pad(const MENU *menu) | | Description : Return the value of the padding character | | Return Values : The pad character +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) menu_pad(const MENU * menu) { T((T_CALLED("menu_pad(%p)"), (const void *)menu)); returnCode(Normalize_Menu(menu)->pad); } /* m_pad.c ends here */ ncurses-6.0-20160213/menu/m_post.c0000644000175100001440000002541711764761073015112 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_post * * Write or erase menus from associated subwindows * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_post.c,v 1.31 2012/06/09 23:54:35 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void _nc_Post_Item(MENU *menu, ITEM *item) | | Description : Draw the item in the menus window at the current | window position | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) _nc_Post_Item(const MENU * menu, const ITEM * item) { int i; chtype ch; int item_x, item_y; int count = 0; bool isfore = FALSE, isback = FALSE, isgrey = FALSE; int name_len; int desc_len; assert(menu->win); getyx(menu->win, item_y, item_x); /* We need a marker iff - it is a onevalued menu and it is the current item - or it has a selection value */ wattron(menu->win, (int)menu->back); if (item->value || (item == menu->curitem)) { if (menu->marklen) { /* In a multi selection menu we use the fore attribute for a selected marker that is not the current one. This improves visualization of the menu, because now always the 'normal' marker denotes the current item. */ if (!(menu->opt & O_ONEVALUE) && item->value && item != menu->curitem) { wattron(menu->win, (int)menu->fore); isfore = TRUE; } waddstr(menu->win, menu->mark); if (isfore) { wattron(menu->win, (int)menu->fore); isfore = FALSE; } } } else /* otherwise we have to wipe out the marker area */ for (ch = ' ', i = menu->marklen; i > 0; i--) waddch(menu->win, ch); wattroff(menu->win, (int)menu->back); count += menu->marklen; /* First we have to calculate the attribute depending on selectability and selection status */ if (!(item->opt & O_SELECTABLE)) { wattron(menu->win, (int)menu->grey); isgrey = TRUE; } else { if (item->value || item == menu->curitem) { wattron(menu->win, (int)menu->fore); isfore = TRUE; } else { wattron(menu->win, (int)menu->back); isback = TRUE; } } waddnstr(menu->win, item->name.str, item->name.length); name_len = _nc_Calculate_Text_Width(&(item->name)); for (ch = ' ', i = menu->namelen - name_len; i > 0; i--) { waddch(menu->win, ch); } count += menu->namelen; /* Show description if required and available */ if ((menu->opt & O_SHOWDESC) && menu->desclen > 0) { int m = menu->spc_desc / 2; int cy = -1, cx = -1; for (ch = ' ', i = 0; i < menu->spc_desc; i++) { if (i == m) { waddch(menu->win, menu->pad); getyx(menu->win, cy, cx); } else waddch(menu->win, ch); } if (item->description.length) waddnstr(menu->win, item->description.str, item->description.length); desc_len = _nc_Calculate_Text_Width(&(item->description)); for (ch = ' ', i = menu->desclen - desc_len; i > 0; i--) { waddch(menu->win, ch); } count += menu->desclen + menu->spc_desc; if (menu->spc_rows > 1) { int j, k, ncy, ncx; assert(cx >= 0 && cy >= 0); getyx(menu->win, ncy, ncx); if (isgrey) wattroff(menu->win, (int)menu->grey); else if (isfore) wattroff(menu->win, (int)menu->fore); wattron(menu->win, (int)menu->back); for (j = 1; j < menu->spc_rows; j++) { if ((item_y + j) < getmaxy(menu->win)) { wmove(menu->win, item_y + j, item_x); for (k = 0; k < count; k++) waddch(menu->win, ' '); } if ((cy + j) < getmaxy(menu->win)) (void)mvwaddch(menu->win, cy + j, cx - 1, menu->pad); } wmove(menu->win, ncy, ncx); if (!isback) wattroff(menu->win, (int)menu->back); } } /* Remove attributes */ if (isfore) wattroff(menu->win, (int)menu->fore); if (isback) wattroff(menu->win, (int)menu->back); if (isgrey) wattroff(menu->win, (int)menu->grey); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void _nc_Draw_Menu(const MENU *) | | Description : Display the menu in its windows | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) _nc_Draw_Menu(const MENU * menu) { ITEM *item = menu->items[0]; ITEM *lasthor, *lastvert; ITEM *hitem; int y = 0; chtype s_bkgd; assert(item && menu->win); s_bkgd = getbkgd(menu->win); wbkgdset(menu->win, menu->back); werase(menu->win); wbkgdset(menu->win, s_bkgd); lastvert = (menu->opt & O_NONCYCLIC) ? (ITEM *) 0 : item; do { wmove(menu->win, y, 0); hitem = item; lasthor = (menu->opt & O_NONCYCLIC) ? (ITEM *) 0 : hitem; do { _nc_Post_Item(menu, hitem); wattron(menu->win, (int)menu->back); if (((hitem = hitem->right) != lasthor) && hitem) { int i, j, cy, cx; chtype ch = ' '; getyx(menu->win, cy, cx); for (j = 0; j < menu->spc_rows; j++) { wmove(menu->win, cy + j, cx); for (i = 0; i < menu->spc_cols; i++) { waddch(menu->win, ch); } } wmove(menu->win, cy, cx + menu->spc_cols); } } while (hitem && (hitem != lasthor)); wattroff(menu->win, (int)menu->back); item = item->down; y += menu->spc_rows; } while (item && (item != lastvert)); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int post_menu(MENU* menu) | | Description : Post a menu to the screen. This makes it visible. | | Return Values : E_OK - success | E_BAD_ARGUMENT - not a valid menu pointer | E_SYSTEM_ERROR - error in lower layers | E_NOT_CONNECTED - No items connected to menu | E_BAD_STATE - Menu in userexit routine | E_POSTED - Menu already posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) post_menu(MENU * menu) { T((T_CALLED("post_menu(%p)"), (void *)menu)); if (!menu) RETURN(E_BAD_ARGUMENT); if (menu->status & _IN_DRIVER) RETURN(E_BAD_STATE); if (menu->status & _POSTED) RETURN(E_POSTED); if (menu->items && *(menu->items)) { int y; int h = 1 + menu->spc_rows * (menu->rows - 1); WINDOW *win = Get_Menu_Window(menu); int maxy = getmaxy(win); if ((menu->win = newpad(h, menu->width))) { y = (maxy >= h) ? h : maxy; if (y >= menu->height) y = menu->height; if (!(menu->sub = subpad(menu->win, y, menu->width, 0, 0))) RETURN(E_SYSTEM_ERROR); } else RETURN(E_SYSTEM_ERROR); if (menu->status & _LINK_NEEDED) _nc_Link_Items(menu); } else RETURN(E_NOT_CONNECTED); SetStatus(menu, _POSTED); if (!(menu->opt & O_ONEVALUE)) { ITEM **items; for (items = menu->items; *items; items++) { (*items)->value = FALSE; } } _nc_Draw_Menu(menu); Call_Hook(menu, menuinit); Call_Hook(menu, iteminit); _nc_Show_Menu(menu); RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : int unpost_menu(MENU*) | | Description : Detach menu from screen | | Return Values : E_OK - success | E_BAD_ARGUMENT - not a valid menu pointer | E_BAD_STATE - menu in userexit routine | E_NOT_POSTED - menu is not posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) unpost_menu(MENU * menu) { WINDOW *win; T((T_CALLED("unpost_menu(%p)"), (void *)menu)); if (!menu) RETURN(E_BAD_ARGUMENT); if (menu->status & _IN_DRIVER) RETURN(E_BAD_STATE); if (!(menu->status & _POSTED)) RETURN(E_NOT_POSTED); Call_Hook(menu, itemterm); Call_Hook(menu, menuterm); win = Get_Menu_Window(menu); werase(win); wsyncup(win); assert(menu->sub); delwin(menu->sub); menu->sub = (WINDOW *)0; assert(menu->win); delwin(menu->win); menu->win = (WINDOW *)0; ClrStatus(menu, _POSTED); RETURN(E_OK); } /* m_post.c ends here */ ncurses-6.0-20160213/menu/m_item_vis.c0000644000175100001440000000676111326664012015732 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module m_item_vis * * Tell if menu item is visible * ***************************************************************************/ #include "menu.priv.h" MODULE_ID("$Id: m_item_vis.c,v 1.16 2010/01/23 21:20:10 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnmenu | Function : bool item_visible(const ITEM *item) | | Description : A item is visible if it currently appears in the | subwindow of a posted menu. | | Return Values : TRUE if visible | FALSE if invisible +--------------------------------------------------------------------------*/ NCURSES_EXPORT(bool) item_visible(const ITEM * item) { MENU *menu; T((T_CALLED("item_visible(%p)"), (const void *)item)); if (item && (menu = item->imenu) && (menu->status & _POSTED) && ((menu->toprow + menu->arows) > (item->y)) && (item->y >= menu->toprow)) returnBool(TRUE); else returnBool(FALSE); } /* m_item_vis.c ends here */ ncurses-6.0-20160213/menu/llib-lmenuw0000644000175100001440000002537012563672433015614 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2002-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./m_attribs.c */ #include #undef set_menu_fore int set_menu_fore( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_fore chtype menu_fore( const MENU *menu) { return(*(chtype *)0); } #undef set_menu_back int set_menu_back( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_back chtype menu_back( const MENU *menu) { return(*(chtype *)0); } #undef set_menu_grey int set_menu_grey( MENU *menu, chtype attr) { return(*(int *)0); } #undef menu_grey chtype menu_grey( const MENU *menu) { return(*(chtype *)0); } /* ./m_cursor.c */ #undef _nc_menu_cursor_pos int _nc_menu_cursor_pos( const MENU *menu, const ITEM *item, int *pY, int *pX) { return(*(int *)0); } #undef pos_menu_cursor int pos_menu_cursor( const MENU *menu) { return(*(int *)0); } /* ./m_driver.c */ #undef _nc_Match_Next_Character_In_Item_Name int _nc_Match_Next_Character_In_Item_Name( MENU *menu, int ch, ITEM **item) { return(*(int *)0); } #undef menu_driver int menu_driver( MENU *menu, int c) { return(*(int *)0); } /* ./m_format.c */ #undef set_menu_format int set_menu_format( MENU *menu, int rows, int cols) { return(*(int *)0); } #undef menu_format void menu_format( const MENU *menu, int *rows, int *cols) { /* void */ } /* ./m_global.c */ #undef _nc_Default_Menu MENU _nc_Default_Menu; #undef _nc_Default_Item ITEM _nc_Default_Item; #undef _nc_Connect_Items NCURSES_BOOL _nc_Connect_Items( MENU *menu, ITEM **items) { return(*(NCURSES_BOOL *)0); } #undef _nc_Disconnect_Items void _nc_Disconnect_Items( MENU *menu) { /* void */ } #undef _nc_Calculate_Text_Width int _nc_Calculate_Text_Width( const TEXT *item) { return(*(int *)0); } #undef _nc_Calculate_Item_Length_and_Width void _nc_Calculate_Item_Length_and_Width( MENU *menu) { /* void */ } #undef _nc_Link_Items void _nc_Link_Items( MENU *menu) { /* void */ } #undef _nc_Show_Menu void _nc_Show_Menu( const MENU *menu) { /* void */ } #undef _nc_New_TopRow_and_CurrentItem void _nc_New_TopRow_and_CurrentItem( MENU *menu, int new_toprow, ITEM *new_current_item) { /* void */ } /* ./m_hook.c */ #undef set_menu_init int set_menu_init( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef menu_init Menu_Hook menu_init( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_menu_term int set_menu_term( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef menu_term Menu_Hook menu_term( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_item_init int set_item_init( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef item_init Menu_Hook item_init( const MENU *menu) { return(*(Menu_Hook *)0); } #undef set_item_term int set_item_term( MENU *menu, Menu_Hook func) { return(*(int *)0); } #undef item_term Menu_Hook item_term( const MENU *menu) { return(*(Menu_Hook *)0); } /* ./m_item_cur.c */ #undef set_current_item int set_current_item( MENU *menu, ITEM *item) { return(*(int *)0); } #undef current_item ITEM *current_item( const MENU *menu) { return(*(ITEM **)0); } #undef item_index int item_index( const ITEM *item) { return(*(int *)0); } /* ./m_item_nam.c */ #undef item_name const char *item_name( const ITEM *item) { return(*(const char **)0); } #undef item_description const char *item_description( const ITEM *item) { return(*(const char **)0); } /* ./m_item_new.c */ #undef new_item ITEM *new_item( const char *name, const char *description) { return(*(ITEM **)0); } #undef free_item int free_item( ITEM *item) { return(*(int *)0); } #undef set_menu_mark int set_menu_mark( MENU *menu, const char *mark) { return(*(int *)0); } #undef menu_mark const char *menu_mark( const MENU *menu) { return(*(const char **)0); } /* ./m_item_opt.c */ #undef set_item_opts int set_item_opts( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts_off int item_opts_off( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts_on int item_opts_on( ITEM *item, Item_Options opts) { return(*(int *)0); } #undef item_opts Item_Options item_opts( const ITEM *item) { return(*(Item_Options *)0); } /* ./m_item_top.c */ #undef set_top_row int set_top_row( MENU *menu, int row) { return(*(int *)0); } #undef top_row int top_row( const MENU *menu) { return(*(int *)0); } /* ./m_item_use.c */ #undef set_item_userptr int set_item_userptr( ITEM *item, void *userptr) { return(*(int *)0); } #undef item_userptr void *item_userptr( const ITEM *item) { return(*(void **)0); } /* ./m_item_val.c */ #undef set_item_value int set_item_value( ITEM *item, NCURSES_BOOL value) { return(*(int *)0); } #undef item_value NCURSES_BOOL item_value( const ITEM *item) { return(*(NCURSES_BOOL *)0); } /* ./m_item_vis.c */ #undef item_visible NCURSES_BOOL item_visible( const ITEM *item) { return(*(NCURSES_BOOL *)0); } /* ./m_items.c */ #undef set_menu_items int set_menu_items( MENU *menu, ITEM **items) { return(*(int *)0); } #undef menu_items ITEM **menu_items( const MENU *menu) { return(*(ITEM ***)0); } #undef item_count int item_count( const MENU *menu) { return(*(int *)0); } /* ./m_new.c */ #undef new_menu_sp MENU *new_menu_sp( SCREEN *sp, ITEM **items) { return(*(MENU **)0); } #undef new_menu MENU *new_menu( ITEM **items) { return(*(MENU **)0); } #undef free_menu int free_menu( MENU *menu) { return(*(int *)0); } /* ./m_opts.c */ #undef set_menu_opts int set_menu_opts( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts_off int menu_opts_off( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts_on int menu_opts_on( MENU *menu, Menu_Options opts) { return(*(int *)0); } #undef menu_opts Menu_Options menu_opts( const MENU *menu) { return(*(Menu_Options *)0); } /* ./m_pad.c */ #undef set_menu_pad int set_menu_pad( MENU *menu, int pad) { return(*(int *)0); } #undef menu_pad int menu_pad( const MENU *menu) { return(*(int *)0); } /* ./m_pattern.c */ #undef menu_pattern char *menu_pattern( const MENU *menu) { return(*(char **)0); } #undef set_menu_pattern int set_menu_pattern( MENU *menu, const char *p) { return(*(int *)0); } /* ./m_post.c */ #undef _nc_Post_Item void _nc_Post_Item( const MENU *menu, const ITEM *item) { /* void */ } #undef _nc_Draw_Menu void _nc_Draw_Menu( const MENU *menu) { /* void */ } #undef post_menu int post_menu( MENU *menu) { return(*(int *)0); } #undef unpost_menu int unpost_menu( MENU *menu) { return(*(int *)0); } /* ./m_req_name.c */ #undef menu_request_name const char *menu_request_name( int request) { return(*(const char **)0); } #undef menu_request_by_name int menu_request_by_name( const char *str) { return(*(int *)0); } /* ./m_scale.c */ #undef scale_menu int scale_menu( const MENU *menu, int *rows, int *cols) { return(*(int *)0); } /* ./m_spacing.c */ #undef set_menu_spacing int set_menu_spacing( MENU *menu, int s_desc, int s_row, int s_col) { return(*(int *)0); } #undef menu_spacing int menu_spacing( const MENU *menu, int *s_desc, int *s_row, int *s_col) { return(*(int *)0); } /* ./m_sub.c */ #undef set_menu_sub int set_menu_sub( MENU *menu, WINDOW *win) { return(*(int *)0); } #undef menu_sub WINDOW *menu_sub( const MENU *menu) { return(*(WINDOW **)0); } /* ./m_trace.c */ #undef _nc_retrace_item ITEM *_nc_retrace_item( ITEM *code) { return(*(ITEM **)0); } #undef _nc_retrace_item_ptr ITEM **_nc_retrace_item_ptr( ITEM **code) { return(*(ITEM ***)0); } #undef _nc_retrace_item_opts Item_Options _nc_retrace_item_opts( Item_Options code) { return(*(Item_Options *)0); } #undef _nc_retrace_menu MENU *_nc_retrace_menu( MENU *code) { return(*(MENU **)0); } #undef _nc_retrace_menu_hook Menu_Hook _nc_retrace_menu_hook( Menu_Hook code) { return(*(Menu_Hook *)0); } #undef _nc_retrace_menu_opts Menu_Options _nc_retrace_menu_opts( Menu_Options code) { return(*(Menu_Options *)0); } /* ./m_userptr.c */ #undef set_menu_userptr int set_menu_userptr( MENU *menu, void *userptr) { return(*(int *)0); } #undef menu_userptr void *menu_userptr( const MENU *menu) { return(*(void **)0); } /* ./m_win.c */ #undef set_menu_win int set_menu_win( MENU *menu, WINDOW *win) { return(*(int *)0); } #undef menu_win WINDOW *menu_win( const MENU *menu) { return(*(WINDOW **)0); } ncurses-6.0-20160213/menu/eti.h0000644000175100001440000000551307746512655014377 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2002,2003 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /* $Id: eti.h,v 1.8 2003/10/25 15:24:29 tom Exp $ */ #ifndef NCURSES_ETI_H_incl #define NCURSES_ETI_H_incl 1 #define E_OK (0) #define E_SYSTEM_ERROR (-1) #define E_BAD_ARGUMENT (-2) #define E_POSTED (-3) #define E_CONNECTED (-4) #define E_BAD_STATE (-5) #define E_NO_ROOM (-6) #define E_NOT_POSTED (-7) #define E_UNKNOWN_COMMAND (-8) #define E_NO_MATCH (-9) #define E_NOT_SELECTABLE (-10) #define E_NOT_CONNECTED (-11) #define E_REQUEST_DENIED (-12) #define E_INVALID_FIELD (-13) #define E_CURRENT (-14) #endif ncurses-6.0-20160213/aclocal.m40000644000175100001440000070305012635357642014336 0ustar tomusersdnl*************************************************************************** dnl Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * dnl * dnl Permission is hereby granted, free of charge, to any person obtaining a * dnl copy of this software and associated documentation files (the * dnl "Software"), to deal in the Software without restriction, including * dnl without limitation the rights to use, copy, modify, merge, publish, * dnl distribute, distribute with modifications, sublicense, and/or sell * dnl copies of the Software, and to permit persons to whom the Software is * dnl furnished to do so, subject to the following conditions: * dnl * dnl The above copyright notice and this permission notice shall be included * dnl in all copies or substantial portions of the Software. * dnl * dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. * dnl * dnl Except as contained in this notice, the name(s) of the above copyright * dnl holders shall not be used in advertising or otherwise to promote the * dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl dnl Author: Thomas E. Dickey 1995-on dnl dnl $Id: aclocal.m4,v 1.786 2015/12/19 22:52:18 tom Exp $ dnl Macros used in NCURSES auto-configuration script. dnl dnl These macros are maintained separately from NCURSES. The copyright on dnl this file applies to the aggregation of macros and does not affect use of dnl these macros in other applications. dnl dnl See http://invisible-island.net/autoconf/ for additional information. dnl dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl AM_LANGINFO_CODESET version: 4 updated: 2015/04/18 08:56:57 dnl ------------------- dnl Inserted as requested by gettext 0.10.40 dnl File from /usr/share/aclocal dnl codeset.m4 dnl ==================== dnl serial AM1 dnl dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET);], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ABI_DEFAULTS version: 2 updated: 2015/06/06 13:49:58 dnl --------------- dnl Provide configure-script defaults for different ncurses ABIs. AC_DEFUN([CF_ABI_DEFAULTS],[ AC_REQUIRE([CF_NCURSES_WITH_ABI_VERSION]) case x$cf_cv_abi_version in (x[[6789]]) cf_dft_ext_colors=yes cf_dft_ext_const=yes cf_dft_ext_mouse=yes cf_dft_ext_putwin=yes cf_dft_ext_spfuncs=yes cf_dft_filter_syms=yes cf_dft_chtype=uint32_t cf_dft_mmask_t=uint32_t cf_dft_interop=yes cf_dft_tparm_arg=intptr_t cf_dft_with_lp64=yes ;; (*) cf_dft_ext_colors=no cf_dft_ext_const=no cf_dft_ext_mouse=no cf_dft_ext_putwin=no cf_dft_ext_spfuncs=no cf_dft_filter_syms=no cf_dft_chtype=auto cf_dft_mmask_t=auto cf_dft_interop=no cf_dft_tparm_arg=long cf_dft_with_lp64=no ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_ACVERSION_CHECK version: 5 updated: 2014/06/04 19:11:49 dnl ------------------ dnl Conditionally generate script according to whether we're using a given autoconf. dnl dnl $1 = version to compare against dnl $2 = code to use if AC_ACVERSION is at least as high as $1. dnl $3 = code to use if AC_ACVERSION is older than $1. define([CF_ACVERSION_CHECK], [ ifdef([AC_ACVERSION], ,[ifdef([AC_AUTOCONF_VERSION],[m4_copy([AC_AUTOCONF_VERSION],[AC_ACVERSION])],[m4_copy([m4_PACKAGE_VERSION],[AC_ACVERSION])])])dnl ifdef([m4_version_compare], [m4_if(m4_version_compare(m4_defn([AC_ACVERSION]), [$1]), -1, [$3], [$2])], [CF_ACVERSION_COMPARE( AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])), AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), AC_ACVERSION, [$2], [$3])])])dnl dnl --------------------------------------------------------------------------- dnl CF_ACVERSION_COMPARE version: 3 updated: 2012/10/03 18:39:53 dnl -------------------- dnl CF_ACVERSION_COMPARE(MAJOR1, MINOR1, TERNARY1, dnl MAJOR2, MINOR2, TERNARY2, dnl PRINTABLE2, not FOUND, FOUND) define([CF_ACVERSION_COMPARE], [ifelse(builtin([eval], [$2 < $5]), 1, [ifelse([$8], , ,[$8])], [ifelse([$9], , ,[$9])])])dnl dnl --------------------------------------------------------------------------- dnl CF_ADA_INCLUDE_DIRS version: 8 updated: 2013/10/14 04:24:07 dnl ------------------- dnl Construct the list of include-options for the C programs in the Ada95 dnl binding. AC_DEFUN([CF_ADA_INCLUDE_DIRS], [ ACPPFLAGS="-I. -I../include -I../../include $ACPPFLAGS" if test "$srcdir" != "."; then ACPPFLAGS="-I\${srcdir}/../../include $ACPPFLAGS" fi if test "$GCC" != yes; then ACPPFLAGS="$ACPPFLAGS -I\${includedir}" elif test "$includedir" != "/usr/include"; then if test "$includedir" = '${prefix}/include' ; then if test x$prefix != x/usr ; then ACPPFLAGS="$ACPPFLAGS -I\${includedir}" fi else ACPPFLAGS="$ACPPFLAGS -I\${includedir}" fi fi AC_SUBST(ACPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_ADAFLAGS version: 1 updated: 2010/06/19 15:22:18 dnl --------------- dnl Add to $ADAFLAGS, which is substituted into makefile and scripts. AC_DEFUN([CF_ADD_ADAFLAGS],[ ADAFLAGS="$ADAFLAGS $1" AC_SUBST(ADAFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_CFLAGS version: 12 updated: 2015/04/12 15:39:00 dnl ------------- dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS dnl The second parameter if given makes this macro verbose. dnl dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS, dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily dnl confused by the quotes (which require backslashes to keep them usable). AC_DEFUN([CF_ADD_CFLAGS], [ cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $1 do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,$cf_tst_cppflags) ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)]) CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)]) CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)]) EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi AC_SUBST(EXTRA_CPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_INCDIR version: 14 updated: 2015/05/25 20:53:04 dnl ------------- dnl Add an include-directory to $CPPFLAGS. Don't add /usr/include, since it's dnl redundant. We don't normally need to add -I/usr/local/include for gcc, dnl but old versions (and some misinstalled ones) need that. To make things dnl worse, gcc 3.x may give error messages if -I/usr/local/include is added to dnl the include-path). AC_DEFUN([CF_ADD_INCDIR], [ if test -n "$1" ; then for cf_add_incdir in $1 do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" AC_TRY_COMPILE([#include ], [printf("Hello")], [], [cf_have_incdir=yes]) CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then CF_VERBOSE(adding $cf_add_incdir to include-path) ifelse([$2],,CPPFLAGS,[$2])="$ifelse([$2],,CPPFLAGS,[$2]) -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIB version: 2 updated: 2010/06/02 05:03:05 dnl ---------- dnl Add a library, used to enforce consistency. dnl dnl $1 = library to add, without the "-l" dnl $2 = variable to update (default $LIBS) AC_DEFUN([CF_ADD_LIB],[CF_ADD_LIBS(-l$1,ifelse($2,,LIBS,[$2]))])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIBDIR version: 10 updated: 2015/04/18 08:56:57 dnl ------------- dnl Adds to the library-path dnl dnl Some machines have trouble with multiple -L options. dnl dnl $1 is the (list of) directory(s) to add dnl $2 is the optional name of the variable to update (default LDFLAGS) dnl AC_DEFUN([CF_ADD_LIBDIR], [ if test -n "$1" ; then for cf_add_libdir in $1 do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then CF_VERBOSE(adding $cf_add_libdir to library-path) ifelse([$2],,LDFLAGS,[$2])="-L$cf_add_libdir $ifelse([$2],,LDFLAGS,[$2])" fi fi done fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIBS version: 2 updated: 2014/07/13 14:33:27 dnl ----------- dnl Add one or more libraries, used to enforce consistency. Libraries are dnl prepended to an existing list, since their dependencies are assumed to dnl already exist in the list. dnl dnl $1 = libraries to add, with the "-l", etc. dnl $2 = variable to update (default $LIBS) AC_DEFUN([CF_ADD_LIBS],[ cf_add_libs="$1" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in [$]ifelse($2,,LIBS,[$2]) do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done ifelse($2,,LIBS,[$2])="$cf_add_libs" ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_SUBDIR_PATH version: 4 updated: 2013/10/08 17:47:05 dnl ------------------ dnl Append to a search-list for a nonstandard header/lib-file dnl $1 = the variable to return as result dnl $2 = the package name dnl $3 = the subdirectory, e.g., bin, include or lib dnl $4 = the directory under which we will test for subdirectories dnl $5 = a directory that we do not want $4 to match AC_DEFUN([CF_ADD_SUBDIR_PATH], [ test "x$4" != "x$5" && \ test -d "$4" && \ ifelse([$5],NONE,,[(test -z "$5" || test x$5 = xNONE || test "x$4" != "x$5") &&]) { test -n "$verbose" && echo " ... testing for $3-directories under $4" test -d $4/$3 && $1="[$]$1 $4/$3" test -d $4/$3/$2 && $1="[$]$1 $4/$3/$2" test -d $4/$3/$2/$3 && $1="[$]$1 $4/$3/$2/$3" test -d $4/$2/$3 && $1="[$]$1 $4/$2/$3" test -d $4/$2/$3/$2 && $1="[$]$1 $4/$2/$3/$2" } ])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31 dnl -------------- dnl Allow user to disable a normally-on option. AC_DEFUN([CF_ARG_DISABLE], [CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_OPTION version: 5 updated: 2015/05/10 19:52:14 dnl ------------- dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus dnl values. dnl dnl Parameters: dnl $1 = option name dnl $2 = help-string dnl $3 = action to perform if option is not default dnl $4 = action if perform if option is default dnl $5 = default option value (either 'yes' or 'no') AC_DEFUN([CF_ARG_OPTION], [AC_ARG_ENABLE([$1],[$2],[test "$enableval" != ifelse([$5],no,yes,no) && enableval=ifelse([$5],no,no,yes) if test "$enableval" != "$5" ; then ifelse([$3],,[ :]dnl ,[ $3]) ifelse([$4],,,[ else $4]) fi],[enableval=$5 ifelse([$4],,,[ $4 ])dnl ])])dnl dnl --------------------------------------------------------------------------- dnl CF_AR_FLAGS version: 6 updated: 2015/10/10 15:25:05 dnl ----------- dnl Check for suitable "ar" (archiver) options for updating an archive. dnl dnl In particular, handle some obsolete cases where the "-" might be omitted, dnl as well as a workaround for breakage of make's archive rules by the GNU dnl binutils "ar" program. AC_DEFUN([CF_AR_FLAGS],[ AC_REQUIRE([CF_PROG_AR]) AC_CACHE_CHECK(for options to update archives, cf_cv_ar_flags,[ cf_cv_ar_flags=unknown for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv do # check if $ARFLAGS already contains this choice if test "x$ARFLAGS" != "x" ; then cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"` if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then cf_cv_ar_flags= break fi fi rm -f conftest.$ac_cv_objext rm -f conftest.a cat >conftest.$ac_ext <&AC_FD_CC $AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext 2>&AC_FD_CC 1>/dev/null if test -f conftest.a ; then cf_cv_ar_flags=$cf_ar_flags break fi else CF_VERBOSE(cannot compile test-program) break fi done rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext ]) if test -n "$ARFLAGS" ; then if test -n "$cf_cv_ar_flags" ; then ARFLAGS="$ARFLAGS $cf_cv_ar_flags" fi else ARFLAGS=$cf_cv_ar_flags fi AC_SUBST(ARFLAGS) ]) dnl --------------------------------------------------------------------------- dnl CF_AWK_BIG_PRINTF version: 5 updated: 2015/04/17 21:13:04 dnl ----------------- dnl Check if awk can handle big strings using printf. Some older versions of dnl awk choke on large strings passed via "%s". dnl dnl $1 = desired string size dnl $2 = variable to set with result AC_DEFUN([CF_AWK_BIG_PRINTF], [ case x$AWK in (x) eval $2=no ;; (*) if ( ${AWK} 'BEGIN { xx = "x"; while (length(xx) < $1) { xx = xx "x"; }; printf("%s\n", xx); }' 2>/dev/null \ | $AWK '{ printf "%d\n", length([$]0); }' 2>/dev/null | $AWK 'BEGIN { eqls=0; recs=0; } { recs++; if ([$]0 == 12000) eqls++; } END { if (recs != 1 || eqls != 1) exit 1; }' 2>/dev/null >/dev/null ) ; then eval $2=yes else eval $2=no fi ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_BOOL_DECL version: 8 updated: 2004/01/30 15:51:18 dnl ------------ dnl Test if 'bool' is a builtin type in the configured C++ compiler. Some dnl older compilers (e.g., gcc 2.5.8) don't support 'bool' directly; gcc dnl 2.6.3 does, in anticipation of the ANSI C++ standard. dnl dnl Treat the configuration-variable specially here, since we're directly dnl substituting its value (i.e., 1/0). dnl dnl $1 is the shell variable to store the result in, if not $cv_cv_builtin_bool AC_DEFUN([CF_BOOL_DECL], [ AC_MSG_CHECKING(if we should include stdbool.h) AC_CACHE_VAL(cf_cv_header_stdbool_h,[ AC_TRY_COMPILE([],[bool foo = false], [cf_cv_header_stdbool_h=0], [AC_TRY_COMPILE([ #ifndef __BEOS__ #include #endif ],[bool foo = false], [cf_cv_header_stdbool_h=1], [cf_cv_header_stdbool_h=0])])]) if test "$cf_cv_header_stdbool_h" = 1 then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING([for builtin bool type]) AC_CACHE_VAL(ifelse($1,,cf_cv_builtin_bool,[$1]),[ AC_TRY_COMPILE([ #include #include ],[bool x = false], [ifelse($1,,cf_cv_builtin_bool,[$1])=1], [ifelse($1,,cf_cv_builtin_bool,[$1])=0]) ]) if test "$ifelse($1,,cf_cv_builtin_bool,[$1])" = 1 then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_BOOL_SIZE version: 14 updated: 2015/04/17 21:13:04 dnl ------------ dnl Test for the size of 'bool' in the configured C++ compiler (e.g., a type). dnl Don't bother looking for bool.h, since it's been deprecated. dnl dnl If the current compiler is C rather than C++, we get the bool definition dnl from . AC_DEFUN([CF_BOOL_SIZE], [ AC_MSG_CHECKING([for size of bool]) AC_CACHE_VAL(cf_cv_type_of_bool,[ rm -f cf_test.out AC_TRY_RUN([ #include #include #if defined(__cplusplus) #ifdef HAVE_GXX_BUILTIN_H #include #elif HAVE_GPP_BUILTIN_H #include #elif HAVE_BUILTIN_H #include #endif #else #if $cf_cv_header_stdbool_h #include #endif #endif int main() { FILE *fp = fopen("cf_test.out", "w"); if (fp != 0) { bool x = true; if ((bool)(-x) >= 0) fputs("unsigned ", fp); if (sizeof(x) == sizeof(int)) fputs("int", fp); else if (sizeof(x) == sizeof(char)) fputs("char", fp); else if (sizeof(x) == sizeof(short))fputs("short",fp); else if (sizeof(x) == sizeof(long)) fputs("long", fp); fclose(fp); } ${cf_cv_main_return:-return}(0); } ], [cf_cv_type_of_bool=`cat cf_test.out` if test -z "$cf_cv_type_of_bool"; then cf_cv_type_of_bool=unknown fi], [cf_cv_type_of_bool=unknown], [cf_cv_type_of_bool=unknown]) ]) rm -f cf_test.out AC_MSG_RESULT($cf_cv_type_of_bool) if test "$cf_cv_type_of_bool" = unknown ; then case .$NCURSES_BOOL in (.auto|.) NCURSES_BOOL=unsigned;; esac AC_MSG_WARN(Assuming $NCURSES_BOOL for type of bool) cf_cv_type_of_bool=$NCURSES_BOOL fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_BUILD_CC version: 7 updated: 2012/10/06 15:31:55 dnl ----------- dnl If we're cross-compiling, allow the user to override the tools and their dnl options. The configure script is oriented toward identifying the host dnl compiler, etc., but we need a build compiler to generate parts of the dnl source. dnl dnl $1 = default for $CPPFLAGS dnl $2 = default for $LIBS AC_DEFUN([CF_BUILD_CC],[ CF_ACVERSION_CHECK(2.52,, [AC_REQUIRE([CF_PROG_EXT])]) if test "$cross_compiling" = yes ; then # defaults that we might want to override : ${BUILD_CFLAGS:=''} : ${BUILD_CPPFLAGS:='ifelse([$1],,,[$1])'} : ${BUILD_LDFLAGS:=''} : ${BUILD_LIBS:='ifelse([$2],,,[$2])'} : ${BUILD_EXEEXT:='$x'} : ${BUILD_OBJEXT:='o'} AC_ARG_WITH(build-cc, [ --with-build-cc=XXX the build C compiler ($BUILD_CC)], [BUILD_CC="$withval"], [AC_CHECK_PROGS(BUILD_CC, gcc cc cl)]) AC_MSG_CHECKING(for native build C compiler) AC_MSG_RESULT($BUILD_CC) AC_MSG_CHECKING(for native build C preprocessor) AC_ARG_WITH(build-cpp, [ --with-build-cpp=XXX the build C preprocessor ($BUILD_CPP)], [BUILD_CPP="$withval"], [BUILD_CPP='${BUILD_CC} -E']) AC_MSG_RESULT($BUILD_CPP) AC_MSG_CHECKING(for native build C flags) AC_ARG_WITH(build-cflags, [ --with-build-cflags=XXX the build C compiler-flags ($BUILD_CFLAGS)], [BUILD_CFLAGS="$withval"]) AC_MSG_RESULT($BUILD_CFLAGS) AC_MSG_CHECKING(for native build C preprocessor-flags) AC_ARG_WITH(build-cppflags, [ --with-build-cppflags=XXX the build C preprocessor-flags ($BUILD_CPPFLAGS)], [BUILD_CPPFLAGS="$withval"]) AC_MSG_RESULT($BUILD_CPPFLAGS) AC_MSG_CHECKING(for native build linker-flags) AC_ARG_WITH(build-ldflags, [ --with-build-ldflags=XXX the build linker-flags ($BUILD_LDFLAGS)], [BUILD_LDFLAGS="$withval"]) AC_MSG_RESULT($BUILD_LDFLAGS) AC_MSG_CHECKING(for native build linker-libraries) AC_ARG_WITH(build-libs, [ --with-build-libs=XXX the build libraries (${BUILD_LIBS})], [BUILD_LIBS="$withval"]) AC_MSG_RESULT($BUILD_LIBS) # this assumes we're on Unix. BUILD_EXEEXT= BUILD_OBJEXT=o : ${BUILD_CC:='${CC}'} if ( test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '${CC}' ) ; then AC_MSG_ERROR([Cross-build requires two compilers. Use --with-build-cc to specify the native compiler.]) fi else : ${BUILD_CC:='${CC}'} : ${BUILD_CPP:='${CPP}'} : ${BUILD_CFLAGS:='${CFLAGS}'} : ${BUILD_CPPFLAGS:='${CPPFLAGS}'} : ${BUILD_LDFLAGS:='${LDFLAGS}'} : ${BUILD_LIBS:='${LIBS}'} : ${BUILD_EXEEXT:='$x'} : ${BUILD_OBJEXT:='o'} fi AC_SUBST(BUILD_CC) AC_SUBST(BUILD_CPP) AC_SUBST(BUILD_CFLAGS) AC_SUBST(BUILD_CPPFLAGS) AC_SUBST(BUILD_LDFLAGS) AC_SUBST(BUILD_LIBS) AC_SUBST(BUILD_EXEEXT) AC_SUBST(BUILD_OBJEXT) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CC_ENV_FLAGS version: 2 updated: 2015/04/12 15:39:00 dnl --------------- dnl Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content dnl into CC. This will not help with broken scripts that wrap the compiler with dnl options, but eliminates a more common category of user confusion. AC_DEFUN([CF_CC_ENV_FLAGS], [ # This should have been defined by AC_PROG_CC : ${CC:=cc} AC_MSG_CHECKING(\$CC variable) case "$CC" in (*[[\ \ ]]-[[IUD]]*) AC_MSG_RESULT(broken) AC_MSG_WARN(your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options) # humor him... cf_flags=`echo "$CC" | sed -e 's/^[[^ ]]*[[ ]]//'` CC=`echo "$CC" | sed -e 's/[[ ]].*//'` CF_ADD_CFLAGS($cf_flags) ;; (*) AC_MSG_RESULT(ok) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_CFG_DEFAULTS version: 11 updated: 2015/04/17 21:13:04 dnl --------------- dnl Determine the default configuration into which we'll install ncurses. This dnl can be overridden by the user's command-line options. There's two items to dnl look for: dnl 1. the prefix (e.g., /usr) dnl 2. the header files (e.g., /usr/include/ncurses) dnl We'll look for a previous installation of ncurses and use the same defaults. dnl dnl We don't use AC_PREFIX_DEFAULT, because it gets evaluated too soon, and dnl we don't use AC_PREFIX_PROGRAM, because we cannot distinguish ncurses's dnl programs from a vendor's. AC_DEFUN([CF_CFG_DEFAULTS], [ AC_MSG_CHECKING(for prefix) if test "x$prefix" = "xNONE" ; then case "$cf_cv_system_name" in # non-vendor systems don't have a conflict (openbsd*|freebsd*|mirbsd*|linux*|cygwin*|msys*|k*bsd*-gnu|mingw*) prefix=/usr ;; (*) prefix=$ac_default_prefix ;; esac fi AC_MSG_RESULT($prefix) if test "x$prefix" = "xNONE" ; then AC_MSG_CHECKING(for default include-directory) test -n "$verbose" && echo 1>&AC_FD_MSG for cf_symbol in \ $includedir \ $includedir/ncurses \ $prefix/include \ $prefix/include/ncurses \ /usr/local/include \ /usr/local/include/ncurses \ /usr/include \ /usr/include/ncurses do cf_dir=`eval echo $cf_symbol` if test -f $cf_dir/curses.h ; then if ( fgrep NCURSES_VERSION $cf_dir/curses.h 2>&1 >/dev/null ) ; then includedir="$cf_symbol" test -n "$verbose" && echo $ac_n " found " 1>&AC_FD_MSG break fi fi test -n "$verbose" && echo " tested $cf_dir" 1>&AC_FD_MSG done AC_MSG_RESULT($includedir) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CGETENT version: 5 updated: 2012/10/06 17:56:13 dnl ---------- dnl Check if the terminal-capability database functions are available. If not, dnl ncurses has a much-reduced version. AC_DEFUN([CF_CGETENT],[ AC_CACHE_CHECK(for terminal-capability database functions,cf_cv_cgetent,[ AC_TRY_LINK([ #include ],[ char temp[128]; char *buf = temp; char *db_array = temp; cgetent(&buf, &db_array, "vt100"); cgetcap(buf, "tc", '='); cgetmatch(buf, "tc"); ], [cf_cv_cgetent=yes], [cf_cv_cgetent=no]) ]) if test "$cf_cv_cgetent" = yes then AC_DEFINE(HAVE_BSD_CGETENT,1,[Define to 1 if we have BSD cgetent]) AC_CACHE_CHECK(if cgetent uses const parameter,cf_cv_cgetent_const,[ AC_TRY_LINK([ #include ],[ char temp[128]; char *buf = temp; #ifndef _NETBSD_SOURCE /* given, since April 2004 in stdlib.h */ const char *db_array = temp; cgetent(&buf, &db_array, "vt100"); #endif cgetcap(buf, "tc", '='); cgetmatch(buf, "tc"); ], [cf_cv_cgetent_const=yes], [cf_cv_cgetent_const=no]) ]) if test "$cf_cv_cgetent_const" = yes then AC_DEFINE_UNQUOTED(CGETENT_CONST,const,[Define to const if needed for some BSD cgetent variations]) fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_CACHE version: 12 updated: 2012/10/02 20:55:03 dnl -------------- dnl Check if we're accidentally using a cache from a different machine. dnl Derive the system name, as a check for reusing the autoconf cache. dnl dnl If we've packaged config.guess and config.sub, run that (since it does a dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM dnl which is useful in cross-compiles. dnl dnl Note: we would use $ac_config_sub, but that is one of the places where dnl autoconf 2.5x broke compatibility with autoconf 2.13 AC_DEFUN([CF_CHECK_CACHE], [ if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then ifelse([$1],,[AC_CANONICAL_HOST],[$1]) system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" if test -z "$system_name" ; then system_name="`(hostname) 2>/dev/null`" fi fi test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name",[Define to the system name.]) AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"]) test -z "$system_name" && system_name="$cf_cv_system_name" test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name) if test ".$system_name" != ".$cf_cv_system_name" ; then AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)) AC_MSG_ERROR("Please remove config.cache and try again.") fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_ERRNO version: 12 updated: 2015/04/18 08:56:57 dnl -------------- dnl Check for data that is usually declared in or , e.g., dnl the 'errno' variable. Define a DECL_xxx symbol if we must declare it dnl ourselves. dnl dnl $1 = the name to check dnl $2 = the assumed type AC_DEFUN([CF_CHECK_ERRNO], [ AC_CACHE_CHECK(if external $1 is declared, cf_cv_dcl_$1,[ AC_TRY_COMPILE([ #ifdef HAVE_STDLIB_H #include #endif #include #include #include ], ifelse([$2],,int,[$2]) x = (ifelse([$2],,int,[$2])) $1, [cf_cv_dcl_$1=yes], [cf_cv_dcl_$1=no]) ]) if test "$cf_cv_dcl_$1" = no ; then CF_UPPER(cf_result,decl_$1) AC_DEFINE_UNQUOTED($cf_result) fi # It's possible (for near-UNIX clones) that the data doesn't exist CF_CHECK_EXTERN_DATA($1,ifelse([$2],,int,[$2])) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_EXTERN_DATA version: 4 updated: 2015/04/18 08:56:57 dnl -------------------- dnl Check for existence of external data in the current set of libraries. If dnl we can modify it, it's real enough. dnl $1 = the name to check dnl $2 = its type AC_DEFUN([CF_CHECK_EXTERN_DATA], [ AC_CACHE_CHECK(if external $1 exists, cf_cv_have_$1,[ AC_TRY_LINK([ #undef $1 extern $2 $1; ], [$1 = 2], [cf_cv_have_$1=yes], [cf_cv_have_$1=no]) ]) if test "$cf_cv_have_$1" = yes ; then CF_UPPER(cf_result,have_$1) AC_DEFINE_UNQUOTED($cf_result) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_GPM_WGETCH version: 2 updated: 2010/08/14 18:25:37 dnl ------------------- dnl Check if GPM is already linked with curses. If so - and if the linkage dnl is not "weak" - warn about this because it can create problems linking dnl applications with ncurses. AC_DEFUN([CF_CHECK_GPM_WGETCH],[ AC_CHECK_LIB(gpm,Gpm_Wgetch,[ AC_CACHE_CHECK(if GPM is weakly bound to curses library, cf_cv_check_gpm_wgetch,[ cf_cv_check_gpm_wgetch=unknown if test "$cross_compiling" != yes ; then cat >conftest.$ac_ext < int main() { Gpm_Wgetch(); ${cf_cv_main_return:-return}(0); } CF_EOF cf_save_LIBS="$LIBS" # This only works if we can look at the symbol table. If a shared # library is stripped for install, we cannot use that. So we're forced # to rely on the static library, noting that some packagers may not # include it. LIBS="-static -lgpm -dynamic $LIBS" if AC_TRY_EVAL(ac_compile) ; then if AC_TRY_EVAL(ac_link) ; then cf_cv_check_gpm_wgetch=`nm conftest$ac_exeext | egrep '\' | egrep '\<[[vVwW]]\>'` test -n "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=yes test -z "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=no fi fi rm -rf conftest* LIBS="$cf_save_LIBS" fi ]) if test "$cf_cv_check_gpm_wgetch" != yes ; then AC_MSG_WARN(GPM library is already linked with curses - read the FAQ) fi ])])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_LIBTOOL_VERSION version: 1 updated: 2013/04/06 18:03:09 dnl ------------------------ dnl Show the version of libtool dnl dnl Save the version in a cache variable - this is not entirely a good thing, dnl but the version string from libtool is very ugly, and for bug reports it dnl might be useful to have the original string. AC_DEFUN([CF_CHECK_LIBTOOL_VERSION],[ if test -n "$LIBTOOL" && test "$LIBTOOL" != none then AC_MSG_CHECKING(version of $LIBTOOL) CF_LIBTOOL_VERSION AC_MSG_RESULT($cf_cv_libtool_version) if test -z "$cf_cv_libtool_version" ; then AC_MSG_ERROR(This is not GNU libtool) fi else AC_MSG_ERROR(GNU libtool has not been found) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_WCHAR_H version: 1 updated: 2011/10/29 15:01:05 dnl ---------------- dnl Check if wchar.h can be used, i.e., without defining _XOPEN_SOURCE_EXTENDED AC_DEFUN([CF_CHECK_WCHAR_H],[ AC_CACHE_CHECK(if wchar.h can be used as is,cf_cv_wchar_h_okay,[ AC_TRY_COMPILE( [ #include #include ],[ wint_t foo = 0; int bar = iswpunct(foo)], [cf_cv_wchar_h_okay=yes], [cf_cv_wchar_h_okay=no])]) if test $cf_cv_wchar_h_okay = no then CF_PREDEFINE(_XOPEN_SOURCE_EXTENDED) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_WCWIDTH_GRAPHICS version: 1 updated: 2015/12/19 17:47:56 dnl ------------------------- dnl Most "modern" terminal emulators are based to some degree on VT100, and dnl should support line-drawing. Even with Unicode. There is a problem. dnl dnl While most of the VT100 graphics characters were incorporated into Unicode, dnl all of those were combined into a page of useful graphics characters. dnl dnl So far, so good. dnl dnl However, while they are useful, there are other considerations. CJK dnl is (because of poor device resolution) often rendered as double-width dnl characters. So... for these generally-useful characters, what should dnl be the width (to make them consistent with adjacent characters)? dnl dnl The obvious choice would have been to make this locale-dependent, and use dnl wcwidth() to tell applications what the actual width is. That was too dnl obvious. Instead, we have a slew of "ambiguous-width" characters. dnl See for example dnl http://www.unicode.org/reports/tr11/tr11-29.html dnl http://www.cl.cam.ac.uk/~mgk25/ucs/scw-proposal.html dnl dnl The EastAsianWidth-6.2.0.txt file from the Unicode organization lists dnl more than 22,000 characters, with 1281 of those as ambiguous-width. For dnl instance, it lists half (44/96) of the Latin-1 characters as dnl ambiguous-width. Also, all of the box-characters at 0x2500 are ambiguous. dnl dnl What this means for the implementor is that on some systems wcwidth() can dnl give bad advice. On Solaris, some of the ambiguous widths are returned as dnl 1 (the Latin-1 characters), while others are returned as 2 (line-drawing dnl characters). These do not necessarily match the behavior of the terminal dnl emulator. xterm, for instance, does an optional startup check to find if dnl this problem (or similar) exists with the system's locale tables, rejecting dnl them if they are too unreliable. AC_DEFUN([CF_CHECK_WCWIDTH_GRAPHICS],[ AC_CACHE_CHECK(if wcwidth agrees graphics are single-width, cf_cv_wcwidth_graphics,[ cat >conftest.in < #include #include #define MY_LEN 80 int main(void) { FILE *fp; int value; char buffer[MY_LEN + 1]; char notes[MY_LEN + 1]; int totals = 0; int passed = 0; if (setlocale(LC_ALL, "en_US.UTF8") || setlocale(LC_ALL, "en_US.UTF-8") || setlocale(LC_ALL, "en_US.utf8") || setlocale(LC_ALL, "en_US.utf-8")) { if ((fp = fopen("conftest.in", "r")) != 0) { while (fgets(buffer, MY_LEN, fp) != 0) { if (*buffer == '-') { fprintf(stderr, "\t%s", buffer); } else if (sscanf(buffer, "%x %s", &value, notes) == 2) { ++totals; if (wcwidth(value) == 1) ++passed; fprintf(stderr, "%d\t%s", wcwidth(value), buffer); } else { fprintf(stderr, "?\t%s", buffer); } } } } fprintf(stderr, "%d/%d passed wcwidth/graphics check\n", passed, totals); return (totals == passed) ? 0 : 1; } ], [cf_cv_wcwidth_graphics=yes], [cf_cv_wcwidth_graphics=no], [cf_cv_wcwidth_graphics=unknown]) ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CLANG_COMPILER version: 2 updated: 2013/11/19 19:23:35 dnl ----------------- dnl Check if the given compiler is really clang. clang's C driver defines dnl __GNUC__ (fooling the configure script into setting $GCC to yes) but does dnl not ignore some gcc options. dnl dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from dnl the wrappers for gcc and g++ warnings. dnl dnl $1 = GCC (default) or GXX dnl $2 = CLANG_COMPILER (default) dnl $3 = CFLAGS (default) or CXXFLAGS AC_DEFUN([CF_CLANG_COMPILER],[ ifelse([$2],,CLANG_COMPILER,[$2])=no if test "$ifelse([$1],,[$1],GCC)" = yes ; then AC_MSG_CHECKING(if this is really Clang ifelse([$1],GXX,C++,C) compiler) cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])" ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -Qunused-arguments" AC_TRY_COMPILE([],[ #ifdef __clang__ #else make an error #endif ],[ifelse([$2],,CLANG_COMPILER,[$2])=yes cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" ],[]) ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS" AC_MSG_RESULT($ifelse([$2],,CLANG_COMPILER,[$2])) fi ]) dnl --------------------------------------------------------------------------- dnl CF_CPP_PARAM_INIT version: 6 updated: 2012/10/06 17:56:13 dnl ----------------- dnl Check if the C++ compiler accepts duplicate parameter initialization. This dnl is a late feature for the standard and is not in some recent compilers dnl (1999/9/11). AC_DEFUN([CF_CPP_PARAM_INIT], [ if test -n "$CXX"; then AC_CACHE_CHECK(if $CXX accepts parameter initialization,cf_cv_cpp_param_init,[ AC_LANG_SAVE AC_LANG_CPLUSPLUS AC_TRY_RUN([ class TEST { private: int value; public: TEST(int x = 1); ~TEST(); }; TEST::TEST(int x = 1) // some compilers do not like second initializer { value = x; } int main() { } ], [cf_cv_cpp_param_init=yes], [cf_cv_cpp_param_init=no], [cf_cv_cpp_param_init=unknown]) AC_LANG_RESTORE ]) fi test "$cf_cv_cpp_param_init" = yes && AC_DEFINE(CPP_HAS_PARAM_INIT,1,[Define to 1 if C++ has parameter initialization]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CPP_STATIC_CAST version: 3 updated: 2013/04/13 18:03:21 dnl ------------------ dnl Check if the C++ compiler accepts static_cast in generics. This appears to dnl not be supported in g++ before 3.0 AC_DEFUN([CF_CPP_STATIC_CAST], [ if test -n "$CXX"; then AC_CACHE_CHECK(if $CXX accepts static_cast,cf_cv_cpp_static_cast,[ AC_LANG_SAVE AC_LANG_CPLUSPLUS AC_TRY_COMPILE([ class NCursesPanel { public: NCursesPanel(int nlines, int ncols, int begin_y = 0, int begin_x = 0) { } NCursesPanel(); ~NCursesPanel(); }; template class NCursesUserPanel : public NCursesPanel { public: NCursesUserPanel (int nlines, int ncols, int begin_y = 0, int begin_x = 0, const T* p_UserData = static_cast(0)) : NCursesPanel (nlines, ncols, begin_y, begin_x) { }; NCursesUserPanel(const T* p_UserData = static_cast(0)) : NCursesPanel() { }; virtual ~NCursesUserPanel() {}; }; ],[ const char* p_UserData = static_cast(0)], [cf_cv_cpp_static_cast=yes], [cf_cv_cpp_static_cast=no]) AC_LANG_RESTORE ]) fi test "$cf_cv_cpp_static_cast" = yes && AC_DEFINE(CPP_HAS_STATIC_CAST,1,[Define to 1 if C++ has static_cast]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CXX_AR_FLAGS version: 2 updated: 2015/04/17 21:13:04 dnl --------------- dnl Setup special archiver flags for given compilers. AC_DEFUN([CF_CXX_AR_FLAGS],[ CXX_AR='$(AR)' CXX_ARFLAGS='$(ARFLAGS)' case $cf_cv_system_name in (irix*) if test "$GXX" != yes ; then CXX_AR='$(CXX)' CXX_ARFLAGS='-ar -o' fi ;; (sco3.2v5*) CXXLDFLAGS="-u main" ;; (solaris2*) if test "$GXX" != yes ; then CXX_AR='$(CXX)' CXX_ARFLAGS='-xar -o' fi ;; esac AC_SUBST(CXXLDFLAGS) AC_SUBST(CXX_AR) AC_SUBST(CXX_ARFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CXX_IOSTREAM_NAMESPACE version: 2 updated: 2012/10/06 17:56:13 dnl ------------------------- dnl For c++, check if iostream uses "std::" namespace. AC_DEFUN([CF_CXX_IOSTREAM_NAMESPACE],[ AC_CHECK_HEADERS(iostream) if test x"$ac_cv_header_iostream" = xyes ; then AC_MSG_CHECKING(if iostream uses std-namespace) AC_TRY_COMPILE([ #include using std::endl; using std::cerr;],[ cerr << "testing" << endl; ],[cf_iostream_namespace=yes],[cf_iostream_namespace=no]) AC_MSG_RESULT($cf_iostream_namespace) if test "$cf_iostream_namespace" = yes ; then AC_DEFINE(IOSTREAM_NAMESPACE,1,[Define to 1 if C++ has namespace iostream]) fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_C_INLINE version: 5 updated: 2015/04/18 08:56:57 dnl ----------- dnl Check if the C compiler supports "inline". dnl $1 is the name of a shell variable to set if inline is supported dnl $2 is the threshold for gcc 4.x's option controlling maximum inline size AC_DEFUN([CF_C_INLINE],[ AC_C_INLINE $1= if test "$ac_cv_c_inline" != no ; then $1=inline if test "$INTEL_COMPILER" = yes then : elif test "$CLANG_COMPILER" = yes then : elif test "$GCC" = yes then AC_CACHE_CHECK(if $CC supports options to tune inlining,cf_cv_gcc_inline,[ cf_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS --param max-inline-insns-single=$2" AC_TRY_COMPILE([inline int foo(void) { return 1; }], [${cf_cv_main_return:-return} foo()], [cf_cv_gcc_inline=yes], [cf_cv_gcc_inline=no]) CFLAGS=$cf_save_CFLAGS ]) if test "$cf_cv_gcc_inline" = yes ; then CF_ADD_CFLAGS([--param max-inline-insns-single=$2]) fi fi fi AC_SUBST($1) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DIRNAME version: 4 updated: 2002/12/21 19:25:52 dnl ---------- dnl "dirname" is not portable, so we fake it with a shell script. AC_DEFUN([CF_DIRNAME],[$1=`echo $2 | sed -e 's%/[[^/]]*$%%'`])dnl dnl --------------------------------------------------------------------------- dnl CF_DIRS_TO_MAKE version: 3 updated: 2002/02/23 20:38:31 dnl --------------- AC_DEFUN([CF_DIRS_TO_MAKE], [ DIRS_TO_MAKE="lib" for cf_item in $cf_list_models do CF_OBJ_SUBDIR($cf_item,cf_subdir) for cf_item2 in $DIRS_TO_MAKE do test $cf_item2 = $cf_subdir && break done test ".$cf_item2" != ".$cf_subdir" && DIRS_TO_MAKE="$DIRS_TO_MAKE $cf_subdir" done for cf_dir in $DIRS_TO_MAKE do test ! -d $cf_dir && mkdir $cf_dir done AC_SUBST(DIRS_TO_MAKE) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_ECHO version: 13 updated: 2015/04/18 08:56:57 dnl --------------- dnl You can always use "make -n" to see the actual options, but it's hard to dnl pick out/analyze warning messages when the compile-line is long. dnl dnl Sets: dnl ECHO_LT - symbol to control if libtool is verbose dnl ECHO_LD - symbol to prefix "cc -o" lines dnl RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o) dnl SHOW_CC - symbol to put before explicit "cc -c" lines dnl ECHO_CC - symbol to put before any "cc" line dnl AC_DEFUN([CF_DISABLE_ECHO],[ AC_MSG_CHECKING(if you want to see long compiling messages) CF_ARG_DISABLE(echo, [ --disable-echo do not display "compiling" commands], [ ECHO_LT='--silent' ECHO_LD='@echo linking [$]@;' RULE_CC='@echo compiling [$]<' SHOW_CC='@echo compiling [$]@' ECHO_CC='@' ],[ ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' ]) AC_MSG_RESULT($enableval) AC_SUBST(ECHO_LT) AC_SUBST(ECHO_LD) AC_SUBST(RULE_CC) AC_SUBST(SHOW_CC) AC_SUBST(ECHO_CC) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_GNAT_PROJECTS version: 1 updated: 2014/06/01 11:34:00 dnl ------------------------ AC_DEFUN([CF_DISABLE_GNAT_PROJECTS],[ AC_MSG_CHECKING(if we want to use GNAT projects) CF_ARG_DISABLE(gnat-projects, [ --disable-gnat-projects test: disable GNAT projects even if usable], [enable_gnat_projects=no], [enable_gnat_projects=yes]) AC_MSG_RESULT($enable_gnat_projects) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_LEAKS version: 7 updated: 2012/10/02 20:55:03 dnl ---------------- dnl Combine no-leak checks with the libraries or tools that are used for the dnl checks. AC_DEFUN([CF_DISABLE_LEAKS],[ AC_REQUIRE([CF_WITH_DMALLOC]) AC_REQUIRE([CF_WITH_DBMALLOC]) AC_REQUIRE([CF_WITH_VALGRIND]) AC_MSG_CHECKING(if you want to perform memory-leak testing) AC_ARG_ENABLE(leaks, [ --disable-leaks test: free permanent memory, analyze leaks], [if test "x$enableval" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi], : ${with_no_leaks:=no}) AC_MSG_RESULT($with_no_leaks) if test "$with_no_leaks" = yes ; then AC_DEFINE(NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.]) AC_DEFINE(YY_NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_LIBTOOL_VERSION version: 3 updated: 2015/04/17 21:13:04 dnl -------------------------- dnl Check if we should use the libtool 1.5 feature "-version-number" instead of dnl the older "-version-info" feature. The newer feature allows us to use dnl version numbering on shared libraries which make them compatible with dnl various systems. AC_DEFUN([CF_DISABLE_LIBTOOL_VERSION], [ AC_MSG_CHECKING(if libtool -version-number should be used) CF_ARG_DISABLE(libtool-version, [ --disable-libtool-version enable to use libtool's incompatible naming scheme], [cf_libtool_version=no], [cf_libtool_version=yes]) AC_MSG_RESULT($cf_libtool_version) if test "$cf_libtool_version" = yes ; then LIBTOOL_VERSION="-version-number" else LIBTOOL_VERSION="-version-info" case "x$VERSION" in (x) AC_MSG_WARN(VERSION was not set) ;; (x*.*.*) ABI_VERSION="$VERSION" CF_VERBOSE(ABI_VERSION: $ABI_VERSION) ;; (x*:*:*) ABI_VERSION=`echo "$VERSION" | sed -e 's/:/./g'` CF_VERBOSE(ABI_VERSION: $ABI_VERSION) ;; (*) AC_MSG_WARN(unexpected VERSION value: $VERSION) ;; esac fi AC_SUBST(ABI_VERSION) AC_SUBST(LIBTOOL_VERSION) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_RPATH_HACK version: 2 updated: 2011/02/13 13:31:33 dnl --------------------- dnl The rpath-hack makes it simpler to build programs, particularly with the dnl *BSD ports which may have essential libraries in unusual places. But it dnl can interfere with building an executable for the base system. Use this dnl option in that case. AC_DEFUN([CF_DISABLE_RPATH_HACK], [ AC_MSG_CHECKING(if rpath-hack should be disabled) CF_ARG_DISABLE(rpath-hack, [ --disable-rpath-hack don't add rpath options for additional libraries], [cf_disable_rpath_hack=yes], [cf_disable_rpath_hack=no]) AC_MSG_RESULT($cf_disable_rpath_hack) if test "$cf_disable_rpath_hack" = no ; then CF_RPATH_HACK fi ]) dnl --------------------------------------------------------------------------- dnl CF_ENABLE_PC_FILES version: 13 updated: 2015/11/01 05:27:39 dnl ------------------ dnl This is the "--enable-pc-files" option, which is available if there is a dnl pkg-config configuration on the local machine. AC_DEFUN([CF_ENABLE_PC_FILES],[ AC_REQUIRE([CF_PKG_CONFIG]) AC_REQUIRE([CF_WITH_PKG_CONFIG_LIBDIR]) if test "x$PKG_CONFIG" != xnone then AC_MSG_CHECKING(if we should install .pc files for $PKG_CONFIG) else AC_MSG_CHECKING(if we should install .pc files) fi AC_ARG_ENABLE(pc-files, [ --enable-pc-files generate and install .pc files for pkg-config], [enable_pc_files=$enableval], [enable_pc_files=no]) AC_MSG_RESULT($enable_pc_files) if test "x$enable_pc_files" != xno then MAKE_PC_FILES= case "x$PKG_CONFIG_LIBDIR" in (xno|xyes) AC_MSG_WARN(no PKG_CONFIG_LIBDIR was found) ;; (*) CF_PATH_SYNTAX(PKG_CONFIG_LIBDIR) ;; esac else MAKE_PC_FILES="#" fi AC_SUBST(MAKE_PC_FILES) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ENABLE_RPATH version: 2 updated: 2010/03/27 18:39:42 dnl --------------- dnl Check if the rpath option should be used, setting cache variable dnl cf_cv_enable_rpath if so. AC_DEFUN([CF_ENABLE_RPATH], [ AC_MSG_CHECKING(if rpath option should be used) AC_ARG_ENABLE(rpath, [ --enable-rpath use rpath option when generating shared libraries], [cf_cv_enable_rpath=$enableval], [cf_cv_enable_rpath=no]) AC_MSG_RESULT($cf_cv_enable_rpath) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ENABLE_STRING_HACKS version: 3 updated: 2013/01/26 16:26:12 dnl ---------------------- dnl On a few platforms, the compiler and/or loader nags with untruthful dnl comments stating that "most" uses of strcat/strcpy/sprintf are incorrect, dnl and implying that most uses of the recommended alternatives are correct. dnl dnl Factually speaking, no one has actually counted the number of uses of these dnl functions versus the total of incorrect uses. Samples of a few thousand dnl instances are meaningless compared to the hundreds of millions of lines of dnl existing C code. dnl dnl strlcat/strlcpy are (as of 2012) non-standard, and are available on some dnl platforms, in implementations of varying quality. Likewise, snprintf is dnl standard - but evolved through phases, and older implementations are likely dnl to yield surprising results, as documented in manpages on various systems. AC_DEFUN([CF_ENABLE_STRING_HACKS], [ AC_MSG_CHECKING(if you want to work around bogus compiler/loader warnings) AC_ARG_ENABLE(string-hacks, [ --enable-string-hacks work around bogus compiler/loader warnings], [with_string_hacks=$enableval], [with_string_hacks=no]) AC_MSG_RESULT($with_string_hacks) if test "x$with_string_hacks" = "xyes"; then AC_DEFINE(USE_STRING_HACKS,1,[Define to 1 to work around bogus compiler/loader warnings]) AC_MSG_WARN(enabling string-hacks to work around bogus compiler/loader warnings) AC_CHECK_FUNCS( strlcat strlcpy snprintf ) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ERRNO version: 5 updated: 1997/11/30 12:44:39 dnl -------- dnl Check if 'errno' is declared in AC_DEFUN([CF_ERRNO], [ CF_CHECK_ERRNO(errno) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ETIP_DEFINES version: 5 updated: 2012/02/18 17:51:07 dnl --------------- dnl Test for conflicting definitions of exception in gcc 2.8.0, etc., between dnl math.h and builtin.h, only for ncurses AC_DEFUN([CF_ETIP_DEFINES], [ AC_MSG_CHECKING(for special defines needed for etip.h) cf_save_CXXFLAGS="$CXXFLAGS" cf_result="none" # etip.h includes ncurses.h which includes ncurses_dll.h # But ncurses_dll.h is generated - fix here. test -d include || mkdir include test -f include/ncurses_dll.h || sed -e 's/@NCURSES_WRAP_PREFIX@/'$NCURSES_WRAP_PREFIX'/g' ${srcdir}/include/ncurses_dll.h.in >include/ncurses_dll.h for cf_math in "" MATH_H do for cf_excp in "" MATH_EXCEPTION do CXXFLAGS="$cf_save_CXXFLAGS -I${srcdir}/c++ -I${srcdir}/menu -Iinclude -I${srcdir}/include" test -n "$cf_math" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_math}" test -n "$cf_excp" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_excp}" AC_TRY_COMPILE([ #include ],[],[ test -n "$cf_math" && AC_DEFINE_UNQUOTED(ETIP_NEEDS_${cf_math}) test -n "$cf_excp" && AC_DEFINE_UNQUOTED(ETIP_NEEDS_${cf_excp}) cf_result="$cf_math $cf_excp" break 2 ],[]) done done AC_MSG_RESULT($cf_result) CXXFLAGS="$cf_save_CXXFLAGS" ]) dnl --------------------------------------------------------------------------- dnl CF_FIND_LINKAGE version: 20 updated: 2015/04/18 08:56:57 dnl --------------- dnl Find a library (specifically the linkage used in the code fragment), dnl searching for it if it is not already in the library path. dnl See also CF_ADD_SEARCHPATH. dnl dnl Parameters (4-on are optional): dnl $1 = headers for library entrypoint dnl $2 = code fragment for library entrypoint dnl $3 = the library name without the "-l" option or ".so" suffix. dnl $4 = action to perform if successful (default: update CPPFLAGS, etc) dnl $5 = action to perform if not successful dnl $6 = module name, if not the same as the library name dnl $7 = extra libraries dnl dnl Sets these variables: dnl $cf_cv_find_linkage_$3 - yes/no according to whether linkage is found dnl $cf_cv_header_path_$3 - include-directory if needed dnl $cf_cv_library_path_$3 - library-directory if needed dnl $cf_cv_library_file_$3 - library-file if needed, e.g., -l$3 AC_DEFUN([CF_FIND_LINKAGE],[ # If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these # will be set on completion of the AC_TRY_LINK below. cf_cv_header_path_$3= cf_cv_library_path_$3= CF_MSG_LOG([Starting [FIND_LINKAGE]($3,$6)]) cf_save_LIBS="$LIBS" AC_TRY_LINK([$1],[$2],[ cf_cv_find_linkage_$3=yes cf_cv_header_path_$3=/usr/include cf_cv_library_path_$3=/usr/lib ],[ LIBS="-l$3 $7 $cf_save_LIBS" AC_TRY_LINK([$1],[$2],[ cf_cv_find_linkage_$3=yes cf_cv_header_path_$3=/usr/include cf_cv_library_path_$3=/usr/lib cf_cv_library_file_$3="-l$3" ],[ cf_cv_find_linkage_$3=no LIBS="$cf_save_LIBS" CF_VERBOSE(find linkage for $3 library) CF_MSG_LOG([Searching for headers in [FIND_LINKAGE]($3,$6)]) cf_save_CPPFLAGS="$CPPFLAGS" cf_test_CPPFLAGS="$CPPFLAGS" CF_HEADER_PATH(cf_search,ifelse([$6],,[$3],[$6])) for cf_cv_header_path_$3 in $cf_search do if test -d $cf_cv_header_path_$3 ; then CF_VERBOSE(... testing $cf_cv_header_path_$3) CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_$3" AC_TRY_COMPILE([$1],[$2],[ CF_VERBOSE(... found $3 headers in $cf_cv_header_path_$3) cf_cv_find_linkage_$3=maybe cf_test_CPPFLAGS="$CPPFLAGS" break],[ CPPFLAGS="$cf_save_CPPFLAGS" ]) fi done if test "$cf_cv_find_linkage_$3" = maybe ; then CF_MSG_LOG([Searching for $3 library in [FIND_LINKAGE]($3,$6)]) cf_save_LIBS="$LIBS" cf_save_LDFLAGS="$LDFLAGS" ifelse([$6],,,[ CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-l$3 $7 $cf_save_LIBS" AC_TRY_LINK([$1],[$2],[ CF_VERBOSE(... found $3 library in system) cf_cv_find_linkage_$3=yes]) CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" ]) if test "$cf_cv_find_linkage_$3" != yes ; then CF_LIBRARY_PATH(cf_search,$3) for cf_cv_library_path_$3 in $cf_search do if test -d $cf_cv_library_path_$3 ; then CF_VERBOSE(... testing $cf_cv_library_path_$3) CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-l$3 $7 $cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_$3" AC_TRY_LINK([$1],[$2],[ CF_VERBOSE(... found $3 library in $cf_cv_library_path_$3) cf_cv_find_linkage_$3=yes cf_cv_library_file_$3="-l$3" break],[ CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS" ]) fi done CPPFLAGS="$cf_save_CPPFLAGS" LDFLAGS="$cf_save_LDFLAGS" fi else cf_cv_find_linkage_$3=no fi ],$7) ]) LIBS="$cf_save_LIBS" if test "$cf_cv_find_linkage_$3" = yes ; then ifelse([$4],,[ CF_ADD_INCDIR($cf_cv_header_path_$3) CF_ADD_LIBDIR($cf_cv_library_path_$3) CF_ADD_LIB($3) ],[$4]) else ifelse([$5],,AC_MSG_WARN(Cannot find $3 library),[$5]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_FIND_SUB_INCDIR version: 2 updated: 2015/04/17 21:13:04 dnl ------------------ dnl Find an include-directory with the given leaf-name. This is useful for dnl example with FreeBSD ports, which use this convention to distinguish dnl different versions of the same port. AC_DEFUN([CF_FIND_SUB_INCDIR],[ CF_SUBDIR_PATH(cf_search,$1,include) for cf_item in $cf_search do case $cf_item in (*/$1) CF_ADD_INCDIR($cf_item) ;; esac done ])dnl dnl --------------------------------------------------------------------------- dnl CF_FIND_SUB_LIBDIR version: 2 updated: 2015/04/17 21:13:04 dnl ------------------ dnl Find a library-directory with the given leaf-name. This is useful for dnl example with FreeBSD ports, which use this convention to distinguish dnl different versions of the same port. AC_DEFUN([CF_FIND_SUB_LIBDIR],[ CF_SUBDIR_PATH(cf_search,$1,lib) for cf_item in $cf_search do case $cf_item in (*/$1) CF_ADD_LIBDIR($cf_item) ;; esac done ])dnl dnl --------------------------------------------------------------------------- dnl CF_FIXUP_ADAFLAGS version: 2 updated: 2015/04/17 21:13:04 dnl ----------------- dnl make ADAFLAGS consistent with CFLAGS AC_DEFUN([CF_FIXUP_ADAFLAGS],[ AC_MSG_CHECKING(optimization options for ADAFLAGS) case "$CFLAGS" in (*-g*) CF_ADD_ADAFLAGS(-g) ;; esac case "$CFLAGS" in (*-O*) cf_O_flag=`echo "$CFLAGS" |sed -e 's/^.*-O/-O/' -e 's/[[ ]].*//'` CF_ADD_ADAFLAGS($cf_O_flag) ;; esac AC_MSG_RESULT($ADAFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_FORGET_TOOL version: 1 updated: 2013/04/06 18:03:09 dnl -------------- dnl Forget that we saw the given tool. AC_DEFUN([CF_FORGET_TOOL],[ unset ac_cv_prog_ac_ct_$1 unset ac_ct_$1 unset $1 ])dnl dnl --------------------------------------------------------------------------- dnl CF_FUNC_DLSYM version: 4 updated: 2015/09/12 14:46:44 dnl ------------- dnl Test for dlsym() and related functions, as well as libdl. dnl dnl Sets dnl $cf_have_dlsym dnl $cf_have_libdl AC_DEFUN([CF_FUNC_DLSYM],[ cf_have_dlsym=no AC_CHECK_FUNC(dlsym,cf_have_dlsym=yes,[ cf_have_libdl=no AC_CHECK_LIB(dl,dlsym,[ cf_have_dlsym=yes cf_have_libdl=yes])]) if test "$cf_have_dlsym" = yes ; then test "$cf_have_libdl" = yes && { CF_ADD_LIB(dl) } AC_MSG_CHECKING(whether able to link to dl*() functions) AC_TRY_LINK([#include ],[ void *obj; if ((obj = dlopen("filename", 0)) != 0) { if (dlsym(obj, "symbolname") == 0) { dlclose(obj); } }],[ AC_DEFINE(HAVE_LIBDL,1,[Define to 1 if we have dl library])],[ AC_MSG_ERROR(Cannot link test program for libdl)]) AC_MSG_RESULT(ok) else AC_MSG_ERROR(Cannot find dlsym function) fi ]) dnl --------------------------------------------------------------------------- dnl CF_FUNC_MEMMOVE version: 8 updated: 2012/10/04 20:12:20 dnl --------------- dnl Check for memmove, or a bcopy that can handle overlapping copy. If neither dnl is found, add our own version of memmove to the list of objects. AC_DEFUN([CF_FUNC_MEMMOVE], [ AC_CHECK_FUNC(memmove,,[ AC_CHECK_FUNC(bcopy,[ AC_CACHE_CHECK(if bcopy does overlapping moves,cf_cv_good_bcopy,[ AC_TRY_RUN([ int main() { static char data[] = "abcdefghijklmnopqrstuwwxyz"; char temp[40]; bcopy(data, temp, sizeof(data)); bcopy(temp+10, temp, 15); bcopy(temp+5, temp+15, 10); ${cf_cv_main_return:-return} (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz")); } ], [cf_cv_good_bcopy=yes], [cf_cv_good_bcopy=no], [cf_cv_good_bcopy=unknown]) ]) ],[cf_cv_good_bcopy=no]) if test "$cf_cv_good_bcopy" = yes ; then AC_DEFINE(USE_OK_BCOPY,1,[Define to 1 to use bcopy when memmove is unavailable]) else AC_DEFINE(USE_MY_MEMMOVE,1,[Define to 1 to use replacement function when memmove is unavailable]) fi ])])dnl dnl --------------------------------------------------------------------------- dnl CF_FUNC_NANOSLEEP version: 4 updated: 2012/10/06 17:56:13 dnl ----------------- dnl Check for existence of workable nanosleep() function. Some systems, e.g., dnl AIX 4.x, provide a non-working version. AC_DEFUN([CF_FUNC_NANOSLEEP],[ AC_CACHE_CHECK(if nanosleep really works,cf_cv_func_nanosleep,[ AC_TRY_RUN([ #include #include #include #ifdef HAVE_SYS_TIME_H #include #endif int main() { struct timespec ts1, ts2; int code; ts1.tv_sec = 0; ts1.tv_nsec = 750000000; ts2.tv_sec = 0; ts2.tv_nsec = 0; errno = 0; code = nanosleep(&ts1, &ts2); /* on failure errno is ENOSYS. */ ${cf_cv_main_return:-return}(code != 0); } ], [cf_cv_func_nanosleep=yes], [cf_cv_func_nanosleep=no], [cf_cv_func_nanosleep=unknown])]) test "$cf_cv_func_nanosleep" = "yes" && AC_DEFINE(HAVE_NANOSLEEP,1,[Define to 1 if we have nanosleep()]) ]) dnl --------------------------------------------------------------------------- dnl CF_FUNC_OPENPTY version: 5 updated: 2015/09/12 14:46:50 dnl --------------- dnl Check for openpty() function, along with header. It may need the dnl "util" library as well. AC_DEFUN([CF_FUNC_OPENPTY], [ AC_CHECK_LIB(util,openpty,cf_cv_lib_util=yes,cf_cv_lib_util=no) AC_CACHE_CHECK(for openpty header,cf_cv_func_openpty,[ cf_save_LIBS="$LIBS" test $cf_cv_lib_util = yes && { CF_ADD_LIB(util) } for cf_header in pty.h libutil.h util.h do AC_TRY_LINK([ #include <$cf_header> ],[ int x = openpty((int *)0, (int *)0, (char *)0, (struct termios *)0, (struct winsize *)0); ],[ cf_cv_func_openpty=$cf_header break ],[ cf_cv_func_openpty=no ]) done LIBS="$cf_save_LIBS" ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_FUNC_POLL version: 9 updated: 2015/10/10 13:27:32 dnl ------------ dnl See if the poll function really works. Some platforms have poll(), but dnl it does not work for terminals or files. AC_DEFUN([CF_FUNC_POLL],[ tty 2>&1 >/dev/null || { AC_CHECK_FUNCS(posix_openpt) } AC_CACHE_CHECK(if poll really works,cf_cv_working_poll,[ AC_TRY_RUN([ #include #include #include #include #ifdef HAVE_POLL_H #include #else #include #endif int main(void) { struct pollfd myfds; int ret; /* check for Darwin bug with respect to "devices" */ myfds.fd = open("/dev/null", 1); /* O_WRONLY */ if (myfds.fd < 0) myfds.fd = 0; myfds.events = POLLIN; myfds.revents = 0; ret = poll(&myfds, 1, 100); if (ret < 0 || (myfds.revents & POLLNVAL)) { ret = -1; } else { int fd = 0; if (!isatty(fd)) { fd = open("/dev/tty", 2); /* O_RDWR */ } #ifdef HAVE_POSIX_OPENPT if (fd < 0) { fd = posix_openpt(O_RDWR); } #endif if (fd >= 0) { /* also check with standard input */ myfds.fd = fd; myfds.events = POLLIN; myfds.revents = 0; ret = poll(&myfds, 1, 100); } else { ret = -1; } } ${cf_cv_main_return:-return}(ret < 0); }], [cf_cv_working_poll=yes], [cf_cv_working_poll=no], [cf_cv_working_poll=unknown])]) test "$cf_cv_working_poll" = "yes" && AC_DEFINE(HAVE_WORKING_POLL,1,[Define to 1 if the poll function seems to work]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_FUNC_TERMIOS version: 3 updated: 2012/10/06 17:56:13 dnl --------------- dnl Some old/broken variations define tcgetattr() only as a macro in dnl termio(s).h AC_DEFUN([CF_FUNC_TERMIOS],[ AC_REQUIRE([CF_STRUCT_TERMIOS]) AC_CACHE_CHECK(for tcgetattr, cf_cv_have_tcgetattr,[ AC_TRY_LINK([ #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_TERMIOS_H #include #define TTY struct termios #else #ifdef HAVE_TERMIO_H #include #define TTY struct termio #endif #endif ],[ TTY foo; tcgetattr(1, &foo);], [cf_cv_have_tcgetattr=yes], [cf_cv_have_tcgetattr=no])]) test "$cf_cv_have_tcgetattr" = yes && AC_DEFINE(HAVE_TCGETATTR,1,[Define to 1 if we have tcgetattr]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_FUNC_VSSCANF version: 6 updated: 2015/04/18 08:56:57 dnl --------------- dnl Check for vsscanf() function, which is in c9x but generally not in earlier dnl versions of C. It is in the GNU C library, and can often be simulated by dnl other functions. AC_DEFUN([CF_FUNC_VSSCANF], [ AC_CACHE_CHECK(for vsscanf function or workaround,cf_cv_func_vsscanf,[ AC_TRY_LINK([ #include #include ],[ va_list ap; vsscanf("from", "%d", ap)],[cf_cv_func_vsscanf=vsscanf],[ AC_TRY_LINK([ #include #include ],[ FILE strbuf; char *str = "from"; strbuf._flag = _IOREAD; strbuf._ptr = strbuf._base = (unsigned char *) str; strbuf._cnt = strlen(str); strbuf._file = _NFILE; return (vfscanf(&strbuf, "%d", ap))],[cf_cv_func_vsscanf=vfscanf],[ AC_TRY_LINK([ #include #include ],[ FILE strbuf; char *str = "from"; strbuf._flag = _IOREAD; strbuf._ptr = strbuf._base = (unsigned char *) str; strbuf._cnt = strlen(str); strbuf._file = _NFILE; return (_doscan(&strbuf, "%d", ap))],[cf_cv_func_vsscanf=_doscan],[ cf_cv_func_vsscanf=no])])])]) case $cf_cv_func_vsscanf in (vsscanf) AC_DEFINE(HAVE_VSSCANF,1,[Define to 1 if we have vsscanf]);; (vfscanf) AC_DEFINE(HAVE_VFSCANF,1,[Define to 1 if we have vfscanf]);; (_doscan) AC_DEFINE(HAVE__DOSCAN,1,[Define to 1 if we have _doscan]);; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_ATTRIBUTES version: 17 updated: 2015/04/12 15:39:00 dnl ----------------- dnl Test for availability of useful gcc __attribute__ directives to quiet dnl compiler warnings. Though useful, not all are supported -- and contrary dnl to documentation, unrecognized directives cause older compilers to barf. AC_DEFUN([CF_GCC_ATTRIBUTES], [ if test "$GCC" = yes then cat > conftest.i < conftest.$ac_ext <&AC_FD_CC case $cf_attribute in (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <>confdefs.h case $cf_attribute in (noreturn) AC_DEFINE_UNQUOTED(GCC_NORETURN,$cf_directive,[Define to noreturn-attribute for gcc]) ;; (printf) cf_value='/* nothing */' if test "$cf_printf_attribute" != no ; then cf_value='__attribute__((format(printf,fmt,var)))' AC_DEFINE(GCC_PRINTF,1,[Define to 1 if the compiler supports gcc-like printf attribute.]) fi AC_DEFINE_UNQUOTED(GCC_PRINTFLIKE(fmt,var),$cf_value,[Define to printf-attribute for gcc]) ;; (scanf) cf_value='/* nothing */' if test "$cf_scanf_attribute" != no ; then cf_value='__attribute__((format(scanf,fmt,var)))' AC_DEFINE(GCC_SCANF,1,[Define to 1 if the compiler supports gcc-like scanf attribute.]) fi AC_DEFINE_UNQUOTED(GCC_SCANFLIKE(fmt,var),$cf_value,[Define to sscanf-attribute for gcc]) ;; (unused) AC_DEFINE_UNQUOTED(GCC_UNUSED,$cf_directive,[Define to unused-attribute for gcc]) ;; esac fi done else fgrep define conftest.i >>confdefs.h fi rm -rf conftest* fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_VERSION version: 7 updated: 2012/10/18 06:46:33 dnl -------------- dnl Find version of gcc AC_DEFUN([CF_GCC_VERSION],[ AC_REQUIRE([AC_PROG_CC]) GCC_VERSION=none if test "$GCC" = yes ; then AC_MSG_CHECKING(version of $CC) GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`" test -z "$GCC_VERSION" && GCC_VERSION=unknown AC_MSG_RESULT($GCC_VERSION) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_WARNINGS version: 32 updated: 2015/04/12 15:39:00 dnl --------------- dnl Check if the compiler supports useful warning options. There's a few that dnl we don't use, simply because they're too noisy: dnl dnl -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x) dnl -Wredundant-decls (system headers make this too noisy) dnl -Wtraditional (combines too many unrelated messages, only a few useful) dnl -Wwrite-strings (too noisy, but should review occasionally). This dnl is enabled for ncurses using "--enable-const". dnl -pedantic dnl dnl Parameter: dnl $1 is an optional list of gcc warning flags that a particular dnl application might want to use, e.g., "no-unused" for dnl -Wno-unused dnl Special: dnl If $with_ext_const is "yes", add a check for -Wwrite-strings dnl AC_DEFUN([CF_GCC_WARNINGS], [ AC_REQUIRE([CF_GCC_VERSION]) CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS) CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS) cat > conftest.$ac_ext <], [int x = optind; char *y = optarg], [cf_cv_getopt_header=$cf_header break]) done ]) if test $cf_cv_getopt_header != none ; then AC_DEFINE(HAVE_GETOPT_HEADER,1,[Define to 1 if getopt variables are declared in header]) fi if test $cf_cv_getopt_header = getopt.h ; then AC_DEFINE(NEED_GETOPT_H,1,[Define to 1 if we must include getopt.h]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNATPREP_OPT_T version: 1 updated: 2014/08/02 18:37:25 dnl ----------------- AC_DEFUN([CF_GNATPREP_OPT_T],[ AC_CACHE_CHECK(if GNATPREP supports -T option,cf_cv_gnatprep_opt_t,[ cf_cv_gnatprep_opt_t=no gnatprep -T 2>/dev/null >/dev/null && cf_cv_gnatprep_opt_t=yes ]) test "$cf_cv_gnatprep_opt_t" = yes && GNATPREP_OPTS="-T $GNATPREP_OPTS" AC_SUBST(GNATPREP_OPTS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_GENERICS version: 3 updated: 2015/04/17 21:13:04 dnl ---------------- AC_DEFUN([CF_GNAT_GENERICS], [ AC_REQUIRE([CF_GNAT_VERSION]) AC_MSG_CHECKING(if GNAT supports generics) case $cf_gnat_version in (3.[[1-9]]*|[[4-9]].*) cf_gnat_generics=yes ;; (*) cf_gnat_generics=no ;; esac AC_MSG_RESULT($cf_gnat_generics) if test "$cf_gnat_generics" = yes then cf_compile_generics=generics cf_generic_objects="\${GENOBJS}" else cf_compile_generics= cf_generic_objects= fi AC_SUBST(cf_compile_generics) AC_SUBST(cf_generic_objects) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_PROJECTS version: 8 updated: 2015/04/17 21:13:04 dnl ---------------- dnl GNAT projects are configured with ".gpr" project files. dnl GNAT libraries are a further development, using the project feature. AC_DEFUN([CF_GNAT_PROJECTS], [ AC_REQUIRE([CF_GNAT_VERSION]) AC_REQUIRE([CF_DISABLE_GNAT_PROJECTS]) cf_gnat_libraries=no cf_gnat_projects=no if test "$enable_gnat_projects" != no ; then AC_MSG_CHECKING(if GNAT supports project files) case $cf_gnat_version in (3.[[0-9]]*) ;; (*) case $cf_cv_system_name in (cygwin*|msys*) ;; (*) mkdir conftest.src conftest.bin conftest.lib cd conftest.src rm -rf conftest* *~conftest* cat >>library.gpr <>confpackage.ads <>confpackage.adb <&AC_FD_CC 2>&1 ) ; then cf_gnat_projects=yes fi cd .. if test -f conftest.lib/confpackage.ali then cf_gnat_libraries=yes fi rm -rf conftest* *~conftest* ;; esac ;; esac AC_MSG_RESULT($cf_gnat_projects) fi # enable_gnat_projects if test $cf_gnat_projects = yes then AC_MSG_CHECKING(if GNAT supports libraries) AC_MSG_RESULT($cf_gnat_libraries) fi if test "$cf_gnat_projects" = yes then USE_OLD_MAKERULES="#" USE_GNAT_PROJECTS="" else USE_OLD_MAKERULES="" USE_GNAT_PROJECTS="#" fi if test "$cf_gnat_libraries" = yes then USE_GNAT_LIBRARIES="" else USE_GNAT_LIBRARIES="#" fi AC_SUBST(USE_OLD_MAKERULES) AC_SUBST(USE_GNAT_PROJECTS) AC_SUBST(USE_GNAT_LIBRARIES) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_SIGINT version: 1 updated: 2011/03/27 20:07:59 dnl -------------- dnl Check if gnat supports SIGINT, and presumably tasking. For the latter, it dnl is noted that gnat may compile a tasking unit even for configurations which dnl fail at runtime. AC_DEFUN([CF_GNAT_SIGINT],[ AC_CACHE_CHECK(if GNAT supports SIGINT,cf_cv_gnat_sigint,[ CF_GNAT_TRY_LINK([with Ada.Interrupts.Names; package ConfTest is pragma Warnings (Off); -- the next pragma exists since 3.11p pragma Unreserve_All_Interrupts; pragma Warnings (On); protected Process is procedure Stop; function Continue return Boolean; pragma Attach_Handler (Stop, Ada.Interrupts.Names.SIGINT); private Done : Boolean := False; end Process; end ConfTest;], [package body ConfTest is protected body Process is procedure Stop is begin Done := True; end Stop; function Continue return Boolean is begin return not Done; end Continue; end Process; end ConfTest;], [cf_cv_gnat_sigint=yes], [cf_cv_gnat_sigint=no])]) if test $cf_cv_gnat_sigint = yes ; then USE_GNAT_SIGINT="" else USE_GNAT_SIGINT="#" fi AC_SUBST(USE_GNAT_SIGINT) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_TRY_LINK version: 3 updated: 2011/03/19 14:47:45 dnl ---------------- dnl Verify that a test program compiles/links with GNAT. dnl $cf_ada_make is set to the program that compiles/links dnl $ADAFLAGS may be set to the GNAT flags. dnl dnl $1 is the text of the spec dnl $2 is the text of the body dnl $3 is the shell command to execute if successful dnl $4 is the shell command to execute if not successful AC_DEFUN([CF_GNAT_TRY_LINK], [ rm -rf conftest* *~conftest* cat >>conftest.ads <>conftest.adb <&AC_FD_CC 2>&1 ) ; then ifelse($3,, :,[ $3]) ifelse($4,,,[else $4]) fi rm -rf conftest* *~conftest* ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_TRY_RUN version: 5 updated: 2011/03/19 14:47:45 dnl --------------- dnl Verify that a test program compiles and runs with GNAT dnl $cf_ada_make is set to the program that compiles/links dnl $ADAFLAGS may be set to the GNAT flags. dnl dnl $1 is the text of the spec dnl $2 is the text of the body dnl $3 is the shell command to execute if successful dnl $4 is the shell command to execute if not successful AC_DEFUN([CF_GNAT_TRY_RUN], [ rm -rf conftest* *~conftest* cat >>conftest.ads <>conftest.adb <&AC_FD_CC 2>&1 ) ; then if ( ./conftest 1>&AC_FD_CC 2>&1 ) ; then ifelse($3,, :,[ $3]) ifelse($4,,,[ else $4]) fi ifelse($4,,,[else $4]) fi rm -rf conftest* *~conftest* ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNAT_VERSION version: 20 updated: 2015/04/18 08:56:57 dnl --------------- dnl Verify version of GNAT. AC_DEFUN([CF_GNAT_VERSION], [ AC_MSG_CHECKING(for gnat version) cf_gnat_version=`${cf_ada_make:-gnatmake} -v 2>&1 | \ grep '[[0-9]].[[0-9]][[0-9]]*' |\ sed -e '2,$d' -e 's/[[^0-9 \.]]//g' -e 's/^[[ ]]*//' -e 's/ .*//'` AC_MSG_RESULT($cf_gnat_version) case $cf_gnat_version in (3.1[[1-9]]*|3.[[2-9]]*|[[4-9]].*|20[[0-9]][[0-9]]) cf_cv_prog_gnat_correct=yes ;; (*) AC_MSG_WARN(Unsupported GNAT version $cf_gnat_version. We require 3.11 or better. Disabling Ada95 binding.) cf_cv_prog_gnat_correct=no ;; esac ]) dnl --------------------------------------------------------------------------- dnl CF_GNU_SOURCE version: 6 updated: 2005/07/09 13:23:07 dnl ------------- dnl Check if we must define _GNU_SOURCE to get a reasonable value for dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect dnl (or misfeature) of glibc2, which breaks portability of many applications, dnl since it is interwoven with GNU extensions. dnl dnl Well, yes we could work around it... AC_DEFUN([CF_GNU_SOURCE], [ AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[ AC_TRY_COMPILE([#include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_cv_gnu_source=no], [cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" AC_TRY_COMPILE([#include ],[ #ifdef _XOPEN_SOURCE make an error #endif], [cf_cv_gnu_source=no], [cf_cv_gnu_source=yes]) CPPFLAGS="$cf_save" ]) ]) test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" ])dnl dnl --------------------------------------------------------------------------- dnl CF_GPP_LIBRARY version: 12 updated: 2015/04/17 21:13:04 dnl -------------- dnl If we're trying to use g++, test if libg++ is installed (a rather common dnl problem :-). If we have the compiler but no library, we'll be able to dnl configure, but won't be able to build the c++ demo program. AC_DEFUN([CF_GPP_LIBRARY], [ cf_cxx_library=unknown case $cf_cv_system_name in (os2*) cf_gpp_libname=gpp ;; (*) cf_gpp_libname=g++ ;; esac if test "$GXX" = yes; then AC_MSG_CHECKING([for lib$cf_gpp_libname]) cf_save="$LIBS" CF_ADD_LIB($cf_gpp_libname) AC_TRY_LINK([ #include <$cf_gpp_libname/builtin.h> ], [two_arg_error_handler_t foo2 = lib_error_handler], [cf_cxx_library=yes CF_ADD_LIB($cf_gpp_libname,CXXLIBS) if test "$cf_gpp_libname" = cpp ; then AC_DEFINE(HAVE_GPP_BUILTIN_H,1,[Define to 1 if we have gpp builtin.h]) else AC_DEFINE(HAVE_GXX_BUILTIN_H,1,[Define to 1 if we have g++ builtin.h]) fi], [AC_TRY_LINK([ #include ], [two_arg_error_handler_t foo2 = lib_error_handler], [cf_cxx_library=yes CF_ADD_LIB($cf_gpp_libname,CXXLIBS) AC_DEFINE(HAVE_BUILTIN_H,1,[Define to 1 if we have builtin.h])], [cf_cxx_library=no])]) LIBS="$cf_save" AC_MSG_RESULT($cf_cxx_library) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GXX_VERSION version: 7 updated: 2012/06/16 14:55:39 dnl -------------- dnl Check for version of g++ AC_DEFUN([CF_GXX_VERSION],[ AC_REQUIRE([AC_PROG_CPP]) GXX_VERSION=none if test "$GXX" = yes; then AC_MSG_CHECKING(version of ${CXX:-g++}) GXX_VERSION="`${CXX:-g++} --version| sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`" test -z "$GXX_VERSION" && GXX_VERSION=unknown AC_MSG_RESULT($GXX_VERSION) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GXX_WARNINGS version: 9 updated: 2015/04/17 21:13:04 dnl --------------- dnl Check if the compiler supports useful warning options. dnl dnl Most of gcc's options apply to g++, except: dnl -Wbad-function-cast dnl -Wmissing-declarations dnl -Wnested-externs dnl dnl Omit a few (for now): dnl -Winline dnl dnl Parameter: dnl $1 is an optional list of g++ warning flags that a particular dnl application might want to use, e.g., "no-unused" for dnl -Wno-unused dnl Special: dnl If $with_ext_const is "yes", add a check for -Wwrite-strings dnl AC_DEFUN([CF_GXX_WARNINGS], [ CF_INTEL_COMPILER(GXX,INTEL_CPLUSPLUS,CXXFLAGS) CF_CLANG_COMPILER(GXX,CLANG_CPLUSPLUS,CXXFLAGS) AC_REQUIRE([CF_GXX_VERSION]) AC_LANG_SAVE AC_LANG_CPLUSPLUS cat > conftest.$ac_ext < ],[ char *path = "/tmp/foo"; #ifdef DB_VERSION_MAJOR #if DB_VERSION_MAJOR >= 4 DB *result = 0; db_create(&result, NULL, 0); result->open(result, NULL, path, path, DB_HASH, DB_CREATE, 0644); #elif DB_VERSION_MAJOR >= 3 DB *result = 0; db_create(&result, NULL, 0); result->open(result, path, path, DB_HASH, DB_CREATE, 0644); #elif DB_VERSION_MAJOR >= 2 DB *result = 0; db_open(path, DB_HASH, DB_CREATE, 0644, (DB_ENV *) 0, (DB_INFO *) 0, &result); #endif /* DB_VERSION_MAJOR */ #else DB *result = dbopen(path, 2, 0644, DB_HASH, 0); #endif ${cf_cv_main_return:-return}(result != 0) ],[ if test -n "$cf_db_libs" ; then cf_cv_hashed_db_libs=$cf_db_libs else cf_cv_hashed_db_libs=default fi LIBS="$cf_save_libs" break ]) LIBS="$cf_save_libs" done ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_HASHED_DB_VERSION version: 4 updated: 2014/04/12 16:47:01 dnl -------------------- dnl Given that we have the header file for hashed database, find the version dnl information. AC_DEFUN([CF_HASHED_DB_VERSION], [ AC_CACHE_CHECK(for version of db, cf_cv_hashed_db_version,[ cf_cv_hashed_db_version=unknown for cf_db_version in 1 2 3 4 5 6 do CF_MSG_LOG(checking for db version $cf_db_version) AC_TRY_COMPILE([ $ac_includes_default #include #ifdef DB_VERSION_MAJOR /* db2 (DB_VERSION_MAJOR=2) has also DB_VERSION_MINOR, tested with 7 */ #if $cf_db_version == DB_VERSION_MAJOR /* ok */ #else make an error #endif #else #if $cf_db_version == 1 /* ok: assuming this is DB 1.8.5 */ #else make an error #endif #endif ],[DBT *foo = 0],[ cf_cv_hashed_db_version=$cf_db_version break ]) done ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_HEADER_PATH version: 13 updated: 2015/04/15 19:08:48 dnl -------------- dnl Construct a search-list of directories for a nonstandard header-file dnl dnl Parameters dnl $1 = the variable to return as result dnl $2 = the package name AC_DEFUN([CF_HEADER_PATH], [ $1= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` CF_ADD_SUBDIR_PATH($1,$2,include,$cf_header_path,NONE) cf_header_path_list="$cf_header_path_list [$]$1" ;; esac done fi # add the variations for the package we are looking for CF_SUBDIR_PATH($1,$2,include) test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && $1="[$]$1 $includedir" test -d $includedir/$2 && $1="[$]$1 $includedir/$2" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && $1="[$]$1 $oldincludedir" test -d $oldincludedir/$2 && $1="[$]$1 $oldincludedir/$2" } $1="[$]$1 $cf_header_path_list" ])dnl dnl --------------------------------------------------------------------------- dnl CF_HELP_MESSAGE version: 3 updated: 1998/01/14 10:56:23 dnl --------------- dnl Insert text into the help-message, for readability, from AC_ARG_WITH. AC_DEFUN([CF_HELP_MESSAGE], [AC_DIVERT_HELP([$1])dnl ])dnl dnl --------------------------------------------------------------------------- dnl CF_INCLUDE_DIRS version: 10 updated: 2014/09/19 20:58:42 dnl --------------- dnl Construct the list of include-options according to whether we're building dnl in the source directory or using '--srcdir=DIR' option. AC_DEFUN([CF_INCLUDE_DIRS], [ if test "$srcdir" != "."; then CPPFLAGS="-I\${srcdir}/../include $CPPFLAGS" fi CPPFLAGS="-I../include $CPPFLAGS" if test "$srcdir" != "."; then CPPFLAGS="-I\${srcdir} $CPPFLAGS" fi CPPFLAGS="-I. $CPPFLAGS" AC_SUBST(CPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_INTEL_COMPILER version: 7 updated: 2015/04/12 15:39:00 dnl ----------------- dnl Check if the given compiler is really the Intel compiler for Linux. It dnl tries to imitate gcc, but does not return an error when it finds a mismatch dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK. dnl dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from dnl the wrappers for gcc and g++ warnings. dnl dnl $1 = GCC (default) or GXX dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS dnl $3 = CFLAGS (default) or CXXFLAGS AC_DEFUN([CF_INTEL_COMPILER],[ AC_REQUIRE([AC_CANONICAL_HOST]) ifelse([$2],,INTEL_COMPILER,[$2])=no if test "$ifelse([$1],,[$1],GCC)" = yes ; then case $host_os in (linux*|gnu*) AC_MSG_CHECKING(if this is really Intel ifelse([$1],GXX,C++,C) compiler) cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])" ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -no-gcc" AC_TRY_COMPILE([],[ #ifdef __INTEL_COMPILER #else make an error #endif ],[ifelse([$2],,INTEL_COMPILER,[$2])=yes cf_save_CFLAGS="$cf_save_CFLAGS -we147" ],[]) ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS" AC_MSG_RESULT($ifelse([$2],,INTEL_COMPILER,[$2])) ;; esac fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ISASCII version: 4 updated: 2012/10/06 17:56:13 dnl ---------- dnl Check if we have either a function or macro for 'isascii()'. AC_DEFUN([CF_ISASCII], [ AC_MSG_CHECKING(for isascii) AC_CACHE_VAL(cf_cv_have_isascii,[ AC_TRY_LINK([#include ],[int x = isascii(' ')], [cf_cv_have_isascii=yes], [cf_cv_have_isascii=no]) ])dnl AC_MSG_RESULT($cf_cv_have_isascii) test "$cf_cv_have_isascii" = yes && AC_DEFINE(HAVE_ISASCII,1,[Define to 1 if we have isascii()]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_LARGEFILE version: 9 updated: 2015/04/18 08:56:57 dnl ------------ dnl Add checks for large file support. AC_DEFUN([CF_LARGEFILE],[ ifdef([AC_FUNC_FSEEKO],[ AC_SYS_LARGEFILE if test "$enable_largefile" != no ; then AC_FUNC_FSEEKO # Normally we would collect these definitions in the config.h, # but (like _XOPEN_SOURCE), some environments rely on having these # defined before any of the system headers are included. Another # case comes up with C++, e.g., on AIX the compiler compiles the # header files by themselves before looking at the body files it is # told to compile. For ncurses, those header files do not include # the config.h test "$ac_cv_sys_large_files" != no && CPPFLAGS="$CPPFLAGS -D_LARGE_FILES " test "$ac_cv_sys_largefile_source" != no && CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE " test "$ac_cv_sys_file_offset_bits" != no && CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits " AC_CACHE_CHECK(whether to use struct dirent64, cf_cv_struct_dirent64,[ AC_TRY_COMPILE([ #include #include ],[ /* if transitional largefile support is setup, this is true */ extern struct dirent64 * readdir(DIR *); struct dirent64 *x = readdir((DIR *)0); struct dirent *y = readdir((DIR *)0); int z = x - y; ], [cf_cv_struct_dirent64=yes], [cf_cv_struct_dirent64=no]) ]) test "$cf_cv_struct_dirent64" = yes && AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Define to 1 if we have struct dirent64]) fi ]) ]) dnl --------------------------------------------------------------------------- dnl CF_LDFLAGS_STATIC version: 12 updated: 2015/04/18 08:56:57 dnl ----------------- dnl Check for compiler/linker flags used to temporarily force usage of static dnl libraries. This depends on the compiler and platform. Use this to help dnl ensure that the linker picks up a given library based on its position in dnl the list of linker options and libraries. AC_DEFUN([CF_LDFLAGS_STATIC],[ if test "$GCC" = yes ; then case $cf_cv_system_name in (OS/2*|os2*|aix[[4]]*|solaris2.1[[0-9]]|darwin*) LDFLAGS_STATIC= LDFLAGS_SHARED= ;; (*) # normally, except when broken LDFLAGS_STATIC=-static LDFLAGS_SHARED=-dynamic ;; esac else case $cf_cv_system_name in (aix[[4-7]]*) # from ld manpage LDFLAGS_STATIC=-bstatic LDFLAGS_SHARED=-bdynamic ;; (hpux*) # from ld manpage for hpux10.20, hpux11.11 # We could also use just "archive" and "shared". LDFLAGS_STATIC=-Wl,-a,archive_shared LDFLAGS_SHARED=-Wl,-a,shared_archive ;; (irix*) # from ld manpage IRIX64 LDFLAGS_STATIC=-Bstatic LDFLAGS_SHARED=-Bdynamic ;; (osf[[45]]*) # from ld manpage osf4.0d, osf5.1 # alternative "-oldstyle_liblookup" (not in cc manpage) LDFLAGS_STATIC=-noso LDFLAGS_SHARED=-so_archive ;; (solaris2*) LDFLAGS_STATIC=-Bstatic LDFLAGS_SHARED=-Bdynamic ;; esac fi if test -n "$LDFLAGS_STATIC" && test -n "$LDFLAGS_SHARED" then AC_MSG_CHECKING(if linker supports switching between static/dynamic) rm -f libconftest.a cat >conftest.$ac_ext < int cf_ldflags_static(FILE *fp) { return fflush(fp); } EOF if AC_TRY_EVAL(ac_compile) ; then ( $AR $ARFLAGS libconftest.a conftest.o ) 2>&AC_FD_CC 1>/dev/null ( eval $RANLIB libconftest.a ) 2>&AC_FD_CC >/dev/null fi rm -f conftest.* cf_save_LIBS="$LIBS" LIBS="$LDFLAGS_STATIC -L`pwd` -lconftest $LDFLAGS_DYNAMIC $LIBS" AC_TRY_LINK([ #line __oline__ "configure" #include int cf_ldflags_static(FILE *fp); ],[ return cf_ldflags_static(stdin); ],[ # some linkers simply ignore the -dynamic case x`file conftest$ac_exeext 2>/dev/null` in (*static*) cf_ldflags_static=no ;; (*) cf_ldflags_static=yes ;; esac ],[cf_ldflags_static=no]) rm -f libconftest.* LIBS="$cf_save_LIBS" AC_MSG_RESULT($cf_ldflags_static) if test $cf_ldflags_static != yes then LDFLAGS_STATIC= LDFLAGS_SHARED= fi else LDFLAGS_STATIC= LDFLAGS_SHARED= fi AC_SUBST(LDFLAGS_STATIC) AC_SUBST(LDFLAGS_SHARED) ]) dnl --------------------------------------------------------------------------- dnl CF_LD_RPATH_OPT version: 6 updated: 2015/04/12 15:39:00 dnl --------------- dnl For the given system and compiler, find the compiler flags to pass to the dnl loader to use the "rpath" feature. AC_DEFUN([CF_LD_RPATH_OPT], [ AC_REQUIRE([CF_CHECK_CACHE]) LD_RPATH_OPT= AC_MSG_CHECKING(for an rpath option) case $cf_cv_system_name in (irix*) if test "$GCC" = yes; then LD_RPATH_OPT="-Wl,-rpath," else LD_RPATH_OPT="-rpath " fi ;; (linux*|gnu*|k*bsd*-gnu) LD_RPATH_OPT="-Wl,-rpath," ;; (openbsd[[2-9]].*|mirbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (dragonfly*|freebsd*) LD_RPATH_OPT="-rpath " ;; (netbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (osf*|mls+*) LD_RPATH_OPT="-rpath " ;; (solaris2*) LD_RPATH_OPT="-R" ;; (*) ;; esac AC_MSG_RESULT($LD_RPATH_OPT) case "x$LD_RPATH_OPT" in (x-R*) AC_MSG_CHECKING(if we need a space after rpath option) cf_save_LIBS="$LIBS" CF_ADD_LIBS(${LD_RPATH_OPT}$libdir) AC_TRY_LINK(, , cf_rpath_space=no, cf_rpath_space=yes) LIBS="$cf_save_LIBS" AC_MSG_RESULT($cf_rpath_space) test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIBRARY_PATH version: 10 updated: 2015/04/15 19:08:48 dnl --------------- dnl Construct a search-list of directories for a nonstandard library-file dnl dnl Parameters dnl $1 = the variable to return as result dnl $2 = the package name AC_DEFUN([CF_LIBRARY_PATH], [ $1= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` CF_ADD_SUBDIR_PATH($1,$2,lib,$cf_library_path,NONE) cf_library_path_list="$cf_library_path_list [$]$1" ;; esac done fi CF_SUBDIR_PATH($1,$2,lib) $1="$cf_library_path_list [$]$1" ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIBTOOL_VERSION version: 1 updated: 2013/04/06 18:03:09 dnl ------------------ AC_DEFUN([CF_LIBTOOL_VERSION],[ if test -n "$LIBTOOL" && test "$LIBTOOL" != none then cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([[^)]]*)//g' -e 's/^[[^1-9]]*//' -e 's/[[^0-9.]].*//'` else cf_cv_libtool_version= fi test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIB_PREFIX version: 12 updated: 2015/10/17 19:03:33 dnl ------------- dnl Compute the library-prefix for the given host system dnl $1 = variable to set define([CF_LIB_PREFIX], [ case $cf_cv_system_name in (OS/2*|os2*) if test "$DFT_LWR_MODEL" = libtool; then LIB_PREFIX='lib' else LIB_PREFIX='' fi ;; (*) LIB_PREFIX='lib' ;; esac ifelse($1,,,[$1=$LIB_PREFIX]) AC_SUBST(LIB_PREFIX) ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIB_RULES version: 86 updated: 2015/11/07 20:01:34 dnl ------------ dnl Append definitions and rules for the given models to the subdirectory dnl Makefiles, and the recursion rule for the top-level Makefile. If the dnl subdirectory is a library-source directory, modify the Libs_To_Make list in dnl the corresponding makefile to list the models that we'll generate. dnl dnl For shared libraries, make a list of symbolic links to construct when dnl generating each library. The convention used for Linux is the simplest dnl one: dnl lib.so -> dnl lib.so. -> dnl lib.so.. dnl dnl Note: Libs_To_Make is mixed case, since it is not a pure autoconf variable. AC_DEFUN([CF_LIB_RULES], [ cf_prefix=$LIB_PREFIX AC_REQUIRE([CF_SUBST_NCURSES_VERSION]) case $cf_cv_shlib_version in (cygdll|msysdll|mingw) TINFO_NAME=$TINFO_ARG_SUFFIX TINFO_SUFFIX=.dll ;; esac if test -n "$TINFO_SUFFIX" ; then case $TINFO_SUFFIX in (tw*) TINFO_NAME="${TINFO_NAME}tw${EXTRA_SUFFIX}" TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^tw'$EXTRA_SUFFIX'//'` ;; (t*) TINFO_NAME="${TINFO_NAME}t${EXTRA_SUFFIX}" TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^t'$EXTRA_SUFFIX'//'` ;; (w*) TINFO_NAME="${TINFO_NAME}w${EXTRA_SUFFIX}" TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^w'$EXTRA_SUFFIX'//'` ;; esac fi for cf_dir in $SRC_SUBDIRS do if test ! -d $srcdir/$cf_dir ; then continue elif test -f $srcdir/$cf_dir/modules; then SHARED_LIB= Libs_To_Make= cf_awk_program= if test -n "${cf_cv_abi_version}" && test "x${cf_cv_abi_version}" != "x5" then cf_awk_program="$cf_awk_program\ /deprecated in ABI${cf_cv_abi_version}/ { next; }\ { sub(\"NCURSES([[WT]]+)?\", \"&${cf_cv_abi_version}\"); }\ " fi if test "x$WILDCARD_SYMS" = xno then cf_awk_program="$cf_awk_program\ /[[ ]]_\\*;/ { skip=1; next; }\ " fi if test "x$cf_awk_program" != "x" then cat >>$cf_dir/Makefile <\[$]@ distclean:: rm -f resulting.map CF_EOF fi for cf_item in $cf_LIST_MODELS do CF_LIB_SUFFIX($cf_item,cf_suffix,cf_depsuf) cf_libname=$cf_dir test "$cf_dir" = c++ && cf_libname=ncurses++ if test $cf_item = shared ; then if test -n "${LIB_SUFFIX}" then cf_shared_suffix=`echo "$cf_suffix" | sed 's/^'"${USE_LIB_SUFFIX}"'//'` else cf_shared_suffix="$cf_suffix" fi if test "$cf_cv_do_symlinks" = yes ; then cf_version_name= case "$cf_cv_shlib_version" in (rel) cf_version_name=REL_VERSION ;; (abi) cf_version_name=ABI_VERSION ;; esac if test -n "$cf_version_name" then case "$cf_cv_system_name" in (darwin*) # "w", etc? cf_suffix="${USE_LIB_SUFFIX}"'.${'$cf_version_name'}'"$cf_shared_suffix" ;; (*) cf_suffix="$cf_suffix"'.${'$cf_version_name'}' ;; esac fi if test -n "${USE_LIB_SUFFIX}" then cf_shared_suffix=`echo "$cf_suffix" | sed 's/^'"${USE_LIB_SUFFIX}"'//'` else cf_shared_suffix="$cf_suffix" fi fi # cygwin needs import library, and has unique naming convention # use autodetected ${cf_prefix} for import lib and static lib, but # use 'cyg' prefix for shared lib. case $cf_cv_shlib_version in (cygdll) cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'` cf_add_lib="../lib/cyg${cf_libname}${cf_cygsuf}" ;; (msysdll) cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'` cf_add_lib="../lib/msys-${cf_libname}${cf_cygsuf}" ;; (mingw) cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'` cf_add_lib="../lib/lib${cf_libname}${cf_cygsuf}" ;; (*) cf_add_lib= ;; esac if test -n "$cf_add_lib" then Libs_To_Make="$Libs_To_Make $cf_add_lib" continue fi fi cf_add_lib="../lib/${cf_prefix}${cf_libname}${cf_suffix}" Libs_To_Make="$Libs_To_Make $cf_add_lib" done if test $cf_dir = ncurses ; then cf_subsets="$LIB_SUBSETS" cf_r_parts="$cf_subsets" cf_liblist="$Libs_To_Make" while test -n "$cf_r_parts" do cf_l_parts=`echo "$cf_r_parts" |sed -e 's/ .*$//'` cf_r_parts=`echo "$cf_r_parts" |sed -e 's/^[[^ ]]* //'` if test "$cf_l_parts" != "$cf_r_parts" ; then cf_add_lib= case $cf_l_parts in (*termlib*) cf_add_lib=`echo $cf_liblist |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TINFO_LIB_SUFFIX}%g` ;; (*ticlib*) cf_add_lib=`echo $cf_liblist |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TICS_LIB_SUFFIX}%g` ;; (*) break ;; esac if test -n "$cf_add_lib"; then Libs_To_Make="$cf_add_lib $Libs_To_Make" fi else break fi done else cf_subsets=`echo "$LIB_SUBSETS" | sed -e 's/^termlib.* //'` fi if test $cf_dir = c++; then if test "x$with_shared_cxx" != xyes && test -n "$cf_shared_suffix"; then cf_list= for cf_item in $Libs_To_Make do case $cf_item in (*.a) ;; (*) cf_item=`echo "$cf_item" | sed -e "s,"$cf_shared_suffix",.a,"` ;; esac for cf_test in $cf_list do if test "$cf_test" = "$cf_item" then cf_LIST_MODELS=`echo "$cf_LIST_MODELS" | sed -e 's/normal//'` cf_item= break fi done test -n "$cf_item" && cf_list="$cf_list $cf_item" done Libs_To_Make="$cf_list" fi fi sed -e "s%@Libs_To_Make@%$Libs_To_Make%" \ -e "s%@SHARED_LIB@%$SHARED_LIB%" \ $cf_dir/Makefile >$cf_dir/Makefile.out mv $cf_dir/Makefile.out $cf_dir/Makefile $AWK -f $srcdir/mk-0th.awk \ libname="${cf_dir}${LIB_SUFFIX}" subsets="$LIB_SUBSETS" ticlib="$TICS_LIB_SUFFIX" termlib="$TINFO_LIB_SUFFIX" \ $srcdir/$cf_dir/modules >>$cf_dir/Makefile for cf_subset in $cf_subsets do cf_subdirs= for cf_item in $cf_LIST_MODELS do echo "Appending rules for ${cf_item} model (${cf_dir}: ${cf_subset})" CF_UPPER(cf_ITEM,$cf_item) CXX_MODEL=$cf_ITEM if test "$CXX_MODEL" = SHARED; then case $cf_cv_shlib_version in (cygdll|msysdll|mingw) test "x$with_shared_cxx" = xno && CF_VERBOSE(overriding CXX_MODEL to SHARED) with_shared_cxx=yes ;; (*) test "x$with_shared_cxx" = xno && CXX_MODEL=NORMAL ;; esac fi CF_LIB_SUFFIX($cf_item,cf_suffix,cf_depsuf) CF_OBJ_SUBDIR($cf_item,cf_subdir) # Test for case where we build libtinfo with a different name. cf_libname=$cf_dir if test $cf_dir = ncurses ; then case $cf_subset in (*base*) cf_libname=${cf_libname}$USE_LIB_SUFFIX ;; (*termlib*) cf_libname=$TINFO_LIB_SUFFIX ;; (ticlib*) cf_libname=$TICS_LIB_SUFFIX ;; esac elif test $cf_dir = c++ ; then cf_libname=ncurses++$USE_LIB_SUFFIX else cf_libname=${cf_libname}$USE_LIB_SUFFIX fi if test -n "${USE_ARG_SUFFIX}" ; then # undo $USE_LIB_SUFFIX add-on in CF_LIB_SUFFIX cf_suffix=`echo $cf_suffix |sed -e "s%^${USE_LIB_SUFFIX}%%"` fi # These dependencies really are for development, not # builds, but they are useful in porting, too. cf_depend="../include/ncurses_cfg.h" if test "$srcdir" = "."; then cf_reldir="." else cf_reldir="\${srcdir}" fi if test -f $srcdir/$cf_dir/$cf_dir.priv.h; then cf_depend="$cf_depend $cf_reldir/$cf_dir.priv.h" elif test -f $srcdir/$cf_dir/curses.priv.h; then cf_depend="$cf_depend $cf_reldir/curses.priv.h" fi cf_dir_suffix= old_cf_suffix="$cf_suffix" if test "$cf_cv_shlib_version_infix" = yes ; then if test -n "$USE_LIB_SUFFIX" ; then case $USE_LIB_SUFFIX in (tw*) cf_libname=`echo $cf_libname | sed 's/tw'$EXTRA_SUFFIX'$//'` cf_suffix=`echo $cf_suffix | sed 's/^tw'$EXTRA_SUFFIX'//'` cf_dir_suffix=tw$EXTRA_SUFFIX ;; (t*) cf_libname=`echo $cf_libname | sed 's/t'$EXTRA_SUFFIX'$//'` cf_suffix=`echo $cf_suffix | sed 's/^t'$EXTRA_SUFFIX'//'` cf_dir_suffix=t$EXTRA_SUFFIX ;; (w*) cf_libname=`echo $cf_libname | sed 's/w'$EXTRA_SUFFIX'$//'` cf_suffix=`echo $cf_suffix | sed 's/^w'$EXTRA_SUFFIX'//'` cf_dir_suffix=w$EXTRA_SUFFIX ;; (*) cf_libname=`echo $cf_libname | sed 's/'$EXTRA_SUFFIX'$//'` cf_suffix=`echo $cf_suffix | sed 's/^'$EXTRA_SUFFIX'//'` cf_dir_suffix=$EXTRA_SUFFIX ;; esac fi fi $AWK -f $srcdir/mk-1st.awk \ name=${cf_libname}${cf_dir_suffix} \ traces=$LIB_TRACING \ MODEL=$cf_ITEM \ CXX_MODEL=$CXX_MODEL \ model=$cf_subdir \ prefix=$cf_prefix \ suffix=$cf_suffix \ subset=$cf_subset \ driver=$cf_cv_term_driver \ SymLink="$LN_S" \ TermlibRoot=$TINFO_NAME \ TermlibSuffix=$TINFO_SUFFIX \ ShlibVer=$cf_cv_shlib_version \ ShlibVerInfix=$cf_cv_shlib_version_infix \ ReLink=${cf_cv_do_relink:-no} \ DoLinks=$cf_cv_do_symlinks \ rmSoLocs=$cf_cv_rm_so_locs \ ldconfig="$LDCONFIG" \ overwrite=$WITH_OVERWRITE \ depend="$cf_depend" \ host="$host" \ libtool_version="$LIBTOOL_VERSION" \ $srcdir/$cf_dir/modules >>$cf_dir/Makefile cf_suffix="$old_cf_suffix" for cf_subdir2 in $cf_subdirs lib do test $cf_subdir = $cf_subdir2 && break done test "${cf_subset}.${cf_subdir2}" != "${cf_subset}.${cf_subdir}" && \ $AWK -f $srcdir/mk-2nd.awk \ name=$cf_dir \ traces=$LIB_TRACING \ MODEL=$cf_ITEM \ model=$cf_subdir \ subset=$cf_subset \ srcdir=$srcdir \ echo=$WITH_ECHO \ crenames=$cf_cv_prog_CC_c_o \ cxxrenames=$cf_cv_prog_CXX_c_o \ $srcdir/$cf_dir/modules >>$cf_dir/Makefile cf_subdirs="$cf_subdirs $cf_subdir" done done fi echo ' cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} [$]@' >>Makefile done for cf_dir in $SRC_SUBDIRS do if test ! -d $srcdir/$cf_dir ; then continue fi if test -f $cf_dir/Makefile ; then case "$cf_dir" in (Ada95) echo 'libs \' >> Makefile echo 'install.libs \' >> Makefile echo 'uninstall.libs ::' >> Makefile echo ' cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} [$]@' >> Makefile ;; esac fi if test -f $srcdir/$cf_dir/modules; then echo >> Makefile if test -f $srcdir/$cf_dir/headers; then cat >> Makefile <> Makefile fi cat >> Makefile <> Makefile <> Makefile <> Makefile <> Makefile <> Makefile <> Makefile <headers.sh <>headers.sh </<\$END\/\$NAME>/" >> \$TMPSED done ;; (*) echo "" >> \$TMPSED ;; esac CF_EOF else cat >>headers.sh <//" >> \$TMPSED NAME=ncurses.h fi echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED done ;; (*) echo "s///" >> \$TMPSED ;; esac CF_EOF fi cat >>headers.sh < \$TMPSRC NAME=\`basename \$SRC\` CF_EOF if test $WITH_CURSES_H != yes; then cat >>headers.sh <>headers.sh <>$cf_dir/Makefile fi if test -f $srcdir/$cf_dir/modules; then if test "$cf_dir" != "c++" ; then cat >>$cf_dir/Makefile <<"CF_EOF" depend : ${AUTO_SRC} makedepend -- ${CPPFLAGS} -- ${C_SRC} # DO NOT DELETE THIS LINE -- make depend depends on it. CF_EOF fi fi done AC_SUBST(Libs_To_Make) ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIB_SONAME version: 5 updated: 2010/08/14 18:25:37 dnl ------------- dnl Find the and soname for the given shared library. Set the cache variable dnl cf_cv_$3_soname to this, unless it is not found. Then set the cache dnl variable to "unknown". dnl dnl $1 = headers dnl $2 = code dnl $3 = library name AC_DEFUN([CF_LIB_SONAME], [ AC_CACHE_CHECK(for soname of $3 library,cf_cv_$3_soname,[ cf_cv_$3_soname=unknown if test "$cross_compiling" != yes ; then cat >conftest.$ac_ext </dev/null | sed -e 's,^.*/,,' -e 's, .*$,,' | fgrep lib$3.` test -z "$cf_cv_$3_soname" && cf_cv_$3_soname=unknown fi fi rm -rf conftest* LIBS="$cf_save_LIBS" fi ]) ]) dnl --------------------------------------------------------------------------- dnl CF_LIB_SUFFIX version: 25 updated: 2015/04/17 21:13:04 dnl ------------- dnl Compute the library file-suffix from the given model name dnl $1 = model name dnl $2 = variable to set (the nominal library suffix) dnl $3 = dependency variable to set (actual filename) dnl The variable $LIB_SUFFIX, if set, prepends the variable to set. AC_DEFUN([CF_LIB_SUFFIX], [ case X$1 in (Xlibtool) $2='.la' $3=[$]$2 ;; (Xdebug) $2='_g.a' $3=[$]$2 ;; (Xprofile) $2='_p.a' $3=[$]$2 ;; (Xshared) case $cf_cv_system_name in (aix[[5-7]]*) $2='.so' $3=[$]$2 ;; (cygwin*|msys*|mingw*) $2='.dll' $3='.dll.a' ;; (darwin*) $2='.dylib' $3=[$]$2 ;; (hpux*) case $target in (ia64*) $2='.so' $3=[$]$2 ;; (*) $2='.sl' $3=[$]$2 ;; esac ;; (*) $2='.so' $3=[$]$2 ;; esac ;; (*) $2='.a' $3=[$]$2 ;; esac if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}" then $2="${LIB_SUFFIX}${EXTRA_SUFFIX}[$]{$2}" $3="${LIB_SUFFIX}${EXTRA_SUFFIX}[$]{$3}" fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIB_TYPE version: 5 updated: 2015/04/17 21:13:04 dnl ----------- dnl Compute the string to append to -library from the given model name dnl $1 = model name dnl $2 = variable to set dnl The variable $LIB_SUFFIX, if set, prepends the variable to set. AC_DEFUN([CF_LIB_TYPE], [ case $1 in (libtool) $2='' ;; (normal) $2='' ;; (debug) $2='_g' ;; (profile) $2='_p' ;; (shared) $2='' ;; esac test -n "$LIB_SUFFIX" && $2="${LIB_SUFFIX}[$]{$2}" ])dnl dnl --------------------------------------------------------------------------- dnl CF_LINK_DATAONLY version: 10 updated: 2012/10/06 17:41:51 dnl ---------------- dnl Some systems have a non-ANSI linker that doesn't pull in modules that have dnl only data (i.e., no functions), for example NeXT. On those systems we'll dnl have to provide wrappers for global tables to ensure they're linked dnl properly. AC_DEFUN([CF_LINK_DATAONLY], [ AC_MSG_CHECKING([if data-only library module links]) AC_CACHE_VAL(cf_cv_link_dataonly,[ rm -f conftest.a cat >conftest.$ac_ext <&AC_FD_CC 1>/dev/null fi rm -f conftest.$ac_ext data.o cat >conftest.$ac_ext <&AC_FD_CC 1>/dev/null fi rm -f conftest.$ac_ext func.o ( eval $RANLIB conftest.a ) 2>&AC_FD_CC >/dev/null cf_saveLIBS="$LIBS" LIBS="conftest.a $LIBS" AC_TRY_RUN([ int main() { extern int testfunc(); ${cf_cv_main_return:-return} (!testfunc()); } ], [cf_cv_link_dataonly=yes], [cf_cv_link_dataonly=no], [cf_cv_link_dataonly=unknown]) LIBS="$cf_saveLIBS" ]) AC_MSG_RESULT($cf_cv_link_dataonly) if test "$cf_cv_link_dataonly" = no ; then AC_DEFINE(BROKEN_LINKER,1,[if data-only library module does not link]) BROKEN_LINKER=1 fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_LINK_FUNCS version: 8 updated: 2012/10/06 17:56:13 dnl ------------- dnl Most Unix systems have both link and symlink, a few don't have symlink. dnl A few non-Unix systems implement symlink, but not link. dnl A few non-systems implement neither (or have nonfunctional versions). AC_DEFUN([CF_LINK_FUNCS], [ AC_CHECK_FUNCS( \ remove \ unlink ) if test "$cross_compiling" = yes ; then AC_CHECK_FUNCS( \ link \ symlink ) else AC_CACHE_CHECK(if link/symlink functions work,cf_cv_link_funcs,[ cf_cv_link_funcs= for cf_func in link symlink ; do AC_TRY_RUN([ #include #include #ifdef HAVE_UNISTD_H #include #endif int main() { int fail = 0; char *src = "config.log"; char *dst = "conftest.chk"; struct stat src_sb; struct stat dst_sb; stat(src, &src_sb); fail = ($cf_func("config.log", "conftest.chk") < 0) || (stat(dst, &dst_sb) < 0) || (dst_sb.st_mtime != src_sb.st_mtime); #ifdef HAVE_UNLINK unlink(dst); #else remove(dst); #endif ${cf_cv_main_return:-return} (fail); } ],[ cf_cv_link_funcs="$cf_cv_link_funcs $cf_func" eval 'ac_cv_func_'$cf_func'=yes'],[ eval 'ac_cv_func_'$cf_func'=no'],[ eval 'ac_cv_func_'$cf_func'=error']) done test -z "$cf_cv_link_funcs" && cf_cv_link_funcs=no ]) test "$ac_cv_func_link" = yes && AC_DEFINE(HAVE_LINK,1,[Define to 1 if we have link() function]) test "$ac_cv_func_symlink" = yes && AC_DEFINE(HAVE_SYMLINK,1,[Define to 1 if we have symlink() function]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_MAKEFLAGS version: 17 updated: 2015/08/05 20:44:28 dnl ------------ dnl Some 'make' programs support ${MAKEFLAGS}, some ${MFLAGS}, to pass 'make' dnl options to lower-levels. It's very useful for "make -n" -- if we have it. dnl (GNU 'make' does both, something POSIX 'make', which happens to make the dnl ${MAKEFLAGS} variable incompatible because it adds the assignments :-) AC_DEFUN([CF_MAKEFLAGS], [ AC_CACHE_CHECK(for makeflags variable, cf_cv_makeflags,[ cf_cv_makeflags='' for cf_option in '-${MAKEFLAGS}' '${MFLAGS}' do cat >cf_makeflags.tmp </dev/null | fgrep -v "ing directory" | sed -e 's,[[ ]]*$,,'` case "$cf_result" in (.*k|.*kw) cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` case "$cf_result" in (.*CC=*) cf_cv_makeflags= ;; (*) cf_cv_makeflags=$cf_option ;; esac break ;; (.-) ;; (*) echo "given option \"$cf_option\", no match \"$cf_result\"" ;; esac done rm -f cf_makeflags.tmp ]) AC_SUBST(cf_cv_makeflags) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MAKE_TAGS version: 6 updated: 2010/10/23 15:52:32 dnl ------------ dnl Generate tags/TAGS targets for makefiles. Do not generate TAGS if we have dnl a monocase filesystem. AC_DEFUN([CF_MAKE_TAGS],[ AC_REQUIRE([CF_MIXEDCASE_FILENAMES]) AC_CHECK_PROGS(CTAGS, exctags ctags) AC_CHECK_PROGS(ETAGS, exetags etags) AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS:-ctags}, yes, no) if test "$cf_cv_mixedcase" = yes ; then AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS:-etags}, yes, no) else MAKE_UPPER_TAGS=no fi if test "$MAKE_UPPER_TAGS" = yes ; then MAKE_UPPER_TAGS= else MAKE_UPPER_TAGS="#" fi if test "$MAKE_LOWER_TAGS" = yes ; then MAKE_LOWER_TAGS= else MAKE_LOWER_TAGS="#" fi AC_SUBST(CTAGS) AC_SUBST(ETAGS) AC_SUBST(MAKE_UPPER_TAGS) AC_SUBST(MAKE_LOWER_TAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MANPAGE_FORMAT version: 11 updated: 2015/04/18 08:56:57 dnl ----------------- dnl Option to allow user to override automatic configuration of manpage format. dnl There are several special cases: dnl dnl gzip - man checks for, can display gzip'd files dnl compress - man checks for, can display compressed files dnl BSDI - files in the cat-directories are suffixed ".0" dnl formatted - installer should format (put files in cat-directory) dnl catonly - installer should only format, e.g., for a turnkey system. dnl dnl There are other configurations which this macro does not test, e.g., HPUX's dnl compressed manpages (but uncompressed manpages are fine, and HPUX's naming dnl convention would not match our use). AC_DEFUN([CF_MANPAGE_FORMAT], [ AC_REQUIRE([CF_PATHSEP]) AC_MSG_CHECKING(format of man-pages) AC_ARG_WITH(manpage-format, [ --with-manpage-format specify manpage-format: gzip/compress/BSDI/normal and optionally formatted/catonly, e.g., gzip,formatted], [MANPAGE_FORMAT=$withval], [MANPAGE_FORMAT=unknown]) test -z "$MANPAGE_FORMAT" && MANPAGE_FORMAT=unknown MANPAGE_FORMAT=`echo "$MANPAGE_FORMAT" | sed -e 's/,/ /g'` cf_unknown= case $MANPAGE_FORMAT in (unknown) if test -z "$MANPATH" ; then MANPATH="/usr/man:/usr/share/man" fi # look for the 'date' man-page (it's most likely to be installed!) MANPAGE_FORMAT= cf_preform=no cf_catonly=yes cf_example=date IFS="${IFS:- }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for cf_dir in $MANPATH; do test -z "$cf_dir" && cf_dir=/usr/man for cf_name in $cf_dir/man*/$cf_example.[[01]]* $cf_dir/cat*/$cf_example.[[01]]* $cf_dir/man*/$cf_example $cf_dir/cat*/$cf_example do cf_test=`echo $cf_name | sed -e 's/*//'` if test "x$cf_test" = "x$cf_name" ; then case "$cf_name" in (*.gz) MANPAGE_FORMAT="$MANPAGE_FORMAT gzip";; (*.Z) MANPAGE_FORMAT="$MANPAGE_FORMAT compress";; (*.0) MANPAGE_FORMAT="$MANPAGE_FORMAT BSDI";; (*) MANPAGE_FORMAT="$MANPAGE_FORMAT normal";; esac case "$cf_name" in ($cf_dir/man*) cf_catonly=no ;; ($cf_dir/cat*) cf_preform=yes ;; esac break fi # if we found a match in either man* or cat*, stop looking if test -n "$MANPAGE_FORMAT" ; then cf_found=no test "$cf_preform" = yes && MANPAGE_FORMAT="$MANPAGE_FORMAT formatted" test "$cf_catonly" = yes && MANPAGE_FORMAT="$MANPAGE_FORMAT catonly" case "$cf_name" in ($cf_dir/cat*) cf_found=yes ;; esac test $cf_found=yes && break fi done # only check the first directory in $MANPATH where we find manpages if test -n "$MANPAGE_FORMAT" ; then break fi done # if we did not find the example, just assume it is normal test -z "$MANPAGE_FORMAT" && MANPAGE_FORMAT=normal IFS="$ac_save_ifs" ;; (*) for cf_option in $MANPAGE_FORMAT; do case $cf_option in (gzip|compress|BSDI|normal|formatted|catonly) ;; (*) cf_unknown="$cf_unknown $cf_option" ;; esac done ;; esac AC_MSG_RESULT($MANPAGE_FORMAT) if test -n "$cf_unknown" ; then AC_MSG_WARN(Unexpected manpage-format $cf_unknown) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_MANPAGE_RENAMES version: 10 updated: 2015/08/05 20:44:28 dnl ------------------ dnl The Debian people have their own naming convention for manpages. This dnl option lets us override the name of the file containing renaming, or dnl disable it altogether. AC_DEFUN([CF_MANPAGE_RENAMES], [ AC_MSG_CHECKING(for manpage renaming) AC_ARG_WITH(manpage-renames, [ --with-manpage-renames specify manpage-renaming], [MANPAGE_RENAMES=$withval], [MANPAGE_RENAMES=yes]) case ".$MANPAGE_RENAMES" in (.no) ;; (.|.yes) # Debian 'man' program? if test -f /etc/debian_version ; then MANPAGE_RENAMES=`cd $srcdir && pwd`/man/man_db.renames else MANPAGE_RENAMES=no fi ;; esac if test "$MANPAGE_RENAMES" != no ; then if test -f $srcdir/man/$MANPAGE_RENAMES ; then MANPAGE_RENAMES=`cd $srcdir/man && pwd`/$MANPAGE_RENAMES elif test ! -f $MANPAGE_RENAMES ; then AC_MSG_ERROR(not a filename: $MANPAGE_RENAMES) fi test ! -d man && mkdir man # Construct a sed-script to perform renaming within man-pages if test -n "$MANPAGE_RENAMES" ; then test ! -d man && mkdir man $SHELL $srcdir/man/make_sed.sh $MANPAGE_RENAMES >./edit_man.sed fi fi AC_MSG_RESULT($MANPAGE_RENAMES) AC_SUBST(MANPAGE_RENAMES) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MANPAGE_SYMLINKS version: 6 updated: 2015/04/17 21:13:04 dnl ------------------- dnl Some people expect each tool to make all aliases for manpages in the dnl man-directory. This accommodates the older, less-capable implementations dnl of 'man', and is optional. AC_DEFUN([CF_MANPAGE_SYMLINKS], [ AC_MSG_CHECKING(if manpage aliases will be installed) AC_ARG_WITH(manpage-aliases, [ --with-manpage-aliases specify manpage-aliases using .so], [MANPAGE_ALIASES=$withval], [MANPAGE_ALIASES=yes]) AC_MSG_RESULT($MANPAGE_ALIASES) case "x$LN_S" in (xln*) cf_use_symlinks=yes ;; (*) cf_use_symlinks=no ;; esac MANPAGE_SYMLINKS=no if test "$MANPAGE_ALIASES" = yes ; then AC_MSG_CHECKING(if manpage symlinks should be used) AC_ARG_WITH(manpage-symlinks, [ --with-manpage-symlinks specify manpage-aliases using symlinks], [MANPAGE_SYMLINKS=$withval], [MANPAGE_SYMLINKS=$cf_use_symlinks]) if test "$$cf_use_symlinks" = no; then if test "$MANPAGE_SYMLINKS" = yes ; then AC_MSG_WARN(cannot make symlinks, will use .so files) MANPAGE_SYMLINKS=no fi fi AC_MSG_RESULT($MANPAGE_SYMLINKS) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_MANPAGE_TBL version: 3 updated: 2002/01/19 22:51:32 dnl -------------- dnl This option causes manpages to be run through tbl(1) to generate tables dnl correctly. AC_DEFUN([CF_MANPAGE_TBL], [ AC_MSG_CHECKING(for manpage tbl) AC_ARG_WITH(manpage-tbl, [ --with-manpage-tbl specify manpage processing with tbl], [MANPAGE_TBL=$withval], [MANPAGE_TBL=no]) AC_MSG_RESULT($MANPAGE_TBL) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MAN_PAGES version: 46 updated: 2015/08/05 20:44:28 dnl ------------ dnl Try to determine if the man-pages on the system are compressed, and if dnl so, what format is used. Use this information to construct a script that dnl will install man-pages. AC_DEFUN([CF_MAN_PAGES], [ CF_HELP_MESSAGE(Options to Specify How Manpages are Installed:) CF_MANPAGE_FORMAT CF_MANPAGE_RENAMES CF_MANPAGE_SYMLINKS CF_MANPAGE_TBL if test "$prefix" = "NONE" ; then cf_prefix="$ac_default_prefix" else cf_prefix="$prefix" fi case "$MANPAGE_FORMAT" in (*catonly*) cf_format=yes cf_inboth=no ;; (*formatted*) cf_format=yes cf_inboth=yes ;; (*) cf_format=no cf_inboth=no ;; esac test ! -d man && mkdir man cf_so_strip= cf_compress= case "$MANPAGE_FORMAT" in (*compress*) cf_so_strip="Z" cf_compress=compress ;; (*gzip*) cf_so_strip="gz" cf_compress=gzip ;; esac cf_edit_man=./edit_man.sh cf_man_alias=`pwd`/man_alias.sed cat >$cf_edit_man <>$cf_man_alias <<-CF_EOF2 s,@DATADIR@,\$datadir,g s,@TERMINFO@,\${TERMINFO:="no default value"},g s,@TERMINFO_DIRS@,\${TERMINFO_DIRS:="no default value"},g s,@NCURSES_MAJOR@,\${NCURSES_MAJOR:="no default value"},g s,@NCURSES_MINOR@,\${NCURSES_MINOR:="no default value"},g s,@NCURSES_PATCH@,\${NCURSES_PATCH:="no default value"},g s,@NCURSES_OSPEED@,\${NCURSES_OSPEED:="no default value"},g CF_EOF ifelse($1,,,[ for cf_name in $1 do cf_NAME=`echo "$cf_name" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cf_name=`echo $cf_name|sed "$program_transform_name"` cat >>$cf_edit_man <<-CF_EOF s,@$cf_NAME@,$cf_name,g CF_EOF done ]) cat >>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <\$TMP CF_EOF else cat >>$cf_edit_man <\$TMP CF_EOF fi cat >>$cf_edit_man <\$TMP.out mv \$TMP.out \$TMP fi CF_EOF if test $with_overwrite != yes ; then cat >>$cf_edit_man <\$TMP.out mv \$TMP.out \$TMP CF_EOF fi if test $with_curses_h != yes ; then cat >>$cf_edit_man <\$TMP.out mv \$TMP.out \$TMP CF_EOF fi cat >>$cf_edit_man <\$TMP.out mv \$TMP.out \$TMP fi CF_EOF if test -n "$cf_compress" ; then cat >>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <\$TMP CF_EOF if test -n "$cf_compress" ; then cat >>$cf_edit_man <>$cf_edit_man < #include ], [double x = rand(); printf("result = %g\n", ]ifelse([$2],,sin(x),$2)[)], [cf_cv_need_libm=no], [cf_cv_need_libm=yes])]) if test "$cf_cv_need_libm" = yes then ifelse($1,,[ CF_ADD_LIB(m) ],[$1=-lm]) fi ]) dnl --------------------------------------------------------------------------- dnl CF_MIXEDCASE_FILENAMES version: 7 updated: 2015/04/12 15:39:00 dnl ---------------------- dnl Check if the file-system supports mixed-case filenames. If we're able to dnl create a lowercase name and see it as uppercase, it doesn't support that. AC_DEFUN([CF_MIXEDCASE_FILENAMES], [ AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[ if test "$cross_compiling" = yes ; then case $target_alias in (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*) cf_cv_mixedcase=no ;; (*) cf_cv_mixedcase=yes ;; esac else rm -f conftest CONFTEST echo test >conftest if test -f CONFTEST ; then cf_cv_mixedcase=no else cf_cv_mixedcase=yes fi rm -f conftest CONFTEST fi ]) test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if filesystem supports mixed-case filenames.]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MKSTEMP version: 9 updated: 2012/10/03 04:34:49 dnl ---------- dnl Check for a working mkstemp. This creates two files, checks that they are dnl successfully created and distinct (AmigaOS apparently fails on the last). AC_DEFUN([CF_MKSTEMP],[ AC_CACHE_CHECK(for working mkstemp, cf_cv_func_mkstemp,[ rm -rf conftest* AC_TRY_RUN([ #include #include #include #include #include int main() { char *tmpl = "conftestXXXXXX"; char name[2][80]; int n; int result = 0; int fd; struct stat sb; umask(077); for (n = 0; n < 2; ++n) { strcpy(name[n], tmpl); if ((fd = mkstemp(name[n])) >= 0) { if (!strcmp(name[n], tmpl) || stat(name[n], &sb) != 0 || (sb.st_mode & S_IFMT) != S_IFREG || (sb.st_mode & 077) != 0) { result = 1; } close(fd); } } if (result == 0 && !strcmp(name[0], name[1])) result = 1; ${cf_cv_main_return:-return}(result); } ],[cf_cv_func_mkstemp=yes ],[cf_cv_func_mkstemp=no ],[cf_cv_func_mkstemp=maybe]) ]) if test "x$cf_cv_func_mkstemp" = xmaybe ; then AC_CHECK_FUNC(mkstemp) fi if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then AC_DEFINE(HAVE_MKSTEMP,1,[Define to 1 if mkstemp() is available and working.]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32 dnl ---------- dnl Write a debug message to config.log, along with the line number in the dnl configure script. AC_DEFUN([CF_MSG_LOG],[ echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_ABI_6 version: 3 updated: 2015/06/06 16:10:11 dnl ---------------- dnl Set ncurses' ABI to 6 unless overridden by explicit configure option, and dnl warn about this. AC_DEFUN([CF_NCURSES_ABI_6],[ if test "${with_abi_version+set}" != set; then case $cf_cv_rel_version in (5.*) cf_cv_rel_version=6.0 cf_cv_abi_version=6 AC_MSG_WARN(overriding ABI version to $cf_cv_abi_version) ;; esac fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_WITH_ABI_VERSION version: 2 updated: 2015/12/19 17:51:52 dnl --------------------------- dnl Allow ncurses's ABI to be overridden. Generally this happens when a dnl packager has incremented the ABI past that used in the original package, dnl and wishes to keep doing this. dnl dnl $1 is the package name, if any, to derive a corresponding {package}_ABI dnl symbol. AC_DEFUN([CF_NCURSES_WITH_ABI_VERSION],[ CF_WITH_ABI_VERSION($1) if test "x$cf_cv_abi_version" != "x$with_abi_version" then case $cf_cv_rel_version in (5.*) cf_cv_rel_version=$with_abi_version.0 ;; esac fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_NO_LEAKS_OPTION version: 6 updated: 2015/04/12 15:39:00 dnl ------------------ dnl see CF_WITH_NO_LEAKS AC_DEFUN([CF_NO_LEAKS_OPTION],[ AC_MSG_CHECKING(if you want to use $1 for testing) AC_ARG_WITH($1, [$2], [AC_DEFINE_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")ifelse([$4],,[ $4 ]) : ${with_cflags:=-g} : ${with_no_leaks:=yes} with_$1=yes], [with_$1=]) AC_MSG_RESULT(${with_$1:-no}) case .$with_cflags in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) CF_ADD_CFLAGS([-g]) ;; esac ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_NUMBER_SYNTAX version: 2 updated: 2015/04/17 21:13:04 dnl ---------------- dnl Check if the given variable is a number. If not, report an error. dnl $1 is the variable dnl $2 is the message AC_DEFUN([CF_NUMBER_SYNTAX],[ if test -n "$1" ; then case $1 in ([[0-9]]*) ;; (*) AC_MSG_ERROR($2 is not a number: $1) ;; esac else AC_MSG_ERROR($2 value is empty) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_OBJ_SUBDIR version: 7 updated: 2015/04/17 21:13:04 dnl ------------- dnl Compute the object-directory name from the given model name AC_DEFUN([CF_OBJ_SUBDIR], [ case $1 in (libtool) $2='obj_lo' ;; (normal) $2='objects' ;; (debug) $2='obj_g' ;; (profile) $2='obj_p' ;; (shared) case $cf_cv_system_name in (cygwin|msys) $2='objects' ;; (*) $2='obj_s' ;; esac esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_PATHSEP version: 7 updated: 2015/04/12 15:39:00 dnl ---------- dnl Provide a value for the $PATH and similar separator (or amend the value dnl as provided in autoconf 2.5x). AC_DEFUN([CF_PATHSEP], [ AC_MSG_CHECKING(for PATH separator) case $cf_cv_system_name in (os2*) PATH_SEPARATOR=';' ;; (*) ${PATH_SEPARATOR:=':'} ;; esac ifelse([$1],,,[$1=$PATH_SEPARATOR]) AC_SUBST(PATH_SEPARATOR) AC_MSG_RESULT($PATH_SEPARATOR) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PATH_SYNTAX version: 16 updated: 2015/04/18 08:56:57 dnl -------------- dnl Check the argument to see that it looks like a pathname. Rewrite it if it dnl begins with one of the prefix/exec_prefix variables, and then again if the dnl result begins with 'NONE'. This is necessary to work around autoconf's dnl delayed evaluation of those symbols. AC_DEFUN([CF_PATH_SYNTAX],[ if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".[$]$1" in (.\[$]\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX ;; (.\[$]{*prefix}*|.\[$]{*dir}*) eval $1="[$]$1" case ".[$]$1" in (.NONE/*) $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` ;; (*) ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_PKG_CONFIG version: 10 updated: 2015/04/26 18:06:58 dnl ------------- dnl Check for the package-config program, unless disabled by command-line. AC_DEFUN([CF_PKG_CONFIG], [ AC_MSG_CHECKING(if you want to use pkg-config) AC_ARG_WITH(pkg-config, [ --with-pkg-config{=path} enable/disable use of pkg-config], [cf_pkg_config=$withval], [cf_pkg_config=yes]) AC_MSG_RESULT($cf_pkg_config) case $cf_pkg_config in (no) PKG_CONFIG=none ;; (yes) CF_ACVERSION_CHECK(2.52, [AC_PATH_TOOL(PKG_CONFIG, pkg-config, none)], [AC_PATH_PROG(PKG_CONFIG, pkg-config, none)]) ;; (*) PKG_CONFIG=$withval ;; esac test -z "$PKG_CONFIG" && PKG_CONFIG=none if test "$PKG_CONFIG" != none ; then CF_PATH_SYNTAX(PKG_CONFIG) elif test "x$cf_pkg_config" != xno ; then AC_MSG_WARN(pkg-config is not installed) fi AC_SUBST(PKG_CONFIG) ])dnl dnl --------------------------------------------------------------------------- dnl CF_POSIX_C_SOURCE version: 9 updated: 2015/04/12 15:39:00 dnl ----------------- dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed. dnl dnl POSIX.1-1990 _POSIX_SOURCE dnl POSIX.1-1990 and _POSIX_SOURCE and dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2 dnl Bindings Option dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L dnl X/Open 2000 _POSIX_C_SOURCE=200112L dnl dnl Parameters: dnl $1 is the nominal value for _POSIX_C_SOURCE AC_DEFUN([CF_POSIX_C_SOURCE], [ cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1]) cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE) CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE) AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[ CF_MSG_LOG(if the symbol is already defined go no further) AC_TRY_COMPILE([#include ],[ #ifndef _POSIX_C_SOURCE make an error #endif], [cf_cv_posix_c_source=no], [cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[[12]]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then AC_TRY_COMPILE([#include ],[ #ifdef _POSIX_SOURCE make an error #endif],[], cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE") fi CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE) CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" CF_MSG_LOG(if the second compile does not leave our definition intact error) AC_TRY_COMPILE([#include ],[ #ifndef _POSIX_C_SOURCE make an error #endif],, [cf_cv_posix_c_source=no]) CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" ]) ]) if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" CF_ADD_CFLAGS($cf_cv_posix_c_source) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_PREDEFINE version: 2 updated: 2010/05/26 16:44:57 dnl ------------ dnl Add definitions to CPPFLAGS to ensure they're predefined for all compiles. dnl dnl $1 = symbol to test dnl $2 = value (if any) to use for a predefinition AC_DEFUN([CF_PREDEFINE], [ AC_MSG_CHECKING(if we must define $1) AC_TRY_COMPILE([#include ],[ #ifndef $1 make an error #endif],[cf_result=no],[cf_result=yes]) AC_MSG_RESULT($cf_result) if test "$cf_result" = yes ; then CPPFLAGS="$CPPFLAGS ifelse([$2],,-D$1,[-D$1=$2])" elif test "x$2" != "x" ; then AC_MSG_CHECKING(checking for compatible value versus $2) AC_TRY_COMPILE([#include ],[ #if $1-$2 < 0 make an error #endif],[cf_result=yes],[cf_result=no]) AC_MSG_RESULT($cf_result) if test "$cf_result" = no ; then # perhaps we can override it - try... CPPFLAGS="$CPPFLAGS -D$1=$2" fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_PRG_RULES version: 1 updated: 2006/06/03 11:45:08 dnl ------------ dnl Append definitions and rules for the given programs to the subdirectory dnl Makefiles, and the recursion rule for the top-level Makefile. dnl dnl parameters dnl $1 = script to run dnl $2 = list of subdirectories dnl dnl variables dnl $AWK AC_DEFUN([CF_PRG_RULES], [ for cf_dir in $2 do if test ! -d $srcdir/$cf_dir; then continue elif test -f $srcdir/$cf_dir/programs; then $AWK -f $1 $srcdir/$cf_dir/programs >>$cf_dir/Makefile fi done ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_AR version: 1 updated: 2009/01/01 20:15:22 dnl ---------- dnl Check for archiver "ar". AC_DEFUN([CF_PROG_AR],[ AC_CHECK_TOOL(AR, ar, ar) ]) dnl --------------------------------------------------------------------------- dnl CF_PROG_AWK version: 1 updated: 2006/09/16 11:40:59 dnl ----------- dnl Check for awk, ensure that the check found something. AC_DEFUN([CF_PROG_AWK], [ AC_PROG_AWK test -z "$AWK" && AC_MSG_ERROR(No awk program found) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_CC version: 4 updated: 2014/07/12 18:57:58 dnl ---------- dnl standard check for CC, plus followup sanity checks dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name AC_DEFUN([CF_PROG_CC],[ ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)]) CF_GCC_VERSION CF_ACVERSION_CHECK(2.52, [AC_PROG_CC_STDC], [CF_ANSI_CC_REQD]) CF_CC_ENV_FLAGS ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_CC_C_O version: 3 updated: 2010/08/14 18:25:37 dnl -------------- dnl Analogous to AC_PROG_CC_C_O, but more useful: tests only $CC, ensures that dnl the output file can be renamed, and allows for a shell variable that can dnl be used later. The parameter is either CC or CXX. The result is the dnl cache variable: dnl $cf_cv_prog_CC_c_o dnl $cf_cv_prog_CXX_c_o AC_DEFUN([CF_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])dnl AC_MSG_CHECKING([whether [$]$1 understands -c and -o together]) AC_CACHE_VAL(cf_cv_prog_$1_c_o, [ cat > conftest.$ac_ext < int main() { ${cf_cv_main_return:-return}(0); } CF_EOF # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='[$]$1 -c conftest.$ac_ext -o conftest2.$ac_objext >&AC_FD_CC' if AC_TRY_EVAL(ac_try) && test -f conftest2.$ac_objext && AC_TRY_EVAL(ac_try); then eval cf_cv_prog_$1_c_o=yes else eval cf_cv_prog_$1_c_o=no fi rm -rf conftest* ])dnl if test $cf_cv_prog_$1_c_o = yes; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_EGREP version: 2 updated: 2015/04/18 08:56:57 dnl ------------- dnl AC_PROG_EGREP was introduced in autoconf 2.53. dnl This macro adds a check to ensure the script found something. AC_DEFUN([CF_PROG_EGREP], [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi]) EGREP=$ac_cv_prog_egrep AC_SUBST([EGREP]) test -z "$EGREP" && AC_MSG_ERROR(No egrep program found) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_GNAT version: 3 updated: 2015/04/18 08:56:57 dnl ------------ dnl Check for gnatmake, ensure that it is complete. AC_DEFUN([CF_PROG_GNAT],[ cf_ada_make=gnatmake AC_CHECK_PROG(gnat_exists, $cf_ada_make, yes, no) if test "$ac_cv_prog_gnat_exists" = no; then cf_ada_make= cf_cv_prog_gnat_correct=no else CF_GNAT_VERSION AC_CHECK_PROG(M4_exists, m4, yes, no) if test "$ac_cv_prog_M4_exists" = no; then cf_cv_prog_gnat_correct=no echo Ada95 binding required program m4 not found. Ada95 binding disabled. fi if test "$cf_cv_prog_gnat_correct" = yes; then AC_MSG_CHECKING(if GNAT works) CF_GNAT_TRY_RUN([procedure conftest;], [with Text_IO; with GNAT.OS_Lib; procedure conftest is begin Text_IO.Put ("Hello World"); Text_IO.New_Line; GNAT.OS_Lib.OS_Exit (0); end conftest;],[cf_cv_prog_gnat_correct=yes],[cf_cv_prog_gnat_correct=no]) AC_MSG_RESULT($cf_cv_prog_gnat_correct) fi fi AC_SUBST(cf_ada_make) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_INSTALL version: 7 updated: 2015/04/18 08:56:57 dnl --------------- dnl Force $INSTALL to be an absolute-path. Otherwise, edit_man.sh and the dnl misc/tabset install won't work properly. Usually this happens only when dnl using the fallback mkinstalldirs script AC_DEFUN([CF_PROG_INSTALL], [AC_PROG_INSTALL case $INSTALL in (/*) ;; (*) CF_DIRNAME(cf_dir,$INSTALL) test -z "$cf_dir" && cf_dir=. INSTALL=`cd $cf_dir && pwd`/`echo $INSTALL | sed -e 's%^.*/%%'` ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_LDCONFIG version: 5 updated: 2015/04/18 08:56:57 dnl ---------------- dnl Check for ldconfig, needed to fixup shared libraries that would be built dnl and then used in the install. AC_DEFUN([CF_PROG_LDCONFIG],[ if test "$cross_compiling" = yes ; then LDCONFIG=: else case "$cf_cv_system_name" in (dragonfly*|mirbsd*|freebsd*) test -z "$LDCONFIG" && LDCONFIG="/sbin/ldconfig -R" ;; (*) LDPATH=$PATH:/sbin:/usr/sbin AC_PATH_PROG(LDCONFIG,ldconfig,,$LDPATH) ;; esac fi AC_SUBST(LDCONFIG) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_LINT version: 2 updated: 2009/08/12 04:43:14 dnl ------------ AC_DEFUN([CF_PROG_LINT], [ AC_CHECK_PROGS(LINT, tdlint lint alint splint lclint) AC_SUBST(LINT_OPTS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_LN_S version: 2 updated: 2010/08/14 18:25:37 dnl ------------ dnl Combine checks for "ln -s" and "ln -sf", updating $LN_S to include "-f" dnl option if it is supported. AC_DEFUN([CF_PROG_LN_S],[ AC_PROG_LN_S AC_MSG_CHECKING(if $LN_S -f options work) rm -f conf$$.src conf$$dst echo >conf$$.dst echo first >conf$$.src if $LN_S -f conf$$.src conf$$.dst 2>/dev/null; then cf_prog_ln_sf=yes else cf_prog_ln_sf=no fi rm -f conf$$.dst conf$$src AC_MSG_RESULT($cf_prog_ln_sf) test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f" ])dnl dnl --------------------------------------------------------------------------- dnl CF_REGEX version: 12 updated: 2015/04/18 08:56:57 dnl -------- dnl Attempt to determine if we've got one of the flavors of regular-expression dnl code that we can support. AC_DEFUN([CF_REGEX], [ cf_regex_func=no cf_regex_libs="regex re" case $host_os in (mingw*) cf_regex_libs="gnurx $cf_regex_libs" ;; esac AC_CHECK_FUNC(regcomp,[cf_regex_func=regcomp],[ for cf_regex_lib in $cf_regex_libs do AC_CHECK_LIB($cf_regex_lib,regcomp,[ CF_ADD_LIB($cf_regex_lib) cf_regex_func=regcomp break]) done ]) if test "$cf_regex_func" = no ; then AC_CHECK_FUNC(compile,[cf_regex_func=compile],[ AC_CHECK_LIB(gen,compile,[ CF_ADD_LIB(gen) cf_regex_func=compile])]) fi if test "$cf_regex_func" = no ; then AC_MSG_WARN(cannot find regular expression library) fi AC_CACHE_CHECK(for regular-expression headers,cf_cv_regex_hdrs,[ cf_cv_regex_hdrs=no case $cf_regex_func in (compile) for cf_regex_hdr in regexp.h regexpr.h do AC_TRY_LINK([#include <$cf_regex_hdr>],[ char *p = compile("", "", "", 0); int x = step("", ""); ],[ cf_cv_regex_hdrs=$cf_regex_hdr break ]) done ;; (*) for cf_regex_hdr in regex.h do AC_TRY_LINK([#include #include <$cf_regex_hdr>],[ regex_t *p; int x = regcomp(p, "", 0); int y = regexec(p, "", 0, 0, 0); regfree(p); ],[ cf_cv_regex_hdrs=$cf_regex_hdr break ]) done ;; esac ]) case $cf_cv_regex_hdrs in (no) AC_MSG_WARN(no regular expression header found) ;; (regex.h) AC_DEFINE(HAVE_REGEX_H_FUNCS,1,[Define to 1 to include regex.h for regular expressions]) ;; (regexp.h) AC_DEFINE(HAVE_REGEXP_H_FUNCS,1,[Define to 1 to include regexp.h for regular expressions]) ;; (regexpr.h) AC_DEFINE(HAVE_REGEXPR_H_FUNCS,1,[Define to 1 to include regexpr.h for regular expressions]) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50 dnl ---------------- dnl Remove all -U and -D options that refer to the given symbol from a list dnl of C compiler options. This works around the problem that not all dnl compilers process -U and -D options from left-to-right, so a -U option dnl cannot be used to cancel the effect of a preceding -D option. dnl dnl $1 = target (which could be the same as the source variable) dnl $2 = source (including '$') dnl $3 = symbol to remove define([CF_REMOVE_DEFINE], [ $1=`echo "$2" | \ sed -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[[ ]]/ /g' \ -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'` ])dnl dnl --------------------------------------------------------------------------- dnl CF_REMOVE_LIB version: 1 updated: 2007/02/17 14:11:52 dnl ------------- dnl Remove the given library from the symbol dnl dnl $1 = target (which could be the same as the source variable) dnl $2 = source (including '$') dnl $3 = library to remove define([CF_REMOVE_LIB], [ # remove $3 library from $2 $1=`echo "$2" | sed -e 's/-l$3[[ ]]//g' -e 's/-l$3[$]//'` ])dnl dnl --------------------------------------------------------------------------- dnl CF_RPATH_HACK version: 11 updated: 2013/09/01 13:02:00 dnl ------------- AC_DEFUN([CF_RPATH_HACK], [ AC_REQUIRE([CF_LD_RPATH_OPT]) AC_MSG_CHECKING(for updated LDFLAGS) if test -n "$LD_RPATH_OPT" ; then AC_MSG_RESULT(maybe) AC_CHECK_PROGS(cf_ldd_prog,ldd,no) cf_rpath_list="/usr/lib /lib" if test "$cf_ldd_prog" != no then cf_rpath_oops= AC_TRY_LINK([#include ], [printf("Hello");], [cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq` cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort | uniq`]) # If we passed the link-test, but get a "not found" on a given library, # this could be due to inept reconfiguration of gcc to make it only # partly honor /usr/local/lib (or whatever). Sometimes this behavior # is intentional, e.g., installing gcc in /usr/bin and suppressing the # /usr/local libraries. if test -n "$cf_rpath_oops" then for cf_rpath_src in $cf_rpath_oops do for cf_rpath_dir in \ /usr/local \ /usr/pkg \ /opt/sfw do if test -f $cf_rpath_dir/lib/$cf_rpath_src then CF_VERBOSE(...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src) LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib" break fi done done fi fi CF_VERBOSE(...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS) CF_RPATH_HACK_2(LDFLAGS) CF_RPATH_HACK_2(LIBS) CF_VERBOSE(...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(EXTRA_LDFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_RPATH_HACK_2 version: 7 updated: 2015/04/12 15:39:00 dnl --------------- dnl Do one set of substitutions for CF_RPATH_HACK, adding an rpath option to dnl EXTRA_LDFLAGS for each -L option found. dnl dnl $cf_rpath_list contains a list of directories to ignore. dnl dnl $1 = variable name to update. The LDFLAGS variable should be the only one, dnl but LIBS often has misplaced -L options. AC_DEFUN([CF_RPATH_HACK_2], [ CF_VERBOSE(...checking $1 [$]$1) cf_rpath_dst= for cf_rpath_src in [$]$1 do case $cf_rpath_src in (-L*) # check if this refers to a directory which we will ignore cf_rpath_skip=no if test -n "$cf_rpath_list" then for cf_rpath_item in $cf_rpath_list do if test "x$cf_rpath_src" = "x-L$cf_rpath_item" then cf_rpath_skip=yes break fi done fi if test "$cf_rpath_skip" = no then # transform the option if test "$LD_RPATH_OPT" = "-R " ; then cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` else cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` fi # if we have not already added this, add it now cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" then CF_VERBOSE(...Filter $cf_rpath_src ->$cf_rpath_tmp) EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" fi fi ;; esac cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" done $1=$cf_rpath_dst CF_VERBOSE(...checked $1 [$]$1) AC_SUBST(EXTRA_LDFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_SHARED_OPTS version: 89 updated: 2015/08/15 18:38:59 dnl -------------- dnl -------------- dnl Attempt to determine the appropriate CC/LD options for creating a shared dnl library. dnl dnl Notes: dnl a) ${LOCAL_LDFLAGS} is used to link executables that will run within dnl the build-tree, i.e., by making use of the libraries that are compiled in dnl $rel_builddir/lib We avoid compiling-in a $rel_builddir/lib path for the dnl shared library since that can lead to unexpected results at runtime. dnl b) ${LOCAL_LDFLAGS2} has the same intention but assumes that the shared dnl libraries are compiled in ../../lib dnl dnl The variable 'cf_cv_do_symlinks' is used to control whether we configure dnl to install symbolic links to the rel/abi versions of shared libraries. dnl dnl The variable 'cf_cv_shlib_version' controls whether we use the rel or abi dnl version when making symbolic links. dnl dnl The variable 'cf_cv_shlib_version_infix' controls whether shared library dnl version numbers are infix (ex: libncurses..dylib) or postfix dnl (ex: libncurses.so.). dnl dnl Some loaders leave 'so_locations' lying around. It's nice to clean up. AC_DEFUN([CF_SHARED_OPTS], [ AC_REQUIRE([CF_LD_RPATH_OPT]) RM_SHARED_OPTS= LOCAL_LDFLAGS= LOCAL_LDFLAGS2= LD_SHARED_OPTS= INSTALL_LIB="-m 644" : ${rel_builddir:=.} shlibdir=$libdir AC_SUBST(shlibdir) MAKE_DLLS="#" AC_SUBST(MAKE_DLLS) cf_cv_do_symlinks=no cf_ld_rpath_opt= test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT" AC_MSG_CHECKING(if release/abi version should be used for shared libs) AC_ARG_WITH(shlib-version, [ --with-shlib-version=X Specify rel or abi version for shared libs], [test -z "$withval" && withval=auto case $withval in (yes) cf_cv_shlib_version=auto ;; (rel|abi|auto) cf_cv_shlib_version=$withval ;; (*) AC_MSG_RESULT($withval) AC_MSG_ERROR([option value must be one of: rel, abi, or auto]) ;; esac ],[cf_cv_shlib_version=auto]) AC_MSG_RESULT($cf_cv_shlib_version) cf_cv_rm_so_locs=no cf_try_cflags= # Some less-capable ports of gcc support only -fpic CC_SHARED_OPTS= if test "$GCC" = yes then AC_MSG_CHECKING(which $CC option to use) cf_save_CFLAGS="$CFLAGS" for CC_SHARED_OPTS in -fPIC -fpic '' do CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS" AC_TRY_COMPILE([#include ],[int x = 1],[break],[]) done AC_MSG_RESULT($CC_SHARED_OPTS) CFLAGS="$cf_save_CFLAGS" fi cf_cv_shlib_version_infix=no case $cf_cv_system_name in (aix4.[3-9]*|aix[[5-7]]*) if test "$GCC" = yes; then CC_SHARED_OPTS='-Wl,-brtl' MK_SHARED_LIB='${CC} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@' else CC_SHARED_OPTS='-brtl' # as well as '-qpic=large -G' or perhaps "-bM:SRE -bnoentry -bexpall" MK_SHARED_LIB='${CC} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o [$]@' fi ;; (beos*) MK_SHARED_LIB='${CC} ${CFLAGS} -o $[@] -Xlinker -soname=`basename $[@]` -nostart -e 0' ;; (cygwin*) CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cf_cv_shlib_version=cygdll cf_cv_shlib_version_infix=cygdll shlibdir=$bindir MAKE_DLLS= cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\[$]1 IMPORT_LIB=\`echo "\[$]1" | sed -e 's/cyg/lib/' -e 's/[[0-9]]*\.dll[$]/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \[$]SHARED_LIB ** IMPORT_LIB \[$]IMPORT_LIB EOF exec \[$]* -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (msys*) CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cf_cv_shlib_version=msysdll cf_cv_shlib_version_infix=msysdll shlibdir=$bindir MAKE_DLLS= cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\[$]1 IMPORT_LIB=\`echo "\[$]1" | sed -e 's/msys-/lib/' -e 's/[[0-9]]*\.dll[$]/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \[$]SHARED_LIB ** IMPORT_LIB \[$]IMPORT_LIB EOF exec \[$]* -shared -Wl,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (darwin*) cf_try_cflags="no-cpp-precomp" CC_SHARED_OPTS="-dynamic" MK_SHARED_LIB='${CC} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $[@]` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi cf_cv_shlib_version_infix=yes AC_CACHE_CHECK([if ld -search_paths_first works], cf_cv_ldflags_search_paths_first, [ cf_save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], cf_cv_ldflags_search_paths_first=yes, cf_cv_ldflags_search_paths_first=no) LDFLAGS=$cf_save_LDFLAGS]) if test $cf_cv_ldflags_search_paths_first = yes; then LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi ;; (hpux[[7-8]]*) # HP-UX 8.07 ld lacks "+b" option used for libdir search-list if test "$GCC" != yes; then CC_SHARED_OPTS='+Z' fi MK_SHARED_LIB='${LD} -b -o $[@]' INSTALL_LIB="-m 555" ;; (hpux*) # (tested with gcc 2.7.2 -- I don't have c89) if test "$GCC" = yes; then LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}' else CC_SHARED_OPTS='+Z' LD_SHARED_OPTS='-Wl,+b,${libdir}' fi MK_SHARED_LIB='${LD} +b ${libdir} -b -o $[@]' # HP-UX shared libraries must be executable, and should be # readonly to exploit a quirk in the memory manager. INSTALL_LIB="-m 555" ;; (interix*) test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_shared_soname='`basename $@`' fi CC_SHARED_OPTS= MK_SHARED_LIB='${CC} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $@' ;; (irix*) if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi # tested with IRIX 5.2 and 'cc'. if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' MK_SHARED_LIB='${CC} -shared -rdata_shared -soname `basename $[@]` -o $[@]' else MK_SHARED_LIB='${CC} -shared -Wl,-soname,`basename $[@]` -o $[@]' fi cf_cv_rm_so_locs=yes ;; (linux*|gnu*|k*bsd*-gnu) if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; (mingw*) cf_cv_shlib_version=mingw cf_cv_shlib_version_infix=mingw shlibdir=$bindir MAKE_DLLS= if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-Wl,--enable-auto-import" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS" fi CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh [$]@ [$]{CC} [$]{CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\[$]1 IMPORT_LIB=\`echo "\[$]1" | sed -e 's/[[0-9]]*\.dll[$]/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \[$]SHARED_LIB ** IMPORT_LIB \[$]IMPORT_LIB EOF exec \[$]* -shared -Wl,--enable-auto-import,--out-implib=\[$]{IMPORT_LIB} -Wl,--export-all-symbols -o \[$]{SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (openbsd[[2-9]].*|mirbsd*) if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; (nto-qnx*|openbsd*|freebsd[[12]].*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" MK_SHARED_LIB='${LD} -Bshareable -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; (dragonfly*|freebsd*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS" EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]' ;; (netbsd*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" if test "$cf_cv_shlib_version" = auto; then if test -f /usr/libexec/ld.elf_so; then cf_cv_shlib_version=abi else cf_cv_shlib_version=rel fi fi CF_SHARED_SONAME MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $[@]' else MK_SHARED_LIB='${CC} -Wl,-shared -Wl,-Bshareable -o $[@]' fi ;; (osf*|mls+*) # tested with OSF/1 V3.2 and 'cc' # tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't # link with shared libs). MK_SHARED_LIB='${LD} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $[@]`' case $host_os in (osf4*) MK_SHARED_LIB="${MK_SHARED_LIB} -msym" ;; esac MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $[@]' if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi cf_cv_rm_so_locs=yes ;; (sco3.2v5*) # also uw2* and UW7: hops 13-Apr-98 # tested with osr5.0.5 if test "$GCC" != yes; then CC_SHARED_OPTS='-belf -KPIC' fi MK_SHARED_LIB='${LD} -dy -G -h `basename $[@] .${REL_VERSION}`.${ABI_VERSION} -o [$]@' if test "$cf_cv_enable_rpath" = yes ; then # only way is to set LD_RUN_PATH but no switch for it RUN_PATH=$libdir fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel LINK_PROGS='LD_RUN_PATH=${libdir}' LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib' ;; (sunos4*) # tested with SunOS 4.1.1 and gcc 2.7.0 if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='${LD} -assert pure-text -o $[@]' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; (solaris2*) # tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2 # tested with SunOS 5.10 (solaris 10) and gcc 3.4.3 if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS" fi CF_SHARED_SONAME if test "$GCC" != yes; then cf_save_CFLAGS="$CFLAGS" for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O do CFLAGS="$cf_shared_opts $cf_save_CFLAGS" AC_TRY_COMPILE([#include ],[printf("Hello\n");],[break]) done CFLAGS="$cf_save_CFLAGS" CC_SHARED_OPTS=$cf_shared_opts MK_SHARED_LIB='${CC} -dy -G -h '$cf_cv_shared_soname' -o $[@]' else MK_SHARED_LIB='${CC} -shared -dy -G -h '$cf_cv_shared_soname' -o $[@]' fi ;; (sysv5uw7*|unix_sv*) # tested with UnixWare 7.1.0 (gcc 2.95.2 and cc) if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='${LD} -d y -G -o [$]@' ;; (*) CC_SHARED_OPTS='unknown' MK_SHARED_LIB='echo unknown' ;; esac # This works if the last tokens in $MK_SHARED_LIB are the -o target. case "$cf_cv_shlib_version" in (rel|abi) case "$MK_SHARED_LIB" in (*'-o $[@]') test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes ;; (*) AC_MSG_WARN(ignored --with-shlib-version) ;; esac ;; esac if test -n "$cf_try_cflags" then cat > conftest.$ac_ext < int main(int argc, char *argv[[]]) { printf("hello\n"); return (argv[[argc-1]] == 0) ; } EOF cf_save_CFLAGS="$CFLAGS" for cf_opt in $cf_try_cflags do CFLAGS="$cf_save_CFLAGS -$cf_opt" AC_MSG_CHECKING(if CFLAGS option -$cf_opt works) if AC_TRY_EVAL(ac_compile); then AC_MSG_RESULT(yes) cf_save_CFLAGS="$CFLAGS" else AC_MSG_RESULT(no) fi done CFLAGS="$cf_save_CFLAGS" fi # RPATH_LIST is a colon-separated list of directories test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}" test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}" test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations" CF_VERBOSE(CC_SHARED_OPTS: $CC_SHARED_OPTS) CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB) AC_SUBST(CC_SHARED_OPTS) AC_SUBST(LD_RPATH_OPT) AC_SUBST(LD_SHARED_OPTS) AC_SUBST(MK_SHARED_LIB) AC_SUBST(RM_SHARED_OPTS) AC_SUBST(LINK_PROGS) AC_SUBST(LINK_TESTS) AC_SUBST(EXTRA_LDFLAGS) AC_SUBST(LOCAL_LDFLAGS) AC_SUBST(LOCAL_LDFLAGS2) AC_SUBST(INSTALL_LIB) AC_SUBST(RPATH_LIST) ])dnl dnl --------------------------------------------------------------------------- dnl CF_SHARED_SONAME version: 3 updated: 2008/09/08 18:34:43 dnl ---------------- dnl utility macro for CF_SHARED_OPTS, constructs "$cf_cv_shared_soname" for dnl substitution into MK_SHARED_LIB string for the "-soname" (or similar) dnl option. dnl dnl $1 is the default that should be used for "$cf_cv_shlib_version". dnl If missing, use "rel". define([CF_SHARED_SONAME], [ test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=ifelse($1,,rel,$1) if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $[@] .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $[@]`' fi ]) dnl --------------------------------------------------------------------------- dnl CF_SIGWINCH version: 1 updated: 2006/04/02 16:41:09 dnl ----------- dnl Use this macro after CF_XOPEN_SOURCE, but do not require it (not all dnl programs need this test). dnl dnl This is really a MacOS X 10.4.3 workaround. Defining _POSIX_C_SOURCE dnl forces SIGWINCH to be undefined (breaks xterm, ncurses). Oddly, the struct dnl winsize declaration is left alone - we may revisit this if Apple choose to dnl break that part of the interface as well. AC_DEFUN([CF_SIGWINCH], [ AC_CACHE_CHECK(if SIGWINCH is defined,cf_cv_define_sigwinch,[ AC_TRY_COMPILE([ #include #include ],[int x = SIGWINCH], [cf_cv_define_sigwinch=yes], [AC_TRY_COMPILE([ #undef _XOPEN_SOURCE #undef _POSIX_SOURCE #undef _POSIX_C_SOURCE #include #include ],[int x = SIGWINCH], [cf_cv_define_sigwinch=maybe], [cf_cv_define_sigwinch=no]) ]) ]) if test "$cf_cv_define_sigwinch" = maybe ; then AC_CACHE_CHECK(for actual SIGWINCH definition,cf_cv_fixup_sigwinch,[ cf_cv_fixup_sigwinch=unknown cf_sigwinch=32 while test $cf_sigwinch != 1 do AC_TRY_COMPILE([ #undef _XOPEN_SOURCE #undef _POSIX_SOURCE #undef _POSIX_C_SOURCE #include #include ],[ #if SIGWINCH != $cf_sigwinch make an error #endif int x = SIGWINCH], [cf_cv_fixup_sigwinch=$cf_sigwinch break]) cf_sigwinch=`expr $cf_sigwinch - 1` done ]) if test "$cf_cv_fixup_sigwinch" != unknown ; then CPPFLAGS="$CPPFLAGS -DSIGWINCH=$cf_cv_fixup_sigwinch" fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_SIG_ATOMIC_T version: 3 updated: 2012/10/04 20:12:20 dnl --------------- dnl signal handler, but there are some gcc depedencies in that recommendation. dnl Try anyway. AC_DEFUN([CF_SIG_ATOMIC_T], [ AC_MSG_CHECKING(for signal global datatype) AC_CACHE_VAL(cf_cv_sig_atomic_t,[ for cf_type in \ "volatile sig_atomic_t" \ "sig_atomic_t" \ "int" do AC_TRY_COMPILE([ #include #include #include extern $cf_type x; $cf_type x; static void handler(int sig) { x = 5; }], [signal(SIGINT, handler); x = 1], [cf_cv_sig_atomic_t=$cf_type], [cf_cv_sig_atomic_t=no]) test "$cf_cv_sig_atomic_t" != no && break done ]) AC_MSG_RESULT($cf_cv_sig_atomic_t) test "$cf_cv_sig_atomic_t" != no && AC_DEFINE_UNQUOTED(SIG_ATOMIC_T, $cf_cv_sig_atomic_t,[Define to signal global datatype]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_SIZECHANGE version: 11 updated: 2015/04/18 08:56:57 dnl ------------- dnl Check for definitions & structures needed for window size-changing dnl FIXME: check that this works with "snake" (HP-UX 10.x) AC_DEFUN([CF_SIZECHANGE], [ AC_REQUIRE([CF_STRUCT_TERMIOS]) AC_CACHE_CHECK(declaration of size-change, cf_cv_sizechange,[ cf_cv_sizechange=unknown cf_save_CPPFLAGS="$CPPFLAGS" for cf_opts in "" "NEED_PTEM_H" do CPPFLAGS="$cf_save_CPPFLAGS" test -n "$cf_opts" && CPPFLAGS="$CPPFLAGS -D$cf_opts" AC_TRY_COMPILE([#include #ifdef HAVE_TERMIOS_H #include #else #ifdef HAVE_TERMIO_H #include #endif #endif #ifdef NEED_PTEM_H /* This is a workaround for SCO: they neglected to define struct winsize in * termios.h -- it's only in termio.h and ptem.h */ #include #include #endif #if !defined(sun) || !defined(HAVE_TERMIOS_H) #include #endif ],[ #ifdef TIOCGSIZE struct ttysize win; /* FIXME: what system is this? */ int y = win.ts_lines; int x = win.ts_cols; #else #ifdef TIOCGWINSZ struct winsize win; int y = win.ws_row; int x = win.ws_col; #else no TIOCGSIZE or TIOCGWINSZ #endif /* TIOCGWINSZ */ #endif /* TIOCGSIZE */ ], [cf_cv_sizechange=yes], [cf_cv_sizechange=no]) CPPFLAGS="$cf_save_CPPFLAGS" if test "$cf_cv_sizechange" = yes ; then echo "size-change succeeded ($cf_opts)" >&AC_FD_CC test -n "$cf_opts" && cf_cv_sizechange="$cf_opts" break fi done ]) if test "$cf_cv_sizechange" != no ; then AC_DEFINE(HAVE_SIZECHANGE,1,[Define to 1 if sizechar declarations are provided]) case $cf_cv_sizechange in (NEED*) AC_DEFINE_UNQUOTED($cf_cv_sizechange ) ;; esac fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_SRC_MODULES version: 29 updated: 2015/04/12 11:42:01 dnl -------------- dnl For each parameter, test if the source-directory exists, and if it contains dnl a 'modules' file. If so, add to the list $cf_cv_src_modules which we'll dnl use in CF_LIB_RULES. dnl dnl This uses the configured value to make the lists SRC_SUBDIRS and dnl SUB_MAKEFILES which are used in the makefile-generation scheme. AC_DEFUN([CF_SRC_MODULES], [ AC_MSG_CHECKING(for src modules) # dependencies and linker-arguments for test-programs TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEPS" TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEP2" if test "$DFT_LWR_MODEL" = "libtool"; then TEST_ARGS="${TEST_DEPS}" TEST_ARG2="${TEST_DEP2}" else TEST_ARGS="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARGS" TEST_ARG2="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARG2" fi PC_MODULES_TO_MAKE="ncurses${USE_ARG_SUFFIX}" cf_cv_src_modules= for cf_dir in $1 do if test -f $srcdir/$cf_dir/modules; then # We may/may not have tack in the distribution, though the # makefile is. if test $cf_dir = tack ; then if test ! -f $srcdir/${cf_dir}/${cf_dir}.h; then continue fi fi if test -z "$cf_cv_src_modules"; then cf_cv_src_modules=$cf_dir else cf_cv_src_modules="$cf_cv_src_modules $cf_dir" fi # Make the ncurses_cfg.h file record the library interface files as # well. These are header files that are the same name as their # directory. Ncurses is the only library that does not follow # that pattern. if test $cf_dir = tack ; then continue elif test -f $srcdir/${cf_dir}/${cf_dir}.h; then CF_UPPER(cf_have_include,$cf_dir) AC_DEFINE_UNQUOTED(HAVE_${cf_have_include}_H) AC_DEFINE_UNQUOTED(HAVE_LIB${cf_have_include}) TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${cf_dir}${DFT_DEP_SUFFIX} $TEST_DEPS" TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${cf_dir}${DFT_DEP_SUFFIX} $TEST_DEP2" if test "$DFT_LWR_MODEL" = "libtool"; then TEST_ARGS="${TEST_DEPS}" TEST_ARG2="${TEST_DEP2}" else TEST_ARGS="-l${cf_dir}${USE_ARG_SUFFIX} $TEST_ARGS" TEST_ARG2="-l${cf_dir}${USE_ARG_SUFFIX} $TEST_ARG2" fi PC_MODULES_TO_MAKE="${PC_MODULES_TO_MAKE} ${cf_dir}${USE_ARG_SUFFIX}" fi fi done AC_MSG_RESULT($cf_cv_src_modules) TEST_ARGS="-L${LIB_DIR} $TEST_ARGS" TEST_ARG2="-L${LIB_2ND} $TEST_ARG2" AC_SUBST(TEST_ARGS) AC_SUBST(TEST_DEPS) AC_SUBST(TEST_ARG2) AC_SUBST(TEST_DEP2) SRC_SUBDIRS= if test "x$cf_with_manpages" != xno ; then SRC_SUBDIRS="$SRC_SUBDIRS man" fi SRC_SUBDIRS="$SRC_SUBDIRS include" for cf_dir in $cf_cv_src_modules do SRC_SUBDIRS="$SRC_SUBDIRS $cf_dir" done if test "x$cf_with_tests" != "xno" ; then SRC_SUBDIRS="$SRC_SUBDIRS test" fi # always make this, to install the ncurses-config script SRC_SUBDIRS="$SRC_SUBDIRS misc" if test "$cf_with_cxx_binding" != no; then PC_MODULES_TO_MAKE="${PC_MODULES_TO_MAKE} ncurses++${USE_ARG_SUFFIX}" SRC_SUBDIRS="$SRC_SUBDIRS c++" fi test "x$with_termlib" != xno && PC_MODULES_TO_MAKE="$PC_MODULES_TO_MAKE $TINFO_ARG_SUFFIX" test "x$with_ticlib" != xno && PC_MODULES_TO_MAKE="$PC_MODULES_TO_MAKE $TICS_ARG_SUFFIX" AC_SUBST(PC_MODULES_TO_MAKE) ADA_SUBDIRS= if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = xyes && test -f $srcdir/Ada95/Makefile.in; then SRC_SUBDIRS="$SRC_SUBDIRS Ada95" ADA_SUBDIRS="gen src" if test "x$cf_with_tests" != "xno" ; then ADA_SUBDIRS="$ADA_SUBDIRS samples" fi fi SUB_MAKEFILES= for cf_dir in $SRC_SUBDIRS do SUB_MAKEFILES="$SUB_MAKEFILES $cf_dir/Makefile" done if test -n "$ADA_SUBDIRS"; then for cf_dir in $ADA_SUBDIRS do SUB_MAKEFILES="$SUB_MAKEFILES Ada95/$cf_dir/Makefile" done AC_SUBST(ADA_SUBDIRS) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_STDCPP_LIBRARY version: 11 updated: 2015/10/17 19:03:33 dnl ----------------- dnl Check for -lstdc++, which is GNU's standard C++ library. dnl If $CXXLIBS is set, add that to the libraries used for test-linking. dnl If -lstdc++ was not already added to $LIBS or $CXXLIBS, and is needed, dnl add it to $CXXLIBS. AC_DEFUN([CF_STDCPP_LIBRARY], [ if test -n "$GXX" ; then cf_save="$LIBS" LIBS="$LIBS $CXXLIBS" AC_MSG_CHECKING(if we already have C++ library) AC_TRY_LINK([ #include ],[ std::cout << "Hello World!" << std::endl;], [cf_have_libstdcpp=yes], [cf_have_libstdcpp=no]) AC_MSG_RESULT($cf_have_libstdcpp) LIBS="$cf_save" if test $cf_have_libstdcpp != yes then case $cf_cv_system_name in (os2*) if test -z "`g++ -dM -E - < /dev/null | grep __KLIBC__`"; then cf_stdcpp_libname=stdcpp else cf_stdcpp_libname=stdc++ fi ;; (*) cf_stdcpp_libname=stdc++ ;; esac AC_CACHE_CHECK(for library $cf_stdcpp_libname,cf_cv_libstdcpp,[ cf_save="$LIBS" LIBS="$LIBS $CXXLIBS" CF_ADD_LIB($cf_stdcpp_libname) AC_TRY_LINK([ #include ],[ std::cout << "Hello World!" << std::endl;], [cf_cv_libstdcpp=yes], [cf_cv_libstdcpp=no]) LIBS="$cf_save" ]) test "$cf_cv_libstdcpp" = yes && { CF_ADD_LIB($cf_stdcpp_libname,CXXLIBS) } fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_STRIP_G_OPT version: 3 updated: 2002/12/21 19:25:52 dnl -------------- dnl Remove "-g" option from the compiler options AC_DEFUN([CF_STRIP_G_OPT], [$1=`echo ${$1} | sed -e 's%-g %%' -e 's%-g$%%'`])dnl dnl --------------------------------------------------------------------------- dnl CF_STRUCT_SIGACTION version: 5 updated: 2012/10/06 17:56:13 dnl ------------------- dnl Check if we need _POSIX_SOURCE defined to use struct sigaction. We'll only dnl do this if we've found the sigaction function. AC_DEFUN([CF_STRUCT_SIGACTION],[ AC_REQUIRE([CF_XOPEN_SOURCE]) if test "$ac_cv_func_sigaction" = yes; then AC_MSG_CHECKING(whether sigaction needs _POSIX_SOURCE) AC_TRY_COMPILE([ #include #include ], [struct sigaction act], [sigact_bad=no], [ AC_TRY_COMPILE([ #define _POSIX_SOURCE #include #include ], [struct sigaction act], [sigact_bad=yes AC_DEFINE(_POSIX_SOURCE,1,[Define to 1 if we must define _POSIX_SOURCE])], [sigact_bad=unknown])]) AC_MSG_RESULT($sigact_bad) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_STRUCT_TERMIOS version: 8 updated: 2015/04/15 19:08:48 dnl ----------------- dnl Some machines require _POSIX_SOURCE to completely define struct termios. AC_DEFUN([CF_STRUCT_TERMIOS],[ AC_REQUIRE([CF_XOPEN_SOURCE]) AC_CHECK_HEADERS( \ termio.h \ termios.h \ unistd.h \ ) if test "$ISC" = yes ; then AC_CHECK_HEADERS( sys/termio.h ) fi if test "$ac_cv_header_termios_h" = yes ; then case "$CFLAGS $CPPFLAGS" in (*-D_POSIX_SOURCE*) termios_bad=dunno ;; (*) termios_bad=maybe ;; esac if test "$termios_bad" = maybe ; then AC_MSG_CHECKING(whether termios.h needs _POSIX_SOURCE) AC_TRY_COMPILE([#include ], [struct termios foo; int x = foo.c_iflag], termios_bad=no, [ AC_TRY_COMPILE([ #define _POSIX_SOURCE #include ], [struct termios foo; int x = foo.c_iflag], termios_bad=unknown, termios_bad=yes AC_DEFINE(_POSIX_SOURCE,1,[Define to 1 if we must define _POSIX_SOURCE])) ]) AC_MSG_RESULT($termios_bad) fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_SUBDIR_PATH version: 7 updated: 2014/12/04 04:33:06 dnl -------------- dnl Construct a search-list for a nonstandard header/lib-file dnl $1 = the variable to return as result dnl $2 = the package name dnl $3 = the subdirectory, e.g., bin, include or lib AC_DEFUN([CF_SUBDIR_PATH], [ $1= CF_ADD_SUBDIR_PATH($1,$2,$3,$prefix,NONE) for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ [$]HOME do CF_ADD_SUBDIR_PATH($1,$2,$3,$cf_subdir_prefix,$prefix) done ])dnl dnl --------------------------------------------------------------------------- dnl CF_SUBST_IF version: 2 updated: 2006/06/17 12:33:03 dnl ----------- dnl Shorthand macro for substituting things that the user may override dnl with an environment variable. dnl dnl $1 = condition to pass to "test" dnl $2 = environment variable dnl $3 = value if the test succeeds dnl $4 = value if the test fails AC_DEFUN([CF_SUBST_IF], [ if test $1 ; then $2=$3 ifelse($4,,,[else $2=$4]) fi AC_SUBST($2) ])dnl dnl --------------------------------------------------------------------------- dnl CF_SUBST_NCURSES_VERSION version: 8 updated: 2006/09/16 11:40:59 dnl ------------------------ dnl Get the version-number for use in shared-library naming, etc. AC_DEFUN([CF_SUBST_NCURSES_VERSION], [ AC_REQUIRE([CF_PROG_EGREP]) NCURSES_MAJOR="`$ac_cv_prog_egrep '^NCURSES_MAJOR[[ ]]*=' $srcdir/dist.mk | sed -e 's/^[[^0-9]]*//'`" NCURSES_MINOR="`$ac_cv_prog_egrep '^NCURSES_MINOR[[ ]]*=' $srcdir/dist.mk | sed -e 's/^[[^0-9]]*//'`" NCURSES_PATCH="`$ac_cv_prog_egrep '^NCURSES_PATCH[[ ]]*=' $srcdir/dist.mk | sed -e 's/^[[^0-9]]*//'`" cf_cv_abi_version=${NCURSES_MAJOR} cf_cv_rel_version=${NCURSES_MAJOR}.${NCURSES_MINOR} dnl Show the computed version, for logging cf_cv_timestamp=`date` AC_MSG_RESULT(Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)) dnl We need these values in the generated headers AC_SUBST(NCURSES_MAJOR) AC_SUBST(NCURSES_MINOR) AC_SUBST(NCURSES_PATCH) dnl We need these values in the generated makefiles AC_SUBST(cf_cv_rel_version) AC_SUBST(cf_cv_abi_version) AC_SUBST(cf_cv_builtin_bool) AC_SUBST(cf_cv_header_stdbool_h) AC_SUBST(cf_cv_type_of_bool)dnl ])dnl dnl --------------------------------------------------------------------------- dnl CF_SYS_TIME_SELECT version: 6 updated: 2015/04/18 08:56:57 dnl ------------------ dnl Check if we can include with ; this breaks on dnl older SCO configurations. AC_DEFUN([CF_SYS_TIME_SELECT], [ AC_MSG_CHECKING(if sys/time.h works with sys/select.h) AC_CACHE_VAL(cf_cv_sys_time_select,[ AC_TRY_COMPILE([ #include #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif ],[],[cf_cv_sys_time_select=yes], [cf_cv_sys_time_select=no]) ]) AC_MSG_RESULT($cf_cv_sys_time_select) test "$cf_cv_sys_time_select" = yes && AC_DEFINE(HAVE_SYS_TIME_SELECT,1,[Define to 1 if we can include with ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_TOP_BUILDDIR version: 2 updated: 2013/07/27 17:38:32 dnl --------------- dnl Define a top_builddir symbol, for applications that need an absolute path. AC_DEFUN([CF_TOP_BUILDDIR], [ top_builddir=ifelse($1,,`pwd`,$1) AC_SUBST(top_builddir) ])dnl dnl --------------------------------------------------------------------------- dnl CF_TRY_XOPEN_SOURCE version: 1 updated: 2011/10/30 17:09:50 dnl ------------------- dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we dnl can define it successfully. AC_DEFUN([CF_TRY_XOPEN_SOURCE],[ AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[ AC_TRY_COMPILE([ #include #include #include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_cv_xopen_source=no], [cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" AC_TRY_COMPILE([ #include #include #include ],[ #ifdef _XOPEN_SOURCE make an error #endif], [cf_cv_xopen_source=no], [cf_cv_xopen_source=$cf_XOPEN_SOURCE]) CPPFLAGS="$cf_save" ]) ]) if test "$cf_cv_xopen_source" != no ; then CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE) CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE) cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" CF_ADD_CFLAGS($cf_temp_xopen_source) fi ]) dnl --------------------------------------------------------------------------- dnl CF_TYPEOF_CHTYPE version: 9 updated: 2012/10/06 17:56:13 dnl ---------------- dnl Determine the type we should use for chtype (and attr_t, which is treated dnl as the same thing). We want around 32 bits, so on most machines want a dnl long, but on newer 64-bit machines, probably want an int. If we're using dnl wide characters, we have to have a type compatible with that, as well. AC_DEFUN([CF_TYPEOF_CHTYPE], [ AC_MSG_CHECKING([for type of chtype]) AC_CACHE_VAL(cf_cv_typeof_chtype,[ AC_TRY_RUN([ #define WANT_BITS 31 #include int main() { FILE *fp = fopen("cf_test.out", "w"); if (fp != 0) { char *result = "long"; if (sizeof(unsigned long) > sizeof(unsigned int)) { int n; unsigned int x, y; for (n = 0; n < WANT_BITS; n++) { x = (1 << n); y = (x >> n); if (y != 1 || x == 0) { x = 0; break; } } /* * If x is nonzero, an int is big enough for the bits * that we want. */ result = (x != 0) ? "int" : "long"; } fputs(result, fp); fclose(fp); } ${cf_cv_main_return:-return}(0); } ], [cf_cv_typeof_chtype=`cat cf_test.out`], [cf_cv_typeof_chtype=long], [cf_cv_typeof_chtype=long]) rm -f cf_test.out ]) AC_MSG_RESULT($cf_cv_typeof_chtype) AC_SUBST(cf_cv_typeof_chtype) AC_DEFINE_UNQUOTED(TYPEOF_CHTYPE,$cf_cv_typeof_chtype,[Define to actual type if needed for chtype]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_TYPE_SIGACTION version: 4 updated: 2012/10/06 17:56:13 dnl ----------------- dnl AC_DEFUN([CF_TYPE_SIGACTION], [ AC_MSG_CHECKING([for type sigaction_t]) AC_CACHE_VAL(cf_cv_type_sigaction,[ AC_TRY_COMPILE([ #include ], [sigaction_t x], [cf_cv_type_sigaction=yes], [cf_cv_type_sigaction=no])]) AC_MSG_RESULT($cf_cv_type_sigaction) test "$cf_cv_type_sigaction" = yes && AC_DEFINE(HAVE_TYPE_SIGACTION,1,[Define to 1 if we have the sigaction_t type]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_UNSIGNED_LITERALS version: 2 updated: 1998/02/07 22:10:16 dnl -------------------- dnl Test if the compiler supports 'U' and 'L' suffixes. Only old compilers dnl won't, but they're still there. AC_DEFUN([CF_UNSIGNED_LITERALS], [ AC_MSG_CHECKING([if unsigned literals are legal]) AC_CACHE_VAL(cf_cv_unsigned_literals,[ AC_TRY_COMPILE([],[long x = 1L + 1UL + 1U + 1], [cf_cv_unsigned_literals=yes], [cf_cv_unsigned_literals=no]) ]) AC_MSG_RESULT($cf_cv_unsigned_literals) ])dnl dnl --------------------------------------------------------------------------- dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59 dnl -------- dnl Make an uppercase version of a variable dnl $1=uppercase($2) AC_DEFUN([CF_UPPER], [ $1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` ])dnl dnl --------------------------------------------------------------------------- dnl CF_UTF8_LIB version: 8 updated: 2012/10/06 08:57:51 dnl ----------- dnl Check for multibyte support, and if not found, utf8 compatibility library AC_DEFUN([CF_UTF8_LIB], [ AC_CACHE_CHECK(for multibyte character support,cf_cv_utf8_lib,[ cf_save_LIBS="$LIBS" AC_TRY_LINK([ #include ],[putwc(0,0);], [cf_cv_utf8_lib=yes], [CF_FIND_LINKAGE([ #include ],[putwc(0,0);],utf8, [cf_cv_utf8_lib=add-on], [cf_cv_utf8_lib=no]) ])]) # HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between # ncurses/ncursesw: if test "$cf_cv_utf8_lib" = "add-on" ; then AC_DEFINE(HAVE_LIBUTF8_H,1,[Define to 1 if we should include libutf8.h]) CF_ADD_INCDIR($cf_cv_header_path_utf8) CF_ADD_LIBDIR($cf_cv_library_path_utf8) CF_ADD_LIBS($cf_cv_library_file_utf8) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_VA_COPY version: 3 updated: 2012/10/06 11:17:15 dnl ---------- dnl check for va_copy, part of stdarg.h dnl Also, workaround for glibc's __va_copy, by checking for both. AC_DEFUN([CF_VA_COPY],[ AC_CACHE_CHECK(for va_copy, cf_cv_have_va_copy,[ AC_TRY_LINK([ #include ],[ static va_list dst; static va_list src; va_copy(dst, src)], cf_cv_have_va_copy=yes, cf_cv_have_va_copy=no)]) test "$cf_cv_have_va_copy" = yes && AC_DEFINE(HAVE_VA_COPY,1,[Define to 1 if we have va_copy]) AC_CACHE_CHECK(for __va_copy, cf_cv_have___va_copy,[ AC_TRY_LINK([ #include ],[ static va_list dst; static va_list src; __va_copy(dst, src)], cf_cv_have___va_copy=yes, cf_cv_have___va_copy=no)]) test "$cf_cv_have___va_copy" = yes && AC_DEFINE(HAVE___VA_COPY,1,[Define to 1 if we have __va_copy]) ]) dnl --------------------------------------------------------------------------- dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12 dnl ---------- dnl Use AC_VERBOSE w/o the warnings AC_DEFUN([CF_VERBOSE], [test -n "$verbose" && echo " $1" 1>&AC_FD_MSG CF_MSG_LOG([$1]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_VERSION_INFO version: 7 updated: 2015/04/17 21:13:04 dnl --------------- dnl Define several useful symbols derived from the VERSION file. A separate dnl file is preferred to embedding the version numbers in various scripts. dnl (automake is a textbook-example of why the latter is a bad idea, but there dnl are others). dnl dnl The file contents are: dnl libtool-version release-version patch-version dnl or dnl release-version dnl where dnl libtool-version (see ?) consists of 3 integers separated by '.' dnl release-version consists of a major version and minor version dnl separated by '.', optionally followed by a patch-version dnl separated by '-'. The minor version need not be an dnl integer (but it is preferred). dnl patch-version is an integer in the form yyyymmdd, so ifdef's and dnl scripts can easily compare versions. dnl dnl If libtool is used, the first form is required, since CF_WITH_LIBTOOL dnl simply extracts the first field using 'cut -f1'. dnl dnl Optional parameters: dnl $1 = internal name for package dnl $2 = external name for package AC_DEFUN([CF_VERSION_INFO], [ if test -f $srcdir/VERSION ; then AC_MSG_CHECKING(for package version) # if there are not enough fields, cut returns the last one... cf_field1=`sed -e '2,$d' $srcdir/VERSION|cut -f1` cf_field2=`sed -e '2,$d' $srcdir/VERSION|cut -f2` cf_field3=`sed -e '2,$d' $srcdir/VERSION|cut -f3` # this is how CF_BUNDLED_INTL uses $VERSION: VERSION="$cf_field1" VERSION_MAJOR=`echo "$cf_field2" | sed -e 's/\..*//'` test -z "$VERSION_MAJOR" && AC_MSG_ERROR(missing major-version) VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[[^.]]*\.//' -e 's/-.*//'` test -z "$VERSION_MINOR" && AC_MSG_ERROR(missing minor-version) AC_MSG_RESULT(${VERSION_MAJOR}.${VERSION_MINOR}) AC_MSG_CHECKING(for package patch date) VERSION_PATCH=`echo "$cf_field3" | sed -e 's/^[[^-]]*-//'` case .$VERSION_PATCH in (.) AC_MSG_ERROR(missing patch-date $VERSION_PATCH) ;; (.[[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]][[0-9]]) ;; (*) AC_MSG_ERROR(illegal patch-date $VERSION_PATCH) ;; esac AC_MSG_RESULT($VERSION_PATCH) else AC_MSG_ERROR(did not find $srcdir/VERSION) fi # show the actual data that we have for versions: CF_VERBOSE(ABI VERSION $VERSION) CF_VERBOSE(VERSION_MAJOR $VERSION_MAJOR) CF_VERBOSE(VERSION_MINOR $VERSION_MINOR) CF_VERBOSE(VERSION_PATCH $VERSION_PATCH) AC_SUBST(VERSION) AC_SUBST(VERSION_MAJOR) AC_SUBST(VERSION_MINOR) AC_SUBST(VERSION_PATCH) dnl if a package name is given, define its corresponding version info. We dnl need the package name to ensure that the defined symbols are unique. ifelse($1,,,[ cf_PACKAGE=$1 PACKAGE=ifelse($2,,$1,$2) AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE",[Define to the package-name]) AC_SUBST(PACKAGE) CF_UPPER(cf_PACKAGE,$cf_PACKAGE) AC_DEFINE_UNQUOTED(${cf_PACKAGE}_VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}") AC_DEFINE_UNQUOTED(${cf_PACKAGE}_PATCHDATE,${VERSION_PATCH}) ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WCHAR_TYPE version: 4 updated: 2012/10/06 16:39:58 dnl ------------- dnl Check if type wide-character type $1 is declared, and if so, which header dnl file is needed. The second parameter is used to set a shell variable when dnl the type is not found. The first parameter sets a shell variable for the dnl opposite sense. AC_DEFUN([CF_WCHAR_TYPE], [ # This is needed on Tru64 5.0 to declare $1 AC_CACHE_CHECK(if we must include wchar.h to declare $1,cf_cv_$1,[ AC_TRY_COMPILE([ #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif], [$1 state], [cf_cv_$1=no], [AC_TRY_COMPILE([ #include #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif], [$1 value], [cf_cv_$1=yes], [cf_cv_$1=unknown])])]) if test "$cf_cv_$1" = yes ; then AC_DEFINE(NEED_WCHAR_H,1,[Define to 1 if we must include wchar.h]) NEED_WCHAR_H=1 fi ifelse([$2],,,[ # if we do not find $1 in either place, use substitution to provide a fallback. if test "$cf_cv_$1" = unknown ; then $2=1 fi ]) ifelse($3,,,[ # if we find $1 in either place, use substitution to provide a fallback. if test "$cf_cv_$1" != unknown ; then $3=1 fi ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WEAK_SYMBOLS version: 1 updated: 2008/08/16 19:18:06 dnl --------------- dnl Check for compiler-support for weak symbols. dnl This works with "recent" gcc. AC_DEFUN([CF_WEAK_SYMBOLS],[ AC_CACHE_CHECK(if $CC supports weak symbols,cf_cv_weak_symbols,[ AC_TRY_COMPILE([ #include ], [ #if defined(__GNUC__) # if defined __USE_ISOC99 # define _cat_pragma(exp) _Pragma(#exp) # define _weak_pragma(exp) _cat_pragma(weak name) # else # define _weak_pragma(exp) # endif # define _declare(name) __extension__ extern __typeof__(name) name # define weak_symbol(name) _weak_pragma(name) _declare(name) __attribute__((weak)) #endif weak_symbol(fopen); ],[cf_cv_weak_symbols=yes],[cf_cv_weak_symbols=no]) ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_ABI_VERSION version: 3 updated: 2015/06/06 16:10:11 dnl ------------------- dnl Allow library's ABI to be overridden. Generally this happens when a dnl packager has incremented the ABI past that used in the original package, dnl and wishes to keep doing this. dnl dnl $1 is the package name, if any, to derive a corresponding {package}_ABI dnl symbol. AC_DEFUN([CF_WITH_ABI_VERSION],[ test -z "$cf_cv_abi_version" && cf_cv_abi_version=0 AC_ARG_WITH(abi-version, [ --with-abi-version=XXX override derived ABI version],[ if test "x$cf_cv_abi_version" != "x$withval" then AC_MSG_WARN(overriding ABI version $cf_cv_abi_version to $withval) case $cf_cv_rel_version in (5.*) cf_cv_rel_version=$withval.0 ;; (6.*) cf_cv_rel_version=$withval.9 # FIXME: should be 10 as of 6.0 release ;; esac fi cf_cv_abi_version=$withval]) CF_NUMBER_SYNTAX($cf_cv_abi_version,ABI version) ifelse($1,,,[ $1_ABI=$cf_cv_abi_version ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_ADA_COMPILER version: 2 updated: 2010/06/26 17:35:58 dnl -------------------- dnl Command-line option to specify the Ada95 compiler. AC_DEFUN([CF_WITH_ADA_COMPILER],[ AC_MSG_CHECKING(for ada-compiler) AC_ARG_WITH(ada-compiler, [ --with-ada-compiler=CMD specify Ada95 compiler command (default gnatmake)], [cf_ada_compiler=$withval], [cf_ada_compiler=gnatmake]) AC_SUBST(cf_ada_compiler) AC_MSG_RESULT($cf_ada_compiler) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_ADA_INCLUDE version: 2 updated: 2010/06/26 17:35:58 dnl ------------------- dnl Command-line option to specify where Ada includes will install. AC_DEFUN([CF_WITH_ADA_INCLUDE],[ AC_MSG_CHECKING(for ada-include) CF_WITH_PATH(ada-include, [ --with-ada-include=DIR Ada includes are in DIR], ADA_INCLUDE, PREFIX/share/ada/adainclude, [$]prefix/share/ada/adainclude) AC_SUBST(ADA_INCLUDE) AC_MSG_RESULT($ADA_INCLUDE) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_ADA_OBJECTS version: 2 updated: 2010/06/26 17:35:58 dnl ------------------- dnl Command-line option to specify where Ada objects will install. AC_DEFUN([CF_WITH_ADA_OBJECTS],[ AC_MSG_CHECKING(for ada-objects) CF_WITH_PATH(ada-objects, [ --with-ada-objects=DIR Ada objects are in DIR], ADA_OBJECTS, PREFIX/lib/ada/adalib, [$]prefix/lib/ada/adalib) AC_SUBST(ADA_OBJECTS) AC_MSG_RESULT($ADA_OBJECTS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_ADA_SHAREDLIB version: 4 updated: 2014/05/31 21:08:37 dnl --------------------- dnl Command-line option to specify if an Ada95 shared-library should be built, dnl and optionally what its soname should be. AC_DEFUN([CF_WITH_ADA_SHAREDLIB],[ AC_MSG_CHECKING(if an Ada95 shared-library should be built) AC_ARG_WITH(ada-sharedlib, [ --with-ada-sharedlib=soname build shared-library (requires GNAT projects)], [with_ada_sharedlib=$withval], [with_ada_sharedlib=no]) AC_MSG_RESULT($with_ada_sharedlib) ADA_SHAREDLIB='lib$(LIB_NAME).so.1' MAKE_ADA_SHAREDLIB="#" if test "x$with_ada_sharedlib" != xno then MAKE_ADA_SHAREDLIB= if test "x$with_ada_sharedlib" != xyes then ADA_SHAREDLIB="$with_ada_sharedlib" fi fi AC_SUBST(ADA_SHAREDLIB) AC_SUBST(MAKE_ADA_SHAREDLIB) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47 dnl ---------------- dnl Configure-option for dbmalloc. The optional parameter is used to override dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests. AC_DEFUN([CF_WITH_DBMALLOC],[ CF_NO_LEAKS_OPTION(dbmalloc, [ --with-dbmalloc test: use Conor Cahill's dbmalloc library], [USE_DBMALLOC]) if test "$with_dbmalloc" = yes ; then AC_CHECK_HEADER(dbmalloc.h, [AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47 dnl --------------- dnl Configure-option for dmalloc. The optional parameter is used to override dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests. AC_DEFUN([CF_WITH_DMALLOC],[ CF_NO_LEAKS_OPTION(dmalloc, [ --with-dmalloc test: use Gray Watson's dmalloc library], [USE_DMALLOC]) if test "$with_dmalloc" = yes ; then AC_CHECK_HEADER(dmalloc.h, [AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_EXPORT_SYMS version: 3 updated: 2014/12/20 19:16:08 dnl ------------------- dnl Use this with libtool to specify the list of symbols that may be exported. dnl The input file contains one symbol per line; comments work with "#". dnl dnl $1 = basename of the ".sym" file (default $PACKAGE) AC_DEFUN([CF_WITH_EXPORT_SYMS], [ AC_MSG_CHECKING(if exported-symbols file should be used) AC_ARG_WITH(export-syms, [ --with-export-syms=XXX limit exported symbols using libtool], [with_export_syms=$withval], [with_export_syms=no]) if test "x$with_export_syms" = xyes then with_export_syms='${top_srcdir}/package/ifelse($1,,${PACKAGE},[$1]).sym' AC_SUBST(PACKAGE) fi AC_MSG_RESULT($with_export_syms) if test "x$with_export_syms" != xno then EXPORT_SYMS="-export-symbols $with_export_syms" AC_SUBST(EXPORT_SYMS) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_GPM version: 8 updated: 2012/10/06 17:56:13 dnl ----------- dnl dnl The option parameter (if neither yes/no) is assumed to be the name of dnl the gpm library, e.g., for dynamic loading. AC_DEFUN([CF_WITH_GPM], [ AC_MSG_CHECKING(if you want to link with the GPM mouse library) AC_ARG_WITH(gpm, [ --with-gpm use Alessandro Rubini's GPM library], [with_gpm=$withval], [with_gpm=maybe]) AC_MSG_RESULT($with_gpm) if test "$with_gpm" != no ; then AC_CHECK_HEADER(gpm.h,[ AC_DEFINE(HAVE_GPM_H,1,[Define to 1 if we have gpm.h header]) if test "$with_gpm" != yes && test "$with_gpm" != maybe ; then CF_VERBOSE(assuming we really have GPM library) AC_DEFINE(HAVE_LIBGPM,1,[Define to 1 if we have the gpm library]) else AC_CHECK_LIB(gpm,Gpm_Open,[:],[ AC_MSG_ERROR(Cannot link with GPM library) fi with_gpm=yes ]) ],[ test "$with_gpm" != maybe && AC_MSG_WARN(Cannot find GPM header) with_gpm=no ]) fi ]) dnl --------------------------------------------------------------------------- dnl CF_WITH_LIBTOOL version: 33 updated: 2015/10/17 19:03:33 dnl --------------- dnl Provide a configure option to incorporate libtool. Define several useful dnl symbols for the makefile rules. dnl dnl The reference to AC_PROG_LIBTOOL does not normally work, since it uses dnl macros from libtool.m4 which is in the aclocal directory of automake. dnl Following is a simple script which turns on the AC_PROG_LIBTOOL macro. dnl But that still does not work properly since the macro is expanded outside dnl the CF_WITH_LIBTOOL macro: dnl dnl #!/bin/sh dnl ACLOCAL=`aclocal --print-ac-dir` dnl if test -z "$ACLOCAL" ; then dnl echo cannot find aclocal directory dnl exit 1 dnl elif test ! -f $ACLOCAL/libtool.m4 ; then dnl echo cannot find libtool.m4 file dnl exit 1 dnl fi dnl dnl LOCAL=aclocal.m4 dnl ORIG=aclocal.m4.orig dnl dnl trap "mv $ORIG $LOCAL" 0 1 2 5 15 dnl rm -f $ORIG dnl mv $LOCAL $ORIG dnl dnl # sed the LIBTOOL= assignment to omit the current directory? dnl sed -e 's/^LIBTOOL=.*/LIBTOOL=${LIBTOOL:-libtool}/' $ACLOCAL/libtool.m4 >>$LOCAL dnl cat $ORIG >>$LOCAL dnl dnl autoconf-257 $* dnl AC_DEFUN([CF_WITH_LIBTOOL], [ AC_REQUIRE([CF_DISABLE_LIBTOOL_VERSION]) ifdef([AC_PROG_LIBTOOL],,[ LIBTOOL= ]) # common library maintenance symbols that are convenient for libtool scripts: LIB_CREATE='${AR} -cr' LIB_OBJECT='${OBJECTS}' LIB_SUFFIX=.a LIB_PREP="$RANLIB" # symbols used to prop libtool up to enable it to determine what it should be # doing: LIB_CLEAN= LIB_COMPILE= LIB_LINK='${CC}' LIB_INSTALL= LIB_UNINSTALL= AC_MSG_CHECKING(if you want to build libraries with libtool) AC_ARG_WITH(libtool, [ --with-libtool generate libraries with libtool], [with_libtool=$withval], [with_libtool=no]) AC_MSG_RESULT($with_libtool) if test "$with_libtool" != "no"; then ifdef([AC_PROG_LIBTOOL],[ # missing_content_AC_PROG_LIBTOOL{{ AC_PROG_LIBTOOL # missing_content_AC_PROG_LIBTOOL}} ],[ if test "$with_libtool" != "yes" ; then CF_PATH_SYNTAX(with_libtool) LIBTOOL=$with_libtool else AC_CHECK_TOOLS(LIBTOOL,[libtool glibtool],none) CF_LIBTOOL_VERSION if test -z "$cf_cv_libtool_version" && test "$LIBTOOL" = libtool then CF_FORGET_TOOL(LIBTOOL) AC_CHECK_TOOLS(LIBTOOL,[glibtool],none) CF_LIBTOOL_VERSION fi fi if test -z "$LIBTOOL" ; then AC_MSG_ERROR(Cannot find libtool) fi ])dnl LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${DESTDIR}${libdir} ${LIBTOOL_VERSION} `cut -f1 ${top_srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o' LIB_OBJECT='${OBJECTS:.o=.lo}' LIB_SUFFIX=.la LIB_CLEAN='${LIBTOOL} --mode=clean' LIB_COMPILE='${LIBTOOL} --mode=compile' LIB_LINK='${LIBTOOL} --mode=link ${CC} ${LIBTOOL_OPTS}' LIB_INSTALL='${LIBTOOL} --mode=install' LIB_UNINSTALL='${LIBTOOL} --mode=uninstall' LIB_PREP=: CF_CHECK_LIBTOOL_VERSION # special hack to add -no-undefined (which libtool should do for itself) LT_UNDEF= case "$cf_cv_system_name" in (cygwin*|msys*|mingw32*|os2*|uwin*|aix[[4-7]]) LT_UNDEF=-no-undefined ;; esac AC_SUBST([LT_UNDEF]) # special hack to add --tag option for C++ compiler case $cf_cv_libtool_version in (1.[[5-9]]*|[[2-9]].[[0-9.a-z]]*) LIBTOOL_CXX="$LIBTOOL --tag=CXX" LIBTOOL="$LIBTOOL --tag=CC" ;; (*) LIBTOOL_CXX="$LIBTOOL" ;; esac else LIBTOOL="" LIBTOOL_CXX="" fi test -z "$LIBTOOL" && ECHO_LT= AC_SUBST(LIBTOOL) AC_SUBST(LIBTOOL_CXX) AC_SUBST(LIBTOOL_OPTS) AC_SUBST(LIB_CREATE) AC_SUBST(LIB_OBJECT) AC_SUBST(LIB_SUFFIX) AC_SUBST(LIB_PREP) AC_SUBST(LIB_CLEAN) AC_SUBST(LIB_COMPILE) AC_SUBST(LIB_LINK) AC_SUBST(LIB_INSTALL) AC_SUBST(LIB_UNINSTALL) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_LIBTOOL_OPTS version: 4 updated: 2015/04/17 21:13:04 dnl -------------------- dnl Allow user to pass additional libtool options into the library creation dnl and link steps. The main use for this is to do something like dnl ./configure --with-libtool-opts=-static dnl to get the same behavior as automake-flavored dnl ./configure --enable-static AC_DEFUN([CF_WITH_LIBTOOL_OPTS],[ AC_MSG_CHECKING(for additional libtool options) AC_ARG_WITH(libtool-opts, [ --with-libtool-opts=XXX specify additional libtool options], [with_libtool_opts=$withval], [with_libtool_opts=no]) AC_MSG_RESULT($with_libtool_opts) case .$with_libtool_opts in (.yes|.no|.) ;; (*) LIBTOOL_OPTS="$LIBTOOL_OPTS $with_libtool_opts" ;; esac AC_SUBST(LIBTOOL_OPTS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_LIB_PREFIX version: 1 updated: 2012/01/21 19:28:10 dnl ------------------ dnl Allow the library-prefix to be overridden. OS/2 EMX originally had no dnl "lib" prefix, e.g., because it used the dll naming convention. dnl dnl $1 = variable to set AC_DEFUN([CF_WITH_LIB_PREFIX], [ AC_MSG_CHECKING(if you want to have a library-prefix) AC_ARG_WITH(lib-prefix, [ --with-lib-prefix override library-prefix], [with_lib_prefix=$withval], [with_lib_prefix=auto]) AC_MSG_RESULT($with_lib_prefix) if test $with_lib_prefix = auto then CF_LIB_PREFIX($1) elif test $with_lib_prefix = no then LIB_PREFIX= else LIB_PREFIX=$with_lib_prefix fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_PATH version: 11 updated: 2012/09/29 15:04:19 dnl ------------ dnl Wrapper for AC_ARG_WITH to ensure that user supplies a pathname, not just dnl defaulting to yes/no. dnl dnl $1 = option name dnl $2 = help-text dnl $3 = environment variable to set dnl $4 = default value, shown in the help-message, must be a constant dnl $5 = default value, if it's an expression & cannot be in the help-message dnl AC_DEFUN([CF_WITH_PATH], [AC_ARG_WITH($1,[$2 ](default: ifelse([$4],,empty,[$4])),, ifelse([$4],,[withval="${$3}"],[withval="${$3:-ifelse([$5],,[$4],[$5])}"]))dnl if ifelse([$5],,true,[test -n "$5"]) ; then CF_PATH_SYNTAX(withval) fi eval $3="$withval" AC_SUBST($3)dnl ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_PATHLIST version: 10 updated: 2015/04/17 21:13:04 dnl ---------------- dnl Process an option specifying a list of colon-separated paths. dnl dnl $1 = option name dnl $2 = help-text dnl $3 = environment variable to set dnl $4 = default value, shown in the help-message, must be a constant dnl $5 = default value, if it's an expression & cannot be in the help-message dnl $6 = flag to tell if we want to define or substitute dnl AC_DEFUN([CF_WITH_PATHLIST],[ AC_REQUIRE([CF_PATHSEP]) AC_ARG_WITH($1,[$2 ](default: ifelse($4,,empty,$4)),, ifelse($4,,[withval=${$3}],[withval=${$3:-ifelse($5,,$4,$5)}]))dnl IFS="${IFS:- }"; ac_save_ifs="$IFS"; IFS="${PATH_SEPARATOR}" cf_dst_path= for cf_src_path in $withval do CF_PATH_SYNTAX(cf_src_path) test -n "$cf_dst_path" && cf_dst_path="${cf_dst_path}$PATH_SEPARATOR" cf_dst_path="${cf_dst_path}${cf_src_path}" done IFS="$ac_save_ifs" ifelse($6,define,[ # Strip single quotes from the value, e.g., when it was supplied as a literal # for $4 or $5. case $cf_dst_path in (\'*) cf_dst_path=`echo $cf_dst_path |sed -e s/\'// -e s/\'\$//` ;; esac cf_dst_path=`echo "$cf_dst_path" | sed -e 's/\\\\/\\\\\\\\/g'` ]) # This may use the prefix/exec_prefix symbols which will only yield "NONE" # so we have to check/work around. We do prefer the result of "eval"... eval cf_dst_eval="$cf_dst_path" case "x$cf_dst_eval" in (xNONE*) $3=$cf_dst_path ;; (*) $3="$cf_dst_eval" ;; esac AC_SUBST($3)dnl ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_PKG_CONFIG_LIBDIR version: 10 updated: 2015/08/22 17:10:56 dnl ------------------------- dnl Allow the choice of the pkg-config library directory to be overridden. AC_DEFUN([CF_WITH_PKG_CONFIG_LIBDIR],[ case $PKG_CONFIG in (no|none|yes) AC_MSG_CHECKING(for pkg-config library directory) ;; (*) AC_MSG_CHECKING(for $PKG_CONFIG library directory) ;; esac PKG_CONFIG_LIBDIR=no AC_ARG_WITH(pkg-config-libdir, [ --with-pkg-config-libdir=XXX use given directory for installing pc-files], [PKG_CONFIG_LIBDIR=$withval], [test "x$PKG_CONFIG" != xnone && PKG_CONFIG_LIBDIR=yes]) case x$PKG_CONFIG_LIBDIR in (x/*) ;; (xyes) # Look for the library directory using the same prefix as the executable if test "x$PKG_CONFIG" = xnone then cf_path=$prefix else cf_path=`echo "$PKG_CONFIG" | sed -e 's,/[[^/]]*/[[^/]]*$,,'` fi # If you don't like using the default architecture, you have to specify the # intended library directory and corresponding compiler/linker options. # # This case allows for Debian's 2014-flavor of multiarch, along with the # most common variations before that point. Some other variants spell the # directory differently, e.g., "pkg-config", and put it in unusual places. # pkg-config has always been poorly standardized, which is ironic... case x`(arch) 2>/dev/null` in (*64) cf_search_path="\ $cf_path/lib/*64-linux-gnu \ $cf_path/share \ $cf_path/lib64 \ $cf_path/lib32 \ $cf_path/lib" ;; (*) cf_search_path="\ $cf_path/lib/*-linux-gnu \ $cf_path/share \ $cf_path/lib32 \ $cf_path/lib \ $cf_path/libdata" ;; esac CF_VERBOSE(list...) for cf_config in $cf_search_path do CF_VERBOSE(checking $cf_config/pkgconfig) if test -d $cf_config/pkgconfig then PKG_CONFIG_LIBDIR=$cf_config/pkgconfig AC_MSG_CHECKING(done) break fi done ;; (*) ;; esac if test "x$PKG_CONFIG_LIBDIR" != xno ; then AC_MSG_RESULT($PKG_CONFIG_LIBDIR) fi AC_SUBST(PKG_CONFIG_LIBDIR) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_PTHREAD version: 7 updated: 2015/04/18 08:56:57 dnl --------------- dnl Check for POSIX thread library. AC_DEFUN([CF_WITH_PTHREAD], [ AC_MSG_CHECKING(if you want to link with the pthread library) AC_ARG_WITH(pthread, [ --with-pthread use POSIX thread library], [with_pthread=$withval], [with_pthread=no]) AC_MSG_RESULT($with_pthread) if test "$with_pthread" != no ; then AC_CHECK_HEADER(pthread.h,[ AC_DEFINE(HAVE_PTHREADS_H,1,[Define to 1 if we have pthreads.h header]) for cf_lib_pthread in pthread c_r do AC_MSG_CHECKING(if we can link with the $cf_lib_pthread library) cf_save_LIBS="$LIBS" CF_ADD_LIB($cf_lib_pthread) AC_TRY_LINK([ #include ],[ int rc = pthread_create(0,0,0,0); int r2 = pthread_mutexattr_settype(0, 0); ],[with_pthread=yes],[with_pthread=no]) LIBS="$cf_save_LIBS" AC_MSG_RESULT($with_pthread) test "$with_pthread" = yes && break done if test "$with_pthread" = yes ; then CF_ADD_LIB($cf_lib_pthread) AC_DEFINE(HAVE_LIBPTHREADS,1,[Define to 1 if we have pthreads library]) else AC_MSG_ERROR(Cannot link with pthread library) fi ]) fi ]) dnl --------------------------------------------------------------------------- dnl CF_WITH_REL_VERSION version: 1 updated: 2003/09/20 18:12:49 dnl ------------------- dnl Allow library's release-version to be overridden. Generally this happens when a dnl packager has incremented the release-version past that used in the original package, dnl and wishes to keep doing this. dnl dnl $1 is the package name, if any, to derive corresponding {package}_MAJOR dnl and {package}_MINOR symbols dnl symbol. AC_DEFUN([CF_WITH_REL_VERSION],[ test -z "$cf_cv_rel_version" && cf_cv_rel_version=0.0 AC_ARG_WITH(rel-version, [ --with-rel-version=XXX override derived release version], [AC_MSG_WARN(overriding release version $cf_cv_rel_version to $withval) cf_cv_rel_version=$withval]) ifelse($1,,[ CF_NUMBER_SYNTAX($cf_cv_rel_version,Release version) ],[ $1_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'` $1_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[[^.]]*//' -e 's/^\.//' -e 's/\..*//'` CF_NUMBER_SYNTAX([$]$1_MAJOR,Release major-version) CF_NUMBER_SYNTAX([$]$1_MINOR,Release minor-version) ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_SYSMOUSE version: 3 updated: 2012/10/06 17:56:13 dnl ---------------- dnl If we can compile with sysmouse, make it available unless it is not wanted. AC_DEFUN([CF_WITH_SYSMOUSE],[ # not everyone has "test -c" if test -c /dev/sysmouse 2>/dev/null ; then AC_MSG_CHECKING(if you want to use sysmouse) AC_ARG_WITH(sysmouse, [ --with-sysmouse use sysmouse (FreeBSD console)], [cf_with_sysmouse=$withval], [cf_with_sysmouse=maybe]) if test "$cf_with_sysmouse" != no ; then AC_TRY_COMPILE([ #include #if (__FreeBSD_version >= 400017) #include #include #else #include #endif ],[ struct mouse_info the_mouse; ioctl(0, CONS_MOUSECTL, &the_mouse); ],[cf_with_sysmouse=yes],[cf_with_sysmouse=no]) fi AC_MSG_RESULT($cf_with_sysmouse) test "$cf_with_sysmouse" = yes && AC_DEFINE(USE_SYSMOUSE,1,[Define to 1 if we can/should use the sysmouse interface]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_SYSTYPE version: 1 updated: 2013/01/26 16:26:12 dnl --------------- dnl For testing, override the derived host system-type which is used to decide dnl things such as the linker commands used to build shared libraries. This is dnl normally chosen automatically based on the type of system which you are dnl building on. We use it for testing the configure script. dnl dnl This is different from the --host option: it is used only for testing parts dnl of the configure script which would not be reachable with --host since that dnl relies on the build environment being real, rather than mocked up. AC_DEFUN([CF_WITH_SYSTYPE],[ CF_CHECK_CACHE([AC_CANONICAL_SYSTEM]) AC_ARG_WITH(system-type, [ --with-system-type=XXX test: override derived host system-type], [AC_MSG_WARN(overriding system type to $withval) cf_cv_system_name=$withval host_os=$withval ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_VALGRIND version: 1 updated: 2006/12/14 18:00:21 dnl ---------------- AC_DEFUN([CF_WITH_VALGRIND],[ CF_NO_LEAKS_OPTION(valgrind, [ --with-valgrind test: use valgrind], [USE_VALGRIND]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_VERSIONED_SYMS version: 7 updated: 2015/10/24 20:50:26 dnl ---------------------- dnl Use this when building shared library with ELF, to markup symbols with the dnl version identifier from the given input file. Generally that identifier is dnl the same as the SONAME at which the symbol was first introduced. dnl dnl $1 = basename of the ".map" file (default $PACKAGE) AC_DEFUN([CF_WITH_VERSIONED_SYMS], [ AC_MSG_CHECKING(if versioned-symbols file should be used) AC_ARG_WITH(versioned-syms, [ --with-versioned-syms=X markup versioned symbols using ld], [with_versioned_syms=$withval], [with_versioned_syms=no]) if test "x$with_versioned_syms" = xyes then with_versioned_syms='${top_srcdir}/package/ifelse($1,,${PACKAGE},[$1]).map' AC_SUBST(PACKAGE) fi AC_MSG_RESULT($with_versioned_syms) RESULTING_SYMS= VERSIONED_SYMS= WILDCARD_SYMS= if test "x$with_versioned_syms" != xno then RESULTING_SYMS=$with_versioned_syms case "x$MK_SHARED_LIB" in (*-Wl,*) VERSIONED_SYMS="-Wl,--version-script,\${RESULTING_SYMS}" MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-Wl,%\\[$]{VERSIONED_SYMS} -Wl,%"` CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB) ;; (*-dy\ *) VERSIONED_SYMS="-Wl,-M,\${RESULTING_SYMS}" MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-dy%\\[$]{VERSIONED_SYMS} -dy%"` CF_VERBOSE(MK_SHARED_LIB: $MK_SHARED_LIB) ;; (*) AC_MSG_WARN(this system does not support versioned-symbols) ;; esac # Linux ld can selectively override scope, e.g., of symbols beginning with # "_" by first declaring some as global, and then using a wildcard to # declare the others as local. Some other loaders cannot do this. Check # by constructing a (very) simple shared library and inspecting its # symbols. if test "x$VERSIONED_SYMS" != "x" then AC_MSG_CHECKING(if wildcards can be used to selectively omit symbols) WILDCARD_SYMS=no # make sources rm -f conftest.* cat >conftest.ver <conftest.$ac_ext <conftest.mk <&AC_FD_CC >/dev/null then # test for missing symbol in either Data or Text section cf_missing=`nm -P conftest.so 2>&AC_FD_CC |fgrep _ismissing | egrep '[[ ]][[DT]][[ ]]'` test -n "$cf_missing" && WILDCARD_SYMS=yes fi AC_MSG_RESULT($WILDCARD_SYMS) rm -f conftest.* fi fi AC_SUBST(RESULTING_SYMS) AC_SUBST(VERSIONED_SYMS) AC_SUBST(WILDCARD_SYMS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_XOPEN_SOURCE version: 50 updated: 2015/10/17 19:03:33 dnl --------------- dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions, dnl or adapt to the vendor's definitions to get equivalent functionality, dnl without losing the common non-POSIX features. dnl dnl Parameters: dnl $1 is the nominal value for _XOPEN_SOURCE dnl $2 is the nominal value for _POSIX_C_SOURCE AC_DEFUN([CF_XOPEN_SOURCE],[ AC_REQUIRE([AC_CANONICAL_HOST]) cf_XOPEN_SOURCE=ifelse([$1],,500,[$1]) cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2]) cf_xopen_source= case $host_os in (aix[[4-7]]*) cf_xopen_source="-D_ALL_SOURCE" ;; (cygwin|msys) cf_XOPEN_SOURCE=600 ;; (darwin[[0-8]].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; (darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; (freebsd*|dragonfly*) # 5.x headers associate # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L cf_POSIX_C_SOURCE=200112L cf_XOPEN_SOURCE=600 cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" ;; (hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; (hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; (irix[[56]].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; (linux*|gnu*|mint*|k*bsd*-gnu) CF_GNU_SOURCE ;; (minix*) cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... ;; (mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks and other headers which use u_int / u_short types cf_XOPEN_SOURCE= CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) ;; (netbsd*) cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw ;; (openbsd[[4-9]]*) # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=600 ;; (openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; (os2*) cf_XOPEN_SOURCE= ;; (osf[[45]]*) cf_xopen_source="-D_OSF_SOURCE" ;; (nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; (sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; (solaris2.*) cf_xopen_source="-D__EXTENSIONS__" cf_cv_xopen_source=broken ;; (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2) cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE= ;; (*) CF_TRY_XOPEN_SOURCE CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) ;; esac if test -n "$cf_xopen_source" ; then CF_ADD_CFLAGS($cf_xopen_source,true) fi dnl In anything but the default case, we may have system-specific setting dnl which is still not guaranteed to provide all of the entrypoints that dnl _XOPEN_SOURCE would yield. if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then AC_MSG_CHECKING(if _XOPEN_SOURCE really is set) AC_TRY_COMPILE([#include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_XOPEN_SOURCE_set=yes], [cf_XOPEN_SOURCE_set=no]) AC_MSG_RESULT($cf_XOPEN_SOURCE_set) if test $cf_XOPEN_SOURCE_set = yes then AC_TRY_COMPILE([#include ],[ #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE make an error #endif], [cf_XOPEN_SOURCE_set_ok=yes], [cf_XOPEN_SOURCE_set_ok=no]) if test $cf_XOPEN_SOURCE_set_ok = no then AC_MSG_WARN(_XOPEN_SOURCE is lower than requested) fi else CF_TRY_XOPEN_SOURCE fi fi ]) ncurses-6.0-20160213/mk-0th.awk0000644000175100001440000001324511773663753014307 0ustar tomusers# $Id: mk-0th.awk,v 1.22 2012/06/30 20:56:11 tom Exp $ ############################################################################## # Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # # Generate list of sources for a library, together with lint/lintlib rules # # Variables: # libname (library name, e.g., "ncurses", "panel", "forms", "menus") # subsets (is used here to decide if wide-character code is used) # ticlib (library name for libtic, e.g., "tic") # termlib (library name for libtinfo, e.g., "tinfo") # function make_lintlib(name,sources) { print "" print "clean ::" printf "\trm -f llib-l%s.*\n", name print "" print "realclean ::" printf "\trm -f llib-l%s\n", name print "" printf "llib-l%s : %s\n", name, sources printf "\tcproto -a -l -DNCURSES_ENABLE_STDBOOL_H=0 -DLINT $(CPPFLAGS) %s >$@\n", sources print "" print "lintlib ::" printf "\tsh $(srcdir)/../misc/makellib %s $(CPPFLAGS)\n", name print "" print "lint ::" printf "\t$(LINT) $(LINT_OPTS) $(CPPFLAGS) %s $(LINT_LIBS)\n", sources } # A blank in "subsets" indicates a split-off of the library into a separate # file, e.g., for libtic or libtinfo. They are all logical parts of the same # library. function which_library() { if ( ( which == "ticlib" ) && ( subsets ~ /ticlib / ) ) { return ticlib; } else if ( ( which == "termlib" || which == "ext_tinfo" ) && ( subsets ~ /[[:space:]]base/ ) ) { return termlib; } else { return libname; } } function show_list(name, len, list) { if ( len > 0 ) { printf "\n%s_SRC =", toupper(name); for (n = 0; n < len; ++n) printf " \\\n\t%s", list[n]; print ""; make_lintlib(name, sprintf("$(%s_SRC)", toupper(name))); } } BEGIN { which = libname; using = 0; found = 0; count_ticlib = 0; count_termlib = 0; count_library = 0; } /^@/ { which = $0; sub(/^@[[:blank:]]+/, "", which); sub(/[[:blank:]]+$/, "", which); } !/^[@#]/ { if (using == 0) { print "" print "# generated by mk-0th.awk" printf "# libname: %s\n", libname printf "# subsets: %s\n", subsets if ( libname ~ /ncurses/ ) { printf "# ticlib: %s\n", ticlib printf "# termlib: %s\n", termlib } print "" print ".SUFFIXES: .c .cc .h .i .ii" print ".c.i :" printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" print ".cc.ii :" printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" print ".h.i :" printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" print "" using = 1; } if (which ~ /port_/ ) { # skip win32 source } else if ( $0 != "" && $1 != "link_test" ) { if ( found == 0 ) { if ( subsets ~ /widechar/ ) widechar = 1; else widechar = 0; printf "C_SRC =" if ( $2 == "lib" ) found = 1 else found = 2 } if ( libname == "c++" || libname == "c++w" ) { srcname = sprintf("%s/%s.cc", $3, $1); printf " \\\n\t%s", srcname; } else if ( widechar == 1 || $3 != "$(wide)" ) { srcname = sprintf("%s/%s.c", $3, $1); printf " \\\n\t%s", srcname; if ( which_library() == libname ) { list_library[count_library++] = srcname; } else if ( which_library() == ticlib ) { list_ticlib[count_ticlib++] = srcname; } else { list_termlib[count_termlib++] = srcname; } } } } END { print "" if ( found == 1 ) { print "" printf "# Producing llib-l%s is time-consuming, so there's no direct-dependency for\n", libname; print "# it in the lintlib rule. We'll only remove in the cleanest setup."; show_list(libname, count_library, list_library); show_list(ticlib, count_ticlib, list_ticlib); show_list(termlib, count_termlib, list_termlib); } else { print "" print "lintlib :" print "\t@echo no action needed" } } # vile:ts=4 sw=4 ncurses-6.0-20160213/install-sh0000755000175100001440000001572307762207755014511 0ustar tomusers#! /bin/sh # # install - install a program, script, or datafile # # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "$0: no input file specified" >&2 exit 1 else : fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d "$dst" ]; then instcmd=: chmodcmd="" else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f "$src" ] || [ -d "$src" ] then : else echo "$0: $src does not exist" >&2 exit 1 fi if [ x"$dst" = x ] then echo "$0: no destination specified" >&2 exit 1 else : fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d "$dst" ] then dst=$dst/`basename "$src"` else : fi fi ## this sed command emulates the dirname command dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp='' while [ $# -ne 0 ] ; do pathcomp=$pathcomp$1 shift if [ ! -d "$pathcomp" ] ; then $mkdirprog "$pathcomp" else : fi pathcomp=$pathcomp/ done fi if [ x"$dir_arg" != x ] then $doit $instcmd "$dst" && if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename "$dst"` else : fi # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/#inst.$$# rmtmp=$dstdir/#rm.$$# # Trap to clean up temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && # Now remove or move aside any old file at destination location. We try this # two ways since rm can't unlink itself on some systems and the destination # file might be busy for other reasons. In this case, the final cleanup # might fail but the new file should still install successfully. { if [ -f "$dstdir/$dstfile" ] then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" fi && # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } ncurses-6.0-20160213/Makefile.in0000644000175100001440000001021712560514435014527 0ustar tomusers# $Id: Makefile.in,v 1.40 2015/08/05 23:15:41 tom Exp $ ############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # # Master Makefile for ncurses library. SHELL = @SHELL@ VPATH = @srcdir@ DESTDIR=@DESTDIR@ RPATH_LIST=@RPATH_LIST@ TOP_MFLAGS = @cf_cv_makeflags@ DESTDIR="$(DESTDIR)" RPATH_LIST="$(RPATH_LIST)" @SET_MAKE@ NCURSES_MAJOR = @NCURSES_MAJOR@ NCURSES_MINOR = @NCURSES_MINOR@ NCURSES_PATCH = @NCURSES_PATCH@ top_srcdir = @top_srcdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ ticdir = @TERMINFO@ includedir = @includedir@ includesubdir = @includesubdir@ libdir = @libdir@ mandir = @mandir@ pkgdir = @PKG_CONFIG_LIBDIR@ include_dir = ${includedir}${includesubdir} INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ DIRS_TO_MAKE = @DIRS_TO_MAKE@ all :: $(DIRS_TO_MAKE) $(DIRS_TO_MAKE) : mkdir $@ preinstall : @ echo '' @ echo '** Configuration summary for NCURSES $(NCURSES_MAJOR).$(NCURSES_MINOR) $(NCURSES_PATCH):' @ echo '' @ echo ' extended funcs: '`test @NCURSES_EXT_FUNCS@ != 0 && echo yes || echo no` @ echo ' xterm terminfo: '@WHICH_XTERM@ @ echo '' @ echo ' bin directory: '$(bindir) @ echo ' lib directory: '$(libdir) @ echo ' include directory: '$(include_dir) @ echo ' man directory: '$(mandir) @MAKE_TERMINFO@ @ echo ' terminfo directory: '$(ticdir) @MAKE_PC_FILES@ @ echo ' pkg-config directory: '$(pkgdir) @ echo '' @ test "$(include_dir)" = "$(prefix)/include" || \ echo '** Include-directory is not in a standard location' @ test ! -f $(include_dir)/termcap.h || \ fgrep NCURSES_VERSION $(include_dir)/termcap.h >/dev/null || \ echo '** Will overwrite non-ncurses termcap.h' @ test ! -f $(include_dir)/curses.h || \ fgrep NCURSES_VERSION $(include_dir)/curses.h >/dev/null || \ echo '** Will overwrite non-ncurses curses.h' distclean \ realclean :: # Put the common rules here so that we can easily construct the list of # directories to visit. all \ clean \ distclean \ mostlyclean \ realclean \ depend \ sources \ tags \ uninstall \ install :: ncurses-6.0-20160213/form/0000755000175100001440000000000012650770520013423 5ustar tomusersncurses-6.0-20160213/form/headers0000644000175100001440000000425510543525011014757 0ustar tomusers############################################################################## # Copyright (c) 1998,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996 # $(srcdir)/form.h # vile:makemode ncurses-6.0-20160213/form/llib-lform0000644000175100001440000003647212563672361015430 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./f_trace.c */ #include #undef _nc_retrace_field_ptr FIELD **_nc_retrace_field_ptr( FIELD **code) { return(*(FIELD ***)0); } #undef _nc_retrace_field FIELD *_nc_retrace_field( FIELD *code) { return(*(FIELD **)0); } #undef _nc_retrace_field_type FIELDTYPE *_nc_retrace_field_type( FIELDTYPE *code) { return(*(FIELDTYPE **)0); } #undef _nc_retrace_form FORM *_nc_retrace_form( FORM *code) { return(*(FORM **)0); } #undef _nc_retrace_form_hook Form_Hook _nc_retrace_form_hook( Form_Hook code) { return(*(Form_Hook *)0); } /* ./fld_arg.c */ #undef set_fieldtype_arg int set_fieldtype_arg( FIELDTYPE *typ, void *(*const make_arg)( va_list *p1), void *(*const copy_arg)( const void *p1), void (*const free_arg)( void *p1)) { return(*(int *)0); } #undef field_arg void *field_arg( const FIELD *field) { return(*(void **)0); } /* ./fld_attr.c */ #undef set_field_fore int set_field_fore( FIELD *field, chtype attr) { return(*(int *)0); } #undef field_fore chtype field_fore( const FIELD *field) { return(*(chtype *)0); } #undef set_field_back int set_field_back( FIELD *field, chtype attr) { return(*(int *)0); } #undef field_back chtype field_back( const FIELD *field) { return(*(chtype *)0); } /* ./fld_current.c */ #undef set_current_field int set_current_field( FORM *form, FIELD *field) { return(*(int *)0); } #undef current_field FIELD *current_field( const FORM *form) { return(*(FIELD **)0); } #undef field_index int field_index( const FIELD *field) { return(*(int *)0); } /* ./fld_def.c */ #undef _nc_Default_Field FIELD *_nc_Default_Field; #undef _nc_Make_Argument TypeArgument *_nc_Make_Argument( const FIELDTYPE *typ, va_list *ap, int *err) { return(*(TypeArgument **)0); } #undef _nc_Copy_Argument TypeArgument *_nc_Copy_Argument( const FIELDTYPE *typ, const TypeArgument *argp, int *err) { return(*(TypeArgument **)0); } #undef _nc_Free_Argument void _nc_Free_Argument( const FIELDTYPE *typ, TypeArgument *argp) { /* void */ } #undef _nc_Copy_Type NCURSES_BOOL _nc_Copy_Type( FIELD *dst, FIELD const *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_Free_Type void _nc_Free_Type( FIELD *field) { /* void */ } #undef new_field FIELD *new_field( int rows, int cols, int frow, int fcol, int nrow, int nbuf) { return(*(FIELD **)0); } #undef free_field int free_field( FIELD *field) { return(*(int *)0); } /* ./fld_dup.c */ #undef dup_field FIELD *dup_field( FIELD *field, int frow, int fcol) { return(*(FIELD **)0); } /* ./fld_ftchoice.c */ #undef set_fieldtype_choice int set_fieldtype_choice( FIELDTYPE *typ, NCURSES_BOOL (*const next_choice)( FIELD *p1, const void *p2), NCURSES_BOOL (*const prev_choice)( FIELD *p1, const void *p2)) { return(*(int *)0); } /* ./fld_ftlink.c */ #undef link_fieldtype FIELDTYPE *link_fieldtype( FIELDTYPE *type1, FIELDTYPE *type2) { return(*(FIELDTYPE **)0); } /* ./fld_info.c */ #undef field_info int field_info( const FIELD *field, int *rows, int *cols, int *frow, int *fcol, int *nrow, int *nbuf) { return(*(int *)0); } #undef dynamic_field_info int dynamic_field_info( const FIELD *field, int *drows, int *dcols, int *maxgrow) { return(*(int *)0); } /* ./fld_just.c */ #undef set_field_just int set_field_just( FIELD *field, int just) { return(*(int *)0); } #undef field_just int field_just( const FIELD *field) { return(*(int *)0); } /* ./fld_link.c */ #undef link_field FIELD *link_field( FIELD *field, int frow, int fcol) { return(*(FIELD **)0); } /* ./fld_max.c */ #undef set_max_field int set_max_field( FIELD *field, int maxgrow) { return(*(int *)0); } /* ./fld_move.c */ #undef move_field int move_field( FIELD *field, int frow, int fcol) { return(*(int *)0); } /* ./fld_newftyp.c */ #undef _nc_Default_FieldType FIELDTYPE *_nc_Default_FieldType; #undef new_fieldtype FIELDTYPE *new_fieldtype( NCURSES_BOOL (*const field_check)( FIELD *p1, const void *p2), NCURSES_BOOL (*const char_check)( int p1, const void *p2)) { return(*(FIELDTYPE **)0); } #undef free_fieldtype int free_fieldtype( FIELDTYPE *typ) { return(*(int *)0); } /* ./fld_opts.c */ #undef set_field_opts int set_field_opts( FIELD *field, Field_Options opts) { return(*(int *)0); } #undef field_opts Field_Options field_opts( const FIELD *field) { return(*(Field_Options *)0); } #undef field_opts_on int field_opts_on( FIELD *field, Field_Options opts) { return(*(int *)0); } #undef field_opts_off int field_opts_off( FIELD *field, Field_Options opts) { return(*(int *)0); } /* ./fld_pad.c */ #undef set_field_pad int set_field_pad( FIELD *field, int ch) { return(*(int *)0); } #undef field_pad int field_pad( const FIELD *field) { return(*(int *)0); } /* ./fld_page.c */ #undef set_new_page int set_new_page( FIELD *field, NCURSES_BOOL new_page_flag) { return(*(int *)0); } #undef new_page NCURSES_BOOL new_page( const FIELD *field) { return(*(NCURSES_BOOL *)0); } /* ./fld_stat.c */ #undef set_field_status int set_field_status( FIELD *field, NCURSES_BOOL status) { return(*(int *)0); } #undef field_status NCURSES_BOOL field_status( const FIELD *field) { return(*(NCURSES_BOOL *)0); } /* ./fld_type.c */ #undef set_field_type int set_field_type( FIELD *field, FIELDTYPE *type, ...) { return(*(int *)0); } #undef field_type FIELDTYPE *field_type( const FIELD *field) { return(*(FIELDTYPE **)0); } /* ./fld_user.c */ #undef set_field_userptr int set_field_userptr( FIELD *field, void *usrptr) { return(*(int *)0); } #undef field_userptr void *field_userptr( const FIELD *field) { return(*(void **)0); } /* ./frm_cursor.c */ #undef pos_form_cursor int pos_form_cursor( FORM *form) { return(*(int *)0); } /* ./frm_data.c */ #undef data_behind NCURSES_BOOL data_behind( const FORM *form) { return(*(NCURSES_BOOL *)0); } #undef data_ahead NCURSES_BOOL data_ahead( const FORM *form) { return(*(NCURSES_BOOL *)0); } /* ./frm_def.c */ #undef _nc_Default_Form FORM *_nc_Default_Form; #undef new_form_sp FORM *new_form_sp( SCREEN *sp, FIELD **fields) { return(*(FORM **)0); } #undef new_form FORM *new_form( FIELD **fields) { return(*(FORM **)0); } #undef free_form int free_form( FORM *form) { return(*(int *)0); } #undef set_form_fields int set_form_fields( FORM *form, FIELD **fields) { return(*(int *)0); } #undef form_fields FIELD **form_fields( const FORM *form) { return(*(FIELD ***)0); } #undef field_count int field_count( const FORM *form) { return(*(int *)0); } /* ./frm_driver.c */ #undef _nc_get_fieldbuffer void _nc_get_fieldbuffer( FORM *form, FIELD *field, char *buf) { /* void */ } #undef _nc_Position_Form_Cursor int _nc_Position_Form_Cursor( FORM *form) { return(*(int *)0); } #undef _nc_Refresh_Current_Field int _nc_Refresh_Current_Field( FORM *form) { return(*(int *)0); } #undef _nc_Synchronize_Attributes int _nc_Synchronize_Attributes( FIELD *field) { return(*(int *)0); } #undef _nc_Synchronize_Options int _nc_Synchronize_Options( FIELD *field, Field_Options newopts) { return(*(int *)0); } #undef _nc_Set_Current_Field int _nc_Set_Current_Field( FORM *form, FIELD *newfield) { return(*(int *)0); } #undef _nc_Internal_Validation NCURSES_BOOL _nc_Internal_Validation( FORM *form) { return(*(NCURSES_BOOL *)0); } #undef _nc_First_Active_Field FIELD *_nc_First_Active_Field( FORM *form) { return(*(FIELD **)0); } #undef _nc_Set_Form_Page int _nc_Set_Form_Page( FORM *form, int page, FIELD *field) { return(*(int *)0); } typedef struct { int keycode; int (*cmd) (FORM *); } Binding_Info; #undef form_driver int form_driver( FORM *form, int c) { return(*(int *)0); } #undef set_field_buffer int set_field_buffer( FIELD *field, int buffer, const char *value) { return(*(int *)0); } #undef field_buffer char *field_buffer( const FIELD *field, int buffer) { return(*(char **)0); } /* ./frm_hook.c */ #undef set_field_init int set_field_init( FORM *form, Form_Hook func) { return(*(int *)0); } #undef field_init Form_Hook field_init( const FORM *form) { return(*(Form_Hook *)0); } #undef set_field_term int set_field_term( FORM *form, Form_Hook func) { return(*(int *)0); } #undef field_term Form_Hook field_term( const FORM *form) { return(*(Form_Hook *)0); } #undef set_form_init int set_form_init( FORM *form, Form_Hook func) { return(*(int *)0); } #undef form_init Form_Hook form_init( const FORM *form) { return(*(Form_Hook *)0); } #undef set_form_term int set_form_term( FORM *form, Form_Hook func) { return(*(int *)0); } #undef form_term Form_Hook form_term( const FORM *form) { return(*(Form_Hook *)0); } /* ./frm_opts.c */ #undef set_form_opts int set_form_opts( FORM *form, Form_Options opts) { return(*(int *)0); } #undef form_opts Form_Options form_opts( const FORM *form) { return(*(Form_Options *)0); } #undef form_opts_on int form_opts_on( FORM *form, Form_Options opts) { return(*(int *)0); } #undef form_opts_off int form_opts_off( FORM *form, Form_Options opts) { return(*(int *)0); } /* ./frm_page.c */ #undef set_form_page int set_form_page( FORM *form, int page) { return(*(int *)0); } #undef form_page int form_page( const FORM *form) { return(*(int *)0); } /* ./frm_post.c */ #undef post_form int post_form( FORM *form) { return(*(int *)0); } #undef unpost_form int unpost_form( FORM *form) { return(*(int *)0); } /* ./frm_req_name.c */ #undef form_request_name const char *form_request_name( int request) { return(*(const char **)0); } #undef form_request_by_name int form_request_by_name( const char *str) { return(*(int *)0); } /* ./frm_scale.c */ #undef scale_form int scale_form( const FORM *form, int *rows, int *cols) { return(*(int *)0); } /* ./frm_sub.c */ #undef set_form_sub int set_form_sub( FORM *form, WINDOW *win) { return(*(int *)0); } #undef form_sub WINDOW *form_sub( const FORM *form) { return(*(WINDOW **)0); } /* ./frm_user.c */ #undef set_form_userptr int set_form_userptr( FORM *form, void *usrptr) { return(*(int *)0); } #undef form_userptr void *form_userptr( const FORM *form) { return(*(void **)0); } /* ./frm_win.c */ #undef set_form_win int set_form_win( FORM *form, WINDOW *win) { return(*(int *)0); } #undef form_win WINDOW *form_win( const FORM *form) { return(*(WINDOW **)0); } /* ./fty_alnum.c */ typedef struct { int width; } alnumARG; #undef TYPE_ALNUM FIELDTYPE *TYPE_ALNUM; #undef _nc_TYPE_ALNUM FIELDTYPE *_nc_TYPE_ALNUM(void) { return(*(FIELDTYPE **)0); } /* ./fty_alpha.c */ typedef struct { int width; } alphaARG; #undef TYPE_ALPHA FIELDTYPE *TYPE_ALPHA; #undef _nc_TYPE_ALPHA FIELDTYPE *_nc_TYPE_ALPHA(void) { return(*(FIELDTYPE **)0); } /* ./fty_enum.c */ typedef struct { char **kwds; int count; NCURSES_BOOL checkcase; NCURSES_BOOL checkunique; } enumARG; typedef struct { char **kwds; int ccase; int cunique; } enumParams; #undef TYPE_ENUM FIELDTYPE *TYPE_ENUM; #undef _nc_TYPE_ENUM FIELDTYPE *_nc_TYPE_ENUM(void) { return(*(FIELDTYPE **)0); } /* ./fty_generic.c */ #undef _nc_generic_fieldtype FIELDTYPE *_nc_generic_fieldtype( NCURSES_BOOL (*const field_check)( FORM *p1, FIELD *p2, const void *p3), NCURSES_BOOL (*const char_check)( int p1, FORM *p2, FIELD *p3, const void *p4), NCURSES_BOOL (*const next)( FORM *p1, FIELD *p2, const void *p3), NCURSES_BOOL (*const prev)( FORM *p1, FIELD *p2, const void *p3), void (*freecallback)( void *p1)) { return(*(FIELDTYPE **)0); } #undef _nc_set_generic_fieldtype int _nc_set_generic_fieldtype( FIELD *field, FIELDTYPE *ftyp, int (*argiterator)( void **p1)) { return(*(int *)0); } #undef _nc_form_cursor WINDOW *_nc_form_cursor( const FORM *form, int *pRow, int *pCol) { return(*(WINDOW **)0); } /* ./fty_int.c */ typedef struct { int precision; long low; long high; } integerARG; typedef struct { int precision; long low; long high; } integerPARM; #undef TYPE_INTEGER FIELDTYPE *TYPE_INTEGER; #undef _nc_TYPE_INTEGER FIELDTYPE *_nc_TYPE_INTEGER(void) { return(*(FIELDTYPE **)0); } /* ./fty_ipv4.c */ #undef TYPE_IPV4 FIELDTYPE *TYPE_IPV4; #undef _nc_TYPE_IPV4 FIELDTYPE *_nc_TYPE_IPV4(void) { return(*(FIELDTYPE **)0); } /* ./fty_num.c */ typedef struct { int precision; double low; double high; struct lconv *L; } numericARG; typedef struct { int precision; double low; double high; } thisPARM; #undef TYPE_NUMERIC FIELDTYPE *TYPE_NUMERIC; #undef _nc_TYPE_NUMERIC FIELDTYPE *_nc_TYPE_NUMERIC(void) { return(*(FIELDTYPE **)0); } /* ./fty_regex.c */ typedef struct { regex_t *pRegExp; unsigned long *refCount; } RegExp_Arg; #undef TYPE_REGEXP FIELDTYPE *TYPE_REGEXP; #undef _nc_TYPE_REGEXP FIELDTYPE *_nc_TYPE_REGEXP(void) { return(*(FIELDTYPE **)0); } ncurses-6.0-20160213/form/fld_attr.c0000644000175100001440000001255512650770520015376 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_attr.c,v 1.12 2016/01/23 21:32:00 tom Exp $") /*---------------------------------------------------------------------------- Field-Attribute manipulation routines --------------------------------------------------------------------------*/ /* "Template" macro to generate a function to set a fields attribute */ #define GEN_FIELD_ATTR_SET_FCT( name ) \ NCURSES_IMPEXP int NCURSES_API set_field_ ## name (FIELD * field, chtype attr)\ {\ int res = E_BAD_ARGUMENT;\ T((T_CALLED("set_field_" #name "(%p,%s)"), (void *)field, _traceattr(attr)));\ if ( attr==A_NORMAL || ((attr & A_ATTRIBUTES)==attr) )\ {\ Normalize_Field( field );\ if (field != 0) \ { \ if ((field -> name) != attr)\ {\ field -> name = attr;\ res = _nc_Synchronize_Attributes( field );\ }\ else\ {\ res = E_OK;\ }\ }\ }\ RETURN(res);\ } /* "Template" macro to generate a function to get a fields attribute */ #define GEN_FIELD_ATTR_GET_FCT( name ) \ NCURSES_IMPEXP chtype NCURSES_API field_ ## name (const FIELD * field)\ {\ T((T_CALLED("field_" #name "(%p)"), (const void *) field));\ returnAttr( A_ATTRIBUTES & (Normalize_Field( field ) -> name) );\ } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_fore(FIELD *field, chtype attr) | | Description : Sets the foreground of the field used to display the | field contents. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid attributes | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ GEN_FIELD_ATTR_SET_FCT(fore) /*--------------------------------------------------------------------------- | Facility : libnform | Function : chtype field_fore(const FIELD *) | | Description : Retrieve fields foreground attribute | | Return Values : The foreground attribute +--------------------------------------------------------------------------*/ GEN_FIELD_ATTR_GET_FCT(fore) /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_back(FIELD *field, chtype attr) | | Description : Sets the background of the field used to display the | fields extend. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid attributes | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ GEN_FIELD_ATTR_SET_FCT(back) /*--------------------------------------------------------------------------- | Facility : libnform | Function : chtype field_back(const | | Description : Retrieve fields background attribute | | Return Values : The background attribute +--------------------------------------------------------------------------*/ GEN_FIELD_ATTR_GET_FCT(back) /* fld_attr.c ends here */ ncurses-6.0-20160213/form/frm_page.c0000644000175100001440000001055611764765024015366 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_page.c,v 1.12 2012/06/10 00:28:04 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_form_page(FORM * form,int page) | | Description : Set the page number of the form. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid form pointer or page number | E_BAD_STATE - called from a hook routine | E_INVALID_FIELD - current field can't be left | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_form_page(FORM *form, int page) { int err = E_OK; T((T_CALLED("set_form_page(%p,%d)"), (void *)form, page)); if (!form || (page < 0) || (page >= form->maxpage)) RETURN(E_BAD_ARGUMENT); if (!(form->status & _POSTED)) { form->curpage = (short)page; form->current = _nc_First_Active_Field(form); } else { if (form->status & _IN_DRIVER) err = E_BAD_STATE; else { if (form->curpage != page) { if (!_nc_Internal_Validation(form)) err = E_INVALID_FIELD; else { Call_Hook(form, fieldterm); Call_Hook(form, formterm); err = _nc_Set_Form_Page(form, page, (FIELD *)0); Call_Hook(form, forminit); Call_Hook(form, fieldinit); _nc_Refresh_Current_Field(form); } } } } RETURN(err); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int form_page(const FORM * form) | | Description : Return the current page of the form. | | Return Values : >= 0 : current page number | -1 : invalid form pointer +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) form_page(const FORM *form) { T((T_CALLED("form_page(%p)"), (const void *)form)); returnCode(Normalize_Form(form)->curpage); } /* frm_page.c ends here */ ncurses-6.0-20160213/form/fld_pad.c0000644000175100001440000000743211326663274015174 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_pad.c,v 1.10 2010/01/23 21:14:36 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_pad(FIELD *field, int ch) | | Description : Set the pad character used to fill the field. This must | be a printable character. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid field pointer or pad character | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_field_pad(FIELD *field, int ch) { int res = E_BAD_ARGUMENT; T((T_CALLED("set_field_pad(%p,%d)"), (void *)field, ch)); Normalize_Field(field); if (isprint(UChar(ch))) { if (field->pad != ch) { field->pad = ch; res = _nc_Synchronize_Attributes(field); } else res = E_OK; } RETURN(res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int field_pad(const FIELD *field) | | Description : Retrieve the fields pad character. | | Return Values : The pad character. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) field_pad(const FIELD *field) { T((T_CALLED("field_pad(%p)"), (const void *)field)); returnCode(Normalize_Field(field)->pad); } /* fld_pad.c ends here */ ncurses-6.0-20160213/form/frm_post.c0000644000175100001440000001153411764765005015433 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_post.c,v 1.11 2012/06/10 00:27:49 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int post_form(FORM * form) | | Description : Writes the form into its associated subwindow. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid form pointer | E_POSTED - form already posted | E_NOT_CONNECTED - no fields connected to form | E_NO_ROOM - form doesn't fit into subwindow | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) post_form(FORM *form) { WINDOW *formwin; int err; int page; T((T_CALLED("post_form(%p)"), (void *)form)); if (!form) RETURN(E_BAD_ARGUMENT); if (form->status & _POSTED) RETURN(E_POSTED); if (!(form->field)) RETURN(E_NOT_CONNECTED); formwin = Get_Form_Window(form); if ((form->cols > getmaxx(formwin)) || (form->rows > getmaxy(formwin))) RETURN(E_NO_ROOM); /* reset form->curpage to an invald value. This forces Set_Form_Page to do the page initialization which is required by post_form. */ page = form->curpage; form->curpage = -1; if ((err = _nc_Set_Form_Page(form, page, form->current)) != E_OK) RETURN(err); SetStatus(form, _POSTED); Call_Hook(form, forminit); Call_Hook(form, fieldinit); _nc_Refresh_Current_Field(form); RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int unpost_form(FORM * form) | | Description : Erase form from its associated subwindow. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid form pointer | E_NOT_POSTED - form isn't posted | E_BAD_STATE - called from a hook routine +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) unpost_form(FORM *form) { T((T_CALLED("unpost_form(%p)"), (void *)form)); if (!form) RETURN(E_BAD_ARGUMENT); if (!(form->status & _POSTED)) RETURN(E_NOT_POSTED); if (form->status & _IN_DRIVER) RETURN(E_BAD_STATE); Call_Hook(form, fieldterm); Call_Hook(form, formterm); werase(Get_Form_Window(form)); delwin(form->w); form->w = (WINDOW *)0; ClrStatus(form, _POSTED); RETURN(E_OK); } /* frm_post.c ends here */ ncurses-6.0-20160213/form/form.priv.h0000644000175100001440000002517412626405363015532 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /* $Id: form.priv.h,v 0.39 2015/11/28 20:13:39 Leon.Winter Exp $ */ #ifndef FORM_PRIV_H #define FORM_PRIV_H 1 /* *INDENT-OFF*/ #include "curses.priv.h" #include "mf_common.h" #if USE_WIDEC_SUPPORT #if HAVE_WCTYPE_H #include #endif #ifndef MB_LEN_MAX #define MB_LEN_MAX 8 /* should be >= MB_CUR_MAX, but that may be a function */ #endif #define FIELD_CELL NCURSES_CH_T #define NCURSES_FIELD_INTERNALS char** expanded; WINDOW *working; #define NCURSES_FIELD_EXTENSION , (char **)0, (WINDOW *)0 #else #define FIELD_CELL char #define NCURSES_FIELD_EXTENSION /* nothing */ #endif #include "form.h" /*********************** * Default objects * ***********************/ extern NCURSES_EXPORT_VAR(FORM *) _nc_Default_Form; extern NCURSES_EXPORT_VAR(FIELD *) _nc_Default_Field; extern NCURSES_EXPORT_VAR(FIELDTYPE *) _nc_Default_FieldType; /* form status values */ #define _OVLMODE (0x04U) /* Form is in overlay mode */ #define _WINDOW_MODIFIED (0x10U) /* Current field window has been modified */ #define _FCHECK_REQUIRED (0x20U) /* Current field needs validation */ /* field status values */ #define _CHANGED (0x01U) /* Field has been changed */ #define _NEWTOP (0x02U) /* Vertical scrolling occurred */ #define _NEWPAGE (0x04U) /* field begins new page of form */ #define _MAY_GROW (0x08U) /* dynamic field may still grow */ /* fieldtype status values */ #define _LINKED_TYPE (0x01U) /* Type is a linked type */ #define _HAS_ARGS (0x02U) /* Type has arguments */ #define _HAS_CHOICE (0x04U) /* Type has choice methods */ #define _RESIDENT (0x08U) /* Type is built-in */ #define _GENERIC (0x10U) /* A generic field type */ /* This are the field options required to be a selectable field in field navigation requests */ #define O_SELECTABLE (O_ACTIVE | O_VISIBLE) /* If form is NULL replace form argument by default-form */ #define Normalize_Form(form) \ ((form) = (form != 0) ? (form) : _nc_Default_Form) /* If field is NULL replace field argument by default-field */ #define Normalize_Field(field) \ ((field) = (field != 0) ? (field) : _nc_Default_Field) #if NCURSES_SP_FUNCS #define Get_Form_Screen(form) \ ((form)->win ? _nc_screen_of((form->win)):CURRENT_SCREEN) #else #define Get_Form_Screen(form) CURRENT_SCREEN #endif /* Retrieve forms window */ #define Get_Form_Window(form) \ ((form)->sub \ ? (form)->sub \ : ((form)->win \ ? (form)->win \ : StdScreen(Get_Form_Screen(form)))) /* Calculate the size for a single buffer for this field */ #define Buffer_Length(field) ((field)->drows * (field)->dcols) /* Calculate the total size of all buffers for this field */ #define Total_Buffer_Size(field) \ ( (size_t)(Buffer_Length(field) + 1) * (size_t)(1+(field)->nbuf) * sizeof(FIELD_CELL) ) /* Logic to determine whether or not a field is single lined */ #define Single_Line_Field(field) \ (((field)->rows + (field)->nrow) == 1) #define Field_Has_Option(f,o) ((((unsigned)(f)->opts) & o) != 0) /* Logic to determine whether or not a field is selectable */ #define Field_Is_Selectable(f) (((unsigned)((f)->opts) & O_SELECTABLE)==O_SELECTABLE) #define Field_Is_Not_Selectable(f) (((unsigned)((f)->opts) & O_SELECTABLE)!=O_SELECTABLE) typedef struct typearg { struct typearg *left; struct typearg *right; } TypeArgument; /* This is a dummy request code (normally invalid) to be used internally with the form_driver() routine to position to the first active field on the form */ #define FIRST_ACTIVE_MAGIC (-291056) #define ALL_FORM_OPTS ( \ O_NL_OVERLOAD |\ O_BS_OVERLOAD ) #define STD_FIELD_OPTS (Field_Options)( \ O_VISIBLE |\ O_ACTIVE |\ O_PUBLIC |\ O_EDIT |\ O_WRAP |\ O_BLANK |\ O_AUTOSKIP|\ O_NULLOK |\ O_PASSOK |\ O_STATIC) #define ALL_FIELD_OPTS (Field_Options)( \ STD_FIELD_OPTS |\ O_DYNAMIC_JUSTIFY |\ O_NO_LEFT_STRIP) #define C_BLANK ' ' #define is_blank(c) ((c)==C_BLANK) #define C_ZEROS '\0' extern NCURSES_EXPORT(TypeArgument *) _nc_Make_Argument (const FIELDTYPE*, va_list*, int*); extern NCURSES_EXPORT(TypeArgument *) _nc_Copy_Argument (const FIELDTYPE*, const TypeArgument*, int*); extern NCURSES_EXPORT(void) _nc_Free_Argument (const FIELDTYPE*, TypeArgument*); extern NCURSES_EXPORT(bool) _nc_Copy_Type (FIELD*, FIELD const *); extern NCURSES_EXPORT(void) _nc_Free_Type (FIELD *); extern NCURSES_EXPORT(int) _nc_Synchronize_Attributes (FIELD*); extern NCURSES_EXPORT(int) _nc_Synchronize_Options (FIELD*, Field_Options); extern NCURSES_EXPORT(int) _nc_Set_Form_Page (FORM*, int, FIELD*); extern NCURSES_EXPORT(int) _nc_Refresh_Current_Field (FORM*); extern NCURSES_EXPORT(FIELD *) _nc_First_Active_Field (FORM*); extern NCURSES_EXPORT(bool) _nc_Internal_Validation (FORM*); extern NCURSES_EXPORT(int) _nc_Set_Current_Field (FORM*, FIELD*); extern NCURSES_EXPORT(int) _nc_Position_Form_Cursor (FORM*); #if NCURSES_INTEROP_FUNCS extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_INTEGER(void); extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ALNUM(void); extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ALPHA(void); extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ENUM(void); extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_NUMERIC(void); extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_REGEXP(void); extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_IPV4(void); extern NCURSES_EXPORT(FIELDTYPE *) _nc_generic_fieldtype(bool (*const field_check) (FORM*, FIELD *, const void *), bool (*const char_check) (int, FORM*, FIELD*, const void *), bool (*const next)(FORM*,FIELD*,const void*), bool (*const prev)(FORM*,FIELD*,const void*), void (*freecallback)(void*)); extern NCURSES_EXPORT(int) _nc_set_generic_fieldtype(FIELD*, FIELDTYPE*, int (*)(void**)); extern NCURSES_EXPORT(WINDOW*) _nc_form_cursor(const FORM* , int* , int* ); #define INIT_FT_FUNC(func) {func} #else #define INIT_FT_FUNC(func) func #endif extern NCURSES_EXPORT(void) _nc_get_fieldbuffer(FORM*, FIELD*, FIELD_CELL*); #if USE_WIDEC_SUPPORT extern NCURSES_EXPORT(wchar_t *) _nc_Widen_String(char *, int *); #endif #ifdef TRACE #define returnField(code) TRACE_RETURN1(code,field) #define returnFieldPtr(code) TRACE_RETURN1(code,field_ptr) #define returnForm(code) TRACE_RETURN1(code,form) #define returnFieldType(code) TRACE_RETURN1(code,field_type) #define returnFormHook(code) TRACE_RETURN1(code,form_hook) extern NCURSES_EXPORT(FIELD **) _nc_retrace_field_ptr (FIELD **); extern NCURSES_EXPORT(FIELD *) _nc_retrace_field (FIELD *); extern NCURSES_EXPORT(FIELDTYPE *) _nc_retrace_field_type (FIELDTYPE *); extern NCURSES_EXPORT(FORM *) _nc_retrace_form (FORM *); extern NCURSES_EXPORT(Form_Hook) _nc_retrace_form_hook (Form_Hook); #else /* !TRACE */ #define returnFieldPtr(code) return code #define returnFieldType(code) return code #define returnField(code) return code #define returnForm(code) return code #define returnFormHook(code) return code #endif /* TRACE/!TRACE */ /* * Use Check_CTYPE_Field() to simplify FIELDTYPE's that use only the ccheck() * function. */ #if USE_WIDEC_SUPPORT #define Check_CTYPE_Field(result, buffer, width, ccheck) \ while (*buffer && *buffer == ' ') \ buffer++; \ if (*buffer) \ { \ bool blank = FALSE; \ int len; \ int n; \ wchar_t *list = _nc_Widen_String((char *)buffer, &len); \ if (list != 0) \ { \ result = TRUE; \ for (n = 0; n < len; ++n) \ { \ if (blank) \ { \ if (list[n] != ' ') \ { \ result = FALSE; \ break; \ } \ } \ else if (list[n] == ' ') \ { \ blank = TRUE; \ result = (n + 1 >= width); \ } \ else if (!ccheck(list[n], NULL)) \ { \ result = FALSE; \ break; \ } \ } \ free(list); \ } \ } #else #define Check_CTYPE_Field(result, buffer, width, ccheck) \ while (*buffer && *buffer == ' ') \ buffer++; \ if (*buffer) \ { \ unsigned char *s = buffer; \ int l = -1; \ while (*buffer && ccheck(*buffer, NULL)) \ buffer++; \ l = (int)(buffer - s); \ while (*buffer && *buffer == ' ') \ buffer++; \ result = ((*buffer || (l < width)) ? FALSE : TRUE); \ } #endif /* *INDENT-ON*/ #endif /* FORM_PRIV_H */ ncurses-6.0-20160213/form/fty_alnum.c0000644000175100001440000001600711326663274015577 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /*************************************************************************** * * * Author : Juergen Pfeifer * * * ***************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fty_alnum.c,v 1.24 2010/01/23 21:14:36 tom Exp $") #define thisARG alnumARG typedef struct { int width; } thisARG; /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Generic_This_Type(void *arg) | | Description : Allocate structure for alphanumeric type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Generic_This_Type(void *arg) { thisARG *argp = (thisARG *) 0; if (arg) { argp = typeMalloc(thisARG, 1); if (argp) { T((T_CREATE("thisARG %p"), (void *)argp)); argp->width = *((int *)arg); } } return ((void *)argp); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Make_This_Type(va_list *ap) | | Description : Allocate structure for alphanumeric type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Make_This_Type(va_list *ap) { int w = va_arg(*ap, int); return Generic_This_Type((void *)&w); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Copy_ThisType(const void *argp) | | Description : Copy structure for alphanumeric type argument. | | Return Values : Pointer to argument structure or NULL on error. +--------------------------------------------------------------------------*/ static void * Copy_This_Type(const void *argp) { const thisARG *ap = (const thisARG *)argp; thisARG *result = typeMalloc(thisARG, 1); if (result) { T((T_CREATE("thisARG %p"), (void *)result)); *result = *ap; } return ((void *)result); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Free_This_Type(void *argp) | | Description : Free structure for alphanumeric type argument. | | Return Values : - +--------------------------------------------------------------------------*/ static void Free_This_Type(void *argp) { if (argp) free(argp); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_This_Character( | int c, | const void *argp) | | Description : Check a character for the alphanumeric type. | | Return Values : TRUE - character is valid | FALSE - character is invalid +--------------------------------------------------------------------------*/ static bool Check_This_Character(int c, const void *argp GCC_UNUSED) { #if USE_WIDEC_SUPPORT if (iswalnum((wint_t) c)) return TRUE; #endif return (isalnum(UChar(c)) ? TRUE : FALSE); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_This_Field( | FIELD *field, | const void *argp) | | Description : Validate buffer content to be a valid alphanumeric value | | Return Values : TRUE - field is valid | FALSE - field is invalid +--------------------------------------------------------------------------*/ static bool Check_This_Field(FIELD *field, const void *argp) { int width = ((const thisARG *)argp)->width; unsigned char *bp = (unsigned char *)field_buffer(field, 0); bool result = (width < 0); Check_CTYPE_Field(result, bp, width, Check_This_Character); return (result); } static FIELDTYPE typeTHIS = { _HAS_ARGS | _RESIDENT, 1, /* this is mutable, so we can't be const */ (FIELDTYPE *)0, (FIELDTYPE *)0, Make_This_Type, Copy_This_Type, Free_This_Type, INIT_FT_FUNC(Check_This_Field), INIT_FT_FUNC(Check_This_Character), INIT_FT_FUNC(NULL), INIT_FT_FUNC(NULL), #if NCURSES_INTEROP_FUNCS Generic_This_Type #endif }; NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_ALNUM = &typeTHIS; #if NCURSES_INTEROP_FUNCS /* The next routines are to simplify the use of ncurses from programming languages with restictions on interop with C level constructs (e.g. variable access or va_list + ellipsis constructs) */ NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ALNUM(void) { return TYPE_ALNUM; } #endif /* fty_alnum.c ends here */ ncurses-6.0-20160213/form/frm_data.c0000644000175100001440000001432012206233465015343 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_data.c,v 1.16 2013/08/24 22:44:05 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : bool data_behind(const FORM *form) | | Description : Check for off-screen data behind. This is nearly trivial | because the beginning of a field is fixed. | | Return Values : TRUE - there are off-screen data behind | FALSE - there are no off-screen data behind +--------------------------------------------------------------------------*/ NCURSES_EXPORT(bool) data_behind(const FORM *form) { bool result = FALSE; T((T_CALLED("data_behind(%p)"), (const void *)form)); if (form && (form->status & _POSTED) && form->current) { FIELD *field; field = form->current; if (!Single_Line_Field(field)) { result = (form->toprow == 0) ? FALSE : TRUE; } else { result = (form->begincol == 0) ? FALSE : TRUE; } } returnBool(result); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static char * Only_Padding( | WINDOW *w, | int len, | int pad) | | Description : Test if 'length' cells starting at the current position | contain a padding character. | | Return Values : true if only padding cells are found +--------------------------------------------------------------------------*/ NCURSES_INLINE static bool Only_Padding(WINDOW *w, int len, int pad) { bool result = TRUE; int y, x, j; FIELD_CELL cell; getyx(w, y, x); for (j = 0; j < len; ++j) { if (wmove(w, y, x + j) != ERR) { #if USE_WIDEC_SUPPORT if (win_wch(w, &cell) != ERR) { if ((chtype)CharOf(cell) != ChCharOf(pad) || cell.chars[1] != 0) { result = FALSE; break; } } #else cell = (FIELD_CELL) winch(w); if (ChCharOf(cell) != ChCharOf(pad)) { result = FALSE; break; } #endif } else { /* if an error, return true: no non-padding text found */ break; } } /* no need to reset the cursor position; caller does this */ return result; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : bool data_ahead(const FORM *form) | | Description : Check for off-screen data ahead. This is more difficult | because a dynamic field has a variable end. | | Return Values : TRUE - there are off-screen data ahead | FALSE - there are no off-screen data ahead +--------------------------------------------------------------------------*/ NCURSES_EXPORT(bool) data_ahead(const FORM *form) { bool result = FALSE; T((T_CALLED("data_ahead(%p)"), (const void *)form)); if (form && (form->status & _POSTED) && form->current) { FIELD *field; bool cursor_moved = FALSE; int pos; field = form->current; assert(form->w); if (Single_Line_Field(field)) { int check_len; pos = form->begincol + field->cols; while (pos < field->dcols) { check_len = field->dcols - pos; if (check_len >= field->cols) check_len = field->cols; cursor_moved = TRUE; wmove(form->w, 0, pos); if (Only_Padding(form->w, check_len, field->pad)) pos += field->cols; else { result = TRUE; break; } } } else { pos = form->toprow + field->rows; while (pos < field->drows) { cursor_moved = TRUE; wmove(form->w, pos, 0); pos++; if (!Only_Padding(form->w, field->cols, field->pad)) { result = TRUE; break; } } } if (cursor_moved) wmove(form->w, form->currow, form->curcol); } returnBool(result); } /* frm_data.c ends here */ ncurses-6.0-20160213/form/frm_cursor.c0000644000175100001440000000676111326663274015770 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_cursor.c,v 1.10 2010/01/23 21:14:36 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int pos_form_cursor(FORM * form) | | Description : Moves the form window cursor to the location required | by the form driver to resume form processing. This may | be needed after the application calls a curses library | I/O routine that modifies the cursor position. | | Return Values : E_OK - Success | E_SYSTEM_ERROR - System error. | E_BAD_ARGUMENT - Invalid form pointer | E_NOT_POSTED - Form is not posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) pos_form_cursor(FORM *form) { int res; T((T_CALLED("pos_form_cursor(%p)"), (void *)form)); if (!form) res = E_BAD_ARGUMENT; else { if (!(form->status & _POSTED)) res = E_NOT_POSTED; else res = _nc_Position_Form_Cursor(form); } RETURN(res); } /* frm_cursor.c ends here */ ncurses-6.0-20160213/form/fld_info.c0000644000175100001440000001112311326663273015352 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_info.c,v 1.11 2010/01/23 21:14:35 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int field_info(const FIELD *field, | int *rows, int *cols, | int *frow, int *fcol, | int *nrow, int *nbuf) | | Description : Retrieve infos about the fields creation parameters. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid field pointer +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) field_info(const FIELD *field, int *rows, int *cols, int *frow, int *fcol, int *nrow, int *nbuf) { T((T_CALLED("field_info(%p,%p,%p,%p,%p,%p,%p)"), (const void *)field, (void *)rows, (void *)cols, (void *)frow, (void *)fcol, (void *)nrow, (void *)nbuf)); if (!field) RETURN(E_BAD_ARGUMENT); if (rows) *rows = field->rows; if (cols) *cols = field->cols; if (frow) *frow = field->frow; if (fcol) *fcol = field->fcol; if (nrow) *nrow = field->nrow; if (nbuf) *nbuf = field->nbuf; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int dynamic_field_info(const FIELD *field, | int *drows, int *dcols, | int *maxgrow) | | Description : Retrieve informations about a dynamic fields current | dynamic parameters. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid argument +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) dynamic_field_info(const FIELD *field, int *drows, int *dcols, int *maxgrow) { T((T_CALLED("dynamic_field_info(%p,%p,%p,%p)"), (const void *)field, (void *)drows, (void *)dcols, (void *)maxgrow)); if (!field) RETURN(E_BAD_ARGUMENT); if (drows) *drows = field->drows; if (dcols) *dcols = field->dcols; if (maxgrow) *maxgrow = field->maxgrow; RETURN(E_OK); } /* fld_info.c ends here */ ncurses-6.0-20160213/form/fld_dup.c0000644000175100001440000001067111726771674015227 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_dup.c,v 1.14 2012/03/11 00:37:16 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : FIELD *dup_field(FIELD *field, int frow, int fcol) | | Description : Duplicates the field at the specified position. All | field attributes and the buffers are copied. | If an error occurs, errno is set to | | E_BAD_ARGUMENT - invalid argument | E_SYSTEM_ERROR - system error | | Return Values : Pointer to the new field or NULL if failure +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELD *) dup_field(FIELD *field, int frow, int fcol) { FIELD *New_Field = (FIELD *)0; int err = E_BAD_ARGUMENT; T((T_CALLED("dup_field(%p,%d,%d)"), (void *)field, frow, fcol)); if (field && (frow >= 0) && (fcol >= 0) && ((err = E_SYSTEM_ERROR) != 0) && /* trick : this resets the default error */ (New_Field = typeMalloc(FIELD, 1))) { T((T_CREATE("field %p"), (void *)New_Field)); *New_Field = *_nc_Default_Field; New_Field->frow = (short) frow; New_Field->fcol = (short) fcol; New_Field->link = New_Field; New_Field->rows = field->rows; New_Field->cols = field->cols; New_Field->nrow = field->nrow; New_Field->drows = field->drows; New_Field->dcols = field->dcols; New_Field->maxgrow = field->maxgrow; New_Field->nbuf = field->nbuf; New_Field->just = field->just; New_Field->fore = field->fore; New_Field->back = field->back; New_Field->pad = field->pad; New_Field->opts = field->opts; New_Field->usrptr = field->usrptr; if (_nc_Copy_Type(New_Field, field)) { size_t i, len; len = Total_Buffer_Size(New_Field); if ((New_Field->buf = (FIELD_CELL *)malloc(len))) { for (i = 0; i < len; ++i) New_Field->buf[i] = field->buf[i]; returnField(New_Field); } } } if (New_Field) free_field(New_Field); SET_ERROR(err); returnField((FIELD *)0); } /* fld_dup.c ends here */ ncurses-6.0-20160213/form/f_trace.c0000644000175100001440000000571212650770520015177 0ustar tomusers/**************************************************************************** * Copyright (c) 2004-2010,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: f_trace.c,v 1.3 2016/01/23 21:32:00 tom Exp $") NCURSES_EXPORT(FIELD **) _nc_retrace_field_ptr(FIELD **code) { T((T_RETURN("%p"), (void *)code)); return code; } NCURSES_EXPORT(FIELD *) _nc_retrace_field(FIELD *code) { T((T_RETURN("%p"), (void *)code)); return code; } NCURSES_EXPORT(FIELDTYPE *) _nc_retrace_field_type(FIELDTYPE *code) { T((T_RETURN("%p"), (void *)code)); return code; } NCURSES_EXPORT(FORM *) _nc_retrace_form(FORM *code) { T((T_RETURN("%p"), (void *)code)); return code; } NCURSES_EXPORT(Form_Hook) _nc_retrace_form_hook(Form_Hook code) { T((T_RETURN("%p"), TR_FUNC(code))); return code; } ncurses-6.0-20160213/form/frm_req_name.c0000644000175100001440000001366712510015522016224 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /*************************************************************************** * Module form_request_name * * Routines to handle external names of menu requests * ***************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_req_name.c,v 1.19 2015/04/04 17:11:46 tom Exp $") #define DATA(s) { s } static const char request_names[MAX_FORM_COMMAND - MIN_FORM_COMMAND + 1][13] = { DATA("NEXT_PAGE"), DATA("PREV_PAGE"), DATA("FIRST_PAGE"), DATA("LAST_PAGE"), DATA("NEXT_FIELD"), DATA("PREV_FIELD"), DATA("FIRST_FIELD"), DATA("LAST_FIELD"), DATA("SNEXT_FIELD"), DATA("SPREV_FIELD"), DATA("SFIRST_FIELD"), DATA("SLAST_FIELD"), DATA("LEFT_FIELD"), DATA("RIGHT_FIELD"), DATA("UP_FIELD"), DATA("DOWN_FIELD"), DATA("NEXT_CHAR"), DATA("PREV_CHAR"), DATA("NEXT_LINE"), DATA("PREV_LINE"), DATA("NEXT_WORD"), DATA("PREV_WORD"), DATA("BEG_FIELD"), DATA("END_FIELD"), DATA("BEG_LINE"), DATA("END_LINE"), DATA("LEFT_CHAR"), DATA("RIGHT_CHAR"), DATA("UP_CHAR"), DATA("DOWN_CHAR"), DATA("NEW_LINE"), DATA("INS_CHAR"), DATA("INS_LINE"), DATA("DEL_CHAR"), DATA("DEL_PREV"), DATA("DEL_LINE"), DATA("DEL_WORD"), DATA("CLR_EOL"), DATA("CLR_EOF"), DATA("CLR_FIELD"), DATA("OVL_MODE"), DATA("INS_MODE"), DATA("SCR_FLINE"), DATA("SCR_BLINE"), DATA("SCR_FPAGE"), DATA("SCR_BPAGE"), DATA("SCR_FHPAGE"), DATA("SCR_BHPAGE"), DATA("SCR_FCHAR"), DATA("SCR_BCHAR"), DATA("SCR_HFLINE"), DATA("SCR_HBLINE"), DATA("SCR_HFHALF"), DATA("SCR_HBHALF"), DATA("VALIDATION"), DATA("NEXT_CHOICE"), DATA("PREV_CHOICE") }; #undef DATA #define A_SIZE (sizeof(request_names)/sizeof(request_names[0])) /*--------------------------------------------------------------------------- | Facility : libnform | Function : const char * form_request_name (int request); | | Description : Get the external name of a form request. | | Return Values : Pointer to name - on success | NULL - on invalid request code +--------------------------------------------------------------------------*/ NCURSES_EXPORT(const char *) form_request_name(int request) { T((T_CALLED("form_request_name(%d)"), request)); if ((request < MIN_FORM_COMMAND) || (request > MAX_FORM_COMMAND)) { SET_ERROR(E_BAD_ARGUMENT); returnCPtr((const char *)0); } else returnCPtr(request_names[request - MIN_FORM_COMMAND]); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int form_request_by_name (const char *str); | | Description : Search for a request with this name. | | Return Values : Request Id - on success | E_NO_MATCH - request not found +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) form_request_by_name(const char *str) { /* because the table is so small, it doesn't really hurt to run sequentially through it. */ size_t i = 0; char buf[16]; /* longest name is 10 chars */ T((T_CALLED("form_request_by_name(%s)"), _nc_visbuf(str))); if (str != 0 && (i = strlen(str)) != 0) { if (i > sizeof(buf) - 2) i = sizeof(buf) - 2; memcpy(buf, str, i); buf[i] = '\0'; for (i = 0; buf[i] != '\0'; ++i) { buf[i] = (char)toupper(UChar(buf[i])); } for (i = 0; i < A_SIZE; i++) { if (strcmp(request_names[i], buf) == 0) returnCode(MIN_FORM_COMMAND + (int)i); } } RETURN(E_NO_MATCH); } /* frm_req_name.c ends here */ ncurses-6.0-20160213/form/fty_alpha.c0000644000175100001440000001574111326663274015554 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /*************************************************************************** * * * Author : Juergen Pfeifer * * * ***************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fty_alpha.c,v 1.26 2010/01/23 21:14:36 tom Exp $") #define thisARG alphaARG typedef struct { int width; } thisARG; /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Generic_This_Type(va_list *ap) | | Description : Allocate structure for alpha type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Generic_This_Type(void *arg) { thisARG *argp = (thisARG *) 0; if (arg) { argp = typeMalloc(thisARG, 1); if (argp) { T((T_CREATE("thisARG %p"), (void *)argp)); argp->width = *((int *)arg); } } return ((void *)argp); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Make_This_Type(va_list *ap) | | Description : Allocate structure for alpha type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Make_This_Type(va_list *ap) { int w = va_arg(*ap, int); return Generic_This_Type((void *)&w); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Copy_This_Type(const void * argp) | | Description : Copy structure for alpha type argument. | | Return Values : Pointer to argument structure or NULL on error. +--------------------------------------------------------------------------*/ static void * Copy_This_Type(const void *argp) { const thisARG *ap = (const thisARG *)argp; thisARG *result = typeMalloc(thisARG, 1); if (result) { T((T_CREATE("thisARG %p"), (void *)result)); *result = *ap; } return ((void *)result); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Free_This_Type(void *argp) | | Description : Free structure for alpha type argument. | | Return Values : - +--------------------------------------------------------------------------*/ static void Free_This_Type(void *argp) { if (argp) free(argp); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_This_Character( | int c, | const void *argp) | | Description : Check a character for the alpha type. | | Return Values : TRUE - character is valid | FALSE - character is invalid +--------------------------------------------------------------------------*/ static bool Check_This_Character(int c, const void *argp GCC_UNUSED) { #if USE_WIDEC_SUPPORT if (iswalpha((wint_t) c)) return TRUE; #endif return (isalpha(UChar(c)) ? TRUE : FALSE); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_This_Field( | FIELD *field, | const void *argp) | | Description : Validate buffer content to be a valid alpha value | | Return Values : TRUE - field is valid | FALSE - field is invalid +--------------------------------------------------------------------------*/ static bool Check_This_Field(FIELD *field, const void *argp) { int width = ((const thisARG *)argp)->width; unsigned char *bp = (unsigned char *)field_buffer(field, 0); bool result = (width < 0); Check_CTYPE_Field(result, bp, width, Check_This_Character); return (result); } static FIELDTYPE typeTHIS = { _HAS_ARGS | _RESIDENT, 1, /* this is mutable, so we can't be const */ (FIELDTYPE *)0, (FIELDTYPE *)0, Make_This_Type, Copy_This_Type, Free_This_Type, INIT_FT_FUNC(Check_This_Field), INIT_FT_FUNC(Check_This_Character), INIT_FT_FUNC(NULL), INIT_FT_FUNC(NULL), #if NCURSES_INTEROP_FUNCS Generic_This_Type #endif }; NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_ALPHA = &typeTHIS; #if NCURSES_INTEROP_FUNCS /* The next routines are to simplify the use of ncurses from programming languages with restictions on interop with C level constructs (e.g. variable access or va_list + ellipsis constructs) */ NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ALPHA(void) { return TYPE_ALPHA; } #endif /* fty_alpha.c ends here */ ncurses-6.0-20160213/form/fld_stat.c0000644000175100001440000000737711764763225015416 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_stat.c,v 1.14 2012/06/10 00:13:09 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_status(FIELD *field, bool status) | | Description : Set or clear the 'changed' indication flag for that | fields primary buffer. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_field_status(FIELD *field, bool status) { T((T_CALLED("set_field_status(%p,%d)"), (void *)field, status)); Normalize_Field(field); if (status) SetStatus(field, _CHANGED); else ClrStatus(field, _CHANGED); RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : bool field_status(const FIELD *field) | | Description : Retrieve the value of the 'changed' indication flag | for that fields primary buffer. | | Return Values : TRUE - buffer has been changed | FALSE - buffer has not been changed +--------------------------------------------------------------------------*/ NCURSES_EXPORT(bool) field_status(const FIELD *field) { T((T_CALLED("field_status(%p)"), (const void *)field)); returnBool((Normalize_Field(field)->status & _CHANGED) ? TRUE : FALSE); } /* fld_stat.c ends here */ ncurses-6.0-20160213/form/Makefile.in0000644000175100001440000001260012560514435015470 0ustar tomusers# $Id: Makefile.in,v 1.63 2015/08/05 23:15:41 tom Exp $ ############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # # Makefile for form source code. # # This makes the following: # libraries (normal/debug/profile/shared) # # The variable 'srcdir' refers to the source-distribution, and can be set with # the configure script by "--srcdir=DIR". # # The rules are organized to produce the libraries for the configured models, # turn off _all_ suffix rules; we'll generate our own .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile x = @EXEEXT@ o = .@OBJEXT@ MODEL = @DFT_LWR_MODEL@ DESTDIR = @DESTDIR@ top_srcdir = @top_srcdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ includesubdir = @includesubdir@ INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir) PACKAGE = @PACKAGE@ LIBTOOL = @LIBTOOL@ LIBTOOL_OPTS = @LIBTOOL_OPTS@ @EXPORT_SYMS@ LIBTOOL_CLEAN = @LIB_CLEAN@ LIBTOOL_COMPILE = @LIB_COMPILE@ LIBTOOL_LINK = @LIB_LINK@ LIBTOOL_INSTALL = @LIB_INSTALL@ LIBTOOL_UNINSTALL = @LIB_UNINSTALL@ LT_UNDEF = @LT_UNDEF@ INSTALL = @INSTALL@ INSTALL_LIB = @INSTALL@ @INSTALL_LIB@ INSTALL_PROG = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ AR = @AR@ ARFLAGS = @ARFLAGS@ AWK = @AWK@ LD = @LD@ LN_S = @LN_S@ CTAGS = @CTAGS@ ETAGS = @ETAGS@ CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ CPPFLAGS = -I${top_srcdir}/ncurses -DHAVE_CONFIG_H @CPPFLAGS@ CCFLAGS = $(CPPFLAGS) $(CFLAGS) CFLAGS_LIBTOOL = $(CCFLAGS) CFLAGS_NORMAL = $(CCFLAGS) CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) LINK = $(LIBTOOL_LINK) LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@ SHLIB_DIRS = -L../lib SHLIB_LIST = $(SHLIB_DIRS) -lncurses@USE_LIB_SUFFIX@ @SHLIB_LIST@ RPATH_LIST = @RPATH_LIST@ RESULTING_SYMS = @RESULTING_SYMS@ VERSIONED_SYMS = @VERSIONED_SYMS@ MK_SHARED_LIB = @MK_SHARED_LIB@ NCURSES_MAJOR = @NCURSES_MAJOR@ NCURSES_MINOR = @NCURSES_MINOR@ REL_VERSION = @cf_cv_rel_version@ ABI_VERSION = @cf_cv_abi_version@ RANLIB = @LIB_PREP@ LIBRARIES = @Libs_To_Make@ LINT = @LINT@ LINT_OPTS = @LINT_OPTS@ LINT_LIBS = -lform -lncurses @LIBS@ AUTO_SRC = \ ../include/form.h ################################################################################ all \ libs \ install :: $(AUTO_SRC) $(LIBRARIES) sources : $(AUTO_SRC) $(DESTDIR)$(bindir) \ $(DESTDIR)$(libdir) : mkdir -p $@ # make copies to simplify include-paths while still keeping form's include # file in this directory. ../include/form.h : $(srcdir)/form.h -rm -f $@ cp $(srcdir)/form.h $@ HEADER_DEPS = \ $(srcdir)/form.priv.h \ $(srcdir)/form.h \ ../include/mf_common.h \ ../include/curses.h \ ../include/eti.h tags: $(CTAGS) *.[ch] @MAKE_UPPER_TAGS@TAGS: @MAKE_UPPER_TAGS@ $(ETAGS) *.[ch] mostlyclean :: -rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace clean :: mostlyclean -rm -f $(AUTO_SRC) distclean :: clean -rm -f Makefile -rm -rf .libs *.dSYM realclean :: distclean ../include/mf_common.h \ ../include/eti.h : cd ../menu && $(MAKE) $@ ############################################################################### # The remainder of this file is automatically generated during configuration ############################################################################### ncurses-6.0-20160213/form/fld_page.c0000644000175100001440000000751511764763177015357 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_page.c,v 1.12 2012/06/10 00:12:47 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_new_page(FIELD *field, bool new_page_flag) | | Description : Marks the field as the beginning of a new page of | the form. | | Return Values : E_OK - success | E_CONNECTED - field is connected +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_new_page(FIELD *field, bool new_page_flag) { T((T_CALLED("set_new_page(%p,%d)"), (void *)field, new_page_flag)); Normalize_Field(field); if (field->form) RETURN(E_CONNECTED); if (new_page_flag) SetStatus(field, _NEWPAGE); else ClrStatus(field, _NEWPAGE); RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : bool new_page(const FIELD *field) | | Description : Retrieve the info whether or not the field starts a | new page on the form. | | Return Values : TRUE - field starts a new page | FALSE - field doesn't start a new page +--------------------------------------------------------------------------*/ NCURSES_EXPORT(bool) new_page(const FIELD *field) { T((T_CALLED("new_page(%p)"), (const void *)field)); returnBool((Normalize_Field(field)->status & _NEWPAGE) ? TRUE : FALSE); } /* fld_page.c ends here */ ncurses-6.0-20160213/form/fld_arg.c0000644000175100001440000001151112650770520015164 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_arg.c,v 1.14 2016/01/23 21:32:00 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_fieldtype_arg( | FIELDTYPE *typ, | void * (* const make_arg)(va_list *), | void * (* const copy_arg)(const void *), | void (* const free_arg)(void *) ) | | Description : Connects to the type additional arguments necessary | for a set_field_type call. The various function pointer | arguments are: | make_arg : allocates a structure for the field | specific parameters. | copy_arg : duplicate the structure created by | make_arg | free_arg : Release the memory allocated by make_arg | or copy_arg | | At least make_arg must be non-NULL. | You may pass NULL for copy_arg and free_arg if your | make_arg function doesn't allocate memory and your | arg fits into the storage for a (void*). | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid argument +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_fieldtype_arg(FIELDTYPE *typ, void *(*const make_arg)(va_list *), void *(*const copy_arg)(const void *), void (*const free_arg) (void *)) { T((T_CALLED("set_fieldtype_arg(%p,%p,%p,%p)"), (void *)typ, TR_FUNC(make_arg), TR_FUNC(copy_arg), TR_FUNC(free_arg))); if (typ != 0 && make_arg != (void *)0) { SetStatus(typ, _HAS_ARGS); typ->makearg = make_arg; typ->copyarg = copy_arg; typ->freearg = free_arg; RETURN(E_OK); } RETURN(E_BAD_ARGUMENT); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : void *field_arg(const FIELD *field) | | Description : Retrieve pointer to the fields argument structure. | | Return Values : Pointer to structure or NULL if none is defined. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void *) field_arg(const FIELD *field) { T((T_CALLED("field_arg(%p)"), (const void *)field)); returnVoidPtr(Normalize_Field(field)->arg); } /* fld_arg.c ends here */ ncurses-6.0-20160213/form/fld_ftchoice.c0000644000175100001440000000710412650770520016202 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_ftchoice.c,v 1.14 2016/01/23 21:32:00 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_fieldtype_choice( | FIELDTYPE *typ, | bool (* const next_choice)(FIELD *,const void *), | bool (* const prev_choice)(FIELD *,const void *)) | | Description : Define implementation of enumeration requests. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid arguments +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_fieldtype_choice(FIELDTYPE *typ, bool (*const next_choice) (FIELD *, const void *), bool (*const prev_choice) (FIELD *, const void *)) { T((T_CALLED("set_fieldtype_choice(%p,%p,%p)"), (void *)typ, TR_FUNC(next_choice), TR_FUNC(prev_choice))); if (!typ || !next_choice || !prev_choice) RETURN(E_BAD_ARGUMENT); SetStatus(typ, _HAS_CHOICE); #if NCURSES_INTEROP_FUNCS typ->enum_next.onext = next_choice; typ->enum_prev.oprev = prev_choice; #else typ->next = next_choice; typ->prev = prev_choice; #endif RETURN(E_OK); } /* fld_ftchoice.c ends here */ ncurses-6.0-20160213/form/fty_enum.c0000644000175100001440000003070111367114353015416 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /*************************************************************************** * * * Author : Juergen Pfeifer * * * ***************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fty_enum.c,v 1.26 2010/05/01 21:11:07 tom Exp $") typedef struct { char **kwds; int count; bool checkcase; bool checkunique; } enumARG; typedef struct { char **kwds; int ccase; int cunique; } enumParams; /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Generic_Enum_Type(void * arg) | | Description : Allocate structure for enumeration type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Generic_Enum_Type(void *arg) { enumARG *argp = (enumARG *)0; enumParams *params = (enumParams *) arg; if (params) { argp = typeMalloc(enumARG, 1); if (argp) { int cnt = 0; char **kp = (char **)0; char **kwds = (char **)0; char **kptarget; int ccase, cunique; T((T_CREATE("enumARG %p"), (void *)argp)); kwds = params->kwds; ccase = params->ccase; cunique = params->cunique; argp->checkcase = ccase ? TRUE : FALSE; argp->checkunique = cunique ? TRUE : FALSE; argp->kwds = (char **)0; kp = kwds; while (kp && (*kp++)) cnt++; argp->count = cnt; if (cnt > 0) { /* We copy the keywords, because we can't rely on the fact that the caller doesn't relocate or free the memory used for the keywords (maybe he has GC) */ argp->kwds = typeMalloc(char *, cnt + 1); kp = kwds; if ((kptarget = argp->kwds) != 0) { while (kp && (*kp)) { (*kptarget++) = strdup(*kp++); } *kptarget = (char *)0; } } } } return (void *)argp; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Make_Enum_Type( va_list * ap ) | | Description : Allocate structure for enumeration type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Make_Enum_Type(va_list *ap) { enumParams params; params.kwds = va_arg(*ap, char **); params.ccase = va_arg(*ap, int); params.cunique = va_arg(*ap, int); return Generic_Enum_Type((void *)¶ms); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Copy_Enum_Type( const void * argp ) | | Description : Copy structure for enumeration type argument. | | Return Values : Pointer to argument structure or NULL on error. +--------------------------------------------------------------------------*/ static void * Copy_Enum_Type(const void *argp) { enumARG *result = (enumARG *)0; if (argp) { const enumARG *ap = (const enumARG *)argp; result = typeMalloc(enumARG, 1); if (result) { T((T_CREATE("enumARG %p"), (void *)result)); *result = *ap; if (ap->count > 0) { char **kptarget; char **kp = ap->kwds; result->kwds = typeMalloc(char *, 1 + ap->count); if ((kptarget = result->kwds) != 0) { while (kp && (*kp)) { (*kptarget++) = strdup(*kp++); } *kptarget = (char *)0; } } } } return (void *)result; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Free_Enum_Type( void * argp ) | | Description : Free structure for enumeration type argument. | | Return Values : - +--------------------------------------------------------------------------*/ static void Free_Enum_Type(void *argp) { if (argp) { const enumARG *ap = (const enumARG *)argp; if (ap->kwds && ap->count > 0) { char **kp = ap->kwds; int cnt = 0; while (kp && (*kp)) { free(*kp++); cnt++; } assert(cnt == ap->count); free(ap->kwds); } free(argp); } } #define SKIP_SPACE(x) while(((*(x))!='\0') && (is_blank(*(x)))) (x)++ #define NOMATCH 0 #define PARTIAL 1 #define EXACT 2 /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Compare(const unsigned char * s, | const unsigned char * buf, | bool ccase ) | | Description : Check whether or not the text in 'buf' matches the | text in 's', at least partial. | | Return Values : NOMATCH - buffer doesn't match | PARTIAL - buffer matches partially | EXACT - buffer matches exactly +--------------------------------------------------------------------------*/ static int Compare(const unsigned char *s, const unsigned char *buf, bool ccase) { SKIP_SPACE(buf); /* Skip leading spaces in both texts */ SKIP_SPACE(s); if (*buf == '\0') { return (((*s) != '\0') ? NOMATCH : EXACT); } else { if (ccase) { while (*s++ == *buf) { if (*buf++ == '\0') return EXACT; } } else { while (toupper(*s++) == toupper(*buf)) { if (*buf++ == '\0') return EXACT; } } } /* At this location buf points to the first character where it no longer matches with s. So if only blanks are following, we have a partial match otherwise there is no match */ SKIP_SPACE(buf); if (*buf) return NOMATCH; /* If it happens that the reference buffer is at its end, the partial match is actually an exact match. */ return ((s[-1] != '\0') ? PARTIAL : EXACT); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_Enum_Field( | FIELD * field, | const void * argp) | | Description : Validate buffer content to be a valid enumeration value | | Return Values : TRUE - field is valid | FALSE - field is invalid +--------------------------------------------------------------------------*/ static bool Check_Enum_Field(FIELD *field, const void *argp) { char **kwds = ((const enumARG *)argp)->kwds; bool ccase = ((const enumARG *)argp)->checkcase; bool unique = ((const enumARG *)argp)->checkunique; unsigned char *bp = (unsigned char *)field_buffer(field, 0); char *s, *t, *p; int res; while (kwds && (s = (*kwds++))) { if ((res = Compare((unsigned char *)s, bp, ccase)) != NOMATCH) { p = t = s; /* t is at least a partial match */ if ((unique && res != EXACT)) { while (kwds && (p = *kwds++)) { if ((res = Compare((unsigned char *)p, bp, ccase)) != NOMATCH) { if (res == EXACT) { t = p; break; } else t = (char *)0; } } } if (t) { set_field_buffer(field, 0, t); return TRUE; } if (!p) break; } } return FALSE; } static const char *dummy[] = {(char *)0}; /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Next_Enum(FIELD * field, | const void * argp) | | Description : Check for the next enumeration value | | Return Values : TRUE - next value found and loaded | FALSE - no next value loaded +--------------------------------------------------------------------------*/ static bool Next_Enum(FIELD *field, const void *argp) { const enumARG *args = (const enumARG *)argp; char **kwds = args->kwds; bool ccase = args->checkcase; int cnt = args->count; unsigned char *bp = (unsigned char *)field_buffer(field, 0); if (kwds) { while (cnt--) { if (Compare((unsigned char *)(*kwds++), bp, ccase) == EXACT) break; } if (cnt <= 0) kwds = args->kwds; if ((cnt >= 0) || (Compare((const unsigned char *)dummy, bp, ccase) == EXACT)) { set_field_buffer(field, 0, *kwds); return TRUE; } } return FALSE; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Previous_Enum( | FIELD * field, | const void * argp) | | Description : Check for the previous enumeration value | | Return Values : TRUE - previous value found and loaded | FALSE - no previous value loaded +--------------------------------------------------------------------------*/ static bool Previous_Enum(FIELD *field, const void *argp) { const enumARG *args = (const enumARG *)argp; int cnt = args->count; char **kwds = &args->kwds[cnt - 1]; bool ccase = args->checkcase; unsigned char *bp = (unsigned char *)field_buffer(field, 0); if (kwds) { while (cnt--) { if (Compare((unsigned char *)(*kwds--), bp, ccase) == EXACT) break; } if (cnt <= 0) kwds = &args->kwds[args->count - 1]; if ((cnt >= 0) || (Compare((const unsigned char *)dummy, bp, ccase) == EXACT)) { set_field_buffer(field, 0, *kwds); return TRUE; } } return FALSE; } static FIELDTYPE typeENUM = { _HAS_ARGS | _HAS_CHOICE | _RESIDENT, 1, /* this is mutable, so we can't be const */ (FIELDTYPE *)0, (FIELDTYPE *)0, Make_Enum_Type, Copy_Enum_Type, Free_Enum_Type, INIT_FT_FUNC(Check_Enum_Field), INIT_FT_FUNC(NULL), INIT_FT_FUNC(Next_Enum), INIT_FT_FUNC(Previous_Enum), #if NCURSES_INTEROP_FUNCS Generic_Enum_Type #endif }; NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM = &typeENUM; #if NCURSES_INTEROP_FUNCS /* The next routines are to simplify the use of ncurses from programming languages with restictions on interop with C level constructs (e.g. variable access or va_list + ellipsis constructs) */ NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ENUM(void) { return TYPE_ENUM; } #endif /* fty_enum.c ends here */ ncurses-6.0-20160213/form/fld_max.c0000644000175100001440000000720112206235320015170 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_max.c,v 1.13 2013/08/24 22:59:28 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_max_field(FIELD *field, int maxgrow) | | Description : Set the maximum growth for a dynamic field. If maxgrow=0 | the field may grow to any possible size. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid argument +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_max_field(FIELD *field, int maxgrow) { T((T_CALLED("set_max_field(%p,%d)"), (void *)field, maxgrow)); if (!field || (maxgrow < 0)) RETURN(E_BAD_ARGUMENT); else { bool single_line_field = Single_Line_Field(field); if (maxgrow > 0) { if ((single_line_field && (maxgrow < field->dcols)) || (!single_line_field && (maxgrow < field->drows))) RETURN(E_BAD_ARGUMENT); } field->maxgrow = maxgrow; ClrStatus(field, _MAY_GROW); if (!((unsigned)field->opts & O_STATIC)) { if ((maxgrow == 0) || (single_line_field && (field->dcols < maxgrow)) || (!single_line_field && (field->drows < maxgrow))) SetStatus(field, _MAY_GROW); } } RETURN(E_OK); } /* fld_max.c ends here */ ncurses-6.0-20160213/form/llib-lformt0000644000175100001440000003647212563672563015620 0ustar tomusers/**************************************************************************** * Copyright (c) 2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2010-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./f_trace.c */ #include #undef _nc_retrace_field_ptr FIELD **_nc_retrace_field_ptr( FIELD **code) { return(*(FIELD ***)0); } #undef _nc_retrace_field FIELD *_nc_retrace_field( FIELD *code) { return(*(FIELD **)0); } #undef _nc_retrace_field_type FIELDTYPE *_nc_retrace_field_type( FIELDTYPE *code) { return(*(FIELDTYPE **)0); } #undef _nc_retrace_form FORM *_nc_retrace_form( FORM *code) { return(*(FORM **)0); } #undef _nc_retrace_form_hook Form_Hook _nc_retrace_form_hook( Form_Hook code) { return(*(Form_Hook *)0); } /* ./fld_arg.c */ #undef set_fieldtype_arg int set_fieldtype_arg( FIELDTYPE *typ, void *(*const make_arg)( va_list *p1), void *(*const copy_arg)( const void *p1), void (*const free_arg)( void *p1)) { return(*(int *)0); } #undef field_arg void *field_arg( const FIELD *field) { return(*(void **)0); } /* ./fld_attr.c */ #undef set_field_fore int set_field_fore( FIELD *field, chtype attr) { return(*(int *)0); } #undef field_fore chtype field_fore( const FIELD *field) { return(*(chtype *)0); } #undef set_field_back int set_field_back( FIELD *field, chtype attr) { return(*(int *)0); } #undef field_back chtype field_back( const FIELD *field) { return(*(chtype *)0); } /* ./fld_current.c */ #undef set_current_field int set_current_field( FORM *form, FIELD *field) { return(*(int *)0); } #undef current_field FIELD *current_field( const FORM *form) { return(*(FIELD **)0); } #undef field_index int field_index( const FIELD *field) { return(*(int *)0); } /* ./fld_def.c */ #undef _nc_Default_Field FIELD *_nc_Default_Field; #undef _nc_Make_Argument TypeArgument *_nc_Make_Argument( const FIELDTYPE *typ, va_list *ap, int *err) { return(*(TypeArgument **)0); } #undef _nc_Copy_Argument TypeArgument *_nc_Copy_Argument( const FIELDTYPE *typ, const TypeArgument *argp, int *err) { return(*(TypeArgument **)0); } #undef _nc_Free_Argument void _nc_Free_Argument( const FIELDTYPE *typ, TypeArgument *argp) { /* void */ } #undef _nc_Copy_Type NCURSES_BOOL _nc_Copy_Type( FIELD *dst, FIELD const *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_Free_Type void _nc_Free_Type( FIELD *field) { /* void */ } #undef new_field FIELD *new_field( int rows, int cols, int frow, int fcol, int nrow, int nbuf) { return(*(FIELD **)0); } #undef free_field int free_field( FIELD *field) { return(*(int *)0); } /* ./fld_dup.c */ #undef dup_field FIELD *dup_field( FIELD *field, int frow, int fcol) { return(*(FIELD **)0); } /* ./fld_ftchoice.c */ #undef set_fieldtype_choice int set_fieldtype_choice( FIELDTYPE *typ, NCURSES_BOOL (*const next_choice)( FIELD *p1, const void *p2), NCURSES_BOOL (*const prev_choice)( FIELD *p1, const void *p2)) { return(*(int *)0); } /* ./fld_ftlink.c */ #undef link_fieldtype FIELDTYPE *link_fieldtype( FIELDTYPE *type1, FIELDTYPE *type2) { return(*(FIELDTYPE **)0); } /* ./fld_info.c */ #undef field_info int field_info( const FIELD *field, int *rows, int *cols, int *frow, int *fcol, int *nrow, int *nbuf) { return(*(int *)0); } #undef dynamic_field_info int dynamic_field_info( const FIELD *field, int *drows, int *dcols, int *maxgrow) { return(*(int *)0); } /* ./fld_just.c */ #undef set_field_just int set_field_just( FIELD *field, int just) { return(*(int *)0); } #undef field_just int field_just( const FIELD *field) { return(*(int *)0); } /* ./fld_link.c */ #undef link_field FIELD *link_field( FIELD *field, int frow, int fcol) { return(*(FIELD **)0); } /* ./fld_max.c */ #undef set_max_field int set_max_field( FIELD *field, int maxgrow) { return(*(int *)0); } /* ./fld_move.c */ #undef move_field int move_field( FIELD *field, int frow, int fcol) { return(*(int *)0); } /* ./fld_newftyp.c */ #undef _nc_Default_FieldType FIELDTYPE *_nc_Default_FieldType; #undef new_fieldtype FIELDTYPE *new_fieldtype( NCURSES_BOOL (*const field_check)( FIELD *p1, const void *p2), NCURSES_BOOL (*const char_check)( int p1, const void *p2)) { return(*(FIELDTYPE **)0); } #undef free_fieldtype int free_fieldtype( FIELDTYPE *typ) { return(*(int *)0); } /* ./fld_opts.c */ #undef set_field_opts int set_field_opts( FIELD *field, Field_Options opts) { return(*(int *)0); } #undef field_opts Field_Options field_opts( const FIELD *field) { return(*(Field_Options *)0); } #undef field_opts_on int field_opts_on( FIELD *field, Field_Options opts) { return(*(int *)0); } #undef field_opts_off int field_opts_off( FIELD *field, Field_Options opts) { return(*(int *)0); } /* ./fld_pad.c */ #undef set_field_pad int set_field_pad( FIELD *field, int ch) { return(*(int *)0); } #undef field_pad int field_pad( const FIELD *field) { return(*(int *)0); } /* ./fld_page.c */ #undef set_new_page int set_new_page( FIELD *field, NCURSES_BOOL new_page_flag) { return(*(int *)0); } #undef new_page NCURSES_BOOL new_page( const FIELD *field) { return(*(NCURSES_BOOL *)0); } /* ./fld_stat.c */ #undef set_field_status int set_field_status( FIELD *field, NCURSES_BOOL status) { return(*(int *)0); } #undef field_status NCURSES_BOOL field_status( const FIELD *field) { return(*(NCURSES_BOOL *)0); } /* ./fld_type.c */ #undef set_field_type int set_field_type( FIELD *field, FIELDTYPE *type, ...) { return(*(int *)0); } #undef field_type FIELDTYPE *field_type( const FIELD *field) { return(*(FIELDTYPE **)0); } /* ./fld_user.c */ #undef set_field_userptr int set_field_userptr( FIELD *field, void *usrptr) { return(*(int *)0); } #undef field_userptr void *field_userptr( const FIELD *field) { return(*(void **)0); } /* ./frm_cursor.c */ #undef pos_form_cursor int pos_form_cursor( FORM *form) { return(*(int *)0); } /* ./frm_data.c */ #undef data_behind NCURSES_BOOL data_behind( const FORM *form) { return(*(NCURSES_BOOL *)0); } #undef data_ahead NCURSES_BOOL data_ahead( const FORM *form) { return(*(NCURSES_BOOL *)0); } /* ./frm_def.c */ #undef _nc_Default_Form FORM *_nc_Default_Form; #undef new_form_sp FORM *new_form_sp( SCREEN *sp, FIELD **fields) { return(*(FORM **)0); } #undef new_form FORM *new_form( FIELD **fields) { return(*(FORM **)0); } #undef free_form int free_form( FORM *form) { return(*(int *)0); } #undef set_form_fields int set_form_fields( FORM *form, FIELD **fields) { return(*(int *)0); } #undef form_fields FIELD **form_fields( const FORM *form) { return(*(FIELD ***)0); } #undef field_count int field_count( const FORM *form) { return(*(int *)0); } /* ./frm_driver.c */ #undef _nc_get_fieldbuffer void _nc_get_fieldbuffer( FORM *form, FIELD *field, char *buf) { /* void */ } #undef _nc_Position_Form_Cursor int _nc_Position_Form_Cursor( FORM *form) { return(*(int *)0); } #undef _nc_Refresh_Current_Field int _nc_Refresh_Current_Field( FORM *form) { return(*(int *)0); } #undef _nc_Synchronize_Attributes int _nc_Synchronize_Attributes( FIELD *field) { return(*(int *)0); } #undef _nc_Synchronize_Options int _nc_Synchronize_Options( FIELD *field, Field_Options newopts) { return(*(int *)0); } #undef _nc_Set_Current_Field int _nc_Set_Current_Field( FORM *form, FIELD *newfield) { return(*(int *)0); } #undef _nc_Internal_Validation NCURSES_BOOL _nc_Internal_Validation( FORM *form) { return(*(NCURSES_BOOL *)0); } #undef _nc_First_Active_Field FIELD *_nc_First_Active_Field( FORM *form) { return(*(FIELD **)0); } #undef _nc_Set_Form_Page int _nc_Set_Form_Page( FORM *form, int page, FIELD *field) { return(*(int *)0); } typedef struct { int keycode; int (*cmd) (FORM *); } Binding_Info; #undef form_driver int form_driver( FORM *form, int c) { return(*(int *)0); } #undef set_field_buffer int set_field_buffer( FIELD *field, int buffer, const char *value) { return(*(int *)0); } #undef field_buffer char *field_buffer( const FIELD *field, int buffer) { return(*(char **)0); } /* ./frm_hook.c */ #undef set_field_init int set_field_init( FORM *form, Form_Hook func) { return(*(int *)0); } #undef field_init Form_Hook field_init( const FORM *form) { return(*(Form_Hook *)0); } #undef set_field_term int set_field_term( FORM *form, Form_Hook func) { return(*(int *)0); } #undef field_term Form_Hook field_term( const FORM *form) { return(*(Form_Hook *)0); } #undef set_form_init int set_form_init( FORM *form, Form_Hook func) { return(*(int *)0); } #undef form_init Form_Hook form_init( const FORM *form) { return(*(Form_Hook *)0); } #undef set_form_term int set_form_term( FORM *form, Form_Hook func) { return(*(int *)0); } #undef form_term Form_Hook form_term( const FORM *form) { return(*(Form_Hook *)0); } /* ./frm_opts.c */ #undef set_form_opts int set_form_opts( FORM *form, Form_Options opts) { return(*(int *)0); } #undef form_opts Form_Options form_opts( const FORM *form) { return(*(Form_Options *)0); } #undef form_opts_on int form_opts_on( FORM *form, Form_Options opts) { return(*(int *)0); } #undef form_opts_off int form_opts_off( FORM *form, Form_Options opts) { return(*(int *)0); } /* ./frm_page.c */ #undef set_form_page int set_form_page( FORM *form, int page) { return(*(int *)0); } #undef form_page int form_page( const FORM *form) { return(*(int *)0); } /* ./frm_post.c */ #undef post_form int post_form( FORM *form) { return(*(int *)0); } #undef unpost_form int unpost_form( FORM *form) { return(*(int *)0); } /* ./frm_req_name.c */ #undef form_request_name const char *form_request_name( int request) { return(*(const char **)0); } #undef form_request_by_name int form_request_by_name( const char *str) { return(*(int *)0); } /* ./frm_scale.c */ #undef scale_form int scale_form( const FORM *form, int *rows, int *cols) { return(*(int *)0); } /* ./frm_sub.c */ #undef set_form_sub int set_form_sub( FORM *form, WINDOW *win) { return(*(int *)0); } #undef form_sub WINDOW *form_sub( const FORM *form) { return(*(WINDOW **)0); } /* ./frm_user.c */ #undef set_form_userptr int set_form_userptr( FORM *form, void *usrptr) { return(*(int *)0); } #undef form_userptr void *form_userptr( const FORM *form) { return(*(void **)0); } /* ./frm_win.c */ #undef set_form_win int set_form_win( FORM *form, WINDOW *win) { return(*(int *)0); } #undef form_win WINDOW *form_win( const FORM *form) { return(*(WINDOW **)0); } /* ./fty_alnum.c */ typedef struct { int width; } alnumARG; #undef TYPE_ALNUM FIELDTYPE *TYPE_ALNUM; #undef _nc_TYPE_ALNUM FIELDTYPE *_nc_TYPE_ALNUM(void) { return(*(FIELDTYPE **)0); } /* ./fty_alpha.c */ typedef struct { int width; } alphaARG; #undef TYPE_ALPHA FIELDTYPE *TYPE_ALPHA; #undef _nc_TYPE_ALPHA FIELDTYPE *_nc_TYPE_ALPHA(void) { return(*(FIELDTYPE **)0); } /* ./fty_enum.c */ typedef struct { char **kwds; int count; NCURSES_BOOL checkcase; NCURSES_BOOL checkunique; } enumARG; typedef struct { char **kwds; int ccase; int cunique; } enumParams; #undef TYPE_ENUM FIELDTYPE *TYPE_ENUM; #undef _nc_TYPE_ENUM FIELDTYPE *_nc_TYPE_ENUM(void) { return(*(FIELDTYPE **)0); } /* ./fty_generic.c */ #undef _nc_generic_fieldtype FIELDTYPE *_nc_generic_fieldtype( NCURSES_BOOL (*const field_check)( FORM *p1, FIELD *p2, const void *p3), NCURSES_BOOL (*const char_check)( int p1, FORM *p2, FIELD *p3, const void *p4), NCURSES_BOOL (*const next)( FORM *p1, FIELD *p2, const void *p3), NCURSES_BOOL (*const prev)( FORM *p1, FIELD *p2, const void *p3), void (*freecallback)( void *p1)) { return(*(FIELDTYPE **)0); } #undef _nc_set_generic_fieldtype int _nc_set_generic_fieldtype( FIELD *field, FIELDTYPE *ftyp, int (*argiterator)( void **p1)) { return(*(int *)0); } #undef _nc_form_cursor WINDOW *_nc_form_cursor( const FORM *form, int *pRow, int *pCol) { return(*(WINDOW **)0); } /* ./fty_int.c */ typedef struct { int precision; long low; long high; } integerARG; typedef struct { int precision; long low; long high; } integerPARM; #undef TYPE_INTEGER FIELDTYPE *TYPE_INTEGER; #undef _nc_TYPE_INTEGER FIELDTYPE *_nc_TYPE_INTEGER(void) { return(*(FIELDTYPE **)0); } /* ./fty_ipv4.c */ #undef TYPE_IPV4 FIELDTYPE *TYPE_IPV4; #undef _nc_TYPE_IPV4 FIELDTYPE *_nc_TYPE_IPV4(void) { return(*(FIELDTYPE **)0); } /* ./fty_num.c */ typedef struct { int precision; double low; double high; struct lconv *L; } numericARG; typedef struct { int precision; double low; double high; } thisPARM; #undef TYPE_NUMERIC FIELDTYPE *TYPE_NUMERIC; #undef _nc_TYPE_NUMERIC FIELDTYPE *_nc_TYPE_NUMERIC(void) { return(*(FIELDTYPE **)0); } /* ./fty_regex.c */ typedef struct { regex_t *pRegExp; unsigned long *refCount; } RegExp_Arg; #undef TYPE_REGEXP FIELDTYPE *TYPE_REGEXP; #undef _nc_TYPE_REGEXP FIELDTYPE *_nc_TYPE_REGEXP(void) { return(*(FIELDTYPE **)0); } ncurses-6.0-20160213/form/form.h0000644000175100001440000004347712626405363014561 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ /* $Id: form.h,v 0.25 2015/11/28 20:13:39 Leon.Winter Exp $ */ #ifndef FORM_H #define FORM_H /* *INDENT-OFF*/ #include #include #ifdef __cplusplus extern "C" { #endif #ifndef FORM_PRIV_H typedef void *FIELD_CELL; #endif #ifndef NCURSES_FIELD_INTERNALS #define NCURSES_FIELD_INTERNALS /* nothing */ #endif typedef int Form_Options; typedef int Field_Options; /********** * _PAGE * **********/ typedef struct { short pmin; /* index of first field on page */ short pmax; /* index of last field on page */ short smin; /* index of top leftmost field on page */ short smax; /* index of bottom rightmost field on page */ } _PAGE; /********** * FIELD * **********/ typedef struct fieldnode { unsigned short status; /* flags */ short rows; /* size in rows */ short cols; /* size in cols */ short frow; /* first row */ short fcol; /* first col */ int drows; /* dynamic rows */ int dcols; /* dynamic cols */ int maxgrow; /* maximum field growth */ int nrow; /* off-screen rows */ short nbuf; /* additional buffers */ short just; /* justification */ short page; /* page on form */ short index; /* into form -> field */ int pad; /* pad character */ chtype fore; /* foreground attribute */ chtype back; /* background attribute */ Field_Options opts; /* options */ struct fieldnode * snext; /* sorted order pointer */ struct fieldnode * sprev; /* sorted order pointer */ struct fieldnode * link; /* linked field chain */ struct formnode * form; /* containing form */ struct typenode * type; /* field type */ void * arg; /* argument for type */ FIELD_CELL * buf; /* field buffers */ void * usrptr; /* user pointer */ /* * The wide-character configuration requires extra information. Because * there are existing applications that manipulate the members of FIELD * directly, we cannot make the struct opaque. Offsets of members up to * this point are the same in the narrow- and wide-character configuration. * But note that the type of buf depends on the configuration, and is made * opaque for that reason. */ NCURSES_FIELD_INTERNALS } FIELD; /********* * FORM * *********/ typedef struct formnode { unsigned short status; /* flags */ short rows; /* size in rows */ short cols; /* size in cols */ int currow; /* current row in field window */ int curcol; /* current col in field window */ int toprow; /* in scrollable field window */ int begincol; /* in horiz. scrollable field */ short maxfield; /* number of fields */ short maxpage; /* number of pages */ short curpage; /* index into page */ Form_Options opts; /* options */ WINDOW * win; /* window */ WINDOW * sub; /* subwindow */ WINDOW * w; /* window for current field */ FIELD ** field; /* field [maxfield] */ FIELD * current; /* current field */ _PAGE * page; /* page [maxpage] */ void * usrptr; /* user pointer */ void (*forminit)(struct formnode *); void (*formterm)(struct formnode *); void (*fieldinit)(struct formnode *); void (*fieldterm)(struct formnode *); } FORM; /************** * FIELDTYPE * **************/ typedef struct typenode { unsigned short status; /* flags */ long ref; /* reference count */ struct typenode * left; /* ptr to operand for | */ struct typenode * right; /* ptr to operand for | */ void* (*makearg)(va_list *); /* make fieldtype arg */ void* (*copyarg)(const void *); /* copy fieldtype arg */ void (*freearg)(void *); /* free fieldtype arg */ #if NCURSES_INTEROP_FUNCS union { bool (*ofcheck)(FIELD *,const void *); /* field validation */ bool (*gfcheck)(FORM*,FIELD *,const void*); /* generic field validation */ } fieldcheck; union { bool (*occheck)(int,const void *); /* character validation */ bool (*gccheck)(int,FORM*, FIELD*,const void*); /* generic char validation */ } charcheck; union { bool (*onext)(FIELD *,const void *); /* enumerate next value */ bool (*gnext)(FORM*,FIELD*,const void*); /* generic enumerate next */ } enum_next; union { bool (*oprev)(FIELD *,const void *); /* enumerate prev value */ bool (*gprev)(FORM*,FIELD*,const void*); /* generic enumerate prev */ } enum_prev; void* (*genericarg)(void*); /* Alternate Arg method */ #else bool (*fcheck)(FIELD *,const void *); /* field validation */ bool (*ccheck)(int,const void *); /* character validation */ bool (*next)(FIELD *,const void *); /* enumerate next value */ bool (*prev)(FIELD *,const void *); /* enumerate prev value */ #endif } FIELDTYPE; typedef void (*Form_Hook)(FORM *); /*************************** * miscellaneous #defines * ***************************/ /* field justification */ #define NO_JUSTIFICATION (0) #define JUSTIFY_LEFT (1) #define JUSTIFY_CENTER (2) #define JUSTIFY_RIGHT (3) /* field options */ #define O_VISIBLE (0x0001U) #define O_ACTIVE (0x0002U) #define O_PUBLIC (0x0004U) #define O_EDIT (0x0008U) #define O_WRAP (0x0010U) #define O_BLANK (0x0020U) #define O_AUTOSKIP (0x0040U) #define O_NULLOK (0x0080U) #define O_PASSOK (0x0100U) #define O_STATIC (0x0200U) #define O_DYNAMIC_JUSTIFY (0x0400U) /* ncurses extension */ #define O_NO_LEFT_STRIP (0x0800U) /* ncurses extension */ /* form options */ #define O_NL_OVERLOAD (0x0001U) #define O_BS_OVERLOAD (0x0002U) /* form driver commands */ #define REQ_NEXT_PAGE (KEY_MAX + 1) /* move to next page */ #define REQ_PREV_PAGE (KEY_MAX + 2) /* move to previous page */ #define REQ_FIRST_PAGE (KEY_MAX + 3) /* move to first page */ #define REQ_LAST_PAGE (KEY_MAX + 4) /* move to last page */ #define REQ_NEXT_FIELD (KEY_MAX + 5) /* move to next field */ #define REQ_PREV_FIELD (KEY_MAX + 6) /* move to previous field */ #define REQ_FIRST_FIELD (KEY_MAX + 7) /* move to first field */ #define REQ_LAST_FIELD (KEY_MAX + 8) /* move to last field */ #define REQ_SNEXT_FIELD (KEY_MAX + 9) /* move to sorted next field */ #define REQ_SPREV_FIELD (KEY_MAX + 10) /* move to sorted prev field */ #define REQ_SFIRST_FIELD (KEY_MAX + 11) /* move to sorted first field */ #define REQ_SLAST_FIELD (KEY_MAX + 12) /* move to sorted last field */ #define REQ_LEFT_FIELD (KEY_MAX + 13) /* move to left to field */ #define REQ_RIGHT_FIELD (KEY_MAX + 14) /* move to right to field */ #define REQ_UP_FIELD (KEY_MAX + 15) /* move to up to field */ #define REQ_DOWN_FIELD (KEY_MAX + 16) /* move to down to field */ #define REQ_NEXT_CHAR (KEY_MAX + 17) /* move to next char in field */ #define REQ_PREV_CHAR (KEY_MAX + 18) /* move to prev char in field */ #define REQ_NEXT_LINE (KEY_MAX + 19) /* move to next line in field */ #define REQ_PREV_LINE (KEY_MAX + 20) /* move to prev line in field */ #define REQ_NEXT_WORD (KEY_MAX + 21) /* move to next word in field */ #define REQ_PREV_WORD (KEY_MAX + 22) /* move to prev word in field */ #define REQ_BEG_FIELD (KEY_MAX + 23) /* move to first char in field */ #define REQ_END_FIELD (KEY_MAX + 24) /* move after last char in fld */ #define REQ_BEG_LINE (KEY_MAX + 25) /* move to beginning of line */ #define REQ_END_LINE (KEY_MAX + 26) /* move after last char in line */ #define REQ_LEFT_CHAR (KEY_MAX + 27) /* move left in field */ #define REQ_RIGHT_CHAR (KEY_MAX + 28) /* move right in field */ #define REQ_UP_CHAR (KEY_MAX + 29) /* move up in field */ #define REQ_DOWN_CHAR (KEY_MAX + 30) /* move down in field */ #define REQ_NEW_LINE (KEY_MAX + 31) /* insert/overlay new line */ #define REQ_INS_CHAR (KEY_MAX + 32) /* insert blank char at cursor */ #define REQ_INS_LINE (KEY_MAX + 33) /* insert blank line at cursor */ #define REQ_DEL_CHAR (KEY_MAX + 34) /* delete char at cursor */ #define REQ_DEL_PREV (KEY_MAX + 35) /* delete char before cursor */ #define REQ_DEL_LINE (KEY_MAX + 36) /* delete line at cursor */ #define REQ_DEL_WORD (KEY_MAX + 37) /* delete word at cursor */ #define REQ_CLR_EOL (KEY_MAX + 38) /* clear to end of line */ #define REQ_CLR_EOF (KEY_MAX + 39) /* clear to end of field */ #define REQ_CLR_FIELD (KEY_MAX + 40) /* clear entire field */ #define REQ_OVL_MODE (KEY_MAX + 41) /* begin overlay mode */ #define REQ_INS_MODE (KEY_MAX + 42) /* begin insert mode */ #define REQ_SCR_FLINE (KEY_MAX + 43) /* scroll field forward a line */ #define REQ_SCR_BLINE (KEY_MAX + 44) /* scroll field backward a line */ #define REQ_SCR_FPAGE (KEY_MAX + 45) /* scroll field forward a page */ #define REQ_SCR_BPAGE (KEY_MAX + 46) /* scroll field backward a page */ #define REQ_SCR_FHPAGE (KEY_MAX + 47) /* scroll field forward half page */ #define REQ_SCR_BHPAGE (KEY_MAX + 48) /* scroll field backward half page */ #define REQ_SCR_FCHAR (KEY_MAX + 49) /* horizontal scroll char */ #define REQ_SCR_BCHAR (KEY_MAX + 50) /* horizontal scroll char */ #define REQ_SCR_HFLINE (KEY_MAX + 51) /* horizontal scroll line */ #define REQ_SCR_HBLINE (KEY_MAX + 52) /* horizontal scroll line */ #define REQ_SCR_HFHALF (KEY_MAX + 53) /* horizontal scroll half line */ #define REQ_SCR_HBHALF (KEY_MAX + 54) /* horizontal scroll half line */ #define REQ_VALIDATION (KEY_MAX + 55) /* validate field */ #define REQ_NEXT_CHOICE (KEY_MAX + 56) /* display next field choice */ #define REQ_PREV_CHOICE (KEY_MAX + 57) /* display prev field choice */ #define MIN_FORM_COMMAND (KEY_MAX + 1) /* used by form_driver */ #define MAX_FORM_COMMAND (KEY_MAX + 57) /* used by form_driver */ #if defined(MAX_COMMAND) # if (MAX_FORM_COMMAND > MAX_COMMAND) # error Something is wrong -- MAX_FORM_COMMAND is greater than MAX_COMMAND # elif (MAX_COMMAND != (KEY_MAX + 128)) # error Something is wrong -- MAX_COMMAND is already inconsistently defined. # endif #else # define MAX_COMMAND (KEY_MAX + 128) #endif /************************* * standard field types * *************************/ extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALPHA; extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM; extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM; extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_INTEGER; extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC; extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP; /************************************ * built-in additional field types * * They are not defined in SVr4 * ************************************/ extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_IPV4; /* Internet IP Version 4 address */ /*********************** * FIELDTYPE routines * ***********************/ extern NCURSES_EXPORT(FIELDTYPE *) new_fieldtype ( bool (* const field_check)(FIELD *,const void *), bool (* const char_check)(int,const void *)); extern NCURSES_EXPORT(FIELDTYPE *) link_fieldtype( FIELDTYPE *, FIELDTYPE *); extern NCURSES_EXPORT(int) free_fieldtype (FIELDTYPE *); extern NCURSES_EXPORT(int) set_fieldtype_arg (FIELDTYPE *, void * (* const make_arg)(va_list *), void * (* const copy_arg)(const void *), void (* const free_arg)(void *)); extern NCURSES_EXPORT(int) set_fieldtype_choice (FIELDTYPE *, bool (* const next_choice)(FIELD *,const void *), bool (* const prev_choice)(FIELD *,const void *)); /******************* * FIELD routines * *******************/ extern NCURSES_EXPORT(FIELD *) new_field (int,int,int,int,int,int); extern NCURSES_EXPORT(FIELD *) dup_field (FIELD *,int,int); extern NCURSES_EXPORT(FIELD *) link_field (FIELD *,int,int); extern NCURSES_EXPORT(int) free_field (FIELD *); extern NCURSES_EXPORT(int) field_info (const FIELD *,int *,int *,int *,int *,int *,int *); extern NCURSES_EXPORT(int) dynamic_field_info (const FIELD *,int *,int *,int *); extern NCURSES_EXPORT(int) set_max_field ( FIELD *,int); extern NCURSES_EXPORT(int) move_field (FIELD *,int,int); extern NCURSES_EXPORT(int) set_field_type (FIELD *,FIELDTYPE *,...); extern NCURSES_EXPORT(int) set_new_page (FIELD *,bool); extern NCURSES_EXPORT(int) set_field_just (FIELD *,int); extern NCURSES_EXPORT(int) field_just (const FIELD *); extern NCURSES_EXPORT(int) set_field_fore (FIELD *,chtype); extern NCURSES_EXPORT(int) set_field_back (FIELD *,chtype); extern NCURSES_EXPORT(int) set_field_pad (FIELD *,int); extern NCURSES_EXPORT(int) field_pad (const FIELD *); extern NCURSES_EXPORT(int) set_field_buffer (FIELD *,int,const char *); extern NCURSES_EXPORT(int) set_field_status (FIELD *,bool); extern NCURSES_EXPORT(int) set_field_userptr (FIELD *, void *); extern NCURSES_EXPORT(int) set_field_opts (FIELD *,Field_Options); extern NCURSES_EXPORT(int) field_opts_on (FIELD *,Field_Options); extern NCURSES_EXPORT(int) field_opts_off (FIELD *,Field_Options); extern NCURSES_EXPORT(chtype) field_fore (const FIELD *); extern NCURSES_EXPORT(chtype) field_back (const FIELD *); extern NCURSES_EXPORT(bool) new_page (const FIELD *); extern NCURSES_EXPORT(bool) field_status (const FIELD *); extern NCURSES_EXPORT(void *) field_arg (const FIELD *); extern NCURSES_EXPORT(void *) field_userptr (const FIELD *); extern NCURSES_EXPORT(FIELDTYPE *) field_type (const FIELD *); extern NCURSES_EXPORT(char *) field_buffer (const FIELD *,int); extern NCURSES_EXPORT(Field_Options) field_opts (const FIELD *); /****************** * FORM routines * ******************/ extern NCURSES_EXPORT(FORM *) new_form (FIELD **); extern NCURSES_EXPORT(FIELD **) form_fields (const FORM *); extern NCURSES_EXPORT(FIELD *) current_field (const FORM *); extern NCURSES_EXPORT(WINDOW *) form_win (const FORM *); extern NCURSES_EXPORT(WINDOW *) form_sub (const FORM *); extern NCURSES_EXPORT(Form_Hook) form_init (const FORM *); extern NCURSES_EXPORT(Form_Hook) form_term (const FORM *); extern NCURSES_EXPORT(Form_Hook) field_init (const FORM *); extern NCURSES_EXPORT(Form_Hook) field_term (const FORM *); extern NCURSES_EXPORT(int) free_form (FORM *); extern NCURSES_EXPORT(int) set_form_fields (FORM *,FIELD **); extern NCURSES_EXPORT(int) field_count (const FORM *); extern NCURSES_EXPORT(int) set_form_win (FORM *,WINDOW *); extern NCURSES_EXPORT(int) set_form_sub (FORM *,WINDOW *); extern NCURSES_EXPORT(int) set_current_field (FORM *,FIELD *); extern NCURSES_EXPORT(int) field_index (const FIELD *); extern NCURSES_EXPORT(int) set_form_page (FORM *,int); extern NCURSES_EXPORT(int) form_page (const FORM *); extern NCURSES_EXPORT(int) scale_form (const FORM *,int *,int *); extern NCURSES_EXPORT(int) set_form_init (FORM *,Form_Hook); extern NCURSES_EXPORT(int) set_form_term (FORM *,Form_Hook); extern NCURSES_EXPORT(int) set_field_init (FORM *,Form_Hook); extern NCURSES_EXPORT(int) set_field_term (FORM *,Form_Hook); extern NCURSES_EXPORT(int) post_form (FORM *); extern NCURSES_EXPORT(int) unpost_form (FORM *); extern NCURSES_EXPORT(int) pos_form_cursor (FORM *); extern NCURSES_EXPORT(int) form_driver (FORM *,int); # if NCURSES_WIDECHAR extern NCURSES_EXPORT(int) form_driver_w (FORM *,int,wchar_t); # endif extern NCURSES_EXPORT(int) set_form_userptr (FORM *,void *); extern NCURSES_EXPORT(int) set_form_opts (FORM *,Form_Options); extern NCURSES_EXPORT(int) form_opts_on (FORM *,Form_Options); extern NCURSES_EXPORT(int) form_opts_off (FORM *,Form_Options); extern NCURSES_EXPORT(int) form_request_by_name (const char *); extern NCURSES_EXPORT(const char *) form_request_name (int); extern NCURSES_EXPORT(void *) form_userptr (const FORM *); extern NCURSES_EXPORT(Form_Options) form_opts (const FORM *); extern NCURSES_EXPORT(bool) data_ahead (const FORM *); extern NCURSES_EXPORT(bool) data_behind (const FORM *); #if NCURSES_SP_FUNCS extern NCURSES_EXPORT(FORM *) NCURSES_SP_NAME(new_form) (SCREEN*, FIELD **); #endif #ifdef __cplusplus } #endif /* *INDENT-ON*/ #endif /* FORM_H */ ncurses-6.0-20160213/form/llib-lformw0000644000175100001440000003703312563672430015606 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2002-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./f_trace.c */ #include #undef _nc_retrace_field_ptr FIELD **_nc_retrace_field_ptr( FIELD **code) { return(*(FIELD ***)0); } #undef _nc_retrace_field FIELD *_nc_retrace_field( FIELD *code) { return(*(FIELD **)0); } #undef _nc_retrace_field_type FIELDTYPE *_nc_retrace_field_type( FIELDTYPE *code) { return(*(FIELDTYPE **)0); } #undef _nc_retrace_form FORM *_nc_retrace_form( FORM *code) { return(*(FORM **)0); } #undef _nc_retrace_form_hook Form_Hook _nc_retrace_form_hook( Form_Hook code) { return(*(Form_Hook *)0); } /* ./fld_arg.c */ #undef set_fieldtype_arg int set_fieldtype_arg( FIELDTYPE *typ, void *(*const make_arg)( va_list *p1), void *(*const copy_arg)( const void *p1), void (*const free_arg)( void *p1)) { return(*(int *)0); } #undef field_arg void *field_arg( const FIELD *field) { return(*(void **)0); } /* ./fld_attr.c */ #undef set_field_fore int set_field_fore( FIELD *field, chtype attr) { return(*(int *)0); } #undef field_fore chtype field_fore( const FIELD *field) { return(*(chtype *)0); } #undef set_field_back int set_field_back( FIELD *field, chtype attr) { return(*(int *)0); } #undef field_back chtype field_back( const FIELD *field) { return(*(chtype *)0); } /* ./fld_current.c */ #undef set_current_field int set_current_field( FORM *form, FIELD *field) { return(*(int *)0); } #undef current_field FIELD *current_field( const FORM *form) { return(*(FIELD **)0); } #undef field_index int field_index( const FIELD *field) { return(*(int *)0); } /* ./fld_def.c */ #undef _nc_Default_Field FIELD *_nc_Default_Field; #undef _nc_Make_Argument TypeArgument *_nc_Make_Argument( const FIELDTYPE *typ, va_list *ap, int *err) { return(*(TypeArgument **)0); } #undef _nc_Copy_Argument TypeArgument *_nc_Copy_Argument( const FIELDTYPE *typ, const TypeArgument *argp, int *err) { return(*(TypeArgument **)0); } #undef _nc_Free_Argument void _nc_Free_Argument( const FIELDTYPE *typ, TypeArgument *argp) { /* void */ } #undef _nc_Copy_Type NCURSES_BOOL _nc_Copy_Type( FIELD *dst, FIELD const *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_Free_Type void _nc_Free_Type( FIELD *field) { /* void */ } #undef new_field FIELD *new_field( int rows, int cols, int frow, int fcol, int nrow, int nbuf) { return(*(FIELD **)0); } #undef free_field int free_field( FIELD *field) { return(*(int *)0); } /* ./fld_dup.c */ #undef dup_field FIELD *dup_field( FIELD *field, int frow, int fcol) { return(*(FIELD **)0); } /* ./fld_ftchoice.c */ #undef set_fieldtype_choice int set_fieldtype_choice( FIELDTYPE *typ, NCURSES_BOOL (*const next_choice)( FIELD *p1, const void *p2), NCURSES_BOOL (*const prev_choice)( FIELD *p1, const void *p2)) { return(*(int *)0); } /* ./fld_ftlink.c */ #undef link_fieldtype FIELDTYPE *link_fieldtype( FIELDTYPE *type1, FIELDTYPE *type2) { return(*(FIELDTYPE **)0); } /* ./fld_info.c */ #undef field_info int field_info( const FIELD *field, int *rows, int *cols, int *frow, int *fcol, int *nrow, int *nbuf) { return(*(int *)0); } #undef dynamic_field_info int dynamic_field_info( const FIELD *field, int *drows, int *dcols, int *maxgrow) { return(*(int *)0); } /* ./fld_just.c */ #undef set_field_just int set_field_just( FIELD *field, int just) { return(*(int *)0); } #undef field_just int field_just( const FIELD *field) { return(*(int *)0); } /* ./fld_link.c */ #undef link_field FIELD *link_field( FIELD *field, int frow, int fcol) { return(*(FIELD **)0); } /* ./fld_max.c */ #undef set_max_field int set_max_field( FIELD *field, int maxgrow) { return(*(int *)0); } /* ./fld_move.c */ #undef move_field int move_field( FIELD *field, int frow, int fcol) { return(*(int *)0); } /* ./fld_newftyp.c */ #undef _nc_Default_FieldType FIELDTYPE *_nc_Default_FieldType; #undef new_fieldtype FIELDTYPE *new_fieldtype( NCURSES_BOOL (*const field_check)( FIELD *p1, const void *p2), NCURSES_BOOL (*const char_check)( int p1, const void *p2)) { return(*(FIELDTYPE **)0); } #undef free_fieldtype int free_fieldtype( FIELDTYPE *typ) { return(*(int *)0); } /* ./fld_opts.c */ #undef set_field_opts int set_field_opts( FIELD *field, Field_Options opts) { return(*(int *)0); } #undef field_opts Field_Options field_opts( const FIELD *field) { return(*(Field_Options *)0); } #undef field_opts_on int field_opts_on( FIELD *field, Field_Options opts) { return(*(int *)0); } #undef field_opts_off int field_opts_off( FIELD *field, Field_Options opts) { return(*(int *)0); } /* ./fld_pad.c */ #undef set_field_pad int set_field_pad( FIELD *field, int ch) { return(*(int *)0); } #undef field_pad int field_pad( const FIELD *field) { return(*(int *)0); } /* ./fld_page.c */ #undef set_new_page int set_new_page( FIELD *field, NCURSES_BOOL new_page_flag) { return(*(int *)0); } #undef new_page NCURSES_BOOL new_page( const FIELD *field) { return(*(NCURSES_BOOL *)0); } /* ./fld_stat.c */ #undef set_field_status int set_field_status( FIELD *field, NCURSES_BOOL status) { return(*(int *)0); } #undef field_status NCURSES_BOOL field_status( const FIELD *field) { return(*(NCURSES_BOOL *)0); } /* ./fld_type.c */ #undef set_field_type int set_field_type( FIELD *field, FIELDTYPE *type, ...) { return(*(int *)0); } #undef field_type FIELDTYPE *field_type( const FIELD *field) { return(*(FIELDTYPE **)0); } /* ./fld_user.c */ #undef set_field_userptr int set_field_userptr( FIELD *field, void *usrptr) { return(*(int *)0); } #undef field_userptr void *field_userptr( const FIELD *field) { return(*(void **)0); } /* ./frm_cursor.c */ #undef pos_form_cursor int pos_form_cursor( FORM *form) { return(*(int *)0); } /* ./frm_data.c */ #undef data_behind NCURSES_BOOL data_behind( const FORM *form) { return(*(NCURSES_BOOL *)0); } #undef data_ahead NCURSES_BOOL data_ahead( const FORM *form) { return(*(NCURSES_BOOL *)0); } /* ./frm_def.c */ #undef _nc_Default_Form FORM *_nc_Default_Form; #undef new_form_sp FORM *new_form_sp( SCREEN *sp, FIELD **fields) { return(*(FORM **)0); } #undef new_form FORM *new_form( FIELD **fields) { return(*(FORM **)0); } #undef free_form int free_form( FORM *form) { return(*(int *)0); } #undef set_form_fields int set_form_fields( FORM *form, FIELD **fields) { return(*(int *)0); } #undef form_fields FIELD **form_fields( const FORM *form) { return(*(FIELD ***)0); } #undef field_count int field_count( const FORM *form) { return(*(int *)0); } /* ./frm_driver.c */ #undef _nc_get_fieldbuffer void _nc_get_fieldbuffer( FORM *form, FIELD *field, cchar_t *buf) { /* void */ } #undef _nc_Position_Form_Cursor int _nc_Position_Form_Cursor( FORM *form) { return(*(int *)0); } #undef _nc_Refresh_Current_Field int _nc_Refresh_Current_Field( FORM *form) { return(*(int *)0); } #undef _nc_Synchronize_Attributes int _nc_Synchronize_Attributes( FIELD *field) { return(*(int *)0); } #undef _nc_Synchronize_Options int _nc_Synchronize_Options( FIELD *field, Field_Options newopts) { return(*(int *)0); } #undef _nc_Set_Current_Field int _nc_Set_Current_Field( FORM *form, FIELD *newfield) { return(*(int *)0); } #undef _nc_Internal_Validation NCURSES_BOOL _nc_Internal_Validation( FORM *form) { return(*(NCURSES_BOOL *)0); } #undef _nc_First_Active_Field FIELD *_nc_First_Active_Field( FORM *form) { return(*(FIELD **)0); } #undef _nc_Set_Form_Page int _nc_Set_Form_Page( FORM *form, int page, FIELD *field) { return(*(int *)0); } typedef struct { int keycode; int (*cmd) (FORM *); } Binding_Info; #undef form_driver int form_driver( FORM *form, int c) { return(*(int *)0); } #undef form_driver_w int form_driver_w( FORM *form, int type, wchar_t c) { return(*(int *)0); } #undef set_field_buffer int set_field_buffer( FIELD *field, int buffer, const char *value) { return(*(int *)0); } #undef field_buffer char *field_buffer( const FIELD *field, int buffer) { return(*(char **)0); } #undef _nc_Widen_String wchar_t *_nc_Widen_String( char *source, int *lengthp) { return(*(wchar_t **)0); } /* ./frm_hook.c */ #undef set_field_init int set_field_init( FORM *form, Form_Hook func) { return(*(int *)0); } #undef field_init Form_Hook field_init( const FORM *form) { return(*(Form_Hook *)0); } #undef set_field_term int set_field_term( FORM *form, Form_Hook func) { return(*(int *)0); } #undef field_term Form_Hook field_term( const FORM *form) { return(*(Form_Hook *)0); } #undef set_form_init int set_form_init( FORM *form, Form_Hook func) { return(*(int *)0); } #undef form_init Form_Hook form_init( const FORM *form) { return(*(Form_Hook *)0); } #undef set_form_term int set_form_term( FORM *form, Form_Hook func) { return(*(int *)0); } #undef form_term Form_Hook form_term( const FORM *form) { return(*(Form_Hook *)0); } /* ./frm_opts.c */ #undef set_form_opts int set_form_opts( FORM *form, Form_Options opts) { return(*(int *)0); } #undef form_opts Form_Options form_opts( const FORM *form) { return(*(Form_Options *)0); } #undef form_opts_on int form_opts_on( FORM *form, Form_Options opts) { return(*(int *)0); } #undef form_opts_off int form_opts_off( FORM *form, Form_Options opts) { return(*(int *)0); } /* ./frm_page.c */ #undef set_form_page int set_form_page( FORM *form, int page) { return(*(int *)0); } #undef form_page int form_page( const FORM *form) { return(*(int *)0); } /* ./frm_post.c */ #undef post_form int post_form( FORM *form) { return(*(int *)0); } #undef unpost_form int unpost_form( FORM *form) { return(*(int *)0); } /* ./frm_req_name.c */ #undef form_request_name const char *form_request_name( int request) { return(*(const char **)0); } #undef form_request_by_name int form_request_by_name( const char *str) { return(*(int *)0); } /* ./frm_scale.c */ #undef scale_form int scale_form( const FORM *form, int *rows, int *cols) { return(*(int *)0); } /* ./frm_sub.c */ #undef set_form_sub int set_form_sub( FORM *form, WINDOW *win) { return(*(int *)0); } #undef form_sub WINDOW *form_sub( const FORM *form) { return(*(WINDOW **)0); } /* ./frm_user.c */ #undef set_form_userptr int set_form_userptr( FORM *form, void *usrptr) { return(*(int *)0); } #undef form_userptr void *form_userptr( const FORM *form) { return(*(void **)0); } /* ./frm_win.c */ #undef set_form_win int set_form_win( FORM *form, WINDOW *win) { return(*(int *)0); } #undef form_win WINDOW *form_win( const FORM *form) { return(*(WINDOW **)0); } /* ./fty_alnum.c */ typedef struct { int width; } alnumARG; #undef TYPE_ALNUM FIELDTYPE *TYPE_ALNUM; #undef _nc_TYPE_ALNUM FIELDTYPE *_nc_TYPE_ALNUM(void) { return(*(FIELDTYPE **)0); } /* ./fty_alpha.c */ typedef struct { int width; } alphaARG; #undef TYPE_ALPHA FIELDTYPE *TYPE_ALPHA; #undef _nc_TYPE_ALPHA FIELDTYPE *_nc_TYPE_ALPHA(void) { return(*(FIELDTYPE **)0); } /* ./fty_enum.c */ typedef struct { char **kwds; int count; NCURSES_BOOL checkcase; NCURSES_BOOL checkunique; } enumARG; typedef struct { char **kwds; int ccase; int cunique; } enumParams; #undef TYPE_ENUM FIELDTYPE *TYPE_ENUM; #undef _nc_TYPE_ENUM FIELDTYPE *_nc_TYPE_ENUM(void) { return(*(FIELDTYPE **)0); } /* ./fty_generic.c */ #undef _nc_generic_fieldtype FIELDTYPE *_nc_generic_fieldtype( NCURSES_BOOL (*const field_check)( FORM *p1, FIELD *p2, const void *p3), NCURSES_BOOL (*const char_check)( int p1, FORM *p2, FIELD *p3, const void *p4), NCURSES_BOOL (*const next)( FORM *p1, FIELD *p2, const void *p3), NCURSES_BOOL (*const prev)( FORM *p1, FIELD *p2, const void *p3), void (*freecallback)( void *p1)) { return(*(FIELDTYPE **)0); } #undef _nc_set_generic_fieldtype int _nc_set_generic_fieldtype( FIELD *field, FIELDTYPE *ftyp, int (*argiterator)( void **p1)) { return(*(int *)0); } #undef _nc_form_cursor WINDOW *_nc_form_cursor( const FORM *form, int *pRow, int *pCol) { return(*(WINDOW **)0); } /* ./fty_int.c */ typedef struct { int precision; long low; long high; } integerARG; typedef struct { int precision; long low; long high; } integerPARM; #undef TYPE_INTEGER FIELDTYPE *TYPE_INTEGER; #undef _nc_TYPE_INTEGER FIELDTYPE *_nc_TYPE_INTEGER(void) { return(*(FIELDTYPE **)0); } /* ./fty_ipv4.c */ #undef TYPE_IPV4 FIELDTYPE *TYPE_IPV4; #undef _nc_TYPE_IPV4 FIELDTYPE *_nc_TYPE_IPV4(void) { return(*(FIELDTYPE **)0); } /* ./fty_num.c */ typedef struct { int precision; double low; double high; struct lconv *L; } numericARG; typedef struct { int precision; double low; double high; } thisPARM; #undef TYPE_NUMERIC FIELDTYPE *TYPE_NUMERIC; #undef _nc_TYPE_NUMERIC FIELDTYPE *_nc_TYPE_NUMERIC(void) { return(*(FIELDTYPE **)0); } /* ./fty_regex.c */ typedef struct { regex_t *pRegExp; unsigned long *refCount; } RegExp_Arg; #undef TYPE_REGEXP FIELDTYPE *TYPE_REGEXP; #undef _nc_TYPE_REGEXP FIELDTYPE *_nc_TYPE_REGEXP(void) { return(*(FIELDTYPE **)0); } ncurses-6.0-20160213/form/frm_user.c0000644000175100001440000000726211326663274015426 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_user.c,v 1.15 2010/01/23 21:14:36 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_form_userptr(FORM *form, void *usrptr) | | Description : Set the pointer that is reserved in any form to store | application relevant informations | | Return Values : E_OK - on success +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_form_userptr(FORM *form, void *usrptr) { T((T_CALLED("set_form_userptr(%p,%p)"), (void *)form, (void *)usrptr)); Normalize_Form(form)->usrptr = usrptr; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : void *form_userptr(const FORM *form) | | Description : Return the pointer that is reserved in any form to | store application relevant informations. | | Return Values : Value of pointer. If no such pointer has been set, | NULL is returned +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void *) form_userptr(const FORM *form) { T((T_CALLED("form_userptr(%p)"), (const void *)form)); returnVoidPtr(Normalize_Form(form)->usrptr); } /* frm_user.c ends here */ ncurses-6.0-20160213/form/fld_user.c0000644000175100001440000000731011326663274015401 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_user.c,v 1.16 2010/01/23 21:14:36 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_userptr(FIELD *field, void *usrptr) | | Description : Set the pointer that is reserved in any field to store | application relevant informations | | Return Values : E_OK - on success +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_field_userptr(FIELD *field, void *usrptr) { T((T_CALLED("set_field_userptr(%p,%p)"), (void *)field, (void *)usrptr)); Normalize_Field(field)->usrptr = usrptr; RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : void *field_userptr(const FIELD *field) | | Description : Return the pointer that is reserved in any field to | store application relevant informations. | | Return Values : Value of pointer. If no such pointer has been set, | NULL is returned +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void *) field_userptr(const FIELD *field) { T((T_CALLED("field_userptr(%p)"), (const void *)field)); returnVoidPtr(Normalize_Field(field)->usrptr); } /* fld_user.c ends here */ ncurses-6.0-20160213/form/fty_regex.c0000644000175100001440000002350212454256401015564 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /*************************************************************************** * * * Author : Juergen Pfeifer * * * ***************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fty_regex.c,v 1.26 2015/01/10 17:10:25 tom Exp $") #if HAVE_REGEX_H_FUNCS /* We prefer POSIX regex */ #include typedef struct { regex_t *pRegExp; unsigned long *refCount; } RegExp_Arg; #elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS #undef RETURN static int reg_errno; static char * RegEx_Init(char *instring) { reg_errno = 0; return instring; } static char * RegEx_Error(int code) { reg_errno = code; return 0; } #define INIT register char *sp = RegEx_Init(instring); #define GETC() (*sp++) #define PEEKC() (*sp) #define UNGETC(c) (--sp) #define RETURN(c) return(c) #define ERROR(c) return RegEx_Error(c) #if HAVE_REGEXP_H_FUNCS #include #else #include #endif typedef struct { char *compiled_expression; unsigned long *refCount; } RegExp_Arg; /* Maximum Length we allow for a compiled regular expression */ #define MAX_RX_LEN (2048) #define RX_INCREMENT (256) #endif #if HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS # define MAYBE_UNUSED #else # define MAYBE_UNUSED GCC_UNUSED #endif /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Generic_RegularExpression_Type(void * arg) | | Description : Allocate structure for regex type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Generic_RegularExpression_Type(void *arg MAYBE_UNUSED) { #if HAVE_REGEX_H_FUNCS char *rx = (char *)arg; RegExp_Arg *preg = (RegExp_Arg *)0; if (rx) { preg = typeCalloc(RegExp_Arg, 1); if (preg) { T((T_CREATE("RegExp_Arg %p"), (void *)preg)); if (((preg->pRegExp = typeMalloc(regex_t, 1)) != 0) && !regcomp(preg->pRegExp, rx, (REG_EXTENDED | REG_NOSUB | REG_NEWLINE))) { T((T_CREATE("regex_t %p"), (void *)preg->pRegExp)); if ((preg->refCount = typeMalloc(unsigned long, 1)) != 0) *(preg->refCount) = 1; } else { if (preg->pRegExp) free(preg->pRegExp); free(preg); preg = (RegExp_Arg *)0; } } } return ((void *)preg); #elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS char *rx = (char *)arg; RegExp_Arg *pArg = (RegExp_Arg *)0; if (rx) { pArg = typeMalloc(RegExp_Arg, 1); if (pArg) { int blen = RX_INCREMENT; T((T_CREATE("RegExp_Arg %p"), pArg)); pArg->compiled_expression = NULL; if ((pArg->refCount = typeMalloc(unsigned long, 1)) != 0) *(pArg->refCount) = 1; do { char *buf = typeMalloc(char, blen); if (buf) { #if HAVE_REGEXP_H_FUNCS char *last_pos = compile(rx, buf, &buf[blen], '\0'); #else /* HAVE_REGEXPR_H_FUNCS */ char *last_pos = compile(rx, buf, &buf[blen]); #endif if (reg_errno) { free(buf); if (reg_errno == 50) blen += RX_INCREMENT; else { free(pArg); pArg = NULL; break; } } else { pArg->compiled_expression = buf; break; } } } while (blen <= MAX_RX_LEN); } if (pArg && !pArg->compiled_expression) { free(pArg); pArg = NULL; } } return (void *)pArg; #else return 0; #endif } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Make_RegularExpression_Type(va_list * ap) | | Description : Allocate structure for regex type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Make_RegularExpression_Type(va_list *ap) { char *rx = va_arg(*ap, char *); return Generic_RegularExpression_Type((void *)rx); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Copy_RegularExpression_Type( | const void * argp) | | Description : Copy structure for regex type argument. | | Return Values : Pointer to argument structure or NULL on error. +--------------------------------------------------------------------------*/ static void * Copy_RegularExpression_Type(const void *argp MAYBE_UNUSED) { #if (HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS) const RegExp_Arg *ap = (const RegExp_Arg *)argp; const RegExp_Arg *result = (const RegExp_Arg *)0; if (ap) { *(ap->refCount) += 1; result = ap; } return (void *)result; #else return 0; #endif } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Free_RegularExpression_Type(void * argp) | | Description : Free structure for regex type argument. | | Return Values : - +--------------------------------------------------------------------------*/ static void Free_RegularExpression_Type(void *argp MAYBE_UNUSED) { #if HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS RegExp_Arg *ap = (RegExp_Arg *)argp; if (ap) { if (--(*(ap->refCount)) == 0) { #if HAVE_REGEX_H_FUNCS if (ap->pRegExp) { free(ap->refCount); regfree(ap->pRegExp); free(ap->pRegExp); } #elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS if (ap->compiled_expression) { free(ap->refCount); free(ap->compiled_expression); } #endif free(ap); } } #endif } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_RegularExpression_Field( | FIELD * field, | const void * argp) | | Description : Validate buffer content to be a valid regular expression | | Return Values : TRUE - field is valid | FALSE - field is invalid +--------------------------------------------------------------------------*/ static bool Check_RegularExpression_Field(FIELD *field MAYBE_UNUSED, const void *argp MAYBE_UNUSED) { bool match = FALSE; #if HAVE_REGEX_H_FUNCS const RegExp_Arg *ap = (const RegExp_Arg *)argp; if (ap && ap->pRegExp) match = (regexec(ap->pRegExp, field_buffer(field, 0), 0, NULL, 0) ? FALSE : TRUE); #elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS RegExp_Arg *ap = (RegExp_Arg *)argp; if (ap && ap->compiled_expression) match = (step(field_buffer(field, 0), ap->compiled_expression) ? TRUE : FALSE); #endif return match; } static FIELDTYPE typeREGEXP = { _HAS_ARGS | _RESIDENT, 1, /* this is mutable, so we can't be const */ (FIELDTYPE *)0, (FIELDTYPE *)0, Make_RegularExpression_Type, Copy_RegularExpression_Type, Free_RegularExpression_Type, INIT_FT_FUNC(Check_RegularExpression_Field), INIT_FT_FUNC(NULL), INIT_FT_FUNC(NULL), INIT_FT_FUNC(NULL), #if NCURSES_INTEROP_FUNCS Generic_RegularExpression_Type #endif }; NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_REGEXP = &typeREGEXP; #if NCURSES_INTEROP_FUNCS /* The next routines are to simplify the use of ncurses from programming languages with restictions on interop with C level constructs (e.g. variable access or va_list + ellipsis constructs) */ NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_REGEXP(void) { return TYPE_REGEXP; } #endif /* fty_regex.c ends here */ ncurses-6.0-20160213/form/frm_opts.c0000644000175100001440000001243312206235247015422 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_opts.c,v 1.17 2013/08/24 22:58:47 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_form_opts(FORM *form, Form_Options opts) | | Description : Turns on the named options and turns off all the | remaining options for that form. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid options +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_form_opts(FORM *form, Form_Options opts) { T((T_CALLED("set_form_opts(%p,%d)"), (void *)form, opts)); opts &= (Form_Options) ALL_FORM_OPTS; if ((unsigned)opts & ~ALL_FORM_OPTS) RETURN(E_BAD_ARGUMENT); else { Normalize_Form(form)->opts = opts; RETURN(E_OK); } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : Form_Options form_opts(const FORM *) | | Description : Retrieves the current form options. | | Return Values : The option flags. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(Form_Options) form_opts(const FORM *form) { T((T_CALLED("form_opts(%p)"), (const void *)form)); returnCode((Form_Options) ((unsigned)Normalize_Form(form)->opts & ALL_FORM_OPTS)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int form_opts_on(FORM *form, Form_Options opts) | | Description : Turns on the named options; no other options are | changed. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid options +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) form_opts_on(FORM *form, Form_Options opts) { T((T_CALLED("form_opts_on(%p,%d)"), (void *)form, opts)); opts &= (Form_Options) ALL_FORM_OPTS; if ((unsigned)opts & ~ALL_FORM_OPTS) RETURN(E_BAD_ARGUMENT); else { Normalize_Form(form)->opts |= opts; RETURN(E_OK); } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int form_opts_off(FORM *form, Form_Options opts) | | Description : Turns off the named options; no other options are | changed. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid options +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) form_opts_off(FORM *form, Form_Options opts) { T((T_CALLED("form_opts_off(%p,%d)"), (void *)form, opts)); opts &= (Form_Options) ALL_FORM_OPTS; if ((unsigned)opts & ~ALL_FORM_OPTS) RETURN(E_BAD_ARGUMENT); else { Normalize_Form(form)->opts &= ~opts; RETURN(E_OK); } } /* frm_opts.c ends here */ ncurses-6.0-20160213/form/frm_sub.c0000644000175100001440000000737111326663274015242 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995-1997,2009 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_sub.c,v 1.12 2010/01/23 21:14:36 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_form_sub(FORM *form, WINDOW *win) | | Description : Set the subwindow of the form to win. | | Return Values : E_OK - success | E_POSTED - form is posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_form_sub(FORM *form, WINDOW *win) { T((T_CALLED("set_form_sub(%p,%p)"), (void *)form, (void *)win)); if (form && (form->status & _POSTED)) RETURN(E_POSTED); else { #if NCURSES_SP_FUNCS FORM *f = Normalize_Form(form); f->sub = win ? win : StdScreen(Get_Form_Screen(f)); RETURN(E_OK); #else Normalize_Form(form)->sub = win; RETURN(E_OK); #endif } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : WINDOW *form_sub(const FORM *) | | Description : Retrieve the window of the form. | | Return Values : The pointer to the Subwindow. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(WINDOW *) form_sub(const FORM *form) { const FORM *f; T((T_CALLED("form_sub(%p)"), (const void *)form)); f = Normalize_Form(form); returnWin(Get_Form_Window(f)); } /* frm_sub.c ends here */ ncurses-6.0-20160213/form/modules0000644000175100001440000000753211326621475015030 0ustar tomusers# $Id: modules,v 1.17 2010/01/23 16:26:37 tom Exp $ ############################################################################## # Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1995-on # and: Juergen Pfeifer 2008 # @ base # Library objects f_trace lib $(srcdir) $(HEADER_DEPS) fld_arg lib $(srcdir) $(HEADER_DEPS) fld_attr lib $(srcdir) $(HEADER_DEPS) fld_current lib $(srcdir) $(HEADER_DEPS) fld_def lib $(srcdir) $(HEADER_DEPS) fld_dup lib $(srcdir) $(HEADER_DEPS) fld_ftchoice lib $(srcdir) $(HEADER_DEPS) fld_ftlink lib $(srcdir) $(HEADER_DEPS) fld_info lib $(srcdir) $(HEADER_DEPS) fld_just lib $(srcdir) $(HEADER_DEPS) fld_link lib $(srcdir) $(HEADER_DEPS) fld_max lib $(srcdir) $(HEADER_DEPS) fld_move lib $(srcdir) $(HEADER_DEPS) fld_newftyp lib $(srcdir) $(HEADER_DEPS) fld_opts lib $(srcdir) $(HEADER_DEPS) fld_pad lib $(srcdir) $(HEADER_DEPS) fld_page lib $(srcdir) $(HEADER_DEPS) fld_stat lib $(srcdir) $(HEADER_DEPS) fld_type lib $(srcdir) $(HEADER_DEPS) fld_user lib $(srcdir) $(HEADER_DEPS) frm_cursor lib $(srcdir) $(HEADER_DEPS) frm_data lib $(srcdir) $(HEADER_DEPS) frm_def lib $(srcdir) $(HEADER_DEPS) frm_driver lib $(srcdir) $(HEADER_DEPS) frm_hook lib $(srcdir) $(HEADER_DEPS) frm_opts lib $(srcdir) $(HEADER_DEPS) frm_page lib $(srcdir) $(HEADER_DEPS) frm_post lib $(srcdir) $(HEADER_DEPS) frm_req_name lib $(srcdir) $(HEADER_DEPS) frm_scale lib $(srcdir) $(HEADER_DEPS) frm_sub lib $(srcdir) $(HEADER_DEPS) frm_user lib $(srcdir) $(HEADER_DEPS) frm_win lib $(srcdir) $(HEADER_DEPS) fty_alnum lib $(srcdir) $(HEADER_DEPS) fty_alpha lib $(srcdir) $(HEADER_DEPS) fty_enum lib $(srcdir) $(HEADER_DEPS) fty_generic lib $(srcdir) $(HEADER_DEPS) fty_int lib $(srcdir) $(HEADER_DEPS) fty_ipv4 lib $(srcdir) $(HEADER_DEPS) fty_num lib $(srcdir) $(HEADER_DEPS) fty_regex lib $(srcdir) $(HEADER_DEPS) # vile:makemode ncurses-6.0-20160213/form/fld_link.c0000644000175100001440000001061311726771674015370 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_link.c,v 1.13 2012/03/11 00:37:16 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : FIELD *link_field(FIELD *field, int frow, int fcol) | | Description : Duplicates the field at the specified position. The | new field shares its buffers with the original one, | the attributes are independent. | If an error occurs, errno is set to | | E_BAD_ARGUMENT - invalid argument | E_SYSTEM_ERROR - system error | | Return Values : Pointer to the new field or NULL if failure +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELD *) link_field(FIELD *field, int frow, int fcol) { FIELD *New_Field = (FIELD *)0; int err = E_BAD_ARGUMENT; T((T_CALLED("link_field(%p,%d,%d)"), (void *)field, frow, fcol)); if (field && (frow >= 0) && (fcol >= 0) && ((err = E_SYSTEM_ERROR) != 0) && /* trick: this resets the default error */ (New_Field = typeMalloc(FIELD, 1))) { T((T_CREATE("field %p"), (void *)New_Field)); *New_Field = *_nc_Default_Field; New_Field->frow = (short) frow; New_Field->fcol = (short) fcol; New_Field->link = field->link; field->link = New_Field; New_Field->buf = field->buf; New_Field->rows = field->rows; New_Field->cols = field->cols; New_Field->nrow = field->nrow; New_Field->nbuf = field->nbuf; New_Field->drows = field->drows; New_Field->dcols = field->dcols; New_Field->maxgrow = field->maxgrow; New_Field->just = field->just; New_Field->fore = field->fore; New_Field->back = field->back; New_Field->pad = field->pad; New_Field->opts = field->opts; New_Field->usrptr = field->usrptr; if (_nc_Copy_Type(New_Field, field)) returnField(New_Field); } if (New_Field) free_field(New_Field); SET_ERROR(err); returnField((FIELD *)0); } /* fld_link.c ends here */ ncurses-6.0-20160213/form/fld_def.c0000644000175100001440000003006212365014347015154 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_def.c,v 1.41 2014/07/26 21:08:55 tom Exp $") /* this can't be readonly */ static FIELD default_field = { 0, /* status */ 0, /* rows */ 0, /* cols */ 0, /* frow */ 0, /* fcol */ 0, /* drows */ 0, /* dcols */ 0, /* maxgrow */ 0, /* nrow */ 0, /* nbuf */ NO_JUSTIFICATION, /* just */ 0, /* page */ 0, /* index */ (int)' ', /* pad */ A_NORMAL, /* fore */ A_NORMAL, /* back */ STD_FIELD_OPTS, /* opts */ (FIELD *)0, /* snext */ (FIELD *)0, /* sprev */ (FIELD *)0, /* link */ (FORM *)0, /* form */ (FIELDTYPE *)0, /* type */ (char *)0, /* arg */ (FIELD_CELL *)0, /* buf */ (char *)0 /* usrptr */ NCURSES_FIELD_EXTENSION }; NCURSES_EXPORT_VAR(FIELD *) _nc_Default_Field = &default_field; /*--------------------------------------------------------------------------- | Facility : libnform | Function : TypeArgument *_nc_Make_Argument( | const FIELDTYPE *typ, | va_list *ap, | int *err ) | | Description : Create an argument structure for the specified type. | Use the type-dependent argument list to construct | it. | | Return Values : Pointer to argument structure. Maybe NULL. | In case of an error in *err an error counter is increased. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(TypeArgument *) _nc_Make_Argument(const FIELDTYPE *typ, va_list *ap, int *err) { TypeArgument *res = (TypeArgument *)0; TypeArgument *p; if (typ != 0 && (typ->status & _HAS_ARGS) != 0) { assert(err != 0 && ap != (va_list *)0); if ((typ->status & _LINKED_TYPE) != 0) { p = typeMalloc(TypeArgument, 1); if (p != 0) { p->left = _nc_Make_Argument(typ->left, ap, err); p->right = _nc_Make_Argument(typ->right, ap, err); return p; } else { *err += 1; } } else { assert(typ->makearg != (void *)0); if (!(res = (TypeArgument *)typ->makearg(ap))) { *err += 1; } } } return res; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : TypeArgument *_nc_Copy_Argument(const FIELDTYPE *typ, | const TypeArgument *argp, | int *err ) | | Description : Create a copy of an argument structure for the specified | type. | | Return Values : Pointer to argument structure. Maybe NULL. | In case of an error in *err an error counter is increased. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(TypeArgument *) _nc_Copy_Argument(const FIELDTYPE *typ, const TypeArgument *argp, int *err) { TypeArgument *res = (TypeArgument *)0; TypeArgument *p; if (typ != 0 && (typ->status & _HAS_ARGS) != 0) { assert(err != 0 && argp != 0); if ((typ->status & _LINKED_TYPE) != 0) { p = typeMalloc(TypeArgument, 1); if (p != 0) { p->left = _nc_Copy_Argument(typ, argp->left, err); p->right = _nc_Copy_Argument(typ, argp->right, err); return p; } *err += 1; } else { if (typ->copyarg != (void *)0) { if (!(res = (TypeArgument *)(typ->copyarg((const void *)argp)))) { *err += 1; } } else { res = (TypeArgument *)argp; } } } return res; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : void _nc_Free_Argument(const FIELDTYPE *typ, | TypeArgument * argp ) | | Description : Release memory associated with the argument structure | for the given fieldtype. | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) _nc_Free_Argument(const FIELDTYPE *typ, TypeArgument *argp) { if (typ != 0 && (typ->status & _HAS_ARGS) != 0) { if ((typ->status & _LINKED_TYPE) != 0) { if (argp != 0) { _nc_Free_Argument(typ->left, argp->left); _nc_Free_Argument(typ->right, argp->right); free(argp); } } else { if (typ->freearg != (void *)0) { typ->freearg((void *)argp); } } } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : bool _nc_Copy_Type( FIELD *dst, FIELD const *src ) | | Description : Copy argument structure of field src to field dst | | Return Values : TRUE - copy worked | FALSE - error occurred +--------------------------------------------------------------------------*/ NCURSES_EXPORT(bool) _nc_Copy_Type(FIELD *dst, FIELD const *src) { int err = 0; assert(dst != 0 && src != 0); dst->type = src->type; dst->arg = (void *)_nc_Copy_Argument(src->type, (TypeArgument *)(src->arg), &err); if (err != 0) { _nc_Free_Argument(dst->type, (TypeArgument *)(dst->arg)); dst->type = (FIELDTYPE *)0; dst->arg = (void *)0; return FALSE; } else { if (dst->type != 0) { dst->type->ref++; } return TRUE; } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : void _nc_Free_Type( FIELD *field ) | | Description : Release Argument structure for this field | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) _nc_Free_Type(FIELD *field) { assert(field != 0); if (field->type != 0) { field->type->ref--; _nc_Free_Argument(field->type, (TypeArgument *)(field->arg)); } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : FIELD *new_field( int rows, int cols, | int frow, int fcol, | int nrow, int nbuf ) | | Description : Create a new field with this many 'rows' and 'cols', | starting at 'frow/fcol' in the subwindow of the form. | Allocate 'nrow' off-screen rows and 'nbuf' additional | buffers. If an error occurs, errno is set to | | E_BAD_ARGUMENT - invalid argument | E_SYSTEM_ERROR - system error | | Return Values : Pointer to the new field or NULL if failure. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELD *) new_field(int rows, int cols, int frow, int fcol, int nrow, int nbuf) { static const FIELD_CELL blank = BLANK; static const FIELD_CELL zeros = ZEROS; FIELD *New_Field = (FIELD *)0; int err = E_BAD_ARGUMENT; T((T_CALLED("new_field(%d,%d,%d,%d,%d,%d)"), rows, cols, frow, fcol, nrow, nbuf)); if (rows > 0 && cols > 0 && frow >= 0 && fcol >= 0 && nrow >= 0 && nbuf >= 0 && ((err = E_SYSTEM_ERROR) != 0) && /* trick: this resets the default error */ (New_Field = typeMalloc(FIELD, 1)) != 0) { T((T_CREATE("field %p"), (void *)New_Field)); *New_Field = default_field; New_Field->rows = (short)rows; New_Field->cols = (short)cols; New_Field->drows = rows + nrow; New_Field->dcols = cols; New_Field->frow = (short)frow; New_Field->fcol = (short)fcol; New_Field->nrow = nrow; New_Field->nbuf = (short)nbuf; New_Field->link = New_Field; #if USE_WIDEC_SUPPORT New_Field->working = newpad(1, Buffer_Length(New_Field) + 1); New_Field->expanded = typeCalloc(char *, 1 + (unsigned)nbuf); #endif if (_nc_Copy_Type(New_Field, &default_field)) { size_t len; len = Total_Buffer_Size(New_Field); if ((New_Field->buf = (FIELD_CELL *)malloc(len))) { /* Prefill buffers with blanks and insert terminating zeroes between buffers */ int i, j; int cells = Buffer_Length(New_Field); for (i = 0; i <= New_Field->nbuf; i++) { FIELD_CELL *buffer = &(New_Field->buf[(cells + 1) * i]); for (j = 0; j < cells; ++j) { buffer[j] = blank; } buffer[j] = zeros; } returnField(New_Field); } } } if (New_Field) free_field(New_Field); SET_ERROR(err); returnField((FIELD *)0); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int free_field( FIELD *field ) | | Description : Frees the storage allocated for the field. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid field pointer | E_CONNECTED - field is connected +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) free_field(FIELD *field) { T((T_CALLED("free_field(%p)"), (void *)field)); if (!field) { RETURN(E_BAD_ARGUMENT); } else if (field->form != 0) { RETURN(E_CONNECTED); } else if (field == field->link) { if (field->buf != 0) free(field->buf); } else { FIELD *f; for (f = field; f->link != field; f = f->link) { } f->link = field->link; } _nc_Free_Type(field); #if USE_WIDEC_SUPPORT if (field->expanded != 0) { int n; for (n = 0; n <= field->nbuf; ++n) { FreeIfNeeded(field->expanded[n]); } free(field->expanded); (void)delwin(field->working); } #endif free(field); RETURN(E_OK); } /* fld_def.c ends here */ ncurses-6.0-20160213/form/fty_ipv4.c0000644000175100001440000001164111275352766015350 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2006,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /*************************************************************************** * * * Author : Per Foreby, perf@efd.lth.se * * * ***************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fty_ipv4.c,v 1.10 2009/11/07 20:17:58 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_IPV4_Field( | FIELD * field, | const void * argp) | | Description : Validate buffer content to be a valid IP number (Ver. 4) | | Return Values : TRUE - field is valid | FALSE - field is invalid +--------------------------------------------------------------------------*/ static bool Check_IPV4_Field(FIELD *field, const void *argp GCC_UNUSED) { char *bp = field_buffer(field, 0); int num = 0, len; unsigned int d1, d2, d3, d4; if (isdigit(UChar(*bp))) /* Must start with digit */ { num = sscanf(bp, "%u.%u.%u.%u%n", &d1, &d2, &d3, &d4, &len); if (num == 4) { bp += len; /* Make bp point to what sscanf() left */ while (isspace(UChar(*bp))) bp++; /* Allow trailing whitespace */ } } return ((num != 4 || *bp || d1 > 255 || d2 > 255 || d3 > 255 || d4 > 255) ? FALSE : TRUE); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_IPV4_Character( | int c, | const void *argp ) | | Description : Check a character for unsigned type or period. | | Return Values : TRUE - character is valid | FALSE - character is invalid +--------------------------------------------------------------------------*/ static bool Check_IPV4_Character(int c, const void *argp GCC_UNUSED) { return ((isdigit(UChar(c)) || (c == '.')) ? TRUE : FALSE); } static FIELDTYPE typeIPV4 = { _RESIDENT, 1, /* this is mutable, so we can't be const */ (FIELDTYPE *)0, (FIELDTYPE *)0, NULL, NULL, NULL, INIT_FT_FUNC(Check_IPV4_Field), INIT_FT_FUNC(Check_IPV4_Character), INIT_FT_FUNC(NULL), INIT_FT_FUNC(NULL), #if NCURSES_INTEROP_FUNCS NULL #endif }; NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_IPV4 = &typeIPV4; #if NCURSES_INTEROP_FUNCS /* The next routines are to simplify the use of ncurses from programming languages with restictions on interop with C level constructs (e.g. variable access or va_list + ellipsis constructs) */ NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_IPV4(void) { return TYPE_IPV4; } #endif /* fty_ipv4.c ends here */ ncurses-6.0-20160213/form/READ.ME0000644000175100001440000000517110422534201014352 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-2003,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: READ.ME,v 0.7 2006/04/22 23:13:05 tom Exp $ ------------------------------------------------------------------------------- This is a clone of the form library that is available with typical System V curses implementations (ETI). It is modelled after the documentation that comes for this library with a 386 based SVR4 implementation (ESIX). The development environment was and is an ELF based Linux system. For things that still need doing, see the TO-DO file in the top-level directory. Juergen Pfeifer ncurses-6.0-20160213/form/fld_move.c0000644000175100001440000000641411726771674015405 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_move.c,v 1.11 2012/03/11 00:37:16 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int move_field(FIELD *field,int frow, int fcol) | | Description : Moves the disconnected field to the new location in | the forms subwindow. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid argument passed | E_CONNECTED - field is connected +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) move_field(FIELD *field, int frow, int fcol) { T((T_CALLED("move_field(%p,%d,%d)"), (void *)field, frow, fcol)); if (!field || (frow < 0) || (fcol < 0)) RETURN(E_BAD_ARGUMENT); if (field->form) RETURN(E_CONNECTED); field->frow = (short) frow; field->fcol = (short) fcol; RETURN(E_OK); } /* fld_move.c ends here */ ncurses-6.0-20160213/form/fty_int.c0000644000175100001440000002075211721407247015252 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /*************************************************************************** * * * Author : Juergen Pfeifer * * * ***************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fty_int.c,v 1.26 2012/02/23 10:02:15 tom Exp $") #if USE_WIDEC_SUPPORT #define isDigit(c) (iswdigit((wint_t)(c)) || isdigit(UChar(c))) #else #define isDigit(c) isdigit(UChar(c)) #endif #define thisARG integerARG typedef struct { int precision; long low; long high; } thisARG; typedef struct { int precision; long low; long high; } integerPARM; /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Generic_This_Type( void * arg ) | | Description : Allocate structure for integer type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Generic_This_Type(void *arg) { thisARG *argp = (thisARG *) 0; thisARG *param = (thisARG *) arg; if (param) { argp = typeMalloc(thisARG, 1); if (argp) { T((T_CREATE("thisARG %p"), (void *)argp)); *argp = *param; } } return (void *)argp; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Make_This_Type( va_list * ap ) | | Description : Allocate structure for integer type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Make_This_Type(va_list *ap) { thisARG arg; arg.precision = va_arg(*ap, int); arg.low = va_arg(*ap, long); arg.high = va_arg(*ap, long); return Generic_This_Type((void *)&arg); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Copy_This_Type(const void * argp) | | Description : Copy structure for integer type argument. | | Return Values : Pointer to argument structure or NULL on error. +--------------------------------------------------------------------------*/ static void * Copy_This_Type(const void *argp) { const thisARG *ap = (const thisARG *)argp; thisARG *result = (thisARG *) 0; if (argp) { result = typeMalloc(thisARG, 1); if (result) { T((T_CREATE("thisARG %p"), (void *)result)); *result = *ap; } } return (void *)result; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Free_This_Type(void * argp) | | Description : Free structure for integer type argument. | | Return Values : - +--------------------------------------------------------------------------*/ static void Free_This_Type(void *argp) { if (argp) free(argp); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_This_Field( | FIELD * field, | const void * argp) | | Description : Validate buffer content to be a valid integer value | | Return Values : TRUE - field is valid | FALSE - field is invalid +--------------------------------------------------------------------------*/ static bool Check_This_Field(FIELD *field, const void *argp) { const thisARG *argi = (const thisARG *)argp; long low = argi->low; long high = argi->high; int prec = argi->precision; unsigned char *bp = (unsigned char *)field_buffer(field, 0); char *s = (char *)bp; long val; char buf[100]; bool result = FALSE; while (*bp && *bp == ' ') bp++; if (*bp) { if (*bp == '-') bp++; #if USE_WIDEC_SUPPORT if (*bp) { bool blank = FALSE; int len; int n; wchar_t *list = _nc_Widen_String((char *)bp, &len); if (list != 0) { result = TRUE; for (n = 0; n < len; ++n) { if (blank) { if (list[n] != ' ') { result = FALSE; break; } } else if (list[n] == ' ') { blank = TRUE; } else if (!isDigit(list[n])) { result = FALSE; break; } } free(list); } } #else while (*bp) { if (!isdigit(UChar(*bp))) break; bp++; } while (*bp && *bp == ' ') bp++; result = (*bp == '\0'); #endif if (result) { val = atol(s); if (low < high) { if (val < low || val > high) result = FALSE; } if (result) { _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "%.*ld", (prec > 0 ? prec : 0), val); set_field_buffer(field, 0, buf); } } } return (result); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_This_Character( | int c, | const void * argp) | | Description : Check a character for the integer type. | | Return Values : TRUE - character is valid | FALSE - character is invalid +--------------------------------------------------------------------------*/ static bool Check_This_Character(int c, const void *argp GCC_UNUSED) { return ((isDigit(UChar(c)) || (c == '-')) ? TRUE : FALSE); } static FIELDTYPE typeTHIS = { _HAS_ARGS | _RESIDENT, 1, /* this is mutable, so we can't be const */ (FIELDTYPE *)0, (FIELDTYPE *)0, Make_This_Type, Copy_This_Type, Free_This_Type, INIT_FT_FUNC(Check_This_Field), INIT_FT_FUNC(Check_This_Character), INIT_FT_FUNC(NULL), INIT_FT_FUNC(NULL), #if NCURSES_INTEROP_FUNCS Generic_This_Type #endif }; NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_INTEGER = &typeTHIS; #if NCURSES_INTEROP_FUNCS /* The next routines are to simplify the use of ncurses from programming languages with restictions on interop with C level constructs (e.g. variable access or va_list + ellipsis constructs) */ NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_INTEGER(void) { return TYPE_INTEGER; } #endif /* fty_int.c ends here */ ncurses-6.0-20160213/form/fld_current.c0000644000175100001440000001251111326663273016103 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_current.c,v 1.12 2010/01/23 21:14:35 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_current_field(FORM * form,FIELD * field) | | Description : Set the current field of the form to the specified one. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid form or field pointer | E_REQUEST_DENIED - field not selectable | E_BAD_STATE - called from a hook routine | E_INVALID_FIELD - current field can't be left | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_current_field(FORM *form, FIELD *field) { int err = E_OK; T((T_CALLED("set_current_field(%p,%p)"), (void *)form, (void *)field)); if (form == 0 || field == 0) { RETURN(E_BAD_ARGUMENT); } else if ((form != field->form) || Field_Is_Not_Selectable(field)) { RETURN(E_REQUEST_DENIED); } else if ((form->status & _POSTED) == 0) { form->current = field; form->curpage = field->page; } else { if ((form->status & _IN_DRIVER) != 0) { err = E_BAD_STATE; } else { if (form->current != field) { if (!_nc_Internal_Validation(form)) { err = E_INVALID_FIELD; } else { Call_Hook(form, fieldterm); if (field->page != form->curpage) { Call_Hook(form, formterm); err = _nc_Set_Form_Page(form, (int)field->page, field); Call_Hook(form, forminit); } else { err = _nc_Set_Current_Field(form, field); } Call_Hook(form, fieldinit); (void)_nc_Refresh_Current_Field(form); } } } } RETURN(err); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : FIELD *current_field(const FORM * form) | | Description : Return the current field. | | Return Values : Pointer to the current field. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELD *) current_field(const FORM *form) { T((T_CALLED("current_field(%p)"), (const void *)form)); returnField(Normalize_Form(form)->current); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int field_index(const FIELD * field) | | Description : Return the index of the field in the field-array of | the form. | | Return Values : >= 0 : field index | -1 : fieldpointer invalid or field not connected +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) field_index(const FIELD *field) { T((T_CALLED("field_index(%p)"), (const void *)field)); returnCode((field != 0 && field->form != 0) ? (int)field->index : -1); } /* fld_current.c ends here */ ncurses-6.0-20160213/form/fld_just.c0000644000175100001440000000756111726771674015430 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_just.c,v 1.13 2012/03/11 00:37:16 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_just(FIELD *field, int just) | | Description : Set the fields type of justification. | | Return Values : E_OK - success | E_BAD_ARGUMENT - one of the arguments was incorrect | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_field_just(FIELD *field, int just) { int res = E_BAD_ARGUMENT; T((T_CALLED("set_field_just(%p,%d)"), (void *)field, just)); if ((just == NO_JUSTIFICATION) || (just == JUSTIFY_LEFT) || (just == JUSTIFY_CENTER) || (just == JUSTIFY_RIGHT)) { Normalize_Field(field); if (field->just != just) { field->just = (short) just; res = _nc_Synchronize_Attributes(field); } else res = E_OK; } RETURN(res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int field_just( const FIELD *field ) | | Description : Retrieve the fields type of justification | | Return Values : The justification type. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) field_just(const FIELD *field) { T((T_CALLED("field_just(%p)"), (const void *)field)); returnCode(Normalize_Field(field)->just); } /* fld_just.c ends here */ ncurses-6.0-20160213/form/fld_opts.c0000644000175100001440000001364311326663274015416 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_opts.c,v 1.12 2010/01/23 21:14:36 tom Exp $") /*---------------------------------------------------------------------------- Field-Options manipulation routines --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_opts(FIELD *field, Field_Options opts) | | Description : Turns on the named options for this field and turns | off all the remaining options. | | Return Values : E_OK - success | E_CURRENT - the field is the current field | E_BAD_ARGUMENT - invalid options | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_field_opts(FIELD *field, Field_Options opts) { int res = E_BAD_ARGUMENT; T((T_CALLED("set_field_opts(%p,%d)"), (void *)field, opts)); opts &= ALL_FIELD_OPTS; if (!(opts & ~ALL_FIELD_OPTS)) res = _nc_Synchronize_Options(Normalize_Field(field), opts); RETURN(res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : Field_Options field_opts(const FIELD *field) | | Description : Retrieve the fields options. | | Return Values : The options. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(Field_Options) field_opts(const FIELD *field) { T((T_CALLED("field_opts(%p)"), (const void *)field)); returnCode(ALL_FIELD_OPTS & Normalize_Field(field)->opts); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int field_opts_on(FIELD *field, Field_Options opts) | | Description : Turns on the named options for this field and all the | remaining options are unchanged. | | Return Values : E_OK - success | E_CURRENT - the field is the current field | E_BAD_ARGUMENT - invalid options | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) field_opts_on(FIELD *field, Field_Options opts) { int res = E_BAD_ARGUMENT; T((T_CALLED("field_opts_on(%p,%d)"), (void *)field, opts)); opts &= ALL_FIELD_OPTS; if (!(opts & ~ALL_FIELD_OPTS)) { Normalize_Field(field); res = _nc_Synchronize_Options(field, field->opts | opts); } RETURN(res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int field_opts_off(FIELD *field, Field_Options opts) | | Description : Turns off the named options for this field and all the | remaining options are unchanged. | | Return Values : E_OK - success | E_CURRENT - the field is the current field | E_BAD_ARGUMENT - invalid options | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) field_opts_off(FIELD *field, Field_Options opts) { int res = E_BAD_ARGUMENT; T((T_CALLED("field_opts_off(%p,%d)"), (void *)field, opts)); opts &= ALL_FIELD_OPTS; if (!(opts & ~ALL_FIELD_OPTS)) { Normalize_Field(field); res = _nc_Synchronize_Options(field, field->opts & ~opts); } RETURN(res); } /* fld_opts.c ends here */ ncurses-6.0-20160213/form/frm_win.c0000644000175100001440000000763211326663274015246 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_win.c,v 1.16 2010/01/23 21:14:36 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_form_win(FORM *form,WINDOW *win) | | Description : Set the window of the form to win. | | Return Values : E_OK - success | E_POSTED - form is posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_form_win(FORM *form, WINDOW *win) { T((T_CALLED("set_form_win(%p,%p)"), (void *)form, (void *)win)); if (form && (form->status & _POSTED)) RETURN(E_POSTED); else { #if NCURSES_SP_FUNCS FORM *f = Normalize_Form(form); f->win = win ? win : StdScreen(Get_Form_Screen(f)); RETURN(E_OK); #else Normalize_Form(form)->win = win; RETURN(E_OK); #endif } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : WINDOW *form_win(const FORM *) | | Description : Retrieve the window of the form. | | Return Values : The pointer to the Window or stdscr if there is none. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(WINDOW *) form_win(const FORM *form) { WINDOW *result; const FORM *f; T((T_CALLED("form_win(%p)"), (const void *)form)); f = Normalize_Form(form); #if NCURSES_SP_FUNCS result = (f->win ? f->win : StdScreen(Get_Form_Screen(f))); #else result = (f->win ? f->win : stdscr); #endif returnWin(result); } /* frm_win.c ends here */ ncurses-6.0-20160213/form/frm_hook.c0000644000175100001440000001536012650770520015400 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_hook.c,v 1.17 2016/01/23 21:32:00 tom Exp $") /* "Template" macro to generate function to set application specific hook */ #define GEN_HOOK_SET_FUNCTION( typ, name ) \ NCURSES_IMPEXP int NCURSES_API set_ ## typ ## _ ## name (FORM *form, Form_Hook func)\ {\ T((T_CALLED("set_" #typ"_"#name"(%p,%p)"), (void *) form, TR_FUNC(func)));\ (Normalize_Form( form ) -> typ ## name) = func ;\ RETURN(E_OK);\ } /* "Template" macro to generate function to get application specific hook */ #define GEN_HOOK_GET_FUNCTION( typ, name ) \ NCURSES_IMPEXP Form_Hook NCURSES_API typ ## _ ## name ( const FORM *form )\ {\ T((T_CALLED(#typ "_" #name "(%p)"), (const void *) form));\ returnFormHook( Normalize_Form( form ) -> typ ## name );\ } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_init(FORM *form, Form_Hook f) | | Description : Assigns an application defined initialization function | to be called when the form is posted and just after | the current field changes. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ GEN_HOOK_SET_FUNCTION(field, init) /*--------------------------------------------------------------------------- | Facility : libnform | Function : Form_Hook field_init(const FORM *form) | | Description : Retrieve field initialization routine address. | | Return Values : The address or NULL if no hook defined. +--------------------------------------------------------------------------*/ GEN_HOOK_GET_FUNCTION(field, init) /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_term(FORM *form, Form_Hook f) | | Description : Assigns an application defined finalization function | to be called when the form is unposted and just before | the current field changes. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ GEN_HOOK_SET_FUNCTION(field, term) /*--------------------------------------------------------------------------- | Facility : libnform | Function : Form_Hook field_term(const FORM *form) | | Description : Retrieve field finalization routine address. | | Return Values : The address or NULL if no hook defined. +--------------------------------------------------------------------------*/ GEN_HOOK_GET_FUNCTION(field, term) /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_form_init(FORM *form, Form_Hook f) | | Description : Assigns an application defined initialization function | to be called when the form is posted and just after | a page change. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ GEN_HOOK_SET_FUNCTION(form, init) /*--------------------------------------------------------------------------- | Facility : libnform | Function : Form_Hook form_init(const FORM *form) | | Description : Retrieve form initialization routine address. | | Return Values : The address or NULL if no hook defined. +--------------------------------------------------------------------------*/ GEN_HOOK_GET_FUNCTION(form, init) /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_form_term(FORM *form, Form_Hook f) | | Description : Assigns an application defined finalization function | to be called when the form is unposted and just before | a page change. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ GEN_HOOK_SET_FUNCTION(form, term) /*--------------------------------------------------------------------------- | Facility : libnform | Function : Form_Hook form_term(const FORM *form) | | Description : Retrieve form finalization routine address. | | Return Values : The address or NULL if no hook defined. +--------------------------------------------------------------------------*/ GEN_HOOK_GET_FUNCTION(form, term) /* frm_hook.c ends here */ ncurses-6.0-20160213/form/fld_newftyp.c0000644000175100001440000001346612650770520016122 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_newftyp.c,v 1.20 2016/01/23 21:32:00 tom Exp $") static FIELDTYPE default_fieldtype = { 0, /* status */ 0L, /* reference count */ (FIELDTYPE *)0, /* pointer to left operand */ (FIELDTYPE *)0, /* pointer to right operand */ NULL, /* makearg function */ NULL, /* copyarg function */ NULL, /* freearg function */ INIT_FT_FUNC(NULL), /* field validation function */ INIT_FT_FUNC(NULL), /* Character check function */ INIT_FT_FUNC(NULL), /* enumerate next function */ INIT_FT_FUNC(NULL), /* enumerate previous function */ #if NCURSES_INTEROP_FUNCS NULL /* generic callback alternative to makearg */ #endif }; NCURSES_EXPORT_VAR(FIELDTYPE *) _nc_Default_FieldType = &default_fieldtype; /*--------------------------------------------------------------------------- | Facility : libnform | Function : FIELDTYPE *new_fieldtype( | bool (* const field_check)(FIELD *,const void *), | bool (* const char_check) (int, const void *) ) | | Description : Create a new fieldtype. The application programmer must | write a field_check and a char_check function and give | them as input to this call. | If an error occurs, errno is set to | E_BAD_ARGUMENT - invalid arguments | E_SYSTEM_ERROR - system error (no memory) | | Return Values : Fieldtype pointer or NULL if error occurred +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELDTYPE *) new_fieldtype(bool (*const field_check) (FIELD *, const void *), bool (*const char_check) (int, const void *)) { FIELDTYPE *nftyp = (FIELDTYPE *)0; T((T_CALLED("new_fieldtype(%p,%p)"), TR_FUNC(field_check), TR_FUNC(char_check))); if ((field_check) || (char_check)) { nftyp = typeMalloc(FIELDTYPE, 1); if (nftyp) { T((T_CREATE("fieldtype %p"), (void *)nftyp)); *nftyp = default_fieldtype; #if NCURSES_INTEROP_FUNCS nftyp->fieldcheck.ofcheck = field_check; nftyp->charcheck.occheck = char_check; #else nftyp->fcheck = field_check; nftyp->ccheck = char_check; #endif } else { SET_ERROR(E_SYSTEM_ERROR); } } else { SET_ERROR(E_BAD_ARGUMENT); } returnFieldType(nftyp); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int free_fieldtype(FIELDTYPE *typ) | | Description : Release the memory associated with this fieldtype. | | Return Values : E_OK - success | E_CONNECTED - there are fields referencing the type | E_BAD_ARGUMENT - invalid fieldtype pointer +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) free_fieldtype(FIELDTYPE *typ) { T((T_CALLED("free_fieldtype(%p)"), (void *)typ)); if (!typ) RETURN(E_BAD_ARGUMENT); if (typ->ref != 0) RETURN(E_CONNECTED); if (typ->status & _RESIDENT) RETURN(E_CONNECTED); if (typ->status & _LINKED_TYPE) { if (typ->left) typ->left->ref--; if (typ->right) typ->right->ref--; } free(typ); RETURN(E_OK); } /* fld_newftyp.c ends here */ ncurses-6.0-20160213/form/fty_generic.c0000644000175100001440000002565512650770520016102 0ustar tomusers/**************************************************************************** * Copyright (c) 2008-2012,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /*************************************************************************** * * * Author : Juergen Pfeifer * * * ***************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fty_generic.c,v 1.7 2016/01/23 21:32:00 tom Exp $") /* * This is not a full implementation of a field type, but adds some * support for higher level languages with some restrictions to interop * with C language. Especially the collection of arguments for the * various fieldtypes is not based on the vararg C mechanism, but on a * iterator based callback mechanism that allowes the high level language * to provide the arguments as a structure. Most languages have mechanisms * to layout structures so that they can be passed to C. * The languages can register a new generic fieldtype dynamically and store * a handle (key) to the calling object as an argument. Together with that * it can register a freearg callback, so that the high level language * remains in control of the memory management of the arguments they pass. * The design idea is, that the high-level language - typically a OO * language like C# or Java, uses it's own dispatching mechanisms * (polymorphism) to call the proper check routines responsible for the * argument type. So these language implement typically only one generic * fieldtype they register with the forms library using this call. * * For that purpose we have extended the fieldtype struc by a new element * that gets the arguments from a single struct passed by the caller. * */ #if NCURSES_INTEROP_FUNCS /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Generic_This_Type( void * arg ) | | Description : We interpret the passed arg just as a handle the | calling language uses to keep track of its allocated | argument structures. We can simply copy it back. | | Return Values : Pointer to argument structure +--------------------------------------------------------------------------*/ static void * Generic_This_Type(void *arg) { return (arg); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : FIELDTYPE *_nc_generic_fieldtype( | bool (* const field_check)(FIELD *,const void *), | bool (* const char_check) (int, const void *), | bool (*const next)(FORM*,FIELD*,const void*), | bool (*const prev)(FORM*,FIELD*,const void*), | void (*freecallback)(void*)) | | Description : Create a new fieldtype. The application programmer must | write a field_check and a char_check function and give | them as input to this call. A callback to allow the | release of the allocated memory must also be provided. | For generic field types, we provide some more | information about the field as parameters. | | If an error occurs, errno is set to | E_BAD_ARGUMENT - invalid arguments | E_SYSTEM_ERROR - system error (no memory) | | Return Values : Fieldtype pointer or NULL if error occurred +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELDTYPE *) _nc_generic_fieldtype(bool (*const field_check) (FORM *, FIELD *, const void *), bool (*const char_check) (int, FORM *, FIELD *, const void *), bool (*const next) (FORM *, FIELD *, const void *), bool (*const prev) (FORM *, FIELD *, const void *), void (*freecallback) (void *)) { int code = E_SYSTEM_ERROR; FIELDTYPE *res = (FIELDTYPE *)0; T((T_CALLED("_nc_generic_fieldtype(%p,%p,%p,%p,%p)"), TR_FUNC(field_check), TR_FUNC(char_check), TR_FUNC(next), TR_FUNC(prev), TR_FUNC(freecallback))); if (field_check || char_check) { res = typeMalloc(FIELDTYPE, 1); if (res) { *res = *_nc_Default_FieldType; SetStatus(res, (_HAS_ARGS | _GENERIC)); res->fieldcheck.gfcheck = field_check; res->charcheck.gccheck = char_check; res->genericarg = Generic_This_Type; res->freearg = freecallback; res->enum_next.gnext = next; res->enum_prev.gprev = prev; code = E_OK; } } else code = E_BAD_ARGUMENT; if (E_OK != code) SET_ERROR(code); returnFieldType(res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static TypeArgument *GenericArgument( | const FIELDTYPE* typ, | int (*argiterator)(void**), | int* err) | | Description : The iterator callback must browse through all fieldtype | parameters that have an argument associated with the | type. The iterator returns 1 if the operation to get | the next element was successfull, 0 otherwise. If the | iterator could move to the next argument, it fills | the void* pointer representing the argument into the | location provided as argument to the iterator. | The err reference is used to keep track of errors. | | Return Values : Pointer to argument structure +--------------------------------------------------------------------------*/ static TypeArgument * GenericArgument(const FIELDTYPE *typ, int (*argiterator) (void **), int *err) { TypeArgument *res = (TypeArgument *)0; if (typ != 0 && (typ->status & _HAS_ARGS) != 0 && err != 0 && argiterator != 0) { if (typ->status & _LINKED_TYPE) { /* Composite fieldtypes keep track internally of their own memory */ TypeArgument *p = typeMalloc(TypeArgument, 1); if (p) { p->left = GenericArgument(typ->left, argiterator, err); p->right = GenericArgument(typ->right, argiterator, err); return p; } else *err += 1; } else { assert(typ->genericarg != (void *)0); if (typ->genericarg == 0) *err += 1; else { void *argp; int valid = argiterator(&argp); if (valid == 0 || argp == 0 || !(res = (TypeArgument *)typ->genericarg(argp))) { *err += 1; } } } } return res; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int _nc_set_generic_fieldtype( | FIELD* field, | FIELDTYPE* ftyp, | int (*argiterator)(void**)) | | Description : Assign the fieldtype to the field and use the iterator | mechanism to get the arguments when a check is | performed. | | Return Values : E_OK if all went well | E_SYSTEM_ERROR if an error occurred +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) _nc_set_generic_fieldtype(FIELD *field, FIELDTYPE *ftyp, int (*argiterator) (void **)) { int code = E_SYSTEM_ERROR; int err = 0; if (field) { if (field && field->type) _nc_Free_Type(field); field->type = ftyp; if (ftyp) { if (argiterator) { /* The precondition is that the iterator is reset */ field->arg = (void *)GenericArgument(field->type, argiterator, &err); if (err) { _nc_Free_Argument(field->type, (TypeArgument *)(field->arg)); field->type = (FIELDTYPE *)0; field->arg = (void *)0; } else { code = E_OK; if (field->type) field->type->ref++; } } } else { field->arg = (void *)0; code = E_OK; } } return code; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : WINDOW* _nc_form_cursor( | FORM* form, | int *pRow, int *pCol) | | Description : Get the current position of the form cursor position | We also return the field window | | Return Values : The fields Window or NULL on error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(WINDOW *) _nc_form_cursor(const FORM *form, int *pRow, int *pCol) { int code = E_SYSTEM_ERROR; WINDOW *res = (WINDOW *)0; if (!(form == 0 || pRow == 0 || pCol == 0)) { *pRow = form->currow; *pCol = form->curcol; res = form->w; code = E_OK; } if (code != E_OK) SET_ERROR(code); return res; } #else extern void _nc_fty_generic(void); void _nc_fty_generic(void) { } #endif /* fty_generic.c ends here */ ncurses-6.0-20160213/form/fld_ftlink.c0000644000175100001440000000771511764765005015724 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_ftlink.c,v 1.15 2012/06/10 00:27:49 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : FIELDTYPE *link_fieldtype( | FIELDTYPE *type1, | FIELDTYPE *type2) | | Description : Create a new fieldtype built from the two given types. | They are connected by an logical 'OR'. | If an error occurs, errno is set to | E_BAD_ARGUMENT - invalid arguments | E_SYSTEM_ERROR - system error (no memory) | | Return Values : Fieldtype pointer or NULL if error occurred. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELDTYPE *) link_fieldtype(FIELDTYPE *type1, FIELDTYPE *type2) { FIELDTYPE *nftyp = (FIELDTYPE *)0; T((T_CALLED("link_fieldtype(%p,%p)"), (void *)type1, (void *)type2)); if (type1 && type2) { nftyp = typeMalloc(FIELDTYPE, 1); if (nftyp) { T((T_CREATE("fieldtype %p"), (void *)nftyp)); *nftyp = *_nc_Default_FieldType; SetStatus(nftyp, _LINKED_TYPE); if ((type1->status & _HAS_ARGS) || (type2->status & _HAS_ARGS)) SetStatus(nftyp, _HAS_ARGS); if ((type1->status & _HAS_CHOICE) || (type2->status & _HAS_CHOICE)) SetStatus(nftyp, _HAS_CHOICE); nftyp->left = type1; nftyp->right = type2; type1->ref++; type2->ref++; } else { SET_ERROR(E_SYSTEM_ERROR); } } else { SET_ERROR(E_BAD_ARGUMENT); } returnFieldType(nftyp); } /* fld_ftlink.c ends here */ ncurses-6.0-20160213/form/frm_def.c0000644000175100001440000003411311726771674015211 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_def.c,v 1.26 2012/03/11 00:37:16 tom Exp $") /* this can't be readonly */ static FORM default_form = { 0, /* status */ 0, /* rows */ 0, /* cols */ 0, /* currow */ 0, /* curcol */ 0, /* toprow */ 0, /* begincol */ -1, /* maxfield */ -1, /* maxpage */ -1, /* curpage */ ALL_FORM_OPTS, /* opts */ (WINDOW *)0, /* win */ (WINDOW *)0, /* sub */ (WINDOW *)0, /* w */ (FIELD **)0, /* field */ (FIELD *)0, /* current */ (_PAGE *) 0, /* page */ (char *)0, /* usrptr */ NULL, /* forminit */ NULL, /* formterm */ NULL, /* fieldinit */ NULL /* fieldterm */ }; NCURSES_EXPORT_VAR(FORM *) _nc_Default_Form = &default_form; /*--------------------------------------------------------------------------- | Facility : libnform | Function : static FIELD *Insert_Field_By_Position( | FIELD *new_field, | FIELD *head ) | | Description : Insert new_field into sorted fieldlist with head "head" | and return new head of sorted fieldlist. Sorting | criteria is (row,column). This is a circular list. | | Return Values : New head of sorted fieldlist +--------------------------------------------------------------------------*/ static FIELD * Insert_Field_By_Position(FIELD *newfield, FIELD *head) { FIELD *current, *newhead; assert(newfield); if (!head) { /* empty list is trivial */ newhead = newfield->snext = newfield->sprev = newfield; } else { newhead = current = head; while ((current->frow < newfield->frow) || ((current->frow == newfield->frow) && (current->fcol < newfield->fcol))) { current = current->snext; if (current == head) { /* We cycled through. Reset head to indicate that */ head = (FIELD *)0; break; } } /* we leave the loop with current pointing to the field after newfield */ newfield->snext = current; newfield->sprev = current->sprev; newfield->snext->sprev = newfield; newfield->sprev->snext = newfield; if (current == head) newhead = newfield; } return (newhead); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Disconnect_Fields(FORM *form) | | Description : Break association between form and array of fields. | | Return Values : - +--------------------------------------------------------------------------*/ static void Disconnect_Fields(FORM *form) { if (form->field) { FIELD **fields; for (fields = form->field; *fields; fields++) { if (form == (*fields)->form) (*fields)->form = (FORM *)0; } form->rows = form->cols = 0; form->maxfield = form->maxpage = -1; form->field = (FIELD **)0; if (form->page) free(form->page); form->page = (_PAGE *) 0; } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Connect_Fields(FORM *form, FIELD **fields) | | Description : Set association between form and array of fields. | | Return Values : E_OK - no error | E_CONNECTED - a field is already connected | E_BAD_ARGUMENT - Invalid form pointer or field array | E_SYSTEM_ERROR - not enough memory +--------------------------------------------------------------------------*/ static int Connect_Fields(FORM *form, FIELD **fields) { int field_cnt, j; int page_nr; int maximum_row_in_field, maximum_col_in_field; _PAGE *pg; T((T_CALLED("Connect_Fields(%p,%p)"), (void *)form, (void *)fields)); assert(form); form->field = fields; form->maxfield = 0; form->maxpage = 0; if (!fields) RETURN(E_OK); page_nr = 0; /* store formpointer in fields and count pages */ for (field_cnt = 0; fields[field_cnt]; field_cnt++) { if (fields[field_cnt]->form) RETURN(E_CONNECTED); if (field_cnt == 0 || (fields[field_cnt]->status & _NEWPAGE)) page_nr++; fields[field_cnt]->form = form; } if (field_cnt == 0 || (short)field_cnt < 0) RETURN(E_BAD_ARGUMENT); /* allocate page structures */ if ((pg = typeMalloc(_PAGE, page_nr)) != (_PAGE *) 0) { T((T_CREATE("_PAGE %p"), (void *)pg)); form->page = pg; } else RETURN(E_SYSTEM_ERROR); /* Cycle through fields and calculate page boundaries as well as size of the form */ for (j = 0; j < field_cnt; j++) { if (j == 0) pg->pmin = (short) j; else { if (fields[j]->status & _NEWPAGE) { pg->pmax = (short) (j - 1); pg++; pg->pmin = (short) j; } } maximum_row_in_field = fields[j]->frow + fields[j]->rows; maximum_col_in_field = fields[j]->fcol + fields[j]->cols; if (form->rows < maximum_row_in_field) form->rows = (short) maximum_row_in_field; if (form->cols < maximum_col_in_field) form->cols = (short) maximum_col_in_field; } pg->pmax = (short) (field_cnt - 1); form->maxfield = (short) field_cnt; form->maxpage = (short) page_nr; /* Sort fields on form pages */ for (page_nr = 0; page_nr < form->maxpage; page_nr++) { FIELD *fld = (FIELD *)0; for (j = form->page[page_nr].pmin; j <= form->page[page_nr].pmax; j++) { fields[j]->index = (short) j; fields[j]->page = (short) page_nr; fld = Insert_Field_By_Position(fields[j], fld); } if (fld) { form->page[page_nr].smin = fld->index; form->page[page_nr].smax = fld->sprev->index; } else { form->page[page_nr].smin = 0; form->page[page_nr].smax = 0; } } RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Associate_Fields(FORM *form, FIELD **fields) | | Description : Set association between form and array of fields. | If there are fields, position to first active field. | | Return Values : E_OK - success | E_BAD_ARGUMENT - Invalid form pointer or field array | E_CONNECTED - a field is already connected | E_SYSTEM_ERROR - not enough memory +--------------------------------------------------------------------------*/ NCURSES_INLINE static int Associate_Fields(FORM *form, FIELD **fields) { int res = Connect_Fields(form, fields); if (res == E_OK) { if (form->maxpage > 0) { form->curpage = 0; form_driver(form, FIRST_ACTIVE_MAGIC); } else { form->curpage = -1; form->current = (FIELD *)0; } } return (res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : FORM *new_form_sp(SCREEN* sp, FIELD** fields ) | | Description : Create new form with given array of fields. | | Return Values : Pointer to form. NULL if error occurred. ! Set errno: | E_OK - success | E_BAD_ARGUMENT - Invalid form pointer or field array | E_CONNECTED - a field is already connected | E_SYSTEM_ERROR - not enough memory +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FORM *) NCURSES_SP_NAME(new_form) (NCURSES_SP_DCLx FIELD **fields) { int err = E_SYSTEM_ERROR; FORM *form = (FORM *)0; T((T_CALLED("new_form(%p,%p)"), (void *)SP_PARM, (void *)fields)); if (IsValidScreen(SP_PARM)) { form = typeMalloc(FORM, 1); if (form) { T((T_CREATE("form %p"), (void *)form)); *form = *_nc_Default_Form; /* This ensures win and sub are always non-null, so we can derive always the SCREEN that this form is running on. */ form->win = StdScreen(SP_PARM); form->sub = StdScreen(SP_PARM); if ((err = Associate_Fields(form, fields)) != E_OK) { free_form(form); form = (FORM *)0; } } } if (!form) SET_ERROR(err); returnForm(form); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : FORM* new_form(FIELD** fields ) | | Description : Create new form with given array of fields. | | Return Values : Pointer to form. NULL if error occurred. ! Set errno: | E_OK - success | E_BAD_ARGUMENT - Invalid form pointer or field array | E_CONNECTED - a field is already connected | E_SYSTEM_ERROR - not enough memory +--------------------------------------------------------------------------*/ #if NCURSES_SP_FUNCS NCURSES_EXPORT(FORM *) new_form(FIELD **fields) { return NCURSES_SP_NAME(new_form) (CURRENT_SCREEN, fields); } #endif /*--------------------------------------------------------------------------- | Facility : libnform | Function : int free_form( FORM *form ) | | Description : Release internal memory associated with form. | | Return Values : E_OK - no error | E_BAD_ARGUMENT - invalid form pointer | E_POSTED - form is posted +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) free_form(FORM *form) { T((T_CALLED("free_form(%p)"), (void *)form)); if (!form) RETURN(E_BAD_ARGUMENT); if (form->status & _POSTED) RETURN(E_POSTED); Disconnect_Fields(form); if (form->page) free(form->page); free(form); RETURN(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_form_fields( FORM *form, FIELD **fields ) | | Description : Set a new association of an array of fields to a form | | Return Values : E_OK - no error | E_BAD_ARGUMENT - Invalid form pointer or field array | E_CONNECTED - a field is already connected | E_POSTED - form is posted | E_SYSTEM_ERROR - not enough memory +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_form_fields(FORM *form, FIELD **fields) { FIELD **old; int res; T((T_CALLED("set_form_fields(%p,%p)"), (void *)form, (void *)fields)); if (!form) RETURN(E_BAD_ARGUMENT); if (form->status & _POSTED) RETURN(E_POSTED); old = form->field; Disconnect_Fields(form); if ((res = Associate_Fields(form, fields)) != E_OK) Connect_Fields(form, old); RETURN(res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : FIELD **form_fields( const FORM *form ) | | Description : Retrieve array of fields | | Return Values : Pointer to field array +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELD **) form_fields(const FORM *form) { T((T_CALLED("form_field(%p)"), (const void *)form)); returnFieldPtr(Normalize_Form(form)->field); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int field_count( const FORM *form ) | | Description : Retrieve number of fields | | Return Values : Number of fields, -1 if none are defined +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) field_count(const FORM *form) { T((T_CALLED("field_count(%p)"), (const void *)form)); returnCode(Normalize_Form(form)->maxfield); } /* frm_def.c ends here */ ncurses-6.0-20160213/form/frm_driver.c0000644000175100001440000047650612626410355015750 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_driver.c,v 1.117 2015/11/28 20:39:09 tom Exp $") /*---------------------------------------------------------------------------- This is the core module of the form library. It contains the majority of the driver routines as well as the form_driver function. Essentially this module is nearly the whole library. This is because all the functions in this module depends on some others in the module, so it makes no sense to split them into separate files because they will always be linked together. The only acceptable concern is turnaround time for this module, but now we have all Pentiums or RISCs, so what! The driver routines are grouped into nine generic categories: a) Page Navigation ( all functions prefixed by PN_ ) The current page of the form is left and some new page is entered. b) Inter-Field Navigation ( all functions prefixed by FN_ ) The current field of the form is left and some new field is entered. c) Intra-Field Navigation ( all functions prefixed by IFN_ ) The current position in the current field is changed. d) Vertical Scrolling ( all functions prefixed by VSC_ ) Essentially this is a specialization of Intra-Field navigation. It has to check for a multi-line field. e) Horizontal Scrolling ( all functions prefixed by HSC_ ) Essentially this is a specialization of Intra-Field navigation. It has to check for a single-line field. f) Field Editing ( all functions prefixed by FE_ ) The content of the current field is changed g) Edit Mode requests ( all functions prefixed by EM_ ) Switching between insert and overlay mode h) Field-Validation requests ( all functions prefixed by FV_ ) Perform verifications of the field. i) Choice requests ( all functions prefixed by CR_ ) Requests to enumerate possible field values --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Some remarks on the placements of assert() macros : I use them only on "strategic" places, i.e. top level entries where I want to make sure that things are set correctly. Throughout subordinate routines I omit them mostly. --------------------------------------------------------------------------*/ /* Some options that may effect compatibility in behavior to SVr4 forms, but they are here to allow a more intuitive and user friendly behavior of our form implementation. This doesn't affect the API, so we feel it is uncritical. The initial implementation tries to stay very close with the behavior of the original SVr4 implementation, although in some areas it is quite clear that this isn't the most appropriate way. As far as possible this sources will allow you to build a forms lib that behaves quite similar to SVr4, but now and in the future we will give you better options. Perhaps at some time we will make this configurable at runtime. */ /* Implement a more user-friendly previous/next word behavior */ #define FRIENDLY_PREV_NEXT_WORD (1) /* Fix the wrong behavior for forms with all fields inactive */ #define FIX_FORM_INACTIVE_BUG (1) /* Allow dynamic field growth also when navigating past the end */ #define GROW_IF_NAVIGATE (1) #if USE_WIDEC_SUPPORT #define myADDNSTR(w, s, n) wadd_wchnstr(w, s, n) #define myINSNSTR(w, s, n) wins_wchnstr(w, s, n) #define myINNSTR(w, s, n) fix_wchnstr(w, s, n) #define myWCWIDTH(w, y, x) cell_width(w, y, x) #else #define myADDNSTR(w, s, n) waddnstr(w, s, n) #define myINSNSTR(w, s, n) winsnstr(w, s, n) #define myINNSTR(w, s, n) winnstr(w, s, n) #define myWCWIDTH(w, y, x) 1 #endif /*---------------------------------------------------------------------------- Forward references to some internally used static functions --------------------------------------------------------------------------*/ static int Inter_Field_Navigation(int (*const fct) (FORM *), FORM *form); static int FN_Next_Field(FORM *form); static int FN_Previous_Field(FORM *form); static int FE_New_Line(FORM *); static int FE_Delete_Previous(FORM *); /*---------------------------------------------------------------------------- Macro Definitions. Some Remarks on that: I use the convention to use UPPERCASE for constants defined by Macros. If I provide a macro as a kind of inline routine to provide some logic, I use my Upper_Lower case style. --------------------------------------------------------------------------*/ /* Calculate the position of a single row in a field buffer */ #define Position_Of_Row_In_Buffer(field,row) ((row)*(field)->dcols) /* Calculate start address for the fields buffer# N */ #define Address_Of_Nth_Buffer(field,N) \ ((field)->buf + (N)*(1+Buffer_Length(field))) /* Calculate the start address of the row in the fields specified buffer# N */ #define Address_Of_Row_In_Nth_Buffer(field,N,row) \ (Address_Of_Nth_Buffer(field,N) + Position_Of_Row_In_Buffer(field,row)) /* Calculate the start address of the row in the fields primary buffer */ #define Address_Of_Row_In_Buffer(field,row) \ Address_Of_Row_In_Nth_Buffer(field,0,row) /* Calculate the start address of the row in the forms current field buffer# N */ #define Address_Of_Current_Row_In_Nth_Buffer(form,N) \ Address_Of_Row_In_Nth_Buffer((form)->current,N,(form)->currow) /* Calculate the start address of the row in the forms current field primary buffer */ #define Address_Of_Current_Row_In_Buffer(form) \ Address_Of_Current_Row_In_Nth_Buffer(form,0) /* Calculate the address of the cursor in the forms current field primary buffer */ #define Address_Of_Current_Position_In_Nth_Buffer(form,N) \ (Address_Of_Current_Row_In_Nth_Buffer(form,N) + (form)->curcol) /* Calculate the address of the cursor in the forms current field buffer# N */ #define Address_Of_Current_Position_In_Buffer(form) \ Address_Of_Current_Position_In_Nth_Buffer(form,0) /* Logic to decide whether or not a field is actually a field with vertical or horizontal scrolling */ #define Is_Scroll_Field(field) \ (((field)->drows > (field)->rows) || \ ((field)->dcols > (field)->cols)) /* Logic to decide whether or not a field needs to have an individual window instead of a derived window because it contains invisible parts. This is true for non-public fields and for scrollable fields. */ #define Has_Invisible_Parts(field) \ (!(Field_Has_Option(field, O_PUBLIC)) || \ Is_Scroll_Field(field)) /* Logic to decide whether or not a field needs justification */ #define Justification_Allowed(field) \ (((field)->just != NO_JUSTIFICATION) && \ (Single_Line_Field(field)) && \ ((Field_Has_Option(field, O_STATIC) && \ ((field)->dcols == (field)->cols)) || \ Field_Has_Option(field, O_DYNAMIC_JUSTIFY))) /* Logic to determine whether or not a dynamic field may still grow */ #define Growable(field) ((field)->status & _MAY_GROW) /* Macro to set the attributes for a fields window */ #define Set_Field_Window_Attributes(field,win) \ ( wbkgdset((win),(chtype)((chtype)((field)->pad) | (field)->back)), \ (void) wattrset((win), (int)(field)->fore) ) /* Logic to decide whether or not a field really appears on the form */ #define Field_Really_Appears(field) \ ((field->form) &&\ (field->form->status & _POSTED) &&\ (Field_Has_Option(field, O_VISIBLE)) &&\ (field->page == field->form->curpage)) /* Logic to determine whether or not we are on the first position in the current field */ #define First_Position_In_Current_Field(form) \ (((form)->currow==0) && ((form)->curcol==0)) #define Minimum(a,b) (((a)<=(b)) ? (a) : (b)) #define Maximum(a,b) (((a)>=(b)) ? (a) : (b)) /*---------------------------------------------------------------------------- Useful constants --------------------------------------------------------------------------*/ static FIELD_CELL myBLANK = BLANK; static FIELD_CELL myZEROS; #ifdef TRACE static void check_pos(FORM *form, int lineno) { int y, x; if (form && form->w) { getyx(form->w, y, x); if (y != form->currow || x != form->curcol) { T(("CHECKPOS %s@%d have position %d,%d vs want %d,%d", __FILE__, lineno, y, x, form->currow, form->curcol)); } } } #define CHECKPOS(form) check_pos(form, __LINE__) #else #define CHECKPOS(form) /* nothing */ #endif /*---------------------------------------------------------------------------- Wide-character special functions --------------------------------------------------------------------------*/ #if USE_WIDEC_SUPPORT /* like winsnstr */ static int wins_wchnstr(WINDOW *w, cchar_t *s, int n) { int code = ERR; int y, x; while (n-- > 0) { getyx(w, y, x); if ((code = wins_wch(w, s++)) != OK) break; if ((code = wmove(w, y, x + 1)) != OK) break; } return code; } /* win_wchnstr is inconsistent with winnstr, since it returns OK rather than * the number of items transferred. */ static int fix_wchnstr(WINDOW *w, cchar_t *s, int n) { int x; win_wchnstr(w, s, n); /* * This function is used to extract the text only from the window. * Strip attributes and color from the string so they will not be added * back when copying the string to the window. */ for (x = 0; x < n; ++x) { RemAttr(s[x], A_ATTRIBUTES); SetPair(s[x], 0); } return n; } /* * Returns the column of the base of the given cell. */ static int cell_base(WINDOW *win, int y, int x) { int result = x; while (LEGALYX(win, y, x)) { cchar_t *data = &(win->_line[y].text[x]); if (isWidecBase(CHDEREF(data)) || !isWidecExt(CHDEREF(data))) { result = x; break; } --x; } return result; } /* * Returns the number of columns needed for the given cell in a window. */ static int cell_width(WINDOW *win, int y, int x) { int result = 1; if (LEGALYX(win, y, x)) { cchar_t *data = &(win->_line[y].text[x]); if (isWidecExt(CHDEREF(data))) { /* recur, providing the number of columns to the next character */ result = cell_width(win, y, x - 1); } else { result = wcwidth(CharOf(CHDEREF(data))); } } return result; } /* * There is no wide-character function such as wdel_wch(), so we must find * all of the cells that comprise a multi-column character and delete them * one-by-one. */ static void delete_char(FORM *form) { int cells = cell_width(form->w, form->currow, form->curcol); form->curcol = cell_base(form->w, form->currow, form->curcol); wmove(form->w, form->currow, form->curcol); while (cells-- > 0) { wdelch(form->w); } } #define DeleteChar(form) delete_char(form) #else #define DeleteChar(form) \ wmove((form)->w, (form)->currow, (form)->curcol), \ wdelch((form)->w) #endif /*--------------------------------------------------------------------------- | Facility : libnform | Function : static char *Get_Start_Of_Data(char * buf, int blen) | | Description : Return pointer to first non-blank position in buffer. | If buffer is empty return pointer to buffer itself. | | Return Values : Pointer to first non-blank position in buffer +--------------------------------------------------------------------------*/ NCURSES_INLINE static FIELD_CELL * Get_Start_Of_Data(FIELD_CELL *buf, int blen) { FIELD_CELL *p = buf; FIELD_CELL *end = &buf[blen]; assert(buf && blen >= 0); while ((p < end) && ISBLANK(*p)) p++; return ((p == end) ? buf : p); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static char *After_End_Of_Data(char * buf, int blen) | | Description : Return pointer after last non-blank position in buffer. | If buffer is empty, return pointer to buffer itself. | | Return Values : Pointer to position after last non-blank position in | buffer. +--------------------------------------------------------------------------*/ NCURSES_INLINE static FIELD_CELL * After_End_Of_Data(FIELD_CELL *buf, int blen) { FIELD_CELL *p = &buf[blen]; assert(buf && blen >= 0); while ((p > buf) && ISBLANK(p[-1])) p--; return (p); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static char *Get_First_Whitespace_Character( | char * buf, int blen) | | Description : Position to the first whitespace character. | | Return Values : Pointer to first whitespace character in buffer. +--------------------------------------------------------------------------*/ NCURSES_INLINE static FIELD_CELL * Get_First_Whitespace_Character(FIELD_CELL *buf, int blen) { FIELD_CELL *p = buf; FIELD_CELL *end = &p[blen]; assert(buf && blen >= 0); while ((p < end) && !ISBLANK(*p)) p++; return ((p == end) ? buf : p); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static char *After_Last_Whitespace_Character( | char * buf, int blen) | | Description : Get the position after the last whitespace character. | | Return Values : Pointer to position after last whitespace character in | buffer. +--------------------------------------------------------------------------*/ NCURSES_INLINE static FIELD_CELL * After_Last_Whitespace_Character(FIELD_CELL *buf, int blen) { FIELD_CELL *p = &buf[blen]; assert(buf && blen >= 0); while ((p > buf) && !ISBLANK(p[-1])) p--; return (p); } /* Set this to 1 to use the div_t version. This is a good idea if your compiler has an intrinsic div() support. Unfortunately GNU-C has it not yet. N.B.: This only works if form->curcol follows immediately form->currow and both are of type int. */ #define USE_DIV_T (0) /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Adjust_Cursor_Position( | FORM * form, const char * pos) | | Description : Set current row and column of the form to values | corresponding to the buffer position. | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_INLINE static void Adjust_Cursor_Position(FORM *form, const FIELD_CELL *pos) { FIELD *field; int idx; field = form->current; assert(pos >= field->buf && field->dcols > 0); idx = (int)(pos - field->buf); #if USE_DIV_T *((div_t *) & (form->currow)) = div(idx, field->dcols); #else form->currow = idx / field->dcols; form->curcol = idx - field->cols * form->currow; #endif if (field->drows < form->currow) form->currow = 0; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Buffer_To_Window( | const FIELD * field, | WINDOW * win) | | Description : Copy the buffer to the window. If it is a multi-line | field, the buffer is split to the lines of the | window without any editing. | | Return Values : - +--------------------------------------------------------------------------*/ static void Buffer_To_Window(const FIELD *field, WINDOW *win) { int width, height; int y, x; int len; int row; FIELD_CELL *pBuffer; assert(win && field); getyx(win, y, x); width = getmaxx(win); height = getmaxy(win); for (row = 0, pBuffer = field->buf; row < height; row++, pBuffer += width) { if ((len = (int)(After_End_Of_Data(pBuffer, width) - pBuffer)) > 0) { wmove(win, row, 0); myADDNSTR(win, pBuffer, len); } } wmove(win, y, x); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : void _nc_get_fieldbuffer( | WINDOW * win, | FIELD * field, | FIELD_CELL * buf) | | Description : Copy the content of the window into the buffer. | The multiple lines of a window are simply | concatenated into the buffer. Pad characters in | the window will be replaced by blanks in the buffer. | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_EXPORT(void) _nc_get_fieldbuffer(FORM *form, FIELD *field, FIELD_CELL *buf) { int pad; int len = 0; FIELD_CELL *p; int row, height; WINDOW *win; assert(form && field && buf); win = form->w; assert(win); pad = field->pad; p = buf; height = getmaxy(win); for (row = 0; (row < height) && (row < field->drows); row++) { wmove(win, row, 0); len += myINNSTR(win, p + len, field->dcols); } p[len] = myZEROS; /* replace visual padding character by blanks in buffer */ if (pad != C_BLANK) { int i; for (i = 0; i < len; i++, p++) { if ((unsigned long)CharOf(*p) == ChCharOf(pad) #if USE_WIDEC_SUPPORT && p->chars[1] == 0 #endif ) *p = myBLANK; } } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Window_To_Buffer( | FORM * form, | FIELD * field) | | Description : Copy the content of the window into the buffer. | The multiple lines of a window are simply | concatenated into the buffer. Pad characters in | the window will be replaced by blanks in the buffer. | | Return Values : - +--------------------------------------------------------------------------*/ static void Window_To_Buffer(FORM *form, FIELD *field) { _nc_get_fieldbuffer(form, field, field->buf); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Synchronize_Buffer(FORM * form) | | Description : If there was a change, copy the content of the | window into the buffer, so the buffer is synchronized | with the windows content. We have to indicate that the | buffer needs validation due to the change. | | Return Values : - +--------------------------------------------------------------------------*/ NCURSES_INLINE static void Synchronize_Buffer(FORM *form) { if (form->status & _WINDOW_MODIFIED) { ClrStatus(form, _WINDOW_MODIFIED); SetStatus(form, _FCHECK_REQUIRED); Window_To_Buffer(form, form->current); wmove(form->w, form->currow, form->curcol); } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Field_Grown( FIELD *field, int amount) | | Description : This function is called for growable dynamic fields | only. It has to increase the buffers and to allocate | a new window for this field. | This function has the side effect to set a new | field-buffer pointer, the dcols and drows values | as well as a new current Window for the field. | | Return Values : TRUE - field successfully increased | FALSE - there was some error +--------------------------------------------------------------------------*/ static bool Field_Grown(FIELD *field, int amount) { bool result = FALSE; if (field && Growable(field)) { bool single_line_field = Single_Line_Field(field); int old_buflen = Buffer_Length(field); int new_buflen; int old_dcols = field->dcols; int old_drows = field->drows; FIELD_CELL *oldbuf = field->buf; FIELD_CELL *newbuf; int growth; FORM *form = field->form; bool need_visual_update = ((form != (FORM *)0) && (form->status & _POSTED) && (form->current == field)); if (need_visual_update) Synchronize_Buffer(form); if (single_line_field) { growth = field->cols * amount; if (field->maxgrow) growth = Minimum(field->maxgrow - field->dcols, growth); field->dcols += growth; if (field->dcols == field->maxgrow) ClrStatus(field, _MAY_GROW); } else { growth = (field->rows + field->nrow) * amount; if (field->maxgrow) growth = Minimum(field->maxgrow - field->drows, growth); field->drows += growth; if (field->drows == field->maxgrow) ClrStatus(field, _MAY_GROW); } /* drows, dcols changed, so we get really the new buffer length */ new_buflen = Buffer_Length(field); newbuf = (FIELD_CELL *)malloc(Total_Buffer_Size(field)); if (!newbuf) { /* restore to previous state */ field->dcols = old_dcols; field->drows = old_drows; if ((single_line_field && (field->dcols != field->maxgrow)) || (!single_line_field && (field->drows != field->maxgrow))) SetStatus(field, _MAY_GROW); } else { /* Copy all the buffers. This is the reason why we can't just use * realloc(). */ int i, j; FIELD_CELL *old_bp; FIELD_CELL *new_bp; result = TRUE; /* allow sharing of recovery on failure */ T((T_CREATE("fieldcell %p"), (void *)newbuf)); field->buf = newbuf; for (i = 0; i <= field->nbuf; i++) { new_bp = Address_Of_Nth_Buffer(field, i); old_bp = oldbuf + i * (1 + old_buflen); for (j = 0; j < old_buflen; ++j) new_bp[j] = old_bp[j]; while (j < new_buflen) new_bp[j++] = myBLANK; new_bp[new_buflen] = myZEROS; } #if USE_WIDEC_SUPPORT && NCURSES_EXT_FUNCS if (wresize(field->working, 1, Buffer_Length(field) + 1) == ERR) result = FALSE; #endif if (need_visual_update && result) { WINDOW *new_window = newpad(field->drows, field->dcols); if (new_window != 0) { assert(form != (FORM *)0); if (form->w) delwin(form->w); form->w = new_window; Set_Field_Window_Attributes(field, form->w); werase(form->w); Buffer_To_Window(field, form->w); untouchwin(form->w); wmove(form->w, form->currow, form->curcol); } else result = FALSE; } if (result) { free(oldbuf); /* reflect changes in linked fields */ if (field != field->link) { FIELD *linked_field; for (linked_field = field->link; linked_field != field; linked_field = linked_field->link) { linked_field->buf = field->buf; linked_field->drows = field->drows; linked_field->dcols = field->dcols; } } } else { /* restore old state */ field->dcols = old_dcols; field->drows = old_drows; field->buf = oldbuf; if ((single_line_field && (field->dcols != field->maxgrow)) || (!single_line_field && (field->drows != field->maxgrow))) SetStatus(field, _MAY_GROW); free(newbuf); } } } return (result); } #ifdef NCURSES_MOUSE_VERSION /*--------------------------------------------------------------------------- | Facility : libnform | Function : int Field_encloses(FIELD *field, int ry, int rx) | | Description : Check if the given coordinates lie within the given field. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid form pointer | E_SYSTEM_ERROR - form has no current field or | field-window +--------------------------------------------------------------------------*/ static int Field_encloses(FIELD *field, int ry, int rx) { T((T_CALLED("Field_encloses(%p)"), (void *)field)); if (field != 0 && field->frow <= ry && (field->frow + field->rows) > ry && field->fcol <= rx && (field->fcol + field->cols) > rx) { RETURN(E_OK); } RETURN(E_INVALID_FIELD); } #endif /*--------------------------------------------------------------------------- | Facility : libnform | Function : int _nc_Position_Form_Cursor(FORM * form) | | Description : Position the cursor in the window for the current | field to be in sync. with the currow and curcol | values. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid form pointer | E_SYSTEM_ERROR - form has no current field or | field-window +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) _nc_Position_Form_Cursor(FORM *form) { FIELD *field; WINDOW *formwin; if (!form) return (E_BAD_ARGUMENT); if (!form->w || !form->current) return (E_SYSTEM_ERROR); field = form->current; formwin = Get_Form_Window(form); wmove(form->w, form->currow, form->curcol); if (Has_Invisible_Parts(field)) { /* in this case fieldwin isn't derived from formwin, so we have to move the cursor in formwin by hand... */ wmove(formwin, field->frow + form->currow - form->toprow, field->fcol + form->curcol - form->begincol); wcursyncup(formwin); } else wcursyncup(form->w); return (E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int _nc_Refresh_Current_Field(FORM * form) | | Description : Propagate the changes in the fields window to the | window of the form. | | Return Values : E_OK - on success | E_BAD_ARGUMENT - invalid form pointer | E_SYSTEM_ERROR - general error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) _nc_Refresh_Current_Field(FORM *form) { WINDOW *formwin; FIELD *field; T((T_CALLED("_nc_Refresh_Current_Field(%p)"), (void *)form)); if (!form) RETURN(E_BAD_ARGUMENT); if (!form->w || !form->current) RETURN(E_SYSTEM_ERROR); field = form->current; formwin = Get_Form_Window(form); if (Field_Has_Option(field, O_PUBLIC)) { if (Is_Scroll_Field(field)) { /* Again, in this case the fieldwin isn't derived from formwin, so we have to perform a copy operation. */ if (Single_Line_Field(field)) { /* horizontal scrolling */ if (form->curcol < form->begincol) form->begincol = form->curcol; else { if (form->curcol >= (form->begincol + field->cols)) form->begincol = form->curcol - field->cols + 1; } copywin(form->w, formwin, 0, form->begincol, field->frow, field->fcol, field->frow, field->cols + field->fcol - 1, 0); } else { /* A multi-line, i.e. vertical scrolling field */ int row_after_bottom, first_modified_row, first_unmodified_row; if (field->drows > field->rows) { row_after_bottom = form->toprow + field->rows; if (form->currow < form->toprow) { form->toprow = form->currow; SetStatus(field, _NEWTOP); } if (form->currow >= row_after_bottom) { form->toprow = form->currow - field->rows + 1; SetStatus(field, _NEWTOP); } if (field->status & _NEWTOP) { /* means we have to copy whole range */ first_modified_row = form->toprow; first_unmodified_row = first_modified_row + field->rows; ClrStatus(field, _NEWTOP); } else { /* we try to optimize : finding the range of touched lines */ first_modified_row = form->toprow; while (first_modified_row < row_after_bottom) { if (is_linetouched(form->w, first_modified_row)) break; first_modified_row++; } first_unmodified_row = first_modified_row; while (first_unmodified_row < row_after_bottom) { if (!is_linetouched(form->w, first_unmodified_row)) break; first_unmodified_row++; } } } else { first_modified_row = form->toprow; first_unmodified_row = first_modified_row + field->rows; } if (first_unmodified_row != first_modified_row) copywin(form->w, formwin, first_modified_row, 0, field->frow + first_modified_row - form->toprow, field->fcol, field->frow + first_unmodified_row - form->toprow - 1, field->cols + field->fcol - 1, 0); } wsyncup(formwin); } else { /* if the field-window is simply a derived window, i.e. contains no * invisible parts, the whole thing is trivial */ wsyncup(form->w); } } untouchwin(form->w); returnCode(_nc_Position_Form_Cursor(form)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Perform_Justification( | FIELD * field, | WINDOW * win) | | Description : Output field with requested justification | | Return Values : - +--------------------------------------------------------------------------*/ static void Perform_Justification(FIELD *field, WINDOW *win) { FIELD_CELL *bp; int len; int col = 0; bp = (Field_Has_Option(field, O_NO_LEFT_STRIP) ? field->buf : Get_Start_Of_Data(field->buf, Buffer_Length(field))); len = (int)(After_End_Of_Data(field->buf, Buffer_Length(field)) - bp); if (len > 0) { assert(win && (field->drows == 1)); if (field->cols - len >= 0) switch (field->just) { case JUSTIFY_LEFT: break; case JUSTIFY_CENTER: col = (field->cols - len) / 2; break; case JUSTIFY_RIGHT: col = field->cols - len; break; default: break; } wmove(win, 0, col); myADDNSTR(win, bp, len); } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Undo_Justification( | FIELD * field, | WINDOW * win) | | Description : Display field without any justification, i.e. | left justified | | Return Values : - +--------------------------------------------------------------------------*/ static void Undo_Justification(FIELD *field, WINDOW *win) { FIELD_CELL *bp; int len; bp = (Field_Has_Option(field, O_NO_LEFT_STRIP) ? field->buf : Get_Start_Of_Data(field->buf, Buffer_Length(field))); len = (int)(After_End_Of_Data(field->buf, Buffer_Length(field)) - bp); if (len > 0) { assert(win); wmove(win, 0, 0); myADDNSTR(win, bp, len); } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_Char(FORM *form, | FIELD *field, | FIELDTYPE * typ, | int ch, | TypeArgument *argp) | | Description : Perform a single character check for character ch | according to the fieldtype instance. | | Return Values : TRUE - Character is valid | FALSE - Character is invalid +--------------------------------------------------------------------------*/ static bool Check_Char(FORM *form, FIELD *field, FIELDTYPE *typ, int ch, TypeArgument *argp) { if (typ) { if (typ->status & _LINKED_TYPE) { assert(argp); return ( Check_Char(form, field, typ->left, ch, argp->left) || Check_Char(form, field, typ->right, ch, argp->right)); } else { #if NCURSES_INTEROP_FUNCS if (typ->charcheck.occheck) { if (typ->status & _GENERIC) return typ->charcheck.gccheck(ch, form, field, (void *)argp); else return typ->charcheck.occheck(ch, (void *)argp); } #else if (typ->ccheck) return typ->ccheck(ch, (void *)argp); #endif } } return (!iscntrl(UChar(ch)) ? TRUE : FALSE); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Display_Or_Erase_Field( | FIELD * field, | bool bEraseFlag) | | Description : Create a subwindow for the field and display the | buffer contents (apply justification if required) | or simply erase the field. | | Return Values : E_OK - on success | E_SYSTEM_ERROR - some error (typical no memory) +--------------------------------------------------------------------------*/ static int Display_Or_Erase_Field(FIELD *field, bool bEraseFlag) { WINDOW *win; WINDOW *fwin; if (!field) return E_SYSTEM_ERROR; fwin = Get_Form_Window(field->form); win = derwin(fwin, field->rows, field->cols, field->frow, field->fcol); if (!win) return E_SYSTEM_ERROR; else { if (Field_Has_Option(field, O_VISIBLE)) { Set_Field_Window_Attributes(field, win); } else { (void)wattrset(win, (int)WINDOW_ATTRS(fwin)); } werase(win); } if (!bEraseFlag) { if (Field_Has_Option(field, O_PUBLIC)) { if (Justification_Allowed(field)) Perform_Justification(field, win); else Buffer_To_Window(field, win); } ClrStatus(field, _NEWTOP); } wsyncup(win); delwin(win); return E_OK; } /* Macros to preset the bEraseFlag */ #define Display_Field(field) Display_Or_Erase_Field(field,FALSE) #define Erase_Field(field) Display_Or_Erase_Field(field,TRUE) /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Synchronize_Field(FIELD * field) | | Description : Synchronize the windows content with the value in | the buffer. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid field pointer | E_SYSTEM_ERROR - some severe basic error +--------------------------------------------------------------------------*/ static int Synchronize_Field(FIELD *field) { FORM *form; int res = E_OK; if (!field) return (E_BAD_ARGUMENT); if (((form = field->form) != (FORM *)0) && Field_Really_Appears(field)) { if (field == form->current) { form->currow = form->curcol = form->toprow = form->begincol = 0; werase(form->w); if ((Field_Has_Option(field, O_PUBLIC)) && Justification_Allowed(field)) Undo_Justification(field, form->w); else Buffer_To_Window(field, form->w); SetStatus(field, _NEWTOP); res = _nc_Refresh_Current_Field(form); } else res = Display_Field(field); } SetStatus(field, _CHANGED); return (res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Synchronize_Linked_Fields(FIELD * field) | | Description : Propagate the Synchronize_Field function to all linked | fields. The first error that occurs in the sequence | of updates is the return value. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid field pointer | E_SYSTEM_ERROR - some severe basic error +--------------------------------------------------------------------------*/ static int Synchronize_Linked_Fields(FIELD *field) { FIELD *linked_field; int res = E_OK; int syncres; if (!field) return (E_BAD_ARGUMENT); if (!field->link) return (E_SYSTEM_ERROR); for (linked_field = field->link; (linked_field != field) && (linked_field != 0); linked_field = linked_field->link) { if (((syncres = Synchronize_Field(linked_field)) != E_OK) && (res == E_OK)) res = syncres; } return (res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int _nc_Synchronize_Attributes(FIELD * field) | | Description : If a fields visual attributes have changed, this | routine is called to propagate those changes to the | screen. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid field pointer | E_SYSTEM_ERROR - some severe basic error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) _nc_Synchronize_Attributes(FIELD *field) { FORM *form; int res = E_OK; WINDOW *formwin; T((T_CALLED("_nc_Synchronize_Attributes(%p)"), (void *)field)); if (!field) returnCode(E_BAD_ARGUMENT); CHECKPOS(field->form); if (((form = field->form) != (FORM *)0) && Field_Really_Appears(field)) { if (form->current == field) { Synchronize_Buffer(form); Set_Field_Window_Attributes(field, form->w); werase(form->w); wmove(form->w, form->currow, form->curcol); if (Field_Has_Option(field, O_PUBLIC)) { if (Justification_Allowed(field)) Undo_Justification(field, form->w); else Buffer_To_Window(field, form->w); } else { formwin = Get_Form_Window(form); copywin(form->w, formwin, 0, 0, field->frow, field->fcol, field->rows - 1, field->cols - 1, 0); wsyncup(formwin); Buffer_To_Window(field, form->w); SetStatus(field, _NEWTOP); /* fake refresh to paint all */ _nc_Refresh_Current_Field(form); } } else { res = Display_Field(field); } } CHECKPOS(form); returnCode(res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int _nc_Synchronize_Options(FIELD * field, | Field_Options newopts) | | Description : If a fields options have changed, this routine is | called to propagate these changes to the screen and | to really change the behavior of the field. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid field pointer | E_CURRENT - field is the current one | E_SYSTEM_ERROR - some severe basic error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) _nc_Synchronize_Options(FIELD *field, Field_Options newopts) { Field_Options oldopts; Field_Options changed_opts; FORM *form; int res = E_OK; T((T_CALLED("_nc_Synchronize_Options(%p,%#x)"), (void *)field, newopts)); if (!field) returnCode(E_BAD_ARGUMENT); oldopts = field->opts; changed_opts = oldopts ^ newopts; field->opts = newopts; form = field->form; if (form) { if (form->status & _POSTED) { if (form->current == field) { field->opts = oldopts; returnCode(E_CURRENT); } if (form->curpage == field->page) { if ((unsigned)changed_opts & O_VISIBLE) { if ((unsigned)newopts & O_VISIBLE) res = Display_Field(field); else res = Erase_Field(field); } else { if (((unsigned)changed_opts & O_PUBLIC) && ((unsigned)newopts & O_VISIBLE)) res = Display_Field(field); } } } } if ((unsigned)changed_opts & O_STATIC) { bool single_line_field = Single_Line_Field(field); int res2 = E_OK; if ((unsigned)newopts & O_STATIC) { /* the field becomes now static */ ClrStatus(field, _MAY_GROW); /* if actually we have no hidden columns, justification may occur again */ if (single_line_field && (field->cols == field->dcols) && (field->just != NO_JUSTIFICATION) && Field_Really_Appears(field)) { res2 = Display_Field(field); } } else { /* field is no longer static */ if ((field->maxgrow == 0) || (single_line_field && (field->dcols < field->maxgrow)) || (!single_line_field && (field->drows < field->maxgrow))) { SetStatus(field, _MAY_GROW); /* a field with justification now changes its behavior, so we must redisplay it */ if (single_line_field && (field->just != NO_JUSTIFICATION) && Field_Really_Appears(field)) { res2 = Display_Field(field); } } } if (res2 != E_OK) res = res2; } returnCode(res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : int _nc_Set_Current_Field(FORM * form, | FIELD * newfield) | | Description : Make the newfield the new current field. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid form or field pointer | E_SYSTEM_ERROR - some severe basic error | E_NOT_CONNECTED - no fields are connected to the form +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) _nc_Set_Current_Field(FORM *form, FIELD *newfield) { FIELD *field; WINDOW *new_window; T((T_CALLED("_nc_Set_Current_Field(%p,%p)"), (void *)form, (void *)newfield)); if (!form || !newfield || !form->current || (newfield->form != form)) returnCode(E_BAD_ARGUMENT); if ((form->status & _IN_DRIVER)) returnCode(E_BAD_STATE); if (!(form->field)) returnCode(E_NOT_CONNECTED); field = form->current; if ((field != newfield) || !(form->status & _POSTED)) { if ((form->w) && (Field_Has_Option(field, O_VISIBLE)) && (field->form->curpage == field->page)) { _nc_Refresh_Current_Field(form); if (Field_Has_Option(field, O_PUBLIC)) { if (field->drows > field->rows) { if (form->toprow == 0) ClrStatus(field, _NEWTOP); else SetStatus(field, _NEWTOP); } else { if (Justification_Allowed(field)) { Window_To_Buffer(form, field); werase(form->w); Perform_Justification(field, form->w); if (Field_Has_Option(field, O_DYNAMIC_JUSTIFY) && (form->w->_parent == 0)) { copywin(form->w, Get_Form_Window(form), 0, 0, field->frow, field->fcol, field->frow, field->cols + field->fcol - 1, 0); wsyncup(Get_Form_Window(form)); } else { wsyncup(form->w); } } } } delwin(form->w); form->w = (WINDOW *)0; } field = newfield; if (Has_Invisible_Parts(field)) new_window = newpad(field->drows, field->dcols); else new_window = derwin(Get_Form_Window(form), field->rows, field->cols, field->frow, field->fcol); if (!new_window) returnCode(E_SYSTEM_ERROR); form->current = field; if (form->w) delwin(form->w); form->w = new_window; ClrStatus(form, _WINDOW_MODIFIED); Set_Field_Window_Attributes(field, form->w); if (Has_Invisible_Parts(field)) { werase(form->w); Buffer_To_Window(field, form->w); } else { if (Justification_Allowed(field)) { werase(form->w); Undo_Justification(field, form->w); wsyncup(form->w); } } untouchwin(form->w); } form->currow = form->curcol = form->toprow = form->begincol = 0; returnCode(E_OK); } /*---------------------------------------------------------------------------- Intra-Field Navigation routines --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Next_Character(FORM * form) | | Description : Move to the next character in the field. In a multi-line | field this wraps at the end of the line. | | Return Values : E_OK - success | E_REQUEST_DENIED - at the rightmost position +--------------------------------------------------------------------------*/ static int IFN_Next_Character(FORM *form) { FIELD *field = form->current; int step = myWCWIDTH(form->w, form->currow, form->curcol); T((T_CALLED("IFN_Next_Character(%p)"), (void *)form)); if ((form->curcol += step) == field->dcols) { if ((++(form->currow)) == field->drows) { #if GROW_IF_NAVIGATE if (!Single_Line_Field(field) && Field_Grown(field, 1)) { form->curcol = 0; returnCode(E_OK); } #endif form->currow--; #if GROW_IF_NAVIGATE if (Single_Line_Field(field) && Field_Grown(field, 1)) returnCode(E_OK); #endif form->curcol -= step; returnCode(E_REQUEST_DENIED); } form->curcol = 0; } returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Previous_Character(FORM * form) | | Description : Move to the previous character in the field. In a | multi-line field this wraps and the beginning of the | line. | | Return Values : E_OK - success | E_REQUEST_DENIED - at the leftmost position +--------------------------------------------------------------------------*/ static int IFN_Previous_Character(FORM *form) { int amount = myWCWIDTH(form->w, form->currow, form->curcol - 1); int oldcol = form->curcol; T((T_CALLED("IFN_Previous_Character(%p)"), (void *)form)); if ((form->curcol -= amount) < 0) { if ((--(form->currow)) < 0) { form->currow++; form->curcol = oldcol; returnCode(E_REQUEST_DENIED); } form->curcol = form->current->dcols - 1; } returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Next_Line(FORM * form) | | Description : Move to the beginning of the next line in the field | | Return Values : E_OK - success | E_REQUEST_DENIED - at the last line +--------------------------------------------------------------------------*/ static int IFN_Next_Line(FORM *form) { FIELD *field = form->current; T((T_CALLED("IFN_Next_Line(%p)"), (void *)form)); if ((++(form->currow)) == field->drows) { #if GROW_IF_NAVIGATE if (!Single_Line_Field(field) && Field_Grown(field, 1)) returnCode(E_OK); #endif form->currow--; returnCode(E_REQUEST_DENIED); } form->curcol = 0; returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Previous_Line(FORM * form) | | Description : Move to the beginning of the previous line in the field | | Return Values : E_OK - success | E_REQUEST_DENIED - at the first line +--------------------------------------------------------------------------*/ static int IFN_Previous_Line(FORM *form) { T((T_CALLED("IFN_Previous_Line(%p)"), (void *)form)); if ((--(form->currow)) < 0) { form->currow++; returnCode(E_REQUEST_DENIED); } form->curcol = 0; returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Next_Word(FORM * form) | | Description : Move to the beginning of the next word in the field. | | Return Values : E_OK - success | E_REQUEST_DENIED - there is no next word +--------------------------------------------------------------------------*/ static int IFN_Next_Word(FORM *form) { FIELD *field = form->current; FIELD_CELL *bp = Address_Of_Current_Position_In_Buffer(form); FIELD_CELL *s; FIELD_CELL *t; T((T_CALLED("IFN_Next_Word(%p)"), (void *)form)); /* We really need access to the data, so we have to synchronize */ Synchronize_Buffer(form); /* Go to the first whitespace after the current position (including current position). This is then the starting point to look for the next non-blank data */ s = Get_First_Whitespace_Character(bp, Buffer_Length(field) - (int)(bp - field->buf)); /* Find the start of the next word */ t = Get_Start_Of_Data(s, Buffer_Length(field) - (int)(s - field->buf)); #if !FRIENDLY_PREV_NEXT_WORD if (s == t) returnCode(E_REQUEST_DENIED); else #endif { Adjust_Cursor_Position(form, t); returnCode(E_OK); } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Previous_Word(FORM * form) | | Description : Move to the beginning of the previous word in the field. | | Return Values : E_OK - success | E_REQUEST_DENIED - there is no previous word +--------------------------------------------------------------------------*/ static int IFN_Previous_Word(FORM *form) { FIELD *field = form->current; FIELD_CELL *bp = Address_Of_Current_Position_In_Buffer(form); FIELD_CELL *s; FIELD_CELL *t; bool again = FALSE; T((T_CALLED("IFN_Previous_Word(%p)"), (void *)form)); /* We really need access to the data, so we have to synchronize */ Synchronize_Buffer(form); s = After_End_Of_Data(field->buf, (int)(bp - field->buf)); /* s points now right after the last non-blank in the buffer before bp. If bp was in a word, s equals bp. In this case we must find the last whitespace in the buffer before bp and repeat the game to really find the previous word! */ if (s == bp) again = TRUE; /* And next call now goes backward to look for the last whitespace before that, pointing right after this, so it points to the begin of the previous word. */ t = After_Last_Whitespace_Character(field->buf, (int)(s - field->buf)); #if !FRIENDLY_PREV_NEXT_WORD if (s == t) returnCode(E_REQUEST_DENIED); #endif if (again) { /* and do it again, replacing bp by t */ s = After_End_Of_Data(field->buf, (int)(t - field->buf)); t = After_Last_Whitespace_Character(field->buf, (int)(s - field->buf)); #if !FRIENDLY_PREV_NEXT_WORD if (s == t) returnCode(E_REQUEST_DENIED); #endif } Adjust_Cursor_Position(form, t); returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Beginning_Of_Field(FORM * form) | | Description : Place the cursor at the first non-pad character in | the field. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int IFN_Beginning_Of_Field(FORM *form) { FIELD *field = form->current; T((T_CALLED("IFN_Beginning_Of_Field(%p)"), (void *)form)); Synchronize_Buffer(form); Adjust_Cursor_Position(form, Get_Start_Of_Data(field->buf, Buffer_Length(field))); returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_End_Of_Field(FORM * form) | | Description : Place the cursor after the last non-pad character in | the field. If the field occupies the last position in | the buffer, the cursor is positioned on the last | character. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int IFN_End_Of_Field(FORM *form) { FIELD *field = form->current; FIELD_CELL *pos; T((T_CALLED("IFN_End_Of_Field(%p)"), (void *)form)); Synchronize_Buffer(form); pos = After_End_Of_Data(field->buf, Buffer_Length(field)); if (pos == (field->buf + Buffer_Length(field))) pos--; Adjust_Cursor_Position(form, pos); returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Beginning_Of_Line(FORM * form) | | Description : Place the cursor on the first non-pad character in | the current line of the field. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int IFN_Beginning_Of_Line(FORM *form) { FIELD *field = form->current; T((T_CALLED("IFN_Beginning_Of_Line(%p)"), (void *)form)); Synchronize_Buffer(form); Adjust_Cursor_Position(form, Get_Start_Of_Data(Address_Of_Current_Row_In_Buffer(form), field->dcols)); returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_End_Of_Line(FORM * form) | | Description : Place the cursor after the last non-pad character in the | current line of the field. If the field occupies the | last column in the line, the cursor is positioned on the | last character of the line. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int IFN_End_Of_Line(FORM *form) { FIELD *field = form->current; FIELD_CELL *pos; FIELD_CELL *bp; T((T_CALLED("IFN_End_Of_Line(%p)"), (void *)form)); Synchronize_Buffer(form); bp = Address_Of_Current_Row_In_Buffer(form); pos = After_End_Of_Data(bp, field->dcols); if (pos == (bp + field->dcols)) pos--; Adjust_Cursor_Position(form, pos); returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Left_Character(FORM * form) | | Description : Move one character to the left in the current line. | This doesn't cycle. | | Return Values : E_OK - success | E_REQUEST_DENIED - already in first column +--------------------------------------------------------------------------*/ static int IFN_Left_Character(FORM *form) { int amount = myWCWIDTH(form->w, form->currow, form->curcol - 1); int oldcol = form->curcol; T((T_CALLED("IFN_Left_Character(%p)"), (void *)form)); if ((form->curcol -= amount) < 0) { form->curcol = oldcol; returnCode(E_REQUEST_DENIED); } returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Right_Character(FORM * form) | | Description : Move one character to the right in the current line. | This doesn't cycle. | | Return Values : E_OK - success | E_REQUEST_DENIED - already in last column +--------------------------------------------------------------------------*/ static int IFN_Right_Character(FORM *form) { int amount = myWCWIDTH(form->w, form->currow, form->curcol); int oldcol = form->curcol; T((T_CALLED("IFN_Right_Character(%p)"), (void *)form)); if ((form->curcol += amount) >= form->current->dcols) { #if GROW_IF_NAVIGATE FIELD *field = form->current; if (Single_Line_Field(field) && Field_Grown(field, 1)) returnCode(E_OK); #endif form->curcol = oldcol; returnCode(E_REQUEST_DENIED); } returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Up_Character(FORM * form) | | Description : Move one line up. This doesn't cycle through the lines | of the field. | | Return Values : E_OK - success | E_REQUEST_DENIED - already in last column +--------------------------------------------------------------------------*/ static int IFN_Up_Character(FORM *form) { T((T_CALLED("IFN_Up_Character(%p)"), (void *)form)); if ((--(form->currow)) < 0) { form->currow++; returnCode(E_REQUEST_DENIED); } returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int IFN_Down_Character(FORM * form) | | Description : Move one line down. This doesn't cycle through the | lines of the field. | | Return Values : E_OK - success | E_REQUEST_DENIED - already in last column +--------------------------------------------------------------------------*/ static int IFN_Down_Character(FORM *form) { FIELD *field = form->current; T((T_CALLED("IFN_Down_Character(%p)"), (void *)form)); if ((++(form->currow)) == field->drows) { #if GROW_IF_NAVIGATE if (!Single_Line_Field(field) && Field_Grown(field, 1)) returnCode(E_OK); #endif --(form->currow); returnCode(E_REQUEST_DENIED); } returnCode(E_OK); } /*---------------------------------------------------------------------------- END of Intra-Field Navigation routines --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Vertical scrolling helper routines --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int VSC_Generic(FORM *form, int nlines) | | Description : Scroll multi-line field forward (nlines>0) or | backward (nlines<0) this many lines. | | Return Values : E_OK - success | E_REQUEST_DENIED - can't scroll +--------------------------------------------------------------------------*/ static int VSC_Generic(FORM *form, int nlines) { FIELD *field = form->current; int res = E_REQUEST_DENIED; int rows_to_go = (nlines > 0 ? nlines : -nlines); if (nlines > 0) { if ((rows_to_go + form->toprow) > (field->drows - field->rows)) rows_to_go = (field->drows - field->rows - form->toprow); if (rows_to_go > 0) { form->currow += rows_to_go; form->toprow += rows_to_go; res = E_OK; } } else { if (rows_to_go > form->toprow) rows_to_go = form->toprow; if (rows_to_go > 0) { form->currow -= rows_to_go; form->toprow -= rows_to_go; res = E_OK; } } return (res); } /*---------------------------------------------------------------------------- End of Vertical scrolling helper routines --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Vertical scrolling routines --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Vertical_Scrolling( | int (* const fct) (FORM *), | FORM * form) | | Description : Performs the generic vertical scrolling routines. | This has to check for a multi-line field and to set | the _NEWTOP flag if scrolling really occurred. | | Return Values : Propagated error code from low-level driver calls +--------------------------------------------------------------------------*/ static int Vertical_Scrolling(int (*const fct) (FORM *), FORM *form) { int res = E_REQUEST_DENIED; if (!Single_Line_Field(form->current)) { res = fct(form); if (res == E_OK) SetStatus(form->current, _NEWTOP); } return (res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int VSC_Scroll_Line_Forward(FORM * form) | | Description : Scroll multi-line field forward a line | | Return Values : E_OK - success | E_REQUEST_DENIED - no data ahead +--------------------------------------------------------------------------*/ static int VSC_Scroll_Line_Forward(FORM *form) { T((T_CALLED("VSC_Scroll_Line_Forward(%p)"), (void *)form)); returnCode(VSC_Generic(form, 1)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int VSC_Scroll_Line_Backward(FORM * form) | | Description : Scroll multi-line field backward a line | | Return Values : E_OK - success | E_REQUEST_DENIED - no data behind +--------------------------------------------------------------------------*/ static int VSC_Scroll_Line_Backward(FORM *form) { T((T_CALLED("VSC_Scroll_Line_Backward(%p)"), (void *)form)); returnCode(VSC_Generic(form, -1)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int VSC_Scroll_Page_Forward(FORM * form) | | Description : Scroll a multi-line field forward a page | | Return Values : E_OK - success | E_REQUEST_DENIED - no data ahead +--------------------------------------------------------------------------*/ static int VSC_Scroll_Page_Forward(FORM *form) { T((T_CALLED("VSC_Scroll_Page_Forward(%p)"), (void *)form)); returnCode(VSC_Generic(form, form->current->rows)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int VSC_Scroll_Half_Page_Forward(FORM * form) | | Description : Scroll a multi-line field forward half a page | | Return Values : E_OK - success | E_REQUEST_DENIED - no data ahead +--------------------------------------------------------------------------*/ static int VSC_Scroll_Half_Page_Forward(FORM *form) { T((T_CALLED("VSC_Scroll_Half_Page_Forward(%p)"), (void *)form)); returnCode(VSC_Generic(form, (form->current->rows + 1) / 2)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int VSC_Scroll_Page_Backward(FORM * form) | | Description : Scroll a multi-line field backward a page | | Return Values : E_OK - success | E_REQUEST_DENIED - no data behind +--------------------------------------------------------------------------*/ static int VSC_Scroll_Page_Backward(FORM *form) { T((T_CALLED("VSC_Scroll_Page_Backward(%p)"), (void *)form)); returnCode(VSC_Generic(form, -(form->current->rows))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int VSC_Scroll_Half_Page_Backward(FORM * form) | | Description : Scroll a multi-line field backward half a page | | Return Values : E_OK - success | E_REQUEST_DENIED - no data behind +--------------------------------------------------------------------------*/ static int VSC_Scroll_Half_Page_Backward(FORM *form) { T((T_CALLED("VSC_Scroll_Half_Page_Backward(%p)"), (void *)form)); returnCode(VSC_Generic(form, -((form->current->rows + 1) / 2))); } /*---------------------------------------------------------------------------- End of Vertical scrolling routines --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Horizontal scrolling helper routines --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int HSC_Generic(FORM *form, int ncolumns) | | Description : Scroll single-line field forward (ncolumns>0) or | backward (ncolumns<0) this many columns. | | Return Values : E_OK - success | E_REQUEST_DENIED - can't scroll +--------------------------------------------------------------------------*/ static int HSC_Generic(FORM *form, int ncolumns) { FIELD *field = form->current; int res = E_REQUEST_DENIED; int cols_to_go = (ncolumns > 0 ? ncolumns : -ncolumns); if (ncolumns > 0) { if ((cols_to_go + form->begincol) > (field->dcols - field->cols)) cols_to_go = field->dcols - field->cols - form->begincol; if (cols_to_go > 0) { form->curcol += cols_to_go; form->begincol += cols_to_go; res = E_OK; } } else { if (cols_to_go > form->begincol) cols_to_go = form->begincol; if (cols_to_go > 0) { form->curcol -= cols_to_go; form->begincol -= cols_to_go; res = E_OK; } } return (res); } /*---------------------------------------------------------------------------- End of Horizontal scrolling helper routines --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Horizontal scrolling routines --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Horizontal_Scrolling( | int (* const fct) (FORM *), | FORM * form) | | Description : Performs the generic horizontal scrolling routines. | This has to check for a single-line field. | | Return Values : Propagated error code from low-level driver calls +--------------------------------------------------------------------------*/ static int Horizontal_Scrolling(int (*const fct) (FORM *), FORM *form) { if (Single_Line_Field(form->current)) return fct(form); else return (E_REQUEST_DENIED); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int HSC_Scroll_Char_Forward(FORM * form) | | Description : Scroll single-line field forward a character | | Return Values : E_OK - success | E_REQUEST_DENIED - no data ahead +--------------------------------------------------------------------------*/ static int HSC_Scroll_Char_Forward(FORM *form) { T((T_CALLED("HSC_Scroll_Char_Forward(%p)"), (void *)form)); returnCode(HSC_Generic(form, 1)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int HSC_Scroll_Char_Backward(FORM * form) | | Description : Scroll single-line field backward a character | | Return Values : E_OK - success | E_REQUEST_DENIED - no data behind +--------------------------------------------------------------------------*/ static int HSC_Scroll_Char_Backward(FORM *form) { T((T_CALLED("HSC_Scroll_Char_Backward(%p)"), (void *)form)); returnCode(HSC_Generic(form, -1)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int HSC_Horizontal_Line_Forward(FORM* form) | | Description : Scroll single-line field forward a line | | Return Values : E_OK - success | E_REQUEST_DENIED - no data ahead +--------------------------------------------------------------------------*/ static int HSC_Horizontal_Line_Forward(FORM *form) { T((T_CALLED("HSC_Horizontal_Line_Forward(%p)"), (void *)form)); returnCode(HSC_Generic(form, form->current->cols)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int HSC_Horizontal_Half_Line_Forward(FORM* form) | | Description : Scroll single-line field forward half a line | | Return Values : E_OK - success | E_REQUEST_DENIED - no data ahead +--------------------------------------------------------------------------*/ static int HSC_Horizontal_Half_Line_Forward(FORM *form) { T((T_CALLED("HSC_Horizontal_Half_Line_Forward(%p)"), (void *)form)); returnCode(HSC_Generic(form, (form->current->cols + 1) / 2)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int HSC_Horizontal_Line_Backward(FORM* form) | | Description : Scroll single-line field backward a line | | Return Values : E_OK - success | E_REQUEST_DENIED - no data behind +--------------------------------------------------------------------------*/ static int HSC_Horizontal_Line_Backward(FORM *form) { T((T_CALLED("HSC_Horizontal_Line_Backward(%p)"), (void *)form)); returnCode(HSC_Generic(form, -(form->current->cols))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int HSC_Horizontal_Half_Line_Backward(FORM* form) | | Description : Scroll single-line field backward half a line | | Return Values : E_OK - success | E_REQUEST_DENIED - no data behind +--------------------------------------------------------------------------*/ static int HSC_Horizontal_Half_Line_Backward(FORM *form) { T((T_CALLED("HSC_Horizontal_Half_Line_Backward(%p)"), (void *)form)); returnCode(HSC_Generic(form, -((form->current->cols + 1) / 2))); } /*---------------------------------------------------------------------------- End of Horizontal scrolling routines --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Helper routines for Field Editing --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Is_There_Room_For_A_Line(FORM * form) | | Description : Check whether or not there is enough room in the | buffer to enter a whole line. | | Return Values : TRUE - there is enough space | FALSE - there is not enough space +--------------------------------------------------------------------------*/ NCURSES_INLINE static bool Is_There_Room_For_A_Line(FORM *form) { FIELD *field = form->current; FIELD_CELL *begin_of_last_line, *s; Synchronize_Buffer(form); begin_of_last_line = Address_Of_Row_In_Buffer(field, (field->drows - 1)); s = After_End_Of_Data(begin_of_last_line, field->dcols); return ((s == begin_of_last_line) ? TRUE : FALSE); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Is_There_Room_For_A_Char_In_Line(FORM * form) | | Description : Checks whether or not there is room for a new character | in the current line. | | Return Values : TRUE - there is room | FALSE - there is not enough room (line full) +--------------------------------------------------------------------------*/ NCURSES_INLINE static bool Is_There_Room_For_A_Char_In_Line(FORM *form) { int last_char_in_line; wmove(form->w, form->currow, form->current->dcols - 1); last_char_in_line = (int)(winch(form->w) & A_CHARTEXT); wmove(form->w, form->currow, form->curcol); return (((last_char_in_line == form->current->pad) || is_blank(last_char_in_line)) ? TRUE : FALSE); } #define There_Is_No_Room_For_A_Char_In_Line(f) \ !Is_There_Room_For_A_Char_In_Line(f) /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Insert_String( | FORM * form, | int row, | char *txt, | int len ) | | Description : Insert the 'len' characters beginning at pointer 'txt' | into the 'row' of the 'form'. The insertion occurs | on the beginning of the row, all other characters are | moved to the right. After the text a pad character will | be inserted to separate the text from the rest. If | necessary the insertion moves characters on the next | line to make place for the requested insertion string. | | Return Values : E_OK - success | E_REQUEST_DENIED - | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ static int Insert_String(FORM *form, int row, FIELD_CELL *txt, int len) { FIELD *field = form->current; FIELD_CELL *bp = Address_Of_Row_In_Buffer(field, row); int datalen = (int)(After_End_Of_Data(bp, field->dcols) - bp); int freelen = field->dcols - datalen; int requiredlen = len + 1; FIELD_CELL *split; int result = E_REQUEST_DENIED; if (freelen >= requiredlen) { wmove(form->w, row, 0); myINSNSTR(form->w, txt, len); wmove(form->w, row, len); myINSNSTR(form->w, &myBLANK, 1); return E_OK; } else { /* we have to move characters on the next line. If we are on the last line this may work, if the field is growable */ if ((row == (field->drows - 1)) && Growable(field)) { if (!Field_Grown(field, 1)) return (E_SYSTEM_ERROR); /* !!!Side-Effect : might be changed due to growth!!! */ bp = Address_Of_Row_In_Buffer(field, row); } if (row < (field->drows - 1)) { split = After_Last_Whitespace_Character(bp, (int)(Get_Start_Of_Data(bp + field->dcols - requiredlen, requiredlen) - bp)); /* split points now to the first character of the portion of the line that must be moved to the next line */ datalen = (int)(split - bp); /* + freelen has to stay on this line */ freelen = field->dcols - (datalen + freelen); /* for the next line */ if ((result = Insert_String(form, row + 1, split, freelen)) == E_OK) { wmove(form->w, row, datalen); wclrtoeol(form->w); wmove(form->w, row, 0); myINSNSTR(form->w, txt, len); wmove(form->w, row, len); myINSNSTR(form->w, &myBLANK, 1); return E_OK; } } return (result); } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Wrapping_Not_Necessary_Or_Wrapping_Ok( | FORM * form) | | Description : If a character has been entered into a field, it may | be that wrapping has to occur. This routine checks | whether or not wrapping is required and if so, performs | the wrapping. | | Return Values : E_OK - no wrapping required or wrapping | was successful | E_REQUEST_DENIED - | E_SYSTEM_ERROR - some system error +--------------------------------------------------------------------------*/ static int Wrapping_Not_Necessary_Or_Wrapping_Ok(FORM *form) { FIELD *field = form->current; int result = E_REQUEST_DENIED; bool Last_Row = ((field->drows - 1) == form->currow); if ((Field_Has_Option(field, O_WRAP)) && /* wrapping wanted */ (!Single_Line_Field(field)) && /* must be multi-line */ (There_Is_No_Room_For_A_Char_In_Line(form)) && /* line is full */ (!Last_Row || Growable(field))) /* there are more lines */ { FIELD_CELL *bp; FIELD_CELL *split; int chars_to_be_wrapped; int chars_to_remain_on_line; if (Last_Row) { /* the above logic already ensures, that in this case the field is growable */ if (!Field_Grown(field, 1)) return E_SYSTEM_ERROR; } bp = Address_Of_Current_Row_In_Buffer(form); Window_To_Buffer(form, field); split = After_Last_Whitespace_Character(bp, field->dcols); /* split points to the first character of the sequence to be brought on the next line */ chars_to_remain_on_line = (int)(split - bp); chars_to_be_wrapped = field->dcols - chars_to_remain_on_line; if (chars_to_remain_on_line > 0) { if ((result = Insert_String(form, form->currow + 1, split, chars_to_be_wrapped)) == E_OK) { wmove(form->w, form->currow, chars_to_remain_on_line); wclrtoeol(form->w); if (form->curcol >= chars_to_remain_on_line) { form->currow++; form->curcol -= chars_to_remain_on_line; } return E_OK; } } else return E_OK; if (result != E_OK) { DeleteChar(form); Window_To_Buffer(form, field); result = E_REQUEST_DENIED; } } else result = E_OK; /* wrapping was not necessary */ return (result); } /*---------------------------------------------------------------------------- Field Editing routines --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Field_Editing( | int (* const fct) (FORM *), | FORM * form) | | Description : Generic routine for field editing requests. The driver | routines are only called for editable fields, the | _WINDOW_MODIFIED flag is set if editing occurred. | This is somewhat special due to the overload semantics | of the NEW_LINE and DEL_PREV requests. | | Return Values : Error code from low level drivers. +--------------------------------------------------------------------------*/ static int Field_Editing(int (*const fct) (FORM *), FORM *form) { int res = E_REQUEST_DENIED; /* We have to deal here with the specific case of the overloaded behavior of New_Line and Delete_Previous requests. They may end up in navigational requests if we are on the first character in a field. But navigation is also allowed on non- editable fields. */ if ((fct == FE_Delete_Previous) && ((unsigned)form->opts & O_BS_OVERLOAD) && First_Position_In_Current_Field(form)) { res = Inter_Field_Navigation(FN_Previous_Field, form); } else { if (fct == FE_New_Line) { if (((unsigned)form->opts & O_NL_OVERLOAD) && First_Position_In_Current_Field(form)) { res = Inter_Field_Navigation(FN_Next_Field, form); } else /* FE_New_Line deals itself with the _WINDOW_MODIFIED flag */ res = fct(form); } else { /* From now on, everything must be editable */ if ((unsigned)form->current->opts & O_EDIT) { res = fct(form); if (res == E_OK) SetStatus(form, _WINDOW_MODIFIED); } } } return res; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FE_New_Line(FORM * form) | | Description : Perform a new line request. This is rather complex | compared to other routines in this code due to the | rather difficult to understand description in the | manuals. | | Return Values : E_OK - success | E_REQUEST_DENIED - new line not allowed | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ static int FE_New_Line(FORM *form) { FIELD *field = form->current; FIELD_CELL *bp, *t; bool Last_Row = ((field->drows - 1) == form->currow); T((T_CALLED("FE_New_Line(%p)"), (void *)form)); if (form->status & _OVLMODE) { if (Last_Row && (!(Growable(field) && !Single_Line_Field(field)))) { if (!((unsigned)form->opts & O_NL_OVERLOAD)) returnCode(E_REQUEST_DENIED); wmove(form->w, form->currow, form->curcol); wclrtoeol(form->w); /* we have to set this here, although it is also handled in the generic routine. The reason is, that FN_Next_Field may fail, but the form is definitively changed */ SetStatus(form, _WINDOW_MODIFIED); returnCode(Inter_Field_Navigation(FN_Next_Field, form)); } else { if (Last_Row && !Field_Grown(field, 1)) { /* N.B.: due to the logic in the 'if', LastRow==TRUE means here that the field is growable and not a single-line field */ returnCode(E_SYSTEM_ERROR); } wmove(form->w, form->currow, form->curcol); wclrtoeol(form->w); form->currow++; form->curcol = 0; SetStatus(form, _WINDOW_MODIFIED); returnCode(E_OK); } } else { /* Insert Mode */ if (Last_Row && !(Growable(field) && !Single_Line_Field(field))) { if (!((unsigned)form->opts & O_NL_OVERLOAD)) returnCode(E_REQUEST_DENIED); returnCode(Inter_Field_Navigation(FN_Next_Field, form)); } else { bool May_Do_It = !Last_Row && Is_There_Room_For_A_Line(form); if (!(May_Do_It || Growable(field))) returnCode(E_REQUEST_DENIED); if (!May_Do_It && !Field_Grown(field, 1)) returnCode(E_SYSTEM_ERROR); bp = Address_Of_Current_Position_In_Buffer(form); t = After_End_Of_Data(bp, field->dcols - form->curcol); wmove(form->w, form->currow, form->curcol); wclrtoeol(form->w); form->currow++; form->curcol = 0; wmove(form->w, form->currow, form->curcol); winsertln(form->w); myADDNSTR(form->w, bp, (int)(t - bp)); SetStatus(form, _WINDOW_MODIFIED); returnCode(E_OK); } } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FE_Insert_Character(FORM * form) | | Description : Insert blank character at the cursor position | | Return Values : E_OK | E_REQUEST_DENIED +--------------------------------------------------------------------------*/ static int FE_Insert_Character(FORM *form) { FIELD *field = form->current; int result = E_REQUEST_DENIED; T((T_CALLED("FE_Insert_Character(%p)"), (void *)form)); if (Check_Char(form, field, field->type, (int)C_BLANK, (TypeArgument *)(field->arg))) { bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form); if (There_Is_Room || ((Single_Line_Field(field) && Growable(field)))) { if (!There_Is_Room && !Field_Grown(field, 1)) result = E_SYSTEM_ERROR; else { winsch(form->w, (chtype)C_BLANK); result = Wrapping_Not_Necessary_Or_Wrapping_Ok(form); } } } returnCode(result); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FE_Insert_Line(FORM * form) | | Description : Insert a blank line at the cursor position | | Return Values : E_OK - success | E_REQUEST_DENIED - line can not be inserted +--------------------------------------------------------------------------*/ static int FE_Insert_Line(FORM *form) { FIELD *field = form->current; int result = E_REQUEST_DENIED; T((T_CALLED("FE_Insert_Line(%p)"), (void *)form)); if (Check_Char(form, field, field->type, (int)C_BLANK, (TypeArgument *)(field->arg))) { bool Maybe_Done = (form->currow != (field->drows - 1)) && Is_There_Room_For_A_Line(form); if (!Single_Line_Field(field) && (Maybe_Done || Growable(field))) { if (!Maybe_Done && !Field_Grown(field, 1)) result = E_SYSTEM_ERROR; else { form->curcol = 0; winsertln(form->w); result = E_OK; } } } returnCode(result); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FE_Delete_Character(FORM * form) | | Description : Delete character at the cursor position | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int FE_Delete_Character(FORM *form) { T((T_CALLED("FE_Delete_Character(%p)"), (void *)form)); DeleteChar(form); returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FE_Delete_Previous(FORM * form) | | Description : Delete character before cursor. Again this is a rather | difficult piece compared to others due to the overloading | semantics of backspace. | N.B.: The case of overloaded BS on first field position | is already handled in the generic routine. | | Return Values : E_OK - success | E_REQUEST_DENIED - Character can't be deleted +--------------------------------------------------------------------------*/ static int FE_Delete_Previous(FORM *form) { FIELD *field = form->current; T((T_CALLED("FE_Delete_Previous(%p)"), (void *)form)); if (First_Position_In_Current_Field(form)) returnCode(E_REQUEST_DENIED); if ((--(form->curcol)) < 0) { FIELD_CELL *this_line, *prev_line, *prev_end, *this_end; int this_row = form->currow; form->curcol++; if (form->status & _OVLMODE) returnCode(E_REQUEST_DENIED); prev_line = Address_Of_Row_In_Buffer(field, (form->currow - 1)); this_line = Address_Of_Row_In_Buffer(field, (form->currow)); Synchronize_Buffer(form); prev_end = After_End_Of_Data(prev_line, field->dcols); this_end = After_End_Of_Data(this_line, field->dcols); if ((int)(this_end - this_line) > (field->cols - (int)(prev_end - prev_line))) returnCode(E_REQUEST_DENIED); wmove(form->w, form->currow, form->curcol); wdeleteln(form->w); Adjust_Cursor_Position(form, prev_end); /* * If we did not really move to the previous line, help the user a * little. It is however a little inconsistent. Normally, when * backspacing around the point where text wraps to a new line in a * multi-line form, we absorb one keystroke for the wrapping point. That * is consistent with SVr4 forms. However, SVr4 does not allow typing * into the last column of the field, and requires the user to enter a * newline to move to the next line. Therefore it can consistently eat * that keystroke. Since ncurses allows the last column, it wraps * automatically (given the proper options). But we cannot eat the * keystroke to back over the wrapping point, since that would put the * cursor past the end of the form field. In this case, just delete the * character at the end of the field. */ if (form->currow == this_row && this_row > 0) { form->currow -= 1; form->curcol = field->dcols - 1; DeleteChar(form); } else { wmove(form->w, form->currow, form->curcol); myADDNSTR(form->w, this_line, (int)(this_end - this_line)); } } else { DeleteChar(form); } returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FE_Delete_Line(FORM * form) | | Description : Delete line at cursor position. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int FE_Delete_Line(FORM *form) { T((T_CALLED("FE_Delete_Line(%p)"), (void *)form)); form->curcol = 0; wdeleteln(form->w); returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FE_Delete_Word(FORM * form) | | Description : Delete word at cursor position | | Return Values : E_OK - success | E_REQUEST_DENIED - failure +--------------------------------------------------------------------------*/ static int FE_Delete_Word(FORM *form) { FIELD *field = form->current; FIELD_CELL *bp = Address_Of_Current_Row_In_Buffer(form); FIELD_CELL *ep = bp + field->dcols; FIELD_CELL *cp = bp + form->curcol; FIELD_CELL *s; T((T_CALLED("FE_Delete_Word(%p)"), (void *)form)); Synchronize_Buffer(form); if (ISBLANK(*cp)) returnCode(E_REQUEST_DENIED); /* not in word */ /* move cursor to begin of word and erase to end of screen-line */ Adjust_Cursor_Position(form, After_Last_Whitespace_Character(bp, form->curcol)); wmove(form->w, form->currow, form->curcol); wclrtoeol(form->w); /* skip over word in buffer */ s = Get_First_Whitespace_Character(cp, (int)(ep - cp)); /* to begin of next word */ s = Get_Start_Of_Data(s, (int)(ep - s)); if ((s != cp) && !ISBLANK(*s)) { /* copy remaining line to window */ myADDNSTR(form->w, s, (int)(s - After_End_Of_Data(s, (int)(ep - s)))); } returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FE_Clear_To_End_Of_Line(FORM * form) | | Description : Clear to end of current line. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int FE_Clear_To_End_Of_Line(FORM *form) { T((T_CALLED("FE_Clear_To_End_Of_Line(%p)"), (void *)form)); wmove(form->w, form->currow, form->curcol); wclrtoeol(form->w); returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FE_Clear_To_End_Of_Field(FORM * form) | | Description : Clear to end of field. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int FE_Clear_To_End_Of_Field(FORM *form) { T((T_CALLED("FE_Clear_To_End_Of_Field(%p)"), (void *)form)); wmove(form->w, form->currow, form->curcol); wclrtobot(form->w); returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FE_Clear_Field(FORM * form) | | Description : Clear entire field. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int FE_Clear_Field(FORM *form) { T((T_CALLED("FE_Clear_Field(%p)"), (void *)form)); form->currow = form->curcol = 0; werase(form->w); returnCode(E_OK); } /*---------------------------------------------------------------------------- END of Field Editing routines --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Edit Mode routines --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int EM_Overlay_Mode(FORM * form) | | Description : Switch to overlay mode. | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int EM_Overlay_Mode(FORM *form) { T((T_CALLED("EM_Overlay_Mode(%p)"), (void *)form)); SetStatus(form, _OVLMODE); returnCode(E_OK); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int EM_Insert_Mode(FORM * form) | | Description : Switch to insert mode | | Return Values : E_OK - success +--------------------------------------------------------------------------*/ static int EM_Insert_Mode(FORM *form) { T((T_CALLED("EM_Insert_Mode(%p)"), (void *)form)); ClrStatus(form, _OVLMODE); returnCode(E_OK); } /*---------------------------------------------------------------------------- END of Edit Mode routines --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Helper routines for Choice Requests --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Next_Choice(FORM * form, | FIELDTYPE * typ, | FIELD * field, | TypeArgument *argp) | | Description : Get the next field choice. For linked types this is | done recursively. | | Return Values : TRUE - next choice successfully retrieved | FALSE - couldn't retrieve next choice +--------------------------------------------------------------------------*/ static bool Next_Choice(FORM *form, FIELDTYPE *typ, FIELD *field, TypeArgument *argp) { if (!typ || !(typ->status & _HAS_CHOICE)) return FALSE; if (typ->status & _LINKED_TYPE) { assert(argp); return ( Next_Choice(form, typ->left, field, argp->left) || Next_Choice(form, typ->right, field, argp->right)); } else { #if NCURSES_INTEROP_FUNCS assert(typ->enum_next.onext); if (typ->status & _GENERIC) return typ->enum_next.gnext(form, field, (void *)argp); else return typ->enum_next.onext(field, (void *)argp); #else assert(typ->next); return typ->next(field, (void *)argp); #endif } } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Previous_Choice(FORM * form, | FIELDTYPE * typ, | FIELD * field, | TypeArgument *argp) | | Description : Get the previous field choice. For linked types this | is done recursively. | | Return Values : TRUE - previous choice successfully retrieved | FALSE - couldn't retrieve previous choice +--------------------------------------------------------------------------*/ static bool Previous_Choice(FORM *form, FIELDTYPE *typ, FIELD *field, TypeArgument *argp) { if (!typ || !(typ->status & _HAS_CHOICE)) return FALSE; if (typ->status & _LINKED_TYPE) { assert(argp); return ( Previous_Choice(form, typ->left, field, argp->left) || Previous_Choice(form, typ->right, field, argp->right)); } else { #if NCURSES_INTEROP_FUNCS assert(typ->enum_prev.oprev); if (typ->status & _GENERIC) return typ->enum_prev.gprev(form, field, (void *)argp); else return typ->enum_prev.oprev(field, (void *)argp); #else assert(typ->prev); return typ->prev(field, (void *)argp); #endif } } /*---------------------------------------------------------------------------- End of Helper routines for Choice Requests --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Routines for Choice Requests --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int CR_Next_Choice(FORM * form) | | Description : Get the next field choice. | | Return Values : E_OK - success | E_REQUEST_DENIED - next choice couldn't be retrieved +--------------------------------------------------------------------------*/ static int CR_Next_Choice(FORM *form) { FIELD *field = form->current; T((T_CALLED("CR_Next_Choice(%p)"), (void *)form)); Synchronize_Buffer(form); returnCode((Next_Choice(form, field->type, field, (TypeArgument *)(field->arg))) ? E_OK : E_REQUEST_DENIED); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int CR_Previous_Choice(FORM * form) | | Description : Get the previous field choice. | | Return Values : E_OK - success | E_REQUEST_DENIED - prev. choice couldn't be retrieved +--------------------------------------------------------------------------*/ static int CR_Previous_Choice(FORM *form) { FIELD *field = form->current; T((T_CALLED("CR_Previous_Choice(%p)"), (void *)form)); Synchronize_Buffer(form); returnCode((Previous_Choice(form, field->type, field, (TypeArgument *)(field->arg))) ? E_OK : E_REQUEST_DENIED); } /*---------------------------------------------------------------------------- End of Routines for Choice Requests --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Helper routines for Field Validations. --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_Field(FORM* form, | FIELDTYPE * typ, | FIELD * field, | TypeArgument * argp) | | Description : Check the field according to its fieldtype and its | actual arguments. For linked fieldtypes this is done | recursively. | | Return Values : TRUE - field is valid | FALSE - field is invalid. +--------------------------------------------------------------------------*/ static bool Check_Field(FORM *form, FIELDTYPE *typ, FIELD *field, TypeArgument *argp) { if (typ) { if (Field_Has_Option(field, O_NULLOK)) { FIELD_CELL *bp = field->buf; assert(bp); while (ISBLANK(*bp)) { bp++; } if (CharOf(*bp) == 0) return TRUE; } if (typ->status & _LINKED_TYPE) { assert(argp); return ( Check_Field(form, typ->left, field, argp->left) || Check_Field(form, typ->right, field, argp->right)); } else { #if NCURSES_INTEROP_FUNCS if (typ->fieldcheck.ofcheck) { if (typ->status & _GENERIC) return typ->fieldcheck.gfcheck(form, field, (void *)argp); else return typ->fieldcheck.ofcheck(field, (void *)argp); } #else if (typ->fcheck) return typ->fcheck(field, (void *)argp); #endif } } return TRUE; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : bool _nc_Internal_Validation(FORM * form ) | | Description : Validate the current field of the form. | | Return Values : TRUE - field is valid | FALSE - field is invalid +--------------------------------------------------------------------------*/ NCURSES_EXPORT(bool) _nc_Internal_Validation(FORM *form) { FIELD *field; field = form->current; Synchronize_Buffer(form); if ((form->status & _FCHECK_REQUIRED) || (!(Field_Has_Option(field, O_PASSOK)))) { if (!Check_Field(form, field->type, field, (TypeArgument *)(field->arg))) return FALSE; ClrStatus(form, _FCHECK_REQUIRED); SetStatus(field, _CHANGED); Synchronize_Linked_Fields(field); } return TRUE; } /*---------------------------------------------------------------------------- End of Helper routines for Field Validations. --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Routines for Field Validation. --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FV_Validation(FORM * form) | | Description : Validate the current field of the form. | | Return Values : E_OK - field valid | E_INVALID_FIELD - field not valid +--------------------------------------------------------------------------*/ static int FV_Validation(FORM *form) { T((T_CALLED("FV_Validation(%p)"), (void *)form)); if (_nc_Internal_Validation(form)) returnCode(E_OK); else returnCode(E_INVALID_FIELD); } /*---------------------------------------------------------------------------- End of routines for Field Validation. --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Helper routines for Inter-Field Navigation --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static FIELD *Next_Field_On_Page(FIELD * field) | | Description : Get the next field after the given field on the current | page. The order of fields is the one defined by the | fields array. Only visible and active fields are | counted. | | Return Values : Pointer to the next field. +--------------------------------------------------------------------------*/ NCURSES_INLINE static FIELD * Next_Field_On_Page(FIELD *field) { FORM *form = field->form; FIELD **field_on_page = &form->field[field->index]; FIELD **first_on_page = &form->field[form->page[form->curpage].pmin]; FIELD **last_on_page = &form->field[form->page[form->curpage].pmax]; do { field_on_page = (field_on_page == last_on_page) ? first_on_page : field_on_page + 1; if (Field_Is_Selectable(*field_on_page)) break; } while (field != (*field_on_page)); return (*field_on_page); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : FIELD* _nc_First_Active_Field(FORM * form) | | Description : Get the first active field on the current page, | if there are such. If there are none, get the first | visible field on the page. If there are also none, | we return the first field on page and hope the best. | | Return Values : Pointer to calculated field. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELD *) _nc_First_Active_Field(FORM *form) { FIELD **last_on_page = &form->field[form->page[form->curpage].pmax]; FIELD *proposed = Next_Field_On_Page(*last_on_page); if (proposed == *last_on_page) { /* there might be the special situation, where there is no active and visible field on the current page. We then select the first visible field on this readonly page */ if (Field_Is_Not_Selectable(proposed)) { FIELD **field = &form->field[proposed->index]; FIELD **first = &form->field[form->page[form->curpage].pmin]; do { field = (field == last_on_page) ? first : field + 1; if (Field_Has_Option(*field, O_VISIBLE)) break; } while (proposed != (*field)); proposed = *field; if ((proposed == *last_on_page) && !((unsigned)proposed->opts & O_VISIBLE)) { /* This means, there is also no visible field on the page. So we propose the first one and hope the very best... Some very clever user has designed a readonly and invisible page on this form. */ proposed = *first; } } } return (proposed); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static FIELD *Previous_Field_On_Page(FIELD * field) | | Description : Get the previous field before the given field on the | current page. The order of fields is the one defined by | the fields array. Only visible and active fields are | counted. | | Return Values : Pointer to the previous field. +--------------------------------------------------------------------------*/ NCURSES_INLINE static FIELD * Previous_Field_On_Page(FIELD *field) { FORM *form = field->form; FIELD **field_on_page = &form->field[field->index]; FIELD **first_on_page = &form->field[form->page[form->curpage].pmin]; FIELD **last_on_page = &form->field[form->page[form->curpage].pmax]; do { field_on_page = (field_on_page == first_on_page) ? last_on_page : field_on_page - 1; if (Field_Is_Selectable(*field_on_page)) break; } while (field != (*field_on_page)); return (*field_on_page); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static FIELD *Sorted_Next_Field(FIELD * field) | | Description : Get the next field after the given field on the current | page. The order of fields is the one defined by the | (row,column) geometry, rows are major. | | Return Values : Pointer to the next field. +--------------------------------------------------------------------------*/ NCURSES_INLINE static FIELD * Sorted_Next_Field(FIELD *field) { FIELD *field_on_page = field; do { field_on_page = field_on_page->snext; if (Field_Is_Selectable(field_on_page)) break; } while (field_on_page != field); return (field_on_page); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static FIELD *Sorted_Previous_Field(FIELD * field) | | Description : Get the previous field before the given field on the | current page. The order of fields is the one defined | by the (row,column) geometry, rows are major. | | Return Values : Pointer to the previous field. +--------------------------------------------------------------------------*/ NCURSES_INLINE static FIELD * Sorted_Previous_Field(FIELD *field) { FIELD *field_on_page = field; do { field_on_page = field_on_page->sprev; if (Field_Is_Selectable(field_on_page)) break; } while (field_on_page != field); return (field_on_page); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static FIELD *Left_Neighbor_Field(FIELD * field) | | Description : Get the left neighbor of the field on the same line | and the same page. Cycles through the line. | | Return Values : Pointer to left neighbor field. +--------------------------------------------------------------------------*/ NCURSES_INLINE static FIELD * Left_Neighbor_Field(FIELD *field) { FIELD *field_on_page = field; /* For a field that has really a left neighbor, the while clause immediately fails and the loop is left, positioned at the right neighbor. Otherwise we cycle backwards through the sorted field list until we enter the same line (from the right end). */ do { field_on_page = Sorted_Previous_Field(field_on_page); } while (field_on_page->frow != field->frow); return (field_on_page); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static FIELD *Right_Neighbor_Field(FIELD * field) | | Description : Get the right neighbor of the field on the same line | and the same page. | | Return Values : Pointer to right neighbor field. +--------------------------------------------------------------------------*/ NCURSES_INLINE static FIELD * Right_Neighbor_Field(FIELD *field) { FIELD *field_on_page = field; /* See the comments on Left_Neighbor_Field to understand how it works */ do { field_on_page = Sorted_Next_Field(field_on_page); } while (field_on_page->frow != field->frow); return (field_on_page); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static FIELD *Upper_Neighbor_Field(FIELD * field) | | Description : Because of the row-major nature of sorting the fields, | it is more difficult to define whats the upper neighbor | field really means. We define that it must be on a | 'previous' line (cyclic order!) and is the rightmost | field laying on the left side of the given field. If | this set is empty, we take the first field on the line. | | Return Values : Pointer to the upper neighbor field. +--------------------------------------------------------------------------*/ static FIELD * Upper_Neighbor_Field(FIELD *field) { FIELD *field_on_page = field; int frow = field->frow; int fcol = field->fcol; /* Walk back to the 'previous' line. The second term in the while clause just guarantees that we stop if we cycled through the line because there might be no 'previous' line if the page has just one line. */ do { field_on_page = Sorted_Previous_Field(field_on_page); } while (field_on_page->frow == frow && field_on_page->fcol != fcol); if (field_on_page->frow != frow) { /* We really found a 'previous' line. We are positioned at the rightmost field on this line */ frow = field_on_page->frow; /* We walk to the left as long as we are really right of the field. */ while (field_on_page->frow == frow && field_on_page->fcol > fcol) field_on_page = Sorted_Previous_Field(field_on_page); /* If we wrapped, just go to the right which is the first field on the row */ if (field_on_page->frow != frow) field_on_page = Sorted_Next_Field(field_on_page); } return (field_on_page); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static FIELD *Down_Neighbor_Field(FIELD * field) | | Description : Because of the row-major nature of sorting the fields, | its more difficult to define whats the down neighbor | field really means. We define that it must be on a | 'next' line (cyclic order!) and is the leftmost | field laying on the right side of the given field. If | this set is empty, we take the last field on the line. | | Return Values : Pointer to the upper neighbor field. +--------------------------------------------------------------------------*/ static FIELD * Down_Neighbor_Field(FIELD *field) { FIELD *field_on_page = field; int frow = field->frow; int fcol = field->fcol; /* Walk forward to the 'next' line. The second term in the while clause just guarantees that we stop if we cycled through the line because there might be no 'next' line if the page has just one line. */ do { field_on_page = Sorted_Next_Field(field_on_page); } while (field_on_page->frow == frow && field_on_page->fcol != fcol); if (field_on_page->frow != frow) { /* We really found a 'next' line. We are positioned at the rightmost field on this line */ frow = field_on_page->frow; /* We walk to the right as long as we are really left of the field. */ while (field_on_page->frow == frow && field_on_page->fcol < fcol) field_on_page = Sorted_Next_Field(field_on_page); /* If we wrapped, just go to the left which is the last field on the row */ if (field_on_page->frow != frow) field_on_page = Sorted_Previous_Field(field_on_page); } return (field_on_page); } /*---------------------------------------------------------------------------- Inter-Field Navigation routines --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Inter_Field_Navigation( | int (* const fct) (FORM *), | FORM * form) | | Description : Generic behavior for changing the current field, the | field is left and a new field is entered. So the field | must be validated and the field init/term hooks must | be called. | | Return Values : E_OK - success | E_INVALID_FIELD - field is invalid | some other - error from subordinate call +--------------------------------------------------------------------------*/ static int Inter_Field_Navigation(int (*const fct) (FORM *), FORM *form) { int res; if (!_nc_Internal_Validation(form)) res = E_INVALID_FIELD; else { Call_Hook(form, fieldterm); res = fct(form); Call_Hook(form, fieldinit); } return res; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Next_Field(FORM * form) | | Description : Move to the next field on the current page of the form | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Next_Field(FORM *form) { T((T_CALLED("FN_Next_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Next_Field_On_Page(form->current))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Previous_Field(FORM * form) | | Description : Move to the previous field on the current page of the | form | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Previous_Field(FORM *form) { T((T_CALLED("FN_Previous_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Previous_Field_On_Page(form->current))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_First_Field(FORM * form) | | Description : Move to the first field on the current page of the form | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_First_Field(FORM *form) { T((T_CALLED("FN_First_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Next_Field_On_Page(form->field[form->page[form->curpage].pmax]))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Last_Field(FORM * form) | | Description : Move to the last field on the current page of the form | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Last_Field(FORM *form) { T((T_CALLED("FN_Last_Field(%p)"), (void *)form)); returnCode( _nc_Set_Current_Field(form, Previous_Field_On_Page(form->field[form->page[form->curpage].pmin]))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Sorted_Next_Field(FORM * form) | | Description : Move to the sorted next field on the current page | of the form. | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Sorted_Next_Field(FORM *form) { T((T_CALLED("FN_Sorted_Next_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Sorted_Next_Field(form->current))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Sorted_Previous_Field(FORM * form) | | Description : Move to the sorted previous field on the current page | of the form. | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Sorted_Previous_Field(FORM *form) { T((T_CALLED("FN_Sorted_Previous_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Sorted_Previous_Field(form->current))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Sorted_First_Field(FORM * form) | | Description : Move to the sorted first field on the current page | of the form. | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Sorted_First_Field(FORM *form) { T((T_CALLED("FN_Sorted_First_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Sorted_Next_Field(form->field[form->page[form->curpage].smax]))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Sorted_Last_Field(FORM * form) | | Description : Move to the sorted last field on the current page | of the form. | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Sorted_Last_Field(FORM *form) { T((T_CALLED("FN_Sorted_Last_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Sorted_Previous_Field(form->field[form->page[form->curpage].smin]))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Left_Field(FORM * form) | | Description : Get the field on the left of the current field on the | same line and the same page. Cycles through the line. | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Left_Field(FORM *form) { T((T_CALLED("FN_Left_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Left_Neighbor_Field(form->current))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Right_Field(FORM * form) | | Description : Get the field on the right of the current field on the | same line and the same page. Cycles through the line. | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Right_Field(FORM *form) { T((T_CALLED("FN_Right_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Right_Neighbor_Field(form->current))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Up_Field(FORM * form) | | Description : Get the upper neighbor of the current field. This | cycles through the page. See the comments of the | Upper_Neighbor_Field function to understand how | 'upper' is defined. | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Up_Field(FORM *form) { T((T_CALLED("FN_Up_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Upper_Neighbor_Field(form->current))); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int FN_Down_Field(FORM * form) | | Description : Get the down neighbor of the current field. This | cycles through the page. See the comments of the | Down_Neighbor_Field function to understand how | 'down' is defined. | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int FN_Down_Field(FORM *form) { T((T_CALLED("FN_Down_Field(%p)"), (void *)form)); returnCode(_nc_Set_Current_Field(form, Down_Neighbor_Field(form->current))); } /*---------------------------------------------------------------------------- END of Field Navigation routines --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Helper routines for Page Navigation --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : int _nc_Set_Form_Page(FORM * form, | int page, | FIELD * field) | | Description : Make the given page number the current page and make | the given field the current field on the page. If | for the field NULL is given, make the first field on | the page the current field. The routine acts only | if the requested page is not the current page. | | Return Values : E_OK - success | != E_OK - error from subordinate call | E_BAD_ARGUMENT - invalid field pointer | E_SYSTEM_ERROR - some severe basic error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) _nc_Set_Form_Page(FORM *form, int page, FIELD *field) { int res = E_OK; if ((form->curpage != page)) { FIELD *last_field, *field_on_page; werase(Get_Form_Window(form)); form->curpage = (short)page; last_field = field_on_page = form->field[form->page[page].smin]; do { if ((unsigned)field_on_page->opts & O_VISIBLE) if ((res = Display_Field(field_on_page)) != E_OK) return (res); field_on_page = field_on_page->snext; } while (field_on_page != last_field); if (field) res = _nc_Set_Current_Field(form, field); else /* N.B.: we don't encapsulate this by Inter_Field_Navigation(), because this is already executed in a page navigation context that contains field navigation */ res = FN_First_Field(form); } return (res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Next_Page_Number(const FORM * form) | | Description : Calculate the page number following the current page | number. This cycles if the highest page number is | reached. | | Return Values : The next page number +--------------------------------------------------------------------------*/ NCURSES_INLINE static int Next_Page_Number(const FORM *form) { return (form->curpage + 1) % form->maxpage; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Previous_Page_Number(const FORM * form) | | Description : Calculate the page number before the current page | number. This cycles if the first page number is | reached. | | Return Values : The previous page number +--------------------------------------------------------------------------*/ NCURSES_INLINE static int Previous_Page_Number(const FORM *form) { return (form->curpage != 0 ? form->curpage - 1 : form->maxpage - 1); } /*---------------------------------------------------------------------------- Page Navigation routines --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Page_Navigation( | int (* const fct) (FORM *), | FORM * form) | | Description : Generic behavior for changing a page. This means | that the field is left and a new field is entered. | So the field must be validated and the field init/term | hooks must be called. Because also the page is changed, | the forms init/term hooks must be called also. | | Return Values : E_OK - success | E_INVALID_FIELD - field is invalid | some other - error from subordinate call +--------------------------------------------------------------------------*/ static int Page_Navigation(int (*const fct) (FORM *), FORM *form) { int res; if (!_nc_Internal_Validation(form)) res = E_INVALID_FIELD; else { Call_Hook(form, fieldterm); Call_Hook(form, formterm); res = fct(form); Call_Hook(form, forminit); Call_Hook(form, fieldinit); } return res; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int PN_Next_Page(FORM * form) | | Description : Move to the next page of the form | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int PN_Next_Page(FORM *form) { T((T_CALLED("PN_Next_Page(%p)"), (void *)form)); returnCode(_nc_Set_Form_Page(form, Next_Page_Number(form), (FIELD *)0)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int PN_Previous_Page(FORM * form) | | Description : Move to the previous page of the form | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int PN_Previous_Page(FORM *form) { T((T_CALLED("PN_Previous_Page(%p)"), (void *)form)); returnCode(_nc_Set_Form_Page(form, Previous_Page_Number(form), (FIELD *)0)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int PN_First_Page(FORM * form) | | Description : Move to the first page of the form | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int PN_First_Page(FORM *form) { T((T_CALLED("PN_First_Page(%p)"), (void *)form)); returnCode(_nc_Set_Form_Page(form, 0, (FIELD *)0)); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int PN_Last_Page(FORM * form) | | Description : Move to the last page of the form | | Return Values : E_OK - success | != E_OK - error from subordinate call +--------------------------------------------------------------------------*/ static int PN_Last_Page(FORM *form) { T((T_CALLED("PN_Last_Page(%p)"), (void *)form)); returnCode(_nc_Set_Form_Page(form, form->maxpage - 1, (FIELD *)0)); } /*---------------------------------------------------------------------------- END of Field Navigation routines --------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Helper routines for the core form driver. --------------------------------------------------------------------------*/ # if USE_WIDEC_SUPPORT /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Data_Entry_w(FORM * form, wchar_t c) | | Description : Enter the wide character c into at the current | position of the current field of the form. | | Return Values : E_OK - success | E_REQUEST_DENIED - driver could not process the request | E_SYSTEM_ERROR - +--------------------------------------------------------------------------*/ static int Data_Entry_w(FORM *form, wchar_t c) { FIELD *field = form->current; int result = E_REQUEST_DENIED; T((T_CALLED("Data_Entry(%p,%s)"), (void *)form, _tracechtype((chtype)c))); if ((Field_Has_Option(field, O_EDIT)) #if FIX_FORM_INACTIVE_BUG && (Field_Has_Option(field, O_ACTIVE)) #endif ) { wchar_t given[2]; cchar_t temp_ch; given[0] = c; given[1] = 1; setcchar(&temp_ch, given, 0, 0, (void *)0); if ((Field_Has_Option(field, O_BLANK)) && First_Position_In_Current_Field(form) && !(form->status & _FCHECK_REQUIRED) && !(form->status & _WINDOW_MODIFIED)) werase(form->w); if (form->status & _OVLMODE) { wadd_wch(form->w, &temp_ch); } else /* no _OVLMODE */ { bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form); if (!(There_Is_Room || ((Single_Line_Field(field) && Growable(field))))) RETURN(E_REQUEST_DENIED); if (!There_Is_Room && !Field_Grown(field, 1)) RETURN(E_SYSTEM_ERROR); wins_wch(form->w, &temp_ch); } if ((result = Wrapping_Not_Necessary_Or_Wrapping_Ok(form)) == E_OK) { bool End_Of_Field = (((field->drows - 1) == form->currow) && ((field->dcols - 1) == form->curcol)); form->status |= _WINDOW_MODIFIED; if (End_Of_Field && !Growable(field) && (Field_Has_Option(field, O_AUTOSKIP))) result = Inter_Field_Navigation(FN_Next_Field, form); else { if (End_Of_Field && Growable(field) && !Field_Grown(field, 1)) result = E_SYSTEM_ERROR; else { /* * We have just added a byte to the form field. It may have * been part of a multibyte character. If it was, the * addch_used field is nonzero and we should not try to move * to a new column. */ if (WINDOW_EXT(form->w, addch_used) == 0) IFN_Next_Character(form); result = E_OK; } } } } RETURN(result); } # endif /*--------------------------------------------------------------------------- | Facility : libnform | Function : static int Data_Entry(FORM * form,int c) | | Description : Enter character c into at the current position of the | current field of the form. | | Return Values : E_OK - success | E_REQUEST_DENIED - driver could not process the request | E_SYSTEM_ERROR - +--------------------------------------------------------------------------*/ static int Data_Entry(FORM *form, int c) { FIELD *field = form->current; int result = E_REQUEST_DENIED; T((T_CALLED("Data_Entry(%p,%s)"), (void *)form, _tracechtype((chtype)c))); if ((Field_Has_Option(field, O_EDIT)) #if FIX_FORM_INACTIVE_BUG && (Field_Has_Option(field, O_ACTIVE)) #endif ) { if ((Field_Has_Option(field, O_BLANK)) && First_Position_In_Current_Field(form) && !(form->status & _FCHECK_REQUIRED) && !(form->status & _WINDOW_MODIFIED)) werase(form->w); if (form->status & _OVLMODE) { waddch(form->w, (chtype)c); } else /* no _OVLMODE */ { bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form); if (!(There_Is_Room || ((Single_Line_Field(field) && Growable(field))))) RETURN(E_REQUEST_DENIED); if (!There_Is_Room && !Field_Grown(field, 1)) RETURN(E_SYSTEM_ERROR); winsch(form->w, (chtype)c); } if ((result = Wrapping_Not_Necessary_Or_Wrapping_Ok(form)) == E_OK) { bool End_Of_Field = (((field->drows - 1) == form->currow) && ((field->dcols - 1) == form->curcol)); SetStatus(form, _WINDOW_MODIFIED); if (End_Of_Field && !Growable(field) && (Field_Has_Option(field, O_AUTOSKIP))) result = Inter_Field_Navigation(FN_Next_Field, form); else { if (End_Of_Field && Growable(field) && !Field_Grown(field, 1)) result = E_SYSTEM_ERROR; else { #if USE_WIDEC_SUPPORT /* * We have just added a byte to the form field. It may have * been part of a multibyte character. If it was, the * addch_used field is nonzero and we should not try to move * to a new column. */ if (WINDOW_EXT(form->w, addch_used) == 0) IFN_Next_Character(form); #else IFN_Next_Character(form); #endif result = E_OK; } } } } RETURN(result); } /* Structure to describe the binding of a request code to a function. The member keycode codes the request value as well as the generic routine to use for the request. The code for the generic routine is coded in the upper 16 Bits while the request code is coded in the lower 16 bits. In terms of C++ you might think of a request as a class with a virtual method "perform". The different types of request are derived from this base class and overload (or not) the base class implementation of perform. */ typedef struct { int keycode; /* must be at least 32 bit: hi:mode, lo: key */ int (*cmd) (FORM *); /* low level driver routine for this key */ } Binding_Info; /* You may see this is the class-id of the request type class */ #define ID_PN (0x00000000) /* Page navigation */ #define ID_FN (0x00010000) /* Inter-Field navigation */ #define ID_IFN (0x00020000) /* Intra-Field navigation */ #define ID_VSC (0x00030000) /* Vertical Scrolling */ #define ID_HSC (0x00040000) /* Horizontal Scrolling */ #define ID_FE (0x00050000) /* Field Editing */ #define ID_EM (0x00060000) /* Edit Mode */ #define ID_FV (0x00070000) /* Field Validation */ #define ID_CH (0x00080000) /* Choice */ #define ID_Mask (0xffff0000) #define Key_Mask (0x0000ffff) #define ID_Shft (16) /* This array holds all the Binding Infos */ /* *INDENT-OFF* */ static const Binding_Info bindings[MAX_FORM_COMMAND - MIN_FORM_COMMAND + 1] = { { REQ_NEXT_PAGE |ID_PN ,PN_Next_Page}, { REQ_PREV_PAGE |ID_PN ,PN_Previous_Page}, { REQ_FIRST_PAGE |ID_PN ,PN_First_Page}, { REQ_LAST_PAGE |ID_PN ,PN_Last_Page}, { REQ_NEXT_FIELD |ID_FN ,FN_Next_Field}, { REQ_PREV_FIELD |ID_FN ,FN_Previous_Field}, { REQ_FIRST_FIELD |ID_FN ,FN_First_Field}, { REQ_LAST_FIELD |ID_FN ,FN_Last_Field}, { REQ_SNEXT_FIELD |ID_FN ,FN_Sorted_Next_Field}, { REQ_SPREV_FIELD |ID_FN ,FN_Sorted_Previous_Field}, { REQ_SFIRST_FIELD |ID_FN ,FN_Sorted_First_Field}, { REQ_SLAST_FIELD |ID_FN ,FN_Sorted_Last_Field}, { REQ_LEFT_FIELD |ID_FN ,FN_Left_Field}, { REQ_RIGHT_FIELD |ID_FN ,FN_Right_Field}, { REQ_UP_FIELD |ID_FN ,FN_Up_Field}, { REQ_DOWN_FIELD |ID_FN ,FN_Down_Field}, { REQ_NEXT_CHAR |ID_IFN ,IFN_Next_Character}, { REQ_PREV_CHAR |ID_IFN ,IFN_Previous_Character}, { REQ_NEXT_LINE |ID_IFN ,IFN_Next_Line}, { REQ_PREV_LINE |ID_IFN ,IFN_Previous_Line}, { REQ_NEXT_WORD |ID_IFN ,IFN_Next_Word}, { REQ_PREV_WORD |ID_IFN ,IFN_Previous_Word}, { REQ_BEG_FIELD |ID_IFN ,IFN_Beginning_Of_Field}, { REQ_END_FIELD |ID_IFN ,IFN_End_Of_Field}, { REQ_BEG_LINE |ID_IFN ,IFN_Beginning_Of_Line}, { REQ_END_LINE |ID_IFN ,IFN_End_Of_Line}, { REQ_LEFT_CHAR |ID_IFN ,IFN_Left_Character}, { REQ_RIGHT_CHAR |ID_IFN ,IFN_Right_Character}, { REQ_UP_CHAR |ID_IFN ,IFN_Up_Character}, { REQ_DOWN_CHAR |ID_IFN ,IFN_Down_Character}, { REQ_NEW_LINE |ID_FE ,FE_New_Line}, { REQ_INS_CHAR |ID_FE ,FE_Insert_Character}, { REQ_INS_LINE |ID_FE ,FE_Insert_Line}, { REQ_DEL_CHAR |ID_FE ,FE_Delete_Character}, { REQ_DEL_PREV |ID_FE ,FE_Delete_Previous}, { REQ_DEL_LINE |ID_FE ,FE_Delete_Line}, { REQ_DEL_WORD |ID_FE ,FE_Delete_Word}, { REQ_CLR_EOL |ID_FE ,FE_Clear_To_End_Of_Line}, { REQ_CLR_EOF |ID_FE ,FE_Clear_To_End_Of_Field}, { REQ_CLR_FIELD |ID_FE ,FE_Clear_Field}, { REQ_OVL_MODE |ID_EM ,EM_Overlay_Mode}, { REQ_INS_MODE |ID_EM ,EM_Insert_Mode}, { REQ_SCR_FLINE |ID_VSC ,VSC_Scroll_Line_Forward}, { REQ_SCR_BLINE |ID_VSC ,VSC_Scroll_Line_Backward}, { REQ_SCR_FPAGE |ID_VSC ,VSC_Scroll_Page_Forward}, { REQ_SCR_BPAGE |ID_VSC ,VSC_Scroll_Page_Backward}, { REQ_SCR_FHPAGE |ID_VSC ,VSC_Scroll_Half_Page_Forward}, { REQ_SCR_BHPAGE |ID_VSC ,VSC_Scroll_Half_Page_Backward}, { REQ_SCR_FCHAR |ID_HSC ,HSC_Scroll_Char_Forward}, { REQ_SCR_BCHAR |ID_HSC ,HSC_Scroll_Char_Backward}, { REQ_SCR_HFLINE |ID_HSC ,HSC_Horizontal_Line_Forward}, { REQ_SCR_HBLINE |ID_HSC ,HSC_Horizontal_Line_Backward}, { REQ_SCR_HFHALF |ID_HSC ,HSC_Horizontal_Half_Line_Forward}, { REQ_SCR_HBHALF |ID_HSC ,HSC_Horizontal_Half_Line_Backward}, { REQ_VALIDATION |ID_FV ,FV_Validation}, { REQ_NEXT_CHOICE |ID_CH ,CR_Next_Choice}, { REQ_PREV_CHOICE |ID_CH ,CR_Previous_Choice} }; /* *INDENT-ON* */ /*--------------------------------------------------------------------------- | Facility : libnform | Function : int form_driver(FORM * form,int c) | | Description : This is the workhorse of the forms system. It checks | to determine whether the character c is a request or | data. If it is a request, the form driver executes | the request and returns the result. If it is data | (printable character), it enters the data into the | current position in the current field. If it is not | recognized, the form driver assumes it is an application | defined command and returns E_UNKNOWN_COMMAND. | Application defined command should be defined relative | to MAX_FORM_COMMAND, the maximum value of a request. | | Return Values : E_OK - success | E_SYSTEM_ERROR - system error | E_BAD_ARGUMENT - an argument is incorrect | E_NOT_POSTED - form is not posted | E_INVALID_FIELD - field contents are invalid | E_BAD_STATE - called from inside a hook routine | E_REQUEST_DENIED - request failed | E_NOT_CONNECTED - no fields are connected to the form | E_UNKNOWN_COMMAND - command not known +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) form_driver(FORM *form, int c) { const Binding_Info *BI = (Binding_Info *) 0; int res = E_UNKNOWN_COMMAND; T((T_CALLED("form_driver(%p,%d)"), (void *)form, c)); if (!form) RETURN(E_BAD_ARGUMENT); if (!(form->field)) RETURN(E_NOT_CONNECTED); assert(form->page); if (c == FIRST_ACTIVE_MAGIC) { form->current = _nc_First_Active_Field(form); RETURN(E_OK); } assert(form->current && form->current->buf && (form->current->form == form) ); if (form->status & _IN_DRIVER) RETURN(E_BAD_STATE); if (!(form->status & _POSTED)) RETURN(E_NOT_POSTED); if ((c >= MIN_FORM_COMMAND && c <= MAX_FORM_COMMAND) && ((bindings[c - MIN_FORM_COMMAND].keycode & Key_Mask) == c)) { TR(TRACE_CALLS, ("form_request %s", form_request_name(c))); BI = &(bindings[c - MIN_FORM_COMMAND]); } if (BI) { typedef int (*Generic_Method) (int (*const) (FORM *), FORM *); static const Generic_Method Generic_Methods[] = { Page_Navigation, /* overloaded to call field&form hooks */ Inter_Field_Navigation, /* overloaded to call field hooks */ NULL, /* Intra-Field is generic */ Vertical_Scrolling, /* Overloaded to check multi-line */ Horizontal_Scrolling, /* Overloaded to check single-line */ Field_Editing, /* Overloaded to mark modification */ NULL, /* Edit Mode is generic */ NULL, /* Field Validation is generic */ NULL /* Choice Request is generic */ }; size_t nMethods = (sizeof(Generic_Methods) / sizeof(Generic_Methods[0])); size_t method = (size_t) ((BI->keycode >> ID_Shft) & 0xffff); /* see ID_Mask */ if ((method >= nMethods) || !(BI->cmd)) res = E_SYSTEM_ERROR; else { Generic_Method fct = Generic_Methods[method]; if (fct) { res = fct(BI->cmd, form); } else { res = (BI->cmd) (form); } } } #ifdef NCURSES_MOUSE_VERSION else if (KEY_MOUSE == c) { MEVENT event; WINDOW *win = form->win ? form->win : StdScreen(Get_Form_Screen(form)); WINDOW *sub = form->sub ? form->sub : win; getmouse(&event); if ((event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED | BUTTON1_TRIPLE_CLICKED)) && wenclose(win, event.y, event.x)) { /* we react only if the click was in the userwin, that means * inside the form display area or at the decoration window. */ int ry = event.y, rx = event.x; /* screen coordinates */ res = E_REQUEST_DENIED; if (mouse_trafo(&ry, &rx, FALSE)) { /* rx, ry are now "curses" coordinates */ if (ry < sub->_begy) { /* we clicked above the display region; this is * interpreted as "scroll up" request */ if (event.bstate & BUTTON1_CLICKED) res = form_driver(form, REQ_PREV_FIELD); else if (event.bstate & BUTTON1_DOUBLE_CLICKED) res = form_driver(form, REQ_PREV_PAGE); else if (event.bstate & BUTTON1_TRIPLE_CLICKED) res = form_driver(form, REQ_FIRST_FIELD); } else if (ry > sub->_begy + sub->_maxy) { /* we clicked below the display region; this is * interpreted as "scroll down" request */ if (event.bstate & BUTTON1_CLICKED) res = form_driver(form, REQ_NEXT_FIELD); else if (event.bstate & BUTTON1_DOUBLE_CLICKED) res = form_driver(form, REQ_NEXT_PAGE); else if (event.bstate & BUTTON1_TRIPLE_CLICKED) res = form_driver(form, REQ_LAST_FIELD); } else if (wenclose(sub, event.y, event.x)) { /* Inside the area we try to find the hit item */ int i; ry = event.y; rx = event.x; if (wmouse_trafo(sub, &ry, &rx, FALSE)) { int min_field = form->page[form->curpage].pmin; int max_field = form->page[form->curpage].pmax; for (i = min_field; i <= max_field; ++i) { FIELD *field = form->field[i]; if (Field_Is_Selectable(field) && Field_encloses(field, ry, rx) == E_OK) { res = _nc_Set_Current_Field(form, field); if (res == E_OK) res = _nc_Position_Form_Cursor(form); if (res == E_OK && (event.bstate & BUTTON1_DOUBLE_CLICKED)) res = E_UNKNOWN_COMMAND; break; } } } } } } else res = E_REQUEST_DENIED; } #endif /* NCURSES_MOUSE_VERSION */ else if (!(c & (~(int)MAX_REGULAR_CHARACTER))) { /* * If we're using 8-bit characters, iscntrl+isprint cover the whole set. * But with multibyte characters, there is a third possibility, i.e., * parts of characters that build up into printable characters which are * not considered printable. * * FIXME: the wide-character branch should also use Check_Char(). */ #if USE_WIDEC_SUPPORT if (!iscntrl(UChar(c))) #else if (isprint(UChar(c)) && Check_Char(form, form->current, form->current->type, c, (TypeArgument *)(form->current->arg))) #endif res = Data_Entry(form, c); } _nc_Refresh_Current_Field(form); RETURN(res); } # if USE_WIDEC_SUPPORT /*--------------------------------------------------------------------------- | Facility : libnform | Function : int form_driver_w(FORM * form,int type,wchar_t c) | | Description : This is the workhorse of the forms system. | | Input is either a key code (request) or a wide char | returned by e.g. get_wch (). The type must be passed | as well,so that we are able to determine whether the char | is a multibyte char or a request. | If it is a request, the form driver executes | the request and returns the result. If it is data | (printable character), it enters the data into the | current position in the current field. If it is not | recognized, the form driver assumes it is an application | defined command and returns E_UNKNOWN_COMMAND. | Application defined command should be defined relative | to MAX_FORM_COMMAND, the maximum value of a request. | | Return Values : E_OK - success | E_SYSTEM_ERROR - system error | E_BAD_ARGUMENT - an argument is incorrect | E_NOT_POSTED - form is not posted | E_INVALID_FIELD - field contents are invalid | E_BAD_STATE - called from inside a hook routine | E_REQUEST_DENIED - request failed | E_NOT_CONNECTED - no fields are connected to the form | E_UNKNOWN_COMMAND - command not known +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) form_driver_w(FORM *form, int type, wchar_t c) { const Binding_Info *BI = (Binding_Info *) 0; int res = E_UNKNOWN_COMMAND; T((T_CALLED("form_driver(%p,%d)"), (void *)form, (int)c)); if (!form) RETURN(E_BAD_ARGUMENT); if (!(form->field)) RETURN(E_NOT_CONNECTED); assert(form->page); if (c == (wchar_t)FIRST_ACTIVE_MAGIC) { form->current = _nc_First_Active_Field(form); RETURN(E_OK); } assert(form->current && form->current->buf && (form->current->form == form) ); if (form->status & _IN_DRIVER) RETURN(E_BAD_STATE); if (!(form->status & _POSTED)) RETURN(E_NOT_POSTED); /* check if this is a keycode or a (wide) char */ if (type == KEY_CODE_YES) { if ((c >= MIN_FORM_COMMAND && c <= MAX_FORM_COMMAND) && ((bindings[c - MIN_FORM_COMMAND].keycode & Key_Mask) == c)) BI = &(bindings[c - MIN_FORM_COMMAND]); } if (BI) { typedef int (*Generic_Method) (int (*const) (FORM *), FORM *); static const Generic_Method Generic_Methods[] = { Page_Navigation, /* overloaded to call field&form hooks */ Inter_Field_Navigation, /* overloaded to call field hooks */ NULL, /* Intra-Field is generic */ Vertical_Scrolling, /* Overloaded to check multi-line */ Horizontal_Scrolling, /* Overloaded to check single-line */ Field_Editing, /* Overloaded to mark modification */ NULL, /* Edit Mode is generic */ NULL, /* Field Validation is generic */ NULL /* Choice Request is generic */ }; size_t nMethods = (sizeof(Generic_Methods) / sizeof(Generic_Methods[0])); size_t method = (size_t) (BI->keycode >> ID_Shft) & 0xffff; /* see ID_Mask */ if ((method >= nMethods) || !(BI->cmd)) res = E_SYSTEM_ERROR; else { Generic_Method fct = Generic_Methods[method]; if (fct) res = fct(BI->cmd, form); else res = (BI->cmd) (form); } } #ifdef NCURSES_MOUSE_VERSION else if (KEY_MOUSE == c) { MEVENT event; WINDOW *win = form->win ? form->win : StdScreen(Get_Form_Screen(form)); WINDOW *sub = form->sub ? form->sub : win; getmouse(&event); if ((event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED | BUTTON1_TRIPLE_CLICKED)) && wenclose(win, event.y, event.x)) { /* we react only if the click was in the userwin, that means * inside the form display area or at the decoration window. */ int ry = event.y, rx = event.x; /* screen coordinates */ res = E_REQUEST_DENIED; if (mouse_trafo(&ry, &rx, FALSE)) { /* rx, ry are now "curses" coordinates */ if (ry < sub->_begy) { /* we clicked above the display region; this is * interpreted as "scroll up" request */ if (event.bstate & BUTTON1_CLICKED) res = form_driver(form, REQ_PREV_FIELD); else if (event.bstate & BUTTON1_DOUBLE_CLICKED) res = form_driver(form, REQ_PREV_PAGE); else if (event.bstate & BUTTON1_TRIPLE_CLICKED) res = form_driver(form, REQ_FIRST_FIELD); } else if (ry > sub->_begy + sub->_maxy) { /* we clicked below the display region; this is * interpreted as "scroll down" request */ if (event.bstate & BUTTON1_CLICKED) res = form_driver(form, REQ_NEXT_FIELD); else if (event.bstate & BUTTON1_DOUBLE_CLICKED) res = form_driver(form, REQ_NEXT_PAGE); else if (event.bstate & BUTTON1_TRIPLE_CLICKED) res = form_driver(form, REQ_LAST_FIELD); } else if (wenclose(sub, event.y, event.x)) { /* Inside the area we try to find the hit item */ int i; ry = event.y; rx = event.x; if (wmouse_trafo(sub, &ry, &rx, FALSE)) { int min_field = form->page[form->curpage].pmin; int max_field = form->page[form->curpage].pmax; for (i = min_field; i <= max_field; ++i) { FIELD *field = form->field[i]; if (Field_Is_Selectable(field) && Field_encloses(field, ry, rx) == E_OK) { res = _nc_Set_Current_Field(form, field); if (res == E_OK) res = _nc_Position_Form_Cursor(form); if (res == E_OK && (event.bstate & BUTTON1_DOUBLE_CLICKED)) res = E_UNKNOWN_COMMAND; break; } } } } } } else res = E_REQUEST_DENIED; } #endif /* NCURSES_MOUSE_VERSION */ else if (type == OK) { res = Data_Entry_w(form, c); } _nc_Refresh_Current_Field(form); RETURN(res); } # endif /* USE_WIDEC_SUPPORT */ /*---------------------------------------------------------------------------- Field-Buffer manipulation routines. The effects of setting a buffer are tightly coupled to the core of the form driver logic. This is especially true in the case of growable fields. So I don't separate this into a separate module. --------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_buffer(FIELD *field, | int buffer, char *value) | | Description : Set the given buffer of the field to the given value. | Buffer 0 stores the displayed content of the field. | For dynamic fields this may grow the fieldbuffers if | the length of the value exceeds the current buffer | length. For buffer 0 only printable values are allowed. | For static fields, the value needs not to be zero ter- | minated. It is copied up to the length of the buffer. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid argument | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_field_buffer(FIELD *field, int buffer, const char *value) { FIELD_CELL *p; int res = E_OK; int i; int len; #if USE_WIDEC_SUPPORT FIELD_CELL *widevalue = 0; #endif T((T_CALLED("set_field_buffer(%p,%d,%s)"), (void *)field, buffer, _nc_visbuf(value))); if (!field || !value || ((buffer < 0) || (buffer > field->nbuf))) RETURN(E_BAD_ARGUMENT); len = Buffer_Length(field); if (Growable(field)) { /* for a growable field we must assume zero terminated strings, because somehow we have to detect the length of what should be copied. */ int vlen = (int)strlen(value); if (vlen > len) { if (!Field_Grown(field, (int)(1 + (vlen - len) / ((field->rows + field->nrow) * field->cols)))) RETURN(E_SYSTEM_ERROR); #if !USE_WIDEC_SUPPORT len = vlen; #endif } } p = Address_Of_Nth_Buffer(field, buffer); #if USE_WIDEC_SUPPORT /* * Use addstr's logic for converting a string to an array of cchar_t's. * There should be a better way, but this handles nonspacing characters * and other special cases that we really do not want to handle here. */ #if NCURSES_EXT_FUNCS if (wresize(field->working, 1, Buffer_Length(field) + 1) == ERR) #endif { delwin(field->working); field->working = newpad(1, Buffer_Length(field) + 1); } len = Buffer_Length(field); wclear(field->working); (void)mvwaddstr(field->working, 0, 0, value); if ((widevalue = typeCalloc(FIELD_CELL, len + 1)) == 0) { RETURN(E_SYSTEM_ERROR); } else { for (i = 0; i < field->drows; ++i) { (void)mvwin_wchnstr(field->working, 0, (int)i * field->dcols, widevalue + ((int)i * field->dcols), field->dcols); } for (i = 0; i < len; ++i) { if (CharEq(myZEROS, widevalue[i])) { while (i < len) p[i++] = myBLANK; break; } p[i] = widevalue[i]; } free(widevalue); } #else for (i = 0; i < len; ++i) { if (value[i] == '\0') { while (i < len) p[i++] = myBLANK; break; } p[i] = value[i]; } #endif if (buffer == 0) { int syncres; if (((syncres = Synchronize_Field(field)) != E_OK) && (res == E_OK)) res = syncres; if (((syncres = Synchronize_Linked_Fields(field)) != E_OK) && (res == E_OK)) res = syncres; } RETURN(res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : char *field_buffer(const FIELD *field,int buffer) | | Description : Return the address of the buffer for the field. | | Return Values : Pointer to buffer or NULL if arguments were invalid. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(char *) field_buffer(const FIELD *field, int buffer) { char *result = 0; T((T_CALLED("field_buffer(%p,%d)"), (const void *)field, buffer)); if (field && (buffer >= 0) && (buffer <= field->nbuf)) { #if USE_WIDEC_SUPPORT FIELD_CELL *data = Address_Of_Nth_Buffer(field, buffer); size_t need = 0; int size = Buffer_Length(field); int n; /* determine the number of bytes needed to store the expanded string */ for (n = 0; n < size; ++n) { if (!isWidecExt(data[n]) && data[n].chars[0] != L'\0') { mbstate_t state; size_t next; init_mb(state); next = _nc_wcrtomb(0, data[n].chars[0], &state); if (next > 0) need += next; } } /* allocate a place to store the expanded string */ if (field->expanded[buffer] != 0) free(field->expanded[buffer]); field->expanded[buffer] = typeMalloc(char, need + 1); /* * Expand the multibyte data. * * It may also be multi-column data. In that case, the data for a row * may be null-padded to align to the dcols/drows layout (or it may * contain embedded wide-character extensions). Change the null-padding * to blanks as needed. */ if ((result = field->expanded[buffer]) != 0) { wclear(field->working); wmove(field->working, 0, 0); for (n = 0; n < size; ++n) { if (!isWidecExt(data[n]) && data[n].chars[0] != L'\0') wadd_wch(field->working, &data[n]); } wmove(field->working, 0, 0); winnstr(field->working, result, (int)need); } #else result = Address_Of_Nth_Buffer(field, buffer); #endif } returnPtr(result); } #if USE_WIDEC_SUPPORT /*--------------------------------------------------------------------------- | Convert a multibyte string to a wide-character string. The result must be | freed by the caller. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(wchar_t *) _nc_Widen_String(char *source, int *lengthp) { wchar_t *result = 0; wchar_t wch; size_t given = strlen(source); size_t tries; int pass; int status; #ifndef state_unused mbstate_t state; #endif for (pass = 0; pass < 2; ++pass) { unsigned need = 0; size_t passed = 0; while (passed < given) { bool found = FALSE; for (tries = 1, status = 0; tries <= (given - passed); ++tries) { int save = source[passed + tries]; source[passed + tries] = 0; reset_mbytes(state); status = check_mbytes(wch, source + passed, tries, state); source[passed + tries] = (char)save; if (status > 0) { found = TRUE; break; } } if (found) { if (pass) { result[need] = wch; } passed += (size_t) status; ++need; } else { if (pass) { result[need] = (wchar_t)source[passed]; } ++need; ++passed; } } if (!pass) { if (!need) break; result = typeCalloc(wchar_t, need); *lengthp = (int)need; if (result == 0) break; } } return result; } #endif /* frm_driver.c ends here */ ncurses-6.0-20160213/form/fty_num.c0000644000175100001440000002230611721407247015254 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /*************************************************************************** * * * Author : Juergen Pfeifer * * * ***************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fty_num.c,v 1.29 2012/02/23 10:02:15 tom Exp $") #if HAVE_LOCALE_H #include #endif #if HAVE_LOCALE_H #define isDecimalPoint(c) ((c) == ((L && L->decimal_point) ? *(L->decimal_point) : '.')) #else #define isDecimalPoint(c) ((c) == '.') #endif #if USE_WIDEC_SUPPORT #define isDigit(c) (iswdigit((wint_t)(c)) || isdigit(UChar(c))) #else #define isDigit(c) isdigit(UChar(c)) #endif #define thisARG numericARG typedef struct { int precision; double low; double high; struct lconv *L; } thisARG; typedef struct { int precision; double low; double high; } thisPARM; /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Generic_This_Type(void * arg) | | Description : Allocate structure for numeric type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Generic_This_Type(void *arg) { thisARG *argn = (thisARG *) 0; thisPARM *args = (thisPARM *) arg; if (args) { argn = typeMalloc(thisARG, 1); if (argn) { T((T_CREATE("thisARG %p"), (void *)argn)); argn->precision = args->precision; argn->low = args->low; argn->high = args->high; #if HAVE_LOCALE_H argn->L = localeconv(); #else argn->L = NULL; #endif } } return (void *)argn; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Make_This_Type(va_list * ap) | | Description : Allocate structure for numeric type argument. | | Return Values : Pointer to argument structure or NULL on error +--------------------------------------------------------------------------*/ static void * Make_This_Type(va_list *ap) { thisPARM arg; arg.precision = va_arg(*ap, int); arg.low = va_arg(*ap, double); arg.high = va_arg(*ap, double); return Generic_This_Type((void *)&arg); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void *Copy_This_Type(const void * argp) | | Description : Copy structure for numeric type argument. | | Return Values : Pointer to argument structure or NULL on error. +--------------------------------------------------------------------------*/ static void * Copy_This_Type(const void *argp) { const thisARG *ap = (const thisARG *)argp; thisARG *result = (thisARG *) 0; if (argp) { result = typeMalloc(thisARG, 1); if (result) { T((T_CREATE("thisARG %p"), (void *)result)); *result = *ap; } } return (void *)result; } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static void Free_This_Type(void * argp) | | Description : Free structure for numeric type argument. | | Return Values : - +--------------------------------------------------------------------------*/ static void Free_This_Type(void *argp) { if (argp) free(argp); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_This_Field(FIELD * field, | const void * argp) | | Description : Validate buffer content to be a valid numeric value | | Return Values : TRUE - field is valid | FALSE - field is invalid +--------------------------------------------------------------------------*/ static bool Check_This_Field(FIELD *field, const void *argp) { const thisARG *argn = (const thisARG *)argp; double low = argn->low; double high = argn->high; int prec = argn->precision; unsigned char *bp = (unsigned char *)field_buffer(field, 0); char *s = (char *)bp; double val = 0.0; struct lconv *L = argn->L; char buf[64]; bool result = FALSE; while (*bp && *bp == ' ') bp++; if (*bp) { if (*bp == '-' || *bp == '+') bp++; #if USE_WIDEC_SUPPORT if (*bp) { bool blank = FALSE; int state = 0; int len; int n; wchar_t *list = _nc_Widen_String((char *)bp, &len); if (list != 0) { result = TRUE; for (n = 0; n < len; ++n) { if (blank) { if (list[n] != ' ') { result = FALSE; break; } } else if (list[n] == ' ') { blank = TRUE; } else if (isDecimalPoint(list[n])) { if (++state > 1) { result = FALSE; break; } } else if (!isDigit(list[n])) { result = FALSE; break; } } free(list); } } #else while (*bp) { if (!isdigit(UChar(*bp))) break; bp++; } if (isDecimalPoint(*bp)) { bp++; while (*bp) { if (!isdigit(UChar(*bp))) break; bp++; } } while (*bp && *bp == ' ') bp++; result = (*bp == '\0'); #endif if (result) { val = atof(s); if (low < high) { if (val < low || val > high) result = FALSE; } if (result) { _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "%.*f", (prec > 0 ? prec : 0), val); set_field_buffer(field, 0, buf); } } } return (result); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : static bool Check_This_Character( | int c, | const void * argp) | | Description : Check a character for the numeric type. | | Return Values : TRUE - character is valid | FALSE - character is invalid +--------------------------------------------------------------------------*/ static bool Check_This_Character(int c, const void *argp) { const thisARG *argn = (const thisARG *)argp; struct lconv *L = argn->L; return ((isDigit(c) || c == '+' || c == '-' || isDecimalPoint(c)) ? TRUE : FALSE); } static FIELDTYPE typeTHIS = { _HAS_ARGS | _RESIDENT, 1, /* this is mutable, so we can't be const */ (FIELDTYPE *)0, (FIELDTYPE *)0, Make_This_Type, Copy_This_Type, Free_This_Type, INIT_FT_FUNC(Check_This_Field), INIT_FT_FUNC(Check_This_Character), INIT_FT_FUNC(NULL), INIT_FT_FUNC(NULL), #if NCURSES_INTEROP_FUNCS Generic_This_Type #endif }; NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_NUMERIC = &typeTHIS; #if NCURSES_INTEROP_FUNCS /* The next routines are to simplify the use of ncurses from programming languages with restictions on interop with C level constructs (e.g. variable access or va_list + ellipsis constructs) */ NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_NUMERIC(void) { return TYPE_NUMERIC; } #endif /* fty_num.c ends here */ ncurses-6.0-20160213/form/llib-lformtw0000644000175100001440000003703312563672505015775 0ustar tomusers/**************************************************************************** * Copyright (c) 2010-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2010-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./f_trace.c */ #include #undef _nc_retrace_field_ptr FIELD **_nc_retrace_field_ptr( FIELD **code) { return(*(FIELD ***)0); } #undef _nc_retrace_field FIELD *_nc_retrace_field( FIELD *code) { return(*(FIELD **)0); } #undef _nc_retrace_field_type FIELDTYPE *_nc_retrace_field_type( FIELDTYPE *code) { return(*(FIELDTYPE **)0); } #undef _nc_retrace_form FORM *_nc_retrace_form( FORM *code) { return(*(FORM **)0); } #undef _nc_retrace_form_hook Form_Hook _nc_retrace_form_hook( Form_Hook code) { return(*(Form_Hook *)0); } /* ./fld_arg.c */ #undef set_fieldtype_arg int set_fieldtype_arg( FIELDTYPE *typ, void *(*const make_arg)( va_list *p1), void *(*const copy_arg)( const void *p1), void (*const free_arg)( void *p1)) { return(*(int *)0); } #undef field_arg void *field_arg( const FIELD *field) { return(*(void **)0); } /* ./fld_attr.c */ #undef set_field_fore int set_field_fore( FIELD *field, chtype attr) { return(*(int *)0); } #undef field_fore chtype field_fore( const FIELD *field) { return(*(chtype *)0); } #undef set_field_back int set_field_back( FIELD *field, chtype attr) { return(*(int *)0); } #undef field_back chtype field_back( const FIELD *field) { return(*(chtype *)0); } /* ./fld_current.c */ #undef set_current_field int set_current_field( FORM *form, FIELD *field) { return(*(int *)0); } #undef current_field FIELD *current_field( const FORM *form) { return(*(FIELD **)0); } #undef field_index int field_index( const FIELD *field) { return(*(int *)0); } /* ./fld_def.c */ #undef _nc_Default_Field FIELD *_nc_Default_Field; #undef _nc_Make_Argument TypeArgument *_nc_Make_Argument( const FIELDTYPE *typ, va_list *ap, int *err) { return(*(TypeArgument **)0); } #undef _nc_Copy_Argument TypeArgument *_nc_Copy_Argument( const FIELDTYPE *typ, const TypeArgument *argp, int *err) { return(*(TypeArgument **)0); } #undef _nc_Free_Argument void _nc_Free_Argument( const FIELDTYPE *typ, TypeArgument *argp) { /* void */ } #undef _nc_Copy_Type NCURSES_BOOL _nc_Copy_Type( FIELD *dst, FIELD const *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_Free_Type void _nc_Free_Type( FIELD *field) { /* void */ } #undef new_field FIELD *new_field( int rows, int cols, int frow, int fcol, int nrow, int nbuf) { return(*(FIELD **)0); } #undef free_field int free_field( FIELD *field) { return(*(int *)0); } /* ./fld_dup.c */ #undef dup_field FIELD *dup_field( FIELD *field, int frow, int fcol) { return(*(FIELD **)0); } /* ./fld_ftchoice.c */ #undef set_fieldtype_choice int set_fieldtype_choice( FIELDTYPE *typ, NCURSES_BOOL (*const next_choice)( FIELD *p1, const void *p2), NCURSES_BOOL (*const prev_choice)( FIELD *p1, const void *p2)) { return(*(int *)0); } /* ./fld_ftlink.c */ #undef link_fieldtype FIELDTYPE *link_fieldtype( FIELDTYPE *type1, FIELDTYPE *type2) { return(*(FIELDTYPE **)0); } /* ./fld_info.c */ #undef field_info int field_info( const FIELD *field, int *rows, int *cols, int *frow, int *fcol, int *nrow, int *nbuf) { return(*(int *)0); } #undef dynamic_field_info int dynamic_field_info( const FIELD *field, int *drows, int *dcols, int *maxgrow) { return(*(int *)0); } /* ./fld_just.c */ #undef set_field_just int set_field_just( FIELD *field, int just) { return(*(int *)0); } #undef field_just int field_just( const FIELD *field) { return(*(int *)0); } /* ./fld_link.c */ #undef link_field FIELD *link_field( FIELD *field, int frow, int fcol) { return(*(FIELD **)0); } /* ./fld_max.c */ #undef set_max_field int set_max_field( FIELD *field, int maxgrow) { return(*(int *)0); } /* ./fld_move.c */ #undef move_field int move_field( FIELD *field, int frow, int fcol) { return(*(int *)0); } /* ./fld_newftyp.c */ #undef _nc_Default_FieldType FIELDTYPE *_nc_Default_FieldType; #undef new_fieldtype FIELDTYPE *new_fieldtype( NCURSES_BOOL (*const field_check)( FIELD *p1, const void *p2), NCURSES_BOOL (*const char_check)( int p1, const void *p2)) { return(*(FIELDTYPE **)0); } #undef free_fieldtype int free_fieldtype( FIELDTYPE *typ) { return(*(int *)0); } /* ./fld_opts.c */ #undef set_field_opts int set_field_opts( FIELD *field, Field_Options opts) { return(*(int *)0); } #undef field_opts Field_Options field_opts( const FIELD *field) { return(*(Field_Options *)0); } #undef field_opts_on int field_opts_on( FIELD *field, Field_Options opts) { return(*(int *)0); } #undef field_opts_off int field_opts_off( FIELD *field, Field_Options opts) { return(*(int *)0); } /* ./fld_pad.c */ #undef set_field_pad int set_field_pad( FIELD *field, int ch) { return(*(int *)0); } #undef field_pad int field_pad( const FIELD *field) { return(*(int *)0); } /* ./fld_page.c */ #undef set_new_page int set_new_page( FIELD *field, NCURSES_BOOL new_page_flag) { return(*(int *)0); } #undef new_page NCURSES_BOOL new_page( const FIELD *field) { return(*(NCURSES_BOOL *)0); } /* ./fld_stat.c */ #undef set_field_status int set_field_status( FIELD *field, NCURSES_BOOL status) { return(*(int *)0); } #undef field_status NCURSES_BOOL field_status( const FIELD *field) { return(*(NCURSES_BOOL *)0); } /* ./fld_type.c */ #undef set_field_type int set_field_type( FIELD *field, FIELDTYPE *type, ...) { return(*(int *)0); } #undef field_type FIELDTYPE *field_type( const FIELD *field) { return(*(FIELDTYPE **)0); } /* ./fld_user.c */ #undef set_field_userptr int set_field_userptr( FIELD *field, void *usrptr) { return(*(int *)0); } #undef field_userptr void *field_userptr( const FIELD *field) { return(*(void **)0); } /* ./frm_cursor.c */ #undef pos_form_cursor int pos_form_cursor( FORM *form) { return(*(int *)0); } /* ./frm_data.c */ #undef data_behind NCURSES_BOOL data_behind( const FORM *form) { return(*(NCURSES_BOOL *)0); } #undef data_ahead NCURSES_BOOL data_ahead( const FORM *form) { return(*(NCURSES_BOOL *)0); } /* ./frm_def.c */ #undef _nc_Default_Form FORM *_nc_Default_Form; #undef new_form_sp FORM *new_form_sp( SCREEN *sp, FIELD **fields) { return(*(FORM **)0); } #undef new_form FORM *new_form( FIELD **fields) { return(*(FORM **)0); } #undef free_form int free_form( FORM *form) { return(*(int *)0); } #undef set_form_fields int set_form_fields( FORM *form, FIELD **fields) { return(*(int *)0); } #undef form_fields FIELD **form_fields( const FORM *form) { return(*(FIELD ***)0); } #undef field_count int field_count( const FORM *form) { return(*(int *)0); } /* ./frm_driver.c */ #undef _nc_get_fieldbuffer void _nc_get_fieldbuffer( FORM *form, FIELD *field, cchar_t *buf) { /* void */ } #undef _nc_Position_Form_Cursor int _nc_Position_Form_Cursor( FORM *form) { return(*(int *)0); } #undef _nc_Refresh_Current_Field int _nc_Refresh_Current_Field( FORM *form) { return(*(int *)0); } #undef _nc_Synchronize_Attributes int _nc_Synchronize_Attributes( FIELD *field) { return(*(int *)0); } #undef _nc_Synchronize_Options int _nc_Synchronize_Options( FIELD *field, Field_Options newopts) { return(*(int *)0); } #undef _nc_Set_Current_Field int _nc_Set_Current_Field( FORM *form, FIELD *newfield) { return(*(int *)0); } #undef _nc_Internal_Validation NCURSES_BOOL _nc_Internal_Validation( FORM *form) { return(*(NCURSES_BOOL *)0); } #undef _nc_First_Active_Field FIELD *_nc_First_Active_Field( FORM *form) { return(*(FIELD **)0); } #undef _nc_Set_Form_Page int _nc_Set_Form_Page( FORM *form, int page, FIELD *field) { return(*(int *)0); } typedef struct { int keycode; int (*cmd) (FORM *); } Binding_Info; #undef form_driver int form_driver( FORM *form, int c) { return(*(int *)0); } #undef form_driver_w int form_driver_w( FORM *form, int type, wchar_t c) { return(*(int *)0); } #undef set_field_buffer int set_field_buffer( FIELD *field, int buffer, const char *value) { return(*(int *)0); } #undef field_buffer char *field_buffer( const FIELD *field, int buffer) { return(*(char **)0); } #undef _nc_Widen_String wchar_t *_nc_Widen_String( char *source, int *lengthp) { return(*(wchar_t **)0); } /* ./frm_hook.c */ #undef set_field_init int set_field_init( FORM *form, Form_Hook func) { return(*(int *)0); } #undef field_init Form_Hook field_init( const FORM *form) { return(*(Form_Hook *)0); } #undef set_field_term int set_field_term( FORM *form, Form_Hook func) { return(*(int *)0); } #undef field_term Form_Hook field_term( const FORM *form) { return(*(Form_Hook *)0); } #undef set_form_init int set_form_init( FORM *form, Form_Hook func) { return(*(int *)0); } #undef form_init Form_Hook form_init( const FORM *form) { return(*(Form_Hook *)0); } #undef set_form_term int set_form_term( FORM *form, Form_Hook func) { return(*(int *)0); } #undef form_term Form_Hook form_term( const FORM *form) { return(*(Form_Hook *)0); } /* ./frm_opts.c */ #undef set_form_opts int set_form_opts( FORM *form, Form_Options opts) { return(*(int *)0); } #undef form_opts Form_Options form_opts( const FORM *form) { return(*(Form_Options *)0); } #undef form_opts_on int form_opts_on( FORM *form, Form_Options opts) { return(*(int *)0); } #undef form_opts_off int form_opts_off( FORM *form, Form_Options opts) { return(*(int *)0); } /* ./frm_page.c */ #undef set_form_page int set_form_page( FORM *form, int page) { return(*(int *)0); } #undef form_page int form_page( const FORM *form) { return(*(int *)0); } /* ./frm_post.c */ #undef post_form int post_form( FORM *form) { return(*(int *)0); } #undef unpost_form int unpost_form( FORM *form) { return(*(int *)0); } /* ./frm_req_name.c */ #undef form_request_name const char *form_request_name( int request) { return(*(const char **)0); } #undef form_request_by_name int form_request_by_name( const char *str) { return(*(int *)0); } /* ./frm_scale.c */ #undef scale_form int scale_form( const FORM *form, int *rows, int *cols) { return(*(int *)0); } /* ./frm_sub.c */ #undef set_form_sub int set_form_sub( FORM *form, WINDOW *win) { return(*(int *)0); } #undef form_sub WINDOW *form_sub( const FORM *form) { return(*(WINDOW **)0); } /* ./frm_user.c */ #undef set_form_userptr int set_form_userptr( FORM *form, void *usrptr) { return(*(int *)0); } #undef form_userptr void *form_userptr( const FORM *form) { return(*(void **)0); } /* ./frm_win.c */ #undef set_form_win int set_form_win( FORM *form, WINDOW *win) { return(*(int *)0); } #undef form_win WINDOW *form_win( const FORM *form) { return(*(WINDOW **)0); } /* ./fty_alnum.c */ typedef struct { int width; } alnumARG; #undef TYPE_ALNUM FIELDTYPE *TYPE_ALNUM; #undef _nc_TYPE_ALNUM FIELDTYPE *_nc_TYPE_ALNUM(void) { return(*(FIELDTYPE **)0); } /* ./fty_alpha.c */ typedef struct { int width; } alphaARG; #undef TYPE_ALPHA FIELDTYPE *TYPE_ALPHA; #undef _nc_TYPE_ALPHA FIELDTYPE *_nc_TYPE_ALPHA(void) { return(*(FIELDTYPE **)0); } /* ./fty_enum.c */ typedef struct { char **kwds; int count; NCURSES_BOOL checkcase; NCURSES_BOOL checkunique; } enumARG; typedef struct { char **kwds; int ccase; int cunique; } enumParams; #undef TYPE_ENUM FIELDTYPE *TYPE_ENUM; #undef _nc_TYPE_ENUM FIELDTYPE *_nc_TYPE_ENUM(void) { return(*(FIELDTYPE **)0); } /* ./fty_generic.c */ #undef _nc_generic_fieldtype FIELDTYPE *_nc_generic_fieldtype( NCURSES_BOOL (*const field_check)( FORM *p1, FIELD *p2, const void *p3), NCURSES_BOOL (*const char_check)( int p1, FORM *p2, FIELD *p3, const void *p4), NCURSES_BOOL (*const next)( FORM *p1, FIELD *p2, const void *p3), NCURSES_BOOL (*const prev)( FORM *p1, FIELD *p2, const void *p3), void (*freecallback)( void *p1)) { return(*(FIELDTYPE **)0); } #undef _nc_set_generic_fieldtype int _nc_set_generic_fieldtype( FIELD *field, FIELDTYPE *ftyp, int (*argiterator)( void **p1)) { return(*(int *)0); } #undef _nc_form_cursor WINDOW *_nc_form_cursor( const FORM *form, int *pRow, int *pCol) { return(*(WINDOW **)0); } /* ./fty_int.c */ typedef struct { int precision; long low; long high; } integerARG; typedef struct { int precision; long low; long high; } integerPARM; #undef TYPE_INTEGER FIELDTYPE *TYPE_INTEGER; #undef _nc_TYPE_INTEGER FIELDTYPE *_nc_TYPE_INTEGER(void) { return(*(FIELDTYPE **)0); } /* ./fty_ipv4.c */ #undef TYPE_IPV4 FIELDTYPE *TYPE_IPV4; #undef _nc_TYPE_IPV4 FIELDTYPE *_nc_TYPE_IPV4(void) { return(*(FIELDTYPE **)0); } /* ./fty_num.c */ typedef struct { int precision; double low; double high; struct lconv *L; } numericARG; typedef struct { int precision; double low; double high; } thisPARM; #undef TYPE_NUMERIC FIELDTYPE *TYPE_NUMERIC; #undef _nc_TYPE_NUMERIC FIELDTYPE *_nc_TYPE_NUMERIC(void) { return(*(FIELDTYPE **)0); } /* ./fty_regex.c */ typedef struct { regex_t *pRegExp; unsigned long *refCount; } RegExp_Arg; #undef TYPE_REGEXP FIELDTYPE *TYPE_REGEXP; #undef _nc_TYPE_REGEXP FIELDTYPE *_nc_TYPE_REGEXP(void) { return(*(FIELDTYPE **)0); } ncurses-6.0-20160213/form/fld_type.c0000644000175100001440000001020711326663274015403 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: fld_type.c,v 1.16 2010/01/23 21:14:36 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_field_type(FIELD *field, FIELDTYPE *type,...) | | Description : Associate the specified fieldtype with the field. | Certain field types take additional arguments. Look | at the spec of the field types ! | | Return Values : E_OK - success | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) set_field_type(FIELD *field, FIELDTYPE *type,...) { va_list ap; int res = E_SYSTEM_ERROR; int err = 0; T((T_CALLED("set_field_type(%p,%p)"), (void *)field, (void *)type)); va_start(ap, type); Normalize_Field(field); _nc_Free_Type(field); field->type = type; field->arg = (void *)_nc_Make_Argument(field->type, &ap, &err); if (err) { _nc_Free_Argument(field->type, (TypeArgument *)(field->arg)); field->type = (FIELDTYPE *)0; field->arg = (void *)0; } else { res = E_OK; if (field->type) field->type->ref++; } va_end(ap); RETURN(res); } /*--------------------------------------------------------------------------- | Facility : libnform | Function : FIELDTYPE *field_type(const FIELD *field) | | Description : Retrieve the associated fieldtype for this field. | | Return Values : Pointer to fieldtype of NULL if none is defined. +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELDTYPE *) field_type(const FIELD *field) { T((T_CALLED("field_type(%p)"), (const void *)field)); returnFieldType(Normalize_Field(field)->type); } /* fld_type.c ends here */ ncurses-6.0-20160213/form/frm_scale.c0000644000175100001440000000637511326663274015543 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" MODULE_ID("$Id: frm_scale.c,v 1.10 2010/01/23 21:14:36 tom Exp $") /*--------------------------------------------------------------------------- | Facility : libnform | Function : int scale_form( const FORM *form, int *rows, int *cols ) | | Description : Retrieve size of form | | Return Values : E_OK - no error | E_BAD_ARGUMENT - invalid form pointer | E_NOT_CONNECTED - no fields connected to form +--------------------------------------------------------------------------*/ NCURSES_EXPORT(int) scale_form(const FORM *form, int *rows, int *cols) { T((T_CALLED("scale_form(%p,%p,%p)"), (const void *)form, (void *)rows, (void *)cols)); if (!form) RETURN(E_BAD_ARGUMENT); if (!(form->field)) RETURN(E_NOT_CONNECTED); if (rows) *rows = form->rows; if (cols) *cols = form->cols; RETURN(E_OK); } /* frm_scale.c ends here */ ncurses-6.0-20160213/README.MinGW0000644000175100001440000001470412027374534014331 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 2008-2011,2012 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README.MinGW,v 1.9 2012/09/22 17:46:04 tom Exp $ -- Author: Juergen Pfeifer ------------------------------------------------------------------------------- This is work in progress, but it's in an state where one can see it works at least on the Windows Console. You should install the MSYS package, so that you've a shell environment that allows you to run the scripts, especially configure etc. You can get that from http://www.mingw.org To build ncurses for native Windows, you need the MinGW toolchain. The original MinGW toolchain from the above site is only for 32-Bit Windows. As Windows Server - and also regular workstations - are moving to 64-Bit, it seems to be reasonable to have a toolchain that supports both architectures. I recommend to use the TDM gcc toolchain which you can find at http://tdm-gcc.tdragon.net/download. Go to the download section and select the bundle installer for tdm64 (MinGW-w64). This installs a multilib version of the gcc toolchain that can compile for native 32- and 64-Bit Windows versions. It also comes with a working pthread implementation. The latest config and build scripts we use for MinGW have only been tested for the gcc-4.6.1 compiler toolchain (or better). Using MinGW is a pragmatic decision, it's the easiest way to port this heavily UNIX based sourcebase to native Windows. The goal is of course to provide the includes, libraries and DLLs to be used with the more common traditional development environments on Windows, mainly with Microsoft Visual Studio. The TERM environment variable must be set specially to active the Windows console-driver. The driver checks if TERM is set to "#win32con" (explicit use) or if TERM is unset or empty (implicit). Please also make sure that MSYS links to the correct directory containing your MinGW toolchain. For TDM this is usually C:\MinGW64. In your Windows CMD.EXE command shell go to the MSYS root directory (most probably C:\MSYS or C:\MSYS\1.0) and verify, that there is a junction point mingw that points to the MinGW toolchain directory. If not, delete the mingw directory and use the mklink command (or the linkd.exe utility on older Windows) to create the junction point. This code requires WindowsNT 5.1 or better, which means on the client Windows XP or better, on the server Windows Server 2003 or better. I recommend using libtool to build ncurses on MinGW, because libtool knows exactly how to build dll's on Windows for use with MinGW. To build a modern but still small footprint ncurses that provides hooks for interop, I recommend using these options: --with-libtool --disable-home-terminfo --enable-database --disable-termcap --enable-sp-funcs --enable-term-driver --enable-interop This is the configuration commandline as I'm using it at the moment (assuming environment variable MINGW_ROOT to hold the root directory name of your MinGW build): ./configure \ --prefix=$MINGW_ROOT \ --with-cxx \ --without-ada \ --enable-warnings \ --enable-assertions \ --disable-home-terminfo \ --enable-database \ --enable-sp-funcs \ --enable-term-driver \ --enable-interop \ --disable-termcap \ --with-progs \ --with-libtool \ --enable-pc-files \ --mandir=$MINGW_ROOT/share/man Please note that it is also necessary to set this environment variable: export PATH_SEPARATOR=";" in order to parse the terminfo paths correctly. Terminfo paths should always be separated by a seeeemicolon,even when running under MSYS. To support regular expressions properly, ncurses under MinGW should be linked against the gnurx regex library, which must be built separately under MinGW. See ftp.gnome.org/pub/GNOME/binaries/win32/dependencies/libgnurx-src-2.5.zip All the options above are - like the whole Windows support - experimental. A lot is still TODO, e.g.: - Wide Character support (display is workable, but input untested) The Win32Con driver should actually only use Unicode in the future. - Thread support (locking). If using TDM toolchain this is done by configuring pthreads. - A GUI console driver - Support for Terminals attached via a serial port (via terminfo) - Support for networked Terminal connections (via terminfo) - Workarounds for MinGW's filesystem access are necessary to make infocmp work (though tic works). To support terminfo, we would need to have an ioctl() simulation for the serial and networked terminals. ncurses-6.0-20160213/TO-DO0000644000175100001440000002266311543752346013244 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: TO-DO,v 1.57 2011/03/28 00:23:02 tom Exp $ ------------------------------------------------------------------------------- SHORT-TERM TO-DO ITEMS: Known Problems: + libtool does not work with GNAT. + The screen optimization has been tested only in an ad hoc manner. We should develop a good set of regression tests to cover lib_doupdate.c and lib_mvcur.c. + Magic cookie support (for nonzero xmc values) does not work, since the logic does not take into account refresh. Also, the initial optimize does not adjust the current location when a cookie is emitted. + Scrolling optimization has holes: for example, it forces repaints of the screen between calls to refresh(). + SVr4 uses slightly different rules for determining when softkeys are shown. For example, they are initially displayed (before the ncurses 'e' test activates them), and a touchwin can apparently also force them to be displayed. + The code departs from perfect 8-bit cleanness in one respect; you cannot specify a character \200 as part of a capability string, because the terminfo library interprets \200 as a request to embed NUL (\000) at that point. This is a legacy terminfo property we can't mess with. + The window classes defined in the c++ subdirectory need documentation. Some C++ programmer could earn a lot of good karma by doing this... + vid_attr() should support the set_a_attributes (sgr1) string, but does not. There appear to be no terminals that require that functionality. + the configure --disable-ext-funcs option does not work for Ada95 tree. + the --with-pthread configuration builds for Cygwin, but does not work properly (test/worm.c shows all of the worms in the same location). + the --enable-rpath configure option builds for the corresponding platforms; however combining it with --with-ticlib and --with-termlib does not always produce libraries that can be run without setting environment variables. Building those with libtool does not work either. (This is a problem with the BSD platforms). + more work is needed to make the MinGW port support ordinary terminals. Portability (or lack thereof): + Users of older System V UNIXes (but not Solaris, and probably not SVr4) may trip over a known problem with the signal-handling code which causes abrupt termination of ncurses applications following resume from a ^Z suspend (this problem was first seen running lynx). You will not see this problem if you are using one of the 4.4BSD derivatives like such as, NetBSD, or BSDI, or systems using that convention. For details, see the analysis in the header comment of ncurses/tty/lib_tstp.c . + In theory, vwprintw and vwscanf are supposed to use the older varargs.h interface for handling variadic argument lists (and are deprecated by X/Open for that reason). Many newer systems do no have varargs.h, instead they have only the newer X/Open-standard stdargs.h equivalent. So these functions use stdargs instead. This is unlikely to be a problem unless you're building ncurses on a System V old enough to only have varargs.h. (Solaris 2.5.1 used the stdarg.h binding as well). + If you're using a system old enough not to have a native vsscanf(3) in its library, vwscanw() will not work. If you want to fix this, add an implementation to ncurses/vsscanf.c. + The C++ binding fails to build with a few C++ compilers. + terminfo.5 does not format with the SunOS (and most other platform's) tbl utility because it relies on a diversion for each table entry. Get the groff package. Untested features: + The code for the HP color model using set_color_pair is untested. + The code for handling soft labels on a terminal type with built-in support for them (num_labels > 0, label_height, label_width, label_format, label_off, label_on, plab_norm, lab_f*) has not been tested. The label_format and lab_f* capabilities aren't presently used. LONGER-TERM TO-DO ITEMS: 1. Extended COSE conformance There is an XPG4 standard released in 1996 which describes a superset of the SVr4 API. The library is BASE conformant with this standard. We would like to make ncurses fully conformant at the EXTENDED level supporting internationalization. 2. DOS port Only a few of the files in the library depend on the terminfo format. It should be possible to further kernelize the package, then rewrite a small number of core files to produce a functionally-compatible port that would do updates to a memory-mapped screen area. The first result of this would be a DOS port. 3. X port It would be nice if ncurses could recognize when it was running under X and maintain its own window. With this feature, all ncurses programs would automatically become X programs. The challenge is to handle resize events properly. 4. Unused capabilities The currently unused capabilities fall naturally into several groups: A. Status-line capabilities: Booleans: has_status_line, status_line_esc_ok. Numerics: width_status_line. Strings: dis_status_line, from_status_line, to_status_line. System V Release 1 curses made no use of these at all. SVr4's use, if any, is unknown. From the AT&T termcap file it looks like curses, in general, shouldn't use them; terminal variants with status lines have their line count decremented by 1, suggesting that curses is supposed to leave the status line alone. B. Printer capabilities: Boolean: col_addr_glitch, cr_cancels_micro_mode, has_print_wheel, row_addr_glitch, semi_auto_right_margin, cpi_changes_res, lpi_changes_res. Numeric: buffer_capacity, dot_horz_spacing, dot_vert_spacing, max_micro_address, max_micro_jump, micro_col_size, micro_line_size, number_of_pins, output_res_char, output_res_line, output_res_horz_inch, print_rate, wide_char_size, bit_image_entwining, bit_image_type. String: down_half_line, form_feed, up_half_line, set_left_margin, set_right_margin, clear_margins, change_char_pitch ... set_page_length (all the SVr4 printer caps), Curses doesn't use these. C. Printer-control capabilities: Boolean: prtr_silent. Strings: print_screen, prtr_on, prtr_off, prtr_non. Curses doesn't use these. D. Dialer strings: Strings: hangup, dial_phone, quick_dial, tone, pulse, flash_hook, fixed_pause, wait_tone. Curses doesn't use these. E. Window and virtual-terminal capabilities: Numerics: maximum_windows, virtual_terminal. Strings: req_for_input, create_window, goto_window, set_window. These seem to be fossils from some AT&T experiments on character-based window systems that never escaped the lab. The virtual_terminal cap had something to do with building terminal emulations into tty line disciplines. F. Unused VDT capabilities: Booleans: erase_overstrike, has_meta_key, insert_null_glitch, move_insert, dest_tabs_magic_smso, transparent_underline, needs_xon_xoff, hard_cursor. Numerics: lines_of_memory, buttons. Strings: pkey_key, pkey_local, pkey_xmit, underline_char, enter_xon_mode, exit_xon_mode, xon_character, xoff_character, display_clock, remove_clock, user[0-5], display_pc_char, enter_scancode_mode, exit_scancode_mode, pc_term_options, scancode_escape, alt_scancode_esc. These are the potentially important ones for ncurses. Notes: i) ncurses doesn't need move_insert; it never uses cup/hpa/vpa while insert_mode is on. ii) We probably don't care about dest_tabs_magic_smso; only Telerays used it and they're all long obsolete. -- vile:txtmode ncurses-6.0-20160213/README0000644000175100001440000002374412011536156013346 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README,v 1.25 2012/08/11 20:11:26 tom Exp $ ------------------------------------------------------------------------------- README file for the ncurses package See the file ANNOUNCE for a summary of ncurses features and ports. See the file INSTALL for instructions on how to build and install ncurses. See the file NEWS for a release history and bug-fix notes. See the file TO-DO for things that still need doing, including known bugs. Browse the file misc/ncurses-intro.html for narrative descriptions of how to use ncurses and the panel, menu, and form libraries. Browse the file doc/html/hackguide.html for a tour of the package internals. ROADMAP AND PACKAGE OVERVIEW: You should be reading this file in a directory called: ncurses-d.d, where d.d is the current version number (see the dist.mk file in this directory for that). There should be a number of subdirectories, including `c++', `form', `man', `menu', `misc', `ncurses', `panel', `progs', `test', 'tack' and `Ada95'. (The 'tack' program may be distributed separately). A full build/install of this package typically installs several libraries, a handful of utilities, and a database hierarchy. Here is an inventory of the pieces: The libraries are: libncurses.a (normal) libncurses.so (shared) libncurses_g.a (debug and trace code enabled) libncurses_p.a (profiling enabled) libpanel.a (normal) libpanel.so (shared) libpanel_g.a (debug and trace code enabled) libmenu.a (normal) libmenu.so (shared) libmenu_g.a (debug enabled) libform.a (normal) libform.so (shared) libform_g.a (debug enabled) If you configure using the --enable-widec option, a "w" is appended to the library names (e.g., libncursesw.a), and the resulting libraries support wide-characters, e.g., via a UTF-8 locale. The corresponding header files are compatible with the non-wide-character configuration; wide-character features are provided by ifdef's in the header files. The wide-character library interfaces are not binary-compatible with the non-wide-character version. If you configure using the --enable-reentrant option, a "t" is appended to the library names (e.g., libncursest.a) and the resulting libraries have a different binary interface which makes the ncurses interface more "opaque". The ncurses libraries implement the curses API. The panel, menu and forms libraries implement clones of the SVr4 panel, menu and forms APIs. The source code for these lives in the `ncurses', `panel', `menu', and `form' directories respectively. In the `c++' directory, you'll find code that defines an interface to the curses, forms, menus and panels library packaged as C++ classes, and a demo program in C++ to test it. These class definition modules are not installed by the 'make install.libs' rule as libncurses++. In the `Ada95' directory, you'll find code and documentation for an Ada95 binding of the curses API, to be used with the GNAT compiler. This binding is built by a normal top-level `make' if configure detects an usable version of GNAT (3.11 or above). It is not installed automatically. See the Ada95 directory for more build and installation instructions and for documentation of the binding. To do its job, the ncurses code needs your terminal type to be set in the environment variable TERM (normally set by your OS; under UNIX, getty(1) typically does this, but you can override it in your .profile); and, it needs a database of terminal descriptions in which to look up your terminal type's capabilities. In older (V7/BSD) versions of curses, the database was a flat text file, /etc/termcap; in newer (USG/USL) versions, the database is a hierarchy of fast-loading binary description blocks under /usr/lib/terminfo. These binary blocks are compiled from an improved editable text representation called `terminfo' format (documented in man/terminfo.5). The ncurses library can use either /etc/termcap or the compiled binary terminfo blocks, but prefers the second form. In the `misc' directory, there is a text file terminfo.src, in editable terminfo format, which can be used to generate the terminfo binaries (that's what make install.data does). If the package was built with the --enable-termcap option enabled, and the ncurses library cannot find a terminfo description for your terminal, it will fall back to the termcap file supplied with your system (which the ncurses package installation leaves strictly alone). The utilities are as follows: tic -- terminfo source to binary compiler infocmp -- terminfo binary to source decompiler/comparator clear -- emits clear-screen for current terminal tabs -- set tabs on a terminal tput -- shell-script access to terminal capabilities. toe -- table of entries utility tset -- terminal-initialization utility The first two (tic and infocmp) are used for manipulating terminfo descriptions; the next two (clear and tput) are for use in shell scripts. The last (tset) is provided for 4.4BSD compatibility. The source code for all of these lives in the `progs' directory. Detailed documentation for all libraries and utilities can be found in the `man' and `doc' directories. An HTML introduction to ncurses, panels, and menus programming lives in the `doc/html' directory. Manpages in HTML format are under `doc/html/man'. The `test' directory contains programs that can be used to verify or demonstrate the functions of the ncurses libraries. See test/README for descriptions of these programs. Notably, the `ncurses' utility is designed to help you systematically exercise the library functions. AUTHORS: Pavel Curtis: wrote the original ncurses Zeyd M. Ben-Halim: port of original to Linux and many enhancements. Thomas Dickey (maintainer for 1.9.9g through 4.1, resuming with FSF's 5.0): configuration scripts, porting, mods to adhere to XSI Curses in the areas of background color, terminal modes. Also memory leak testing, the wresize, default colors and key definition extensions and numerous bug fixes -- more than half of those enumerated in NEWS beginning with the internal release 1.8.9, see http://invisible-island.net/personal/changelogs.html Florian La Roche (official maintainer for FSF's ncurses 4.2) Beginning with release 4.2, ncurses is distributed under an MIT-style license. Eric S. Raymond: the man pages, infocmp(1), tput(1), clear(1), captoinfo(1), tset(1), toe(1), most of tic(1), trace levels, the HTML intro, wgetnstr() and many other entry points, the cursor-movement optimization, the scroll-pack optimizer for vertical motions, the mouse interface and xterm mouse support, and the ncurses test program. Juergen Pfeifer The menu and form libraries, C++ bindings for ncurses, menus, forms and panels, as well as the Ada95 binding. Ongoing support for panel. CONTRIBUTORS: Alexander V. Lukyanov for numerous fixes and improvements to the optimization logic. David MacKenzie for first-class bug-chasing and methodical testing. Ross Ridge for the code that hacks termcap parameterized strings into terminfo. Warren Tucker and Gerhard Fuernkranz, for writing and sending the panel library. Hellmuth Michaelis, for many patches and testing the optimization code. Eric Newton, Ulrich Drepper, and Anatoly Ivasyuk: the C++ code. Jonathan Ross, for lessons in using sed. Keith Bostic (maintainer of 4.4BSD curses) for help, criticism, comments, bug-finding, and being willing to deep-six BSD curses for this one when it grew up. Richard Stallman, for his commitment to making ncurses free software. Countless other people have contributed by reporting bugs, sending fixes, suggesting improvements, and generally whining about ncurses :-) BUGS: See the INSTALL file for bug and developer-list addresses. The Hacker's Guide in the doc directory includes some guidelines on how to report bugs in ways that will get them fixed most quickly. ncurses-6.0-20160213/mk-2nd.awk0000644000175100001440000001224510174477614014267 0ustar tomusers# $Id: mk-2nd.awk,v 1.19 2005/01/22 16:30:04 tom Exp $ ############################################################################## # Copyright (c) 1998-2004,2005 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey # # Generate compile-rules for the modules that we are using in libraries or # programs. We are listing them explicitly because we have turned off the # suffix rules (to force compilation with the appropriate flags). We could use # make-recursion but that would result in makefiles that are useless for # development. # # Variables: # model directory into which objects are compiled. # MODEL (uppercase version of "model"; toupper is not portable) # echo (yes iff we will show the $(CC) lines) # subset ("none", "base", "base+ext_funcs" or "termlib") # crenames ("yes" or "no", flag to control whether -c & -o options are used) # cxxrenames ("yes" or "no", flag to control whether -c & -o options are used) # traces ("all" or "DEBUG", to control whether tracing is compiled in) # srcdir is expanded when "configure --srcdir" was used # # Fields in src/modules: # $1 = module name # $2 = progs|lib|c++ # $3 = source-directory # # Fields in src/modules past $3 are dependencies # BEGIN { found = 0 using = 0 } /^@/ { using = 0 if (subset == "none") { using = 1 } else if (index(subset,$2) > 0) { if (using == 0) { if (found == 0) { print "" print "# generated by mk-2nd.awk" printf "# model: %s\n", model printf "# MODEL: %s\n", MODEL printf "# echo: %s\n", echo printf "# subset: %s\n", subset printf "# crenames: %s\n", crenames printf "# cxxrenames: %s\n", cxxrenames printf "# traces: %s\n", traces printf "# srcdir: %s\n", srcdir } using = 1 } } } /^[@#]/ { next } $1 ~ /trace/ { if (traces != "all" && traces != MODEL && $1 != "lib_trace") next } { if ($0 != "" \ && using != 0) { found = 1 if ( $1 != "" ) { print "" if ( $2 == "c++" ) { compile="CXX" suffix=".cc" use_c_o=cxxrenames } else { compile="CC" suffix=".c" use_c_o=crenames } printf "../%s/%s$o :\t%s/%s%s", model, $1, $3, $1, suffix for (n = 4; n <= NF; n++) printf " \\\n\t\t\t%s", $n print "" if ( echo == "yes" ) atsign="" else { atsign="@" printf "\t@echo 'compiling %s (%s)'\n", $1, model } printf "\t%s", atsign; if ( use_c_o != "yes" ) { printf "cd ../%s; ", model; } # The choice here is between # base+ext_funcs and # termlib+ext_tinfo # but they may appear in the same value. if ( subset ~ /base/ ) { mycflags="" } else if ( subset ~ /termlib/ ) { mycflags=" -DUSE_TERMLIB" } printf "$(LIBTOOL_COMPILE) $(%s) $(CFLAGS_%s)%s -c ", compile, MODEL, mycflags if ( $3 == "." || srcdir == "." ) { dir = $3 "/" sub("^\\$\\(srcdir\\)/","",dir); sub("^\\./","",dir); printf "../%s/%s%s%s", name, dir, $1, suffix } else { printf "%s/%s%s", $3, $1, suffix } if ( use_c_o == "yes" ) { printf " -o ../%s/%s$o", model, $1 } } else { printf "%s", $1 for (n = 2; n <= NF; n++) printf " %s", $n } print "" } } END { print "" } ncurses-6.0-20160213/AUTHORS0000644000175100001440000000474110520747524013540 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: AUTHORS,v 1.2 2006/10/28 21:44:52 tom Exp $ ------------------------------------------------------------------------------- These are the principal authors/contributors of ncurses since 1.9.9e, in decreasing order of their contribution: TD Thomas E. Dickey JPF Juergen Pfeifer ESR Eric S Raymond AVL Alexander V Lukyanov PB Philippe Blain SV Sven Verdoolaege ncurses-6.0-20160213/configure.in0000644000175100001440000021262012655466265015011 0ustar tomusersdnl*************************************************************************** dnl Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. * dnl * dnl Permission is hereby granted, free of charge, to any person obtaining a * dnl copy of this software and associated documentation files (the * dnl "Software"), to deal in the Software without restriction, including * dnl without limitation the rights to use, copy, modify, merge, publish, * dnl distribute, distribute with modifications, sublicense, and/or sell * dnl copies of the Software, and to permit persons to whom the Software is * dnl furnished to do so, subject to the following conditions: * dnl * dnl The above copyright notice and this permission notice shall be included * dnl in all copies or substantial portions of the Software. * dnl * dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. * dnl * dnl Except as contained in this notice, the name(s) of the above copyright * dnl holders shall not be used in advertising or otherwise to promote the * dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl dnl Author: Thomas E. Dickey 1995-on dnl dnl $Id: configure.in,v 1.626 2016/02/06 21:59:17 tom Exp $ dnl Process this file with autoconf to produce a configure script. dnl dnl See http://invisible-island.net/autoconf/ for additional information. dnl dnl --------------------------------------------------------------------------- AC_PREREQ(2.52.20030208) AC_REVISION($Revision: 1.626 $) AC_INIT(ncurses/base/lib_initscr.c) AC_CONFIG_HEADER(include/ncurses_cfg.h:include/ncurses_cfg.hin) CF_TOP_BUILDDIR CF_SUBST_NCURSES_VERSION CF_VERSION_INFO(NCURSES,ncurses) CF_WITH_REL_VERSION(NCURSES) CF_NCURSES_WITH_ABI_VERSION CF_WITH_SYSTYPE ### Save the given $CFLAGS to allow user-override. cf_user_CFLAGS="$CFLAGS" ### Default install-location CF_CFG_DEFAULTS ### Defaults for ncurses ABI CF_ABI_DEFAULTS ### Checks for programs. AC_ARG_WITH(ada, [ --without-ada suppress check for Ada95, don't build demo], [cf_with_ada=$withval], [cf_with_ada=yes]) if test "x$cf_with_ada" = xyes then cf_PROG_CC="gnatgcc gcc cc" else cf_PROG_CC="gcc cc" fi CF_PROG_CC($cf_PROG_CC) AC_PROG_CPP AC_PROG_GCC_TRADITIONAL CF_PROG_CC_C_O(CC) CF_PROG_LDCONFIG dnl DEFECT in autoconf 2.12: an attempt to set policy, this breaks the dnl configure script by not letting us test if C++ dnl is present, making this option necessary. AC_MSG_CHECKING(if you want to ensure bool is consistent with C++) AC_ARG_WITH(cxx, [ --without-cxx do not adjust ncurses bool to match C++], [cf_with_cxx=$withval], [cf_with_cxx=yes]) AC_MSG_RESULT($cf_with_cxx) if test "X$cf_with_cxx" = Xno ; then CXX="" GXX="" else # with autoconf 2.13, we can change the error to a warning: pushdef([AC_MSG_ERROR], [AC_MSG_RESULT(no) AC_MSG_WARN([You don't have any C++ compiler, too bad]) cf_with_cxx=no; CXX=""; GXX="";])dnl AC_PROG_CXX popdef([AC_MSG_ERROR])dnl AC_LANG_PUSH(C++) if test "x$cf_with_cxx" != xno then # Several of the C++ configurations do not work, particularly when # cross-compiling (20140913 -TD) AC_MSG_CHECKING(if $CXX works) save_CPPFLAGS="$CPPFLAGS" eval cf_includedir=${includedir} CPPFLAGS="$CPPFLAGS -I${cf_includedir}" AC_TRY_COMPILE([ #include #include ], [ printf("Hello world!\n") ], [cf_cxx_works=yes], [cf_cxx_works=no]) CPPFLAGS="$save_CPPFLAGS" AC_MSG_RESULT($cf_cxx_works) if test "x$cf_cxx_works" = xno then AC_MSG_WARN([Ignore $CXX, since it cannot compile hello-world.]) cf_with_cxx=no; CXX=""; GXX=""; fi fi AC_LANG_POP # autoconf 2.5x removed the error (hardcoding it to g++, or just blank) if test "$CXX" = "g++" ; then AC_PATH_PROG(CXX,g++) fi case "x$CXX" in (x|xg++) AC_MSG_WARN([You don't have any C++ compiler, too bad]) cf_with_cxx=no; CXX=""; GXX=""; ;; esac fi CF_GXX_VERSION case $GXX_VERSION in (1*|2.[[0-6]]*) # GXX=""; CXX=""; ac_cv_prog_gxx=no # cf_cxx_library=no AC_MSG_WARN(templates do not work) ;; esac AC_MSG_CHECKING(if you want to build C++ binding and demo) AC_ARG_WITH(cxx-binding, [ --without-cxx-binding do not build C++ binding and demo], [cf_with_cxx_binding=$withval], [cf_with_cxx_binding=$cf_with_cxx]) AC_MSG_RESULT($cf_with_cxx_binding) AC_MSG_CHECKING(if you want to build with Ada95) AC_MSG_RESULT($cf_with_ada) AC_MSG_CHECKING(if you want to install terminal database) AC_ARG_ENABLE(db-install, [ --disable-db-install suppress install of terminal database], [cf_with_db_install=$enableval], [cf_with_db_install=yes]) AC_MSG_RESULT($cf_with_db_install) AC_MSG_CHECKING(if you want to install manpages) AC_ARG_WITH(manpages, [ --without-manpages suppress install of manpages], [cf_with_manpages=$withval], [cf_with_manpages=yes]) AC_MSG_RESULT($cf_with_manpages) AC_MSG_CHECKING(if you want to build programs such as tic) AC_ARG_WITH(progs, [ --without-progs suppress build/install with programs (e.g., tic)], [cf_with_progs=$withval], [cf_with_progs=yes]) AC_MSG_RESULT($cf_with_progs) AC_MSG_CHECKING(if you want to build test-programs) AC_ARG_WITH(tests, [ --without-tests suppress build/install with test-programs], [cf_with_tests=$withval], [cf_with_tests=yes]) AC_MSG_RESULT($cf_with_tests) AC_MSG_CHECKING(if you wish to install curses.h) AC_ARG_WITH(curses-h, [ --without-curses-h install curses.h as ncurses.h only], [with_curses_h=$withval], [with_curses_h=yes]) AC_MSG_RESULT($with_curses_h) modules_to_build="ncurses" if test "X$cf_with_progs" != Xno ; then modules_to_build="$modules_to_build progs tack" fi modules_to_build="$modules_to_build panel menu form" AC_ARG_PROGRAM CF_PROG_AWK CF_PROG_EGREP CF_PROG_INSTALL CF_PROG_LINT CF_PROG_LN_S AC_SYS_LONG_FILE_NAMES # if we find pkg-config, check if we should install the ".pc" files. CF_PKG_CONFIG CF_WITH_PKG_CONFIG_LIBDIR CF_ENABLE_PC_FILES if test -z "$MAKE_PC_FILES" then AC_MSG_CHECKING(for suffix to add to pc-files) AC_ARG_WITH(pc-suffix, [ --with-pc-suffix suffixes pc-files], [case "x$withval" in (xyes|xno) PC_MODULE_SUFFIX= ;; (*) PC_MODULE_SUFFIX="$withval" ;; esac]) test -z "$PC_MODULE_SUFFIX" && PC_MODULE_SUFFIX=none AC_MSG_RESULT($PC_MODULE_SUFFIX) test "$PC_MODULE_SUFFIX" = none && PC_MODULE_SUFFIX= AC_SUBST(PC_MODULE_SUFFIX) fi AC_MSG_CHECKING(if we should assume mixed-case filenames) AC_ARG_ENABLE(mixed-case, [ --enable-mixed-case tic should assume mixed-case filenames], [enable_mixedcase=$enableval], [enable_mixedcase=auto]) AC_MSG_RESULT($enable_mixedcase) if test "$enable_mixedcase" = "auto" ; then CF_MIXEDCASE_FILENAMES else cf_cv_mixedcase=$enable_mixedcase if test "x$enable_mixedcase" = "xyes" ; then AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if tic should assume mixed-case filenames]) fi fi # do this after mixed-case option (tags/TAGS is not as important as tic). AC_PROG_MAKE_SET CF_MAKE_TAGS CF_MAKEFLAGS dnl These are standard among *NIX systems, but not when cross-compiling AC_CHECK_TOOL(RANLIB, ranlib, ':') AC_CHECK_TOOL(LD, ld, ld) AC_CHECK_TOOL(AR, ar, ar) AC_CHECK_TOOL(NM, nm, nm) CF_AR_FLAGS dnl Special option for use by system-builders: the install-prefix is used to dnl adjust the location into which the actual install is done, so that an dnl archive can be built without modifying the host system's configuration. AC_MSG_CHECKING(if you have specified an install-prefix) AC_ARG_WITH(install-prefix, [ --with-install-prefix prefixes actual install-location ($DESTDIR)], [case "x$withval" in (xyes|xno) ;; (*) DESTDIR="$withval" ;; esac]) AC_MSG_RESULT($DESTDIR) AC_SUBST(DESTDIR) ############################################################################### CF_HELP_MESSAGE(Build-Tools Needed to Compile Temporary Applications for Cross-compiling:) # If we're cross-compiling, allow the user to override the tools and their # options. The configure script is oriented toward identifying the host # compiler, etc., but we need a build compiler to generate parts of the source. CF_BUILD_CC ############################################################################### CF_HELP_MESSAGE(Options to Specify the Libraries Built/Used:) ### Options to allow the user to specify the set of libraries which are used. ### Use "--without-normal --with-shared" to allow the default model to be ### shared, for example. cf_list_models="" AC_SUBST(cf_list_models)dnl the complete list of models ("normal debug") CF_WITH_LIBTOOL if test "$with_libtool" != "no" ; then cf_list_models="$cf_list_models libtool" else AC_MSG_CHECKING(if you want to build shared libraries) AC_ARG_WITH(shared, [ --with-shared generate shared-libraries], [with_shared=$withval], [with_shared=no]) AC_MSG_RESULT($with_shared) test "x$with_shared" = "xyes" && cf_list_models="$cf_list_models shared" AC_MSG_CHECKING(if you want to build static libraries) AC_ARG_WITH(normal, [ --with-normal generate normal-libraries (default)], [with_normal=$withval], [with_normal=yes]) AC_MSG_RESULT($with_normal) test "x$with_normal" = "xyes" && cf_list_models="$cf_list_models normal" AC_MSG_CHECKING(if you want to build debug libraries) AC_ARG_WITH(debug, [ --with-debug generate debug-libraries (default)], [with_debug=$withval], [with_debug=yes]) AC_MSG_RESULT($with_debug) test "x$with_debug" = "xyes" && cf_list_models="$cf_list_models debug" AC_MSG_CHECKING(if you want to build profiling libraries) AC_ARG_WITH(profile, [ --with-profile generate profile-libraries], [with_profile=$withval], [with_profile=no]) AC_MSG_RESULT($with_profile) test "x$with_profile" = "xyes" && cf_list_models="$cf_list_models profile" fi if test "X$cf_with_cxx_binding" != Xno; then if test "x$with_shared" = "xyes"; then AC_MSG_CHECKING(if you want to build C++ shared libraries) AC_ARG_WITH(cxx-shared, [ --with-cxx-shared generate C++ shared-libraries], [with_shared_cxx=$withval], [with_shared_cxx=no]) AC_MSG_RESULT($with_shared_cxx) fi fi ############################################################################### AC_MSG_CHECKING(for specified models) test -z "$cf_list_models" && cf_list_models=normal dnl If we use libtool to generate libraries, then it must be the only dnl specified model. test "$with_libtool" != "no" && cf_list_models=libtool AC_MSG_RESULT($cf_list_models) ### Use the first model as the default, and save its suffix for use in building ### up test-applications. AC_MSG_CHECKING(for default model) DFT_LWR_MODEL=`echo "$cf_list_models" | $AWK '{print $1}'` AC_MSG_RESULT($DFT_LWR_MODEL) CF_UPPER(DFT_UPR_MODEL,$DFT_LWR_MODEL)dnl AC_SUBST(DFT_LWR_MODEL)dnl the default model ("normal") AC_SUBST(DFT_UPR_MODEL)dnl the default model ("NORMAL") TICS_NAME=tic AC_SUBST(TICS_NAME) TINFO_NAME=tinfo AC_SUBST(TINFO_NAME) LIB_NAME=ncurses AC_SUBST(LIB_NAME) LIB_DIR=../lib LIB_2ND=../../lib CF_WITH_LIB_PREFIX(cf_prefix) LIB_SUFFIX= AC_SUBST(LIB_SUFFIX) CF_PATHSEP ############################################################################### AC_MSG_CHECKING(if you want to build a separate terminfo library) AC_ARG_WITH(termlib, [ --with-termlib generate separate terminfo library], [with_termlib=$withval], [with_termlib=no]) AC_MSG_RESULT($with_termlib) AC_MSG_CHECKING(if you want to build a separate tic library) AC_ARG_WITH(ticlib, [ --with-ticlib generate separate tic library], [with_ticlib=$withval], [with_ticlib=no]) AC_MSG_RESULT($with_ticlib) ### Checks for special libraries, must be done up-front. SHLIB_LIST="" CF_WITH_GPM if test "$with_gpm" != no ; then AC_MSG_CHECKING(if you want to load GPM dynamically) AC_ARG_WITH(dlsym, [ --without-dlsym do not use dlsym() to load GPM dynamically], [with_dlsym=$withval], [with_dlsym=yes]) AC_MSG_RESULT($with_dlsym) if test "x$with_dlsym" = xyes ; then CF_FUNC_DLSYM if test "x$with_gpm" != xyes ; then CF_VERBOSE(assuming soname for gpm is $with_gpm) cf_cv_gpm_soname="$with_gpm" else CF_LIB_SONAME([#include ],[if (Gpm_Open(0,0)) Gpm_Close();],gpm) fi test "$cf_cv_gpm_soname" != "unknown" && AC_DEFINE_UNQUOTED(LIBGPM_SONAME,"$cf_cv_gpm_soname",[Define as needed to set the gpm share library soname]) SHLIB_LIST="-ldl $SHLIB_LIST" else SHLIB_LIST="-lgpm $SHLIB_LIST" CF_ADD_LIB(gpm,TEST_LIBS) fi AC_DEFINE(HAVE_LIBGPM,1,[Define to 1 if we have the gpm library]) CF_CHECK_GPM_WGETCH fi CF_WITH_SYSMOUSE dnl Not all ports of gcc support the -g option if test X"$CC_G_OPT" = X"" ; then CC_G_OPT='-g' test -n "$GCC" && test "x${ac_cv_prog_cc_g}" != xyes && CC_G_OPT='' fi AC_SUBST(CC_G_OPT) if test X"$CXX_G_OPT" = X"" ; then CXX_G_OPT='-g' test -n "$GXX" && test "x${ac_cv_prog_cxx_g}" != xyes && CXX_G_OPT='' fi AC_SUBST(CXX_G_OPT) AC_MSG_CHECKING(for default loader flags) case $DFT_LWR_MODEL in (libtool) LD_MODEL='' ;; (normal) LD_MODEL='' ;; (debug) LD_MODEL=$CC_G_OPT ;; (profile) LD_MODEL='-pg';; (shared) LD_MODEL='' ;; esac AC_SUBST(LD_MODEL)dnl the type of link (e.g., -g or -pg) AC_MSG_RESULT($LD_MODEL) case $DFT_LWR_MODEL in (shared) CF_ENABLE_RPATH AC_MSG_CHECKING(if shared libraries should be relinked during install) AC_ARG_ENABLE(relink, [ --disable-relink relink shared libraries during install], [cf_cv_do_relink=$enableval], [cf_cv_do_relink=yes]) AC_MSG_RESULT($cf_cv_do_relink) ;; esac # we will build libraries one-level down. rel_builddir=.. CF_SHARED_OPTS for model in $cf_list_models; do case $model in (libtool) CF_WITH_LIBTOOL_OPTS CF_WITH_EXPORT_SYMS ;; (shared) if test "$CC_SHARED_OPTS" = "unknown"; then AC_ERROR(Shared libraries are not supported in this version) fi CF_WITH_VERSIONED_SYMS ;; esac done # pretend that ncurses==ncursesw==ncursest AC_MSG_CHECKING(if you want to disable library suffixes) CF_ARG_DISABLE(lib-suffixes, [ --disable-lib-suffixes disable library suffixes], [disable_lib_suffixes=yes], [disable_lib_suffixes=no], no) AC_MSG_RESULT($disable_lib_suffixes) ### If we're building with rpath, try to link non-standard libs that way too. if test "$DFT_LWR_MODEL" = "shared"; then CF_DISABLE_RPATH_HACK fi ############################################################################### CF_HELP_MESSAGE(Fine-Tuning Your Configuration:) ### use option --with-extra-suffix to append suffix to headers and libraries AC_MSG_CHECKING(if you wish to append extra suffix to header/library paths) EXTRA_SUFFIX= AC_ARG_WITH(extra-suffix, [ --with-extra-suffix=X append extra suffix to header/library paths], [case x$withval in (no) ;; (xyes|x) EXTRA_SUFFIX=$cf_cv_abi_version ;; (*) EXTRA_SUFFIX=$withval ;; esac ]) AC_MSG_RESULT($EXTRA_SUFFIX) AC_SUBST(EXTRA_SUFFIX) ### use option --disable-overwrite to leave out the link to -lcurses AC_MSG_CHECKING(if you wish to install ncurses overwriting curses) AC_ARG_ENABLE(overwrite, [ --disable-overwrite put headers in subdir, omit link to -lcurses], [with_overwrite=$enableval], [if test "$prefix" = "/usr" ; then with_overwrite=yes; else with_overwrite=no; fi]) AC_MSG_RESULT($with_overwrite) AC_MSG_CHECKING(if external terminfo-database is used) AC_ARG_ENABLE(database, [ --disable-database do not use terminfo, only fallbacks/termcap], [use_database=$enableval], [use_database=yes]) AC_MSG_RESULT($use_database) case $host_os in (os2*) TERMINFO_SRC='${top_srcdir}/misc/emx.src' ;; (*) TERMINFO_SRC='${top_srcdir}/misc/terminfo.src' ;; esac AC_SUBST(TERMINFO_SRC) NCURSES_USE_DATABASE=0 if test "$use_database" != no ; then NCURSES_USE_DATABASE=1 AC_MSG_CHECKING(which terminfo source-file will be installed) AC_ARG_WITH(database, [ --with-database=XXX specify terminfo source to install], [TERMINFO_SRC=$withval]) AC_MSG_RESULT($TERMINFO_SRC) AC_MSG_CHECKING(whether to use hashed database instead of directory/tree) AC_ARG_WITH(hashed-db, [ --with-hashed-db specify hashed-database library],, [with_hashed_db=no]) AC_MSG_RESULT($with_hashed_db) else with_hashed_db=no fi AC_SUBST(NCURSES_USE_DATABASE) AC_MSG_CHECKING(for list of fallback descriptions) AC_ARG_WITH(fallbacks, [ --with-fallbacks=XXX specify list of fallback terminal descriptions], [with_fallback=$withval], [with_fallback=]) AC_MSG_RESULT($with_fallback) FALLBACK_LIST=`test "$with_fallback" != no && echo "$with_fallback" | sed -e 's/,/ /g'` AC_SUBST(FALLBACK_LIST) AC_MSG_CHECKING(if you want modern xterm or antique) AC_ARG_WITH(xterm-new, [ --without-xterm-new specify if xterm terminfo should be old version], [with_xterm_new=$withval], [with_xterm_new=yes]) case $with_xterm_new in (no) with_xterm_new=xterm-old;; (*) with_xterm_new=xterm-new;; esac AC_MSG_RESULT($with_xterm_new) WHICH_XTERM=$with_xterm_new AC_SUBST(WHICH_XTERM) AC_MSG_CHECKING(if xterm backspace sends BS or DEL) AC_ARG_WITH(xterm-kbs, [ --with-xterm-kbs=XXX specify if xterm backspace sends BS or DEL], [with_xterm_kbs=$withval], [with_xterm_kbs=BS]) case x$with_xterm_kbs in (xyes|xno|xBS|xbs|x8) with_xterm_kbs=BS ;; (xDEL|xdel|x127) with_xterm_kbs=DEL ;; (*) with_xterm_kbs=$withval ;; esac AC_MSG_RESULT($with_xterm_kbs) XTERM_KBS=$with_xterm_kbs AC_SUBST(XTERM_KBS) MAKE_TERMINFO= if test "$use_database" = no ; then TERMINFO="${datadir}/terminfo" MAKE_TERMINFO="#" else AC_MSG_CHECKING(for list of terminfo directories) CF_WITH_PATHLIST(terminfo-dirs, [ --with-terminfo-dirs=XXX specify list of terminfo directories], TERMINFO_DIRS, DATADIR/terminfo, ${datadir}/terminfo) AC_MSG_RESULT($TERMINFO_DIRS) test -n "$TERMINFO_DIRS" && AC_DEFINE_UNQUOTED(TERMINFO_DIRS,"$TERMINFO_DIRS",[Define as needed to predefine the TERMINFO_DIR searchlist]) AC_MSG_CHECKING(for default terminfo directory) CF_WITH_PATH(default-terminfo-dir, [ --with-default-terminfo-dir=DIR default terminfo directory], TERMINFO, DATADIR/terminfo, ${datadir}/terminfo) AC_MSG_RESULT($TERMINFO) AC_DEFINE_UNQUOTED(TERMINFO,"$TERMINFO",[Define to set the default terminal database path]) fi AC_SUBST(TERMINFO) AC_SUBST(MAKE_TERMINFO) ### use option --disable-big-core to make tic run on small machines ### We need 4Mb, check if we can allocate 50% more than that. AC_MSG_CHECKING(if big-core option selected) AC_ARG_ENABLE(big-core, [ --disable-big-core assume machine has little memory], [with_big_core=$enableval], [AC_TRY_RUN([ #include #include int main() { unsigned long n = 6000000L; char *s = malloc(n); if (s != 0) s[0] = s[n-1] = 0; ${cf_cv_main_return:-return}(s == 0); }], [with_big_core=yes], [with_big_core=no], [with_big_core=no])]) AC_MSG_RESULT($with_big_core) test "x$with_big_core" = "xyes" && AC_DEFINE(HAVE_BIG_CORE,1,[Define to 1 if machine has ample memory for tic]) ### ISO C only guarantees 512-char strings, we have tables which load faster ### when constructed using "big" strings. More than the C compiler, the awk ### program is a limit on most vendor UNIX systems. Check that we can build. AC_MSG_CHECKING(if big-strings option selected) AC_ARG_ENABLE(big-strings, [ --disable-big-strings assume compiler has only standard-size strings], [with_big_strings=$enableval], [CF_AWK_BIG_PRINTF(12000,with_big_strings)]) AC_MSG_RESULT($with_big_strings) USE_BIG_STRINGS=0 test "x$with_big_strings" = "xyes" && USE_BIG_STRINGS=1 AC_SUBST(USE_BIG_STRINGS) ### use option --enable-termcap to compile in the termcap fallback support AC_MSG_CHECKING(if you want termcap-fallback support) AC_ARG_ENABLE(termcap, [ --enable-termcap compile in termcap fallback support], [with_termcap=$enableval], [with_termcap=no]) AC_MSG_RESULT($with_termcap) NCURSES_USE_TERMCAP=0 if test "x$with_termcap" != "xyes" ; then if test "$use_database" = no ; then if test -z "$with_fallback" ; then AC_ERROR(You have disabled the database w/o specifying fallbacks) fi fi AC_DEFINE(PURE_TERMINFO,1,[Define to 1 if we should support only terminfo]) else if test "$with_ticlib" != no ; then AC_ERROR(Options --with-ticlib and --enable-termcap cannot be combined) fi NCURSES_USE_TERMCAP=1 AC_MSG_CHECKING(for list of termcap files) CF_WITH_PATHLIST(termpath, [ --with-termpath=XXX specify list of termcap files], TERMPATH, /etc/termcap:/usr/share/misc/termcap) AC_MSG_RESULT($TERMPATH) test -n "$TERMPATH" && AC_DEFINE_UNQUOTED(TERMPATH,"$TERMPATH",[Define to set the termcap searchlist]) ### use option --enable-getcap to use a hacked getcap for reading termcaps AC_MSG_CHECKING(if fast termcap-loader is needed) AC_ARG_ENABLE(getcap, [ --enable-getcap fast termcap load, no xrefs to terminfo], [with_getcap=$enableval], [with_getcap=no]) AC_MSG_RESULT($with_getcap) test "x$with_getcap" = "xyes" && AC_DEFINE(USE_GETCAP,1,[Define to 1 to use fast termcap-loader]) AC_MSG_CHECKING(if translated termcaps will be cached in ~/.terminfo) AC_ARG_ENABLE(getcap-cache, [ --enable-getcap-cache cache translated termcaps in ~/.terminfo], [with_getcap_cache=$enableval], [with_getcap_cache=no]) AC_MSG_RESULT($with_getcap_cache) test "x$with_getcap_cache" = "xyes" && AC_DEFINE(USE_GETCAP_CACHE,1,[Define to 1 if translated termcap should be stored in $HOME/.terminfo]) fi AC_SUBST(NCURSES_USE_TERMCAP) ### Use option --disable-home-terminfo to completely remove ~/.terminfo AC_MSG_CHECKING(if ~/.terminfo is wanted) AC_ARG_ENABLE(home-terminfo, [ --disable-home-terminfo drop ~/.terminfo from terminfo search-path], [with_home_terminfo=$enableval], [with_home_terminfo=yes]) AC_MSG_RESULT($with_home_terminfo) test "x$with_home_terminfo" = "xyes" && AC_DEFINE(USE_HOME_TERMINFO,1,[Define to 1 if $HOME/.terminfo feature is wanted]) AC_MSG_CHECKING(if you want to use restricted environment when running as root) AC_ARG_ENABLE(root-environ, [ --disable-root-environ restrict environment when running as root], [with_root_environ=$enableval], [with_root_environ=yes]) AC_MSG_RESULT($with_root_environ) test "x$with_root_environ" = xyes && AC_DEFINE(USE_ROOT_ENVIRON,1,[Define to 1 if environment should be restricted for root user]) ### Use option --enable-symlinks to make tic use symlinks, not hard links ### to reduce storage requirements for the terminfo database. CF_LINK_FUNCS with_links=no with_symlinks=no # soft links (symbolic links) are useful for some systems where hard links do # not work, or to make it simpler to copy terminfo trees around. if test "x$ac_cv_func_symlink" = xyes ; then AC_MSG_CHECKING(if tic should use symbolic links) AC_ARG_ENABLE(symlinks, [ --enable-symlinks make tic use symbolic links not hard links], [with_symlinks=$enableval], [with_symlinks=no]) AC_MSG_RESULT($with_symlinks) fi # If we have hard links and did not choose to use soft links instead, there is # no reason to make this choice optional - use the hard links. if test "$with_symlinks" = no ; then AC_MSG_CHECKING(if tic should use hard links) if test "x$ac_cv_func_link" = xyes ; then with_links=yes else with_links=no fi AC_MSG_RESULT($with_links) fi test "x$with_links" = xyes && AC_DEFINE(USE_LINKS,1,[Define to 1 if hardlinks should be used in terminfo database]) test "x$with_symlinks" = xyes && AC_DEFINE(USE_SYMLINKS,1,[Define to 1 if symbolic links should be used in terminfo database]) ### use option --enable-broken-linker to force on use of broken-linker support AC_MSG_CHECKING(if you want broken-linker support code) AC_ARG_ENABLE(broken_linker, [ --enable-broken_linker compile with broken-linker support code], [with_broken_linker=$enableval], [with_broken_linker=${BROKEN_LINKER:-no}]) AC_MSG_RESULT($with_broken_linker) BROKEN_LINKER=0 if test "x$with_broken_linker" = xyes ; then AC_DEFINE(BROKEN_LINKER,1,[Define to 1 to work around linkers which cannot link data-only modules]) BROKEN_LINKER=1 elif test "$DFT_LWR_MODEL" = shared ; then case $cf_cv_system_name in (cygwin*) AC_DEFINE(BROKEN_LINKER,1,[Define to 1 to work around linkers which cannot link data-only modules]) BROKEN_LINKER=1 CF_VERBOSE(cygwin linker is broken anyway) ;; esac fi AC_SUBST(BROKEN_LINKER) ### use option --enable-bsdpad to have tputs process BSD-style prefix padding AC_MSG_CHECKING(if tputs should process BSD-style prefix padding) AC_ARG_ENABLE(bsdpad, [ --enable-bsdpad recognize BSD-style prefix padding], [with_bsdpad=$enableval], [with_bsdpad=no]) AC_MSG_RESULT($with_bsdpad) test "x$with_bsdpad" = xyes && AC_DEFINE(BSD_TPUTS,1,[Define to 1 to recognize BSD-style prefix padding]) ### use option --enable-widec to turn on use of wide-character support NCURSES_CH_T=chtype NCURSES_LIBUTF8=0 NEED_WCHAR_H=0 NCURSES_MBSTATE_T=0 NCURSES_WCHAR_T=0 NCURSES_WINT_T=0 # Check to define _XOPEN_SOURCE "automatically" CPPFLAGS_before_XOPEN="$CPPFLAGS" CF_XOPEN_SOURCE(500) CPPFLAGS_after_XOPEN="$CPPFLAGS" # Work around breakage on OS X CF_SIGWINCH # Checks for CODESET support. AM_LANGINFO_CODESET # use these variables to work around a defect in gcc's fixincludes. NCURSES_OK_WCHAR_T= NCURSES_OK_WINT_T= AC_MSG_CHECKING(if you want wide-character code) AC_ARG_ENABLE(widec, [ --enable-widec compile with wide-char/UTF-8 code], [with_widec=$enableval], [with_widec=no]) AC_MSG_RESULT($with_widec) NCURSES_WCWIDTH_GRAPHICS=1 AC_SUBST(NCURSES_WCWIDTH_GRAPHICS) if test "x$with_widec" = xyes ; then if test "x$disable_lib_suffixes" = xno ; then LIB_SUFFIX="w${LIB_SUFFIX}" fi AC_DEFINE(USE_WIDEC_SUPPORT,1,[Define to 1 to compile with wide-char/UTF-8 code]) AC_DEFINE(NCURSES_WIDECHAR,1,[Define to 1 to compile with wide-char/UTF-8 code]) CF_CHECK_WCHAR_H CF_CHECK_WCWIDTH_GRAPHICS test "$cf_cv_wcwidth_graphics" = no && NCURSES_WCWIDTH_GRAPHICS=0 # with_overwrite=no NCURSES_CH_T=cchar_t AC_CHECK_FUNCS(putwc btowc wctob mbtowc wctomb mblen mbrlen mbrtowc wcsrtombs mbsrtowcs wcstombs mbstowcs) if test "x$ac_cv_func_putwc" != xyes ; then CF_UTF8_LIB if test "$cf_cv_utf8_lib" != no ; then NCURSES_LIBUTF8=1 fi fi CF_WCHAR_TYPE(mbstate_t, NCURSES_MBSTATE_T) CF_WCHAR_TYPE(wchar_t, NCURSES_WCHAR_T, NCURSES_OK_WCHAR_T) CF_WCHAR_TYPE(wint_t, NCURSES_WINT_T, NCURSES_OK_WINT_T) if test "$NCURSES_MBSTATE_T" != 0; then AC_DEFINE(NEED_MBSTATE_T_DEF,1,[Define to 1 if we must declare mbstate_t]) fi fi AC_SUBST(NCURSES_CH_T) AC_SUBST(NCURSES_LIBUTF8) AC_SUBST(NEED_WCHAR_H) AC_SUBST(NCURSES_MBSTATE_T) AC_SUBST(NCURSES_WCHAR_T) AC_SUBST(NCURSES_WINT_T) AC_SUBST(NCURSES_OK_WCHAR_T) AC_SUBST(NCURSES_OK_WINT_T) ### use option --disable-lp64 to allow long chtype AC_MSG_CHECKING(whether to enable _LP64 definition in curses.h) AC_ARG_ENABLE(lp64, [ --disable-lp64 allow chtype to be long (ignore _LP64)], [with_lp64=$enableval], [with_lp64=$cf_dft_with_lp64]) AC_MSG_RESULT($with_lp64) if test "x$with_lp64" = xyes ; then cf_cv_enable_lp64=1 else cf_cv_enable_lp64=0 fi AC_SUBST(cf_cv_enable_lp64) CF_LARGEFILE ### use option --disable-tparm-varargs to make tparm() conform to X/Open AC_MSG_CHECKING(if you want tparm not to use X/Open fixed-parameter list) AC_ARG_ENABLE(tparm-varargs, [ --disable-tparm-varargs compile tparm() without varargs interface], [with_tparm_varargs=$enableval], [with_tparm_varargs=yes]) AC_MSG_RESULT($with_tparm_varargs) NCURSES_TPARM_VARARGS=0 test "x$with_tparm_varargs" = xyes && NCURSES_TPARM_VARARGS=1 AC_SUBST(NCURSES_TPARM_VARARGS) ### use option --disable-tic-depends to make libtic not explicitly depend on ncurses/ncursesw if test "$with_ticlib" != no ; then AC_MSG_CHECKING(if you want tic library to use explicit dependency on ncurses$LIB_SUFFIX library) AC_ARG_ENABLE(tic-depends, [ --disable-tic-depends link tic library without explicit dependency on ncurses library], [with_tic_depends=$enableval], [with_tic_depends=yes]) AC_MSG_RESULT($with_tic_depends) else with_tic_depends=no fi ### use option --with-bool to override bool's type AC_MSG_CHECKING(for type of bool) AC_ARG_WITH(bool, [ --with-bool=TYPE override fallback type of bool variable], [NCURSES_BOOL="$withval"], [NCURSES_BOOL=auto]) AC_MSG_RESULT($NCURSES_BOOL) AC_SUBST(NCURSES_BOOL) AC_MSG_CHECKING(for alternate terminal capabilities file) AC_ARG_WITH(caps, [ --with-caps=alt compile with alternate Caps file], [TERMINFO_CAPS=Caps.$withval], [TERMINFO_CAPS=Caps]) test -f "${srcdir}/include/${TERMINFO_CAPS}" || TERMINFO_CAPS=Caps AC_MSG_RESULT($TERMINFO_CAPS) AC_SUBST(TERMINFO_CAPS) ### use option --with-chtype to override chtype's type AC_MSG_CHECKING(for type of chtype) AC_ARG_WITH(chtype, [ --with-chtype=TYPE override type of chtype], [NCURSES_CHTYPE="$withval"], [NCURSES_CHTYPE=$cf_dft_chtype]) AC_MSG_RESULT($NCURSES_CHTYPE) ### use option --with-ospeed to override ospeed's type AC_MSG_CHECKING(for type of ospeed) AC_ARG_WITH(ospeed, [ --with-ospeed=TYPE override type of ospeed variable], [NCURSES_OSPEED="$withval"], [NCURSES_OSPEED=short]) AC_MSG_RESULT($NCURSES_OSPEED) AC_SUBST(NCURSES_OSPEED) ### use option --with-mmask-t to override mmask_t's type AC_MSG_CHECKING(for type of mmask_t) AC_ARG_WITH(mmask-t, [ --with-mmask-t=TYPE override type of mmask_t], [NCURSES_MMASK_T="$withval"], [NCURSES_MMASK_T=$cf_dft_mmask_t]) AC_MSG_RESULT($NCURSES_MMASK_T) ### use option --with-ccharw-max to override CCHARW_MAX size AC_MSG_CHECKING(for size CCHARW_MAX) AC_ARG_WITH(ccharw-max, [ --with-ccharw-max=XXX override size CCHARW_MAX], [NCURSES_CCHARW_MAX="$withval"], [NCURSES_CCHARW_MAX=5]) AC_MSG_RESULT($NCURSES_CCHARW_MAX) AC_SUBST(NCURSES_CCHARW_MAX) ### use option --with-tparm-arg to override tparm's argument type AC_MSG_CHECKING(for type of tparm args) AC_ARG_WITH(tparm-arg, [ --with-tparm-arg=TYPE override parameter type of tparm], [NCURSES_TPARM_ARG="$withval"], [NCURSES_TPARM_ARG=$cf_dft_tparm_arg]) AC_MSG_RESULT($NCURSES_TPARM_ARG) AC_SUBST(NCURSES_TPARM_ARG) ### Enable compiling-in rcs id's AC_MSG_CHECKING(if RCS identifiers should be compiled-in) AC_ARG_WITH(rcs-ids, [ --with-rcs-ids compile-in RCS identifiers], [with_rcs_ids=$withval], [with_rcs_ids=no]) AC_MSG_RESULT($with_rcs_ids) test "x$with_rcs_ids" = xyes && AC_DEFINE(USE_RCS_IDS,1,[Define to 1 to compile-in RCS identifiers]) ############################################################################### CF_MAN_PAGES([ captoinfo clear infocmp infotocap tabs tic toe tput tset ]) ############################################################################### CF_HELP_MESSAGE(Extensions:) ### Note that some functions (such as const) are normally disabled anyway. AC_MSG_CHECKING(if you want to build with function extensions) AC_ARG_ENABLE(ext-funcs, [ --disable-ext-funcs disable function-extensions], [with_ext_funcs=$enableval], [with_ext_funcs=yes]) AC_MSG_RESULT($with_ext_funcs) if test "x$with_ext_funcs" = xyes ; then NCURSES_EXT_FUNCS=1 AC_DEFINE(HAVE_ASSUME_DEFAULT_COLORS,1,[Define to 1 to enable assume_default_colors() function]) AC_DEFINE(HAVE_CURSES_VERSION,1,[Define to 1 to enable curses_version() function]) AC_DEFINE(HAVE_HAS_KEY,1,[Define to 1 to enable has_key() function]) AC_DEFINE(HAVE_RESIZETERM,1,[Define to 1 to enable resizeterm() function]) AC_DEFINE(HAVE_RESIZE_TERM,1,[Define to 1 to enable resize_term() function]) AC_DEFINE(HAVE_TERM_ENTRY_H,1,[Define to 1 to enable term_entry() function]) AC_DEFINE(HAVE_USE_DEFAULT_COLORS,1,[Define to 1 to enable use_default_colors() function]) AC_DEFINE(HAVE_USE_SCREEN,1,[Define to 1 to enable use_screen() function]) AC_DEFINE(HAVE_USE_WINDOW,1,[Define to 1 to enable use_window() function]) AC_DEFINE(HAVE_WRESIZE,1,[Define to 1 to enable wresize() function]) AC_DEFINE(NCURSES_EXT_FUNCS,1,[Define to 1 to enable ncurses extended functions]) GENERATED_EXT_FUNCS=generated else NCURSES_EXT_FUNCS=0 GENERATED_EXT_FUNCS= fi AC_SUBST(NCURSES_EXT_FUNCS) AC_SUBST(GENERATED_EXT_FUNCS) AC_MSG_CHECKING(if you want to build with SCREEN extensions) AC_ARG_ENABLE(sp-funcs, [ --enable-sp-funcs enable SCREEN-extensions], [with_sp_funcs=$enableval], [with_sp_funcs=$cf_dft_ext_spfuncs]) AC_MSG_RESULT($with_sp_funcs) if test "x$with_sp_funcs" = xyes ; then NCURSES_SP_FUNCS=1 AC_DEFINE(NCURSES_SP_FUNCS,1,[Define to 1 to enable SCREEN-extensions]) GENERATED_SP_FUNCS=generated else NCURSES_SP_FUNCS=0 GENERATED_SP_FUNCS= fi AC_SUBST(NCURSES_SP_FUNCS) AC_SUBST(GENERATED_SP_FUNCS) AC_MSG_CHECKING(if you want to build with terminal-driver) AC_ARG_ENABLE(term-driver, [ --enable-term-driver enable terminal-driver], [with_term_driver=$enableval], [with_term_driver=no]) AC_MSG_RESULT($with_term_driver) if test "x$with_term_driver" = xyes ; then AC_DEFINE(USE_TERM_DRIVER,1,[Define to 1 to enable terminal-driver]) if test "x$with_termlib" != xno ; then AC_MSG_ERROR(The term-driver option conflicts with the termlib option) fi if test "x$with_sp_funcs" != xyes ; then AC_MSG_ERROR(The term-driver option relies upon sp-funcs) fi fi ### use option --enable-const to turn on use of const beyond that in XSI. AC_MSG_CHECKING(for extended use of const keyword) AC_ARG_ENABLE(const, [ --enable-const compile with extra/non-standard const], [with_ext_const=$enableval], [with_ext_const=$cf_dft_ext_const]) AC_MSG_RESULT($with_ext_const) NCURSES_CONST='/*nothing*/' if test "x$with_ext_const" = xyes ; then NCURSES_CONST=const fi AC_SUBST(NCURSES_CONST) ### use option --enable-ext-colors to turn on use of colors beyond 16. AC_MSG_CHECKING(if you want to use extended colors) AC_ARG_ENABLE(ext-colors, [ --enable-ext-colors compile for 256-color support], [with_ext_colors=$enableval], [with_ext_colors=$cf_dft_ext_colors]) AC_MSG_RESULT($with_ext_colors) NCURSES_EXT_COLORS=0 if test "x$with_ext_colors" = xyes ; then if test "x$with_widec" != xyes ; then AC_MSG_WARN(This option applies only to wide-character library) else # cannot be ABI 5 since it changes sizeof(cchar_t) CF_NCURSES_ABI_6 NCURSES_EXT_COLORS=1 AC_DEFINE(NCURSES_EXT_COLORS,1,[Define to 1 to compile for 256-color support]) fi fi AC_SUBST(NCURSES_EXT_COLORS) ### use option --enable-ext-mouse to modify coding to support 5-button mice AC_MSG_CHECKING(if you want to use extended mouse encoding) AC_ARG_ENABLE(ext-mouse, [ --enable-ext-mouse compile for extended mouse-encoding], [with_ext_mouse=$enableval], [with_ext_mouse=$cf_dft_ext_mouse]) AC_MSG_RESULT($with_ext_mouse) NCURSES_MOUSE_VERSION=1 if test "x$with_ext_mouse" = xyes ; then NCURSES_MOUSE_VERSION=2 CF_NCURSES_ABI_6 fi AC_SUBST(NCURSES_MOUSE_VERSION) ### use option --enable-ext-putwin to turn on extended screendumps AC_MSG_CHECKING(if you want to use extended putwin/screendump) AC_ARG_ENABLE(ext-putwin, [ --enable-ext-putwin compile with extended putwin/screendump], [with_ext_putwin=$enableval], [with_ext_putwin=$cf_dft_ext_putwin]) AC_MSG_RESULT($with_ext_putwin) if test "x$with_ext_putwin" = xyes ; then AC_DEFINE(NCURSES_EXT_PUTWIN,1,[Define to 1 to compile with extended putwin/screendump]) fi AC_MSG_CHECKING(if you want \$NCURSES_NO_PADDING code) AC_ARG_ENABLE(no-padding, [ --enable-no-padding compile with $NCURSES_NO_PADDING code], [with_no_padding=$enableval], [with_no_padding=$with_ext_funcs]) AC_MSG_RESULT($with_no_padding) test "x$with_no_padding" = xyes && AC_DEFINE(NCURSES_NO_PADDING,1,[Define to 1 to compile with $NCURSES_NO_PADDING code]) AC_CHECK_SIZEOF([signed char], 0) if test "$ac_cv_sizeof_signed_char" = 1 ; then NCURSES_SBOOL="signed char" else NCURSES_SBOOL="char" fi AC_MSG_CHECKING(if you want to use signed Boolean array in term.h) AC_ARG_ENABLE(signed-char, [ --enable-signed-char compile using signed Boolean's in term.h], [with_signed_char=$enableval], [with_signed_char=no]) AC_MSG_RESULT($with_signed_char) test "x$with_signed_char" != xyes && NCURSES_SBOOL="char" AC_SUBST(NCURSES_SBOOL) ### use option --enable-sigwinch to turn on use of SIGWINCH logic AC_MSG_CHECKING(if you want SIGWINCH handler) AC_ARG_ENABLE(sigwinch, [ --enable-sigwinch compile with SIGWINCH handler], [with_sigwinch=$enableval], [with_sigwinch=$with_ext_funcs]) AC_MSG_RESULT($with_sigwinch) test "x$with_sigwinch" = xyes && AC_DEFINE(USE_SIGWINCH,1,[Define to 1 to compile with SIGWINCH handler]) ### use option --enable-tcap-names to allow user to define new capabilities AC_MSG_CHECKING(if you want user-definable terminal capabilities like termcap) AC_ARG_ENABLE(tcap-names, [ --enable-tcap-names compile with user-definable terminal capabilities], [with_tcap_names=$enableval], [with_tcap_names=$with_ext_funcs]) AC_MSG_RESULT($with_tcap_names) NCURSES_XNAMES=0 test "x$with_tcap_names" = xyes && NCURSES_XNAMES=1 AC_SUBST(NCURSES_XNAMES) ############################################################################### # These options are relatively safe to experiment with. CF_HELP_MESSAGE(Development Code:) AC_MSG_CHECKING(if you want all development code) AC_ARG_WITH(develop, [ --without-develop disable development options], [with_develop=$withval], [with_develop=no]) AC_MSG_RESULT($with_develop) ### use option --enable-hard-tabs to turn on use of hard-tabs optimize AC_MSG_CHECKING(if you want hard-tabs code) AC_ARG_ENABLE(hard-tabs, [ --enable-hard-tabs compile with hard-tabs code],, [enable_hard_tabs=$with_develop]) AC_MSG_RESULT($enable_hard_tabs) test "x$enable_hard_tabs" = xyes && AC_DEFINE(USE_HARD_TABS,1,[Define to 1 to compile with hard-tabs code]) ### use option --enable-xmc-glitch to turn on use of magic-cookie optimize AC_MSG_CHECKING(if you want limited support for xmc) AC_ARG_ENABLE(xmc-glitch, [ --enable-xmc-glitch compile with support for xmc (magic-cookie)],, [enable_xmc_glitch=$with_develop]) AC_MSG_RESULT($enable_xmc_glitch) test "x$enable_xmc_glitch" = xyes && AC_DEFINE(USE_XMC_SUPPORT,1,[Define to 1 to compile with support for xmc (magic-cookie)]) ############################################################################### # These are just experimental, probably should not be in a package: CF_HELP_MESSAGE(Experimental Code:) AC_MSG_CHECKING(if you do not want to assume colors are white-on-black) AC_ARG_ENABLE(assumed-color, [ --disable-assumed-color do not assume anything about default-colors], [with_assumed_color=$enableval], [with_assumed_color=yes]) AC_MSG_RESULT($with_assumed_color) test "x$with_assumed_color" = xyes && AC_DEFINE(USE_ASSUMED_COLOR,1,[Define to 1 to assume things about default-colors]) ### use option --enable-hashmap to turn on use of hashmap scrolling logic AC_MSG_CHECKING(if you want hashmap scrolling-optimization code) AC_ARG_ENABLE(hashmap, [ --disable-hashmap compile without hashmap scrolling-optimization], [with_hashmap=$enableval], [with_hashmap=yes]) AC_MSG_RESULT($with_hashmap) test "x$with_hashmap" = xyes && AC_DEFINE(USE_HASHMAP,1,[Define to 1 to compile with hashmap scrolling-optimization]) ### use option --enable-colorfgbg to turn on use of $COLORFGBG environment AC_MSG_CHECKING(if you want colorfgbg code) AC_ARG_ENABLE(colorfgbg, [ --enable-colorfgbg compile-in experimental $COLORFGBG code], [with_colorfgbg=$enableval], [with_colorfgbg=no]) AC_MSG_RESULT($with_colorfgbg) test "x$with_colorfgbg" = xyes && AC_DEFINE(USE_COLORFGBG,1,[Define to 1 to compile-in experimental $COLORFGBG code]) ### use option --enable-interop to turn on use of bindings used for interop AC_MSG_CHECKING(if you want interop bindings) AC_ARG_ENABLE(interop, [ --enable-interop compile-in interop bindings], [with_exp_interop=$enableval], [with_exp_interop=$cf_dft_interop]) AC_MSG_RESULT($with_exp_interop) NCURSES_INTEROP_FUNCS=0 test "x$with_exp_interop" = xyes && NCURSES_INTEROP_FUNCS=1 AC_SUBST(NCURSES_INTEROP_FUNCS) # This is still experimental (20080329), but should ultimately be moved to # the script-block --with-normal, etc. CF_WITH_PTHREAD if test "x$with_pthread" != xno; then AC_CHECK_FUNC(pthread_kill,[ AC_MSG_CHECKING(if you want to allow EINTR in wgetch with pthreads) AC_ARG_ENABLE(pthreads-eintr, [ --enable-pthreads-eintr enable EINTR in wgetch with pthreads], [use_pthreads_eintr=$enableval], [use_pthreads_eintr=no]) AC_MSG_RESULT($use_pthreads_eintr) if test "x$use_pthreads_eintr" = xyes ; then AC_DEFINE(USE_PTHREADS_EINTR,1,[Define to 1 to enable EINTR in wgetch with pthreads]) fi]) AC_MSG_CHECKING(if you want to use weak-symbols for pthreads) AC_ARG_ENABLE(weak-symbols, [ --enable-weak-symbols enable weak-symbols for pthreads], [use_weak_symbols=$enableval], [use_weak_symbols=no]) AC_MSG_RESULT($use_weak_symbols) if test "x$use_weak_symbols" = xyes ; then CF_WEAK_SYMBOLS else cf_cv_weak_symbols=no fi if test "x$cf_cv_weak_symbols" = xyes ; then AC_DEFINE(USE_WEAK_SYMBOLS,1,[Define to 1 to enable weak-symbols for pthreads]) fi fi PTHREAD= if test "x$with_pthread" = "xyes" ; then AC_DEFINE(USE_PTHREADS,1,[Define to 1 to use pthreads feature]) enable_reentrant=yes if test "x$cf_cv_weak_symbols" = xyes ; then PTHREAD=-lpthread fi fi AC_SUBST(PTHREAD) # Reentrant code has to be opaque; there's little advantage to making ncurses # opaque outside of that, so there is no --enable-opaque option. We can use # this option without --with-pthreads, but this will be always set for # pthreads. AC_MSG_CHECKING(if you want reentrant code) AC_ARG_ENABLE(reentrant, [ --enable-reentrant compile with reentrant code], [with_reentrant=$enableval], [with_reentrant=no]) AC_MSG_RESULT($with_reentrant) if test "x$with_reentrant" = xyes ; then cf_cv_enable_reentrant=1 cf_cv_enable_opaque="NCURSES_INTERNALS" NCURSES_OPAQUE=1 NCURSES_SIZE_T=int if test "x$cf_cv_weak_symbols" = xyes ; then CF_REMOVE_LIB(LIBS,$LIBS,pthread) CF_ADD_LIB(pthread,TEST_LIBS) CF_ADD_LIB(pthread,TEST_LIBS2) else # when not using weak symbols but with_reentrant, # add 't' to the library suffix on all platforms # except cygwin, where we only do that if ALSO # compiling with full thread support. case "$host" in (*cygwin* | *msys*) if test "$with_pthread" = "yes" ; then if test "x$disable_lib_suffixes" = "xno" ; then LIB_SUFFIX="t${LIB_SUFFIX}" fi fi ;; (*) if test "x$disable_lib_suffixes" = "xno" ; then LIB_SUFFIX="t${LIB_SUFFIX}" fi ;; esac fi AC_DEFINE(USE_REENTRANT,1,[Define to 1 to use reentrant feature]) CF_NCURSES_ABI_6 else cf_cv_enable_reentrant=0 cf_cv_enable_opaque="NCURSES_OPAQUE" NCURSES_OPAQUE=0 NCURSES_SIZE_T=short fi AC_SUBST(cf_cv_enable_reentrant) AC_SUBST(cf_cv_enable_opaque) AC_SUBST(NCURSES_OPAQUE) AC_SUBST(NCURSES_SIZE_T) ### Allow using a different wrap-prefix if test "$cf_cv_enable_reentrant" != 0 || test "$BROKEN_LINKER" = 1 ; then AC_MSG_CHECKING(for prefix used to wrap public variables) AC_ARG_WITH(wrap-prefix, [ --with-wrap-prefix=XXX override prefix used for public variables], [NCURSES_WRAP_PREFIX=$withval], [NCURSES_WRAP_PREFIX=_nc_]) AC_MSG_RESULT($NCURSES_WRAP_PREFIX) else NCURSES_WRAP_PREFIX=_nc_ fi AC_SUBST(NCURSES_WRAP_PREFIX) AC_DEFINE_UNQUOTED(NCURSES_WRAP_PREFIX,"$NCURSES_WRAP_PREFIX",[Define to override _nc_ prefix]) AC_MSG_CHECKING(if you want experimental safe-sprintf code) AC_ARG_ENABLE(safe-sprintf, [ --enable-safe-sprintf compile with experimental safe-sprintf code], [with_safe_sprintf=$enableval], [with_safe_sprintf=no]) AC_MSG_RESULT($with_safe_sprintf) test "x$with_safe_sprintf" = xyes && AC_DEFINE(USE_SAFE_SPRINTF,1,[Define to 1 to compile with experimental safe-sprintf code]) ### use option --disable-scroll-hints to turn off use of scroll-hints scrolling logic # when hashmap is used scroll hints are useless if test "$with_hashmap" = no ; then AC_MSG_CHECKING(if you want to experiment without scrolling-hints code) AC_ARG_ENABLE(scroll-hints, [ --disable-scroll-hints compile without scroll-hints code], [with_scroll_hints=$enableval], [with_scroll_hints=yes]) AC_MSG_RESULT($with_scroll_hints) test "x$with_scroll_hints" = xyes && AC_DEFINE(USE_SCROLL_HINTS,1,[Define to 1 to compile without scroll-hints code]) fi AC_MSG_CHECKING(if you want wgetch-events code) AC_ARG_ENABLE(wgetch-events, [ --enable-wgetch-events compile with wgetch-events code], [with_wgetch_events=$enableval], [with_wgetch_events=no]) AC_MSG_RESULT($with_wgetch_events) test "x$with_wgetch_events" = xyes && AC_DEFINE(NCURSES_WGETCH_EVENTS,1,[Define to 1 to compile with wgetch-events code]) ############################################################################### CF_HELP_MESSAGE(Testing/development Options:) ### use option --disable-echo to suppress full display compiling commands CF_DISABLE_ECHO if test "x$enable_echo" = xyes; then ECHO_LINK= else ECHO_LINK='@ echo linking $@ ... ;' test -n "$LIBTOOL" && LIBTOOL="$LIBTOOL --silent" test -n "$LIBTOOL_CXX" && LIBTOOL_CXX="$LIBTOOL_CXX --silent" fi AC_SUBST(ECHO_LINK) ### use option --enable-warnings to turn on all gcc warnings AC_MSG_CHECKING(if you want to see compiler warnings) AC_ARG_ENABLE(warnings, [ --enable-warnings build: turn on GCC compiler warnings], [with_warnings=$enableval]) AC_MSG_RESULT($with_warnings) if test "x$with_warnings" = "xyes"; then CF_ADD_ADAFLAGS(-gnatg) CF_GCC_WARNINGS(Wno-unknown-pragmas Wswitch-enum) if test "x$cf_with_cxx" = xyes ; then CF_GXX_WARNINGS(Wno-unused) fi fi CF_GCC_ATTRIBUTES CF_ENABLE_STRING_HACKS ### use option --enable-assertions to turn on generation of assertion code AC_MSG_CHECKING(if you want to enable runtime assertions) AC_ARG_ENABLE(assertions, [ --enable-assertions test: turn on generation of assertion code], [with_assertions=$enableval], [with_assertions=no]) AC_MSG_RESULT($with_assertions) if test -n "$GCC" then if test "$with_assertions" = no then CPPFLAGS="$CPPFLAGS -DNDEBUG" else CF_ADD_ADAFLAGS(-gnata) fi fi ### use option --disable-leaks to suppress "permanent" leaks, for testing CF_DISABLE_LEAKS AC_DEFINE(HAVE_NC_ALLOC_H,1,[Define to 1 if we have nc_alloc.h header]) ### use option --enable-expanded to generate certain macros as functions AC_ARG_ENABLE(expanded, [ --enable-expanded test: generate functions for certain macros], [test "x$enableval" = xyes && AC_DEFINE(NCURSES_EXPANDED,1,[Define to 1 to generate functions for certain macros])]) ### use option --disable-macros to suppress macros in favor of functions AC_ARG_ENABLE(macros, [ --disable-macros test: use functions rather than macros], [test "$enableval" = no && AC_DEFINE(NCURSES_NOMACROS,1,[Define to 1 to use functions rather than macros])]) # Normally we only add trace() to the debug-library. Allow this to be # extended to all models of the ncurses library: cf_all_traces=no case "$CFLAGS $CPPFLAGS" in (*-DTRACE*) cf_all_traces=yes ;; esac AC_MSG_CHECKING(whether to add trace feature to all models) AC_ARG_WITH(trace, [ --with-trace test: add trace() function to all models of ncurses], [cf_with_trace=$withval], [cf_with_trace=$cf_all_traces]) AC_MSG_RESULT($cf_with_trace) if test "x$cf_with_trace" = xyes ; then LIB_TRACING=all ADA_TRACE=TRUE CF_ADD_CFLAGS(-DTRACE) else LIB_TRACING=DEBUG ADA_TRACE=FALSE fi AC_SUBST(ADA_TRACE) CF_DISABLE_GNAT_PROJECTS ### Checks for libraries. case $cf_cv_system_name in (*mingw32*|*mingw64*) CPPFLAGS="$CPPFLAGS -DWINVER=0x0501 -DWIN32_LEAN_AND_MEAN" LIBS=" -lpsapi $LIBS" ;; (*) AC_CHECK_FUNC(gettimeofday, AC_DEFINE(HAVE_GETTIMEOFDAY,1,[Define to 1 if we have gettimeofday function]),[ AC_CHECK_LIB(bsd, gettimeofday, AC_DEFINE(HAVE_GETTIMEOFDAY,1,[Define to 1 if we have gettimeofday function]) CF_ADD_LIB(bsd))])dnl CLIX: bzero, select, gettimeofday ;; esac CF_MATH_LIB(MATH_LIB,pow(sin(x),x)) AC_SUBST(MATH_LIB) ### Checks for header files. AC_STDC_HEADERS AC_HEADER_DIRENT AC_HEADER_TIME CF_REGEX dnl These are some other potentially nonportable headers. AC_CHECK_HEADERS( \ fcntl.h \ getopt.h \ limits.h \ locale.h \ math.h \ poll.h \ sys/bsdtypes.h \ sys/ioctl.h \ sys/param.h \ sys/poll.h \ sys/select.h \ sys/time.h \ sys/times.h \ ttyent.h \ unistd.h \ wctype.h \ ) CF_GETOPT_HEADER # check for ISC (this may also define _POSIX_SOURCE) # Note: even non-Posix ISC needs to declare fd_set if test "x$ISC" = xyes ; then AC_CHECK_LIB(cposix,main) AC_CHECK_LIB(inet,bzero,CF_ADD_LIB(inet))dnl also 'select()' fi CF_SYS_TIME_SELECT ### checks for compiler characteristics AC_LANG_C AC_C_CONST CF_C_INLINE(NCURSES_INLINE,1200) CF_SIG_ATOMIC_T if test $NCURSES_CHTYPE = auto ; then CF_TYPEOF_CHTYPE else cf_cv_typeof_chtype=$NCURSES_CHTYPE fi test "$cf_cv_typeof_chtype" = unsigned && cf_cv_typeof_chtype="" AC_SUBST(cf_cv_typeof_chtype) CF_UNSIGNED_LITERALS cf_cv_1UL="1" test ".$cf_cv_unsigned_literals" = .yes && cf_cv_1UL="${cf_cv_1UL}U" test ".$cf_cv_typeof_chtype" = .long && cf_cv_1UL="${cf_cv_1UL}L" AC_SUBST(cf_cv_1UL) if test $NCURSES_MMASK_T = auto ; then cf_cv_typeof_mmask_t=long else cf_cv_typeof_mmask_t=$NCURSES_MMASK_T fi test "$cf_cv_typeof_mmask_t" = unsigned && cf_cv_typeof_mmask_t="" AC_SUBST(cf_cv_typeof_mmask_t) ### Checks for external-data CF_ERRNO CF_LINK_DATAONLY ### Checks for library functions. AC_CHECK_FUNCS( \ getcwd \ getegid \ geteuid \ getopt \ getttynam \ issetugid \ poll \ putenv \ remove \ select \ setbuf \ setbuffer \ setenv \ setvbuf \ sigaction \ sigvec \ strdup \ strstr \ tcgetpgrp \ times \ vsnprintf \ ) if test "x$ac_cv_func_getopt" = xno && test "x$cf_with_progs$cf_with_tests" != xnono; then AC_MSG_ERROR(getopt is required for building programs) fi if test "x$with_getcap" = "xyes" ; then CF_CGETENT fi CF_ISASCII CF_STRUCT_SIGACTION CF_FUNC_NANOSLEEP CF_FUNC_TERMIOS CF_FUNC_VSSCANF CF_MKSTEMP # setup for prototype of fallback for vsscanf() CF_SUBST_IF(["$cf_cv_func_vsscanf" = vsscanf], HAVE_VSSCANF, 1, 0) dnl FIXME (may need this) AC_SYS_RESTARTABLE_SYSCALLS if test "x$cross_compiling" = xyes ; then AC_MSG_WARN(cross compiling: assume setvbuf params not reversed) else AC_FUNC_SETVBUF_REVERSED fi AC_CHECK_TYPE(intptr_t, long) AC_CHECK_TYPE(ssize_t, int) CF_TYPE_SIGACTION CF_SIZECHANGE CF_FUNC_MEMMOVE CF_FUNC_POLL CF_VA_COPY AC_FUNC_VFORK # special check for test/ditto.c CF_FUNC_OPENPTY if test "$cf_cv_func_openpty" != no ; then AC_DEFINE_UNQUOTED(USE_OPENPTY_HEADER,<$cf_cv_func_openpty>,[Define to actual header for openpty function]) AC_DEFINE(USE_XTERM_PTY,1,[Define to 1 if we should assume xterm pseudoterminal interface]) if test "x$cf_cv_lib_util" = xyes ; then CF_ADD_LIB(util,TEST_LIBS) fi fi AC_SUBST(TEST_LIBS) AC_SUBST(TEST_LIBS2) if test "$with_hashed_db" != no ; then AC_DEFINE(USE_HASHED_DB,1,[Define to 1 if we should build terminfo in hashed database]) CF_HASHED_DB($with_hashed_db) fi dnl We'll do our own -g libraries, unless the user's overridden via $CFLAGS if test -z "$cf_user_CFLAGS" && test "$with_no_leaks" = no ; then CF_STRIP_G_OPT(CFLAGS) CF_STRIP_G_OPT(CXXFLAGS) fi # Just in case, check if the C compiler has a bool type. CF_BOOL_DECL(cf_cv_cc_bool_type) # Check for C++ compiler characteristics (and ensure that it's there!) if test -n "$CXX" ; then AC_LANG_CPLUSPLUS CF_STDCPP_LIBRARY CF_PROG_CC_C_O(CXX) case $GXX_VERSION in (1*|2.[0-6]*) cf_cxx_library=yes ;; (*-2.7*|2.7*) CF_GPP_LIBRARY ;; (*) cf_cxx_library=no ;; esac AC_CHECK_HEADERS(typeinfo) CF_CXX_IOSTREAM_NAMESPACE CF_BOOL_DECL CF_BOOL_SIZE CF_ETIP_DEFINES CF_CPP_PARAM_INIT CF_CPP_STATIC_CAST CF_CXX_AR_FLAGS else cf_cxx_library=no cf_cv_builtin_bool=1 # Just because we are not configuring against C++ right now does not # mean that a user will not want to use C++. Some distributors disable # the C++ portion of this configuration as a shortcut (or just to avoid # compiling the demo in the c++ directory). So we need a reasonable # default for the 'bool' type. # # Caveat: since the storage of the bool type is not standardized, it # may change. if test "$NCURSES_BOOL" != auto ; then cf_cv_type_of_bool=$NCURSES_BOOL cf_cv_header_stdbool_h=0 else if test "$cf_cv_header_stdbool_h" = 1 ; then CF_BOOL_SIZE else AC_MSG_CHECKING(for fallback type of bool) case "$host_cpu" in (i?86) cf_cv_type_of_bool=char ;; (*) cf_cv_type_of_bool=int ;; esac AC_MSG_RESULT($cf_cv_type_of_bool) fi fi fi AC_SUBST(CXXLIBS) # If the C compiler did not declare bool, and we did not determine that the C++ # compiler does not declare bool, turn on an ifdef in curses.h that makes the # ncurses library use the same type as C++ bool. Note that this allows one to # specify the type of bool in a configure-script option and postpone # integration with the C++ compiler provided that the types are compatible. USE_CXX_BOOL=1 if test $cf_cv_cc_bool_type = 1 then # oops: C has a bool. Unlikely, but C++ could differ. USE_CXX_BOOL=0 elif test $cf_cv_builtin_bool = 0 then # C++ has no bool USE_CXX_BOOL=0 else # this is the normal case USE_CXX_BOOL='defined(__cplusplus)' fi AC_SUBST(USE_CXX_BOOL) CF_HELP_MESSAGE(Ada95 Binding Options:) dnl If the Ada95 source-tree is present, add that to the build unless it will dnl not work, or was not requested. if test -f "${srcdir}/Ada95/Makefile.in" ; then dnl libtool does not know anything about GNAT, though a change made in 1998 dnl provided for it "someday". Disable the ada subtree if we are using dnl libtool -TD 20070714 if test "$cf_with_ada" != "no" ; then if test "$with_libtool" != "no"; then AC_MSG_WARN(libtool does not support Ada - disabling feature) cf_with_ada=no fi fi dnl Check for availability of GNU Ada Translator (GNAT). dnl At the moment we support no other Ada95 compiler. if test "$cf_with_ada" != "no" ; then CF_PROG_GNAT if test "x$cf_cv_prog_gnat_correct" = xyes; then CF_ADD_ADAFLAGS(-gnatpn) CF_FIXUP_ADAFLAGS CF_GNATPREP_OPT_T CF_GNAT_GENERICS CF_GNAT_SIGINT CF_GNAT_PROJECTS CF_WITH_ADA_COMPILER cf_ada_package=terminal_interface AC_SUBST(cf_ada_package) CF_WITH_ADA_INCLUDE CF_WITH_ADA_OBJECTS CF_WITH_ADA_SHAREDLIB fi fi else cf_with_ada=no fi # do this "late" to avoid conflict with header-checks if test "x$with_widec" = xyes ; then AC_CHECK_SIZEOF(wchar_t) fi ### Construct the ncurses library-subsets, if any, from this set of keywords: ### none, base, ext_funcs, ext_tinfo, ticlib, termlib, widechar ### ### ticlib modules may be a separate library, otherwise contained in termlib. ### termlib modules may be a separate library, otherwise contained in ncurses. ### ### The of "+" or " " between the tokens controls the way the script ### chooses to split module lists into libraries. ### ### (see CF_LIB_RULES). AC_MSG_CHECKING(for library subsets) LIB_SUBSETS= if test "x$cf_with_progs" = xyes || test "$with_ticlib" != no || test "$with_termcap" != no; then LIB_SUBSETS="${LIB_SUBSETS}ticlib" if test "$with_ticlib" != no ; then LIB_SUBSETS="${LIB_SUBSETS} " else LIB_SUBSETS="${LIB_SUBSETS}+" fi fi LIB_SUBSETS="${LIB_SUBSETS}termlib" test "x$with_ext_funcs" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+ext_tinfo" if test "$with_termlib" != no ; then LIB_SUBSETS="${LIB_SUBSETS} " else LIB_SUBSETS="${LIB_SUBSETS}+" fi LIB_SUBSETS="${LIB_SUBSETS}base" # Most term-driver calls are to tinfo, but some like init_pair are to the # base library (so it resides in base). if test "$with_term_driver" != no ; then LIB_SUBSETS="${LIB_SUBSETS}+port_drivers" case $cf_cv_system_name in (*mingw32*|*mingw64*) LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32con" CPPFLAGS="$CPPFLAGS -DUSE_WIN32CON_DRIVER" ;; (*) LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo" ;; esac fi test "x$with_widec" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+widechar" test "x$with_ext_funcs" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+ext_funcs" AC_MSG_RESULT($LIB_SUBSETS) ### Construct the list of include-directories to be generated CF_INCLUDE_DIRS CF_ADA_INCLUDE_DIRS ### Build up pieces for makefile rules AC_MSG_CHECKING(default library suffix) CF_LIB_TYPE($DFT_LWR_MODEL,DFT_ARG_SUFFIX)dnl AC_SUBST(DFT_ARG_SUFFIX)dnl the string to append to "-lncurses" ("") AC_MSG_RESULT($DFT_ARG_SUFFIX) AC_MSG_CHECKING(default library-dependency suffix) CF_LIB_SUFFIX($DFT_LWR_MODEL,DFT_LIB_SUFFIX,DFT_DEP_SUFFIX)dnl AC_SUBST(DFT_DEP_SUFFIX)dnl the corresponding library-suffix (".a") AC_MSG_RESULT($DFT_DEP_SUFFIX) AC_MSG_CHECKING(default object directory) CF_OBJ_SUBDIR($DFT_LWR_MODEL,DFT_OBJ_SUBDIR)dnl AC_SUBST(DFT_OBJ_SUBDIR)dnl the default object-directory ("obj") AC_MSG_RESULT($DFT_OBJ_SUBDIR) if test "x$cf_with_cxx" = xyes ; then AC_MSG_CHECKING(c++ library-dependency suffix) if test "$with_libtool" != "no"; then # libtool thinks it can make c++ shared libraries (perhaps only g++) CXX_LIB_SUFFIX=$DFT_DEP_SUFFIX elif test "$with_shared_cxx" != "no"; then # also for g++ users... CXX_LIB_SUFFIX=$DFT_DEP_SUFFIX else # we normally make a static library because C/C++ library rules differ CF_LIB_SUFFIX(normal,CXX_LIB_SUFFIX,CXX_DEP_SUFFIX) fi AC_MSG_RESULT($CXX_LIB_SUFFIX) AC_SUBST(CXX_LIB_SUFFIX) fi # do not want -ldl in build except as needed for -lncurses dependency if test "x$with_dlsym" = xyes ; then if test $DFT_LWR_MODEL = shared || \ test $DFT_LWR_MODEL = libtool ; then CF_REMOVE_LIB(LIBS,$LIBS,dl) fi fi ### Set up low-level terminfo dependencies for makefiles. # TICS_LIST and TINFO_LIST are needed to build libtic.so and libterm.so, but # do not need libdl TICS_LIST= if test "x$with_dlsym" = xyes ; then CF_REMOVE_LIB(TINFO_LIST,$SHLIB_LIST,dl) fi USE_ARG_SUFFIX="${DFT_ARG_SUFFIX}${EXTRA_SUFFIX}" USE_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}" USE_CFG_SUFFIX=${DFT_ARG_SUFFIX}${cf_cv_abi_version} if test -n "$EXTRA_SUFFIX" && test "x$EXTRA_SUFFIX" != "x${cf_cv_abi_version}" then USE_CFG_SUFFIX="${USE_CFG_SUFFIX}${EXTRA_SUFFIX}" fi AC_SUBST(USE_ARG_SUFFIX) AC_SUBST(USE_CFG_SUFFIX) AC_SUBST(USE_LIB_SUFFIX) if test "$with_ticlib" != no ; then if test "x$with_ticlib" != xyes ; then TICS_NAME=$with_ticlib TICS_SUFFIX="`echo ${DFT_LIB_SUFFIX}|sed -e "s/^${USE_LIB_SUFFIX}//"`" TICS_ARG_SUFFIX="${with_ticlib}`echo ${USE_ARG_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`" TICS_DEP_SUFFIX="${with_ticlib}`echo ${DFT_DEP_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`" TICS_LIB_SUFFIX="${with_ticlib}" else TICS_SUFFIX=${DFT_LIB_SUFFIX} TICS_ARG_SUFFIX="${TICS_NAME}${USE_ARG_SUFFIX}" TICS_DEP_SUFFIX="${TICS_NAME}${DFT_DEP_SUFFIX}" TICS_LIB_SUFFIX="${TICS_NAME}${USE_LIB_SUFFIX}" fi TICS_LDFLAGS="-L${LIB_DIR}" TICS_LIBS="-l${TICS_ARG_SUFFIX}" else TICS_SUFFIX=${DFT_LIB_SUFFIX} TICS_LDFLAGS="-L${LIB_DIR}" TICS_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX}" fi AC_SUBST(TICS_ARG_SUFFIX) AC_SUBST(TICS_DEP_SUFFIX) AC_SUBST(TICS_LIB_SUFFIX) AC_SUBST(TICS_LDFLAGS) AC_SUBST(TICS_LIBS) if test "$with_termlib" != no ; then if test "x$with_termlib" != xyes ; then TINFO_NAME=$with_termlib TINFO_SUFFIX="`echo ${DFT_LIB_SUFFIX}|sed -e "s/^${USE_LIB_SUFFIX}//"`" TINFO_ARG_SUFFIX="${with_termlib}`echo ${USE_ARG_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`" TINFO_DEP_SUFFIX="${with_termlib}`echo ${DFT_DEP_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`" TINFO_LIB_SUFFIX="${with_termlib}" else TINFO_SUFFIX=${DFT_LIB_SUFFIX} TINFO_ARG_SUFFIX="${TINFO_NAME}${USE_ARG_SUFFIX}" TINFO_DEP_SUFFIX="${TINFO_NAME}${DFT_DEP_SUFFIX}" TINFO_LIB_SUFFIX="${TINFO_NAME}${USE_LIB_SUFFIX}" fi TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${TINFO_DEP_SUFFIX}" TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${TINFO_DEP_SUFFIX}" if test "$DFT_LWR_MODEL" = "libtool"; then TEST_ARGS="${TEST_DEPS}" TEST_ARG2="${TEST_DEP2}" TINFO_LDFLAGS="-L${LIB_DIR}" TINFO_LIBS="$TEST_ARGS" TICS_LIST="$SHLIB_LIST $TEST_ARGS" SHLIB_LIST="${SHLIB_LIST} $TEST_ARGS" else TEST_ARGS="-l${TINFO_ARG_SUFFIX}" TEST_ARG2="-l${TINFO_ARG_SUFFIX}" if test "x$with_term_driver" != xno ; then TICS_LIST="$SHLIB_LIST -l${LIB_NAME}${USE_ARG_SUFFIX}" TICS_LIBS="$TICS_LIBS -l${LIB_NAME}${USE_ARG_SUFFIX}" TINFO_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARGS" else TICS_LIST="$SHLIB_LIST -l${TINFO_LIB_SUFFIX}" TINFO_LIBS="$TEST_ARGS" fi TINFO_LDFLAGS="-L${LIB_DIR}" SHLIB_LIST="$SHLIB_LIST -l${TINFO_LIB_SUFFIX}" fi else # the next lines are needed for linking libtic over libncurses TINFO_NAME=${LIB_NAME} TINFO_SUFFIX=${DFT_LIB_SUFFIX} TINFO_ARG_SUFFIX=${LIB_NAME}${USE_ARG_SUFFIX} if test "x$with_tic_depends" = xyes ; then TICS_LIST="$SHLIB_LIST -l${LIB_NAME}${USE_ARG_SUFFIX}" else TICS_LIST="$SHLIB_LIST" fi TINFO_LDFLAGS="-L${LIB_DIR}" TINFO_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX}" fi if test "$DFT_LWR_MODEL" = shared ; then case $cf_cv_system_name in (cygwin*|msys*) # "lib" files have ".dll.a" suffix, "cyg"or "msys-" files have ".dll" TINFO_SUFFIX=.dll ;; esac fi AC_SUBST(TINFO_ARG_SUFFIX) AC_SUBST(TINFO_DEP_SUFFIX) AC_SUBST(TINFO_LIB_SUFFIX) AC_SUBST(TINFO_LDFLAGS) AC_SUBST(TINFO_LIBS) if test "x$with_dlsym" = xyes ; then CF_REMOVE_LIB(TICS_LIST,$TICS_LIST,dl) fi if test "$DFT_LWR_MODEL" = "libtool"; then OBJEXT=lo fi # needed for Ada95 TINFO_LDFLAGS2=`echo "$TINFO_LDFLAGS" | sed -e 's,-L\.\./,-L../../,'` AC_SUBST(TINFO_LDFLAGS2) case $DFT_LWR_MODEL in (normal|debug|profile) CF_LDFLAGS_STATIC ;; esac AC_MSG_CHECKING(where we will install curses.h) AC_SUBST(includesubdir) includesubdir= if test "$with_overwrite" = no && \ ( test "x$includedir" = 'x${prefix}/include' || \ test "x$includedir" = "x${prefix}/include" ) then includesubdir="/ncurses${USE_LIB_SUFFIX}" fi AC_MSG_RESULT(${includedir}${includesubdir}) ### Resolve a conflict between normal and wide-curses by forcing applications ### that will need libutf8 to add it to their configure script. if test "$with_overwrite" != no ; then if test "$NCURSES_LIBUTF8" = 1 ; then NCURSES_LIBUTF8='defined(HAVE_LIBUTF8_H)' AC_MSG_WARN(Wide-character applications must define HAVE_LIBUTF8_H to include curses.h) fi fi WITH_OVERWRITE=$with_overwrite AC_SUBST(WITH_OVERWRITE) AC_SUBST(TICS_LIST) AC_SUBST(TINFO_LIST) AC_SUBST(SHLIB_LIST) # used to separate tack out of the tree NCURSES_TREE= AC_SUBST(NCURSES_TREE) ### predefined stuff for the test programs AC_DEFINE(HAVE_SLK_COLOR,1,[Define to 1 if we have slk_color for test-programs]) ### Construct the list of subdirectories for which we'll customize makefiles ### with the appropriate compile-rules. CF_SRC_MODULES($modules_to_build) if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = "xyes"; then SUB_MAKEFILES="$SUB_MAKEFILES Ada95/gen/adacurses${USE_CFG_SUFFIX}-config:Ada95/gen/adacurses-config.in" SUB_MAKEFILES="$SUB_MAKEFILES man/adacurses${USE_CFG_SUFFIX}-config.1:man/MKada_config.in" fi CF_DIRS_TO_MAKE # symbols that differ when compiling Ada95 by itself. NCURSES_SHLIB2=$SHELL' $(top_srcdir)/misc/shlib' AC_SUBST(NCURSES_SHLIB2) # values to use as strings AC_DEFINE_UNQUOTED(NCURSES_PATHSEP,'$PATH_SEPARATOR',[Define to override ':' as library path-separator]) AC_DEFINE_UNQUOTED(NCURSES_VERSION_STRING, "${NCURSES_MAJOR}.${NCURSES_MINOR}.${NCURSES_PATCH}",[Define to 1 if machine has ample memory for tic]) ### Now that we're done running tests, add the compiler-warnings, if any CF_ADD_CFLAGS($EXTRA_CFLAGS) ### Define substitutions for header files to avoid name-pollution CF_SUBST_IF(["x$cf_cv_have_tcgetattr" = xyes], HAVE_TCGETATTR, 1, 0) CF_SUBST_IF(["x$ac_cv_header_stdint_h" = xyes], HAVE_STDINT_H, 1, 0) CF_SUBST_IF(["x$ac_cv_header_termio_h" = xyes], HAVE_TERMIO_H, 1, 0) CF_SUBST_IF(["x$ac_cv_header_termios_h" = xyes], HAVE_TERMIOS_H, 1, 0) ################################################################################ test "x$use_database" = xyes && \ SUB_MAKEFILES="$SUB_MAKEFILES misc/run_tic.sh:misc/run_tic.in" SUB_MAKEFILES="$SUB_MAKEFILES misc/ncurses-config:misc/ncurses-config.in" SUB_MAKEFILES="$SUB_MAKEFILES man/ncurses${USE_CFG_SUFFIX}-config.1:man/MKncu_config.in" if test "x$enable_pc_files" = xyes && test -z "$MAKE_PC_FILES" ; then SUB_MAKEFILES="$SUB_MAKEFILES misc/gen-pkgconfig:misc/gen-pkgconfig.in" fi AC_SUBST(cross_compiling) AC_PATH_PROG(TIC_PATH,tic,unknown,$PATH:/usr/local/ncurses/bin) if test -n "$FALLBACK_LIST" then if test "$TIC_PATH" = unknown then AC_MSG_WARN(no tic program found for fallbacks) fi fi AC_SUBST(TIC_PATH) if test "x$cf_with_tests" != xno ; then MAKE_TESTS= else MAKE_TESTS="#" fi AC_SUBST(MAKE_TESTS) ADAHTML_DIR=../../doc/html/ada AC_SUBST(ADAHTML_DIR) # these could be configurable, but are not currently PANEL_NAME=panel MENU_NAME=menu FORM_NAME=form CXX_NAME=ncurses++ AC_SUBST(PANEL_NAME) AC_SUBST(MENU_NAME) AC_SUBST(FORM_NAME) AC_SUBST(CXX_NAME) # workaround for OS/2 (20151017) case $cf_cv_system_name in (os2*) LIBTOOL_OPTS_CXX="-os2dllname ncurs++" ;; (*) LIBTOOL_OPTS_CXX= ;; esac AC_SUBST(LIBTOOL_OPTS_CXX) # workaround for g++ versus Solaris (20131116) case $cf_cv_system_name in (solaris2*) case "x$CPPFLAGS" in (*-D_XOPEN_SOURCE_EXTENDED*) CF_VERBOSE(moving _XOPEN_SOURCE_EXTENDED to work around g++ problem) CFLAGS="$CFLAGS -D_XOPEN_SOURCE_EXTENDED" CPPFLAGS=`echo "x$CPPFLAGS" | sed -e 's/^.//' -e 's/-D_XOPEN_SOURCE_EXTENDED//'` ;; esac ;; esac # Help to automatically enable the extended curses features when using either # the *-config or the ".pc" files by adding defines. AC_MSG_CHECKING(for defines to add to ncurses${USE_CFG_SUFFIX}-config script) PKG_CFLAGS= for cf_loop1 in $CPPFLAGS_after_XOPEN do cf_found=no for cf_loop2 in $CPPFLAGS_before_XOPEN do if test "x$cf_loop1" = "x$cf_loop2" then cf_found=yes break fi done test "$cf_found" = no && PKG_CFLAGS="$PKG_CFLAGS $cf_loop1" done AC_MSG_RESULT($PKG_CFLAGS) AC_SUBST(PKG_CFLAGS) # AC_CHECK_SIZEOF demands a literal parameter, no variables. So we do this. case "x$NCURSES_OSPEED" in (*short*) cf_compatible=1 ;; (*) cf_compatible=0 ;; esac AC_DEFINE_UNQUOTED(NCURSES_OSPEED_COMPAT,$cf_compatible,[Define to 1 if termcap variable ospeed is short]) case "x$cf_cv_typeof_chtype" in (xshort|xint|xlong) cf_cv_typeof_chtype="unsigned $cf_cv_typeof_chtype" ;; esac case "x$cf_cv_typeof_mmask_t" in (xshort|xint|xlong) cf_cv_typeof_mmask_t="unsigned $cf_cv_typeof_mmask_t" ;; esac # substitute into misc/Makefile to suppress # (un)install.data from the # (un)install rules. if test "x$cf_with_db_install" = "xno"; then MISC_INSTALL_DATA= MISC_UNINSTALL_DATA= else MISC_INSTALL_DATA=install.data MISC_UNINSTALL_DATA=uninstall.data fi AC_SUBST(MISC_INSTALL_DATA) AC_SUBST(MISC_UNINSTALL_DATA) SUB_SCRIPTS= dnl Override the package used for exported symbols if test -n "$PACKAGE" then PACKAGE="${PACKAGE}${DFT_ARG_SUFFIX}" export PACKAGE echo "package: $PACKAGE" fi UNALTERED_SYMS= cf_filter_syms=no if test -n "$RESULTING_SYMS" then cf_filter_syms=$cf_dft_filter_syms CF_VERBOSE(will map symbols to ABI=$cf_cv_abi_version) fi if test "x$WILDCARD_SYMS" = xno then cf_filter_syms=yes fi UNALTERED_SYMS=`echo "$RESULTING_SYMS" | sed -e 's/\\$/\\\\$/g'` if test $cf_filter_syms = yes then RESULTING_SYMS=resulting.map fi AC_SUBST(UNALTERED_SYMS) if test "x$cross_compiling" = xyes ; then ADAGEN_LDFLAGS='$(CROSS_LDFLAGS)' else ADAGEN_LDFLAGS='$(NATIVE_LDFLAGS)' fi AC_SUBST(ADAGEN_LDFLAGS) AC_OUTPUT( \ include/MKterm.h.awk \ include/curses.head:include/curses.h.in \ include/ncurses_dll.h \ include/termcap.h \ include/unctrl.h \ $SUB_SCRIPTS \ $SUB_MAKEFILES \ Makefile,[ if test "x$cf_with_tests" != xno ; then CF_PRG_RULES([$srcdir/test/mk-test.awk INSTALL=no ECHO_LINK="$ECHO_LD"], test) fi CF_LIB_RULES($SRC_SUBDIRS) if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = "xyes"; then if test -z "$USE_OLD_MAKERULES" ; then $AWK -f $srcdir/Ada95/mk-1st.awk <$srcdir/Ada95/src/modules >>Ada95/src/Makefile fi fi ],[ ### Special initialization commands, used to pass information from the ### configuration-run into config.status AWK="$AWK" ALTERNATE_SYMS="$ALTERNATE_SYMS" DFT_ARG_SUFFIX="$DFT_ARG_SUFFIX" DFT_LWR_MODEL="$DFT_LWR_MODEL" ECHO_LD="$ECHO_LD" EXTRA_SUFFIX="$EXTRA_SUFFIX" LDCONFIG="$LDCONFIG" LIBTOOL_VERSION="$LIBTOOL_VERSION" LIB_NAME="$LIB_NAME" LIB_PREFIX="$LIB_PREFIX" LIB_SUBSETS="$LIB_SUBSETS" LIB_SUFFIX="$LIB_SUFFIX" LIB_TRACING="$LIB_TRACING" LN_S="$LN_S" MAKE_TERMINFO="$MAKE_TERMINFO" NCURSES_MAJOR="$NCURSES_MAJOR" NCURSES_MINOR="$NCURSES_MINOR" NCURSES_OSPEED="$NCURSES_OSPEED" NCURSES_PATCH="$NCURSES_PATCH" SRC_SUBDIRS="$SRC_SUBDIRS" TERMINFO="$TERMINFO" TICS_ARG_SUFFIX="$TICS_ARG_SUFFIX" TICS_LIB_SUFFIX="$TICS_LIB_SUFFIX" TICS_NAME="$TICS_NAME" TICS_SUFFIX="$TICS_SUFFIX" TIC_PATH="$TIC_PATH" TINFO_ARG_SUFFIX="$TINFO_ARG_SUFFIX" TINFO_LIB_SUFFIX="$TINFO_LIB_SUFFIX" TINFO_NAME="$TINFO_NAME" TINFO_SUFFIX="$TINFO_SUFFIX" UNALTERED_SYMS="$UNALTERED_SYMS" USE_ARG_SUFFIX="$USE_ARG_SUFFIX" USE_CFG_SUFFIX="$USE_CFG_SUFFIX" USE_LIB_SUFFIX="$USE_LIB_SUFFIX" USE_OLD_MAKERULES="$USE_OLD_MAKERULES" WILDCARD_SYMS="$WILDCARD_SYMS" WITH_CURSES_H="$with_curses_h" WITH_ECHO="${enable_echo:=yes}" WITH_OVERWRITE="$with_overwrite" cf_LIST_MODELS="$cf_list_models" cf_cv_abi_version="$cf_cv_abi_version" cf_cv_do_relink="$cf_cv_do_relink" cf_cv_do_symlinks="$cf_cv_do_symlinks" cf_cv_enable_lp64="$cf_cv_enable_lp64" cf_cv_enable_opaque="$cf_cv_enable_opaque" cf_cv_prog_CC_c_o=$cf_cv_prog_CC_c_o cf_cv_prog_CXX_c_o=$cf_cv_prog_CXX_c_o cf_cv_prog_gnat_correct=$cf_cv_prog_gnat_correct cf_cv_rel_version="$cf_cv_rel_version" cf_cv_rm_so_locs="$cf_cv_rm_so_locs" cf_cv_shared_soname='$cf_cv_shared_soname' cf_cv_shlib_version="$cf_cv_shlib_version" cf_cv_shlib_version_infix="$cf_cv_shlib_version_infix" cf_cv_system_name="$cf_cv_system_name" cf_cv_term_driver="$with_term_driver" cf_with_ada="$cf_with_ada" cf_with_cxx_binding="$cf_with_cxx_binding" cf_with_db_install="$cf_with_db_install" cf_with_manpages="$cf_with_manpages" cf_with_tests="$cf_with_tests" host="$host" target="$target" with_shared_cxx="$with_shared_cxx" ],cat)dnl ${MAKE:-make} preinstall ncurses-6.0-20160213/test/0000755000175100001440000000000012657724520013445 5ustar tomusersncurses-6.0-20160213/test/demo_forms.txt0000644000175100001440000000035712154635507016343 0ustar tomusers# $Id: demo_forms.txt,v 1.3 2013/06/08 14:10:15 tom Exp $ First Name:John . Middle Name:Don . MI:D . Last Name:Smith . Comments:Hello World! . Host Name:localhost@localdomain . IP Address:192.168.1.100 . Four digits:1234 . Numeric:32768 . ncurses-6.0-20160213/test/xmas.c0000644000175100001440000010274612137025455014565 0ustar tomusers/******************************************************************************/ /* asciixmas */ /* December 1989 Larry Bartz Indianapolis, IN */ /* */ /* */ /* I'm dreaming of an ascii character-based monochrome Christmas, */ /* Just like the one's I used to know! */ /* Via a full duplex communications channel, */ /* At 9600 bits per second, */ /* Even though it's kinda slow. */ /* */ /* I'm dreaming of an ascii character-based monochrome Christmas, */ /* With ev'ry C program I write! */ /* May your screen be merry and bright! */ /* And may all your Christmases be amber or green, */ /* (for reduced eyestrain and improved visibility)! */ /* */ /* */ /* */ /* */ /* */ /* IMPLEMENTATION */ /* */ /* Feel free to modify the defined string FROMWHO to reflect you, your */ /* organization, your site, whatever. */ /* */ /* This really looks a lot better if you can turn off your cursor before */ /* execution. I wanted to do that here but very few termcap entries or */ /* terminfo definitions have the appropriate string defined. If you know */ /* the string(s) for the terminal(s) you use or which your site supports, */ /* you could call asciixmas from within a shell in which you issue the */ /* string to the terminal. The cursor is distracting but it doesn't really */ /* ruin the show. */ /* */ /* At our site, we invoke this for our users just after login and the */ /* determination of terminal type. */ /* */ /* */ /* PORTABILITY */ /* */ /* I wrote this using only the very simplest curses functions so that it */ /* might be the most portable. I was personally able to test on five */ /* different cpu/UNIX combinations. */ /* */ /* */ /* COMPILE */ /* */ /* usually this: */ /* */ /* cc -O asciixmas.c -lcurses -o asciixmas -s */ /* */ /* */ /* Zilog S8000 models 11, 21, 31, etc with ZEUS variant of SYSTEM III */ /* maybe other SYSTEM III also: */ /* */ /* cc asciixmas.c -lcurses -ltermlib -o asciixmas -s */ /* */ /* as above with optional "peephole optimizer" installed: */ /* */ /* cc -O asciixmas.c -lcurses -ltermlib -o asciixmas -s */ /* */ /* */ /* Zilog S8000 models 32, 130 with WE32100 chip and SYS V, REL2 */ /* maybe 3B2 also? */ /* */ /* cc -f -O -K sd asciixmas.c -lcurses -o asciixmas -s */ /* */ /* */ /* Pyramid, Sequent, any other "dual universe" types compile and execute */ /* under either universe. The compile line for the ucb universe (as you */ /* might expect) is the same as for SYS III UNIX: */ /* */ /* cc -O asciixmas.c -lcurses -ltermlib -o asciixmas -s */ /* */ /* The above compile will also hold true for other BSD systems. (I hope) */ /* */ /* */ /* */ /* */ /* For the Scrooges out there among you who don't want this thing to loop */ /* forever (or until the user hits a key), insert this into your compile */ /* line just after "cc" : */ /* */ /* -DNOLOOP */ /* */ /* like so: */ /* */ /* cc -DNOLOOP -O asciixmas.c -lcurses -o asciixmas -s */ /* */ /* */ /* */ /******************************************************************************/ /* * $Id: xmas.c,v 1.28 2013/04/27 19:46:53 tom Exp $ */ #include #define FROMWHO "Mark Hessling - (M.Hessling@gu.edu.au)" static int my_bg = COLOR_BLACK; static int y_pos, x_pos; static WINDOW *treescrn; static WINDOW *treescrn2; static WINDOW *treescrn3; static WINDOW *treescrn4; static WINDOW *treescrn5; static WINDOW *treescrn6; static WINDOW *treescrn7; static WINDOW *treescrn8; static WINDOW *dotdeer0; static WINDOW *stardeer0; static WINDOW *lildeer0; static WINDOW *lildeer1; static WINDOW *lildeer2; static WINDOW *lildeer3; static WINDOW *middeer0; static WINDOW *middeer1; static WINDOW *middeer2; static WINDOW *middeer3; static WINDOW *bigdeer0; static WINDOW *bigdeer1; static WINDOW *bigdeer2; static WINDOW *bigdeer3; static WINDOW *bigdeer4; static WINDOW *lookdeer0; static WINDOW *lookdeer1; static WINDOW *lookdeer2; static WINDOW *lookdeer3; static WINDOW *lookdeer4; static WINDOW *w_holiday; static WINDOW *w_del_msg; static bool *my_pairs; static int boxit(void); static int seas(void); static int greet(void); static int fromwho(void); static int tree(void); static int balls(void); static int star(void); static int strng1(void); static int strng2(void); static int strng3(void); static int strng4(void); static int strng5(void); static int reindeer(void); static int blinkit(void); static void done(int sig) GCC_NORETURN; static void set_color(WINDOW *win, chtype color) { if (has_colors()) { int n = (int) (color + 1); if (my_pairs == 0) my_pairs = typeCalloc(bool, (size_t) (COLORS + 1)); if (!my_pairs[n]) { init_pair((short) n, (short) color, (short) my_bg); my_pairs[n] = TRUE; } wattroff(win, A_COLOR); wattron(win, COLOR_PAIR(n)); } } static void unset_color(WINDOW *win) { if (has_colors()) (void) wattrset(win, COLOR_PAIR(0)); } static void look_out(int msecs) { napms(msecs); if (getch() != ERR) { beep(); done(0); } } int main(int argc GCC_UNUSED, char **argv GCC_UNUSED) { int loopy; setlocale(LC_ALL, ""); initscr(); noecho(); nonl(); refresh(); CATCHALL(done); if (has_colors()) { start_color(); #if HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) my_bg = -1; #endif } curs_set(0); if ((treescrn = newwin(16, 27, 3, 53)) == 0 || (treescrn2 = newwin(16, 27, 3, 53)) == 0 || (treescrn3 = newwin(16, 27, 3, 53)) == 0 || (treescrn4 = newwin(16, 27, 3, 53)) == 0 || (treescrn5 = newwin(16, 27, 3, 53)) == 0 || (treescrn6 = newwin(16, 27, 3, 53)) == 0 || (treescrn7 = newwin(16, 27, 3, 53)) == 0 || (treescrn8 = newwin(16, 27, 3, 53)) == 0 || (dotdeer0 = newwin(3, 71, 0, 8)) == 0 || (stardeer0 = newwin(4, 56, 0, 8)) == 0 || (lildeer0 = newwin(7, 53, 0, 8)) == 0 || (lildeer1 = newwin(2, 4, 0, 0)) == 0 || (lildeer2 = newwin(2, 4, 0, 0)) == 0 || (lildeer3 = newwin(2, 4, 0, 0)) == 0 || (middeer0 = newwin(15, 42, 0, 8)) == 0 || (middeer1 = newwin(3, 7, 0, 0)) == 0 || (middeer2 = newwin(3, 7, 0, 0)) == 0 || (middeer3 = newwin(3, 7, 0, 0)) == 0 || (bigdeer0 = newwin(10, 23, 0, 0)) == 0 || (bigdeer1 = newwin(10, 23, 0, 0)) == 0 || (bigdeer2 = newwin(10, 23, 0, 0)) == 0 || (bigdeer3 = newwin(10, 23, 0, 0)) == 0 || (bigdeer4 = newwin(10, 23, 0, 0)) == 0 || (lookdeer0 = newwin(10, 25, 0, 0)) == 0 || (lookdeer1 = newwin(10, 25, 0, 0)) == 0 || (lookdeer2 = newwin(10, 25, 0, 0)) == 0 || (lookdeer3 = newwin(10, 25, 0, 0)) == 0 || (lookdeer4 = newwin(10, 25, 0, 0)) == 0 || (w_holiday = newwin(1, 26, 3, 27)) == 0 || (w_del_msg = newwin(1, 19, 23, 60)) == 0) { endwin(); fprintf(stderr, "Cannot create windows - screen too small\n"); ExitProgram(EXIT_FAILURE); } MvWAddStr(w_del_msg, 0, 0, "Hit any key to quit"); MvWAddStr(w_holiday, 0, 0, "H A P P Y H O L I D A Y S"); /* set up the windows for our various reindeer */ /* lildeer1 */ MvWAddCh(lildeer1, 0, 0, (chtype) 'V'); MvWAddCh(lildeer1, 1, 0, (chtype) '@'); MvWAddCh(lildeer1, 1, 1, (chtype) '<'); MvWAddCh(lildeer1, 1, 2, (chtype) '>'); MvWAddCh(lildeer1, 1, 3, (chtype) '~'); /* lildeer2 */ MvWAddCh(lildeer2, 0, 0, (chtype) 'V'); MvWAddCh(lildeer2, 1, 0, (chtype) '@'); MvWAddCh(lildeer2, 1, 1, (chtype) '|'); MvWAddCh(lildeer2, 1, 2, (chtype) '|'); MvWAddCh(lildeer2, 1, 3, (chtype) '~'); /* lildeer3 */ MvWAddCh(lildeer3, 0, 0, (chtype) 'V'); MvWAddCh(lildeer3, 1, 0, (chtype) '@'); MvWAddCh(lildeer3, 1, 1, (chtype) '>'); MvWAddCh(lildeer3, 1, 2, (chtype) '<'); MvWAddCh(lildeer2, 1, 3, (chtype) '~'); /* middeer1 */ MvWAddCh(middeer1, 0, 2, (chtype) 'y'); MvWAddCh(middeer1, 0, 3, (chtype) 'y'); MvWAddCh(middeer1, 1, 2, (chtype) '0'); MvWAddCh(middeer1, 1, 3, (chtype) '('); MvWAddCh(middeer1, 1, 4, (chtype) '='); MvWAddCh(middeer1, 1, 5, (chtype) ')'); MvWAddCh(middeer1, 1, 6, (chtype) '~'); MvWAddCh(middeer1, 2, 3, (chtype) '\\'); MvWAddCh(middeer1, 2, 4, (chtype) '/'); /* middeer2 */ MvWAddCh(middeer2, 0, 2, (chtype) 'y'); MvWAddCh(middeer2, 0, 3, (chtype) 'y'); MvWAddCh(middeer2, 1, 2, (chtype) '0'); MvWAddCh(middeer2, 1, 3, (chtype) '('); MvWAddCh(middeer2, 1, 4, (chtype) '='); MvWAddCh(middeer2, 1, 5, (chtype) ')'); MvWAddCh(middeer2, 1, 6, (chtype) '~'); MvWAddCh(middeer2, 2, 3, (chtype) '|'); MvWAddCh(middeer2, 2, 5, (chtype) '|'); /* middeer3 */ MvWAddCh(middeer3, 0, 2, (chtype) 'y'); MvWAddCh(middeer3, 0, 3, (chtype) 'y'); MvWAddCh(middeer3, 1, 2, (chtype) '0'); MvWAddCh(middeer3, 1, 3, (chtype) '('); MvWAddCh(middeer3, 1, 4, (chtype) '='); MvWAddCh(middeer3, 1, 5, (chtype) ')'); MvWAddCh(middeer3, 1, 6, (chtype) '~'); MvWAddCh(middeer3, 2, 2, (chtype) '/'); MvWAddCh(middeer3, 2, 6, (chtype) '\\'); /* bigdeer1 */ MvWAddCh(bigdeer1, 0, 17, (chtype) '\\'); MvWAddCh(bigdeer1, 0, 18, (chtype) '/'); MvWAddCh(bigdeer1, 0, 20, (chtype) '\\'); MvWAddCh(bigdeer1, 0, 21, (chtype) '/'); MvWAddCh(bigdeer1, 1, 18, (chtype) '\\'); MvWAddCh(bigdeer1, 1, 20, (chtype) '/'); MvWAddCh(bigdeer1, 2, 19, (chtype) '|'); MvWAddCh(bigdeer1, 2, 20, (chtype) '_'); MvWAddCh(bigdeer1, 3, 18, (chtype) '/'); MvWAddCh(bigdeer1, 3, 19, (chtype) '^'); MvWAddCh(bigdeer1, 3, 20, (chtype) '0'); MvWAddCh(bigdeer1, 3, 21, (chtype) '\\'); MvWAddCh(bigdeer1, 4, 17, (chtype) '/'); MvWAddCh(bigdeer1, 4, 18, (chtype) '/'); MvWAddCh(bigdeer1, 4, 19, (chtype) '\\'); MvWAddCh(bigdeer1, 4, 22, (chtype) '\\'); MvWAddStr(bigdeer1, 5, 7, "^~~~~~~~~// ~~U"); MvWAddStr(bigdeer1, 6, 7, "( \\_____( /"); MvWAddStr(bigdeer1, 7, 8, "( ) /"); MvWAddStr(bigdeer1, 8, 9, "\\\\ /"); MvWAddStr(bigdeer1, 9, 11, "\\>/>"); /* bigdeer2 */ MvWAddCh(bigdeer2, 0, 17, (chtype) '\\'); MvWAddCh(bigdeer2, 0, 18, (chtype) '/'); MvWAddCh(bigdeer2, 0, 20, (chtype) '\\'); MvWAddCh(bigdeer2, 0, 21, (chtype) '/'); MvWAddCh(bigdeer2, 1, 18, (chtype) '\\'); MvWAddCh(bigdeer2, 1, 20, (chtype) '/'); MvWAddCh(bigdeer2, 2, 19, (chtype) '|'); MvWAddCh(bigdeer2, 2, 20, (chtype) '_'); MvWAddCh(bigdeer2, 3, 18, (chtype) '/'); MvWAddCh(bigdeer2, 3, 19, (chtype) '^'); MvWAddCh(bigdeer2, 3, 20, (chtype) '0'); MvWAddCh(bigdeer2, 3, 21, (chtype) '\\'); MvWAddCh(bigdeer2, 4, 17, (chtype) '/'); MvWAddCh(bigdeer2, 4, 18, (chtype) '/'); MvWAddCh(bigdeer2, 4, 19, (chtype) '\\'); MvWAddCh(bigdeer2, 4, 22, (chtype) '\\'); MvWAddStr(bigdeer2, 5, 7, "^~~~~~~~~// ~~U"); MvWAddStr(bigdeer2, 6, 7, "(( )____( /"); MvWAddStr(bigdeer2, 7, 7, "( / |"); MvWAddStr(bigdeer2, 8, 8, "\\/ |"); MvWAddStr(bigdeer2, 9, 9, "|> |>"); /* bigdeer3 */ MvWAddCh(bigdeer3, 0, 17, (chtype) '\\'); MvWAddCh(bigdeer3, 0, 18, (chtype) '/'); MvWAddCh(bigdeer3, 0, 20, (chtype) '\\'); MvWAddCh(bigdeer3, 0, 21, (chtype) '/'); MvWAddCh(bigdeer3, 1, 18, (chtype) '\\'); MvWAddCh(bigdeer3, 1, 20, (chtype) '/'); MvWAddCh(bigdeer3, 2, 19, (chtype) '|'); MvWAddCh(bigdeer3, 2, 20, (chtype) '_'); MvWAddCh(bigdeer3, 3, 18, (chtype) '/'); MvWAddCh(bigdeer3, 3, 19, (chtype) '^'); MvWAddCh(bigdeer3, 3, 20, (chtype) '0'); MvWAddCh(bigdeer3, 3, 21, (chtype) '\\'); MvWAddCh(bigdeer3, 4, 17, (chtype) '/'); MvWAddCh(bigdeer3, 4, 18, (chtype) '/'); MvWAddCh(bigdeer3, 4, 19, (chtype) '\\'); MvWAddCh(bigdeer3, 4, 22, (chtype) '\\'); MvWAddStr(bigdeer3, 5, 7, "^~~~~~~~~// ~~U"); MvWAddStr(bigdeer3, 6, 6, "( ()_____( /"); MvWAddStr(bigdeer3, 7, 6, "/ / /"); MvWAddStr(bigdeer3, 8, 5, "|/ \\"); MvWAddStr(bigdeer3, 9, 5, "/> \\>"); /* bigdeer4 */ MvWAddCh(bigdeer4, 0, 17, (chtype) '\\'); MvWAddCh(bigdeer4, 0, 18, (chtype) '/'); MvWAddCh(bigdeer4, 0, 20, (chtype) '\\'); MvWAddCh(bigdeer4, 0, 21, (chtype) '/'); MvWAddCh(bigdeer4, 1, 18, (chtype) '\\'); MvWAddCh(bigdeer4, 1, 20, (chtype) '/'); MvWAddCh(bigdeer4, 2, 19, (chtype) '|'); MvWAddCh(bigdeer4, 2, 20, (chtype) '_'); MvWAddCh(bigdeer4, 3, 18, (chtype) '/'); MvWAddCh(bigdeer4, 3, 19, (chtype) '^'); MvWAddCh(bigdeer4, 3, 20, (chtype) '0'); MvWAddCh(bigdeer4, 3, 21, (chtype) '\\'); MvWAddCh(bigdeer4, 4, 17, (chtype) '/'); MvWAddCh(bigdeer4, 4, 18, (chtype) '/'); MvWAddCh(bigdeer4, 4, 19, (chtype) '\\'); MvWAddCh(bigdeer4, 4, 22, (chtype) '\\'); MvWAddStr(bigdeer4, 5, 7, "^~~~~~~~~// ~~U"); MvWAddStr(bigdeer4, 6, 6, "( )______( /"); MvWAddStr(bigdeer4, 7, 5, "(/ \\"); MvWAddStr(bigdeer4, 8, 0, "v___= ----^"); /* lookdeer1 */ MvWAddStr(lookdeer1, 0, 16, "\\/ \\/"); MvWAddStr(lookdeer1, 1, 17, "\\Y/ \\Y/"); MvWAddStr(lookdeer1, 2, 19, "\\=/"); MvWAddStr(lookdeer1, 3, 17, "^\\o o/^"); MvWAddStr(lookdeer1, 4, 17, "//( )"); MvWAddStr(lookdeer1, 5, 7, "^~~~~~~~~// \\O/"); MvWAddStr(lookdeer1, 6, 7, "( \\_____( /"); MvWAddStr(lookdeer1, 7, 8, "( ) /"); MvWAddStr(lookdeer1, 8, 9, "\\\\ /"); MvWAddStr(lookdeer1, 9, 11, "\\>/>"); /* lookdeer2 */ MvWAddStr(lookdeer2, 0, 16, "\\/ \\/"); MvWAddStr(lookdeer2, 1, 17, "\\Y/ \\Y/"); MvWAddStr(lookdeer2, 2, 19, "\\=/"); MvWAddStr(lookdeer2, 3, 17, "^\\o o/^"); MvWAddStr(lookdeer2, 4, 17, "//( )"); MvWAddStr(lookdeer2, 5, 7, "^~~~~~~~~// \\O/"); MvWAddStr(lookdeer2, 6, 7, "(( )____( /"); MvWAddStr(lookdeer2, 7, 7, "( / |"); MvWAddStr(lookdeer2, 8, 8, "\\/ |"); MvWAddStr(lookdeer2, 9, 9, "|> |>"); /* lookdeer3 */ MvWAddStr(lookdeer3, 0, 16, "\\/ \\/"); MvWAddStr(lookdeer3, 1, 17, "\\Y/ \\Y/"); MvWAddStr(lookdeer3, 2, 19, "\\=/"); MvWAddStr(lookdeer3, 3, 17, "^\\o o/^"); MvWAddStr(lookdeer3, 4, 17, "//( )"); MvWAddStr(lookdeer3, 5, 7, "^~~~~~~~~// \\O/"); MvWAddStr(lookdeer3, 6, 6, "( ()_____( /"); MvWAddStr(lookdeer3, 7, 6, "/ / /"); MvWAddStr(lookdeer3, 8, 5, "|/ \\"); MvWAddStr(lookdeer3, 9, 5, "/> \\>"); /* lookdeer4 */ MvWAddStr(lookdeer4, 0, 16, "\\/ \\/"); MvWAddStr(lookdeer4, 1, 17, "\\Y/ \\Y/"); MvWAddStr(lookdeer4, 2, 19, "\\=/"); MvWAddStr(lookdeer4, 3, 17, "^\\o o/^"); MvWAddStr(lookdeer4, 4, 17, "//( )"); MvWAddStr(lookdeer4, 5, 7, "^~~~~~~~~// \\O/"); MvWAddStr(lookdeer4, 6, 6, "( )______( /"); MvWAddStr(lookdeer4, 7, 5, "(/ \\"); MvWAddStr(lookdeer4, 8, 0, "v___= ----^"); /***********************************************/ cbreak(); nodelay(stdscr, TRUE); for (;;) { clear(); werase(treescrn); touchwin(w_del_msg); touchwin(treescrn); werase(treescrn2); touchwin(treescrn2); werase(treescrn8); touchwin(treescrn8); refresh(); look_out(150); boxit(); refresh(); look_out(150); seas(); refresh(); look_out(150); greet(); refresh(); look_out(150); fromwho(); refresh(); look_out(150); tree(); look_out(150); balls(); look_out(150); star(); look_out(150); strng1(); strng2(); strng3(); strng4(); strng5(); /* set up the windows for our blinking trees */ /* **************************************** */ /* treescrn3 */ overlay(treescrn, treescrn3); /*balls */ MvWAddCh(treescrn3, 4, 18, ' '); MvWAddCh(treescrn3, 7, 6, ' '); MvWAddCh(treescrn3, 8, 19, ' '); MvWAddCh(treescrn3, 11, 22, ' '); /*star */ MvWAddCh(treescrn3, 0, 12, '*'); /*strng1 */ MvWAddCh(treescrn3, 3, 11, ' '); /*strng2 */ MvWAddCh(treescrn3, 5, 13, ' '); MvWAddCh(treescrn3, 6, 10, ' '); /*strng3 */ MvWAddCh(treescrn3, 7, 16, ' '); MvWAddCh(treescrn3, 7, 14, ' '); /*strng4 */ MvWAddCh(treescrn3, 10, 13, ' '); MvWAddCh(treescrn3, 10, 10, ' '); MvWAddCh(treescrn3, 11, 8, ' '); /*strng5 */ MvWAddCh(treescrn3, 11, 18, ' '); MvWAddCh(treescrn3, 12, 13, ' '); /* treescrn4 */ overlay(treescrn, treescrn4); /*balls */ MvWAddCh(treescrn4, 3, 9, ' '); MvWAddCh(treescrn4, 4, 16, ' '); MvWAddCh(treescrn4, 7, 6, ' '); MvWAddCh(treescrn4, 8, 19, ' '); MvWAddCh(treescrn4, 11, 2, ' '); MvWAddCh(treescrn4, 12, 23, ' '); /*star */ (void) wstandout(treescrn4); MvWAddCh(treescrn4, 0, 12, '*'); (void) wstandend(treescrn4); /*strng1 */ MvWAddCh(treescrn4, 3, 13, ' '); /*strng2 */ /*strng3 */ MvWAddCh(treescrn4, 7, 15, ' '); MvWAddCh(treescrn4, 8, 11, ' '); /*strng4 */ MvWAddCh(treescrn4, 9, 16, ' '); MvWAddCh(treescrn4, 10, 12, ' '); MvWAddCh(treescrn4, 11, 8, ' '); /*strng5 */ MvWAddCh(treescrn4, 11, 18, ' '); MvWAddCh(treescrn4, 12, 14, ' '); /* treescrn5 */ overlay(treescrn, treescrn5); /*balls */ MvWAddCh(treescrn5, 3, 15, ' '); MvWAddCh(treescrn5, 10, 20, ' '); MvWAddCh(treescrn5, 12, 1, ' '); /*star */ MvWAddCh(treescrn5, 0, 12, '*'); /*strng1 */ MvWAddCh(treescrn5, 3, 11, ' '); /*strng2 */ MvWAddCh(treescrn5, 5, 12, ' '); /*strng3 */ MvWAddCh(treescrn5, 7, 14, ' '); MvWAddCh(treescrn5, 8, 10, ' '); /*strng4 */ MvWAddCh(treescrn5, 9, 15, ' '); MvWAddCh(treescrn5, 10, 11, ' '); MvWAddCh(treescrn5, 11, 7, ' '); /*strng5 */ MvWAddCh(treescrn5, 11, 17, ' '); MvWAddCh(treescrn5, 12, 13, ' '); /* treescrn6 */ overlay(treescrn, treescrn6); /*balls */ MvWAddCh(treescrn6, 6, 7, ' '); MvWAddCh(treescrn6, 7, 18, ' '); MvWAddCh(treescrn6, 10, 4, ' '); MvWAddCh(treescrn6, 11, 23, ' '); /*star */ (void) wstandout(treescrn6); MvWAddCh(treescrn6, 0, 12, '*'); (void) wstandend(treescrn6); /*strng1 */ /*strng2 */ MvWAddCh(treescrn6, 5, 11, ' '); /*strng3 */ MvWAddCh(treescrn6, 7, 13, ' '); MvWAddCh(treescrn6, 8, 9, ' '); /*strng4 */ MvWAddCh(treescrn6, 9, 14, ' '); MvWAddCh(treescrn6, 10, 10, ' '); MvWAddCh(treescrn6, 11, 6, ' '); /*strng5 */ MvWAddCh(treescrn6, 11, 16, ' '); MvWAddCh(treescrn6, 12, 12, ' '); /* treescrn7 */ overlay(treescrn, treescrn7); /*balls */ MvWAddCh(treescrn7, 3, 15, ' '); MvWAddCh(treescrn7, 6, 7, ' '); MvWAddCh(treescrn7, 7, 18, ' '); MvWAddCh(treescrn7, 10, 4, ' '); MvWAddCh(treescrn7, 11, 22, ' '); /*star */ MvWAddCh(treescrn7, 0, 12, '*'); /*strng1 */ MvWAddCh(treescrn7, 3, 12, ' '); /*strng2 */ MvWAddCh(treescrn7, 5, 13, ' '); MvWAddCh(treescrn7, 6, 9, ' '); /*strng3 */ MvWAddCh(treescrn7, 7, 15, ' '); MvWAddCh(treescrn7, 8, 11, ' '); /*strng4 */ MvWAddCh(treescrn7, 9, 16, ' '); MvWAddCh(treescrn7, 10, 12, ' '); MvWAddCh(treescrn7, 11, 8, ' '); /*strng5 */ MvWAddCh(treescrn7, 11, 18, ' '); MvWAddCh(treescrn7, 12, 14, ' '); look_out(150); reindeer(); touchwin(w_holiday); wrefresh(w_holiday); wrefresh(w_del_msg); look_out(500); for (loopy = 0; loopy < 100; loopy++) { blinkit(); } #ifdef NOLOOP done(0); #endif } /*NOTREACHED */ } static int boxit(void) { int x = 0; while (x < 20) { MvAddCh(x, 7, '|'); ++x; } x = 8; while (x < 80) { MvAddCh(19, x, '_'); ++x; } x = 0; while (x < 80) { MvAddCh(22, x, '_'); ++x; } return (0); } static int seas(void) { MvAddCh(4, 1, 'S'); MvAddCh(6, 1, 'E'); MvAddCh(8, 1, 'A'); MvAddCh(10, 1, 'S'); MvAddCh(12, 1, 'O'); MvAddCh(14, 1, 'N'); MvAddCh(16, 1, '`'); MvAddCh(18, 1, 'S'); return (0); } static int greet(void) { MvAddCh(3, 5, 'G'); MvAddCh(5, 5, 'R'); MvAddCh(7, 5, 'E'); MvAddCh(9, 5, 'E'); MvAddCh(11, 5, 'T'); MvAddCh(13, 5, 'I'); MvAddCh(15, 5, 'N'); MvAddCh(17, 5, 'G'); MvAddCh(19, 5, 'S'); return (0); } static int fromwho(void) { MvAddStr(21, 13, FROMWHO); return (0); } static int tree(void) { set_color(treescrn, COLOR_GREEN); MvWAddCh(treescrn, 1, 11, (chtype) '/'); MvWAddCh(treescrn, 2, 11, (chtype) '/'); MvWAddCh(treescrn, 3, 10, (chtype) '/'); MvWAddCh(treescrn, 4, 9, (chtype) '/'); MvWAddCh(treescrn, 5, 9, (chtype) '/'); MvWAddCh(treescrn, 6, 8, (chtype) '/'); MvWAddCh(treescrn, 7, 7, (chtype) '/'); MvWAddCh(treescrn, 8, 6, (chtype) '/'); MvWAddCh(treescrn, 9, 6, (chtype) '/'); MvWAddCh(treescrn, 10, 5, (chtype) '/'); MvWAddCh(treescrn, 11, 3, (chtype) '/'); MvWAddCh(treescrn, 12, 2, (chtype) '/'); MvWAddCh(treescrn, 1, 13, (chtype) '\\'); MvWAddCh(treescrn, 2, 13, (chtype) '\\'); MvWAddCh(treescrn, 3, 14, (chtype) '\\'); MvWAddCh(treescrn, 4, 15, (chtype) '\\'); MvWAddCh(treescrn, 5, 15, (chtype) '\\'); MvWAddCh(treescrn, 6, 16, (chtype) '\\'); MvWAddCh(treescrn, 7, 17, (chtype) '\\'); MvWAddCh(treescrn, 8, 18, (chtype) '\\'); MvWAddCh(treescrn, 9, 18, (chtype) '\\'); MvWAddCh(treescrn, 10, 19, (chtype) '\\'); MvWAddCh(treescrn, 11, 21, (chtype) '\\'); MvWAddCh(treescrn, 12, 22, (chtype) '\\'); MvWAddCh(treescrn, 4, 10, (chtype) '_'); MvWAddCh(treescrn, 4, 14, (chtype) '_'); MvWAddCh(treescrn, 8, 7, (chtype) '_'); MvWAddCh(treescrn, 8, 17, (chtype) '_'); MvWAddStr(treescrn, 13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\"); MvWAddStr(treescrn, 14, 11, "| |"); MvWAddStr(treescrn, 15, 11, "|_|"); unset_color(treescrn); wrefresh(treescrn); wrefresh(w_del_msg); return (0); } static int balls(void) { overlay(treescrn, treescrn2); set_color(treescrn2, COLOR_BLUE); MvWAddCh(treescrn2, 3, 9, (chtype) '@'); MvWAddCh(treescrn2, 3, 15, (chtype) '@'); MvWAddCh(treescrn2, 4, 8, (chtype) '@'); MvWAddCh(treescrn2, 4, 16, (chtype) '@'); MvWAddCh(treescrn2, 5, 7, (chtype) '@'); MvWAddCh(treescrn2, 5, 17, (chtype) '@'); MvWAddCh(treescrn2, 7, 6, (chtype) '@'); MvWAddCh(treescrn2, 7, 18, (chtype) '@'); MvWAddCh(treescrn2, 8, 5, (chtype) '@'); MvWAddCh(treescrn2, 8, 19, (chtype) '@'); MvWAddCh(treescrn2, 10, 4, (chtype) '@'); MvWAddCh(treescrn2, 10, 20, (chtype) '@'); MvWAddCh(treescrn2, 11, 2, (chtype) '@'); MvWAddCh(treescrn2, 11, 22, (chtype) '@'); MvWAddCh(treescrn2, 12, 1, (chtype) '@'); MvWAddCh(treescrn2, 12, 23, (chtype) '@'); unset_color(treescrn2); wrefresh(treescrn2); wrefresh(w_del_msg); return (0); } static int star(void) { (void) wattrset(treescrn2, A_BOLD | A_BLINK); set_color(treescrn2, COLOR_YELLOW); MvWAddCh(treescrn2, 0, 12, (chtype) '*'); (void) wstandend(treescrn2); unset_color(treescrn2); wrefresh(treescrn2); wrefresh(w_del_msg); return (0); } static int strng1(void) { (void) wattrset(treescrn2, A_BOLD | A_BLINK); set_color(treescrn2, COLOR_WHITE); MvWAddCh(treescrn2, 3, 13, (chtype) '\''); MvWAddCh(treescrn2, 3, 12, (chtype) ':'); MvWAddCh(treescrn2, 3, 11, (chtype) '.'); wattroff(treescrn2, A_BOLD | A_BLINK); unset_color(treescrn2); wrefresh(treescrn2); wrefresh(w_del_msg); return (0); } static int strng2(void) { (void) wattrset(treescrn2, A_BOLD | A_BLINK); set_color(treescrn2, COLOR_WHITE); MvWAddCh(treescrn2, 5, 14, (chtype) '\''); MvWAddCh(treescrn2, 5, 13, (chtype) ':'); MvWAddCh(treescrn2, 5, 12, (chtype) '.'); MvWAddCh(treescrn2, 5, 11, (chtype) ','); MvWAddCh(treescrn2, 6, 10, (chtype) '\''); MvWAddCh(treescrn2, 6, 9, (chtype) ':'); wattroff(treescrn2, A_BOLD | A_BLINK); unset_color(treescrn2); wrefresh(treescrn2); wrefresh(w_del_msg); return (0); } static int strng3(void) { (void) wattrset(treescrn2, A_BOLD | A_BLINK); set_color(treescrn2, COLOR_WHITE); MvWAddCh(treescrn2, 7, 16, (chtype) '\''); MvWAddCh(treescrn2, 7, 15, (chtype) ':'); MvWAddCh(treescrn2, 7, 14, (chtype) '.'); MvWAddCh(treescrn2, 7, 13, (chtype) ','); MvWAddCh(treescrn2, 8, 12, (chtype) '\''); MvWAddCh(treescrn2, 8, 11, (chtype) ':'); MvWAddCh(treescrn2, 8, 10, (chtype) '.'); MvWAddCh(treescrn2, 8, 9, (chtype) ','); wattroff(treescrn2, A_BOLD | A_BLINK); unset_color(treescrn2); wrefresh(treescrn2); wrefresh(w_del_msg); return (0); } static int strng4(void) { (void) wattrset(treescrn2, A_BOLD | A_BLINK); set_color(treescrn2, COLOR_WHITE); MvWAddCh(treescrn2, 9, 17, (chtype) '\''); MvWAddCh(treescrn2, 9, 16, (chtype) ':'); MvWAddCh(treescrn2, 9, 15, (chtype) '.'); MvWAddCh(treescrn2, 9, 14, (chtype) ','); MvWAddCh(treescrn2, 10, 13, (chtype) '\''); MvWAddCh(treescrn2, 10, 12, (chtype) ':'); MvWAddCh(treescrn2, 10, 11, (chtype) '.'); MvWAddCh(treescrn2, 10, 10, (chtype) ','); MvWAddCh(treescrn2, 11, 9, (chtype) '\''); MvWAddCh(treescrn2, 11, 8, (chtype) ':'); MvWAddCh(treescrn2, 11, 7, (chtype) '.'); MvWAddCh(treescrn2, 11, 6, (chtype) ','); MvWAddCh(treescrn2, 12, 5, (chtype) '\''); wattroff(treescrn2, A_BOLD | A_BLINK); unset_color(treescrn2); wrefresh(treescrn2); wrefresh(w_del_msg); return (0); } static int strng5(void) { (void) wattrset(treescrn2, A_BOLD | A_BLINK); set_color(treescrn2, COLOR_WHITE); MvWAddCh(treescrn2, 11, 19, (chtype) '\''); MvWAddCh(treescrn2, 11, 18, (chtype) ':'); MvWAddCh(treescrn2, 11, 17, (chtype) '.'); MvWAddCh(treescrn2, 11, 16, (chtype) ','); MvWAddCh(treescrn2, 12, 15, (chtype) '\''); MvWAddCh(treescrn2, 12, 14, (chtype) ':'); MvWAddCh(treescrn2, 12, 13, (chtype) '.'); MvWAddCh(treescrn2, 12, 12, (chtype) ','); wattroff(treescrn2, A_BOLD | A_BLINK); unset_color(treescrn2); /* save a fully lit tree */ overlay(treescrn2, treescrn); wrefresh(treescrn2); wrefresh(w_del_msg); return (0); } static int blinkit(void) { static int cycle; if (cycle > 4) { cycle = 0; } touchwin(treescrn8); switch (cycle) { case 0: overlay(treescrn3, treescrn8); wrefresh(treescrn8); wrefresh(w_del_msg); break; case 1: overlay(treescrn4, treescrn8); wrefresh(treescrn8); wrefresh(w_del_msg); break; case 2: overlay(treescrn5, treescrn8); wrefresh(treescrn8); wrefresh(w_del_msg); break; case 3: overlay(treescrn6, treescrn8); wrefresh(treescrn8); wrefresh(w_del_msg); break; case 4: overlay(treescrn7, treescrn8); wrefresh(treescrn8); wrefresh(w_del_msg); break; } touchwin(treescrn8); /*ALL ON************************************************** */ overlay(treescrn, treescrn8); wrefresh(treescrn8); wrefresh(w_del_msg); ++cycle; return (0); } static void deer_step(WINDOW *win, int y, int x) { mvwin(win, y, x); wrefresh(win); wrefresh(w_del_msg); look_out(5); } static int reindeer(void) { int looper; y_pos = 0; for (x_pos = 70; x_pos > 62; x_pos--) { if (x_pos < 62) { y_pos = 1; } for (looper = 0; looper < 4; looper++) { MvWAddCh(dotdeer0, y_pos, x_pos, (chtype) '.'); wrefresh(dotdeer0); wrefresh(w_del_msg); werase(dotdeer0); wrefresh(dotdeer0); wrefresh(w_del_msg); look_out(50); } } y_pos = 2; for (; x_pos > 50; x_pos--) { for (looper = 0; looper < 4; looper++) { if (x_pos < 56) { y_pos = 3; MvWAddCh(stardeer0, y_pos, x_pos, (chtype) '*'); wrefresh(stardeer0); wrefresh(w_del_msg); werase(stardeer0); wrefresh(stardeer0); wrefresh(w_del_msg); } else { MvWAddCh(dotdeer0, y_pos, x_pos, (chtype) '*'); wrefresh(dotdeer0); wrefresh(w_del_msg); werase(dotdeer0); wrefresh(dotdeer0); wrefresh(w_del_msg); } } } x_pos = 58; for (y_pos = 2; y_pos < 5; y_pos++) { touchwin(lildeer0); wrefresh(lildeer0); wrefresh(w_del_msg); for (looper = 0; looper < 4; looper++) { deer_step(lildeer3, y_pos, x_pos); deer_step(lildeer2, y_pos, x_pos); deer_step(lildeer1, y_pos, x_pos); deer_step(lildeer2, y_pos, x_pos); deer_step(lildeer3, y_pos, x_pos); touchwin(lildeer0); wrefresh(lildeer0); wrefresh(w_del_msg); x_pos -= 2; } } x_pos = 35; for (y_pos = 5; y_pos < 10; y_pos++) { touchwin(middeer0); wrefresh(middeer0); wrefresh(w_del_msg); for (looper = 0; looper < 2; looper++) { deer_step(middeer3, y_pos, x_pos); deer_step(middeer2, y_pos, x_pos); deer_step(middeer1, y_pos, x_pos); deer_step(middeer2, y_pos, x_pos); deer_step(middeer3, y_pos, x_pos); touchwin(middeer0); wrefresh(middeer0); wrefresh(w_del_msg); x_pos -= 3; } } look_out(300); y_pos = 1; for (x_pos = 8; x_pos < 16; x_pos++) { deer_step(bigdeer4, y_pos, x_pos); deer_step(bigdeer3, y_pos, x_pos); deer_step(bigdeer2, y_pos, x_pos); deer_step(bigdeer1, y_pos, x_pos); deer_step(bigdeer2, y_pos, x_pos); deer_step(bigdeer3, y_pos, x_pos); deer_step(bigdeer4, y_pos, x_pos); deer_step(bigdeer0, y_pos, x_pos); } --x_pos; for (looper = 0; looper < 6; looper++) { deer_step(lookdeer4, y_pos, x_pos); deer_step(lookdeer3, y_pos, x_pos); deer_step(lookdeer2, y_pos, x_pos); deer_step(lookdeer1, y_pos, x_pos); deer_step(lookdeer2, y_pos, x_pos); deer_step(lookdeer3, y_pos, x_pos); deer_step(lookdeer4, y_pos, x_pos); } deer_step(lookdeer0, y_pos, x_pos); for (; y_pos < 10; y_pos++) { for (looper = 0; looper < 2; looper++) { deer_step(bigdeer4, y_pos, x_pos); deer_step(bigdeer3, y_pos, x_pos); deer_step(bigdeer2, y_pos, x_pos); deer_step(bigdeer1, y_pos, x_pos); deer_step(bigdeer2, y_pos, x_pos); deer_step(bigdeer3, y_pos, x_pos); deer_step(bigdeer4, y_pos, x_pos); } deer_step(bigdeer0, y_pos, x_pos); } --y_pos; deer_step(lookdeer3, y_pos, x_pos); return (0); } static void done(int sig GCC_UNUSED) { CATCHALL(done); move(LINES - 1, 0); refresh(); endwin(); curs_set(1); #if NO_LEAKS if (my_pairs != 0) free(my_pairs); #endif ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/gdc.c0000644000175100001440000002456412546047774014367 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Grand digital clock for curses compatible terminals * Usage: gdc [-s] [-t hh:mm:ss] [n] -- run for n seconds (default infinity) * Flags: -s: scroll * * modified 10-18-89 for curses (jrl) * 10-18-89 added signal handling * * $Id: gdc.c,v 1.44 2015/07/04 21:28:28 tom Exp $ */ #include #include #define YBASE 10 #define XBASE 10 #define XLENGTH 54 #define YDEPTH 5 #define PAIR_DIGITS 1 #define PAIR_OTHERS 2 #define PAIR_FRAMES 3 static short disp[11] = { 075557, 011111, 071747, 071717, 055711, 074717, 074757, 071111, 075757, 075717, 002020 }; static long older[6], next[6], newer[6], mask; static int sigtermed = 0; static bool redirected = FALSE; static bool hascolor = FALSE; static void sighndl(int signo) { signal(signo, sighndl); sigtermed = signo; if (redirected) { endwin(); ExitProgram(EXIT_FAILURE); } } static void check_term(void) { if (sigtermed) { (void) standend(); endwin(); fprintf(stderr, "gdc terminated by signal %d\n", sigtermed); ExitProgram(EXIT_FAILURE); } } static void drawbox(bool scrolling) { chtype bottom[XLENGTH + 1]; int n; if (hascolor) (void) attrset(AttrArg(COLOR_PAIR(PAIR_FRAMES), 0)); MvAddCh(YBASE - 1, XBASE - 1, ACS_ULCORNER); hline(ACS_HLINE, XLENGTH); MvAddCh(YBASE - 1, XBASE + XLENGTH, ACS_URCORNER); MvAddCh(YBASE + YDEPTH, XBASE - 1, ACS_LLCORNER); if ((mvinchnstr(YBASE + YDEPTH, XBASE, bottom, XLENGTH)) != ERR) { for (n = 0; n < XLENGTH; n++) { if (!scrolling) bottom[n] &= ~A_COLOR; bottom[n] = ACS_HLINE | (bottom[n] & (A_ATTRIBUTES | A_COLOR)); } (void) mvaddchnstr(YBASE + YDEPTH, XBASE, bottom, XLENGTH); } MvAddCh(YBASE + YDEPTH, XBASE + XLENGTH, ACS_LRCORNER); move(YBASE, XBASE - 1); vline(ACS_VLINE, YDEPTH); move(YBASE, XBASE + XLENGTH); vline(ACS_VLINE, YDEPTH); if (hascolor) (void) attrset(AttrArg(COLOR_PAIR(PAIR_OTHERS), 0)); } static void standt(int on) { if (on) { if (hascolor) { attron(COLOR_PAIR(PAIR_DIGITS)); } else { attron(A_STANDOUT); } } else { if (hascolor) { attron(COLOR_PAIR(PAIR_OTHERS)); } else { attroff(A_STANDOUT); } } } static void set(int t, int n) { int i, m; m = 7 << n; for (i = 0; i < 5; i++) { next[i] |= ((disp[t] >> ((4 - i) * 3)) & 07) << n; mask |= (next[i] ^ older[i]) & m; } if (mask & m) mask |= m; } static void usage(void) { static const char *msg[] = { "Usage: gdc [options] [count]" ,"" ,"Options:" ," -n redirect input to /dev/null" ," -s scroll each number into place, rather than flipping" ," -t hh:mm:ss specify starting time (default is ``now'')" ,"" ,"If you specify a count, gdc runs for that number of seconds" }; unsigned j; for (j = 0; j < SIZEOF(msg); j++) fprintf(stderr, "%s\n", msg[j]); ExitProgram(EXIT_FAILURE); } static time_t parse_time(const char *value) { int hh, mm, ss; int check; time_t result; char c; struct tm *tm; if (sscanf(value, "%d:%d:%d%c", &hh, &mm, &ss, &c) != 3) { if (sscanf(value, "%02d%02d%02d%c", &hh, &mm, &ss, &c) != 3) { usage(); } } if ((hh < 0) || (hh >= 24) || (mm < 0) || (mm >= 60) || (ss < 0) || (ss >= 60)) { usage(); } /* adjust so that the localtime in the main loop will give usable time */ result = (hh * 3600) + ((mm * 60) + ss); for (check = 0; check < 24; ++check) { tm = localtime(&result); if (tm->tm_hour == hh) break; result += 3600; } if (tm->tm_hour != hh) { fprintf(stderr, "Cannot find local time for %s!\n", value); usage(); } return result; } int main(int argc, char *argv[]) { time_t now; struct tm *tm; long t, a; int i, j, s, k; int count = 0; FILE *ofp = stdout; FILE *ifp = stdin; bool smooth = FALSE; bool stages = FALSE; time_t starts = 0; setlocale(LC_ALL, ""); CATCHALL(sighndl); while ((k = getopt(argc, argv, "nst:")) != -1) { switch (k) { case 'n': ifp = fopen("/dev/null", "r"); redirected = TRUE; break; case 's': smooth = TRUE; break; case 't': starts = parse_time(optarg); break; default: usage(); } } if (optind < argc) { count = atoi(argv[optind++]); assert(count >= 0); } if (optind < argc) usage(); if (redirected) { char *name = getenv("TERM"); if (name == 0 || newterm(name, ofp, ifp) == 0) { fprintf(stderr, "cannot open terminal\n"); ExitProgram(EXIT_FAILURE); } } else { initscr(); } cbreak(); noecho(); nodelay(stdscr, 1); curs_set(0); hascolor = has_colors(); if (hascolor) { short bg = COLOR_BLACK; start_color(); #if HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) bg = -1; #endif init_pair(PAIR_DIGITS, COLOR_BLACK, COLOR_RED); init_pair(PAIR_OTHERS, COLOR_RED, bg); init_pair(PAIR_FRAMES, COLOR_WHITE, bg); (void) attrset(AttrArg(COLOR_PAIR(PAIR_OTHERS), 0)); } restart: for (j = 0; j < 5; j++) older[j] = newer[j] = next[j] = 0; clear(); drawbox(FALSE); do { char buf[40]; if (starts != 0) { now = ++starts; } else { time(&now); } tm = localtime(&now); mask = 0; set(tm->tm_sec % 10, 0); set(tm->tm_sec / 10, 4); set(tm->tm_min % 10, 10); set(tm->tm_min / 10, 14); set(tm->tm_hour % 10, 20); set(tm->tm_hour / 10, 24); set(10, 7); set(10, 17); for (k = 0; k < 6; k++) { if (smooth) { for (i = 0; i < 5; i++) newer[i] = (newer[i] & ~mask) | (newer[i + 1] & mask); newer[5] = (newer[5] & ~mask) | (next[k] & mask); } else { newer[k] = (newer[k] & ~mask) | (next[k] & mask); } next[k] = 0; for (s = 1; s >= 0; s--) { standt(s); for (i = 0; i < 6; i++) { if ((a = (newer[i] ^ older[i]) & (s ? newer : older)[i]) != 0) { for (j = 0, t = 1 << 26; t; t >>= 1, j++) { if (a & t) { if (!(a & (t << 1))) { move(YBASE + i, XBASE + 2 * j); } addstr(" "); } } } if (!s) { older[i] = newer[i]; } } if (!s) { if (smooth) drawbox(TRUE); refresh(); /* * If we're scrolling, space out the refreshes to fake * movement. That's 7 frames, or 6 intervals, which would * be 166 msec if we spread it out over a second. It looks * better (but will work on a slow terminal, e.g., less * than 9600bd) to squeeze that into a half-second, and use * half of 170 msec to ensure that the program doesn't eat * a lot of time when asking what time it is, at the top of * this loop -T.Dickey */ if (smooth) napms(85); if (stages) { stages = FALSE; switch (wgetch(stdscr)) { case 'q': count = 1; break; case 'S': stages = TRUE; /* FALLTHRU */ case 's': nodelay(stdscr, FALSE); break; case ' ': nodelay(stdscr, TRUE); break; #ifdef KEY_RESIZE case KEY_RESIZE: #endif case '?': goto restart; case ERR: check_term(); /* FALLTHRU */ default: continue; } } } } } /* this depends on the detailed format of ctime(3) */ (void) strncpy(buf, ctime(&now), (size_t) 30); { char *d2 = buf + 10; char *s2 = buf + 19; while ((*d2++ = *s2++) != '\0') ; } MvAddStr(16, 30, buf); move(6, 0); drawbox(FALSE); refresh(); /* * If we're not smooth-scrolling, wait 1000 msec (1 sec). Use napms() * rather than sleep() because the latter does odd things on some * systems, e.g., suspending output as well. */ if (smooth) napms(500); else napms(1000); /* * This is a safe way to check if we're interrupted - making the signal * handler set a flag that we can check. Since we're running * nodelay(), the wgetch() call returns immediately, and in particular * will return an error if interrupted. This works only if we can * read from the input, of course. */ stages = FALSE; switch (wgetch(stdscr)) { case 'q': count = 1; break; case 'S': stages = TRUE; /* FALLTHRU */ case 's': nodelay(stdscr, FALSE); break; case ' ': nodelay(stdscr, TRUE); break; #ifdef KEY_RESIZE case KEY_RESIZE: #endif case '?': goto restart; case ERR: check_term(); /* FALLTHRU */ default: continue; } } while (--count); (void) standend(); endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/demo_menus.c0000644000175100001440000005177712566177354015773 0ustar tomusers/**************************************************************************** * Copyright (c) 2005-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: demo_menus.c,v 1.55 2015/08/22 22:59:56 tom Exp $ * * Demonstrate a variety of functions from the menu library. * Thomas Dickey - 2005/4/9 */ /* item_description - item_init - item_opts - item_opts_off - item_opts_on - item_term - item_visible - menu_back - menu_fore - menu_format - menu_grey - menu_init - menu_opts - menu_pad - menu_request_by_name - menu_request_name - menu_term - menu_userptr - set_current_item - set_item_opts - set_menu_grey - set_menu_items - set_menu_opts - set_menu_pad - set_menu_pattern - set_menu_spacing - set_menu_userptr - set_top_row - top_row - */ #include #if USE_LIBMENU #include #include #include #ifdef NCURSES_VERSION #ifdef TRACE static unsigned save_trace = TRACE_ORDINARY | TRACE_CALLS; extern unsigned _nc_tracing; static MENU *mpTrace; #endif #else #undef TRACE #endif typedef enum { eBanner = -1 ,eFile ,eSelect #ifdef TRACE ,eTrace #endif ,eMAX } MenuNo; #define okMenuNo(n) (((n) > eBanner) && ((n) < eMAX)) #define MENU_Y 1 typedef struct { NCURSES_CONST char *name; void (*func) (int); unsigned mask; } MENU_DATA; static void call_files(int); static MENU *mpBanner; static MENU *mpFile; static MENU *mpSelect; static WINDOW *status; static bool loaded_file = FALSE; static char empty[1]; /* Common function to allow ^T to toggle trace-mode in the middle of a test * so that trace-files can be made smaller. */ static int wGetchar(WINDOW *win) { int c; #ifdef TRACE while ((c = wgetch(win)) == CTRL('T')) { if (_nc_tracing) { save_trace = _nc_tracing; Trace(("TOGGLE-TRACING OFF")); _nc_tracing = 0; } else { _nc_tracing = save_trace; } trace(_nc_tracing); if (_nc_tracing) Trace(("TOGGLE-TRACING ON")); } #else c = wgetch(win); #endif return c; } #define Getchar() wGetchar(stdscr) static int menu_virtualize(int c) { int result; if (c == '\n' || c == KEY_EXIT) result = (MAX_COMMAND + 1); else if (c == 'u') result = (REQ_SCR_ULINE); else if (c == 'd') result = (REQ_SCR_DLINE); else if (c == 'b' || c == KEY_NPAGE) result = (REQ_SCR_UPAGE); else if (c == 'f' || c == KEY_PPAGE) result = (REQ_SCR_DPAGE); else if (c == 'l' || c == KEY_LEFT || c == KEY_BTAB) result = (REQ_LEFT_ITEM); else if (c == 'n' || c == KEY_DOWN) result = (REQ_NEXT_ITEM); else if (c == 'p' || c == KEY_UP) result = (REQ_PREV_ITEM); else if (c == 'r' || c == KEY_RIGHT || c == '\t') result = (REQ_RIGHT_ITEM); else if (c == ' ') result = (REQ_TOGGLE_ITEM); else { if (c != KEY_MOUSE) beep(); result = (c); } return result; } static int menu_getc(MENU * m) { return wGetchar(menu_win(m)); } static int menu_offset(MenuNo number) { int result = 0; if (okMenuNo(number)) { int spc_desc, spc_rows, spc_cols; #ifdef NCURSES_VERSION menu_spacing(mpBanner, &spc_desc, &spc_rows, &spc_cols); #else spc_rows = 0; #endif /* FIXME: MENU.itemlen seems the only way to get actual width of items */ result = (number - (eBanner + 1)) * (menu_itemwidth(mpBanner) + spc_rows); } return result; } static void my_menu_init(MENU * menu) { Trace(("called MenuHook my_menu_init")); mvwprintw(status, 2, 0, "menu_init %p", (void *) menu); wclrtoeol(status); wrefresh(status); } static void my_menu_term(MENU * menu) { Trace(("called MenuHook my_menu_term")); mvwprintw(status, 2, 0, "menu_term %p", (void *) menu); wclrtoeol(status); wrefresh(status); } static void my_item_init(MENU * menu) { ITEM *item = current_item(menu); const char *name = item_name(item); Trace(("called MenuHook my_item_init (%s)", name)); mvwprintw(status, 2, 0, "item_init %s", name); wclrtoeol(status); wrefresh(status); } static void my_item_term(MENU * menu) { ITEM *item = current_item(menu); const char *name = item_name(item); Trace(("called MenuHook my_item_term (%s)", name)); mvwprintw(status, 2, 0, "item_term %s", name); wclrtoeol(status); wrefresh(status); } static MENU * menu_create(ITEM ** items, int count, int ncols, MenuNo number) { MENU *result; WINDOW *menuwin; int mrows, mcols; int y = okMenuNo(number) ? MENU_Y : 0; int x = menu_offset(number); int margin = (y == MENU_Y) ? 1 : 0; int maxcol = (ncols + x) < COLS ? ncols : (COLS - x - 1); int maxrow = (count + 1) / ncols; if ((maxrow + y) >= (LINES - 4)) maxrow = LINES - 4 - y; result = new_menu(items); if (has_colors()) { set_menu_fore(result, (chtype) COLOR_PAIR(1)); set_menu_back(result, (chtype) COLOR_PAIR(2)); } set_menu_format(result, maxrow, maxcol); scale_menu(result, &mrows, &mcols); if (mcols + (2 * margin + x) >= COLS) mcols = COLS - (2 * margin + x); #ifdef TRACE if (number == eTrace) menu_opts_off(result, O_ONEVALUE); else menu_opts_on(result, O_ONEVALUE); #endif menuwin = newwin(mrows + (2 * margin), mcols + (2 * margin), y, x); set_menu_win(result, menuwin); keypad(menuwin, TRUE); if (margin) box(menuwin, 0, 0); set_menu_sub(result, derwin(menuwin, mrows, mcols, margin, margin)); post_menu(result); set_menu_init(result, my_menu_init); set_menu_term(result, my_menu_term); set_item_init(result, my_item_init); set_item_term(result, my_item_term); return result; } static void menu_destroy(MENU * m) { int count; Trace(("menu_destroy %p", (void *) m)); if (m != 0) { ITEM **items = menu_items(m); const char *blob = 0; count = item_count(m); Trace(("menu_destroy %p count %d", (void *) m, count)); if ((count > 0) && (m == mpSelect)) { blob = item_name(*items); } unpost_menu(m); free_menu(m); /* free the extra data allocated in build_select_menu() */ if ((count > 0) && (m == mpSelect)) { if (blob && loaded_file) { Trace(("freeing blob %p", blob)); free((void *) blob); } free(items); items = 0; } #ifdef TRACE if ((count > 0) && (m == mpTrace)) { ITEM **ip = items; if (ip != 0) { while (*ip) free(*ip++); } } #endif } } /* force the given menu to appear */ static void menu_display(MENU * m) { touchwin(menu_win(m)); wrefresh(menu_win(m)); } /*****************************************************************************/ static void build_file_menu(MenuNo number) { static MENU_DATA table[] = { {"Exit", call_files, 0}, {(char *) 0, 0, 0} }; static ITEM *items[SIZEOF(table)]; ITEM **ip = items; int n; for (n = 0; table[n].name != 0; ++n) { *ip = new_item(table[n].name, empty); set_item_userptr(*ip, (void *) &table[n]); ++ip; } *ip = (ITEM *) 0; mpFile = menu_create(items, SIZEOF(table) - 1, 1, number); } static int perform_file_menu(int cmd) { return menu_driver(mpFile, cmd); } /*****************************************************************************/ static void call_select(int code) { (void) code; Trace(("Selected item %d", code)); } static void build_select_menu(MenuNo number, char *filename) { #define MY_DATA(name) { name, call_select, 0 } static MENU_DATA table[] = { MY_DATA("Lions"), MY_DATA("Tigers"), MY_DATA("Bears"), MY_DATA("(Oh my!)"), MY_DATA("Newts"), MY_DATA("Platypi"), MY_DATA("Lemurs"), MY_DATA("(Oh really?!)"), MY_DATA("Leopards"), MY_DATA("Panthers"), MY_DATA("Pumas"), MY_DATA("Lions, Tigers, Bears, (Oh my!), Newts, Platypi, Lemurs"), MY_DATA("Lions, Tigers, Bears, (Oh my!), Newts, Platypi, Lemurs, Lions, Tigers, Bears, (Oh my!), Newts, Platypi, Lemurs"), {(char *) 0, 0, 0} }; static ITEM **items; ITEM **ip; MENU_DATA *ap = 0; MENU_DATA *myList = 0; int i; size_t count = 0; if (filename != 0) { struct stat sb; if (stat(filename, &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFREG && sb.st_size != 0) { size_t size = (size_t) sb.st_size; unsigned j, k; char *blob = typeMalloc(char, size + 1); MENU_DATA *list = typeCalloc(MENU_DATA, size + 1); items = typeCalloc(ITEM *, size + 1); Trace(("build_select_menu blob=%p, items=%p", (void *) blob, (void *) items)); if (blob != 0 && list != 0) { FILE *fp = fopen(filename, "r"); if (fp != 0) { if (fread(blob, sizeof(char), size, fp) == size) { bool mark = TRUE; for (j = k = 0; j < size; ++j) { if (mark) { list[k++].name = blob + j; mark = FALSE; } if (blob[j] == '\n') { blob[j] = '\0'; if (k > 0 && *list[k - 1].name == '\0') --k; mark = TRUE; } else if (blob[j] == '\t') { blob[j] = ' '; /* menu items are printable */ } } list[k].name = 0; count = k; ap = myList = list; } fclose(fp); } loaded_file = TRUE; } if (ap == 0) free(items); } } if (ap == 0) { count = SIZEOF(table) - 1; items = typeCalloc(ITEM *, count + 1); ap = table; } ip = items; for (i = 0; ap[i].name != 0; ++i) { ap[i].func = call_select; ap[i].mask = (unsigned) i; *ip = new_item(ap[i].name, empty); set_item_userptr(*ip, (void *) &table[i]); ++ip; } *ip = 0; mpSelect = menu_create(items, (int) count, 1, number); if (myList != 0) free(myList); } static int perform_select_menu(int cmd) { return menu_driver(mpSelect, cmd); } /*****************************************************************************/ #ifdef TRACE static void call_trace(int code) { (void) code; Trace(("Updating trace mask %d", code)); } #define T_TBL(name) { #name, call_trace, name } static MENU_DATA t_tbl[] = { T_TBL(TRACE_DISABLE), T_TBL(TRACE_TIMES), T_TBL(TRACE_TPUTS), T_TBL(TRACE_UPDATE), T_TBL(TRACE_MOVE), T_TBL(TRACE_CHARPUT), T_TBL(TRACE_ORDINARY), T_TBL(TRACE_CALLS), T_TBL(TRACE_VIRTPUT), T_TBL(TRACE_IEVENT), T_TBL(TRACE_BITS), T_TBL(TRACE_ICALLS), T_TBL(TRACE_CCALLS), T_TBL(TRACE_DATABASE), T_TBL(TRACE_ATTRS), T_TBL(TRACE_MAXIMUM), { (char *) 0, 0, 0 } }; static void build_trace_menu(MenuNo number) { static ITEM *items[SIZEOF(t_tbl)]; ITEM **ip = items; int n; for (n = 0; t_tbl[n].name != 0; n++) { *ip = new_item(t_tbl[n].name, empty); set_item_userptr(*ip, (void *) &t_tbl[n]); ++ip; } *ip = (ITEM *) 0; mpTrace = menu_create(items, SIZEOF(t_tbl) - 1, 2, number); } static char * tracetrace(unsigned tlevel) { static char *buf; int n; if (buf == 0) { size_t need = 12; for (n = 0; t_tbl[n].name != 0; n++) need += strlen(t_tbl[n].name) + 2; buf = typeMalloc(char, need); } sprintf(buf, "0x%02x = {", tlevel); if (tlevel == 0) { sprintf(buf + strlen(buf), "%s, ", t_tbl[0].name); } else { for (n = 1; t_tbl[n].name != 0; n++) if ((tlevel & t_tbl[n].mask) == t_tbl[n].mask) { strcat(buf, t_tbl[n].name); strcat(buf, ", "); } } if (buf[strlen(buf) - 2] == ',') buf[strlen(buf) - 2] = '\0'; return (strcat(buf, "}")); } /* fake a dynamically reconfigurable menu using the 0th entry to deselect * the others */ static bool update_trace_menu(MENU * m) { ITEM **items; ITEM *i, **p; bool changed = FALSE; items = menu_items(m); i = current_item(m); if (i == items[0]) { if (item_value(i)) { for (p = items + 1; *p != 0; p++) if (item_value(*p)) { set_item_value(*p, FALSE); changed = TRUE; } } } return changed; } static int perform_trace_menu(int cmd) /* interactively set the trace level */ { ITEM **ip; unsigned newtrace; int result; for (ip = menu_items(mpTrace); *ip; ip++) { MENU_DATA *td = (MENU_DATA *) item_userptr(*ip); unsigned mask = td->mask; if (mask == 0) set_item_value(*ip, _nc_tracing == 0); else if ((mask & _nc_tracing) == mask) set_item_value(*ip, TRUE); } result = menu_driver(mpTrace, cmd); if (result == E_OK) { if (update_trace_menu(mpTrace) || cmd == REQ_TOGGLE_ITEM) { newtrace = 0; for (ip = menu_items(mpTrace); *ip; ip++) { if (item_value(*ip)) { MENU_DATA *td = (MENU_DATA *) item_userptr(*ip); newtrace |= td->mask; } } trace(newtrace); Trace(("trace level interactively set to %s", tracetrace(_nc_tracing))); MvWPrintw(status, 1, 0, "Trace level is %s\n", tracetrace(_nc_tracing)); wrefresh(status); } } return result; } #endif /* TRACE */ /*****************************************************************************/ static int menu_number(void) { return item_index(current_item(mpBanner)) - (eBanner + 1); } static MENU * current_menu(void) { MENU *result; switch (menu_number()) { case eFile: result = mpFile; break; case eSelect: result = mpSelect; break; #ifdef TRACE case eTrace: result = mpTrace; break; #endif default: result = 0; break; } return result; } static void call_menus(int code) { (void) code; Trace(("Activated menu %d\n", code)); } static void build_menus(char *filename) { static MENU_DATA table[] = { {"File", call_menus, 0}, {"Select", call_menus, 1}, #ifdef TRACE {"Trace", call_menus, 2}, #endif {(char *) 0, 0, 0} }; static ITEM *items[SIZEOF(table)]; ITEM **ip = items; int n; for (n = 0; table[n].name != 0; ++n) { *ip = new_item(table[n].name, empty); set_item_userptr(*ip, (void *) &table[n]); ++ip; } *ip = (ITEM *) 0; mpBanner = menu_create(items, SIZEOF(table) - 1, SIZEOF(table) - 1, eBanner); set_menu_mark(mpBanner, ">"); build_file_menu(eFile); build_select_menu(eSelect, filename); #ifdef TRACE build_trace_menu(eTrace); #endif } static int move_menu(MENU * menu, MENU * current, int by_y, int by_x) { WINDOW *top_win = menu_win(menu); WINDOW *sub_win = menu_sub(menu); int y0, x0; int y1, x1; int result; getbegyx(top_win, y0, x0); y0 += by_y; x0 += by_x; getbegyx(sub_win, y1, x1); y1 += by_y; x1 += by_x; if ((result = mvwin(top_win, y0, x0)) != ERR) { #if defined(NCURSES_VERSION_PATCH) && (NCURSES_VERSION_PATCH < 20060218) sub_win->_begy = y1; sub_win->_begx = x1; #else mvwin(sub_win, y1, x1); #endif if (menu == current) { touchwin(top_win); wnoutrefresh(top_win); } } return result; } /* * Move the menus around on the screen, to test mvwin(). */ static void move_menus(MENU * current, int by_y, int by_x) { if (move_menu(mpBanner, current, by_y, by_x) != ERR) { erase(); wnoutrefresh(stdscr); move_menu(mpFile, current, by_y, by_x); move_menu(mpSelect, current, by_y, by_x); #ifdef TRACE move_menu(mpTrace, current, by_y, by_x); #endif doupdate(); } } static void show_status(int ch, MENU * menu) { wmove(status, 0, 0); wprintw(status, "key %s, menu %d, mark %s, match %s", keyname(ch), menu_number(), menu_mark(menu), menu_pattern(menu)); wclrtoeol(status); wrefresh(status); } static void perform_menus(void) { MENU *this_menu; MENU *last_menu = mpFile; int code = E_UNKNOWN_COMMAND; int cmd; int ch = ERR; #ifdef NCURSES_MOUSE_VERSION mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0); #endif menu_display(last_menu); for (;;) { if (ch != ERR) show_status(ch, last_menu); ch = menu_getc(mpBanner); /* * Provide for moving the menu around in the screen using shifted * cursor keys. */ switch (ch) { case KEY_SF: move_menus(last_menu, 1, 0); continue; case KEY_SR: move_menus(last_menu, -1, 0); continue; case KEY_SLEFT: move_menus(last_menu, 0, -1); continue; case KEY_SRIGHT: move_menus(last_menu, 0, 1); continue; } cmd = menu_virtualize(ch); switch (cmd) { /* * The banner menu acts solely to select one of the other menus. * Move between its items, wrapping at the left/right limits. */ case REQ_LEFT_ITEM: case REQ_RIGHT_ITEM: code = menu_driver(mpBanner, cmd); if (code == E_REQUEST_DENIED) { if (menu_number() > 0) code = menu_driver(mpBanner, REQ_FIRST_ITEM); else code = menu_driver(mpBanner, REQ_LAST_ITEM); } break; default: switch (menu_number()) { case eFile: code = perform_file_menu(cmd); break; case eSelect: code = perform_select_menu(cmd); break; #ifdef TRACE case eTrace: code = perform_trace_menu(cmd); break; #endif } if ((code == E_REQUEST_DENIED) && (cmd == KEY_MOUSE)) { code = menu_driver(mpBanner, cmd); } break; } if (code == E_OK) { this_menu = current_menu(); if (this_menu != last_menu) { move(1, 0); clrtobot(); box(menu_win(this_menu), 0, 0); refresh(); /* force the current menu to appear */ menu_display(this_menu); last_menu = this_menu; } } wrefresh(menu_win(last_menu)); if (code == E_UNKNOWN_COMMAND || code == E_NOT_POSTED) { ITEM *item = current_item(last_menu); MENU_DATA *td = (MENU_DATA *) item_userptr(item); td->func((int) td->mask); } if (code == E_REQUEST_DENIED) beep(); continue; } } static void destroy_menus(void) { menu_destroy(mpFile); menu_destroy(mpSelect); #ifdef TRACE menu_destroy(mpTrace); #endif menu_destroy(mpBanner); } #if HAVE_RIPOFFLINE static int rip_footer(WINDOW *win, int cols) { wbkgd(win, A_REVERSE); werase(win); wmove(win, 0, 0); wprintw(win, "footer: %d columns", cols); wnoutrefresh(win); return OK; } static int rip_header(WINDOW *win, int cols) { wbkgd(win, A_REVERSE); werase(win); wmove(win, 0, 0); wprintw(win, "header: %d columns", cols); wnoutrefresh(win); return OK; } #endif /* HAVE_RIPOFFLINE */ static void call_files(int code) { switch (code) { case 0: destroy_menus(); endwin(); printf("DONE!\n"); ExitProgram(EXIT_SUCCESS); } } static void usage(void) { static const char *const tbl[] = { "Usage: demo_menus [options] [menu-file]" ,"" ,"Options:" #if HAVE_RIPOFFLINE ," -f rip-off footer line (can repeat)" ," -h rip-off header line (can repeat)" #endif #ifdef TRACE ," -t mask specify default trace-level (may toggle with ^T)" #endif }; size_t n; for (n = 0; n < SIZEOF(tbl); n++) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int c; setlocale(LC_ALL, ""); while ((c = getopt(argc, argv, "a:de:fhmp:s:t:")) != -1) { switch (c) { #if HAVE_RIPOFFLINE case 'f': ripoffline(-1, rip_footer); break; case 'h': ripoffline(1, rip_header); break; #endif /* HAVE_RIPOFFLINE */ #ifdef TRACE case 't': trace((unsigned) strtoul(optarg, 0, 0)); break; #endif default: usage(); } } initscr(); noraw(); cbreak(); noecho(); if (has_colors()) { start_color(); init_pair(1, COLOR_RED, COLOR_BLACK); init_pair(2, COLOR_BLUE, COLOR_WHITE); } status = newwin(3, COLS, LINES - 3, 0); build_menus(argc > 1 ? argv[1] : 0); perform_menus(); destroy_menus(); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the curses menu library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/view.c0000644000175100001440000003356512606267456014603 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * view.c -- a silly little viewer program * * written by Eric S. Raymond December 1994 * to test the scrolling code in ncurses. * * modified by Thomas Dickey July 1995 to demonstrate * the use of 'resizeterm()', and May 2000 to illustrate wide-character * handling. * * Takes a filename argument. It's a simple file-viewer with various * scroll-up and scroll-down commands. * * n -- scroll one line forward * p -- scroll one line back * * Either command accepts a numeric prefix interpreted as a repeat count. * Thus, typing `5n' should scroll forward 5 lines in the file. * * The way you can tell this is working OK is that, in the trace file, * there should be one scroll operation plus a small number of line * updates, as opposed to a whole-page update. This means the physical * scroll operation worked, and the refresh() code only had to do a * partial repaint. * * $Id: view.c,v 1.95 2015/10/10 20:03:58 tom Exp $ */ #include #include #include #undef CTRL /* conflict on AIX 5.2 with */ #if HAVE_TERMIOS_H # include #else #if !defined(__MINGW32__) # include #endif #endif #if !defined(sun) || !HAVE_TERMIOS_H # if HAVE_SYS_IOCTL_H # include # endif #endif #define my_pair 1 /* This is needed to compile 'struct winsize' */ #if NEED_PTEM_H #include #include #endif #undef CTRL #define CTRL(x) ((x) & 0x1f) static void finish(int sig) GCC_NORETURN; static void show_all(const char *tag); #if defined(SIGWINCH) && defined(TIOCGWINSZ) && HAVE_RESIZE_TERM #define CAN_RESIZE 1 #else #define CAN_RESIZE 0 #endif #if CAN_RESIZE static void adjust(int sig); static int interrupted; static bool waiting = FALSE; #endif static int shift = 0; static bool try_color = FALSE; static char *fname; static NCURSES_CH_T **vec_lines; static NCURSES_CH_T **lptr; static int num_lines; static void usage(void) GCC_NORETURN; static void usage(void) { static const char *msg[] = { "Usage: view [options] file" ,"" ,"Options:" ," -c use color if terminal supports it" ," -i ignore INT, QUIT, TERM signals" ," -n NUM specify maximum number of lines (default 1000)" #if defined(KEY_RESIZE) ," -r use old-style sigwinch handler rather than KEY_RESIZE" #endif ," -s start in single-step mode, waiting for input" #ifdef TRACE ," -t trace screen updates" ," -T NUM specify trace mask" #endif }; size_t n; for (n = 0; n < SIZEOF(msg); n++) fprintf(stderr, "%s\n", msg[n]); ExitProgram(EXIT_FAILURE); } static int ch_len(NCURSES_CH_T * src) { int result = 0; #if USE_WIDEC_SUPPORT int count; #endif #if USE_WIDEC_SUPPORT for (;;) { TEST_CCHAR(src, count, { ++result; ++src; } , { break; }) } #else while (*src++) result++; #endif return result; } /* * Allocate a string into an array of chtype's. If UTF-8 mode is * active, translate the string accordingly. */ static NCURSES_CH_T * ch_dup(char *src) { unsigned len = (unsigned) strlen(src); NCURSES_CH_T *dst = typeMalloc(NCURSES_CH_T, len + 1); size_t j, k; #if USE_WIDEC_SUPPORT wchar_t wstr[CCHARW_MAX + 1]; wchar_t wch; int l = 0; size_t rc; int width; #ifndef state_unused mbstate_t state; #endif #endif /* USE_WIDEC_SUPPORT */ #if USE_WIDEC_SUPPORT reset_mbytes(state); #endif for (j = k = 0; j < len; j++) { #if USE_WIDEC_SUPPORT rc = (size_t) check_mbytes(wch, src + j, len - j, state); if (rc == (size_t) -1 || rc == (size_t) -2) { break; } j += rc - 1; width = wcwidth(wch); if (width == 0) { if (l == 0) { wstr[l++] = L' '; } } else if ((l > 0) || (l == CCHARW_MAX)) { wstr[l] = L'\0'; l = 0; if (setcchar(dst + k, wstr, 0, 0, NULL) != OK) { break; } ++k; } wstr[l++] = wch; #else dst[k++] = (chtype) UChar(src[j]); #endif } #if USE_WIDEC_SUPPORT if (l > 0) { wstr[l] = L'\0'; if (setcchar(dst + k, wstr, 0, 0, NULL) == OK) ++k; } wstr[0] = L'\0'; setcchar(dst + k, wstr, 0, 0, NULL); #else dst[k] = 0; #endif return dst; } int main(int argc, char *argv[]) { int MAXLINES = 1000; FILE *fp; char buf[BUFSIZ]; int i; int my_delay = 0; NCURSES_CH_T **olptr; int value = 0; bool done = FALSE; bool got_number = FALSE; bool single_step = FALSE; #if CAN_RESIZE bool nonposix_resize = FALSE; #endif const char *my_label = "Input"; setlocale(LC_ALL, ""); #ifndef NCURSES_VERSION /* * We know ncurses will catch SIGINT if we don't establish our own handler. * Other versions of curses may/may not catch it. */ (void) signal(SIGINT, finish); /* arrange interrupts to terminate */ #endif while ((i = getopt(argc, argv, "cin:rstT:")) != -1) { switch (i) { case 'c': try_color = TRUE; break; case 'i': CATCHALL(SIG_IGN); break; case 'n': if ((MAXLINES = atoi(optarg)) < 1 || (MAXLINES + 2) <= 1) usage(); break; #if CAN_RESIZE case 'r': nonposix_resize = TRUE; break; #endif case 's': single_step = TRUE; break; #ifdef TRACE case 'T': { char *next = 0; int tvalue = (int) strtol(optarg, &next, 0); if (tvalue < 0 || (next != 0 && *next != 0)) usage(); trace((unsigned) tvalue); } break; case 't': trace(TRACE_CALLS); break; #endif default: usage(); } } if (optind + 1 != argc) usage(); if ((vec_lines = typeCalloc(NCURSES_CH_T *, (size_t) MAXLINES + 2)) == 0) usage(); assert(vec_lines != 0); fname = argv[optind]; if ((fp = fopen(fname, "r")) == 0) { perror(fname); ExitProgram(EXIT_FAILURE); } #if CAN_RESIZE if (nonposix_resize) (void) signal(SIGWINCH, adjust); /* arrange interrupts to resize */ #endif Trace(("slurp the file")); for (lptr = &vec_lines[0]; (lptr - vec_lines) < MAXLINES; lptr++) { char temp[BUFSIZ], *s, *d; int col; if (fgets(buf, sizeof(buf), fp) == 0) break; #if USE_WIDEC_SUPPORT if (lptr == vec_lines) { if (!memcmp("", buf, 3)) { Trace(("trim BOM")); s = buf + 3; d = buf; do { } while ((*d++ = *s++) != '\0'); } } #endif /* convert tabs and nonprinting chars so that shift will work properly */ for (s = buf, d = temp, col = 0; (*d = *s) != '\0'; s++) { if (*d == '\r') { if (s[1] == '\n') { continue; } else { break; } } if (*d == '\n') { *d = '\0'; break; } else if (*d == '\t') { col = (col | 7) + 1; while ((d - temp) != col) *d++ = ' '; } else #if USE_WIDEC_SUPPORT col++, d++; #else if (isprint(UChar(*d))) { col++; d++; } else { sprintf(d, "\\%03o", UChar(*s)); d += strlen(d); col = (int) (d - temp); } #endif } *lptr = ch_dup(temp); } (void) fclose(fp); num_lines = (int) (lptr - vec_lines); (void) initscr(); /* initialize the curses library */ keypad(stdscr, TRUE); /* enable keyboard mapping */ (void) nonl(); /* tell curses not to do NL->CR/NL on output */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ if (!single_step) nodelay(stdscr, TRUE); idlok(stdscr, TRUE); /* allow use of insert/delete line */ if (try_color) { if (has_colors()) { start_color(); init_pair(my_pair, COLOR_WHITE, COLOR_BLUE); bkgd((chtype) COLOR_PAIR(my_pair)); } else { try_color = FALSE; } } lptr = vec_lines; while (!done) { int n, c; if (!got_number) show_all(my_label); for (;;) { #if CAN_RESIZE if (interrupted) { adjust(0); my_label = "interrupt"; } waiting = TRUE; c = getch(); waiting = FALSE; #else c = getch(); #endif if ((c < 127) && isdigit(c)) { if (!got_number) { MvPrintw(0, 0, "Count: "); clrtoeol(); } addch(UChar(c)); value = 10 * value + (c - '0'); got_number = TRUE; } else break; } if (got_number && value) { n = value; } else { n = 1; } if (c != ERR) my_label = keyname(c); switch (c) { case KEY_DOWN: case 'n': olptr = lptr; for (i = 0; i < n; i++) if ((lptr - vec_lines) < (num_lines - LINES + 1)) lptr++; else break; scrl((int) (lptr - olptr)); break; case KEY_UP: case 'p': olptr = lptr; for (i = 0; i < n; i++) if (lptr > vec_lines) lptr--; else break; scrl((int) (lptr - olptr)); break; case 'h': case KEY_HOME: lptr = vec_lines; break; case 'e': case KEY_END: if (num_lines > LINES) lptr = vec_lines + num_lines - LINES + 1; else lptr = vec_lines; break; case 'r': case KEY_RIGHT: shift += n; break; case 'l': case KEY_LEFT: shift -= n; if (shift < 0) { shift = 0; beep(); } break; case 'q': done = TRUE; break; #ifdef KEY_RESIZE case KEY_RESIZE: /* ignore this; ncurses will repaint */ break; #endif case 's': if (got_number) { halfdelay(my_delay = n); } else { nodelay(stdscr, FALSE); my_delay = -1; } break; case ' ': nodelay(stdscr, TRUE); my_delay = 0; break; case CTRL('L'): redrawwin(stdscr); break; case ERR: if (!my_delay) napms(50); break; default: beep(); break; } if (c >= KEY_MIN || (c > 0 && !isdigit(c))) { got_number = FALSE; value = 0; } } finish(0); /* we're done */ } static void finish(int sig) { endwin(); #if NO_LEAKS if (vec_lines != 0) { int n; for (n = 0; n < num_lines; ++n) { free(vec_lines[n]); } free(vec_lines); } #endif ExitProgram(sig != 0 ? EXIT_FAILURE : EXIT_SUCCESS); } #if CAN_RESIZE /* * This uses functions that are "unsafe", but it seems to work on SunOS. * Usually: the "unsafe" refers to the functions that POSIX lists which may be * called from a signal handler. Those do not include buffered I/O, which is * used for instance in wrefresh(). To be really portable, you should use the * KEY_RESIZE return (which relies on ncurses' sigwinch handler). * * The 'wrefresh(curscr)' is needed to force the refresh to start from the top * of the screen -- some xterms mangle the bitmap while resizing. */ static void adjust(int sig) { if (waiting || sig == 0) { struct winsize size; if (ioctl(fileno(stdout), TIOCGWINSZ, &size) == 0) { resize_term(size.ws_row, size.ws_col); wrefresh(curscr); show_all(sig ? "SIGWINCH" : "interrupt"); } interrupted = FALSE; } else { interrupted = TRUE; } (void) signal(SIGWINCH, adjust); /* some systems need this */ } #endif /* CAN_RESIZE */ static void show_all(const char *tag) { int i; char temp[BUFSIZ]; NCURSES_CH_T *s; time_t this_time; #if CAN_RESIZE sprintf(temp, "%.20s (%3dx%3d) col %d ", tag, LINES, COLS, shift); i = (int) strlen(temp); if ((i + 7) < (int) sizeof(temp)) { sprintf(temp + i, "view %.*s", (int) (sizeof(temp) - 7 - (size_t) i), fname); } #else (void) tag; sprintf(temp, "view %.*s", (int) sizeof(temp) - 7, fname); #endif move(0, 0); printw("%.*s", COLS, temp); clrtoeol(); this_time = time((time_t *) 0); strncpy(temp, ctime(&this_time), (size_t) 30); if ((i = (int) strlen(temp)) != 0) { temp[--i] = 0; if (move(0, COLS - i - 2) != ERR) printw(" %s", temp); } scrollok(stdscr, FALSE); /* prevent screen from moving */ for (i = 1; i < LINES; i++) { move(i, 0); printw("%3ld:", (long) (lptr + i - vec_lines)); clrtoeol(); if ((s = lptr[i - 1]) != 0) { int len = ch_len(s); if (len > shift) { #if USE_WIDEC_SUPPORT add_wchstr(s + shift); #else addchstr(s + shift); #endif } #if defined(NCURSES_VERSION) || defined(HAVE_WCHGAT) if (try_color) wchgat(stdscr, -1, A_NORMAL, my_pair, NULL); #endif } } setscrreg(1, LINES - 1); scrollok(stdscr, TRUE); refresh(); } ncurses-6.0-20160213/test/insdelln.c0000644000175100001440000002223112367267654015431 0ustar tomusers/**************************************************************************** * Copyright (c) 2008-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: insdelln.c,v 1.9 2014/08/02 23:09:32 tom Exp $ * * test-driver for deleteln, wdeleteln, insdelln, winsdelln, insertln, winsertln */ #include #define SHOW(n) ((n) == ERR ? "ERR" : "OK") #define COLOR_DEFAULT (-1) typedef struct { unsigned c; unsigned v; int pair; unsigned attr; int count; int ch; const char *c_msg; const char *v_msg; int y_val; int x_val; int y_beg, x_beg; int y_max, x_max; } STATUS; static const char * color_params(unsigned state, int *pair) { /* *INDENT-OFF* */ static struct { short pair; short fg, bg; const char *msg; } table[] = { { 0, COLOR_DEFAULT, COLOR_DEFAULT, "default" }, { 1, COLOR_RED, COLOR_BLACK, "red/black" }, { 2, COLOR_WHITE, COLOR_BLUE, "white/blue" }, }; /* *INDENT-ON* */ static bool first = TRUE; const char *result = 0; if (has_colors()) { if (first) { unsigned n; start_color(); for (n = 0; n < SIZEOF(table); ++n) { init_pair(table[n].pair, table[n].fg, table[n].bg); } } if (state < SIZEOF(table)) { *pair = table[state].pair; result = table[state].msg; } } return result; } static const char * video_params(unsigned state, unsigned *attr) { /* *INDENT-OFF* */ static struct { unsigned attr; const char *msg; } table[] = { { A_NORMAL, "normal" }, { A_BOLD, "bold" }, { A_REVERSE, "reverse" }, { A_UNDERLINE, "underline" }, { A_BLINK, "blink" }, }; /* *INDENT-ON* */ const char *result = 0; if (state < SIZEOF(table)) { *attr = table[state].attr; result = table[state].msg; } return result; } /* fill the window with a test-pattern */ static void fill_window(WINDOW *win) { int y, x; int y0 = -1, x0 = -1; getyx(win, y, x); wmove(win, 0, 0); while (waddstr(win, "0123456789 abcdefghijklmnopqrstuvwxyz ") != ERR) { int y1, x1; getyx(win, y1, x1); if (y1 == y0 && x1 == x0) break; x0 = x1; y0 = y1; } wmove(win, y, x); } static void show_status(WINDOW *win, STATUS * sp) { int y, x; getyx(win, y, x); wmove(win, 0, 0); wprintw(win, "Count %d", sp->count); if (sp->v_msg != 0) wprintw(win, " Video %s", sp->v_msg); if (sp->c_msg != 0) wprintw(win, " Color %s", sp->c_msg); wclrtoeol(win); wmove(win, y, x); } static void reshow_status(WINDOW *win, STATUS * sp) { fill_window(win); show_status(win, sp); } static void do_subwindow(WINDOW *win, STATUS * sp, void func(WINDOW *)) { WINDOW *win1 = newwin(sp->y_max - 2, sp->x_max - 2, sp->y_beg + 1, sp->x_beg + 1); if (win1 != 0 && sp->y_max > 4 && sp->x_max > 4) { WINDOW *win2 = derwin(win1, sp->y_max - 4, sp->x_max - 4, 1, 1); if (win2 != 0) { box(win1, 0, 0); wrefresh(win1); func(win2); delwin(win2); } else { beep(); } delwin(win1); touchwin(win); } else { if (win1) delwin(win1); beep(); } } static void init_status(WINDOW *win, STATUS * sp) { memset(sp, 0, sizeof(*sp)); sp->c = 99; sp->v = 99; sp->ch = ' '; keypad(win, TRUE); fill_window(win); getbegyx(win, sp->y_beg, sp->x_beg); getmaxyx(win, sp->y_max, sp->x_max); } static void show_help(WINDOW *win) { static const char *table[] = { "Basic commands:" ,"Use h/j/k/l or arrow keys to move the cursor." ,"Set the count parameter for insert/delete by entering digits 0-9." ,"" ,"Other commands:" ,"space toggles through the set of video attributes and colors." ,"t touches (forces repaint) of the current line." ,"i calls insertln at the current position with the given count." ,"d calls deleteln at the window beginning with the given count." ,"I calls insdelln at the window beginning with the given count." ,"D calls insdelln at the window beginning with the given -count." ,"f refills the window with test-pattern using current attributes." ,"w recur to test windows other than stdscr" ,"q quit" ,"= resets count to zero." ,"? shows this help-window" ,"" ,"" }; int y_max, x_max; int row; getmaxyx(win, y_max, x_max); for (row = 0; row < (int) SIZEOF(table) && row < y_max; ++row) { MvWPrintw(win, row, 0, "%.*s", x_max, table[row]); } while (wgetch(win) != 'q') beep(); } static void update_status(WINDOW *win, STATUS * sp) { switch (sp->ch) { case ' ': /* next test-iteration */ if (has_colors()) { if ((sp->c_msg = color_params(++(sp->c), &(sp->pair))) == 0) { sp->c_msg = color_params(sp->c = 0, &(sp->pair)); if ((sp->v_msg = video_params(++(sp->v), &(sp->attr))) == 0) { sp->v_msg = video_params(sp->v = 0, &(sp->attr)); } } } else { if ((sp->v_msg = video_params(++(sp->v), &(sp->attr))) == 0) { sp->v_msg = video_params(sp->v = 0, &(sp->attr)); } } sp->count = 0; show_status(win, sp); break; case KEY_LEFT: case 'h': if (sp->x_val > 0) wmove(win, sp->y_val, --(sp->x_val)); break; case KEY_DOWN: case 'j': if (sp->y_val < sp->y_max) wmove(win, ++(sp->y_val), sp->x_val); break; case KEY_UP: case 'k': if (sp->y_val > 0) wmove(win, --(sp->y_val), sp->x_val); break; case KEY_RIGHT: case 'l': if (sp->x_val < sp->x_max) wmove(win, sp->y_val, ++(sp->x_val)); break; case 't': touchline(win, sp->y_val, 1); break; case '=': sp->count = 0; show_status(win, sp); break; case '?': do_subwindow(win, sp, show_help); break; default: if (isdigit(sp->ch)) { sp->count = (sp->count * 10) + (sp->ch - '0'); show_status(win, sp); } else { beep(); } break; } } static void test_winsdelln(WINDOW *win) { STATUS st; int n; init_status(win, &st); do { (void) wattrset(win, AttrArg(COLOR_PAIR(st.pair), st.attr)); switch (st.ch) { case 'i': for (n = 0; n < st.count; ++n) winsertln(win); break; case 'd': for (n = 0; n < st.count; ++n) wdeleteln(win); break; case 'I': winsdelln(win, st.count); break; case 'D': winsdelln(win, -st.count); break; case 'f': fill_window(win); reshow_status(win, &st); break; case 'w': do_subwindow(win, &st, test_winsdelln); break; case 'q': return; default: update_status(win, &st); break; } } while ((st.ch = wgetch(win)) != ERR); } static void test_insdelln(void) { STATUS st; int n; init_status(stdscr, &st); do { (void) attrset(AttrArg(COLOR_PAIR(st.pair), st.attr)); switch (st.ch) { case 'i': for (n = 0; n < st.count; ++n) insertln(); break; case 'd': for (n = 0; n < st.count; ++n) deleteln(); break; case 'I': insdelln(st.count); break; case 'D': insdelln(-st.count); break; case 'f': fill_window(stdscr); reshow_status(stdscr, &st); break; case 'w': do_subwindow(stdscr, &st, test_winsdelln); break; case 'q': return; default: update_status(stdscr, &st); break; } } while ((st.ch = getch()) != ERR); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { initscr(); cbreak(); noecho(); test_insdelln(); endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/test_opaque.c0000644000175100001440000002465711270667731016160 0ustar tomusers/**************************************************************************** * Copyright (c) 2007-2008,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_opaque.c,v 1.9 2009/10/24 21:21:29 tom Exp $ * * Author: Thomas E Dickey * * Demonstrate the opaque functions from the curses library. WINDOW * wgetparent (const WINDOW *); bool is_cleared(const WINDOW *win); bool is_idcok(const WINDOW *win); bool is_idlok(const WINDOW *win); bool is_immedok(const WINDOW *win); bool is_keypad(const WINDOW *win); bool is_leaveok(const WINDOW *win); bool is_nodelay(const WINDOW *win); bool is_notimeout(const WINDOW *win); bool is_scrollok(const WINDOW *win); bool is_syncok(const WINDOW *win); int wgetscrreg (const WINDOW *, int *, int *); */ #include #define BASE_Y 6 #define MAX_COLS 1024 #if defined(NCURSES_VERSION_PATCH) && (NCURSES_VERSION_PATCH >= 20080119) && NCURSES_EXT_FUNCS static bool Quit(int ch) { return (ch == 'q' || ch == QUIT || ch == ESCAPE); } typedef bool(*BoolOpaque) (WINDOW *, int); static bool test_opaque_cleared(WINDOW *win, int mode) { if (mode >= 0) { if (mode) wclear(win); } return is_cleared(win); } static bool test_opaque_idcok(WINDOW *win, int mode) { if (mode >= 0) { idcok(win, mode); } return is_idcok(win); } static bool test_opaque_idlok(WINDOW *win, int mode) { if (mode >= 0) { idlok(win, mode); } return is_idlok(win); } static bool test_opaque_immedok(WINDOW *win, int mode) { if (mode >= 0) { immedok(win, mode); } return is_immedok(win); } static bool test_opaque_keypad(WINDOW *win, int mode) { if (mode >= 0) { keypad(win, mode); } return is_keypad(win); } static bool test_opaque_leaveok(WINDOW *win, int mode) { if (mode >= 0) { leaveok(win, mode); } return is_leaveok(win); } static bool test_opaque_nodelay(WINDOW *win, int mode) { if (mode >= 0) { nodelay(win, mode); } return is_nodelay(win); } static bool test_opaque_notimeout(WINDOW *win, int mode) { if (mode >= 0) { notimeout(win, mode); } return is_notimeout(win); } static bool test_opaque_scrollok(WINDOW *win, int mode) { if (mode >= 0) { scrollok(win, mode); } return is_scrollok(win); } static bool test_opaque_syncok(WINDOW *win, int mode) { if (mode >= 0) { syncok(win, mode); } return is_syncok(win); } static int status_y(WINDOW *stswin, int cell) { return (cell % getmaxy(stswin)); } static int status_x(WINDOW *stswin, int cell) { return (15 * (cell / getmaxy(stswin))); } static void to_keyword(WINDOW *stswin, int cell) { wmove(stswin, status_y(stswin, cell), status_x(stswin, cell)); } static void to_result(WINDOW *stswin, int cell, bool before) { int y = status_y(stswin, cell); int x = status_x(stswin, cell) + 11; if (!before) ++x; wmove(stswin, y, x); } static void show_keyword(WINDOW *stswin, int cell, int active, const char *name) { to_keyword(stswin, cell); if (active == cell) (void) wstandout(stswin); wprintw(stswin, "%s:", name); if (active == cell) (void) wstandend(stswin); } /* *INDENT-OFF* */ static struct { const char *name; BoolOpaque func; } bool_funcs[] = { { "cleared", test_opaque_cleared }, { "idcok", test_opaque_idcok }, { "idlok", test_opaque_idlok }, { "immedok", test_opaque_immedok }, { "keypad", test_opaque_keypad }, { "leaveok", test_opaque_leaveok }, { "nodelay", test_opaque_nodelay }, { "notimeout", test_opaque_notimeout }, { "scrollok", test_opaque_scrollok }, { "syncok", test_opaque_syncok } }; /* *INDENT-ON* */ /* * Display and/or allow update for the properties accessed in the opaque * window. Some may change state after refreshing the window, so we * distinguish between them using the 'before' parameter. */ static int show_opaque(WINDOW *stswin, WINDOW *txtwin, bool before, int active) { int n; int top, bottom; if (before) { werase(stswin); } for (n = 0; n < (int) SIZEOF(bool_funcs); ++n) { show_keyword(stswin, n, active, bool_funcs[n].name); to_result(stswin, n, before); wprintw(stswin, "%c", bool_funcs[n].func(txtwin, -1) ? 'T' : 'F'); } show_keyword(stswin, n, active, "wgetparent"); to_result(stswin, n, TRUE); wprintw(stswin, "%p", (void *) wgetparent(txtwin)); ++n; show_keyword(stswin, n, active, "wgetscrreg"); to_result(stswin, n, TRUE); if (wgetscrreg(txtwin, &top, &bottom) == OK) wprintw(stswin, "%d,%d", top, bottom); wnoutrefresh(stswin); return active; } static int test_opaque(int level, char **argv, WINDOW *stswin) { WINDOW *txtbox = 0; WINDOW *txtwin = 0; FILE *fp; int ch; int txt_x = 0, txt_y = 0; int base_y; bool in_status = FALSE; int active = 0; if (argv[level] == 0) { beep(); return FALSE; } if (level > 1) { txtbox = newwin(LINES - BASE_Y, COLS - level, BASE_Y, level); box(txtbox, 0, 0); wnoutrefresh(txtbox); txtwin = derwin(txtbox, getmaxy(txtbox) - 2, getmaxx(txtbox) - 2, 1, 1); base_y = 0; } else { txtwin = stdscr; base_y = BASE_Y; } keypad(txtwin, TRUE); /* enable keyboard mapping */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ txt_y = base_y; txt_x = 0; wmove(txtwin, txt_y, txt_x); if ((fp = fopen(argv[level], "r")) != 0) { while ((ch = fgetc(fp)) != EOF) { if (waddch(txtwin, UChar(ch)) != OK) { break; } } fclose(fp); } else { wprintw(txtwin, "Cannot open:\n%s", argv[1]); } for (;;) { if (in_status) { to_keyword(stswin, active); ch = wgetch(stswin); show_opaque(stswin, txtwin, TRUE, active); if (Quit(ch)) break; switch (ch) { case '\t': in_status = FALSE; break; case KEY_DOWN: case 'j': if (active < (int) SIZEOF(bool_funcs) - 1) active++; else beep(); break; case KEY_UP: case 'k': if (active > 0) active--; else beep(); break; case ' ': bool_funcs[active].func(txtwin, !bool_funcs[active].func(txtwin, -1)); break; default: beep(); break; } show_opaque(stswin, txtwin, FALSE, in_status ? active : -1); } else { ch = mvwgetch(txtwin, txt_y, txt_x); show_opaque(stswin, txtwin, TRUE, -1); if (Quit(ch)) break; switch (ch) { case '\t': in_status = TRUE; break; case KEY_DOWN: case 'j': if (txt_y < getmaxy(txtwin) - 1) txt_y++; else beep(); break; case KEY_UP: case 'k': if (txt_y > base_y) txt_y--; else beep(); break; case KEY_LEFT: case 'h': if (txt_x > 0) txt_x--; else beep(); break; case KEY_RIGHT: case 'l': if (txt_x < getmaxx(txtwin) - 1) txt_x++; else beep(); break; case 'w': test_opaque(level + 1, argv, stswin); if (txtbox != 0) { touchwin(txtbox); wnoutrefresh(txtbox); } else { touchwin(txtwin); wnoutrefresh(txtwin); } break; default: beep(); napms(100); break; } show_opaque(stswin, txtwin, FALSE, -1); } } if (level > 1) { delwin(txtwin); delwin(txtbox); } return TRUE; } static void test_set_escdelay(void) { set_escdelay((100 + ESCDELAY) / 2); } static void test_set_tabsize(void) { int y0, x0; int y, x; int save_tabsize = TABSIZE; (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ for (y = 0; y < LINES; ++y) { set_tabsize(y + 1); if (move(y, 0) == ERR) break; for (x = 0; x < COLS;) { addch('\t'); if (addch('*') == ERR) { break; } getyx(stdscr, y0, x0); if (y0 != y || x0 == x) { break; } } } getch(); erase(); set_tabsize(save_tabsize); } int main(int argc, char *argv[]) { WINDOW *stsbox; WINDOW *stswin; setlocale(LC_ALL, ""); if (argc < 2) { fprintf(stderr, "usage: %s file\n", argv[0]); return EXIT_FAILURE; } initscr(); test_set_escdelay(); test_set_tabsize(); stsbox = derwin(stdscr, BASE_Y, COLS, 0, 0); box(stsbox, 0, 0); wnoutrefresh(stsbox); stswin = derwin(stsbox, BASE_Y - 2, COLS - 2, 1, 1); keypad(stswin, TRUE); test_opaque(1, argv, stswin); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/savescreen.sh0000755000175100001440000000524111264137635016142 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 2007,2009 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: savescreen.sh,v 1.4 2009/10/10 17:08:45 tom Exp $ # # Use this script to exercise "savescreen". # It starts by generating a series of temporary-filenames, which are passed # to the test-program. Loop as long as the first file named exists. PARAMS= NFILES=4 PREFIX=savescreen-$$ n=0 BEGINS=$PREFIX-$n.tmp while test $n != $NFILES do LATEST=$PREFIX-$n.tmp PARAMS="$PARAMS $LATEST" n=`expr $n + 1` done ./savescreen $PARAMS if test -f $BEGINS then while test -f $BEGINS do ./savescreen -r $PARAMS test $? != 0 && break done else echo "No screens were saved" fi ncurses-6.0-20160213/test/package/0000755000175100001440000000000012642031005015017 5ustar tomusersncurses-6.0-20160213/test/package/mingw-ncurses-examples.spec0000644000175100001440000000525712233050215022321 0ustar tomusersSummary: ncurses-examples - example/test programs from ncurses %?mingw_package_header %define AppProgram ncurses-examples %define AppVersion MAJOR.MINOR %define AppRelease YYYYMMDD # $Id: mingw-ncurses-examples.spec,v 1.3 2013/10/26 23:30:21 tom Exp $ Name: mingw32-ncurses6-examples Version: %{AppVersion} Release: %{AppRelease} License: X11 Group: Development/Libraries Source: ncurses-examples-%{release}.tgz # URL: http://invisible-island.net/ncurses/ BuildRequires: mingw32-ncurses6 BuildRequires: mingw32-filesystem >= 95 BuildRequires: mingw32-gcc BuildRequires: mingw32-binutils BuildRequires: mingw64-ncurses6 BuildRequires: mingw64-filesystem >= 95 BuildRequires: mingw64-gcc BuildRequires: mingw64-binutils %define CC_NORMAL -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wconversion %define CC_STRICT %{CC_NORMAL} -W -Wbad-function-cast -Wcast-align -Wcast-qual -Wmissing-declarations -Wnested-externs -Wpointer-arith -Wwrite-strings -ansi -pedantic %description -n mingw32-ncurses6-examples Cross-compiling support for ncurses to mingw32. The ncurses library routines are a terminal-independent method of updating character screens with reasonable optimization. This package is used for testing ABI 6 with cross-compiles to MinGW. %package -n mingw64-ncurses6-examples Summary: Curses library for MinGW64 %description -n mingw64-ncurses6-examples Cross-compiling support for ncurses to mingw64. The ncurses library routines are a terminal-independent method of updating character screens with reasonable optimization. This package is used for testing ABI 6 with cross-compiles to MinGW. %prep # override location of bindir, e.g., to avoid conflict with pdcurses %global mingw32_bindir %{mingw32_exec_prefix}/bin/%{AppProgram} %global mingw64_bindir %{mingw64_exec_prefix}/bin/%{AppProgram} %define CFG_OPTS \\\ --disable-echo \\\ --enable-warnings \\\ --verbose %define debug_package %{nil} %setup -q -n ncurses-examples-%{release} %build mkdir BUILD-W32 pushd BUILD-W32 CFLAGS="%{CC_NORMAL}" \ CC=%{mingw32_cc} \ %mingw32_configure %{CFG_OPTS} cp config.status /tmp/ming32-config.status make popd mkdir BUILD-W64 pushd BUILD-W64 CFLAGS="%{CC_NORMAL}" \ CC=%{mingw64_cc} \ %mingw64_configure %{CFG_OPTS} cp config.status /tmp/ming64-config.status make popd %install rm -rf $RPM_BUILD_ROOT pushd BUILD-W32 %{mingw32_make} install DESTDIR=$RPM_BUILD_ROOT popd pushd BUILD-W64 %{mingw64_make} install DESTDIR=$RPM_BUILD_ROOT popd %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %files -n mingw32-ncurses6-examples %{mingw32_bindir}/* %files -n mingw64-ncurses6-examples %{mingw64_bindir}/* %changelog * Sat Oct 19 2013 Thomas E. Dickey - initial version ncurses-6.0-20160213/test/package/debian-mingw64/0000755000175100001440000000000012642031005017532 5ustar tomusersncurses-6.0-20160213/test/package/debian-mingw64/rules0000755000175100001440000000433212523533113020621 0ustar tomusers#!/usr/bin/make -f # MAde with the aid of dh_make, by Craig Small # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Cristoph Lameter. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) CC_NORMAL = -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wconversion CC_STRICT = $(CC_NORMAL) -W -Wbad-function-cast -Wcast-align -Wcast-qual -Wmissing-declarations -Wnested-externs -Wpointer-arith -Wwrite-strings -ansi -pedantic TARGET = x86_64-w64-mingw32 MINGW_BIN = /usr/bin MINGW_TOP = /usr/$(TARGET) MINGW_TMP = $(CURDIR)/debian/mingw64-ncurses-examples CFLAGS = $(CC_NORMAL) ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif configure: configure-stamp configure-stamp: dh_testdir CFLAGS="$(CFLAGS)" ./configure \ --host=$(TARGET) \ --target=$(TARGET) \ --prefix=$(MINGW_TOP) \ --with-screen=ncursesw6 \ --with-pkg-config-libdir=/usr/$(TARGET)/lib/pkgconfig touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir $(MAKE) touch build-stamp clean: dh_testdir dh_testroot [ ! -f makefile ] || $(MAKE) distclean rm -f configure-stamp build-stamp install-stamp dh_clean install: install-stamp install-stamp: build-stamp dh_testdir dh_testroot dh_clean -k dh_installdirs $(MAKE) install DESTDIR=$(MINGW_TMP) touch install-stamp # Build architecture-independent files here. binary-indep: build install # No binary-indep target. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installdocs dh_installexamples dh_installchangelogs NEWS dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install install-stamp ncurses-6.0-20160213/test/package/debian-mingw64/control0000644000175100001440000000117512523463465021162 0ustar tomusersSource: ncurses-examples Maintainer: Thomas E. Dickey Section: misc Priority: optional Standards-Version: 3.8.4 Build-Depends: debhelper (>= 5) Homepage: http://invisible-island.net/ncurses/ncurses-examples.html Package: mingw64-ncurses-examples Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: ncurses-examples - example/test programs from ncurses These are the example/test programs from the ncurses distribution. . This package is used for testing ABI 6 with the MinGW 64-bit port. . This package installs in "bin/ncurses-examples" to avoid conflict with other packages. ncurses-6.0-20160213/test/package/debian-mingw64/watch0000644000175100001440000000016611542764411020602 0ustar tomusersversion=3 opts=passive ftp://invisible-island.net/ncurses-examples/ncurses-examples-([\d.]+)\.tgz \ debian uupdate ncurses-6.0-20160213/test/package/debian-mingw64/docs0000644000175100001440000000000711411671635020416 0ustar tomusersREADME ncurses-6.0-20160213/test/package/debian-mingw64/source/0000755000175100001440000000000012525673460021053 5ustar tomusersncurses-6.0-20160213/test/package/debian-mingw64/source/format0000644000175100001440000000001512525673460022262 0ustar tomusers3.0 (native) ncurses-6.0-20160213/test/package/debian-mingw64/compat0000644000175100001440000000000211363402276020743 0ustar tomusers5 ncurses-6.0-20160213/test/package/debian-mingw64/copyright0000644000175100001440000000732212642031005021471 0ustar tomusersUpstream source http://invisible-island.net/ncurses/ncurses-examples.html Current ncurses maintainer: Thomas Dickey ------------------------------------------------------------------------------- Files: * Copyright: 1998-2015,2016 Free Software Foundation, Inc. Licence: X11 Files: aclocal.m4 package Copyright: 2003-2015,2016 by Thomas E. Dickey Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. ------------------------------------------------------------------------------- Files: install-sh Copyright: 1994 X Consortium Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other deal- ings in this Software without prior written authorization from the X Consor- tium. FSF changes to this file are in the public domain. Calling this script install-sh is preferred over install.sh, to prevent `make' implicit rules from creating a file called install from it when there is no Makefile. This script is compatible with the BSD install script, but was written from scratch. It can only install one file at a time, a restriction shared with many OS's install programs. On Debian systems, the complete text of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-2' -- vile: txtmode file-encoding=utf-8 ncurses-6.0-20160213/test/package/debian-mingw/0000755000175100001440000000000012642031005017360 5ustar tomusersncurses-6.0-20160213/test/package/debian-mingw/rules0000755000175100001440000000433012523465615020460 0ustar tomusers#!/usr/bin/make -f # MAde with the aid of dh_make, by Craig Small # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Cristoph Lameter. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) CC_NORMAL = -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wconversion CC_STRICT = $(CC_NORMAL) -W -Wbad-function-cast -Wcast-align -Wcast-qual -Wmissing-declarations -Wnested-externs -Wpointer-arith -Wwrite-strings -ansi -pedantic TARGET = i686-w64-mingw32 MINGW_BIN = /usr/bin MINGW_TOP = /usr/$(TARGET) MINGW_TMP = $(CURDIR)/debian/mingw32-ncurses-examples CFLAGS = $(CC_NORMAL) ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif configure: configure-stamp configure-stamp: dh_testdir CFLAGS="$(CFLAGS)" ./configure \ --host=$(TARGET) \ --target=$(TARGET) \ --prefix=$(MINGW_TOP) \ --with-screen=ncursesw6 \ --with-pkg-config-libdir=/usr/$(TARGET)/lib/pkgconfig touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir $(MAKE) touch build-stamp clean: dh_testdir dh_testroot [ ! -f makefile ] || $(MAKE) distclean rm -f configure-stamp build-stamp install-stamp dh_clean install: install-stamp install-stamp: build-stamp dh_testdir dh_testroot dh_clean -k dh_installdirs $(MAKE) install DESTDIR=$(MINGW_TMP) touch install-stamp # Build architecture-independent files here. binary-indep: build install # No binary-indep target. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installdocs dh_installexamples dh_installchangelogs NEWS dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install install-stamp ncurses-6.0-20160213/test/package/debian-mingw/control0000644000175100001440000000117512523463012020774 0ustar tomusersSource: ncurses-examples Maintainer: Thomas E. Dickey Section: misc Priority: optional Standards-Version: 3.8.4 Build-Depends: debhelper (>= 5) Homepage: http://invisible-island.net/ncurses/ncurses-examples.html Package: mingw32-ncurses-examples Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: ncurses-examples - example/test programs from ncurses These are the example/test programs from the ncurses distribution. . This package is used for testing ABI 6 with the MinGW 32-bit port. . This package installs in "bin/ncurses-examples" to avoid conflict with other packages. ncurses-6.0-20160213/test/package/debian-mingw/watch0000644000175100001440000000016611542764411020430 0ustar tomusersversion=3 opts=passive ftp://invisible-island.net/ncurses-examples/ncurses-examples-([\d.]+)\.tgz \ debian uupdate ncurses-6.0-20160213/test/package/debian-mingw/docs0000644000175100001440000000000711411671635020244 0ustar tomusersREADME ncurses-6.0-20160213/test/package/debian-mingw/source/0000755000175100001440000000000012525673460020701 5ustar tomusersncurses-6.0-20160213/test/package/debian-mingw/source/format0000644000175100001440000000001512525673460022110 0ustar tomusers3.0 (native) ncurses-6.0-20160213/test/package/debian-mingw/compat0000644000175100001440000000000211363402276020571 0ustar tomusers5 ncurses-6.0-20160213/test/package/debian-mingw/copyright0000644000175100001440000000732212642031005021317 0ustar tomusersUpstream source http://invisible-island.net/ncurses/ncurses-examples.html Current ncurses maintainer: Thomas Dickey ------------------------------------------------------------------------------- Files: * Copyright: 1998-2015,2016 Free Software Foundation, Inc. Licence: X11 Files: aclocal.m4 package Copyright: 2003-2015,2016 by Thomas E. Dickey Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. ------------------------------------------------------------------------------- Files: install-sh Copyright: 1994 X Consortium Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other deal- ings in this Software without prior written authorization from the X Consor- tium. FSF changes to this file are in the public domain. Calling this script install-sh is preferred over install.sh, to prevent `make' implicit rules from creating a file called install from it when there is no Makefile. This script is compatible with the BSD install script, but was written from scratch. It can only install one file at a time, a restriction shared with many OS's install programs. On Debian systems, the complete text of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-2' -- vile: txtmode file-encoding=utf-8 ncurses-6.0-20160213/test/package/debian/0000755000175100001440000000000012642031005016241 5ustar tomusersncurses-6.0-20160213/test/package/debian/rules0000755000175100001440000001033212550323374017333 0ustar tomusers#!/usr/bin/make -f # MAde with the aid of dh_make, by Craig Small # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Cristoph Lameter. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # packages NCURSES_PKG = ncurses-examples NCURSEST_PKG = ncursest-examples PACKAGES.indep = # ncurses-examples-docs PACKAGES.arch = $(NCURSES_PKG) $(NCURSEST_PKG) # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) CFLAGS = ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif verbose = # -v configure = \ CFLAGS="$(CFLAGS)" ../../configure \ --host=$(DEB_HOST_GNU_TYPE) \ --build=$(DEB_BUILD_GNU_TYPE) \ --prefix=/usr \ --disable-rpath-hack .PHONY: all config build install binary clean config-indep config-arch \ build-indep build-arch install-indep install-arch binary-indep \ binary-arch all: build config: config-indep config-arch build: build-indep build-arch install: install-indep install-arch binary: binary-indep binary-arch clean: dh_testdir dh_testroot dh_clean $(verbose) rm -rf t config-indep: $(PACKAGES.indep:%=config-%-stamp) config-arch: $(PACKAGES.arch:%=config-%-stamp) build-indep: $(PACKAGES.indep:%=build-%-stamp) build-arch: $(PACKAGES.arch:%=build-%-stamp) install-indep: $(PACKAGES.indep:%=install-%-stamp) install-arch: $(PACKAGES.arch:%=install-%-stamp) config-$(NCURSES_PKG)-stamp: dh_testdir rm -rf t/ncurses6 mkdir -p t/ncurses6 cd t/ncurses6; $(configure) \ --bindir=\$${prefix}/bin/$(NCURSES_PKG) \ --with-screen=ncursesw6 touch $@ config-$(NCURSEST_PKG)-stamp: dh_testdir rm -rf t/ncursest6 mkdir -p t/ncursest6 cd t/ncursest6; $(configure) \ --bindir=\$${prefix}/bin/$(NCURSEST_PKG) \ --with-screen=ncursestw6 touch $@ build-$(NCURSES_PKG)-stamp: config-$(NCURSES_PKG)-stamp dh_testdir $(MAKE) -C t/ncurses6 touch $@ build-$(NCURSEST_PKG)-stamp: config-$(NCURSEST_PKG)-stamp dh_testdir $(MAKE) -C t/ncursest6 touch $@ install-$(NCURSES_PKG)-stamp: build-$(NCURSES_PKG)-stamp dh_testdir dh_testroot dh_installdirs $(verbose) dh_prep $(verbose) -p$(NCURSES_PKG) $(MAKE) -C t/ncurses6 install DESTDIR=$(CURDIR)/debian/$(NCURSES_PKG) touch $@ install-$(NCURSEST_PKG)-stamp: build-$(NCURSEST_PKG)-stamp dh_testdir dh_testroot dh_installdirs $(verbose) dh_prep $(verbose) -p$(NCURSEST_PKG) $(MAKE) -C t/ncursest6 install DESTDIR=$(CURDIR)/debian/$(NCURSEST_PKG) touch $@ # Build architecture-independent files here. binary-indep: install-indep ifneq ($(PACKAGES.indep),) rm -f $(PACKAGES.indep:%=install-%-stamp) dh_testdir dh_testroot dh_installdocs $(verbose) $(PACKAGES.indep:%=-p%) dh_installman $(verbose) $(PACKAGES.indep:%=-p%) dh_installexamples $(verbose) $(PACKAGES.indep:%=-p%) dh_installchangelogs $(verbose) $(PACKAGES.indep:%=-p%) NEWS dh_compress $(verbose) $(PACKAGES.indep:%=-p%) dh_fixperms $(verbose) $(PACKAGES.indep:%=-p%) dh_installdeb $(verbose) $(PACKAGES.indep:%=-p%) dh_gencontrol $(verbose) $(PACKAGES.indep:%=-p%) dh_md5sums $(verbose) $(PACKAGES.indep:%=-p%) dh_builddeb $(verbose) $(PACKAGES.indep:%=-p%) endif # Build architecture-dependent files here. binary-arch: install-arch ifneq ($(PACKAGES.arch),) rm -f $(PACKAGES.arch:%=install-%-stamp) dh_testdir dh_testroot dh_installchangelogs $(verbose) $(PACKAGES.arch:%=-p%) NEWS dh_strip $(verbose) $(PACKAGES.arch:%=-p%) dh_compress $(verbose) $(PACKAGES.arch:%=-p%) dh_fixperms $(verbose) $(PACKAGES.arch:%=-p%) dh_installdeb $(verbose) $(PACKAGES.arch:%=-p%) dh_makeshlibs $(verbose) $(PACKAGES.arch:%=-p%) dh_shlibdeps $(verbose) $(PACKAGES.arch:%=-p%) dh_gencontrol $(verbose) $(PACKAGES.arch:%=-p%) dh_md5sums $(verbose) $(PACKAGES.arch:%=-p%) dh_builddeb $(verbose) $(PACKAGES.arch:%=-p%) endif ncurses-6.0-20160213/test/package/debian/control0000644000175100001440000000161512550316501017654 0ustar tomusersSource: ncurses-examples Maintainer: Thomas E. Dickey Section: misc Priority: optional Standards-Version: 3.8.4 Build-Depends: debhelper (>= 5) Homepage: http://invisible-island.net/ncurses/ncurses-examples.html Package: ncurses-examples Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: ncurses-examples - example/test programs from ncurses These are the example/test programs from the ncurses distribution. . This package installs in "bin/ncurses-examples" to avoid conflict with other packages. Package: ncursest-examples Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: ncurses-examples - example/test programs from ncurses These are the example/test programs from the ncurses distribution, using the thread configuration. . This package installs in "bin/ncursest-examples" to avoid conflict with other packages. ncurses-6.0-20160213/test/package/debian/watch0000644000175100001440000000016611542764411017311 0ustar tomusersversion=3 opts=passive ftp://invisible-island.net/ncurses-examples/ncurses-examples-([\d.]+)\.tgz \ debian uupdate ncurses-6.0-20160213/test/package/debian/docs0000644000175100001440000000000711411671635017125 0ustar tomusersREADME ncurses-6.0-20160213/test/package/debian/source/0000755000175100001440000000000012525673460017562 5ustar tomusersncurses-6.0-20160213/test/package/debian/source/format0000644000175100001440000000001512525673460020771 0ustar tomusers3.0 (native) ncurses-6.0-20160213/test/package/debian/compat0000644000175100001440000000000211363402276017452 0ustar tomusers5 ncurses-6.0-20160213/test/package/debian/copyright0000644000175100001440000000732212642031005020200 0ustar tomusersUpstream source http://invisible-island.net/ncurses/ncurses-examples.html Current ncurses maintainer: Thomas Dickey ------------------------------------------------------------------------------- Files: * Copyright: 1998-2015,2016 Free Software Foundation, Inc. Licence: X11 Files: aclocal.m4 package Copyright: 2003-2015,2016 by Thomas E. Dickey Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. ------------------------------------------------------------------------------- Files: install-sh Copyright: 1994 X Consortium Licence: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other deal- ings in this Software without prior written authorization from the X Consor- tium. FSF changes to this file are in the public domain. Calling this script install-sh is preferred over install.sh, to prevent `make' implicit rules from creating a file called install from it when there is no Makefile. This script is compatible with the BSD install script, but was written from scratch. It can only install one file at a time, a restriction shared with many OS's install programs. On Debian systems, the complete text of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-2' -- vile: txtmode file-encoding=utf-8 ncurses-6.0-20160213/test/package/ncurses-examples.spec0000644000175100001440000000247012516671232021210 0ustar tomusersSummary: ncurses-examples - example/test programs from ncurses %define AppProgram ncurses-examples %define AppVersion MAJOR.MINOR %define AppRelease YYYYMMDD # $Id: ncurses-examples.spec,v 1.5 2015/04/25 10:55:22 tom Exp $ Name: %{AppProgram} Version: %{AppVersion} Release: %{AppRelease} License: MIT Group: Applications/Development URL: ftp://invisible-island.net/%{AppProgram} Source0: %{AppProgram}-%{AppRelease}.tgz Packager: Thomas Dickey %description These are the example/test programs from the ncurses MAJOR.MINOR distribution, for patch-date YYYYMMDD. This package installs in "bin/ncurses-examples" to avoid conflict with other packages. %prep %setup -q -n %{AppProgram}-%{AppRelease} %build INSTALL_PROGRAM='${INSTALL}' \ ./configure \ --target %{_target_platform} \ --prefix=%{_prefix} \ --bindir=%{_bindir}/%{AppProgram} \ --with-screen=ncursesw6 \ --disable-rpath-hack make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT strip $RPM_BUILD_ROOT%{_bindir}/%{AppProgram}/* %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %{_bindir}/%{AppProgram}/* %changelog # each patch should add its ChangeLog entries here * Thu Mar 25 2010 Thomas Dickey - initial version ncurses-6.0-20160213/test/inch_wide.c0000644000175100001440000001633011367076552015547 0ustar tomusers/**************************************************************************** * Copyright (c) 2007,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: inch_wide.c,v 1.7 2010/05/01 19:13:46 tom Exp $ */ /* int in_wch(cchar_t *wcval); int mvin_wch(int y, int x, cchar_t *wcval); int mvwin_wch(WINDOW *win, int y, int x, cchar_t *wcval); int win_wch(WINDOW *win, cchar_t *wcval); int in_wchstr(cchar_t *wchstr); int in_wchnstr(cchar_t *wchstr, int n); int win_wchstr(WINDOW *win, cchar_t *wchstr); int win_wchnstr(WINDOW *win, cchar_t *wchstr, int n); int mvin_wchstr(int y, int x, cchar_t *wchstr); int mvin_wchnstr(int y, int x, cchar_t *wchstr, int n); int mvwin_wchstr(WINDOW *win, int y, int x, cchar_t *wchstr); int mvwin_wchnstr(WINDOW *win, int y, int x, cchar_t *wchstr, int n); */ #include #if USE_WIDEC_SUPPORT #define BASE_Y 7 #define MAX_COLS 1024 static bool Quit(int ch) { return (ch == ERR || ch == 'q' || ch == QUIT || ch == ESCAPE); } static int test_inchs(int level, char **argv, WINDOW *chrwin, WINDOW *strwin) { WINDOW *txtbox = 0; WINDOW *txtwin = 0; FILE *fp; int j; int txt_x = 0, txt_y = 0; int base_y; int limit; cchar_t ch; cchar_t text[MAX_COLS]; if (argv[level] == 0) { beep(); return FALSE; } if (level > 1) { txtbox = newwin(LINES - BASE_Y, COLS - level, BASE_Y, level); box(txtbox, 0, 0); wnoutrefresh(txtbox); txtwin = derwin(txtbox, getmaxy(txtbox) - 2, getmaxx(txtbox) - 2, 1, 1); base_y = 0; } else { txtwin = stdscr; base_y = BASE_Y; } keypad(txtwin, TRUE); /* enable keyboard mapping */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ txt_y = base_y; txt_x = 0; wmove(txtwin, txt_y, txt_x); if ((fp = fopen(argv[level], "r")) != 0) { while ((j = fgetc(fp)) != EOF) { if (waddch(txtwin, UChar(j)) != OK) { break; } } fclose(fp); } else { wprintw(txtwin, "Cannot open:\n%s", argv[1]); } while (!Quit(j = mvwgetch(txtwin, txt_y, txt_x))) { switch (j) { case KEY_DOWN: case 'j': if (txt_y < getmaxy(txtwin) - 1) txt_y++; else beep(); break; case KEY_UP: case 'k': if (txt_y > base_y) txt_y--; else beep(); break; case KEY_LEFT: case 'h': if (txt_x > 0) txt_x--; else beep(); break; case KEY_RIGHT: case 'l': if (txt_x < getmaxx(txtwin) - 1) txt_x++; else beep(); break; case 'w': test_inchs(level + 1, argv, chrwin, strwin); if (txtbox != 0) { touchwin(txtbox); wnoutrefresh(txtbox); } else { touchwin(txtwin); wnoutrefresh(txtwin); } break; default: beep(); break; } MvWPrintw(chrwin, 0, 0, "char:"); wclrtoeol(chrwin); if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); if (win_wch(txtwin, &ch) != ERR) { if (wadd_wch(chrwin, &ch) != ERR) { for (j = txt_x + 1; j < getmaxx(txtwin); ++j) { if (mvwin_wch(txtwin, txt_y, j, &ch) != ERR) { if (wadd_wch(chrwin, &ch) == ERR) { break; } } else { break; } } } } } else { move(txt_y, txt_x); if (in_wch(&ch) != ERR) { if (wadd_wch(chrwin, &ch) != ERR) { for (j = txt_x + 1; j < getmaxx(txtwin); ++j) { if (mvin_wch(txt_y, j, &ch) != ERR) { if (wadd_wch(chrwin, &ch) == ERR) { break; } } else { break; } } } } } wnoutrefresh(chrwin); MvWPrintw(strwin, 0, 0, "text:"); wclrtobot(strwin); limit = getmaxx(strwin) - 5; if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); if (win_wchstr(txtwin, text) != ERR) { (void) mvwadd_wchstr(strwin, 0, 5, text); } wmove(txtwin, txt_y, txt_x); if (win_wchnstr(txtwin, text, limit) != ERR) { (void) mvwadd_wchstr(strwin, 1, 5, text); } if (mvwin_wchstr(txtwin, txt_y, txt_x, text) != ERR) { (void) mvwadd_wchstr(strwin, 2, 5, text); } if (mvwin_wchnstr(txtwin, txt_y, txt_x, text, limit) != ERR) { (void) mvwadd_wchstr(strwin, 3, 5, text); } } else { move(txt_y, txt_x); if (in_wchstr(text) != ERR) { (void) mvwadd_wchstr(strwin, 0, 5, text); } move(txt_y, txt_x); if (in_wchnstr(text, limit) != ERR) { (void) mvwadd_wchstr(strwin, 1, 5, text); } if (mvin_wchstr(txt_y, txt_x, text) != ERR) { (void) mvwadd_wchstr(strwin, 2, 5, text); } if (mvin_wchnstr(txt_y, txt_x, text, limit) != ERR) { (void) mvwadd_wchstr(strwin, 3, 5, text); } } wnoutrefresh(strwin); } if (level > 1) { delwin(txtwin); delwin(txtbox); } return TRUE; } int main(int argc, char *argv[]) { WINDOW *chrbox; WINDOW *chrwin; WINDOW *strwin; setlocale(LC_ALL, ""); if (argc < 2) { fprintf(stderr, "usage: %s file\n", argv[0]); return EXIT_FAILURE; } initscr(); chrbox = derwin(stdscr, BASE_Y, COLS, 0, 0); box(chrbox, 0, 0); wnoutrefresh(chrbox); chrwin = derwin(chrbox, 1, COLS - 2, 1, 1); strwin = derwin(chrbox, 4, COLS - 2, 2, 1); test_inchs(1, argv, chrwin, strwin); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the wide-ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/test_addstr.c0000644000175100001440000002446512063211122016120 0ustar tomusers/**************************************************************************** * Copyright (c) 2009-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_addstr.c,v 1.10 2012/12/16 00:14:10 tom Exp $ * * Demonstrate the waddstr() and waddch functions. * Thomas Dickey - 2009/9/12 */ #include #include #define AddNStr addnstr #define AddStr addstr #define MvAddNStr (void) mvaddnstr #define MvWAddNStr (void) mvwaddnstr #define WAddNStr waddnstr #define WAddStr waddstr #define AddCh addch #define WAddCh waddch #define MY_TABSIZE 8 typedef enum { oDefault = 0, oMove = 1, oWindow = 2, oMoveWindow = 3 } Options; static bool m_opt = FALSE; static bool w_opt = FALSE; static int n_opt = -1; static void legend(WINDOW *win, int level, Options state, char *buffer, int length) { const char *showstate; switch (state) { default: case oDefault: showstate = ""; break; case oMove: showstate = " (mvXXX)"; break; case oWindow: showstate = " (winXXX)"; break; case oMoveWindow: showstate = " (mvwinXXX)"; break; } wmove(win, 0, 0); wprintw(win, "The Strings/Chars displays should match. Enter any characters, except:\n"); wprintw(win, "down-arrow or ^N to repeat on next line, ^W for inner window, ESC to exit.\n"); wclrtoeol(win); wprintw(win, "Level %d,%s added %d characters <%s>", level, showstate, length, buffer); } static int ColOf(char *buffer, int length, int margin) { int n; int result; for (n = 0, result = margin + 1; n < length; ++n) { int ch = UChar(buffer[n]); switch (ch) { case '\n': /* actually newline should clear the remainder of the line * and move to the next line - but that seems a little awkward * in this example. */ case '\r': result = 0; break; case '\b': if (result > 0) --result; break; case '\t': result += (MY_TABSIZE - (result % MY_TABSIZE)); break; case '\177': result += 2; break; default: ++result; if (ch < 32) ++result; break; } } return result; } #define LEN(n) ((length - (n) > n_opt) ? n_opt : (length - (n))) static void test_adds(int level) { static bool first = TRUE; int ch; int limit; int row = 1; int col; int row2, col2; int length; char buffer[BUFSIZ]; WINDOW *look = 0; WINDOW *work = 0; WINDOW *show = 0; int margin = (2 * MY_TABSIZE) - 1; Options option = (Options) ((unsigned) (m_opt ? oMove : oDefault) | (unsigned) ((w_opt || (level > 0)) ? oWindow : oDefault)); if (first) { static char cmd[80]; setlocale(LC_ALL, ""); putenv(strcpy(cmd, "TABSIZE=8")); initscr(); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ keypad(stdscr, TRUE); /* * Show the characters added in color, to distinguish from those that * are shifted. */ if (has_colors()) { start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); } } limit = LINES - 5; if (level > 0) { look = newwin(limit, COLS - (2 * (level - 1)), 0, level - 1); work = newwin(limit - 2, COLS - (2 * level), 1, level); show = newwin(4, COLS, limit + 1, 0); box(look, 0, 0); wnoutrefresh(look); limit -= 2; } else { work = stdscr; show = derwin(stdscr, 4, COLS, limit + 1, 0); } keypad(work, TRUE); for (col = margin + 1; col < COLS; col += MY_TABSIZE) MvWVLine(work, row, col, '.', limit - 2); MvWVLine(work, row, margin, ACS_VLINE, limit - 2); MvWVLine(work, row, margin + 1, ACS_VLINE, limit - 2); limit /= 2; MvWAddStr(work, 1, 2, "String"); MvWAddStr(work, limit + 1, 2, "Chars"); wnoutrefresh(work); buffer[length = 0] = '\0'; legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); if (has_colors()) { wbkgdset(work, (chtype) (COLOR_PAIR(1) | ' ')); } while ((ch = read_linedata(work)) != ERR && !isQUIT(ch)) { wmove(work, row, margin + 1); switch (ch) { case key_RECUR: test_adds(level + 1); if (look) touchwin(look); touchwin(work); touchwin(show); if (look) wnoutrefresh(look); wnoutrefresh(work); wnoutrefresh(show); doupdate(); break; case key_NEWLINE: if (row < limit) { ++row; /* put the whole string in, all at once */ col2 = margin + 1; switch (option) { case oDefault: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (move(row, col2) != ERR) { AddNStr(buffer + col, LEN(col)); } } } else { if (move(row, col2) != ERR) { AddStr(buffer); } } break; case oMove: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvAddNStr(row, col2, buffer + col, LEN(col)); } } else { MvAddStr(row, col2, buffer); } break; case oWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (wmove(work, row, col2) != ERR) { WAddNStr(work, buffer + col, LEN(col)); } } } else { if (wmove(work, row, col2) != ERR) { WAddStr(work, buffer); } } break; case oMoveWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvWAddNStr(work, row, col2, buffer + col, LEN(col)); } } else { MvWAddStr(work, row, col2, buffer); } break; } /* do the corresponding single-character add */ row2 = limit + row; for (col = 0; col < length; ++col) { col2 = ColOf(buffer, col, margin); switch (option) { case oDefault: if (move(row2, col2) != ERR) { AddCh(UChar(buffer[col])); } break; case oMove: MvAddCh(row2, col2, UChar(buffer[col])); break; case oWindow: if (wmove(work, row2, col2) != ERR) { WAddCh(work, UChar(buffer[col])); } break; case oMoveWindow: MvWAddCh(work, row2, col2, UChar(buffer[col])); break; } } } else { beep(); } break; default: if (ch <= 0 || ch > 255) { beep(); break; } buffer[length++] = (char) ch; buffer[length] = '\0'; /* put the string in, one character at a time */ col = ColOf(buffer, length - 1, margin); switch (option) { case oDefault: if (move(row, col) != ERR) { AddStr(buffer + length - 1); } break; case oMove: MvAddStr(row, col, buffer + length - 1); break; case oWindow: if (wmove(work, row, col) != ERR) { WAddStr(work, buffer + length - 1); } break; case oMoveWindow: MvWAddStr(work, row, col, buffer + length - 1); break; } /* do the corresponding single-character add */ switch (option) { case oDefault: if (move(limit + row, col) != ERR) { AddCh(UChar(ch)); } break; case oMove: MvAddCh(limit + row, col, UChar(ch)); break; case oWindow: if (wmove(work, limit + row, col) != ERR) { WAddCh(work, UChar(ch)); } break; case oMoveWindow: MvWAddCh(work, limit + row, col, UChar(ch)); break; } wnoutrefresh(work); legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); break; } } delwin(show); if (level > 0) { delwin(work); delwin(look); } } static void usage(void) { static const char *tbl[] = { "Usage: test_addstr [options]" ,"" ,"Options:" ," -f FILE read data from given file" ," -n NUM limit string-adds to NUM bytes on ^N replay" ," -m perform wmove/move separately from add-functions" ," -w use window-parameter even when stdscr would be implied" }; unsigned n; for (n = 0; n < SIZEOF(tbl); ++n) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int ch; setlocale(LC_ALL, ""); while ((ch = getopt(argc, argv, "f:mn:w")) != -1) { switch (ch) { case 'f': init_linedata(optarg); break; case 'm': m_opt = TRUE; break; case 'n': n_opt = atoi(optarg); if (n_opt == 0) n_opt = -1; break; case 'w': w_opt = TRUE; break; default: usage(); break; } } if (optind < argc) usage(); test_adds(0); endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/demo_panels.c0000644000175100001440000004163212367217267016110 0ustar tomusers/**************************************************************************** * Copyright (c) 2007-2010,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: demo_panels.c,v 1.38 2014/08/02 17:24:07 tom Exp $ * * Demonstrate a variety of functions from the panel library. */ #include #if USE_LIBPANEL #include #define LAST_POS '@' #define TEMP_POS '>' typedef void (*InitPanel) (void); typedef void (*FillPanel) (PANEL *); static bool use_colors = FALSE; static bool unboxed = FALSE; static FILE *log_in; static FILE *log_out; static void close_input(void) { if (log_in != 0) { fclose(log_in); log_in = 0; } } static void close_output(void) { if (log_out != 0) { fclose(log_out); log_out = 0; } } static WINDOW * statusline(void) { WINDOW *result = stdscr; wmove(result, LINES - 1, 0); wclrtoeol(result); return result; } static void pflush(void) { update_panels(); doupdate(); } static void saywhat(NCURSES_CONST char *text) { WINDOW *win = statusline(); if (text != 0 && *text != '\0') { waddstr(win, text); waddstr(win, "; "); } waddstr(win, "press any key to continue"); } static void show_position(NCURSES_CONST char *text, NCURSES_CONST char *also, int which, int ypos, int xpos) { WINDOW *win = statusline(); wprintw(win, "%s for panel %d now %d,%d%s", text, which, ypos, xpos, also); wmove(stdscr, ypos, xpos); } static int get_position(NCURSES_CONST char *text, NCURSES_CONST char *also, int which, int *xpos, int *ypos) { int result = 0; int x1, y1; char cmd; getyx(stdscr, y1, x1); (void) statusline(); show_position(text, also, which, y1, x1); if (log_in != 0) { if (fscanf(log_in, "%c%d,%d\n", &cmd, &y1, &x1) == 3) { switch (cmd) { case LAST_POS: result = 1; (void) wgetch(stdscr); break; case TEMP_POS: result = 0; wrefresh(stdscr); napms(100); break; default: result = -1; break; } } else { result = -1; } } else { switch (wgetch(stdscr)) { case QUIT: case ESCAPE: case ERR: result = -1; break; case ' ': result = 1; break; case KEY_UP: if (y1 > 0) { --y1; } else { beep(); } break; case KEY_DOWN: if (y1 < getmaxy(stdscr)) { ++y1; } else { beep(); } break; case KEY_LEFT: if (x1 > 0) { --x1; } else { beep(); } break; case KEY_RIGHT: if (x1 < getmaxx(stdscr)) { ++x1; } else { beep(); } break; } } wmove(stdscr, y1, x1); *ypos = y1; *xpos = x1; if (result >= 0) { if (log_out) fprintf(log_out, "%c%d,%d\n", ((result > 0) ? LAST_POS : TEMP_POS), y1, x1); } return result; } static PANEL * mkpanel(short color, int rows, int cols, int tly, int tlx) { WINDOW *win; PANEL *pan = 0; char *userdata = typeMalloc(char, 3); if ((win = newwin(rows, cols, tly, tlx)) != 0) { keypad(win, TRUE); if ((pan = new_panel(win)) == 0) { delwin(win); } else if (use_colors) { short fg = (short) ((color == COLOR_BLUE) ? COLOR_WHITE : COLOR_BLACK); short bg = color; init_pair(color, fg, bg); wbkgdset(win, (chtype) (COLOR_PAIR(color) | ' ')); } else if (!unboxed) { wbkgdset(win, A_BOLD | ' '); } } sprintf(userdata, "p%d", color % 8); set_panel_userptr(pan, (NCURSES_CONST void *) userdata); return pan; } static void my_remove_panel(PANEL ** pans, int which) { if (pans[which] != 0) { PANEL *pan = pans[which]; WINDOW *win = panel_window(pan); char *user = (char *) panel_userptr(pan); free(user); del_panel(pan); delwin(win); pans[which] = 0; } } #undef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define ABS(a) ((a) < 0 ? -(a) : (a)) static void my_create_panel(PANEL ** pans, int which, FillPanel myFill) { PANEL *pan = 0; int code; short pair = (short) which; short fg = (short) ((pair == COLOR_BLUE) ? COLOR_WHITE : COLOR_BLACK); short bg = pair; int x0, y0, x1, y1; init_pair(pair, fg, bg); /* remove the old panel, if any */ my_remove_panel(pans, which); /* get the position of one corner */ wmove(stdscr, getmaxy(stdscr) / 2, getmaxx(stdscr) / 2); getyx(stdscr, y0, x0); while ((code = get_position("First corner", "", which, &x0, &y0)) == 0) { ; } if (code > 0) { char also[80]; sprintf(also, " (first %d,%d)", y0, x0); /* get the position of the opposite corner */ while ((code = get_position("Opposite corner", also, which, &x1, &y1)) == 0) { ; } if (code > 0) { int tly = MIN(y0, y1); int tlx = MIN(x0, x1); pan = mkpanel(pair, ABS(y1 - y0) + 1, ABS(x1 - x0) + 1, tly, tlx); /* finish */ myFill(pan); pans[which] = pan; pflush(); wmove(stdscr, y1, x1); } } } static void my_move_panel(PANEL ** pans, int which, bool continuous) { if (pans[which] != 0) { int code; int y0, x0; int y1, x1; WINDOW *win = panel_window(pans[which]); char also[80]; getbegyx(win, y0, x0); sprintf(also, " (start %d,%d)", y0, x0); wmove(stdscr, y0, x0); while ((code = get_position("Move panel", also, which, &x1, &y1)) == 0) { if (continuous) { move_panel(pans[which], y1, x1); pflush(); } } if (code > 0) { move_panel(pans[which], y1, x1); } } } static void my_resize_panel(PANEL ** pans, int which, FillPanel myFill) { if (pans[which] != 0) { int code; int y0, x0; int y1, x1; WINDOW *win = panel_window(pans[which]); char also[80]; getbegyx(win, y0, x0); sprintf(also, " (start %d,%d)", y0, x0); wmove(stdscr, y0, x0); while ((code = get_position("Resize panel", also, which, &x1, &y1)) == 0) { ; } if (code > 0) { WINDOW *next = newwin(ABS(y1 - y0) + 1, ABS(x1 - x0) + 1, MIN(y0, y1), MIN(x0, x1)); if (next != 0) { keypad(next, TRUE); if (use_colors) { wbkgdset(next, (chtype) (COLOR_PAIR(which) | ' ')); } else if (!unboxed) { wbkgdset(next, A_BOLD | ' '); } replace_panel(pans[which], next); myFill(pans[which]); delwin(win); } } } } static void init_panel(void) { register int y, x; for (y = 0; y < LINES - 1; y++) { for (x = 0; x < COLS; x++) wprintw(stdscr, "%d", (y + x) % 10); } } static void fill_panel(PANEL * pan) { WINDOW *win = panel_window(pan); const char *userptr = (const char *) panel_userptr(pan); int num = (userptr && *userptr) ? userptr[1] : '?'; int y, x; wmove(win, 1, 1); wprintw(win, "-pan%c-", num); wclrtoeol(win); box(win, 0, 0); for (y = 2; y < getmaxy(win) - 1; y++) { for (x = 1; x < getmaxx(win) - 1; x++) { wmove(win, y, x); waddch(win, UChar(num)); } } } static void fill_unboxed(PANEL * pan) { WINDOW *win = panel_window(pan); const char *userptr = (const char *) panel_userptr(pan); int num = (userptr && *userptr) ? userptr[1] : '?'; int y, x; for (y = 0; y < getmaxy(win); y++) { for (x = 0; x < getmaxx(win); x++) { wmove(win, y, x); waddch(win, UChar(num)); } } } #if USE_WIDEC_SUPPORT static void make_fullwidth_digit(cchar_t *target, int digit) { wchar_t source[2]; source[0] = (wchar_t) (digit + 0xff10); source[1] = 0; setcchar(target, source, A_NORMAL, 0, 0); } static void init_wide_panel(void) { int digit; cchar_t temp[10]; for (digit = 0; digit < 10; ++digit) make_fullwidth_digit(&temp[digit], digit); do { int y, x; getyx(stdscr, y, x); digit = (y + x / 2) % 10; } while (add_wch(&temp[digit]) != ERR); } static void fill_wide_panel(PANEL * pan) { WINDOW *win = panel_window(pan); int num = ((const char *) panel_userptr(pan))[1]; int y, x; wmove(win, 1, 1); wprintw(win, "-pan%c-", num); wclrtoeol(win); box(win, 0, 0); for (y = 2; y < getmaxy(win) - 1; y++) { for (x = 1; x < getmaxx(win) - 1; x++) { wmove(win, y, x); waddch(win, UChar(num)); } } } #endif #define MAX_PANELS 5 static int which_panel(PANEL * px[MAX_PANELS + 1], PANEL * pan) { int result = 0; int j; for (j = 1; j <= MAX_PANELS; ++j) { if (px[j] == pan) { result = j; break; } } return result; } static void show_panels(PANEL * px[MAX_PANELS + 1]) { static const char *help[] = { "", "Commands are letter/digit pairs. Digits are the panel number.", "", " b - put the panel on the bottom of the stack", " c - create the panel", " d - delete the panel", " h - hide the panel", " m - move the panel (M for continuous move)", " r - resize the panel", " s - show the panel", " b - put the panel on the top of the stack" }; struct { bool valid; bool hidden; PANEL *above; PANEL *below; } table[MAX_PANELS + 1]; WINDOW *win; PANEL *pan; int j; memset(table, 0, sizeof(table)); for (j = 1; j <= MAX_PANELS; ++j) { table[j].valid = (px[j] != 0); if (table[j].valid) { table[j].hidden = panel_hidden(px[j]); table[j].above = panel_above(px[j]); table[j].below = panel_below(px[j]); } } if ((win = newwin(LINES - 1, COLS, 0, 0)) != 0) { keypad(win, TRUE); if ((pan = new_panel(win)) != 0) { werase(win); MvWPrintw(win, 0, 0, "Panels:\n"); for (j = 1; j <= MAX_PANELS; ++j) { if (table[j].valid) { wprintw(win, " %d:", j); if (table[j].hidden) { waddstr(win, " hidden"); } else { if (table[j].above) { wprintw(win, " above %d", which_panel(px, table[j].above)); } if (table[j].below) { wprintw(win, "%s below %d", table[j].above ? "," : "", which_panel(px, table[j].below)); } } waddch(win, '\n'); } } for (j = 0; j < (int) SIZEOF(help); ++j) { if (wprintw(win, "%s\n", help[j]) == ERR) break; } wgetch(win); del_panel(pan); pflush(); } delwin(win); } } #define wrapper(func) \ static int my_##func(PANEL *pan) \ { \ int code = ERR; \ if (pan != 0) { \ code = func(pan); \ } \ return code; \ } /* *INDENT-OFF* */ wrapper(bottom_panel) wrapper(hide_panel) wrapper(show_panel) wrapper(top_panel) /* *INDENT-ON* */ static void do_panel(PANEL * px[MAX_PANELS + 1], NCURSES_CONST char *cmd, FillPanel myFill) { int which = cmd[1] - '0'; if (which < 1 || which > MAX_PANELS) { beep(); return; } if (log_in != 0) { pflush(); } saywhat(cmd); switch (*cmd) { case 'b': my_bottom_panel(px[which]); break; case 'c': my_create_panel(px, which, myFill); break; case 'd': my_remove_panel(px, which); break; case 'h': my_hide_panel(px[which]); break; case 'm': my_move_panel(px, which, FALSE); break; case 'M': my_move_panel(px, which, TRUE); break; case 'r': my_resize_panel(px, which, myFill); break; case 's': my_show_panel(px[which]); break; case 't': my_top_panel(px[which]); break; } } static bool ok_letter(int ch) { return isalpha(UChar(ch)) && strchr("bcdhmMrst", ch) != 0; } static bool ok_digit(int ch) { return isdigit(UChar(ch)) && (ch >= '1') && (ch - '0' <= MAX_PANELS); } /* * A command consists of one or more letter/digit pairs separated by a space. * Digits are limited to 1..MAX_PANELS. * * End the command with a newline. Reject other characters. */ static bool get_command(PANEL * px[MAX_PANELS + 1], char *buffer, int limit) { int length = 0; int y0, x0; int c0, ch; WINDOW *win; getyx(stdscr, y0, x0); win = statusline(); waddstr(win, "Command:"); buffer[length = 0] = '\0'; if (log_in != 0) { if (fgets(buffer, limit - 3, log_in) != 0) { length = (int) strlen(buffer); while (length > 0 && isspace(UChar(buffer[length - 1]))) buffer[--length] = '\0'; waddstr(win, buffer); } else { close_input(); } (void) wgetch(win); } else { c0 = 0; for (;;) { ch = wgetch(win); if (ch == ERR || ch == QUIT || ch == ESCAPE) { buffer[0] = '\0'; break; } else if (ch == CTRL('L')) { wrefresh(curscr); } else if (ch == '\n' || ch == KEY_ENTER) { break; } else if (ch == '?') { show_panels(px); } else if (length + 3 < limit) { if (ch >= KEY_MIN) { beep(); } else if (ok_letter(UChar(ch))) { if (isalpha(UChar(c0))) { beep(); } else if (isdigit(UChar(c0))) { wprintw(win, " %c", ch); buffer[length++] = ' '; buffer[length++] = (char) (c0 = ch); } else { wprintw(win, "%c", ch); buffer[length++] = (char) (c0 = ch); } } else if (ok_digit(ch)) { if (isalpha(UChar(c0))) { wprintw(win, "%c", ch); buffer[length++] = (char) (c0 = ch); } else { beep(); } } else if (ch == ' ') { if (isdigit(UChar(c0))) { wprintw(win, "%c", ch); buffer[length++] = (char) (c0 = ch); } else { beep(); } } else { beep(); } } else { beep(); } } } wmove(stdscr, y0, x0); buffer[length] = '\0'; if (log_out && length) { fprintf(log_out, "%s\n", buffer); } return (length != 0); } static void demo_panels(InitPanel myInit, FillPanel myFill) { int itmp; PANEL *px[MAX_PANELS + 1]; char buffer[BUFSIZ]; scrollok(stdscr, FALSE); /* we don't want stdscr to scroll! */ refresh(); myInit(); memset(px, 0, sizeof(px)); while (get_command(px, buffer, sizeof(buffer))) { int limit = (int) strlen(buffer); for (itmp = 0; itmp < limit; itmp += 3) { do_panel(px, buffer + itmp, myFill); } pflush(); } #if NO_LEAKS for (itmp = 1; itmp <= MAX_PANELS; ++itmp) { my_remove_panel(px, itmp); } #endif } static void usage(void) { static const char *const tbl[] = { "Usage: demo_panels [options]" ,"" ,"Options:" ," -i file read commands from file" ," -o file record commands in file" ," -m do not use colors" #if USE_WIDEC_SUPPORT ," -w use wide-characters in panels and background" #endif ," -x do not enclose panels in boxes" }; size_t n; for (n = 0; n < SIZEOF(tbl); n++) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int c; bool monochrome = FALSE; InitPanel myInit = init_panel; FillPanel myFill = fill_panel; setlocale(LC_ALL, ""); while ((c = getopt(argc, argv, "i:o:mwx")) != -1) { switch (c) { case 'i': log_in = fopen(optarg, "r"); break; case 'o': log_out = fopen(optarg, "w"); break; case 'm': monochrome = TRUE; break; #if USE_WIDEC_SUPPORT case 'w': myInit = init_wide_panel; myFill = fill_wide_panel; break; #endif case 'x': unboxed = TRUE; break; default: usage(); } } if (unboxed) myFill = fill_unboxed; initscr(); cbreak(); noecho(); keypad(stdscr, TRUE); use_colors = monochrome ? FALSE : has_colors(); if (use_colors) start_color(); demo_panels(myInit, myFill); endwin(); close_input(); close_output(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the curses panel library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/test_inwstr.c0000644000175100001440000001530111367076552016200 0ustar tomusers/**************************************************************************** * Copyright (c) 2007,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_inwstr.c,v 1.4 2010/05/01 19:13:46 tom Exp $ * * Author: Thomas E Dickey * * Demonstrate the inwstr functions from the curses library. int inwstr(wchar_t *str); int innwstr(wchar_t *str, int n); int winwstr(WINDOW *win, wchar_t *str); int winnwstr(WINDOW *win, wchar_t *str, int n); int mvinwstr(int y, int x, wchar_t *str); int mvinnwstr(int y, int x, wchar_t *str, int n); int mvwinwstr(WINDOW *win, int y, int x, wchar_t *str); int mvwinnwstr(WINDOW *win, int y, int x, wchar_t *str, int n); */ #include #if USE_WIDEC_SUPPORT #define BASE_Y 6 #define MAX_COLS 1024 static bool Quit(int ch) { return (ch == ERR || ch == 'q' || ch == QUIT || ch == ESCAPE); } static void show_1st(WINDOW *win, int line, wchar_t *buffer) { (void) mvwaddwstr(win, line, 5, buffer); } static void showmore(WINDOW *win, int line, wchar_t *buffer) { wmove(win, line, 0); wclrtoeol(win); show_1st(win, line, buffer); } static int test_inchs(int level, char **argv, WINDOW *chrwin, WINDOW *strwin) { WINDOW *txtbox = 0; WINDOW *txtwin = 0; FILE *fp; int ch; int txt_x = 0, txt_y = 0; int base_y; int limit = getmaxx(strwin) - 5; wchar_t buffer[MAX_COLS]; if (argv[level] == 0) { beep(); return FALSE; } if (level > 1) { txtbox = newwin(LINES - BASE_Y, COLS - level, BASE_Y, level); box(txtbox, 0, 0); wnoutrefresh(txtbox); txtwin = derwin(txtbox, getmaxy(txtbox) - 2, getmaxx(txtbox) - 2, 1, 1); base_y = 0; } else { txtwin = stdscr; base_y = BASE_Y; } keypad(txtwin, TRUE); /* enable keyboard mapping */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ txt_y = base_y; txt_x = 0; wmove(txtwin, txt_y, txt_x); if ((fp = fopen(argv[level], "r")) != 0) { while ((ch = fgetc(fp)) != EOF) { if (waddch(txtwin, UChar(ch)) != OK) { break; } } fclose(fp); } else { wprintw(txtwin, "Cannot open:\n%s", argv[1]); } while (!Quit(ch = mvwgetch(txtwin, txt_y, txt_x))) { switch (ch) { case KEY_DOWN: case 'j': if (txt_y < getmaxy(txtwin) - 1) txt_y++; else beep(); break; case KEY_UP: case 'k': if (txt_y > base_y) txt_y--; else beep(); break; case KEY_LEFT: case 'h': if (txt_x > 0) txt_x--; else beep(); break; case KEY_RIGHT: case 'l': if (txt_x < getmaxx(txtwin) - 1) txt_x++; else beep(); break; case 'w': test_inchs(level + 1, argv, chrwin, strwin); if (txtbox != 0) { touchwin(txtbox); wnoutrefresh(txtbox); } else { touchwin(txtwin); wnoutrefresh(txtwin); } break; case '-': if (limit > 0) { --limit; } else { beep(); } break; case '+': ++limit; break; default: beep(); break; } MvWPrintw(chrwin, 0, 0, "line:"); wclrtoeol(chrwin); if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); if (winwstr(txtwin, buffer) != ERR) { show_1st(chrwin, 0, buffer); } if (mvwinwstr(txtwin, txt_y, txt_x, buffer) != ERR) { showmore(chrwin, 1, buffer); } } else { move(txt_y, txt_x); if (inwstr(buffer) != ERR) { show_1st(chrwin, 0, buffer); } if (mvinwstr(txt_y, txt_x, buffer) != ERR) { showmore(chrwin, 1, buffer); } } wnoutrefresh(chrwin); MvWPrintw(strwin, 0, 0, "%4d:", limit); wclrtobot(strwin); if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); if (winnwstr(txtwin, buffer, limit) != ERR) { show_1st(strwin, 0, buffer); } if (mvwinnwstr(txtwin, txt_y, txt_x, buffer, limit) != ERR) { showmore(strwin, 1, buffer); } } else { move(txt_y, txt_x); if (innwstr(buffer, limit) != ERR) { show_1st(strwin, 0, buffer); } if (mvinnwstr(txt_y, txt_x, buffer, limit) != ERR) { showmore(strwin, 1, buffer); } } wnoutrefresh(strwin); } if (level > 1) { delwin(txtwin); delwin(txtbox); } return TRUE; } int main(int argc, char *argv[]) { WINDOW *chrbox; WINDOW *chrwin; WINDOW *strwin; setlocale(LC_ALL, ""); if (argc < 2) { fprintf(stderr, "usage: %s file\n", argv[0]); return EXIT_FAILURE; } initscr(); chrbox = derwin(stdscr, BASE_Y, COLS, 0, 0); box(chrbox, 0, 0); wnoutrefresh(chrbox); chrwin = derwin(chrbox, 2, COLS - 2, 1, 1); strwin = derwin(chrbox, 2, COLS - 2, 3, 1); test_inchs(1, argv, chrwin, strwin); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the wide-ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/newdemo.c0000644000175100001440000001662012367270000015237 0ustar tomusers/* * newdemo.c - A demo program using PDCurses. The program illustrate * the use of colours for text output. * * $Id: newdemo.c,v 1.41 2014/08/02 23:10:56 tom Exp $ */ #include #include /* * The Australian map */ static CONST_MENUS char *AusMap[16] = { " A A ", " N.T. AAAAA AAAA ", " AAAAAAAAAAA AAAAAAAA ", " AAAAAAAAAAAAAAAAAAAAAAAAA Qld.", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ", " AAAAAAAAAAAAAAAAAAAAAAAAAAAA ", " AAAAAAAAAAAAAAAAAAAAAAAAA N.S.W.", "W.A. AAAAAAAAA AAAAAA Vic.", " AAA S.A. AA", " A Tas.", "" }; /* * Funny messages */ #define NMESSAGES 6 static const char *messages[] = { "Hello from the Land Down Under", "The Land of crocs. and a big Red Rock", "Where the sunflower runs along the highways", "the dusty red roads lead one to loneliness", "Blue sky in the morning and", "freezing nights and twinkling stars", "" }; /* * Trap interrupt */ static void trap(int sig GCC_UNUSED) { endwin(); ExitProgram(EXIT_FAILURE); } /* * Wait for user */ static int WaitForUser(WINDOW *win) { time_t t; chtype key; nodelay(win, TRUE); t = time((time_t *) 0); while (1) { if ((int) (key = (chtype) wgetch(win)) != ERR) { if (key == 'q' || key == 'Q') return 1; else return 0; } if (time((time_t *) 0) - t > 5) return 0; } } static void set_colors(WINDOW *win, int pair, int foreground, int background) { if (has_colors()) { if (pair > COLOR_PAIRS) pair = COLOR_PAIRS; init_pair((short) pair, (short) foreground, (short) background); (void) wattrset(win, AttrArg(COLOR_PAIR(pair), 0)); } } static chtype use_colors(WINDOW *win, int pair, chtype attrs) { if (has_colors()) { if (pair > COLOR_PAIRS) pair = COLOR_PAIRS; attrs |= (chtype) COLOR_PAIR(pair); } (void) wattrset(win, AttrArg(attrs, 0)); return attrs; } /* * Test sub windows */ static int SubWinTest(WINDOW *win) { int w, h, sw, sh, bx, by; WINDOW *swin1, *swin2, *swin3; getmaxyx(win, h, w); getbegyx(win, by, bx); sw = w / 3; sh = h / 3; if ((swin1 = subwin(win, sh, sw, by + 3, bx + 5)) == NULL) { return 1; } if ((swin2 = subwin(win, sh, sw, by + 4, bx + 8)) == NULL) { delwin(swin1); return 1; } if ((swin3 = subwin(win, sh, sw, by + 5, bx + 11)) == NULL) { delwin(swin1); delwin(swin2); return 1; } set_colors(swin1, 8, COLOR_RED, COLOR_BLUE); werase(swin1); MvWAddStr(swin1, 0, 3, "Sub-window 1"); wrefresh(swin1); set_colors(swin2, 9, COLOR_CYAN, COLOR_MAGENTA); werase(swin2); MvWAddStr(swin2, 0, 3, "Sub-window 2"); wrefresh(swin2); set_colors(swin3, 10, COLOR_YELLOW, COLOR_GREEN); werase(swin3); MvWAddStr(swin3, 0, 3, "Sub-window 3"); wrefresh(swin3); delwin(swin1); delwin(swin2); delwin(swin3); WaitForUser(win); return 0; } static int bounce(int n, int *dir, int len) { if (*dir > 0) ++n; else --n; if (n <= 1 || n >= len - 2) *dir = *dir ? 0 : 1; return n; } /* * Bouncing balls */ static int BouncingBalls(WINDOW *win) { int w, h; int x1, y1, xd1, yd1; int x2, y2, xd2, yd2; int x3, y3, xd3, yd3; getmaxyx(win, h, w); x1 = 2 + rand() % (w - 4); y1 = 2 + rand() % (h - 4); x2 = 2 + rand() % (w - 4); y2 = 2 + rand() % (h - 4); x3 = 2 + rand() % (w - 4); y3 = 2 + rand() % (h - 4); xd1 = 1; yd1 = 1; xd2 = 1; yd2 = 0; xd3 = 0; yd3 = 1; nodelay(win, TRUE); while (wgetch(win) == ERR) { x1 = bounce(x1, &xd1, w); y1 = bounce(y1, &yd1, h); x2 = bounce(x2, &xd2, w); y2 = bounce(y2, &yd2, h); x3 = bounce(x3, &xd3, w); y3 = bounce(y3, &yd3, h); set_colors(win, 11, COLOR_RED, COLOR_BLUE); MvWAddCh(win, y1, x1, 'O'); set_colors(win, 12, COLOR_BLUE, COLOR_RED); MvWAddCh(win, y2, x2, '*'); set_colors(win, 13, COLOR_YELLOW, COLOR_WHITE); MvWAddCh(win, y3, x3, '@'); wmove(win, 0, 0); wrefresh(win); delay_output(100); } return 0; } /* * Main driver */ int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { WINDOW *win; int w, x, y, i, j, k; char buffer[SIZEOF(messages) * 80]; const char *message; int width, height; chtype save[80]; chtype c; setlocale(LC_ALL, ""); CATCHALL(trap); initscr(); if (has_colors()) start_color(); cbreak(); curs_set(0); width = 48; height = 14; /* Create a drawing window */ win = newwin(height, width, (LINES - height) / 2, (COLS - width) / 2); if (win == NULL) { endwin(); ExitProgram(EXIT_FAILURE); } while (1) { set_colors(win, 1, COLOR_WHITE, COLOR_BLUE); werase(win); set_colors(win, 2, COLOR_RED, COLOR_RED); box(win, ACS_VLINE, ACS_HLINE); wrefresh(win); /* Do ramdom output of a character */ use_colors(win, 1, A_NORMAL); c = 'a'; for (i = 0; i < 5000; ++i) { x = rand() % (width - 2) + 1; y = rand() % (height - 2) + 1; MvWAddCh(win, y, x, c); wrefresh(win); nodelay(win, TRUE); if (wgetch(win) != ERR) break; if (i == 2000) { c = 'b'; set_colors(win, 3, COLOR_CYAN, COLOR_YELLOW); } } SubWinTest(win); /* Erase and draw green window */ set_colors(win, 4, COLOR_YELLOW, COLOR_GREEN); wbkgd(win, use_colors(win, 4, A_BOLD)); werase(win); wrefresh(win); /* Draw RED bounding box */ use_colors(win, 2, A_NORMAL); box(win, ' ', ' '); wrefresh(win); /* Display Australia map */ use_colors(win, 4, A_BOLD); i = 0; while (*AusMap[i]) { MvWAddStr(win, i + 1, 8, AusMap[i]); wrefresh(win); delay_output(50); ++i; } set_colors(win, 5, COLOR_BLUE, COLOR_WHITE); use_colors(win, 5, A_BLINK); MvWAddStr(win, height - 2, 6, " PDCurses 2.1 for DOS, OS/2 and Unix"); wrefresh(win); /* Draw running messages */ set_colors(win, 6, COLOR_YELLOW, COLOR_WHITE); message = messages[j = 0]; i = 1; w = width - 2; strcpy(buffer, message); while (j < NMESSAGES) { while ((int) strlen(buffer) < w) { strcat(buffer, " ... "); strcat(buffer, messages[++j % NMESSAGES]); } if (i < w) (void) mvwaddnstr(win, height / 2, w - i, buffer, i); else (void) mvwaddnstr(win, height / 2, 1, buffer, w); wrefresh(win); nodelay(win, TRUE); if (wgetch(win) != ERR) { flushinp(); break; } if (i++ >= w) { for (k = 0; (buffer[k] = buffer[k + 1]) != '\0'; k++) ; } delay_output(100); } j = 0; /* Draw running As across in RED */ set_colors(win, 7, COLOR_RED, COLOR_GREEN); memset(save, ' ', sizeof(save)); for (i = 2; i < width - 4; ++i) { k = (int) mvwinch(win, 4, i); if (k == ERR) break; save[j++] = c = (chtype) k; c &= A_CHARTEXT; MvWAddCh(win, 4, i, c); } wrefresh(win); /* Put a message up wait for a key */ i = height - 2; use_colors(win, 5, A_NORMAL); MvWAddStr(win, i, 5, " Type a key to continue or 'Q' to quit "); wrefresh(win); if (WaitForUser(win) == 1) break; j = 0; /* Restore the old line */ for (i = 2; i < width - 4; ++i) MvWAddCh(win, 4, i, save[j++]); wrefresh(win); BouncingBalls(win); /* Put a message up wait for a key */ i = height - 2; use_colors(win, 5, A_NORMAL); MvWAddStr(win, i, 5, " Type a key to continue or 'Q' to quit "); wrefresh(win); if (WaitForUser(win) == 1) break; } endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/ins_wide.c0000644000175100001440000003042212367217347015415 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: ins_wide.c,v 1.21 2014/08/02 17:24:55 tom Exp $ * * Demonstrate the wins_wstr() and wins_wch functions. * Thomas Dickey - 2002/11/23 * * Note: to provide inputs for *ins_wch(), we use setcchar(). A quirk of the * X/Open definition for that function is that the string contains no * characters with negative width. Any control character (such as tab) falls * into that category. So it follows that *ins_wch() cannot render a tab * character because there is no legal way to construct a cchar_t containing * one. X/Open does not document this, and it would be logical to assume that * *ins_wstr() has the same limitation, but it uses a wchar_t string directly, * and does not document how tabs are handled. */ #include #if USE_WIDEC_SUPPORT #define WIDE_LINEDATA #include /* definitions to make it simpler to compare with inserts.c */ #define InsNStr ins_nwstr #define InsStr ins_wstr #define MvInsNStr (void) mvins_nwstr #define MvInsStr (void) mvins_wstr #define MvWInsNStr (void) mvwins_nwstr #define MvWInsStr (void) mvwins_wstr #define WInsNStr wins_nwstr #define WInsStr wins_wstr #define MY_TABSIZE 8 typedef enum { oDefault = 0, oMove = 1, oWindow = 2, oMoveWindow = 3 } Options; static bool m_opt = FALSE; static bool w_opt = FALSE; static int n_opt = -1; static void legend(WINDOW *win, int level, Options state, wchar_t *buffer, int length) { const char *showstate; switch (state) { default: case oDefault: showstate = ""; break; case oMove: showstate = " (mvXXX)"; break; case oWindow: showstate = " (winXXX)"; break; case oMoveWindow: showstate = " (mvwinXXX)"; break; } wmove(win, 0, 0); wprintw(win, "The Strings/Chars displays should match. Enter any characters, except:\n"); wprintw(win, "down-arrow or ^N to repeat on next line, ^W for inner window, ESC to exit.\n"); wclrtoeol(win); wprintw(win, "Level %d,%s inserted %d characters <", level, showstate, length); waddwstr(win, buffer); waddstr(win, ">"); } static int ColOf(wchar_t *buffer, int length, int margin) { int n; int result; for (n = 0, result = margin + 1; n < length; ++n) { int ch = buffer[n]; switch (ch) { case '\n': /* actually newline should clear the remainder of the line * and move to the next line - but that seems a little awkward * in this example. */ case '\r': result = 0; break; case '\b': if (result > 0) --result; break; case '\t': result += (MY_TABSIZE - (result % MY_TABSIZE)); break; case '\177': result += 2; break; default: result += wcwidth((wchar_t) ch); if (ch < 32) ++result; break; } } return result; } static int ConvertCh(chtype source, cchar_t *target) { wchar_t tmp_wchar[2]; tmp_wchar[0] = (wchar_t) source; tmp_wchar[1] = 0; if (setcchar(target, tmp_wchar, A_NORMAL, 0, (void *) 0) == ERR) { beep(); return FALSE; } return TRUE; } static int MvWInsCh(WINDOW *win, int y, int x, chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = mvwins_wch(win, y, x, &tmp_cchar); } else { code = mvwinsch(win, y, x, ch); } return code; } static int MvInsCh(int y, int x, chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = mvins_wch(y, x, &tmp_cchar); } else { code = mvinsch(y, x, ch); } return code; } static int WInsCh(WINDOW *win, chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = wins_wch(win, &tmp_cchar); } else { code = winsch(win, ch); } return code; } static int InsCh(chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = ins_wch(&tmp_cchar); } else { code = insch(ch); } return code; } #define LEN(n) ((length - (n) > n_opt) ? n_opt : (length - (n))) static void test_inserts(int level) { static bool first = TRUE; int ch; int limit; int row = 1; int col; int row2, col2; int length; wchar_t buffer[BUFSIZ]; WINDOW *look = 0; WINDOW *work = 0; WINDOW *show = 0; int margin = (2 * MY_TABSIZE) - 1; Options option = (Options) ((int) (m_opt ? oMove : oDefault) | (int) ((w_opt || (level > 0)) ? oWindow : oDefault)); if (first) { static char cmd[80]; setlocale(LC_ALL, ""); putenv(strcpy(cmd, "TABSIZE=8")); initscr(); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ keypad(stdscr, TRUE); /* * Show the characters inserted in color, to distinguish from those * that are shifted. */ if (has_colors()) { start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); } } limit = LINES - 5; if (level > 0) { look = newwin(limit, COLS - (2 * (level - 1)), 0, level - 1); work = newwin(limit - 2, COLS - (2 * level), 1, level); show = newwin(4, COLS, limit + 1, 0); box(look, 0, 0); wnoutrefresh(look); limit -= 2; } else { work = stdscr; show = derwin(stdscr, 4, COLS, limit + 1, 0); } keypad(work, TRUE); for (col = margin + 1; col < COLS; col += MY_TABSIZE) MvWVLine(work, row, col, '.', limit - 2); MvWVLine(work, row, margin, ACS_VLINE, limit - 2); MvWVLine(work, row, margin + 1, ACS_VLINE, limit - 2); limit /= 2; MvWAddStr(work, 1, 2, "String"); MvWAddStr(work, limit + 1, 2, "Chars"); wnoutrefresh(work); buffer[length = 0] = '\0'; legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); if (has_colors()) { wbkgdset(work, (chtype) (COLOR_PAIR(1) | ' ')); } while ((ch = read_linedata(work)) != ERR && !isQUIT(ch)) { wmove(work, row, margin + 1); switch (ch) { case key_RECUR: test_inserts(level + 1); if (look) touchwin(look); touchwin(work); touchwin(show); if (look) wnoutrefresh(look); wnoutrefresh(work); wnoutrefresh(show); doupdate(); break; case key_NEWLINE: if (row < limit) { ++row; /* put the whole string in, all at once */ col2 = margin + 1; switch (option) { case oDefault: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (move(row, col2) != ERR) { InsNStr(buffer + col, LEN(col)); } } } else { if (move(row, col2) != ERR) { InsStr(buffer); } } break; case oMove: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvInsNStr(row, col2, buffer + col, LEN(col)); } } else { MvInsStr(row, col2, buffer); } break; case oWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (wmove(work, row, col2) != ERR) { WInsNStr(work, buffer + col, LEN(col)); } } } else { if (wmove(work, row, col2) != ERR) { WInsStr(work, buffer); } } break; case oMoveWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvWInsNStr(work, row, col2, buffer + col, LEN(col)); } } else { MvWInsStr(work, row, col2, buffer); } break; } /* do the corresponding single-character insertion */ row2 = limit + row; for (col = 0; col < length; ++col) { col2 = ColOf(buffer, col, margin); switch (option) { case oDefault: if (move(row2, col2) != ERR) { InsCh((chtype) buffer[col]); } break; case oMove: MvInsCh(row2, col2, (chtype) buffer[col]); break; case oWindow: if (wmove(work, row2, col2) != ERR) { WInsCh(work, (chtype) buffer[col]); } break; case oMoveWindow: MvWInsCh(work, row2, col2, (chtype) buffer[col]); break; } } } else { beep(); } break; default: buffer[length++] = (wchar_t) ch; buffer[length] = '\0'; /* put the string in, one character at a time */ col = ColOf(buffer, length - 1, margin); switch (option) { case oDefault: if (move(row, col) != ERR) { InsStr(buffer + length - 1); } break; case oMove: MvInsStr(row, col, buffer + length - 1); break; case oWindow: if (wmove(work, row, col) != ERR) { WInsStr(work, buffer + length - 1); } break; case oMoveWindow: MvWInsStr(work, row, col, buffer + length - 1); break; } /* do the corresponding single-character insertion */ switch (option) { case oDefault: if (move(limit + row, col) != ERR) { InsCh((chtype) ch); } break; case oMove: MvInsCh(limit + row, col, (chtype) ch); break; case oWindow: if (wmove(work, limit + row, col) != ERR) { WInsCh(work, (chtype) ch); } break; case oMoveWindow: MvWInsCh(work, limit + row, col, (chtype) ch); break; } wnoutrefresh(work); legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); break; } } if (level > 0) { delwin(work); delwin(look); } delwin(show); } static void usage(void) { static const char *tbl[] = { "Usage: inserts [options]" ,"" ,"Options:" ," -f FILE read data from given file" ," -n NUM limit string-inserts to NUM bytes on ^N replay" ," -m perform wmove/move separately from insert-functions" ," -w use window-parameter even when stdscr would be implied" }; unsigned n; for (n = 0; n < SIZEOF(tbl); ++n) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int ch; setlocale(LC_ALL, ""); while ((ch = getopt(argc, argv, "f:mn:w")) != -1) { switch (ch) { case 'f': init_linedata(optarg); break; case 'm': m_opt = TRUE; break; case 'n': n_opt = atoi(optarg); if (n_opt == 0) n_opt = -1; break; case 'w': w_opt = TRUE; break; default: usage(); break; } } if (optind < argc) usage(); test_inserts(0); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the wide-ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/chgat.c0000644000175100001440000002203512052040027014657 0ustar tomusers/**************************************************************************** * Copyright (c) 2006-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: chgat.c,v 1.12 2012/11/18 01:55:35 tom Exp $ * * test-driver for chgat/wchgat/mvchgat/mvwchgat */ #include #if HAVE_CHGAT #define SHOW(n) ((n) == ERR ? "ERR" : "OK") #define COLOR_DEFAULT (-1) #if defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH < 20060715 #define touch_if_needed(win, row) touchline(win, row, 1) #else #define touch_if_needed(win, row) /* nothing */ #endif typedef struct { unsigned c; unsigned v; short pair; unsigned attr; int count; int ch; const char *c_msg; const char *v_msg; int y_val; int x_val; int y_beg, x_beg; int y_max, x_max; } STATUS; static const char * color_params(unsigned state, short *pair) { /* *INDENT-OFF* */ static struct { short pair; short fg, bg; const char *msg; } table[] = { { 0, COLOR_DEFAULT, COLOR_DEFAULT, "default" }, { 1, COLOR_RED, COLOR_BLACK, "red/black" }, { 2, COLOR_WHITE, COLOR_BLUE, "white/blue" }, }; /* *INDENT-ON* */ static bool first = TRUE; const char *result = 0; if (has_colors()) { if (first) { unsigned n; start_color(); for (n = 0; n < SIZEOF(table); ++n) { init_pair(table[n].pair, table[n].fg, table[n].bg); } } if (state < SIZEOF(table)) { *pair = table[state].pair; result = table[state].msg; } } return result; } static const char * video_params(unsigned state, unsigned *attr) { /* *INDENT-OFF* */ static struct { unsigned attr; const char *msg; } table[] = { { A_NORMAL, "normal" }, { A_BOLD, "bold" }, { A_REVERSE, "reverse" }, { A_UNDERLINE, "underline" }, { A_BLINK, "blink" }, }; /* *INDENT-ON* */ const char *result = 0; if (state < SIZEOF(table)) { *attr = table[state].attr; result = table[state].msg; } return result; } /* fill the window with a test-pattern */ static void fill_window(WINDOW *win) { int y, x; int y0 = -1, x0 = -1; getyx(win, y, x); wmove(win, 0, 0); while (waddstr(win, "0123456789 abcdefghijklmnopqrstuvwxyz ") != ERR) { int y1, x1; getyx(win, y1, x1); if (y1 == y0 && x1 == x0) break; x0 = x1; y0 = y1; } wmove(win, y, x); } static void show_status(WINDOW *win, STATUS * sp) { int y, x; getyx(win, y, x); wmove(win, 0, 0); wprintw(win, "Count %d", sp->count); if (sp->v_msg != 0) wprintw(win, " Video %s", sp->v_msg); if (sp->c_msg != 0) wprintw(win, " Color %s", sp->c_msg); wclrtoeol(win); wmove(win, y, x); } static void do_subwindow(WINDOW *win, STATUS * sp, void func(WINDOW *)) { WINDOW *win1 = newwin(sp->y_max - 2, sp->x_max - 2, sp->y_beg + 1, sp->x_beg + 1); if (win1 != 0 && sp->y_max > 4 && sp->x_max > 4) { WINDOW *win2 = derwin(win1, sp->y_max - 4, sp->x_max - 4, 1, 1); if (win2 != 0) { box(win1, 0, 0); wrefresh(win1); func(win2); delwin(win2); } else { beep(); } delwin(win1); touchwin(win); } else { if (win1 != 0) delwin(win1); beep(); } } static void init_status(WINDOW *win, STATUS * sp) { memset(sp, 0, sizeof(*sp)); sp->c = 99; sp->v = 99; sp->ch = ' '; keypad(win, TRUE); fill_window(win); getbegyx(win, sp->y_beg, sp->x_beg); getmaxyx(win, sp->y_max, sp->x_max); } static void show_help(WINDOW *win) { static const char *table[] = { "Basic commands:" ,"Use h/j/k/l or arrow keys to move the cursor." ,"Set the count parameter for chgat by entering digits 0-9." ,"" ,"Other commands:" ,"space toggles through the set of video attributes and colors." ,"t touches (forces repaint) of the current line." ,". calls *chgat at the current position with the given count." ,", calls *chgat at the window beginning with the given count." ,"= resets count to zero." ,"- negates count." ,"? shows this help-window" ,"" ,"" }; int y_max, x_max; int row; getmaxyx(win, y_max, x_max); for (row = 0; row < (int) SIZEOF(table) && row < y_max; ++row) { MvWPrintw(win, row, 0, "%.*s", x_max, table[row]); } while (wgetch(win) != 'q') beep(); } static void update_status(WINDOW *win, STATUS * sp) { switch (sp->ch) { case ' ': /* next test-iteration */ if (has_colors()) { if ((sp->c_msg = color_params(++(sp->c), &(sp->pair))) == 0) { sp->c_msg = color_params(sp->c = 0, &(sp->pair)); if ((sp->v_msg = video_params(++(sp->v), &(sp->attr))) == 0) { sp->v_msg = video_params(sp->v = 0, &(sp->attr)); } } } else { if ((sp->v_msg = video_params(++(sp->v), &(sp->attr))) == 0) { sp->v_msg = video_params(sp->v = 0, &(sp->attr)); } } sp->count = 0; show_status(win, sp); break; case KEY_LEFT: case 'h': if (sp->x_val > 0) wmove(win, sp->y_val, --(sp->x_val)); break; case KEY_DOWN: case 'j': if (sp->y_val < sp->y_max) wmove(win, ++(sp->y_val), sp->x_val); break; case KEY_UP: case 'k': if (sp->y_val > 0) wmove(win, --(sp->y_val), sp->x_val); break; case KEY_RIGHT: case 'l': if (sp->x_val < sp->x_max) wmove(win, sp->y_val, ++(sp->x_val)); break; case 't': touchline(win, sp->y_val, 1); break; case '=': sp->count = 0; show_status(win, sp); break; case '-': sp->count = -(sp->count); show_status(win, sp); break; case '?': do_subwindow(win, sp, show_help); break; default: if (isdigit(sp->ch)) { sp->count = (sp->count * 10) + (sp->ch - '0'); show_status(win, sp); } else { beep(); } break; } } static void test_wchgat(WINDOW *win) { STATUS st; init_status(win, &st); do { switch (st.ch) { case '.': /* change from current position */ wchgat(win, st.count, st.attr, st.pair, (void *) 0); touch_if_needed(win, st.y_val); break; case ',': /* change from beginning of window */ mvwchgat(win, 0, 0, st.count, st.attr, st.pair, (void *) 0); touch_if_needed(win, 0); wmove(win, st.y_val, st.x_val); break; case 'w': do_subwindow(win, &st, test_wchgat); break; case 'q': return; default: update_status(win, &st); break; } } while ((st.ch = wgetch(win)) != ERR); } static void test_chgat(void) { STATUS st; init_status(stdscr, &st); do { switch (st.ch) { case '.': /* change from current position */ chgat(st.count, st.attr, st.pair, (void *) 0); touch_if_needed(stdscr, st.y_val); break; case ',': /* change from beginning of window */ mvchgat(0, 0, st.count, st.attr, st.pair, (void *) 0); touch_if_needed(stdscr, 0); move(st.y_val, st.x_val); break; case 'w': do_subwindow(stdscr, &st, test_wchgat); break; case 'q': return; default: update_status(stdscr, &st); break; } } while ((st.ch = getch()) != ERR); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { initscr(); cbreak(); noecho(); test_chgat(); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the curses chgat function\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/xterm-88color.dat0000644000175100001440000001016011272664724016571 0ustar tomusers############################################################################## # Copyright (c) 2005-2006,2009 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: xterm-88color.dat,v 1.3 2009/10/30 22:33:56 tom Exp $ # This illustrates the predefined colors for xterm's "xterm-88color" feature. # If you set $TERM to "xterm-88color" (and have xterm compiled to support the # 88-color or 256-color feature), you can use the ncurses 'd' screen to # manipulate the colors shown in the screen. The 'd' screen is limited to # the first 16 colors, and xterm happens to use the same first 16 colors in # the extended color models that support initc. # # The colors shown are for xterm patch #189. scale:255 0: 0 0 0 black 1: 205 0 0 red3 2: 0 205 0 green3 3: 205 205 0 yellow3 4: 30 144 255 DodgerBlue1 5: 205 0 205 magenta3 6: 0 205 205 cyan3 7: 229 229 229 gray90 8: 127 127 127 gray50 9: 255 0 0 red 10: 0 255 0 green 11: 255 255 0 yellow 12: 99 184 255 SteelBlue1 13: 255 0 255 magenta 14: 0 255 255 cyan 15: 255 255 255 white 16: 0 0 0 17: 0 0 139 18: 0 0 205 19: 0 0 255 20: 0 139 0 21: 0 139 139 22: 0 139 205 23: 0 139 255 24: 0 205 0 25: 0 205 139 26: 0 205 205 27: 0 205 255 28: 0 255 0 29: 0 255 139 30: 0 255 205 31: 0 255 255 32: 139 0 0 33: 139 0 139 34: 139 0 205 35: 139 0 255 36: 139 139 0 37: 139 139 139 38: 139 139 205 39: 139 139 255 40: 139 205 0 41: 139 205 139 42: 139 205 205 43: 139 205 255 44: 139 255 0 45: 139 255 139 46: 139 255 205 47: 139 255 255 48: 205 0 0 49: 205 0 139 50: 205 0 205 51: 205 0 255 52: 205 139 0 53: 205 139 139 54: 205 139 205 55: 205 139 255 56: 205 205 0 57: 205 205 139 58: 205 205 205 59: 205 205 255 60: 205 255 0 61: 205 255 139 62: 205 255 205 63: 205 255 255 64: 255 0 0 65: 255 0 139 66: 255 0 205 67: 255 0 255 68: 255 139 0 69: 255 139 139 70: 255 139 205 71: 255 139 255 72: 255 205 0 73: 255 205 139 74: 255 205 205 75: 255 205 255 76: 255 255 0 77: 255 255 139 78: 255 255 205 79: 255 255 255 80: 46 46 46 81: 92 92 92 82: 113 113 113 83: 139 139 139 84: 162 162 162 85: 185 185 185 86: 208 208 208 87: 231 231 231 ncurses-6.0-20160213/test/demo_terminfo.c0000644000175100001440000004711412606275231016441 0ustar tomusers/**************************************************************************** * Copyright (c) 2009-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey * * $Id: demo_terminfo.c,v 1.40 2015/10/10 20:52:41 tom Exp $ * * A simple demo of the terminfo interface. */ #define USE_TINFO #include #include #if NCURSES_XNAMES #if HAVE_TERM_ENTRY_H #include #else #undef NCURSES_XNAMES #define NCURSES_XNAMES 0 #endif #endif static void failed(const char *) GCC_NORETURN; static void failed(const char *msg) { fprintf(stderr, "%s\n", msg); ExitProgram(EXIT_FAILURE); } #if HAVE_TIGETSTR #if defined(HAVE_CURSES_DATA_BOOLNAMES) || defined(DECL_CURSES_DATA_BOOLNAMES) #define USE_CODE_LISTS 1 #else #define USE_CODE_LISTS 0 #endif static bool a_opt = FALSE; static bool b_opt = FALSE; static bool f_opt = FALSE; static bool n_opt = FALSE; static bool q_opt = FALSE; static bool s_opt = FALSE; static bool x_opt = FALSE; static bool y_opt = FALSE; static char *d_opt; static char *e_opt; static char **db_list; static int db_item; static char *my_blob; static char **my_boolcodes; static char **my_numcodes; static char **my_numvalues; static char **my_strcodes; static char **my_strvalues; static long total_values; static long total_b_values; static long total_n_values; static long total_s_values; #define FCOLS 8 #define FNAME(type) "%s %-*s = ", #type, FCOLS static char * make_dbitem(char *p, char *q) { char *result = malloc(strlen(e_opt) + 2 + (size_t) (p - q)); sprintf(result, "%s=%.*s", e_opt, (int) (p - q), q); return result; } static void make_dblist(void) { if (d_opt && e_opt) { int pass; for (pass = 0; pass < 2; ++pass) { char *p, *q; size_t count = 0; for (p = q = d_opt; *p != '\0'; ++p) { if (*p == ':') { if (p != q + 1) { if (pass) { db_list[count] = make_dbitem(p, q); } count++; } q = p + 1; } } if (p != q + 1) { if (pass) { db_list[count] = make_dbitem(p, q); } count++; } if (!pass) { db_list = typeCalloc(char *, count + 1); } } } } static char * next_dbitem(void) { char *result = 0; if (db_list) { if ((result = db_list[db_item]) == 0) { db_item = 0; result = db_list[0]; } else { db_item++; } } printf("** %s\n", result); return result; } #ifdef NO_LEAKS static void free_dblist(void) { if (db_list) { int n; for (n = 0; db_list[n]; ++n) free(db_list[n]); free(db_list); db_list = 0; } } #endif static void dumpit(NCURSES_CONST char *cap) { const char *str; int num; if ((str = tigetstr(cap)) != 0 && (str != (char *) -1)) { total_values++; total_s_values++; if (!q_opt) { printf(FNAME(str), cap); while (*str != 0) { int ch = UChar(*str++); switch (ch) { case '\177': fputs("^?", stdout); break; case '\033': fputs("\\E", stdout); break; case '\b': fputs("\\b", stdout); break; case '\f': fputs("\\f", stdout); break; case '\n': fputs("\\n", stdout); break; case '\r': fputs("\\r", stdout); break; case ' ': fputs("\\s", stdout); break; case '\t': fputs("\\t", stdout); break; case '^': fputs("\\^", stdout); break; case ':': fputs("\\072", stdout); break; case '\\': fputs("\\\\", stdout); break; default: if (isgraph(ch)) fputc(ch, stdout); else if (ch < 32) printf("^%c", ch + '@'); else printf("\\%03o", ch); break; } } printf("\n"); } } else if ((num = tigetnum(cap)) >= 0) { total_values++; total_n_values++; if (!q_opt) { printf(FNAME(num), cap); printf(" %d\n", num); } } else if ((num = tigetflag(cap)) >= 0) { total_values++; total_b_values++; if (!q_opt) { printf(FNAME(flg), cap); printf("%s\n", num ? "true" : "false"); } } if (!q_opt) fflush(stdout); } #define isCapName(c) (isalnum(UChar(c)) || ((c) == '_')) #define LegalItem(c,n) (n) static void brute_force(const char *name) { #define MAX_FORCE 5 /* omit "colors", since CPU-time is a problem */ static const char legal[] = "\ 0123456789\ ABCDEFGHIJKLMNOPQRSTUVWXYZ\ abcdefghijklmnopqrstuvwxyz_"; int length; int j, k; bool carry; bool changed; char cap[MAX_FORCE + 1]; int item[MAX_FORCE + 1]; if (db_list) { putenv(next_dbitem()); } if (!q_opt) printf("Terminal type \"%s\"\n", name); setupterm((NCURSES_CONST char *) name, 1, (int *) 0); if (!q_opt) { if (strcmp(name, ttytype)) printf("... actual \"%s\"\n", ttytype); } for (length = 1; length <= MAX_FORCE; ++length) { /* set all digits to zeros */ for (j = 0; j < length; ++j) { item[j] = LegalItem(j, 0); } do { changed = FALSE; /* copy digits to cap-name */ for (j = 0; j < length; ++j) { cap[j] = legal[item[j]]; } cap[length] = '\0'; dumpit(cap); k = length - 1; do { carry = FALSE; for (; k >= 0; --k) { item[k] += 1; if (legal[item[k]]) { changed = TRUE; break; } if (k > 0 && legal[item[k - 1] + 1]) { for (j = k; j < length; ++j) { item[j] = LegalItem(j, 0); } carry = TRUE; changed = TRUE; } } } while (carry); } while (changed); } del_curterm(cur_term); } #if USE_CODE_LISTS #define fullname(type,n) f_opt ? type##fnames[n] : my_##type##codes[n] #else #define fullname(type,n) my_##type##codes[n] #endif static void demo_terminfo(char *name) { unsigned n; NCURSES_CONST char *cap; if (db_list) { putenv(next_dbitem()); } if (!q_opt) printf("Terminal type \"%s\"\n", name); setupterm(name, 1, (int *) 0); if (b_opt) { for (n = 0;; ++n) { cap = fullname(bool, n); if (cap == 0) break; dumpit(cap); } } if (n_opt) { for (n = 0;; ++n) { cap = fullname(num, n); if (cap == 0) break; dumpit(cap); } } if (s_opt) { for (n = 0;; ++n) { cap = fullname(str, n); if (cap == 0) break; dumpit(cap); } } #ifdef NCURSES_VERSION if (x_opt && (my_blob == 0)) { int mod; if (y_opt) { #if NCURSES_XNAMES TERMTYPE *term = &(cur_term->type); if (term != 0 && ((NUM_BOOLEANS(term) != BOOLCOUNT) || (NUM_NUMBERS(term) != NUMCOUNT) || (NUM_STRINGS(term) != STRCOUNT))) { for (n = BOOLCOUNT; n < NUM_BOOLEANS(term); ++n) { dumpit(ExtBoolname(term, (int) n, boolnames)); } for (n = NUMCOUNT; n < NUM_NUMBERS(term); ++n) { dumpit(ExtNumname(term, (int) n, numnames)); } for (n = STRCOUNT; n < NUM_STRINGS(term); ++n) { dumpit(ExtStrname(term, (int) n, strnames)); } } #endif } else { char temp[80]; static const char *xterm_keys[] = { "kDC", "kDN", "kEND", "kHOM", "kIC", "kLFT", "kNXT", "kPRV", "kRIT", "kUP", }; for (n = 0; n < SIZEOF(xterm_keys); ++n) { for (mod = 0; mod < 8; ++mod) { if (mod == 0) { /* these happen to be standard - avoid duplicates */ if (!strcmp(xterm_keys[n], "kDC") || !strcmp(xterm_keys[n], "kEND") || !strcmp(xterm_keys[n], "kHOM") || !strcmp(xterm_keys[n], "kLFT") || !strcmp(xterm_keys[n], "kRIT")) { continue; } sprintf(temp, "%.*s", 8, xterm_keys[n]); } else { sprintf(temp, "%.*s%d", 8, xterm_keys[n], mod); } dumpit(temp); } } } } #endif del_curterm(cur_term); } typedef enum { pDefault = 0 ,pComment ,pDescription ,pEscaped ,pNewline ,pName ,pNumber ,pString } STATE; static void parse_description(const char *input_name) { static char empty[1]; FILE *fp; struct stat sb; size_t count_bools = 0; size_t count_nums = 0; size_t count_strs = 0; size_t len; size_t j, k, jl; STATE state; if (stat(input_name, &sb) != 0 || (sb.st_mode & S_IFMT) != S_IFREG) { failed("input is not a file"); } if (sb.st_size == 0) { failed("input is empty"); } /* * None of the arrays could be larger than the input-file, and since it * is small, just allocate the maximum for simplicity. */ if ((my_blob = malloc((size_t) sb.st_size + 1)) == 0 || (my_boolcodes = typeCalloc(char *, sb.st_size)) == 0 || (my_numcodes = typeCalloc(char *, sb.st_size)) == 0 || (my_numvalues = typeCalloc(char *, sb.st_size)) == 0 || (my_strcodes = typeCalloc(char *, sb.st_size)) == 0 || (my_strvalues = typeCalloc(char *, sb.st_size)) == 0) { failed("cannot allocate memory for input-file"); } if ((fp = fopen(input_name, "r")) == 0) failed("cannot open input-file"); len = fread(my_blob, sizeof(char), (size_t) sb.st_size, fp); my_blob[sb.st_size] = '\0'; fclose(fp); /* * First, get rid of comments and escaped newlines, as well as repeated * colons to construct a canonical entry. */ state = pNewline; for (j = k = 0; j < len; ++j) { int ch = my_blob[j]; if (ch == '\t') { ch = ' '; } switch (state) { case pNewline: if (ch == ' ') { continue; } if (ch == '#') { state = pComment; continue; } state = pDefault; /* FALLTHRU */ case pDefault: switch (ch) { case '|': state = pDescription; continue; case '\\': state = pEscaped; continue; case '\n': state = pNewline; continue; case ' ': break; case ',': my_blob[k++] = (char) ch; break; default: if (isalpha(UChar(ch))) state = pName; else fprintf(stderr, "OOPS @%d:%.20s\n", __LINE__, my_blob + j); my_blob[k++] = (char) ch; break; } break; case pComment: if (ch == '\n') state = pNewline; break; case pDescription: switch (ch) { case ',': state = pDefault; break; case '\n': state = pNewline; break; } break; case pEscaped: if (ch != '\n') { my_blob[k++] = (char) ch; state = pDefault; } else { state = pNewline; } break; case pName: switch (ch) { case '\n': state = pNewline; continue; case ' ': case ',': state = pDefault; break; case '#': state = pNumber; break; case '=': state = pString; break; case '|': state = pDescription; continue; } my_blob[k++] = (char) ch; break; case pNumber: switch (ch) { case '\n': state = pNewline; continue; case ',': state = pDefault; break; case ' ': state = pDefault; continue; } my_blob[k++] = (char) ch; break; case pString: switch (ch) { case '\n': state = pNewline; break; case ',': state = pDefault; my_blob[k++] = (char) ch; break; default: my_blob[k++] = (char) ch; break; } break; default: /* not used */ break; } } my_blob[k] = '\0'; /* * Then, parse what's left, making indexes of the names and values. */ state = pDefault; for (j = 0; my_blob[j] != '\0'; ++j) { switch (state) { case pDefault: switch (my_blob[j]) { case '\\': state = pEscaped; break; case ',': my_blob[j] = '\0'; if (my_blob[j + 1] != '\0' && my_blob[j + 1] != ',') state = pName; break; case ' ': break; default: break; } case pEscaped: break; case pName: state = pDefault; if (isalpha(UChar(my_blob[j]))) { for (jl = 1; isalnum(UChar(my_blob[j + jl])); ++jl) { ; } } else { jl = 0; } if (jl != 0) { switch (my_blob[j + jl]) { case '#': my_numvalues[count_nums] = &my_blob[j + jl + 1]; my_numcodes[count_nums++] = &my_blob[j]; my_blob[j + jl] = '\0'; state = pNumber; j += jl; break; case '=': my_strvalues[count_strs] = &my_blob[j + jl + 1]; my_strcodes[count_strs++] = &my_blob[j]; my_blob[j + jl] = '\0'; state = pString; j += jl; break; default: if (my_blob[j + jl] == '@') { /* * We cannot get the type for a cancelled item * directly, but can infer it assuming the input * came from infocmp, which puts the data in a * known order. */ if (count_strs) { my_strvalues[count_strs] = empty; my_strcodes[count_strs++] = &my_blob[j]; } else if (count_nums) { my_numvalues[count_nums] = empty; my_numcodes[count_nums++] = &my_blob[j]; } else { my_boolcodes[count_bools++] = &my_blob[j]; } my_blob[j + jl] = '\0'; j += jl + 1; } else { my_boolcodes[count_bools++] = &my_blob[j]; my_blob[j + jl] = '\0'; j += jl; } state = (isCapName(my_blob[j + 1]) ? pName : pDefault); break; } } break; case pNumber: if (!isdigit(UChar(my_blob[j]))) { --j; state = pDefault; } break; case pString: switch (my_blob[j]) { case '\\': if (my_blob[j + 1] != '\0') { ++j; } else { --j; state = pDefault; } break; case ',': --j; state = pDefault; break; } break; case pNewline: case pComment: case pDescription: default: break; } } my_boolcodes[count_bools] = 0; my_numcodes[count_nums] = 0; my_numvalues[count_nums] = 0; my_strcodes[count_strs] = 0; my_strvalues[count_strs] = 0; #if 0 printf("# bools:%d\n", (int) count_bools); for (j = 0; my_boolcodes[j]; ++j) printf("\t%s,\n", my_boolcodes[j]); printf("# numbers:%d\n", (int) count_nums); for (j = 0; my_numcodes[j]; ++j) printf("\t%s#%s,\n", my_numcodes[j], my_numvalues[j]); printf("# strings:%d\n", (int) count_strs); for (j = 0; my_strcodes[j]; ++j) printf("\t%s=%s,\n", my_strcodes[j], my_strvalues[j]); #endif } #if USE_CODE_LISTS static char ** copy_code_list(NCURSES_CONST char *const *list) { int pass; size_t count; size_t length = 1; char **result = 0; char *blob = 0; char *unused = 0; for (pass = 0; pass < 2; ++pass) { for (count = 0; list[count] != 0; ++count) { size_t chunk = strlen(list[count]) + 1; if (pass == 0) { length += chunk; } else { result[count] = unused; strcpy(unused, list[count]); unused += chunk; } } if (pass == 0) { blob = malloc(length); result = typeCalloc(char *, count + 1); unused = blob; if (blob == 0 || result == 0) failed("copy_code_list failed"); } } return result; } #endif static void usage(void) { static const char *msg[] = { "Usage: demo_terminfo [options] [terminal]", "", "If no options are given, print all (boolean, numeric, string)", "capabilities for the given terminal, using short names.", "", "Options:", " -a try all names, print capabilities found", " -b print boolean-capabilities", " -d LIST colon-separated list of databases to use", " -e NAME environment variable to set with -d option", " -f print full names", " -i NAME terminal description to use as names for \"-a\" option", " -n print numeric-capabilities", " -q quiet (prints only counts)", " -r COUNT repeat for given count", " -s print string-capabilities", #ifdef NCURSES_VERSION " -x print extended capabilities", " -y direct-lookup names of extended capabilities", #endif }; unsigned n; for (n = 0; n < SIZEOF(msg); ++n) { fprintf(stderr, "%s\n", msg[n]); } ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int n; int repeat; char *name; int r_opt = 1; char *input_name = 0; while ((n = getopt(argc, argv, "abd:e:fi:nqr:sxy")) != -1) { switch (n) { case 'a': a_opt = TRUE; break; case 'b': b_opt = TRUE; break; case 'd': d_opt = optarg; break; case 'e': e_opt = optarg; break; case 'f': f_opt = TRUE; break; case 'i': input_name = optarg; break; case 'n': n_opt = TRUE; break; case 'q': q_opt = TRUE; break; case 'r': if ((r_opt = atoi(optarg)) <= 0) usage(); break; case 's': s_opt = TRUE; break; #ifdef NCURSES_VERSION case 'x': x_opt = TRUE; break; case 'y': y_opt = TRUE; x_opt = TRUE; break; #endif default: usage(); break; } } #if HAVE_USE_EXTENDED_NAMES use_extended_names(x_opt); #endif if (!(b_opt || n_opt || s_opt)) { b_opt = TRUE; n_opt = TRUE; s_opt = TRUE; } make_dblist(); if (a_opt) { for (repeat = 0; repeat < r_opt; ++repeat) { if (optind < argc) { for (n = optind; n < argc; ++n) { brute_force(argv[n]); } } else if ((name = getenv("TERM")) != 0) { brute_force(name); } else { static char dumb[] = "dumb"; brute_force(dumb); } } } else { if (input_name != 0) { parse_description(input_name); } #if USE_CODE_LISTS else { my_boolcodes = copy_code_list(boolnames); my_numcodes = copy_code_list(numnames); my_strcodes = copy_code_list(strnames); } #else else { failed("no capability-lists available (use -i option)"); } #endif /* USE_CODE_LISTS */ for (repeat = 0; repeat < r_opt; ++repeat) { if (optind < argc) { for (n = optind; n < argc; ++n) { demo_terminfo(argv[n]); } } else if ((name = getenv("TERM")) != 0) { demo_terminfo(name); } else { static char dumb[] = "dumb"; demo_terminfo(dumb); } } } printf("%ld values (%ld booleans, %ld numbers, %ld strings)\n", total_values, total_b_values, total_n_values, total_s_values); #ifdef NO_LEAKS free_dblist(); if (my_blob != 0) { free(my_blob); free(my_boolcodes); free(my_numcodes); free(my_numvalues); free(my_strcodes); free(my_strvalues); } #endif ExitProgram(EXIT_SUCCESS); } #else /* !HAVE_TIGETSTR */ int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { failed("This program requires the terminfo functions such as tigetstr"); ExitProgram(EXIT_FAILURE); } #endif /* HAVE_TIGETSTR */ ncurses-6.0-20160213/test/test_sgr.c0000644000175100001440000002074512657724520015453 0ustar tomusers/**************************************************************************** * Copyright (c) 2015,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey * * $Id: test_sgr.c,v 1.6 2016/02/13 22:08:16 tom Exp $ * * A simple demo of the sgr/sgr0 terminal capabilities. */ #define USE_TINFO #include #if !HAVE_TIGETSTR static void failed(const char *) GCC_NORETURN; static void failed(const char *msg) { fprintf(stderr, "%s\n", msg); ExitProgram(EXIT_FAILURE); } #endif #if HAVE_TIGETSTR static bool q_opt = FALSE; static char *d_opt; static char *e_opt; static char **db_list; static int db_item; static long total_values; static char * make_dbitem(char *p, char *q) { char *result = malloc(strlen(e_opt) + 2 + (size_t) (p - q)); sprintf(result, "%s=%.*s", e_opt, (int) (p - q), q); return result; } static void make_dblist(void) { if (d_opt && e_opt) { int pass; for (pass = 0; pass < 2; ++pass) { char *p, *q; size_t count = 0; for (p = q = d_opt; *p != '\0'; ++p) { if (*p == ':') { if (p != q + 1) { if (pass) { db_list[count] = make_dbitem(p, q); } count++; } q = p + 1; } } if (p != q + 1) { if (pass) { db_list[count] = make_dbitem(p, q); } count++; } if (!pass) { db_list = typeCalloc(char *, count + 1); } } } } static char * next_dbitem(void) { char *result = 0; if (db_list) { if ((result = db_list[db_item]) == 0) { db_item = 0; result = db_list[0]; } else { db_item++; } } printf("** %s\n", result); return result; } #ifdef NO_LEAKS static void free_dblist(void) { if (db_list) { int n; for (n = 0; db_list[n]; ++n) free(db_list[n]); free(db_list); db_list = 0; } } #endif #define MAXPAR 9 #define MAXSGR (1 << MAXPAR) #define BITS2P(n) (count & (1 << (n - 1))) #define MASK_SMSO (1 << 0) #define MASK_BOLD (1 << 5) #define MASK_REV (1 << 2) static void dumpit(unsigned bits, unsigned ignore, const char *sgr, const char *sgr0) { static const char sample[] = "abcdefghijklm"; static char params[] = "SURBDBIPA"; unsigned n; printf("%4d ", bits); bits &= ~ignore; for (n = 0; n < MAXPAR; ++n) { putchar((int) ((bits & (unsigned) (1 << n)) ? params[n] : '-')); } putchar(' '); putp(sgr); putp(sample); putp(sgr0); putchar('\n'); } static bool one_bit(unsigned a, unsigned b) { unsigned c = (a ^ b); bool result = FALSE; if (c) { while (!(c & 1)) { c >>= 1; } result = (c == 1); } return result; } static void brute_force(const char *name) { unsigned count; char *my_sgr; char *my_sgr0; char *my_bold; char *my_revs; char *my_smso; if (db_list) { putenv(next_dbitem()); } if (!q_opt) printf("Terminal type \"%s\"\n", name); setupterm((NCURSES_CONST char *) name, 1, (int *) 0); if (!q_opt) { if (strcmp(name, ttytype)) printf("... actual \"%s\"\n", ttytype); } my_sgr = tigetstr("sgr"); my_sgr0 = tigetstr("sgr0"); my_bold = tigetstr("bold"); my_revs = tigetstr("rev"); my_smso = tigetstr("smso"); if (!VALID_STRING(my_sgr)) { fprintf(stderr, "no \"sgr\" capability found\n"); } else if (!VALID_STRING(my_sgr0)) { fprintf(stderr, "no \"sgr0\" capability found\n"); } else { char *values[MAXSGR]; unsigned j; unsigned ignore = 0; unsigned reason = 0; unsigned repeat = 0; for (count = 0; count < MAXSGR; ++count) { values[count] = tparm(my_sgr, BITS2P(1), BITS2P(2), BITS2P(3), BITS2P(4), BITS2P(5), BITS2P(6), BITS2P(7), BITS2P(8), BITS2P(9)); if (values[count] != 0) { values[count] = strdup(values[count]); } } for (count = 0; count < MAXSGR; ++count) { if (values[count] != 0) { for (j = count + 1; j < MAXSGR; ++j) { if (values[j] == 0) continue; if (strcmp(values[count], values[j])) continue; if (one_bit(count, j)) { free(values[j]); values[j] = 0; } } } } for (j = 0; j < MAXPAR; ++j) { unsigned mask = (unsigned) (1 << j); for (count = 0; count < MAXSGR; ++count) { if ((count & mask) != 0) continue; if (values[count] != 0 && values[count + mask] != 0) { mask = 0; break; } } ignore |= mask; } /* smso is tested first, but often duplicates bold or reverse. */ if (VALID_STRING(my_smso)) { if (VALID_STRING(my_bold) && !strcmp(my_bold, my_smso)) { repeat |= MASK_SMSO; reason = MASK_BOLD; } if (VALID_STRING(my_revs) && !strcmp(my_revs, my_smso)) { repeat |= MASK_SMSO; reason = MASK_REV; } } for (count = 0; count < MAXSGR; ++count) { if (values[count] != 0) { bool found = FALSE; if ((repeat & MASK_SMSO) != 0 && (count & MASK_SMSO) != 0) { found = TRUE; } else { for (j = 0; j < count; ++j) { if (values[j] != 0 && !strcmp(values[j], values[count])) { if ((repeat & MASK_SMSO) != 0 && (j & MASK_SMSO) != 0 && (count & reason) != 0) { continue; } found = TRUE; break; } } } if (!found) { dumpit(count, ignore, values[count], my_sgr0); ++total_values; } } } } del_curterm(cur_term); } static void usage(void) { static const char *msg[] = { "Usage: test_sgr [options] [terminal]", "", "Print all distinct combinations of sgr capability.", "", "Options:", " -d LIST colon-separated list of databases to use", " -e NAME environment variable to set with -d option", " -q quiet (prints only counts)", }; unsigned n; for (n = 0; n < SIZEOF(msg); ++n) { fprintf(stderr, "%s\n", msg[n]); } ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int n; char *name; while ((n = getopt(argc, argv, "d:e:q")) != -1) { switch (n) { case 'd': d_opt = optarg; break; case 'e': e_opt = optarg; break; case 'q': q_opt = TRUE; break; default: usage(); break; } } make_dblist(); if (optind < argc) { for (n = optind; n < argc; ++n) { brute_force(argv[n]); } } else if ((name = getenv("TERM")) != 0) { brute_force(name); } else { static char dumb[] = "dumb"; brute_force(dumb); } printf("%ld distinct values\n", total_values); #ifdef NO_LEAKS free_dblist(); #endif ExitProgram(EXIT_SUCCESS); } #else /* !HAVE_TIGETSTR */ int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { failed("This program requires the terminfo functions such as tigetstr"); ExitProgram(EXIT_FAILURE); } #endif /* HAVE_TIGETSTR */ ncurses-6.0-20160213/test/dots_termcap.c0000644000175100001440000001333512410754710016271 0ustar tomusers/**************************************************************************** * Copyright (c) 2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey * * $Id: dots_termcap.c,v 1.8 2014/09/25 09:00:56 tom Exp $ * * A simple demo of the termcap interface. */ #define USE_TINFO #include #if !defined(__MINGW32__) #include #endif #if HAVE_TGETENT #include #define valid(s) ((s != 0) && s != (char *)-1) static bool interrupted = FALSE; static long total_chars = 0; static time_t started; static char *t_AB; static char *t_AF; static char *t_cl; static char *t_cm; static char *t_me; static char *t_mr; static char *t_oc; static char *t_op; static char *t_ve; static char *t_vi; static struct { const char *name; char **value; } my_caps[] = { { "AB", &t_AB }, { "AF", &t_AF }, { "cl", &t_cl }, { "cm", &t_cm }, { "me", &t_me }, { "mr", &t_mr }, { "oc", &t_oc }, { "op", &t_op }, { "ve", &t_ve }, { "vi", &t_vi }, }; static TPUTS_PROTO(outc, c) { int rc = c; if (interrupted) { char tmp = (char) c; if (write(STDOUT_FILENO, &tmp, (size_t) 1) == -1) rc = EOF; } else { rc = putc(c, stdout); } TPUTS_RETURN(rc); } static bool outs(char *s) { if (valid(s)) { tputs(s, 1, outc); return TRUE; } return FALSE; } static void cleanup(void) { outs(t_me); if (!outs(t_oc)) outs(t_op); outs(t_cl); outs(t_ve); printf("\n\n%ld total chars, rate %.2f/sec\n", total_chars, ((double) (total_chars) / (double) (time((time_t *) 0) - started))); } static void onsig(int n GCC_UNUSED) { interrupted = TRUE; } static double ranf(void) { long r = (rand() & 077777); return ((double) r / 32768.); } static void my_napms(int ms) { #if defined(__MINGW32__) || !HAVE_GETTIMEOFDAY Sleep((DWORD) ms); #else struct timeval data; data.tv_sec = 0; data.tv_usec = ms * 1000; select(0, NULL, NULL, NULL, &data); #endif } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int x, y, z, p; int num_colors; int num_lines; int num_columns; double r; double c; char buffer[1024]; char area[1024]; char *name; CATCHALL(onsig); srand((unsigned) time(0)); if ((name = getenv("TERM")) == 0) { fprintf(stderr, "TERM is not set\n"); ExitProgram(EXIT_FAILURE); } else if (tgetent(buffer, name) < 0) { fprintf(stderr, "terminal description not found\n"); ExitProgram(EXIT_FAILURE); } else { size_t t; char *ap = area; for (t = 0; t < SIZEOF(my_caps); ++t) { *(my_caps[t].value) = tgetstr((NCURSES_CONST char *) my_caps[t].name, &ap); } } num_colors = tgetnum("Co"); num_lines = tgetnum("li"); num_columns = tgetnum("co"); outs(t_cl); outs(t_vi); if (num_colors > 1) { if (!valid(t_AF) || !valid(t_AB) || (!valid(t_oc) && !valid(t_op))) num_colors = -1; } r = (double) (num_lines - 4); c = (double) (num_columns - 4); started = time((time_t *) 0); while (!interrupted) { x = (int) (c * ranf()) + 2; y = (int) (r * ranf()) + 2; p = (ranf() > 0.9) ? '*' : ' '; tputs(tgoto(t_cm, x, y), 1, outc); if (num_colors > 0) { z = (int) (ranf() * num_colors); if (ranf() > 0.01) { tputs(tgoto(t_AF, 0, z), 1, outc); } else { tputs(tgoto(t_AB, 0, z), 1, outc); my_napms(1); } } else if (valid(t_me) && valid(t_mr)) { if (ranf() <= 0.01) { outs((ranf() > 0.6) ? t_mr : t_me); my_napms(1); } } outc(p); fflush(stdout); ++total_chars; } cleanup(); ExitProgram(EXIT_SUCCESS); } #else int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { fprintf(stderr, "This program requires termcap\n"); exit(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/tclock.c0000644000175100001440000001242612367211657015075 0ustar tomusers/* $Id: tclock.c,v 1.34 2014/08/02 16:37:03 tom Exp $ */ #include #if HAVE_MATH_H #include #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif /* tclock - analog/digital clock for curses. If it gives you joy, then (a) I'm glad (b) you need to get out more :-) This program is copyright Howard Jones, September 1994 (ha.jones@ic.ac.uk). It may be freely distributed as long as this copyright message remains intact, and any modifications are clearly marked as such. [In fact, if you modify it, I wouldn't mind the modifications back, especially if they add any nice features. A good one would be a precalc table for the 60 hand positions, so that the floating point stuff can be ditched. As I said, it was a 20 hackup minute job.] COMING SOON: tfishtank. Be the envy of your mac-owning colleagues. */ /* To compile: cc -o tclock tclock.c -lcurses -lm */ #ifndef PI #define PI 3.141592654 #endif #define sign(_x) (_x<0?-1:1) #define ASPECT 2.2 #define ROUND(value) ((int)((value) + 0.5)) #define A2X(angle,radius) ROUND(ASPECT * radius * sin(angle)) #define A2Y(angle,radius) ROUND(radius * cos(angle)) /* Plot a point */ static void plot(int x, int y, int col) { MvAddCh(y, x, (chtype) col); } /* Draw a diagonal(arbitrary) line using Bresenham's alogrithm. */ static void dline(int pair, int from_x, int from_y, int x2, int y2, int ch) { int dx, dy; int ax, ay; int sx, sy; int x, y; int d; if (has_colors()) (void) attrset(AttrArg(COLOR_PAIR(pair), 0)); dx = x2 - from_x; dy = y2 - from_y; ax = abs(dx * 2); ay = abs(dy * 2); sx = sign(dx); sy = sign(dy); x = from_x; y = from_y; if (ax > ay) { d = ay - (ax / 2); while (1) { plot(x, y, ch); if (x == x2) return; if (d >= 0) { y += sy; d -= ax; } x += sx; d += ay; } } else { d = ax - (ay / 2); while (1) { plot(x, y, ch); if (y == y2) return; if (d >= 0) { x += sx; d -= ay; } y += sy; d += ax; } } } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int i, cx, cy; double cr, mradius, hradius, mangle, hangle; double sangle, sradius, hours; int hdx, hdy; int mdx, mdy; int sdx, sdy; int ch; int lastbeep = -1; bool odd = FALSE; time_t tim; struct tm *t; char szChar[10]; char *text; short my_bg = COLOR_BLACK; #if HAVE_GETTIMEOFDAY struct timeval current; #endif double fraction = 0.0; setlocale(LC_ALL, ""); initscr(); noecho(); cbreak(); nodelay(stdscr, TRUE); curs_set(0); if (has_colors()) { start_color(); #if HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) my_bg = -1; #endif init_pair(1, COLOR_RED, my_bg); init_pair(2, COLOR_MAGENTA, my_bg); init_pair(3, COLOR_GREEN, my_bg); init_pair(4, COLOR_WHITE, COLOR_BLUE); } #ifdef KEY_RESIZE keypad(stdscr, TRUE); restart: #endif cx = (COLS - 1) / 2; /* 39 */ cy = LINES / 2; /* 12 */ if (cx / ASPECT < cy) cr = cx / ASPECT; else cr = cy; sradius = (5 * cr) / 6; /* 10 */ mradius = (3 * cr) / 4; /* 9 */ hradius = cr / 2; /* 6 */ for (i = 0; i < 12; i++) { sangle = (i + 1) * (2.0 * PI) / 12.0; sdx = A2X(sangle, sradius); sdy = A2Y(sangle, sradius); sprintf(szChar, "%d", i + 1); MvAddStr(cy - sdy, cx + sdx, szChar); } MvAddStr(0, 0, "ASCII Clock by Howard Jones (ha.jones@ic.ac.uk),1994"); sradius = (4 * sradius) / 5; for (;;) { napms(100); tim = time(0); t = localtime(&tim); hours = (t->tm_hour + (t->tm_min / 60.0)); if (hours > 12.0) hours -= 12.0; mangle = ((t->tm_min + (t->tm_sec / 60.0)) * (2 * PI) / 60.0); mdx = A2X(mangle, mradius); mdy = A2Y(mangle, mradius); hangle = ((hours) * (2.0 * PI) / 12.0); hdx = A2X(hangle, hradius); hdy = A2Y(hangle, hradius); #if HAVE_GETTIMEOFDAY gettimeofday(¤t, 0); fraction = ((double) current.tv_usec / 1.0e6); #endif sangle = ((t->tm_sec + fraction) * (2.0 * PI) / 60.0); sdx = A2X(sangle, sradius); sdy = A2Y(sangle, sradius); dline(3, cx, cy, cx + mdx, cy - mdy, '#'); (void) attrset(A_REVERSE); dline(2, cx, cy, cx + hdx, cy - hdy, '.'); attroff(A_REVERSE); if (has_colors()) (void) attrset(AttrArg(COLOR_PAIR(1), 0)); dline(1, cx, cy, cx + sdx, cy - sdy, 'O'); if (has_colors()) (void) attrset(AttrArg(COLOR_PAIR(0), 0)); text = ctime(&tim); MvPrintw(2, 0, "%.*s", (int) (strlen(text) - 1), text); refresh(); if ((t->tm_sec % 5) == 0 && t->tm_sec != lastbeep) { lastbeep = t->tm_sec; if (has_colors()) { odd = !odd; bkgd((chtype) (odd ? COLOR_PAIR(4) : COLOR_PAIR(0))); } beep(); } if ((ch = getch()) != ERR) { #ifdef KEY_RESIZE if (ch == KEY_RESIZE) { flash(); erase(); wrefresh(curscr); goto restart; } #endif break; } dline(0, cx, cy, cx + hdx, cy - hdy, ' '); dline(0, cx, cy, cx + mdx, cy - mdy, ' '); dline(0, cx, cy, cx + sdx, cy - sdy, ' '); } curs_set(1); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { printf("This program requires the development header math.h\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/test_get_wstr.c0000644000175100001440000002167611514362057016514 0ustar tomusers/**************************************************************************** * Copyright (c) 2007-2009,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_get_wstr.c,v 1.8 2011/01/15 18:15:11 tom Exp $ * * Author: Thomas E Dickey * * Demonstrate the get_wstr functions from the curses library. int get_wstr(wint_t *wstr); int getn_wstr(wint_t *wstr, int n); int wget_wstr(WINDOW *win, wint_t *wstr); int wgetn_wstr(WINDOW *win, wint_t *wstr, int n); int mvget_wstr(int y, int x, wint_t *wstr); int mvgetn_wstr(int y, int x, wint_t *wstr, int n); int mvwget_wstr(WINDOW *win, int y, int x, wint_t *wstr); int mvwgetn_wstr(WINDOW *win, int y, int x, wint_t *wstr, int n); */ #include #if HAVE_CHGAT /* NetBSD curses wchgat */ #if USE_WIDEC_SUPPORT #define BASE_Y 6 #define MAX_COLS 1024 typedef enum { eGetStr = 0, eGetNStr, eMvGetStr, eMvGetNStr, eMaxFlavor } Flavors; static bool Quit(int ch) { return (ch == ERR || ch == 'q' || ch == QUIT || ch == ESCAPE); } static int Remainder(WINDOW *txtwin) { int result = getmaxx(txtwin) - getcurx(txtwin); return (result > 0) ? result : 0; } /* * Show a highlighted line in the place where input will happen. */ static void ShowPrompt(WINDOW *txtwin, int limit) { wchgat(txtwin, limit, A_REVERSE, 0, NULL); wnoutrefresh(txtwin); } static void MovePrompt(WINDOW *txtwin, int limit, int y, int x) { wchgat(txtwin, Remainder(txtwin), A_NORMAL, 0, NULL); wmove(txtwin, y, x); ShowPrompt(txtwin, limit); } static int ShowFlavor(WINDOW *strwin, WINDOW *txtwin, int flavor, int limit) { const char *name = "?"; bool limited = FALSE; bool wins = (txtwin != stdscr); int result; switch (flavor) { case eGetStr: name = wins ? "wget_wstr" : "get_wstr"; break; case eGetNStr: limited = TRUE; name = wins ? "wgetn_wstr" : "getn_wstr"; break; case eMvGetStr: name = wins ? "mvwget_wstr" : "mvget_wstr"; break; case eMvGetNStr: limited = TRUE; name = wins ? "mvwgetn_wstr" : "mvgetn_wstr"; break; case eMaxFlavor: break; } wmove(strwin, 0, 0); werase(strwin); if (limited) { wprintw(strwin, "%s(%d):", name, limit); } else { wprintw(strwin, "%s:", name); } result = limited ? limit : Remainder(txtwin); ShowPrompt(txtwin, result); wnoutrefresh(strwin); return result; } static int test_get_wstr(int level, char **argv, WINDOW *strwin) { WINDOW *txtbox = 0; WINDOW *txtwin = 0; FILE *fp; int ch; int rc; int txt_x = 0, txt_y = 0; int base_y; int flavor = 0; int limit = getmaxx(strwin) - 5; int actual; wint_t buffer[MAX_COLS]; if (argv[level] == 0) { beep(); return FALSE; } if (level > 1) { txtbox = newwin(LINES - BASE_Y, COLS - level, BASE_Y, level); box(txtbox, 0, 0); wnoutrefresh(txtbox); txtwin = derwin(txtbox, getmaxy(txtbox) - 2, getmaxx(txtbox) - 2, 1, 1); base_y = 0; } else { txtwin = stdscr; base_y = BASE_Y; } keypad(txtwin, TRUE); /* enable keyboard mapping */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ txt_y = base_y; txt_x = 0; wmove(txtwin, txt_y, txt_x); if ((fp = fopen(argv[level], "r")) != 0) { while ((ch = fgetc(fp)) != EOF) { if (waddch(txtwin, UChar(ch)) != OK) { break; } } fclose(fp); } else { wprintw(txtwin, "Cannot open:\n%s", argv[1]); } wmove(txtwin, txt_y, txt_x); actual = ShowFlavor(strwin, txtwin, flavor, limit); while (!Quit(ch = mvwgetch(txtwin, txt_y, txt_x))) { switch (ch) { case KEY_DOWN: case 'j': if (txt_y < getmaxy(txtwin) - 1) { MovePrompt(txtwin, actual, ++txt_y, txt_x); } else { beep(); } break; case KEY_UP: case 'k': if (txt_y > base_y) { MovePrompt(txtwin, actual, --txt_y, txt_x); } else { beep(); } break; case KEY_LEFT: case 'h': if (txt_x > 0) { MovePrompt(txtwin, actual, txt_y, --txt_x); } else { beep(); } break; case KEY_RIGHT: case 'l': if (txt_x < getmaxx(txtwin) - 1) { MovePrompt(txtwin, actual, txt_y, ++txt_x); } else { beep(); } break; case 'w': test_get_wstr(level + 1, argv, strwin); if (txtbox != 0) { touchwin(txtbox); wnoutrefresh(txtbox); } else { touchwin(txtwin); wnoutrefresh(txtwin); } break; case '-': if (limit > 0) { actual = ShowFlavor(strwin, txtwin, flavor, --limit); MovePrompt(txtwin, actual, txt_y, txt_x); } else { beep(); } break; case '+': actual = ShowFlavor(strwin, txtwin, flavor, ++limit); MovePrompt(txtwin, actual, txt_y, txt_x); break; case '<': if (flavor > 0) { actual = ShowFlavor(strwin, txtwin, --flavor, limit); MovePrompt(txtwin, actual, txt_y, txt_x); } else { beep(); } break; case '>': if (flavor + 1 < eMaxFlavor) { actual = ShowFlavor(strwin, txtwin, ++flavor, limit); MovePrompt(txtwin, actual, txt_y, txt_x); } else { beep(); } break; case ':': actual = ShowFlavor(strwin, txtwin, flavor, limit); *buffer = '\0'; rc = ERR; echo(); (void) wattrset(txtwin, A_REVERSE); switch (flavor) { case eGetStr: if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); rc = wget_wstr(txtwin, buffer); } else { move(txt_y, txt_x); rc = get_wstr(buffer); } break; case eGetNStr: if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); rc = wgetn_wstr(txtwin, buffer, limit); } else { move(txt_y, txt_x); rc = getn_wstr(buffer, limit); } break; case eMvGetStr: if (txtwin != stdscr) { rc = mvwget_wstr(txtwin, txt_y, txt_x, buffer); } else { rc = mvget_wstr(txt_y, txt_x, buffer); } break; case eMvGetNStr: if (txtwin != stdscr) { rc = mvwgetn_wstr(txtwin, txt_y, txt_x, buffer, limit); } else { rc = mvgetn_wstr(txt_y, txt_x, buffer, limit); } break; case eMaxFlavor: break; } noecho(); (void) wattrset(txtwin, A_NORMAL); wprintw(strwin, "%d", rc); (void) waddwstr(strwin, (wchar_t *) buffer); wnoutrefresh(strwin); break; default: beep(); break; } doupdate(); } if (level > 1) { delwin(txtwin); delwin(txtbox); } return TRUE; } int main(int argc, char *argv[]) { WINDOW *chrbox; WINDOW *strwin; setlocale(LC_ALL, ""); if (argc < 2) { fprintf(stderr, "usage: %s file\n", argv[0]); return EXIT_FAILURE; } initscr(); chrbox = derwin(stdscr, BASE_Y, COLS, 0, 0); box(chrbox, 0, 0); wnoutrefresh(chrbox); strwin = derwin(chrbox, 4, COLS - 2, 1, 1); test_get_wstr(1, argv, strwin); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the wide-ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif #else int main(void) { printf("This program requires the curses chgat function\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/inchs.c0000644000175100001440000001622712052040267014711 0ustar tomusers/**************************************************************************** * Copyright (c) 2007-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: inchs.c,v 1.12 2012/11/18 01:58:15 tom Exp $ * * Author: Thomas E Dickey */ /* chtype inch(void); chtype winch(WINDOW *win); chtype mvinch(int y, int x); chtype mvwinch(WINDOW *win, int y, int x); int inchstr(chtype *chstr); int inchnstr(chtype *chstr, int n); int winchstr(WINDOW *win, chtype *chstr); int winchnstr(WINDOW *win, chtype *chstr, int n); int mvinchstr(int y, int x, chtype *chstr); int mvinchnstr(int y, int x, chtype *chstr, int n); int mvwinchstr(WINDOW *win, int y, int x, chtype *chstr); int mvwinchnstr(WINDOW *win, int y, int x, chtype *chstr, int n); */ #include #define BASE_Y 7 #define MAX_COLS 1024 static void failed(const char *s) { int save = errno; endwin(); errno = save; perror(s); ExitProgram(EXIT_FAILURE); } static bool Quit(int ch) { return (ch == ERR || ch == 'q' || ch == QUIT || ch == ESCAPE); } static int test_inchs(int level, char **argv, WINDOW *chrwin, WINDOW *strwin) { WINDOW *txtbox = 0; WINDOW *txtwin = 0; FILE *fp; int ch, j; int txt_x = 0, txt_y = 0; int base_y; int limit; chtype text[MAX_COLS]; if (argv[level] == 0) { beep(); return FALSE; } if (level > 1) { txtbox = newwin(LINES - BASE_Y, COLS - level, BASE_Y, level); box(txtbox, 0, 0); wnoutrefresh(txtbox); txtwin = derwin(txtbox, getmaxy(txtbox) - 2, getmaxx(txtbox) - 2, 1, 1); base_y = 0; } else { txtwin = stdscr; base_y = BASE_Y; } if (txtwin == 0) failed("cannot create txtwin"); keypad(txtwin, TRUE); /* enable keyboard mapping */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ txt_y = base_y; txt_x = 0; wmove(txtwin, txt_y, txt_x); if ((fp = fopen(argv[level], "r")) != 0) { while ((j = fgetc(fp)) != EOF) { if (waddch(txtwin, UChar(j)) != OK) { break; } } fclose(fp); } else { wprintw(txtwin, "Cannot open:\n%s", argv[1]); } while (!Quit(j = mvwgetch(txtwin, txt_y, txt_x))) { switch (j) { case KEY_DOWN: case 'j': if (txt_y < getmaxy(txtwin) - 1) txt_y++; else beep(); break; case KEY_UP: case 'k': if (txt_y > base_y) txt_y--; else beep(); break; case KEY_LEFT: case 'h': if (txt_x > 0) txt_x--; else beep(); break; case KEY_RIGHT: case 'l': if (txt_x < getmaxx(txtwin) - 1) txt_x++; else beep(); break; case 'w': test_inchs(level + 1, argv, chrwin, strwin); if (txtbox != 0) { touchwin(txtbox); wnoutrefresh(txtbox); } else { touchwin(txtwin); wnoutrefresh(txtwin); } break; default: beep(); break; } MvWPrintw(chrwin, 0, 0, "char:"); wclrtoeol(chrwin); if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); if ((ch = (int) winch(txtwin)) != ERR) { if (waddch(chrwin, (chtype) ch) != ERR) { for (j = txt_x + 1; j < getmaxx(txtwin); ++j) { if ((ch = (int) mvwinch(txtwin, txt_y, j)) != ERR) { if (waddch(chrwin, (chtype) ch) == ERR) { break; } } else { break; } } } } } else { move(txt_y, txt_x); if ((ch = (int) inch()) != ERR) { if (waddch(chrwin, (chtype) ch) != ERR) { for (j = txt_x + 1; j < getmaxx(txtwin); ++j) { if ((ch = (int) mvinch(txt_y, j)) != ERR) { if (waddch(chrwin, (chtype) ch) == ERR) { break; } } else { break; } } } } } wnoutrefresh(chrwin); MvWPrintw(strwin, 0, 0, "text:"); wclrtobot(strwin); limit = getmaxx(strwin) - 5; if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); if (winchstr(txtwin, text) != ERR) { MvWAddChStr(strwin, 0, 5, text); } wmove(txtwin, txt_y, txt_x); if (winchnstr(txtwin, text, limit) != ERR) { MvWAddChStr(strwin, 1, 5, text); } if (mvwinchstr(txtwin, txt_y, txt_x, text) != ERR) { MvWAddChStr(strwin, 2, 5, text); } if (mvwinchnstr(txtwin, txt_y, txt_x, text, limit) != ERR) { MvWAddChStr(strwin, 3, 5, text); } } else { move(txt_y, txt_x); if (inchstr(text) != ERR) { MvWAddChStr(strwin, 0, 5, text); } move(txt_y, txt_x); if (inchnstr(text, limit) != ERR) { MvWAddChStr(strwin, 1, 5, text); } if (mvinchstr(txt_y, txt_x, text) != ERR) { MvWAddChStr(strwin, 2, 5, text); } if (mvinchnstr(txt_y, txt_x, text, limit) != ERR) { MvWAddChStr(strwin, 3, 5, text); } } wnoutrefresh(strwin); } if (level > 1) { delwin(txtwin); delwin(txtbox); } return TRUE; } int main(int argc, char *argv[]) { WINDOW *chrbox; WINDOW *chrwin; WINDOW *strwin; setlocale(LC_ALL, ""); if (argc < 2) { fprintf(stderr, "usage: %s file\n", argv[0]); return EXIT_FAILURE; } initscr(); chrbox = derwin(stdscr, BASE_Y, COLS, 0, 0); box(chrbox, 0, 0); wnoutrefresh(chrbox); chrwin = derwin(chrbox, 1, COLS - 2, 1, 1); strwin = derwin(chrbox, 4, COLS - 2, 2, 1); test_inchs(1, argv, chrwin, strwin); endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/firstlast.c0000644000175100001440000000734611367076373015641 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * This test was written by Alexander V. Lukyanov to demonstrate difference * between ncurses 4.1 and SVR4 curses * * $Id: firstlast.c,v 1.7 2010/05/01 19:11:55 tom Exp $ */ #include static void fill(WINDOW *w, const char *str) { const char *s; int x0 = -1, y0 = -1; int x1, y1; for (;;) { for (s = str; *s; s++) { getyx(w, y1, x1); if (waddch(w, UChar(*s)) == ERR || (x1 == x0 && y1 == y0)) { wmove(w, 0, 0); return; } x0 = x1; y0 = y1; } } } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { WINDOW *large, *small; initscr(); noecho(); large = newwin(20, 60, 2, 10); small = newwin(10, 30, 7, 25); /* test 1 - addch */ fill(large, "LargeWindow"); refresh(); wrefresh(large); wrefresh(small); MvWAddStr(small, 5, 5, " Test String "); wrefresh(small); getch(); touchwin(large); wrefresh(large); MvWAddStr(small, 5, 5, " Test <***************> String "); wrefresh(small); /* DIFFERENCE! */ getch(); /* test 2: erase */ erase(); refresh(); getch(); /* test 3: clrtoeol */ werase(small); wrefresh(small); touchwin(large); wrefresh(large); wmove(small, 5, 0); waddstr(small, " clrtoeol>"); wclrtoeol(small); wrefresh(small); /* DIFFERENCE! */ ; getch(); /* test 4: clrtobot */ werase(small); wrefresh(small); touchwin(large); wrefresh(large); wmove(small, 5, 3); waddstr(small, " clrtobot>"); wclrtobot(small); wrefresh(small); /* DIFFERENCE! */ getch(); endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/listused.sh0000755000175100001440000001273411445153603015637 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 2003-2006,2010 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: listused.sh,v 1.8 2010/09/18 15:15:15 tom Exp $ # A very simple script to list all entrypoints that are used by either a test # program, or within the libraries. This relies on the output format of 'nm', # and assumes that the libraries are configured with TRACE defined, and using # these options: # --disable-macros # --enable-sp-funcs # --enable-widec # Static libraries are used, to provide some filtering based on internal usage # of the different symbols. # keep the sorting independent of locale: if test "${LANGUAGE+set}" = set; then LANGUAGE=C; export LANGUAGE; fi if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi if test "${LC_COLLATE+set}" = set; then LC_COLLATE=C; export LC_COLLATE; fi NM_OPTS= if test ! -d ../objects ; then echo "? need objects to run this script" exit 1 elif test ! -d ../lib ; then echo "? need libraries to run this script" exit 1 fi PROGS= for name in `(echo "test:";sort modules; echo "progs:";sort ../progs/modules) |sed -e 's/[ ].*//' -e '/^[#@]/d'` do case $name in *:) PROGS="$PROGS $name" ;; *) NAME=../objects/${name}.o if test -f $NAME then PROGS="$PROGS $NAME" fi ;; esac done # For each library - for lib in ../lib/*.a do LIB=`basename $lib .a` case $LIB in *_*|*+*) continue ;; esac tmp=`echo $LIB|sed -e 's/w$//'` echo echo "${tmp}:" echo $tmp |sed -e 's/./-/g' # Construct a list of public externals provided by the library. WANT=`nm $NM_OPTS $lib |\ sed -e 's/^[^ ]*//' \ -e 's/^ *//' \ -e '/^[ a-z] /d' \ -e '/:$/d' \ -e '/^$/d' \ -e '/^U /d' \ -e 's/^[A-Z] //' \ -e '/^_/d' |\ sort -u` # List programs which use that external. for name in $WANT do HAVE= tags= last= for prog in $PROGS do case $prog in *:) tags=$prog ;; *) TEST=`nm $NM_OPTS $prog |\ sed -e 's/^[^ ]*//' \ -e 's/^ *//' \ -e '/^[ a-z] /d' \ -e '/:$/d' \ -e '/^$/d' \ -e 's/^[A-Z] //' \ -e '/^_/d' \ -e 's/^'${name}'$/_/' \ -e '/^[^_]/d'` if test -n "$TEST" then have=`basename $prog .o` if test -n "$HAVE" then if test "$last" = "$tags" then HAVE="$HAVE $have" else HAVE="$HAVE $tags $have" fi else HAVE="$tags $have" fi last="$tags" fi ;; esac done # if we did not find a program using it directly, see if it # is used within a library. if test -z "$HAVE" then for tmp in ../lib/*.a do case $tmp in *_*|*+*) continue ;; esac TEST=`nm $NM_OPTS $tmp |\ sed -e 's/^[^ ]*//' \ -e 's/^ *//' \ -e '/^[ a-z] /d' \ -e '/:$/d' \ -e '/^$/d' \ -e '/^[A-TV-Z] /d' \ -e 's/^[A-Z] //' \ -e '/^_/d' \ -e 's/^'${name}'$/_/' \ -e '/^[^_]/d'` if test -n "$TEST" then tmp=`basename $tmp .a |sed -e 's/w$//'` HAVE=`echo $tmp | sed -e 's/lib/lib: /'` break fi done fi test -z "$HAVE" && HAVE="-" lenn=`expr 39 - length $name` lenn=`expr $lenn / 8` tabs= while test $lenn != 0 do tabs="${tabs} " lenn=`expr $lenn - 1` done echo "${name}${tabs}${HAVE}" done done ncurses-6.0-20160213/test/test_add_wchstr.c0000644000175100001440000003416512367217347017005 0ustar tomusers/**************************************************************************** * Copyright (c) 2010-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_add_wchstr.c,v 1.21 2014/08/02 17:24:55 tom Exp $ * * Demonstrate the waddwchstr() and wadd_wch functions. * Thomas Dickey - 2009/9/12 * * Note: to provide inputs for *add_wch(), we use setcchar(). A quirk of the * X/Open definition for that function is that the string contains no * characters with negative width. Any control character (such as tab) falls * into that category. So it follows that *add_wch() cannot render a tab * character because there is no legal way to construct a cchar_t containing * one. X/Open does not document this, and it would be logical to assume that * *addwchstr() has the same limitation, but it uses a wchar_t string directly, * and does not document how tabs are handled. */ #include #if USE_WIDEC_SUPPORT #define WIDE_LINEDATA #include #undef MvAddCh #undef MvAddStr #undef MvWAddCh #undef MvWAddStr /* definitions to make it simpler to compare with test_addstr.c */ #define AddNStr add_wchnstr #define AddStr add_wchstr #define MvAddNStr (void) mvadd_wchnstr #define MvAddStr (void) mvadd_wchstr #define MvWAddNStr (void) mvwadd_wchnstr #define MvWAddStr (void) mvwadd_wchstr #define WAddNStr wadd_wchnstr #define WAddStr wadd_wchstr #define MY_TABSIZE 8 typedef enum { oDefault = 0, oMove = 1, oWindow = 2, oMoveWindow = 3 } Options; static bool m_opt = FALSE; static bool pass_ctls = FALSE; static bool w_opt = FALSE; static int n_opt = -1; static cchar_t *temp_buffer; static size_t temp_length; #define TempBuffer(source_len, source_cast) \ if (source != 0) { \ const char *temp; \ size_t need = source_len + 1; \ wchar_t have[2]; \ int n = 0; \ \ if (need > temp_length) { \ temp_length = need * 2; \ temp_buffer = typeRealloc(cchar_t, temp_length, temp_buffer); \ if (!temp_buffer) \ failed("TempBuffer"); \ } \ have[0] = 0; \ have[1] = 0; \ do { \ have[0] = source_cast; \ if (!pass_ctls \ && have[0] != 0 \ && have[0] < 256 \ && (temp = unctrl((chtype) have[0])) != 0 \ && strlen(temp) > 1) { \ while (*temp != '\0') { \ have[0] = (wchar_t) *temp++; \ setcchar(&temp_buffer[n++], have, A_NORMAL, 0, NULL); \ } \ } else { \ setcchar(&temp_buffer[n++], have, A_NORMAL, 0, NULL); \ } \ } while (have[0] != 0); \ } else if (temp_buffer != 0) { \ free(temp_buffer); \ temp_buffer = 0; \ temp_length = 0; \ } \ return temp_buffer; static size_t ChWLen(const wchar_t *source) { size_t result = wcslen(source); if (!pass_ctls) { size_t adjust = 0; size_t n; const char *s; for (n = 0; n < result; ++n) { if (source[n] < 256 && (s = unctrl((chtype) source[n])) != 0) { adjust += (strlen(s) - 1); } } result += adjust; } return result; } static cchar_t * ChStr(const char *source) { TempBuffer(strlen(source), UChar(*source++)); } static cchar_t * ChWStr(const wchar_t *source) { TempBuffer(ChWLen(source), *source++); } static void legend(WINDOW *win, int level, Options state, wchar_t *buffer, int length) { const char *showstate; switch (state) { default: case oDefault: showstate = ""; break; case oMove: showstate = " (mvXXX)"; break; case oWindow: showstate = " (winXXX)"; break; case oMoveWindow: showstate = " (mvwinXXX)"; break; } wmove(win, 0, 0); wprintw(win, "The Strings/Chars displays should match. Enter any characters, except:\n"); wprintw(win, "down-arrow or ^N to repeat on next line, ^W for inner window, ESC to exit.\n"); wclrtoeol(win); wprintw(win, "Level %d,%s added %d characters <", level, showstate, length); waddwstr(win, buffer); waddstr(win, ">"); } static int ColOf(wchar_t *buffer, int length, int margin) { int n; int result; for (n = 0, result = margin + 1; n < length; ++n) { int ch = buffer[n]; switch (ch) { case '\n': /* actually newline should clear the remainder of the line * and move to the next line - but that seems a little awkward * in this example. */ case '\r': result = 0; break; case '\b': if (result > 0) --result; break; case '\t': result += (MY_TABSIZE - (result % MY_TABSIZE)); break; case '\177': result += 2; break; default: result += wcwidth((wchar_t) ch); if (ch < 32) ++result; break; } } return result; } static int ConvertCh(chtype source, cchar_t *target) { wchar_t tmp_wchar[2]; tmp_wchar[0] = (wchar_t) source; tmp_wchar[1] = 0; if (setcchar(target, tmp_wchar, A_NORMAL, 0, (void *) 0) == ERR) { beep(); return FALSE; } return TRUE; } static int MvWAddCh(WINDOW *win, int y, int x, chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = mvwadd_wch(win, y, x, &tmp_cchar); } else { code = mvwaddch(win, y, x, ch); } return code; } static int MvAddCh(int y, int x, chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = mvadd_wch(y, x, &tmp_cchar); } else { code = mvaddch(y, x, ch); } return code; } static int WAddCh(WINDOW *win, chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = wadd_wch(win, &tmp_cchar); } else { code = waddch(win, ch); } return code; } static int AddCh(chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = add_wch(&tmp_cchar); } else { code = addch(ch); } return code; } #define LEN(n) ((length - (n) > n_opt) ? n_opt : (length - (n))) static void test_add_wchstr(int level) { static bool first = TRUE; int ch; int limit; int row = 1; int col; int row2, col2; int length; wchar_t buffer[BUFSIZ]; WINDOW *look = 0; WINDOW *work = 0; WINDOW *show = 0; int margin = (2 * MY_TABSIZE) - 1; Options option = ((m_opt ? oMove : oDefault) | ((w_opt || (level > 0)) ? oWindow : oDefault)); if (first) { static char cmd[80]; setlocale(LC_ALL, ""); putenv(strcpy(cmd, "TABSIZE=8")); initscr(); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ keypad(stdscr, TRUE); /* * Show the characters added in color, to distinguish from those that * are shifted. */ if (has_colors()) { start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); } } limit = LINES - 5; if (level > 0) { look = newwin(limit, COLS - (2 * (level - 1)), 0, level - 1); work = newwin(limit - 2, COLS - (2 * level), 1, level); show = newwin(4, COLS, limit + 1, 0); box(look, 0, 0); wnoutrefresh(look); limit -= 2; } else { work = stdscr; show = derwin(stdscr, 4, COLS, limit + 1, 0); } keypad(work, TRUE); for (col = margin + 1; col < COLS; col += MY_TABSIZE) MvWVLine(work, row, col, '.', limit - 2); MvWVLine(work, row, margin, ACS_VLINE, limit - 2); MvWVLine(work, row, margin + 1, ACS_VLINE, limit - 2); limit /= 2; (void) mvwadd_wchstr(work, 1, 2, ChStr("String")); (void) mvwadd_wchstr(work, limit + 1, 2, ChStr("Chars")); wnoutrefresh(work); buffer[length = 0] = '\0'; legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); if (has_colors()) { wbkgdset(work, (chtype) (COLOR_PAIR(1) | ' ')); } while ((ch = read_linedata(work)) != ERR && !isQUIT(ch)) { wmove(work, row, margin + 1); switch (ch) { case key_RECUR: test_add_wchstr(level + 1); if (look) touchwin(look); touchwin(work); touchwin(show); if (look) wnoutrefresh(look); wnoutrefresh(work); wnoutrefresh(show); doupdate(); break; case key_NEWLINE: if (row < limit) { ++row; /* put the whole string in, all at once */ col2 = margin + 1; switch (option) { case oDefault: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (move(row, col2) != ERR) { AddNStr(ChWStr(buffer + col), LEN(col)); } } } else { if (move(row, col2) != ERR) { AddStr(ChWStr(buffer)); } } break; case oMove: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvAddNStr(row, col2, ChWStr(buffer + col), LEN(col)); } } else { MvAddStr(row, col2, ChWStr(buffer)); } break; case oWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (wmove(work, row, col2) != ERR) { WAddNStr(work, ChWStr(buffer + col), LEN(col)); } } } else { if (wmove(work, row, col2) != ERR) { WAddStr(work, ChWStr(buffer)); } } break; case oMoveWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvWAddNStr(work, row, col2, ChWStr(buffer + col), LEN(col)); } } else { MvWAddStr(work, row, col2, ChWStr(buffer)); } break; } /* do the corresponding single-character add */ row2 = limit + row; for (col = 0; col < length; ++col) { col2 = ColOf(buffer, col, margin); switch (option) { case oDefault: if (move(row2, col2) != ERR) { AddCh((chtype) buffer[col]); } break; case oMove: MvAddCh(row2, col2, (chtype) buffer[col]); break; case oWindow: if (wmove(work, row2, col2) != ERR) { WAddCh(work, (chtype) buffer[col]); } break; case oMoveWindow: MvWAddCh(work, row2, col2, (chtype) buffer[col]); break; } } } else { beep(); } break; default: buffer[length++] = (wchar_t) ch; buffer[length] = '\0'; /* put the string in, one character at a time */ col = ColOf(buffer, length - 1, margin); switch (option) { case oDefault: if (move(row, col) != ERR) { AddStr(ChWStr(buffer + length - 1)); } break; case oMove: MvAddStr(row, col, ChWStr(buffer + length - 1)); break; case oWindow: if (wmove(work, row, col) != ERR) { WAddStr(work, ChWStr(buffer + length - 1)); } break; case oMoveWindow: MvWAddStr(work, row, col, ChWStr(buffer + length - 1)); break; } /* do the corresponding single-character add */ switch (option) { case oDefault: if (move(limit + row, col) != ERR) { AddCh((chtype) ch); } break; case oMove: MvAddCh(limit + row, col, (chtype) ch); break; case oWindow: if (wmove(work, limit + row, col) != ERR) { WAddCh(work, (chtype) ch); } break; case oMoveWindow: MvWAddCh(work, limit + row, col, (chtype) ch); break; } wnoutrefresh(work); legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); break; } } delwin(show); if (level > 0) { delwin(work); delwin(look); } } static void usage(void) { static const char *tbl[] = { "Usage: test_add_wchstr [options]" ,"" ,"Options:" ," -f FILE read data from given file" ," -n NUM limit string-adds to NUM bytes on ^N replay" ," -m perform wmove/move separately from add-functions" ," -p pass-thru control characters without using unctrl()" ," -w use window-parameter even when stdscr would be implied" }; unsigned n; for (n = 0; n < SIZEOF(tbl); ++n) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int ch; setlocale(LC_ALL, ""); while ((ch = getopt(argc, argv, "f:mn:pw")) != -1) { switch (ch) { case 'f': init_linedata(optarg); break; case 'm': m_opt = TRUE; break; case 'n': n_opt = atoi(optarg); if (n_opt == 0) n_opt = -1; break; case 'p': pass_ctls = TRUE; break; case 'w': w_opt = TRUE; break; default: usage(); break; } } if (optind < argc) usage(); test_add_wchstr(0); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the wide-ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/ncurses_tst.hin0000644000175100001440000000560706470313015016516 0ustar tomusers/**************************************************************************** * Copyright (c) 1998 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1998 * ****************************************************************************/ /* * $Id: ncurses_tst.hin,v 1.2 1998/02/11 12:14:05 tom Exp $ * * This is a template-file used to generate the "ncurses_cfg.h" file. * * Rather than list every definition, the configuration script substitutes * the definitions that it finds using 'sed'. You need a patch (971222) * to autoconf 2.12 to do this. */ #ifndef NC_CONFIG_H #define NC_CONFIG_H @DEFS@ /* The C compiler may not treat these properly but C++ has to */ #ifdef __cplusplus #undef const #undef inline #else #if defined(lint) || defined(TRACE) #undef inline #define inline /* nothing */ #endif #endif #endif /* NC_CONFIG_H */ ncurses-6.0-20160213/test/demo_defkey.c0000644000175100001440000001666412221650751016070 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: demo_defkey.c,v 1.22 2013/09/28 22:02:17 tom Exp $ * * Demonstrate the define_key() function. * Thomas Dickey - 2002/11/23 */ #include #if defined(NCURSES_VERSION) && NCURSES_EXT_FUNCS #define MY_LOGFILE "demo_defkey.log" /* * Log the most recently-written line to our logfile */ static void log_last_line(WINDOW *win) { FILE *fp; int y, x, n; char temp[256]; if ((fp = fopen(MY_LOGFILE, "a")) != 0) { int need = sizeof(temp) - 1; if (need > COLS) need = COLS; getyx(win, y, x); wmove(win, y - 1, 0); n = winnstr(win, temp, need); while (n-- > 0) { if (isspace(UChar(temp[n]))) temp[n] = '\0'; else break; } wmove(win, y, x); fprintf(fp, "%s\n", temp); fclose(fp); } } /* * Convert a character to visible form. */ static char * visichar(int ch) { static char temp[10]; ch = UChar(ch); assert(ch >= 0 && ch < 256); if (ch == '\\') { strcpy(temp, "\\\\"); } else if (ch == '\033') { strcpy(temp, "\\E"); } else if (ch < ' ') { sprintf(temp, "\\%03o", ch); } else if (ch >= 127) { sprintf(temp, "\\%03o", ch); } else { sprintf(temp, "%c", ch); } return temp; } /* * Convert a string to visible form. */ static char * visible(const char *string) { char *result = 0; size_t need = 1; int pass; int n; if (string != 0 && *string != '\0') { for (pass = 0; pass < 2; ++pass) { for (n = 0; string[n] != '\0'; ++n) { char temp[80]; strncpy(temp, visichar(string[n]), sizeof(temp) - 2); if (pass) strcat(result, temp); else need += strlen(temp); } if (!pass) result = typeCalloc(char, need); } } else { result = typeCalloc(char, (size_t) 1); } return result; } static void really_define_key(WINDOW *win, const char *new_string, int code) { int rc; const char *code_name = keyname(code); char *old_string; char *vis_string = 0; char temp[80]; if (code_name == 0) { sprintf(temp, "Keycode %d", code); code_name = temp; } if ((old_string = keybound(code, 0)) != 0) { wprintw(win, "%s is %s\n", code_name, vis_string = visible(old_string)); } else { wprintw(win, "%s is not bound\n", code_name); } log_last_line(win); if (vis_string != 0) { free(vis_string); vis_string = 0; } vis_string = visible(new_string); if ((rc = key_defined(new_string)) > 0) { wprintw(win, "%s was bound to %s\n", vis_string, keyname(rc)); log_last_line(win); } else if (new_string != 0 && rc < 0) { wprintw(win, "%s conflicts with longer strings\n", vis_string); log_last_line(win); } rc = define_key(new_string, code); if (rc == ERR) { wprintw(win, "%s unchanged\n", code_name); log_last_line(win); } else if (new_string != 0) { wprintw(win, "%s is now bound to %s\n", vis_string, code_name); log_last_line(win); } else if (old_string != 0) { wprintw(win, "%s deleted\n", code_name); log_last_line(win); } if (vis_string != 0) free(vis_string); if (old_string != 0) free(old_string); } static void duplicate(WINDOW *win, NCURSES_CONST char *name, int code) { char *value = tigetstr(name); if (value != 0) { const char *prefix = 0; char temp[BUFSIZ]; if (!strncmp(value, "\033[", (size_t) 2)) { prefix = "\033O"; } else if (!strncmp(value, "\033O", (size_t) 2)) { prefix = "\033["; } if (prefix != 0) { sprintf(temp, "%s%s", prefix, value + 2); really_define_key(win, temp, code); } } } static void redefine(WINDOW *win, char *string, int code) { really_define_key(win, string, code); } static void remove_definition(WINDOW *win, int code) { really_define_key(win, 0, code); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { char *fkeys[12]; int n; int ch; WINDOW *win; unlink(MY_LOGFILE); initscr(); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ printw("This demo is best on xterm: it reverses the definitions for f1-f12,\n"); printw("adds duplicate definitions for cursor application and normal modes,\n"); printw("and removes any definitions for the mini keypad. Type any of those:\n"); refresh(); win = newwin(LINES - 3, COLS, 3, 0); scrollok(win, TRUE); keypad(win, TRUE); wmove(win, 0, 0); /* we do the define_key() calls after keypad(), since the first call to * keypad() initializes the corresponding data. */ for (n = 0; n < 12; ++n) { char name[10]; sprintf(name, "kf%d", n + 1); fkeys[n] = tigetstr(name); } for (n = 0; n < 12; ++n) { redefine(win, fkeys[11 - n], KEY_F(n + 1)); } duplicate(win, "kcub1", KEY_LEFT); duplicate(win, "kcuu1", KEY_UP); duplicate(win, "kcud1", KEY_DOWN); duplicate(win, "kcuf1", KEY_RIGHT); remove_definition(win, KEY_A1); remove_definition(win, KEY_A3); remove_definition(win, KEY_B2); remove_definition(win, KEY_C1); remove_definition(win, KEY_C3); really_define_key(win, "\033O", 1023); while ((ch = wgetch(win)) != ERR) { const char *name = keyname(ch); wprintw(win, "Keycode %d, name %s\n", ch, name != 0 ? name : ""); log_last_line(win); wclrtoeol(win); if (ch == 'q') break; } endwin(); ExitProgram(EXIT_FAILURE); } #else int main(void) { printf("This program requires the ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/xterm-16color.dat0000644000175100001440000000576110422521260016552 0ustar tomusers############################################################################## # Copyright (c) 2004,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: xterm-16color.dat,v 1.2 2006/04/22 21:40:00 tom Exp $ # This illustrates the predefined colors for XFree86 xterm's "xterm-16color". # If you set $TERM to "xterm-88color" (and have xterm compiled to support the # 88-color or 256-color feature), you can use the ncurses 'd' screen to # manipulate the colors shown in the screen. The 'd' screen is limited to # the first 16 colors, and xterm happens to use the same first 16 colors in # the extended color models that support initc. # # The colors shown are for xterm patch #189. scale:255 0: 0 0 0 black 1: 205 0 0 red3 2: 0 205 0 green3 3: 205 205 0 yellow3 4: 30 144 255 DodgerBlue1 5: 205 0 205 magenta3 6: 0 205 205 cyan3 7: 229 229 229 gray90 8: 127 127 127 gray50 9: 255 0 0 red 10: 0 255 0 green 11: 255 255 0 yellow 12: 99 184 255 SteelBlue1 13: 255 0 255 magenta 14: 0 255 255 cyan 15: 255 255 255 white ncurses-6.0-20160213/test/hashtest.c0000644000175100001440000001512312137025771015431 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * hashtest.c -- test hash mapping * * Generate timing statistics for vertical-motion optimization. * * $Id: hashtest.c,v 1.32 2013/04/27 19:50:17 tom Exp $ */ #include #define LO_CHAR ' ' #define HI_CHAR '~' static bool continuous = FALSE; static bool reverse_loops = FALSE; static bool single_step = FALSE; static bool extend_corner = FALSE; static int foot_lines = 0; static int head_lines = 0; static void cleanup(void) { move(LINES - 1, 0); clrtoeol(); refresh(); endwin(); } static void finish(int sig GCC_UNUSED) { cleanup(); ExitProgram(EXIT_FAILURE); } static void genlines(int base) { int i, j; #if USE_TRACE if (base == 'a') Trace(("Resetting screen")); else Trace(("Painting `%c' screen", base)); #endif /* Do this so writes to lower-right corner don't cause a spurious * scrolling operation. This _shouldn't_ break the scrolling * optimization, since that's computed in the refresh() call. */ scrollok(stdscr, FALSE); move(0, 0); for (i = 0; i < head_lines; i++) for (j = 0; j < COLS; j++) addch(UChar((j % 8 == 0) ? ('A' + j / 8) : '-')); move(head_lines, 0); for (i = head_lines; i < LINES - foot_lines; i++) { chtype c = (chtype) ((base - LO_CHAR + i) % (HI_CHAR - LO_CHAR + 1) + LO_CHAR); int hi = (extend_corner || (i < LINES - 1)) ? COLS : COLS - 1; for (j = 0; j < hi; j++) addch(c); } for (i = LINES - foot_lines; i < LINES; i++) { move(i, 0); for (j = 0; j < (extend_corner ? COLS : COLS - 1); j++) addch(UChar((j % 8 == 0) ? ('A' + j / 8) : '-')); } scrollok(stdscr, TRUE); if (single_step) { move(LINES - 1, 0); getch(); } else refresh(); } static void one_cycle(int ch) { if (continuous) { genlines(ch); } else if (ch != 'a') { genlines('a'); genlines(ch); } } static void run_test(bool optimized GCC_UNUSED) { char ch; int lo = continuous ? LO_CHAR : 'a' - LINES; int hi = continuous ? HI_CHAR : 'a' + LINES; if (lo < LO_CHAR) lo = LO_CHAR; if (hi > HI_CHAR) hi = HI_CHAR; #if defined(TRACE) || defined(NCURSES_TEST) if (optimized) { Trace(("With hash mapping")); _nc_optimize_enable |= OPTIMIZE_HASHMAP; } else { Trace(("Without hash mapping")); _nc_optimize_enable &= ~OPTIMIZE_HASHMAP; } #endif if (reverse_loops) for (ch = (char) hi; ch >= lo; ch--) one_cycle(ch); else for (ch = (char) lo; ch <= hi; ch++) one_cycle(ch); } static void usage(void) { static const char *const tbl[] = { "Usage: hashtest [options]" ,"" ,"Options:" ," -c continuous (don't reset between refresh's)" ," -f num leave 'num' lines constant for footer" ," -h num leave 'num' lines constant for header" ," -l num repeat test 'num' times" ," -n test the normal optimizer" ," -o test the hashed optimizer" ," -r reverse the loops" ," -s single-step" ," -x assume lower-right corner extension" }; size_t n; for (n = 0; n < SIZEOF(tbl); n++) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int c; int test_loops = 1; int test_normal = FALSE; int test_optimize = FALSE; setlocale(LC_ALL, ""); while ((c = getopt(argc, argv, "cf:h:l:norsx")) != -1) { switch (c) { case 'c': continuous = TRUE; break; case 'f': foot_lines = atoi(optarg); break; case 'h': head_lines = atoi(optarg); break; case 'l': test_loops = atoi(optarg); assert(test_loops >= 0); break; case 'n': test_normal = TRUE; break; case 'o': test_optimize = TRUE; break; case 'r': reverse_loops = TRUE; break; case 's': single_step = TRUE; break; case 'x': extend_corner = TRUE; break; default: usage(); } } if (!test_normal && !test_optimize) { test_normal = TRUE; test_optimize = TRUE; } #if USE_TRACE trace(TRACE_TIMES); #endif CATCHALL(finish); /* arrange interrupts to terminate */ (void) initscr(); /* initialize the curses library */ keypad(stdscr, TRUE); /* enable keyboard mapping */ (void) nonl(); /* tell curses not to do NL->CR/NL on output */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ scrollok(stdscr, TRUE); while (test_loops-- > 0) { if (test_normal) run_test(FALSE); if (test_optimize) run_test(TRUE); } cleanup(); /* we're done */ ExitProgram(EXIT_SUCCESS); } /* hashtest.c ends here */ ncurses-6.0-20160213/test/knight.c0000644000175100001440000004504712107761644015105 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Knight's Tour - a brain game * * The original of this game was anonymous. It had an unbelievably bogus * interface, you actually had to enter square coordinates! Redesign by * Eric S. Raymond July 22 1995. Mouse support * added September 20th 1995. * * $Id: knight.c,v 1.36 2013/02/16 19:53:08 tom Exp $ */ #include /* board size */ #define BDEPTH 8 #define BWIDTH 8 /* where to start the instructions */ #define INSTRY 2 #define INSTRX 35 /* corner of board */ #define BOARDY 2 #define BOARDX 0 /* notification line */ #define NOTIFYY 21 /* virtual color values */ #define TRAIL_COLOR 1 #define PLUS_COLOR 2 #define MINUS_COLOR 3 #define CX(x) (2 + 4 * (x)) #define CY(y) (1 + 2 * (y)) #define cellmove(y, x) wmove(boardwin, CY(y), CX(x)) #define CXINV(x) (((x) - 1) / 4) #define CYINV(y) (((y) - 2) / 2) typedef struct { short x, y; } cell; static WINDOW *boardwin; /* the board window */ static WINDOW *helpwin; /* the help window */ static WINDOW *msgwin; /* the message window */ static cell history[BDEPTH * BWIDTH + 1]; /* choice history */ static chtype minus = '-'; /* possible-move character */ static chtype oldch; static chtype plus = '+'; /* cursor hot-spot character */ static chtype trail = '#'; /* trail character */ static int movecount; /* count of moves so far */ static int trialcount; /* count of trials so far */ static short board[BDEPTH][BWIDTH]; /* the squares */ /* *INDENT-OFF* */ static const struct { int y; int x; } offsets[] = { { 2, 1 }, { 1, 2 }, { -1, 2 }, { -2, 1 }, { -2, -1 }, { -1, -2 }, { 1, -2 }, { 2, -1 }, }; /* *INDENT-ON* */ static void init_program(void) { setlocale(LC_ALL, ""); srand((unsigned) getpid()); initscr(); cbreak(); /* immediate char return */ noecho(); /* no immediate echo */ boardwin = newwin(BDEPTH * 2 + 1, BWIDTH * 4 + 1, BOARDY, BOARDX); helpwin = newwin(0, 0, INSTRY, INSTRX); msgwin = newwin(1, INSTRX - 1, NOTIFYY, 0); scrollok(msgwin, TRUE); keypad(boardwin, TRUE); if (has_colors()) { int bg = COLOR_BLACK; start_color(); #if HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) bg = -1; #endif (void) init_pair(TRAIL_COLOR, (short) COLOR_CYAN, (short) bg); (void) init_pair(PLUS_COLOR, (short) COLOR_RED, (short) bg); (void) init_pair(MINUS_COLOR, (short) COLOR_GREEN, (short) bg); trail |= (chtype) COLOR_PAIR(TRAIL_COLOR); plus |= (chtype) COLOR_PAIR(PLUS_COLOR); minus |= (chtype) COLOR_PAIR(MINUS_COLOR); } #ifdef NCURSES_MOUSE_VERSION (void) mousemask(BUTTON1_CLICKED, (mmask_t *) NULL); #endif /* NCURSES_MOUSE_VERSION */ #if defined(PDCURSES) mouse_set(BUTTON1_RELEASED); #endif oldch = minus; } static void help1(void) /* game explanation -- initial help screen */ { (void) waddstr(helpwin, "Knight's move is a solitaire puzzle. Your\n"); (void) waddstr(helpwin, "objective is to visit each square of the \n"); (void) waddstr(helpwin, "chessboard exactly once by making knight's\n"); (void) waddstr(helpwin, "moves (one square right or left followed \n"); (void) waddstr(helpwin, "by two squares up or down, or two squares \n"); (void) waddstr(helpwin, "right or left followed by one square up or\n"); (void) waddstr(helpwin, "down). You may start anywhere.\n\n"); (void) waddstr(helpwin, "Use arrow keys to move the cursor around.\n"); (void) waddstr(helpwin, "When you want to move your knight to the \n"); (void) waddstr(helpwin, "cursor location, press or Enter.\n"); (void) waddstr(helpwin, "Illegal moves will be rejected with an \n"); (void) waddstr(helpwin, "audible beep.\n\n"); (void) waddstr(helpwin, "The program will detect if you solve the\n"); (void) waddstr(helpwin, "puzzle; also inform you when you run out\n"); (void) waddstr(helpwin, "of legal moves.\n\n"); MvWAddStr(helpwin, NOTIFYY - INSTRY, 0, "Press `?' to go to keystroke help."); } static void help2(void) /* keystroke help screen */ { (void) waddstr(helpwin, "Possible moves are shown with `-'.\n\n"); (void) waddstr(helpwin, "You can move around with the arrow keys or\n"); (void) waddstr(helpwin, "with the rogue/hack movement keys. Other\n"); (void) waddstr(helpwin, "commands allow you to undo moves or redraw.\n"); (void) waddstr(helpwin, "Your mouse may work; try left-button to\n"); (void) waddstr(helpwin, "move to the square under the pointer.\n\n"); (void) waddstr(helpwin, "x,q -- exit y k u 7 8 9\n"); (void) waddstr(helpwin, "r -- redraw screen \\|/ \\|/ \n"); (void) waddstr(helpwin, "bksp -- undo move h-+-l 4-+-6\n"); (void) waddstr(helpwin, "a -- autojump /|\\ /|\\ \n"); (void) waddstr(helpwin, " b j n 1 2 3\n"); (void) waddstr(helpwin, "\nYou can place your knight on the selected\n"); (void) waddstr(helpwin, "square with spacebar, Enter, or the keypad\n"); (void) waddstr(helpwin, "center key. Use F/B to review the path.\n"); MvWAddStr(helpwin, NOTIFYY - INSTRY, 0, "Press `?' to go to game explanation"); } static void show_help(bool * keyhelp) { werase(helpwin); if (*keyhelp) { help1(); *keyhelp = FALSE; } else { help2(); *keyhelp = TRUE; } wrefresh(helpwin); } static bool chksqr(int r1, int c1) { if ((r1 < 0) || (r1 > BDEPTH - 1)) return (FALSE); if ((c1 < 0) || (c1 > BWIDTH - 1)) return (FALSE); return ((!board[r1][c1]) ? TRUE : FALSE); } static bool chkmoves(int rw, int col) /* check to see if valid moves are available */ { unsigned n; for (n = 0; n < SIZEOF(offsets); n++) if (chksqr(rw + offsets[n].y, col + offsets[n].x)) return (TRUE); return (FALSE); } static void dosquares(void) { int i, j; MvAddStr(0, 20, "KNIGHT'S MOVE -- a logical solitaire"); move(BOARDY, BOARDX); waddch(boardwin, ACS_ULCORNER); for (j = 0; j < 7; j++) { waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_TTEE); } waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_URCORNER); for (i = 1; i < BDEPTH; i++) { move(BOARDY + i * 2 - 1, BOARDX); waddch(boardwin, ACS_VLINE); for (j = 0; j < BWIDTH; j++) { waddch(boardwin, ' '); waddch(boardwin, ' '); waddch(boardwin, ' '); waddch(boardwin, ACS_VLINE); } move(BOARDY + i * 2, BOARDX); waddch(boardwin, ACS_LTEE); for (j = 0; j < BWIDTH - 1; j++) { waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_PLUS); } waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_RTEE); } move(BOARDY + i * 2 - 1, BOARDX); waddch(boardwin, ACS_VLINE); for (j = 0; j < BWIDTH; j++) { waddch(boardwin, ' '); waddch(boardwin, ' '); waddch(boardwin, ' '); waddch(boardwin, ACS_VLINE); } move(BOARDY + i * 2, BOARDX); waddch(boardwin, ACS_LLCORNER); for (j = 0; j < BWIDTH - 1; j++) { waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_BTEE); } waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_HLINE); waddch(boardwin, ACS_LRCORNER); } static void mark_possibles(int prow, int pcol, chtype mark) { unsigned n; for (n = 0; n < SIZEOF(offsets); n++) { if (chksqr(prow + offsets[n].y, pcol + offsets[n].x)) { cellmove(prow + offsets[n].y, pcol + offsets[n].x); waddch(boardwin, mark); } } } static bool find_next_move(int *y, int *x) { unsigned j, k; int found = -1; int first = -1; int next = -1; int oldy, oldx; int newy, newx; bool result = FALSE; if (movecount > 1) { oldy = history[movecount - 1].y; oldx = history[movecount - 1].x; for (j = 0; j < SIZEOF(offsets) * 2; j++) { k = j % SIZEOF(offsets); newy = oldy + offsets[k].y; newx = oldx + offsets[k].x; if (chksqr(newy, newx)) { if (first < 0) first = (int) k; if (newy == *y && newx == *x) { found = (int) k; } else if (found >= 0) { next = (int) k; break; } } } if (found < 0) next = first; if (next >= 0) { *y = oldy + offsets[next].y; *x = oldx + offsets[next].x; } result = TRUE; } return result; } static void count_next_moves(int y, int x) { int count = 0; unsigned j; wprintw(msgwin, "\nMove %d", movecount); for (j = 0; j < SIZEOF(offsets); j++) { int newy = y + offsets[j].y; int newx = x + offsets[j].x; if (chksqr(newy, newx)) { ++count; } } wprintw(msgwin, ", gives %d choices", count); wclrtoeol(msgwin); } static void unmarkcell(int row, int column) { cellmove(row, column); waddch(boardwin, '\b'); waddch(boardwin, ' '); waddch(boardwin, minus); waddch(boardwin, ' '); } static void markcell(chtype tchar, int row, int column) { cellmove(row, column); waddch(boardwin, '\b'); waddch(boardwin, tchar); waddch(boardwin, tchar); waddch(boardwin, tchar); } static void drawmove(chtype tchar, int oldy, int oldx, int row, int column) /* place the stars, update board & currents */ { if (movecount <= 1) { int i, j; for (i = 0; i < BDEPTH; i++) { for (j = 0; j < BWIDTH; j++) { if (movecount == 0) { unmarkcell(i, j); } else { cellmove(i, j); if (winch(boardwin) == minus) waddch(boardwin, movecount ? ' ' : minus); } } } } else { markcell(tchar, oldy, oldx); mark_possibles(oldy, oldx, ' '); } if (row >= 0 && column >= 0) { markcell(trail, row, column); mark_possibles(row, column, minus); board[row][column] = TRUE; } wprintw(msgwin, "\nMove %d", movecount); if (trialcount != movecount) wprintw(msgwin, " (%d tries)", trialcount); wclrtoeol(msgwin); } static int iabs(int num) { if (num < 0) return (-num); else return (num); } static bool evalmove(int row, int column) /* evaluate move */ { if (movecount == 1) return (TRUE); else if (board[row][column] == TRUE) { waddstr(msgwin, "\nYou've already been there."); return (FALSE); } else { int rdif = iabs(row - history[movecount - 1].y); int cdif = iabs(column - history[movecount - 1].x); if (!((rdif == 1) && (cdif == 2)) && !((rdif == 2) && (cdif == 1))) { waddstr(msgwin, "\nThat's not a legal knight's move."); return (FALSE); } } return (TRUE); } static int completed(void) { int i, j, count = 0; for (i = 0; i < BDEPTH; i++) for (j = 0; j < BWIDTH; j++) if (board[i][j] != 0) count += 1; return (count == (BWIDTH * BDEPTH) ? -1 : count); } static void no_previous_move(void) { waddstr(msgwin, "\nNo previous move."); beep(); } static void play(void) /* play the game */ { bool keyhelp; /* TRUE if keystroke help is up */ int i, j, count; int lastcol = 0; /* last location visited */ int lastrow = 0; int ny = 0, nx = 0; int review = 0; /* review history */ int rw = 0, col = 0; /* current row and column */ do { /* clear screen and draw board */ werase(boardwin); werase(helpwin); werase(msgwin); dosquares(); help1(); wnoutrefresh(stdscr); wnoutrefresh(helpwin); wnoutrefresh(msgwin); wnoutrefresh(boardwin); doupdate(); movecount = 0; for (i = 0; i < BDEPTH; i++) { for (j = 0; j < BWIDTH; j++) { board[i][j] = FALSE; unmarkcell(i, j); } } memset(history, 0, sizeof(history)); history[0].y = history[0].x = -1; history[1].y = history[1].x = -1; lastrow = lastcol = -2; movecount = 1; trialcount = 1; keyhelp = FALSE; show_help(&keyhelp); for (;;) { if (rw != lastrow || col != lastcol) { if (lastrow >= 0 && lastcol >= 0) { cellmove(lastrow, lastcol); if (board[lastrow][lastcol]) waddch(boardwin, trail); else waddch(boardwin, oldch); } cellmove(rw, col); oldch = winch(boardwin); lastrow = rw; lastcol = col; } cellmove(rw, col); waddch(boardwin, plus); cellmove(rw, col); wrefresh(msgwin); switch (wgetch(boardwin)) { case 'k': case '8': case KEY_UP: ny = rw + BDEPTH - 1; nx = col; break; case 'j': case '2': case KEY_DOWN: ny = rw + 1; nx = col; break; case 'h': case '4': case KEY_LEFT: ny = rw; nx = col + BWIDTH - 1; break; case 'l': case '6': case KEY_RIGHT: ny = rw; nx = col + 1; break; case 'y': case '7': case KEY_A1: ny = rw + BDEPTH - 1; nx = col + BWIDTH - 1; break; case 'b': case '1': case KEY_C1: ny = rw + 1; nx = col + BWIDTH - 1; break; case 'u': case '9': case KEY_A3: ny = rw + BDEPTH - 1; nx = col + 1; break; case 'n': case '3': case KEY_C3: ny = rw + 1; nx = col + 1; break; #ifdef KEY_MOUSE case KEY_MOUSE: #ifdef NCURSES_MOUSE_VERSION { MEVENT myevent; getmouse(&myevent); if (myevent.y >= CY(0) && myevent.y <= CY(BDEPTH) && myevent.x >= CX(0) && myevent.x <= CX(BWIDTH)) { nx = CXINV(myevent.x); ny = CYINV(myevent.y); ungetch('\n'); break; } else { beep(); continue; } } #endif /* NCURSES_MOUSE_VERSION */ #ifdef PDCURSES { int test_y, test_x; request_mouse_pos(); test_y = MOUSE_Y_POS + 0; test_x = MOUSE_X_POS + 1; if (test_y >= CY(0) && test_y <= CY(BDEPTH) && test_x >= CX(0) && test_x <= CX(BWIDTH)) { ny = CYINV(test_y); nx = CXINV(test_x); wmove(helpwin, 0, 0); wrefresh(helpwin); ungetch('\n'); } break; } #endif /* PDCURSES */ #endif /* KEY_MOUSE */ case KEY_B2: case '\n': case ' ': review = 0; if (evalmove(rw, col)) { drawmove(trail, history[movecount - 1].y, history[movecount - 1].x, rw, col); history[movecount].y = (short) rw; history[movecount].x = (short) col; movecount++; trialcount++; if (!chkmoves(rw, col)) { if (completed() < 0) { waddstr(msgwin, "\nYou won."); } else { waddstr(msgwin, "\nNo further moves are possible."); } } } else { beep(); } break; case KEY_UNDO: case KEY_BACKSPACE: case '\b': review = 0; if (movecount <= 0) { no_previous_move(); } else if (movecount <= 1) { ny = history[movecount].y; nx = history[movecount].x; if (nx < 0 || ny < 0) { ny = (lastrow >= 0) ? lastrow : 0; nx = (lastcol >= 0) ? lastcol : 0; } movecount = 0; board[ny][nx] = FALSE; oldch = minus; drawmove(' ', ny, nx, -1, -1); movecount = 1; trialcount = 1; no_previous_move(); } else { int oldy = history[movecount - 1].y; int oldx = history[movecount - 1].x; if (!board[rw][col]) { cellmove(rw, col); waddch(boardwin, ' '); } board[oldy][oldx] = FALSE; --movecount; ny = history[movecount - 1].y; nx = history[movecount - 1].x; if (nx < 0 || ny < 0) { ny = oldy; nx = oldx; } drawmove(' ', oldy, oldx, ny, nx); /* avoid problems if we just changed the current cell */ cellmove(lastrow, lastcol); oldch = winch(boardwin); } break; case 'a': nx = col; ny = rw; if (find_next_move(&ny, &nx)) count_next_moves(ny, nx); else beep(); break; case 'F': if (review > 0) { review--; ny = history[movecount - review - 1].y; nx = history[movecount - review - 1].x; } else { beep(); } break; case 'B': if (review < movecount - 2) { review++; ny = history[movecount - review - 1].y; nx = history[movecount - review - 1].x; } else { beep(); } break; case KEY_REDO: case '\f': case 'r': clearok(curscr, TRUE); wnoutrefresh(stdscr); wnoutrefresh(boardwin); wnoutrefresh(msgwin); wnoutrefresh(helpwin); doupdate(); break; case 'q': case 'x': goto dropout; case '?': show_help(&keyhelp); break; default: beep(); break; } col = nx % BWIDTH; rw = ny % BDEPTH; } dropout: if ((count = completed()) < 0) wprintw(msgwin, "\nYou won. Care to try again? "); else wprintw(msgwin, "\n%d squares filled. Try again? ", count); wclrtoeol(msgwin); } while (tolower(wgetch(msgwin)) == 'y'); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { init_program(); play(); endwin(); ExitProgram(EXIT_SUCCESS); } /* knight.c ends here */ ncurses-6.0-20160213/test/aclocal.m40000644000175100001440000034425512633152234015311 0ustar tomusersdnl*************************************************************************** dnl Copyright (c) 2003-2014,2015 Free Software Foundation, Inc. * dnl * dnl Permission is hereby granted, free of charge, to any person obtaining a * dnl copy of this software and associated documentation files (the * dnl "Software"), to deal in the Software without restriction, including * dnl without limitation the rights to use, copy, modify, merge, publish, * dnl distribute, distribute with modifications, sublicense, and/or sell * dnl copies of the Software, and to permit persons to whom the Software is * dnl furnished to do so, subject to the following conditions: * dnl * dnl The above copyright notice and this permission notice shall be included * dnl in all copies or substantial portions of the Software. * dnl * dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. * dnl * dnl Except as contained in this notice, the name(s) of the above copyright * dnl holders shall not be used in advertising or otherwise to promote the * dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl dnl $Id: aclocal.m4,v 1.124 2015/12/13 02:14:52 tom Exp $ dnl dnl Author: Thomas E. Dickey dnl dnl Macros used in NCURSES test programs auto-configuration script. dnl dnl These macros are maintained separately from NCURSES. The copyright on dnl this file applies to the aggregation of macros and does not affect use of dnl these macros in other applications. dnl dnl See http://invisible-island.net/autoconf/ for additional information. dnl dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl CF_ACVERSION_CHECK version: 5 updated: 2014/06/04 19:11:49 dnl ------------------ dnl Conditionally generate script according to whether we're using a given autoconf. dnl dnl $1 = version to compare against dnl $2 = code to use if AC_ACVERSION is at least as high as $1. dnl $3 = code to use if AC_ACVERSION is older than $1. define([CF_ACVERSION_CHECK], [ ifdef([AC_ACVERSION], ,[ifdef([AC_AUTOCONF_VERSION],[m4_copy([AC_AUTOCONF_VERSION],[AC_ACVERSION])],[m4_copy([m4_PACKAGE_VERSION],[AC_ACVERSION])])])dnl ifdef([m4_version_compare], [m4_if(m4_version_compare(m4_defn([AC_ACVERSION]), [$1]), -1, [$3], [$2])], [CF_ACVERSION_COMPARE( AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])), AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), AC_ACVERSION, [$2], [$3])])])dnl dnl --------------------------------------------------------------------------- dnl CF_ACVERSION_COMPARE version: 3 updated: 2012/10/03 18:39:53 dnl -------------------- dnl CF_ACVERSION_COMPARE(MAJOR1, MINOR1, TERNARY1, dnl MAJOR2, MINOR2, TERNARY2, dnl PRINTABLE2, not FOUND, FOUND) define([CF_ACVERSION_COMPARE], [ifelse(builtin([eval], [$2 < $5]), 1, [ifelse([$8], , ,[$8])], [ifelse([$9], , ,[$9])])])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_CFLAGS version: 12 updated: 2015/04/12 15:39:00 dnl ------------- dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS dnl The second parameter if given makes this macro verbose. dnl dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS, dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily dnl confused by the quotes (which require backslashes to keep them usable). AC_DEFUN([CF_ADD_CFLAGS], [ cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $1 do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,$cf_tst_cppflags) ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)]) CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)]) CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)]) EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi AC_SUBST(EXTRA_CPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_INCDIR version: 14 updated: 2015/05/25 20:53:04 dnl ------------- dnl Add an include-directory to $CPPFLAGS. Don't add /usr/include, since it's dnl redundant. We don't normally need to add -I/usr/local/include for gcc, dnl but old versions (and some misinstalled ones) need that. To make things dnl worse, gcc 3.x may give error messages if -I/usr/local/include is added to dnl the include-path). AC_DEFUN([CF_ADD_INCDIR], [ if test -n "$1" ; then for cf_add_incdir in $1 do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" AC_TRY_COMPILE([#include ], [printf("Hello")], [], [cf_have_incdir=yes]) CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then CF_VERBOSE(adding $cf_add_incdir to include-path) ifelse([$2],,CPPFLAGS,[$2])="$ifelse([$2],,CPPFLAGS,[$2]) -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIB version: 2 updated: 2010/06/02 05:03:05 dnl ---------- dnl Add a library, used to enforce consistency. dnl dnl $1 = library to add, without the "-l" dnl $2 = variable to update (default $LIBS) AC_DEFUN([CF_ADD_LIB],[CF_ADD_LIBS(-l$1,ifelse($2,,LIBS,[$2]))])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIBDIR version: 10 updated: 2015/04/18 08:56:57 dnl ------------- dnl Adds to the library-path dnl dnl Some machines have trouble with multiple -L options. dnl dnl $1 is the (list of) directory(s) to add dnl $2 is the optional name of the variable to update (default LDFLAGS) dnl AC_DEFUN([CF_ADD_LIBDIR], [ if test -n "$1" ; then for cf_add_libdir in $1 do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then CF_VERBOSE(adding $cf_add_libdir to library-path) ifelse([$2],,LDFLAGS,[$2])="-L$cf_add_libdir $ifelse([$2],,LDFLAGS,[$2])" fi fi done fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIBS version: 2 updated: 2014/07/13 14:33:27 dnl ----------- dnl Add one or more libraries, used to enforce consistency. Libraries are dnl prepended to an existing list, since their dependencies are assumed to dnl already exist in the list. dnl dnl $1 = libraries to add, with the "-l", etc. dnl $2 = variable to update (default $LIBS) AC_DEFUN([CF_ADD_LIBS],[ cf_add_libs="$1" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in [$]ifelse($2,,LIBS,[$2]) do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done ifelse($2,,LIBS,[$2])="$cf_add_libs" ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_LIB_AFTER version: 3 updated: 2013/07/09 21:27:22 dnl ---------------- dnl Add a given library after another, e.g., following the one it satisfies a dnl dependency for. dnl dnl $1 = the first library dnl $2 = its dependency AC_DEFUN([CF_ADD_LIB_AFTER],[ CF_VERBOSE(...before $LIBS) LIBS=`echo "$LIBS" | sed -e "s/[[ ]][[ ]]*/ /g" -e "s%$1 %$1 $2 %" -e 's% % %g'` CF_VERBOSE(...after $LIBS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_SUBDIR_PATH version: 4 updated: 2013/10/08 17:47:05 dnl ------------------ dnl Append to a search-list for a nonstandard header/lib-file dnl $1 = the variable to return as result dnl $2 = the package name dnl $3 = the subdirectory, e.g., bin, include or lib dnl $4 = the directory under which we will test for subdirectories dnl $5 = a directory that we do not want $4 to match AC_DEFUN([CF_ADD_SUBDIR_PATH], [ test "x$4" != "x$5" && \ test -d "$4" && \ ifelse([$5],NONE,,[(test -z "$5" || test x$5 = xNONE || test "x$4" != "x$5") &&]) { test -n "$verbose" && echo " ... testing for $3-directories under $4" test -d $4/$3 && $1="[$]$1 $4/$3" test -d $4/$3/$2 && $1="[$]$1 $4/$3/$2" test -d $4/$3/$2/$3 && $1="[$]$1 $4/$3/$2/$3" test -d $4/$2/$3 && $1="[$]$1 $4/$2/$3" test -d $4/$2/$3/$2 && $1="[$]$1 $4/$2/$3/$2" } ])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31 dnl -------------- dnl Allow user to disable a normally-on option. AC_DEFUN([CF_ARG_DISABLE], [CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_ENABLE version: 3 updated: 1999/03/30 17:24:31 dnl ------------- dnl Allow user to enable a normally-off option. AC_DEFUN([CF_ARG_ENABLE], [CF_ARG_OPTION($1,[$2],[$3],[$4],no)])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_OPTION version: 5 updated: 2015/05/10 19:52:14 dnl ------------- dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus dnl values. dnl dnl Parameters: dnl $1 = option name dnl $2 = help-string dnl $3 = action to perform if option is not default dnl $4 = action if perform if option is default dnl $5 = default option value (either 'yes' or 'no') AC_DEFUN([CF_ARG_OPTION], [AC_ARG_ENABLE([$1],[$2],[test "$enableval" != ifelse([$5],no,yes,no) && enableval=ifelse([$5],no,no,yes) if test "$enableval" != "$5" ; then ifelse([$3],,[ :]dnl ,[ $3]) ifelse([$4],,,[ else $4]) fi],[enableval=$5 ifelse([$4],,,[ $4 ])dnl ])])dnl dnl --------------------------------------------------------------------------- dnl CF_CC_ENV_FLAGS version: 2 updated: 2015/04/12 15:39:00 dnl --------------- dnl Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content dnl into CC. This will not help with broken scripts that wrap the compiler with dnl options, but eliminates a more common category of user confusion. AC_DEFUN([CF_CC_ENV_FLAGS], [ # This should have been defined by AC_PROG_CC : ${CC:=cc} AC_MSG_CHECKING(\$CC variable) case "$CC" in (*[[\ \ ]]-[[IUD]]*) AC_MSG_RESULT(broken) AC_MSG_WARN(your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options) # humor him... cf_flags=`echo "$CC" | sed -e 's/^[[^ ]]*[[ ]]//'` CC=`echo "$CC" | sed -e 's/[[ ]].*//'` CF_ADD_CFLAGS($cf_flags) ;; (*) AC_MSG_RESULT(ok) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_CACHE version: 12 updated: 2012/10/02 20:55:03 dnl -------------- dnl Check if we're accidentally using a cache from a different machine. dnl Derive the system name, as a check for reusing the autoconf cache. dnl dnl If we've packaged config.guess and config.sub, run that (since it does a dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM dnl which is useful in cross-compiles. dnl dnl Note: we would use $ac_config_sub, but that is one of the places where dnl autoconf 2.5x broke compatibility with autoconf 2.13 AC_DEFUN([CF_CHECK_CACHE], [ if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then ifelse([$1],,[AC_CANONICAL_HOST],[$1]) system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" if test -z "$system_name" ; then system_name="`(hostname) 2>/dev/null`" fi fi test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name",[Define to the system name.]) AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"]) test -z "$system_name" && system_name="$cf_cv_system_name" test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name) if test ".$system_name" != ".$cf_cv_system_name" ; then AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)) AC_MSG_ERROR("Please remove config.cache and try again.") fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_CFLAGS version: 3 updated: 2014/07/22 05:32:57 dnl --------------- dnl Conditionally add to $CFLAGS and $CPPFLAGS values which are derived from dnl a build-configuration such as imake. These have the pitfall that they dnl often contain compiler-specific options which we cannot use, mixed with dnl preprocessor options that we usually can. AC_DEFUN([CF_CHECK_CFLAGS], [ CF_VERBOSE(checking additions to CFLAGS) cf_check_cflags="$CFLAGS" cf_check_cppflags="$CPPFLAGS" CF_ADD_CFLAGS($1,yes) if test "x$cf_check_cflags" != "x$CFLAGS" ; then AC_TRY_LINK([#include ],[printf("Hello world");],, [CF_VERBOSE(test-compile failed. Undoing change to \$CFLAGS) if test "x$cf_check_cppflags" != "x$CPPFLAGS" ; then CF_VERBOSE(but keeping change to \$CPPFLAGS) fi CFLAGS="$cf_check_flags"]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_CURSES_LIB version: 1 updated: 2015/04/25 20:53:11 dnl ------------------- dnl $1 = nominal library name, used also for header lookup dnl $2 = suffix to append to library name dnl $3 = function to check for using AC_CHECK_LIB AC_DEFUN([CF_CHECK_CURSES_LIB], [ AC_CHECK_LIB($1$2,$3,[ CF_UPPER(cf_upper,have_lib$1) CF_ADD_LIBS(-l$1$2) AC_DEFINE_UNQUOTED($cf_upper,1)]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CLANG_COMPILER version: 2 updated: 2013/11/19 19:23:35 dnl ----------------- dnl Check if the given compiler is really clang. clang's C driver defines dnl __GNUC__ (fooling the configure script into setting $GCC to yes) but does dnl not ignore some gcc options. dnl dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from dnl the wrappers for gcc and g++ warnings. dnl dnl $1 = GCC (default) or GXX dnl $2 = CLANG_COMPILER (default) dnl $3 = CFLAGS (default) or CXXFLAGS AC_DEFUN([CF_CLANG_COMPILER],[ ifelse([$2],,CLANG_COMPILER,[$2])=no if test "$ifelse([$1],,[$1],GCC)" = yes ; then AC_MSG_CHECKING(if this is really Clang ifelse([$1],GXX,C++,C) compiler) cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])" ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -Qunused-arguments" AC_TRY_COMPILE([],[ #ifdef __clang__ #else make an error #endif ],[ifelse([$2],,CLANG_COMPILER,[$2])=yes cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" ],[]) ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS" AC_MSG_RESULT($ifelse([$2],,CLANG_COMPILER,[$2])) fi ]) dnl --------------------------------------------------------------------------- dnl CF_CURSES_ACS_MAP version: 7 updated: 2012/10/06 16:39:58 dnl ----------------- dnl Check for likely values of acs_map[]: AC_DEFUN([CF_CURSES_ACS_MAP], [ AC_REQUIRE([CF_NCURSES_WRAP_PREFIX])dnl AC_CACHE_CHECK(for alternate character set array, cf_cv_curses_acs_map,[ cf_cv_curses_acs_map=unknown for name in acs_map _acs_map __acs_map ${NCURSES_WRAP_PREFIX}acs_map do AC_TRY_LINK([ #include <${cf_cv_ncurses_header:-curses.h}> ],[ $name['k'] = ACS_PLUS ],[cf_cv_curses_acs_map=$name; break]) done ]) test "$cf_cv_curses_acs_map" != unknown && AC_DEFINE_UNQUOTED(CURSES_ACS_ARRAY,$cf_cv_curses_acs_map,[Define as needed to override ncurses prefix _nc_]) ]) dnl --------------------------------------------------------------------------- dnl CF_CURSES_CHECK_DATA version: 5 updated: 2014/07/19 18:41:17 dnl -------------------- dnl Check if curses.h defines the given data/variable. dnl Use this after CF_NCURSES_CONFIG or CF_CURSES_CONFIG. AC_DEFUN([CF_CURSES_CHECK_DATA], [ AC_MSG_CHECKING(for data $1 declaration in ${cf_cv_ncurses_header:-curses.h}) AC_TRY_COMPILE(CF__CURSES_HEAD,[ void *foo = &($1) ],cf_result=yes,cf_result=no) AC_MSG_RESULT($cf_result) if test $cf_result = yes ; then CF_UPPER(cf_result,have_curses_data_$1) AC_DEFINE_UNQUOTED($cf_result) else AC_MSG_CHECKING(for data $1 in library) # BSD linkers insist on making weak linkage, but resolve at runtime. AC_TRY_RUN(CF__CURSES_HEAD [ extern char $1; int main(void) { void *foo = &($1); fprintf(stderr, "testing linkage of $1:%p\n", foo); ${cf_cv_main_return:-return}(foo == 0); }],[cf_result=yes],[cf_result=no],[ # cross-compiling AC_TRY_LINK(CF__CURSES_HEAD [extern char $1;],[ do { void *foo = &($1); fprintf(stderr, "testing linkage of $1:%p\n", foo); ${cf_cv_main_return:-return}(foo == 0); } while (0) ],[cf_result=yes],[cf_result=no]) ]) AC_MSG_RESULT($cf_result) if test $cf_result = yes ; then CF_UPPER(cf_result,decl_curses_data_$1) AC_DEFINE_UNQUOTED($cf_result) fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_CHECK_TYPE version: 4 updated: 2012/10/06 16:39:58 dnl -------------------- dnl Check if curses.h defines the given type AC_DEFUN([CF_CURSES_CHECK_TYPE], [ AC_MSG_CHECKING(for type $1 in ${cf_cv_ncurses_header:-curses.h}) AC_TRY_COMPILE([ #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}>],[ $1 foo ],cf_result=yes,cf_result=no) AC_MSG_RESULT($cf_result) if test $cf_result = yes ; then CF_UPPER(cf_result,have_type_$1) AC_DEFINE_UNQUOTED($cf_result,1,[Define to 1 if we have type $1]) else AC_DEFINE_UNQUOTED($1,$2,[Define to appropriate type if $1 is not declared]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_CONFIG version: 2 updated: 2006/10/29 11:06:27 dnl ---------------- dnl Tie together the configure-script macros for curses. It may be ncurses, dnl but unless asked, we do not make a special search for ncurses. However, dnl still check for the ncurses version number, for use in other macros. AC_DEFUN([CF_CURSES_CONFIG], [ CF_CURSES_CPPFLAGS CF_NCURSES_VERSION CF_CURSES_LIBS ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_CPPFLAGS version: 12 updated: 2015/04/15 19:08:48 dnl ------------------ dnl Look for the curses headers. AC_DEFUN([CF_CURSES_CPPFLAGS],[ AC_CACHE_CHECK(for extra include directories,cf_cv_curses_incdir,[ cf_cv_curses_incdir=no case $host_os in (hpux10.*) if test "x$cf_cv_screen" = "xcurses_colr" then test -d /usr/include/curses_colr && \ cf_cv_curses_incdir="-I/usr/include/curses_colr" fi ;; (sunos3*|sunos4*) if test "x$cf_cv_screen" = "xcurses_5lib" then test -d /usr/5lib && \ test -d /usr/5include && \ cf_cv_curses_incdir="-I/usr/5include" fi ;; esac ]) test "$cf_cv_curses_incdir" != no && CPPFLAGS="$CPPFLAGS $cf_cv_curses_incdir" CF_CURSES_HEADER CF_TERM_HEADER ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_FUNCS version: 18 updated: 2014/07/19 18:44:41 dnl --------------- dnl Curses-functions are a little complicated, since a lot of them are macros. AC_DEFUN([CF_CURSES_FUNCS], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_REQUIRE([CF_XOPEN_CURSES]) AC_REQUIRE([CF_CURSES_TERM_H]) AC_REQUIRE([CF_CURSES_UNCTRL_H]) for cf_func in $1 do CF_UPPER(cf_tr_func,$cf_func) AC_MSG_CHECKING(for ${cf_func}) CF_MSG_LOG(${cf_func}) AC_CACHE_VAL(cf_cv_func_$cf_func,[ eval cf_result='$ac_cv_func_'$cf_func if test ".$cf_result" != ".no"; then AC_TRY_LINK(CF__CURSES_HEAD, [ #ifndef ${cf_func} long foo = (long)(&${cf_func}); fprintf(stderr, "testing linkage of $cf_func:%p\n", foo); if (foo + 1234 > 5678) ${cf_cv_main_return:-return}(foo); #endif ], [cf_result=yes], [cf_result=no]) fi eval 'cf_cv_func_'$cf_func'=$cf_result' ]) # use the computed/retrieved cache-value: eval 'cf_result=$cf_cv_func_'$cf_func AC_MSG_RESULT($cf_result) if test $cf_result != no; then AC_DEFINE_UNQUOTED(HAVE_${cf_tr_func}) fi done ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_HEADER version: 5 updated: 2015/04/23 20:35:30 dnl ---------------- dnl Find a "curses" header file, e.g,. "curses.h", or one of the more common dnl variations of ncurses' installs. dnl dnl $1 = ncurses when looking for ncurses, or is empty AC_DEFUN([CF_CURSES_HEADER],[ AC_CACHE_CHECK(if we have identified curses headers,cf_cv_ncurses_header,[ cf_cv_ncurses_header=none for cf_header in \ ncurses.h ifelse($1,,,[$1/ncurses.h]) \ curses.h ifelse($1,,,[$1/curses.h]) ifelse($1,,[ncurses/ncurses.h ncurses/curses.h]) do AC_TRY_COMPILE([#include <${cf_header}>], [initscr(); tgoto("?", 0,0)], [cf_cv_ncurses_header=$cf_header; break],[]) done ]) if test "$cf_cv_ncurses_header" = none ; then AC_MSG_ERROR(No curses header-files found) fi # cheat, to get the right #define's for HAVE_NCURSES_H, etc. AC_CHECK_HEADERS($cf_cv_ncurses_header) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_LIBS version: 39 updated: 2015/05/10 19:52:14 dnl -------------- dnl Look for the curses libraries. Older curses implementations may require dnl termcap/termlib to be linked as well. Call CF_CURSES_CPPFLAGS first. AC_DEFUN([CF_CURSES_LIBS],[ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_MSG_CHECKING(if we have identified curses libraries) AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr(); tgoto("?", 0,0)], cf_result=yes, cf_result=no) AC_MSG_RESULT($cf_result) if test "$cf_result" = no ; then case $host_os in (freebsd*) AC_CHECK_LIB(mytinfo,tgoto,[CF_ADD_LIBS(-lmytinfo)]) ;; (hpux10.*) # Looking at HPUX 10.20, the Hcurses library is the oldest (1997), cur_colr # next (1998), and xcurses "newer" (2000). There is no header file for # Hcurses; the subdirectory curses_colr has the headers (curses.h and # term.h) for cur_colr if test "x$cf_cv_screen" = "xcurses_colr" then AC_CHECK_LIB(cur_colr,initscr,[ CF_ADD_LIBS(-lcur_colr) ac_cv_func_initscr=yes ],[ AC_CHECK_LIB(Hcurses,initscr,[ # HP's header uses __HP_CURSES, but user claims _HP_CURSES. CF_ADD_LIBS(-lHcurses) CPPFLAGS="$CPPFLAGS -D__HP_CURSES -D_HP_CURSES" ac_cv_func_initscr=yes ])]) fi ;; (linux*) case `arch 2>/dev/null` in (x86_64) if test -d /lib64 then CF_ADD_LIBDIR(/lib64) else CF_ADD_LIBDIR(/lib) fi ;; (*) CF_ADD_LIBDIR(/lib) ;; esac ;; (sunos3*|sunos4*) if test "x$cf_cv_screen" = "xcurses_5lib" then if test -d /usr/5lib ; then CF_ADD_LIBDIR(/usr/5lib) CF_ADD_LIBS(-lcurses -ltermcap) fi fi ac_cv_func_initscr=yes ;; esac if test ".$ac_cv_func_initscr" != .yes ; then cf_save_LIBS="$LIBS" if test ".${cf_cv_ncurses_version:-no}" != .no then cf_check_list="ncurses curses cursesX" else cf_check_list="cursesX curses ncurses" fi # Check for library containing tgoto. Do this before curses library # because it may be needed to link the test-case for initscr. if test "x$cf_term_lib" = x then AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[ for cf_term_lib in $cf_check_list otermcap termcap tinfo termlib unknown do AC_CHECK_LIB($cf_term_lib,tgoto,[break]) done ]) fi # Check for library containing initscr test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" if test "x$cf_curs_lib" = x then for cf_curs_lib in $cf_check_list xcurses jcurses pdcurses unknown do AC_CHECK_LIB($cf_curs_lib,initscr,[break]) done fi test $cf_curs_lib = unknown && AC_MSG_ERROR(no curses library found) LIBS="-l$cf_curs_lib $cf_save_LIBS" if test "$cf_term_lib" = unknown ; then AC_MSG_CHECKING(if we can link with $cf_curs_lib library) AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr()], [cf_result=yes], [cf_result=no]) AC_MSG_RESULT($cf_result) test $cf_result = no && AC_MSG_ERROR(Cannot link curses library) elif test "$cf_curs_lib" = "$cf_term_lib" ; then : elif test "$cf_term_lib" != predefined ; then AC_MSG_CHECKING(if we need both $cf_curs_lib and $cf_term_lib libraries) AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr(); tgoto((char *)0, 0, 0);], [cf_result=no], [ LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr()], [cf_result=yes], [cf_result=error]) ]) AC_MSG_RESULT($cf_result) fi fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_TERM_H version: 11 updated: 2015/04/15 19:08:48 dnl ---------------- dnl SVr4 curses should have term.h as well (where it puts the definitions of dnl the low-level interface). This may not be true in old/broken implementations, dnl as well as in misconfigured systems (e.g., gcc configured for Solaris 2.4 dnl running with Solaris 2.5.1). AC_DEFUN([CF_CURSES_TERM_H], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_CACHE_CHECK(for term.h, cf_cv_term_header,[ # If we found , look for , but always look # for if we do not find the variant. cf_header_list="term.h ncurses/term.h ncursesw/term.h" case ${cf_cv_ncurses_header:-curses.h} in (*/*) cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`term.h cf_header_list="$cf_header_item $cf_header_list" ;; esac for cf_header in $cf_header_list do AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}> #include <${cf_header}>], [WINDOW *x], [cf_cv_term_header=$cf_header break], [cf_cv_term_header=no]) done case $cf_cv_term_header in (no) # If curses is ncurses, some packagers still mess it up by trying to make # us use GNU termcap. This handles the most common case. for cf_header in ncurses/term.h ncursesw/term.h do AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}> #ifdef NCURSES_VERSION #include <${cf_header}> #else make an error #endif], [WINDOW *x], [cf_cv_term_header=$cf_header break], [cf_cv_term_header=no]) done ;; esac ]) case $cf_cv_term_header in (term.h) AC_DEFINE(HAVE_TERM_H,1,[Define to 1 if we have term.h]) ;; (ncurses/term.h) AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h]) ;; (ncursesw/term.h) AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_UNCTRL_H version: 4 updated: 2015/04/15 19:08:48 dnl ------------------ dnl Any X/Open curses implementation must have unctrl.h, but ncurses packages dnl may put it in a subdirectory (along with ncurses' other headers, of dnl course). Packages which put the headers in inconsistent locations are dnl broken). AC_DEFUN([CF_CURSES_UNCTRL_H], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_CACHE_CHECK(for unctrl.h, cf_cv_unctrl_header,[ # If we found , look for , but always look # for if we do not find the variant. cf_header_list="unctrl.h ncurses/unctrl.h ncursesw/unctrl.h" case ${cf_cv_ncurses_header:-curses.h} in (*/*) cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`unctrl.h cf_header_list="$cf_header_item $cf_header_list" ;; esac for cf_header in $cf_header_list do AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}> #include <${cf_header}>], [WINDOW *x], [cf_cv_unctrl_header=$cf_header break], [cf_cv_unctrl_header=no]) done ]) case $cf_cv_unctrl_header in (no) AC_MSG_WARN(unctrl.h header not found) ;; esac case $cf_cv_unctrl_header in (unctrl.h) AC_DEFINE(HAVE_UNCTRL_H,1,[Define to 1 if we have unctrl.h]) ;; (ncurses/unctrl.h) AC_DEFINE(HAVE_NCURSES_UNCTRL_H,1,[Define to 1 if we have ncurses/unctrl.h]) ;; (ncursesw/unctrl.h) AC_DEFINE(HAVE_NCURSESW_UNCTRL_H,1,[Define to 1 if we have ncursesw/unctrl.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_WACS_MAP version: 6 updated: 2012/10/06 08:57:51 dnl ------------------ dnl Check for likely values of wacs_map[]. AC_DEFUN([CF_CURSES_WACS_MAP], [ AC_CACHE_CHECK(for wide alternate character set array, cf_cv_curses_wacs_map,[ cf_cv_curses_wacs_map=unknown for name in wacs_map _wacs_map __wacs_map _nc_wacs _wacs_char do AC_TRY_LINK([ #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}>], [void *foo = &($name['k'])], [cf_cv_curses_wacs_map=$name break]) done]) test "$cf_cv_curses_wacs_map" != unknown && AC_DEFINE_UNQUOTED(CURSES_WACS_ARRAY,$cf_cv_curses_wacs_map,[Define to name of (n)curses wide-character array]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CURSES_WACS_SYMBOLS version: 2 updated: 2012/10/06 08:57:51 dnl ---------------------- dnl Do a check to see if the WACS_xxx constants are defined compatibly with dnl X/Open Curses. In particular, NetBSD's implementation of the WACS_xxx dnl constants is broken since those constants do not point to cchar_t's. AC_DEFUN([CF_CURSES_WACS_SYMBOLS], [ AC_REQUIRE([CF_CURSES_WACS_MAP]) AC_CACHE_CHECK(for wide alternate character constants, cf_cv_curses_wacs_symbols,[ cf_cv_curses_wacs_symbols=no if test "$cf_cv_curses_wacs_map" != unknown then AC_TRY_LINK([ #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}>], [cchar_t *foo = WACS_PLUS; $cf_cv_curses_wacs_map['k'] = *WACS_PLUS], [cf_cv_curses_wacs_symbols=yes]) else AC_TRY_LINK([ #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}>], [cchar_t *foo = WACS_PLUS], [cf_cv_curses_wacs_symbols=yes]) fi ]) test "$cf_cv_curses_wacs_symbols" != no && AC_DEFINE(CURSES_WACS_SYMBOLS,1,[Define to 1 if (n)curses supports wide-character WACS_ symbols]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DIRNAME version: 4 updated: 2002/12/21 19:25:52 dnl ---------- dnl "dirname" is not portable, so we fake it with a shell script. AC_DEFUN([CF_DIRNAME],[$1=`echo $2 | sed -e 's%/[[^/]]*$%%'`])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_ECHO version: 13 updated: 2015/04/18 08:56:57 dnl --------------- dnl You can always use "make -n" to see the actual options, but it's hard to dnl pick out/analyze warning messages when the compile-line is long. dnl dnl Sets: dnl ECHO_LT - symbol to control if libtool is verbose dnl ECHO_LD - symbol to prefix "cc -o" lines dnl RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o) dnl SHOW_CC - symbol to put before explicit "cc -c" lines dnl ECHO_CC - symbol to put before any "cc" line dnl AC_DEFUN([CF_DISABLE_ECHO],[ AC_MSG_CHECKING(if you want to see long compiling messages) CF_ARG_DISABLE(echo, [ --disable-echo do not display "compiling" commands], [ ECHO_LT='--silent' ECHO_LD='@echo linking [$]@;' RULE_CC='@echo compiling [$]<' SHOW_CC='@echo compiling [$]@' ECHO_CC='@' ],[ ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' ]) AC_MSG_RESULT($enableval) AC_SUBST(ECHO_LT) AC_SUBST(ECHO_LD) AC_SUBST(RULE_CC) AC_SUBST(SHOW_CC) AC_SUBST(ECHO_CC) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_LEAKS version: 7 updated: 2012/10/02 20:55:03 dnl ---------------- dnl Combine no-leak checks with the libraries or tools that are used for the dnl checks. AC_DEFUN([CF_DISABLE_LEAKS],[ AC_REQUIRE([CF_WITH_DMALLOC]) AC_REQUIRE([CF_WITH_DBMALLOC]) AC_REQUIRE([CF_WITH_VALGRIND]) AC_MSG_CHECKING(if you want to perform memory-leak testing) AC_ARG_ENABLE(leaks, [ --disable-leaks test: free permanent memory, analyze leaks], [if test "x$enableval" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi], : ${with_no_leaks:=no}) AC_MSG_RESULT($with_no_leaks) if test "$with_no_leaks" = yes ; then AC_DEFINE(NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.]) AC_DEFINE(YY_NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_RPATH_HACK version: 2 updated: 2011/02/13 13:31:33 dnl --------------------- dnl The rpath-hack makes it simpler to build programs, particularly with the dnl *BSD ports which may have essential libraries in unusual places. But it dnl can interfere with building an executable for the base system. Use this dnl option in that case. AC_DEFUN([CF_DISABLE_RPATH_HACK], [ AC_MSG_CHECKING(if rpath-hack should be disabled) CF_ARG_DISABLE(rpath-hack, [ --disable-rpath-hack don't add rpath options for additional libraries], [cf_disable_rpath_hack=yes], [cf_disable_rpath_hack=no]) AC_MSG_RESULT($cf_disable_rpath_hack) if test "$cf_disable_rpath_hack" = no ; then CF_RPATH_HACK fi ]) dnl --------------------------------------------------------------------------- dnl CF_ENABLE_WARNINGS version: 4 updated: 2009/07/26 17:53:03 dnl ------------------ dnl Configure-option to enable gcc warnings AC_DEFUN([CF_ENABLE_WARNINGS],[ if ( test "$GCC" = yes || test "$GXX" = yes ) then AC_MSG_CHECKING(if you want to turn on gcc warnings) CF_ARG_ENABLE(warnings, [ --enable-warnings test: turn on gcc compiler warnings], [with_warnings=yes], [with_warnings=no]) AC_MSG_RESULT($with_warnings) if test "$with_warnings" = "yes" then CF_GCC_ATTRIBUTES CF_GCC_WARNINGS fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_FIND_LIBRARY version: 9 updated: 2008/03/23 14:48:54 dnl --------------- dnl Look for a non-standard library, given parameters for AC_TRY_LINK. We dnl prefer a standard location, and use -L options only if we do not find the dnl library in the standard library location(s). dnl $1 = library name dnl $2 = library class, usually the same as library name dnl $3 = includes dnl $4 = code fragment to compile/link dnl $5 = corresponding function-name dnl $6 = flag, nonnull if failure should not cause an error-exit dnl dnl Sets the variable "$cf_libdir" as a side-effect, so we can see if we had dnl to use a -L option. AC_DEFUN([CF_FIND_LIBRARY], [ eval 'cf_cv_have_lib_'$1'=no' cf_libdir="" AC_CHECK_FUNC($5, eval 'cf_cv_have_lib_'$1'=yes',[ cf_save_LIBS="$LIBS" AC_MSG_CHECKING(for $5 in -l$1) LIBS="-l$1 $LIBS" AC_TRY_LINK([$3],[$4], [AC_MSG_RESULT(yes) eval 'cf_cv_have_lib_'$1'=yes' ], [AC_MSG_RESULT(no) CF_LIBRARY_PATH(cf_search,$2) for cf_libdir in $cf_search do AC_MSG_CHECKING(for -l$1 in $cf_libdir) LIBS="-L$cf_libdir -l$1 $cf_save_LIBS" AC_TRY_LINK([$3],[$4], [AC_MSG_RESULT(yes) eval 'cf_cv_have_lib_'$1'=yes' break], [AC_MSG_RESULT(no) LIBS="$cf_save_LIBS"]) done ]) ]) eval 'cf_found_library=[$]cf_cv_have_lib_'$1 ifelse($6,,[ if test $cf_found_library = no ; then AC_MSG_ERROR(Cannot link $1 library) fi ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_FIND_LINKAGE version: 20 updated: 2015/04/18 08:56:57 dnl --------------- dnl Find a library (specifically the linkage used in the code fragment), dnl searching for it if it is not already in the library path. dnl See also CF_ADD_SEARCHPATH. dnl dnl Parameters (4-on are optional): dnl $1 = headers for library entrypoint dnl $2 = code fragment for library entrypoint dnl $3 = the library name without the "-l" option or ".so" suffix. dnl $4 = action to perform if successful (default: update CPPFLAGS, etc) dnl $5 = action to perform if not successful dnl $6 = module name, if not the same as the library name dnl $7 = extra libraries dnl dnl Sets these variables: dnl $cf_cv_find_linkage_$3 - yes/no according to whether linkage is found dnl $cf_cv_header_path_$3 - include-directory if needed dnl $cf_cv_library_path_$3 - library-directory if needed dnl $cf_cv_library_file_$3 - library-file if needed, e.g., -l$3 AC_DEFUN([CF_FIND_LINKAGE],[ # If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these # will be set on completion of the AC_TRY_LINK below. cf_cv_header_path_$3= cf_cv_library_path_$3= CF_MSG_LOG([Starting [FIND_LINKAGE]($3,$6)]) cf_save_LIBS="$LIBS" AC_TRY_LINK([$1],[$2],[ cf_cv_find_linkage_$3=yes cf_cv_header_path_$3=/usr/include cf_cv_library_path_$3=/usr/lib ],[ LIBS="-l$3 $7 $cf_save_LIBS" AC_TRY_LINK([$1],[$2],[ cf_cv_find_linkage_$3=yes cf_cv_header_path_$3=/usr/include cf_cv_library_path_$3=/usr/lib cf_cv_library_file_$3="-l$3" ],[ cf_cv_find_linkage_$3=no LIBS="$cf_save_LIBS" CF_VERBOSE(find linkage for $3 library) CF_MSG_LOG([Searching for headers in [FIND_LINKAGE]($3,$6)]) cf_save_CPPFLAGS="$CPPFLAGS" cf_test_CPPFLAGS="$CPPFLAGS" CF_HEADER_PATH(cf_search,ifelse([$6],,[$3],[$6])) for cf_cv_header_path_$3 in $cf_search do if test -d $cf_cv_header_path_$3 ; then CF_VERBOSE(... testing $cf_cv_header_path_$3) CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_$3" AC_TRY_COMPILE([$1],[$2],[ CF_VERBOSE(... found $3 headers in $cf_cv_header_path_$3) cf_cv_find_linkage_$3=maybe cf_test_CPPFLAGS="$CPPFLAGS" break],[ CPPFLAGS="$cf_save_CPPFLAGS" ]) fi done if test "$cf_cv_find_linkage_$3" = maybe ; then CF_MSG_LOG([Searching for $3 library in [FIND_LINKAGE]($3,$6)]) cf_save_LIBS="$LIBS" cf_save_LDFLAGS="$LDFLAGS" ifelse([$6],,,[ CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-l$3 $7 $cf_save_LIBS" AC_TRY_LINK([$1],[$2],[ CF_VERBOSE(... found $3 library in system) cf_cv_find_linkage_$3=yes]) CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" ]) if test "$cf_cv_find_linkage_$3" != yes ; then CF_LIBRARY_PATH(cf_search,$3) for cf_cv_library_path_$3 in $cf_search do if test -d $cf_cv_library_path_$3 ; then CF_VERBOSE(... testing $cf_cv_library_path_$3) CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-l$3 $7 $cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_$3" AC_TRY_LINK([$1],[$2],[ CF_VERBOSE(... found $3 library in $cf_cv_library_path_$3) cf_cv_find_linkage_$3=yes cf_cv_library_file_$3="-l$3" break],[ CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS" ]) fi done CPPFLAGS="$cf_save_CPPFLAGS" LDFLAGS="$cf_save_LDFLAGS" fi else cf_cv_find_linkage_$3=no fi ],$7) ]) LIBS="$cf_save_LIBS" if test "$cf_cv_find_linkage_$3" = yes ; then ifelse([$4],,[ CF_ADD_INCDIR($cf_cv_header_path_$3) CF_ADD_LIBDIR($cf_cv_library_path_$3) CF_ADD_LIB($3) ],[$4]) else ifelse([$5],,AC_MSG_WARN(Cannot find $3 library),[$5]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_FUNC_CURSES_VERSION version: 6 updated: 2012/10/06 16:39:58 dnl ---------------------- dnl Solaris has a data item 'curses_version', which confuses AC_CHECK_FUNCS. dnl It's a character string "SVR4", not documented. AC_DEFUN([CF_FUNC_CURSES_VERSION], [ AC_CACHE_CHECK(for function curses_version, cf_cv_func_curses_version,[ AC_TRY_RUN([ #include <${cf_cv_ncurses_header:-curses.h}> int main() { char temp[1024]; sprintf(temp, "%s\n", curses_version()); ${cf_cv_main_return:-return}(0); }] ,[cf_cv_func_curses_version=yes] ,[cf_cv_func_curses_version=no] ,[cf_cv_func_curses_version=unknown]) rm -f core]) test "$cf_cv_func_curses_version" = yes && AC_DEFINE(HAVE_CURSES_VERSION,1,[Define to 1 if we have curses_version function]) ]) dnl --------------------------------------------------------------------------- dnl CF_FUNC_OPENPTY version: 5 updated: 2015/09/12 14:46:50 dnl --------------- dnl Check for openpty() function, along with header. It may need the dnl "util" library as well. AC_DEFUN([CF_FUNC_OPENPTY], [ AC_CHECK_LIB(util,openpty,cf_cv_lib_util=yes,cf_cv_lib_util=no) AC_CACHE_CHECK(for openpty header,cf_cv_func_openpty,[ cf_save_LIBS="$LIBS" test $cf_cv_lib_util = yes && { CF_ADD_LIB(util) } for cf_header in pty.h libutil.h util.h do AC_TRY_LINK([ #include <$cf_header> ],[ int x = openpty((int *)0, (int *)0, (char *)0, (struct termios *)0, (struct winsize *)0); ],[ cf_cv_func_openpty=$cf_header break ],[ cf_cv_func_openpty=no ]) done LIBS="$cf_save_LIBS" ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_ATTRIBUTES version: 17 updated: 2015/04/12 15:39:00 dnl ----------------- dnl Test for availability of useful gcc __attribute__ directives to quiet dnl compiler warnings. Though useful, not all are supported -- and contrary dnl to documentation, unrecognized directives cause older compilers to barf. AC_DEFUN([CF_GCC_ATTRIBUTES], [ if test "$GCC" = yes then cat > conftest.i < conftest.$ac_ext <&AC_FD_CC case $cf_attribute in (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <>confdefs.h case $cf_attribute in (noreturn) AC_DEFINE_UNQUOTED(GCC_NORETURN,$cf_directive,[Define to noreturn-attribute for gcc]) ;; (printf) cf_value='/* nothing */' if test "$cf_printf_attribute" != no ; then cf_value='__attribute__((format(printf,fmt,var)))' AC_DEFINE(GCC_PRINTF,1,[Define to 1 if the compiler supports gcc-like printf attribute.]) fi AC_DEFINE_UNQUOTED(GCC_PRINTFLIKE(fmt,var),$cf_value,[Define to printf-attribute for gcc]) ;; (scanf) cf_value='/* nothing */' if test "$cf_scanf_attribute" != no ; then cf_value='__attribute__((format(scanf,fmt,var)))' AC_DEFINE(GCC_SCANF,1,[Define to 1 if the compiler supports gcc-like scanf attribute.]) fi AC_DEFINE_UNQUOTED(GCC_SCANFLIKE(fmt,var),$cf_value,[Define to sscanf-attribute for gcc]) ;; (unused) AC_DEFINE_UNQUOTED(GCC_UNUSED,$cf_directive,[Define to unused-attribute for gcc]) ;; esac fi done else fgrep define conftest.i >>confdefs.h fi rm -rf conftest* fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_VERSION version: 7 updated: 2012/10/18 06:46:33 dnl -------------- dnl Find version of gcc AC_DEFUN([CF_GCC_VERSION],[ AC_REQUIRE([AC_PROG_CC]) GCC_VERSION=none if test "$GCC" = yes ; then AC_MSG_CHECKING(version of $CC) GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`" test -z "$GCC_VERSION" && GCC_VERSION=unknown AC_MSG_RESULT($GCC_VERSION) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_WARNINGS version: 32 updated: 2015/04/12 15:39:00 dnl --------------- dnl Check if the compiler supports useful warning options. There's a few that dnl we don't use, simply because they're too noisy: dnl dnl -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x) dnl -Wredundant-decls (system headers make this too noisy) dnl -Wtraditional (combines too many unrelated messages, only a few useful) dnl -Wwrite-strings (too noisy, but should review occasionally). This dnl is enabled for ncurses using "--enable-const". dnl -pedantic dnl dnl Parameter: dnl $1 is an optional list of gcc warning flags that a particular dnl application might want to use, e.g., "no-unused" for dnl -Wno-unused dnl Special: dnl If $with_ext_const is "yes", add a check for -Wwrite-strings dnl AC_DEFUN([CF_GCC_WARNINGS], [ AC_REQUIRE([CF_GCC_VERSION]) CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS) CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS) cat > conftest.$ac_ext <], [int x = optind; char *y = optarg], [cf_cv_getopt_header=$cf_header break]) done ]) if test $cf_cv_getopt_header != none ; then AC_DEFINE(HAVE_GETOPT_HEADER,1,[Define to 1 if getopt variables are declared in header]) fi if test $cf_cv_getopt_header = getopt.h ; then AC_DEFINE(NEED_GETOPT_H,1,[Define to 1 if we must include getopt.h]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNU_SOURCE version: 6 updated: 2005/07/09 13:23:07 dnl ------------- dnl Check if we must define _GNU_SOURCE to get a reasonable value for dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect dnl (or misfeature) of glibc2, which breaks portability of many applications, dnl since it is interwoven with GNU extensions. dnl dnl Well, yes we could work around it... AC_DEFUN([CF_GNU_SOURCE], [ AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[ AC_TRY_COMPILE([#include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_cv_gnu_source=no], [cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" AC_TRY_COMPILE([#include ],[ #ifdef _XOPEN_SOURCE make an error #endif], [cf_cv_gnu_source=no], [cf_cv_gnu_source=yes]) CPPFLAGS="$cf_save" ]) ]) test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" ])dnl dnl --------------------------------------------------------------------------- dnl CF_HEADER_PATH version: 13 updated: 2015/04/15 19:08:48 dnl -------------- dnl Construct a search-list of directories for a nonstandard header-file dnl dnl Parameters dnl $1 = the variable to return as result dnl $2 = the package name AC_DEFUN([CF_HEADER_PATH], [ $1= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` CF_ADD_SUBDIR_PATH($1,$2,include,$cf_header_path,NONE) cf_header_path_list="$cf_header_path_list [$]$1" ;; esac done fi # add the variations for the package we are looking for CF_SUBDIR_PATH($1,$2,include) test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && $1="[$]$1 $includedir" test -d $includedir/$2 && $1="[$]$1 $includedir/$2" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && $1="[$]$1 $oldincludedir" test -d $oldincludedir/$2 && $1="[$]$1 $oldincludedir/$2" } $1="[$]$1 $cf_header_path_list" ])dnl dnl --------------------------------------------------------------------------- dnl CF_HELP_MESSAGE version: 3 updated: 1998/01/14 10:56:23 dnl --------------- dnl Insert text into the help-message, for readability, from AC_ARG_WITH. AC_DEFUN([CF_HELP_MESSAGE], [AC_DIVERT_HELP([$1])dnl ])dnl dnl --------------------------------------------------------------------------- dnl CF_INHERIT_SCRIPT version: 2 updated: 2003/03/01 23:50:42 dnl ----------------- dnl If we do not have a given script, look for it in the parent directory. AC_DEFUN([CF_INHERIT_SCRIPT], [ test -f $1 || ( test -f ../$1 && cp ../$1 ./ ) ])dnl dnl --------------------------------------------------------------------------- dnl CF_INTEL_COMPILER version: 7 updated: 2015/04/12 15:39:00 dnl ----------------- dnl Check if the given compiler is really the Intel compiler for Linux. It dnl tries to imitate gcc, but does not return an error when it finds a mismatch dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK. dnl dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from dnl the wrappers for gcc and g++ warnings. dnl dnl $1 = GCC (default) or GXX dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS dnl $3 = CFLAGS (default) or CXXFLAGS AC_DEFUN([CF_INTEL_COMPILER],[ AC_REQUIRE([AC_CANONICAL_HOST]) ifelse([$2],,INTEL_COMPILER,[$2])=no if test "$ifelse([$1],,[$1],GCC)" = yes ; then case $host_os in (linux*|gnu*) AC_MSG_CHECKING(if this is really Intel ifelse([$1],GXX,C++,C) compiler) cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])" ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -no-gcc" AC_TRY_COMPILE([],[ #ifdef __INTEL_COMPILER #else make an error #endif ],[ifelse([$2],,INTEL_COMPILER,[$2])=yes cf_save_CFLAGS="$cf_save_CFLAGS -we147" ],[]) ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS" AC_MSG_RESULT($ifelse([$2],,INTEL_COMPILER,[$2])) ;; esac fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_LD_RPATH_OPT version: 6 updated: 2015/04/12 15:39:00 dnl --------------- dnl For the given system and compiler, find the compiler flags to pass to the dnl loader to use the "rpath" feature. AC_DEFUN([CF_LD_RPATH_OPT], [ AC_REQUIRE([CF_CHECK_CACHE]) LD_RPATH_OPT= AC_MSG_CHECKING(for an rpath option) case $cf_cv_system_name in (irix*) if test "$GCC" = yes; then LD_RPATH_OPT="-Wl,-rpath," else LD_RPATH_OPT="-rpath " fi ;; (linux*|gnu*|k*bsd*-gnu) LD_RPATH_OPT="-Wl,-rpath," ;; (openbsd[[2-9]].*|mirbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (dragonfly*|freebsd*) LD_RPATH_OPT="-rpath " ;; (netbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (osf*|mls+*) LD_RPATH_OPT="-rpath " ;; (solaris2*) LD_RPATH_OPT="-R" ;; (*) ;; esac AC_MSG_RESULT($LD_RPATH_OPT) case "x$LD_RPATH_OPT" in (x-R*) AC_MSG_CHECKING(if we need a space after rpath option) cf_save_LIBS="$LIBS" CF_ADD_LIBS(${LD_RPATH_OPT}$libdir) AC_TRY_LINK(, , cf_rpath_space=no, cf_rpath_space=yes) LIBS="$cf_save_LIBS" AC_MSG_RESULT($cf_rpath_space) test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_LIBRARY_PATH version: 10 updated: 2015/04/15 19:08:48 dnl --------------- dnl Construct a search-list of directories for a nonstandard library-file dnl dnl Parameters dnl $1 = the variable to return as result dnl $2 = the package name AC_DEFUN([CF_LIBRARY_PATH], [ $1= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` CF_ADD_SUBDIR_PATH($1,$2,lib,$cf_library_path,NONE) cf_library_path_list="$cf_library_path_list [$]$1" ;; esac done fi CF_SUBDIR_PATH($1,$2,lib) $1="$cf_library_path_list [$]$1" ])dnl dnl --------------------------------------------------------------------------- dnl CF_MAKE_TAGS version: 6 updated: 2010/10/23 15:52:32 dnl ------------ dnl Generate tags/TAGS targets for makefiles. Do not generate TAGS if we have dnl a monocase filesystem. AC_DEFUN([CF_MAKE_TAGS],[ AC_REQUIRE([CF_MIXEDCASE_FILENAMES]) AC_CHECK_PROGS(CTAGS, exctags ctags) AC_CHECK_PROGS(ETAGS, exetags etags) AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS:-ctags}, yes, no) if test "$cf_cv_mixedcase" = yes ; then AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS:-etags}, yes, no) else MAKE_UPPER_TAGS=no fi if test "$MAKE_UPPER_TAGS" = yes ; then MAKE_UPPER_TAGS= else MAKE_UPPER_TAGS="#" fi if test "$MAKE_LOWER_TAGS" = yes ; then MAKE_LOWER_TAGS= else MAKE_LOWER_TAGS="#" fi AC_SUBST(CTAGS) AC_SUBST(ETAGS) AC_SUBST(MAKE_UPPER_TAGS) AC_SUBST(MAKE_LOWER_TAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MATH_LIB version: 8 updated: 2010/05/29 16:31:02 dnl ----------- dnl Checks for libraries. At least one UNIX system, Apple Macintosh dnl Rhapsody 5.5, does not have -lm. We cannot use the simpler dnl AC_CHECK_LIB(m,sin), because that fails for C++. AC_DEFUN([CF_MATH_LIB], [ AC_CACHE_CHECK(if -lm needed for math functions, cf_cv_need_libm,[ AC_TRY_LINK([ #include #include ], [double x = rand(); printf("result = %g\n", ]ifelse([$2],,sin(x),$2)[)], [cf_cv_need_libm=no], [cf_cv_need_libm=yes])]) if test "$cf_cv_need_libm" = yes then ifelse($1,,[ CF_ADD_LIB(m) ],[$1=-lm]) fi ]) dnl --------------------------------------------------------------------------- dnl CF_MIXEDCASE_FILENAMES version: 7 updated: 2015/04/12 15:39:00 dnl ---------------------- dnl Check if the file-system supports mixed-case filenames. If we're able to dnl create a lowercase name and see it as uppercase, it doesn't support that. AC_DEFUN([CF_MIXEDCASE_FILENAMES], [ AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[ if test "$cross_compiling" = yes ; then case $target_alias in (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*) cf_cv_mixedcase=no ;; (*) cf_cv_mixedcase=yes ;; esac else rm -f conftest CONFTEST echo test >conftest if test -f CONFTEST ; then cf_cv_mixedcase=no else cf_cv_mixedcase=yes fi rm -f conftest CONFTEST fi ]) test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if filesystem supports mixed-case filenames.]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32 dnl ---------- dnl Write a debug message to config.log, along with the line number in the dnl configure script. AC_DEFUN([CF_MSG_LOG],[ echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_CC_CHECK version: 4 updated: 2007/07/29 10:39:05 dnl ------------------- dnl Check if we can compile with ncurses' header file dnl $1 is the cache variable to set dnl $2 is the header-file to include dnl $3 is the root name (ncurses or ncursesw) AC_DEFUN([CF_NCURSES_CC_CHECK],[ AC_TRY_COMPILE([ ]ifelse($3,ncursesw,[ #define _XOPEN_SOURCE_EXTENDED #undef HAVE_LIBUTF8_H /* in case we used CF_UTF8_LIB */ #define HAVE_LIBUTF8_H /* to force ncurses' header file to use cchar_t */ ])[ #include <$2>],[ #ifdef NCURSES_VERSION ]ifelse($3,ncursesw,[ #ifndef WACS_BSSB make an error #endif ])[ printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ] ,[$1=$2] ,[$1=no]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_CONFIG version: 17 updated: 2015/07/07 04:22:07 dnl ----------------- dnl Tie together the configure-script macros for ncurses, preferring these in dnl order: dnl a) ".pc" files for pkg-config, using $NCURSES_CONFIG_PKG dnl b) the "-config" script from ncurses, using $NCURSES_CONFIG dnl c) just plain libraries dnl dnl $1 is the root library name (default: "ncurses") AC_DEFUN([CF_NCURSES_CONFIG],[ AC_REQUIRE([CF_PKG_CONFIG]) cf_ncuconfig_root=ifelse($1,,ncurses,$1) cf_have_ncuconfig=no if test "x${PKG_CONFIG:=none}" != xnone; then AC_MSG_CHECKING(pkg-config for $cf_ncuconfig_root) if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then AC_MSG_RESULT(yes) AC_MSG_CHECKING(if the $cf_ncuconfig_root package files work) cf_have_ncuconfig=unknown cf_save_CPPFLAGS="$CPPFLAGS" cf_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags $cf_ncuconfig_root`" CF_ADD_LIBS(`$PKG_CONFIG --libs $cf_ncuconfig_root`) AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr(); mousemask(0,0); tgoto((char *)0, 0, 0);], [AC_TRY_RUN([#include <${cf_cv_ncurses_header:-curses.h}> int main(void) { char *xx = curses_version(); return (xx == 0); }], [cf_have_ncuconfig=yes], [cf_have_ncuconfig=no], [cf_have_ncuconfig=maybe])], [cf_have_ncuconfig=no]) AC_MSG_RESULT($cf_have_ncuconfig) test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes if test "$cf_have_ncuconfig" != "yes" then CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" NCURSES_CONFIG_PKG=none else AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) NCURSES_CONFIG_PKG=$cf_ncuconfig_root fi else AC_MSG_RESULT(no) NCURSES_CONFIG_PKG=none fi else NCURSES_CONFIG_PKG=none fi if test "x$cf_have_ncuconfig" = "xno"; then echo "Looking for ${cf_ncuconfig_root}-config" CF_ACVERSION_CHECK(2.52, [AC_CHECK_TOOLS(NCURSES_CONFIG, ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)], [AC_PATH_PROGS(NCURSES_CONFIG, ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)]) if test "$NCURSES_CONFIG" != none ; then CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" CF_ADD_LIBS(`$NCURSES_CONFIG --libs`) # even with config script, some packages use no-override for curses.h CF_CURSES_HEADER(ifelse($1,,ncurses,$1)) dnl like CF_NCURSES_CPPFLAGS AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) dnl like CF_NCURSES_LIBS CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_ncuconfig_root) AC_DEFINE_UNQUOTED($cf_nculib_ROOT) dnl like CF_NCURSES_VERSION cf_cv_ncurses_version=`$NCURSES_CONFIG --version` else CF_NCURSES_CPPFLAGS(ifelse($1,,ncurses,$1)) CF_NCURSES_LIBS(ifelse($1,,ncurses,$1)) fi else NCURSES_CONFIG=none fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_CPPFLAGS version: 21 updated: 2012/10/06 08:57:51 dnl ------------------- dnl Look for the SVr4 curses clone 'ncurses' in the standard places, adjusting dnl the CPPFLAGS variable so we can include its header. dnl dnl The header files may be installed as either curses.h, or ncurses.h (would dnl be obsolete, except that some packagers prefer this name to distinguish it dnl from a "native" curses implementation). If not installed for overwrite, dnl the curses.h file would be in an ncurses subdirectory (e.g., dnl /usr/include/ncurses), but someone may have installed overwriting the dnl vendor's curses. Only very old versions (pre-1.9.2d, the first autoconf'd dnl version) of ncurses don't define either __NCURSES_H or NCURSES_VERSION in dnl the header. dnl dnl If the installer has set $CFLAGS or $CPPFLAGS so that the ncurses header dnl is already in the include-path, don't even bother with this, since we cannot dnl easily determine which file it is. In this case, it has to be . dnl dnl The optional parameter gives the root name of the library, in case it is dnl not installed as the default curses library. That is how the dnl wide-character version of ncurses is installed. AC_DEFUN([CF_NCURSES_CPPFLAGS], [AC_REQUIRE([CF_WITH_CURSES_DIR]) AC_PROVIDE([CF_CURSES_CPPFLAGS])dnl cf_ncuhdr_root=ifelse($1,,ncurses,$1) test -n "$cf_cv_curses_dir" && \ test "$cf_cv_curses_dir" != "no" && { \ CF_ADD_INCDIR($cf_cv_curses_dir/include/$cf_ncuhdr_root) } AC_CACHE_CHECK(for $cf_ncuhdr_root header in include-path, cf_cv_ncurses_h,[ cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" for cf_header in $cf_header_list do CF_NCURSES_CC_CHECK(cf_cv_ncurses_h,$cf_header,$1) test "$cf_cv_ncurses_h" != no && break done ]) CF_NCURSES_HEADER CF_TERM_HEADER # some applications need this, but should check for NCURSES_VERSION AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) CF_NCURSES_VERSION ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_EXT_FUNCS version: 4 updated: 2012/10/06 16:39:58 dnl -------------------- dnl Since 2007/11/17, ncurses has defined NCURSES_EXT_FUNCS; earlier versions dnl may provide these functions. Define the symbol if it is not defined, and dnl if it is valid. AC_DEFUN([CF_NCURSES_EXT_FUNCS], [ AC_CACHE_CHECK(for ncurses extended functions,cf_cv_ncurses_ext_funcs,[ AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}>], [ int x = NCURSES_EXT_FUNCS ],[cf_cv_ncurses_ext_funcs=defined],[ AC_TRY_LINK([ #include <${cf_cv_ncurses_header:-curses.h}>], [ (void) assume_default_colors (0, 0); (void) curses_version (); (void) define_key (0, 0); (void) is_term_resized (0, 0); (void) key_defined (0); (void) keybound (0, 0); (void) keyok (0, 0); (void) resize_term (0, 0); (void) resizeterm (0, 0); (void) use_default_colors (); (void) use_extended_names (0); (void) wresize (0, 0, 0);], [cf_cv_ncurses_ext_funcs=yes], [cf_cv_ncurses_ext_funcs=no]) ]) ]) test "$cf_cv_ncurses_ext_funcs" = yes && AC_DEFINE(NCURSES_EXT_FUNCS,1,[Define to 1 if we have ncurses extensions]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_HEADER version: 4 updated: 2015/04/15 19:08:48 dnl ----------------- dnl Find a "curses" header file, e.g,. "curses.h", or one of the more common dnl variations of ncurses' installs. dnl dnl See also CF_CURSES_HEADER, which sets the same cache variable. AC_DEFUN([CF_NCURSES_HEADER],[ if test "$cf_cv_ncurses_h" != no ; then cf_cv_ncurses_header=$cf_cv_ncurses_h else AC_CACHE_CHECK(for $cf_ncuhdr_root include-path, cf_cv_ncurses_h2,[ test -n "$verbose" && echo CF_HEADER_PATH(cf_search,$cf_ncuhdr_root) test -n "$verbose" && echo search path $cf_search cf_save2_CPPFLAGS="$CPPFLAGS" for cf_incdir in $cf_search do CF_ADD_INCDIR($cf_incdir) for cf_header in \ ncurses.h \ curses.h do CF_NCURSES_CC_CHECK(cf_cv_ncurses_h2,$cf_header,$1) if test "$cf_cv_ncurses_h2" != no ; then cf_cv_ncurses_h2=$cf_incdir/$cf_header test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&AC_FD_MSG break fi test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&AC_FD_MSG done CPPFLAGS="$cf_save2_CPPFLAGS" test "$cf_cv_ncurses_h2" != no && break done test "$cf_cv_ncurses_h2" = no && AC_MSG_ERROR(not found) ]) CF_DIRNAME(cf_1st_incdir,$cf_cv_ncurses_h2) cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header fi CF_ADD_INCDIR($cf_1st_incdir) fi # Set definitions to allow ifdef'ing for ncurses.h case $cf_cv_ncurses_header in (*ncurses.h) AC_DEFINE(HAVE_NCURSES_H,1,[Define to 1 if we have ncurses.h]) ;; esac case $cf_cv_ncurses_header in (ncurses/curses.h|ncurses/ncurses.h) AC_DEFINE(HAVE_NCURSES_NCURSES_H,1,[Define to 1 if we have ncurses/ncurses.h]) ;; (ncursesw/curses.h|ncursesw/ncurses.h) AC_DEFINE(HAVE_NCURSESW_NCURSES_H,1,[Define to 1 if we have ncursesw/ncurses.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_LIBS version: 17 updated: 2015/04/15 19:08:48 dnl --------------- dnl Look for the ncurses library. This is a little complicated on Linux, dnl because it may be linked with the gpm (general purpose mouse) library. dnl Some distributions have gpm linked with (bsd) curses, which makes it dnl unusable with ncurses. However, we don't want to link with gpm unless dnl ncurses has a dependency, since gpm is normally set up as a shared library, dnl and the linker will record a dependency. dnl dnl The optional parameter gives the root name of the library, in case it is dnl not installed as the default curses library. That is how the dnl wide-character version of ncurses is installed. AC_DEFUN([CF_NCURSES_LIBS], [AC_REQUIRE([CF_NCURSES_CPPFLAGS]) cf_nculib_root=ifelse($1,,ncurses,$1) # This works, except for the special case where we find gpm, but # ncurses is in a nonstandard location via $LIBS, and we really want # to link gpm. cf_ncurses_LIBS="" cf_ncurses_SAVE="$LIBS" AC_CHECK_LIB(gpm,Gpm_Open, [AC_CHECK_LIB(gpm,initscr, [LIBS="$cf_ncurses_SAVE"], [cf_ncurses_LIBS="-lgpm"])]) case $host_os in (freebsd*) # This is only necessary if you are linking against an obsolete # version of ncurses (but it should do no harm, since it's static). if test "$cf_nculib_root" = ncurses ; then AC_CHECK_LIB(mytinfo,tgoto,[cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS"]) fi ;; esac CF_ADD_LIBS($cf_ncurses_LIBS) if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then CF_ADD_LIBS(-l$cf_nculib_root) else CF_FIND_LIBRARY($cf_nculib_root,$cf_nculib_root, [#include <${cf_cv_ncurses_header:-curses.h}>], [initscr()], initscr) fi if test -n "$cf_ncurses_LIBS" ; then AC_MSG_CHECKING(if we can link $cf_nculib_root without $cf_ncurses_LIBS) cf_ncurses_SAVE="$LIBS" for p in $cf_ncurses_LIBS ; do q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` if test "$q" != "$LIBS" ; then LIBS="$q" fi done AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>], [initscr(); mousemask(0,0); tgoto((char *)0, 0, 0);], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) LIBS="$cf_ncurses_SAVE"]) fi CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_nculib_root) AC_DEFINE_UNQUOTED($cf_nculib_ROOT) ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_VERSION version: 14 updated: 2012/10/06 08:57:51 dnl ------------------ dnl Check for the version of ncurses, to aid in reporting bugs, etc. dnl Call CF_CURSES_CPPFLAGS first, or CF_NCURSES_CPPFLAGS. We don't use dnl AC_REQUIRE since that does not work with the shell's if/then/else/fi. AC_DEFUN([CF_NCURSES_VERSION], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_CACHE_CHECK(for ncurses version, cf_cv_ncurses_version,[ cf_cv_ncurses_version=no cf_tempfile=out$$ rm -f $cf_tempfile AC_TRY_RUN([ #include <${cf_cv_ncurses_header:-curses.h}> #include int main() { FILE *fp = fopen("$cf_tempfile", "w"); #ifdef NCURSES_VERSION # ifdef NCURSES_VERSION_PATCH fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); # else fprintf(fp, "%s\n", NCURSES_VERSION); # endif #else # ifdef __NCURSES_H fprintf(fp, "old\n"); # else make an error # endif #endif ${cf_cv_main_return:-return}(0); }],[ cf_cv_ncurses_version=`cat $cf_tempfile`],,[ # This will not work if the preprocessor splits the line after the # Autoconf token. The 'unproto' program does that. cat > conftest.$ac_ext < #undef Autoconf #ifdef NCURSES_VERSION Autoconf NCURSES_VERSION #else #ifdef __NCURSES_H Autoconf "old" #endif ; #endif EOF cf_try="$ac_cpp conftest.$ac_ext 2>&AC_FD_CC | grep '^Autoconf ' >conftest.out" AC_TRY_EVAL(cf_try) if test -f conftest.out ; then cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[[^"]]*"%%' -e 's%".*%%'` test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" rm -f conftest.out fi ]) rm -f $cf_tempfile ]) test "$cf_cv_ncurses_version" = no || AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_NCURSES_WRAP_PREFIX version: 1 updated: 2009/03/28 16:08:10 dnl ---------------------- dnl Check for ncurses "wrap-prefix" used for public variables which have been dnl wrapped with a function to help with concurrency control. AC_DEFUN([CF_NCURSES_WRAP_PREFIX], [ AC_MSG_CHECKING(for ncurses wrap-prefix) AC_ARG_WITH(ncurses-wrap-prefix, [ --with-ncurses-wrap-prefix naming-prefix for ncurses wrapped-variables], [NCURSES_WRAP_PREFIX=$withval], [NCURSES_WRAP_PREFIX=_nc_]) AC_MSG_RESULT($NCURSES_WRAP_PREFIX) AC_SUBST(NCURSES_WRAP_PREFIX) ]) dnl --------------------------------------------------------------------------- dnl CF_NETBSD_FORM_H version: 2 updated: 2012/10/06 16:39:58 dnl ---------------- dnl Check for NetBSD's form.h, which is incompatible with SVr4 and ncurses. dnl Some workarounds are needed in client programs to allow them to compile. AC_DEFUN([CF_NETBSD_FORM_H],[ AC_CACHE_CHECK(for NetBSD form.h,cf_cv_netbsd_form_h,[ AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}> #include ],[ FORM *form; int y = current_field(form)->cursor_ypos; int x = current_field(form)->cursor_xpos; ],[cf_cv_netbsd_form_h=yes ],[cf_cv_netbsd_form_h=no]) ]) test "$cf_cv_netbsd_form_h" = yes && AC_DEFINE(HAVE_NETBSD_FORM_H,1,[Define to 1 if we appear to be using NetBSD form.h]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_NETBSD_MENU_H version: 2 updated: 2012/10/06 16:39:58 dnl ---------------- dnl Check for NetBSD's menu.h, which is incompatible with SVr4 and ncurses. dnl Some workarounds are needed in client programs to allow them to compile. AC_DEFUN([CF_NETBSD_MENU_H],[ AC_CACHE_CHECK(for NetBSD menu.h,cf_cv_netbsd_menu_h,[ AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}> #include ],[ MENU *menu; int y = menu->max_item_width; ],[cf_cv_netbsd_menu_h=yes ],[cf_cv_netbsd_menu_h=no]) ]) test "$cf_cv_netbsd_menu_h" = yes && AC_DEFINE(HAVE_NETBSD_MENU_H,1,[Define to 1 if we appear to be using NetBSD menu.h]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_NO_LEAKS_OPTION version: 6 updated: 2015/04/12 15:39:00 dnl ------------------ dnl see CF_WITH_NO_LEAKS AC_DEFUN([CF_NO_LEAKS_OPTION],[ AC_MSG_CHECKING(if you want to use $1 for testing) AC_ARG_WITH($1, [$2], [AC_DEFINE_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")ifelse([$4],,[ $4 ]) : ${with_cflags:=-g} : ${with_no_leaks:=yes} with_$1=yes], [with_$1=]) AC_MSG_RESULT(${with_$1:-no}) case .$with_cflags in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) CF_ADD_CFLAGS([-g]) ;; esac ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_PATH_SYNTAX version: 16 updated: 2015/04/18 08:56:57 dnl -------------- dnl Check the argument to see that it looks like a pathname. Rewrite it if it dnl begins with one of the prefix/exec_prefix variables, and then again if the dnl result begins with 'NONE'. This is necessary to work around autoconf's dnl delayed evaluation of those symbols. AC_DEFUN([CF_PATH_SYNTAX],[ if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".[$]$1" in (.\[$]\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX ;; (.\[$]{*prefix}*|.\[$]{*dir}*) eval $1="[$]$1" case ".[$]$1" in (.NONE/*) $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%` ;; (*) ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_PDCURSES_X11 version: 13 updated: 2012/10/06 16:39:58 dnl --------------- dnl Configure for PDCurses' X11 library AC_DEFUN([CF_PDCURSES_X11],[ AC_REQUIRE([CF_X_ATHENA]) CF_ACVERSION_CHECK(2.52, [AC_CHECK_TOOLS(XCURSES_CONFIG, xcurses-config, none)], [AC_PATH_PROGS(XCURSES_CONFIG, xcurses-config, none)]) if test "$XCURSES_CONFIG" != none ; then CPPFLAGS="$CPPFLAGS `$XCURSES_CONFIG --cflags`" CF_ADD_LIBS(`$XCURSES_CONFIG --libs`) cf_cv_lib_XCurses=yes else LDFLAGS="$LDFLAGS $X_LIBS" CF_CHECK_CFLAGS($X_CFLAGS) AC_CHECK_LIB(X11,XOpenDisplay, [CF_ADD_LIBS(-lX11)],, [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS]) AC_CACHE_CHECK(for XCurses library,cf_cv_lib_XCurses,[ CF_ADD_LIBS(-lXCurses) AC_TRY_LINK([ #include char *XCursesProgramName = "test"; ],[XCursesExit();], [cf_cv_lib_XCurses=yes], [cf_cv_lib_XCurses=no]) ]) fi if test $cf_cv_lib_XCurses = yes ; then AC_DEFINE(UNIX,1,[Define to 1 if using PDCurses on Unix]) AC_DEFINE(XCURSES,1,[Define to 1 if using PDCurses on Unix]) AC_CHECK_HEADER(xcurses.h, AC_DEFINE(HAVE_XCURSES,1,[Define to 1 if using PDCurses on Unix])) else AC_MSG_ERROR(Cannot link with XCurses) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_PKG_CONFIG version: 10 updated: 2015/04/26 18:06:58 dnl ------------- dnl Check for the package-config program, unless disabled by command-line. AC_DEFUN([CF_PKG_CONFIG], [ AC_MSG_CHECKING(if you want to use pkg-config) AC_ARG_WITH(pkg-config, [ --with-pkg-config{=path} enable/disable use of pkg-config], [cf_pkg_config=$withval], [cf_pkg_config=yes]) AC_MSG_RESULT($cf_pkg_config) case $cf_pkg_config in (no) PKG_CONFIG=none ;; (yes) CF_ACVERSION_CHECK(2.52, [AC_PATH_TOOL(PKG_CONFIG, pkg-config, none)], [AC_PATH_PROG(PKG_CONFIG, pkg-config, none)]) ;; (*) PKG_CONFIG=$withval ;; esac test -z "$PKG_CONFIG" && PKG_CONFIG=none if test "$PKG_CONFIG" != none ; then CF_PATH_SYNTAX(PKG_CONFIG) elif test "x$cf_pkg_config" != xno ; then AC_MSG_WARN(pkg-config is not installed) fi AC_SUBST(PKG_CONFIG) ])dnl dnl --------------------------------------------------------------------------- dnl CF_POSIX_C_SOURCE version: 9 updated: 2015/04/12 15:39:00 dnl ----------------- dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed. dnl dnl POSIX.1-1990 _POSIX_SOURCE dnl POSIX.1-1990 and _POSIX_SOURCE and dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2 dnl Bindings Option dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L dnl X/Open 2000 _POSIX_C_SOURCE=200112L dnl dnl Parameters: dnl $1 is the nominal value for _POSIX_C_SOURCE AC_DEFUN([CF_POSIX_C_SOURCE], [ cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1]) cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE) CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE) AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[ CF_MSG_LOG(if the symbol is already defined go no further) AC_TRY_COMPILE([#include ],[ #ifndef _POSIX_C_SOURCE make an error #endif], [cf_cv_posix_c_source=no], [cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[[12]]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then AC_TRY_COMPILE([#include ],[ #ifdef _POSIX_SOURCE make an error #endif],[], cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE") fi CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE) CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" CF_MSG_LOG(if the second compile does not leave our definition intact error) AC_TRY_COMPILE([#include ],[ #ifndef _POSIX_C_SOURCE make an error #endif],, [cf_cv_posix_c_source=no]) CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" ]) ]) if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" CF_ADD_CFLAGS($cf_cv_posix_c_source) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_PRG_RULES version: 1 updated: 2006/06/03 11:45:08 dnl ------------ dnl Append definitions and rules for the given programs to the subdirectory dnl Makefiles, and the recursion rule for the top-level Makefile. dnl dnl parameters dnl $1 = script to run dnl $2 = list of subdirectories dnl dnl variables dnl $AWK AC_DEFUN([CF_PRG_RULES], [ for cf_dir in $2 do if test ! -d $srcdir/$cf_dir; then continue elif test -f $srcdir/$cf_dir/programs; then $AWK -f $1 $srcdir/$cf_dir/programs >>$cf_dir/Makefile fi done ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_CC version: 4 updated: 2014/07/12 18:57:58 dnl ---------- dnl standard check for CC, plus followup sanity checks dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name AC_DEFUN([CF_PROG_CC],[ ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)]) CF_GCC_VERSION CF_ACVERSION_CHECK(2.52, [AC_PROG_CC_STDC], [CF_ANSI_CC_REQD]) CF_CC_ENV_FLAGS ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_INSTALL version: 7 updated: 2015/04/18 08:56:57 dnl --------------- dnl Force $INSTALL to be an absolute-path. Otherwise, edit_man.sh and the dnl misc/tabset install won't work properly. Usually this happens only when dnl using the fallback mkinstalldirs script AC_DEFUN([CF_PROG_INSTALL], [AC_PROG_INSTALL case $INSTALL in (/*) ;; (*) CF_DIRNAME(cf_dir,$INSTALL) test -z "$cf_dir" && cf_dir=. INSTALL=`cd $cf_dir && pwd`/`echo $INSTALL | sed -e 's%^.*/%%'` ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_LINT version: 2 updated: 2009/08/12 04:43:14 dnl ------------ AC_DEFUN([CF_PROG_LINT], [ AC_CHECK_PROGS(LINT, tdlint lint alint splint lclint) AC_SUBST(LINT_OPTS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50 dnl ---------------- dnl Remove all -U and -D options that refer to the given symbol from a list dnl of C compiler options. This works around the problem that not all dnl compilers process -U and -D options from left-to-right, so a -U option dnl cannot be used to cancel the effect of a preceding -D option. dnl dnl $1 = target (which could be the same as the source variable) dnl $2 = source (including '$') dnl $3 = symbol to remove define([CF_REMOVE_DEFINE], [ $1=`echo "$2" | \ sed -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[[ ]]/ /g' \ -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'` ])dnl dnl --------------------------------------------------------------------------- dnl CF_RPATH_HACK version: 11 updated: 2013/09/01 13:02:00 dnl ------------- AC_DEFUN([CF_RPATH_HACK], [ AC_REQUIRE([CF_LD_RPATH_OPT]) AC_MSG_CHECKING(for updated LDFLAGS) if test -n "$LD_RPATH_OPT" ; then AC_MSG_RESULT(maybe) AC_CHECK_PROGS(cf_ldd_prog,ldd,no) cf_rpath_list="/usr/lib /lib" if test "$cf_ldd_prog" != no then cf_rpath_oops= AC_TRY_LINK([#include ], [printf("Hello");], [cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq` cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort | uniq`]) # If we passed the link-test, but get a "not found" on a given library, # this could be due to inept reconfiguration of gcc to make it only # partly honor /usr/local/lib (or whatever). Sometimes this behavior # is intentional, e.g., installing gcc in /usr/bin and suppressing the # /usr/local libraries. if test -n "$cf_rpath_oops" then for cf_rpath_src in $cf_rpath_oops do for cf_rpath_dir in \ /usr/local \ /usr/pkg \ /opt/sfw do if test -f $cf_rpath_dir/lib/$cf_rpath_src then CF_VERBOSE(...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src) LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib" break fi done done fi fi CF_VERBOSE(...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS) CF_RPATH_HACK_2(LDFLAGS) CF_RPATH_HACK_2(LIBS) CF_VERBOSE(...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(EXTRA_LDFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_RPATH_HACK_2 version: 7 updated: 2015/04/12 15:39:00 dnl --------------- dnl Do one set of substitutions for CF_RPATH_HACK, adding an rpath option to dnl EXTRA_LDFLAGS for each -L option found. dnl dnl $cf_rpath_list contains a list of directories to ignore. dnl dnl $1 = variable name to update. The LDFLAGS variable should be the only one, dnl but LIBS often has misplaced -L options. AC_DEFUN([CF_RPATH_HACK_2], [ CF_VERBOSE(...checking $1 [$]$1) cf_rpath_dst= for cf_rpath_src in [$]$1 do case $cf_rpath_src in (-L*) # check if this refers to a directory which we will ignore cf_rpath_skip=no if test -n "$cf_rpath_list" then for cf_rpath_item in $cf_rpath_list do if test "x$cf_rpath_src" = "x-L$cf_rpath_item" then cf_rpath_skip=yes break fi done fi if test "$cf_rpath_skip" = no then # transform the option if test "$LD_RPATH_OPT" = "-R " ; then cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` else cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` fi # if we have not already added this, add it now cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" then CF_VERBOSE(...Filter $cf_rpath_src ->$cf_rpath_tmp) EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" fi fi ;; esac cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" done $1=$cf_rpath_dst CF_VERBOSE(...checked $1 [$]$1) AC_SUBST(EXTRA_LDFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_SIG_ATOMIC_T version: 3 updated: 2012/10/04 20:12:20 dnl --------------- dnl signal handler, but there are some gcc depedencies in that recommendation. dnl Try anyway. AC_DEFUN([CF_SIG_ATOMIC_T], [ AC_MSG_CHECKING(for signal global datatype) AC_CACHE_VAL(cf_cv_sig_atomic_t,[ for cf_type in \ "volatile sig_atomic_t" \ "sig_atomic_t" \ "int" do AC_TRY_COMPILE([ #include #include #include extern $cf_type x; $cf_type x; static void handler(int sig) { x = 5; }], [signal(SIGINT, handler); x = 1], [cf_cv_sig_atomic_t=$cf_type], [cf_cv_sig_atomic_t=no]) test "$cf_cv_sig_atomic_t" != no && break done ]) AC_MSG_RESULT($cf_cv_sig_atomic_t) test "$cf_cv_sig_atomic_t" != no && AC_DEFINE_UNQUOTED(SIG_ATOMIC_T, $cf_cv_sig_atomic_t,[Define to signal global datatype]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_SUBDIR_PATH version: 7 updated: 2014/12/04 04:33:06 dnl -------------- dnl Construct a search-list for a nonstandard header/lib-file dnl $1 = the variable to return as result dnl $2 = the package name dnl $3 = the subdirectory, e.g., bin, include or lib AC_DEFUN([CF_SUBDIR_PATH], [ $1= CF_ADD_SUBDIR_PATH($1,$2,$3,$prefix,NONE) for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ [$]HOME do CF_ADD_SUBDIR_PATH($1,$2,$3,$cf_subdir_prefix,$prefix) done ])dnl dnl --------------------------------------------------------------------------- dnl CF_SYS_TIME_SELECT version: 6 updated: 2015/04/18 08:56:57 dnl ------------------ dnl Check if we can include with ; this breaks on dnl older SCO configurations. AC_DEFUN([CF_SYS_TIME_SELECT], [ AC_MSG_CHECKING(if sys/time.h works with sys/select.h) AC_CACHE_VAL(cf_cv_sys_time_select,[ AC_TRY_COMPILE([ #include #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif ],[],[cf_cv_sys_time_select=yes], [cf_cv_sys_time_select=no]) ]) AC_MSG_RESULT($cf_cv_sys_time_select) test "$cf_cv_sys_time_select" = yes && AC_DEFINE(HAVE_SYS_TIME_SELECT,1,[Define to 1 if we can include with ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_TERM_HEADER version: 4 updated: 2015/04/15 19:08:48 dnl -------------- dnl Look for term.h, which is part of X/Open curses. It defines the interface dnl to terminfo database. Usually it is in the same include-path as curses.h, dnl but some packagers change this, breaking various applications. AC_DEFUN([CF_TERM_HEADER],[ AC_CACHE_CHECK(for terminfo header, cf_cv_term_header,[ case ${cf_cv_ncurses_header} in (*/ncurses.h|*/ncursesw.h) cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[[^.]]*\.h$%term.h%'` ;; (*) cf_term_header=term.h ;; esac for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" do AC_TRY_COMPILE([#include #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> ],[int x = auto_left_margin],[ cf_cv_term_header="$cf_test"],[ cf_cv_term_header=unknown ]) test "$cf_cv_term_header" != unknown && break done ]) # Set definitions to allow ifdef'ing to accommodate subdirectories case $cf_cv_term_header in (*term.h) AC_DEFINE(HAVE_TERM_H,1,[Define to 1 if we have term.h]) ;; esac case $cf_cv_term_header in (ncurses/term.h) AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h]) ;; (ncursesw/term.h) AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h]) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_TOP_BUILDDIR version: 2 updated: 2013/07/27 17:38:32 dnl --------------- dnl Define a top_builddir symbol, for applications that need an absolute path. AC_DEFUN([CF_TOP_BUILDDIR], [ top_builddir=ifelse($1,,`pwd`,$1) AC_SUBST(top_builddir) ])dnl dnl --------------------------------------------------------------------------- dnl CF_TPUTS_PROTO version: 3 updated: 2015/04/17 21:26:14 dnl -------------- dnl Check for type of function-pointer passed to tputs. Some old dnl implementations used functions that had different prototypes, making it dnl hard to compile portable programs using tputs. AC_DEFUN([CF_TPUTS_PROTO],[ CF_CURSES_FUNCS(tputs) if test x$cf_cv_func_tputs = xyes then cf_done=no for cf_arg in int char do for cf_ret in int void do if test $cf_ret = void then cf_return="/* nothing */" else cf_return="return value" fi AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_cv_term_header> static $cf_ret outc($cf_arg value) { $cf_return; } ],[ tputs("hello", 0, outc); ${cf_cv_main_return:-return}(0); ],[ CF_VERBOSE([prototype $cf_ret func($cf_arg value)]) cat >>confdefs.h < #include #include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_cv_xopen_source=no], [cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" AC_TRY_COMPILE([ #include #include #include ],[ #ifdef _XOPEN_SOURCE make an error #endif], [cf_cv_xopen_source=no], [cf_cv_xopen_source=$cf_XOPEN_SOURCE]) CPPFLAGS="$cf_save" ]) ]) if test "$cf_cv_xopen_source" != no ; then CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE) CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE) cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" CF_ADD_CFLAGS($cf_temp_xopen_source) fi ]) dnl --------------------------------------------------------------------------- dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59 dnl -------- dnl Make an uppercase version of a variable dnl $1=uppercase($2) AC_DEFUN([CF_UPPER], [ $1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` ])dnl dnl --------------------------------------------------------------------------- dnl CF_UTF8_LIB version: 8 updated: 2012/10/06 08:57:51 dnl ----------- dnl Check for multibyte support, and if not found, utf8 compatibility library AC_DEFUN([CF_UTF8_LIB], [ AC_CACHE_CHECK(for multibyte character support,cf_cv_utf8_lib,[ cf_save_LIBS="$LIBS" AC_TRY_LINK([ #include ],[putwc(0,0);], [cf_cv_utf8_lib=yes], [CF_FIND_LINKAGE([ #include ],[putwc(0,0);],utf8, [cf_cv_utf8_lib=add-on], [cf_cv_utf8_lib=no]) ])]) # HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between # ncurses/ncursesw: if test "$cf_cv_utf8_lib" = "add-on" ; then AC_DEFINE(HAVE_LIBUTF8_H,1,[Define to 1 if we should include libutf8.h]) CF_ADD_INCDIR($cf_cv_header_path_utf8) CF_ADD_LIBDIR($cf_cv_library_path_utf8) CF_ADD_LIBS($cf_cv_library_file_utf8) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12 dnl ---------- dnl Use AC_VERBOSE w/o the warnings AC_DEFUN([CF_VERBOSE], [test -n "$verbose" && echo " $1" 1>&AC_FD_MSG CF_MSG_LOG([$1]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WCHAR_TYPE version: 4 updated: 2012/10/06 16:39:58 dnl ------------- dnl Check if type wide-character type $1 is declared, and if so, which header dnl file is needed. The second parameter is used to set a shell variable when dnl the type is not found. The first parameter sets a shell variable for the dnl opposite sense. AC_DEFUN([CF_WCHAR_TYPE], [ # This is needed on Tru64 5.0 to declare $1 AC_CACHE_CHECK(if we must include wchar.h to declare $1,cf_cv_$1,[ AC_TRY_COMPILE([ #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif], [$1 state], [cf_cv_$1=no], [AC_TRY_COMPILE([ #include #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif], [$1 value], [cf_cv_$1=yes], [cf_cv_$1=unknown])])]) if test "$cf_cv_$1" = yes ; then AC_DEFINE(NEED_WCHAR_H,1,[Define to 1 if we must include wchar.h]) NEED_WCHAR_H=1 fi ifelse([$2],,,[ # if we do not find $1 in either place, use substitution to provide a fallback. if test "$cf_cv_$1" = unknown ; then $2=1 fi ]) ifelse($3,,,[ # if we find $1 in either place, use substitution to provide a fallback. if test "$cf_cv_$1" != unknown ; then $3=1 fi ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_CURSES_DIR version: 3 updated: 2010/11/20 17:02:38 dnl ------------------ dnl Wrapper for AC_ARG_WITH to specify directory under which to look for curses dnl libraries. AC_DEFUN([CF_WITH_CURSES_DIR],[ AC_MSG_CHECKING(for specific curses-directory) AC_ARG_WITH(curses-dir, [ --with-curses-dir=DIR directory in which (n)curses is installed], [cf_cv_curses_dir=$withval], [cf_cv_curses_dir=no]) AC_MSG_RESULT($cf_cv_curses_dir) if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then CF_PATH_SYNTAX(withval) if test -d "$cf_cv_curses_dir" then CF_ADD_INCDIR($cf_cv_curses_dir/include) CF_ADD_LIBDIR($cf_cv_curses_dir/lib) fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47 dnl ---------------- dnl Configure-option for dbmalloc. The optional parameter is used to override dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests. AC_DEFUN([CF_WITH_DBMALLOC],[ CF_NO_LEAKS_OPTION(dbmalloc, [ --with-dbmalloc test: use Conor Cahill's dbmalloc library], [USE_DBMALLOC]) if test "$with_dbmalloc" = yes ; then AC_CHECK_HEADER(dbmalloc.h, [AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47 dnl --------------- dnl Configure-option for dmalloc. The optional parameter is used to override dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests. AC_DEFUN([CF_WITH_DMALLOC],[ CF_NO_LEAKS_OPTION(dmalloc, [ --with-dmalloc test: use Gray Watson's dmalloc library], [USE_DMALLOC]) if test "$with_dmalloc" = yes ; then AC_CHECK_HEADER(dmalloc.h, [AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_NCURSES_ETC version: 4 updated: 2015/04/25 20:53:11 dnl ------------------- dnl Use this macro for programs which use any variant of "curses", e.g., dnl "ncurses", and "PDCurses". Programs that can use curses and some unrelated dnl library (such as slang) should use a "--with-screen=XXX" option. dnl dnl This does not use AC_DEFUN, because that would tell autoconf to run each dnl of the macros inside this one - before this macro. define([CF_WITH_NCURSES_ETC],[ CF_WITH_CURSES_DIR cf_cv_screen=curses AC_MSG_CHECKING(for specified curses library type) AC_ARG_WITH(screen, [ --with-screen=XXX use specified curses-libraries], [cf_cv_screen=$withval],[ AC_ARG_WITH(ncursesw, [ --with-ncursesw use wide ncurses-libraries], [cf_cv_screen=ncursesw],[ AC_ARG_WITH(ncurses, [ --with-ncurses use ncurses-libraries], [cf_cv_screen=ncurses],[ AC_ARG_WITH(pdcurses, [ --with-pdcurses compile/link with pdcurses X11 library], [cf_cv_screen=pdcurses],[ AC_ARG_WITH(curses-colr, [ --with-curses-colr compile/link with HPUX 10.x color-curses], [cf_cv_screen=curses_colr],[ AC_ARG_WITH(curses-5lib, [ --with-curses-5lib compile/link with SunOS 5lib curses], [cf_cv_screen=curses_5lib])])])])])]) AC_MSG_RESULT($cf_cv_screen) case $cf_cv_screen in (curses|curses_*) CF_CURSES_CONFIG ;; (ncursesw*) CF_UTF8_LIB CF_NCURSES_CONFIG($cf_cv_screen) ;; (ncurses*) CF_NCURSES_CONFIG($cf_cv_screen) ;; (pdcurses) CF_PDCURSES_X11 ;; (*) AC_MSG_ERROR(unexpected screen-value: $cf_cv_screen) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_VALGRIND version: 1 updated: 2006/12/14 18:00:21 dnl ---------------- AC_DEFUN([CF_WITH_VALGRIND],[ CF_NO_LEAKS_OPTION(valgrind, [ --with-valgrind test: use valgrind], [USE_VALGRIND]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_XOPEN_CURSES version: 13 updated: 2015/12/12 20:59:52 dnl --------------- dnl Test if we should define X/Open source for curses, needed on Digital Unix dnl 4.x, to see the extended functions, but breaks on IRIX 6.x. dnl dnl The getbegyx() check is needed for HPUX, which omits legacy macros such dnl as getbegy(). The latter is better design, but the former is standard. AC_DEFUN([CF_XOPEN_CURSES], [ AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl AC_CACHE_CHECK(definition to turn on extended curses functions,cf_cv_need_xopen_extension,[ cf_cv_need_xopen_extension=unknown AC_TRY_LINK([ #include #include <${cf_cv_ncurses_header:-curses.h}>],[ #if defined(NCURSES_VERSION_PATCH) #if (NCURSES_VERSION_PATCH < 20100501) && (NCURSES_VERSION_PATCH >= 20100403) make an error #endif #endif #ifdef NCURSES_VERSION cchar_t check; int check2 = curs_set((int)sizeof(check)); #endif long x = winnstr(stdscr, "", 0); int x1, y1; getbegyx(stdscr, y1, x1)], [cf_cv_need_xopen_extension=none], [ for cf_try_xopen_extension in _XOPEN_SOURCE_EXTENDED NCURSES_WIDECHAR do AC_TRY_LINK([ #define $cf_try_xopen_extension 1 #include #include <${cf_cv_ncurses_header:-curses.h}>],[ #ifdef NCURSES_VERSION cchar_t check; int check2 = curs_set((int)sizeof(check)); #endif long x = winnstr(stdscr, "", 0); int x1, y1; getbegyx(stdscr, y1, x1)], [cf_cv_need_xopen_extension=$cf_try_xopen_extension; break]) done ]) ]) case $cf_cv_need_xopen_extension in (*_*) CPPFLAGS="$CPPFLAGS -D$cf_cv_need_xopen_extension" ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_XOPEN_SOURCE version: 50 updated: 2015/10/17 19:03:33 dnl --------------- dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions, dnl or adapt to the vendor's definitions to get equivalent functionality, dnl without losing the common non-POSIX features. dnl dnl Parameters: dnl $1 is the nominal value for _XOPEN_SOURCE dnl $2 is the nominal value for _POSIX_C_SOURCE AC_DEFUN([CF_XOPEN_SOURCE],[ AC_REQUIRE([AC_CANONICAL_HOST]) cf_XOPEN_SOURCE=ifelse([$1],,500,[$1]) cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2]) cf_xopen_source= case $host_os in (aix[[4-7]]*) cf_xopen_source="-D_ALL_SOURCE" ;; (cygwin|msys) cf_XOPEN_SOURCE=600 ;; (darwin[[0-8]].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; (darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; (freebsd*|dragonfly*) # 5.x headers associate # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L cf_POSIX_C_SOURCE=200112L cf_XOPEN_SOURCE=600 cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" ;; (hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; (hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; (irix[[56]].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; (linux*|gnu*|mint*|k*bsd*-gnu) CF_GNU_SOURCE ;; (minix*) cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... ;; (mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks and other headers which use u_int / u_short types cf_XOPEN_SOURCE= CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) ;; (netbsd*) cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw ;; (openbsd[[4-9]]*) # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=600 ;; (openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; (os2*) cf_XOPEN_SOURCE= ;; (osf[[45]]*) cf_xopen_source="-D_OSF_SOURCE" ;; (nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; (sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; (solaris2.*) cf_xopen_source="-D__EXTENSIONS__" cf_cv_xopen_source=broken ;; (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2) cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE= ;; (*) CF_TRY_XOPEN_SOURCE CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) ;; esac if test -n "$cf_xopen_source" ; then CF_ADD_CFLAGS($cf_xopen_source,true) fi dnl In anything but the default case, we may have system-specific setting dnl which is still not guaranteed to provide all of the entrypoints that dnl _XOPEN_SOURCE would yield. if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then AC_MSG_CHECKING(if _XOPEN_SOURCE really is set) AC_TRY_COMPILE([#include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_XOPEN_SOURCE_set=yes], [cf_XOPEN_SOURCE_set=no]) AC_MSG_RESULT($cf_XOPEN_SOURCE_set) if test $cf_XOPEN_SOURCE_set = yes then AC_TRY_COMPILE([#include ],[ #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE make an error #endif], [cf_XOPEN_SOURCE_set_ok=yes], [cf_XOPEN_SOURCE_set_ok=no]) if test $cf_XOPEN_SOURCE_set_ok = no then AC_MSG_WARN(_XOPEN_SOURCE is lower than requested) fi else CF_TRY_XOPEN_SOURCE fi fi ]) dnl --------------------------------------------------------------------------- dnl CF_X_ATHENA version: 23 updated: 2015/04/12 15:39:00 dnl ----------- dnl Check for Xaw (Athena) libraries dnl dnl Sets $cf_x_athena according to the flavor of Xaw which is used. AC_DEFUN([CF_X_ATHENA], [ cf_x_athena=${cf_x_athena:-Xaw} AC_MSG_CHECKING(if you want to link with Xaw 3d library) withval= AC_ARG_WITH(Xaw3d, [ --with-Xaw3d link with Xaw 3d library]) if test "$withval" = yes ; then cf_x_athena=Xaw3d AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING(if you want to link with Xaw 3d xft library) withval= AC_ARG_WITH(Xaw3dxft, [ --with-Xaw3dxft link with Xaw 3d xft library]) if test "$withval" = yes ; then cf_x_athena=Xaw3dxft AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING(if you want to link with neXT Athena library) withval= AC_ARG_WITH(neXtaw, [ --with-neXtaw link with neXT Athena library]) if test "$withval" = yes ; then cf_x_athena=neXtaw AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING(if you want to link with Athena-Plus library) withval= AC_ARG_WITH(XawPlus, [ --with-XawPlus link with Athena-Plus library]) if test "$withval" = yes ; then cf_x_athena=XawPlus AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi cf_x_athena_lib="" if test "$PKG_CONFIG" != none ; then cf_athena_list= test "$cf_x_athena" = Xaw && cf_athena_list="xaw8 xaw7 xaw6" for cf_athena_pkg in \ $cf_athena_list \ ${cf_x_athena} \ ${cf_x_athena}-devel \ lib${cf_x_athena} \ lib${cf_x_athena}-devel do CF_TRY_PKG_CONFIG($cf_athena_pkg,[ cf_x_athena_lib="$cf_pkgconfig_libs" CF_UPPER(cf_x_athena_LIBS,HAVE_LIB_$cf_x_athena) AC_DEFINE_UNQUOTED($cf_x_athena_LIBS) CF_TRIM_X_LIBS AC_CACHE_CHECK(for usable $cf_x_athena/Xmu package,cf_cv_xaw_compat,[ AC_TRY_LINK([ #include ],[ int check = XmuCompareISOLatin1("big", "small") ],[cf_cv_xaw_compat=yes],[cf_cv_xaw_compat=no])]) if test "$cf_cv_xaw_compat" = no then # workaround for broken ".pc" files... case "$cf_x_athena_lib" in (*-lXmu*) ;; (*) CF_VERBOSE(work around broken package) cf_save_xmu="$LIBS" cf_first_lib=`echo "$cf_save_xmu" | sed -e 's/^[ ][ ]*//' -e 's/ .*//'` CF_TRY_PKG_CONFIG(xmu,[ LIBS="$cf_save_xmu" CF_ADD_LIB_AFTER($cf_first_lib,$cf_pkgconfig_libs) ],[ CF_ADD_LIB_AFTER($cf_first_lib,-lXmu) ]) CF_TRIM_X_LIBS ;; esac fi break]) done fi if test -z "$cf_x_athena_lib" ; then CF_X_EXT CF_X_TOOLKIT CF_X_ATHENA_CPPFLAGS($cf_x_athena) CF_X_ATHENA_LIBS($cf_x_athena) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_X_ATHENA_CPPFLAGS version: 5 updated: 2010/05/26 17:35:30 dnl -------------------- dnl Normally invoked by CF_X_ATHENA, with $1 set to the appropriate flavor of dnl the Athena widgets, e.g., Xaw, Xaw3d, neXtaw. AC_DEFUN([CF_X_ATHENA_CPPFLAGS], [ cf_x_athena_root=ifelse([$1],,Xaw,[$1]) cf_x_athena_inc="" for cf_path in default \ /usr/contrib/X11R6 \ /usr/contrib/X11R5 \ /usr/lib/X11R5 \ /usr/local do if test -z "$cf_x_athena_inc" ; then cf_save="$CPPFLAGS" cf_test=X11/$cf_x_athena_root/SimpleMenu.h if test $cf_path != default ; then CPPFLAGS="$cf_save -I$cf_path/include" AC_MSG_CHECKING(for $cf_test in $cf_path) else AC_MSG_CHECKING(for $cf_test) fi AC_TRY_COMPILE([ #include #include <$cf_test>],[], [cf_result=yes], [cf_result=no]) AC_MSG_RESULT($cf_result) if test "$cf_result" = yes ; then cf_x_athena_inc=$cf_path break else CPPFLAGS="$cf_save" fi fi done if test -z "$cf_x_athena_inc" ; then AC_MSG_WARN( [Unable to successfully find Athena header files with test program]) elif test "$cf_x_athena_inc" != default ; then CPPFLAGS="$CPPFLAGS -I$cf_x_athena_inc" fi ]) dnl --------------------------------------------------------------------------- dnl CF_X_ATHENA_LIBS version: 12 updated: 2011/07/17 19:55:02 dnl ---------------- dnl Normally invoked by CF_X_ATHENA, with $1 set to the appropriate flavor of dnl the Athena widgets, e.g., Xaw, Xaw3d, neXtaw. AC_DEFUN([CF_X_ATHENA_LIBS], [AC_REQUIRE([CF_X_TOOLKIT]) cf_x_athena_root=ifelse([$1],,Xaw,[$1]) cf_x_athena_lib="" for cf_path in default \ /usr/contrib/X11R6 \ /usr/contrib/X11R5 \ /usr/lib/X11R5 \ /usr/local do for cf_lib in \ ${cf_x_athena_root} \ ${cf_x_athena_root}7 \ ${cf_x_athena_root}6 do for cf_libs in \ "-l$cf_lib -lXmu" \ "-l$cf_lib -lXpm -lXmu" \ "-l${cf_lib}_s -lXmu_s" do if test -z "$cf_x_athena_lib" ; then cf_save="$LIBS" cf_test=XawSimpleMenuAddGlobalActions if test $cf_path != default ; then CF_ADD_LIBS(-L$cf_path/lib $cf_libs) AC_MSG_CHECKING(for $cf_libs in $cf_path) else CF_ADD_LIBS($cf_libs) AC_MSG_CHECKING(for $cf_test in $cf_libs) fi AC_TRY_LINK([ #include #include ],[ $cf_test((XtAppContext) 0)], [cf_result=yes], [cf_result=no]) AC_MSG_RESULT($cf_result) if test "$cf_result" = yes ; then cf_x_athena_lib="$cf_libs" break fi LIBS="$cf_save" fi done # cf_libs test -n "$cf_x_athena_lib" && break done # cf_lib done if test -z "$cf_x_athena_lib" ; then AC_MSG_ERROR( [Unable to successfully link Athena library (-l$cf_x_athena_root) with test program]) fi CF_UPPER(cf_x_athena_LIBS,HAVE_LIB_$cf_x_athena) AC_DEFINE_UNQUOTED($cf_x_athena_LIBS) ]) dnl --------------------------------------------------------------------------- dnl CF_X_EXT version: 3 updated: 2010/06/02 05:03:05 dnl -------- AC_DEFUN([CF_X_EXT],[ CF_TRY_PKG_CONFIG(Xext,,[ AC_CHECK_LIB(Xext,XextCreateExtension, [CF_ADD_LIB(Xext)])]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_X_TOOLKIT version: 23 updated: 2015/04/12 15:39:00 dnl ------------ dnl Check for X Toolkit libraries AC_DEFUN([CF_X_TOOLKIT], [ AC_REQUIRE([AC_PATH_XTRA]) AC_REQUIRE([CF_CHECK_CACHE]) # OSX is schizoid about who owns /usr/X11 (old) versus /opt/X11 (new), and (and # in some cases has installed dummy files in the former, other cases replaced # it with a link to the new location). This complicates the configure script. # Check for that pitfall, and recover using pkg-config # # If none of these are set, the configuration is almost certainly broken. if test -z "${X_CFLAGS}${X_PRE_LIBS}${X_LIBS}${X_EXTRA_LIBS}" then CF_TRY_PKG_CONFIG(x11,,[AC_MSG_WARN(unable to find X11 library)]) CF_TRY_PKG_CONFIG(ice,,[AC_MSG_WARN(unable to find ICE library)]) CF_TRY_PKG_CONFIG(sm,,[AC_MSG_WARN(unable to find SM library)]) CF_TRY_PKG_CONFIG(xt,,[AC_MSG_WARN(unable to find Xt library)]) fi cf_have_X_LIBS=no CF_TRY_PKG_CONFIG(xt,[ case "x$LIBS" in (*-lX11*) ;; (*) # we have an "xt" package, but it may omit Xt's dependency on X11 AC_CACHE_CHECK(for usable X dependency,cf_cv_xt_x11_compat,[ AC_TRY_LINK([ #include ],[ int rc1 = XDrawLine((Display*) 0, (Drawable) 0, (GC) 0, 0, 0, 0, 0); int rc2 = XClearWindow((Display*) 0, (Window) 0); int rc3 = XMoveWindow((Display*) 0, (Window) 0, 0, 0); int rc4 = XMoveResizeWindow((Display*)0, (Window)0, 0, 0, 0, 0); ],[cf_cv_xt_x11_compat=yes],[cf_cv_xt_x11_compat=no])]) if test "$cf_cv_xt_x11_compat" = no then CF_VERBOSE(work around broken X11 dependency) # 2010/11/19 - good enough until a working Xt on Xcb is delivered. CF_TRY_PKG_CONFIG(x11,,[CF_ADD_LIB_AFTER(-lXt,-lX11)]) fi ;; esac AC_CACHE_CHECK(for usable X Toolkit package,cf_cv_xt_ice_compat,[ AC_TRY_LINK([ #include ],[int num = IceConnectionNumber(0) ],[cf_cv_xt_ice_compat=yes],[cf_cv_xt_ice_compat=no])]) if test "$cf_cv_xt_ice_compat" = no then # workaround for broken ".pc" files used for X Toolkit. case "x$X_PRE_LIBS" in (*-lICE*) case "x$LIBS" in (*-lICE*) ;; (*) CF_VERBOSE(work around broken ICE dependency) CF_TRY_PKG_CONFIG(ice, [CF_TRY_PKG_CONFIG(sm)], [CF_ADD_LIB_AFTER(-lXt,$X_PRE_LIBS)]) ;; esac ;; esac fi cf_have_X_LIBS=yes ],[ LDFLAGS="$X_LIBS $LDFLAGS" CF_CHECK_CFLAGS($X_CFLAGS) AC_CHECK_FUNC(XOpenDisplay,,[ AC_CHECK_LIB(X11,XOpenDisplay, [CF_ADD_LIB(X11)],, [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])]) AC_CHECK_FUNC(XtAppInitialize,,[ AC_CHECK_LIB(Xt, XtAppInitialize, [AC_DEFINE(HAVE_LIBXT,1,[Define to 1 if we can compile with the Xt library]) cf_have_X_LIBS=Xt LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS"],, [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])]) ]) if test $cf_have_X_LIBS = no ; then AC_MSG_WARN( [Unable to successfully link X Toolkit library (-lXt) with test program. You will have to check and add the proper libraries by hand to makefile.]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF__CURSES_HEAD version: 2 updated: 2010/10/23 15:54:49 dnl --------------- dnl Define a reusable chunk which includes and when they dnl are both available. define([CF__CURSES_HEAD],[ #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif ]) ncurses-6.0-20160213/test/savescreen.c0000644000175100001440000002514212566175126015754 0ustar tomusers/**************************************************************************** * Copyright (c) 2007-2011,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: savescreen.c,v 1.28 2015/08/22 22:40:22 tom Exp $ * * Demonstrate save/restore functions from the curses library. * Thomas Dickey - 2007/7/14 */ #include #if HAVE_SCR_DUMP #include #include #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif static bool use_init = FALSE; static bool keep_dumps = FALSE; static int fexists(const char *name) { struct stat sb; return (stat(name, &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFREG); } static void setup_next(void) { curs_set(1); reset_shell_mode(); } static void cleanup(char *files[]) { int n; if (!keep_dumps) { for (n = 0; files[n] != 0; ++n) { unlink(files[n]); } } } static int load_screen(char *filename) { int result; if (use_init) { if ((result = scr_init(filename)) != ERR) result = scr_restore(filename); } else { result = scr_set(filename); } return result; } /* * scr_restore() or scr_set() operates on curscr. If we read a character using * getch() that will refresh stdscr, wiping out the result. To avoid that, * copy the data back from curscr to stdscr. */ static void after_load(void) { overwrite(curscr, stdscr); doupdate(); } static void show_what(int which, int last) { int y, x, n; time_t now; char *mytime; getyx(stdscr, y, x); move(0, 0); printw("Saved %d of %d (? for help)", which, last + 1); now = time((time_t *) 0); mytime = ctime(&now); for (n = (int) strlen(mytime) - 1; n >= 0; --n) { if (isspace(UChar(mytime[n]))) { mytime[n] = '\0'; } else { break; } } mvprintw(0, (COLS - n - 2), " %s", mytime); move(y, x); refresh(); } static int get_command(int which, int last) { int ch; timeout(50); do { show_what(which, last); ch = getch(); } while (ch == ERR); return ch; } static void show_help(const char **help) { WINDOW *mywin = newwin(LINES, COLS, 0, 0); int n; box(mywin, 0, 0); wmove(mywin, 1, 1); for (n = 0; help[n] != 0; ++n) { wmove(mywin, 1 + n, 2); wprintw(mywin, "%.*s", COLS - 4, help[n]); } wgetch(mywin); delwin(mywin); touchwin(stdscr); refresh(); } static void editor_help(void) { static const char *msgs[] = { "You are now in the screen-editor, which allows you to make some", "lines on the screen, as well as save copies of the screen to a", "temporary file", "", "Keys:", " q quit", " n run the screen-loader to show the saved screens", " dump a screen", "", " a toggle between '#' and graphic symbol for drawing", " c change color drawn by line to next in palette", " h,j,k,l or arrows to move around the screen, drawing", }; show_help(msgs); } static void replay_help(void) { static const char *msgs[] = { "You are now in the screen-loader, which allows you to view", "the dumped/restored screens.", "", "Keys:", " q quit", " load the next screen", " load the previous screen", }; show_help(msgs); } static void usage(void) { static const char *msg[] = { "Usage: savescreen [-r] files", "", "Options:", " -f file fill/initialize screen using text from this file", " -i use scr_init/scr_restore rather than scr_set", " -k keep the restored dump-files rather than removing them", " -r replay the screen-dump files" }; unsigned n; for (n = 0; n < SIZEOF(msg); ++n) { fprintf(stderr, "%s\n", msg[n]); } ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int ch; int which = 0; int last; bool replaying = FALSE; bool done = FALSE; char **files; char *fill_by = 0; #if USE_WIDEC_SUPPORT cchar_t mycc; int myxx; #endif setlocale(LC_ALL, ""); while ((ch = getopt(argc, argv, "f:ikr")) != -1) { switch (ch) { case 'f': fill_by = optarg; break; case 'i': use_init = TRUE; break; case 'k': keep_dumps = TRUE; break; case 'r': replaying = TRUE; break; default: usage(); break; } } files = argv + optind; last = argc - optind - 1; if (replaying) { while (last >= 0 && !fexists(files[last])) --last; } initscr(); cbreak(); noecho(); keypad(stdscr, TRUE); curs_set(0); if (has_colors()) { short pair; short color; start_color(); /* * Assume pairs is the square of colors, and assign pairs going down * so that there is minimal conflict with the background color (which * counts up). The intent is just to show how color pair values are * saved and restored. */ for (pair = 0; pair < COLOR_PAIRS; ++pair) { color = (short) (pair % (COLORS - 1)); init_pair(pair, (short) (COLOR_WHITE - color), color); } } if (fill_by != 0) { FILE *fp = fopen(fill_by, "r"); if (fp != 0) { bool filled = FALSE; move(1, 0); while ((ch = fgetc(fp)) != EOF) { if (addch(UChar(ch)) == ERR) { filled = TRUE; break; } } fclose(fp); if (!filled) { while (addch(' ') != ERR) { ; } } move(0, 0); } else { endwin(); fprintf(stderr, "Cannot open \"%s\"\n", fill_by); ExitProgram(EXIT_FAILURE); } } if (replaying) { /* * Use the last file as the initial/current screen. */ if (last < 0) { endwin(); printf("No screen-dumps given\n"); ExitProgram(EXIT_FAILURE); } which = last; if (load_screen(files[which]) == ERR) { endwin(); printf("Cannot load screen-dump %s\n", files[which]); ExitProgram(EXIT_FAILURE); } after_load(); while (!done && (ch = getch()) != ERR) { switch (ch) { case 'n': /* * If we got a "next" here, skip to the final screen before * moving to the next process. */ setup_next(); which = last; done = TRUE; break; case 'q': cleanup(files); done = TRUE; break; case KEY_BACKSPACE: case '\b': if (--which < 0) which = last; break; case ' ': if (++which > last) which = 0; break; case '?': replay_help(); break; default: beep(); continue; } if (ch == 'q') { ; } else if (scr_restore(files[which]) == ERR) { endwin(); printf("Cannot load screen-dump %s\n", files[which]); cleanup(files); ExitProgram(EXIT_FAILURE); } else { wrefresh(curscr); } } endwin(); } else { int y = 0; int x = 0; int color = 0; int altchars = 0; while (!done) { switch (get_command(which, last)) { case 'n': setup_next(); done = TRUE; break; case 'q': cleanup(files); done = TRUE; break; case ' ': if (files[which] != 0) { show_what(which + 1, last); if (scr_dump(files[which]) == ERR) { endwin(); printf("Cannot write screen-dump %s\n", files[which]); cleanup(files); done = TRUE; break; } ++which; if (has_colors()) { int cx, cy; short pair = (short) (which % COLOR_PAIRS); /* * Change the background color, to make it more * obvious. But that changes the existing text-color. * Copy the old values from the currently displayed * screen. */ bkgd((chtype) COLOR_PAIR(pair)); for (cy = 1; cy < LINES; ++cy) { for (cx = 0; cx < COLS; ++cx) { wmove(curscr, cy, cx); wmove(stdscr, cy, cx); #if USE_WIDEC_SUPPORT if (win_wch(curscr, &mycc) != ERR) { myxx = wcwidth(mycc.chars[0]); if (myxx > 0) { wadd_wchnstr(stdscr, &mycc, 1); cx += (myxx - 1); } } #else waddch(stdscr, winch(curscr)); #endif } } } } else { beep(); } break; case KEY_LEFT: case 'h': if (--x < 0) x = COLS - 1; break; case KEY_DOWN: case 'j': if (++y >= LINES) y = 1; break; case KEY_UP: case 'k': if (--y < 1) y = LINES - 1; break; case KEY_RIGHT: case 'l': if (++x >= COLS) x = 0; break; case 'a': altchars = !altchars; break; case 'c': color = (color + 1) % COLORS; break; case '?': editor_help(); break; default: beep(); continue; } if (!done) { attr_t attr = (A_REVERSE | (attr_t) COLOR_PAIR(color * COLORS)); chtype ch2 = (altchars ? ACS_DIAMOND : '#'); move(y, x); addch(ch2 | attr); move(y, x); } } endwin(); } ExitProgram(EXIT_SUCCESS); } #else int main(int argc, char *argv[]) { printf("This program requires the screen-dump functions\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/inserts.c0000644000175100001440000002517312063213517015276 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: inserts.c,v 1.27 2012/12/16 00:35:27 tom Exp $ * * Demonstrate the winsstr() and winsch functions. * Thomas Dickey - 2002/10/19 */ #include #if HAVE_WINSSTR #include #define InsNStr insnstr #define InsStr insstr #define MvInsNStr (void) mvinsnstr #define MvInsStr (void) mvinsstr #define MvWInsNStr (void) mvwinsnstr #define MvWInsStr (void) mvwinsstr #define WInsNStr winsnstr #define WInsStr winsstr #define InsCh insch #define MvInsCh (void) mvinsch #define MvWInsCh (void) mvwinsch #define WInsCh winsch #define MY_TABSIZE 8 typedef enum { oDefault = 0, oMove = 1, oWindow = 2, oMoveWindow = 3 } Options; static bool m_opt = FALSE; static bool w_opt = FALSE; static int n_opt = -1; static void legend(WINDOW *win, int level, Options state, char *buffer, int length) { const char *showstate; switch (state) { default: case oDefault: showstate = ""; break; case oMove: showstate = " (mvXXX)"; break; case oWindow: showstate = " (winXXX)"; break; case oMoveWindow: showstate = " (mvwinXXX)"; break; } wmove(win, 0, 0); wprintw(win, "The Strings/Chars displays should match. Enter any characters, except:\n"); wprintw(win, "down-arrow or ^N to repeat on next line, ^W for inner window, ESC to exit.\n"); wclrtoeol(win); wprintw(win, "Level %d,%s inserted %d characters <%s>", level, showstate, length, buffer); } static int ColOf(char *buffer, int length, int margin) { int n; int result; for (n = 0, result = margin + 1; n < length; ++n) { int ch = UChar(buffer[n]); switch (ch) { case '\n': /* actually newline should clear the remainder of the line * and move to the next line - but that seems a little awkward * in this example. */ case '\r': result = 0; break; case '\b': if (result > 0) --result; break; case '\t': result += (MY_TABSIZE - (result % MY_TABSIZE)); break; case '\177': result += 2; break; default: ++result; if (ch < 32) ++result; break; } } return result; } #define LEN(n) ((length - (n) > n_opt) ? n_opt : (length - (n))) static void test_inserts(int level) { static bool first = TRUE; int ch; int limit; int row = 1; int col; int row2, col2; int length; char buffer[BUFSIZ]; WINDOW *look = 0; WINDOW *work = 0; WINDOW *show = 0; int margin = (2 * MY_TABSIZE) - 1; Options option = (Options) ((unsigned) (m_opt ? oMove : oDefault) | (unsigned) ((w_opt || (level > 0)) ? oWindow : oDefault)); if (first) { static char cmd[80]; setlocale(LC_ALL, ""); putenv(strcpy(cmd, "TABSIZE=8")); initscr(); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ keypad(stdscr, TRUE); /* * Show the characters inserted in color, to distinguish from those * that are shifted. */ if (has_colors()) { start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); } } limit = LINES - 5; if (level > 0) { look = newwin(limit, COLS - (2 * (level - 1)), 0, level - 1); work = newwin(limit - 2, COLS - (2 * level), 1, level); show = newwin(4, COLS, limit + 1, 0); box(look, 0, 0); wnoutrefresh(look); limit -= 2; } else { work = stdscr; show = derwin(stdscr, 4, COLS, limit + 1, 0); } keypad(work, TRUE); for (col = margin + 1; col < COLS; col += MY_TABSIZE) MvWVLine(work, row, col, '.', limit - 2); MvWVLine(work, row, margin, ACS_VLINE, limit - 2); MvWVLine(work, row, margin + 1, ACS_VLINE, limit - 2); limit /= 2; MvWAddStr(work, 1, 2, "String"); MvWAddStr(work, limit + 1, 2, "Chars"); wnoutrefresh(work); buffer[length = 0] = '\0'; legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); if (has_colors()) { wbkgdset(work, (chtype) (COLOR_PAIR(1) | ' ')); } while ((ch = read_linedata(work)) != ERR && !isQUIT(ch)) { wmove(work, row, margin + 1); switch (ch) { case key_RECUR: test_inserts(level + 1); if (look) touchwin(look); touchwin(work); touchwin(show); if (look) wnoutrefresh(look); wnoutrefresh(work); wnoutrefresh(show); doupdate(); break; case key_NEWLINE: if (row < limit) { ++row; /* put the whole string in, all at once */ col2 = margin + 1; switch (option) { case oDefault: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (move(row, col2) != ERR) { InsNStr(buffer + col, LEN(col)); } } } else { if (move(row, col2) != ERR) { InsStr(buffer); } } break; case oMove: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvInsNStr(row, col2, buffer + col, LEN(col)); } } else { MvInsStr(row, col2, buffer); } break; case oWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (wmove(work, row, col2) != ERR) { WInsNStr(work, buffer + col, LEN(col)); } } } else { if (wmove(work, row, col2) != ERR) { WInsStr(work, buffer); } } break; case oMoveWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvWInsNStr(work, row, col2, buffer + col, LEN(col)); } } else { MvWInsStr(work, row, col2, buffer); } break; } /* do the corresponding single-character insertion */ row2 = limit + row; for (col = 0; col < length; ++col) { col2 = ColOf(buffer, col, margin); switch (option) { case oDefault: if (move(row2, col2) != ERR) { InsCh(UChar(buffer[col])); } break; case oMove: MvInsCh(row2, col2, UChar(buffer[col])); break; case oWindow: if (wmove(work, row2, col2) != ERR) { WInsCh(work, UChar(buffer[col])); } break; case oMoveWindow: MvWInsCh(work, row2, col2, UChar(buffer[col])); break; } } } else { beep(); } break; default: if (ch <= 0 || ch > 255) { beep(); break; } buffer[length++] = (char) ch; buffer[length] = '\0'; /* put the string in, one character at a time */ col = ColOf(buffer, length - 1, margin); switch (option) { case oDefault: if (move(row, col) != ERR) { InsStr(buffer + length - 1); } break; case oMove: MvInsStr(row, col, buffer + length - 1); break; case oWindow: if (wmove(work, row, col) != ERR) { WInsStr(work, buffer + length - 1); } break; case oMoveWindow: MvWInsStr(work, row, col, buffer + length - 1); break; } /* do the corresponding single-character insertion */ switch (option) { case oDefault: if (move(limit + row, col) != ERR) { InsCh(UChar(ch)); } break; case oMove: MvInsCh(limit + row, col, UChar(ch)); break; case oWindow: if (wmove(work, limit + row, col) != ERR) { WInsCh(work, UChar(ch)); } break; case oMoveWindow: MvWInsCh(work, limit + row, col, UChar(ch)); break; } wnoutrefresh(work); legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); break; } } if (level > 0) { delwin(work); delwin(look); } delwin(show); } static void usage(void) { static const char *tbl[] = { "Usage: inserts [options]" ,"" ,"Options:" ," -f FILE read data from given file" ," -n NUM limit string-inserts to NUM bytes on ^N replay" ," -m perform wmove/move separately from insert-functions" ," -w use window-parameter even when stdscr would be implied" }; unsigned n; for (n = 0; n < SIZEOF(tbl); ++n) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int ch; setlocale(LC_ALL, ""); while ((ch = getopt(argc, argv, "f:mn:w")) != -1) { switch (ch) { case 'f': init_linedata(optarg); break; case 'm': m_opt = TRUE; break; case 'n': n_opt = atoi(optarg); if (n_opt == 0) n_opt = -1; break; case 'w': w_opt = TRUE; break; default: usage(); break; } } if (optind < argc) usage(); test_inserts(0); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the winsstr function\n"); ExitProgram(EXIT_FAILURE); } #endif /* HAVE_WINSSTR */ ncurses-6.0-20160213/test/demo_keyok.c0000644000175100001440000000636110523171617015736 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2003,2006 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: demo_keyok.c,v 1.5 2006/11/04 20:09:51 tom Exp $ * * Demonstrate the keyok() function. * Thomas Dickey - 2002/11/23 */ #include #if defined(NCURSES_VERSION) && NCURSES_EXT_FUNCS int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int lastch = ERR; int ch; WINDOW *win; initscr(); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ printw("Typing any function key will disable it, but typing it twice in\n"); printw("a row will turn it back on (just for a demo)."); refresh(); win = newwin(LINES - 2, COLS, 2, 0); scrollok(win, TRUE); keypad(win, TRUE); wmove(win, 0, 0); while ((ch = wgetch(win)) != ERR) { const char *name = keyname(ch); wprintw(win, "Keycode %d, name %s\n", ch, name != 0 ? name : ""); wclrtoeol(win); wrefresh(win); if (ch >= KEY_MIN) { keyok(ch, FALSE); lastch = ch; } else if (lastch >= KEY_MIN) { keyok(lastch, TRUE); } } endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/test_vid_puts.c0000644000175100001440000000777512362575250016522 0ustar tomusers/**************************************************************************** * Copyright (c) 2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_vid_puts.c,v 1.6 2014/07/19 23:09:28 tom Exp $ * * Demonstrate the vid_puts and vid_attr functions. * Thomas Dickey - 2013/01/12 */ #define USE_TINFO #include #if USE_WIDEC_SUPPORT && HAVE_SETUPTERM && HAVE_VID_PUTS #define valid(s) ((s != 0) && s != (char *)-1) static FILE *my_fp; static bool p_opt = FALSE; static TPUTS_PROTO(outc, c) { int rc = c; rc = putc(c, my_fp); TPUTS_RETURN(rc); } static bool outs(const char *s) { if (valid(s)) { tputs(s, 1, outc); return TRUE; } return FALSE; } static void cleanup(void) { outs(exit_attribute_mode); if (!outs(orig_colors)) outs(orig_pair); outs(cursor_normal); } static void change_attr(chtype attr) { if (p_opt) { vid_puts(attr, (short) 0, (void *) 0, outc); } else { vid_attr(attr, (short) 0, (void *) 0); } } static void test_vid_puts(void) { fprintf(my_fp, "Name: "); change_attr(A_BOLD); fputs("Bold", my_fp); change_attr(A_REVERSE); fputs(" Reverse", my_fp); change_attr(A_NORMAL); fputs("\n", my_fp); } static void usage(void) { static const char *tbl[] = { "Usage: test_vid_puts [options]" ,"" ,"Options:" ," -e use stderr (default stdout)" ," -p use vid_puts (default vid_attr)" }; unsigned n; for (n = 0; n < SIZEOF(tbl); ++n) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int ch; my_fp = stdout; while ((ch = getopt(argc, argv, "ep")) != -1) { switch (ch) { case 'e': my_fp = stderr; break; case 'p': p_opt = TRUE; break; default: usage(); break; } } if (optind < argc) usage(); setupterm((char *) 0, 1, (int *) 0); test_vid_puts(); cleanup(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the wide-ncurses terminfo library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/test_addchstr.c0000644000175100001440000003021612063213613016431 0ustar tomusers/**************************************************************************** * Copyright (c) 2009-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_addchstr.c,v 1.18 2012/12/16 00:36:27 tom Exp $ * * Demonstrate the waddchstr() and waddch functions. * Thomas Dickey - 2009/9/12 */ #include #include #undef MvAddStr #undef MvWAddStr #define AddNStr addchnstr #define AddStr addchstr #define MvAddNStr (void) mvaddchnstr #define MvAddStr (void) mvaddchstr #define MvWAddNStr (void) mvwaddchnstr #define MvWAddStr (void) mvwaddchstr #define WAddNStr waddchnstr #define WAddStr waddchstr #define AddCh addch #define WAddCh waddch #define MY_TABSIZE 8 typedef enum { oDefault = 0, oMove = 1, oWindow = 2, oMoveWindow = 3 } Options; static bool m_opt = FALSE; static bool pass_ctls = FALSE; static bool w_opt = FALSE; static int n_opt = -1; static attr_t show_attr; static chtype *temp_buffer; static size_t temp_length; #define TempBuffer(source_cast) static size_t ChLen(const char *source) { size_t result = strlen(source); if (!pass_ctls) { size_t adjust = 0; size_t n; for (n = 0; n < result; ++n) { const char *s = unctrl(UChar(source[n])); if (s != 0) { adjust += (strlen(s) - 1); } } result += adjust; } return result; } static chtype * ChStr(const char *source) { if (source != 0) { size_t need = ChLen(source) + 1; int n = 0; if (need > temp_length) { temp_length = need * 2; temp_buffer = typeRealloc(chtype, temp_length, temp_buffer); if (!temp_buffer) failed("TempBuffer"); } do { const char *s; chtype ch = UChar(*source++); if (!pass_ctls && (s = unctrl(ch)) != 0) { while (*s != '\0') { temp_buffer[n++] = UChar(*s++); } } else { temp_buffer[n++] = ch; } } while (source[0] != 0); temp_buffer[n] = 0; } else if (temp_buffer != 0) { free(temp_buffer); temp_buffer = 0; temp_length = 0; } return temp_buffer; } /* color the strings drawn in the workspace */ static chtype * ChStr2(const char *source) { size_t len = ChLen(source); size_t n; chtype *result = ChStr(source); for (n = 0; n < len; ++n) { result[n] |= show_attr; } return result; } static void legend(WINDOW *win, int level, Options state, char *buffer, int length) { const char *showstate; switch (state) { default: case oDefault: showstate = ""; break; case oMove: showstate = " (mvXXX)"; break; case oWindow: showstate = " (winXXX)"; break; case oMoveWindow: showstate = " (mvwinXXX)"; break; } wmove(win, 0, 0); wprintw(win, "The Strings/Chars displays should match. Enter any characters, except:\n"); wprintw(win, "down-arrow or ^N to repeat on next line, ^W for inner window, ESC to exit.\n"); wclrtoeol(win); wprintw(win, "Level %d,%s added %d characters <%s>", level, showstate, length, buffer); } static int ColOf(char *buffer, int length, int margin) { int n; int result; for (n = 0, result = margin + 1; n < length; ++n) { int ch = UChar(buffer[n]); switch (ch) { case '\n': /* actually newline should clear the remainder of the line * and move to the next line - but that seems a little awkward * in this example. */ case '\r': result = 0; break; case '\b': if (result > 0) --result; break; case '\t': result += (MY_TABSIZE - (result % MY_TABSIZE)); break; case '\177': result += 2; break; default: ++result; if (ch < 32) ++result; break; } } return result; } #define LEN(n) ((length - (n) > n_opt) ? n_opt : (length - (n))) static void test_adds(int level) { static bool first = TRUE; int ch; int limit; int row = 1; int col; int row2, col2; int length; char buffer[BUFSIZ]; WINDOW *look = 0; WINDOW *work = 0; WINDOW *show = 0; int margin = (2 * MY_TABSIZE) - 1; Options option = (Options) ((unsigned) (m_opt ? oMove : oDefault) | (unsigned) ((w_opt || (level > 0)) ? oWindow : oDefault)); if (first) { static char cmd[80]; setlocale(LC_ALL, ""); putenv(strcpy(cmd, "TABSIZE=8")); initscr(); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ keypad(stdscr, TRUE); /* * Show the characters added in color, to distinguish from those that * are shifted. */ if (has_colors()) { start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); } } limit = LINES - 5; if (level > 0) { look = newwin(limit, COLS - (2 * (level - 1)), 0, level - 1); work = newwin(limit - 2, COLS - (2 * level), 1, level); show = newwin(4, COLS, limit + 1, 0); box(look, 0, 0); wnoutrefresh(look); limit -= 2; } else { work = stdscr; show = derwin(stdscr, 4, COLS, limit + 1, 0); } keypad(work, TRUE); for (col = margin + 1; col < COLS; col += MY_TABSIZE) MvWVLine(work, row, col, '.', limit - 2); MvWVLine(work, row, margin, ACS_VLINE, limit - 2); MvWVLine(work, row, margin + 1, ACS_VLINE, limit - 2); limit /= 2; MvWAddChStr(work, 1, 2, ChStr("String")); MvWAddChStr(work, limit + 1, 2, ChStr("Chars")); wnoutrefresh(work); buffer[length = 0] = '\0'; legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); if (has_colors()) { show_attr = (attr_t) COLOR_PAIR(1); wbkgdset(work, show_attr | ' '); } else { show_attr = A_STANDOUT; } while ((ch = read_linedata(work)) != ERR && !isQUIT(ch)) { wmove(work, row, margin + 1); switch (ch) { case key_RECUR: test_adds(level + 1); if (look) touchwin(look); touchwin(work); touchwin(show); if (look) wnoutrefresh(look); wnoutrefresh(work); wnoutrefresh(show); doupdate(); break; case key_NEWLINE: if (row < limit) { ++row; /* put the whole string in, all at once */ col2 = margin + 1; switch (option) { case oDefault: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (move(row, col2) != ERR) { AddNStr(ChStr2(buffer + col), LEN(col)); } } } else { if (move(row, col2) != ERR) { AddStr(ChStr2(buffer)); } } break; case oMove: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvAddNStr(row, col2, ChStr2(buffer + col), LEN(col)); } } else { MvAddStr(row, col2, ChStr2(buffer)); } break; case oWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (wmove(work, row, col2) != ERR) { WAddNStr(work, ChStr2(buffer + col), LEN(col)); } } } else { if (wmove(work, row, col2) != ERR) { WAddStr(work, ChStr2(buffer)); } } break; case oMoveWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvWAddNStr(work, row, col2, ChStr2(buffer + col), LEN(col)); } } else { MvWAddStr(work, row, col2, ChStr2(buffer)); } break; } /* do the corresponding single-character add */ row2 = limit + row; for (col = 0; col < length; ++col) { col2 = ColOf(buffer, col, margin); switch (option) { case oDefault: if (move(row2, col2) != ERR) { AddCh(UChar(buffer[col])); } break; case oMove: MvAddCh(row2, col2, UChar(buffer[col])); break; case oWindow: if (wmove(work, row2, col2) != ERR) { WAddCh(work, UChar(buffer[col])); } break; case oMoveWindow: MvWAddCh(work, row2, col2, UChar(buffer[col])); break; } } } else { beep(); } break; case KEY_BACKSPACE: ch = '\b'; /* FALLTHRU */ default: if (ch <= 0 || ch > 255) { beep(); break; } buffer[length++] = (char) ch; buffer[length] = '\0'; /* put the string in, one character at a time */ col = ColOf(buffer, length - 1, margin); switch (option) { case oDefault: if (move(row, col) != ERR) { AddStr(ChStr2(buffer + length - 1)); } break; case oMove: MvAddStr(row, col, ChStr2(buffer + length - 1)); break; case oWindow: if (wmove(work, row, col) != ERR) { WAddStr(work, ChStr2(buffer + length - 1)); } break; case oMoveWindow: MvWAddStr(work, row, col, ChStr2(buffer + length - 1)); break; } /* do the corresponding single-character add */ switch (option) { case oDefault: if (move(limit + row, col) != ERR) { AddCh(UChar(ch)); } break; case oMove: MvAddCh(limit + row, col, UChar(ch)); break; case oWindow: if (wmove(work, limit + row, col) != ERR) { WAddCh(work, UChar(ch)); } break; case oMoveWindow: MvWAddCh(work, limit + row, col, UChar(ch)); break; } wnoutrefresh(work); legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); break; } } if (level > 0) { delwin(work); delwin(look); } delwin(show); } static void usage(void) { static const char *tbl[] = { "Usage: test_addchstr [options]" ,"" ,"Options:" ," -f FILE read data from given file" ," -n NUM limit string-adds to NUM bytes on ^N replay" ," -m perform wmove/move separately from add-functions" ," -p pass-thru control characters without using unctrl()" ," -w use window-parameter even when stdscr would be implied" }; unsigned n; for (n = 0; n < SIZEOF(tbl); ++n) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int ch; setlocale(LC_ALL, ""); while ((ch = getopt(argc, argv, "f:mn:pw")) != -1) { switch (ch) { case 'f': init_linedata(optarg); break; case 'm': m_opt = TRUE; break; case 'n': n_opt = atoi(optarg); if (n_opt == 0) n_opt = -1; break; case 'p': pass_ctls = TRUE; break; case 'w': w_opt = TRUE; break; default: usage(); break; } } if (optind < argc) usage(); test_adds(0); endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/Makefile.in0000644000175100001440000001211412560514435015504 0ustar tomusers# $Id: Makefile.in,v 1.115 2015/08/05 23:15:41 tom Exp $ ############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # # Makefile for ncurses tests. # turn off _all_ suffix rules; we'll generate our own .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ @SET_MAKE@ destdir = x = @EXEEXT@ o = .@OBJEXT@ MODEL = ../@DFT_OBJ_SUBDIR@ top_srcdir = @top_srcdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ includesubdir = @includesubdir@ BINDIR = $(DESTDIR)$(bindir) LIBDIR = $(DESTDIR)$(libdir) INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir) PACKAGE = @PACKAGE@ LIBTOOL = @LIBTOOL@ LIBTOOL_OPTS = @LIBTOOL_OPTS@ LIBTOOL_CLEAN = @LIB_CLEAN@ LIBTOOL_COMPILE = @LIB_COMPILE@ LIBTOOL_LINK = @LIB_LINK@ INSTALL = @INSTALL@ INSTALL_PROG = @INSTALL_PROGRAM@ transform = @program_transform_name@ TRANSFORM = sed 's/$x$$//'|sed '$(transform)'|sed 's/$$/$x/' CTAGS = @CTAGS@ ETAGS = @ETAGS@ CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@ CPPFLAGS = -I. -I$(srcdir) -I../test -DHAVE_CONFIG_H @CPPFLAGS@ CCFLAGS = $(CPPFLAGS) $(CFLAGS) CFLAGS_LIBTOOL = $(CCFLAGS) CFLAGS_NORMAL = $(CCFLAGS) CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) REL_VERSION = @cf_cv_rel_version@ ABI_VERSION = @cf_cv_abi_version@ LOCAL_LIBDIR = @top_builddir@/lib LOCAL_LIBS = @TEST_DEPS@ MATH_LIB = @MATH_LIB@ TEST_LIBS = @TEST_LIBS@ LD = @LD@ LINK = @LINK_TESTS@ $(LIBTOOL_LINK) $(CFLAGS) LDFLAGS = @LD_MODEL@ @LOCAL_LDFLAGS@ @LDFLAGS@ LDFLAGS_LIBTOOL = $(LDFLAGS) $(CFLAGS_LIBTOOL) LDFLAGS_NORMAL = $(LDFLAGS) $(CFLAGS_NORMAL) LDFLAGS_DEBUG = $(LDFLAGS) $(CFLAGS_DEBUG) LDFLAGS_PROFILE = $(LDFLAGS) $(CFLAGS_PROFILE) LDFLAGS_SHARED = $(LDFLAGS) $(CFLAGS_SHARED) @LD_SHARED_OPTS@ TEST_ARGS = @LDFLAGS_STATIC@ @TEST_ARGS@ @LDFLAGS_SHARED@ # use these for linking with all of the libraries LIBS_DEFAULT = $(TEST_ARGS) @LIBS@ $(TEST_LIBS) $(MATH_LIB) LDFLAGS_DEFAULT = $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_DEFAULT) # use these for linking with the (n)curses library and possibly pthreads LIBS_THREADS = `echo "$(TEST_ARGS) @LIBS@" | sed -e 's/-lform.*-lpanel[^ ]*//'` $(TEST_LIBS) $(MATH_LIB) @PTHREAD@ LDFLAGS_THREADS = $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_THREADS) # use these for linking with the (n)curses library LIBS_CURSES = `echo "$(TEST_ARGS) @LIBS@" | sed -e 's/-lform.*-lpanel[^ ]*//'` $(TEST_LIBS) $(MATH_LIB) LDFLAGS_CURSES = $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_CURSES) # use these for linking with the tinfo library if we have it, or curses library if not LIBS_TINFO = @LDFLAGS_STATIC@ @TINFO_LIBS@ @LDFLAGS_SHARED@ @LIBS@ $(TEST_LIBS) $(MATH_LIB) LDFLAGS_TINFO = @TINFO_LDFLAGS@ $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_TINFO) LINT = @LINT@ LINT_OPTS = @LINT_OPTS@ LINT_LIBS = -lform -lmenu -lpanel -lncurses @LIBS@ HEADER_DEPS = \ ../include/curses.h \ ../include/term.h # The rest is generated from the "programs" and "modules" files... ncurses-6.0-20160213/test/demo_termcap.c0000644000175100001440000004530512606273754016261 0ustar tomusers/**************************************************************************** * Copyright (c) 2005-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey * * $Id: demo_termcap.c,v 1.49 2015/10/10 20:41:16 tom Exp $ * * A simple demo of the termcap interface. */ #define USE_TINFO #include #include #if NCURSES_XNAMES #if HAVE_TERM_ENTRY_H #include #else #undef NCURSES_XNAMES #define NCURSES_XNAMES 0 #endif #endif #ifdef NCURSES_VERSION #include #endif static void failed(const char *) GCC_NORETURN; static void failed(const char *msg) { fprintf(stderr, "%s\n", msg); ExitProgram(EXIT_FAILURE); } #if HAVE_TGETENT #if defined(HAVE_CURSES_DATA_BOOLNAMES) || defined(DECL_CURSES_DATA_BOOLNAMES) #define USE_CODE_LISTS 1 #else #define USE_CODE_LISTS 0 #endif #define FCOLS 8 #define FNAME(type) "%s %-*s = ", #type, FCOLS static bool b_opt = FALSE; static bool n_opt = FALSE; static bool s_opt = FALSE; static bool q_opt = FALSE; static bool x_opt = FALSE; static bool y_opt = FALSE; static char *d_opt; static char *e_opt; static char **db_list; static int db_item; static char *my_blob; static char **my_boolcodes; static char **my_numcodes; static char **my_numvalues; static char **my_strcodes; static char **my_strvalues; static long total_values; static long total_b_values; static long total_n_values; static long total_s_values; #define isCapName(c) (isgraph(c) && strchr("^=:\\", c) == 0) #define EachCapName(n) n = 33; n < 127; ++n static char * make_dbitem(char *p, char *q) { char *result = malloc(strlen(e_opt) + 2 + (size_t) (p - q)); sprintf(result, "%s=%.*s", e_opt, (int) (p - q), q); return result; } static void make_dblist(void) { if (d_opt && e_opt) { int pass; for (pass = 0; pass < 2; ++pass) { char *p, *q; size_t count = 0; for (p = q = d_opt; *p != '\0'; ++p) { if (*p == ':') { if (p != q + 1) { if (pass) { db_list[count] = make_dbitem(p, q); } count++; } q = p + 1; } } if (p != q + 1) { if (pass) { db_list[count] = make_dbitem(p, q); } count++; } if (!pass) { db_list = typeCalloc(char *, count + 1); } } } } static char * next_dbitem(void) { char *result = 0; if (db_list) { if ((result = db_list[db_item]) == 0) { db_item = 0; result = db_list[0]; } else { db_item++; } } printf("** %s\n", result); return result; } static void free_dblist(void) { if (db_list) { int n; for (n = 0; db_list[n]; ++n) free(db_list[n]); free(db_list); db_list = 0; } } static void show_string(const char *name, const char *value) { printf(FNAME(str), name); if (value == ((char *) -1)) { printf("CANCELLED"); } else if (value == ((char *) 0)) { printf("ABSENT"); } else { while (*value != 0) { int ch = UChar(*value++); switch (ch) { case '\177': fputs("^?", stdout); break; case '\033': fputs("\\E", stdout); break; case '\b': fputs("\\b", stdout); break; case '\f': fputs("\\f", stdout); break; case '\n': fputs("\\n", stdout); break; case '\r': fputs("\\r", stdout); break; case ' ': fputs("\\s", stdout); break; case '\t': fputs("\\t", stdout); break; case '^': fputs("\\^", stdout); break; case ':': fputs("\\072", stdout); break; case '\\': fputs("\\\\", stdout); break; default: if (isgraph(ch)) fputc(ch, stdout); else if (ch < 32) printf("^%c", ch + '@'); else printf("\\%03o", ch); break; } } } printf("\n"); } static void show_number(const char *name, int value) { printf(FNAME(num), name); printf(" %d\n", value); } static void dumpit(NCURSES_CONST char *cap) { /* * One of the limitations of the termcap interface is that the library * cannot determine the size of the buffer passed via tgetstr(), nor the * amount of space remaining. This demo simply reuses the whole buffer * for each call; a normal termcap application would try to use the buffer * to hold all of the strings extracted from the terminal entry. */ char area[1024], *ap = area; char *str; int num; if ((str = tgetstr(cap, &ap)) != 0) { total_values++; total_s_values++; if (!q_opt) { /* * Note that the strings returned are mostly terminfo format, since * ncurses does not convert except for a handful of special cases. */ show_string(cap, str); } } else if ((num = tgetnum(cap)) >= 0) { total_values++; total_n_values++; if (!q_opt) { show_number(cap, num); } } else if (tgetflag(cap) > 0) { total_values++; total_b_values++; if (!q_opt) { printf(FNAME(flg), cap); printf("%s\n", "true"); } } if (!q_opt) fflush(stdout); } static void brute_force(const char *name) { char buffer[1024]; if (db_list) { putenv(next_dbitem()); } if (!q_opt) printf("Terminal type \"%s\"\n", name); if (tgetent(buffer, name) >= 0) { char cap[3]; int c1, c2; cap[2] = 0; for (EachCapName(c1)) { cap[0] = (char) c1; if (isCapName(c1)) { for (EachCapName(c2)) { cap[1] = (char) c2; if (isCapName(c2)) { dumpit(cap); } } } } } } #if NCURSES_XNAMES static void dump_xname(NCURSES_CONST char *cap) { if (strlen(cap) == 2) dumpit(cap); } #endif static void demo_termcap(NCURSES_CONST char *name) { unsigned n; NCURSES_CONST char *cap; char buffer[1024]; if (db_list) { putenv(next_dbitem()); } if (!q_opt) printf("Terminal type \"%s\"\n", name); if (tgetent(buffer, name) >= 0) { if (b_opt) { for (n = 0;; ++n) { cap = my_boolcodes[n]; if (cap == 0) break; dumpit(cap); } } if (n_opt) { for (n = 0;; ++n) { cap = my_numcodes[n]; if (cap == 0) break; dumpit(cap); } } if (s_opt) { for (n = 0;; ++n) { cap = my_strcodes[n]; if (cap == 0) break; dumpit(cap); } } #ifdef NCURSES_VERSION if (x_opt && (my_blob == 0) && y_opt) { #if NCURSES_XNAMES TERMTYPE *term = &(cur_term->type); if (term != 0 && ((NUM_BOOLEANS(term) != BOOLCOUNT) || (NUM_NUMBERS(term) != NUMCOUNT) || (NUM_STRINGS(term) != STRCOUNT))) { for (n = BOOLCOUNT; n < NUM_BOOLEANS(term); ++n) { dump_xname(ExtBoolname(term, (int) n, boolnames)); } for (n = NUMCOUNT; n < NUM_NUMBERS(term); ++n) { dump_xname(ExtNumname(term, (int) n, numnames)); } for (n = STRCOUNT; n < NUM_STRINGS(term); ++n) { dump_xname(ExtStrname(term, (int) n, strnames)); } } #endif } #endif } } typedef enum { pDefault = 0 ,pComment ,pDescription ,pEscaped ,pNewline ,pName ,pNumber ,pString } STATE; static void parse_description(const char *input_name) { static char empty[1]; FILE *fp; struct stat sb; size_t count_bools = 0; size_t count_nums = 0; size_t count_strs = 0; size_t len; size_t j, k; STATE state; if (stat(input_name, &sb) != 0 || (sb.st_mode & S_IFMT) != S_IFREG) { failed("input is not a file"); } if (sb.st_size == 0) { failed("input is empty"); } /* * None of the arrays could be larger than the input-file, and since it * is small, just allocate the maximum for simplicity. */ if ((my_blob = malloc((size_t) sb.st_size + 1)) == 0 || (my_boolcodes = typeCalloc(char *, sb.st_size)) == 0 || (my_numcodes = typeCalloc(char *, sb.st_size)) == 0 || (my_numvalues = typeCalloc(char *, sb.st_size)) == 0 || (my_strcodes = typeCalloc(char *, sb.st_size)) == 0 || (my_strvalues = typeCalloc(char *, sb.st_size)) == 0) { failed("cannot allocate memory for input-file"); } if ((fp = fopen(input_name, "r")) == 0) failed("cannot open input-file"); len = fread(my_blob, sizeof(char), (size_t) sb.st_size, fp); my_blob[sb.st_size] = '\0'; fclose(fp); /* * First, get rid of comments and escaped newlines, as well as repeated * colons to construct a canonical entry. * * FIXME: actually this should make an additional pass just to strip * comment-lines and escaped newlines. But it is workable for infocmp * output. */ state = pNewline; for (j = k = 0; j < len; ++j) { int ch = my_blob[j]; if (ch == '\t') { ch = ' '; } switch (state) { case pNewline: if (ch == ' ') { continue; } if (ch == '#') { state = pComment; continue; } state = pDefault; /* FALLTHRU */ case pDefault: switch (ch) { case '|': state = pDescription; continue; case '\\': state = pEscaped; continue; case '\n': state = pNewline; continue; case ' ': case ':': break; default: state = pName; break; } my_blob[k++] = (char) ch; break; case pComment: if (ch == '\n') state = pNewline; break; case pDescription: switch (ch) { case ':': state = pDefault; break; case '\n': state = pNewline; break; } break; case pEscaped: if (ch != '\n') { my_blob[k++] = (char) ch; state = pDefault; } else { state = pNewline; } break; case pName: switch (ch) { case '\n': state = pNewline; continue; case ' ': case ':': state = pDefault; break; case '#': state = pNumber; break; case '|': state = pDescription; continue; } my_blob[k++] = (char) ch; break; case pNumber: switch (ch) { case '\n': state = pNewline; continue; case ':': state = pDefault; break; case ' ': state = pDefault; continue; } my_blob[k++] = (char) ch; break; case pString: switch (ch) { case '\\': if (my_blob[j + 1] == '\0') { state = pDefault; continue; } break; case '\n': state = pNewline; continue; case ':': state = pDefault; break; } my_blob[k++] = (char) ch; break; default: /* not used */ break; } } my_blob[k] = '\0'; /* * Then, parse what's left, making indexes of the names and values. */ state = pDefault; for (j = 0; my_blob[j] != '\0'; ++j) { switch (state) { case pDefault: switch (my_blob[j]) { case '\\': state = pEscaped; break; case ':': my_blob[j] = '\0'; if (my_blob[j + 1] != '\0' && my_blob[j + 1] != ':') state = pName; break; case ' ': break; default: break; } case pEscaped: break; case pName: state = pDefault; /* * Commented-out capabilities might be accessible (they are in * ncurses). */ if (my_blob[j] == '.' && my_blob[j + 1] == '.') { j += 2; } if (my_blob[j + 1] != '\0') { switch (my_blob[j + 2]) { case '#': my_numvalues[count_nums] = &my_blob[j + 3]; my_numcodes[count_nums++] = &my_blob[j]; my_blob[j + 2] = '\0'; state = pNumber; j += 2; break; case '=': my_strvalues[count_strs] = &my_blob[j + 3]; my_strcodes[count_strs++] = &my_blob[j]; my_blob[j + 2] = '\0'; state = pString; j += 2; break; default: if (my_blob[j + 2] == '@') { /* * We cannot get the type for a cancelled item * directly, but can infer it assuming the input * came from infocmp, which puts the data in a * known order. */ if (count_strs) { my_strvalues[count_strs] = empty; my_strcodes[count_strs++] = &my_blob[j]; } else if (count_nums) { my_numvalues[count_nums] = empty; my_numcodes[count_nums++] = &my_blob[j]; } else { my_boolcodes[count_bools++] = &my_blob[j]; } } else { my_boolcodes[count_bools++] = &my_blob[j]; } j++; break; } } break; case pNumber: if (!isdigit(UChar(my_blob[j]))) { --j; state = pDefault; } break; case pString: switch (my_blob[j]) { case '\\': if (my_blob[j + 1] == '\0') { state = pDefault; continue; } else { ++j; } break; case '\n': state = pNewline; continue; case ':': --j; state = pDefault; break; } break; case pNewline: case pComment: case pDescription: default: break; } } my_boolcodes[count_bools] = 0; my_numcodes[count_nums] = 0; my_numvalues[count_nums] = 0; my_strcodes[count_strs] = 0; my_strvalues[count_strs] = 0; #if 0 printf("bools:%d\n", (int) count_bools); for (j = 0; my_boolcodes[j]; ++j) printf("%5d:%s\n", (int) j, my_boolcodes[j]); printf("numbers:%d\n", (int) count_nums); for (j = 0; my_numcodes[j]; ++j) printf("%5d:%s(%s)\n", (int) j, my_numcodes[j], my_numvalues[j]); printf("strings:%d\n", (int) count_strs); for (j = 0; my_strcodes[j]; ++j) printf("%5d:%s(%s)\n", (int) j, my_strcodes[j], my_strvalues[j]); #endif } #if USE_CODE_LISTS static char ** copy_code_list(NCURSES_CONST char *const *list) { int pass; size_t count; size_t length = 1; char **result = 0; char *blob = 0; char *unused = 0; for (pass = 0; pass < 2; ++pass) { for (count = 0; list[count] != 0; ++count) { size_t chunk = strlen(list[count]) + 1; if (pass == 0) { length += chunk; } else { result[count] = unused; strcpy(unused, list[count]); unused += chunk; } } if (pass == 0) { blob = malloc(length); result = typeCalloc(char *, count + 1); unused = blob; if (blob == 0 || result == 0) failed("copy_code_list failed"); } } return result; } #endif static void usage(void) { static const char *msg[] = { "Usage: demo_termcap [options] [terminal]", "", "If no options are given, print all (boolean, numeric, string)", "capabilities for the given terminal, using short names.", "", "Options:", " -a try all names, print capabilities found", " -b print boolean-capabilities", " -d LIST colon-separated list of databases to use", " -e NAME environment variable to set with -d option", " -i NAME terminal description to use as names for \"-a\" option, etc.", " -n print numeric-capabilities", " -q quiet (prints only counts)", " -r COUNT repeat for given count", " -s print string-capabilities", " -v print termcap-variables", #ifdef NCURSES_VERSION " -x print extended capabilities", #endif }; unsigned n; for (n = 0; n < SIZEOF(msg); ++n) { fprintf(stderr, "%s\n", msg[n]); } ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int n; char *name; bool a_opt = FALSE; bool v_opt = FALSE; char *input_name = 0; int repeat; int r_opt = 1; while ((n = getopt(argc, argv, "abd:e:i:nqr:svxy")) != -1) { switch (n) { case 'a': a_opt = TRUE; break; case 'b': b_opt = TRUE; break; case 'd': d_opt = optarg; break; case 'e': e_opt = optarg; break; case 'i': input_name = optarg; break; case 'n': n_opt = TRUE; break; case 'q': q_opt = TRUE; break; case 'r': if ((r_opt = atoi(optarg)) <= 0) usage(); break; case 's': s_opt = TRUE; break; case 'v': v_opt = TRUE; break; #if NCURSES_XNAMES case 'x': x_opt = TRUE; break; case 'y': y_opt = TRUE; x_opt = TRUE; break; #endif default: usage(); break; } } #if HAVE_USE_EXTENDED_NAMES use_extended_names(x_opt); #endif if (!(b_opt || n_opt || s_opt)) { b_opt = TRUE; n_opt = TRUE; s_opt = TRUE; } make_dblist(); if (a_opt) { for (repeat = 0; repeat < r_opt; ++repeat) { if (optind < argc) { for (n = optind; n < argc; ++n) { brute_force(argv[n]); } } else if ((name = getenv("TERM")) != 0) { brute_force(name); } else { static char dumb[] = "dumb"; brute_force(dumb); } } } else { if (input_name != 0) { parse_description(input_name); } #if USE_CODE_LISTS else { my_boolcodes = copy_code_list(boolcodes); my_numcodes = copy_code_list(numcodes); my_strcodes = copy_code_list(strcodes); } #else else { failed("no capability-lists available (use -i option)"); } #endif /* USE_CODE_LISTS */ for (repeat = 0; repeat < r_opt; ++repeat) { if (optind < argc) { for (n = optind; n < argc; ++n) { demo_termcap(argv[n]); } } else if ((name = getenv("TERM")) != 0) { demo_termcap(name); } else { static char dumb[] = "dumb"; demo_termcap(dumb); } } } printf("%ld values (%ld booleans, %ld numbers, %ld strings)\n", total_values, total_b_values, total_n_values, total_s_values); #if defined(NCURSES_VERSION) || defined(HAVE_CURSES_DATA_OSPEED) if (v_opt) { show_number("PC", PC); show_string("UP", UP); show_string("BC", BC); show_number("ospeed", ospeed); } #endif free_dblist(); ExitProgram(EXIT_SUCCESS); } #else int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { failed("This program requires termcap"); } #endif ncurses-6.0-20160213/test/README0000644000175100001440000011270412630701602014315 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README,v 1.53 2015/12/06 00:38:26 tom Exp $ ------------------------------------------------------------------------------- The programs in this directory are used to test and demonstrate ncurses. Some are interesting in themselves, while others merely show how some of the library calls are used. Some date back to the initial releases of ncurses during the mid-1990s, such as: blue - Blue Moon, a nifty solitaire (uses color) bs.c - the game of Battleships (uses color) firework.c - multi-colored fireworks (uses color) gdc.c - Great Digital Clock (uses color) hanoi.c - the game of hanoi (uses color essentially) knight.c - the game of Knight's Tour (uses color) lrtest.c - test of access to the lower-right corner ncurses.c - multi-test program (uses color) newdemo.c - another test from PDCurses (uses color) rain.c - rain drops keep falling on my head... tclock.c - analog/digital clock testcurs.c - a test from the PDCurses people (uses color) tracemunch - Perl script to make trace scripts easier to read worm.c - worms run all over your screen (uses color) xmas.c - Xmas greeting card Besides being built as part of ncurses, the programs are also packaged as "ncurses-examples". Despite the name, the programs have been adjusted to allow them to build with other curses implementations, to provide a way to compare those with ncurses. You can build the programs by ./configure make The configure script has several options which allow you to tell it more about the curses implementation for which you are building the examples. Use ./configure --help to list the options. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- These programs provide examples of use, but do not comprise a complete set of tests. Here is a list of library externals, noting those that are used: libform: ------- TYPE_ALNUM test: demo_forms TYPE_ALPHA test: demo_forms ncurses TYPE_ENUM test: demo_forms TYPE_INTEGER test: demo_forms TYPE_IPV4 test: demo_forms TYPE_NUMERIC test: demo_forms TYPE_REGEXP test: demo_forms current_field test: demo_forms edit_field ncurses data_ahead test: demo_forms data_behind test: demo_forms dup_field - dynamic_field_info test: demo_forms field_arg test: demo_forms field_back test: demo_forms edit_field field_buffer test: cardfile demo_forms ncurses field_count test: demo_forms field_fore test: demo_forms field_index test: demo_forms field_info test: edit_field ncurses field_init - field_just - field_opts test: demo_forms ncurses field_opts_off test: cardfile demo_forms form_driver_w field_opts_on test: demo_forms field_pad test: demo_forms field_status test: demo_forms field_term - field_type test: demo_forms field_userptr test: demo_forms edit_field ncurses form_driver test: cardfile demo_forms edit_field ncurses form_driver_w test: form_driver_w form_fields test: cardfile demo_forms form_init - form_opts - form_opts_off - form_opts_on - form_page test: demo_forms form_request_by_name - form_request_name test: edit_field form_sub test: cardfile demo_forms ncurses form_term - form_userptr - form_win test: cardfile demo_forms edit_field ncurses free_field test: cardfile demo_forms form_driver_w ncurses free_fieldtype test: ncurses free_form test: cardfile demo_forms form_driver_w ncurses link_field - link_fieldtype - move_field - new_field test: cardfile demo_forms form_driver_w ncurses new_fieldtype test: ncurses new_form test: cardfile demo_forms form_driver_w ncurses new_form_sp - new_page test: demo_forms pos_form_cursor - post_form test: cardfile demo_forms form_driver_w ncurses scale_form test: demo_forms ncurses set_current_field test: demo_forms set_field_back test: cardfile demo_forms edit_field form_driver_w ncurses set_field_buffer test: cardfile demo_forms edit_field ncurses set_field_fore test: demo_forms set_field_init - set_field_just test: cardfile demo_forms set_field_opts test: demo_forms ncurses set_field_pad test: demo_forms set_field_status test: demo_forms set_field_term - set_field_type test: demo_forms ncurses set_field_userptr test: edit_field ncurses set_fieldtype_arg - set_fieldtype_choice - set_form_fields - set_form_init - set_form_opts - set_form_page - set_form_sub test: cardfile demo_forms ncurses set_form_term - set_form_userptr - set_form_win test: cardfile demo_forms ncurses set_max_field test: demo_forms set_new_page test: demo_forms unpost_form test: cardfile demo_forms form_driver_w ncurses libmenu: ------- current_item test: demo_menus ncurses free_item test: ncurses free_menu test: demo_menus ncurses item_count test: demo_menus item_description - item_index test: demo_menus ncurses item_init - item_name test: demo_menus ncurses item_opts - item_opts_off - item_opts_on - item_term - item_userptr test: demo_menus item_value test: demo_menus ncurses item_visible - menu_back - menu_driver test: demo_menus ncurses menu_fore - menu_format - menu_grey - menu_init - menu_items test: demo_menus ncurses menu_mark test: demo_menus menu_opts - menu_opts_off test: demo_menus ncurses menu_opts_on test: demo_menus menu_pad - menu_pattern test: demo_menus menu_request_by_name - menu_request_name - menu_spacing test: demo_menus menu_sub test: demo_menus menu_term - menu_userptr - menu_win test: demo_menus ncurses new_item test: demo_menus ncurses new_menu test: demo_menus ncurses new_menu_sp - pos_menu_cursor lib: menu post_menu test: demo_menus ncurses scale_menu test: demo_menus ncurses set_current_item - set_item_init test: demo_menus set_item_opts - set_item_term test: demo_menus set_item_userptr test: demo_menus set_item_value test: demo_menus ncurses set_menu_back test: demo_menus set_menu_fore test: demo_menus set_menu_format test: demo_menus ncurses set_menu_grey - set_menu_init test: demo_menus set_menu_items - set_menu_mark test: demo_menus set_menu_opts - set_menu_pad - set_menu_pattern - set_menu_spacing - set_menu_sub test: demo_menus ncurses set_menu_term test: demo_menus set_menu_userptr - set_menu_win test: demo_menus ncurses set_top_row - top_row - unpost_menu test: demo_menus ncurses libncurses: ---------- BC test: demo_termcap COLORS test: dots_curses echochar ncurses savescreen xmas COLOR_PAIR test: background blue bs cardfile clip_printw demo_forms demo_menus demo_panels dots_curses echochar filter firework gdc hanoi ins_wide insdelln inserts knight ncurses newdemo rain savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr testaddch testcurs view worm xmas COLOR_PAIRS test: dots_curses echochar ncurses newdemo savescreen COLS test: cardfile demo_altkeys demo_defkey demo_forms demo_keyok demo_menus demo_panels ditto dots_curses echochar edit_field firework foldkeys hashtest inch_wide inchs ins_wide inserts lrtest movewindow ncurses newdemo rain savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs view worm ESCDELAY test: test_opaque LINES test: cardfile demo_defkey demo_keyok demo_menus demo_panels ditto dots_curses echochar edit_field firework hanoi hashtest inch_wide inchs ins_wide inserts lrtest movewindow ncurses newdemo rain savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs view worm xmas PAIR_NUMBER test: ncurses PC test: demo_termcap SP lib: form TABSIZE test: test_opaque UP test: demo_termcap acs_map test: background gdc ins_wide inserts knight movewindow ncurses newdemo savescreen test_add_wchstr test_addchstr test_addstr test_addwstr testcurs add_wch test: demo_panels ncurses test_add_wchstr test_addwstr add_wchnstr test: test_add_wchstr add_wchstr test: test_add_wchstr view addch test: background blue bs dots_curses echochar hashtest ncurses savescreen test_add_wchstr test_addchstr test_addstr test_addwstr test_opaque testaddch view worm addchnstr test: test_addchstr addchstr test: test_addchstr addnstr test: test_addstr addnwstr test: ncurses test_addwstr addstr test: blue bs cardfile gdc hanoi lrtest ncurses test_addstr addwstr test: test_addwstr assume_default_colors test: background ncurses assume_default_colors_sp - attr_get - attr_off test: ncurses attr_on test: ncurses attr_set test: ncurses attroff test: dots_curses echochar filter gdc ncurses tclock attron test: bs dots_curses echochar filter gdc ncurses attrset test: bs firework gdc hanoi insdelln ncurses rain tclock testaddch testcurs baudrate lib: ncurses baudrate_sp lib: ncurses beep test: blue bs cardfile chgat clip_printw demo_forms demo_menus demo_panels edit_field hanoi inch_wide inchs ins_wide insdelln inserts knight movewindow ncurses savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs view xmas beep_sp lib: ncurses bkgd test: background cardfile demo_forms ncurses savescreen tclock view bkgdset test: background ncurses testaddch bkgrnd test: ncurses bkgrndset test: ncurses boolcodes test: demo_termcap test_arrays progs: dump_entry boolfnames test: demo_terminfo test_arrays progs: dump_entry boolnames test: demo_termcap demo_terminfo test_arrays progs: dump_entry infocmp border - border_set - box test: cardfile chgat clip_printw demo_forms demo_menus demo_panels ditto edit_field inch_wide inchs ins_wide insdelln inserts lrtest ncurses newdemo redraw savescreen test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs box_set test: ncurses can_change_color test: ncurses can_change_color_sp - cbreak test: background blue bs cardfile chgat clip_printw color_set demo_altkeys demo_defkey demo_forms demo_keyok demo_menus demo_panels ditto filter firework foldkeys form_driver_w gdc hanoi hashtest inch_wide inchs ins_wide insdelln inserts knight lrtest movewindow ncurses newdemo savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs view worm xmas cbreak_sp lib: ncurses chgat test: chgat clear test: blue bs gdc ncurses testcurs xmas clearok test: bs knight clrtobot test: demo_menus ncurses clrtoeol test: blue bs demo_altkeys foldkeys form_driver_w hanoi hashtest movewindow ncurses view color_content test: ncurses color_content_sp - color_set test: color_set ncurses copywin test: ncurses testcurs cur_term test: demo_termcap demo_terminfo dots dots_mvcur lrtest test_sgr test_vid_puts test_vidputs progs: clear tabs tput tset curs_set test: echochar firework gdc hanoi lrtest ncurses newdemo rain savescreen tclock testcurs worm xmas curs_set_sp lib: ncurses curscr test: demo_panels edit_field knight lrtest ncurses savescreen tclock view curses_version test: ncurses progs: infocmp tabs tic toe tput tset def_prog_mode test: bs ncurses def_prog_mode_sp lib: ncurses def_shell_mode - def_shell_mode_sp lib: ncurses define_key test: demo_altkeys demo_defkey foldkeys define_key_sp - del_curterm test: demo_terminfo test_sgr del_curterm_sp lib: ncurses delay_output test: newdemo delay_output_sp - delch - deleteln test: insdelln delscreen test: ditto dots_mvcur delwin test: cardfile chgat clip_printw demo_forms demo_panels edit_field inch_wide inchs ins_wide insdelln inserts movewindow ncurses newdemo redraw savescreen test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs derwin test: cardfile chgat clip_printw demo_forms demo_menus ditto inch_wide inchs ins_wide insdelln inserts movewindow ncurses test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque doupdate test: cardfile demo_menus demo_panels ditto edit_field ins_wide inserts knight movewindow ncurses redraw savescreen test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr doupdate_sp lib: ncurses dupwin test: edit_field echo test: bs hanoi ncurses test_get_wstr test_getstr testcurs testscanw echo_sp lib: ncurses echo_wchar test: ncurses echochar test: echochar ncurses endwin test: background blue bs cardfile chgat clip_printw color_set demo_altkeys demo_defkey demo_forms demo_keyok demo_menus demo_panels ditto dots_curses dots_mvcur echochar filter firework firstlast foldkeys form_driver_w gdc hanoi hashtest inch_wide inchs ins_wide insdelln inserts key_names keynames knight lrtest movewindow ncurses newdemo rain redraw savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testaddch testcurs testscanw view worm xmas endwin_sp lib: ncurses erase test: cardfile demo_menus filter firework firstlast hanoi lrtest ncurses tclock test_opaque testcurs erasechar lib: ncurses erasechar_sp lib: ncurses erasewchar - filter test: filter filter_sp - flash test: cardfile lrtest movewindow ncurses tclock testcurs flash_sp - flushinp test: ncurses newdemo testcurs flushinp_sp lib: ncurses get_escdelay - get_escdelay_sp - get_wch test: form_driver_w get_wstr test: test_get_wstr getattrs - getbegx test: chgat clip_printw demo_menus demo_panels insdelln movewindow ncurses newdemo redraw testcurs getbegy test: chgat clip_printw demo_menus demo_panels insdelln movewindow ncurses newdemo redraw testcurs getbkgd test: ncurses getbkgrnd test: ncurses getcchar test: ncurses view getch test: background blue bs chgat color_set demo_altkeys filter firework firstlast foldkeys hanoi hashtest insdelln lrtest savescreen tclock test_opaque testaddch testcurs view xmas getcurx test: bs chgat clip_printw demo_altkeys demo_defkey demo_panels firstlast foldkeys insdelln movewindow ncurses redraw savescreen test_get_wstr test_getstr test_opaque testcurs getcury test: bs chgat clip_printw demo_altkeys demo_defkey demo_panels edit_field firstlast foldkeys insdelln movewindow ncurses redraw savescreen test_opaque testcurs getmaxx test: chgat clip_printw demo_panels inch_wide inchs insdelln movewindow ncurses newdemo redraw test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs getmaxy test: chgat clip_printw demo_forms demo_panels inch_wide inchs insdelln movewindow ncurses newdemo redraw test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs getmouse test: bs knight movewindow ncurses testcurs getmouse_sp - getn_wstr test: test_get_wstr getnstr test: filter ncurses test_getstr getparx test: movewindow getpary test: movewindow getstr test: test_getstr getwin test: ncurses getwin_sp - halfdelay test: view halfdelay_sp - has_colors test: background bs cardfile chgat clip_printw color_set demo_forms demo_menus demo_panels dots_curses echochar filter firework gdc hanoi ins_wide insdelln inserts knight ncurses newdemo rain savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr testcurs view worm xmas has_colors_sp lib: ncurses has_ic test: lrtest has_ic_sp lib: ncurses has_il - has_il_sp lib: ncurses has_key - has_key_sp lib: ncurses has_mouse - has_mouse_sp - hline test: gdc ncurses hline_set - idcok test: test_opaque idlok test: ncurses test_opaque testscanw view immedok test: test_opaque in_wch test: inch_wide in_wchnstr test: inch_wide in_wchstr test: inch_wide inch test: inchs inchnstr test: inchs inchstr test: inchs init_color test: ncurses init_color_sp lib: ncurses init_pair test: background blue bs cardfile chgat clip_printw color_set demo_forms demo_menus demo_panels dots_curses echochar filter firework gdc hanoi ins_wide insdelln inserts knight ncurses newdemo rain savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr testaddch testcurs view worm xmas init_pair_sp - initscr test: background blue bs cardfile chgat clip_printw color_set demo_defkey demo_forms demo_keyok demo_menus demo_panels dots_curses echochar filter firework firstlast form_driver_w gdc hanoi hashtest inch_wide inchs ins_wide insdelln inserts knight lrtest movewindow ncurses newdemo rain redraw savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testaddch testcurs testscanw view worm xmas innstr test: test_instr innwstr test: test_inwstr ins_nwstr test: ins_wide ins_wch test: ins_wide ins_wstr test: ins_wide insch test: ins_wide inserts insdelln test: insdelln insertln test: insdelln insnstr test: inserts insstr test: inserts instr test: test_instr intrflush test: demo_forms movewindow intrflush_sp - inwstr test: test_inwstr is_cleared test: test_opaque is_idcok test: test_opaque is_idlok test: test_opaque is_immedok test: test_opaque is_keypad test: test_opaque is_leaveok test: test_opaque is_linetouched lib: form is_nodelay test: test_opaque is_notimeout test: test_opaque is_pad - is_scrollok test: test_opaque is_subwin - is_syncok test: test_opaque is_term_resized - is_term_resized_sp - is_wintouched lib: ncurses isendwin - isendwin_sp - key_defined test: demo_defkey foldkeys key_defined_sp lib: ncurses key_name test: key_names ncurses keybound test: demo_altkeys demo_defkey keybound_sp lib: ncurses keyname test: demo_altkeys demo_defkey demo_keyok demo_menus edit_field foldkeys keynames movewindow ncurses redraw test_getstr testcurs view progs: tic keyname_sp lib: ncurses keyok test: demo_keyok foldkeys keyok_sp lib: ncurses keypad test: bs cardfile chgat clip_printw demo_altkeys demo_defkey demo_forms demo_keyok demo_menus demo_panels ditto edit_field filter firework foldkeys form_driver_w hashtest inch_wide inchs ins_wide insdelln inserts key_names keynames knight lrtest movewindow ncurses redraw savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs testscanw view killchar lib: ncurses killchar_sp lib: ncurses killwchar - leaveok test: hanoi test_opaque longname test: testcurs progs: tput longname_sp - mcprint - mcprint_sp - meta test: key_names keynames ncurses mouse_trafo - mouseinterval - mouseinterval_sp - mousemask test: bs demo_forms demo_menus knight movewindow ncurses testcurs mousemask_sp - move test: blue bs cardfile chgat demo_altkeys demo_menus dots_curses echochar foldkeys gdc hanoi hashtest inch_wide inchs ins_wide inserts knight lrtest movewindow ncurses savescreen test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testscanw view xmas mvadd_wch test: ncurses test_add_wchstr test_addwstr mvadd_wchnstr test: test_add_wchstr mvadd_wchstr test: test_add_wchstr mvaddch test: bs gdc hanoi lrtest ncurses rain tclock test_add_wchstr test_addchstr test_addstr test_addwstr xmas mvaddchnstr test: gdc test_addchstr mvaddchstr test: test_addchstr mvaddnstr test: test_addstr mvaddnwstr test: test_addwstr mvaddstr test: bs demo_forms gdc hanoi knight ncurses rain tclock test_addstr testcurs xmas mvaddwstr test: test_addwstr mvchgat test: chgat mvcur test: dots_mvcur redraw mvcur_sp - mvdelch - mvderwin test: movewindow mvget_wch - mvget_wstr test: test_get_wstr mvgetch - mvgetn_wstr test: test_get_wstr mvgetnstr test: test_getstr mvgetstr test: test_getstr mvhline test: ncurses mvhline_set test: ncurses mvin_wch test: inch_wide mvin_wchnstr test: inch_wide mvin_wchstr test: inch_wide mvinch test: inchs mvinchnstr test: gdc inchs mvinchstr test: inchs mvinnstr test: test_instr mvinnwstr test: test_inwstr mvins_nwstr test: ins_wide mvins_wch test: ins_wide mvins_wstr test: ins_wide mvinsch test: ins_wide inserts mvinsnstr test: inserts mvinsstr test: inserts mvinstr test: test_instr mvinwstr test: test_inwstr mvprintw test: background bs firework form_driver_w hanoi ncurses savescreen tclock view mvscanw - mvvline test: ncurses mvvline_set test: ncurses mvwadd_wch test: test_add_wchstr test_addwstr mvwadd_wchnstr test: test_add_wchstr mvwadd_wchstr test: inch_wide test_add_wchstr mvwaddch test: movewindow newdemo test_add_wchstr test_addchstr test_addstr test_addwstr testcurs xmas mvwaddchnstr test: test_addchstr mvwaddchstr test: inchs test_addchstr mvwaddnstr test: newdemo test_addstr testcurs mvwaddnwstr test: test_addwstr mvwaddstr test: ditto firstlast ins_wide inserts knight ncurses newdemo test_addstr test_addwstr test_instr testcurs xmas mvwaddwstr test: test_addwstr test_inwstr mvwchgat test: chgat mvwdelch test: ncurses mvwget_wch - mvwget_wstr test: test_get_wstr mvwgetch test: inch_wide inchs test_get_wstr test_getstr test_instr test_inwstr test_opaque mvwgetn_wstr test: test_get_wstr mvwgetnstr test: test_getstr mvwgetstr test: test_getstr mvwhline test: movewindow mvwhline_set - mvwin test: cardfile demo_menus movewindow testcurs xmas mvwin_wch test: inch_wide mvwin_wchnstr test: inch_wide mvwin_wchstr test: inch_wide mvwinch test: inchs newdemo testcurs mvwinchnstr test: inchs mvwinchstr test: inchs mvwinnstr test: test_instr testcurs mvwinnwstr test: test_inwstr mvwins_nwstr test: ins_wide mvwins_wch test: ins_wide mvwins_wstr test: ins_wide mvwinsch test: ins_wide inserts mvwinsnstr test: inserts mvwinsstr test: inserts testcurs mvwinstr test: test_instr mvwinwstr test: test_inwstr mvwprintw test: chgat clip_printw demo_menus demo_panels inch_wide inchs insdelln ncurses test_instr test_inwstr testcurs mvwscanw test: testcurs mvwvline test: ins_wide inserts movewindow test_add_wchstr test_addchstr test_addstr test_addwstr mvwvline_set - napms test: demo_panels ditto dots dots_curses dots_mvcur echochar firework gdc hanoi lrtest ncurses railroad rain tclock test_opaque testcurs view worm xmas progs: tset napms_sp - new_prescr lib: ncurses newpad test: edit_field ncurses testcurs newpad_sp lib: ncurses newscr lib: ncurses newterm test: demo_altkeys ditto dots_mvcur filter foldkeys gdc key_names keynames test_setupterm newterm_sp - newwin test: cardfile chgat clip_printw demo_defkey demo_forms demo_keyok demo_menus demo_panels ditto edit_field firstlast inch_wide inchs ins_wide insdelln inserts knight movewindow ncurses newdemo redraw savescreen test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs xmas newwin_sp lib: ncurses nl test: demo_forms ncurses rain testcurs nl_sp lib: ncurses nocbreak test: testcurs nocbreak_sp lib: ncurses nodelay test: ditto firework gdc lrtest ncurses newdemo rain tclock test_opaque view worm xmas noecho test: background bs cardfile chgat clip_printw color_set demo_altkeys demo_defkey demo_forms demo_keyok demo_menus demo_panels ditto firework firstlast foldkeys form_driver_w gdc hanoi hashtest inch_wide inchs ins_wide insdelln inserts knight lrtest movewindow ncurses rain redraw savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs view worm xmas noecho_sp lib: ncurses nofilter - nofilter_sp - nonl test: bs demo_forms hashtest movewindow ncurses view worm xmas nonl_sp lib: ncurses noqiflush - noqiflush_sp - noraw test: demo_forms demo_menus ncurses testcurs noraw_sp lib: ncurses notimeout test: ncurses test_opaque numcodes test: demo_termcap test_arrays progs: dump_entry numfnames test: demo_terminfo test_arrays progs: dump_entry numnames test: demo_termcap demo_terminfo test_arrays progs: dump_entry infocmp ospeed test: demo_termcap progs: tset overlay test: ncurses testcurs xmas overwrite test: ncurses savescreen pair_content test: background color_set pair_content_sp lib: ncurses pecho_wchar - pechochar - pnoutrefresh test: edit_field ncurses prefresh test: testcurs printw test: background blue bs color_set demo_altkeys demo_defkey demo_keyok filter foldkeys ncurses savescreen testcurs testscanw view putp test: test_sgr progs: tput putp_sp - putwin test: ncurses qiflush - qiflush_sp - raw test: demo_forms ncurses redraw testcurs raw_sp lib: ncurses redrawwin test: redraw view refresh test: blue bs demo_defkey demo_forms demo_keyok demo_menus demo_panels dots_curses echochar filter firstlast form_driver_w gdc hanoi hashtest lrtest movewindow ncurses savescreen tclock testcurs view xmas reset_prog_mode test: filter ncurses reset_prog_mode_sp lib: ncurses reset_shell_mode test: bs filter savescreen test_setupterm reset_shell_mode_sp lib: ncurses resetty - resetty_sp - resize_term test: view resize_term_sp - resizeterm - resizeterm_sp lib: ncurses restartterm test: test_setupterm restartterm_sp - ripoffline test: demo_menus ncurses ripoffline_sp - savetty - savetty_sp - scanw test: testcurs testscanw scr_dump test: savescreen scr_init test: savescreen scr_init_sp - scr_restore test: savescreen scr_restore_sp - scr_set test: savescreen scr_set_sp - scrl test: view scroll test: testcurs scrollok test: clip_printw demo_altkeys demo_defkey demo_keyok demo_panels ditto foldkeys hashtest knight ncurses redraw test_opaque testcurs testscanw view set_curterm lib: ncurses set_curterm_sp - set_escdelay test: test_opaque set_escdelay_sp lib: ncurses set_tabsize test: test_opaque set_tabsize_sp - set_term lib: ncurses setcchar test: demo_panels ins_wide ncurses test_add_wchstr test_addwstr view setscrreg test: view setupterm test: demo_terminfo dots test_setupterm test_sgr test_vid_puts test_vidputs progs: clear tabs tput tset slk_attr - slk_attr_off - slk_attr_on - slk_attr_set test: ncurses slk_attr_set_sp - slk_attr_sp - slk_attroff lib: ncurses slk_attroff_sp - slk_attron lib: ncurses slk_attron_sp - slk_attrset test: ncurses slk_attrset_sp - slk_clear test: ncurses slk_clear_sp - slk_color test: ncurses slk_color_sp - slk_init test: ncurses slk_init_sp - slk_label test: ncurses slk_label_sp - slk_noutrefresh test: ncurses slk_noutrefresh_sp - slk_refresh test: ncurses slk_refresh_sp lib: ncurses slk_restore test: ncurses slk_restore_sp lib: ncurses slk_set test: ncurses slk_set_sp - slk_touch test: ncurses slk_touch_sp lib: ncurses slk_wset test: ncurses standend test: blue gdc ncurses standout test: blue ncurses start_color test: background blue bs cardfile chgat clip_printw color_set demo_forms demo_menus demo_panels dots_curses echochar filter firework gdc hanoi ins_wide insdelln inserts knight ncurses newdemo rain savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr testaddch testcurs view worm xmas start_color_sp - stdscr test: bs chgat clip_printw demo_altkeys demo_forms demo_menus demo_panels ditto filter firework foldkeys form_driver_w gdc hanoi hashtest inch_wide inchs ins_wide insdelln inserts key_names keynames knight lrtest movewindow ncurses rain redraw savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs testscanw view worm xmas strcodes test: demo_termcap test_arrays progs: dump_entry strfnames test: demo_terminfo test_arrays progs: dump_entry strnames test: demo_termcap demo_terminfo foldkeys test_arrays progs: dump_entry infocmp tic subpad test: testcurs subwin test: movewindow ncurses newdemo testcurs syncok test: test_opaque term_attrs test: ncurses term_attrs_sp - termattrs test: ncurses testcurs termattrs_sp lib: ncurses termname test: testcurs termname_sp lib: ncurses tgetent test: demo_termcap dots_termcap railroad tgetent_sp - tgetflag test: demo_termcap tgetflag_sp - tgetnum test: demo_termcap dots_termcap railroad tgetnum_sp - tgetstr test: demo_termcap dots_termcap railroad tgetstr_sp - tgoto test: dots_termcap railroad tigetflag test: demo_terminfo progs: tic tput tigetflag_sp - tigetnum test: demo_terminfo ncurses progs: tput tigetnum_sp - tigetstr test: demo_defkey demo_terminfo foldkeys test_sgr testcurs progs: clear tput tigetstr_sp - timeout test: rain savescreen tiparm - touchline test: chgat clip_printw insdelln touchwin test: chgat clip_printw demo_menus edit_field filter firstlast inch_wide inchs ins_wide insdelln inserts movewindow ncurses redraw savescreen test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque xmas tparm test: dots dots_mvcur test_sgr progs: tabs tic tput tputs test: dots dots_mvcur dots_termcap railroad test_vid_puts test_vidputs progs: clear tabs tset tputs_sp lib: ncurses trace test: demo_menus hashtest lrtest ncurses testcurs view worm ttytype test: demo_terminfo test_sgr typeahead test: testcurs typeahead_sp lib: ncurses unctrl test: ncurses redraw test_add_wchstr test_addchstr testcurs unctrl_sp lib: ncurses unget_wch - unget_wch_sp - ungetch test: bs knight ungetch_sp lib: ncurses ungetmouse - ungetmouse_sp - untouchwin lib: form use_default_colors test: background filter firework gdc hanoi knight ncurses rain tclock worm xmas use_default_colors_sp - use_env test: ncurses progs: tput use_env_sp - use_extended_names progs: infocmp tic use_legacy_coding - use_legacy_coding_sp - use_screen test: ditto use_tioctl test: ncurses use_tioctl_sp - use_window test: rain worm vid_attr test: test_vid_puts vid_attr_sp - vid_puts test: test_vid_puts vid_puts_sp lib: ncurses vidattr test: test_vidputs vidattr_sp - vidputs test: test_vidputs vidputs_sp - vline test: gdc ncurses vline_set - vw_printw test: clip_printw vw_scanw - vwprintw test: movewindow vwscanw lib: ncurses wadd_wch test: inch_wide ncurses test_add_wchstr test_addwstr wadd_wchnstr test: savescreen test_add_wchstr wadd_wchstr test: test_add_wchstr waddch test: demo_forms demo_panels ditto firstlast inch_wide inchs knight ncurses test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque worm waddchnstr test: test_addchstr waddchstr test: test_addchstr waddnstr test: demo_forms test_addstr waddnwstr test: ncurses test_addwstr waddstr test: chgat clip_printw demo_forms demo_panels edit_field firstlast ins_wide insdelln knight ncurses redraw test_add_wchstr test_addstr test_addwstr testcurs waddwstr test: ins_wide ncurses test_add_wchstr test_addwstr test_get_wstr wattr_get test: ncurses wattr_off lib: ncurses wattr_on lib: ncurses wattr_set test: ncurses wattroff test: demo_forms ncurses testcurs xmas wattron test: testcurs xmas wattrset test: clip_printw demo_forms insdelln ncurses newdemo test_get_wstr test_getstr testcurs xmas wbkgd test: cardfile demo_forms demo_menus ncurses newdemo testcurs wbkgdset test: demo_panels ins_wide inserts ncurses test_add_wchstr test_addchstr test_addstr test_addwstr wbkgrnd lib: ncurses wbkgrndset lib: ncurses wborder test: ncurses wborder_set test: ncurses wchgat test: chgat test_get_wstr test_getstr view wclear test: ncurses test_opaque testcurs wclrtobot test: firstlast inch_wide inchs ncurses test_instr test_inwstr testcurs wclrtoeol test: chgat clip_printw demo_defkey demo_keyok demo_menus demo_panels firstlast inch_wide inchs ins_wide insdelln inserts knight ncurses test_add_wchstr test_addchstr test_addstr test_addwstr test_instr test_inwstr testcurs wcolor_set lib: ncurses wcursyncup lib: form wdelch test: ncurses testcurs wdeleteln test: insdelln testcurs wecho_wchar lib: ncurses wechochar lib: ncurses wenclose test: ncurses werase test: cardfile demo_forms demo_menus demo_panels edit_field firstlast knight ncurses newdemo test_get_wstr test_getstr test_opaque testcurs xmas wget_wch test: ins_wide ncurses test_add_wchstr test_addwstr wget_wstr test: test_get_wstr wgetbkgrnd lib: ncurses wgetch test: cardfile chgat clip_printw demo_defkey demo_keyok demo_menus demo_panels ditto edit_field gdc insdelln inserts knight movewindow ncurses newdemo rain redraw savescreen test_addchstr test_addstr test_opaque testcurs worm wgetdelay - wgetn_wstr test: ncurses test_get_wstr wgetnstr test: ncurses test_getstr wgetparent test: test_opaque wgetscrreg test: test_opaque wgetstr test: test_getstr whline test: testcurs whline_set lib: ncurses win_wch test: inch_wide savescreen win_wchnstr test: inch_wide win_wchstr test: inch_wide winch test: inchs knight testcurs winchnstr test: inchs winchstr test: inchs winnstr test: demo_altkeys demo_defkey foldkeys test_instr winnwstr test: test_inwstr wins_nwstr test: ins_wide wins_wch test: ins_wide wins_wstr test: ins_wide winsch test: ins_wide inserts testcurs winsdelln test: insdelln winsertln test: insdelln testcurs winsnstr test: inserts winsstr test: inserts winstr test: test_instr winwstr test: test_inwstr wmouse_trafo test: ncurses wmove test: chgat clip_printw demo_altkeys demo_defkey demo_keyok demo_menus demo_panels firstlast foldkeys inch_wide inchs ins_wide insdelln inserts knight movewindow ncurses newdemo redraw savescreen test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs worm wnoutrefresh test: demo_menus ditto edit_field inch_wide inchs ins_wide inserts knight movewindow ncurses redraw test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque wprintw test: chgat clip_printw demo_defkey demo_forms demo_keyok demo_menus demo_panels edit_field inch_wide inchs ins_wide insdelln inserts knight movewindow ncurses savescreen test_add_wchstr test_addchstr test_addstr test_addwstr test_get_wstr test_getstr test_instr test_inwstr test_opaque testcurs wredrawln test: redraw wrefresh test: chgat clip_printw demo_forms demo_keyok demo_menus demo_panels edit_field firstlast ins_wide insdelln inserts knight lrtest movewindow ncurses newdemo redraw savescreen tclock test_add_wchstr test_addchstr test_addstr test_addwstr testcurs view worm xmas wresize test: cardfile ncurses wscanw test: testcurs wscrl test: ncurses testcurs wsetscrreg test: ncurses testcurs wstandend test: ncurses test_opaque xmas wstandout test: ncurses test_opaque xmas wsyncdown test: movewindow wsyncup lib: form wtimeout test: ncurses wtouchln lib: ncurses wunctrl lib: ncurses wunctrl_sp - wvline test: testcurs wvline_set lib: ncurses libpanel: -------- bottom_panel test: demo_panels ncurses ceiling_panel - del_panel test: demo_panels ncurses ground_panel - hide_panel test: demo_panels ncurses move_panel test: demo_panels ncurses new_panel test: cardfile demo_panels ncurses panel_above test: demo_panels panel_below test: demo_panels panel_hidden test: demo_panels panel_userptr test: demo_panels ncurses panel_window test: cardfile demo_panels ncurses replace_panel test: demo_panels set_panel_userptr test: demo_panels ncurses show_panel test: demo_panels ncurses top_panel test: cardfile demo_panels ncurses update_panels test: cardfile demo_panels ncurses update_panels_sp - ncurses-6.0-20160213/test/worm.c0000644000175100001440000003377512161401245014576 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* @@@ @@@ @@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@ @@@ @@@ @@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@ @@@ @@@ @@@@ @@@@ @@@@ @@@@ @@@ @@@@ @@@ @@ @@@ @@@ @@@ @@@ @@@ @@@ @@@ @@@ @@@@ @@@ @@@ @@@ @@@ @@@ @@@ @@@ @@@@ @@@@ @@@@ @@@ @@@ @@@ @@@ @@@ @@@ @@@@@@@@@@@@ @@@@ @@@@ @@@ @@@ @@@ @@@ @@@@ @@@@ @@@@@@@@@@@@ @@@ @@@ @@@ @@@ @@ @@ @@@@@@@@@@ @@@ @@@ @@@ @@@ Eric P. Scott Caltech High Energy Physics October, 1980 Hacks to turn this into a test frame for cursor movement: Eric S. Raymond January, 1995 July 1995 (esr): worms is now in living color! :-) Options: -f fill screen with copies of 'WORM' at start. -l set worm length -n set number of worms -t make worms leave droppings -T set trace interval -S set single-stepping during trace interval -N suppress cursor-movement optimization This program makes a good torture-test for the ncurses cursor-optimization code. You can use -T to set the worm move interval over which movement traces will be dumped. The program stops and waits for one character of input at the beginning and end of the interval. $Id: worm.c,v 1.65 2013/06/22 20:01:41 tom Exp $ */ #include #ifdef USE_PTHREADS #include #endif WANT_USE_WINDOW(); #define MAX_WORMS 40 #define MAX_LENGTH 1024 static chtype flavor[] = { 'O', '*', '#', '$', '%', '0', '@', }; static const int xinc[] = { 1, 1, 1, 0, -1, -1, -1, 0 }, yinc[] = { -1, 0, 1, 1, 1, 0, -1, -1 }; typedef struct worm { int orientation; int head; int *xpos; int *ypos; chtype attrs; #ifdef USE_PTHREADS pthread_t thread; #endif } WORM; static unsigned long sequence = 0; static bool quitting = FALSE; static WORM worm[MAX_WORMS]; static int **refs; static int last_x, last_y; static const char *field; static int length = 16, number = 3; static chtype trail = ' '; static unsigned pending; #ifdef TRACE static int generation, trace_start, trace_end; #endif /* TRACE */ /* *INDENT-OFF* */ static const struct options { int nopts; int opts[3]; } normal[8]={ { 3, { 7, 0, 1 } }, { 3, { 0, 1, 2 } }, { 3, { 1, 2, 3 } }, { 3, { 2, 3, 4 } }, { 3, { 3, 4, 5 } }, { 3, { 4, 5, 6 } }, { 3, { 5, 6, 7 } }, { 3, { 6, 7, 0 } } }, upper[8]={ { 1, { 1, 0, 0 } }, { 2, { 1, 2, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 2, { 4, 5, 0 } }, { 1, { 5, 0, 0 } }, { 2, { 1, 5, 0 } } }, left[8]={ { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 2, { 2, 3, 0 } }, { 1, { 3, 0, 0 } }, { 2, { 3, 7, 0 } }, { 1, { 7, 0, 0 } }, { 2, { 7, 0, 0 } } }, right[8]={ { 1, { 7, 0, 0 } }, { 2, { 3, 7, 0 } }, { 1, { 3, 0, 0 } }, { 2, { 3, 4, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 2, { 6, 7, 0 } } }, lower[8]={ { 0, { 0, 0, 0 } }, { 2, { 0, 1, 0 } }, { 1, { 1, 0, 0 } }, { 2, { 1, 5, 0 } }, { 1, { 5, 0, 0 } }, { 2, { 5, 6, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } } }, upleft[8]={ { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 1, { 3, 0, 0 } }, { 2, { 1, 3, 0 } }, { 1, { 1, 0, 0 } } }, upright[8]={ { 2, { 3, 5, 0 } }, { 1, { 3, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 1, { 5, 0, 0 } } }, lowleft[8]={ { 3, { 7, 0, 1 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 1, { 1, 0, 0 } }, { 2, { 1, 7, 0 } }, { 1, { 7, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } } }, lowright[8]={ { 0, { 0, 0, 0 } }, { 1, { 7, 0, 0 } }, { 2, { 5, 7, 0 } }, { 1, { 5, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } }, { 0, { 0, 0, 0 } } }; /* *INDENT-ON* */ static void failed(const char *s) { perror(s); endwin(); ExitProgram(EXIT_FAILURE); } static void cleanup(void) { USING_WINDOW(stdscr, wrefresh); curs_set(1); endwin(); } static void onsig(int sig GCC_UNUSED) { cleanup(); ExitProgram(EXIT_FAILURE); } static double ranf(void) { long r = (rand() & 077777); return ((double) r / 32768.); } static int draw_worm(WINDOW *win, void *data) { WORM *w = (WORM *) data; const struct options *op; unsigned mask = (unsigned) (~(1 << (w - worm))); chtype attrs = w->attrs | ((mask & pending) ? A_REVERSE : 0); int x; int y; int h; bool done = FALSE; if ((x = w->xpos[h = w->head]) < 0) { wmove(win, y = w->ypos[h] = last_y, x = w->xpos[h] = 0); waddch(win, attrs); refs[y][x]++; } else { y = w->ypos[h]; } if (x > last_x) x = last_x; if (y > last_y) y = last_y; if (++h == length) h = 0; if (w->xpos[w->head = h] >= 0) { int x1, y1; x1 = w->xpos[h]; y1 = w->ypos[h]; if (y1 < LINES && x1 < COLS && --refs[y1][x1] == 0) { wmove(win, y1, x1); waddch(win, trail); } } op = &(x == 0 ? (y == 0 ? upleft : (y == last_y ? lowleft : left)) : (x == last_x ? (y == 0 ? upright : (y == last_y ? lowright : right)) : (y == 0 ? upper : (y == last_y ? lower : normal))))[w->orientation]; switch (op->nopts) { case 0: done = TRUE; break; case 1: w->orientation = op->opts[0]; break; default: w->orientation = op->opts[(int) (ranf() * (double) op->nopts)]; break; } if (!done) { x += xinc[w->orientation]; y += yinc[w->orientation]; wmove(win, y, x); if (y < 0) y = 0; waddch(win, attrs); w->ypos[h] = y; w->xpos[h] = x; refs[y][x]++; } return done; } #ifdef USE_PTHREADS static bool quit_worm(int bitnum) { pending |= (1 << bitnum); napms(10); /* let the other thread(s) have a chance */ pending &= ~(1 << bitnum); return quitting; } static void * start_worm(void *arg) { unsigned long compare = 0; Trace(("start_worm")); while (!quit_worm(((struct worm *) arg) - worm)) { while (compare < sequence) { ++compare; #if HAVE_USE_WINDOW use_window(stdscr, draw_worm, arg); #else draw_worm(stdscr, arg); #endif } } Trace(("...start_worm (done)")); return NULL; } #endif static bool draw_all_worms(void) { bool done = FALSE; int n; struct worm *w; #ifdef USE_PTHREADS static bool first = TRUE; if (first) { first = FALSE; for (n = 0, w = &worm[0]; n < number; n++, w++) { (void) pthread_create(&(w->thread), NULL, start_worm, w); } } #else for (n = 0, w = &worm[0]; n < number; n++, w++) { if ( #if HAVE_USE_WINDOW USING_WINDOW2(stdscr, draw_worm, w) #else draw_worm(stdscr, w) #endif ) done = TRUE; } #endif return done; } static int get_input(void) { int ch; ch = USING_WINDOW(stdscr, wgetch); return ch; } #ifdef KEY_RESIZE static int update_refs(WINDOW *win) { int x, y; (void) win; if (last_x != COLS - 1) { for (y = 0; y <= last_y; y++) { refs[y] = typeRealloc(int, (size_t) COLS, refs[y]); if (!refs[y]) failed("update_refs"); for (x = last_x + 1; x < COLS; x++) refs[y][x] = 0; } last_x = COLS - 1; } if (last_y != LINES - 1) { for (y = LINES; y <= last_y; y++) free(refs[y]); refs = typeRealloc(int *, (size_t) LINES, refs); for (y = last_y + 1; y < LINES; y++) { refs[y] = typeMalloc(int, (size_t) COLS); if (!refs[y]) failed("update_refs"); for (x = 0; x < COLS; x++) refs[y][x] = 0; } last_y = LINES - 1; } return OK; } #endif int main(int argc, char *argv[]) { int x, y; int n; struct worm *w; int *ip; bool done = FALSE; int max_refs; setlocale(LC_ALL, ""); for (x = 1; x < argc; x++) { char *p; p = argv[x]; if (*p == '-') p++; switch (*p) { case 'f': field = "WORM"; break; case 'l': if (++x == argc) goto usage; if ((length = atoi(argv[x])) < 2 || length > MAX_LENGTH) { fprintf(stderr, "%s: Invalid length\n", *argv); ExitProgram(EXIT_FAILURE); } break; case 'n': if (++x == argc) goto usage; if ((number = atoi(argv[x])) < 1 || number > MAX_WORMS) { fprintf(stderr, "%s: Invalid number of worms\n", *argv); ExitProgram(EXIT_FAILURE); } break; case 't': trail = '.'; break; #ifdef TRACE case 'T': trace_start = atoi(argv[++x]); trace_end = atoi(argv[++x]); break; case 'N': _nc_optimize_enable ^= OPTIMIZE_ALL; /* declared by ncurses */ break; #endif /* TRACE */ default: usage: fprintf(stderr, "usage: %s [-field] [-length #] [-number #] [-trail]\n", *argv); ExitProgram(EXIT_FAILURE); } } signal(SIGINT, onsig); initscr(); noecho(); cbreak(); nonl(); curs_set(0); last_y = LINES - 1; last_x = COLS - 1; #ifdef A_COLOR if (has_colors()) { int bg = COLOR_BLACK; start_color(); #if HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) bg = -1; #endif #define SET_COLOR(num, fg) \ init_pair(num+1, (short) fg, (short) bg); \ flavor[num] |= (chtype) COLOR_PAIR(num+1) | A_BOLD SET_COLOR(0, COLOR_GREEN); SET_COLOR(1, COLOR_RED); SET_COLOR(2, COLOR_CYAN); SET_COLOR(3, COLOR_WHITE); SET_COLOR(4, COLOR_MAGENTA); SET_COLOR(5, COLOR_BLUE); SET_COLOR(6, COLOR_YELLOW); } #endif /* A_COLOR */ max_refs = LINES; refs = typeMalloc(int *, (size_t) max_refs); for (y = 0; y < max_refs; y++) { refs[y] = typeMalloc(int, (size_t) COLS); for (x = 0; x < COLS; x++) { refs[y][x] = 0; } } #ifdef BADCORNER /* if addressing the lower right corner doesn't work in your curses */ refs[last_y][last_x] = 1; #endif /* BADCORNER */ for (n = number, w = &worm[0]; --n >= 0; w++) { w->attrs = flavor[(unsigned) n % SIZEOF(flavor)]; w->orientation = 0; w->head = 0; if (!(ip = typeMalloc(int, (size_t) (length + 1)))) { fprintf(stderr, "%s: out of memory\n", *argv); ExitProgram(EXIT_FAILURE); } w->xpos = ip; for (x = length; --x >= 0;) *ip++ = -1; if (!(ip = typeMalloc(int, (size_t) (length + 1)))) { fprintf(stderr, "%s: out of memory\n", *argv); ExitProgram(EXIT_FAILURE); } w->ypos = ip; for (y = length; --y >= 0;) *ip++ = -1; } if (field) { const char *p; p = field; for (y = last_y; --y >= 0;) { for (x = COLS; --x >= 0;) { addch((chtype) (*p++)); if (!*p) p = field; } } } USING_WINDOW(stdscr, wrefresh); nodelay(stdscr, TRUE); while (!done) { int ch; ++sequence; if ((ch = get_input()) > 0) { #ifdef TRACE if (trace_start || trace_end) { if (generation == trace_start) { trace(TRACE_CALLS); get_input(); } else if (generation == trace_end) { trace(0); get_input(); } generation++; } #endif #ifdef KEY_RESIZE if (ch == KEY_RESIZE) { USING_WINDOW(stdscr, update_refs); } #endif /* * Make it simple to put this into single-step mode, or resume * normal operation -T.Dickey */ if (ch == 'q') { quitting = TRUE; done = TRUE; continue; } else if (ch == 's') { nodelay(stdscr, FALSE); } else if (ch == ' ') { nodelay(stdscr, TRUE); } } done = draw_all_worms(); napms(10); USING_WINDOW(stdscr, wrefresh); } Trace(("Cleanup")); cleanup(); #ifdef NO_LEAKS for (y = 0; y < max_refs; y++) { free(refs[y]); } free(refs); for (n = number, w = &worm[0]; --n >= 0; w++) { free(w->xpos); free(w->ypos); } #endif #ifdef USE_PTHREADS /* * Do this just in case one of the threads did not really exit. */ Trace(("join all threads")); for (n = 0; n < number; n++) { pthread_join(worm[n].thread, NULL); } #endif ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/lrtest.c0000644000175100001440000001236211367076373015135 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Test lower-right-hand corner access * * originally by Eric S. Raymond , written for animation * and resizing -T.Dickey * * This can't be part of the ncurses test-program, because ncurses rips off the * bottom line to do labels. * * $Id: lrtest.c,v 1.22 2010/05/01 19:11:55 tom Exp $ */ #include typedef struct { int y, x, mode, dir, inc; chtype value; } MARK; /* * Make a couple of markers go 'round the border to demonstrate that we can * really write to all positions properly. */ static void show(MARK *m) { MvAddCh(m->y, m->x, m->value); if (m->mode == 0) { /* along the x-direction */ m->x += m->inc; if (m->x >= COLS) { m->x = COLS - 1; m->inc = -m->dir * m->inc; m->y += m->inc; m->mode = 1; } else if (m->x < 0) { m->x = 0; m->inc = -m->dir * m->inc; m->y += m->inc; m->mode = 1; } } else { /* along the y-direction */ m->y += m->inc; if (m->y >= LINES) { m->y = LINES - 1; m->inc = m->dir * m->inc; m->x += m->inc; m->mode = 0; } else if (m->y < 0) { m->y = 0; m->inc = m->dir * m->inc; m->x += m->inc; m->mode = 0; } } } int main( int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { static MARK marks[] = { {0, 0, 0, -1, 1, '+' | A_BOLD}, {0, 0, 1, 1, 2, 'X'}, {0, 0, 1, -1, 3, 'Y'}, {0, 8, 0, -1, 1, '+' | A_BOLD}, {0, 9, 0, -1, 1, '+' | A_BOLD}, {1, 0, 1, 1, 1, '*' | A_REVERSE}, {2, 0, 1, 1, 1, '*' | A_REVERSE} }; setlocale(LC_ALL, ""); initscr(); noecho(); cbreak(); nodelay(stdscr, TRUE); curs_set(0); #ifdef KEY_RESIZE keypad(stdscr, TRUE); restart: #endif move(LINES / 2 - 1, 4); if (!(has_ic() #if HAVE_SETUPTERM /* see PutCharLR() */ || auto_right_margin || (enter_am_mode && exit_am_mode) #endif )) { addstr("Your terminal lacks the capabilities needed to address the\n"); move(LINES / 2, 4); addstr("lower-right-hand corner of the screen.\n"); } else { addstr("This is a test of access to the lower right corner.\n"); move(LINES / 2, 4); addstr("If the top of the box is missing, the test failed.\n"); move(LINES / 2 + 1, 4); addstr("Please report this (with a copy of your terminfo entry).\n"); move(LINES / 2 + 2, 4); addstr("to the ncurses maintainers, at bug-ncurses@gnu.org.\n"); } for (;;) { int ch; unsigned n; box(stdscr, 0, 0); for (n = 0; n < SIZEOF(marks); n++) { show(&marks[n]); } if ((ch = getch()) > 0) { if (ch == 'q') break; else if (ch == 's') nodelay(stdscr, FALSE); else if (ch == ' ') nodelay(stdscr, TRUE); #ifdef TRACE else if (ch == 'T') trace(0); else if (ch == 't') trace(TRACE_CALLS | TRACE_ICALLS | TRACE_UPDATE); #endif #ifdef KEY_RESIZE else if (ch == KEY_RESIZE) { for (n = 0; n < SIZEOF(marks); n++) { if (marks[n].mode == 0) { /* moving along x-direction */ if (marks[n].y) marks[n].y = LINES - 1; } else { if (marks[n].x) marks[n].x = COLS - 1; } } flash(); erase(); wrefresh(curscr); goto restart; } #endif } napms(50); refresh(); } curs_set(1); endwin(); ExitProgram(EXIT_SUCCESS); } /* lrtest.c ends here */ ncurses-6.0-20160213/test/tracemunch0000755000175100001440000001201710214661647015522 0ustar tomusers#!/usr/bin/perl -w # $Id: tracemunch,v 1.6 2005/03/12 21:48:23 tom Exp $ ############################################################################## # Copyright (c) 1998-2002,2005 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # tracemunch -- compactify ncurses trace logs # # The error logs produced by ncurses with tracing enabled can be very tedious # to wade through. This script helps by compacting runs of log lines that # can be conveniently expressed as higher-level operations. use strict; our $putattr="PutAttrChar\\({{ '(.)' = 0[0-7]+ }}\\) at \\(([0-9]+), ([0-9]+)\\)"; our $waddnstr="waddnstr\\(0x([0-9a-f]+),\"([^\"]+)\",[0-9]+\\) called {A_NORMAL}"; our $win_nums=0; our $curscr=""; our $newscr=""; our $stdscr=""; our @win_addr; sub transaddr { my $n; my $arg = $_[0]; $arg =~ s/$curscr/curscr/g if ($curscr); $arg =~ s/$newscr/newscr/g if ($newscr); $arg =~ s/$stdscr/stdscr/g if ($stdscr); for $n (0..$#win_addr) { $arg =~ s/$win_addr[$n]/window$n/g if $win_addr[$n]; } return $arg; } while () { my $addr; my $n; my $awaiting; CLASSIFY: { # Transform window pointer addresses so it's easier to compare logs $awaiting = "curscr" if ($_ =~ /creating curscr/); $awaiting = "newscr" if ($_ =~ /creating newscr/); $awaiting = "stdscr" if ($_ =~ /creating stdscr/); if ($_ =~ /^create :window 0x([0-9a-f]+)/) { $addr = "0x$1"; if ($awaiting eq "curscr") { $curscr = $addr; } elsif ($awaiting eq "newscr") { $newscr = $addr; } elsif ($awaiting eq "stdscr") { $stdscr = $addr; } else { $win_addr[$win_nums] = $addr; $win_nums = $win_nums + 1; } $awaiting = ""; } elsif ($_ =~ /^\.\.\.deleted win=0x([0-9a-f]+)/) { $addr = "0x$1"; $_ = &transaddr($_); if ($addr eq $curscr) { $curscr = ""; } elsif ($addr eq $newscr) { $newscr = ""; } elsif ($addr eq $stdscr) { $stdscr = ""; } else { for $n (0..$#win_addr) { if ($win_addr[$n] eq $addr) { $win_addr[$n] = ""; } } } } # Compactify runs of PutAttrChar calls (TR_CHARPUT) if ($_ =~ /$putattr/) { my $putattr_chars = $1; my $starty = $2; my $startx = $3; while () { if ($_ =~ /$putattr/) { $putattr_chars .= $1; } else { last; } } print "RUN of PutAttrChar()s: \"$putattr_chars\" from ${starty}, ${startx}\n"; redo CLASSIFY; } # Compactify runs of waddnstr calls (TR_CALLS) if ($_ =~ /$waddnstr/) { my $waddnstr_chars = $2; my $winaddr = $1; while () { if ($_ =~ /$waddnstr/ && $1 eq $winaddr) { $waddnstr_chars .= $2; } else { last; } } my $winaddstr = &transaddr($winaddr); print "RUN of waddnstr()s: $winaddr, \"$waddnstr_chars\"\n"; redo CLASSIFY; } # More transformations can go here # Repeated runs of anything my $anyline = &transaddr($_); my $repeatcount = 1; while () { if (&transaddr($_) eq $anyline) { $repeatcount++; } else { last; } } if ($repeatcount > 1) { print "${repeatcount} REPEATS OF $anyline"; } else { print $anyline } redo CLASSIFY if $_; } # :CLASSIFY } # tracemunch ends here ncurses-6.0-20160213/test/ncurses.c0000644000175100001440000050653112642077122015276 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** NAME ncurses.c --- ncurses library exerciser SYNOPSIS ncurses DESCRIPTION An interactive test module for the ncurses library. AUTHOR Author: Eric S. Raymond 1993 Thomas E. Dickey (beginning revision 1.27 in 1996). $Id: ncurses.c,v 1.429 2016/01/03 01:50:10 tom Exp $ ***************************************************************************/ #include #ifdef __hpux #undef mvwdelch /* HPUX 11.23 macro will not compile */ #endif #if HAVE_GETTIMEOFDAY #if HAVE_SYS_TIME_H && HAVE_SYS_TIME_SELECT #include #endif #if HAVE_SYS_SELECT_H #include #endif #endif #if USE_LIBPANEL #include #endif #if USE_LIBMENU #include #endif #if USE_LIBFORM #include #endif #ifdef NCURSES_VERSION #define NCURSES_CONST_PARAM const void #ifdef TRACE static unsigned save_trace = TRACE_ORDINARY | TRACE_ICALLS | TRACE_CALLS; extern unsigned _nc_tracing; #endif #else #define NCURSES_CONST_PARAM char #define mmask_t chtype /* not specified in XSI */ #ifndef ACS_S3 #ifdef CURSES_ACS_ARRAY #define ACS_S3 (CURSES_ACS_ARRAY['p']) /* scan line 3 */ #define ACS_S7 (CURSES_ACS_ARRAY['r']) /* scan line 7 */ #define ACS_LEQUAL (CURSES_ACS_ARRAY['y']) /* less/equal */ #define ACS_GEQUAL (CURSES_ACS_ARRAY['z']) /* greater/equal */ #define ACS_PI (CURSES_ACS_ARRAY['{']) /* Pi */ #define ACS_NEQUAL (CURSES_ACS_ARRAY['|']) /* not equal */ #define ACS_STERLING (CURSES_ACS_ARRAY['}']) /* UK pound sign */ #else #define ACS_S3 (A_ALTCHARSET + 'p') /* scan line 3 */ #define ACS_S7 (A_ALTCHARSET + 'r') /* scan line 7 */ #define ACS_LEQUAL (A_ALTCHARSET + 'y') /* less/equal */ #define ACS_GEQUAL (A_ALTCHARSET + 'z') /* greater/equal */ #define ACS_PI (A_ALTCHARSET + '{') /* Pi */ #define ACS_NEQUAL (A_ALTCHARSET + '|') /* not equal */ #define ACS_STERLING (A_ALTCHARSET + '}') /* UK pound sign */ #endif #endif /* ACS_S3 */ #ifndef WACS_S3 #ifdef CURSES_WACS_ARRAY #define WACS_S3 (&(CURSES_WACS_ARRAY['p'])) /* scan line 3 */ #define WACS_S7 (&(CURSES_WACS_ARRAY['r'])) /* scan line 7 */ #define WACS_LEQUAL (&(CURSES_WACS_ARRAY['y'])) /* less/equal */ #define WACS_GEQUAL (&(CURSES_WACS_ARRAY['z'])) /* greater/equal */ #define WACS_PI (&(CURSES_WACS_ARRAY['{'])) /* Pi */ #define WACS_NEQUAL (&(CURSES_WACS_ARRAY['|'])) /* not equal */ #define WACS_STERLING (&(CURSES_WACS_ARRAY['}'])) /* UK pound sign */ #endif #endif #endif #if HAVE_WCSRTOMBS #define count_wchars(src, len, state) wcsrtombs(0, &src, len, state) #define trans_wchars(dst, src, len, state) wcsrtombs(dst, &src, len, state) #define reset_wchars(state) init_mb(state) #elif HAVE_WCSTOMBS && HAVE_MBTOWC && HAVE_MBLEN #define count_wchars(src, len, state) wcstombs(0, src, len) #define trans_wchars(dst, src, len, state) wcstombs(dst, src, len) #define reset_wchars(state) IGNORE_RC(mblen(NULL, 0)), IGNORE_RC(mbtowc(NULL, NULL, 0)) #define state_unused #endif #if HAVE_MBSRTOWCS #define count_mbytes(src, len, state) mbsrtowcs(0, &src, len, state) #define trans_mbytes(dst, src, len, state) mbsrtowcs(dst, &src, len, state) #define reset_mbytes(state) init_mb(state) #elif HAVE_MBSTOWCS && HAVE_MBTOWC && HAVE_MBLEN #define count_mbytes(src, len, state) mbstowcs(0, src, len) #define trans_mbytes(dst, src, len, state) mbstowcs(dst, src, len) #define reset_mbytes(state) IGNORE_RC(mblen(NULL, 0)), IGNORE_RC(mbtowc(NULL, NULL, 0)) #define state_unused #endif #define ToggleAcs(temp,real) temp = ((temp == real) ? 0 : real) #define P(string) printw("%s\n", string) #define BLANK ' ' /* this is the background character */ #undef max_colors static int max_colors; /* the actual number of colors we'll use */ static int min_colors; /* the minimum color code */ static bool use_colors; /* true if we use colors */ #undef max_pairs static int max_pairs; /* ...and the number of color pairs */ typedef struct { NCURSES_COLOR_T red; NCURSES_COLOR_T green; NCURSES_COLOR_T blue; } RGB_DATA; static RGB_DATA *all_colors; static void main_menu(bool); static void failed(const char *s) { perror(s); endwin(); ExitProgram(EXIT_FAILURE); } /* The behavior of mvhline, mvvline for negative/zero length is unspecified, * though we can rely on negative x/y values to stop the macro. */ static void do_h_line(int y, int x, chtype c, int to) { if ((to) > (x)) MvHLine(y, x, c, (to) - (x)); } static void do_v_line(int y, int x, chtype c, int to) { if ((to) > (y)) MvVLine(y, x, c, (to) - (y)); } static void Repaint(void) { touchwin(stdscr); touchwin(curscr); wrefresh(curscr); } static bool isQuit(int c) { return ((c) == QUIT || (c) == ESCAPE); } #define case_QUIT QUIT: case ESCAPE /* Common function to allow ^T to toggle trace-mode in the middle of a test * so that trace-files can be made smaller. */ static int wGetchar(WINDOW *win) { int c; #ifdef TRACE while ((c = wgetch(win)) == CTRL('T')) { if (_nc_tracing) { save_trace = _nc_tracing; Trace(("TOGGLE-TRACING OFF")); _nc_tracing = 0; } else { _nc_tracing = save_trace; } trace(_nc_tracing); if (_nc_tracing) Trace(("TOGGLE-TRACING ON")); } #else c = wgetch(win); #endif return c; } #define Getchar() wGetchar(stdscr) /* replaces wgetnstr(), since we want to be able to edit values */ static void wGetstring(WINDOW *win, char *buffer, int limit) { int y0, x0, x, ch; bool done = FALSE; echo(); getyx(win, y0, x0); (void) wattrset(win, A_REVERSE); x = (int) strlen(buffer); while (!done) { if (x > (int) strlen(buffer)) x = (int) strlen(buffer); wmove(win, y0, x0); wprintw(win, "%-*s", limit, buffer); wmove(win, y0, x0 + x); switch (ch = wGetchar(win)) { case '\n': case KEY_ENTER: done = TRUE; break; case CTRL('U'): *buffer = '\0'; break; case '\b': case KEY_BACKSPACE: case KEY_DC: if (x > 0) { int j; for (j = --x; (buffer[j] = buffer[j + 1]) != '\0'; ++j) { ; } } else { beep(); } break; case KEY_LEFT: if (x > 0) { --x; } else { flash(); } break; case KEY_RIGHT: ++x; break; default: if (!isprint(ch) || ch >= KEY_MIN) { beep(); } else if ((int) strlen(buffer) < limit) { int j; for (j = (int) strlen(buffer) + 1; j > x; --j) { buffer[j] = buffer[j - 1]; } buffer[x++] = (char) ch; } else { flash(); } } } wattroff(win, A_REVERSE); wmove(win, y0, x0); noecho(); } #if USE_WIDEC_SUPPORT static wchar_t fullwidth_digit(int ch) { return (wchar_t) (ch + 0xff10 - '0'); } static void make_fullwidth_text(wchar_t *target, const char *source) { int ch; while ((ch = *source++) != 0) { *target++ = fullwidth_digit(ch); } *target = 0; } static void make_narrow_text(wchar_t *target, const char *source) { int ch; while ((ch = *source++) != 0) { *target++ = (wchar_t) ch; } *target = 0; } #if USE_LIBPANEL static void make_fullwidth_digit(cchar_t *target, int digit) { wchar_t source[2]; source[0] = fullwidth_digit(digit + '0'); source[1] = 0; setcchar(target, source, A_NORMAL, 0, 0); } #endif static int wGet_wchar(WINDOW *win, wint_t *result) { int c; #ifdef TRACE while ((c = wget_wch(win, result)) == CTRL('T')) { if (_nc_tracing) { save_trace = _nc_tracing; Trace(("TOGGLE-TRACING OFF")); _nc_tracing = 0; } else { _nc_tracing = save_trace; } trace(_nc_tracing); if (_nc_tracing) Trace(("TOGGLE-TRACING ON")); } #else c = wget_wch(win, result); #endif return c; } #define Get_wchar(result) wGet_wchar(stdscr, result) /* replaces wgetn_wstr(), since we want to be able to edit values */ static void wGet_wstring(WINDOW *win, wchar_t *buffer, int limit) { int y0, x0, x; wint_t ch; bool done = FALSE; bool fkey = FALSE; echo(); getyx(win, y0, x0); (void) wattrset(win, A_REVERSE); x = (int) wcslen(buffer); while (!done) { if (x > (int) wcslen(buffer)) x = (int) wcslen(buffer); /* clear the "window' */ wmove(win, y0, x0); wprintw(win, "%*s", limit, " "); /* write the existing buffer contents */ wmove(win, y0, x0); waddnwstr(win, buffer, limit); /* positions the cursor past character 'x' */ wmove(win, y0, x0); waddnwstr(win, buffer, x); switch (wGet_wchar(win, &ch)) { case KEY_CODE_YES: fkey = TRUE; switch (ch) { case KEY_ENTER: ch = '\n'; fkey = FALSE; break; case KEY_BACKSPACE: case KEY_DC: ch = '\b'; fkey = FALSE; break; case KEY_LEFT: case KEY_RIGHT: break; default: ch = (wint_t) -1; break; } break; case OK: fkey = FALSE; break; default: ch = (wint_t) -1; fkey = TRUE; break; } switch (ch) { case '\n': done = TRUE; break; case CTRL('U'): *buffer = '\0'; break; case '\b': if (x > 0) { int j; for (j = --x; (buffer[j] = buffer[j + 1]) != '\0'; ++j) { ; } } else { beep(); } break; case KEY_LEFT: if (x > 0) { --x; } else { beep(); } break; case KEY_RIGHT: ++x; break; default: if (fkey) { beep(); } else if ((int) wcslen(buffer) < limit) { int j; for (j = (int) wcslen(buffer) + 1; j > x; --j) { buffer[j] = buffer[j - 1]; } buffer[x++] = (wchar_t) ch; } else { beep(); } } } wattroff(win, A_REVERSE); wmove(win, y0, x0); noecho(); } #endif static void Pause(void) { move(LINES - 1, 0); addstr("Press any key to continue... "); (void) Getchar(); } static void Cannot(const char *what) { printw("\nThis %s terminal %s\n\n", getenv("TERM"), what); Pause(); } static void ShellOut(bool message) { if (message) addstr("Shelling out..."); def_prog_mode(); endwin(); #ifdef __MINGW32__ system("cmd.exe"); #else IGNORE_RC(system("sh")); #endif if (message) addstr("returned from shellout.\n"); refresh(); } #ifdef NCURSES_MOUSE_VERSION /* * This function is the same as _tracemouse(), but we cannot count on that * being available in the non-debug library. */ static const char * mouse_decode(MEVENT const *ep) { static char buf[80 + (5 * 10) + (32 * 15)]; (void) sprintf(buf, "id %2d at (%2d, %2d, %d) state %4lx = {", ep->id, ep->x, ep->y, ep->z, (unsigned long) ep->bstate); #define SHOW(m, s) if ((ep->bstate & m)==m) {strcat(buf,s); strcat(buf, ", ");} SHOW(BUTTON1_RELEASED, "release-1"); SHOW(BUTTON1_PRESSED, "press-1"); SHOW(BUTTON1_CLICKED, "click-1"); SHOW(BUTTON1_DOUBLE_CLICKED, "doubleclick-1"); SHOW(BUTTON1_TRIPLE_CLICKED, "tripleclick-1"); #if NCURSES_MOUSE_VERSION == 1 SHOW(BUTTON1_RESERVED_EVENT, "reserved-1"); #endif SHOW(BUTTON2_RELEASED, "release-2"); SHOW(BUTTON2_PRESSED, "press-2"); SHOW(BUTTON2_CLICKED, "click-2"); SHOW(BUTTON2_DOUBLE_CLICKED, "doubleclick-2"); SHOW(BUTTON2_TRIPLE_CLICKED, "tripleclick-2"); #if NCURSES_MOUSE_VERSION == 1 SHOW(BUTTON2_RESERVED_EVENT, "reserved-2"); #endif SHOW(BUTTON3_RELEASED, "release-3"); SHOW(BUTTON3_PRESSED, "press-3"); SHOW(BUTTON3_CLICKED, "click-3"); SHOW(BUTTON3_DOUBLE_CLICKED, "doubleclick-3"); SHOW(BUTTON3_TRIPLE_CLICKED, "tripleclick-3"); #if NCURSES_MOUSE_VERSION == 1 SHOW(BUTTON3_RESERVED_EVENT, "reserved-3"); #endif SHOW(BUTTON4_RELEASED, "release-4"); SHOW(BUTTON4_PRESSED, "press-4"); SHOW(BUTTON4_CLICKED, "click-4"); SHOW(BUTTON4_DOUBLE_CLICKED, "doubleclick-4"); SHOW(BUTTON4_TRIPLE_CLICKED, "tripleclick-4"); #if NCURSES_MOUSE_VERSION == 1 SHOW(BUTTON4_RESERVED_EVENT, "reserved-4"); #endif #if NCURSES_MOUSE_VERSION == 2 SHOW(BUTTON5_RELEASED, "release-5"); SHOW(BUTTON5_PRESSED, "press-5"); SHOW(BUTTON5_CLICKED, "click-5"); SHOW(BUTTON5_DOUBLE_CLICKED, "doubleclick-5"); SHOW(BUTTON5_TRIPLE_CLICKED, "tripleclick-5"); #endif SHOW(BUTTON_CTRL, "ctrl"); SHOW(BUTTON_SHIFT, "shift"); SHOW(BUTTON_ALT, "alt"); SHOW(ALL_MOUSE_EVENTS, "all-events"); SHOW(REPORT_MOUSE_POSITION, "position"); #undef SHOW if (buf[strlen(buf) - 1] == ' ') buf[strlen(buf) - 2] = '\0'; (void) strcat(buf, "}"); return (buf); } static void show_mouse(WINDOW *win) { int y, x; MEVENT event; bool outside; bool show_loc; getmouse(&event); outside = !wenclose(win, event.y, event.x); if (outside) { (void) wstandout(win); waddstr(win, "KEY_MOUSE"); (void) wstandend(win); } else { waddstr(win, "KEY_MOUSE"); } wprintw(win, ", %s", mouse_decode(&event)); if (outside) win = stdscr; show_loc = wmouse_trafo(win, &event.y, &event.x, FALSE); if (show_loc) { getyx(win, y, x); wmove(win, event.y, event.x); waddch(win, '*'); wmove(win, y, x); } if (outside) wnoutrefresh(win); } #endif /* NCURSES_MOUSE_VERSION */ /**************************************************************************** * * Character input test * ****************************************************************************/ #define NUM_GETCH_FLAGS 256 typedef bool GetchFlags[NUM_GETCH_FLAGS]; static void setup_getch(WINDOW *win, GetchFlags flags) { keypad(win, flags['k']); /* should be redundant, but for testing */ meta(win, flags['m']); /* force this to a known state */ if (flags['e']) echo(); else noecho(); } static void init_getch(WINDOW *win, GetchFlags flags, int delay) { memset(flags, FALSE, NUM_GETCH_FLAGS); flags[UChar('k')] = (win == stdscr); flags[UChar('m')] = TRUE; flags[UChar('t')] = (delay != 0); setup_getch(win, flags); } static bool blocking_getch(GetchFlags flags, int delay) { return ((delay < 0) && flags['t']); } static void wgetch_help(WINDOW *win, GetchFlags flags) { static const char *help[] = { "e -- toggle echo mode" ,"g -- triggers a getstr test" ,"k -- toggle keypad/literal mode" ,"m -- toggle meta (7-bit/8-bit) mode" ,"^q -- quit" ,"s -- shell out" ,"t -- toggle timeout" ,"w -- create a new window" #ifdef SIGTSTP ,"z -- suspend this process" #endif }; int y, x; unsigned chk = ((SIZEOF(help) + 1) / 2); unsigned n; getyx(win, y, x); move(0, 0); printw("Type any key to see its %s value. Also:\n", flags['k'] ? "keypad" : "literal"); for (n = 0; n < SIZEOF(help); ++n) { int row = 1 + (int) (n % chk); int col = (n >= chk) ? COLS / 2 : 0; int flg = ((strstr(help[n], "toggle") != 0) && (flags[UChar(*help[n])] != FALSE)); if (flg) (void) standout(); MvPrintw(row, col, "%s", help[n]); if (col == 0) clrtoeol(); if (flg) (void) standend(); } wrefresh(stdscr); wmove(win, y, x); } static void wgetch_wrap(WINDOW *win, int first_y) { int last_y = getmaxy(win) - 1; int y = getcury(win) + 1; if (y >= last_y) y = first_y; wmove(win, y, 0); wclrtoeol(win); } #if defined(KEY_RESIZE) && HAVE_WRESIZE typedef struct { WINDOW *text; WINDOW *frame; } WINSTACK; static WINSTACK *winstack = 0; static unsigned len_winstack = 0; static void forget_boxes(void) { if (winstack != 0) { free(winstack); } winstack = 0; len_winstack = 0; } static void remember_boxes(unsigned level, WINDOW *txt_win, WINDOW *box_win) { unsigned need = (level + 1) * 2; assert(level < (unsigned) COLS); if (winstack == 0) { len_winstack = 20; winstack = typeMalloc(WINSTACK, len_winstack); } else if (need >= len_winstack) { len_winstack = need; winstack = typeRealloc(WINSTACK, len_winstack, winstack); } if (!winstack) failed("remember_boxes"); winstack[level].text = txt_win; winstack[level].frame = box_win; } #if USE_SOFTKEYS && (defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH < 20071229) && NCURSES_EXT_FUNCS static void slk_repaint(void) { /* this chunk is now done in resize_term() */ slk_touch(); slk_clear(); slk_noutrefresh(); } #else #define slk_repaint() /* nothing */ #endif #if defined(NCURSES_VERSION) && defined(KEY_RESIZE) && HAVE_WRESIZE /* * For wgetch_test(), we create pairs of windows - one for a box, one for text. * Resize both and paint the box in the parent. */ static void resize_boxes(unsigned level, WINDOW *win) { unsigned n; int base = 5; int high = LINES - base; int wide = COLS; touchwin(stdscr); wnoutrefresh(stdscr); slk_repaint(); for (n = 0; n < level; ++n) { wresize(winstack[n].frame, high, wide); wresize(winstack[n].text, high - 2, wide - 2); high -= 2; wide -= 2; werase(winstack[n].text); box(winstack[n].frame, 0, 0); wnoutrefresh(winstack[n].frame); wprintw(winstack[n].text, "size %dx%d\n", getmaxy(winstack[n].text), getmaxx(winstack[n].text)); wnoutrefresh(winstack[n].text); if (winstack[n].text == win) break; } doupdate(); } #endif /* resize_boxes */ #else #define forget_boxes() /* nothing */ #define remember_boxes(level,text,frame) /* nothing */ #endif /* * Return-code is OK/ERR or a keyname. */ static const char * ok_keyname(int code) { return ((code == OK) ? "OK" : ((code == ERR) ? "ERR" : keyname(code))); } static void wgetch_test(unsigned level, WINDOW *win, int delay) { char buf[BUFSIZ]; int first_y, first_x; int c; int incount = 0; GetchFlags flags; init_getch(win, flags, delay); notimeout(win, FALSE); wtimeout(win, delay); getyx(win, first_y, first_x); wgetch_help(win, flags); wsetscrreg(win, first_y, getmaxy(win) - 1); scrollok(win, TRUE); for (;;) { while ((c = wGetchar(win)) == ERR) { incount++; if (blocking_getch(flags, delay)) { (void) wprintw(win, "%05d: input error", incount); break; } else { (void) wprintw(win, "%05d: input timed out", incount); } wgetch_wrap(win, first_y); } if (c == ERR && blocking_getch(flags, delay)) { wprintw(win, "ERR"); wgetch_wrap(win, first_y); } else if (isQuit(c)) { break; } else if (c == 'e') { flags[UChar('e')] = !flags[UChar('e')]; setup_getch(win, flags); wgetch_help(win, flags); } else if (c == 'g') { waddstr(win, "getstr test: "); echo(); c = wgetnstr(win, buf, sizeof(buf) - 1); noecho(); wprintw(win, "I saw %d characters:\n\t`%s' (%s).", (int) strlen(buf), buf, ok_keyname(c)); wclrtoeol(win); wgetch_wrap(win, first_y); } else if (c == 'k') { flags[UChar('k')] = !flags[UChar('k')]; setup_getch(win, flags); wgetch_help(win, flags); } else if (c == 'm') { flags[UChar('m')] = !flags[UChar('m')]; setup_getch(win, flags); wgetch_help(win, flags); } else if (c == 's') { ShellOut(TRUE); } else if (c == 't') { notimeout(win, flags[UChar('t')]); flags[UChar('t')] = !flags[UChar('t')]; wgetch_help(win, flags); } else if (c == 'w') { int high = getmaxy(win) - 1 - first_y + 1; int wide = getmaxx(win) - first_x; int old_y, old_x; int new_y = first_y + getbegy(win); int new_x = first_x + getbegx(win); getyx(win, old_y, old_x); if (high > 2 && wide > 2) { WINDOW *wb = newwin(high, wide, new_y, new_x); WINDOW *wi = newwin(high - 2, wide - 2, new_y + 1, new_x + 1); box(wb, 0, 0); wrefresh(wb); wmove(wi, 0, 0); remember_boxes(level, wi, wb); wgetch_test(level + 1, wi, delay); delwin(wi); delwin(wb); wgetch_help(win, flags); wmove(win, old_y, old_x); touchwin(win); wrefresh(win); doupdate(); } #ifdef SIGTSTP } else if (c == 'z') { kill(getpid(), SIGTSTP); #endif } else { wprintw(win, "Key pressed: %04o ", c); #ifdef NCURSES_MOUSE_VERSION if (c == KEY_MOUSE) { show_mouse(win); } else #endif /* NCURSES_MOUSE_VERSION */ if (c >= KEY_MIN) { #if defined(NCURSES_VERSION) && defined(KEY_RESIZE) && HAVE_WRESIZE if (c == KEY_RESIZE) { resize_boxes(level, win); } #endif (void) waddstr(win, keyname(c)); } else if (c >= 0x80) { unsigned c2 = (unsigned) c; #if !(defined(NCURSES_VERSION) || defined(_XOPEN_CURSES)) /* at least Solaris SVR4 curses breaks unctrl(128), etc. */ c2 &= 0x7f; #endif if (isprint(c)) (void) wprintw(win, "%c", UChar(c)); else if (c2 != UChar(c)) (void) wprintw(win, "M-%s", unctrl(c2)); else (void) wprintw(win, "%s", unctrl(c2)); waddstr(win, " (high-half character)"); } else { if (isprint(c)) (void) wprintw(win, "%c (ASCII printable character)", c); else (void) wprintw(win, "%s (ASCII control character)", unctrl(UChar(c))); } wgetch_wrap(win, first_y); } } wtimeout(win, -1); if (!level) init_getch(win, flags, delay); } static int begin_getch_test(void) { char buf[BUFSIZ]; int delay; refresh(); #ifdef NCURSES_MOUSE_VERSION mousemask(ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, (mmask_t *) 0); #endif (void) printw("Delay in 10ths of a second ( for blocking input)? "); echo(); getnstr(buf, sizeof(buf) - 1); noecho(); nonl(); if (isdigit(UChar(buf[0]))) { delay = atoi(buf) * 100; } else { delay = -1; } raw(); move(6, 0); return delay; } static void finish_getch_test(void) { #ifdef NCURSES_MOUSE_VERSION mousemask(0, (mmask_t *) 0); #endif erase(); noraw(); nl(); endwin(); } static void getch_test(void) { int delay = begin_getch_test(); slk_restore(); wgetch_test(0, stdscr, delay); forget_boxes(); finish_getch_test(); slk_clear(); } #if USE_WIDEC_SUPPORT /* * For wget_wch_test(), we create pairs of windows - one for a box, one for text. * Resize both and paint the box in the parent. */ #if defined(KEY_RESIZE) && HAVE_WRESIZE static void resize_wide_boxes(unsigned level, WINDOW *win) { unsigned n; int base = 5; int high = LINES - base; int wide = COLS; touchwin(stdscr); wnoutrefresh(stdscr); slk_repaint(); for (n = 0; n < level; ++n) { wresize(winstack[n].frame, high, wide); wresize(winstack[n].text, high - 2, wide - 2); high -= 2; wide -= 2; werase(winstack[n].text); box_set(winstack[n].frame, 0, 0); wnoutrefresh(winstack[n].frame); wprintw(winstack[n].text, "size %dx%d\n", getmaxy(winstack[n].text), getmaxx(winstack[n].text)); wnoutrefresh(winstack[n].text); if (winstack[n].text == win) break; } doupdate(); } #endif /* KEY_RESIZE */ static char * wcstos(const wchar_t *src) { int need; char *result = 0; const wchar_t *tmp = src; #ifndef state_unused mbstate_t state; #endif reset_wchars(state); if ((need = (int) count_wchars(tmp, 0, &state)) > 0) { unsigned have = (unsigned) need; if ((result = typeCalloc(char, have + 1)) != 0) { tmp = src; if (trans_wchars(result, tmp, have, &state) != have) { free(result); result = 0; } } else { failed("wcstos"); } } return result; } static void wget_wch_test(unsigned level, WINDOW *win, int delay) { wchar_t wchar_buf[BUFSIZ]; wint_t wint_buf[BUFSIZ]; int first_y, first_x; wint_t c; int incount = 0; GetchFlags flags; int code; char *temp; init_getch(win, flags, delay); notimeout(win, FALSE); wtimeout(win, delay); getyx(win, first_y, first_x); wgetch_help(win, flags); wsetscrreg(win, first_y, getmaxy(win) - 1); scrollok(win, TRUE); for (;;) { while ((code = wGet_wchar(win, &c)) == ERR) { incount++; if (blocking_getch(flags, delay)) { (void) wprintw(win, "%05d: input error", incount); break; } else { (void) wprintw(win, "%05d: input timed out", incount); } wgetch_wrap(win, first_y); } if (code == ERR && blocking_getch(flags, delay)) { wprintw(win, "ERR"); wgetch_wrap(win, first_y); } else if (isQuit((int) c)) { break; } else if (c == 'e') { flags[UChar('e')] = !flags[UChar('e')]; setup_getch(win, flags); wgetch_help(win, flags); } else if (c == 'g') { waddstr(win, "getstr test: "); echo(); code = wgetn_wstr(win, wint_buf, BUFSIZ - 1); noecho(); if (code == ERR) { wprintw(win, "wgetn_wstr returns an error."); } else { int n; for (n = 0; (wchar_buf[n] = (wchar_t) wint_buf[n]) != 0; ++n) { ; } if ((temp = wcstos(wchar_buf)) != 0) { wprintw(win, "I saw %d characters:\n\t`%s'.", (int) wcslen(wchar_buf), temp); free(temp); } else { wprintw(win, "I saw %d characters (cannot convert).", (int) wcslen(wchar_buf)); } } wclrtoeol(win); wgetch_wrap(win, first_y); } else if (c == 'k') { flags[UChar('k')] = !flags[UChar('k')]; setup_getch(win, flags); wgetch_help(win, flags); } else if (c == 'm') { flags[UChar('m')] = !flags[UChar('m')]; setup_getch(win, flags); wgetch_help(win, flags); } else if (c == 's') { ShellOut(TRUE); } else if (c == 't') { notimeout(win, flags[UChar('t')]); flags[UChar('t')] = !flags[UChar('t')]; wgetch_help(win, flags); } else if (c == 'w') { int high = getmaxy(win) - 1 - first_y + 1; int wide = getmaxx(win) - first_x; int old_y, old_x; int new_y = first_y + getbegy(win); int new_x = first_x + getbegx(win); getyx(win, old_y, old_x); if (high > 2 && wide > 2) { WINDOW *wb = newwin(high, wide, new_y, new_x); WINDOW *wi = newwin(high - 2, wide - 2, new_y + 1, new_x + 1); box_set(wb, 0, 0); wrefresh(wb); wmove(wi, 0, 0); remember_boxes(level, wi, wb); wget_wch_test(level + 1, wi, delay); delwin(wi); delwin(wb); wgetch_help(win, flags); wmove(win, old_y, old_x); touchwin(win); wrefresh(win); } #ifdef SIGTSTP } else if (c == 'z') { kill(getpid(), SIGTSTP); #endif } else { wprintw(win, "Key pressed: %04o ", (int) c); #ifdef NCURSES_MOUSE_VERSION if (c == KEY_MOUSE) { show_mouse(win); } else #endif /* NCURSES_MOUSE_VERSION */ if (code == KEY_CODE_YES) { #if defined(KEY_RESIZE) && HAVE_WRESIZE if (c == KEY_RESIZE) { resize_wide_boxes(level, win); } #endif (void) waddstr(win, keyname((wchar_t) c)); } else { (void) waddstr(win, key_name((wchar_t) c)); if (c < 256 && iscntrl(c)) { (void) wprintw(win, " (control character)"); } else { (void) wprintw(win, " = %#x (printable character)", (unsigned) c); } } wgetch_wrap(win, first_y); } } wtimeout(win, -1); if (!level) init_getch(win, flags, delay); } static void get_wch_test(void) { int delay = begin_getch_test(); slk_restore(); wget_wch_test(0, stdscr, delay); forget_boxes(); finish_getch_test(); slk_clear(); } #endif /**************************************************************************** * * Character attributes test * ****************************************************************************/ #if HAVE_SETUPTERM || HAVE_TGETENT #define get_ncv() TIGETNUM("ncv","NC") #define get_xmc() TIGETNUM("xmc","sg") #else #define get_ncv() -1 #define get_xmc() -1 #endif #if !HAVE_TERMATTRS static chtype my_termattrs(void) { static int first = TRUE; static chtype result = 0; if (first) { #if !HAVE_TIGETSTR char buffer[4096]; char parsed[4096]; char *area_pointer = parsed; tgetent(buffer, getenv("TERM")); #endif if (TIGETSTR("smso", "so")) result |= A_STANDOUT; if (TIGETSTR("smul", "us")) result |= A_UNDERLINE; if (TIGETSTR("rev", "mr")) result |= A_REVERSE; if (TIGETSTR("blink", "mb")) result |= A_BLINK; if (TIGETSTR("dim", "mh")) result |= A_DIM; if (TIGETSTR("bold", "md")) result |= A_BOLD; if (TIGETSTR("smacs", "ac")) result |= A_ALTCHARSET; first = FALSE; } return result; } #define termattrs() my_termattrs() #endif #define ATTRSTRING_1ST 32 /* ' ' */ #define ATTRSTRING_END 126 /* '~' */ #define COLS_PRE_ATTRS 5 #define COLS_AFT_ATTRS 15 #define COL_ATTRSTRING (COLS_PRE_ATTRS + 17) #define LEN_ATTRSTRING (COLS - (COL_ATTRSTRING + COLS_AFT_ATTRS)) #define MAX_ATTRSTRING (ATTRSTRING_END + 1 - ATTRSTRING_1ST) static char attr_test_string[MAX_ATTRSTRING + 1]; static void attr_legend(WINDOW *helpwin) { int row = 1; int col = 1; MvWPrintw(helpwin, row++, col, "ESC to exit."); MvWPrintw(helpwin, row++, col, "^L repaints."); ++row; MvWPrintw(helpwin, row++, col, "Modify the test strings:"); MvWPrintw(helpwin, row++, col, " A digit sets gaps on each side of displayed attributes"); MvWPrintw(helpwin, row++, col, " shifts the text left/right. "); ++row; MvWPrintw(helpwin, row++, col, "Toggles:"); if (use_colors) { MvWPrintw(helpwin, row++, col, " f/F/b/F toggle foreground/background background color"); MvWPrintw(helpwin, row++, col, " t/T toggle text/background color attribute"); } MvWPrintw(helpwin, row++, col, " a/A toggle ACS (alternate character set) mapping"); MvWPrintw(helpwin, row, col, " v/V toggle video attribute to combine with each line"); #if USE_WIDEC_SUPPORT MvWPrintw(helpwin, row, col, " w/W toggle normal/wide (double-width) test-characters"); #endif } static void show_color_attr(int fg, int bg, int tx) { if (use_colors) { printw(" Colors (fg %d, bg %d", fg, bg); if (tx >= 0) printw(", text %d", tx); printw("),"); } } static bool cycle_color_attr(int ch, NCURSES_COLOR_T *fg, NCURSES_COLOR_T *bg, NCURSES_COLOR_T *tx) { bool error = FALSE; if (use_colors) { switch (ch) { case 'f': *fg = (NCURSES_COLOR_T) (*fg + 1); break; case 'F': *fg = (NCURSES_COLOR_T) (*fg - 1); break; case 'b': *bg = (NCURSES_COLOR_T) (*bg + 1); break; case 'B': *bg = (NCURSES_COLOR_T) (*bg - 1); break; case 't': *tx = (NCURSES_COLOR_T) (*tx + 1); break; case 'T': *tx = (NCURSES_COLOR_T) (*tx - 1); break; default: beep(); error = TRUE; break; } if (*fg >= COLORS) *fg = (NCURSES_COLOR_T) min_colors; if (*fg < min_colors) *fg = (NCURSES_COLOR_T) (COLORS - 1); if (*bg >= COLORS) *bg = (NCURSES_COLOR_T) min_colors; if (*bg < min_colors) *bg = (NCURSES_COLOR_T) (COLORS - 1); if (*tx >= COLORS) *tx = -1; if (*tx < -1) *tx = (NCURSES_COLOR_T) (COLORS - 1); } else { beep(); error = TRUE; } return error; } static void adjust_attr_string(int adjust) { char save = attr_test_string[0]; int first = ((int) UChar(save)) + adjust; int j, k; if (first >= ATTRSTRING_1ST) { for (j = 0, k = first; j < MAX_ATTRSTRING; ++j, ++k) { if (k > ATTRSTRING_END) break; attr_test_string[j] = (char) k; if (((k + 1 - first) % 5) == 0) { if (++j >= MAX_ATTRSTRING) break; attr_test_string[j] = ' '; } } if ((LEN_ATTRSTRING - j) > 5) { attr_test_string[0] = save; adjust_attr_string(adjust - 1); } else { while (j < MAX_ATTRSTRING) attr_test_string[j++] = ' '; attr_test_string[j] = '\0'; } } } /* * Prefer the right-end of the string for starting, since that maps to the * VT100 line-drawing. */ static int default_attr_string(void) { int result = (ATTRSTRING_END - LEN_ATTRSTRING); result += (LEN_ATTRSTRING / 5); if (result < ATTRSTRING_1ST) result = ATTRSTRING_1ST; return result; } static void init_attr_string(void) { attr_test_string[0] = (char) default_attr_string(); adjust_attr_string(0); } static int show_attr(WINDOW *win, int row, int skip, bool arrow, chtype attr, const char *name) { int ncv = get_ncv(); chtype test = attr & (chtype) (~(A_ALTCHARSET | A_CHARTEXT)); if (arrow) MvPrintw(row, COLS_PRE_ATTRS - 3, "-->"); MvPrintw(row, COLS_PRE_ATTRS, "%s mode:", name); MvPrintw(row, COL_ATTRSTRING - 1, "|"); if (skip) printw("%*s", skip, " "); /* * Just for testing, write text using the alternate character set one * character at a time (to pass its rendition directly), and use the * string operation for the other attributes. */ wmove(win, 0, 0); werase(win); if (attr & A_ALTCHARSET) { const char *s; chtype ch; for (s = attr_test_string; *s != '\0'; ++s) { ch = UChar(*s); (void) waddch(win, ch | attr); } } else { (void) wattrset(win, AttrArg(attr, 0)); (void) waddstr(win, attr_test_string); (void) wattroff(win, (int) attr); } if (skip) printw("%*s", skip, " "); MvPrintw(row, COL_ATTRSTRING + LEN_ATTRSTRING, "|"); if (test != A_NORMAL) { if (!(termattrs() & test)) { printw(" (N/A)"); } else { if (ncv > 0 && stdscr && (getbkgd(stdscr) & A_COLOR)) { static const chtype table[] = { A_STANDOUT, A_UNDERLINE, A_REVERSE, A_BLINK, A_DIM, A_BOLD, #ifdef A_INVIS A_INVIS, #endif #ifdef A_ITALIC A_ITALIC, #endif A_PROTECT, A_ALTCHARSET }; unsigned n; bool found = FALSE; for (n = 0; n < SIZEOF(table); n++) { if ((table[n] & attr) != 0 && ((1 << n) & ncv) != 0) { found = TRUE; break; } } if (found) printw(" (NCV)"); } if ((termattrs() & test) != test) { printw(" (Part)"); } } } return row + 2; } typedef struct { attr_t attr; NCURSES_CONST char *name; } ATTR_TBL; /* *INDENT-OFF* */ static const ATTR_TBL attrs_to_test[] = { { A_STANDOUT, "STANDOUT" }, { A_REVERSE, "REVERSE" }, { A_BOLD, "BOLD" }, { A_UNDERLINE, "UNDERLINE" }, { A_DIM, "DIM" }, { A_BLINK, "BLINK" }, { A_PROTECT, "PROTECT" }, #ifdef A_INVIS { A_INVIS, "INVISIBLE" }, #endif #ifdef A_ITALIC { A_ITALIC, "ITALIC" }, #endif { A_NORMAL, "NORMAL" }, }; /* *INDENT-ON* */ static unsigned init_attr_list(ATTR_TBL * target, attr_t attrs) { unsigned result = 0; size_t n; for (n = 0; n < SIZEOF(attrs_to_test); ++n) { attr_t test = attrs_to_test[n].attr; if (test == A_NORMAL || (test & attrs) != 0) { target[result++] = attrs_to_test[n]; } } return result; } static bool attr_getc(int *skip, NCURSES_COLOR_T *fg, NCURSES_COLOR_T *bg, NCURSES_COLOR_T *tx, int *ac, unsigned *kc, unsigned limit) { bool result = TRUE; bool error = FALSE; WINDOW *helpwin; do { int ch = Getchar(); error = FALSE; if (ch < 256 && isdigit(ch)) { *skip = (ch - '0'); } else { switch (ch) { case CTRL('L'): Repaint(); break; case '?': if ((helpwin = newwin(LINES - 1, COLS - 2, 0, 0)) != 0) { box(helpwin, 0, 0); attr_legend(helpwin); wGetchar(helpwin); delwin(helpwin); } break; case 'a': *ac = 0; break; case 'A': *ac = A_ALTCHARSET; break; case 'v': if (*kc == 0) *kc = limit - 1; else *kc -= 1; break; case 'V': *kc += 1; if (*kc >= limit) *kc = 0; break; case '<': adjust_attr_string(-1); break; case '>': adjust_attr_string(1); break; case case_QUIT: result = FALSE; break; default: error = cycle_color_attr(ch, fg, bg, tx); break; } } } while (error); return result; } static void attr_test(void) /* test text attributes */ { int n; int skip = get_xmc(); NCURSES_COLOR_T fg = COLOR_BLACK; /* color pair 0 is special */ NCURSES_COLOR_T bg = COLOR_BLACK; NCURSES_COLOR_T tx = -1; int ac = 0; unsigned j, k; WINDOW *my_wins[SIZEOF(attrs_to_test)]; ATTR_TBL my_list[SIZEOF(attrs_to_test)]; unsigned my_size = init_attr_list(my_list, termattrs()); if (my_size > 1) { for (j = 0; j < my_size; ++j) { my_wins[j] = subwin(stdscr, 1, LEN_ATTRSTRING, 2 + (int) (2 * j), COL_ATTRSTRING); scrollok(my_wins[j], FALSE); } if (skip < 0) skip = 0; n = skip; /* make it easy */ k = my_size - 1; init_attr_string(); do { int row = 2; chtype normal = A_NORMAL | BLANK; chtype extras = (chtype) ac; if (use_colors) { NCURSES_PAIRS_T pair = 0; if ((fg != COLOR_BLACK) || (bg != COLOR_BLACK)) { pair = 1; if (init_pair(pair, fg, bg) == ERR) { beep(); } else { normal |= (chtype) COLOR_PAIR(pair); } } if (tx >= 0) { pair = 2; if (init_pair(pair, tx, bg) == ERR) { beep(); } else { extras |= (chtype) COLOR_PAIR(pair); normal &= ~A_COLOR; } } } bkgd(normal); bkgdset(normal); erase(); box(stdscr, 0, 0); MvAddStr(0, 20, "Character attribute test display"); for (j = 0; j < my_size; ++j) { bool arrow = (j == k); row = show_attr(my_wins[j], row, n, arrow, normal | extras | my_list[j].attr | my_list[k].attr, my_list[j].name); } MvPrintw(row, COLS_PRE_ATTRS, "This terminal does %shave the magic-cookie glitch", get_xmc() > -1 ? "" : "not "); MvPrintw(row + 1, COLS_PRE_ATTRS, "Enter '?' for help."); show_color_attr(fg, bg, tx); printw(" ACS (%d)", ac != 0); refresh(); } while (attr_getc(&n, &fg, &bg, &tx, &ac, &k, my_size)); bkgdset(A_NORMAL | BLANK); erase(); endwin(); } else { Cannot("does not support video attributes."); } } #if USE_WIDEC_SUPPORT static bool use_fullwidth; static wchar_t wide_attr_test_string[MAX_ATTRSTRING + 1]; #define FULL_LO 0xff00 #define FULL_HI 0xff5e #define HALF_LO 0x20 #define isFullWidth(ch) ((int)(ch) >= FULL_LO && (int)(ch) <= FULL_HI) #define ToNormalWidth(ch) (wchar_t) (((int)(ch) - FULL_LO) + HALF_LO) #define ToFullWidth(ch) (wchar_t) (((int)(ch) - HALF_LO) + FULL_LO) /* * Returns an ASCII code in [32..126] */ static wchar_t normal_wchar(int ch) { wchar_t result = (wchar_t) ch; if (isFullWidth(ch)) result = ToNormalWidth(ch); return result; } /* * Returns either an ASCII code in in [32..126] or full-width in * [0xff00..0xff5e], according to use_fullwidth setting. */ static wchar_t target_wchar(int ch) { wchar_t result = (wchar_t) ch; if (use_fullwidth) { if (!isFullWidth(ch)) result = ToFullWidth(ch); } else { if (isFullWidth(ch)) result = ToNormalWidth(ch); } return result; } static void wide_adjust_attr_string(int adjust) { wchar_t save = wide_attr_test_string[0]; int first = ((int) normal_wchar(save)) + adjust; int j, k; if (first >= ATTRSTRING_1ST) { for (j = 0, k = first; j < MAX_ATTRSTRING; ++j, ++k) { if (k > ATTRSTRING_END) break; wide_attr_test_string[j] = target_wchar(k); if (((k + 1 - first) % 5) == 0) { if (++j >= MAX_ATTRSTRING) break; wide_attr_test_string[j] = ' '; } } if ((LEN_ATTRSTRING - j) > 5) { wide_attr_test_string[0] = save; wide_adjust_attr_string(adjust - 1); } else { while (j < MAX_ATTRSTRING) wide_attr_test_string[j++] = ' '; wide_attr_test_string[j] = '\0'; } } } static void wide_init_attr_string(void) { use_fullwidth = FALSE; wide_attr_test_string[0] = (wchar_t) default_attr_string(); wide_adjust_attr_string(0); } static void set_wide_background(NCURSES_PAIRS_T pair) { cchar_t normal; wchar_t blank[2]; blank[0] = ' '; blank[1] = 0; setcchar(&normal, blank, A_NORMAL, pair, 0); bkgrnd(&normal); bkgrndset(&normal); } static attr_t get_wide_background(void) { attr_t result = A_NORMAL; attr_t attr; cchar_t ch; NCURSES_PAIRS_T pair; wchar_t wch[10]; memset(&ch, 0, sizeof(ch)); if (getbkgrnd(&ch) != ERR) { if (getcchar(&ch, wch, &attr, &pair, 0) != ERR) { result = attr; } } return result; } static int wide_show_attr(WINDOW *win, int row, int skip, bool arrow, chtype attr, NCURSES_PAIRS_T pair, const char *name) { int ncv = get_ncv(); chtype test = attr & ~WA_ALTCHARSET; if (arrow) MvPrintw(row, COLS_PRE_ATTRS - 3, "-->"); MvPrintw(row, COLS_PRE_ATTRS, "%s mode:", name); MvPrintw(row, COL_ATTRSTRING - 1, "|"); if (skip) printw("%*s", skip, " "); /* * Just for testing, write text using the alternate character set one * character at a time (to pass its rendition directly), and use the * string operation for the other attributes. */ wmove(win, 0, 0); werase(win); if (attr & WA_ALTCHARSET) { const wchar_t *s; cchar_t ch; for (s = wide_attr_test_string; *s != L'\0'; ++s) { wchar_t fill[2]; fill[0] = *s; fill[1] = L'\0'; setcchar(&ch, fill, attr, pair, 0); (void) wadd_wch(win, &ch); } } else { attr_t old_attr = 0; NCURSES_PAIRS_T old_pair = 0; (void) (wattr_get) (win, &old_attr, &old_pair, 0); (void) wattr_set(win, attr, pair, 0); (void) waddwstr(win, wide_attr_test_string); (void) wattr_set(win, old_attr, old_pair, 0); } if (skip) printw("%*s", skip, " "); MvPrintw(row, COL_ATTRSTRING + LEN_ATTRSTRING, "|"); if (test != A_NORMAL) { if (!(term_attrs() & test)) { printw(" (N/A)"); } else { if (ncv > 0 && (get_wide_background() & A_COLOR)) { static const attr_t table[] = { WA_STANDOUT, WA_UNDERLINE, WA_REVERSE, WA_BLINK, WA_DIM, WA_BOLD, WA_INVIS, WA_PROTECT, WA_ALTCHARSET }; unsigned n; bool found = FALSE; for (n = 0; n < SIZEOF(table); n++) { if ((table[n] & attr) != 0 && ((1 << n) & ncv) != 0) { found = TRUE; break; } } if (found) printw(" (NCV)"); } if ((term_attrs() & test) != test) { printw(" (Part)"); } } } return row + 2; } static bool wide_attr_getc(int *skip, NCURSES_COLOR_T *fg, NCURSES_COLOR_T *bg, NCURSES_COLOR_T *tx, int *ac, unsigned *kc, unsigned limit) { bool result = TRUE; bool error = FALSE; WINDOW *helpwin; do { int ch = Getchar(); error = FALSE; if (ch < 256 && isdigit(ch)) { *skip = (ch - '0'); } else { switch (ch) { case CTRL('L'): Repaint(); break; case '?': if ((helpwin = newwin(LINES - 1, COLS - 2, 0, 0)) != 0) { box_set(helpwin, 0, 0); attr_legend(helpwin); wGetchar(helpwin); delwin(helpwin); } break; case 'a': *ac = 0; break; case 'A': *ac = A_ALTCHARSET; break; case 'v': if (*kc == 0) *kc = limit - 1; else *kc -= 1; break; case 'V': *kc += 1; if (*kc >= limit) *kc = 0; break; case 'w': use_fullwidth = FALSE; wide_adjust_attr_string(0); break; case 'W': use_fullwidth = TRUE; wide_adjust_attr_string(0); break; case '<': wide_adjust_attr_string(-1); break; case '>': wide_adjust_attr_string(1); break; case case_QUIT: result = FALSE; break; default: error = cycle_color_attr(ch, fg, bg, tx); break; } } } while (error); return result; } static void wide_attr_test(void) /* test text attributes using wide-character calls */ { int n; int skip = get_xmc(); NCURSES_COLOR_T fg = COLOR_BLACK; /* color pair 0 is special */ NCURSES_COLOR_T bg = COLOR_BLACK; NCURSES_COLOR_T tx = -1; int ac = 0; unsigned j, k; ATTR_TBL my_list[SIZEOF(attrs_to_test)]; WINDOW *my_wins[SIZEOF(attrs_to_test)]; unsigned my_size = init_attr_list(my_list, term_attrs()); if (my_size > 1) { for (j = 0; j < my_size; ++j) { my_wins[j] = subwin(stdscr, 1, LEN_ATTRSTRING, 2 + (int) (2 * j), COL_ATTRSTRING); scrollok(my_wins[j], FALSE); } if (skip < 0) skip = 0; n = skip; /* make it easy */ k = my_size - 1; wide_init_attr_string(); do { int row = 2; NCURSES_PAIRS_T pair = 0; NCURSES_PAIRS_T extras = 0; if (use_colors) { pair = (NCURSES_PAIRS_T) (fg != COLOR_BLACK || bg != COLOR_BLACK); if (pair != 0) { pair = 1; if (init_pair(pair, fg, bg) == ERR) { beep(); } } extras = pair; if (tx >= 0) { extras = 2; if (init_pair(extras, tx, bg) == ERR) { beep(); } } } set_wide_background(pair); erase(); box_set(stdscr, 0, 0); MvAddStr(0, 20, "Character attribute test display"); for (j = 0; j < my_size; ++j) { row = wide_show_attr(my_wins[j], row, n, (j == k), ((attr_t) ac | my_list[j].attr | my_list[k].attr), extras, my_list[j].name); } MvPrintw(row, COLS_PRE_ATTRS, "This terminal does %shave the magic-cookie glitch", get_xmc() > -1 ? "" : "not "); MvPrintw(row + 1, COLS_PRE_ATTRS, "Enter '?' for help."); show_color_attr(fg, bg, tx); printw(" ACS (%d)", ac != 0); refresh(); } while (wide_attr_getc(&n, &fg, &bg, &tx, &ac, &k, my_size)); set_wide_background(0); erase(); endwin(); } else { Cannot("does not support extended video attributes."); } } #endif /**************************************************************************** * * Color support tests * ****************************************************************************/ static NCURSES_CONST char *the_color_names[] = { "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white", "BLACK", "RED", "GREEN", "YELLOW", "BLUE", "MAGENTA", "CYAN", "WHITE" }; static void show_color_name(int y, int x, int color, bool wide) { if (move(y, x) != ERR) { char temp[80]; int width = 8; if (wide) { sprintf(temp, "%02d", color); width = 4; } else if (color >= 8) { sprintf(temp, "[%02d]", color); } else if (color < 0) { strcpy(temp, "default"); } else { sprintf(temp, "%.*s", 16, the_color_names[color]); } printw("%-*.*s", width, width, temp); } } static void color_legend(WINDOW *helpwin, bool wide) { int row = 1; int col = 1; MvWPrintw(helpwin, row++, col, "ESC to exit."); ++row; MvWPrintw(helpwin, row++, col, "Use up/down arrow to scroll through the display if it is"); MvWPrintw(helpwin, row++, col, "longer than one screen. Control/N and Control/P can be used"); MvWPrintw(helpwin, row++, col, "in place of up/down arrow. Use pageup/pagedown to scroll a"); MvWPrintw(helpwin, row++, col, "full screen; control/B and control/F can be used here."); ++row; MvWPrintw(helpwin, row++, col, "Toggles:"); MvWPrintw(helpwin, row++, col, " a/A toggle altcharset off/on"); MvWPrintw(helpwin, row++, col, " b/B toggle bold off/on"); if (has_colors()) { MvWPrintw(helpwin, row++, col, " c/C cycle used-colors through 8,16,...,COLORS"); } MvWPrintw(helpwin, row++, col, " n/N toggle text/number on/off"); MvWPrintw(helpwin, row++, col, " r/R toggle reverse on/off"); MvWPrintw(helpwin, row++, col, " w/W toggle width between 8/16 colors"); #if USE_WIDEC_SUPPORT if (wide) { MvWPrintw(helpwin, row++, col, "Wide characters:"); MvWPrintw(helpwin, row, col, " x/X toggle text between ASCII and wide-character"); } #else (void) wide; #endif } #define set_color_test(name, value) if (name != value) { name = value; base_row = 0; } static int color_cycle(int current, int step) { int result = current; if (step < 0) { if (current <= 8) { result = COLORS; } else { result = 8; if ((result * 2) > COLORS) { result = COLORS; } else { while ((result * 2) < current) { result *= 2; } } } } else { if (current >= COLORS) { result = 8; } else { result *= 2; } if (result > COLORS) result = COLORS; } return result; } /* generate a color test pattern */ static void color_test(void) { NCURSES_PAIRS_T i; int top = 0, width; int base_row = 0; int grid_top = top + 3; int page_size = (LINES - grid_top); int pairs_max; int colors_max = COLORS; int col_limit; int row_limit; int per_row; char *numbered = 0; const char *hello; bool done = FALSE; bool opt_acsc = FALSE; bool opt_bold = FALSE; bool opt_revs = FALSE; bool opt_nums = FALSE; bool opt_wide = FALSE; WINDOW *helpwin; numbered = (char *) calloc((size_t) (COLS + 1), sizeof(char)); done = ((COLS < 16) || (numbered == 0)); /* * Because the number of colors is usually a power of two, we also use * a power of two for the number of colors shown per line (to be tidy). */ for (col_limit = 1; col_limit * 2 < COLS; col_limit *= 2) ; while (!done) { int shown = 0; pairs_max = PAIR_NUMBER(A_COLOR) + 1; if (colors_max * colors_max <= COLOR_PAIRS) { int limit = (colors_max - min_colors) * (colors_max - min_colors); if (pairs_max > limit) pairs_max = limit; } else { if (pairs_max > COLOR_PAIRS) pairs_max = COLOR_PAIRS; } /* this assumes an 80-column line */ if (opt_wide) { width = 4; hello = "Test"; per_row = (col_limit / ((colors_max > 8) ? 4 : 8)); } else { width = 8; hello = "Hello"; per_row = (col_limit / 8); } per_row -= min_colors; row_limit = (pairs_max + per_row - 1) / per_row; move(0, 0); (void) printw("There are %d color pairs and %d colors", pairs_max, COLORS); if (colors_max != COLORS) (void) printw(" (using %d colors)", colors_max); if (min_colors) (void) addstr(" besides 'default'"); clrtobot(); MvPrintw(top + 1, 0, "%dx%d matrix of foreground/background colors, bold *%s*\n", row_limit, per_row, opt_bold ? "on" : "off"); /* show color names/numbers across the top */ for (i = 0; i < per_row; i++) show_color_name(top + 2, (i + 1) * width, i + min_colors, opt_wide); /* show a grid of colors, with color names/ numbers on the left */ for (i = (NCURSES_PAIRS_T) (base_row * per_row); i < pairs_max; i++) { int row = grid_top + (i / per_row) - base_row; int col = (i % per_row + 1) * width; NCURSES_PAIRS_T pair = i; if ((i / per_row) > row_limit) break; #define InxToFG(i) (NCURSES_COLOR_T) ((i % (colors_max - min_colors)) + min_colors) #define InxToBG(i) (NCURSES_COLOR_T) ((i / (colors_max - min_colors)) + min_colors) if (row >= 0 && move(row, col) != ERR) { NCURSES_COLOR_T fg = InxToFG(i); NCURSES_COLOR_T bg = InxToBG(i); init_pair(pair, fg, bg); attron(COLOR_PAIR(pair)); if (opt_acsc) attron(A_ALTCHARSET); if (opt_bold) attron(A_BOLD); if (opt_revs) attron(A_REVERSE); if (opt_nums) { sprintf(numbered, "{%02X}", (int) i); hello = numbered; } printw("%-*.*s", width, width, hello); (void) attrset(A_NORMAL); if ((i % per_row) == 0 && InxToFG(i) == min_colors) { show_color_name(row, 0, InxToBG(i), opt_wide); } ++shown; } else if (shown) { break; } } switch (wGetchar(stdscr)) { case 'a': opt_acsc = FALSE; break; case 'A': opt_acsc = TRUE; break; case 'b': opt_bold = FALSE; break; case 'B': opt_bold = TRUE; break; case 'c': colors_max = color_cycle(colors_max, -1); break; case 'C': colors_max = color_cycle(colors_max, 1); break; case 'n': opt_nums = FALSE; break; case 'N': opt_nums = TRUE; break; case 'r': opt_revs = FALSE; break; case 'R': opt_revs = TRUE; break; case case_QUIT: done = TRUE; continue; case 'w': set_color_test(opt_wide, FALSE); break; case 'W': set_color_test(opt_wide, TRUE); break; case CTRL('p'): case KEY_UP: if (base_row <= 0) { beep(); } else { base_row -= 1; } break; case CTRL('n'): case KEY_DOWN: if (base_row + page_size >= row_limit) { beep(); } else { base_row += 1; } break; case CTRL('b'): case KEY_PREVIOUS: case KEY_PPAGE: if (base_row <= 0) { beep(); } else { base_row -= (page_size - 1); if (base_row < 0) base_row = 0; } break; case CTRL('f'): case KEY_NEXT: case KEY_NPAGE: if (base_row + page_size >= row_limit) { beep(); } else { base_row += page_size - 1; if (base_row + page_size >= row_limit) { base_row = row_limit - page_size - 1; } } break; case '?': if ((helpwin = newwin(LINES - 1, COLS - 2, 0, 0)) != 0) { box(helpwin, 0, 0); color_legend(helpwin, FALSE); wGetchar(helpwin); delwin(helpwin); } break; default: beep(); continue; } } erase(); endwin(); free(numbered); } #if USE_WIDEC_SUPPORT /* generate a color test pattern */ static void wide_color_test(void) { int i; int top = 0, width; int base_row = 0; int grid_top = top + 3; int page_size = (LINES - grid_top); int pairs_max = (unsigned short) (-1); int colors_max = COLORS; int col_limit; int row_limit; int per_row; char *numbered = 0; const char *hello; bool done = FALSE; bool opt_acsc = FALSE; bool opt_bold = FALSE; bool opt_revs = FALSE; bool opt_wide = FALSE; bool opt_nums = FALSE; bool opt_xchr = FALSE; wchar_t *buffer = 0; WINDOW *helpwin; numbered = (char *) calloc((size_t) (COLS + 1), sizeof(char)); buffer = (wchar_t *) calloc((size_t) (COLS + 1), sizeof(wchar_t)); done = ((COLS < 16) || (numbered == 0) || (buffer == 0)); /* * Because the number of colors is usually a power of two, we also use * a power of two for the number of colors shown per line (to be tidy). */ for (col_limit = 1; col_limit * 2 < COLS; col_limit *= 2) ; while (!done) { int shown = 0; pairs_max = (unsigned short) (-1); if (colors_max * colors_max <= COLOR_PAIRS) { int limit = (colors_max - min_colors) * (colors_max - min_colors); if (pairs_max > limit) pairs_max = limit; } else { if (pairs_max > COLOR_PAIRS) pairs_max = COLOR_PAIRS; } if (opt_wide) { width = 4; hello = "Test"; per_row = (col_limit / ((colors_max > 8) ? 4 : 8)); } else { width = 8; hello = "Hello"; per_row = (col_limit / 8); } per_row -= min_colors; if (opt_xchr) { make_fullwidth_text(buffer, hello); width *= 2; per_row /= 2; } else { make_narrow_text(buffer, hello); } row_limit = (pairs_max + per_row - 1) / per_row; move(0, 0); (void) printw("There are %d color pairs and %d colors", pairs_max, COLORS); if (colors_max != COLORS) (void) printw(" (using %d colors)", colors_max); if (min_colors) (void) addstr(" besides 'default'"); clrtobot(); MvPrintw(top + 1, 0, "%dx%d matrix of foreground/background colors, bold *%s*\n", row_limit, per_row, opt_bold ? "on" : "off"); /* show color names/numbers across the top */ for (i = 0; i < per_row; i++) show_color_name(top + 2, (i + 1) * width, i + min_colors, opt_wide); /* show a grid of colors, with color names/ numbers on the left */ for (i = (base_row * per_row); i < pairs_max; i++) { int row = grid_top + (i / per_row) - base_row; int col = (i % per_row + 1) * width; NCURSES_PAIRS_T pair = (NCURSES_PAIRS_T) i; if ((i / per_row) > row_limit) break; if (row >= 0 && move(row, col) != ERR) { init_pair(pair, InxToFG(i), InxToBG(i)); (void) color_set(pair, NULL); if (opt_acsc) attr_on(A_ALTCHARSET, NULL); if (opt_bold) attr_on(A_BOLD, NULL); if (opt_revs) attr_on(A_REVERSE, NULL); if (opt_nums) { sprintf(numbered, "{%02X}", i); if (opt_xchr) { make_fullwidth_text(buffer, numbered); } else { make_narrow_text(buffer, numbered); } } addnwstr(buffer, width); (void) attr_set(A_NORMAL, 0, NULL); if ((i % per_row) == 0 && InxToFG(i) == min_colors) { show_color_name(row, 0, InxToBG(i), opt_wide); } ++shown; } else if (shown) { break; } } switch (wGetchar(stdscr)) { case 'a': opt_acsc = FALSE; break; case 'A': opt_acsc = TRUE; break; case 'b': opt_bold = FALSE; break; case 'B': opt_bold = TRUE; break; case 'c': colors_max = color_cycle(colors_max, -1); break; case 'C': colors_max = color_cycle(colors_max, 1); break; case 'n': opt_nums = FALSE; break; case 'N': opt_nums = TRUE; break; case 'r': opt_revs = FALSE; break; case 'R': opt_revs = TRUE; break; case case_QUIT: done = TRUE; continue; case 'w': set_color_test(opt_wide, FALSE); break; case 'W': set_color_test(opt_wide, TRUE); break; case 'x': opt_xchr = FALSE; break; case 'X': opt_xchr = TRUE; break; case CTRL('p'): case KEY_UP: if (base_row <= 0) { beep(); } else { base_row -= 1; } break; case CTRL('n'): case KEY_DOWN: if (base_row + page_size >= row_limit) { beep(); } else { base_row += 1; } break; case CTRL('b'): case KEY_PREVIOUS: case KEY_PPAGE: if (base_row <= 0) { beep(); } else { base_row -= (page_size - 1); if (base_row < 0) base_row = 0; } break; case CTRL('f'): case KEY_NEXT: case KEY_NPAGE: if (base_row + page_size >= row_limit) { beep(); } else { base_row += page_size - 1; if (base_row + page_size >= row_limit) { base_row = row_limit - page_size - 1; } } break; case '?': if ((helpwin = newwin(LINES - 1, COLS - 2, 0, 0)) != 0) { box(helpwin, 0, 0); color_legend(helpwin, TRUE); wGetchar(helpwin); delwin(helpwin); } break; default: beep(); continue; } } erase(); endwin(); free(numbered); free(buffer); } #endif /* USE_WIDEC_SUPPORT */ static void change_color(NCURSES_PAIRS_T current, int field, int value, int usebase) { NCURSES_COLOR_T red, green, blue; color_content(current, &red, &green, &blue); switch (field) { case 0: red = (NCURSES_COLOR_T) (usebase ? (red + value) : value); break; case 1: green = (NCURSES_COLOR_T) (usebase ? (green + value) : value); break; case 2: blue = (NCURSES_COLOR_T) (usebase ? (blue + value) : value); break; } if (init_color(current, red, green, blue) == ERR) beep(); } static void init_all_colors(void) { NCURSES_PAIRS_T c; for (c = 0; c < COLORS; ++c) init_color(c, all_colors[c].red, all_colors[c].green, all_colors[c].blue); } #define scaled_rgb(n) ((255 * (n)) / 1000) static void color_edit(void) /* display the color test pattern, without trying to edit colors */ { int i; int current = 0; int this_c = 0, value = 0, field = 0; int last_c; int top_color = 0; int page_size = (LINES - 6); init_all_colors(); refresh(); for (i = 0; i < max_colors; i++) init_pair((NCURSES_PAIRS_T) i, (NCURSES_COLOR_T) COLOR_WHITE, (NCURSES_COLOR_T) i); MvPrintw(LINES - 2, 0, "Number: %d", value); do { NCURSES_COLOR_T red, green, blue; attron(A_BOLD); MvAddStr(0, 20, "Color RGB Value Editing"); attroff(A_BOLD); for (i = (NCURSES_COLOR_T) top_color; (i - top_color < page_size) && (i < max_colors); i++) { char numeric[80]; sprintf(numeric, "[%d]", i); MvPrintw(2 + i - top_color, 0, "%c %-8s:", (i == current ? '>' : ' '), (i < (int) SIZEOF(the_color_names) ? the_color_names[i] : numeric)); (void) attrset(AttrArg(COLOR_PAIR(i), 0)); addstr(" "); (void) attrset(A_NORMAL); color_content((NCURSES_PAIRS_T) i, &red, &green, &blue); addstr(" R = "); if (current == i && field == 0) attron(A_STANDOUT); printw("%04d", (int) red); if (current == i && field == 0) (void) attrset(A_NORMAL); addstr(", G = "); if (current == i && field == 1) attron(A_STANDOUT); printw("%04d", (int) green); if (current == i && field == 1) (void) attrset(A_NORMAL); addstr(", B = "); if (current == i && field == 2) attron(A_STANDOUT); printw("%04d", (int) blue); if (current == i && field == 2) (void) attrset(A_NORMAL); (void) attrset(A_NORMAL); printw(" ( %3d %3d %3d )", (int) scaled_rgb(red), (int) scaled_rgb(green), (int) scaled_rgb(blue)); } MvAddStr(LINES - 3, 0, "Use up/down to select a color, left/right to change fields."); MvAddStr(LINES - 2, 0, "Modify field by typing nnn=, nnn-, or nnn+. ? for help."); move(2 + current - top_color, 0); last_c = this_c; this_c = Getchar(); if (this_c < 256 && isdigit(this_c) && !isdigit(last_c)) value = 0; switch (this_c) { case CTRL('b'): case KEY_PPAGE: if (current > 0) current -= (page_size - 1); else beep(); break; case CTRL('f'): case KEY_NPAGE: if (current < (max_colors - 1)) current += (page_size - 1); else beep(); break; case CTRL('p'): case KEY_UP: current = (current == 0 ? (max_colors - 1) : current - 1); break; case CTRL('n'): case KEY_DOWN: current = (current == (max_colors - 1) ? 0 : current + 1); break; case KEY_RIGHT: field = (field == 2 ? 0 : field + 1); break; case KEY_LEFT: field = (field == 0 ? 2 : field - 1); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': value = value * 10 + (this_c - '0'); break; case '+': change_color((NCURSES_PAIRS_T) current, field, value, 1); break; case '-': change_color((NCURSES_PAIRS_T) current, field, -value, 1); break; case '=': change_color((NCURSES_PAIRS_T) current, field, value, 0); break; case '?': erase(); P(" RGB Value Editing Help"); P(""); P("You are in the RGB value editor. Use the arrow keys to select one of"); P("the fields in one of the RGB triples of the current colors; the one"); P("currently selected will be reverse-video highlighted."); P(""); P("To change a field, enter the digits of the new value; they are echoed"); P("as entered. Finish by typing `='. The change will take effect instantly."); P("To increment or decrement a value, use the same procedure, but finish"); P("with a `+' or `-'."); P(""); P("Press 'm' to invoke the top-level menu with the current color settings."); P("To quit, do ESC"); Pause(); erase(); break; case 'm': endwin(); main_menu(FALSE); for (i = 0; i < max_colors; i++) init_pair((NCURSES_PAIRS_T) i, (NCURSES_COLOR_T) COLOR_WHITE, (NCURSES_COLOR_T) i); refresh(); break; case case_QUIT: break; default: beep(); break; } if (current < 0) current = 0; if (current >= max_colors) current = max_colors - 1; if (current < top_color) top_color = current; if (current - top_color >= page_size) top_color = current - (page_size - 1); MvPrintw(LINES - 1, 0, "Number: %d", value); clrtoeol(); } while (!isQuit(this_c)); erase(); /* * ncurses does not reset each color individually when calling endwin(). */ init_all_colors(); endwin(); } /**************************************************************************** * * Alternate character-set stuff * ****************************************************************************/ static bool cycle_attr(int ch, unsigned *at_code, chtype *attr, ATTR_TBL * list, unsigned limit) { bool result = TRUE; switch (ch) { case 'v': if ((*at_code += 1) >= limit) *at_code = 0; break; case 'V': if (*at_code == 0) *at_code = limit - 1; else *at_code -= 1; break; default: result = FALSE; break; } if (result) *attr = list[*at_code].attr; return result; } static bool cycle_colors(int ch, int *fg, int *bg, NCURSES_PAIRS_T *pair) { bool result = FALSE; if (use_colors) { result = TRUE; switch (ch) { case 'F': if ((*fg -= 1) < 0) *fg = COLORS - 1; break; case 'f': if ((*fg += 1) >= COLORS) *fg = 0; break; case 'B': if ((*bg -= 1) < 0) *bg = COLORS - 1; break; case 'b': if ((*bg += 1) >= COLORS) *bg = 0; break; default: result = FALSE; break; } if (result) { *pair = (NCURSES_PAIRS_T) (*fg != COLOR_BLACK || *bg != COLOR_BLACK); if (*pair != 0) { *pair = 1; if (init_pair(*pair, (NCURSES_COLOR_T) *fg, (NCURSES_COLOR_T) *bg) == ERR) { result = FALSE; } } } } return result; } /**************************************************************************** * * Soft-key label test * ****************************************************************************/ #if USE_SOFTKEYS #define SLK_HELP 17 #define SLK_WORK (SLK_HELP + 3) static void slk_help(void) { static const char *table[] = { "Available commands are:" ,"" ,"^L -- repaint this message and activate soft keys" ,"a/d -- activate/disable soft keys" ,"c -- set centered format for labels" ,"l -- set left-justified format for labels" ,"r -- set right-justified format for labels" ,"[12345678] -- set label; labels are numbered 1 through 8" ,"e -- erase stdscr (should not erase labels)" ,"s -- test scrolling of shortened screen" ,"v/V -- cycle through video attributes" #if HAVE_SLK_COLOR ,"F/f/B/b -- cycle through foreground/background colors" #endif ,"ESC -- return to main menu" ,"" ,"Note: if activating the soft keys causes your terminal to scroll up" ,"one line, your terminal auto-scrolls when anything is written to the" ,"last screen position. The ncurses code does not yet handle this" ,"gracefully." }; unsigned j; move(2, 0); for (j = 0; j < SIZEOF(table); ++j) { P(table[j]); } refresh(); } #if HAVE_SLK_COLOR static void call_slk_color(int fg, int bg) { init_pair(1, (NCURSES_COLOR_T) bg, (NCURSES_COLOR_T) fg); slk_color(1); MvPrintw(SLK_WORK, 0, "Colors %d/%d\n", fg, bg); clrtoeol(); slk_touch(); slk_noutrefresh(); refresh(); } #endif static void slk_test(void) /* exercise the soft keys */ { int c, fmt = 1; char buf[9]; char *s; chtype attr = A_NORMAL; unsigned at_code = 0; #if HAVE_SLK_COLOR int fg = COLOR_BLACK; int bg = COLOR_WHITE; NCURSES_PAIRS_T pair = 0; #endif ATTR_TBL my_list[SIZEOF(attrs_to_test)]; unsigned my_size = init_attr_list(my_list, termattrs()); c = CTRL('l'); #if HAVE_SLK_COLOR if (use_colors) { call_slk_color(fg, bg); } #endif do { move(0, 0); switch (c) { case CTRL('l'): erase(); attron(A_BOLD); MvAddStr(0, 20, "Soft Key Exerciser"); attroff(A_BOLD); slk_help(); /* fall through */ case 'a': slk_restore(); break; case 'e': wclear(stdscr); break; case 's': MvPrintw(SLK_WORK, 0, "Press Q to stop the scrolling-test: "); while ((c = Getchar()) != 'Q' && (c != ERR)) addch((chtype) c); break; case 'd': slk_clear(); break; case 'l': fmt = 0; break; case 'c': fmt = 1; break; case 'r': fmt = 2; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': MvAddStr(SLK_WORK, 0, "Please enter the label value: "); strcpy(buf, ""); if ((s = slk_label(c - '0')) != 0) { strncpy(buf, s, (size_t) 8); } wGetstring(stdscr, buf, 8); slk_set((c - '0'), buf, fmt); slk_refresh(); move(SLK_WORK, 0); clrtobot(); break; case case_QUIT: goto done; #if defined(NCURSES_VERSION) && defined(KEY_RESIZE) && HAVE_WRESIZE case KEY_RESIZE: wnoutrefresh(stdscr); break; #endif default: if (cycle_attr(c, &at_code, &attr, my_list, my_size)) { slk_attrset(attr); slk_touch(); slk_noutrefresh(); break; } #if HAVE_SLK_COLOR if (cycle_colors(c, &fg, &bg, &pair)) { if (use_colors) { call_slk_color(fg, bg); } else { beep(); } break; } #endif beep(); break; } } while (!isQuit(c = Getchar())); done: slk_clear(); erase(); endwin(); } #if USE_WIDEC_SUPPORT #define SLKLEN 8 static void wide_slk_test(void) /* exercise the soft keys */ { int c, fmt = 1; wchar_t buf[SLKLEN + 1]; char *s; chtype attr = A_NORMAL; unsigned at_code = 0; int fg = COLOR_BLACK; int bg = COLOR_WHITE; NCURSES_PAIRS_T pair = 0; ATTR_TBL my_list[SIZEOF(attrs_to_test)]; unsigned my_size = init_attr_list(my_list, term_attrs()); c = CTRL('l'); if (use_colors) { call_slk_color(fg, bg); } do { move(0, 0); switch (c) { case CTRL('l'): erase(); attr_on(WA_BOLD, NULL); MvAddStr(0, 20, "Soft Key Exerciser"); attr_off(WA_BOLD, NULL); slk_help(); /* fall through */ case 'a': slk_restore(); break; case 'e': wclear(stdscr); break; case 's': MvPrintw(SLK_WORK, 0, "Press Q to stop the scrolling-test: "); while ((c = Getchar()) != 'Q' && (c != ERR)) addch((chtype) c); break; case 'd': slk_clear(); break; case 'l': fmt = 0; break; case 'c': fmt = 1; break; case 'r': fmt = 2; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': MvAddStr(SLK_WORK, 0, "Please enter the label value: "); *buf = 0; if ((s = slk_label(c - '0')) != 0) { char *temp = strdup(s); size_t used = strlen(temp); size_t want = SLKLEN; size_t test; #ifndef state_unused mbstate_t state; #endif buf[0] = L'\0'; while (want > 0 && used != 0) { const char *base = s; reset_mbytes(state); test = count_mbytes(base, 0, &state); if (test == (size_t) -1) { temp[--used] = 0; } else if (test > want) { temp[--used] = 0; } else { reset_mbytes(state); trans_mbytes(buf, base, want, &state); break; } } free(temp); } wGet_wstring(stdscr, buf, SLKLEN); slk_wset((c - '0'), buf, fmt); slk_refresh(); move(SLK_WORK, 0); clrtobot(); break; case case_QUIT: goto done; case 'F': if (use_colors) { fg = (NCURSES_COLOR_T) ((fg + 1) % COLORS); call_slk_color(fg, bg); } break; case 'B': if (use_colors) { bg = (NCURSES_COLOR_T) ((bg + 1) % COLORS); call_slk_color(fg, bg); } break; #if defined(NCURSES_VERSION) && defined(KEY_RESIZE) && HAVE_WRESIZE case KEY_RESIZE: wnoutrefresh(stdscr); break; #endif default: if (cycle_attr(c, &at_code, &attr, my_list, my_size)) { slk_attr_set(attr, (NCURSES_COLOR_T) (fg || bg), NULL); slk_touch(); slk_noutrefresh(); break; } #if HAVE_SLK_COLOR if (cycle_colors(c, &fg, &bg, &pair)) { if (use_colors) { call_slk_color(fg, bg); } else { beep(); } break; } #endif beep(); break; } } while (!isQuit(c = Getchar())); done: slk_clear(); erase(); endwin(); } #endif #endif /* SLK_INIT */ static void show_256_chars(int repeat, attr_t attr, NCURSES_PAIRS_T pair) { unsigned first = 0; unsigned last = 255; unsigned code; int count; erase(); attron(A_BOLD); MvPrintw(0, 20, "Display of Character Codes %#0x to %#0x", first, last); attroff(A_BOLD); refresh(); for (code = first; code <= last; ++code) { int row = (int) (2 + (code / 16)); int col = (int) (5 * (code % 16)); IGNORE_RC(mvaddch(row, col, colored_chtype(code, attr, pair))); for (count = 1; count < repeat; ++count) { addch(colored_chtype(code, attr, pair)); } } } /* * Show a slice of 32 characters, allowing those to be repeated up to the * screen's width. * * ISO 6429: codes 0x80 to 0x9f may be control characters that cause the * terminal to perform functions. The remaining codes can be graphic. */ static void show_upper_chars(int base, int pagesize, int repeat, attr_t attr, NCURSES_PAIRS_T pair) { unsigned code; unsigned first = (unsigned) base; unsigned last = first + (unsigned) pagesize - 2; bool C1 = (first == 128); int reply; erase(); attron(A_BOLD); MvPrintw(0, 20, "Display of %s Character Codes %d to %d", C1 ? "C1" : "GR", first, last); attroff(A_BOLD); refresh(); for (code = first; code <= last; code++) { int count = repeat; int row = 2 + ((int) (code - first) % (pagesize / 2)); int col = ((int) (code - first) / (pagesize / 2)) * COLS / 2; char tmp[80]; sprintf(tmp, "%3u (0x%x)", code, code); MvPrintw(row, col, "%*s: ", COLS / 4, tmp); do { if (C1) nodelay(stdscr, TRUE); echochar(colored_chtype(code, attr, pair)); if (C1) { /* (yes, this _is_ crude) */ while ((reply = Getchar()) != ERR) { addch(UChar(reply)); napms(10); } nodelay(stdscr, FALSE); } } while (--count > 0); } } #define PC_COLS 4 static void show_pc_chars(int repeat, attr_t attr, NCURSES_PAIRS_T pair) { unsigned code; erase(); attron(A_BOLD); MvPrintw(0, 20, "Display of PC Character Codes"); attroff(A_BOLD); refresh(); for (code = 0; code < 16; ++code) { MvPrintw(2, (int) code * PC_COLS + 8, "%X", code); } for (code = 0; code < 256; code++) { int count = repeat; int row = 3 + (int) (code / 16) + (code >= 128); int col = 8 + (int) (code % 16) * PC_COLS; if ((code % 16) == 0) MvPrintw(row, 0, "0x%02x:", code); move(row, col); do { switch (code) { case '\n': case '\r': case '\b': case '\f': case '\033': case 0x9b: /* * Skip the ones that do not work. */ break; default: addch(colored_chtype(code, A_ALTCHARSET | attr, pair)); break; } } while (--count > 0); } } static void show_box_chars(int repeat, attr_t attr, NCURSES_PAIRS_T pair) { (void) repeat; attr |= (attr_t) COLOR_PAIR(pair); erase(); attron(A_BOLD); MvAddStr(0, 20, "Display of the ACS Line-Drawing Set"); attroff(A_BOLD); refresh(); /* *INDENT-OFF* */ wborder(stdscr, colored_chtype(ACS_VLINE, attr, pair), colored_chtype(ACS_VLINE, attr, pair), colored_chtype(ACS_HLINE, attr, pair), colored_chtype(ACS_HLINE, attr, pair), colored_chtype(ACS_ULCORNER, attr, pair), colored_chtype(ACS_URCORNER, attr, pair), colored_chtype(ACS_LLCORNER, attr, pair), colored_chtype(ACS_LRCORNER, attr, pair)); MvHLine(LINES / 2, 0, colored_chtype(ACS_HLINE, attr, pair), COLS); MvVLine(0, COLS / 2, colored_chtype(ACS_VLINE, attr, pair), LINES); MvAddCh(0, COLS / 2, colored_chtype(ACS_TTEE, attr, pair)); MvAddCh(LINES / 2, COLS / 2, colored_chtype(ACS_PLUS, attr, pair)); MvAddCh(LINES - 1, COLS / 2, colored_chtype(ACS_BTEE, attr, pair)); MvAddCh(LINES / 2, 0, colored_chtype(ACS_LTEE, attr, pair)); MvAddCh(LINES / 2, COLS - 1, colored_chtype(ACS_RTEE, attr, pair)); /* *INDENT-ON* */ } static int show_1_acs(int n, int repeat, const char *name, chtype code) { const int height = 16; int row = 2 + (n % height); int col = (n / height) * COLS / 2; MvPrintw(row, col, "%*s : ", COLS / 4, name); do { addch(code); } while (--repeat > 0); return n + 1; } static void show_acs_chars(int repeat, attr_t attr, NCURSES_PAIRS_T pair) /* display the ACS character set */ { int n; #define BOTH(name) #name, colored_chtype(name, attr, (chtype) pair) erase(); attron(A_BOLD); MvAddStr(0, 20, "Display of the ACS Character Set"); attroff(A_BOLD); refresh(); n = show_1_acs(0, repeat, BOTH(ACS_ULCORNER)); n = show_1_acs(n, repeat, BOTH(ACS_URCORNER)); n = show_1_acs(n, repeat, BOTH(ACS_LLCORNER)); n = show_1_acs(n, repeat, BOTH(ACS_LRCORNER)); n = show_1_acs(n, repeat, BOTH(ACS_LTEE)); n = show_1_acs(n, repeat, BOTH(ACS_RTEE)); n = show_1_acs(n, repeat, BOTH(ACS_TTEE)); n = show_1_acs(n, repeat, BOTH(ACS_BTEE)); n = show_1_acs(n, repeat, BOTH(ACS_HLINE)); n = show_1_acs(n, repeat, BOTH(ACS_VLINE)); /* * HPUX's ACS definitions are broken here. Just give up. */ #if !(defined(__hpux) && !defined(NCURSES_VERSION)) n = show_1_acs(n, repeat, BOTH(ACS_LARROW)); n = show_1_acs(n, repeat, BOTH(ACS_RARROW)); n = show_1_acs(n, repeat, BOTH(ACS_UARROW)); n = show_1_acs(n, repeat, BOTH(ACS_DARROW)); n = show_1_acs(n, repeat, BOTH(ACS_BLOCK)); n = show_1_acs(n, repeat, BOTH(ACS_BOARD)); n = show_1_acs(n, repeat, BOTH(ACS_LANTERN)); n = show_1_acs(n, repeat, BOTH(ACS_BULLET)); n = show_1_acs(n, repeat, BOTH(ACS_CKBOARD)); n = show_1_acs(n, repeat, BOTH(ACS_DEGREE)); n = show_1_acs(n, repeat, BOTH(ACS_DIAMOND)); n = show_1_acs(n, repeat, BOTH(ACS_PLMINUS)); n = show_1_acs(n, repeat, BOTH(ACS_PLUS)); n = show_1_acs(n, repeat, BOTH(ACS_GEQUAL)); n = show_1_acs(n, repeat, BOTH(ACS_NEQUAL)); n = show_1_acs(n, repeat, BOTH(ACS_LEQUAL)); n = show_1_acs(n, repeat, BOTH(ACS_STERLING)); n = show_1_acs(n, repeat, BOTH(ACS_PI)); n = show_1_acs(n, repeat, BOTH(ACS_S1)); n = show_1_acs(n, repeat, BOTH(ACS_S3)); n = show_1_acs(n, repeat, BOTH(ACS_S7)); (void) show_1_acs(n, repeat, BOTH(ACS_S9)); #endif } static void acs_display(void) { int c = 'a'; int pagesize = 32; char *term = getenv("TERM"); const char *pch_kludge = ((term != 0 && strstr(term, "linux")) ? "p=PC, " : ""); chtype attr = A_NORMAL; int digit = 0; int repeat = 1; int fg = COLOR_BLACK; int bg = COLOR_BLACK; unsigned at_code = 0; NCURSES_PAIRS_T pair = 0; void (*last_show_acs) (int, attr_t, NCURSES_PAIRS_T) = 0; ATTR_TBL my_list[SIZEOF(attrs_to_test)]; unsigned my_size = init_attr_list(my_list, termattrs()); do { switch (c) { case CTRL('L'): Repaint(); break; case 'a': ToggleAcs(last_show_acs, show_acs_chars); break; case 'p': if (*pch_kludge) ToggleAcs(last_show_acs, show_pc_chars); else beep(); break; case 'w': if (pagesize == 32) { pagesize = 256; } else { pagesize = 32; } break; case 'x': ToggleAcs(last_show_acs, show_box_chars); break; case '0': case '1': case '2': case '3': digit = (c - '0'); last_show_acs = 0; break; case '-': if (digit > 0) { --digit; last_show_acs = 0; } else { beep(); } break; case '+': if (digit < 3) { ++digit; last_show_acs = 0; } else { beep(); } break; case '>': if (repeat < (COLS / 4)) ++repeat; break; case '<': if (repeat > 1) --repeat; break; default: if (cycle_attr(c, &at_code, &attr, my_list, my_size) || cycle_colors(c, &fg, &bg, &pair)) { break; } else { beep(); } break; } if (pagesize != 32) { show_256_chars(repeat, attr, pair); } else if (last_show_acs != 0) { last_show_acs(repeat, attr, pair); } else { show_upper_chars(digit * pagesize + 128, pagesize, repeat, attr, pair); } MvPrintw(LINES - 3, 0, "Note: ANSI terminals may not display C1 characters."); MvPrintw(LINES - 2, 0, "Select: a=ACS, w=all x=box, %s0=C1, 1-3,+/- non-ASCII, repeat, ESC=quit", pch_kludge); if (use_colors) { MvPrintw(LINES - 1, 0, "v/V, f/F, b/B cycle through video attributes (%s) and color %d/%d.", my_list[at_code].name, fg, bg); } else { MvPrintw(LINES - 1, 0, "v/V cycles through video attributes (%s).", my_list[at_code].name); } refresh(); } while (!isQuit(c = Getchar())); Pause(); erase(); endwin(); } #if USE_WIDEC_SUPPORT static cchar_t * merge_wide_attr(cchar_t *dst, const cchar_t *src, attr_t attr, NCURSES_PAIRS_T pair) { int count; *dst = *src; do { TEST_CCHAR(src, count, { attr |= (test_attrs & A_ALTCHARSET); setcchar(dst, test_wch, attr, pair, NULL); } , { ; }); } while (0); return dst; } /* * Header/legend take up no more than 8 lines, leaving 16 lines on a 24-line * display. If there are no repeats, we could normally display 16 lines of 64 * characters (1024 total). However, taking repeats and double-width cells * into account, use 256 characters for the page. */ static void show_paged_widechars(int base, int pagesize, int repeat, int space, attr_t attr, NCURSES_PAIRS_T pair) { int first = base * pagesize; int last = first + pagesize - 1; int per_line = 16; cchar_t temp; wchar_t code; wchar_t codes[10]; erase(); attron(A_BOLD); MvPrintw(0, 20, "Display of Character Codes %#x to %#x", first, last); attroff(A_BOLD); for (code = (wchar_t) first; (int) code <= last; code++) { int row = (2 + ((int) code - first) / per_line); int col = 5 * ((int) code % per_line); int count; memset(&codes, 0, sizeof(codes)); codes[0] = code; setcchar(&temp, codes, attr, pair, 0); move(row, col); if (wcwidth(code) == 0 && code != 0) { addch((chtype) space | (A_REVERSE ^ attr) | (attr_t) COLOR_PAIR(pair)); } add_wch(&temp); for (count = 1; count < repeat; ++count) { add_wch(&temp); } } } static void show_upper_widechars(int first, int repeat, int space, attr_t attr, NCURSES_PAIRS_T pair) { cchar_t temp; wchar_t code; int last = first + 31; erase(); attron(A_BOLD); MvPrintw(0, 20, "Display of Character Codes %d to %d", first, last); attroff(A_BOLD); for (code = (wchar_t) first; (int) code <= last; code++) { int row = 2 + ((code - first) % 16); int col = ((code - first) / 16) * COLS / 2; wchar_t codes[10]; char tmp[80]; int count = repeat; int y, x; sprintf(tmp, "%3ld (0x%lx)", (long) code, (long) code); MvPrintw(row, col, "%*s: ", COLS / 4, tmp); memset(&codes, 0, sizeof(codes)); codes[0] = code; setcchar(&temp, codes, attr, pair, 0); do { /* * Give non-spacing characters something to combine with. If we * don't, they'll bunch up in a heap on the space after the ":". * Mark them with reverse-video to make them simpler to find on * the display. */ if (wcwidth(code) == 0) { addch((chtype) space | (A_REVERSE ^ attr) | (attr_t) COLOR_PAIR(pair)); } /* * This uses echo_wchar(), for comparison with the normal 'f' * test (and to make a test-case for echo_wchar()). The screen * may flicker because the erase() at the top of the function * is met by the builtin refresh() in echo_wchar(). */ echo_wchar(&temp); /* * The repeat-count may make text wrap - avoid that. */ getyx(stdscr, y, x); (void) y; if (x >= col + (COLS / 2) - 2) break; } while (--count > 0); } } static int show_1_wacs(int n, int repeat, const char *name, const cchar_t *code) { const int height = 16; int row = 2 + (n % height); int col = (n / height) * COLS / 2; MvPrintw(row, col, "%*s : ", COLS / 4, name); while (--repeat >= 0) { add_wch(code); } return n + 1; } #define MERGE_ATTR(wch) merge_wide_attr(&temp, wch, attr, pair) static void show_wacs_chars(int repeat, attr_t attr, NCURSES_PAIRS_T pair) /* display the wide-ACS character set */ { cchar_t temp; int n; /*#define BOTH2(name) #name, &(name) */ #define BOTH2(name) #name, MERGE_ATTR(name) erase(); attron(A_BOLD); MvAddStr(0, 20, "Display of the Wide-ACS Character Set"); attroff(A_BOLD); refresh(); n = show_1_wacs(0, repeat, BOTH2(WACS_ULCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_URCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_LLCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_LRCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_LTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_RTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_TTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_BTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_HLINE)); n = show_1_wacs(n, repeat, BOTH2(WACS_VLINE)); n = show_1_wacs(n, repeat, BOTH2(WACS_LARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_RARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_UARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_DARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_BLOCK)); n = show_1_wacs(n, repeat, BOTH2(WACS_BOARD)); n = show_1_wacs(n, repeat, BOTH2(WACS_LANTERN)); n = show_1_wacs(n, repeat, BOTH2(WACS_BULLET)); n = show_1_wacs(n, repeat, BOTH2(WACS_CKBOARD)); n = show_1_wacs(n, repeat, BOTH2(WACS_DEGREE)); n = show_1_wacs(n, repeat, BOTH2(WACS_DIAMOND)); n = show_1_wacs(n, repeat, BOTH2(WACS_PLMINUS)); n = show_1_wacs(n, repeat, BOTH2(WACS_PLUS)); #ifdef CURSES_WACS_ARRAY n = show_1_wacs(n, repeat, BOTH2(WACS_GEQUAL)); n = show_1_wacs(n, repeat, BOTH2(WACS_NEQUAL)); n = show_1_wacs(n, repeat, BOTH2(WACS_LEQUAL)); n = show_1_wacs(n, repeat, BOTH2(WACS_STERLING)); n = show_1_wacs(n, repeat, BOTH2(WACS_PI)); n = show_1_wacs(n, repeat, BOTH2(WACS_S1)); n = show_1_wacs(n, repeat, BOTH2(WACS_S3)); n = show_1_wacs(n, repeat, BOTH2(WACS_S7)); (void) show_1_wacs(n, repeat, BOTH2(WACS_S9)); #endif } #ifdef WACS_D_PLUS static void show_wacs_chars_double(int repeat, attr_t attr, NCURSES_PAIRS_T pair) /* display the wide-ACS character set */ { cchar_t temp; int n; /*#define BOTH2(name) #name, &(name) */ #define BOTH2(name) #name, MERGE_ATTR(name) erase(); attron(A_BOLD); MvAddStr(0, 20, "Display of the Wide-ACS Character Set"); attroff(A_BOLD); refresh(); n = show_1_wacs(0, repeat, BOTH2(WACS_D_ULCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_D_URCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_D_LLCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_D_LRCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_D_LTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_D_RTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_D_TTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_D_BTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_D_HLINE)); n = show_1_wacs(n, repeat, BOTH2(WACS_D_VLINE)); n = show_1_wacs(n, repeat, BOTH2(WACS_LARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_RARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_UARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_DARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_BLOCK)); n = show_1_wacs(n, repeat, BOTH2(WACS_BOARD)); n = show_1_wacs(n, repeat, BOTH2(WACS_LANTERN)); n = show_1_wacs(n, repeat, BOTH2(WACS_BULLET)); n = show_1_wacs(n, repeat, BOTH2(WACS_CKBOARD)); n = show_1_wacs(n, repeat, BOTH2(WACS_DEGREE)); n = show_1_wacs(n, repeat, BOTH2(WACS_DIAMOND)); n = show_1_wacs(n, repeat, BOTH2(WACS_PLMINUS)); n = show_1_wacs(n, repeat, BOTH2(WACS_PLUS)); #ifdef CURSES_WACS_ARRAY n = show_1_wacs(n, repeat, BOTH2(WACS_GEQUAL)); n = show_1_wacs(n, repeat, BOTH2(WACS_NEQUAL)); n = show_1_wacs(n, repeat, BOTH2(WACS_LEQUAL)); n = show_1_wacs(n, repeat, BOTH2(WACS_STERLING)); n = show_1_wacs(n, repeat, BOTH2(WACS_PI)); n = show_1_wacs(n, repeat, BOTH2(WACS_S1)); n = show_1_wacs(n, repeat, BOTH2(WACS_S3)); n = show_1_wacs(n, repeat, BOTH2(WACS_S7)); (void) show_1_wacs(n, repeat, BOTH2(WACS_S9)); #endif } #endif #ifdef WACS_T_PLUS static void show_wacs_chars_thick(int repeat, attr_t attr, NCURSES_PAIRS_T pair) /* display the wide-ACS character set */ { cchar_t temp; int n; /*#define BOTH2(name) #name, &(name) */ #define BOTH2(name) #name, MERGE_ATTR(name) erase(); attron(A_BOLD); MvAddStr(0, 20, "Display of the Wide-ACS Character Set"); attroff(A_BOLD); refresh(); n = show_1_wacs(0, repeat, BOTH2(WACS_T_ULCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_T_URCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_T_LLCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_T_LRCORNER)); n = show_1_wacs(n, repeat, BOTH2(WACS_T_LTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_T_RTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_T_TTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_T_BTEE)); n = show_1_wacs(n, repeat, BOTH2(WACS_T_HLINE)); n = show_1_wacs(n, repeat, BOTH2(WACS_T_VLINE)); n = show_1_wacs(n, repeat, BOTH2(WACS_LARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_RARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_UARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_DARROW)); n = show_1_wacs(n, repeat, BOTH2(WACS_BLOCK)); n = show_1_wacs(n, repeat, BOTH2(WACS_BOARD)); n = show_1_wacs(n, repeat, BOTH2(WACS_LANTERN)); n = show_1_wacs(n, repeat, BOTH2(WACS_BULLET)); n = show_1_wacs(n, repeat, BOTH2(WACS_CKBOARD)); n = show_1_wacs(n, repeat, BOTH2(WACS_DEGREE)); n = show_1_wacs(n, repeat, BOTH2(WACS_DIAMOND)); n = show_1_wacs(n, repeat, BOTH2(WACS_PLMINUS)); n = show_1_wacs(n, repeat, BOTH2(WACS_PLUS)); #ifdef CURSES_WACS_ARRAY n = show_1_wacs(n, repeat, BOTH2(WACS_GEQUAL)); n = show_1_wacs(n, repeat, BOTH2(WACS_NEQUAL)); n = show_1_wacs(n, repeat, BOTH2(WACS_LEQUAL)); n = show_1_wacs(n, repeat, BOTH2(WACS_STERLING)); n = show_1_wacs(n, repeat, BOTH2(WACS_PI)); n = show_1_wacs(n, repeat, BOTH2(WACS_S1)); n = show_1_wacs(n, repeat, BOTH2(WACS_S3)); n = show_1_wacs(n, repeat, BOTH2(WACS_S7)); (void) show_1_wacs(n, repeat, BOTH2(WACS_S9)); #endif } #endif #undef MERGE_ATTR #define MERGE_ATTR(n,wch) merge_wide_attr(&temp[n], wch, attr, pair) static void show_wbox_chars(int repeat, attr_t attr, NCURSES_PAIRS_T pair) { cchar_t temp[8]; (void) repeat; erase(); attron(A_BOLD); MvAddStr(0, 20, "Display of the Wide-ACS Line-Drawing Set"); attroff(A_BOLD); refresh(); wborder_set(stdscr, MERGE_ATTR(0, WACS_VLINE), MERGE_ATTR(1, WACS_VLINE), MERGE_ATTR(2, WACS_HLINE), MERGE_ATTR(3, WACS_HLINE), MERGE_ATTR(4, WACS_ULCORNER), MERGE_ATTR(5, WACS_URCORNER), MERGE_ATTR(6, WACS_LLCORNER), MERGE_ATTR(7, WACS_LRCORNER)); /* *INDENT-OFF* */ (void) mvhline_set(LINES / 2, 0, MERGE_ATTR(0, WACS_HLINE), COLS); (void) mvvline_set(0, COLS / 2, MERGE_ATTR(0, WACS_VLINE), LINES); (void) mvadd_wch(0, COLS / 2, MERGE_ATTR(0, WACS_TTEE)); (void) mvadd_wch(LINES / 2, COLS / 2, MERGE_ATTR(0, WACS_PLUS)); (void) mvadd_wch(LINES - 1, COLS / 2, MERGE_ATTR(0, WACS_BTEE)); (void) mvadd_wch(LINES / 2, 0, MERGE_ATTR(0, WACS_LTEE)); (void) mvadd_wch(LINES / 2, COLS - 1, MERGE_ATTR(0, WACS_RTEE)); /* *INDENT-ON* */ } #undef MERGE_ATTR static int show_2_wacs(int n, const char *name, const char *code, attr_t attr, NCURSES_PAIRS_T pair) { const int height = 16; int row = 2 + (n % height); int col = (n / height) * COLS / 2; char temp[80]; MvPrintw(row, col, "%*s : ", COLS / 4, name); (void) attr_set(attr, pair, 0); addstr(strncpy(temp, code, 20)); (void) attr_set(A_NORMAL, 0, 0); return n + 1; } #define SHOW_UTF8(n, name, code) show_2_wacs(n, name, code, attr, pair) static void show_utf8_chars(int repeat, attr_t attr, NCURSES_PAIRS_T pair) { int n; (void) repeat; erase(); attron(A_BOLD); MvAddStr(0, 20, "Display of the Wide-ACS Character Set"); attroff(A_BOLD); refresh(); /* *INDENT-OFF* */ n = SHOW_UTF8(0, "WACS_ULCORNER", "\342\224\214"); n = SHOW_UTF8(n, "WACS_URCORNER", "\342\224\220"); n = SHOW_UTF8(n, "WACS_LLCORNER", "\342\224\224"); n = SHOW_UTF8(n, "WACS_LRCORNER", "\342\224\230"); n = SHOW_UTF8(n, "WACS_LTEE", "\342\224\234"); n = SHOW_UTF8(n, "WACS_RTEE", "\342\224\244"); n = SHOW_UTF8(n, "WACS_TTEE", "\342\224\254"); n = SHOW_UTF8(n, "WACS_BTEE", "\342\224\264"); n = SHOW_UTF8(n, "WACS_HLINE", "\342\224\200"); n = SHOW_UTF8(n, "WACS_VLINE", "\342\224\202"); n = SHOW_UTF8(n, "WACS_LARROW", "\342\206\220"); n = SHOW_UTF8(n, "WACS_RARROW", "\342\206\222"); n = SHOW_UTF8(n, "WACS_UARROW", "\342\206\221"); n = SHOW_UTF8(n, "WACS_DARROW", "\342\206\223"); n = SHOW_UTF8(n, "WACS_BLOCK", "\342\226\256"); n = SHOW_UTF8(n, "WACS_BOARD", "\342\226\222"); n = SHOW_UTF8(n, "WACS_LANTERN", "\342\230\203"); n = SHOW_UTF8(n, "WACS_BULLET", "\302\267"); n = SHOW_UTF8(n, "WACS_CKBOARD", "\342\226\222"); n = SHOW_UTF8(n, "WACS_DEGREE", "\302\260"); n = SHOW_UTF8(n, "WACS_DIAMOND", "\342\227\206"); n = SHOW_UTF8(n, "WACS_PLMINUS", "\302\261"); n = SHOW_UTF8(n, "WACS_PLUS", "\342\224\274"); n = SHOW_UTF8(n, "WACS_GEQUAL", "\342\211\245"); n = SHOW_UTF8(n, "WACS_NEQUAL", "\342\211\240"); n = SHOW_UTF8(n, "WACS_LEQUAL", "\342\211\244"); n = SHOW_UTF8(n, "WACS_STERLING", "\302\243"); n = SHOW_UTF8(n, "WACS_PI", "\317\200"); n = SHOW_UTF8(n, "WACS_S1", "\342\216\272"); n = SHOW_UTF8(n, "WACS_S3", "\342\216\273"); n = SHOW_UTF8(n, "WACS_S7", "\342\216\274"); (void) SHOW_UTF8(n, "WACS_S9", "\342\216\275"); /* *INDENT-ON* */ } /* display the wide-ACS character set */ static void wide_acs_display(void) { int c = 'a'; int digit = 0; int repeat = 1; int space = ' '; int pagesize = 32; chtype attr = A_NORMAL; int fg = COLOR_BLACK; int bg = COLOR_BLACK; unsigned at_code = 0; NCURSES_PAIRS_T pair = 0; void (*last_show_wacs) (int, attr_t, NCURSES_PAIRS_T) = 0; ATTR_TBL my_list[SIZEOF(attrs_to_test)]; unsigned my_size = init_attr_list(my_list, term_attrs()); do { switch (c) { case CTRL('L'): Repaint(); break; case 'a': ToggleAcs(last_show_wacs, show_wacs_chars); break; #ifdef WACS_D_PLUS case 'd': ToggleAcs(last_show_wacs, show_wacs_chars_double); break; #endif #ifdef WACS_T_PLUS case 't': ToggleAcs(last_show_wacs, show_wacs_chars_thick); break; #endif case 'w': if (pagesize == 32) { pagesize = 256; } else { pagesize = 32; } break; case 'x': ToggleAcs(last_show_wacs, show_wbox_chars); break; case 'u': ToggleAcs(last_show_wacs, show_utf8_chars); break; default: if (c < 256 && isdigit(c)) { digit = (c - '0'); last_show_wacs = 0; } else if (c == '+') { ++digit; last_show_wacs = 0; } else if (c == '-' && digit > 0) { --digit; last_show_wacs = 0; } else if (c == '>' && repeat < (COLS / 4)) { ++repeat; } else if (c == '<' && repeat > 1) { --repeat; } else if (c == '_') { space = (space == ' ') ? '_' : ' '; last_show_wacs = 0; } else if (cycle_attr(c, &at_code, &attr, my_list, my_size) || cycle_colors(c, &fg, &bg, &pair)) { if (last_show_wacs != 0) break; } else { beep(); break; } break; } if (pagesize != 32) { show_paged_widechars(digit, pagesize, repeat, space, attr, pair); } else if (last_show_wacs != 0) { last_show_wacs(repeat, attr, pair); } else { show_upper_widechars(digit * 32 + 128, repeat, space, attr, pair); } MvPrintw(LINES - 4, 0, "Select: a/d/t WACS, w=all x=box, u UTF-8, ^L repaint"); MvPrintw(LINES - 3, 2, "0-9,+/- non-ASCII, repeat, _ space, ESC=quit"); if (use_colors) { MvPrintw(LINES - 2, 2, "v/V, f/F, b/B cycle through video attributes (%s) and color %d/%d.", my_list[at_code].name, fg, bg); } else { MvPrintw(LINES - 2, 2, "v/V cycles through video attributes (%s).", my_list[at_code].name); } refresh(); } while (!isQuit(c = Getchar())); Pause(); erase(); endwin(); } #endif /* * Graphic-rendition test (adapted from vttest) */ static void test_sgr_attributes(void) { int pass; for (pass = 0; pass < 2; pass++) { chtype normal = ((pass == 0 ? A_NORMAL : A_REVERSE)) | BLANK; /* Use non-default colors if possible to exercise bce a little */ if (use_colors) { init_pair(1, COLOR_WHITE, COLOR_BLUE); normal |= (chtype) COLOR_PAIR(1); } bkgdset(normal); erase(); MvPrintw(1, 20, "Graphic rendition test pattern:"); MvPrintw(4, 1, "vanilla"); #define set_sgr(mask) bkgdset((normal^(mask))); set_sgr(A_BOLD); MvPrintw(4, 40, "bold"); set_sgr(A_UNDERLINE); MvPrintw(6, 6, "underline"); set_sgr(A_BOLD | A_UNDERLINE); MvPrintw(6, 45, "bold underline"); set_sgr(A_BLINK); MvPrintw(8, 1, "blink"); set_sgr(A_BLINK | A_BOLD); MvPrintw(8, 40, "bold blink"); set_sgr(A_UNDERLINE | A_BLINK); MvPrintw(10, 6, "underline blink"); set_sgr(A_BOLD | A_UNDERLINE | A_BLINK); MvPrintw(10, 45, "bold underline blink"); set_sgr(A_REVERSE); MvPrintw(12, 1, "negative"); set_sgr(A_BOLD | A_REVERSE); MvPrintw(12, 40, "bold negative"); set_sgr(A_UNDERLINE | A_REVERSE); MvPrintw(14, 6, "underline negative"); set_sgr(A_BOLD | A_UNDERLINE | A_REVERSE); MvPrintw(14, 45, "bold underline negative"); set_sgr(A_BLINK | A_REVERSE); MvPrintw(16, 1, "blink negative"); set_sgr(A_BOLD | A_BLINK | A_REVERSE); MvPrintw(16, 40, "bold blink negative"); set_sgr(A_UNDERLINE | A_BLINK | A_REVERSE); MvPrintw(18, 6, "underline blink negative"); set_sgr(A_BOLD | A_UNDERLINE | A_BLINK | A_REVERSE); MvPrintw(18, 45, "bold underline blink negative"); bkgdset(normal); MvPrintw(LINES - 2, 1, "%s background. ", pass == 0 ? "Dark" : "Light"); clrtoeol(); Pause(); } bkgdset(A_NORMAL | BLANK); erase(); endwin(); } /**************************************************************************** * * Windows and scrolling tester. * ****************************************************************************/ #define BOTLINES 4 /* number of line stolen from screen bottom */ typedef struct { int y, x; } pair; #define FRAME struct frame FRAME { FRAME *next, *last; bool do_scroll; bool do_keypad; WINDOW *wind; }; #if defined(NCURSES_VERSION) #if (NCURSES_VERSION_PATCH < 20070331) && NCURSES_EXT_FUNCS #define is_keypad(win) (win)->_use_keypad #define is_scrollok(win) (win)->_scroll #elif !defined(is_keypad) #define is_keypad(win) FALSE #define is_scrollok(win) FALSE #endif #else #define is_keypad(win) FALSE #define is_scrollok(win) FALSE #endif static WINDOW * frame_win(FRAME * curp) { return (curp != 0) ? curp->wind : stdscr; } /* We need to know if these flags are actually set, so don't look in FRAME. * These names are known to work with SVr4 curses as well as ncurses. The * _use_keypad name does not work with Solaris 8. */ static bool HaveKeypad(FRAME * curp) { WINDOW *win = frame_win(curp); (void) win; return is_keypad(win); } static bool HaveScroll(FRAME * curp) { WINDOW *win = frame_win(curp); (void) win; return is_scrollok(win); } static void newwin_legend(FRAME * curp) { static const struct { const char *msg; int code; } legend[] = { { "^C = create window", 0 }, { "^N = next window", 0 }, { "^P = previous window", 0 }, { "^F = scroll forward", 0 }, { "^B = scroll backward", 0 }, { "^K = keypad(%s)", 1 }, { "^S = scrollok(%s)", 2 }, { "^W = save window to file", 0 }, { "^R = restore window", 0 }, #if HAVE_WRESIZE { "^X = resize", 0 }, #endif { "^Q%s = exit", 3 } }; size_t n; int x; bool do_keypad = HaveKeypad(curp); bool do_scroll = HaveScroll(curp); char buf[BUFSIZ]; move(LINES - 4, 0); for (n = 0; n < SIZEOF(legend); n++) { switch (legend[n].code) { default: strcpy(buf, legend[n].msg); break; case 1: sprintf(buf, legend[n].msg, do_keypad ? "yes" : "no"); break; case 2: sprintf(buf, legend[n].msg, do_scroll ? "yes" : "no"); break; case 3: sprintf(buf, legend[n].msg, do_keypad ? "/ESC" : ""); break; } x = getcurx(stdscr); addstr((COLS < (x + 3 + (int) strlen(buf))) ? "\n" : (n ? ", " : "")); addstr(buf); } clrtoeol(); } static void transient(FRAME * curp, NCURSES_CONST char *msg) { newwin_legend(curp); if (msg) { MvAddStr(LINES - 1, 0, msg); refresh(); napms(1000); } move(LINES - 1, 0); printw("%s characters are echoed, window should %sscroll.", HaveKeypad(curp) ? "Non-arrow" : "All other", HaveScroll(curp) ? "" : "not "); clrtoeol(); } static void newwin_report(FRAME * curp) /* report on the cursor's current position, then restore it */ { WINDOW *win = frame_win(curp); int y, x; if (win != stdscr) transient(curp, (char *) 0); getyx(win, y, x); move(LINES - 1, COLS - 17); printw("Y = %2d X = %2d", y, x); if (win != stdscr) refresh(); else wmove(win, y, x); } static pair * selectcell(int uli, int ulj, int lri, int lrj) /* arrows keys move cursor, return location at current on non-arrow key */ { static pair res; /* result cell */ int si = lri - uli + 1; /* depth of the select area */ int sj = lrj - ulj + 1; /* width of the select area */ int i = 0, j = 0; /* offsets into the select area */ res.y = uli; res.x = ulj; for (;;) { move(uli + i, ulj + j); newwin_report((FRAME *) 0); switch (Getchar()) { case KEY_UP: i += si - 1; break; case KEY_DOWN: i++; break; case KEY_LEFT: j += sj - 1; break; case KEY_RIGHT: j++; break; case case_QUIT: return ((pair *) 0); #ifdef NCURSES_MOUSE_VERSION case KEY_MOUSE: { MEVENT event; getmouse(&event); if (event.y > uli && event.x > ulj) { i = event.y - uli; j = event.x - ulj; } else { beep(); break; } } /* FALLTHRU */ #endif default: res.y = uli + i; res.x = ulj + j; return (&res); } i %= si; j %= sj; } } static void outerbox(pair ul, pair lr, bool onoff) /* draw or erase a box *outside* the given pair of corners */ { MvAddCh(ul.y - 1, lr.x - 1, onoff ? ACS_ULCORNER : ' '); MvAddCh(ul.y - 1, lr.x + 1, onoff ? ACS_URCORNER : ' '); MvAddCh(lr.y + 1, lr.x + 1, onoff ? ACS_LRCORNER : ' '); MvAddCh(lr.y + 1, ul.x - 1, onoff ? ACS_LLCORNER : ' '); move(ul.y - 1, ul.x); hline(onoff ? ACS_HLINE : ' ', lr.x - ul.x + 1); move(ul.y, ul.x - 1); vline(onoff ? ACS_VLINE : ' ', lr.y - ul.y + 1); move(lr.y + 1, ul.x); hline(onoff ? ACS_HLINE : ' ', lr.x - ul.x + 1); move(ul.y, lr.x + 1); vline(onoff ? ACS_VLINE : ' ', lr.y - ul.y + 1); } static WINDOW * getwindow(void) /* Ask user for a window definition */ { WINDOW *rwindow; pair ul, lr, *tmp; move(0, 0); clrtoeol(); addstr("Use arrows to move cursor, anything else to mark corner 1"); refresh(); if ((tmp = selectcell(2, 1, LINES - BOTLINES - 2, COLS - 2)) == (pair *) 0) return ((WINDOW *) 0); memcpy(&ul, tmp, sizeof(pair)); MvAddCh(ul.y - 1, ul.x - 1, ACS_ULCORNER); move(0, 0); clrtoeol(); addstr("Use arrows to move cursor, anything else to mark corner 2"); refresh(); if ((tmp = selectcell(ul.y, ul.x, LINES - BOTLINES - 2, COLS - 2)) == (pair *) 0) return ((WINDOW *) 0); memcpy(&lr, tmp, sizeof(pair)); rwindow = subwin(stdscr, lr.y - ul.y + 1, lr.x - ul.x + 1, ul.y, ul.x); outerbox(ul, lr, TRUE); refresh(); if (rwindow != 0) wrefresh(rwindow); move(0, 0); clrtoeol(); return (rwindow); } static void newwin_move(FRAME * curp, int dy, int dx) { WINDOW *win = frame_win(curp); int cur_y, cur_x; int max_y, max_x; getyx(win, cur_y, cur_x); getmaxyx(win, max_y, max_x); if ((cur_x += dx) < 0) cur_x = 0; else if (cur_x >= max_x) cur_x = max_x - 1; if ((cur_y += dy) < 0) cur_y = 0; else if (cur_y >= max_y) cur_y = max_y - 1; wmove(win, cur_y, cur_x); } static FRAME * delete_framed(FRAME * fp, bool showit) { FRAME *np = 0; if (fp != 0) { fp->last->next = fp->next; fp->next->last = fp->last; if (showit) { werase(fp->wind); wrefresh(fp->wind); } delwin(fp->wind); np = (fp == fp->next) ? 0 : fp->next; free(fp); } return np; } static void acs_and_scroll(void) /* Demonstrate windows */ { int c; FRAME *current = (FRAME *) 0, *neww; WINDOW *usescr; #if HAVE_PUTWIN && HAVE_GETWIN FILE *fp; #endif #define DUMPFILE "screendump" #ifdef NCURSES_MOUSE_VERSION mousemask(BUTTON1_CLICKED, (mmask_t *) 0); #endif c = CTRL('C'); raw(); do { transient((FRAME *) 0, (char *) 0); switch (c) { case CTRL('C'): if ((neww = typeCalloc(FRAME, (size_t) 1)) == 0) { failed("acs_and_scroll"); goto breakout; } if ((neww->wind = getwindow()) == (WINDOW *) 0) { failed("acs_and_scroll"); free(neww); goto breakout; } if (current == 0) { /* First element, */ neww->next = neww; /* so point it at itself */ neww->last = neww; } else { neww->next = current->next; neww->last = current; neww->last->next = neww; neww->next->last = neww; } current = neww; /* SVr4 curses sets the keypad on all newly-created windows to * false. Someone reported that PDCurses makes new windows inherit * this flag. Remove the following 'keypad()' call to test this */ keypad(current->wind, TRUE); current->do_keypad = HaveKeypad(current); current->do_scroll = HaveScroll(current); break; case CTRL('N'): /* go to next window */ if (current) current = current->next; break; case CTRL('P'): /* go to previous window */ if (current) current = current->last; break; case CTRL('F'): /* scroll current window forward */ if (current) wscrl(frame_win(current), 1); break; case CTRL('B'): /* scroll current window backwards */ if (current) wscrl(frame_win(current), -1); break; case CTRL('K'): /* toggle keypad mode for current */ if (current) { current->do_keypad = !current->do_keypad; keypad(current->wind, current->do_keypad); } break; case CTRL('S'): if (current) { current->do_scroll = !current->do_scroll; scrollok(current->wind, current->do_scroll); } break; #if HAVE_PUTWIN && HAVE_GETWIN case CTRL('W'): /* save and delete window */ if ((current != 0) && (current == current->next)) { transient(current, "Will not save/delete ONLY window"); break; } else if ((fp = fopen(DUMPFILE, "w")) == (FILE *) 0) { transient(current, "Can't open screen dump file"); } else { (void) putwin(frame_win(current), fp); (void) fclose(fp); current = delete_framed(current, TRUE); } break; case CTRL('R'): /* restore window */ if ((fp = fopen(DUMPFILE, "r")) == (FILE *) 0) { transient(current, "Can't open screen dump file"); } else { if ((neww = typeCalloc(FRAME, (size_t) 1)) != 0) { neww->next = current ? current->next : 0; neww->last = current; if (neww->last != 0) neww->last->next = neww; if (neww->next != 0) neww->next->last = neww; neww->wind = getwin(fp); wrefresh(neww->wind); } else { failed("acs_and_scroll"); } (void) fclose(fp); } break; #endif #if HAVE_WRESIZE case CTRL('X'): /* resize window */ if (current) { pair *tmp, ul, lr; int i, mx, my; move(0, 0); clrtoeol(); addstr("Use arrows to move cursor, anything else to mark new corner"); refresh(); getbegyx(current->wind, ul.y, ul.x); tmp = selectcell(ul.y, ul.x, LINES - BOTLINES - 2, COLS - 2); if (tmp == (pair *) 0) { beep(); break; } getmaxyx(current->wind, lr.y, lr.x); lr.y += (ul.y - 1); lr.x += (ul.x - 1); outerbox(ul, lr, FALSE); wnoutrefresh(stdscr); /* strictly cosmetic hack for the test */ getmaxyx(current->wind, my, mx); if (my > tmp->y - ul.y) { getyx(current->wind, lr.y, lr.x); wmove(current->wind, tmp->y - ul.y + 1, 0); wclrtobot(current->wind); wmove(current->wind, lr.y, lr.x); } if (mx > tmp->x - ul.x) for (i = 0; i < my; i++) { wmove(current->wind, i, tmp->x - ul.x + 1); wclrtoeol(current->wind); } wnoutrefresh(current->wind); memcpy(&lr, tmp, sizeof(pair)); (void) wresize(current->wind, lr.y - ul.y + 0, lr.x - ul.x + 0); getbegyx(current->wind, ul.y, ul.x); getmaxyx(current->wind, lr.y, lr.x); lr.y += (ul.y - 1); lr.x += (ul.x - 1); outerbox(ul, lr, TRUE); wnoutrefresh(stdscr); wnoutrefresh(current->wind); move(0, 0); clrtoeol(); doupdate(); } break; #endif /* HAVE_WRESIZE */ case KEY_F(10): /* undocumented --- use this to test area clears */ selectcell(0, 0, LINES - 1, COLS - 1); clrtobot(); refresh(); break; case KEY_UP: newwin_move(current, -1, 0); break; case KEY_DOWN: newwin_move(current, 1, 0); break; case KEY_LEFT: newwin_move(current, 0, -1); break; case KEY_RIGHT: newwin_move(current, 0, 1); break; case KEY_BACKSPACE: /* FALLTHROUGH */ case KEY_DC: { int y, x; getyx(frame_win(current), y, x); if (--x < 0) { if (--y < 0) break; x = getmaxx(frame_win(current)) - 1; } (void) mvwdelch(frame_win(current), y, x); } break; case '\r': c = '\n'; /* FALLTHROUGH */ default: if (current) waddch(current->wind, (chtype) c); else beep(); break; } newwin_report(current); usescr = frame_win(current); wrefresh(usescr); } while (!isQuit(c = wGetchar(usescr)) && (c != ERR)); breakout: while (current != 0) current = delete_framed(current, FALSE); scrollok(stdscr, TRUE); /* reset to driver's default */ #ifdef NCURSES_MOUSE_VERSION mousemask(0, (mmask_t *) 0); #endif noraw(); erase(); endwin(); } /**************************************************************************** * * Panels tester * ****************************************************************************/ #if USE_LIBPANEL static int nap_msec = 1; static NCURSES_CONST char *mod[] = { "test ", "TEST ", "(**) ", "*()* ", "<--> ", "LAST " }; /*+------------------------------------------------------------------------- wait_a_while(msec) --------------------------------------------------------------------------*/ static void wait_a_while(int msec GCC_UNUSED) { #if HAVE_NAPMS if (nap_msec == 1) wGetchar(stdscr); else napms(nap_msec); #else if (nap_msec == 1) wGetchar(stdscr); else if (msec > 1000) sleep((unsigned) msec / 1000); else sleep(1); #endif } /* end of wait_a_while */ /*+------------------------------------------------------------------------- saywhat(text) --------------------------------------------------------------------------*/ static void saywhat(NCURSES_CONST char *text) { wmove(stdscr, LINES - 1, 0); wclrtoeol(stdscr); if (text != 0 && *text != '\0') { waddstr(stdscr, text); waddstr(stdscr, "; "); } waddstr(stdscr, "press any key to continue"); } /* end of saywhat */ /*+------------------------------------------------------------------------- mkpanel(rows,cols,tly,tlx) - alloc a win and panel and associate them --------------------------------------------------------------------------*/ static PANEL * mkpanel(NCURSES_COLOR_T color, int rows, int cols, int tly, int tlx) { WINDOW *win; PANEL *pan = 0; if ((win = newwin(rows, cols, tly, tlx)) != 0) { if ((pan = new_panel(win)) == 0) { delwin(win); } else if (use_colors) { NCURSES_COLOR_T fg = (NCURSES_COLOR_T) ((color == COLOR_BLUE) ? COLOR_WHITE : COLOR_BLACK); NCURSES_COLOR_T bg = color; init_pair(color, fg, bg); wbkgdset(win, (attr_t) (COLOR_PAIR(color) | ' ')); } else { wbkgdset(win, A_BOLD | ' '); } } return pan; } /* end of mkpanel */ /*+------------------------------------------------------------------------- rmpanel(pan) --------------------------------------------------------------------------*/ static void rmpanel(PANEL * pan) { WINDOW *win = panel_window(pan); del_panel(pan); delwin(win); } /* end of rmpanel */ /*+------------------------------------------------------------------------- pflush() --------------------------------------------------------------------------*/ static void pflush(void) { update_panels(); doupdate(); } /* end of pflush */ /*+------------------------------------------------------------------------- fill_panel(win) --------------------------------------------------------------------------*/ static void init_panel(WINDOW *win) { register int y, x; for (y = 0; y < LINES - 1; y++) { for (x = 0; x < COLS; x++) wprintw(win, "%d", (y + x) % 10); } } static void fill_panel(PANEL * pan) { WINDOW *win = panel_window(pan); const char *userptr = (const char *) panel_userptr(pan); int num = (userptr && *userptr) ? userptr[1] : '?'; int y, x; wmove(win, 1, 1); wprintw(win, "-pan%c-", num); wclrtoeol(win); box(win, 0, 0); for (y = 2; y < getmaxy(win) - 1; y++) { for (x = 1; x < getmaxx(win) - 1; x++) { wmove(win, y, x); waddch(win, UChar(num)); } } } #if USE_WIDEC_SUPPORT static void init_wide_panel(WINDOW *win) { int digit; cchar_t temp[10]; for (digit = 0; digit < 10; ++digit) make_fullwidth_digit(&temp[digit], digit); do { int y, x; getyx(stdscr, y, x); digit = (y + x / 2) % 10; } while (wadd_wch(win, &temp[digit]) != ERR); } static void fill_wide_panel(PANEL * pan) { WINDOW *win = panel_window(pan); const char *userptr = (const char *) panel_userptr(pan); int num = (userptr && *userptr) ? userptr[1] : '?'; int y, x; wmove(win, 1, 1); wprintw(win, "-pan%c-", num); wclrtoeol(win); box(win, 0, 0); for (y = 2; y < getmaxy(win) - 1; y++) { for (x = 1; x < getmaxx(win) - 1; x++) { wmove(win, y, x); waddch(win, UChar(num)); } } } #endif #define MAX_PANELS 5 static void canned_panel(PANEL * px[MAX_PANELS + 1], NCURSES_CONST char *cmd) { int which = cmd[1] - '0'; saywhat(cmd); switch (*cmd) { case 'h': hide_panel(px[which]); break; case 's': show_panel(px[which]); break; case 't': top_panel(px[which]); break; case 'b': bottom_panel(px[which]); break; case 'd': rmpanel(px[which]); break; } pflush(); wait_a_while(nap_msec); } static void demo_panels(void (*InitPanel) (WINDOW *), void (*FillPanel) (PANEL *)) { int count; int itmp; PANEL *px[MAX_PANELS + 1]; scrollok(stdscr, FALSE); /* we don't want stdscr to scroll! */ refresh(); InitPanel(stdscr); for (count = 0; count < 5; count++) { px[1] = mkpanel(COLOR_RED, LINES / 2 - 2, COLS / 8 + 1, 0, 0); set_panel_userptr(px[1], (NCURSES_CONST void *) "p1"); px[2] = mkpanel(COLOR_GREEN, LINES / 2 + 1, COLS / 7, LINES / 4, COLS / 10); set_panel_userptr(px[2], (NCURSES_CONST void *) "p2"); px[3] = mkpanel(COLOR_YELLOW, LINES / 4, COLS / 10, LINES / 2, COLS / 9); set_panel_userptr(px[3], (NCURSES_CONST void *) "p3"); px[4] = mkpanel(COLOR_BLUE, LINES / 2 - 2, COLS / 8, LINES / 2 - 2, COLS / 3); set_panel_userptr(px[4], (NCURSES_CONST void *) "p4"); px[5] = mkpanel(COLOR_MAGENTA, LINES / 2 - 2, COLS / 8, LINES / 2, COLS / 2 - 2); set_panel_userptr(px[5], (NCURSES_CONST void *) "p5"); FillPanel(px[1]); FillPanel(px[2]); FillPanel(px[3]); FillPanel(px[4]); FillPanel(px[5]); hide_panel(px[4]); hide_panel(px[5]); pflush(); saywhat(""); wait_a_while(nap_msec); saywhat("h3 s1 s2 s4 s5"); move_panel(px[1], 0, 0); hide_panel(px[3]); show_panel(px[1]); show_panel(px[2]); show_panel(px[4]); show_panel(px[5]); pflush(); wait_a_while(nap_msec); canned_panel(px, "s1"); canned_panel(px, "s2"); saywhat("m2"); move_panel(px[2], LINES / 3 + 1, COLS / 8); pflush(); wait_a_while(nap_msec); canned_panel(px, "s3"); saywhat("m3"); move_panel(px[3], LINES / 4 + 1, COLS / 15); pflush(); wait_a_while(nap_msec); canned_panel(px, "b3"); canned_panel(px, "s4"); canned_panel(px, "s5"); canned_panel(px, "t3"); canned_panel(px, "t1"); canned_panel(px, "t2"); canned_panel(px, "t3"); canned_panel(px, "t4"); for (itmp = 0; itmp < 6; itmp++) { WINDOW *w4 = panel_window(px[4]); WINDOW *w5 = panel_window(px[5]); saywhat("m4"); wmove(w4, LINES / 8, 1); waddstr(w4, mod[itmp]); move_panel(px[4], LINES / 6, itmp * (COLS / 8)); wmove(w5, LINES / 6, 1); waddstr(w5, mod[itmp]); pflush(); wait_a_while(nap_msec); saywhat("m5"); wmove(w4, LINES / 6, 1); waddstr(w4, mod[itmp]); move_panel(px[5], LINES / 3 - 1, (itmp * 10) + 6); wmove(w5, LINES / 8, 1); waddstr(w5, mod[itmp]); pflush(); wait_a_while(nap_msec); } saywhat("m4"); move_panel(px[4], LINES / 6, itmp * (COLS / 8)); pflush(); wait_a_while(nap_msec); canned_panel(px, "t5"); canned_panel(px, "t2"); canned_panel(px, "t1"); canned_panel(px, "d2"); canned_panel(px, "h3"); canned_panel(px, "d1"); canned_panel(px, "d4"); canned_panel(px, "d5"); canned_panel(px, "d3"); wait_a_while(nap_msec); if (nap_msec == 1) break; nap_msec = 100L; } erase(); endwin(); } #endif /* USE_LIBPANEL */ /**************************************************************************** * * Pad tester * ****************************************************************************/ #define GRIDSIZE 3 static bool pending_pan = FALSE; static bool show_panner_legend = TRUE; static int panner_legend(int line) { static const char *const legend[] = { "Use arrow keys (or U,D,L,R) to pan, ESC to quit, ! to shell-out.", "Use +,- (or j,k) to grow/shrink the panner vertically.", "Use <,> (or h,l) to grow/shrink the panner horizontally.", "Number repeats. Toggle legend:? filler:a timer:t scrollmark:s." }; int n = ((int) SIZEOF(legend) - (LINES - line)); if (n >= 0) { if (move(line, 0) != ERR) { if (show_panner_legend) printw("%s", legend[n]); clrtoeol(); return show_panner_legend; } } return FALSE; } static void panner_h_cleanup(int from_y, int from_x, int to_x) { if (!panner_legend(from_y)) do_h_line(from_y, from_x, ' ', to_x); } static void panner_v_cleanup(int from_y, int from_x, int to_y) { if (!panner_legend(from_y)) do_v_line(from_y, from_x, ' ', to_y); } static void fill_pad(WINDOW *panpad, bool pan_lines, bool colored) { int y, x; unsigned gridcount = 0; chtype fill = 0; #ifdef A_COLOR if (colored) fill = (chtype) COLOR_PAIR(1); #endif wmove(panpad, 0, 0); for (y = 0; y < getmaxy(panpad); y++) { for (x = 0; x < getmaxx(panpad); x++) { if (y % GRIDSIZE == 0 && x % GRIDSIZE == 0) { if (y == 0 && x == 0) waddch(panpad, pan_lines ? ACS_ULCORNER : '+'); else if (y == 0) waddch(panpad, pan_lines ? ACS_TTEE : '+'); else if (y == 0 || x == 0) waddch(panpad, pan_lines ? ACS_LTEE : '+'); else waddch(panpad, (chtype) ((pan_lines ? 'a' : 'A') + (int) (gridcount++ % 26)) | fill); } else if (y % GRIDSIZE == 0) waddch(panpad, pan_lines ? ACS_HLINE : '-'); else if (x % GRIDSIZE == 0) waddch(panpad, pan_lines ? ACS_VLINE : '|'); else waddch(panpad, ' '); } } } static void panner(WINDOW *pad, int top_x, int top_y, int porty, int portx, int (*pgetc) (WINDOW *), bool colored) { #if HAVE_GETTIMEOFDAY struct timeval before, after; bool timing = TRUE; #endif bool pan_lines = FALSE; bool scrollers = TRUE; int basex = 0; int basey = 0; int pxmax, pymax, lowend, highend, c; getmaxyx(pad, pymax, pxmax); scrollok(stdscr, FALSE); /* we don't want stdscr to scroll! */ c = KEY_REFRESH; do { #ifdef NCURSES_VERSION /* * During shell-out, the user may have resized the window. Adjust * the port size of the pad to accommodate this. Ncurses automatically * resizes all of the normal windows to fit on the new screen. */ if (top_x > COLS) top_x = COLS; if (portx > COLS) portx = COLS; if (top_y > LINES) top_y = LINES; if (porty > LINES) porty = LINES; #endif switch (c) { case KEY_REFRESH: erase(); /* FALLTHRU */ case '?': if (c == '?') show_panner_legend = !show_panner_legend; panner_legend(LINES - 4); panner_legend(LINES - 3); panner_legend(LINES - 2); panner_legend(LINES - 1); break; case 'a': pan_lines = !pan_lines; fill_pad(pad, pan_lines, colored); pending_pan = FALSE; break; #if HAVE_GETTIMEOFDAY case 't': timing = !timing; if (!timing) panner_legend(LINES - 1); break; #endif case 's': scrollers = !scrollers; break; /* Move the top-left corner of the pad, keeping the bottom-right * corner fixed. */ case 'h': /* increase-columns: move left edge to left */ if (top_x <= 0) beep(); else { panner_v_cleanup(top_y, top_x, porty); top_x--; } break; case 'j': /* decrease-lines: move top-edge down */ if (top_y >= porty) beep(); else { panner_h_cleanup(top_y - 1, top_x - (top_x > 0), portx); top_y++; } break; case 'k': /* increase-lines: move top-edge up */ if (top_y <= 0) beep(); else { top_y--; panner_h_cleanup(top_y, top_x, portx); } break; case 'l': /* decrease-columns: move left-edge to right */ if (top_x >= portx) beep(); else { panner_v_cleanup(top_y - (top_y > 0), top_x - 1, porty); top_x++; } break; /* Move the bottom-right corner of the pad, keeping the top-left * corner fixed. */ case KEY_IC: /* increase-columns: move right-edge to right */ if (portx >= pxmax || portx >= COLS) beep(); else { panner_v_cleanup(top_y - (top_y > 0), portx - 1, porty); ++portx; } break; case KEY_IL: /* increase-lines: move bottom-edge down */ if (porty >= pymax || porty >= LINES) beep(); else { panner_h_cleanup(porty - 1, top_x - (top_x > 0), portx); ++porty; } break; case KEY_DC: /* decrease-columns: move bottom edge up */ if (portx <= top_x) beep(); else { portx--; panner_v_cleanup(top_y - (top_y > 0), portx, porty); } break; case KEY_DL: /* decrease-lines */ if (porty <= top_y) beep(); else { porty--; panner_h_cleanup(porty, top_x - (top_x > 0), portx); } break; case KEY_LEFT: /* pan leftwards */ if (basex > 0) basex--; else beep(); break; case KEY_RIGHT: /* pan rightwards */ if (basex + portx - (pymax > porty) < pxmax) basex++; else beep(); break; case KEY_UP: /* pan upwards */ if (basey > 0) basey--; else beep(); break; case KEY_DOWN: /* pan downwards */ if (basey + porty - (pxmax > portx) < pymax) basey++; else beep(); break; case 'H': case KEY_HOME: case KEY_FIND: basey = 0; break; case 'E': case KEY_END: case KEY_SELECT: basey = pymax - porty; if (basey < 0) basey = 0; break; default: beep(); break; } MvAddCh(top_y - 1, top_x - 1, ACS_ULCORNER); do_v_line(top_y, top_x - 1, ACS_VLINE, porty); do_h_line(top_y - 1, top_x, ACS_HLINE, portx); if (scrollers && (pxmax > portx - 1)) { int length = (portx - top_x - 1); float ratio = ((float) length) / ((float) pxmax); lowend = (int) ((float) top_x + ((float) basex * ratio)); highend = (int) ((float) top_x + ((float) (basex + length) * ratio)); do_h_line(porty - 1, top_x, ACS_HLINE, lowend); if (highend < portx) { attron(A_REVERSE); do_h_line(porty - 1, lowend, ' ', highend + 1); attroff(A_REVERSE); do_h_line(porty - 1, highend + 1, ACS_HLINE, portx); } } else do_h_line(porty - 1, top_x, ACS_HLINE, portx); if (scrollers && (pymax > porty - 1)) { int length = (porty - top_y - 1); float ratio = ((float) length) / ((float) pymax); lowend = (int) ((float) top_y + ((float) basey * ratio)); highend = (int) ((float) top_y + ((float) (basey + length) * ratio)); do_v_line(top_y, portx - 1, ACS_VLINE, lowend); if (highend < porty) { attron(A_REVERSE); do_v_line(lowend, portx - 1, ' ', highend + 1); attroff(A_REVERSE); do_v_line(highend + 1, portx - 1, ACS_VLINE, porty); } } else do_v_line(top_y, portx - 1, ACS_VLINE, porty); MvAddCh(top_y - 1, portx - 1, ACS_URCORNER); MvAddCh(porty - 1, top_x - 1, ACS_LLCORNER); MvAddCh(porty - 1, portx - 1, ACS_LRCORNER); if (!pending_pan) { #if HAVE_GETTIMEOFDAY gettimeofday(&before, 0); #endif wnoutrefresh(stdscr); pnoutrefresh(pad, basey, basex, top_y, top_x, porty - (pxmax > portx) - 1, portx - (pymax > porty) - 1); doupdate(); #if HAVE_GETTIMEOFDAY #define TIMEVAL2S(data) ((double) data.tv_sec + ((double) data.tv_usec / 1.0e6)) if (timing) { double elapsed; gettimeofday(&after, 0); elapsed = (TIMEVAL2S(after) - TIMEVAL2S(before)); move(LINES - 1, COLS - 12); printw("Secs: %2.03f", elapsed); refresh(); } #endif } } while ((c = pgetc(pad)) != KEY_EXIT); scrollok(stdscr, TRUE); /* reset to driver's default */ } static int padgetch(WINDOW *win) { static int count; static int last; int c; if ((pending_pan = (count > 0)) != FALSE) { count--; pending_pan = (count != 0); } else { for (;;) { switch (c = wGetchar(win)) { case '!': ShellOut(FALSE); /* FALLTHRU */ case CTRL('r'): endwin(); refresh(); c = KEY_REFRESH; break; case CTRL('l'): c = KEY_REFRESH; break; case 'U': c = KEY_UP; break; case 'D': c = KEY_DOWN; break; case 'R': c = KEY_RIGHT; break; case 'L': c = KEY_LEFT; break; case '+': c = KEY_IL; break; case '-': c = KEY_DL; break; case '>': c = KEY_IC; break; case '<': c = KEY_DC; break; case ERR: /* FALLTHRU */ case case_QUIT: count = 0; c = KEY_EXIT; break; default: if (c >= '0' && c <= '9') { count = count * 10 + (c - '0'); continue; } break; } last = c; break; } if (count > 0) count--; } return (last); } #define PAD_HIGH 200 #define PAD_WIDE 200 static void demo_pad(bool colored) /* Demonstrate pads. */ { WINDOW *panpad = newpad(PAD_HIGH, PAD_WIDE); if (panpad == 0) { Cannot("cannot create requested pad"); return; } #ifdef A_COLOR if (colored && use_colors) { init_pair(1, COLOR_BLACK, COLOR_GREEN); init_pair(2, COLOR_CYAN, COLOR_BLUE); wbkgd(panpad, (chtype) (COLOR_PAIR(2) | ' ')); } #endif fill_pad(panpad, FALSE, colored); panner_legend(LINES - 4); panner_legend(LINES - 3); panner_legend(LINES - 2); panner_legend(LINES - 1); keypad(panpad, TRUE); /* Make the pad (initially) narrow enough that a trace file won't wrap. * We'll still be able to widen it during a test, since that's required * for testing boundaries. */ panner(panpad, 2, 2, LINES - 5, COLS - 15, padgetch, colored); delwin(panpad); endwin(); erase(); } /**************************************************************************** * * Tests from John Burnell's PDCurses tester * ****************************************************************************/ static void Continue(WINDOW *win) { noecho(); wmove(win, 10, 1); MvWAddStr(win, 10, 1, " Press any key to continue"); wrefresh(win); wGetchar(win); } static void flushinp_test(WINDOW *win) /* Input test, adapted from John Burnell's PDCurses tester */ { int w, h, bx, by, sw, sh, i; WINDOW *subWin; wclear(win); getmaxyx(win, h, w); getbegyx(win, by, bx); sw = w / 3; sh = h / 3; if ((subWin = subwin(win, sh, sw, by + h - sh - 2, bx + w - sw - 2)) == 0) return; #ifdef A_COLOR if (use_colors) { init_pair(2, COLOR_CYAN, COLOR_BLUE); wbkgd(subWin, (chtype) (COLOR_PAIR(2) | ' ')); } #endif (void) wattrset(subWin, A_BOLD); box(subWin, ACS_VLINE, ACS_HLINE); MvWAddStr(subWin, 2, 1, "This is a subwindow"); wrefresh(win); /* * This used to set 'nocbreak()'. However, Alexander Lukyanov says that * it only happened to "work" on SVr4 because that implementation does not * emulate nocbreak+noecho mode, whereas ncurses does. To get the desired * test behavior, we're using 'cbreak()', which will allow a single * character to return without needing a newline. - T.Dickey 1997/10/11. */ cbreak(); MvWAddStr(win, 0, 1, "This is a test of the flushinp() call."); MvWAddStr(win, 2, 1, "Type random keys for 5 seconds."); MvWAddStr(win, 3, 1, "These should be discarded (not echoed) after the subwindow goes away."); wrefresh(win); for (i = 0; i < 5; i++) { MvWPrintw(subWin, 1, 1, "Time = %d", i); wrefresh(subWin); napms(1000); flushinp(); } delwin(subWin); werase(win); flash(); wrefresh(win); napms(1000); MvWAddStr(win, 2, 1, "If you were still typing when the window timer expired,"); MvWAddStr(win, 3, 1, "or else you typed nothing at all while it was running,"); MvWAddStr(win, 4, 1, "test was invalid. You'll see garbage or nothing at all. "); MvWAddStr(win, 6, 1, "Press a key"); wmove(win, 9, 10); wrefresh(win); echo(); wGetchar(win); flushinp(); MvWAddStr(win, 12, 0, "If you see any key other than what you typed, flushinp() is broken."); Continue(win); wmove(win, 9, 10); wdelch(win); wrefresh(win); wmove(win, 12, 0); clrtoeol(); waddstr(win, "What you typed should now have been deleted; if not, wdelch() failed."); Continue(win); cbreak(); } /**************************************************************************** * * Menu test * ****************************************************************************/ #if USE_LIBMENU #define MENU_Y 8 #define MENU_X 8 static int menu_virtualize(int c) { if (c == '\n' || c == KEY_EXIT) return (MAX_COMMAND + 1); else if (c == 'u') return (REQ_SCR_ULINE); else if (c == 'd') return (REQ_SCR_DLINE); else if (c == 'b' || c == KEY_NPAGE) return (REQ_SCR_UPAGE); else if (c == 'f' || c == KEY_PPAGE) return (REQ_SCR_DPAGE); else if (c == 'n' || c == KEY_DOWN) return (REQ_NEXT_ITEM); else if (c == 'p' || c == KEY_UP) return (REQ_PREV_ITEM); else if (c == ' ') return (REQ_TOGGLE_ITEM); else { if (c != KEY_MOUSE) beep(); return (c); } } static CONST_MENUS char *animals[] = { "Lions", "Tigers", "Bears", "(Oh my!)", "Newts", "Platypi", "Lemurs", "(Oh really?!)", "Leopards", "Panthers", "Pumas", "Lions, Tigers, Bears, (Oh my!), Newts, Platypi, Lemurs", "Lions, Tigers, Bears, (Oh my!), Newts, Platypi, Lemurs, Lions, Tigers, Bears, (Oh my!), Newts, Platypi, Lemurs", (char *) 0 }; static void menu_test(void) { MENU *m; ITEM *items[SIZEOF(animals)]; ITEM **ip = items; CONST_MENUS char **ap; int mrows, mcols, c; WINDOW *menuwin; #ifdef NCURSES_MOUSE_VERSION mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0); #endif MvAddStr(0, 0, "This is the menu test:"); MvAddStr(2, 0, " Use up and down arrow to move the select bar."); MvAddStr(3, 0, " 'n' and 'p' act like arrows."); MvAddStr(4, 0, " 'b' and 'f' scroll up/down (page), 'u' and 'd' (line)."); MvAddStr(5, 0, " Press return to exit."); refresh(); for (ap = animals; *ap; ap++) { if ((*ip = new_item(*ap, "")) != 0) ++ip; } *ip = (ITEM *) 0; m = new_menu(items); set_menu_format(m, (SIZEOF(animals) + 1) / 2, 1); scale_menu(m, &mrows, &mcols); menuwin = newwin(mrows + 2, mcols + 2, MENU_Y, MENU_X); set_menu_win(m, menuwin); keypad(menuwin, TRUE); box(menuwin, 0, 0); set_menu_sub(m, derwin(menuwin, mrows, mcols, 1, 1)); post_menu(m); while ((c = menu_driver(m, menu_virtualize(wGetchar(menuwin)))) != E_UNKNOWN_COMMAND) { if (c == E_NOT_POSTED) break; if (c == E_REQUEST_DENIED) beep(); continue; } MvPrintw(LINES - 2, 0, "You chose: %s\n", item_name(current_item(m))); (void) addstr("Press any key to continue..."); wGetchar(stdscr); unpost_menu(m); delwin(menuwin); free_menu(m); for (ip = items; *ip; ip++) free_item(*ip); #ifdef NCURSES_MOUSE_VERSION mousemask(0, (mmask_t *) 0); #endif } #ifdef TRACE #define T_TBL(name) { #name, name } static struct { const char *name; unsigned mask; } t_tbl[] = { T_TBL(TRACE_DISABLE), T_TBL(TRACE_TIMES), T_TBL(TRACE_TPUTS), T_TBL(TRACE_UPDATE), T_TBL(TRACE_MOVE), T_TBL(TRACE_CHARPUT), T_TBL(TRACE_ORDINARY), T_TBL(TRACE_CALLS), T_TBL(TRACE_VIRTPUT), T_TBL(TRACE_IEVENT), T_TBL(TRACE_BITS), T_TBL(TRACE_ICALLS), T_TBL(TRACE_CCALLS), T_TBL(TRACE_DATABASE), T_TBL(TRACE_ATTRS), T_TBL(TRACE_MAXIMUM), { (char *) 0, 0 } }; static char * tracetrace(unsigned tlevel) { static char *buf; int n; if (buf == 0) { size_t need = 12; for (n = 0; t_tbl[n].name != 0; n++) need += strlen(t_tbl[n].name) + 2; buf = typeMalloc(char, need); if (!buf) failed("tracetrace"); } sprintf(buf, "0x%02x = {", tlevel); if (tlevel == 0) { sprintf(buf + strlen(buf), "%s, ", t_tbl[0].name); } else { for (n = 1; t_tbl[n].name != 0; n++) if ((tlevel & t_tbl[n].mask) == t_tbl[n].mask) { strcat(buf, t_tbl[n].name); strcat(buf, ", "); } } if (buf[strlen(buf) - 2] == ',') buf[strlen(buf) - 2] = '\0'; return (strcat(buf, "}")); } /* fake a dynamically reconfigurable menu using the 0th entry to deselect * the others */ static int run_trace_menu(MENU * m) { ITEM **items; ITEM *i, **p; for (;;) { bool changed = FALSE; switch (menu_driver(m, menu_virtualize(wGetchar(menu_win(m))))) { case E_UNKNOWN_COMMAND: return FALSE; default: items = menu_items(m); i = current_item(m); if (i == items[0]) { if (item_value(i)) { for (p = items + 1; *p != 0; p++) if (item_value(*p)) { set_item_value(*p, FALSE); changed = TRUE; } } } else { for (p = items + 1; *p != 0; p++) if (item_value(*p)) { set_item_value(items[0], FALSE); changed = TRUE; break; } } if (!changed) return TRUE; } } } static void trace_set(void) /* interactively set the trace level */ { MENU *m; ITEM *items[SIZEOF(t_tbl)]; ITEM **ip = items; int mrows, mcols; unsigned newtrace; int n; WINDOW *menuwin; MvAddStr(0, 0, "Interactively set trace level:"); MvAddStr(2, 0, " Press space bar to toggle a selection."); MvAddStr(3, 0, " Use up and down arrow to move the select bar."); MvAddStr(4, 0, " Press return to set the trace level."); MvPrintw(6, 0, "(Current trace level is %s)", tracetrace(_nc_tracing)); refresh(); for (n = 0; t_tbl[n].name != 0; n++) { if ((*ip = new_item(t_tbl[n].name, "")) != 0) { ++ip; } } *ip = (ITEM *) 0; m = new_menu(items); set_menu_format(m, 0, 2); scale_menu(m, &mrows, &mcols); menu_opts_off(m, O_ONEVALUE); menuwin = newwin(mrows + 2, mcols + 2, MENU_Y, MENU_X); set_menu_win(m, menuwin); keypad(menuwin, TRUE); box(menuwin, 0, 0); set_menu_sub(m, derwin(menuwin, mrows, mcols, 1, 1)); post_menu(m); for (ip = menu_items(m); *ip; ip++) { unsigned mask = t_tbl[item_index(*ip)].mask; if (mask == 0) set_item_value(*ip, _nc_tracing == 0); else if ((mask & _nc_tracing) == mask) set_item_value(*ip, TRUE); } while (run_trace_menu(m)) continue; newtrace = 0; for (ip = menu_items(m); *ip; ip++) if (item_value(*ip)) newtrace |= t_tbl[item_index(*ip)].mask; trace(newtrace); Trace(("trace level interactively set to %s", tracetrace(_nc_tracing))); MvPrintw(LINES - 2, 0, "Trace level is %s\n", tracetrace(_nc_tracing)); (void) addstr("Press any key to continue..."); wGetchar(stdscr); unpost_menu(m); delwin(menuwin); free_menu(m); for (ip = items; *ip; ip++) free_item(*ip); } #endif /* TRACE */ #endif /* USE_LIBMENU */ /**************************************************************************** * * Forms test * ****************************************************************************/ #if USE_LIBFORM static FIELD * make_label(int frow, int fcol, NCURSES_CONST char *label) { FIELD *f = new_field(1, (int) strlen(label), frow, fcol, 0, 0); if (f) { set_field_buffer(f, 0, label); set_field_opts(f, (int) ((unsigned) field_opts(f) & ~O_ACTIVE)); } return (f); } static FIELD * make_field(int frow, int fcol, int rows, int cols, bool secure) { FIELD *f = new_field(rows, cols, frow, fcol, 0, secure ? 1 : 0); if (f) { set_field_back(f, A_UNDERLINE); set_field_userptr(f, (void *) 0); } return (f); } static void display_form(FORM * f) { WINDOW *w; int rows, cols; scale_form(f, &rows, &cols); if ((w = newwin(rows + 2, cols + 4, 0, 0)) != (WINDOW *) 0) { set_form_win(f, w); set_form_sub(f, derwin(w, rows, cols, 1, 2)); box(w, 0, 0); keypad(w, TRUE); if (post_form(f) != E_OK) wrefresh(w); } } static void erase_form(FORM * f) { WINDOW *w = form_win(f); WINDOW *s = form_sub(f); unpost_form(f); werase(w); wrefresh(w); delwin(s); delwin(w); } static int edit_secure(FIELD * me, int c) { int rows, cols, frow, fcol, nrow, nbuf; if (field_info(me, &rows, &cols, &frow, &fcol, &nrow, &nbuf) == E_OK && nbuf > 0) { char *source = field_buffer(me, 1); size_t have = (source ? strlen(source) : 0) + 1; size_t need = 80 + have; char *temp = malloc(need); size_t len; if (temp != 0) { strncpy(temp, source ? source : "", have + 1); len = (size_t) (char *) field_userptr(me); if (c <= KEY_MAX) { if (isgraph(c) && (len + 1) < sizeof(temp)) { temp[len++] = (char) c; temp[len] = 0; set_field_buffer(me, 1, temp); c = '*'; } else { c = 0; } } else { switch (c) { case REQ_BEG_FIELD: case REQ_CLR_EOF: case REQ_CLR_EOL: case REQ_DEL_LINE: case REQ_DEL_WORD: case REQ_DOWN_CHAR: case REQ_END_FIELD: case REQ_INS_CHAR: case REQ_INS_LINE: case REQ_LEFT_CHAR: case REQ_NEW_LINE: case REQ_NEXT_WORD: case REQ_PREV_WORD: case REQ_RIGHT_CHAR: case REQ_UP_CHAR: c = 0; /* we don't want to do inline editing */ break; case REQ_CLR_FIELD: if (len) { temp[0] = 0; set_field_buffer(me, 1, temp); } break; case REQ_DEL_CHAR: case REQ_DEL_PREV: if (len) { temp[--len] = 0; set_field_buffer(me, 1, temp); } break; } } set_field_userptr(me, (void *) len); free(temp); } } return c; } static int form_virtualize(FORM * f, WINDOW *w) { /* *INDENT-OFF* */ static const struct { int code; int result; } lookup[] = { { CTRL('A'), REQ_NEXT_CHOICE }, { CTRL('B'), REQ_PREV_WORD }, { CTRL('C'), REQ_CLR_EOL }, { CTRL('D'), REQ_DOWN_FIELD }, { CTRL('E'), REQ_END_FIELD }, { CTRL('F'), REQ_NEXT_PAGE }, { CTRL('G'), REQ_DEL_WORD }, { CTRL('H'), REQ_DEL_PREV }, { CTRL('I'), REQ_INS_CHAR }, { CTRL('K'), REQ_CLR_EOF }, { CTRL('L'), REQ_LEFT_FIELD }, { CTRL('M'), REQ_NEW_LINE }, { CTRL('N'), REQ_NEXT_FIELD }, { CTRL('O'), REQ_INS_LINE }, { CTRL('P'), REQ_PREV_FIELD }, { CTRL('R'), REQ_RIGHT_FIELD }, { CTRL('S'), REQ_BEG_FIELD }, { CTRL('U'), REQ_UP_FIELD }, { CTRL('V'), REQ_DEL_CHAR }, { CTRL('W'), REQ_NEXT_WORD }, { CTRL('X'), REQ_CLR_FIELD }, { CTRL('Y'), REQ_DEL_LINE }, { CTRL('Z'), REQ_PREV_CHOICE }, { ESCAPE, MAX_FORM_COMMAND + 1 }, { KEY_BACKSPACE, REQ_DEL_PREV }, { KEY_DOWN, REQ_DOWN_CHAR }, { KEY_END, REQ_LAST_FIELD }, { KEY_HOME, REQ_FIRST_FIELD }, { KEY_LEFT, REQ_LEFT_CHAR }, { KEY_LL, REQ_LAST_FIELD }, { KEY_NEXT, REQ_NEXT_FIELD }, { KEY_NPAGE, REQ_NEXT_PAGE }, { KEY_PPAGE, REQ_PREV_PAGE }, { KEY_PREVIOUS, REQ_PREV_FIELD }, { KEY_RIGHT, REQ_RIGHT_CHAR }, { KEY_UP, REQ_UP_CHAR }, { QUIT, MAX_FORM_COMMAND + 1 } }; /* *INDENT-ON* */ static int mode = REQ_INS_MODE; int c = wGetchar(w); unsigned n; FIELD *me = current_field(f); bool current = TRUE; if (c == CTRL(']')) { if (mode == REQ_INS_MODE) { mode = REQ_OVL_MODE; } else { mode = REQ_INS_MODE; } c = mode; } else { for (n = 0; n < SIZEOF(lookup); n++) { if (lookup[n].code == c) { c = lookup[n].result; break; } } } MvPrintw(0, COLS - 6, "(%s)", mode == REQ_INS_MODE ? "INS" : "OVL"); /* * Force the field that the user is typing into to be in reverse video, * while the other fields are shown underlined. */ switch (c) { case REQ_BEG_FIELD: case REQ_CLR_EOF: case REQ_CLR_EOL: case REQ_CLR_FIELD: case REQ_DEL_CHAR: case REQ_DEL_LINE: case REQ_DEL_PREV: case REQ_DEL_WORD: case REQ_END_FIELD: case REQ_INS_CHAR: case REQ_INS_LINE: case REQ_LEFT_CHAR: case REQ_LEFT_FIELD: case REQ_NEXT_WORD: case REQ_RIGHT_CHAR: current = TRUE; break; default: current = (c < KEY_MAX); break; } if (current) { c = edit_secure(me, c); set_field_back(me, A_REVERSE); } else { c = edit_secure(me, c); set_field_back(me, A_UNDERLINE); } return c; } static int my_form_driver(FORM * form, int c) { if (c == (MAX_FORM_COMMAND + 1) && form_driver(form, REQ_VALIDATION) == E_OK) return (TRUE); else { beep(); return (FALSE); } } #ifdef NCURSES_VERSION #define FIELDCHECK_CB(func) bool func(FIELD * fld, const void * data GCC_UNUSED) #define CHAR_CHECK_CB(func) bool func(int ch, const void *data GCC_UNUSED) #else #define FIELDCHECK_CB(func) int func(FIELD * fld, char * data GCC_UNUSED) #define CHAR_CHECK_CB(func) int func(int ch, char *data GCC_UNUSED) #endif /* * Allow a middle initial, optionally with a '.' to end it. */ static FIELDCHECK_CB(mi_field_check) { char *s = field_buffer(fld, 0); int state = 0; int n; for (n = 0; s[n] != '\0'; ++n) { switch (state) { case 0: if (s[n] == '.') { if (n != 1) return FALSE; state = 2; } else if (isspace(UChar(s[n]))) { state = 2; } break; case 2: if (!isspace(UChar(s[n]))) return FALSE; break; } } /* force the form to display a leading capital */ if (islower(UChar(s[0]))) { s[0] = (char) toupper(UChar(s[0])); set_field_buffer(fld, 0, s); } return TRUE; } static CHAR_CHECK_CB(mi_char_check) { return ((isalpha(ch) || ch == '.') ? TRUE : FALSE); } /* * Passwords should be at least 6 characters. */ static FIELDCHECK_CB(pw_field_check) { char *s = field_buffer(fld, 0); int n; for (n = 0; s[n] != '\0'; ++n) { if (isspace(UChar(s[n]))) { if (n < 6) return FALSE; } } return TRUE; } static CHAR_CHECK_CB(pw_char_check) { return (isgraph(ch) ? TRUE : FALSE); } static void demo_forms(void) { WINDOW *w; FORM *form; FIELD *f[12], *secure; FIELDTYPE *fty_middle = new_fieldtype(mi_field_check, mi_char_check); FIELDTYPE *fty_passwd = new_fieldtype(pw_field_check, pw_char_check); int finished = 0, c; unsigned n = 0; #ifdef NCURSES_MOUSE_VERSION mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0); #endif move(18, 0); addstr("Defined edit/traversal keys: ^Q/ESC- exit form\n"); addstr("^N -- go to next field ^P -- go to previous field\n"); addstr("Home -- go to first field End -- go to last field\n"); addstr("^L -- go to field to left ^R -- go to field to right\n"); addstr("^U -- move upward to field ^D -- move downward to field\n"); addstr("^W -- go to next word ^B -- go to previous word\n"); addstr("^S -- go to start of field ^E -- go to end of field\n"); addstr("^H -- delete previous char ^Y -- delete line\n"); addstr("^G -- delete current word ^C -- clear to end of line\n"); addstr("^K -- clear to end of field ^X -- clear field\n"); addstr("Arrow keys move within a field as you would expect. ^] toggles overlay mode."); MvAddStr(4, 57, "Forms Entry Test"); refresh(); /* describe the form */ memset(f, 0, sizeof(f)); f[n++] = make_label(0, 15, "Sample Form"); f[n++] = make_label(2, 0, "Last Name"); f[n++] = make_field(3, 0, 1, 18, FALSE); set_field_type(f[n - 1], TYPE_ALPHA, 1); f[n++] = make_label(2, 20, "First Name"); f[n++] = make_field(3, 20, 1, 12, FALSE); set_field_type(f[n - 1], TYPE_ALPHA, 1); f[n++] = make_label(2, 34, "Middle Name"); f[n++] = make_field(3, 34, 1, 12, FALSE); set_field_type(f[n - 1], fty_middle); f[n++] = make_label(5, 0, "Comments"); f[n++] = make_field(6, 0, 4, 46, FALSE); f[n++] = make_label(5, 20, "Password:"); secure = f[n++] = make_field(5, 30, 1, 9, TRUE); set_field_type(f[n - 1], fty_passwd); f[n] = (FIELD *) 0; if ((form = new_form(f)) != 0) { display_form(form); w = form_win(form); raw(); nonl(); /* lets us read ^M's */ while (!finished) { switch (form_driver(form, c = form_virtualize(form, w))) { case E_OK: MvAddStr(5, 57, field_buffer(secure, 1)); clrtoeol(); refresh(); break; case E_UNKNOWN_COMMAND: finished = my_form_driver(form, c); break; default: beep(); break; } } erase_form(form); free_form(form); } for (c = 0; f[c] != 0; c++) free_field(f[c]); free_fieldtype(fty_middle); free_fieldtype(fty_passwd); noraw(); nl(); #ifdef NCURSES_MOUSE_VERSION mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0); #endif } #endif /* USE_LIBFORM */ /**************************************************************************** * * Overlap test * ****************************************************************************/ static void fillwin(WINDOW *win, char ch) { int y, x; int y1, x1; getmaxyx(win, y1, x1); for (y = 0; y < y1; y++) { wmove(win, y, 0); for (x = 0; x < x1; x++) waddch(win, UChar(ch)); } } static void crosswin(WINDOW *win, char ch) { int y, x; int y1, x1; getmaxyx(win, y1, x1); for (y = 0; y < y1; y++) { for (x = 0; x < x1; x++) if (((x > (x1 - 1) / 3) && (x <= (2 * (x1 - 1)) / 3)) || (((y > (y1 - 1) / 3) && (y <= (2 * (y1 - 1)) / 3)))) { wmove(win, y, x); waddch(win, UChar(ch)); } } } #define OVERLAP_FLAVORS 5 static void overlap_helpitem(int state, int item, char *message) { int row = (item / 2); int col = ((item % 2) ? COLS / 2 : 0); move(LINES - 6 + row, col); printw("%c%c = %s", state == row ? '>' : ' ', 'a' + item, message); clrtoeol(); } static void overlap_test_1_attr(WINDOW *win, int flavor, int col) { NCURSES_PAIRS_T cpair = (NCURSES_PAIRS_T) (1 + (flavor * 2) + col); switch (flavor) { case 0: (void) wattrset(win, A_NORMAL); break; case 1: (void) wattrset(win, A_BOLD); break; case 2: init_pair(cpair, COLOR_BLUE, COLOR_WHITE); (void) wattrset(win, AttrArg(COLOR_PAIR(cpair), A_NORMAL)); break; case 3: init_pair(cpair, COLOR_WHITE, COLOR_BLUE); (void) wattrset(win, AttrArg(COLOR_PAIR(cpair), A_BOLD)); break; } } static void overlap_test_2_attr(WINDOW *win, int flavor, int col) { NCURSES_PAIRS_T cpair = (NCURSES_PAIRS_T) (9 + (flavor * 2) + col); switch (flavor) { case 0: /* no effect */ break; case 1: /* no effect */ break; case 2: init_pair(cpair, COLOR_RED, COLOR_GREEN); wbkgdset(win, colored_chtype(' ', A_BLINK, cpair)); break; case 3: wbkgdset(win, ' ' | A_NORMAL); break; } } static int overlap_help(int state, int flavors[OVERLAP_FLAVORS]) { int row; int col; int item; const char *ths, *tht; char msg[80]; if (state < 0) state += OVERLAP_FLAVORS; state = state % OVERLAP_FLAVORS; assert(state >= 0 && state < OVERLAP_FLAVORS); for (item = 0; item < (2 * OVERLAP_FLAVORS); ++item) { row = item / 2; col = item % 2; ths = col ? "B" : "A"; tht = col ? "A" : "B"; switch (row) { case 0: flavors[row] = 0; sprintf(msg, "refresh %s, then %s, then doupdate.", ths, tht); break; case 1: if (use_colors) { flavors[row] %= 4; } else { flavors[row] %= 2; } overlap_test_1_attr(stdscr, flavors[row], col); sprintf(msg, "fill window %s with letter %s.", ths, ths); break; case 2: if (use_colors) { flavors[row] %= 4; } else { flavors[row] %= 2; } switch (flavors[row]) { case 0: sprintf(msg, "cross pattern in window %s.", ths); break; case 1: sprintf(msg, "draw box in window %s.", ths); break; case 2: sprintf(msg, "set background of window %s.", ths); break; case 3: sprintf(msg, "reset background of window %s.", ths); break; } break; case 3: flavors[row] = 0; sprintf(msg, "clear window %s.", ths); break; case 4: flavors[row] %= 4; switch (flavors[row]) { case 0: sprintf(msg, "overwrite %s onto %s.", ths, tht); break; case 1: sprintf(msg, "copywin(FALSE) %s onto %s.", ths, tht); break; case 2: sprintf(msg, "copywin(TRUE) %s onto %s.", ths, tht); break; case 3: sprintf(msg, "overlay %s onto %s.", ths, tht); break; } break; } overlap_helpitem(state, item, msg); (void) wattrset(stdscr, A_NORMAL); wbkgdset(stdscr, ' ' | A_NORMAL); } move(LINES - 1, 0); printw("^Q/ESC = terminate test. Up/down/space select test variations (%d %d).", state, flavors[state]); return state; } static void overlap_test_0(WINDOW *a, WINDOW *b) { touchwin(a); touchwin(b); wnoutrefresh(a); wnoutrefresh(b); doupdate(); } static void overlap_test_1(int flavor, int col, WINDOW *a, char fill) { overlap_test_1_attr(a, flavor, col); fillwin(a, fill); (void) wattrset(a, A_NORMAL); } static void overlap_test_2(int flavor, int col, WINDOW *a, char fill) { overlap_test_2_attr(a, flavor, col); switch (flavor) { case 0: crosswin(a, fill); break; case 1: box(a, 0, 0); break; case 2: /* done in overlap_test_2_attr */ break; case 3: /* done in overlap_test_2_attr */ break; } } static void overlap_test_3(WINDOW *a) { wclear(a); wmove(a, 0, 0); } static void overlap_test_4(int flavor, WINDOW *a, WINDOW *b) { switch (flavor) { case 0: overwrite(a, b); break; case 1: copywin(a, b, 0, 0, 0, 0, getmaxy(b), getmaxx(b), FALSE); break; case 2: copywin(a, b, 0, 0, 0, 0, getmaxy(b), getmaxx(b), TRUE); break; case 3: overlay(a, b); break; } } /* test effects of overlapping windows */ static void overlap_test(void) { int ch; int state, flavor[OVERLAP_FLAVORS]; WINDOW *win1 = newwin(9, 20, 3, 3); WINDOW *win2 = newwin(9, 20, 9, 16); curs_set(0); raw(); refresh(); move(0, 0); printw("This test shows the behavior of wnoutrefresh() with respect to\n"); printw("the shared region of two overlapping windows A and B. The cross\n"); printw("pattern in each window does not overlap the other.\n"); memset(flavor, 0, sizeof(flavor)); state = overlap_help(0, flavor); while (!isQuit(ch = Getchar())) switch (ch) { case 'a': /* refresh window A first, then B */ overlap_test_0(win1, win2); break; case 'b': /* refresh window B first, then A */ overlap_test_0(win2, win1); break; case 'c': /* fill window A so it's visible */ overlap_test_1(flavor[1], 0, win1, 'A'); break; case 'd': /* fill window B so it's visible */ overlap_test_1(flavor[1], 1, win2, 'B'); break; case 'e': /* cross test pattern in window A */ overlap_test_2(flavor[2], 0, win1, 'A'); break; case 'f': /* cross test pattern in window A */ overlap_test_2(flavor[2], 1, win2, 'B'); break; case 'g': /* clear window A */ overlap_test_3(win1); break; case 'h': /* clear window B */ overlap_test_3(win2); break; case 'i': /* overwrite A onto B */ overlap_test_4(flavor[4], win1, win2); break; case 'j': /* overwrite B onto A */ overlap_test_4(flavor[4], win2, win1); break; case CTRL('n'): case KEY_DOWN: state = overlap_help(state + 1, flavor); break; case CTRL('p'): case KEY_UP: state = overlap_help(state - 1, flavor); break; case ' ': flavor[state] += 1; state = overlap_help(state, flavor); break; case '?': state = overlap_help(state, flavor); break; default: beep(); break; } delwin(win2); delwin(win1); erase(); curs_set(1); endwin(); } /**************************************************************************** * * Main sequence * ****************************************************************************/ static bool do_single_test(const char c) /* perform a single specified test */ { switch (c) { case 'a': getch_test(); break; #if USE_WIDEC_SUPPORT case 'A': get_wch_test(); break; #endif case 'b': attr_test(); break; #if USE_WIDEC_SUPPORT case 'B': wide_attr_test(); break; #endif case 'c': if (!use_colors) Cannot("does not support color."); else color_test(); break; #if USE_WIDEC_SUPPORT case 'C': if (!use_colors) Cannot("does not support color."); else wide_color_test(); break; #endif case 'd': if (!use_colors) Cannot("does not support color."); else if (!can_change_color()) Cannot("has hardwired color values."); else color_edit(); break; #if USE_SOFTKEYS case 'e': slk_test(); break; #if USE_WIDEC_SUPPORT case 'E': wide_slk_test(); break; #endif #endif case 'f': acs_display(); break; #if USE_WIDEC_SUPPORT case 'F': wide_acs_display(); break; #endif #if USE_LIBPANEL case 'o': demo_panels(init_panel, fill_panel); break; #endif #if USE_WIDEC_SUPPORT && USE_LIBPANEL case 'O': demo_panels(init_wide_panel, fill_wide_panel); break; #endif case 'g': acs_and_scroll(); break; case 'i': flushinp_test(stdscr); break; case 'k': test_sgr_attributes(); break; #if USE_LIBMENU case 'm': menu_test(); break; #endif case 'p': demo_pad(FALSE); break; case 'P': demo_pad(TRUE); break; #if USE_LIBFORM case 'r': demo_forms(); break; #endif case 's': overlap_test(); break; #if USE_LIBMENU && defined(TRACE) case 't': trace_set(); break; #endif case '?': break; default: return FALSE; } return TRUE; } static void usage(void) { static const char *const tbl[] = { "Usage: ncurses [options]" ,"" ,"Options:" #ifdef NCURSES_VERSION ," -a f,b set default-colors (assumed white-on-black)" ," -d use default-colors if terminal supports them" #endif #if HAVE_USE_ENV ," -E call use_env(FALSE) to ignore $LINES and $COLUMNS" #endif #if USE_SOFTKEYS ," -e fmt specify format for soft-keys test (e)" #endif #if HAVE_RIPOFFLINE ," -f rip-off footer line (can repeat)" ," -h rip-off header line (can repeat)" #endif ," -m do not use colors" ," -p file rgb values to use in 'd' rather than ncurses's builtin" #if USE_LIBPANEL ," -s msec specify nominal time for panel-demo (default: 1, to hold)" #endif #if defined(NCURSES_VERSION_PATCH) && (NCURSES_VERSION_PATCH >= 20120714) && !defined(__MINGW32__) ," -T call use_tioctl(TRUE) to allow SIGWINCH to override environment" #endif #ifdef TRACE ," -t mask specify default trace-level (may toggle with ^T)" #endif }; size_t n; for (n = 0; n < SIZEOF(tbl); n++) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } static void set_terminal_modes(void) { noraw(); cbreak(); noecho(); scrollok(stdscr, TRUE); idlok(stdscr, TRUE); keypad(stdscr, TRUE); } #ifdef SIGUSR1 static void announce_sig(int sig) { (void) fprintf(stderr, "Handled signal %d\r\n", sig); } #endif #if HAVE_RIPOFFLINE static int rip_footer(WINDOW *win, int cols) { wbkgd(win, A_REVERSE); werase(win); wmove(win, 0, 0); wprintw(win, "footer: window %p, %d columns", (void *) win, cols); wnoutrefresh(win); return OK; } static int rip_header(WINDOW *win, int cols) { wbkgd(win, A_REVERSE); werase(win); wmove(win, 0, 0); wprintw(win, "header: window %p, %d columns", (void *) win, cols); wnoutrefresh(win); return OK; } #endif /* HAVE_RIPOFFLINE */ static void main_menu(bool top) { char command; do { (void) puts("This is the ncurses main menu"); (void) puts("a = keyboard and mouse input test"); #if USE_WIDEC_SUPPORT (void) puts("A = wide-character keyboard and mouse input test"); #endif (void) puts("b = character attribute test"); #if USE_WIDEC_SUPPORT (void) puts("B = wide-character attribute test"); #endif (void) puts("c = color test pattern"); #if USE_WIDEC_SUPPORT (void) puts("C = color test pattern using wide-character calls"); #endif if (top) (void) puts("d = edit RGB color values"); #if USE_SOFTKEYS (void) puts("e = exercise soft keys"); #if USE_WIDEC_SUPPORT (void) puts("E = exercise soft keys using wide-characters"); #endif #endif (void) puts("f = display ACS characters"); #if USE_WIDEC_SUPPORT (void) puts("F = display Wide-ACS characters"); #endif (void) puts("g = display windows and scrolling"); (void) puts("i = test of flushinp()"); (void) puts("k = display character attributes"); #if USE_LIBMENU (void) puts("m = menu code test"); #endif #if USE_LIBPANEL (void) puts("o = exercise panels library"); #if USE_WIDEC_SUPPORT (void) puts("O = exercise panels with wide-characters"); #endif #endif (void) puts("p = exercise pad features"); (void) puts("P = exercise pad features, using color"); (void) puts("q = quit"); #if USE_LIBFORM (void) puts("r = exercise forms code"); #endif (void) puts("s = overlapping-refresh test"); #if USE_LIBMENU && defined(TRACE) (void) puts("t = set trace level"); #endif (void) puts("? = repeat this command summary"); (void) fputs("> ", stdout); (void) fflush(stdout); /* necessary under SVr4 curses */ /* * This used to be an 'fgets()' call (until 1996/10). However with * some runtime libraries, mixing stream I/O and 'read()' causes the * input stream to be flushed when switching between the two. */ command = 0; for (;;) { char ch = '\0'; if (read(fileno(stdin), &ch, (size_t) 1) <= 0) { if (command == 0) command = 'q'; break; } else if (command == 0 && !isspace(UChar(ch))) { command = ch; } else if (ch == '\n' || ch == '\r') { if ((command == 'd') && !top) { (void) fputs("Do not nest test-d\n", stdout); command = 0; } if (command != 0) break; (void) fputs("> ", stdout); (void) fflush(stdout); } } if (do_single_test(command)) { /* * This may be overkill; it's intended to reset everything back * to the initial terminal modes so that tests don't get in * each other's way. */ flushinp(); set_terminal_modes(); reset_prog_mode(); clear(); refresh(); endwin(); if (command == '?') { (void) puts("This is the ncurses capability tester."); (void) puts("You may select a test from the main menu by typing the"); (void) puts("key letter of the choice (the letter to left of the =)"); (void) puts("at the > prompt. Type `q' to exit."); } continue; } } while (command != 'q'); } /*+------------------------------------------------------------------------- main(argc,argv) --------------------------------------------------------------------------*/ #define okCOLOR(n) ((n) >= 0 && (n) < max_colors) #define okRGB(n) ((n) >= 0 && (n) <= 1000) int main(int argc, char *argv[]) { int c; int my_e_param = 1; #ifdef NCURSES_VERSION int default_fg = COLOR_WHITE; int default_bg = COLOR_BLACK; bool assumed_colors = FALSE; bool default_colors = FALSE; #endif char *palette_file = 0; bool monochrome = FALSE; setlocale(LC_ALL, ""); while ((c = getopt(argc, argv, "a:dEe:fhmp:s:Tt:")) != -1) { switch (c) { #ifdef NCURSES_VERSION case 'a': assumed_colors = TRUE; switch (sscanf(optarg, "%d,%d", &default_fg, &default_bg)) { case 0: default_fg = COLOR_WHITE; /* FALLTHRU */ case 1: default_bg = COLOR_BLACK; break; } break; case 'd': default_colors = TRUE; break; #endif #if HAVE_USE_ENV case 'E': use_env(FALSE); break; #endif case 'e': my_e_param = atoi(optarg); #ifdef NCURSES_VERSION if (my_e_param > 3) /* allow extended layouts */ usage(); #else if (my_e_param > 1) usage(); #endif break; #if HAVE_RIPOFFLINE case 'f': ripoffline(-1, rip_footer); break; case 'h': ripoffline(1, rip_header); break; #endif /* HAVE_RIPOFFLINE */ case 'm': monochrome = TRUE; break; case 'p': palette_file = optarg; break; #if USE_LIBPANEL case 's': nap_msec = (int) atol(optarg); break; #endif #if defined(NCURSES_VERSION_PATCH) && (NCURSES_VERSION_PATCH >= 20120714) && !defined(__MINGW32__) case 'T': use_tioctl(TRUE); break; #endif #ifdef TRACE case 't': save_trace = (unsigned) strtol(optarg, 0, 0); break; #endif default: usage(); } } /* * If there's no menus (unlikely for ncurses!), then we'll have to set * tracing on initially, just in case the user wants to test something that * doesn't involve wGetchar. */ #ifdef TRACE /* enable debugging */ #if !USE_LIBMENU trace(save_trace); #else if (!isatty(fileno(stdin))) trace(save_trace); #endif /* USE_LIBMENU */ #endif /* TRACE */ #if USE_SOFTKEYS /* tell it we're going to play with soft keys */ slk_init(my_e_param); #endif #ifdef SIGUSR1 /* set up null signal catcher so we can see what interrupts to getch do */ signal(SIGUSR1, announce_sig); #endif /* we must initialize the curses data structure only once */ initscr(); bkgdset(BLANK); /* tests, in general, will want these modes */ use_colors = (bool) (monochrome ? FALSE : has_colors()); if (use_colors) { start_color(); #ifdef NCURSES_VERSION_PATCH max_colors = COLORS; /* was > 16 ? 16 : COLORS */ #if HAVE_USE_DEFAULT_COLORS if (default_colors) { use_default_colors(); min_colors = -1; } #if HAVE_ASSUME_DEFAULT_COLORS if (assumed_colors) assume_default_colors(default_fg, default_bg); #endif #endif #else /* normal SVr4 curses */ max_colors = COLORS; /* was > 8 ? 8 : COLORS */ #endif max_pairs = COLOR_PAIRS; /* was > 256 ? 256 : COLOR_PAIRS */ if (can_change_color()) { NCURSES_PAIRS_T cp; all_colors = typeMalloc(RGB_DATA, (unsigned) max_colors); if (!all_colors) failed("all_colors"); for (cp = 0; cp < max_colors; ++cp) { color_content(cp, &all_colors[cp].red, &all_colors[cp].green, &all_colors[cp].blue); } if (palette_file != 0) { FILE *fp = fopen(palette_file, "r"); if (fp != 0) { char buffer[BUFSIZ]; int red, green, blue; int scale = 1000; while (fgets(buffer, sizeof(buffer), fp) != 0) { if (sscanf(buffer, "scale:%d", &c) == 1) { scale = c; } else if (sscanf(buffer, "%d:%d %d %d", &c, &red, &green, &blue) == 4 && okCOLOR(c) && okRGB(red) && okRGB(green) && okRGB(blue)) { #define Scaled(n) (NCURSES_COLOR_T) (((n) * 1000) / scale) all_colors[c].red = Scaled(red); all_colors[c].green = Scaled(green); all_colors[c].blue = Scaled(blue); } } fclose(fp); } } } } set_terminal_modes(); def_prog_mode(); /* * Return to terminal mode, so we're guaranteed of being able to * select terminal commands even if the capabilities are wrong. */ endwin(); #if HAVE_CURSES_VERSION (void) printf("Welcome to %s. Press ? for help.\n", curses_version()); #elif defined(NCURSES_VERSION_MAJOR) && defined(NCURSES_VERSION_MINOR) && defined(NCURSES_VERSION_PATCH) (void) printf("Welcome to ncurses %d.%d.%d. Press ? for help.\n", NCURSES_VERSION_MAJOR, NCURSES_VERSION_MINOR, NCURSES_VERSION_PATCH); #else (void) puts("Welcome to ncurses. Press ? for help."); #endif main_menu(TRUE); ExitProgram(EXIT_SUCCESS); } /* ncurses.c ends here */ ncurses-6.0-20160213/test/form_driver_w.c0000644000175100001440000001147612367217347016470 0ustar tomusers/**************************************************************************** * Copyright (c) 2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Gaute Hope, 2013 * ****************************************************************************/ /* * $Id: form_driver_w.c,v 1.13 2014/08/02 17:24:55 tom Exp $ * * Test form_driver_w (int, int, wchar_t), a wide char aware * replacement of form_driver. */ #include #include #if USE_WIDEC_SUPPORT && USE_LIBFORM && (defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH >= 20131207) #include int main(void) { FIELD *field[3]; FORM *my_form; bool done = FALSE; setlocale(LC_ALL, ""); /* Initialize curses */ initscr(); cbreak(); noecho(); keypad(stdscr, TRUE); /* Initialize the fields */ field[0] = new_field(1, 10, 4, 18, 0, 0); field[1] = new_field(1, 10, 6, 18, 0, 0); field[2] = NULL; /* Set field options */ set_field_back(field[0], A_UNDERLINE); /* Print a line for the option */ field_opts_off(field[0], O_AUTOSKIP); /* Don't go to next field when this */ /* Field is filled up */ set_field_back(field[1], A_UNDERLINE); field_opts_off(field[1], O_AUTOSKIP); /* Create the form and post it */ my_form = new_form(field); post_form(my_form); refresh(); mvprintw(4, 10, "Value 1:"); mvprintw(6, 10, "Value 2:"); refresh(); /* Loop through to get user requests */ while (!done) { wint_t ch; int ret = get_wch(&ch); mvprintw(8, 10, "Got %d (%#x), type: %s", (int) ch, (int) ch, (ret == KEY_CODE_YES) ? "KEY_CODE_YES" : ((ret == OK) ? "OK" : ((ret == ERR) ? "ERR" : "?"))); clrtoeol(); switch (ret) { case KEY_CODE_YES: switch (ch) { case KEY_DOWN: /* Go to next field */ form_driver_w(my_form, KEY_CODE_YES, REQ_NEXT_FIELD); /* Go to the end of the present buffer */ /* Leaves nicely at the last character */ form_driver_w(my_form, KEY_CODE_YES, REQ_END_LINE); break; case KEY_UP: /* Go to previous field */ form_driver_w(my_form, KEY_CODE_YES, REQ_PREV_FIELD); form_driver_w(my_form, KEY_CODE_YES, REQ_END_LINE); break; default: break; } break; case OK: switch (ch) { case CTRL('D'): case QUIT: case ESCAPE: done = TRUE; break; default: form_driver_w(my_form, OK, (wchar_t) ch); break; } break; } } /* Un post form and free the memory */ unpost_form(my_form); free_form(my_form); free_field(field[0]); free_field(field[1]); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the wide-ncurses and forms library\n"); ExitProgram(EXIT_FAILURE); } #endif /* USE_WIDEC_SUPPORT */ ncurses-6.0-20160213/test/configure.in0000644000175100001440000002505612606271725015764 0ustar tomusersdnl*************************************************************************** dnl Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * dnl * dnl Permission is hereby granted, free of charge, to any person obtaining a * dnl copy of this software and associated documentation files (the * dnl "Software"), to deal in the Software without restriction, including * dnl without limitation the rights to use, copy, modify, merge, publish, * dnl distribute, distribute with modifications, sublicense, and/or sell * dnl copies of the Software, and to permit persons to whom the Software is * dnl furnished to do so, subject to the following conditions: * dnl * dnl The above copyright notice and this permission notice shall be included * dnl in all copies or substantial portions of the Software. * dnl * dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. * dnl * dnl Except as contained in this notice, the name(s) of the above copyright * dnl holders shall not be used in advertising or otherwise to promote the * dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl dnl Author: Thomas E. Dickey 1996, etc. dnl dnl $Id: configure.in,v 1.125 2015/10/10 20:23:49 tom Exp $ dnl This is a simple configuration-script for the ncurses test programs that dnl allows the test-directory to be separately configured against a reference dnl system (i.e., sysvr4 curses) dnl dnl If you're configuring ncurses, you shouldn't need to use this script. dnl It's only for testing purposes. dnl dnl See http://invisible-island.net/autoconf/ for additional information. dnl --------------------------------------------------------------------------- AC_PREREQ(2.52.20030208) AC_INIT(ncurses.c) AC_CONFIG_HEADER(ncurses_cfg.h:ncurses_tst.hin) CF_INHERIT_SCRIPT(config.guess) CF_INHERIT_SCRIPT(config.sub) CF_CHECK_CACHE AC_ARG_PROGRAM AC_PROG_MAKE_SET CF_PROG_CC AC_PROG_CPP AC_PROG_AWK CF_PROG_INSTALL CF_PROG_LINT CF_MAKE_TAGS CF_MATH_LIB(MATH_LIB,pow(sin(x),x)) AC_SUBST(MATH_LIB) dnl Things that we don't need (or must override) if we're not building ncurses CF_TOP_BUILDDIR CC_G_OPT="-g" AC_SUBST(CC_G_OPT) CC_SHARED_OPTS=unknown AC_SUBST(CC_SHARED_OPTS) CPPFLAGS="$CPPFLAGS" AC_SUBST(CPPFLAGS) DFT_DEP_SUFFIX="" AC_SUBST(DFT_DEP_SUFFIX) DFT_OBJ_SUBDIR=`pwd|sed -e's:.*/::'` AC_SUBST(DFT_OBJ_SUBDIR) DFT_UPR_MODEL="NORMAL" AC_SUBST(DFT_UPR_MODEL) LD="ld" AC_SUBST(LD) LDFLAGS_SHARED="" AC_SUBST(LDFLAGS_SHARED) LDFLAGS_STATIC="" AC_SUBST(LDFLAGS_STATIC) LD_MODEL="" AC_SUBST(LD_MODEL) LD_SHARED_OPTS="" AC_SUBST(LD_SHARED_OPTS) LIBTOOL="" AC_SUBST(LIBTOOL) LIBTOOL_OPTS="" AC_SUBST(LIBTOOL_OPTS) LIB_CLEAN="" AC_SUBST(LIB_CLEAN) LIB_COMPILE="" AC_SUBST(LIB_COMPILE) LIB_LINK='${CC}' AC_SUBST(LIB_LINK) LINK_TESTS="" AC_SUBST(LINK_TESTS) LOCAL_LDFLAGS="" AC_SUBST(LOCAL_LDFLAGS) PACKAGE="ncurses-examples" AC_SUBST(PACKAGE) PTHREAD="-lm" AC_SUBST(PTHREAD) TEST_ARGS="" AC_SUBST(TEST_ARGS) TEST_DEPS="" AC_SUBST(TEST_DEPS) TEST_LIBS="" AC_SUBST(TEST_LIBS) TINFO_LDFLAGS='' AC_SUBST(TINFO_LDFLAGS) TINFO_LIBS='$(LIBS_CURSES)' AC_SUBST(TINFO_LIBS) cf_cv_abi_version="" AC_SUBST(cf_cv_abi_version) cf_cv_rel_version="" AC_SUBST(cf_cv_rel_version) includesubdir="" AC_SUBST(includesubdir) cf_cv_screen=curses cf_cv_libtype= AC_EXEEXT AC_OBJEXT CF_GCC_ATTRIBUTES CF_XOPEN_SOURCE CF_SIG_ATOMIC_T dnl --------------------------------------------------------------------------- CF_HELP_MESSAGE(General Options:) CF_PKG_CONFIG CF_DISABLE_ECHO dnl --------------------------------------------------------------------------- CF_HELP_MESSAGE(Curses Version-dependent Options:) CF_NCURSES_WRAP_PREFIX AC_MSG_CHECKING(if you want to check for wide-character functions) CF_ARG_DISABLE(widec, [ --disable-widec disable checks for wide-character functions], cf_enable_widec=no, cf_enable_widec=yes, yes) AC_MSG_RESULT($cf_enable_widec) dnl --------------------------------------------------------------------------- CF_HELP_MESSAGE(Curses Version-dependent Options:) CF_WITH_NCURSES_ETC case $cf_cv_screen in (ncurses*) cf_cv_libtype=`echo "$cf_cv_screen" | sed -e 's/^ncurses//'` ;; (curses|curses_*) CF_NETBSD_FORM_H CF_NETBSD_MENU_H ;; esac dnl If we've not specified a library, assume we're using sysvr4 libraries dnl installed conventionally (e.g., SunOS 5.x - solaris). dnl Autoconf builds up the $LIBS in reverse order case $cf_cv_screen in (pdcurses) ;; (*) # look for curses-related libraries CF_CHECK_CURSES_LIB(panel,$cf_cv_libtype,new_panel) CF_CHECK_CURSES_LIB(menu,$cf_cv_libtype,menu_driver) CF_CHECK_CURSES_LIB(form,$cf_cv_libtype,form_driver) # look for curses-related headers AC_CHECK_HEADERS( \ nc_alloc.h \ nomacros.h \ form.h \ menu.h \ panel.h \ term_entry.h \ ) ;; esac AC_STDC_HEADERS AC_HEADER_TIME AC_CHECK_HEADERS( \ getopt.h \ locale.h \ math.h \ stdarg.h \ sys/ioctl.h \ sys/select.h \ sys/time.h \ termios.h \ unistd.h \ ) CF_GETOPT_HEADER AC_CHECK_FUNCS( \ getopt \ gettimeofday \ ) if test "x$ac_cv_func_getopt" = xno; then AC_MSG_ERROR(getopt is required for building programs) fi if test "$cf_enable_widec" = yes; then AC_CHECK_FUNCS( \ mblen \ mbrlen \ mbrtowc \ mbsrtowcs \ mbstowcs \ mbtowc \ wcsrtombs \ wcstombs \ ) fi CF_CURSES_FUNCS( \ assume_default_colors \ chgat \ color_set \ filter \ getbegx \ getcurx \ getmaxx \ getnstr \ getparx \ getwin \ mvvline \ mvwvline \ napms \ putwin \ resize_term \ resizeterm \ ripoffline \ scr_dump \ setupterm \ slk_color \ slk_init \ termattrs \ tgetent \ tigetnum \ tigetstr \ typeahead \ use_default_colors \ use_env \ use_extended_names \ use_screen \ use_window \ vid_puts \ vidputs \ vsscanf \ vw_printw \ wchgat \ winsstr \ wresize \ wsyncdown \ ) CF_TPUTS_PROTO CF_NCURSES_EXT_FUNCS if test "$cf_enable_widec" = yes then # workaround for systems with ncurses before 20111029, due to change of # feature test macro from _XPG5 to _XOPEN_SOURCE if test -n "$cf_cv_ncurses_version" && test "x$cf_cv_ncurses_version" != xno then cf_define_xpg5=no AC_MSG_CHECKING(if _XPG5 should be defined to enable wide-characters) AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}>], [int x = _XPG5],, [cf_save_cppflags="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XPG5" AC_TRY_COMPILE([ #include <${cf_cv_ncurses_header:-curses.h}>], [int x = _XPG5], [cf_define_xpg5=yes]) CPPFLAGS="$cf_save_cppflags"]) AC_MSG_RESULT($cf_define_xpg5) if test "$cf_define_xpg5" = yes then CPPFLAGS="$CPPFLAGS -D_XPG5" fi fi AC_CACHE_CHECK(for wide-character functions,cf_cv_widechar_funcs,[ AC_TRY_LINK([ #include <${cf_cv_ncurses_header:-curses.h}>], [ static wchar_t src_wchar[2]; static cchar_t dst_cchar; setcchar(&dst_cchar, src_wchar, A_NORMAL, 0, (void *) 0); ], [cf_cv_widechar_funcs=yes], [cf_cv_widechar_funcs=no]) ]) if test "$cf_cv_widechar_funcs" != no ; then AC_DEFINE(USE_WIDEC_SUPPORT,1,[Define to 1 to enable wide-character support in (n)curses]) else AC_DEFINE(USE_WIDEC_SUPPORT,0) fi else AC_DEFINE(USE_WIDEC_SUPPORT,0) fi AC_CACHE_CHECK(if $cf_cv_screen library uses pthreads,cf_cv_use_pthreads,[ AC_TRY_LINK([ #include <${cf_cv_ncurses_header:-curses.h}> extern void _nc_init_pthreads(void); ], [ initscr(); _nc_init_pthreads(); ], [cf_cv_use_pthreads=yes], [cf_cv_use_pthreads=no]) ]) test $cf_cv_use_pthreads = yes && AC_DEFINE(USE_PTHREADS) CF_SYS_TIME_SELECT # special check for test/ditto.c CF_FUNC_OPENPTY if test "$cf_cv_func_openpty" != no ; then AC_DEFINE_UNQUOTED(USE_OPENPTY_HEADER,<$cf_cv_func_openpty>,[Define to actual header for openpty function]) AC_DEFINE(USE_XTERM_PTY,1,[Define to 1 if we should assume xterm pseudoterminal interface]) if test "x$cf_cv_lib_util" = xyes ; then CF_ADD_LIB(util,TEST_LIBS) fi fi CF_FUNC_CURSES_VERSION CF_CURSES_ACS_MAP if test "$cf_enable_widec" = yes; then CF_CURSES_WACS_MAP CF_CURSES_WACS_SYMBOLS fi CF_CURSES_CHECK_TYPE(attr_t,long) if test "$cf_enable_widec" = yes; then CF_WCHAR_TYPE(mbstate_t, NCURSES_MBSTATE_T, NCURSES_OK_MBSTATE_T) CF_WCHAR_TYPE(wchar_t, NCURSES_WCHAR_T, NCURSES_OK_WCHAR_T) CF_WCHAR_TYPE(wint_t, NCURSES_WINT_T, NCURSES_OK_WINT_T) if test "$NCURSES_OK_MBSTATE_T" = 0 ; then CF_CURSES_CHECK_TYPE(mbstate_t,long) fi if test "$NCURSES_OK_WCHAR_T" = 0 ; then CF_CURSES_CHECK_TYPE(wchar_t,long) fi if test "$NCURSES_OK_WINT_T" = 0 ; then CF_CURSES_CHECK_TYPE(wint_t,long) fi fi CF_CURSES_CHECK_DATA(ospeed) CF_CURSES_CHECK_DATA(boolnames) CF_CURSES_CHECK_DATA(boolfnames) dnl --------------------------------------------------------------------------- CF_HELP_MESSAGE(Testing/development Options:) CF_ENABLE_WARNINGS CF_DISABLE_LEAKS CF_DISABLE_RPATH_HACK TEST_ARGS="$LIBS" LIBS= dnl --------------------------------------------------------------------------- AC_OUTPUT(Makefile,[ CF_PRG_RULES([$srcdir/mk-test.awk INSTALL=yes ECHO_LINK="$ECHO_LD"], .) cat >>Makefile <>Makefile <>Makefile < #if HAVE_TIGETSTR #if defined(HAVE_CURSES_DATA_BOOLNAMES) || defined(DECL_CURSES_DATA_BOOLNAMES) #define DUMP(name) dump_array(#name, name) static void dump_array(const char *name, NCURSES_CONST char *const *list) { int n; printf("%s:\n", name); for (n = 0; list[n] != 0; ++n) { printf("%5d:%s\n", n, list[n]); } } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { DUMP(boolnames); DUMP(boolcodes); DUMP(boolfnames); DUMP(numnames); DUMP(numcodes); DUMP(numfnames); DUMP(strnames); DUMP(strcodes); DUMP(strfnames); ExitProgram(EXIT_SUCCESS); } #else int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { printf("This program requires the terminfo arrays\n"); ExitProgram(EXIT_FAILURE); } #endif #else /* !HAVE_TIGETSTR */ int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { printf("This program requires the terminfo functions such as tigetstr\n"); ExitProgram(EXIT_FAILURE); } #endif /* HAVE_TIGETSTR */ ncurses-6.0-20160213/test/keynames.c0000644000175100001440000000611111074205415015411 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2006,2008 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: keynames.c,v 1.9 2008/10/11 20:22:37 tom Exp $ */ #include static void usage(void) { fprintf(stderr, "Usage: keynames [-m] [-s]\n"); ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int n; bool do_setup = FALSE; bool do_meta = FALSE; setlocale(LC_ALL, ""); while ((n = getopt(argc, argv, "ms")) != -1) { switch (n) { case 'm': do_meta = TRUE; break; case 's': do_setup = TRUE; break; default: usage(); /* NOTREACHED */ } } if (do_setup) { /* * Get the terminfo entry into memory, and tell ncurses that we want to * use function keys. That will make it add any user-defined keys that * appear in the terminfo. */ newterm(getenv("TERM"), stderr, stdin); keypad(stdscr, TRUE); if (do_meta) meta(stdscr, TRUE); endwin(); } for (n = -1; n < KEY_MAX + 512; n++) { const char *result = keyname(n); if (result != 0) printf("%d(%5o):%s\n", n, n, result); } ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/make-tar.sh0000755000175100001440000001155412525675215015513 0ustar tomusers#!/bin/sh # $Id: make-tar.sh,v 1.13 2015/05/16 17:12:45 tom Exp $ ############################################################################## # Copyright (c) 2010-2013,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # Construct a tar-file containing only the test tree as well as its associated # scripts. The reason for doing that is to simplify distributing the test # programs as a separate package. CDPATH=: export CDPATH TARGET=`pwd` : ${PKG_NAME:=ncurses-examples} : ${ROOTNAME:=ncurses-test} : ${DESTDIR:=$TARGET} : ${TMPDIR:=/tmp} grep_assign() { grep_assign=`egrep "^$2\>" "$1" | sed -e "s/^$2[ ]*=[ ]*//" -e 's/"//g'` eval $2=\"$grep_assign\" } grep_patchdate() { grep_assign ../dist.mk NCURSES_MAJOR grep_assign ../dist.mk NCURSES_MINOR grep_assign ../dist.mk NCURSES_PATCH } # The rpm spec-file in the ncurses tree is a template. Fill in the version # information from dist.mk edit_specfile() { sed \ -e "s/\\/$NCURSES_MAJOR/g" \ -e "s/\\/$NCURSES_MINOR/g" \ -e "s/\\/$NCURSES_PATCH/g" $1 >$1.new chmod u+w $1 mv $1.new $1 } make_changelog() { test -f $1 && chmod u+w $1 cat >$1 <MANIFEST ) cd $BUILD || exit # Remove build-artifacts. find . -name RCS -exec rm -rf {} \; find $BUILD/$ROOTNAME -type d -exec rmdir {} \; 2>/dev/null find $BUILD/$ROOTNAME -type d -exec rmdir {} \; 2>/dev/null find $BUILD/$ROOTNAME -type d -exec rmdir {} \; 2>/dev/null # There is no need for this script in the tar file. rm -f $ROOTNAME/make-tar.sh # Remove build-artifacts. find . -name "*.gz" -exec rm -rf {} \; # Make the files writable... chmod -R u+w . tar cf - $ROOTNAME | gzip >$DESTDIR/$ROOTNAME.tar.gz cd $DESTDIR pwd ls -l $ROOTNAME.tar.gz # vi:ts=4 sw=4 ncurses-6.0-20160213/test/linedata.h0000644000175100001440000000624312063200117015362 0ustar tomusers/**************************************************************************** * Copyright (c) 2009-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ #define isQUIT(c) ((c) == QUIT || (c) == ESCAPE) #define key_RECUR CTRL('W') #define key_NEWLINE CTRL('N') #define key_BACKSPACE '\b' static FILE *linedata; static void failed(const char *s) { perror(s); ExitProgram(EXIT_FAILURE); } static void init_linedata(const char *name) { if ((linedata = fopen(name, "r")) == 0) { failed(name); } } static int read_linedata(WINDOW *work) { int result; if (linedata != 0) { result = fgetc(linedata); if (result == EOF) { fclose(linedata); linedata = 0; result = read_linedata(work); } else { wrefresh(work); if (result == '\n') { result = key_NEWLINE; } } } else { #ifdef WIDE_LINEDATA wint_t ch; int code; result = ERR; while ((code = wget_wch(work, &ch)) != ERR) { if (code == KEY_CODE_YES) { switch (ch) { case KEY_DOWN: result = key_NEWLINE; break; case KEY_BACKSPACE: result = key_BACKSPACE; break; default: beep(); continue; } } else { result = (int) ch; break; } } #else result = wgetch(work); #endif } return result; } ncurses-6.0-20160213/test/test.priv.h0000644000175100001440000005135012422575342015554 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-on * ****************************************************************************/ /* $Id: test.priv.h,v 1.131 2014/10/25 01:20:34 tom Exp $ */ #ifndef __TEST_PRIV_H #define __TEST_PRIV_H 1 #include /* * Fix ifdef's that look for the form/menu/panel libraries, if we are building * with wide-character ncurses. */ #ifdef HAVE_LIBFORMW #define HAVE_LIBFORMW 1 #define HAVE_LIBFORM 1 #endif #ifdef HAVE_LIBMENUW #define HAVE_LIBMENUW 1 #define HAVE_LIBMENU 1 #endif #ifdef HAVE_LIBPANELW #define HAVE_LIBPANELW 1 #define HAVE_LIBPANEL 1 #endif /* * Fallback definitions to accommodate broken compilers. */ #ifndef HAVE_ASSUME_DEFAULT_COLORS #define HAVE_ASSUME_DEFAULT_COLORS 0 #endif #ifndef HAVE_CURSES_VERSION #define HAVE_CURSES_VERSION 0 #endif #ifndef HAVE_CHGAT #define HAVE_CHGAT 0 #endif #ifndef HAVE_COLOR_SET #define HAVE_COLOR_SET 0 #endif #ifndef HAVE_FILTER #define HAVE_FILTER 0 #endif #ifndef HAVE_FORM_H #define HAVE_FORM_H 0 #endif #ifndef HAVE_GETBEGX #define HAVE_GETBEGX 0 #endif #ifndef HAVE_GETCURX #define HAVE_GETCURX 0 #endif #ifndef HAVE_GETMAXX #define HAVE_GETMAXX 0 #endif #ifndef HAVE_GETOPT_H #define HAVE_GETOPT_H 0 #endif #ifndef HAVE_GETPARX #define HAVE_GETPARX 0 #endif #ifndef HAVE_GETWIN #define HAVE_GETWIN 0 #endif #ifndef HAVE_LIBFORM #define HAVE_LIBFORM 0 #endif #ifndef HAVE_LIBMENU #define HAVE_LIBMENU 0 #endif #ifndef HAVE_LIBPANEL #define HAVE_LIBPANEL 0 #endif #ifndef HAVE_LOCALE_H #define HAVE_LOCALE_H 0 #endif #ifndef HAVE_MATH_H #define HAVE_MATH_H 0 #endif #ifndef HAVE_MENU_H #define HAVE_MENU_H 0 #endif #ifndef HAVE_MVVLINE #define HAVE_MVVLINE 0 #endif #ifndef HAVE_MVWVLINE #define HAVE_MVWVLINE 0 #endif #ifndef HAVE_NAPMS #define HAVE_NAPMS 1 #endif #ifndef HAVE_NC_ALLOC_H #define HAVE_NC_ALLOC_H 0 #endif #ifndef HAVE_PANEL_H #define HAVE_PANEL_H 0 #endif #ifndef HAVE_PUTWIN #define HAVE_PUTWIN 0 #endif #ifndef HAVE_RESIZE_TERM #define HAVE_RESIZE_TERM 0 #endif #ifndef HAVE_RIPOFFLINE #define HAVE_RIPOFFLINE 0 #endif #ifndef HAVE_SCR_DUMP #define HAVE_SCR_DUMP 0 #endif #ifndef HAVE_SETUPTERM #define HAVE_SETUPTERM 0 #endif #ifndef HAVE_SLK_COLOR #define HAVE_SLK_COLOR 0 #endif #ifndef HAVE_SLK_INIT #define HAVE_SLK_INIT 0 #endif #ifndef HAVE_SYS_IOCTL_H #define HAVE_SYS_IOCTL_H 0 #endif #ifndef HAVE_SYS_SELECT_H #define HAVE_SYS_SELECT_H 0 #endif #ifndef HAVE_TERMATTRS #define HAVE_TERMATTRS 0 #endif #ifndef HAVE_TERMIOS_H #define HAVE_TERMIOS_H 0 #endif #ifndef HAVE_TERMNAME #define HAVE_TERMNAME 0 #endif #ifndef HAVE_TERM_ENTRY_H #define HAVE_TERM_ENTRY_H 0 #endif #ifndef HAVE_TGETENT #define HAVE_TGETENT 0 #endif #ifndef HAVE_TIGETNUM #define HAVE_TIGETNUM 0 #endif #ifndef HAVE_TIGETSTR #define HAVE_TIGETSTR 0 #endif #ifndef HAVE_TYPEAHEAD #define HAVE_TYPEAHEAD 0 #endif #ifndef HAVE_WINSSTR #define HAVE_WINSSTR 0 #endif #ifndef HAVE_USE_DEFAULT_COLORS #define HAVE_USE_DEFAULT_COLORS 0 #endif #ifndef HAVE_USE_ENV #define HAVE_USE_ENV 0 #endif #ifndef HAVE_USE_EXTENDED_NAMES #define HAVE_USE_EXTENDED_NAMES 0 #endif #ifndef HAVE_USE_SCREEN #define HAVE_USE_SCREEN 0 #endif #ifndef HAVE_USE_WINDOW #define HAVE_USE_WINDOW 0 #endif #ifndef HAVE_VIDPUTS #define HAVE_VIDPUTS 0 #endif #ifndef HAVE_VID_PUTS #define HAVE_VID_PUTS 0 #endif #ifndef HAVE_WRESIZE #define HAVE_WRESIZE 0 #endif #ifndef NCURSES_EXT_FUNCS #define NCURSES_EXT_FUNCS 0 #endif #ifndef NEED_PTEM_H #define NEED_PTEM_H 0 #endif #ifndef NEED_WCHAR_H #define NEED_WCHAR_H 0 #endif #ifndef NO_LEAKS #define NO_LEAKS 0 #endif /* * Workaround for HPUX */ #if defined(__hpux) && !defined(NCURSES_VERSION) #define _ACS_COMPAT_CODE /* needed for acs_map vs __acs_map */ #endif #include #include #include #include #include #if HAVE_UNISTD_H #include #endif #include /* include before curses.h to work around glibc bug */ #if NEED_WCHAR_H #include #ifdef HAVE_LIBUTF8_H #include #endif #endif #if defined(HAVE_XCURSES) #include #elif defined(HAVE_NCURSESW_NCURSES_H) #include #elif defined(HAVE_NCURSES_NCURSES_H) #include #else #include #endif #if defined(HAVE_XCURSES) || defined(PDCURSES) /* no other headers */ #undef HAVE_SETUPTERM /* nonfunctional */ #define HAVE_SETUPTERM 0 #undef HAVE_TGETENT /* nonfunctional */ #define HAVE_TGETENT 0 #undef HAVE_TIGETSTR /* nonfunctional */ #define HAVE_TIGETSTR 0 #elif defined(HAVE_NCURSESW_TERM_H) #include #elif defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif /* * Not all curses.h implementations include unctrl.h, */ #if defined(HAVE_NCURSESW_UNCTRL_H) #include #elif defined(HAVE_NCURSES_UNCTRL_H) #include #elif defined(HAVE_UNCTRL_H) #include #endif #if HAVE_GETOPT_H #include #elif !defined(HAVE_GETOPT_HEADER) /* 'getopt()' may be prototyped in , but declaring its variables * doesn't hurt. */ extern char *optarg; extern int optind; #endif /* HAVE_GETOPT_H */ #if HAVE_LOCALE_H #include #else #define setlocale(name,string) /* nothing */ #endif #include #include #ifndef GCC_NORETURN #define GCC_NORETURN /* nothing */ #endif #ifndef GCC_PRINTFLIKE #define GCC_PRINTFLIKE(a,b) /* nothing */ #endif #ifndef GCC_UNUSED #define GCC_UNUSED /* nothing */ #endif #ifndef HAVE_GETNSTR #define getnstr(s,n) getstr(s) #endif #ifndef USE_SOFTKEYS #if HAVE_SLK_INIT #define USE_SOFTKEYS 1 #else #define USE_SOFTKEYS 0 #endif #endif #if !USE_SOFTKEYS #define slk_init() /* nothing */ #define slk_restore() /* nothing */ #define slk_clear() /* nothing */ #endif #ifndef HAVE_WSYNCDOWN #define wsyncdown(win) /* nothing */ #endif #ifndef USE_WIDEC_SUPPORT #if (defined(_XOPEN_SOURCE_EXTENDED) \ || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500)) \ || (defined(NCURSES_WIDECHAR) && (NCURSES_WIDECHAR - 0 < 1))) \ && defined(WACS_ULCORNER) #define USE_WIDEC_SUPPORT 1 #else #define USE_WIDEC_SUPPORT 0 #endif #endif #if HAVE_PANEL_H && HAVE_LIBPANEL #define USE_LIBPANEL 1 #else #define USE_LIBPANEL 0 #endif #if HAVE_MENU_H && HAVE_LIBMENU #define USE_LIBMENU 1 #else #define USE_LIBMENU 0 #endif #if HAVE_FORM_H && HAVE_LIBFORM #define USE_LIBFORM 1 #else #define USE_LIBFORM 0 #endif /* workaround, to build against NetBSD's variant of the form library */ #ifdef HAVE_NETBSD_FORM_H #define form_getyx(form, y, x) y = current_field(form)->cursor_ypos, x = current_field(form)->cursor_xpos #else #define form_getyx(form, y, x) y = (form)->currow, x = (form)->curcol #endif /* workaround, to build against NetBSD's variant of the form library */ #ifdef HAVE_NETBSD_MENU_H #define menu_itemwidth(menu) (menu)->max_item_width #else #define menu_itemwidth(menu) (menu)->itemlen #endif #ifndef HAVE_TYPE_ATTR_T #if !USE_WIDEC_SUPPORT && !defined(attr_t) #define attr_t chtype #endif #endif #undef NCURSES_CH_T #if !USE_WIDEC_SUPPORT #define NCURSES_CH_T chtype #else #define NCURSES_CH_T cchar_t #endif #ifndef NCURSES_COLOR_T #define NCURSES_COLOR_T short #endif #ifndef NCURSES_PAIRS_T #define NCURSES_PAIRS_T short #endif #ifndef NCURSES_OPAQUE #define NCURSES_OPAQUE 0 #endif #ifndef CCHARW_MAX #define CCHARW_MAX 5 #endif #if defined(NCURSES_VERSION) && defined(CURSES_WACS_ARRAY) && !defined(CURSES_WACS_SYMBOLS) #define CURSES_WACS_SYMBOLS #endif #if defined(CURSES_WACS_ARRAY) && !defined(CURSES_WACS_SYMBOLS) /* NetBSD 5.1 defines these incorrectly */ #undef WACS_RARROW #undef WACS_LARROW #undef WACS_UARROW #undef WACS_DARROW #undef WACS_BLOCK #undef WACS_DIAMOND #undef WACS_CKBOARD #undef WACS_DEGREE #undef WACS_PLMINUS #undef WACS_BOARD #undef WACS_LANTERN #undef WACS_LRCORNER #undef WACS_URCORNER #undef WACS_ULCORNER #undef WACS_LLCORNER #undef WACS_PLUS #undef WACS_HLINE #undef WACS_S1 #undef WACS_S9 #undef WACS_LTEE #undef WACS_RTEE #undef WACS_BTEE #undef WACS_TTEE #undef WACS_VLINE #undef WACS_BULLET #undef WACS_S3 #undef WACS_S7 #undef WACS_LEQUAL #undef WACS_GEQUAL #undef WACS_PI #undef WACS_NEQUAL #undef WACS_STERLING #define WACS_RARROW &(CURSES_WACS_ARRAY['+']) #define WACS_LARROW &(CURSES_WACS_ARRAY[',']) #define WACS_UARROW &(CURSES_WACS_ARRAY['-']) #define WACS_DARROW &(CURSES_WACS_ARRAY['.']) #define WACS_BLOCK &(CURSES_WACS_ARRAY['0']) #define WACS_DIAMOND &(CURSES_WACS_ARRAY['`']) #define WACS_CKBOARD &(CURSES_WACS_ARRAY['a']) #define WACS_DEGREE &(CURSES_WACS_ARRAY['f']) #define WACS_PLMINUS &(CURSES_WACS_ARRAY['g']) #define WACS_BOARD &(CURSES_WACS_ARRAY['h']) #define WACS_LANTERN &(CURSES_WACS_ARRAY['i']) #define WACS_LRCORNER &(CURSES_WACS_ARRAY['j']) #define WACS_URCORNER &(CURSES_WACS_ARRAY['k']) #define WACS_ULCORNER &(CURSES_WACS_ARRAY['l']) #define WACS_LLCORNER &(CURSES_WACS_ARRAY['m']) #define WACS_PLUS &(CURSES_WACS_ARRAY['n']) #define WACS_HLINE &(CURSES_WACS_ARRAY['q']) #define WACS_S1 &(CURSES_WACS_ARRAY['o']) #define WACS_S9 &(CURSES_WACS_ARRAY['s']) #define WACS_LTEE &(CURSES_WACS_ARRAY['t']) #define WACS_RTEE &(CURSES_WACS_ARRAY['u']) #define WACS_BTEE &(CURSES_WACS_ARRAY['v']) #define WACS_TTEE &(CURSES_WACS_ARRAY['w']) #define WACS_VLINE &(CURSES_WACS_ARRAY['x']) #define WACS_BULLET &(CURSES_WACS_ARRAY['~']) #define WACS_S3 &(CURSES_WACS_ARRAY['p']) #define WACS_S7 &(CURSES_WACS_ARRAY['r']) #define WACS_LEQUAL &(CURSES_WACS_ARRAY['y']) #define WACS_GEQUAL &(CURSES_WACS_ARRAY['z']) #define WACS_PI &(CURSES_WACS_ARRAY['{']) #define WACS_NEQUAL &(CURSES_WACS_ARRAY['|']) #define WACS_STERLING &(CURSES_WACS_ARRAY['}']) #endif #undef CTRL #define CTRL(x) ((x) & 0x1f) #define QUIT CTRL('Q') #define ESCAPE CTRL('[') #ifndef KEY_MIN #define KEY_MIN 256 /* not defined in Solaris 8 */ #endif #ifdef DECL_CURSES_DATA_BOOLNAMES extern char *boolnames[], *boolcodes[], *boolfnames[]; extern char *numnames[], *numcodes[], *numfnames[]; extern char *strnames[], *strcodes[], *strfnames[]; #endif #define colored_chtype(ch, attr, pair) \ ((chtype) (ch) | (chtype) (attr) | (chtype) COLOR_PAIR(pair)) /* * Workaround for HPUX */ #if defined(__hpux) && !defined(NCURSES_VERSION) #define getbegx(w) __getbegx(w) #define getbegy(w) __getbegy(w) #define getcurx(w) __getcurx(w) #define getcury(w) __getcury(w) #define getmaxx(w) __getmaxx(w) #define getmaxy(w) __getmaxy(w) #define getparx(w) __getparx(w) #define getpary(w) __getpary(w) #endif /* * Workaround in case getcchar() returns a positive value when the source * string produces only a L'\0'. */ #define TEST_CCHAR(s, count, then_stmt, else_stmt) \ if ((count = getcchar(s, NULL, NULL, NULL, NULL)) > 0) { \ wchar_t test_wch[CCHARW_MAX + 2]; \ attr_t test_attrs; \ NCURSES_PAIRS_T test_pair; \ \ if (getcchar( s, test_wch, &test_attrs, &test_pair, NULL) == OK \ && test_wch[0] != L'\0') { \ then_stmt \ } else { \ else_stmt \ } \ } else { \ else_stmt \ } /* * These usually are implemented as macros, but may be functions. */ #if !defined(getcurx) && !HAVE_GETCURX #define getcurx(win) ((win)?(win)->_curx:ERR) #define getcury(win) ((win)?(win)->_cury:ERR) #endif #if !defined(getbegx) && !HAVE_GETBEGX #define getbegx(win) ((win)?(win)->_begx:ERR) #define getbegy(win) ((win)?(win)->_begy:ERR) #endif #if !defined(getmaxx) && !HAVE_GETMAXX #define getmaxx(win) ((win)?((win)->_maxx + 1):ERR) #define getmaxy(win) ((win)?((win)->_maxy + 1):ERR) #endif /* * Solaris 10 xpg4: #define __m_getparx(w) ((w)->_parent == (WINDOW *) 0 ? -1 \ : (w)->_begx - (w)->_parent->_begx) */ #if !defined(getparx) && !HAVE_GETPARX #ifdef __m_getparx #define getparx(win) __m_getparx(win) #define getpary(win) __m_getpary(win) #else #define getparx(win) ((win)?((win)->_parx + 1):ERR) #define getpary(win) ((win)?((win)->_pary + 1):ERR) #endif #endif #if !defined(mvwvline) && !HAVE_MVWVLINE #define mvwvline(w,y,x,ch,n) (move(y,x) == ERR ? ERR : wvline(w,ch,n)) #define mvwhline(w,y,x,ch,n) (move(y,x) == ERR ? ERR : whline(w,ch,n)) #endif #if !defined(mvvline) && !HAVE_MVVLINE #define mvvline(y,x,ch,n) (move(y,x) == ERR ? ERR : vline(ch,n)) #define mvhline(y,x,ch,n) (move(y,x) == ERR ? ERR : hline(ch,n)) #endif /* * Try to accommodate curses implementations that have no terminfo support. */ #if HAVE_TIGETNUM #define TIGETNUM(ti,tc) tigetnum(ti) #else #define TIGETNUM(ti,tc) tgetnum(tc) #endif #if HAVE_TIGETSTR #define TIGETSTR(ti,tc) tigetstr(ti) #else #define TIGETSTR(ti,tc) tgetstr(tc,&area_pointer) #endif /* * So far (2013 - more than ten years), only ncurses implements * use_extended_names(). */ #if defined(NCURSES_XNAMES) #elif defined(NCURSES_VERSION) && defined(HAVE_TERM_ENTRY_H) && HAVE_TERM_ENTRY_H #define NCURSES_XNAMES 1 #else #define NCURSES_XNAMES 0 #endif /* ncurses implements tparm() with varargs, X/Open with a fixed-parameter list * (which is incompatible with legacy usage, doesn't solve any problems). */ #define tparm3(a,b,c) tparm(a,b,c,0,0,0,0,0,0,0) #define tparm2(a,b) tparm(a,b,0,0,0,0,0,0,0,0) #define UChar(c) ((unsigned char)(c)) #define SIZEOF(table) (sizeof(table)/sizeof(table[0])) #if defined(NCURSES_VERSION) && HAVE_NC_ALLOC_H #include #if HAVE_NC_FREEALL && defined(USE_TINFO) #undef ExitProgram #define ExitProgram(code) _nc_free_tinfo(code) #endif #else #define typeMalloc(type,n) (type *) malloc((size_t)(n) * sizeof(type)) #define typeCalloc(type,elts) (type *) calloc((size_t)(elts), sizeof(type)) #define typeRealloc(type,n,p) (type *) realloc(p, (size_t)(n) * sizeof(type)) #endif #ifndef ExitProgram #define ExitProgram(code) exit(code) #endif #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #ifndef EXIT_FAILURE #define EXIT_FAILURE 1 #endif #if defined(__MINGW32__) || defined(USE_WIN32CON_DRIVER) #if defined(PDCURSES) #ifdef WINVER # if WINVER < 0x0501 # error WINVER must at least be 0x0501 # endif #else # define WINVER 0x0501 #endif #include #include /* for struct timeval */ #undef sleep #define sleep(n) Sleep((n) * 1000) #define SIGHUP 1 #define SIGKILL 9 #define getlogin() "username" #elif defined(HAVE_NCURSESW_NCURSES_H) #include #elif defined(HAVE_NCURSES_NCURSES_H) #include #else #include #endif /* conflicts in test/firstlast.c */ #undef large #undef small #endif /* Use this to quiet gcc's -Wwrite-strings warnings, but accommodate SVr4 * curses which doesn't have const parameters declared (so far) in the places * that XSI shows. */ #ifndef NCURSES_CONST #define NCURSES_CONST /* nothing */ #endif /* out-of-band values for representing absent capabilities */ #define ABSENT_BOOLEAN ((signed char)-1) /* 255 */ #define ABSENT_NUMERIC (-1) #define ABSENT_STRING (char *)0 /* out-of-band values for representing cancels */ #define CANCELLED_BOOLEAN ((signed char)-2) /* 254 */ #define CANCELLED_NUMERIC (-2) #define CANCELLED_STRING (char *)(-1) #define VALID_BOOLEAN(s) ((unsigned char)(s) <= 1) /* reject "-1" */ #define VALID_NUMERIC(s) ((s) >= 0) #define VALID_STRING(s) ((s) != CANCELLED_STRING && (s) != ABSENT_STRING) #define VT_ACSC "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~" #define CATCHALL(handler) { \ int nsig; \ for (nsig = SIGHUP; nsig < SIGTERM; ++nsig) \ if (nsig != SIGKILL) \ signal(nsig, handler); \ } /* * Workaround for clean(er) compile with Solaris's legacy curses. * The same would be needed for HPUX 10.20 */ #ifndef TPUTS_ARG #define TPUTS_ARG int #endif #if defined(sun) && !defined(_XOPEN_CURSES) && !defined(NCURSES_VERSION_PATCH) #undef TPUTS_ARG #define TPUTS_ARG char extern char *tgoto(char *, int, int); /* available, but not prototyped */ #endif #ifndef TPUTS_PROTO #define TPUTS_PROTO(func,value) int func(TPUTS_ARG value) #endif #ifndef TPUTS_RETURN #define TPUTS_RETURN(value) return value #endif /* * Workarounds for Solaris's X/Open curses */ #if !defined(KEY_MIN) && defined(__KEY_MIN) #define KEY_MIN __KEY_MIN #endif #if !defined(KEY_MAX) && defined(__KEY_MIN) #define KEY_MAX __KEY_MAX #endif /* * Workaround to build with Sun's default SVr4 curses. */ #ifdef NCURSES_VERSION #ifndef HAVE_VW_PRINTW #define HAVE_VW_PRINTW 1 #endif #endif /* * ncurses provides arrays of capability names; X/Open discarded these SVr4 * features. Some implementations continue to provide them (see the test * configure script). */ #ifdef NCURSES_VERSION #ifndef HAVE_CURSES_DATA_BOOLNAMES #define HAVE_CURSES_DATA_BOOLNAMES 1 #endif #endif /* * ncurses uses const in some places where X/Open does (or did) not allow. */ #ifdef NCURSES_VERSION #define CONST_MENUS const #else #define CONST_MENUS /* nothing */ #endif /* * Simplify setting up demo of threading with these macros. */ #if HAVE_USE_WINDOW #define USING_WINDOW(w,func) use_window(w, (NCURSES_WINDOW_CB) func, w) #define USING_WINDOW2(w,func,data) use_window(w, (NCURSES_WINDOW_CB) func, data) #define WANT_USE_WINDOW() extern void _nc_want_use_window(void) #else #define USING_WINDOW(w,func) func(w) #define USING_WINDOW2(w,func,data) func(w,data) #define WANT_USE_WINDOW() extern void _nc_want_use_window(void) #endif #if HAVE_USE_WINDOW #define USING_SCREEN(s,func,data) use_screen(s, (NCURSES_SCREEN_CB) func, data) #define WANT_USE_SCREEN() extern void _nc_want_use_screen(void) #else #define USING_SCREEN(s,func,data) func(data) #define WANT_USE_SCREEN() extern void _nc_want_use_screen(void) #endif #ifdef TRACE #define Trace(p) _tracef p #define USE_TRACE 1 #else #define Trace(p) /* nothing */ #define USE_TRACE 0 #endif #define Trace2(p) /* nothing */ #define MvAddCh (void) mvaddch #define MvWAddCh (void) mvwaddch #define MvAddStr (void) mvaddstr #define MvWAddStr (void) mvwaddstr #define MvWAddChStr (void) mvwaddchstr #define MvPrintw (void) mvprintw #define MvWPrintw (void) mvwprintw #define MvHLine (void) mvhline #define MvWHLine (void) mvwhline #define MvVLine (void) mvvline #define MvWVLine (void) mvwvline /* * The macro likely uses unsigned values, while X/Open prototype uses int. */ #if defined(wattrset) || defined(PDCURSES) #define AttrArg(p,a) (attr_t) ((attr_t)(p) | (attr_t)(a)) #else #define AttrArg(p,a) (int) ((attr_t)(p) | (attr_t)(a)) #endif /* * Workaround for defective implementation of gcc attribute warn_unused_result */ #if defined(__GNUC__) && defined(_FORTIFY_SOURCE) #define IGNORE_RC(func) errno = func #else #define IGNORE_RC(func) (void) func #endif /* gcc workarounds */ #define init_mb(state) memset(&state, 0, sizeof(state)) #endif /* __TEST_PRIV_H */ ncurses-6.0-20160213/test/echochar.c0000644000175100001440000001054212371521107015354 0ustar tomusers/**************************************************************************** * Copyright (c) 2006-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: echochar.c,v 1.10 2014/08/09 22:35:51 tom Exp $ * * Demonstrate the echochar function (compare to dots.c). * Thomas Dickey - 2006/11/4 */ #include #include #define valid(s) ((s != 0) && s != (char *)-1) static bool interrupted = FALSE; static long total_chars = 0; static time_t started; static void cleanup(void) { endwin(); printf("\n\n%ld total chars, rate %.2f/sec\n", total_chars, ((double) (total_chars) / (double) (time((time_t *) 0) - started))); } static void onsig(int n GCC_UNUSED) { interrupted = TRUE; } static double ranf(void) { long r = (rand() & 077777); return ((double) r / 32768.); } static void set_color(char *my_pairs, int fg, int bg) { int pair = (fg * COLORS) + bg; if (!my_pairs[pair]) { init_pair((short) pair, (short) fg, (short) bg); } attron(COLOR_PAIR(pair)); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int ch, x, y, z, p; double r; double c; bool use_colors; bool opt_r = FALSE; char *my_pairs = 0; int last_fg = 0; int last_bg = 0; while ((ch = getopt(argc, argv, "r")) != -1) { switch (ch) { case 'r': opt_r = TRUE; break; default: fprintf(stderr, "usage: echochar [-r]\n"); ExitProgram(EXIT_FAILURE); } } CATCHALL(onsig); initscr(); use_colors = has_colors(); if (use_colors) { start_color(); if (COLOR_PAIRS > 0) { my_pairs = typeCalloc(char, (size_t) COLOR_PAIRS); } use_colors = (my_pairs != 0); } srand((unsigned) time(0)); curs_set(0); r = (double) (LINES - 4); c = (double) (COLS - 4); started = time((time_t *) 0); while (!interrupted) { x = (int) (c * ranf()) + 2; y = (int) (r * ranf()) + 2; p = (ranf() > 0.9) ? '*' : ' '; move(y, x); if (use_colors > 0) { z = (int) (ranf() * COLORS); if (ranf() > 0.01) { set_color(my_pairs, z, last_bg); last_fg = z; } else { set_color(my_pairs, last_fg, z); last_bg = z; napms(1); } } else { if (ranf() <= 0.01) { if (ranf() > 0.6) attron(A_REVERSE); else attroff(A_REVERSE); napms(1); } } if (opt_r) { addch(UChar(p)); refresh(); } else { echochar(UChar(p)); } ++total_chars; } cleanup(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/bulgarian-utf8.txt0000644000175100001440000000052410346602370017026 0ustar tomusersПоказване на помощна информация -- 1 Създаване на дялове -- 2 Избор на дял и форматиране -- 3 Записване в избрания дял -- 4 Инсталиране на LILO -- 5 Изход от програмата -- 6 ncurses-6.0-20160213/test/background.c0000644000175100001440000001562512371520473015733 0ustar tomusers/**************************************************************************** * Copyright (c) 2003-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: background.c,v 1.15 2014/08/09 22:31:23 tom Exp $ */ #define NEED_COLOR_CODE 1 #define NEED_COLOR_NAME 1 #include static int default_bg = COLOR_BLACK; static int default_fg = COLOR_WHITE; static void test_background(void) { NCURSES_COLOR_T f, b; int row; int chr; if (pair_content(0, &f, &b) == ERR) { printw("pair 0 contains no data\n"); } else { printw("pair 0 contains (%d,%d)\n", (int) f, (int) b); } getch(); printw("Initializing pair 1 to red/%s\n", color_name(default_bg)); init_pair(1, COLOR_RED, (NCURSES_COLOR_T) default_bg); bkgdset((chtype) (' ' | COLOR_PAIR(1))); printw("RED/BLACK\n"); getch(); printw("Initializing pair 2 to %s/blue\n", color_name(default_fg)); init_pair(2, (NCURSES_COLOR_T) default_fg, COLOR_BLUE); bkgdset((chtype) (' ' | COLOR_PAIR(2))); printw("This line should be %s/blue\n", color_name(default_fg)); getch(); printw("Initializing pair 3 to %s/cyan (ACS_HLINE)\n", color_name(default_fg)); init_pair(3, (NCURSES_COLOR_T) default_fg, COLOR_CYAN); printw("...and drawing a box which should be followed by lines\n"); bkgdset(ACS_HLINE | (attr_t) COLOR_PAIR(3)); /* * Characters from vt100 line-drawing should be mapped to line-drawing, * since A_ALTCHARSET is set in the background, and the character part * of the background is replaced by the nonblank characters written. * * Characters not in the line-drawing range are usually sent as-is. * * With SVr4 curses it is possible to rely on this to mix uppercase text * with the (lowercase) line-drawing characters. ncurses uses some of * the uppercase characters for encoding thick- and double-lines. */ row = 7; mvprintw(row++, 10, "l"); for (chr = 0; chr < 32; ++chr) addch(' '); printw("x\n"); chr = 32; while (chr < 128) { if ((chr % 32) == 0) mvprintw(row++, 10, "x"); addch((chtype) ((chr == 127) ? ' ' : chr)); if ((++chr % 32) == 0) printw("x\n"); } mvprintw(row++, 10, "m"); for (chr = 0; chr < 32; ++chr) addch(' '); printw("j\n"); getch(); bkgdset((chtype) (' ' | COLOR_PAIR(0))); printw("Default Colors\n"); getch(); printw("Resetting colors to pair 1\n"); bkgdset((chtype) (' ' | COLOR_PAIR(1))); printw("This line should be red/%s\n", color_name(default_bg)); getch(); printw("Setting screen to pair 0\n"); bkgd((chtype) (' ' | COLOR_PAIR(0))); getch(); printw("Setting screen to pair 1\n"); bkgd((chtype) (' ' | COLOR_PAIR(1))); getch(); printw("Setting screen to pair 2\n"); bkgd((chtype) (' ' | COLOR_PAIR(2))); getch(); printw("Setting screen to pair 3\n"); bkgd((chtype) (' ' | COLOR_PAIR(3))); getch(); printw("Setting screen to pair 0\n"); bkgd((chtype) (' ' | COLOR_PAIR(0))); getch(); } static void usage(void) { static const char *msg[] = { "Usage: background [options]" ,"" ,"Options:" #if HAVE_ASSUME_DEFAULT_COLORS ," -a invoke assume_default_colors, repeat to use in init_pair" #endif ," -b XXX specify background color" #if HAVE_USE_DEFAULT_COLORS ," -d invoke use_default_colors, repeat to use in init_pair" #endif ," -f XXX specify foreground color" }; size_t n; for (n = 0; n < SIZEOF(msg); n++) fprintf(stderr, "%s\n", msg[n]); ExitProgram(EXIT_FAILURE); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { #if HAVE_ASSUME_DEFAULT_COLORS int a_option = 0; #endif #if HAVE_USE_DEFAULT_COLORS int d_option = 0; #endif int n; setlocale(LC_ALL, ""); while ((n = getopt(argc, argv, "ab:df:")) != -1) { switch (n) { #if HAVE_ASSUME_DEFAULT_COLORS case 'a': ++a_option; break; #endif case 'b': default_bg = color_code(optarg); break; #if HAVE_USE_DEFAULT_COLORS case 'd': ++d_option; break; #endif case 'f': default_fg = color_code(optarg); break; default: usage(); } } #if HAVE_USE_DEFAULT_COLORS && HAVE_ASSUME_DEFAULT_COLORS if (a_option && d_option) { fprintf(stderr, "Use either -a or -d option, but not both\n"); ExitProgram(EXIT_FAILURE); } #endif initscr(); cbreak(); noecho(); if (has_colors()) { start_color(); #if HAVE_USE_DEFAULT_COLORS if (d_option) { printw("Using default colors...\n"); use_default_colors(); if (d_option > 1) { default_fg = -1; default_bg = -1; } } #endif #if HAVE_ASSUME_DEFAULT_COLORS if (a_option) { printw("Using assumed colors %s/%s...\n", color_name(default_fg), color_name(default_bg)); assume_default_colors(default_fg, default_bg); if (a_option > 1) { default_fg = -1; default_bg = -1; } } #endif test_background(); } else { printw("This demo requires a color terminal"); getch(); } endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/configure0000755000175100001440000167755112633152254015373 0ustar tomusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by Autoconf 2.52.20150926. # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} ac_unique_file="ncurses.c" # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${datarootdir}/info' mandir='${datarootdir}/man' # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. build=$build_alias host=$host_alias target=$target_alias # FIXME: should be removed in autoconf 3.0. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat < if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. EOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue cd $ac_subdir # A "../" for each directory in /$ac_subdir. ac_dots=`echo $ac_subdir | sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'` case $srcdir in .) # No --srcdir option. We are building in place. ac_sub_srcdir=$srcdir ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_sub_srcdir=$srcdir/$ac_subdir ;; *) # Relative path. ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;; esac # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_sub_srcdir/configure.gnu; then echo $SHELL $ac_sub_srcdir/configure.gnu --help=recursive elif test -f $ac_sub_srcdir/configure; then echo $SHELL $ac_sub_srcdir/configure --help=recursive elif test -f $ac_sub_srcdir/configure.ac || test -f $ac_sub_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\EOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. EOF exit 0 fi exec 5>config.log cat >&5 </dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` PATH = $PATH _ASUNAME } >&5 cat >&5 <\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" ac_sep=" " ;; *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" ac_sep=" " ;; esac # Get rid of the leading space. done # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. trap 'exit_status=$? # Save into config.log some information that might help in debugging. echo >&5 echo "## ----------------- ##" >&5 echo "## Cache variables. ##" >&5 echo "## ----------------- ##" >&5 echo >&5 # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } >&5 sed "/^$/d" confdefs.h >conftest.log if test -s conftest.log; then echo >&5 echo "## ------------ ##" >&5 echo "## confdefs.h. ##" >&5 echo "## ------------ ##" >&5 echo >&5 cat conftest.log >&5 fi (echo; echo) >&5 test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" >&5 echo "$as_me: exit $exit_status" >&5 rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:875: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} cat "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:886: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:894: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:910: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:914: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:920: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:922: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:924: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. It doesn't matter if # we pass some twice (in addition to the command line arguments). if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:943: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:945: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return case `echo "testing\c" 2>/dev/null; echo 1,2,3`,`echo -n testing 2>/dev/null; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C= # newlines do not sed ;-) only broken shells would use this case anyway ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac echo "#! $SHELL" >conftest.sh echo "exit 0" >>conftest.sh chmod +x conftest.sh if { (echo "$as_me:966: PATH=\".;.\"; conftest.sh") >&5 (PATH=".;."; conftest.sh) 2>&5 ac_status=$? echo "$as_me:969: \$? = $ac_status" >&5 (exit $ac_status); }; then ac_path_separator=';' else ac_path_separator=: fi PATH_SEPARATOR="$ac_path_separator" rm -f conftest.sh ac_config_headers="$ac_config_headers ncurses_cfg.h:ncurses_tst.hin" test -f config.guess || ( test -f ../config.guess && cp ../config.guess ./ ) test -f config.sub || ( test -f ../config.sub && cp ../config.sub ./ ) ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:1001: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:1011: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:1015: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:1024: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:1028: error: $ac_config_sub $ac_cv_build_alias failed." >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1033: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then echo "$as_me:1041: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:1050: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1055: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" if test -z "$system_name" ; then system_name="`(hostname) 2>/dev/null`" fi fi test -n "$system_name" && cat >>confdefs.h <&6 else cf_cv_system_name="$system_name" fi test -z "$system_name" && system_name="$cf_cv_system_name" test -n "$cf_cv_system_name" && echo "$as_me:1081: result: Configuring for $cf_cv_system_name" >&5 echo "${ECHO_T}Configuring for $cf_cv_system_name" >&6 if test ".$system_name" != ".$cf_cv_system_name" ; then echo "$as_me:1085: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5 echo "${ECHO_T}Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&6 { { echo "$as_me:1087: error: \"Please remove config.cache and try again.\"" >&5 echo "$as_me: error: \"Please remove config.cache and try again.\"" >&2;} { (exit 1); exit 1; }; } fi test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed echo "$as_me:1105: checking whether ${MAKE-make} sets \${MAKE}" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:1125: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:1129: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:1143: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:1158: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1166: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1169: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:1178: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:1193: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1201: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1204: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:1217: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:1232: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1240: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1243: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:1252: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="cc" echo "$as_me:1267: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1275: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1278: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:1291: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:1311: found $ac_dir/$ac_word" >&5 break done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" ${1+"$@"} shift ac_cv_prog_CC="$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1333: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1336: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:1347: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:1362: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1370: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1373: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:1386: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:1401: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1409: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1412: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:1424: error: no acceptable cc found in \$PATH" >&5 echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:1429:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:1432: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:1435: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:1437: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:1440: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:1442: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:1445: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF #line 1449 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:1465: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:1468: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:1471: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. for ac_file in `ls a.exe conftest.exe 2>/dev/null; ls a.out conftest 2>/dev/null; ls a.* conftest.* 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; a.out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:1494: error: C compiler cannot create executables" >&5 echo "$as_me: error: C compiler cannot create executables" >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:1500: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:1505: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:1511: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1514: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:1521: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:1529: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:1536: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:1538: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:1541: checking for executable suffix" >&5 echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 if { (eval echo "$as_me:1543: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:1546: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:1562: error: cannot compute EXEEXT: cannot compile and link" >&5 echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:1568: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:1574: checking for object suffix" >&5 echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1580 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:1592: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1595: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:1607: error: cannot compute OBJEXT: cannot compile" >&5 echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:1614: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:1618: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1624 "configure" #include "confdefs.h" int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1639: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1642: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1645: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1648: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:1660: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:1666: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1672 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1684: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1687: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1690: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1693: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:1703: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1730: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1733: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1736: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1739: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line 1751 "configure" #include "confdefs.h" #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1764: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1767: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1770: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1773: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 1783 "configure" #include "confdefs.h" $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1795: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1798: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1801: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1804: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -rf conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return GCC_VERSION=none if test "$GCC" = yes ; then echo "$as_me:1834: checking version of $CC" >&5 echo $ECHO_N "checking version of $CC... $ECHO_C" >&6 GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`" test -z "$GCC_VERSION" && GCC_VERSION=unknown echo "$as_me:1838: result: $GCC_VERSION" >&5 echo "${ECHO_T}$GCC_VERSION" >&6 fi echo "$as_me:1842: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF #line 1850 "configure" #include "confdefs.h" #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:1899: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1902: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1905: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1908: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:1925: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:1928: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # This should have been defined by AC_PROG_CC : ${CC:=cc} echo "$as_me:1936: checking \$CC variable" >&5 echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6 case "$CC" in (*[\ \ ]-[IUD]*) echo "$as_me:1940: result: broken" >&5 echo "${ECHO_T}broken" >&6 { echo "$as_me:1942: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&5 echo "$as_me: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;} # humor him... cf_flags=`echo "$CC" | sed -e 's/^[^ ]*[ ]//'` CC=`echo "$CC" | sed -e 's/[ ].*//'` cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_flags do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi ;; (*) echo "$as_me:2028: result: ok" >&5 echo "${ECHO_T}ok" >&6 ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return echo "$as_me:2039: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line 2060 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:2065: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2071: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line 2094 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:2098: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2104: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:2141: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line 2151 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:2156: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2162: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line 2185 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:2189: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2195: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:2223: error: C preprocessor \"$CPP\" fails sanity check" >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2239: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AWK="$ac_prog" echo "$as_me:2254: found $ac_dir/$ac_word" >&5 break done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:2262: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:2265: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:2284: checking for a BSD compatible install" >&5 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_IFS=$IFS; IFS=$ac_path_separator for ac_dir in $PATH; do IFS=$ac_save_IFS # Account for people who put trailing slashes in PATH elements. case $ac_dir/ in / | ./ | .// | /cC/* \ | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ | /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if $as_executable_p "$ac_dir/$ac_prog"; then if test $ac_prog = install && grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:2333: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' case $INSTALL in (/*) ;; (*) cf_dir=`echo $INSTALL | sed -e 's%/[^/]*$%%'` test -z "$cf_dir" && cf_dir=. INSTALL=`cd $cf_dir && pwd`/`echo $INSTALL | sed -e 's%^.*/%%'` ;; esac for ac_prog in tdlint lint alint splint lclint do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2358: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LINT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LINT"; then ac_cv_prog_LINT="$LINT" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_LINT="$ac_prog" echo "$as_me:2373: found $ac_dir/$ac_word" >&5 break done fi fi LINT=$ac_cv_prog_LINT if test -n "$LINT"; then echo "$as_me:2381: result: $LINT" >&5 echo "${ECHO_T}$LINT" >&6 else echo "$as_me:2384: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LINT" && break done echo "$as_me:2391: checking if filesystem supports mixed-case filenames" >&5 echo $ECHO_N "checking if filesystem supports mixed-case filenames... $ECHO_C" >&6 if test "${cf_cv_mixedcase+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes ; then case $target_alias in (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*) cf_cv_mixedcase=no ;; (*) cf_cv_mixedcase=yes ;; esac else rm -f conftest CONFTEST echo test >conftest if test -f CONFTEST ; then cf_cv_mixedcase=no else cf_cv_mixedcase=yes fi rm -f conftest CONFTEST fi fi echo "$as_me:2418: result: $cf_cv_mixedcase" >&5 echo "${ECHO_T}$cf_cv_mixedcase" >&6 test "$cf_cv_mixedcase" = yes && cat >>confdefs.h <<\EOF #define MIXEDCASE_FILENAMES 1 EOF for ac_prog in exctags ctags do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2429: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CTAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CTAGS"; then ac_cv_prog_CTAGS="$CTAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CTAGS="$ac_prog" echo "$as_me:2444: found $ac_dir/$ac_word" >&5 break done fi fi CTAGS=$ac_cv_prog_CTAGS if test -n "$CTAGS"; then echo "$as_me:2452: result: $CTAGS" >&5 echo "${ECHO_T}$CTAGS" >&6 else echo "$as_me:2455: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CTAGS" && break done for ac_prog in exetags etags do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2466: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ETAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ETAGS"; then ac_cv_prog_ETAGS="$ETAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ETAGS="$ac_prog" echo "$as_me:2481: found $ac_dir/$ac_word" >&5 break done fi fi ETAGS=$ac_cv_prog_ETAGS if test -n "$ETAGS"; then echo "$as_me:2489: result: $ETAGS" >&5 echo "${ECHO_T}$ETAGS" >&6 else echo "$as_me:2492: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ETAGS" && break done # Extract the first word of "${CTAGS:-ctags}", so it can be a program name with args. set dummy ${CTAGS:-ctags}; ac_word=$2 echo "$as_me:2501: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE_LOWER_TAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE_LOWER_TAGS"; then ac_cv_prog_MAKE_LOWER_TAGS="$MAKE_LOWER_TAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_MAKE_LOWER_TAGS="yes" echo "$as_me:2516: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_MAKE_LOWER_TAGS" && ac_cv_prog_MAKE_LOWER_TAGS="no" fi fi MAKE_LOWER_TAGS=$ac_cv_prog_MAKE_LOWER_TAGS if test -n "$MAKE_LOWER_TAGS"; then echo "$as_me:2525: result: $MAKE_LOWER_TAGS" >&5 echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6 else echo "$as_me:2528: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$cf_cv_mixedcase" = yes ; then # Extract the first word of "${ETAGS:-etags}", so it can be a program name with args. set dummy ${ETAGS:-etags}; ac_word=$2 echo "$as_me:2535: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE_UPPER_TAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE_UPPER_TAGS"; then ac_cv_prog_MAKE_UPPER_TAGS="$MAKE_UPPER_TAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_MAKE_UPPER_TAGS="yes" echo "$as_me:2550: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_MAKE_UPPER_TAGS" && ac_cv_prog_MAKE_UPPER_TAGS="no" fi fi MAKE_UPPER_TAGS=$ac_cv_prog_MAKE_UPPER_TAGS if test -n "$MAKE_UPPER_TAGS"; then echo "$as_me:2559: result: $MAKE_UPPER_TAGS" >&5 echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6 else echo "$as_me:2562: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAKE_UPPER_TAGS=no fi if test "$MAKE_UPPER_TAGS" = yes ; then MAKE_UPPER_TAGS= else MAKE_UPPER_TAGS="#" fi if test "$MAKE_LOWER_TAGS" = yes ; then MAKE_LOWER_TAGS= else MAKE_LOWER_TAGS="#" fi echo "$as_me:2582: checking if -lm needed for math functions" >&5 echo $ECHO_N "checking if -lm needed for math functions... $ECHO_C" >&6 if test "${cf_cv_need_libm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2589 "configure" #include "confdefs.h" #include #include int main () { double x = rand(); printf("result = %g\n", pow(sin(x),x)) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:2604: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:2607: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:2610: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2613: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_need_libm=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_need_libm=yes fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:2623: result: $cf_cv_need_libm" >&5 echo "${ECHO_T}$cf_cv_need_libm" >&6 if test "$cf_cv_need_libm" = yes then MATH_LIB=-lm fi top_builddir=`pwd` CC_G_OPT="-g" CC_SHARED_OPTS=unknown CPPFLAGS="$CPPFLAGS" DFT_DEP_SUFFIX="" DFT_OBJ_SUBDIR=`pwd|sed -e's:.*/::'` DFT_UPR_MODEL="NORMAL" LD="ld" LDFLAGS_SHARED="" LDFLAGS_STATIC="" LD_MODEL="" LD_SHARED_OPTS="" LIBTOOL="" LIBTOOL_OPTS="" LIB_CLEAN="" LIB_COMPILE="" LIB_LINK='${CC}' LINK_TESTS="" LOCAL_LDFLAGS="" PACKAGE="ncurses-examples" PTHREAD="-lm" TEST_ARGS="" TEST_DEPS="" TEST_LIBS="" TINFO_LDFLAGS='' TINFO_LIBS='$(LIBS_CURSES)' cf_cv_abi_version="" cf_cv_rel_version="" includesubdir="" cf_cv_screen=curses cf_cv_libtype= if test "$GCC" = yes then cat > conftest.i <&5 echo "$as_me: checking for $CC __attribute__ directives..." >&6;} cat > conftest.$ac_ext <&5 case $cf_attribute in (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2737: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:2739: result: ... $cf_attribute" >&5 echo "${ECHO_T}... $cf_attribute" >&6 cat conftest.h >>confdefs.h case $cf_attribute in (noreturn) cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_PRINTF 1 EOF fi cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_SCANF 1 EOF fi cat >>confdefs.h <>confdefs.h <>confdefs.h fi rm -rf conftest* fi cf_XOPEN_SOURCE=500 cf_POSIX_C_SOURCE=199506L cf_xopen_source= case $host_os in (aix[4-7]*) cf_xopen_source="-D_ALL_SOURCE" ;; (cygwin|msys) cf_XOPEN_SOURCE=600 ;; (darwin[0-8].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; (darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; (freebsd*|dragonfly*) # 5.x headers associate # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L cf_POSIX_C_SOURCE=200112L cf_XOPEN_SOURCE=600 cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" ;; (hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; (hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; (irix[56].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; (linux*|gnu*|mint*|k*bsd*-gnu) echo "$as_me:2836: checking if we must define _GNU_SOURCE" >&5 echo $ECHO_N "checking if we must define _GNU_SOURCE... $ECHO_C" >&6 if test "${cf_cv_gnu_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2843 "configure" #include "confdefs.h" #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2858: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2861: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2864: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2867: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_gnu_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" cat >conftest.$ac_ext <<_ACEOF #line 2876 "configure" #include "confdefs.h" #include int main () { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2891: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2894: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2897: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2900: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_gnu_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_gnu_source=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:2915: result: $cf_cv_gnu_source" >&5 echo "${ECHO_T}$cf_cv_gnu_source" >&6 test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" ;; (minix*) cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... ;; (mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks and other headers which use u_int / u_short types cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` echo "$as_me:2940: checking if we should define _POSIX_C_SOURCE" >&5 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 if test "${cf_cv_posix_c_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else echo "${as_me:-configure}:2946: testing if the symbol is already defined go no further ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 2949 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2964: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2967: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2970: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2973: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_posix_c_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then cat >conftest.$ac_ext <<_ACEOF #line 2994 "configure" #include "confdefs.h" #include int main () { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3009: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3012: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3015: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3018: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "${as_me:-configure}:3029: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" echo "${as_me:-configure}:3034: testing if the second compile does not leave our definition intact error ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 3037 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3052: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3055: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3058: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3061: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source=no fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:3077: result: $cf_cv_posix_c_source" >&5 echo "${ECHO_T}$cf_cv_posix_c_source" >&6 if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_cv_posix_c_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi ;; (netbsd*) cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw ;; (openbsd[4-9]*) # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=600 ;; (openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; (os2*) cf_XOPEN_SOURCE= ;; (osf[45]*) cf_xopen_source="-D_OSF_SOURCE" ;; (nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; (sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; (solaris2.*) cf_xopen_source="-D__EXTENSIONS__" cf_cv_xopen_source=broken ;; (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2) cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE= ;; (*) echo "$as_me:3198: checking if we should define _XOPEN_SOURCE" >&5 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 if test "${cf_cv_xopen_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 3205 "configure" #include "confdefs.h" #include #include #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3224: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3227: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3230: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3233: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" cat >conftest.$ac_ext <<_ACEOF #line 3242 "configure" #include "confdefs.h" #include #include #include int main () { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3261: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3264: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3267: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3270: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:3285: result: $cf_cv_xopen_source" >&5 echo "${ECHO_T}$cf_cv_xopen_source" >&6 if test "$cf_cv_xopen_source" != no ; then CFLAGS=`echo "$CFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_temp_xopen_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` echo "$as_me:3393: checking if we should define _POSIX_C_SOURCE" >&5 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 if test "${cf_cv_posix_c_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else echo "${as_me:-configure}:3399: testing if the symbol is already defined go no further ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 3402 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3417: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3420: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3423: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3426: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_posix_c_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then cat >conftest.$ac_ext <<_ACEOF #line 3447 "configure" #include "confdefs.h" #include int main () { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3462: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3465: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3468: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3471: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "${as_me:-configure}:3482: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" echo "${as_me:-configure}:3487: testing if the second compile does not leave our definition intact error ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 3490 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3505: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3508: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3511: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3514: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source=no fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:3530: result: $cf_cv_posix_c_source" >&5 echo "${ECHO_T}$cf_cv_posix_c_source" >&6 if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_cv_posix_c_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi ;; esac if test -n "$cf_xopen_source" ; then cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_xopen_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 echo "${as_me:-configure}:3688: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6 echo "${as_me:-configure}:3696: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6 echo "${as_me:-configure}:3704: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then echo "$as_me:3712: checking if _XOPEN_SOURCE really is set" >&5 echo $ECHO_N "checking if _XOPEN_SOURCE really is set... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 3715 "configure" #include "confdefs.h" #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3730: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3733: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3736: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3739: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_XOPEN_SOURCE_set=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_XOPEN_SOURCE_set=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:3748: result: $cf_XOPEN_SOURCE_set" >&5 echo "${ECHO_T}$cf_XOPEN_SOURCE_set" >&6 if test $cf_XOPEN_SOURCE_set = yes then cat >conftest.$ac_ext <<_ACEOF #line 3753 "configure" #include "confdefs.h" #include int main () { #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3768: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3771: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3774: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3777: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_XOPEN_SOURCE_set_ok=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_XOPEN_SOURCE_set_ok=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test $cf_XOPEN_SOURCE_set_ok = no then { echo "$as_me:3788: WARNING: _XOPEN_SOURCE is lower than requested" >&5 echo "$as_me: WARNING: _XOPEN_SOURCE is lower than requested" >&2;} fi else echo "$as_me:3793: checking if we should define _XOPEN_SOURCE" >&5 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 if test "${cf_cv_xopen_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 3800 "configure" #include "confdefs.h" #include #include #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3819: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3822: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3825: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3828: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" cat >conftest.$ac_ext <<_ACEOF #line 3837 "configure" #include "confdefs.h" #include #include #include int main () { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:3856: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3859: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:3862: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3865: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:3880: result: $cf_cv_xopen_source" >&5 echo "${ECHO_T}$cf_cv_xopen_source" >&6 if test "$cf_cv_xopen_source" != no ; then CFLAGS=`echo "$CFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_temp_xopen_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi fi fi echo "$as_me:3978: checking for signal global datatype" >&5 echo $ECHO_N "checking for signal global datatype... $ECHO_C" >&6 if test "${cf_cv_sig_atomic_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else for cf_type in \ "volatile sig_atomic_t" \ "sig_atomic_t" \ "int" do cat >conftest.$ac_ext <<_ACEOF #line 3990 "configure" #include "confdefs.h" #include #include #include extern $cf_type x; $cf_type x; static void handler(int sig) { x = 5; } int main () { signal(SIGINT, handler); x = 1 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:4013: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4016: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:4019: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4022: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_sig_atomic_t=$cf_type else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_sig_atomic_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_sig_atomic_t" != no && break done fi echo "$as_me:4036: result: $cf_cv_sig_atomic_t" >&5 echo "${ECHO_T}$cf_cv_sig_atomic_t" >&6 test "$cf_cv_sig_atomic_t" != no && cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to use pkg-config... $ECHO_C" >&6 # Check whether --with-pkg-config or --without-pkg-config was given. if test "${with_pkg_config+set}" = set; then withval="$with_pkg_config" cf_pkg_config=$withval else cf_pkg_config=yes fi; echo "$as_me:4053: result: $cf_pkg_config" >&5 echo "${ECHO_T}$cf_pkg_config" >&6 case $cf_pkg_config in (no) PKG_CONFIG=none ;; (yes) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 echo "$as_me:4065: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word" echo "$as_me:4082: found $ac_dir/$ac_word" >&5 break fi done ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:4093: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:4096: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:4105: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_ac_pt_PKG_CONFIG="$ac_dir/$ac_word" echo "$as_me:4122: found $ac_dir/$ac_word" >&5 break fi done test -z "$ac_cv_path_ac_pt_PKG_CONFIG" && ac_cv_path_ac_pt_PKG_CONFIG="none" ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then echo "$as_me:4134: result: $ac_pt_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6 else echo "$as_me:4137: result: no" >&5 echo "${ECHO_T}no" >&6 fi PKG_CONFIG=$ac_pt_PKG_CONFIG else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi ;; (*) PKG_CONFIG=$withval ;; esac test -z "$PKG_CONFIG" && PKG_CONFIG=none if test "$PKG_CONFIG" != none ; then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$PKG_CONFIG" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval PKG_CONFIG="$PKG_CONFIG" case ".$PKG_CONFIG" in (.NONE/*) PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:4180: error: expected a pathname, not \"$PKG_CONFIG\"" >&5 echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG\"" >&2;} { (exit 1); exit 1; }; } ;; esac elif test "x$cf_pkg_config" != xno ; then { echo "$as_me:4187: WARNING: pkg-config is not installed" >&5 echo "$as_me: WARNING: pkg-config is not installed" >&2;} fi echo "$as_me:4191: checking if you want to see long compiling messages" >&5 echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6 # Check whether --enable-echo or --disable-echo was given. if test "${enable_echo+set}" = set; then enableval="$enable_echo" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then ECHO_LT='--silent' ECHO_LD='@echo linking $@;' RULE_CC='@echo compiling $<' SHOW_CC='@echo compiling $@' ECHO_CC='@' else ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' fi else enableval=yes ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' fi; echo "$as_me:4225: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 echo "$as_me:4228: checking for ncurses wrap-prefix" >&5 echo $ECHO_N "checking for ncurses wrap-prefix... $ECHO_C" >&6 # Check whether --with-ncurses-wrap-prefix or --without-ncurses-wrap-prefix was given. if test "${with_ncurses_wrap_prefix+set}" = set; then withval="$with_ncurses_wrap_prefix" NCURSES_WRAP_PREFIX=$withval else NCURSES_WRAP_PREFIX=_nc_ fi; echo "$as_me:4238: result: $NCURSES_WRAP_PREFIX" >&5 echo "${ECHO_T}$NCURSES_WRAP_PREFIX" >&6 echo "$as_me:4241: checking if you want to check for wide-character functions" >&5 echo $ECHO_N "checking if you want to check for wide-character functions... $ECHO_C" >&6 # Check whether --enable-widec or --disable-widec was given. if test "${enable_widec+set}" = set; then enableval="$enable_widec" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then cf_enable_widec=no else cf_enable_widec=yes fi else enableval=yes cf_enable_widec=yes fi; echo "$as_me:4258: result: $cf_enable_widec" >&5 echo "${ECHO_T}$cf_enable_widec" >&6 echo "$as_me:4261: checking for specific curses-directory" >&5 echo $ECHO_N "checking for specific curses-directory... $ECHO_C" >&6 # Check whether --with-curses-dir or --without-curses-dir was given. if test "${with_curses_dir+set}" = set; then withval="$with_curses_dir" cf_cv_curses_dir=$withval else cf_cv_curses_dir=no fi; echo "$as_me:4271: result: $cf_cv_curses_dir" >&5 echo "${ECHO_T}$cf_cv_curses_dir" >&6 if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$withval" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval withval="$withval" case ".$withval" in (.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:4302: error: expected a pathname, not \"$withval\"" >&5 echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} { (exit 1); exit 1; }; } ;; esac if test -d "$cf_cv_curses_dir" then if test -n "$cf_cv_curses_dir/include" ; then for cf_add_incdir in $cf_cv_curses_dir/include do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 4335 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:4347: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4350: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:4353: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4356: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:4373: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi if test -n "$cf_cv_curses_dir/lib" ; then for cf_add_libdir in $cf_cv_curses_dir/lib do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:4409: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi fi fi cf_cv_screen=curses echo "$as_me:4422: checking for specified curses library type" >&5 echo $ECHO_N "checking for specified curses library type... $ECHO_C" >&6 # Check whether --with-screen or --without-screen was given. if test "${with_screen+set}" = set; then withval="$with_screen" cf_cv_screen=$withval else # Check whether --with-ncursesw or --without-ncursesw was given. if test "${with_ncursesw+set}" = set; then withval="$with_ncursesw" cf_cv_screen=ncursesw else # Check whether --with-ncurses or --without-ncurses was given. if test "${with_ncurses+set}" = set; then withval="$with_ncurses" cf_cv_screen=ncurses else # Check whether --with-pdcurses or --without-pdcurses was given. if test "${with_pdcurses+set}" = set; then withval="$with_pdcurses" cf_cv_screen=pdcurses else # Check whether --with-curses-colr or --without-curses-colr was given. if test "${with_curses_colr+set}" = set; then withval="$with_curses_colr" cf_cv_screen=curses_colr else # Check whether --with-curses-5lib or --without-curses-5lib was given. if test "${with_curses_5lib+set}" = set; then withval="$with_curses_5lib" cf_cv_screen=curses_5lib fi; fi; fi; fi; fi; fi; echo "$as_me:4466: result: $cf_cv_screen" >&5 echo "${ECHO_T}$cf_cv_screen" >&6 case $cf_cv_screen in (curses|curses_*) echo "$as_me:4472: checking for extra include directories" >&5 echo $ECHO_N "checking for extra include directories... $ECHO_C" >&6 if test "${cf_cv_curses_incdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_curses_incdir=no case $host_os in (hpux10.*) if test "x$cf_cv_screen" = "xcurses_colr" then test -d /usr/include/curses_colr && \ cf_cv_curses_incdir="-I/usr/include/curses_colr" fi ;; (sunos3*|sunos4*) if test "x$cf_cv_screen" = "xcurses_5lib" then test -d /usr/5lib && \ test -d /usr/5include && \ cf_cv_curses_incdir="-I/usr/5include" fi ;; esac fi echo "$as_me:4498: result: $cf_cv_curses_incdir" >&5 echo "${ECHO_T}$cf_cv_curses_incdir" >&6 test "$cf_cv_curses_incdir" != no && CPPFLAGS="$CPPFLAGS $cf_cv_curses_incdir" echo "$as_me:4502: checking if we have identified curses headers" >&5 echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 if test "${cf_cv_ncurses_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_header=none for cf_header in \ ncurses.h \ curses.h ncurses/ncurses.h ncurses/curses.h do cat >conftest.$ac_ext <<_ACEOF #line 4514 "configure" #include "confdefs.h" #include <${cf_header}> int main () { initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:4526: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4529: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:4532: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4535: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_header=$cf_header; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:4546: result: $cf_cv_ncurses_header" >&5 echo "${ECHO_T}$cf_cv_ncurses_header" >&6 if test "$cf_cv_ncurses_header" = none ; then { { echo "$as_me:4550: error: No curses header-files found" >&5 echo "$as_me: error: No curses header-files found" >&2;} { (exit 1); exit 1; }; } fi # cheat, to get the right #define's for HAVE_NCURSES_H, etc. for ac_header in $cf_cv_ncurses_header do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:4560: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 4566 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:4570: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:4576: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:4595: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case ${cf_cv_ncurses_header} in (*/ncurses.h|*/ncursesw.h) cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` ;; (*) cf_term_header=term.h ;; esac for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" do cat >conftest.$ac_ext <<_ACEOF #line 4623 "configure" #include "confdefs.h" #include #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> int main () { int x = auto_left_margin ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:4638: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4641: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:4644: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4647: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_term_header=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_term_header" != unknown && break done fi echo "$as_me:4663: result: $cf_cv_term_header" >&5 echo "${ECHO_T}$cf_cv_term_header" >&6 # Set definitions to allow ifdef'ing to accommodate subdirectories case $cf_cv_term_header in (*term.h) cat >>confdefs.h <<\EOF #define HAVE_TERM_H 1 EOF ;; esac case $cf_cv_term_header in (ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; (ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac echo "$as_me:4695: checking for ncurses version" >&5 echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 if test "${cf_cv_ncurses_version+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_version=no cf_tempfile=out$$ rm -f $cf_tempfile if test "$cross_compiling" = yes; then # This will not work if the preprocessor splits the line after the # Autoconf token. The 'unproto' program does that. cat > conftest.$ac_ext < #undef Autoconf #ifdef NCURSES_VERSION Autoconf NCURSES_VERSION #else #ifdef __NCURSES_H Autoconf "old" #endif ; #endif EOF cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" { (eval echo "$as_me:4721: \"$cf_try\"") >&5 (eval $cf_try) 2>&5 ac_status=$? echo "$as_me:4724: \$? = $ac_status" >&5 (exit $ac_status); } if test -f conftest.out ; then cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" rm -f conftest.out fi else cat >conftest.$ac_ext <<_ACEOF #line 4734 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include int main() { FILE *fp = fopen("$cf_tempfile", "w"); #ifdef NCURSES_VERSION # ifdef NCURSES_VERSION_PATCH fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); # else fprintf(fp, "%s\n", NCURSES_VERSION); # endif #else # ifdef __NCURSES_H fprintf(fp, "old\n"); # else make an error # endif #endif ${cf_cv_main_return:-return}(0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:4759: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:4762: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:4764: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4767: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_version=`cat $cf_tempfile` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f $cf_tempfile fi echo "$as_me:4781: result: $cf_cv_ncurses_version" >&5 echo "${ECHO_T}$cf_cv_ncurses_version" >&6 test "$cf_cv_ncurses_version" = no || cat >>confdefs.h <<\EOF #define NCURSES 1 EOF echo "$as_me:4788: checking if we have identified curses libraries" >&5 echo $ECHO_N "checking if we have identified curses libraries... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 4791 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:4803: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:4806: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:4809: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4812: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:4821: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test "$cf_result" = no ; then case $host_os in (freebsd*) echo "$as_me:4827: checking for tgoto in -lmytinfo" >&5 echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmytinfo $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 4835 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char tgoto (); int main () { tgoto (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:4854: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:4857: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:4860: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4863: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_mytinfo_tgoto=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_mytinfo_tgoto=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:4874: result: $ac_cv_lib_mytinfo_tgoto" >&5 echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 if test $ac_cv_lib_mytinfo_tgoto = yes; then cf_add_libs="-lmytinfo" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi ;; (hpux10.*) # Looking at HPUX 10.20, the Hcurses library is the oldest (1997), cur_colr # next (1998), and xcurses "newer" (2000). There is no header file for # Hcurses; the subdirectory curses_colr has the headers (curses.h and # term.h) for cur_colr if test "x$cf_cv_screen" = "xcurses_colr" then echo "$as_me:4904: checking for initscr in -lcur_colr" >&5 echo $ECHO_N "checking for initscr in -lcur_colr... $ECHO_C" >&6 if test "${ac_cv_lib_cur_colr_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcur_colr $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 4912 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:4931: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:4934: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:4937: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4940: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_cur_colr_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_cur_colr_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:4951: result: $ac_cv_lib_cur_colr_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_cur_colr_initscr" >&6 if test $ac_cv_lib_cur_colr_initscr = yes; then cf_add_libs="-lcur_colr" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" ac_cv_func_initscr=yes else echo "$as_me:4975: checking for initscr in -lHcurses" >&5 echo $ECHO_N "checking for initscr in -lHcurses... $ECHO_C" >&6 if test "${ac_cv_lib_Hcurses_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lHcurses $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 4983 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5002: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5005: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5008: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5011: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_Hcurses_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_Hcurses_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:5022: result: $ac_cv_lib_Hcurses_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_Hcurses_initscr" >&6 if test $ac_cv_lib_Hcurses_initscr = yes; then # HP's header uses __HP_CURSES, but user claims _HP_CURSES. cf_add_libs="-lHcurses" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" CPPFLAGS="$CPPFLAGS -D__HP_CURSES -D_HP_CURSES" ac_cv_func_initscr=yes fi fi fi ;; (linux*) case `arch 2>/dev/null` in (x86_64) if test -d /lib64 then if test -n "/lib64" ; then for cf_add_libdir in /lib64 do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:5078: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi else if test -n "/lib" ; then for cf_add_libdir in /lib do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:5107: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi fi ;; (*) if test -n "/lib" ; then for cf_add_libdir in /lib do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:5138: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi ;; esac ;; (sunos3*|sunos4*) if test "x$cf_cv_screen" = "xcurses_5lib" then if test -d /usr/5lib ; then if test -n "/usr/5lib" ; then for cf_add_libdir in /usr/5lib do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:5173: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi cf_add_libs="-lcurses -ltermcap" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi fi ac_cv_func_initscr=yes ;; esac if test ".$ac_cv_func_initscr" != .yes ; then cf_save_LIBS="$LIBS" if test ".${cf_cv_ncurses_version:-no}" != .no then cf_check_list="ncurses curses cursesX" else cf_check_list="cursesX curses ncurses" fi # Check for library containing tgoto. Do this before curses library # because it may be needed to link the test-case for initscr. if test "x$cf_term_lib" = x then echo "$as_me:5217: checking for tgoto" >&5 echo $ECHO_N "checking for tgoto... $ECHO_C" >&6 if test "${ac_cv_func_tgoto+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 5223 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char tgoto (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char tgoto (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_tgoto) || defined (__stub___tgoto) choke me #else f = tgoto; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5254: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5257: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5260: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5263: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_tgoto=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_tgoto=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:5273: result: $ac_cv_func_tgoto" >&5 echo "${ECHO_T}$ac_cv_func_tgoto" >&6 if test $ac_cv_func_tgoto = yes; then cf_term_lib=predefined else for cf_term_lib in $cf_check_list otermcap termcap tinfo termlib unknown do as_ac_Lib=`echo "ac_cv_lib_$cf_term_lib''_tgoto" | $as_tr_sh` echo "$as_me:5282: checking for tgoto in -l$cf_term_lib" >&5 echo $ECHO_N "checking for tgoto in -l$cf_term_lib... $ECHO_C" >&6 if eval "test \"\${$as_ac_Lib+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$cf_term_lib $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5290 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char tgoto (); int main () { tgoto (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5309: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5312: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5315: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5318: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:5329: result: `eval echo '${'$as_ac_Lib'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 if test `eval echo '${'$as_ac_Lib'}'` = yes; then break fi done fi fi # Check for library containing initscr test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" if test "x$cf_curs_lib" = x then for cf_curs_lib in $cf_check_list xcurses jcurses pdcurses unknown do as_ac_Lib=`echo "ac_cv_lib_$cf_curs_lib''_initscr" | $as_tr_sh` echo "$as_me:5348: checking for initscr in -l$cf_curs_lib" >&5 echo $ECHO_N "checking for initscr in -l$cf_curs_lib... $ECHO_C" >&6 if eval "test \"\${$as_ac_Lib+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$cf_curs_lib $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5356 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5375: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5378: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5381: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5384: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:5395: result: `eval echo '${'$as_ac_Lib'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 if test `eval echo '${'$as_ac_Lib'}'` = yes; then break fi done fi test $cf_curs_lib = unknown && { { echo "$as_me:5403: error: no curses library found" >&5 echo "$as_me: error: no curses library found" >&2;} { (exit 1); exit 1; }; } LIBS="-l$cf_curs_lib $cf_save_LIBS" if test "$cf_term_lib" = unknown ; then echo "$as_me:5409: checking if we can link with $cf_curs_lib library" >&5 echo $ECHO_N "checking if we can link with $cf_curs_lib library... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 5412 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5424: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5427: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5430: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5433: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:5442: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 test $cf_result = no && { { echo "$as_me:5444: error: Cannot link curses library" >&5 echo "$as_me: error: Cannot link curses library" >&2;} { (exit 1); exit 1; }; } elif test "$cf_curs_lib" = "$cf_term_lib" ; then : elif test "$cf_term_lib" != predefined ; then echo "$as_me:5450: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5 echo $ECHO_N "checking if we need both $cf_curs_lib and $cf_term_lib libraries... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 5453 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5465: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5468: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5471: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5474: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5483 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5495: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5498: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5501: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5504: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=error fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:5516: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 fi fi fi ;; (ncursesw*) echo "$as_me:5525: checking for multibyte character support" >&5 echo $ECHO_N "checking for multibyte character support... $ECHO_C" >&6 if test "${cf_cv_utf8_lib+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save_LIBS="$LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5533 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5546: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5549: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5552: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5555: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_utf8_lib=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these # will be set on completion of the AC_TRY_LINK below. cf_cv_header_path_utf8= cf_cv_library_path_utf8= echo "${as_me:-configure}:5567: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5 cf_save_LIBS="$LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5572 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5585: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5588: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5591: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5594: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_find_linkage_utf8=yes cf_cv_header_path_utf8=/usr/include cf_cv_library_path_utf8=/usr/lib else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 LIBS="-lutf8 $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5608 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5621: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5624: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5627: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5630: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_find_linkage_utf8=yes cf_cv_header_path_utf8=/usr/include cf_cv_library_path_utf8=/usr/lib cf_cv_library_file_utf8="-lutf8" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_find_linkage_utf8=no LIBS="$cf_save_LIBS" test -n "$verbose" && echo " find linkage for utf8 library" 1>&6 echo "${as_me:-configure}:5647: testing find linkage for utf8 library ..." 1>&5 echo "${as_me:-configure}:5649: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5 cf_save_CPPFLAGS="$CPPFLAGS" cf_test_CPPFLAGS="$CPPFLAGS" cf_search= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` test "x$cf_header_path" != "xNONE" && \ test -d "$cf_header_path" && \ { test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" test -d $cf_header_path/include/utf8 && cf_search="$cf_search $cf_header_path/include/utf8" test -d $cf_header_path/include/utf8/include && cf_search="$cf_search $cf_header_path/include/utf8/include" test -d $cf_header_path/utf8/include && cf_search="$cf_search $cf_header_path/utf8/include" test -d $cf_header_path/utf8/include/utf8 && cf_search="$cf_search $cf_header_path/utf8/include/utf8" } cf_header_path_list="$cf_header_path_list $cf_search" ;; esac done fi # add the variations for the package we are looking for cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for include-directories under $prefix" test -d $prefix/include && cf_search="$cf_search $prefix/include" test -d $prefix/include/utf8 && cf_search="$cf_search $prefix/include/utf8" test -d $prefix/include/utf8/include && cf_search="$cf_search $prefix/include/utf8/include" test -d $prefix/utf8/include && cf_search="$cf_search $prefix/utf8/include" test -d $prefix/utf8/include/utf8 && cf_search="$cf_search $prefix/utf8/include/utf8" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" test -d $cf_subdir_prefix/include/utf8 && cf_search="$cf_search $cf_subdir_prefix/include/utf8" test -d $cf_subdir_prefix/include/utf8/include && cf_search="$cf_search $cf_subdir_prefix/include/utf8/include" test -d $cf_subdir_prefix/utf8/include && cf_search="$cf_search $cf_subdir_prefix/utf8/include" test -d $cf_subdir_prefix/utf8/include/utf8 && cf_search="$cf_search $cf_subdir_prefix/utf8/include/utf8" } done test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && cf_search="$cf_search $includedir" test -d $includedir/utf8 && cf_search="$cf_search $includedir/utf8" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && cf_search="$cf_search $oldincludedir" test -d $oldincludedir/utf8 && cf_search="$cf_search $oldincludedir/utf8" } cf_search="$cf_search $cf_header_path_list" for cf_cv_header_path_utf8 in $cf_search do if test -d $cf_cv_header_path_utf8 ; then test -n "$verbose" && echo " ... testing $cf_cv_header_path_utf8" 1>&6 echo "${as_me:-configure}:5740: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5 CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_utf8" cat >conftest.$ac_ext <<_ACEOF #line 5744 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:5757: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5760: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:5763: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5766: \$? = $ac_status" >&5 (exit $ac_status); }; }; then test -n "$verbose" && echo " ... found utf8 headers in $cf_cv_header_path_utf8" 1>&6 echo "${as_me:-configure}:5771: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5 cf_cv_find_linkage_utf8=maybe cf_test_CPPFLAGS="$CPPFLAGS" break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext fi done if test "$cf_cv_find_linkage_utf8" = maybe ; then echo "${as_me:-configure}:5789: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5 cf_save_LIBS="$LIBS" cf_save_LDFLAGS="$LDFLAGS" if test "$cf_cv_find_linkage_utf8" != yes ; then cf_search= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` test "x$cf_library_path" != "xNONE" && \ test -d "$cf_library_path" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" test -d $cf_library_path/lib/utf8 && cf_search="$cf_search $cf_library_path/lib/utf8" test -d $cf_library_path/lib/utf8/lib && cf_search="$cf_search $cf_library_path/lib/utf8/lib" test -d $cf_library_path/utf8/lib && cf_search="$cf_search $cf_library_path/utf8/lib" test -d $cf_library_path/utf8/lib/utf8 && cf_search="$cf_search $cf_library_path/utf8/lib/utf8" } cf_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $prefix" test -d $prefix/lib && cf_search="$cf_search $prefix/lib" test -d $prefix/lib/utf8 && cf_search="$cf_search $prefix/lib/utf8" test -d $prefix/lib/utf8/lib && cf_search="$cf_search $prefix/lib/utf8/lib" test -d $prefix/utf8/lib && cf_search="$cf_search $prefix/utf8/lib" test -d $prefix/utf8/lib/utf8 && cf_search="$cf_search $prefix/utf8/lib/utf8" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" test -d $cf_subdir_prefix/lib/utf8 && cf_search="$cf_search $cf_subdir_prefix/lib/utf8" test -d $cf_subdir_prefix/lib/utf8/lib && cf_search="$cf_search $cf_subdir_prefix/lib/utf8/lib" test -d $cf_subdir_prefix/utf8/lib && cf_search="$cf_search $cf_subdir_prefix/utf8/lib" test -d $cf_subdir_prefix/utf8/lib/utf8 && cf_search="$cf_search $cf_subdir_prefix/utf8/lib/utf8" } done cf_search="$cf_library_path_list $cf_search" for cf_cv_library_path_utf8 in $cf_search do if test -d $cf_cv_library_path_utf8 ; then test -n "$verbose" && echo " ... testing $cf_cv_library_path_utf8" 1>&6 echo "${as_me:-configure}:5864: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5 CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-lutf8 $cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_utf8" cat >conftest.$ac_ext <<_ACEOF #line 5870 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5883: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5886: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5889: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5892: \$? = $ac_status" >&5 (exit $ac_status); }; }; then test -n "$verbose" && echo " ... found utf8 library in $cf_cv_library_path_utf8" 1>&6 echo "${as_me:-configure}:5897: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5 cf_cv_find_linkage_utf8=yes cf_cv_library_file_utf8="-lutf8" break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi done CPPFLAGS="$cf_save_CPPFLAGS" LDFLAGS="$cf_save_LDFLAGS" fi else cf_cv_find_linkage_utf8=no fi fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save_LIBS" if test "$cf_cv_find_linkage_utf8" = yes ; then cf_cv_utf8_lib=add-on else cf_cv_utf8_lib=no fi fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:5939: result: $cf_cv_utf8_lib" >&5 echo "${ECHO_T}$cf_cv_utf8_lib" >&6 # HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between # ncurses/ncursesw: if test "$cf_cv_utf8_lib" = "add-on" ; then cat >>confdefs.h <<\EOF #define HAVE_LIBUTF8_H 1 EOF if test -n "$cf_cv_header_path_utf8" ; then for cf_add_incdir in $cf_cv_header_path_utf8 do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 5974 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:5986: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5989: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:5992: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5995: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:6012: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi if test -n "$cf_cv_library_path_utf8" ; then for cf_add_libdir in $cf_cv_library_path_utf8 do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:6048: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi cf_add_libs="$cf_cv_library_file_utf8" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi cf_ncuconfig_root=$cf_cv_screen cf_have_ncuconfig=no if test "x${PKG_CONFIG:=none}" != xnone; then echo "$as_me:6078: checking pkg-config for $cf_ncuconfig_root" >&5 echo $ECHO_N "checking pkg-config for $cf_ncuconfig_root... $ECHO_C" >&6 if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then echo "$as_me:6081: result: yes" >&5 echo "${ECHO_T}yes" >&6 echo "$as_me:6084: checking if the $cf_ncuconfig_root package files work" >&5 echo $ECHO_N "checking if the $cf_ncuconfig_root package files work... $ECHO_C" >&6 cf_have_ncuconfig=unknown cf_save_CPPFLAGS="$CPPFLAGS" cf_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags $cf_ncuconfig_root`" cf_add_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 6110 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:6122: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:6125: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:6128: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6131: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if test "$cross_compiling" = yes; then cf_have_ncuconfig=maybe else cat >conftest.$ac_ext <<_ACEOF #line 6137 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main(void) { char *xx = curses_version(); return (xx == 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:6144: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:6147: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:6149: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6152: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_have_ncuconfig=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_ncuconfig=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_ncuconfig=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:6169: result: $cf_have_ncuconfig" >&5 echo "${ECHO_T}$cf_have_ncuconfig" >&6 test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes if test "$cf_have_ncuconfig" != "yes" then CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" NCURSES_CONFIG_PKG=none else cat >>confdefs.h <<\EOF #define NCURSES 1 EOF NCURSES_CONFIG_PKG=$cf_ncuconfig_root fi else echo "$as_me:6187: result: no" >&5 echo "${ECHO_T}no" >&6 NCURSES_CONFIG_PKG=none fi else NCURSES_CONFIG_PKG=none fi if test "x$cf_have_ncuconfig" = "xno"; then echo "Looking for ${cf_ncuconfig_root}-config" if test -n "$ac_tool_prefix"; then for ac_prog in ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:6203: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NCURSES_CONFIG"; then ac_cv_prog_NCURSES_CONFIG="$NCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_NCURSES_CONFIG="$ac_tool_prefix$ac_prog" echo "$as_me:6218: found $ac_dir/$ac_word" >&5 break done fi fi NCURSES_CONFIG=$ac_cv_prog_NCURSES_CONFIG if test -n "$NCURSES_CONFIG"; then echo "$as_me:6226: result: $NCURSES_CONFIG" >&5 echo "${ECHO_T}$NCURSES_CONFIG" >&6 else echo "$as_me:6229: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$NCURSES_CONFIG" && break done fi if test -z "$NCURSES_CONFIG"; then ac_ct_NCURSES_CONFIG=$NCURSES_CONFIG for ac_prog in ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:6242: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_NCURSES_CONFIG"; then ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_ct_NCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_prog" echo "$as_me:6257: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_NCURSES_CONFIG=$ac_cv_prog_ac_ct_NCURSES_CONFIG if test -n "$ac_ct_NCURSES_CONFIG"; then echo "$as_me:6265: result: $ac_ct_NCURSES_CONFIG" >&5 echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6 else echo "$as_me:6268: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_NCURSES_CONFIG" && break done test -n "$ac_ct_NCURSES_CONFIG" || ac_ct_NCURSES_CONFIG="none" NCURSES_CONFIG=$ac_ct_NCURSES_CONFIG fi if test "$NCURSES_CONFIG" != none ; then CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" cf_add_libs="`$NCURSES_CONFIG --libs`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" # even with config script, some packages use no-override for curses.h echo "$as_me:6301: checking if we have identified curses headers" >&5 echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 if test "${cf_cv_ncurses_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_header=none for cf_header in \ ncurses.h $cf_cv_screen/ncurses.h \ curses.h $cf_cv_screen/curses.h do cat >conftest.$ac_ext <<_ACEOF #line 6313 "configure" #include "confdefs.h" #include <${cf_header}> int main () { initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6325: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6328: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6331: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6334: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_header=$cf_header; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:6345: result: $cf_cv_ncurses_header" >&5 echo "${ECHO_T}$cf_cv_ncurses_header" >&6 if test "$cf_cv_ncurses_header" = none ; then { { echo "$as_me:6349: error: No curses header-files found" >&5 echo "$as_me: error: No curses header-files found" >&2;} { (exit 1); exit 1; }; } fi # cheat, to get the right #define's for HAVE_NCURSES_H, etc. for ac_header in $cf_cv_ncurses_header do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:6359: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 6365 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:6369: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:6375: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:6394: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <conftest.$ac_ext <<_ACEOF #line 6447 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6459: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6462: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6465: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6468: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:6485: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi } echo "$as_me:6504: checking for $cf_ncuhdr_root header in include-path" >&5 echo $ECHO_N "checking for $cf_ncuhdr_root header in include-path... $ECHO_C" >&6 if test "${cf_cv_ncurses_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" for cf_header in $cf_header_list do cat >conftest.$ac_ext <<_ACEOF #line 6516 "configure" #include "confdefs.h" #include <$cf_header> int main () { #ifdef NCURSES_VERSION printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6540: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6543: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6546: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6549: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_h=$cf_header else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_h=no fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_ncurses_h" != no && break done fi echo "$as_me:6564: result: $cf_cv_ncurses_h" >&5 echo "${ECHO_T}$cf_cv_ncurses_h" >&6 if test "$cf_cv_ncurses_h" != no ; then cf_cv_ncurses_header=$cf_cv_ncurses_h else echo "$as_me:6571: checking for $cf_ncuhdr_root include-path" >&5 echo $ECHO_N "checking for $cf_ncuhdr_root include-path... $ECHO_C" >&6 if test "${cf_cv_ncurses_h2+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test -n "$verbose" && echo cf_search= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` test "x$cf_header_path" != "xNONE" && \ test -d "$cf_header_path" && \ { test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" test -d $cf_header_path/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root" test -d $cf_header_path/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root/include" test -d $cf_header_path/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include" test -d $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } cf_header_path_list="$cf_header_path_list $cf_search" ;; esac done fi # add the variations for the package we are looking for cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for include-directories under $prefix" test -d $prefix/include && cf_search="$cf_search $prefix/include" test -d $prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root" test -d $prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root/include" test -d $prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include" test -d $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" test -d $cf_subdir_prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root" test -d $cf_subdir_prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root/include" test -d $cf_subdir_prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include" test -d $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } done test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && cf_search="$cf_search $includedir" test -d $includedir/$cf_ncuhdr_root && cf_search="$cf_search $includedir/$cf_ncuhdr_root" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && cf_search="$cf_search $oldincludedir" test -d $oldincludedir/$cf_ncuhdr_root && cf_search="$cf_search $oldincludedir/$cf_ncuhdr_root" } cf_search="$cf_search $cf_header_path_list" test -n "$verbose" && echo search path $cf_search cf_save2_CPPFLAGS="$CPPFLAGS" for cf_incdir in $cf_search do if test -n "$cf_incdir" ; then for cf_add_incdir in $cf_incdir do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 6689 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6701: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6704: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6707: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6710: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:6727: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi for cf_header in \ ncurses.h \ curses.h do cat >conftest.$ac_ext <<_ACEOF #line 6750 "configure" #include "confdefs.h" #include <$cf_header> int main () { #ifdef NCURSES_VERSION printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6774: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6777: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6780: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6783: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_h2=$cf_header else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_h2=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test "$cf_cv_ncurses_h2" != no ; then cf_cv_ncurses_h2=$cf_incdir/$cf_header test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&6 break fi test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&6 done CPPFLAGS="$cf_save2_CPPFLAGS" test "$cf_cv_ncurses_h2" != no && break done test "$cf_cv_ncurses_h2" = no && { { echo "$as_me:6804: error: not found" >&5 echo "$as_me: error: not found" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:6809: result: $cf_cv_ncurses_h2" >&5 echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 cf_1st_incdir=`echo $cf_cv_ncurses_h2 | sed -e 's%/[^/]*$%%'` cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header fi if test -n "$cf_1st_incdir" ; then for cf_add_incdir in $cf_1st_incdir do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 6842 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6854: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6857: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6860: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6863: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:6880: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi fi # Set definitions to allow ifdef'ing for ncurses.h case $cf_cv_ncurses_header in (*ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_H 1 EOF ;; esac case $cf_cv_ncurses_header in (ncurses/curses.h|ncurses/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_NCURSES_H 1 EOF ;; (ncursesw/curses.h|ncursesw/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_NCURSES_H 1 EOF ;; esac echo "$as_me:6928: checking for terminfo header" >&5 echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case ${cf_cv_ncurses_header} in (*/ncurses.h|*/ncursesw.h) cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` ;; (*) cf_term_header=term.h ;; esac for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" do cat >conftest.$ac_ext <<_ACEOF #line 6946 "configure" #include "confdefs.h" #include #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> int main () { int x = auto_left_margin ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6961: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6964: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6967: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6970: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_term_header=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_term_header" != unknown && break done fi echo "$as_me:6986: result: $cf_cv_term_header" >&5 echo "${ECHO_T}$cf_cv_term_header" >&6 # Set definitions to allow ifdef'ing to accommodate subdirectories case $cf_cv_term_header in (*term.h) cat >>confdefs.h <<\EOF #define HAVE_TERM_H 1 EOF ;; esac case $cf_cv_term_header in (ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; (ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac # some applications need this, but should check for NCURSES_VERSION cat >>confdefs.h <<\EOF #define NCURSES 1 EOF echo "$as_me:7024: checking for ncurses version" >&5 echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 if test "${cf_cv_ncurses_version+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_version=no cf_tempfile=out$$ rm -f $cf_tempfile if test "$cross_compiling" = yes; then # This will not work if the preprocessor splits the line after the # Autoconf token. The 'unproto' program does that. cat > conftest.$ac_ext < #undef Autoconf #ifdef NCURSES_VERSION Autoconf NCURSES_VERSION #else #ifdef __NCURSES_H Autoconf "old" #endif ; #endif EOF cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" { (eval echo "$as_me:7050: \"$cf_try\"") >&5 (eval $cf_try) 2>&5 ac_status=$? echo "$as_me:7053: \$? = $ac_status" >&5 (exit $ac_status); } if test -f conftest.out ; then cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" rm -f conftest.out fi else cat >conftest.$ac_ext <<_ACEOF #line 7063 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include int main() { FILE *fp = fopen("$cf_tempfile", "w"); #ifdef NCURSES_VERSION # ifdef NCURSES_VERSION_PATCH fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); # else fprintf(fp, "%s\n", NCURSES_VERSION); # endif #else # ifdef __NCURSES_H fprintf(fp, "old\n"); # else make an error # endif #endif ${cf_cv_main_return:-return}(0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:7088: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7091: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:7093: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7096: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_version=`cat $cf_tempfile` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f $cf_tempfile fi echo "$as_me:7110: result: $cf_cv_ncurses_version" >&5 echo "${ECHO_T}$cf_cv_ncurses_version" >&6 test "$cf_cv_ncurses_version" = no || cat >>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_root=$cf_cv_screen # This works, except for the special case where we find gpm, but # ncurses is in a nonstandard location via $LIBS, and we really want # to link gpm. cf_ncurses_LIBS="" cf_ncurses_SAVE="$LIBS" echo "$as_me:7123: checking for Gpm_Open in -lgpm" >&5 echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 7131 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Gpm_Open (); int main () { Gpm_Open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7150: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7153: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7156: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7159: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_Gpm_Open=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_Gpm_Open=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:7170: result: $ac_cv_lib_gpm_Gpm_Open" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 if test $ac_cv_lib_gpm_Gpm_Open = yes; then echo "$as_me:7173: checking for initscr in -lgpm" >&5 echo $ECHO_N "checking for initscr in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 7181 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7200: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7203: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7206: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7209: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:7220: result: $ac_cv_lib_gpm_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_initscr" >&6 if test $ac_cv_lib_gpm_initscr = yes; then LIBS="$cf_ncurses_SAVE" else cf_ncurses_LIBS="-lgpm" fi fi case $host_os in (freebsd*) # This is only necessary if you are linking against an obsolete # version of ncurses (but it should do no harm, since it's static). if test "$cf_nculib_root" = ncurses ; then echo "$as_me:7235: checking for tgoto in -lmytinfo" >&5 echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmytinfo $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 7243 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char tgoto (); int main () { tgoto (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7262: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7265: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7268: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7271: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_mytinfo_tgoto=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_mytinfo_tgoto=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:7282: result: $ac_cv_lib_mytinfo_tgoto" >&5 echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 if test $ac_cv_lib_mytinfo_tgoto = yes; then cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" fi fi ;; esac cf_add_libs="$cf_ncurses_LIBS" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then cf_add_libs="-l$cf_nculib_root" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" else eval 'cf_cv_have_lib_'$cf_nculib_root'=no' cf_libdir="" echo "$as_me:7331: checking for initscr" >&5 echo $ECHO_N "checking for initscr... $ECHO_C" >&6 if test "${ac_cv_func_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 7337 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char initscr (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_initscr) || defined (__stub___initscr) choke me #else f = initscr; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7368: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7371: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7374: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7377: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:7387: result: $ac_cv_func_initscr" >&5 echo "${ECHO_T}$ac_cv_func_initscr" >&6 if test $ac_cv_func_initscr = yes; then eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else cf_save_LIBS="$LIBS" echo "$as_me:7394: checking for initscr in -l$cf_nculib_root" >&5 echo $ECHO_N "checking for initscr in -l$cf_nculib_root... $ECHO_C" >&6 LIBS="-l$cf_nculib_root $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 7398 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7410: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7413: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7416: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7419: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:7421: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:7428: result: no" >&5 echo "${ECHO_T}no" >&6 cf_search= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` test "x$cf_library_path" != "xNONE" && \ test -d "$cf_library_path" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" test -d $cf_library_path/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root" test -d $cf_library_path/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root/lib" test -d $cf_library_path/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib" test -d $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" } cf_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $prefix" test -d $prefix/lib && cf_search="$cf_search $prefix/lib" test -d $prefix/lib/$cf_nculib_root && cf_search="$cf_search $prefix/lib/$cf_nculib_root" test -d $prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $prefix/lib/$cf_nculib_root/lib" test -d $prefix/$cf_nculib_root/lib && cf_search="$cf_search $prefix/$cf_nculib_root/lib" test -d $prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $prefix/$cf_nculib_root/lib/$cf_nculib_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" test -d $cf_subdir_prefix/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root" test -d $cf_subdir_prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root/lib" test -d $cf_subdir_prefix/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib" test -d $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" } done cf_search="$cf_library_path_list $cf_search" for cf_libdir in $cf_search do echo "$as_me:7496: checking for -l$cf_nculib_root in $cf_libdir" >&5 echo $ECHO_N "checking for -l$cf_nculib_root in $cf_libdir... $ECHO_C" >&6 LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line 7500 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7512: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7515: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7518: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7521: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:7523: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:7530: result: no" >&5 echo "${ECHO_T}no" >&6 LIBS="$cf_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi eval 'cf_found_library=$cf_cv_have_lib_'$cf_nculib_root if test $cf_found_library = no ; then { { echo "$as_me:7545: error: Cannot link $cf_nculib_root library" >&5 echo "$as_me: error: Cannot link $cf_nculib_root library" >&2;} { (exit 1); exit 1; }; } fi fi if test -n "$cf_ncurses_LIBS" ; then echo "$as_me:7553: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 echo $ECHO_N "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS... $ECHO_C" >&6 cf_ncurses_SAVE="$LIBS" for p in $cf_ncurses_LIBS ; do q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` if test "$q" != "$LIBS" ; then LIBS="$q" fi done cat >conftest.$ac_ext <<_ACEOF #line 7563 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7575: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7578: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7581: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7584: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:7586: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:7591: result: no" >&5 echo "${ECHO_T}no" >&6 LIBS="$cf_ncurses_SAVE" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi cf_nculib_ROOT=`echo "HAVE_LIB$cf_nculib_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking pkg-config for $cf_ncuconfig_root... $ECHO_C" >&6 if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then echo "$as_me:7619: result: yes" >&5 echo "${ECHO_T}yes" >&6 echo "$as_me:7622: checking if the $cf_ncuconfig_root package files work" >&5 echo $ECHO_N "checking if the $cf_ncuconfig_root package files work... $ECHO_C" >&6 cf_have_ncuconfig=unknown cf_save_CPPFLAGS="$CPPFLAGS" cf_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags $cf_ncuconfig_root`" cf_add_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 7648 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7660: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7663: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7666: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7669: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if test "$cross_compiling" = yes; then cf_have_ncuconfig=maybe else cat >conftest.$ac_ext <<_ACEOF #line 7675 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main(void) { char *xx = curses_version(); return (xx == 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:7682: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7685: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:7687: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7690: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_have_ncuconfig=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_ncuconfig=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_ncuconfig=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:7707: result: $cf_have_ncuconfig" >&5 echo "${ECHO_T}$cf_have_ncuconfig" >&6 test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes if test "$cf_have_ncuconfig" != "yes" then CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" NCURSES_CONFIG_PKG=none else cat >>confdefs.h <<\EOF #define NCURSES 1 EOF NCURSES_CONFIG_PKG=$cf_ncuconfig_root fi else echo "$as_me:7725: result: no" >&5 echo "${ECHO_T}no" >&6 NCURSES_CONFIG_PKG=none fi else NCURSES_CONFIG_PKG=none fi if test "x$cf_have_ncuconfig" = "xno"; then echo "Looking for ${cf_ncuconfig_root}-config" if test -n "$ac_tool_prefix"; then for ac_prog in ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:7741: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NCURSES_CONFIG"; then ac_cv_prog_NCURSES_CONFIG="$NCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_NCURSES_CONFIG="$ac_tool_prefix$ac_prog" echo "$as_me:7756: found $ac_dir/$ac_word" >&5 break done fi fi NCURSES_CONFIG=$ac_cv_prog_NCURSES_CONFIG if test -n "$NCURSES_CONFIG"; then echo "$as_me:7764: result: $NCURSES_CONFIG" >&5 echo "${ECHO_T}$NCURSES_CONFIG" >&6 else echo "$as_me:7767: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$NCURSES_CONFIG" && break done fi if test -z "$NCURSES_CONFIG"; then ac_ct_NCURSES_CONFIG=$NCURSES_CONFIG for ac_prog in ${cf_ncuconfig_root}-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:7780: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_NCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_NCURSES_CONFIG"; then ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_ct_NCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_NCURSES_CONFIG="$ac_prog" echo "$as_me:7795: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_NCURSES_CONFIG=$ac_cv_prog_ac_ct_NCURSES_CONFIG if test -n "$ac_ct_NCURSES_CONFIG"; then echo "$as_me:7803: result: $ac_ct_NCURSES_CONFIG" >&5 echo "${ECHO_T}$ac_ct_NCURSES_CONFIG" >&6 else echo "$as_me:7806: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_NCURSES_CONFIG" && break done test -n "$ac_ct_NCURSES_CONFIG" || ac_ct_NCURSES_CONFIG="none" NCURSES_CONFIG=$ac_ct_NCURSES_CONFIG fi if test "$NCURSES_CONFIG" != none ; then CPPFLAGS="$CPPFLAGS `$NCURSES_CONFIG --cflags`" cf_add_libs="`$NCURSES_CONFIG --libs`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" # even with config script, some packages use no-override for curses.h echo "$as_me:7839: checking if we have identified curses headers" >&5 echo $ECHO_N "checking if we have identified curses headers... $ECHO_C" >&6 if test "${cf_cv_ncurses_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_header=none for cf_header in \ ncurses.h $cf_cv_screen/ncurses.h \ curses.h $cf_cv_screen/curses.h do cat >conftest.$ac_ext <<_ACEOF #line 7851 "configure" #include "confdefs.h" #include <${cf_header}> int main () { initscr(); tgoto("?", 0,0) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:7863: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:7866: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:7869: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7872: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_header=$cf_header; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:7883: result: $cf_cv_ncurses_header" >&5 echo "${ECHO_T}$cf_cv_ncurses_header" >&6 if test "$cf_cv_ncurses_header" = none ; then { { echo "$as_me:7887: error: No curses header-files found" >&5 echo "$as_me: error: No curses header-files found" >&2;} { (exit 1); exit 1; }; } fi # cheat, to get the right #define's for HAVE_NCURSES_H, etc. for ac_header in $cf_cv_ncurses_header do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:7897: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 7903 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:7907: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:7913: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:7932: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_ROOT=`echo "HAVE_LIB$cf_ncuconfig_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <conftest.$ac_ext <<_ACEOF #line 7985 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:7997: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8000: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8003: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8006: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:8023: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi } echo "$as_me:8042: checking for $cf_ncuhdr_root header in include-path" >&5 echo $ECHO_N "checking for $cf_ncuhdr_root header in include-path... $ECHO_C" >&6 if test "${cf_cv_ncurses_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h" ( test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw ) && cf_header_list="$cf_header_list curses.h ncurses.h" for cf_header in $cf_header_list do cat >conftest.$ac_ext <<_ACEOF #line 8054 "configure" #include "confdefs.h" #include <$cf_header> int main () { #ifdef NCURSES_VERSION printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8078: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8081: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8084: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8087: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_h=$cf_header else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_h=no fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_ncurses_h" != no && break done fi echo "$as_me:8102: result: $cf_cv_ncurses_h" >&5 echo "${ECHO_T}$cf_cv_ncurses_h" >&6 if test "$cf_cv_ncurses_h" != no ; then cf_cv_ncurses_header=$cf_cv_ncurses_h else echo "$as_me:8109: checking for $cf_ncuhdr_root include-path" >&5 echo $ECHO_N "checking for $cf_ncuhdr_root include-path... $ECHO_C" >&6 if test "${cf_cv_ncurses_h2+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test -n "$verbose" && echo cf_search= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` test "x$cf_header_path" != "xNONE" && \ test -d "$cf_header_path" && \ { test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" test -d $cf_header_path/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root" test -d $cf_header_path/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/include/$cf_ncuhdr_root/include" test -d $cf_header_path/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include" test -d $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_header_path/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } cf_header_path_list="$cf_header_path_list $cf_search" ;; esac done fi # add the variations for the package we are looking for cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for include-directories under $prefix" test -d $prefix/include && cf_search="$cf_search $prefix/include" test -d $prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root" test -d $prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/include/$cf_ncuhdr_root/include" test -d $prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include" test -d $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" test -d $cf_subdir_prefix/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root" test -d $cf_subdir_prefix/include/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/include/$cf_ncuhdr_root/include" test -d $cf_subdir_prefix/$cf_ncuhdr_root/include && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include" test -d $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root && cf_search="$cf_search $cf_subdir_prefix/$cf_ncuhdr_root/include/$cf_ncuhdr_root" } done test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && cf_search="$cf_search $includedir" test -d $includedir/$cf_ncuhdr_root && cf_search="$cf_search $includedir/$cf_ncuhdr_root" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && cf_search="$cf_search $oldincludedir" test -d $oldincludedir/$cf_ncuhdr_root && cf_search="$cf_search $oldincludedir/$cf_ncuhdr_root" } cf_search="$cf_search $cf_header_path_list" test -n "$verbose" && echo search path $cf_search cf_save2_CPPFLAGS="$CPPFLAGS" for cf_incdir in $cf_search do if test -n "$cf_incdir" ; then for cf_add_incdir in $cf_incdir do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 8227 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8239: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8242: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8245: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8248: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:8265: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi for cf_header in \ ncurses.h \ curses.h do cat >conftest.$ac_ext <<_ACEOF #line 8288 "configure" #include "confdefs.h" #include <$cf_header> int main () { #ifdef NCURSES_VERSION printf("%s\n", NCURSES_VERSION); #else #ifdef __NCURSES_H printf("old\n"); #else make an error #endif #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8312: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8315: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8318: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8321: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_h2=$cf_header else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_h2=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test "$cf_cv_ncurses_h2" != no ; then cf_cv_ncurses_h2=$cf_incdir/$cf_header test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&6 break fi test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&6 done CPPFLAGS="$cf_save2_CPPFLAGS" test "$cf_cv_ncurses_h2" != no && break done test "$cf_cv_ncurses_h2" = no && { { echo "$as_me:8342: error: not found" >&5 echo "$as_me: error: not found" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:8347: result: $cf_cv_ncurses_h2" >&5 echo "${ECHO_T}$cf_cv_ncurses_h2" >&6 cf_1st_incdir=`echo $cf_cv_ncurses_h2 | sed -e 's%/[^/]*$%%'` cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2` if test `basename $cf_1st_incdir` = $cf_ncuhdr_root ; then cf_cv_ncurses_header=$cf_ncuhdr_root/$cf_cv_ncurses_header fi if test -n "$cf_1st_incdir" ; then for cf_add_incdir in $cf_1st_incdir do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 8380 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8392: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8395: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8398: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8401: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:8418: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi fi # Set definitions to allow ifdef'ing for ncurses.h case $cf_cv_ncurses_header in (*ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_H 1 EOF ;; esac case $cf_cv_ncurses_header in (ncurses/curses.h|ncurses/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_NCURSES_H 1 EOF ;; (ncursesw/curses.h|ncursesw/ncurses.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_NCURSES_H 1 EOF ;; esac echo "$as_me:8466: checking for terminfo header" >&5 echo $ECHO_N "checking for terminfo header... $ECHO_C" >&6 if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case ${cf_cv_ncurses_header} in (*/ncurses.h|*/ncursesw.h) cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[^.]*\.h$%term.h%'` ;; (*) cf_term_header=term.h ;; esac for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h" do cat >conftest.$ac_ext <<_ACEOF #line 8484 "configure" #include "confdefs.h" #include #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_test> int main () { int x = auto_left_margin ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8499: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8502: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8505: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8508: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_term_header="$cf_test" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_term_header=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_term_header" != unknown && break done fi echo "$as_me:8524: result: $cf_cv_term_header" >&5 echo "${ECHO_T}$cf_cv_term_header" >&6 # Set definitions to allow ifdef'ing to accommodate subdirectories case $cf_cv_term_header in (*term.h) cat >>confdefs.h <<\EOF #define HAVE_TERM_H 1 EOF ;; esac case $cf_cv_term_header in (ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; (ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac # some applications need this, but should check for NCURSES_VERSION cat >>confdefs.h <<\EOF #define NCURSES 1 EOF echo "$as_me:8562: checking for ncurses version" >&5 echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6 if test "${cf_cv_ncurses_version+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ncurses_version=no cf_tempfile=out$$ rm -f $cf_tempfile if test "$cross_compiling" = yes; then # This will not work if the preprocessor splits the line after the # Autoconf token. The 'unproto' program does that. cat > conftest.$ac_ext < #undef Autoconf #ifdef NCURSES_VERSION Autoconf NCURSES_VERSION #else #ifdef __NCURSES_H Autoconf "old" #endif ; #endif EOF cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out" { (eval echo "$as_me:8588: \"$cf_try\"") >&5 (eval $cf_try) 2>&5 ac_status=$? echo "$as_me:8591: \$? = $ac_status" >&5 (exit $ac_status); } if test -f conftest.out ; then cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'` test -n "$cf_out" && cf_cv_ncurses_version="$cf_out" rm -f conftest.out fi else cat >conftest.$ac_ext <<_ACEOF #line 8601 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include int main() { FILE *fp = fopen("$cf_tempfile", "w"); #ifdef NCURSES_VERSION # ifdef NCURSES_VERSION_PATCH fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH); # else fprintf(fp, "%s\n", NCURSES_VERSION); # endif #else # ifdef __NCURSES_H fprintf(fp, "old\n"); # else make an error # endif #endif ${cf_cv_main_return:-return}(0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:8626: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8629: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:8631: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8634: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_version=`cat $cf_tempfile` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f $cf_tempfile fi echo "$as_me:8648: result: $cf_cv_ncurses_version" >&5 echo "${ECHO_T}$cf_cv_ncurses_version" >&6 test "$cf_cv_ncurses_version" = no || cat >>confdefs.h <<\EOF #define NCURSES 1 EOF cf_nculib_root=$cf_cv_screen # This works, except for the special case where we find gpm, but # ncurses is in a nonstandard location via $LIBS, and we really want # to link gpm. cf_ncurses_LIBS="" cf_ncurses_SAVE="$LIBS" echo "$as_me:8661: checking for Gpm_Open in -lgpm" >&5 echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 8669 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Gpm_Open (); int main () { Gpm_Open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8688: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8691: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8694: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8697: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_Gpm_Open=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_Gpm_Open=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:8708: result: $ac_cv_lib_gpm_Gpm_Open" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 if test $ac_cv_lib_gpm_Gpm_Open = yes; then echo "$as_me:8711: checking for initscr in -lgpm" >&5 echo $ECHO_N "checking for initscr in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 8719 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8738: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8741: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8744: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8747: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:8758: result: $ac_cv_lib_gpm_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_initscr" >&6 if test $ac_cv_lib_gpm_initscr = yes; then LIBS="$cf_ncurses_SAVE" else cf_ncurses_LIBS="-lgpm" fi fi case $host_os in (freebsd*) # This is only necessary if you are linking against an obsolete # version of ncurses (but it should do no harm, since it's static). if test "$cf_nculib_root" = ncurses ; then echo "$as_me:8773: checking for tgoto in -lmytinfo" >&5 echo $ECHO_N "checking for tgoto in -lmytinfo... $ECHO_C" >&6 if test "${ac_cv_lib_mytinfo_tgoto+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmytinfo $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 8781 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char tgoto (); int main () { tgoto (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8800: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8803: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8806: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8809: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_mytinfo_tgoto=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_mytinfo_tgoto=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:8820: result: $ac_cv_lib_mytinfo_tgoto" >&5 echo "${ECHO_T}$ac_cv_lib_mytinfo_tgoto" >&6 if test $ac_cv_lib_mytinfo_tgoto = yes; then cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS" fi fi ;; esac cf_add_libs="$cf_ncurses_LIBS" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" ) then cf_add_libs="-l$cf_nculib_root" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" else eval 'cf_cv_have_lib_'$cf_nculib_root'=no' cf_libdir="" echo "$as_me:8869: checking for initscr" >&5 echo $ECHO_N "checking for initscr... $ECHO_C" >&6 if test "${ac_cv_func_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 8875 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char initscr (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_initscr) || defined (__stub___initscr) choke me #else f = initscr; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8906: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8909: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8912: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8915: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_initscr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_initscr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:8925: result: $ac_cv_func_initscr" >&5 echo "${ECHO_T}$ac_cv_func_initscr" >&6 if test $ac_cv_func_initscr = yes; then eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else cf_save_LIBS="$LIBS" echo "$as_me:8932: checking for initscr in -l$cf_nculib_root" >&5 echo $ECHO_N "checking for initscr in -l$cf_nculib_root... $ECHO_C" >&6 LIBS="-l$cf_nculib_root $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 8936 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:8948: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:8951: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:8954: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8957: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:8959: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:8966: result: no" >&5 echo "${ECHO_T}no" >&6 cf_search= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` test "x$cf_library_path" != "xNONE" && \ test -d "$cf_library_path" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" test -d $cf_library_path/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root" test -d $cf_library_path/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/lib/$cf_nculib_root/lib" test -d $cf_library_path/$cf_nculib_root/lib && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib" test -d $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_library_path/$cf_nculib_root/lib/$cf_nculib_root" } cf_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $prefix" test -d $prefix/lib && cf_search="$cf_search $prefix/lib" test -d $prefix/lib/$cf_nculib_root && cf_search="$cf_search $prefix/lib/$cf_nculib_root" test -d $prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $prefix/lib/$cf_nculib_root/lib" test -d $prefix/$cf_nculib_root/lib && cf_search="$cf_search $prefix/$cf_nculib_root/lib" test -d $prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $prefix/$cf_nculib_root/lib/$cf_nculib_root" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" test -d $cf_subdir_prefix/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root" test -d $cf_subdir_prefix/lib/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/lib/$cf_nculib_root/lib" test -d $cf_subdir_prefix/$cf_nculib_root/lib && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib" test -d $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root && cf_search="$cf_search $cf_subdir_prefix/$cf_nculib_root/lib/$cf_nculib_root" } done cf_search="$cf_library_path_list $cf_search" for cf_libdir in $cf_search do echo "$as_me:9034: checking for -l$cf_nculib_root in $cf_libdir" >&5 echo $ECHO_N "checking for -l$cf_nculib_root in $cf_libdir... $ECHO_C" >&6 LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9038 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9050: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9053: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9056: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9059: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:9061: result: yes" >&5 echo "${ECHO_T}yes" >&6 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes' break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:9068: result: no" >&5 echo "${ECHO_T}no" >&6 LIBS="$cf_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi eval 'cf_found_library=$cf_cv_have_lib_'$cf_nculib_root if test $cf_found_library = no ; then { { echo "$as_me:9083: error: Cannot link $cf_nculib_root library" >&5 echo "$as_me: error: Cannot link $cf_nculib_root library" >&2;} { (exit 1); exit 1; }; } fi fi if test -n "$cf_ncurses_LIBS" ; then echo "$as_me:9091: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5 echo $ECHO_N "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS... $ECHO_C" >&6 cf_ncurses_SAVE="$LIBS" for p in $cf_ncurses_LIBS ; do q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"` if test "$q" != "$LIBS" ; then LIBS="$q" fi done cat >conftest.$ac_ext <<_ACEOF #line 9101 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { initscr(); mousemask(0,0); tgoto((char *)0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9113: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9116: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9119: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9122: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:9124: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:9129: result: no" >&5 echo "${ECHO_T}no" >&6 LIBS="$cf_ncurses_SAVE" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi cf_nculib_ROOT=`echo "HAVE_LIB$cf_nculib_root" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking for X... $ECHO_C" >&6 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then withval="$with_x" fi; # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then # Both variables are already set. have_x=yes else if test "${ac_cv_have_x+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -fr conftest.dir if mkdir conftest.dir; then cd conftest.dir # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat >Imakefile <<'EOF' acfindx: @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' EOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib dll; do if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && test -f $ac_im_libdir/libX11.$ac_extension; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /lib) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -fr conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Intrinsic.h. # First, try using that file with no special directory specified. cat >conftest.$ac_ext <<_ACEOF #line 9246 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:9250: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:9256: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # We can compile using X headers with no special include directory. ac_x_includes= else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Intrinsic.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lXt $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9289 "configure" #include "confdefs.h" #include int main () { XtMalloc (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9301: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9304: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9307: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9310: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 LIBS=$ac_save_LIBS for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib dll; do if test -r $ac_dir/libXt.$ac_extension; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then # Didn't find X anywhere. Cache the known absence of X. ac_cv_have_x="have_x=no" else # Record where we found X for the cache. ac_cv_have_x="have_x=yes \ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" fi fi fi eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then echo "$as_me:9348: result: $have_x" >&5 echo "${ECHO_T}$have_x" >&6 no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes \ ac_x_includes=$x_includes ac_x_libraries=$x_libraries" echo "$as_me:9358: result: libraries $x_libraries, headers $x_includes" >&5 echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. cat >>confdefs.h <<\EOF #define X_DISPLAY_MISSING 1 EOF X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . case `(uname -sr) 2>/dev/null` in "SunOS 5"*) echo "$as_me:9382: checking whether -R must be followed by a space" >&5 echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6 ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" cat >conftest.$ac_ext <<_ACEOF #line 9386 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9398: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9401: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9404: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9407: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_nospace=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_R_nospace=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test $ac_R_nospace = yes; then echo "$as_me:9417: result: no" >&5 echo "${ECHO_T}no" >&6 X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat >conftest.$ac_ext <<_ACEOF #line 9423 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9435: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9438: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9441: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9444: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_space=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_R_space=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test $ac_R_space = yes; then echo "$as_me:9454: result: yes" >&5 echo "${ECHO_T}yes" >&6 X_LIBS="$X_LIBS -R $x_libraries" else echo "$as_me:9458: result: neither works" >&5 echo "${ECHO_T}neither works" >&6 fi fi LIBS=$ac_xsave_LIBS esac fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat >conftest.$ac_ext <<_ACEOF #line 9478 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main () { XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9497: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9500: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9503: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9506: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:9512: checking for dnet_ntoa in -ldnet" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9520 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9539: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9542: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9545: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9548: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dnet_dnet_ntoa=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:9559: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo "$as_me:9566: checking for dnet_ntoa in -ldnet_stub" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9574 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9593: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9596: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9599: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9602: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_stub_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:9613: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. echo "$as_me:9632: checking for gethostbyname" >&5 echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6 if test "${ac_cv_func_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 9638 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) choke me #else f = gethostbyname; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9669: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9672: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9675: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9678: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gethostbyname=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:9688: result: $ac_cv_func_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6 if test $ac_cv_func_gethostbyname = no; then echo "$as_me:9692: checking for gethostbyname in -lnsl" >&5 echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6 if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9700 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9719: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9722: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9725: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9728: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_nsl_gethostbyname=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_nsl_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:9739: result: $ac_cv_lib_nsl_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6 if test $ac_cv_lib_nsl_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then echo "$as_me:9746: checking for gethostbyname in -lbsd" >&5 echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6 if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9754 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9773: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9776: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9779: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9782: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bsd_gethostbyname=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_bsd_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:9793: result: $ac_cv_lib_bsd_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6 if test $ac_cv_lib_bsd_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the nameserver (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. echo "$as_me:9809: checking for connect" >&5 echo $ECHO_N "checking for connect... $ECHO_C" >&6 if test "${ac_cv_func_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 9815 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char connect (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_connect) || defined (__stub___connect) choke me #else f = connect; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9846: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9849: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9852: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9855: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_connect=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_connect=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:9865: result: $ac_cv_func_connect" >&5 echo "${ECHO_T}$ac_cv_func_connect" >&6 if test $ac_cv_func_connect = no; then echo "$as_me:9869: checking for connect in -lsocket" >&5 echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9877 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); int main () { connect (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9896: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9899: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9902: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9905: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_connect=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_socket_connect=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:9916: result: $ac_cv_lib_socket_connect" >&5 echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6 if test $ac_cv_lib_socket_connect = yes; then X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. echo "$as_me:9925: checking for remove" >&5 echo $ECHO_N "checking for remove... $ECHO_C" >&6 if test "${ac_cv_func_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 9931 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char remove (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_remove) || defined (__stub___remove) choke me #else f = remove; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9962: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9965: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9968: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9971: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_remove=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_remove=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:9981: result: $ac_cv_func_remove" >&5 echo "${ECHO_T}$ac_cv_func_remove" >&6 if test $ac_cv_func_remove = no; then echo "$as_me:9985: checking for remove in -lposix" >&5 echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6 if test "${ac_cv_lib_posix_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9993 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); int main () { remove (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:10012: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:10015: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:10018: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10021: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_posix_remove=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_posix_remove=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:10032: result: $ac_cv_lib_posix_remove" >&5 echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6 if test $ac_cv_lib_posix_remove = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo "$as_me:10041: checking for shmat" >&5 echo $ECHO_N "checking for shmat... $ECHO_C" >&6 if test "${ac_cv_func_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 10047 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shmat (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shmat) || defined (__stub___shmat) choke me #else f = shmat; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:10078: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:10081: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:10084: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10087: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shmat=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_shmat=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:10097: result: $ac_cv_func_shmat" >&5 echo "${ECHO_T}$ac_cv_func_shmat" >&6 if test $ac_cv_func_shmat = no; then echo "$as_me:10101: checking for shmat in -lipc" >&5 echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6 if test "${ac_cv_lib_ipc_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 10109 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); int main () { shmat (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:10128: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:10131: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:10134: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10137: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ipc_shmat=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_ipc_shmat=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:10148: result: $ac_cv_lib_ipc_shmat" >&5 echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6 if test $ac_cv_lib_ipc_shmat = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry echo "$as_me:10166: checking for IceConnectionNumber in -lICE" >&5 echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6 if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 10174 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char IceConnectionNumber (); int main () { IceConnectionNumber (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:10193: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:10196: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:10199: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10202: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ICE_IceConnectionNumber=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:10213: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6 if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi cf_x_athena=${cf_x_athena:-Xaw} echo "$as_me:10225: checking if you want to link with Xaw 3d library" >&5 echo $ECHO_N "checking if you want to link with Xaw 3d library... $ECHO_C" >&6 withval= # Check whether --with-Xaw3d or --without-Xaw3d was given. if test "${with_Xaw3d+set}" = set; then withval="$with_Xaw3d" fi; if test "$withval" = yes ; then cf_x_athena=Xaw3d echo "$as_me:10236: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:10239: result: no" >&5 echo "${ECHO_T}no" >&6 fi echo "$as_me:10243: checking if you want to link with Xaw 3d xft library" >&5 echo $ECHO_N "checking if you want to link with Xaw 3d xft library... $ECHO_C" >&6 withval= # Check whether --with-Xaw3dxft or --without-Xaw3dxft was given. if test "${with_Xaw3dxft+set}" = set; then withval="$with_Xaw3dxft" fi; if test "$withval" = yes ; then cf_x_athena=Xaw3dxft echo "$as_me:10254: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:10257: result: no" >&5 echo "${ECHO_T}no" >&6 fi echo "$as_me:10261: checking if you want to link with neXT Athena library" >&5 echo $ECHO_N "checking if you want to link with neXT Athena library... $ECHO_C" >&6 withval= # Check whether --with-neXtaw or --without-neXtaw was given. if test "${with_neXtaw+set}" = set; then withval="$with_neXtaw" fi; if test "$withval" = yes ; then cf_x_athena=neXtaw echo "$as_me:10272: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:10275: result: no" >&5 echo "${ECHO_T}no" >&6 fi echo "$as_me:10279: checking if you want to link with Athena-Plus library" >&5 echo $ECHO_N "checking if you want to link with Athena-Plus library... $ECHO_C" >&6 withval= # Check whether --with-XawPlus or --without-XawPlus was given. if test "${with_XawPlus+set}" = set; then withval="$with_XawPlus" fi; if test "$withval" = yes ; then cf_x_athena=XawPlus echo "$as_me:10290: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:10293: result: no" >&5 echo "${ECHO_T}no" >&6 fi cf_x_athena_lib="" if test "$PKG_CONFIG" != none ; then cf_athena_list= test "$cf_x_athena" = Xaw && cf_athena_list="xaw8 xaw7 xaw6" for cf_athena_pkg in \ $cf_athena_list \ ${cf_x_athena} \ ${cf_x_athena}-devel \ lib${cf_x_athena} \ lib${cf_x_athena}-devel do if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists $cf_athena_pkg; then test -n "$verbose" && echo " found package $cf_athena_pkg" 1>&6 echo "${as_me:-configure}:10313: testing found package $cf_athena_pkg ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags $cf_athena_pkg 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs $cf_athena_pkg 2>/dev/null`" test -n "$verbose" && echo " package $cf_athena_pkg CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:10319: testing package $cf_athena_pkg CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package $cf_athena_pkg LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:10323: testing package $cf_athena_pkg LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cf_x_athena_lib="$cf_pkgconfig_libs" cf_x_athena_LIBS=`echo "HAVE_LIB_$cf_x_athena" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&6 echo "${as_me:-configure}:10434: testing ..trimmed $LIBS ..." 1>&5 ;; esac done echo "$as_me:10440: checking for usable $cf_x_athena/Xmu package" >&5 echo $ECHO_N "checking for usable $cf_x_athena/Xmu package... $ECHO_C" >&6 if test "${cf_cv_xaw_compat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 10447 "configure" #include "confdefs.h" #include int main () { int check = XmuCompareISOLatin1("big", "small") ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:10463: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:10466: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:10469: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10472: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xaw_compat=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_xaw_compat=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:10482: result: $cf_cv_xaw_compat" >&5 echo "${ECHO_T}$cf_cv_xaw_compat" >&6 if test "$cf_cv_xaw_compat" = no then # workaround for broken ".pc" files... case "$cf_x_athena_lib" in (*-lXmu*) ;; (*) test -n "$verbose" && echo " work around broken package" 1>&6 echo "${as_me:-configure}:10494: testing work around broken package ..." 1>&5 cf_save_xmu="$LIBS" cf_first_lib=`echo "$cf_save_xmu" | sed -e 's/^ *//' -e 's/ .*//'` if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists xmu; then test -n "$verbose" && echo " found package xmu" 1>&6 echo "${as_me:-configure}:10502: testing found package xmu ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags xmu 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs xmu 2>/dev/null`" test -n "$verbose" && echo " package xmu CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:10508: testing package xmu CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package xmu LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:10512: testing package xmu LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" LIBS="$cf_save_xmu" test -n "$verbose" && echo " ...before $LIBS" 1>&6 echo "${as_me:-configure}:10612: testing ...before $LIBS ..." 1>&5 LIBS=`echo "$LIBS" | sed -e "s/[ ][ ]*/ /g" -e "s%$cf_first_lib %$cf_first_lib $cf_pkgconfig_libs %" -e 's% % %g'` test -n "$verbose" && echo " ...after $LIBS" 1>&6 echo "${as_me:-configure}:10617: testing ...after $LIBS ..." 1>&5 else cf_pkgconfig_incs= cf_pkgconfig_libs= test -n "$verbose" && echo " ...before $LIBS" 1>&6 echo "${as_me:-configure}:10625: testing ...before $LIBS ..." 1>&5 LIBS=`echo "$LIBS" | sed -e "s/[ ][ ]*/ /g" -e "s%$cf_first_lib %$cf_first_lib -lXmu %" -e 's% % %g'` test -n "$verbose" && echo " ...after $LIBS" 1>&6 echo "${as_me:-configure}:10630: testing ...after $LIBS ..." 1>&5 fi for cf_trim_lib in Xmu Xt X11 do case "$LIBS" in (*-l$cf_trim_lib\ *-l$cf_trim_lib*) LIBS=`echo "$LIBS " | sed -e 's/ / /g' -e 's%-l'"$cf_trim_lib"' %%' -e 's/ $//'` test -n "$verbose" && echo " ..trimmed $LIBS" 1>&6 echo "${as_me:-configure}:10641: testing ..trimmed $LIBS ..." 1>&5 ;; esac done ;; esac fi break else cf_pkgconfig_incs= cf_pkgconfig_libs= : fi done fi if test -z "$cf_x_athena_lib" ; then if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists Xext; then test -n "$verbose" && echo " found package Xext" 1>&6 echo "${as_me:-configure}:10666: testing found package Xext ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags Xext 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs Xext 2>/dev/null`" test -n "$verbose" && echo " package Xext CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:10672: testing package Xext CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package Xext LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:10676: testing package Xext LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= echo "$as_me:10777: checking for XextCreateExtension in -lXext" >&5 echo $ECHO_N "checking for XextCreateExtension in -lXext... $ECHO_C" >&6 if test "${ac_cv_lib_Xext_XextCreateExtension+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 10785 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XextCreateExtension (); int main () { XextCreateExtension (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:10804: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:10807: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:10810: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10813: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_Xext_XextCreateExtension=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_Xext_XextCreateExtension=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:10824: result: $ac_cv_lib_Xext_XextCreateExtension" >&5 echo "${ECHO_T}$ac_cv_lib_Xext_XextCreateExtension" >&6 if test $ac_cv_lib_Xext_XextCreateExtension = yes; then cf_add_libs="-lXext" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi fi # OSX is schizoid about who owns /usr/X11 (old) versus /opt/X11 (new), and (and # in some cases has installed dummy files in the former, other cases replaced # it with a link to the new location). This complicates the configure script. # Check for that pitfall, and recover using pkg-config # # If none of these are set, the configuration is almost certainly broken. if test -z "${X_CFLAGS}${X_PRE_LIBS}${X_LIBS}${X_EXTRA_LIBS}" then if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists x11; then test -n "$verbose" && echo " found package x11" 1>&6 echo "${as_me:-configure}:10860: testing found package x11 ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags x11 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs x11 2>/dev/null`" test -n "$verbose" && echo " package x11 CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:10866: testing package x11 CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package x11 LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:10870: testing package x11 LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= { echo "$as_me:10970: WARNING: unable to find X11 library" >&5 echo "$as_me: WARNING: unable to find X11 library" >&2;} fi if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists ice; then test -n "$verbose" && echo " found package ice" 1>&6 echo "${as_me:-configure}:10977: testing found package ice ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags ice 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs ice 2>/dev/null`" test -n "$verbose" && echo " package ice CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:10983: testing package ice CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package ice LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:10987: testing package ice LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= { echo "$as_me:11087: WARNING: unable to find ICE library" >&5 echo "$as_me: WARNING: unable to find ICE library" >&2;} fi if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists sm; then test -n "$verbose" && echo " found package sm" 1>&6 echo "${as_me:-configure}:11094: testing found package sm ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags sm 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs sm 2>/dev/null`" test -n "$verbose" && echo " package sm CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:11100: testing package sm CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package sm LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:11104: testing package sm LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= { echo "$as_me:11204: WARNING: unable to find SM library" >&5 echo "$as_me: WARNING: unable to find SM library" >&2;} fi if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists xt; then test -n "$verbose" && echo " found package xt" 1>&6 echo "${as_me:-configure}:11211: testing found package xt ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags xt 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs xt 2>/dev/null`" test -n "$verbose" && echo " package xt CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:11217: testing package xt CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package xt LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:11221: testing package xt LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= { echo "$as_me:11321: WARNING: unable to find Xt library" >&5 echo "$as_me: WARNING: unable to find Xt library" >&2;} fi fi cf_have_X_LIBS=no if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists xt; then test -n "$verbose" && echo " found package xt" 1>&6 echo "${as_me:-configure}:11332: testing found package xt ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags xt 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs xt 2>/dev/null`" test -n "$verbose" && echo " package xt CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:11338: testing package xt CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package xt LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:11342: testing package xt LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" case "x$LIBS" in (*-lX11*) ;; (*) # we have an "xt" package, but it may omit Xt's dependency on X11 echo "$as_me:11443: checking for usable X dependency" >&5 echo $ECHO_N "checking for usable X dependency... $ECHO_C" >&6 if test "${cf_cv_xt_x11_compat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 11450 "configure" #include "confdefs.h" #include int main () { int rc1 = XDrawLine((Display*) 0, (Drawable) 0, (GC) 0, 0, 0, 0, 0); int rc2 = XClearWindow((Display*) 0, (Window) 0); int rc3 = XMoveWindow((Display*) 0, (Window) 0, 0, 0); int rc4 = XMoveResizeWindow((Display*)0, (Window)0, 0, 0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:11469: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:11472: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:11475: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11478: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xt_x11_compat=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_xt_x11_compat=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:11488: result: $cf_cv_xt_x11_compat" >&5 echo "${ECHO_T}$cf_cv_xt_x11_compat" >&6 if test "$cf_cv_xt_x11_compat" = no then test -n "$verbose" && echo " work around broken X11 dependency" 1>&6 echo "${as_me:-configure}:11494: testing work around broken X11 dependency ..." 1>&5 # 2010/11/19 - good enough until a working Xt on Xcb is delivered. if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists x11; then test -n "$verbose" && echo " found package x11" 1>&6 echo "${as_me:-configure}:11501: testing found package x11 ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags x11 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs x11 2>/dev/null`" test -n "$verbose" && echo " package x11 CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:11507: testing package x11 CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package x11 LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:11511: testing package x11 LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= test -n "$verbose" && echo " ...before $LIBS" 1>&6 echo "${as_me:-configure}:11614: testing ...before $LIBS ..." 1>&5 LIBS=`echo "$LIBS" | sed -e "s/[ ][ ]*/ /g" -e "s%-lXt %-lXt -lX11 %" -e 's% % %g'` test -n "$verbose" && echo " ...after $LIBS" 1>&6 echo "${as_me:-configure}:11619: testing ...after $LIBS ..." 1>&5 fi fi ;; esac echo "$as_me:11627: checking for usable X Toolkit package" >&5 echo $ECHO_N "checking for usable X Toolkit package... $ECHO_C" >&6 if test "${cf_cv_xt_ice_compat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 11634 "configure" #include "confdefs.h" #include int main () { int num = IceConnectionNumber(0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:11649: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:11652: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:11655: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:11658: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xt_ice_compat=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_xt_ice_compat=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:11668: result: $cf_cv_xt_ice_compat" >&5 echo "${ECHO_T}$cf_cv_xt_ice_compat" >&6 if test "$cf_cv_xt_ice_compat" = no then # workaround for broken ".pc" files used for X Toolkit. case "x$X_PRE_LIBS" in (*-lICE*) case "x$LIBS" in (*-lICE*) ;; (*) test -n "$verbose" && echo " work around broken ICE dependency" 1>&6 echo "${as_me:-configure}:11682: testing work around broken ICE dependency ..." 1>&5 if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists ice; then test -n "$verbose" && echo " found package ice" 1>&6 echo "${as_me:-configure}:11687: testing found package ice ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags ice 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs ice 2>/dev/null`" test -n "$verbose" && echo " package ice CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:11693: testing package ice CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package ice LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:11697: testing package ice LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists sm; then test -n "$verbose" && echo " found package sm" 1>&6 echo "${as_me:-configure}:11796: testing found package sm ..." 1>&5 cf_pkgconfig_incs="`$PKG_CONFIG --cflags sm 2>/dev/null`" cf_pkgconfig_libs="`$PKG_CONFIG --libs sm 2>/dev/null`" test -n "$verbose" && echo " package sm CFLAGS: $cf_pkgconfig_incs" 1>&6 echo "${as_me:-configure}:11802: testing package sm CFLAGS: $cf_pkgconfig_incs ..." 1>&5 test -n "$verbose" && echo " package sm LIBS: $cf_pkgconfig_libs" 1>&6 echo "${as_me:-configure}:11806: testing package sm LIBS: $cf_pkgconfig_libs ..." 1>&5 cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_pkgconfig_incs do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi cf_add_libs="$cf_pkgconfig_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" : else cf_pkgconfig_incs= cf_pkgconfig_libs= : fi else cf_pkgconfig_incs= cf_pkgconfig_libs= test -n "$verbose" && echo " ...before $LIBS" 1>&6 echo "${as_me:-configure}:11915: testing ...before $LIBS ..." 1>&5 LIBS=`echo "$LIBS" | sed -e "s/[ ][ ]*/ /g" -e "s%-lXt %-lXt $X_PRE_LIBS %" -e 's% % %g'` test -n "$verbose" && echo " ...after $LIBS" 1>&6 echo "${as_me:-configure}:11920: testing ...after $LIBS ..." 1>&5 fi ;; esac ;; esac fi cf_have_X_LIBS=yes else cf_pkgconfig_incs= cf_pkgconfig_libs= LDFLAGS="$X_LIBS $LDFLAGS" test -n "$verbose" && echo " checking additions to CFLAGS" 1>&6 echo "${as_me:-configure}:11940: testing checking additions to CFLAGS ..." 1>&5 cf_check_cflags="$CFLAGS" cf_check_cppflags="$CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $X_CFLAGS do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 echo "${as_me:-configure}:12011: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6 echo "${as_me:-configure}:12019: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6 echo "${as_me:-configure}:12027: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi if test "x$cf_check_cflags" != "x$CFLAGS" ; then cat >conftest.$ac_ext <<_ACEOF #line 12034 "configure" #include "confdefs.h" #include int main () { printf("Hello world"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12046: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12049: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12052: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12055: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 test -n "$verbose" && echo " test-compile failed. Undoing change to \$CFLAGS" 1>&6 echo "${as_me:-configure}:12063: testing test-compile failed. Undoing change to \$CFLAGS ..." 1>&5 if test "x$cf_check_cppflags" != "x$CPPFLAGS" ; then test -n "$verbose" && echo " but keeping change to \$CPPFLAGS" 1>&6 echo "${as_me:-configure}:12068: testing but keeping change to \$CPPFLAGS ..." 1>&5 fi CFLAGS="$cf_check_flags" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:12076: checking for XOpenDisplay" >&5 echo $ECHO_N "checking for XOpenDisplay... $ECHO_C" >&6 if test "${ac_cv_func_XOpenDisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12082 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char XOpenDisplay (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_XOpenDisplay) || defined (__stub___XOpenDisplay) choke me #else f = XOpenDisplay; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12113: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12116: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12119: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12122: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_XOpenDisplay=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_XOpenDisplay=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:12132: result: $ac_cv_func_XOpenDisplay" >&5 echo "${ECHO_T}$ac_cv_func_XOpenDisplay" >&6 if test $ac_cv_func_XOpenDisplay = yes; then : else echo "$as_me:12138: checking for XOpenDisplay in -lX11" >&5 echo $ECHO_N "checking for XOpenDisplay in -lX11... $ECHO_C" >&6 if test "${ac_cv_lib_X11_XOpenDisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 12146 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main () { XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12165: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12168: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12171: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12174: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_X11_XOpenDisplay=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_X11_XOpenDisplay=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:12185: result: $ac_cv_lib_X11_XOpenDisplay" >&5 echo "${ECHO_T}$ac_cv_lib_X11_XOpenDisplay" >&6 if test $ac_cv_lib_X11_XOpenDisplay = yes; then cf_add_libs="-lX11" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi fi echo "$as_me:12209: checking for XtAppInitialize" >&5 echo $ECHO_N "checking for XtAppInitialize... $ECHO_C" >&6 if test "${ac_cv_func_XtAppInitialize+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12215 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char XtAppInitialize (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XtAppInitialize (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_XtAppInitialize) || defined (__stub___XtAppInitialize) choke me #else f = XtAppInitialize; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12246: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12249: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12252: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12255: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_XtAppInitialize=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_XtAppInitialize=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:12265: result: $ac_cv_func_XtAppInitialize" >&5 echo "${ECHO_T}$ac_cv_func_XtAppInitialize" >&6 if test $ac_cv_func_XtAppInitialize = yes; then : else echo "$as_me:12271: checking for XtAppInitialize in -lXt" >&5 echo $ECHO_N "checking for XtAppInitialize in -lXt... $ECHO_C" >&6 if test "${ac_cv_lib_Xt_XtAppInitialize+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 12279 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XtAppInitialize (); int main () { XtAppInitialize (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12298: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12301: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12304: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12307: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_Xt_XtAppInitialize=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_Xt_XtAppInitialize=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:12318: result: $ac_cv_lib_Xt_XtAppInitialize" >&5 echo "${ECHO_T}$ac_cv_lib_Xt_XtAppInitialize" >&6 if test $ac_cv_lib_Xt_XtAppInitialize = yes; then cat >>confdefs.h <<\EOF #define HAVE_LIBXT 1 EOF cf_have_X_LIBS=Xt LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS" fi fi fi if test $cf_have_X_LIBS = no ; then { echo "$as_me:12335: WARNING: Unable to successfully link X Toolkit library (-lXt) with test program. You will have to check and add the proper libraries by hand to makefile." >&5 echo "$as_me: WARNING: Unable to successfully link X Toolkit library (-lXt) with test program. You will have to check and add the proper libraries by hand to makefile." >&2;} fi cf_x_athena_root=$cf_x_athena cf_x_athena_inc="" for cf_path in default \ /usr/contrib/X11R6 \ /usr/contrib/X11R5 \ /usr/lib/X11R5 \ /usr/local do if test -z "$cf_x_athena_inc" ; then cf_save="$CPPFLAGS" cf_test=X11/$cf_x_athena_root/SimpleMenu.h if test $cf_path != default ; then CPPFLAGS="$cf_save -I$cf_path/include" echo "$as_me:12357: checking for $cf_test in $cf_path" >&5 echo $ECHO_N "checking for $cf_test in $cf_path... $ECHO_C" >&6 else echo "$as_me:12360: checking for $cf_test" >&5 echo $ECHO_N "checking for $cf_test... $ECHO_C" >&6 fi cat >conftest.$ac_ext <<_ACEOF #line 12364 "configure" #include "confdefs.h" #include #include <$cf_test> int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12378: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12381: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12384: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12387: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:12396: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test "$cf_result" = yes ; then cf_x_athena_inc=$cf_path break else CPPFLAGS="$cf_save" fi fi done if test -z "$cf_x_athena_inc" ; then { echo "$as_me:12408: WARNING: Unable to successfully find Athena header files with test program" >&5 echo "$as_me: WARNING: Unable to successfully find Athena header files with test program" >&2;} elif test "$cf_x_athena_inc" != default ; then CPPFLAGS="$CPPFLAGS -I$cf_x_athena_inc" fi cf_x_athena_root=$cf_x_athena cf_x_athena_lib="" for cf_path in default \ /usr/contrib/X11R6 \ /usr/contrib/X11R5 \ /usr/lib/X11R5 \ /usr/local do for cf_lib in \ ${cf_x_athena_root} \ ${cf_x_athena_root}7 \ ${cf_x_athena_root}6 do for cf_libs in \ "-l$cf_lib -lXmu" \ "-l$cf_lib -lXpm -lXmu" \ "-l${cf_lib}_s -lXmu_s" do if test -z "$cf_x_athena_lib" ; then cf_save="$LIBS" cf_test=XawSimpleMenuAddGlobalActions if test $cf_path != default ; then cf_add_libs="-L$cf_path/lib $cf_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" echo "$as_me:12454: checking for $cf_libs in $cf_path" >&5 echo $ECHO_N "checking for $cf_libs in $cf_path... $ECHO_C" >&6 else cf_add_libs="$cf_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" echo "$as_me:12474: checking for $cf_test in $cf_libs" >&5 echo $ECHO_N "checking for $cf_test in $cf_libs... $ECHO_C" >&6 fi cat >conftest.$ac_ext <<_ACEOF #line 12478 "configure" #include "confdefs.h" #include #include int main () { $cf_test((XtAppContext) 0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12494: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12497: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12500: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12503: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:12512: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test "$cf_result" = yes ; then cf_x_athena_lib="$cf_libs" break fi LIBS="$cf_save" fi done # cf_libs test -n "$cf_x_athena_lib" && break done # cf_lib done if test -z "$cf_x_athena_lib" ; then { { echo "$as_me:12526: error: Unable to successfully link Athena library (-l$cf_x_athena_root) with test program" >&5 echo "$as_me: error: Unable to successfully link Athena library (-l$cf_x_athena_root) with test program" >&2;} { (exit 1); exit 1; }; } fi cf_x_athena_LIBS=`echo "HAVE_LIB_$cf_x_athena" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_XCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$XCURSES_CONFIG"; then ac_cv_prog_XCURSES_CONFIG="$XCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_XCURSES_CONFIG="$ac_tool_prefix$ac_prog" echo "$as_me:12559: found $ac_dir/$ac_word" >&5 break done fi fi XCURSES_CONFIG=$ac_cv_prog_XCURSES_CONFIG if test -n "$XCURSES_CONFIG"; then echo "$as_me:12567: result: $XCURSES_CONFIG" >&5 echo "${ECHO_T}$XCURSES_CONFIG" >&6 else echo "$as_me:12570: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$XCURSES_CONFIG" && break done fi if test -z "$XCURSES_CONFIG"; then ac_ct_XCURSES_CONFIG=$XCURSES_CONFIG for ac_prog in xcurses-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:12583: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_XCURSES_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_XCURSES_CONFIG"; then ac_cv_prog_ac_ct_XCURSES_CONFIG="$ac_ct_XCURSES_CONFIG" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_XCURSES_CONFIG="$ac_prog" echo "$as_me:12598: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_XCURSES_CONFIG=$ac_cv_prog_ac_ct_XCURSES_CONFIG if test -n "$ac_ct_XCURSES_CONFIG"; then echo "$as_me:12606: result: $ac_ct_XCURSES_CONFIG" >&5 echo "${ECHO_T}$ac_ct_XCURSES_CONFIG" >&6 else echo "$as_me:12609: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_XCURSES_CONFIG" && break done test -n "$ac_ct_XCURSES_CONFIG" || ac_ct_XCURSES_CONFIG="none" XCURSES_CONFIG=$ac_ct_XCURSES_CONFIG fi if test "$XCURSES_CONFIG" != none ; then CPPFLAGS="$CPPFLAGS `$XCURSES_CONFIG --cflags`" cf_add_libs="`$XCURSES_CONFIG --libs`" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cf_cv_lib_XCurses=yes else LDFLAGS="$LDFLAGS $X_LIBS" test -n "$verbose" && echo " checking additions to CFLAGS" 1>&6 echo "${as_me:-configure}:12648: testing checking additions to CFLAGS ..." 1>&5 cf_check_cflags="$CFLAGS" cf_check_cppflags="$CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $X_CFLAGS do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 echo "${as_me:-configure}:12719: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6 echo "${as_me:-configure}:12727: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6 echo "${as_me:-configure}:12735: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi if test "x$cf_check_cflags" != "x$CFLAGS" ; then cat >conftest.$ac_ext <<_ACEOF #line 12742 "configure" #include "confdefs.h" #include int main () { printf("Hello world"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12754: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12757: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12760: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12763: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 test -n "$verbose" && echo " test-compile failed. Undoing change to \$CFLAGS" 1>&6 echo "${as_me:-configure}:12771: testing test-compile failed. Undoing change to \$CFLAGS ..." 1>&5 if test "x$cf_check_cppflags" != "x$CPPFLAGS" ; then test -n "$verbose" && echo " but keeping change to \$CPPFLAGS" 1>&6 echo "${as_me:-configure}:12776: testing but keeping change to \$CPPFLAGS ..." 1>&5 fi CFLAGS="$cf_check_flags" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:12784: checking for XOpenDisplay in -lX11" >&5 echo $ECHO_N "checking for XOpenDisplay in -lX11... $ECHO_C" >&6 if test "${ac_cv_lib_X11_XOpenDisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 12792 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main () { XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12811: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12814: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12817: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12820: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_X11_XOpenDisplay=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_X11_XOpenDisplay=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:12831: result: $ac_cv_lib_X11_XOpenDisplay" >&5 echo "${ECHO_T}$ac_cv_lib_X11_XOpenDisplay" >&6 if test $ac_cv_lib_X11_XOpenDisplay = yes; then cf_add_libs="-lX11" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi echo "$as_me:12853: checking for XCurses library" >&5 echo $ECHO_N "checking for XCurses library... $ECHO_C" >&6 if test "${cf_cv_lib_XCurses+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_add_libs="-lXCurses" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 12876 "configure" #include "confdefs.h" #include char *XCursesProgramName = "test"; int main () { XCursesExit(); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12891: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12894: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12897: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12900: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_lib_XCurses=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_lib_XCurses=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:12911: result: $cf_cv_lib_XCurses" >&5 echo "${ECHO_T}$cf_cv_lib_XCurses" >&6 fi if test $cf_cv_lib_XCurses = yes ; then cat >>confdefs.h <<\EOF #define UNIX 1 EOF cat >>confdefs.h <<\EOF #define XCURSES 1 EOF echo "$as_me:12926: checking for xcurses.h" >&5 echo $ECHO_N "checking for xcurses.h... $ECHO_C" >&6 if test "${ac_cv_header_xcurses_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12932 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:12936: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:12942: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_xcurses_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_xcurses_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:12961: result: $ac_cv_header_xcurses_h" >&5 echo "${ECHO_T}$ac_cv_header_xcurses_h" >&6 if test $ac_cv_header_xcurses_h = yes; then cat >>confdefs.h <<\EOF #define HAVE_XCURSES 1 EOF fi else { { echo "$as_me:12972: error: Cannot link with XCurses" >&5 echo "$as_me: error: Cannot link with XCurses" >&2;} { (exit 1); exit 1; }; } fi ;; (*) { { echo "$as_me:12979: error: unexpected screen-value: $cf_cv_screen" >&5 echo "$as_me: error: unexpected screen-value: $cf_cv_screen" >&2;} { (exit 1); exit 1; }; } ;; esac case $cf_cv_screen in (ncurses*) cf_cv_libtype=`echo "$cf_cv_screen" | sed -e 's/^ncurses//'` ;; (curses|curses_*) echo "$as_me:12991: checking for NetBSD form.h" >&5 echo $ECHO_N "checking for NetBSD form.h... $ECHO_C" >&6 if test "${cf_cv_netbsd_form_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12998 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include int main () { FORM *form; int y = current_field(form)->cursor_ypos; int x = current_field(form)->cursor_xpos; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13017: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13020: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13023: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13026: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_netbsd_form_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_netbsd_form_h=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:13038: result: $cf_cv_netbsd_form_h" >&5 echo "${ECHO_T}$cf_cv_netbsd_form_h" >&6 test "$cf_cv_netbsd_form_h" = yes && cat >>confdefs.h <<\EOF #define HAVE_NETBSD_FORM_H 1 EOF echo "$as_me:13046: checking for NetBSD menu.h" >&5 echo $ECHO_N "checking for NetBSD menu.h... $ECHO_C" >&6 if test "${cf_cv_netbsd_menu_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13053 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include int main () { MENU *menu; int y = menu->max_item_width; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13071: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13074: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13077: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13080: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_netbsd_menu_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_netbsd_menu_h=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:13092: result: $cf_cv_netbsd_menu_h" >&5 echo "${ECHO_T}$cf_cv_netbsd_menu_h" >&6 test "$cf_cv_netbsd_menu_h" = yes && cat >>confdefs.h <<\EOF #define HAVE_NETBSD_MENU_H 1 EOF ;; esac case $cf_cv_screen in (pdcurses) ;; (*) # look for curses-related libraries as_ac_Lib=`echo "ac_cv_lib_panel$cf_cv_libtype''_new_panel" | $as_tr_sh` echo "$as_me:13110: checking for new_panel in -lpanel$cf_cv_libtype" >&5 echo $ECHO_N "checking for new_panel in -lpanel$cf_cv_libtype... $ECHO_C" >&6 if eval "test \"\${$as_ac_Lib+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpanel$cf_cv_libtype $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 13118 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char new_panel (); int main () { new_panel (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13137: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13140: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13143: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13146: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:13157: result: `eval echo '${'$as_ac_Lib'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 if test `eval echo '${'$as_ac_Lib'}'` = yes; then cf_upper=`echo "have_libpanel" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cf_add_libs="-lpanel$cf_cv_libtype" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >>confdefs.h <&5 echo $ECHO_N "checking for menu_driver in -lmenu$cf_cv_libtype... $ECHO_C" >&6 if eval "test \"\${$as_ac_Lib+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmenu$cf_cv_libtype $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 13194 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char menu_driver (); int main () { menu_driver (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13213: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13216: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13219: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13222: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:13233: result: `eval echo '${'$as_ac_Lib'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 if test `eval echo '${'$as_ac_Lib'}'` = yes; then cf_upper=`echo "have_libmenu" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cf_add_libs="-lmenu$cf_cv_libtype" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >>confdefs.h <&5 echo $ECHO_N "checking for form_driver in -lform$cf_cv_libtype... $ECHO_C" >&6 if eval "test \"\${$as_ac_Lib+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lform$cf_cv_libtype $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 13270 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char form_driver (); int main () { form_driver (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13289: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13292: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13295: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13298: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:13309: result: `eval echo '${'$as_ac_Lib'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 if test `eval echo '${'$as_ac_Lib'}'` = yes; then cf_upper=`echo "have_libform" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cf_add_libs="-lform$cf_cv_libtype" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >>confdefs.h <&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13355 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:13359: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:13365: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:13384: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13403 "configure" #include "confdefs.h" #include #include #include #include _ACEOF if { (eval echo "$as_me:13411: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:13417: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 13439 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 13457 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line 13478 "configure" #include "confdefs.h" #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) $ac_main_return(2); $ac_main_return (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:13504: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13507: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:13509: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13512: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:13525: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi echo "$as_me:13535: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13541 "configure" #include "confdefs.h" #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13557: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13560: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13563: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13566: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:13576: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6 if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\EOF #define TIME_WITH_SYS_TIME 1 EOF fi for ac_header in \ getopt.h \ locale.h \ math.h \ stdarg.h \ sys/ioctl.h \ sys/select.h \ sys/time.h \ termios.h \ unistd.h \ do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:13599: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13605 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:13609: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:13615: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:13634: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13653 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:13657: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:13663: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:13682: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for header declaring getopt variables... $ECHO_C" >&6 if test "${cf_cv_getopt_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_getopt_header=none for cf_header in stdio.h stdlib.h unistd.h getopt.h do cat >conftest.$ac_ext <<_ACEOF #line 13702 "configure" #include "confdefs.h" #include <$cf_header> int main () { int x = optind; char *y = optarg ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13715: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13718: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13721: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13724: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_getopt_header=$cf_header break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:13736: result: $cf_cv_getopt_header" >&5 echo "${ECHO_T}$cf_cv_getopt_header" >&6 if test $cf_cv_getopt_header != none ; then cat >>confdefs.h <<\EOF #define HAVE_GETOPT_HEADER 1 EOF fi if test $cf_cv_getopt_header = getopt.h ; then cat >>confdefs.h <<\EOF #define NEED_GETOPT_H 1 EOF fi for ac_func in \ getopt \ gettimeofday \ do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:13759: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13765 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13796: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13799: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13802: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13805: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:13815: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <&5 echo "$as_me: error: getopt is required for building programs" >&2;} { (exit 1); exit 1; }; } fi if test "$cf_enable_widec" = yes; then for ac_func in \ mblen \ mbrlen \ mbrtowc \ mbsrtowcs \ mbstowcs \ mbtowc \ wcsrtombs \ wcstombs \ do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:13845: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13851 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13882: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13885: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13888: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13891: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:13901: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking definition to turn on extended curses functions... $ECHO_C" >&6 if test "${cf_cv_need_xopen_extension+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_need_xopen_extension=unknown cat >conftest.$ac_ext <<_ACEOF #line 13921 "configure" #include "confdefs.h" #include #include <${cf_cv_ncurses_header:-curses.h}> int main () { #if defined(NCURSES_VERSION_PATCH) #if (NCURSES_VERSION_PATCH < 20100501) && (NCURSES_VERSION_PATCH >= 20100403) make an error #endif #endif #ifdef NCURSES_VERSION cchar_t check; int check2 = curs_set((int)sizeof(check)); #endif long x = winnstr(stdscr, "", 0); int x1, y1; getbegyx(stdscr, y1, x1) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13947: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13950: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13953: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13956: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_need_xopen_extension=none else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 for cf_try_xopen_extension in _XOPEN_SOURCE_EXTENDED NCURSES_WIDECHAR do cat >conftest.$ac_ext <<_ACEOF #line 13966 "configure" #include "confdefs.h" #define $cf_try_xopen_extension 1 #include #include <${cf_cv_ncurses_header:-curses.h}> int main () { #ifdef NCURSES_VERSION cchar_t check; int check2 = curs_set((int)sizeof(check)); #endif long x = winnstr(stdscr, "", 0); int x1, y1; getbegyx(stdscr, y1, x1) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13988: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13991: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13994: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13997: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_need_xopen_extension=$cf_try_xopen_extension; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:14011: result: $cf_cv_need_xopen_extension" >&5 echo "${ECHO_T}$cf_cv_need_xopen_extension" >&6 case $cf_cv_need_xopen_extension in (*_*) CPPFLAGS="$CPPFLAGS -D$cf_cv_need_xopen_extension" ;; esac echo "$as_me:14020: checking for term.h" >&5 echo $ECHO_N "checking for term.h... $ECHO_C" >&6 if test "${cf_cv_term_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # If we found , look for , but always look # for if we do not find the variant. cf_header_list="term.h ncurses/term.h ncursesw/term.h" case ${cf_cv_ncurses_header:-curses.h} in (*/*) cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`term.h cf_header_list="$cf_header_item $cf_header_list" ;; esac for cf_header in $cf_header_list do cat >conftest.$ac_ext <<_ACEOF #line 14041 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include <${cf_header}> int main () { WINDOW *x ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:14055: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:14058: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:14061: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14064: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_term_header=$cf_header break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_term_header=no fi rm -f conftest.$ac_objext conftest.$ac_ext done case $cf_cv_term_header in (no) # If curses is ncurses, some packagers still mess it up by trying to make # us use GNU termcap. This handles the most common case. for cf_header in ncurses/term.h ncursesw/term.h do cat >conftest.$ac_ext <<_ACEOF #line 14083 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #ifdef NCURSES_VERSION #include <${cf_header}> #else make an error #endif int main () { WINDOW *x ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:14101: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:14104: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:14107: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14110: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_term_header=$cf_header break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_term_header=no fi rm -f conftest.$ac_objext conftest.$ac_ext done ;; esac fi echo "$as_me:14125: result: $cf_cv_term_header" >&5 echo "${ECHO_T}$cf_cv_term_header" >&6 case $cf_cv_term_header in (term.h) cat >>confdefs.h <<\EOF #define HAVE_TERM_H 1 EOF ;; (ncurses/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_TERM_H 1 EOF ;; (ncursesw/term.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_TERM_H 1 EOF ;; esac echo "$as_me:14152: checking for unctrl.h" >&5 echo $ECHO_N "checking for unctrl.h... $ECHO_C" >&6 if test "${cf_cv_unctrl_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # If we found , look for , but always look # for if we do not find the variant. cf_header_list="unctrl.h ncurses/unctrl.h ncursesw/unctrl.h" case ${cf_cv_ncurses_header:-curses.h} in (*/*) cf_header_item=`echo ${cf_cv_ncurses_header:-curses.h} | sed -e 's%\..*%%' -e 's%/.*%/%'`unctrl.h cf_header_list="$cf_header_item $cf_header_list" ;; esac for cf_header in $cf_header_list do cat >conftest.$ac_ext <<_ACEOF #line 14173 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include <${cf_header}> int main () { WINDOW *x ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:14187: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:14190: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:14193: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14196: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_unctrl_header=$cf_header break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_unctrl_header=no fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:14209: result: $cf_cv_unctrl_header" >&5 echo "${ECHO_T}$cf_cv_unctrl_header" >&6 case $cf_cv_unctrl_header in (no) { echo "$as_me:14214: WARNING: unctrl.h header not found" >&5 echo "$as_me: WARNING: unctrl.h header not found" >&2;} ;; esac case $cf_cv_unctrl_header in (unctrl.h) cat >>confdefs.h <<\EOF #define HAVE_UNCTRL_H 1 EOF ;; (ncurses/unctrl.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSES_UNCTRL_H 1 EOF ;; (ncursesw/unctrl.h) cat >>confdefs.h <<\EOF #define HAVE_NCURSESW_UNCTRL_H 1 EOF ;; esac for cf_func in \ assume_default_colors \ chgat \ color_set \ filter \ getbegx \ getcurx \ getmaxx \ getnstr \ getparx \ getwin \ mvvline \ mvwvline \ napms \ putwin \ resize_term \ resizeterm \ ripoffline \ scr_dump \ setupterm \ slk_color \ slk_init \ termattrs \ tgetent \ tigetnum \ tigetstr \ typeahead \ use_default_colors \ use_env \ use_extended_names \ use_screen \ use_window \ vid_puts \ vidputs \ vsscanf \ vw_printw \ wchgat \ winsstr \ wresize \ wsyncdown \ do cf_tr_func=`echo "$cf_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` echo "$as_me:14288: checking for ${cf_func}" >&5 echo $ECHO_N "checking for ${cf_func}... $ECHO_C" >&6 echo "${as_me:-configure}:14291: testing ${cf_func} ..." 1>&5 if eval "test \"\${cf_cv_func_$cf_func+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval cf_result='$ac_cv_func_'$cf_func if test ".$cf_result" != ".no"; then cat >conftest.$ac_ext <<_ACEOF #line 14300 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif int main () { #ifndef ${cf_func} long foo = (long)(&${cf_func}); fprintf(stderr, "testing linkage of $cf_func:%p\n", foo); if (foo + 1234 > 5678) ${cf_cv_main_return:-return}(foo); #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14333: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14336: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14339: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14342: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi eval 'cf_cv_func_'$cf_func'=$cf_result' fi # use the computed/retrieved cache-value: eval 'cf_result=$cf_cv_func_'$cf_func echo "$as_me:14358: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result != no; then cat >>confdefs.h <&5 echo $ECHO_N "checking for ${cf_func}... $ECHO_C" >&6 echo "${as_me:-configure}:14376: testing ${cf_func} ..." 1>&5 if eval "test \"\${cf_cv_func_$cf_func+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval cf_result='$ac_cv_func_'$cf_func if test ".$cf_result" != ".no"; then cat >conftest.$ac_ext <<_ACEOF #line 14385 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif int main () { #ifndef ${cf_func} long foo = (long)(&${cf_func}); fprintf(stderr, "testing linkage of $cf_func:%p\n", foo); if (foo + 1234 > 5678) ${cf_cv_main_return:-return}(foo); #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14418: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14421: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14424: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14427: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi eval 'cf_cv_func_'$cf_func'=$cf_result' fi # use the computed/retrieved cache-value: eval 'cf_result=$cf_cv_func_'$cf_func echo "$as_me:14443: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result != no; then cat >>confdefs.h <conftest.$ac_ext <<_ACEOF #line 14467 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> #include <$cf_cv_term_header> static $cf_ret outc($cf_arg value) { $cf_return; } int main () { tputs("hello", 0, outc); ${cf_cv_main_return:-return}(0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:14487: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:14490: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:14493: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14496: \$? = $ac_status" >&5 (exit $ac_status); }; }; then test -n "$verbose" && echo " prototype $cf_ret func($cf_arg value)" 1>&6 echo "${as_me:-configure}:14501: testing prototype $cf_ret func($cf_arg value) ..." 1>&5 cat >>confdefs.h <&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done test $cf_done = yes && break done fi echo "$as_me:14521: checking for ncurses extended functions" >&5 echo $ECHO_N "checking for ncurses extended functions... $ECHO_C" >&6 if test "${cf_cv_ncurses_ext_funcs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 14528 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { int x = NCURSES_EXT_FUNCS ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:14543: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:14546: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:14549: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14552: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_ext_funcs=defined else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 14560 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { (void) assume_default_colors (0, 0); (void) curses_version (); (void) define_key (0, 0); (void) is_term_resized (0, 0); (void) key_defined (0); (void) keybound (0, 0); (void) keyok (0, 0); (void) resize_term (0, 0); (void) resizeterm (0, 0); (void) use_default_colors (); (void) use_extended_names (0); (void) wresize (0, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14585: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14588: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14591: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14594: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ncurses_ext_funcs=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ncurses_ext_funcs=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:14608: result: $cf_cv_ncurses_ext_funcs" >&5 echo "${ECHO_T}$cf_cv_ncurses_ext_funcs" >&6 test "$cf_cv_ncurses_ext_funcs" = yes && cat >>confdefs.h <<\EOF #define NCURSES_EXT_FUNCS 1 EOF if test "$cf_enable_widec" = yes then # workaround for systems with ncurses before 20111029, due to change of # feature test macro from _XPG5 to _XOPEN_SOURCE if test -n "$cf_cv_ncurses_version" && test "x$cf_cv_ncurses_version" != xno then cf_define_xpg5=no echo "$as_me:14622: checking if _XPG5 should be defined to enable wide-characters" >&5 echo $ECHO_N "checking if _XPG5 should be defined to enable wide-characters... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 14626 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { int x = _XPG5 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:14639: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:14642: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:14645: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14648: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_save_cppflags="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XPG5" cat >conftest.$ac_ext <<_ACEOF #line 14657 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { int x = _XPG5 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:14670: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:14673: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:14676: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14679: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_define_xpg5=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save_cppflags" fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:14690: result: $cf_define_xpg5" >&5 echo "${ECHO_T}$cf_define_xpg5" >&6 if test "$cf_define_xpg5" = yes then CPPFLAGS="$CPPFLAGS -D_XPG5" fi fi echo "$as_me:14699: checking for wide-character functions" >&5 echo $ECHO_N "checking for wide-character functions... $ECHO_C" >&6 if test "${cf_cv_widechar_funcs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 14706 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { static wchar_t src_wchar[2]; static cchar_t dst_cchar; setcchar(&dst_cchar, src_wchar, A_NORMAL, 0, (void *) 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14723: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14726: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14729: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14732: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_widechar_funcs=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_widechar_funcs=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:14743: result: $cf_cv_widechar_funcs" >&5 echo "${ECHO_T}$cf_cv_widechar_funcs" >&6 if test "$cf_cv_widechar_funcs" != no ; then cat >>confdefs.h <<\EOF #define USE_WIDEC_SUPPORT 1 EOF else cat >>confdefs.h <<\EOF #define USE_WIDEC_SUPPORT 0 EOF fi else cat >>confdefs.h <<\EOF #define USE_WIDEC_SUPPORT 0 EOF fi echo "$as_me:14764: checking if $cf_cv_screen library uses pthreads" >&5 echo $ECHO_N "checking if $cf_cv_screen library uses pthreads... $ECHO_C" >&6 if test "${cf_cv_use_pthreads+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 14771 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> extern void _nc_init_pthreads(void); int main () { initscr(); _nc_init_pthreads(); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14789: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14792: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14795: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14798: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_use_pthreads=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_use_pthreads=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:14809: result: $cf_cv_use_pthreads" >&5 echo "${ECHO_T}$cf_cv_use_pthreads" >&6 test $cf_cv_use_pthreads = yes && cat >>confdefs.h <<\EOF #define USE_PTHREADS 1 EOF echo "$as_me:14815: checking if sys/time.h works with sys/select.h" >&5 echo $ECHO_N "checking if sys/time.h works with sys/select.h... $ECHO_C" >&6 if test "${cf_cv_sys_time_select+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 14822 "configure" #include "confdefs.h" #include #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:14842: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:14845: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:14848: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14851: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_sys_time_select=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_sys_time_select=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:14863: result: $cf_cv_sys_time_select" >&5 echo "${ECHO_T}$cf_cv_sys_time_select" >&6 test "$cf_cv_sys_time_select" = yes && cat >>confdefs.h <<\EOF #define HAVE_SYS_TIME_SELECT 1 EOF # special check for test/ditto.c echo "$as_me:14872: checking for openpty in -lutil" >&5 echo $ECHO_N "checking for openpty in -lutil... $ECHO_C" >&6 if test "${ac_cv_lib_util_openpty+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 14880 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char openpty (); int main () { openpty (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14899: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14902: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14905: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14908: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_util_openpty=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_util_openpty=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:14919: result: $ac_cv_lib_util_openpty" >&5 echo "${ECHO_T}$ac_cv_lib_util_openpty" >&6 if test $ac_cv_lib_util_openpty = yes; then cf_cv_lib_util=yes else cf_cv_lib_util=no fi echo "$as_me:14927: checking for openpty header" >&5 echo $ECHO_N "checking for openpty header... $ECHO_C" >&6 if test "${cf_cv_func_openpty+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save_LIBS="$LIBS" test $cf_cv_lib_util = yes && { cf_add_libs="-lutil" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" } for cf_header in pty.h libutil.h util.h do cat >conftest.$ac_ext <<_ACEOF #line 14954 "configure" #include "confdefs.h" #include <$cf_header> int main () { int x = openpty((int *)0, (int *)0, (char *)0, (struct termios *)0, (struct winsize *)0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14971: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14974: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14977: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14980: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_func_openpty=$cf_header break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_func_openpty=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done LIBS="$cf_save_LIBS" fi echo "$as_me:14998: result: $cf_cv_func_openpty" >&5 echo "${ECHO_T}$cf_cv_func_openpty" >&6 if test "$cf_cv_func_openpty" != no ; then cat >>confdefs.h < EOF cat >>confdefs.h <<\EOF #define USE_XTERM_PTY 1 EOF if test "x$cf_cv_lib_util" = xyes ; then cf_add_libs="-lutil" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $TEST_LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done TEST_LIBS="$cf_add_libs" fi fi echo "$as_me:15032: checking for function curses_version" >&5 echo $ECHO_N "checking for function curses_version... $ECHO_C" >&6 if test "${cf_cv_func_curses_version+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then cf_cv_func_curses_version=unknown else cat >conftest.$ac_ext <<_ACEOF #line 15042 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main() { char temp[1024]; sprintf(temp, "%s\n", curses_version()); ${cf_cv_main_return:-return}(0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:15055: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15058: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:15060: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15063: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_func_curses_version=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_func_curses_version=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f core fi echo "$as_me:15078: result: $cf_cv_func_curses_version" >&5 echo "${ECHO_T}$cf_cv_func_curses_version" >&6 test "$cf_cv_func_curses_version" = yes && cat >>confdefs.h <<\EOF #define HAVE_CURSES_VERSION 1 EOF echo "$as_me:15085: checking for alternate character set array" >&5 echo $ECHO_N "checking for alternate character set array... $ECHO_C" >&6 if test "${cf_cv_curses_acs_map+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_curses_acs_map=unknown for name in acs_map _acs_map __acs_map ${NCURSES_WRAP_PREFIX}acs_map do cat >conftest.$ac_ext <<_ACEOF #line 15095 "configure" #include "confdefs.h" #include <${cf_cv_ncurses_header:-curses.h}> int main () { $name['k'] = ACS_PLUS ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15111: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15114: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15117: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15120: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_curses_acs_map=$name; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi echo "$as_me:15131: result: $cf_cv_curses_acs_map" >&5 echo "${ECHO_T}$cf_cv_curses_acs_map" >&6 test "$cf_cv_curses_acs_map" != unknown && cat >>confdefs.h <&5 echo $ECHO_N "checking for wide alternate character set array... $ECHO_C" >&6 if test "${cf_cv_curses_wacs_map+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_curses_wacs_map=unknown for name in wacs_map _wacs_map __wacs_map _nc_wacs _wacs_char do cat >conftest.$ac_ext <<_ACEOF #line 15151 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int main () { void *foo = &($name['k']) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15167: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15170: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15173: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15176: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_curses_wacs_map=$name break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi echo "$as_me:15187: result: $cf_cv_curses_wacs_map" >&5 echo "${ECHO_T}$cf_cv_curses_wacs_map" >&6 test "$cf_cv_curses_wacs_map" != unknown && cat >>confdefs.h <&5 echo $ECHO_N "checking for wide alternate character constants... $ECHO_C" >&6 if test "${cf_cv_curses_wacs_symbols+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_curses_wacs_symbols=no if test "$cf_cv_curses_wacs_map" != unknown then cat >conftest.$ac_ext <<_ACEOF #line 15205 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int main () { cchar_t *foo = WACS_PLUS; $cf_cv_curses_wacs_map['k'] = *WACS_PLUS ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15222: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15225: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15228: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15231: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_curses_wacs_symbols=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext else cat >conftest.$ac_ext <<_ACEOF #line 15241 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int main () { cchar_t *foo = WACS_PLUS ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15257: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15260: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15263: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15266: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_curses_wacs_symbols=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi fi echo "$as_me:15277: result: $cf_cv_curses_wacs_symbols" >&5 echo "${ECHO_T}$cf_cv_curses_wacs_symbols" >&6 test "$cf_cv_curses_wacs_symbols" != no && cat >>confdefs.h <<\EOF #define CURSES_WACS_SYMBOLS 1 EOF fi echo "$as_me:15287: checking for type attr_t in ${cf_cv_ncurses_header:-curses.h}" >&5 echo $ECHO_N "checking for type attr_t in ${cf_cv_ncurses_header:-curses.h}... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 15290 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int main () { attr_t foo ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15308: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15311: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15314: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15317: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:15326: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result = yes ; then cf_result=`echo "have_type_attr_t" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <>confdefs.h <&5 echo $ECHO_N "checking if we must include wchar.h to declare mbstate_t... $ECHO_C" >&6 if test "${cf_cv_mbstate_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 15354 "configure" #include "confdefs.h" #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { mbstate_t state ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15372: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15375: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15378: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15381: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_mbstate_t=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 15388 "configure" #include "confdefs.h" #include #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { mbstate_t value ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15407: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15410: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15413: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15416: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_mbstate_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_mbstate_t=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:15428: result: $cf_cv_mbstate_t" >&5 echo "${ECHO_T}$cf_cv_mbstate_t" >&6 if test "$cf_cv_mbstate_t" = yes ; then cat >>confdefs.h <<\EOF #define NEED_WCHAR_H 1 EOF NEED_WCHAR_H=1 fi # if we do not find mbstate_t in either place, use substitution to provide a fallback. if test "$cf_cv_mbstate_t" = unknown ; then NCURSES_MBSTATE_T=1 fi # if we find mbstate_t in either place, use substitution to provide a fallback. if test "$cf_cv_mbstate_t" != unknown ; then NCURSES_OK_MBSTATE_T=1 fi # This is needed on Tru64 5.0 to declare wchar_t echo "$as_me:15451: checking if we must include wchar.h to declare wchar_t" >&5 echo $ECHO_N "checking if we must include wchar.h to declare wchar_t... $ECHO_C" >&6 if test "${cf_cv_wchar_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 15458 "configure" #include "confdefs.h" #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { wchar_t state ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15476: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15479: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15482: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15485: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_wchar_t=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 15492 "configure" #include "confdefs.h" #include #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { wchar_t value ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15511: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15514: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15517: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15520: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_wchar_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_wchar_t=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:15532: result: $cf_cv_wchar_t" >&5 echo "${ECHO_T}$cf_cv_wchar_t" >&6 if test "$cf_cv_wchar_t" = yes ; then cat >>confdefs.h <<\EOF #define NEED_WCHAR_H 1 EOF NEED_WCHAR_H=1 fi # if we do not find wchar_t in either place, use substitution to provide a fallback. if test "$cf_cv_wchar_t" = unknown ; then NCURSES_WCHAR_T=1 fi # if we find wchar_t in either place, use substitution to provide a fallback. if test "$cf_cv_wchar_t" != unknown ; then NCURSES_OK_WCHAR_T=1 fi # This is needed on Tru64 5.0 to declare wint_t echo "$as_me:15555: checking if we must include wchar.h to declare wint_t" >&5 echo $ECHO_N "checking if we must include wchar.h to declare wint_t... $ECHO_C" >&6 if test "${cf_cv_wint_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 15562 "configure" #include "confdefs.h" #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { wint_t state ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15580: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15583: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15586: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15589: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_wint_t=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 15596 "configure" #include "confdefs.h" #include #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { wint_t value ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15615: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15618: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15621: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15624: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_wint_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_wint_t=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:15636: result: $cf_cv_wint_t" >&5 echo "${ECHO_T}$cf_cv_wint_t" >&6 if test "$cf_cv_wint_t" = yes ; then cat >>confdefs.h <<\EOF #define NEED_WCHAR_H 1 EOF NEED_WCHAR_H=1 fi # if we do not find wint_t in either place, use substitution to provide a fallback. if test "$cf_cv_wint_t" = unknown ; then NCURSES_WINT_T=1 fi # if we find wint_t in either place, use substitution to provide a fallback. if test "$cf_cv_wint_t" != unknown ; then NCURSES_OK_WINT_T=1 fi if test "$NCURSES_OK_MBSTATE_T" = 0 ; then echo "$as_me:15660: checking for type mbstate_t in ${cf_cv_ncurses_header:-curses.h}" >&5 echo $ECHO_N "checking for type mbstate_t in ${cf_cv_ncurses_header:-curses.h}... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 15663 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int main () { mbstate_t foo ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15681: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15684: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15687: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15690: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:15699: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result = yes ; then cf_result=`echo "have_type_mbstate_t" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <>confdefs.h <&5 echo $ECHO_N "checking for type wchar_t in ${cf_cv_ncurses_header:-curses.h}... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 15724 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int main () { wchar_t foo ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15742: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15745: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15748: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15751: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:15760: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result = yes ; then cf_result=`echo "have_type_wchar_t" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <>confdefs.h <&5 echo $ECHO_N "checking for type wint_t in ${cf_cv_ncurses_header:-curses.h}... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 15785 "configure" #include "confdefs.h" #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED #endif #include <${cf_cv_ncurses_header:-curses.h}> int main () { wint_t foo ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15803: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15806: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15809: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15812: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:15821: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result = yes ; then cf_result=`echo "have_type_wint_t" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <>confdefs.h <&5 echo $ECHO_N "checking for data ospeed declaration in ${cf_cv_ncurses_header:-curses.h}... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 15846 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif int main () { void *foo = &(ospeed) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15874: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15877: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15880: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15883: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:15892: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result = yes ; then cf_result=`echo "have_curses_data_ospeed" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking for data ospeed in library... $ECHO_C" >&6 # BSD linkers insist on making weak linkage, but resolve at runtime. if test "$cross_compiling" = yes; then # cross-compiling cat >conftest.$ac_ext <<_ACEOF #line 15911 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif extern char ospeed; int main () { do { void *foo = &(ospeed); fprintf(stderr, "testing linkage of ospeed:%p\n", foo); ${cf_cv_main_return:-return}(foo == 0); } while (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15944: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15947: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15950: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15953: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext else cat >conftest.$ac_ext <<_ACEOF #line 15965 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif extern char ospeed; int main(void) { void *foo = &(ospeed); fprintf(stderr, "testing linkage of ospeed:%p\n", foo); ${cf_cv_main_return:-return}(foo == 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:15991: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15994: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:15996: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15999: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:16010: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result = yes ; then cf_result=`echo "decl_curses_data_ospeed" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking for data boolnames declaration in ${cf_cv_ncurses_header:-curses.h}... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 16027 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif int main () { void *foo = &(boolnames) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:16055: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16058: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:16061: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16064: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:16073: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result = yes ; then cf_result=`echo "have_curses_data_boolnames" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking for data boolnames in library... $ECHO_C" >&6 # BSD linkers insist on making weak linkage, but resolve at runtime. if test "$cross_compiling" = yes; then # cross-compiling cat >conftest.$ac_ext <<_ACEOF #line 16092 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif extern char boolnames; int main () { do { void *foo = &(boolnames); fprintf(stderr, "testing linkage of boolnames:%p\n", foo); ${cf_cv_main_return:-return}(foo == 0); } while (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:16125: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16128: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:16131: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16134: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext else cat >conftest.$ac_ext <<_ACEOF #line 16146 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif extern char boolnames; int main(void) { void *foo = &(boolnames); fprintf(stderr, "testing linkage of boolnames:%p\n", foo); ${cf_cv_main_return:-return}(foo == 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:16172: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16175: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:16177: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16180: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:16191: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result = yes ; then cf_result=`echo "decl_curses_data_boolnames" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking for data boolfnames declaration in ${cf_cv_ncurses_header:-curses.h}... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 16208 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif int main () { void *foo = &(boolfnames) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:16236: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16239: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:16242: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16245: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:16254: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result = yes ; then cf_result=`echo "have_curses_data_boolfnames" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking for data boolfnames in library... $ECHO_C" >&6 # BSD linkers insist on making weak linkage, but resolve at runtime. if test "$cross_compiling" = yes; then # cross-compiling cat >conftest.$ac_ext <<_ACEOF #line 16273 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif extern char boolfnames; int main () { do { void *foo = &(boolfnames); fprintf(stderr, "testing linkage of boolfnames:%p\n", foo); ${cf_cv_main_return:-return}(foo == 0); } while (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:16306: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16309: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:16312: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16315: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext else cat >conftest.$ac_ext <<_ACEOF #line 16327 "configure" #include "confdefs.h" #ifdef HAVE_XCURSES #include char * XCursesProgramName = "test"; #else #include <${cf_cv_ncurses_header:-curses.h}> #if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H) #include #elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H) #include #elif defined(HAVE_TERM_H) #include #endif #endif extern char boolfnames; int main(void) { void *foo = &(boolfnames); fprintf(stderr, "testing linkage of boolfnames:%p\n", foo); ${cf_cv_main_return:-return}(foo == 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:16353: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16356: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:16358: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16361: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:16372: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test $cf_result = yes ; then cf_result=`echo "decl_curses_data_boolfnames" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to turn on gcc warnings... $ECHO_C" >&6 # Check whether --enable-warnings or --disable-warnings was given. if test "${enable_warnings+set}" = set; then enableval="$enable_warnings" test "$enableval" != yes && enableval=no if test "$enableval" != "no" ; then with_warnings=yes else with_warnings=no fi else enableval=no with_warnings=no fi; echo "$as_me:16404: result: $with_warnings" >&5 echo "${ECHO_T}$with_warnings" >&6 if test "$with_warnings" = "yes" then if test "$GCC" = yes then cat > conftest.i <&5 echo "$as_me: checking for $CC __attribute__ directives..." >&6;} cat > conftest.$ac_ext <&5 case $cf_attribute in (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16482: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:16484: result: ... $cf_attribute" >&5 echo "${ECHO_T}... $cf_attribute" >&6 cat conftest.h >>confdefs.h case $cf_attribute in (noreturn) cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_PRINTF 1 EOF fi cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_SCANF 1 EOF fi cat >>confdefs.h <>confdefs.h <>confdefs.h fi rm -rf conftest* fi INTEL_COMPILER=no if test "$GCC" = yes ; then case $host_os in (linux*|gnu*) echo "$as_me:16548: checking if this is really Intel C compiler" >&5 echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -no-gcc" cat >conftest.$ac_ext <<_ACEOF #line 16553 "configure" #include "confdefs.h" int main () { #ifdef __INTEL_COMPILER #else make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:16570: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16573: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:16576: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16579: \$? = $ac_status" >&5 (exit $ac_status); }; }; then INTEL_COMPILER=yes cf_save_CFLAGS="$cf_save_CFLAGS -we147" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" echo "$as_me:16590: result: $INTEL_COMPILER" >&5 echo "${ECHO_T}$INTEL_COMPILER" >&6 ;; esac fi CLANG_COMPILER=no if test "$GCC" = yes ; then echo "$as_me:16599: checking if this is really Clang C compiler" >&5 echo $ECHO_N "checking if this is really Clang C compiler... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Qunused-arguments" cat >conftest.$ac_ext <<_ACEOF #line 16604 "configure" #include "confdefs.h" int main () { #ifdef __clang__ #else make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:16621: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16624: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:16627: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16630: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CLANG_COMPILER=yes cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" echo "$as_me:16641: result: $CLANG_COMPILER" >&5 echo "${ECHO_T}$CLANG_COMPILER" >&6 fi cat > conftest.$ac_ext <&5 echo "$as_me: checking for $CC warning options..." >&6;} cf_save_CFLAGS="$CFLAGS" EXTRA_CFLAGS="-Wall" for cf_opt in \ wd1419 \ wd1683 \ wd1684 \ wd193 \ wd593 \ wd279 \ wd810 \ wd869 \ wd981 do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" if { (eval echo "$as_me:16679: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16682: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:16684: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" fi done CFLAGS="$cf_save_CFLAGS" elif test "$GCC" = yes then { echo "$as_me:16693: checking for $CC warning options..." >&5 echo "$as_me: checking for $CC warning options..." >&6;} cf_save_CFLAGS="$CFLAGS" EXTRA_CFLAGS= cf_warn_CONST="" test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings" cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs" test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings= for cf_opt in W Wall \ Wbad-function-cast \ Wcast-align \ Wcast-qual \ Wdeclaration-after-statement \ Wextra \ Winline \ Wmissing-declarations \ Wmissing-prototypes \ Wnested-externs \ Wpointer-arith \ Wshadow \ Wstrict-prototypes \ Wundef $cf_gcc_warnings $cf_warn_CONST do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" if { (eval echo "$as_me:16717: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16720: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:16722: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 case $cf_opt in (Wcast-qual) CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES" ;; (Winline) case $GCC_VERSION in ([34].*) test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 echo "${as_me:-configure}:16733: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 continue;; esac ;; (Wpointer-arith) case $GCC_VERSION in ([12].*) test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 echo "${as_me:-configure}:16743: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 continue;; esac ;; esac EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" fi done CFLAGS="$cf_save_CFLAGS" fi rm -rf conftest* fi fi echo "$as_me:16759: checking if you want to use dmalloc for testing" >&5 echo $ECHO_N "checking if you want to use dmalloc for testing... $ECHO_C" >&6 # Check whether --with-dmalloc or --without-dmalloc was given. if test "${with_dmalloc+set}" = set; then withval="$with_dmalloc" cat >>confdefs.h <&5 echo "${ECHO_T}${with_dmalloc:-no}" >&6 case .$with_cflags in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -g do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi ;; esac ;; esac if test "$with_dmalloc" = yes ; then echo "$as_me:16870: checking for dmalloc.h" >&5 echo $ECHO_N "checking for dmalloc.h... $ECHO_C" >&6 if test "${ac_cv_header_dmalloc_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 16876 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:16880: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:16886: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_dmalloc_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_dmalloc_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:16905: result: $ac_cv_header_dmalloc_h" >&5 echo "${ECHO_T}$ac_cv_header_dmalloc_h" >&6 if test $ac_cv_header_dmalloc_h = yes; then echo "$as_me:16909: checking for dmalloc_debug in -ldmalloc" >&5 echo $ECHO_N "checking for dmalloc_debug in -ldmalloc... $ECHO_C" >&6 if test "${ac_cv_lib_dmalloc_dmalloc_debug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldmalloc $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 16917 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dmalloc_debug (); int main () { dmalloc_debug (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:16936: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16939: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:16942: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16945: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dmalloc_dmalloc_debug=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dmalloc_dmalloc_debug=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:16956: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5 echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_debug" >&6 if test $ac_cv_lib_dmalloc_dmalloc_debug = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to use dbmalloc for testing... $ECHO_C" >&6 # Check whether --with-dbmalloc or --without-dbmalloc was given. if test "${with_dbmalloc+set}" = set; then withval="$with_dbmalloc" cat >>confdefs.h <&5 echo "${ECHO_T}${with_dbmalloc:-no}" >&6 case .$with_cflags in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -g do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi ;; esac ;; esac if test "$with_dbmalloc" = yes ; then echo "$as_me:17082: checking for dbmalloc.h" >&5 echo $ECHO_N "checking for dbmalloc.h... $ECHO_C" >&6 if test "${ac_cv_header_dbmalloc_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 17088 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:17092: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:17098: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_dbmalloc_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_dbmalloc_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:17117: result: $ac_cv_header_dbmalloc_h" >&5 echo "${ECHO_T}$ac_cv_header_dbmalloc_h" >&6 if test $ac_cv_header_dbmalloc_h = yes; then echo "$as_me:17121: checking for debug_malloc in -ldbmalloc" >&5 echo $ECHO_N "checking for debug_malloc in -ldbmalloc... $ECHO_C" >&6 if test "${ac_cv_lib_dbmalloc_debug_malloc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldbmalloc $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 17129 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char debug_malloc (); int main () { debug_malloc (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:17148: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17151: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:17154: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17157: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dbmalloc_debug_malloc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dbmalloc_debug_malloc=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:17168: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5 echo "${ECHO_T}$ac_cv_lib_dbmalloc_debug_malloc" >&6 if test $ac_cv_lib_dbmalloc_debug_malloc = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to use valgrind for testing... $ECHO_C" >&6 # Check whether --with-valgrind or --without-valgrind was given. if test "${with_valgrind+set}" = set; then withval="$with_valgrind" cat >>confdefs.h <&5 echo "${ECHO_T}${with_valgrind:-no}" >&6 case .$with_cflags in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -g do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi ;; esac ;; esac echo "$as_me:17293: checking if you want to perform memory-leak testing" >&5 echo $ECHO_N "checking if you want to perform memory-leak testing... $ECHO_C" >&6 # Check whether --enable-leaks or --disable-leaks was given. if test "${enable_leaks+set}" = set; then enableval="$enable_leaks" if test "x$enableval" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi else : ${with_no_leaks:=no} fi; echo "$as_me:17303: result: $with_no_leaks" >&5 echo "${ECHO_T}$with_no_leaks" >&6 if test "$with_no_leaks" = yes ; then cat >>confdefs.h <<\EOF #define NO_LEAKS 1 EOF cat >>confdefs.h <<\EOF #define YY_NO_LEAKS 1 EOF fi LD_RPATH_OPT= echo "$as_me:17319: checking for an rpath option" >&5 echo $ECHO_N "checking for an rpath option... $ECHO_C" >&6 case $cf_cv_system_name in (irix*) if test "$GCC" = yes; then LD_RPATH_OPT="-Wl,-rpath," else LD_RPATH_OPT="-rpath " fi ;; (linux*|gnu*|k*bsd*-gnu) LD_RPATH_OPT="-Wl,-rpath," ;; (openbsd[2-9].*|mirbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (dragonfly*|freebsd*) LD_RPATH_OPT="-rpath " ;; (netbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (osf*|mls+*) LD_RPATH_OPT="-rpath " ;; (solaris2*) LD_RPATH_OPT="-R" ;; (*) ;; esac echo "$as_me:17350: result: $LD_RPATH_OPT" >&5 echo "${ECHO_T}$LD_RPATH_OPT" >&6 case "x$LD_RPATH_OPT" in (x-R*) echo "$as_me:17355: checking if we need a space after rpath option" >&5 echo $ECHO_N "checking if we need a space after rpath option... $ECHO_C" >&6 cf_save_LIBS="$LIBS" cf_add_libs="${LD_RPATH_OPT}$libdir" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 17376 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:17388: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17391: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:17394: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17397: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_rpath_space=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_rpath_space=yes fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save_LIBS" echo "$as_me:17407: result: $cf_rpath_space" >&5 echo "${ECHO_T}$cf_rpath_space" >&6 test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " ;; esac echo "$as_me:17413: checking if rpath-hack should be disabled" >&5 echo $ECHO_N "checking if rpath-hack should be disabled... $ECHO_C" >&6 # Check whether --enable-rpath-hack or --disable-rpath-hack was given. if test "${enable_rpath_hack+set}" = set; then enableval="$enable_rpath_hack" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then cf_disable_rpath_hack=yes else cf_disable_rpath_hack=no fi else enableval=yes cf_disable_rpath_hack=no fi; echo "$as_me:17430: result: $cf_disable_rpath_hack" >&5 echo "${ECHO_T}$cf_disable_rpath_hack" >&6 if test "$cf_disable_rpath_hack" = no ; then echo "$as_me:17434: checking for updated LDFLAGS" >&5 echo $ECHO_N "checking for updated LDFLAGS... $ECHO_C" >&6 if test -n "$LD_RPATH_OPT" ; then echo "$as_me:17437: result: maybe" >&5 echo "${ECHO_T}maybe" >&6 for ac_prog in ldd do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:17444: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_cf_ldd_prog+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$cf_ldd_prog"; then ac_cv_prog_cf_ldd_prog="$cf_ldd_prog" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_cf_ldd_prog="$ac_prog" echo "$as_me:17459: found $ac_dir/$ac_word" >&5 break done fi fi cf_ldd_prog=$ac_cv_prog_cf_ldd_prog if test -n "$cf_ldd_prog"; then echo "$as_me:17467: result: $cf_ldd_prog" >&5 echo "${ECHO_T}$cf_ldd_prog" >&6 else echo "$as_me:17470: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$cf_ldd_prog" && break done test -n "$cf_ldd_prog" || cf_ldd_prog="no" cf_rpath_list="/usr/lib /lib" if test "$cf_ldd_prog" != no then cf_rpath_oops= cat >conftest.$ac_ext <<_ACEOF #line 17484 "configure" #include "confdefs.h" #include int main () { printf("Hello"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:17496: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17499: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:17502: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17505: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq` cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[ ]/%/%' -e 's%/[^/][^/]*$%%' |sort | uniq` else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext # If we passed the link-test, but get a "not found" on a given library, # this could be due to inept reconfiguration of gcc to make it only # partly honor /usr/local/lib (or whatever). Sometimes this behavior # is intentional, e.g., installing gcc in /usr/bin and suppressing the # /usr/local libraries. if test -n "$cf_rpath_oops" then for cf_rpath_src in $cf_rpath_oops do for cf_rpath_dir in \ /usr/local \ /usr/pkg \ /opt/sfw do if test -f $cf_rpath_dir/lib/$cf_rpath_src then test -n "$verbose" && echo " ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src" 1>&6 echo "${as_me:-configure}:17533: testing ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src ..." 1>&5 LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib" break fi done done fi fi test -n "$verbose" && echo " ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6 echo "${as_me:-configure}:17545: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 test -n "$verbose" && echo " ...checking LDFLAGS $LDFLAGS" 1>&6 echo "${as_me:-configure}:17549: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5 cf_rpath_dst= for cf_rpath_src in $LDFLAGS do case $cf_rpath_src in (-L*) # check if this refers to a directory which we will ignore cf_rpath_skip=no if test -n "$cf_rpath_list" then for cf_rpath_item in $cf_rpath_list do if test "x$cf_rpath_src" = "x-L$cf_rpath_item" then cf_rpath_skip=yes break fi done fi if test "$cf_rpath_skip" = no then # transform the option if test "$LD_RPATH_OPT" = "-R " ; then cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` else cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` fi # if we have not already added this, add it now cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" then test -n "$verbose" && echo " ...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6 echo "${as_me:-configure}:17586: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" fi fi ;; esac cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" done LDFLAGS=$cf_rpath_dst test -n "$verbose" && echo " ...checked LDFLAGS $LDFLAGS" 1>&6 echo "${as_me:-configure}:17599: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5 test -n "$verbose" && echo " ...checking LIBS $LIBS" 1>&6 echo "${as_me:-configure}:17603: testing ...checking LIBS $LIBS ..." 1>&5 cf_rpath_dst= for cf_rpath_src in $LIBS do case $cf_rpath_src in (-L*) # check if this refers to a directory which we will ignore cf_rpath_skip=no if test -n "$cf_rpath_list" then for cf_rpath_item in $cf_rpath_list do if test "x$cf_rpath_src" = "x-L$cf_rpath_item" then cf_rpath_skip=yes break fi done fi if test "$cf_rpath_skip" = no then # transform the option if test "$LD_RPATH_OPT" = "-R " ; then cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` else cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` fi # if we have not already added this, add it now cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" then test -n "$verbose" && echo " ...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6 echo "${as_me:-configure}:17640: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" fi fi ;; esac cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" done LIBS=$cf_rpath_dst test -n "$verbose" && echo " ...checked LIBS $LIBS" 1>&6 echo "${as_me:-configure}:17653: testing ...checked LIBS $LIBS ..." 1>&5 test -n "$verbose" && echo " ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6 echo "${as_me:-configure}:17657: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 else echo "$as_me:17660: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi TEST_ARGS="$LIBS" LIBS= ac_config_files="$ac_config_files Makefile" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overriden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if cmp -s $cache_file confcache; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:17750: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated automatically by configure. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false SHELL=\${CONFIG_SHELL-$SHELL} ac_cs_invocation="\$0 \$@" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } exec 6>&1 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\EOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` shift set dummy "$ac_option" "$ac_optarg" ${1+"$@"} shift ;; -*);; *) # This is not an option, so the user has probably given explicit # arguments. ac_need_defaults=false;; esac case $1 in # Handling of the options. EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:17926: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) shift CONFIG_FILES="$CONFIG_FILES $1" ac_need_defaults=false;; --header | --heade | --head | --hea ) shift CONFIG_HEADERS="$CONFIG_HEADERS $1" ac_need_defaults=false;; # This is an error. -*) { { echo "$as_me:17945: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done exec 5>>config.log cat >&5 << _ACEOF ## ----------------------- ## ## Running config.status. ## ## ----------------------- ## This file was extended by $as_me 2.52.20150926, executed with CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS > $ac_cs_invocation on `(hostname || uname -n) 2>/dev/null | sed 1q` _ACEOF EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; "ncurses_cfg.h" ) CONFIG_HEADERS="$CONFIG_HEADERS ncurses_cfg.h:ncurses_tst.hin" ;; *) { { echo "$as_me:17995: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. : ${TMPDIR=/tmp} { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=$TMPDIR/cs$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 { (exit 1); exit 1; } } EOF cat >>$CONFIG_STATUS <\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datarootdir@,$datarootdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@DEFS@,$DEFS,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;t t s,@CPP@,$CPP,;t t s,@AWK@,$AWK,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@LINT@,$LINT,;t t s,@LINT_OPTS@,$LINT_OPTS,;t t s,@CTAGS@,$CTAGS,;t t s,@ETAGS@,$ETAGS,;t t s,@MAKE_LOWER_TAGS@,$MAKE_LOWER_TAGS,;t t s,@MAKE_UPPER_TAGS@,$MAKE_UPPER_TAGS,;t t s,@MATH_LIB@,$MATH_LIB,;t t s,@top_builddir@,$top_builddir,;t t s,@CC_G_OPT@,$CC_G_OPT,;t t s,@CC_SHARED_OPTS@,$CC_SHARED_OPTS,;t t s,@DFT_DEP_SUFFIX@,$DFT_DEP_SUFFIX,;t t s,@DFT_OBJ_SUBDIR@,$DFT_OBJ_SUBDIR,;t t s,@DFT_UPR_MODEL@,$DFT_UPR_MODEL,;t t s,@LD@,$LD,;t t s,@LDFLAGS_SHARED@,$LDFLAGS_SHARED,;t t s,@LDFLAGS_STATIC@,$LDFLAGS_STATIC,;t t s,@LD_MODEL@,$LD_MODEL,;t t s,@LD_SHARED_OPTS@,$LD_SHARED_OPTS,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@LIBTOOL_OPTS@,$LIBTOOL_OPTS,;t t s,@LIB_CLEAN@,$LIB_CLEAN,;t t s,@LIB_COMPILE@,$LIB_COMPILE,;t t s,@LIB_LINK@,$LIB_LINK,;t t s,@LINK_TESTS@,$LINK_TESTS,;t t s,@LOCAL_LDFLAGS@,$LOCAL_LDFLAGS,;t t s,@PACKAGE@,$PACKAGE,;t t s,@PTHREAD@,$PTHREAD,;t t s,@TEST_ARGS@,$TEST_ARGS,;t t s,@TEST_DEPS@,$TEST_DEPS,;t t s,@TEST_LIBS@,$TEST_LIBS,;t t s,@TINFO_LDFLAGS@,$TINFO_LDFLAGS,;t t s,@TINFO_LIBS@,$TINFO_LIBS,;t t s,@cf_cv_abi_version@,$cf_cv_abi_version,;t t s,@cf_cv_rel_version@,$cf_cv_rel_version,;t t s,@includesubdir@,$includesubdir,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t s,@ECHO_LT@,$ECHO_LT,;t t s,@ECHO_LD@,$ECHO_LD,;t t s,@RULE_CC@,$RULE_CC,;t t s,@SHOW_CC@,$SHOW_CC,;t t s,@ECHO_CC@,$ECHO_CC,;t t s,@NCURSES_WRAP_PREFIX@,$NCURSES_WRAP_PREFIX,;t t s,@NCURSES_CONFIG@,$NCURSES_CONFIG,;t t s,@ac_ct_NCURSES_CONFIG@,$ac_ct_NCURSES_CONFIG,;t t s,@X_CFLAGS@,$X_CFLAGS,;t t s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t s,@X_LIBS@,$X_LIBS,;t t s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t s,@XCURSES_CONFIG@,$XCURSES_CONFIG,;t t s,@ac_ct_XCURSES_CONFIG@,$ac_ct_XCURSES_CONFIG,;t t s,@EXTRA_CFLAGS@,$EXTRA_CFLAGS,;t t s,@cf_ldd_prog@,$cf_ldd_prog,;t t s,@EXTRA_LDFLAGS@,$EXTRA_LDFLAGS,;t t CEOF EOF cat >>$CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed # It is possible to make a multiline substitution using escaped newlines. # Ensure that we do not split the substitution between script fragments. ac_BEG=$ac_end ac_END=`expr $ac_end + $ac_max_sed_lines` sed "1,${ac_BEG}d; ${ac_END}p; q" $tmp/subs.sed >$tmp/subs.next if test -s $tmp/subs.next; then grep '^s,@[^@,][^@,]*@,.*\\$' $tmp/subs.next >$tmp/subs.edit if test ! -s $tmp/subs.edit; then grep "^s,@[^@,][^@,]*@,.*,;t t$" $tmp/subs.next >$tmp/subs.edit if test ! -s $tmp/subs.edit; then if test $ac_beg -gt 1; then ac_end=`expr $ac_end - 1` continue fi fi fi fi if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" EOF cat >>$CONFIG_STATUS <<\EOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` else ac_dir_suffix= ac_dots= fi case $srcdir in .) ac_srcdir=. if test -z "$ac_dots"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_dots$srcdir$ac_dir_suffix ac_top_srcdir=$ac_dots$srcdir ;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_dots$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:18286: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated automatically by config.status. */ configure_input="Generated automatically from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:18304: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:18317: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } EOF cat >>$CONFIG_STATUS <<\EOF ac_warn_datarootdir=no if test x"$ac_file" != x-; then for ac_item in $ac_file_inputs do ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' $ac_item` if test -n "$ac_seen"; then ac_used=`grep '@datarootdir@' $ac_item` if test -z "$ac_used"; then { echo "$as_me:18333: WARNING: datarootdir was used implicitly but not set: $ac_seen" >&5 echo "$as_me: WARNING: datarootdir was used implicitly but not set: $ac_seen" >&2;} ac_warn_datarootdir=yes fi fi ac_seen=`grep '${datarootdir}' $ac_item` if test -n "$ac_seen"; then { echo "$as_me:18342: WARNING: datarootdir was used explicitly but not set: $ac_seen" >&5 echo "$as_me: WARNING: datarootdir was used explicitly but not set: $ac_seen" >&2;} ac_warn_datarootdir=yes fi done fi if test "x$ac_warn_datarootdir" = xyes; then ac_sed_cmds="$ac_sed_cmds | sed -e 's,@datarootdir@,\${prefix}/share,g' -e 's,\${datarootdir},\${prefix}/share,g'" fi EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then cp $tmp/out $ac_file for ac_name in prefix exec_prefix datarootdir do ac_seen=`fgrep -n '${'$ac_name'[:=].*}' $ac_file` if test -n "$ac_seen"; then ac_init=`egrep '[ ]*'$ac_name'[ ]*=' $ac_file` if test -z "$ac_init"; then ac_seen=`echo "$ac_seen" |sed -e 's,^,'$ac_file':,'` { echo "$as_me:18379: WARNING: Variable $ac_name is used but was not set: $ac_seen" >&5 echo "$as_me: WARNING: Variable $ac_name is used but was not set: $ac_seen" >&2;} fi fi done egrep -n '@[a-z_][a-z_0-9]+@' $ac_file >$tmp/out egrep -n '@[A-Z_][A-Z_0-9]+@' $ac_file >>$tmp/out if test -s $tmp/out; then ac_seen=`sed -e 's,^,'$ac_file':,' < $tmp/out` { echo "$as_me:18390: WARNING: Some variables may not be substituted: $ac_seen" >&5 echo "$as_me: WARNING: Some variables may not be substituted: $ac_seen" >&2;} fi else cat $tmp/out fi rm -f $tmp/out done EOF cat >>$CONFIG_STATUS <<\EOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_i turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_iA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_iB='\([ ]\),\1#\2define\3' ac_iC=' ' ac_iD='\4,;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:18439: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:18450: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:18463: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in EOF # Transform confdefs.h into a list of #define's. We won't use it as a sed # script, but as data to insert where we see @DEFS@. We expect AC_SAVE_DEFS to # be either 'cat' or 'sort'. cat confdefs.h | uniq >conftest.vals # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail echo ' rm -f conftest.frag' >> $CONFIG_STATUS while grep . conftest.vals >/dev/null do # Write chunks of a limited-size here document to conftest.frag. echo ' cat >> conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> $CONFIG_STATUS echo 'CEOF' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals # Run sed to substitute the contents of conftest.frag into $tmp/in at the # marker @DEFS@. echo ' cat >> conftest.edit < $tmp/out rm -f $tmp/in mv $tmp/out $tmp/in rm -f conftest.edit conftest.frag ' >> $CONFIG_STATUS cat >>$CONFIG_STATUS <<\EOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated automatically by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated automatically by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if cmp -s $ac_file $tmp/config.h 2>/dev/null; then { echo "$as_me:18521: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } fi rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done EOF cat >>$CONFIG_STATUS <<\EOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` case $ac_dest in default ) for cf_dir in . do if test ! -d $srcdir/$cf_dir; then continue elif test -f $srcdir/$cf_dir/programs; then $AWK -f $srcdir/mk-test.awk INSTALL=yes ECHO_LINK="$ECHO_LD" $srcdir/$cf_dir/programs >>$cf_dir/Makefile fi done cat >>Makefile <>Makefile <>Makefile <>$CONFIG_STATUS <<\EOF { (exit 0); exit 0; } EOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: exec 5>/dev/null $SHELL $CONFIG_STATUS || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi ncurses-6.0-20160213/test/bs.60000644000175100001440000000764310422530544014137 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998,2006 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: bs.6,v 1.2 2006/04/22 22:42:44 tom Exp $ .TH BATTLESHIPS 6 "Aug 23, 1989" .SH NAME bs \- battleships game .SH SYNOPSIS battle [ -b | -s ] [ -c ] .SH DESCRIPTION This program allows you to play the familiar Battleships game against the computer on a 10x10 board. The interface is visual and largely self-explanatory; you place your ships and pick your shots by moving the cursor around the `sea' with the rogue/hack motion keys hjklyubn. .PP Note that when selecting a ship to place, you must type the capital letter (these are, after all, capital ships). During ship placement, the `r' command may be used to ignore the current position and randomly place your currently selected ship. The `R' command will place all remaining ships randomly. The ^L command (form feed, ASCII 12) will force a screen redraw). .PP The command-line arguments control game modes. .nf -b selects a `blitz' variant -s selects a `salvo' variant -c permits ships to be placed adjacently .fi The `blitz' variant allows a side to shoot for as long as it continues to score hits. .PP The `salvo' game allows a player one shot per turn for each of his/her ships still afloat. This puts a premium scoring hits early and knocking out some ships and also makes much harder the situation where you face a superior force with only your PT-boat. .PP Normally, ships must be separated by at least one square of open water. The -c option disables this check and allows them to close-pack. .PP The algorithm the computer uses once it has found a ship to sink is provably optimal. The dispersion criterion for the random-fire algorithm may not be. .SH AUTHORS Originally written by one Bruce Holloway in 1986. Salvo mode added by Chuck A. DeGaul (cbosgd!cad). Visual user interface, `closepack' option, code rewrite and manual page by Eric S. Raymond August 1989. ncurses-6.0-20160213/test/demo_altkeys.c0000644000175100001440000001142511467632156016275 0ustar tomusers/**************************************************************************** * Copyright (c) 2005-2006,2008 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: demo_altkeys.c,v 1.9 2010/11/14 00:59:26 tom Exp $ * * Demonstrate the define_key() function. * Thomas Dickey - 2005/10/22 */ #include #if defined(NCURSES_VERSION) && NCURSES_EXT_FUNCS #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif #define MY_LOGFILE "demo_altkeys.log" #define MY_KEYS (KEY_MAX + 1) /* * Log the most recently-written line to our logfile */ static void log_last_line(WINDOW *win) { FILE *fp; int y, x, n; char temp[256]; if ((fp = fopen(MY_LOGFILE, "a")) != 0) { int need = sizeof(temp) - 1; if (need > COLS) need = COLS; getyx(win, y, x); wmove(win, y - 1, 0); n = winnstr(win, temp, need); while (n-- > 0) { if (isspace(UChar(temp[n]))) temp[n] = '\0'; else break; } wmove(win, y, x); fprintf(fp, "%s\n", temp); fclose(fp); } } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int n; int ch; #if HAVE_GETTIMEOFDAY int secs, msecs; struct timeval current, previous; #endif unlink(MY_LOGFILE); newterm(0, stdout, stdin); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ scrollok(stdscr, TRUE); keypad(stdscr, TRUE); move(0, 0); /* we do the define_key() calls after keypad(), since the first call to * keypad() initializes the corresponding data. */ for (n = 0; n < 255; ++n) { char temp[10]; sprintf(temp, "\033%c", n); define_key(temp, n + MY_KEYS); } for (n = KEY_MIN; n < KEY_MAX; ++n) { char *value; if ((value = keybound(n, 0)) != 0) { char *temp = typeMalloc(char, strlen(value) + 2); sprintf(temp, "\033%s", value); define_key(temp, n + MY_KEYS); free(temp); free(value); } } #if HAVE_GETTIMEOFDAY gettimeofday(&previous, 0); #endif while ((ch = getch()) != ERR) { bool escaped = (ch >= MY_KEYS); const char *name = keyname(escaped ? (ch - MY_KEYS) : ch); #if HAVE_GETTIMEOFDAY gettimeofday(¤t, 0); secs = (int) (current.tv_sec - previous.tv_sec); msecs = (int) ((current.tv_usec - previous.tv_usec) / 1000); if (msecs < 0) { msecs += 1000; --secs; } if (msecs >= 1000) { secs += msecs / 1000; msecs %= 1000; } printw("%6d.%03d ", secs, msecs); previous = current; #endif printw("Keycode %d, name %s%s\n", ch, escaped ? "ESC-" : "", name != 0 ? name : ""); log_last_line(stdscr); clrtoeol(); if (ch == 'q') break; } endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/linux-color.dat0000644000175100001440000000507610422521260016402 0ustar tomusers############################################################################## # Copyright (c) 2004,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: linux-color.dat,v 1.2 2006/04/22 21:40:00 tom Exp $ # These values are derived from linux/drivers/char/vt.c (default_red[], # default_grn[] and default_blu[]), commented /* the default colour table, for VGA+ colour systems */ scale:255 0: 0 0 0 1: 170 0 0 2: 0 170 0 3: 170 85 0 4: 0 0 170 5: 170 0 170 6: 0 170 170 7: 170 170 170 8: 85 85 85 9: 255 85 85 10: 85 255 85 11: 255 255 85 12: 85 85 255 13: 255 85 255 14: 85 255 255 15: 255 255 255 ncurses-6.0-20160213/test/clip_printw.c0000644000175100001440000002213212367270231016134 0ustar tomusers/**************************************************************************** * Copyright (c) 2008-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: clip_printw.c,v 1.10 2014/08/02 23:13:29 tom Exp $ * * demonstrate how to use printw without wrapping. */ #include #ifdef HAVE_VW_PRINTW #define SHOW(n) ((n) == ERR ? "ERR" : "OK") #define COLOR_DEFAULT (-1) typedef struct { unsigned c; unsigned v; int status; int pair; attr_t attr; int count; int ch; const char *c_msg; const char *v_msg; int y_val; int x_val; int y_beg, x_beg; int y_max, x_max; } STATUS; static int clip_wprintw(WINDOW *win, NCURSES_CONST char *fmt,...) { int y0, x0, y1, x1, width; WINDOW *sub; va_list ap; int rc; /* * Allocate a single-line derived window extending from the current * cursor position to the end of the current line in the given window. * Disable scrolling in the derived window. */ getyx(win, y0, x0); width = getmaxx(win) - x0; sub = derwin(win, 1, width, y0, x0); scrollok(sub, FALSE); /* * Print the text. */ va_start(ap, fmt); rc = vw_printw(sub, fmt, ap); va_end(ap); getyx(sub, y1, x1); delwin(sub); wmove(win, y1 + y0, x1 + x0); return rc; } static const char * color_params(unsigned state, int *pair) { /* *INDENT-OFF* */ static struct { int pair; int fg, bg; const char *msg; } table[] = { { 0, COLOR_DEFAULT, COLOR_DEFAULT, "default" }, { 1, COLOR_RED, COLOR_BLACK, "red/black" }, { 2, COLOR_WHITE, COLOR_BLUE, "white/blue" }, }; /* *INDENT-ON* */ static bool first = TRUE; const char *result = 0; if (has_colors()) { if (first) { unsigned n; start_color(); for (n = 0; n < SIZEOF(table); ++n) { init_pair((short) table[n].pair, (short) table[n].fg, (short) table[n].bg); } } if (state < SIZEOF(table)) { *pair = table[state].pair; result = table[state].msg; } } return result; } static const char * video_params(unsigned state, attr_t *attr) { /* *INDENT-OFF* */ static struct { attr_t attr; const char *msg; } table[] = { { A_NORMAL, "normal" }, { A_BOLD, "bold" }, { A_REVERSE, "reverse" }, { A_UNDERLINE, "underline" }, { A_BLINK, "blink" }, }; /* *INDENT-ON* */ const char *result = 0; if (state < SIZEOF(table)) { *attr = table[state].attr; result = table[state].msg; } return result; } /* fill the window with a test-pattern */ static void fill_window(WINDOW *win) { int y, x; int y0 = -1, x0 = -1; getyx(win, y, x); wmove(win, 0, 0); while (waddstr(win, "0123456789 abcdefghijklmnopqrstuvwxyz ") != ERR) { int y1, x1; getyx(win, y1, x1); if (y1 == y0 && x1 == x0) break; x0 = x1; y0 = y1; } wmove(win, y, x); } static void show_status(WINDOW *win, STATUS * sp) { int y, x; getyx(win, y, x); wmove(win, 0, 0); wprintw(win, "Count %d", sp->count); if (sp->v_msg != 0) wprintw(win, " Video %s", sp->v_msg); if (sp->c_msg != 0) wprintw(win, " Color %s", sp->c_msg); wprintw(win, " (%d)", sp->status); wclrtoeol(win); wmove(win, y, x); } static void do_subwindow(WINDOW *win, STATUS * sp, void func(WINDOW *)) { WINDOW *win1 = newwin(sp->y_max - 2, sp->x_max - 2, sp->y_beg + 1, sp->x_beg + 1); if (win1 != 0 && sp->y_max > 4 && sp->x_max > 4) { WINDOW *win2 = derwin(win1, sp->y_max - 4, sp->x_max - 4, 1, 1); if (win2 != 0) { box(win1, 0, 0); wrefresh(win1); func(win2); delwin(win2); } else { beep(); } delwin(win1); touchwin(win); } else { if (win1) delwin(win1); beep(); } } static void init_status(WINDOW *win, STATUS * sp) { memset(sp, 0, sizeof(*sp)); sp->c = 99; sp->v = 99; sp->ch = ' '; keypad(win, TRUE); fill_window(win); getbegyx(win, sp->y_beg, sp->x_beg); getmaxyx(win, sp->y_max, sp->x_max); } static void show_help(WINDOW *win) { static const char *table[] = { "Basic commands:" ,"Use h/j/k/l or arrow keys to move the cursor." ,"Set the count parameter for clip_wprintw by entering digits 0-9." ,"" ,"Other commands:" ,"space toggles through the set of video attributes and colors." ,"t touches (forces repaint) of the current line." ,". calls clip_wprintw at the current position with the given count." ,"= resets count to zero." ,"? shows this help-window" ,"" }; int y_max, x_max; int row; getmaxyx(win, y_max, x_max); for (row = 0; row < (int) SIZEOF(table) && row < y_max; ++row) { MvWPrintw(win, row, 0, "%.*s", x_max, table[row]); } while (wgetch(win) != 'q') beep(); } static void update_status(WINDOW *win, STATUS * sp) { switch (sp->ch) { case ' ': /* next test-iteration */ if (has_colors()) { if ((sp->c_msg = color_params(++(sp->c), &(sp->pair))) == 0) { sp->c_msg = color_params(sp->c = 0, &(sp->pair)); if ((sp->v_msg = video_params(++(sp->v), &(sp->attr))) == 0) { sp->v_msg = video_params(sp->v = 0, &(sp->attr)); } } } else { if ((sp->v_msg = video_params(++(sp->v), &(sp->attr))) == 0) { sp->v_msg = video_params(sp->v = 0, &(sp->attr)); } } sp->count = 0; show_status(win, sp); break; case KEY_LEFT: case 'h': if (sp->x_val > 0) wmove(win, sp->y_val, --(sp->x_val)); break; case KEY_DOWN: case 'j': if (sp->y_val < sp->y_max) wmove(win, ++(sp->y_val), sp->x_val); break; case KEY_UP: case 'k': if (sp->y_val > 0) wmove(win, --(sp->y_val), sp->x_val); break; case KEY_RIGHT: case 'l': if (sp->x_val < sp->x_max) wmove(win, sp->y_val, ++(sp->x_val)); break; case 't': touchline(win, sp->y_val, 1); break; case '=': sp->count = 0; show_status(win, sp); break; case '?': do_subwindow(win, sp, show_help); break; default: if (isdigit(sp->ch)) { sp->count = (sp->count * 10) + (sp->ch - '0'); show_status(win, sp); } else { beep(); } break; } } static void test_clipping(WINDOW *win) { STATUS st; char fmt[80]; char *buffer; unsigned j, need; init_status(win, &st); do { switch (st.ch) { case '.': /* change from current position */ (void) wattrset(win, AttrArg(COLOR_PAIR(st.pair), st.attr)); if (st.count > 0) { need = (unsigned) st.count + 1; sprintf(fmt, "%%c%%%ds%%c", st.count); } else { need = (unsigned) getmaxx(win) - 1; strcpy(fmt, "%c%s%c"); } if ((buffer = typeMalloc(char, need + 1)) != 0) { for (j = 0; j < need; ++j) { buffer[j] = (char) ('A' + (j % 26)); } buffer[need - 1] = '\0'; st.status = clip_wprintw(win, fmt, '[', buffer, ']'); free(buffer); } break; case 'w': do_subwindow(win, &st, test_clipping); break; case 'q': return; default: update_status(win, &st); break; } } while ((st.ch = wgetch(win)) != ERR); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { initscr(); cbreak(); noecho(); test_clipping(stdscr); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the curses vw_printw function\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/test_instr.c0000644000175100001440000001476111367076552016022 0ustar tomusers/**************************************************************************** * Copyright (c) 2007,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_instr.c,v 1.5 2010/05/01 19:13:46 tom Exp $ * * Author: Thomas E Dickey * * Demonstrate the instr functions from the curses library. int instr(char *str); int innstr(char *str, int n); int winstr(WINDOW *win, char *str); int winnstr(WINDOW *win, char *str, int n); int mvinstr(int y, int x, char *str); int mvinnstr(int y, int x, char *str, int n); int mvwinstr(WINDOW *win, int y, int x, char *str); int mvwinnstr(WINDOW *win, int y, int x, char *str, int n); */ #include #define BASE_Y 6 #define MAX_COLS 1024 static bool Quit(int ch) { return (ch == ERR || ch == 'q' || ch == QUIT || ch == ESCAPE); } static void show_1st(WINDOW *win, int line, char *buffer) { MvWAddStr(win, line, 5, buffer); } static void showmore(WINDOW *win, int line, char *buffer) { wmove(win, line, 0); wclrtoeol(win); show_1st(win, line, buffer); } static int test_inchs(int level, char **argv, WINDOW *chrwin, WINDOW *strwin) { WINDOW *txtbox = 0; WINDOW *txtwin = 0; FILE *fp; int ch; int txt_x = 0, txt_y = 0; int base_y; int limit = getmaxx(strwin) - 5; char buffer[MAX_COLS]; if (argv[level] == 0) { beep(); return FALSE; } if (level > 1) { txtbox = newwin(LINES - BASE_Y, COLS - level, BASE_Y, level); box(txtbox, 0, 0); wnoutrefresh(txtbox); txtwin = derwin(txtbox, getmaxy(txtbox) - 2, getmaxx(txtbox) - 2, 1, 1); base_y = 0; } else { txtwin = stdscr; base_y = BASE_Y; } keypad(txtwin, TRUE); /* enable keyboard mapping */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ txt_y = base_y; txt_x = 0; wmove(txtwin, txt_y, txt_x); if ((fp = fopen(argv[level], "r")) != 0) { while ((ch = fgetc(fp)) != EOF) { if (waddch(txtwin, UChar(ch)) != OK) { break; } } fclose(fp); } else { wprintw(txtwin, "Cannot open:\n%s", argv[1]); } while (!Quit(ch = mvwgetch(txtwin, txt_y, txt_x))) { switch (ch) { case KEY_DOWN: case 'j': if (txt_y < getmaxy(txtwin) - 1) txt_y++; else beep(); break; case KEY_UP: case 'k': if (txt_y > base_y) txt_y--; else beep(); break; case KEY_LEFT: case 'h': if (txt_x > 0) txt_x--; else beep(); break; case KEY_RIGHT: case 'l': if (txt_x < getmaxx(txtwin) - 1) txt_x++; else beep(); break; case 'w': test_inchs(level + 1, argv, chrwin, strwin); if (txtbox != 0) { touchwin(txtbox); wnoutrefresh(txtbox); } else { touchwin(txtwin); wnoutrefresh(txtwin); } break; case '-': if (limit > 0) { --limit; } else { beep(); } break; case '+': ++limit; break; default: beep(); break; } MvWPrintw(chrwin, 0, 0, "line:"); wclrtoeol(chrwin); if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); if (winstr(txtwin, buffer) != ERR) { show_1st(chrwin, 0, buffer); } if (mvwinstr(txtwin, txt_y, txt_x, buffer) != ERR) { showmore(chrwin, 1, buffer); } } else { move(txt_y, txt_x); if (instr(buffer) != ERR) { show_1st(chrwin, 0, buffer); } if (mvinstr(txt_y, txt_x, buffer) != ERR) { showmore(chrwin, 1, buffer); } } wnoutrefresh(chrwin); MvWPrintw(strwin, 0, 0, "%4d:", limit); wclrtobot(strwin); if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); if (winnstr(txtwin, buffer, limit) != ERR) { show_1st(strwin, 0, buffer); } if (mvwinnstr(txtwin, txt_y, txt_x, buffer, limit) != ERR) { showmore(strwin, 1, buffer); } } else { move(txt_y, txt_x); if (innstr(buffer, limit) != ERR) { show_1st(strwin, 0, buffer); } if (mvinnstr(txt_y, txt_x, buffer, limit) != ERR) { showmore(strwin, 1, buffer); } } wnoutrefresh(strwin); } if (level > 1) { delwin(txtwin); delwin(txtbox); } return TRUE; } int main(int argc, char *argv[]) { WINDOW *chrbox; WINDOW *chrwin; WINDOW *strwin; setlocale(LC_ALL, ""); if (argc < 2) { fprintf(stderr, "usage: %s file\n", argv[0]); return EXIT_FAILURE; } initscr(); chrbox = derwin(stdscr, BASE_Y, COLS, 0, 0); box(chrbox, 0, 0); wnoutrefresh(chrbox); chrwin = derwin(chrbox, 2, COLS - 2, 1, 1); strwin = derwin(chrbox, 2, COLS - 2, 3, 1); test_inchs(1, argv, chrwin, strwin); endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/bs.c0000644000175100001440000007360412371520100014204 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * bs.c - original author: Bruce Holloway * salvo option by: Chuck A DeGaul * with improved user interface, autoconfiguration and code cleanup * by Eric S. Raymond * v1.2 with color support and minor portability fixes, November 1990 * v2.0 featuring strict ANSI/POSIX conformance, November 1993. * v2.1 with ncurses mouse support, September 1995 * * $Id: bs.c,v 1.63 2014/08/09 22:27:12 tom Exp $ */ #include #include #ifndef SIGIOT #define SIGIOT SIGABRT #endif static int getcoord(int); /* * Constants for tuning the random-fire algorithm. It prefers moves that * diagonal-stripe the board with a stripe separation of srchstep. If * no such preferred moves are found, srchstep is decremented. */ #define BEGINSTEP 3 /* initial value of srchstep */ /* miscellaneous constants */ #define SHIPTYPES 5 #define OTHER (1-turn) #define PLAYER 0 #define COMPUTER 1 #define MARK_HIT 'H' #define MARK_MISS 'o' #define CTRLC '\003' /* used as terminate command */ #define FF '\014' /* used as redraw command */ /* coordinate handling */ #define BWIDTH 10 #define BDEPTH 10 /* display symbols */ #define SHOWHIT '*' #define SHOWSPLASH ' ' #define IS_SHIP(c) (isupper(UChar(c)) ? TRUE : FALSE) /* how to position us on player board */ #define PYBASE 3 #define PXBASE 3 #define PY(y) (PYBASE + (y)) #define PX(x) (PXBASE + (x)*3) #define pgoto(y, x) (void)move(PY(y), PX(x)) /* how to position us on cpu board */ #define CYBASE 3 #define CXBASE 48 #define CY(y) (CYBASE + (y)) #define CX(x) (CXBASE + (x)*3) #define CYINV(y) ((y) - CYBASE) #define CXINV(x) (((x) - CXBASE) / 3) #define cgoto(y, x) (void)move(CY(y), CX(x)) #define ONBOARD(x, y) (x >= 0 && x < BWIDTH && y >= 0 && y < BDEPTH) /* other board locations */ #define COLWIDTH 80 #define PROMPTLINE 21 /* prompt line */ #define SYBASE CYBASE + BDEPTH + 3 /* move key diagram */ #define SXBASE 63 #define MYBASE SYBASE - 1 /* diagram caption */ #define MXBASE 64 #define HYBASE SYBASE - 1 /* help area */ #define HXBASE 0 /* this will need to be changed if BWIDTH changes */ static char numbers[] = " 0 1 2 3 4 5 6 7 8 9"; static char carrier[] = "Aircraft Carrier"; static char battle[] = "Battleship"; static char sub[] = "Submarine"; static char destroy[] = "Destroyer"; static char ptboat[] = "PT Boat"; static char *your_name; static char dftname[] = "stranger"; /* direction constants */ #define E 0 #define SE 1 #define S 2 #define SW 3 #define W 4 #define NW 5 #define N 6 #define NE 7 static int xincr[8] = {1, 1, 0, -1, -1, -1, 0, 1}; static int yincr[8] = {0, 1, 1, 1, 0, -1, -1, -1}; /* current ship position and direction */ static int curx = (BWIDTH / 2); static int cury = (BDEPTH / 2); typedef struct { char *name; /* name of the ship type */ int hits; /* how many times has this ship been hit? */ char symbol; /* symbol for game purposes */ int length; /* length of ship */ int x, y; /* coordinates of ship start point */ int dir; /* direction of `bow' */ bool placed; /* has it been placed on the board? */ } ship_t; static bool checkplace(int b, ship_t * ss, int vis); #define SHIPIT(name, symbol, length) { name, 0, symbol, length, 0,0, 0, FALSE } static ship_t plyship[SHIPTYPES] = { SHIPIT(carrier, 'A', 5), SHIPIT(battle, 'B', 4), SHIPIT(destroy, 'D', 3), SHIPIT(sub, 'S', 3), SHIPIT(ptboat, 'P', 2), }; static ship_t cpuship[SHIPTYPES] = { SHIPIT(carrier, 'A', 5), SHIPIT(battle, 'B', 4), SHIPIT(destroy, 'D', 3), SHIPIT(sub, 'S', 3), SHIPIT(ptboat, 'P', 2), }; /* "Hits" board, and main board. */ static char hits[2][BWIDTH][BDEPTH]; static char board[2][BWIDTH][BDEPTH]; static int turn; /* 0=player, 1=computer */ static int plywon = 0, cpuwon = 0; /* How many games has each won? */ static int salvo, blitz, closepack; #define PR (void)addstr static void uninitgame(int sig) GCC_NORETURN; static void uninitgame(int sig GCC_UNUSED) /* end the game, either normally or due to signal */ { clear(); (void) refresh(); (void) reset_shell_mode(); (void) echo(); (void) endwin(); ExitProgram(sig ? EXIT_FAILURE : EXIT_SUCCESS); } static void announceopts(void) /* announce which game options are enabled */ { if (salvo || blitz || closepack) { (void) printw("Playing optional game ("); if (salvo) (void) printw("salvo, "); else (void) printw("nosalvo, "); if (blitz) (void) printw("blitz "); else (void) printw("noblitz, "); if (closepack) (void) printw("closepack)"); else (void) printw("noclosepack)"); } else (void) printw( "Playing standard game (noblitz, nosalvo, noclosepack)"); } static void intro(void) { char *tmpname; srand((unsigned) (time(0L) + getpid())); /* Kick the random number generator */ CATCHALL(uninitgame); if ((tmpname = getlogin()) != 0 && (your_name = strdup(tmpname)) != 0) { your_name[0] = (char) toupper(UChar(your_name[0])); } else { your_name = dftname; } (void) initscr(); keypad(stdscr, TRUE); (void) def_prog_mode(); (void) nonl(); (void) cbreak(); (void) noecho(); #ifdef PENGUIN (void) clear(); MvAddStr(4, 29, "Welcome to Battleship!"); (void) move(8, 0); PR(" \\\n"); PR(" \\ \\ \\\n"); PR(" \\ \\ \\ \\ \\_____________\n"); PR(" \\ \\ \\_____________ \\ \\/ |\n"); PR(" \\ \\/ \\ \\/ |\n"); PR(" \\/ \\_____/ |__\n"); PR(" ________________/ |\n"); PR(" \\ S.S. Penguin |\n"); PR(" \\ /\n"); PR(" \\___________________________________________________/\n"); MvAddStr(22, 27, "Hit any key to continue..."); (void) refresh(); (void) getch(); #endif /* PENGUIN */ #ifdef A_COLOR start_color(); init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK); init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK); init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK); init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK); init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK); init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK); init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK); init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK); #endif /* A_COLOR */ #ifdef NCURSES_MOUSE_VERSION (void) mousemask(BUTTON1_CLICKED, (mmask_t *) NULL); #endif /* NCURSES_MOUSE_VERSION */ } /* VARARGS1 */ static void prompt(int n, NCURSES_CONST char *f, const char *s) /* print a message at the prompt line */ { (void) move(PROMPTLINE + n, 0); (void) clrtoeol(); (void) printw(f, s); (void) refresh(); } static void error(NCURSES_CONST char *s) { (void) move(PROMPTLINE + 2, 0); (void) clrtoeol(); if (s) { (void) addstr(s); (void) beep(); } } static void placeship(int b, ship_t * ss, int vis) { int l; for (l = 0; l < ss->length; ++l) { int newx = ss->x + l * xincr[ss->dir]; int newy = ss->y + l * yincr[ss->dir]; board[b][newx][newy] = ss->symbol; if (vis) { pgoto(newy, newx); (void) addch((chtype) ss->symbol); } } ss->hits = 0; } static int rnd(int n) { return (((rand() & 0x7FFF) % n)); } static void randomplace(int b, ship_t * ss) /* generate a valid random ship placement into px,py */ { do { ss->dir = rnd(2) ? E : S; ss->x = rnd(BWIDTH - (ss->dir == E ? ss->length : 0)); ss->y = rnd(BDEPTH - (ss->dir == S ? ss->length : 0)); } while (!checkplace(b, ss, FALSE)); } static void initgame(void) { int i, j, unplaced; ship_t *ss; (void) clear(); MvAddStr(0, 35, "BATTLESHIPS"); (void) move(PROMPTLINE + 2, 0); announceopts(); memset(board, 0, sizeof(char) * BWIDTH * BDEPTH * 2); memset(hits, 0, sizeof(char) * BWIDTH * BDEPTH * 2); for (i = 0; i < SHIPTYPES; i++) { ss = cpuship + i; ss->x = ss->y = ss->dir = ss->hits = 0; ss->placed = FALSE; ss = plyship + i; ss->x = ss->y = ss->dir = ss->hits = 0; ss->placed = FALSE; } /* draw empty boards */ MvAddStr(PYBASE - 2, PXBASE + 5, "Main Board"); MvAddStr(PYBASE - 1, PXBASE - 3, numbers); for (i = 0; i < BDEPTH; ++i) { MvAddCh(PYBASE + i, PXBASE - 3, (chtype) (i + 'A')); #ifdef A_COLOR if (has_colors()) attron(COLOR_PAIR(COLOR_BLUE)); #endif /* A_COLOR */ (void) addch(' '); for (j = 0; j < BWIDTH; j++) (void) addstr(" . "); #ifdef A_COLOR (void) attrset(0); #endif /* A_COLOR */ (void) addch(' '); (void) addch((chtype) (i + 'A')); } MvAddStr(PYBASE + BDEPTH, PXBASE - 3, numbers); MvAddStr(CYBASE - 2, CXBASE + 7, "Hit/Miss Board"); MvAddStr(CYBASE - 1, CXBASE - 3, numbers); for (i = 0; i < BDEPTH; ++i) { MvAddCh(CYBASE + i, CXBASE - 3, (chtype) (i + 'A')); #ifdef A_COLOR if (has_colors()) attron(COLOR_PAIR(COLOR_BLUE)); #endif /* A_COLOR */ (void) addch(' '); for (j = 0; j < BWIDTH; j++) (void) addstr(" . "); #ifdef A_COLOR (void) attrset(0); #endif /* A_COLOR */ (void) addch(' '); (void) addch((chtype) (i + 'A')); } MvAddStr(CYBASE + BDEPTH, CXBASE - 3, numbers); MvPrintw(HYBASE, HXBASE, "To position your ships: move the cursor to a spot, then"); MvPrintw(HYBASE + 1, HXBASE, "type the first letter of a ship type to select it, then"); MvPrintw(HYBASE + 2, HXBASE, "type a direction ([hjkl] or [4862]), indicating how the"); MvPrintw(HYBASE + 3, HXBASE, "ship should be pointed. You may also type a ship letter"); MvPrintw(HYBASE + 4, HXBASE, "followed by `r' to position it randomly, or type `R' to"); MvPrintw(HYBASE + 5, HXBASE, "place all remaining ships randomly."); MvAddStr(MYBASE, MXBASE, "Aiming keys:"); MvAddStr(SYBASE, SXBASE, "y k u 7 8 9"); MvAddStr(SYBASE + 1, SXBASE, " \\|/ \\|/ "); MvAddStr(SYBASE + 2, SXBASE, "h-+-l 4-+-6"); MvAddStr(SYBASE + 3, SXBASE, " /|\\ /|\\ "); MvAddStr(SYBASE + 4, SXBASE, "b j n 1 2 3"); /* have the computer place ships */ for (ss = cpuship; ss < cpuship + SHIPTYPES; ss++) { randomplace(COMPUTER, ss); placeship(COMPUTER, ss, FALSE); } do { char c, docked[SHIPTYPES + 2], *cp = docked; ss = (ship_t *) NULL; /* figure which ships still wait to be placed */ *cp++ = 'R'; for (i = 0; i < SHIPTYPES; i++) if (!plyship[i].placed) *cp++ = plyship[i].symbol; *cp = '\0'; /* get a command letter */ prompt(1, "Type one of [%s] to pick a ship.", docked + 1); do { c = (char) getcoord(PLAYER); } while (!(strchr) (docked, c)); if (c == 'R') (void) ungetch('R'); else { /* map that into the corresponding symbol */ for (ss = plyship; ss < plyship + SHIPTYPES; ss++) if (ss->symbol == c) break; prompt(1, "Type one of [hjklrR] to place your %s.", ss->name); pgoto(cury, curx); } do { c = (char) getch(); } while (!(strchr("hjkl8462rR", c) || c == FF)); if (c == FF) { (void) clearok(stdscr, TRUE); (void) refresh(); } else if (ss == 0) { beep(); /* simple to verify, unlikely to happen */ } else if (c == 'r') { prompt(1, "Random-placing your %s", ss->name); randomplace(PLAYER, ss); placeship(PLAYER, ss, TRUE); error((char *) NULL); ss->placed = TRUE; } else if (c == 'R') { prompt(1, "Placing the rest of your fleet at random...", ""); for (ss = plyship; ss < plyship + SHIPTYPES; ss++) if (!ss->placed) { randomplace(PLAYER, ss); placeship(PLAYER, ss, TRUE); ss->placed = TRUE; } error((char *) NULL); } else if (strchr("hjkl8462", c)) { ss->x = curx; ss->y = cury; switch (c) { case 'k': case '8': ss->dir = N; break; case 'j': case '2': ss->dir = S; break; case 'h': case '4': ss->dir = W; break; case 'l': case '6': ss->dir = E; break; } if (checkplace(PLAYER, ss, TRUE)) { placeship(PLAYER, ss, TRUE); error((char *) NULL); ss->placed = TRUE; } } for (unplaced = i = 0; i < SHIPTYPES; i++) unplaced += !plyship[i].placed; } while (unplaced); turn = rnd(2); MvPrintw(HYBASE, HXBASE, "To fire, move the cursor to your chosen aiming point "); MvPrintw(HYBASE + 1, HXBASE, "and strike any key other than a motion key. "); MvPrintw(HYBASE + 2, HXBASE, " "); MvPrintw(HYBASE + 3, HXBASE, " "); MvPrintw(HYBASE + 4, HXBASE, " "); MvPrintw(HYBASE + 5, HXBASE, " "); (void) prompt(0, "Press any key to start...", ""); (void) getch(); } static int getcoord(int atcpu) { int ny, nx, c; if (atcpu) cgoto(cury, curx); else pgoto(cury, curx); (void) refresh(); for (;;) { if (atcpu) { MvPrintw(CYBASE + BDEPTH + 1, CXBASE + 11, "(%d, %c)", curx, 'A' + cury); cgoto(cury, curx); } else { MvPrintw(PYBASE + BDEPTH + 1, PXBASE + 11, "(%d, %c)", curx, 'A' + cury); pgoto(cury, curx); } switch (c = getch()) { case 'k': case '8': case KEY_UP: ny = cury + BDEPTH - 1; nx = curx; break; case 'j': case '2': case KEY_DOWN: ny = cury + 1; nx = curx; break; case 'h': case '4': case KEY_LEFT: ny = cury; nx = curx + BWIDTH - 1; break; case 'l': case '6': case KEY_RIGHT: ny = cury; nx = curx + 1; break; case 'y': case '7': case KEY_A1: ny = cury + BDEPTH - 1; nx = curx + BWIDTH - 1; break; case 'b': case '1': case KEY_C1: ny = cury + 1; nx = curx + BWIDTH - 1; break; case 'u': case '9': case KEY_A3: ny = cury + BDEPTH - 1; nx = curx + 1; break; case 'n': case '3': case KEY_C3: ny = cury + 1; nx = curx + 1; break; case FF: nx = curx; ny = cury; (void) clearok(stdscr, TRUE); (void) refresh(); break; #ifdef NCURSES_MOUSE_VERSION case KEY_MOUSE: { MEVENT myevent; getmouse(&myevent); if (atcpu && myevent.y >= CY(0) && myevent.y <= CY(BDEPTH) && myevent.x >= CX(0) && myevent.x <= CX(BDEPTH)) { curx = CXINV(myevent.x); cury = CYINV(myevent.y); return (' '); } else { beep(); continue; } } /* no fall through */ #endif /* NCURSES_MOUSE_VERSION */ default: if (atcpu) MvAddStr(CYBASE + BDEPTH + 1, CXBASE + 11, " "); else MvAddStr(PYBASE + BDEPTH + 1, PXBASE + 11, " "); return (c); } curx = nx % BWIDTH; cury = ny % BDEPTH; } } static bool collidecheck(int b, int y, int x) /* is this location on the selected zboard adjacent to a ship? */ { bool collide; /* anything on the square */ if ((collide = IS_SHIP(board[b][x][y])) != FALSE) return (collide); /* anything on the neighbors */ if (!closepack) { int i; for (i = 0; i < 8; i++) { int xend, yend; yend = y + yincr[i]; xend = x + xincr[i]; if (ONBOARD(xend, yend) && IS_SHIP(board[b][xend][yend])) { collide = TRUE; break; } } } return (collide); } static bool checkplace(int b, ship_t * ss, int vis) { int l, xend, yend; /* first, check for board edges */ xend = ss->x + (ss->length - 1) * xincr[ss->dir]; yend = ss->y + (ss->length - 1) * yincr[ss->dir]; if (!ONBOARD(xend, yend)) { if (vis) switch (rnd(3)) { case 0: error("Ship is hanging from the edge of the world"); break; case 1: error("Try fitting it on the board"); break; case 2: error("Figure I won't find it if you put it there?"); break; } return (FALSE); } for (l = 0; l < ss->length; ++l) { if (collidecheck(b, ss->y + l * yincr[ss->dir], ss->x + l * xincr[ss->dir])) { if (vis) switch (rnd(3)) { case 0: error("There's already a ship there"); break; case 1: error("Collision alert! Aaaaaagh!"); break; case 2: error("Er, Admiral, what about the other ship?"); break; } return (FALSE); } } return (TRUE); } static int awinna(void) { int i, j; ship_t *ss; for (i = 0; i < 2; ++i) { ss = (i) ? cpuship : plyship; for (j = 0; j < SHIPTYPES; ++j, ++ss) if (ss->length > ss->hits) break; if (j == SHIPTYPES) return (OTHER); } return (-1); } static ship_t * hitship(int x, int y) /* register a hit on the targeted ship */ { ship_t *sb, *ss; char sym; int oldx, oldy; getyx(stdscr, oldy, oldx); sb = (turn) ? plyship : cpuship; if ((sym = board[OTHER][x][y]) == 0) return ((ship_t *) NULL); for (ss = sb; ss < sb + SHIPTYPES; ++ss) if (ss->symbol == sym) { if (++ss->hits < ss->length) /* still afloat? */ return ((ship_t *) NULL); else { /* sunk! */ int i, j; if (!closepack) for (j = -1; j <= 1; j++) { int bx = ss->x + j * xincr[(ss->dir + 2) % 8]; int by = ss->y + j * yincr[(ss->dir + 2) % 8]; for (i = -1; i <= ss->length; ++i) { int x1, y1; x1 = bx + i * xincr[ss->dir]; y1 = by + i * yincr[ss->dir]; if (ONBOARD(x1, y1)) { hits[turn][x1][y1] = MARK_MISS; if (turn % 2 == PLAYER) { cgoto(y1, x1); #ifdef A_COLOR if (has_colors()) attron(COLOR_PAIR(COLOR_GREEN)); #endif /* A_COLOR */ (void) addch(MARK_MISS); #ifdef A_COLOR (void) attrset(0); #endif /* A_COLOR */ } else { pgoto(y1, x1); (void) addch(SHOWSPLASH); } } } } for (i = 0; i < ss->length; ++i) { int x1 = ss->x + i * xincr[ss->dir]; int y1 = ss->y + i * yincr[ss->dir]; hits[turn][x1][y1] = ss->symbol; if (turn % 2 == PLAYER) { cgoto(y1, x1); (void) addch((chtype) (ss->symbol)); } else { pgoto(y1, x1); #ifdef A_COLOR if (has_colors()) attron(COLOR_PAIR(COLOR_RED)); #endif /* A_COLOR */ (void) addch(SHOWHIT); #ifdef A_COLOR (void) attrset(0); #endif /* A_COLOR */ } } (void) move(oldy, oldx); return (ss); } } (void) move(oldy, oldx); return ((ship_t *) NULL); } static bool plyturn(void) { ship_t *ss; bool hit; NCURSES_CONST char *m = NULL; prompt(1, "Where do you want to shoot? ", ""); for (;;) { (void) getcoord(COMPUTER); if (hits[PLAYER][curx][cury]) { prompt(1, "You shelled this spot already! Try again.", ""); beep(); } else break; } hit = IS_SHIP(board[COMPUTER][curx][cury]); hits[PLAYER][curx][cury] = (char) (hit ? MARK_HIT : MARK_MISS); cgoto(cury, curx); #ifdef A_COLOR if (has_colors()) { if (hit) attron(COLOR_PAIR(COLOR_RED)); else attron(COLOR_PAIR(COLOR_GREEN)); } #endif /* A_COLOR */ (void) addch((chtype) hits[PLAYER][curx][cury]); #ifdef A_COLOR (void) attrset(0); #endif /* A_COLOR */ prompt(1, "You %s.", hit ? "scored a hit" : "missed"); if (hit && (ss = hitship(curx, cury))) { switch (rnd(5)) { case 0: m = " You sank my %s!"; break; case 1: m = " I have this sinking feeling about my %s...."; break; case 2: m = " My %s has gone to Davy Jones's locker!"; break; case 3: m = " Glub, glub -- my %s is headed for the bottom!"; break; case 4: m = " You'll pick up survivors from my %s, I hope...!"; break; } if (m != 0) { (void) printw(m, ss->name); } (void) beep(); } return (hit); } static int sgetc(const char *s) { const char *s1; int ch; (void) refresh(); for (;;) { ch = getch(); if (islower(ch)) ch = toupper(ch); if (ch == CTRLC) uninitgame(0); for (s1 = s; *s1 && ch != *s1; ++s1) continue; if (*s1) { (void) addch((chtype) ch); (void) refresh(); return (ch); } } } static void randomfire(int *px, int *py) /* random-fire routine -- implements simple diagonal-striping strategy */ { static int turncount = 0; static int srchstep = BEGINSTEP; static int huntoffs; /* Offset on search strategy */ int ypossible[BWIDTH * BDEPTH], xpossible[BWIDTH * BDEPTH], nposs; int ypreferred[BWIDTH * BDEPTH], xpreferred[BWIDTH * BDEPTH], npref; int x, y, i; if (turncount++ == 0) huntoffs = rnd(srchstep); /* first, list all possible moves */ nposs = npref = 0; for (x = 0; x < BWIDTH; x++) for (y = 0; y < BDEPTH; y++) if (!hits[COMPUTER][x][y]) { xpossible[nposs] = x; ypossible[nposs] = y; nposs++; if (((x + huntoffs) % srchstep) != (y % srchstep)) { xpreferred[npref] = x; ypreferred[npref] = y; npref++; } } if (npref) { i = rnd(npref); *px = xpreferred[i]; *py = ypreferred[i]; } else if (nposs) { i = rnd(nposs); *px = xpossible[i]; *py = ypossible[i]; if (srchstep > 1) --srchstep; } else { error("No moves possible?? Help!"); ExitProgram(EXIT_FAILURE); /*NOTREACHED */ } } #define S_MISS 0 #define S_HIT 1 #define S_SUNK -1 static int cpufire(int x, int y) /* fire away at given location */ { bool hit, sunk; ship_t *ss = NULL; hit = (bool) board[PLAYER][x][y]; hits[COMPUTER][x][y] = (hit ? MARK_HIT : MARK_MISS); MvPrintw(PROMPTLINE, 0, "I shoot at %c%d. I %s!", y + 'A', x, hit ? "hit" : "miss"); if ((sunk = (hit && (ss = hitship(x, y)))) != 0) (void) printw(" I've sunk your %s", ss->name); (void) clrtoeol(); pgoto(y, x); #ifdef A_COLOR if (has_colors()) { if (hit) attron(COLOR_PAIR(COLOR_RED)); else attron(COLOR_PAIR(COLOR_GREEN)); } #endif /* A_COLOR */ (void) addch((chtype) (hit ? SHOWHIT : SHOWSPLASH)); #ifdef A_COLOR (void) attrset(0); #endif /* A_COLOR */ return hit ? (sunk ? S_SUNK : S_HIT) : S_MISS; } /* * This code implements a fairly irregular FSM, so please forgive the rampant * unstructuredness below. The five labels are states which need to be held * between computer turns. * * The FSM is not externally reset to RANDOM_FIRE if the player wins. Instead, * the other states check for "impossible" conditions which signify a new * game, then if found transition to RANDOM_FIRE. */ static bool cputurn(void) { #define POSSIBLE(x, y) (ONBOARD(x, y) && !hits[COMPUTER][x][y]) #define RANDOM_FIRE 0 #define RANDOM_HIT 1 #define HUNT_DIRECT 2 #define FIRST_PASS 3 #define REVERSE_JUMP 4 #define SECOND_PASS 5 static int next = RANDOM_FIRE; static bool used[4]; static ship_t ts; int navail, x, y, d, n; int hit = S_MISS; switch (next) { case RANDOM_FIRE: /* last shot was random and missed */ refire: randomfire(&x, &y); if (!(hit = cpufire(x, y))) next = RANDOM_FIRE; else { ts.x = x; ts.y = y; ts.hits = 1; next = (hit == S_SUNK) ? RANDOM_FIRE : RANDOM_HIT; } break; case RANDOM_HIT: /* last shot was random and hit */ used[E / 2] = used[S / 2] = used[W / 2] = used[N / 2] = FALSE; /* FALLTHROUGH */ case HUNT_DIRECT: /* last shot hit, we're looking for ship's long axis */ for (d = navail = 0; d < 4; d++) { x = ts.x + xincr[d * 2]; y = ts.y + yincr[d * 2]; if (!used[d] && POSSIBLE(x, y)) navail++; else used[d] = TRUE; } if (navail == 0) /* no valid places for shots adjacent... */ goto refire; /* ...so we must random-fire */ else { n = rnd(navail) + 1; for (d = 0; used[d]; d++) ; /* used[d] is first that == 0 */ for (; n > 1; n--) while (used[++d]) ; /* used[d] is next that == 0 */ assert(d < 4); assert(used[d] == FALSE); used[d] = TRUE; x = ts.x + xincr[d * 2]; y = ts.y + yincr[d * 2]; assert(POSSIBLE(x, y)); if (!(hit = cpufire(x, y))) next = HUNT_DIRECT; else { ts.x = x; ts.y = y; ts.dir = d * 2; ts.hits++; next = (hit == S_SUNK) ? RANDOM_FIRE : FIRST_PASS; } } break; case FIRST_PASS: /* we have a start and a direction now */ x = ts.x + xincr[ts.dir]; y = ts.y + yincr[ts.dir]; if (POSSIBLE(x, y) && (hit = cpufire(x, y))) { ts.x = x; ts.y = y; ts.hits++; next = (hit == S_SUNK) ? RANDOM_FIRE : FIRST_PASS; } else next = REVERSE_JUMP; break; case REVERSE_JUMP: /* nail down the ship's other end */ d = (ts.dir + 4) % 8; x = ts.x + ts.hits * xincr[d]; y = ts.y + ts.hits * yincr[d]; if (POSSIBLE(x, y) && (hit = cpufire(x, y))) { ts.x = x; ts.y = y; ts.dir = d; ts.hits++; next = (hit == S_SUNK) ? RANDOM_FIRE : SECOND_PASS; } else next = RANDOM_FIRE; break; case SECOND_PASS: /* continue shooting after reversing */ x = ts.x + xincr[ts.dir]; y = ts.y + yincr[ts.dir]; if (POSSIBLE(x, y) && (hit = cpufire(x, y))) { ts.x = x; ts.y = y; ts.hits++; next = (hit == S_SUNK) ? RANDOM_FIRE : SECOND_PASS; break; } else next = RANDOM_FIRE; break; } /* pause between shots in salvo */ if (salvo) { (void) refresh(); (void) sleep(1); } #ifdef DEBUG MvPrintw(PROMPTLINE + 2, 0, "New state %d, x=%d, y=%d, d=%d", next, x, y, d); #endif /* DEBUG */ return ((hit) ? TRUE : FALSE); } static int playagain(void) { int j; ship_t *ss; for (ss = cpuship; ss < cpuship + SHIPTYPES; ss++) for (j = 0; j < ss->length; j++) { cgoto(ss->y + j * yincr[ss->dir], ss->x + j * xincr[ss->dir]); (void) addch((chtype) ss->symbol); } if (awinna()) ++cpuwon; else ++plywon; j = 18 + (int) strlen(your_name); if (plywon >= 10) ++j; if (cpuwon >= 10) ++j; MvPrintw(1, (COLWIDTH - j) / 2, "%s: %d Computer: %d", your_name, plywon, cpuwon); prompt(2, (awinna())? "Want to be humiliated again, %s [yn]? " : "Going to give me a chance for revenge, %s [yn]? ", your_name); return (sgetc("YN") == 'Y'); } static void do_options(int c, char *op[]) { register int i; if (c > 1) { for (i = 1; i < c; i++) { switch (op[i][0]) { default: case '?': (void) fprintf(stderr, "Usage: battle [-s | -b] [-c]\n"); (void) fprintf(stderr, "\tWhere the options are:\n"); (void) fprintf(stderr, "\t-s : play a salvo game\n"); (void) fprintf(stderr, "\t-b : play a blitz game\n"); (void) fprintf(stderr, "\t-c : ships may be adjacent\n"); ExitProgram(EXIT_FAILURE); break; case '-': switch (op[i][1]) { case 'b': blitz = 1; if (salvo == 1) { (void) fprintf(stderr, "Bad Arg: -b and -s are mutually exclusive\n"); ExitProgram(EXIT_FAILURE); } break; case 's': salvo = 1; if (blitz == 1) { (void) fprintf(stderr, "Bad Arg: -s and -b are mutually exclusive\n"); ExitProgram(EXIT_FAILURE); } break; case 'c': closepack = 1; break; default: (void) fprintf(stderr, "Bad arg: type \"%s ?\" for usage message\n", op[0]); ExitProgram(EXIT_FAILURE); } } } } } static int scount(int who) { register int i, shots; register ship_t *sp; if (who) sp = cpuship; /* count cpu shots */ else sp = plyship; /* count player shots */ for (i = 0, shots = 0; i < SHIPTYPES; i++, sp++) { if (sp->hits >= sp->length) continue; /* dead ship */ else shots++; } return (shots); } int main(int argc, char *argv[]) { setlocale(LC_ALL, ""); do_options(argc, argv); intro(); do { initgame(); while (awinna() == -1) { if (!blitz) { if (!salvo) { if (turn) (void) cputurn(); else (void) plyturn(); } else { register int i; i = scount(turn); while (i--) { if (turn) { if (cputurn() && awinna() != -1) i = 0; } else { if (plyturn() && awinna() != -1) i = 0; } } } } else while ((turn ? cputurn() : plyturn()) && awinna() == -1) continue; turn = OTHER; } } while (playagain()); uninitgame(0); /*NOTREACHED */ } /* bs.c ends here */ ncurses-6.0-20160213/test/color_name.h0000644000175100001440000000651112052040404015714 0ustar tomusers/**************************************************************************** * Copyright (c) 2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: color_name.h,v 1.4 2012/11/18 01:59:32 tom Exp $ */ #ifndef __COLORNAME_H #define __COLORNAME_H 1 #ifndef __TEST_PRIV_H #include #endif static NCURSES_CONST char *the_color_names[] = { "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white", "BLACK", "RED", "GREEN", "YELLOW", "BLUE", "MAGENTA", "CYAN", "WHITE" }; #ifdef NEED_COLOR_CODE static int color_code(const char *color) { int result = 0; char *endp = 0; size_t n; if ((result = (int) strtol(color, &endp, 0)) >= 0 && (endp == 0 || *endp == 0)) { ; } else if (!strcmp(color, "default")) { result = -1; } else { for (n = 0; n < SIZEOF(the_color_names); ++n) { if (!strcmp(the_color_names[n], color)) { result = (int) n; break; } } } return result; } #endif /* NEED_COLOR_NAME */ #ifdef NEED_COLOR_NAME static const char * color_name(int color) { static char temp[20]; const char *result = 0; if (color >= (int) SIZEOF(the_color_names)) { sprintf(temp, "%d", color); result = temp; } else if (color < 0) { result = "default"; } else { result = the_color_names[color]; } return result; } #endif /* NEED_COLOR_NAME */ #endif /* __COLORNAME_H */ ncurses-6.0-20160213/test/testaddch.c0000644000175100001440000000700612367270030015545 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * This is an example written by Alexander V. Lukyanov , * to demonstrate an inconsistency between ncurses and SVr4 curses. * * $Id: testaddch.c,v 1.12 2014/08/02 23:11:20 tom Exp $ */ #include static void attr_addstr(const char *s, chtype a) { while (*s) addch(((unsigned char) (*s++)) | a); } int main( int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { unsigned i; chtype back, set, attr; setlocale(LC_ALL, ""); initscr(); start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); init_pair(2, COLOR_WHITE, COLOR_RED); init_pair(3, COLOR_BLACK, COLOR_MAGENTA); init_pair(4, COLOR_BLACK, COLOR_GREEN); init_pair(5, COLOR_BLACK, COLOR_CYAN); init_pair(6, COLOR_BLACK, COLOR_YELLOW); init_pair(7, COLOR_BLACK, COLOR_WHITE); for (i = 0; i < 8; i++) { back = (i & 1) ? A_BOLD | 'B' : ' '; set = (i & 2) ? A_REVERSE : 0; attr = (chtype) ((i & 4) ? COLOR_PAIR(4) : 0); bkgdset(back); (void) attrset(AttrArg(set, 0)); attr_addstr("Test string with spaces -> <-\n", attr); } addch('\n'); for (i = 0; i < 8; i++) { back = (i & 1) ? (A_BOLD | 'B' | (chtype) COLOR_PAIR(1)) : ' '; set = (i & 2) ? (A_REVERSE | (chtype) COLOR_PAIR(2)) : 0; attr = (chtype) ((i & 4) ? (chtype) COLOR_PAIR(4) : 0); bkgdset(back); (void) attrset(AttrArg(set, 0)); attr_addstr("Test string with spaces -> <-\n", attr); } getch(); endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/programs0000644000175100001440000001310012624113164015203 0ustar tomusers# $Id: programs,v 1.27 2015/11/21 16:06:12 tom Exp $ ############################################################################## # Copyright (c) 2006-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey # # programs used for ncurses tests background $(LDFLAGS_CURSES) $(LOCAL_LIBS) background blue $(LDFLAGS_CURSES) $(LOCAL_LIBS) blue bs $(LDFLAGS_CURSES) $(LOCAL_LIBS) bs cardfile $(LDFLAGS_DEFAULT) $(LOCAL_LIBS) cardfile chgat $(LDFLAGS_CURSES) $(LOCAL_LIBS) chgat clip_printw $(LDFLAGS_CURSES) $(LOCAL_LIBS) clip_printw color_set $(LDFLAGS_CURSES) $(LOCAL_LIBS) color_set demo_altkeys $(LDFLAGS_CURSES) $(LOCAL_LIBS) demo_altkeys demo_defkey $(LDFLAGS_CURSES) $(LOCAL_LIBS) demo_defkey demo_forms $(LDFLAGS_DEFAULT) $(LOCAL_LIBS) demo_forms edit_field demo_keyok $(LDFLAGS_CURSES) $(LOCAL_LIBS) demo_keyok demo_menus $(LDFLAGS_DEFAULT) $(LOCAL_LIBS) demo_menus demo_panels $(LDFLAGS_DEFAULT) $(LOCAL_LIBS) demo_panels demo_termcap $(LDFLAGS_TINFO) $(LOCAL_LIBS) demo_termcap demo_terminfo $(LDFLAGS_TINFO) $(LOCAL_LIBS) demo_terminfo ditto $(LDFLAGS_THREADS) $(LOCAL_LIBS) ditto dots $(LDFLAGS_TINFO) $(LOCAL_LIBS) dots dots_curses $(LDFLAGS_CURSES) $(LOCAL_LIBS) dots_curses dots_mvcur $(LDFLAGS_CURSES) $(LOCAL_LIBS) dots_mvcur dots_termcap $(LDFLAGS_TINFO) $(LOCAL_LIBS) dots_termcap echochar $(LDFLAGS_CURSES) $(LOCAL_LIBS) echochar filter $(LDFLAGS_CURSES) $(LOCAL_LIBS) filter firework $(LDFLAGS_CURSES) $(LOCAL_LIBS) firework firstlast $(LDFLAGS_DEFAULT) $(LOCAL_LIBS) firstlast foldkeys $(LDFLAGS_CURSES) $(LOCAL_LIBS) foldkeys form_driver_w $(LDFLAGS_DEFAULT) $(LOCAL_LIBS) form_driver_w gdc $(LDFLAGS_CURSES) $(LOCAL_LIBS) gdc hanoi $(LDFLAGS_CURSES) $(LOCAL_LIBS) hanoi hashtest $(LDFLAGS_CURSES) $(LOCAL_LIBS) hashtest inch_wide $(LDFLAGS_CURSES) $(LOCAL_LIBS) inch_wide inchs $(LDFLAGS_CURSES) $(LOCAL_LIBS) inchs ins_wide $(LDFLAGS_CURSES) $(LOCAL_LIBS) ins_wide insdelln $(LDFLAGS_CURSES) $(LOCAL_LIBS) insdelln inserts $(LDFLAGS_CURSES) $(LOCAL_LIBS) inserts key_names $(LDFLAGS_CURSES) $(LOCAL_LIBS) key_names keynames $(LDFLAGS_CURSES) $(LOCAL_LIBS) keynames knight $(LDFLAGS_CURSES) $(LOCAL_LIBS) knight lrtest $(LDFLAGS_CURSES) $(LOCAL_LIBS) lrtest movewindow $(LDFLAGS_CURSES) $(LOCAL_LIBS) movewindow ncurses $(LDFLAGS_DEFAULT) $(LOCAL_LIBS) ncurses newdemo $(LDFLAGS_CURSES) $(LOCAL_LIBS) newdemo railroad $(LDFLAGS_TINFO) $(LOCAL_LIBS) railroad rain $(LDFLAGS_THREADS) $(LOCAL_LIBS) rain redraw $(LDFLAGS_CURSES) $(LOCAL_LIBS) redraw savescreen $(LDFLAGS_CURSES) $(LOCAL_LIBS) savescreen tclock $(LDFLAGS_CURSES) $(LOCAL_LIBS) tclock test_add_wchstr $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_add_wchstr test_addchstr $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_addchstr test_addstr $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_addstr test_addwstr $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_addwstr test_arrays $(LDFLAGS_TINFO) $(LOCAL_LIBS) test_arrays test_get_wstr $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_get_wstr test_getstr $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_getstr test_instr $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_instr test_inwstr $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_inwstr test_opaque $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_opaque test_setupterm $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_setupterm test_sgr $(LDFLAGS_TINFO) $(LOCAL_LIBS) test_sgr test_vid_puts $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_vid_puts test_vidputs $(LDFLAGS_CURSES) $(LOCAL_LIBS) test_vidputs testaddch $(LDFLAGS_CURSES) $(LOCAL_LIBS) testaddch testcurs $(LDFLAGS_CURSES) $(LOCAL_LIBS) testcurs testscanw $(LDFLAGS_CURSES) $(LOCAL_LIBS) testscanw view $(LDFLAGS_CURSES) $(LOCAL_LIBS) view worm $(LDFLAGS_THREADS) $(LOCAL_LIBS) worm xmas $(LDFLAGS_CURSES) $(LOCAL_LIBS) xmas # vile:makemode ncurses-6.0-20160213/test/filter.c0000644000175100001440000001172412371521107015070 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey 1998 * * $Id: filter.c,v 1.16 2014/08/09 22:35:51 tom Exp $ */ #include #if HAVE_FILTER /* * An example of the 'filter()' function in ncurses, this program prompts * for commands and executes them (like a command shell). It illustrates * how ncurses can be used to implement programs that are not full-screen. * * Ncurses differs slightly from SVr4 curses. The latter does not flush its * state when exiting program mode, so the attributes on the command lines of * this program 'bleed' onto the executed commands. Rather than use the * reset_shell_mode() and reset_prog_mode() functions, we could invoke endwin() * and refresh(), but that does not work any better. */ static int new_command(char *buffer, int length, int underline) { int code; attron(A_BOLD); printw("Command: "); attron(underline); code = getnstr(buffer, length); /* * If this returns anything except ERR/OK, it would be one of ncurses's * extensions. Fill the buffer with something harmless that the shell * will execute as a comment. */ #ifdef KEY_EVENT if (code == KEY_EVENT) strcpy(buffer, "# event!"); #endif #ifdef KEY_RESIZE if (code == KEY_RESIZE) { strcpy(buffer, "# resize!"); getch(); } #endif attroff(underline); attroff(A_BOLD); printw("\n"); return code; } static void usage(void) { static const char *msg[] = { "Usage: filter [options]" ,"" ,"Options:" ," -i use initscr() rather than newterm()" }; unsigned n; for (n = 0; n < SIZEOF(msg); n++) fprintf(stderr, "%s\n", msg[n]); ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int ch; char buffer[80]; int underline; bool i_option = FALSE; setlocale(LC_ALL, ""); while ((ch = getopt(argc, argv, "i")) != -1) { switch (ch) { case 'i': i_option = TRUE; break; default: usage(); } } printf("starting filter program using %s...\n", i_option ? "initscr" : "newterm"); filter(); if (i_option) { initscr(); } else { (void) newterm((char *) 0, stdout, stdin); } cbreak(); keypad(stdscr, TRUE); if (has_colors()) { int background = COLOR_BLACK; start_color(); #if HAVE_USE_DEFAULT_COLORS if (use_default_colors() != ERR) background = -1; #endif init_pair(1, COLOR_CYAN, (short) background); underline = COLOR_PAIR(1); } else { underline = A_UNDERLINE; } while (new_command(buffer, sizeof(buffer) - 1, underline) != ERR && strlen(buffer) != 0) { reset_shell_mode(); printf("\n"); fflush(stdout); IGNORE_RC(system(buffer)); reset_prog_mode(); touchwin(stdscr); erase(); refresh(); } printw("done"); refresh(); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the filter function\n"); ExitProgram(EXIT_FAILURE); } #endif /* HAVE_FILTER */ ncurses-6.0-20160213/test/xterm-256color.dat0000644000175100001440000001560311272664704016653 0ustar tomusers############################################################################## # Copyright (c) 2009 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: xterm-256color.dat,v 1.1 2009/10/30 22:33:40 tom Exp $ # This illustrates the predefined colors for xterm's "xterm-256color" feature. # If you set $TERM to "xterm-256color" (and have xterm compiled to support the # 256-color feature), you can use the ncurses 'd' screen to # manipulate the colors shown in the screen. The 'd' screen is limited to # the first 16 colors, and xterm happens to use the same first 16 colors in # the extended color models that support initc. # # The colors shown are for xterm patch #189. scale:255 0: 0 0 0 black 1: 205 0 0 red3 2: 0 205 0 green3 3: 205 205 0 yellow3 4: 30 144 255 DodgerBlue1 5: 205 0 205 magenta3 6: 0 205 205 cyan3 7: 229 229 229 gray90 8: 127 127 127 gray50 9: 255 0 0 red 10: 0 255 0 green 11: 255 255 0 yellow 12: 99 184 255 SteelBlue1 13: 255 0 255 magenta 14: 0 255 255 cyan 15: 255 255 255 white 16: 0 0 0 17: 0 0 95 18: 0 0 135 19: 0 0 175 20: 0 0 215 21: 0 0 255 22: 0 95 0 23: 0 95 95 24: 0 95 135 25: 0 95 175 26: 0 95 215 27: 0 95 255 28: 0 135 0 29: 0 135 95 30: 0 135 135 31: 0 135 175 32: 0 135 215 33: 0 135 255 34: 0 175 0 35: 0 175 95 36: 0 175 135 37: 0 175 175 38: 0 175 215 39: 0 175 255 40: 0 215 0 41: 0 215 95 42: 0 215 135 43: 0 215 175 44: 0 215 215 45: 0 215 255 46: 0 255 0 47: 0 255 95 48: 0 255 135 49: 0 255 175 50: 0 255 215 51: 0 255 255 52: 95 0 0 53: 95 0 95 54: 95 0 135 55: 95 0 175 56: 95 0 215 57: 95 0 255 58: 95 95 0 59: 95 95 95 60: 95 95 135 61: 95 95 175 62: 95 95 215 63: 95 95 255 64: 95 135 0 65: 95 135 95 66: 95 135 135 67: 95 135 175 68: 95 135 215 69: 95 135 255 70: 95 175 0 71: 95 175 95 72: 95 175 135 73: 95 175 175 74: 95 175 215 75: 95 175 255 76: 95 215 0 77: 95 215 95 78: 95 215 135 79: 95 215 175 80: 95 215 215 81: 95 215 255 82: 95 255 0 83: 95 255 95 84: 95 255 135 85: 95 255 175 86: 95 255 215 87: 95 255 255 88: 135 0 0 89: 135 0 95 90: 135 0 135 91: 135 0 175 92: 135 0 215 93: 135 0 255 94: 135 95 0 95: 135 95 95 96: 135 95 135 97: 135 95 175 98: 135 95 215 99: 135 95 255 100: 135 135 0 101: 135 135 95 102: 135 135 135 103: 135 135 175 104: 135 135 215 105: 135 135 255 106: 135 175 0 107: 135 175 95 108: 135 175 135 109: 135 175 175 110: 135 175 215 111: 135 175 255 112: 135 215 0 113: 135 215 95 114: 135 215 135 115: 135 215 175 116: 135 215 215 117: 135 215 255 118: 135 255 0 119: 135 255 95 120: 135 255 135 121: 135 255 175 122: 135 255 215 123: 135 255 255 124: 175 0 0 125: 175 0 95 126: 175 0 135 127: 175 0 175 128: 175 0 215 129: 175 0 255 130: 175 95 0 131: 175 95 95 132: 175 95 135 133: 175 95 175 134: 175 95 215 135: 175 95 255 136: 175 135 0 137: 175 135 95 138: 175 135 135 139: 175 135 175 140: 175 135 215 141: 175 135 255 142: 175 175 0 143: 175 175 95 144: 175 175 135 145: 175 175 175 146: 175 175 215 147: 175 175 255 148: 175 215 0 149: 175 215 95 150: 175 215 135 151: 175 215 175 152: 175 215 215 153: 175 215 255 154: 175 255 0 155: 175 255 95 156: 175 255 135 157: 175 255 175 158: 175 255 215 159: 175 255 255 160: 215 0 0 161: 215 0 95 162: 215 0 135 163: 215 0 175 164: 215 0 215 165: 215 0 255 166: 215 95 0 167: 215 95 95 168: 215 95 135 169: 215 95 175 170: 215 95 215 171: 215 95 255 172: 215 135 0 173: 215 135 95 174: 215 135 135 175: 215 135 175 176: 215 135 215 177: 215 135 255 178: 215 175 0 179: 215 175 95 180: 215 175 135 181: 215 175 175 182: 215 175 215 183: 215 175 255 184: 215 215 0 185: 215 215 95 186: 215 215 135 187: 215 215 175 188: 215 215 215 189: 215 215 255 190: 215 255 0 191: 215 255 95 192: 215 255 135 193: 215 255 175 194: 215 255 215 195: 215 255 255 196: 255 0 0 197: 255 0 95 198: 255 0 135 199: 255 0 175 200: 255 0 215 201: 255 0 255 202: 255 95 0 203: 255 95 95 204: 255 95 135 205: 255 95 175 206: 255 95 215 207: 255 95 255 208: 255 135 0 209: 255 135 95 210: 255 135 135 211: 255 135 175 212: 255 135 215 213: 255 135 255 214: 255 175 0 215: 255 175 95 216: 255 175 135 217: 255 175 175 218: 255 175 215 219: 255 175 255 220: 255 215 0 221: 255 215 95 222: 255 215 135 223: 255 215 175 224: 255 215 215 225: 255 215 255 226: 255 255 0 227: 255 255 95 228: 255 255 135 229: 255 255 175 230: 255 255 215 231: 255 255 255 232: 8 8 8 233: 18 18 18 234: 28 28 28 235: 38 38 38 236: 48 48 48 237: 58 58 58 238: 68 68 68 239: 78 78 78 240: 88 88 88 241: 98 98 98 242: 108 108 108 243: 118 118 118 244: 128 128 128 245: 138 138 138 246: 148 148 148 247: 158 158 158 248: 168 168 168 249: 178 178 178 250: 188 188 188 251: 198 198 198 252: 208 208 208 253: 218 218 218 254: 228 228 228 255: 238 238 238 ncurses-6.0-20160213/test/test_addwstr.c0000644000175100001440000003062312367217347016326 0ustar tomusers/**************************************************************************** * Copyright (c) 2009-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_addwstr.c,v 1.12 2014/08/02 17:24:55 tom Exp $ * * Demonstrate the waddwstr() and wadd_wch functions. * Thomas Dickey - 2009/9/12 * * Note: to provide inputs for *add_wch(), we use setcchar(). A quirk of the * X/Open definition for that function is that the string contains no * characters with negative width. Any control character (such as tab) falls * into that category. So it follows that *add_wch() cannot render a tab * character because there is no legal way to construct a cchar_t containing * one. X/Open does not document this, and it would be logical to assume that * *addwstr() has the same limitation, but it uses a wchar_t string directly, * and does not document how tabs are handled. */ #include #if USE_WIDEC_SUPPORT #define WIDE_LINEDATA #include #undef MvAddCh #undef MvAddStr #undef MvWAddCh #undef MvWAddStr /* definitions to make it simpler to compare with inserts.c */ #define AddNStr addnwstr #define AddStr addwstr #define MvAddNStr (void) mvaddnwstr #define MvAddStr (void) mvaddwstr #define MvWAddNStr (void) mvwaddnwstr #define MvWAddStr (void) mvwaddwstr #define WAddNStr waddnwstr #define WAddStr waddwstr #define MY_TABSIZE 8 typedef enum { oDefault = 0, oMove = 1, oWindow = 2, oMoveWindow = 3 } Options; static bool m_opt = FALSE; static bool w_opt = FALSE; static int n_opt = -1; static void legend(WINDOW *win, int level, Options state, wchar_t *buffer, int length) { const char *showstate; switch (state) { default: case oDefault: showstate = ""; break; case oMove: showstate = " (mvXXX)"; break; case oWindow: showstate = " (winXXX)"; break; case oMoveWindow: showstate = " (mvwinXXX)"; break; } wmove(win, 0, 0); wprintw(win, "The Strings/Chars displays should match. Enter any characters, except:\n"); wprintw(win, "down-arrow or ^N to repeat on next line, ^W for inner window, ESC to exit.\n"); wclrtoeol(win); wprintw(win, "Level %d,%s inserted %d characters <", level, showstate, length); waddwstr(win, buffer); waddstr(win, ">"); } static int ColOf(wchar_t *buffer, int length, int margin) { int n; int result; for (n = 0, result = margin + 1; n < length; ++n) { int ch = buffer[n]; switch (ch) { case '\n': /* actually newline should clear the remainder of the line * and move to the next line - but that seems a little awkward * in this example. */ case '\r': result = 0; break; case '\b': if (result > 0) --result; break; case '\t': result += (MY_TABSIZE - (result % MY_TABSIZE)); break; case '\177': result += 2; break; default: result += wcwidth((wchar_t) ch); if (ch < 32) ++result; break; } } return result; } static int ConvertCh(chtype source, cchar_t *target) { wchar_t tmp_wchar[2]; tmp_wchar[0] = (wchar_t) source; tmp_wchar[1] = 0; if (setcchar(target, tmp_wchar, A_NORMAL, 0, (void *) 0) == ERR) { beep(); return FALSE; } return TRUE; } static int MvWAddCh(WINDOW *win, int y, int x, chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = mvwadd_wch(win, y, x, &tmp_cchar); } else { code = mvwaddch(win, y, x, ch); } return code; } static int MvAddCh(int y, int x, chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = mvadd_wch(y, x, &tmp_cchar); } else { code = mvaddch(y, x, ch); } return code; } static int WAddCh(WINDOW *win, chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = wadd_wch(win, &tmp_cchar); } else { code = waddch(win, ch); } return code; } static int AddCh(chtype ch) { int code; cchar_t tmp_cchar; if (ConvertCh(ch, &tmp_cchar)) { code = add_wch(&tmp_cchar); } else { code = addch(ch); } return code; } #define LEN(n) ((length - (n) > n_opt) ? n_opt : (length - (n))) static void test_inserts(int level) { static bool first = TRUE; int ch; int limit; int row = 1; int col; int row2, col2; int length; wchar_t buffer[BUFSIZ]; WINDOW *look = 0; WINDOW *work = 0; WINDOW *show = 0; int margin = (2 * MY_TABSIZE) - 1; Options option = (Options) ((int) (m_opt ? oMove : oDefault) | (int) ((w_opt || (level > 0)) ? oWindow : oDefault)); if (first) { static char cmd[80]; setlocale(LC_ALL, ""); putenv(strcpy(cmd, "TABSIZE=8")); initscr(); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ keypad(stdscr, TRUE); /* * Show the characters inserted in color, to distinguish from those that * are shifted. */ if (has_colors()) { start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); } } limit = LINES - 5; if (level > 0) { look = newwin(limit, COLS - (2 * (level - 1)), 0, level - 1); work = newwin(limit - 2, COLS - (2 * level), 1, level); show = newwin(4, COLS, limit + 1, 0); box(look, 0, 0); wnoutrefresh(look); limit -= 2; } else { work = stdscr; show = derwin(stdscr, 4, COLS, limit + 1, 0); } keypad(work, TRUE); for (col = margin + 1; col < COLS; col += MY_TABSIZE) MvWVLine(work, row, col, '.', limit - 2); MvWVLine(work, row, margin, ACS_VLINE, limit - 2); MvWVLine(work, row, margin + 1, ACS_VLINE, limit - 2); limit /= 2; (void) mvwaddstr(work, 1, 2, "String"); (void) mvwaddstr(work, limit + 1, 2, "Chars"); wnoutrefresh(work); buffer[length = 0] = '\0'; legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); if (has_colors()) { wbkgdset(work, (chtype) (COLOR_PAIR(1) | ' ')); } while ((ch = read_linedata(work)) != ERR && !isQUIT(ch)) { wmove(work, row, margin + 1); switch (ch) { case key_RECUR: test_inserts(level + 1); if (look) touchwin(look); touchwin(work); touchwin(show); if (look) wnoutrefresh(look); wnoutrefresh(work); wnoutrefresh(show); doupdate(); break; case key_NEWLINE: if (row < limit) { ++row; /* put the whole string in, all at once */ col2 = margin + 1; switch (option) { case oDefault: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (move(row, col2) != ERR) { AddNStr(buffer + col, LEN(col)); } } } else { if (move(row, col2) != ERR) { AddStr(buffer); } } break; case oMove: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvAddNStr(row, col2, buffer + col, LEN(col)); } } else { MvAddStr(row, col2, buffer); } break; case oWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); if (wmove(work, row, col2) != ERR) { WAddNStr(work, buffer + col, LEN(col)); } } } else { if (wmove(work, row, col2) != ERR) { WAddStr(work, buffer); } } break; case oMoveWindow: if (n_opt > 1) { for (col = 0; col < length; col += n_opt) { col2 = ColOf(buffer, col, margin); MvWAddNStr(work, row, col2, buffer + col, LEN(col)); } } else { MvWAddStr(work, row, col2, buffer); } break; } /* do the corresponding single-character insertion */ row2 = limit + row; for (col = 0; col < length; ++col) { col2 = ColOf(buffer, col, margin); switch (option) { case oDefault: if (move(row2, col2) != ERR) { AddCh((chtype) buffer[col]); } break; case oMove: MvAddCh(row2, col2, (chtype) buffer[col]); break; case oWindow: if (wmove(work, row2, col2) != ERR) { WAddCh(work, (chtype) buffer[col]); } break; case oMoveWindow: MvWAddCh(work, row2, col2, (chtype) buffer[col]); break; } } } else { beep(); } break; case KEY_BACKSPACE: ch = '\b'; /* FALLTHRU */ default: buffer[length++] = (wchar_t) ch; buffer[length] = '\0'; /* put the string in, one character at a time */ col = ColOf(buffer, length - 1, margin); switch (option) { case oDefault: if (move(row, col) != ERR) { AddStr(buffer + length - 1); } break; case oMove: MvAddStr(row, col, buffer + length - 1); break; case oWindow: if (wmove(work, row, col) != ERR) { WAddStr(work, buffer + length - 1); } break; case oMoveWindow: MvWAddStr(work, row, col, buffer + length - 1); break; } /* do the corresponding single-character insertion */ switch (option) { case oDefault: if (move(limit + row, col) != ERR) { AddCh((chtype) ch); } break; case oMove: MvAddCh(limit + row, col, (chtype) ch); break; case oWindow: if (wmove(work, limit + row, col) != ERR) { WAddCh(work, (chtype) ch); } break; case oMoveWindow: MvWAddCh(work, limit + row, col, (chtype) ch); break; } wnoutrefresh(work); legend(show, level, option, buffer, length); wnoutrefresh(show); doupdate(); break; } } delwin(show); if (level > 0) { delwin(work); delwin(look); } } static void usage(void) { static const char *tbl[] = { "Usage: inserts [options]" ,"" ,"Options:" ," -f FILE read data from given file" ," -n NUM limit string-inserts to NUM bytes on ^N replay" ," -m perform wmove/move separately from insert-functions" ," -w use window-parameter even when stdscr would be implied" }; unsigned n; for (n = 0; n < SIZEOF(tbl); ++n) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int ch; setlocale(LC_ALL, ""); while ((ch = getopt(argc, argv, "f:mn:w")) != -1) { switch (ch) { case 'f': init_linedata(optarg); break; case 'm': m_opt = TRUE; break; case 'n': n_opt = atoi(optarg); if (n_opt == 0) n_opt = -1; break; case 'w': w_opt = TRUE; break; default: usage(); break; } } if (optind < argc) usage(); test_inserts(0); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the wide-ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/cardfile.dat0000644000175100001440000000061206703777115015712 0ustar tomuserstitle 1 Some text for title1 and some more text title 2 The quicker brown fox ran all over the lazy dog. put a card before the first two This is an example of a simple cardfile. show a fourth card The fourth card has a large amount of data, more than the other cards. At least, that is what I thought it should do, since I want to see how well the forms package handles justification. ncurses-6.0-20160213/test/blue.c0000644000175100001440000003063612137025455014542 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /***************************************************************************** * * * B l u e M o o n * * ================= * * V2.2 * * A patience game by T.A.Lister * * Integral screen support by Eric S. Raymond * * * *****************************************************************************/ /* * Compile this with the command `cc -O blue.c -lcurses -o blue'. For best * results, use the ncurses(3) library. On non-Intel machines, SVr4 curses is * just as good. * * $Id: blue.c,v 1.35 2013/04/27 19:46:53 tom Exp $ */ #include #include #define NOCARD (-1) #define ACE 0 #define KING 12 #define SUIT_LENGTH 13 #define HEARTS 0 #define SPADES 1 #define DIAMONDS 2 #define CLUBS 3 #define NSUITS 4 #define GRID_WIDTH 14 /* 13+1 */ #define GRID_LENGTH 56 /* 4*(13+1) */ #define PACK_SIZE 52 #define BASEROW 1 #define PROMPTROW 11 #define RED_ON_WHITE 1 #define BLACK_ON_WHITE 2 #define BLUE_ON_WHITE 3 static void die(int onsig) GCC_NORETURN; static int deck_size = PACK_SIZE; /* initial deck */ static int deck[PACK_SIZE]; static int grid[GRID_LENGTH]; /* card layout grid */ static int freeptr[4]; /* free card space pointers */ static int deal_number = 0; static chtype ranks[SUIT_LENGTH][2] = { {' ', 'A'}, {' ', '2'}, {' ', '3'}, {' ', '4'}, {' ', '5'}, {' ', '6'}, {' ', '7'}, {' ', '8'}, {' ', '9'}, {'1', '0'}, {' ', 'J'}, {' ', 'Q'}, {' ', 'K'} }; /* Please note, that this is a bad example. Color values should not be or'ed in. This only works, because the characters used here are plain and have no color attribute themselves. */ #ifdef COLOR_PAIR #define OR_COLORS(value,pair) ((value) | COLOR_PAIR(pair)) #else #define OR_COLORS(value,pair) (value) #endif #define PC_COLORS(value,pair) (OR_COLORS(value,pair) | A_ALTCHARSET) static chtype letters[4] = { OR_COLORS('h', RED_ON_WHITE), /* hearts */ OR_COLORS('s', BLACK_ON_WHITE), /* spades */ OR_COLORS('d', RED_ON_WHITE), /* diamonds */ OR_COLORS('c', BLACK_ON_WHITE), /* clubs */ }; #if defined(__i386__) && defined(A_ALTCHARSET) && HAVE_TIGETSTR static chtype glyphs[] = { PC_COLORS('\003', RED_ON_WHITE), /* hearts */ PC_COLORS('\006', BLACK_ON_WHITE), /* spades */ PC_COLORS('\004', RED_ON_WHITE), /* diamonds */ PC_COLORS('\005', BLACK_ON_WHITE), /* clubs */ }; #define USE_CP437 1 #else #define USE_CP437 0 #endif /* __i386__ */ static chtype *suits = letters; /* this may change to glyphs below */ static void die(int onsig) { (void) signal(onsig, SIG_IGN); endwin(); ExitProgram(EXIT_SUCCESS); } static void init_vars(void) { int i; deck_size = PACK_SIZE; for (i = 0; i < PACK_SIZE; i++) deck[i] = i; for (i = 0; i < 4; i++) freeptr[i] = i * GRID_WIDTH; } static void shuffle(int size) { int i, j, numswaps, swapnum, temp; numswaps = size * 10; /* an arbitrary figure */ for (swapnum = 0; swapnum < numswaps; swapnum++) { i = rand() % size; j = rand() % size; temp = deck[i]; deck[i] = deck[j]; deck[j] = temp; } } static void deal_cards(void) { int ptr, card = 0, value, csuit, crank, suit, aces[4]; memset(aces, 0, sizeof(aces)); for (suit = HEARTS; suit <= CLUBS; suit++) { ptr = freeptr[suit]; grid[ptr++] = NOCARD; /* 1st card space is blank */ while ((ptr % GRID_WIDTH) != 0) { value = deck[card++]; crank = value % SUIT_LENGTH; csuit = value / SUIT_LENGTH; if (crank == ACE) aces[csuit] = ptr; grid[ptr++] = value; } } if (deal_number == 1) /* shift the aces down to the 1st column */ for (suit = HEARTS; suit <= CLUBS; suit++) { grid[suit * GRID_WIDTH] = suit * SUIT_LENGTH; grid[aces[suit]] = NOCARD; freeptr[suit] = aces[suit]; } } static void printcard(int value) { (void) addch(' '); if (value == NOCARD) (void) addstr(" "); else { addch(ranks[value % SUIT_LENGTH][0] | (chtype) COLOR_PAIR(BLUE_ON_WHITE)); addch(ranks[value % SUIT_LENGTH][1] | (chtype) COLOR_PAIR(BLUE_ON_WHITE)); addch(suits[value / SUIT_LENGTH]); } (void) addch(' '); } static void display_cards(int deal) { int row, card; clear(); (void) printw( "Blue Moon 2.1 - by Tim Lister & Eric Raymond - Deal %d.\n", deal); for (row = HEARTS; row <= CLUBS; row++) { move(BASEROW + row + row + 2, 1); for (card = 0; card < GRID_WIDTH; card++) printcard(grid[row * GRID_WIDTH + card]); } move(PROMPTROW + 2, 0); refresh(); #define P(x) (void)printw("%s\n", x) P(" This 52-card solitaire starts with the entire deck shuffled and dealt"); P("out in four rows. The aces are then moved to the left end of the layout,"); P("making 4 initial free spaces. You may move to a space only the card that"); P("matches the left neighbor in suit, and is one greater in rank. Kings are"); P("high, so no cards may be placed to their right (they create dead spaces)."); P(" When no moves can be made, cards still out of sequence are reshuffled"); P("and dealt face up after the ends of the partial sequences, leaving a card"); P("space after each sequence, so that each row looks like a partial sequence"); P("followed by a space, followed by enough cards to make a row of 14. "); P(" A moment's reflection will show that this game cannot take more than 13"); P("deals. A good score is 1-3 deals, 4-7 is average, 8 or more is poor. "); #undef P refresh(); } static int find(int card) { int i; if ((card < 0) || (card >= PACK_SIZE)) return (NOCARD); for (i = 0; i < GRID_LENGTH; i++) if (grid[i] == card) return i; return (NOCARD); } static void movecard(int src, int dst) { grid[dst] = grid[src]; grid[src] = NOCARD; move(BASEROW + (dst / GRID_WIDTH) * 2 + 2, (dst % GRID_WIDTH) * 5 + 1); printcard(grid[dst]); move(BASEROW + (src / GRID_WIDTH) * 2 + 2, (src % GRID_WIDTH) * 5 + 1); printcard(grid[src]); refresh(); } static void play_game(void) { int dead = 0, i, j; char c; int selection[4], card; while (dead < 4) { dead = 0; for (i = 0; i < 4; i++) { card = grid[freeptr[i] - 1]; if (((card % SUIT_LENGTH) == KING) || (card == NOCARD)) selection[i] = NOCARD; else selection[i] = find(card + 1); if (selection[i] == NOCARD) dead++; }; if (dead < 4) { char live[NSUITS + 1], *lp = live; for (i = 0; i < 4; i++) { if (selection[i] != NOCARD) { move(BASEROW + (selection[i] / GRID_WIDTH) * 2 + 3, (selection[i] % GRID_WIDTH) * 5); (void) printw(" %c ", (*lp++ = (char) ('a' + i))); } }; *lp = '\0'; if (strlen(live) == 1) { move(PROMPTROW, 0); (void) printw( "Making forced moves... "); refresh(); (void) sleep(1); c = live[0]; } else { char buf[BUFSIZ]; (void) sprintf(buf, "Type [%s] to move, r to redraw, q or INTR to quit: ", live); do { move(PROMPTROW, 0); (void) addstr(buf); move(PROMPTROW, (int) strlen(buf)); clrtoeol(); (void) addch(' '); } while (((c = (char) getch()) < 'a' || c > 'd') && (c != 'r') && (c != 'q')); } for (j = 0; j < 4; j++) if (selection[j] != NOCARD) { move(BASEROW + (selection[j] / GRID_WIDTH) * 2 + 3, (selection[j] % GRID_WIDTH) * 5); (void) printw(" "); } if (c == 'r') display_cards(deal_number); else if (c == 'q') die(SIGINT); else { i = c - 'a'; if (selection[i] == NOCARD) beep(); else { movecard(selection[i], freeptr[i]); freeptr[i] = selection[i]; } } } } move(PROMPTROW, 0); (void) standout(); (void) printw("Finished deal %d - type any character to continue...", deal_number); (void) standend(); (void) getch(); } static int collect_discards(void) { int row, col, cardno = 0, finish, gridno; for (row = HEARTS; row <= CLUBS; row++) { finish = 0; for (col = 1; col < GRID_WIDTH; col++) { gridno = row * GRID_WIDTH + col; if ((grid[gridno] != (grid[gridno - 1] + 1)) && (finish == 0)) { finish = 1; freeptr[row] = gridno; }; if ((finish != 0) && (grid[gridno] != NOCARD)) deck[cardno++] = grid[gridno]; } } return cardno; } static void game_finished(int deal) { clear(); (void) printw("You finished the game in %d deals. This is ", deal); (void) standout(); if (deal < 2) (void) addstr("excellent"); else if (deal < 4) (void) addstr("good"); else if (deal < 8) (void) addstr("average"); else (void) addstr("poor"); (void) standend(); (void) addstr(". "); refresh(); } int main(int argc, char *argv[]) { CATCHALL(die); setlocale(LC_ALL, ""); initscr(); /* * We use COLOR_GREEN because COLOR_BLACK is wired to the wrong thing. */ start_color(); init_pair(RED_ON_WHITE, COLOR_RED, COLOR_WHITE); init_pair(BLUE_ON_WHITE, COLOR_BLUE, COLOR_WHITE); init_pair(BLACK_ON_WHITE, COLOR_BLACK, COLOR_WHITE); #ifndef COLOR_PAIR letters[0] = OR_COLORS('h', RED_ON_WHITE); /* hearts */ letters[1] = OR_COLORS('s', BLACK_ON_WHITE); /* spades */ letters[2] = OR_COLORS('d', RED_ON_WHITE); /* diamonds */ letters[3] = OR_COLORS('c', BLACK_ON_WHITE); /* clubs */ #if USE_CP437 glyphs[0] = PC_COLORS('\003', RED_ON_WHITE); /* hearts */ glyphs[1] = PC_COLORS('\006', BLACK_ON_WHITE); /* spades */ glyphs[2] = PC_COLORS('\004', RED_ON_WHITE); /* diamonds */ glyphs[3] = PC_COLORS('\005', BLACK_ON_WHITE); /* clubs */ #endif #endif #if USE_CP437 if (tigetstr("smpch")) suits = glyphs; #endif /* USE_CP437 */ cbreak(); if (argc == 2) srand((unsigned) atoi(argv[1])); else srand((unsigned) time((time_t *) 0)); init_vars(); do { deal_number++; shuffle(deck_size); deal_cards(); display_cards(deal_number); play_game(); } while ((deck_size = collect_discards()) != 0); game_finished(deal_number); die(SIGINT); /*NOTREACHED */ } /* blue.c ends here */ ncurses-6.0-20160213/test/color_set.c0000644000175100001440000000643212273270342015577 0ustar tomusers/**************************************************************************** * Copyright (c) 2003-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: color_set.c,v 1.8 2014/02/01 22:10:42 tom Exp $ */ #include #if HAVE_COLOR_SET #define SHOW(n) ((n) == ERR ? "ERR" : "OK") int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { NCURSES_COLOR_T f, b; int i; initscr(); cbreak(); noecho(); if (has_colors()) { start_color(); (void) pair_content(0, &f, &b); printw("pair 0 contains (%d,%d)\n", (int) f, (int) b); getch(); printw("Initializing pair 1 to red/black\n"); init_pair(1, COLOR_RED, COLOR_BLACK); i = color_set(1, NULL); printw("RED/BLACK (%s)\n", SHOW(i)); getch(); printw("Initializing pair 2 to white/blue\n"); init_pair(2, COLOR_WHITE, COLOR_BLUE); i = color_set(2, NULL); printw("WHITE/BLUE (%s)\n", SHOW(i)); getch(); printw("Resetting colors to pair 0\n"); i = color_set(0, NULL); printw("Default Colors (%s)\n", SHOW(i)); getch(); printw("Resetting colors to pair 1\n"); i = color_set(1, NULL); printw("RED/BLACK (%s)\n", SHOW(i)); getch(); } else { printw("This demo requires a color terminal"); getch(); } endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the curses color_set function\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/mk-test.awk0000644000175100001440000001067112520546436015537 0ustar tomusers# $Id: mk-test.awk,v 1.13 2015/05/01 00:47:26 tom Exp $ ############################################################################## # Copyright (c) 2006-2010,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey # # generate Makefile for ncurses tests. BEGIN { first = 1; count = 0; } /^#/ { next; } /^$/ { next; } { if (first) { print "# generated by mk-test.awk\n"; first = 0; } progs[count] = $1; flags[count] = $2; using[count] = $3; files[count] = ""; for (n = 4; n <= NF; ++n) { files[count] = sprintf("%s $(MODEL)/%s$o", files[count], $n); } count = count + 1; } END { for (n = 0; n < count; ++n) { if (n == 0) { printf "TESTS\t= "; } else { printf "\t "; } printf "$(destdir)%s$x", progs[n]; if (n < count - 1) { printf " \\"; } print ""; } print "" print "all: $(TESTS)" print "" print "sources:" print "" print "tags:" print " $(CTAGS) *.[ch]" print "" print "# no libraries here" print "libs \\" print "install.libs \\" print "uninstall.libs:" print "" if (INSTALL == "yes") { print "# we might install the test-programs" print "install \\" print "install.test: $(BINDIR) $(TESTS)" print " $(SHELL) -c 'for src in $(TESTS); do \\" print " dst=`echo $$src | $(TRANSFORM)`; \\" print " $(INSTALL_PROG) $$src $(BINDIR)/$$dst; \\" print " done'" print "" print "uninstall \\" print "uninstall.test:" print " $(SHELL) -c 'for src in $(TESTS); do \\" print " dst=`echo $$src | $(TRANSFORM)`; \\" print " rm -f $(BINDIR)/$$dst; \\" print " done'" } else { print "install \\" print "install.test \\" print "uninstall \\" print "uninstall.test:" } print "" print "mostlyclean ::" print " -rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace" print "" print "clean :: mostlyclean" print " -$(SHELL) -c \"if test -n '$x' ; then $(MAKE) clean x=''; fi\"" print " -rm -rf *$o screendump *.lis $(TESTS) .libs *.dSYM" print "" print "distclean :: clean" print " -rm -f Makefile ncurses_cfg.h config.status config.log" print "" print "realclean :: distclean" print "" print "lint:" print " $(SHELL) -c 'for N in $(TESTS); do echo LINT:$$N; $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/$$N.c $(LINT_LIBS); done'" print "$(BINDIR) :" print " mkdir -p $@" if (ECHO_LINK != "") { ECHO_LINK="@ echo linking $@ ... ;" } for (n = 0; n < count; ++n) { print ""; printf "$(destdir)%s$x:%s %s\n", progs[n], files[n], using[n]; printf "\t%s$(LINK) -o $@%s %s\n", ECHO_LINK, files[n], flags[n]; } } ncurses-6.0-20160213/test/gdc.60000644000175100001440000000603610422532767014274 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2003,2006 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: gdc.6,v 1.3 2006/04/22 23:02:15 tom Exp $ .TH GDC 6 .SH NAME gdc \- grand digital clock (curses) .SH SYNOPSIS .B gdc [-n] [ [-s] [ .I n ] .SH DESCRIPTION .I Gdc runs a digital clock made of reverse-video blanks on a terminal screen. If the terminal supports color, the clock is drawn in red. You can make the clock stop, pause or resume by pressing a ``q'', ``s'' or space, respectively. .SH OPTIONS .TP .B -n redirects input to /dev/null, making it ignore the stop/pause commands. You can still stop it by pressing the interrupt key. .TP .B -s makes digits scroll as they change. When running on a fast display, the program breaks up the scrolling into subsecond repaints, making the operation appear smooth. .PP With an optional numeric argument .I num it stops after .I num seconds. Normally it runs "forever" (counting down from 2 billion seconds). .SH AUTHOR Amos Shapir, modified for curses by John Lupien. Improvements for ncurses by Thomas Dickey. ncurses-6.0-20160213/test/edit_field.h0000644000175100001440000000533012154650671015704 0ustar tomusers/**************************************************************************** * Copyright (c) 2003-2008,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: edit_field.h,v 1.9 2013/06/08 15:46:01 tom Exp $ * * Interface of edit_field.c */ #ifndef EDIT_FORM_H_incl #define EDIT_FORM_H_incl 1 #include #define EDIT_FIELD(c) (MAX_FORM_COMMAND + c) #define MY_HELP EDIT_FIELD('h') #define MY_QUIT EDIT_FIELD('q') #define MY_EDT_MODE EDIT_FIELD('e') #define MY_INS_MODE EDIT_FIELD('t') typedef struct { chtype background; int row_count; int *row_lengths; } FieldAttrs; extern FieldAttrs *field_attrs(FIELD * field); extern void init_edit_field(FIELD * field, char *value); extern void help_edit_field(void); extern int edit_field(FORM * form, int *result); #endif /* EDIT_FORM_H_incl */ ncurses-6.0-20160213/test/testscanw.c0000644000175100001440000000560110413547623015621 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2002,2006 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* gleaned from a web-search, shows a bug combining scanw and implicit scroll. * Date: 1997/03/17 * From: bayern@morpheus.cis.yale.edu * * $Id: testscanw.c,v 1.11 2006/04/01 19:08:03 tom Exp $ */ #include int main(int argc, char *argv[]) { long badanswer = 1; long *response = &badanswer; setlocale(LC_ALL, ""); initscr(); scrollok(stdscr, TRUE); idlok(stdscr, TRUE); echo(); #if 0 trace(TRACE_UPDATE | TRACE_CALLS); #endif while (argc > 1) { if (isdigit(UChar(*argv[1]))) move(atoi(argv[1]), 0); else if (!strcmp(argv[1], "-k")) keypad(stdscr, TRUE); argc--, argv++; } while (badanswer) { printw("Enter a number (0 to quit):\n"); printw("--> "); scanw("%20ld", response); /* yes, it's a pointer */ } endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/modules0000644000175100001440000001244312624113134015027 0ustar tomusers# $Id: modules,v 1.53 2015/11/21 16:05:48 tom Exp $ ############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1997-on # # Test-Program modules @ base background progs $(srcdir) $(HEADER_DEPS) blue progs $(srcdir) $(HEADER_DEPS) bs progs $(srcdir) $(HEADER_DEPS) cardfile progs $(srcdir) $(HEADER_DEPS) ../include/panel.h ../include/form.h chgat progs $(srcdir) $(HEADER_DEPS) clip_printw progs $(srcdir) $(HEADER_DEPS) color_set progs $(srcdir) $(HEADER_DEPS) demo_altkeys progs $(srcdir) $(HEADER_DEPS) demo_defkey progs $(srcdir) $(HEADER_DEPS) demo_forms progs $(srcdir) $(HEADER_DEPS) $(srcdir)/edit_field.h demo_keyok progs $(srcdir) $(HEADER_DEPS) demo_menus progs $(srcdir) $(HEADER_DEPS) ../include/menu.h demo_panels progs $(srcdir) $(HEADER_DEPS) ../include/panel.h demo_termcap progs $(srcdir) $(HEADER_DEPS) demo_terminfo progs $(srcdir) $(HEADER_DEPS) ditto progs $(srcdir) $(HEADER_DEPS) dots progs $(srcdir) $(HEADER_DEPS) dots_curses progs $(srcdir) $(HEADER_DEPS) dots_mvcur progs $(srcdir) $(HEADER_DEPS) dots_termcap progs $(srcdir) $(HEADER_DEPS) echochar progs $(srcdir) $(HEADER_DEPS) edit_field progs $(srcdir) $(HEADER_DEPS) $(srcdir)/edit_field.h filter progs $(srcdir) $(HEADER_DEPS) firework progs $(srcdir) $(HEADER_DEPS) firstlast progs $(srcdir) $(HEADER_DEPS) foldkeys progs $(srcdir) $(HEADER_DEPS) form_driver_w progs $(srcdir) $(HEADER_DEPS) gdc progs $(srcdir) $(HEADER_DEPS) hanoi progs $(srcdir) $(HEADER_DEPS) hashtest progs $(srcdir) $(HEADER_DEPS) inch_wide progs $(srcdir) $(HEADER_DEPS) inchs progs $(srcdir) $(HEADER_DEPS) ins_wide progs $(srcdir) $(HEADER_DEPS) $(srcdir)/linedata.h insdelln progs $(srcdir) $(HEADER_DEPS) inserts progs $(srcdir) $(HEADER_DEPS) $(srcdir)/linedata.h key_names progs $(srcdir) $(HEADER_DEPS) keynames progs $(srcdir) $(HEADER_DEPS) knight progs $(srcdir) $(HEADER_DEPS) lrtest progs $(srcdir) $(HEADER_DEPS) movewindow progs $(srcdir) $(HEADER_DEPS) ncurses progs $(srcdir) $(HEADER_DEPS) ../include/panel.h ../include/menu.h ../include/form.h newdemo progs $(srcdir) $(HEADER_DEPS) railroad progs $(srcdir) $(HEADER_DEPS) rain progs $(srcdir) $(HEADER_DEPS) redraw progs $(srcdir) $(HEADER_DEPS) savescreen progs $(srcdir) $(HEADER_DEPS) tclock progs $(srcdir) $(HEADER_DEPS) test_add_wchstr progs $(srcdir) $(HEADER_DEPS) $(srcdir)/linedata.h test_addchstr progs $(srcdir) $(HEADER_DEPS) $(srcdir)/linedata.h test_addstr progs $(srcdir) $(HEADER_DEPS) $(srcdir)/linedata.h test_addwstr progs $(srcdir) $(HEADER_DEPS) $(srcdir)/linedata.h test_arrays progs $(srcdir) $(HEADER_DEPS) test_get_wstr progs $(srcdir) $(HEADER_DEPS) test_getstr progs $(srcdir) $(HEADER_DEPS) test_instr progs $(srcdir) $(HEADER_DEPS) test_inwstr progs $(srcdir) $(HEADER_DEPS) test_opaque progs $(srcdir) $(HEADER_DEPS) test_setupterm progs $(srcdir) $(HEADER_DEPS) test_sgr progs $(srcdir) $(HEADER_DEPS) test_vid_puts progs $(srcdir) $(HEADER_DEPS) test_vidputs progs $(srcdir) $(HEADER_DEPS) testaddch progs $(srcdir) $(HEADER_DEPS) testcurs progs $(srcdir) $(HEADER_DEPS) testscanw progs $(srcdir) $(HEADER_DEPS) view progs $(srcdir) $(HEADER_DEPS) $(srcdir)/widechars.h worm progs $(srcdir) $(HEADER_DEPS) xmas progs $(srcdir) $(HEADER_DEPS) # vile:makemode ncurses-6.0-20160213/test/dots.c0000644000175100001440000001112212221652071014543 0ustar tomusers/**************************************************************************** * Copyright (c) 1999-2011,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey 1999 * * $Id: dots.c,v 1.25 2013/09/28 22:12:09 tom Exp $ * * A simple demo of the terminfo interface. */ #define USE_TINFO #include #if HAVE_SETUPTERM #include #define valid(s) ((s != 0) && s != (char *)-1) static bool interrupted = FALSE; static long total_chars = 0; static time_t started; static TPUTS_PROTO(outc, c) { int rc = c; if (interrupted) { char tmp = (char) c; if (write(STDOUT_FILENO, &tmp, (size_t) 1) == -1) rc = EOF; } else { rc = putc(c, stdout); } TPUTS_RETURN(rc); } static bool outs(const char *s) { if (valid(s)) { tputs(s, 1, outc); return TRUE; } return FALSE; } static void cleanup(void) { outs(exit_attribute_mode); if (!outs(orig_colors)) outs(orig_pair); outs(clear_screen); outs(cursor_normal); printf("\n\n%ld total chars, rate %.2f/sec\n", total_chars, ((double) (total_chars) / (double) (time((time_t *) 0) - started))); } static void onsig(int n GCC_UNUSED) { interrupted = TRUE; } static double ranf(void) { long r = (rand() & 077777); return ((double) r / 32768.); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int x, y, z, p; double r; double c; int my_colors; CATCHALL(onsig); srand((unsigned) time(0)); setupterm((char *) 0, 1, (int *) 0); outs(clear_screen); outs(cursor_invisible); my_colors = max_colors; if (my_colors > 1) { if (!valid(set_a_foreground) || !valid(set_a_background) || (!valid(orig_colors) && !valid(orig_pair))) my_colors = -1; } r = (double) (lines - 4); c = (double) (columns - 4); started = time((time_t *) 0); while (!interrupted) { x = (int) (c * ranf()) + 2; y = (int) (r * ranf()) + 2; p = (ranf() > 0.9) ? '*' : ' '; tputs(tparm3(cursor_address, y, x), 1, outc); if (my_colors > 0) { z = (int) (ranf() * my_colors); if (ranf() > 0.01) { tputs(tparm2(set_a_foreground, z), 1, outc); } else { tputs(tparm2(set_a_background, z), 1, outc); napms(1); } } else if (valid(exit_attribute_mode) && valid(enter_reverse_mode)) { if (ranf() <= 0.01) { outs((ranf() > 0.6) ? enter_reverse_mode : exit_attribute_mode); napms(1); } } outc(p); fflush(stdout); ++total_chars; } cleanup(); ExitProgram(EXIT_SUCCESS); } #else int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { fprintf(stderr, "This program requires terminfo\n"); exit(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/firework.c0000644000175100001440000001305012367217267015443 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: firework.c,v 1.30 2014/08/02 17:24:07 tom Exp $ */ #include #include static short my_bg = COLOR_BLACK; static void cleanup(void) { curs_set(1); endwin(); } static void onsig(int n GCC_UNUSED) { cleanup(); ExitProgram(EXIT_FAILURE); } static void showit(void) { int ch; napms(120); if ((ch = getch()) != ERR) { #ifdef KEY_RESIZE if (ch == KEY_RESIZE) { erase(); } else #endif if (ch == 'q') { cleanup(); ExitProgram(EXIT_SUCCESS); } else if (ch == 's') { nodelay(stdscr, FALSE); } else if (ch == ' ') { nodelay(stdscr, TRUE); } } } static short get_colour(chtype *bold) { int attr; attr = (rand() % 16) + 1; *bold = A_NORMAL; if (attr > 8) { *bold = A_BOLD; attr &= 7; } return (short) (attr); } static void explode(int row, int col) { chtype bold; erase(); MvPrintw(row, col, "-"); showit(); init_pair(1, get_colour(&bold), my_bg); (void) attrset(AttrArg(COLOR_PAIR(1), bold)); MvPrintw(row - 1, col - 1, " - "); MvPrintw(row + 0, col - 1, "-+-"); MvPrintw(row + 1, col - 1, " - "); showit(); init_pair(1, get_colour(&bold), my_bg); (void) attrset(AttrArg(COLOR_PAIR(1), bold)); MvPrintw(row - 2, col - 2, " --- "); MvPrintw(row - 1, col - 2, "-+++-"); MvPrintw(row + 0, col - 2, "-+#+-"); MvPrintw(row + 1, col - 2, "-+++-"); MvPrintw(row + 2, col - 2, " --- "); showit(); init_pair(1, get_colour(&bold), my_bg); (void) attrset(AttrArg(COLOR_PAIR(1), bold)); MvPrintw(row - 2, col - 2, " +++ "); MvPrintw(row - 1, col - 2, "++#++"); MvPrintw(row + 0, col - 2, "+# #+"); MvPrintw(row + 1, col - 2, "++#++"); MvPrintw(row + 2, col - 2, " +++ "); showit(); init_pair(1, get_colour(&bold), my_bg); (void) attrset(AttrArg(COLOR_PAIR(1), bold)); MvPrintw(row - 2, col - 2, " # "); MvPrintw(row - 1, col - 2, "## ##"); MvPrintw(row + 0, col - 2, "# #"); MvPrintw(row + 1, col - 2, "## ##"); MvPrintw(row + 2, col - 2, " # "); showit(); init_pair(1, get_colour(&bold), my_bg); (void) attrset(AttrArg(COLOR_PAIR(1), bold)); MvPrintw(row - 2, col - 2, " # # "); MvPrintw(row - 1, col - 2, "# #"); MvPrintw(row + 0, col - 2, " "); MvPrintw(row + 1, col - 2, "# #"); MvPrintw(row + 2, col - 2, " # # "); showit(); } int main( int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int start, end, row, diff, flag = 0, direction; unsigned seed; CATCHALL(onsig); initscr(); noecho(); cbreak(); keypad(stdscr, TRUE); nodelay(stdscr, TRUE); if (has_colors()) { start_color(); #if HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) my_bg = -1; #endif } curs_set(0); seed = (unsigned) time((time_t *) 0); srand(seed); for (;;) { do { start = rand() % (COLS - 3); end = rand() % (COLS - 3); start = (start < 2) ? 2 : start; end = (end < 2) ? 2 : end; direction = (start > end) ? -1 : 1; diff = abs(start - end); } while (diff < 2 || diff >= LINES - 2); (void) attrset(AttrArg(0, A_NORMAL)); for (row = 0; row < diff; row++) { MvPrintw(LINES - row, start + (row * direction), (direction < 0) ? "\\" : "/"); if (flag++) { showit(); erase(); flag = 0; } } if (flag++) { showit(); flag = 0; } seed = (unsigned) time((time_t *) 0); srand(seed); explode(LINES - row, start + (diff * direction)); erase(); showit(); } } ncurses-6.0-20160213/test/dots_curses.c0000644000175100001440000001025612371520232016135 0ustar tomusers/**************************************************************************** * Copyright (c) 2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey * * $Id: dots_curses.c,v 1.3 2014/08/09 22:28:42 tom Exp $ * * A simple demo of the curses interface used for comparison with termcap. */ #include #if !defined(__MINGW32__) #include #endif #include #define valid(s) ((s != 0) && s != (char *)-1) static bool interrupted = FALSE; static long total_chars = 0; static time_t started; static void cleanup(void) { endwin(); printf("\n\n%ld total chars, rate %.2f/sec\n", total_chars, ((double) (total_chars) / (double) (time((time_t *) 0) - started))); } static void onsig(int n GCC_UNUSED) { interrupted = TRUE; } static double ranf(void) { long r = (rand() & 077777); return ((double) r / 32768.); } static int mypair(int fg, int bg) { int pair = (fg * COLORS) + bg; return (pair >= COLOR_PAIRS) ? -1 : pair; } static void set_colors(int fg, int bg) { int pair = mypair(fg, bg); if (pair > 0) { attron(COLOR_PAIR(mypair(fg, bg))); } } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int x, y, z, p; int fg, bg; double r; double c; CATCHALL(onsig); srand((unsigned) time(0)); initscr(); if (has_colors()) { start_color(); for (fg = 0; fg < COLORS; fg++) { for (bg = 0; bg < COLORS; bg++) { int pair = mypair(fg, bg); if (pair > 0) init_pair((short) pair, (short) fg, (short) bg); } } } r = (double) (LINES - 4); c = (double) (COLS - 4); started = time((time_t *) 0); fg = COLOR_WHITE; bg = COLOR_BLACK; while (!interrupted) { x = (int) (c * ranf()) + 2; y = (int) (r * ranf()) + 2; p = (ranf() > 0.9) ? '*' : ' '; move(y, x); if (has_colors()) { z = (int) (ranf() * COLORS); if (ranf() > 0.01) { set_colors(fg = z, bg); attron(COLOR_PAIR(mypair(fg, bg))); } else { set_colors(fg, bg = z); napms(1); } } else { if (ranf() <= 0.01) { if (ranf() > 0.6) { attron(A_REVERSE); } else { attroff(A_REVERSE); } napms(1); } } addch((chtype) p); refresh(); ++total_chars; } cleanup(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/key_names.c0000644000175100001440000000635412367217347015576 0ustar tomusers/**************************************************************************** * Copyright (c) 2007-2008,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: key_names.c,v 1.5 2014/08/02 17:24:55 tom Exp $ */ #include #if USE_WIDEC_SUPPORT static void usage(void) { fprintf(stderr, "Usage: key_names [-m] [-s]\n"); ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int n; bool do_setup = FALSE; bool do_meta = FALSE; setlocale(LC_ALL, ""); while ((n = getopt(argc, argv, "ms")) != -1) { switch (n) { case 'm': do_meta = TRUE; break; case 's': do_setup = TRUE; break; default: usage(); /* NOTREACHED */ } } if (do_setup) { /* * Get the terminfo entry into memory, and tell ncurses that we want to * use function keys. That will make it add any user-defined keys that * appear in the terminfo. */ newterm(getenv("TERM"), stderr, stdin); keypad(stdscr, TRUE); if (do_meta) meta(stdscr, TRUE); endwin(); } for (n = -1; n < KEY_MAX + 512; n++) { const char *result = key_name((wchar_t) n); if (result != 0) printf("%d(%5o):%s\n", n, n, result); } ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the wide-ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/test_setupterm.c0000644000175100001440000001310312543642632016673 0ustar tomusers/**************************************************************************** * Copyright (c) 2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey * * $Id: test_setupterm.c,v 1.8 2015/06/28 00:53:46 tom Exp $ * * A simple demo of setupterm/restartterm. */ #include #if HAVE_TIGETSTR static bool a_opt = FALSE; static bool f_opt = FALSE; static bool n_opt = FALSE; static bool r_opt = FALSE; static void test_rc(NCURSES_CONST char *name, int actual_rc, int actual_err) { int expect_rc = -1; int expect_err = -1; if (name == 0) name = getenv("TERM"); if (name == 0) name = "?"; switch (*name) { case 'v': /* vt100 is normal */ case 'd': /* dumb has no special flags */ expect_rc = 0; expect_err = 1; break; case 'l': /* lpr is hardcopy */ expect_err = 1; break; case 'u': /* unknown is generic */ expect_err = 0; break; default: break; } if (n_opt) { expect_rc = -1; expect_err = -1; } printf("%s", ((actual_rc == expect_rc && actual_err == expect_err) ? "OK" : "ERR")); printf(" '%s'", name); if (actual_rc == expect_rc) { printf(" rc=%d", actual_rc); } else { printf(" rc=%d (%d)", actual_rc, expect_rc); } if (actual_err == expect_err) { printf(" err=%d", actual_err); } else { printf(" err=%d (%d)", actual_err, expect_err); } printf("\n"); } static void test_setupterm(NCURSES_CONST char *name) { int rc; int err = -99; if (r_opt) { rc = restartterm(name, 0, f_opt ? NULL : &err); } else { rc = setupterm(name, 0, f_opt ? NULL : &err); } test_rc(name, rc, err); } static void usage(void) { static const char *msg[] = { "Usage: test_setupterm [options] [terminal]", "", "Demonstrate error-checking for setupterm and restartterm.", "", "Options:", " -a automatic test for each success/error code", " -f treat errors as fatal", " -n set environment to disable terminfo database, assuming", " the compiled-in paths for database also fail", " -r test restartterm rather than setupterm", }; unsigned n; for (n = 0; n < SIZEOF(msg); ++n) { fprintf(stderr, "%s\n", msg[n]); } ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int n; while ((n = getopt(argc, argv, "afnr")) != -1) { switch (n) { case 'a': a_opt = TRUE; break; case 'f': f_opt = TRUE; break; case 'n': n_opt = TRUE; break; case 'r': r_opt = TRUE; break; default: usage(); break; } } if (n_opt) { static char none[][25] = { "HOME=/GUI", "TERMINFO=/GUI", "TERMINFO_DIRS=/GUI" }; /* * We can turn this off, but not on again, because ncurses caches the * directory locations. */ printf("** without database\n"); for (n = 0; n < 3; ++n) putenv(none[n]); } else { printf("** with database\n"); } /* * The restartterm relies on an existing screen, so we make one here. */ if (r_opt) { newterm("ansi", stdout, stdin); reset_shell_mode(); } if (a_opt) { static char predef[][9] = {"vt100", "dumb", "lpr", "unknown", "none-such"}; if (optind < argc) { usage(); } for (n = 0; n < 4; ++n) { test_setupterm(predef[n]); } } else { if (optind < argc) { for (n = optind; n < argc; ++n) { test_setupterm(argv[n]); } } else { test_setupterm(NULL); } } ExitProgram(EXIT_SUCCESS); } #else /* !HAVE_TIGETSTR */ int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { printf("This program requires the terminfo functions such as tigetstr\n"); ExitProgram(EXIT_FAILURE); } #endif /* HAVE_TIGETSTR */ ncurses-6.0-20160213/test/dots_mvcur.c0000644000175100001440000001134412221655702015771 0ustar tomusers/**************************************************************************** * Copyright (c) 2007-2009,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey - 2007 * * $Id: dots_mvcur.c,v 1.10 2013/09/28 22:44:18 tom Exp $ * * A simple demo of the terminfo interface, and mvcur. */ #define USE_TINFO #include #if HAVE_SETUPTERM #include #define valid(s) ((s != 0) && s != (char *)-1) static bool interrupted = FALSE; static long total_chars = 0; static time_t started; static TPUTS_PROTO(outc, c) { int rc = c; if (interrupted) { char tmp = (char) c; if (write(STDOUT_FILENO, &tmp, (size_t) 1) == -1) rc = EOF; } else { if (putc(c, stdout) == EOF) rc = EOF; } TPUTS_RETURN(rc); } static bool outs(const char *s) { if (valid(s)) { tputs(s, 1, outc); return TRUE; } return FALSE; } static void cleanup(void) { outs(exit_attribute_mode); if (!outs(orig_colors)) outs(orig_pair); outs(clear_screen); outs(cursor_normal); printf("\n\n%ld total chars, rate %.2f/sec\n", total_chars, ((double) (total_chars) / (double) (time((time_t *) 0) - started))); } static void onsig(int n GCC_UNUSED) { interrupted = TRUE; } static double ranf(void) { long r = (rand() & 077777); return ((double) r / 32768.); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int x0 = 1, y0 = 1; int x, y, z, p; double r; double c; SCREEN *sp; int my_colors; CATCHALL(onsig); srand((unsigned) time(0)); sp = newterm((char *) 0, stdout, stdin); outs(clear_screen); outs(cursor_home); outs(cursor_invisible); my_colors = max_colors; if (my_colors > 1) { if (!valid(set_a_foreground) || !valid(set_a_background) || (!valid(orig_colors) && !valid(orig_pair))) my_colors = -1; } r = (double) (lines - 4); c = (double) (columns - 4); started = time((time_t *) 0); while (!interrupted) { x = (int) (c * ranf()) + 2; y = (int) (r * ranf()) + 2; p = (ranf() > 0.9) ? '*' : ' '; if (mvcur(y0, x0, y, x) != ERR) { x0 = x; y0 = y; } if (my_colors > 0) { z = (int) (ranf() * my_colors); if (ranf() > 0.01) { tputs(tparm2(set_a_foreground, z), 1, outc); } else { tputs(tparm2(set_a_background, z), 1, outc); napms(1); } } else if (valid(exit_attribute_mode) && valid(enter_reverse_mode)) { if (ranf() <= 0.01) { outs((ranf() > 0.6) ? enter_reverse_mode : exit_attribute_mode); napms(1); } } outc(p); ++x0; fflush(stdout); ++total_chars; } cleanup(); endwin(); delscreen(sp); ExitProgram(EXIT_SUCCESS); } #else int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { fprintf(stderr, "This program requires terminfo\n"); exit(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/widechars.h0000644000175100001440000000630512056466202015564 0ustar tomusers/**************************************************************************** * Copyright (c) 2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ #ifndef __WIDECHARS_H #define __WIDECHARS_H 1 #include #if USE_WIDEC_SUPPORT #if defined(__MINGW32__) /* * MinGW has wide-character functions, but they do not work correctly. */ extern int _nc_mbtowc(wchar_t *pwc, const char *s, size_t n); extern int __MINGW_NOTHROW _nc_mbtowc(wchar_t *pwc, const char *s, size_t n); #define mbtowc(pwc,s,n) _nc_mbtowc(pwc,s,n) extern int __MINGW_NOTHROW _nc_mblen(const char *, size_t); #define mblen(s,n) _nc_mblen(s, n) #endif /* __MINGW32__ */ #if HAVE_MBTOWC && HAVE_MBLEN #define reset_mbytes(state) IGNORE_RC(mblen(NULL, 0)), IGNORE_RC(mbtowc(NULL, NULL, 0)) #define count_mbytes(buffer,length,state) mblen(buffer,length) #define check_mbytes(wch,buffer,length,state) \ (int) mbtowc(&wch, buffer, length) #define state_unused #elif HAVE_MBRTOWC && HAVE_MBRLEN #define reset_mbytes(state) init_mb(state) #define count_mbytes(buffer,length,state) mbrlen(buffer,length,&state) #define check_mbytes(wch,buffer,length,state) \ (int) mbrtowc(&wch, buffer, length, &state) #else make an error #endif #else #endif /* USE_WIDEC_SUPPORT */ extern void widechars_stub(void); #endif /* __WIDECHARS_H */ ncurses-6.0-20160213/test/edit_field.c0000644000175100001440000003023012402273330015661 0ustar tomusers/**************************************************************************** * Copyright (c) 2003-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: edit_field.c,v 1.24 2014/09/05 08:39:52 tom Exp $ * * A wrapper for form_driver() which keeps track of the user's editing changes * for each field, and makes the resulting length available as a * null-terminated string in field_buffer(field,1). * * Thomas Dickey - 2003/4/26. */ #include #if USE_LIBFORM #include static struct { int code; int result; const char *help; } commands[] = { { CTRL('A'), REQ_NEXT_CHOICE, "" }, { CTRL('B'), REQ_PREV_WORD, "go to previous word" }, { CTRL('C'), REQ_CLR_EOL, "clear to end of line" }, { CTRL('D'), REQ_DOWN_FIELD, "move downward to field" }, { CTRL('E'), REQ_END_FIELD, "go to end of field" }, { CTRL('F'), REQ_NEXT_PAGE, "go to next page" }, { CTRL('G'), REQ_DEL_WORD, "delete current word" }, { CTRL('H'), REQ_DEL_PREV, "delete previous character" }, { CTRL('I'), REQ_INS_CHAR, "insert character" }, { CTRL('K'), REQ_CLR_EOF, "clear to end of field" }, { CTRL('L'), REQ_LEFT_FIELD, "go to field to left" }, { CTRL('M'), REQ_NEW_LINE, "insert/overlay new line" }, { CTRL('N'), REQ_NEXT_FIELD, "go to next field" }, { CTRL('O'), REQ_INS_LINE, "insert blank line at cursor" }, { CTRL('P'), REQ_PREV_FIELD, "go to previous field" }, { CTRL('Q'), MY_QUIT, "exit form" }, { CTRL('R'), REQ_RIGHT_FIELD, "go to field to right" }, { CTRL('S'), REQ_BEG_FIELD, "go to beginning of field" }, { CTRL('T'), MY_EDT_MODE, "toggle O_EDIT mode, clear field status", }, { CTRL('U'), REQ_UP_FIELD, "move upward to field" }, { CTRL('V'), REQ_DEL_CHAR, "delete character" }, { CTRL('W'), REQ_NEXT_WORD, "go to next word" }, { CTRL('X'), REQ_CLR_FIELD, "clear field" }, { CTRL('Y'), REQ_DEL_LINE, "delete line" }, { CTRL('Z'), REQ_PREV_CHOICE, "" }, { CTRL('['), MY_QUIT, "exit form" }, { CTRL(']'), MY_INS_MODE, "toggle REQ_INS_MODE/REQ_OVL_MODE", }, { KEY_F(1), MY_HELP, "show this screen", }, { KEY_BACKSPACE, REQ_DEL_PREV, "delete previous character" }, { KEY_DOWN, REQ_DOWN_CHAR, "move down 1 character" }, { KEY_END, REQ_LAST_FIELD, "go to last field" }, { KEY_HOME, REQ_FIRST_FIELD, "go to first field" }, { KEY_LEFT, REQ_LEFT_CHAR, "move left 1 character" }, { KEY_LL, REQ_LAST_FIELD, "go to last field" }, { KEY_NEXT, REQ_NEXT_FIELD, "go to next field" }, { KEY_NPAGE, REQ_NEXT_PAGE, "go to next page" }, { KEY_PPAGE, REQ_PREV_PAGE, "go to previous page" }, { KEY_PREVIOUS, REQ_PREV_FIELD, "go to previous field" }, { KEY_RIGHT, REQ_RIGHT_CHAR, "move right 1 character" }, { KEY_UP, REQ_UP_CHAR, "move up 1 character" } }; static WINDOW *old_window; static void begin_popup(void) { doupdate(); old_window = dupwin(curscr); } static void end_popup(void) { touchwin(old_window); wnoutrefresh(old_window); doupdate(); delwin(old_window); } /* * Display a temporary window listing the keystroke-commands we recognize. */ void help_edit_field(void) { int x0 = 4; int y0 = 2; int y1 = 0; int y2 = 0; int wide = COLS - ((x0 + 1) * 2); int high = LINES - ((y0 + 1) * 2); WINDOW *help = newwin(high, wide, y0, x0); WINDOW *data = newpad(2 + SIZEOF(commands), wide - 4); unsigned n; int ch = ERR; begin_popup(); keypad(help, TRUE); keypad(data, TRUE); waddstr(data, "Defined form edit/traversal keys:\n"); for (n = 0; n < SIZEOF(commands); ++n) { const char *name; #ifdef NCURSES_VERSION if ((name = form_request_name(commands[n].result)) == 0) #endif name = commands[n].help; wprintw(data, "%s -- %s\n", keyname(commands[n].code), name != 0 ? name : commands[n].help); } waddstr(data, "Arrow keys move within a field as you would expect."); y2 = getcury(data); do { switch (ch) { case KEY_HOME: y1 = 0; break; case KEY_END: y1 = y2; break; case KEY_PREVIOUS: case KEY_PPAGE: if (y1 > 0) { y1 -= high / 2; if (y1 < 0) y1 = 0; } else { beep(); } break; case KEY_NEXT: case KEY_NPAGE: if (y1 < y2) { y1 += high / 2; if (y1 >= y2) y1 = y2; } else { beep(); } break; case CTRL('P'): case KEY_UP: if (y1 > 0) --y1; else beep(); break; case CTRL('N'): case KEY_DOWN: if (y1 < y2) ++y1; else beep(); break; default: beep(); break; case ERR: break; } werase(help); box(help, 0, 0); wnoutrefresh(help); pnoutrefresh(data, y1, 0, y0 + 1, x0 + 1, high, wide); doupdate(); } while ((ch = wgetch(data)) != ERR && ch != QUIT && ch != ESCAPE); werase(help); wrefresh(help); delwin(help); delwin(data); end_popup(); } static int offset_in_field(FORM * form) { FIELD *field = current_field(form); int currow, curcol; form_getyx(form, currow, curcol); return curcol + currow * field->dcols; } static void inactive_field(FIELD * f) { set_field_back(f, field_attrs(f)->background); } FieldAttrs * field_attrs(FIELD * f) { return (FieldAttrs *) field_userptr(f); } static int buffer_length(FIELD * f) { return field_attrs(f)->row_lengths[0]; } static void set_buffer_length(FIELD * f, int length) { field_attrs(f)->row_lengths[0] = length; } /* * The userptr is used in edit_field.c's inactive_field(), as well as for * keeping track of the actual lengths of lines in a multiline field. */ void init_edit_field(FIELD * f, char *value) { char empty[1]; FieldAttrs *ptr = field_attrs(f); if (ptr == 0) { int rows, cols, frow, fcol, nrow, nbuf; ptr = typeCalloc(FieldAttrs, (size_t) 1); ptr->background = field_back(f); if (field_info(f, &rows, &cols, &frow, &fcol, &nrow, &nbuf) == E_OK) { ptr->row_count = nrow; ptr->row_lengths = typeCalloc(int, (size_t) nrow + 1); } } if (value == 0) { value = empty; *value = '\0'; } set_field_userptr(f, (void *) ptr); set_field_buffer(f, 0, value); /* will be formatted */ set_field_buffer(f, 1, value); /* will be unformatted */ set_buffer_length(f, (int) strlen(value)); } int edit_field(FORM * form, int *result) { int ch = wgetch(form_win(form)); int status; FIELD *before; unsigned n; int length; int before_row; int before_col; int before_off = offset_in_field(form); form_getyx(form, before_row, before_col); before = current_field(form); set_field_back(before, A_NORMAL); if (ch <= KEY_MAX) { set_field_back(before, A_REVERSE); } else if (ch <= MAX_FORM_COMMAND) { inactive_field(before); } *result = ch; for (n = 0; n < SIZEOF(commands); ++n) { if (commands[n].code == ch) { *result = commands[n].result; break; } } status = form_driver(form, *result); if (status == E_OK) { bool modified = TRUE; length = buffer_length(before); if (length < before_off) length = before_off; switch (*result) { case REQ_CLR_EOF: length = before_off; break; case REQ_CLR_EOL: if ((int) (before_row + 1) == (int) (before->rows)) length = before_off; break; case REQ_CLR_FIELD: length = 0; break; case REQ_DEL_CHAR: if (length > before_off) --length; break; case REQ_DEL_PREV: if (length > 0) { if (before_col > 0) { --length; } else if (before_row > 0) { length -= before->cols + before_col; } } break; case REQ_NEW_LINE: length += before->cols; break; #if 0 /* FIXME: finish these */ case REQ_DEL_LINE: /* delete line */ case REQ_DEL_WORD: /* delete word at cursor */ case REQ_INS_CHAR: /* insert blank char at cursor */ case REQ_INS_LINE: /* insert blank line at cursor */ case REQ_INS_MODE: /* begin insert mode */ case REQ_OVL_MODE: /* begin overlay mode */ #endif /* ignore all of the motion commands */ case REQ_SCR_BCHAR: /* FALLTHRU */ case REQ_SCR_BHPAGE: /* FALLTHRU */ case REQ_SCR_BLINE: /* FALLTHRU */ case REQ_SCR_BPAGE: /* FALLTHRU */ case REQ_SCR_FCHAR: /* FALLTHRU */ case REQ_SCR_FHPAGE: /* FALLTHRU */ case REQ_SCR_FLINE: /* FALLTHRU */ case REQ_SCR_FPAGE: /* FALLTHRU */ case REQ_SCR_HBHALF: /* FALLTHRU */ case REQ_SCR_HBLINE: /* FALLTHRU */ case REQ_SCR_HFHALF: /* FALLTHRU */ case REQ_SCR_HFLINE: /* FALLTHRU */ case REQ_BEG_FIELD: /* FALLTHRU */ case REQ_BEG_LINE: /* FALLTHRU */ case REQ_DOWN_CHAR: /* FALLTHRU */ case REQ_DOWN_FIELD: /* FALLTHRU */ case REQ_END_FIELD: /* FALLTHRU */ case REQ_END_LINE: /* FALLTHRU */ case REQ_FIRST_FIELD: /* FALLTHRU */ case REQ_FIRST_PAGE: /* FALLTHRU */ case REQ_LAST_FIELD: /* FALLTHRU */ case REQ_LAST_PAGE: /* FALLTHRU */ case REQ_LEFT_CHAR: /* FALLTHRU */ case REQ_LEFT_FIELD: /* FALLTHRU */ case REQ_NEXT_CHAR: /* FALLTHRU */ case REQ_NEXT_CHOICE: /* FALLTHRU */ case REQ_NEXT_FIELD: /* FALLTHRU */ case REQ_NEXT_LINE: /* FALLTHRU */ case REQ_NEXT_PAGE: /* FALLTHRU */ case REQ_NEXT_WORD: /* FALLTHRU */ case REQ_PREV_CHAR: /* FALLTHRU */ case REQ_PREV_CHOICE: /* FALLTHRU */ case REQ_PREV_FIELD: /* FALLTHRU */ case REQ_PREV_LINE: /* FALLTHRU */ case REQ_PREV_PAGE: /* FALLTHRU */ case REQ_PREV_WORD: /* FALLTHRU */ case REQ_RIGHT_CHAR: /* FALLTHRU */ case REQ_RIGHT_FIELD: /* FALLTHRU */ case REQ_SFIRST_FIELD: /* FALLTHRU */ case REQ_SLAST_FIELD: /* FALLTHRU */ case REQ_SNEXT_FIELD: /* FALLTHRU */ case REQ_SPREV_FIELD: /* FALLTHRU */ case REQ_UP_CHAR: /* FALLTHRU */ case REQ_UP_FIELD: /* FALLTHRU */ case REQ_VALIDATION: /* FALLTHRU */ modified = FALSE; break; default: modified = FALSE; if (ch >= MIN_FORM_COMMAND) { beep(); } else if (isprint(ch)) { modified = TRUE; } break; } /* * If we do not force a re-validation, then field_buffer 0 will * be lagging by one character. */ if (modified && form_driver(form, REQ_VALIDATION) == E_OK && *result < MIN_FORM_COMMAND) ++length; set_buffer_length(before, length); } if (current_field(form) != before) inactive_field(before); return status; } #else extern void no_edit_field(void); void no_edit_field(void) { } #endif ncurses-6.0-20160213/test/movewindow.c0000644000175100001440000004070112141262116015773 0ustar tomusers/**************************************************************************** * Copyright (c) 2006-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: movewindow.c,v 1.39 2013/05/04 19:41:02 tom Exp $ * * Demonstrate move functions for windows and derived windows from the curses * library. * * Author: Thomas E. Dickey */ /* derwin mvderwin subwin mvwin TODO: add command to reset subwindow's origin to coincide with parent. add command to delete subwindow (check if it has subwindows though) */ #include #include #ifdef HAVE_XCURSES #undef derwin #endif #ifdef NCURSES_VERSION #define CONST_FMT const #else #define CONST_FMT /* nothing */ #endif #undef LINE_MAX #define LINE_MIN 2 #define LINE_MAX (LINES - 2) #define COL_MIN 2 #define COL_MAX (COLS - 2) typedef struct { int y, x; } PAIR; typedef struct { WINDOW *parent; /* need this since WINDOW->_parent is not portable */ WINDOW *child; /* the actual value */ } FRAME; static void head_line(CONST_FMT char *fmt,...) GCC_PRINTFLIKE(1, 2); static void tail_line(CONST_FMT char *fmt,...) GCC_PRINTFLIKE(1, 2); static unsigned num_windows; static FRAME *all_windows; static void failed(const char *s) { perror(s); endwin(); ExitProgram(EXIT_FAILURE); } static void message(int lineno, CONST_FMT char *fmt, va_list argp) { int y, x; getyx(stdscr, y, x); move(lineno, 0); clrtoeol(); #ifdef HAVE_XCURSES { char buffer[1024]; vsprintf(buffer, fmt, argp); addstr(buffer); } #else vwprintw(stdscr, fmt, argp); #endif move(y, x); refresh(); } static void head_line(CONST_FMT char *fmt,...) { va_list argp; va_start(argp, fmt); message(0, fmt, argp); va_end(argp); } static void tail_line(CONST_FMT char *fmt,...) { va_list argp; va_start(argp, fmt); message(LINES - 1, fmt, argp); va_end(argp); } /* * Arrow keys move cursor, return location at current on non-arrow key. */ static PAIR * selectcell(WINDOW *parent, WINDOW *child, int uli, int ulj, int lri, int lrj, bool relative, bool * more) { static PAIR res; /* result cell */ int si = lri - uli + 1; /* depth of the select area */ int sj = lrj - ulj + 1; /* width of the select area */ int i = 0, j = 0; /* offsets into the select area */ res.y = uli; res.x = ulj; if (child != 0) { if (relative) { getparyx(child, i, j); } else { getbegyx(child, i, j); i -= uli + getbegy(parent); j -= ulj + getbegx(parent); } } if (more) *more = FALSE; for (;;) { bool moved = FALSE; tail_line("Upper left [%2d,%2d] Lower right [%2d,%2d] -> %d,%d -> %d,%d", uli, ulj, lri, lrj, i, j, uli + i, ulj + j); wmove(parent, uli + i, ulj + j); switch (wgetch(parent)) { case KEY_UP: i += si - 1; moved = TRUE; break; case KEY_DOWN: i++; moved = TRUE; break; case KEY_LEFT: j += sj - 1; moved = TRUE; break; case KEY_RIGHT: j++; moved = TRUE; break; case QUIT: case ESCAPE: return ((PAIR *) 0); #ifdef NCURSES_MOUSE_VERSION case KEY_MOUSE: { MEVENT event; getmouse(&event); if (event.y > uli && event.x > ulj) { if (parent != stdscr) { i = event.y - getbegy(parent) - uli; j = event.x - getbegx(parent) - ulj; } else { i = event.y - uli; j = event.x - ulj; } } else { beep(); break; } } /* FALLTHRU */ #endif default: res.y = uli + i; res.x = ulj + j; return (&res); } if (si <= 0) i = 0; else i %= si; if (sj <= 0) j = 0; else j %= sj; /* * If the caller can handle continuous movement, return the result. */ if (moved && more) { *more = TRUE; res.y = uli + i; res.x = ulj + j; return (&res); } } } /* * Ask user for a window definition. */ static bool getwindow(WINDOW *parent, PAIR * ul, PAIR * lr) { int min_col = (parent == stdscr) ? COL_MIN : 0; int max_col = (parent == stdscr) ? COL_MAX : getmaxx(parent); int min_line = (parent == stdscr) ? LINE_MIN : 0; int max_line = (parent == stdscr) ? LINE_MAX : getmaxy(parent); PAIR *tmp; bool result = FALSE; head_line("Use arrows to move cursor, anything else to mark corner 1"); if ((tmp = selectcell(parent, 0, min_line, min_col, max_line, max_col, FALSE, (bool *) 0)) != 0) { *ul = *tmp; MvWAddCh(parent, ul->y, ul->x, '*'); head_line("Use arrows to move cursor, anything else to mark corner 2"); if ((tmp = selectcell(parent, 0, ul->y, ul->x, max_line, max_col, FALSE, (bool *) 0)) != 0) { *lr = *tmp; MvWAddCh(parent, lr->y, lr->x, '*'); wmove(parent, lr->y, lr->x); wsyncdown(parent); wrefresh(parent); result = (lr->y != ul->y && lr->x != ul->x); } } head_line("done"); return result; } /* * Draw a box inside the given window. */ static void box_inside(WINDOW *win) { int y0, x0; int y1, x1; getyx(win, y0, x0); getmaxyx(win, y1, x1); MvWHLine(win, 0, 0, ACS_HLINE, x1); MvWHLine(win, y1 - 1, 0, ACS_HLINE, x1); MvWVLine(win, 0, 0, ACS_VLINE, y1); MvWVLine(win, 0, x1 - 1, ACS_VLINE, y1); MvWAddCh(win, 0, 0, ACS_ULCORNER); MvWAddCh(win, y1 - 1, 0, ACS_LLCORNER); MvWAddCh(win, 0, x1 - 1, ACS_URCORNER); MvWAddCh(win, y1 - 1, x1 - 1, ACS_LRCORNER); wsyncdown(win); wmove(win, y0, x0); wrefresh(win); } /* * Add a window to our list. */ static void add_window(WINDOW *parent, WINDOW *child) { static unsigned have = 0; unsigned need = ((num_windows + 1) | 31) + 1; keypad(child, TRUE); if (need > have) { all_windows = typeRealloc(FRAME, need, all_windows); if (!all_windows) failed("add_window"); } all_windows[num_windows].parent = parent; all_windows[num_windows].child = child; num_windows++; } static int window2num(WINDOW *win) { int n; int result = -1; for (n = 0; n < (int) num_windows; ++n) { if (win == all_windows[n].child) { result = n; break; } } return result; } static WINDOW * parent_of(WINDOW *win) { WINDOW *result = 0; int n = window2num(win); if (n >= 0) result = all_windows[n].parent; return result; } static void repaint_one(WINDOW *win) { touchwin(win); wnoutrefresh(win); } static void refresh_all(WINDOW *win) { unsigned n; for (n = 0; n < num_windows; ++n) { if (all_windows[n].child != win) { repaint_one(all_windows[n].child); } } repaint_one(win); doupdate(); } static WINDOW * next_window(WINDOW *win) { WINDOW *result = win; int n = window2num(win); if (n++ >= 0) { result = all_windows[(unsigned) n % num_windows].child; wmove(result, 0, 0); wrefresh(result); } return result; } static WINDOW * prev_window(WINDOW *win) { WINDOW *result = win; int n = window2num(win); if (n-- >= 0) { if (n < 0) n = (int) (num_windows - 1); result = all_windows[(unsigned) n % num_windows].child; wmove(result, 0, 0); wrefresh(result); } return result; } static void recur_move_window(WINDOW *parent, int dy, int dx) { unsigned n; for (n = 0; n < num_windows; ++n) { if (all_windows[n].parent == parent) { mvwin(all_windows[n].child, dy, dx); recur_move_window(all_windows[n].child, dy, dx); } } } /* * test mvwin(). */ static bool move_window(WINDOW *win, bool recur) { WINDOW *parent = parent_of(win); bool result = FALSE; if (parent != 0) { bool top = (parent == stdscr); int min_col = top ? COL_MIN : 0; int max_col = top ? COL_MAX : getmaxx(parent); int min_line = top ? LINE_MIN : 0; int max_line = top ? LINE_MAX : getmaxy(parent); PAIR *tmp; bool more; head_line("Select new position for %swindow", top ? "" : "sub"); while ((tmp = selectcell(parent, win, min_line, min_col, max_line, max_col, FALSE, &more)) != 0) { int y0, x0; getbegyx(parent, y0, x0); /* * Moving a subwindow has the effect of moving a viewport around * the screen. The parent window retains the contents of the * subwindow in the original location, but the viewport will show * the contents (again) at the new location. So it will look odd * when testing. */ if (mvwin(win, y0 + tmp->y, x0 + tmp->x) != ERR) { if (recur) { recur_move_window(win, tmp->y, tmp->x); } refresh_all(win); doupdate(); result = TRUE; } else { result = FALSE; } if (!more) break; } } head_line("done"); return result; } static void show_derwin(WINDOW *win) { int pary, parx, maxy, maxx; getmaxyx(win, maxy, maxx); getparyx(win, pary, parx); head_line("Select new position for derived window at %d,%d (%d,%d)", pary, parx, maxy, maxx); } /* * test mvderwin(). */ static bool move_derwin(WINDOW *win) { WINDOW *parent = parent_of(win); bool result = FALSE; if (parent != 0) { bool top = (parent == stdscr); int min_col = top ? COL_MIN : 0; int max_col = top ? COL_MAX : getmaxx(parent); int min_line = top ? LINE_MIN : 0; int max_line = top ? LINE_MAX : getmaxy(parent); PAIR *tmp; bool more; show_derwin(win); while ((tmp = selectcell(parent, win, min_line, min_col, max_line, max_col, TRUE, &more)) != 0) { if (mvderwin(win, tmp->y, tmp->x) != ERR) { refresh_all(win); doupdate(); repaint_one(win); doupdate(); result = TRUE; show_derwin(win); } else { flash(); } if (!more) break; } } head_line("done"); return result; } static void fill_window(WINDOW *win, chtype ch) { int y, x; int y0, x0; int y1, x1; getyx(win, y0, x0); getmaxyx(win, y1, x1); for (y = 0; y < y1; ++y) { for (x = 0; x < x1; ++x) { MvWAddCh(win, y, x, ch); } } wsyncdown(win); wmove(win, y0, x0); wrefresh(win); } static void fill_with_pattern(WINDOW *win) { int y, x; int y0, x0; int y1, x1; int ch = 'a'; getyx(win, y0, x0); getmaxyx(win, y1, x1); for (y = 0; y < y1; ++y) { for (x = 0; x < x1; ++x) { MvWAddCh(win, y, x, (chtype) ch); if (++ch > 'z') ch = 'a'; } } wsyncdown(win); wmove(win, y0, x0); wrefresh(win); } #define lines_of(ul,lr) (lr.y - ul.y + 1) #define cols_of(ul,lr) (lr.x - ul.x + 1) #define pair_of(ul) ul.y, ul.x static WINDOW * create_my_window(WINDOW *current) { PAIR ul, lr; WINDOW *result = 0; if (getwindow(stdscr, &ul, &lr)) { result = newwin(lines_of(ul, lr), cols_of(ul, lr), pair_of(ul)); if (result != 0) { fill_window(result, 'c'); add_window(stdscr, result); } } if (result == 0) result = current; return result; } static WINDOW * create_my_derwin(WINDOW *parent) { PAIR ul, lr; WINDOW *result = 0; if (getwindow(parent, &ul, &lr)) { result = derwin(parent, lines_of(ul, lr), cols_of(ul, lr), pair_of(ul)); if (result != 0) { fill_window(result, 'd'); add_window(parent, result); } } if (result == 0) result = parent; return result; } static WINDOW * create_my_subwin(WINDOW *parent) { PAIR ul, lr; WINDOW *result = 0; if (getwindow(parent, &ul, &lr)) { result = subwin(parent, lines_of(ul, lr), cols_of(ul, lr), ul.y + getbegy(parent), ul.x + getbegx(parent)); if (result != 0) { fill_window(result, 's'); add_window(parent, result); } } if (result == 0) result = parent; return result; } static void show_help(WINDOW *current) { /* *INDENT-OFF* */ static struct { int key; CONST_FMT char * msg; } help[] = { { '?', "Show this screen" }, { 'b', "Draw a box inside the current window" }, { 'c', "Create a new window" }, { 'd', "Create a new derived window" }, { 'D', "Move derived window (moves viewport)" }, { 'f', "Fill the current window with the next character" }, { 'F', "Fill the current window with a pattern" }, { 'm', "Move the current window" }, { 'M', "Move the current window (and its children)" }, { 'q', "Quit" }, { 's', "Create a new subwindow" }, { CTRL('L'), "Repaint all windows, doing current one last" }, { CTRL('N'), "Cursor to next window" }, { CTRL('P'), "Cursor to previous window" }, }; /* *INDENT-ON* */ WINDOW *mywin = newwin(LINES, COLS, 0, 0); int row; for (row = 0; row < LINES - 2 && row < (int) SIZEOF(help); ++row) { wmove(mywin, row + 1, 1); wprintw(mywin, "%s", keyname(help[row].key)); wmove(mywin, row + 1, 20); wprintw(mywin, "%s", help[row].msg); } box_inside(mywin); wmove(mywin, 1, 1); wgetch(mywin); delwin(mywin); refresh_all(current); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { WINDOW *current_win; int ch; bool done = FALSE; initscr(); cbreak(); noecho(); nonl(); intrflush(stdscr, FALSE); add_window(0, current_win = stdscr); #ifdef NCURSES_MOUSE_VERSION (void) mousemask(BUTTON1_CLICKED, (mmask_t *) NULL); #endif /* NCURSES_MOUSE_VERSION */ while (!done && (ch = wgetch(current_win)) != ERR) { int y, x; getyx(current_win, y, x); switch (ch) { case '?': show_help(current_win); break; case 'b': box_inside(current_win); break; case 'c': current_win = create_my_window(current_win); break; case 'd': current_win = create_my_derwin(current_win); break; case 'D': if (!move_derwin(current_win)) { tail_line("error"); continue; } break; case 'f': fill_window(current_win, (chtype) wgetch(current_win)); break; case 'F': fill_with_pattern(current_win); break; case 'm': case 'M': if (!move_window(current_win, (ch == 'M'))) { tail_line("error"); continue; } break; case 'q': done = TRUE; break; case 's': current_win = create_my_subwin(current_win); break; case CTRL('L'): refresh_all(current_win); break; case CTRL('N'): current_win = next_window(current_win); break; case CTRL('P'): current_win = prev_window(current_win); break; #if 0 /* want to allow cursor to move around the current window too */ /* want to test the resizing of windows and subwindows too */ /* want to allow deleting a window also */ #endif default: wmove(current_win, y, x); tail_line("unrecognized key (use '?' for help)"); beep(); continue; } tail_line("size [%d,%d] begin [%d,%d] parent [%d,%d]", getmaxy(current_win), getmaxx(current_win), getbegy(current_win), getbegx(current_win), getpary(current_win), getparx(current_win)); wmove(current_win, 0, 0); } endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/demo_forms.c0000644000175100001440000003613612415625150015743 0ustar tomusers/**************************************************************************** * Copyright (c) 2003-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: demo_forms.c,v 1.50 2014/10/10 00:38:00 tom Exp $ * * Demonstrate a variety of functions from the form library. * Thomas Dickey - 2003/4/26 */ /* TYPE_ENUM - TYPE_REGEXP - dup_field - field_init - field_just - field_term - form_init - form_opts - form_opts_off - form_opts_on - form_request_by_name - form_term - form_userptr - free_fieldtype - link_field - link_fieldtype - move_field - new_page - pos_form_cursor - set_field_init - set_field_term - set_fieldtype_arg - set_fieldtype_choice - set_form_fields - set_form_init - set_form_opts - set_form_page - set_form_term - set_form_userptr - set_max_field - */ #include #if USE_LIBFORM #include typedef struct { char *name; char *value; } MY_DATA; static MY_DATA *my_data; static int d_option = 0; static int j_value = 0; static int m_value = 0; static int o_value = 0; static char *t_value = 0; static void failed(const char *s) { perror(s); ExitProgram(EXIT_FAILURE); } static void chomp(char *value) { size_t have = strlen(value); while (have != 0 && (value[have - 1] == '\n' || value[have - 1] == '\r')) { value[--have] = '\0'; } } static int trimmed(const char *value) { int result = (int) strlen(value); while (result > 0 && isspace(UChar(value[result - 1]))) { --result; } return result; } static char * get_data(const char *name) { char *result = t_value; if (my_data != 0) { int n; for (n = 0; my_data[n].name != 0; ++n) { if (!strcmp(name, my_data[n].name)) { result = my_data[n].value; break; } } } return result; } /* * Read (possibly) multi-line data with name+value pairs. */ static void read_data(const char *filename) { FILE *fp = fopen(filename, "r"); if (fp != 0) { char buffer[BUFSIZ]; char *colon; int more = 0; int item = 0; my_data = typeCalloc(MY_DATA, (size_t) 100); /* FIXME */ while (fgets(buffer, sizeof(buffer), fp) != 0) { chomp(buffer); if (more) { if (strcmp(buffer, ".")) { char *prior = my_data[more - 1].value; size_t need = strlen(buffer) + 2 + strlen(prior); char *value = typeRealloc(char, need, prior); if (value == 0) failed("realloc"); strcat(value, "\n"); strcat(value, buffer); my_data[more - 1].value = value; } else { more = 0; } } else if (*buffer == '#') { continue; } else if ((colon = strchr(buffer, ':')) != 0) { char *name; char *value; *colon++ = '\0'; name = strdup(buffer); value = strdup(colon); if (name == 0 || value == 0) failed("strdup"); my_data[item].name = name; my_data[item].value = value; more = ++item; } else { failed("expected a colon"); } } fclose(fp); } else { failed(filename); } } static FIELD * make_label(const char *label, int frow, int fcol) { FIELD *f = new_field(1, (int) strlen(label), frow, fcol, 0, 0); if (f) { set_field_buffer(f, 0, label); set_field_opts(f, (int) ((unsigned) field_opts(f) & ~O_ACTIVE)); } return (f); } /* * Define each field with an extra one, for reflecting "actual" text. */ static FIELD * make_field(const char *label, int frow, int fcol, int rows, int cols) { FIELD *f = new_field(rows, cols, frow, fcol, o_value, 1); if (f) { set_field_back(f, A_UNDERLINE); /* * If -j and -d options are combined, -j loses. It is documented in * "Character User Interface Programming", page 12-15 that setting * O_STATIC off makes the form library ignore justification. */ set_field_just(f, j_value); if (d_option) { if (has_colors()) { set_field_fore(f, (chtype) COLOR_PAIR(2)); set_field_back(f, (A_UNDERLINE | (chtype) COLOR_PAIR(3))); } else { set_field_fore(f, A_BOLD); } /* * The field_opts_off() call dumps core with Solaris curses, * but that is a known bug in Solaris' form library -TD */ field_opts_off(f, O_STATIC); set_max_field(f, m_value); } init_edit_field(f, get_data(label)); } return (f); } static void display_form(FORM * f) { WINDOW *w; int rows, cols; scale_form(f, &rows, &cols); /* * Put the form at the upper-left corner of the display, with just a box * around it. */ if ((w = newwin(rows + 2, cols + 4, 0, 0)) != (WINDOW *) 0) { set_form_win(f, w); set_form_sub(f, derwin(w, rows, cols, 1, 2)); box(w, 0, 0); keypad(w, TRUE); if (post_form(f) != E_OK) wrefresh(w); } } static void erase_form(FORM * f) { WINDOW *w = form_win(f); WINDOW *s = form_sub(f); unpost_form(f); werase(w); wrefresh(w); delwin(s); delwin(w); } static void show_insert_mode(bool insert_mode) { MvAddStr(5, 57, (insert_mode ? "form_status: insert " : "form_status: overlay")); } #define O_SELECTABLE (O_ACTIVE | O_VISIBLE) static FIELD * another_field(FORM * form, FIELD * field) { FIELD **f = form_fields(form); FIELD *result = 0; int n; for (n = 0; f[n] != 0; ++n) { if (f[n] != field) { result = f[n]; field_opts_on(result, O_SELECTABLE); break; } } return result; } static int my_form_driver(FORM * form, int c) { static bool insert_mode = TRUE; FIELD *field; switch (c) { case MY_QUIT: if (form_driver(form, REQ_VALIDATION) == E_OK) return (TRUE); break; case MY_HELP: help_edit_field(); break; case MY_EDT_MODE: if ((field = current_field(form)) != 0) { set_current_field(form, another_field(form, field)); if ((unsigned) field_opts(field) & O_EDIT) { field_opts_off(field, O_EDIT); set_field_status(field, 0); } else { field_opts_on(field, O_EDIT); } set_current_field(form, field); } break; case MY_INS_MODE: /* there should be a form_status() function, but there is none */ if (!insert_mode) { if (form_driver(form, REQ_INS_MODE) == E_OK) { insert_mode = TRUE; } } else { if (form_driver(form, REQ_OVL_MODE) == E_OK) { insert_mode = FALSE; } } show_insert_mode(insert_mode); refresh(); break; default: beep(); break; } return (FALSE); } static void show_current_field(WINDOW *win, FORM * form) { FIELD *field; FIELDTYPE *type; char *buffer; int nbuf; int field_rows, field_cols, field_max; int currow, curcol; if (has_colors()) { wbkgd(win, (chtype) COLOR_PAIR(1)); } werase(win); form_getyx(form, currow, curcol); wprintw(win, "Cursor: %d,%d", currow, curcol); if (data_ahead(form)) waddstr(win, " ahead"); if (data_behind(form)) waddstr(win, " behind"); waddch(win, '\n'); if ((field = current_field(form)) != 0) { wprintw(win, "Page %d%s, Field %d/%d%s:", form_page(form), new_page(field) ? "*" : "", field_index(field), field_count(form), field_arg(field) ? "(arg)" : ""); if ((type = field_type(field)) != 0) { if (type == TYPE_ALNUM) waddstr(win, "ALNUM"); else if (type == TYPE_ALPHA) waddstr(win, "ALPHA"); else if (type == TYPE_ENUM) waddstr(win, "ENUM"); else if (type == TYPE_INTEGER) waddstr(win, "INTEGER"); #ifdef NCURSES_VERSION else if (type == TYPE_IPV4) waddstr(win, "IPV4"); #endif else if (type == TYPE_NUMERIC) waddstr(win, "NUMERIC"); else if (type == TYPE_REGEXP) waddstr(win, "REGEXP"); else waddstr(win, "other"); } if ((unsigned) field_opts(field) & O_EDIT) waddstr(win, " editable"); else waddstr(win, " readonly"); if (field_status(field)) waddstr(win, " modified"); if (dynamic_field_info(field, &field_rows, &field_cols, &field_max) != ERR) { wprintw(win, " size %dx%d (max %d)", field_rows, field_cols, field_max); } waddch(win, ' '); (void) wattrset(win, AttrArg(field_fore(field), 0)); waddstr(win, "fore"); wattroff(win, (int) field_fore(field)); waddch(win, '/'); (void) wattrset(win, AttrArg(field_back(field), 0)); waddstr(win, "back"); wattroff(win, (int) field_back(field)); wprintw(win, ", pad '%c'", field_pad(field)); waddstr(win, "\n"); for (nbuf = 0; nbuf <= 2; ++nbuf) { if ((buffer = field_buffer(field, nbuf)) != 0) { wprintw(win, "buffer %d:", nbuf); (void) wattrset(win, A_REVERSE); if (nbuf) { waddnstr(win, buffer, trimmed(buffer)); } else { waddstr(win, buffer); } wattroff(win, A_REVERSE); waddstr(win, "\n"); } } } wrefresh(win); } static void demo_forms(void) { WINDOW *w; FORM *form; FIELD *f[100]; /* will memset to zero */ int finished = 0, c; unsigned n = 0; int pg; WINDOW *also; const char *fname; #ifdef NCURSES_MOUSE_VERSION mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0); #endif help_edit_field(); MvAddStr(4, 57, "Forms Entry Test"); show_insert_mode(TRUE); refresh(); /* describe the form */ memset(f, 0, sizeof(f)); for (pg = 0; pg < 4; ++pg) { char label[80]; sprintf(label, "Sample Form Page %d", pg + 1); f[n++] = make_label(label, 0, 15); set_new_page(f[n - 1], TRUE); switch (pg) { default: fname = "Last Name"; f[n++] = make_label(fname, 2, 0); f[n++] = make_field(fname, 3, 0, 1, 18); set_field_type(f[n - 1], TYPE_ALPHA, 1); fname = "First Name"; f[n++] = make_label(fname, 2, 20); f[n++] = make_field(fname, 3, 20, 1, 12); set_field_type(f[n - 1], TYPE_ALPHA, 1); fname = "Middle Name"; f[n++] = make_label(fname, 2, 34); f[n++] = make_field(fname, 3, 34, 1, 12); set_field_type(f[n - 1], TYPE_ALPHA, 1); break; case 1: fname = "Last Name"; f[n++] = make_label(fname, 2, 0); f[n++] = make_field(fname, 3, 0, 1, 18); set_field_type(f[n - 1], TYPE_ALPHA, 1); fname = "First Name"; f[n++] = make_label(fname, 2, 20); f[n++] = make_field(fname, 3, 20, 1, 12); set_field_type(f[n - 1], TYPE_ALPHA, 1); fname = "MI"; f[n++] = make_label(fname, 2, 34); f[n++] = make_field(fname, 3, 34, 1, 1); set_field_pad(f[n - 1], '?'); set_field_type(f[n - 1], TYPE_ALPHA, 1); break; case 2: fname = "Host Name"; f[n++] = make_label(fname, 2, 0); f[n++] = make_field(fname, 3, 0, 1, 24); set_field_type(f[n - 1], TYPE_ALNUM, 1); #ifdef NCURSES_VERSION fname = "IP Address"; f[n++] = make_label(fname, 2, 26); f[n++] = make_field(fname, 3, 26, 1, 16); set_field_type(f[n - 1], TYPE_IPV4, 1); #endif break; case 3: fname = "Four digits"; f[n++] = make_label(fname, 2, 0); f[n++] = make_field(fname, 3, 0, 1, 18); set_field_type(f[n - 1], TYPE_INTEGER, 4, 0, 0); fname = "Numeric"; f[n++] = make_label(fname, 2, 20); f[n++] = make_field(fname, 3, 20, 1, 12); set_field_type(f[n - 1], TYPE_NUMERIC, 3, -10000.0, 100000000.0); break; } fname = "Comments"; f[n++] = make_label(fname, 5, 0); f[n++] = make_field(fname, 6, 0, 4, 46); init_edit_field(f[n - 1], get_data(fname)); } f[n] = (FIELD *) 0; if ((form = new_form(f)) != 0) { display_form(form); w = form_win(form); also = newwin(getmaxy(stdscr) - getmaxy(w), COLS, getmaxy(w), 0); show_current_field(also, form); while (!finished) { switch (edit_field(form, &c)) { case E_OK: break; case E_UNKNOWN_COMMAND: finished = my_form_driver(form, c); break; default: beep(); break; } show_current_field(also, form); } erase_form(form); free_form(form); } for (c = 0; f[c] != 0; c++) { void *ptr = field_userptr(f[c]); free(ptr); free_field(f[c]); } noraw(); nl(); #ifdef NCURSES_MOUSE_VERSION mousemask(0, (mmask_t *) 0); #endif } static void usage(void) { static const char *tbl[] = { "Usage: demo_forms [options] [data file]" ,"" ," -d make fields dynamic" ," -j value justify (1=left, 2=center, 3=right)" ," -m value set maximum size of dynamic fields" ," -o value specify number of offscreen rows in new_field()" ," -t value specify text to fill fields initially" }; unsigned int j; for (j = 0; j < SIZEOF(tbl); ++j) fprintf(stderr, "%s\n", tbl[j]); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { int ch; setlocale(LC_ALL, ""); while ((ch = getopt(argc, argv, "dj:m:o:t:")) != -1) { switch (ch) { case 'd': d_option = TRUE; break; case 'j': j_value = atoi(optarg); if (j_value < NO_JUSTIFICATION || j_value > JUSTIFY_RIGHT) usage(); break; case 'm': m_value = atoi(optarg); break; case 'o': o_value = atoi(optarg); break; case 't': t_value = optarg; break; default: usage(); } } while (optind < argc) { read_data(argv[optind++]); } initscr(); cbreak(); noecho(); raw(); nonl(); /* lets us read ^M's */ intrflush(stdscr, FALSE); keypad(stdscr, TRUE); if (has_colors()) { start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); init_pair(2, COLOR_GREEN, COLOR_BLACK); init_pair(3, COLOR_CYAN, COLOR_BLACK); bkgd((chtype) COLOR_PAIR(1)); refresh(); } demo_forms(); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the curses form library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/testcurs.c0000644000175100001440000004135112546073036015465 0ustar tomusers/* * This is a test program for the PDCurses screen package for IBM PC type * machines. * * This program was written by John Burnell (johnb@kea.am.dsir.govt.nz) * wrs(5/28/93) -- modified to be consistent (perform identically) with either * PDCurses or under Unix System V, R4 * * $Id: testcurs.c,v 1.50 2015/07/05 00:11:10 tom Exp $ */ #include #if defined(XCURSES) char *XCursesProgramName = "testcurs"; #endif static int initTest(WINDOW **); static void display_menu(int, int); static void inputTest(WINDOW *); static void introTest(WINDOW *); static void outputTest(WINDOW *); static void padTest(WINDOW *); static void scrollTest(WINDOW *); #if defined(PDCURSES) && !defined(XCURSES) static void resizeTest(WINDOW *); #endif struct commands { NCURSES_CONST char *text; void (*function) (WINDOW *); }; typedef struct commands COMMAND; static const COMMAND command[] = { {"General Test", introTest}, {"Pad Test", padTest}, #if defined(PDCURSES) && !defined(XCURSES) {"Resize Test", resizeTest}, #endif {"Scroll Test", scrollTest}, {"Input Test", inputTest}, {"Output Test", outputTest} }; #define MAX_OPTIONS (int) SIZEOF(command) static int width, height; int main( int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { WINDOW *win; int key; int old_option = (-1); int new_option = 0; bool quit = FALSE; int n; setlocale(LC_ALL, ""); #ifdef PDCDEBUG PDC_debug("testcurs started\n"); #endif if (!initTest(&win)) ExitProgram(EXIT_FAILURE); erase(); display_menu(old_option, new_option); for (;;) { #ifdef A_COLOR if (has_colors()) { init_pair(1, COLOR_WHITE, COLOR_BLUE); wbkgd(win, (chtype) COLOR_PAIR(1)); } else wbkgd(win, A_REVERSE); #else wbkgd(win, A_REVERSE); #endif werase(win); noecho(); keypad(stdscr, TRUE); raw(); key = getch(); if (key < KEY_MIN && key > 0 && isalpha(key)) { if (islower(key)) key = toupper(key); for (n = 0; n < MAX_OPTIONS; ++n) { if (key == command[n].text[0]) { display_menu(old_option, new_option = n); key = ' '; break; } } } switch (key) { case 10: case 13: case KEY_ENTER: erase(); refresh(); (*command[new_option].function) (win); erase(); display_menu(old_option, new_option); break; case KEY_UP: new_option = ((new_option == 0) ? new_option : new_option - 1); display_menu(old_option, new_option); break; case KEY_DOWN: new_option = ((new_option == (MAX_OPTIONS - 1)) ? new_option : new_option + 1); display_menu(old_option, new_option); break; case 'Q': case 'q': quit = TRUE; break; default: beep(); break; case ' ': break; } if (quit == TRUE) break; } delwin(win); endwin(); #ifdef XCURSES XCursesExit(); #endif ExitProgram(EXIT_SUCCESS); } static void Continue(WINDOW *win) { int y1 = getmaxy(win); int x1 = getmaxx(win); int y0 = y1 < 10 ? y1 : 10; int x0 = 1; chtype save; save = mvwinch(win, y0, x1 - 1); MvWAddStr(win, y0, x0, " Press any key to continue"); wclrtoeol(win); getyx(win, y0, x0); MvWAddCh(win, y0, x1 - 1, save); wmove(win, y0, x0); raw(); wgetch(win); } static int initTest(WINDOW **win) { #ifdef PDCDEBUG PDC_debug("initTest called\n"); #endif #ifdef TRACE trace(TRACE_MAXIMUM); #endif initscr(); #ifdef PDCDEBUG PDC_debug("after initscr()\n"); #endif #ifdef A_COLOR if (has_colors()) start_color(); #endif width = 60; height = 13; /* Create a drawing window */ *win = newwin(height, width, (LINES - height) / 2, (COLS - width) / 2); if (*win == NULL) { endwin(); return 0; } return 1; } static void introTest(WINDOW *win) { wmove(win, height / 2 - 5, width / 2); wvline(win, ACS_VLINE, 10); wmove(win, height / 2, width / 2 - 10); whline(win, ACS_HLINE, 20); Continue(win); beep(); werase(win); box(win, ACS_VLINE, ACS_HLINE); wrefresh(win); cbreak(); MvWAddStr(win, 1, 1, "You should have rectangle in the middle of the screen"); MvWAddStr(win, 2, 1, "You should have heard a beep"); Continue(win); return; } static void scrollTest(WINDOW *win) { int i; int half; int OldY; NCURSES_CONST char *Message = "The window will now scroll slowly"; wclear(win); OldY = getmaxy(win); half = OldY / 2; MvWAddStr(win, OldY - 2, 1, Message); wrefresh(win); scrollok(win, TRUE); for (i = 1; i <= OldY; i++) { napms(600); scroll(win); wrefresh(win); } werase(win); for (i = 1; i < OldY; i++) { MvWPrintw(win, i, 1, "Line %d", i); } MvWPrintw(win, OldY - 2, 1, "The top of the window will scroll"); wmove(win, 1, 1); wsetscrreg(win, 0, half - 1); box(win, ACS_VLINE, ACS_HLINE); wrefresh(win); for (i = 1; i <= half; i++) { napms(600); scroll(win); box(win, ACS_VLINE, ACS_HLINE); wrefresh(win); } werase(win); for (i = 1; i < OldY; i++) { MvWPrintw(win, i, 1, "Line %d", i); } MvWPrintw(win, 1, 1, "The bottom of the window will scroll"); wmove(win, OldY - 2, 1); wsetscrreg(win, half, --OldY); box(win, ACS_VLINE, ACS_HLINE); wrefresh(win); for (i = half; i <= OldY; i++) { napms(600); wscrl(win, -1); box(win, ACS_VLINE, ACS_HLINE); wrefresh(win); } wsetscrreg(win, 0, OldY); } static void inputTest(WINDOW *win) { int answered; int repeat; int w, h, bx, by, sw, sh, i, c, num; char buffer[80]; WINDOW *subWin; wclear(win); getmaxyx(win, h, w); getbegyx(win, by, bx); sw = w / 3; sh = h / 3; if ((subWin = subwin(win, sh, sw, by + h - sh - 2, bx + w - sw - 2)) == NULL) return; #ifdef A_COLOR if (has_colors()) { init_pair(2, COLOR_WHITE, COLOR_RED); wbkgd(subWin, (chtype) COLOR_PAIR(2) | A_BOLD); } else wbkgd(subWin, A_BOLD); #else wbkgd(subWin, A_BOLD); #endif box(subWin, ACS_VLINE, ACS_HLINE); wrefresh(win); nocbreak(); MvWAddStr(win, 2, 1, "Press some keys for 5 seconds"); MvWAddStr(win, 1, 1, "Pressing ^C should do nothing"); wrefresh(win); werase(subWin); box(subWin, ACS_VLINE, ACS_HLINE); for (i = 0; i < 5; i++) { MvWPrintw(subWin, 1, 1, "Time = %d", i); wrefresh(subWin); napms(1000); flushinp(); } delwin(subWin); werase(win); flash(); wrefresh(win); napms(500); MvWAddStr(win, 2, 1, "Press a key, followed by ENTER"); wmove(win, 9, 10); wrefresh(win); echo(); noraw(); wgetch(win); flushinp(); wmove(win, 9, 10); wdelch(win); MvWAddStr(win, 4, 1, "The character should now have been deleted"); Continue(win); wclear(win); MvWAddStr(win, 1, 1, "Press keys (or mouse buttons) to show their names"); MvWAddStr(win, 2, 1, "Press spacebar to finish"); wrefresh(win); keypad(win, TRUE); raw(); noecho(); #if HAVE_TYPEAHEAD typeahead(-1); #endif #ifdef NCURSES_MOUSE_VERSION mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0); #endif #if defined(PDCURSES) mouse_set(ALL_MOUSE_EVENTS); #endif for (;;) { wmove(win, 3, 5); c = wgetch(win); wclrtobot(win); if (c >= KEY_MIN) wprintw(win, "Key Pressed: %s", keyname(c)); else if (isprint(c)) wprintw(win, "Key Pressed: %c", c); else wprintw(win, "Key Pressed: %s", unctrl(UChar(c))); #ifdef KEY_MOUSE if (c == KEY_MOUSE) { #if defined(NCURSES_MOUSE_VERSION) #define ButtonChanged(n) ((event.bstate) & NCURSES_MOUSE_MASK(1, 037)) #define ButtonPressed(n) ((event.bstate) & NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)) #define ButtonDouble(n) ((event.bstate) & NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)) #define ButtonTriple(n) ((event.bstate) & NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)) #define ButtonRelease(n) ((event.bstate) & NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)) MEVENT event; int button = 0; getmouse(&event); if (ButtonChanged(1)) button = 1; else if (ButtonChanged(2)) button = 2; else if (ButtonChanged(3)) button = 3; else button = 0; wmove(win, 4, 18); wprintw(win, "Button %d: ", button); if (ButtonPressed(button)) wprintw(win, "pressed: "); else if (ButtonDouble(button)) wprintw(win, "double: "); else if (ButtonTriple(button)) wprintw(win, "triple: "); else wprintw(win, "released: "); wprintw(win, " Position: Y: %d X: %d", event.y, event.x); #elif defined(PDCURSES) int button = 0; request_mouse_pos(); if (BUTTON_CHANGED(1)) button = 1; else if (BUTTON_CHANGED(2)) button = 2; else if (BUTTON_CHANGED(3)) button = 3; else button = 0; wmove(win, 4, 18); wprintw(win, "Button %d: ", button); if (MOUSE_MOVED) wprintw(win, "moved: "); else if ((BUTTON_STATUS(button) & BUTTON_ACTION_MASK) == BUTTON_PRESSED) wprintw(win, "pressed: "); else if ((BUTTON_STATUS(button) & BUTTON_ACTION_MASK) == BUTTON_DOUBLE_CLICKED) wprintw(win, "double: "); else wprintw(win, "released: "); wprintw(win, " Position: Y: %d X: %d", MOUSE_Y_POS, MOUSE_X_POS); #endif /* NCURSES_VERSION vs PDCURSES */ } #endif /* KEY_MOUSE */ wrefresh(win); if (c == ' ') break; } #if 0 nodelay(win, TRUE); wgetch(win); nodelay(win, FALSE); #endif #if defined(PDCURSES) mouse_set(0L); #endif refresh(); repeat = 0; do { static const char *fmt[] = { "%d %10s", "%d %[a-zA-Z]s", "%d %[][a-zA-Z]s", "%d %[^0-9]" }; char *format = strdup(fmt[(unsigned) repeat % SIZEOF(fmt)]); wclear(win); MvWAddStr(win, 3, 2, "The window should have moved"); MvWAddStr(win, 4, 2, "This text should have appeared without you pressing a key"); MvWPrintw(win, 6, 2, "Scanning with format \"%s\"", format); mvwin(win, 2 + 2 * (repeat % 4), 1 + 2 * (repeat % 4)); erase(); refresh(); wrefresh(win); echo(); noraw(); num = 0; *buffer = 0; answered = mvwscanw(win, 7, 6, format, &num, buffer); MvWPrintw(win, 8, 6, "String: %s Number: %d (%d values read)", buffer, num, answered); Continue(win); ++repeat; free(format); } while (answered > 0); } static void outputTest(WINDOW *win) { WINDOW *win1; char Buffer[80]; chtype ch; int by, bx; #if !HAVE_TIGETSTR #if HAVE_TGETENT char tc_buffer[4096]; char tc_parsed[4096]; char *area_pointer = tc_parsed; tgetent(tc_buffer, getenv("TERM")); #else #define tgetstr(a,b) 0 #endif #endif /* !HAVE_TIGETSTR */ nl(); wclear(win); MvWAddStr(win, 1, 1, "You should now have a screen in the upper left corner, and this text should have wrapped"); mvwin(win, 2, 1); waddstr(win, "\nThis text should be down\n"); waddstr(win, "and broken into two here ^"); Continue(win); wclear(win); wattron(win, A_BOLD); MvWAddStr(win, 1, 1, "A new window will appear with this text in it"); MvWAddStr(win, 8, 1, "Press any key to continue"); wrefresh(win); wgetch(win); getbegyx(win, by, bx); if (LINES < 24 || COLS < 75) { MvWAddStr(win, 5, 1, "Some tests have been skipped as they require a"); MvWAddStr(win, 6, 1, "display of at least 24 LINES by 75 COLUMNS"); Continue(win); } else { win1 = newwin(10, 50, 14, 25); if (win1 == NULL) { endwin(); return; } #ifdef A_COLOR if (has_colors()) { init_pair(3, COLOR_BLUE, COLOR_WHITE); wbkgd(win1, (chtype) COLOR_PAIR(3)); } else wbkgd(win1, A_NORMAL); #else wbkgd(win1, A_NORMAL); #endif wclear(win1); MvWAddStr(win1, 5, 1, "This text should appear; using overlay option"); copywin(win, win1, 0, 0, 0, 0, 9, 49, TRUE); #if defined(PDCURSES) && !defined(XCURSES) box(win1, 0xb3, 0xc4); #else box(win1, ACS_VLINE, ACS_HLINE); #endif wmove(win1, 8, 26); wrefresh(win1); wgetch(win1); wclear(win1); wattron(win1, A_BLINK); MvWAddStr(win1, 4, 1, "This blinking text should appear in only the second window"); wattroff(win1, A_BLINK); mvwin(win1, by, bx); overlay(win, win1); mvwin(win1, 14, 25); wmove(win1, 8, 26); wrefresh(win1); wgetch(win1); delwin(win1); } clear(); wclear(win); wrefresh(win); MvWAddStr(win, 6, 2, "This line shouldn't appear"); MvWAddStr(win, 4, 2, "Only half of the next line is visible"); MvWAddStr(win, 5, 2, "Only half of the next line is visible"); wmove(win, 6, 1); wclrtobot(win); wmove(win, 5, 20); wclrtoeol(win); MvWAddStr(win, 8, 2, "This line also shouldn't appear"); wmove(win, 8, 1); wdeleteln(win); Continue(win); wmove(win, 5, 9); ch = winch(win); wclear(win); wmove(win, 6, 2); waddstr(win, "The next char should be l: "); winsch(win, ch); Continue(win); #if HAVE_WINSSTR (void) mvwinsstr(win, 6, 2, "A1B2C3D4E5"); Continue(win); #endif wmove(win, 5, 1); winsertln(win); MvWAddStr(win, 5, 2, "The lines below should have moved down"); Continue(win); wclear(win); wmove(win, 2, 2); wprintw(win, "This is a formatted string in a window: %d %s\n", 42, "is it"); MvWAddStr(win, 10, 1, "Enter a string: "); wrefresh(win); noraw(); echo(); *Buffer = 0; wscanw(win, "%s", Buffer); printw("This is a formatted string in stdscr: %d %s\n", 42, "is it"); MvAddStr(10, 1, "Enter a string: "); *Buffer = 0; scanw("%s", Buffer); if (TIGETSTR("cvvis", "vs") != 0) { wclear(win); curs_set(2); MvWAddStr(win, 1, 1, "The cursor should appear as a block (visible)"); Continue(win); } if (TIGETSTR("civis", "vi") != 0) { wclear(win); curs_set(0); MvWAddStr(win, 1, 1, "The cursor should have disappeared (invisible)"); Continue(win); } if (TIGETSTR("cnorm", "ve") != 0) { wclear(win); curs_set(1); MvWAddStr(win, 1, 1, "The cursor should be an underline (normal)"); Continue(win); } #ifdef A_COLOR if (has_colors()) { wclear(win); MvWAddStr(win, 1, 1, "Colors should change after you press a key"); Continue(win); init_pair(1, COLOR_RED, COLOR_WHITE); wrefresh(win); } #endif werase(win); #if HAVE_TERMNAME MvWAddStr(win, 1, 1, "Information About Your Terminal"); MvWAddStr(win, 3, 1, termname()); MvWAddStr(win, 4, 1, longname()); if (termattrs() & A_BLINK) MvWAddStr(win, 5, 1, "This terminal supports blinking."); else MvWAddStr(win, 5, 1, "This terminal does NOT support blinking."); #endif (void) mvwaddnstr(win, 7, 5, "Have a nice day!ok", 16); wrefresh(win); (void) mvwinnstr(win, 7, 5, Buffer, 18); MvAddStr(LINES - 2, 10, Buffer); refresh(); Continue(win); } #if defined(PDCURSES) && !defined(XCURSES) static void resizeTest(WINDOW *dummy GCC_UNUSED) { WINDOW *win1; savetty(); clear(); refresh(); # if defined(OS2) resize_term(50, 120); # else resize_term(50, 80); # endif win1 = newwin(10, 50, 14, 25); if (win1 == NULL) { endwin(); return; } #ifdef A_COLOR if (has_colors()) { init_pair(3, COLOR_BLUE, COLOR_WHITE); wattrset(win1, COLOR_PAIR(3)); } #endif wclear(win1); MvWAddStr(win1, 1, 1, "The screen may now have 50 lines"); Continue(win1); wclear(win1); resetty(); MvWAddStr(win1, 1, 1, "The screen should now be reset"); Continue(win1); delwin(win1); clear(); refresh(); } #endif static void padTest(WINDOW *dummy GCC_UNUSED) { WINDOW *pad, *spad; if ((pad = newpad(50, 100)) != 0) { wattron(pad, A_REVERSE); MvWAddStr(pad, 5, 2, "This is a new pad"); (void) wattrset(pad, A_NORMAL); MvWAddStr(pad, 8, 0, "The end of this line should be truncated here:except now"); MvWAddStr(pad, 11, 1, "This line should not appear.It will now"); wmove(pad, 10, 1); wclrtoeol(pad); MvWAddStr(pad, 10, 1, " Press any key to continue"); prefresh(pad, 0, 0, 0, 0, 10, 45); keypad(pad, TRUE); raw(); wgetch(pad); if ((spad = subpad(pad, 12, 25, 6, 52)) != 0) { MvWAddStr(spad, 2, 2, "This is a new subpad"); box(spad, 0, 0); delwin(spad); } prefresh(pad, 0, 0, 0, 0, 15, 75); keypad(pad, TRUE); raw(); wgetch(pad); MvWAddStr(pad, 35, 2, "This is displayed at line 35 in the pad"); MvWAddStr(pad, 40, 1, " Press any key to continue"); prefresh(pad, 30, 0, 0, 0, 10, 45); keypad(pad, TRUE); raw(); wgetch(pad); delwin(pad); } } static void display_menu(int old_option, int new_option) { int i; assert((new_option >= 0) && (new_option < MAX_OPTIONS)); (void) attrset(A_NORMAL); MvAddStr(3, 20, "PDCurses Test Program"); for (i = 0; i < (int) MAX_OPTIONS; i++) MvAddStr(5 + i, 25, command[i].text); if ((old_option >= 0) && (old_option < MAX_OPTIONS)) MvAddStr(5 + old_option, 25, command[old_option].text); (void) attrset(A_REVERSE); MvAddStr(5 + new_option, 25, command[new_option].text); (void) attrset(A_NORMAL); MvAddStr(13, 3, "Use Up and Down Arrows to select - Enter to run - Q to quit"); refresh(); } ncurses-6.0-20160213/test/widechars-utf8.txt0000644000175100001440000000060510346602127017033 0ustar tomusersAPPLE -- It's an APPLE. DOG -- No, that's not my DOG. ORANGE -- Yeah, that's JUICY. CHICKEN -- Normally not a PET. CAT -- No, never put a DOG and a CAT together! FISH -- Cats like FISH. LEMON -- You KNOW how it TASTES. ncurses-6.0-20160213/test/hanoi.c0000644000175100001440000002113412367217267014713 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Name: Towers of Hanoi. * * Desc: * This is a playable copy of towers of hanoi. * Its sole purpose is to demonstrate my Amiga Curses package. * This program should compile on any system that has Curses. * 'hanoi' will give a manual game with 7 playing pieces. * 'hanoi n' will give a manual game with n playing pieces. * 'hanoi n a' will give an auto solved game with n playing pieces. * * Author: Simon J Raybould (sie@fulcrum.bt.co.uk). * (This version has been slightly modified by the ncurses maintainers.) * * Date: 05.Nov.90 * * $Id: hanoi.c,v 1.36 2014/08/02 17:24:07 tom Exp $ */ #include #include #define NPEGS 3 /* This is not configurable !! */ #define MINTILES 3 #define MAXTILES 9 #define DEFAULTTILES 7 #define TOPLINE 6 #define BASELINE 16 #define STATUSLINE (LINES-3) #define LEFTPEG 19 #define MIDPEG 39 #define RIGHTPEG 59 #define LENTOIND(x) (((int)(x)-1)/2) #define OTHER(a,b) (3-((a)+(b))) struct Peg { size_t Length[MAXTILES]; int Count; }; static struct Peg Pegs[NPEGS]; static int PegPos[] = { LEFTPEG, MIDPEG, RIGHTPEG }; static short TileColour[] = { COLOR_GREEN, /* Length 3 */ COLOR_MAGENTA, /* Length 5 */ COLOR_RED, /* Length 7 */ COLOR_BLUE, /* Length 9 */ COLOR_CYAN, /* Length 11 */ COLOR_YELLOW, /* Length 13 */ COLOR_GREEN, /* Length 15 */ COLOR_MAGENTA, /* Length 17 */ COLOR_RED, /* Length 19 */ }; static int NTiles = 0; static int NMoves = 0; static bool AutoFlag = FALSE; static void InitTiles(void); static void DisplayTiles(void); static void MakeMove(int From, int To); static void AutoMove(int From, int To, int Num); static void Usage(void); static int Solved(int NumTiles); static int GetMove(int *From, int *To); static int InvalidMove(int From, int To); int main(int argc, char **argv) { int FromCol, ToCol; setlocale(LC_ALL, ""); switch (argc) { case 1: NTiles = DEFAULTTILES; break; case 2: NTiles = atoi(argv[1]); if (NTiles > MAXTILES || NTiles < MINTILES) { fprintf(stderr, "Range %d to %d\n", MINTILES, MAXTILES); ExitProgram(EXIT_FAILURE); } break; case 3: if (strcmp(argv[2], "a")) { Usage(); ExitProgram(EXIT_FAILURE); } NTiles = atoi(argv[1]); if (NTiles > MAXTILES || NTiles < MINTILES) { fprintf(stderr, "Range %d to %d\n", MINTILES, MAXTILES); ExitProgram(EXIT_FAILURE); } AutoFlag = TRUE; break; default: Usage(); ExitProgram(EXIT_FAILURE); } initscr(); if (has_colors()) { int i; short bg = COLOR_BLACK; start_color(); #if HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) bg = -1; #endif for (i = 0; i < 9; i++) init_pair((short) (i + 1), bg, TileColour[i]); } cbreak(); if (LINES < 24) { endwin(); fprintf(stderr, "Min screen length 24 lines\n"); ExitProgram(EXIT_FAILURE); } if (AutoFlag) { curs_set(0); leaveok(stdscr, TRUE); /* Attempt to remove cursor */ } InitTiles(); DisplayTiles(); if (AutoFlag) { do { noecho(); AutoMove(0, 2, NTiles); } while (!Solved(NTiles)); sleep(2); } else { echo(); for (;;) { if (GetMove(&FromCol, &ToCol)) break; if (InvalidMove(FromCol, ToCol)) { MvAddStr(STATUSLINE, 0, "Invalid Move !!"); refresh(); beep(); continue; } MakeMove(FromCol, ToCol); if (Solved(NTiles)) { MvPrintw(STATUSLINE, 0, "Well Done !! You did it in %d moves", NMoves); refresh(); sleep(5); break; } } } endwin(); ExitProgram(EXIT_SUCCESS); } static int InvalidMove(int From, int To) { if (From >= NPEGS) return TRUE; if (From < 0) return TRUE; if (To >= NPEGS) return TRUE; if (To < 0) return TRUE; if (From == To) return TRUE; if (!Pegs[From].Count) return TRUE; if (Pegs[To].Count && Pegs[From].Length[Pegs[From].Count - 1] > Pegs[To].Length[Pegs[To].Count - 1]) return TRUE; return FALSE; } static void InitTiles(void) { int Size, SlotNo; for (Size = NTiles * 2 + 1, SlotNo = 0; Size >= 3; Size -= 2) Pegs[0].Length[SlotNo++] = (size_t) Size; Pegs[0].Count = NTiles; Pegs[1].Count = 0; Pegs[2].Count = 0; } static void DisplayTiles(void) { int Line, peg, SlotNo; char TileBuf[BUFSIZ]; erase(); MvAddStr(1, 24, "T O W E R S O F H A N O I"); MvAddStr(3, 34, "SJR 1990"); MvPrintw(19, 5, "Moves : %d of %.0f", NMoves, pow(2.0, (float) NTiles) - 1); (void) attrset(A_REVERSE); MvAddStr(BASELINE, 8, " "); for (Line = TOPLINE; Line < BASELINE; Line++) { MvAddCh(Line, LEFTPEG, ' '); MvAddCh(Line, MIDPEG, ' '); MvAddCh(Line, RIGHTPEG, ' '); } MvAddCh(BASELINE, LEFTPEG, '1'); MvAddCh(BASELINE, MIDPEG, '2'); MvAddCh(BASELINE, RIGHTPEG, '3'); (void) attrset(A_NORMAL); /* Draw tiles */ for (peg = 0; peg < NPEGS; peg++) { for (SlotNo = 0; SlotNo < Pegs[peg].Count; SlotNo++) { size_t len = Pegs[peg].Length[SlotNo]; if (len < sizeof(TileBuf) - 1 && len < (size_t) PegPos[peg]) { memset(TileBuf, ' ', len); TileBuf[len] = '\0'; if (has_colors()) (void) attrset(AttrArg(COLOR_PAIR(LENTOIND(len)), 0)); else (void) attrset(A_REVERSE); MvAddStr(BASELINE - (SlotNo + 1), (PegPos[peg] - (int) len / 2), TileBuf); } } } (void) attrset(A_NORMAL); refresh(); } static int GetMove(int *From, int *To) { MvAddStr(STATUSLINE, 0, "Next move ('q' to quit) from "); clrtoeol(); refresh(); if ((*From = getch()) == 'q') return TRUE; *From -= ('0' + 1); addstr(" to "); clrtoeol(); refresh(); if ((*To = getch()) == 'q') return TRUE; *To -= ('0' + 1); refresh(); if (!AutoFlag) napms(500); move(STATUSLINE, 0); clrtoeol(); refresh(); return FALSE; } static void MakeMove(int From, int To) { Pegs[From].Count--; Pegs[To].Length[Pegs[To].Count] = Pegs[From].Length[Pegs[From].Count]; Pegs[To].Count++; NMoves++; DisplayTiles(); } static void AutoMove(int From, int To, int Num) { if (Num == 1) { MakeMove(From, To); napms(500); } else { AutoMove(From, OTHER(From, To), Num - 1); MakeMove(From, To); napms(500); AutoMove(OTHER(From, To), To, Num - 1); } } static int Solved(int NumTiles) { int i; for (i = 1; i < NPEGS; i++) if (Pegs[i].Count == NumTiles) return TRUE; return FALSE; } static void Usage(void) { fprintf(stderr, "Usage: hanoi [] [a]\n"); fprintf(stderr, "The 'a' option causes the tower to be solved automatically\n"); } ncurses-6.0-20160213/test/cardfile.c0000644000175100001440000003243112221650751015354 0ustar tomusers/**************************************************************************** * Copyright (c) 1999-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey * * $Id: cardfile.c,v 1.42 2013/09/28 22:02:17 tom Exp $ * * File format: text beginning in column 1 is a title; other text is content. */ #include #if USE_LIBFORM && USE_LIBPANEL #include #include #define VISIBLE_CARDS 10 #define OFFSET_CARD 2 #define pair_1 1 #define pair_2 2 #define isVisible(cardp) ((cardp)->panel != 0) enum { MY_CTRL_x = MAX_FORM_COMMAND ,MY_CTRL_N ,MY_CTRL_P ,MY_CTRL_Q ,MY_CTRL_W }; typedef struct _card { struct _card *link; PANEL *panel; FORM *form; char *title; char *content; } CARD; static CARD *all_cards; static bool try_color = FALSE; static char default_name[] = "cardfile.dat"; static void failed(const char *s) { perror(s); endwin(); ExitProgram(EXIT_FAILURE); } static const char * skip(const char *buffer) { while (isspace(UChar(*buffer))) buffer++; return buffer; } static void trim(char *buffer) { size_t n = strlen(buffer); while (n-- && isspace(UChar(buffer[n]))) buffer[n] = 0; } /*******************************************************************************/ static CARD * add_title(const char *title) { CARD *card, *p, *q; for (p = all_cards, q = 0; p != 0; q = p, p = p->link) { int cmp = strcmp(p->title, title); if (cmp == 0) return p; if (cmp > 0) break; } card = typeCalloc(CARD, (size_t) 1); card->title = strdup(title); card->content = strdup(""); if (q == 0) { card->link = all_cards; all_cards = card; } else { card->link = q->link; q->link = card; } return card; } static void add_content(CARD * card, const char *content) { size_t total, offset; content = skip(content); if ((total = strlen(content)) != 0) { if (card->content != 0 && (offset = strlen(card->content)) != 0) { total += 1 + offset; card->content = typeRealloc(char, total + 1, card->content); if (card->content) strcpy(card->content + offset++, " "); } else { offset = 0; if (card->content != 0) free(card->content); card->content = typeMalloc(char, total + 1); } if (card->content) strcpy(card->content + offset, content); else failed("add_content"); } } static CARD * new_card(void) { CARD *card = add_title(""); add_content(card, ""); return card; } static CARD * find_card(char *title) { CARD *card; for (card = all_cards; card != 0; card = card->link) if (!strcmp(card->title, title)) break; return card; } static void read_data(char *fname) { FILE *fp; CARD *card = 0; char buffer[BUFSIZ]; if ((fp = fopen(fname, "r")) != 0) { while (fgets(buffer, sizeof(buffer), fp)) { trim(buffer); if (isspace(UChar(*buffer))) { if (card == 0) card = add_title(""); add_content(card, buffer); } else if ((card = find_card(buffer)) == 0) { card = add_title(buffer); } } fclose(fp); } } /*******************************************************************************/ static void write_data(const char *fname) { FILE *fp; CARD *p = 0; int n; if (!strcmp(fname, default_name)) fname = "cardfile.out"; if ((fp = fopen(fname, "w")) != 0) { for (p = all_cards; p != 0; p = p->link) { FIELD **f = form_fields(p->form); for (n = 0; f[n] != 0; n++) { char *s = field_buffer(f[n], 0); if (s != 0 && (s = strdup(s)) != 0) { trim(s); fprintf(fp, "%s%s\n", n ? "\t" : "", s); free(s); } } } fclose(fp); } } /*******************************************************************************/ /* * Count the cards */ static int count_cards(void) { CARD *p; int count = 0; for (p = all_cards; p != 0; p = p->link) count++; return count; } /* * Shuffle the panels to keep them in a natural hierarchy. */ static void order_cards(CARD * first, int depth) { if (first) { if (depth && first->link) order_cards(first->link, depth - 1); if (isVisible(first)) top_panel(first->panel); } } /* * Return the next card in the list */ static CARD * next_card(CARD * now) { if (now->link != 0) { CARD *tst = now->link; if (isVisible(tst)) now = tst; else (void) next_card(tst); } return now; } /* * Return the previous card in the list */ static CARD * prev_card(CARD * now) { CARD *p; for (p = all_cards; p != 0; p = p->link) { if (p->link == now) { if (!isVisible(p)) p = prev_card(p); return p; } } return now; } /* * Returns the first card in the list that we will display. */ static CARD * first_card(CARD * now) { if (!isVisible(now)) now = next_card(now); return now; } /*******************************************************************************/ static int form_virtualize(WINDOW *w) { int c = wgetch(w); switch (c) { case CTRL('W'): return (MY_CTRL_W); case CTRL('N'): return (MY_CTRL_N); case CTRL('P'): return (MY_CTRL_P); case QUIT: case ESCAPE: return (MY_CTRL_Q); case KEY_BACKSPACE: return (REQ_DEL_PREV); case KEY_DC: return (REQ_DEL_CHAR); case KEY_LEFT: return (REQ_LEFT_CHAR); case KEY_RIGHT: return (REQ_RIGHT_CHAR); case KEY_DOWN: case KEY_NEXT: return (REQ_NEXT_FIELD); case KEY_UP: case KEY_PREVIOUS: return (REQ_PREV_FIELD); default: return (c); } } static FIELD ** make_fields(CARD * p, int form_high, int form_wide) { FIELD **f = typeCalloc(FIELD *, (size_t) 3); f[0] = new_field(1, form_wide, 0, 0, 0, 0); set_field_back(f[0], A_REVERSE); set_field_buffer(f[0], 0, p->title); field_opts_off(f[0], O_BLANK); f[1] = new_field(form_high - 1, form_wide, 1, 0, 0, 0); set_field_buffer(f[1], 0, p->content); set_field_just(f[1], JUSTIFY_LEFT); field_opts_off(f[1], O_BLANK); f[2] = 0; return f; } static void show_legend(void) { erase(); move(LINES - 3, 0); addstr("^Q/ESC -- exit form ^W -- writes data to file\n"); addstr("^N -- go to next card ^P -- go to previous card\n"); addstr("Arrow keys move left/right within a field, up/down between fields"); } #if (defined(KEY_RESIZE) && HAVE_WRESIZE) || NO_LEAKS static void free_form_fields(FIELD ** f) { int n; for (n = 0; f[n] != 0; ++n) { free_field(f[n]); } free(f); } #endif /*******************************************************************************/ static void cardfile(char *fname) { WINDOW *win; CARD *p; CARD *top_card; int visible_cards; int panel_wide; int panel_high; int form_wide; int form_high; int y; int x; int ch = ERR; int finished = FALSE; show_legend(); /* decide how many cards we can display */ visible_cards = count_cards(); while ( (panel_wide = COLS - (visible_cards * OFFSET_CARD)) < 10 || (panel_high = LINES - (visible_cards * OFFSET_CARD) - 5) < 5) { --visible_cards; } form_wide = panel_wide - 2; form_high = panel_high - 2; y = (visible_cards - 1) * OFFSET_CARD; x = 0; /* make a panel for each CARD */ for (p = all_cards; p != 0; p = p->link) { if ((win = newwin(panel_high, panel_wide, y, x)) == 0) break; wbkgd(win, (chtype) COLOR_PAIR(pair_2)); keypad(win, TRUE); p->panel = new_panel(win); box(win, 0, 0); p->form = new_form(make_fields(p, form_high, form_wide)); set_form_win(p->form, win); set_form_sub(p->form, derwin(win, form_high, form_wide, 1, 1)); post_form(p->form); y -= OFFSET_CARD; x += OFFSET_CARD; } top_card = first_card(all_cards); order_cards(top_card, visible_cards); while (!finished) { update_panels(); doupdate(); ch = form_virtualize(panel_window(top_card->panel)); switch (form_driver(top_card->form, ch)) { case E_OK: break; case E_UNKNOWN_COMMAND: switch (ch) { case MY_CTRL_Q: finished = TRUE; break; case MY_CTRL_P: top_card = prev_card(top_card); order_cards(top_card, visible_cards); break; case MY_CTRL_N: top_card = next_card(top_card); order_cards(top_card, visible_cards); break; case MY_CTRL_W: form_driver(top_card->form, REQ_VALIDATION); write_data(fname); break; #if defined(KEY_RESIZE) && HAVE_WRESIZE case KEY_RESIZE: /* resizeterm already did "something" reasonable, but it cannot * know much about layout. So let's make it nicer. */ panel_wide = COLS - (visible_cards * OFFSET_CARD); panel_high = LINES - (visible_cards * OFFSET_CARD) - 5; form_wide = panel_wide - 2; form_high = panel_high - 2; y = (visible_cards - 1) * OFFSET_CARD; x = 0; show_legend(); for (p = all_cards; p != 0; p = p->link) { FIELD **oldf = form_fields(p->form); WINDOW *olds = form_sub(p->form); if (!isVisible(p)) continue; win = form_win(p->form); /* move and resize the card as needed * FIXME: if the windows are shrunk too much, this won't do */ mvwin(win, y, x); wresize(win, panel_high, panel_wide); /* reconstruct each form. Forms are not resizable, and * there appears to be no good way to reload the text in * a resized window. */ werase(win); unpost_form(p->form); free_form(p->form); p->form = new_form(make_fields(p, form_high, form_wide)); set_form_win(p->form, win); set_form_sub(p->form, derwin(win, form_high, form_wide, 1, 1)); post_form(p->form); free_form_fields(oldf); delwin(olds); box(win, 0, 0); y -= OFFSET_CARD; x += OFFSET_CARD; } break; #endif default: beep(); break; } break; default: flash(); break; } } #if NO_LEAKS while (all_cards != 0) { FIELD **f; p = all_cards; all_cards = all_cards->link; if (isVisible(p)) { f = form_fields(p->form); unpost_form(p->form); /* ...so we can free it */ free_form(p->form); /* this also disconnects the fields */ free_form_fields(f); del_panel(p->panel); } free(p->title); free(p->content); free(p); } #endif } static void usage(void) { static const char *msg[] = { "Usage: view [options] file" ,"" ,"Options:" ," -c use color if terminal supports it" }; size_t n; for (n = 0; n < SIZEOF(msg); n++) fprintf(stderr, "%s\n", msg[n]); ExitProgram(EXIT_FAILURE); } /*******************************************************************************/ int main(int argc, char *argv[]) { int n; setlocale(LC_ALL, ""); while ((n = getopt(argc, argv, "c")) != -1) { switch (n) { case 'c': try_color = TRUE; break; default: usage(); } } initscr(); cbreak(); noecho(); if (try_color) { if (has_colors()) { start_color(); init_pair(pair_1, COLOR_WHITE, COLOR_BLUE); init_pair(pair_2, COLOR_WHITE, COLOR_CYAN); bkgd((chtype) COLOR_PAIR(pair_1)); } else { try_color = FALSE; } } if (optind + 1 == argc) { for (n = 1; n < argc; n++) read_data(argv[n]); if (count_cards() == 0) new_card(); cardfile(argv[1]); } else { read_data(default_name); if (count_cards() == 0) new_card(); cardfile(default_name); } endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the curses form and panel libraries\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/ditto.c0000644000175100001440000002622612655461540014742 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey (1998-on) * * $Id: ditto.c,v 1.43 2016/02/06 21:19:28 tom Exp $ * * The program illustrates how to set up multiple screens from a single * program. * * If openpty() is supported, the command line parameters are titles for * the windows showing each screen's data. * * If openpty() is not supported, you must invoke the program by specifying * another terminal on the same machine by specifying its device, e.g., * ditto /dev/ttyp1 */ #include #include #ifdef USE_PTHREADS #include #endif #ifdef USE_XTERM_PTY #include USE_OPENPTY_HEADER #endif #define MAX_FIFO 256 #define THIS_FIFO(n) ((n) % MAX_FIFO) #define NEXT_FIFO(n) THIS_FIFO((n) + 1) typedef struct { unsigned long sequence; int head; int tail; int data[MAX_FIFO]; } FIFO; typedef struct { unsigned long sequence; } PEEK; /* * Data "owned" for a single screen. Each screen is divided into windows that * show the text read from each terminal. Input from a given screen will also * be read into one window per screen. */ typedef struct { FILE *input; FILE *output; SCREEN *screen; /* this screen - curses internal data */ int which1; /* this screen's index in DITTO[] array */ int length; /* length of windows[] and peeks[] */ char **titles; /* per-window titles */ WINDOW **parents; /* display boxes around each screen's data */ WINDOW **windows; /* display data from each screen */ PEEK *peeks; /* indices for each screen's fifo */ FIFO fifo; /* fifo for this screen */ #ifdef USE_PTHREADS pthread_t thread; #endif } DITTO; /* * Structure used to pass multiple parameters via the use_screen() * single-parameter interface. */ typedef struct { int source; /* which screen did character come from */ int target; /* which screen is character going to */ DITTO *ditto; /* data for all screens */ } DDATA; static void failed(const char *) GCC_NORETURN; static void usage(void) GCC_NORETURN; static void failed(const char *s) { perror(s); ExitProgram(EXIT_FAILURE); } static void usage(void) { fprintf(stderr, "usage: ditto [terminal1 ...]\n"); ExitProgram(EXIT_FAILURE); } /* Add to the head of the fifo, checking for overflow. */ static void put_fifo(FIFO * fifo, int value) { int next = NEXT_FIFO(fifo->head); if (next == fifo->tail) fifo->tail = NEXT_FIFO(fifo->tail); fifo->data[next] = value; fifo->head = next; fifo->sequence += 1; } /* Get data from the tail (oldest part) of the fifo, returning -1 if no data. * Since each screen can peek into the fifo, we do not update the tail index, * but modify the peek-index. * * FIXME - test/workaround for case where fifo gets more than a buffer * ahead of peek. */ static int peek_fifo(FIFO * fifo, PEEK * peek) { int result = -1; if (peek->sequence < fifo->sequence) { result = fifo->data[THIS_FIFO(peek->sequence)]; peek->sequence += 1; } return result; } static FILE * open_tty(char *path) { FILE *fp; #ifdef USE_XTERM_PTY int amaster; int aslave; char slave_name[1024]; char s_option[sizeof(slave_name) + 80]; const char *xterm_prog = 0; if ((xterm_prog = getenv("XTERM_PROG")) == 0) xterm_prog = "xterm"; if (openpty(&amaster, &aslave, slave_name, 0, 0) != 0 || strlen(slave_name) > sizeof(slave_name) - 1) failed("openpty"); if (strrchr(slave_name, '/') == 0) { errno = EISDIR; failed(slave_name); } sprintf(s_option, "-S%s/%d", slave_name, aslave); if (fork()) { execlp(xterm_prog, xterm_prog, s_option, "-title", path, (char *) 0); _exit(0); } fp = fdopen(amaster, "r+"); if (fp == 0) failed(path); #else struct stat sb; if (stat(path, &sb) < 0) failed(path); if ((sb.st_mode & S_IFMT) != S_IFCHR) { errno = ENOTTY; failed(path); } fp = fopen(path, "r+"); if (fp == 0) failed(path); printf("opened %s\n", path); #endif assert(fp != 0); return fp; } static void init_screen( #if HAVE_USE_WINDOW SCREEN *sp GCC_UNUSED, #endif void *arg) { DITTO *target = (DITTO *) arg; int high, wide; int k; cbreak(); noecho(); scrollok(stdscr, TRUE); box(stdscr, 0, 0); target->parents = typeCalloc(WINDOW *, (size_t) target->length); target->windows = typeCalloc(WINDOW *, (size_t) target->length); target->peeks = typeCalloc(PEEK, (size_t) target->length); high = (LINES - 2) / target->length; wide = (COLS - 2); for (k = 0; k < target->length; ++k) { WINDOW *outer = newwin(high, wide, 1 + (high * k), 1); WINDOW *inner = derwin(outer, high - 2, wide - 2, 1, 1); box(outer, 0, 0); MvWAddStr(outer, 0, 2, target->titles[k]); wnoutrefresh(outer); scrollok(inner, TRUE); keypad(inner, TRUE); #ifndef USE_PTHREADS nodelay(inner, TRUE); #endif target->parents[k] = outer; target->windows[k] = inner; } doupdate(); } static void open_screen(DITTO * target, char **source, int length, int which1) { if (which1 != 0) { target->input = target->output = open_tty(source[which1]); } else { target->input = stdin; target->output = stdout; } target->which1 = which1; target->titles = source; target->length = length; target->fifo.head = -1; target->screen = newterm((char *) 0, /* assume $TERM is the same */ target->output, target->input); if (target->screen == 0) failed("newterm"); (void) USING_SCREEN(target->screen, init_screen, target); } static int close_screen( #if HAVE_USE_WINDOW SCREEN *sp GCC_UNUSED, #endif void *arg GCC_UNUSED) { #if HAVE_USE_WINDOW (void) sp; #endif (void) arg; return endwin(); } /* * Read data from the 'source' screen. */ static int read_screen( #if HAVE_USE_WINDOW SCREEN *sp GCC_UNUSED, #endif void *arg) { DDATA *data = (DDATA *) arg; DITTO *ditto = &(data->ditto[data->source]); WINDOW *win = ditto->windows[data->source]; int ch = wgetch(win); if (ch > 0 && ch < 256) put_fifo(&(ditto->fifo), ch); else ch = ERR; return ch; } /* * Write all of the data that's in fifos for the 'target' screen. */ static int write_screen( #if HAVE_USE_WINDOW SCREEN *sp GCC_UNUSED, #endif void *arg GCC_UNUSED) { DDATA *data = (DDATA *) arg; DITTO *ditto = &(data->ditto[data->target]); bool changed = FALSE; int which; for (which = 0; which < ditto->length; ++which) { WINDOW *win = ditto->windows[which]; FIFO *fifo = &(data->ditto[which].fifo); PEEK *peek = &(ditto->peeks[which]); int ch; while ((ch = peek_fifo(fifo, peek)) > 0) { changed = TRUE; waddch(win, (chtype) ch); wnoutrefresh(win); } } if (changed) doupdate(); return OK; } static void show_ditto(DITTO * data, int count, DDATA * ddata) { int n; (void) data; for (n = 0; n < count; n++) { ddata->target = n; USING_SCREEN(data[n].screen, write_screen, (void *) ddata); } } #ifdef USE_PTHREADS static void * handle_screen(void *arg) { DDATA ddata; int ch; memset(&ddata, 0, sizeof(ddata)); ddata.ditto = (DITTO *) arg; ddata.source = ddata.ditto->which1; ddata.ditto -= ddata.source; /* -> base of array */ for (;;) { ch = read_screen(ddata.ditto->screen, &ddata); if (ch == CTRL('D')) { int later = (ddata.source ? ddata.source : -1); int j; for (j = ddata.ditto->length - 1; j > 0; --j) { if (j != later) { pthread_cancel(ddata.ditto[j].thread); } } if (later > 0) { pthread_cancel(ddata.ditto[later].thread); } break; } show_ditto(ddata.ditto, ddata.ditto->length, &ddata); } return NULL; } #endif int main(int argc, char *argv[]) { int j; DITTO *data; #ifndef USE_PTHREADS int count; #endif if (argc <= 1) usage(); if ((data = typeCalloc(DITTO, (size_t) argc)) == 0) failed("calloc data"); assert(data != 0); for (j = 0; j < argc; j++) { open_screen(&data[j], argv, argc, j); } #ifdef USE_PTHREADS /* * For multi-threaded operation, set up a reader for each of the screens. * That uses blocking I/O rather than polling for input, so no calls to * napms() are needed. */ for (j = 0; j < argc; j++) { (void) pthread_create(&(data[j].thread), NULL, handle_screen, &data[j]); } pthread_join(data[1].thread, NULL); #else /* * Loop, reading characters from any of the inputs and writing to all * of the screens. */ for (count = 0;; ++count) { DDATA ddata; int ch; int which = (count % argc); napms(20); ddata.source = which; ddata.ditto = data; ch = USING_SCREEN(data[which].screen, read_screen, &ddata); if (ch == CTRL('D')) { break; } else if (ch != ERR) { show_ditto(data, argc, &ddata); } } #endif /* * Cleanup and exit */ for (j = argc - 1; j >= 0; j--) { USING_SCREEN(data[j].screen, close_screen, 0); fprintf(data[j].output, "**Closed\r\n"); /* * Closing before a delscreen() helps ncurses determine that there * is no valid output buffer, and can remove the setbuf() data. */ fflush(data[j].output); fclose(data[j].output); delscreen(data[j].screen); } ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/test_getstr.c0000644000175100001440000002160411776077171016167 0ustar tomusers/**************************************************************************** * Copyright (c) 2007-2009,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_getstr.c,v 1.10 2012/07/07 18:22:49 tom Exp $ * * Author: Thomas E Dickey * * Demonstrate the getstr functions from the curses library. int getstr(char *str); int getnstr(char *str, int n); int wgetstr(WINDOW *win, char *str); int wgetnstr(WINDOW *win, char *str, int n); int mvgetstr(int y, int x, char *str); int mvwgetstr(WINDOW *win, int y, int x, char *str); int mvgetnstr(int y, int x, char *str, int n); int mvwgetnstr(WINDOW *, int y, int x, char *str, int n); */ #include #if HAVE_CHGAT /* Solaris SVr4 curses lacks wchgat, mvgetnstr, mvwgetnstr */ #define BASE_Y 6 #define MAX_COLS 1024 typedef enum { eGetStr = 0, eGetNStr, eMvGetStr, eMvGetNStr, eMaxFlavor } Flavors; /* * Return-code is OK/ERR or a keyname. */ static const char * ok_keyname(int code) { return ((code == OK) ? "OK" : ((code == ERR) ? "ERR" : keyname(code))); } static bool Quit(int ch) { return (ch == ERR || ch == 'q' || ch == QUIT || ch == ESCAPE); } static int Remainder(WINDOW *txtwin) { int result = getmaxx(txtwin) - getcurx(txtwin); return (result > 0) ? result : 0; } /* * Show a highlighted line in the place where input will happen. */ static void ShowPrompt(WINDOW *txtwin, int limit) { wchgat(txtwin, limit, A_REVERSE, 0, NULL); wnoutrefresh(txtwin); } static void MovePrompt(WINDOW *txtwin, int limit, int y, int x) { wchgat(txtwin, Remainder(txtwin), A_NORMAL, 0, NULL); wmove(txtwin, y, x); ShowPrompt(txtwin, limit); } static int ShowFlavor(WINDOW *strwin, WINDOW *txtwin, int flavor, int limit) { const char *name = "?"; bool limited = FALSE; bool wins = (txtwin != stdscr); int result; switch (flavor) { case eGetStr: name = wins ? "wgetstr" : "getstr"; break; case eGetNStr: limited = TRUE; name = wins ? "wgetnstr" : "getnstr"; break; case eMvGetStr: name = wins ? "mvwgetstr" : "mvgetstr"; break; case eMvGetNStr: limited = TRUE; name = wins ? "mvwgetnstr" : "mvgetnstr"; break; case eMaxFlavor: break; } wmove(strwin, 0, 0); werase(strwin); if (limited) { wprintw(strwin, "%s(%d):", name, limit); } else { wprintw(strwin, "%s:", name); } result = limited ? limit : Remainder(txtwin); ShowPrompt(txtwin, result); wnoutrefresh(strwin); return result; } static int test_getstr(int level, char **argv, WINDOW *strwin) { WINDOW *txtbox = 0; WINDOW *txtwin = 0; FILE *fp; int ch; int rc; int txt_x = 0, txt_y = 0; int base_y; int flavor = 0; int limit = getmaxx(strwin) - 5; int actual; char buffer[MAX_COLS]; if (argv[level] == 0) { beep(); return FALSE; } if (level > 1) { txtbox = newwin(LINES - BASE_Y, COLS - level, BASE_Y, level); box(txtbox, 0, 0); wnoutrefresh(txtbox); txtwin = derwin(txtbox, getmaxy(txtbox) - 2, getmaxx(txtbox) - 2, 1, 1); base_y = 0; } else { txtwin = stdscr; base_y = BASE_Y; } keypad(txtwin, TRUE); /* enable keyboard mapping */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ txt_y = base_y; txt_x = 0; wmove(txtwin, txt_y, txt_x); if ((fp = fopen(argv[level], "r")) != 0) { while ((ch = fgetc(fp)) != EOF) { if (waddch(txtwin, UChar(ch)) != OK) { break; } } fclose(fp); } else { wprintw(txtwin, "Cannot open:\n%s", argv[1]); } wmove(txtwin, txt_y, txt_x); actual = ShowFlavor(strwin, txtwin, flavor, limit); while (!Quit(ch = mvwgetch(txtwin, txt_y, txt_x))) { switch (ch) { case KEY_DOWN: case 'j': if (txt_y < getmaxy(txtwin) - 1) { MovePrompt(txtwin, actual, ++txt_y, txt_x); } else { beep(); } break; case KEY_UP: case 'k': if (txt_y > base_y) { MovePrompt(txtwin, actual, --txt_y, txt_x); } else { beep(); } break; case KEY_LEFT: case 'h': if (txt_x > 0) { MovePrompt(txtwin, actual, txt_y, --txt_x); } else { beep(); } break; case KEY_RIGHT: case 'l': if (txt_x < getmaxx(txtwin) - 1) { MovePrompt(txtwin, actual, txt_y, ++txt_x); } else { beep(); } break; case 'w': test_getstr(level + 1, argv, strwin); if (txtbox != 0) { touchwin(txtbox); wnoutrefresh(txtbox); } else { touchwin(txtwin); wnoutrefresh(txtwin); } break; case '-': if (limit > 0) { actual = ShowFlavor(strwin, txtwin, flavor, --limit); MovePrompt(txtwin, actual, txt_y, txt_x); } else { beep(); } break; case '+': actual = ShowFlavor(strwin, txtwin, flavor, ++limit); MovePrompt(txtwin, actual, txt_y, txt_x); break; case '<': if (flavor > 0) { actual = ShowFlavor(strwin, txtwin, --flavor, limit); MovePrompt(txtwin, actual, txt_y, txt_x); } else { beep(); } break; case '>': if (flavor + 1 < eMaxFlavor) { actual = ShowFlavor(strwin, txtwin, ++flavor, limit); MovePrompt(txtwin, actual, txt_y, txt_x); } else { beep(); } break; case ':': actual = ShowFlavor(strwin, txtwin, flavor, limit); *buffer = '\0'; rc = ERR; echo(); (void) wattrset(txtwin, A_REVERSE); switch (flavor) { case eGetStr: if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); rc = wgetstr(txtwin, buffer); } else { move(txt_y, txt_x); rc = getstr(buffer); } break; case eGetNStr: if (txtwin != stdscr) { wmove(txtwin, txt_y, txt_x); rc = wgetnstr(txtwin, buffer, limit); } else { move(txt_y, txt_x); rc = getnstr(buffer, limit); } break; case eMvGetStr: if (txtwin != stdscr) { rc = mvwgetstr(txtwin, txt_y, txt_x, buffer); } else { rc = mvgetstr(txt_y, txt_x, buffer); } break; case eMvGetNStr: if (txtwin != stdscr) { rc = mvwgetnstr(txtwin, txt_y, txt_x, buffer, limit); } else { rc = mvgetnstr(txt_y, txt_x, buffer, limit); } break; case eMaxFlavor: break; } noecho(); (void) wattrset(txtwin, A_NORMAL); wprintw(strwin, "%s:%s", ok_keyname(rc), buffer); wnoutrefresh(strwin); break; default: beep(); break; } doupdate(); } if (level > 1) { delwin(txtwin); delwin(txtbox); } return TRUE; } int main(int argc, char *argv[]) { WINDOW *chrbox; WINDOW *strwin; setlocale(LC_ALL, ""); if (argc < 2) { fprintf(stderr, "usage: %s file\n", argv[0]); return EXIT_FAILURE; } initscr(); chrbox = derwin(stdscr, BASE_Y, COLS, 0, 0); box(chrbox, 0, 0); wnoutrefresh(chrbox); strwin = derwin(chrbox, 4, COLS - 2, 1, 1); test_getstr(1, argv, strwin); endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the curses chgat function\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/railroad.c0000644000175100001440000001325112221650751015377 0ustar tomusers/**************************************************************************** * Copyright (c) 2000-2011,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey - 2000 * * $Id: railroad.c,v 1.21 2013/09/28 22:02:17 tom Exp $ * * A simple demo of the termcap interface. */ #define USE_TINFO #include #if HAVE_TGETENT static char *wipeit; static char *moveit; static int length; static int height; static char *finisC; static char *finisS; static char *finisU; static char *startC; static char *startS; static char *startU; static char *backup; static bool interrupted = FALSE; static TPUTS_PROTO(outc, c) { int rc = OK; if (interrupted) { char tmp = (char) c; if (write(STDOUT_FILENO, &tmp, (size_t) 1) == -1) rc = ERR; } else { if (putc(c, stdout) == EOF) rc = ERR; } TPUTS_RETURN(rc); } static void PutChar(int ch) { putchar(ch); fflush(stdout); napms(moveit ? 10 : 50); /* not really termcap... */ } static void Backup(void) { tputs(backup != 0 ? backup : "\b", 1, outc); } static void MyShowCursor(int flag) { if (startC != 0 && finisC != 0) { tputs(flag ? startC : finisC, 1, outc); } } static void StandOut(int flag) { if (startS != 0 && finisS != 0) { tputs(flag ? startS : finisS, 1, outc); } } static void Underline(int flag) { if (startU != 0 && finisU != 0) { tputs(flag ? startU : finisU, 1, outc); } } static void ShowSign(char *string) { char *base = string; int ch, first, last; if (moveit != 0) { tputs(tgoto(moveit, 0, height - 1), 1, outc); tputs(wipeit, 1, outc); } while (*string != 0) { ch = *string; if (ch != ' ') { if (moveit != 0) { for (first = length - 2; first >= (string - base); first--) { if (first < length - 1) { tputs(tgoto(moveit, first + 1, height - 1), 1, outc); PutChar(' '); } tputs(tgoto(moveit, first, height - 1), 1, outc); PutChar(ch); } } else { last = ch; if (isalpha(ch)) { first = isupper(ch) ? 'A' : 'a'; } else if (isdigit(ch)) { first = '0'; } else { first = ch; } if (first < last) { Underline(1); while (first < last) { PutChar(first); Backup(); first++; } Underline(0); } } if (moveit != 0) Backup(); } StandOut(1); PutChar(ch); StandOut(0); fflush(stdout); string++; } if (moveit != 0) tputs(wipeit, 1, outc); putchar('\n'); } static void cleanup(void) { Underline(0); StandOut(0); MyShowCursor(1); } static void onsig(int n GCC_UNUSED) { interrupted = TRUE; cleanup(); ExitProgram(EXIT_FAILURE); } static void railroad(char **args) { NCURSES_CONST char *name = getenv("TERM"); char buffer[1024]; char area[1024], *ap = area; if (name == 0) name = "dumb"; if (tgetent(buffer, name) >= 0) { wipeit = tgetstr("ce", &ap); height = tgetnum("li"); length = tgetnum("co"); moveit = tgetstr("cm", &ap); if (wipeit == 0 || moveit == 0 || height <= 0 || length <= 0) { wipeit = 0; moveit = 0; height = 0; length = 0; } startS = tgetstr("so", &ap); finisS = tgetstr("se", &ap); startU = tgetstr("us", &ap); finisU = tgetstr("ue", &ap); backup = tgetstr("le", &ap); startC = tgetstr("ve", &ap); finisC = tgetstr("vi", &ap); MyShowCursor(0); CATCHALL(onsig); while (*args) { ShowSign(*args++); } MyShowCursor(1); } } int main(int argc, char *argv[]) { if (argc > 1) { railroad(argv + 1); } else { static char world[] = "Hello World"; static char *hello[] = {world, 0}; railroad(hello); } ExitProgram(EXIT_SUCCESS); } #else int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { printf("This program requires termcap\n"); exit(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/rain.c0000644000175100001440000002065112367217267014551 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: rain.c,v 1.41 2014/08/02 17:24:07 tom Exp $ */ #include /* rain 11/3/1980 EPS/CITHEP */ #ifdef USE_PTHREADS #include #endif WANT_USE_WINDOW(); #define MAX_THREADS 10 #define MAX_DROP 5 struct DATA; typedef void (*DrawPart) (struct DATA *); typedef struct DATA { int y, x; #ifdef USE_PTHREADS DrawPart func; int state; #endif } DATA; #ifdef USE_PTHREADS pthread_cond_t cond_next_drop; pthread_mutex_t mutex_next_drop; static int used_threads; typedef struct { pthread_t myself; long counter; } STATS; static STATS drop_threads[MAX_THREADS]; #endif static void onsig(int n GCC_UNUSED) { curs_set(1); endwin(); ExitProgram(EXIT_FAILURE); } static double ranf(void) { long r = (rand() & 077777); return ((double) r / 32768.); } static int random_x(void) { return (int) (((double) (COLS - 4) * ranf()) + 2); } static int random_y(void) { return (int) (((double) (LINES - 4) * ranf()) + 2); } static int next_j(int j) { if (j == 0) j = MAX_DROP - 1; else --j; if (has_colors()) { int z = (int) (3 * ranf()); (void) attrset(AttrArg(COLOR_PAIR(z), (z ? A_BOLD : A_NORMAL))); } return j; } static void part1(DATA * drop) { MvAddCh(drop->y, drop->x, '.'); } static void part2(DATA * drop) { MvAddCh(drop->y, drop->x, 'o'); } static void part3(DATA * drop) { MvAddCh(drop->y, drop->x, 'O'); } static void part4(DATA * drop) { MvAddCh(drop->y - 1, drop->x, '-'); MvAddStr(drop->y, drop->x - 1, "|.|"); MvAddCh(drop->y + 1, drop->x, '-'); } static void part5(DATA * drop) { MvAddCh(drop->y - 2, drop->x, '-'); MvAddStr(drop->y - 1, drop->x - 1, "/ \\"); MvAddStr(drop->y, drop->x - 2, "| O |"); MvAddStr(drop->y + 1, drop->x - 1, "\\ /"); MvAddCh(drop->y + 2, drop->x, '-'); } static void part6(DATA * drop) { MvAddCh(drop->y - 2, drop->x, ' '); MvAddStr(drop->y - 1, drop->x - 1, " "); MvAddStr(drop->y, drop->x - 2, " "); MvAddStr(drop->y + 1, drop->x - 1, " "); MvAddCh(drop->y + 2, drop->x, ' '); } #ifdef USE_PTHREADS static void napsome(void) { napms(60); } /* * This runs inside the use_window() mutex. */ static int really_draw(WINDOW *win, void *arg) { DATA *data = (DATA *) arg; (void) win; next_j(data->state); data->func(data); refresh(); return OK; } static void draw_part(void (*func) (DATA *), int state, DATA * data) { data->func = func; data->state = state; use_window(stdscr, really_draw, (void *) data); napsome(); } /* * Tell the threads that one of them can start work on a new raindrop. * They may all be busy if we're sending requests too rapidly. */ static int put_next_drop(void) { pthread_cond_signal(&cond_next_drop); pthread_mutex_unlock(&mutex_next_drop); return 0; } /* * Wait until we're assigned the task of drawing a new raindrop. */ static int get_next_drop(void) { pthread_mutex_lock(&mutex_next_drop); pthread_cond_wait(&cond_next_drop, &mutex_next_drop); return TRUE; } static void * draw_drop(void *arg) { DATA mydata; int mystats; /* * Find myself in the list of threads so we can count the number of loops. */ for (mystats = 0; mystats < MAX_THREADS; ++mystats) { #if defined(__MINGW32__) && !defined(__WINPTHREADS_VERSION) if (drop_threads[mystats].myself.p == pthread_self().p) #else if (drop_threads[mystats].myself == pthread_self()) #endif break; } do { if (mystats < MAX_THREADS) drop_threads[mystats].counter++; /* * Make a copy of caller's data. We're cheating for the cases after * the first loop since we still have a pointer into the main thread * to the data which it uses for setting up this thread (but it has * been modified to use different coordinates). */ mydata = *(DATA *) arg; draw_part(part1, 0, &mydata); draw_part(part2, 1, &mydata); draw_part(part3, 2, &mydata); draw_part(part4, 3, &mydata); draw_part(part5, 4, &mydata); draw_part(part6, 0, &mydata); } while (get_next_drop()); return NULL; } /* * The description of pthread_create() is misleading, since it implies that * threads will exit cleanly after their function returns. * * Since they do not (and the number of threads is limited by system * resources), make a limited number of threads, and signal any that are * waiting when we want a thread past that limit. */ static int start_drop(DATA * data) { int rc; if (!used_threads) { /* mutex and condition for signalling thread */ pthread_mutex_init(&mutex_next_drop, NULL); pthread_cond_init(&cond_next_drop, NULL); } if (used_threads < MAX_THREADS) { rc = pthread_create(&(drop_threads[used_threads].myself), NULL, draw_drop, data); ++used_threads; } else { rc = put_next_drop(); } return rc; } #endif static int get_input(void) { return USING_WINDOW(stdscr, wgetch); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { bool done = FALSE; DATA drop; #ifndef USE_PTHREADS DATA last[MAX_DROP]; #endif int j = 0; setlocale(LC_ALL, ""); CATCHALL(onsig); initscr(); if (has_colors()) { int bg = COLOR_BLACK; start_color(); #if HAVE_USE_DEFAULT_COLORS if (use_default_colors() == OK) bg = -1; #endif init_pair(1, COLOR_BLUE, (short) bg); init_pair(2, COLOR_CYAN, (short) bg); } nl(); noecho(); curs_set(0); timeout(0); #ifndef USE_PTHREADS for (j = MAX_DROP; --j >= 0;) { last[j].x = random_x(); last[j].y = random_y(); } j = 0; #endif while (!done) { drop.x = random_x(); drop.y = random_y(); #ifdef USE_PTHREADS if (start_drop(&drop) != 0) { beep(); } #else /* * The non-threaded code draws parts of each drop on each loop. */ part1(&drop); part2(&last[j]); j = next_j(j); part3(&last[j]); j = next_j(j); part4(&last[j]); j = next_j(j); part5(&last[j]); j = next_j(j); part6(&last[j]); last[j] = drop; #endif switch (get_input()) { case ('q'): case ('Q'): done = TRUE; break; case 's': nodelay(stdscr, FALSE); break; case ' ': nodelay(stdscr, TRUE); break; #ifdef KEY_RESIZE case (KEY_RESIZE): break; #endif } napms(50); } curs_set(1); endwin(); #ifdef USE_PTHREADS printf("Counts per thread:\n"); for (j = 0; j < MAX_THREADS; ++j) printf(" %d:%ld\n", j, drop_threads[j].counter); #endif ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/redraw.c0000644000175100001440000001124112060723412015057 0ustar tomusers/**************************************************************************** * Copyright (c) 2006-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: redraw.c,v 1.8 2012/12/08 20:46:02 tom Exp $ * * Demonstrate the redrawwin() and wredrawln() functions. * Thomas Dickey - 2006/11/4 */ #include static void trash(int beg_x, int max_x, int cur_x) { int x; for (x = cur_x; x > beg_x; --x) { putchar('\b'); } for (x = beg_x; x < max_x; ++x) { if (x < cur_x) putchar('<'); else if (x == cur_x) putchar('='); else if (x > cur_x) putchar('>'); } for (x = max_x; x > cur_x; --x) { putchar('\b'); } } static void test_redraw(WINDOW *win) { WINDOW *win1; WINDOW *win2; bool done = FALSE; int ch, y, x; int max_y, max_x; int beg_y, beg_x; assert(win != 0); scrollok(win, TRUE); keypad(win, TRUE); getmaxyx(win, max_y, max_x); getbegyx(win, beg_y, beg_x); while (!done) { ch = wgetch(win); getyx(win, y, x); switch (ch) { case 'q': /* FALLTHRU */ case ESCAPE: done = TRUE; break; case 'w': win1 = newwin(max_y, max_x, beg_y, beg_x); win2 = newwin(max_y - 2, max_x - 2, beg_y + 1, beg_x + 1); box(win1, 0, 0); wrefresh(win1); test_redraw(win2); delwin(win2); delwin(win1); touchwin(win); break; case '!': /* * redrawwin() and wredrawln() do not take into account the * possibility that the cursor may have moved. That makes them * cumbersome for using with a shell command. So we simply * trash the current line of the window using backspace/overwrite. */ trash(beg_x, max_x, x + beg_x); break; #ifdef NCURSES_VERSION case '@': /* * For a shell command, we can work around the problem noted above * using mvcur(). It is ifdef'd for NCURSES, since X/Open does * not define the case where the old location is unknown. */ IGNORE_RC(system("date")); mvcur(-1, -1, y, x); break; #endif case CTRL('W'): redrawwin(win); break; case CTRL('L'): wredrawln(win, y, 1); break; case KEY_UP: if (y > 0) wmove(win, y - 1, x); break; case KEY_DOWN: if (y < max_y) wmove(win, y + 1, x); break; case KEY_LEFT: if (x > 0) wmove(win, y, x - 1); break; case KEY_RIGHT: if (x < max_x) wmove(win, y, x + 1); break; default: if (ch > KEY_MIN) { waddstr(win, keyname(ch)); } else { waddstr(win, unctrl(UChar(ch))); } break; } wnoutrefresh(win); doupdate(); } } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { initscr(); raw(); noecho(); test_redraw(stdscr); endwin(); ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/test/foldkeys.c0000644000175100001440000001670011467632305015432 0ustar tomusers/**************************************************************************** * Copyright (c) 2006 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Author: Thomas E. Dickey, 2006 * * $Id: foldkeys.c,v 1.4 2010/11/14 01:00:53 tom Exp $ * * Demonstrate a method for altering key definitions at runtime. * * This program reads the key definitions, merging those which have xterm-style * modifiers into their equivalents which have no modifiers. It does this * merging only for the keys which are defined in the terminal description. */ #include #if defined(NCURSES_VERSION) && NCURSES_EXT_FUNCS #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif #define MY_LOGFILE "demo_foldkeys.log" #define MY_KEYS (KEY_MAX + 1) /* * Log the most recently-written line to our logfile */ static void log_last_line(WINDOW *win) { FILE *fp; int y, x, n; char temp[256]; if ((fp = fopen(MY_LOGFILE, "a")) != 0) { int need = sizeof(temp) - 1; if (need > COLS) need = COLS; getyx(win, y, x); wmove(win, y - 1, 0); n = winnstr(win, temp, need); while (n-- > 0) { if (isspace(UChar(temp[n]))) temp[n] = '\0'; else break; } wmove(win, y, x); fprintf(fp, "%s\n", temp); fclose(fp); } } /* * ncurses has no API for telling what the actual last key-code is. That is * a secret because the codes past KEY_MAX are computed at run-time and may * differ depending on the previous calls to newterm(), etc. It is unlikely * that one could have more than a thousand key definitions... */ #define MAX_KEYS 2000 typedef struct { const char *name; const char *value; int code; int state; } KeyInfo; static void demo_foldkeys(void) { KeyInfo info[MAX_KEYS]; int info_len = 0; int merged = 0; int code; int j, k; /* * Tell ncurses that we want to use function keys. That will make it add * any user-defined keys that appear in the terminfo. */ keypad(stdscr, TRUE); /* * List the predefined keys using the strnames[] array. */ for (code = 0; code < STRCOUNT; ++code) { NCURSES_CONST char *name = strnames[code]; NCURSES_CONST char *value = tigetstr(name); if (value != 0 && value != (NCURSES_CONST char *) -1) { info[info_len].name = strnames[code]; info[info_len].code = key_defined(value); info[info_len].value = value; info[info_len].state = 0; if (info[info_len].code > 0) ++info_len; } } /* * We can get the names for user-defined keys from keyname(). It returns * a name like KEY_foo for the predefined keys, which tigetstr() does not * understand. */ for (code = KEY_MAX; code < MAX_KEYS; ++code) { NCURSES_CONST char *name = keyname(code); if (name != 0) { info[info_len].name = name; info[info_len].code = code; info[info_len].value = tigetstr(name); info[info_len].state = 0; ++info_len; } } printw("Initially %d key definitions\n", info_len); /* * Look for keys that have xterm-style modifiers. */ for (j = 0; j < info_len; ++j) { int first, second; char final[2]; char *value; if (info[j].state == 0 && sscanf(info[j].value, "\033[%d;%d%c", &first, &second, final) == 3 && *final != ';' && (value = strdup(info[j].value)) != 0) { sprintf(value, "\033[%d%c", first, *final); for (k = 0; k < info_len; ++k) { if (info[k].state == 0 && !strcmp(info[k].value, value)) { info[j].state = 1; break; } } if (info[j].state == 0) { sprintf(value, "\033O%c", *final); for (k = 0; k < info_len; ++k) { if (info[k].state == 0 && !strcmp(info[k].value, value)) { info[j].state = 1; break; } } } if (info[j].state == 1) { if ((define_key(info[j].value, info[k].code)) != ERR) { printw("map %s to %s\n", info[j].value, info[k].value); keyok(info[j].code, FALSE); ++merged; } else { printw("? cannot define_key %d:%s\n", j, info[j].value); } } else { printw("? cannot merge %d:%s\n", j, info[j].value); } free(value); } } printw("Merged to %d key definitions\n", info_len - merged); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int ch; #if HAVE_GETTIMEOFDAY int secs, msecs; struct timeval current, previous; #endif unlink(MY_LOGFILE); newterm(0, stdout, stdin); (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ scrollok(stdscr, TRUE); keypad(stdscr, TRUE); move(0, 0); demo_foldkeys(); #if HAVE_GETTIMEOFDAY gettimeofday(&previous, 0); #endif while ((ch = getch()) != ERR) { bool escaped = (ch >= MY_KEYS); const char *name = keyname(escaped ? (ch - MY_KEYS) : ch); #if HAVE_GETTIMEOFDAY gettimeofday(¤t, 0); secs = (int) (current.tv_sec - previous.tv_sec); msecs = (int) ((current.tv_usec - previous.tv_usec) / 1000); if (msecs < 0) { msecs += 1000; --secs; } if (msecs >= 1000) { secs += msecs / 1000; msecs %= 1000; } printw("%6d.%03d ", secs, msecs); previous = current; #endif printw("Keycode %d, name %s%s\n", ch, escaped ? "ESC-" : "", name != 0 ? name : ""); log_last_line(stdscr); clrtoeol(); if (ch == 'q') break; } endwin(); ExitProgram(EXIT_SUCCESS); } #else int main(void) { printf("This program requires the ncurses library\n"); ExitProgram(EXIT_FAILURE); } #endif ncurses-6.0-20160213/test/test_vidputs.c0000644000175100001440000000770312362575306016354 0ustar tomusers/**************************************************************************** * Copyright (c) 2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * $Id: test_vidputs.c,v 1.5 2014/07/19 23:09:58 tom Exp $ * * Demonstrate the vidputs and vidattr functions. * Thomas Dickey - 2013/01/12 */ #define USE_TINFO #include #if HAVE_SETUPTERM && HAVE_VIDPUTS #define valid(s) ((s != 0) && s != (char *)-1) static FILE *my_fp; static bool p_opt = FALSE; static TPUTS_PROTO(outc, c) { int rc = c; rc = putc(c, my_fp); TPUTS_RETURN(rc); } static bool outs(const char *s) { if (valid(s)) { tputs(s, 1, outc); return TRUE; } return FALSE; } static void cleanup(void) { outs(exit_attribute_mode); if (!outs(orig_colors)) outs(orig_pair); outs(cursor_normal); } static void change_attr(chtype attr) { if (p_opt) { vidputs(attr, outc); } else { vidattr(attr); } } static void test_vidputs(void) { fprintf(my_fp, "Name: "); change_attr(A_BOLD); fputs("Bold", my_fp); change_attr(A_REVERSE); fputs(" Reverse", my_fp); change_attr(A_NORMAL); fputs("\n", my_fp); } static void usage(void) { static const char *tbl[] = { "Usage: test_vidputs [options]" ,"" ,"Options:" ," -e use stderr (default stdout)" ," -p use vidputs (default vidattr)" }; unsigned n; for (n = 0; n < SIZEOF(tbl); ++n) fprintf(stderr, "%s\n", tbl[n]); ExitProgram(EXIT_FAILURE); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { int ch; my_fp = stdout; while ((ch = getopt(argc, argv, "ep")) != -1) { switch (ch) { case 'e': my_fp = stderr; break; case 'p': p_opt = TRUE; break; default: usage(); break; } } if (optind < argc) usage(); setupterm((char *) 0, 1, (int *) 0); test_vidputs(); cleanup(); ExitProgram(EXIT_SUCCESS); } #else int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { fprintf(stderr, "This program requires terminfo\n"); exit(EXIT_FAILURE); } #endif ncurses-6.0-20160213/configure0000755000175100001440000240223312655466310014401 0ustar tomusers#! /bin/sh # From configure.in Revision: 1.626 . # Guess values for system-dependent variables and create Makefiles. # Generated by Autoconf 2.52.20150926. # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} ac_unique_file="ncurses/base/lib_initscr.c" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${datarootdir}/info' mandir='${datarootdir}/man' # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. build=$build_alias host=$host_alias target=$target_alias # FIXME: should be removed in autoconf 3.0. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat < if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. EOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue cd $ac_subdir # A "../" for each directory in /$ac_subdir. ac_dots=`echo $ac_subdir | sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'` case $srcdir in .) # No --srcdir option. We are building in place. ac_sub_srcdir=$srcdir ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_sub_srcdir=$srcdir/$ac_subdir ;; *) # Relative path. ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;; esac # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_sub_srcdir/configure.gnu; then echo $SHELL $ac_sub_srcdir/configure.gnu --help=recursive elif test -f $ac_sub_srcdir/configure; then echo $SHELL $ac_sub_srcdir/configure --help=recursive elif test -f $ac_sub_srcdir/configure.ac || test -f $ac_sub_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\EOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. EOF exit 0 fi exec 5>config.log cat >&5 </dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` PATH = $PATH _ASUNAME } >&5 cat >&5 <\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" ac_sep=" " ;; *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" ac_sep=" " ;; esac # Get rid of the leading space. done # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. trap 'exit_status=$? # Save into config.log some information that might help in debugging. echo >&5 echo "## ----------------- ##" >&5 echo "## Cache variables. ##" >&5 echo "## ----------------- ##" >&5 echo >&5 # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } >&5 sed "/^$/d" confdefs.h >conftest.log if test -s conftest.log; then echo >&5 echo "## ------------ ##" >&5 echo "## confdefs.h. ##" >&5 echo "## ------------ ##" >&5 echo >&5 cat conftest.log >&5 fi (echo; echo) >&5 test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" >&5 echo "$as_me: exit $exit_status" >&5 rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:1034: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} cat "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:1045: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:1053: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:1069: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:1073: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:1079: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:1081: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:1083: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. It doesn't matter if # we pass some twice (in addition to the command line arguments). if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:1102: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:1104: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return case `echo "testing\c" 2>/dev/null; echo 1,2,3`,`echo -n testing 2>/dev/null; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C= # newlines do not sed ;-) only broken shells would use this case anyway ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac echo "#! $SHELL" >conftest.sh echo "exit 0" >>conftest.sh chmod +x conftest.sh if { (echo "$as_me:1125: PATH=\".;.\"; conftest.sh") >&5 (PATH=".;."; conftest.sh) 2>&5 ac_status=$? echo "$as_me:1128: \$? = $ac_status" >&5 (exit $ac_status); }; then ac_path_separator=';' else ac_path_separator=: fi PATH_SEPARATOR="$ac_path_separator" rm -f conftest.sh ac_config_headers="$ac_config_headers include/ncurses_cfg.h:include/ncurses_cfg.hin" top_builddir=`pwd` echo "$as_me:1141: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:1151: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep test -z "$EGREP" && { { echo "$as_me:1155: error: No egrep program found" >&5 echo "$as_me: error: No egrep program found" >&2;} { (exit 1); exit 1; }; } NCURSES_MAJOR="`$ac_cv_prog_egrep '^NCURSES_MAJOR[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" NCURSES_MINOR="`$ac_cv_prog_egrep '^NCURSES_MINOR[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" NCURSES_PATCH="`$ac_cv_prog_egrep '^NCURSES_PATCH[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" cf_cv_abi_version=${NCURSES_MAJOR} cf_cv_rel_version=${NCURSES_MAJOR}.${NCURSES_MINOR} cf_cv_timestamp=`date` echo "$as_me:1165: result: Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)" >&5 echo "${ECHO_T}Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)" >&6 if test -f $srcdir/VERSION ; then echo "$as_me:1169: checking for package version" >&5 echo $ECHO_N "checking for package version... $ECHO_C" >&6 # if there are not enough fields, cut returns the last one... cf_field1=`sed -e '2,$d' $srcdir/VERSION|cut -f1` cf_field2=`sed -e '2,$d' $srcdir/VERSION|cut -f2` cf_field3=`sed -e '2,$d' $srcdir/VERSION|cut -f3` # this is how CF_BUNDLED_INTL uses $VERSION: VERSION="$cf_field1" VERSION_MAJOR=`echo "$cf_field2" | sed -e 's/\..*//'` test -z "$VERSION_MAJOR" && { { echo "$as_me:1181: error: missing major-version" >&5 echo "$as_me: error: missing major-version" >&2;} { (exit 1); exit 1; }; } VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[^.]*\.//' -e 's/-.*//'` test -z "$VERSION_MINOR" && { { echo "$as_me:1186: error: missing minor-version" >&5 echo "$as_me: error: missing minor-version" >&2;} { (exit 1); exit 1; }; } echo "$as_me:1190: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5 echo "${ECHO_T}${VERSION_MAJOR}.${VERSION_MINOR}" >&6 echo "$as_me:1193: checking for package patch date" >&5 echo $ECHO_N "checking for package patch date... $ECHO_C" >&6 VERSION_PATCH=`echo "$cf_field3" | sed -e 's/^[^-]*-//'` case .$VERSION_PATCH in (.) { { echo "$as_me:1198: error: missing patch-date $VERSION_PATCH" >&5 echo "$as_me: error: missing patch-date $VERSION_PATCH" >&2;} { (exit 1); exit 1; }; } ;; (.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) ;; (*) { { echo "$as_me:1205: error: illegal patch-date $VERSION_PATCH" >&5 echo "$as_me: error: illegal patch-date $VERSION_PATCH" >&2;} { (exit 1); exit 1; }; } ;; esac echo "$as_me:1210: result: $VERSION_PATCH" >&5 echo "${ECHO_T}$VERSION_PATCH" >&6 else { { echo "$as_me:1213: error: did not find $srcdir/VERSION" >&5 echo "$as_me: error: did not find $srcdir/VERSION" >&2;} { (exit 1); exit 1; }; } fi # show the actual data that we have for versions: test -n "$verbose" && echo " ABI VERSION $VERSION" 1>&6 echo "${as_me:-configure}:1221: testing ABI VERSION $VERSION ..." 1>&5 test -n "$verbose" && echo " VERSION_MAJOR $VERSION_MAJOR" 1>&6 echo "${as_me:-configure}:1225: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5 test -n "$verbose" && echo " VERSION_MINOR $VERSION_MINOR" 1>&6 echo "${as_me:-configure}:1229: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5 test -n "$verbose" && echo " VERSION_PATCH $VERSION_PATCH" 1>&6 echo "${as_me:-configure}:1233: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5 cf_PACKAGE=NCURSES PACKAGE=ncurses cat >>confdefs.h <>confdefs.h <>confdefs.h <&5 echo "$as_me: WARNING: overriding release version $cf_cv_rel_version to $withval" >&2;} cf_cv_rel_version=$withval fi; NCURSES_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'` NCURSES_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[^.]*//' -e 's/^\.//' -e 's/\..*//'` if test -n "$NCURSES_MAJOR" ; then case $NCURSES_MAJOR in ([0-9]*) ;; (*) { { echo "$as_me:1270: error: Release major-version is not a number: $NCURSES_MAJOR" >&5 echo "$as_me: error: Release major-version is not a number: $NCURSES_MAJOR" >&2;} { (exit 1); exit 1; }; } ;; esac else { { echo "$as_me:1276: error: Release major-version value is empty" >&5 echo "$as_me: error: Release major-version value is empty" >&2;} { (exit 1); exit 1; }; } fi if test -n "$NCURSES_MINOR" ; then case $NCURSES_MINOR in ([0-9]*) ;; (*) { { echo "$as_me:1286: error: Release minor-version is not a number: $NCURSES_MINOR" >&5 echo "$as_me: error: Release minor-version is not a number: $NCURSES_MINOR" >&2;} { (exit 1); exit 1; }; } ;; esac else { { echo "$as_me:1292: error: Release minor-version value is empty" >&5 echo "$as_me: error: Release minor-version value is empty" >&2;} { (exit 1); exit 1; }; } fi test -z "$cf_cv_abi_version" && cf_cv_abi_version=0 # Check whether --with-abi-version or --without-abi-version was given. if test "${with_abi_version+set}" = set; then withval="$with_abi_version" if test "x$cf_cv_abi_version" != "x$withval" then { echo "$as_me:1305: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&5 echo "$as_me: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&2;} case $cf_cv_rel_version in (5.*) cf_cv_rel_version=$withval.0 ;; (6.*) cf_cv_rel_version=$withval.9 # FIXME: should be 10 as of 6.0 release ;; esac fi cf_cv_abi_version=$withval fi; if test -n "$cf_cv_abi_version" ; then case $cf_cv_abi_version in ([0-9]*) ;; (*) { { echo "$as_me:1324: error: ABI version is not a number: $cf_cv_abi_version" >&5 echo "$as_me: error: ABI version is not a number: $cf_cv_abi_version" >&2;} { (exit 1); exit 1; }; } ;; esac else { { echo "$as_me:1330: error: ABI version value is empty" >&5 echo "$as_me: error: ABI version value is empty" >&2;} { (exit 1); exit 1; }; } fi if test "x$cf_cv_abi_version" != "x$with_abi_version" then case $cf_cv_rel_version in (5.*) cf_cv_rel_version=$with_abi_version.0 ;; esac fi ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:1361: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:1371: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:1375: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:1384: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:1388: error: $ac_config_sub $ac_cv_build_alias failed." >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1393: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:1400: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:1409: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1414: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then echo "$as_me:1422: checking target system type" >&5 echo $ECHO_N "checking target system type... $ECHO_C" >&6 if test "${ac_cv_target+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_target_alias=$target_alias test "x$ac_cv_target_alias" = "x" && ac_cv_target_alias=$ac_cv_host_alias ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || { { echo "$as_me:1431: error: $ac_config_sub $ac_cv_target_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1436: result: $ac_cv_target" >&5 echo "${ECHO_T}$ac_cv_target" >&6 target=$ac_cv_target target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" if test -z "$system_name" ; then system_name="`(hostname) 2>/dev/null`" fi fi test -n "$system_name" && cat >>confdefs.h <&6 else cf_cv_system_name="$system_name" fi test -z "$system_name" && system_name="$cf_cv_system_name" test -n "$cf_cv_system_name" && echo "$as_me:1468: result: Configuring for $cf_cv_system_name" >&5 echo "${ECHO_T}Configuring for $cf_cv_system_name" >&6 if test ".$system_name" != ".$cf_cv_system_name" ; then echo "$as_me:1472: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5 echo "${ECHO_T}Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&6 { { echo "$as_me:1474: error: \"Please remove config.cache and try again.\"" >&5 echo "$as_me: error: \"Please remove config.cache and try again.\"" >&2;} { (exit 1); exit 1; }; } fi # Check whether --with-system-type or --without-system-type was given. if test "${with_system_type+set}" = set; then withval="$with_system_type" { echo "$as_me:1482: WARNING: overriding system type to $withval" >&5 echo "$as_me: WARNING: overriding system type to $withval" >&2;} cf_cv_system_name=$withval host_os=$withval fi; ### Save the given $CFLAGS to allow user-override. cf_user_CFLAGS="$CFLAGS" ### Default install-location echo "$as_me:1494: checking for prefix" >&5 echo $ECHO_N "checking for prefix... $ECHO_C" >&6 if test "x$prefix" = "xNONE" ; then case "$cf_cv_system_name" in # non-vendor systems don't have a conflict (openbsd*|freebsd*|mirbsd*|linux*|cygwin*|msys*|k*bsd*-gnu|mingw*) prefix=/usr ;; (*) prefix=$ac_default_prefix ;; esac fi echo "$as_me:1506: result: $prefix" >&5 echo "${ECHO_T}$prefix" >&6 if test "x$prefix" = "xNONE" ; then echo "$as_me:1510: checking for default include-directory" >&5 echo $ECHO_N "checking for default include-directory... $ECHO_C" >&6 test -n "$verbose" && echo 1>&6 for cf_symbol in \ $includedir \ $includedir/ncurses \ $prefix/include \ $prefix/include/ncurses \ /usr/local/include \ /usr/local/include/ncurses \ /usr/include \ /usr/include/ncurses do cf_dir=`eval echo $cf_symbol` if test -f $cf_dir/curses.h ; then if ( fgrep NCURSES_VERSION $cf_dir/curses.h 2>&1 >/dev/null ) ; then includedir="$cf_symbol" test -n "$verbose" && echo $ac_n " found " 1>&6 break fi fi test -n "$verbose" && echo " tested $cf_dir" 1>&6 done echo "$as_me:1533: result: $includedir" >&5 echo "${ECHO_T}$includedir" >&6 fi ### Defaults for ncurses ABI case x$cf_cv_abi_version in (x[6789]) cf_dft_ext_colors=yes cf_dft_ext_const=yes cf_dft_ext_mouse=yes cf_dft_ext_putwin=yes cf_dft_ext_spfuncs=yes cf_dft_filter_syms=yes cf_dft_chtype=uint32_t cf_dft_mmask_t=uint32_t cf_dft_interop=yes cf_dft_tparm_arg=intptr_t cf_dft_with_lp64=yes ;; (*) cf_dft_ext_colors=no cf_dft_ext_const=no cf_dft_ext_mouse=no cf_dft_ext_putwin=no cf_dft_ext_spfuncs=no cf_dft_filter_syms=no cf_dft_chtype=auto cf_dft_mmask_t=auto cf_dft_interop=no cf_dft_tparm_arg=long cf_dft_with_lp64=no ;; esac ### Checks for programs. # Check whether --with-ada or --without-ada was given. if test "${with_ada+set}" = set; then withval="$with_ada" cf_with_ada=$withval else cf_with_ada=yes fi; if test "x$cf_with_ada" = xyes then cf_PROG_CC="gnatgcc gcc cc" else cf_PROG_CC="gcc cc" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return if test -n "$ac_tool_prefix"; then for ac_prog in $cf_PROG_CC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:1595: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:1610: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1618: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1621: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $cf_PROG_CC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:1634: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:1649: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1657: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1660: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi test -z "$CC" && { { echo "$as_me:1670: error: no acceptable cc found in \$PATH" >&5 echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:1675:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:1678: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:1681: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:1683: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:1686: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:1688: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:1691: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF #line 1695 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:1711: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:1714: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:1717: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. for ac_file in `ls a.exe conftest.exe 2>/dev/null; ls a.out conftest 2>/dev/null; ls a.* conftest.* 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; a.out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:1740: error: C compiler cannot create executables" >&5 echo "$as_me: error: C compiler cannot create executables" >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:1746: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:1751: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:1757: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1760: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:1767: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:1775: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:1782: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:1784: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:1787: checking for executable suffix" >&5 echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 if { (eval echo "$as_me:1789: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:1792: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:1808: error: cannot compute EXEEXT: cannot compile and link" >&5 echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:1814: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:1820: checking for object suffix" >&5 echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1826 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:1838: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1841: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:1853: error: cannot compute OBJEXT: cannot compile" >&5 echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:1860: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:1864: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1870 "configure" #include "confdefs.h" int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1885: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1888: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1891: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1894: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:1906: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:1912: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 1918 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1930: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1933: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1936: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1939: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:1949: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:1976: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1979: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:1982: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1985: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line 1997 "configure" #include "confdefs.h" #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2010: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2013: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2016: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2019: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 2029 "configure" #include "confdefs.h" $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2041: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2044: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2047: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2050: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -rf conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return GCC_VERSION=none if test "$GCC" = yes ; then echo "$as_me:2080: checking version of $CC" >&5 echo $ECHO_N "checking version of $CC... $ECHO_C" >&6 GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`" test -z "$GCC_VERSION" && GCC_VERSION=unknown echo "$as_me:2084: result: $GCC_VERSION" >&5 echo "${ECHO_T}$GCC_VERSION" >&6 fi echo "$as_me:2088: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF #line 2096 "configure" #include "confdefs.h" #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:2145: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2148: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2151: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2154: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:2171: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:2174: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # This should have been defined by AC_PROG_CC : ${CC:=cc} echo "$as_me:2182: checking \$CC variable" >&5 echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6 case "$CC" in (*[\ \ ]-[IUD]*) echo "$as_me:2186: result: broken" >&5 echo "${ECHO_T}broken" >&6 { echo "$as_me:2188: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&5 echo "$as_me: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;} # humor him... cf_flags=`echo "$CC" | sed -e 's/^[^ ]*[ ]//'` CC=`echo "$CC" | sed -e 's/[ ].*//'` cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_flags do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi ;; (*) echo "$as_me:2274: result: ok" >&5 echo "${ECHO_T}ok" >&6 ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return echo "$as_me:2285: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line 2306 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:2311: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2317: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line 2340 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:2344: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2350: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:2387: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line 2397 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:2402: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2408: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line 2431 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:2435: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:2441: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:2469: error: C preprocessor \"$CPP\" fails sanity check" >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return if test $ac_cv_c_compiler_gnu = yes; then echo "$as_me:2482: checking whether $CC needs -traditional" >&5 echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 if test "${ac_cv_prog_gcc_traditional+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_pattern="Autoconf.*'x'" cat >conftest.$ac_ext <<_ACEOF #line 2489 "configure" #include "confdefs.h" #include int Autoconf = TIOCGETP; _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -rf conftest* if test $ac_cv_prog_gcc_traditional = no; then cat >conftest.$ac_ext <<_ACEOF #line 2504 "configure" #include "confdefs.h" #include int Autoconf = TCGETA; _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes fi rm -rf conftest* fi fi echo "$as_me:2517: result: $ac_cv_prog_gcc_traditional" >&5 echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi echo "$as_me:2524: checking whether $CC understands -c and -o together" >&5 echo $ECHO_N "checking whether $CC understands -c and -o together... $ECHO_C" >&6 if test "${cf_cv_prog_CC_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat > conftest.$ac_ext < int main() { ${cf_cv_main_return:-return}(0); } CF_EOF # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' if { (eval echo "$as_me:2540: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2543: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (eval echo "$as_me:2545: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2548: \$? = $ac_status" >&5 (exit $ac_status); }; then eval cf_cv_prog_CC_c_o=yes else eval cf_cv_prog_CC_c_o=no fi rm -rf conftest* fi if test $cf_cv_prog_CC_c_o = yes; then echo "$as_me:2559: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:2562: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$cross_compiling" = yes ; then LDCONFIG=: else case "$cf_cv_system_name" in (dragonfly*|mirbsd*|freebsd*) test -z "$LDCONFIG" && LDCONFIG="/sbin/ldconfig -R" ;; (*) LDPATH=$PATH:/sbin:/usr/sbin # Extract the first word of "ldconfig", so it can be a program name with args. set dummy ldconfig; ac_word=$2 echo "$as_me:2576: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_LDCONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $LDCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_LDCONFIG="$LDCONFIG" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$LDPATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_LDCONFIG="$ac_dir/$ac_word" echo "$as_me:2593: found $ac_dir/$ac_word" >&5 break fi done ;; esac fi LDCONFIG=$ac_cv_path_LDCONFIG if test -n "$LDCONFIG"; then echo "$as_me:2604: result: $LDCONFIG" >&5 echo "${ECHO_T}$LDCONFIG" >&6 else echo "$as_me:2607: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; esac fi echo "$as_me:2615: checking if you want to ensure bool is consistent with C++" >&5 echo $ECHO_N "checking if you want to ensure bool is consistent with C++... $ECHO_C" >&6 # Check whether --with-cxx or --without-cxx was given. if test "${with_cxx+set}" = set; then withval="$with_cxx" cf_with_cxx=$withval else cf_with_cxx=yes fi; echo "$as_me:2625: result: $cf_with_cxx" >&5 echo "${ECHO_T}$cf_with_cxx" >&6 if test "X$cf_with_cxx" = Xno ; then CXX="" GXX="" else # with autoconf 2.13, we can change the error to a warning: ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_main_return=return if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:2643: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:2658: found $ac_dir/$ac_word" >&5 break done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:2666: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:2669: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2682: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:2697: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:2705: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:2708: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:2720:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:2723: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:2726: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:2728: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:2731: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:2733: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:2736: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:2739: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2745 "configure" #include "confdefs.h" int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2760: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2763: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2766: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2769: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:2781: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:2787: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 2793 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2805: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2808: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2811: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2814: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:2824: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line 2851 "configure" #include "confdefs.h" #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2864: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2867: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2870: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2873: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 2883 "configure" #include "confdefs.h" $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2895: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2898: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2901: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2904: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -rf conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_main_return=return if test "x$cf_with_cxx" != xno then # Several of the C++ configurations do not work, particularly when # cross-compiling (20140913 -TD) echo "$as_me:2938: checking if $CXX works" >&5 echo $ECHO_N "checking if $CXX works... $ECHO_C" >&6 save_CPPFLAGS="$CPPFLAGS" eval cf_includedir=${includedir} CPPFLAGS="$CPPFLAGS -I${cf_includedir}" cat >conftest.$ac_ext <<_ACEOF #line 2946 "configure" #include "confdefs.h" #include #include int main () { printf("Hello world!\n") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:2963: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2966: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:2969: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2972: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cxx_works=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cxx_works=no fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$save_CPPFLAGS" echo "$as_me:2983: result: $cf_cxx_works" >&5 echo "${ECHO_T}$cf_cxx_works" >&6 if test "x$cf_cxx_works" = xno then { echo "$as_me:2987: WARNING: Ignore $CXX, since it cannot compile hello-world." >&5 echo "$as_me: WARNING: Ignore $CXX, since it cannot compile hello-world." >&2;} cf_with_cxx=no; CXX=""; GXX=""; fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return # autoconf 2.5x removed the error (hardcoding it to g++, or just blank) if test "$CXX" = "g++" ; then # Extract the first word of "g++", so it can be a program name with args. set dummy g++; ac_word=$2 echo "$as_me:3003: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $CXX in [\\/]* | ?:[\\/]*) ac_cv_path_CXX="$CXX" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_CXX="$ac_dir/$ac_word" echo "$as_me:3020: found $ac_dir/$ac_word" >&5 break fi done ;; esac fi CXX=$ac_cv_path_CXX if test -n "$CXX"; then echo "$as_me:3031: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:3034: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi case "x$CXX" in (x|xg++) { echo "$as_me:3041: WARNING: You don't have any C++ compiler, too bad" >&5 echo "$as_me: WARNING: You don't have any C++ compiler, too bad" >&2;} cf_with_cxx=no; CXX=""; GXX=""; ;; esac fi GXX_VERSION=none if test "$GXX" = yes; then echo "$as_me:3050: checking version of ${CXX:-g++}" >&5 echo $ECHO_N "checking version of ${CXX:-g++}... $ECHO_C" >&6 GXX_VERSION="`${CXX:-g++} --version| sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`" test -z "$GXX_VERSION" && GXX_VERSION=unknown echo "$as_me:3054: result: $GXX_VERSION" >&5 echo "${ECHO_T}$GXX_VERSION" >&6 fi case $GXX_VERSION in (1*|2.[0-6]*) # GXX=""; CXX=""; ac_cv_prog_gxx=no # cf_cxx_library=no { echo "$as_me:3062: WARNING: templates do not work" >&5 echo "$as_me: WARNING: templates do not work" >&2;} ;; esac echo "$as_me:3067: checking if you want to build C++ binding and demo" >&5 echo $ECHO_N "checking if you want to build C++ binding and demo... $ECHO_C" >&6 # Check whether --with-cxx-binding or --without-cxx-binding was given. if test "${with_cxx_binding+set}" = set; then withval="$with_cxx_binding" cf_with_cxx_binding=$withval else cf_with_cxx_binding=$cf_with_cxx fi; echo "$as_me:3077: result: $cf_with_cxx_binding" >&5 echo "${ECHO_T}$cf_with_cxx_binding" >&6 echo "$as_me:3080: checking if you want to build with Ada95" >&5 echo $ECHO_N "checking if you want to build with Ada95... $ECHO_C" >&6 echo "$as_me:3082: result: $cf_with_ada" >&5 echo "${ECHO_T}$cf_with_ada" >&6 echo "$as_me:3085: checking if you want to install terminal database" >&5 echo $ECHO_N "checking if you want to install terminal database... $ECHO_C" >&6 # Check whether --enable-db-install or --disable-db-install was given. if test "${enable_db_install+set}" = set; then enableval="$enable_db_install" cf_with_db_install=$enableval else cf_with_db_install=yes fi; echo "$as_me:3095: result: $cf_with_db_install" >&5 echo "${ECHO_T}$cf_with_db_install" >&6 echo "$as_me:3098: checking if you want to install manpages" >&5 echo $ECHO_N "checking if you want to install manpages... $ECHO_C" >&6 # Check whether --with-manpages or --without-manpages was given. if test "${with_manpages+set}" = set; then withval="$with_manpages" cf_with_manpages=$withval else cf_with_manpages=yes fi; echo "$as_me:3108: result: $cf_with_manpages" >&5 echo "${ECHO_T}$cf_with_manpages" >&6 echo "$as_me:3111: checking if you want to build programs such as tic" >&5 echo $ECHO_N "checking if you want to build programs such as tic... $ECHO_C" >&6 # Check whether --with-progs or --without-progs was given. if test "${with_progs+set}" = set; then withval="$with_progs" cf_with_progs=$withval else cf_with_progs=yes fi; echo "$as_me:3121: result: $cf_with_progs" >&5 echo "${ECHO_T}$cf_with_progs" >&6 echo "$as_me:3124: checking if you want to build test-programs" >&5 echo $ECHO_N "checking if you want to build test-programs... $ECHO_C" >&6 # Check whether --with-tests or --without-tests was given. if test "${with_tests+set}" = set; then withval="$with_tests" cf_with_tests=$withval else cf_with_tests=yes fi; echo "$as_me:3134: result: $cf_with_tests" >&5 echo "${ECHO_T}$cf_with_tests" >&6 echo "$as_me:3137: checking if you wish to install curses.h" >&5 echo $ECHO_N "checking if you wish to install curses.h... $ECHO_C" >&6 # Check whether --with-curses-h or --without-curses-h was given. if test "${with_curses_h+set}" = set; then withval="$with_curses_h" with_curses_h=$withval else with_curses_h=yes fi; echo "$as_me:3147: result: $with_curses_h" >&5 echo "${ECHO_T}$with_curses_h" >&6 modules_to_build="ncurses" if test "X$cf_with_progs" != Xno ; then modules_to_build="$modules_to_build progs tack" fi modules_to_build="$modules_to_build panel menu form" test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:3173: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AWK="$ac_prog" echo "$as_me:3188: found $ac_dir/$ac_word" >&5 break done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:3196: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:3199: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done test -z "$AWK" && { { echo "$as_me:3206: error: No awk program found" >&5 echo "$as_me: error: No awk program found" >&2;} { (exit 1); exit 1; }; } echo "$as_me:3210: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:3220: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep test -z "$EGREP" && { { echo "$as_me:3224: error: No egrep program found" >&5 echo "$as_me: error: No egrep program found" >&2;} { (exit 1); exit 1; }; } # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:3240: checking for a BSD compatible install" >&5 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_IFS=$IFS; IFS=$ac_path_separator for ac_dir in $PATH; do IFS=$ac_save_IFS # Account for people who put trailing slashes in PATH elements. case $ac_dir/ in / | ./ | .// | /cC/* \ | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ | /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if $as_executable_p "$ac_dir/$ac_prog"; then if test $ac_prog = install && grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:3289: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' case $INSTALL in (/*) ;; (*) cf_dir=`echo $INSTALL | sed -e 's%/[^/]*$%%'` test -z "$cf_dir" && cf_dir=. INSTALL=`cd $cf_dir && pwd`/`echo $INSTALL | sed -e 's%^.*/%%'` ;; esac for ac_prog in tdlint lint alint splint lclint do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:3314: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LINT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LINT"; then ac_cv_prog_LINT="$LINT" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_LINT="$ac_prog" echo "$as_me:3329: found $ac_dir/$ac_word" >&5 break done fi fi LINT=$ac_cv_prog_LINT if test -n "$LINT"; then echo "$as_me:3337: result: $LINT" >&5 echo "${ECHO_T}$LINT" >&6 else echo "$as_me:3340: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LINT" && break done echo "$as_me:3347: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:3351: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:3354: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi echo "$as_me:3358: checking if $LN_S -f options work" >&5 echo $ECHO_N "checking if $LN_S -f options work... $ECHO_C" >&6 rm -f conf$$.src conf$$dst echo >conf$$.dst echo first >conf$$.src if $LN_S -f conf$$.src conf$$.dst 2>/dev/null; then cf_prog_ln_sf=yes else cf_prog_ln_sf=no fi rm -f conf$$.dst conf$$src echo "$as_me:3370: result: $cf_prog_ln_sf" >&5 echo "${ECHO_T}$cf_prog_ln_sf" >&6 test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f" echo "$as_me:3375: checking for long file names" >&5 echo $ECHO_N "checking for long file names... $ECHO_C" >&6 if test "${ac_cv_sys_long_file_names+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_sys_long_file_names=yes # Test for long file names in all the places we know might matter: # . the current directory, where building will happen # $prefix/lib where we will be installing things # $exec_prefix/lib likewise # eval it to expand exec_prefix. # $TMPDIR if set, where it might want to write temporary files # if $TMPDIR is not set: # /tmp where it might want to write temporary files # /var/tmp likewise # /usr/tmp likewise if test -n "$TMPDIR" && test -d "$TMPDIR" && test -w "$TMPDIR"; then ac_tmpdirs=$TMPDIR else ac_tmpdirs='/tmp /var/tmp /usr/tmp' fi for ac_dir in . $ac_tmpdirs `eval echo $prefix/lib $exec_prefix/lib` ; do test -d $ac_dir || continue test -w $ac_dir || continue # It is less confusing to not echo anything here. ac_xdir=$ac_dir/cf$$ (umask 077 && mkdir $ac_xdir 2>/dev/null) || continue ac_tf1=$ac_xdir/conftest9012345 ac_tf2=$ac_xdir/conftest9012346 (echo 1 >$ac_tf1) 2>/dev/null (echo 2 >$ac_tf2) 2>/dev/null ac_val=`cat $ac_tf1 2>/dev/null` if test ! -f $ac_tf1 || test "$ac_val" != 1; then ac_cv_sys_long_file_names=no rm -rf $ac_xdir 2>/dev/null break fi rm -rf $ac_xdir 2>/dev/null done fi echo "$as_me:3414: result: $ac_cv_sys_long_file_names" >&5 echo "${ECHO_T}$ac_cv_sys_long_file_names" >&6 if test $ac_cv_sys_long_file_names = yes; then cat >>confdefs.h <<\EOF #define HAVE_LONG_FILE_NAMES 1 EOF fi # if we find pkg-config, check if we should install the ".pc" files. echo "$as_me:3426: checking if you want to use pkg-config" >&5 echo $ECHO_N "checking if you want to use pkg-config... $ECHO_C" >&6 # Check whether --with-pkg-config or --without-pkg-config was given. if test "${with_pkg_config+set}" = set; then withval="$with_pkg_config" cf_pkg_config=$withval else cf_pkg_config=yes fi; echo "$as_me:3436: result: $cf_pkg_config" >&5 echo "${ECHO_T}$cf_pkg_config" >&6 case $cf_pkg_config in (no) PKG_CONFIG=none ;; (yes) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 echo "$as_me:3448: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word" echo "$as_me:3465: found $ac_dir/$ac_word" >&5 break fi done ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:3476: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:3479: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:3488: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_ac_pt_PKG_CONFIG="$ac_dir/$ac_word" echo "$as_me:3505: found $ac_dir/$ac_word" >&5 break fi done test -z "$ac_cv_path_ac_pt_PKG_CONFIG" && ac_cv_path_ac_pt_PKG_CONFIG="none" ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then echo "$as_me:3517: result: $ac_pt_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6 else echo "$as_me:3520: result: no" >&5 echo "${ECHO_T}no" >&6 fi PKG_CONFIG=$ac_pt_PKG_CONFIG else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi ;; (*) PKG_CONFIG=$withval ;; esac test -z "$PKG_CONFIG" && PKG_CONFIG=none if test "$PKG_CONFIG" != none ; then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$PKG_CONFIG" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval PKG_CONFIG="$PKG_CONFIG" case ".$PKG_CONFIG" in (.NONE/*) PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:3563: error: expected a pathname, not \"$PKG_CONFIG\"" >&5 echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG\"" >&2;} { (exit 1); exit 1; }; } ;; esac elif test "x$cf_pkg_config" != xno ; then { echo "$as_me:3570: WARNING: pkg-config is not installed" >&5 echo "$as_me: WARNING: pkg-config is not installed" >&2;} fi case $PKG_CONFIG in (no|none|yes) echo "$as_me:3576: checking for pkg-config library directory" >&5 echo $ECHO_N "checking for pkg-config library directory... $ECHO_C" >&6 ;; (*) echo "$as_me:3580: checking for $PKG_CONFIG library directory" >&5 echo $ECHO_N "checking for $PKG_CONFIG library directory... $ECHO_C" >&6 ;; esac PKG_CONFIG_LIBDIR=no # Check whether --with-pkg-config-libdir or --without-pkg-config-libdir was given. if test "${with_pkg_config_libdir+set}" = set; then withval="$with_pkg_config_libdir" PKG_CONFIG_LIBDIR=$withval else test "x$PKG_CONFIG" != xnone && PKG_CONFIG_LIBDIR=yes fi; case x$PKG_CONFIG_LIBDIR in (x/*) ;; (xyes) # Look for the library directory using the same prefix as the executable if test "x$PKG_CONFIG" = xnone then cf_path=$prefix else cf_path=`echo "$PKG_CONFIG" | sed -e 's,/[^/]*/[^/]*$,,'` fi # If you don't like using the default architecture, you have to specify the # intended library directory and corresponding compiler/linker options. # # This case allows for Debian's 2014-flavor of multiarch, along with the # most common variations before that point. Some other variants spell the # directory differently, e.g., "pkg-config", and put it in unusual places. # pkg-config has always been poorly standardized, which is ironic... case x`(arch) 2>/dev/null` in (*64) cf_search_path="\ $cf_path/lib/*64-linux-gnu \ $cf_path/share \ $cf_path/lib64 \ $cf_path/lib32 \ $cf_path/lib" ;; (*) cf_search_path="\ $cf_path/lib/*-linux-gnu \ $cf_path/share \ $cf_path/lib32 \ $cf_path/lib \ $cf_path/libdata" ;; esac test -n "$verbose" && echo " list..." 1>&6 echo "${as_me:-configure}:3635: testing list... ..." 1>&5 for cf_config in $cf_search_path do test -n "$verbose" && echo " checking $cf_config/pkgconfig" 1>&6 echo "${as_me:-configure}:3641: testing checking $cf_config/pkgconfig ..." 1>&5 if test -d $cf_config/pkgconfig then PKG_CONFIG_LIBDIR=$cf_config/pkgconfig echo "$as_me:3646: checking done" >&5 echo $ECHO_N "checking done... $ECHO_C" >&6 break fi done ;; (*) ;; esac if test "x$PKG_CONFIG_LIBDIR" != xno ; then echo "$as_me:3657: result: $PKG_CONFIG_LIBDIR" >&5 echo "${ECHO_T}$PKG_CONFIG_LIBDIR" >&6 fi if test "x$PKG_CONFIG" != xnone then echo "$as_me:3663: checking if we should install .pc files for $PKG_CONFIG" >&5 echo $ECHO_N "checking if we should install .pc files for $PKG_CONFIG... $ECHO_C" >&6 else echo "$as_me:3666: checking if we should install .pc files" >&5 echo $ECHO_N "checking if we should install .pc files... $ECHO_C" >&6 fi # Check whether --enable-pc-files or --disable-pc-files was given. if test "${enable_pc_files+set}" = set; then enableval="$enable_pc_files" enable_pc_files=$enableval else enable_pc_files=no fi; echo "$as_me:3677: result: $enable_pc_files" >&5 echo "${ECHO_T}$enable_pc_files" >&6 if test "x$enable_pc_files" != xno then MAKE_PC_FILES= case "x$PKG_CONFIG_LIBDIR" in (xno|xyes) { echo "$as_me:3685: WARNING: no PKG_CONFIG_LIBDIR was found" >&5 echo "$as_me: WARNING: no PKG_CONFIG_LIBDIR was found" >&2;} ;; (*) if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$PKG_CONFIG_LIBDIR" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval PKG_CONFIG_LIBDIR="$PKG_CONFIG_LIBDIR" case ".$PKG_CONFIG_LIBDIR" in (.NONE/*) PKG_CONFIG_LIBDIR=`echo $PKG_CONFIG_LIBDIR | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) PKG_CONFIG_LIBDIR=`echo $PKG_CONFIG_LIBDIR | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:3715: error: expected a pathname, not \"$PKG_CONFIG_LIBDIR\"" >&5 echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG_LIBDIR\"" >&2;} { (exit 1); exit 1; }; } ;; esac ;; esac else MAKE_PC_FILES="#" fi if test -z "$MAKE_PC_FILES" then echo "$as_me:3729: checking for suffix to add to pc-files" >&5 echo $ECHO_N "checking for suffix to add to pc-files... $ECHO_C" >&6 # Check whether --with-pc-suffix or --without-pc-suffix was given. if test "${with_pc_suffix+set}" = set; then withval="$with_pc_suffix" case "x$withval" in (xyes|xno) PC_MODULE_SUFFIX= ;; (*) PC_MODULE_SUFFIX="$withval" ;; esac fi; test -z "$PC_MODULE_SUFFIX" && PC_MODULE_SUFFIX=none echo "$as_me:3744: result: $PC_MODULE_SUFFIX" >&5 echo "${ECHO_T}$PC_MODULE_SUFFIX" >&6 test "$PC_MODULE_SUFFIX" = none && PC_MODULE_SUFFIX= fi echo "$as_me:3750: checking if we should assume mixed-case filenames" >&5 echo $ECHO_N "checking if we should assume mixed-case filenames... $ECHO_C" >&6 # Check whether --enable-mixed-case or --disable-mixed-case was given. if test "${enable_mixed_case+set}" = set; then enableval="$enable_mixed_case" enable_mixedcase=$enableval else enable_mixedcase=auto fi; echo "$as_me:3760: result: $enable_mixedcase" >&5 echo "${ECHO_T}$enable_mixedcase" >&6 if test "$enable_mixedcase" = "auto" ; then echo "$as_me:3764: checking if filesystem supports mixed-case filenames" >&5 echo $ECHO_N "checking if filesystem supports mixed-case filenames... $ECHO_C" >&6 if test "${cf_cv_mixedcase+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes ; then case $target_alias in (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*) cf_cv_mixedcase=no ;; (*) cf_cv_mixedcase=yes ;; esac else rm -f conftest CONFTEST echo test >conftest if test -f CONFTEST ; then cf_cv_mixedcase=no else cf_cv_mixedcase=yes fi rm -f conftest CONFTEST fi fi echo "$as_me:3791: result: $cf_cv_mixedcase" >&5 echo "${ECHO_T}$cf_cv_mixedcase" >&6 test "$cf_cv_mixedcase" = yes && cat >>confdefs.h <<\EOF #define MIXEDCASE_FILENAMES 1 EOF else cf_cv_mixedcase=$enable_mixedcase if test "x$enable_mixedcase" = "xyes" ; then cat >>confdefs.h <<\EOF #define MIXEDCASE_FILENAMES 1 EOF fi fi # do this after mixed-case option (tags/TAGS is not as important as tic). echo "$as_me:3810: checking whether ${MAKE-make} sets \${MAKE}" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:3830: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:3834: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi for ac_prog in exctags ctags do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:3843: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CTAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CTAGS"; then ac_cv_prog_CTAGS="$CTAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CTAGS="$ac_prog" echo "$as_me:3858: found $ac_dir/$ac_word" >&5 break done fi fi CTAGS=$ac_cv_prog_CTAGS if test -n "$CTAGS"; then echo "$as_me:3866: result: $CTAGS" >&5 echo "${ECHO_T}$CTAGS" >&6 else echo "$as_me:3869: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CTAGS" && break done for ac_prog in exetags etags do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:3880: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ETAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ETAGS"; then ac_cv_prog_ETAGS="$ETAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ETAGS="$ac_prog" echo "$as_me:3895: found $ac_dir/$ac_word" >&5 break done fi fi ETAGS=$ac_cv_prog_ETAGS if test -n "$ETAGS"; then echo "$as_me:3903: result: $ETAGS" >&5 echo "${ECHO_T}$ETAGS" >&6 else echo "$as_me:3906: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ETAGS" && break done # Extract the first word of "${CTAGS:-ctags}", so it can be a program name with args. set dummy ${CTAGS:-ctags}; ac_word=$2 echo "$as_me:3915: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE_LOWER_TAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE_LOWER_TAGS"; then ac_cv_prog_MAKE_LOWER_TAGS="$MAKE_LOWER_TAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_MAKE_LOWER_TAGS="yes" echo "$as_me:3930: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_MAKE_LOWER_TAGS" && ac_cv_prog_MAKE_LOWER_TAGS="no" fi fi MAKE_LOWER_TAGS=$ac_cv_prog_MAKE_LOWER_TAGS if test -n "$MAKE_LOWER_TAGS"; then echo "$as_me:3939: result: $MAKE_LOWER_TAGS" >&5 echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6 else echo "$as_me:3942: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$cf_cv_mixedcase" = yes ; then # Extract the first word of "${ETAGS:-etags}", so it can be a program name with args. set dummy ${ETAGS:-etags}; ac_word=$2 echo "$as_me:3949: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE_UPPER_TAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE_UPPER_TAGS"; then ac_cv_prog_MAKE_UPPER_TAGS="$MAKE_UPPER_TAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_MAKE_UPPER_TAGS="yes" echo "$as_me:3964: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_MAKE_UPPER_TAGS" && ac_cv_prog_MAKE_UPPER_TAGS="no" fi fi MAKE_UPPER_TAGS=$ac_cv_prog_MAKE_UPPER_TAGS if test -n "$MAKE_UPPER_TAGS"; then echo "$as_me:3973: result: $MAKE_UPPER_TAGS" >&5 echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6 else echo "$as_me:3976: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAKE_UPPER_TAGS=no fi if test "$MAKE_UPPER_TAGS" = yes ; then MAKE_UPPER_TAGS= else MAKE_UPPER_TAGS="#" fi if test "$MAKE_LOWER_TAGS" = yes ; then MAKE_LOWER_TAGS= else MAKE_LOWER_TAGS="#" fi echo "$as_me:3996: checking for makeflags variable" >&5 echo $ECHO_N "checking for makeflags variable... $ECHO_C" >&6 if test "${cf_cv_makeflags+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_makeflags='' for cf_option in '-${MAKEFLAGS}' '${MFLAGS}' do cat >cf_makeflags.tmp </dev/null | fgrep -v "ing directory" | sed -e 's,[ ]*$,,'` case "$cf_result" in (.*k|.*kw) cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` case "$cf_result" in (.*CC=*) cf_cv_makeflags= ;; (*) cf_cv_makeflags=$cf_option ;; esac break ;; (.-) ;; (*) echo "given option \"$cf_option\", no match \"$cf_result\"" ;; esac done rm -f cf_makeflags.tmp fi echo "$as_me:4030: result: $cf_cv_makeflags" >&5 echo "${ECHO_T}$cf_cv_makeflags" >&6 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:4036: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:4051: found $ac_dir/$ac_word" >&5 break done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:4059: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:4062: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:4071: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:4086: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB="':'" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:4095: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:4098: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. set dummy ${ac_tool_prefix}ld; ac_word=$2 echo "$as_me:4110: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_LD="${ac_tool_prefix}ld" echo "$as_me:4125: found $ac_dir/$ac_word" >&5 break done fi fi LD=$ac_cv_prog_LD if test -n "$LD"; then echo "$as_me:4133: result: $LD" >&5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:4136: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_LD"; then ac_ct_LD=$LD # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 echo "$as_me:4145: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_LD"; then ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_LD="ld" echo "$as_me:4160: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_LD" && ac_cv_prog_ac_ct_LD="ld" fi fi ac_ct_LD=$ac_cv_prog_ac_ct_LD if test -n "$ac_ct_LD"; then echo "$as_me:4169: result: $ac_ct_LD" >&5 echo "${ECHO_T}$ac_ct_LD" >&6 else echo "$as_me:4172: result: no" >&5 echo "${ECHO_T}no" >&6 fi LD=$ac_ct_LD else LD="$ac_cv_prog_LD" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:4184: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:4199: found $ac_dir/$ac_word" >&5 break done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:4207: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:4210: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:4219: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_AR="ar" echo "$as_me:4234: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="ar" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:4243: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:4246: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. set dummy ${ac_tool_prefix}nm; ac_word=$2 echo "$as_me:4258: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then ac_cv_prog_NM="$NM" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_NM="${ac_tool_prefix}nm" echo "$as_me:4273: found $ac_dir/$ac_word" >&5 break done fi fi NM=$ac_cv_prog_NM if test -n "$NM"; then echo "$as_me:4281: result: $NM" >&5 echo "${ECHO_T}$NM" >&6 else echo "$as_me:4284: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_NM"; then ac_ct_NM=$NM # Extract the first word of "nm", so it can be a program name with args. set dummy nm; ac_word=$2 echo "$as_me:4293: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_NM"; then ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_NM="nm" echo "$as_me:4308: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_NM" && ac_cv_prog_ac_ct_NM="nm" fi fi ac_ct_NM=$ac_cv_prog_ac_ct_NM if test -n "$ac_ct_NM"; then echo "$as_me:4317: result: $ac_ct_NM" >&5 echo "${ECHO_T}$ac_ct_NM" >&6 else echo "$as_me:4320: result: no" >&5 echo "${ECHO_T}no" >&6 fi NM=$ac_ct_NM else NM="$ac_cv_prog_NM" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:4332: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:4347: found $ac_dir/$ac_word" >&5 break done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:4355: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:4358: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:4367: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_AR="ar" echo "$as_me:4382: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="ar" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:4391: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:4394: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi echo "$as_me:4403: checking for options to update archives" >&5 echo $ECHO_N "checking for options to update archives... $ECHO_C" >&6 if test "${cf_cv_ar_flags+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_ar_flags=unknown for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv do # check if $ARFLAGS already contains this choice if test "x$ARFLAGS" != "x" ; then cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"` if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then cf_cv_ar_flags= break fi fi rm -f conftest.$ac_cv_objext rm -f conftest.a cat >conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4432: \$? = $ac_status" >&5 (exit $ac_status); } ; then echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&5 $AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext 2>&5 1>/dev/null if test -f conftest.a ; then cf_cv_ar_flags=$cf_ar_flags break fi else test -n "$verbose" && echo " cannot compile test-program" 1>&6 echo "${as_me:-configure}:4443: testing cannot compile test-program ..." 1>&5 break fi done rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext fi echo "$as_me:4451: result: $cf_cv_ar_flags" >&5 echo "${ECHO_T}$cf_cv_ar_flags" >&6 if test -n "$ARFLAGS" ; then if test -n "$cf_cv_ar_flags" ; then ARFLAGS="$ARFLAGS $cf_cv_ar_flags" fi else ARFLAGS=$cf_cv_ar_flags fi echo "$as_me:4462: checking if you have specified an install-prefix" >&5 echo $ECHO_N "checking if you have specified an install-prefix... $ECHO_C" >&6 # Check whether --with-install-prefix or --without-install-prefix was given. if test "${with_install_prefix+set}" = set; then withval="$with_install_prefix" case "x$withval" in (xyes|xno) ;; (*) DESTDIR="$withval" ;; esac fi; echo "$as_me:4475: result: $DESTDIR" >&5 echo "${ECHO_T}$DESTDIR" >&6 ############################################################################### # If we're cross-compiling, allow the user to override the tools and their # options. The configure script is oriented toward identifying the host # compiler, etc., but we need a build compiler to generate parts of the source. if test "$cross_compiling" = yes ; then # defaults that we might want to override : ${BUILD_CFLAGS:=''} : ${BUILD_CPPFLAGS:=''} : ${BUILD_LDFLAGS:=''} : ${BUILD_LIBS:=''} : ${BUILD_EXEEXT:='$x'} : ${BUILD_OBJEXT:='o'} # Check whether --with-build-cc or --without-build-cc was given. if test "${with_build_cc+set}" = set; then withval="$with_build_cc" BUILD_CC="$withval" else for ac_prog in gcc cc cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:4503: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_BUILD_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$BUILD_CC"; then ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_BUILD_CC="$ac_prog" echo "$as_me:4518: found $ac_dir/$ac_word" >&5 break done fi fi BUILD_CC=$ac_cv_prog_BUILD_CC if test -n "$BUILD_CC"; then echo "$as_me:4526: result: $BUILD_CC" >&5 echo "${ECHO_T}$BUILD_CC" >&6 else echo "$as_me:4529: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$BUILD_CC" && break done fi; echo "$as_me:4537: checking for native build C compiler" >&5 echo $ECHO_N "checking for native build C compiler... $ECHO_C" >&6 echo "$as_me:4539: result: $BUILD_CC" >&5 echo "${ECHO_T}$BUILD_CC" >&6 echo "$as_me:4542: checking for native build C preprocessor" >&5 echo $ECHO_N "checking for native build C preprocessor... $ECHO_C" >&6 # Check whether --with-build-cpp or --without-build-cpp was given. if test "${with_build_cpp+set}" = set; then withval="$with_build_cpp" BUILD_CPP="$withval" else BUILD_CPP='${BUILD_CC} -E' fi; echo "$as_me:4552: result: $BUILD_CPP" >&5 echo "${ECHO_T}$BUILD_CPP" >&6 echo "$as_me:4555: checking for native build C flags" >&5 echo $ECHO_N "checking for native build C flags... $ECHO_C" >&6 # Check whether --with-build-cflags or --without-build-cflags was given. if test "${with_build_cflags+set}" = set; then withval="$with_build_cflags" BUILD_CFLAGS="$withval" fi; echo "$as_me:4563: result: $BUILD_CFLAGS" >&5 echo "${ECHO_T}$BUILD_CFLAGS" >&6 echo "$as_me:4566: checking for native build C preprocessor-flags" >&5 echo $ECHO_N "checking for native build C preprocessor-flags... $ECHO_C" >&6 # Check whether --with-build-cppflags or --without-build-cppflags was given. if test "${with_build_cppflags+set}" = set; then withval="$with_build_cppflags" BUILD_CPPFLAGS="$withval" fi; echo "$as_me:4574: result: $BUILD_CPPFLAGS" >&5 echo "${ECHO_T}$BUILD_CPPFLAGS" >&6 echo "$as_me:4577: checking for native build linker-flags" >&5 echo $ECHO_N "checking for native build linker-flags... $ECHO_C" >&6 # Check whether --with-build-ldflags or --without-build-ldflags was given. if test "${with_build_ldflags+set}" = set; then withval="$with_build_ldflags" BUILD_LDFLAGS="$withval" fi; echo "$as_me:4585: result: $BUILD_LDFLAGS" >&5 echo "${ECHO_T}$BUILD_LDFLAGS" >&6 echo "$as_me:4588: checking for native build linker-libraries" >&5 echo $ECHO_N "checking for native build linker-libraries... $ECHO_C" >&6 # Check whether --with-build-libs or --without-build-libs was given. if test "${with_build_libs+set}" = set; then withval="$with_build_libs" BUILD_LIBS="$withval" fi; echo "$as_me:4596: result: $BUILD_LIBS" >&5 echo "${ECHO_T}$BUILD_LIBS" >&6 # this assumes we're on Unix. BUILD_EXEEXT= BUILD_OBJEXT=o : ${BUILD_CC:='${CC}'} if ( test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '${CC}' ) ; then { { echo "$as_me:4606: error: Cross-build requires two compilers. Use --with-build-cc to specify the native compiler." >&5 echo "$as_me: error: Cross-build requires two compilers. Use --with-build-cc to specify the native compiler." >&2;} { (exit 1); exit 1; }; } fi else : ${BUILD_CC:='${CC}'} : ${BUILD_CPP:='${CPP}'} : ${BUILD_CFLAGS:='${CFLAGS}'} : ${BUILD_CPPFLAGS:='${CPPFLAGS}'} : ${BUILD_LDFLAGS:='${LDFLAGS}'} : ${BUILD_LIBS:='${LIBS}'} : ${BUILD_EXEEXT:='$x'} : ${BUILD_OBJEXT:='o'} fi ############################################################################### ### Options to allow the user to specify the set of libraries which are used. ### Use "--without-normal --with-shared" to allow the default model to be ### shared, for example. cf_list_models="" echo "$as_me:4631: checking if libtool -version-number should be used" >&5 echo $ECHO_N "checking if libtool -version-number should be used... $ECHO_C" >&6 # Check whether --enable-libtool-version or --disable-libtool-version was given. if test "${enable_libtool_version+set}" = set; then enableval="$enable_libtool_version" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then cf_libtool_version=no else cf_libtool_version=yes fi else enableval=yes cf_libtool_version=yes fi; echo "$as_me:4648: result: $cf_libtool_version" >&5 echo "${ECHO_T}$cf_libtool_version" >&6 if test "$cf_libtool_version" = yes ; then LIBTOOL_VERSION="-version-number" else LIBTOOL_VERSION="-version-info" case "x$VERSION" in (x) { echo "$as_me:4657: WARNING: VERSION was not set" >&5 echo "$as_me: WARNING: VERSION was not set" >&2;} ;; (x*.*.*) ABI_VERSION="$VERSION" test -n "$verbose" && echo " ABI_VERSION: $ABI_VERSION" 1>&6 echo "${as_me:-configure}:4664: testing ABI_VERSION: $ABI_VERSION ..." 1>&5 ;; (x*:*:*) ABI_VERSION=`echo "$VERSION" | sed -e 's/:/./g'` test -n "$verbose" && echo " ABI_VERSION: $ABI_VERSION" 1>&6 echo "${as_me:-configure}:4671: testing ABI_VERSION: $ABI_VERSION ..." 1>&5 ;; (*) { echo "$as_me:4675: WARNING: unexpected VERSION value: $VERSION" >&5 echo "$as_me: WARNING: unexpected VERSION value: $VERSION" >&2;} ;; esac fi LIBTOOL= # common library maintenance symbols that are convenient for libtool scripts: LIB_CREATE='${AR} -cr' LIB_OBJECT='${OBJECTS}' LIB_SUFFIX=.a LIB_PREP="$RANLIB" # symbols used to prop libtool up to enable it to determine what it should be # doing: LIB_CLEAN= LIB_COMPILE= LIB_LINK='${CC}' LIB_INSTALL= LIB_UNINSTALL= echo "$as_me:4697: checking if you want to build libraries with libtool" >&5 echo $ECHO_N "checking if you want to build libraries with libtool... $ECHO_C" >&6 # Check whether --with-libtool or --without-libtool was given. if test "${with_libtool+set}" = set; then withval="$with_libtool" with_libtool=$withval else with_libtool=no fi; echo "$as_me:4707: result: $with_libtool" >&5 echo "${ECHO_T}$with_libtool" >&6 if test "$with_libtool" != "no"; then if test "$with_libtool" != "yes" ; then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$with_libtool" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval with_libtool="$with_libtool" case ".$with_libtool" in (.NONE/*) with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:4738: error: expected a pathname, not \"$with_libtool\"" >&5 echo "$as_me: error: expected a pathname, not \"$with_libtool\"" >&2;} { (exit 1); exit 1; }; } ;; esac LIBTOOL=$with_libtool else if test -n "$ac_tool_prefix"; then for ac_prog in libtool glibtool do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:4751: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LIBTOOL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LIBTOOL"; then ac_cv_prog_LIBTOOL="$LIBTOOL" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog" echo "$as_me:4766: found $ac_dir/$ac_word" >&5 break done fi fi LIBTOOL=$ac_cv_prog_LIBTOOL if test -n "$LIBTOOL"; then echo "$as_me:4774: result: $LIBTOOL" >&5 echo "${ECHO_T}$LIBTOOL" >&6 else echo "$as_me:4777: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LIBTOOL" && break done fi if test -z "$LIBTOOL"; then ac_ct_LIBTOOL=$LIBTOOL for ac_prog in libtool glibtool do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:4790: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_LIBTOOL"; then ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_LIBTOOL="$ac_prog" echo "$as_me:4805: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL if test -n "$ac_ct_LIBTOOL"; then echo "$as_me:4813: result: $ac_ct_LIBTOOL" >&5 echo "${ECHO_T}$ac_ct_LIBTOOL" >&6 else echo "$as_me:4816: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_LIBTOOL" && break done test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none" LIBTOOL=$ac_ct_LIBTOOL fi if test -n "$LIBTOOL" && test "$LIBTOOL" != none then cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'` else cf_cv_libtool_version= fi test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version if test -z "$cf_cv_libtool_version" && test "$LIBTOOL" = libtool then unset ac_cv_prog_ac_ct_LIBTOOL unset ac_ct_LIBTOOL unset LIBTOOL if test -n "$ac_tool_prefix"; then for ac_prog in glibtool do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:4847: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LIBTOOL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LIBTOOL"; then ac_cv_prog_LIBTOOL="$LIBTOOL" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog" echo "$as_me:4862: found $ac_dir/$ac_word" >&5 break done fi fi LIBTOOL=$ac_cv_prog_LIBTOOL if test -n "$LIBTOOL"; then echo "$as_me:4870: result: $LIBTOOL" >&5 echo "${ECHO_T}$LIBTOOL" >&6 else echo "$as_me:4873: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LIBTOOL" && break done fi if test -z "$LIBTOOL"; then ac_ct_LIBTOOL=$LIBTOOL for ac_prog in glibtool do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:4886: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_LIBTOOL"; then ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_LIBTOOL="$ac_prog" echo "$as_me:4901: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL if test -n "$ac_ct_LIBTOOL"; then echo "$as_me:4909: result: $ac_ct_LIBTOOL" >&5 echo "${ECHO_T}$ac_ct_LIBTOOL" >&6 else echo "$as_me:4912: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_LIBTOOL" && break done test -n "$ac_ct_LIBTOOL" || ac_ct_LIBTOOL="none" LIBTOOL=$ac_ct_LIBTOOL fi if test -n "$LIBTOOL" && test "$LIBTOOL" != none then cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'` else cf_cv_libtool_version= fi test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version fi fi if test -z "$LIBTOOL" ; then { { echo "$as_me:4934: error: Cannot find libtool" >&5 echo "$as_me: error: Cannot find libtool" >&2;} { (exit 1); exit 1; }; } fi LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${DESTDIR}${libdir} ${LIBTOOL_VERSION} `cut -f1 ${top_srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o' LIB_OBJECT='${OBJECTS:.o=.lo}' LIB_SUFFIX=.la LIB_CLEAN='${LIBTOOL} --mode=clean' LIB_COMPILE='${LIBTOOL} --mode=compile' LIB_LINK='${LIBTOOL} --mode=link ${CC} ${LIBTOOL_OPTS}' LIB_INSTALL='${LIBTOOL} --mode=install' LIB_UNINSTALL='${LIBTOOL} --mode=uninstall' LIB_PREP=: if test -n "$LIBTOOL" && test "$LIBTOOL" != none then echo "$as_me:4950: checking version of $LIBTOOL" >&5 echo $ECHO_N "checking version of $LIBTOOL... $ECHO_C" >&6 if test -n "$LIBTOOL" && test "$LIBTOOL" != none then cf_cv_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' |sed -e '2,$d' -e 's/([^)]*)//g' -e 's/^[^1-9]*//' -e 's/[^0-9.].*//'` else cf_cv_libtool_version= fi test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version echo "$as_me:4961: result: $cf_cv_libtool_version" >&5 echo "${ECHO_T}$cf_cv_libtool_version" >&6 if test -z "$cf_cv_libtool_version" ; then { { echo "$as_me:4964: error: This is not GNU libtool" >&5 echo "$as_me: error: This is not GNU libtool" >&2;} { (exit 1); exit 1; }; } fi else { { echo "$as_me:4969: error: GNU libtool has not been found" >&5 echo "$as_me: error: GNU libtool has not been found" >&2;} { (exit 1); exit 1; }; } fi # special hack to add -no-undefined (which libtool should do for itself) LT_UNDEF= case "$cf_cv_system_name" in (cygwin*|msys*|mingw32*|os2*|uwin*|aix[4-7]) LT_UNDEF=-no-undefined ;; esac # special hack to add --tag option for C++ compiler case $cf_cv_libtool_version in (1.[5-9]*|[2-9].[0-9.a-z]*) LIBTOOL_CXX="$LIBTOOL --tag=CXX" LIBTOOL="$LIBTOOL --tag=CC" ;; (*) LIBTOOL_CXX="$LIBTOOL" ;; esac else LIBTOOL="" LIBTOOL_CXX="" fi test -z "$LIBTOOL" && ECHO_LT= if test "$with_libtool" != "no" ; then cf_list_models="$cf_list_models libtool" else echo "$as_me:5005: checking if you want to build shared libraries" >&5 echo $ECHO_N "checking if you want to build shared libraries... $ECHO_C" >&6 # Check whether --with-shared or --without-shared was given. if test "${with_shared+set}" = set; then withval="$with_shared" with_shared=$withval else with_shared=no fi; echo "$as_me:5015: result: $with_shared" >&5 echo "${ECHO_T}$with_shared" >&6 test "x$with_shared" = "xyes" && cf_list_models="$cf_list_models shared" echo "$as_me:5019: checking if you want to build static libraries" >&5 echo $ECHO_N "checking if you want to build static libraries... $ECHO_C" >&6 # Check whether --with-normal or --without-normal was given. if test "${with_normal+set}" = set; then withval="$with_normal" with_normal=$withval else with_normal=yes fi; echo "$as_me:5029: result: $with_normal" >&5 echo "${ECHO_T}$with_normal" >&6 test "x$with_normal" = "xyes" && cf_list_models="$cf_list_models normal" echo "$as_me:5033: checking if you want to build debug libraries" >&5 echo $ECHO_N "checking if you want to build debug libraries... $ECHO_C" >&6 # Check whether --with-debug or --without-debug was given. if test "${with_debug+set}" = set; then withval="$with_debug" with_debug=$withval else with_debug=yes fi; echo "$as_me:5043: result: $with_debug" >&5 echo "${ECHO_T}$with_debug" >&6 test "x$with_debug" = "xyes" && cf_list_models="$cf_list_models debug" echo "$as_me:5047: checking if you want to build profiling libraries" >&5 echo $ECHO_N "checking if you want to build profiling libraries... $ECHO_C" >&6 # Check whether --with-profile or --without-profile was given. if test "${with_profile+set}" = set; then withval="$with_profile" with_profile=$withval else with_profile=no fi; echo "$as_me:5057: result: $with_profile" >&5 echo "${ECHO_T}$with_profile" >&6 test "x$with_profile" = "xyes" && cf_list_models="$cf_list_models profile" fi if test "X$cf_with_cxx_binding" != Xno; then if test "x$with_shared" = "xyes"; then echo "$as_me:5065: checking if you want to build C++ shared libraries" >&5 echo $ECHO_N "checking if you want to build C++ shared libraries... $ECHO_C" >&6 # Check whether --with-cxx-shared or --without-cxx-shared was given. if test "${with_cxx_shared+set}" = set; then withval="$with_cxx_shared" with_shared_cxx=$withval else with_shared_cxx=no fi; echo "$as_me:5075: result: $with_shared_cxx" >&5 echo "${ECHO_T}$with_shared_cxx" >&6 fi fi ############################################################################### echo "$as_me:5082: checking for specified models" >&5 echo $ECHO_N "checking for specified models... $ECHO_C" >&6 test -z "$cf_list_models" && cf_list_models=normal test "$with_libtool" != "no" && cf_list_models=libtool echo "$as_me:5086: result: $cf_list_models" >&5 echo "${ECHO_T}$cf_list_models" >&6 ### Use the first model as the default, and save its suffix for use in building ### up test-applications. echo "$as_me:5091: checking for default model" >&5 echo $ECHO_N "checking for default model... $ECHO_C" >&6 DFT_LWR_MODEL=`echo "$cf_list_models" | $AWK '{print $1}'` echo "$as_me:5094: result: $DFT_LWR_MODEL" >&5 echo "${ECHO_T}$DFT_LWR_MODEL" >&6 DFT_UPR_MODEL=`echo "$DFT_LWR_MODEL" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` TICS_NAME=tic TINFO_NAME=tinfo LIB_NAME=ncurses LIB_DIR=../lib LIB_2ND=../../lib echo "$as_me:5108: checking if you want to have a library-prefix" >&5 echo $ECHO_N "checking if you want to have a library-prefix... $ECHO_C" >&6 # Check whether --with-lib-prefix or --without-lib-prefix was given. if test "${with_lib_prefix+set}" = set; then withval="$with_lib_prefix" with_lib_prefix=$withval else with_lib_prefix=auto fi; echo "$as_me:5118: result: $with_lib_prefix" >&5 echo "${ECHO_T}$with_lib_prefix" >&6 if test $with_lib_prefix = auto then case $cf_cv_system_name in (OS/2*|os2*) if test "$DFT_LWR_MODEL" = libtool; then LIB_PREFIX='lib' else LIB_PREFIX='' fi ;; (*) LIB_PREFIX='lib' ;; esac cf_prefix=$LIB_PREFIX elif test $with_lib_prefix = no then LIB_PREFIX= else LIB_PREFIX=$with_lib_prefix fi LIB_SUFFIX= echo "$as_me:5146: checking for PATH separator" >&5 echo $ECHO_N "checking for PATH separator... $ECHO_C" >&6 case $cf_cv_system_name in (os2*) PATH_SEPARATOR=';' ;; (*) ${PATH_SEPARATOR:=':'} ;; esac echo "$as_me:5153: result: $PATH_SEPARATOR" >&5 echo "${ECHO_T}$PATH_SEPARATOR" >&6 ############################################################################### echo "$as_me:5158: checking if you want to build a separate terminfo library" >&5 echo $ECHO_N "checking if you want to build a separate terminfo library... $ECHO_C" >&6 # Check whether --with-termlib or --without-termlib was given. if test "${with_termlib+set}" = set; then withval="$with_termlib" with_termlib=$withval else with_termlib=no fi; echo "$as_me:5168: result: $with_termlib" >&5 echo "${ECHO_T}$with_termlib" >&6 echo "$as_me:5171: checking if you want to build a separate tic library" >&5 echo $ECHO_N "checking if you want to build a separate tic library... $ECHO_C" >&6 # Check whether --with-ticlib or --without-ticlib was given. if test "${with_ticlib+set}" = set; then withval="$with_ticlib" with_ticlib=$withval else with_ticlib=no fi; echo "$as_me:5181: result: $with_ticlib" >&5 echo "${ECHO_T}$with_ticlib" >&6 ### Checks for special libraries, must be done up-front. SHLIB_LIST="" echo "$as_me:5187: checking if you want to link with the GPM mouse library" >&5 echo $ECHO_N "checking if you want to link with the GPM mouse library... $ECHO_C" >&6 # Check whether --with-gpm or --without-gpm was given. if test "${with_gpm+set}" = set; then withval="$with_gpm" with_gpm=$withval else with_gpm=maybe fi; echo "$as_me:5197: result: $with_gpm" >&5 echo "${ECHO_T}$with_gpm" >&6 if test "$with_gpm" != no ; then echo "$as_me:5201: checking for gpm.h" >&5 echo $ECHO_N "checking for gpm.h... $ECHO_C" >&6 if test "${ac_cv_header_gpm_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 5207 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:5211: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:5217: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_gpm_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_gpm_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:5236: result: $ac_cv_header_gpm_h" >&5 echo "${ECHO_T}$ac_cv_header_gpm_h" >&6 if test $ac_cv_header_gpm_h = yes; then cat >>confdefs.h <<\EOF #define HAVE_GPM_H 1 EOF if test "$with_gpm" != yes && test "$with_gpm" != maybe ; then test -n "$verbose" && echo " assuming we really have GPM library" 1>&6 echo "${as_me:-configure}:5247: testing assuming we really have GPM library ..." 1>&5 cat >>confdefs.h <<\EOF #define HAVE_LIBGPM 1 EOF else echo "$as_me:5254: checking for Gpm_Open in -lgpm" >&5 echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5262 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Gpm_Open (); int main () { Gpm_Open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5281: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5284: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5287: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5290: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_Gpm_Open=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_Gpm_Open=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:5301: result: $ac_cv_lib_gpm_Gpm_Open" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6 if test $ac_cv_lib_gpm_Gpm_Open = yes; then : else { { echo "$as_me:5307: error: Cannot link with GPM library" >&5 echo "$as_me: error: Cannot link with GPM library" >&2;} { (exit 1); exit 1; }; } fi with_gpm=yes fi else test "$with_gpm" != maybe && { echo "$as_me:5317: WARNING: Cannot find GPM header" >&5 echo "$as_me: WARNING: Cannot find GPM header" >&2;} with_gpm=no fi fi if test "$with_gpm" != no ; then echo "$as_me:5326: checking if you want to load GPM dynamically" >&5 echo $ECHO_N "checking if you want to load GPM dynamically... $ECHO_C" >&6 # Check whether --with-dlsym or --without-dlsym was given. if test "${with_dlsym+set}" = set; then withval="$with_dlsym" with_dlsym=$withval else with_dlsym=yes fi; echo "$as_me:5336: result: $with_dlsym" >&5 echo "${ECHO_T}$with_dlsym" >&6 if test "x$with_dlsym" = xyes ; then cf_have_dlsym=no echo "$as_me:5341: checking for dlsym" >&5 echo $ECHO_N "checking for dlsym... $ECHO_C" >&6 if test "${ac_cv_func_dlsym+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 5347 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlsym (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlsym (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlsym) || defined (__stub___dlsym) choke me #else f = dlsym; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5378: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5381: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5384: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5387: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlsym=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_dlsym=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:5397: result: $ac_cv_func_dlsym" >&5 echo "${ECHO_T}$ac_cv_func_dlsym" >&6 if test $ac_cv_func_dlsym = yes; then cf_have_dlsym=yes else cf_have_libdl=no echo "$as_me:5404: checking for dlsym in -ldl" >&5 echo $ECHO_N "checking for dlsym in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlsym+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5412 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlsym (); int main () { dlsym (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5431: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5434: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5437: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5440: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlsym=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dl_dlsym=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:5451: result: $ac_cv_lib_dl_dlsym" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlsym" >&6 if test $ac_cv_lib_dl_dlsym = yes; then cf_have_dlsym=yes cf_have_libdl=yes fi fi if test "$cf_have_dlsym" = yes ; then test "$cf_have_libdl" = yes && { cf_add_libs="-ldl" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" } echo "$as_me:5480: checking whether able to link to dl*() functions" >&5 echo $ECHO_N "checking whether able to link to dl*() functions... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 5483 "configure" #include "confdefs.h" #include int main () { void *obj; if ((obj = dlopen("filename", 0)) != 0) { if (dlsym(obj, "symbolname") == 0) { dlclose(obj); } } ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5501: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5504: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5507: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5510: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cat >>confdefs.h <<\EOF #define HAVE_LIBDL 1 EOF else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:5521: error: Cannot link test program for libdl" >&5 echo "$as_me: error: Cannot link test program for libdl" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:5526: result: ok" >&5 echo "${ECHO_T}ok" >&6 else { { echo "$as_me:5529: error: Cannot find dlsym function" >&5 echo "$as_me: error: Cannot find dlsym function" >&2;} { (exit 1); exit 1; }; } fi if test "x$with_gpm" != xyes ; then test -n "$verbose" && echo " assuming soname for gpm is $with_gpm" 1>&6 echo "${as_me:-configure}:5537: testing assuming soname for gpm is $with_gpm ..." 1>&5 cf_cv_gpm_soname="$with_gpm" else echo "$as_me:5542: checking for soname of gpm library" >&5 echo $ECHO_N "checking for soname of gpm library... $ECHO_C" >&6 if test "${cf_cv_gpm_soname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_gpm_soname=unknown if test "$cross_compiling" != yes ; then cat >conftest.$ac_ext < int main() { if (Gpm_Open(0,0)) Gpm_Close(); ${cf_cv_main_return:-return}(0); } CF_EOF cf_save_LIBS="$LIBS" cf_add_libs="-lgpm" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" if { (eval echo "$as_me:5576: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5579: \$? = $ac_status" >&5 (exit $ac_status); } ; then if { (eval echo "$as_me:5581: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5584: \$? = $ac_status" >&5 (exit $ac_status); } ; then cf_cv_gpm_soname=`ldd conftest$ac_exeext 2>/dev/null | sed -e 's,^.*/,,' -e 's, .*$,,' | fgrep libgpm.` test -z "$cf_cv_gpm_soname" && cf_cv_gpm_soname=unknown fi fi rm -rf conftest* LIBS="$cf_save_LIBS" fi fi echo "$as_me:5595: result: $cf_cv_gpm_soname" >&5 echo "${ECHO_T}$cf_cv_gpm_soname" >&6 fi test "$cf_cv_gpm_soname" != "unknown" && cat >>confdefs.h <>confdefs.h <<\EOF #define HAVE_LIBGPM 1 EOF echo "$as_me:5630: checking for Gpm_Wgetch in -lgpm" >&5 echo $ECHO_N "checking for Gpm_Wgetch in -lgpm... $ECHO_C" >&6 if test "${ac_cv_lib_gpm_Gpm_Wgetch+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 5638 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Gpm_Wgetch (); int main () { Gpm_Wgetch (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5657: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5660: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5663: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5666: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gpm_Gpm_Wgetch=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gpm_Gpm_Wgetch=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:5677: result: $ac_cv_lib_gpm_Gpm_Wgetch" >&5 echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Wgetch" >&6 if test $ac_cv_lib_gpm_Gpm_Wgetch = yes; then echo "$as_me:5681: checking if GPM is weakly bound to curses library" >&5 echo $ECHO_N "checking if GPM is weakly bound to curses library... $ECHO_C" >&6 if test "${cf_cv_check_gpm_wgetch+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_check_gpm_wgetch=unknown if test "$cross_compiling" != yes ; then cat >conftest.$ac_ext < int main() { Gpm_Wgetch(); ${cf_cv_main_return:-return}(0); } CF_EOF cf_save_LIBS="$LIBS" # This only works if we can look at the symbol table. If a shared # library is stripped for install, we cannot use that. So we're forced # to rely on the static library, noting that some packagers may not # include it. LIBS="-static -lgpm -dynamic $LIBS" if { (eval echo "$as_me:5705: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5708: \$? = $ac_status" >&5 (exit $ac_status); } ; then if { (eval echo "$as_me:5710: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5713: \$? = $ac_status" >&5 (exit $ac_status); } ; then cf_cv_check_gpm_wgetch=`nm conftest$ac_exeext | egrep '\' | egrep '\<[vVwW]\>'` test -n "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=yes test -z "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=no fi fi rm -rf conftest* LIBS="$cf_save_LIBS" fi fi echo "$as_me:5725: result: $cf_cv_check_gpm_wgetch" >&5 echo "${ECHO_T}$cf_cv_check_gpm_wgetch" >&6 if test "$cf_cv_check_gpm_wgetch" != yes ; then { echo "$as_me:5729: WARNING: GPM library is already linked with curses - read the FAQ" >&5 echo "$as_me: WARNING: GPM library is already linked with curses - read the FAQ" >&2;} fi fi fi # not everyone has "test -c" if test -c /dev/sysmouse 2>/dev/null ; then echo "$as_me:5739: checking if you want to use sysmouse" >&5 echo $ECHO_N "checking if you want to use sysmouse... $ECHO_C" >&6 # Check whether --with-sysmouse or --without-sysmouse was given. if test "${with_sysmouse+set}" = set; then withval="$with_sysmouse" cf_with_sysmouse=$withval else cf_with_sysmouse=maybe fi; if test "$cf_with_sysmouse" != no ; then cat >conftest.$ac_ext <<_ACEOF #line 5751 "configure" #include "confdefs.h" #include #if (__FreeBSD_version >= 400017) #include #include #else #include #endif int main () { struct mouse_info the_mouse; ioctl(0, CONS_MOUSECTL, &the_mouse); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:5774: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5777: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:5780: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5783: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_with_sysmouse=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_with_sysmouse=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:5793: result: $cf_with_sysmouse" >&5 echo "${ECHO_T}$cf_with_sysmouse" >&6 test "$cf_with_sysmouse" = yes && cat >>confdefs.h <<\EOF #define USE_SYSMOUSE 1 EOF fi if test X"$CC_G_OPT" = X"" ; then CC_G_OPT='-g' test -n "$GCC" && test "x${ac_cv_prog_cc_g}" != xyes && CC_G_OPT='' fi if test X"$CXX_G_OPT" = X"" ; then CXX_G_OPT='-g' test -n "$GXX" && test "x${ac_cv_prog_cxx_g}" != xyes && CXX_G_OPT='' fi echo "$as_me:5812: checking for default loader flags" >&5 echo $ECHO_N "checking for default loader flags... $ECHO_C" >&6 case $DFT_LWR_MODEL in (libtool) LD_MODEL='' ;; (normal) LD_MODEL='' ;; (debug) LD_MODEL=$CC_G_OPT ;; (profile) LD_MODEL='-pg';; (shared) LD_MODEL='' ;; esac echo "$as_me:5821: result: $LD_MODEL" >&5 echo "${ECHO_T}$LD_MODEL" >&6 case $DFT_LWR_MODEL in (shared) echo "$as_me:5827: checking if rpath option should be used" >&5 echo $ECHO_N "checking if rpath option should be used... $ECHO_C" >&6 # Check whether --enable-rpath or --disable-rpath was given. if test "${enable_rpath+set}" = set; then enableval="$enable_rpath" cf_cv_enable_rpath=$enableval else cf_cv_enable_rpath=no fi; echo "$as_me:5837: result: $cf_cv_enable_rpath" >&5 echo "${ECHO_T}$cf_cv_enable_rpath" >&6 echo "$as_me:5840: checking if shared libraries should be relinked during install" >&5 echo $ECHO_N "checking if shared libraries should be relinked during install... $ECHO_C" >&6 # Check whether --enable-relink or --disable-relink was given. if test "${enable_relink+set}" = set; then enableval="$enable_relink" cf_cv_do_relink=$enableval else cf_cv_do_relink=yes fi; echo "$as_me:5850: result: $cf_cv_do_relink" >&5 echo "${ECHO_T}$cf_cv_do_relink" >&6 ;; esac # we will build libraries one-level down. rel_builddir=.. LD_RPATH_OPT= echo "$as_me:5859: checking for an rpath option" >&5 echo $ECHO_N "checking for an rpath option... $ECHO_C" >&6 case $cf_cv_system_name in (irix*) if test "$GCC" = yes; then LD_RPATH_OPT="-Wl,-rpath," else LD_RPATH_OPT="-rpath " fi ;; (linux*|gnu*|k*bsd*-gnu) LD_RPATH_OPT="-Wl,-rpath," ;; (openbsd[2-9].*|mirbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (dragonfly*|freebsd*) LD_RPATH_OPT="-rpath " ;; (netbsd*) LD_RPATH_OPT="-Wl,-rpath," ;; (osf*|mls+*) LD_RPATH_OPT="-rpath " ;; (solaris2*) LD_RPATH_OPT="-R" ;; (*) ;; esac echo "$as_me:5890: result: $LD_RPATH_OPT" >&5 echo "${ECHO_T}$LD_RPATH_OPT" >&6 case "x$LD_RPATH_OPT" in (x-R*) echo "$as_me:5895: checking if we need a space after rpath option" >&5 echo $ECHO_N "checking if we need a space after rpath option... $ECHO_C" >&6 cf_save_LIBS="$LIBS" cf_add_libs="${LD_RPATH_OPT}$libdir" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 5916 "configure" #include "confdefs.h" int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:5928: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5931: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:5934: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5937: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_rpath_space=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_rpath_space=yes fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save_LIBS" echo "$as_me:5947: result: $cf_rpath_space" >&5 echo "${ECHO_T}$cf_rpath_space" >&6 test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT " ;; esac RM_SHARED_OPTS= LOCAL_LDFLAGS= LOCAL_LDFLAGS2= LD_SHARED_OPTS= INSTALL_LIB="-m 644" : ${rel_builddir:=.} shlibdir=$libdir MAKE_DLLS="#" cf_cv_do_symlinks=no cf_ld_rpath_opt= test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT" echo "$as_me:5968: checking if release/abi version should be used for shared libs" >&5 echo $ECHO_N "checking if release/abi version should be used for shared libs... $ECHO_C" >&6 # Check whether --with-shlib-version or --without-shlib-version was given. if test "${with_shlib_version+set}" = set; then withval="$with_shlib_version" test -z "$withval" && withval=auto case $withval in (yes) cf_cv_shlib_version=auto ;; (rel|abi|auto) cf_cv_shlib_version=$withval ;; (*) echo "$as_me:5983: result: $withval" >&5 echo "${ECHO_T}$withval" >&6 { { echo "$as_me:5985: error: option value must be one of: rel, abi, or auto" >&5 echo "$as_me: error: option value must be one of: rel, abi, or auto" >&2;} { (exit 1); exit 1; }; } ;; esac else cf_cv_shlib_version=auto fi; echo "$as_me:5994: result: $cf_cv_shlib_version" >&5 echo "${ECHO_T}$cf_cv_shlib_version" >&6 cf_cv_rm_so_locs=no cf_try_cflags= # Some less-capable ports of gcc support only -fpic CC_SHARED_OPTS= if test "$GCC" = yes then echo "$as_me:6004: checking which $CC option to use" >&5 echo $ECHO_N "checking which $CC option to use... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" for CC_SHARED_OPTS in -fPIC -fpic '' do CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS" cat >conftest.$ac_ext <<_ACEOF #line 6011 "configure" #include "confdefs.h" #include int main () { int x = 1 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6023: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6026: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6029: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6032: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done echo "$as_me:6041: result: $CC_SHARED_OPTS" >&5 echo "${ECHO_T}$CC_SHARED_OPTS" >&6 CFLAGS="$cf_save_CFLAGS" fi cf_cv_shlib_version_infix=no case $cf_cv_system_name in (aix4.3-9*|aix[5-7]*) if test "$GCC" = yes; then CC_SHARED_OPTS='-Wl,-brtl' MK_SHARED_LIB='${CC} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@' else CC_SHARED_OPTS='-brtl' # as well as '-qpic=large -G' or perhaps "-bM:SRE -bnoentry -bexpall" MK_SHARED_LIB='${CC} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@' fi ;; (beos*) MK_SHARED_LIB='${CC} ${CFLAGS} -o $@ -Xlinker -soname=`basename $@` -nostart -e 0' ;; (cygwin*) CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cf_cv_shlib_version=cygdll cf_cv_shlib_version_infix=cygdll shlibdir=$bindir MAKE_DLLS= cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\$1 IMPORT_LIB=\`echo "\$1" | sed -e 's/cyg/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \$SHARED_LIB ** IMPORT_LIB \$IMPORT_LIB EOF exec \$* -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (msys*) CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cf_cv_shlib_version=msysdll cf_cv_shlib_version_infix=msysdll shlibdir=$bindir MAKE_DLLS= cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\$1 IMPORT_LIB=\`echo "\$1" | sed -e 's/msys-/lib/' -e 's/[0-9]*\.dll$/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \$SHARED_LIB ** IMPORT_LIB \$IMPORT_LIB EOF exec \$* -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (darwin*) cf_try_cflags="no-cpp-precomp" CC_SHARED_OPTS="-dynamic" MK_SHARED_LIB='${CC} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $@` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $@' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi cf_cv_shlib_version_infix=yes echo "$as_me:6112: checking if ld -search_paths_first works" >&5 echo $ECHO_N "checking if ld -search_paths_first works... $ECHO_C" >&6 if test "${cf_cv_ldflags_search_paths_first+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" cat >conftest.$ac_ext <<_ACEOF #line 6121 "configure" #include "confdefs.h" int main () { int i; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:6133: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:6136: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:6139: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6142: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_ldflags_search_paths_first=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_ldflags_search_paths_first=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LDFLAGS=$cf_save_LDFLAGS fi echo "$as_me:6153: result: $cf_cv_ldflags_search_paths_first" >&5 echo "${ECHO_T}$cf_cv_ldflags_search_paths_first" >&6 if test $cf_cv_ldflags_search_paths_first = yes; then LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi ;; (hpux[7-8]*) # HP-UX 8.07 ld lacks "+b" option used for libdir search-list if test "$GCC" != yes; then CC_SHARED_OPTS='+Z' fi MK_SHARED_LIB='${LD} -b -o $@' INSTALL_LIB="-m 555" ;; (hpux*) # (tested with gcc 2.7.2 -- I don't have c89) if test "$GCC" = yes; then LD_SHARED_OPTS='-Xlinker +b -Xlinker ${libdir}' else CC_SHARED_OPTS='+Z' LD_SHARED_OPTS='-Wl,+b,${libdir}' fi MK_SHARED_LIB='${LD} +b ${libdir} -b -o $@' # HP-UX shared libraries must be executable, and should be # readonly to exploit a quirk in the memory manager. INSTALL_LIB="-m 555" ;; (interix*) test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_shared_soname='`basename .${REL_VERSION}`.${ABI_VERSION}' else cf_shared_soname='`basename `' fi CC_SHARED_OPTS= MK_SHARED_LIB='${CC} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o ' ;; (irix*) if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi # tested with IRIX 5.2 and 'cc'. if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' MK_SHARED_LIB='${CC} -shared -rdata_shared -soname `basename $@` -o $@' else MK_SHARED_LIB='${CC} -shared -Wl,-soname,`basename $@` -o $@' fi cf_cv_rm_so_locs=yes ;; (linux*|gnu*|k*bsd*-gnu) if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $@`' fi MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' ;; (mingw*) cf_cv_shlib_version=mingw cf_cv_shlib_version_infix=mingw shlibdir=$bindir MAKE_DLLS= if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-Wl,--enable-auto-import" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="-Wl,--enable-auto-import $EXTRA_LDFLAGS" fi CC_SHARED_OPTS= MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${CC} ${CFLAGS}' RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.a" cat >mk_shared_lib.sh <<-CF_EOF #!$SHELL SHARED_LIB=\$1 IMPORT_LIB=\`echo "\$1" | sed -e 's/[0-9]*\.dll$/.dll.a/'\` shift cat <<-EOF Linking shared library ** SHARED_LIB \$SHARED_LIB ** IMPORT_LIB \$IMPORT_LIB EOF exec \$* -shared -Wl,--enable-auto-import,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB} CF_EOF chmod +x mk_shared_lib.sh ;; (openbsd[2-9].*|mirbsd*) if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $@`' fi MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' ;; (nto-qnx*|openbsd*|freebsd[12].*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" MK_SHARED_LIB='${LD} -Bshareable -o $@' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; (dragonfly*|freebsd*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="${cf_ld_rpath_opt}\${RPATH_LIST} $LOCAL_LDFLAGS" EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $@`' fi MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@' ;; (netbsd*) CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_enable_rpath" = yes ; then LOCAL_LDFLAGS="${cf_ld_rpath_opt}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="${cf_ld_rpath_opt}\${RPATH_LIST} $EXTRA_LDFLAGS" if test "$cf_cv_shlib_version" = auto; then if test -f /usr/libexec/ld.elf_so; then cf_cv_shlib_version=abi else cf_cv_shlib_version=rel fi fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $@`' fi MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $@' else MK_SHARED_LIB='${CC} -Wl,-shared -Wl,-Bshareable -o $@' fi ;; (osf*|mls+*) # tested with OSF/1 V3.2 and 'cc' # tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't # link with shared libs). MK_SHARED_LIB='${LD} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $@`' case $host_os in (osf4*) MK_SHARED_LIB="${MK_SHARED_LIB} -msym" ;; esac MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $@' if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi cf_cv_rm_so_locs=yes ;; (sco3.2v5*) # also uw2* and UW7: hops 13-Apr-98 # tested with osr5.0.5 if test "$GCC" != yes; then CC_SHARED_OPTS='-belf -KPIC' fi MK_SHARED_LIB='${LD} -dy -G -h `basename $@ .${REL_VERSION}`.${ABI_VERSION} -o $@' if test "$cf_cv_enable_rpath" = yes ; then # only way is to set LD_RUN_PATH but no switch for it RUN_PATH=$libdir fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel LINK_PROGS='LD_RUN_PATH=${libdir}' LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib' ;; (sunos4*) # tested with SunOS 4.1.1 and gcc 2.7.0 if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='${LD} -assert pure-text -o $@' test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; (solaris2*) # tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2 # tested with SunOS 5.10 (solaris 10) and gcc 3.4.3 if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}" LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_enable_rpath" = yes ; then EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS" fi test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel if test "$cf_cv_shlib_version" = rel; then cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}' else cf_cv_shared_soname='`basename $@`' fi if test "$GCC" != yes; then cf_save_CFLAGS="$CFLAGS" for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O do CFLAGS="$cf_shared_opts $cf_save_CFLAGS" cat >conftest.$ac_ext <<_ACEOF #line 6378 "configure" #include "confdefs.h" #include int main () { printf("Hello\n"); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:6390: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6393: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:6396: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6399: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done CFLAGS="$cf_save_CFLAGS" CC_SHARED_OPTS=$cf_shared_opts MK_SHARED_LIB='${CC} -dy -G -h '$cf_cv_shared_soname' -o $@' else MK_SHARED_LIB='${CC} -shared -dy -G -h '$cf_cv_shared_soname' -o $@' fi ;; (sysv5uw7*|unix_sv*) # tested with UnixWare 7.1.0 (gcc 2.95.2 and cc) if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='${LD} -d y -G -o $@' ;; (*) CC_SHARED_OPTS='unknown' MK_SHARED_LIB='echo unknown' ;; esac # This works if the last tokens in $MK_SHARED_LIB are the -o target. case "$cf_cv_shlib_version" in (rel|abi) case "$MK_SHARED_LIB" in (*'-o $@') test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes ;; (*) { echo "$as_me:6436: WARNING: ignored --with-shlib-version" >&5 echo "$as_me: WARNING: ignored --with-shlib-version" >&2;} ;; esac ;; esac if test -n "$cf_try_cflags" then cat > conftest.$ac_ext < int main(int argc, char *argv[]) { printf("hello\n"); return (argv[argc-1] == 0) ; } EOF cf_save_CFLAGS="$CFLAGS" for cf_opt in $cf_try_cflags do CFLAGS="$cf_save_CFLAGS -$cf_opt" echo "$as_me:6458: checking if CFLAGS option -$cf_opt works" >&5 echo $ECHO_N "checking if CFLAGS option -$cf_opt works... $ECHO_C" >&6 if { (eval echo "$as_me:6460: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:6463: \$? = $ac_status" >&5 (exit $ac_status); }; then echo "$as_me:6465: result: yes" >&5 echo "${ECHO_T}yes" >&6 cf_save_CFLAGS="$CFLAGS" else echo "$as_me:6469: result: no" >&5 echo "${ECHO_T}no" >&6 fi done CFLAGS="$cf_save_CFLAGS" fi # RPATH_LIST is a colon-separated list of directories test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}" test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}" test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations" test -n "$verbose" && echo " CC_SHARED_OPTS: $CC_SHARED_OPTS" 1>&6 echo "${as_me:-configure}:6484: testing CC_SHARED_OPTS: $CC_SHARED_OPTS ..." 1>&5 test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6 echo "${as_me:-configure}:6488: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 for model in $cf_list_models; do case $model in (libtool) echo "$as_me:6494: checking for additional libtool options" >&5 echo $ECHO_N "checking for additional libtool options... $ECHO_C" >&6 # Check whether --with-libtool-opts or --without-libtool-opts was given. if test "${with_libtool_opts+set}" = set; then withval="$with_libtool_opts" with_libtool_opts=$withval else with_libtool_opts=no fi; echo "$as_me:6504: result: $with_libtool_opts" >&5 echo "${ECHO_T}$with_libtool_opts" >&6 case .$with_libtool_opts in (.yes|.no|.) ;; (*) LIBTOOL_OPTS="$LIBTOOL_OPTS $with_libtool_opts" ;; esac echo "$as_me:6515: checking if exported-symbols file should be used" >&5 echo $ECHO_N "checking if exported-symbols file should be used... $ECHO_C" >&6 # Check whether --with-export-syms or --without-export-syms was given. if test "${with_export_syms+set}" = set; then withval="$with_export_syms" with_export_syms=$withval else with_export_syms=no fi; if test "x$with_export_syms" = xyes then with_export_syms='${top_srcdir}/package/${PACKAGE}.sym' fi echo "$as_me:6530: result: $with_export_syms" >&5 echo "${ECHO_T}$with_export_syms" >&6 if test "x$with_export_syms" != xno then EXPORT_SYMS="-export-symbols $with_export_syms" fi ;; (shared) if test "$CC_SHARED_OPTS" = "unknown"; then { { echo "$as_me:6541: error: Shared libraries are not supported in this version" >&5 echo "$as_me: error: Shared libraries are not supported in this version" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:6546: checking if versioned-symbols file should be used" >&5 echo $ECHO_N "checking if versioned-symbols file should be used... $ECHO_C" >&6 # Check whether --with-versioned-syms or --without-versioned-syms was given. if test "${with_versioned_syms+set}" = set; then withval="$with_versioned_syms" with_versioned_syms=$withval else with_versioned_syms=no fi; if test "x$with_versioned_syms" = xyes then with_versioned_syms='${top_srcdir}/package/${PACKAGE}.map' fi echo "$as_me:6561: result: $with_versioned_syms" >&5 echo "${ECHO_T}$with_versioned_syms" >&6 RESULTING_SYMS= VERSIONED_SYMS= WILDCARD_SYMS= if test "x$with_versioned_syms" != xno then RESULTING_SYMS=$with_versioned_syms case "x$MK_SHARED_LIB" in (*-Wl,*) VERSIONED_SYMS="-Wl,--version-script,\${RESULTING_SYMS}" MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-Wl,%\\${VERSIONED_SYMS} -Wl,%"` test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6 echo "${as_me:-configure}:6577: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 ;; (*-dy\ *) VERSIONED_SYMS="-Wl,-M,\${RESULTING_SYMS}" MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-dy%\\${VERSIONED_SYMS} -dy%"` test -n "$verbose" && echo " MK_SHARED_LIB: $MK_SHARED_LIB" 1>&6 echo "${as_me:-configure}:6585: testing MK_SHARED_LIB: $MK_SHARED_LIB ..." 1>&5 ;; (*) { echo "$as_me:6589: WARNING: this system does not support versioned-symbols" >&5 echo "$as_me: WARNING: this system does not support versioned-symbols" >&2;} ;; esac # Linux ld can selectively override scope, e.g., of symbols beginning with # "_" by first declaring some as global, and then using a wildcard to # declare the others as local. Some other loaders cannot do this. Check # by constructing a (very) simple shared library and inspecting its # symbols. if test "x$VERSIONED_SYMS" != "x" then echo "$as_me:6601: checking if wildcards can be used to selectively omit symbols" >&5 echo $ECHO_N "checking if wildcards can be used to selectively omit symbols... $ECHO_C" >&6 WILDCARD_SYMS=no # make sources rm -f conftest.* cat >conftest.ver <conftest.$ac_ext <conftest.mk <&5 >/dev/null then # test for missing symbol in either Data or Text section cf_missing=`nm -P conftest.so 2>&5 |fgrep _ismissing | egrep '[ ][DT][ ]'` test -n "$cf_missing" && WILDCARD_SYMS=yes fi echo "$as_me:6669: result: $WILDCARD_SYMS" >&5 echo "${ECHO_T}$WILDCARD_SYMS" >&6 rm -f conftest.* fi fi ;; esac done # pretend that ncurses==ncursesw==ncursest echo "$as_me:6680: checking if you want to disable library suffixes" >&5 echo $ECHO_N "checking if you want to disable library suffixes... $ECHO_C" >&6 # Check whether --enable-lib-suffixes or --disable-lib-suffixes was given. if test "${enable_lib_suffixes+set}" = set; then enableval="$enable_lib_suffixes" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then disable_lib_suffixes=yes else disable_lib_suffixes=no fi else enableval=yes disable_lib_suffixes=no fi; echo "$as_me:6697: result: $disable_lib_suffixes" >&5 echo "${ECHO_T}$disable_lib_suffixes" >&6 ### If we're building with rpath, try to link non-standard libs that way too. if test "$DFT_LWR_MODEL" = "shared"; then echo "$as_me:6703: checking if rpath-hack should be disabled" >&5 echo $ECHO_N "checking if rpath-hack should be disabled... $ECHO_C" >&6 # Check whether --enable-rpath-hack or --disable-rpath-hack was given. if test "${enable_rpath_hack+set}" = set; then enableval="$enable_rpath_hack" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then cf_disable_rpath_hack=yes else cf_disable_rpath_hack=no fi else enableval=yes cf_disable_rpath_hack=no fi; echo "$as_me:6720: result: $cf_disable_rpath_hack" >&5 echo "${ECHO_T}$cf_disable_rpath_hack" >&6 if test "$cf_disable_rpath_hack" = no ; then echo "$as_me:6724: checking for updated LDFLAGS" >&5 echo $ECHO_N "checking for updated LDFLAGS... $ECHO_C" >&6 if test -n "$LD_RPATH_OPT" ; then echo "$as_me:6727: result: maybe" >&5 echo "${ECHO_T}maybe" >&6 for ac_prog in ldd do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:6734: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_cf_ldd_prog+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$cf_ldd_prog"; then ac_cv_prog_cf_ldd_prog="$cf_ldd_prog" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_cf_ldd_prog="$ac_prog" echo "$as_me:6749: found $ac_dir/$ac_word" >&5 break done fi fi cf_ldd_prog=$ac_cv_prog_cf_ldd_prog if test -n "$cf_ldd_prog"; then echo "$as_me:6757: result: $cf_ldd_prog" >&5 echo "${ECHO_T}$cf_ldd_prog" >&6 else echo "$as_me:6760: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$cf_ldd_prog" && break done test -n "$cf_ldd_prog" || cf_ldd_prog="no" cf_rpath_list="/usr/lib /lib" if test "$cf_ldd_prog" != no then cf_rpath_oops= cat >conftest.$ac_ext <<_ACEOF #line 6774 "configure" #include "confdefs.h" #include int main () { printf("Hello"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:6786: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:6789: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:6792: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6795: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq` cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[ ]/%/%' -e 's%/[^/][^/]*$%%' |sort | uniq` else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext # If we passed the link-test, but get a "not found" on a given library, # this could be due to inept reconfiguration of gcc to make it only # partly honor /usr/local/lib (or whatever). Sometimes this behavior # is intentional, e.g., installing gcc in /usr/bin and suppressing the # /usr/local libraries. if test -n "$cf_rpath_oops" then for cf_rpath_src in $cf_rpath_oops do for cf_rpath_dir in \ /usr/local \ /usr/pkg \ /opt/sfw do if test -f $cf_rpath_dir/lib/$cf_rpath_src then test -n "$verbose" && echo " ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src" 1>&6 echo "${as_me:-configure}:6823: testing ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src ..." 1>&5 LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib" break fi done done fi fi test -n "$verbose" && echo " ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6 echo "${as_me:-configure}:6835: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 test -n "$verbose" && echo " ...checking LDFLAGS $LDFLAGS" 1>&6 echo "${as_me:-configure}:6839: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5 cf_rpath_dst= for cf_rpath_src in $LDFLAGS do case $cf_rpath_src in (-L*) # check if this refers to a directory which we will ignore cf_rpath_skip=no if test -n "$cf_rpath_list" then for cf_rpath_item in $cf_rpath_list do if test "x$cf_rpath_src" = "x-L$cf_rpath_item" then cf_rpath_skip=yes break fi done fi if test "$cf_rpath_skip" = no then # transform the option if test "$LD_RPATH_OPT" = "-R " ; then cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` else cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` fi # if we have not already added this, add it now cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" then test -n "$verbose" && echo " ...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6 echo "${as_me:-configure}:6876: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" fi fi ;; esac cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" done LDFLAGS=$cf_rpath_dst test -n "$verbose" && echo " ...checked LDFLAGS $LDFLAGS" 1>&6 echo "${as_me:-configure}:6889: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5 test -n "$verbose" && echo " ...checking LIBS $LIBS" 1>&6 echo "${as_me:-configure}:6893: testing ...checking LIBS $LIBS ..." 1>&5 cf_rpath_dst= for cf_rpath_src in $LIBS do case $cf_rpath_src in (-L*) # check if this refers to a directory which we will ignore cf_rpath_skip=no if test -n "$cf_rpath_list" then for cf_rpath_item in $cf_rpath_list do if test "x$cf_rpath_src" = "x-L$cf_rpath_item" then cf_rpath_skip=yes break fi done fi if test "$cf_rpath_skip" = no then # transform the option if test "$LD_RPATH_OPT" = "-R " ; then cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"` else cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"` fi # if we have not already added this, add it now cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"` if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS" then test -n "$verbose" && echo " ...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6 echo "${as_me:-configure}:6930: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5 EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS" fi fi ;; esac cf_rpath_dst="$cf_rpath_dst $cf_rpath_src" done LIBS=$cf_rpath_dst test -n "$verbose" && echo " ...checked LIBS $LIBS" 1>&6 echo "${as_me:-configure}:6943: testing ...checked LIBS $LIBS ..." 1>&5 test -n "$verbose" && echo " ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6 echo "${as_me:-configure}:6947: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5 else echo "$as_me:6950: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi fi ############################################################################### ### use option --with-extra-suffix to append suffix to headers and libraries echo "$as_me:6961: checking if you wish to append extra suffix to header/library paths" >&5 echo $ECHO_N "checking if you wish to append extra suffix to header/library paths... $ECHO_C" >&6 EXTRA_SUFFIX= # Check whether --with-extra-suffix or --without-extra-suffix was given. if test "${with_extra_suffix+set}" = set; then withval="$with_extra_suffix" case x$withval in (no) ;; (xyes|x) EXTRA_SUFFIX=$cf_cv_abi_version ;; (*) EXTRA_SUFFIX=$withval ;; esac fi; echo "$as_me:6980: result: $EXTRA_SUFFIX" >&5 echo "${ECHO_T}$EXTRA_SUFFIX" >&6 ### use option --disable-overwrite to leave out the link to -lcurses echo "$as_me:6984: checking if you wish to install ncurses overwriting curses" >&5 echo $ECHO_N "checking if you wish to install ncurses overwriting curses... $ECHO_C" >&6 # Check whether --enable-overwrite or --disable-overwrite was given. if test "${enable_overwrite+set}" = set; then enableval="$enable_overwrite" with_overwrite=$enableval else if test "$prefix" = "/usr" ; then with_overwrite=yes; else with_overwrite=no; fi fi; echo "$as_me:6994: result: $with_overwrite" >&5 echo "${ECHO_T}$with_overwrite" >&6 echo "$as_me:6997: checking if external terminfo-database is used" >&5 echo $ECHO_N "checking if external terminfo-database is used... $ECHO_C" >&6 # Check whether --enable-database or --disable-database was given. if test "${enable_database+set}" = set; then enableval="$enable_database" use_database=$enableval else use_database=yes fi; echo "$as_me:7007: result: $use_database" >&5 echo "${ECHO_T}$use_database" >&6 case $host_os in (os2*) TERMINFO_SRC='${top_srcdir}/misc/emx.src' ;; (*) TERMINFO_SRC='${top_srcdir}/misc/terminfo.src' ;; esac NCURSES_USE_DATABASE=0 if test "$use_database" != no ; then NCURSES_USE_DATABASE=1 echo "$as_me:7023: checking which terminfo source-file will be installed" >&5 echo $ECHO_N "checking which terminfo source-file will be installed... $ECHO_C" >&6 # Check whether --with-database or --without-database was given. if test "${with_database+set}" = set; then withval="$with_database" TERMINFO_SRC=$withval fi; echo "$as_me:7031: result: $TERMINFO_SRC" >&5 echo "${ECHO_T}$TERMINFO_SRC" >&6 echo "$as_me:7034: checking whether to use hashed database instead of directory/tree" >&5 echo $ECHO_N "checking whether to use hashed database instead of directory/tree... $ECHO_C" >&6 # Check whether --with-hashed-db or --without-hashed-db was given. if test "${with_hashed_db+set}" = set; then withval="$with_hashed_db" else with_hashed_db=no fi; echo "$as_me:7044: result: $with_hashed_db" >&5 echo "${ECHO_T}$with_hashed_db" >&6 else with_hashed_db=no fi echo "$as_me:7050: checking for list of fallback descriptions" >&5 echo $ECHO_N "checking for list of fallback descriptions... $ECHO_C" >&6 # Check whether --with-fallbacks or --without-fallbacks was given. if test "${with_fallbacks+set}" = set; then withval="$with_fallbacks" with_fallback=$withval else with_fallback= fi; echo "$as_me:7060: result: $with_fallback" >&5 echo "${ECHO_T}$with_fallback" >&6 FALLBACK_LIST=`test "$with_fallback" != no && echo "$with_fallback" | sed -e 's/,/ /g'` echo "$as_me:7064: checking if you want modern xterm or antique" >&5 echo $ECHO_N "checking if you want modern xterm or antique... $ECHO_C" >&6 # Check whether --with-xterm-new or --without-xterm-new was given. if test "${with_xterm_new+set}" = set; then withval="$with_xterm_new" with_xterm_new=$withval else with_xterm_new=yes fi; case $with_xterm_new in (no) with_xterm_new=xterm-old;; (*) with_xterm_new=xterm-new;; esac echo "$as_me:7078: result: $with_xterm_new" >&5 echo "${ECHO_T}$with_xterm_new" >&6 WHICH_XTERM=$with_xterm_new echo "$as_me:7082: checking if xterm backspace sends BS or DEL" >&5 echo $ECHO_N "checking if xterm backspace sends BS or DEL... $ECHO_C" >&6 # Check whether --with-xterm-kbs or --without-xterm-kbs was given. if test "${with_xterm_kbs+set}" = set; then withval="$with_xterm_kbs" with_xterm_kbs=$withval else with_xterm_kbs=BS fi; case x$with_xterm_kbs in (xyes|xno|xBS|xbs|x8) with_xterm_kbs=BS ;; (xDEL|xdel|x127) with_xterm_kbs=DEL ;; (*) with_xterm_kbs=$withval ;; esac echo "$as_me:7103: result: $with_xterm_kbs" >&5 echo "${ECHO_T}$with_xterm_kbs" >&6 XTERM_KBS=$with_xterm_kbs MAKE_TERMINFO= if test "$use_database" = no ; then TERMINFO="${datadir}/terminfo" MAKE_TERMINFO="#" else echo "$as_me:7113: checking for list of terminfo directories" >&5 echo $ECHO_N "checking for list of terminfo directories... $ECHO_C" >&6 # Check whether --with-terminfo-dirs or --without-terminfo-dirs was given. if test "${with_terminfo_dirs+set}" = set; then withval="$with_terminfo_dirs" else withval=${TERMINFO_DIRS:-${datadir}/terminfo} fi; IFS="${IFS:- }"; ac_save_ifs="$IFS"; IFS="${PATH_SEPARATOR}" cf_dst_path= for cf_src_path in $withval do if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$cf_src_path" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval cf_src_path="$cf_src_path" case ".$cf_src_path" in (.NONE/*) cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:7153: error: expected a pathname, not \"$cf_src_path\"" >&5 echo "$as_me: error: expected a pathname, not \"$cf_src_path\"" >&2;} { (exit 1); exit 1; }; } ;; esac test -n "$cf_dst_path" && cf_dst_path="${cf_dst_path}$PATH_SEPARATOR" cf_dst_path="${cf_dst_path}${cf_src_path}" done IFS="$ac_save_ifs" # This may use the prefix/exec_prefix symbols which will only yield "NONE" # so we have to check/work around. We do prefer the result of "eval"... eval cf_dst_eval="$cf_dst_path" case "x$cf_dst_eval" in (xNONE*) TERMINFO_DIRS=$cf_dst_path ;; (*) TERMINFO_DIRS="$cf_dst_eval" ;; esac echo "$as_me:7176: result: $TERMINFO_DIRS" >&5 echo "${ECHO_T}$TERMINFO_DIRS" >&6 test -n "$TERMINFO_DIRS" && cat >>confdefs.h <&5 echo $ECHO_N "checking for default terminfo directory... $ECHO_C" >&6 # Check whether --with-default-terminfo-dir or --without-default-terminfo-dir was given. if test "${with_default_terminfo_dir+set}" = set; then withval="$with_default_terminfo_dir" else withval="${TERMINFO:-${datadir}/terminfo}" fi; if test -n "${datadir}/terminfo" ; then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$withval" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval withval="$withval" case ".$withval" in (.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:7219: error: expected a pathname, not \"$withval\"" >&5 echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} { (exit 1); exit 1; }; } ;; esac fi eval TERMINFO="$withval" echo "$as_me:7228: result: $TERMINFO" >&5 echo "${ECHO_T}$TERMINFO" >&6 cat >>confdefs.h <&5 echo $ECHO_N "checking if big-core option selected... $ECHO_C" >&6 # Check whether --enable-big-core or --disable-big-core was given. if test "${enable_big_core+set}" = set; then enableval="$enable_big_core" with_big_core=$enableval else if test "$cross_compiling" = yes; then with_big_core=no else cat >conftest.$ac_ext <<_ACEOF #line 7251 "configure" #include "confdefs.h" #include #include int main() { unsigned long n = 6000000L; char *s = malloc(n); if (s != 0) s[0] = s[n-1] = 0; ${cf_cv_main_return:-return}(s == 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:7265: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7268: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:7270: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7273: \$? = $ac_status" >&5 (exit $ac_status); }; }; then with_big_core=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 with_big_core=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi; echo "$as_me:7285: result: $with_big_core" >&5 echo "${ECHO_T}$with_big_core" >&6 test "x$with_big_core" = "xyes" && cat >>confdefs.h <<\EOF #define HAVE_BIG_CORE 1 EOF ### ISO C only guarantees 512-char strings, we have tables which load faster ### when constructed using "big" strings. More than the C compiler, the awk ### program is a limit on most vendor UNIX systems. Check that we can build. echo "$as_me:7295: checking if big-strings option selected" >&5 echo $ECHO_N "checking if big-strings option selected... $ECHO_C" >&6 # Check whether --enable-big-strings or --disable-big-strings was given. if test "${enable_big_strings+set}" = set; then enableval="$enable_big_strings" with_big_strings=$enableval else case x$AWK in (x) eval with_big_strings=no ;; (*) if ( ${AWK} 'BEGIN { xx = "x"; while (length(xx) < 12000) { xx = xx "x"; }; printf("%s\n", xx); }' 2>/dev/null \ | $AWK '{ printf "%d\n", length($0); }' 2>/dev/null | $AWK 'BEGIN { eqls=0; recs=0; } { recs++; if ($0 == 12000) eqls++; } END { if (recs != 1 || eqls != 1) exit 1; }' 2>/dev/null >/dev/null ) ; then eval with_big_strings=yes else eval with_big_strings=no fi ;; esac fi; echo "$as_me:7319: result: $with_big_strings" >&5 echo "${ECHO_T}$with_big_strings" >&6 USE_BIG_STRINGS=0 test "x$with_big_strings" = "xyes" && USE_BIG_STRINGS=1 ### use option --enable-termcap to compile in the termcap fallback support echo "$as_me:7326: checking if you want termcap-fallback support" >&5 echo $ECHO_N "checking if you want termcap-fallback support... $ECHO_C" >&6 # Check whether --enable-termcap or --disable-termcap was given. if test "${enable_termcap+set}" = set; then enableval="$enable_termcap" with_termcap=$enableval else with_termcap=no fi; echo "$as_me:7336: result: $with_termcap" >&5 echo "${ECHO_T}$with_termcap" >&6 NCURSES_USE_TERMCAP=0 if test "x$with_termcap" != "xyes" ; then if test "$use_database" = no ; then if test -z "$with_fallback" ; then { { echo "$as_me:7343: error: You have disabled the database w/o specifying fallbacks" >&5 echo "$as_me: error: You have disabled the database w/o specifying fallbacks" >&2;} { (exit 1); exit 1; }; } fi fi cat >>confdefs.h <<\EOF #define PURE_TERMINFO 1 EOF else if test "$with_ticlib" != no ; then { { echo "$as_me:7356: error: Options --with-ticlib and --enable-termcap cannot be combined" >&5 echo "$as_me: error: Options --with-ticlib and --enable-termcap cannot be combined" >&2;} { (exit 1); exit 1; }; } fi NCURSES_USE_TERMCAP=1 echo "$as_me:7362: checking for list of termcap files" >&5 echo $ECHO_N "checking for list of termcap files... $ECHO_C" >&6 # Check whether --with-termpath or --without-termpath was given. if test "${with_termpath+set}" = set; then withval="$with_termpath" else withval=${TERMPATH:-/etc/termcap:/usr/share/misc/termcap} fi; IFS="${IFS:- }"; ac_save_ifs="$IFS"; IFS="${PATH_SEPARATOR}" cf_dst_path= for cf_src_path in $withval do if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$cf_src_path" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval cf_src_path="$cf_src_path" case ".$cf_src_path" in (.NONE/*) cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:7402: error: expected a pathname, not \"$cf_src_path\"" >&5 echo "$as_me: error: expected a pathname, not \"$cf_src_path\"" >&2;} { (exit 1); exit 1; }; } ;; esac test -n "$cf_dst_path" && cf_dst_path="${cf_dst_path}$PATH_SEPARATOR" cf_dst_path="${cf_dst_path}${cf_src_path}" done IFS="$ac_save_ifs" # This may use the prefix/exec_prefix symbols which will only yield "NONE" # so we have to check/work around. We do prefer the result of "eval"... eval cf_dst_eval="$cf_dst_path" case "x$cf_dst_eval" in (xNONE*) TERMPATH=$cf_dst_path ;; (*) TERMPATH="$cf_dst_eval" ;; esac echo "$as_me:7425: result: $TERMPATH" >&5 echo "${ECHO_T}$TERMPATH" >&6 test -n "$TERMPATH" && cat >>confdefs.h <&5 echo $ECHO_N "checking if fast termcap-loader is needed... $ECHO_C" >&6 # Check whether --enable-getcap or --disable-getcap was given. if test "${enable_getcap+set}" = set; then enableval="$enable_getcap" with_getcap=$enableval else with_getcap=no fi; echo "$as_me:7443: result: $with_getcap" >&5 echo "${ECHO_T}$with_getcap" >&6 test "x$with_getcap" = "xyes" && cat >>confdefs.h <<\EOF #define USE_GETCAP 1 EOF echo "$as_me:7450: checking if translated termcaps will be cached in ~/.terminfo" >&5 echo $ECHO_N "checking if translated termcaps will be cached in ~/.terminfo... $ECHO_C" >&6 # Check whether --enable-getcap-cache or --disable-getcap-cache was given. if test "${enable_getcap_cache+set}" = set; then enableval="$enable_getcap_cache" with_getcap_cache=$enableval else with_getcap_cache=no fi; echo "$as_me:7460: result: $with_getcap_cache" >&5 echo "${ECHO_T}$with_getcap_cache" >&6 test "x$with_getcap_cache" = "xyes" && cat >>confdefs.h <<\EOF #define USE_GETCAP_CACHE 1 EOF fi ### Use option --disable-home-terminfo to completely remove ~/.terminfo echo "$as_me:7470: checking if ~/.terminfo is wanted" >&5 echo $ECHO_N "checking if ~/.terminfo is wanted... $ECHO_C" >&6 # Check whether --enable-home-terminfo or --disable-home-terminfo was given. if test "${enable_home_terminfo+set}" = set; then enableval="$enable_home_terminfo" with_home_terminfo=$enableval else with_home_terminfo=yes fi; echo "$as_me:7480: result: $with_home_terminfo" >&5 echo "${ECHO_T}$with_home_terminfo" >&6 test "x$with_home_terminfo" = "xyes" && cat >>confdefs.h <<\EOF #define USE_HOME_TERMINFO 1 EOF echo "$as_me:7487: checking if you want to use restricted environment when running as root" >&5 echo $ECHO_N "checking if you want to use restricted environment when running as root... $ECHO_C" >&6 # Check whether --enable-root-environ or --disable-root-environ was given. if test "${enable_root_environ+set}" = set; then enableval="$enable_root_environ" with_root_environ=$enableval else with_root_environ=yes fi; echo "$as_me:7497: result: $with_root_environ" >&5 echo "${ECHO_T}$with_root_environ" >&6 test "x$with_root_environ" = xyes && cat >>confdefs.h <<\EOF #define USE_ROOT_ENVIRON 1 EOF ### Use option --enable-symlinks to make tic use symlinks, not hard links ### to reduce storage requirements for the terminfo database. for ac_func in \ remove \ unlink do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:7512: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 7518 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7549: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7552: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7555: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7558: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:7568: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 7591 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:7622: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7625: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:7628: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7631: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:7641: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking if link/symlink functions work... $ECHO_C" >&6 if test "${cf_cv_link_funcs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_link_funcs= for cf_func in link symlink ; do if test "$cross_compiling" = yes; then eval 'ac_cv_func_'$cf_func'=error' else cat >conftest.$ac_ext <<_ACEOF #line 7665 "configure" #include "confdefs.h" #include #include #ifdef HAVE_UNISTD_H #include #endif int main() { int fail = 0; char *src = "config.log"; char *dst = "conftest.chk"; struct stat src_sb; struct stat dst_sb; stat(src, &src_sb); fail = ($cf_func("config.log", "conftest.chk") < 0) || (stat(dst, &dst_sb) < 0) || (dst_sb.st_mtime != src_sb.st_mtime); #ifdef HAVE_UNLINK unlink(dst); #else remove(dst); #endif ${cf_cv_main_return:-return} (fail); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:7695: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7698: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:7700: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7703: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_link_funcs="$cf_cv_link_funcs $cf_func" eval 'ac_cv_func_'$cf_func'=yes' else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval 'ac_cv_func_'$cf_func'=no' fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi done test -z "$cf_cv_link_funcs" && cf_cv_link_funcs=no fi echo "$as_me:7721: result: $cf_cv_link_funcs" >&5 echo "${ECHO_T}$cf_cv_link_funcs" >&6 test "$ac_cv_func_link" = yes && cat >>confdefs.h <<\EOF #define HAVE_LINK 1 EOF test "$ac_cv_func_symlink" = yes && cat >>confdefs.h <<\EOF #define HAVE_SYMLINK 1 EOF fi with_links=no with_symlinks=no # soft links (symbolic links) are useful for some systems where hard links do # not work, or to make it simpler to copy terminfo trees around. if test "x$ac_cv_func_symlink" = xyes ; then echo "$as_me:7741: checking if tic should use symbolic links" >&5 echo $ECHO_N "checking if tic should use symbolic links... $ECHO_C" >&6 # Check whether --enable-symlinks or --disable-symlinks was given. if test "${enable_symlinks+set}" = set; then enableval="$enable_symlinks" with_symlinks=$enableval else with_symlinks=no fi; echo "$as_me:7751: result: $with_symlinks" >&5 echo "${ECHO_T}$with_symlinks" >&6 fi # If we have hard links and did not choose to use soft links instead, there is # no reason to make this choice optional - use the hard links. if test "$with_symlinks" = no ; then echo "$as_me:7758: checking if tic should use hard links" >&5 echo $ECHO_N "checking if tic should use hard links... $ECHO_C" >&6 if test "x$ac_cv_func_link" = xyes ; then with_links=yes else with_links=no fi echo "$as_me:7765: result: $with_links" >&5 echo "${ECHO_T}$with_links" >&6 fi test "x$with_links" = xyes && cat >>confdefs.h <<\EOF #define USE_LINKS 1 EOF test "x$with_symlinks" = xyes && cat >>confdefs.h <<\EOF #define USE_SYMLINKS 1 EOF ### use option --enable-broken-linker to force on use of broken-linker support echo "$as_me:7780: checking if you want broken-linker support code" >&5 echo $ECHO_N "checking if you want broken-linker support code... $ECHO_C" >&6 # Check whether --enable-broken_linker or --disable-broken_linker was given. if test "${enable_broken_linker+set}" = set; then enableval="$enable_broken_linker" with_broken_linker=$enableval else with_broken_linker=${BROKEN_LINKER:-no} fi; echo "$as_me:7790: result: $with_broken_linker" >&5 echo "${ECHO_T}$with_broken_linker" >&6 BROKEN_LINKER=0 if test "x$with_broken_linker" = xyes ; then cat >>confdefs.h <<\EOF #define BROKEN_LINKER 1 EOF BROKEN_LINKER=1 elif test "$DFT_LWR_MODEL" = shared ; then case $cf_cv_system_name in (cygwin*) cat >>confdefs.h <<\EOF #define BROKEN_LINKER 1 EOF BROKEN_LINKER=1 test -n "$verbose" && echo " cygwin linker is broken anyway" 1>&6 echo "${as_me:-configure}:7812: testing cygwin linker is broken anyway ..." 1>&5 ;; esac fi ### use option --enable-bsdpad to have tputs process BSD-style prefix padding echo "$as_me:7819: checking if tputs should process BSD-style prefix padding" >&5 echo $ECHO_N "checking if tputs should process BSD-style prefix padding... $ECHO_C" >&6 # Check whether --enable-bsdpad or --disable-bsdpad was given. if test "${enable_bsdpad+set}" = set; then enableval="$enable_bsdpad" with_bsdpad=$enableval else with_bsdpad=no fi; echo "$as_me:7829: result: $with_bsdpad" >&5 echo "${ECHO_T}$with_bsdpad" >&6 test "x$with_bsdpad" = xyes && cat >>confdefs.h <<\EOF #define BSD_TPUTS 1 EOF ### use option --enable-widec to turn on use of wide-character support NCURSES_CH_T=chtype NCURSES_LIBUTF8=0 NEED_WCHAR_H=0 NCURSES_MBSTATE_T=0 NCURSES_WCHAR_T=0 NCURSES_WINT_T=0 # Check to define _XOPEN_SOURCE "automatically" CPPFLAGS_before_XOPEN="$CPPFLAGS" cf_XOPEN_SOURCE=500 cf_POSIX_C_SOURCE=199506L cf_xopen_source= case $host_os in (aix[4-7]*) cf_xopen_source="-D_ALL_SOURCE" ;; (cygwin|msys) cf_XOPEN_SOURCE=600 ;; (darwin[0-8].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; (darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; (freebsd*|dragonfly*) # 5.x headers associate # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L cf_POSIX_C_SOURCE=200112L cf_XOPEN_SOURCE=600 cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" ;; (hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; (hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; (irix[56].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; (linux*|gnu*|mint*|k*bsd*-gnu) echo "$as_me:7886: checking if we must define _GNU_SOURCE" >&5 echo $ECHO_N "checking if we must define _GNU_SOURCE... $ECHO_C" >&6 if test "${cf_cv_gnu_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 7893 "configure" #include "confdefs.h" #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:7908: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:7911: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:7914: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7917: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_gnu_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" cat >conftest.$ac_ext <<_ACEOF #line 7926 "configure" #include "confdefs.h" #include int main () { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:7941: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:7944: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:7947: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7950: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_gnu_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_gnu_source=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:7965: result: $cf_cv_gnu_source" >&5 echo "${ECHO_T}$cf_cv_gnu_source" >&6 test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" ;; (minix*) cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... ;; (mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks and other headers which use u_int / u_short types cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` echo "$as_me:7990: checking if we should define _POSIX_C_SOURCE" >&5 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 if test "${cf_cv_posix_c_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else echo "${as_me:-configure}:7996: testing if the symbol is already defined go no further ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 7999 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8014: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8017: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8020: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8023: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_posix_c_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then cat >conftest.$ac_ext <<_ACEOF #line 8044 "configure" #include "confdefs.h" #include int main () { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8059: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8062: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8065: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8068: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "${as_me:-configure}:8079: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" echo "${as_me:-configure}:8084: testing if the second compile does not leave our definition intact error ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 8087 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8102: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8105: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8108: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8111: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source=no fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:8127: result: $cf_cv_posix_c_source" >&5 echo "${ECHO_T}$cf_cv_posix_c_source" >&6 if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_cv_posix_c_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi ;; (netbsd*) cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw ;; (openbsd[4-9]*) # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=600 ;; (openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; (os2*) cf_XOPEN_SOURCE= ;; (osf[45]*) cf_xopen_source="-D_OSF_SOURCE" ;; (nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; (sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; (solaris2.*) cf_xopen_source="-D__EXTENSIONS__" cf_cv_xopen_source=broken ;; (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2) cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE= ;; (*) echo "$as_me:8248: checking if we should define _XOPEN_SOURCE" >&5 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 if test "${cf_cv_xopen_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 8255 "configure" #include "confdefs.h" #include #include #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8274: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8277: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8280: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8283: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" cat >conftest.$ac_ext <<_ACEOF #line 8292 "configure" #include "confdefs.h" #include #include #include int main () { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8311: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8314: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8317: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8320: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:8335: result: $cf_cv_xopen_source" >&5 echo "${ECHO_T}$cf_cv_xopen_source" >&6 if test "$cf_cv_xopen_source" != no ; then CFLAGS=`echo "$CFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_temp_xopen_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` echo "$as_me:8443: checking if we should define _POSIX_C_SOURCE" >&5 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 if test "${cf_cv_posix_c_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else echo "${as_me:-configure}:8449: testing if the symbol is already defined go no further ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 8452 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8467: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8470: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8473: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8476: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_posix_c_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then cat >conftest.$ac_ext <<_ACEOF #line 8497 "configure" #include "confdefs.h" #include int main () { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8512: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8515: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8518: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8521: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "${as_me:-configure}:8532: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source" echo "${as_me:-configure}:8537: testing if the second compile does not leave our definition intact error ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 8540 "configure" #include "confdefs.h" #include int main () { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8555: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8558: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8561: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8564: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_posix_c_source=no fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:8580: result: $cf_cv_posix_c_source" >&5 echo "${ECHO_T}$cf_cv_posix_c_source" >&6 if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_cv_posix_c_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi ;; esac if test -n "$cf_xopen_source" ; then cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_xopen_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 echo "${as_me:-configure}:8738: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6 echo "${as_me:-configure}:8746: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6 echo "${as_me:-configure}:8754: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then echo "$as_me:8762: checking if _XOPEN_SOURCE really is set" >&5 echo $ECHO_N "checking if _XOPEN_SOURCE really is set... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 8765 "configure" #include "confdefs.h" #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8780: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8783: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8786: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8789: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_XOPEN_SOURCE_set=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_XOPEN_SOURCE_set=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:8798: result: $cf_XOPEN_SOURCE_set" >&5 echo "${ECHO_T}$cf_XOPEN_SOURCE_set" >&6 if test $cf_XOPEN_SOURCE_set = yes then cat >conftest.$ac_ext <<_ACEOF #line 8803 "configure" #include "confdefs.h" #include int main () { #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8818: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8821: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8824: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8827: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_XOPEN_SOURCE_set_ok=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_XOPEN_SOURCE_set_ok=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test $cf_XOPEN_SOURCE_set_ok = no then { echo "$as_me:8838: WARNING: _XOPEN_SOURCE is lower than requested" >&5 echo "$as_me: WARNING: _XOPEN_SOURCE is lower than requested" >&2;} fi else echo "$as_me:8843: checking if we should define _XOPEN_SOURCE" >&5 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 if test "${cf_cv_xopen_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 8850 "configure" #include "confdefs.h" #include #include #include int main () { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8869: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8872: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8875: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8878: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_save="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" cat >conftest.$ac_ext <<_ACEOF #line 8887 "configure" #include "confdefs.h" #include #include #include int main () { #ifdef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:8906: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:8909: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:8912: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:8915: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:8930: result: $cf_cv_xopen_source" >&5 echo "${ECHO_T}$cf_cv_xopen_source" >&6 if test "$cf_cv_xopen_source" != no ; then CFLAGS=`echo "$CFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_temp_xopen_source do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi fi fi CPPFLAGS_after_XOPEN="$CPPFLAGS" # Work around breakage on OS X echo "$as_me:9032: checking if SIGWINCH is defined" >&5 echo $ECHO_N "checking if SIGWINCH is defined... $ECHO_C" >&6 if test "${cf_cv_define_sigwinch+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 9039 "configure" #include "confdefs.h" #include #include int main () { int x = SIGWINCH ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9054: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9057: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9060: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9063: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_define_sigwinch=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 9070 "configure" #include "confdefs.h" #undef _XOPEN_SOURCE #undef _POSIX_SOURCE #undef _POSIX_C_SOURCE #include #include int main () { int x = SIGWINCH ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9088: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9091: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9094: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9097: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_define_sigwinch=maybe else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_define_sigwinch=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:9111: result: $cf_cv_define_sigwinch" >&5 echo "${ECHO_T}$cf_cv_define_sigwinch" >&6 if test "$cf_cv_define_sigwinch" = maybe ; then echo "$as_me:9115: checking for actual SIGWINCH definition" >&5 echo $ECHO_N "checking for actual SIGWINCH definition... $ECHO_C" >&6 if test "${cf_cv_fixup_sigwinch+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_fixup_sigwinch=unknown cf_sigwinch=32 while test $cf_sigwinch != 1 do cat >conftest.$ac_ext <<_ACEOF #line 9126 "configure" #include "confdefs.h" #undef _XOPEN_SOURCE #undef _POSIX_SOURCE #undef _POSIX_C_SOURCE #include #include int main () { #if SIGWINCH != $cf_sigwinch make an error #endif int x = SIGWINCH ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9148: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9151: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9154: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9157: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_fixup_sigwinch=$cf_sigwinch break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cf_sigwinch=`expr $cf_sigwinch - 1` done fi echo "$as_me:9171: result: $cf_cv_fixup_sigwinch" >&5 echo "${ECHO_T}$cf_cv_fixup_sigwinch" >&6 if test "$cf_cv_fixup_sigwinch" != unknown ; then CPPFLAGS="$CPPFLAGS -DSIGWINCH=$cf_cv_fixup_sigwinch" fi fi # Checks for CODESET support. echo "$as_me:9181: checking for nl_langinfo and CODESET" >&5 echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6 if test "${am_cv_langinfo_codeset+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 9187 "configure" #include "confdefs.h" #include int main () { char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9199: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9202: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9205: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9208: \$? = $ac_status" >&5 (exit $ac_status); }; }; then am_cv_langinfo_codeset=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 am_cv_langinfo_codeset=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:9219: result: $am_cv_langinfo_codeset" >&5 echo "${ECHO_T}$am_cv_langinfo_codeset" >&6 if test $am_cv_langinfo_codeset = yes; then cat >>confdefs.h <<\EOF #define HAVE_LANGINFO_CODESET 1 EOF fi # use these variables to work around a defect in gcc's fixincludes. NCURSES_OK_WCHAR_T= NCURSES_OK_WINT_T= echo "$as_me:9233: checking if you want wide-character code" >&5 echo $ECHO_N "checking if you want wide-character code... $ECHO_C" >&6 # Check whether --enable-widec or --disable-widec was given. if test "${enable_widec+set}" = set; then enableval="$enable_widec" with_widec=$enableval else with_widec=no fi; echo "$as_me:9243: result: $with_widec" >&5 echo "${ECHO_T}$with_widec" >&6 NCURSES_WCWIDTH_GRAPHICS=1 if test "x$with_widec" = xyes ; then if test "x$disable_lib_suffixes" = xno ; then LIB_SUFFIX="w${LIB_SUFFIX}" fi cat >>confdefs.h <<\EOF #define USE_WIDEC_SUPPORT 1 EOF cat >>confdefs.h <<\EOF #define NCURSES_WIDECHAR 1 EOF echo "$as_me:9261: checking if wchar.h can be used as is" >&5 echo $ECHO_N "checking if wchar.h can be used as is... $ECHO_C" >&6 if test "${cf_cv_wchar_h_okay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 9268 "configure" #include "confdefs.h" #include #include int main () { wint_t foo = 0; int bar = iswpunct(foo) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9285: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9288: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9291: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9294: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_wchar_h_okay=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_wchar_h_okay=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:9304: result: $cf_cv_wchar_h_okay" >&5 echo "${ECHO_T}$cf_cv_wchar_h_okay" >&6 if test $cf_cv_wchar_h_okay = no then echo "$as_me:9310: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5 echo $ECHO_N "checking if we must define _XOPEN_SOURCE_EXTENDED... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 9313 "configure" #include "confdefs.h" #include int main () { #ifndef _XOPEN_SOURCE_EXTENDED make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9329: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9332: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9335: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9338: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=yes fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:9347: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test "$cf_result" = yes ; then CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED" elif test "x" != "x" ; then echo "$as_me:9353: checking checking for compatible value versus " >&5 echo $ECHO_N "checking checking for compatible value versus ... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 9356 "configure" #include "confdefs.h" #include int main () { #if _XOPEN_SOURCE_EXTENDED- < 0 make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9372: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9375: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9378: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9381: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_result=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_result=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:9390: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 if test "$cf_result" = no ; then # perhaps we can override it - try... CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=" fi fi fi echo "$as_me:9400: checking if wcwidth agrees graphics are single-width" >&5 echo $ECHO_N "checking if wcwidth agrees graphics are single-width... $ECHO_C" >&6 if test "${cf_cv_wcwidth_graphics+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.in <conftest.$ac_ext <<_ACEOF #line 9471 "configure" #include "confdefs.h" #include #include #include #define MY_LEN 80 int main(void) { FILE *fp; int value; char buffer[MY_LEN + 1]; char notes[MY_LEN + 1]; int totals = 0; int passed = 0; if (setlocale(LC_ALL, "en_US.UTF8") || setlocale(LC_ALL, "en_US.UTF-8") || setlocale(LC_ALL, "en_US.utf8") || setlocale(LC_ALL, "en_US.utf-8")) { if ((fp = fopen("conftest.in", "r")) != 0) { while (fgets(buffer, MY_LEN, fp) != 0) { if (*buffer == '-') { fprintf(stderr, "\t%s", buffer); } else if (sscanf(buffer, "%x %s", &value, notes) == 2) { ++totals; if (wcwidth(value) == 1) ++passed; fprintf(stderr, "%d\t%s", wcwidth(value), buffer); } else { fprintf(stderr, "?\t%s", buffer); } } } } fprintf(stderr, "%d/%d passed wcwidth/graphics check\n", passed, totals); return (totals == passed) ? 0 : 1; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:9515: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9518: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:9520: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9523: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_wcwidth_graphics=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_wcwidth_graphics=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:9536: result: $cf_cv_wcwidth_graphics" >&5 echo "${ECHO_T}$cf_cv_wcwidth_graphics" >&6 test "$cf_cv_wcwidth_graphics" = no && NCURSES_WCWIDTH_GRAPHICS=0 # with_overwrite=no NCURSES_CH_T=cchar_t for ac_func in putwc btowc wctob mbtowc wctomb mblen mbrlen mbrtowc wcsrtombs mbsrtowcs wcstombs mbstowcs do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:9547: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 9553 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9584: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9587: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9590: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9593: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:9603: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for multibyte character support... $ECHO_C" >&6 if test "${cf_cv_utf8_lib+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save_LIBS="$LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9623 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9636: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9639: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9642: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9645: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_utf8_lib=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these # will be set on completion of the AC_TRY_LINK below. cf_cv_header_path_utf8= cf_cv_library_path_utf8= echo "${as_me:-configure}:9657: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5 cf_save_LIBS="$LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9662 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9675: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9678: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9681: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9684: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_find_linkage_utf8=yes cf_cv_header_path_utf8=/usr/include cf_cv_library_path_utf8=/usr/lib else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 LIBS="-lutf8 $cf_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line 9698 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9711: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9714: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9717: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9720: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_find_linkage_utf8=yes cf_cv_header_path_utf8=/usr/include cf_cv_library_path_utf8=/usr/lib cf_cv_library_file_utf8="-lutf8" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_find_linkage_utf8=no LIBS="$cf_save_LIBS" test -n "$verbose" && echo " find linkage for utf8 library" 1>&6 echo "${as_me:-configure}:9737: testing find linkage for utf8 library ..." 1>&5 echo "${as_me:-configure}:9739: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5 cf_save_CPPFLAGS="$CPPFLAGS" cf_test_CPPFLAGS="$CPPFLAGS" cf_search= # collect the current set of include-directories from compiler flags cf_header_path_list="" if test -n "${CFLAGS}${CPPFLAGS}" ; then for cf_header_path in $CPPFLAGS $CFLAGS do case $cf_header_path in (-I*) cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'` test "x$cf_header_path" != "xNONE" && \ test -d "$cf_header_path" && \ { test -n "$verbose" && echo " ... testing for include-directories under $cf_header_path" test -d $cf_header_path/include && cf_search="$cf_search $cf_header_path/include" test -d $cf_header_path/include/utf8 && cf_search="$cf_search $cf_header_path/include/utf8" test -d $cf_header_path/include/utf8/include && cf_search="$cf_search $cf_header_path/include/utf8/include" test -d $cf_header_path/utf8/include && cf_search="$cf_search $cf_header_path/utf8/include" test -d $cf_header_path/utf8/include/utf8 && cf_search="$cf_search $cf_header_path/utf8/include/utf8" } cf_header_path_list="$cf_header_path_list $cf_search" ;; esac done fi # add the variations for the package we are looking for cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for include-directories under $prefix" test -d $prefix/include && cf_search="$cf_search $prefix/include" test -d $prefix/include/utf8 && cf_search="$cf_search $prefix/include/utf8" test -d $prefix/include/utf8/include && cf_search="$cf_search $prefix/include/utf8/include" test -d $prefix/utf8/include && cf_search="$cf_search $prefix/utf8/include" test -d $prefix/utf8/include/utf8 && cf_search="$cf_search $prefix/utf8/include/utf8" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" test -d $cf_subdir_prefix/include/utf8 && cf_search="$cf_search $cf_subdir_prefix/include/utf8" test -d $cf_subdir_prefix/include/utf8/include && cf_search="$cf_search $cf_subdir_prefix/include/utf8/include" test -d $cf_subdir_prefix/utf8/include && cf_search="$cf_search $cf_subdir_prefix/utf8/include" test -d $cf_subdir_prefix/utf8/include/utf8 && cf_search="$cf_search $cf_subdir_prefix/utf8/include/utf8" } done test "$includedir" != NONE && \ test "$includedir" != "/usr/include" && \ test -d "$includedir" && { test -d $includedir && cf_search="$cf_search $includedir" test -d $includedir/utf8 && cf_search="$cf_search $includedir/utf8" } test "$oldincludedir" != NONE && \ test "$oldincludedir" != "/usr/include" && \ test -d "$oldincludedir" && { test -d $oldincludedir && cf_search="$cf_search $oldincludedir" test -d $oldincludedir/utf8 && cf_search="$cf_search $oldincludedir/utf8" } cf_search="$cf_search $cf_header_path_list" for cf_cv_header_path_utf8 in $cf_search do if test -d $cf_cv_header_path_utf8 ; then test -n "$verbose" && echo " ... testing $cf_cv_header_path_utf8" 1>&6 echo "${as_me:-configure}:9830: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5 CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_utf8" cat >conftest.$ac_ext <<_ACEOF #line 9834 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:9847: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:9850: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:9853: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9856: \$? = $ac_status" >&5 (exit $ac_status); }; }; then test -n "$verbose" && echo " ... found utf8 headers in $cf_cv_header_path_utf8" 1>&6 echo "${as_me:-configure}:9861: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5 cf_cv_find_linkage_utf8=maybe cf_test_CPPFLAGS="$CPPFLAGS" break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext fi done if test "$cf_cv_find_linkage_utf8" = maybe ; then echo "${as_me:-configure}:9879: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5 cf_save_LIBS="$LIBS" cf_save_LDFLAGS="$LDFLAGS" if test "$cf_cv_find_linkage_utf8" != yes ; then cf_search= cf_library_path_list="" if test -n "${LDFLAGS}${LIBS}" ; then for cf_library_path in $LDFLAGS $LIBS do case $cf_library_path in (-L*) cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'` test "x$cf_library_path" != "xNONE" && \ test -d "$cf_library_path" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $cf_library_path" test -d $cf_library_path/lib && cf_search="$cf_search $cf_library_path/lib" test -d $cf_library_path/lib/utf8 && cf_search="$cf_search $cf_library_path/lib/utf8" test -d $cf_library_path/lib/utf8/lib && cf_search="$cf_search $cf_library_path/lib/utf8/lib" test -d $cf_library_path/utf8/lib && cf_search="$cf_search $cf_library_path/utf8/lib" test -d $cf_library_path/utf8/lib/utf8 && cf_search="$cf_search $cf_library_path/utf8/lib/utf8" } cf_library_path_list="$cf_library_path_list $cf_search" ;; esac done fi cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $prefix" test -d $prefix/lib && cf_search="$cf_search $prefix/lib" test -d $prefix/lib/utf8 && cf_search="$cf_search $prefix/lib/utf8" test -d $prefix/lib/utf8/lib && cf_search="$cf_search $prefix/lib/utf8/lib" test -d $prefix/utf8/lib && cf_search="$cf_search $prefix/utf8/lib" test -d $prefix/utf8/lib/utf8 && cf_search="$cf_search $prefix/utf8/lib/utf8" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" test -d $cf_subdir_prefix/lib/utf8 && cf_search="$cf_search $cf_subdir_prefix/lib/utf8" test -d $cf_subdir_prefix/lib/utf8/lib && cf_search="$cf_search $cf_subdir_prefix/lib/utf8/lib" test -d $cf_subdir_prefix/utf8/lib && cf_search="$cf_search $cf_subdir_prefix/utf8/lib" test -d $cf_subdir_prefix/utf8/lib/utf8 && cf_search="$cf_search $cf_subdir_prefix/utf8/lib/utf8" } done cf_search="$cf_library_path_list $cf_search" for cf_cv_library_path_utf8 in $cf_search do if test -d $cf_cv_library_path_utf8 ; then test -n "$verbose" && echo " ... testing $cf_cv_library_path_utf8" 1>&6 echo "${as_me:-configure}:9954: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5 CPPFLAGS="$cf_test_CPPFLAGS" LIBS="-lutf8 $cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_utf8" cat >conftest.$ac_ext <<_ACEOF #line 9960 "configure" #include "confdefs.h" #include int main () { putwc(0,0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:9973: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:9976: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:9979: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:9982: \$? = $ac_status" >&5 (exit $ac_status); }; }; then test -n "$verbose" && echo " ... found utf8 library in $cf_cv_library_path_utf8" 1>&6 echo "${as_me:-configure}:9987: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5 cf_cv_find_linkage_utf8=yes cf_cv_library_file_utf8="-lutf8" break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 CPPFLAGS="$cf_save_CPPFLAGS" LIBS="$cf_save_LIBS" LDFLAGS="$cf_save_LDFLAGS" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi done CPPFLAGS="$cf_save_CPPFLAGS" LDFLAGS="$cf_save_LDFLAGS" fi else cf_cv_find_linkage_utf8=no fi fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save_LIBS" if test "$cf_cv_find_linkage_utf8" = yes ; then cf_cv_utf8_lib=add-on else cf_cv_utf8_lib=no fi fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:10029: result: $cf_cv_utf8_lib" >&5 echo "${ECHO_T}$cf_cv_utf8_lib" >&6 # HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between # ncurses/ncursesw: if test "$cf_cv_utf8_lib" = "add-on" ; then cat >>confdefs.h <<\EOF #define HAVE_LIBUTF8_H 1 EOF if test -n "$cf_cv_header_path_utf8" ; then for cf_add_incdir in $cf_cv_header_path_utf8 do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 10064 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10076: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10079: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10082: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10085: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:10102: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi if test -n "$cf_cv_library_path_utf8" ; then for cf_add_libdir in $cf_cv_library_path_utf8 do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:10138: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi cf_add_libs="$cf_cv_library_file_utf8" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi if test "$cf_cv_utf8_lib" != no ; then NCURSES_LIBUTF8=1 fi fi # This is needed on Tru64 5.0 to declare mbstate_t echo "$as_me:10170: checking if we must include wchar.h to declare mbstate_t" >&5 echo $ECHO_N "checking if we must include wchar.h to declare mbstate_t... $ECHO_C" >&6 if test "${cf_cv_mbstate_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 10177 "configure" #include "confdefs.h" #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { mbstate_t state ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10195: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10198: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10201: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10204: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_mbstate_t=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 10211 "configure" #include "confdefs.h" #include #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { mbstate_t value ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10230: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10233: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10236: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10239: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_mbstate_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_mbstate_t=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:10251: result: $cf_cv_mbstate_t" >&5 echo "${ECHO_T}$cf_cv_mbstate_t" >&6 if test "$cf_cv_mbstate_t" = yes ; then cat >>confdefs.h <<\EOF #define NEED_WCHAR_H 1 EOF NEED_WCHAR_H=1 fi # if we do not find mbstate_t in either place, use substitution to provide a fallback. if test "$cf_cv_mbstate_t" = unknown ; then NCURSES_MBSTATE_T=1 fi # This is needed on Tru64 5.0 to declare wchar_t echo "$as_me:10269: checking if we must include wchar.h to declare wchar_t" >&5 echo $ECHO_N "checking if we must include wchar.h to declare wchar_t... $ECHO_C" >&6 if test "${cf_cv_wchar_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 10276 "configure" #include "confdefs.h" #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { wchar_t state ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10294: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10297: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10300: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10303: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_wchar_t=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 10310 "configure" #include "confdefs.h" #include #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { wchar_t value ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10329: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10332: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10335: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10338: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_wchar_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_wchar_t=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:10350: result: $cf_cv_wchar_t" >&5 echo "${ECHO_T}$cf_cv_wchar_t" >&6 if test "$cf_cv_wchar_t" = yes ; then cat >>confdefs.h <<\EOF #define NEED_WCHAR_H 1 EOF NEED_WCHAR_H=1 fi # if we do not find wchar_t in either place, use substitution to provide a fallback. if test "$cf_cv_wchar_t" = unknown ; then NCURSES_WCHAR_T=1 fi # if we find wchar_t in either place, use substitution to provide a fallback. if test "$cf_cv_wchar_t" != unknown ; then NCURSES_OK_WCHAR_T=1 fi # This is needed on Tru64 5.0 to declare wint_t echo "$as_me:10373: checking if we must include wchar.h to declare wint_t" >&5 echo $ECHO_N "checking if we must include wchar.h to declare wint_t... $ECHO_C" >&6 if test "${cf_cv_wint_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 10380 "configure" #include "confdefs.h" #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { wint_t state ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10398: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10401: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10404: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10407: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_wint_t=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 10414 "configure" #include "confdefs.h" #include #include #include #include #ifdef HAVE_LIBUTF8_H #include #endif int main () { wint_t value ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10433: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10436: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10439: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10442: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_wint_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_wint_t=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:10454: result: $cf_cv_wint_t" >&5 echo "${ECHO_T}$cf_cv_wint_t" >&6 if test "$cf_cv_wint_t" = yes ; then cat >>confdefs.h <<\EOF #define NEED_WCHAR_H 1 EOF NEED_WCHAR_H=1 fi # if we do not find wint_t in either place, use substitution to provide a fallback. if test "$cf_cv_wint_t" = unknown ; then NCURSES_WINT_T=1 fi # if we find wint_t in either place, use substitution to provide a fallback. if test "$cf_cv_wint_t" != unknown ; then NCURSES_OK_WINT_T=1 fi if test "$NCURSES_MBSTATE_T" != 0; then cat >>confdefs.h <<\EOF #define NEED_MBSTATE_T_DEF 1 EOF fi fi ### use option --disable-lp64 to allow long chtype echo "$as_me:10486: checking whether to enable _LP64 definition in curses.h" >&5 echo $ECHO_N "checking whether to enable _LP64 definition in curses.h... $ECHO_C" >&6 # Check whether --enable-lp64 or --disable-lp64 was given. if test "${enable_lp64+set}" = set; then enableval="$enable_lp64" with_lp64=$enableval else with_lp64=$cf_dft_with_lp64 fi; echo "$as_me:10496: result: $with_lp64" >&5 echo "${ECHO_T}$with_lp64" >&6 if test "x$with_lp64" = xyes ; then cf_cv_enable_lp64=1 else cf_cv_enable_lp64=0 fi # Check whether --enable-largefile or --disable-largefile was given. if test "${enable_largefile+set}" = set; then enableval="$enable_largefile" fi; if test "$enable_largefile" != no; then echo "$as_me:10512: checking for special C compiler options needed for large files" >&5 echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_largefile_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat >conftest.$ac_ext <<_ACEOF #line 10524 "configure" #include "confdefs.h" #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10544: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10547: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10550: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10553: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext CC="$CC -n32" rm -f conftest.$ac_objext if { (eval echo "$as_me:10563: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10566: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10569: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10572: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_largefile_CC=' -n32'; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi echo "$as_me:10586: result: $ac_cv_sys_largefile_CC" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6 if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi echo "$as_me:10592: checking for _FILE_OFFSET_BITS value needed for large files" >&5 echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_file_offset_bits+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_file_offset_bits=no cat >conftest.$ac_ext <<_ACEOF #line 10600 "configure" #include "confdefs.h" #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10620: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10623: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10626: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10629: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 10638 "configure" #include "confdefs.h" #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10659: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10662: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10665: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10668: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_file_offset_bits=64; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi echo "$as_me:10679: result: $ac_cv_sys_file_offset_bits" >&5 echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6 if test "$ac_cv_sys_file_offset_bits" != no; then cat >>confdefs.h <&5 echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_large_files+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_large_files=no cat >conftest.$ac_ext <<_ACEOF #line 10697 "configure" #include "confdefs.h" #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10717: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10720: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10723: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10726: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 10735 "configure" #include "confdefs.h" #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10756: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10759: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10762: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10765: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_large_files=1; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi echo "$as_me:10776: result: $ac_cv_sys_large_files" >&5 echo "${ECHO_T}$ac_cv_sys_large_files" >&6 if test "$ac_cv_sys_large_files" != no; then cat >>confdefs.h <&5 echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_largefile_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_largefile_source=no cat >conftest.$ac_ext <<_ACEOF #line 10797 "configure" #include "confdefs.h" #include int main () { return !fseeko; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10809: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10812: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10815: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10818: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line 10827 "configure" #include "confdefs.h" #define _LARGEFILE_SOURCE 1 #include int main () { return !fseeko; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10840: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10843: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10846: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10849: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_largefile_source=1; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi echo "$as_me:10860: result: $ac_cv_sys_largefile_source" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6 if test "$ac_cv_sys_largefile_source" != no; then cat >>confdefs.h <&5 echo $ECHO_N "checking for fseeko... $ECHO_C" >&6 if test "${ac_cv_func_fseeko+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 10880 "configure" #include "confdefs.h" #include int main () { return fseeko && fseeko (stdin, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:10892: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:10895: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:10898: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10901: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_fseeko=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_fseeko=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:10911: result: $ac_cv_func_fseeko" >&5 echo "${ECHO_T}$ac_cv_func_fseeko" >&6 if test $ac_cv_func_fseeko = yes; then cat >>confdefs.h <<\EOF #define HAVE_FSEEKO 1 EOF fi # Normally we would collect these definitions in the config.h, # but (like _XOPEN_SOURCE), some environments rely on having these # defined before any of the system headers are included. Another # case comes up with C++, e.g., on AIX the compiler compiles the # header files by themselves before looking at the body files it is # told to compile. For ncurses, those header files do not include # the config.h test "$ac_cv_sys_large_files" != no && CPPFLAGS="$CPPFLAGS -D_LARGE_FILES " test "$ac_cv_sys_largefile_source" != no && CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE " test "$ac_cv_sys_file_offset_bits" != no && CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits " echo "$as_me:10932: checking whether to use struct dirent64" >&5 echo $ECHO_N "checking whether to use struct dirent64... $ECHO_C" >&6 if test "${cf_cv_struct_dirent64+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 10939 "configure" #include "confdefs.h" #include #include int main () { /* if transitional largefile support is setup, this is true */ extern struct dirent64 * readdir(DIR *); struct dirent64 *x = readdir((DIR *)0); struct dirent *y = readdir((DIR *)0); int z = x - y; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:10960: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:10963: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:10966: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:10969: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_struct_dirent64=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_struct_dirent64=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:10980: result: $cf_cv_struct_dirent64" >&5 echo "${ECHO_T}$cf_cv_struct_dirent64" >&6 test "$cf_cv_struct_dirent64" = yes && cat >>confdefs.h <<\EOF #define HAVE_STRUCT_DIRENT64 1 EOF fi ### use option --disable-tparm-varargs to make tparm() conform to X/Open echo "$as_me:10990: checking if you want tparm not to use X/Open fixed-parameter list" >&5 echo $ECHO_N "checking if you want tparm not to use X/Open fixed-parameter list... $ECHO_C" >&6 # Check whether --enable-tparm-varargs or --disable-tparm-varargs was given. if test "${enable_tparm_varargs+set}" = set; then enableval="$enable_tparm_varargs" with_tparm_varargs=$enableval else with_tparm_varargs=yes fi; echo "$as_me:11000: result: $with_tparm_varargs" >&5 echo "${ECHO_T}$with_tparm_varargs" >&6 NCURSES_TPARM_VARARGS=0 test "x$with_tparm_varargs" = xyes && NCURSES_TPARM_VARARGS=1 ### use option --disable-tic-depends to make libtic not explicitly depend on ncurses/ncursesw if test "$with_ticlib" != no ; then echo "$as_me:11007: checking if you want tic library to use explicit dependency on ncurses$LIB_SUFFIX library" >&5 echo $ECHO_N "checking if you want tic library to use explicit dependency on ncurses$LIB_SUFFIX library... $ECHO_C" >&6 # Check whether --enable-tic-depends or --disable-tic-depends was given. if test "${enable_tic_depends+set}" = set; then enableval="$enable_tic_depends" with_tic_depends=$enableval else with_tic_depends=yes fi; echo "$as_me:11017: result: $with_tic_depends" >&5 echo "${ECHO_T}$with_tic_depends" >&6 else with_tic_depends=no fi ### use option --with-bool to override bool's type echo "$as_me:11024: checking for type of bool" >&5 echo $ECHO_N "checking for type of bool... $ECHO_C" >&6 # Check whether --with-bool or --without-bool was given. if test "${with_bool+set}" = set; then withval="$with_bool" NCURSES_BOOL="$withval" else NCURSES_BOOL=auto fi; echo "$as_me:11034: result: $NCURSES_BOOL" >&5 echo "${ECHO_T}$NCURSES_BOOL" >&6 echo "$as_me:11037: checking for alternate terminal capabilities file" >&5 echo $ECHO_N "checking for alternate terminal capabilities file... $ECHO_C" >&6 # Check whether --with-caps or --without-caps was given. if test "${with_caps+set}" = set; then withval="$with_caps" TERMINFO_CAPS=Caps.$withval else TERMINFO_CAPS=Caps fi; test -f "${srcdir}/include/${TERMINFO_CAPS}" || TERMINFO_CAPS=Caps echo "$as_me:11048: result: $TERMINFO_CAPS" >&5 echo "${ECHO_T}$TERMINFO_CAPS" >&6 ### use option --with-chtype to override chtype's type echo "$as_me:11052: checking for type of chtype" >&5 echo $ECHO_N "checking for type of chtype... $ECHO_C" >&6 # Check whether --with-chtype or --without-chtype was given. if test "${with_chtype+set}" = set; then withval="$with_chtype" NCURSES_CHTYPE="$withval" else NCURSES_CHTYPE=$cf_dft_chtype fi; echo "$as_me:11062: result: $NCURSES_CHTYPE" >&5 echo "${ECHO_T}$NCURSES_CHTYPE" >&6 ### use option --with-ospeed to override ospeed's type echo "$as_me:11066: checking for type of ospeed" >&5 echo $ECHO_N "checking for type of ospeed... $ECHO_C" >&6 # Check whether --with-ospeed or --without-ospeed was given. if test "${with_ospeed+set}" = set; then withval="$with_ospeed" NCURSES_OSPEED="$withval" else NCURSES_OSPEED=short fi; echo "$as_me:11076: result: $NCURSES_OSPEED" >&5 echo "${ECHO_T}$NCURSES_OSPEED" >&6 ### use option --with-mmask-t to override mmask_t's type echo "$as_me:11080: checking for type of mmask_t" >&5 echo $ECHO_N "checking for type of mmask_t... $ECHO_C" >&6 # Check whether --with-mmask-t or --without-mmask-t was given. if test "${with_mmask_t+set}" = set; then withval="$with_mmask_t" NCURSES_MMASK_T="$withval" else NCURSES_MMASK_T=$cf_dft_mmask_t fi; echo "$as_me:11090: result: $NCURSES_MMASK_T" >&5 echo "${ECHO_T}$NCURSES_MMASK_T" >&6 ### use option --with-ccharw-max to override CCHARW_MAX size echo "$as_me:11094: checking for size CCHARW_MAX" >&5 echo $ECHO_N "checking for size CCHARW_MAX... $ECHO_C" >&6 # Check whether --with-ccharw-max or --without-ccharw-max was given. if test "${with_ccharw_max+set}" = set; then withval="$with_ccharw_max" NCURSES_CCHARW_MAX="$withval" else NCURSES_CCHARW_MAX=5 fi; echo "$as_me:11104: result: $NCURSES_CCHARW_MAX" >&5 echo "${ECHO_T}$NCURSES_CCHARW_MAX" >&6 ### use option --with-tparm-arg to override tparm's argument type echo "$as_me:11108: checking for type of tparm args" >&5 echo $ECHO_N "checking for type of tparm args... $ECHO_C" >&6 # Check whether --with-tparm-arg or --without-tparm-arg was given. if test "${with_tparm_arg+set}" = set; then withval="$with_tparm_arg" NCURSES_TPARM_ARG="$withval" else NCURSES_TPARM_ARG=$cf_dft_tparm_arg fi; echo "$as_me:11118: result: $NCURSES_TPARM_ARG" >&5 echo "${ECHO_T}$NCURSES_TPARM_ARG" >&6 ### Enable compiling-in rcs id's echo "$as_me:11122: checking if RCS identifiers should be compiled-in" >&5 echo $ECHO_N "checking if RCS identifiers should be compiled-in... $ECHO_C" >&6 # Check whether --with-rcs-ids or --without-rcs-ids was given. if test "${with_rcs_ids+set}" = set; then withval="$with_rcs_ids" with_rcs_ids=$withval else with_rcs_ids=no fi; echo "$as_me:11132: result: $with_rcs_ids" >&5 echo "${ECHO_T}$with_rcs_ids" >&6 test "x$with_rcs_ids" = xyes && cat >>confdefs.h <<\EOF #define USE_RCS_IDS 1 EOF ############################################################################### echo "$as_me:11141: checking format of man-pages" >&5 echo $ECHO_N "checking format of man-pages... $ECHO_C" >&6 # Check whether --with-manpage-format or --without-manpage-format was given. if test "${with_manpage_format+set}" = set; then withval="$with_manpage_format" MANPAGE_FORMAT=$withval else MANPAGE_FORMAT=unknown fi; test -z "$MANPAGE_FORMAT" && MANPAGE_FORMAT=unknown MANPAGE_FORMAT=`echo "$MANPAGE_FORMAT" | sed -e 's/,/ /g'` cf_unknown= case $MANPAGE_FORMAT in (unknown) if test -z "$MANPATH" ; then MANPATH="/usr/man:/usr/share/man" fi # look for the 'date' man-page (it's most likely to be installed!) MANPAGE_FORMAT= cf_preform=no cf_catonly=yes cf_example=date IFS="${IFS:- }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for cf_dir in $MANPATH; do test -z "$cf_dir" && cf_dir=/usr/man for cf_name in $cf_dir/man*/$cf_example.[01]* $cf_dir/cat*/$cf_example.[01]* $cf_dir/man*/$cf_example $cf_dir/cat*/$cf_example do cf_test=`echo $cf_name | sed -e 's/*//'` if test "x$cf_test" = "x$cf_name" ; then case "$cf_name" in (*.gz) MANPAGE_FORMAT="$MANPAGE_FORMAT gzip";; (*.Z) MANPAGE_FORMAT="$MANPAGE_FORMAT compress";; (*.0) MANPAGE_FORMAT="$MANPAGE_FORMAT BSDI";; (*) MANPAGE_FORMAT="$MANPAGE_FORMAT normal";; esac case "$cf_name" in ($cf_dir/man*) cf_catonly=no ;; ($cf_dir/cat*) cf_preform=yes ;; esac break fi # if we found a match in either man* or cat*, stop looking if test -n "$MANPAGE_FORMAT" ; then cf_found=no test "$cf_preform" = yes && MANPAGE_FORMAT="$MANPAGE_FORMAT formatted" test "$cf_catonly" = yes && MANPAGE_FORMAT="$MANPAGE_FORMAT catonly" case "$cf_name" in ($cf_dir/cat*) cf_found=yes ;; esac test $cf_found=yes && break fi done # only check the first directory in $MANPATH where we find manpages if test -n "$MANPAGE_FORMAT" ; then break fi done # if we did not find the example, just assume it is normal test -z "$MANPAGE_FORMAT" && MANPAGE_FORMAT=normal IFS="$ac_save_ifs" ;; (*) for cf_option in $MANPAGE_FORMAT; do case $cf_option in (gzip|compress|BSDI|normal|formatted|catonly) ;; (*) cf_unknown="$cf_unknown $cf_option" ;; esac done ;; esac echo "$as_me:11230: result: $MANPAGE_FORMAT" >&5 echo "${ECHO_T}$MANPAGE_FORMAT" >&6 if test -n "$cf_unknown" ; then { echo "$as_me:11233: WARNING: Unexpected manpage-format $cf_unknown" >&5 echo "$as_me: WARNING: Unexpected manpage-format $cf_unknown" >&2;} fi echo "$as_me:11237: checking for manpage renaming" >&5 echo $ECHO_N "checking for manpage renaming... $ECHO_C" >&6 # Check whether --with-manpage-renames or --without-manpage-renames was given. if test "${with_manpage_renames+set}" = set; then withval="$with_manpage_renames" MANPAGE_RENAMES=$withval else MANPAGE_RENAMES=yes fi; case ".$MANPAGE_RENAMES" in (.no) ;; (.|.yes) # Debian 'man' program? if test -f /etc/debian_version ; then MANPAGE_RENAMES=`cd $srcdir && pwd`/man/man_db.renames else MANPAGE_RENAMES=no fi ;; esac if test "$MANPAGE_RENAMES" != no ; then if test -f $srcdir/man/$MANPAGE_RENAMES ; then MANPAGE_RENAMES=`cd $srcdir/man && pwd`/$MANPAGE_RENAMES elif test ! -f $MANPAGE_RENAMES ; then { { echo "$as_me:11265: error: not a filename: $MANPAGE_RENAMES" >&5 echo "$as_me: error: not a filename: $MANPAGE_RENAMES" >&2;} { (exit 1); exit 1; }; } fi test ! -d man && mkdir man # Construct a sed-script to perform renaming within man-pages if test -n "$MANPAGE_RENAMES" ; then test ! -d man && mkdir man $SHELL $srcdir/man/make_sed.sh $MANPAGE_RENAMES >./edit_man.sed fi fi echo "$as_me:11279: result: $MANPAGE_RENAMES" >&5 echo "${ECHO_T}$MANPAGE_RENAMES" >&6 echo "$as_me:11282: checking if manpage aliases will be installed" >&5 echo $ECHO_N "checking if manpage aliases will be installed... $ECHO_C" >&6 # Check whether --with-manpage-aliases or --without-manpage-aliases was given. if test "${with_manpage_aliases+set}" = set; then withval="$with_manpage_aliases" MANPAGE_ALIASES=$withval else MANPAGE_ALIASES=yes fi; echo "$as_me:11293: result: $MANPAGE_ALIASES" >&5 echo "${ECHO_T}$MANPAGE_ALIASES" >&6 case "x$LN_S" in (xln*) cf_use_symlinks=yes ;; (*) cf_use_symlinks=no ;; esac MANPAGE_SYMLINKS=no if test "$MANPAGE_ALIASES" = yes ; then echo "$as_me:11307: checking if manpage symlinks should be used" >&5 echo $ECHO_N "checking if manpage symlinks should be used... $ECHO_C" >&6 # Check whether --with-manpage-symlinks or --without-manpage-symlinks was given. if test "${with_manpage_symlinks+set}" = set; then withval="$with_manpage_symlinks" MANPAGE_SYMLINKS=$withval else MANPAGE_SYMLINKS=$cf_use_symlinks fi; if test "$$cf_use_symlinks" = no; then if test "$MANPAGE_SYMLINKS" = yes ; then { echo "$as_me:11320: WARNING: cannot make symlinks" >&5 echo "$as_me: WARNING: cannot make symlinks" >&2;} MANPAGE_SYMLINKS=no fi fi echo "$as_me:11326: result: $MANPAGE_SYMLINKS" >&5 echo "${ECHO_T}$MANPAGE_SYMLINKS" >&6 fi echo "$as_me:11330: checking for manpage tbl" >&5 echo $ECHO_N "checking for manpage tbl... $ECHO_C" >&6 # Check whether --with-manpage-tbl or --without-manpage-tbl was given. if test "${with_manpage_tbl+set}" = set; then withval="$with_manpage_tbl" MANPAGE_TBL=$withval else MANPAGE_TBL=no fi; echo "$as_me:11341: result: $MANPAGE_TBL" >&5 echo "${ECHO_T}$MANPAGE_TBL" >&6 if test "$prefix" = "NONE" ; then cf_prefix="$ac_default_prefix" else cf_prefix="$prefix" fi case "$MANPAGE_FORMAT" in (*catonly*) cf_format=yes cf_inboth=no ;; (*formatted*) cf_format=yes cf_inboth=yes ;; (*) cf_format=no cf_inboth=no ;; esac test ! -d man && mkdir man cf_so_strip= cf_compress= case "$MANPAGE_FORMAT" in (*compress*) cf_so_strip="Z" cf_compress=compress ;; (*gzip*) cf_so_strip="gz" cf_compress=gzip ;; esac cf_edit_man=./edit_man.sh cf_man_alias=`pwd`/man_alias.sed cat >$cf_edit_man <>$cf_man_alias <<-CF_EOF2 s,@DATADIR@,\$datadir,g s,@TERMINFO@,\${TERMINFO:="no default value"},g s,@TERMINFO_DIRS@,\${TERMINFO_DIRS:="no default value"},g s,@NCURSES_MAJOR@,\${NCURSES_MAJOR:="no default value"},g s,@NCURSES_MINOR@,\${NCURSES_MINOR:="no default value"},g s,@NCURSES_PATCH@,\${NCURSES_PATCH:="no default value"},g s,@NCURSES_OSPEED@,\${NCURSES_OSPEED:="no default value"},g CF_EOF for cf_name in captoinfo clear infocmp infotocap tabs tic toe tput tset do cf_NAME=`echo "$cf_name" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cf_name=`echo $cf_name|sed "$program_transform_name"` cat >>$cf_edit_man <<-CF_EOF s,@$cf_NAME@,$cf_name,g CF_EOF done cat >>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <\$TMP CF_EOF else cat >>$cf_edit_man <\$TMP CF_EOF fi cat >>$cf_edit_man <\$TMP.out mv \$TMP.out \$TMP fi CF_EOF if test $with_overwrite != yes ; then cat >>$cf_edit_man <\$TMP.out mv \$TMP.out \$TMP CF_EOF fi if test $with_curses_h != yes ; then cat >>$cf_edit_man <\$TMP.out mv \$TMP.out \$TMP CF_EOF fi cat >>$cf_edit_man <\$TMP.out mv \$TMP.out \$TMP fi CF_EOF if test -n "$cf_compress" ; then cat >>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <\$TMP CF_EOF if test -n "$cf_compress" ; then cat >>$cf_edit_man <>$cf_edit_man <&5 echo $ECHO_N "checking if you want to build with function extensions... $ECHO_C" >&6 # Check whether --enable-ext-funcs or --disable-ext-funcs was given. if test "${enable_ext_funcs+set}" = set; then enableval="$enable_ext_funcs" with_ext_funcs=$enableval else with_ext_funcs=yes fi; echo "$as_me:11684: result: $with_ext_funcs" >&5 echo "${ECHO_T}$with_ext_funcs" >&6 if test "x$with_ext_funcs" = xyes ; then NCURSES_EXT_FUNCS=1 cat >>confdefs.h <<\EOF #define HAVE_ASSUME_DEFAULT_COLORS 1 EOF cat >>confdefs.h <<\EOF #define HAVE_CURSES_VERSION 1 EOF cat >>confdefs.h <<\EOF #define HAVE_HAS_KEY 1 EOF cat >>confdefs.h <<\EOF #define HAVE_RESIZETERM 1 EOF cat >>confdefs.h <<\EOF #define HAVE_RESIZE_TERM 1 EOF cat >>confdefs.h <<\EOF #define HAVE_TERM_ENTRY_H 1 EOF cat >>confdefs.h <<\EOF #define HAVE_USE_DEFAULT_COLORS 1 EOF cat >>confdefs.h <<\EOF #define HAVE_USE_SCREEN 1 EOF cat >>confdefs.h <<\EOF #define HAVE_USE_WINDOW 1 EOF cat >>confdefs.h <<\EOF #define HAVE_WRESIZE 1 EOF cat >>confdefs.h <<\EOF #define NCURSES_EXT_FUNCS 1 EOF GENERATED_EXT_FUNCS=generated else NCURSES_EXT_FUNCS=0 GENERATED_EXT_FUNCS= fi echo "$as_me:11739: checking if you want to build with SCREEN extensions" >&5 echo $ECHO_N "checking if you want to build with SCREEN extensions... $ECHO_C" >&6 # Check whether --enable-sp-funcs or --disable-sp-funcs was given. if test "${enable_sp_funcs+set}" = set; then enableval="$enable_sp_funcs" with_sp_funcs=$enableval else with_sp_funcs=$cf_dft_ext_spfuncs fi; echo "$as_me:11749: result: $with_sp_funcs" >&5 echo "${ECHO_T}$with_sp_funcs" >&6 if test "x$with_sp_funcs" = xyes ; then NCURSES_SP_FUNCS=1 cat >>confdefs.h <<\EOF #define NCURSES_SP_FUNCS 1 EOF GENERATED_SP_FUNCS=generated else NCURSES_SP_FUNCS=0 GENERATED_SP_FUNCS= fi echo "$as_me:11764: checking if you want to build with terminal-driver" >&5 echo $ECHO_N "checking if you want to build with terminal-driver... $ECHO_C" >&6 # Check whether --enable-term-driver or --disable-term-driver was given. if test "${enable_term_driver+set}" = set; then enableval="$enable_term_driver" with_term_driver=$enableval else with_term_driver=no fi; echo "$as_me:11774: result: $with_term_driver" >&5 echo "${ECHO_T}$with_term_driver" >&6 if test "x$with_term_driver" = xyes ; then cat >>confdefs.h <<\EOF #define USE_TERM_DRIVER 1 EOF if test "x$with_termlib" != xno ; then { { echo "$as_me:11783: error: The term-driver option conflicts with the termlib option" >&5 echo "$as_me: error: The term-driver option conflicts with the termlib option" >&2;} { (exit 1); exit 1; }; } fi if test "x$with_sp_funcs" != xyes ; then { { echo "$as_me:11788: error: The term-driver option relies upon sp-funcs" >&5 echo "$as_me: error: The term-driver option relies upon sp-funcs" >&2;} { (exit 1); exit 1; }; } fi fi ### use option --enable-const to turn on use of const beyond that in XSI. echo "$as_me:11795: checking for extended use of const keyword" >&5 echo $ECHO_N "checking for extended use of const keyword... $ECHO_C" >&6 # Check whether --enable-const or --disable-const was given. if test "${enable_const+set}" = set; then enableval="$enable_const" with_ext_const=$enableval else with_ext_const=$cf_dft_ext_const fi; echo "$as_me:11805: result: $with_ext_const" >&5 echo "${ECHO_T}$with_ext_const" >&6 NCURSES_CONST='/*nothing*/' if test "x$with_ext_const" = xyes ; then NCURSES_CONST=const fi ### use option --enable-ext-colors to turn on use of colors beyond 16. echo "$as_me:11813: checking if you want to use extended colors" >&5 echo $ECHO_N "checking if you want to use extended colors... $ECHO_C" >&6 # Check whether --enable-ext-colors or --disable-ext-colors was given. if test "${enable_ext_colors+set}" = set; then enableval="$enable_ext_colors" with_ext_colors=$enableval else with_ext_colors=$cf_dft_ext_colors fi; echo "$as_me:11823: result: $with_ext_colors" >&5 echo "${ECHO_T}$with_ext_colors" >&6 NCURSES_EXT_COLORS=0 if test "x$with_ext_colors" = xyes ; then if test "x$with_widec" != xyes ; then { echo "$as_me:11828: WARNING: This option applies only to wide-character library" >&5 echo "$as_me: WARNING: This option applies only to wide-character library" >&2;} else # cannot be ABI 5 since it changes sizeof(cchar_t) if test "${with_abi_version+set}" != set; then case $cf_cv_rel_version in (5.*) cf_cv_rel_version=6.0 cf_cv_abi_version=6 { echo "$as_me:11838: WARNING: overriding ABI version to $cf_cv_abi_version" >&5 echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_version" >&2;} ;; esac fi NCURSES_EXT_COLORS=1 cat >>confdefs.h <<\EOF #define NCURSES_EXT_COLORS 1 EOF fi fi ### use option --enable-ext-mouse to modify coding to support 5-button mice echo "$as_me:11854: checking if you want to use extended mouse encoding" >&5 echo $ECHO_N "checking if you want to use extended mouse encoding... $ECHO_C" >&6 # Check whether --enable-ext-mouse or --disable-ext-mouse was given. if test "${enable_ext_mouse+set}" = set; then enableval="$enable_ext_mouse" with_ext_mouse=$enableval else with_ext_mouse=$cf_dft_ext_mouse fi; echo "$as_me:11864: result: $with_ext_mouse" >&5 echo "${ECHO_T}$with_ext_mouse" >&6 NCURSES_MOUSE_VERSION=1 if test "x$with_ext_mouse" = xyes ; then NCURSES_MOUSE_VERSION=2 if test "${with_abi_version+set}" != set; then case $cf_cv_rel_version in (5.*) cf_cv_rel_version=6.0 cf_cv_abi_version=6 { echo "$as_me:11875: WARNING: overriding ABI version to $cf_cv_abi_version" >&5 echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_version" >&2;} ;; esac fi fi ### use option --enable-ext-putwin to turn on extended screendumps echo "$as_me:11884: checking if you want to use extended putwin/screendump" >&5 echo $ECHO_N "checking if you want to use extended putwin/screendump... $ECHO_C" >&6 # Check whether --enable-ext-putwin or --disable-ext-putwin was given. if test "${enable_ext_putwin+set}" = set; then enableval="$enable_ext_putwin" with_ext_putwin=$enableval else with_ext_putwin=$cf_dft_ext_putwin fi; echo "$as_me:11894: result: $with_ext_putwin" >&5 echo "${ECHO_T}$with_ext_putwin" >&6 if test "x$with_ext_putwin" = xyes ; then cat >>confdefs.h <<\EOF #define NCURSES_EXT_PUTWIN 1 EOF fi echo "$as_me:11904: checking if you want \$NCURSES_NO_PADDING code" >&5 echo $ECHO_N "checking if you want \$NCURSES_NO_PADDING code... $ECHO_C" >&6 # Check whether --enable-no-padding or --disable-no-padding was given. if test "${enable_no_padding+set}" = set; then enableval="$enable_no_padding" with_no_padding=$enableval else with_no_padding=$with_ext_funcs fi; echo "$as_me:11914: result: $with_no_padding" >&5 echo "${ECHO_T}$with_no_padding" >&6 test "x$with_no_padding" = xyes && cat >>confdefs.h <<\EOF #define NCURSES_NO_PADDING 1 EOF echo "$as_me:11921: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 11927 "configure" #include "confdefs.h" #include #include #include #include _ACEOF if { (eval echo "$as_me:11935: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:11941: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 11963 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 11981 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line 12002 "configure" #include "confdefs.h" #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) $ac_main_return(2); $ac_main_return (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:12028: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12031: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:12033: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12036: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:12049: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:12065: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12071 "configure" #include "confdefs.h" $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12077: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12080: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12083: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12086: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:12096: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for signed char... $ECHO_C" >&6 if test "${ac_cv_type_signed_char+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12112 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((signed char *) 0) return 0; if (sizeof (signed char)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12127: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12130: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12133: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12136: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_signed_char=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_signed_char=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:12146: result: $ac_cv_type_signed_char" >&5 echo "${ECHO_T}$ac_cv_type_signed_char" >&6 echo "$as_me:12149: checking size of signed char" >&5 echo $ECHO_N "checking size of signed char... $ECHO_C" >&6 if test "${ac_cv_sizeof_signed_char+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_signed_char" = yes; then if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF #line 12158 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (signed char)) >= 0)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12170: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12173: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12176: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12179: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF #line 12184 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (signed char)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12196: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12199: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12202: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12205: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF #line 12221 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (signed char)) >= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12233: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12236: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12239: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12242: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF #line 12258 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (signed char)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12270: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12273: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12276: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12279: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done ac_cv_sizeof_signed_char=$ac_lo else if test "$cross_compiling" = yes; then { { echo "$as_me:12292: error: cannot run test program while cross compiling" >&5 echo "$as_me: error: cannot run test program while cross compiling" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #line 12297 "configure" #include "confdefs.h" $ac_includes_default int main () { FILE *f = fopen ("conftest.val", "w"); if (!f) $ac_main_return (1); fprintf (f, "%d", (sizeof (signed char))); fclose (f); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:12313: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12316: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:12318: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12321: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_signed_char=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_signed_char=0 fi fi echo "$as_me:12337: result: $ac_cv_sizeof_signed_char" >&5 echo "${ECHO_T}$ac_cv_sizeof_signed_char" >&6 cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to use signed Boolean array in term.h... $ECHO_C" >&6 # Check whether --enable-signed-char or --disable-signed-char was given. if test "${enable_signed_char+set}" = set; then enableval="$enable_signed_char" with_signed_char=$enableval else with_signed_char=no fi; echo "$as_me:12358: result: $with_signed_char" >&5 echo "${ECHO_T}$with_signed_char" >&6 test "x$with_signed_char" != xyes && NCURSES_SBOOL="char" ### use option --enable-sigwinch to turn on use of SIGWINCH logic echo "$as_me:12363: checking if you want SIGWINCH handler" >&5 echo $ECHO_N "checking if you want SIGWINCH handler... $ECHO_C" >&6 # Check whether --enable-sigwinch or --disable-sigwinch was given. if test "${enable_sigwinch+set}" = set; then enableval="$enable_sigwinch" with_sigwinch=$enableval else with_sigwinch=$with_ext_funcs fi; echo "$as_me:12373: result: $with_sigwinch" >&5 echo "${ECHO_T}$with_sigwinch" >&6 test "x$with_sigwinch" = xyes && cat >>confdefs.h <<\EOF #define USE_SIGWINCH 1 EOF ### use option --enable-tcap-names to allow user to define new capabilities echo "$as_me:12381: checking if you want user-definable terminal capabilities like termcap" >&5 echo $ECHO_N "checking if you want user-definable terminal capabilities like termcap... $ECHO_C" >&6 # Check whether --enable-tcap-names or --disable-tcap-names was given. if test "${enable_tcap_names+set}" = set; then enableval="$enable_tcap_names" with_tcap_names=$enableval else with_tcap_names=$with_ext_funcs fi; echo "$as_me:12391: result: $with_tcap_names" >&5 echo "${ECHO_T}$with_tcap_names" >&6 NCURSES_XNAMES=0 test "x$with_tcap_names" = xyes && NCURSES_XNAMES=1 ############################################################################### # These options are relatively safe to experiment with. echo "$as_me:12399: checking if you want all development code" >&5 echo $ECHO_N "checking if you want all development code... $ECHO_C" >&6 # Check whether --with-develop or --without-develop was given. if test "${with_develop+set}" = set; then withval="$with_develop" with_develop=$withval else with_develop=no fi; echo "$as_me:12409: result: $with_develop" >&5 echo "${ECHO_T}$with_develop" >&6 ### use option --enable-hard-tabs to turn on use of hard-tabs optimize echo "$as_me:12413: checking if you want hard-tabs code" >&5 echo $ECHO_N "checking if you want hard-tabs code... $ECHO_C" >&6 # Check whether --enable-hard-tabs or --disable-hard-tabs was given. if test "${enable_hard_tabs+set}" = set; then enableval="$enable_hard_tabs" else enable_hard_tabs=$with_develop fi; echo "$as_me:12423: result: $enable_hard_tabs" >&5 echo "${ECHO_T}$enable_hard_tabs" >&6 test "x$enable_hard_tabs" = xyes && cat >>confdefs.h <<\EOF #define USE_HARD_TABS 1 EOF ### use option --enable-xmc-glitch to turn on use of magic-cookie optimize echo "$as_me:12431: checking if you want limited support for xmc" >&5 echo $ECHO_N "checking if you want limited support for xmc... $ECHO_C" >&6 # Check whether --enable-xmc-glitch or --disable-xmc-glitch was given. if test "${enable_xmc_glitch+set}" = set; then enableval="$enable_xmc_glitch" else enable_xmc_glitch=$with_develop fi; echo "$as_me:12441: result: $enable_xmc_glitch" >&5 echo "${ECHO_T}$enable_xmc_glitch" >&6 test "x$enable_xmc_glitch" = xyes && cat >>confdefs.h <<\EOF #define USE_XMC_SUPPORT 1 EOF ############################################################################### # These are just experimental, probably should not be in a package: echo "$as_me:12451: checking if you do not want to assume colors are white-on-black" >&5 echo $ECHO_N "checking if you do not want to assume colors are white-on-black... $ECHO_C" >&6 # Check whether --enable-assumed-color or --disable-assumed-color was given. if test "${enable_assumed_color+set}" = set; then enableval="$enable_assumed_color" with_assumed_color=$enableval else with_assumed_color=yes fi; echo "$as_me:12461: result: $with_assumed_color" >&5 echo "${ECHO_T}$with_assumed_color" >&6 test "x$with_assumed_color" = xyes && cat >>confdefs.h <<\EOF #define USE_ASSUMED_COLOR 1 EOF ### use option --enable-hashmap to turn on use of hashmap scrolling logic echo "$as_me:12469: checking if you want hashmap scrolling-optimization code" >&5 echo $ECHO_N "checking if you want hashmap scrolling-optimization code... $ECHO_C" >&6 # Check whether --enable-hashmap or --disable-hashmap was given. if test "${enable_hashmap+set}" = set; then enableval="$enable_hashmap" with_hashmap=$enableval else with_hashmap=yes fi; echo "$as_me:12479: result: $with_hashmap" >&5 echo "${ECHO_T}$with_hashmap" >&6 test "x$with_hashmap" = xyes && cat >>confdefs.h <<\EOF #define USE_HASHMAP 1 EOF ### use option --enable-colorfgbg to turn on use of $COLORFGBG environment echo "$as_me:12487: checking if you want colorfgbg code" >&5 echo $ECHO_N "checking if you want colorfgbg code... $ECHO_C" >&6 # Check whether --enable-colorfgbg or --disable-colorfgbg was given. if test "${enable_colorfgbg+set}" = set; then enableval="$enable_colorfgbg" with_colorfgbg=$enableval else with_colorfgbg=no fi; echo "$as_me:12497: result: $with_colorfgbg" >&5 echo "${ECHO_T}$with_colorfgbg" >&6 test "x$with_colorfgbg" = xyes && cat >>confdefs.h <<\EOF #define USE_COLORFGBG 1 EOF ### use option --enable-interop to turn on use of bindings used for interop echo "$as_me:12505: checking if you want interop bindings" >&5 echo $ECHO_N "checking if you want interop bindings... $ECHO_C" >&6 # Check whether --enable-interop or --disable-interop was given. if test "${enable_interop+set}" = set; then enableval="$enable_interop" with_exp_interop=$enableval else with_exp_interop=$cf_dft_interop fi; echo "$as_me:12515: result: $with_exp_interop" >&5 echo "${ECHO_T}$with_exp_interop" >&6 NCURSES_INTEROP_FUNCS=0 test "x$with_exp_interop" = xyes && NCURSES_INTEROP_FUNCS=1 # This is still experimental (20080329), but should ultimately be moved to # the script-block --with-normal, etc. echo "$as_me:12524: checking if you want to link with the pthread library" >&5 echo $ECHO_N "checking if you want to link with the pthread library... $ECHO_C" >&6 # Check whether --with-pthread or --without-pthread was given. if test "${with_pthread+set}" = set; then withval="$with_pthread" with_pthread=$withval else with_pthread=no fi; echo "$as_me:12534: result: $with_pthread" >&5 echo "${ECHO_T}$with_pthread" >&6 if test "$with_pthread" != no ; then echo "$as_me:12538: checking for pthread.h" >&5 echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6 if test "${ac_cv_header_pthread_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12544 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:12548: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:12554: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_pthread_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_pthread_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:12573: result: $ac_cv_header_pthread_h" >&5 echo "${ECHO_T}$ac_cv_header_pthread_h" >&6 if test $ac_cv_header_pthread_h = yes; then cat >>confdefs.h <<\EOF #define HAVE_PTHREADS_H 1 EOF for cf_lib_pthread in pthread c_r do echo "$as_me:12583: checking if we can link with the $cf_lib_pthread library" >&5 echo $ECHO_N "checking if we can link with the $cf_lib_pthread library... $ECHO_C" >&6 cf_save_LIBS="$LIBS" cf_add_libs="-l$cf_lib_pthread" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 12604 "configure" #include "confdefs.h" #include int main () { int rc = pthread_create(0,0,0,0); int r2 = pthread_mutexattr_settype(0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12621: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12624: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12627: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12630: \$? = $ac_status" >&5 (exit $ac_status); }; }; then with_pthread=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 with_pthread=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save_LIBS" echo "$as_me:12640: result: $with_pthread" >&5 echo "${ECHO_T}$with_pthread" >&6 test "$with_pthread" = yes && break done if test "$with_pthread" = yes ; then cf_add_libs="-l$cf_lib_pthread" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >>confdefs.h <<\EOF #define HAVE_LIBPTHREADS 1 EOF else { { echo "$as_me:12668: error: Cannot link with pthread library" >&5 echo "$as_me: error: Cannot link with pthread library" >&2;} { (exit 1); exit 1; }; } fi fi fi if test "x$with_pthread" != xno; then echo "$as_me:12678: checking for pthread_kill" >&5 echo $ECHO_N "checking for pthread_kill... $ECHO_C" >&6 if test "${ac_cv_func_pthread_kill+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12684 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char pthread_kill (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pthread_kill (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_pthread_kill) || defined (__stub___pthread_kill) choke me #else f = pthread_kill; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:12715: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:12718: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:12721: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12724: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_pthread_kill=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_pthread_kill=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:12734: result: $ac_cv_func_pthread_kill" >&5 echo "${ECHO_T}$ac_cv_func_pthread_kill" >&6 if test $ac_cv_func_pthread_kill = yes; then echo "$as_me:12738: checking if you want to allow EINTR in wgetch with pthreads" >&5 echo $ECHO_N "checking if you want to allow EINTR in wgetch with pthreads... $ECHO_C" >&6 # Check whether --enable-pthreads-eintr or --disable-pthreads-eintr was given. if test "${enable_pthreads_eintr+set}" = set; then enableval="$enable_pthreads_eintr" use_pthreads_eintr=$enableval else use_pthreads_eintr=no fi; echo "$as_me:12748: result: $use_pthreads_eintr" >&5 echo "${ECHO_T}$use_pthreads_eintr" >&6 if test "x$use_pthreads_eintr" = xyes ; then cat >>confdefs.h <<\EOF #define USE_PTHREADS_EINTR 1 EOF fi fi echo "$as_me:12759: checking if you want to use weak-symbols for pthreads" >&5 echo $ECHO_N "checking if you want to use weak-symbols for pthreads... $ECHO_C" >&6 # Check whether --enable-weak-symbols or --disable-weak-symbols was given. if test "${enable_weak_symbols+set}" = set; then enableval="$enable_weak_symbols" use_weak_symbols=$enableval else use_weak_symbols=no fi; echo "$as_me:12769: result: $use_weak_symbols" >&5 echo "${ECHO_T}$use_weak_symbols" >&6 if test "x$use_weak_symbols" = xyes ; then echo "$as_me:12773: checking if $CC supports weak symbols" >&5 echo $ECHO_N "checking if $CC supports weak symbols... $ECHO_C" >&6 if test "${cf_cv_weak_symbols+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 12780 "configure" #include "confdefs.h" #include int main () { #if defined(__GNUC__) # if defined __USE_ISOC99 # define _cat_pragma(exp) _Pragma(#exp) # define _weak_pragma(exp) _cat_pragma(weak name) # else # define _weak_pragma(exp) # endif # define _declare(name) __extension__ extern __typeof__(name) name # define weak_symbol(name) _weak_pragma(name) _declare(name) __attribute__((weak)) #endif weak_symbol(fopen); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:12806: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:12809: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:12812: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:12815: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_weak_symbols=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_weak_symbols=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:12826: result: $cf_cv_weak_symbols" >&5 echo "${ECHO_T}$cf_cv_weak_symbols" >&6 else cf_cv_weak_symbols=no fi if test "x$cf_cv_weak_symbols" = xyes ; then cat >>confdefs.h <<\EOF #define USE_WEAK_SYMBOLS 1 EOF fi fi PTHREAD= if test "x$with_pthread" = "xyes" ; then cat >>confdefs.h <<\EOF #define USE_PTHREADS 1 EOF enable_reentrant=yes if test "x$cf_cv_weak_symbols" = xyes ; then PTHREAD=-lpthread fi fi # Reentrant code has to be opaque; there's little advantage to making ncurses # opaque outside of that, so there is no --enable-opaque option. We can use # this option without --with-pthreads, but this will be always set for # pthreads. echo "$as_me:12859: checking if you want reentrant code" >&5 echo $ECHO_N "checking if you want reentrant code... $ECHO_C" >&6 # Check whether --enable-reentrant or --disable-reentrant was given. if test "${enable_reentrant+set}" = set; then enableval="$enable_reentrant" with_reentrant=$enableval else with_reentrant=no fi; echo "$as_me:12869: result: $with_reentrant" >&5 echo "${ECHO_T}$with_reentrant" >&6 if test "x$with_reentrant" = xyes ; then cf_cv_enable_reentrant=1 cf_cv_enable_opaque="NCURSES_INTERNALS" NCURSES_OPAQUE=1 NCURSES_SIZE_T=int if test "x$cf_cv_weak_symbols" = xyes ; then # remove pthread library from $LIBS LIBS=`echo "$LIBS" | sed -e 's/-lpthread[ ]//g' -e 's/-lpthread$//'` cf_add_libs="-lpthread" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $TEST_LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done TEST_LIBS="$cf_add_libs" cf_add_libs="-lpthread" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $TEST_LIBS2 do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done TEST_LIBS2="$cf_add_libs" else # when not using weak symbols but with_reentrant, # add 't' to the library suffix on all platforms # except cygwin, where we only do that if ALSO # compiling with full thread support. case "$host" in (*cygwin* | *msys*) if test "$with_pthread" = "yes" ; then if test "x$disable_lib_suffixes" = "xno" ; then LIB_SUFFIX="t${LIB_SUFFIX}" fi fi ;; (*) if test "x$disable_lib_suffixes" = "xno" ; then LIB_SUFFIX="t${LIB_SUFFIX}" fi ;; esac fi cat >>confdefs.h <<\EOF #define USE_REENTRANT 1 EOF if test "${with_abi_version+set}" != set; then case $cf_cv_rel_version in (5.*) cf_cv_rel_version=6.0 cf_cv_abi_version=6 { echo "$as_me:12942: WARNING: overriding ABI version to $cf_cv_abi_version" >&5 echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_version" >&2;} ;; esac fi else cf_cv_enable_reentrant=0 cf_cv_enable_opaque="NCURSES_OPAQUE" NCURSES_OPAQUE=0 NCURSES_SIZE_T=short fi ### Allow using a different wrap-prefix if test "$cf_cv_enable_reentrant" != 0 || test "$BROKEN_LINKER" = 1 ; then echo "$as_me:12957: checking for prefix used to wrap public variables" >&5 echo $ECHO_N "checking for prefix used to wrap public variables... $ECHO_C" >&6 # Check whether --with-wrap-prefix or --without-wrap-prefix was given. if test "${with_wrap_prefix+set}" = set; then withval="$with_wrap_prefix" NCURSES_WRAP_PREFIX=$withval else NCURSES_WRAP_PREFIX=_nc_ fi; echo "$as_me:12967: result: $NCURSES_WRAP_PREFIX" >&5 echo "${ECHO_T}$NCURSES_WRAP_PREFIX" >&6 else NCURSES_WRAP_PREFIX=_nc_ fi cat >>confdefs.h <&5 echo $ECHO_N "checking if you want experimental safe-sprintf code... $ECHO_C" >&6 # Check whether --enable-safe-sprintf or --disable-safe-sprintf was given. if test "${enable_safe_sprintf+set}" = set; then enableval="$enable_safe_sprintf" with_safe_sprintf=$enableval else with_safe_sprintf=no fi; echo "$as_me:12987: result: $with_safe_sprintf" >&5 echo "${ECHO_T}$with_safe_sprintf" >&6 test "x$with_safe_sprintf" = xyes && cat >>confdefs.h <<\EOF #define USE_SAFE_SPRINTF 1 EOF ### use option --disable-scroll-hints to turn off use of scroll-hints scrolling logic # when hashmap is used scroll hints are useless if test "$with_hashmap" = no ; then echo "$as_me:12997: checking if you want to experiment without scrolling-hints code" >&5 echo $ECHO_N "checking if you want to experiment without scrolling-hints code... $ECHO_C" >&6 # Check whether --enable-scroll-hints or --disable-scroll-hints was given. if test "${enable_scroll_hints+set}" = set; then enableval="$enable_scroll_hints" with_scroll_hints=$enableval else with_scroll_hints=yes fi; echo "$as_me:13007: result: $with_scroll_hints" >&5 echo "${ECHO_T}$with_scroll_hints" >&6 test "x$with_scroll_hints" = xyes && cat >>confdefs.h <<\EOF #define USE_SCROLL_HINTS 1 EOF fi echo "$as_me:13016: checking if you want wgetch-events code" >&5 echo $ECHO_N "checking if you want wgetch-events code... $ECHO_C" >&6 # Check whether --enable-wgetch-events or --disable-wgetch-events was given. if test "${enable_wgetch_events+set}" = set; then enableval="$enable_wgetch_events" with_wgetch_events=$enableval else with_wgetch_events=no fi; echo "$as_me:13026: result: $with_wgetch_events" >&5 echo "${ECHO_T}$with_wgetch_events" >&6 test "x$with_wgetch_events" = xyes && cat >>confdefs.h <<\EOF #define NCURSES_WGETCH_EVENTS 1 EOF ############################################################################### ### use option --disable-echo to suppress full display compiling commands echo "$as_me:13037: checking if you want to see long compiling messages" >&5 echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6 # Check whether --enable-echo or --disable-echo was given. if test "${enable_echo+set}" = set; then enableval="$enable_echo" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then ECHO_LT='--silent' ECHO_LD='@echo linking $@;' RULE_CC='@echo compiling $<' SHOW_CC='@echo compiling $@' ECHO_CC='@' else ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' fi else enableval=yes ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' fi; echo "$as_me:13071: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 if test "x$enable_echo" = xyes; then ECHO_LINK= else ECHO_LINK='@ echo linking $@ ... ;' test -n "$LIBTOOL" && LIBTOOL="$LIBTOOL --silent" test -n "$LIBTOOL_CXX" && LIBTOOL_CXX="$LIBTOOL_CXX --silent" fi ### use option --enable-warnings to turn on all gcc warnings echo "$as_me:13083: checking if you want to see compiler warnings" >&5 echo $ECHO_N "checking if you want to see compiler warnings... $ECHO_C" >&6 # Check whether --enable-warnings or --disable-warnings was given. if test "${enable_warnings+set}" = set; then enableval="$enable_warnings" with_warnings=$enableval fi; echo "$as_me:13091: result: $with_warnings" >&5 echo "${ECHO_T}$with_warnings" >&6 if test "x$with_warnings" = "xyes"; then ADAFLAGS="$ADAFLAGS -gnatg" INTEL_COMPILER=no if test "$GCC" = yes ; then case $host_os in (linux*|gnu*) echo "$as_me:13103: checking if this is really Intel C compiler" >&5 echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -no-gcc" cat >conftest.$ac_ext <<_ACEOF #line 13108 "configure" #include "confdefs.h" int main () { #ifdef __INTEL_COMPILER #else make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13125: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13128: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13131: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13134: \$? = $ac_status" >&5 (exit $ac_status); }; }; then INTEL_COMPILER=yes cf_save_CFLAGS="$cf_save_CFLAGS -we147" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" echo "$as_me:13145: result: $INTEL_COMPILER" >&5 echo "${ECHO_T}$INTEL_COMPILER" >&6 ;; esac fi CLANG_COMPILER=no if test "$GCC" = yes ; then echo "$as_me:13154: checking if this is really Clang C compiler" >&5 echo $ECHO_N "checking if this is really Clang C compiler... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Qunused-arguments" cat >conftest.$ac_ext <<_ACEOF #line 13159 "configure" #include "confdefs.h" int main () { #ifdef __clang__ #else make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13176: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13179: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13182: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13185: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CLANG_COMPILER=yes cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$cf_save_CFLAGS" echo "$as_me:13196: result: $CLANG_COMPILER" >&5 echo "${ECHO_T}$CLANG_COMPILER" >&6 fi cat > conftest.$ac_ext <&5 echo "$as_me: checking for $CC warning options..." >&6;} cf_save_CFLAGS="$CFLAGS" EXTRA_CFLAGS="-Wall" for cf_opt in \ wd1419 \ wd1683 \ wd1684 \ wd193 \ wd593 \ wd279 \ wd810 \ wd869 \ wd981 do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" if { (eval echo "$as_me:13234: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13237: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:13239: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" fi done CFLAGS="$cf_save_CFLAGS" elif test "$GCC" = yes then { echo "$as_me:13248: checking for $CC warning options..." >&5 echo "$as_me: checking for $CC warning options..." >&6;} cf_save_CFLAGS="$CFLAGS" EXTRA_CFLAGS= cf_warn_CONST="" test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings" cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs" test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings= for cf_opt in W Wall \ Wbad-function-cast \ Wcast-align \ Wcast-qual \ Wdeclaration-after-statement \ Wextra \ Winline \ Wmissing-declarations \ Wmissing-prototypes \ Wnested-externs \ Wpointer-arith \ Wshadow \ Wstrict-prototypes \ Wundef $cf_gcc_warnings $cf_warn_CONST Wno-unknown-pragmas Wswitch-enum do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" if { (eval echo "$as_me:13272: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13275: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:13277: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 case $cf_opt in (Wcast-qual) CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES" ;; (Winline) case $GCC_VERSION in ([34].*) test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 echo "${as_me:-configure}:13288: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 continue;; esac ;; (Wpointer-arith) case $GCC_VERSION in ([12].*) test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 echo "${as_me:-configure}:13298: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 continue;; esac ;; esac EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" fi done CFLAGS="$cf_save_CFLAGS" fi rm -rf conftest* if test "x$cf_with_cxx" = xyes ; then INTEL_CPLUSPLUS=no if test "$GCC" = yes ; then case $host_os in (linux*|gnu*) echo "$as_me:13318: checking if this is really Intel C++ compiler" >&5 echo $ECHO_N "checking if this is really Intel C++ compiler... $ECHO_C" >&6 cf_save_CFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -no-gcc" cat >conftest.$ac_ext <<_ACEOF #line 13323 "configure" #include "confdefs.h" int main () { #ifdef __INTEL_COMPILER #else make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13340: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13343: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13346: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13349: \$? = $ac_status" >&5 (exit $ac_status); }; }; then INTEL_CPLUSPLUS=yes cf_save_CFLAGS="$cf_save_CFLAGS -we147" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CXXFLAGS="$cf_save_CFLAGS" echo "$as_me:13360: result: $INTEL_CPLUSPLUS" >&5 echo "${ECHO_T}$INTEL_CPLUSPLUS" >&6 ;; esac fi CLANG_CPLUSPLUS=no if test "$GCC" = yes ; then echo "$as_me:13369: checking if this is really Clang C++ compiler" >&5 echo $ECHO_N "checking if this is really Clang C++ compiler... $ECHO_C" >&6 cf_save_CFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -Qunused-arguments" cat >conftest.$ac_ext <<_ACEOF #line 13374 "configure" #include "confdefs.h" int main () { #ifdef __clang__ #else make an error #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:13391: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13394: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:13397: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13400: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CLANG_CPLUSPLUS=yes cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CXXFLAGS="$cf_save_CFLAGS" echo "$as_me:13411: result: $CLANG_CPLUSPLUS" >&5 echo "${ECHO_T}$CLANG_CPLUSPLUS" >&6 fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_main_return=return cat > conftest.$ac_ext <&5 echo "$as_me: checking for $CC warning options..." >&6;} cf_save_CXXFLAGS="$CXXFLAGS" EXTRA_CXXFLAGS="-Wall" for cf_opt in \ wd1419 \ wd1682 \ wd1683 \ wd1684 \ wd193 \ wd279 \ wd593 \ wd810 \ wd869 \ wd981 do CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -$cf_opt" if { (eval echo "$as_me:13458: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13461: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:13463: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt" fi done CXXFLAGS="$cf_save_CXXFLAGS" elif test "$GXX" = yes then { echo "$as_me:13472: checking for $CXX warning options..." >&5 echo "$as_me: checking for $CXX warning options..." >&6;} cf_save_CXXFLAGS="$CXXFLAGS" EXTRA_CXXFLAGS="-W -Wall" cf_gxx_extra_warnings="" test "$with_ext_const" = yes && cf_gxx_extra_warnings="Wwrite-strings" case "$GCC_VERSION" in ([1-2].*) ;; (*) cf_gxx_extra_warnings="$cf_gxx_extra_warnings Weffc++" ;; esac for cf_opt in \ Wabi \ fabi-version=0 \ Wextra \ Wignored-qualifiers \ Wlogical-op \ Woverloaded-virtual \ Wsign-promo \ Wsynth \ Wold-style-cast \ Wcast-align \ Wcast-qual \ Wpointer-arith \ Wshadow \ Wundef $cf_gxx_extra_warnings Wno-unused do CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -Werror -$cf_opt" if { (eval echo "$as_me:13502: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13505: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:13507: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt" else test -n "$verbose" && echo "$as_me:13511: result: ... no -$cf_opt" >&5 echo "${ECHO_T}... no -$cf_opt" >&6 fi done CXXFLAGS="$cf_save_CXXFLAGS" fi rm -rf conftest* ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return fi fi if test "$GCC" = yes then cat > conftest.i <&5 echo "$as_me: checking for $CC __attribute__ directives..." >&6;} cat > conftest.$ac_ext <&5 case $cf_attribute in (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:13602: \$? = $ac_status" >&5 (exit $ac_status); }; then test -n "$verbose" && echo "$as_me:13604: result: ... $cf_attribute" >&5 echo "${ECHO_T}... $cf_attribute" >&6 cat conftest.h >>confdefs.h case $cf_attribute in (noreturn) cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_PRINTF 1 EOF fi cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_SCANF 1 EOF fi cat >>confdefs.h <>confdefs.h <>confdefs.h fi rm -rf conftest* fi echo "$as_me:13663: checking if you want to work around bogus compiler/loader warnings" >&5 echo $ECHO_N "checking if you want to work around bogus compiler/loader warnings... $ECHO_C" >&6 # Check whether --enable-string-hacks or --disable-string-hacks was given. if test "${enable_string_hacks+set}" = set; then enableval="$enable_string_hacks" with_string_hacks=$enableval else with_string_hacks=no fi; echo "$as_me:13673: result: $with_string_hacks" >&5 echo "${ECHO_T}$with_string_hacks" >&6 if test "x$with_string_hacks" = "xyes"; then cat >>confdefs.h <<\EOF #define USE_STRING_HACKS 1 EOF { echo "$as_me:13682: WARNING: enabling string-hacks to work around bogus compiler/loader warnings" >&5 echo "$as_me: WARNING: enabling string-hacks to work around bogus compiler/loader warnings" >&2;} for ac_func in strlcat strlcpy snprintf do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:13688: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13694 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13725: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13728: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13731: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13734: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:13744: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to enable runtime assertions... $ECHO_C" >&6 # Check whether --enable-assertions or --disable-assertions was given. if test "${enable_assertions+set}" = set; then enableval="$enable_assertions" with_assertions=$enableval else with_assertions=no fi; echo "$as_me:13767: result: $with_assertions" >&5 echo "${ECHO_T}$with_assertions" >&6 if test -n "$GCC" then if test "$with_assertions" = no then CPPFLAGS="$CPPFLAGS -DNDEBUG" else ADAFLAGS="$ADAFLAGS -gnata" fi fi ### use option --disable-leaks to suppress "permanent" leaks, for testing echo "$as_me:13783: checking if you want to use dmalloc for testing" >&5 echo $ECHO_N "checking if you want to use dmalloc for testing... $ECHO_C" >&6 # Check whether --with-dmalloc or --without-dmalloc was given. if test "${with_dmalloc+set}" = set; then withval="$with_dmalloc" cat >>confdefs.h <&5 echo "${ECHO_T}${with_dmalloc:-no}" >&6 case .$with_cflags in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -g do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi ;; esac ;; esac if test "$with_dmalloc" = yes ; then echo "$as_me:13894: checking for dmalloc.h" >&5 echo $ECHO_N "checking for dmalloc.h... $ECHO_C" >&6 if test "${ac_cv_header_dmalloc_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 13900 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:13904: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:13910: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_dmalloc_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_dmalloc_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:13929: result: $ac_cv_header_dmalloc_h" >&5 echo "${ECHO_T}$ac_cv_header_dmalloc_h" >&6 if test $ac_cv_header_dmalloc_h = yes; then echo "$as_me:13933: checking for dmalloc_debug in -ldmalloc" >&5 echo $ECHO_N "checking for dmalloc_debug in -ldmalloc... $ECHO_C" >&6 if test "${ac_cv_lib_dmalloc_dmalloc_debug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldmalloc $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 13941 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dmalloc_debug (); int main () { dmalloc_debug (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:13960: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:13963: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:13966: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:13969: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dmalloc_dmalloc_debug=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dmalloc_dmalloc_debug=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:13980: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5 echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_debug" >&6 if test $ac_cv_lib_dmalloc_dmalloc_debug = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to use dbmalloc for testing... $ECHO_C" >&6 # Check whether --with-dbmalloc or --without-dbmalloc was given. if test "${with_dbmalloc+set}" = set; then withval="$with_dbmalloc" cat >>confdefs.h <&5 echo "${ECHO_T}${with_dbmalloc:-no}" >&6 case .$with_cflags in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -g do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi ;; esac ;; esac if test "$with_dbmalloc" = yes ; then echo "$as_me:14106: checking for dbmalloc.h" >&5 echo $ECHO_N "checking for dbmalloc.h... $ECHO_C" >&6 if test "${ac_cv_header_dbmalloc_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 14112 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:14116: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:14122: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_dbmalloc_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_dbmalloc_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:14141: result: $ac_cv_header_dbmalloc_h" >&5 echo "${ECHO_T}$ac_cv_header_dbmalloc_h" >&6 if test $ac_cv_header_dbmalloc_h = yes; then echo "$as_me:14145: checking for debug_malloc in -ldbmalloc" >&5 echo $ECHO_N "checking for debug_malloc in -ldbmalloc... $ECHO_C" >&6 if test "${ac_cv_lib_dbmalloc_debug_malloc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldbmalloc $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 14153 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char debug_malloc (); int main () { debug_malloc (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14172: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14175: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14178: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14181: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dbmalloc_debug_malloc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dbmalloc_debug_malloc=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:14192: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5 echo "${ECHO_T}$ac_cv_lib_dbmalloc_debug_malloc" >&6 if test $ac_cv_lib_dbmalloc_debug_malloc = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to use valgrind for testing... $ECHO_C" >&6 # Check whether --with-valgrind or --without-valgrind was given. if test "${with_valgrind+set}" = set; then withval="$with_valgrind" cat >>confdefs.h <&5 echo "${ECHO_T}${with_valgrind:-no}" >&6 case .$with_cflags in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -g do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi ;; esac ;; esac echo "$as_me:14317: checking if you want to perform memory-leak testing" >&5 echo $ECHO_N "checking if you want to perform memory-leak testing... $ECHO_C" >&6 # Check whether --enable-leaks or --disable-leaks was given. if test "${enable_leaks+set}" = set; then enableval="$enable_leaks" if test "x$enableval" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi else : ${with_no_leaks:=no} fi; echo "$as_me:14327: result: $with_no_leaks" >&5 echo "${ECHO_T}$with_no_leaks" >&6 if test "$with_no_leaks" = yes ; then cat >>confdefs.h <<\EOF #define NO_LEAKS 1 EOF cat >>confdefs.h <<\EOF #define YY_NO_LEAKS 1 EOF fi cat >>confdefs.h <<\EOF #define HAVE_NC_ALLOC_H 1 EOF ### use option --enable-expanded to generate certain macros as functions # Check whether --enable-expanded or --disable-expanded was given. if test "${enable_expanded+set}" = set; then enableval="$enable_expanded" test "x$enableval" = xyes && cat >>confdefs.h <<\EOF #define NCURSES_EXPANDED 1 EOF fi; ### use option --disable-macros to suppress macros in favor of functions # Check whether --enable-macros or --disable-macros was given. if test "${enable_macros+set}" = set; then enableval="$enable_macros" test "$enableval" = no && cat >>confdefs.h <<\EOF #define NCURSES_NOMACROS 1 EOF fi; # Normally we only add trace() to the debug-library. Allow this to be # extended to all models of the ncurses library: cf_all_traces=no case "$CFLAGS $CPPFLAGS" in (*-DTRACE*) cf_all_traces=yes ;; esac echo "$as_me:14379: checking whether to add trace feature to all models" >&5 echo $ECHO_N "checking whether to add trace feature to all models... $ECHO_C" >&6 # Check whether --with-trace or --without-trace was given. if test "${with_trace+set}" = set; then withval="$with_trace" cf_with_trace=$withval else cf_with_trace=$cf_all_traces fi; echo "$as_me:14389: result: $cf_with_trace" >&5 echo "${ECHO_T}$cf_with_trace" >&6 if test "x$cf_with_trace" = xyes ; then LIB_TRACING=all ADA_TRACE=TRUE cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -DTRACE do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi else LIB_TRACING=DEBUG ADA_TRACE=FALSE fi echo "$as_me:14479: checking if we want to use GNAT projects" >&5 echo $ECHO_N "checking if we want to use GNAT projects... $ECHO_C" >&6 # Check whether --enable-gnat-projects or --disable-gnat-projects was given. if test "${enable_gnat_projects+set}" = set; then enableval="$enable_gnat_projects" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then enable_gnat_projects=no else enable_gnat_projects=yes fi else enableval=yes enable_gnat_projects=yes fi; echo "$as_me:14496: result: $enable_gnat_projects" >&5 echo "${ECHO_T}$enable_gnat_projects" >&6 ### Checks for libraries. case $cf_cv_system_name in (*mingw32*|*mingw64*) CPPFLAGS="$CPPFLAGS -DWINVER=0x0501 -DWIN32_LEAN_AND_MEAN" LIBS=" -lpsapi $LIBS" ;; (*) echo "$as_me:14506: checking for gettimeofday" >&5 echo $ECHO_N "checking for gettimeofday... $ECHO_C" >&6 if test "${ac_cv_func_gettimeofday+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 14512 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gettimeofday (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gettimeofday (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gettimeofday) || defined (__stub___gettimeofday) choke me #else f = gettimeofday; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14543: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14546: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14549: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14552: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gettimeofday=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_gettimeofday=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:14562: result: $ac_cv_func_gettimeofday" >&5 echo "${ECHO_T}$ac_cv_func_gettimeofday" >&6 if test $ac_cv_func_gettimeofday = yes; then cat >>confdefs.h <<\EOF #define HAVE_GETTIMEOFDAY 1 EOF else echo "$as_me:14572: checking for gettimeofday in -lbsd" >&5 echo $ECHO_N "checking for gettimeofday in -lbsd... $ECHO_C" >&6 if test "${ac_cv_lib_bsd_gettimeofday+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 14580 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gettimeofday (); int main () { gettimeofday (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14599: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14602: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14605: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14608: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bsd_gettimeofday=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_bsd_gettimeofday=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:14619: result: $ac_cv_lib_bsd_gettimeofday" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_gettimeofday" >&6 if test $ac_cv_lib_bsd_gettimeofday = yes; then cat >>confdefs.h <<\EOF #define HAVE_GETTIMEOFDAY 1 EOF cf_add_libs="-lbsd" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi fi ;; esac echo "$as_me:14649: checking if -lm needed for math functions" >&5 echo $ECHO_N "checking if -lm needed for math functions... $ECHO_C" >&6 if test "${cf_cv_need_libm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 14656 "configure" #include "confdefs.h" #include #include int main () { double x = rand(); printf("result = %g\n", pow(sin(x),x)) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14671: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14674: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14677: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14680: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_need_libm=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_need_libm=yes fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:14690: result: $cf_cv_need_libm" >&5 echo "${ECHO_T}$cf_cv_need_libm" >&6 if test "$cf_cv_need_libm" = yes then MATH_LIB=-lm fi ### Checks for header files. echo "$as_me:14698: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 14704 "configure" #include "confdefs.h" #include #include #include #include _ACEOF if { (eval echo "$as_me:14712: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:14718: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 14740 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line 14758 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line 14779 "configure" #include "confdefs.h" #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) $ac_main_return(2); $ac_main_return (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:14805: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14808: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:14810: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14813: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:14826: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` echo "$as_me:14839: checking for $ac_hdr that defines DIR" >&5 echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 14845 "configure" #include "confdefs.h" #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:14860: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:14863: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:14866: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14869: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:14879: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6 if test "${ac_cv_lib_dir_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldir $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 14900 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14919: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14922: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14925: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14928: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dir_opendir=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dir_opendir=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:14939: result: $ac_cv_lib_dir_opendir" >&5 echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6 if test $ac_cv_lib_dir_opendir = yes; then LIBS="$LIBS -ldir" fi else echo "$as_me:14946: checking for opendir in -lx" >&5 echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6 if test "${ac_cv_lib_x_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lx $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 14954 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:14973: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:14976: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:14979: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:14982: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_x_opendir=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_x_opendir=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:14993: result: $ac_cv_lib_x_opendir" >&5 echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6 if test $ac_cv_lib_x_opendir = yes; then LIBS="$LIBS -lx" fi fi echo "$as_me:15001: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 15007 "configure" #include "confdefs.h" #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15023: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15026: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15029: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15032: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:15042: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6 if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\EOF #define TIME_WITH_SYS_TIME 1 EOF fi cf_regex_func=no cf_regex_libs="regex re" case $host_os in (mingw*) cf_regex_libs="gnurx $cf_regex_libs" ;; esac echo "$as_me:15061: checking for regcomp" >&5 echo $ECHO_N "checking for regcomp... $ECHO_C" >&6 if test "${ac_cv_func_regcomp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 15067 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char regcomp (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char regcomp (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_regcomp) || defined (__stub___regcomp) choke me #else f = regcomp; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15098: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15101: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15104: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15107: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_regcomp=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_regcomp=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:15117: result: $ac_cv_func_regcomp" >&5 echo "${ECHO_T}$ac_cv_func_regcomp" >&6 if test $ac_cv_func_regcomp = yes; then cf_regex_func=regcomp else for cf_regex_lib in $cf_regex_libs do as_ac_Lib=`echo "ac_cv_lib_$cf_regex_lib''_regcomp" | $as_tr_sh` echo "$as_me:15126: checking for regcomp in -l$cf_regex_lib" >&5 echo $ECHO_N "checking for regcomp in -l$cf_regex_lib... $ECHO_C" >&6 if eval "test \"\${$as_ac_Lib+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$cf_regex_lib $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 15134 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char regcomp (); int main () { regcomp (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15153: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15156: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15159: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15162: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:15173: result: `eval echo '${'$as_ac_Lib'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 if test `eval echo '${'$as_ac_Lib'}'` = yes; then cf_add_libs="-l$cf_regex_lib" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cf_regex_func=regcomp break fi done fi if test "$cf_regex_func" = no ; then echo "$as_me:15202: checking for compile" >&5 echo $ECHO_N "checking for compile... $ECHO_C" >&6 if test "${ac_cv_func_compile+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 15208 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char compile (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char compile (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_compile) || defined (__stub___compile) choke me #else f = compile; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15239: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15242: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15245: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15248: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_compile=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_compile=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:15258: result: $ac_cv_func_compile" >&5 echo "${ECHO_T}$ac_cv_func_compile" >&6 if test $ac_cv_func_compile = yes; then cf_regex_func=compile else echo "$as_me:15264: checking for compile in -lgen" >&5 echo $ECHO_N "checking for compile in -lgen... $ECHO_C" >&6 if test "${ac_cv_lib_gen_compile+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 15272 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char compile (); int main () { compile (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15291: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15294: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15297: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15300: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gen_compile=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_gen_compile=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:15311: result: $ac_cv_lib_gen_compile" >&5 echo "${ECHO_T}$ac_cv_lib_gen_compile" >&6 if test $ac_cv_lib_gen_compile = yes; then cf_add_libs="-lgen" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cf_regex_func=compile fi fi fi if test "$cf_regex_func" = no ; then { echo "$as_me:15339: WARNING: cannot find regular expression library" >&5 echo "$as_me: WARNING: cannot find regular expression library" >&2;} fi echo "$as_me:15343: checking for regular-expression headers" >&5 echo $ECHO_N "checking for regular-expression headers... $ECHO_C" >&6 if test "${cf_cv_regex_hdrs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_regex_hdrs=no case $cf_regex_func in (compile) for cf_regex_hdr in regexp.h regexpr.h do cat >conftest.$ac_ext <<_ACEOF #line 15355 "configure" #include "confdefs.h" #include <$cf_regex_hdr> int main () { char *p = compile("", "", "", 0); int x = step("", ""); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15370: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15373: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15376: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15379: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_regex_hdrs=$cf_regex_hdr break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done ;; (*) for cf_regex_hdr in regex.h do cat >conftest.$ac_ext <<_ACEOF #line 15396 "configure" #include "confdefs.h" #include #include <$cf_regex_hdr> int main () { regex_t *p; int x = regcomp(p, "", 0); int y = regexec(p, "", 0, 0, 0); regfree(p); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15414: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15417: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15420: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15423: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_regex_hdrs=$cf_regex_hdr break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done ;; esac fi echo "$as_me:15439: result: $cf_cv_regex_hdrs" >&5 echo "${ECHO_T}$cf_cv_regex_hdrs" >&6 case $cf_cv_regex_hdrs in (no) { echo "$as_me:15443: WARNING: no regular expression header found" >&5 echo "$as_me: WARNING: no regular expression header found" >&2;} ;; (regex.h) cat >>confdefs.h <<\EOF #define HAVE_REGEX_H_FUNCS 1 EOF ;; (regexp.h) cat >>confdefs.h <<\EOF #define HAVE_REGEXP_H_FUNCS 1 EOF ;; (regexpr.h) cat >>confdefs.h <<\EOF #define HAVE_REGEXPR_H_FUNCS 1 EOF ;; esac for ac_header in \ fcntl.h \ getopt.h \ limits.h \ locale.h \ math.h \ poll.h \ sys/bsdtypes.h \ sys/ioctl.h \ sys/param.h \ sys/poll.h \ sys/select.h \ sys/time.h \ sys/times.h \ ttyent.h \ unistd.h \ wctype.h \ do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:15482: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 15488 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:15492: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:15498: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:15517: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 15536 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:15540: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:15546: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:15565: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for header declaring getopt variables... $ECHO_C" >&6 if test "${cf_cv_getopt_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_getopt_header=none for cf_header in stdio.h stdlib.h unistd.h getopt.h do cat >conftest.$ac_ext <<_ACEOF #line 15585 "configure" #include "confdefs.h" #include <$cf_header> int main () { int x = optind; char *y = optarg ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15598: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15601: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15604: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15607: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_getopt_header=$cf_header break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:15619: result: $cf_cv_getopt_header" >&5 echo "${ECHO_T}$cf_cv_getopt_header" >&6 if test $cf_cv_getopt_header != none ; then cat >>confdefs.h <<\EOF #define HAVE_GETOPT_HEADER 1 EOF fi if test $cf_cv_getopt_header = getopt.h ; then cat >>confdefs.h <<\EOF #define NEED_GETOPT_H 1 EOF fi # check for ISC (this may also define _POSIX_SOURCE) # Note: even non-Posix ISC needs to declare fd_set if test "x$ISC" = xyes ; then echo "$as_me:15640: checking for main in -lcposix" >&5 echo $ECHO_N "checking for main in -lcposix... $ECHO_C" >&6 if test "${ac_cv_lib_cposix_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcposix $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 15648 "configure" #include "confdefs.h" int main () { main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15660: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15663: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15666: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15669: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_cposix_main=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_cposix_main=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:15680: result: $ac_cv_lib_cposix_main" >&5 echo "${ECHO_T}$ac_cv_lib_cposix_main" >&6 if test $ac_cv_lib_cposix_main = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for bzero in -linet... $ECHO_C" >&6 if test "${ac_cv_lib_inet_bzero+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-linet $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 15699 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char bzero (); int main () { bzero (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:15718: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:15721: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:15724: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15727: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_inet_bzero=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_inet_bzero=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:15738: result: $ac_cv_lib_inet_bzero" >&5 echo "${ECHO_T}$ac_cv_lib_inet_bzero" >&6 if test $ac_cv_lib_inet_bzero = yes; then cf_add_libs="-linet" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi fi echo "$as_me:15761: checking if sys/time.h works with sys/select.h" >&5 echo $ECHO_N "checking if sys/time.h works with sys/select.h... $ECHO_C" >&6 if test "${cf_cv_sys_time_select+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 15768 "configure" #include "confdefs.h" #include #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15788: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15791: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15794: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15797: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_sys_time_select=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_sys_time_select=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:15809: result: $cf_cv_sys_time_select" >&5 echo "${ECHO_T}$cf_cv_sys_time_select" >&6 test "$cf_cv_sys_time_select" = yes && cat >>confdefs.h <<\EOF #define HAVE_SYS_TIME_SELECT 1 EOF ### checks for compiler characteristics ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return=return echo "$as_me:15824: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 15830 "configure" #include "confdefs.h" int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15888: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15891: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15894: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15897: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:15907: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\EOF #define const EOF fi echo "$as_me:15917: checking for inline" >&5 echo $ECHO_N "checking for inline... $ECHO_C" >&6 if test "${ac_cv_c_inline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat >conftest.$ac_ext <<_ACEOF #line 15925 "configure" #include "confdefs.h" #ifndef __cplusplus static $ac_kw int static_foo () {return 0; } $ac_kw int foo () {return 0; } #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:15934: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:15937: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:15940: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:15943: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_inline=$ac_kw; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:15954: result: $ac_cv_c_inline" >&5 echo "${ECHO_T}$ac_cv_c_inline" >&6 case $ac_cv_c_inline in inline | yes) ;; no) cat >>confdefs.h <<\EOF #define inline EOF ;; *) cat >>confdefs.h <&5 echo $ECHO_N "checking if $CC supports options to tune inlining... $ECHO_C" >&6 if test "${cf_cv_gcc_inline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS --param max-inline-insns-single=1200" cat >conftest.$ac_ext <<_ACEOF #line 15989 "configure" #include "confdefs.h" inline int foo(void) { return 1; } int main () { ${cf_cv_main_return:-return} foo() ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:16001: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16004: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:16007: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16010: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_gcc_inline=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_gcc_inline=no fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS=$cf_save_CFLAGS fi echo "$as_me:16022: result: $cf_cv_gcc_inline" >&5 echo "${ECHO_T}$cf_cv_gcc_inline" >&6 if test "$cf_cv_gcc_inline" = yes ; then cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in --param max-inline-insns-single=1200 do case $cf_fix_cppflags in (no) case $cf_add_cflags in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case $cf_add_cflags in (-D*) cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test $cf_fix_cppflags = yes ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case $cf_add_cflags in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" ;; esac ;; (*) cf_new_cflags="$cf_new_cflags $cf_add_cflags" ;; esac ;; (yes) cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags" cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then CFLAGS="$CFLAGS $cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then CPPFLAGS="$CPPFLAGS $cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS" fi fi fi fi echo "$as_me:16108: checking for signal global datatype" >&5 echo $ECHO_N "checking for signal global datatype... $ECHO_C" >&6 if test "${cf_cv_sig_atomic_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else for cf_type in \ "volatile sig_atomic_t" \ "sig_atomic_t" \ "int" do cat >conftest.$ac_ext <<_ACEOF #line 16120 "configure" #include "confdefs.h" #include #include #include extern $cf_type x; $cf_type x; static void handler(int sig) { x = 5; } int main () { signal(SIGINT, handler); x = 1 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:16143: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16146: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:16149: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16152: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_sig_atomic_t=$cf_type else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_sig_atomic_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext test "$cf_cv_sig_atomic_t" != no && break done fi echo "$as_me:16166: result: $cf_cv_sig_atomic_t" >&5 echo "${ECHO_T}$cf_cv_sig_atomic_t" >&6 test "$cf_cv_sig_atomic_t" != no && cat >>confdefs.h <&5 echo $ECHO_N "checking for type of chtype... $ECHO_C" >&6 if test "${cf_cv_typeof_chtype+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then cf_cv_typeof_chtype=long else cat >conftest.$ac_ext <<_ACEOF #line 16185 "configure" #include "confdefs.h" #define WANT_BITS 31 #include int main() { FILE *fp = fopen("cf_test.out", "w"); if (fp != 0) { char *result = "long"; if (sizeof(unsigned long) > sizeof(unsigned int)) { int n; unsigned int x, y; for (n = 0; n < WANT_BITS; n++) { x = (1 << n); y = (x >> n); if (y != 1 || x == 0) { x = 0; break; } } /* * If x is nonzero, an int is big enough for the bits * that we want. */ result = (x != 0) ? "int" : "long"; } fputs(result, fp); fclose(fp); } ${cf_cv_main_return:-return}(0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:16220: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16223: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:16225: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16228: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_typeof_chtype=`cat cf_test.out` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_typeof_chtype=long fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f cf_test.out fi echo "$as_me:16243: result: $cf_cv_typeof_chtype" >&5 echo "${ECHO_T}$cf_cv_typeof_chtype" >&6 cat >>confdefs.h <&5 echo $ECHO_N "checking if unsigned literals are legal... $ECHO_C" >&6 if test "${cf_cv_unsigned_literals+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 16262 "configure" #include "confdefs.h" int main () { long x = 1L + 1UL + 1U + 1 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:16274: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16277: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:16280: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16283: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_unsigned_literals=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_unsigned_literals=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:16295: result: $cf_cv_unsigned_literals" >&5 echo "${ECHO_T}$cf_cv_unsigned_literals" >&6 cf_cv_1UL="1" test ".$cf_cv_unsigned_literals" = .yes && cf_cv_1UL="${cf_cv_1UL}U" test ".$cf_cv_typeof_chtype" = .long && cf_cv_1UL="${cf_cv_1UL}L" if test $NCURSES_MMASK_T = auto ; then cf_cv_typeof_mmask_t=long else cf_cv_typeof_mmask_t=$NCURSES_MMASK_T fi test "$cf_cv_typeof_mmask_t" = unsigned && cf_cv_typeof_mmask_t="" ### Checks for external-data echo "$as_me:16311: checking if external errno is declared" >&5 echo $ECHO_N "checking if external errno is declared... $ECHO_C" >&6 if test "${cf_cv_dcl_errno+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 16318 "configure" #include "confdefs.h" #ifdef HAVE_STDLIB_H #include #endif #include #include #include int main () { int x = (int) errno ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:16336: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16339: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:16342: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16345: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_dcl_errno=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_dcl_errno=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:16356: result: $cf_cv_dcl_errno" >&5 echo "${ECHO_T}$cf_cv_dcl_errno" >&6 if test "$cf_cv_dcl_errno" = no ; then cf_result=`echo "decl_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking if external errno exists... $ECHO_C" >&6 if test "${cf_cv_have_errno+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 16378 "configure" #include "confdefs.h" #undef errno extern int errno; int main () { errno = 2 ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:16393: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16396: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:16399: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16402: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_have_errno=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_have_errno=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:16413: result: $cf_cv_have_errno" >&5 echo "${ECHO_T}$cf_cv_have_errno" >&6 if test "$cf_cv_have_errno" = yes ; then cf_result=`echo "have_errno" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <&5 echo $ECHO_N "checking if data-only library module links... $ECHO_C" >&6 if test "${cf_cv_link_dataonly+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f conftest.a cat >conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16440: \$? = $ac_status" >&5 (exit $ac_status); } ; then mv conftest.o data.o && \ ( $AR $ARFLAGS conftest.a data.o ) 2>&5 1>/dev/null fi rm -f conftest.$ac_ext data.o cat >conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16463: \$? = $ac_status" >&5 (exit $ac_status); }; then mv conftest.o func.o && \ ( $AR $ARFLAGS conftest.a func.o ) 2>&5 1>/dev/null fi rm -f conftest.$ac_ext func.o ( eval $RANLIB conftest.a ) 2>&5 >/dev/null cf_saveLIBS="$LIBS" LIBS="conftest.a $LIBS" if test "$cross_compiling" = yes; then cf_cv_link_dataonly=unknown else cat >conftest.$ac_ext <<_ACEOF #line 16476 "configure" #include "confdefs.h" int main() { extern int testfunc(); ${cf_cv_main_return:-return} (!testfunc()); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:16487: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16490: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:16492: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16495: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_link_dataonly=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_link_dataonly=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi LIBS="$cf_saveLIBS" fi echo "$as_me:16510: result: $cf_cv_link_dataonly" >&5 echo "${ECHO_T}$cf_cv_link_dataonly" >&6 if test "$cf_cv_link_dataonly" = no ; then cat >>confdefs.h <<\EOF #define BROKEN_LINKER 1 EOF BROKEN_LINKER=1 fi ### Checks for library functions. for ac_func in \ getcwd \ getegid \ geteuid \ getopt \ getttynam \ issetugid \ poll \ putenv \ remove \ select \ setbuf \ setbuffer \ setenv \ setvbuf \ sigaction \ sigvec \ strdup \ strstr \ tcgetpgrp \ times \ vsnprintf \ do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:16549: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 16555 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:16586: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16589: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:16592: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16595: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:16605: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <&5 echo "$as_me: error: getopt is required for building programs" >&2;} { (exit 1); exit 1; }; } fi if test "x$with_getcap" = "xyes" ; then echo "$as_me:16624: checking for terminal-capability database functions" >&5 echo $ECHO_N "checking for terminal-capability database functions... $ECHO_C" >&6 if test "${cf_cv_cgetent+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 16631 "configure" #include "confdefs.h" #include int main () { char temp[128]; char *buf = temp; char *db_array = temp; cgetent(&buf, &db_array, "vt100"); cgetcap(buf, "tc", '='); cgetmatch(buf, "tc"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:16651: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16654: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:16657: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16660: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_cgetent=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_cgetent=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:16671: result: $cf_cv_cgetent" >&5 echo "${ECHO_T}$cf_cv_cgetent" >&6 if test "$cf_cv_cgetent" = yes then cat >>confdefs.h <<\EOF #define HAVE_BSD_CGETENT 1 EOF echo "$as_me:16681: checking if cgetent uses const parameter" >&5 echo $ECHO_N "checking if cgetent uses const parameter... $ECHO_C" >&6 if test "${cf_cv_cgetent_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 16688 "configure" #include "confdefs.h" #include int main () { char temp[128]; char *buf = temp; #ifndef _NETBSD_SOURCE /* given, since April 2004 in stdlib.h */ const char *db_array = temp; cgetent(&buf, &db_array, "vt100"); #endif cgetcap(buf, "tc", '='); cgetmatch(buf, "tc"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:16710: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16713: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:16716: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16719: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_cgetent_const=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_cgetent_const=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:16730: result: $cf_cv_cgetent_const" >&5 echo "${ECHO_T}$cf_cv_cgetent_const" >&6 if test "$cf_cv_cgetent_const" = yes then cat >>confdefs.h <&5 echo $ECHO_N "checking for isascii... $ECHO_C" >&6 if test "${cf_cv_have_isascii+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 16751 "configure" #include "confdefs.h" #include int main () { int x = isascii(' ') ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:16763: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16766: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:16769: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16772: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_have_isascii=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_have_isascii=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:16783: result: $cf_cv_have_isascii" >&5 echo "${ECHO_T}$cf_cv_have_isascii" >&6 test "$cf_cv_have_isascii" = yes && cat >>confdefs.h <<\EOF #define HAVE_ISASCII 1 EOF if test "$ac_cv_func_sigaction" = yes; then echo "$as_me:16791: checking whether sigaction needs _POSIX_SOURCE" >&5 echo $ECHO_N "checking whether sigaction needs _POSIX_SOURCE... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 16794 "configure" #include "confdefs.h" #include #include int main () { struct sigaction act ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:16808: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16811: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:16814: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16817: \$? = $ac_status" >&5 (exit $ac_status); }; }; then sigact_bad=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 16825 "configure" #include "confdefs.h" #define _POSIX_SOURCE #include #include int main () { struct sigaction act ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:16840: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:16843: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:16846: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16849: \$? = $ac_status" >&5 (exit $ac_status); }; }; then sigact_bad=yes cat >>confdefs.h <<\EOF #define _POSIX_SOURCE 1 EOF else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 sigact_bad=unknown fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:16865: result: $sigact_bad" >&5 echo "${ECHO_T}$sigact_bad" >&6 fi echo "$as_me:16869: checking if nanosleep really works" >&5 echo $ECHO_N "checking if nanosleep really works... $ECHO_C" >&6 if test "${cf_cv_func_nanosleep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then cf_cv_func_nanosleep=unknown else cat >conftest.$ac_ext <<_ACEOF #line 16879 "configure" #include "confdefs.h" #include #include #include #ifdef HAVE_SYS_TIME_H #include #endif int main() { struct timespec ts1, ts2; int code; ts1.tv_sec = 0; ts1.tv_nsec = 750000000; ts2.tv_sec = 0; ts2.tv_nsec = 0; errno = 0; code = nanosleep(&ts1, &ts2); /* on failure errno is ENOSYS. */ ${cf_cv_main_return:-return}(code != 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:16904: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:16907: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:16909: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:16912: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_func_nanosleep=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_func_nanosleep=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:16924: result: $cf_cv_func_nanosleep" >&5 echo "${ECHO_T}$cf_cv_func_nanosleep" >&6 test "$cf_cv_func_nanosleep" = "yes" && cat >>confdefs.h <<\EOF #define HAVE_NANOSLEEP 1 EOF for ac_header in \ termio.h \ termios.h \ unistd.h \ do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:16939: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 16945 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:16949: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:16955: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:16974: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 16995 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:16999: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:17005: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:17024: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking whether termios.h needs _POSIX_SOURCE... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 17045 "configure" #include "confdefs.h" #include int main () { struct termios foo; int x = foo.c_iflag ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:17057: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:17060: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:17063: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17066: \$? = $ac_status" >&5 (exit $ac_status); }; }; then termios_bad=no else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 17074 "configure" #include "confdefs.h" #define _POSIX_SOURCE #include int main () { struct termios foo; int x = foo.c_iflag ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:17088: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:17091: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:17094: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17097: \$? = $ac_status" >&5 (exit $ac_status); }; }; then termios_bad=unknown else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 termios_bad=yes cat >>confdefs.h <<\EOF #define _POSIX_SOURCE 1 EOF fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:17113: result: $termios_bad" >&5 echo "${ECHO_T}$termios_bad" >&6 fi fi echo "$as_me:17118: checking for tcgetattr" >&5 echo $ECHO_N "checking for tcgetattr... $ECHO_C" >&6 if test "${cf_cv_have_tcgetattr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 17125 "configure" #include "confdefs.h" #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_TERMIOS_H #include #define TTY struct termios #else #ifdef HAVE_TERMIO_H #include #define TTY struct termio #endif #endif int main () { TTY foo; tcgetattr(1, &foo); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:17153: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17156: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:17159: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17162: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_have_tcgetattr=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_have_tcgetattr=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:17172: result: $cf_cv_have_tcgetattr" >&5 echo "${ECHO_T}$cf_cv_have_tcgetattr" >&6 test "$cf_cv_have_tcgetattr" = yes && cat >>confdefs.h <<\EOF #define HAVE_TCGETATTR 1 EOF echo "$as_me:17179: checking for vsscanf function or workaround" >&5 echo $ECHO_N "checking for vsscanf function or workaround... $ECHO_C" >&6 if test "${cf_cv_func_vsscanf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 17186 "configure" #include "confdefs.h" #include #include int main () { va_list ap; vsscanf("from", "%d", ap) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:17202: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17205: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:17208: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17211: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_func_vsscanf=vsscanf else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 17219 "configure" #include "confdefs.h" #include #include int main () { FILE strbuf; char *str = "from"; strbuf._flag = _IOREAD; strbuf._ptr = strbuf._base = (unsigned char *) str; strbuf._cnt = strlen(str); strbuf._file = _NFILE; return (vfscanf(&strbuf, "%d", ap)) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:17241: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17244: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:17247: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17250: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_func_vsscanf=vfscanf else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 17258 "configure" #include "confdefs.h" #include #include int main () { FILE strbuf; char *str = "from"; strbuf._flag = _IOREAD; strbuf._ptr = strbuf._base = (unsigned char *) str; strbuf._cnt = strlen(str); strbuf._file = _NFILE; return (_doscan(&strbuf, "%d", ap)) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:17280: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17283: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:17286: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17289: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_func_vsscanf=_doscan else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_func_vsscanf=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:17304: result: $cf_cv_func_vsscanf" >&5 echo "${ECHO_T}$cf_cv_func_vsscanf" >&6 case $cf_cv_func_vsscanf in (vsscanf) cat >>confdefs.h <<\EOF #define HAVE_VSSCANF 1 EOF ;; (vfscanf) cat >>confdefs.h <<\EOF #define HAVE_VFSCANF 1 EOF ;; (_doscan) cat >>confdefs.h <<\EOF #define HAVE__DOSCAN 1 EOF ;; esac echo "$as_me:17325: checking for working mkstemp" >&5 echo $ECHO_N "checking for working mkstemp... $ECHO_C" >&6 if test "${cf_cv_func_mkstemp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -rf conftest* if test "$cross_compiling" = yes; then cf_cv_func_mkstemp=maybe else cat >conftest.$ac_ext <<_ACEOF #line 17336 "configure" #include "confdefs.h" #include #include #include #include #include int main() { char *tmpl = "conftestXXXXXX"; char name[2][80]; int n; int result = 0; int fd; struct stat sb; umask(077); for (n = 0; n < 2; ++n) { strcpy(name[n], tmpl); if ((fd = mkstemp(name[n])) >= 0) { if (!strcmp(name[n], tmpl) || stat(name[n], &sb) != 0 || (sb.st_mode & S_IFMT) != S_IFREG || (sb.st_mode & 077) != 0) { result = 1; } close(fd); } } if (result == 0 && !strcmp(name[0], name[1])) result = 1; ${cf_cv_main_return:-return}(result); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:17374: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17377: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:17379: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17382: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_func_mkstemp=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_func_mkstemp=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:17397: result: $cf_cv_func_mkstemp" >&5 echo "${ECHO_T}$cf_cv_func_mkstemp" >&6 if test "x$cf_cv_func_mkstemp" = xmaybe ; then echo "$as_me:17400: checking for mkstemp" >&5 echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6 if test "${ac_cv_func_mkstemp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 17406 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char mkstemp (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char mkstemp (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_mkstemp) || defined (__stub___mkstemp) choke me #else f = mkstemp; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:17437: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17440: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:17443: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17446: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_mkstemp=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_mkstemp=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:17456: result: $ac_cv_func_mkstemp" >&5 echo "${ECHO_T}$ac_cv_func_mkstemp" >&6 fi if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then cat >>confdefs.h <<\EOF #define HAVE_MKSTEMP 1 EOF fi # setup for prototype of fallback for vsscanf() if test "$cf_cv_func_vsscanf" = vsscanf ; then HAVE_VSSCANF=1 else HAVE_VSSCANF=0 fi if test "x$cross_compiling" = xyes ; then { echo "$as_me:17477: WARNING: cross compiling: assume setvbuf params not reversed" >&5 echo "$as_me: WARNING: cross compiling: assume setvbuf params not reversed" >&2;} else echo "$as_me:17480: checking whether setvbuf arguments are reversed" >&5 echo $ECHO_N "checking whether setvbuf arguments are reversed... $ECHO_C" >&6 if test "${ac_cv_func_setvbuf_reversed+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then { { echo "$as_me:17486: error: cannot run test program while cross compiling" >&5 echo "$as_me: error: cannot run test program while cross compiling" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #line 17491 "configure" #include "confdefs.h" #include /* If setvbuf has the reversed format, exit 0. */ int main () { /* This call has the arguments reversed. A reversed system may check and see that the address of main is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */ if (setvbuf(stdout, _IOLBF, (char *) main, BUFSIZ) != 0) $ac_main_return(1); putc('\r', stdout); $ac_main_return(0); /* Non-reversed systems segv here. */ } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:17508: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17511: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:17513: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17516: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_setvbuf_reversed=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_setvbuf_reversed=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f core core.* *.core fi echo "$as_me:17529: result: $ac_cv_func_setvbuf_reversed" >&5 echo "${ECHO_T}$ac_cv_func_setvbuf_reversed" >&6 if test $ac_cv_func_setvbuf_reversed = yes; then cat >>confdefs.h <<\EOF #define SETVBUF_REVERSED 1 EOF fi fi echo "$as_me:17540: checking for intptr_t" >&5 echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6 if test "${ac_cv_type_intptr_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 17546 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((intptr_t *) 0) return 0; if (sizeof (intptr_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:17561: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:17564: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:17567: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17570: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_intptr_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_intptr_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:17580: result: $ac_cv_type_intptr_t" >&5 echo "${ECHO_T}$ac_cv_type_intptr_t" >&6 if test $ac_cv_type_intptr_t = yes; then : else cat >>confdefs.h <&5 echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6 if test "${ac_cv_type_ssize_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 17598 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((ssize_t *) 0) return 0; if (sizeof (ssize_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:17613: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:17616: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:17619: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17622: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_ssize_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_ssize_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:17632: result: $ac_cv_type_ssize_t" >&5 echo "${ECHO_T}$ac_cv_type_ssize_t" >&6 if test $ac_cv_type_ssize_t = yes; then : else cat >>confdefs.h <&5 echo $ECHO_N "checking for type sigaction_t... $ECHO_C" >&6 if test "${cf_cv_type_sigaction+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 17651 "configure" #include "confdefs.h" #include int main () { sigaction_t x ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:17664: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:17667: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:17670: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17673: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_type_sigaction=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_type_sigaction=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:17684: result: $cf_cv_type_sigaction" >&5 echo "${ECHO_T}$cf_cv_type_sigaction" >&6 test "$cf_cv_type_sigaction" = yes && cat >>confdefs.h <<\EOF #define HAVE_TYPE_SIGACTION 1 EOF echo "$as_me:17691: checking declaration of size-change" >&5 echo $ECHO_N "checking declaration of size-change... $ECHO_C" >&6 if test "${cf_cv_sizechange+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_sizechange=unknown cf_save_CPPFLAGS="$CPPFLAGS" for cf_opts in "" "NEED_PTEM_H" do CPPFLAGS="$cf_save_CPPFLAGS" test -n "$cf_opts" && CPPFLAGS="$CPPFLAGS -D$cf_opts" cat >conftest.$ac_ext <<_ACEOF #line 17706 "configure" #include "confdefs.h" #include #ifdef HAVE_TERMIOS_H #include #else #ifdef HAVE_TERMIO_H #include #endif #endif #ifdef NEED_PTEM_H /* This is a workaround for SCO: they neglected to define struct winsize in * termios.h -- it's only in termio.h and ptem.h */ #include #include #endif #if !defined(sun) || !defined(HAVE_TERMIOS_H) #include #endif int main () { #ifdef TIOCGSIZE struct ttysize win; /* FIXME: what system is this? */ int y = win.ts_lines; int x = win.ts_cols; #else #ifdef TIOCGWINSZ struct winsize win; int y = win.ws_row; int x = win.ws_col; #else no TIOCGSIZE or TIOCGWINSZ #endif /* TIOCGWINSZ */ #endif /* TIOCGSIZE */ ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:17750: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:17753: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:17756: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17759: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_sizechange=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_sizechange=no fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$cf_save_CPPFLAGS" if test "$cf_cv_sizechange" = yes ; then echo "size-change succeeded ($cf_opts)" >&5 test -n "$cf_opts" && cf_cv_sizechange="$cf_opts" break fi done fi echo "$as_me:17778: result: $cf_cv_sizechange" >&5 echo "${ECHO_T}$cf_cv_sizechange" >&6 if test "$cf_cv_sizechange" != no ; then cat >>confdefs.h <<\EOF #define HAVE_SIZECHANGE 1 EOF case $cf_cv_sizechange in (NEED*) cat >>confdefs.h <&5 echo $ECHO_N "checking for memmove... $ECHO_C" >&6 if test "${ac_cv_func_memmove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 17802 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char memmove (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char memmove (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_memmove) || defined (__stub___memmove) choke me #else f = memmove; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:17833: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17836: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:17839: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17842: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_memmove=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_memmove=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:17852: result: $ac_cv_func_memmove" >&5 echo "${ECHO_T}$ac_cv_func_memmove" >&6 if test $ac_cv_func_memmove = yes; then : else echo "$as_me:17858: checking for bcopy" >&5 echo $ECHO_N "checking for bcopy... $ECHO_C" >&6 if test "${ac_cv_func_bcopy+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 17864 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char bcopy (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char bcopy (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_bcopy) || defined (__stub___bcopy) choke me #else f = bcopy; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:17895: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17898: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:17901: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17904: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_bcopy=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_bcopy=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:17914: result: $ac_cv_func_bcopy" >&5 echo "${ECHO_T}$ac_cv_func_bcopy" >&6 if test $ac_cv_func_bcopy = yes; then echo "$as_me:17918: checking if bcopy does overlapping moves" >&5 echo $ECHO_N "checking if bcopy does overlapping moves... $ECHO_C" >&6 if test "${cf_cv_good_bcopy+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then cf_cv_good_bcopy=unknown else cat >conftest.$ac_ext <<_ACEOF #line 17928 "configure" #include "confdefs.h" int main() { static char data[] = "abcdefghijklmnopqrstuwwxyz"; char temp[40]; bcopy(data, temp, sizeof(data)); bcopy(temp+10, temp, 15); bcopy(temp+5, temp+15, 10); ${cf_cv_main_return:-return} (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz")); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:17942: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:17945: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:17947: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:17950: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_good_bcopy=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_good_bcopy=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:17963: result: $cf_cv_good_bcopy" >&5 echo "${ECHO_T}$cf_cv_good_bcopy" >&6 else cf_cv_good_bcopy=no fi if test "$cf_cv_good_bcopy" = yes ; then cat >>confdefs.h <<\EOF #define USE_OK_BCOPY 1 EOF else cat >>confdefs.h <<\EOF #define USE_MY_MEMMOVE 1 EOF fi fi tty 2>&1 >/dev/null || { for ac_func in posix_openpt do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:17990: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 17996 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:18027: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:18030: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:18033: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18036: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:18046: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking if poll really works... $ECHO_C" >&6 if test "${cf_cv_working_poll+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then cf_cv_working_poll=unknown else cat >conftest.$ac_ext <<_ACEOF #line 18066 "configure" #include "confdefs.h" #include #include #include #include #ifdef HAVE_POLL_H #include #else #include #endif int main(void) { struct pollfd myfds; int ret; /* check for Darwin bug with respect to "devices" */ myfds.fd = open("/dev/null", 1); /* O_WRONLY */ if (myfds.fd < 0) myfds.fd = 0; myfds.events = POLLIN; myfds.revents = 0; ret = poll(&myfds, 1, 100); if (ret < 0 || (myfds.revents & POLLNVAL)) { ret = -1; } else { int fd = 0; if (!isatty(fd)) { fd = open("/dev/tty", 2); /* O_RDWR */ } #ifdef HAVE_POSIX_OPENPT if (fd < 0) { fd = posix_openpt(O_RDWR); } #endif if (fd >= 0) { /* also check with standard input */ myfds.fd = fd; myfds.events = POLLIN; myfds.revents = 0; ret = poll(&myfds, 1, 100); } else { ret = -1; } } ${cf_cv_main_return:-return}(ret < 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:18118: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:18121: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:18123: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18126: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_working_poll=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_working_poll=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:18138: result: $cf_cv_working_poll" >&5 echo "${ECHO_T}$cf_cv_working_poll" >&6 test "$cf_cv_working_poll" = "yes" && cat >>confdefs.h <<\EOF #define HAVE_WORKING_POLL 1 EOF echo "$as_me:18145: checking for va_copy" >&5 echo $ECHO_N "checking for va_copy... $ECHO_C" >&6 if test "${cf_cv_have_va_copy+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 18152 "configure" #include "confdefs.h" #include int main () { static va_list dst; static va_list src; va_copy(dst, src) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:18169: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:18172: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:18175: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18178: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_have_va_copy=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_have_va_copy=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:18188: result: $cf_cv_have_va_copy" >&5 echo "${ECHO_T}$cf_cv_have_va_copy" >&6 test "$cf_cv_have_va_copy" = yes && cat >>confdefs.h <<\EOF #define HAVE_VA_COPY 1 EOF echo "$as_me:18196: checking for __va_copy" >&5 echo $ECHO_N "checking for __va_copy... $ECHO_C" >&6 if test "${cf_cv_have___va_copy+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 18203 "configure" #include "confdefs.h" #include int main () { static va_list dst; static va_list src; __va_copy(dst, src) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:18220: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:18223: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:18226: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18229: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_have___va_copy=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_have___va_copy=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:18239: result: $cf_cv_have___va_copy" >&5 echo "${ECHO_T}$cf_cv_have___va_copy" >&6 test "$cf_cv_have___va_copy" = yes && cat >>confdefs.h <<\EOF #define HAVE___VA_COPY 1 EOF echo "$as_me:18247: checking for pid_t" >&5 echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 if test "${ac_cv_type_pid_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 18253 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((pid_t *) 0) return 0; if (sizeof (pid_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:18268: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:18271: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:18274: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18277: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_pid_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_pid_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:18287: result: $ac_cv_type_pid_t" >&5 echo "${ECHO_T}$ac_cv_type_pid_t" >&6 if test $ac_cv_type_pid_t = yes; then : else cat >>confdefs.h <&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 18308 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:18312: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:18318: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:18337: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 18356 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:18387: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:18390: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:18393: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18396: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:18406: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for working fork... $ECHO_C" >&6 if test "${ac_cv_func_fork_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_fork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* By Rüdiger Kuhlmann. */ #include #if HAVE_UNISTD_H # include #endif /* Some systems only have a dummy stub for fork() */ int main () { if (fork() < 0) $ac_main_return (1); $ac_main_return (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:18441: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:18444: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:18446: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18449: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_fork_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_fork_works=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:18461: result: $ac_cv_func_fork_works" >&5 echo "${ECHO_T}$ac_cv_func_fork_works" >&6 fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { echo "$as_me:18475: WARNING: CROSS: Result $ac_cv_func_fork_works guessed due to cross-compiling." >&5 echo "$as_me: WARNING: CROSS: Result $ac_cv_func_fork_works guessed due to cross-compiling." >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then echo "$as_me:18480: checking for working vfork" >&5 echo $ECHO_N "checking for working vfork... $ECHO_C" >&6 if test "${ac_cv_func_vfork_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_vfork_works=cross else cat >conftest.$ac_ext <<_ACEOF #line 18489 "configure" #include "confdefs.h" /* Thanks to Paul Eggert for this test. */ #include #include #include #if HAVE_UNISTD_H # include #endif #if HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; $ac_main_return( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:18586: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:18589: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:18591: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18594: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_vfork_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_vfork_works=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:18606: result: $ac_cv_func_vfork_works" >&5 echo "${ECHO_T}$ac_cv_func_vfork_works" >&6 fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=ac_cv_func_vfork { echo "$as_me:18612: WARNING: CROSS: Result $ac_cv_func_vfork_works guessed due to cross-compiling." >&5 echo "$as_me: WARNING: CROSS: Result $ac_cv_func_vfork_works guessed due to cross-compiling." >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then cat >>confdefs.h <<\EOF #define HAVE_WORKING_VFORK 1 EOF else cat >>confdefs.h <<\EOF #define vfork fork EOF fi if test "x$ac_cv_func_fork_works" = xyes; then cat >>confdefs.h <<\EOF #define HAVE_WORKING_FORK 1 EOF fi # special check for test/ditto.c echo "$as_me:18639: checking for openpty in -lutil" >&5 echo $ECHO_N "checking for openpty in -lutil... $ECHO_C" >&6 if test "${ac_cv_lib_util_openpty+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 18647 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char openpty (); int main () { openpty (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:18666: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:18669: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:18672: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18675: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_util_openpty=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_util_openpty=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:18686: result: $ac_cv_lib_util_openpty" >&5 echo "${ECHO_T}$ac_cv_lib_util_openpty" >&6 if test $ac_cv_lib_util_openpty = yes; then cf_cv_lib_util=yes else cf_cv_lib_util=no fi echo "$as_me:18694: checking for openpty header" >&5 echo $ECHO_N "checking for openpty header... $ECHO_C" >&6 if test "${cf_cv_func_openpty+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save_LIBS="$LIBS" test $cf_cv_lib_util = yes && { cf_add_libs="-lutil" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" } for cf_header in pty.h libutil.h util.h do cat >conftest.$ac_ext <<_ACEOF #line 18721 "configure" #include "confdefs.h" #include <$cf_header> int main () { int x = openpty((int *)0, (int *)0, (char *)0, (struct termios *)0, (struct winsize *)0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:18738: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:18741: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:18744: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18747: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_func_openpty=$cf_header break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_func_openpty=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done LIBS="$cf_save_LIBS" fi echo "$as_me:18765: result: $cf_cv_func_openpty" >&5 echo "${ECHO_T}$cf_cv_func_openpty" >&6 if test "$cf_cv_func_openpty" != no ; then cat >>confdefs.h < EOF cat >>confdefs.h <<\EOF #define USE_XTERM_PTY 1 EOF if test "x$cf_cv_lib_util" = xyes ; then cf_add_libs="-lutil" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $TEST_LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done TEST_LIBS="$cf_add_libs" fi fi if test "$with_hashed_db" != no ; then cat >>confdefs.h <<\EOF #define USE_HASHED_DB 1 EOF case $with_hashed_db in (yes|*able*) ;; (*) if test -d "$with_hashed_db" ; then if test -n "$with_hashed_db/include" ; then for cf_add_incdir in $with_hashed_db/include do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 18835 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:18847: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:18850: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:18853: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:18856: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:18873: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi if test -n "$with_hashed_db/lib" ; then for cf_add_libdir in $with_hashed_db/lib do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:18909: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi else case "$with_hashed_db" in (./*|../*|/*) { echo "$as_me:18920: WARNING: no such directory $with_hashed_db" >&5 echo "$as_me: WARNING: no such directory $with_hashed_db" >&2;} ;; (*) cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for include-directories under $prefix" test -d $prefix/include && cf_search="$cf_search $prefix/include" test -d $prefix/include/$with_hashed_db && cf_search="$cf_search $prefix/include/$with_hashed_db" test -d $prefix/include/$with_hashed_db/include && cf_search="$cf_search $prefix/include/$with_hashed_db/include" test -d $prefix/$with_hashed_db/include && cf_search="$cf_search $prefix/$with_hashed_db/include" test -d $prefix/$with_hashed_db/include/$with_hashed_db && cf_search="$cf_search $prefix/$with_hashed_db/include/$with_hashed_db" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for include-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/include && cf_search="$cf_search $cf_subdir_prefix/include" test -d $cf_subdir_prefix/include/$with_hashed_db && cf_search="$cf_search $cf_subdir_prefix/include/$with_hashed_db" test -d $cf_subdir_prefix/include/$with_hashed_db/include && cf_search="$cf_search $cf_subdir_prefix/include/$with_hashed_db/include" test -d $cf_subdir_prefix/$with_hashed_db/include && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/include" test -d $cf_subdir_prefix/$with_hashed_db/include/$with_hashed_db && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/include/$with_hashed_db" } done for cf_item in $cf_search do case $cf_item in (*/$with_hashed_db) if test -n "$cf_item" ; then for cf_add_incdir in $cf_item do while test $cf_add_incdir != /usr/include do if test -d $cf_add_incdir then cf_have_incdir=no if test -n "$CFLAGS$CPPFLAGS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_incdir in $CFLAGS $CPPFLAGS ; do if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then cf_have_incdir=yes; break fi done fi if test "$cf_have_incdir" = no ; then if test "$cf_add_incdir" = /usr/local/include ; then if test "$GCC" = yes then cf_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cat >conftest.$ac_ext <<_ACEOF #line 18989 "configure" #include "confdefs.h" #include int main () { printf("Hello") ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:19001: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:19004: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:19007: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19010: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_incdir=yes fi rm -f conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$cf_save_CPPFLAGS fi fi fi if test "$cf_have_incdir" = no ; then test -n "$verbose" && echo " adding $cf_add_incdir to include-path" 1>&6 echo "${as_me:-configure}:19027: testing adding $cf_add_incdir to include-path ..." 1>&5 CPPFLAGS="$CPPFLAGS -I$cf_add_incdir" cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'` test "$cf_top_incdir" = "$cf_add_incdir" && break cf_add_incdir="$cf_top_incdir" else break fi else break fi done done fi ;; esac done cf_search= test "x$prefix" != "xNONE" && \ test -d "$prefix" && \ { test -n "$verbose" && echo " ... testing for lib-directories under $prefix" test -d $prefix/lib && cf_search="$cf_search $prefix/lib" test -d $prefix/lib/$with_hashed_db && cf_search="$cf_search $prefix/lib/$with_hashed_db" test -d $prefix/lib/$with_hashed_db/lib && cf_search="$cf_search $prefix/lib/$with_hashed_db/lib" test -d $prefix/$with_hashed_db/lib && cf_search="$cf_search $prefix/$with_hashed_db/lib" test -d $prefix/$with_hashed_db/lib/$with_hashed_db && cf_search="$cf_search $prefix/$with_hashed_db/lib/$with_hashed_db" } for cf_subdir_prefix in \ /usr \ /usr/local \ /usr/pkg \ /opt \ /opt/local \ $HOME do test "x$cf_subdir_prefix" != "x$prefix" && \ test -d "$cf_subdir_prefix" && \ (test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && { test -n "$verbose" && echo " ... testing for lib-directories under $cf_subdir_prefix" test -d $cf_subdir_prefix/lib && cf_search="$cf_search $cf_subdir_prefix/lib" test -d $cf_subdir_prefix/lib/$with_hashed_db && cf_search="$cf_search $cf_subdir_prefix/lib/$with_hashed_db" test -d $cf_subdir_prefix/lib/$with_hashed_db/lib && cf_search="$cf_search $cf_subdir_prefix/lib/$with_hashed_db/lib" test -d $cf_subdir_prefix/$with_hashed_db/lib && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/lib" test -d $cf_subdir_prefix/$with_hashed_db/lib/$with_hashed_db && cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/lib/$with_hashed_db" } done for cf_item in $cf_search do case $cf_item in (*/$with_hashed_db) if test -n "$cf_item" ; then for cf_add_libdir in $cf_item do if test $cf_add_libdir = /usr/lib ; then : elif test -d $cf_add_libdir then cf_have_libdir=no if test -n "$LDFLAGS$LIBS" ; then # a loop is needed to ensure we can add subdirs of existing dirs for cf_test_libdir in $LDFLAGS $LIBS ; do if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then cf_have_libdir=yes; break fi done fi if test "$cf_have_libdir" = no ; then test -n "$verbose" && echo " adding $cf_add_libdir to library-path" 1>&6 echo "${as_me:-configure}:19107: testing adding $cf_add_libdir to library-path ..." 1>&5 LDFLAGS="-L$cf_add_libdir $LDFLAGS" fi fi done fi ;; esac done ;; esac fi esac echo "$as_me:19124: checking for db.h" >&5 echo $ECHO_N "checking for db.h... $ECHO_C" >&6 if test "${ac_cv_header_db_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 19130 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:19134: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:19140: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_db_h=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_db_h=no fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:19159: result: $ac_cv_header_db_h" >&5 echo "${ECHO_T}$ac_cv_header_db_h" >&6 if test $ac_cv_header_db_h = yes; then echo "$as_me:19163: checking for version of db" >&5 echo $ECHO_N "checking for version of db... $ECHO_C" >&6 if test "${cf_cv_hashed_db_version+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_hashed_db_version=unknown for cf_db_version in 1 2 3 4 5 6 do echo "${as_me:-configure}:19174: testing checking for db version $cf_db_version ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 19177 "configure" #include "confdefs.h" $ac_includes_default #include #ifdef DB_VERSION_MAJOR /* db2 (DB_VERSION_MAJOR=2) has also DB_VERSION_MINOR, tested with 7 */ #if $cf_db_version == DB_VERSION_MAJOR /* ok */ #else make an error #endif #else #if $cf_db_version == 1 /* ok: assuming this is DB 1.8.5 */ #else make an error #endif #endif int main () { DBT *foo = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:19207: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:19210: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:19213: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19216: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_hashed_db_version=$cf_db_version break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:19230: result: $cf_cv_hashed_db_version" >&5 echo "${ECHO_T}$cf_cv_hashed_db_version" >&6 if test "$cf_cv_hashed_db_version" = unknown ; then { { echo "$as_me:19234: error: Cannot determine version of db" >&5 echo "$as_me: error: Cannot determine version of db" >&2;} { (exit 1); exit 1; }; } else echo "$as_me:19239: checking for db libraries" >&5 echo $ECHO_N "checking for db libraries... $ECHO_C" >&6 if test "${cf_cv_hashed_db_libs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_hashed_db_libs=unknown for cf_db_libs in "" db$cf_cv_hashed_db_version db-$cf_cv_hashed_db_version db '' do cf_save_libs="$LIBS" if test -n "$cf_db_libs"; then cf_add_libs="-l$cf_db_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi echo "${as_me:-configure}:19269: testing checking for library "$cf_db_libs" ..." 1>&5 cat >conftest.$ac_ext <<_ACEOF #line 19272 "configure" #include "confdefs.h" $ac_includes_default #include int main () { char *path = "/tmp/foo"; #ifdef DB_VERSION_MAJOR #if DB_VERSION_MAJOR >= 4 DB *result = 0; db_create(&result, NULL, 0); result->open(result, NULL, path, path, DB_HASH, DB_CREATE, 0644); #elif DB_VERSION_MAJOR >= 3 DB *result = 0; db_create(&result, NULL, 0); result->open(result, path, path, DB_HASH, DB_CREATE, 0644); #elif DB_VERSION_MAJOR >= 2 DB *result = 0; db_open(path, DB_HASH, DB_CREATE, 0644, (DB_ENV *) 0, (DB_INFO *) 0, &result); #endif /* DB_VERSION_MAJOR */ #else DB *result = dbopen(path, 2, 0644, DB_HASH, 0); #endif ${cf_cv_main_return:-return}(result != 0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:19327: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:19330: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:19333: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19336: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if test -n "$cf_db_libs" ; then cf_cv_hashed_db_libs=$cf_db_libs else cf_cv_hashed_db_libs=default fi LIBS="$cf_save_libs" break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save_libs" done fi echo "$as_me:19356: result: $cf_cv_hashed_db_libs" >&5 echo "${ECHO_T}$cf_cv_hashed_db_libs" >&6 if test "$cf_cv_hashed_db_libs" = unknown ; then { { echo "$as_me:19360: error: Cannot determine library for db" >&5 echo "$as_me: error: Cannot determine library for db" >&2;} { (exit 1); exit 1; }; } elif test "$cf_cv_hashed_db_libs" != default ; then cf_add_libs="-l$cf_cv_hashed_db_libs" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" fi fi else { { echo "$as_me:19386: error: Cannot find db.h" >&5 echo "$as_me: error: Cannot find db.h" >&2;} { (exit 1); exit 1; }; } fi fi if test -z "$cf_user_CFLAGS" && test "$with_no_leaks" = no ; then CFLAGS=`echo ${CFLAGS} | sed -e 's%-g %%' -e 's%-g$%%'` CXXFLAGS=`echo ${CXXFLAGS} | sed -e 's%-g %%' -e 's%-g$%%'` fi # Just in case, check if the C compiler has a bool type. echo "$as_me:19401: checking if we should include stdbool.h" >&5 echo $ECHO_N "checking if we should include stdbool.h... $ECHO_C" >&6 if test "${cf_cv_header_stdbool_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 19409 "configure" #include "confdefs.h" int main () { bool foo = false ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:19421: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:19424: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:19427: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19430: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_header_stdbool_h=0 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 19437 "configure" #include "confdefs.h" #ifndef __BEOS__ #include #endif int main () { bool foo = false ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:19453: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:19456: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:19459: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19462: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_header_stdbool_h=1 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_header_stdbool_h=0 fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi if test "$cf_cv_header_stdbool_h" = 1 then echo "$as_me:19476: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:19478: result: no" >&5 echo "${ECHO_T}no" >&6 fi echo "$as_me:19482: checking for builtin bool type" >&5 echo $ECHO_N "checking for builtin bool type... $ECHO_C" >&6 if test "${cf_cv_cc_bool_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 19490 "configure" #include "confdefs.h" #include #include int main () { bool x = false ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:19505: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:19508: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:19511: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19514: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_cc_bool_type=1 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_cc_bool_type=0 fi rm -f conftest.$ac_objext conftest.$ac_ext fi if test "$cf_cv_cc_bool_type" = 1 then echo "$as_me:19527: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:19529: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Check for C++ compiler characteristics (and ensure that it's there!) if test -n "$CXX" ; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_main_return=return if test -n "$GXX" ; then cf_save="$LIBS" LIBS="$LIBS $CXXLIBS" echo "$as_me:19546: checking if we already have C++ library" >&5 echo $ECHO_N "checking if we already have C++ library... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 19549 "configure" #include "confdefs.h" #include int main () { std::cout << "Hello World!" << std::endl; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:19563: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:19566: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:19569: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19572: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_have_libstdcpp=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_have_libstdcpp=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:19581: result: $cf_have_libstdcpp" >&5 echo "${ECHO_T}$cf_have_libstdcpp" >&6 LIBS="$cf_save" if test $cf_have_libstdcpp != yes then case $cf_cv_system_name in (os2*) if test -z "`g++ -dM -E - < /dev/null | grep __KLIBC__`"; then cf_stdcpp_libname=stdcpp else cf_stdcpp_libname=stdc++ fi ;; (*) cf_stdcpp_libname=stdc++ ;; esac echo "$as_me:19600: checking for library $cf_stdcpp_libname" >&5 echo $ECHO_N "checking for library $cf_stdcpp_libname... $ECHO_C" >&6 if test "${cf_cv_libstdcpp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save="$LIBS" LIBS="$LIBS $CXXLIBS" cf_add_libs="-l$cf_stdcpp_libname" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 19626 "configure" #include "confdefs.h" #include int main () { std::cout << "Hello World!" << std::endl; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:19640: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:19643: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:19646: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19649: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_libstdcpp=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_libstdcpp=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save" fi echo "$as_me:19661: result: $cf_cv_libstdcpp" >&5 echo "${ECHO_T}$cf_cv_libstdcpp" >&6 test "$cf_cv_libstdcpp" = yes && { cf_add_libs="-l$cf_stdcpp_libname" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $CXXLIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done CXXLIBS="$cf_add_libs" } fi fi echo "$as_me:19683: checking whether $CXX understands -c and -o together" >&5 echo $ECHO_N "checking whether $CXX understands -c and -o together... $ECHO_C" >&6 if test "${cf_cv_prog_CXX_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat > conftest.$ac_ext < int main() { ${cf_cv_main_return:-return}(0); } CF_EOF # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CXX -c conftest.$ac_ext -o conftest2.$ac_objext >&5' if { (eval echo "$as_me:19699: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19702: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (eval echo "$as_me:19704: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19707: \$? = $ac_status" >&5 (exit $ac_status); }; then eval cf_cv_prog_CXX_c_o=yes else eval cf_cv_prog_CXX_c_o=no fi rm -rf conftest* fi if test $cf_cv_prog_CXX_c_o = yes; then echo "$as_me:19718: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:19721: result: no" >&5 echo "${ECHO_T}no" >&6 fi case $GXX_VERSION in (1*|2.0-6*) cf_cxx_library=yes ;; (*-2.7*|2.7*) cf_cxx_library=unknown case $cf_cv_system_name in (os2*) cf_gpp_libname=gpp ;; (*) cf_gpp_libname=g++ ;; esac if test "$GXX" = yes; then echo "$as_me:19741: checking for lib$cf_gpp_libname" >&5 echo $ECHO_N "checking for lib$cf_gpp_libname... $ECHO_C" >&6 cf_save="$LIBS" cf_add_libs="-l$cf_gpp_libname" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $LIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done LIBS="$cf_add_libs" cat >conftest.$ac_ext <<_ACEOF #line 19762 "configure" #include "confdefs.h" #include <$cf_gpp_libname/builtin.h> int main () { two_arg_error_handler_t foo2 = lib_error_handler ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:19776: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:19779: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:19782: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19785: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cxx_library=yes cf_add_libs="-l$cf_gpp_libname" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $CXXLIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done CXXLIBS="$cf_add_libs" if test "$cf_gpp_libname" = cpp ; then cat >>confdefs.h <<\EOF #define HAVE_GPP_BUILTIN_H 1 EOF else cat >>confdefs.h <<\EOF #define HAVE_GXX_BUILTIN_H 1 EOF fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 19822 "configure" #include "confdefs.h" #include int main () { two_arg_error_handler_t foo2 = lib_error_handler ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:19836: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:19839: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:19842: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:19845: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cxx_library=yes cf_add_libs="-l$cf_gpp_libname" # Filter out duplicates - this happens with badly-designed ".pc" files... for cf_add_1lib in $CXXLIBS do for cf_add_2lib in $cf_add_libs do if test "x$cf_add_1lib" = "x$cf_add_2lib" then cf_add_1lib= break fi done test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib" done CXXLIBS="$cf_add_libs" cat >>confdefs.h <<\EOF #define HAVE_BUILTIN_H 1 EOF else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cxx_library=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$cf_save" echo "$as_me:19878: result: $cf_cxx_library" >&5 echo "${ECHO_T}$cf_cxx_library" >&6 fi ;; (*) cf_cxx_library=no ;; esac ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_main_return=return echo "$as_me:19894: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line 19911 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:19916: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:19922: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line 19945 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:19949: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:19955: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:19992: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line 20002 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:20007: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:20013: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line 20036 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:20040: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:20046: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:20074: error: C++ preprocessor \"$CXXCPP\" fails sanity check" >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check" >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_main_return=return for ac_header in typeinfo do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:20089: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 20095 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:20099: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:20105: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:20124: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 20143 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:20147: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:20153: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_ext fi echo "$as_me:20172: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking if iostream uses std-namespace... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line 20186 "configure" #include "confdefs.h" #include using std::endl; using std::cerr; int main () { cerr << "testing" << endl; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:20203: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:20206: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:20209: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:20212: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_iostream_namespace=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_iostream_namespace=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:20221: result: $cf_iostream_namespace" >&5 echo "${ECHO_T}$cf_iostream_namespace" >&6 if test "$cf_iostream_namespace" = yes ; then cat >>confdefs.h <<\EOF #define IOSTREAM_NAMESPACE 1 EOF fi fi echo "$as_me:20232: checking if we should include stdbool.h" >&5 echo $ECHO_N "checking if we should include stdbool.h... $ECHO_C" >&6 if test "${cf_cv_header_stdbool_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 20240 "configure" #include "confdefs.h" int main () { bool foo = false ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:20252: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:20255: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:20258: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:20261: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_header_stdbool_h=0 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF #line 20268 "configure" #include "confdefs.h" #ifndef __BEOS__ #include #endif int main () { bool foo = false ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:20284: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:20287: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:20290: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:20293: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_header_stdbool_h=1 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_header_stdbool_h=0 fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi if test "$cf_cv_header_stdbool_h" = 1 then echo "$as_me:20307: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:20309: result: no" >&5 echo "${ECHO_T}no" >&6 fi echo "$as_me:20313: checking for builtin bool type" >&5 echo $ECHO_N "checking for builtin bool type... $ECHO_C" >&6 if test "${cf_cv_builtin_bool+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 20321 "configure" #include "confdefs.h" #include #include int main () { bool x = false ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:20336: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:20339: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:20342: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:20345: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_builtin_bool=1 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_builtin_bool=0 fi rm -f conftest.$ac_objext conftest.$ac_ext fi if test "$cf_cv_builtin_bool" = 1 then echo "$as_me:20358: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:20360: result: no" >&5 echo "${ECHO_T}no" >&6 fi echo "$as_me:20364: checking for size of bool" >&5 echo $ECHO_N "checking for size of bool... $ECHO_C" >&6 if test "${cf_cv_type_of_bool+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f cf_test.out if test "$cross_compiling" = yes; then cf_cv_type_of_bool=unknown else cat >conftest.$ac_ext <<_ACEOF #line 20375 "configure" #include "confdefs.h" #include #include #if defined(__cplusplus) #ifdef HAVE_GXX_BUILTIN_H #include #elif HAVE_GPP_BUILTIN_H #include #elif HAVE_BUILTIN_H #include #endif #else #if $cf_cv_header_stdbool_h #include #endif #endif int main() { FILE *fp = fopen("cf_test.out", "w"); if (fp != 0) { bool x = true; if ((bool)(-x) >= 0) fputs("unsigned ", fp); if (sizeof(x) == sizeof(int)) fputs("int", fp); else if (sizeof(x) == sizeof(char)) fputs("char", fp); else if (sizeof(x) == sizeof(short))fputs("short",fp); else if (sizeof(x) == sizeof(long)) fputs("long", fp); fclose(fp); } ${cf_cv_main_return:-return}(0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:20417: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:20420: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:20422: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:20425: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_type_of_bool=`cat cf_test.out` if test -z "$cf_cv_type_of_bool"; then cf_cv_type_of_bool=unknown fi else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_type_of_bool=unknown fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f cf_test.out echo "$as_me:20443: result: $cf_cv_type_of_bool" >&5 echo "${ECHO_T}$cf_cv_type_of_bool" >&6 if test "$cf_cv_type_of_bool" = unknown ; then case .$NCURSES_BOOL in (.auto|.) NCURSES_BOOL=unsigned;; esac { echo "$as_me:20449: WARNING: Assuming $NCURSES_BOOL for type of bool" >&5 echo "$as_me: WARNING: Assuming $NCURSES_BOOL for type of bool" >&2;} cf_cv_type_of_bool=$NCURSES_BOOL fi echo "$as_me:20454: checking for special defines needed for etip.h" >&5 echo $ECHO_N "checking for special defines needed for etip.h... $ECHO_C" >&6 cf_save_CXXFLAGS="$CXXFLAGS" cf_result="none" # etip.h includes ncurses.h which includes ncurses_dll.h # But ncurses_dll.h is generated - fix here. test -d include || mkdir include test -f include/ncurses_dll.h || sed -e 's/@NCURSES_WRAP_PREFIX@/'$NCURSES_WRAP_PREFIX'/g' ${srcdir}/include/ncurses_dll.h.in >include/ncurses_dll.h for cf_math in "" MATH_H do for cf_excp in "" MATH_EXCEPTION do CXXFLAGS="$cf_save_CXXFLAGS -I${srcdir}/c++ -I${srcdir}/menu -Iinclude -I${srcdir}/include" test -n "$cf_math" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_math}" test -n "$cf_excp" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_excp}" cat >conftest.$ac_ext <<_ACEOF #line 20472 "configure" #include "confdefs.h" #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:20486: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:20489: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:20492: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:20495: \$? = $ac_status" >&5 (exit $ac_status); }; }; then test -n "$cf_math" && cat >>confdefs.h <>confdefs.h <&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done done echo "$as_me:20516: result: $cf_result" >&5 echo "${ECHO_T}$cf_result" >&6 CXXFLAGS="$cf_save_CXXFLAGS" if test -n "$CXX"; then echo "$as_me:20521: checking if $CXX accepts parameter initialization" >&5 echo $ECHO_N "checking if $CXX accepts parameter initialization... $ECHO_C" >&6 if test "${cf_cv_cpp_param_init+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_main_return=return if test "$cross_compiling" = yes; then cf_cv_cpp_param_init=unknown else cat >conftest.$ac_ext <<_ACEOF #line 20538 "configure" #include "confdefs.h" class TEST { private: int value; public: TEST(int x = 1); ~TEST(); }; TEST::TEST(int x = 1) // some compilers do not like second initializer { value = x; } int main() { } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:20557: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:20560: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:20562: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:20565: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_cpp_param_init=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_cpp_param_init=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_main_return=return fi echo "$as_me:20584: result: $cf_cv_cpp_param_init" >&5 echo "${ECHO_T}$cf_cv_cpp_param_init" >&6 fi test "$cf_cv_cpp_param_init" = yes && cat >>confdefs.h <<\EOF #define CPP_HAS_PARAM_INIT 1 EOF if test -n "$CXX"; then echo "$as_me:20594: checking if $CXX accepts static_cast" >&5 echo $ECHO_N "checking if $CXX accepts static_cast... $ECHO_C" >&6 if test "${cf_cv_cpp_static_cast+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_main_return=return cat >conftest.$ac_ext <<_ACEOF #line 20608 "configure" #include "confdefs.h" class NCursesPanel { public: NCursesPanel(int nlines, int ncols, int begin_y = 0, int begin_x = 0) { } NCursesPanel(); ~NCursesPanel(); }; template class NCursesUserPanel : public NCursesPanel { public: NCursesUserPanel (int nlines, int ncols, int begin_y = 0, int begin_x = 0, const T* p_UserData = static_cast(0)) : NCursesPanel (nlines, ncols, begin_y, begin_x) { }; NCursesUserPanel(const T* p_UserData = static_cast(0)) : NCursesPanel() { }; virtual ~NCursesUserPanel() {}; }; int main () { const char* p_UserData = static_cast(0) ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:20652: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:20655: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:20658: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:20661: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_cpp_static_cast=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_cpp_static_cast=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_main_return=return fi echo "$as_me:20679: result: $cf_cv_cpp_static_cast" >&5 echo "${ECHO_T}$cf_cv_cpp_static_cast" >&6 fi test "$cf_cv_cpp_static_cast" = yes && cat >>confdefs.h <<\EOF #define CPP_HAS_STATIC_CAST 1 EOF CXX_AR='$(AR)' CXX_ARFLAGS='$(ARFLAGS)' case $cf_cv_system_name in (irix*) if test "$GXX" != yes ; then CXX_AR='$(CXX)' CXX_ARFLAGS='-ar -o' fi ;; (sco3.2v5*) CXXLDFLAGS="-u main" ;; (solaris2*) if test "$GXX" != yes ; then CXX_AR='$(CXX)' CXX_ARFLAGS='-xar -o' fi ;; esac else cf_cxx_library=no cf_cv_builtin_bool=1 # Just because we are not configuring against C++ right now does not # mean that a user will not want to use C++. Some distributors disable # the C++ portion of this configuration as a shortcut (or just to avoid # compiling the demo in the c++ directory). So we need a reasonable # default for the 'bool' type. # # Caveat: since the storage of the bool type is not standardized, it # may change. if test "$NCURSES_BOOL" != auto ; then cf_cv_type_of_bool=$NCURSES_BOOL cf_cv_header_stdbool_h=0 else if test "$cf_cv_header_stdbool_h" = 1 ; then echo "$as_me:20728: checking for size of bool" >&5 echo $ECHO_N "checking for size of bool... $ECHO_C" >&6 if test "${cf_cv_type_of_bool+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f cf_test.out if test "$cross_compiling" = yes; then cf_cv_type_of_bool=unknown else cat >conftest.$ac_ext <<_ACEOF #line 20739 "configure" #include "confdefs.h" #include #include #if defined(__cplusplus) #ifdef HAVE_GXX_BUILTIN_H #include #elif HAVE_GPP_BUILTIN_H #include #elif HAVE_BUILTIN_H #include #endif #else #if $cf_cv_header_stdbool_h #include #endif #endif int main() { FILE *fp = fopen("cf_test.out", "w"); if (fp != 0) { bool x = true; if ((bool)(-x) >= 0) fputs("unsigned ", fp); if (sizeof(x) == sizeof(int)) fputs("int", fp); else if (sizeof(x) == sizeof(char)) fputs("char", fp); else if (sizeof(x) == sizeof(short))fputs("short",fp); else if (sizeof(x) == sizeof(long)) fputs("long", fp); fclose(fp); } ${cf_cv_main_return:-return}(0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:20781: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:20784: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:20786: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:20789: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cf_cv_type_of_bool=`cat cf_test.out` if test -z "$cf_cv_type_of_bool"; then cf_cv_type_of_bool=unknown fi else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_cv_type_of_bool=unknown fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f cf_test.out echo "$as_me:20807: result: $cf_cv_type_of_bool" >&5 echo "${ECHO_T}$cf_cv_type_of_bool" >&6 if test "$cf_cv_type_of_bool" = unknown ; then case .$NCURSES_BOOL in (.auto|.) NCURSES_BOOL=unsigned;; esac { echo "$as_me:20813: WARNING: Assuming $NCURSES_BOOL for type of bool" >&5 echo "$as_me: WARNING: Assuming $NCURSES_BOOL for type of bool" >&2;} cf_cv_type_of_bool=$NCURSES_BOOL fi else echo "$as_me:20819: checking for fallback type of bool" >&5 echo $ECHO_N "checking for fallback type of bool... $ECHO_C" >&6 case "$host_cpu" in (i?86) cf_cv_type_of_bool=char ;; (*) cf_cv_type_of_bool=int ;; esac echo "$as_me:20825: result: $cf_cv_type_of_bool" >&5 echo "${ECHO_T}$cf_cv_type_of_bool" >&6 fi fi fi # If the C compiler did not declare bool, and we did not determine that the C++ # compiler does not declare bool, turn on an ifdef in curses.h that makes the # ncurses library use the same type as C++ bool. Note that this allows one to # specify the type of bool in a configure-script option and postpone # integration with the C++ compiler provided that the types are compatible. USE_CXX_BOOL=1 if test $cf_cv_cc_bool_type = 1 then # oops: C has a bool. Unlikely, but C++ could differ. USE_CXX_BOOL=0 elif test $cf_cv_builtin_bool = 0 then # C++ has no bool USE_CXX_BOOL=0 else # this is the normal case USE_CXX_BOOL='defined(__cplusplus)' fi if test -f "${srcdir}/Ada95/Makefile.in" ; then if test "$cf_with_ada" != "no" ; then if test "$with_libtool" != "no"; then { echo "$as_me:20854: WARNING: libtool does not support Ada - disabling feature" >&5 echo "$as_me: WARNING: libtool does not support Ada - disabling feature" >&2;} cf_with_ada=no fi fi if test "$cf_with_ada" != "no" ; then cf_ada_make=gnatmake # Extract the first word of "$cf_ada_make", so it can be a program name with args. set dummy $cf_ada_make; ac_word=$2 echo "$as_me:20865: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_gnat_exists+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$gnat_exists"; then ac_cv_prog_gnat_exists="$gnat_exists" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_gnat_exists="yes" echo "$as_me:20880: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_gnat_exists" && ac_cv_prog_gnat_exists="no" fi fi gnat_exists=$ac_cv_prog_gnat_exists if test -n "$gnat_exists"; then echo "$as_me:20889: result: $gnat_exists" >&5 echo "${ECHO_T}$gnat_exists" >&6 else echo "$as_me:20892: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$ac_cv_prog_gnat_exists" = no; then cf_ada_make= cf_cv_prog_gnat_correct=no else echo "$as_me:20901: checking for gnat version" >&5 echo $ECHO_N "checking for gnat version... $ECHO_C" >&6 cf_gnat_version=`${cf_ada_make:-gnatmake} -v 2>&1 | \ grep '[0-9].[0-9][0-9]*' |\ sed -e '2,$d' -e 's/[^0-9 \.]//g' -e 's/^[ ]*//' -e 's/ .*//'` echo "$as_me:20906: result: $cf_gnat_version" >&5 echo "${ECHO_T}$cf_gnat_version" >&6 case $cf_gnat_version in (3.1[1-9]*|3.[2-9]*|[4-9].*|20[0-9][0-9]) cf_cv_prog_gnat_correct=yes ;; (*) { echo "$as_me:20914: WARNING: Unsupported GNAT version $cf_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&5 echo "$as_me: WARNING: Unsupported GNAT version $cf_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&2;} cf_cv_prog_gnat_correct=no ;; esac # Extract the first word of "m4", so it can be a program name with args. set dummy m4; ac_word=$2 echo "$as_me:20922: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_M4_exists+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$M4_exists"; then ac_cv_prog_M4_exists="$M4_exists" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_M4_exists="yes" echo "$as_me:20937: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_M4_exists" && ac_cv_prog_M4_exists="no" fi fi M4_exists=$ac_cv_prog_M4_exists if test -n "$M4_exists"; then echo "$as_me:20946: result: $M4_exists" >&5 echo "${ECHO_T}$M4_exists" >&6 else echo "$as_me:20949: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$ac_cv_prog_M4_exists" = no; then cf_cv_prog_gnat_correct=no echo Ada95 binding required program m4 not found. Ada95 binding disabled. fi if test "$cf_cv_prog_gnat_correct" = yes; then echo "$as_me:20958: checking if GNAT works" >&5 echo $ECHO_N "checking if GNAT works... $ECHO_C" >&6 rm -rf conftest* *~conftest* cat >>conftest.ads <>conftest.adb <&5 2>&1 ) ; then if ( ./conftest 1>&5 2>&1 ) ; then cf_cv_prog_gnat_correct=yes else cf_cv_prog_gnat_correct=no fi else cf_cv_prog_gnat_correct=no fi rm -rf conftest* *~conftest* echo "$as_me:20986: result: $cf_cv_prog_gnat_correct" >&5 echo "${ECHO_T}$cf_cv_prog_gnat_correct" >&6 fi fi if test "x$cf_cv_prog_gnat_correct" = xyes; then ADAFLAGS="$ADAFLAGS -gnatpn" echo "$as_me:20995: checking optimization options for ADAFLAGS" >&5 echo $ECHO_N "checking optimization options for ADAFLAGS... $ECHO_C" >&6 case "$CFLAGS" in (*-g*) ADAFLAGS="$ADAFLAGS -g" ;; esac case "$CFLAGS" in (*-O*) cf_O_flag=`echo "$CFLAGS" |sed -e 's/^.*-O/-O/' -e 's/[ ].*//'` ADAFLAGS="$ADAFLAGS $cf_O_flag" ;; esac echo "$as_me:21012: result: $ADAFLAGS" >&5 echo "${ECHO_T}$ADAFLAGS" >&6 echo "$as_me:21015: checking if GNATPREP supports -T option" >&5 echo $ECHO_N "checking if GNATPREP supports -T option... $ECHO_C" >&6 if test "${cf_cv_gnatprep_opt_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_gnatprep_opt_t=no gnatprep -T 2>/dev/null >/dev/null && cf_cv_gnatprep_opt_t=yes fi echo "$as_me:21025: result: $cf_cv_gnatprep_opt_t" >&5 echo "${ECHO_T}$cf_cv_gnatprep_opt_t" >&6 test "$cf_cv_gnatprep_opt_t" = yes && GNATPREP_OPTS="-T $GNATPREP_OPTS" echo "$as_me:21029: checking if GNAT supports generics" >&5 echo $ECHO_N "checking if GNAT supports generics... $ECHO_C" >&6 case $cf_gnat_version in (3.[1-9]*|[4-9].*) cf_gnat_generics=yes ;; (*) cf_gnat_generics=no ;; esac echo "$as_me:21039: result: $cf_gnat_generics" >&5 echo "${ECHO_T}$cf_gnat_generics" >&6 if test "$cf_gnat_generics" = yes then cf_compile_generics=generics cf_generic_objects="\${GENOBJS}" else cf_compile_generics= cf_generic_objects= fi echo "$as_me:21051: checking if GNAT supports SIGINT" >&5 echo $ECHO_N "checking if GNAT supports SIGINT... $ECHO_C" >&6 if test "${cf_cv_gnat_sigint+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -rf conftest* *~conftest* cat >>conftest.ads <>conftest.adb <&5 2>&1 ) ; then cf_cv_gnat_sigint=yes else cf_cv_gnat_sigint=no fi rm -rf conftest* *~conftest* fi echo "$as_me:21099: result: $cf_cv_gnat_sigint" >&5 echo "${ECHO_T}$cf_cv_gnat_sigint" >&6 if test $cf_cv_gnat_sigint = yes ; then USE_GNAT_SIGINT="" else USE_GNAT_SIGINT="#" fi cf_gnat_libraries=no cf_gnat_projects=no if test "$enable_gnat_projects" != no ; then echo "$as_me:21112: checking if GNAT supports project files" >&5 echo $ECHO_N "checking if GNAT supports project files... $ECHO_C" >&6 case $cf_gnat_version in (3.[0-9]*) ;; (*) case $cf_cv_system_name in (cygwin*|msys*) ;; (*) mkdir conftest.src conftest.bin conftest.lib cd conftest.src rm -rf conftest* *~conftest* cat >>library.gpr <>confpackage.ads <>confpackage.adb <&5 2>&1 ) ; then cf_gnat_projects=yes fi cd .. if test -f conftest.lib/confpackage.ali then cf_gnat_libraries=yes fi rm -rf conftest* *~conftest* ;; esac ;; esac echo "$as_me:21172: result: $cf_gnat_projects" >&5 echo "${ECHO_T}$cf_gnat_projects" >&6 fi # enable_gnat_projects if test $cf_gnat_projects = yes then echo "$as_me:21178: checking if GNAT supports libraries" >&5 echo $ECHO_N "checking if GNAT supports libraries... $ECHO_C" >&6 echo "$as_me:21180: result: $cf_gnat_libraries" >&5 echo "${ECHO_T}$cf_gnat_libraries" >&6 fi if test "$cf_gnat_projects" = yes then USE_OLD_MAKERULES="#" USE_GNAT_PROJECTS="" else USE_OLD_MAKERULES="" USE_GNAT_PROJECTS="#" fi if test "$cf_gnat_libraries" = yes then USE_GNAT_LIBRARIES="" else USE_GNAT_LIBRARIES="#" fi echo "$as_me:21200: checking for ada-compiler" >&5 echo $ECHO_N "checking for ada-compiler... $ECHO_C" >&6 # Check whether --with-ada-compiler or --without-ada-compiler was given. if test "${with_ada_compiler+set}" = set; then withval="$with_ada_compiler" cf_ada_compiler=$withval else cf_ada_compiler=gnatmake fi; echo "$as_me:21211: result: $cf_ada_compiler" >&5 echo "${ECHO_T}$cf_ada_compiler" >&6 cf_ada_package=terminal_interface echo "$as_me:21216: checking for ada-include" >&5 echo $ECHO_N "checking for ada-include... $ECHO_C" >&6 # Check whether --with-ada-include or --without-ada-include was given. if test "${with_ada_include+set}" = set; then withval="$with_ada_include" else withval="${ADA_INCLUDE:-$prefix/share/ada/adainclude}" fi; if test -n "$prefix/share/ada/adainclude" ; then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$withval" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval withval="$withval" case ".$withval" in (.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:21252: error: expected a pathname, not \"$withval\"" >&5 echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} { (exit 1); exit 1; }; } ;; esac fi eval ADA_INCLUDE="$withval" echo "$as_me:21261: result: $ADA_INCLUDE" >&5 echo "${ECHO_T}$ADA_INCLUDE" >&6 echo "$as_me:21264: checking for ada-objects" >&5 echo $ECHO_N "checking for ada-objects... $ECHO_C" >&6 # Check whether --with-ada-objects or --without-ada-objects was given. if test "${with_ada_objects+set}" = set; then withval="$with_ada_objects" else withval="${ADA_OBJECTS:-$prefix/lib/ada/adalib}" fi; if test -n "$prefix/lib/ada/adalib" ; then if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$withval" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\${*prefix}*|.\${*dir}*) eval withval="$withval" case ".$withval" in (.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:21300: error: expected a pathname, not \"$withval\"" >&5 echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;} { (exit 1); exit 1; }; } ;; esac fi eval ADA_OBJECTS="$withval" echo "$as_me:21309: result: $ADA_OBJECTS" >&5 echo "${ECHO_T}$ADA_OBJECTS" >&6 echo "$as_me:21312: checking if an Ada95 shared-library should be built" >&5 echo $ECHO_N "checking if an Ada95 shared-library should be built... $ECHO_C" >&6 # Check whether --with-ada-sharedlib or --without-ada-sharedlib was given. if test "${with_ada_sharedlib+set}" = set; then withval="$with_ada_sharedlib" with_ada_sharedlib=$withval else with_ada_sharedlib=no fi; echo "$as_me:21322: result: $with_ada_sharedlib" >&5 echo "${ECHO_T}$with_ada_sharedlib" >&6 ADA_SHAREDLIB='lib$(LIB_NAME).so.1' MAKE_ADA_SHAREDLIB="#" if test "x$with_ada_sharedlib" != xno then MAKE_ADA_SHAREDLIB= if test "x$with_ada_sharedlib" != xyes then ADA_SHAREDLIB="$with_ada_sharedlib" fi fi fi fi else cf_with_ada=no fi # do this "late" to avoid conflict with header-checks if test "x$with_widec" = xyes ; then echo "$as_me:21345: checking for wchar_t" >&5 echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6 if test "${ac_cv_type_wchar_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line 21351 "configure" #include "confdefs.h" $ac_includes_default int main () { if ((wchar_t *) 0) return 0; if (sizeof (wchar_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:21366: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:21369: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:21372: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:21375: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_wchar_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_wchar_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:21385: result: $ac_cv_type_wchar_t" >&5 echo "${ECHO_T}$ac_cv_type_wchar_t" >&6 echo "$as_me:21388: checking size of wchar_t" >&5 echo $ECHO_N "checking size of wchar_t... $ECHO_C" >&6 if test "${ac_cv_sizeof_wchar_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_wchar_t" = yes; then if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF #line 21397 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (wchar_t)) >= 0)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:21409: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:21412: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:21415: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:21418: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF #line 21423 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (wchar_t)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:21435: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:21438: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:21441: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:21444: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF #line 21460 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (wchar_t)) >= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:21472: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:21475: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:21478: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:21481: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF #line 21497 "configure" #include "confdefs.h" $ac_includes_default int main () { int _array_ [1 - 2 * !((sizeof (wchar_t)) <= $ac_mid)] ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:21509: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:21512: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:21515: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:21518: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done ac_cv_sizeof_wchar_t=$ac_lo else if test "$cross_compiling" = yes; then { { echo "$as_me:21531: error: cannot run test program while cross compiling" >&5 echo "$as_me: error: cannot run test program while cross compiling" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF #line 21536 "configure" #include "confdefs.h" $ac_includes_default int main () { FILE *f = fopen ("conftest.val", "w"); if (!f) $ac_main_return (1); fprintf (f, "%d", (sizeof (wchar_t))); fclose (f); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:21552: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:21555: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:21557: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:21560: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_wchar_t=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_wchar_t=0 fi fi echo "$as_me:21576: result: $ac_cv_sizeof_wchar_t" >&5 echo "${ECHO_T}$ac_cv_sizeof_wchar_t" >&6 cat >>confdefs.h <&5 echo $ECHO_N "checking for library subsets... $ECHO_C" >&6 LIB_SUBSETS= if test "x$cf_with_progs" = xyes || test "$with_ticlib" != no || test "$with_termcap" != no; then LIB_SUBSETS="${LIB_SUBSETS}ticlib" if test "$with_ticlib" != no ; then LIB_SUBSETS="${LIB_SUBSETS} " else LIB_SUBSETS="${LIB_SUBSETS}+" fi fi LIB_SUBSETS="${LIB_SUBSETS}termlib" test "x$with_ext_funcs" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+ext_tinfo" if test "$with_termlib" != no ; then LIB_SUBSETS="${LIB_SUBSETS} " else LIB_SUBSETS="${LIB_SUBSETS}+" fi LIB_SUBSETS="${LIB_SUBSETS}base" # Most term-driver calls are to tinfo, but some like init_pair are to the # base library (so it resides in base). if test "$with_term_driver" != no ; then LIB_SUBSETS="${LIB_SUBSETS}+port_drivers" case $cf_cv_system_name in (*mingw32*|*mingw64*) LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32con" CPPFLAGS="$CPPFLAGS -DUSE_WIN32CON_DRIVER" ;; (*) LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo" ;; esac fi test "x$with_widec" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+widechar" test "x$with_ext_funcs" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+ext_funcs" echo "$as_me:21636: result: $LIB_SUBSETS" >&5 echo "${ECHO_T}$LIB_SUBSETS" >&6 ### Construct the list of include-directories to be generated if test "$srcdir" != "."; then CPPFLAGS="-I\${srcdir}/../include $CPPFLAGS" fi CPPFLAGS="-I../include $CPPFLAGS" if test "$srcdir" != "."; then CPPFLAGS="-I\${srcdir} $CPPFLAGS" fi CPPFLAGS="-I. $CPPFLAGS" ACPPFLAGS="-I. -I../include -I../../include $ACPPFLAGS" if test "$srcdir" != "."; then ACPPFLAGS="-I\${srcdir}/../../include $ACPPFLAGS" fi if test "$GCC" != yes; then ACPPFLAGS="$ACPPFLAGS -I\${includedir}" elif test "$includedir" != "/usr/include"; then if test "$includedir" = '${prefix}/include' ; then if test x$prefix != x/usr ; then ACPPFLAGS="$ACPPFLAGS -I\${includedir}" fi else ACPPFLAGS="$ACPPFLAGS -I\${includedir}" fi fi ### Build up pieces for makefile rules echo "$as_me:21667: checking default library suffix" >&5 echo $ECHO_N "checking default library suffix... $ECHO_C" >&6 case $DFT_LWR_MODEL in (libtool) DFT_ARG_SUFFIX='' ;; (normal) DFT_ARG_SUFFIX='' ;; (debug) DFT_ARG_SUFFIX='_g' ;; (profile) DFT_ARG_SUFFIX='_p' ;; (shared) DFT_ARG_SUFFIX='' ;; esac test -n "$LIB_SUFFIX" && DFT_ARG_SUFFIX="${LIB_SUFFIX}${DFT_ARG_SUFFIX}" echo "$as_me:21678: result: $DFT_ARG_SUFFIX" >&5 echo "${ECHO_T}$DFT_ARG_SUFFIX" >&6 echo "$as_me:21681: checking default library-dependency suffix" >&5 echo $ECHO_N "checking default library-dependency suffix... $ECHO_C" >&6 case X$DFT_LWR_MODEL in (Xlibtool) DFT_LIB_SUFFIX='.la' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (Xdebug) DFT_LIB_SUFFIX='_g.a' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (Xprofile) DFT_LIB_SUFFIX='_p.a' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (Xshared) case $cf_cv_system_name in (aix[5-7]*) DFT_LIB_SUFFIX='.so' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (cygwin*|msys*|mingw*) DFT_LIB_SUFFIX='.dll' DFT_DEP_SUFFIX='.dll.a' ;; (darwin*) DFT_LIB_SUFFIX='.dylib' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (hpux*) case $target in (ia64*) DFT_LIB_SUFFIX='.so' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; (*) DFT_LIB_SUFFIX='.sl' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; esac ;; (*) DFT_LIB_SUFFIX='.so' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; esac ;; (*) DFT_LIB_SUFFIX='.a' DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX ;; esac if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}" then DFT_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_LIB_SUFFIX}" DFT_DEP_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_DEP_SUFFIX}" fi echo "$as_me:21739: result: $DFT_DEP_SUFFIX" >&5 echo "${ECHO_T}$DFT_DEP_SUFFIX" >&6 echo "$as_me:21742: checking default object directory" >&5 echo $ECHO_N "checking default object directory... $ECHO_C" >&6 case $DFT_LWR_MODEL in (libtool) DFT_OBJ_SUBDIR='obj_lo' ;; (normal) DFT_OBJ_SUBDIR='objects' ;; (debug) DFT_OBJ_SUBDIR='obj_g' ;; (profile) DFT_OBJ_SUBDIR='obj_p' ;; (shared) case $cf_cv_system_name in (cygwin|msys) DFT_OBJ_SUBDIR='objects' ;; (*) DFT_OBJ_SUBDIR='obj_s' ;; esac esac echo "$as_me:21758: result: $DFT_OBJ_SUBDIR" >&5 echo "${ECHO_T}$DFT_OBJ_SUBDIR" >&6 if test "x$cf_with_cxx" = xyes ; then echo "$as_me:21762: checking c++ library-dependency suffix" >&5 echo $ECHO_N "checking c++ library-dependency suffix... $ECHO_C" >&6 if test "$with_libtool" != "no"; then # libtool thinks it can make c++ shared libraries (perhaps only g++) CXX_LIB_SUFFIX=$DFT_DEP_SUFFIX elif test "$with_shared_cxx" != "no"; then # also for g++ users... CXX_LIB_SUFFIX=$DFT_DEP_SUFFIX else # we normally make a static library because C/C++ library rules differ case Xnormal in (Xlibtool) CXX_LIB_SUFFIX='.la' CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX ;; (Xdebug) CXX_LIB_SUFFIX='_g.a' CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX ;; (Xprofile) CXX_LIB_SUFFIX='_p.a' CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX ;; (Xshared) case $cf_cv_system_name in (aix[5-7]*) CXX_LIB_SUFFIX='.so' CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX ;; (cygwin*|msys*|mingw*) CXX_LIB_SUFFIX='.dll' CXX_DEP_SUFFIX='.dll.a' ;; (darwin*) CXX_LIB_SUFFIX='.dylib' CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX ;; (hpux*) case $target in (ia64*) CXX_LIB_SUFFIX='.so' CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX ;; (*) CXX_LIB_SUFFIX='.sl' CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX ;; esac ;; (*) CXX_LIB_SUFFIX='.so' CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX ;; esac ;; (*) CXX_LIB_SUFFIX='.a' CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX ;; esac if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}" then CXX_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${CXX_LIB_SUFFIX}" CXX_DEP_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${CXX_DEP_SUFFIX}" fi fi echo "$as_me:21830: result: $CXX_LIB_SUFFIX" >&5 echo "${ECHO_T}$CXX_LIB_SUFFIX" >&6 fi # do not want -ldl in build except as needed for -lncurses dependency if test "x$with_dlsym" = xyes ; then if test $DFT_LWR_MODEL = shared || \ test $DFT_LWR_MODEL = libtool ; then # remove dl library from $LIBS LIBS=`echo "$LIBS" | sed -e 's/-ldl[ ]//g' -e 's/-ldl$//'` fi fi ### Set up low-level terminfo dependencies for makefiles. # TICS_LIST and TINFO_LIST are needed to build libtic.so and libterm.so, but # do not need libdl TICS_LIST= if test "x$with_dlsym" = xyes ; then # remove dl library from $SHLIB_LIST TINFO_LIST=`echo "$SHLIB_LIST" | sed -e 's/-ldl[ ]//g' -e 's/-ldl$//'` fi USE_ARG_SUFFIX="${DFT_ARG_SUFFIX}${EXTRA_SUFFIX}" USE_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}" USE_CFG_SUFFIX=${DFT_ARG_SUFFIX}${cf_cv_abi_version} if test -n "$EXTRA_SUFFIX" && test "x$EXTRA_SUFFIX" != "x${cf_cv_abi_version}" then USE_CFG_SUFFIX="${USE_CFG_SUFFIX}${EXTRA_SUFFIX}" fi if test "$with_ticlib" != no ; then if test "x$with_ticlib" != xyes ; then TICS_NAME=$with_ticlib TICS_SUFFIX="`echo ${DFT_LIB_SUFFIX}|sed -e "s/^${USE_LIB_SUFFIX}//"`" TICS_ARG_SUFFIX="${with_ticlib}`echo ${USE_ARG_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`" TICS_DEP_SUFFIX="${with_ticlib}`echo ${DFT_DEP_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`" TICS_LIB_SUFFIX="${with_ticlib}" else TICS_SUFFIX=${DFT_LIB_SUFFIX} TICS_ARG_SUFFIX="${TICS_NAME}${USE_ARG_SUFFIX}" TICS_DEP_SUFFIX="${TICS_NAME}${DFT_DEP_SUFFIX}" TICS_LIB_SUFFIX="${TICS_NAME}${USE_LIB_SUFFIX}" fi TICS_LDFLAGS="-L${LIB_DIR}" TICS_LIBS="-l${TICS_ARG_SUFFIX}" else TICS_SUFFIX=${DFT_LIB_SUFFIX} TICS_LDFLAGS="-L${LIB_DIR}" TICS_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX}" fi if test "$with_termlib" != no ; then if test "x$with_termlib" != xyes ; then TINFO_NAME=$with_termlib TINFO_SUFFIX="`echo ${DFT_LIB_SUFFIX}|sed -e "s/^${USE_LIB_SUFFIX}//"`" TINFO_ARG_SUFFIX="${with_termlib}`echo ${USE_ARG_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`" TINFO_DEP_SUFFIX="${with_termlib}`echo ${DFT_DEP_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`" TINFO_LIB_SUFFIX="${with_termlib}" else TINFO_SUFFIX=${DFT_LIB_SUFFIX} TINFO_ARG_SUFFIX="${TINFO_NAME}${USE_ARG_SUFFIX}" TINFO_DEP_SUFFIX="${TINFO_NAME}${DFT_DEP_SUFFIX}" TINFO_LIB_SUFFIX="${TINFO_NAME}${USE_LIB_SUFFIX}" fi TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${TINFO_DEP_SUFFIX}" TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${TINFO_DEP_SUFFIX}" if test "$DFT_LWR_MODEL" = "libtool"; then TEST_ARGS="${TEST_DEPS}" TEST_ARG2="${TEST_DEP2}" TINFO_LDFLAGS="-L${LIB_DIR}" TINFO_LIBS="$TEST_ARGS" TICS_LIST="$SHLIB_LIST $TEST_ARGS" SHLIB_LIST="${SHLIB_LIST} $TEST_ARGS" else TEST_ARGS="-l${TINFO_ARG_SUFFIX}" TEST_ARG2="-l${TINFO_ARG_SUFFIX}" if test "x$with_term_driver" != xno ; then TICS_LIST="$SHLIB_LIST -l${LIB_NAME}${USE_ARG_SUFFIX}" TICS_LIBS="$TICS_LIBS -l${LIB_NAME}${USE_ARG_SUFFIX}" TINFO_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARGS" else TICS_LIST="$SHLIB_LIST -l${TINFO_LIB_SUFFIX}" TINFO_LIBS="$TEST_ARGS" fi TINFO_LDFLAGS="-L${LIB_DIR}" SHLIB_LIST="$SHLIB_LIST -l${TINFO_LIB_SUFFIX}" fi else # the next lines are needed for linking libtic over libncurses TINFO_NAME=${LIB_NAME} TINFO_SUFFIX=${DFT_LIB_SUFFIX} TINFO_ARG_SUFFIX=${LIB_NAME}${USE_ARG_SUFFIX} if test "x$with_tic_depends" = xyes ; then TICS_LIST="$SHLIB_LIST -l${LIB_NAME}${USE_ARG_SUFFIX}" else TICS_LIST="$SHLIB_LIST" fi TINFO_LDFLAGS="-L${LIB_DIR}" TINFO_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX}" fi if test "$DFT_LWR_MODEL" = shared ; then case $cf_cv_system_name in (cygwin*|msys*) # "lib" files have ".dll.a" suffix, "cyg"or "msys-" files have ".dll" TINFO_SUFFIX=.dll ;; esac fi if test "x$with_dlsym" = xyes ; then # remove dl library from $TICS_LIST TICS_LIST=`echo "$TICS_LIST" | sed -e 's/-ldl[ ]//g' -e 's/-ldl$//'` fi if test "$DFT_LWR_MODEL" = "libtool"; then OBJEXT=lo fi # needed for Ada95 TINFO_LDFLAGS2=`echo "$TINFO_LDFLAGS" | sed -e 's,-L\.\./,-L../../,'` case $DFT_LWR_MODEL in (normal|debug|profile) if test "$GCC" = yes ; then case $cf_cv_system_name in (OS/2*|os2*|aix[4]*|solaris2.1[0-9]|darwin*) LDFLAGS_STATIC= LDFLAGS_SHARED= ;; (*) # normally, except when broken LDFLAGS_STATIC=-static LDFLAGS_SHARED=-dynamic ;; esac else case $cf_cv_system_name in (aix[4-7]*) # from ld manpage LDFLAGS_STATIC=-bstatic LDFLAGS_SHARED=-bdynamic ;; (hpux*) # from ld manpage for hpux10.20, hpux11.11 # We could also use just "archive" and "shared". LDFLAGS_STATIC=-Wl,-a,archive_shared LDFLAGS_SHARED=-Wl,-a,shared_archive ;; (irix*) # from ld manpage IRIX64 LDFLAGS_STATIC=-Bstatic LDFLAGS_SHARED=-Bdynamic ;; (osf[45]*) # from ld manpage osf4.0d, osf5.1 # alternative "-oldstyle_liblookup" (not in cc manpage) LDFLAGS_STATIC=-noso LDFLAGS_SHARED=-so_archive ;; (solaris2*) LDFLAGS_STATIC=-Bstatic LDFLAGS_SHARED=-Bdynamic ;; esac fi if test -n "$LDFLAGS_STATIC" && test -n "$LDFLAGS_SHARED" then echo "$as_me:22006: checking if linker supports switching between static/dynamic" >&5 echo $ECHO_N "checking if linker supports switching between static/dynamic... $ECHO_C" >&6 rm -f libconftest.a cat >conftest.$ac_ext < int cf_ldflags_static(FILE *fp) { return fflush(fp); } EOF if { (eval echo "$as_me:22015: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:22018: \$? = $ac_status" >&5 (exit $ac_status); } ; then ( $AR $ARFLAGS libconftest.a conftest.o ) 2>&5 1>/dev/null ( eval $RANLIB libconftest.a ) 2>&5 >/dev/null fi rm -f conftest.* cf_save_LIBS="$LIBS" LIBS="$LDFLAGS_STATIC -L`pwd` -lconftest $LDFLAGS_DYNAMIC $LIBS" cat >conftest.$ac_ext <<_ACEOF #line 22029 "configure" #include "confdefs.h" #line 22032 "configure" #include int cf_ldflags_static(FILE *fp); int main () { return cf_ldflags_static(stdin); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:22047: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:22050: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:22053: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:22056: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # some linkers simply ignore the -dynamic case x`file conftest$ac_exeext 2>/dev/null` in (*static*) cf_ldflags_static=no ;; (*) cf_ldflags_static=yes ;; esac else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 cf_ldflags_static=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext rm -f libconftest.* LIBS="$cf_save_LIBS" echo "$as_me:22079: result: $cf_ldflags_static" >&5 echo "${ECHO_T}$cf_ldflags_static" >&6 if test $cf_ldflags_static != yes then LDFLAGS_STATIC= LDFLAGS_SHARED= fi else LDFLAGS_STATIC= LDFLAGS_SHARED= fi ;; esac echo "$as_me:22095: checking where we will install curses.h" >&5 echo $ECHO_N "checking where we will install curses.h... $ECHO_C" >&6 includesubdir= if test "$with_overwrite" = no && \ ( test "x$includedir" = 'x${prefix}/include' || \ test "x$includedir" = "x${prefix}/include" ) then includesubdir="/ncurses${USE_LIB_SUFFIX}" fi echo "$as_me:22105: result: ${includedir}${includesubdir}" >&5 echo "${ECHO_T}${includedir}${includesubdir}" >&6 ### Resolve a conflict between normal and wide-curses by forcing applications ### that will need libutf8 to add it to their configure script. if test "$with_overwrite" != no ; then if test "$NCURSES_LIBUTF8" = 1 ; then NCURSES_LIBUTF8='defined(HAVE_LIBUTF8_H)' { echo "$as_me:22113: WARNING: Wide-character applications must define HAVE_LIBUTF8_H to include curses.h" >&5 echo "$as_me: WARNING: Wide-character applications must define HAVE_LIBUTF8_H to include curses.h" >&2;} fi fi WITH_OVERWRITE=$with_overwrite # used to separate tack out of the tree NCURSES_TREE= ### predefined stuff for the test programs cat >>confdefs.h <<\EOF #define HAVE_SLK_COLOR 1 EOF ### Construct the list of subdirectories for which we'll customize makefiles ### with the appropriate compile-rules. echo "$as_me:22131: checking for src modules" >&5 echo $ECHO_N "checking for src modules... $ECHO_C" >&6 # dependencies and linker-arguments for test-programs TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEPS" TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEP2" if test "$DFT_LWR_MODEL" = "libtool"; then TEST_ARGS="${TEST_DEPS}" TEST_ARG2="${TEST_DEP2}" else TEST_ARGS="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARGS" TEST_ARG2="-l${LIB_NAME}${USE_ARG_SUFFIX} $TEST_ARG2" fi PC_MODULES_TO_MAKE="ncurses${USE_ARG_SUFFIX}" cf_cv_src_modules= for cf_dir in $modules_to_build do if test -f $srcdir/$cf_dir/modules; then # We may/may not have tack in the distribution, though the # makefile is. if test $cf_dir = tack ; then if test ! -f $srcdir/${cf_dir}/${cf_dir}.h; then continue fi fi if test -z "$cf_cv_src_modules"; then cf_cv_src_modules=$cf_dir else cf_cv_src_modules="$cf_cv_src_modules $cf_dir" fi # Make the ncurses_cfg.h file record the library interface files as # well. These are header files that are the same name as their # directory. Ncurses is the only library that does not follow # that pattern. if test $cf_dir = tack ; then continue elif test -f $srcdir/${cf_dir}/${cf_dir}.h; then cf_have_include=`echo "$cf_dir" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` cat >>confdefs.h <>confdefs.h <&5 echo "${ECHO_T}$cf_cv_src_modules" >&6 TEST_ARGS="-L${LIB_DIR} $TEST_ARGS" TEST_ARG2="-L${LIB_2ND} $TEST_ARG2" SRC_SUBDIRS= if test "x$cf_with_manpages" != xno ; then SRC_SUBDIRS="$SRC_SUBDIRS man" fi SRC_SUBDIRS="$SRC_SUBDIRS include" for cf_dir in $cf_cv_src_modules do SRC_SUBDIRS="$SRC_SUBDIRS $cf_dir" done if test "x$cf_with_tests" != "xno" ; then SRC_SUBDIRS="$SRC_SUBDIRS test" fi # always make this, to install the ncurses-config script SRC_SUBDIRS="$SRC_SUBDIRS misc" if test "$cf_with_cxx_binding" != no; then PC_MODULES_TO_MAKE="${PC_MODULES_TO_MAKE} ncurses++${USE_ARG_SUFFIX}" SRC_SUBDIRS="$SRC_SUBDIRS c++" fi test "x$with_termlib" != xno && PC_MODULES_TO_MAKE="$PC_MODULES_TO_MAKE $TINFO_ARG_SUFFIX" test "x$with_ticlib" != xno && PC_MODULES_TO_MAKE="$PC_MODULES_TO_MAKE $TICS_ARG_SUFFIX" ADA_SUBDIRS= if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = xyes && test -f $srcdir/Ada95/Makefile.in; then SRC_SUBDIRS="$SRC_SUBDIRS Ada95" ADA_SUBDIRS="gen src" if test "x$cf_with_tests" != "xno" ; then ADA_SUBDIRS="$ADA_SUBDIRS samples" fi fi SUB_MAKEFILES= for cf_dir in $SRC_SUBDIRS do SUB_MAKEFILES="$SUB_MAKEFILES $cf_dir/Makefile" done if test -n "$ADA_SUBDIRS"; then for cf_dir in $ADA_SUBDIRS do SUB_MAKEFILES="$SUB_MAKEFILES Ada95/$cf_dir/Makefile" done fi if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = "xyes"; then SUB_MAKEFILES="$SUB_MAKEFILES Ada95/gen/adacurses${USE_CFG_SUFFIX}-config:Ada95/gen/adacurses-config.in" SUB_MAKEFILES="$SUB_MAKEFILES man/adacurses${USE_CFG_SUFFIX}-config.1:man/MKada_config.in" fi DIRS_TO_MAKE="lib" for cf_item in $cf_list_models do case $cf_item in (libtool) cf_subdir='obj_lo' ;; (normal) cf_subdir='objects' ;; (debug) cf_subdir='obj_g' ;; (profile) cf_subdir='obj_p' ;; (shared) case $cf_cv_system_name in (cygwin|msys) cf_subdir='objects' ;; (*) cf_subdir='obj_s' ;; esac esac for cf_item2 in $DIRS_TO_MAKE do test $cf_item2 = $cf_subdir && break done test ".$cf_item2" != ".$cf_subdir" && DIRS_TO_MAKE="$DIRS_TO_MAKE $cf_subdir" done for cf_dir in $DIRS_TO_MAKE do test ! -d $cf_dir && mkdir $cf_dir done # symbols that differ when compiling Ada95 by itself. NCURSES_SHLIB2=$SHELL' $(top_srcdir)/misc/shlib' # values to use as strings cat >>confdefs.h <>confdefs.h <&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_TIC_PATH+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $TIC_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_TIC_PATH="$TIC_PATH" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH:/usr/local/ncurses/bin" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_TIC_PATH="$ac_dir/$ac_word" echo "$as_me:22430: found $ac_dir/$ac_word" >&5 break fi done test -z "$ac_cv_path_TIC_PATH" && ac_cv_path_TIC_PATH="unknown" ;; esac fi TIC_PATH=$ac_cv_path_TIC_PATH if test -n "$TIC_PATH"; then echo "$as_me:22442: result: $TIC_PATH" >&5 echo "${ECHO_T}$TIC_PATH" >&6 else echo "$as_me:22445: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -n "$FALLBACK_LIST" then if test "$TIC_PATH" = unknown then { echo "$as_me:22453: WARNING: no tic program found for fallbacks" >&5 echo "$as_me: WARNING: no tic program found for fallbacks" >&2;} fi fi if test "x$cf_with_tests" != xno ; then MAKE_TESTS= else MAKE_TESTS="#" fi ADAHTML_DIR=../../doc/html/ada # these could be configurable, but are not currently PANEL_NAME=panel MENU_NAME=menu FORM_NAME=form CXX_NAME=ncurses++ # workaround for OS/2 (20151017) case $cf_cv_system_name in (os2*) LIBTOOL_OPTS_CXX="-os2dllname ncurs++" ;; (*) LIBTOOL_OPTS_CXX= ;; esac # workaround for g++ versus Solaris (20131116) case $cf_cv_system_name in (solaris2*) case "x$CPPFLAGS" in (*-D_XOPEN_SOURCE_EXTENDED*) test -n "$verbose" && echo " moving _XOPEN_SOURCE_EXTENDED to work around g++ problem" 1>&6 echo "${as_me:-configure}:22489: testing moving _XOPEN_SOURCE_EXTENDED to work around g++ problem ..." 1>&5 CFLAGS="$CFLAGS -D_XOPEN_SOURCE_EXTENDED" CPPFLAGS=`echo "x$CPPFLAGS" | sed -e 's/^.//' -e 's/-D_XOPEN_SOURCE_EXTENDED//'` ;; esac ;; esac # Help to automatically enable the extended curses features when using either # the *-config or the ".pc" files by adding defines. echo "$as_me:22500: checking for defines to add to ncurses${USE_CFG_SUFFIX}-config script" >&5 echo $ECHO_N "checking for defines to add to ncurses${USE_CFG_SUFFIX}-config script... $ECHO_C" >&6 PKG_CFLAGS= for cf_loop1 in $CPPFLAGS_after_XOPEN do cf_found=no for cf_loop2 in $CPPFLAGS_before_XOPEN do if test "x$cf_loop1" = "x$cf_loop2" then cf_found=yes break fi done test "$cf_found" = no && PKG_CFLAGS="$PKG_CFLAGS $cf_loop1" done echo "$as_me:22516: result: $PKG_CFLAGS" >&5 echo "${ECHO_T}$PKG_CFLAGS" >&6 # AC_CHECK_SIZEOF demands a literal parameter, no variables. So we do this. case "x$NCURSES_OSPEED" in (*short*) cf_compatible=1 ;; (*) cf_compatible=0 ;; esac cat >>confdefs.h <&6 echo "${as_me:-configure}:22573: testing will map symbols to ABI=$cf_cv_abi_version ..." 1>&5 fi if test "x$WILDCARD_SYMS" = xno then cf_filter_syms=yes fi UNALTERED_SYMS=`echo "$RESULTING_SYMS" | sed -e 's/\\$/\\\\$/g'` if test $cf_filter_syms = yes then RESULTING_SYMS=resulting.map fi if test "x$cross_compiling" = xyes ; then ADAGEN_LDFLAGS='$(CROSS_LDFLAGS)' else ADAGEN_LDFLAGS='$(NATIVE_LDFLAGS)' fi ac_config_files="$ac_config_files include/MKterm.h.awk include/curses.head:include/curses.h.in include/ncurses_dll.h include/termcap.h include/unctrl.h $SUB_SCRIPTS $SUB_MAKEFILES Makefile" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overriden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if cmp -s $cache_file confcache; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:22675: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated automatically by configure. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false SHELL=\${CONFIG_SHELL-$SHELL} ac_cs_invocation="\$0 \$@" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } exec 6>&1 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\EOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` shift set dummy "$ac_option" "$ac_optarg" ${1+"$@"} shift ;; -*);; *) # This is not an option, so the user has probably given explicit # arguments. ac_need_defaults=false;; esac case $1 in # Handling of the options. EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:22851: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) shift CONFIG_FILES="$CONFIG_FILES $1" ac_need_defaults=false;; --header | --heade | --head | --hea ) shift CONFIG_HEADERS="$CONFIG_HEADERS $1" ac_need_defaults=false;; # This is an error. -*) { { echo "$as_me:22870: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done exec 5>>config.log cat >&5 << _ACEOF ## ----------------------- ## ## Running config.status. ## ## ----------------------- ## This file was extended by $as_me 2.52.20150926, executed with CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS > $ac_cs_invocation on `(hostname || uname -n) 2>/dev/null | sed 1q` _ACEOF EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "include/MKterm.h.awk" ) CONFIG_FILES="$CONFIG_FILES include/MKterm.h.awk" ;; "include/curses.head" ) CONFIG_FILES="$CONFIG_FILES include/curses.head:include/curses.h.in" ;; "include/ncurses_dll.h" ) CONFIG_FILES="$CONFIG_FILES include/ncurses_dll.h" ;; "include/termcap.h" ) CONFIG_FILES="$CONFIG_FILES include/termcap.h" ;; "include/unctrl.h" ) CONFIG_FILES="$CONFIG_FILES include/unctrl.h" ;; "$SUB_SCRIPTS" ) CONFIG_FILES="$CONFIG_FILES $SUB_SCRIPTS" ;; "$SUB_MAKEFILES" ) CONFIG_FILES="$CONFIG_FILES $SUB_MAKEFILES" ;; "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; "include/ncurses_cfg.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/ncurses_cfg.h:include/ncurses_cfg.hin" ;; *) { { echo "$as_me:22989: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. : ${TMPDIR=/tmp} { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=$TMPDIR/cs$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 { (exit 1); exit 1; } } EOF cat >>$CONFIG_STATUS <\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datarootdir@,$datarootdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@DEFS@,$DEFS,;t t s,@LIBS@,$LIBS,;t t s,@top_builddir@,$top_builddir,;t t s,@EGREP@,$EGREP,;t t s,@NCURSES_MAJOR@,$NCURSES_MAJOR,;t t s,@NCURSES_MINOR@,$NCURSES_MINOR,;t t s,@NCURSES_PATCH@,$NCURSES_PATCH,;t t s,@cf_cv_rel_version@,$cf_cv_rel_version,;t t s,@cf_cv_abi_version@,$cf_cv_abi_version,;t t s,@cf_cv_builtin_bool@,$cf_cv_builtin_bool,;t t s,@cf_cv_header_stdbool_h@,$cf_cv_header_stdbool_h,;t t s,@cf_cv_type_of_bool@,$cf_cv_type_of_bool,;t t s,@VERSION@,$VERSION,;t t s,@VERSION_MAJOR@,$VERSION_MAJOR,;t t s,@VERSION_MINOR@,$VERSION_MINOR,;t t s,@VERSION_PATCH@,$VERSION_PATCH,;t t s,@PACKAGE@,$PACKAGE,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@target@,$target,;t t s,@target_cpu@,$target_cpu,;t t s,@target_vendor@,$target_vendor,;t t s,@target_os@,$target_os,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;t t s,@CPP@,$CPP,;t t s,@LDCONFIG@,$LDCONFIG,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@AWK@,$AWK,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@LINT@,$LINT,;t t s,@LINT_OPTS@,$LINT_OPTS,;t t s,@LN_S@,$LN_S,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t s,@PKG_CONFIG_LIBDIR@,$PKG_CONFIG_LIBDIR,;t t s,@MAKE_PC_FILES@,$MAKE_PC_FILES,;t t s,@PC_MODULE_SUFFIX@,$PC_MODULE_SUFFIX,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@CTAGS@,$CTAGS,;t t s,@ETAGS@,$ETAGS,;t t s,@MAKE_LOWER_TAGS@,$MAKE_LOWER_TAGS,;t t s,@MAKE_UPPER_TAGS@,$MAKE_UPPER_TAGS,;t t s,@cf_cv_makeflags@,$cf_cv_makeflags,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@LD@,$LD,;t t s,@ac_ct_LD@,$ac_ct_LD,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@NM@,$NM,;t t s,@ac_ct_NM@,$ac_ct_NM,;t t s,@ARFLAGS@,$ARFLAGS,;t t s,@DESTDIR@,$DESTDIR,;t t s,@BUILD_CC@,$BUILD_CC,;t t s,@BUILD_CPP@,$BUILD_CPP,;t t s,@BUILD_CFLAGS@,$BUILD_CFLAGS,;t t s,@BUILD_CPPFLAGS@,$BUILD_CPPFLAGS,;t t s,@BUILD_LDFLAGS@,$BUILD_LDFLAGS,;t t s,@BUILD_LIBS@,$BUILD_LIBS,;t t s,@BUILD_EXEEXT@,$BUILD_EXEEXT,;t t s,@BUILD_OBJEXT@,$BUILD_OBJEXT,;t t s,@cf_list_models@,$cf_list_models,;t t s,@ABI_VERSION@,$ABI_VERSION,;t t s,@LIBTOOL_VERSION@,$LIBTOOL_VERSION,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@ac_ct_LIBTOOL@,$ac_ct_LIBTOOL,;t t s,@LT_UNDEF@,$LT_UNDEF,;t t s,@LIBTOOL_CXX@,$LIBTOOL_CXX,;t t s,@LIBTOOL_OPTS@,$LIBTOOL_OPTS,;t t s,@LIB_CREATE@,$LIB_CREATE,;t t s,@LIB_OBJECT@,$LIB_OBJECT,;t t s,@LIB_SUFFIX@,$LIB_SUFFIX,;t t s,@LIB_PREP@,$LIB_PREP,;t t s,@LIB_CLEAN@,$LIB_CLEAN,;t t s,@LIB_COMPILE@,$LIB_COMPILE,;t t s,@LIB_LINK@,$LIB_LINK,;t t s,@LIB_INSTALL@,$LIB_INSTALL,;t t s,@LIB_UNINSTALL@,$LIB_UNINSTALL,;t t s,@DFT_LWR_MODEL@,$DFT_LWR_MODEL,;t t s,@DFT_UPR_MODEL@,$DFT_UPR_MODEL,;t t s,@TICS_NAME@,$TICS_NAME,;t t s,@TINFO_NAME@,$TINFO_NAME,;t t s,@LIB_NAME@,$LIB_NAME,;t t s,@LIB_PREFIX@,$LIB_PREFIX,;t t s,@CC_G_OPT@,$CC_G_OPT,;t t s,@CXX_G_OPT@,$CXX_G_OPT,;t t s,@LD_MODEL@,$LD_MODEL,;t t s,@shlibdir@,$shlibdir,;t t s,@MAKE_DLLS@,$MAKE_DLLS,;t t s,@CC_SHARED_OPTS@,$CC_SHARED_OPTS,;t t s,@LD_RPATH_OPT@,$LD_RPATH_OPT,;t t s,@LD_SHARED_OPTS@,$LD_SHARED_OPTS,;t t s,@MK_SHARED_LIB@,$MK_SHARED_LIB,;t t s,@RM_SHARED_OPTS@,$RM_SHARED_OPTS,;t t s,@LINK_PROGS@,$LINK_PROGS,;t t s,@LINK_TESTS@,$LINK_TESTS,;t t s,@EXTRA_LDFLAGS@,$EXTRA_LDFLAGS,;t t s,@LOCAL_LDFLAGS@,$LOCAL_LDFLAGS,;t t s,@LOCAL_LDFLAGS2@,$LOCAL_LDFLAGS2,;t t s,@INSTALL_LIB@,$INSTALL_LIB,;t t s,@RPATH_LIST@,$RPATH_LIST,;t t s,@EXPORT_SYMS@,$EXPORT_SYMS,;t t s,@RESULTING_SYMS@,$RESULTING_SYMS,;t t s,@VERSIONED_SYMS@,$VERSIONED_SYMS,;t t s,@WILDCARD_SYMS@,$WILDCARD_SYMS,;t t s,@cf_ldd_prog@,$cf_ldd_prog,;t t s,@EXTRA_SUFFIX@,$EXTRA_SUFFIX,;t t s,@TERMINFO_SRC@,$TERMINFO_SRC,;t t s,@NCURSES_USE_DATABASE@,$NCURSES_USE_DATABASE,;t t s,@FALLBACK_LIST@,$FALLBACK_LIST,;t t s,@WHICH_XTERM@,$WHICH_XTERM,;t t s,@XTERM_KBS@,$XTERM_KBS,;t t s,@TERMINFO_DIRS@,$TERMINFO_DIRS,;t t s,@TERMINFO@,$TERMINFO,;t t s,@MAKE_TERMINFO@,$MAKE_TERMINFO,;t t s,@USE_BIG_STRINGS@,$USE_BIG_STRINGS,;t t s,@TERMPATH@,$TERMPATH,;t t s,@NCURSES_USE_TERMCAP@,$NCURSES_USE_TERMCAP,;t t s,@BROKEN_LINKER@,$BROKEN_LINKER,;t t s,@NCURSES_WCWIDTH_GRAPHICS@,$NCURSES_WCWIDTH_GRAPHICS,;t t s,@NCURSES_CH_T@,$NCURSES_CH_T,;t t s,@NCURSES_LIBUTF8@,$NCURSES_LIBUTF8,;t t s,@NEED_WCHAR_H@,$NEED_WCHAR_H,;t t s,@NCURSES_MBSTATE_T@,$NCURSES_MBSTATE_T,;t t s,@NCURSES_WCHAR_T@,$NCURSES_WCHAR_T,;t t s,@NCURSES_WINT_T@,$NCURSES_WINT_T,;t t s,@NCURSES_OK_WCHAR_T@,$NCURSES_OK_WCHAR_T,;t t s,@NCURSES_OK_WINT_T@,$NCURSES_OK_WINT_T,;t t s,@cf_cv_enable_lp64@,$cf_cv_enable_lp64,;t t s,@NCURSES_TPARM_VARARGS@,$NCURSES_TPARM_VARARGS,;t t s,@NCURSES_BOOL@,$NCURSES_BOOL,;t t s,@TERMINFO_CAPS@,$TERMINFO_CAPS,;t t s,@NCURSES_OSPEED@,$NCURSES_OSPEED,;t t s,@NCURSES_CCHARW_MAX@,$NCURSES_CCHARW_MAX,;t t s,@NCURSES_TPARM_ARG@,$NCURSES_TPARM_ARG,;t t s,@MANPAGE_RENAMES@,$MANPAGE_RENAMES,;t t s,@NCURSES_EXT_FUNCS@,$NCURSES_EXT_FUNCS,;t t s,@GENERATED_EXT_FUNCS@,$GENERATED_EXT_FUNCS,;t t s,@NCURSES_SP_FUNCS@,$NCURSES_SP_FUNCS,;t t s,@GENERATED_SP_FUNCS@,$GENERATED_SP_FUNCS,;t t s,@NCURSES_CONST@,$NCURSES_CONST,;t t s,@NCURSES_EXT_COLORS@,$NCURSES_EXT_COLORS,;t t s,@NCURSES_MOUSE_VERSION@,$NCURSES_MOUSE_VERSION,;t t s,@NCURSES_SBOOL@,$NCURSES_SBOOL,;t t s,@NCURSES_XNAMES@,$NCURSES_XNAMES,;t t s,@NCURSES_INTEROP_FUNCS@,$NCURSES_INTEROP_FUNCS,;t t s,@PTHREAD@,$PTHREAD,;t t s,@cf_cv_enable_reentrant@,$cf_cv_enable_reentrant,;t t s,@cf_cv_enable_opaque@,$cf_cv_enable_opaque,;t t s,@NCURSES_OPAQUE@,$NCURSES_OPAQUE,;t t s,@NCURSES_SIZE_T@,$NCURSES_SIZE_T,;t t s,@NCURSES_WRAP_PREFIX@,$NCURSES_WRAP_PREFIX,;t t s,@ECHO_LT@,$ECHO_LT,;t t s,@ECHO_LD@,$ECHO_LD,;t t s,@RULE_CC@,$RULE_CC,;t t s,@SHOW_CC@,$SHOW_CC,;t t s,@ECHO_CC@,$ECHO_CC,;t t s,@ECHO_LINK@,$ECHO_LINK,;t t s,@ADAFLAGS@,$ADAFLAGS,;t t s,@EXTRA_CFLAGS@,$EXTRA_CFLAGS,;t t s,@EXTRA_CXXFLAGS@,$EXTRA_CXXFLAGS,;t t s,@ADA_TRACE@,$ADA_TRACE,;t t s,@MATH_LIB@,$MATH_LIB,;t t s,@NCURSES_INLINE@,$NCURSES_INLINE,;t t s,@cf_cv_typeof_chtype@,$cf_cv_typeof_chtype,;t t s,@cf_cv_1UL@,$cf_cv_1UL,;t t s,@cf_cv_typeof_mmask_t@,$cf_cv_typeof_mmask_t,;t t s,@HAVE_VSSCANF@,$HAVE_VSSCANF,;t t s,@TEST_LIBS@,$TEST_LIBS,;t t s,@TEST_LIBS2@,$TEST_LIBS2,;t t s,@CXXCPP@,$CXXCPP,;t t s,@CXXLDFLAGS@,$CXXLDFLAGS,;t t s,@CXX_AR@,$CXX_AR,;t t s,@CXX_ARFLAGS@,$CXX_ARFLAGS,;t t s,@CXXLIBS@,$CXXLIBS,;t t s,@USE_CXX_BOOL@,$USE_CXX_BOOL,;t t s,@gnat_exists@,$gnat_exists,;t t s,@M4_exists@,$M4_exists,;t t s,@cf_ada_make@,$cf_ada_make,;t t s,@GNATPREP_OPTS@,$GNATPREP_OPTS,;t t s,@cf_compile_generics@,$cf_compile_generics,;t t s,@cf_generic_objects@,$cf_generic_objects,;t t s,@USE_GNAT_SIGINT@,$USE_GNAT_SIGINT,;t t s,@USE_OLD_MAKERULES@,$USE_OLD_MAKERULES,;t t s,@USE_GNAT_PROJECTS@,$USE_GNAT_PROJECTS,;t t s,@USE_GNAT_LIBRARIES@,$USE_GNAT_LIBRARIES,;t t s,@cf_ada_compiler@,$cf_ada_compiler,;t t s,@cf_ada_package@,$cf_ada_package,;t t s,@ADA_INCLUDE@,$ADA_INCLUDE,;t t s,@ADA_OBJECTS@,$ADA_OBJECTS,;t t s,@ADA_SHAREDLIB@,$ADA_SHAREDLIB,;t t s,@MAKE_ADA_SHAREDLIB@,$MAKE_ADA_SHAREDLIB,;t t s,@ACPPFLAGS@,$ACPPFLAGS,;t t s,@DFT_ARG_SUFFIX@,$DFT_ARG_SUFFIX,;t t s,@DFT_DEP_SUFFIX@,$DFT_DEP_SUFFIX,;t t s,@DFT_OBJ_SUBDIR@,$DFT_OBJ_SUBDIR,;t t s,@CXX_LIB_SUFFIX@,$CXX_LIB_SUFFIX,;t t s,@USE_ARG_SUFFIX@,$USE_ARG_SUFFIX,;t t s,@USE_CFG_SUFFIX@,$USE_CFG_SUFFIX,;t t s,@USE_LIB_SUFFIX@,$USE_LIB_SUFFIX,;t t s,@TICS_ARG_SUFFIX@,$TICS_ARG_SUFFIX,;t t s,@TICS_DEP_SUFFIX@,$TICS_DEP_SUFFIX,;t t s,@TICS_LIB_SUFFIX@,$TICS_LIB_SUFFIX,;t t s,@TICS_LDFLAGS@,$TICS_LDFLAGS,;t t s,@TICS_LIBS@,$TICS_LIBS,;t t s,@TINFO_ARG_SUFFIX@,$TINFO_ARG_SUFFIX,;t t s,@TINFO_DEP_SUFFIX@,$TINFO_DEP_SUFFIX,;t t s,@TINFO_LIB_SUFFIX@,$TINFO_LIB_SUFFIX,;t t s,@TINFO_LDFLAGS@,$TINFO_LDFLAGS,;t t s,@TINFO_LIBS@,$TINFO_LIBS,;t t s,@TINFO_LDFLAGS2@,$TINFO_LDFLAGS2,;t t s,@LDFLAGS_STATIC@,$LDFLAGS_STATIC,;t t s,@LDFLAGS_SHARED@,$LDFLAGS_SHARED,;t t s,@includesubdir@,$includesubdir,;t t s,@WITH_OVERWRITE@,$WITH_OVERWRITE,;t t s,@TICS_LIST@,$TICS_LIST,;t t s,@TINFO_LIST@,$TINFO_LIST,;t t s,@SHLIB_LIST@,$SHLIB_LIST,;t t s,@NCURSES_TREE@,$NCURSES_TREE,;t t s,@TEST_ARGS@,$TEST_ARGS,;t t s,@TEST_DEPS@,$TEST_DEPS,;t t s,@TEST_ARG2@,$TEST_ARG2,;t t s,@TEST_DEP2@,$TEST_DEP2,;t t s,@PC_MODULES_TO_MAKE@,$PC_MODULES_TO_MAKE,;t t s,@ADA_SUBDIRS@,$ADA_SUBDIRS,;t t s,@DIRS_TO_MAKE@,$DIRS_TO_MAKE,;t t s,@NCURSES_SHLIB2@,$NCURSES_SHLIB2,;t t s,@HAVE_TCGETATTR@,$HAVE_TCGETATTR,;t t s,@HAVE_STDINT_H@,$HAVE_STDINT_H,;t t s,@HAVE_TERMIO_H@,$HAVE_TERMIO_H,;t t s,@HAVE_TERMIOS_H@,$HAVE_TERMIOS_H,;t t s,@cross_compiling@,$cross_compiling,;t t s,@TIC_PATH@,$TIC_PATH,;t t s,@MAKE_TESTS@,$MAKE_TESTS,;t t s,@ADAHTML_DIR@,$ADAHTML_DIR,;t t s,@PANEL_NAME@,$PANEL_NAME,;t t s,@MENU_NAME@,$MENU_NAME,;t t s,@FORM_NAME@,$FORM_NAME,;t t s,@CXX_NAME@,$CXX_NAME,;t t s,@LIBTOOL_OPTS_CXX@,$LIBTOOL_OPTS_CXX,;t t s,@PKG_CFLAGS@,$PKG_CFLAGS,;t t s,@MISC_INSTALL_DATA@,$MISC_INSTALL_DATA,;t t s,@MISC_UNINSTALL_DATA@,$MISC_UNINSTALL_DATA,;t t s,@UNALTERED_SYMS@,$UNALTERED_SYMS,;t t s,@ADAGEN_LDFLAGS@,$ADAGEN_LDFLAGS,;t t CEOF EOF cat >>$CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed # It is possible to make a multiline substitution using escaped newlines. # Ensure that we do not split the substitution between script fragments. ac_BEG=$ac_end ac_END=`expr $ac_end + $ac_max_sed_lines` sed "1,${ac_BEG}d; ${ac_END}p; q" $tmp/subs.sed >$tmp/subs.next if test -s $tmp/subs.next; then grep '^s,@[^@,][^@,]*@,.*\\$' $tmp/subs.next >$tmp/subs.edit if test ! -s $tmp/subs.edit; then grep "^s,@[^@,][^@,]*@,.*,;t t$" $tmp/subs.next >$tmp/subs.edit if test ! -s $tmp/subs.edit; then if test $ac_beg -gt 1; then ac_end=`expr $ac_end - 1` continue fi fi fi fi if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" EOF cat >>$CONFIG_STATUS <<\EOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` else ac_dir_suffix= ac_dots= fi case $srcdir in .) ac_srcdir=. if test -z "$ac_dots"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_dots$srcdir$ac_dir_suffix ac_top_srcdir=$ac_dots$srcdir ;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_dots$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:23464: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated automatically by config.status. */ configure_input="Generated automatically from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:23482: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:23495: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } EOF cat >>$CONFIG_STATUS <<\EOF ac_warn_datarootdir=no if test x"$ac_file" != x-; then for ac_item in $ac_file_inputs do ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' $ac_item` if test -n "$ac_seen"; then ac_used=`grep '@datarootdir@' $ac_item` if test -z "$ac_used"; then { echo "$as_me:23511: WARNING: datarootdir was used implicitly but not set: $ac_seen" >&5 echo "$as_me: WARNING: datarootdir was used implicitly but not set: $ac_seen" >&2;} ac_warn_datarootdir=yes fi fi ac_seen=`grep '${datarootdir}' $ac_item` if test -n "$ac_seen"; then { echo "$as_me:23520: WARNING: datarootdir was used explicitly but not set: $ac_seen" >&5 echo "$as_me: WARNING: datarootdir was used explicitly but not set: $ac_seen" >&2;} ac_warn_datarootdir=yes fi done fi if test "x$ac_warn_datarootdir" = xyes; then ac_sed_cmds="$ac_sed_cmds | sed -e 's,@datarootdir@,\${prefix}/share,g' -e 's,\${datarootdir},\${prefix}/share,g'" fi EOF cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then cp $tmp/out $ac_file for ac_name in prefix exec_prefix datarootdir do ac_seen=`fgrep -n '${'$ac_name'[:=].*}' $ac_file` if test -n "$ac_seen"; then ac_init=`egrep '[ ]*'$ac_name'[ ]*=' $ac_file` if test -z "$ac_init"; then ac_seen=`echo "$ac_seen" |sed -e 's,^,'$ac_file':,'` { echo "$as_me:23557: WARNING: Variable $ac_name is used but was not set: $ac_seen" >&5 echo "$as_me: WARNING: Variable $ac_name is used but was not set: $ac_seen" >&2;} fi fi done egrep -n '@[a-z_][a-z_0-9]+@' $ac_file >$tmp/out egrep -n '@[A-Z_][A-Z_0-9]+@' $ac_file >>$tmp/out if test -s $tmp/out; then ac_seen=`sed -e 's,^,'$ac_file':,' < $tmp/out` { echo "$as_me:23568: WARNING: Some variables may not be substituted: $ac_seen" >&5 echo "$as_me: WARNING: Some variables may not be substituted: $ac_seen" >&2;} fi else cat $tmp/out fi rm -f $tmp/out done EOF cat >>$CONFIG_STATUS <<\EOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_i turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_iA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_iB='\([ ]\),\1#\2define\3' ac_iC=' ' ac_iD='\4,;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:23617: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:23628: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:23641: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in EOF # Transform confdefs.h into a list of #define's. We won't use it as a sed # script, but as data to insert where we see @DEFS@. We expect AC_SAVE_DEFS to # be either 'cat' or 'sort'. cat confdefs.h | uniq >conftest.vals # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail echo ' rm -f conftest.frag' >> $CONFIG_STATUS while grep . conftest.vals >/dev/null do # Write chunks of a limited-size here document to conftest.frag. echo ' cat >> conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> $CONFIG_STATUS echo 'CEOF' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals # Run sed to substitute the contents of conftest.frag into $tmp/in at the # marker @DEFS@. echo ' cat >> conftest.edit < $tmp/out rm -f $tmp/in mv $tmp/out $tmp/in rm -f conftest.edit conftest.frag ' >> $CONFIG_STATUS cat >>$CONFIG_STATUS <<\EOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated automatically by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated automatically by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if cmp -s $ac_file $tmp/config.h 2>/dev/null; then { echo "$as_me:23699: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } fi rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done EOF cat >>$CONFIG_STATUS <<\EOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` case $ac_dest in default ) if test "x$cf_with_tests" != xno ; then for cf_dir in test do if test ! -d $srcdir/$cf_dir; then continue elif test -f $srcdir/$cf_dir/programs; then $AWK -f $srcdir/test/mk-test.awk INSTALL=no ECHO_LINK="$ECHO_LD" $srcdir/$cf_dir/programs >>$cf_dir/Makefile fi done fi cf_prefix=$LIB_PREFIX case $cf_cv_shlib_version in (cygdll|msysdll|mingw) TINFO_NAME=$TINFO_ARG_SUFFIX TINFO_SUFFIX=.dll ;; esac if test -n "$TINFO_SUFFIX" ; then case $TINFO_SUFFIX in (tw*) TINFO_NAME="${TINFO_NAME}tw${EXTRA_SUFFIX}" TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^tw'$EXTRA_SUFFIX'//'` ;; (t*) TINFO_NAME="${TINFO_NAME}t${EXTRA_SUFFIX}" TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^t'$EXTRA_SUFFIX'//'` ;; (w*) TINFO_NAME="${TINFO_NAME}w${EXTRA_SUFFIX}" TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^w'$EXTRA_SUFFIX'//'` ;; esac fi for cf_dir in $SRC_SUBDIRS do if test ! -d $srcdir/$cf_dir ; then continue elif test -f $srcdir/$cf_dir/modules; then SHARED_LIB= Libs_To_Make= cf_awk_program= if test -n "${cf_cv_abi_version}" && test "x${cf_cv_abi_version}" != "x5" then cf_awk_program="$cf_awk_program\ /deprecated in ABI${cf_cv_abi_version}/ { next; }\ { sub(\"NCURSES([WT]+)?\", \"&${cf_cv_abi_version}\"); }\ " fi if test "x$WILDCARD_SYMS" = xno then cf_awk_program="$cf_awk_program\ /[ ]_\\*;/ { skip=1; next; }\ " fi if test "x$cf_awk_program" != "x" then cat >>$cf_dir/Makefile <\$@ distclean:: rm -f resulting.map CF_EOF fi for cf_item in $cf_LIST_MODELS do case X$cf_item in (Xlibtool) cf_suffix='.la' cf_depsuf=$cf_suffix ;; (Xdebug) cf_suffix='_g.a' cf_depsuf=$cf_suffix ;; (Xprofile) cf_suffix='_p.a' cf_depsuf=$cf_suffix ;; (Xshared) case $cf_cv_system_name in (aix[5-7]*) cf_suffix='.so' cf_depsuf=$cf_suffix ;; (cygwin*|msys*|mingw*) cf_suffix='.dll' cf_depsuf='.dll.a' ;; (darwin*) cf_suffix='.dylib' cf_depsuf=$cf_suffix ;; (hpux*) case $target in (ia64*) cf_suffix='.so' cf_depsuf=$cf_suffix ;; (*) cf_suffix='.sl' cf_depsuf=$cf_suffix ;; esac ;; (*) cf_suffix='.so' cf_depsuf=$cf_suffix ;; esac ;; (*) cf_suffix='.a' cf_depsuf=$cf_suffix ;; esac if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}" then cf_suffix="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_suffix}" cf_depsuf="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_depsuf}" fi cf_libname=$cf_dir test "$cf_dir" = c++ && cf_libname=ncurses++ if test $cf_item = shared ; then if test -n "${LIB_SUFFIX}" then cf_shared_suffix=`echo "$cf_suffix" | sed 's/^'"${USE_LIB_SUFFIX}"'//'` else cf_shared_suffix="$cf_suffix" fi if test "$cf_cv_do_symlinks" = yes ; then cf_version_name= case "$cf_cv_shlib_version" in (rel) cf_version_name=REL_VERSION ;; (abi) cf_version_name=ABI_VERSION ;; esac if test -n "$cf_version_name" then case "$cf_cv_system_name" in (darwin*) # "w", etc? cf_suffix="${USE_LIB_SUFFIX}"'.${'$cf_version_name'}'"$cf_shared_suffix" ;; (*) cf_suffix="$cf_suffix"'.${'$cf_version_name'}' ;; esac fi if test -n "${USE_LIB_SUFFIX}" then cf_shared_suffix=`echo "$cf_suffix" | sed 's/^'"${USE_LIB_SUFFIX}"'//'` else cf_shared_suffix="$cf_suffix" fi fi # cygwin needs import library, and has unique naming convention # use autodetected ${cf_prefix} for import lib and static lib, but # use 'cyg' prefix for shared lib. case $cf_cv_shlib_version in (cygdll) cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'` cf_add_lib="../lib/cyg${cf_libname}${cf_cygsuf}" ;; (msysdll) cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'` cf_add_lib="../lib/msys-${cf_libname}${cf_cygsuf}" ;; (mingw) cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'` cf_add_lib="../lib/lib${cf_libname}${cf_cygsuf}" ;; (*) cf_add_lib= ;; esac if test -n "$cf_add_lib" then Libs_To_Make="$Libs_To_Make $cf_add_lib" continue fi fi cf_add_lib="../lib/${cf_prefix}${cf_libname}${cf_suffix}" Libs_To_Make="$Libs_To_Make $cf_add_lib" done if test $cf_dir = ncurses ; then cf_subsets="$LIB_SUBSETS" cf_r_parts="$cf_subsets" cf_liblist="$Libs_To_Make" while test -n "$cf_r_parts" do cf_l_parts=`echo "$cf_r_parts" |sed -e 's/ .*$//'` cf_r_parts=`echo "$cf_r_parts" |sed -e 's/^[^ ]* //'` if test "$cf_l_parts" != "$cf_r_parts" ; then cf_add_lib= case $cf_l_parts in (*termlib*) cf_add_lib=`echo $cf_liblist |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TINFO_LIB_SUFFIX}%g` ;; (*ticlib*) cf_add_lib=`echo $cf_liblist |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TICS_LIB_SUFFIX}%g` ;; (*) break ;; esac if test -n "$cf_add_lib"; then Libs_To_Make="$cf_add_lib $Libs_To_Make" fi else break fi done else cf_subsets=`echo "$LIB_SUBSETS" | sed -e 's/^termlib.* //'` fi if test $cf_dir = c++; then if test "x$with_shared_cxx" != xyes && test -n "$cf_shared_suffix"; then cf_list= for cf_item in $Libs_To_Make do case $cf_item in (*.a) ;; (*) cf_item=`echo "$cf_item" | sed -e "s,"$cf_shared_suffix",.a,"` ;; esac for cf_test in $cf_list do if test "$cf_test" = "$cf_item" then cf_LIST_MODELS=`echo "$cf_LIST_MODELS" | sed -e 's/normal//'` cf_item= break fi done test -n "$cf_item" && cf_list="$cf_list $cf_item" done Libs_To_Make="$cf_list" fi fi sed -e "s%@Libs_To_Make@%$Libs_To_Make%" \ -e "s%@SHARED_LIB@%$SHARED_LIB%" \ $cf_dir/Makefile >$cf_dir/Makefile.out mv $cf_dir/Makefile.out $cf_dir/Makefile $AWK -f $srcdir/mk-0th.awk \ libname="${cf_dir}${LIB_SUFFIX}" subsets="$LIB_SUBSETS" ticlib="$TICS_LIB_SUFFIX" termlib="$TINFO_LIB_SUFFIX" \ $srcdir/$cf_dir/modules >>$cf_dir/Makefile for cf_subset in $cf_subsets do cf_subdirs= for cf_item in $cf_LIST_MODELS do echo "Appending rules for ${cf_item} model (${cf_dir}: ${cf_subset})" cf_ITEM=`echo "$cf_item" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` CXX_MODEL=$cf_ITEM if test "$CXX_MODEL" = SHARED; then case $cf_cv_shlib_version in (cygdll|msysdll|mingw) test "x$with_shared_cxx" = xno && test -n "$verbose" && echo " overriding CXX_MODEL to SHARED" 1>&6 echo "${as_me:-configure}:24044: testing overriding CXX_MODEL to SHARED ..." 1>&5 with_shared_cxx=yes ;; (*) test "x$with_shared_cxx" = xno && CXX_MODEL=NORMAL ;; esac fi case X$cf_item in (Xlibtool) cf_suffix='.la' cf_depsuf=$cf_suffix ;; (Xdebug) cf_suffix='_g.a' cf_depsuf=$cf_suffix ;; (Xprofile) cf_suffix='_p.a' cf_depsuf=$cf_suffix ;; (Xshared) case $cf_cv_system_name in (aix[5-7]*) cf_suffix='.so' cf_depsuf=$cf_suffix ;; (cygwin*|msys*|mingw*) cf_suffix='.dll' cf_depsuf='.dll.a' ;; (darwin*) cf_suffix='.dylib' cf_depsuf=$cf_suffix ;; (hpux*) case $target in (ia64*) cf_suffix='.so' cf_depsuf=$cf_suffix ;; (*) cf_suffix='.sl' cf_depsuf=$cf_suffix ;; esac ;; (*) cf_suffix='.so' cf_depsuf=$cf_suffix ;; esac ;; (*) cf_suffix='.a' cf_depsuf=$cf_suffix ;; esac if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}" then cf_suffix="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_suffix}" cf_depsuf="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_depsuf}" fi case $cf_item in (libtool) cf_subdir='obj_lo' ;; (normal) cf_subdir='objects' ;; (debug) cf_subdir='obj_g' ;; (profile) cf_subdir='obj_p' ;; (shared) case $cf_cv_system_name in (cygwin|msys) cf_subdir='objects' ;; (*) cf_subdir='obj_s' ;; esac esac # Test for case where we build libtinfo with a different name. cf_libname=$cf_dir if test $cf_dir = ncurses ; then case $cf_subset in (*base*) cf_libname=${cf_libname}$USE_LIB_SUFFIX ;; (*termlib*) cf_libname=$TINFO_LIB_SUFFIX ;; (ticlib*) cf_libname=$TICS_LIB_SUFFIX ;; esac elif test $cf_dir = c++ ; then cf_libname=ncurses++$USE_LIB_SUFFIX else cf_libname=${cf_libname}$USE_LIB_SUFFIX fi if test -n "${USE_ARG_SUFFIX}" ; then # undo $USE_LIB_SUFFIX add-on in CF_LIB_SUFFIX cf_suffix=`echo $cf_suffix |sed -e "s%^${USE_LIB_SUFFIX}%%"` fi # These dependencies really are for development, not # builds, but they are useful in porting, too. cf_depend="../include/ncurses_cfg.h" if test "$srcdir" = "."; then cf_reldir="." else cf_reldir="\${srcdir}" fi if test -f $srcdir/$cf_dir/$cf_dir.priv.h; then cf_depend="$cf_depend $cf_reldir/$cf_dir.priv.h" elif test -f $srcdir/$cf_dir/curses.priv.h; then cf_depend="$cf_depend $cf_reldir/curses.priv.h" fi cf_dir_suffix= old_cf_suffix="$cf_suffix" if test "$cf_cv_shlib_version_infix" = yes ; then if test -n "$USE_LIB_SUFFIX" ; then case $USE_LIB_SUFFIX in (tw*) cf_libname=`echo $cf_libname | sed 's/tw'$EXTRA_SUFFIX'$//'` cf_suffix=`echo $cf_suffix | sed 's/^tw'$EXTRA_SUFFIX'//'` cf_dir_suffix=tw$EXTRA_SUFFIX ;; (t*) cf_libname=`echo $cf_libname | sed 's/t'$EXTRA_SUFFIX'$//'` cf_suffix=`echo $cf_suffix | sed 's/^t'$EXTRA_SUFFIX'//'` cf_dir_suffix=t$EXTRA_SUFFIX ;; (w*) cf_libname=`echo $cf_libname | sed 's/w'$EXTRA_SUFFIX'$//'` cf_suffix=`echo $cf_suffix | sed 's/^w'$EXTRA_SUFFIX'//'` cf_dir_suffix=w$EXTRA_SUFFIX ;; (*) cf_libname=`echo $cf_libname | sed 's/'$EXTRA_SUFFIX'$//'` cf_suffix=`echo $cf_suffix | sed 's/^'$EXTRA_SUFFIX'//'` cf_dir_suffix=$EXTRA_SUFFIX ;; esac fi fi $AWK -f $srcdir/mk-1st.awk \ name=${cf_libname}${cf_dir_suffix} \ traces=$LIB_TRACING \ MODEL=$cf_ITEM \ CXX_MODEL=$CXX_MODEL \ model=$cf_subdir \ prefix=$cf_prefix \ suffix=$cf_suffix \ subset=$cf_subset \ driver=$cf_cv_term_driver \ SymLink="$LN_S" \ TermlibRoot=$TINFO_NAME \ TermlibSuffix=$TINFO_SUFFIX \ ShlibVer=$cf_cv_shlib_version \ ShlibVerInfix=$cf_cv_shlib_version_infix \ ReLink=${cf_cv_do_relink:-no} \ DoLinks=$cf_cv_do_symlinks \ rmSoLocs=$cf_cv_rm_so_locs \ ldconfig="$LDCONFIG" \ overwrite=$WITH_OVERWRITE \ depend="$cf_depend" \ host="$host" \ libtool_version="$LIBTOOL_VERSION" \ $srcdir/$cf_dir/modules >>$cf_dir/Makefile cf_suffix="$old_cf_suffix" for cf_subdir2 in $cf_subdirs lib do test $cf_subdir = $cf_subdir2 && break done test "${cf_subset}.${cf_subdir2}" != "${cf_subset}.${cf_subdir}" && \ $AWK -f $srcdir/mk-2nd.awk \ name=$cf_dir \ traces=$LIB_TRACING \ MODEL=$cf_ITEM \ model=$cf_subdir \ subset=$cf_subset \ srcdir=$srcdir \ echo=$WITH_ECHO \ crenames=$cf_cv_prog_CC_c_o \ cxxrenames=$cf_cv_prog_CXX_c_o \ $srcdir/$cf_dir/modules >>$cf_dir/Makefile cf_subdirs="$cf_subdirs $cf_subdir" done done fi echo ' cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} $@' >>Makefile done for cf_dir in $SRC_SUBDIRS do if test ! -d $srcdir/$cf_dir ; then continue fi if test -f $cf_dir/Makefile ; then case "$cf_dir" in (Ada95) echo 'libs \' >> Makefile echo 'install.libs \' >> Makefile echo 'uninstall.libs ::' >> Makefile echo ' cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} $@' >> Makefile ;; esac fi if test -f $srcdir/$cf_dir/modules; then echo >> Makefile if test -f $srcdir/$cf_dir/headers; then cat >> Makefile <> Makefile fi cat >> Makefile <> Makefile <> Makefile <> Makefile <> Makefile <> Makefile <> Makefile <headers.sh <>headers.sh </<\$END\/\$NAME>/" >> \$TMPSED done ;; (*) echo "" >> \$TMPSED ;; esac CF_EOF else cat >>headers.sh <//" >> \$TMPSED NAME=ncurses.h fi echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED done ;; (*) echo "s///" >> \$TMPSED ;; esac CF_EOF fi cat >>headers.sh < \$TMPSRC NAME=\`basename \$SRC\` CF_EOF if test $WITH_CURSES_H != yes; then cat >>headers.sh <>headers.sh <>$cf_dir/Makefile fi if test -f $srcdir/$cf_dir/modules; then if test "$cf_dir" != "c++" ; then cat >>$cf_dir/Makefile <<"CF_EOF" depend : ${AUTO_SRC} makedepend -- ${CPPFLAGS} -- ${C_SRC} # DO NOT DELETE THIS LINE -- make depend depends on it. CF_EOF fi fi done if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = "xyes"; then if test -z "$USE_OLD_MAKERULES" ; then $AWK -f $srcdir/Ada95/mk-1st.awk <$srcdir/Ada95/src/modules >>Ada95/src/Makefile fi fi ;; esac done EOF cat >>$CONFIG_STATUS <<\EOF { (exit 0); exit 0; } EOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: exec 5>/dev/null $SHELL $CONFIG_STATUS || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi ${MAKE:-make} preinstall ncurses-6.0-20160213/COPYING0000644000175100001440000000260012642031005013476 0ustar tomusersCopyright (c) 1998-2015,2016 Free Software Foundation, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. -- vile:txtmode fc=72 -- $Id: COPYING,v 1.4 2016/01/02 20:24:37 tom Exp $ ncurses-6.0-20160213/dist.mk0000644000175100001440000001626712657642574014006 0ustar tomusers############################################################################## # Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: dist.mk,v 1.1093 2016/02/13 15:02:20 tom Exp $ # Makefile for creating ncurses distributions. # # This only needs to be used directly as a makefile by developers, but # configure mines the current version number out of here. To move # to a new version number, just edit this file and run configure. # SHELL = /bin/sh # These define the major/minor/patch versions of ncurses. NCURSES_MAJOR = 6 NCURSES_MINOR = 0 NCURSES_PATCH = 20160213 # We don't append the patch to the version, since this only applies to releases VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR) # The most recent html files were generated with lynx 2.8.6 (or later), using # ncurses configured with # --without-manpage-renames # on Debian/testing. The -scrollbar and -width options are used to make lynx # use 79 columns as it did in 2.8.5 and before. DUMP = lynx -dump -scrollbar=0 -width=79 DUMP2 = $(DUMP) -nolist # gcc's file is "gnathtml.pl" GNATHTML= gnathtml # man2html is a Perl script which assumes that pages are fixed size. # Not all man programs agree with this assumption; some use half-spacing, which # has the effect of lengthening the text portion of the page -- so man2html # would remove some text. The man program on Redhat 6.1 appears to work with # man2html if we set the top/bottom margins to 6 (the default is 7). Newer # versions of 'man' leave no margin (and make it harder to sync with pages). MAN2HTML= man2html -botm=0 -topm=0 -cgiurl '$$title.$$section$$subsection.html' -index ALL = ANNOUNCE doc/html/announce.html doc/ncurses-intro.doc doc/hackguide.doc manhtml adahtml all : $(ALL) dist: $(ALL) (cd ..; tar cvf ncurses-$(VERSION).tar `sed $@ ANNOUNCE : doc/html/announce.html $(DUMP) doc/html/announce.html > $@ doc/ncurses-intro.doc: doc/html/ncurses-intro.html $(DUMP2) doc/html/ncurses-intro.html > $@ doc/hackguide.doc: doc/html/hackguide.html $(DUMP2) doc/html/hackguide.html > $@ # This is the original command: # MANPROG = tbl | nroff -man # # This happens to work for groff 1.18.1 on Debian. At some point groff's # maintainer changed the line-length (we do not want/need that here). # # The distributed html files are formatted using # configure --without-manpage-renames # # The edit_man.sed script is built as a side-effect of installing the manpages. # If that conflicts with the --without-manpage-renames, you can install those # in a different location using the --with-install-prefix option of the # configure script. MANPROG = tbl | nroff -mandoc -rLL=65n -rLT=71n -Tascii manhtml: @for f in doc/html/man/*.html; do \ test -f $$f || continue; \ case $$f in \ */index.html) ;; \ *) rm -f $$f ;; \ esac; \ done @mkdir -p doc/html/man @rm -f subst.tmp ; @for f in man/*.[0-9]*; do \ m=`basename $$f` ;\ x=`echo $$m | awk -F. '{print $$2;}'` ;\ xu=`echo $$x | dd conv=ucase 2>/dev/null` ;\ if [ "$${x}" != "$${xu}" ]; then \ echo "s/$${xu}/$${x}/g" >> subst.tmp ;\ fi ;\ done # change some things to make weblint happy: @cat man_alias.sed >> subst.tmp @echo 's///g' >> subst.tmp @echo 's/<\/B>/<\/STRONG>/g' >> subst.tmp @echo 's///g' >> subst.tmp @echo 's/<\/I>/<\/EM>/g' >> subst.tmp @misc/csort < subst.tmp | uniq > subst.sed @echo '/<\/TITLE>/a\' >> subst.sed @echo '\' >> subst.sed @echo '' >> subst.sed @rm -f subst.tmp @for f in man/*.[0-9]* ; do \ m=`basename $$f` ;\ T=`egrep '^.TH' $$f|sed -e 's/^.TH //' -e s'/"//g' -e 's/[ ]\+$$//'` ; \ g=$${m}.html ;\ if [ -f doc/html/$$g ]; then chmod +w doc/html/$$g; fi;\ echo "Converting $$m to HTML" ;\ echo '' >> doc/html/man/$$g ;\ ./edit_man.sh normal editing /usr/man man $$f | \ $(MANPROG) | \ tr '\255' '-' | \ $(MAN2HTML) \ -title "$$T" \ -aliases man/manhtml.aliases \ -externs man/manhtml.externs | \ sed -f subst.sed |\ sed -e 's/"curses.3x.html"/"ncurses.3x.html"/g' \ >> doc/html/man/$$g ;\ done @rm -f subst.sed # # Please note that this target can only be properly built if the build of the # Ada95 subdir has been done. The reason is, that the gnathtml tool uses the # .ali files generated by the Ada95 compiler during the build process. These # .ali files contain cross referencing information required by gnathtml. adahtml: if [ ! -z "$(GNATHTML)" ]; then \ (cd ./Ada95/gen ; make html GNATHTML=$(GNATHTML) ) ;\ fi # This only works on a clean source tree, of course. MANIFEST: -rm -f $@ touch $@ find . -type f -print |misc/csort | fgrep -v .lsm |fgrep -v .spec >$@ TAGS: etags */*.[ch] # Makefile ends here ncurses-6.0-20160213/ANNOUNCE0000644000175100001440000016415212561454046013625 0ustar tomusers Announcing ncurses 6.0 Overview The ncurses (new curses) library is a free software emulation of curses in System V Release 4.0 (SVr4), and more. It uses terminfo format, supports pads and color and multiple highlights and forms characters and function-key mapping, and has all the other SVr4-curses enhancements over BSD curses. SVr4 curses is better known today as X/Open Curses. In mid-June 1995, the maintainer of 4.4BSD curses declared that he considered 4.4BSD curses obsolete, and encouraged the keepers of unix releases such as BSD/OS, FreeBSD and NetBSD to switch over to ncurses. Since 1995, ncurses has been ported to many systems: * It is used in almost every system based on the Linux kernel (aside from some embedded applications). * It is used as the system curses library on OpenBSD, FreeBSD and OSX. * It is used in environments such as Cygwin and MinGW. The first of these was EMX on OS/2 Warp. * It is used (though usually not as the system curses) on all of the vendor unix systems, e.g., AIX, HP-UX, IRIX64, SCO, Solaris, Tru64. * It should work readily on any ANSI/POSIX-conforming unix. The distribution includes the library and support utilities, including * [1]captoinfo, a termcap conversion tool * [2]clear, utility for clearing the screen * [3]infocmp, the terminfo decompiler * [4]tabs, set tabs on a terminal * [5]tic, the terminfo compiler * [6]toe, list (table of) terminfo entries * [7]tput, utility for retrieving terminal capabilities in shell scripts * [8]tset, to initialize the terminal Full manual pages are provided for the library and tools. The ncurses distribution is available via anonymous FTP at the GNU distribution site [9]ftp://ftp.gnu.org/gnu/ncurses/ . It is also available at [10]ftp://invisible-island.net/ncurses/ . Release Notes These notes are for ncurses 6.0, released August 8, 2015. This release is designed to be source-compatible with ncurses 5.0 through 5.9; providing a new application binary interface (ABI). Although the source can still be configured to support the ncurses 5 ABI, the intent of the release is to provide extensions which are generally useful, but binary-incompatible with ncurses 5: * Extend the cchar_t structure to allow more than 16 colors to be encoded. * Modify the encoding of mouse state to make room for a 5th mouse button. That allows one to use ncurses with a wheel mouse with xterm or similar X terminal emulators. There are, of course, numerous other improvements, including * fixes made based on the Clang and Coverity static analyzers. * memory leak fixes using Valgrind The release notes mention some bug-fixes, but are focused on new features and improvements to existing features log since ncurses 5.9 release. While the intent of the release is to provide a new stable ABI, there are other development activities which are summarized below. * The original release plan, e.g., for "5.10" was to improve the MinGW port. Ultimately that was completed (wide-character support, mouse, etc), but was deferred to focus on termcap support and performance issues. Also, pinpointing the problems with Console2 took a while. * A review of termcap compatibility in 2011 led to several minor fixes in the library and improvements to utilities. To do this properly, a review of the various extent termcap implementations was needed. The [11]termcap library checker (tctest) (not part of ncurses) was one result. A followup review of performance using [12]ncurses-examples in 2014 led to additional improvements. * Output buffering provided a further, but worthwhile distraction. A bug report in 2012 regarding the use of signal handlers in ncurses) pointed out [13]a problem with the use of unsafe functions for handling SIGTSTP. Other signals could be addressed with workarounds; repairing SIGTSTP required a different approach. The solution required changing internal behavior of the library: how it handles output buffering. Now ncurses buffers its own output, independently of the standard output. A few applications relied upon the library's direct reuse of the standard output buffering; however that is unspecified behavior and has never been a recommended practice. Identifying these applications as well as refining the change to permit low-level applications to work consistently took time. * Since the introduction of the experimental support for 256 colors early in [14]2005 (released in [15]ncurses 5.5), there has been increased user interest. Almost all packagers continue providing the ncurses ABI 5 which cannot support 256 colors. * Symbol versioning, or the lack of it in ncurses, is the main reason why packagers would be reluctant to add a new ncurses ABI. This release provides the new ABI along with script-generated lists of versioned symbols which can be used for both ABI 5 and 6 (with distinct names to keep the two separate). This took time to development, as reported in [16]Symbol versioning in ncurses. Library improvements Output buffering X/Open curses provides more than one initialization function: * [17]initscr (the simplest) accepts no parameters. * [18]newterm accepts parameters for the stream input and output * [19]setupterm (the low-level function) accepts a parameter for the file descriptor of the output. They are documented in X/Open as if initscr calls newterm using stdout for output stream, and in turn newterm calls setupterm using fileno(stdout) for the file descriptor. As long as an implementation acts as if it does this, it conforms. In practice, implementations do what is implied. This creates a problem: the low-level setupterm function's file descriptor is unbuffered, while newterm implies buffered output. X/Open Curses says that all output is done through the file descriptor, and does not say how the output stream is actually used. Initially, ncurses used the file descriptor (obtained from the output stream passed to newterm) for changing the terminal modes, and relied upon the output parameter of newterm for buffered output. Later (to avoid using unsafe buffered I/O in signal handlers), ncurses was modified to use the file descriptor (unbuffered output) when cleaning up on receipt of a signal. Otherwise (when not handling a signal), it continued to use the buffered output. That approach worked reasonably well and as a side effect, using the same buffered output as an application might use for printf meant that no flushing was needed when switching between normal- and screen-modes. There were a couple of problems: * to get good performance, curses (not only ncurses, but SVr4 curses in general) set an output buffer using setbuf or similar function. There is no standard (or portable) way to turn that output buffer off, and revert to line-buffering. The [20]NCURSES_NO_SETBUF environment variable did make it optional. * to handle SIGTSTP (the "stop" signal), ncurses relied upon unsafe functions. That is, due to the complexity of the feature, it relied upon reusing existing functions which should not have been called via the signal handler. Conveniently, solving the second problem (by making ncurses do its own output buffering) also fixed the first one. But there were special cases to resolve: [21]low-level functions such as mvcur, putp, vidattr explicitly use the standard output. Those functions were reused internally, and required modification to distinguish whether they were used by the high-level or low-level interfaces. Finally, there may still be a few programs which should be modified to improve their portability, e.g., adding an fflush(stdout); when switching from "[22]shell" mode to "[23]program" (curses) mode. Those are fairly rare because most programmers have learned not to mix printf and [24]printw. Symbol versioning This release introduces symbol-versioning to ncurses because without it, the change of ABI would be less successful. A lengthy discussion will be presented in [25]Symbol versioning in ncurses. These notes summarize what has changed, and what can be done with the new release. Symbol-versioning allows the developers of a library to mark each public symbol (both data and functions) with an identifier denoting the library name and the version for which it was built. By doing this, users of the library have a way to help ensure that applications do not accidentally load an incompatible library. In addition, private symbols can be hidden entirely. This release provides sample files for the four principal configurations of ncurses libraries: ncurses, ncursesw, ncursest and ncursestw. Each sample is given in two forms: ".map" These list all public symbols, together with version names. ".sym" These list all public symbols, without version names. The sample files are generated by scripts which take into account a few special cases such as [26]tack to omit many of the ncurses private symbols (beginning with "_nc_"). Here are counts of globals versus locals: Config Symbols Globals Locals "_nc_" ncurses 976 796 180 332 ncursesw 1089 905 184 343 ncursest 979 804 175 358 ncursestw 1098 914 184 372 Although only four sample configurations are presented, each is formed by merging symbols from several combinations of configure-script options, taking into account advice from downstream packagers. Because they are formed by merging, the sample files may list a symbol which is not in a given package. That is expected. The samples have been tested and are working with systems (such as Fedora, FreeBSD and Debian) which fully support this feature. There are other systems which do not support the feature, and a few (such as Solaris) which provide incomplete support. The version-naming convention used allows these sample files to build distinct libraries for ABI 5 and 6. Version names consist of * configuration name, e.g., "NCURSESW" for the wide-character libraries * ABI version (if not 5) * library name for two special cases which have the same interface across configurations: "TINFO" and "TIC" * release version * patch date (for the release version) For example, running nm -D on the libraries in the ncurses6 test package shows these symbol-versions: 0000000000000000 A NCURSES6_TIC_5.0.19991023 0000000000000000 A NCURSES6_TIC_5.1.20000708 0000000000000000 A NCURSES6_TIC_5.5.20051010 0000000000000000 A NCURSES6_TIC_5.7.20081102 0000000000000000 A NCURSES6_TIC_5.9.20150530 0000000000000000 A NCURSES6_TINFO_5.0.19991023 0000000000000000 A NCURSES6_TINFO_5.1.20000708 0000000000000000 A NCURSES6_TINFO_5.2.20001021 0000000000000000 A NCURSES6_TINFO_5.3.20021019 0000000000000000 A NCURSES6_TINFO_5.4.20040208 0000000000000000 A NCURSES6_TINFO_5.5.20051010 0000000000000000 A NCURSES6_TINFO_5.6.20061217 0000000000000000 A NCURSES6_TINFO_5.7.20081102 0000000000000000 A NCURSES6_TINFO_5.8.20110226 0000000000000000 A NCURSES6_TINFO_5.9.20150530 0000000000000000 A NCURSESW6_5.1.20000708 0000000000000000 A NCURSESW6_5.3.20021019 0000000000000000 A NCURSESW6_5.4.20040208 0000000000000000 A NCURSESW6_5.5.20051010 0000000000000000 A NCURSESW6_5.6.20061217 0000000000000000 A NCURSESW6_5.7.20081102 0000000000000000 A NCURSESW6_5.8.20110226 0000000000000000 A NCURSESW6_5.9.20150530 As a special case, this release (which makes the final change for ABI 5) is marked with release version 5.9 and patch date 20150530. Miscellaneous The new release has several improvements for performance and building. For instance: * several files in ncurses- and progs-directories were modified to allow const data used in internal tables to be put by the linker into the readonly text segment. * various improvements were made to building the Ada95 binding, both in simplifying the generated files as well as improving the way it uses gnatmake There are also new features in the libraries: * added [27]use_tioctl function * added [28]wgetdelay to retrieve _delay member of WINDOW if it happens to be opaque, e.g., in the pthread configuration. * added [29]A_ITALIC extension. * added form library extension [30]O_DYNAMIC_JUSTIFY option which can be used to override the different treatment of justification for static versus dynamic fields . * rewrote [31]putwin and [32]getwin, making an extended version which is capable of reading screen-dumps between the wide/normal ncurses configurations. These are text files, except for a magic code at the beginning: 0 string \210\210 Screen-dump (ncurses) * several changes to mouse support include: + added decoder for xterm SGR 1006 mouse mode. + added experimental support for "%u" format to terminfo. + improved behavior of wheel-mice for xterm protocol: noting that there are only button-presses for buttons "4" and "5", so there is no need to wait to combine events into double-clicks . There are a few new configure options dealing with library customization: * add "--enable-ext-putwin" configure option to turn on the extended putwin/getwin. By default, this is enabled for ABI 6 and disabled with ABI 5. * add "--enable-string-hacks" option to control whether strlcat and strlcpy may be used. Because ncurses already does the requisite buffer-limit checks, this feature is mainly of interest to quiet compiler-warnings on a few systems. * add configure option "--with-tparm-arg" to allow [33]tparm's parameters to be something more likely to be the same size as a pointer, e.g., intptr_t (again, the default is set for ABI 6). Program improvements Utilities Most of the termcap-related changes based on development of [34]tctest (termcap library checker) are implemented in the tic and infocmp programs rather than affecting the library. As noted in the [35]discussion of tctest, ncurses's ability to translate between terminfo and termcap formats has been improved at different times, but subject to feedback from "real" termcap users. There are very few of those. Nowadays, virtually all termcap users are using ncurses (or NetBSD, with its own terminfo library) and their programs are actually using terminfo rather than termcap data. Still, there are a few. A comment about the translation of the ASCII NUL character prompted a review: * Both terminfo and termcap store string capabilities as NUL-terminated strings. * In terminfo, a \0 in a terminal description is stored as \200. * There are no (known) terminals which would behave differently when sent \0 or \200. * When translating to terminfo format (or displaying a printable version of an entry using infocmp), ncurses shows \200 as \0. * It has done this since 1998 (quoting from the NEWS file): [36]980103 ... + modify _nc_tic_expand() to generate \0 rather than \200. ... + correct translation of terminfo "^@", to \200, like \0. * However, the _nc_tic_expand function (which optionally produces terminfo or termcap format) did not address this special case for termcap. Even the later 4.4BSD [37]cgetstr interprets a \0 literally, ending that string (rather than using the terminfo improvement). As a result of the review, several improvements were made to ncurses translation to/from termcap format -- and improving the checks made in tic for consistency of entries. Most of these are not of general interest, except for two new command-line options for tic and infocmp: * the "-0" option generates termcap/terminfo source on a single line. * the "-K" option provides stricter BSD-compatibility for termcap output. Other user-visible improvements and new features include: * added "-D" option to tic and infocmp, to show the database locations that it could use. * added "-s" option to toe, to sort its output. * extended "-c" and "-n" options of infocmp to allow comparing more than two entries. * modified toe's report when "-a" and "-s" options are combined, to add a column showing which entries belong to a given database. * modified the clear program to take into account the "E3" extended capability to clear the terminal's scrollback buffer. Examples Along with the library and utilities, many improvements were made to the [38]ncurses-examples. Some were made to allow building (and comparison-testing) against NetBSD curses and PDCurses. Both lack some of the X/Open Curses features, necessitating customization. But this activity was useful because it showed some remaining performance issues (which have been resolved in this release). These changes were made to verify compatibility or compare performance of ncurses: * made workarounds for compiling test-programs with NetBSD curses, though it lacks some common functions such as [39]use_env. * added dots_termcap test-program * added dots_curses test-program, for comparison with the low-level examples. * added test_setupterm test-proram to demonstrate normal/error returns from the setupterm and restartterm functions. * added "-d", "-e" and "-q" options to the demo_terminfo and demo_termcap test-programs. * added "-y" option to demo_termcap and test/demo_terminfo test-programs to demonstrate behavior with/without extended capabilities. * modified demo_termcap and demo_terminfo test-programs to make their options more directly comparable, and add "-i" option to specify a terminal description filename to parse for names to lookup. * rewrote the tests for [40]mvderwin and test for recursive [41]mvwin in the movewindow test-program. These changes were made to help with the MinGW port: * added test-screens to the ncurses test-program to show 256-characters at a time, to help with MinGW port. * modified the view test-program to load UTF-8 when built with MinGW by using regular win32 API because the MinGW functions mblen and mbtowc do not work. * added "-s" option to the view test-program to allow it to start in single-step mode, reducing size of trace files when it is used for debugging MinGW changes. These changes were made to verify new extensions in ncurses: * added [42]form_driver_w entrypoint to wide-character forms library, as well as form_driver_w test-program. * modified ncurses test-program's b/B tests to display lines only for the attributes which a given terminal supports, to make room for an italics test. * modified ncurses test-program, adding "-E" and "-T" options to demonstrate use_env versus use_tioctl. * modified ncurses test-program's c/C tests to cycle through subsets of the total number of colors, to better illustrate 8/16/88/256-colors by providing directly comparable screens. * modified the ncurses test-program to also show position reports in 'a' test. These changes were made to make the examples more useful: * added scripts for building dpkg and rpm test-packages * modified the hanoi test-program to show the minimum number of moves possible for the given number of tiles. * modified the knight test-program to show the number of choices possible for each position in automove option, e.g., to allow user to follow Warnsdorff's rule to solve the puzzle. Terminal database This release provides improvements to tic's "-c" checking option, which was used for example to * make sgr in several entries agree with other caps. * correct padding in some entries where earlier versions had miscounted the number of octal digits. There are several new terminal descriptions: * [43]mlterm is now aliased to mlterm3 * [44]nsterm is now derived from nsterm-256color * [45]putty-sco * [46]teken is FreeBSD's "xterm" console. * [47]terminator * [48]terminology * [49]tmux is derived from screen. * several screen.XXX entries support the respective variations for 256 colors. * [50]simpleterm is now 0.5 * [51]vte is aliased to vte-2012 * [52]vt520ansi A few entries use extensions (user-defined terminal capabilities): * E3, used in linux, putty and xterm-basic is tested in the [53]clear program to erase a terminal's scrollback. * TS is used in the [54]xterm+sl building block to help deprecate the misuse of tsl for xterm's title-string. * XT is used in some terminfo entries to improve usefulness for other applications than screen, which would like to pretend that xterm's title is a status-line. * xm is used in examples [55]xterm-1005 and [56]xterm-1006 to illustrate a way to make mouse handling more general A few terminals support italics and/or dim capabilities. In particular, screen does not. Documented that, and accommodated the terminals where this feature works with the A_ITALIC extension. * konsole, mlterm3 (italics) * nsterm (dim) * screen (dim) * vte (dim, italics) * xterm (dim, italics) Documentation As usual, this release * improves documentation by describing new features, * attempts to improve the description of features which users have found confusing * fills in overlooked descriptions of features which were described in the [57]NEWS file but treated sketchily in manual pages. In addition, the mechanism for producing HTML versions of the documentation has been improved: * use an improved version of [58]man2html to generate html manpages. * regenerated [59]NCURSES-Programming-HOWTO.html to fix some of the broken html emitted by docbook. Interesting bug-fixes * Ada95 binding: + modify makefile rules to ensure that the PIC option is not used when building a static library + make Ada95 build-fix for big-endian architectures such as sparc. This undoes one of the fixes from [60]20110319, which added an "Unused" member to representation clauses, replacing that with pragmas to suppress warnings about unused bits. * Color and attributes: + parenthesize parameter of COLOR_PAIR and PAIR_NUMBER in curses.h in case it happens to be a comma-expression. + improve [61]20021221 workaround for broken acs, handling a case where that ACS_xxx character is not in the acsc string but there is a known wide-character which can be used. + modify [62]init_pair to accept -1's for color value after [63]assume_default_colors has been called. + add a check in [64]start_color to limit color-pairs to 256 when extended colors are not supported. * Resizing the screen: + propagate error-returns from wresize, i.e., the internal increase_size and decrease_size functions through [65]resize_term. + add check for zero/negative dimensions for resizeterm and resize_term. + modify resizeterm to always push a KEY_RESIZE onto the fifo, even if screensize is unchanged. Modify library to push a KEY_RESIZE if there was a SIGWINCH, even if it does not call resizeterm). These changes eliminate the case where a SIGWINCH is received, but ERR is returned from wgetch or wgetnstr because the screen dimensions did not change. * Low-level interfaces + fix an old bug in the termcap emulation; "%i" was ignored in tparm because the parameters to be incremented were already on the internal stack. + change "%l" behavior in tparm to push the string length onto the stack rather than saving the formatted length into the output buffer. + modify name-comparison for tgetstr, etc., to accommodate legacy applications as well as to improve compatbility with BSD 4.2 termcap implementations (see note for [66]980725). * High-level interfaces + modify internal recursion in wgetch which handles cooked mode to check if the call to wgetnstr returned an error. This can happen when both nocbreak and nodelay are set, for instance (see note for [67]960418). + add a check in internal function waddch_nosync to ensure that tab characters are treated as control characters; some broken locales claim they are printable. + modify menu library to ensure that a menu's top-row is adjusted as needed to ensure that the current item is on the screen + fix special case where double-width character overwrites a single- width character in the first column. Configuration changes Major changes The ncurses 6.0 configure script makes changes to the default value of several configure options, depending on the --with-abi-version option (i.e., whether its value is "5" or "6"): --enable-const Feature introduced in [68]970405 supports the use of const where X/Open Curses should have, but did not. NetBSD curses does something similar with const. --enable-ext-colors Extends the cchar_t structure to allow more than 16 colors to be encoded. This applies only to the wide-character (--enable-widec) configuration. --enable-ext-mouse Modifies the encoding of mouse state to make room for a 5th mouse button. That allows one to use ncurses with a wheel mouse with xterm or similar X terminal emulators. --enable-ext-putwin Modifies the file-format written by putwin to use printable text rather than binary files, allowing getwin to read screen dumps written by differently-configured ncurses libraries. The extended getwin can still read binary screen dumps from the same configuration of ncurses. This does not change the ABI (the binary interface seen by calling applications). --enable-interop Modifies the FIELDTYPE structure used for the form library to make it more generic. --enable-lp64 Allows an application to define _LP64 to declare chtype and mmask_t as simply "unsigned" rather than the configured types using the --with-chtype and --with-mmask_t options. --enable-sp-funcs Compile-in support for extended functions which accept a SCREEN pointer, reducing the need for juggling the global SP value with [69]set_term and [70]delscreen. --with-chtype=uint32_t Makes chtype explicitly a 32-bit unsigned value. --with-mmask_t=uint32_t Makes mmask_t explicitly a 32-bit unsigned value. --with-tparm-arg=intptr_t X/Open Curses declares [71]tparm using long for each of the parameters aside from the formatting string, presuming that long and char* are the same size. This configure option uses intptr_t which provides a better guarantee of the sizes. The configure script no longer checks for antique compilers; c89 is assumed as a minimum. There are a few features from later revisions which are used when available. The configure script makes checks to turn on useful warnings from clang, gcc and icc. You should be able to build ncurses 6.0 with any of the current (or not so current) C compilers available in 2015. The configure script, by the way, makes changes which do not work with systems whose /bin/sh is non-POSIX. This mainly affects Solaris (the other vendor unix systems have followed the POSIX guidelines for the past twenty years). If you must build on Solaris, its [72]xpg4 binaries suffice, e.g., #!/bin/sh WHAT=`hostname|sed -e 's/\..*//'` OUT=configure.out cat >>$OUT <&1 | tee -a $OUT Other major changes to the configure script include: * ABI 6 is now the default, intending that the existing ABI 5 should build as before using the "--with-abi-version=5" option. * added --with-extra-suffix option to help with installing nonconflicting ncurses6 packages, e.g., avoiding header- and library-conflicts. NOTE: as a side-effect, this renames adacurses-config to adacurses5-config and adacursesw-config to adacursesw5-config * the configure script looks for gnatgcc if the Ada95 binding is built, in preference to the default gcc/cc. The script also ensures that the Ada95 binding is built with the level of optimization as the C libraries. * the configure script captures define's related to -D_XOPEN_SOURCE from the configure check and adds those to the *-config and *.pc files, to simplify use for the wide-character libraries. Configuration options There are several new (or extended) configure options: --disable-db-install Do not install the terminal database. This is used to omit features for packages, as done with --without-progs. The option simplifies building cross-compile support packages. --disable-gnat-projects This option is used for regression testing --disable-lib-suffixes Suppress the "w", "t" or "tw" suffixes which normally would be added to the library names for the --enable-widec and --with-pthread options. --with-cxx-shared When --with-shared is set, build libncurses++ as a shared library. This implicitly relies upon building with gcc/g++, since other compiler suites may have differences in the way shared libraries are built. libtool by the way has similar limitations. --with-hashed-db Extended this configure option to simplify building with different versions of Berkeley database using FreeBSD ports. --with-pc-suffix If ".pc" files are installed, optionally add a suffix to the files and corresponding package names to separate unusual configurations. If no option value is given (or if it is "none"), no suffix is added. This option is used in the test package for ncurses6. --with-xterm-kbs Configure xterm's terminfo entries to use either BS (^H, i.e., ASCII backspace) or DEL (^?, or 127). Portability MinGW Most of the portability-related work since [73]ncurses 5.9 extended and improved the MinGW port introduced in [74]ncurses 5.8. The MinGW port can be readily cross-compiled: * modified configure script to allow creating dll's for MinGW when cross-compiling. * enforced Windows-style path-separator if cross-compiling, * added scripts for test-builds of cross-compiled packages for ncurses6 to MinGW. * added pc-files to the MinGW cross-compiling test-packages. * added script for building test-packages of binaries cross-compiled to MinGW using NSIS. * added nc_mingw.h to installed headers for MinGW port; this is needed for cross-compiling [75]ncurses-examples. * added test-packages for cross-compiling ncurses-examples using the MinGW test-packages. The MinGW-specific Windows driver accounts for several changes: * wide-character display is made usable by replacing MinGW's non-working wcrtomb and wctomb functions. * implemented some display features: [76]beep, [77]flash, [78]curs_set. * the driver handles repainting on endwin/refresh combination. * modified treatment of TERM variable for MinGW port to allow explicit use of the Windows console driver by checking if $TERM is set to "#win32console" or an abbreviation of that. * the Windows driver also matches the special TERM value "unknown" * the driver now returns characters for special keys, (like ansi.sys does), when keypad mode is off, rather than returning nothing at all. * the driver checks a new environment variable [79]NCURSES_CONSOLE2 to optionally work around a deficiency in Console2 (and its descendent ConsoleZ) which hang when an application creates a console buffer. Finally, there are other improvements: * MinGW is one of the configurations where ncurses installs by default into /usr * configuration for cross-compiling uses AC_CHECK_TOOLS in preference to AC_PATH_PROGS when searching for ncurses*-config, e.g., in Ada95/configure and test/configure. * extend Windows support to work with MSYS2; + this works with a scenario where there is an ANSI-escape handler such as ansicon running in the console window. + wrap isatty calls with a macro, provide a corresponding set of support routines to address differences between MinGW and MSYS2. * ensure WINVER is defined in makefiles rather than using headers. * add check for the gnatprep "-T" option. * work around a bug introduced by [80]gcc 4.8.1 in MinGW which breaks "trace" feature. * add a driver-name method to each of the drivers. Other ports These changes affect certain platforms (ports): * the configure script knows how to build shared libraries with DragonFlyBSD and Interix. * support for AIX shared libraries is improved, tested with AIX 5.3, 6.1 and 7.1 with both gcc 4.2.4 and cc: + the shared-library suffix for AIX 5 and 6 is now ".so" + the -brtl option is used with AIX 5-7; it is needed to link with the shared libraries. * the configure --enable-pc-files option takes into account the [81]PKG_CONFIG_PATH variable. * the configure option --with-pkg-config-libdir provides control over the actual directory into which pc-files are installed. * the build scripts add explicit -ltinfo, etc., to the generated ".pc" file when ld option "--as-needed" is used, or when ncurses and tinfo are installed without using rpath. * the configure script disallows conflicting options "--with-termlib" and "--enable-term-driver". * the check for missing c++ compiler to work when no error is reported, and no variables set is improved (see note for [82]20021206). * the misc/gen_edit.sh script selects a "linux" entry which works with the current kernel rather than assuming it is always "linux3.0" * the test/configure script makes it simpler to override names of curses-related libraries, to help with linking with pdcurses in MinGW environment. * the configure-script/ifdef's allow the BSD OLD_TTY feature to be suppressed if the type of ospeed is configured using the option --with-ospeed to not be a short. By default, it is a short for termcap-compatibility. * the MKlib_gen.sh script works around a recent change in gcc 5 (released [83]mid-2015) which essentially emits multiple #line statements for the same position in a file. * the configure script works with Minix3.2 (see [84]note on portability) * OS/2 redux: + the configure script supports OS/2 kLIBC. + the --with-lib-prefix option allows configuring for old/new flavors of OS/2 EMX. * improved configure-script checks for _XOPEN_SOURCE: + the definition works starting with Solaris 10. + the definition is suppressed for IRIX64, since its header files have a conflict versus _SGI_SOURCE. _________________________________________________________________ Features of ncurses The ncurses package is fully upward-compatible with SVr4 (System V Release 4) curses: * All of the SVr4 calls have been implemented (and are documented). * ncurses supports all of the for SVr4 curses features including keyboard mapping, color, forms-drawing with ACS characters, and automatic recognition of keypad and function keys. * ncurses provides these SVr4 add-on libraries (not part of X/Open Curses): + the panels library, supporting a stack of windows with backing store. + the menus library, supporting a uniform but flexible interface for menu programming. + the form library, supporting data collection through on-screen forms. * ncurses's terminal database is fully compatible with that used by SVr4 curses. + ncurses supports user-defined capabilities which it can see, but which are hidden from SVr4 curses applications using the same terminal database. + It can be optionally configured to match the format used in related systems such as AIX and Tru64. + Alternatively, ncurses can be configured to use hashed databases rather than the directory of files used by SVr4 curses. * The ncurses utilities have options to allow you to filter terminfo entries for use with less capable curses/terminfo versions such as the HP/UX and AIX ports. The ncurses package also has many useful extensions over SVr4: * The API is 8-bit clean and base-level conformant with the X/OPEN curses specification, XSI curses (that is, it implements all BASE level features, and most EXTENDED features). It includes many function calls not supported under SVr4 curses (but portability of all calls is documented so you can use the SVr4 subset only). * Unlike SVr3 curses, ncurses can write to the rightmost-bottommost corner of the screen if your terminal has an insert-character capability. * Ada95 and C++ bindings. * Support for mouse event reporting with X Window xterm and FreeBSD and OS/2 console windows. * Extended mouse support via Alessandro Rubini's gpm package. * The function wresize allows you to resize windows, preserving their data. * The function use_default_colors allows you to use the terminal's default colors for the default color pair, achieving the effect of transparent colors. * The functions keyok and define_key allow you to better control the use of function keys, e.g., disabling the ncurses KEY_MOUSE, or by defining more than one control sequence to map to a given key code. * Support for 256-color terminals, such as modern xterm. * Support for 16-color terminals, such as aixterm and modern xterm. * Better cursor-movement optimization. The package now features a cursor-local-movement computation more efficient than either BSD's or System V's. * Super hardware scrolling support. The screen-update code incorporates a novel, simple, and cheap algorithm that enables it to make optimal use of hardware scrolling, line-insertion, and line-deletion for screen-line movements. This algorithm is more powerful than the 4.4BSD curses quickch routine. * Real support for terminals with the magic-cookie glitch. The screen-update code will refrain from drawing a highlight if the magic- cookie unattributed spaces required just before the beginning and after the end would step on a non-space character. It will automatically shift highlight boundaries when doing so would make it possible to draw the highlight without changing the visual appearance of the screen. * It is possible to generate the library with a list of pre-loaded fallback entries linked to it so that it can serve those terminal types even when no terminfo tree or termcap file is accessible (this may be useful for support of screen-oriented programs that must run in single-user mode). * The [85]tic/[86]captoinfo utility provided with ncurses has the ability to translate many termcaps from the XENIX, IBM and AT&T extension sets. * A BSD-like [87]tset utility is provided. * The ncurses library and utilities will automatically read terminfo entries from $HOME/.terminfo if it exists, and compile to that directory if it exists and the user has no write access to the system directory. This feature makes it easier for users to have personal terminfo entries without giving up access to the system terminfo directory. * You may specify a path of directories to search for compiled descriptions with the environment variable TERMINFO_DIRS (this generalizes the feature provided by TERMINFO under stock System V.) * In terminfo source files, use capabilities may refer not just to other entries in the same source file (as in System V) but also to compiled entries in either the system terminfo directory or the user's $HOME/.terminfo directory. * The table-of-entries utility [88]toe makes it easy for users to see exactly what terminal types are available on the system. * The library meets the XSI requirement that every macro entry point have a corresponding function which may be linked (and will be prototype-checked) if the macro definition is disabled with #undef. * Extensive documentation is provided (see the [89]Additional Reading section of the [90]ncurses FAQ for online documentation). Applications using ncurses The ncurses distribution includes a selection of test programs (including a few games). These are available separately as [91]ncurses-examples The ncurses library has been tested with a wide variety of applications including: cdk Curses Development Kit [92]http://invisible-island.net/cdk/ ded directory-editor [93]http://invisible-island.net/ded/ dialog the underlying application used in Slackware's setup, and the basis for similar install/configure applications on many systems. [94]http://invisible-island.net/dialog/ lynx the text WWW browser [95]http://lynx.isc.org/ Midnight Commander file manager [96]http://www.midnight-commander.org/ mutt mail utility [97]http://www.mutt.org/ ncftp file-transfer utility [98]http://www.ncftp.com/ nvi New vi uses ncurses. [99]https://sites.google.com/a/bostic.com/keithbostic/nvi tin newsreader, supporting color, MIME [100]http://www.tin.org/ as well as some that use ncurses for the terminfo support alone: minicom terminal emulator for serial modem connections [101]http://alioth.debian.org/projects/minicom/ mosh a replacement for ssh. [102]https://mosh.mit.edu/ tack terminfo action checker [103]http://invisible-island.net/ncurses/tack.html tmux terminal multiplexor [104]http://tmux.github.io/ vile vi-like-emacs may be built to use the terminfo, termcap or curses interfaces. [105]http://invisible-island.net/vile/ and finally, those which use only the termcap interface: emacs text editor [106]http://www.gnu.org/software/emacs/ screen terminal multiplexor [107]http://www.gnu.org/software/screen/ vim text editor [108]http://www.vim.org/ Development activities Zeyd Ben-Halim started ncurses from a previous package pcurses, written by Pavel Curtis. Eric S. Raymond continued development. Juergen Pfeifer wrote most of the form and menu libraries. Ongoing development work is done by [109]Thomas Dickey. Thomas Dickey also acts as the maintainer for the Free Software Foundation, which holds the [110]copyright on ncurses. Contact the current maintainers at [111]bug-ncurses@gnu.org To join the ncurses mailing list, please write email to [112]bug-ncurses-request@gnu.org containing the line: subscribe @ This list is open to anyone interested in helping with the development and testing of this package. Beta versions of ncurses and patches to the current release are made available at [113]ftp://invisible-island.net/ncurses/ . There is an archive of the mailing list here: [114]http://lists.gnu.org/archive/html/bug-ncurses (also [115]https) Related resources The release notes make scattered references to these pages, which may be interesting by themselves: * [116]man2html * [117]ncurses licensing * [118]Symbol versioning in ncurses * [119]The MinGW port of ncurses * [120]tack - terminfo action checker * [121]tar versus portability * [122]tctest - termcap library checker * [123]Terminal Database Other resources The distribution provides a newer version of the terminfo-format terminal description file once maintained by [124]Eric Raymond . Unlike the older version, the termcap and terminfo data are provided in the same file, and provides several user-definable extensions beyond the X/Open specification. You can find lots of information on terminal-related topics not covered in the terminfo file at [125]Richard Shuford's archive . * [126]Overview * [127]Release Notes + [128]Library improvements o [129]Output buffering o [130]Symbol versioning o [131]Miscellaneous + [132]Program improvements o [133]Utilities o [134]Examples + [135]Terminal database + [136]Documentation + [137]Interesting bug-fixes + [138]Configuration changes o [139]Major changes o [140]Configuration options + [141]Portability o [142]MinGW o [143]Other ports * [144]Features of ncurses * [145]Applications using ncurses * [146]Development activities * [147]Related resources * [148]Other resources References 1. http://invisible-island.net/ncurses/man/captoinfo.1m.html 2. http://invisible-island.net/ncurses/man/clear.1.html 3. http://invisible-island.net/ncurses/man/infocmp.1m.html 4. http://invisible-island.net/ncurses/man/tabs.1.html 5. http://invisible-island.net/ncurses/man/tic.1m.html 6. http://invisible-island.net/ncurses/man/toe.1m.html 7. http://invisible-island.net/ncurses/man/tput.1.html 8. http://invisible-island.net/ncurses/man/tset.1.html 9. ftp://ftp.gnu.org/gnu/ncurses/ 10. ftp://invisible-island.net/ncurses/ 11. http://invisible-island.net/ncurses/tctest.html 12. http://invisible-island.net/ncurses/ncurses-examples.html 13. http://lists.gnu.org/archive/html/bug-ncurses/2012-07/msg00029.html 14. http://invisible-island.net/ncurses/NEWS.html#t20050101 15. http://invisible-island.net/ncurses/announce-5.5.html 16. http://invisible-island.net/ncurses/ncurses-mapsyms.html 17. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-initscr 18. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-newterm 19. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Initialization 20. http://invisible-island.net/ncurses/man/ncurses.3x.html#h3-NCURSES_NO_SETBUF 21. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html 22. http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-reset_prog_mode_-reset_shell_mode 23. http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-reset_prog_mode_-reset_shell_mode 24. http://invisible-island.net/ncurses/man/curs_printw.3x.html 25. http://invisible-island.net/ncurses/ncurses-mapsyms.html 26. http://invisible-island.net/ncurses/tack.html 27. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_tioctl 28. http://invisible-island.net/ncurses/man/curs_opaque.3x.html 29. http://invisible-island.net/ncurses/man/curs_attr.3x.html#h2-PORTABILITY 30. http://invisible-island.net/ncurses/man/form_field_opts.3x.html 31. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-putwin_getwin 32. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-putwin_getwin 33. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output 34. http://invisible-island.net/ncurses/tctest.html 35. http://invisible-island.net/ncurses/tctest.html#my-better-translation 36. http://invisible-island.net/ncurses/NEWS.html#t980103 37. https://svnweb.freebsd.org/base/head/lib/libc/gen/getcap.c?revision=244092&view=markup#l784 38. http://invisible-island.net/ncurses/ncurses-examples.html 39. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_env 40. http://invisible-island.net/ncurses/man/curs_window.3x.html#h3-derwin 41. http://invisible-island.net/ncurses/man/curs_window.3x.html#h3-mvwin 42. http://invisible-island.net/ncurses/man/form_driver.3x.html#h3-form_driver_w 43. http://invisible-island.net/ncurses/terminfo.src.html#toc-_M_L_T_E_R_M 44. http://invisible-island.net/ncurses/terminfo.src.html#tic-nsterm 45. http://invisible-island.net/ncurses/terminfo.src.html#tic-putty-sco 46. http://invisible-island.net/ncurses/terminfo.src.html#tic-teken 47. http://invisible-island.net/ncurses/terminfo.src.html#toc-_T_E_R_M_I_N_A_T_O_R 48. http://invisible-island.net/ncurses/terminfo.src.html#toc-_T_E_R_M_I_N_O_L_O_G_Y 49. http://invisible-island.net/ncurses/terminfo.src.html#tic-tmux 50. http://invisible-island.net/ncurses/terminfo.src.html#toc-_S_I_M_P_L_E_T_E_R_M 51. http://invisible-island.net/ncurses/terminfo.src.html#tic-vte 52. http://invisible-island.net/ncurses/terminfo.src.html#tic-vt520ansi 53. http://aerie.jexium-island.net/ncurses/man/clear.1.html 54. http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_sl 55. http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-1005 56. http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-1006 57. http://invisible-island.net/ncurses/NEWS.html 58. http://invisible-island.net/scripts/man2html.html 59. http://invisible-island.net/ncurses/NCURSES-Programming-HOWTO.html 60. http://invisible-island.net/ncurses/NEWS.html#t20110319 61. http://invisible-island.net/ncurses/NEWS.html#t20021221 62. http://invisible-island.net/ncurses/man/curs_color.3x.html#h3-Routine-Descriptions 63. http://invisible-island.net/ncurses/man/default_colors.3x.html 64. http://invisible-island.net/ncurses/man/curs_color.3x.html#h3-Routine-Descriptions 65. http://invisible-island.net/ncurses/man/resizeterm.3x.html 66. http://invisible-island.net/ncurses/NEWS.html#t980725 67. http://invisible-island.net/ncurses/NEWS.html#t960418 68. http://invisible-island.net/ncurses/NEWS.html#t970405 69. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-set_term 70. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-delscreen 71. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output 72. http://docs.oracle.com/cd/E19253-01/html/817-0552/fhkpy.html 73. http://invisible-island.net/ncurses/announce-5.9.html 74. http://invisible-island.net/ncurses/announce-5.8.html 75. http://invisible-island.net/ncurses/ncurses-examples.html 76. http://invisible-island.net/ncurses/man/curs_beep.3x.html 77. http://invisible-island.net/ncurses/man/curs_beep.3x.html 78. http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-curs_set 79. http://invisible-island.net/ncurses/man/ncurses.3x.html#h3-NCURSES_CONSOLE2 80. http://stackoverflow.com/questions/20877689/gcc-4-8-1-minggw-d-option-does-not-work-as-usual 81. http://linux.die.net/man/1/pkg-config 82. http://invisible-island.net/ncurses/NEWS.html#t20021206 83. https://gcc.gnu.org/gcc-5/ 84. http://invisible-island.net/autoconf/portability-test.html 85. http://invisible-island.net/ncurses/man/tic.1m.html 86. http://invisible-island.net/ncurses/man/captoinfo.1m.html 87. http://invisible-island.net/ncurses/man/tset.1.html 88. http://invisible-island.net/ncurses/man/toe.1m.html 89. http://invisible-island.net/ncurses/ncurses.faq.html#additional_reading 90. http://invisible-island.net/ncurses/ncurses.faq.html 91. http://invisible-island.net/ncurses/ncurses-examples.html 92. http://invisible-island.net/cdk/ 93. http://invisible-island.net/ded/ 94. http://invisible-island.net/dialog/ 95. http://lynx.isc.org/ 96. http://www.midnight-commander.org/ 97. http://www.mutt.org/ 98. http://www.ncftp.com/ 99. https://sites.google.com/a/bostic.com/keithbostic/nvi 100. http://www.tin.org/ 101. http://alioth.debian.org/projects/minicom/ 102. https://mosh.mit.edu/ 103. http://invisible-island.net/ncurses/tack.html 104. http://tmux.github.io/ 105. http://invisible-island.net/vile/ 106. http://www.gnu.org/software/emacs/ 107. http://www.gnu.org/software/screen/ 108. http://www.vim.org/ 109. mailto:dickey@invisible-island.net 110. http://invisible-island.net/ncurses/ncurses-license.html 111. mailto:bug-ncurses@gnu.org 112. mailto:bug-ncurses-request@gnu.org 113. ftp://invisible-island.net/ncurses/ 114. http://lists.gnu.org/archive/html/bug-ncurses 115. https://lists.gnu.org/archive/html/bug-ncurses 116. http://invisible-island.net/scripts/man2html.html 117. http://invisible-island.nethttp://invisible-island.net/ncurses/ncurses-license.html 118. http://invisible-island.net/ncurses/ncurses-mapsyms.html 119. http://invisible-island.net/ncurses/ncurses-mingw.html 120. http://invisible-island.net/ncurses/tack.html 121. http://invisible-island.net/autoconf/portability-tar.html 122. http://invisible-island.net/ncurses/tctest.html 123. http://invisible-island.net/ncurses/ncurses.html#download_database 124. http://www.catb.org/~esr/terminfo/ 125. http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal 126. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-overview 127. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-release-notes 128. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-library 129. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-lib-setbuf 130. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-lib-versioning 131. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-lib-other 132. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-programs 133. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-utilities 134. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-examples 135. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-database 136. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-documentation 137. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-bug-fixes 138. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-config-config 139. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-config-major 140. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-config-options 141. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-portability 142. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-port-mingw 143. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-port-systems 144. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-features 145. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-who-uses 146. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-development 147. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-this-stuff 148. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-other-stuff ncurses-6.0-20160213/NEWS0000644000175100001440000211670412657716430013201 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: NEWS,v 1.2571 2016/02/13 21:16:08 tom Exp $ ------------------------------------------------------------------------------- This is a log of changes that ncurses has gone through since Zeyd started working with Pavel Curtis' original work, pcurses, in 1992. Changes through 1.9.9e are recorded by Zeyd M Ben-Halim. Changes since 1.9.9e are recorded by Thomas E Dickey. Contributors include those who have provided patches (even small ones), as well as those who provide useful information (bug reports, analyses). Changes with no cited author are the work of Thomas E Dickey (TD). A few contributors are given in this file by their initials. They each account for one percent or more of the changes since 1.9.9e. See the AUTHORS file for the corresponding full names. Changes through 1.9.9e did not credit all contributions; it is not possible to add this information. 20160213 + amend fix for _nc_ripoffline from 20091031 to make test/ditto.c work in threaded configuration. + move _nc_tracebits, _tracedump and _tracemouse to curses.priv.h, since they are not part of the suggested ABI6. 20160206 + define WIN32_LEAN_AND_MEAN for MinGW port, making builds faster. + modify test/ditto.c to allow $XTERM_PROG environment variable to override "xterm" as the name of the program to run in the threaded configuration. 20160130 + improve formatting of man/curs_refresh.3x and man/tset.1 manpages + regenerate HTML manpages using newer man2html to eliminate some unwanted blank lines. 20160123 + ifdef'd header-file definition of mouse_trafo() with NCURSES_NOMACROS (report by Corey Minyard). + fix some strict compiler-warnings in traces. 20160116 + tidy up comments about hardcoded 256color palette (report by Leonardo Brondani Schenkel) -TD + add putty-noapp entry, and amend putty entry to use application mode for better consistency with xterm (report by Leonardo Brondani Schenkel) -TD + modify _nc_viscbuf2() and _tracecchar_t2() to trace wide-characters as a whole rather than their multibyte equivalents. + minor fix in wadd_wchnstr() to ensure that each cell has nonzero width. + move PUTC_INIT calls next to wcrtomb calls, to avoid carry-over of error status when processing Unicode values which are not mapped. 20160102 + modify ncurses c/C color test-screens to take advantage of wide screens, reducing the number of lines used for 88- and 256-colors. + minor refinement to check versus ncv to ignore two parameters of SGR 38 and 48 when those come from color-capabilities. 20151226 + add check in tic for use of bold, etc., video attributes in the color capabilities, accounting whether the feature is listed in ncv. + add check in tic for conflict between ritm, rmso, rmul versus sgr0. 20151219 + add a paragraph to curs_getch.3x discussing key naming (discussion with James Crippen). + amend workaround for Solaris vs line-drawing to take the configure check into account. + add a configure check for wcwidth() versus the ncurses line-drawing characters, to use in special-casing systems such as Solaris. 20151212 + improve CF_XOPEN_CURSES macro used in test/configure, to define as needed NCURSES_WIDECHAR for platforms where _XOPEN_SOURCE_EXTENDED does not work. Also modified the test program to ensure that if building with ncurses, that the cchar_t type is checked, since that normally is since 20111030 ifdef'd depending on this test. + improve 20121222 workaround for broken acs, letting Solaris "work" in spite of its misconfigured wcwidth which marks all of the line drawing characters as double-width. 20151205 + update form_cursor.3x, form_post.3x, menu_attributes.3x to list function names in NAME section (patch by Jason McIntyre). + minor fixes to manpage NAME/SYNOPSIS sections to consistently use rule that either all functions which are prototyped in SYNOPSIS are listed in the NAME section, or the manual-page name is the sole item listed in the NAME section. The latter is used to reduce clutter, e.g., for the top-level library manual pages as well as for certain feature-pages such as SP-funcs and threading (prompted by patches by Jason McIntyre). 20151128 + add option to preserve leading whitespace in form fields (patch by Leon Winter). + add missing assignment in lib_getch.c to make notimeout() work (Debian #805618). + add 't' toggle for notimeout() function in test/ncurses.c a/A screens + add viewdata terminal description (Alexandre Montaron). + fix a case in tic/infocmp for formatting capabilities where a backslash at the end of a string was mishandled. + fix some typos in curs_inopts.3x (Benno Schulenberg). 20151121 + fix some inconsistencies in the pccon* entries -TD + add bold to pccon+sgr+acs and pccon-base (Tati Chevron). + add keys f12-f124 to pccon+keys (Tati Chevron). + add test/test_sgr.c program to exercise all combinations of sgr. 20151107 + modify tset's assignment to TERM in its output to reflect the name by which the terminal description is found, rather than the primary name. That was an unnecessary part from the initial conversion of tset from termcap to terminfo. The termcap program in 4.3BSD did this to avoid using the short 2-character name (report by Rich Burridge). + minor fix to configure script to ensure that rules for resulting.map are only generated when needed (cf: 20151101). + modify configure script to handle the case where tic-library is renamed, but the --with-debug option is used by itself without normal or shared libraries (prompted by comment in Debian #803482). 20151101 + amend change for pkg-config which allows build of pc-files when no valid pkg-config library directory was configured to suppress the actual install if it is not overridden to a valid directory at install time (cf: 20150822). + modify editing script which generates resulting.map to work with the clang configuration on recent FreeBSD, which gives an error on an empty "local" section. + fix a spurious "(Part)" message in test/ncurses.c b/B tests due to incorrect attribute-masking. 20151024 + modify MKexpanded.c to update the expansion of a temporary filename to "expanded.c", for use in trace statements. + modify layout of b/B tests in test/ncurses.c to allow for additional annotation on the right margin; some terminals with partial support did not display well. + fix typo in curs_attr.3x (patch by Sven Joachim). + fix typo in INSTALL (patch by Tomas Cech). + improve configure check for setting WILDCARD_SYMS variable; on ppc64 the variable is in the Data section rather than Text (patch by Michel Normand, Novell #946048). + using configure option "--without-fallbacks" incorrectly caused FALLBACK_LIST to be set to "no" (patch by Tomas Cech). + updated minitel entries to fix kel problem with emacs, and add minitel1b-nb (Alexandre Montaron). + reviewed/updated nsterm entry Terminal.app in OSX -TD + replace some dead URLs in comments with equivalents from the Internet Archive -TD + update config.guess, config.sub from http://git.savannah.gnu.org/cgit/config.git 20151017 + modify ncurses/Makefile.in to sort keys.list in POSIX locale (Debian #801864, patch by Esa Peuha). + remove an early-return from _nc_do_color, which can interfere with data needed by bkgd when ncurses is configured with extended colors (patch by Denis Tikhomirov). > fixes for OS/2 (patches by KO Myung-Hun) + use button instead of kbuf[0] in EMX-specific part of lib_mouse.c + support building with libtool on OS/2 + use stdc++ on OS/2 kLIBC + clear cf_XOPEN_SOURCE on OS/2 20151010 + add configure check for openpty to test/configure script, for ditto. + minor fixes to test/view.c in investigating Debian #790847. + update autoconf patch to 2.52.20150926, incorporates a fix for Cdk. + add workaround for breakage of POSIX makefiles by recent binutils change. + improve check for working poll() by using posix_openpt() as a fallback in case there is no valid terminal on the standard input (prompted by discussion on bug-ncurses mailing list, Debian #676461). 20150926 + change makefile rule for removing resulting.map to distclean rather than clean. + add /lib/terminfo to terminfo-dirs in ".deb" test-package. + add note on portability of resizeterm and wresize to manual pages. 20150919 + clarify in resizeterm.3x how KEY_RESIZE is pushed onto the input stream. + clarify in curs_getch.3x that the keypad mode affects ability to read KEY_MOUSE codes, but does not affect KEY_RESIZE. + add overlooked build-fix needed with Cygwin for separate Ada95 configure script, cf: 20150606 (report by Nicolas Boulenguez) 20150912 + fixes for configure/build using clang on OSX (prompted by report by William Gallafent). + do not redefine "inline" in ncurses_cfg.h; this was originally to solve a problem with gcc/g++, but is aggravated by clang's misuse of symbols to pretend it is gcc. + add braces to configure script to prevent unwanted add of "-lstdc++" to the CXXLIBS symbol. + improve/update test-program used for checking existence of stdc++ library. + if $CXXLIBS is set, the linkage test uses that in addition to $LIBS 20150905 + add note in curs_addch.3x about line-drawing when it depends upon UTF-8. + add tic -q option for consistency with infocmp, use it to suppress all comments from the "tic -I" output. + modify infocmp -q option to suppress the "Reconstructed from" header. + add infocmp/tic -Q option, which allows one to dump the compiled form of the terminal entry, in hexadecimal or base64. 20150822 + sort options in usage message for infocmp, to make it simpler to see unused letters. + update usage message for tic, adding "-0" option. + documented differences in ESCDELAY versus AIX's implementation. + fix some compiler warnings from ports. + modify --with-pkg-config-libdir option to make it possible to install ".pc" files even if pkg-config is not found (adapted from patch by Joshua Root). 20150815 + disallow "no" as a possible value for "--with-shlib-version" option, overlooked in cleanup-changes for 20000708 (report by Tommy Alex). + update release notes in INSTALL. + regenerate llib-* files to help with review for release notes. 20150810 + workaround for Debian #65617, which was fixed in mawk's upstream releases in 2009 (report by Sven Joachim). See http://invisible-island.net/mawk/CHANGES.html#t20090727 20150808 6.0 release for upload to ftp.gnu.org 20150808 + build-fix for Ada95 on older platforms without stdint.h + build-fix for Solaris, whose /bin/sh and /usr/bin/sed are non-POSIX. + update release announcement, summarizing more than 800 changes across more than 200 snapshots. + minor fixes to manpages, etc., to simplify linking from announcement page. 20150725 + updated llib-* files. + build-fixes for ncurses library "test_progs" rule. + use alternate workaround for gcc 5.x feature (adapted from patch by Mikhail Peselnik). + add status line to tmux via xterm+sl (patch by Nicholas Marriott). + fixes for st 0.5 from testing with tack -TD + review/improve several manual pages to break up wall-of-text: curs_add_wch.3x, curs_attr.3x, curs_bkgd.3x, curs_bkgrnd.3x, curs_getcchar.3x, curs_getch.3x, curs_kernel.3x, curs_mouse.3x, curs_outopts.3x, curs_overlay.3x, curs_pad.3x, curs_termattrs.3x curs_trace.3x, and curs_window.3x 20150719 + correct an old logic error for %A and %O in tparm (report by "zreed"). + improve documentation for signal handlers by adding section in the curs_initscr.3x page. + modify logic in make_keys.c to not assume anything about the size of strnames and strfnames variables, since those may be functions in the thread- or broken-linker configurations (problem found by Coverity). + modify test/configure script to check for pthreads configuration, e.g., ncursestw library. 20150711 + modify scripts to build/use test-packages for the pthreads configuration of ncurses6. + add references to ttytype and termcap symbols in demo_terminfo.c and demo_termcap.c to ensure that when building ncursest.map, etc., that the corresponding names such as _nc_ttytype are added to the list of versioned symbols (report by Werner Fink) + fix regression from 20150704 (report/patch by Werner Fink). 20150704 + fix a few problems reported by Coverity. + fix comparison against "/usr/include" in misc/gen-pkgconfig.in (report by Daiki Ueno, Debian #790548, cf: 20141213). 20150627 + modify configure script to remove deprecated ABI 5 symbols when building ABI 6. + add symbols _nc_Default_Field, _nc_Default_Form, _nc_has_mouse to map-files, but marked as deprecated so that they can easily be suppressed from ABI 6 builds (Debian #788610). + comment-out "screen.xterm" entry, and inherit screen.xterm-256color from xterm-new (report by Richard Birkett) -TD + modify read_entry.c to set the error-return to -1 if no terminal databases were found, as documented for setupterm. + add test_setupterm.c to demonstrate normal/error returns from the setupterm and restartterm functions. + amend cleanup change from 20110813 which removed redundant definition of ret_error, etc., from tinfo_driver.c, to account for the fact that it should return a bool rather than int (report/analysis by Johannes Schindelin). 20150613 + fix overflow warning for OSX with lib_baudrate.c (cf: 20010630). + modify script used to generate map/sym files to mark 5.9.20150530 as the last "5.9" version, and regenerated the files. That makes the files not use ".current" for the post-5.9 symbols. This also corrects the label for _nc_sigprocmask used in when weak symbols are configured for the ncursest/ncursestw libraries (prompted by discussion with Sven Joachim). + fix typo in NEWS (report by Sven Joachim). 20150606 pre-release + make ABI 6 the default by updates to dist.mk and VERSION, with the intention that the existing ABI 5 should build as before using the "--with-abi-version=5" option. + regenerate ada- and man-html documentation. + minor fixes to color- and util-manpages. + fix a regression in Ada95/gen/Makefile.in, to handle special case of Cygwin, which uses the broken-linker feature. + amend fix for CF_NCURSES_CONFIG used in test/configure to assume that ncurses package scripts work when present for cross-compiling, as the lessor of two evils (cf: 20150530). + add check in configure script to disallow conflicting options "--with-termlib" and "--enable-term-driver". + move defaults for "--disable-lp64" and "--with-versioned-syms" into CF_ABI_DEFAULTS macro. 20150530 + change private type for Event_Mask in Ada95 binding to work when mmask_t is set to 32-bits. + remove spurious "%;" from st entry (report by Daniel Pitts) -TD + add vte-2014, update vte to use that -TD + modify tic and infocmp to "move" a diagnostic for tparm strings that have a syntax error to tic's "-c" option (report by Daniel Pitts). + fix two problems with configure script macros (Debian #786436, cf: 20150425, cf: 20100529). 20150523 + add 'P' menu item to test/ncurses.c, to show pad in color. + improve discussion in curs_color.3x about color rendering (prompted by comment on Stack Overflow forum): + remove screen-bce.mlterm, since mlterm does not do "bce" -TD + add several screen.XXX entries to support the respective variations for 256 colors -TD + add putty+fnkeys* building-block entries -TD + add smkx/rmkx to capabilities analyzed with infocmp "-i" option. 20150516 + amend change to ".pc" files to only use the extra loader flags which may have rpath options (report by Sven Joachim, cf: 20150502). + change versioning for dpkg's in test-packages for Ada95 and ncurses-examples for consistency with Debian, to work with package updates. + regenerate html manpages. + clarify handling of carriage return in waddch manual page; it was discussed only in the portability section (prompted by comment on Stack Overflow forum): 20150509 + add test-packages for cross-compiling ncurses-examples using the MinGW test-packages. These are only the Debian packages; RPM later. + cleanup format of debian/copyright files + add pc-files to the MinGW cross-compiling test-packages. + correct a couple of places in gen-pkgconfig.in to handle renaming of the tinfo library. 20150502 + modify the configure script to allow different default values for ABI 5 versus ABI 6. + add wgetch-events to test-packages. + add a note on how to build ncurses-examples to test/README. + fix a memory leak in delscreen (report by Daniel Kahn Gillmor, Debian #783486) -TD + remove unnecessary ';' from E3 capabilities -TD + add tmux entry, derived from screen (patch by Nicholas Marriott). + split-out recent change to nsterm-bce as nsterm-build326, and add nsterm-build342 to reflect changes with successive releases of OSX (discussion with Leonardo B Schenkel) + add xon, ich1, il1 to ibm3161 (patch by Stephen Powell, Debian #783806) + add sample "magic" file, to document ext-putwin. + modify gen-pkgconfig.in to add explicit -ltinfo, etc., to the generated ".pc" file when ld option "--as-needed" is used, or when ncurses and tinfo are installed without using rpath (prompted by discussion with Sylvain Bertrand). + modify test-package for ncurses6 to omit rpath feature when installed in /usr. + add OSX's "*.dSYM" to clean-rules in makefiles. + make extra-suffix work for OSX configuration, e.g., for shared libraries. + modify Ada95/configure script to work with pkg-config + move test-package for ncurses6 to /usr, since filename-conflicts have been eliminated. + corrected build rules for Ada95/gen/generate; it does not depend on the ncurses library aside from headers. + reviewed man pages, fixed a few other spelling errors. + fix a typo in curs_util.3x (Sven Joachim). + use extra-suffix in some overlooked shared library dependencies found by 20150425 changes for test-packages. + update config.guess, config.sub from http://git.savannah.gnu.org/cgit/config.git 20150425 + expanded description of tgetstr's area pointer in manual page (report by Todd M Lewis). + in-progress changes to modify test-packages to use ncursesw6 rather than ncursesw, with updated configure scripts. + modify CF_NCURSES_CONFIG in Ada95- and test-configure scripts to check for ".pc" files via pkg-config, but add a linkage check since frequently pkg-config configurations are broken. + modify misc/gen-pkgconfig.in to include EXTRA_LDFLAGS, e.g., for the rpath option. + add 'dim' capability to screen entry (report by Leonardo B Schenkel) + add several key definitions to nsterm-bce to match preconfigured keys, e.g., with OSX 10.9 and 10.10 (report by Leonardo B Schenkel) + fix repeated "extra-suffix" in ncurses-config.in (cf: 20150418). + improve term_variables manual page, adding section on the terminfo long-name symbols which are defined in the term.h header. + fix bug in lib_tracebits.c introduced in const-fixes (cf: 20150404). 20150418 + avoid a blank line in output from tabs program by ending it with a carriage return as done in FreeBSD (patch by James Clarke). + build-fix for the "--enable-ext-putwin" feature when not using wide characters (report by Werner Fink). + modify autoconf macros to use scripting improvement from xterm. + add -brtl option to compiler options on AIX 5-7, needed to link with the shared libraries. + add --with-extra-suffix option to help with installing nonconflicting ncurses6 packages, e.g., avoiding header- and library-conflicts. NOTE: as a side-effect, this renames adacurses-config to adacurses5-config and adacursesw-config to adacursesw5-config + modify debian/rules test package to suffix programs with "6". + clarify in curs_inopts.3x that window-specific settings do not inherit into new windows. 20150404 + improve description of start_color() in the manual. + modify several files in ncurses- and progs-directories to allow const data used in internal tables to be put by the linker into the readonly text segment. 20150329 + correct cut/paste error for "--enable-ext-putwin" that made it the same as "--enable-ext-colors" (report by Roumen Petrov) 20150328 + add "-f" option to test/savescreen.c to help with testing/debugging the extended putwin/getwin. + add logic for writing/reading combining characters in the extended putwin/getwin. + add "--enable-ext-putwin" configure option to turn on the extended putwin/getwin. 20150321 + in-progress changes to provide an extended version of putwin and getwin which will be capable of reading screen-dumps between the wide/normal ncurses configurations. These are text files, except for a magic code at the beginning: 0 string \210\210 Screen-dump (ncurses) 20150307 + document limitations of getwin in manual page (prompted by discussion with John S Urban). + extend test/savescreen.c to demonstrate that color pair values and graphic characters can be restored using getwin. 20150228 + modify win_driver.c to eliminate the constructor, to make it more usable in an application which may/may not need the console window (report by Grady Martin). 20150221 + capture define's related to -D_XOPEN_SOURCE from the configure check and add those to the *-config and *.pc files, to simplify use for the wide-character libraries. + modify ncurses.spec to accommodate Fedora21's location of pkg-config directory. + correct sense of "--disable-lib-suffixes" configure option (report by Nicolas Boos, cf: 20140426). 20150214 + regenerate html manpages using improved man2html from work on xterm. + regenerated ".map" and ".sym" files using improved script, accounting for the "--enable-weak-symbols" configure option (report by Werner Fink). 20150131 + regenerated ".map" and ".sym" files using improved script, showing the combinations of configure options used at each stage. 20150124 + add configure check to determine if "local: _*;" can be used in the ".map" files to selectively omit symbols beginning with "_". On at least recent FreeBSD, the wildcard applies to all "_" symbols. + remove obsolete/conflicting rule for ncurses.map from ncurses/Makefile.in (cf: 20130706). 20150117 + improve description in INSTALL of the --with-versioned-syms option. + add combination of --with-hashed-db and --with-ticlib to configurations for ".map" files (report by Werner Fink). 20150110 + add a step to generating ".map" files, to declare any remaining symbols beginning with "_" as local, at the last version node. + improve configure checks for pkg-config, addressing a variant found with FreeBSD ports. + modify win_driver.c to provide characters for special keys, like ansi.sys, when keypad mode is off, rather than returning nothing at all (discussion with Eli Zaretskii). + add "broken_linker" and "hashed-db" configure options to combinations use for generating the ".map" and ".sym" files. + avoid using "ld" directly when creating shared library, to simplify cross-compiles. Also drop "-Bsharable" option from shared-library rules for FreeBSD and DragonFly (FreeBSD #196592). + fix a memory leak in form library Free_RegularExpression_Type() (report by Pavel Balaev). 20150103 + modify_nc_flush() to retry if interrupted (patch by Stian Skjelstad). + change map files to make _nc_freeall a global, since it may be used via the Ada95 binding when checking for memory leaks. + improve sed script used in 20141220 to account for wide-, threaded- variations in ABI 6. 20141227 + regenerate ".map" files, using step overlooked in 20141213 to use the same patch-dates across each file to match ncurses.map (report by Sven Joachim). 20141221 + fix an incorrect variable assignment in 20141220 changes (report by Sven Joachim). 20141220 + updated Ada95/configure with macro changes from 20141213 + tie configure options --with-abi-version and --with-versioned-syms together, so that ABI 6 libraries have distinct symbol versions from the ABI 5 libraries. + replace obsolete/nonworking link to man2html with current one, regenerate html-manpages. 20141213 + modify misc/gen-pkgconfig.in to add -I option for include-directory when using both --prefix and --disable-overwrite (report by Misty De Meo). + add configure option --with-pc-suffix to allow minor renaming of ".pc" files and the corresponding library. Use this in the test package for ncurses6. + modify configure script so that if pkg-config is not installed, it is still possible to install ".pc" files (report by Misty De Meo). + updated ".sym" files, removing symbols which are marked as "local" in the corresponding ".map" files. + updated ".map" files to reflect move of comp_captab and comp_hash from tic-library to tinfo-library in 20090711 (report by Sven Joachim). 20141206 + updated ".map" files so that each symbol that may be shared across the different library configurations has the same label. Some review is needed to ensure these are really compatible. + modify MKlib_gen.sh to work around change in development version of gcc introduced here: https://gcc.gnu.org/ml/gcc-patches/2014-06/msg02185.html https://gcc.gnu.org/ml/gcc-patches/2014-07/msg00236.html (reports by Marcus Shawcroft, Maohui Lei). + improved configure macro CF_SUBDIR_PATH, from lynx changes. 20141129 + improved ".map" files by generating them with a script that builds ncurses with several related configurations and merges the results. A further refinement is planned, to make the tic- and tinfo-library symbols use the same versions across each of the four configurations which are represented (reports by Sven Joachim, Werner Fink). 20141115 + improve description of limits for color values and color pairs in curs_color.3x (prompted by patch by Tim van der Molen). + add VERSION file, using first field in that to record the ABI version used for configure --with-libtool --disable-libtool-version + add configure options for applying the ".map" and ".sym" files to the ncurses, form, menu and panel libraries. + add ".map" and ".sym" files to show exported symbols, e.g., for symbol-versioning. 20141101 + improve strict compiler-warnings by adding a cast in TRACE_RETURN and making a new TRACE_RETURN1 macro for cases where the cast does not apply. 20141025 + in-progress changes to integrate the win32 console driver with the msys2 configuration. 20141018 + reviewed terminology 0.6.1, add function key definitions. None of the vt100-compatibility issues were improved -TD + improve infocmp conversion of extended capabilities to termcap by correcting the limit check against parametrized[], as well as filling in a check if the string happens to have parameters, e.g., "xm" in recent changes. + add check for zero/negative dimensions for resizeterm and resize_term (report by Mike Gran). 20141011 + add experimental support for xterm's 1005 mouse mode, to use in a demonstration of its limitations. + add experimental support for "%u" format to terminfo. + modify test/ncurses.c to also show position reports in 'a' test. + minor formatting fixes to _nc_trace_mmask_t, make this function exported to help with debugging mouse changes. + improve behavior of wheel-mice for xterm protocol, noting that there are only button-presses for buttons "4" and "5", so there is no need to wait to combine events into double-clicks (report/analysis by Greg Field). + provide examples xterm-1005 and xterm-1006 terminfo entries -TD + implement decoder for xterm SGR 1006 mouse mode. 20140927 + implement curs_set in win_driver.c + implement flash in win_driver.c + fix an infinite loop in win_driver.c if the command-window loses focus. + improve the non-buffered mode, i.e., NCURSES_CONSOLE2, of win_driver.c by temporarily changing the buffer-size to match the window-size to eliminate the scrollback. Also enforce a minimum screen-size of 24x80 in the non-buffered mode. + modify generated misc/Makefile to suppress install.data from the dependencies if the --disable-db-install option is used, compensating for the top-level makefile changes used to add ncurses*-config in the 20140920 changes (report by Steven Honeyman). 20140920 + add ncurses*-config to bin-directory of sample package-scripts. + add check to ensure that getopt is available; this is a problem in some older cross-compiler environments. + expanded on the description of --disable-overwrite in INSTALL (prompted by reports by Joakim Tjernlund, Thomas Klausner). See Gentoo #522586 and NetBSD #49200 for examples. which relates to the clarified guidelines. + remove special logic from CF_INCLUDE_DIRS which adds the directory for the --includedir from the build (report by Joakim Tjernlund). + add case for Unixware to CF_XOPEN_SOURCE, from lynx changes. + update config.sub from http://git.savannah.gnu.org/cgit/config.git 20140913 + add a configure check to ignore some of the plethora of non-working C++ cross-compilers. + build-fixes for Ada95 with gnat 4.9 20140906 + build-fix and other improvements for port of ncurses-examples to NetBSD. + minor compiler-warning fixes. 20140831 + modify test/demo_termcap.c and test/demo_terminfo.c to make their options more directly comparable, and add "-i" option to specify a terminal description filename to parse for names to lookup. 20140823 + fix special case where double-width character overwrites a single- width character in the first column (report by Egmont Koblinger, cf: 20050813). 20140816 + fix colors in ncurses 'b' test which did not work after changing it to put the test-strings in subwindows (cf: 20140705). + merge redundant SEE-ALSO sections in form and menu manpages. 20140809 + modify declarations for user-data pointers in C++ binding to use reinterpret_cast to facilitate converting typed pointers to void* in user's application (patch by Adam Jiang). + regenerated html manpages. + add note regarding cause and effect for TERM in ncurses manpage, having noted clueless verbiage in Terminal.app's "help" file which reverses cause/effect. + remove special fallback definition for NCURSES_ATTR_T, since macros have resolved type-mismatches using casts (cf: 970412). + fixes for win_driver.c: + handle repainting on endwin/refresh combination. + implement beep(). + minor cleanup. 20140802 + minor portability fixes for MinGW: + ensure WINVER is defined in makefiles rather than using headers + add check for gnatprep "-T" option + work around bug introduced by gcc 4.8.1 in MinGW which breaks "trace" feature: http://stackoverflow.com/questions/20877689/gcc-4-8-1-minggw-d-option-does-not-work-as-usual + fix most compiler warnings for Cygwin ncurses-examples. + restore "redundant" -I options in test/Makefile.in, since they are typically needed when building the derived ncurses-examples package (cf: 20140726). 20140726 + eliminate some redundant -I options used for building libraries, and ensure that ${srcdir} is added to the include-options (prompted by discussion with Paul Gilmartin). + modify configure script to work with Minix3.2 + add form library extension O_DYNAMIC_JUSTIFY option which can be used to override the different treatment of justification for static versus dynamic fields (adapted from patch by Leon Winter). + add a null pointer check in test/edit_field.c (report/analysis by Leon Winter, cf: 20130608). 20140719 + make workarounds for compiling test-programs with NetBSD curses. + improve configure macro CF_ADD_LIBS, to eliminate repeated -l/-L options, from xterm changes. 20140712 + correct Charable() macro check for A_ALTCHARSET in wide-characters. + build-fix for position-debug code in tty_update.c, to work with or without sp-funcs. 20140705 + add w/W toggle to ncurses.c 'B' test, to demonstrate permutation of video-attributes and colors with double-width character strings. 20140629 + correct check in win_driver.c for saving screen contents, e.g., when NCURSES_CONSOLE2 is set (cf: 20140503). + reorganize b/B menu items in ncurses.c, putting the test-strings into subwindows. This is needed for a planned change to use Unicode fullwidth characters in the test-screens. + correct update to form status for _NEWTOP, broken by fixes for compiler warnings (patch by Leon Winter, cf: 20120616). 20140621 + change shared-library suffix for AIX 5 and 6 to ".so", avoiding conflict with the static library (report by Ben Lentz). + document RPATH_LIST in INSTALLATION file, as part of workarounds for upgrading an ncurses library using the "--with-shared" option. + modify test/ncurses.c c/C tests to cycle through subsets of the total number of colors, to better illustrate 8/16/88/256-colors by providing directly comparable screens. + add test/dots_curses.c, for comparison with the low-level examples. 20140614 + fix dereference before null check found by Coverity in tic.c (cf: 20140524). + fix sign-extension bug in read_entry.c which prevented "toe" from reading empty "screen+italics" entry. + modify sgr for screen.xterm-new to support dim capability -TD + add dim capability to nsterm+7 -TD + cancel dim capability for iterm -TD + add dim, invis capabilities to vte-2012 -TD + add sitm/ritm to konsole-base and mlterm3 -TD 20140609 > fix regression in screen terminfo entries (reports by Christian Ebert, Gabriele Balducci) -TD + revert the change to screen; see notes for why this did not work -TD + cancel sitm/ritm for entries which extend "screen", to work around screen's hardcoded behavior for SGR 3 -TD 20140607 + separate masking for sgr in vidputs from sitm/ritm, which do not overlap with sgr functionality. + remove unneeded -i option from adacurses-config; put -a in the -I option for consistency (patch by Pascal Pignard). + update xterm-new terminfo entry to xterm patch #305 -TD + change format of test-scripts for Debian Ada95 and ncurses-examples packages to quilted to work around Debian #700177 (cf: 20130907). + build fix for form_driver_w.c as part of ncurses-examples package for older ncurses than 20131207. + add Hello World example to adacurses-config manpage. + remove unused --enable-pc-files option from Ada95/configure. + add --disable-gnat-projects option for testing. + revert changes to Ada95 project-files configuration (cf: 20140524). + corrected usage message in adacurses-config. 20140524 + fix typo in ncurses manpage for the NCURSES_NO_MAGIC_COOKIE environment variable. + improve discussion of input-echoing in curs_getch.3x + clarify discussion in curs_addch.3x of wrapping. + modify parametrized.h to make fln non-padded. + correct several entries which had termcap-style padding used in terminfo: adm21, aj510, alto-h19, att605-pc, x820 -TD + correct syntax for padding in some entries: dg211, h19 -TD + correct ti924-8 which had confused padding versus octal escapes -TD + correct padding in sbi entry -TD + fix an old bug in the termcap emulation; "%i" was ignored in tparm() because the parameters to be incremented were already on the internal stack (report by Corinna Vinschen). + modify tic's "-c" option to take into account the "-C" option to activate additional checks which compare the results from running tparm() on the terminfo expressions versus the translated termcap expressions. + modify tic to allow it to read from FIFOs (report by Matthieu Fronton, cf: 20120324). > patches by Nicolas Boulenguez: + explicit dereferences to suppress some style warnings. + when c_varargs_to_ada.c includes its header, use double quotes instead of <>. + samples/ncurses2-util.adb: removed unused with clause. The warning was removed by an obsolete pragma. + replaced Unreferenced pragmas with Warnings (Off). The latter, available with older GNATs, needs no configure test. This also replaces 3 untested Unreferenced pragmas. + simplified To_C usage in trace handling. Using two parameters allows some basic formatting, and avoids a warning about security with some compiler flags. + for generated Ada sources, replace many snippets with one pure package. + removed C_Chtype and its conversions. + removed C_AttrType and its conversions. + removed conversions between int, Item_Option_Set, Menu_Option_Set. + removed int, Field_Option_Set, Item_Option_Set conversions. + removed C_TraceType, Attribute_Option_Set conversions. + replaced C.int with direct use of Eti_Error, now enumerated. As it was used in a case statement, values were tested by the Ada compiler to be consecutive anyway. + src/Makefile.in: remove duplicate stanza + only consider using a project for shared libraries. + style. Silent gnat-4.9 warning about misplaced "then". + generate shared library project to honor ADAFLAGS, LDFLAGS. 20140510 + cleanup recently introduced compiler warnings for MingW port. + workaround for ${MAKEFLAGS} configure check versus GNU make 4.0, which introduces more than one gratuitous incompatibility. 20140503 + add vt520ansi terminfo entry (patch by Mike Gran) + further improve MinGW support for the scenario where there is an ANSI-escapes handler such as ansicon running in the console window (patch by Juergen Pfeifer). 20140426 + add --disable-lib-suffixes option (adapted from patch by Juergen Pfeifer). + merge some changes from Juergen Pfeifer's work with MSYS2, to simplify later merging: + use NC_ISATTY() macro for isatty() in library + add _nc_mingw_isatty() and related functions to windows-driver + rename terminal driver entrypoints to simplify grep's + remove a check in the sp-funcs flavor of newterm() which allowed only the first call to newterm() to succeed (report by Thomas Beierlein, cf: 20090927). 20140419 + update config.guess, config.sub from http://git.savannah.gnu.org/cgit/config.git 20140412 + modify configure script: + drop the -no-gcc option from Intel compiler, from lynx changes. + extend the --with-hashed-db configure option to simplify building with different versions of Berkeley database using FreeBSD ports. + improve initialization for MinGW port (Juergen Pfeifer): + enforce Windows-style path-separator if cross-compiling, + add a driver-name method to each of the drivers, + allow the Windows driver name to match "unknown", ignoring case, + lengthen the built-in name for the Windows console driver to "#win32console", and + move the comparison of driver-names allowing abbreviation, e.g., to "#win32con" into the Windows console driver. 20140329 + add check in tic for mismatch between ccc and initp/initc + cancel ccc in putty-256color and konsole-256color for consistency with the cancelled initc capability (patch by Sven Zuhlsdorf). + add xterm+256setaf building block for various terminals which only get the 256-color feature half-implemented -TD + updated "st" entry (leaving the 0.1.1 version as "simpleterm") to 0.4.1 -TD 20140323 + fix typo in "mlterm" entry (report by Gabriele Balducci) -TD 20140322 + use types from in sample build-scripts for chtype, etc. + modify configure script and curses.h.in to allow the types specified using --with-chtype and related options to be defined in + add terminology entry -TD + add mlterm3 entry, use that as "mlterm" -TD + inherit mlterm-256color from mlterm -TD 20140315 + modify _nc_New_TopRow_and_CurrentItem() to ensure that the menu's top-row is adjusted as needed to ensure that the current item is on the screen (patch by Johann Klammer). + add wgetdelay() to retrieve _delay member of WINDOW if it happens to be opaque, e.g., in the pthread configuration (prompted by patch by Soren Brinkmann). 20140308 + modify ifdef in read_entry.c to handle the case where NCURSES_USE_DATABASE is not defined (patch by Xin Li). + add cast in form_driver_w() to fix ARM build (patch by Xin Li). + add logic to win_driver.c to save/restore screen contents when not allocating a console-buffer (cf: 20140215). 20140301 + clarify error-returns from newwin (report by Ruslan Nabioullin). 20140222 + fix some compiler warnings in win_driver.c + updated notes for wsvt25 based on tack and vttest -TD + add teken entry to show actual properties of FreeBSD's "xterm" console -TD 20140215 + in-progress changes to win_driver.c to implement output without allocating a console-buffer. This uses a pre-existing environment variable NCGDB used by Juergen Pfeifer for debugging (prompted by discussion with Erwin Waterlander regarding Console2, which hangs when reading in an allocated console-buffer). + add -t option to gdc.c, and modify to accept "S" to step through the scrolling-stages. + regenerate NCURSES-Programming-HOWTO.html to fix some of the broken html emitted by docbook. 20140209 + modify CF_XOPEN_SOURCE macro to omit followup check to determine if _XOPEN_SOURCE can/should be defined. g++ 4.7.2 built on Solaris 10 has some header breakage due to its own predefinition of this symbol (report by Jean-Pierre Flori, Sage #15796). 20140201 + add/use symbol NCURSES_PAIRS_T like NCURSES_COLOR_T, to illustrate which "short" types are for color pairs and which are color values. + fix build for s390x, by correcting field bit offsets in generated representation clauses when int=32 long=64 and endian=big, or at least on s390x (patch by Nicolas Boulenguez). + minor cleanup change to test/form_driver_w.c (patch by Gaute Hope). 20140125 + remove unnecessary ifdef's in Ada95/gen/gen.c, which reportedly do not work as is with gcc 4.8 due to fixes using chtype cast made for new compiler warnings by gcc 4.8 in 20130824 (Debian #735753, patch by Nicolas Boulenguez). 20140118 + apply includesubdir variable which was introduced in 20130805 to gen-pkgconfig.in (Debian #735782). 20131221 + further improved man2html, used this to fix broken links in html manpages. See ftp://invisible-island.net/ncurses/patches/man2html 20131214 + modify configure-script/ifdef's to allow OLD_TTY feature to be suppressed if the type of ospeed is configured using the option --with-ospeed to not be a short. By default, it is a short for termcap-compatibility (adapted from suggestion by Christian Weisgerber). + correct a typo in _nc_baudrate() (patch by Christian Weisgerber, cf: 20061230). + fix a few -Wlogical-op warnings. + updated llib-l* files. 20131207 + add form_driver_w() entrypoint to wide-character forms library, as well as test program form_driver_w (adapted from patch by Gaute Hope). 20131123 + minor fix for CF_GCC_WARNINGS to special-case options which are not recognized by clang. 20131116 + add special case to configure script to move _XOPEN_SOURCE_EXTENDED definition from CPPFLAGS to CFLAGS if it happens to be needed for Solaris, because g++ errors with that definition (report by Jean-Pierre Flori, Sage #15268). + correct logic in infocmp's -i option which was intended to ignore strings which correspond to function-keys as candidates for piecing together initialization- or reset-strings. The problem dates to 1.9.7a, but was overlooked until changes in -Wlogical-op warnings for gcc 4.8 (report by David Binderman). + updated CF_GCC_WARNINGS to documented options for gcc 4.9.0, moving checks for -Wextra and -Wdeclaration-after-statement into the macro, and adding checks for -Wignored-qualifiers, -Wlogical-op and -Wvarargs + updated CF_CURSES_UNCTRL_H and CF_SHARED_OPTS macros from ongoing work on cdk. + update config.sub from http://git.savannah.gnu.org/cgit/config.git 20131110 + minor cleanup of terminfo.tail 20131102 + use TS extension to describe xterm's title-escapes -TD + modify terminator and nsterm-s to use xterm+sl-twm building block -TD + update hurd.ti, add xenl to reflect 2011-03-06 change in http://git.savannah.gnu.org/cgit/hurd/hurd.git/log/console/display.c (Debian #727119). + simplify pfkey expression in ansi.sys -TD 20131027 + correct/simplify ifdef's for cur_term versus broken-linker and reentrant options (report by Jean-Pierre Flori, cf: 20090530). + modify release/version combinations in test build-scripts to make them more consistent with other packages. 20131019 + add nc_mingw.h to installed headers for MinGW port; needed for compiling ncurses-examples. + add rpm-script for testing cross-compile of ncurses-examples. 20131014 + fix new typo in CF_ADA_INCLUDE_DIRS macro (report by Roumen Petrov). 20131012 + fix a few compiler warnings in progs and test. + minor fix to package/debian-mingw/rules, do not strip dll's. + minor fixes to configure script for empty $prefix, e.g., when doing cross-compiles to MinGW. + add script for building test-packages of binaries cross-compiled to MinGW using NSIS. 20131005 + minor fixes for ncurses-example package and makefile. + add scripts for test-builds of cross-compiler packages for ncurses6 to MinGW. 20130928 + some build-fixes for ncurses-examples with NetBSD-6.0 curses, though it lacks some common functions such as use_env() which is not yet addressed. + build-fix and some compiler warning fixes for ncurses-examples with OpenBSD 5.3 + fix a possible null-pointer reference in a trace message from newterm. + quiet a few warnings from NetBSD 6.0 namespace pollution by nonstandard popcount() function in standard strings.h header. + ignore g++ 4.2.1 warnings for "-Weffc++" in c++/cursesmain.cc + fix a few overlooked places for --enable-string-hacks option. 20130921 + fix typo in curs_attr.3x (patch by Sven Joachim, cf: 20130831). + build-fix for --with-shared option for DragonFly and FreeBSD (report by Rong-En Fan, cf: 20130727). 20130907 + build-fixes for MSYS for two test-programs (patches by Ray Donnelly, Alexey Pavlov). + revert change to two of the dpkg format files, to work with dpkg before/after Debian #700177. + fix gcc -Wconversion warning in wattr_get() macro. + add msys and msysdll to known host/configuration types (patch by Alexey Pavlov). + modify CF_RPATH_HACK configure macro to not rely upon "-u" option of sort, improving portability. + minor improvements for test-programs from reviewing Solaris port. + update config.guess, config.sub from http://git.savannah.gnu.org/cgit/config.git 20130831 + modify test/ncurses.c b/B tests to display lines only for the attributes which a given terminal supports, to make room for an italics test. + completed ncv table in terminfo.tail; it did not list the wide character codes listed in X/Open Curses issue 7. + add A_ITALIC extension (prompted by discussion with Egmont Koblinger). 20130824 + fix some gcc 4.8 -Wconversion warnings. + change format of dpkg test-scripts to quilted to work around bug introduced by Debian #700177. + discard cached keyname() values if meta() is changed after a value was cached using (report by Kurban Mallachiev). 20130816 + add checks in tic to warn about terminals which lack cursor addressing, capabilities or having those, are marked as hard_copy or generic_type. + use --without-progs in mingw-ncurses rpm. + split out _nc_init_termtype() from alloc_entry.c to use in MinGW port when tic and other programs are not needed. 20130805 + minor fixes to the --disable-overwrite logic, to ensure that the configured $(includedir) is not cancelled by the mingwxx-filesystem rpm macros. + add --disable-db-install configure option, to simplify building cross-compile support packages. + add mingw-ncurses.spec file, for testing cross-compiles. 20130727 + improve configure macros from ongoing work on cdk, dialog, xterm: + CF_ADD_LIB_AFTER - fix a problem with -Wl options + CF_RPATH_HACK - add missing result-message + CF_SHARED_OPTS - modify to use $rel_builddir in cygwin and mingw dll symbols (which can be overridden) rather than explicit "../". + CF_SHARED_OPTS - modify NetBSD and DragonFly symbols to use ${CC} rather than ${LD} to improve rpath support. + CF_SHARED_OPTS - add a symbol to denote the temporary files that are created by the macro, to simplify clean-rules. + CF_X_ATHENA - trim extra libraries to work with -Wl,--as-needed + fix a regression in hashed-database support for NetBSD, which uses the key-size differently from other implementations (cf: 20121229). 20130720 + further improvements for setupterm manpage, clarifying the initialization of cur_term. 20130713 + improve manpages for initscr and setupterm. + minor compiler-warning fixes 20130706 + add fallback defs for and (cf: 20120225). + add check for size of wchar_t, use that to suppress a chunk of wcwidth.h in MinGW port. + quiet linker warnings for MinGW cross-compile with dll's using the --enable-auto-import flag. + add ncurses.map rule to ncurses/Makefile to help diagnose symbol table issues. 20130622 + modify the clear program to take into account the E3 extended capability to clear the terminal's scrollback buffer (patch by Miroslav Lichvar, Redhat #815790). + clarify in resizeterm manpage that LINES and COLS are updated. + updated ansi example in terminfo.tail, correct misordered example of sgr. + fix other doclifter warnings for manpages + remove unnecessary ".ta" in terminfo.tail, add missing ".fi" (patch by Eric Raymond). 20130615 + minor changes to some configure macros to make them more reusable. + fixes for tabs program (prompted by report by Nick Andrik). + corrected logic in command-line parsing of -a and -c predefined tab-lists options. + allow "-0" and "-8" options to be combined with others, e.g.,"-0d". + make warning messages more consistent with the other utilities by not printing the full pathname of the program. + add -V option for consistency with other utilities. + fix off-by-one in columns for tabs program when processing an option such as "-5" (patch by Nick Andrik). 20130608 + add to test/demo_forms.c examples of using the menu-hooks as well as showing how the menu item user-data can be used to pass a callback function pointer. + add test/dots_termcap.c + remove setupterm call from test/demo_termcap.c + build-fix if --disable-ext-funcs configure option is used. + modified test/edit_field.c and test/demo_forms.c to move the lengths into a user-data structure, keeping the original string for later expansion to free-format input/out demo. + modified test/demo_forms.c to load data from file. + added note to clarify Terminal.app's non-emulation of the various terminal types listed in the preferences dialog -TD + fix regression in error-reporting in lib_setup.c (Debian #711134, cf: 20121117). + build-fix for a case where --enable-broken_linker and --enable-reentrant options are combined (report by George R Goffe). 20130525 + modify mvcur() to distinguish between internal use by the ncurses library, and external callers, preventing it from reading the content of the screen which is only nonblank when curses calls have updated it. This makes test/dots_mvcur.c avoid painting colored cells in the left margin of the display. + minor fix to test/dots_mvcur.c + move configured symbols USE_DATABASE and USE_TERMCAP to term.h as NCURSES_USE_DATABASE and NCURSES_USE_TERMCAP to allow consistent use of these symbols in term_entry.h 20130518 + corrected ifdefs in test/testcurs.c to allow comparison of mouse interface versus pdcurses (cf: 20130316). + add pow() to configure-check for math library, needed since 20121208 for test/hanoi (Debian #708056). + regenerated html manpages. + update doctype used for html documentation. 20130511 + move nsterm-related entries out of "obsolete" section to more plausible "ansi consoles" -TD + additional cleanup of table-of-contents by reordering -TD + revise fix for check for 8-bit value in _nc_insert_ch(); prior fix prevented inserts when video attributes were attached to the data (cf: 20121215) (Redhat #959534). 20130504 + fixes for issues found by Coverity: + correct FNKEY() macro in progs/dump_entry.c, allowing kf11-kf63 to display when infocmp's -R option is used for HP or AIX subsets. + fix dead-code issue with test/movewindow.c + improve limited-checking in _nc_read_termtype(). 20130427 + fix clang 3.2 warning in progs/dump_entry.c + drop AC_TYPE_SIGNAL check; ncurses relies on c89 and later. 20130413 + add MinGW to cases where ncurses installs by default into /usr (prompted by discussion with Daniel Silva Ferreira). + add -D option to infocmp's usage-message (patch by Miroslav Lichvar). + add a missing 'int' type for main function in configure check for type of bool variable, to work with clang 3.2 (report by Dmitri Gribenko). + improve configure check for static_cast, to work with clang 3.2 (report by Dmitri Gribenko). + re-order rule for demo.o and macros defining header dependencies in c++/Makefile.in to accommodate gmake (report by Dmitri Gribenko). 20130406 + improve parameter checking in copywin(). + modify configure script to work around OS X's "libtool" program, to choose glibtool instead. At the same time, chance the autoconf macro to look for a "tool" rather than a "prog", to help with potential use in cross-compiling. + separate the rpath usage for c++ library from demo program (Redhat #911540) + update/correct header-dependencies in c++ makefile (report by Werner Fink). + add --with-cxx-shared to dpkg-script, as done for rpm-script. 20130324 + build-fix for libtool configuration (reports by Daniel Silva Ferreira and Roumen Petrov). 20130323 + build-fix for OS X, to handle changes for --with-cxx-shared feature (report by Christian Ebert). + change initialization for vt220, similar entries for consistency with cursor-key strings (NetBSD #47674) -TD + further improvements to linux-16color (Benjamin Sittler) 20130316 + additional fix for tic.c, to allocate missing buffer space. + eliminate configure-script warnings for gen-pkgconfig.in + correct typo in sgr string for sun-color, add bold for consistency with sgr, change smso for consistency with sgr -TD + correct typo in sgr string for terminator -TD + add blink to the attributes masked by ncv in linux-16color (report by Benjamin Sittler) + improve warning message from post-load checking for missing "%?" operator by tic/infocmp by showing the entry name and capability. + minor formatting improvement to tic/infocmp -f option to ensure line split after "%;". + amend scripting for --with-cxx-shared option to handle the debug library "libncurses++_g.a" (report by Sven Joachim). 20130309 + amend change to toe.c for reading from /dev/zero, to ensure that there is a buffer for the temporary filename (cf: 20120324). + regenerated html manpages. + fix typo in terminfo.head (report by Sven Joachim, cf: 20130302). + updated some autoconf macros: + CF_ACVERSION_CHECK, from byacc 1.9 20130304 + CF_INTEL_COMPILER, CF_XOPEN_SOURCE from luit 2.0-20130217 + add configure option --with-cxx-shared to permit building libncurses++ as a shared library when using g++, e.g., the same limitations as libtool but better integrated with the usual build configuration (Redhat #911540). + modify MKkey_defs.sh to filter out build-path which was unnecessarily shown in curses.h (Debian #689131). 20130302 + add section to terminfo manpage discussing user-defined capabilities. + update manpage description of NCURSES_NO_SETBUF, explaining why it is obsolete. + add a check in waddch_nosync() to ensure that tab characters are treated as control characters; some broken locales claim they are printable. + add some traces to the Windows console driver. + initialize a temporary array in _nc_mbtowc, needed for some cases of raw input in MinGW port. 20130218 + correct ifdef on change to lib_twait.c (report by Werner Fink). + update config.guess, config.sub 20130216 + modify test/testcurs.c to work with mouse for ncurses as it does for pdcurses. + modify test/knight.c to work with mouse for pdcurses as it does for ncurses. + modify internal recursion in wgetch() which handles cooked mode to check if the call to wgetnstr() returned an error. This can happen when both nocbreak() and nodelay() are set, for instance (report by Nils Christopher Brause) (cf: 960418). + fixes for issues found by Coverity: + add a check for valid position in ClearToEOS() + fix in lib_twait.c when --enable-wgetch-events is used, pointer use after free. + improve a limit-check in make_hash.c + fix a memory leak in hashed_db.c 20130209 + modify test/configure script to make it simpler to override names of curses-related libraries, to help with linking with pdcurses in MinGW environment. + if the --with-terminfo-dirs configure option is not used, there is no corresponding compiled-in value for that. Fill in "no default value" for that part of the manpage substitution. 20130202 + correct initialization in knight.c which let it occasionally make an incorrect move (cf: 20001028). + improve documentation of the terminfo/termcap search path. 20130126 + further fixes to mvcur to pass callback function (cf: 20130112), needed to make test/dots_mvcur work. + reduce calls to SetConsoleActiveScreenBuffer in win_driver.c, to help reduce flicker. + modify configure script to omit "+b" from linker options for very old HP-UX systems (report by Dennis Grevenstein) + add HP-UX workaround for missing EILSEQ on old HP-UX systems (patch by Dennis Grevenstein). + restore memmove/strdup support for antique systems (request by Dennis Grevenstein). + change %l behavior in tparm to push the string length onto the stack rather than saving the formatted length into the output buffer (report by Roy Marples, cf: 980620). 20130119 + fixes for issues found by Coverity: + fix memory leak in safe_sprintf.c + add check for return-value in tty_update.c + correct initialization for -s option in test/view.c + add check for numeric overflow in lib_instr.c + improve error-checking in copywin + add advice in infocmp manpage for termcap users (Debian #698469). + add "-y" option to test/demo_termcap and test/demo_terminfo to demonstrate behavior with/without extended capabilities. + updated termcap manpage to document legacy termcap behavior for matching capability names. + modify name-comparison for tgetstr, etc., to accommodate legacy applications as well as to improve compatbility with BSD 4.2 termcap implementations (Debian #698299) (cf: 980725). 20130112 + correct prototype in manpage for vid_puts. + drop ncurses/tty/tty_display.h, ncurses/tty/tty_input.h, since they are unused in the current driver model. + modify mvcur to use stdout except when called within the ncurses library. + modify vidattr and vid_attr to use stdout as documented in manpage. + amend changes made to buffering in 20120825 so that the low-level putp() call uses stdout rather than ncurses' internal buffering. The putp_sp() call does the same, for consistency (Redhat #892674). 20130105 + add "-s" option to test/view.c to allow it to start in single-step mode, reducing size of trace files when it is used for debugging MinGW changes. + revert part of 20121222 change to tinfo_driver.c + add experimental logic in win_driver.c to improve optimization of screen updates. This does not yet work with double-width characters, so it is ifdef'd out for the moment (prompted by report by Erwin Waterlander regarding screen flicker). 20121229 + fix coverity warnings regarding copying into fixed-size buffers. + add throw-declarations in the c++ binding per Coverity warning. + minor changes to new-items for consistent reference to bug-report numbers. 20121222 + add *.dSYM directories to clean-rule in ncurses directory makefile, for Mac OS builds. + add a configure check for gcc option -no-cpp-precomp, which is not available in all Mac OS X configurations (report by Andras Salamon, cf: 20011208). + improve 20021221 workaround for broken acs, handling a case where that ACS_xxx character is not in the acsc string but there is a known wide-character which can be used. 20121215 + fix several warnings from clang 3.1 --analyze, includes correcting a null-pointer check in _nc_mvcur_resume. + correct display of double-width characters with MinGW port (report by Erwin Waterlander). + replace MinGW's wcrtomb(), fixing a problem with _nc_viscbuf > fixes based on Coverity report: + correct coloring in test/bs.c + correct check for 8-bit value in _nc_insert_ch(). + remove dead code in progs/tset.c, test/linedata.h + add null-pointer checks in lib_tracemse.c, panel.priv.h, and some test-programs. 20121208 + modify test/knight.c to show the number of choices possible for each position in automove option, e.g., to allow user to follow Warnsdorff's rule to solve the puzzle. + modify test/hanoi.c to show the minimum number of moves possible for the given number of tiles (prompted by patch by Lucas Gioia). > fixes based on Coverity report: + remove a few redundant checks. + correct logic in test/bs.c, when randomly placing a specific type of ship. + check return value from remove/unlink in tic. + check return value from sscanf in test/ncurses.c + fix a null dereference in c++/cursesw.cc + fix two instances of uninitialized variables when configuring for the terminal driver. + correct scope of variable used in SetSafeOutcWrapper macro. + set umask when calling mkstemp in tic. + initialize wbkgrndset() temporary variable when extended-colors are used. 20121201 + also replace MinGW's wctomb(), fixing a problem with setcchar(). + modify test/view.c to load UTF-8 when built with MinGW by using regular win32 API because the MinGW functions mblen() and mbtowc() do not work. 20121124 + correct order of color initialization versus display in some of the test-programs, e.g., test_addstr.c > fixes based on Coverity report: + delete windows on exit from some of the test-programs. 20121117 > fixes based on Coverity report: + add missing braces around FreeAndNull in two places. + various fixes in test/ncurses.c + improve limit-checks in tinfo/make_hash.c, tinfo/read_entry.c + correct malloc size in progs/infocmp.c + guard against negative array indices in test/knight.c + fix off-by-one limit check in test/color_name.h + add null-pointer check in progs/tabs.c, test/bs.c, test/demo_forms.c, test/inchs.c + fix memory-leak in tinfo/lib_setup.c, progs/toe.c, test/clip_printw.c, test/demo_menus.c + delete unused windows in test/chgat.c, test/clip_printw.c, test/insdelln.c, test/newdemo.c on error-return. 20121110 + modify configure macro CF_INCLUDE_DIRS to put $CPPFLAGS after the local -I include options in case someone has set conflicting -I options in $CPPFLAGS (prompted by patch for ncurses/Makefile.in by Vassili Courzakis). + modify the ncurses*-config scripts to eliminate relative paths from the RPATH_LIST variable, e.g., "../lib" as used in installing shared libraries or executables. 20121102 + realign these related pages: curs_add_wchstr.3x curs_addchstr.3x curs_addstr.3x curs_addwstr.3x and fix a long-ago error in curs_addstr.3x which said that a -1 length parameter would only write as much as fit onto one line (report by Reuben Thomas). + remove obsolete fallback _nc_memmove() for memmove()/bcopy(). + remove obsolete fallback _nc_strdup() for strdup(). + cancel any debug-rpm in package/ncurses.spec + reviewed vte-2012, reverted most of the change since it was incorrect based on testing with tack -TD + un-cancel the initc in vte-256color, since this was implemented starting with version 0.20 in 2009 -TD 20121026 + improve malloc/realloc checking (prompted by discussion in Redhat #866989). + add ncurses test-program as "ncurses6" to the rpm- and dpkg-scripts. + updated configure macros CF_GCC_VERSION and CF_WITH_PATHLIST. The first corrects pattern used for Mac OS X's customization of gcc. 20121017 + fix change to _nc_scroll_optimize(), which incorrectly freed memory (Redhat #866989). 20121013 + add vte-2012, gnome-2012, making these the defaults for vte/gnome (patch by Christian Persch). 20121006 + improve CF_GCC_VERSION to work around Debian's customization of gcc --version message. + improve configure macros as done in byacc: + drop 2.13 compatibility; use 2.52.xxxx version only since EMX port has used that for a while. + add 3rd parameter to AC_DEFINE's to allow autoheader to run, i.e., for experimental use. + remove unused configure macros. + modify configure script and makefiles to quiet new autoconf warning for LIBS_TO_MAKE variable. + modify configure script to show $PATH_SEPARATOR variable. + update config.guess, config.sub 20120922 + modify setupterm to set its copy of TERM to "unknown" if configured for the terminal driver and TERM was null or empty. + modify treatment of TERM variable for MinGW port to allow explicit use of the windows console driver by checking if $TERM is set to "#win32con" or an abbreviation of that. + undo recent change to fallback definition of vsscanf() to build with older Solaris compilers (cf: 20120728). 20120908 + add test-screens to test/ncurses to show 256-characters at a time, to help with MinGW port. 20120903 + simplify varargs logic in lib_printw.c; va_copy is no longer needed there. + modifications for MinGW port to make wide-character display usable. 20120902 + regenerate configure script (report by Sven Joachim, cf: 20120901). 20120901 + add a null-pointer check in _nc_flush (cf: 20120825). + fix a case in _nc_scroll_optimize() where the _oldnums_list array might not be allocated. + improve comparisons in configure.in for unset shell variables. 20120826 + increase size of ncurses' output-buffer, in case of very small initial screen-sizes. + fix evaluation of TERMINFO and TERMINFO_DIRS default values as needed after changes to use --datarootdir (reports by Gabriele Balducci, Roumen Petrov). 20120825 + change output buffering scheme, using buffer maintained by ncurses rather than stdio, to avoid problems with SIGTSTP handling (report by Brian Bloniarz). 20120811 + update autoconf patch to 2.52.20120811, adding --datarootdir (prompted by discussion with Erwin Waterlander). + improve description of --enable-reentrant option in README and the INSTALL file. + add nsterm-256color, make this the default nsterm -TD + remove bw from nsterm-bce, per testing with tack -TD 20120804 + update test/configure, adding check for tinfo library. + improve limit-checks for the getch fifo (report by Werner Fink). + fix a remaining mismatch between $with_echo and the symbols updated for CF_DISABLE_ECHO affecting parameters for mk-2nd.awk (report by Sven Joachim, cf: 20120317). + modify followup check for pkg-config's library directory in the --enable-pc-files option to validate syntax (report by Sven Joachim, cf: 20110716). 20120728 + correct path for ncurses_mingw.h in include/headers, in case build is done outside source-tree (patch by Roumen Petrov). + modify some older xterm entries to align with xterm source -TD + separate "xterm-old" alias from "xterm-r6" -TD + add E3 extended capability to xterm-basic and putty -TD + parenthesize parameters of other macros in curses.h -TD + parenthesize parameter of COLOR_PAIR and PAIR_NUMBER in curses.h in case it happens to be a comma-expression, etc. (patch by Nick Black). 20120721 + improved form_request_by_name() and menu_request_by_name(). + eliminate two fixed-size buffers in toe.c + extend use_tioctl() to have expected behavior when use_env(FALSE) and use_tioctl(TRUE) are called. + modify ncurses test-program, adding -E and -T options to demonstrate use_env() versus use_tioctl(). 20120714 + add use_tioctl() function (adapted from patch by Werner Fink, Novell #769788): 20120707 + add ncurses_mingw.h to installed headers (prompted by patch by Juergen Pfeifer). + clarify return-codes from wgetch() in response to SIGWINCH (prompted by Novell #769788). + modify resizeterm() to always push a KEY_RESIZE onto the fifo, even if screensize is unchanged. Modify _nc_update_screensize() to push a KEY_RESIZE if there was a SIGWINCH, even if it does not call resizeterm(). These changes eliminate the case where a SIGWINCH is received, but ERR returned from wgetch or wgetnstr because the screen dimensions did not change (Novell #769788). 20120630 + add --enable-interop to sample package scripts (suggested by Juergen Pfeifer). + update CF_PATH_SYNTAX macro, from mawk changes. + modify mk-0th.awk to allow for generating llib-ltic, etc., though some work is needed on cproto to work with lib_gen.c to update llib-lncurses. + remove redundant getenv() cal in database-iterator leftover from cleanup in 20120622 changes (report by Sven Joachim). 20120622 + add -d, -e and -q options to test/demo_terminfo and test/demo_termcap + fix caching of environment variables in database-iterator (patch by Philippe Troin, Redhat #831366). 20120616 + add configure check to distinguish clang from gcc to eliminate warnings about unused command-line parameters when compiler warnings are enabled. + improve behavior when updating terminfo entries which are hardlinked by allowing for the possibility that an alias has been repurposed to a new primary name. + fix some strict compiler warnings based on package scripts. + further fixes for configure check for working poll (Debian #676461). 20120608 + fix an uninitialized variable in -c/-n logic for infocmp changes (cf: 20120526). + corrected fix for building c++ binding with clang 3.0 (report/patch by Richard Yao, Gentoo #417613, cf: 20110409) + correct configure check for working poll, fixing the case where stdin is redirected, e.g., in rpm/dpkg builds (Debian #676461). + add rpm- and dpkg-scripts, to test those build-environments. The resulting packages are used only for testing. 20120602 + add kdch1 aka "Remove" to vt220 and vt220-8 entries -TD + add kdch1, etc., to qvt108 -TD + add dl1/il1 to some entries based on dl/il values -TD + add dl to simpleterm -TD + add consistency-checks in tic for insert-line vs delete-line controls, and insert/delete-char keys + correct no-leaks logic in infocmp when doing comparisons, fixing duplicate free of entries given via the command-line, and freeing entries loaded from the last-but-one of files specified on the command-line. + add kdch1 to wsvt25 entry from NetBSD CVS (reported by David Lord, analysis by Martin Husemann). + add cnorm/civis to wsvt25 entry from NetBSD CVS (report/analysis by Onno van der Linden). 20120526 + extend -c and -n options of infocmp to allow comparing more than two entries. + correct check in infocmp for number of terminal names when more than two are given. + correct typo in curs_threads.3x (report by Yanhui Shen on freebsd-hackers mailing list). 20120512 + corrected 'op' for bterm (report by Samuel Thibault) -TD + modify test/background.c to demonstrate a background character holding a colored ACS_HLINE. The behavior differs from SVr4 due to the thick- and double-line extension (cf: 20091003). + modify handling of acs characters in PutAttrChar to avoid mapping an unmapped character to a space with A_ALTCHARSET set. + rewrite vt520 entry based on vt420 -TD 20120505 + remove p6 (bold) from opus3n1+ for consistency -TD + remove acs stuff from env230 per clues in Ingres termcap -TD + modify env230 sgr/sgr0 to match other capabilities -TD + modify smacs/rmacs in bq300-8 to match sgr/sgr0 -TD + make sgr for dku7202 agree with other caps -TD + make sgr for ibmpc agree with other caps -TD + make sgr for tek4107 agree with other caps -TD + make sgr for ndr9500 agree with other caps -TD + make sgr for sco-ansi agree with other caps -TD + make sgr for d410 agree with other caps -TD + make sgr for d210 agree with other caps -TD + make sgr for d470c, d470c-7b agree with other caps -TD + remove redundant AC_DEFINE for NDEBUG versus Makefile definition. + fix a back-link in _nc_delink_entry(), which is needed if ncurses is configured with --enable-termcap and --disable-getcap. 20120428 + fix some inconsistencies between vt320/vt420, e.g., cnorm/civis -TD + add eslok flag to dec+sl -TD + dec+sl applies to vt320 and up -TD + drop wsl width from xterm+sl -TD + reuse xterm+sl in putty and nsca-m -TD + add ansi+tabs to vt520 -TD + add ansi+enq to vt220-vt520 -TD + fix a compiler warning in example in ncurses-intro.doc (Paul Waring). + added paragraph in keyname manpage telling how extended capabilities are interpreted as key definitions. + modify tic's check of conflicting key definitions to include extended capability strings in addition to the existing check on predefined keys. 20120421 + improve cleanup of temporary files in tic using atexit(). + add msgr to vt420, similar DEC vtXXX entries -TD + add several missing vt420 capabilities from vt220 -TD + factor out ansi+pp from several entries -TD + change xterm+sl and xterm+sl-twm to include only the status-line capabilities and not "use=xterm", making them more generally useful as building-blocks -TD + add dec+sl building block, as example -TD 20120414 + add XT to some terminfo entries to improve usefulness for other applications than screen, which would like to pretend that xterm's title is a status-line. -TD + change use-clauses in ansi-mtabs, hp2626, and hp2622 based on review of ordering and overrides -TD + add consistency check in tic for screen's "XT" capability. + add section in terminfo.src summarizing the user-defined capabilities used in that file -TD 20120407 + fix an inconsistency between tic/infocmp "-x" option; tic omits all non-standard capabilities, while infocmp was ignoring only the user definable capabilities. + improve special case in tic parsing of description to allow it to be followed by terminfo capabilities. Previously the description had to be the last field on an input line to allow tic to distinguish between termcap and terminfo format while still allowing commas to be embedded in the description. + correct variable name in gen_edit.sh which broke configurability of the --with-xterm-kbs option. + revert 2011-07-16 change to "linux" alias, return to "linux2.2" -TD + further amend 20110910 change, providing for configure-script override of the "linux" terminfo entry to install and changing the default for that to "linux2.2" (Debian #665959). 20120331 + update Ada95/configure to use CF_DISABLE_ECHO (cf: 20120317). + correct order of use-clauses in st-256color -TD + modify configure script to look for gnatgcc if the Ada95 binding is built, in preference to the default gcc/cc (suggested by Nicolas Boulenguez). + modify configure script to ensure that the same -On option used for the C compiler in CFLAGS is used for ADAFLAGS rather than simply using "-O3" (suggested by Nicolas Boulenguez) 20120324 + amend an old fix so that next_char() exits properly for empty files, e.g., from reading /dev/null (cf: 20080804). + modify tic so that it can read from the standard input, or from a character device. Because tic uses seek's, this requires writing the data to a temporary file first (prompted by remark by Sven Joachim) (cf: 20000923). 20120317 + correct a check made in lib_napms.c, so that terminfo applications can again use napms() (cf: 20110604). + add a note in tic.h regarding required casts for ABSENT_BOOLEAN (cf: 20040327). + correct scripting for --disable-echo option in test/configure. + amend check for missing c++ compiler to work when no error is reported, and no variables set (cf: 20021206). + add/use configure macro CF_DISABLE_ECHO. 20120310 + fix some strict compiler warnings for abi6 and 64-bits. + use begin_va_copy/end_va_copy macros in lib_printw.c (cf: 20120303). + improve a limit-check in infocmp.c (Werner Fink): 20120303 + minor tidying of terminfo.tail, clarify reason for limitation regarding mapping of \0 to \200 + minor improvement to _nc_copy_termtype(), using memcpy to replace loops. + fix no-leaks checking in test/demo_termcap.c to account for multiple calls to setupterm(). + modified the libgpm change to show previous load as a problem in the debug-trace. > merge some patches from OpenSUSE rpm (Werner Fink): + ncurses-5.7-printw.dif, fixes for varargs handling in lib_printw.c + ncurses-5.7-gpm.dif, do not dlopen libgpm if already loaded by runtime linker + ncurses-5.6-fallback.dif, do not free arrays and strings from static fallback entries 20120228 + fix breakage in tic/infocmp from 20120225 (report by Werner Fink). 20120225 + modify configure script to allow creating dll's for MinGW when cross-compiling. + add --enable-string-hacks option to control whether strlcat and strlcpy may be used. The same issue applies to OpenBSD's warnings about snprintf, noting that this function is weakly standardized. + add configure checks for strlcat, strlcpy and snprintf, to help reduce bogus warnings with OpenBSD builds. + build-fix for OpenBSD 4.9 to supply consistent intptr_t declaration (cf:20111231) + update config.guess, config.sub 20120218 + correct CF_ETIP_DEFINES configure macro, making it exit properly on the first success (patch by Pierre Labastie). + improve configure macro CF_MKSTEMP by moving existence-check for mkstemp out of the AC_TRY_RUN, to help with cross-compiles. + improve configure macro CF_FUNC_POLL from luit changes to detect broken implementations, e.g., with Mac OS X. + add configure option --with-tparm-arg + build-fix for MinGW cross-compiling, so that make_hash does not depend on TTY definition (cf: 20111008). 20120211 + make sgr for xterm-pcolor agree with other caps -TD + make sgr for att5425 agree with other caps -TD + make sgr for att630 agree with other caps -TD + make sgr for linux entries agree with other caps -TD + make sgr for tvi9065 agree with other caps -TD + make sgr for ncr260vt200an agree with other caps -TD + make sgr for ncr160vt100pp agree with other caps -TD + make sgr for ncr260vt300an agree with other caps -TD + make sgr for aaa-60-dec-rv, aaa+dec agree with other caps -TD + make sgr for cygwin, cygwinDBG agree with other caps -TD + add configure option --with-xterm-kbs to simplify configuration for Linux versus most other systems. 20120204 + improved tic -D option, avoid making target directory and provide better diagnostics. 20120128 + add mach-gnu (Debian #614316, patch by Samuel Thibault) + add mach-gnu-color, tweaks to mach-gnu terminfo -TD + make sgr for sun-color agree with smso -TD + make sgr for prism9 agree with other caps -TD + make sgr for icl6404 agree with other caps -TD + make sgr for ofcons agree with other caps -TD + make sgr for att5410v1, att4415, att620 agree with other caps -TD + make sgr for aaa-unk, aaa-rv agree with other caps -TD + make sgr for avt-ns agree with other caps -TD + amend fix intended to separate fixups for acsc to allow "tic -cv" to give verbose warnings (cf: 20110730). + modify misc/gen-edit.sh to make the location of the tabset directory consistent with misc/Makefile.in, i.e., using ${datadir}/tabset (Debian #653435, patch by Sven Joachim). 20120121 + add --with-lib-prefix option to allow configuring for old/new flavors of OS/2 EMX. + modify check for gnat version to allow for year, as used in FreeBSD port. + modify check_existence() in db_iterator.c to simply check if the path is a directory or file, according to the need. Checking for directory size also gives no usable result with OS/2 (cf: 20120107). + support OS/2 kLIBC (patch by KO Myung-Hun). 20120114 + several improvements to test/movewindow.c (prompted by discussion on Linux Mint forum): + modify movement commands to make them continuous + rewrote the test for mvderwin + rewrote the test for recursive mvwin + split-out reusable CF_WITH_NCURSES_ETC macro in test/configure.in + updated configure macro CF_XOPEN_SOURCE, build-fixes for Mac OS X and OpenBSD. + regenerated html manpages. 20120107 + various improvments for MinGW (Juergen Pfeifer): + modify stat() calls to ignore the st_size member + drop mk-dlls.sh script. + change recommended regular expression library. + modify rain.c to allow for threaded configuraton. + modify tset.c to allow for case when size-change logic is not used. 20111231 + modify toe's report when -a and -s options are combined, to add a column showing which entries belong to a given database. + add -s option to toe, to sort its output. + modify progs/toe.c, simplifying use of db-iterator results to use caching improvements from 20111001 and 20111126. + correct generation of pc-files when ticlib or termlib options are given to rename the corresponding tic- or tinfo-libraries (report by Sven Joachim). 20111224 + document a portability issue with tput, i.e., that scripts which work with ncurses may fail in other implementations that do no parameter analysis. + add putty-sco entry -TD 20111217 + review/fix places in manpages where --program-prefix configure option was not being used. + add -D option to infocmp, to show the database locations that it could use. + fix build for the special case where term-driver, ticlib and termlib are all enabled. The terminal driver depends on a few features in the base ncurses library, so tic's dependencies include both ncurses and termlib. + fix build work for term-driver when --enable-wgetch-events option is enabled. + use types to fix some questionable casts to void*. 20111210 + modify configure script to check if thread library provides pthread_mutexattr_settype(), e.g., not provided by Solaris 2.6 + modify configure script to suppress check to define _XOPEN_SOURCE for IRIX64, since its header files have a conflict versus _SGI_SOURCE. + modify configure script to add ".pc" files for tic- and tinfo-libraries, which were omitted in recent change (cf: 20111126). + fix inconsistent checks on $PKG_CONFIG variable in configure script. 20111203 + modify configure-check for etip.h dependencies, supplying a temporary copy of ncurses_dll.h since it is a generated file (prompted by Debian #646977). + modify CF_CPP_PARAM_INIT "main" function to work with current C++. 20111126 + correct database iterator's check for duplicate entries (cf: 20111001). + modify database iterator to ignore $TERMCAP when it is not an absolute pathname. + add -D option to tic, to show the database locations that it could use. + improve description of database locations in tic manpage. + modify the configure script to generate a list of the ".pc" files to generate, rather than deriving the list from the libraries which have been built (patch by Mike Frysinger). + use AC_CHECK_TOOLS in preference to AC_PATH_PROGS when searching for ncurses*-config, e.g., in Ada95/configure and test/configure (adapted from patch by Mike Frysinger). 20111119 + remove obsolete/conflicting fallback definition for _POSIX_SOURCE from curses.priv.h, fixing a regression with IRIX64 and Tru64 (cf: 20110416) + modify _nc_tic_dir() to ensure that its return-value is nonnull, i.e., the database iterator was not initialized. This case is needed to when tic is translating to termcap, rather than loading the database (cf: 20111001). 20111112 + add pccon entries for OpenBSD console (Alexei Malinin). + build-fix for OpenBSD 4.9 with gcc 4.2.1, setting _XOPEN_SOURCE to 600 to work around inconsistent ifdef'ing of wcstof between C and C++ header files. + modify capconvert script to accept more than exact match on "xterm", e.g., the "xterm-*" variants, to exclude from the conversion (patch by Robert Millan). + add -lc_r as alternative for -lpthread, allows build of threaded code in older FreeBSD machines. + build-fix for MirBSD, which fails when either _XOPEN_SOURCE or _POSIX_SOURCE are defined. + fix a typo misc/Makefile.in, used in uninstalling pc-files. 20111030 + modify make_db_path() to allow creating "terminfo.db" in the same directory as an existing "terminfo" directory. This fixes a case where switching between hashed/filesystem databases would cause the new hashed database to be installed in the next best location - root's home directory. + add variable cf_cv_prog_gnat_correct to those passed to config.status, fixing a problem with Ada95 builds (cf: 20111022). + change feature test from _XPG5 to _XOPEN_SOURCE in two places, to accommodate broken implementations for _XPG6. + eliminate usage of NULL symbol from etip.h, to reduce header interdependencies. + add configure check to decide when to add _XOPEN_SOURCE define to compiler options, i.e., for Solaris 10 and later (cf: 20100403). This is a workaround for gcc 4.6, which fails to build the c++ binding if that symbol is defined by the application, due to incorrectly combining the corresponding feature test macros (report by Peter Kruse). 20111022 + correct logic for discarding mouse events, retaining the partial events used to build up click, double-click, etc, until needed (cf: 20110917). + fix configure script to avoid creating unused Ada95 makefile when gnat does not work. + cleanup width-related gcc 3.4.3 warnings for 64-bit platform, for the internal functions of libncurses. The external interface of courses uses bool, which still produces these warnings. 20111015 + improve description of --disable-tic-depends option to make it clear that it may be useful whether or not the --with-termlib option is also given (report by Sven Joachim). + amend termcap equivalent for set_pglen_inch to use the X/Open "YI" rather than the obsolete Solaris 2.5 "sL" (cf: 990109). + improve manpage for tgetent differences from termcap library. 20111008 + moved static data from db_iterator.c to lib_data.c + modify db_iterator.c for memory-leak checking, fix one leak. + modify misc/gen-pkgconfig.in to use Requires.private for the parts of ncurses rather than Requires, as well as Libs.private for the other library dependencies (prompted by Debian #644728). 20111001 + modify tic "-K" option to only set the strict-flag rather than force source-output. That allows the same flag to control the parser for input and output of termcap source. + modify _nc_getent() to ignore backslash at the end of a comment line, making it consistent with ncurses' parser. + restore a special-case check for directory needed to make termcap text files load as if they were databases (cf: 20110924). + modify tic's resolution/collision checking to attempt to remove the conflicting alias from the second entry in the pair, which is normally following in the source file. Also improved the warning message to make it simpler to see which alias is the problem. + improve performance of the database iterator by caching search-list. 20110925 + add a missing "else" in changes to _nc_read_tic_entry(). 20110924 + modify _nc_read_tic_entry() so that hashed-database is checked before filesystem. + updated CF_CURSES_LIBS check in test/configure script. + modify configure script and makefiles to split TIC_ARGS and TINFO_ARGS into pieces corresponding to LDFLAGS and LIBS variables, to help separate searches for tic- and tinfo-libraries (patch by Nick Alcock aka "Nix"). + build-fix for lib_mouse.c changes (cf: 20110917). 20110917 + fix compiler warning for clang 2.9 + improve merging of mouse events (integrated patch by Damien Guibouret). + correct mask-check used in lib_mouse for wheel mouse buttons 4/5 (patch by Damien Guibouret). 20110910 + modify misc/gen_edit.sh to select a "linux" entry which works with the current kernel rather than assuming it is always "linux3.0" (cf: 20110716). + revert a change to getmouse() which had the undesirable side-effect of suppressing button-release events (report by Damien Guibouret, cf: 20100102). + add xterm+kbs fragment from xterm #272 -TD + add configure option --with-pkg-config-libdir to provide control over the actual directory into which pc-files are installed, do not use the pkg-config environment variables (discussion with Frederic L W Meunier). + add link to mailing-list archive in announce.html.in, as done in FAQ (prompted by question by Andrius Bentkus). + improve manpage install by adjusting the "#include" examples to show the ncurses-subdirectory used when --disable-overwrite option is used. + install an alias for "curses" to the ncurses manpage, tied to the --with-curses-h configure option (suggested by Reuben Thomas). 20110903 + propagate error-returns from wresize, i.e., the internal increase_size and decrease_size functions through resize_term (report by Tim van der Molen, cf: 20020713). + fix typo in tset manpage (patch by Sven Joachim). 20110820 + add a check to ensure that termcap files which might have "^?" do not use the terminfo interpretation as "\177". + minor cleanup of X-terminal emulator section of terminfo.src -TD + add terminator entry -TD + add simpleterm entry -TD + improve wattr_get macros by ensuring that if the window pointer is null, then the attribute and color values returned will be zero (cf: 20110528). 20110813 + add substitution for $RPATH_LIST to misc/ncurses-config.in + improve performance of tic with hashed-database by caching the database connection, using atexit() to cleanup. + modify treatment of 2-character aliases at the beginning of termcap entries so they are not counted in use-resolution, since these are guaranteed to be unique. Also ignore these aliases when reporting the primary name of the entry (cf: 20040501) + double-check gn (generic) flag in terminal descriptions to accommodate old/buggy termcap databases which misused that feature. + minor fixes to _nc_tgetent(), ensure buffer is initialized even on error-return. 20110807 + improve rpath fix from 20110730 by ensuring that the new $RPATH_LIST variable is defined in the makefiles which use it. + build-fix for DragonFlyBSD's pkgsrc in test/configure script. + build-fixes for NetBSD 5.1 with termcap support enabled. + corrected k9 in dg460-ansi, add other features based on manuals -TD + improve trimming of whitespace at the end of terminfo/termcap output from tic/infocmp. + when writing termcap source, ensure that colons in the description field are translated to a non-delimiter, i.e., "=". + add "-0" option to tic/infocmp, to make the termcap/terminfo source use a single line. + add a null-pointer check when handling the $CC variable. 20110730 + modify configure script and makefiles in c++ and progs to allow the directory used for rpath option to be overridden, e.g., to work around updates to the variables used by tic during an install. + add -K option to tic/infocmp, to provide stricter BSD-compatibility for termcap output. + add _nc_strict_bsd variable in tic library which controls the "strict" BSD termcap compatibility from 20110723, plus these features: + allow escapes such as "\8" and "\9" when reading termcap + disallow "\a", "\e", "\l", "\s" and "\:" escapes when reading termcap files, passing through "a", "e", etc. + expand "\:" as "\072" on output. + modify _nc_get_token() to reset the token's string value in case there is a string-typed token lacking the "=" marker. + fix a few memory leaks in _nc_tgetent. + fix a few places where reading from a termcap file could refer to freed memory. + add an overflow check when converting terminfo/termcap numeric values, since terminfo stores those in a short, and they must be positive. + correct internal variables used for translating to termcap "%>" feature, and translating from termcap %B to terminfo, needed by tctest (cf: 19991211). + amend a minor fix to acsc when loading a termcap file to separate it from warnings needed for tic (cf: 20040710) + modify logic in _nc_read_entry() and _nc_read_tic_entry() to allow a termcap file to be handled via TERMINFO_DIRS. + modify _nc_infotocap() to include non-mandatory padding when translating to termcap. + modify _nc_read_termcap_entry(), passing a flag in the case where getcap is used, to reduce interactive warning messages. 20110723 + add a check in start_color() to limit color-pairs to 256 when extended colors are not supported (patch by David Benjamin). + modify setcchar to omit no-longer-needed OR'ing of color pair in the SetAttr() macro (patch by David Benjamin). + add kich1 to sun terminfo entry (Yuri Pankov) + use bold rather than reverse for smso in sun-color terminfo entry (Yuri Pankov). + improve generation of termcap using tic/infocmp -C option, e.g., to correspond with 4.2BSD (prompted by discussion with Yuri Pankov regarding Schilling's test program): + translate %02 and %03 to %2 and %3 respectively. + suppress string capabilities which use %s, not supported by tgoto + use \040 rather than \s + expand null characters as \200 rather than \0 + modify configure script to support shared libraries for DragonFlyBSD. 20110716 + replace an assert() in _nc_Free_Argument() with a regular null pointer check (report/analysis by Franjo Ivancic). + modify configure --enable-pc-files option to take into account the PKG_CONFIG_PATH variable (report by Frederic L W Meunier). + add/use xterm+tmux chunk from xterm #271 -TD + resync xterm-new entry from xterm #271 -TD + add E3 extended capability to linux-basic (Miroslav Lichvar) + add linux2.2, linux2.6, linux3.0 entries to give context for E3 -TD + add SI/SO change to linux2.6 entry (Debian #515609) -TD + fix inconsistent tabset path in pcmw (Todd C. Miller). + remove a backslash which continued comment, obscuring altos3 definition with OpenBSD toolset (Nicholas Marriott). 20110702 + add workaround from xterm #271 changes to ensure that compiler flags are not used in the $CC variable. + improve support for shared libraries, tested with AIX 5.3, 6.1 and 7.1 with both gcc 4.2.4 and cc. + modify configure checks for AIX to include release 7.x + add loader flags/libraries to libtool options so that dynamic loading works properly, adapted from ncurses-5.7-ldflags-with-libtool.patch at gentoo prefix repository (patch by Michael Haubenwallner). 20110626 + move include of nc_termios.h out of term_entry.h, since the latter is installed, e.g., for tack while the former is not (report by Sven Joachim). 20110625 + improve cleanup() function in lib_tstp.c, using _exit() rather than exit() and checking for SIGTERM rather than SIGQUIT (prompted by comments forwarded by Nicholas Marriott). + reduce name pollution from term.h, moving fallback #define's for tcgetattr(), etc., to new private header nc_termios.h (report by Sergio NNX). + two minor fixes for tracing (patch by Vassili Courzakis). + improve trace initialization by starting it in use_env() and ripoffline(). + review old email, add details for some changelog entries. 20110611 + update minix entry to minix 3.2 (Thomas Cort). + fix a strict compiler warning in change to wattr_get (cf: 20110528). 20110604 + fixes for MirBSD port: + set default prefix to /usr. + add support for shared libraries in configure script. + use S_ISREG and S_ISDIR consistently, with fallback definitions. + add a few more checks based on ncurses/link_test. + modify MKlib_gen.sh to handle sp-funcs renaming of NCURSES_OUTC type. 20110528 + add case to CF_SHARED_OPTS for Interix (patch by Markus Duft). + used ncurses/link_test to check for behavior when the terminal has not been initialized and when an application passes null pointers to the library. Added checks to cover this (prompted by Redhat #707344). + modify MKlib_gen.sh to make its main() function call each function with zero parameters, to help find inconsistent checking for null pointers, etc. 20110521 + fix warnings from clang 2.7 "--analyze" 20110514 + compiler-warning fixes in panel and progs. + modify CF_PKG_CONFIG macro, from changes to tin -TD + modify CF_CURSES_FUNCS configure macro, used in test directory configure script: + work around (non-optimizer) bug in gcc 4.2.1 which caused test-expression to be omitted from executable. + force the linker to see a link-time expression of a symbol, to help work around weak-symbol issues. 20110507 + update discussion of MKfallback.sh script in INSTALL; normally the script is used automatically via the configured makefiles. However there are still occasions when it might be used directly by packagers (report by Gunter Schaffler). + modify misc/ncurses-config.in to omit the "-L" option from the "--libs" output if the library directory is /usr/lib. + change order of tests for curses.h versus ncurses.h headers in the configure scripts for Ada95 and test-directories, to look for ncurses.h, from fixes to tin -TD + modify ncurses/tinfo/access.c to account for Tandem's root uid (report by Joachim Schmitz). 20110430 + modify rules in Ada95/src/Makefile.in to ensure that the PIC option is not used when building a static library (report by Nicolas Boulenguez): + Ada95 build-fix for big-endian architectures such as sparc. This undoes one of the fixes from 20110319, which added an "Unused" member to representation clauses, replacing that with pragmas to suppress warnings about unused bits (patch by Nicolas Boulenguez). 20110423 + add check in test/configure for use_window, use_screen. + add configure-checks for getopt's variables, which may be declared as different types on some Unix systems. + add check in test/configure for some legacy curses types of the function pointer passed to tputs(). + modify init_pair() to accept -1's for color value after assume_default_colors() has been called (Debian #337095). + modify test/background.c, adding commmand-line options to demonstrate assume_default_colors() and use_default_colors(). 20110416 + modify configure script/source-code to only define _POSIX_SOURCE if the checks for sigaction and/or termios fail, and if _POSIX_C_SOURCE and _XOPEN_SOURCE are undefined (report by Valentin Ochs). + update config.guess, config.sub 20110409 + fixes to build c++ binding with clang 3.0 (patch by Alexander Kolesen). + add check for unctrl.h in test/configure, to work around breakage in some ncurses packages. + add "--disable-widec" option to test/configure script. + add "--with-curses-colr" and "--with-curses-5lib" options to the test/configure script to address testing with very old machines. 20110404 5.9 release for upload to ftp.gnu.org 20110402 + various build-fixes for the rpm/dpkg scripts. + add "--enable-rpath-link" option to Ada95/configure, to allow packages to suppress the rpath feature which is normally used for the in-tree build of sample programs. + corrected definition of libdir variable in Ada95/src/Makefile.in, needed for rpm script. + add "--with-shared" option to Ada95/configure script, to allow making the C-language parts of the binding use appropriate compiler options if building a shared library with gnat. 20110329 > portability fixes for Ada95 binding: + add configure check to ensure that SIGINT works with gnat. This is needed for the "rain" sample program. If SIGINT does not work, omit that sample program. + correct typo in check of $PKG_CONFIG variable in Ada95/configure + add ncurses_compat.c, to supply functions used in the Ada95 binding which were added in 5.7 and later. + modify sed expression in CF_NCURSES_ADDON to eliminate a dependency upon GNU sed. 20110326 + add special check in Ada95/configure script for ncurses6 reentrant code. + regen Ada html documentation. + build-fix for Ada shared libraries versus the varargs workaround. + add rpm and dpkg scripts for Ada95 and test directories, for test builds. + update test/configure macros CF_CURSES_LIBS, CF_XOPEN_SOURCE and CF_X_ATHENA_LIBS. + add configure check to determine if gnat's project feature supports libraries, i.e., collections of .ali files. + make all dereferences in Ada95 samples explicit. + fix typo in comment in lib_add_wch.c (patch by Petr Pavlu). + add configure check for, ifdef's for math.h which is in a separate package on Solaris and potentially not installed (report by Petr Pavlu). > fixes for Ada95 binding (Nicolas Boulenguez): + improve type-checking in Ada95 by eliminating a few warning-suppress pragmas. + suppress unreferenced warnings. + make all dereferences in binding explicit. 20110319 + regen Ada html documentation. + change order of -I options from ncurses*-config script when the --disable-overwrite option was used, so that the subdirectory include is listed first. + modify the make-tar.sh scripts to add a MANIFEST and NEWS file. + modify configure script to provide value for HTML_DIR in Ada95/gen/Makefile.in, which depends on whether the Ada95 binding is distributed separately (report by Nicolas Boulenguez). + modify configure script to add "-g" and/or "-O3" to ADAFLAGS if the CFLAGS for the build has these options. + amend change from 20070324, to not add 1 to the result of getmaxx and getmaxy in the Ada binding (report by Nicolas Boulenguez for thread in comp.lang.ada). + build-fix Ada95/samples for gnat 4.5 + spelling fixes for Ada95/samples/explain.txt > fixes for Ada95 binding (Nicolas Boulenguez): + add item in Trace_Attribute_Set corresponding to TRACE_ATTRS. + add workaround for binding to set_field_type(), which uses varargs. The original binding from 990220 relied on the prevalent implementation of varargs which did not support or need va_copy(). + add dependency on gen/Makefile.in needed for *-panels.ads + add Library_Options to library.gpr + add Languages to library.gpr, for gprbuild 20110307 + revert changes to limit-checks from 20110122 (Debian #616711). > minor type-cleanup of Ada95 binding (Nicolas Boulenguez): + corrected a minor sign error in a field of Low_Level_Field_Type, to conform to form.h. + replaced C_Int by Curses_Bool as return type for some callbacks, see fieldtype(3FORM). + modify samples/sample-explain.adb to provide explicit message when explain.txt is not found. 20110305 + improve makefiles for Ada95 tree (patch by Nicolas Boulenguez). + fix an off-by-one error in _nc_slk_initialize() from 20100605 fixes for compiler warnings (report by Nicolas Boulenguez). + modify Ada95/gen/gen.c to declare unused bits in generated layouts, needed to compile when chtype is 64-bits using gnat 4.4.5 20110226 5.8 release for upload to ftp.gnu.org 20110226 + update release notes, for 5.8. + regenerated html manpages. + change open() in _nc_read_file_entry() to fopen() for consistency with write_file(). + modify misc/run_tic.in to create parent directory, in case this is a new install of hashed database. + fix typo in Ada95/mk-1st.awk which causes error with original awk. 20110220 + configure script rpath fixes from xterm #269. + workaround for cygwin's non-functional features.h, to force ncurses' configure script to define _XOPEN_SOURCE_EXTENDED when building wide-character configuration. + build-fix in run_tic.sh for OS/2 EMX install + add cons25-debian entry (patch by Brian M Carlson, Debian #607662). 20110212 + regenerated html manpages. + use _tracef() in show_where() function of tic, to work correctly with special case of trace configuration. 20110205 + add xterm-utf8 entry as a demo of the U8 feature -TD + add U8 feature to denote entries for terminal emulators which do not support VT100 SI/SO when processing UTF-8 encoding -TD + improve the NCURSES_NO_UTF8_ACS feature by adding a check for an extended terminfo capability U8 (prompted by mailing list discussion). 20110122 + start documenting interface changes for upcoming 5.8 release. + correct limit-checks in derwin(). + correct limit-checks in newwin(), to ensure that windows have nonzero size (report by Garrett Cooper). + fix a missing "weak" declaration for pthread_kill (patch by Nicholas Alcock). + improve documentation of KEY_ENTER in curs_getch.3x manpage (prompted by discussion with Kevin Martin). 20110115 + modify Ada95/configure script to make the --with-curses-dir option work without requiring the --with-ncurses option. + modify test programs to allow them to be built with NetBSD curses. + document thick- and double-line symbols in curs_add_wch.3x manpage. + document WACS_xxx constants in curs_add_wch.3x manpage. + fix some warnings for clang 2.6 "--analyze" + modify Ada95 makefiles to make html-documentation with the project file configuration if that is used. + update config.guess, config.sub 20110108 + regenerated html manpages. + minor fixes to enable lint when trace is not enabled, e.g., with clang --analyze. + fix typo in man/default_colors.3x (patch by Tim van der Molen). + update ncurses/llib-lncurses* 20110101 + fix remaining strict compiler warnings in ncurses library ABI=5, except those dealing with function pointers, etc. 20101225 + modify nc_tparm.h, adding guards against repeated inclusion, and allowing TPARM_ARG to be overridden. + fix some strict compiler warnings in ncurses library. 20101211 + suppress ncv in screen entry, allowing underline (patch by Alejandro R Sedeno). + also suppress ncv in konsole-base -TD + fixes in wins_nwstr() and related functions to ensure that special characters, i.e., control characters are handled properly with the wide-character configuration. + correct a comparison in wins_nwstr() (Redhat #661506). + correct help-messages in some of the test-programs, which still referred to quitting with 'q'. 20101204 + add special case to _nc_infotocap() to recognize the setaf/setab strings from xterm+256color and xterm+88color, and provide a reduced version which works with termcap. + remove obsolete emacs "Local Variables" section from documentation (request by Sven Joachim). + update doc/html/index.html to include NCURSES-Programming-HOWTO.html (report by Sven Joachim). 20101128 + modify test/configure and test/Makefile.in to handle this special case of building within a build-tree (Debian #34182): mkdir -p build && cd build && ../test/configure && make 20101127 + miscellaneous build-fixes for Ada95 and test-directories when built out-of-tree. + use VPATH in makefiles to simplify out-of-tree builds (Debian #34182). + fix typo in rmso for tek4106 entry -Goran Weinholt 20101120 + improve checks in test/configure for X libraries, from xterm #267 changes. + modify test/configure to allow it to use the build-tree's libraries e.g., when using that to configure the test-programs without the rpath feature (request by Sven Joachim). + repurpose "gnome" terminfo entries as "vte", retaining "gnome" items for compatibility, but generally deprecating those since the VTE library is what actually defines the behavior of "gnome", etc., since 2003 -TD 20101113 + compiler warning fixes for test programs. + various build-fixes for test-programs with pdcurses. + updated configure checks for X packages in test/configure from xterm #267 changes. + add configure check to gnatmake, to accommodate cygwin. 20101106 + correct list of sub-directories needed in Ada95 tree for building as a separate package. + modify scripts in test-directory to improve builds as a separate package. 20101023 + correct parsing of relative tab-stops in tabs program (report by Philip Ganchev). + adjust configure script so that "t" is not added to library suffix when weak-symbols are used, allowing the pthread configuration to more closely match the non-thread naming (report by Werner Fink). + modify configure check for tic program, used for fallbacks, to a warning if not found. This makes it simpler to use additonal scripts to bootstrap the fallbacks code using tic from the build tree (report by Werner Fink). + fix several places in configure script using ${variable-value} form. + modify configure macro CF_LDFLAGS_STATIC to accommodate some loaders which do not support selectively linking against static libraries (report by John P. Hartmann) + fix an unescaped dash in man/tset.1 (report by Sven Joachim). 20101009 + correct comparison used for setting 16-colors in linux-16color entry (Novell #644831) -TD + improve linux-16color entry, using "dim" for color-8 which makes it gray rather than black like color-0 -TD + drop misc/ncu-indent and misc/jpf-indent; they are provided by an external package "cindent". 20101002 + improve linkages in html manpages, adding references to the newer pages, e.g., *_variables, curs_sp_funcs, curs_threads. + add checks in tic for inconsistent cursor-movement controls, and for inconsistent printer-controls. + fill in no-parameter forms of cursor-movement where a parameterized form is available -TD + fill in missing cursor controls where the form of the controls is ANSI -TD + fix inconsistent punctuation in form_variables manpage (patch by Sven Joachim). + add parameterized cursor-controls to linux-basic (report by Dae) -TD > patch by Juergen Pfeifer: + document how to build 32-bit libraries in README.MinGW + fixes to filename computation in mk-dlls.sh.in + use POSIX locale in mk-dlls.sh.in rather than en_US (report by Sven Joachim). + add a check in mk-dlls.sh.in to obtain the size of a pointer to distinguish between 32-bit and 64-bit hosts. The result is stored in mingw_arch 20100925 + add "XT" capability to entries for terminals that support both xterm-style mouse- and title-controls, for "screen" which special-cases TERM beginning with "xterm" or "rxvt" -TD > patch by Juergen Pfeifer: + use 64-Bit MinGW toolchain (recommended package from TDM, see README.MinGW). + support pthreads when using the TDM MinGW toolchain 20100918 + regenerated html manpages. + minor fixes for symlinks to curs_legacy.3x and curs_slk.3x manpages. + add manpage for sp-funcs. + add sp-funcs to test/listused.sh, for documentation aids. 20100911 + add manpages for summarizing public variables of curses-, terminfo- and form-libraries. + minor fixes to manpages for consistency (patch by Jason McIntyre). + modify tic's -I/-C dump to reformat acsc strings into canonical form (sorted, unique mapping) (cf: 971004). + add configure check for pthread_kill(), needed for some old platforms. 20100904 + add configure option --without-tests, to suppress building test programs (request by Frederic L W Meunier). 20100828 + modify nsterm, xnuppc and tek4115 to make sgr/sgr0 consistent -TD + add check in terminfo source-reader to provide more informative message when someone attempts to run tic on a compiled terminal description (prompted by Debian #593920). + note in infotocap and captoinfo manpages that they read terminal descriptions from text-files (Debian #593920). + improve acsc string for vt52, show arrow keys (patch by Benjamin Sittler). 20100814 + document in manpages that "mv" functions first use wmove() to check the window pointer and whether the position lies within the window (suggested by Poul-Henning Kamp). + fixes to curs_color.3x, curs_kernel.3x and wresize.3x manpages (patch by Tim van der Molen). + modify configure script to transform library names for tic- and tinfo-libraries so that those build properly with Mac OS X shared library configuration. + modify configure script to ensure that it removes conftest.dSYM directory leftover on checks with Mac OS X. + modify configure script to cleanup after check for symbolic links. 20100807 + correct a typo in mk-1st.awk (patch by Gabriele Balducci) (cf: 20100724) + improve configure checks for location of tic and infocmp programs used for installing database and for generating fallback data, e.g., for cross-compiling. + add Markus Kuhn's wcwidth function for compiling MinGW + add special case to CF_REGEX for cross-compiling to MinGW target. 20100731 + modify initialization check for win32con driver to eliminate need for special case for TERM "unknown", using terminal database if available (prompted by discussion with Roumen Petrov). + for MinGW port, ensure that terminal driver is setup if tgetent() is called (patch by Roumen Petrov). + document tabs "-0" and "-8" options in manpage. + fix Debian "lintian" issues with manpages reported in http://lintian.debian.org/full/csmall@debian.org.html#ncurses 20100724 + add a check in tic for missing set_tab if clear_all_tabs given. + improve use of symbolic links in makefiles by using "-f" option if it is supported, to eliminate temporary removal of the target (prompted by http://www.t2-project.org/packages/ncurses.html) + minor improvement to test/ncurses.c, reset color pairs in 'd' test after exit from 'm' main-menu command. + improved ncu-indent, from mawk changes, allows more than one of GCC_NORETURN, GCC_PRINTFLIKE and GCC_SCANFLIKE on a single line. 20100717 + add hard-reset for rs2 to wsvt25 to help ensure that reset ends the alternate character set (patch by Nicholas Marriott) + remove tar-copy.sh and related configure/Makefile chunks, since the Ada95 binding is now installed using rules in Ada95/src. 20100703 + continue integrating changes to use gnatmake project files in Ada95 + add/use configure check to turn on project rules for Ada95/src. + revert the vfork change from 20100130, since it does not work. 20100626 + continue integrating changes to use gnatmake project files in Ada95 + old gnatmake (3.15) does not produce libraries using project-file; work around by adding script to generate alternate makefile. 20100619 + continue integrating changes to use gnatmake project files in Ada95 + add configure --with-ada-sharedlib option, for the test_make rule. + move Ada95-related logic into aclocal.m4, since additional checks will be needed to distinguish old/new implementations of gnat. 20100612 + start integrating changes to use gnatmake project files in Ada95 tree + add test_make / test_clean / test_install rules in Ada95/src + change install-path for adainclude directory to /usr/share/ada (was /usr/lib/ada). + update Ada95/configure. + add mlterm+256color entry, for mlterm 3.0.0 -TD + modify test/configure to use macros to ensure consistent order of updating LIBS variable. 20100605 + change search order of options for Solaris in CF_SHARED_OPTS, to work with 64-bit compiles. + correct quoting of assignment in CF_SHARED_OPTS case for aix (cf: 20081227) 20100529 + regenerated html documentation. + modify test/configure to support pkg-config for checking X libraries used by PDCurses. + add/use configure macro CF_ADD_LIB to force consistency of assignments to $LIBS, etc. + fix configure script for combining --with-pthread and --enable-weak-symbols options. 20100522 + correct cross-compiling configure check for CF_MKSTEMP macro, by adding a check cache variable set by AC_CHECK_FUNC (report by Pierre Labastie). + simplify include-dependencies of make_hash and make_keys, to reduce the need for setting BUILD_CPPFLAGS in cross-compiling when the build- and target-machines differ. + repair broken-linker configuration by restoring a definition of SP variable to curses.priv.h, and adjusting for cases where sp-funcs are used. + improve configure macro CF_AR_FLAGS, allowing ARFLAGS environment variable to override (prompted by report by Pablo Cazallas). 20100515 + add configure option --enable-pthreads-eintr to control whether the new EINTR feature is enabled. + modify logic in pthread configuration to allow EINTR to interrupt a read operation in wgetch() (Novell #540571, patch by Werner Fink). + drop mkdirs.sh, use "mkdir -p". + add configure option --disable-libtool-version, to use the "-version-number" feature which was added in libtool 1.5 (report by Peter Haering). The default value for the option uses the newer feature, which makes libraries generated using libtool compatible with the standard builds of ncurses. + updated test/configure to match configure script macros. + fixes for configure script from lynx changes: + improve CF_FIND_LINKAGE logic for the case where a function is found in predefined libraries. + revert part of change to CF_HEADER (cf: 20100424) 20100501 + correct limit-check in wredrawln, accounting for begy/begx values (patch by David Benjamin). + fix most compiler warnings from clang. + amend build-fix for OpenSolaris, to ensure that a system header is included in curses.h before testing feature symbols, since they may be defined by that route. 20100424 + fix some strict compiler warnings in ncurses library. + modify configure macro CF_HEADER_PATH to not look for variations in the predefined include directories. + improve configure macros CF_GCC_VERSION and CF_GCC_WARNINGS to work with gcc 4.x's c89 alias, which gives warning messages for cases where older versions would produce an error. 20100417 + modify _nc_capcmp() to work with cancelled strings. + correct translation of "^" in _nc_infotocap(), used to transform terminfo to termcap strings + add configure --disable-rpath-hack, to allow disabling the feature which adds rpath options for libraries in unusual places. + improve CF_RPATH_HACK_2 by checking if the rpath option for a given directory was already added. + improve CF_RPATH_HACK_2 by using ldd to provide a standard list of directories (which will be ignored). 20100410 + improve win_driver.c handling of mouse: + discard motion events + avoid calling _nc_timed_wait when there is a mouse event + handle 4th and "rightmost" buttons. + quote substitutions in CF_RPATH_HACK_2 configure macro, needed for cases where there are embedded blanks in the rpath option. 20100403 + add configure check for exctags vs ctags, to work around pkgsrc. + simplify logic in _nc_get_screensize() to make it easier to see how environment variables may override system- and terminfo-values (prompted by discussion with Igor Bujna). + make debug-traces for COLOR_PAIR and PAIR_NUMBER less verbose. + improve handling of color-pairs embedded in attributes for the extended-colors configuration. + modify MKlib_gen.sh to build link_test with sp-funcs. + build-fixes for OpenSolaris aka Solaris 11, for wide-character configuration as well as for rpath feature in *-config scripts. 20100327 + refactor CF_SHARED_OPTS configure macro, making CF_RPATH_HACK more reusable. + improve configure CF_REGEX, similar fixes. + improve configure CF_FIND_LINKAGE, adding add check between system (default) and explicit paths, where we can find the entrypoint in the given library. + add check if Gpm_Open() returns a -2, e.g., for "xterm". This is normally suppressed but can be overridden using $NCURSES_GPM_TERMS. Ensure that Gpm_Close() is called in this case. 20100320 + rename atari and st52 terminfo entries to atari-old, st52-old, use newer entries from FreeMiNT by Guido Flohr (from patch/report by Alan Hourihane). 20100313 + modify install-rule for manpages so that *-config manpages will install when building with --srcdir (report by Sven Joachim). + modify CF_DISABLE_LEAKS configure macro so that the --enable-leaks option is not the same as --disable-leaks (GenToo #305889). + modify #define's for build-compiler to suppress cchar_t symbol from compile of make_hash and make_keys, improving cross-compilation of ncursesw (report by Bernhard Rosenkraenzer). + modify CF_MAN_PAGES configure macro to replace all occurrences of TPUT in tput.1's manpage (Debian #573597, report/analysis by Anders Kaseorg). 20100306 + generate manpages for the *-config scripts, adapted from help2man (suggested by Sven Joachim). + use va_copy() in _nc_printf_string() to avoid conflicting use of va_list value in _nc_printf_length() (report by Wim Lewis). 20100227 + add Ada95/configure script, to use in tar-file created by Ada95/make-tar.sh + fix typo in wresize.3x (patch by Tim van der Molen). + modify screen-bce.XXX entries to exclude ech, since screen's color model does not clear with color for that feature -TD 20100220 + add make-tar.sh scripts to Ada95 and test subdirectories to help with making those separately distributable. + build-fix for static libraries without dlsym (Debian #556378). + fix a syntax error in man/form_field_opts.3x (patch by Ingo Schwarze). 20100213 + add several screen-bce.XXX entries -TD 20100206 + update mrxvt terminfo entry -TD + modify win_driver.c to support mouse single-clicks. + correct name for termlib in ncurses*-config, e.g., if it is renamed to provide a single file for ncurses/ncursesw libraries (patch by Miroslav Lichvar). 20100130 + use vfork in test/ditto.c if available (request by Mike Frysinger). + miscellaneous cleanup of manpages. + fix typo in curs_bkgd.3x (patch by Tim van der Molen). + build-fix for --srcdir (patch by Miroslav Lichvar). 20100123 + for term-driver configuration, ensure that the driver pointer is initialized in setupterm so that terminfo/termcap programs work. + amend fix for Debian #542031 to ensure that wattrset() returns only OK or ERR, rather than the attribute value (report by Miroslav Lichvar). + reorder WINDOWLIST to put WINDOW data after SCREEN pointer, making _nc_screen_of() compatible between normal/wide libraries again (patch by Miroslav Lichvar) + review/fix include-dependencies in modules files (report by Miroslav Lichvar). 20100116 + modify win_driver.c to initialize acs_map for win32 console, so that line-drawing works. + modify win_driver.c to initialize TERMINAL struct so that programs such as test/lrtest.c and test/ncurses.c which test string capabilities can run. + modify term-driver modules to eliminate forward-reference declarations. 20100109 + modify configure macro CF_XOPEN_SOURCE, etc., to use CF_ADD_CFLAGS consistently to add new -D's while removing duplicates. + modify a few configure macros to consistently put new options before older in the list. + add tiparm(), based on review of X/Open Curses Issue 7. + minor documentation cleanup. + update config.guess, config.sub from http://savannah.gnu.org/projects/config (caveat - its maintainer put 2010 copyright date on files dated 2009) 20100102 + minor improvement to tic's checking of similar SGR's to allow for the most common case of SGR 0. + modify getmouse() to act as its documentation implied, returning on each call the preceding event until none are left. When no more events remain, it will return ERR. 20091227 + change order of lookup in progs/tput.c, looking for terminfo data first. This fixes a confusion between termcap "sg" and terminfo "sgr" or "sgr0", originally from 990123 changes, but exposed by 20091114 fixes for hashing. With this change, only "dl" and "ed" are ambiguous (Mandriva #56272). 20091226 + add bterm terminfo entry, based on bogl 0.1.18 -TD + minor fix to rxvt+pcfkeys terminfo entry -TD + build-fixes for Ada95 tree for gnat 4.4 "style". 20091219 + remove old check in mvderwin() which prevented moving a derived window whose origin happened to coincide with its parent's origin (report by Katarina Machalkova). + improve test/ncurses.c to put mouse droppings in the proper window. + update minix terminfo entry -TD + add bw (auto-left-margin) to nsterm* entries (Benjamin Sittler) 20091212 + correct transfer of multicolumn characters in multirow field_buffer(), which stopped at the end of the first row due to filling of unused entries in a cchar_t array with nulls. + updated nsterm* entries (Benjamin Sittler, Emanuele Giaquinta) + modify _nc_viscbuf2() and _tracecchar_t2() to show wide-character nulls. + use strdup() in set_menu_mark(), restore .marklen struct member on failure. + eliminate clause 3 from the UCB copyrights in read_termcap.c and tset.c per ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change (patch by Nicholas Marriott). + replace a malloc in tic.c with strdup, checking for failure (patch by Nicholas Marriott). + update config.guess, config.sub from http://savannah.gnu.org/projects/config 20091205 + correct layout of working window used to extract data in wide-character configured by set_field_buffer (patch by Rafael Garrido Fernandez) + improve some limit-checks related to filename length in reading and writing terminfo entries. + ensure that filename is always filled in when attempting to read a terminfo entry, so that infocmp can report the filename (patch by Nicholas Marriott). 20091128 + modify mk-1st.awk to allow tinfo library to be built when term-driver is enabled. + add error-check to configure script to ensure that sp-funcs is enabled if term-driver is, since some internal interfaces rely upon this. 20091121 + fix case where progs/tput is used while sp-funcs is configure; this requires save/restore of out-character function from _nc_prescreen rather than the SCREEN structure (report by Charles Wilson). + fix typo in man/curs_trace.3x which caused incorrect symbolic links + improved configure macros CF_GCC_ATTRIBUTES, CF_PROG_LINT. 20091114 + updated man/curs_trace.3x + limit hashing for termcap-names to 2-characters (Ubuntu #481740). + change a variable name in lib_newwin.c to make it clearer which value is being freed on error (patch by Nicholas Marriott). 20091107 + improve test/ncurses.c color-cycling test by reusing attribute- and color-cycling logic from the video-attributes screen. + add ifdef'd with NCURSES_INTEROP_FUNCS experimental bindings in form library which help make it compatible with interop applications (patch by Juergen Pfeifer). + add configure option --enable-interop, for integrating changes for generic/interop support to form-library by Juergen Pfeifer 20091031 + modify use of $CC environment variable which is defined by X/Open as a curses feature, to ignore it if it is not a single character (prompted by discussion with Benjamin C W Sittler). + add START_TRACE in slk_init + fix a regression in _nc_ripoffline which made test/ncurses.c not show soft-keys, broken in 20090927 merging. + change initialization of "hidden" flag for soft-keys from true to false, broken in 20090704 merging (Ubuntu #464274). + update nsterm entries (patch by Benjamin C W Sittler, prompted by discussion with Fabian Groffen in GenToo #206201). + add test/xterm-256color.dat 20091024 + quiet some pedantic gcc warnings. + modify _nc_wgetch() to check for a -1 in the fifo, e.g., after a SIGWINCH, and discard that value, to avoid confusing application (patch by Eygene Ryabinkin, FreeBSD #136223). 20091017 + modify handling of $PKG_CONFIG_LIBDIR to use only the first item in a possibly colon-separated list (Debian #550716). 20091010 + supply a null-terminator to buffer in _nc_viswibuf(). + fix a sign-extension bug in unget_wch() (report by Mike Gran). + minor fixes to error-returns in default function for tputs, as well as in lib_screen.c 20091003 + add WACS_xxx definitions to wide-character configuration for thick- and double-lines (discussion with Slava Zanko). + remove unnecessary kcan assignment to ^C from putty (Sven Joachim) + add ccc and initc capabilities to xterm-16color -TD > patch by Benjamin C W Sittler: + add linux-16color + correct initc capability of linux-c-nc end-of-range + similar change for dg+ccc and dgunix+ccc 20090927 + move leak-checking for comp_captab.c into _nc_leaks_tinfo() since that module since 20090711 is in libtinfo. + add configure option --enable-term-driver, to allow compiling with terminal-driver. That is used in MinGW port, and (being somewhat more complicated) is an experimental alternative to the conventional termlib internals. Currently, it requires the sp-funcs feature to be enabled. + completed integrating "sp-funcs" by Juergen Pfeifer in ncurses library (some work remains for forms library). 20090919 + document return code from define_key (report by Mike Gran). + make some symbolic links in the terminfo directory-tree shorter (patch by Daniel Jacobowitz, forwarded by Sven Joachim).). + fix some groff warnings in terminfo.5, etc., from recent Debian changes. + change ncv and op capabilities in sun-color terminfo entry to match Sun's entry for this (report by Laszlo Peter). + improve interix smso terminfo capability by using reverse rather than bold (report by Kristof Zelechovski). 20090912 + add some test programs (and make these use the same special keys by sharing linedata.h functions): test/test_addstr.c test/test_addwstr.c test/test_addchstr.c test/test_add_wchstr.c + correct internal _nc_insert_ch() to use _nc_insert_wch() when inserting wide characters, since the wins_wch() function that it used did not update the cursor position (report by Ciprian Craciun). 20090906 + fix typo s/is_timeout/is_notimeout/ which made "man is_notimeout" not work. + add null-pointer checks to other opaque-functions. + add is_pad() and is_subwin() functions for opaque access to WINDOW (discussion with Mark Dickinson). + correct merge to lib_newterm.c, which broke when sp-funcs was enabled. 20090905 + build-fix for building outside source-tree (report by Sven Joachim). + fix Debian lintian warning for man/tabs.1 by making section number agree with file-suffix (report by Sven Joachim). + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090829 + workaround for bug in g++ 4.1-4.4 warnings for wattrset() macro on amd64 (Debian #542031). + fix typo in curs_mouse.3x (Debian #429198). 20090822 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090815 + correct use of terminfo capabilities for initializing soft-keys, broken in 20090510 merging. + modify wgetch() to ensure it checks SIGWINCH when it gets an error in non-blocking mode (patch by Clemens Ladisch). + use PATH_SEPARATOR symbol when substituting into run_tic.sh, to help with builds on non-Unix platforms such as OS/2 EMX. + modify scripting for misc/run_tic.sh to test configure script's $cross_compiling variable directly rather than comparing host/build compiler names (prompted by comment in GenToo #249363). + fix configure script option --with-database, which was coded as an enable-type switch. + build-fixes for --srcdir (report by Frederic L W Meunier). 20090808 + separate _nc_find_entry() and _nc_find_type_entry() from implementation details of hash function. 20090803 + add tabs.1 to man/man_db.renames + modify lib_addch.c to compensate for removal of wide-character test from unctrl() in 20090704 (Debian #539735). 20090801 + improve discussion in INSTALL for use of system's tic/infocmp for cross-compiling and building fallbacks. + modify test/demo_termcap.c to correspond better to options in test/demo_terminfo.c + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). + fix logic for 'V' in test/ncurses.c tests f/F. 20090728 + correct logic in tigetnum(), which caused tput program to treat all string capabilities as numeric (report by Rajeev V Pillai, cf: 20090711). 20090725 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090718 + fix a null-pointer check in _nc_format_slks() in lib_slk.c, from 20090704 changes. + modify _nc_find_type_entry() to use hashing. + make CCHARW_MAX value configurable, noting that changing this would change the size of cchar_t, and would be ABI-incompatible. + modify test-programs, e.g,. test/view.c, to address subtle differences between Tru64/Solaris and HPUX/AIX getcchar() return values. + modify length returned by getcchar() to count the trailing null which is documented in X/Open (cf: 20020427). + fixes for test programs to build/work on HPUX and AIX, etc. 20090711 + improve performance of tigetstr, etc., by using hashing code from tic. + minor fixes for memory-leak checking. + add test/demo_terminfo, for comparison with demo_termcap 20090704 + remove wide-character checks from unctrl() (patch by Clemens Ladisch). + revise wadd_wch() and wecho_wchar() to eliminate dependency on unctrl(). + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090627 + update llib-lncurses[wt] to use sp-funcs. + various code-fixes to build/work with --disable-macros configure option. + add several new files from Juergen Pfeifer which will be used when integration of "sp-funcs" is complete. This includes a port to MinGW. 20090613 + move definition for NCURSES_WRAPPED_VAR back to ncurses_dll.h, to make includes of term.h without curses.h work (report by "Nix"). + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090607 + fix a regression in lib_tputs.c, from ongoing merges. 20090606 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090530 + fix an infinite recursion when adding a legacy-coding 8-bit value using insch() (report by Clemens Ladisch). + free home-terminfo string in del_curterm() (patch by Dan Weber). + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090523 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090516 + work around antique BSD game's manipulation of stdscr, etc., versus SCREEN's copy of the pointer (Debian #528411). + add a cast to wattrset macro to avoid compiler warning when comparing its result against ERR (adapted from patch by Matt Kraii, Debian #528374). 20090510 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090502 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). + add vwmterm terminfo entry (patch by Bryan Christ). 20090425 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090419 + build fix for _nc_free_and_exit() change in 20090418 (report by Christian Ebert). 20090418 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090411 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). This change finishes merging for menu and panel libraries, does part of the form library. 20090404 + suppress configure check for static/dynamic linker flags for gcc on Darwin (report by Nelson Beebe). 20090328 + extend ansi.sys pfkey capability from kf1-kf10 to kf1-kf48, moving function key definitions from emx-base for consistency -TD + correct missing final 'p' in pfkey capability of ansi.sys-old (report by Kalle Olavi Niemitalo). + improve test/ncurses.c 'F' test, show combining characters in color. + quiet a false report by cppcheck in c++/cursesw.cc by eliminating a temporary variable. + use _nc_doalloc() rather than realloc() in a few places in ncurses library to avoid leak in out-of-memory condition (reports by William Egert and Martin Ettl based on cppcheck tool). + add --with-ncurses-wrap-prefix option to test/configure (discussion with Charles Wilson). + use ncurses*-config scripts if available for test/configure. + update test/aclocal.m4 and test/configure > patches by Charles Wilson: + modify CF_WITH_LIBTOOL configure check to allow unreleased libtool version numbers (e.g. which include alphabetic chars, as well as digits, after the final '.'). + improve use of -no-undefined option for libtool by setting an intermediate variable LT_UNDEF in the configure script, and then using that in the libtool link-commands. + fix an missing use of NCURSES_PUBLIC_VAR() in tinfo/MKcodes.awk from 20090321 changes. + improve mk-1st.awk script by writing separate cases for the LIBTOOL_LINK command, depending on which library (ncurses, ticlib, termlib) is to be linked. + modify configure.in to allow broken-linker configurations, not just enable-reentrant, to set public wrap prefix. 20090321 + add TICS_LIST and SHLIB_LIST to allow libtool 2.2.6 on Cygwin to build with tic and term libraries (patch by Charles Wilson). + add -no-undefined option to libtool for Cygwin, MinGW, U/Win and AIX (report by Charles Wilson). + fix definition for c++/Makefile.in's SHLIB_LIST, which did not list the form, menu or panel libraries (patch by Charles Wilson). + add configure option --with-wrap-prefix to allow setting the prefix for functions used to wrap global variables to something other than "_nc_" (discussion with Charles Wilson). 20090314 + modify scripts to generate ncurses*-config and pc-files to add dependency for tinfo library (patch by Charles Wilson). + improve comparison of program-names when checking for linked flavors such as "reset" by ignoring the executable suffix (reports by Charles Wilson, Samuel Thibault and Cedric Bretaudeau on Cygwin mailing list). + suppress configure check for static/dynamic linker flags for gcc on Solaris 10, since gcc is confused by absence of static libc, and does not switch back to dynamic mode before finishing the libraries (reports by Joel Bertrand, Alan Pae). + minor fixes to Intel compiler warning checks in configure script. + modify _nc_leaks_tinfo() so leak-checking in test/railroad.c works. + modify set_curterm() to make broken-linker configuration work with changes from 20090228 (report by Charles Wilson). 20090228 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). + modify declaration of cur_term when broken-linker is used, but enable-reentrant is not, to match pre-5.7 (report by Charles Wilson). 20090221 + continue integrating "sp-funcs" by Juergen Pfeifer (incomplete). 20090214 + add configure script --enable-sp-funcs to enable the new set of extended functions. + start integrating patches by Juergen Pfeifer: + add extended functions which specify the SCREEN pointer for several curses functions which use the global SP (these are incomplete; some internals work is needed to complete these). + add special cases to configure script for MinGW port. 20090207 + update several configure macros from lynx changes + append (not prepend) to CFLAGS/CPPFLAGS + change variable from PATHSEP to PATH_SEPARATOR + improve install-rules for pc-files (patch by Miroslav Lichvar). + make it work with $DESTDIR + create the pkg-config library directory if needed. 20090124 + modify init_pair() to allow caller to create extra color pairs beyond the color_pairs limit, which use default colors (request by Emanuele Giaquinta). + add misc/terminfo.tmp and misc/*.pc to "sources" rule. + fix typo "==" where "=" is needed in ncurses-config.in and gen-pkgconfig.in files (Debian #512161). 20090117 + add -shared option to MK_SHARED_LIB when -Bsharable is used, for *BSD's, without which "main" might be one of the shared library's dependencies (report/analysis by Ken Dickey). + modify waddch_literal(), updating line-pointer after a multicolumn character is found to not fit on the current row, and wrapping is done. Since the line-pointer was not updated, the wrapped multicolumn character was written to the beginning of the current row (cf: 20041023, reported by "Nick" regarding problem with ncmpc http://musicpd.org/mantis/bug_view_page.php?bug_id=1930). 20090110 + add screen.Eterm terminfo entry (GenToo #124887) -TD + modify adacurses-config to look for ".ali" files in the adalib directory. + correct install for Ada95, which omitted libAdaCurses.a used in adacurses-config + change install for adacurses-config to provide additional flavors such as adacursesw-config, for ncursesw (GenToo #167849). 20090105 + remove undeveloped feature in ncurses-config.in for setting prefix variable. + recent change to ncurses-config.in did not take into account the --disable-overwrite option, which sets $includedir to the subdirectory and using just that for a -I option does not work - fix (report by Frederic L W Meunier). 20090104 + modify gen-pkgconfig.in to eliminate a dependency on rpath when deciding whether to add $LIBS to --libs output; that should be shown for the ncurses and tinfo libraries without taking rpath into account. + fix an overlooked change from $AR_OPTS to $ARFLAGS in mk-1st.awk, used in static libraries (report by Marty Jack). 20090103 + add a configure-time check to pick a suitable value for CC_SHARED_OPTS for Solaris (report by Dagobert Michelsen). + add configure --with-pkg-config and --enable-pc-files options, along with misc/gen-pkgconfig.in which can be used to generate ".pc" files for pkg-config (request by Jan Engelhardt). + use $includedir symbol in misc/ncurses-config.in, add --includedir option. + change makefiles to use $ARFLAGS rather than $AR_OPTS, provide a configure check to detect whether a "-" is needed before "ar" options. + update config.guess, config.sub from http://savannah.gnu.org/projects/config 20081227 + modify mk-1st.awk to work with extra categories for tinfo library. + modify configure script to allow building shared libraries with gcc on AIX 5 or 6 (adapted from patch by Lital Natan). 20081220 + modify to omit the opaque-functions from lib_gen.o when --disable-ext-funcs is used. + add test/clip_printw.c to illustrate how to use printw without wrapping. + modify ncurses 'F' test to demo wborder_set() with colored lines. + modify ncurses 'f' test to demo wborder() with colored lines. 20081213 + add check for failure to open hashed-database needed for db4.6 (GenToo #245370). + corrected --without-manpages option; previous change only suppressed the auxiliary rules install.man and uninstall.man + add case for FreeMINT to configure macro CF_XOPEN_SOURCE (patch from GenToo #250454). + fixes from NetBSD port at http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/devel/ncurses/patches patch-ac (build-fix for DragonFly) patch-ae (use INSTALL_SCRIPT for installing misc/ncurses*-config). + improve configure script macros CF_HEADER_PATH and CF_LIBRARY_PATH by adding CFLAGS, CPPFLAGS and LDFLAGS, LIBS values to the search-lists. + correct title string for keybound manpage (patch by Frederic Culot, OpenBSD documentation/6019), 20081206 + move del_curterm() call from _nc_freeall() to _nc_leaks_tinfo() to work for progs/clear, progs/tabs, etc. + correct buffer-size after internal resizing of wide-character set_field_buffer(), broken in 20081018 changes (report by Mike Gran). + add "-i" option to test/filter.c to tell it to use initscr() rather than newterm(), to investigate report on comp.unix.programmer that ncurses would clear the screen in that case (it does not - the issue was xterm's alternate screen feature). + add check in mouse-driver to disable connection if GPM returns a zero, indicating that the connection is closed (Debian #506717, adapted from patch by Samuel Thibault). 20081129 + improve a workaround in adding wide-characters, when a control character is found. The library (cf: 20040207) uses unctrl() to obtain a printable version of the control character, but was not passing color or video attributes. + improve test/ncurses.c 'a' test, using unctrl() more consistently to display meta-characters. + turn on _XOPEN_CURSES definition in curses.h + add eterm-color entry (report by Vincent Lefevre) -TD + correct use of key_name() in test/ncurses.c 'A' test, which only displays wide-characters, not key-codes since 20070612 (report by Ricardo Cantu). 20081122 + change _nc_has_mouse() to has_mouse(), reflect its use in C++ and Ada95 (patch by Juergen Pfeifer). + document in TO-DO an issue with Cygwin's package for GNAT (report by Mike Dennison). + improve error-checking of command-line options in "tabs" program. 20081115 + change several terminfo entries to make consistent use of ANSI clear-all-tabs -TD + add "tabs" program (prompted by Debian #502260). + add configure --without-manpages option (request by Mike Frysinger). 20081102 5.7 release for upload to ftp.gnu.org 20081025 + add a manpage to discuss memory leaks. + add support for shared libraries for QNX (other than libtool, which does not work well on that platform). + build-fix for QNX C++ binding. 20081018 + build-fixes for OS/2 EMX. + modify form library to accept control characters such as newline in set_field_buffer(), which is compatible with Solaris (report by Nit Khair). + modify configure script to assume --without-hashed-db when --disable-database is used. + add "-e" option in ncurses/Makefile.in when generating source-files to force earlier exit if the build environment fails unexpectedly (prompted by patch by Adrian Bunk). + change configure script to use CF_UTF8_LIB, improved variant of CF_LIBUTF8. 20081012 + add teraterm4.59 terminfo entry, use that as primary teraterm entry, rename original to teraterm2.3 -TD + update "gnome" terminfo to 2.22.3 -TD + update "konsole" terminfo to 1.6.6, needs today's fix for tic -TD + add "aterm" terminfo -TD + add "linux2.6.26" terminfo -TD + add logic to tic for cancelling strings in user-defined capabilities, overlooked til now. 20081011 + regenerated html documentation. + add -m and -s options to test/keynames.c and test/key_names.c to test the meta() function with keyname() or key_name(), respectively. + correct return value of key_name() on error; it is null. + document some unresolved issues for rpath and pthreads in TO-DO. + fix a missing prototype for ioctl() on OpenBSD in tset.c + add configure option --disable-tic-depends to make explicit whether tic library depends on ncurses/ncursesw library, amends change from 20080823 (prompted by Debian #501421). 20081004 + some build-fixes for configure --disable-ext-funcs (incomplete, but works for C/C++ parts). + improve configure-check for awks unable to handle large strings, e.g. AIX 5.1 whose awk silently gives up on large printf's. 20080927 + fix build for --with-dmalloc by workaround for redefinition of strndup between string.h and dmalloc.h + fix build for --disable-sigwinch + add environment variable NCURSES_GPM_TERMS to allow override to use GPM on terminals other than "linux", etc. + disable GPM mouse support when $TERM does not happen to contain "linux", since Gpm_Open() no longer limits its assertion to terminals that it might handle, e.g., within "screen" in xterm. + reset mouse file-descriptor when unloading GPM library (report by Miroslav Lichvar). + fix build for --disable-leaks --enable-widec --with-termlib > patch by Juergen Pfeifer: + use improved initialization for soft-label keys in Ada95 sample code. + discard internal symbol _nc_slk_format (unused since 20080112). + move call of slk_paint_info() from _nc_slk_initialize() to slk_intern_refresh(), improving initialization. 20080925 + fix bug in mouse code for GPM from 20080920 changes (reported in Debian #500103, also Miroslav Lichvar). 20080920 + fix shared-library rules for cygwin with tic- and tinfo-libraries. + fix a memory leak when failure to connect to GPM. + correct check for notimeout() in wgetch() (report on linux.redhat newsgroup by FurtiveBertie). + add an example warning-suppression file for valgrind, misc/ncurses.supp (based on example from Reuben Thomas) 20080913 + change shared-library configuration for OpenBSD, make rpath work. + build-fixes for using libutf8, e.g., on OpenBSD 3.7 20080907 + corrected fix for --enable-weak-symbols (report by Frederic L W Meunier). 20080906 + corrected gcc options for building shared libraries on IRIX64. + add configure check for awk programs unable to handle big-strings, use that to improve the default for --enable-big-strings option. + makefile-fixes for --enable-weak-symbols (report by Frederic L W Meunier). + update test/configure script. + adapt ifdef's from library to make test/view.c build when mbrtowc() is unavailable, e.g., with HPUX 10.20. + add configure check for wcsrtombs, mbsrtowcs, which are used in test/ncurses.c, and use wcstombs, mbstowcs instead if available, fixing build of ncursew for HPUX 11.00 20080830 + fixes to make Ada95 demo_panels() example work. + modify Ada95 'rain' test program to accept keyboard commands like the C-version. + modify BeOS-specific ifdef's to build on Haiku (patch by Scott Mccreary). + add configure-check to see if the std namespace is legal for cerr and endl, to fix a build issue with Tru64. + consistently use NCURSES_BOOL in lib_gen.c + filter #line's from lib_gen.c + change delimiter in MKlib_gen.sh from '%' to '@', to avoid substitution by IBM xlc to '#' as part of its extensions to digraphs. + update config.guess, config.sub from http://savannah.gnu.org/projects/config (caveat - its maintainer removed support for older Linux systems). 20080823 + modify configure check for pthread library to work with OSF/1 5.1, which uses #define's to associate its header and library. + use pthread_mutexattr_init() for initializing pthread_mutexattr_t, makes threaded code work on HPUX 11.23 + fix a bug in demo_menus in freeing menus (cf: 20080804). + modify configure script for the case where tic library is used (and possibly renamed) to remove its dependency upon ncurses/ncursew library (patch by Dr Werner Fink). + correct manpage for menu_fore() which gave wrong default for the attribute used to display a selected entry (report by Mike Gran). + add Eterm-256color, Eterm-88color and rxvt-88color (prompted by Debian #495815) -TD 20080816 + add configure option --enable-weak-symbols to turn on new feature. + add configure-check for availability of weak symbols. + modify linkage with pthread library to use weak symbols so that applications not linked to that library will not use the mutexes, etc. This relies on gcc, and may be platform-specific (patch by Dr Werner Fink). + add note to INSTALL to document limitation of renaming of tic library using the --with-ticlib configure option (report by Dr Werner Fink). + document (in manpage) why tputs does not detect I/O errors (prompted by comments by Samuel Thibault). + fix remaining warnings from Klocwork report. 20080804 + modify _nc_panelhook() data to account for a permanent memory leak. + fix memory leaks in test/demo_menus + fix most warnings from Klocwork tool (report by Larry Zhou). + modify configure script CF_XOPEN_SOURCE macro to add case for "dragonfly" from xterm #236 changes. + modify configure script --with-hashed-db to let $LIBS override the search for the db library (prompted by report by Samson Pierre). 20080726 + build-fixes for gcc 4.3.1 (changes to gnat "warnings", and C inlining thresholds). 20080713 + build-fix (reports by Christian Ebert, Funda Wang). 20080712 + compiler-warning fixes for Solaris. 20080705 + use NCURSES_MOUSE_MASK() in definition of BUTTON_RELEASE(), etc., to make those work properly with the "--enable-ext-mouse" configuration (cf: 20050205). + improve documentation of build-cc options in INSTALL. + work-around a bug in gcc 4.2.4 on AIX, which does not pass the -static/-dynamic flags properly to linker, causing test/bs to not link. 20080628 + correct some ifdef's needed for the broken-linker configuration. + make debugging library's $BAUDRATE feature work for termcap interface. + make $NCURSES_NO_PADDING feature work for termcap interface (prompted by comment on FreeBSD mailing list). + add screen.mlterm terminfo entry -TD + improve mlterm and mlterm+pcfkeys terminfo entries -TD 20080621 + regenerated html documentation. + expand manpage description of parameters for form_driver() and menu_driver() (prompted by discussion with Adam Spragg). + add null-pointer checks for cur_term in baudrate() and def_shell_mode(), def_prog_mode() + fix some memory leaks in delscreen() and wide acs. 20080614 + modify test/ditto.c to illustrate multi-threaded use_screen(). + change CC_SHARED_OPTS from -KPIC to -xcode=pic32 for Solaris. + add "-shared" option to MK_SHARED_LIB for gcc on Solaris (report by Poor Yorick). 20080607 + finish changes to wgetch(), making it switch as needed to the window's actual screen when calling wrefresh() and wgetnstr(). That allows wgetch() to get used concurrently in different threads with some minor restrictions, e.g., the application should not delete a window which is being used in a wgetch(). + simplify mutex's, combining the window- and screen-mutex's. 20080531 + modify wgetch() to use the screen which corresponds to its window parameter rather than relying on SP; some dependent functions still use SP internally. + factor out most use of SP in lib_mouse.c, using parameter. + add internal _nc_keyname(), replacing keyname() to associate with a particular SCREEN rather than the global SP. + add internal _nc_unctrl(), replacing unctrl() to associate with a particular SCREEN rather than the global SP. + add internal _nc_tracemouse(), replacing _tracemouse() to eliminate its associated global buffer _nc_globals.tracemse_buf now in SCREEN. + add internal _nc_tracechar(), replacing _tracechar() to use SCREEN in preference to the global _nc_globals.tracechr_buf buffer. 20080524 + modify _nc_keypad() to make it switch temporarily as needed to the screen which must be updated. + wrap cur_term variable to help make _nc_keymap() thread-safe, and always set the screen's copy of this variable in set_curterm(). + restore curs_set() state after endwin()/refresh() (report/patch Miroslav Lichvar) 20080517 + modify configure script to note that --enable-ext-colors and --enable-ext-mouse are not experimental, but extensions from the ncurses ABI 5. + corrected manpage description of setcchar() (discussion with Emanuele Giaquinta). + fix for adding a non-spacing character at the beginning of a line (report/patch by Miroslav Lichvar). 20080503 + modify screen.* terminfo entries using new screen+fkeys to fix overridden keys in screen.rxvt (Debian #478094) -TD + modify internal interfaces to reduce wgetch()'s dependency on the global SP. + simplify some loops with macros each_screen(), each_window() and each_ripoff(). 20080426 + continue modifying test/ditto.c toward making it demonstrate multithreaded use_screen(), using fifos to pass data between screens. + fix typo in form.3x (report by Mike Gran). 20080419 + add screen.rxvt terminfo entry -TD + modify tic -f option to format spaces as \s to prevent them from being lost when that is read back in unformatted strings. + improve test/ditto.c, using a "talk"-style layout. 20080412 + change test/ditto.c to use openpty() and xterm. + add locks for copywin(), dupwin(), overlap(), overlay() on their window parameters. + add locks for initscr() and newterm() on updates to the SCREEN pointer. + finish table in curs_thread.3x manpage. 20080405 + begin table in curs_thread.3x manpage describing the scope of data used by each function (or symbol) for threading analysis. + add null-pointer checks to setsyx() and getsyx() (prompted by discussion by Martin v. Lowis and Jeroen Ruigrok van der Werven on python-dev2 mailing list). 20080329 + add null-pointer checks in set_term() and delscreen(). + move _nc_windows into _nc_globals, since windows can be pads, which are not associated with a particular screen. + change use_screen() to pass the SCREEN* parameter rather than stdscr to the callback function. + force libtool to use tag for 'CC' in case it does not detect this, e.g., on aix when using CC=powerpc-ibm-aix5.3.0.0-gcc (report/patch by Michael Haubenwallner). + override OBJEXT to "lo" when building with libtool, to work on platforms such as AIX where libtool may use a different suffix for the object files than ".o" (report/patch by Michael Haubenwallner). + add configure --with-pthread option, for building with the POSIX thread library. 20080322 + fill in extended-color pair two more places in wbkgrndset() and waddch_nosync() (prompted by Sedeno's patch). + fill in extended-color pair in _nc_build_wch() to make colors work for wide-characters using extended-colors (patch by Alejandro R Sedeno). + add x/X toggles to ncurses.c C color test to test/demo wide-characters with extended-colors. + add a/A toggles to ncurses.c c/C color tests. + modify test/ditto.c to use use_screen(). + finish modifying test/rain.c to demonstrate threads. 20080308 + start modifying test/rain.c for threading demo. + modify test/ncurses.c to make 'f' test accept the f/F/b/F/ toggles that the 'F' accepts. + modify test/worm.c to show trail in reverse-video when other threads are working concurrently. + fix a deadlock from improper nesting of mutexes for windowlist and window. 20080301 + fixes from 20080223 resolved issue with mutexes; change to use recursive mutexes to fix memory leak in delwin() as called from _nc_free_and_exit(). 20080223 + fix a size-difference in _nc_globals which caused hanging of mutex lock/unlock when termlib was built separately. 20080216 + avoid using nanosleep() in threaded configuration since that often is implemented to suspend the entire process. 20080209 + update test programs to build/work with various UNIX curses for comparisons. This was to reinvestigate statement in X/Open curses that insnstr and winsnstr perform wrapping. None of the Unix-branded implementations do this, as noted in manpage (cf: 20040228). 20080203 + modify _nc_setupscreen() to set the legacy-coding value the same for both narrow/wide models. It had been set only for wide model, but is needed to make unctrl() work with locale in the narrow model. + improve waddch() and winsch() handling of EILSEQ from mbrtowc() by using unctrl() to display illegal bytes rather than trying to append further bytes to make up a valid sequence (reported by Andrey A Chernov). + modify unctrl() to check codes in 128-255 range versus isprint(). If they are not printable, and locale was set, use a "M-" or "~" sequence. 20080126 + improve threading in test/worm.c (wrap refresh calls, and KEY_RESIZE handling). Now it hangs in napms(), no matter whether nanosleep() or poll() or select() are used on Linux. 20080119 + fixes to build with --disable-ext-funcs + add manpage for use_window and use_screen. + add set_tabsize() and set_escdelay() functions. 20080112 + remove recursive-mutex definitions, finish threading demo for worm.c + remove a redundant adjustment of lines in resizeterm.c's adjust_window() which caused occasional misadjustment of stdscr when softkeys were used. 20080105 + several improvements to terminfo entries based on xterm #230 -TD + modify MKlib_gen.sh to handle keyname/key_name prototypes, so the "link_test" builds properly. + fix for toe command-line options -u/-U to ensure filename is given. + fix allocation-size for command-line parsing in infocmp from 20070728 (report by Miroslav Lichvar) + improve resizeterm() by moving ripped-off lines, and repainting the soft-keys (report by Katarina Machalkova) + add clarification in wclear's manpage noting that the screen will be cleared even if a subwindow is cleared (prompted by Christer Enfors question). + change test/ncurses.c soft-key tests to work with KEY_RESIZE. 20071222 + continue implementing support for threading demo by adding mutex for delwin(). 20071215 + add several functions to C++ binding which wrap C functions that pass a WINDOW* parameter (request by Chris Lee). 20071201 + add note about configure options needed for Berkeley database to the INSTALL file. + improve checks for version of Berkeley database libraries. + amend fix for rpath to not modify LDFLAGS if the platform has no applicable transformation (report by Christian Ebert, cf: 20071124). 20071124 + modify configure option --with-hashed-db to accept a parameter which is the install-prefix of a given Berkeley Database (prompted by pierre4d2 comments). + rewrite wrapper for wcrtomb(), making it work on Solaris. This is used in the form library to determine the length of the buffer needed by field_buffer (report by Alfred Fung). + remove unneeded window-parameter from C++ binding for wresize (report by Chris Lee). 20071117 + modify the support for filesystems which do not support mixed-case to generate 2-character (hexadecimal) codes for the lower-level of the filesystem terminfo database (request by Michail Vidiassov). + add configure option --enable-mixed-case, to allow overriding the configure script's check if the filesystem supports mixed-case filenames. + add wresize() to C++ binding (request by Chris Lee). + define NCURSES_EXT_FUNCS and NCURSES_EXT_COLORS in curses.h to make it simpler to tell if the extended functions and/or colors are declared. 20071103 + update memory-leak checks for changes to names.c and codes.c + correct acsc strings in h19, z100 (patch by Benjamin C W Sittler). 20071020 + continue implementing support for threading demo by adding mutex for use_window(). + add mrxvt terminfo entry, add/fix xterm building blocks for modified cursor keys -TD + compile with FreeBSD "contemporary" TTY interface (patch by Rong-En Fan). 20071013 + modify makefile rules to allow clear, tput and tset to be built without libtic. The other programs (infocmp, tic and toe) rely on that library. + add/modify null-pointer checks in several functions for SP and/or the WINDOW* parameter (report by Thorben Krueger). + fixes for field_buffer() in formw library (see Redhat #310071, patches by Miroslav Lichvar). + improve performance of NCURSES_CHAR_EQ code (patch by Miroslav Lichvar). + update/improve mlterm and rxvt terminfo entries, e.g., for the modified cursor- and keypad-keys -TD 20071006 + add code to curses.priv.h ifdef'd with NCURSES_CHAR_EQ, which changes the CharEq() macro to an inline function to allow comparing cchar_t struct's without comparing gaps in a possibly unpacked memory layout (report by Miroslav Lichvar). 20070929 + add new functions to lib_trace.c to setup mutex's for the _tracef() calls within the ncurses library. + for the reentrant model, move _nc_tputs_trace and _nc_outchars into the SCREEN. + start modifying test/worm.c to provide threading demo (incomplete). + separated ifdef's for some BSD-related symbols in tset.c, to make it compile on LynxOS (report by Greg Gemmer). 20070915 + modify Ada95/gen/Makefile to use shlib script, to simplify building shared-library configuration on platforms lacking rpath support. + build-fix for Ada95/src/Makefile to reflect changed dependency for the terminal-interface-curses-aux.adb file which is now generated. + restructuring test/worm.c, for use_window() example. 20070908 + add use_window() and use_screen() functions, to develop into support for threaded library (incomplete). + fix typos in man/curs_opaque.3x which kept the install script from creating symbolic links to two aliases created in 20070818 (report by Rong-En Fan). 20070901 + remove a spurious newline from output of html.m4, which caused links for Ada95 html to be incorrect for the files generated using m4. + start investigating mutex's for SCREEN manipulation (incomplete). + minor cleanup of codes.c/names.c for --enable-const + expand/revise "Routine and Argument Names" section of ncurses manpage to address report by David Givens in newsgroup discussion. + fix interaction between --without-progs/--with-termcap configure options (report by Michail Vidiassov). + fix typo in "--disable-relink" option (report by Michail Vidiassov). 20070825 + fix a sign-extension bug in infocmp's repair_acsc() function (cf: 971004). + fix old configure script bug which prevented "--disable-warnings" option from working (patch by Mike Frysinger). 20070818 + add 9term terminal description (request by Juhapekka Tolvanen) -TD + modify comp_hash.c's string output to avoid misinterpreting a null "\0" followed by a digit. + modify MKnames.awk and MKcodes.awk to support big-strings. This only applies to the cases (broken linker, reentrant) where the corresponding arrays are accessed via wrapper functions. + split MKnames.awk into two scripts, eliminating the shell redirection which complicated the make process and also the bogus timestamp file which was introduced to fix "make -j". + add test/test_opaque.c, test/test_arrays.c + add wgetscrreg() and wgetparent() for applications that may need it when NCURSES_OPAQUE is defined (prompted by Bryan Christ). 20070812 + amend treatment of infocmp "-r" option to retain the 1023-byte limit unless "-T" is given (cf: 981017). + modify comp_captab.c generation to use big-strings. + make _nc_capalias_table and _nc_infoalias_table private accessed via _nc_get_alias_table() since the tables are used only within the tic library. + modify configure script to skip Intel compiler in CF_C_INLINE. + make _nc_info_hash_table and _nc_cap_hash_table private accessed via _nc_get_hash_table() since the tables are used only within the tic library. 20070728 + make _nc_capalias_table and _nc_infoalias_table private, accessed via _nc_get_alias_table() since they are used only by parse_entry.c + make _nc_key_names private since it is used only by lib_keyname.c + add --disable-big-strings configure option to control whether unctrl.c is generated using the big-string optimization - which may use strings longer than supported by a given compiler. + reduce relocation tables for tic, infocmp by changing type of internal hash tables to short, and make those private symbols. + eliminate large fixed arrays from progs/infocmp.c 20070721 + change winnstr() to stop at the end of the line (cf: 970315). + add test/test_get_wstr.c + add test/test_getstr.c + add test/test_inwstr.c + add test/test_instr.c 20070716 + restore a call to obtain screen-size in _nc_setupterm(), which is used in tput and other non-screen applications via setupterm() (Debian #433357, reported by Florent Bayle, Christian Ohm, cf: 20070310). 20070714 + add test/savescreen.c test-program + add check to trace-file open, if the given name is a directory, add ".log" to the name and try again. + add konsole-256color entry -TD + add extra gcc warning options from xterm. + minor fixes for ncurses/hashmap test-program. + modify configure script to quiet c++ build with libtool when the --disable-echo option is used. + modify configure script to disable ada95 if libtool is selected, writing a warning message (addresses FreeBSD #114493). + update config.guess, config.sub 20070707 + add continuous-move "M" to demo_panels to help test refresh changes. + improve fix for refresh of window on top of multi-column characters, taking into account some split characters on left/right window boundaries. 20070630 + add "widec" row to _tracedump() output to help diagnose remaining problems with multi-column characters. + partial fix for refresh of window on top of multi-column characters which are partly overwritten (report by Sadrul H Chowdhury). + ignore A_CHARTEXT bits in vidattr() and vid_attr(), in case multi-column extension bits are passed there. + add setlocale() call to demo_panels.c, needed for wide-characters. + add some output flags to _nc_trace_ttymode to help diagnose a bug report by Larry Virden, i.e., ONLCR, OCRNL, ONOCR and ONLRET, 20070623 + add test/demo_panels.c + implement opaque version of setsyx() and getsyx(). 20070612 + corrected xterm+pcf2 terminfo modifiers for F1-F4, to match xterm #226 -TD + split-out key_name() from MKkeyname.awk since it now depends upon wunctrl() which is not in libtinfo (report by Rong-En Fan). 20070609 + add test/key_name.c + add stdscr cases to test/inchs.c and test/inch_wide.c + update test/configure + correct formatting of DEL (0x7f) in _nc_vischar(). + null-terminate result of wunctrl(). + add null-pointer check in key_name() (report by Andreas Krennmair, cf: 20020901). 20070602 + adapt mouse-handling code from menu library in form-library (discussion with Clive Nicolson). + add a modification of test/dots.c, i.e., test/dots_mvcur.c to illustrate how to use mvcur(). + modify wide-character flavor of SetAttr() to preserve the WidecExt() value stored in the .attr field, e.g., in case it is overwritten by chgat (report by Aleksi Torhamo). + correct buffer-size for _nc_viswbuf2n() (report by Aleksi Torhamo). + build-fixes for Solaris 2.6 and 2.7 (patch by Peter O'Gorman). 20070526 + modify keyname() to use "^X" form only if meta() has been called, or if keyname() is called without initializing curses, e.g., via initscr() or newterm() (prompted by LinuxBase #1604). + document some portability issues in man/curs_util.3x + add a shadow copy of TTY buffer to _nc_prescreen to fix applications broken by moving that data into SCREEN (cf: 20061230). 20070512 + add 'O' (wide-character panel test) in ncurses.c to demonstrate a problem reported by Sadrul H Chowdhury with repainting parts of a fullwidth cell. + modify slk_init() so that if there are preceding calls to ripoffline(), those affect the available lines for soft-keys (adapted from patch by Clive Nicolson). + document some portability issues in man/curs_getyx.3x 20070505 + fix a bug in Ada95/samples/ncurses which caused a variable to become uninitialized in the "b" test. + fix Ada95/gen/Makefile.in adahtml rule to account for recent movement of files, fix a few incorrect manpage references in the generated html. + add Ada95 binding to _nc_freeall() as Curses_Free_All to help with memory-checking. + correct some functions in Ada95 binding which were using return value from C where none was returned: idcok(), immedok() and wtimeout(). + amend recent changes for Ada95 binding to make it build with Cygwin's linker, e.g., with configure options --enable-broken-linker --with-ticlib 20070428 + add a configure check for gcc's options for inlining, use that to quiet a warning message where gcc's default behavior changed from 3.x to 4.x. + improve warning message when checking if GPM is linked to curses library by not warning if its use of "wgetch" is via a weak symbol. + add loader options when building with static libraries to ensure that an installed shared library for ncurses does not conflict. This is reported as problem with Tru64, but could affect other platforms (report Martin Mokrejs, analysis by Tim Mooney). + fix build on cygwin after recent ticlib/termlib changes, i.e., + adjust TINFO_SUFFIX value to work with cygwin's dll naming + revert a change from 20070303 which commented out dependency of SHLIB_LIST in form/menu/panel/c++ libraries. + fix initialization of ripoff stack pointer (cf: 20070421). 20070421 + move most static variables into structures _nc_globals and _nc_prescreen, to simplify storage. + add/use configure script macro CF_SIG_ATOMIC_T, use the corresponding type for data manipulated by signal handlers (prompted by comments in mailing.openbsd.bugs newsgroup). + modify CF_WITH_LIBTOOL to allow one to pass options such as -static to the libtool create- and link-operations. 20070414 + fix whitespace in curs_opaque.3x which caused a spurious ';' in the installed aliases (report by Peter Santoro). + fix configure script to not try to generate adacurses-config when Ada95 tree is not built. 20070407 + add man/curs_legacy.3x, man/curs_opaque.3x + fix acs_map binding for Ada95 when --enable-reentrant is used. + add adacurses-config to the Ada95 install, based on version from FreeBSD port, in turn by Juergen Pfeifer in 2000 (prompted by comment on comp.lang.ada newsgroup). + fix includes in c++ binding to build with Intel compiler (cf: 20061209). + update install rule in Ada95 to use mkdirs.sh > other fixes prompted by inspection for Coverity report: + modify ifdef's for c++ binding to use try/catch/throw statements + add a null-pointer check in tack/ansi.c request_cfss() + fix a memory leak in ncurses/base/wresize.c + corrected check for valid memu/meml capabilities in progs/dump_entry.c when handling V_HPUX case. > fixes based on Coverity report: + remove dead code in test/bs.c + remove dead code in test/demo_defkey.c + remove an unused assignment in progs/infocmp.c + fix a limit check in tack/ansi.c tools_charset() + fix tack/ansi.c tools_status() to perform the VT320/VT420 tests in request_cfss(). The function had exited too soon. + fix a memory leak in tic.c's make_namelist() + fix a couple of places in tack/output.c which did not check for EOF. + fix a loop-condition in test/bs.c + add index checks in lib_color.c for color palettes + add index checks in progs/dump_entry.c for version_filter() handling of V_BSD case. + fix a possible null-pointer dereference in copywin() + fix a possible null-pointer dereference in waddchnstr() + add a null-pointer check in _nc_expand_try() + add a null-pointer check in tic.c's make_namelist() + add a null-pointer check in _nc_expand_try() + add null-pointer checks in test/cardfile.c + fix a double-free in ncurses/tinfo/trim_sgr0.c + fix a double-free in ncurses/base/wresize.c + add try/catch block to c++/cursesmain.cc 20070331 + modify Ada95 binding to build with --enable-reentrant by wrapping global variables (bug: acs_map does not yet work). + modify Ada95 binding to use the new access-functions, allowing it to build/run when NCURSES_OPAQUE is set. + add access-functions and macros to return properties of the WINDOW structure, e.g., when NCURSES_OPAQUE is set. + improved install-sh's quoting. + use mkdirs.sh rather than mkinstalldirs, e.g., to use fixes from other programs. 20070324 + eliminate part of the direct use of WINDOW data from Ada95 interface. + fix substitutions for termlib filename to make configure option --enable-reentrant work with --with-termlib. + change a constructor for NCursesWindow to allow compiling with NCURSES_OPAQUE set, since we cannot pass a reference to an opaque pointer. 20070317 + ignore --with-chtype=unsigned since unsigned is always added to the type in curses.h; do the same for --with-mmask-t. + change warning regarding --enable-ext-colors and wide-character in the configure script to an error. + tweak error message in CF_WITH_LIBTOOL to distinguish other programs such as Darwin's libtool program (report by Michail Vidiassov) + modify edit_man.sh to allow for multiple substitutions per line. + set locale in misc/ncurses-config.in since it uses a range + change permissions libncurses++.a install (report by Michail Vidiassov). + corrected length of temporary buffer in wide-character version of set_field_buffer() (related to report by Bryan Christ). 20070311 + fix mk-1st.awk script install_shlib() function, broken in 20070224 changes for cygwin (report by Michail Vidiassov). 20070310 + increase size of array in _nc_visbuf2n() to make "tic -v" work properly in its similar_sgr() function (report/analysis by Peter Santoro). + add --enable-reentrant configure option for ongoing changes to implement a reentrant version of ncurses: + libraries are suffixed with "t" + wrap several global variables (curscr, newscr, stdscr, ttytype, COLORS, COLOR_PAIRS, COLS, ESCDELAY, LINES and TABSIZE) as functions returning values stored in SCREEN or cur_term. + move some initialization (LINES, COLS) from lib_setup.c, i.e., setupterm() to _nc_setupscreen(), i.e., newterm(). 20070303 + regenerated html documentation. + add NCURSES_OPAQUE symbol to curses.h, will use to make structs opaque in selected configurations. + move the chunk in lib_acs.c which resets acs capabilities when running on a terminal whose locale interferes with those into _nc_setupscreen(), so the libtinfo/libtinfow files can be made identical (requested by Miroslav Lichvar). + do not use configure variable SHLIB_LIBS for building libraries outside the ncurses directory, since that symbol is customized only for that directory, and using it introduces an unneeded dependency on libdl (requested by Miroslav Lichvar). + modify mk-1st.awk so the generated makefile rules for linking or installing shared libraries do not first remove the library, in case it is in use, e.g., libncurses.so by /bin/sh (report by Jeff Chua). + revised section "Using NCURSES under XTERM" in ncurses-intro.html (prompted by newsgroup comment by Nick Guenther). 20070224 + change internal return codes of _nc_wgetch() to check for cases where KEY_CODE_YES should be returned, e.g., if a KEY_RESIZE was ungetch'd, and read by wget_wch(). + fix static-library build broken in 20070217 changes to remove "-ldl" (report by Miroslav Lichvar). + change makefile/scripts for cygwin to allow building termlib. + use Form_Hook in manpages to match form.h + use Menu_Hook in manpages, as well as a few places in menu.h + correct form- and menu-manpages to use specific Field_Options, Menu_Options and Item_Options types. + correct prototype for _tracechar() in manpage (cf: 20011229). + correct prototype for wunctrl() in manpage. 20070217 + fixes for $(TICS_LIST) in ncurses/Makefile (report by Miroslav Lichvar). + modify relinking of shared libraries to apply only when rpath is enabled, and add --disable-relink option which can be used to disable the feature altogether (reports by Michail Vidiassov, Adam J Richter). + fix --with-termlib option for wide-character configuration, stripping the "w" suffix in one place (report by Miroslav Lichvar). + remove "-ldl" from some library lists to reduce dependencies in programs (report by Miroslav Lichvar). + correct description of --enable-signed-char in configure --help (report by Michail Vidiassov). + add pattern for GNU/kFreeBSD configuration to CF_XOPEN_SOURCE, which matches an earlier change to CF_SHARED_OPTS, from xterm #224 fixes. + remove "${DESTDIR}" from -install_name option used for linking shared libraries on Darwin (report by Michail Vidiassov). 20070210 + add test/inchs.c, test/inch_wide.c, to test win_wchnstr(). + remove libdl from library list for termlib (report by Miroslav Lichvar). + fix configure.in to allow --without-progs --with-termlib (patch by Miroslav Lichvar). + modify win_wchnstr() to ensure that only a base cell is returned for each multi-column character (prompted by report by Wei Kong regarding change in mvwin_wch() cf: 20041023). 20070203 + modify fix_wchnstr() in form library to strip attributes (and color) from the cchar_t array (field cells) read from a field's window. Otherwise, when copying the field cells back to the window, the associated color overrides the field's background color (report by Ricardo Cantu). + improve tracing for form library, showing created forms, fields, etc. + ignore --enable-rpath configure option if --with-shared was omitted. + add _nc_leaks_tinfo(), _nc_free_tic(), _nc_free_tinfo() entrypoints to allow leak-checking when both tic- and tinfo-libraries are built. + drop CF_CPP_VSCAN_FUNC macro from configure script, since C++ binding no longer relies on it. + disallow combining configure script options --with-ticlib and --enable-termcap (report by Rong-En Fan). + remove tack from ncurses tree. 20070128 + fix typo in configure script that broke --with-termlib option (report by Rong-En Fan). 20070127 + improve fix for FreeBSD gnu/98975, to allow for null pointer passed to tgetent() (report by Rong-en Fan). + update tack/HISTORY and tack/README to tell how to build it after it is removed from the ncurses tree. + fix configure check for libtool's version to trim blank lines (report by sci-fi@hush.ai). + review/eliminate other original-file artifacts in cursesw.cc, making its license consistent with ncurses. + use ncurses vw_scanw() rather than reading into a fixed buffer in the c++ binding for scanw() methods (prompted by report by Nuno Dias). + eliminate fixed-buffer vsprintf() calls in c++ binding. 20070120 + add _nc_leaks_tic() to separate leak-checking of tic library from term/ncurses libraries, and thereby eliminate a library dependency. + fix test/mk-test.awk to ignore blank lines. + correct paths in include/headers, for --srcdir (patch by Miroslav Lichvar). 20070113 + add a break-statement in misc/shlib to ensure that it exits on the _first_ matched directory (report by Paul Novak). + add tack/configure, which can be used to build tack outside the ncurses build-tree. + add --with-ticlib option, to build/install the tic-support functions in a separate library (suggested by Miroslav Lichvar). 20070106 + change MKunctrl.awk to reduce relocation table for unctrl.o + change MKkeyname.awk to reduce relocation table for keyname.o (patch by Miroslav Lichvar). 20061230 + modify configure check for libtool's version to trim blank lines (report by sci-fi@hush.ai). + modify some modules to allow them to be reentrant if _REENTRANT is defined: lib_baudrate.c, resizeterm.c (local data only) + eliminate static data from some modules: add_tries.c, hardscroll.c, lib_ttyflags.c, lib_twait.c + improve manpage install to add aliases for the transformed program names, e.g., from --program-prefix. + used linklint to verify links in the HTML documentation, made fixes to manpages as needed. + fix a typo in curs_mouse.3x (report by William McBrine). + fix install-rule for ncurses5-config to make the bin-directory. 20061223 + modify configure script to omit the tic (terminfo compiler) support from ncurses library if --without-progs option is given. + modify install rule for ncurses5-config to do this via "install.libs" + modify shared-library rules to allow FreeBSD 3.x to use rpath. + update config.guess, config.sub 20061217 5.6 release for upload to ftp.gnu.org 20061217 + add ifdef's for for HPUX, which has the corresponding definitions in . + revert the va_copy() change from 20061202, since it was neither correct nor portable. + add $(LOCAL_LIBS) definition to progs/Makefile.in, needed for rpath on Solaris. + ignore wide-acs line-drawing characters that wcwidth() claims are not one-column. This is a workaround for Solaris' broken locale support. 20061216 + modify configure --with-gpm option to allow it to accept a parameter, i.e., the name of the dynamic GPM library to load via dlopen() (requested by Bryan Henderson). + add configure option --with-valgrind, changes from vile. + modify configure script AC_TRY_RUN and AC_TRY_LINK checks to use 'return' in preference to 'exit()'. 20061209 + change default for --with-develop back to "no". + add XTABS to tracing of TTY bits. + updated autoconf patch to ifdef-out the misfeature which declares exit() for configure tests. This fixes a redefinition warning on Solaris. + use ${CC} rather than ${LD} in shared library rules for IRIX64, Solaris to help ensure that initialization sections are provided for extra linkage requirements, e.g., of C++ applications (prompted by comment by Casper Dik in newsgroup). + rename "$target" in CF_MAN_PAGES to make it easier to distinguish from the autoconf predefined symbol. There was no conflict, since "$target" was used only in the generated edit_man.sh file, but SuSE's rpm package contains a patch. 20061202 + update man/term.5 to reflect extended terminfo support and hashed database configuration. + updates for test/configure script. + adapted from SuSE rpm package: + remove long-obsolete workaround for broken-linker which declared cur_term in tic.c + improve error recovery in PUTC() macro when wcrtomb() does not return usable results for an 8-bit character. + patches from rpm package (SuSE): + use va_copy() in extra varargs manipulation for tracing version of printw, etc. + use a va_list rather than a null in _nc_freeall()'s call to _nc_printf_string(). + add some see-also references in manpages to show related wide-character functions (suggested by Claus Fischer). 20061125 + add a check in lib_color.c to ensure caller does not increase COLORS above max_colors, which is used as an array index (discussion with Simon Sasburg). + add ifdef's allowing ncurses to be built with tparm() using either varargs (the existing status), or using a fixed-parameter list (to match X/Open). 20061104 + fix redrawing of windows other than stdscr using wredrawln() by touching the corresponding rows in curscr (discussion with Dan Gookin). + add test/redraw.c + add test/echochar.c + review/cleanup manpage descriptions of error-returns for form- and menu-libraries (prompted by FreeBSD docs/46196). 20061028 + add AUTHORS file -TD + omit the -D options from output of the new config script --cflags option (suggested by Ralf S Engelschall). + make NCURSES_INLINE unconditionally defined in curses.h 20061021 + revert change to accommodate bash 3.2, since that breaks other platforms, e.g., Solaris. + minor fixes to NEWS file to simplify scripting to obtain list of contributors. + improve some shared-library configure scripting for Linux, FreeBSD and NetBSD to make "--with-shlib-version" work. + change configure-script rules for FreeBSD shared libraries to allow for rpath support in versions past 3. + use $(DESTDIR) in makefile rules for installing/uninstalling the package config script (reports/patches by Christian Wiese, Ralf S Engelschall). + fix a warning in the configure script for NetBSD 2.0, working around spurious blanks embedded in its ${MAKEFLAGS} symbol. + change test/Makefile to simplify installing test programs in a different directory when --enable-rpath is used. 20061014 + work around bug in bash 3.2 by adding extra quotes (Jim Gifford). + add/install a package config script, e.g., "ncurses5-config" or "ncursesw5-config", according to configuration options. 20061007 + add several GNU Screen terminfo variations with 16- and 256-colors, and status line (Alain Bench). + change the way shared libraries (other than libtool) are installed. Rather than copying the build-tree's libraries, link the shared objects into the install directory. This makes the --with-rpath option work except with $(DESTDIR) (cf: 20000930). 20060930 + fix ifdef in c++/internal.h for QNX 6.1 + test-compiled with (old) egcs-1.1.2, modified configure script to not unset the $CXX and related variables which would prevent this. + fix a few terminfo.src typos exposed by improvments to "-f" option. + improve infocmp/tic "-f" option formatting. 20060923 + make --disable-largefile option work (report by Thomas M Ott). + updated html documentation. + add ka2, kb1, kb3, kc2 to vt220-keypad as an extension -TD + minor improvements to rxvt+pcfkeys -TD 20060916 + move static data from lib_mouse.c into SCREEN struct. + improve ifdef's for _POSIX_VDISABLE in tset to work with Mac OS X (report by Michail Vidiassov). + modify CF_PATH_SYNTAX to ensure it uses the result from --prefix option (from lynx changes) -TD + adapt AC_PROG_EGREP check, noting that this is likely to be another place aggravated by POSIXLY_CORRECT. + modify configure check for awk to ensure that it is found (prompted by report by Christopher Parker). + update config.sub 20060909 + add kon, kon2 and jfbterm terminfo entry (request by Till Maas) -TD + remove invis capability from klone+sgr, mainly used by linux entry, since it does not really do this -TD 20060903 + correct logic in wadd_wch() and wecho_wch(), which did not guard against passing the multi-column attribute into a call on waddch(), e.g., using data returned by win_wch() (cf: 20041023) (report by Sadrul H Chowdhury). 20060902 + fix kterm's acsc string -TD + fix for change to tic/infocmp in 20060819 to ensure no blank is embedded into a termcap description. + workaround for 20050806 ifdef's change to allow visbuf.c to compile when using --with-termlib --with-trace options. + improve tgetstr() by making the return value point into the user's buffer, if provided (patch by Miroslav Lichvar (see Redhat #202480)). + correct libraries needed for foldkeys (report by Stanislav Ievlev) 20060826 + add terminfo entries for xfce terminal (xfce) and multi gnome terminal (mgt) -TD + add test/foldkeys.c 20060819 + modify tic and infocmp to avoid writing trailing blanks on terminfo source output (Debian #378783). + modify configure script to ensure that if the C compiler is used rather than the loader in making shared libraries, the $(CFLAGS) variable is also used (Redhat #199369). + port hashed-db code to db2 and db3. + fix a bug in tgetent() from 20060625 and 20060715 changes (patch/analysis by Miroslav Lichvar (see Redhat #202480)). 20060805 + updated xterm function-keys terminfo to match xterm #216 -TD + add configure --with-hashed-db option (tested only with FreeBSD 6.0, e.g., the db 1.8.5 interface). 20060729 + modify toe to access termcap data, e.g., via cgetent() functions, or as a text file if those are not available. + use _nc_basename() in tset to improve $SHELL check for csh/sh. + modify _nc_read_entry() and _nc_read_termcap_entry() so infocmp, can access termcap data when the terminfo database is disabled. 20060722 + widen the test for xterm kmous a little to allow for other strings than \E[M, e.g., for xterm-sco functionality in xterm. + update xterm-related terminfo entries to match xterm patch #216 -TD + update config.guess, config.sub 20060715 + fix for install-rule in Ada95 to add terminal_interface.ads and terminal_interface.ali (anonymous posting in comp.lang.ada). + correction to manpage for getcchar() (report by William McBrine). + add test/chgat.c + modify wchgat() to mark updated cells as changed so a refresh will repaint those cells (comments by Sadrul H Chowdhury and William McBrine). + split up dependency of names.c and codes.c in ncurses/Makefile to work with parallel make (report/analysis by Joseph S Myers). + suppress a warning message (which is ignored) for systems without an ldconfig program (patch by Justin Hibbits). + modify configure script --disable-symlinks option to allow one to disable symlink() in tic even when link() does not work (report by Nigel Horne). + modify MKfallback.sh to use tic -x when constructing fallback tables to allow extended capabilities to be retrieved from a fallback entry. + improve leak-checking logic in tgetent() from 20060625 to ensure that it does not free the current screen (report by Miroslav Lichvar). 20060708 + add a check for _POSIX_VDISABLE in tset (NetBSD #33916). + correct _nc_free_entries() and related functions used for memory leak checking of tic. 20060701 + revert a minor change for magic-cookie support from 20060513, which caused unexpected reset of attributes, e.g., when resizing test/view in color mode. + note in clear manpage that the program ignores command-line parameters (prompted by Debian #371855). + fixes to make lib_gen.c build properly with changes to the configure --disable-macros option and NCURSES_NOMACROS (cf: 20060527) + update/correct several terminfo entries -TD + add some notes regarding copyright to terminfo.src -TD 20060625 + fixes to build Ada95 binding with gnat-4.1.0 + modify read_termtype() so the term_names data is always allocated as part of the str_table, a better fix for a memory leak (cf: 20030809). + reduce memory leaks in repeated calls to tgetent() by remembering the last TERMINAL* value allocated to hold the corresponding data and freeing that if the tgetent() result buffer is the same as the previous call (report by "Matt" for FreeBSD gnu/98975). + modify tack to test extended capability function-key strings. + improved gnome terminfo entry (GenToo #122566). + improved xterm-256color terminfo entry (patch by Alain Bench). 20060617 + fix two small memory leaks related to repeated tgetent() calls with TERM=screen (report by "Matt" for FreeBSD gnu/98975). + add --enable-signed-char to simplify Debian package. + reduce name-pollution in term.h by removing #define's for HAVE_xxx symbols. + correct typo in curs_terminfo.3x (Debian #369168). 20060603 + enable the mouse in test/movewindow.c + improve a limit-check in frm_def.c (John Heasley). + minor copyright fixes. + change configure script to produce test/Makefile from data file. 20060527 + add a configure option --enable-wgetch-events to enable NCURSES_WGETCH_EVENTS, and correct the associated loop-logic in lib_twait.c (report by Bernd Jendrissek). + remove include/nomacros.h from build, since the ifdef for NCURSES_NOMACROS makes that obsolete. + add entrypoints for some functions which were only provided as macros to make NCURSES_NOMACROS ifdef work properly: getcurx(), getcury(), getbegx(), getbegy(), getmaxx(), getmaxy(), getparx() and getpary(), wgetbkgrnd(). + provide ifdef for NCURSES_NOMACROS which suppresses most macro definitions from curses.h, i.e., where a macro is defined to override a function to improve performance. Allowing a developer to suppress these definitions can simplify some application (discussion with Stanislav Ievlev). + improve description of memu/meml in terminfo manpage. 20060520 + if msgr is false, reset video attributes when doing an automargin wrap to the next line. This makes the ncurses 'k' test work properly for hpterm. + correct caching of keyname(), which was using only half of its table. + minor fixes to memory-leak checking. + make SCREEN._acs_map and SCREEN._screen_acs_map pointers rather than arrays, making ACS_LEN less visible to applications (suggested by Stanislav Ievlev). + move chunk in SCREEN ifdef'd for USE_WIDEC_SUPPORT to the end, so _screen_acs_map will have the same offset in both ncurses/ncursesw, making the corresponding tinfo/tinfow libraries binary-compatible (cf: 20041016, report by Stanislav Ievlev). 20060513 + improve debug-tracing for EmitRange(). + change default for --with-develop to "yes". Add NCURSES_NO_HARD_TABS and NCURSES_NO_MAGIC_COOKIE environment variables to allow runtime suppression of the related hard-tabs and xmc-glitch features. + add ncurses version number to top-level manpages, e.g., ncurses, tic, infocmp, terminfo as well as form, menu, panel. + update config.guess, config.sub + modify ncurses.c to work around a bug in NetBSD 3.0 curses (field_buffer returning null for a valid field). The 'r' test appears to not work with that configuration since the new_fieldtype() function is broken in that implementation. 20060506 + add hpterm-color terminfo entry -TD + fixes to compile test-programs with HPUX 11.23 20060422 + add copyright notices to files other than those that are generated, data or adapted from pdcurses (reports by William McBrine, David Taylor). + improve rendering on hpterm by not resetting attributes at the end of doupdate() if the terminal has the magic-cookie feature (report by Bernd Rieke). + add 256color variants of terminfo entries for programs which are reported to implement this feature -TD 20060416 + fix typo in change to NewChar() macro from 20060311 changes, which broke tab-expansion (report by Frederic L W Meunier). 20060415 + document -U option of tic and infocmp. + modify tic/infocmp to suppress smacs/rmacs when acsc is suppressed due to size limit, e.g., converting to termcap format. Also suppress them if the output format does not contain acsc and it was not VT100-like, i.e., a one-one mapping (Novell #163715). + add configure check to ensure that SIGWINCH is defined on platforms such as OS X which exclude that when _XOPEN_SOURCE, etc., are defined (report by Nicholas Cole) 20060408 + modify write_object() to not write coincidental extensions of an entry made due to it being referenced in a use= clause (report by Alain Bench). + another fix for infocmp -i option, which did not ensure that some escape sequences had comparable prefixes (report by Alain Bench). 20060401 + improve discussion of init/reset in terminfo and tput manpages (report by Alain Bench). + use is3 string for a fallback of rs3 in the reset program; it was using is2 (report by Alain Bench). + correct logic for infocmp -i option, which did not account for multiple digits in a parameter (cf: 20040828) (report by Alain Bench). + move _nc_handle_sigwinch() to lib_setup.c to make --with-termlib option work after 20060114 changes (report by Arkadiusz Miskiewicz). + add copyright notices to test-programs as needed (report by William McBrine). 20060318 + modify ncurses.c 'F' test to combine the wide-characters with color and/or video attributes. + modify test/ncurses to use CTL/Q or ESC consistently for exiting a test-screen (some commands used 'x' or 'q'). 20060312 + fix an off-by-one in the scrolling-region change (cf_ 20060311). 20060311 + add checks in waddchnstr() and wadd_wchnstr() to stop copying when a null character is found (report by Igor Bogomazov). + modify progs/Makefile.in to make "tput init" work properly with cygwin, i.e., do not pass a ".exe" in the reference string used in check_aliases (report by Samuel Thibault). + add some checks to ensure current position is within scrolling region before scrolling on a new line (report by Dan Gookin). + change some NewChar() usage to static variables to work around stack garbage introduced when cchar_t is not packed (Redhat #182024). 20060225 + workarounds to build test/movewindow with PDcurses 2.7. + fix for nsterm-16color entry (patch by Alain Bench). + correct a typo in infocmp manpage (Debian #354281). 20060218 + add nsterm-16color entry -TD + updated mlterm terminfo entry -TD + remove 970913 feature for copying subwindows as they are moved in mvwin() (discussion with Bryan Christ). + modify test/demo_menus.c to demonstrate moving a menu (both the window and subwindow) using shifted cursor-keys. + start implementing recursive mvwin() in movewindow.c (incomplete). + add a fallback definition for GCC_PRINTFLIKE() in test.priv.h, for movewindow.c (report by William McBrine). + add help-message to test/movewindow.c 20060211 + add test/movewindow.c, to test mvderwin(). + fix ncurses soft-key test so color changes are shown immediately rather than delayed. + modify ncurses soft-key test to hide the keys when exiting the test screen. + fixes to build test programs with PDCurses 2.7, e.g., its headers rely on autoconf symbols, and it declares stubs for nonfunctional terminfo and termcap entrypoints. 20060204 + improved test/configure to build test/ncurses on HPUX 11 using the vendor curses. + documented ALTERNATE CONFIGURATIONS in the ncurses manpage, for the benefit of developers who do not read INSTALL. 20060128 + correct form library Window_To_Buffer() change (cf: 20040516), which should ignore the video attributes (report by Ricardo Cantu). 20060121 + minor fixes to xmc-glitch experimental code: + suppress line-drawing + implement max_attributes tested with xterm. + minor fixes for the database iterator. + fix some buffer limits in c++ demo (comment by Falk Hueffner in Debian #348117). 20060114 + add toe -a option, to show all databases. This uses new private interfaces in the ncurses library for iterating through the list of databases. + fix toe from 20000909 changes which made it not look at $HOME/.terminfo + make toe's -v option parameter optional as per manpage. + improve SIGWINCH handling by postponing its effect during newterm(), etc., when allocating screens. 20060111 + modify wgetnstr() to return KEY_RESIZE if a sigwinch occurs. Use this in test/filter.c + fix an error in filter() modification which caused some applications to fail. 20060107 + check if filter() was called when getting the screensize. Keep it at 1 if so (based on Redhat #174498). + add extension nofilter(). + refined the workaround for ACS mapping. + make ifdef's consistent in curses.h for the extended colors so the header file can be used for the normal curses library. The header file installed for extended colors is a variation of the wide-character configuration (report by Frederic L W Meunier). 20051231 + add a workaround to ACS mapping to allow applications such as test/blue.c to use the "PC ROM" characters by masking them with A_ALTCHARSET. This worked up til 5.5, but was lost in the revision of legacy coding (report by Michael Deutschmann). + add a null-pointer check in the wide-character version of calculate_actual_width() (report by Victor Julien). + improve test/ncurses 'd' (color-edit) test by allowing the RGB values to be set independently (patch by William McBrine). + modify test/configure script to allow building test programs with PDCurses/X11. + modified test programs to allow some to work with NetBSD curses. Several do not because NetBSD curses implements a subset of X/Open curses, and also lacks much of SVr4 additions. But it's enough for comparison. + update config.guess and config.sub 20051224 + use BSD-specific fix for return-value from cgetent() from CVS where an unknown terminal type would be reportd as "database not found". + make tgetent() return code more readable using new symbols TGETENT_YES, etc. + remove references to non-existent "tctest" program. + remove TESTPROGS from progs/Makefile.in (it was referring to code that was never built in that directory). + typos in curs_addchstr.3x, some doc files (noticed in OpenBSD CVS). 20051217 + add use_legacy_coding() function to support lynx's font-switching feature. + fix formatting in curs_termcap.3x (report by Mike Frysinger). + modify MKlib_gen.sh to change preprocessor-expanded _Bool back to bool. 20051210 + extend test/ncurses.c 's' (overlay window) test to exercise overlay(), overwrite() and copywin() with different combinations of colors and attributes (including background color) to make it easy to see the effect of the different functions. + corrections to menu/m_global.c for wide-characters (report by Victor Julien). 20051203 + add configure option --without-dlsym, allowing developers to configure GPM support without using dlsym() (discussion with Michael Setzer). + fix wins_nwstr(), which did not handle single-column non-8bit codes (Debian #341661). 20051126 + move prototypes for wide-character trace functions from curses.tail to curses.wide to avoid accidental reference to those if _XOPEN_SOURCE_EXTENDED is defined without ensuring that is included. + add/use NCURSES_INLINE definition. + change some internal functions to use int/unsigned rather than the short equivalents. 20051119 + remove a redundant check in lib_color.c (Debian #335655). + use ld's -search_paths_first option on Darwin to work around odd search rules on that platform (report by Christian Gennerat, analysis by Andrea Govoni). + remove special case for Darwin in CF_XOPEN_SOURCE configure macro. + ignore EINTR in tcgetattr/tcsetattr calls (Debian #339518). + fix several bugs in test/bs.c (patch by Stephen Lindholm). 20051112 + other minor fixes to cygwin based on tack -TD + correct smacs in cygwin (Debian #338234, report by Baurzhan Ismagulov, who noted that it was fixed in Cygwin). 20051029 + add shifted up/down arrow codes to xterm-new as kind/kri strings -TD + modify wbkgrnd() to avoid clearing the A_CHARTEXT attribute bits since those record the state of multicolumn characters (Debian #316663). + modify werase to clear multicolumn characters that extend into a derived window (Debian #316663). 20051022 + move assignment from environment variable ESCDELAY from initscr() down to newterm() so the environment variable affects timeouts for terminals opened with newterm() as well. + fix a memory leak in keyname(). + add test/demo_altkeys.c + modify test/demo_defkey.c to exit from loop via 'q' to allow leak-checking, as well as fix a buffer size in winnstr() call. 20051015 + correct order of use-clauses in rxvt-basic entry which made codes for f1-f4 vt100-style rather than vt220-style (report by Gabor Z Papp). + suppress configure check for gnatmake if Ada95/Makefile.in is not found. + correct a typo in configure --with-bool option for the case where --without-cxx is used (report by Daniel Jacobowitz). + add a note to INSTALL's discussion of --with-normal, pointing out that one may wish to use --without-gpm to ensure a completely static link (prompted by report by Felix von Leitner). 20051010 5.5 release for upload to ftp.gnu.org 20051008 + document in demo_forms.c some portability issues. 20051001 + document side-effect of werase() which sets the cursor position. + save/restore the current position in form field editing to make overlay mode work. 20050924 + correct header dependencies in progs, allowing parallel make (report by Daniel Jacobowitz). + modify CF_BUILD_CC to ensure that pre-setting $BUILD_CC overrides the configure check for --with-build-cc (report by Daniel Jacobowitz). + modify CF_CFG_DEFAULTS to not use /usr as the default prefix for NetBSD. + update config.guess and config.sub from http://subversions.gnu.org/cgi-bin/viewcvs/config/config/ 20050917 + modify sed expression which computes path for /usr/lib/terminfo symbolic link in install to ensure that it does not change unexpected levels of the path (Gentoo #42336). + modify default for --disable-lp64 configure option to reduce impact on existing 64-bit builds. Enabling the _LP64 option may change the size of chtype and mmask_t. However, for ABI 6, it is enabled by default (report by Mike Frysinger). + add configure script check for --enable-ext-mouse, bump ABI to 6 by default if it is used. + improve configure script logic for bumping ABI to omit this if the --with-abi-version option was used. + update address for Free Software Foundation in tack's source. + correct wins_wch(), which was not marking the filler-cells of multi-column characters (cf: 20041023). 20050910 + modify mouse initialization to ensure that Gpm_Open() is called only once. Otherwise GPM gets confused in its initialization of signal handlers (Debian #326709). 20050903 + modify logic for backspacing in a multiline form field to ensure that it works even when the preceding line is full (report by Frank van Vugt). + remove comment about BUGS section of ncurses manpage (Debian #325481) 20050827 + document some workarounds for shared and libtool library configurations in INSTALL (see --with-shared and --with-libtool). + modify CF_GCC_VERSION and CF_GXX_VERSION macros to accommodate cross-compilers which emit the platform name in their version message, e.g., arm-sa1100-linux-gnu-g++ (GCC) 4.0.1 (report by Frank van Vugt). 20050820 + start updating documentation for upcoming 5.5 release. + fix to make libtool and libtinfo work together again (cf: 20050122). + fixes to allow building traces into libtinfo + add debug trace to tic that shows if/how ncurses will write to the lower corner of a terminal's screen. + update llib-l* files. 20050813 + modify initializers in c++ binding to build with old versions of g++. + improve special case for 20050115 repainting fix, ensuring that if the first changed cell is not a character that the range to be repainted is adjusted to start at a character's beginning (Debian #316663). 20050806 + fixes to build on QNX 6.1 + improve configure script checks for Intel 9.0 compiler. + remove #include's for libc.h (obsolete). + adjust ifdef's in curses.priv.h so that when cross-compiling to produce comp_hash and make_keys, no dependency on wchar.h is needed. That simplifies the build-cppflags (report by Frank van Vugt). + move modules related to key-binding into libtinfo to fix linkage problem caused by 20050430 changes to MKkeyname.sh (report by Konstantin Andreev). 20050723 + updates/fixes for configure script macros from vile -TD + make prism9's sgr string agree with the rest of the terminfo -TD + make vt220's sgr0 string consistent with sgr string, do this for several related cases -TD + improve translation to termcap by filtering the 'me' (sgr0) strings as in the runtime call to tgetent() (prompted by a discussion with Thomas Klausner). + improve tic check for sgr0 versus sgr(0), to help ensure that sgr0 resets line-drawing. 20050716 + fix special cases for trimming sgr0 for hurd and vt220 (Debian #318621). + split-out _nc_trim_sgr0() from modifications made to tgetent(), to allow it to be used by tic to provide information about the runtime changes that would be made to sgr0 for termcap applications. + modify make_sed.sh to make the group-name in the NAME section of form/menu library manpage agree with the TITLE string when renaming is done for Debian (Debian #78866). 20050702 + modify parameter type in c++ binding for insch() and mvwinsch() to be consistent with underlying ncurses library (was char, is chtype). + modify treatment of Intel compiler to allow _GNU_SOURCE to be defined on Linux. + improve configure check for nanosleep(), checking that it works since some older systems such as AIX 4.3 have a nonworking version. 20050625 + update config.guess and config.sub from http://subversions.gnu.org/cgi-bin/viewcvs/config/config/ + modify misc/shlib to work in test-directory. + suppress $suffix in misc/run_tic.sh when cross-compiling. This allows cross-compiles to use the host's tic program to handle the "make install.data" step. + improve description of $LINES and $COLUMNS variables in manpages (prompted by report by Dave Ulrick). + improve description of cross-compiling in INSTALL + add NCURSES-Programming-HOWTO.html by Pradeep Padala (see http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/). + modify configure script to obtain soname for GPM library (discussion with Daniel Jacobowitz). + modify configure script so that --with-chtype option will still compute the unsigned literals suffix for constants in curses.h (report by Daniel Jacobowitz: + patches from Daniel Jacobowitz: + the man_db.renames entry for tack.1 was backwards. + tack.1 had some 1m's that should have been 1M's. + the section for curs_inwstr.3 was wrong. 20050619 + correction to --with-chtype option (report by Daniel Jacobowitz). 20050618 + move build-time edit_man.sh and edit_man.sed scripts to top directory to simplify reusing them for renaming tack's manpage (prompted by a review of Debian package). + revert minor optimization from 20041030 (Debian #313609). + libtool-specific fixes, tested with libtool 1.4.3, 1.5.0, 1.5.6, 1.5.10 and 1.5.18 (all work except as noted previously for the c++ install using libtool 1.5.0): + modify the clean-rule in c++/Makefile.in to work with IRIX64 make program. + use $(LIBTOOL_UNINSTALL) symbol, overlooked in 20030830 + add configure options --with-chtype and --with-mmask-t, to allow overriding of the non-LP64 model's use of the corresponding types. + revise test for size of chtype (and mmask_t), which always returned "long" due to an uninitialized variable (report by Daniel Jacobowitz). 20050611 + change _tracef's that used "%p" format for va_list values to ignore that, since on some platforms those are not pointers. + fixes for long-formats in printf's due to largefile support. 20050604 + fixes for termcap support: + reset pointer to _nc_curr_token.tk_name when the input stream is closed, which could point to free memory (cf: 20030215). + delink TERMTYPE data which is used by the termcap reader, so that extended names data will be freed consistently. + free pointer to TERMTYPE data in _nc_free_termtype() rather than its callers. + add some entrypoints for freeing permanently allocated data via _nc_freeall() when NO_LEAKS is defined. + amend 20041030 change to _nc_do_color to ensure that optimization is applied only when the terminal supports back_color_erase (bce). 20050528 + add sun-color terminfo entry -TD + correct a missing assignment in c++ binding's method NCursesPanel::UserPointer() from 20050409 changes. + improve configure check for large-files, adding check for dirent64 from vile -TD + minor change to configure script to improve linker options for the Ada95 tree. 20050515 + document error conditions for ncurses library functions (report by Stanislav Ievlev). + regenerated html documentation for ada binding. see ftp://invisible-island.net/ncurses/patches/gnathtml 20050507 + regenerated html documentation for manpages. + add $(BUILD_EXEEXT) suffix to invocation of make_keys in ncurses/Makefile (Gentoo #89772). + modify c++/demo.cc to build with g++ -fno-implicit-templates option (patch by Mike Frysinger). + modify tic to filter out long extended names when translating to termcap format. Only two characters are permissible for termcap capability names. 20050430 + modify terminfo entries xterm-new and rxvt to add strings for shift-, control-cursor keys. + workaround to allow c++ binding to compile with g++ 2.95.3, which has a broken implementation of static_cast<> (patch by Jeff Chua). + modify initialization of key lookup table so that if an extended capability (tic -x) string is defined, and its name begins with 'k', it will automatically be treated as a key. + modify test/keynames.c to allow for the possibility of extended key names, e.g., via define_key(), or via "tic -x". + add test/demo_termcap.c to show the contents of given entry via the termcap interface. 20050423 + minor fixes for vt100/vt52 entries -TD + add configure option --enable-largefile + corrected libraries used to build Ada95/gen/gen, found in testing gcc 4.0.0. 20050416 + update config.guess, config.sub + modify configure script check for _XOPEN_SOURCE, disable that on Darwin whose header files have problems (patch by Chris Zubrzycki). + modify form library Is_Printable_String() to use iswprint() rather than wcwidth() for determining if a character is printable. The latter caused it to reject menu items containing non-spacing characters. + modify ncurses test program's F-test to handle non-spacing characters by combining them with a reverse-video blank. + review/fix several gcc -Wconversion warnings. 20050409 + correct an off-by-one error in m_driver() for mouse-clicks used to position the mouse to a particular item. + implement test/demo_menus.c + add some checks in lib_mouse to ensure SP is set. + modify C++ binding to make 20050403 changes work with the configure --enable-const option. 20050403 + modify start_color() to return ERR if it cannot allocate memory. + address g++ compiler warnings in C++ binding by adding explicit member initialization, assignment operators and copy constructors. Most of the changes simply preserve the existing semantics of the binding, which can leak memory, etc., but by making these features visible, it provides a framework for improving the binding. + improve C++ binding using static_cast, etc. + modify configure script --enable-warnings to add options to g++ to correspond to the gcc --enable-warnings. + modify C++ binding to use some C internal functions to make it compile properly on Solaris (and other platforms). 20050327 + amend change from 20050320 to limit it to configurations with a valid locale. + fix a bug introduced in 20050320 which broke the translation of nonprinting characters to uparrow form (report by Takahashi Tamotsu). 20050326 + add ifdef's for _LP64 in curses.h to avoid using wasteful 64-bits for chtype and mmask_t, but add configure option --disable-lp64 in case anyone used that configuration. + update misc/shlib script to account for Mac OS X (report by Michail Vidiassov). + correct comparison for wrapping multibyte characters in waddch_literal() (report by Takahashi Tamotsu). 20050320 + add -c and -w options to tset to allow user to suppress ncurses' resizing of the terminal emulator window in the special case where it is not able to detect the true size (report by Win Delvaux, Debian #300419). + modify waddch_nosync() to account for locale zn_CH.GBK, which uses codes 128-159 as part of multibyte characters (report by Wang WenRui, Debian #300512). 20050319 + modify ncurses.c 'd' test to make it work with 88-color configuration, i.e., by implementing scrolling. + improve scrolling in ncurses.c 'c' and 'C' tests, e.g., for 88-color configuration. 20050312 + change tracemunch to use strict checking. + modify ncurses.c 'p' test to test line-drawing within a pad. + implement environment variable NCURSES_NO_UTF8_ACS to support miscellaneous terminal emulators which ignore alternate character set escape sequences when in UTF-8 mode. 20050305 + change NCursesWindow::err_handler() to a virtual function (request by Steve Beal). + modify fty_int.c and fty_num.c to handle wide characters (report by Wolfgang Gutjahr). + adapt fix for fty_alpha.c to fty_alnum.c, which also handled normal and wide characters inconsistently (report by Wolfgang Gutjahr). + update llib-* files to reflect internal interface additions/changes. 20050226 + improve test/configure script, adding tests for _XOPEN_SOURCE, etc., from lynx. + add aixterm-16color terminfo entry -TD + modified xterm-new terminfo entry to work with tgetent() changes -TD + extended changes in tgetent() from 20040710 to allow the substring of sgr0 which matches rmacs to be at the beginning of the sgr0 string (request by Thomas Wolff). Wolff says the visual effect in combination with pre-20040710 ncurses is improved. + fix off-by-one in winnstr() call which caused form field validation of multibyte characters to ignore the last character in a field. + correct logic in winsch() for inserting multibyte strings; the code would clear cells after the insertion rather than push them to the right (cf: 20040228). + fix an inconsistency in Check_Alpha_Field() between normal and wide character logic (report by Wolfgang Gutjahr). 20050219 + fix a bug in editing wide-characters in form library: deleting a nonwide character modified the previous wide-character. + update manpage to describe NCURSES_MOUSE_VERSION 2. + correct manpage description of mouseinterval() (Debian #280687). + add a note to default_colors.3x explaining why this extension was added (Debian #295083). + add traces to panel library. 20050212 + improve editing of wide-characters in form library: left/right cursor movement, and single-character deletions work properly. + disable GPM mouse support when $TERM happens to be prefixed with "xterm". Gpm_Open() would otherwise assert that it can deal with mouse events in this case. + modify GPM mouse support so it closes the server connection when the caller disables the mouse (report by Stanislav Ievlev). 20050205 + add traces for callback functions in form library. + add experimental configure option --enable-ext-mouse, which defines NCURSES_MOUSE_VERSION 2, and modifies the encoding of mouse events to support wheel mice, which may transmit buttons 4 and 5. This works with xterm and similar X terminal emulators (prompted by question by Andreas Henningsson, this is also related to Debian #230990). + improve configure macros CF_XOPEN_SOURCE and CF_POSIX_C_SOURCE to avoid redefinition warnings on cygwin. 20050129 + merge remaining development changes for extended colors (mostly complete, does not appear to break other configurations). + add xterm-88color.dat (part of extended colors testing). + improve _tracedump() handling of color pairs past 96. + modify return-value from start_color() to return OK if colors have already been started. + modify curs_color.3x list error conditions for init_pair(), pair_content() and color_content(). + modify pair_content() to return -1 for consistency with init_pair() if it corresponds to the default-color. + change internal representation of default-color to allow application to use color number 255. This does not affect the total number of color pairs which are allowed. + add a top-level tags rule. 20050122 + add a null-pointer check in wgetch() in case it is called without first calling initscr(). + add some null-pointer checks for SP, which is not set by libtinfo. + modify misc/shlib to ensure that absolute pathnames are used. + modify test/Makefile.in, etc., to link test programs only against the libraries needed, e.g., omit form/menu/panel library for the ones that are curses-specific. + change SP->_current_attr to a pointer, adjust ifdef's to ensure that libtinfo.so and libtinfow.so have the same ABI. The reason for this is that the corresponding data which belongs to the upper-level ncurses library has a different size in each model (report by Stanislav Ievlev). 20050115 + minor fixes to allow test-compiles with g++. + correct column value shown in tic's warnings, which did not account for leading whitespace. + add a check in _nc_trans_string() for improperly ended strings, i.e., where a following line begins in column 1. + modify _nc_save_str() to return a null pointer on buffer overflow. + improve repainting while scrolling wide-character data (Eungkyu Song). 20050108 + merge some development changes to extend color capabilities. 20050101 + merge some development changes to extend color capabilities. + fix manpage typo (FreeBSD report docs/75544). + update config.guess, config.sub > patches for configure script (Albert Chin-A-Young): + improved fix to make mbstate_t recognized on HPUX 11i (cf: 20030705), making vsscanf() prototype visible on IRIX64. Tested for on HP-UX 11i, Solaris 7, 8, 9, AIX 4.3.3, 5.2, Tru64 UNIX 4.0D, 5.1, IRIX64 6.5, Redhat Linux 7.1, 9, and RHEL 2.1, 3.0. + print the result of the --disable-home-terminfo option. + use -rpath when compiling with SGI C compiler. 20041225 + add trace calls to remaining public functions in form and menu libraries. + fix check for numeric digits in test/ncurses.c 'b' and 'B' tests. + fix typo in test/ncurses.c 'c' test from 20041218. 20041218 + revise test/ncurses.c 'c' color test to improve use for xterm-88color and xterm-256color, added 'C' test using the wide-character color_set and attr_set functions. 20041211 + modify configure script to work with Intel compiler. + fix an limit-check in wadd_wchnstr() which caused labels in the forms-demo to be one character short. + fix typo in curs_addchstr.3x (Jared Yanovich). + add trace calls to most functions in form and menu libraries. + update working-position for adding wide-characters when window is scrolled (prompted by related report by Eungkyu Song). 20041204 + replace some references on Linux to wcrtomb() which use it to obtain the length of a multibyte string with _nc_wcrtomb, since wcrtomb() is broken in glibc (see Debian #284260). + corrected length-computation in wide-character support for field_buffer(). + some fixes to frm_driver.c to allow it to accept multibyte input. + modify configure script to work with Intel 8.0 compiler. 20041127 + amend change to setupterm() in 20030405 which would reuse the value of cur_term if the same output was selected. This now reuses it only when setupterm() is called from tgetent(), which has no notion of separate SCREENs. Note that tgetent() must be called after initscr() or newterm() to use this feature (Redhat #140326). + add a check in CF_BUILD_CC macro to ensure that developer has given the --with-build-cc option when cross-compiling (report by Alexandre Campo). + improved configure script checks for _XOPEN_SOURCE and _POSIX_C_SOURCE (fix for IRIX 5.3 from Georg Schwarz, _POSIX_C_SOURCE updates from lynx). + cosmetic fix to test/gdc.c to recolor the bottom edge of the box for consistency (comment by Dan Nelson). 20041120 + update wsvt25 terminfo entry -TD + modify test/ins_wide.c to test all flavors of ins_wstr(). + ignore filler-cells in wadd_wchnstr() when adding a cchar_t array which consists of multi-column characters, since this function constructs them (cf: 20041023). + modify winnstr() to return multibyte character strings for the wide-character configuration. 20041106 + fixes to make slk_set() and slk_wset() accept and store multibyte or multicolumn characters. 20041030 + improve color optimization a little by making _nc_do_color() check if the old/new pairs are equivalent to the default pair 0. + modify assume_default_colors() to not require that use_default_colors() be called first. 20041023 + modify term_attrs() to use termattrs(), add the extended attributes such as enter_horizontal_hl_mode for WA_HORIZONTAL to term_attrs(). + add logic in waddch_literal() to clear orphaned cells when one multi-column character partly overwrites another. + improved logic for clearing cells when a multi-column character must be wrapped to a new line. + revise storage of cells for multi-column characters to correct a problem with repainting. In the old scheme, it was possible for doupdate() to decide that only part of a multi-column character should be repainted since the filler cells stored only an attribute to denote them as fillers, rather than the character value and the attribute. 20041016 + minor fixes for traces. + add SP->_screen_acs_map[], used to ensure that mapping of missing line-drawing characters is handled properly. For example, ACS_DARROW is absent from xterm-new, and it was coincidentally displayed the same as ACS_BTEE. 20041009 + amend 20021221 workaround for broken acs to reset the sgr, rmacs and smacs strings as well. Also modify the check for screen's limitations in that area to allow the multi-character shift-in and shift-out which seem to work. + change GPM initialization, using dl library to load it dynamically at runtime (Debian #110586). 20041002 + correct logic for color pair in setcchar() and getcchar() (patch by Marcin 'Qrczak' Kowalczyk). + add t/T commands to ncurses b/B tests to allow a different color to be tested for the attrset part of the test than is used in the background color. 20040925 + fix to make setcchar() to work when its wchar_t* parameter is pointing to a string which contains more data than can be converted. + modify wget_wstr() and example in ncurses.c to work if wchar_t and wint_t are different sizes (report by Marcin 'Qrczak' Kowalczyk). 20040918 + remove check in wget_wch() added to fix an infinite loop, appears to have been working around a transitory glibc bug, and interferes with normal operation (report by Marcin 'Qrczak' Kowalczyk). + correct wadd_wch() and wecho_wch(), which did not pass the rendition information (report by Marcin 'Qrczak' Kowalczyk). + fix aclocal.m4 so that the wide-character version of ncurses gets compiled as libncursesw.5.dylib, instead of libncurses.5w.dylib (adapted from patch by James J Ramsey). + change configure script for --with-caps option to indicate that it is no longer experimental. + change configure script to reflect the fact that --enable-widec has not been "experimental" since 5.3 (report by Bruno Lustosa). 20040911 + add 'B' test to ncurses.c, to exercise some wide-character functions. 20040828 + modify infocmp -i option to match 8-bit controls against its table entries, e.g., so it can analyze the xterm-8bit entry. + add morphos terminfo entry, improve amiga-8bit entry (Pavel Fedin). + correct translation of "%%" in terminfo format to termcap, e.g., using "tic -C" (Redhat #130921). + modified configure script CF_XOPEN_SOURCE macro to ensure that if it defines _POSIX_C_SOURCE, that it defines it to a specific value (comp.os.stratus newsgroup comment). 20040821 + fixes to build with Ada95 binding with gnat 3.4 (all warnings are fatal, and gnat does not follow the guidelines for pragmas). However that did find a coding error in Assume_Default_Colors(). + modify several terminfo entries to ensure xterm mouse and cursor visibility are reset in rs2 string: hurd, putty, gnome, konsole-base, mlterm, Eterm, screen (Debian #265784, Debian #55637). The xterm entries are left alone - old ones for compatibility, and the new ones do not require this change. -TD 20040814 + fake a SIGWINCH in newterm() to accommodate buggy terminal emulators and window managers (Debian #265631). > terminfo updates -TD + remove dch/dch1 from rxvt because they are implemented inconsistently with the common usage of bce/ech + remove khome from vt220 (vt220's have no home key) + add rxvt+pcfkeys 20040807 + modify test/ncurses.c 'b' test, adding v/V toggles to cycle through combinations of video attributes so that for instance bold and underline can be tested. This made the legend too crowded, added a help window as well. + modify test/ncurses.c 'b' test to cycle through default colors if the -d option is set. + update putty terminfo entry (Robert de Bath). 20040731 + modify test/cardfile.c to allow it to read more data than can be displayed. + correct logic in resizeterm.c which kept it from processing all levels of window hierarchy (reports by Folkert van Heusden, Chris Share). 20040724 + modify "tic -cv" to ignore delays when comparing strings. Also modify it to ignore a canceled sgr string, e.g., for terminals which cannot properly combine attributes in one control sequence. + corrections for gnome and konsole entries (Redhat #122815, patch by Hans de Goede) > terminfo updates -TD + make ncsa-m rmacs/smacs consistent with sgr + add sgr, rc/sc and ech to syscons entries + add function-keys to decansi + add sgr to mterm-ansi + add sgr, civis, cnorm to emu + correct/simplify cup in addrinfo 20040717 > terminfo updates -TD + add xterm-pc-fkeys + review/update gnome and gnome-rh90 entries (prompted by Redhat #122815). + review/update konsole entries + add sgr, correct sgr0 for kterm and mlterm + correct tsl string in kterm 20040711 + add configure option --without-xterm-new 20040710 + add check in wget_wch() for printable bytes that are not part of a multibyte character. + modify wadd_wchnstr() to render text using window's background attributes. + improve tic's check to compare sgr and sgr0. + fix c++ directory's .cc.i rule. + modify logic in tgetent() which adjusts the termcap "me" string to work with ISO-2022 string used in xterm-new (cf: 20010908). + modify tic's check for conflicting function keys to omit that if converting termcap to termcap format. + add -U option to tic and infocmp. + add rmam/smam to linux terminfo entry (Trevor Van Bremen) > terminfo updates -TD + minor fixes for emu + add emu-220 + change wyse acsc strings to use 'i' map rather than 'I' + fixes for avatar0 + fixes for vp3a+ 20040703 + use tic -x to install terminfo database -TD + add -x to infocmp's usage message. + correct field used for comparing O_ROWMAJOR in set_menu_format() (report/patch by Tony Li). + fix a missing nul check in set_field_buffer() from 20040508 changes. > terminfo updates -TD + make xterm-xf86-v43 derived from xterm-xf86-v40 rather than xterm-basic -TD + align with xterm patch #192's use of xterm-new -TD + update xterm-new and xterm-8bit for cvvis/cnorm strings -TD + make xterm-new the default "xterm" entry -TD 20040626 + correct BUILD_CPPFLAGS substitution in ncurses/Makefile.in, to allow cross-compiling from a separate directory tree (report/patch by Dan Engel). + modify is_term_resized() to ensure that window sizes are nonzero, as documented in the manpage (report by Ian Collier). + modify CF_XOPEN_SOURCE configure macro to make Hurd port build (Debian #249214, report/patch by Jeff Bailey). + configure-script mods from xterm, e.g., updates to CF_ADD_CFLAGS + update config.guess, config.sub > terminfo updates -TD + add mlterm + add xterm-xf86-v44 + modify xterm-new aka xterm-xfree86 to accommodate luit, which relies on G1 being used via an ISO-2022 escape sequence (report by Juliusz Chroboczek) + add 'hurd' entry 20040619 + reconsidered winsnstr(), decided after comparing other implementations that wrapping is an X/Open documentation error. + modify test/inserts.c to test all flavors of insstr(). 20040605 + add setlocale() calls to a few test programs which may require it: demo_forms.c, filter.c, ins_wide.c, inserts.c + correct a few misspelled function names in ncurses-intro.html (report by Tony Li). + correct internal name of key_defined() manpage, which conflicted with define_key(). 20040529 + correct size of internal pad used for holding wide-character field_buffer() results. + modify data_ahead() to work with wide-characters. 20040522 + improve description of terminfo if-then-else expressions (suggested by Arne Thomassen). + improve test/ncurses.c 'd' test, allow it to use external file for initial palette (added xterm-16color.dat and linux-color.dat), and reset colors to the initial palette when starting/ending the test. + change limit-check in init_color() to allow r/g/b component to reach 1000 (cf: 20020928). 20040516 + modify form library to use cchar_t's rather than char's in the wide-character configuration for storing data for field buffers. + correct logic of win_wchnstr(), which did not work for more than one cell. 20040508 + replace memset/memcpy usage in form library with for-loops to simplify changing the datatype of FIELD.buf, part of wide-character changes. + fix some inconsistent use of #if/#ifdef (report by Alain Guibert). 20040501 + modify menu library to account for actual number of columns used by multibyte character strings, in the wide-character configuration (adapted from patch by Philipp Tomsich). + add "-x" option to infocmp like tic's "-x", for use in "-F" comparisons. This modifies infocmp to only report extended capabilities if the -x option is given, making this more consistent with tic. Some scripts may break, since infocmp previous gave this information without an option. + modify termcap-parsing to retain 2-character aliases at the beginning of an entry if the "-x" option is used in tic. 20040424 + minor compiler-warning and test-program fixes. 20040417 + modify tic's missing-sgr warning to apply to terminfo only. + free some memory leaks in tic. + remove check in post_menu() that prevented menus from extending beyond the screen (request by Max J. Werner). + remove check in newwin() that prevents allocating windows that extend beyond the screen. Solaris curses does this. + add ifdef in test/color_set.c to allow it to compile with older curses. + add napms() calls to test/dots.c to make it not be a CPU hog. 20040403 + modify unctrl() to return null if its parameter does not correspond to an unsigned char. + add some limit-checks to guard isprint(), etc., from being used on values that do not fit into an unsigned char (report by Sami Farin). 20040328 + fix a typo in the _nc_get_locale() change. 20040327 + modify _nc_get_locale() to use setlocale() to query the program's current locale rather than using getenv(). This fixes a case in tin which relies on legacy treatment of 8-bit characters when the locale is not initialized (reported by Urs Jansen). + add sgr string to screen's and rxvt's terminfo entries -TD. + add a check in tic for terminfo entries having an sgr0 but no sgr string. This confuses Tru64 and HPUX curses when combined with color, e.g., making them leave line-drawing characters in odd places. + correct casts used in ABSENT_BOOLEAN, CANCELLED_BOOLEAN, matches the original definitions used in Debian package to fix PowerPC bug before 20030802 (Debian #237629). 20040320 + modify PutAttrChar() and PUTC() macro to improve use of A_ALTCHARSET attribute to prevent line-drawing characters from being lost in situations where the locale would otherwise treat the raw data as nonprintable (Debian #227879). 20040313 + fix a redefinition of CTRL() macro in test/view.c for AIX 5.2 (report by Jim Idle). + remove ".PP" after ".SH NAME" in a few manpages; this confuses some apropos script (Debian #237831). 20040306 + modify ncurses.c 'r' test so editing commands, like inserted text, set the field background, and the state of insert/overlay editing mode is shown in that test. + change syntax of dummy targets in Ada95 makefiles to work with pmake. + correct logic in test/ncurses.c 'b' for noncolor terminals which did not recognize a quit-command (cf: 20030419). 20040228 + modify _nc_insert_ch() to allow for its input to be part of a multibyte string. + split out lib_insnstr.c, to prepare to rewrite it. X/Open states that this function performs wrapping, unlike all of the other insert-functions. Currently it does not wrap. + check for nl_langinfo(CODESET), use it if available (report by Stanislav Ievlev). + split-out CF_BUILD_CC macro, actually did this for lynx first. + fixes for configure script CF_WITH_DBMALLOC and CF_WITH_DMALLOC, which happened to work with bash, but not with Bourne shell (report by Marco d'Itri via tin-dev). 20040221 + some changes to adapt the form library to wide characters, incomplete (request by Mike Aubury). + add symbol to curses.h which can be used to suppress include of stdbool.h, e.g., #define NCURSES_ENABLE_STDBOOL_H 0 #include (discussion on XFree86 mailing list). 20040214 + modify configure --with-termlib option to accept a value which sets the name of the terminfo library. This would allow a packager to build libtinfow.so renamed to coincide with libtinfo.so (discussion with Stanislav Ievlev). + improve documentation of --with-install-prefix, --prefix and $(DESTDIR) in INSTALL (prompted by discussion with Paul Lew). + add configure check if the compiler can use -c -o options to rename its output file, use that to omit the 'cd' command which was used to ensure object files are created in a separate staging directory (prompted by comments by Johnny Wezel, Martin Mokrejs). 20040208 5.4 release for upload to ftp.gnu.org + update TO-DO. 20040207 pre-release + minor fixes to _nc_tparm_analyze(), i.e., do not count %i as a param, and do not count %d if it follows a %p. + correct an inconsistency between handling of codes in the 128-255 range, e.g., as illustrated by test/ncurses.c f/F tests. In POSIX locale, the latter did not show printable results, while the former did. + modify MKlib_gen.sh to compensate for broken C preprocessor on Mac OS X, which alters "%%" to "% % " (report by Robert Simms, fix verified by Scott Corscadden). 20040131 pre-release + modify SCREEN struct to align it between normal/wide curses flavors to simplify future changes to build a single version of libtinfo (patch by Stanislav Ievlev). + document handling of carriage return by addch() in manpage. + document special features of unctrl() in manpage. + documented interface changes in INSTALL. + corrected control-char test in lib_addch.c to account for locale (Debian #230335, cf: 971206). + updated test/configure.in to use AC_EXEEXT and AC_OBJEXT. + fixes to compile Ada95 binding with Debian gnat 3.15p-4 package. + minor configure-script fixes for older ports, e.g., BeOS R4.5. 20040125 pre-release + amend change to PutAttrChar() from 20030614 which computed the number of cells for a possibly multi-cell character. The 20030614 change forced the cell to a blank if the result from wcwidth() was not greater than zero. However, wcwidth() called for parameters in the range 128-255 can give this return value. The logic now simply ensures that the number of cells is greater than zero without modifying the displayed value. 20040124 pre-release + looked good for 5.4 release for upload to ftp.gnu.org (but see above) + modify configure script check for ranlib to use AC_CHECK_TOOL, since that works better for cross-compiling. 20040117 pre-release + modify lib_get_wch.c to prefer mblen/mbtowc over mbrlen/mbrtowc to work around core dump in Solaris 8's locale support, e.g., for zh_CN.GB18030 (report by Saravanan Bellan). + add includes for and in configure script macro to make check work with Tru64 4.0d. + add terminfo entry for U/Win -TD + add terminfo entries for SFU aka Interix aka OpenNT (Federico Bianchi). + modify tput's error messages to prefix them with the program name (report by Vincent Lefevre, patch by Daniel Jacobowitz (see Debian #227586)). + correct a place in tack where exit_standout_mode was used instead of exit_attribute_mode (patch by Jochen Voss (see Debian #224443)). + modify c++/cursesf.h to use const in the Enumeration_Field method. + remove an ambiguous (actually redundant) method from c++/cursesf.h + make $HOME/.terminfo update optional (suggested by Stanislav Ievlev). + improve sed script which extracts libtool's version in the CF_WITH_LIBTOOL macro. + add ifdef'd call to AC_PROG_LIBTOOL to CF_WITH_LIBTOOL macro (to simplify local patch for Albert Chin-A-Young).. + add $(CXXFLAGS) to link command in c++/Makefile.in (adapted from patch by Albert Chin-A-Young).. + fix a missing substitution in configure.in for "$target" needed for HPUX .so/.sl case. + resync CF_XOPEN_SOURCE configure macro with lynx; fixes IRIX64 and NetBSD 1.6 conflicts with _XOPEN_SOURCE. + make check for stdbool.h more specific, to ensure that including it will actually define/declare bool for the configured compiler. + rewrite ifdef's in curses.h relating NCURSES_BOOL and bool. The intention of that is to #define NCURSES_BOOL as bool when the compiler declares bool, and to #define bool as NCURSES_BOOL when it does not (reported by Jim Gifford, Sam Varshavchik, cf: 20031213). 20040110 pre-release + change minor version to 4, i.e., ncurses 5.4 + revised/improved terminfo entries for tvi912b, tvi920b (Benjamin C W Sittler). + simplified ncurses/base/version.c by defining the result from the configure script rather than using sprintf (suggested by Stanislav Ievlev). + remove obsolete casts from c++/cursesw.h (reported by Stanislav Ievlev). + modify configure script so that when configuring for termlib, programs such as tic are not linked with the upper-level ncurses library (suggested by Stanislav Ievlev). + move version.c from ncurses/base to ncurses/tinfo to allow linking of tic, etc., using libtinfo (suggested by Stanislav Ievlev). 20040103 + adjust -D's to build ncursesw on OpenBSD. + modify CF_PROG_EXT to make OS/2 build with EXEEXT. + add pecho_wchar(). + remove include from lib_slk_wset.c which is not needed (or available) on older platforms. 20031227 + add -D's to build ncursew on FreeBSD 5.1. + modify shared library configuration for FreeBSD 4.x/5.x to add the soname information (request by Marc Glisse). + modify _nc_read_tic_entry() to not use MAX_ALIAS, but PATH_MAX only for limiting the length of a filename in the terminfo database. + modify termname() to return the terminal name used by setupterm() rather than $TERM, without truncating to 14 characters as documented by X/Open (report by Stanislav Ievlev, cf: 970719). + re-add definition for _BSD_TYPES, lost in merge (cf: 20031206). 20031220 + add configure option --with-manpage-format=catonly to address behavior of BSDI, allow install of man+cat files on NetBSD, whose behavior has diverged by requiring both to be present. + remove leading blanks from comment-lines in manlinks.sed script to work with Tru64 4.0d. + add screen.linux terminfo entry (discussion on mutt-users mailing list). 20031213 + add a check for tic to flag missing backslashes for termcap continuation lines. ncurses reads the whole entry, but termcap applications do not. + add configure option "--with-manpage-aliases" extending "--with-manpage-aliases" to provide the option of generating ".so" files rather than symbolic links for manpage aliases. + add bool definition in include/curses.h.in for configurations with no usable C++ compiler (cf: 20030607). + fix pathname of SigAction.h for building with --srcdir (reported by Mike Castle). 20031206 + folded ncurses/base/sigaction.c into includes of ncurses/SigAction.h, since that header is used only within ncurses/tty/lib_tstp.c, for non-POSIX systems (discussion with Stanislav Ievlev). + remove obsolete _nc_outstr() function (report by Stanislav Ievlev ). + add test/background.c and test/color_set.c + modify color_set() function to work with color pair 0 (report by George Andreou ). + add configure option --with-trace, since defining TRACE seems too awkward for some cases. + remove a call to _nc_free_termtype() from read_termtype(), since the corresponding buffer contents were already zeroed by a memset (cf: 20000101). + improve configure check for _XOPEN_SOURCE and related definitions, adding special cases for Solaris' __EXTENSIONS__ and FreeBSD's __BSD_TYPES (reports by Marc Glisse ). + small fixes to compile on Solaris and IRIX64 using cc. + correct typo in check for pre-POSIX sort options in MKkey_defs.sh (cf: 20031101). 20031129 + modify _nc_gettime() to avoid a problem with arithmetic on unsigned values (Philippe Blain). + improve the nanosleep() logic in napms() by checking for EINTR and restarting (Philippe Blain). + correct expression for "%D" in lib_tgoto.c (Juha Jarvi ). 20031122 + add linux-vt terminfo entry (Andrey V Lukyanov ). + allow "\|" escape in terminfo; tic should not warn about this. + save the full pathname of the trace-file the first time it is opened, to avoid creating it in different directories if the application opens and closes it while changing its working directory. + modify configure script to provide a non-empty default for $BROKEN_LINKER 20031108 + add DJGPP to special case of DOS-style drive letters potentially appearing in TERMCAP environment variable. + fix some spelling in comments (reports by Jason McIntyre, Jonathon Gray). + update config.guess, config.sub 20031101 + fix a memory leak in error-return from setupterm() (report by Stanislav Ievlev ). + use EXEEXT and OBJEXT consistently in makefiles. + amend fixes for cross-compiling to use separate executable-suffix BUILD_EXEEXT (cf: 20031018). + modify MKkey_defs.sh to check for sort utility that does not recognize key options, e.g., busybox (report by Peter S Mazinger ). + fix potential out-of-bounds indexing in _nc_infotocap() (found by David Krause using some of the new malloc debugging features under OpenBSD, patch by Ted Unangst). + modify CF_LIB_SUFFIX for Itanium releases of HP-UX, which use a ".so" suffix (patch by Jonathan Ward ). 20031025 + update terminfo for xterm-xfree86 -TD + add check for multiple "tc=" clauses in a termcap to tic. + check for missing op/oc in tic. + correct _nc_resolve_uses() and _nc_merge_entry() to allow infocmp and tic to show cancelled capabilities. These functions were ignoring the state of the target entry, which should be untouched if cancelled. + correct comment in tack/output.c (Debian #215806). + add some null-pointer checks to lib_options.c (report by Michael Bienia). + regenerated html documentation. + correction to tar-copy.sh, remove a trap command that resulted in leaving temporary files (cf: 20030510). + remove contact/maintainer addresses for Juergen Pfeifer (his request). 20031018 + updated test/configure to reflect changes for libtool (cf: 20030830). + fix several places in tack/pad.c which tested and used the parameter- and parameterless strings inconsistently, i.e., in pad_rin(), pad_il(), pad_indn() and pad_dl() (Debian #215805). + minor fixes for configure script and makefiles to cleanup executables generated when cross-compiling for DJGPP. + modify infocmp to omit check for $TERM for operations that do not require it, e.g., "infocmp -e" used to build fallback list (report by Egmont Koblinger). 20031004 + add terminfo entries for DJGPP. + updated note about maintainer in ncurses-intro.html 20030927 + update terminfo entries for gnome terminal. + modify tack to reset colors after each color test, correct a place where exit_standout_mode was used instead of exit_attribute_mode. + improve tack's bce test by making it set colors other than black on white. + plug a potential recursion between napms() and _nc_timed_wait() (report by Philippe Blain). 20030920 + add --with-rel-version option to allow workaround to allow making libtool on Darwin generate the "same" library names as with the --with-shared option. The Darwin ld program does not work well with a zero as the minor-version value (request by Chris Zubrzycki). + modify CF_MIXEDCASE_FILENAMES macro to work with cross-compiling. + modify tack to allow it to run from fallback terminfo data. > patch by Philippe Blain: + improve PutRange() by adjusting call to EmitRange() and corresponding return-value to not emit unchanged characters on the end of the range. + improve a check for changed-attribute by exiting a loop when the change is found. + improve logic in TransformLine(), eliminating a duplicated comparison in the clr_bol logic. 20030913 > patch by Philippe Blain: + in ncurses/tty/lib_mvcur.c, move the label 'nonlocal' just before the second gettimeofday() to be able to compute the diff time when 'goto nonlocal' used. Rename 'msec' to 'microsec' in the debug-message. + in ncurses/tty/lib_mvcur.c, Use _nc_outch() in carriage return/newline movement instead of putchar() which goes to stdout. Move test for xold>0 out of loop. + in ncurses/tinfo/setbuf.c, Set the flag SP->_buffered at the end of operations when all has been successful (typeMalloc can fail). + simplify NC_BUFFERED macro by moving check inside _nc_setbuf(). 20030906 + modify configure script to avoid using "head -1", which does not work if POSIXLY_CORRECT (sic) is set. + modify run_tic.in to avoid using wrong shared libraries when cross-compiling (Dan Kegel). 20030830 + alter configure script help message to make it clearer that --with-build-cc does not specify a cross-compiler (suggested by Dan Kegel ). + modify configure script to accommodate libtool 1.5, as well as add an parameter to the "--with-libtool" option which can specify the pathname of libtool (report by Chris Zubrzycki). We note that libtool 1.5 has more than one bug in its C++ support, so it is not able to install libncurses++, for instance, if $DESTDIR or the option --with-install-prefix is used. 20030823 > patch by Philippe Blain: + move assignments to SP->_cursrow, SP->_curscol into online_mvcur(). + make baudrate computation in delay_output() consistent with the assumption in _nc_mvcur_init(), i.e., a byte is 9 bits. 20030816 + modify logic in waddch_literal() to take into account zh_TW.Big5 whose multibyte sequences may contain "printable" characters, e.g., a "g" in the sequence "\247g" (Debian #204889, cf: 20030621). + improve storage used by _nc_safe_strcpy() by ensuring that the size is reset based on the initialization call, in case it were called after other strcpy/strcat calls (report by Philippe Blain). > patch by Philippe Blain: + remove an unused ifdef for REAL_ATTR & WANT_CHAR + correct a place where _cup_cost was used rather than _cuu_cost 20030809 + fix a small memory leak in _nc_free_termtype(). + close trace-file if trace() is called with a zero parameter. + free memory allocated for soft-key strings, in delscreen(). + fix an allocation size in safe_sprintf.c for the "*" format code. + correct safe_sprintf.c to not return a null pointer if the format happens to be an empty string. This applies to the "configure --enable-safe-sprintf" option (Redhat #101486). 20030802 + modify casts used for ABSENT_BOOLEAN and CANCELLED_BOOLEAN (report by Daniel Jacobowitz). > patch by Philippe Blain: + change padding for change_scroll_region to not be proportional to the size of the scroll-region. + correct error-return in _nc_safe_strcat(). 20030726 + correct limit-checks in _nc_scroll_window() (report and test-case by Thomas Graf cf: 20011020). + re-order configure checks for _XOPEN_SOURCE to avoid conflict with _GNU_SOURCE check. 20030719 + use clr_eol in preference to blanks for bce terminals, so select and paste will have fewer trailing blanks, e.g., when using xterm (request by Vincent Lefevre). + correct prototype for wunctrl() in manpage. + add configure --with-abi-version option (discussion with Charles Wilson). > cygwin changes from Charles Wilson: + aclocal.m4: on cygwin, use autodetected prefix for import and static lib, but use "cyg" for DLL. + include/ncurses_dll.h: correct the comments to reflect current status of cygwin/mingw port. Fix compiler warning. + misc/run_tic.in: ensure that tic.exe can find the uninstalled DLL, by adding the lib-directory to the PATH variable. + misc/terminfo.src (nxterm|xterm-color): make xterm-color primary instead of nxterm, to match XFree86's xterm.terminfo usage and to prevent circular links. (rxvt): add additional codes from rxvt.org. (rxvt-color): new alias (rxvt-xpm): new alias (rxvt-cygwin): like rxvt, but with special acsc codes. (rxvt-cygwin-native): ditto. rxvt may be run under XWindows, or with a "native" MSWin GUI. Each takes different acsc codes, which are both different from the "normal" rxvt's acsc. (cygwin): cygwin-in-cmd.exe window. Lots of fixes. (cygwinDBG): ditto. + mk-1st.awk: use "cyg" for the DLL prefix, but "lib" for import and static libs. 20030712 + update config.guess, config.sub + add triples for configuring shared libraries with the Debian GNU/FreeBSD packages (patch by Robert Millan ). 20030705 + modify CF_GCC_WARNINGS so it only applies to gcc, not g++. Some platforms have installed g++ along with the native C compiler, which would not accept gcc warning options. + add -D_XOPEN_SOURCE=500 when configuring with --enable-widec, to get mbstate_t declaration on HPUX 11.11 (report by David Ellement). + add _nc_pathlast() to get rid of casts in _nc_basename() calls. + correct a sign-extension in wadd_wch() and wecho_wchar() from 20030628 (report by Tomohiro Kubota). + work around omission of btowc() and wctob() from wide-character support (sic) in NetBSD 1.6 using mbtowc() and wctomb() (report by Gabor Z Papp). + add portability note to curs_get_wstr.3x (Debian #199957). 20030628 + rewrite wadd_wch() and wecho_wchar() to call waddch() and wechochar() respectively, to avoid calling waddch_noecho() with wide-character data, since that function assumes its input is 8-bit data. Similarly, modify waddnwstr() to call wadd_wch(). + remove logic from waddnstr() which transformed multibyte character strings into wide-characters. Rewrite of waddch_literal() from 20030621 assumes its input is raw multibyte data rather than wide characters (report by Tomohiro Kubota). 20030621 + write getyx() and related 2-return macros in terms of getcury(), getcurx(), etc. + modify waddch_literal() in case an application passes bytes of a multibyte character directly to waddch(). In this case, waddch() must reassemble the bytes into a wide-character (report by Tomohiro Kubota ). 20030614 + modify waddch_literal() in case a multibyte value occupies more than two cells. + modify PutAttrChar() to compute the number of character cells that are used in multibyte values. This fixes a problem displaying double-width characters (report/test by Mitsuru Chinen ). + add a null-pointer check for result of keyname() in _tracechar() + modify _tracechar() to work around glibc sprintf bug. 20030607 + add a call to setlocale() in cursesmain.cc, making demo display properly in a UTF-8 locale. + add a fallback definition in curses.priv.h for MB_LEN_MAX (prompted by discussion with Gabor Z Papp). + use macros NCURSES_ACS() and NCURSES_WACS() to hide cast needed to appease -Wchar-subscript with g++ 3.3 (Debian #195732). + fix a redefinition of $RANLIB in the configure script when libtool is used, which broke configure on Mac OS X (report by Chris Zubrzycki ). + simplify ifdef for bool declaration in curses.h.in (suggested by Albert Chin-A-Young). + remove configure script check to allow -Wconversion for older versions of gcc (suggested by Albert Chin-A-Young). 20030531 + regenerated html manpages. + modify ifdef's in curses.h.in that disabled use of __attribute__() for g++, since recent versions implement the cases which ncurses uses (Debian #195230). + modify _nc_get_token() to handle a case where an entry has no description, and capabilities begin on the same line as the entry name. + fix a typo in ncurses_dll.h reported by gcc 3.3. + add an entry for key_defined.3x to man_db.renames. 20030524 + modify setcchar() to allow converting control characters to complex characters (report/test by Mitsuru Chinen ). + add tkterm entry -TD + modify parse_entry.c to allow a terminfo entry with a leading 2-character name (report by Don Libes). + corrected acsc in screen.teraterm, which requires a PC-style mapping. + fix trace statements in read_entry.c to use lseek() rather than tell(). + fix signed/unsigned warnings from Sun's compiler (gcc should give these warnings, but it is unpredictable). + modify configure script to omit -Winline for gcc 3.3, since that feature is broken. + modify manlinks.sed to add a few functions that were overlooked since they return function pointers: field_init, field_term, form_init, form_term, item_init, item_term, menu_init and menu_term. 20030517 + prevent recursion in wgetch() via wgetnstr() if the connection cannot be switched between cooked/raw modes because it is not a TTY (report by Wolfgang Gutjahr ). + change parameter of define_key() and key_defined() to const (prompted by Debian #192860). + add a check in test/configure for ncurses extensions, since there are some older versions, etc., which would not compile with the current test programs. + corrected demo in test/ncurses.c of wgetn_wstr(), which did not convert wchar_t string to multibyte form before printing it. + corrections to lib_get_wstr.c: + null-terminate buffer passed to setcchar(), which occasionally failed. + map special characters such as erase- and kill-characters into key-codes so those will work as expected even if they are not mentioned in the terminfo. + modify PUTC() and Charable() macros to make wide-character line drawing work for POSIX locale on Linux console (cf: 20021221). 20030510 + make typography for program options in manpages consistent (report by Miloslav Trmac ). + correct dependencies in Ada95/src/Makefile.in, so the builds with "--srcdir" work (report by Warren L Dodge). + correct missing definition of $(CC) in Ada95/gen/Makefile.in (reported by Warren L Dodge ). + fix typos and whitespace in manpages (patch by Jason McIntyre ). 20030503 + fix form_driver() cases for REQ_CLR_EOF, REQ_CLR_EOL, REQ_DEL_CHAR, REQ_DEL_PREV and REQ_NEW_LINE, which did not ensure the cursor was at the editing position before making modifications. + add test/demo_forms and associated test/edit_field.c demos. + modify test/configure.in to use test/modules for the list of objects to compile rather than using the list of programs. 20030419 + modify logic of acsc to use the original character if no mapping is defined, noting that Solaris does this. + modify ncurses 'b' test to avoid using the acs_map[] array since 20021231 changes it to no longer contain information from the acsc string. + modify makefile rules in c++, progs, tack and test to ensure that the compiler flags (e.g., $CFLAGS or $CCFLAGS) are used in the link command (report by Jose Luis Rico Botella ). + modify soft-key initialization to use A_REVERSE if A_STANDOUT would not be shown when colors are used, i.e., if ncv#1 is set in the terminfo as is done in "screen". 20030412 + add a test for slk_color(), in ncurses.c + fix some issues reported by valgrind in the slk_set() and slk_wset() code, from recent rewrite. + modify ncurses 'E' test to use show previous label via slk_label(), as in 'e' test. + modify wide-character versions of NewChar(), NewChar2() macros to ensure that the whole struct is initialized. 20030405 + modify setupterm() to check if the terminfo and terminal-modes have already been read. This ensures that it does not reinvoke def_prog_mode() when an application calls more than one function, such as tgetent() and initscr() (report by Olaf Buddenhagen). 20030329 + add 'E' test to ncurses.c, to exercise slk_wset(). + correct handling of carriage-return in wgetn_wstr(), used in demo of slk_wset(). + first draft of slk_wset() function. 20030322 + improved warnings in tic when suppressing items to fit in termcap's 1023-byte limit. + built a list in test/README showing which externals are being used by either programs in the test-directory or via internal library calls. + adjust include-options in CF_ETIP_DEFINES to avoid missing ncurses_dll.h, fixing special definitions that may be needed for etip.h (reported by Greg Schafer ). 20030315 + minor fixes for cardfile.c, to make it write the updated fields to a file when ^W is given. + add/use _nc_trace_bufcat() to eliminate some fixed buffer limits in trace code. 20030308 + correct a case in _nc_remove_string(), used by define_key(), to avoid infinite loop if the given string happens to be a substring of other strings which are assigned to keys (report by John McCutchan). + add key_defined() function, to tell which keycode a string is bound to (discussion with John McCutchan ). + correct keybound(), which reported definitions in the wrong table, i.e., the list of definitions which are disabled by keyok(). + modify demo_keydef.c to show the details it changes, and to check for errors. 20030301 + restructured test/configure script, make it work for libncursesw. + add description of link_fieldtype() to manpage (report by L Dee Holtsclaw ). 20030222 + corrected ifdef's relating to configure check for wchar_t, etc. + if the output is a socket or other non-tty device, use 1 millisecond for the cost in mvcur; previously it was 9 milliseconds because the baudrate was not known. + in _nc_get_tty_mode(), initialize the TTY buffer on error, since glibc copies uninitialized data in that case, as noted by valgrind. + modify tput to use the same parameter analysis as tparm() does, to provide for user-defined strings, e.g., for xterm title, a corresponding capability might be title=\E]2;%p1%s^G, + modify MKlib_gen.sh to avoid passing "#" tokens through the C preprocessor. This works around Mac OS X's preprocessor, which insists on adding a blank on each side of the token (report/analysis by Kevin Murphy ). 20030215 + add configure check for wchar_t and wint_t types, rather than rely on preprocessor definitions. Also work around for gcc fixinclude bug which creates a shadow copy of curses.h if it sees these symbols apparently typedef'd. + if database is disabled, do not generate run_tic.sh + minor fixes for memory-leak checking when termcap is read. 20030208 + add checking in tic for incomplete line-drawing character mapping. + updated configure script to reflect fix for AC_PROG_GCC_TRADITIONAL, which is broken in autoconf 2.5x for Mac OS X 10.2.3 (report by Gerben Wierda ). + make return value from _nc_printf_string() consistent. Before, depending on whether --enable-safe-sprintf was used, it might not be cached for reallocating. 20030201 + minor fixes for memory-leak checking in lib_tparm.c, hardscroll.c + correct a potentially-uninitialized value if _read_termtype() does not read as much data as expected (report by Wolfgang Rohdewald ). + correct several places where the aclocal.m4 macros relied on cache variable names which were incompatible (as usual) between autoconf 2.13 and 2.5x, causing the test for broken-linker to give incorrect results (reports by Gerben Wierda and Thomas Esser ). + do not try to open gpm mouse driver if standard output is not a tty; the gpm library does not make this check (bug report for dialog by David Oliveira ). 20030125 + modified emx.src to correspond more closely to terminfo.src, added emx-base to the latter -TD + add configure option for FreeBSD sysmouse, --with-sysmouse, and implement support for that in lib_mouse.c, lib_getch.c 20030118 + revert 20030105 change to can_clear_with(), does not work for the case where the update is made on cells which are blanks with attributes, e.g., reverse. + improve ifdef's to guard against redefinition of wchar_t and wint_t in curses.h (report by Urs Jansen). 20030111 + improve mvcur() by checking if it is safe to move when video attributes are set (msgr), and if not, reset/restore attributes within that function rather than doing it separately in the GoTo() function in tty_update.c (suggested by Philippe Blain). + add a message in run_tic.in to explain more clearly what does not work when attempting to create a symbolic link for /usr/lib/terminfo on OS/2 and other platforms with no symbolic links (report by John Polterak). + change several sed scripts to avoid using "\+" since it is not a BRE (basic regular expression). One instance caused terminfo.5 to be misformatted on FreeBSD (report by Kazuo Horikawa (see FreeBSD docs/46709)). + correct misspelled 'wint_t' in curs_get_wch.3x (Michael Elkins). 20030105 + improve description of terminfo operators, especially static/dynamic variables (comments by Mark I Manning IV ). + demonstrate use of FIELDTYPE by modifying test/ncurses 'r' test to use the predefined TYPE_ALPHA field-type, and by defining a specialized type for the middle initial/name. + fix MKterminfo.sh, another workaround for POSIXLY_CORRECT misfeature of sed 4.0 > patch by Philippe Blain: + optimize can_clear_with() a little by testing first if the parameter is indeed a "blank". + simplify ClrBottom() a little by allowing it to use clr_eos to clear sections as small as one line. + improve ClrToEOL() by checking if clr_eos is available before trying to use it. + use tputs() rather than putp() in a few cases in tty_update.c since the corresponding delays are proportional to the number of lines affected: repeat_char, clr_eos, change_scroll_region. 20021231 + rewrite of lib_acs.c conflicts with copying of SCREEN acs_map to/from global acs_map[] array; removed the lines that did the copying. 20021228 + change some overlooked tputs() calls in scrolling code to use putp() (report by Philippe Blain). + modify lib_getch.c to avoid recursion via wgetnstr() when the input is not a tty and consequently mode-changes do not work (report by ). + rewrote lib_acs.c to allow PutAttrChar() to decide how to render alternate-characters, i.e., to work with Linux console and UTF-8 locale. + correct line/column reference in adjust_window(), needed to make special windows such as curscr track properly when resizing (report by Lucas Gonze ). > patch by Philippe Blain: + correct the value used for blank in ClrBottom() (broken in 20000708). + correct an off-by-one in GoTo() parameter in _nc_scrolln(). 20021221 + change several tputs() calls in scrolling code to use putp(), to enable padding which may be needed for some terminals (patch by Philippe Blain). + use '%' as sed substitute delimiter in run_tic script to avoid problems with pathname delimiters such as ':' and '@' (report by John Polterak). + implement a workaround so that line-drawing works with screen's crippled UTF-8 support (tested with 3.9.13). This only works with the wide-character support (--enable-widec); the normal library will simply suppress line-drawing when running in a UTF-8 locale in screen. 20021214 + allow BUILD_CC and related configure script variables to be overridden from the environment. + make build-tools variables in ncurses/Makefile.in consistent with the configure script variables (report by Maciej W Rozycki). + modify ncurses/modules to allow configure --disable-leaks --disable-ext-funcs to build (report by Gary Samuelson). + fix a few places in configure.in which lacked quotes (report by Gary Samuelson ). + correct handling of multibyte characters in waddch_literal() which force wrapping because they are started too late on the line (report by Sam Varshavchik). + small fix for CF_GNAT_VERSION to ignore the help-message which gnatmake adds to its version-message. > Maciej W Rozycki : + use AC_CHECK_TOOL to get proper values for AR and LD for cross compiling. + use $cross_compiling variable in configure script rather than comparing $host_alias and $target alias, since "host" is traditionally misused in autoconf to refer to the target platform. + change configure --help message to use "build" rather than "host" when referring to the --with-build-XXX options. 20021206 + modify CF_GNAT_VERSION to print gnatmake's version, and to allow for possible gnat versions such as 3.2 (report by Chris Lingard ). + modify #define's for CKILL and other default control characters in tset to use the system's default values if they are defined. + correct interchanged defaults for kill and interrupt characters in tset, which caused it to report unnecessarily (Debian #171583). + repair check for missing C++ compiler, which is broken in autoconf 2.5x by hardcoding it to g++ (report by Martin Mokrejs). + update config.guess, config.sub (2002-11-30) + modify configure script to skip --with-shared, etc., when the --with-libtool option is given, since they would be ignored anyway. + fix to allow "configure --with-libtool --with-termlib" to build. + modify configure script to show version number of libtool, to help with bug reports. libtool still gets confused if the installed ncurses libraries are old, since it ignores the -L options at some point (tested with libtool 1.3.3 and 1.4.3). + reorder configure script's updating of $CPPFLAGS and $CFLAGS to prevent -I options in the user's environment from introducing conflicts with the build -I options (may be related to reports by Patrick Ash and George Goffe). + rename test/define_key.c to test/demo_defkey.c, test/keyok.c to test/demo_keyok.c to allow building these with libtool. 20021123 + add example program test/define_key.c for define_key(). + add example program test/keyok.c for keyok(). + add example program test/ins_wide.c for wins_wch() and wins_wstr(). + modify wins_wch() and wins_wstr() to interpret tabs by using the winsch() internal function. + modify setcchar() to allow for wchar_t input strings that have more than one spacing character. 20021116 + fix a boundary check in lib_insch.c (patch by Philippe Blain). + change type for *printw functions from NCURSES_CONST to const (prompted by comment by Pedro Palhoto Matos , but really from a note on X/Open's website stating that either is acceptable, and the latter will be used in a future revision). + add xterm-1002, xterm-1003 terminfo entries to demonstrate changes in lib_mouse.c (20021026) -TD + add screen-bce, screen-s entries from screen 3.9.13 (report by Adam Lazur ) -TD + add mterm terminfo entries -TD 20021109 + split-out useful fragments in terminfo for vt100 and vt220 numeric keypad, i.e., vt100+keypad, vt100+pfkeys, vt100+fnkeys and vt220+keypad. The last as embedded in various entries had ka3 and kb2 interchanged (report/discussion with Leonard den Ottolander ). + add check in tic for keypads consistent with vt100 layout. + improve checks in tic for color capabilities 20021102 + check for missing/empty/illegal terminfo name in _nc_read_entry() (report by Martin Mokrejs, where $TERM was set to an empty string). + rewrote lib_insch.c, combining it with lib_insstr.c so both handle tab and other control characters consistently (report by Philippe Blain). + remove an #undef for KEY_EVENT from curses.tail used in the experimental NCURSES_WGETCH_EVENTS feature. The #undef confuses dpkg's build script (Debian #165897). + fix MKlib_gen.sh, working around the ironically named POSIXLY_CORRECT feature of GNU sed 4.0 (reported by Ervin Nemeth ). 20021026 + implement logic in lib_mouse.c to handle position reports which are generated when XFree86 xterm is initialized with private modes 1002 or 1003. These are returned to the application as the REPORT_MOUSE_POSITION mask, which was not implemented. Tested both with ncurses 'a' menu (prompted by discussion with Larry Riedel ). + modify lib_mouse.c to look for "XM" terminfo string, which allows one to override the escape sequence used to enable/disable mouse mode. In particular this works for XFree86 xterm private modes 1002 and 1003. If "XM" is missing (note that this is an extended name), lib_mouse uses the conventional private mode 1000. + correct NOT_LOCAL() macro in lib_mvcur.c to refer to screen_columns where it used screen_lines (report by Philippe Blain). + correct makefile rules for the case when both --with-libtool and --with-gpm are given (report by Mr E_T ). + add note to terminfo manpage regarding the differences between setaf/setab and setf/setb capabilities (report by Pavel Roskin). 20021019 + remove redundant initialization of TABSIZE in newterm(), since it is already done in setupterm() (report by Philippe Blain). + add test/inserts.c, to test winnstr() and winsch(). + replace 'sort' in dist.mk with script that sets locale to POSIX. + update URLs in announce.html.in (patch by Frederic L W Meunier). + remove glibc add-on files, which are no longer needed (report by Frederic L W Meunier). 20021012 5.3 release for upload to ftp.gnu.org + modify ifdef's in etip.h.in to allow the etip.h header to compile with gcc 3.2 (patch by Dimitar Zhekov ). + add logic to setupterm() to make it like initscr() and newterm(), by checking for $NCURSES_TRACE environment variable and enabling the debug trace in that case. + modify setupterm() to ensure that it initializes the baudrate, for applications such as tput (report by Frank Henigman). + modify definition of bits used for command-line and library debug traces to avoid overlap, using new definition TRACE_SHIFT to relate the two. + document tput's interpretation of parameterized strings according to whether parameters are given, etc. (discussion with Robert De Bath). 20021005 pre-release + correct winnwstr() to account for non-character cells generated when a double-width character is added (report by Michael Bienia ). + modify _nc_viswbuf2n() to provide better results using wctomb(). + correct logic in _nc_varargs() which broke tracing of parameters for formats such as "%.*s". + correct scale factor in linux-c and linux-c-nc terminfo entries (report Floyd Davidson). + change tic -A option to -t, add the same option to infocmp for consistency. + correct "%c" implementation in lib_tparm.c, which did not map a null character to a 128 (cf: 980620) (patch by Frank Henigman ). 20020928 pre-release + modify MKkey_defs.sh to check for POSIX sort -k option, use that if it is found, to accommodate newer utility which dropped the compatibility support for +number options (reported by Andrey A Chernov). + modify linux terminfo entry to use color palette feature from linux-c-nc entry (comments by Tomasz Wasiak and Floyd Davidson). + restore original color definitions in endwin() if init_color() was used, and resume those colors on the next doupdate() or refresh() (report by Tomasz Wasiak ). + improve debug-traces by modifying MKlib_gen.sh to generate calls to returnBool() and returnAttr(). + add/use _nc_visbufn() and _nc_viswbufn() to limit the debug trace of waddnstr() and similar functions to match the parameters as used. + add/use _nc_retrace_bool() and _nc_retrace_unsigned(). + correct type used by _nc_retrace_chtype(). + add debug traces to some functions in lib_mouse.c + modify lib_addch.c to handle non-spacing characters. + correct parameter of RemAttr() in lib_bkgd.c, which caused the c++ demo's boxes to lose the A_ALTCHARSET flag (broken in 20020629). + correct width computed in _tracedump(), which did not account for the attributes (broken in 20010602). + modify test/tracemunch to replace addresses for windows other than curscr, newscr and stdscr with window0, window1, etc. 20020921 pre-release + redid fix for edit_man.sed path. + workaround for Cygwin bug which makes subprocess writes to stdout result in core dump. + documented getbegx(), etc. + minor fixes to configure script to use '%' consistently as a sed delimiter rather than '@'. > patch by Philippe Blain: + add check in lib_overlay.c to ensure that the windows to be merged actually overlap, and in copywin(), limit the area to be touched to the lines given for the destination window. 20020914 pre-release + modified curses.h so that if the wide-character version is installed overwriting /usr/include/curses.h, and if it relied on libutf8.h, then applications that use that header for wide-character support must define HAVE_LIBUTF8_H. + modify putwin(), getwin() and dupwin() to allow them to operate on pads (request by Philippe Blain). + correct attribute-merging in wborder(), broken in 20020216 (report by Tomasz Wasiak ). > patch by Philippe Blain: + corrected pop-counts in tparam_internal() to '!' and '~' cases. + use sizeof(NCURSES_CH_T) in one place that used sizeof(chtype). + remove some unused variables from mvcur test-driver. 20020907 pre-release + change configure script to allow install of widec-character (ncursesw) headers to overwrite normal (ncurses) headers, since the latter is a compatible subset of the former. + fix path of edit_man.sed in configure script, needed to regenerate html manpages on Debian. + fix mismatched enums in vsscanf.c, which caused warning on Solaris. + update README.emx to reflect current patch used for autoconf. + change web- and ftp-site to invisible-island.net > patch by Philippe Blain: + change case for 'P' in tparam_internal() to indicate that it pops a variable from the stack. + correct sense of precision and width in parse_format(), to avoid confusion. + modify lib_tparm.c, absorb really_get_space() into get_space(). + modify getwin() and dupwin() to copy the _notimeout, _idlok and _idcok window fields. + better fix for _nc_set_type(), using typeMalloc(). 20020901 pre-release + change minor version to 3, i.e., ncurses 5.3 + update config.guess, config.sub + retest build with each configure option; minor ifdef fixes. + make keyname() return a null pointer rather than "UNKNOWN STRING" to match XSI. + modify handling of wide line-drawing character functions to use the normal line-drawing characters when not in UTF-8 locale. + add check/fix to comp_parse.c to suppress warning about missing acsc string. This happens in configurations where raw termcap information is processed; tic already does this and other checks. + modify tic's check for ich/ich1 versus rmir/smir to only warn about ich1, to match xterm patch #70 notes. + moved information for ripped-off lines into SCREEN struct to allow use in resizeterm(). + add experimental wgetch_events(), ifdef'd with NCURSES_WGETCH_EVENTS (adapted from patch by Ilya Zakharevich - see ncurses/README.IZ). + amend check in kgetch() from 20020824 to look only for function-keys, otherwise escape sequences are not resolved properly. > patch by Philippe Blain: + removed redundant assignment to SP->_checkfd from newterm(). + check return-value of setupterm() in restartterm(). + use sizeof(NCURSES_CH_T) in a few places that used sizeof(chtype). + prevent dupwin() from duplicating a pad. + prevent putwin() from writing a pad. + use typeRealloc() or typeMalloc() in preference to direct calls on _nc_doalloc(). 20020824 + add a check in kgetch() for cooked characters in the fifo to avoid calling fifo_push() when a KEY_RESIZE is available (report/analysis by Sam Varshavchik ). + fix an overlooked case for Redhat #68199 (Philippe Blain). + ensure clearerr() is called before using ferror() e.g., in lib_screen.c (report by Philippe Blain). 20020817 + modify lib_screen.c and lib_newwin.c to maintain the SCREEN-specific pointers for curscr/stdscr/newscr when scr_save() and scr_restore() modify the global curscr/stdscr/newscr variables. Fixes Redhat #68199. + add checks for null pointer in calls to tparm() and tgoto() based on FreeBSD bug report. If ncurses were built with termcap support, and the first call to tgoto() were a zero-length string, the result would be a null pointer, which was not handled properly. + correct a typo in terminfo.head, which gave the octal code for colon rather than comma. + remove the "tic -u" option from 20020810, since it did not account for nested "tc=" clauses, and when that was addressed, was still unsatisfactory. 20020810 + add tic -A option to suppress capabilities which are commented out when translating to termcap. + add tic -u option to provide older behavior of "tc=" clauses. + modified tic to expand all but the final "tc=" clause in a termcap entry, to accommodate termcap libraries which do not handle multiple tc clauses. + correct typo in curs_inopts.3x regarding CS8/CS7 usage (report by Philippe Blain). + remove a couple of redundant uses of A_ATTRIBUTES in expressions using AttrOf(), which already incorporates that mask (report by Philippe Blain). + document TABSIZE variable. + add NCURSES_ASSUMED_COLORS environment variable, to allow users to override compiled-in default black-on-white assumption used in assume_default_colors(). + correct an off-by-one comparison against max_colors in COLORFGBG logic. + correct a use of uninitialized memory found by valgrind (reported by Olaf Buddenhagen ). + modified wresize() to ensure that a failed realloc will not corrupt the window structure, and to make subwindows fit within the resized window (completes Debian #87678, Debian #101699) 20020803 + fix an off-by-one in lib_pad.c check for limits of pad (patch by Philippe Blain). + revise logic for BeOS in lib_twait.c altered in 20011013 to restore logic used by lib_getch.c's support for GPM or EMX mouse (report by Philippe Blain) + remove NCURSES_CONST from several prototypes in curses.wide, to make the --enable-const --enable-widec configure options to work together (report by George Goffe ). 20020727 + finish no-leak checking in cardfile.c, using this for testing changes to resizeterm(). + simplify _nc_freeall() using delscreen(). 20020720 + check error-return from _nc_set_tty_mode() in _nc_initscr() and reset_prog_mode() (report/patch by Philippe Blain). + regenerate configure using patch for autoconf 2.52, to address problem with identifying C++ bool type. + correct/improve logic to produce an exit status for errors in tput, which did not exit with an error when told to put a string not in the current terminfo entry (report by David Gomez ). + modify configure script AC_OUTPUT() call to work around defect in autoconf 2.52 which adds an ifdef'd include to the generated configure definitions. + remove fstat() check from scr_init(), which also fixes a missing include for from 20020713 (reported by David Ellement, fix suggested by Philippe Blain). + update curs_scanw.3x manpage to note that XSI curses differs from SVr4 curses: return-values are incompatible. + correct several prototypes in manpages which used const inconsistently with the curses.h file, and removed spurious const's in a few places from curses.h, e.g., for wbkgd() (report by Glenn Maynard ). + change internal type used by tparm() to long, to work with LP64 model. + modify nc_alloc.h to allow building with g++, for testing. 20020713 + add resize-handling to cardfile.c test program. + altered resizeterm() to avoid having it fail when a child window cannot be resized because it would be larger than its parent. (More work must be done on this, but it works well enough to integrate). + improve a limit-check in lib_refresh.c + remove check in lib_screen.c relating dumptime to file's modification times, since that would not necessarily work for remotely mounted filesystems. + modify lrtest to simplify debugging changes to resizeterm, e.g., t/T commands to enable/disable tracing. + updated status of multibyte support in TO-DO. + update contact info in source-files (patch by Juergen Pfeifer). 20020706 + add Caps.hpux11, as an example. + modify version_filter(), used to implement -R option for tic and infocmp, to use computed array offsets based on the Caps.* file which is actually configured, rather than constants which correspond to the Caps file. + reorganized lib_raw.c to avoid updating SP and cur_term state if the functions fail (reported by Philippe Blain). + add -Wundef to gcc warnings, adjust a few ifdef's to accommodate gcc. 20020629 + correct parameters to setcchar() in ncurses.c (cf: 20020406). + set locale in most test programs (view.c and ncurses.c were the only ones). + add configure option --with-build-cppflags (report by Maksim A Nikulin ). + correct a typo in wide-character logic for lib_bkgnd.c (Philippe Blain). + modify lib_wacs.c to not cancel the acsc, smacs, rmacs strings when in UTF-8 locale. Wide-character functions use Unicode values, while narrow-character functions use the terminfo data. + fix a couple of places in Ada95/samples which did not compile with gnat 3.14 + modify mkinstalldirs so the DOS-pathname case is locale-independent. + fix locale problem in MKlib_gen.sh by forcing related variables to POSIX (C), using same approach as autoconf (set variables only if they were set before). Update MKterminfo.sh and MKtermsort.sh to match. 20020622 + add charset to generated html. + add mvterm entry, adapted from a FreeBSD bug-report by Daniel Rudy -TD + add rxvt-16color, ibm+16color entries -TD + modify check in --disable-overwrite option so that it is used by default unless the --prefix/$prefix value is not /usr, in attempt to work around packagers, e.g., for Sun's freeware, who do not read the INSTALL notes. 20020615 + modify wgetch() to allow returning ungetch'd KEY_RESIZE as a function key code in get_wch(). + extended resize-handling in test/ncurses 'a' menu to the entire stack of windows created with 'w' commands. + improve $COLORFGBG feature by interpreting an out-of-range color value as an SGR 39 or 49, for foreground/background respectively. + correct a typo in configure --enable-colorfgbg option, and move it to the experimental section (cf: 20011208). 20020601 + add logic to dump_entry.c to remove function-key definitions that do not fit into the 1023-byte limit for generated termcaps. This makes hds200 fit. + more improvements to tic's warnings, including logic to ignore differences between delay values in sgr strings. + move definition of KEY_RESIZE into MKkeydefs.sh script, to accommodate Caps.osf1r5 which introduced a conflicting definition. 20020525 + add simple resize-handling in test/ncurses.c 'a' menu. + fixes in keyname() and _tracechar() to handle negative values. + make tic's warnings about mismatches in sgr strings easier to follow. + correct tic checks for number of parameters in smgbp and smglp. + improve scoansi terminfo entry, and add scoansi-new entry -TD + add pcvt25-color terminfo entry -TD + add kf13-kf48 strings to cons25w terminfo entry (reported by Stephen Hurd in newsgroup lucky.freebsd.bugs) -TD + add entrypoint _nc_trace_ttymode(), use this to distinguish the Ottyb and Nttyb members of terminal (aka cur_term), for tracing. 20020523 + correct and simplify logic for lib_pad.c change in 20020518 (reported by Mike Castle). 20020518 + fix lib_pad.c for case of drawing a double-width character which falls off the left margin of the pad (patch by Kriang Lerdsuwanakij ) + modify configure script to work around broken gcc 3.1 "--version" option, which adds unnecessary trash to the requested information. + adjust ifdef's in case SIGWINCH is not defined, e.g., with DJGPP (reported by Ben Decker ). 20020511 + implement vid_puts(), vid_attr(), term_attrs() based on the narrow- character versions as well. + implement erasewchar(), killwchar() based on erasechar() and killchar(). + modify erasechar() and killchar() to return ERR if the value was VDISABLE. + correct a bug in wresize() in handling subwindows (based on patch by Roger Gammans , report by Scott Beck ). + improve test/tclock.c by making the second-hand update more often if gettimeofday() is available. 20020429 + workaround for Solaris sed with MKlib_gen.sh (reported by Andy Tsouladze ). 20020427 + correct return-value from getcchar(), making it consistent with Solaris and Tru64. + reorder loops that generate makefile rules for different models vs subsets so configure --with-termlib works again. This was broken by logic added to avoid duplicate rules in changes to accommodate cygwin dll's (reported by George.R.Goffe@seagate.com). + update config.guess, config.sub 20020421 + modify ifdef's in write_entry.c to allow use of symbolic links on platforms with no hard links, e.g., BeOS. + modify a few includes to allow compile with BeOS, which has stdbool.h with a conflicting definition for 'bool' versus its OS.h definition. + amend MKlib_gen.sh to work with gawk, which defines 'func' as an alias for 'function'. 20020420 + correct form of prototype for ripoffline(). + modify MKlib_gen.sh to test that all functions marked as implemented can be linked. 20020413 + add manpages: curs_get_wstr.3x, curs_in_wchstr.3x + implement wgetn_wstr(). + implement win_wchnstr(). + remove redefinition of unget_wch() in lib_gen.c (reported by Jungshik Shin ). 20020406 + modified several of the test programs to allow them to compile with vendor curses implementations, e.g., Solaris, AIX -TD 20020323 + modified test/configure to allow configuring against ncursesw. + change WACS_xxx definition to use address, to work like Tru64 curses. 20020317 + add 'e' and 'm' toggles to 'a', 'A' tests in ncurses.c to demonstrate effect of echo/noecho and meta modes. + add 'A' test to ncurses.c to demonstrate wget_wch() and related functions. + add manpage: curs_get_wch.3x + implement unget_wch(). + implement wget_wch(). 20020310 + regenerated html manpages. + add manpages: curs_in_wch.3x, curs_ins_wch.3x, curs_ins_wstr.3x + implement wins_wch(). + implement win_wch(). + implement wins_nwstr(), wins_wstr(). 20020309 + add manpages: curs_addwstr.3x, curs_winwstr.3x + implement winnwstr(), winwstr(). 20020223 + add manpages: curs_add_wchstr.3x, curs_bkgrnd.3x + document wunctrl, key_name. + implement key_name(). + remove const's in lib_box.c incorrectly leftover after splitting off lib_box_set.c + update llib-lncurses, llib-ncursesw, fix configure script related to these. 20020218 + remove quotes on "SYNOPSIS" in man/curs_box_set.3x, which resulted in spurious symlinks on install. 20020216 + implement whline_set(), wvline_set(), add manpage curs_border_set. + add subtest 'b' to 'F' and 'f' in ncurses.c to demonstrate use of box() and box_set() functions. + add subtest 'u' to 'F' in ncurses.c, to demonstrate use of addstr() given UTF-8 string equivalents of WACS_xxx symbols. + minor fixes to several manpages based on groff -ww output. + add descriptions of external variables of termcap interface to the manpage (report by Bruce Evans ). > patches by Bernhard Rosenkraenzer: + correct configure option --with-bool, which was executed as --with-ospeed. + add quotes for parameters of --with-bool and --with-ospeed configure options. > patch by Sven Verdoolaege (report by Gerhard Haering ): + correct typos in definitions of several wide-character macros: waddwstr, wgetbkgrnd, mvaddwstr, mvwadd_wchnstr, mvwadd_wchnstr, mvwaddwstr. + pass $(CPPFLAGS) to MKlib_gen.sh, thereby fixing a missing definition of _XOPEN_SOURCE_EXTENDED, e.g., on Solaris 20020209 + implement wide-acs characters for UTF-8 locales. When in UTF-8 locale, ignore narrow version of acs. Add 'F' test to test/ncurses.c to demonstrate. + correct prototype in keybound manpage (noted from a Debian mailing list item). 20020202 + add several cases to the wscanw() example in testcurs.c, showing the format. + implement a simple vsscanf() fallback function which uses the %n conversion to help parse the input data (prompted by discussion with Albert Chin-A-Young). + modify mk-1st.awk and test/Makefile.in to add $(LDFLAGS) when making shared libraries, and to use $(CFLAGS) when linking test programs (patch by Albert Chin-A-Young). + add a call to _nc_keypad() in keypad() to accommodate applications such as nvi, which use curses for output but not for input (fixes Debian #131263, cf: 20011215). + add entrypoints to resizeterm.c which provide better control over the process: is_term_resized() and resize_term(). The latter restores the original design of resizeterm() before KEY_RESIZE was added in 970906. Do this to accommodate 20010922 changes to view.c, but allow for programs with their own sigwinch handler, such as lynx (reported by Russell Ruby ). 20020127 + fix a typo in change to mk-1st.awk, which broke the shared-library makefile rules (reported by Martin Mokrejs). 20020126 + update config.guess, config.sub + finish changes needed to build dll's on cygwin. + fix a typo in mvwchat() macro (reported by Cy ). + add configure check for mbstate_t, needed for wide-character configuration. On some platforms we must include to define this (reported by Daniel Jacobowitz). + incorporate some of the changes needed to build dll's on cygwin. 20020112a + workaround for awk did not work with mawk, adjusted shell script. 20020112 + add Caps.osf1r5, as an example. + modify behavior of can_clear_with() so that if an application is running in a non-bce terminals with default colors enabled, it returns true, allowing the user to select/paste text without picking up extraneous trailing blanks (adapted from patch by Daniel Jacobowitz ). + modify generated curses.h to ifdef-out prototypes for extensions if they are disabled, and to define curses_version() as a string in that case. This is needed to make the programs such as tic build in that configuration. + modified generated headers.sh to remove a gzip'd version of the target file if it exists, in case non-gzip'd manpages are installed into a directory where gzip'd ones exist. In that case, the latter would be found. + corrected a redundant initialization of signal handlers from 20010922 changes. + clarified bug-reporting address in terminfo.src (report by John H DuBois III ). > several fixes from Robert Joop: + do not use "-v" option of awk in MKkey_defs.sh because it does not work with SunOS nawk. + modify definitions for libutf8 in curses.h to avoid redefinition warnings for mblen + quoted references to compiler in shell command in misc/Makefile, in case it uses multiple tokens. 20011229 + restore special case from 20010922 changes to omit SA_RESTART when setting up SIGWINCH handler, which is needed to allow wgetch() to be interrupted by that signal. + updated configure macro CF_WITH_PATHLIST, to omit some double quotes not needed with autoconf 2.52 + revert configure script to autoconf 2.13 patched with autoconf-2.13-19990117.patch.gz (or later) from ftp://invisible-island.net/autoconf/ because autoconf 2.52 macro AC_PROG_AWK does not work on HPUX 11.0 (report by David Ellement ). This also fixes a different problem configuring with Mac OS X (reported by Marc Smith ). 20011222 + modify include/edit_cfg.h to eliminate BROKEN_LINKER symbol from term.h + move prototype for _nc_vsscanf() into curses.h.in to omit HAVE_VSSCANF symbol from curses.h, which was dependent upon the ncurses_cfg.h file which is not installed. + use ACS_LEN rather than SIZEOF(acs_map) in trace code of lib_acs.c, to work with broken linker configuration, e.g., cygwin (report by Robert Joop ). + make napms() call _nc_timed_wait() rather than poll() or select(), to work around broken implementations of these on cygwin. 20011218 + drop configure macro CF_WIDEC_SHIFT, since that was rendered obsolete by Sven Verdoolaege's rewrite of wide-character support. This makes libncursesw incompatible again, but makes the header files almost the same as in the narrow-character configuration. + simplify definitions that combine wide/narrow versions of bkgd, etc., to eliminate differences between the wide/narrow versions of curses.h + correct typo in configure macro CF_FUNC_VSSCANF + correct location of call to _nc_keypad() from 20011215 changes which prevented keypad() from being disabled (reported by Lars Hecking). 20011215 + rewrote ncurses 'a' test to exercise wgetch() and keypad() functions better, e.g., by adding a 'w' command to create new windows which may have different keypad() settings. + corrected logic of keypad() by adding internal screen state to track whether the terminal's keypad-mode has been set. Use this in wgetch() to update the keypad-mode according to whether the associated window's keypad-mode has been set with keypad(). This corrects a related problem restoring terminal state after handling SIGTSTP (reported by Mike Castle). + regenerate configure using patch for autoconf 2.52 autoconf-2.52-patch.gz at ftp://invisible-island.net/autoconf/ + update config.guess, config.sub from http://subversions.gnu.org/cgi-bin/viewcvs/config/config/ + minor changes to quoting in configure script to allow it to work with autoconf 2.52 20011208 + modify final checks in lib_setup.c for line and col values, making them independent. + modify acs_map[] if configure --broken-linker is specified, to make it use a function rather than an array (prompted by an incorrect implementation in cygwin package). + correct spelling of configure option --enable-colorfgbg, which happened to work if --with-develop was set (noted in cygwin package for ncurses). + modify ifdef for genericerror() to compile with SUNWspro Sun WorkShop 6 update 1 C++ 5.2 (patch by Sullivan N Beck ). + add configure checks to see if ncurses' fallback vsscanf() will compile either of the special cases for FILE structs, and if not, force it to the case which simply returns an error (report by Sullivan N Beck indicates that Solaris 8 with 64-bits does not allow access to FILE's fields). + modify ifdef's for c++/cursesw.cc to use the fallback vsscanf() in the ncurses library if no better substitute for this can be found in the C++ runtime. + modify the build to name dynamic libraries according to the convention used on OS X and Darwin. Rather than something like libncurses.dylib.5.2, Darwin would name it libncurses. 5.dylib. There are a few additional minor fixes, such as setting the library version and compatibility version numbers (patch by Jason Evans ). + use 'sh' to run mkinstalldirs, to work around problems with buggy versions of 'make' on OS/2 (report by John Polterak ). + correct typo in manpage description of curs_set() (Debian #121548). + replace the configure script existence-check for mkstemp() by one that checks if the function works, needed for older glibc and AmigaOS. 20011201 + modify script that generates fallbacks.c to compile a temporary copy of the terminfo source in case the host does not contain all of the entries requested for fallbacks (request by Greg Roelofs). + modify configure script to accommodate systems such as Mac OS X whose header defines a 'bool' type inconsistent with ncurses, which normally makes 'bool' consistent with C++. Include from curses.h to force consistent usage, define a new type NCURSES_BOOL and related that to the exported 'bool' as either a typedef or definition, according to whether is present (based on a bug report for tin 1.5.9 by Aaron Adams ). 20011124 + added/updated terminfo entries for M$ telnet and KDE konsole -TD 20011117 + updated/expanded Apple_Terminal and Darwin PowerPC terminfo entries (Benjamin C W Sittler). + add putty terminfo entry -TD + if configuring for wide-curses, define _XOPEN_SOURCE_EXTENDED, since this may not otherwise be defined to make test/view.c compile. 20011110 + review/correct several missing/generated items in curses.wide, sorted the lists to make subsequent diff's easier to track. 20011103 + add manual pages for add_wch(), echo_wchar(), getcchar(), mvadd_wch(), mvwadd_wch(), setcchar(), wadd_wch() and wecho_wchar(). + implement wecho_wchar() + modify _tracedump() to handle wide-characters by mapping them to '?' and control-characters to '.', to make the trace file readable. Also dynamically allocate the buffer used by _tracedump() for formatting the results. + modify T_CALLED/T_RETURN macros to ease balancing call/return lines in a trace by using curly braces. + implement _nc_viscbuf(), for tracing cchar_t arrays. + correct trace-calls in setcchar() and getcchar() functions, which traced the return values but not the entry to each function. + correct usage message in test/view.c, which still mentioned -u flag. 20011027 + modify configure script to allow building with termcap only, or with fallbacks only. In this case, we do not build tic and toe. + add configure --with-termpath option, to override default TERMPATH value of /etc/termcap:/usr/share/misc/termcap. + cosmetic change to tack: make menu descriptions agree with menu titles. 20011020 + rewrote limit-checks in wscrl() and associated _nc_scroll_window(), to ensure that if the parameter of wscrl() is larger than the size of the scrolling region, then the scrolling region will be cleared (report by Ben Kohlen ). + add trace/varargs.c, using this to trace parameters in lib_printw.c + implement _tracecchar_t2() and _tracecchar_t(). + split-out trace/visbuf.c + correct typo in lib_printw.c changes from 20010922 (report by Mike Castle). 20011013 + modify run_tic.sh to check if the build is a cross-compile. In that case, do not use the build's tic to install the terminfo database (report by Rafael Rodriguez Velilla ). + modify mouse click resolution so that mouseinterval(-1) will disable it, e.g., to handle touchscreens via a slow connection (request by Byron Stanoszek ). + correct mouseinterval() default value shown in curs_mouse.3x + remove conflicting definition of mouse_trafo() (reported by Lars Hecking, using gcc 2.95.3). 20011001 + simpler fix for signal_name(), to replace the one overlooked in 20010929 (reported by Larry Virden). 20010929 + add -i option to view.c, to test ncurses' check for non-default signal handler for SIGINT, etc. + add cases for shared-libraries on Darwin/OS X (patch by Rob Braun ). + modify tset to restore original I/O modes if an error is encountered. Also modify to use buffered stderr consistently rather than mixing with write(). + change signal_name() function to use if-then-else rather than case statement, since signal-values aren't really integers (reported by Larry Virden). + add limit checks in wredrawln(), fixing a problem where lynx was repainting a pad which was much larger than the screen. 20010922 + fix: PutRange() was counting the second part of a wide character as part of a run, resulting in a cursor position that was one too far (patch by Sven Verdoolaege). + modify resizeterm() to not queue a KEY_RESIZE if there was no SIGWINCH, thereby separating the two styles of SIGWINCH handling in test/view.c + simplified lib_tstp.c, modify it to use SA_RESTART flag for SIGWINCH. + eliminate several static buffers in the terminfo compiler, using allocated buffers. + modify MKkeyname.awk so that keyname() does not store its result into a static buffer that is overwritten by the next call. + reorganize the output of infocmp -E and -e options to compile cleanly with gcc -Wwrite-strings warnings. + remove redefinition of chgat/wchgat/mvwchgat from curses.wide 20010915 + add label to test/view.c, showing the name of the last key or signal that made the screen repaint, to make it clearer when a sigwinch does this. + use ExitProgram() consistently in the test-programs to make it simpler to test leaks with dmalloc, etc. + move hashtab static data out of hashmap.c into SCREEN struct. + make NO_LEAK code compile with revised WINDOWLIST structs. 20010908 + modify tgetent() to check if exit_attribute_mode resets the alternate character set, and if so, attempt to adjust the copy of the termcap "me" string which it will return to eliminate that part. In particular, 'screen' would lose track of line-drawing characters (report by Frederic L W Meunier <0@pervalidus.net>, analysis by Michael Schroeder). 20010901 + specify DOCTYPE in html manpages. + add missing macros for several "generated" functions: attr_get(), attr_off(), attr_on(), attr_set(), chgat(), mvchgat(), mvwchgat() and mouse_trafo(). + modify view.c to agree with non-experimental status of ncurses' sigwinch handler: + change the sense of the -r option, making it default to ncurses' sigwinch handler. + add a note explaining what functions are unsafe in a signal handler. + add a -c option, to set color display, for testing. + unset $data variable in MKterminfo.sh script, to address potential infinite loop if shell malfunction (report by Samuel Mikes , for bash 2.05.0 on a Linux 2.0.36 system). + change kbs in mach terminfo entries to ^? (Marcus Brinkmann ). + correct logic for COLORFGBG environment variable: if rxvt is compiled with xpm support, the variable has three fields, making it slightly incompatible with itself. In either case, the background color is the last field. 20010825 + move calls to def_shell_mode() and def_prog_mode() before loop with callbacks in lib_set_term.c, since the c++ demo otherwise initialized the tty modes before saving them (patch by John David Anglin ). + duplicate logic used to initialize trace in newterm(), in initscr() to avoid confusing trace of initscr(). + simplify allocation of WINDOW and WINDOWLIST structs by making the first a part of the second rather than storing a pointer. This saves a call to malloc for each window (discussion with Philippe Blain). + remove unused variable 'used_ncv' from lib_vidattr.c (Philippe Blain). + modify c++/Makefile.in to accommodate archive programs that are different for C++ than for C, and add cases for vendor's C++ compilers on Solaris and IRIX (report by Albert Chin-A-Young). + correct manpage description of criteria for deciding if the terminal supports xterm mouse controls. + add several configure script options to aid with cross-compiling: --with-build-cc, --with-build-cflags, --with-build-ldflags, and --with-build-libs (request by Greg Roelofs). + change criteria for deciding if configure is cross-compiling from host/build mismatch to host/target mismatch (request by Greg Roelofs ). + correct logic for infocmp -e and -E options which writes the data for the ext_Names[] array. This is needed if one constructs a fallback table for a terminfo entry which uses extended termcap names, e.g., AX in a color xterm. + fix undefined NCURSES_PATHSEP when configure --disable-database option is given. 20010811 + fix for VALID_BOOLEAN() macro when char is not signed. + modify 'clean' rule for C++ binding to work with Sun compiler, which caches additional information in a subdirectory of the objects. + added llib-ncursesw. 20010804 + add Caps.keys example for experimental extended function keys (adapted from a patch by Ilya Zakharevich). + correct parameter types of vidputs() and vidattr() to agree with header files (report by William P Setzer). + fix typos in several man-pages (patch by William P Setzer). + remove unneeded ifdef for __GNUG__ in CF_CPP_VSCAN_FUNC configure macro, which made ncurses C++ binding fail to build with other C++ compilers such as HPUX 11.x (report by Albert Chin-A-Young). + workaround for bug in HPUX 11.x C compiler: add a blank after NCURSES_EXPORT macro in form.h (report by Albert Chin-A-Young) + ignore blank lines in Caps* files in MKkey_defs.sh script (report by Albert Chin-A-Young). + correct definition of key_end in Caps.aix4, which left KEY_END undefined (report by Albert Chin-A-Young). + remove a QNX-specific fallback prototype for vsscanf(), which is obsolete with QNX RTP. + review/fix some of the T() and TR() macro calls, having noticed that there was no data for delwin() in a trace of dialog because there was no returnVoid call for wtimeout(). Also, traces in lib_twait.c are now selected under TRACE_IEVENT rather than TRACE_CALLS. 20010728 + add a _nc_access() check before opening files listed via $TERMPATH. + using modified man2html, regenerate some of the html manpages to fix broken HREF's where the link was hyphenated. 20010721 + add some limit/pointer checks to -S option of tputs. + updated/expanded Apple_Terminal and Darwin PowerPC terminfo entries (Benjamin C W Sittler). + add a note in curs_termcap.3x regarding a defect in the XSI description of tgetent (based on a discussion with Urs Jansen regarding the HPUX 11.x implementation, whose termcap interface is not compatible with existing termcap programs). + modify manhtml rule in dist.mk to preserve copyright notice on the generated files, as well as to address HTML style issues reported by tidy and weblint. Regenerated/updated corresponding html files. + comment out use of Protected_Character and related rarely used attributes in ncurses Ada95 test/demo to compile with wide-character configuration. 20010714 + implement a simple example in C++ demo to test scanw(). + corrected stdio function used to implement scanw() in cursesw.cc + correct definition of RemAttr() macro from 20010602 changes, which caused C++ SillyDemo to not show line-drawing characters. + modify C++ binding, adding getKey() which can be overridden by user to substitute functions other than getch() for keyboard processing of forms and menus (patch by Juergen Pfeifer). 20010707 + fix some of the trace calls which needed modification to work with new wide-character structures. + modify magic-cookie code in tty_update.c to compile with new wide-character structures (report by ). + ensure that _XOPEN_SOURCE_EXTENDED is defined in curses.priv.h if compiling for wide-character configuration. + make addwnstr() handle non-spacing characters (patch by Sven Verdoolaege). 20010630 + add configure check to define _GNU_SOURCE, needed to prop up glibc header files. + split-out include/curses.wide to solve spurious redefinitions caused by defining _GNU_SOURCE, and move includes for before to work around misdefinition of ERR in glibc 2.1.3 header file. + extended ospeed change to NetBSD and OpenBSD -TD + modify logic in lib_baudrate.c for ospeed, for FreeBSD to make it work properly for termcap applications (patch by Andrey A Chernov). 20010623 + correct an overlooked CharOf/UChar instance (reports by Eugene Lee , Sven Verdoolaege). + correct unneeded ifdef for wunctrl() (reported by Sven Verdoolaege) 20010618 + change overlooked several CharOf/UChar instances. > several patches from Sven Verdoolaege: + correct a typo in wunctrl(), which made it appear that botwc() was needed (no such function: use btowc()). + reimplement wide-character demo in test/view.c, using new functions. + implement getcchar(), setcchar(), wadd_wchnstr() and related macros. + fix a syntax problem with do/if/while in PUTC macro (curses.priv.h). 20010616 + add parentheses in macros for malloc in test.priv.h, fixes an expression in view.c (report by Wolfgang Gutjahr ). + add Caps.uwin, as an example. + change the way curses.h is generated, making the list of function key definitions extracted from the Caps file. + add #undef's before possible redefinition of ERR and OK in curses.h + modify logic in tic, toe, tput and tset which checks for basename of argv[0] to work properly on systems such as OS/2 which have case-independent filenames and/or program suffixes, e.g., ".ext". 20010609 + add a configure check, if --enable-widec is specified, for putwc(), which may be in libutf8. + remove some unnecessary text from curs_extend.3x and default_colors.3x which caused man-db to make incorrect symbolic links (Debian #99550). + add configure check if cast for _IO_va_list is needed to compile C++ vscan code (Debian #97945). > several patches from Sven Verdoolaege: + correct code that used non-standard auto-initialization of a struct, which gcc allows (report by Larry Virden). + use putwc() in PUTC() macro. + make addstr() work for the special case where the codeset is non-stateful (eg. UTF-8), as well as stateful codesets. 20010603 + correct loop expression in NEXT_CHAR macro for lib_addstr.c changes from 20010602 (report by Mike Castle). 20010602 + modify mvcur() to avoid emitting newline characters when nonl() mode is set. Normally this is not a problem since the actual terminal mode is set to suppress nl/crlf translations, however it is useful to allow the caller to manipulate the terminal mode to avoid staircasing effects after spawning a process which writes messages (for lynx 2.8.4) -TD > several patches from Sven Verdoolaege : + remove redundant type-conversion in fifo_push() + correct definition of addwstr() macro in curses.h.in + remove _nc_utf8_outch() + rename most existing uses of CharOf() to UChar(), e.g., where it is used to prevent sign-extension in ctype macros. + change some chtype's to attr_t's where the corresponding variables are used to manipulate attributes. + UpdateAttr() was applied to both attributes (attr_t) and characters (chtype). Modify macro and calls to it to make these distinct. + add CharEq() macro, use in places where wide-character configuration implementation uses a struct for cchar_t. + moved struct ldat into curses.priv.h, to hide implementation details. + change CharOf() macro to use it for masking A_CHARTEXT data from chtype's. + add L() macro to curses.priv.h, for long-character literals. + replace several assignments from struct ldat entries to chtype or char values with combinations of CharOf() and AttrOf() macros. + add/use intermediate ChAttrOf() and ChCharOf() macros where we know we are using chtype data. + add/use lowlevel attribute manipulation macros AddAttr(), RemAttr() and SetAttr(). + add/use SetChar() macro, to change a cchar_t based on a character and attributes. + convert most internal use of chtype to NCURSES_CH_T, to simplify use of cchar_t for wide-character configuration. Similarly, use ARG_CH_T where a pointer would be more useful. + add stubs for tracing cchar_t values. + add/use macro ISBLANK() + add/use constructors for cchar_t's: NewChar(), NewChar2(). + add/use macros CHREF(), CHDEREF(), AttrOfD(), CharOfD() to facilitate passing cchar_t's by address. + add/use PUTC_DATA, PUTC() macros. + for wide-character configuration, move the window background data to the end of the WINDOW struct so that whether _XOPEN_SOURCE_EXTENDED is defined or not, the offsets in the struct will not change. + modify addch() to work with wide-characters. + mark several wide-character functions as generated in curses.h.in + implement wunctrl(), wadd_wch(), wbkgrndset(), wbkgrnd(), wborder_set() and waddnwstr(). 20010526 + add experimental --with-caps=XXX option to customize to similar terminfo database formats such as AIX 4.x + add Caps.aix4 as an example. + modify Caps to add columns for the the KEY_xxx symbols. + modify configure --with-widec to suppress overwrite of libcurses.so and curses.h + add checks to toe.c to avoid being confused by files and directories where we would expect the reverse, e.g., source-files in the top-level terminfo levels as is the case for AIX. 20010519 + add top-level 'depend' rule for the C sources, assuming that the makedepend program is available. As a side-effect, this makes the generated sources, as in "make sources" (prompted by a report by Mike Castle that "make -j" fails because the resulting parallel processes race to generate ncurses/names.c). + modify configure script so that --disable-overwrite option's action to add a symbolic link for libcurses applies to the static library as well as the shared library when both are configured (report by Felix Natter ). + add ELKS terminfo entries (Federico Bianchi ) + add u6 (CSR) to Eterm (Michael Jennings). 20010512 + modify test/ncurses.c to work with xterm-256color, which has fewer color pairs than colors*colors (report by David Ellement ). 20010505 + corrected screen.xterm-xfree86 entry. + update comment in Caps regarding IBM (AIX) function-key definitions. 20010421 + modify c++/Makefile.in to link with libncurses++w.a when configured for wide-characters (patch by Sven Verdoolaege). + add check in _nc_trace_buf() to refrain from freeing a null pointer. + improve CF_PROG_INSTALL macro using CF_DIRNAME. + update config.guess, config.sub from autoconf 2.49e (alpha). 20010414 + add secondary check in tic.c, similar_sgr() to see if the reason for mismatch was that the individual capabilities used a time-delay while sgr did not. Used this to cleanup mismatches, e.g., in vt100, and remove time-delay from Apple_Terminal entries. + add Apple_Terminal terminfo entries (Benjamin C W Sittler ). + correct definitions of shifted editing keys for xterm-xfree86 -TD + fix a bug in test/bs.c from 20010407 (patch by Erik Sigra). + prevent relative_move() from doing an overwrite if it detects 8-bit characters when configured for UTF-8 (reported by Sven Verdoolaege ). 20010407 + add configure checks for strstream.h vscan function, and similar stdio-based function which may be used in C++ binding for gcc 3.0 (reports by George Goffe, Lars Hecking, Mike Castle). + rewrite parts of configure.in which used changequote(). That feature is broken in the latest autoconf alphas (e.g., 2.49d). + add a missing pathname for ncurses_dll.h, needed when building in a directory outside the source tree (patch by Sven Verdoolaege ). > fix 2 bugs in test/bs.c Erik Sigra : + no ships were ever placed in the last row or in the last column. This made the game very easy to win, because you never had to waste any shots there, but the computer did. + the squares around a sunken ship that belonged to the player were not displayed as already hit by the computer, like it does for the player. 20010331 + add some examples of customizing screen's terminfo: screen.xterm-xfree86, screen.xterm-r6, screen.teraterm -TD + modify screen's terminfo entry to match the khome/kend in screen 3.09.08 (Debian #92215). + correct a memory leak in forms library (report by Stefan Vogtner ) (patch by Juergen Pfeifer). 20010324 + change symbols used to guard against repeated includes to begin consistently with "NCURSES_" rather than a leading underscore. There are other symbols defined in the header files which begin with a leading underscore, but they are part of the legacy interface. + reorder includes in c++ binding so that rcs identifiers can be compiled-in. + add .cc.ii rule to c++ makefile, to get preprocessor output for debugging. + correct configure script handling of @keyword@ substitutions when the --with-manpage-renames option is given (cf: 20000715, fixes Debian #89939). + report stack underflow/overflow in tparm() when tic -cv option is given. + remove spurious "%|" operator from xterm-xfree86 terminfo entry, (reported by Adam Costello , Debian #89222). 20010310 + cleanup of newdemo.c, fixing some ambiguous expressions noted by gcc 2.95.2, and correcting some conflicting color pair initializations. + add missing copyright notice for cursesw.h + review, make minor fixes for use of '::' for referring to C-language interface from C++ binding. + modify configure check for g++ library slightly to accommodate nonstandard version number, e.g., -2.7 (report by Ronald Ho ). + add configure check for c++ header, replace hardcoded ifdef. + workaround for pre-release of gcc 3.0 libstdc++, which has dropped vscan from strstreambuf to follow standard, use wrapper for C vscanf instead (report by George Goffe and Matt Taggart , fixes Debian . 20010303 + modify interface of _nc_get_token() to pass 'silent' parameter to it, to make quieter loading of /etc/termcap (patch by Todd C Miller). + correct a few typos in curs_slk.3x and curs_outopts.3x manpages (patch by Todd C Miller). 20010224 + compiler-warning fixes (reported by Nelson Beebe). 20010210 + modify screen terminfo entry to use new 3.9.8 feature allowing xterm mouse controls -TD 20010203 + broaden patterns used to match OS/2 EMX in configure script to cover variant used in newer config.guess/config.sub + remove changequote() calls from configure script, since this feature is broken in the autoconf 2.49c alpha, maintainers decline to fix. + remove macro callPutChar() from tty_update.c, since this is no longer needed (reported by Philippe Blain). + add a null-pointer check in tic.c to handle the case when the input file is really empty. Modify the next_char() function in comp_scan.c to allow arbitrarily long lines, and incidentally supply a newline to files that do not end in a newline. These changes improve tic's recovery from attempts to read binary files, e.g., its output from the terminfo database (reported by Bernhard Rosenkraenzer). 20010127 + revert change to c++/demo.cc from 20001209, which changed definition of main() apparently to accommodate cygwin linker, but broke the demo program. + workaround for broken egcs 2.91.66 which calls member functions (i.e., lines() and colors() of NCursesWindow before calling its constructor. Add calls to initialize() in a few constructors which did not do this already. + use the GNAT preprocessor to make the necessary switch between TRACE and NO_TRACE configurations (patch by Juergen Pfeifer). > patches by Bernhard Rosenkraenzer: + modify kterm terminfo entry to use SCS sequence to support alternate character set (it does not work with SI/SO). + --with-ospeed=something didn't work. configure.in checked for a $enableval where it should check for $withval. Also, ncurses/llib-lncurses still had a hardcoded short. 20010114 + correction to my merge of Tom Riddle's patch that broke tic in some conditions (reported by Enoch Wexler ) -TD 20010113 + modify view.c to test halfdelay(). Like other tests, this recognizes the 's' and space commands for stopping/starting polled input, shows a freerunning clock in the header. If given a parameter to 's', that makes view.c use halfdelay() with that parameter rather than nodelay(). + fix to allow compile with the experimental configure option --disable-hashmap. + modify postprocess_termcap() to avoid overwriting key_backspace, key_left, key_down when processing a non-base entry (report/patch by Tom Riddle). + modify _nc_wrap_entry(), adding option to reallocate the string table, needed in _nc_merge_entry() when merging termcap entries. (adapted from report/patch by Tom Riddle ). + modify a few configure script macros to keep $CFLAGS used only for compiler options, preprocessor options in $CPPFLAGS. 20001230 + correct marker positions in lrtest.c after receiving a sigwinch. + fix ifdef's in ncurses.c to build against pre-5.2 for testing. + fixes to tclock for resizing behavior, redundant computation (report and patch by A M Kuchling ). 20001216 + improved scoansi terminfo entry -TD + modify configure script and makefile in Ada95/src to compile a stub for the trace functions when ncurses does not provide those. 20001209 + add ncurses_dll.h and related definitions to support generating DLL's with cygwin (adapted from a patch by Charles Wilson , changed NCURSES_EXPORT macro to make it work with 'indent') -TD 20001202 + correct prototypes for some functions in curs_termcap.3x, matching termcap.h, which matches X/Open. > patch by Juergen Pfeifer: + a revised version of the Ada enhancements sent in by "H. Nanosecond", aka Eugene V Melaragno . This patch includes - small fixes to the existing ncurses binding - addition of some more low-level functions to the binding, including termcap and terminfo functions - An Ada implementation of the "ncurses" test application originally written in C. 20001125 + modify logic in lib_setup.c to allow either lines or columns value from terminfo to be used if the screen size cannot be determined dynamically rather than requiring both (patch by Ehud Karni ). + add check in lib_tgoto.c's is_termcap() function to reject null or empty strings (reported by Valentin Nechayev to freebsd-bugs). + add definition from configure script that denotes the path-separator, which is normally a colon. The path-separator is a semicolon on OS/2 EMX and similar systems which may use a colon within pathnames. + alter logic to set default for --disable-overwrite option to set it to 'yes' if the --prefix/$prefix value is not /usr/local, thereby accommodating the most common cause of problems: gcc's nonstandard search rules. Other locations such as /usr/local/ncurses will default to overwriting (report by Lars Hecking ). 20001118 + modify default for --disable-overwrite configure option to disable if the --prefix or $prefix value is not /usr. + add cygwin to systems for which ncurses is installed by default into /usr rather than /usr/local. 20001111 + minor optimization in comp_error.c and lib_termname.c, using strncat() to replace strncpy() (patch by Solar Designer). + add a use_terminfo_vars() check for $HOME/.termcap, and check for geteuid() to use_terminfo_vars() (patch by Solar Designer ). + improved cygwin terminfo entry, based on patch by . + modify _nc_write_entry() to allow for the possibility that linking aliases on a filesystem that ignores case would not succeed because the source and destination differ only by case, e.g., NCR260VT300WPP0 on cygwin (report by Neil Zanella). + fix a typo in the curs_deleteln.3x man page (patch by Bernhard Rosenkraenzer ). 20001104 + add configure option --with-ospeed to assist packagers in transition to 5.3 change to ospeed type. + add/use CharOf() macro to suppress sign-extension of char type on platforms where this is a problem in ctype macros, e.g., Solaris. + change trace output to binary format. + correct a missing quote adjustment in CF_PATH_SYNTAX autoconf macro, for OS/2 EMX configuration. + rearrange a few configure macros, moving preprocessor options to $CPPFLAGS (a now-obsolete version of autoconf did not consistently use $CPPFLAGS in both the compile and preprocessor checks). + add a check in relative_move() to guard against buffer overflow in the overwrite logic. 20001028 + add message to configure script showing g++ version. + resync config.guess, config.sub + modify lib_delwin.c, making it return ERR if the window did not exist (suggested by Neil Zanella). + add cases for FreeBSD 3.1 to tdlint and makellib scripts, used this to test/review ncurses library. (Would use lclint, but it doesn't work). + reorganized knight.c to avoid forward references. Correct screen updates when backtracking, especially to the first cell. Add F/B/a commands. 20001021 5.2 release for upload to ftp.gnu.org + update generated html files from manpages. + modify dist.mk to use edit_man.sh to substitute autoconf'd variables in html manpages. + fix an uninitialized pointer in read_termcap.c (report by Todd C Miller, from report/patch by Philip Guenther ). + correct help-message and array limit in knight.c (patch by Brian Raiter ). > patch by Juergen Pfeifer: + fix to avoid warning by GNAT-3.13p about use of inconsistent casing for some identifiers defined in the standard package. + cosmetic change to forms/fty_enum.c 20001014 + correct an off-by-one position in test/railroad.c which could cause wrapping at the right margin. + test/repair some issues with libtool configuration. Make --disable-echo force libtool --silent. (Libtool does not work for OS/2 EMX, works partly for SCO - libtool is still very specific to gcc). + change default of --with-manpage-tbl to "no", since for most of the platforms which do have tbl installed, the system "man" program understands how to run tbl automatically. + minor improvement to force_bar() in comp_parse.c (Bernhard Rosenkraenzer ). + modify lib_tparm.c to use get_space() before writing terminating null character, both for consistency as well as to ensure that if save_char() was called immediately before, that the allocated memory is enough (patch by Sergei Ivanov). + add note about termcap ML capability which is duplicated between two different capabilities: smgl and smglr (reported by Sergei Ivanov ). + correct parameter counts in include/Caps for dclk as well as some printer-specific capabilities: csnm, defc, scs, scsd, smgtp, smglp. > patch by Johnny C Lam : + add support for building with libtool (apparently version 1.3.5, since old versions do not handle -L../lib), using new configure option --with-libtool. + add configure option --with-manpage-tbl, which causes the manpages to be preprocessed by tbl(1) prior to installation, + add configure option --without-curses-h, which causes the installation process to install curses.h as ncurses.h and make appropriate changes to headers and manpages. 20001009 + correct order of options/parameters in run_tic.in invocation of tic, which did not work with standard getopt() (reported by Ethan Butterfield ). + correct logic for 'reverse' variable in lib_vidattr.c, which was setting it true without checking if newmode had A_REVERSE set, e.g., using $TERM=ansi on OS/2 EMX (see 20000917). > patch by Todd C Miller: + add a few missing use_terminfo_vars() and fixes up _nc_tgetent(). Previously, _nc_cgetset() would still get called on cp so the simplest thing is to set cp to NULL if !use_terminfo_vars(). + added checks for an empty $HOME environment variable. > patches for OS/2 EMX (Ilya Zakharevich): + modify convert_configure.pl to support INSTALL. Change compiler options in that script to use multithreading, needed for the mouse. + modify OS/2 mouse support, retrying as a 2-button mouse if code fails to set up a 3-button mouse. + improve code for OS/2 mouse support, using _nc_timed_wait() to replace select() call. 20001007 + change type of ospeed variable back to short to match its use in legacy applications (reported by Andrey A Chernov). + add case to configure script for --enable-rpath on IRIX (patch by Albert Chin-A-Young). + minor fix to position_check() function, to ensure it gets the whole cursor report before decoding. + add configure option --disable-assumed-color, to allow pre-5.1 convention of default colors used for color-pair 0 to be configured (see assume_default_colors()). + rename configure option --enable-hashmap --disable-hashmap, and reorder the configure options, splitting the experimental and development + add configure option --disable-root-environ, which tells ncurses to disregard $TERMINFO and similar environment variables if the current user is root, or running setuid/setgid (based on discussion with several people). + modified misc/run_tic.in to use tic -o, to eliminate dependency on $TERMINFO variable for installs. + add table entry for plab_norm to tput, so it passes in strings for that capability. + modify parse_format() in lib_tparm.c to ignore precision if it is longer than 10000 (report by Jouko Pynnonen). + rewrote limit checks in lib_mvcur.c using new functions _nc_safe_strcat(), etc. Made other related changes to check lengths used for strcat/strcpy (report by Jouko Pynnonen ). 20000930 + modify several descriptions, including those for setaf, setab, in include/Caps to indicate that the entries are parameterized. This information is used to tell which strings are translated when converting to termcap. Fixes a problem where the generated termcap would contain a spurious "%p1" for the terminfo "%p1%d". + modify ld -rpath options (e.g., Linux, and Solaris) to use an absolute pathname for the build tree's lib directory (prompted by discussion with Albert Chin-A-Young). + modify "make install.man" and "make uninstall.man" to include tack's man-page. + various fixes for install scripts used to support configure --srcdir and --with-install-prefix (reported by Matthew Clarke ). + make configure script checks on variables $GCC and $GXX consistently compare against 'yes' rather than test if they are nonnull, since either may be set to the corresponding name of the C or C++ compiler (report/patch by Albert Chin-A-Young). 20000923 + modify rs2 capability in xterm-r6 and similar where cursor save/restore bracketed the sequence for resetting video attributes. The cursor restore would undo that (report by John Hawkinson (see NetBSD misc/11052)). + using parameter check added to tic, corrected 27 typos in terminfo.src -TD + modify tic to verify that its inputs are really files, in case someone tries to read a directory (or /dev/zero). + add a check for empty buffers returned by fgets() in comp_scan.c next_char() function, in case tic is run on a non-text file (fixes a core dump reported by Aaron Campbell ). + add to railroad.c some code exercising tgoto(), providing an alternate form of display if the terminal supports cursor addressing. + split-out tgoto() again, this time into new file lib_tgoto.c, and implement a conventional BSD-style tgoto() which is used if the capability string does not contain terminfo-style padding or parameters (requested by Andrey A Chernov). + add check to tic which reports capabilities that do not reference the expected number of parameters. + add error checking to infocmp's -v and -m options to ensure that the option value is indeed a number. + some cleanup of logic in _nc_signal_handler() to verify if SIGWINCH handler is setup. Separated the old/new sigaction data for SIGTSTP from the other signals. 20000917 + add S0, E0 extensions to screen's terminfo entry, which is another way to solve the misconfiguration issue -TD + completed special case for tgoto from 20000916 20000916 + update xterm terminfo entries to match XFree86 xterm patch #146 -TD + add Matrix Orbital terminfo entries (from Eric Z Ayers ). + add special case to lib_tparm.c to allow 'screen' program to use a termcap-style parameter "%." to tgoto() for switching character sets. + use LN_S substitution in run_tic.in, to work on OS/2 EMX which has no symbolic links. + updated notes in README.emx regarding autoconf patches. + replace a lookup table in lib_vidattr.c used to decode no_color_video with a logic expression (suggested by Philippe Blain). + add a/A toggle to ncurses.c 'b' test, which clears/sets alternate character set attribute from the displayed text. + correct inequality in parameter analysis of rewritten lib_tparm.c which had the effect of ignoring p9 in set_attributes (sgr), breaking alternate character set (reported by Piotr Majka ). + correct ifdef'ing for GCC_PRINTF, GCC_SCANF which would not compile with Sun WorkShop compilers since these tokens were empty (cf: 20000902, reported by Albert Chin-A-Young). 20000909 + correct an uninitialized parameter to open_tempfile() in tic.c which made "tic -I" give an ambiguous error message about tmpnam. + add special case in lib_vidattr.c to reset underline and standout for devices that have no sgr0 defined (patch by Don Lewis ). Note that this will not work for bold mode, since there is no exit-bold-mode capability. + improved patch for Make_Enum_Type (patch by Juergen Pfeifer). + modify tparm to disallow arithmetic on strings, analyze the varargs list to read strings as strings and numbers as numbers. + modify tparm's internal function spop() to treat a null pointer as an empty string. + modify tput program so it can be renamed or invoked via a link as 'reset' or 'init', producing the same effect as 'tput reset' or 'tput init'. + add private entrypoint _nc_basename(), use to consolidate related code in progs, as well as accommodating OS/2 EMX pathnames. + remove NCURSES_CONST line from edit_cfg.sh to compensate for its removal (except via AC_SUBST) from configure.in, making --enable-const work again (reported by Juergen Pfeifer). + regen'd configure to pick up "hpux*" change from 20000902. 20000902 + modify tset.c to check for transformed "reset" program name, if any. + add a check for null pointer in Make_Enum_Type() (reported by Steven W Orr ). + change functions _nc_parse_entry() and postprocess_termcap() to avoid using strtok(), because it is non-reentrant (reported by Andrey A Chernov ). + remove "hpux10.*" case from CF_SHARED_OPTS configure script macro. This differed from the "hpux*" case by using reversed symbolic links, which made the 5.1 version not match the configuration of 5.0 shared libraries (reported by Albert Chin-A-Young). + correct a dependency in Ada95/src/Makefile.in which prevented building with configure --srcdir (patch by H Nanosecond ). + modify ifdef's in curses.h.in to avoid warning if GCC_PRINTF or GCC_SCANF was not previously defined (reported by Pavel Roskin ). + add MKncurses_def.sh to generate fallback definitions for ncurses_cfg.h, to quiet gcc -Wundef warnings, modified ifdef's in code to consistently use "#if" rather than "#ifdef". 20000826 + add QNX qansi entries to terminfo -TD + add os2 entry to misc/emx.src (). + add configure option --with-database to allow specifying a different terminfo source-file to install. On OS/2 EMX, this defaults to misc/emx.src + change misc/run_tic.sh to derive it from misc/run_tic.in, to simplify setting .exe extension on OS/2 EMX. + add .exe extension in Ada95/gen/Makefile.in, Ada95/samples/Makefile.in, for OS/2 EMX (reported by ). + add configure check for filesystems (such as OS/2 EMX) which do not distinguish between upper/lowercase filenames, use this to fix tags rules in makefiles. + initialize fds[] array to 0's in _nc_timed_wait(); apparently poll() only sets the revents members of that array when there is activity corresponding to the related file (report by Glenn Cooper , using Purify on Solaris 5.6). + change configure script to use AC_CANONICAL_SYSTEM rather than AC_CANONICAL_HOST, which means that configure --target will set a default program-prefix. + add note on cross-compiling to INSTALL (which does not rely on the AC_CANONICAL_* macros). 20000819 + add cases for EMX OS/2 to config.guess, config.sub + new version of config.guess, config.sub from lynx 2.8.4dev.7 + add definitions via transform.h to allow tic and tput to check for the transformed aliases rather than the original infotocap, etc. + simplify transform-expressions in progs/Makefile.in, make the uninstall rule work for transformed program names. + change symbol used by --install-prefix configure option from INSTALL_PREFIX to DESTDIR (the latter has become common usage although the name is misleading). + modify programs to use curses_version() string to report the version of ncurses with which they are compiled rather than the NCURSES_VERSION string. The function returns the patch level in addition to the major and minor version numbers. 20000812 + modify CF_MAN_PAGES configure macro to make transformed program names a parameter to that macro rather than embedding them in the macro. + newer config.guess, config.sub (reference version used in lynx 2.8.4dev.7). + add configure option --with-default-terminfo-dir=DIR to allow specifying the default terminfo database directory (request by Albert Chin-A-Young). + minor updates for terminfo.src from FreeBSD termcap change-history. + correct notes in README and INSTALL regarding documentation files that were moved from misc directory to doc (report by Rich Kulawiec ). + change most remaining unquoted parameters of 'test' in configure script to use quotes, for instance fixing a problem in the --disable-database option (reported by Christian Mondrup ). + minor adjustments to work around some of the incompatibilities/bugs in autoconf 2.29a alpha. + add -I/usr/local/include when --with-ncurses option is used in test/configure script. + correct logic in adjust_cancels(), which did not check both alternatives when reclassifying an extended name between boolean, number and string, causing an infinite loop in tic. 20000730 + correct a missing backslash in curses.priv.h 20000729 + change handling of non_dest_scroll_region in tty_update.c to clear text after it is shifted in rather than before shifting out. Also correct row computation (reported by Ruediger Kuhlmann ). + add/use new trace function to display chtype values from winch() and getbkgd(). + add trace mask TRACE_ATTRS, alter several existing _tracef calls that trace attribute changes under TRACE_CALLS to use this. + modify MKlib_gen.sh so that functions returning chtype will call returnChar(). + add returnChar() trace, for functions returning chtype. + change indent.pro to line up parenthesis. 20000722 + fix a heap problem with the c++ binding (report by , patch by Juergen Pfeifer). + minor adjustment to ClrToEOL() to handle an out-of-bounds parameter. + modify the check for big-core to force a couple of memory accesses, which may work as needed for older/less-capable machines (if not, there's still the explicit configure option). > fixes based on diff's for Amiga and BeOS found at http://www.mathematik.uni-karlsruhe.de/~kuhlmann/cross/ncurses/ + alter definition of NCURSES_CONST to make it non-empty. + add amiga-vnc terminfo entry. + redefine 'TEXT' in menu.h for AMIGA, since it is reported to have an (unspecified) symbol conflict. + replaced case-statement in _nc_tracebits() for CSIZE with a table to simplify working around implementations that define random combinations of the related macros to zero. + modify configure test for tcgetattr() to allow for old implementations, e.g., on BeOS, which only defined it as a macro. > patches by Bruno Haible: + when checking LC_ALL/LC_CTYPE/LANG environment variables for UTF-8 locale, ignore those which are set to an empty value, as per SUSV2. + encode 0xFFFD in UTF-8 with 3 bytes, not 2. + modify _nc_utf8_outch() to avoid sign-extension when checking for out-of-range value. 20000715 + correct manlinks.sed script to avoid using ERE "\+", which is not understood by older versions of sed (patch by Albert Chin-A-Young). + implement configure script options that transform installed program names, e.g., --program-prefix, including the manpage names and cross references (patch by Albert Chin-A-Young ). + correct several mismatches between manpage filename and ".TH" directives, renaming dft_fgbg.3x to default_colors.3x and menu_attribs.3x to menu_attributes.3x (report by Todd C Miller). + correct missing includes for in several places, including the C++ binding. This is not noted by gcc unless we use the -fno-builtin option (reported by Igor Schein ). + modified progs/tset.c and tack/sysdep.c to build with sgttyb interface if neither termio or termios is available. Tested this with FreeBSD 2.1.5 (which does have termios - but the sgttyb does work). 20000708 5.1 release for upload to ftp.gnu.org + document configure options in INSTALL. + add man-page for ncurses trace functions. + correct return value shown in curs_touch.3x for is_linetouched() and is_wintouched(), in curs_initscr.3x for isendwin(), and in curs_termattr.3x for has_ic() and has_il(). + add prototypes for touchline() and touchwin(), adding them to the list of generated functions. + modify fifo_push() to put ERR into the fifo just like other values to return from wgetch(). It was returning without doing that, making end-of-file condition incorrectly return a 0 (reported by Todd C Miller). + uncomment CC_SHARED_OPTS for progs and tack (see 971115), since they are needed for SCO OpenServer. + move _nc_disable_period from free_ttype.c to comp_scan.c to appease dynamic loaders on SCO and IRIX64. + add "-a" option to test/ncurses.c to invoke assume_default_colors() for testing. + correct assignment in assume_default_colors() which tells ncurses whether to use default colors, or the assumed ones (reported by Gary Funck ). + review/correct logic in mk-1st.awk for making symbolic links for shared libraries, in particular for FreeBSD, etc. + regenerate misc/*.def files for OS/2 EMX dll's. + correct quoting of values for CC_SHARED_OPTS in aclocal.m4 for cases openbsd2*, openbsd*, freebsd* and netbsd* (patch by Peter Wemm) (err in 20000610). + minor updates to release notes, as well as adding/updating URLs for examples cited in announce.html > several fixes from Philippe Blain : + correct placement of ifdef for NCURSES_XNAMES in function _nc_free_termtype(), fixes a memory leak. + add a call to _nc_synchook() to the end of function whline() like that in wvline() (difference was in 1.9.4). + make ClearScreen() a little faster by moving two instances of UpdateAttr() out of for-loops. + simplify ClrBottom() by eliminating the tstLine data, using for-loops (cf: 960428). 20000701 pre-release + change minor version to 1, i.e., ncurses 5.1 + add experimental configure option --enable-colorfgbg to check for $COLORTERM variable as set by rxvt/aterm/Eterm. + add Eterm terminfo entry (Michael Jennings ). + modify manlinks.sed to pick aliases from the SYNOPSIS section, and several manpages so manlinks.sed can find aliases for creating symbolic links. + add explanation to run_tic.sh regarding extended terminal capabilities. + change message format for edit_cfg.sh, since some people interpret it as a warning. + correct unescaped '$' in sysv5uw7*|unix_sv* rule for CF_SHARED_OPTS configure macro (report by Thanh Ma ). + correct logic in lib_twait.c as used by lib_mouse.c for GPM mouse support when poll() is used rather than select() (prompted by discussion with David Allen ). 20000624 pre-release + modify TransformLine() to check for cells with different color pairs that happen to render the same display colors. + apply $NCURSES_NO_PADDING to cost-computation in mvcur(). + improve cost computation in PutRange() by accounting for the use of parm_right_cursor in mvcur(). + correct cost computation in EmitRange(), which was not using the normalized value for cursor_address. + newer config.guess, config.sub (reference version used in TIN 1.5.6). 20000617 + update config.guess, config.sub (reference version used in PCRE 3.2). + resync changes to gnathtml against version 1.22, regenerated html files under doc/html/ada using this (1.22.1.1). + regenerated html files under doc/html/man after correcting top and bottom margin options for man2html in dist.mk + minor fixes to test programs ncurses 'i' and testcurs program to make the subwindow's background color cover the subwindow. + modify configure script so AC_MSG_ERROR is temporarily defined to a warning in AC_PROG_CXX to make it recover from a missing C++ compiler without requiring user to add --without-cxx option (adapted from comment by Akim Demaille to autoconf mailing list). + modify headers.sh to avoid creating temporary files in the build directory when installing headers (reported by Sergei Pokrovsky ) 20000610 + regenerated the html files under doc/html/ada/files and doc/html/ada/funcs with a slightly-improved gnathtml. + add kmous capability to linux terminfo entry to allow it to use xterm-style events provided by gpm patch by Joerg Schoen. + make the configure macro CF_SHARED_OPTS a little smarter by testing if -fPIC is supported by gcc rather than -fpic. The former option allows larger symbol tables. + update config.guess and config.sub (patches by Kevin Buettner (for elf64_ia64), Bernd Kuemmerlen (for MacOS X)). + add warning for 'tic -cv' about use of '^?' in terminfo source, which is an extension. 20000527 + modify echo() behavior of getch() to match Solaris curses for carriage return and backspace (reported by Neil Zanella). + change _nc_flush() to a function. + modify delscreen() to check if the output stream has been closed, and if so, free the buffer allocated for setbuf (this provides an ncurses-specific way to avoid a memory leak when repeatedly calling newterm reported by Chipp C ). + correct typo in curs_getch.3x manpage regarding noecho (reported by David Malone ). + add a "make libs" rule. + make the Ada95 interface build with configure --enable-widec. + if the configure --enable-widec option is given, append 'w' to names of the generated libraries (e.g., libncursesw.so) to avoid conflict with existing ncurses libraries. 20000520 + modify view.c to make a rudimentary viewer of UTF-8 text if ncurses is configured with the experimental wide-character support. + add a simple UTF-8 output driver to the experimental wide-character support. If any of the environment variables LC_ALL, LC_CTYPE or LANG contain the string "UTF-8", this driver will be used to translate the output to UTF-8. This works with XFree86 xterm. + modify configure script to allow building shared libraries on BeOS (from a patch by Valeriy E Ushakov). + modify lib_addch.c to allow repeated update to the lower-right corner, rather than displaying only the first character written until the cursor is moved. Recent versions of SVr4 curses can update the lower-right corner, and behave this way (reported by Neil Zanella). + add a limit-check in _nc_do_color(), to avoid using invalid color pair value (report by Brendan O'Dea ). 20000513 + the tack program knows how to use smcup and rmcup but the "show caps that can be tested" feature did not reflect this knowledge. Correct the display in the menu tack/test/edit/c (patch by Daniel Weaver). + xterm-16color does allow bold+colors, removed ncv#32 from that terminfo entry. 20000506 + correct assignment to SP->_has_sgr_39_49 in lib_dft_fgbg.c, which broke check for screen's AX capability (reported by Valeriy E Ushakov ). + change man2html rule in dist.mk to workaround bug in some man-programs that ignores locale when rendering hyphenation. + change web- and ftp-site to dickey.his.com 20000429 + move _nc_curr_token from parse_entry.c to comp_scan.c, to work around problem linking tack on MacOS X DP3. + include in lib_napms.c to compile on MacOS X DP3 (reported by Gerben Wierda ). + modify lib_vidattr.c to check for ncv fixes when pair-0 is not default colors. + add -d option to ncurses.c, to turn on default-colors for testing. + add a check to _nc_makenew() to ensure that newwin() and newpad() calls do not silently fail by passing too-large limits. + add symbol NCURSES_SIZE_T to use rather than explicit 'short' for internal window and pad sizes. Note that since this is visible in the WINDOW struct, it would be an ABI change to make this an 'int' (prompted by a question by Bastian Trompetter , who attempted to create a 96000-line pad). 20000422 + add mgterm terminfo entry from NetBSD, minor adjustments to sun-ss5, aixterm entries -TD + modify tack/ansi.c to make it more tolerant of bad ANSI replies. An example of an illegal ANSI resonse can be found using Microsoft's Telnet client. A correct display can be found using a VT-4xx terminal or XFree86 xterm with: XTerm*VT100*decTerminalID: 450 (patch by Daniel Weaver). + modify gdc.c to recognize 'q' for quit, 's' for single-step and ' ' for resume. Add '-n' option to force gdc's standard input to /dev/null, to both illustrate the use of newterm() for specifying alternate inputs as well as for testing signal handling. + minor fix for configure option --with-manpage-symlinks, for target directories that contain a period ('.') (reported by Larry Virden). 20000415 + minor additions to beterm entry (feedback from Rico Tudor) -TD + corrections/updates for some IBM terminfo entries -TD + modify _nc_screen_wrap() so that when exiting curses mode with non-default colors, the last line on the screen will be cleared to the screen's default colors (request by Alexander V Lukyanov). + modify ncurses.c 'r' example to set nonl(), allowing control/M to be read for demonstrating the REQ_NEW_LINE operation (prompted by a question by Tony L Keith ). + modify ncurses.c 'r' example of field_info() to work on Solaris 2.7, documented extension of ncurses which allows a zero pointer. + modify fmt_complex() to avoid buffer overflow in case of excess recursion, and to recognize "%e%?" as a synonym for else-if, which means that it will not recur for that special case. + add logic to support $TERMCAP variable in case the USE_GETCAP symbol is defined (patch by Todd C Miller). + modify one of the m4 files used to generate the Ada95 sources, to avoid using the token "symbols" (patch by Juergen Pfeifer). 20000408 + add terminfo entries bsdos-pc-m, bsdos-pc-mono (Jeffrey C Honig) + correct spelling error in terminfo entry name: bq300-rv was given as bg300-rv in esr's version. + modify redrawwin() macro so its parameter is fully parenthesized (fixes Debian #61088). + correct formatting error in dump_entry() which set incorrect column value when no newline trimming was needed at the end of an entry, before appending "use=" clauses (cf: 960406). 20000401 + add configure option --with-manpage-symlinks + change unctrl() to render C1 characters (128-159) as ~@, ~A, etc. + change makefiles so trace() function is provided only if TRACE is defined, e.g., in the debug library. Modify related calls to _tracechar() to use unctrl() instead. 20000325 + add screen's AX capability (for ECMA SGR 39 and 49) to applicable terminfo entries, use presence of this as a check for a small improvement in setting default colors. + improve logic in _nc_do_color() implementing assume_default_colors() by passing in previous color pair info to eliminate redundant call to set_original_colors(). (Part of this is from a patch by Alexander V Lukyanov). + modify warning in _nc_trans_string() about a possibly too-long string to do this once only rather than for each character past the threshold (600). Change interface of _nc_trans_string() to allow check for buffer overflow. + correct use of memset in _nc_read_entry_source() to initialize ENTRY struct each time before reading new data into it, rather than once per loop (cf: 990301). This affects multi-entry in-core operations such as "infocmp -Fa". 20000319 + remove a spurious pointer increment in _nc_infotocap() changes from 20000311. Add check for '.' in format of number, since that also is not permitted in termcap. + correct typo in rxvt-basic terminfo from temporary change made while integrating 20000318. 20000318 + revert part of the vt220 change (request by Todd C Miller). + add ansi-* terminfo entries from ESR's version. + add -a option to tic and infocmp, which retains commented-out capabilities during source translation/comparison, e.g., captoinfo and infotocap. + modify cardfile.c to display an empty card if no input data file is found, fixes a core dump in that case (reported by Bruno Haible). + correct bracketing in CF_MATH_LIB configure macro, which gave wrong result for OS/2 EMX. + supply required parameter for _nc_resolve_uses() call in read_termcap.c, overlooked in 20000311 (reported by Todd C Miller). > patches by Bruno Haible : + fix a compiler warning in fty_enum.c + correct LIB_PREFIX expression for DEPS_CURSES in progs, tack makefiles, which resulted in redundant linking (cf: 20000122). 20000311 + make ifdef's for BROKEN_LINKER consistent (patch by Todd C Miller). + improved tack/README (patch by Daniel Weaver). + modify tput.c to ensure that unspecified parameters are passed to tparm() as 0's. + add a few checks in infocmp to guard against buffer overflow when displaying string capabilities. + add check for zero-uses in infocmp's file_comparison() function before calling _nc_align_termtype(). Otherwise one parameter is indexed past the end of the uses-array. + add an option -q to infocmp to specify the less verbose output, keeping the existing format as the default, though not retaining the previous behavior that made the -F option compare each entry to itself. + adapted patch by ESR to make infocmp -F less verbose -TD (the submitted patch was unusable because it did not compile properly) + modify write_entry.c to ensure that absent or cancelled booleans are written as FALSE, for consistency with infocmp which now assumes this. Note that for the small-core configuration, tic may not produce the same result as before. + change some private library interfaces used by infocmp, e.g., _nc_resolve_uses(). + add a check in _nc_infotocap() to ensure that cm-style capabilities accept only %d codes when converting the format from terminfo to termcap. + modify ENTRY struct to separate the data in 'parent' into the name and link values (the original idea to merge both into 'parent' was not good). + discard repair_acsc(tterm); > patch by Juergen Pfeifer: + drop support for gnat 3.10 + move generated documentation and html files under ./doc directory, adding makefile rules for this to dist.mk 20000304 + correct conflicting use of tparm() in 20000226 change to tic, which made it check only one entry at a time. + fix errors in ncurses-intro.html and hackguide.html shown by Dave Raggett's tidy. + make the example in ncurses-intro.html do something plausible, and corrected misleading comment (reported by Neil Zanella). + modify pnoutrefresh() to set newscr->_leaveok as wnoutrefresh() does, to fix a case where the cursor position was not updated as in Solaris (patch by David Mosberger ). + add a limit-check for wresize() to ensure that a subwindow does not address out of bounds. + correct offsets used for subwindows in wresize() (patch by Michael Andres ). + regenerate html'ized manual pages with man2html 3.0.1 (patch by Juergen Pfeifer). This generated a file with a space in its name, which I removed. + fix a few spelling errors in tack. + modify tack/Makefile.in to match linker options of progs/Makefile.in; otherwise it does not build properly for older HPUX shared library configurations. + add several terminfo entries from esr's "11.0". 20000226 + make 'tput flash' work properly for xterm by flushing output in delay_output() when using napms(), and modifying xterm's terminfo to specify no padding character. Otherwise, xterm's reported baud rate can mislead ncurses into producing too few padding characters (Debian #58530). + add a check to tic for consistency between sgr and the separate capabilities such as smso, use this to check/correct several terminfo entries (Debian #58530). + add a check to tic if cvvis is the same as cnorm, adjusted several terminfo entries to remove the conflict (Debian #58530). + correct prototype shown in attr_set()/wattr_set() manpages (fixes Debian #53962). + minor clarification for curs_set() and leaveok() manpages. + use mkstemp() for creating temporary file for tic's processing of $TERMCAP contents (fixes Debian #56465). + correct two errors from integrating Alexander's changes: did not handle the non-bce case properly in can_erase_with() (noted by Alexander), and left fg/bg uninitialized in the pair-zero case of _nc_do_color() (reported by Dr Werner Fink and Ismael Cordeiro ). 20000219 + store default-color code consistently as C_MASK, even if given as -1 for convenience (adapted from patches by Alexander V Lukyanov). > patches by Alexander V Lukyanov: + change can_clear_with() macro to accommodate logic for assume_default_colors(), making most of the FILL_BCE logic unnecessary. Made can_clear_with() an inline function to make it simpler to read. 20000212 + corrected form of recent copyright dates. + minor corrections to xterm-xf86-v333 terminfo entry -TD > patches by Alexander V Lukyanov: + reworded dft_fgbg.3x to avoid assuming that the terminal's default colors are white on black. + fix initialization of tstLine so that it is filled with current blank character in any case. Previously it was possible to have it filled with old blank. The wrong over-optimization was introduced in 991002 patch. (it is not very critical as the only bad effect is not using clr_eos for clearing if blank has changed). 20000205 + minor corrections/updates to several terminfo entries: rxvt-basic, vt520, vt525, ibm5151, xterm-xf86-v40 -TD + modify ifdef's for poll() to allow it to use , thereby allowing poll() to be used on Linux. + add CF_FUNC_POLL macro to check if poll() is able to select from standard input. If not we will not use it, preferring select() (adapted from patch by Michael Pakovic ). + update CF_SHARED_OPTS macro for SCO Unixware 7.1 to allow building shared libraries (reported/tested by Thanh ). + override $LANGUAGE in build to avoid incorrect ordering of keynames. + correct CF_MATH_LIB parameter, must be sin(x), not sqrt(x). 20000122 + resync CF_CHECK_ERRNO and CF_LIB_PREFIX macros from tin and xterm -TD + modify CF_MATH_LIB configure macro to parameterize the test function used, for reuse in dialog and similar packages. + correct tests for file-descriptors in OS/2 EMX mouse support. A negative value could be used by FD_SET, causing the select() call to wait indefinitely. 20000115 + additional fixes for non-bce terminals (handling of delete_character) to work when assume_default_colors() is not specified. + modify warning message from _nc_parse_entry() regarding extended capability names to print only if tic/infocmp/toe have the -v flag set, and not at all in ordinary user applications. Otherwise, this warning would be shown for screen's extended capabilities in programs that use the termcap interface (reported by Todd C Miller). + modify use of _nc_tracing from programs such as tic so their debug level is not in the same range as values set by trace() function. + small panel header cleanup (patch by Juergen Pfeifer). + add 'railroad' demo for termcap interface. + modify 'tic' to write its usage message to stderr (patch by Todd C Miller). 20000108 + add prototype for erase() to curses.h.in, needed to make test programs build with c++/g++. + add .c.i and .c.h suffix rules to generated makefiles, for debugging. + correct install rule for tack.1; it assumed that file was in the current directory (reported by Mike Castle ). + modify terminfo/termcap translation to suppress acsc before trying sgr if the entry would be too large (patch by Todd C Miller). + document a special case of incompatiblity between ncurses 4.2 and 5.0, add a section for this in INSTALL. + add TRACE_DATABASE flag for trace(). 20000101 + update mach, add mach-color terminfo entries based on Debian diffs for ncurses 5.0 -TD + add entries for xterm-hp, xterm-vt220, xterm-vt52 and xterm-noapp terminfo entries -TD + change OTrs capabilities to rs2 in terminfo.src -TD + add obsolete and extended capabilities to 'screen' terminfo -TD + corrected conversion from terminfo rs2 to termcap rs (cf: 980704) + make conversion to termcap ug (underline glitch) more consistently applied. + fix out-of-scope use of 'personal[]' buffer in 'toe' (this error was in the original pre-1.9.7 version, when $HOME/.terminfo was introduced). + modify 'toe' to ignore terminfo directories to which it has no permissions. + modify read_termtype(), fixing 'toe', which could dump core when it found an incomplete entry such as "dumb" because it did not initialize its buffer for _nc_read_file_entry(). + use -fPIC rather than -fpic for shared libraries on Linux, not needed for i386 but some ports (from Debian diffs for 5.0) -TD + use explicit VALID_NUMERIC() checks in a few places that had been overlooked, and add a check to ensure that init_tabs is nonzero, to avoid divide-by-zero (reported by Todd C Miller). + minor fix for CF_ANSI_CC_CHECK configure macro, for HPUX 10.x (from tin) -TD 19991218 + reorder tests during mouse initialization to allow for gpm to run in xterm, or for xterm to be used under OS/2 EMX. Also drop test for $DISPLAY in favor of kmous=\E[M or $TERM containing "xterm" (report by Christian Weisgerber ). + modify raw() and noraw() to clear/restore IEXTEN flag which affects stty lnext on systems such as FreeBSD (report by Bruce Evans , via Jason Evans ). + fix a potential (but unlikely) buffer overflow in failed() function of tset.c (reported by Todd C Miller). + add manual-page for ncurses extensions, documented curses_version(), use_extended_names(). 19991211 + treat as untranslatable to termcap those terminfo strings which contain non-decimal formatting, e.g., hexadecimal or octal. + correct commented-out capabilities that cannot be translated to termcap, which did not check if a colon must be escaped. + correct termcap translation for "%>" and "%+", which did not check if a colon must be escaped, for instance. + use save_string/save_char for _nc_captoinfo() to eliminate fixed buffer (originally for _nc_infotocap() in 960301 -TD). + correct expression used for terminfo equivalent of termcap %B, adjust regent100 entry which uses this. + some cleanup and commenting of ad hoc cases in _nc_infotocap(). + eliminate a fixed-buffer in tic, used for translating comments. + add manpage for infotocap 19991204 + add kvt and gnome terminfo entries -TD + correct translation of "%%" by infotocap, which was emitted as "%". + add "obsolete" termcap strings to terminfo.src + modify infocmp to default to showing obsolete capabilities rather than terminfo only. + modify write_entry.c so that if extended names (i.e., configure --enable-tcap-names) are active, then tic will also write "obsolete" capabilities that are present in the terminfo source. + modify tic so that when running as captoinfo or infotocap, it initializes the output format as in -C and -I options, respectively. + improve infocmp and tic -f option by splitting long strings that do not have if-then-else construct, but do have parameters, e.g., the initc for xterm-88color. + refine MKtermsort.sh slightly by using bool for the *_from_termcap arrays. 19991127 + additional fixes for non-bce terminals (handling of clear_screen, clr_eol, clr_eos, scrolling) to work when assume_default_colors() is not specified. + several small changes to xterm terminfo entries -TD. + move logic for _nc_windows in lib_freeall.c inside check for nonnull SP, since it is part of that struct. + remove obsolete shlib-versions, which was unintentionally re-added in 970927. + modify infocmp -e, -E options to ensure that generated fallback.c type for Booleans agrees with term.h (reported by Eric Norum ). + correct configure script's use of $LIB_PREFIX, which did not work for installing the c++ directory if $libdir did not end with "/lib" (reported by Huy Le ). + modify infocmp so -L and -f options work together. + modify the initialization of SP->_color_table[] in start_color() so that color_content() will return usable values for COLORS greater than 8. + modify ncurses 'd' test in case COLORS is greater than 16, e.g., for xterm-88color, to limit the displayed/computed colors to 16. > patch by Juergen Pfeifer: + simplify coding of the panel library according to suggestions by Philippe Blain. + improve macro coding for a few macros in curses.priv.h 19991113 + modify treatment of color pair 0 so that if ncurses is configured to support default colors, and they are not active, then ncurses will set that explicitly, not relying on orig_colors or orig_pair. + add new extension, assume_default_colors() to provide better control over the use of default colors. + modify test programs to use more-specific ifdef's for existence of wresize(), resizeterm() and use_default_colors(). + modify configure script to add specific ifdef's for some functions that are included when --enable-ext-funcs is in effect, so their existence can be ifdef'd in the test programs. + reorder some configure options, moving those extensions that have evolved from experimental status into a new section. + change configure --enable-tcap-names to enable this by default. 19991106 + install tack's manpage (reported by Robert Weiner ) + correct worm.c's handling of KEY_RESIZE (patch by Frank Heckenbach). + modify curses.h.in, undef'ing some symbols to avoid conflict with C++ STL (reported by Matt Gerassimoff ) 19991030 + modify linux terminfo entry to indicate that dim does not mix with color (reported by Klaus Weide ). + correct several typos in terminfo entries related to missing '[' in CSI's -TD + fix several compiler warnings in c++ binding (reported by Tim Mooney for alphaev56-dec-osf4.0f + rename parameter of _nc_free_entries() to accommodate lint. + correct lint rule for tack, used incorrect list of source files. + add case to config.guess, config.sub for Rhapsody. + improve configure tests for libg++ and libstdc++ by omitting the math library (which is missing on Rhapsody), and improved test for the math library itself (adapted from path by Nelson H. F. Beebe). + explicitly initialize to zero several data items which were implicitly initialized, e.g., cur_term. If not explicitly initialized, their storage type is C (common), and causes problems linking on Rhapsody 5.5 using gcc 2.7.2.1 (reported by Nelson H. F. Beebe). + modify Ada95 binding to not include the linker option for Ada bindings in the Ada headers, but in the Makefiles instead (patch by Juergen Pfeifer). 19991023 5.0 release for upload to ftp.gnu.org + effective with release of 5.0, change NCURSES_VERSION_PATCH to 4-digit year. + add function curses_version(), to return ncurses library version (request by Bob van der Poel). + remove rmam, smam from cygwin terminfo entry. + modify FreeBSD cons25 terminfo entry to add cnorm and cvvis, as well as update ncv to indicate that 'dim' conflicts with colors. + modify configure script to use symbolic links for FreeBSD shared libraries by default. + correct ranf() function in rain and worm programs to ensure it does not return 1.0 + hide the cursor in hanoi.c if it is running automatically. + amend lrtest.c to account for optimizations that exploit margin wrapping. + add a simple terminfo demo, dots.c + modify SIGINT/SIGQUIT handler to set a flag used in _nc_outch() to tell it to use write() rather than putc(), since the latter is not safe in a signal handler according to POSIX. + add/use internal macros _nc_flush() and NC_OUTPUT to hide details of output-file pointer in ncurses library. + uncomment CC_SHARED_OPTS (see 971115), since they are needed for SCO OpenServer. + correct CC_SHARED_OPTS for building shared libraries for SCO OpenServer. + remove usleep() from alternatives in napms(), since it may interact with alarm(), causing a process to be interrupted by SIGALRM (with advice from Bela Lubkin). + modify terminal_interface-curses-forms.ads.m4 to build/work with GNAT 3.10 (patch by Juergen Pfeifer). + remove part of CF_GPP_LIBRARY configure-script macro, which did not work with gcc 2.7.2.3 + minor fix to test/tclock.c to avoid beeping more than once per second + add 's' and ' ' decoding to test/rain.c 991016 pre-release + corrected BeOS code for lib_twait.c, making nodelay() function work. 991009 pre-release + correct ncurses' value for cursor-column in PutCharLR(), which was off-by-one in one case (patch by Ilya Zakharevich). + fix some minor errors in position_check() debugging code, found while using this to validate the PutCharLR() patch. + modify firework, lrtest, worm examples to be resizable, and to recognize 'q' for quit, 's' for single-step and ' ' for resume. + restore reverted change to terminal_interface-curses-forms.ads.m4, add a note on building with gnat 3.10p to Ada95/TODO. + add a copy of the standalone configure script for the test-directory to simplify testing on SCO and Solaris. 991002 pre-release + minor fixes for _nc_msec_cost(), color_content(), pair_content(), _nc_freewin(), ClrBottom() and onscreen_mvcur() (analysis by Philippe Blain, comments by Alexander V Lukyanov). + simplify definition of PANEL and eliminate internal functions _nc_calculate_obscure(), _nc_free_obscure() and _nc_override(), (patch by Juergen Pfeifer, analysis by Philippe Blain )). + change renaming of dft_fgbg.3x to use_default_colors.3ncurses in man_db.renames, since Debian is not concerned with 14-character filename limitation (Debian bug report by Josip Rodin ). + corrected scoansi terminfo entry by testing with scoterm and console. + revert change from 990614 to terminal_interface-curses-forms.ads.m4, since this does not work for gnat 3.10p + modify tclock example to be resizable (if ncurses' sigwinch handler is used), and in color. + use $(CC) rather than 'gcc' in MK_SHARED_LIB symbols, used for Linux shared library rules. 990925 pre-release + add newer NetBSD console terminfo entries + add amiga-8bit terminfo entry (from Henning 'Faroul' Peters ) + remove -lcurses -ltermcap from configure script's check for the gpm library, since they are not really necessary (a properly configured gpm library has no dependency on any curses library), and if the curses library is not installed, this would cause the test to fail. + modify tic's -C option so that terminfo "use=" clauses are translated to "tc=" clauses even when running it as captoinfo. + modify CF_STDCPP_LIBRARY configure macro to perform its check only for GNU C++, since that library conflicts with SGI's libC on IRIX-6.2 + modify CF_SHARED_OPTS configure macro to support build on NetBSD with ELF libraries (patch by Bernd Ernesti ). + correct a problem in libpanel, where the _nc_top_panel variable was not set properly when bottom_panel() is called to hide a panel which is the only one on the stack (report/analysis by Michael Andres , patch by Juergen Pfeifer). 990918 pre-release + add acsc string to HP 70092 terminfo entry (patch by Joerg Wunsch ). + add top-level uninstall.data and uninstall.man makefile rules. + correct logic of CF_LINK_FUNCS configure script, from BeOS changes so that hard-links work on Unix again. + change default value of cf_cv_builtin_bool to 1 (suggested by Jeremy Buhler), making it less likely that a conflicting declaration of bool will be seen when compiling with C++. 990911 pre-release + improved configure checks for builtin.h + minor changes to C++ binding (remove static initializations, and make configure-test for parameter initializations) for features not allowed by vendor's C++ compilers (reported by Martin Mokrejs, this applies to SGI, though I found SCO has the same characteristics). + corrected quoting of ETIP_xxx definitions which support old versions of g++, e.g., those using -lg++ + remove 'L' code from safe_sprintf.c, since 'long double' is not widely portable. safe_sprintf.c is experimental, however, and exists mainly as a fallback for systems without snprintf (reported by Martin Mokrejs , for IRIX 6.2) + modify definition of _nc_tinfo_fkeys in broken-linker configuration so that it is not unnecessarily made extern (Jeffrey C Honig). 990904 pre-release + move definition for builtin.h in configure tests to specific check for libg++, since qt uses the same filename incompatibly. + correct logic of lib_termcap.c tgetstr function, which did not copy the result to the buffer parameter. Testing shows Solaris does update this, though of course tgetent's buffer is untouched (reported in Peter Edwards in mpc.lists.freebsd.current newsgroup. + corrected beterm terminfo entry, which lists some capabilities which are not actually provided by the BeOS Terminal. + add special logic to replace select() calls on BeOS, whose select() function works only for sockets. + correct missing escape in mkterm.h.awk.in, which caused part of the copyright noticed to be omitted (reported by Peter Wemm ). > several small changes to make the c++ binding and demo work on OS/2 EMX (related to a clean reinstall of EMX): + correct library-prefix for c++ binding; none is needed. + add $x suffix to make_hash and make_keys so 'make distclean' works. + correct missing $x suffix for tack, c++ demo executables. + split CF_CXX_LIBRARY into CF_GPP_LIBRARY (for -lg++) and CF_STDCPP_LIBRARY (for -lstdc++) 990828 pre-release + add cygwin terminfo entry -TD + modify CF_PROG_EXT configure macro to set .exe extension for cygwin. + add configure option --without-cxx-binding, modifying the existing --without-cxx option to check only for the C++ compiler characteristics. Whether or not the C++ binding is needed, the configure script checks for the size/type of bool, to make ncurses match. Otherwise C++ applications cannot use ncurses. 990821 pre-release + updated configure macros CF_MAKEFLAGS, CF_CHECK_ERRNO + minor corrections to beterm terminfo entry. + modify lib_setup.c to reject values of $TERM which have a '/' in them. + add ifdef's to guard against CS5, CS6, CS7, CS8 being zero, as more than one is on BeOS. That would break a switch statement. + add configure macro CF_LINK_FUNCS to detect and work around BeOS's nonfunctional link(). + improved configure macros CF_BOOL_DECL and CF_BOOL_SIZE to detect BeOS's bool, which is declared as an unsigned char. 990814 pre-release + add ms-vt100 terminfo entry -TD + minor fixes for misc/emx.src, based on testing with tack. + minor fix for test/ncurses.c, test 'a', in case ncv is not set. 990731 pre-release + minor correction for 'screen' terminfo entry. + clarify description of errret values for setupterm in manpage. + modify tput to allow it to emit capabilities for hardcopy terminals (patch by Goran Uddeborg ). + modify the 'o' (panel) test in ncurses.c to show the panels in color or at least in bold, to test Juergen's change to wrefresh(). > patches by Juergen Pfeifer: + Fixes a problem using wbkgdset() with panels. It has actually nothing to with panels but is a problem in the implementation of wrefresh(). Whenever a window changes its background attribute to something different than newscr's background attribute, the whole window is touched to force a copy to newscr. This is an unwanted side-effect of wrefresh() and it is actually not necessary. A changed background attribute affects only further outputs of background it doesn't mean anything to the current content of the window. So there is no need to force a copy. (reported by Frank Heckenbach ). + an upward compatible enhancement of the NCursesPad class in the C++ binding. It allows one to add a "viewport" window to a pad and then to use panning to view the pad through the viewport window. 990724 pre-release + suppress a call to def_prog_mode() in the SIGTSTP handler if the signal was received while not in curses mode, e.g., endwin() was called in preparation for spawning a shell command (reported by Frank Heckenbach ) + corrected/enhanced xterm-r5, xterm+sl, xterm+sl-twm terminfo entries. + change test for xterm mouse capability: it now checks only if the user's $DISPLAY variable is set in conjunction with the kmous capability being present in the terminfo. Before, it checked if any of "xterm", "rxvt" or "kterm" were substrings of the terminal name. However, some emulators which are incompatible with xterm in other ways do support the xterm mouse capability. + reviewed and made minor changes in ncurses to quiet g++ warnings about shadowed or uninitialized variables. g++ incorrectly warns about uninitialized variables because it does not take into account short-circuit expression evaluation. + change ncurses 'b' test to start in color pair 0 and to show in the right margin those attributes which are suppressed by no_color_video, i.e., "(NCV)". + modify ifdef's in curses.h so that __attribute__ is not redefined when compiling with g++, but instead disabled the macros derived for __attribute__ since g++ does not consistently recognize the same keywords as gcc (reported by Stephan K Zitz ). + update dependencies for term.h in ncurses/modules (reported by Ilya Zakharevich). 990710 pre-release + modify the form demo in ncurses.c to illustrate how to manipulate the field appearance, e.g, for highlighting or translating the field contents. + correct logic in write_entry from split-out of home_terminfo in 980919, which prevented update of $HOME/.terminfo (reported by Philip Spencer ). 990703 pre-release + modify linux terminfo description to make use of kernel 2.2.x mods that support cursor style, e.g., to implement cvvis (patch by Frank Heckenbach ) + add special-case in setupterm to retain previously-saved terminal settings in cur_term, which happens when curses and termcap calls are mixed (from report by Bjorn Helgaas ). + suppress initialization of key-tries in _nc_keypad() if we are only disabling keypad mode, e.g., in endwin() called when keypad() was not. + modify the Ada95 makefile to ensure that always the Ada files from the development tree are used for building and not the eventually installed ones (patch by Juergen Pfeifer). 990626 pre-release + use TTY definition in tack/sysdep.c rather than struct termios (reported by Philippe De Muyter). + add a fallback for strstr, used in lib_mvcur.c and tack/edit.c, not present on sysV68 (reported by Philippe De Muyter). + correct definition in comp_hash.c to build with configure --with-rcs-ids option. 990619 pre-release + modified ifdef's for sigaction and sigvec to ensure we do not try to handle SIGTSTP if neither is available (from report by Philippe De Muyter). > patch by Philippe De Muyter: + in tic.c, use `unlink' if `remove' is not available. + use only `unsigned' as fallback value for `speed_t'. Some files used `short' instead. 990616 pre-release + fix some compiler warnings in tack. + add a check for predefined bool type in CC, based on report that BeOS predefines a bool type. + correct logic for infocmp -e option, i.e., the configure --with-fallbacks option, which I'd not updated when implementing extended names (cf: 990301). The new implementation adds a "-E" option to infocmp -TD > patch by Juergen Pfeifer: + introduce the private type Curses_Bool in the Ada95 binding implementation. This is to clearly represent the use of "bool" also in the binding. It should have no effect on the generated code. + improve the man page for field_buffer() to tell the people, that the whole buffer including leading/trailing spaces is returned. This is a common source of confusion, so it's better to document it clearly. 990614 pre-release > patch by Juergen Pfeifer: + use pragma PreElaborate in several places. + change a few System.Address uses to more specific types. + change interface version-number to 1.0 + regenerate Ada95 HTML files. 990612 pre-release + modify lib_endwin.c to avoid calling reset_shell_mode(), return ERR if it appears that curses was never initialized, e.g., by initscr(). For instance, this guards against setting the terminal modes to strange values if endwin() is called after setupterm(). In the same context, Solaris curses will dump core. + modify logic that avoids a conflict in lib_vidattr.c between sgr0 and equivalent values in rmso or rmul by ensuring we do not modify the data which would be returned by the terminfo or termcap interfaces (reported by Brad Pepers , cf: 960706). + add a null-pointer check for SP in lib_vidattr.c to logic that checks for magic cookies. + improve fallback declaration of 'bool' when the --without-cxx option is given, by using a 'char' on i386 and related hosts (prompted by discussion with Alexander V Lukyanov). 990605 pre-release + include time.h in lib_napms.c if nanosleep is used (patch by R Lindsay Todd ). + add an "#undef bool" to curses.h, in case someone tries to define it, e.g., perl. + add check to tparm to guard against divide by zero (reported by Aaron Campbell ). 990516 pre-release + minor fix to build tack on CLIX (mismatched const). > patch by Juergen Pfeifer: + change Juergen's old email address with new one in the files where it is referenced. The Ada95 HTML pages are regenerated. + update MANIFEST to list the tack files. 990509 pre-release + minor fixes to make 'tack' build/link on NeXT (reported by Francisco A. Tomei Torres). 990417 pre-release + add 'tack' program (which is GPL'd), updating it to work with the modified TERMTYPE struct and making a fix to support setaf/setab capabilities. Note that the tack program is not part of the ncurses libraries, but an application which can be distributed with ncurses. The configure script will ignore the directory if it is omitted, however. + modify gpm mouse support so that buttons 2 and 3 are used for select/paste only when shift key is pressed, making them available for use by an application (patch by Klaus Weide). + add complete list of function keys to scoansi terminfo entry - TD 990410 pre-release + add a simple test program cardfile.c to illustrate how to read form fields, and showing forms within panels. + change shared-library versioning for the Hurd to be like Linux rather than *BSD (patch by Mark Kettenis ). + add linux-lat terminfo entry. + back-out _nc_access check in read_termcap.c (both incorrect and unnecessary, except to guard against a small window where the file's ownership may change). 990403 pre-release + remove conflicting _nc_free_termtype() function from test module lib_freeall.c + use _nc_access check in read_termcap.c for termpaths[] array (noted by Jeremy Buhler, indicating that Alan Cox made a similar patch). > patch by Juergen Pfeifer: + modify menu creation to not inherit status flag from the default menu which says that the associated marker string has been allocated and should be freed (bug reported by Marek Paliwoda" ) 990327 pre-release (alpha.gnu.org:/gnu/ncurses-5.0-beta1.tar.gz) + minor fixes to xterm-xfree86 terminfo entry - TD. + split up an expression in configure script check for ldconfig to workaround limitation of BSD/OS sh (reported by Jeff Haas ). + correct a typo in man/form_hook.3x (Todd C Miller). 990318 pre-release + parenthesize and undef 'index' symbol in c++ binding and demo, to accommodate its definition on NeXT (reported by Francisco A. Tomei Torres). + add sigismember() to base/sigaction.c compatibility to link on NeXT (reported by Francisco A. Tomei Torres). + further refinements to inequality in hashmap.c to cover a case with ^U in nvi (patch by Alexander V Lukyanov). 990316 pre-release + add fallback definition for getcwd, to link on NeXT. + add a copy of cur_term to tic.c to make it link properly on NeXT (reported by Francisco A. Tomei Torres). + change inequality in hashmap.c which checks the distance traveled by a chunk so that ^D command in nvi (scrolls 1/2 screen) will use scrolling logic (patch by Alexander V Lukyanov, reported by Jeffrey C Honig). 990314 pre-release + modify lib_color.c to handle a special case where the curscr attributes have been made obsolete (patch by Alexander V Lukyanov). + update BSD/OS console terminfo entries to use klone+sgr and klone+color (patch by Jeffrey C Honig). + update glibc addon configure script for extended capabilities. + correct a couple of warnings in the --enable-const configuration. + make comp_hash build properly with _nc_strdup(), on NeXT (reported by Francisco A. Tomei Torres ). 990313 pre-release + correct typos in linux-c initc string - TD + add 'crt' terminfo entry, update xterm-xfree86 entry - TD + remove a spurious argument to tparm() in lib_sklrefr.c (patch by Alexander V Lukyanov). 990307 pre-release + back-out change to wgetch because it causes a problem with ^Z handling in lynx (reported by Kim DeVaughn). 990306 pre-release + add -G option to tic and infocmp, to reverse the "-g" option. + recode functions in name_match.c to avoid use of strncpy, which caused a 4-fold slowdown in tic (cf: 980530). + correct a few warnings about sign-extension in recent changes. > patch by Juergen Pfeifer: + fixes suggested by Jeff Bradbury : + improved parameter checking in new_fieldtype(). + fixed a typo in wgetch() timeout handling. + allow slk_init() to be called per newterm call. The internal SLK state is stored in the SCREEN struct after every newterm() and then reset for the next newterm. + fix the problem that a slk_refresh() refreshes stdscr if the terminal has true SLKs. + update HTML documentation for Ada binding. 990301 pre-release + remove 'bool' casts from definitions of TRUE/FALSE so that statements such as "#if TRUE" work. This was originally done to allow for a C++ compiler which would warn of implicit conversions between enum and int, but is not needed for g++ (reported by Kim DeVaughn). + add use_extended_names() function to allow applications to suppress read of the extended capabilities. + add configure option --enable-tcap-names to support logic which allows ncurses' tic to define new (i.e., extended) terminal capabilities. This is activated by the tic -x switch. The infocmp program automatically shows or compares extended capabilities. Note: This changes the Strings and similar arrays in the TERMTYPE struct so that applications which manipulate it must be recompiled. + use macros typeMalloc, typeCalloc and typeRealloc consistently throughout ncurses library. + add _nc_strdup() to doalloc.c. + modify define_key() to allow multiple strings to be bound to the same keycode. + correct logic error in _nc_remove_string, from 990220. > patch for Ada95 binding (Juergen Pfeifer): + regenerate some of the html documentation + minor cleanup in terminal_interface-curses.adb 990220 pre-release + resolve ambiguity of kend/kll/kslt and khome/kfnd/kich1 strings in xterm and ncsa terminfo entries by removing the unneeded ones. Note that some entries will return kend & khome versus kslt and kfnd, for PC-style keyboards versus strict vt220 compatiblity - TD + add function keybound(), which returns the definition associated with a given keycode. + modify define_key() to undefine the given string when no keycode is given. + modify keyok() so it works properly if there is more than one string defined for a keycode. + add check to tic to warn about terminfo descriptions that contain more than one key assigned to the same string. This is shown only if the verbose (-v) option is given. Moved related logic (tic -v) from comp_parse.c into the tic program. + add/use _nc_trace_tries() to show the function keys that will be recognized. + rename init_acs to _nc_init_acs (request by Alexander V Lukyanov). > patch for Ada95 binding (Juergen Pfeifer): + remove all the *_adabind.c from ncurses, menu and form projects. Those little helper routines have all been implemented in Ada and are no longer required. + The option handling routines in menu and form have been made more save. They now make sure that the unused bits in options are always zero. + modify configuration scripts to + use gnatmake as default compiler name. This is a safer choice than gcc, because some GNAT implementations use other names for the compilerdriver to avoid conflicts. + use new default installation locations for the Ada files according to the proposed GNU Ada filesystem standard (for Linux). + simplify the Makefiles for the Ada binding + rename ada_include directory to src. 990213 + enable sigwinch handler by default. + disable logic that allows setbuf to be turned off/on, because some implementations will overrun the buffer after it has been disabled once. 990206 + suppress sc/rc capabilities from terminal description if they appear in smcup/rmcup. This affects only scrolling optimization, to fix a problem reported by several people with xterm's alternate screen, though the problem is more general. > patch for Ada95 binding (Juergen Pfeifer): + removed all pragma Preelaborate() stuff, because the just released gnat-3.11p complains on some constructs. + fixed some upper/lower case notations because gnat-3.11p found inconsistent use. + used a new method to generate the HTML documentation of the Ada95 binding. This invalidates nearly the whole ./Ada95/html subtree. Nearly all current files in this subtree are removed 990130 + cache last result from _nc_baudrate, for performance (suggested by Alexander V Lukyanov). + modify ClrUpdate() function to workaround a problem in nvi, which uses redrawwin in SIGTSTP handling. Jeffrey C Honig reported that ncurses repainted the screen with nulls before resuming normal operation (patch by Alexander V Lukyanov). + generalize is_xterm() function a little by letting xterm/rxvt/kterm be any substring rather than the prefix. + modify lib_data.c to initialize SP. Some linkers, e.g., IBM's, will not link a module if the only symbols exported from the module are uninitialized ones (patch by Ilya Zakharevich). Ilya says that he has seen messages claiming this behavior conforms to the standard.) + move call on _nc_signal_handler past _nc_initscr, to avoid a small window where Nttyb hasn't yet been filled (reported by Klaus Weide). + modify lib_tstp.c to block SIGTTOU when handling SIGTSTP, fixes a problem where ncurses applications which were run via a shell script would hang when given a ^Z. Also, check if the terminal's process group is consistent, i.e., a shell has not taken ownership of it, before deciding to save the current terminal settings in the SIGTSTP handler (patch by Klaus Weide). + correct spelling of ACS_ names in curs_border.3x (reported by Bob van der Poel ). + correct a couple of typos in the macros supporting the configure --with-shlib-version option. 990123 + modify fty_regex.c to compile on HAVE_REGEXPR_H_FUNCS machine (patch by Kimio Ishii ). + rename BSDI console terminfo entries: bsdos to bsdos-pc-nobold, and bsdos-bold to bsdos-pc (patch by Jeffrey C Honig). + modify tput to accept termcap names as an alternative to terminfo names (patch by Jeffrey C Honig). + correct a typo in term.7 (Todd C Miller). + add configure --with-shlib-version option to allow installing shared libraries named according to release or ABI versions. This parameterizes some existing logic in the configure script, and is intended for compatiblity upgrades on Digital Unix, which used versioned libraries in ncurses 4.2, but no longer does (cf: 980425). + resync configure script against autoconf 2.13 + patches + minor improvements for teraterm terminfo entry based on the program's source distribution. 990116 + change default for configure --enable-big-core to assume machines do have enough memory to resolve terminfo.src in-memory. + correct name of ncurses library in TEST_ARGS when configuring with debug library. + minor fixes to compile ncurses library with broken-linker with g++. + add --enable-broken-linker configure option, default to environment variable $BROKEN_LINKER (request by Jeffrey C Honig). + change key_names[] array to static since it is not part of the curses interface (reported by Jeffrey C Honig ). 990110 + add Tera Term terminfo entry - TD 990109 + reviewed/corrected macros in curses.h as per XSI document. + provide support for termcap PC variable by copying it from terminfo data and using it as the padding character in tputs (reported by Alexander V Lukyanov). + corrected iris-ansi and iris-ansi-ap terminfo entries for kent and kf9-kf12 capabilities, as well as adding kcbt. + document the mouse handling mechanism in menu_driver and make a small change in menu_driver's return codes to provide more consistency (patch by Juergen Pfeifer). + add fallback definition for NCURSES_CONST to termcap.h.in (reported by Uchiyama Yasushi ). + move lib_restart.c to ncurses/base, since it uses curses functions directly, and therefore cannot be used in libtinfo.so + rename micro_char_size to micro_col_size, adding #define to retain old name. + add set_a_attributes and set_pglen_inch to terminfo structure, as per XSI and Solaris 2.5. + minor makefile files to build ncurses test_progs + update html files in misc directory to reflect changes since 4.2 990102 + disable scroll hints when hashmap is enabled (patch by Alexander V Lukyanov). + move logic for tic's verify of -e option versus -I and -C so that the terminfo data is not processed if we cannot handle -e (reported by Steven Schwartz . + add test-driver traces to terminfo and termcap functions. + provide support for termcap ospeed variable by copying it from the internal cur_term member, and using ospeed as the baudrate reference for the delay_output and tputs functions. If an application does not set ospeed, the library behaves as before, except that _nc_timed_wait is no longer used, or needed, since ospeed always has a value. But the application can modify ospeed to adjust the output of padding characters (prompted by a bug report for screen 3.7.6 and email from Michael Schroeder ). + removed some unused ifdef's as part of Alexander's restructuring. + reviewed/updated curses.h, term.h against X/Open Curses Issue 4 Version 2. This includes making some parameters NCURSES_CONST rather than const, e.g., in termcap.h. + change linux terminfo entry to use ncv#2, since underline does not work with color 981226 + miscellaneous corrections for curses.h to match XSI. + change --enable-no-padding configure option to be normally enabled. + add section to ncurses manpage for environment variables. + investigated Debian bug report that pertains to screen 3.7.4/3.7.6 changes, found no sign of problems on Linux (or on SunOS, Solaris) running screen built with ncurses. + check if tmp_fp is opened in tic.c before closing it (patch by Pavel Roskin ). + correct several font specification typos in man-pages. 981220 + correct default value for BUILD_CC (reported by Larry Virden). 981219 + modify _nc_set_writedir() to set a flag in _nc_tic_dir() to prevent it from changing the terminfo directory after chdir'ing to it. Otherwise, a relative path in $TERMINFO would confuse tic (prompted by a Debian bug report). + correct/update ncsa terminfo entry (report by Larry Virden). + update xterm-xfree86 terminfo to current (patch 90), smcur/rmcur changes + add Mathew Vernon's mach console entries to terminfo.src + more changes, moving functions, as part of Alexander's restructuring. + modify configure script for GNU/Hurd share-library support, introduce BUILD_CC variable for cross compiling (patch by Uchiyama Yasushi ) 981212 + add environment variable NCURSES_NO_SETBUF to allow disabling the setbuf feature, for testing purposes. + correct ifdef's for termcap.h versus term.h that suppress redundant declarations of prototypes (reported by H.J.Lu). + modify Makefile.os2 to add linker flags which allow multiple copies of an application to coexist (reported by Ilya Zakharevich). + update Makefile.glibc and associated configure script so that ncurses builds as a glibc add-on with the new directory configuration (reported by H.J.Lu). 981205 + modify gen_reps() function in gen.c to work properly on SunOS (sparc), which is a left-to-right architecture. + modify relative_move and tputs to avoid an interaction with the BSD-style padding. The relative_move function could produce a string to replace on the screen which began with a numeric character, which was then interpreted by tputs as padding. Now relative_move will not generate a string with a leading digit in that case (overwrite). Also, tputs will only interpret padding if the string begins with a digit; as coded it permitted a string to begin with a decimal point or asterisk (reported by Larry Virden). > patches by Juergen Pfeifer: + fix a typo in m_driver.c mouse handling and improves the error handling. + fix broken mouse handling in the Ada95 binding + make the Ada95 sample application menus work with the new menu mouse support + improve the mouse handling introduced by Ilya; it now handles menus with spacing. + repair a minor bug in the menu_driver code discovered during this rework. + add new function wmouse_trafo() to hide implementation details of _yoffset member of WINDOW struct needed for mouse coordinate transformation. 981128 + modify Ada95/gen/gen.c to avoid using return-value of sprintf, since some older implementations (e.g., SunOS 4.x) return the buffer address rather than its length. > patch by Rick Ohnemus: + modify demo.cc to get it to compile with newer versions of egcs. + trim a space that appears at the end of the table preprocessor lines ('\" t). This space prevents some versions of man from displaying the pages - changed to remove all trailing whitespace (TD) + finally, 'make clean' does not remove panel objects. > patches by Ilya Zakharevich: + allow remapping of OS/2 mouse buttons using environment variable MOUSE_BUTTONS_123 with the default value 132. + add mouse support to ncurses menus. 981121 + modify misc/makedef.cmd to report old-style .def file symbols, and to generate the .def files sorted by increasing names rather than the reverse. + add misc/*.ref which are J.J.G.Ripoll's dll definition files (renamed from misc/*.old), and updated based on the entrypoint coding he used for an older version of ncurses. + add README.emx, to document how to build on OS/2 EMX. + updates for config.guess, config.sub from Lynx > patches by Ilya Zakharevich: + minor fixes for mouse handling mode: a) Do not initialize mouse if the request is to have no mouse; b) Allow switching of OS/2 VIO mouse on and off. + modify Makefile.os2 to support alternative means of generating configure script, by translating Unix script with Perl. > patches by Juergen Pfeifer: + Updates MANIFEST to reflect changes in source structure + Eliminates a problem introduced with my last patch for the C++ binding in the panels code. It removes the update() call done in the panel destructor. + Changes in the Ada95 binding to better support systems where sizeof(chtype)!=sizeof(int) (e.g. DEC Alpha). 981114 + modify install-script for manpages to skip over .orig and .rej files (request by Larry Virden). > patches/discussion by Alexander V Lukyanov: + move base-library sources into ncurses/base and tty (serial terminal) sources into ncurses/tty, as part of Alexander V Lukyanov's proposed changes to ncurses library. + copy _tracemouse() into ncurses.c so that lib_tracemse.c need not be linked into the normal ncurses library. + move macro winch to a function, to hide details of struct ldat > patches by Juergen Pfeifer: + fix a potential compile problem in cursesw.cc + some Ada95 cosmetics + fix a gen.c problem when compiling on 64-Bit machines + fix Ada95/gen/Makefile.in "-L" linker switch + modify Ada95 makefiles to use the INSTALL_PREFIX setting. 981107 + ifdef'd out lib_freeall.c when not configured. + rename _tracebits() to _nc_tracebits(). + move terminfo-library sources into ncurses/tinfo, and trace-support functions into ncurses/trace as part of Alexander V Lukyanov's proposed changes to ncurses library. + modify generated term.h to always specify its own definitions for HAVE_TERMIOS_H, etc., to guard against inclusion by programs with broken configure scripts. 981031 + modify terminfo parsing to accept octal and hexadecimal constants, like Solaris. + remove an autoconf 2.10 artifact from the configure script's check for "-g" compiler options. (Though harmless, this confused someone at Debian, who recently issued a patch that results in the opposite effect). + add configure option --with-ada-compiler to accommodate installations that do not use gcc as the driver for GNAT (patch by Juergen Pfeifer). 981017 + ensure ./man exists in configure script, needed when configuring with --srcdir option. + modify infocmp "-r" option to remove limit on formatted termcap output, which makes it more like Solaris' version. + modify captoinfo to treat no-argument case more like Solaris' version, which uses the contents of $TERMCAP as the entry to format. + modify mk-2nd.awk to handle subdirectories, e.g., ncurses/tty (patch by Alexander V Lukyanov). 981010 + modify --with-terminfo-dirs option so that the default value is the ${datadir} value, unless $TERMINFO_DIRS is already set. This gets rid of a hardcoded list of candidate directories in the configure script. + add some error-checking to _nc_read_file_entry() to ensure that strings are properly terminated (Todd C Miller). + rename manpage file curs_scr_dmp.3x to curs_scr_dump.3x, to correspond with contents (reported by Neil Zanella ). + remove redundant configure check for C++ which did not work when $CXX was specified with a full pathname (reported by Andreas Jaeger). + corrected bcopy/memmove check; the macro was not standalone. 981003 + remove unnecessary portion of OS/2 EMX mouse change from check_pending() (reported by Alexander V Lukyanov). 980926 + implement mouse support for OS/2 EMX (adapted from patch against 4.2(?) by Ilya Zakharevich). + add configure-check for bcopy/memmove, for 980919 changes to hashmap. + merge Data General terminfo from Hasufin - TD + merge AIX 3.2.5 terminfo descriptions for IBM terminals, replaces some older entries - TD + modify tic to compile into %'char' form in preference to %{number}, since that is a little more efficient. + minor correction to infocmp to avoid displaying "difference" between two capabilities that are rendered in equivalent forms. + add "-g" option to tic/infocmp to force character constants to be displayed in quoted form. Otherwise their decimal values are shown. + modify setupterm so that cancelled strings are treated the same as absent strings, cancelled and absent booleans false (does not affect tic, infocmp). + modify tic, infocmp to discard redundant i3, r3 strings when output to termcap format. > patch by Alexander V Lukyanov: + improve performance of tparm, now it takes 19% instead of 25% when profiling worm. + rename maxlen/minlen to prec/width for better readability. + use format string for printing strings. + use len argument correctly in save_text, and pass it to save_number. 980919 + make test_progs compile (but hashmap does not function). + correct NC_BUFFERED macro, used in lib_mvcur test-driver, modify associated logic to avoid freeing the SP->_setbuf data. + add modules home_terminfo and getenv_num to libtinfo. + move write_entry to libtinfo, to work with termcap caching. + minor fixes to blue.c to build with atac. + remove softscroll.c module; no longer needed for testing. > patches by Todd C Miller: + use strtol(3) instead of atoi(3) when parsing env variables so we can detect a bogus (non-numeric) value. + check for terminal names > MAX_NAME_SIZE in a few more places when dealing with env variables again. + fix a MAX_NAME_SIZE that should be MAX_NAME_SIZE+1 + use sizeof instead of strlen(3) on PRIVATE_INFO since it is a fixed string #define (compile time vs runtime). + when setting errno to ENOMEM, set it right before the return, not before code that could, possibly, set errno to a different value. > patches by Alexander V Lukyanov: + use default background in update_cost_from_blank() + disable scroll-hints when hashmap is configured. + improve integration of hashmap scrolling code, by adding oldhash and newhash data to SP struct. + invoke del_curterm from delscreen. + modify del_curterm to set cur_term to null if it matches the function's parameter which is deleted. + modify lib_doupdate to prefer parm_ich to the enter_insert_mode and exit_insert_mode combination, adjusting InsCharCost to check enter_insert_mode, exit_insert_mode and insert_padding. Add insert_padding in insert mode after each char. This adds new costs to the SP struct. 980912 + modify test-driver in lib_mvcur.s to use _nc_setbuffer, for consistent treatment. + modify ncurses to restore output to unbuffered on endwin, and resume buffering in refresh (see lib_set_term.c and NC_BUFFERED macro). + corrected HTML version numbers (according to the W3C validator, they never were HTML 2.0-compliant, but are acceptable 3.0). 980905 + modify MKterminfo.sh to generate terminfo.5 with tables sorted by capability name, as in SVr4. + modified term.h, termcap.h headers to avoid redundant declarations. + change 'u_int' type in tset.c to unsigned, making this compile on Sequent PRX 4.1 (reported by Michael Sterrett ). 980829 + corrections to mailing addresses, and moving the magic line that causes the man program to invoke tbl to the first line of each manpage (patch by Rick Ohnemus ). + add Makefile.os2 and supporting scripts to generate dll's on OS/2 EMX (from J.J.G.Ripoll, with further integration by TD). + correct a typo in icl6404 terminfo entry. + add xtermm and xtermc terminfo entries. > from esr's terminfo version: + Added Francesco Potorti's tuned Wyse 99 entries. + dtterm enacs (from Alexander V Lukyanov). + Add ncsa-ns, ncsa-m-ns and ncsa-m entries from esr version. 980822 + document AT&T acs characters in terminfo.5 manpage. + use EMX _scrsize() function if terminfo and environment do not declare the screen size (reported by Ilya Zakharevich ). + remove spurious '\' characters from eterm and osborne terminfo entries (prompted by an old Debian bug report). + correct reversed malloc/realloc calls in _nc_doalloc (reported by Hans-Joachim Widmaier ). + correct misplaced parenthesis which caused file-descriptor from opening termcap to be lost, from 980725 changes (reported by Andreas Jaeger). 980815 + modify lib_setup.c to eliminate unneeded include of when termios is not used (patch by Todd C Miller). + add function _nc_doalloc, to ensure that failed realloc calls do not leak memory (reported by Todd C Miller). + improved ncsa-telnet terminfo entry. 980809 + correct missing braces around a trace statement in read_entry.c, from 980808 (reported by Kim DeVaughn and Liviu Daia). 980808 + fix missing include in ditto.c (reported by Bernhard Rosenkraenzer ) + add NCSA telnet terminfo entries from Francesco Potorti , from Debian bug reports. + make handling of $LINES and $COLUMNS variables more compatible with Solaris by allowing them to individually override the window size as obtained via ioctl. 980801 + modify lib_vidattr.c to allow for terminal types (e.g., xterm-color) which may reset all attributes in the 'op' capability, so that colors are set before turning on bold and other attributes, but still after turning attributes off. + add 'ditto.c' to test directory to illustrate use of newterm for initializing multiple screens. + modify _nc_write_entry() to recover from failed attempt to link alias for a terminfo on a filesystem which does not preserve character case (reported by Peter L Jordan ). 980725 + updated versions of config.guess and config.sub based on automake 1.3 + change name-comparisons in lib_termcap to compare no more than 2 characters (gleaned from Debian distribution of 1.9.9g-8.8, verified with Solaris curses). + fix typo in curs_insstr.3x (patch by Todd C Miller) + use 'access()' to check if ncurses library should be permitted to open or modify files with fopen/open/link/unlink/remove calls, in case the calling application is running in setuid mode (request by Cristian Gafton , responding to Duncan Simpson ). + arm100 terminfo entries from Dave Millen ). + qnxt2 and minitel terminfo entries from esr's version. 980718 + use -R option with ldconfig on FreeBSD because otherwise it resets the search path to /usr/lib (reported by Dan Nelson). + add -soname option when building shared libraries on OpenBSD 2.x (request by QingLong). + add configure options --with-manpage-format and --with-manpage-renames (request by QingLong). + correct conversion of CANCELLED_NUMERIC in write_object(), which was omitting the high-order byte, producing a 254 in the compiled terminfo. + modify return-values of tgetflag, tgetnum, tgetstr, tigetflag, tigetnum and tigetstr to be compatible with Solaris (gleaned from Debian distribution of 1.9.9g-8.8). + modify _nc_syserr_abort to abort only when compiled for debugging, otherwise simply exit with an error. 980711 + modify Ada95 'gen' program to use appropriate library suffix (e.g., "_g" for a debug build). + update Ada95 'make clean' rule to include generics .ali files + add a configure test to ensure that if GNAT is found, that it can compile/link working Ada95 program. + flush output in beep and flash functions, fixing a problem with getstr (patch by Alexander V Lukyanov) + fix egcs 1.0.2 warning for etip.h (patch by Chris Johns). + correct ifdef/brace nesting in lib_sprintf.c (patch by Bernhard Rosenkraenzer ). + correct typo in wattr_get macro from 980509 fixes (patch by Dan Nelson). 980704 + merge changes from current XFree86 xterm terminfo descriptions. + add configure option '--without-ada'. + add a smart-default for termcap 'ac' to terminfo 'acs_chars' which corresponds to vt100. + change translation for termcap 'rs' to terminfo 'rs2', which is the documented equivalent, rather than 'rs1'. 980627 + slow 'worm' down a little, for very fast machines. + corrected firstchar/lastchar computation in lib_hline.c + simplify some expressions with CHANGED_CELL, CHANGED_RANGE and CHANGED_TO_EOL macros. + modify init_pair so that if a color-pair is reinitialized, we will repaint the areas of the screen whose color changes, like SVr4 curses (reported by Christian Maurer ). + modify getsyx/setsyx macros to comply with SVr4 man-page which says that leaveok() affects their behavior (report by Darryl Miles, patch by Alexander V Lukyanov). 980620 + review terminfo.5 against Solaris 2.6 curses version, corrected several minor errors/omissions. + implement tparm %l format. + implement tparm printf-style width and precision for %s, %d, %x, %o as per XSI. + implement tparm dynamic variables (reported by Xiaodan Tang). 980613 + update man-page for for wattr_set, wattr_get (cf: 980509) + correct limits in hashtest, which would cause nonprinting characters to be written to large screens. + correct configure script, when --without-cxx was specified: the wrong variable was used for cf_cv_type_of_bool. Compilers up to gcc 2.8 tolerated the missing 'int'. + remove the hardcoded name "gcc" for the GNU Ada compiler. The compiler's name might be something like "egcs" (patch by Juergen Pfeifer). + correct curs_addch.3x, which implied that echochar could directly display control characters (patch by Alexander V Lukyanov). + fix typos in ncurses-intro.html (patch by Sidik Isani ) 980606 + add configure test for conflicting use of exception in math.h and other headers. + minor optimization to 'hash()' function in hashmap.c, reduces its time by 10%. + correct form of LD_SHARED_OPTS for HP-UX 10.x (patch by Tim Mooney). + fix missing quotes for 'print' in MKunctrl.awk script (reported by Mihai Budiu ). > patch by Alexander V Lukyanov: + correct problem on Solaris (with poll() function) where getch could hang indefinitely even if timeout(x) was called. This turned out to be because milliseconds was not updated before 'goto retry' in _nc_timed_wait. + simplified the function _nc_timed_wait and fixed another bug, which was the assumption of !GOOD_SELECT && HAVE_GETTIMEOFDAY in *timeleft assignment. + removed the cycle on EINTR, as it seems to be useless. 980530 + add makefile-rule for test/keynames + modify run_tic.sh and shlib to ensure that user's .profile does not override the $PATH used to run tic (patch by Tim Mooney). + restore LD_SHARED_OPTS to $(LD_SHARED_FLAGS) when linking programs, needed for HP-UX shared-library path (recommended by Tim Mooney). + remove special case of HP-UX -L options, use +b options to embed $(libdir) in the shared libraries (recommended by Tim Mooney). + add checks for some possible buffer overflows and unchecked malloc/realloc/calloc/strdup return values (patch by Todd C Miller ) 980523 + correct maxx/maxy expression for num_columns/num_lines in derwin (patch by Alexander V Lukyanov). + add /usr/share/lib/terminfo and /usr/lib/terminfo as compatibilty fallbacks to _nc_read_entry(), along with --with-terminfo-dirs configure option (suggested by Mike Hopkirk). + modify config.guess to recognize Unixware 2.1 and 7 (patch by Mike Hopkirk ). + suppress definition of CC_SHARED_OPTS in LDFLAGS_SHARED in c++ Makefile.in, since this conflicts when g++ is used with HP-UX compiler (reported by Tim Mooney). + parenthesize 'strcpy' calls in c++ binding to workaround redefinition in some C++ implementations (reported by several people running egcs with glibc 2.0.93, analysis by Andreas Jaeger. 980516 + modify write_entry.c so that it will not attempt to link aliases with embedded '/', but give only a warning. + put -L$(libdir) first when linking programs, except for HP-UX. + modify comp_scan.c to handle SVr4 terminfo description for att477, which contains a colon in the description field. + modify configure script to support SCO osr5.0.5 shared libraries, from comp.unix.sco.programmer newsgroup item (Mike Hopkirk). + eliminate extra GoTo call in lib_doupdate.c (patch by Alexander V. Lukyanov). + minor adjustments of const/NCURSES_CONST from IRIX compile. + add updates based on esr's 980509 version of terminfo.src. 980509 + correct macros for wattr_set, wattr_get, separate wattrset macro from these to preserve behavior that allows attributes to be combined with color pair numbers. + add configure option --enable-no-padding, to allow environment variable $NCURSES_NO_PADDING to eliminate non-mandatory padding, thereby making terminal emulators (e.g., for vt100) a little more efficient (request by Daniel Eisenbud ). + modify configure script to embed ABI in shared libraries for HP-UX 10.x (detailed request by Tim Mooney). + add test/example of the 'filter()' function. + add nxterm and xterm-color terminfo description (request by Cristian Gafton ). + modify rxvt terminfo description to clear alternate screen before switching back to normal screen, for compatibility with applications which use xterm (reported by Manoj Kasichainula ). + modify linux terminfo description to reset color palette (reported by Telford Tendys ). + correction to doupdate, for case where terminal does not support insert/delete character. The logic did not check that there was a difference in alignment of changes to old/new screens before repainting the whole non-blank portion of the line. Modified to fall through into logic that reduces by the portion which does not differ (reported by Daniel Eisenbud ). + minor performance improvement to wnoutrefresh by moving some comparisons out of inner loop. 980425 + modify configure script to substitute NCURSES_CONST in curses.h + updated terminfo entries for xterm-xf86-v40, xterm-16color, xterm-8bit to correspond to XFree86 3.9Ag. + remove restriction that forces ncurses to use setaf/setab if the number of colors is greater than 8. (see 970524 for xterm-16color). + change order of -L options (so that $(libdir) is searched first) when linking tic and other programs, to workaround HP's linker. Otherwise, the -L../lib is embedded when linking against shared libraries and the installed program does not run (reported by Ralf Hildebrandt). + modify configuration of shared libraries on Digital Unix so that versioning is embedded in the library, rather than implied by links (patch by Tim Mooney). 980418 + modify etip.h to avoid conflict with math.h on HP-UX 9.03 with gcc 2.8.1 which redefines 'exception' (reported by Ralf Hildebrandt ). + correct configure tests in CF_SHARED_OPTS which used $CC value to check for gcc, rather than autoconf's $GCC value. This did not work properly if the full pathname of the compiler were given (reported by Michael Yount ). + revise check for compiler options to force ANSI mode since repeating an option such as -Aa causes HP's compiler to fail on its own headers (reported by Clint Olsen ). 980411 + ifdef'd has_key() and mcprint() as extended functions. + modified several prototypes to correspond with 1997 version of X/Open Curses (affects ABI since developers have used attr_get). + remove spurious trailing blanks in glibc addon-scripts (patch by H.J.Lu). + insert a few braces at locations where gcc-2.8.x asks to use them to avoid ambigous else's, use -fpic rather than -fPIC for Linux (patch by Juergen Pfeifer). 980404 + split SHLIB_LIST into SHLIB_DIRS/SHLIB_LIST to keep -L options before -l to accommodate Solaris' linker (reported by Larry Virden). 980328 + modify lib_color.c to eliminate dependency on orig_colors and orig_pair, since SVr4 curses does not require these either, but uses them when they are available. + add detailed usage-message to infocmp. + correct a typo in att6386 entry (a "%?" which was "?"). + add -f option to infocmp and tic, which formats the terminfo if/then/else/endif so that they are readable (with newlines and tabs). + fixes for glibc addon scripts (patch by H.J.Lu). 980321 + revise configure macro CF_SPEED_TYPE so that termcap.h has speed_t declared (from Adam J Richter ) + remove spurious curs_set() call from leaveok() (J T Conklin). + corrected handling leaveok() in doupdate() (patch by Alexander V. Lukyanov). + improved version of wredrawln (patch by Alexander V. Lukyanov). + correct c++/Makefile.in so install target do not have embedded ../lib to confuse it (patch by Thomas Graf ). + add warning to preinstall rule which checks if the installer would overwrite a curses.h or termcap.h that is not derived from ncurses. (The recommended configuration for developers who need both is to use --disable-overwrite). + modify preinstall rule in top-level Makefile to avoid implicit use of 'sh', to accommodate Ultrix 4.4 (reported by Joao Palhoto Matos , patch by Thomas Esser ) + refine ifdef's for TRACE so that libncurses has fewer dependencies on libtinfo when TRACE is disabled. + modify configure script so that if the --with-termlib option is used to generate a separate terminfo library, we chain it to the ncurses library with a "-l" option (reported by Darryl Miles and Ian T. Zimmerman). 980314 + correct limits and window in wredrawln function (reported/analysis by Alexander V. Lukyanov). + correct sed expression in configure script for --with-fallback option (patch by Jesse Thilo). + correct some places in configure script where $enableval was used rather than $withval (patch by Darryl Miles ). + modify some man-pages so no '.' or '..' falls between TH and SH macros, to accommodate man_db program (reported by Ian T. Zimmerman ). + terminfo.src 10.2.1 downloaded from ESR's webpage (ESR). > several changes by Juergen Pfeifer: + add copyright notices (and rcs id's) on remaining man-pages. + corrected prototypes for slk_* functions, using chtype rather than attr_t. + implemented the wcolor_set() and slk_color() functions + the slk_attr_{set,off,on} functions need an additional void* parameter according to XSI. + fix the C++ and Ada95 binding as well as the man pages to reflect above enhancements. 980307 + use 'stat()' rather than 'access()' in toe.c to check for the existence of $HOME/.terminfo, since it may be a file. + suppress configure CF_CXX_LIBRARY check if we are not using g++ 2.7.x, since this is not needed with g++ 2.8 or egcs (patch by Juergen Pfeifer). + turn on hashmap scrolling code by default, intend to remedy defects by 4.3 release. + minor corrections to terminfo.src changelog. 980302 4.2 release for upload to prep.ai.mit.edu + correct Florian's email address in ncurses-intro.html + terminfo.src 10.2.0 (ESR). 980228 pre-release + add linux-koi8r replace linux-koi8, which is not KOI8 (patch by QingLong ). + minor documentation fixes (patch by Juergen Pfeifer). + add setlocale() call to ncurses.c (reported by Claes G. Lindblad ). + correct sign-extension in lib_insstr.c (reported by Sotiris Vassilopoulos ) 980221 pre-release + regenerated some documentation overlooked in 980214 patch (ncurses-intro.doc, curs_outopts.3x.html) + minor ifdef change to C++ binding to work with gcc 2.8.0 (patch by Juergen Pfeifer). + change maintainer's mailing address to florian@gnu.org, change tentative mailing list address to bug-ncurses-request@gnu.org (patch by Florian La Roche). + add definition of $(REL_VERSION) to c++/Makefile.in (reported by Gran Hasse ). + restore version numbers to Ada95 binding, accidentally deleted by copyright patch (patch by Juergen Pfeifer). 980214 pre-release + remove ncurses.lsm from MANIFEST so that it won't be used in FSF distributions, though it is retained in development. + correct scaling of milliseconds to nanoseconds in lib_napms.c (patch by Jeremy Buhler). + update mailing-list information (bug-ncurses@gnu.org). + update announcement for upcoming 4.2 release. + modify -lm test to check for 'sin()' rather than 'floor()' + remove spurious commas from terminfo.src descriptions. + change copyright notices to Free Software Foundation 980207 + minor fixes for autoconf macros CF_ERRNO, CF_HELP_MESSAGE and CF_SIZECHANGE + modify Makefile.glibc so that $(objpfx) is defined (H.J.Lu). + ifdef-out true-return from _nc_mouse_inline() which depends on merge of QNX patch (pending 4.2 release). > patch to split off seldom-used modules in ncurses (J T Conklin): This reduces size by up to 2.6kb. + move functionality of _nc_usleep into napms, add configuration case for nanosleep(). + moved wchgat() from lib_addch.c to lib_chgat.c + moved clearok(), immedok(), leaveok(), and scrollok() from lib_options.c to lib_clearok.c, lib_immedok.c, lib_leaveok.c and lib_scrollok.c. + moved napms() from lib_kernel.c to lib_napms.c + moved echo() and noecho() from lib_raw.c to lib_echo.c + moved nl() and nonl() from lib_raw.c to lib_nl.c 980131 + corrected conversion in tclock.c (cf: 971018). + updates to Makefile.glibc and associated Linux configure script (patch by H.J.Lu). + workaround a quoting problem on SunOS with tar-copy.sh + correct init_pair() calls in worm.c to work when use_default_colors() is not available. + include in CF_SYS_TIME_SELECT to work with FreeBSD 2.1.5 + add ncv capability to FreeBSD console (cons25w), making reverse work with color. + correct sense of configure-test for sys/time.h inclusion with sys/select.h + fixes for Ada95/ada_include/Makefile.in to work with --srcdir option. + remove unused/obsolete test-program rules from progs/Makefile.in (the rules in ncurses/Makefile.in work). + remove shared-library loader flags from test/Makefile.in, etc. + simplify test/configure.in using new version of autoconf to create test/ncurses_cfg.h + suppress suffix rules in test/Makefile.in, provide explicit dependency to work with --srcdir option and less capable 'make' programs. > adapted from patch for QNX by Xiaodan Tang: + initialize %P and %g variables set/used in tparm, and also ensure that empty strings don't return a null result from tparam_internal + add QNX-specific prototype for vsscanf() + move initialization of SP->_keytry from init_keytry() to newterm() to avoid resetting it via a keyok() call by mouse_activate(). + reorganized some functions in lib_mouse() to use case-statements. + remove sgr string from qnx terminfo entry since it is reported to turn off attributes inconsistently. 980124 + add f/F/b/B commands to ncurses 'b' test to toggle colors, providing test for no_color_video. + adjusted emx.src to use no_color_video, now works with ncurses 'b' and 'k' tests. + implement no_color_video attribute, and as a special case, reverse colors when the reverse attribute cannot be combined with color. + check for empty string in $TERM variable (reported by Brett Michaels ). > from reports by Fred Fish: + add configure-test for isascii + add configure-test for -lm library. + modify CF_BOOL_SIZE to check if C++ bool types are unsigned. > patches by J.J.G.Ripoll + add configure/makefile variables to support .exe extension on OS/2 EMX (requires additional autoconf patches). + explicitly initialize variables in lib_data.c to appease OS/2 linker > patches by Fred Fish + misc/Makefile.in (install.data): Avoid trying to install the CVS directory. + aclocal.m4 (install.includes): Remove files in the include directory where we are going to install new ones, not the original source files. + misc/terminfo.src: Add entry for "beterm", derived from termcap distributed with BeOS PR2 using captoinfo. + aclocal.m4: Wrap $cf_cv_type_of_bool with quotes (contains space) + aclocal.m4: Assume bool types are unsigned. + progs/infocmp.c: workaround mwcc 32k function data limit 980117 + correct initialization of color-pair (cf: 970524) in xmas.c, which was using only one color-pair for all colors (reported by J.J.G.Ripoll). + add multithread options for objects build on EMX, for compatibility with XFree86. + split up an expression in MKlib_gen.sh to work around a problem on OS/2 EMX, with 'ash' (patch by J.J.G.Ripoll). + change terminfo entries xterm (xterm-xf86-v40), xterm-8bit rs1 to use hard reset. + rename terminfo entry xterm-xf86-v39t to xterm-xf86-v40 + remove bold/underline from sun console entries since they're not implemented. + correct _tracef calls in _tracedump(), which did not separate format from parameters. + correct getopt string for tic "-o" option, and add it to man-page synopsis (reported by Darren Hiebert ). + correct typo in panel/Makefile.in, reversed if-statement in scrolling optimization (Alexander V. Lukyanov). + test for 'remove()', use 'unlink() if not found (patch by Philippe De Muyter ). > patches by Juergen Pfeifer: + Improve a feature of the forms driver. For invisible fields (O_VISIBLE off) only the contents but not the attributes are cleared. We now clear both. (Reported by Javier Kohan ) + The man page form_field_opts.3x makes now clear, that invisible fields are also always inactive. + adjust ifdef's to compile the C++ binding with the just released gcc-2.8.0 c++ and the corresponding new C++ libraries. 980110 + correct "?" command in ncurses.c; it was performing non-screen writes while the program was in screen mode. (It "worked" in 1.9.9e because that version sets OPOST and OCRNL incorrectly). + return error from functions in lib_kernel, lib_raw and lib_ti if cur_term is null, or if underlying I/O fails. + amend change to tputs() so that it does not return an error if cur_term is null, since some applications depend on being able to use tputs without initializing the terminal (reported by Christian J. Robinson ). 980103 + add a copy of emx.src from J.J.G.Ripoll's OS/2 EMX version of ncurses 1.9.9e, together with fixes/additions for the "ansi" terminal type. + add tic check for save/restore cursor if change_scroll_region is defined (reference: O'Reilly book). + modify read_termcap.c to handle EMX-style pathnames (reported by J.J.G.Ripoll). + modify lib_raw.c to use EMX's setmode (patch from J.J.G.Ripoll). Ripoll says EMX's curses does this. + modify _nc_tic_expand() to generate \0 rather than \200. + move/revise 'expand()' from dump_entry.c to ncurses library as _nc_tic_expand(), for use by tack. + decode \a as \007 for terminfo, as per XSI. + correct translation of terminfo "^@", to \200, like \0. + modify next_char() to treat the same as , for cross-platform compatibility. + use new version of autoconf (971230) to work around limited environment on CLIX, due to the way autoconf builds --help message. > patch by Juergen Pfeifer: + check that the Ada95 binding runs against the correct version of ncurses. + insert constants about the library version into the main spec-file of the Ada95 binding. 971227 + modify open/fopen calls to use binary mode, needed for EMX. + modify configure script to work with autoconf 2.10 mods for OS/2 EMX (from J.J.G.Ripoll). + generated ncurses_cfg.h with patch (971222) to autoconf 2.12 which bypasses limited sed buffer length. > several changes from Juan Jose Garcia Ripoll (J.J.G.Ripoll) to support OS/2 EMX: + add a _scrolling flag to SP, to set when we encounter a terminal that simply cannot scroll. + corrected logic in _nc_add_to_try(), by ensuring that strings with embedded \200 characters are matched. + don't assume the host has 'link()' function, for linking terminfo entries. 971220 + if there's no ioctl's to support sigwinch handler, disable it. + add configure option --disable-ext-funcs to remove the extended functions from the build. + add configure option --with-termlib to generate the terminfo functions as a separate library. + add 'sources' rule to facilitate cross-compiling. + review/fix order of mostlyclean/clean/distclean rules. + modify install-rule for headers to first remove old header, in case there was a symbolic link that confuses the install script. + corrected substitution for NCURSES_CONST in term.h (cf: 971108) + add null pointer checks in wnoutrefresh(), overlap() (patch by Xiaodan Tang ) + correct tputs(), which could dereference a null cur_term if invoked before terminal is initialized (patch by Christopher Seawood ) > patch by Juergen Pfeifer: + makes better use of "pragma Inline" in the Ada95 binding + resynchronizes the generated html manpages 971213 + additional fixes for man-pages section-references + add (for debugging) a check for ich/ich1 conflict with smir/rmir to tic, etc. + remove hpa/vpa from rxvt terminal description because they are not implemented correctly, added sgr0. + change ncurses 's' to use raw mode, so ^Q works (reported by Rudolf Leitgeb ) 971206 + modify protection when installing libraries to (normally) not executable. HP-UX shared libraries are an exception. + add configure check for 'tack'. + implement script for renaming section-references in man-page install, for Debian configuration. + add validity-check for SP in trace code in baudrate() (reported by Daniel Weaver). > patch by Alexander V. Lukyanov (fixes to match sol25 curses) + modify 'overlay()' so that copy applies target window background to characters. + correct 'mvwin()' so that it does not clear the previous locations. + correct lib_acs.c so that 8-bit character is not sign expanded in case of wide characters in chtype. + correct control-char test in lib_addch.c for use with wide chars + use attribute in the chtype when adding a control character in lib_addch.c control char was added with current attribute 971129 + save/restore errno in _tracef() function + change treatment of initialize_color to use a range of 0..1000 (recommended by Daniel Weaver). + set umask in mkinstalldirs, fixing problems reported by users who have set root's umask to 077. + correct bug in tic that caused capabilities to be reprinted at the end of output when they had embedded comments. + rewrote wredrawln to correspond to XSI, and split-out since it is not often used (from report by Alexander V. Lukyanov, 970825) + rewrote Dan Nelson's change to make it portable, as well as to correct logic for handling backslashes. + add code to _nc_tgetent() to make it work more like a real tgetent(). It removes all empty fields, and removes all but the first in a group of duplicate caps. The code was pulled from the BSD libtermcap code in termcap.c (patch by Dan Nelson + don't include --enable-widec in the --with-develop configure option, since it is not binary-compatible with 4.1 (noted by Alexander V. Lukyanov) > patch by Juergen Pfeifer: + further improvements of the usage of elaboration pragmas in the Ada95 binding + enhanced Ada95 sample to use the user_data mechanism for panels. + a fix for the configuration script to make gnat-3.10 the required version. + resync of the html version of the manpages 971122 > fixes/updates for terminfo.src: + add vt220-js, pilot, rbcomm, datapoint entries from esr's 27-jun-97 version. + add hds200 description (Walter Skorski) + add EMX 0.9b descriptions + correct rmso/smso capabilities in wy30-mc and wy50-mc (Daniel Weaver) + rename xhpterm back to hpterm. > patch by Juergen Pfeifer: + Improves the usage of elaboration pragmas for the Ada95 binding. + Adds a translation of the test/rain.c into Ada95 to the samples. This has been contributed to the project by Laurent Pautet (pautet@gnat.com) 971115 + increase MAX_NAME_SIZE to 512 to handle extremely long alias list in HP-UX terminfo. + correction & simplification of delay computation in tputs, based on comments from Daniel Weaver. + replace test for SCO with more precise header tests. + add configure test for unsigned literals, use in NCURSES_BITS macro. + comment-out the -PIC, etc., flags from c++, progs and test makefiles since they probably are not needed, and are less efficient (noted by Juergen Fluk) + add -L$(libdir) to loader options, after -L../lib so that loaders that record this information will tend to do the right thing if the programs are moved around after installing them (suggested by Juergen Fluk). + add -R option to loader options for programs for Solaris if the --enable-rpath option is specified for the libraries. 971112 + correct installed filename for shared libraries on *BSD (reported by Juergen Fluk). 971108 + cleanup logic for deciding when tputs() should call delay_output(), based on comments from Daniel Weaver. + modified tputs() to avoid use of float. + correct use of trailpad in tputs(), which used the wrong variable in call to delay_output(). + correct inverted expression for null-count in delay_output() (analysis by Daniel Weaver). + apply --enable-rpath option to Solaris (requested by Larry Virden). + correct substitution of EXTRA_CFLAGS for gcc 2.6.3 + correct check for error-return by _nc_tgetent(), which returns 0 for success. + add configure test for BSD 4.4 cgetent() function, modify read_termcap.c to use the host's version of that if found, using the terminal database on FreeBSD (reported by Peter Wemm). + add u8, u9 strings to sun-il description for Daniel Weaver. + use NCURSES_CONST in panel's user-pointer. + modify edit_cfg.sh and MKterm.h.awk.in to substitute NCURSES_CONST so that will work on NeXT. + use _nc_set_screen() rather than assignments to SP to fix port to NeXT (reported by Francisco A. Tomei Torres). 971101 + force mandatory padding in bell and flash_screen, as specified in XSI. + don't allow padding_baud_rate to override mandatory delays (reported by Daniel Weaver). + modify delay_output() to use _nc_timed_wait() if no baudrate has been defined, or if the cur_term pointer is not initialized. XSI treats this as unspecified. (requested by Daniel Weaver). + change getcap-cache ifdef's to eliminate unnecessary chdir/mkdir when that feature is not configured. + remove _nc_err_abort() calls when write_entry.c finds a directory but cannot write to it, e.g., when translating part/all of /etc/termcap (reported by Andreas Jaeger ). (this dates back to 951102 in 1.9.7a). + minor ifdef fixes to compile with atac and glibc 2.0.5c + add check for -lgen when configuring regexpr.h + modify Solaris shared-library option "-d y" to "-dy" to workaround incompatibility of gcc 2.7.2 vs vendor's tools. 971026 + correct ifdef's for struct winsize vs struct ttysize in lib_setup.c to compile on SCO. + remove dangling backslash in panel/Makefile.in + modify MKkeyname.awk to work with SCO's nawk, which dumps core in the length() function. + correct length of allocation in _nc_add_to_try(), to allow for trailing null. + correct logic in _nc_remove_key(), which was discarding too many nodes (patch by Alexander V. Lukyanov) 971025 + add definition for $(REL_VERSION) to test/Makefile.in, so *BSD shared libraries link properly (see 970524). + modify Linux shared-library generation to include library dependencies (e.g., -lncurses and -lgpm) in the forms, menu and panel libraries (suggested by Juergen Pfeifer). + modify configure script to use config.guess and config.sub rather than uname, which is unreliable on some systems. + updated Makefile.glibc, test-built with glibc 2.0.5c + modify keyname() to return values consistent with SVr4 curses (patch by Juergen Fluk). > changes requested by Daniel Weaver: + modify delay_output() so that it uses the same output function as tputs() if called from that function. + move _baudrate from SCREEN to TERMINAL so that low-level use of tputs works when SP is not set. > patch by Juergen Pfeifer: + factor lib_menu and lib_form into smaller modules + clean up the interface between panel and SCREEN + minor changes to the Ada95 mouse support implemenation + minor bugfix in C++ binding to ripoff windows + fix a few Ada95 html documentation pages 971018 + split-out lib_ungetch.c, make runtime link to resizeterm() to decouple those modules from lib_restart.c + add xterm-xf86-v39t description to terminfo.src + reset SP->_endwin in lib_tstp.c cleanup() function after calling endwin() to avoid unnecessary repainting if the application has established an atexit function, etc. Encountered this problem in the c++ demo, whose destructors repaint the screen. + combine _nc_get_screensize() and resizeterm() calls as new function _nc_update_screensize(). + minor fixes to allow compile with g++ (suggested by Nelson H. F. Beebe). + implement install-rules for Ada95 makefiles. + use screen_lines or MAXLINES as needed where LINES was coded, as well as screen_columns for COLS, in the ncurses library. > patch by Alexander V. Lukyanov: + modify logic for ripped-off lines to handle several SCREENs. > patch by Juergen Pfeifer: + factors lib_slk.c into some smaller modules + factors panel.c into some smaller modules + puts the static information about the current panel stack into the SCREEN structure to allow different panel stacks on different screens. + preliminary fix for an error adjusting LINES to account for ripped-off lines. 971011 + move _nc_max_click_interval and other mouse interface items to SCREEN struct so that they are associated with a single terminal, and also save memory when the application does not need a mouse (roughly 3k vs 0.5k on Linux). + modify mouseinterval() so that a negative parameter queries the click-interval without modifying it. + modify ncurses 'i' test to work with ncurses' apparent extension from SVr4, i.e., allows nocbreak+noecho (analysis by Alexander V. Lukyanov). + add configure options --with-ada-includes and --with-ada-objects, to drive Ada95 binding install (not yet implemented). + install C++ binding as -lncurses++ and associated headers with the other ncurses headers. + fix header uninstall if configure --srcdir is used. > minor interface changes to support 'tack' program -TD (request by Daniel Weaver ). + export functions _nc_trans_string() and _nc_msec_cost(). + add variable _nc_nulls_sent, to record the number of padding characters output in delay_output(). + move tests for generic_type and hard_copy terminals in setupterm() to the end of that function so that the library will still be initialized, though not generally useful for curses programs. > patches by Alexander V. Lukyanov: + modify ClrBottom() to avoid using clr_eos if there is only one line to erase. + typo in configure --help. > patch by J T Conklin (with minor resync against Juergen's changes) + split-out lib_flash.c from lib_beep.c + split-out lib_hline.c and lib_vline.c from lib_box.c + split-out lib_wattron.c, lib_wattroff.c from lib_addch.c 971005 > patch by Juergen Pfeifer: + correct source/target of c++/edit_cfg.sh 971004 + add color, mouse support to kterm terminfo entry. + modify lib_mouse.c to recognize rxvt, kterm, color_xterm also as providing "xterm"-style mouse. + updated rxvt's terminfo description to correspond to 2.21b, with fixes for the acsc (the box1 capability is incorrect, ech1 does not work). + fix logic in parse_entry.c that discarded acsc when 'synthesizing' an entry from equivalents in XENIX or AIX. This lets ncurses handle the distribution copy of rxvt's terminfo. + modify acsc capability for linux and linux-koi8 terminfo descriptions (from Pavel Roskin ). + corrected definition in curses.h for ACS_LANTERN, which was 'I' rather than 'i' (see 970802). + updated terminfo.src with reformatted acsc entries, and repaired the trashed entries with spurious '\' characters that this exposed. + add logic to dump_entry.c to reformat acsc entries into canonical form (sorted, unique mapping). + add configure script to generate c++/etip.h + add configure --with-develop option, to enable by default most of the experimental options (requested by Alexander V. Lukyanov). + rename 'deinstall' to 'uninstall', following GNU convention (suggested by Alexander V. Lukyanov). > patches by Alexander V. Lukyanov: + modify tactics 2 and 5 in onscreen_mvcur(), to allow them on the last line of the screen, since carriage return will not cause a newline. + remove clause from PutCharLR() that would try to use eat_newline_glitch since that apparently does not work on some terminals (e.g., M$ telnet). + correct a limit check in scroll_csr_backward() > patches by Juergen Pfeifer: + adds dummy implementations of methods above() and below() to the NCursesPanel class. + fixes missing returncode in NCursesWindow::ripoffline() + fixes missing returncode in TestApplication::run() in demo.cc + We should at least give a comment in etip.h why it is currently a problem to install the C++ binding somewhere + makes the WINDOW* argument of wenclose() a const. + modifies several of the routines in lib_adabind.c to use a const WINDOW* argument. 970927 + add 'deinstall' rules. + use explicit assignments in configure --without-progs option to work around autoconf bug which doesn't always set $withval. + check for ldconfig, don't try to run it if not found. + implement simple/unoptimized case in lib_doupdate.c to handle display with magic cookie glitch, tested with ncurses.c program. + correct missing _tracef in getmouse(), to balance the returnCode macro. + simplify show_attr() in ncurses.c using termattrs(). > patches by Juergen Pfeifer: + provides missing inlines for mvw[hv]line in cursesw.h of the C++ binding + fixes a typo in a comment of frm_driver.c + Enhances Ada95 Makefiles to fulfill the requirement of GNAT-3.10 that generics should be compiled. Proper fixes to the configuration scripts are also provided. 970920 + several modifications to the configure script (requested by Ward Horner): + add configure options --without-progs, to suppress the build of the utility programs, e.g., for cross-compiling. + add $(HOSTCCFLAGS) and $(HOSTLDFLAGS) symbols to ncurses Makefile.in, to simplify setup for cross compiling. + add logic in configure script to recognize "--target=vxworks", and generate load/install actions for VxWorks objects. + move typedef for sigaction_t into SigAction.h to work around problem generating lint library. + modify fty_regex.c to reflect renaming of ifdef's for regular expressions. + simplify ifdef in lib_setup.c for TIOCGWINSZ since that symbol may reside in . + merge testcurs.c with version from PDCurses 2.3, clarifying some of the more obscure tests, which rely upon color. + use macros getbegyx() and getmaxyx() in newdemo.c and testcurs.c + modify ncurses.c to use getbegyx() and getmaxyx() macros to cover up implementation difference wrt SVr4 curses, allow 's' test to work. + add missing endwin() to testscanw.c program (reported by Fausto Saporito ). + fixes/updates for Makefile.glibc and related files under sysdeps (patch by H.J.Lu). > patches by Juergen Pfeifer: + add checks for null pointers, especially WINDOW's throughout the ncurses library. + solve a problem with wrong calculation of panel overlapping (reported by Ward Horner): + make sure that a panel's window isn't a pad. + do more error checking in module lib_touch.c + missing files for Ada95 binding from the last patch + synch. of generated html pages (RCS-Id's were wrong in html files) + support for Key_Resize in Ada binding + changed documentation style in ./c++/cursesm.h > patches by Alexander V. Lukyanov: + undo attempt to do recursive inlining for PutChar(), noting that it did not improve timing measurably, but inflated the size of lib_doupdate.o 970913 + modify rain.c to use color. + correct scroll_csr_backward() to match scroll_csr_forward(). + minor adjustment to llib-lncurses, to work with Solaris 2.5.1 + minor fixes to sysdeps/unix/sysv/linux/configure to reflect renaming of configure cache variables in 970906. + correct logic involving changes to O_VISIBLE option in Synchronize_Options function in frm_driver.c (Tony Hoffmann ) + add $(HOSTCC) symbol to ncurses Makefile.in, to simplify setup for cross compiling (suggested by Chris Johns). + modify ifdef in lib_setup.c to only include if we can use it to support screen-size calculation (reported by Chris Johns). + #undef unctrl to avoid symbol conflict in port to RTEMS (reported by Chris Johns ) > patches by Juergen Pfeifer: + simplified, made minor corrections to Ada95 binding to form fieldtype. + The C++ binding has been enhanced: + Improve NCursesWindow class: added additional methods to cover more ncurses functionality. Make refresh() and noutrefresh() virtual members to allow different implementation in the NCursesPanel class. + CAUTION: changed order of parameters in vline() and hline() of NCursesWindow class. + Make refresh() in NCursesPanel non-static, it is now a reimplementation of refresh() in the base class. Added noutrefresh() to NCursesPanel. + Added NCursesForm and related classes to support libform functionality. + Moved most of configuration related stuff from cursesw.h to etip.h + Added NCursesApplication class to support easy configuration of menu and forms related attributes as well as ripped of title lines and Soft-Label-Keys for an application. + Support of Auto-Cleanup for a menu's fieldlist. + Change of return type for current_item() and operator[] for menus. + Enhanced demo. + Fixed a bug in form/fld_def.c: take into account that copyarg and freearg for a fieldtype may be NULL, makearg must not be NULL + Fixed a bug in form/fld_type.c: in set_fieldtype_arg() makearg must not be NULL, copyarg and freearg may be NULL. + Fixed a bug in form/frm_def.c: Allow Disconnect_Fields() if it is already disconnected. + Enhance form/frm_driver.c: Allow growth of dynamic fields also on navigation requests. + Fixed a bug in form/fty_enum.c: wrong position of postincrement in case-insensitiva comparision routine. + Enhanced form/lib_adabind.c with function _nc_get_field() to get a forms field by index. + Enhanced menu/m_adabind.c with function _nc_get_item() to get a menus item by index. + Fixed in curses.h.in: make chtype argument for pechochar() constant. Mark wbkgdset() as implemented, remove wbkgdset macro, because it was broken (didn't handle colors correctly). + Enhanced lib_mouse.c: added _nc_has_mouse() function + Added _nc_has_mouse() prototype to curses.priv.h + Modified lib_bkgd.c: hopefully correct implementation of wbkgdset(); streamlined implementation of wbkgd() + Modified lib_mvwin.c: Disable move of a pad. Implement (costly) move of subwindows. Fixed update behavior of movements of regular windows. + Fixed lib_pad.c: make chtype argument of pechochar() const. + Fixed lib_window.c: dupwin() is not(!) in every bit a really clone of the original. Subwindows become regular windows by doing a dupwin(). + Improved manpage form_fieldtype.3x > patches by Alexander V. Lukyanov: + simplify the PutChar() handling of exit_am_mode, because we already know that auto_right_margin is true. + add a check in PutChar() for ability to insert to the case of shifting character to LR corner. + in terminal initialization by _nc_screen_resume(), make sure that terminal right margin mode is known. + move logic that invokes touchline(), or does the equivalent, into _nc_scroll_window(). + modify scrolling logic use of insert/delete line capability, assuming that they affect the screen contents only within the current scrolling region. + modify rain.c to demonstrate SIGWINCH handler. + remove logic from getch() that would return an ERR if the application called getch() when the cursor was at the lower-right corner of the physical screen, and the terminal does not have insert-character ability. + change view.c so that it breaks out of getch() loop if a KEY_RESIZE is read, and modify logic in getch() so this fix will yield the desired behavior, i.e., the screen is repainted automatically when the terminal window is resized. 970906 + add configure option --enable-sigwinch + modify view.c to test KEY_RESIZE logic, with "-r" option. + modify testcurs.c to eliminate misleading display wrt cursor type by testing if the terminal supports cnorm, civis, cvvis. + several fixes for m68k/NeXT 4.0, to bring cur_term, _nc_curr_line and _nc_curr_col variables into linked programs: move these variables, making new modules lib_cur_term and trace_buf (reported by Francisco Alberto Tomei Torres ). > patches by Alexander V. Lukyanov: + add pseudo-functionkey KEY_RESIZE which is returned by getch() when the SIGWINCH handler has been called since the last call to doupdate(). + modify lib_twait.c to hide EINTR only if HIDE_EINTR is defined. + add SIGWINCH handler to ncurses library which is used if there is no application SIGWINCH handler in effect when the screen is initialized. + make linked list of all SCREEN structures. + move curses.h include before definition of SCREEN to use types in that structure. + correction to ensure that wgetstr uses only a newline to force a scroll (970831). 970831 + add experimental configure option --enable-safe-sprintf; the normal mode now allocates a buffer as large as the screen for the lib_printw.c functions. + modify wgetch to refresh screen when reading ungetch'd characters, since the application may require this - SVr4 does this. + refine treatment of newline in wgetstr to echo only when this would force the screen to scroll. 970830 + remove override in wgetstr() that forces keypad(), since SVr4 does not do this. + correct y-reference for erasure in wgetstr() when a wrap forces a scroll. + correct x-position in waddch() after a wrap forces a scroll. + echo newline in wgetstr(), making testscanw.c scroll properly when scanw is done. + modify vwscanw() to avoid potential buffer overflow. + rewrote lib_printw.c to eliminate fixed-buffer limits. > patches by Alexander V. Lukyanov: + correct an error in handling cooked mode in wgetch(); processing was in the wrong order. + simplified logic in wgetch() that handles backspace, etc., by using wechochar(). + correct wechochar() so that it interprets the output character as in waddch(). + modify pechochar() to use prefresh() rather than doupdate(), since the latter does not guarantee immediate refresh of the pad. + modify pechochar() so that if called with a non-pad WINDOW, will invoke wechochar() instead. + modify fifo indices to allow fifo to be longer than 127 bytes. 970823 + add xterm-8bit to terminfo.src + moved logic for SP->_fifohold inside check_pending() to make it work properly when we add calls to that function. + ensure that bool functions return only TRUE or FALSE, and TRUE/FALSE are assigned to bool values (patch by H.J.Lu). > patches by Alexander V. Lukyanov: + several fixes to getch: 1. Separate cooked and raw keys in fifo 2. Fix the case of ungetch'ed KEY_MOUSE 3. wrap the code for hiding EINTR with ifdef HIDE_EINTR 4. correctly handle input errors (i.e., EINTR) without loss of raw keys 5. recognize ESC KEY_LEFT and similar 6. correctly handle the case of receiption of KEY_MOUSE from gpm + correct off-by-one indexing error in _nc_mouse_parse(), that caused single mouse events (press/release) to be ignored in favor of composed events (click). Improves on a fix from integrating gpm support in 961229. + add another call to check_pending, before scrolling, for line-breakout optimization + improve hashmap.c by 1. fixed loop condition in grow_hunks() 2. not marking lines with offset 0 3. fixed condition of 'too far' criteria, thus one-line hunks are ignored and two lines interchanged won't pass. + rewrote/simplified _nc_scroll_optimize() by separating into two passes, forward/backward, looking for chunks moving only in the given direction. + move logic that emits sgr0 when initializing the screen to _nc_screen_init(), now invoked from newterm. + move cursor-movement cleanup from endwin() into _nc_mvcur_wrap() function and screen cleanup (i.e., color) into _nc_screen_wrap() function. + add new functions _nc_screen_init(), _nc_screen_resume() and _nc_screen_wrap(). + rename _nc_mvcur_scrolln() to _nc_scrolln(). + add a copy of acs_map[] to the SCREEN structure, where it can be stored/retrieved via set_term(). + move variables _nc_idcok, _nc_idlok, _nc_windows into the SCREEN structure. 970816 + implement experimental _nc_perform_scroll(). + modify newterm (actually _nc_setupscreen()) to emit an sgr0 when initializing the screen, as does SVr4 (reported by Alexander V. Lukyanov). + added test_progs rule to ncurses/Makefile. + modify test/configure.in to check if initscr is already in $LIBS before looking for (n)curses library. + correct version-number in configure script for OSF1 shared-library options (patch by Tim Mooney). + add -DNDEBUG to CPPFLAGS for --enable-assertions (as Juergen originally patched) since the c++ demo files do not necessarily include ncurses_cfg.h + supply default value for --enable-assertions option in configure script (reported by Kriang Lerdsuwanakij ). > patches by Alexander V. Lukyanov: + correct/simplify logic of werase(), wclrtoeol() and wclrbot(). See example firstlast.c + optimize waddch_literal() and waddch_nosync() by factoring out common subexpressions. + correct sense of NDEBUG ifdef for CHECK_POSITION macro. + corrections to render_char(), to make handling of colored blanks match SVr4 curses, as well as to correct a bug that xor'd space against the background character. + replaced hash function with a faster one (timed it) + rewrote the hashmap algorithm to be one-pass, this avoids multiple cost_effective() calls on the same lines. + modified cost_effective() so it is now slightly more precise. > patches for glibc integration (H.J.Lu): + add modules define_key, keyok, name_match, tries + add makefile rules for some of the unit tests in ncurses (mvcur, captoinfo, hardscroll, hashmap). + update Linux configure-script for wide-character definitions. 970809 + modify _tracebits() to show the character size (e.g., CS8). + modify tparm() to emit '\200' where the generated string would have a null (reported by From: Ian Dall for terminal type ncr7900). + modify install process so that ldconfig is not invoked if the package is built with an install-prefix. + correct test program for chtype size (reported by Tim Mooney). + add configure option --disable-scroll-hints, using this to ifdef the logic that computes indices for _nc_scroll_optimize(). + add module ncurses/softscroll.c, to perform single-stage computation of scroll indices used in _nc_scroll_optimize(). This is faster than the existing scrolling algorithm, but tends to make too-small hunks. + eliminate fixed buffer size in _nc_linedump(). + minor fixes to lib_doupdate.c to add tradeoff between clr_eol (el) and clr_bol (el1), refine logic in ClrUpdate() and ClrBottom() (patch by Alexander V. Lukyanov). + add test/testaddch.c, from a pending patch by Alexander V. Lukyanov. + correct processing of "configure --enable-assertions" option (patch by Juergen Pfeifer). 970802 + add '-s' (single-step) option too test/hashtest.c, correct an error in loop limit for '-f' (footer option), toggle scrollok() when writing footer to avoid wrap at lower-right corner. + correct behavior of clrtoeol() immediately after wrapping cursor, which was not clearing the line at the cursor position (reported by Liviu Daia ). + corrected mapping for ACS_LANTERN, which was 'I' rather than 'i' (reported by Klaus Weide ). + many corrections to make progs/capconvert work, as well as make it reasonably portable and integrated with ncurses 4.1 (reported by Dave Furstenau ). 970726 + add flag SP->_fifohold, corresponding logic to modify the behavior of the line breakout logic so that if the application does not read input, refreshes will not be stopped, but only slowed. + generate slk_attr_off(), slk_attr_on(), slk_attr_set(), vid_attr(), ifdef'd for wide-character support, since ncurses' WA_xxx attribute masks are identical with the A_xxx masks. + modify MKlib_gen.sh to generate ifdef'd functions to support optional configuration of wide-characters. + modify tset to behave more like SVr4's tset, which does not modify the settings of intr, quit or erase unless they are given as command options (reported by Nelson H. F. Beebe ). + modify tset to look in /etc/ttys or /etc/ttytype if the configuration does not have getttynam(). + extend baudrate table in tset.c to match baudrate() function. + add table entries for B230400 and B460800 to baudrate() function. + improve breakout logic by allowing it before the first line updated, which is what SVr4 curses does (patch by Alexander V. Lukyanov). + correct initialization of vcost in relative_move(), for cursor-down case (patch by Alexander V. Lukyanov). > nits gleaned from Debian distribution of 1.9.9g-3: + install symbolic link for intotocap. + reference libc directly when making shared libraries. + correct renaming of curs_scr_dmp.3x in man_db.renames. + guard tgetflag() and other termcap functions against null cur_term pointer. 970719 + corrected initial state of software echo (error in 970405, reported by Alexander V. Lukyanov). + reviewed/added messages to configure script, so that all non-test options should be accompanied by a message. + add configure check for long filenames, using this to determine if it is safe to allow long aliases for terminal descriptions as does SVr4. + add configure options for widec (wide character), hashmap (both experimental). > patch by Alexander V. Lukyanov: + hashmap.c - improved by heuristic, so that scroll test works much better when csr is not available. + hardscroll.c - patched so that it continues to scroll other chunks after failure to scroll one. + lib_doupdate.c - _nc_mvcur_scrolln extended to handle more cases; csr is avoided as it is relative costly. Fixed wrong coordinates in one case and wrong string in TRACE. > patch by Juergen Pfeifer: + modify C++ binding to compile on AIX 4.x with the IBM C-SET++ compiler. 970712 + remove alternate character set from kterm terminfo entry; it uses the shift-out control for a purpose incompatible with curses, i.e., font switching. + disentangle 'xterm' terminfo entry from some derived entries that should be based on xterm-r6 instead. + add cbt to xterm-xf86-xv32 terminfo entry; I added the emulation for XFree86 3.1.2F, but overlooked its use in terminfo then - T.Dickey. + correct logic in lib_mvcur.c that uses back_tab. 970706 + correct change from 970628 to ClrUpdate() in lib_doupdate.c so that contents of curscr are saved in newscr before clearing the screen. This is needed to make repainting work with the present logic of TransformLine(). + use napms() rather than sleep() in tset.c to avoid interrupting I/O. 970705 + add limit checks to _nc_read_file_entry() to guard against overflow of buffer when reading incompatible terminfo format, e.g, from OSF/1. + correct some loop-variable errors in xmc support in lib_doupdate.c + modify ncurses 'b' test to add gaps, specified by user, to allow investigation of interaction with xmc (magic cookie) code. + correct typo in 970524 mods to xmas.c, had omitted empty parameter list from has_colors(), which gcc ignores, but SVr4 does not (reported by Larry Virden). + correct rmso capability in wy50-mc description. + add configure option "--enable-hard-tabs", renamed TABS_OK ifdef to USE_HARD_TABS. > patch by Juergen Pfeifer: + Add bindings for keyok() and define_key() to the Ada95 packages. + Improve man pages menu_post.3x and menu_format.3x + Fix the HTML pages in the Ada95/html directory to reflect the above changes. 970628 + modify change from 970101 to ClrUpdate() in lib_doupdate.c so that pending changes to both curscr and newscr are flushed properly. This fixes a case where the first scrolling operation in nvi would cause the screen to be cleared unnecessarily and repainted before doing the indexing, i.e., by repeatedly pressing 'j' (reported by Juergen Pfeifer). + correct error in trans_string() which added embedded newlines in a terminfo description to the stored strings. + remove spurious newlines from sgr in wyse50 (and several other) terminfo descriptions. + add configure option for experimental xmc (magic cookie) code, "--enable-xmc-glitch". When disabled (the default), attributes that would store a magic cookie are suppressed in vidputs(). The magic cookie code is far from workable at this stage; the configuration option is a stopgap. + move _nc_initscr() from lib_initscr.c to lib_newterm.c + correct path for invoking make_keys (a missing "./"). 970621 + correct sign-extension problem with "infocmp -e", which corrupted acsc values computed for linux fallback data. + correct dependency on ncurses/names.c (a missing "./"). + modify configure script to use '&&' even for cd'ing to existing directories to work around broken shell interpreters. + correct a loop-limit in _nc_hash_map() (patch by Alexander V. Lukyanov). 970615 + restore logic in _nc_scroll_optimize() which marks as touched the lines in curscr that are shifted. + add new utility 'make_keys' to compute keys.tries as a table rather than a series of function calls. + correct include-dependency for tic.h used by name_match + removed buffer-allocation for name and description from m_item_new.c, since this might result in incompatibilities with SVr4. Also fixed the corresponding Ada95 binding module (patch by Juergen Pfeifer, report by Avery Pennarun ) + removed the mechanism to timestamp the generated Ada95 sources. This resulted always in generating patches for the HTML doc, even when nothing really changed (patch by Juergen Pfeifer). + improve man page mitem_new.3x (patch by Juergen Pfeifer). 970614 + remove ech capability from rxvt description because it does not work. + add missing case logic for infocmp -I option (reported by Lorenzo M. Catucci ) + correct old bug in pnoutrefresh() unmasked by fix in 970531; this caused glitches in the ncurses 'p' test since the area outside the pad was not compared when setting up indices for _nc_scroll_optimize. + rewrote tracebits() to workaround misdefinition of TOSTOP on Ultrix 4.4, as well as to eliminate fixed-size buffer (reported by Chris Tanner ) + correct prototype for termattrs() as per XPG4 version 2. + add placeholder prototypes for color_set(), erasewchar(), term_attrs(), wcolor_set() as per XPG4 version 2. + correct attribution for progs/progs.priv.h and lib_twait.c + improve line-breakout logic by checking based on changed lines rather than total lines (patch by Alexander V. Lukyanov). + correct loop limits for table-lookup of enumerated value in form (patch by Juergen Pfeifer). + improve threshhold computation for determining when to call ClrToEOL (patch by Alexander V. Lukyanov). 970531 + add configure option --disable-database to force the library to use only the fallback data. + add configure option --with-fallbacks, to specify list of fallback terminal descriptions. + add a symbolic link for ncurses.h during install; too many programs still assume there's an ncurses.h + add new terminfo.src entry for xterm-xf86-v33. + restore terminfo.src entry for emu to using setf/setb, since it is not, after all, generating ANSI sequences. Corrected missing comma that caused setf/setb entries to merge. + modify mousemask() to use keyok() to enable/disable KEY_MOUSE, so that applications can disable ncurses' mouse and supply their own handler. + add extensions keyok() and define_key(). These are designed to allow the user's application better control over the use of function keys, e.g., disabling the ncurses KEY_MOUSE. (The define_key idea was from a mailing-list thread started by Kenneth Albanowski Nov'1995). + restore original behavior in ncurses 'g' test, i.e., explicitly set the keypad mode rather than use the default, since it confuses people. + rewrote the newdemo banner so it's readable (reported by Hugh Daniel). + tidy up exit from hashtest (reported by Hugh Daniel). + restore check for ^Q in ncurses 'g' test broken in 970510 (reported by Hugh Daniel) + correct tput program, checking return-value of setupterm (patch by Florian La Roche). + correct logic in pnoutrefresh() and pechochar() functions (reported by Kriang Lerdsuwanakij ). The computation of 'wide' date to eric's #283 (1.9.9), and the pechochar bug to the original implementation (1.9.6). + correct typo in vt102-w terminfo.src entry (patch by Robert Wuest ) + move calls of _nc_background() out of various loops, as its return value will be the same for the whole window being operated on (patch by J T Conklin). + add macros getcur[xy] getbeg[xy] getpar[xy], which are defined in SVr4 headers (patch by J T Conklin ) + modify glibc addon-configure scripts (patch by H.J.Lu). + correct a bug in hashmap.c: the size used for clearing the hashmap table was incorrect, causing stack corruption for large values of LINES, e.g., >MAXLINES/2 (patch by Alexander V. Lukyanov). + eric's terminfo 9.13.23 & 9.13.24 changes: replaced minitel-2 entry, added MGR, ansi-nt (note: the changes described for 9.13.24 have not been applied). > several changes by Juergen Pfeifer: + correct a missing error-return in form_driver.c when wrapping of a field is not possible. + correct logic in form_driver.c for configurations that do not have memccpy() (reported by Sidik Isani ) + change several c++ binding functions to inline. + modify c++ menu binding to inherit from panels, for proper initialization. + correct freeing of menu items in c++ binding. + modify c++ binding to reflect removal of const from user data pointer in forms/menus libraries. 970524 + add description of xterm-16color. + modify name of shared-library on *BSD to end with $(REL_VERSION) rather than $(ABI_VERSION) to match actual convention on FreeBSD (cf: 960713). + add OpenBSD to shared-library case, same as NetBSD and FreeBSD (reported by Hugh Daniel ). + corrected include-dependency in menu/Makefile so that "make install" works properly w/o first doing "make". + add fallback definition for isascii, used in infocmp. + modify xmas to use color, and to exit right away when a key is pressed. + modify gdc so that the scrolled digits function as described (there was no time delay between the stages, and the digits overwrote the bounding box without tidying up). + modify lib_color.c to use setaf/setab only for the ANSI color codes 0 through 7. Using 16 colors requires setf/setb. + modify ncurses 'c' test to work with 16 colors, as well as the normal 8 colors. + remove const qualifier from user data pointer in forms and menus libraries (patch by Juergen Pfeifer). + rewrote 'waddchnstr()' to avoid using the _nc_waddch_nosync() function, thereby not interpreting tabs, etc., as per spec (patch by Alexander V. Lukyanov). 970517 + suppress check for pre-existing ncurses header if the --prefix option is specified. + add configure options "--with-system-type" and "--with-system-release" to assist in checking the generated makefiles. + add configure option "--enable-rpath" to allow installers to specify that programs linked against shared libraries will have their library path embedded, allowing installs into nonstandard locations. + add flags to OSF1 shared-library options to specify version and symbol file (patch by Tim Mooney ) + add missing definition for ABI_VERSION to c++/Makefile.in (reported by Satoshi Adachi ). + modify link flags to accommodate HP-UX linker which embeds absolute pathnames in executables linked against shared libraries (reported by Jason Evans , solved by Alan Shutko ). + drop unnecessary check for attribute-change in onscreen_mvcur() since mvcur() is the only caller within the library, and that check in turn is exercised only from lib_doupdate.c (patch by Alexander V. Lukyanov). + add 'blank' parameter to _nc_scroll_window() so _nc_mvcur_scrolln() can use the background of stdscr as a parameter to that function (patch by Alexander V. Lukyanov). + moved _nc_mvcur_scrolln() from lib_mvcur.c to lib_doupdate.c, to use the latter's internal functions, as well as to eliminate unnecessary cursor save/restore operations (patch by Alexander V. Lukyanov). + omit parameter of ClrUpdate(), since it is called only for newscr, further optimized/reduced by using ClearScreen() and TransformLine() to get rid of duplicate code (patch by Alexander V. Lukyanov). + modify scrolling algorithm in _nc_scroll_optimize() to reject hunks that are smaller than the distance to be moved (patch by Alexander V. Lukyanov). + correct a place where the panel library was not ifdef'd in ncurses.c (Juergen Pfeifer) + documentation fixes (Juergen Pfeifer) 970515 4.1 release for upload to prep.ai.mit.edu + re-tag changes since 970505 as 4.1 release. 970510 + modify ncurses 'g' test to allow mouse input + modify default xterm description to include mouse. + modify configure script to add -Wwrite-strings if gcc warnings are enabled while configuring --enable-const (and fixed related warnings). + add toggle, status display for keypad mode to ncurses 'g' test to verify that keypad and scrollok are not inherited from parent window during a call to newwin. + correction to MKexpanded.sh to make it work when configure --srcdir is used (reported by H.J.Lu). + revise test for bool-type, ensuring that it checks if builtin.h is available before including it, adding test for sizeof(bool) equal to sizeof(short), and warning user if the size cannot be determined (reported by Alexander V. Lukyanov). + add files to support configuration of ncurses as an add-on library for GNU libc (patch by H.J.Lu ) 970506 + correct buffer overrun in lib_traceatr.c + modify change to lib_vidattr.c to avoid redundant orig_pair. + turn on 'echo()' in hanoi.c, since it is initially off. + rename local 'errno' variable in etip.h to avoid conflict with global (H.J.Lu). + modify configure script to cache LD, AR, AR_OPTS (patch by H.J.Lu ) 970505 4.1 pre-release + regenerate the misc directory html dumps without the link list, which is not useful. + correct dependency in form directory makefile which caused unnecessary recompiles. + correct substitution for ABI_VERSION in test-makefile + modify install rules for shared-library targets to remove the target before installing, since some install programs do not properly handle overwrite of symbolic links. + change order of top-level targets so that 'include' immediate precedes the 'ncurses' directory, reducing the time between new headers and new libraries (requested by Larry Virden). + modify lib_vidattr.c so that colors are turned off only before modifying other attributes, turned on after others. This makes the hanoi.c program display correctly on FreeBSD console. + modify debug code in panel library to print user-data addresses rather than the strings which they (may) point to. + add check to ensure that C++ binding and demo are not built with g++ versions below 2.7, since the binding uses templates. + modify c++ binding and demo to build and run with SGI's c++ compiler. (It also compiles with the Sun SparcWorks compiler, but the demo does not link, due to a vtbl problem). + corrections to demo.cc, to fix out-of-scope variables (Juergen Pfeifer). 970503 + correct memory leak in _nc_trace_buf(). + add configure test for regexpr.h, for Unixware 1.x. + correct missing "./" prefixing names of generated files in ncurses directory. + use single-quotes in configure scripts assignments for MK_SHARED_LIB to workaround shell bug on FreeBSD 2.1.5 + remove tabs from intermediate #define's for GCC_PRINTF, GCC_SCANF that caused incorrect result in ncurses_cfg.h + correct initialization in lib_trace.c, which omitted version info. + remove ech, el1 attributes from cons25w description; they appear to malfunction in FreeBSD 2.1.5 + correct color attributes in terminfo.src and lib_color.c to match SVr4 behavior by interchanging codes 1,4, 3,6 in the setf/setb capabilities. + use curs_set() rather than checks via tigetstr() for test programs that hide the cursor: firework, rain, worm. + ensure that if the terminal lacks change_scroll_region, parm_index and parm_rindex are used only to scroll the whole screen (patch by Peter Wemm). + correct curs_set() logic, which did not return ERR if the requested attributes did not exist, nor did it assume an unknown initial state for the cursor (patch by Alexander V. Lukyanov). + combine IDcTransformLine and NoIDcTransformLine to new TransformLine function in lib_doupdate.c (patch by Alexander V. Lukyanov). + correct hashmap.c, which did not update index information (patch by Alexander V. Lukyanov). + fixes for C++ binding and demo (see c++/NEWS) (Juergen Pfeifer). + correct index in lib_instr.c (Juergen Pfeifer). + correct typo in 970426 patch from Tom's cleanup of lib_overlay.c (patch by Juergen Pfeifer). 970426 + corrected cost computation in PutRange(), which was using milliseconds compared to characters by adding two new members to the SCREEN struct, _hpa_ch_cost and _cup_ch_cost. + drop ncurses/lib_unctrl.c, add ncurses/MKunctrl.awk to generate a const array of strings (suggested by Alexander V. Lukyanov). The original suggestion in 970118 used a perl script. + rewrote ncurses 'b' test to better exercise magic-cookie (xmc), as well as noting the attributes that are not supported by a terminal. + trace the computation of cost values in lib_mvcur.c + modify _nc_visbuf() to use octal rather than hex, corrected sign extension bug in that function that caused buffer overflow. + modify trace in lib_acs.c to use _nc_visbuf(). + suppress trace within _traceattr2(). + correct logic of _tracechtype2(), which did not account for repeats or redefinition within an acsc string. + modify debug-library version baudrate() to use environment variable $BAUDRATE to override speed computation. This is needed for regression testing. + correct problems shown by "weblint -pedantic". + update mailing-list information (now ncurses@bsdi.com). 970419 + Improve form_field_validation.3x manpage to better describe the precision parameter for TYPE_NUMERIC and TYPE_INTEGER. Provide more precise information how the range checking can be avoided. (patch by Juergen Pfeifer, reported by Bryan Henderson) + change type of min/max value of form types TYPE_INTEGER to long to match SVr4 documentation. + set the form window to stdscr in set_form_win() so that form_win() won't return null (patch by Juergen Pfeifer, reported by Bryan Henderson ). 970412 + corrected ifdef'ing of inline (cf: 970321) for TRACE vs C++. + corrected toggle_attr_off() macro (patch by Andries Brouwer). + modify treatment of empty token in $MANPATH to /usr/man (reported by ) + modify traces that record functions-called so that chtype and attr_t values are expressed symbolically, to simplify reuse of generated test-scripts on SVr4 regression testing. + add new trace functions _traceattr2() and _tracechtype2() 970405 + add configure option --enable-const, to support the use of 'const' where XSI should have, but did not, specify. This defines NCURSES_CONST, which is an empty token otherwise, for strict compatibility. + make processing of configure options more verbose by echoing the --enable/--with values. + add configure option --enable-big-core + set initial state of software echo off as per XSI. + check for C++ builtin.h header + correct computation of absolute-path for $INSTALL that dropped "-c" parameter from the expression. + rename config.h to ncurses_cfg.h to avoid naming-conflict when ncurses is integrated into larger systems (adapted from diffs by H.J.Lu for libc). + correct inequality in lib_doupdate.c that caused a single-char to not be updated when the char on the right-margin was not blank, idcok() was true (patch by Alexander V Lukyanov (in 970124), reported by Kriang Lerdsuwanakij in 970329). + modify 'clean' rule in include/Makefile so that files created by configure script are removed in 'distclean' rule instead. 970328 + correct array limit in tparam_internal(), add case to interpret "%x" (patch by Andreas Schwab) + rewrote number-parsing in ncurses.c 'd' test; it did not reset the value properly when non-numeric characters were given (reported by Andreas Schwab ) 970321 + move definition of __INTERNAL_CAPS_VISIBLE before include for progs.priv.h (patch by David MacKenzie). + add configuration summary, reordered check for default include directory to better accommodate a case where installer is configuring a second copy of ncurses (reported by Klaus Weide ) + moved the #define for 'inline' as an empty token from the $(CFLAGS_DEBUG) symbol into config.h, to avoid redefinition warning (reported by Ward Horner). + modify test for bool builtin type to use 'unsigned' rather than 'unknown' when cross-compiling (reported by Ward Horner). 970315 + add header dependencies so that "make install.libs" will succeed even if "make all" is not done first. + moved some macros from lib_doupdate.c to curses.priv.h to use in expanded functions with ATAC. + correct implementation of lib_instr.c; both XSI and SVr4 agree that the winnstr functions can return more characters than will fit on one line. 970308 + modify script that generates lib_gen.c to support traces of called & return. + add new configure option "--disable-macros", for testing calls within lib_gen.c + corrected logic that screens level-checking of called/return traces. 970301 + use new configure macro NC_SUBST to replace AC_PATH_PROG, better addressing request by Ward Horner. + check for cross-compiling before trying to invoke the autoconf AC_FUNC_SETVBUF_REVERSED macro (reported by Ward Horner) + correct/simplify loop in _nc_visbuf(), 970201 changes omitted a pointer-increment. + eliminate obsolete symbol SHARED_ABI from dist.mk (noted by Florian La Roche). 970215 + add configure option --enable-expanded, together with code that implements an expanded form of certain complex macros, for testing with ATAC. + disable CHECK_POSITION unless --with-assertions is configured (Alexander V Lukyanov pointed out that this is redundant). + use keyname() to show traced chtype values where applicable rather than _tracechar(), which truncates the value to 8-bits. + minor fixes to TRACE_ICALLS, added T_CREATE, TRACE_CCALLS macros. + modify makefiles in progs and test directories to avoid using C preprocessor options on link commands (reported by Ward Horner) + correct ifdef/include-order for nc_alloc.h vs lib_freeall.c (reported by Ward Horner) + modify ifdef's to use configure-defined symbols consistently (reported by Ward Horner) + add/use new makefile symbols AR, AR_OPTS and LD to assist in non-UNIX ports (reported by Ward Horner ) + rename struct try to struct tries, to avoid name conflict with C++ (reported by Gary Johnson). + modify worm.c to hide cursor while running. + add -Wcast-qual to gcc warnings, fix accordingly. + use PutChar rather than PutAttrChar in ClrToEOL to properly handle wrapping (Alexander V Lukyanov). + correct spurious echoing of input in hanoi.c from eric's #291 & #292 patches (reported by Vernon C. Hoxie ). + extend IRIX configuration to IRIX64 + supply missing install.libs rule needed after restructuring test/Makefile.in 970208 + modify "make mostlyclean" to leave automatically-generated source in the ncurses directory, for use in cross-compiles. + autogenerated object-dependencies for test directory + add configure option --with-rcs-ids + modify configuration scripts to generate major/minor/patch versions (suggested by Alexander V Lukyanov). + supply missing va_end's in lib_scanw.c + use stream I/O for trace-output, to eliminate fixed-size buffer + add TRACE_ICALLS definition/support to lib_trace.c + modify Ada95 binding to work with GNAT 3.09 (Juergen Pfeifer). 970201 + add/modify traces for called/return values to simplify extraction for test scripts. + changed _nc_visbuf to quote its result, and to dynamically allocate the returned buffer. + invoke ldconfig after installing shared library + modify install so that overwrite applies to shared library -lcurses in preference to static library (reported by Zeyd M Ben-Halim 960928). + correct missing ';' in 961221 mod to overwrite optional use of $(LN_S) symbol. + fixes to allow "make install" to work without first doing a "make all" (suggested by Larry Virden). 970125 + correct order of #ifdef for TABS_OK. + instrumented toe.c to test memory-leaks. + correct memory-deallocation in toe.c (patch by Jesse Thilo). + include in configuration test for regex.h (patch by Andreas Schwab) + make infocmp recognize -I option, for SVr4 compatibility (reported by Andreas Schwab ) 970118 + add extension 'use_default_colors()', modified test applications that use default background (firework, gdc, hanoi, knight, worm) to demonstrate. + correct some limit checks in lib_doupdate.c exposed while running worm. + use typeCalloc macro for readability. + add/use definition for CONST to accommodate testing with Solaris (SVr4) curses, which doesn't use 'const' in its prototypes. + modify ifdef's in test/hashtest.c and test/view.c to compile with Solaris curses. + modify _tracedump() to pad pad colors & attrs lines to match change in 970101 showing first/last changes. + corrected location of terminating null on dynamically allocated forms fields (patch by Per Foreby). 970111 + added headers to make view.c compile on SCO with the resizeterm() code (i.e., struct winsize) - though this compiles, I don't have a suitable test configuration since SIGWINCH doesn't pass my network to that machine - T.Dickey. + update test/configure.in to supply some default substitutions. + modify configure script to add -lncurses after -lgpm to fix problem linking against static libraries. + add a missing noraw() to test/ncurses.c (places noted by Jeremy Buhler) + add a missing wclear() to test/testcurs.c (patch by Jeremy Buhler ) + modify headers to accommodate compilers that don't allow duplicate "#define" lines for NCURSES_VERSION (reported by Larry W. Virden ) + fix formatting glitch in curs_getch.3x (patch by Jesse Thilo). + modify lib_doupdate to make el, el1 and ed optimization use the can_clear_with macro, and change EmitRange to allow leaving cursor at the middle of interval, rather than always at the end (patch by Alexander V Lukyanov). This was originally 960929, resync 970106. 970104 + workaround defect in autoconf 2.12 (which terminates configuration if no C++ compiler is found) by adding an option --without-cxx. + modify several man-pages to use tbl, where .nf/.fi was used (reported by Jesse Thilo). + correct font-codes in some man-pages (patch by Jesse Thilo ) + use configure script's knowledge of existence of g++ library for the c++ Makefile (reported by Paul Jackson). + correct misleading description of --datadir configuration option (reported by Paul Jackson ) 970101 + several corrections to _nc_mvcur_scrolln(), prompted by a bug report from Peter Wemm: > the logic for non_dest_scroll_region was interchanged between the forward & reverse scrolling cases. > multiple returns from the function allowed certain conditions to do part of an operation before discovering that it couldn't be completed, returning an error without restoring the cursor. > some returns were ERR, where the function had completed the operation, because the insert/delete line logic was improperly tested (this was probably the case Peter saw). > contrary to comments, some scrolling cases were tested after the insert/delete line method. + modify _tracedump() to show first/last changes. + modify param of ClrUpdate() in lib_doupdate.c to 'newscr', fixes refresh problem (reported by Peter Wemm) that caused nvi to not show result of ":r !ls" until a ^L was typed. 961229 (internal alpha) + correct some of the writable-strings warnings (reported by Gary Johnson ). Note that most of the remaining ones are part of the XSI specification, and can't be "fixed". + improve include-dependencies in form, menu, panel directories. + correct logic of delay_output(), which would return early if there is data on stdin. + modify interface & logic of _nc_timed_wait() to support 2 file descriptors, needed for GPM. + integrate patch by Andrew Kuchling for GPM (mouse) support, correcting logic in wgetch() and _nc_mouse_parse() which prevented patch from working properly -TD + improve performance of panel algorithm (Juergen Pfeifer 961203). + strip RCS id's from generated .html files in Ada95 subtree. + resync with generated .html files (Juergen Pfeifer 961223). + terminfo.src 10.1.0 (ESR). 961224 4.0 release + release as 4.0 to accommodate Linux ld.so.1.8.5 + correct syntax/spelling, regenerated .doc files from .html using lynx 2.5 + refined forms/menus makefiles (Juergen Pfeifer 961223). 961221 - snapshot + remove logic in read_entry.c that attempts to refine errno by using 'access()' for the directory (from patch by Florian La Roche). + correct configure test/substitution that inhibits generating include-path to /usr/include if gcc is used (reported by Florian La Roche). + modify setupterm() to allocate new TERMINAL for each call, just as solaris' curses does (Alexander V Lukyanov 960829). + corrected memory leaks in read_entry.c + add configure options --with-dbmalloc, --with-dmalloc, and --disable-leaks, tested by instrumenting infocmp, ncurses programs. + move #include's for stdlib.h and string.h to *.priv.h to accommodate use of dbmalloc. + modify use of $(LN_S) to follow recommendation in autoconf 2.12, i.e., set current directory before linking. + split-out panel.priv.h, improve dependencies for forms, menus (Juergen Pfeifer 961204). + modify _nc_freewin() to reset globals curscr/newscr/stdscr when freeing the corresponding WINDOW (found using Purify). + modify delwin() to return ERR if the window to be deleted has subwindows, needed as a side-effect of resizeterm() (found using Purify). Tested and found that SVr4 curses behaves this way. + implement logic for _nc_freeall(), bringing stub up to date. 961215 + modify wbkgd() so that it doesn't set nulls in the rendered text, even if its argument doesn't specify a character (fixes test case by Juergen Pfeifer for bug-report). + set window-attributes in wbkgd(), to simplify comparison against Solaris curses, which does this. 961214 - snapshot + replace most constants in ncurses 'o' test by expressions, making it work with wider range of screen sizes. + add options to ncurses.c to specify 'e' test softkey format, and the number of header/footer lines to rip-off. + add ^R (repaint after resize), ^L (refresh) commands to ncurses 'p' test. + add shell-out (!) command to ncurses 'p' test to allow test of resize between endwin/refresh. + correct line-wrap case in mvcur() by emitting carriage return, overlooked in 960928, but needed due to SVr4 compatibility changes to terminal modes in 960907. + correct logic in wresize that causes new lines to be allocated, broken for the special case of increasing rows only in 960907's fix for subwindows. + modify configure script to generate $(LDFLAGS) with -L and -l options in preference to explicit library filenames. (NOTE: this may require further amending, since I vaguely recall a dynamic loader that did not work properly without the full names, but it should be handled as an exception to the rule, since some linkers do bulk inclusion of libraries when given the full name - T.Dickey). + modify configure script to allow user-supplied $CFLAGS to set the debug-option in all libraries (requested by lots of people) -TD + use return consistently from main(), rather than exit (reported by Florian La Roche). + add --enable-getcap-cache option to configure, normally disabled (requested by Florian La Roche). + make configure test for gettimeofday() and possibly -lbsd more efficient (requested by Florian La Roche ) + minor adjustments to Ada95 binding (patches by Juergen Pfeifer) + correct attributes after emitting orig_pair in lib_vidattr.c (patch by Alexander V Lukyanov). 961208 + corrected README wrt Ada95 (Juergen Pfeifer) 961207 - snapshot + integrate resizeterm() into doupdate(), so that if screen size changes between endwin/refresh, ncurses will resize windows to fit (this needs additional testing with pads and softkeys). + add, for memory-leak testing, _nc_freeall() entrypoint to free all data used in ncurses library. + initialize _nc_idcok, _nc_idlok statically to resolve discrepancy between initscr() and newwin() initialization (reported by Alexander V Lukyanov). + test built VERSION=4.0, SHARED_ABI=4 with Linux ld.so.1.8.5 (set beta versions to those values -- NOTE that subsequent pre-4.0 beta may not be interchangeable). + modify configure script to work with autoconf 2.12 961130 1.9.9g release + add copyright notices to configuration scripts (written by Thomas Dickey). 961127 > patch, mostly for panel (Juergen Pfeifer): + cosmetic improvement for a few routines in the ncurses core library to avoid warning messages. + the panel overlap detection was broken + the panel_window() function was not fool-proof. + Some inlining... + Cosmetic changes (also to avoid warning messages when compiling with -DTRACE). 961126 > patch by Juergen Pfeifer: + eliminates warning messages for the compile of libform. + inserts Per Foreby's new field type TYPE_IPV4 into libform. + Updates man page and the Ada95 binding to reflect this. + Improves inlining in libmenu and libform. 961120 + improve the use of the "const" qualifier in the panel library (Juergen Pfeifer) + change set_panel_userptr() and panel_userptr() to use void* (Juergen Pfeifer) 961119 + change ABI to 3.4 + package with 961119 version of Ada95 binding (fixes for gnat-3.07). (Juergen Pfeifer) + correct initialization of the stdscr pseudo panel in panel library (Juergen Pfeifer) + use MODULE_ID (rcs keywords) in forms and menus libraries (Juergen Pfeifer). > patch #324 (ESR): + typo in curs_termcap man page (reported by Hendrik Reichel <106065.2344@compuserve.com>) + change default xterm entry to xterm-r6. + add entry for color_xterm 961116 - snapshot + lint found several functions that had only #define implementations (e.g., attr_off), modified curses.h.in to generate them as per XSI Curses requirement that every macro be available as a function. + add check in infocmp.c to guard against string compare of CANCELLED_STRING values. + modify firework.c, rain.c to hide cursor while running. + correct missing va_end in lib_tparm.c + modify hanoi.c to work on non-color terminals, and to use timing delays when in autoplay mode. + correct 'echochar()' to refresh immediately (reported by Adrian Garside <94ajg2@eng.cam.ac.uk>) > patch #322 (ESR): + reorganize terminfo.src entries for xterm. 961109 - snapshot + corrected error in line-breakout logic (lib_doupdate.c) + modified newdemo to use wgetch(win) rather than getch() to eliminate a spurious clear-screen. + corrected ifdef's for 'poll()' configuration. + added modules to ncurses, form, menu for Ada95 binding (Juergen Pfeifer). + modify set_field_buffer() to allow assignment of string longer than the initial buffer length, and to return the complete string rather than only the initial size (Juergen Pfeifer and Per Foreby ). 961102 - snapshot + configure for 'poll()' in preference to 'select()', since older systems are more likely to have a broken 'select()'. + modified render_char() to avoid OR'ing colors. + minor fixes to testcurs.c, newdemo.c test programs: ifdef'd out the resize test, use wbkgd and corrected box() parameters. + make flushinp() test work in ncurses.c by using napms() instead of sleep(). + undo ESR's changes to xterm-x11r6 (it no longer matched the X11R6.1 distribution, as stated) + terminfo 9.13.18 resync (ESR) + check for getenv("HOME") returning null (ESR). + change buffer used to decode xterm-mouse commands to unsigned to handle displays wider than 128 chars (Juergen Pfeifer). + correct typo curs_outopts.3x (Juergen Pfeifer). + correct limit-checking in wenclose() (Juergen Pfeifer). + correction to Peter Wemm's newwin change (Thomas Fehr ). + corrections to logic that combines colors and attributes; they must not be OR'd (Juergen Pfeifer, extending from report/patch by Rick Marshall). 961026 - snapshot + reset flags in 'getwin()' that might cause refresh to attempt to manipulate the non-existent parent of a window that is read from a file (lib_screen.c). + restructure _nc_timed_wait() to log more information, and to try to recover from badly-behaved 'select()' calls (still testing this). + move define for GOOD_SELECT into configure script. + corrected extra '\' character inserted before ',' in comp_scan.c + corrected expansion of %-format characters in dump_entry.c; some were rendered as octal constants. + modify dump_entry.c to make terminfo output more readable and like SVr4, by using "\s" for spaces (leading/trailing only), "\," for comma, "\^" and "\:" as well. + corrected some memory leaks in ncurses.c, and a minor logic error in the top-level command-parser. + correction for label format 4 (PC style with info line), a slk_clear(), slk_restore() sequence didn't redraw the info line (Juergen Pfeifer). + modified the slk window (if simulated) to inherit the background and default character attributes from stdscr (Juergen Pfeifer). + corrected limit-check in set_top_row (Juergen Pfeifer). 961019 - snapshot + correct loop-limit in wnoutrefresh(), bug exposed during pipe-testing had '.lastchar' entry one beyond '._maxx'. + modify ncurses test-program to work with data piped to it. + corrected pathname computation in run_tic.sh, removing extra "../" (reported by Tim Mooney). + modified configure script to use previous install's location for curses.h + added NetBSD and FreeBSD to platforms that use --prefix=/usr as a default. 961013 + revised xterm terminfo descriptions to reflect the several versions that are available. + corrected a pointer reference in dump_entry.c that didn't test if the pointer was -1. 961005 - snapshot + correct _nc_mvcur_scrolln for terminals w/o scrolling region. + add -x option to hashtest to control whether it allows writes to the lower-right corner. + ifdef'd (NCURSES_TEST) the logic for _nc_optimize_enable to make it simpler to construct tests (for double-check of _nc_hash_map tests). + correct ifdef's for c++ in curses.h + change default xterm type to xterm-x11r6. + correct quoting in configure that made man-pages installed with $datadir instead of actual terminfo path. + correct whitespace in include/Caps, which caused kf11, clr_eol and clr_end to be omitted from terminfo.5 + fix memory leaks in delscreen() (adapted from Alexander V Lukyanov). + improve appearance of marker in multi-selection menu (Juergen Pfeifer) + fix behavior for forms with all fields inactive (Juergen Pfeifer) + document 'field_index()' (Juergen Pfeifer) > patch #321 (ESR): + add some more XENIX keycap translations to include/Caps. + modify newwin to set initial state of each line to 'touched' (from patch by Peter Wemm ) + in SET_TTY, replace TCSANOW with TCSADRAIN (Alexander V Lukyanov). 960928 - snapshot + ifdef'd out _nc_hash_map (still slower) + add graphic characters to vt52 description. + use PutAttrChar in ClrToEOL to ensure proper background, position. + simplify/correct logic in 'mvcur()' that does wrapping; it was updating the position w/o actually moving the cursor, which broke relative moves. + ensure that 'doupdate()' sets the .oldindex values back to a sane state; this was causing a spurious refresh in ncurses 'r'. + add logic to configure (from vile) to guard against builders who don't remove config.cache & config.status when doing new builds -TD + corrected logic for 'repeat_char' in EmitRange (cf: eric #317), which did not follow the 2-parameter scheme specified in XSI. + corrected logic of wrefresh, wnoutrefresh broken in #319, making clearok work properly (report by Michael Elkins). + corrected problem with endwin introduced by #314 (removing the scrolling-region reset) that broke ncurses.c tests. + corrected order of args in AC_CHECK_LIB (from report by Ami Fischman ). + corrected formatting of terminfo.5 tables (Juergen Ehling) > patch 320 (ESR): + change ABI to 3.3 + emit a carriage-return in 'endwin()' to workaround a kernel bug in BSDI. (requested by Mike Karels ) + reverse the default o configure --enable-termcap (consensus). > patch 319 (ESR): + modified logic for clearok and related functions (from report by Michael Elkins) - untested > patch 318 (ESR): + correction to #317. > patch 317 (ESR): + re-add _nc_hash_map + modify EmitRange to maintain position as per original design (patch by A. Lukyanov). + modify test/ncurses.c and tputs, etc., to allow trace counting output characters. + add hashtest.c program to time the hashmap optimization. > patch 316 (ESR): + add logic to deal with magic-cookie (how was this tested?) (lib_doupdate.c). + add ncurses.c driver for magic-cookie, some fixes to ncurses.c > patch 315 (ESR): + merge changes to lib_doupdate.c to use ech and rep - untested (patch by Alexander V Lukyanov). + modified handling of interrupted system calls - untested (lib_getch.c, lib_twait.c). + new function _nc_mvcur_resume() + fix return value for 'overlay()', 'overwrite()' 960914 - snapshot + implement subwindow-logic in wresize, minor fixes to ncurses 'g' test. + corrected bracketing of fallback.c (reported/suggested fix by Juergen Ehling ). + update xterm-color to reflect XFree86 3.1.3G release. + correct broken dtterm description from #314 patch (e.g., spurious newline. The 'pairs' change might work, but no one's tested it either ;-) + clarify the documentation for the builtin form fieldtypes (Juergen Pfeifer) > patch 314 (ESR): + reset scroll region on startup rather than at wrapup time (enhancement suggested by Alexander V Lukyanov). + make storage of palette tables and their size counts per-screen for multi-terminal applications (suggested by Alexander V Lukyanov). + Improved error reporting for infotocap translation errors. + Update terminfo.src to 9.13.14. 960907 - snapshot + rewrote wgetstr to make it erase control chars and also fix bogus use of _nc_outstr which caused the display to not wrap properly (display problem reported by John M. Flinchbaugh ) + modify ncurses 'f' test to accommodate terminal responses to C1 codes (and split up this screen to accommodate non-ANSI terminals). + test enter_insert_mode and exit_insert_mode in has_ic(). + removed bogus logic in mvcur that assumes nl/nonl set output modes (XSI says they are input modes; SVr4 implements this). + added macros SET_TTY, GET_TTY to term.h + correct getstr() logic that altered terminal modes w/o restoring. + disable ICRNL, etc., during initialization to match SVr4, removing the corresponding logic from raw, cbreak, etc. + disable ONLCR during initialization, to match SVr4 (this is needed for cursor optimization when the cursor-down is a newline). + replaced ESR's imitation of wresize with my original (his didn't work). 960831 - snapshot + memory leaks (Alexander V. Lukyanov). + modified pnoutrefresh() to be more tolerant of too-large screen size (reported by Michael Elkins). + correct handling of terminfo files with no strings (Philippe De Muyter) + correct "tic -s" to take into account -I, -C options. + modify ncurses 'f' test to not print codes 80 through 9F, since they are considered control codes by ANSI terminals. 960824 - snapshot + correct speed variable-type in 'tgetent()' (reported by Peter Wemm) + make "--enable-getcap" configuration-option work (reported by Peter Wemm ) 960820 + correct err in 960817 that changed return-value of tigetflag() (reported by Alexander V. Lukyanov). + modify infocmp to use library default search-path for terminfo directory (Alexander V. Lukyanov). 960817 - snapshot + corrected an err in mvcur that broke resizing-behavior. + correct fall-thru behavior of _nc_read_entry(), which was not finding descriptions that existed in directories past the first one searched (reported by Alexander V. Lukyanov) + corrected typo in dtterm description. > patch 313 (ESR): + add dtterm description + clarify ncurses 'i' test (drop mvwscanw subtest) 960810 - snapshot + correct nl()/nonl() to work as per SVr4 & XSI. + minor fixes to ncurses.c (use 'noraw()', mvscanw return-code) + refine configure-test for "-g" option (Tim Mooney). + correct interaction between O_BLANK and NEW_LINE request in form library (Juergen Pfeifer) 960804 + revised fix to tparm; previous fix reversed parameter order. > patch 312 (ESR): correct terminfo.src corrupted by #310 > patch 311 (ESR): + fix idlok() and idcok() and the default of the idlok switch (report by Ville Sulko). 960803 - snapshot + corrected tparm to handle capability strings without explicit pop (reported by William P Setzer) + add fallback def for GCC_NORETURN, GCC_UNUSED for termcap users (reported by Tim Mooney). > patch 310 (ESR): + documentation and prototyping errors for has_color, immedok and idcok (reported by William P Setzer ) + updated qnx terminfo entry (patch by Michael Hunter) 960730 + eliminate quoted includes in ncurses subdirectory, ensure config.h is included first. + newterm initializes terminal settings the same as initscr (reported by Tim Mooney). 960727 - snapshot + call cbreak() in initscr(), as per XSI & SVr4. + turn off hardware echo in initscr() as per XSI & SVr4 > patch 309 (ESR): + terminfo changes (9.3.9), from BRL + add more checks to terminfo parser. + add more symbols to infocmp. 960720 - snapshot + save previous-attribute in lib_vidattr.c if SP is null (reported by Juergen Fluk ) + corrected calls on _nc_render so that background character is set as per XSI. + corrected wbkgdset macro (XSI allows background character to be null), and tests that use it. + more corrections to terminfo (xterm & rxvt) + undid change to mcprint prototype (cannot use size_t in curses.h because not all systems declare it in the headers that we can safely include therein). + move the ifdefs for errno into curses.priv.h > patch 308 (ESR): + terminfo changes (9.3.8) + modified logic of error-reporting in terminfo parser + fix option-processing bug in toe. 960713 - snapshot + always check for since ISC needs it to declare fd_set (Juergen Pfeifer) + install shared-libraries on NetBSD/FreeBSD with ABI-version (reported by Juergen Pfeifer, Mike Long) + add LOCAL_LDFLAGS2 symbol (Juergen Pfeifer) + corrected prototype for delay_output() -- bump ABI to 3.2 + patch 307 (ESR): + enable more translations of nonstandard caps, and document them. + misc/terminfo.src update to 9.13.8 + patch 306 (ESR): + moved logic that filters out rmul and rmso from setupterm to newterm where it is less likely to interfere with termcap applications. + cosmetic fixes to test/ncurses.c + modify open() call in ncurses/read_entry.c to use O_RDONLY symbol rather than constant (report by mib). + misc/terminfo.src sgr0 and acsc changes (report by Philippe De Muyter). + modify ncurses/comp_parse.c so that entries containing a "+" can have missing rmcup vs smcup. 960707 + rollback ESR's #305 change to terminfo.src (it breaks existing applications, e.g., 'less 290'). + correct path of edit_man.sh, and fix typo that made all man-pages preformatted. + restore man/menu_requestname.3x omitted in Zeyd's resync (oops). + auto-configure the GCC_PRINTFLIKE/GCC_SCANFLIKE macros (reported by Philippe De Muyter). 960706 - snapshot + make lib_vidattr.c more readable using macros. + filter out rmul, rmso that conflict with sgr0 when reading terminal descriptions. + work around autoconf bug, force $INSTALL to absolute path (reported by Zeyd). + modify man-page install for BSDI to install preformatted .0 files (reported by David MacKenzie). + add/use gcc __attribute__ for printf and scanf in curses.h + added SGR attributes test-case to ncurses + revised ncurses 't' logic to show trace-disable effect in the menu. + use getopt in ncurses program to process -s and -t options. + make ncurses 'p' legend toggle with '?' + disable scrollok during the ncurses 'p' test; if it is enabled the stdscr will scroll when putting the box-corners in the lower-right of the screen. > patch 305 (ESR): + added sanity-checking of various paired string attributes. + misc/terminfo.src update to 9.13.7 (report by A. Lukyanov). + modify man/Makefile.in to make terminfo.5 during normal build. > patch 304 (ESR): + corrected allocation-length for $HOME/.terminfo path. 960629 - snapshot + check return code of _nc_mvcur_scrolln() in _nc_scroll_optimize() for terminals with no scrolling-support (reported by Nikolay Shadrin ) + added ^S scrollok-toggle to ncurses 'g' test. + added ^T trace-toggle to ncurses tests. + modified ncurses test program to use ^Q or ESC consistently for terminating tests (rather than ^D), and to use control keys rather than function keys in 'g' test. + corrected misplaced wclrtoeol calls in addch to accommodate wrapping (reported by Philippe De Muyter). + modify lib_doupdate.c to use effective costs to tradeoff between delete-character/insert-character vs normal updating (reported by David MacKenzie). + compute effective costs for screen update operations (e.g., clr_eos, delete_character). + corrected error in knight.c exposed by wrap fixes in 960622; the msgwin needed scrollok set. + corrected last change to IDcTransformLine logic to avoid conflict between PutRange and InsStr + modified run_tic.sh to not use /usr/tmp (reported by David MacKenzie), and further revised it and aclocal.m4 to use $TMPDIR if set. + corrected off-by-one in RoomFor call in read_entry.c 960622 - snapshot + modified logic that wraps cursor in addch to follow the XSI spec, (implemented in SVr4) which states that the cursor position is updated when wrapping. Renamed _NEED_WRAP to _WRAPPED to reflect the actual semantics. + added -s option to tic, to provide better diagnostics in run_tic.sh + improved error-recovery for tabset install. + change ABI to 3.1 (dropped tparam, corrected getbkgd(), added _yoffset to WINDOW). + modified initialization of SP->_ofp so that init_acs() is called with the "right" file pointer (reported by Rick Marshall + documentation fixes (Juergen Pfeifer). + corrected, using new SCREEN and WINDOW members, the behavior of ncurses if one uses ripoffline() to remove a line from the top of the screen (Juergen Pfeifer). + modified autoconf scripts to prepare for Ada95 (GNAT) binding to ncurses (Juergen Pfeifer). + incorrect buffer-size in _nc_read_entry, reported by ESR. 960617 + corrected two logic errors in read_entry.c, write_entry.c (called by tic, the write/read of terminfo entries used inconsistent rules for locating the entries; the $TERMINFO_DIRS code would find only the first entry in a list). + refined pathname computation in run_tic.sh and shlib. + corrected initialization of $IP in misc/run_tic.sh 960615 - snapshot + ifdef'd out _nc_hash_map() call because it does not improve speed. + display version of gcc if configure script identifies it. + modify configure script to use /usr as Linux's default prefix. + modify run_tic.sh to use shlib script, fixes some problems installing with a shared-library configuration. + adjusted configure script so that it doesn't run tests with the warnings turned on, which makes config.log hard to read. + added 'lint' rule to top-level Makefile. + added configure option '--with-install-prefix' for use by system builders to install into staging locations (requested by Charles Levert ). + corrected autoconfigure for Debian man program; it's not installed as "man_db". + set noecho in 'worm'; it was ifdef'd for debug only + updated test/configure.in for timing-display in ncurses 'p' test + corrected misspelled 'getbkgd()'. + corrected wbkgdset to work like observed syvr4 (sets A_CHARTEXT part to blank if no character given, copies attributes to window's attributes). + modified lib_doupdate.c to use lower-level SP's current_attr state instead of curscr's state, since it is redundant. + correction to IDcTransformLine logic which controls where InsStr is invoked (refined by Alexander V Lukyanov). > patch 303 (ESR): + conditionally include Chris Torek's hash function _nc_hash_map(). + better fix for nvi refresh-bug (Rick Marshall) + fix for bug in handling of interrupted keystroke waits, (Werner Fleck). + misc/ncurses-intro.html syntax fix (Kajiyama Tamito). 960601 - snapshot + auto-configure man-page compression-format and renames for Debian. + corrected several typos in curses.h.in (i.e., the mvXXXX macros). + re-order curses.priv.h for lint. + added rules for lintlib, lint + corrected ifdef for BROKEN_LINKER in MKnames.awk.in + corrected missing INSTALL_DATA in misc/Makefile.in + flush output when changing cursor-visibility (Rick Marshall) + fix a minor bug in the _nc_ripoff() routine and improve error checking when creating the label window (Juergen Pfeifer). + enhancement to the control over the new PC-style soft key format. allow caller now to select whether or not one wants to have the index-line; see curs_slk.3x for documentation (Juergen Pfeifer). + typos, don't use inline with "-g" (Philippe De Muyter) + fixes for menus & wattr-, slk-functions (Juergen Pfeifer) 960526 - snapshot + removed --with-ticdir option altogether, maintain compatibility with existing applications via symbolic link in run_tic.sh + patch for termio.h, signal (Philippe De Muyter) + auto-configure gcc warning options rather than infer from version. + auto-configure __attribute__ for different gcc versions. + corrected special use of clearok() in hardscroll.c by resetting flag in wrefresh(). + include stdlib.h before defs for EXIT_SUCCESS, for OSF/1. + include sys/types.h in case stdlib.h does not declare size_t. + fixes for makefile (Tim Mooney) + fixes for menus & forms (Juergen Pfeifer) > patch 302 (ESR): + improve hash function (suggested by Alexander V Lukyanov). + 9.13.4 update for terminfo.src 960518 - snapshot + revised ncurses.c panner test, let pad abut all 4 sides of screen. + refined case in lib_doupdate.c for ClrToEOL(). + corrected prior change for PutRange (Alexander V Lukyanov ). + autoconf mods (Tim Mooney ). + locale fix for forms (Philippe De Muyter ) + renamed "--with-datadir" option to "--with-ticdir" to avoid confusion, and made this check for the /usr/lib/terminfo pre-existing directory. > patches 299-301 (ESR): + html fixes (Phillippe de Muyter). + fix typo in ncurses-intro.html (report by Fabrizio Polacco). + added hashmap.c + mods to tracing, especially for ACS chars. + corrected off-by-one in IDCtransform. + corrected intermittent mouse bug by using return-value from read(). + mods to parse_entry.c, for smarter defaults. 960512 + use getopt in 'tic'; added -L option and modified -e option to allow list from a file. 960511 + don't use fixed buffer-size in tparm(). + modified tic to create terminfo directory if it doesn't exist. + added -T options to tic and infocmp (for testing/analysis) + refined the length criteria for termcap and terminfo + optimize lib_doupdate with memcpy, PutRange > patches 297, 298 (ESR): + implement TERMINFO_DIRS, and -o option of tic + added TRACE_IEVENT + fix REQ_TOGGLE_ITEM in menu/menu_driver.c; it could select but not deselect. + added lib_print.c (request by Rick Marshall). + added has_key() (request by Juergen Pfeifer). + do not issue clrtoeol or clrtobot if the relevant portion of the line is already blank (analysis by Keith Bostic). + add parentheses for parameters of COLOR_PAIR and PAIR_NUMBER macros (analysis by Jurgen Eidt). + update screen's notion of cursor position in endwin() (analysis by Alexander Lukyanov). + added 't' to ncurses.c test. + moved delay_output() to lib_tputs.c + removed tparam() (was added in 1.9.9, but conflicts with emacs and is not part of X/Open Curses). + removed boolean version of 'getm'. + misc cursor & optimization fixes. 960504 - snapshot + modified ncurses 'p' test to allow full-screen range for panner size. + fixes for locale (Philippe De Muyter ) + don't use fixed buffer-size in fmt_entry(). + added usage-message to 'infocmp'. + modified install.includes rules to prepend subdirectory-name to "#include" if needed. 960430 + protect wrefresh, wnoutrefresh from invocation with pad argument. + corrected default CCFLAGS in test/Makefile. 960428 - snapshot + implemented logic to support terminals with background color erase (e.g., rxvt and the newer color xterm). + improved screen update logic (off-by-one logic error; use clr_eos if possible) 960426 - snapshot + change ncurses 'a' test to run in raw mode. + make TIOCGWINSZ configure test less stringent, in case user configures via terminal that cannot get screen size. > patches 295, 296 (ESR): + split lib_kernel.c, lib_setup.c and names.c in order to reduce overhead for programs that use only termcap features. + new "-e" and "-h" options of tic (request by Tony Nugent). + fix bug in mandatory-delay logic in lib_tputs.c (report by Sven Verdoolaege). + fix for "infocmp -e" to emit correct initializers (reported by Manual J Novoa III). + restore working-directory in read_termcap.c (report by Kayvan Sylvan). + use "-h" option on Solaris when generating shared libraries on Solaris 2.5 to record the library name in the file, for assisting the loader (patch by Scott Kramer). + undo patch #294 changes to form and menu libraries (request by Juergen Pfeifer). 960418 - snapshot + use autoconf 2.9 + fix for AIX 3.2.5 (must define _POSIX_SOURCE to get termios struct definitions via , modified macros in lib_raw.c to avoid K&R-style substitution) > patches 293, 294 (ESR): + rewrite wsyncup(), wsyncdown(), as well as small fixes to form and menu libraries to fix echo-breakage introduced by 1.8.9, 1.9.9e changes (patches by Juergen Pfeifer). + fix compile under QNX 4.2 by defining ONLCR in lib_raw.c when __QNX__ is defined (patch by Michael Hunter). + modify setupterm() to match documentation for its return value, fix newterm to work with this change (report by Emmet Lazich). + add checks in getch() for error, return ERR as appropriate (report by Emmet Lazich). + mods to wgetch() in cooked mode (report by Pete Seebach). + corrected askuser() logic in tset (patch by Remco Treffkorn). + correct interaction of endwin() with mouse processing (report by Michael Elkins). + added trace support for TTY flags + update terminfo.src to 9.13.1 + FreeBSD console entries (patch by Andrew Chernov). 960406 + fixes for NeXT, ISC and HPUX auto-configure + autogenerate development header-dependencies (config.h, *.priv.h) + corrected single-column formatting of "use=" (e.g., in tic) + modify tic to read full terminfo-names + corrected divide-by-zero that caused hang (or worse) when redirecting output + modify tic to generate directories only as-needed (and corrected instance of use of data from function that had already returned). ### ncurses-1.9.8a -> 1.9.9e * fixed broken wsyncup()/wysncdown(), as a result wnoutrefresh() now has copy-changed-lines behavior. * added and documented wresize() function. * more fixes to LOWER-RIGHT corner handling. * changed the line-breakout optimization code to allow some lines to be emitted before the first check. * added option for tic to use symbolic instead of hard links (for AFS) * fix to restore auto-wrap mode. * trace level can be controlled by environment variable. * better handling of NULs in terminal descriptions. * improved compatibility with observed SVR4 behavior. * the refresh behavior of over-lapping windows is now more efficient and behaves like SVR4. * use autoconf 2.7, which results in a working setup for SCO 5.0. * support for ESCDELAY. * small fixes for menu/form code. * the test directory has its own configure. * fixes to pads when optimizing scrolling. * fixed several off-by-one bugs. * fixes for termcap->terminfo translation; less restrictions more correct behavior. ### ncurses-1.9.7 -> 1.9.8a * teach infocmp -i to recognize ECMA highlight sequences * infocmp now dumps all SVr4 termcaps (not just the SVr4 ones) on -C * support infocmp -RBSD. * satisfy XSI Curses requirement that every macro be available as a function. * This represents the last big change to the public interface of ncurses. The ABI_VERSION has now been set at 3.0 and should stay there barring any great catastrophies or acts of God. * The C++ has been cleaned up in reaction to the changes to satisfy XSI's requirements. * libncurses now gets linked to libcurses to help seamless emulation (replacement) of a vendor's curses. --disable-overwrite turns this behavior off. ### ncurses-1.9.6 -> 1.9.7 * corrected return values of setupterm() * Fixed some bugs in tput (it does padding now) * fixed a bug in tic that made it do the wrong thing on entries with more than one `use' capability. * corrected the screen-size calculation at startup time to alter the numeric capabilities as per SVr4, not just LINES and COLS. * toe(1) introduced; does what infocmp -T used to. * tic(1) can now translate AIX box1 and font[0123] capabilities. * tic uses much less core, the dotic.sh kluge can go away now. * fix read_entry() and write_entry() to pass through cancelled capabilities OK. * Add $HOME/.terminfo as source/target directory for terminfo entries. * termcap compilation now automatically dumps an entry to $HOME/.terminfo. * added -h option to toe(1). * added -R option to tic(1) and infocmp(1). * added fallback-entry-list feature. * added -i option to infocmp(1). * do a better job at detecting if we're on SCO. ### ncurses-1.9.5 -> 1.9.6 * handling of TERMCAP environment variables now works correctly. * various changes to shorten termcap translations to less that 1024 chars. * tset(1) added * mouse support for xterm. * most data tables are now const and accordingly live in shareable text space. * Obey the XPG4/SVr4 practice that echo() is initally off. * tic is much better at translating XENIX and AIX termcap entries now. * tic can interpret ko capabilities now. * integrated Juergen Pfeifer's forms library. * taught write_entry() how not to write more than it needs to; this change reduces the size of the terminfo tree by a full 26%! * infocmp -T option added. * better warnings about historical tic quirks from tic. ### ncurses 1.9.4 -> 1.9.5 * menus library is now included with documentation. * lib_mvcur has been carefully profiled and tuned. * Fixed a ^Z-handling bug that was tanking lynx(1). * HJ Lu's patches for ELF shared libraries under Linux * terminfo.src 9.8.2 * tweaks for compiling in seperate directories. * Thomas Dickey's patches to support NeXT's brain-dead linker * Eric Raymond's patches to fix problems with long termcap entries. * more support for shared libraries under SunOS and IRIX. ### ncurses 1.9.3 -> 1.9.4 * fixed an undefined-order-of-evaluation bug in lib_acs.c * systematically gave non-API public functions and data an _nc_ prefix. * integrated Juergen Pfeifer's menu code into the distribution. * totally rewrote the knight test game's interface ### ncurses 1.9.2c -> 1.9.3 * fixed the TERMCAP_FILE Support. * fixed off-by-one errors in scrolling code * added tracemunch to the test tools * took steps to cut the running time of make install.data ### ncurses 1.9.2c -> 1.9.2d * revised 'configure' script to produce libraries for normal, debug, profile and shared object models. ### ncurses 1.9.1 -> 1.9.2 * use 'autoconf' to implement 'configure' script. * panels support added * tic now checks for excessively long termcap entries when doing translation * first cut at eliminating namespace pollution. ### ncurses 1.8.9 -> 1.9 * cleanup gcc warnings for the following: use size_t where 'int' is not appropriate, fixed some shadowed variables, change attr_t to compatible with chtype, use attr_t in some places where it was confused with 'int'. * use chtype/attr_t casts as appropriate to ensure portability of masking operations. * added-back waddchnstr() to lib_addstr.c (it had been deleted). * supplied missing prototypes in curses.h * include in lib_termcap.c to ensure that the prototypes are consistent (they weren't). * corrected prototype of tputs in * rewrote varargs parsing in lib_tparm.c (to avoid referencing memory that may be out of bounds on the stack) -- Purify found this. * ensure that TRACE is defined in lib_trace.c (to solve prototype warnings from gcc). * corrected scrolling-region size in 'mvcur_wrap()' * more spelling fixes * use 'calloc()' to allocate WINDOW struct in lib_newwin.c (Purify). * set default value for SP->_ofp in lib_set_term.c (otherwise SunOS dumps core in init_acs()). * include in write_entry.c (most "braindead" includes declare errno in that file). ### ncurses 1.8.8 -> 1.8.9 * compile (mostly) clean with gcc 2.5.8 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wconversion and using __attribute__ to flush out non-portable use of "%x" for pointers, or for chtype data (which is declared as a long). * modified doupdate to ensure that typahead was turned on before attempting select-call (otherwise, some implementations hang). * added trace mask TRACE_FIFO, use this in lib_getch.c to allow finer resolution of traces. * improved bounds checking on several critical functions. * the data directory has been replaced by the new master terminfo file. * -F file-comparison option added to infocmp. * compatibility with XSI Curses is now documented in the man bages. * wsyncup/wsyncdown functions are reliable now; subwindow code in general is much less flaky. * capabilities ~msgr, tilde_glitch, insert_padding, generic_type, no_pad_char, memory_above, memory_below, and hard_copy are now used properly. * cursor-movement optimization has been completely rewritten. * vertical-movement optimization now uses hardware scrolling, il, dl. ### ncurses 1.8.7 -> 1.8.8 * untic no longer exists, infocmp replaces it. * tic can understand termcap now, especially if it is called captoinfo. * The Linux Standard Console terminfo entry is called linux insead of console. It also uses the kernel's new method of changing charsets. * initscr() will EXIT upon error (as the docs say) This wil mostly happen if you try to run on an undefined terminal. * I can get things running on AIX but tic can't compile terminfo. I have to compile entries on another machine. Volunteers to hunt this bug are welcome. * wbkgd() and wbkgdset() can be used to set a windows background to color. wclear()/werase() DO NOT use the current attribute to clear the screen. This is the way SVR4 curses works. PDCurses 2.1 is broken in this respect, though PDCurses 2.2 has been fixed. * cleaned up the test/ directory. * test/worm will segfault after quite a while. * many spelling corrections courtesy of Thomas E. Dickey ### ncurses 1.8.6 -> 1.8.7 * cleaned up programs in test/ directory. * fixed wbkgdset() macro. * modified getstr() to stop it from advancing cursor in noecho mode. * modified linux terminfo entry to work with the latest kernel to get the correct alternate character set. * also added a linux-mono entry for those running on monochrome screens. * changed initscr() so that it behaves like the man page says it does. this fixes the problem with programs in test/ crashing with SIGSEV if a terminal is undefined. * modified addch() to avoid using any term.h #define's * removed duplicate tgoto() in lib_tparm.c * modified dump_entry.c so that infocmp deals correctly with ',' in acsc * modified delwin() to correctly handle deleting subwindows. * fixed Makefile.dist to stop installing an empty curses.h * fixed a couple of out-of-date notes in man pages. ### ncurses 1.8.5 -> 1.8.6 * Implemented wbkgd(), bkgd(), bkgdset(), and wbkgdset(). * The handling of attributes has been improved and now does not turn off color if other attributes are turned off. * scrolling code is improved. Scrolling in subwindows is still broken. * Fixes to several bugs that manifest them on platforms other than Linux. * The default to meta now depends on the status of the terminal when ncurses is started. * The interface to the tracing facility has changed. Instead of the pair of functions traceon() and traceoff(), there is just one function trace() which takes a trace mask argument. The trace masks, defined in curses.h, are as follows: #define TRACE_DISABLE 0x00 /* turn off tracing */ #define TRACE_ORDINARY 0x01 /* ordinary trace mode */ #define TRACE_CHARPUT 0x02 /* also trace all character outputs */ #define TRACE_MAXIMUM 0x0f /* maximum trace level */ More trace masks may be added, or these may be changed, in future releases. * The pad code has been improved and the pad test code in test/ncurses.c has been improved. * The prototype ansi entry has been changed to work with a wider variety of emulators. * Fix to the prototype ansi entry that enables it to work with PC emulators that treat trailing ";m" in a highlight sequence as ";0m"; this doesn't break operation with any emulators. * There are now working infocmp, captoinfo, tput, and tclear utilities. * tic can now compile entries in termcap syntax. * Core-dump bug in pnoutrefresh fixed. * We now recognize and compile all the nonstandard capabilities in Ross Ridge's mytinfo package (rendering it obsolete). * General cleanup and documentation improvements. * Fixes and additions to the installation-documentation files. * Take cursor to normal mode on endwin. ### ncurses 1.8.4 -> 1.8.5 * serious bugs in updating screen which caused erratic non-display, fixed. * fixed initialization for getch() related variable which cause unpredictable results. * fixed another doupdate bug which only appeared if you have parm_char. * implemented redrawln() and redrawwin(). * implemented winsnstr() and related functions. * cleaned up insertln() and deleteln() and implemented (w)insdeln(). * changed Makefile.dist so that installation of man pages will take note of the terminfo directory. * fixed Configure (removed the mysterious 'X'). * Eric S. Raymond fixed the script.* files so that they work with stock awk. #### ncurses 1.8.3 -> 1.8.4 #### #### * fixed bug in refreshing the screen after return from shell_mode. There are still problems but they don't manifest themselves on my machine (Linux 0.99.14f). * added wgetnstr() and modified things accordingly. * fixed the script.src script.test to work with awk not just gawk. * Configure can now take an argument of the target system. * added test/ncurses.c which replaces several other programs and performs more testing. [Thanks to Eric S Raymond for the last 4] * more fixes to lib_overlay.c and added test/over.c to illustrate how it works. * fixed ungetch() to take int instead of ch. * fixes to cure wgetch() if flushinp() is called. One note I forgot to mention in 1.8.3 is that tracing is off by default starting in the version. If you want tracing output, put traceon(); in your code and link with -ldcurses. #### ncurses 1.8.2 -> ncurses 1.8.3 #### #### MAJOR CHANGES: 1) The order of capabilities has been changed in order to achieve binary compatibility with SVR4 terminfo database. This has the unfortunate effect of breaking application currently linked with ncurses. To ensure correct behavior, recompile all such programs. Most programs using color or newer capabilities will break, others will probably continue to work ok. 2) Pavel Curtis has renounced his copyright to the public domain. This means that his original sources (posted to comp.sources.unix, volume 1) are now in the public domain. The current sources are NOT in the public domain, they are copyrighted by me. I'm entertaining ideas on what the new terms ncurses is released under. 3) Eric S. Raymond has supplied a complete set of man pages for ncurses in ?roff format. They will eventually replace most of the current docs. Both sets are included in this release. Other changes and notes from 1.8.2 include: * SIGSEGV during scrolling no longer occurs. * Other problems with scrolling and use of idl have been corrected. * lib_getch.c has been re-written and should perform flawlessly. please use test/getch.c and any other programs to test this. * ripoffline() is implemented (Thanks to Eric) and slk_ functions changed accordingly. * I've added support for terminals that scroll if you write in the bottom-right corner. * fixed more bugs in pads code. If anybody has a program that uses pads I'd love a copy. * correct handling for terminal with back_color_erase capability (such as Linux console, and most PC terminals) * ^Z handling apparently didn't work (I should never trust code sent me to me without extensive testing). It now seems to be fixed. Let me know if you have problems. * I've added support for Apollo and NeXT, but it may still be incomplete, especially when dealing with the lack of POSIX features. * scrolling should be more efficient on terminals with idl capabilities. Please see src/lib_scroll.c for more notes. * The line drawing routines were offset by 1 at both ends. This is now fixed. * added a few missing prototypes and macros (e.g. setterm()) * fixed code in src/lib_overlay.c which used to crash. * added a few more programs in test/ The ones from the PDCurses package are useful, especially if you have SVR4 proper. I'm interested in the results you get on such a systems (Eric? ;-). They already exposed certain bugs in ncurses. * See src/README for porting notes. * The C++ code should really replace ncurses.h instead of working around it. It should avoid name-space clashes with nterm.h (use rows instead of lines, etc.) * The C++ should compile ok. I've added explicit rules to the Makefile because no C++ defaults are documented on the suns. * The docs say that echo() and nocbreak() are mutually exclusive. At the moment ncurses will switch to cbreak() if the case above occurs. Should it continue to do so? How about echo() and noraw()? * PDCurses seem to assume that wclear() will use current attribute when clearing the screen. According to Eric this is not the case with SVR4. * I have discovered, to my chagrin, SunOS 4.x (and probably other systems) * doesn't have vsscanf and God knows what else! I've will do a vsscanf(). * I've also found out that the src/script.* rely on gawk and will not work with stock awk or even with nawk. Any changes are welcome. * Linux is more tolerant of NULL dereferences than most systems. This fact was exposed by hanoi. * ncurses still seems inefficient in drawing the screen on a serial link between Linux and suns. The padding may be the culprit. * There seems to be one lingering problem with doupdate() after shelling out. Despite the fact the it is sending out the correct information to the terminal, nothing takes effect until you press ^L or another refresh takes place. And yes, output does get flushed. #### ncurses 1.8.1 -> ncurses 1.8.2 #### Nov 28, 1993 #### * added support for SVR4 and BSDI's BSD/386. * major update and fix to scrolling routine. * MORE fixes to stuff in lib_getch.c. * cleaned-up configuration options and can now generate Config.* files through an awk script. * changed setupterm() so it can be called more than once, add added set_curterm(), del_curterm(). * a few minor cleanups. * added more prototypes in curses.h #### ncurses 1.8 -> ncurses 1.8.1 #### Nov 4, 1993 #### * added support for NeXTStep 3.0 * added termcap emulation (not well tested). * more complete C++ interface to ncurses. * fixed overlay(), overwrite(), and added copywin(). * a couple of bug fixes. * a few code cleanups. #### ncurses 0.7.2/0.7.3 -> ncurses 1.8 #### Aug 31, 1993 #### * The annoying message "can't open file." was due to missing terminfo entry for the used terminal. It has now been replaced by a hopefully more helpful message. * Problems with running on serial lines are now fixed. * Added configuration files for SunOS, Linux, HP/UX, Ultrix, 386bsd/BSDI (if you have others send'em to me) * Cleaner Makefile. * The documentation in manual.doc is now more uptodate. * update optimization and support for hp terminals, and 386bsd console driver(s). * mvcur optimization for terminals without cursor addressing (doesn't work on Linux) * if cursor moved since last update, getch() will refresh the screen before working. * getch() & alarm() can now live together. in 0.7.3 a signal interrupted getch() (bug or feature?) now the getch is restarted. * scanw() et all were sick, now fixed. * support for 8-bit input (use meta()). * added default screen size to all terminfos. * added c++ Ncursesw class. * several minor bug fixes. #### ncurses 0.7.2 -> ncurses 0.7.3 #### May 27, 1993 #### * Config file to cope with different platforms (386BSD, BSDI, Ultrix, SunOS) * more fixes to lib_getch.c * changes related to Config #### ncurses 0.7 -> ncurses 0.7.2 #### May 22, 1993 #### * docs updated slightly (color usage is now documented). * yet another fix for getch(), this one fixes problems with ESC being swallowed if another character is typed before the 1 second timeout. * Hopefully, addstr() and addch() are 8-bit clean. * fixed lib_tparm.c to use stdarg.h (should run on suns now) * order of capabilities changed to reflect that specified in SYSV this will allow for binary-compatibility with existing terminfo dbs. * added halfdelay() * fixed problems with asc_init() * added A_PROTECT and A_INVIS * cleaned up vidputs() * general cleanup of the code * more attention to portability to other systems * added terminfos for hp70092 (wont work until changes to lib_update.c are made) and 386BSD pcvt drivers. Thanks to Hellmuth Michaelis for his help. optimization code is slated for the next major release, stay tuned! #### ncurses 0.6/0.61 -> ncurses 0.7 #### April 1, 1993 Please note that the next release will be called 1.8. If you want to know about the rationale drop me a line. Included are several test programs in test/. I've split up the panels library, reversi, tetris, sokoban. They are now available separately from netcom.com:pub/zmbenhal/ * color and ACS support is now fully compatible with SYSV at the terminfo level. * Capabilities now includes as many SYSV caps I could find. * tigetflag,tigetnum,tigetstr functions added. * boolnames, boolfnames, boolcodes numnames, numfnames, numcodes, strnames, strfnames, strcodes arrays are now added. * keyname() is added. * All function keys can be defined in terminfo entries. * fixed lin_tparm.c to behave properly. * terminfo entries for vt* and xterm are included (improvements are welcome) * more automation in handling caps and keys. * included fixes from 0.6.1 * added a few more missing functions. * fixed a couple of minor bugs. * updated docs JUST a little (still miles behind in documenting the newer features). #### ncurses 0.6 -> ncurses 0.61 #### 1) Included the missing data/console. 2) allow attributes when drawing boxes. 3) corrected usage of win->_delay value. 4) fixed a bug in lib_getch.c. if it didn't recognize a sequence it would simply return the last character in the sequence. The correct behavior is to return the entire sequence one character at a time. #### ncurses0.5 -> ncurses0.6 #### March 1, 1993 #### * removed _numchngd from struct _win_st and made appropriate changes. * rewritten kgetch() to remove problems with interaction between alarm and read(). It caused SIGSEGV every now and then. * fixed a bug that miscounted the numbers of columns when updating. (in lib_doupdate.c(ClrUpdate() -- iterate to columns not columns-1) * fixed a bug that cause the lower-right corner to be incorrect. (in lib_doupdate.c(putChar() -- check against columns not columns-1) * made resize() and cleanup() static to lib_newterm.c * added notimeout(). * added timeout() define in curses.h * added more function prototypes and fixed napms. * added use_env(). * moved screen size detection to lib_setup.c. * fixed newterm() to confirm to prototype. * removed SIGWINCH support as SYSV does not define its semantics. * cleaned-up lib_touch.c * added waddnstr() and relatives. * added slk_* support. * fixed a bug in wdeleteln(). * added PANEL library. * modified Makefile for smoother installation. * terminfo.h is really term.h #### ncurses 0.4 -> ncurses 0.5 #### Feb 14, 1993 #### * changed _win_st structure to allow support for missing functionality. * Addition of terminfo support for all KEY_*. * Support for nodelay(), timeout(), notimeout(). * fixed a bug with the keypad char reading that did not return ESC until another key is pressed. * nl mapping no longer occur on output (as should be) fixed bug '\n' no causing a LF. * fixed bug that reset terminal colors regardless of whether we use color or not. * Better support for ACS (not quite complete). * fixed bug in wvline(). * added curs_set(). * changed from signal() to sigaction(). * re-included the contents of important.patch into source. #### ncurses 0.3 -> ncurses 0.4 #### Feb 3, 1993 #### * Addition of more KEY_* definitions. * Addition of function prototypes. * Addition of several missing functions. * No more crashes if screen size is undefined (use SIGWINCH handler). * added a handler to cleanup after SIGSEGV (hopefully never needed). * changed SRCDIR from /etc/term to /usr/lib/terminfo. * renamed compile/dump to tic/untic. * New scrolling code. * fixed bug that reversed the sense of nl() and nonl(). #### ncurses 0.2 -> ncurses 0.3 #### Jan 20, 1993 #### * more support for color and graphics see test/ for examples. * fixed various files to allow correct update after shelling out. * more fixes for updates. * no more core dumps if you don't have a terminfo entry. * support for LINES and COLUMNS environment variables. * support for SIGWINCH signal. * added a handler for SIGINT for clean exits. #### ncurses 0.1 -> ncurses 0.2 #### Aug 14, 1992 #### * support for color. * support for PC graphic characters. * lib_trace.c updated to use stdarg.h and vprintf routines. * added gdc.c (Great Digital Clock) as an example of using color. #### ncurses -> ncurses 0.1 #### Jul 31, 1992 #### * replacing sgtty stuff by termios stuff. * ANSIfication of some functions. * Disabling cost analysis 'cause it's incorrect. * A quick hack for a terminfo entry. -- vile:txtmode: ncurses-6.0-20160213/convert_configure.pl0000644000175100001440000001142110422533146016531 0ustar tomusersextproc perl -S -w # $Id: convert_configure.pl,v 1.3 2006/04/22 23:04:06 tom Exp $ ############################################################################## # Copyright (c) 1998-2000,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # The converted script is written to stdout, so run this script as # convert_configure configure > configure.cmd # # When the converted script runs, it expects that /tmp dir is # available (so we create it). # # run the result like this: # .\configure # Some frequent manual intervention: # a) Some makefiles hardwire SHELL = /bin/sh ==> change to: sh # b) Some makefiles recognize that exe files terminate on .exe # You need to give this script -no-zexe option... shift, $no_zexe = 1 if @ARGV and $ARGV[0] eq '-no-zexe'; mkdir '/tmp', 0777 unless -d '/tmp'; print <) { if (/for\s+(\w+)\s+in\s*\$(PATH|ac_dummy)\s*;/) { $checking_path = 1; $varname = $1; $subst= <\fR .sp int set_field_buffer(FIELD *field, int buf, const char *value); .br char *field_buffer(const FIELD *field, int buffer); .br int set_field_status(FIELD *field, bool status); .br bool field_status(const FIELD *field); .br int set_max_field(FIELD *field, int max); .br .SH DESCRIPTION The function \fBset_field_buffer\fR sets the numbered buffer of the given field to contain a given string: .RS 3 .bP Buffer 0 is the displayed value of the field. .bP Other numbered buffers may be allocated by applications through the \fBnbuf\fR argument of (see \fBform_field_new\fR(3X)) but are not manipulated by the forms library. .RE .PP The function \fBfield_buffer\fR returns a pointer to the contents of the given numbered buffer: .RS 3 .bP The buffer contents always have the same length, and are padded with trailing spaces as needed to ensure this length is the same. .bP The buffer may contain leading spaces, depending on how it was set. .bP The buffer contents are set with \fBset_field_buffer\fP, or as a side effect of any editing operations on the corresponding field. .bP Editing operations are based on the \fIwindow\fP which displays the field, rather than a \fIstring\fP. The window contains only printable characters, and is filled with blanks. If you want the raw data, you must write your own routine that copies the value out of the buffer and removes the leading and trailing spaces. .bP Because editing operations change the content of the buffer to correspond to the window, you should not rely on using buffers for long-term storage of form data. .RE .PP The function \fBset_field_status\fR sets the associated status flag of \fIfield\fR; \fBfield_status\fR gets the current value. The status flag is set to a nonzero value whenever the field changes. .PP The function \fBset_max_field\fR sets the maximum size for a dynamic field. An argument of 0 turns off any maximum size threshold for that field. .SH RETURN VALUE The \fBfield_buffer\fR function returns NULL on error. It sets errno according to their success: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .PP The \fBfield_status\fR function returns \fBTRUE\fR or \fBFALSE\fR. .PP The remaining routines return one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .SH SEE ALSO \fBcurses\fR(3X) and related pages whose names begin "form_" for detailed descriptions of the entry points. .SH NOTES The header file \fB\fR automatically includes the header file .PP When configured for wide characters, \fBfield_buffer\fP returns a pointer to temporary storage (allocated and freed by the library). The application should not attempt to modify the data. It will be freed on the next call to \fBfield_buffer\fP to return the same buffer. \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_ins_wstr.3x0000644000175100001440000001166012045321337016413 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2010,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_ins_wstr.3x,v 1.7 2012/11/03 23:03:59 tom Exp $ .TH curs_ins_wstr 3X "" .na .hy 0 .SH NAME \fBins_wstr\fR, \fBins_nwstr\fR, \fBwins_wstr\fR, \fBwins_nwstr\fR, \fBmvins_wstr\fR, \fBmvins_nwstr\fR, \fBmvwins_wstr\fR, \fBmvwins_nwstr\fR \- insert a wide-character string into a curses window .ad .hy .SH SYNOPSIS .nf \fB#include \fR .sp \fBint ins_wstr(const wchar_t *\fR\fIwstr);\fR .br \fBint ins_nwstr(const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint wins_wstr(WINDOW *\fR\fIwin\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR .br \fBint wins_nwstr(WINDOW *\fR\fIwin\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvins_wstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR .br \fBint mvins_nwstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvwins_wstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR .br \fBint mvwins_nwstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .fi .SH DESCRIPTION These routines insert a \fBwchar_t\fR character string (as many characters as will fit on the line) before the character under the cursor. All characters to the right of the cursor are shifted right, with the possibility of the rightmost characters on the line being lost. No wrapping is performed. The cursor position does not change (after moving to \fIy\fR, \fIx\fR, if specified). The four routines with \fIn\fR as the last argument insert a leading substring of at most \fIn\fR \fBwchar_t\fR characters. If \fIn\fR is less than 1, the entire string is inserted. .PP If a character in \fIwstr\fR is a tab, newline, carriage return or backspace, the cursor is moved appropriately within the window. A newline also does a \fBclrtoeol\fR before moving. Tabs are considered to be at every eighth column. If a character in \fIwstr\fR is another control character, it is drawn in the \fB^\fR\fIX\fR notation. Calling \fBwin_wch\fR after adding a control character (and moving to it, if necessary) does not return the control character, but instead returns a character in the ^-representation of the control character. .SH NOTES Note that all but wins_nwstr may be macros. .PP If the first character in the string is a nonspacing character, these functions will fail. XSI does not define what will happen if a nonspacing character follows a control character. .SH RETURN VALUE Upon successful completion, these functions return OK. Otherwise, they return ERR. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_insstr\fR(3X), \fBcurs_in_wch\fR(3X), \fBcurs_ins_wch\fR(3X). ncurses-6.0-20160213/man/curs_attr.3x0000644000175100001440000003173312633364375015534 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_attr.3x,v 1.44 2015/12/13 21:54:05 tom Exp $ .TH curs_attr 3X "" .na .hy 0 .SH NAME \fBattroff\fR, \fBwattroff\fR, \fBattron\fR, \fBwattron\fR, \fBattrset\fR, \fBwattrset\fR, \fBcolor_set\fR, \fBwcolor_set\fR, \fBstandend\fR, \fBwstandend\fR, \fBstandout\fR, \fBwstandout\fR, \fBattr_get\fR, \fBwattr_get\fR, \fBattr_off\fR, \fBwattr_off\fR, \fBattr_on\fR, \fBwattr_on\fR, \fBattr_set\fR, \fBwattr_set\fR, \fBchgat\fR, \fBwchgat\fR, \fBmvchgat\fR, \fBmvwchgat\fR, \fBPAIR_NUMBER\fR \- \fBcurses\fR character and window attribute control routines .ad .hy .SH SYNOPSIS \fB#include \fR .br \fBint attroff(int \fP\fIattrs);\fR .br \fBint wattroff(WINDOW *\fP\fIwin\fP\fB, int \fP\fIattrs\fP\fB);\fR .br \fBint attron(int \fP\fIattrs\fP\fB);\fR .br \fBint wattron(WINDOW *\fP\fIwin\fP\fB, int \fP\fIattrs\fP\fB);\fR .br \fBint attrset(int \fP\fIattrs\fP\fB);\fR .br \fBint wattrset(WINDOW *\fP\fIwin\fP\fB, int \fP\fIattrs\fP\fB);\fR .br \fBint color_set(short \fP\fIcolor_pair_number\fP\fB, void* \fP\fIopts\fP\fB);\fR .br \fBint wcolor_set(WINDOW *\fP\fIwin\fP\fB, short \fP\fIcolor_pair_number\fP\fB,\fR \fBvoid* \fP\fIopts);\fR .br \fBint standend(void);\fR .br \fBint wstandend(WINDOW *\fP\fIwin\fP\fB);\fR .br \fBint standout(void);\fR .br \fBint wstandout(WINDOW *\fP\fIwin\fP\fB);\fR .br \fBint attr_get(attr_t *\fP\fIattrs\fP\fB, short *\fP\fIpair\fP\fB, void *\fP\fIopts\fP\fB);\fR .br \fBint wattr_get(WINDOW *\fP\fIwin\fP\fB, attr_t *\fP\fIattrs\fP\fB, short *\fP\fIpair\fP\fB,\fR \fBvoid *\fP\fIopts\fP\fB);\fR .br \fBint attr_off(attr_t \fP\fIattrs\fP\fB, void *\fP\fIopts\fP\fB);\fR .br \fBint wattr_off(WINDOW *\fP\fIwin\fP\fB, attr_t \fP\fIattrs\fP\fB, void *\fP\fIopts\fP\fB);\fR .br \fBint attr_on(attr_t \fP\fIattrs\fP\fB, void *\fP\fIopts\fP\fB);\fR .br \fBint wattr_on(WINDOW *\fP\fIwin\fP\fB, attr_t \fP\fIattrs\fP\fB, void *\fP\fIopts\fP\fB);\fR .br \fBint attr_set(attr_t \fP\fIattrs\fP\fB, short \fP\fIpair\fP\fB, void *\fP\fIopts\fP\fB);\fR .br \fBint wattr_set(WINDOW *\fP\fIwin\fP\fB, attr_t \fP\fIattrs\fP\fB, short \fP\fIpair\fP\fB, void *\fP\fIopts\fP\fB);\fR .br \fBint chgat(int \fP\fIn\fP\fB, attr_t \fP\fIattr\fP\fB, short \fP\fIcolor\fP\fB,\fR \fBconst void *\fP\fIopts\fP\fB);\fR .br \fBint wchgat(WINDOW *\fP\fIwin\fP\fB, int \fP\fIn\fP\fB, attr_t \fP\fIattr\fP\fB,\fR \fBshort \fP\fIcolor\fP\fB, const void *\fP\fIopts\fP\fB);\fR .br \fBint mvchgat(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, int \fP\fIn\fP\fB, attr_t \fP\fIattr\fP\fB,\fR \fBshort \fP\fIcolor\fP\fB, const void *\fP\fIopts\fP\fB);\fR .br \fBint mvwchgat(WINDOW *\fP\fIwin, int \fP\fIy, int \fP\fIx, int \fP\fIn,\fR \fBattr_t \fP\fIattr\fP\fB, short \fP\fIcolor\fP\fB, const void *\fP\fIopts\fP\fB);\fR .br \fBPAIR_NUMBER(\fR\fIattrs\fR\fB);\fP .br .SH DESCRIPTION These routines manipulate the current attributes of the named window. The current attributes of a window apply to all characters that are written into the window with \fBwaddch\fR, \fBwaddstr\fR and \fBwprintw\fR. Attributes are a property of the character, and move with the character through any scrolling and insert/delete line/character operations. To the extent possible, they are displayed as appropriate modifications to the graphic rendition of characters put on the screen. .SS attrset .PP The routine \fBattrset\fR sets the current attributes of the given window to \fIattrs\fR. The routine \fBattroff\fR turns off the named attributes without turning any other attributes on or off. The routine \fBattron\fR turns on the named attributes without affecting any others. The routine \fBstandout\fR is the same as \fBattron(A_STANDOUT)\fR. The routine \fBstandend\fR is the same as \fBattrset(A_NORMAL)\fR or \fBattrset(0)\fR, that is, it turns off all attributes. .PP The \fBattrset\fR and related routines do not affect the attributes used when erasing portions of the window. See \fBcurs_bkgd\fR(3X) for functions which modify the attributes used for erasing and clearing. .SS attr_set The \fBattrset\fP routine is actually a legacy feature predating SVr4 curses but kept in X/Open Curses for the same reason that SVr4 curses kept it: compatibility. The routine \fBattr_set\fP provides for passing a color-pair parameter. .PP The remaining \fBattr_\fR* functions operate exactly like the corresponding \fBattr\fR* functions, except that they take arguments of type \fBattr_t\fR rather than \fBint\fR. .SS color_set .PP The routine \fBcolor_set\fR sets the current color of the given window to the foreground/background combination described by the color_pair_number. The parameter opts is reserved for future use, applications must supply a null pointer. .SS attr_get .PP The routine \fBwattr_get\fR returns the current attribute and color pair for the given window; \fBattr_get\fR returns the current attribute and color pair for \fBstdscr\fR. .PP There is no corresponding \fBattrget\fP function as such in X/Open Curses, although ncurses provides \fBgetattrs\fP (see curs_legacy(3X)). .SS chgat .PP The routine \fBchgat\fR changes the attributes of a given number of characters starting at the current cursor location of \fBstdscr\fR. It does not update the cursor and does not perform wrapping. A character count of \-1 or greater than the remaining window width means to change attributes all the way to the end of the current line. The \fBwchgat\fR function generalizes this to any window; the \fBmvwchgat\fR function does a cursor move before acting. In these functions, the color argument is a color-pair index (as in the first argument of \fIinit_pair\fR, see \fBcurs_color\fR(3X)). The \fBopts\fR argument is not presently used, but is reserved for the future (leave it \fBNULL\fR). .SS Attributes The following video attributes, defined in \fB\fR, can be passed to the routines \fBattron\fR, \fBattroff\fR, and \fBattrset\fR, or OR'd with the characters passed to \fBaddch\fR (see \fBcurs_addch\fR(3X)). .PP .RS .TS l l _ _ _ l l . \fIName\fR \fIDescription\fR \fBA_NORMAL\fR Normal display (no highlight) \fBA_STANDOUT\fR Best highlighting mode of the terminal. \fBA_UNDERLINE\fR Underlining \fBA_REVERSE\fR Reverse video \fBA_BLINK\fR Blinking \fBA_DIM\fR Half bright \fBA_BOLD\fR Extra bright or bold \fBA_PROTECT\fR Protected mode \fBA_INVIS\fR Invisible or blank mode \fBA_ALTCHARSET\fR Alternate character set \fBA_ITALIC\fR Italics (non-X/Open extension) \fBA_CHARTEXT\fR Bit-mask to extract a character \fBCOLOR_PAIR(\fR\fIn\fR\fB)\fR Color-pair number \fIn\fR .TE .RE .PP These video attributes are supported by \fBattr_on\fP and related functions (which also support the attributes recognized by \fBattron\fP, etc.): .RS .TS l l _ _ _ l l . \fIName\fR \fIDescription\fR \fBWA_HORIZONTAL\fR Horizontal highlight \fBWA_LEFT\fR Left highlight \fBWA_LOW\fR Low highlight \fBWA_RIGHT\fR Right highlight \fBWA_TOP\fR Top highlight \fBWA_VERTICAL\fR Vertical highlight .TE .RE .PP For consistency .PP The following macro is the reverse of \fBCOLOR_PAIR(\fR\fIn\fR\fB)\fR: .PP .br \fBPAIR_NUMBER(\fR\fIattrs\fR) Returns the pair number associated with the \fBCOLOR_PAIR(\fR\fIn\fR\fB)\fR attribute. .br .PP The return values of many of these routines are not meaningful (they are implemented as macro-expanded assignments and simply return their argument). The SVr4 manual page claims (falsely) that these routines always return \fB1\fR. .SH NOTES Note that \fBattroff\fR, \fBwattroff\fR, \fBattron\fR, \fBwattron\fR, \fBattrset\fR, \fBwattrset\fR, \fBstandend\fR and \fBstandout\fR may be macros. .PP \fBCOLOR_PAIR\fP values can only be OR'd with attributes if the pair number is less than 256. The alternate functions such as \fBcolor_set\fP can pass a color pair value directly. However, ncurses ABI 4 and 5 simply OR this value within the alternate functions. You must use ncurses ABI 6 to support more than 256 color pairs. .SH PORTABILITY These functions are supported in the XSI Curses standard, Issue 4. The standard defined the dedicated type for highlights, \fBattr_t\fR, which is not defined in SVr4 curses. The functions taking \fBattr_t\fR arguments are not supported under SVr4. .PP The XSI Curses standard states that whether the traditional functions \fBattron\fR/\fBattroff\fR/\fBattrset\fR can manipulate attributes other than \fBA_BLINK\fR, \fBA_BOLD\fR, \fBA_DIM\fR, \fBA_REVERSE\fR, \fBA_STANDOUT\fR, or \fBA_UNDERLINE\fR is "unspecified". Under this implementation as well as SVr4 curses, these functions correctly manipulate all other highlights (specifically, \fBA_ALTCHARSET\fR, \fBA_PROTECT\fR, and \fBA_INVIS\fR). .PP This implementation provides the \fBA_ITALIC\fP attribute for terminals which have the \fIenter_italics_mode\fP (sitm) and \fIexit_italics_mode\fP (ritm) capabilities. Italics are not mentioned in X/Open Curses. Unlike the other video attributes, \fBI_ITALIC\fP is unrelated to the \fIset_attributes\fP capabilities. This implementation makes the assumption that \fIexit_attribute_mode\fP may also reset italics. .PP XSI Curses added the new entry points, \fBattr_get\fR, \fBattr_on\fR, \fBattr_off\fR, \fBattr_set\fR, \fBwattr_on\fR, \fBwattr_off\fR, \fBwattr_get\fR, \fBwattr_set\fR. These are intended to work with a new series of highlight macros prefixed with \fBWA_\fR. The older macros have direct counterparts in the newer set of names: .PP .RS .ne 9 .TS l l _ _ _ l l . \fIName\fR \fIDescription\fR \fBWA_NORMAL\fR Normal display (no highlight) \fBWA_STANDOUT\fR Best highlighting mode of the terminal. \fBWA_UNDERLINE\fR Underlining \fBWA_REVERSE\fR Reverse video \fBWA_BLINK\fR Blinking \fBWA_DIM\fR Half bright \fBWA_BOLD\fR Extra bright or bold \fBWA_ALTCHARSET\fR Alternate character set .TE .RE .PP Very old versions of this library did not force an update of the screen when changing the attributes. Use \fBtouchwin\fR to force the screen to match the updated attributes. .PP The XSI curses standard specifies that each pair of corresponding \fBA_\fR and \fBWA_\fR-using functions operates on the same current-highlight information. .PP The XSI standard extended conformance level adds new highlights \fBA_HORIZONTAL\fR, \fBA_LEFT\fR, \fBA_LOW\fR, \fBA_RIGHT\fR, \fBA_TOP\fR, \fBA_VERTICAL\fR (and corresponding \fBWA_\fR macros for each). As of August 2013, no known terminal provides these highlights (i.e., via the \fBsgr1\fP capability). .SH RETURN VALUE All routines return the integer \fBOK\fR on success, or \fBERR\fP on failure. .PP X/Open does not define any error conditions. .PP This implementation returns an error if the window pointer is null. The \fBwcolor_set\fP function returns an error if the color pair parameter is outside the range 0..COLOR_PAIRS\-1. This implementation also provides \fBgetattrs\fR for compatibility with older versions of curses. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH SEE ALSO .na \fBcurses\fR(3X), \fBcurs_addch\fR(3X), \fBcurs_addstr\fR(3X), \fBcurs_bkgd\fR(3X), \fBcurs_printw\fR(3X), \fBcurs_variables\fR(3X) ncurses-6.0-20160213/man/curs_scanw.3x0000644000175100001440000001166511476505455015677 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_scanw.3x,v 1.17 2010/12/04 18:40:45 tom Exp $ .TH curs_scanw 3X "" .SH NAME \fBscanw\fR, \fBwscanw\fR, \fBmvscanw\fR, \fBmvwscanw\fR, \fBvwscanw\fR, \fBvw_scanw\fR \- convert formatted input from a \fBcurses\fR window .SH SYNOPSIS \fB#include \fR .sp \fBint scanw(char *fmt, ...);\fR .br \fBint wscanw(WINDOW *win, char *fmt, ...);\fR .br \fBint mvscanw(int y, int x, char *fmt, ...);\fR .br \fBint mvwscanw(WINDOW *win, int y, int x, char *fmt, ...);\fR .br \fBint vw_scanw(WINDOW *win, char *fmt, va_list varglist);\fR .br \fBint vwscanw(WINDOW *win, char *fmt, va_list varglist);\fR .SH DESCRIPTION The \fBscanw\fR, \fBwscanw\fR and \fBmvscanw\fR routines are analogous to \fBscanf\fR [see \fBscanf\fR(3)]. The effect of these routines is as though \fBwgetstr\fR were called on the window, and the resulting line used as input for \fBsscanf\fR(3). Fields which do not map to a variable in the \fIfmt\fR field are lost. .PP The \fBvwscanw\fR and \fBvw_scanw\fR routines are analogous to \fBvscanf\fR. They perform a \fBwscanw\fR using a variable argument list. The third argument is a \fIva_list\fR, a pointer to a list of arguments, as defined in \fB\fR. .SH RETURN VALUE \fBvwscanw\fR returns \fBERR\fR on failure and an integer equal to the number of fields scanned on success. .PP Applications may use the return value from the \fBscanw\fR, \fBwscanw\fR, \fBmvscanw\fR and \fBmvwscanw\fR routines to determine the number of fields which were mapped in the call. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH PORTABILITY The XSI Curses standard, Issue 4 describes these functions. The function \fBvwscanw\fR is marked TO BE WITHDRAWN, and is to be replaced by a function \fBvw_scanw\fR using the \fB\fR interface. The Single Unix Specification, Version 2 states that \fBvw_scanw\fR is preferred to \fBvwscanw\fR since the latter requires including \fB\fR, which cannot be used in the same file as \fB\fR. This implementation uses \fB\fR for both, because that header is included in \fB. .LP Both XSI and The Single Unix Specification, Version 2 state that these functions return ERR or OK. Since the underlying \fBscanf\fR can return the number of items scanned, and the SVr4 code was documented to use this feature, this is probably an editing error which was introduced in XSI, rather than being done intentionally. Portable applications should only test if the return value is ERR, since the OK value (zero) is likely to be misleading. One possible way to get useful results would be to use a "%n" conversion at the end of the format string to ensure that something was processed. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_getstr\fR(3X), \fBcurs_printw\fR(3X), \fBscanf\fR(3) ncurses-6.0-20160213/man/form_win.3x0000644000175100001440000001003511476505277015340 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_win.3x,v 1.13 2010/12/04 18:38:55 tom Exp $ .TH form_win 3X "" .SH NAME \fBform_win\fR \- make and break form window and subwindow associations .SH SYNOPSIS \fB#include \fR .br int set_form_win(FORM *form, WINDOW *win); .br WINDOW *form_win(const FORM *form); .br int set_form_sub(FORM *form, WINDOW *sub); .br WINDOW *form_sub(const FORM *form); .br int scale_form(const FORM *form, int *rows, int *columns); .br .SH DESCRIPTION Every form has an associated pair of \fBcurses\fR windows. The form window displays any title and border associated with the window; the form subwindow displays the items of the form that are currently available for selection. .PP The first four functions get and set those windows. It is not necessary to set either window; by default, the driver code uses \fBstdscr\fR for both. .PP In the \fBset_\fR functions, window argument of \fBNULL\fR is treated as though it were \fBstsdcr\fR. A form argument of \fBNULL\fR is treated as a request to change the system default form window or subwindow. .PP The function \fBscale_form\fR returns the minimum size required for the subwindow of \fIform\fR. .SH RETURN VALUE Routines that return pointers return \fBNULL\fR on error. Routines that return an integer return one of the following error codes: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_POSTED The form has already been posted. .TP 5 .B E_NOT_CONNECTED No items are connected to the form. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_variables\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/infocmp.1m0000644000175100001440000004541012572652616015141 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: infocmp.1m,v 1.57 2015/09/05 20:50:22 tom Exp $ .TH @INFOCMP@ 1M "" .ds n 5 .de bP .IP \(bu 4 .. .ds d @TERMINFO@ .SH NAME \fB@INFOCMP@\fR \- compare or print out \fIterminfo\fR descriptions .SH SYNOPSIS \fB@INFOCMP@\fR [\fB\-\ 1\ C\ D\ E\ F\ G\ I\ K\ L\ T\ U\ V\ c\ d\ e\ g\ i\ l\ n\ p\ q\ r\ t\ u\ x\ \fR] .br [\fB\-v\fR \fIn\fR] [\fB\-s d\fR| \fBi\fR| \fBl\fR| \fBc\fR] [\fB\-Q\fR \fIn\fR] [\fB\-R \fR\fBsubset\fR] .br [\fB\-w\fR\ \fIwidth\fR] [\fB\-A\fR\ \fIdirectory\fR] [\fB\-B\fR\ \fIdirectory\fR] .br [\fItermname\fR...] .SH DESCRIPTION \fB@INFOCMP@\fR can be used to compare a binary \fBterminfo\fR entry with other terminfo entries, rewrite a \fBterminfo\fR description to take advantage of the \fBuse=\fR terminfo field, or print out a \fBterminfo\fR description from the binary file (\fBterm\fR) in a variety of formats. In all cases, the boolean fields will be printed first, followed by the numeric fields, followed by the string fields. .SS Default Options If no options are specified and zero or one \fItermnames\fR are specified, the \fB\-I\fR option will be assumed. If more than one \fItermname\fR is specified, the \fB\-d\fR option will be assumed. .SS Comparison Options [\-d] [\-c] [\-n] \fB@INFOCMP@\fR compares the \fBterminfo\fR description of the first terminal \fItermname\fR with each of the descriptions given by the entries for the other terminal's \fItermnames\fR. If a capability is defined for only one of the terminals, the value returned will depend on the type of the capability: \fBF\fR for boolean variables, \fB\-1\fR for integer variables, and \fBNULL\fR for string variables. .PP The \fB\-d\fR option produces a list of each capability that is different between two entries. This option is useful to show the difference between two entries, created by different people, for the same or similar terminals. .PP The \fB\-c\fR option produces a list of each capability that is common between two or more entries. Capabilities that are not set are ignored. This option can be used as a quick check to see if the \fB\-u\fR option is worth using. .PP The \fB\-n\fR option produces a list of each capability that is in none of the given entries. If no \fItermnames\fR are given, the environment variable \fBTERM\fR will be used for both of the \fItermnames\fR. This can be used as a quick check to see if anything was left out of a description. .SS Source Listing Options [\-I] [\-L] [\-C] [\-r] The \fB\-I\fR, \fB\-L\fR, and \fB\-C\fR options will produce a source listing for each terminal named. . .TS center tab(/) ; l l . \fB\-I\fR/use the \fBterminfo\fR names \fB\-L\fR/use the long C variable name listed in <\fBterm.h\fR> \fB\-C\fR/use the \fBtermcap\fR names \fB\-r\fR/when using \fB\-C\fR, put out all capabilities in \fBtermcap\fR form \fB\-K\fR/modifies the \fB\-C\fP option, improving BSD-compatibility. .TE .PP If no \fItermnames\fR are given, the environment variable \fBTERM\fR will be used for the terminal name. .PP The source produced by the \fB\-C\fR option may be used directly as a \fBtermcap\fR entry, but not all parameterized strings can be changed to the \fBtermcap\fR format. \fB@INFOCMP@\fR will attempt to convert most of the parameterized information, and anything not converted will be plainly marked in the output and commented out. These should be edited by hand. .PP For best results when converting to \fBtermcap\fP format, you should use both \fB\-C\fP and \fB\-r\fP. Normally a termcap description is limited to 1023 bytes. @INFOCMP@ trims away less essential parts to make it fit. If you are converting to one of the (rare) termcap implementations which accept an unlimited size of termcap, you may want to add the \fB\-T\fP option. More often however, you must help the termcap implementation, and trim excess whitespace (use the \fB\-0\fP option for that). .PP All padding information for strings will be collected together and placed at the beginning of the string where \fBtermcap\fR expects it. Mandatory padding (padding information with a trailing '/') will become optional. .PP All \fBtermcap\fR variables no longer supported by \fBterminfo\fR, but which are derivable from other \fBterminfo\fR variables, will be output. Not all \fBterminfo\fR capabilities will be translated; only those variables which were part of \fBtermcap\fR will normally be output. Specifying the \fB\-r\fR option will take off this restriction, allowing all capabilities to be output in \fItermcap\fR form. Normally you would use both the \fB\-C\fP and \fB\-r\fP options. The actual format used incorporates some improvements for escaped characters from terminfo format. For a stricter BSD-compatible translation, use the \fB\-K\fR option rather than \fB\-C\fP. .PP Note that because padding is collected to the beginning of the capability, not all capabilities are output. Mandatory padding is not supported. Because \fBtermcap\fR strings are not as flexible, it is not always possible to convert a \fBterminfo\fR string capability into an equivalent \fBtermcap\fR format. A subsequent conversion of the \fBtermcap\fR file back into \fBterminfo\fR format will not necessarily reproduce the original \fBterminfo\fR source. .PP Some common \fBterminfo\fR parameter sequences, their \fBtermcap\fR equivalents, and some terminal types which commonly have such sequences, are: . .TS center tab(/) ; l c l l l l. \fBterminfo/termcap\fR/Representative Terminals = \fB%p1%c/%.\fR/adm \fB%p1%d/%d\fR/hp, ANSI standard, vt100 \fB%p1%'x'%+%c/%+x\fR/concept \fB%i/%i\fRq/ANSI standard, vt100 \fB%p1%?%'x'%>%t%p1%'y'%+%;/%>xy\fR/concept \fB%p2\fR is printed before \fB%p1/%r\fR/hp .TE .SS Use= Option [\-u] The \fB\-u\fR option produces a \fBterminfo\fR source description of the first terminal \fItermname\fR which is relative to the sum of the descriptions given by the entries for the other terminals \fItermnames\fR. It does this by analyzing the differences between the first \fItermname\fR and the other \fItermnames\fR and producing a description with \fBuse=\fR fields for the other terminals. In this manner, it is possible to retrofit generic terminfo entries into a terminal's description. Or, if two similar terminals exist, but were coded at different times or by different people so that each description is a full description, using \fB@INFOCMP@\fR will show what can be done to change one description to be relative to the other. .PP A capability will get printed with an at-sign (@) if it no longer exists in the first \fItermname\fR, but one of the other \fItermname\fR entries contains a value for it. A capability's value gets printed if the value in the first \fItermname\fR is not found in any of the other \fItermname\fR entries, or if the first of the other \fItermname\fR entries that has this capability gives a different value for the capability than that in the first \fItermname\fR. .PP The order of the other \fItermname\fR entries is significant. Since the terminfo compiler \fB@TIC@\fR does a left-to-right scan of the capabilities, specifying two \fBuse=\fR entries that contain differing entries for the same capabilities will produce different results depending on the order that the entries are given in. \fB@INFOCMP@\fR will flag any such inconsistencies between the other \fItermname\fR entries as they are found. .PP Alternatively, specifying a capability \fIafter\fR a \fBuse=\fR entry that contains that capability will cause the second specification to be ignored. Using \fB@INFOCMP@\fR to recreate a description can be a useful check to make sure that everything was specified correctly in the original source description. .PP Another error that does not cause incorrect compiled files, but will slow down the compilation time, is specifying extra \fBuse=\fR fields that are superfluous. \fB@INFOCMP@\fR will flag any other \fItermname use=\fR fields that were not needed. .SS Changing Databases [\-A \fIdirectory\fR] [\-B \fIdirectory\fR] Like other \fBncurses\fP utilities, @INFOCMP@ looks for the terminal descriptions in several places. You can use the \fBTERMINFO\fP and \fBTERMINFO_DIRS\fP environment variables to override the compiled-in default list of places to search (see \fBcurses\fP(3X) for details). .PP You can also use the options \fB\-A\fR and \fB\-B\fR to override the list of places to search when comparing terminal descriptions: .bP The \fB\-A\fR option sets the location for the first \fItermname\fR .bP The \fB\-B\fR option sets the location for the other \fItermnames\fR. .PP Using these options, it is possible to compare descriptions for a terminal with the same name located in two different databases. For instance, you can use this feature for comparing descriptions for the same terminal created by different people. .SS Other Options .TP 5 \fB\-0\fR causes the fields to be printed on one line, without wrapping. .TP 5 \fB\-1\fR causes the fields to be printed out one to a line. Otherwise, the fields will be printed several to a line to a maximum width of 60 characters. .TP \fB\-a\fR tells \fB@INFOCMP@\fP to retain commented-out capabilities rather than discarding them. Capabilities are commented by prefixing them with a period. .TP \fB\-D\fR tells \fB@INFOCMP@\fP to print the database locations that it knows about, and exit. .TP 5 \fB\-E\fR Dump the capabilities of the given terminal as tables, needed in the C initializer for a TERMTYPE structure (the terminal capability structure in the \fB\fR). This option is useful for preparing versions of the curses library hardwired for a given terminal type. The tables are all declared static, and are named according to the type and the name of the corresponding terminal entry. .sp Before ncurses 5.0, the split between the \fB\-e\fP and \fB\-E\fP options was not needed; but support for extended names required making the arrays of terminal capabilities separate from the TERMTYPE structure. .TP 5 \fB\-e\fR Dump the capabilities of the given terminal as a C initializer for a TERMTYPE structure (the terminal capability structure in the \fB\fR). This option is useful for preparing versions of the curses library hardwired for a given terminal type. .TP 5 \fB\-F\fR compare terminfo files. This assumes that two following arguments are filenames. The files are searched for pairwise matches between entries, with two entries considered to match if any of their names do. The report printed to standard output lists entries with no matches in the other file, and entries with more than one match. For entries with exactly one match it includes a difference report. Normally, to reduce the volume of the report, use references are not resolved before looking for differences, but resolution can be forced by also specifying \fB\-r\fR. .TP 5 \fB\-f\fR Display complex terminfo strings which contain if/then/else/endif expressions indented for readability. .TP 5 \fB\-G\fR Display constant literals in decimal form rather than their character equivalents. .TP 5 \fB\-g\fR Display constant character literals in quoted form rather than their decimal equivalents. .TP 5 \fB\-i\fR Analyze the initialization (\fBis1\fR, \fBis2\fR, \fBis3\fR), and reset (\fBrs1\fR, \fBrs2\fR, \fBrs3\fR), strings in the entry, as well as those used for starting/stopping cursor-positioning mode (\fBsmcup\fP, \fBrmcup\fP) as well as starting/stopping keymap mode (\fBsmkx\fP, \fBrmkx\fP). .IP For each string, the code tries to analyze it into actions in terms of the other capabilities in the entry, certain X3.64/ISO 6429/ECMA\-48 capabilities, and certain DEC VT-series private modes (the set of recognized special sequences has been selected for completeness over the existing terminfo database). Each report line consists of the capability name, followed by a colon and space, followed by a printable expansion of the capability string with sections matching recognized actions translated into {}-bracketed descriptions. .IP Here is a list of the DEC/ANSI special sequences recognized: .TS center tab(/) ; l l l l. Action/Meaning = RIS/full reset SC/save cursor RC/restore cursor LL/home-down RSR/reset scroll region = DECSTR/soft reset (VT320) S7C1T/7-bit controls (VT220) = ISO DEC G0/enable DEC graphics for G0 ISO UK G0/enable UK chars for G0 ISO US G0/enable US chars for G0 ISO DEC G1/enable DEC graphics for G1 ISO UK G1/enable UK chars for G1 ISO US G1/enable US chars for G1 = DECPAM/application keypad mode DECPNM/normal keypad mode DECANSI/enter ANSI mode = ECMA[+\-]AM/keyboard action mode ECMA[+\-]IRM/insert replace mode ECMA[+\-]SRM/send receive mode ECMA[+\-]LNM/linefeed mode = DEC[+\-]CKM/application cursor keys DEC[+\-]ANM/set VT52 mode DEC[+\-]COLM/132-column mode DEC[+\-]SCLM/smooth scroll DEC[+\-]SCNM/reverse video mode DEC[+\-]OM/origin mode DEC[+\-]AWM/wraparound mode DEC[+\-]ARM/auto-repeat mode .TE .sp It also recognizes a SGR action corresponding to ANSI/ISO 6429/ECMA Set Graphics Rendition, with the values NORMAL, BOLD, UNDERLINE, BLINK, and REVERSE. All but NORMAL may be prefixed with `+' (turn on) or `\-' (turn off). .IP An SGR0 designates an empty highlight sequence (equivalent to {SGR:NORMAL}). .TP 5 \fB\-l\fR Set output format to terminfo. .TP 5 \fB\-p\fR Ignore padding specifications when comparing strings. .TP 5 \fB\-Q\fR \fIn\fR Rather than show source in terminfo (text) format, print the compiled (binary) format in hexadecimal or base64 form, depending on the option's value: .RS 8 .TP 3 1 hexadecimal .TP 3 2 base64 .TP 3 3 hexadecimal and base64 .RE .TP 5 \fB\-q\fR This makes the output a little shorter: .RS .bP Make the comparison listing shorter by omitting subheadings, and using "\-" for absent capabilities, "@" for canceled rather than "NULL". .bP Omit the "Reconstructed from" comment for source listings. .RE .TP 5 \fB\-R\fR\fIsubset\fR Restrict output to a given subset. This option is for use with archaic versions of terminfo like those on SVr1, Ultrix, or HP/UX that do not support the full set of SVR4/XSI Curses terminfo; and variants such as AIX that have their own extensions incompatible with SVr4/XSI. .IP Available terminfo subsets are "SVr1", "Ultrix", "HP", and "AIX"; see \fBterminfo\fR(\*n) for details. You can also choose the subset "BSD" which selects only capabilities with termcap equivalents recognized by 4.4BSD. .TP \fB\-s \fR\fI[d|i|l|c]\fR The \fB\-s\fR option sorts the fields within each type according to the argument below: .br .RS 5 .TP 5 \fBd\fR leave fields in the order that they are stored in the \fIterminfo\fR database. .TP 5 \fBi\fR sort by \fIterminfo\fR name. .TP 5 \fBl\fR sort by the long C variable name. .TP 5 \fBc\fR sort by the \fItermcap\fR name. .RE .IP If the \fB\-s\fR option is not given, the fields printed out will be sorted alphabetically by the \fBterminfo\fR name within each type, except in the case of the \fB\-C\fR or the \fB\-L\fR options, which cause the sorting to be done by the \fBtermcap\fR name or the long C variable name, respectively. .TP 5 \fB\-T\fR eliminates size-restrictions on the generated text. This is mainly useful for testing and analysis, since the compiled descriptions are limited (e.g., 1023 for termcap, 4096 for terminfo). .TP \fB\-t\fR tells \fB@TIC@\fP to discard commented-out capabilities. Normally when translating from terminfo to termcap, untranslatable capabilities are commented-out. .TP 5 \fB\-U\fR tells \fB@INFOCMP@\fP to not post-process the data after parsing the source file. This feature helps when comparing the actual contents of two source files, since it excludes the inferences that \fB@INFOCMP@\fP makes to fill in missing data. .TP 5 \fB\-V\fR reports the version of ncurses which was used in this program, and exits. .TP 5 \fB\-v\fR \fIn\fR prints out tracing information on standard error as the program runs. Higher values of n induce greater verbosity. .TP 5 \fB\-w\fR \fIwidth\fR changes the output to \fIwidth\fR characters. .TP \fB\-x\fR print information for user-defined capabilities. These are extensions to the terminfo repertoire which can be loaded using the \fB\-x\fR option of \fB@TIC@\fP. .SH FILES .TP 20 \*d Compiled terminal description database. .SH EXTENSIONS The \fB\-0\fR, \fB\-1\fR, \fB\-E\fR, \fB\-F\fR, \fB\-G\fR, \fB\-R\fR, \fB\-T\fR, \fB\-V\fR, \fB\-a\fR, \fB\-e\fR, \fB\-f\fR, \fB\-g\fR, \fB\-i\fR, \fB\-l\fR, \fB\-p\fR, \fB\-q\fR and \fB\-t\fR options are not supported in SVr4 curses. .PP The \fB\-r\fR option's notion of `termcap' capabilities is System V Release 4's. Actual BSD curses versions will have a more restricted set. To see only the 4.4BSD set, use \fB\-r\fR \fB\-RBSD\fR. .SH BUGS The \fB\-F\fR option of \fB@INFOCMP@\fR(1M) should be a \fB@TOE@\fR(1M) mode. .SH SEE ALSO \fB@CAPTOINFO@\fR(1M), \fB@INFOTOCAP@\fR(1M), \fB@TIC@\fR(1M), \fB@TOE@\fR(1M), \fBcurses\fR(3X), \fBterminfo\fR(\*n). .sp http://invisible-island.net/ncurses/tctest.html .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). .SH AUTHOR Eric S. Raymond and .br Thomas E. Dickey ncurses-6.0-20160213/man/curs_refresh.3x0000644000175100001440000001442612653156104016207 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2016 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_refresh.3x,v 1.16 2016/01/30 15:52:36 tom Exp $ .TH curs_refresh 3X "" .na .hy 0 .SH NAME \fBdoupdate\fR, \fBredrawwin\fR, \fBrefresh\fR, \fBwnoutrefresh\fR, \fBwredrawln\fR, \fBwrefresh\fR \- refresh \fBcurses\fR windows and lines .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint refresh(void);\fR .br \fBint wrefresh(WINDOW *win);\fR .br \fBint wnoutrefresh(WINDOW *win);\fR .br \fBint doupdate(void);\fR .br \fBint redrawwin(WINDOW *win);\fR .br \fBint wredrawln(WINDOW *win, int beg_line, int num_lines);\fR .br .SH DESCRIPTION .SS refresh/wrefresh The \fBrefresh\fR and \fBwrefresh\fR routines (or \fBwnoutrefresh\fR and \fBdoupdate\fR) must be called to get actual output to the terminal, as other routines merely manipulate data structures. The routine \fBwrefresh\fR copies the named window to the physical terminal screen, taking into account what is already there to do optimizations. The \fBrefresh\fR routine is the same, using \fBstdscr\fR as the default window. Unless \fBleaveok\fR has been enabled, the physical cursor of the terminal is left at the location of the cursor for that window. .SS wnoutrefresh/doupdate .PP The \fBwnoutrefresh\fR and \fBdoupdate\fR routines allow multiple updates with more efficiency than \fBwrefresh\fR alone. In addition to all the window structures, \fBcurses\fR keeps two data structures representing the terminal screen: a physical screen, describing what is actually on the screen, and a virtual screen, describing what the programmer wants to have on the screen. .PP The routine \fBwrefresh\fR works by first calling \fBwnoutrefresh\fR, which copies the named window to the virtual screen, and then calling \fBdoupdate\fR, which compares the virtual screen to the physical screen and does the actual update. If the programmer wishes to output several windows at once, a series of calls to \fBwrefresh\fR results in alternating calls to \fBwnoutrefresh\fR and \fBdoupdate\fR, causing several bursts of output to the screen. By first calling \fBwnoutrefresh\fR for each window, it is then possible to call \fBdoupdate\fR once, resulting in only one burst of output, with fewer total characters transmitted and less CPU time used. If the \fIwin\fR argument to \fBwrefresh\fR is the global variable \fBcurscr\fR, the screen is immediately cleared and repainted from scratch. .PP The phrase "copies the named window to the virtual screen" above is ambiguous. What actually happens is that all \fItouched\fR (changed) lines in the window are copied to the virtual screen. This affects programs that use overlapping windows; it means that if two windows overlap, you can refresh them in either order and the overlap region will be modified only when it is explicitly changed. (But see the section on \fBPORTABILITY\fR below for a warning about exploiting this behavior.) .SS wredrawln/redrawwin .PP The \fBwredrawln\fR routine indicates to \fBcurses\fR that some screen lines are corrupted and should be thrown away before anything is written over them. It touches the indicated lines (marking them changed). The routine \fBredrawwin\fR() touches the entire window. .SH RETURN VALUE Routines that return an integer return \fBERR\fR upon failure, and \fBOK\fR (SVr4 only specifies "an integer value other than \fBERR\fR") upon successful completion. .PP X/Open does not define any error conditions. In this implementation .RS 3 .TP 5 \fBwnoutrefresh\fP returns an error if the window pointer is null, or if the window is really a pad. .TP 5 \fBwredrawln\fP returns an error if the associated call to \fBtouchln\fP returns an error. .RE .SH NOTES Note that \fBrefresh\fR and \fBredrawwin\fR may be macros. .SH PORTABILITY The XSI Curses standard, Issue 4 describes these functions. .PP Whether \fBwnoutrefresh()\fR copies to the virtual screen the entire contents of a window or just its changed portions has never been well-documented in historic curses versions (including SVr4). It might be unwise to rely on either behavior in programs that might have to be linked with other curses implementations. Instead, you can do an explicit \fBtouchwin()\fR before the \fBwnoutrefresh()\fR call to guarantee an entire-contents copy anywhere. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_outopts\fR(3X) \fBcurs_variables\fR(3X). ncurses-6.0-20160213/man/curs_deleteln.3x0000644000175100001440000001012211476505074016340 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2007,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_deleteln.3x,v 1.13 2010/12/04 18:36:44 tom Exp $ .TH curs_deleteln 3X "" .SH NAME \fBdeleteln\fR, \fBwdeleteln\fR, \fBinsdelln\fR, \fBwinsdelln\fR, \fBinsertln\fR, \fBwinsertln\fR \- delete and insert lines in a \fBcurses\fR window .SH SYNOPSIS \fB#include \fR .sp \fBint deleteln(void);\fR .br \fBint wdeleteln(WINDOW *win);\fR .br \fBint insdelln(int n);\fR .br \fBint winsdelln(WINDOW *win, int n);\fR .br \fBint insertln(void);\fR .br \fBint winsertln(WINDOW *win);\fR .br .SH DESCRIPTION The \fBdeleteln\fR and \fBwdeleteln\fR routines delete the line under the cursor in the window; all lines below the current line are moved up one line. The bottom line of the window is cleared. The cursor position does not change. .PP The \fBinsdelln\fR and \fBwinsdelln\fR routines, for positive \fIn\fR, insert \fIn\fR lines into the specified window above the current line. The \fIn\fR bottom lines are lost. For negative \fIn\fR, delete \fIn\fR lines (starting with the one under the cursor), and move the remaining lines up. The bottom \fIn\fR lines are cleared. The current cursor position remains the same. .PP The \fBinsertln\fR and \fBwinsertln\fR routines insert a blank line above the current line and the bottom line is lost. .SH RETURN VALUE All routines return the integer \fBERR\fR upon failure and an \fBOK\fR (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful completion. .PP X/Open defines no error conditions. In this implementation, if the window parameter is null, an error is returned. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. The standard specifies that they return \fBERR\fR on failure, but specifies no error conditions. .SH NOTES Note that all but \fBwinsdelln\fR may be macros. .PP These routines do not require a hardware line delete or insert feature in the terminal. In fact, they will not use hardware line delete/insert unless \fBidlok(..., TRUE)\fR has been set on the current window. .SH SEE ALSO \fBcurses\fR(3X) ncurses-6.0-20160213/man/curs_window.3x0000644000175100001440000002136712553400763016064 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_window.3x,v 1.19 2015/07/21 08:25:23 tom Exp $ .TH curs_window 3X "" .na .hy 0 .SH NAME \fBnewwin\fR, \fBdelwin\fR, \fBmvwin\fR, \fBsubwin\fR, \fBderwin\fR, \fBmvderwin\fR, \fBdupwin\fR, \fBwsyncup\fR, \fBsyncok\fR, \fBwcursyncup\fR, \fBwsyncdown\fR \- create \fBcurses\fR windows .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBWINDOW *newwin(\fR \fBint \fP\fInlines\fP\fB, int \fP\fIncols\fP\fB,\fR \fBint \fP\fIbegin_y\fP\fB, int \fP\fIbegin_x\fP\fB);\fR .br \fBint delwin(WINDOW *\fP\fIwin\fP\fB);\fR .br \fBint mvwin(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR .br \fBWINDOW *subwin(WINDOW *\fP\fIorig\fP\fB,\fR \fBint \fP\fInlines\fP\fB, int \fP\fIncols\fP\fB,\fR \fBint \fP\fIbegin_y\fP\fB, int \fP\fIbegin_x\fP\fB);\fR .br \fBWINDOW *derwin(WINDOW *\fP\fIorig\fP\fB,\fR \fBint \fP\fInlines\fP\fB, int \fP\fIncols\fP\fB,\fR \fBint \fP\fIbegin_y\fP\fB, int \fP\fIbegin_x\fP\fB);\fR .br \fBint mvderwin(WINDOW *\fP\fIwin\fP\fB, int \fP\fIpar_y\fP\fB, int \fP\fIpar_x\fP\fB);\fR .br \fBWINDOW *dupwin(WINDOW *\fP\fIwin\fP\fB);\fR .br \fBvoid wsyncup(WINDOW *\fP\fIwin\fP\fB);\fR .br \fBint syncok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR .br \fBvoid wcursyncup(WINDOW *\fP\fIwin\fP\fB);\fR .br \fBvoid wsyncdown(WINDOW *\fP\fIwin\fP\fB);\fR .br .SH DESCRIPTION .SS newwin Calling \fBnewwin\fR creates and returns a pointer to a new window with the given number of lines and columns. The upper left-hand corner of the window is at .RS line \fIbegin\fR_\fIy\fR, .br column \fIbegin\fR_\fIx\fR .RE .PP If either \fInlines\fR or \fIncols\fR is zero, they default to .RS \fBLINES \-\fR \fIbegin\fR_\fIy\fR and .br \fBCOLS \-\fR \fIbegin\fR_\fIx\fR. .RE .PP A new full-screen window is created by calling \fBnewwin(0,0,0,0)\fR. .SS delwin .PP Calling \fBdelwin\fR deletes the named window, freeing all memory associated with it (it does not actually erase the window's screen image). Subwindows must be deleted before the main window can be deleted. .SS mvwin .PP Calling \fBmvwin\fR moves the window so that the upper left-hand corner is at position (\fIx\fR, \fIy\fR). If the move would cause the window to be off the screen, it is an error and the window is not moved. Moving subwindows is allowed, but should be avoided. .SS subwin .PP Calling \fBsubwin\fR creates and returns a pointer to a new window with the given number of lines, \fInlines\fR, and columns, \fIncols\fR. The window is at position (\fIbegin\fR_\fIy\fR, \fIbegin\fR_\fIx\fR) on the screen. The subwindow shares memory with the window \fIorig\fR, so that changes made to one window will affect both windows. When using this routine, it is necessary to call \fBtouchwin\fR or \fBtouchline\fR on \fIorig\fR before calling \fBwrefresh\fR on the subwindow. .SS derwin .PP Calling \fBderwin\fR is the same as calling \fBsubwin,\fR except that \fIbegin\fR_\fIy\fR and \fIbegin\fR_\fIx\fR are relative to the origin of the window \fIorig\fR rather than the screen. There is no difference between the subwindows and the derived windows. .PP Calling \fBmvderwin\fR moves a derived window (or subwindow) inside its parent window. The screen-relative parameters of the window are not changed. This routine is used to display different parts of the parent window at the same physical position on the screen. .SS dupwin .PP Calling \fBdupwin\fR creates an exact duplicate of the window \fIwin\fR. .SS wsyncup .PP Calling \fBwsyncup\fR touches all locations in ancestors of \fIwin\fR that are changed in \fIwin\fR. If \fBsyncok\fR is called with second argument \fBTRUE\fR then \fBwsyncup\fR is called automatically whenever there is a change in the window. .SS wsyncdown .PP The \fBwsyncdown\fR routine touches each location in \fIwin\fR that has been touched in any of its ancestor windows. This routine is called by \fBwrefresh\fR, so it should almost never be necessary to call it manually. .SS wcursyncup .PP The routine \fBwcursyncup\fR updates the current cursor position of all the ancestors of the window to reflect the current cursor position of the window. .SH RETURN VALUE Routines that return an integer return the integer \fBERR\fR upon failure and \fBOK\fR (SVr4 only specifies "an integer value other than \fBERR\fR") upon successful completion. .PP Routines that return pointers return \fBNULL\fR on error. .PP X/Open defines no error conditions. In this implementation .TP 5 \fBdelwin\fR returns an error if the window pointer is null, or if the window is the parent of another window. .TP 5 \fBderwin\fP returns an error if the parent window pointer is null, or if any of its ordinates or dimensions is negative, or if the resulting window does not fit inside the parent window. .TP 5 \fBdupwin\fP returns an error if the window pointer is null. .IP This implementation also maintains a list of windows, and checks that the pointer passed to \fBdelwin\fP is one that it created, returning an error if it was not.. .TP 5 \fBmvderwin\fP returns an error if the window pointer is null, or if some part of the window would be placed off-screen. .TP 5 \fBmvwin\fP returns an error if the window pointer is null, or if the window is really a pad, or if some part of the window would be placed off-screen. .TP 5 \fBnewwin\fP will fail if either of its beginning ordinates is negative, or if either the number of lines or columns is negative. .TP 5 \fBsyncok\fP returns an error if the window pointer is null. .TP 5 \fBsubwin\fP returns an error if the parent window pointer is null, or if any of its ordinates or dimensions is negative, or if the resulting window does not fit inside the parent window. .PP The functions which return a window pointer may also fail if there is insufficient memory for its data structures. Any of these functions will fail if the screen has not been initialized, i.e., with \fBinitscr\fP or \fBnewterm\fP. .SH NOTES If many small changes are made to the window, the \fBwsyncup\fR option could degrade performance. .PP Note that \fBsyncok\fR may be a macro. .SH BUGS The subwindow functions (\fIsubwin\fR, \fIderwin\fR, \fImvderwin\fR, \fBwsyncup\fR, \fBwsyncdown\fR, \fBwcursyncup\fR, \fBsyncok\fR) are flaky, incompletely implemented, and not well tested. .PP The System V curses documentation is very unclear about what \fBwsyncup\fR and \fBwsyncdown\fR actually do. It seems to imply that they are only supposed to touch exactly those lines that are affected by ancestor changes. The language here, and the behavior of the \fBcurses\fR implementation, is patterned on the XPG4 curses standard. The weaker XPG4 spec may result in slower updates. .SH PORTABILITY The XSI Curses standard, Issue 4 describes these functions. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_refresh\fR(3X), \fBcurs_touch\fR(3X), \fBcurs_variables\fR(3X) ncurses-6.0-20160213/man/curs_extend.3x0000644000175100001440000000714211476505074016043 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1999-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" Author: Thomas E. Dickey 1999-on .\" .\" $Id: curs_extend.3x,v 1.19 2010/12/04 18:36:44 tom Exp $ .TH curs_extend 3X "" .SH NAME \fBcurses_version\fP, \fBuse_extended_names\fP \- miscellaneous curses extensions . .SH SYNOPSIS \fB#include \fP .sp \fBconst char * curses_version(void);\fP .br \fBint use_extended_names(bool enable);\fP .SH DESCRIPTION These functions are extensions to the curses library which do not fit easily into other categories. .PP Use .I curses_version() to get the version number, including patch level of the library, e.g., .B 5.0.19991023 .PP The .I use_extended_names() function controls whether the calling application is able to use user-defined or nonstandard names which may be compiled into the terminfo description, i.e., via the terminfo or termcap interfaces. Normally these names are available for use, since the essential decision is made by using the \fB\-x\fP option of \fB@TIC@\fP to compile extended terminal definitions. However you can disable this feature to ensure compatibility with other implementations of curses. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on them be conditioned using NCURSES_VERSION. .SH SEE ALSO \fBcurs_getch\fR(3X), \fBcurs_mouse\fR(3X), \fBcurs_print\fR(3X), \fBcurs_util\fR(3X), \fBdefault_colors\fR(3X), \fBdefine_key\fR(3X), \fBkeybound\fR(3X), \fBkeyok\fR(3X), \fBresizeterm\fR(3X), \fBwresize\fR(3X). .SH AUTHOR Thomas Dickey. ncurses-6.0-20160213/man/curs_border_set.3x0000644000175100001440000001474512045321337016702 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2011,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_border_set.3x,v 1.11 2012/11/03 23:03:59 tom Exp $ .TH curs_border_set 3X "" .na .hy 0 .SH NAME \fBborder_set\fR, \fBwborder_set\fR, \fBbox_set\fR, \fBhline_set\fR, \fBwhline_set\fR, \fBmvhline_set\fR, \fBmvwhline_set\fR, \fBvline_set\fR, \fBwvline_set\fR, \fBmvvline_set\fR, \fBmvwvline_set\fR \- create \fBcurses\fR borders or lines using complex characters and renditions .ad .hy .SH SYNOPSIS .PP \fB#include \fR .sp \fBint border_set(\fR \fBconst cchar_t *\fR\fIls\fR, \fBconst cchar_t *\fR\fIrs\fR, \fBconst cchar_t *\fR\fIts\fR, \fBconst cchar_t *\fR\fIbs\fR, \fBconst cchar_t *\fR\fItl\fR, \fBconst cchar_t *\fR\fItr\fR, \fBconst cchar_t *\fR\fIbl\fR, \fBconst cchar_t *\fR\fIbr\fR \fB);\fR .br \fBint wborder_set(\fR \fBWINDOW *win\fR, \fBconst cchar_t *\fR\fIls\fR, \fBconst cchar_t *\fR\fIrs\fR, \fBconst cchar_t *\fR\fIts\fR, \fBconst cchar_t *\fR\fIbs\fR, \fBconst cchar_t *\fR\fItl\fR, \fBconst cchar_t *\fR\fItr\fR, \fBconst cchar_t *\fR\fIbl\fR, \fBconst cchar_t *\fR\fIbr\fR\fB);\fR .br \fBint box_set(\fR \fBWINDOW *win\fR, \fBconst cchar_t *\fR\fIverch\fR, \fBconst cchar_t *\fR\fIhorch\fR\fB);\fR .br \fBint hline_set(\fR \fBconst cchar_t *\fR\fIwch\fR, \fBint \fR\fIn\fR\fB);\fR .br \fBint whline_set(\fR \fBWINDOW *\fR\fIwin\fR, \fBconst cchar_t *\fR\fIwch\fR, \fBint \fR\fIn\fR\fB);\fR .br \fBint mvhline_set(\fR \fBint \fR\fIy\fR, \fBint \fR\fIx\fR, \fBconst cchar_t *\fR\fIwch\fR, \fBint \fR\fIn\fR\fB);\fR .br \fBint mvwhline_set(\fR \fBWINDOW *\fR\fIwin\fR, \fBint \fR\fIy\fR, \fBint \fR\fIx\fR, \fBconst cchar_t *\fR\fIwch\fR, \fBint \fR\fIn\fR\fB);\fR .br \fBint vline_set(\fR \fBconst cchar_t *\fR\fIwch\fR, \fBint \fR\fIn\fR\fB);\fR .br \fBint wvline_set(\fR \fBWINDOW *\fR\fIwin\fR, \fBconst cchar_t *\fR\fIwch\fR, \fBint \fR\fIn\fR\fB);\fR .br \fBint mvvline_set(\fR \fBint \fR\fIy\fR, \fBint \fR\fIx\fR, \fBconst cchar_t *\fR\fIwch\fR, \fBint \fR\fIn\fR\fB);\fR .br \fBint mvwvline_set(\fR \fBWINDOW *\fR\fIwin\fR, \fBint \fR\fIy\fR, \fBint \fR\fIx\fR, \fBconst cchar_t *\fR\fIwch\fR, \fBint \fR\fIn\fR\fB);\fR .br .SH DESCRIPTION .PP The \fBborder_set\fR and \fBwborder_set\fR functions draw a border around the edges of the current or specified window. These functions do not change the cursor position, and do not wrap. .PP Other than the window, each argument is a complex character with attributes: .RS \fIls\fR \- left side, .br \fIrs\fR \- right side, .br \fIts\fR \- top side, .br \fIbs\fR \- bottom side, .br \fItl\fR \- top left-hand corner, .br \fItr\fR \- top right-hand corner, .br \fIbl\fR \- bottom left-hand corner, and .br \fIbr\fR \- bottom right-hand corner. .RE .PP If any of these arguments is zero, then the corresponding default values (defined in \fBcurses.h\fR) are used instead: .RS \fBWACS_VLINE\fR, .br \fBWACS_VLINE\fR, .br \fBWACS_HLINE\fR, .br \fBWACS_HLINE\fR, .br \fBWACS_ULCORNER\fR, .br \fBWACS_URCORNER\fR, .br \fBWACS_LLCORNER\fR, and .br \fBWACS_LRCORNER\fR. .RE .PP \fBbox_set(\fR\fIwin\fR, \fIverch\fR\fB, \fR\fIhorch\fR\fB);\fR is a shorthand for the following call: .PP \fBwborder_set(\fR\fIwin\fR\fB, \fR\fIverch\fR\fB, \fR\fIverch\fR\fB,\fR \fIhorch\fR\fB, \fR\fIhorch\fR\fB, NULL, NULL, NULL, NULL);\fR .PP The \fB*line_set\fR functions use \fIwch\fR to draw a line starting at the current cursor position in the window. The line is at most \fIn\fR characters long or as many as fit into the window. The current cursor position is not changed. .PP The \fBhline_set\fR, \fBmvhline_set\fR, \fBmvwhline_set\fR, and \fBwhline_set\fR functions draw a line proceeding toward the last column of the same line. .PP The \fBvline_set\fR, \fBmvvline_set\fR, \fBmvwvline_set\fR, and \fBwvline_set\fR functions draw a line proceeding toward the last line of the window. .br .SH NOTES .PP Note that \fBborder_set\fR, \fBhline_set\fR, \fBmvhline_set\fR, \fBmvvline_set\fR, \fBmvwhline_set\fR, \fBmvwvline_set\fR, and \fBvline_set\fR may be macros. .br .SH RETURN VALUE .PP Upon successful completion, these functions return \fBOK\fR. Otherwise, they return \fBERR\fR. .PP Functions using a window parameter return an error if it is null. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH SEE ALSO \fBncurses\fR(3X), \fBcurs_add_wch\fR(3X), \fBcurs_border\fR(3X), \fBcurs_outopts\fR(3X) ncurses-6.0-20160213/man/form_post.3x0000644000175100001440000000715012630646001015514 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_post.3x,v 1.10 2015/12/05 20:41:37 jmc Exp $ .TH form_post 3X "" .SH NAME \fBpost_form\fR, \fBunpost_form\fR \- write or erase forms from associated subwindows .SH SYNOPSIS \fB#include \fR .br int post_form(FORM *form); .br int unpost_form(FORM *form); .br .SH DESCRIPTION The function \fBpost_form\fR displays a form to its associated subwindow. To trigger physical display of the subwindow, use \fBrefresh\fR or some equivalent \fBcurses\fR routine (the implicit \fBdoupdate\fR triggered by an \fBcurses\fR input request will do). .PP The function \fBunpost_form\fR erases form from its associated subwindow. .SH RETURN VALUE These routines return one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_BAD_STATE Routine was called from an initialization or termination function. .TP 5 .B E_NOT_POSTED The form has not been posted. .TP 5 .B E_NOT_CONNECTED No items are connected to the form. .TP 5 .B E_NO_ROOM Form is too large for its window. .TP 5 .B E_POSTED The form has already been posted. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). . .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/mitem_opts.3x0000644000175100001440000000717012630673165015701 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: mitem_opts.3x,v 1.12 2015/12/05 23:42:45 tom Exp $ .TH mitem_opts 3X "" .SH NAME \fBset_item_opts\fP, \fBitem_opts_on\fP, \fBitem_opts_off\fP, \fBitem_opts\fR \- set and get menu item options .SH SYNOPSIS \fB#include \fR .br int set_item_opts(ITEM *item, Item_Options opts); .br int item_opts_on(ITEM *item, Item_Options opts); .br int item_opts_off(ITEM *item, Item_Options opts); .br Item_Options item_opts(const ITEM *item); .br .SH DESCRIPTION The function \fBset_item_opts\fR sets all the given item's option bits (menu option bits may be logically-OR'ed together). .PP The function \fBitem_opts_on\fR turns on the given option bits, and leaves others alone. .PP The function \fBitem_opts_off\fR turns off the given option bits, and leaves others alone. .PP The function \fBitem_opts\fR returns the item's current option bits. .PP There is only one defined option bit mask, \fBO_SELECTABLE\fR. When this is on, the item may be selected during menu processing. This option defaults to on. .SH RETURN VALUE Except for \fBitem_opts\fR, each routine returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/mitem_new.3x0000644000175100001440000000752212630673165015506 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: mitem_new.3x,v 1.13 2015/12/05 23:42:45 tom Exp $ .TH mitem_new 3X "" .SH NAME \fBnew_item\fP, \fBfree_item\fR \- create and destroy menu items .SH SYNOPSIS \fB#include \fR .br ITEM *new_item(const char *name, const char *description); .br int free_item(ITEM *item); .br .SH DESCRIPTION The function \fBnew_item\fR allocates a new item and initializes it from the \fBname\fR and \fBdescription\fR pointers. Please notice that the item stores only the pointers to the name and description. Those pointers must be valid during the lifetime of the item. So you should be very careful with names or descriptions allocated on the stack of some routines. .br The function \fBfree_item\fR de-allocates an item. Please notice that it is the responsibility of the application to release the memory for the name or the description of the item. .SH RETURN VALUE The function \fBnew_item\fR returns \fBNULL\fR on error. It sets errno according to the function's failure: .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_SYSTEM_ERROR System error occurred, e.g., malloc failure. .PP The function \fBfree_item\fR returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_CONNECTED Item is connected to a menu. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/menu_items.3x0000644000175100001440000000753512630673624015673 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2012,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_items.3x,v 1.11 2015/12/05 23:47:32 tom Exp $ .TH menu_items 3X "" .SH NAME \fBset_menu_items\fR, \fBmenu_items\fR, \fBitem_count\fP \- make and break connections between items and menus .SH SYNOPSIS \fB#include \fR .br int set_menu_items(MENU *menu, ITEM **items); .br ITEM **menu_items(const MENU *menu); .br int item_count(const MENU *menu); .br .SH DESCRIPTION The function \fBset_menu_items\fR changes the item pointer array of the given \fImenu\fR. The array must be terminated by a \fBNULL\fR. .PP The function \fBmenu_items\fR returns the item array of the given menu. .PP The function \fBitem_count\fR returns the count of items in \fImenu\fR. .SH RETURN VALUE The function \fBmenu_items\fR returns a pointer (which may be \fBNULL\fR). It does not set errno. .PP The function \fBitem_count\fR returns \fBERR\fR (the general \fBcurses\fR error return value) if its \fImenu\fP parameter is \fBNULL\fP. .PP The function \fBset_menu_items\fR returns one of the following codes on error: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_NOT_CONNECTED No items are connected to the menu. .TP 5 .B E_POSTED The menu is already posted. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). . .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .PP The SVr4 menu library documentation specifies the \fBitem_count\fR error value as \-1 (which is the value of \fBERR\fR). .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/menu_mark.3x0000644000175100001440000000744212630673165015501 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_mark.3x,v 1.12 2015/12/05 23:42:45 tom Exp $ .TH menu_mark 3X "" .SH NAME \fBset_menu_mark\fP, \fBmenu_mark\fR \- get and set the menu mark string .SH SYNOPSIS \fB#include \fR .br int set_menu_mark(MENU *menu, const char *mark); .br const char *menu_mark(const MENU *menu); .br .SH DESCRIPTION In order to make menu selections visible on older terminals without highlighting or color capability, the menu library marks selected items in a menu with a prefix string. .PP The function \fBset_menu_mark\fR sets the mark string for the given menu. Calling \fBset_menu_mark\fR with a null menu item will abolish the mark string. Note that changing the length of the mark string for a menu while the menu is posted is likely to produce unhelpful behavior. .PP The default string is "\-" (a dash). Calling \fBset_menu_mark\fR with a non-\fBNULL\fR menu argument will change this default. .PP The function \fBmenu_mark\fR returns the menu's mark string (or \fBNULL\fR if there is none). .SH RETURN VALUE The function \fBmenu_mark\fR returns a pointer (which may be \fBNULL\fR). It does not set errno. .PP The function \fBset_menu_mark\fR may return the following error codes: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_addch.3x0000644000175100001440000002122212572655365015621 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_addch.3x,v 1.37 2015/09/05 21:13:25 tom Exp $ .TH curs_addch 3X "" .de bP .IP \(bu 4 .. .SH NAME \fBaddch\fR, \fBwaddch\fR, \fBmvaddch\fR, \fBmvwaddch\fR, \fBechochar\fR, \fBwechochar\fR \- add a character (with attributes) to a \fBcurses\fR window, then advance the cursor .SH SYNOPSIS \fB#include \fR .PP \fBint addch(const chtype ch);\fR .br \fBint waddch(WINDOW *win, const chtype ch);\fR .br \fBint mvaddch(int y, int x, const chtype ch);\fR .br \fBint mvwaddch(WINDOW *win, int y, int x, const chtype ch);\fR .br \fBint echochar(const chtype ch);\fR .br \fBint wechochar(WINDOW *win, const chtype ch);\fR .br .SH DESCRIPTION .SS Adding characters The \fBaddch\fR, \fBwaddch\fR, \fBmvaddch\fR and \fBmvwaddch\fR routines put the character \fIch\fR into the given window at its current window position, which is then advanced. They are analogous to \fBputchar\fR in \fBstdio\fR(3). If the advance is at the right margin: .bP The cursor automatically wraps to the beginning of the next line. .bP At the bottom of the current scrolling region, and if \fBscrollok\fR is enabled, the scrolling region is scrolled up one line. .bP If \fBscrollok\fR is not enabled, writing a character at the lower right margin succeeds. However, an error is returned because it is not possible to wrap to a new line .PP If \fIch\fR is a tab, newline, carriage return or backspace, the cursor is moved appropriately within the window: .bP Backspace moves the cursor one character left; at the left edge of a window it does nothing. .bP Carriage return moves the cursor to the window left margin on the current line. .bP Newline does a \fBclrtoeol\fR, then moves the cursor to the window left margin on the next line, scrolling the window if on the last line. .bP Tabs are considered to be at every eighth column. The tab interval may be altered by setting the \fBTABSIZE\fR variable. .PP If \fIch\fR is any other control character, it is drawn in \fB^\fR\fIX\fR notation. Calling \fBwinch\fR after adding a control character does not return the character itself, but instead returns the ^-representation of the control character. .PP Video attributes can be combined with a character argument passed to \fBaddch\fR or related functions by logical-ORing them into the character. (Thus, text, including attributes, can be copied from one place to another using \fBinch\fR and \fBaddch\fR.) See the \fBcurs_attr\fR(3X) page for values of predefined video attribute constants that can be usefully OR'ed into characters. .SS Echoing characters .PP The \fBechochar\fR and \fBwechochar\fR routines are equivalent to a call to \fBaddch\fR followed by a call to \fBrefresh\fR, or a call to \fBwaddch\fR followed by a call to \fBwrefresh\fR. The knowledge that only a single character is being output is used and, for non-control characters, a considerable performance gain may be seen by using these routines instead of their equivalents. .SS Line Graphics The following variables may be used to add line drawing characters to the screen with routines of the \fBaddch\fR family. The default character listed below is used if the \fBacsc\fR capability does not define a terminal-specific replacement for it, or if the terminal and locale configuration requires Unicode but the library is unable to use Unicode. .PP The names are taken from VT100 nomenclature. .PP .TS l l l _ _ _ l l l. \fIName\fR \fIDefault\fR \fIDescription\fR ACS_BLOCK # solid square block ACS_BOARD # board of squares ACS_BTEE + bottom tee ACS_BULLET o bullet ACS_CKBOARD : checker board (stipple) ACS_DARROW v arrow pointing down ACS_DEGREE ' degree symbol ACS_DIAMOND + diamond ACS_GEQUAL > greater-than-or-equal-to ACS_HLINE \- horizontal line ACS_LANTERN # lantern symbol ACS_LARROW < arrow pointing left ACS_LEQUAL < less-than-or-equal-to ACS_LLCORNER + lower left-hand corner ACS_LRCORNER + lower right-hand corner ACS_LTEE + left tee ACS_NEQUAL ! not-equal ACS_PI * greek pi ACS_PLMINUS # plus/minus ACS_PLUS + plus ACS_RARROW > arrow pointing right ACS_RTEE + right tee ACS_S1 \- scan line 1 ACS_S3 \- scan line 3 ACS_S7 \- scan line 7 ACS_S9 \&_ scan line 9 ACS_STERLING f pound-sterling symbol ACS_TTEE + top tee ACS_UARROW ^ arrow pointing up ACS_ULCORNER + upper left-hand corner ACS_URCORNER + upper right-hand corner ACS_VLINE | vertical line .TE .SH RETURN VALUE All routines return the integer \fBERR\fR upon failure and \fBOK\fR on success (the SVr4 manuals specify only "an integer value other than \fBERR\fR") upon successful completion, unless otherwise noted in the preceding routine descriptions. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES Note that \fBaddch\fR, \fBmvaddch\fR, \fBmvwaddch\fR, and \fBechochar\fR may be macros. .SH PORTABILITY All these functions are described in the XSI Curses standard, Issue 4. The defaults specified for forms-drawing characters apply in the POSIX locale. .LP X/Open Curses states that the \fIACS_\fP definitions are \fBchar\fP constants. For the wide-character implementation (see \fBcurs_add_wch\fP), there are analogous \fIWACS_\fP definitions which are \fBcchar_t\fP constants. .LP Some ACS symbols (ACS_S3, ACS_S7, ACS_LEQUAL, ACS_GEQUAL, ACS_PI, ACS_NEQUAL, ACS_STERLING) were not documented in any publicly released System V. However, many publicly available terminfos include \fBacsc\fR strings in which their key characters (pryz{|}) are embedded, and a second-hand list of their character descriptions has come to light. The ACS-prefixed names for them were invented for \fBncurses\fR(3X). .LP The \fIdisplayed\fP values for the \fIACS_\fP and \fIWACS_\fP constants depend on .bP the library configuration, i.e., \fBncurses\fP versus \fBncursesw\fP, where the latter is capable of displaying Unicode while the former is not, and .bP whether the \fIlocale\fP uses UTF-8 encoding. .LP In certain cases, the terminal is unable to display line-drawing characters except by using UTF-8 (see the discussion of \fBNCURSES_NO_UTF8_ACS\fP in ncurses(3X)). .LP The \fBTABSIZE\fR variable is implemented in some versions of curses, but is not part of X/Open curses. .LP If \fIch\fR is a carriage return, the cursor is moved to the beginning of the current row of the window. This is true of other implementations, but is not documented. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_attr\fR(3X), \fBcurs_clear\fR(3X), \fBcurs_inch\fR(3X), \fBcurs_outopts\fR(3X), \fBcurs_refresh\fR(3X), \fBcurs_variables\fR(3X), \fBputc\fR(3). .PP Comparable functions in the wide-character (ncursesw) library are described in \fBcurs_add_wch\fR(3X). ncurses-6.0-20160213/man/curs_delch.3x0000644000175100001440000000675611476505074015645 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_delch.3x,v 1.11 2010/12/04 18:36:44 tom Exp $ .TH curs_delch 3X "" .SH NAME \fBdelch\fR, \fBwdelch\fR, \fBmvdelch\fR, \fBmvwdelch\fR \- delete character under the cursor in a \fBcurses\fR window .SH SYNOPSIS \fB#include \fR .sp \fBint delch(void);\fR .br \fBint wdelch(WINDOW *win);\fR .br \fBint mvdelch(int y, int x);\fR .br \fBint mvwdelch(WINDOW *win, int y, int x);\fR .br .SH DESCRIPTION These routines delete the character under the cursor; all characters to the right of the cursor on the same line are moved to the left one position and the last character on the line is filled with a blank. The cursor position does not change (after moving to \fIy\fR, \fIx\fR, if specified). (This does not imply use of the hardware delete character feature.) .SH RETURN VALUE All routines return the integer \fBERR\fR upon failure and an \fBOK\fR (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful completion. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES Note that \fBdelch\fR, \fBmvdelch\fR, and \fBmvwdelch\fR may be macros. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. The standard specifies that they return \fBERR\fR on failure, but specifies no error conditions. .SH SEE ALSO \fBcurses\fR(3X) ncurses-6.0-20160213/man/form_userptr.3x0000644000175100001440000000640512630673165016250 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_userptr.3x,v 1.14 2015/12/05 23:42:45 tom Exp $ .TH form_userptr 3X "" .SH NAME \fBset_form_userptr\fP, \fBform_userptr\fR \- associate application data with a form item .SH SYNOPSIS \fB#include \fR .br int set_form_userptr(FORM *form, void *userptr); .br void* form_userptr(const FORM *form); .br .SH DESCRIPTION Every form and every form item has a field that can be used to hold application-specific data (that is, the form-driver code leaves it alone). These functions get and set the form user pointer field. .SH RETURN VALUE The function \fBform_userptr\fR returns a pointer (which may be \fBNULL\fR). It does not set errno. .PP The function \fBset_form_userptr\fR returns \fBE_OK\fP (success). .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .PP The user pointer is a void pointer. We chose not to leave it as a char pointer for SVr4 compatibility. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_outopts.3x0000644000175100001440000002271012553310417016257 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_outopts.3x,v 1.26 2015/07/21 00:23:43 tom Exp $ .TH curs_outopts 3X "" .na .hy 0 .SH NAME \fBclearok\fR, \fBidlok\fR, \fBidcok\fR, \fBimmedok\fR, \fBleaveok\fR, \fBsetscrreg\fR, \fBwsetscrreg\fR, \fBscrollok\fR, \fBnl\fR, \fBnonl\fR \- \fBcurses\fR output options .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint clearok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR .br \fBint idlok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR .br \fBvoid idcok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR .br \fBvoid immedok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR .br \fBint leaveok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR .br \fBint setscrreg(int \fP\fItop\fP\fB, int \fP\fIbot\fP\fB);\fR .br \fBint wsetscrreg(WINDOW *\fP\fIwin\fP\fB, int \fP\fItop\fP\fB, int \fP\fIbot\fP\fB);\fR .br \fBint scrollok(WINDOW *\fP\fIwin\fP\fB, bool \fP\fIbf\fP\fB);\fR .br \fBint nl(void);\fR .br \fBint nonl(void);\fR .br .SH DESCRIPTION These routines set options that change the style of output within \fBcurses\fR. All options are initially \fBFALSE\fR, unless otherwise stated. It is not necessary to turn these options off before calling \fBendwin\fR. .SS clearok .PP If \fBclearok\fR is called with \fBTRUE\fR as argument, the next call to \fBwrefresh\fR with this window will clear the screen completely and redraw the entire screen from scratch. This is useful when the contents of the screen are uncertain, or in some cases for a more pleasing visual effect. If the \fIwin\fR argument to \fBclearok\fR is the global variable \fBcurscr\fR, the next call to \fBwrefresh\fR with any window causes the screen to be cleared and repainted from scratch. .SS idlok .PP If \fBidlok\fR is called with \fBTRUE\fR as second argument, \fBcurses\fR considers using the hardware insert/delete line feature of terminals so equipped. Calling \fBidlok\fR with \fBFALSE\fR as second argument disables use of line insertion and deletion. This option should be enabled only if the application needs insert/delete line, for example, for a screen editor. It is disabled by default because insert/delete line tends to be visually annoying when used in applications where it is not really needed. If insert/delete line cannot be used, \fBcurses\fR redraws the changed portions of all lines. .SS idcok .PP If \fBidcok\fR is called with \fBFALSE\fR as second argument, \fBcurses\fR no longer considers using the hardware insert/delete character feature of terminals so equipped. Use of character insert/delete is enabled by default. Calling \fBidcok\fR with \fBTRUE\fR as second argument re-enables use of character insertion and deletion. .SS immedok .PP If \fBimmedok\fR is called with \fBTRUE as argument\fR, any change in the window image, such as the ones caused by \fBwaddch, wclrtobot, wscrl\fR, etc., automatically cause a call to \fBwrefresh\fR. However, it may degrade performance considerably, due to repeated calls to \fBwrefresh\fR. It is disabled by default. .SS leaveok .PP Normally, the hardware cursor is left at the location of the window cursor being refreshed. The \fBleaveok\fR option allows the cursor to be left wherever the update happens to leave it. It is useful for applications where the cursor is not used, since it reduces the need for cursor motions. .SS setscrreg .PP The \fBsetscrreg\fR and \fBwsetscrreg\fR routines allow the application programmer to set a software scrolling region in a window. The \fItop\fR and \fIbot\fR parameters are the line numbers of the top and bottom margin of the scrolling region. (Line 0 is the top line of the window.) If this option and \fBscrollok\fR are enabled, an attempt to move off the bottom margin line causes all lines in the scrolling region to scroll one line in the direction of the first line. Only the text of the window is scrolled. (Note that this has nothing to do with the use of a physical scrolling region capability in the terminal, like that in the VT100. If \fBidlok\fR is enabled and the terminal has either a scrolling region or insert/delete line capability, they will probably be used by the output routines.) .SS scrollok .PP The \fBscrollok\fR option controls what happens when the cursor of a window is moved off the edge of the window or scrolling region, either as a result of a newline action on the bottom line, or typing the last character of the last line. If disabled, (\fIbf\fR is \fBFALSE\fR), the cursor is left on the bottom line. If enabled, (\fIbf\fR is \fBTRUE\fR), the window is scrolled up one line (Note that to get the physical scrolling effect on the terminal, it is also necessary to call \fBidlok\fR). .SS nl, nonl .PP The \fBnl\fR and \fBnonl\fR routines control whether the underlying display device translates the return key into newline on input, and whether it translates newline into return and line-feed on output (in either case, the call \fBaddch('\\n')\fR does the equivalent of return and line feed on the virtual screen). Initially, these translations do occur. If you disable them using \fBnonl\fR, \fBcurses\fR will be able to make better use of the line-feed capability, resulting in faster cursor motion. Also, \fBcurses\fR will then be able to detect the return key. .SH RETURN VALUE The functions \fBsetscrreg\fR and \fBwsetscrreg\fR return \fBOK\fR upon success and \fBERR\fR upon failure. All other routines that return an integer always return \fBOK\fR. .PP X/Open Curses does not define any error conditions. .PP In this implementation, those functions that have a window pointer will return an error if the window pointer is null. .RS .TP 5 .B wclrtoeol returns an error if the cursor position is about to wrap. .TP 5 .B wsetscrreg returns an error if the scrolling region limits extend outside the window. .RE .PP X/Open does not define any error conditions. This implementation returns an error if the window pointer is null. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. .PP The XSI Curses standard is ambiguous on the question of whether \fBraw\fR() should disable the CRLF translations controlled by \fBnl\fR() and \fBnonl\fR(). BSD curses did turn off these translations; AT&T curses (at least as late as SVr1) did not. We choose to do so, on the theory that a programmer requesting raw input wants a clean (ideally 8-bit clean) connection that the operating system will not alter. .PP Some historic curses implementations had, as an undocumented feature, the ability to do the equivalent of \fBclearok(..., 1)\fR by saying \fBtouchwin(stdscr)\fR or \fBclear(stdscr)\fR. This will not work under ncurses. .PP Earlier System V curses implementations specified that with \fBscrollok\fR enabled, any window modification triggering a scroll also forced a physical refresh. XSI Curses does not require this, and \fBncurses\fR avoids doing it to perform better vertical-motion optimization at \fBwrefresh\fR time. .PP The XSI Curses standard does not mention that the cursor should be made invisible as a side-effect of \fBleaveok\fR. SVr4 curses documentation does this, but the code does not. Use \fBcurs_set\fR to make the cursor invisible. .SH NOTES Note that \fBclearok\fR, \fBleaveok\fR, \fBscrollok\fR, \fBidcok\fR, \fBnl\fR, \fBnonl\fR and \fBsetscrreg\fR may be macros. .PP The \fBimmedok\fR routine is useful for windows that are used as terminal emulators. .SH SEE ALSO .na \fBcurses\fR(3X), \fBcurs_addch\fR(3X), \fBcurs_clear\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_scroll\fR(3X), \fBcurs_refresh\fR(3X), \fBcurs_variables\fR(3X). ncurses-6.0-20160213/man/captoinfo.1m0000644000175100001440000001500411476505074015461 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2007,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: captoinfo.1m,v 1.25 2010/12/04 18:36:44 tom Exp $ .TH @CAPTOINFO@ 1M "" .ds n 5 .ds d @TERMINFO@ .SH NAME \fB@CAPTOINFO@\fR \- convert a \fItermcap\fR description into a \fIterminfo\fR description .SH SYNOPSIS \fB@CAPTOINFO@\fR [\fB\-v\fR\fIn\fR \fIwidth\fR] [\fB\-V\fR] [\fB\-1\fR] [\fB\-w\fR \fIwidth\fR] \fIfile\fR . . . .SH DESCRIPTION \fB@CAPTOINFO@\fR looks in each given text \fIfile\fR for \fBtermcap\fR descriptions. For each one found, an equivalent \fBterminfo\fR description is written to standard output. Termcap \fBtc\fR capabilities are translated directly to terminfo \fBuse\fR capabilities. .PP If no \fIfile\fR is given, then the environment variable \fBTERMCAP\fR is used for the filename or entry. If \fBTERMCAP\fR is a full pathname to a file, only the terminal whose name is specified in the environment variable \fBTERM\fR is extracted from that file. If the environment variable \fBTERMCAP\fR is not set, then the file \fB\*d\fR is read. .TP 5 \fB\-v\fR print out tracing information on standard error as the program runs. .TP 5 \fB\-V\fR print out the version of the program in use on standard error and exit. .TP 5 \fB\-1\fR cause the fields to print out one to a line. Otherwise, the fields will be printed several to a line to a maximum width of 60 characters. .TP 5 \fB\-w\fR change the output to \fIwidth\fR characters. .SH FILES .TP 20 \*d Compiled terminal description database. .SH TRANSLATIONS FROM NONSTANDARD CAPABILITIES .PP Some obsolete nonstandard capabilities will automatically be translated into standard (SVr4/XSI Curses) terminfo capabilities by \fB@CAPTOINFO@\fR. Whenever one of these automatic translations is done, the program will issue an notification to stderr, inviting the user to check that it has not mistakenly translated a completely unknown and random capability and/or syntax error. .PP .TS H c c c c c c c c l l l l. Nonstd Std From Terminfo name name capability _ BO mr AT&T enter_reverse_mode CI vi AT&T cursor_invisible CV ve AT&T cursor_normal DS mh AT&T enter_dim_mode EE me AT&T exit_attribute_mode FE LF AT&T label_on FL LO AT&T label_off XS mk AT&T enter_secure_mode EN @7 XENIX key_end GE ae XENIX exit_alt_charset_mode GS as XENIX enter_alt_charset_mode HM kh XENIX key_home LD kL XENIX key_dl PD kN XENIX key_npage PN po XENIX prtr_off PS pf XENIX prtr_on PU kP XENIX key_ppage RT @8 XENIX kent UP ku XENIX kcuu1 KA k; Tek key_f10 KB F1 Tek key_f11 KC F2 Tek key_f12 KD F3 Tek key_f13 KE F4 Tek key_f14 KF F5 Tek key_f15 BC Sb Tek set_background FC Sf Tek set_foreground HS mh Iris enter_dim_mode .TE .PP XENIX termcap also used to have a set of extension capabilities for forms drawing, designed to take advantage of the IBM PC high-half graphics. They were as follows: .PP .TS H c c l l. Cap Graphic _ G2 upper left G3 lower left G1 upper right G4 lower right GR pointing right GL pointing left GU pointing up GD pointing down GH horizontal line GV vertical line GC intersection G6 upper left G7 lower left G5 upper right G8 lower right Gr tee pointing right Gr tee pointing left Gu tee pointing up Gd tee pointing down Gh horizontal line Gv vertical line Gc intersection GG acs magic cookie count .TE .PP If the single-line capabilities occur in an entry, they will automatically be composed into an \fIacsc\fR string. The double-line capabilities and \fBGG\fR are discarded with a warning message. .PP IBM's AIX has a terminfo facility descended from SVr1 terminfo but incompatible with the SVr4 format. The following AIX extensions are automatically translated: .TS c c l l. IBM XSI _ ksel kslt kbtab kcbt font0 s0ds font1 s1ds font2 s2ds font3 s3ds .TE .PP Additionally, the AIX \fIbox1\fR capability will be automatically translated to an \fIacsc\fR string. .PP Hewlett-Packard's terminfo library supports two nonstandard terminfo capabilities \fImeml\fR (memory lock) and \fImemu\fR (memory unlock). These will be discarded with a warning message. .SH NOTES This utility is actually a link to \fB@TIC@\fR(1M), running in \fI\-I\fR mode. You can use other \fB@TIC@\fR options such as \fB\-f\fR and \fB\-x\fR. .PP The trace option is not identical to SVr4's. Under SVr4, instead of following the \fB\-v\fR with a trace level n, you repeat it n times. .SH SEE ALSO \fB@INFOCMP@\fR(1M), \fBcurses\fR(3X), \fBterminfo\fR(\*n) .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). .SH AUTHOR Eric S. Raymond and .br Thomas E. Dickey ncurses-6.0-20160213/man/curs_threads.3x0000644000175100001440000003662012630630450016177 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2008-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_threads.3x,v 1.23 2015/12/05 18:47:04 tom Exp $ .TH curs_threads 3X "" .de bP .IP \(bu 4 .. .na .hy 0 .SH NAME \fBcurs_threads\fR \- \fBcurses\fR thread support .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBtypedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);\fR .br \fBtypedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);\fR .br \fBint get_escdelay(void);\fR .br \fBint set_escdelay(int size);\fR .br \fBint set_tabsize(int size);\fR .br \fBint use_screen(SCREEN *scr, NCURSES_SCREEN_CB func, void *data);\fR .br \fBint use_window(WINDOW *win, NCURSES_WINDOW_CB func, void *data);\fR .br .SH DESCRIPTION This implementation can be configured to provide rudimentary support for multi-threaded applications. This makes a different set of libraries, e.g., \fIlibncursest\fP since the binary interfaces are different. .PP Rather than modify the interfaces to pass a thread specifier to each function, it adds a few functions which can be used in any configuration which hide the mutex's needed to prevent concurrent use of the global variables when configured for threading. .PP In addition to forcing access to members of the \fBWINDOW\fP structure to be via functions (see \fBcurs_opaque\fP(3X)), it makes functions of the common global variables, e.g., COLORS, COLOR_PAIRS, COLS, ESCDELAY, LINES, TABSIZE curscr, newscr and ttytype. Those variables are maintained as read-only values, stored in the \fBSCREEN\fP structure. .PP Even this is not enough to make a thread-safe application using curses. A multi-threaded application would be expected to have threads updating separate windows (within the same device), or updating on separate screens (on different devices). Also, a few of the global variables are considered writable by some applications. The functions described here address these special situations. .PP The ESCDELAY and TABSIZE global variables are modified by some applications. To modify them in any configuration, use the \fBset_escdelay\fP or \fBset_tabsize\fP functions. Other global variables are not modifiable. .PP The \fBget_escdelay\fP function returns the value for ESCDELAY. .PP The \fBuse_window\fP and \fBuse_screen\fP functions provide coarse granularity mutexes for their respective \fBWINDOW\fP and \fBSCREEN\fP parameters, and call a user-supplied function, passing it a \fIdata\fP parameter, and returning the value from the user-supplied function to the application. .\" *************************************************************************** .SS USAGE All of the ncurses library functions assume that the locale is not altered during operation. In addition, they use data which is maintained within a hierarchy of scopes. .RS 3 .bP global data, e.g., used in the low-level terminfo or termcap interfaces. .bP terminal data, e.g., associated with a call to \fIset_curterm\fP. The terminal data are initialized when screens are created. .bP screen data, e.g., associated with a call to \fInewterm\fP or \fIinitscr\fP. .bP window data, e.g., associated with a call to \fInewwin\fP or \fIsubwin\fP. Windows are associated with screens. Pads are not necessarily associated with a particular screen. .IP Most curses applications operate on one or more windows within a single screen. .bP reentrant, i.e., it uses only the data passed as parameters. .RE .PP This table lists the scope of data used for each symbol in the ncurses library when it is configured to support threading: .TS center tab(/); l l l l . Symbol/Scope = BC/global COLORS/screen (readonly) COLOR_PAIR/reentrant COLOR_PAIRS/screen (readonly) COLS/screen (readonly) ESCDELAY/screen (readonly, see \fIset_escdelay\fP) LINES/screen (readonly) PAIR_NUMBER/reentrant PC/global SP/global TABSIZE/screen (readonly) UP/global acs_map/screen (readonly) add_wch/window (stdscr) add_wchnstr/window (stdscr) add_wchstr/window (stdscr) addch/window (stdscr) addchnstr/window (stdscr) addchstr/window (stdscr) addnstr/window (stdscr) addnwstr/window (stdscr) addstr/window (stdscr) addwstr/window (stdscr) assume_default_colors/screen attr_get/window (stdscr) attr_off/window (stdscr) attr_on/window (stdscr) attr_set/window (stdscr) attroff/window (stdscr) attron/window (stdscr) attrset/window (stdscr) baudrate/screen beep/screen bkgd/window (stdscr) bkgdset/window (stdscr) bkgrnd/window (stdscr) bkgrndset/window (stdscr) boolcodes/global (readonly) boolfnames/global (readonly) boolnames/global (readonly) border/window (stdscr) border_set/window (stdscr) box/window (stdscr) box_set/window (stdscr) can_change_color/terminal cbreak/screen chgat/window (stdscr) clear/window (stdscr) clearok/window clrtobot/window (stdscr) clrtoeol/window (stdscr) color_content/screen color_set/window (stdscr) copywin/window locks(source, target) cur_term/terminal curs_set/screen curscr/screen (readonly) curses_version/global (readonly) def_prog_mode/terminal def_shell_mode/terminal define_key/screen del_curterm/screen delay_output/screen delch/window (stdscr) deleteln/window (stdscr) delscreen/global locks(screenlist, screen) delwin/global locks(windowlist) derwin/screen doupdate/screen dupwin/screen locks(window) echo/screen echo_wchar/window (stdscr) echochar/window (stdscr) endwin/screen erase/window (stdscr) erasechar/window (stdscr) erasewchar/window (stdscr) filter/global flash/terminal flushinp/screen get_wch/screen (input-operation) get_wstr/screen (input-operation) getattrs/window getbegx/window getbegy/window getbkgd/window getbkgrnd/window getcchar/reentrant getch/screen (input-operation) getcurx/window getcury/window getmaxx/window getmaxy/window getmouse/screen (input-operation) getn_wstr/screen (input-operation) getnstr/screen (input-operation) getparx/window getpary/window getstr/screen (input-operation) getwin/screen (input-operation) halfdelay/screen has_colors/terminal has_ic/terminal has_il/terminal has_key/screen hline/window (stdscr) hline_set/window (stdscr) idcok/window idlok/window immedok/window in_wch/window (stdscr) in_wchnstr/window (stdscr) in_wchstr/window (stdscr) inch/window (stdscr) inchnstr/window (stdscr) inchstr/window (stdscr) init_color/screen init_pair/screen initscr/global locks(screenlist) innstr/window (stdscr) innwstr/window (stdscr) ins_nwstr/window (stdscr) ins_wch/window (stdscr) ins_wstr/window (stdscr) insch/window (stdscr) insdelln/window (stdscr) insertln/window (stdscr) insnstr/window (stdscr) insstr/window (stdscr) instr/window (stdscr) intrflush/terminal inwstr/window (stdscr) is_cleared/window is_idcok/window is_idlok/window is_immedok/window is_keypad/window is_leaveok/window is_linetouched/window is_nodelay/window is_notimeout/window is_scrollok/window is_syncok/window is_term_resized/terminal is_wintouched/window isendwin/screen key_defined/screen key_name/global (static data) keybound/screen keyname/global (static data) keyok/screen keypad/window killchar/terminal killwchar/terminal leaveok/window longname/screen mcprint/terminal meta/screen mouse_trafo/window (stdscr) mouseinterval/screen mousemask/screen move/window (stdscr) mvadd_wch/window (stdscr) mvadd_wchnstr/window (stdscr) mvadd_wchstr/window (stdscr) mvaddch/window (stdscr) mvaddchnstr/window (stdscr) mvaddchstr/window (stdscr) mvaddnstr/window (stdscr) mvaddnwstr/window (stdscr) mvaddstr/window (stdscr) mvaddwstr/window (stdscr) mvchgat/window (stdscr) mvcur/screen mvdelch/window (stdscr) mvderwin/window (stdscr) mvget_wch/screen (input-operation) mvget_wstr/screen (input-operation) mvgetch/screen (input-operation) mvgetn_wstr/screen (input-operation) mvgetnstr/screen (input-operation) mvgetstr/screen (input-operation) mvhline/window (stdscr) mvhline_set/window (stdscr) mvin_wch/window (stdscr) mvin_wchnstr/window (stdscr) mvin_wchstr/window (stdscr) mvinch/window (stdscr) mvinchnstr/window (stdscr) mvinchstr/window (stdscr) mvinnstr/window (stdscr) mvinnwstr/window (stdscr) mvins_nwstr/window (stdscr) mvins_wch/window (stdscr) mvins_wstr/window (stdscr) mvinsch/window (stdscr) mvinsnstr/window (stdscr) mvinsstr/window (stdscr) mvinstr/window (stdscr) mvinwstr/window (stdscr) mvprintw/window (stdscr) mvscanw/screen mvvline/window (stdscr) mvvline_set/window (stdscr) mvwadd_wch/window mvwadd_wchnstr/window mvwadd_wchstr/window mvwaddch/window mvwaddchnstr/window mvwaddchstr/window mvwaddnstr/window mvwaddnwstr/window mvwaddstr/window mvwaddwstr/window mvwchgat/window mvwdelch/window mvwget_wch/screen (input-operation) mvwget_wstr/screen (input-operation) mvwgetch/screen (input-operation) mvwgetn_wstr/screen (input-operation) mvwgetnstr/screen (input-operation) mvwgetstr/screen (input-operation) mvwhline/window mvwhline_set/window mvwin/window mvwin_wch/window mvwin_wchnstr/window mvwin_wchstr/window mvwinch/window mvwinchnstr/window mvwinchstr/window mvwinnstr/window mvwinnwstr/window mvwins_nwstr/window mvwins_wch/window mvwins_wstr/window mvwinsch/window mvwinsnstr/window mvwinsstr/window mvwinstr/window mvwinwstr/window mvwprintw/window mvwscanw/screen mvwvline/window mvwvline_set/window napms/reentrant newpad/global locks(windowlist) newscr/screen (readonly) newterm/global locks(screenlist) newwin/global locks(windowlist) nl/screen nocbreak/screen nodelay/window noecho/screen nofilter/global nonl/screen noqiflush/terminal noraw/screen notimeout/window numcodes/global (readonly) numfnames/global (readonly) numnames/global (readonly) ospeed/global overlay/window locks(source, target) overwrite/window locks(source, target) pair_content/screen pecho_wchar/screen pechochar/screen pnoutrefresh/screen prefresh/screen printw/window putp/global putwin/window qiflush/terminal raw/screen redrawwin/window refresh/screen reset_prog_mode/screen reset_shell_mode/screen resetty/terminal resize_term/screen locks(windowlist) resizeterm/screen restartterm/screen ripoffline/global (static data) savetty/terminal scanw/screen scr_dump/screen scr_init/screen scr_restore/screen scr_set/screen scrl/window (stdscr) scroll/window scrollok/window set_curterm/screen set_escdelay/screen set_tabsize/screen set_term/global locks(screenlist, screen) setcchar/reentrant setscrreg/window (stdscr) setupterm/global slk_attr/screen slk_attr_off/screen slk_attr_on/screen slk_attr_set/screen slk_attroff/screen slk_attron/screen slk_attrset/screen slk_clear/screen slk_color/screen slk_init/screen slk_label/screen slk_noutrefresh/screen slk_refresh/screen slk_restore/screen slk_set/screen slk_touch/screen slk_wset/screen standend/window standout/window start_color/screen stdscr/screen (readonly) strcodes/global (readonly) strfnames/global (readonly) strnames/global (readonly) subpad/window subwin/window syncok/window term_attrs/screen termattrs/screen termname/terminal tgetent/global tgetflag/global tgetnum/global tgetstr/global tgoto/global tigetflag/terminal tigetnum/terminal tigetstr/terminal timeout/window (stdscr) touchline/window touchwin/window tparm/global (static data) tputs/screen trace/global (static data) ttytype/screen (readonly) typeahead/screen unctrl/screen unget_wch/screen (input-operation) ungetch/screen (input-operation) ungetmouse/screen (input-operation) untouchwin/window use_default_colors/screen use_env/global (static data) use_extended_names/global (static data) use_legacy_coding/screen use_screen/global locks(screenlist, screen) use_window/global locks(windowlist, window) vid_attr/screen vid_puts/screen vidattr/screen vidputs/screen vline/window (stdscr) vline_set/window (stdscr) vw_printw/window vw_scanw/screen vwprintw/window vwscanw/screen wadd_wch/window wadd_wchnstr/window wadd_wchstr/window waddch/window waddchnstr/window waddchstr/window waddnstr/window waddnwstr/window waddstr/window waddwstr/window wattr_get/window wattr_off/window wattr_on/window wattr_set/window wattroff/window wattron/window wattrset/window wbkgd/window wbkgdset/window wbkgrnd/window wbkgrndset/window wborder/window wborder_set/window wchgat/window wclear/window wclrtobot/window wclrtoeol/window wcolor_set/window wcursyncup/screen (affects window plus parents) wdelch/window wdeleteln/window wecho_wchar/window wechochar/window wenclose/window werase/window wget_wch/screen (input-operation) wget_wstr/screen (input-operation) wgetbkgrnd/window wgetch/screen (input-operation) wgetdelay/window wgetn_wstr/screen (input-operation) wgetnstr/screen (input-operation) wgetparent/window wgetscrreg/window wgetstr/screen (input-operation) whline/window whline_set/window win_wch/window win_wchnstr/window win_wchstr/window winch/window winchnstr/window winchstr/window winnstr/window winnwstr/window wins_nwstr/window wins_wch/window wins_wstr/window winsch/window winsdelln/window winsertln/window winsnstr/window winsstr/window winstr/window winwstr/window wmouse_trafo/window wmove/window wnoutrefresh/screen wprintw/window wredrawln/window wrefresh/screen wresize/window locks(windowlist) wscanw/screen wscrl/window wsetscrreg/window wstandend/window wstandout/window wsyncdown/screen (affects window plus parents) wsyncup/screen (affects window plus parents) wtimeout/window wtouchln/window wunctrl/global (static data) wvline/window wvline_set/window .TE .\" *************************************************************************** .SH RETURN VALUE These functions all return \fBTRUE\fP or \fBFALSE\fP, except as noted. .SH NOTES Both a macro and a function are provided for each name. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on ncurses extensions be conditioned using NCURSES_VERSION. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_opaque\fR(3X), \fBcurs_variables\fR(3X). ncurses-6.0-20160213/man/curs_terminfo.3x0000644000175100001440000004253212172562467016404 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1999-2011,2013 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_terminfo.3x,v 1.43 2013/07/20 19:29:59 tom Exp $ .TH curs_terminfo 3X "" .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .de bP .IP \(bu 4 .. .ds n 5 .na .hy 0 .SH NAME \fBdel_curterm\fR, \fBmvcur\fR, \fBputp\fR, \fBrestartterm\fR, \fBset_curterm\fR, \fBsetterm\fR, \fBsetupterm\fR, \fBtigetflag\fR, \fBtigetnum\fR, \fBtigetstr\fR, \fBtiparm\fR, \fBtparm\fR, \fBtputs\fR, \fBvid_attr\fR, \fBvid_puts\fR, \fBvidattr\fR, \fBvidputs\fR \- \fBcurses\fR interfaces to terminfo database .ad .hy .SH SYNOPSIS .nf \fB#include \fR .br \fB#include \fR .PP \fBint setupterm(char *\fR\fIterm\fR\fB, int \fR\fIfildes\fR\fB, int *\fR\fIerrret\fR\fB);\fR .br \fBint setterm(char *\fR\fIterm\fR\fB);\fR .br \fBTERMINAL *set_curterm(TERMINAL *\fR\fInterm\fR\fB);\fR .br \fBint del_curterm(TERMINAL *\fR\fIoterm\fR\fB);\fR .br \fBint restartterm(char *\fR\fIterm\fR\fB, int \fR\fIfildes\fR\fB, int *\fR\fIerrret\fR\fB);\fR .br \fBchar *tparm(char *\fR\fIstr\fR\fB, ...);\fR .br \fBint tputs(const char *\fR\fIstr\fR\fB, int \fR\fIaffcnt\fR\fB, int (*\fR\fIputc\fR\fB)(int));\fR .br \fBint putp(const char *\fR\fIstr\fR\fB);\fR .br \fBint vidputs(chtype \fR\fIattrs\fR\fB, int (*\fR\fIputc\fR\fB)(int));\fR .br \fBint vidattr(chtype \fR\fIattrs\fR\fB);\fR .br \fBint vid_puts(attr_t \fR\fIattrs\fR\fB, short \fR\fIpair\fR\fB, void *\fR\fIopts\fR\fB, int (*\fR\fIputc\fR\fB)(int));\fR .br \fBint vid_attr(attr_t \fR\fIattrs\fR\fB, short \fR\fIpair\fR\fB, void *\fR\fIopts\fR\fB);\fR .br \fBint mvcur(int \fR\fIoldrow\fR\fB, int \fR\fIoldcol\fR\fB, int \fR\fInewrow\fR, int \fR\fInewcol\fR\fB);\fR .br \fBint tigetflag(char *\fR\fIcapname\fR\fB);\fR .br \fBint tigetnum(char *\fR\fIcapname\fR\fB);\fR .br \fBchar *tigetstr(char *\fR\fIcapname\fR\fB);\fR .br \fBchar *tiparm(const char *\fR\fIstr\fR\fB, ...);\fR .br .fi .SH DESCRIPTION These low-level routines must be called by programs that have to deal directly with the \fBterminfo\fR database to handle certain terminal capabilities, such as programming function keys. For all other functionality, \fBcurses\fR routines are more suitable and their use is recommended. .SS Initialization .PP Initially, \fBsetupterm\fR should be called. Note that \fBsetupterm\fR is automatically called by \fBinitscr\fR and \fBnewterm\fR. This defines the set of terminal-dependent variables [listed in \fBterminfo\fR(\*n)]. .PP Each initialization routine provides applications with the terminal capabilities either directly (via header definitions), or by special functions. The header files \fBcurses.h\fR and \fBterm.h\fR should be included (in this order) to get the definitions for these strings, numbers, and flags. .PP The \fBterminfo\fR variables \fBlines\fR and \fBcolumns\fR are initialized by \fBsetupterm\fR as follows: .bP If \fBuse_env(FALSE)\fR has been called, values for \fBlines\fR and \fBcolumns\fR specified in \fBterminfo\fR are used. .bP Otherwise, if the environment variables \fBLINES\fR and \fBCOLUMNS\fR exist, their values are used. If these environment variables do not exist and the program is running in a window, the current window size is used. Otherwise, if the environment variables do not exist, the values for \fBlines\fR and \fBcolumns\fR specified in the \fBterminfo\fR database are used. .PP Parameterized strings should be passed through \fBtparm\fR to instantiate them. All \fBterminfo\fR strings [including the output of \fBtparm\fR] should be printed with \fBtputs\fR or \fBputp\fR. Call \fBreset_shell_mode\fR to restore the tty modes before exiting [see \fBcurs_kernel\fR(3X)]. .PP Programs which use cursor addressing should .bP output \fBenter_ca_mode\fR upon startup and .bP output \fBexit_ca_mode\fR before exiting. .PP Programs which execute shell subprocesses should .bP call \fBreset_shell_mode\fR and output \fBexit_ca_mode\fR before the shell is called and .bP output \fBenter_ca_mode\fR and call \fBreset_prog_mode\fR after returning from the shell. .PP The \fBsetupterm\fR routine reads in the \fBterminfo\fR database, initializing the \fBterminfo\fR structures, but does not set up the output virtualization structures used by \fBcurses\fR. The terminal type is the character string \fIterm\fR; if \fIterm\fR is null, the environment variable \fBTERM\fR is used. All output is to file descriptor \fBfildes\fR which is initialized for output. If \fIerrret\fR is not null, then \fBsetupterm\fR returns \fBOK\fR or \fBERR\fR and stores a status value in the integer pointed to by \fIerrret\fR. A return value of \fBOK\fR combined with status of \fB1\fR in \fIerrret\fR is normal. If \fBERR\fR is returned, examine \fIerrret\fR: .TP 5 .B 1 means that the terminal is hardcopy, cannot be used for curses applications. .IP \fBsetupterm\fP determines if the entry is a hardcopy type by checking the \fIhc\fP (\fIhardcopy\fP) capability. .TP 5 .B 0 means that the terminal could not be found, or that it is a generic type, having too little information for curses applications to run. .IP \fBsetupterm\fP determines if the entry is a generic type by checking the \fIgn\fP (\fIgeneric\fP) capability. .TP 5 .B \-1 means that the \fBterminfo\fR database could not be found. .PP If \fIerrret\fR is null, \fBsetupterm\fR prints an error message upon finding an error and exits. Thus, the simplest call is: .sp \fBsetupterm((char *)0, 1, (int *)0);\fR, .sp which uses all the defaults and sends the output to \fBstdout\fR. .PP The \fBsetterm\fR routine was replaced by \fBsetupterm\fR. The call: .sp \fBsetupterm(\fR\fIterm\fR\fB, 1, (int *)0)\fR .sp provides the same functionality as \fBsetterm(\fR\fIterm\fR\fB)\fR. The \fBsetterm\fR routine is provided for BSD compatibility, and is not recommended for new programs. .\" *************************************************************************** .SS The Terminal State .PP The \fBsetupterm\fR routine stores its information about the terminal in a \fBTERMINAL\fP structure pointed to by the global variable \fBcur_term\fP. If it detects an error, or decides that the terminal is unsuitable (hardcopy or generic), it discards this information, making it not available to applications. .PP If \fBsetupterm\fP is called repeatedly for the same terminal type, it will reuse the information. It maintains only one copy of a given terminal's capabilities in memory. If it is called for different terminal types, \fBsetupterm\fP allocates new storage for each set of terminal capabilities. .PP The \fBset_curterm\fR routine sets \fBcur_term\fR to \fInterm\fR, and makes all of the \fBterminfo\fR boolean, numeric, and string variables use the values from \fInterm\fR. It returns the old value of \fBcur_term\fR. .PP The \fBdel_curterm\fR routine frees the space pointed to by \fIoterm\fR and makes it available for further use. If \fIoterm\fR is the same as \fBcur_term\fR, references to any of the \fBterminfo\fR boolean, numeric, and string variables thereafter may refer to invalid memory locations until another \fBsetupterm\fR has been called. .PP The \fBrestartterm\fR routine is similar to \fBsetupterm\fR and \fBinitscr\fR, except that it is called after restoring memory to a previous state (for example, when reloading a game saved as a core image dump). \fBrestartterm\fP assumes that the windows and the input and output options are the same as when memory was saved, but the terminal type and baud rate may be different. Accordingly, \fBrestartterm\fP saves various tty state bits, calls \fBsetupterm\fP, and then restores the bits. .\" *************************************************************************** .SS Formatting Output .PP The \fBtparm\fR routine instantiates the string \fIstr\fR with parameters \fIpi\fR. A pointer is returned to the result of \fIstr\fR with the parameters applied. .PP \fBtiparm\fP is a newer form of \fBtparm\fP which uses \fI\fP rather than a fixed-parameter list. Its numeric parameters are integers (int) rather than longs. .\" *************************************************************************** .SS Output Functions .PP The \fBtputs\fR routine applies padding information to the string \fIstr\fR and outputs it. The \fIstr\fR must be a terminfo string variable or the return value from \fBtparm\fR, \fBtgetstr\fR, or \fBtgoto\fR. \fIaffcnt\fR is the number of lines affected, or 1 if not applicable. \fIputc\fR is a \fBputchar\fR-like routine to which the characters are passed, one at a time. .PP The \fBputp\fR routine calls \fBtputs(\fR\fIstr\fR\fB, 1, putchar)\fR. Note that the output of \fBputp\fR always goes to \fBstdout\fR, not to the \fIfildes\fR specified in \fBsetupterm\fR. .PP The \fBvidputs\fR routine displays the string on the terminal in the video attribute mode \fIattrs\fR, which is any combination of the attributes listed in \fBcurses\fR(3X). The characters are passed to the \fBputchar\fR-like routine \fIputc\fR. .PP The \fBvidattr\fR routine is like the \fBvidputs\fR routine, except that it outputs through \fBputchar\fR. .PP The \fBvid_attr\fR and \fBvid_puts\fR routines correspond to vidattr and vidputs, respectively. They use a set of arguments for representing the video attributes plus color, i.e., one of type attr_t for the attributes and one of short for the color_pair number. The \fBvid_attr\fR and \fBvid_puts\fR routines are designed to use the attribute constants with the \fIWA_\fR prefix. The opts argument is reserved for future use. Currently, applications must provide a null pointer for that argument. .PP The \fBmvcur\fR routine provides low-level cursor motion. It takes effect immediately (rather than at the next refresh). .\" *************************************************************************** .SS Terminal Capability Functions .PP The \fBtigetflag\fR, \fBtigetnum\fR and \fBtigetstr\fR routines return the value of the capability corresponding to the \fBterminfo\fR \fIcapname\fR passed to them, such as \fBxenl\fR. The \fIcapname\fR for each capability is given in the table column entitled \fIcapname\fR code in the capabilities section of \fBterminfo\fR(\*n). .PP These routines return special values to denote errors. .PP The \fBtigetflag\fR routine returns .TP \fB\-1\fR if \fIcapname\fR is not a boolean capability, or .TP \fB0\fR if it is canceled or absent from the terminal description. .PP The \fBtigetnum\fR routine returns .TP \fB\-2\fR if \fIcapname\fR is not a numeric capability, or .TP \fB\-1\fR if it is canceled or absent from the terminal description. .PP The \fBtigetstr\fR routine returns .TP \fB(char *)\-1\fR if \fIcapname\fR is not a string capability, or .TP \fB0\fR if it is canceled or absent from the terminal description. .\" *************************************************************************** .SS Terminal Capability Names These null-terminated arrays contain the short terminfo names ("codes"), the \fBtermcap\fR names, and the long terminfo names ("fnames") for each of the predefined \fBterminfo\fR variables: .RS \fBchar *boolnames[]\fR, \fB*boolcodes[]\fR, \fB*boolfnames[]\fR .sp \fBchar *numnames[]\fR, \fB*numcodes[]\fR, \fB*numfnames[]\fR .sp \fBchar *strnames[]\fR, \fB*strcodes[]\fR, \fB*strfnames[]\fR .RE .SH RETURN VALUE Routines that return an integer return \fBERR\fR upon failure and \fBOK\fR (SVr4 only specifies "an integer value other than \fBERR\fR") upon successful completion, unless otherwise noted in the preceding routine descriptions. .PP Routines that return pointers always return \fBNULL\fR on error. .PP X/Open defines no error conditions. In this implementation .RS 5 .TP 5 \fBdel_curterm\fP returns an error if its terminal parameter is null. .TP 5 \fBputp\fP calls \fBtputs\fP, returning the same error-codes. .TP 5 \fBrestartterm\fP returns an error if the associated call to \fBsetupterm\fP returns an error. .TP 5 \fBsetupterm\fP returns an error if it cannot allocate enough memory, or create the initial windows (stdscr, curscr, newscr). Other error conditions are documented above. .TP 5 \fBtputs\fP returns an error if the string parameter is null. It does not detect I/O errors: X/Open states that \fBtputs\fP ignores the return value of the output function \fIputc\fP. .RE .SH PORTABILITY X/Open notes that \fBvidattr\fR and \fBvidputs\fR may be macros. .PP The function \fBsetterm\fR is not described by X/Open and must be considered non-portable. All other functions are as described by X/Open. .PP \fBsetupterm\fP copies the terminal name to the array \fBttytype\fP. This is not part of X/Open Curses, but is assumed by some applications. .PP If configured to use the terminal-driver, e.g., for the MinGW port, .bP \fBsetupterm\fP interprets a missing/empty TERM variable as the special value \*(``unknown\*(''. .bP \fBsetupterm\fP allows explicit use of the the windows console driver by checking if $TERM is set to \*(``#win32con\*('' or an abbreviation of that string. .PP Older versions of \fBncurses\fP assumed that the file descriptor passed to \fBsetupterm\fP from \fBinitscr\fP or \fBnewterm\fP uses buffered I/O, and would write to the corresponding stream. In addition to the limitation that the terminal was left in block-buffered mode on exit (like SystemV curses), it was problematic because \fBncurses\fP did not allow a reliable way to cleanup on receiving SIGTSTP. The current version uses output buffers managed directly by \fBncurses\fP. Some of the low-level functions described in this manual page write to the standard output. They are not signal-safe. The high-level functions in \fBncurses\fP use alternate versions of these functions using the more reliable buffering scheme. .PP In System V Release 4, \fBset_curterm\fR has an \fBint\fR return type and returns \fBOK\fR or \fBERR\fR. We have chosen to implement the X/Open Curses semantics. .PP In System V Release 4, the third argument of \fBtputs\fR has the type \fBint (*putc)(char)\fR. .PP At least one implementation of X/Open Curses (Solaris) returns a value other than OK/ERR from \fBtputs\fP. That returns the length of the string, and does no error-checking. .PP X/Open Curses prototypes \fBtparm\fR with a fixed number of parameters, rather than a variable argument list. This implementation uses a variable argument list, but can be configured to use the fixed-parameter list. Portable applications should provide 9 parameters after the format; zeroes are fine for this purpose. .PP In response to comments by Thomas E. Dickey, X/Open Curses Issue 7 proposed the \fBtiparm\fP function in mid-2009. .PP X/Open notes that after calling \fBmvcur\fR, the curses state may not match the actual terminal state, and that an application should touch and refresh the window before resuming normal curses calls. Both \fBncurses\fP and System V Release 4 curses implement \fBmvcur\fR using the SCREEN data allocated in either \fBinitscr\fR or \fBnewterm\fR. So though it is documented as a terminfo function, \fBmvcur\fR is really a curses function which is not well specified. .PP X/Open states that the old location must be given for \fBmvcur\fP. This implementation allows the caller to use \-1's for the old ordinates. In that case, the old location is unknown. .PP Other implementions may not declare the capability name arrays. Some provide them without declaring them. X/Open does not specify them. .PP Extended terminal capability names, e.g., as defined by \fB@TIC@\ \-x\fP, are not stored in the arrays described here. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_kernel\fR(3X), \fBcurs_termcap\fR(3X), \fBcurs_variables\fR(3X), \fBterm_variables\fR(3X), \fBputc\fR(3), \fBterminfo\fR(\*n) ncurses-6.0-20160213/man/curs_get_wch.3x0000644000175100001440000001345112045321337016163 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2010,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_get_wch.3x,v 1.8 2012/11/03 23:03:59 tom Exp $ .TH curs_get_wch 3X "" .SH NAME \fBget_wch\fR, \fBwget_wch\fR, \fBmvget_wch\fR, \fBmvwget_wch\fR, \fBunget_wch\fR \- get (or push back) a wide character from curses terminal keyboard .SH SYNOPSIS \fB#include \fR .sp \fBint get_wch(wint_t *\fR\fIwch\fR\fB);\fR .br \fBint wget_wch(WINDOW *\fR\fIwin\fR\fB, wint_t *\fR\fIwch\fR\fB);\fR .br \fBint mvget_wch(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwch\fR\fB);\fR .br \fBint mvwget_wch(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwch\fR\fB);\fR .br \fBint unget_wch(const wchar_t \fR\fIwch\fR\fB);\fR .SH DESCRIPTION The \fBget_wch\fR, \fBwget_wch\fR, \fBmvget_wch\fR, and \fBmvwget_wch\fR functions read a character from the terminal associated with the current or specified window. In no-delay mode, if no input is waiting, the value \fBERR\fR is returned. In delay mode, the program waits until the system passes text through to the program. Depending on the setting of \fBcbreak\fR, this is after one character (cbreak mode), or after the first newline (nocbreak mode). In half-delay mode, the program waits until the user types a character or the specified timeout interval has elapsed. .PP Unless \fBnoecho\fR has been set, these routines echo the character into the designated window. .PP If the window is not a pad and has been moved or modified since the last call to \fBwrefresh\fR, \fBwrefresh\fR will be called before another character is read. .PP If \fBkeypad\fR is enabled, these functions respond to the pressing of a function key by setting the object pointed to by \fIwch\fR to the corresponding \fBKEY_\fR value defined in \fB\fR and returning \fBKEY_CODE_YES\fR. If a character (such as escape) that could be the beginning of a function key is received, curses sets a timer. If the remainder of the sequence does arrive within the designated time, curses passes through the character; otherwise, curses returns the function key value. For this reason, many terminals experience a delay between the time a user presses the escape key and the time the escape is returned to the program. .PP The \fBunget_wch\fR function pushes the wide character \fIwch\fR back onto the head of the input queue, so the wide character is returned by the next call to \fBget_wch\fR. The pushback of one character is guaranteed. If the program calls \fBunget_wch\fR too many times without an intervening call to \fBget_wch\fR, the operation may fail. .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .PP Applications should not define the escape key by itself as a single-character function. .PP When using \fBget_wch\fR, \fBwget_wch\fR, \fBmvget_wch\fR, or \fBmvwget_wch\fR, applications should not use \fBnocbreak\fR mode and \fBecho\fR mode at the same time. Depending on the state of the tty driver when each character is typed, the program may produce undesirable results. .PP All functions except \fBwget_wch\fR and \fBunget_wch\fR may be macros. .SH RETURN VALUE When \fBget_wch\fR, \fBwget_wch\fR, \fBmvget_wch\fR, and \fBmvwget_wch\fR functions successfully report the pressing of a function key, they return \fBKEY_CODE_YES\fR. When they successfully report a wide character, they return \fBOK\fR. Otherwise, they return \fBERR\fR. .PP Upon successful completion, \fBunget_wch\fR returns \fBOK\fR. Otherwise, the function returns \fBERR\fR. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_getch\fR(3X), \fBcurs_ins_wch\fR(3X), \fBcurs_inopts\fR(3X), \fBcurs_move\fR(3X), \fBcurs_refresh\fR(3X) ncurses-6.0-20160213/man/infotocap.1m0000644000175100001440000000713511476505277015474 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1999-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: infotocap.1m,v 1.11 2010/12/04 18:38:55 tom Exp $ .TH @INFOTOCAP@ 1M "" .ds n 5 .ds d @TERMINFO@ .SH NAME \fB@INFOTOCAP@\fR \- convert a \fIterminfo\fR description into a \fItermcap\fR description .SH SYNOPSIS \fB@INFOTOCAP@\fR [\fB\-v\fR\fIn\fR \fIwidth\fR] [\fB\-V\fR] [\fB\-1\fR] [\fB\-w\fR \fIwidth\fR] \fIfile\fR . . . .SH DESCRIPTION \fB@INFOTOCAP@\fR looks in each given text \fIfile\fR for \fBterminfo\fR descriptions. For each terminfo description found, an equivalent \fBtermcap\fR description is written to standard output. Terminfo \fBuse\fR capabilities are translated directly to termcap \fBtc\fR capabilities. .TP 5 \fB\-v\fR print out tracing information on standard error as the program runs. .TP 5 \fB\-V\fR print out the version of the program in use on standard error and exit. .TP 5 \fB\-1\fR cause the fields to print out one to a line. Otherwise, the fields will be printed several to a line to a maximum width of 60 characters. .TP 5 \fB\-w\fR change the output to \fIwidth\fR characters. .SH FILES .TP 20 \*d Compiled terminal description database. .SH NOTES This utility is actually a link to \fI@TIC@\fR, running in \fI\-C\fR mode. You can use other \fI@TIC@\fR options such as \fB\-f\fR and \fB\-x\fR. .SH SEE ALSO \fBcurses\fR(3X), \fB@TIC@\fR(1M), \fB@INFOCMP@\fR(1M), \fBterminfo\fR(\*n) .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). .SH AUTHOR Eric S. Raymond and .br Thomas E. Dickey ncurses-6.0-20160213/man/curs_sp_funcs.3x0000644000175100001440000002477112630645012016371 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2010-2013,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_sp_funcs.3x,v 1.7 2015/12/05 20:33:14 tom Exp $ .TH curs_sp_funcs 3X "" .na .hy 0 .SH NAME curs_sp_funcs \- \fBcurses\fR screen-pointer extension .ad .hy .SH SYNOPSIS \fB#include \fR .nf .sp \fBint assume_default_colors_sp(SCREEN*, int, int);\fR .br \fBint baudrate_sp(SCREEN*);\fR .br \fBint beep_sp(SCREEN*);\fR .br \fBbool can_change_color_sp(SCREEN*);\fR .br \fBint cbreak_sp(SCREEN*);\fR .br \fBint color_content_sp(SCREEN*, short, short*, short*, short*);\fR .br \fBint curs_set_sp(SCREEN*, int);\fR .br \fBint define_key_sp(SCREEN*, const char *, int);\fR .br \fBint def_prog_mode_sp(SCREEN*);\fR .br \fBint def_shell_mode_sp(SCREEN*);\fR .br \fBint delay_output_sp(SCREEN*, int);\fR .br \fBint doupdate_sp(SCREEN*);\fR .br \fBint echo_sp(SCREEN*);\fR .br \fBint endwin_sp(SCREEN*);\fR .br \fBint erasechar_sp(SCREEN*);\fR .br \fBint filter_sp(SCREEN*);\fR .br \fBint flash_sp(SCREEN*);\fR .br \fBint flushinp_sp(SCREEN*);\fR .br \fBint get_escdelay_sp(SCREEN*);\fR .br \fBint getmouse_sp(SCREEN*, MEVENT*);\fR .br \fBWINDOW* getwin_sp(SCREEN*, FILE*);\fR .br \fBint halfdelay_sp(SCREEN*);\fR .br \fBbool has_colors_sp(SCREEN*);\fR .br \fBbool has_ic_sp(SCREEN*);\fR .br \fBbool has_il_sp(SCREEN*);\fR .br \fBint has_key_sp(SCREEN*, int);\fR .br \fBbool has_mouse_sp(SCREEN*);\fR .br \fBint init_color_sp(SCREEN*, short, short, short, short);\fR .br \fBint init_pair_sp(SCREEN*, short, short, short);\fR .br \fBint intrflush_sp(SCREEN*, WINDOW*, bool);\fR .br \fBbool isendwin_sp(SCREEN*);\fR .br \fBbool is_term_resized_sp(SCREEN*, int, int);\fR .br \fBchar* keybound_sp(SCREEN*, int, int);\fR .br \fBint key_defined_sp(SCREEN*, const char *);\fR .br \fBNCURSES_CONST char * keyname_sp(SCREEN*, int);\fR .br \fBint keyok_sp(SCREEN*, int, bool);\fR .br \fBchar killchar_sp(SCREEN*);\fR .br \fBint mcprint_sp(SCREEN*, char *, int);\fR .br \fBint mouseinterval_sp(SCREEN*, int);\fR .br \fBmmask_t mousemask_sp(SCREEN*, mmask_t, mmask_t *);\fR .br \fBint mvcur_sp(SCREEN*, int, int, int, int);\fR .br \fBint napms_sp(SCREEN*, int);\fR .br \fBWINDOW* newpad_sp(SCREEN*, int, int);\fR .br \fBSCREEN* new_prescr(void);\fR .br \fBSCREEN* newterm_sp(SCREEN*, NCURSES_CONST char *, FILE *, FILE *);\fR .br \fBWINDOW* newwin_sp(SCREEN*, int, int, int, int);\fR .br \fBint nl_sp(SCREEN*);\fR .br \fBint nocbreak_sp(SCREEN*);\fR .br \fBint noecho_sp(SCREEN*);\fR .br \fBint nofilter_sp(SCREEN*);\fR .br \fBint nonl_sp(SCREEN*);\fR .br \fBvoid noqiflush_sp(SCREEN*);\fR .br \fBint noraw_sp(SCREEN*);\fR .br \fBint pair_content_sp(SCREEN*, short, short*, short*);\fR .br \fBvoid qiflush_sp(SCREEN*);\fR .br \fBint raw_sp(SCREEN*);\fR .br \fBint reset_prog_mode_sp(SCREEN*);\fR .br \fBint reset_shell_mode_sp(SCREEN*);\fR .br \fBint resetty_sp(SCREEN*);\fR .br \fBint resize_term_sp(SCREEN*, int, int);\fR .br \fBint resizeterm_sp(SCREEN*, int, int);\fR .br \fBint restartterm_sp(SCREEN*, NCURSES_CONST char*, int, int *);\fR .br \fBint ripoffline_sp(SCREEN*, int, int (*)(WINDOW*, int));\fR .br \fBint savetty_sp(SCREEN*);\fR .br \fBint scr_init_sp(SCREEN*, const char *);\fR .br \fBint scr_restore_sp(SCREEN*, const char *);\fR .br \fBint scr_set_sp(SCREEN*, const char *);\fR .br \fBTERMINAL* set_curterm_sp(SCREEN*, TERMINAL*);\fR .br \fBint set_escdelay_sp(SCREEN*, int);\fR .br \fBint set_tabsize_sp(SCREEN*, int);\fR .br \fBint slk_attroff_sp(SCREEN*, const chtype);\fR .br \fBint slk_attron_sp(SCREEN*, const chtype);\fR .br \fBint slk_attr_set_sp(SCREEN*, const attr_t, short, void*);\fR .br \fBint slk_attrset_sp(SCREEN*, const chtype);\fR .br \fBint slk_attr_sp(SCREEN*);\fR .br \fBint slk_clear_sp(SCREEN*);\fR .br \fBint slk_color_sp(SCREEN*, short);\fR .br \fBint slk_init_sp(SCREEN*, int);\fR .br \fBint slk_label_sp(SCREEN*, int);\fR .br \fBint slk_noutrefresh_sp(SCREEN*);\fR .br \fBint slk_refresh_sp(SCREEN*);\fR .br \fBint slk_restore_sp(SCREEN*);\fR .br \fBint slk_set_sp(SCREEN*, int, const char *, int);\fR .br \fBint slk_touch_sp(SCREEN*);\fR .br \fBint start_color_sp(SCREEN*);\fR .br \fBattr_t term_attrs_sp(SCREEN*);\fR .br \fBchtype termattrs_sp(SCREEN*);\fR .br \fBchar* termname_sp(SCREEN*);\fR .br \fBint typeahead_sp(SCREEN*, int);\fR .br \fBNCURSES_CONST char* unctrl_sp(SCREEN*, chtype);\fR .br \fBint ungetch_sp(SCREEN*, int);\fR .br \fBint ungetmouse_sp(SCREEN*,MEVENT *);\fR .br \fBint unget_wch_sp(SCREEN*, const wchar_t);\fR .br \fBint use_default_colors_sp(SCREEN*);\fR .br \fBvoid use_env_sp(SCREEN*, bool);\fR .br \fBint use_legacy_coding_sp(SCREEN*, int);\fR .br \fBint vid_attr_sp(SCREEN*, attr_t, short, void *);\fR .br \fBint vidattr_sp(SCREEN*, chtype);\fR .br \fBint vid_puts_sp(SCREEN*, attr_t, short, void *, NCURSES_SP_OUTC);\fR .br \fBint vidputs_sp(SCREEN*, chtype, NCURSES_SP_OUTC);\fR .br \fBwchar_t* wunctrl_sp(SCREEN*, cchar_t *);\fR .sp \fB#include \fR .sp \fBint new_form_sp(SCREEN*, FIELD **);\fR .sp \fB#include \fR .sp \fBint new_menu_sp(SCREEN*, ITEM **);\fR .sp \fB#include \fR .sp \fBint ceiling_panel(SCREEN*);\fR .br \fBPANEL* ground_panel(SCREEN*);\fR .br \fBint update_panels_sp(SCREEN*);\fR .sp \fB#include \fR .sp \fBint del_curterm_sp(SCREEN*, TERMINAL *);\fR .br \fBint putp_sp(SCREEN*, const char *);\fR .br \fBint tgetflag_sp(SCREEN*, char *, const char *);\fR .br \fBint tgetent_sp(SCREEN*, char *, const char *);\fR .br \fBint tgetnum_sp(SCREEN*, NCURSES_CONST char *);\fR .br \fBchar* tgetstr_sp(SCREEN*, NCURSES_CONST char *, char **);\fR .br \fBint tigetflag_sp(SCREEN*, NCURSES_CONST char *);\fR .br \fBint tigetnum_sp(SCREEN*, NCURSES_CONST char *);\fR .br \fBchar* tigetstr_sp(SCREEN*, NCURSES_CONST char *);\fR .br \fBint tputs_sp(SCREEN*, const char *, int, NCURSES_SP_OUTC);\fR .ad .br .SH DESCRIPTION This implementation can be configured to provide a set of functions which improve the ability to manage multiple screens. This feature can be added to any of the configurations supported by ncurses; it adds new entrypoints without changing the meaning of any of the existing ones. .PP .\" *************************************************************************** .SS IMPROVED FUNCTIONS Most of the functions are new versions of existing functions. A parameter is added at the front of the parameter list. It is a SCREEN pointer. .PP The existing functions all use the current screen, which is a static variable. The extended functions use the specified screen, thereby reducing the number of variables which must be modified to update multiple screens. .\" *************************************************************************** .SS NEW FUNCTIONS Here are the new functions: .TP 5 ceiling_panel this returns a pointer to the topmost panel in the given screen. .TP 5 ground_panel this returns a pointer to the lowest panel in the given screen. .TP 5 new_prescr when creating a new screen, the library uses static variables which have been preset, e.g., by \fBuse_env\fP(3X), \fBfilter\fP(3X), etc. With the screen-pointer extension, there are situations where it must create a current screen before the unextended library does. The \fBnew_prescr\fP function is used internally to handle these cases. It is also provided as an entrypoint to allow applications to customize the library initialization. .\" *************************************************************************** .SH NOTES This extension introduces some new names: .TP 5 NCURSES_SP_FUNCS This is set to the library patch-level number. In the unextended library, this is zero (0), to make it useful for checking if the extension is provided. .TP 5 NCURSES_SP_NAME The new functions are named using the macro \fINCURSES_SP_NAME\fP, which hides the actual implementation. Currently this adds a "_sp" suffix to the name of the unextended function. This manual page indexes the extensions showing the full name. However the proper usage of these functions uses the macro, to provide for the possibility of changing the naming convention for specific library configurations. .TP 5 NCURSES_SP_OUTC This is a new function-pointer type to use in the screen-pointer functions where an \fINCURSES_OUTC\fP is used in the unextended library. .TP 5 NCURSES_OUTC This is a function-pointer type used for the cases where a function passes characters to the output stream, e.g., \fBvidputs\fP(3X). .PP .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on ncurses extensions be conditioned using \fINCURSES_SP_FUNCS\fP. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_opaque\fR(3X), \fBcurs_threads\fR(3X). ncurses-6.0-20160213/man/curs_legacy.3x0000644000175100001440000000714612630645012016012 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2007-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_legacy.3x,v 1.6 2015/12/05 20:33:14 tom Exp $ .TH curs_legacy 3X "" .SH NAME curs_legacy \- get \fBcurses\fR cursor and window coordinates, attributes .SH SYNOPSIS \fB#include \fR .sp \fBint getattrs(WINDOW *win);\fR .br \fBint getbegx(WINDOW *win);\fR .br \fBint getbegy(WINDOW *win);\fR .br \fBint getcurx(WINDOW *win);\fR .br \fBint getcury(WINDOW *win);\fR .br \fBint getmaxx(WINDOW *win);\fR .br \fBint getmaxy(WINDOW *win);\fR .br \fBint getparx(WINDOW *win);\fR .br \fBint getpary(WINDOW *win);\fR .br .SH DESCRIPTION The \fBgetbegy\fR and \fBgetbegx\fR functions return the same data as \fBgetbegyx\fR. .PP The \fBgetcury\fR and \fBgetcurx\fR functions return the same data as \fBgetyx\fR. .PP The \fBgetmaxy\fR and \fBgetmaxx\fR functions return the same data as \fBgetmaxyx\fR. .PP The \fBgetpary\fR and \fBgetparx\fR functions return the same data as \fBgetparyx\fR. .SH RETURN VALUE These functions return an integer, or ERR if the window parameter is null. .SH NOTES All of these interfaces are provided as macros and functions. The macros are suppressed (and only the functions provided) when \fBNCURSES_OPAQUE\fR is defined. The standard forms such as \fBgetyx\fP must be implemented as macros, and (in this implementation) are defined in terms of the functions described here, to avoid reliance on internal details of the WINDOW structure. .SH PORTABILITY These functions were supported on Version 7, BSD or System V implementations. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_getyx\fR(3X), \fBcurs_opaque\fR(3X) ncurses-6.0-20160213/man/term.50000644000175100001440000002666112517175457014315 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: term.5,v 1.22 2015/04/26 14:50:23 tom Exp $ .TH term 5 .ds n 5 .ds d @TERMINFO@ .SH NAME term \- format of compiled term file. .SH SYNOPSIS .B term .SH DESCRIPTION .SS STORAGE LOCATION Compiled terminfo descriptions are placed under the directory \fB\*d\fP. Two configurations are supported (when building the ncurses libraries): .TP 5 .B directory tree A two-level scheme is used to avoid a linear search of a huge \s-1UNIX\s+1 system directory: \fB\*d/c/name\fP where .I name is the name of the terminal, and .I c is the first character of .IR name . Thus, .I act4 can be found in the file \fB\*d/a/act4\fP. Synonyms for the same terminal are implemented by multiple links to the same compiled file. .TP 5 .B hashed database Using Berkeley database, two types of records are stored: the terminfo data in the same format as stored in a directory tree with the terminfo's primary name as a key, and records containing only aliases pointing to the primary name. .IP If built to write hashed databases, ncurses can still read terminfo databases organized as a directory tree, but cannot write entries into the directory tree. It can write (or rewrite) entries in the hashed database. .IP ncurses distinguishes the two cases in the TERMINFO and TERMINFO_DIRS environment variable by assuming a directory tree for entries that correspond to an existing directory, and hashed database otherwise. .SS STORAGE FORMAT The format has been chosen so that it will be the same on all hardware. An 8 or more bit byte is assumed, but no assumptions about byte ordering or sign extension are made. .PP The compiled file is created with the .B @TIC@ program, and read by the routine .IR setupterm . The file is divided into six parts: the header, terminal names, boolean flags, numbers, strings, and string table. .PP The header section begins the file. This section contains six short integers in the format described below. These integers are .RS 5 .TP 5 (1) the magic number (octal 0432); .TP 5 (2) the size, in bytes, of the names section; .TP 5 (3) the number of bytes in the boolean section; .TP 5 (4) the number of short integers in the numbers section; .TP 5 (5) the number of offsets (short integers) in the strings section; .TP 5 (6) the size, in bytes, of the string table. .RE .PP Short integers are stored in two 8-bit bytes. The first byte contains the least significant 8 bits of the value, and the second byte contains the most significant 8 bits. (Thus, the value represented is 256*second+first.) The value \-1 is represented by the two bytes 0377, 0377; other negative values are illegal. This value generally means that the corresponding capability is missing from this terminal. Note that this format corresponds to the hardware of the \s-1VAX\s+1 and \s-1PDP\s+1-11 (that is, little-endian machines). Machines where this does not correspond to the hardware must read the integers as two bytes and compute the little-endian value. .PP The terminal names section comes next. It contains the first line of the terminfo description, listing the various names for the terminal, separated by the `|' character. The section is terminated with an \s-1ASCII NUL\s+1 character. .PP The boolean flags have one byte for each flag. This byte is either 0 or 1 as the flag is present or absent. The capabilities are in the same order as the file . .PP Between the boolean section and the number section, a null byte will be inserted, if necessary, to ensure that the number section begins on an even byte (this is a relic of the PDP\-11's word-addressed architecture, originally designed in to avoid IOT traps induced by addressing a word on an odd byte boundary). All short integers are aligned on a short word boundary. .PP The numbers section is similar to the flags section. Each capability takes up two bytes, and is stored as a little-endian short integer. If the value represented is \-1, the capability is taken to be missing. .PP The strings section is also similar. Each capability is stored as a short integer, in the format above. A value of \-1 means the capability is missing. Otherwise, the value is taken as an offset from the beginning of the string table. Special characters in ^X or \ec notation are stored in their interpreted form, not the printing representation. Padding information $ and parameter information %x are stored intact in uninterpreted form. .PP The final section is the string table. It contains all the values of string capabilities referenced in the string section. Each string is null terminated. .SS EXTENDED STORAGE FORMAT The previous section describes the conventional terminfo binary format. With some minor variations of the offsets (see PORTABILITY), the same binary format is used in all modern UNIX systems. Each system uses a predefined set of boolean, number or string capabilities. .PP The ncurses libraries and applications support extended terminfo binary format, allowing users to define capabilities which are loaded at runtime. This extension is made possible by using the fact that the other implementations stop reading the terminfo data when they have reached the end of the size given in the header. ncurses checks the size, and if it exceeds that due to the predefined data, continues to parse according to its own scheme. .PP First, it reads the extended header (5 short integers): .RS 5 .TP 5 (1) count of extended boolean capabilities .TP 5 (2) count of extended numeric capabilities .TP 5 (3) count of extended string capabilities .TP 5 (4) size of the extended string table in bytes. .TP 5 (5) last offset of the extended string table in bytes. .RE .PP Using the counts and sizes, ncurses allocates arrays and reads data for the extended capabilities in the same order as the header information. .PP The extended string table contains values for string capabilities. After the end of these values, it contains the names for each of the extended capabilities in order, e.g., booleans, then numbers and finally strings. . .SH PORTABILITY Note that it is possible for .I setupterm to expect a different set of capabilities than are actually present in the file. Either the database may have been updated since .I setupterm has been recompiled (resulting in extra unrecognized entries in the file) or the program may have been recompiled more recently than the database was updated (resulting in missing entries). The routine .I setupterm must be prepared for both possibilities \- this is why the numbers and sizes are included. Also, new capabilities must always be added at the end of the lists of boolean, number, and string capabilities. .PP Despite the consistent use of little-endian for numbers and the otherwise self-describing format, it is not wise to count on portability of binary terminfo entries between commercial UNIX versions. The problem is that there are at least three versions of terminfo (under HP\-UX, AIX, and OSF/1) which diverged from System V terminfo after SVr1, and have added extension capabilities to the string table that (in the binary format) collide with System V and XSI Curses extensions. See \fBterminfo\fR(\*n) for detailed discussion of terminfo source compatibility issues. .SH EXAMPLE As an example, here is a hex dump of the description for the Lear-Siegler ADM\-3, a popular though rather stupid early terminal: .nf .sp adm3a|lsi adm3a, am, cols#80, lines#24, bel=^G, clear=\032$<1>, cr=^M, cub1=^H, cud1=^J, cuf1=^L, cup=\\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K, home=^^, ind=^J, .sp .ft CW \s-20000 1a 01 10 00 02 00 03 00 82 00 31 00 61 64 6d 33 ........ ..1.adm3 0010 61 7c 6c 73 69 20 61 64 6d 33 61 00 00 01 50 00 a|lsi ad m3a...P. 0020 ff ff 18 00 ff ff 00 00 02 00 ff ff ff ff 04 00 ........ ........ 0030 ff ff ff ff ff ff ff ff 0a 00 25 00 27 00 ff ff ........ ..%.'... 0040 29 00 ff ff ff ff 2b 00 ff ff 2d 00 ff ff ff ff ).....+. ..-..... 0050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0060 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 00f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0100 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0110 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ 0120 ff ff ff ff ff ff 2f 00 07 00 0d 00 1a 24 3c 31 ....../. .....$<1 0130 3e 00 1b 3d 25 70 31 25 7b 33 32 7d 25 2b 25 63 >..=%p1% {32}%+%c 0140 25 70 32 25 7b 33 32 7d 25 2b 25 63 00 0a 00 1e %p2%{32} %+%c.... 0150 00 08 00 0c 00 0b 00 0a 00 ........ .\s+2 .ft R .fi .sp .SH LIMITS Some limitations: total compiled entries cannot exceed 4096 bytes. The name field cannot exceed 128 bytes. .SH FILES \*d/*/* compiled terminal capability data base .SH SEE ALSO \fBcurses\fR(3X), \fBterminfo\fR(\*n). .SH AUTHORS Thomas E. Dickey .br extended terminfo format for ncurses 5.0 .br hashed database support for ncurses 5.6 .sp Eric S. Raymond ncurses-6.0-20160213/man/curs_inch.3x0000644000175100001440000000706411476505074015500 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_inch.3x,v 1.17 2010/12/04 18:36:44 tom Exp $ .TH curs_inch 3X "" .SH NAME \fBinch\fR, \fBwinch\fR, \fBmvinch\fR, \fBmvwinch\fR \- get a character and attributes from a \fBcurses\fR window .SH SYNOPSIS \fB#include \fR .sp \fBchtype inch(void);\fR .br \fBchtype winch(WINDOW *win);\fR .br \fBchtype mvinch(int y, int x);\fR .br \fBchtype mvwinch(WINDOW *win, int y, int x);\fR .br .SH DESCRIPTION These routines return the character, of type \fBchtype\fR, at the current position in the named window. If any attributes are set for that position, their values are OR'ed into the value returned. Constants defined in \fB\fR can be used with the \fB&\fR (logical AND) operator to extract the character or attributes alone. . .SS Attributes The following bit-masks may be AND-ed with characters returned by \fBwinch\fR. . .TS l l . \fBA_CHARTEXT\fR Bit-mask to extract character \fBA_ATTRIBUTES\fR Bit-mask to extract attributes \fBA_COLOR\fR Bit-mask to extract color-pair field information .TE .SH RETURN VALUE Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES Note that all of these routines may be macros. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. .SH SEE ALSO \fBcurses\fR(3X). .PP Comparable functions in the wide-character (ncursesw) library are described in \fBcurs_in_wch\fR(3X). ncurses-6.0-20160213/man/curs_addwstr.3x0000644000175100001440000001111012045320533016176 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2010,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_addwstr.3x,v 1.11 2012/11/03 22:57:31 tom Exp $ .TH curs_addwstr 3X "" .de bP .IP \(bu 4 .. .na .hy 0 .SH NAME \fBaddwstr\fR, \fBaddnwstr\fR, \fBwaddwstr\fR, \fBwaddnwstr\fR, \fBmvaddwstr\fR, \fBmvaddnwstr\fR, \fBmvwaddwstr\fR, \fBmvwaddnwstr\fR \- add a string of wide characters to a \fBcurses\fR window and advance cursor .ad .hy .SH SYNOPSIS .nf \fB#include \fR .PP \fBint addwstr(const wchar_t *\fR\fIwstr\fR\fB);\fR .br \fBint addnwstr(const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint waddwstr(WINDOW *\fR\fIwin\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR .br \fBint waddnwstr(WINDOW *\fR\fIwin\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvaddwstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR .br \fBint mvaddnwstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvwaddwstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB);\fR .br \fBint mvwaddnwstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const wchar_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .fi .SH DESCRIPTION These functions write the characters of the (null-terminated) \fBwchar_t\fR character string \fIwstr\fR on the given window. It is similar to constructing a \fBcchar_t\fR for each wchar_t in the string, then calling \fBwadd_wch\fR for the resulting \fBcchar_t\fR. .PP The \fImv\fR functions perform cursor movement once, before writing any characters. Thereafter, the cursor is advanced as a side-effect of writing to the window. .PP The four functions with \fIn\fR as the last argument write at most \fIn\fR \fBwchar_t\fR characters, or until a terminating null is reached. If \fIn\fR is \-1, then the entire string will be added. .SH RETURN VALUE All functions return the integer \fBERR\fR upon failure and \fBOK\fR on success. .PP X/Open does not define any error conditions. This implementation returns an error .bP if the window pointer is null or .bP if the string pointer is null or .bP if the corresponding calls to \fBwadd_wch\fP return an error. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES All of these functions except \fBwaddnwstr\fR may be macros. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_add_wch\fR(3X) ncurses-6.0-20160213/man/keybound.3x0000644000175100001440000000622611476506460015342 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1999-2008,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" Author: Thomas E. Dickey 1999 .\" .\" $Id: keybound.3x,v 1.8 2010/12/04 18:49:20 tom Exp $ .TH keybound 3X "" .SH NAME \fBkeybound\fP \- return definition of keycode .SH SYNOPSIS \fB#include \fP .sp \fBchar * keybound(int keycode, int count);\fP .SH DESCRIPTION This is an extension to the curses library. It permits an application to determine the string which is defined in the terminfo for specific keycodes. .SH RETURN VALUE The \fIkeycode\fP parameter must be greater than zero, else NULL is returned. If it does not correspond to a defined key, then NULL is returned. The \fIcount\fP parameter is used to allow the application to iterate through multiple definitions, counting from zero. When successful, the function returns a string which must be freed by the caller. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on them be conditioned using NCURSES_VERSION. .SH SEE ALSO \fBdefine_key\fR(3X), \fBkeyok\fR(3X). .SH AUTHOR Thomas Dickey. ncurses-6.0-20160213/man/form_new_page.3x0000644000175100001440000000655712630673165016341 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_new_page.3x,v 1.11 2015/12/05 23:42:45 tom Exp $ .TH form_new_page 3X "" .SH NAME \fBset_new_page\fR, \fBnew_page\fR \- form pagination functions .SH SYNOPSIS \fB#include \fR .br int set_new_page(FIELD *field, bool new_page_flag); .br bool new_page(const FIELD *field); .br .SH DESCRIPTION The function \fBset_new_page\fR sets or resets a flag marking the given field as the beginning of a new page on its form. .PP The function \fBnew_page\fR is a predicate which tests if a given field marks a page beginning on its form. .SH RETURN VALUE The function \fBnew_page\fR returns \fBTRUE\fR or \fBFALSE\fR. .PP The function \fBset_new_page\fR return one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_CONNECTED The given field is already connected to a form. .SH SEE ALSO \fBcurses\fR(3X) and related pages whose names begin "form_" for detailed descriptions of the entry points. .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_get_wstr.3x0000644000175100001440000001443312045321337016402 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2010,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_get_wstr.3x,v 1.9 2012/11/03 23:03:59 tom Exp $ .TH curs_get_wstr 3X "" .na .hy 0 .SH NAME \fBget_wstr\fR, \fBgetn_wstr\fR, \fBwget_wstr\fR, \fBwgetn_wstr\fR, \fBmvget_wstr\fR, \fBmvgetn_wstr\fR, \fBmvwget_wstr\fR, \fBmvwgetn_wstr\fR \- get an array of wide characters from a curses terminal keyboard .ad .hy .SH SYNOPSIS .nf \fB#include \fR .sp \fBint get_wstr(wint_t *\fR\fIwstr\fR\fB);\fR .br \fBint getn_wstr(wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint wget_wstr(WINDOW *\fR\fIwin\fR\fB, wint_t *\fR\fIwstr\fR\fB);\fR .br \fBint wgetn_wstr(WINDOW *\fR\fIwin\fR\fB, wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvget_wstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB);\fR .br \fBint mvgetn_wstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvwget_wstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB);\fR .br \fBint mvwgetn_wstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR .fi .SH DESCRIPTION The effect of \fBget_wstr\fR is as though a series of calls to \fBget_wch\fR were made, until a newline, other end-of-line, or end-of-file condition is processed. An end-of-file condition is represented by \fBWEOF\fR, as defined in \fB\fR. The newline and end-of-line conditions are represented by the \fB\\n\fR \fBwchar_t\fR value. In all instances, the end of the string is terminated by a null \fBwchar_t\fR. The routine places resulting values in the area pointed to by \fIwstr\fR. .PP The user's erase and kill characters are interpreted. If keypad mode is on for the window, \fBKEY_LEFT\fR and \fBKEY_BACKSPACE\fR are both considered equivalent to the user's kill character. .PP Characters input are echoed only if \fBecho\fR is currently on. In that case, backspace is echoed as deletion of the previous character (typically a left motion). .PP The effect of \fBwget_wstr\fR is as though a series of calls to \fBwget_wch\fR were made. .PP The effect of \fBmvget_wstr\fR is as though a call to \fBmove\fR and then a series of calls to \fBget_wch\fR were made. .PP The effect of \fBmvwget_wstr\fR is as though a call to \fBwmove\fR and then a series of calls to \fBwget_wch\fR were made. .PP The \fBgetn_wstr\fR, \fBmvgetn_wstr\fR, \fBmvwgetn_wstr\fR, and \fBwgetn_wstr\fR functions are identical to the \fBget_wstr\fR, \fBmvget_wstr\fR, \fBmvwget_wstr\fR, and \fBwget_wstr\fR functions, respectively, except that the \fB*n_*\fR versions read at most \fIn\fR characters, letting the application prevent overflow of the input buffer. .SH NOTES Using \fBget_wstr\fR, \fBmvget_wstr\fR, \fBmvwget_wstr\fR, or \fBwget_wstr\fR to read a line that overflows the array pointed to by \fBwstr\fR causes undefined results. The use of \fBgetn_wstr\fR, \fBmvgetn_wstr\fR, \fBmvwgetn_wstr\fR, or \fBwgetn_wstr\fR, respectively, is recommended. .PP These functions cannot return \fBKEY_\fR values because there is no way to distinguish a \fBKEY_\fR value from a valid \fBwchar_t\fR value. .PP All of these routines except \fBwgetn_wstr\fR may be macros. .SH RETURN VALUE All of these functions return \fBOK\fR upon successful completion. Otherwise, they return \fBERR\fR. .PP Functions using a window parameter return an error if it is null. .RS .TP 5 \fBwgetn_wstr\fP returns an error if the associated call to \fBwget_wch\fP failed. .RE .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH PORTABILITY These functions are described in The Single Unix Specification, Version 2. No error conditions are defined. This implementation returns ERR if the window pointer is null, or if the lower-level \fBwget_wch\fR call returns an ERR. In the latter case, an ERR return without other data is treated as an end-of-file condition, and the returned array contains a \fBWEOF\fR followed by a null \fBwchar_t\fR. .PP X/Open curses documents these functions to pass an array of \fBwchar_t\fR, but all of the vendors implement this using \fBwint_t\fR. .SH SEE ALSO Functions: \fBcurses\fR(3X), \fBcurs_get_wch\fR(3X), \fBcurs_getstr\fR(3X). ncurses-6.0-20160213/man/form_field_opts.3x0000644000175100001440000001147512630674407016677 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_field_opts.3x,v 1.20 2015/12/05 23:53:43 tom Exp $ .TH form_field_opts 3X "" .SH NAME \fBset_field_opts\fP, \fBfield_opts_on\fP, \fBfield_opts_off\fP, \fBfield_opts\fP \- set and get field options .SH SYNOPSIS \fB#include \fR .br int set_field_opts(FIELD *field, Field_Options opts); .br int field_opts_on(FIELD *field, Field_Options opts); .br int field_opts_off(FIELD *field, Field_Options opts); .br Field_Options field_opts(const FIELD *field); .br .SH DESCRIPTION The function \fBset_field_opts\fR sets all the given field's option bits (field option bits may be logically-OR'ed together). .PP The function \fBfield_opts_on\fR turns on the given option bits, and leaves others alone. .PP The function \fBfield_opts_off\fR turns off the given option bits, and leaves others alone. .PP The function \fBfield_opts\fR returns the field's current option bits. .PP The following standard options are defined (all are on by default): .TP 5 O_ACTIVE The field is visited during processing. If this option is off, the field will not be reachable by navigation keys. Please notice that an invisible field appears to be inactive also. .TP 5 O_AUTOSKIP Skip to the next field when this one fills. .TP 5 O_BLANK The field is cleared whenever a character is entered at the first position. .TP 5 O_EDIT The field can be edited. .TP 5 O_NULLOK Allow a blank field. .TP 5 O_PASSOK Validate field only if modified by user. .TP 5 O_PUBLIC The field contents are displayed as data is entered. .TP 5 O_STATIC Field buffers are fixed to field's original size. Turn this option off to create a dynamic field. .TP 5 O_VISIBLE The field is displayed. If this option is off, display of the field is suppressed. .TP 5 O_WRAP Words that do not fit on a line are wrapped to the next line. Words are blank-separated. .PP These extension options are defined (extensions are off by default): .TP 5 O_DYNAMIC_JUSTIFY Permit dynamic fields to be justified, like static fields. .TP 5 O_NO_LEFT_STRIP Preserve leading whitespace in the field buffer, which is normally discarded. .SH RETURN VALUE Except for \fBfield_opts\fR, each routine returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_CURRENT The field is the current field. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). \fBform_field_just\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/form_hook.3x0000644000175100001440000001050711476505455015505 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2007,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_hook.3x,v 1.11 2010/12/04 18:40:45 tom Exp $ .TH form_hook 3X "" .SH NAME \fBform_hook\fR \- set hooks for automatic invocation by applications .SH SYNOPSIS \fB#include \fR .br int set_field_init(FORM *form, Form_Hook func); .br Form_Hook field_init(const FORM *form); .br int set_field_term(FORM *form, Form_Hook func); .br Form_Hook field_term(const FORM *form); .br int set_form_init(FORM *form, Form_Hook func); .br Form_Hook form_init(const FORM *form); .br int set_form_term(FORM *form, Form_Hook func); .br Form_Hook form_term(const FORM *form); .br .SH DESCRIPTION These functions make it possible to set hook functions to be called at various points in the automatic processing of input event codes by \fBform_driver\fR. .PP The function \fBset_field_init\fR sets a hook to be called at form-post time and each time the selected field changes (after the change). \fBfield_init\fR returns the current field init hook, if any (\fBNULL\fR if there is no such hook). .PP The function \fBset_field_term\fR sets a hook to be called at form-unpost time and each time the selected field changes (before the change). \fBfield_term\fR returns the current field term hook, if any (\fBNULL\fR if there is no such hook). .PP The function \fBset_form_init\fR sets a hook to be called at form-post time and just after a page change once it is posted. \fBform_init\fR returns the current form init hook, if any (\fBNULL\fR if there is no such hook). .PP The function \fBset_form_term\fR sets a hook to be called at form-unpost time and just before a page change once it is posted. \fBform_init\fR returns the current form term hook, if any (\fBNULL\fR if there is no such hook). .SH RETURN VALUE Routines that return pointers return \fBNULL\fR on error. Other routines return one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_inchstr.3x0000644000175100001440000001111511476505074016221 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_inchstr.3x,v 1.15 2010/12/04 18:36:44 tom Exp $ .TH curs_inchstr 3X "" .na .hy 0 .SH NAME \fBinchstr\fR, \fBinchnstr\fR, \fBwinchstr\fR, \fBwinchnstr\fR, \fBmvinchstr\fR, \fBmvinchnstr\fR, \fBmvwinchstr\fR, \fBmvwinchnstr\fR \- get a string of characters (and attributes) from a \fBcurses\fR window .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint inchstr(chtype *chstr);\fR .br \fBint inchnstr(chtype *chstr, int n);\fR .br \fBint winchstr(WINDOW *win, chtype *chstr);\fR .br \fBint winchnstr(WINDOW *win, chtype *chstr, int n);\fR .br \fBint mvinchstr(int y, int x, chtype *chstr);\fR .br \fBint mvinchnstr(int y, int x, chtype *chstr, int n);\fR .br \fBint mvwinchstr(WINDOW *win, int y, int x, chtype *chstr);\fR .br \fBint mvwinchnstr(WINDOW *win, int y, int x, chtype *chstr, int n);\fR .br .SH DESCRIPTION These routines return a NULL-terminated array of \fBchtype\fR quantities, starting at the current cursor position in the named window and ending at the right margin of the window. The four functions with \fIn\fR as the last argument, return a leading substring at most \fIn\fR characters long (exclusive of the trailing (chtype)0). Constants defined in \fB\fR can be used with the \fB&\fR (logical AND) operator to extract the character or the attribute alone from any position in the \fIchstr\fR [see \fBcurs_inch\fR(3X)]. .SH RETURN VALUE All routines return the integer \fBERR\fR upon failure and an integer value other than \fBERR\fR upon successful completion (the number of characters retrieved, exclusive of the trailing 0). .PP No error conditions are defined. If the \fIchstr\fP parameter is null, no data is returned, and the return value is zero. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES Note that all routines except \fBwinchnstr\fR may be macros. SVr4 does not document whether the result string is zero-terminated; it does not document whether a length limit argument includes any trailing 0; and it does not document the meaning of the return value. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. It is no more specific than the SVr4 documentation on the trailing 0. It does specify that the successful return of the functions is \fBOK\fR. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_inch\fR(3X). .PP Comparable functions in the wide-character (ncursesw) library are described in \fBcurs_in_wchstr\fR(3X). ncurses-6.0-20160213/man/form.3x0000644000175100001440000001765312557457032014474 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form.3x,v 1.26 2015/08/02 18:14:50 tom Exp $ .TH form 3X "" .SH NAME \fBform\fR \- curses extension for programming forms .SH SYNOPSIS \fB#include \fR .br .SH DESCRIPTION The \fBform\fR library provides terminal-independent facilities for composing form screens on character-cell terminals. The library includes: field routines, which create and modify form fields; and form routines, which group fields into forms, display forms on the screen, and handle interaction with the user. .PP The \fBform\fR library uses the \fBcurses\fR libraries. To use the \fBform\fR library, link with the options \fB\-lform \-lcurses\fR. .PP Your program should set up the locale, e.g., .sp \fBsetlocale(LC_ALL, "");\fP .sp so that input/output processing will work. .PP A curses initialization routine such as \fBinitscr\fR must be called before using any of these functions. . .SS Current Default Values for Field Attributes . The \fBform\fR library maintains a default value for field attributes. You can get or set this default by calling the appropriate \fBset_\fR or retrieval routine with a \fBNULL\fR field pointer. Changing this default with a \fBset_\fR function affects future field creations, but does not change the rendering of fields already created. . .SS Routine Name Index . The following table lists each \fBform\fR routine and the name of the manual page on which it is described. . .TS l l l l . \fBcurses\fR Routine Name Manual Page Name = current_field \fBform_page\fR(3X) data_ahead \fBform_data\fR(3X) data_behind \fBform_data\fR(3X) dup_field \fBform_field_new\fR(3X) dynamic_field_info \fBform_field_info\fR(3X) field_arg \fBform_field_validation\fR(3X) field_back \fBform_field_attributes\fR(3X) field_buffer \fBform_field_buffer\fR(3X) field_count \fBform_field\fR(3X) field_fore \fBform_field_attributes\fR(3X) field_index \fBform_page\fR(3X) field_info \fBform_field_info\fR(3X) field_init \fBform_hook\fR(3X) field_just \fBform_field_just\fR(3X) field_opts \fBform_field_opts\fR(3X) field_opts_off \fBform_field_opts\fR(3X) field_opts_on \fBform_field_opts\fR(3X) field_pad \fBform_field_attributes\fR(3X) field_status \fBform_field_buffer\fR(3X) field_term \fBform_hook\fR(3X) field_type \fBform_field_validation\fR(3X) field_userptr \fBform_field_userptr\fR(3X) form_driver \fBform_driver\fR(3X) form_driver_w \fBform_driver\fR(3X)* form_fields \fBform_field\fR(3X) form_init \fBform_hook\fR(3X) form_opts \fBform_opts\fR(3X) form_opts_off \fBform_opts\fR(3X) form_opts_on \fBform_opts\fR(3X) form_page \fBform_page\fR(3X) form_request_by_name \fBform_requestname\fR(3X) form_request_name \fBform_requestname\fR(3X) form_sub \fBform_win\fR(3X) form_term \fBform_hook\fR(3X) form_userptr \fBform_userptr\fR(3X) form_win \fBform_win\fR(3X) free_field \fBform_field_new\fR(3X) free_fieldtype \fBform_fieldtype\fR(3X) free_form \fBform_new\fR(3X) link_field \fBform_field_new\fR(3X) link_fieldtype \fBform_fieldtype\fR(3X) move_field \fBform_field\fR(3X) new_field \fBform_field_new\fR(3X) new_fieldtype \fBform_fieldtype\fR(3X) new_form \fBform_new\fR(3X) new_page \fBform_new_page\fR(3X) pos_form_cursor \fBform_cursor\fR(3X) post_form \fBform_post\fR(3X) scale_form \fBform_win\fR(3X) set_current_field \fBform_page\fR(3X) set_field_back \fBform_field_attributes\fR(3X) set_field_buffer \fBform_field_buffer\fR(3X) set_field_fore \fBform_field_attributes\fR(3X) set_field_init \fBform_hook\fR(3X) set_field_just \fBform_field_just\fR(3X) set_field_opts \fBform_field_opts\fR(3X) set_field_pad \fBform_field_attributes\fR(3X) set_field_status \fBform_field_buffer\fR(3X) set_field_term \fBform_hook\fR(3X) set_field_type \fBform_field_validation\fR(3X) set_field_userptr \fBform_field_userptr\fR(3X) set_fieldtype_arg \fBform_fieldtype\fR(3X) set_fieldtype_choice \fBform_fieldtype\fR(3X) set_form_fields \fBform_field\fR(3X) set_form_init \fBform_hook\fR(3X) set_form_opts \fBform_field_opts\fR(3X) set_form_page \fBform_page\fR(3X) set_form_sub \fBform_win\fR(3X) set_form_term \fBform_hook\fR(3X) set_form_userptr \fBform_userptr\fR(3X) set_form_win \fBform_win\fR(3X) set_max_field \fBform_field_buffer\fR(3X) set_new_page \fBform_new_page\fR(3X) unpost_form \fBform_post\fR(3X) .TE .SH RETURN VALUE Routines that return pointers return \fBNULL\fR on error, and set errno to the corresponding error-code returned by functions returning an integer. Routines that return an integer return one of the following error codes: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_BAD_STATE Routine was called from an initialization or termination function. .TP 5 .B E_CONNECTED The field is already connected to a form. .TP 5 .B E_INVALID_FIELD Contents of a field are not valid. .TP 5 .B E_NOT_CONNECTED No fields are connected to the form. .TP 5 .B E_NOT_POSTED The form has not been posted. .TP 5 .B E_NO_ROOM Form is too large for its window. .TP 5 .B E_POSTED The form is already posted. .TP 5 .B E_REQUEST_DENIED The form driver could not process the request. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_UNKNOWN_COMMAND The form driver code saw an unknown request code. .SH NOTES The header file \fB\fR automatically includes the header files \fB\fR and \fB\fR. .PP In your library list, libform.a should be before libncurses.a; that is, you want to say `\-lform \-lncurses', not the other way around (which would give you a link error using most linkers). .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for ncurses by Eric S. Raymond. .SH SEE ALSO \fBcurses\fR(3X) and related pages whose names begin "form_" for detailed descriptions of the entry points. .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). ncurses-6.0-20160213/man/manhtml.aliases0000644000175100001440000000104112255405724016234 0ustar tomusers# $Id: manhtml.aliases,v 1.1 2013/12/21 21:44:52 tom Exp $ # Items in this list will be linked to the corresponding manpages by man2html addch(3X) curs_addch(3X) delscreen(3X) curs_initscr(3X) filter(3X) curs_util(3X) form_fieldtype(3X) form_fieldtype(3X) getch(3X) curs_getch(3X) infocmp(1) infocmp(1M) initscr(3X) curs_initscr(3X) newterm(3X) curs_initscr(3X) set_fieldtype(3X) form_fieldtype(3X) set_term(3X) curs_initscr(3X) setupterm(3X) curs_terminfo(3X) tic(1) tic(1M) use_env(3X) curs_util(3X) vidputs(3X) curs_terminfo(3X) ncurses-6.0-20160213/man/curs_ins_wch.3x0000644000175100001440000000647011476505277016216 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_ins_wch.3x,v 1.5 2010/12/04 18:38:55 tom Exp $ .TH curs_ins_wch 3X "" .SH NAME \fBins_wch\fR, \fBmvins_wch\fR, \fBmvwins_wch\fR, \fBwins_wch\fR \- insert a complex character and rendition into a window .SH SYNOPSIS #include .sp \fBint ins_wch(const cchar_t *\fR\fIwch\fR\fB);\fR .br \fBint wins_wch(WINDOW *\fR\fIwin, const cchar_t *\fR\fIwch\fR\fB);\fR .br \fBint mvins_wch(int \fR\fIy, int \fR\fIx, const cchar_t *\fR\fIwch\fR\fB);\fR .br \fBint mvwins_wch(WINDOW *\fR\fIwin, int \fR\fIy, int \fR\fIx, const cchar_t *\fR\fIwch\fR\fB);\fR .SH DESCRIPTION These routines, insert the complex character \fIwch\fR with rendition before the character under the cursor. All characters to the right of the cursor are moved one space to the right, with the possibility of the rightmost character on the line being lost. The insertion operation does not change the cursor position. .SH RETURN VALUE If successful, these functions return OK. If not, they return ERR. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH ERRORS No errors are defined. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_insch\fR(3X). ncurses-6.0-20160213/man/mitem_current.3x0000644000175100001440000001037111476505455016376 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: mitem_current.3x,v 1.13 2010/12/04 18:40:45 tom Exp $ .TH mitem_current 3X "" .SH NAME \fBmitem_current\fR \- set and get current_menu_item .SH SYNOPSIS \fB#include \fR .br int set_current_item(MENU *menu, const ITEM *item); .br ITEM *current_item(const MENU *menu); .br int set_top_row(MENU *menu, int row); .br int top_row(const MENU *menu); .br int item_index(const ITEM *item); .br .SH DESCRIPTION The function \fBset_current_item\fR sets the current item (the item on which the menu cursor is positioned). \fBcurrent_item\fR returns a pointer to the current item in the given menu. .PP The function \fBset_top_row\fR sets the top row of the menu to show the given row (the top row is initially 0, and is reset to this value whenever the \fBO_ROWMAJOR\fR option is toggled). The item leftmost on the given row becomes current. The function \fBtop_row\fR returns the number of the top menu row being displayed. .PP The function \fBitem_index\fR returns the (zero-origin) index of \fIitem\fR in the menu's item pointer list. .SH RETURN VALUE \fBcurrent_item\fR returns a pointer (which may be \fBNULL\fR). It does not set errno. .PP \fBtop_row\fR and \fBitem_index\fR return \fBERR\fR (the general \fBcurses\fR error value) if their \fImenu\fP parameter is \fBNULL\fP. .PP \fBset_current_item\fR and \fBset_top_row\fR return one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_BAD_STATE Routine was called from an initialization or termination function. .TP 5 .B E_NOT_CONNECTED No items are connected to the menu. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .PP The SVr4 menu library documentation specifies the \fBtop_row\fR and \fBindex_item\fR error value as \-1 (which is the value of \fBERR\fR). .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/menu_spacing.3x0000644000175100001440000001034212630673165016164 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_spacing.3x,v 1.13 2015/12/05 23:42:45 tom Exp $ .TH menu_spacing 3X "" .SH NAME \fBset_menu_spacing\fP, \fBmenu_spacing\fR \- set and get spacing between menu items. .SH SYNOPSIS \fB#include \fR .br int set_menu_spacing(MENU *menu, int spc_description, int spc_rows, int spc_columns); .br int menu_spacing(const MENU *menu, int* spc_description, int* spc_rows, int* spc_columns); .br .SH DESCRIPTION The function \fBset_menu_spacing\fR sets the spacing information for the menu. Its parameter \fBspc_description\fR controls the number of spaces between an item name and an item description. It must not be larger than \fBTABSIZE\fR. The menu system puts in the middle of this spacing area the pad character. The remaining parts are filled with spaces. The \fBspc_rows\fR parameter controls the number of rows that are used for an item. It must not be larger than 3. The menu system inserts the blank lines between item rows, these lines will contain the pad character in the appropriate positions. The \fBspc_columns\fR parameter controls the number of blanks between columns of items. It must not be larger than TABSIZE. A value of 0 for all the spacing values resets them to the default, which is 1 for all of them. .br The function \fBmenu_spacing\fR passes back the spacing info for the menu. If a pointer is NULL, this specific info is simply not returned. .SH RETURN VALUE Both routines return \fBE_OK\fR on success. \fBset_menu_spacing\fR may return \fBE_POSTED\fR if the menu is posted, or \fBE_BAD_ARGUMENT\fR if one of the spacing values is out of range. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_variables\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on them be conditioned using NCURSES_VERSION. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/menu_userptr.3x0000644000175100001440000000635212630673165016252 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_userptr.3x,v 1.11 2015/12/05 23:42:45 tom Exp $ .TH menu_userptr 3X "" .SH NAME \fBset_menu_userptr\fP, \fBmenu_userptr\fR \- associate application data with a menu item .SH SYNOPSIS \fB#include \fR .br int set_menu_userptr(MENU *menu, void *userptr); .br void *menu_userptr(const MENU *menu); .br .SH DESCRIPTION Every menu and every menu item has a field that can be used to hold application-specific data (that is, the menu-driver code leaves it alone). These functions get and set the menu user pointer field. .SH RETURN VALUE \fBmenu_userptr\fR returns a pointer (which may be \fBNULL\fR). It does not set errno. .PP \fBset_menu_userptr\fP returns \fBE_OK\fP (success). .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .PP The user pointer is a void pointer. We chose not to leave it as a char pointer for SVr4 compatibility. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/tic.1m0000644000175100001440000003663312572652175014274 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: tic.1m,v 1.61 2015/09/05 20:45:49 tom Exp $ .TH @TIC@ 1M "" .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .ds n 5 .ds d @TERMINFO@ .de bP .IP \(bu 4 .. .SH NAME \fB@TIC@\fR \- the \fIterminfo\fR entry-description compiler .SH SYNOPSIS \fB@TIC@\fR [\fB\-\ 0\ 1\ C\ D\ G\ I\ K\ L\ N\ T\ U\ V\ a\ c\ f\ g\ q\ r\ s\ t\ x\ \fR] [\fB\-e\fR \fInames\fR] [\fB\-o\fR \fIdir\fR] [\fB\-Q\fR[\fIn\fR]] [\fB\-R\fR \fIsubset\fR] [\fB\-v\fR[\fIn\fR]] [\fB\-w\fR[\fIn\fR]] \fIfile\fR .br .SH DESCRIPTION The \fB@TIC@\fR command translates a \fBterminfo\fR file from source format into compiled format. The compiled format is necessary for use with the library routines in \fBncurses\fR(3X). .PP As described in \fBterm\fR(\*n), the database may be either a directory tree (one file per terminal entry) or a hashed database (one record per entry). The \fB@TIC@\fR command writes only one type of entry, depending on how it was built: .bP For directory trees, the top-level directory, e.g., /usr/share/terminfo, specifies the location of the database. .bP For hashed databases, a filename is needed. If the given file is not found by that name, but can be found by adding the suffix ".db", then that is used. .IP The default name for the hashed database is the same as the default directory name (only adding a ".db" suffix). .PP In either case (directory or hashed database), \fB@TIC@\fP will create the container if it does not exist. For a directory, this would be the "terminfo" leaf, versus a "terminfo.db" file. .PP The results are normally placed in the system terminfo database \fB\*d\fR. The compiled terminal description can be placed in a different terminfo database. There are two ways to achieve this: .bP First, you may override the system default either by using the \fB\-o\fP option, or by setting the variable \fBTERMINFO\fR in your shell environment to a valid database location. .bP Secondly, if \fB@TIC@\fR cannot write in \fI\*d\fR or the location specified using your TERMINFO variable, it looks for the directory \fI$HOME/.terminfo\fR (or hashed database \fI$HOME/.terminfo.db)\fR; if that location exists, the entry is placed there. .PP Libraries that read terminfo entries are expected to check in succession .bP a location specified with the TERMINFO environment variable, .bP \fI$HOME/.terminfo\fR, .bP directories listed in the TERMINFO_DIRS environment variable, .bP a compiled-in list of directories (@TERMINFO_DIRS@), and .bP the system terminfo database (\fI\*d\fR). .SS OPTIONS .TP \fB\-0\fR restricts the output to a single line .TP \fB\-1\fR restricts the output to a single column .TP \fB\-a\fR tells \fB@TIC@\fP to retain commented-out capabilities rather than discarding them. Capabilities are commented by prefixing them with a period. This sets the \fB\-x\fR option, because it treats the commented-out entries as user-defined names. If the source is termcap, accept the 2-character names required by version 6. Otherwise these are ignored. .TP \fB\-C\fR Force source translation to termcap format. Note: this differs from the \fB\-C\fR option of \fB@INFOCMP@\fR(1M) in that it does not merely translate capability names, but also translates terminfo strings to termcap format. Capabilities that are not translatable are left in the entry under their terminfo names but commented out with two preceding dots. The actual format used incorporates some improvements for escaped characters from terminfo format. For a stricter BSD-compatible translation, add the \fB\-K\fR option. .IP If this is combined with \fB\-c\fR, \fB@TIC@\fR makes additional checks to report cases where the terminfo values do not have an exact equivalent in termcap form. For example: .RS .bP \fBsgr\fP usually will not convert, because termcap lacks the ability to work with more than two parameters, and because termcap lacks many of the arithmetic/logical operators used in terminfo. .bP capabilities with more than one delay or with delays before the end of the string will not convert completely. .RE .TP \fB\-c\fR tells \fB@TIC@\fP to only check \fIfile\fR for errors, including syntax problems and bad use links. If you specify \fB\-C\fR (\fB\-I\fR) with this option, the code will print warnings about entries which, after use resolution, are more than 1023 (4096) bytes long. Due to a fixed buffer length in older termcap libraries, as well as buggy checking for the buffer length (and a documented limit in terminfo), these entries may cause core dumps with other implementations. .IP \fB@TIC@\fP checks string capabilities to ensure that those with parameters will be valid expressions. It does this check only for the predefined string capabilities; those which are defined with the \fB\-x\fP option are ignored. .TP \fB\-D\fR tells \fB@TIC@\fP to print the database locations that it knows about, and exit. The first location shown is the one to which it would write compiled terminal descriptions. If \fB@TIC@\fP is not able to find a writable database location according to the rules summarized above, it will print a diagnostic and exit with an error rather than printing a list of database locations. .TP \fB\-e \fR\fInames\fR Limit writes and translations to the following comma-separated list of terminals. If any name or alias of a terminal matches one of the names in the list, the entry will be written or translated as normal. Otherwise no output will be generated for it. The option value is interpreted as a file containing the list if it contains a '/'. (Note: depending on how tic was compiled, this option may require \fB\-I\fR or \fB\-C\fR.) .TP \fB\-f\fR Display complex terminfo strings which contain if/then/else/endif expressions indented for readability. .TP \fB\-G\fR Display constant literals in decimal form rather than their character equivalents. .TP \fB\-g\fR Display constant character literals in quoted form rather than their decimal equivalents. .TP \fB\-I\fR Force source translation to terminfo format. .TP \fB\-K\fR Suppress some longstanding ncurses extensions to termcap format, e.g., "\\s" for space. .TP \fB\-L\fR Force source translation to terminfo format using the long C variable names listed in <\fBterm.h\fR> .TP \fB\-N\fR Disable smart defaults. Normally, when translating from termcap to terminfo, the compiler makes a number of assumptions about the defaults of string capabilities \fBreset1_string\fR, \fBcarriage_return\fR, \fBcursor_left\fR, \fBcursor_down\fR, \fBscroll_forward\fR, \fBtab\fR, \fBnewline\fR, \fBkey_backspace\fR, \fBkey_left\fR, and \fBkey_down\fR, then attempts to use obsolete termcap capabilities to deduce correct values. It also normally suppresses output of obsolete termcap capabilities such as \fBbs\fR. This option forces a more literal translation that also preserves the obsolete capabilities. .TP \fB\-o\fR\fIdir\fR Write compiled entries to given database location. Overrides the TERMINFO environment variable. .TP \fB\-Q\fR\fIn\fR Rather than show source in terminfo (text) format, print the compiled (binary) format in hexadecimal or base64 form, depending on the option's value: .RS 8 .TP 3 1 hexadecimal .TP 3 2 base64 .TP 3 3 hexadecimal and base64 .RE .TP \fB\-q\fR Suppress comments and blank lines when showing translated source. .TP \fB\-R\fR\fIsubset\fR Restrict output to a given subset. This option is for use with archaic versions of terminfo like those on SVr1, Ultrix, or HP/UX that do not support the full set of SVR4/XSI Curses terminfo; and outright broken ports like AIX 3.x that have their own extensions incompatible with SVr4/XSI. Available subsets are "SVr1", "Ultrix", "HP", "BSD" and "AIX"; see \fBterminfo\fR(\*n) for details. .TP \fB\-r\fR Force entry resolution (so there are no remaining tc capabilities) even when doing translation to termcap format. This may be needed if you are preparing a termcap file for a termcap library (such as GNU termcap through version 1.3 or BSD termcap through 4.3BSD) that does not handle multiple tc capabilities per entry. .TP \fB\-s\fR Summarize the compile by showing the database location into which entries are written, and the number of entries which are compiled. .TP \fB\-T\fR eliminates size-restrictions on the generated text. This is mainly useful for testing and analysis, since the compiled descriptions are limited (e.g., 1023 for termcap, 4096 for terminfo). .TP \fB\-t\fR tells \fB@TIC@\fP to discard commented-out capabilities. Normally when translating from terminfo to termcap, untranslatable capabilities are commented-out. .TP 5 \fB\-U\fR tells \fB@TIC@\fP to not post-process the data after parsing the source file. Normally, it infers data which is commonly missing in older terminfo data, or in termcaps. .TP \fB\-V\fR reports the version of ncurses which was used in this program, and exits. .TP \fB\-v\fR\fIn\fR specifies that (verbose) output be written to standard error trace information showing \fB@TIC@\fR's progress. The optional parameter \fIn\fR is a number from 1 to 10, inclusive, indicating the desired level of detail of information. If \fIn\fR is omitted, the default level is 1. If \fIn\fR is specified and greater than 1, the level of detail is increased. .RS .PP The debug flag levels are as follows: .TP 1 Names of files created and linked .TP 2 Information related to the \*(``use\*('' facility .TP 3 Statistics from the hashing algorithm .TP 5 String-table memory allocations .TP 7 Entries into the string-table .TP 8 List of tokens encountered by scanner .TP 9 All values computed in construction of the hash table .LP If the debug level \fIn\fR is not given, it is taken to be one. .RE .TP \fB\-w\fR\fIn\fR specifies the width of the output. The parameter is optional. If it is omitted, it defaults to 60. .TP \fB\-x\fR Treat unknown capabilities as user-defined. That is, if you supply a capability name which \fB@TIC@\fP does not recognize, it will infer its type (boolean, number or string) from the syntax and make an extended table entry for that. User-defined capability strings whose name begins with \*(``k\*('' are treated as function keys. .SS PARAMETERS .TP \fIfile\fR contains one or more \fBterminfo\fR terminal descriptions in source format [see \fBterminfo\fR(\*n)]. Each description in the file describes the capabilities of a particular terminal. .IP If \fIfile\fR is \*(``-\*('', then the data is read from the standard input. The \fIfile\fR parameter may also be the path of a character-device. .SS PROCESSING .PP All but one of the capabilities recognized by \fB@TIC@\fR are documented in \fBterminfo\fR(\*n). The exception is the \fBuse\fR capability. .PP When a \fBuse\fR=\fIentry\fR\-\fIname\fR field is discovered in a terminal entry currently being compiled, \fB@TIC@\fR reads in the binary from \fB\*d\fR to complete the entry. (Entries created from \fIfile\fR will be used first. \fB@TIC@\fR duplicates the capabilities in \fIentry\fR\-\fIname\fR for the current entry, with the exception of those capabilities that explicitly are defined in the current entry. .PP When an entry, e.g., \fBentry_name_1\fR, contains a \fBuse=\fR\fIentry\fR_\fIname\fR_\fI2\fR field, any canceled capabilities in \fIentry\fR_\fIname\fR_\fI2\fR must also appear in \fBentry_name_1\fR before \fBuse=\fR for these capabilities to be canceled in \fBentry_name_1\fR. .PP Total compiled entries cannot exceed 4096 bytes. The name field cannot exceed 512 bytes. Terminal names exceeding the maximum alias length (32 characters on systems with long filenames, 14 characters otherwise) will be truncated to the maximum alias length and a warning message will be printed. .SH COMPATIBILITY There is some evidence that historic \fB@TIC@\fR implementations treated description fields with no whitespace in them as additional aliases or short names. This \fB@TIC@\fR does not do that, but it does warn when description fields may be treated that way and check them for dangerous characters. .SH EXTENSIONS Unlike the SVr4 \fB@TIC@\fR command, this implementation can actually compile termcap sources. In fact, entries in terminfo and termcap syntax can be mixed in a single source file. See \fBterminfo\fR(\*n) for the list of termcap names taken to be equivalent to terminfo names. .PP The SVr4 manual pages are not clear on the resolution rules for \fBuse\fR capabilities. This implementation of \fB@TIC@\fR will find \fBuse\fR targets anywhere in the source file, or anywhere in the file tree rooted at \fBTERMINFO\fR (if \fBTERMINFO\fR is defined), or in the user's \fI$HOME/.terminfo\fR database (if it exists), or (finally) anywhere in the system's file tree of compiled entries. .PP The error messages from this \fB@TIC@\fR have the same format as GNU C error messages, and can be parsed by GNU Emacs's compile facility. .PP The \fB\-0\fR, \fB\-1\fR, \fB\-C\fR, \fB\-G\fR, \fB\-I\fR, \fB\-N\fR, \fB\-R\fR, \fB\-T\fR, \fB\-V\fR, \fB\-a\fR, \fB\-e\fR, \fB\-f\fR, \fB\-g\fR, \fB\-o\fR, \fB\-r\fR, \fB\-s\fR, \fB\-t\fR and \fB\-x\fR options are not supported under SVr4. The SVr4 \fB\-c\fR mode does not report bad use links. .PP System V does not compile entries to or read entries from your \fI$HOME/.terminfo\fR database unless TERMINFO is explicitly set to it. .SH FILES .TP 5 \fB\*d/?/*\fR Compiled terminal description database. .SH SEE ALSO \fB@INFOCMP@\fR(1M), \fB@CAPTOINFO@\fR(1M), \fB@INFOTOCAP@\fR(1M), \fB@TOE@\fR(1M), \fBcurses\fR(3X), \fBterm\fR(\*n). \fBterminfo\fR(\*n). .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). .SH AUTHOR Eric S. Raymond and .br Thomas E. Dickey ncurses-6.0-20160213/man/curs_scroll.3x0000644000175100001440000001015011476505455016046 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_scroll.3x,v 1.15 2010/12/04 18:40:45 tom Exp $ .TH curs_scroll 3X "" .na .hy 0 .SH NAME \fBscroll\fR, \fBscrl\fR, \fBwscrl\fR \- scroll a \fBcurses\fR window .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint scroll(WINDOW *win);\fR .br \fBint scrl(int n);\fR .br \fBint wscrl(WINDOW *win, int n);\fR .br .SH DESCRIPTION The \fBscroll\fR routine scrolls the window up one line. This involves moving the lines in the window data structure. As an optimization, if the scrolling region of the window is the entire screen, the physical screen may be scrolled at the same time. .PP For positive \fIn\fR, the \fBscrl\fR and \fBwscrl\fR routines scroll the window up \fIn\fR lines (line \fIi\fR+\fIn\fR becomes \fIi\fR); otherwise scroll the window down \fIn\fR lines. This involves moving the lines in the window character image structure. The current cursor position is not changed. .PP For these functions to work, scrolling must be enabled via \fBscrollok\fR. .SH RETURN VALUE These routines return \fBERR\fR upon failure, and \fBOK\fR (SVr4 only specifies "an integer value other than \fBERR\fR") upon successful completion. .PP X/Open defines no error conditions. .PP This implementation returns an error if the window pointer is null, or if scrolling is not enabled in the window, e.g., with \fBscrollok\fP. .SH NOTES Note that \fBscrl\fR and \fBscroll\fR may be macros. .PP The SVr4 documentation says that the optimization of physically scrolling immediately if the scroll region is the entire screen "is" performed, not "may be" performed. This implementation deliberately does not guarantee that this will occur, to leave open the possibility of smarter optimization of multiple scroll actions on the next update. .PP Neither the SVr4 nor the XSI documentation specify whether the current attribute or current color-pair of blanks generated by the scroll function is zeroed. Under this implementation it is. .SH PORTABILITY The XSI Curses standard, Issue 4 describes these functions. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_outopts\fR(3X) ncurses-6.0-20160213/man/curs_border.3x0000644000175100001440000001312711476505074016031 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2007,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_border.3x,v 1.22 2010/12/04 18:36:44 tom Exp $ .TH curs_border 3X "" .na .hy 0 .SH NAME \fBborder\fR, \fBwborder\fR, \fBbox\fR, \fBhline\fR, \fBwhline\fR, \fBvline\fR, \fBwvline\fR, \fBmvhline\fR, \fBmvwhline\fR, \fBmvvline\fR, \fBmvwvline\fR \- create \fBcurses\fR borders, horizontal and vertical lines .ad .hy .SH SYNOPSIS \fB#include \fR .br \fBint border(chtype ls, chtype rs, chtype ts, chtype bs,\fR \fBchtype tl, chtype tr, chtype bl, chtype br);\fR .br \fBint wborder(WINDOW *win, chtype ls, chtype rs,\fR \fBchtype ts, chtype bs, chtype tl, chtype tr,\fR \fBchtype bl, chtype br);\fR .br \fBint box(WINDOW *win, chtype verch, chtype horch);\fR .br \fBint hline(chtype ch, int n);\fR .br \fBint whline(WINDOW *win, chtype ch, int n);\fR .br \fBint vline(chtype ch, int n);\fR .br \fBint wvline(WINDOW *win, chtype ch, int n);\fR .br \fBint mvhline(int y, int x, chtype ch, int n);\fR .br \fBint mvwhline(WINDOW *, int y, int x, chtype ch, int n);\fR .br \fBint mvvline(int y, int x, chtype ch, int n);\fR .br \fBint mvwvline(WINDOW *, int y, int x, chtype ch, int n);\fR .br .SH DESCRIPTION The \fBborder\fR, \fBwborder\fR and \fBbox\fR routines draw a box around the edges of a window. Other than the window, each argument is a character with attributes: .sp .RS \fIls\fR \- left side, .br \fIrs\fR \- right side, .br \fIts\fR \- top side, .br \fIbs\fR \- bottom side, .br \fItl\fR \- top left-hand corner, .br \fItr\fR \- top right-hand corner, .br \fIbl\fR \- bottom left-hand corner, and .br \fIbr\fR \- bottom right-hand corner. .RE .PP If any of these arguments is zero, then the corresponding default values (defined in \fBcurses.h\fR) are used instead: .sp .RS \fBACS_VLINE\fR, .br \fBACS_VLINE\fR, .br \fBACS_HLINE\fR, .br \fBACS_HLINE\fR, .br \fBACS_ULCORNER\fR, .br \fBACS_URCORNER\fR, .br \fBACS_LLCORNER\fR, .br \fBACS_LRCORNER\fR. .RE .PP \fBbox(\fR\fIwin\fR\fB, \fR\fIverch\fR\fB, \fR\fIhorch\fR\fB)\fR is a shorthand for the following call: \fBwborder(\fR\fIwin\fR\fB,\fR \fIverch\fR\fB,\fR \fIverch\fR\fB,\fR \fIhorch\fR\fB,\fR \fIhorch\fR\fB, 0, 0, 0, 0)\fR. .PP The \fBhline\fR and \fBwhline\fR functions draw a horizontal (left to right) line using \fIch\fR starting at the current cursor position in the window. The current cursor position is not changed. The line is at most \fIn\fR characters long, or as many as fit into the window. .PP The \fBvline\fR and \fBwvline\fR functions draw a vertical (top to bottom) line using \fIch\fR starting at the current cursor position in the window. The current cursor position is not changed. The line is at most \fIn\fR characters long, or as many as fit into the window. .SH RETURN VALUE All routines return the integer \fBOK\fR. The SVr4.0 manual says "or a non-negative integer if \fBimmedok\fR is set", but this appears to be an error. .PP X/Open does not define any error conditions. This implementation returns an error if the window pointer is null. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES The borders generated by these functions are \fIinside\fR borders (this is also true of SVr4 curses, though the fact is not documented). .PP Note that \fBborder\fR and \fBbox\fR may be macros. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. The standard specifies that they return \fBERR\fR on failure, but specifies no error conditions. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_outopts\fR(3X). ncurses-6.0-20160213/man/Makefile.in0000644000175100001440000000714212560514435015305 0ustar tomusers# $Id: Makefile.in,v 1.48 2015/08/05 23:15:41 tom Exp $ ############################################################################## # Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996,1997 # # Makefile for ncurses manual pages. # # NOTE: When you add or rename a man page, make sure you update both # the top-level MANIFEST and any man/*.renames files! SHELL = @SHELL@ VPATH = @srcdir@ DESTDIR = @DESTDIR@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ mandir = @mandir@ includesubdir = @includesubdir@ INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir) INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ all \ sources : terminfo.5 depend : tags : $(DESTDIR)$(mandir) : mkdir -p $@ EDITARGS = $(DESTDIR)$(mandir) $(srcdir) terminfo.5 *-config.1 $(srcdir)/*.[0-9]* install install.man : terminfo.5 $(DESTDIR)$(mandir) $(SHELL) ../edit_man.sh normal installing $(EDITARGS) uninstall uninstall.man : -$(SHELL) ../edit_man.sh normal removing $(EDITARGS) # We compose terminfo.5 from the real sources... CAPLIST=$(srcdir)/../include/@TERMINFO_CAPS@ terminfo.5: $(srcdir)/terminfo.head $(CAPLIST) $(srcdir)/terminfo.tail Makefile $(srcdir)/MKterminfo.sh $(SHELL) $(srcdir)/MKterminfo.sh $(srcdir)/terminfo.head $(CAPLIST) $(srcdir)/terminfo.tail >terminfo.5 mostlyclean : -rm -f core tags TAGS *~ *.bak *.ln *.atac trace clean: mostlyclean rm -f terminfo.5 ../edit_man.sed : make_sed.sh @MANPAGE_RENAMES@ $(SHELL) $(srcdir)/make_sed.sh @MANPAGE_RENAMES@ >../edit_man.sed distclean realclean: clean rm -f Makefile *-config.1 ../edit_man.* ../man_alias.* ncurses-6.0-20160213/man/curs_touch.3x0000644000175100001440000001160512630673204015667 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_touch.3x,v 1.16 2015/12/05 23:43:00 tom Exp $ .TH curs_touch 3X "" .na .hy 0 .SH NAME \fBtouchwin\fR, \fBtouchline\fR, \fBuntouchwin\fR, \fBwtouchln\fR, \fBis_linetouched\fR, \fBis_wintouched\fR \- \fBcurses\fR refresh control routines .ad .hy .SH SYNOPSIS \fB#include \fR .br \fBint touchwin(WINDOW *win);\fR .br \fBint touchline(WINDOW *win, int start, int count);\fR .br \fBint untouchwin(WINDOW *win);\fR .br \fBint wtouchln(WINDOW *win, int y, int n, int changed);\fR .br \fBbool is_linetouched(WINDOW *win, int line);\fR .br \fBbool is_wintouched(WINDOW *win);\fR .br .SH DESCRIPTION The \fBtouchwin\fR and \fBtouchline\fR routines throw away all optimization information about which parts of the window have been touched, by pretending that the entire window has been drawn on. This is sometimes necessary when using overlapping windows, since a change to one window affects the other window, but the records of which lines have been changed in the other window do not reflect the change. The routine \fBtouchline\fR only pretends that \fIcount\fR lines have been changed, beginning with line \fIstart\fR. .PP The \fBuntouchwin\fR routine marks all lines in the window as unchanged since the last call to \fBwrefresh\fR. .PP The \fBwtouchln\fR routine makes \fIn\fR lines in the window, starting at line \fIy\fR, look as if they have (\fIchanged\fR\fB=1\fR) or have not (\fIchanged\fR\fB=0\fR) been changed since the last call to \fBwrefresh\fR. .PP The \fBis_linetouched\fR and \fBis_wintouched\fR routines return \fBTRUE\fR if the specified line/window was modified since the last call to \fBwrefresh\fR; otherwise they return \fBFALSE\fR. In addition, \fBis_linetouched\fR returns \fBERR\fR if \fIline\fR is not valid for the given window. .SH RETURN VALUE All routines return the integer \fBERR\fR upon failure and an integer value other than \fBERR\fR upon successful completion, unless otherwise noted in the preceding routine descriptions. .PP X/Open does not define any error conditions. In this implementation .RS .TP 5 \fBis_linetouched\fP returns an error if the window pointer is null, or if the line number is outside the window. Note that ERR is distinct from \fBTRUE\fP and \fBFALSE\fP, which are the normal return values of this function. .TP 5 \fBwtouchln\fP returns an error if the window pointer is null, or if the line number is outside the window. .RE .SH PORTABILITY The XSI Curses standard, Issue 4 describes these functions. .PP Some historic curses implementations had, as an undocumented feature, the ability to do the equivalent of \fBclearok(..., 1)\fR by saying \fBtouchwin(stdscr)\fR or \fBclear(stdscr)\fR. This will not work under ncurses. .SH NOTES Note that all routines except \fBwtouchln\fR may be macros. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_refresh\fR(3X), \fBcurs_variables\fR(3X). ncurses-6.0-20160213/man/form_field_info.3x0000644000175100001440000000760312630666274016646 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_field_info.3x,v 1.13 2015/12/05 23:01:16 tom Exp $ .TH form_field_info 3X "" .SH NAME \fBdynamic_field_info\fP, \fBfield_info\fR \- retrieve field characteristics .SH SYNOPSIS \fB#include \fR .br int field_info(const FIELD *field, int *rows, int *cols, int *frow, int *fcol, int *nrow, int *nbuf); .br int dynamic_field_info(const FIELD *field, int *rows, int *cols, int *max); .br .SH DESCRIPTION The function \fBfield_info\fR returns the sizes and other attributes passed in to the field at its creation time. The attributes are: height, width, row of upper-left corner, column of upper-left corner, number off-screen rows, and number of working buffers. .PP The function \fBdynamic_field_info\fR returns the actual size of the field, and its maximum possible size. If the field has no size limit, the location addressed by the third argument will be set to 0. A field can be made dynamic by turning off the \fBO_STATIC\fR option with \fBfield_opts_off\fR. .SH RETURN VALUE These routines return one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .SH SEE ALSO \fBcurses\fR(3X) and related pages whose names begin "form_" for detailed descriptions of the entry points. .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .PP A null (zero pointer) is accepted for any of the return values, to ignore that value. Not all implementations allow this, e.g., Solaris 2.7 does not. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_getch.3x0000644000175100001440000003301412635403647015644 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_getch.3x,v 1.44 2015/12/20 01:43:03 tom Exp $ .TH curs_getch 3X "" .na .hy 0 .de bP .IP \(bu 4 .. .SH NAME \fBgetch\fR, \fBwgetch\fR, \fBmvgetch\fR, \fBmvwgetch\fR, \fBungetch\fR, \fBhas_key\fR \- get (or push back) characters from \fBcurses\fR terminal keyboard .ad .hy .SH SYNOPSIS \fB#include \fR .PP \fBint getch(void);\fR .br \fBint wgetch(WINDOW *\fP\fIwin);\fR .br \fBint mvgetch(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR .br \fBint mvwgetch(WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR .br \fBint ungetch(int \fP\fIch\fP\fB);\fR .br \fBint has_key(int \fP\fIch\fP\fB);\fR .br .SH DESCRIPTION .SS Reading characters The \fBgetch\fR, \fBwgetch\fR, \fBmvgetch\fR and \fBmvwgetch\fR, routines read a character from the window. In no-delay mode, if no input is waiting, the value \fBERR\fR is returned. In delay mode, the program waits until the system passes text through to the program. Depending on the setting of \fBcbreak\fR, this is after one character (cbreak mode), or after the first newline (nocbreak mode). In half-delay mode, the program waits until a character is typed or the specified timeout has been reached. .PP If \fBecho\fR is enabled, and the window is not a pad, then the character will also be echoed into the designated window according to the following rules: .bP If the character is the current erase character, left arrow, or backspace, the cursor is moved one space to the left and that screen position is erased as if \fBdelch\fR had been called. .bP If the character value is any other \fBKEY_\fR define, the user is alerted with a \fBbeep\fR call. .bP If the character is a carriage-return, and if \fBnl\fP is enabled, it is translated to a line-feed after echoing. .bP Otherwise the character is simply output to the screen. .PP If the window is not a pad, and it has been moved or modified since the last call to \fBwrefresh\fR, \fBwrefresh\fR will be called before another character is read. .SS Keypad mode .PP If \fBkeypad\fR is \fBTRUE\fR, and a function key is pressed, the token for that function key is returned instead of the raw characters. Possible function keys are defined in \fB\fR as macros with values outside the range of 8-bit characters whose names begin with \fBKEY_\fR. Thus, a variable intended to hold the return value of a function key must be of short size or larger. .PP When a character that could be the beginning of a function key is received (which, on modern terminals, means an escape character), \fBcurses\fR sets a timer. If the remainder of the sequence does not come in within the designated time, the character is passed through; otherwise, the function key value is returned. For this reason, many terminals experience a delay between the time a user presses the escape key and the escape is returned to the program. .SS Ungetting characters .PP The \fBungetch\fR routine places \fIch\fR back onto the input queue to be returned by the next call to \fBwgetch\fR. There is just one input queue for all windows. .PP .SS Predefined key-codes The following special keys are defined in \fB\fR. .bP Except for the special case \fBKEY_RESIZE\fP, it is necessary to enable \fBkeypad\fR for \fBgetch\fP to return these codes. .bP Not all of these are necessarily supported on any particular terminal. .bP The naming convention may seem obscure, with some apparent misspellings (such as "RSUME" for "resume"). The names correspond to the long terminfo capability names for the keys, and were defined long ago, in the 1980s. .PP .TS center tab(/) ; l l . \fIName\fR/\fIKey\fR \fIname\fR _ KEY_BREAK/Break key KEY_DOWN/The four arrow keys ... KEY_UP KEY_LEFT KEY_RIGHT KEY_HOME/Home key (upward+left arrow) KEY_BACKSPACE/Backspace KEY_F0/T{ Function keys; space for 64 keys is reserved. T} KEY_F(\fIn\fR)/T{ For 0 \(<= \fIn\fR \(<= 63 T} KEY_DL/Delete line KEY_IL/Insert line KEY_DC/Delete character KEY_IC/Insert char or enter insert mode KEY_EIC/Exit insert char mode KEY_CLEAR/Clear screen KEY_EOS/Clear to end of screen KEY_EOL/Clear to end of line KEY_SF/Scroll 1 line forward KEY_SR/Scroll 1 line backward (reverse) KEY_NPAGE/Next page KEY_PPAGE/Previous page KEY_STAB/Set tab KEY_CTAB/Clear tab KEY_CATAB/Clear all tabs KEY_ENTER/Enter or send KEY_SRESET/Soft (partial) reset KEY_RESET/Reset or hard reset KEY_PRINT/Print or copy KEY_LL/Home down or bottom (lower left) KEY_A1/Upper left of keypad KEY_A3/Upper right of keypad KEY_B2/Center of keypad KEY_C1/Lower left of keypad KEY_C3/Lower right of keypad KEY_BTAB/Back tab key KEY_BEG/Beg(inning) key KEY_CANCEL/Cancel key KEY_CLOSE/Close key KEY_COMMAND/Cmd (command) key KEY_COPY/Copy key KEY_CREATE/Create key KEY_END/End key KEY_EXIT/Exit key KEY_FIND/Find key KEY_HELP/Help key KEY_MARK/Mark key KEY_MESSAGE/Message key KEY_MOUSE/Mouse event read KEY_MOVE/Move key KEY_NEXT/Next object key KEY_OPEN/Open key KEY_OPTIONS/Options key KEY_PREVIOUS/Previous object key KEY_REDO/Redo key KEY_REFERENCE/Ref(erence) key KEY_REFRESH/Refresh key KEY_REPLACE/Replace key KEY_RESIZE/Screen resized KEY_RESTART/Restart key KEY_RESUME/Resume key KEY_SAVE/Save key KEY_SBEG/Shifted beginning key KEY_SCANCEL/Shifted cancel key KEY_SCOMMAND/Shifted command key KEY_SCOPY/Shifted copy key KEY_SCREATE/Shifted create key KEY_SDC/Shifted delete char key KEY_SDL/Shifted delete line key KEY_SELECT/Select key KEY_SEND/Shifted end key KEY_SEOL/Shifted clear line key KEY_SEXIT/Shifted exit key KEY_SFIND/Shifted find key KEY_SHELP/Shifted help key KEY_SHOME/Shifted home key KEY_SIC/Shifted input key KEY_SLEFT/Shifted left arrow key KEY_SMESSAGE/Shifted message key KEY_SMOVE/Shifted move key KEY_SNEXT/Shifted next key KEY_SOPTIONS/Shifted options key KEY_SPREVIOUS/Shifted prev key KEY_SPRINT/Shifted print key KEY_SREDO/Shifted redo key KEY_SREPLACE/Shifted replace key KEY_SRIGHT/Shifted right arrow KEY_SRSUME/Shifted resume key KEY_SSAVE/Shifted save key KEY_SSUSPEND/Shifted suspend key KEY_SUNDO/Shifted undo key KEY_SUSPEND/Suspend key KEY_UNDO/Undo key .TE .PP Keypad is arranged like this: .br .TS center allbox tab(/) ; c c c . \fBA1\fR/\fBup\fR/\fBA3\fR \fBleft\fR/\fBB2\fR/\fBright\fR \fBC1\fR/\fBdown\fR/\fBC3\fR .TE .sp A few of these predefined values do \fInot\fP correspond to a real key: .bP .B KEY_RESIZE is returned when the \fBSIGWINCH\fP signal has been detected (see \fBinitscr\fP(3X) and \fBresizeterm\fR(3X)). This code is returned whether or not \fBkeypad\fP has been enabled. .bP .B KEY_MOUSE is returned for mouse-events (see \fBcurs_mouse\fR(3X)). This code relies upon whether or not \fBkeypad\fP(3X) has been enabled, because (e.g., with \fIxterm\fP mouse prototocol) ncurses must read escape sequences, just like a function key. .SS Testing key-codes .PP The \fBhas_key\fR routine takes a key-code value from the above list, and returns \fBTRUE\fP or \fBFALSE\fP according to whether the current terminal type recognizes a key with that value. .PP The library also supports these extensions: .RS 3 .TP 5 .B define_key defines a key-code for a given string (see \fBdefine_key\fP(3X)). .TP 5 .B key_defined checks if there is a key-code defined for a given string (see \fBkey_defined\fP(3X)). .RE .PP .SH RETURN VALUE All routines return the integer \fBERR\fR upon failure and an integer value other than \fBERR\fR (\fBOK\fR in the case of ungetch()) upon successful completion. .RS 3 .TP 5 \fBungetch\fP returns ERR if there is no more room in the FIFO. .TP \fBwgetch\fP returns ERR if the window pointer is null, or if its timeout expires without having any data. .RE .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES Use of the escape key by a programmer for a single character function is discouraged, as it will cause a delay of up to one second while the keypad code looks for a following function-key sequence. .PP Some keys may be the same as commonly used control keys, e.g., \fBKEY_ENTER\fP versus control/M, \fBKEY_BACKSPACE\fP versus control/H. Some curses implementations may differ according to whether they treat these control keys specially (and ignore the terminfo), or use the terminfo definitions. \fBNcurses\fR uses the terminfo definition. If it says that \fBKEY_ENTER\fP is control/M, \fBgetch\fR will return \fBKEY_ENTER\fP when you press control/M. .PP Generally, \fBKEY_ENTER\fP denotes the character(s) sent by the \fIEnter\fP key on the numeric keypad: .bP the terminal description lists the most useful keys, .bP the \fIEnter\fP key on the regular keyboard is already handled by the standard ASCII characters for carriage-return and line-feed, .bP depending on whether \fBnl\fP or \fBnonl\fP was called, pressing "Enter" on the regular keyboard may return either a carriage-return or line-feed, and finally .bP "Enter or send" is the standard description for this key. .PP When using \fBgetch\fR, \fBwgetch\fR, \fBmvgetch\fR, or \fBmvwgetch\fR, nocbreak mode (\fBnocbreak\fR) and echo mode (\fBecho\fR) should not be used at the same time. Depending on the state of the tty driver when each character is typed, the program may produce undesirable results. .PP Note that \fBgetch\fR, \fBmvgetch\fR, and \fBmvwgetch\fR may be macros. .PP Historically, the set of keypad macros was largely defined by the extremely function-key-rich keyboard of the AT&T 7300, aka 3B1, aka Safari 4. Modern personal computers usually have only a small subset of these. IBM PC-style consoles typically support little more than \fBKEY_UP\fR, \fBKEY_DOWN\fR, \fBKEY_LEFT\fR, \fBKEY_RIGHT\fR, \fBKEY_HOME\fR, \fBKEY_END\fR, \fBKEY_NPAGE\fR, \fBKEY_PPAGE\fR, and function keys 1 through 12. The Ins key is usually mapped to \fBKEY_IC\fR. .SH PORTABILITY The *get* functions are described in the XSI Curses standard, Issue 4. They read single-byte characters only. The standard specifies that they return \fBERR\fR on failure, but specifies no error conditions. .PP The echo behavior of these functions on input of \fBKEY_\fR or backspace characters was not specified in the SVr4 documentation. This description is adopted from the XSI Curses standard. .PP The behavior of \fBgetch\fR and friends in the presence of handled signals is unspecified in the SVr4 and XSI Curses documentation. Under historical curses implementations, it varied depending on whether the operating system's implementation of handled signal receipt interrupts a \fBread\fR(2) call in progress or not, and also (in some implementations) depending on whether an input timeout or non-blocking mode has been set. .PP \fBKEY_MOUSE\fP is mentioned in XSI Curses, along with a few related terminfo capabilities, but no higher-level functions use the feature. The implementation in ncurses is an extension. .PP \fBKEY_RESIZE\fP is an extension first implemented for ncurses. NetBSD curses later added this extension. .PP Programmers concerned about portability should be prepared for either of two cases: (a) signal receipt does not interrupt \fBgetch\fR; (b) signal receipt interrupts \fBgetch\fR and causes it to return ERR with \fBerrno\fR set to \fBEINTR\fR. Under the \fBncurses\fR implementation, handled signals never interrupt \fBgetch\fR. .PP The \fBhas_key\fR function is unique to \fBncurses\fR. We recommend that any code using it be conditionalized on the \fBNCURSES_VERSION\fR feature macro. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_inopts\fR(3X), \fBcurs_outopts\fR(3X), \fBcurs_mouse\fR(3X), \fBcurs_move\fR(3X), \fBcurs_refresh\fR(3X), \fBresizeterm\fR(3X). .PP Comparable functions in the wide-character (ncursesw) library are described in \fBcurs_get_wch\fR(3X). ncurses-6.0-20160213/man/form_variables.3x0000644000175100001440000000655712161362710016512 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2010,2013 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_variables.3x,v 1.4 2013/06/22 17:58:32 tom Exp $ .TH form_variables 3X "" .ds n 5 .na .hy 0 .SH NAME \fBTYPE_ALNUM\fR, \fBTYPE_ALPHA\fR, \fBTYPE_ENUM\fR, \fBTYPE_INTEGER\fR, \fBTYPE_IPV4\fR, \fBTYPE_NUMERIC\fR, \fBTYPE_REGEXP\fR \- form system global variables .ad .hy .SH SYNOPSIS .nf \fB#include \fR .PP \fBFIELDTYPE * TYPE_ALNUM;\fR \fBFIELDTYPE * TYPE_ALPHA;\fR \fBFIELDTYPE * TYPE_ENUM;\fR \fBFIELDTYPE * TYPE_INTEGER;\fR \fBFIELDTYPE * TYPE_IPV4;\fR \fBFIELDTYPE * TYPE_NUMERIC;\fR \fBFIELDTYPE * TYPE_REGEXP;\fR .fi .SH DESCRIPTION These are building blocks for the form library, defining fields that can be created using \fBset_fieldtype\fP(3X). Each provides functions for field- and character-validation, according to the given datatype. .SS TYPE_ALNUM This holds alphanumeric data. .SS TYPE_ALPHA This holds alphabetic data. .SS TYPE_ENUM This holds an enumerated type. .SS TYPE_INTEGER This holds a decimal integer. .SS TYPE_IPV4 This holds an IPv4 internet address, e.g., "127.0.0.1". .SS TYPE_NUMERIC This holds a decimal number, with optional sign and decimal point. .SS TYPE_REGEXP This holds a regular expression. .SH PORTABILITY The \fBTYPE_IPV4\fP variable is an extension not provided by older implementations of the form library. .SH SEE ALSO \fBform\fR(3X). ncurses-6.0-20160213/man/menu.3x0000644000175100001440000001625212373737710014467 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2014 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu.3x,v 1.22 2014/08/16 20:32:08 tom Exp $ .TH menu 3X "" .SH NAME \fBmenu\fR \- curses extension for programming menus .SH SYNOPSIS \fB#include \fR .br .SH DESCRIPTION The \fBmenu\fR library provides terminal-independent facilities for composing menu systems on character-cell terminals. The library includes: item routines, which create and modify menu items; and menu routines, which group items into menus, display menus on the screen, and handle interaction with the user. .PP The \fBmenu\fR library uses the \fBcurses\fR libraries, and a curses initialization routine such as \fBinitscr\fR must be called before using any of these functions. To use the \fBmenu\fR library, link with the options \fB\-lmenu \-lcurses\fR. . .SS Current Default Values for Item Attributes . The \fBmenu\fR library maintains a default value for item attributes. You can get or set this default by calling the appropriate \fBget_\fR or \fBset_\fR routine with a \fBNULL\fR item pointer. Changing this default with a \fBset_\fR function affects future item creations, but does not change the rendering of items already created. . .SS Routine Name Index . The following table lists each \fBmenu\fR routine and the name of the manual page on which it is described. . .TS l l . \fBcurses\fR Routine Name Manual Page Name = current_item \fBmitem_current\fR(3X) free_item \fBmitem_new\fR(3X) free_menu \fBmenu_new\fR(3X) item_count \fBmenu_items\fR(3X) item_description \fBmitem_name\fR(3X) item_index \fBmitem_current\fR(3X) item_init \fBmenu_hook\fR(3X) item_name \fBmitem_name\fR(3X) item_opts \fBmitem_opts\fR(3X) item_opts_off \fBmitem_opts\fR(3X) item_opts_on \fBmitem_opts\fR(3X) item_term \fBmenu_hook\fR(3X) item_userptr \fBmitem_userptr\fR(3X) item_value \fBmitem_value\fR(3X) item_visible \fBmitem_visible\fR(3X) menu_back \fBmenu_attributes\fR(3X) menu_driver \fBmenu_driver\fR(3X) menu_fore \fBmenu_attributes\fR(3X) menu_format \fBmenu_format\fR(3X) menu_grey \fBmenu_attributes\fR(3X) menu_init \fBmenu_hook\fR(3X) menu_items \fBmenu_items\fR(3X) menu_mark \fBmenu_mark\fR(3X) menu_opts \fBmenu_opts\fR(3X) menu_opts_off \fBmenu_opts\fR(3X) menu_opts_on \fBmenu_opts\fR(3X) menu_pad \fBmenu_attributes\fR(3X) menu_pattern \fBmenu_pattern\fR(3X) menu_request_by_name \fBmenu_requestname\fR(3X) menu_request_name \fBmenu_requestname\fR(3X) menu_spacing \fBmenu_spacing\fR(3X) menu_sub \fBmenu_win\fR(3X) menu_term \fBmenu_hook\fR(3X) menu_userptr \fBmenu_userptr\fR(3X) menu_win \fBmenu_win\fR(3X) new_item \fBmitem_new\fR(3X) new_menu \fBmenu_new\fR(3X) pos_menu_cursor \fBmenu_cursor\fR(3X) post_menu \fBmenu_post\fR(3X) scale_menu \fBmenu_win\fR(3X) set_current_item \fBmitem_current\fR(3X) set_item_init \fBmenu_hook\fR(3X) set_item_opts \fBmitem_opts\fR(3X) set_item_term \fBmenu_hook\fR(3X) set_item_userptr \fBmitem_userptr\fR(3X) set_item_value \fBmitem_value\fR(3X) set_menu_back \fBmenu_attributes\fR(3X) set_menu_fore \fBmenu_attributes\fR(3X) set_menu_format \fBmenu_format\fR(3X) set_menu_grey \fBmenu_attributes\fR(3X) set_menu_init \fBmenu_hook\fR(3X) set_menu_items \fBmenu_items\fR(3X) set_menu_mark \fBmenu_mark\fR(3X) set_menu_opts \fBmitem_opts\fR(3X) set_menu_pad \fBmenu_attributes\fR(3X) set_menu_pattern \fBmenu_pattern\fR(3X) set_menu_spacing \fBmenu_spacing\fR(3X) set_menu_sub \fBmenu_win\fR(3X) set_menu_term \fBmenu_hook\fR(3X) set_menu_userptr \fBmenu_userptr\fR(3X) set_menu_win \fBmenu_win\fR(3X) set_top_row \fBmitem_current\fR(3X) top_row \fBmitem_current\fR(3X) unpost_menu \fBmenu_post\fR(3X) .TE .SH RETURN VALUE Routines that return pointers return \fBNULL\fR on error. Routines that return an integer return one of the following error codes: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_BAD_STATE Routine was called from an initialization or termination function. .TP 5 .B E_NO_MATCH Character failed to match. .TP 5 .B E_NO_ROOM Menu is too large for its window. .TP 5 .B E_NOT_CONNECTED No items are connected to the menu. .TP 5 .B E_NOT_POSTED The menu has not been posted. .TP 5 .B E_NOT_SELECTABLE The designated item cannot be selected. .TP 5 .B E_POSTED The menu is already posted. .TP 5 .B E_REQUEST_DENIED The menu driver could not process the request. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_UNKNOWN_COMMAND The menu driver code saw an unknown request code. .SH NOTES The header file \fB\fR automatically includes the header files \fB\fR and \fB\fR. .PP In your library list, libmenu.a should be before libncurses.a; that is, you want to say `\-lmenu \-lncurses', not the other way around (which would usually give a link-error). .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for ncurses by Eric S. Raymond. .SH SEE ALSO \fBcurses\fR(3X) and related pages whose names begin "menu_" for detailed descriptions of the entry points. .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). ncurses-6.0-20160213/man/curs_printw.3x0000644000175100001440000001071111476505455016076 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_printw.3x,v 1.20 2010/12/04 18:40:45 tom Exp $ .TH curs_printw 3X "" .na .hy 0 .SH NAME \fBprintw\fR, \fBwprintw\fR, \fBmvprintw\fR, \fBmvwprintw\fR, \fBvwprintw\fR, \fBvw_printw\fR \- print formatted output in \fBcurses\fR windows .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint printw(const char *fmt, ...);\fR .br \fBint wprintw(WINDOW *win, const char *fmt, ...);\fR .br \fBint mvprintw(int y, int x, const char *fmt, ...);\fR .br \fBint mvwprintw(WINDOW *win, int y, int x, const char *fmt, ...);\fR .br \fBint vwprintw(WINDOW *win, const char *fmt, va_list varglist);\fR .br \fBint vw_printw(WINDOW *win, const char *fmt, va_list varglist);\fR .br .SH DESCRIPTION The \fBprintw\fR, \fBwprintw\fR, \fBmvprintw\fR and \fBmvwprintw\fR routines are analogous to \fBprintf\fR [see \fBprintf\fR(3)]. In effect, the string that would be output by \fBprintf\fR is output instead as though \fBwaddstr\fR were used on the given window. .PP The \fBvwprintw\fR and \fBwv_printw\fR routines are analogous to \fBvprintf\fR [see \fBprintf\fR(3)] and perform a \fBwprintw\fR using a variable argument list. The third argument is a \fBva_list\fR, a pointer to a list of arguments, as defined in \fB\fR. .SH RETURN VALUE Routines that return an integer return \fBERR\fR upon failure and \fBOK\fR (SVr4 only specifies "an integer value other than \fBERR\fR") upon successful completion. .PP X/Open defines no error conditions. In this implementation, an error may be returned if it cannot allocate enough memory for the buffer used to format the results. It will return an error if the window pointer is null. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH PORTABILITY The XSI Curses standard, Issue 4 describes these functions. The function \fBvwprintw\fR is marked TO BE WITHDRAWN, and is to be replaced by a function \fBvw_printw\fR using the \fB\fR interface. The Single Unix Specification, Version 2 states that \fBvw_printw\fR is preferred to \fBvwprintw\fR since the latter requires including \fB\fR, which cannot be used in the same file as \fB\fR. This implementation uses \fB\fR for both, because that header is included in \fB. .SH SEE ALSO \fBcurses\fR(3X), \fBprintf\fR(3), \fBvprintf(3)\fR ncurses-6.0-20160213/man/curs_inwstr.3x0000644000175100001440000001041012045321337016061 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2010,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_inwstr.3x,v 1.8 2012/11/03 23:03:59 tom Exp $ .TH curs_inwstr 3X "" .SH NAME \fBinwstr\fR, \fBinnwstr\fR, \fBwinwstr\fR, \fBwinnwstr\fR, \fBmvinwstr\fR, \fBmvinnwstr\fR, \fBmvwinwstr\fR, \fBmvwinnwstr\fR \- get a string of \fBwchar_t\fR characters from a curses window .SH SYNOPSIS .nf \fB#include \fR .sp \fBint inwstr(\fR\fBwchar_t *\fR\fIstr\fR\fB);\fR .br \fBint innwstr(\fR\fBwchar_t *\fR\fIstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint winwstr(\fR\fBWINDOW *\fR\fIwin\fR\fB, wchar_t *\fR\fIstr\fR\fB);\fR .br \fBint winnwstr(\fR\fBWINDOW *\fR\fIwin\fR\fB, wchar_t *\fR\fIstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvinwstr(\fR\fBint \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wchar_t *\fR\fIstr\fR\fB);\fR .br \fBint mvinnwstr(\fR\fBint \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wchar_t *\fR\fIstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvwinwstr(\fR\fBWINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wchar_t *\fR\fIstr\fR\fB);\fR .br \fBint mvwinnwstr(\fR\fBWINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wchar_t *\fR\fIstr\fR\fB, int \fR\fIn\fR\fB);\fR .fi .SH DESCRIPTION These routines return a string of \fBwchar_t\fR characters in \fIwstr\fR, extracted starting at the current cursor position in the named window. Attributes are stripped from the characters. The four functions with \fIn\fR as the last argument return a leading substring at most \fIn\fR bytes long (exclusive of the trailing NUL). Transfer stops at the end of the current line, or when \fIn\fR bytes have been stored at the location referenced by \fIwstr\fR. .PP If the size \fIn\fR is not large enough to store a complete character, an error is generated. .SH NOTES Note that all routines except \fBwinnwstr\fR may be macros. .SH RETURN VALUE All routines return \fBERR\fR upon failure. Upon successful completion, the *\fBinwstr\fR routines return \fBOK\fR, and the *\fBinnwstr\fR routines return the number of characters read into the string. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_instr\fR(3X), \fBcurs_in_wchstr\fR(3X) ncurses-6.0-20160213/man/curs_getyx.3x0000644000175100001440000001057211476505074015715 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2007,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_getyx.3x,v 1.18 2010/12/04 18:36:44 tom Exp $ .TH curs_getyx 3X "" .SH NAME \fBgetyx\fR, \fBgetparyx\fR, \fBgetbegyx\fR, \fBgetmaxyx\fR \- get \fBcurses\fR cursor and window coordinates .SH SYNOPSIS \fB#include \fR .sp \fBvoid getyx(WINDOW *win, int y, int x);\fR .br \fBvoid getparyx(WINDOW *win, int y, int x);\fR .br \fBvoid getbegyx(WINDOW *win, int y, int x);\fR .br \fBvoid getmaxyx(WINDOW *win, int y, int x);\fR .br .SH DESCRIPTION The \fBgetyx\fR macro places the current cursor position of the given window in the two integer variables \fIy\fR and \fIx\fR. .PP If \fIwin\fR is a subwindow, the \fBgetparyx\fR macro places the beginning coordinates of the subwindow relative to the parent window into two integer variables \fIy\fR and \fIx\fR. Otherwise, \fB\-1\fR is placed into \fIy\fR and \fIx\fR. .PP Like \fBgetyx\fR, the \fBgetbegyx\fR and \fBgetmaxyx\fR macros store the current beginning coordinates and size of the specified window. .SH RETURN VALUE The return values of these macros are undefined (i.e., they should not be used as the right-hand side of assignment statements). .SH NOTES All of these interfaces are macros. A "\fB&\fR" is not necessary before the variables \fIy\fR and \fIx\fR. .SH PORTABILITY The \fBgetyx\fR, \fBgetparyx\fR, \fBgetbegyx\fR and \fBgetmaxyx\fR macros are described in the XSI Curses standard, Issue 4. .PP This implementation also provides functions \fBgetbegx\fR, \fBgetbegy\fR, \fBgetcurx\fR, \fBgetcury\fR, \fBgetmaxx\fR, \fBgetmaxy\fR, \fBgetparx\fR and \fBgetpary\fR for compatibility with older versions of curses. .PP Although X/Open Curses does not address this, many implementations provide members of the WINDOW structure containing values corresponding to these macros. For best portability, do not rely on using the data in WINDOW, since some implementations make WINDOW opaque (do not allow direct use of its members). .PP Besides the problem of opaque structures, the data stored in like-named members may not have like-values in different implementations. For example, the WINDOW._maxx and WINDOW._maxy values in ncurses have (at least since release 1.8.1) differed by one from some other implementations. The difference is hidden by means of the macro \fBgetmaxyx\fP. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_legacy\fR(3X), \fBcurs_opaque\fR(3X) ncurses-6.0-20160213/man/menu_driver.3x0000644000175100001440000001556711476505277016056 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2008,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_driver.3x,v 1.20 2010/12/04 18:38:55 tom Exp $ .TH menu_driver 3X "" .de bP .IP \(bu 4 .. .SH NAME \fBmenu_driver\fR \- command-processing loop of the menu system .SH SYNOPSIS \fB#include \fR .br int menu_driver(MENU *menu, int c); .br .SH DESCRIPTION Once a menu has been posted (displayed), you should funnel input events to it through \fBmenu_driver\fR. This routine has three major input cases: .bP The input is a form navigation request. Navigation request codes are constants defined in \fB\fP, which are distinct from the key- and character codes returned by \fBwgetch\fP. .bP The input is a printable character. Printable characters (which must be positive, less than 256) are checked according to the program's locale settings. .bP The input is the KEY_MOUSE special key associated with an mouse event. .PP The menu driver requests are as follows: .TP 5 REQ_LEFT_ITEM Move left to an item. .TP 5 REQ_RIGHT_ITEM Move right to an item. .TP 5 REQ_UP_ITEM Move up to an item. .TP 5 REQ_DOWN_ITEM Move down to an item. .TP 5 REQ_SCR_ULINE Scroll up a line. .TP 5 REQ_SCR_DLINE Scroll down a line. .TP 5 REQ_SCR_DPAGE Scroll down a page. .TP 5 REQ_SCR_UPAGE Scroll up a page. .TP 5 REQ_FIRST_ITEM Move to the first item. .TP 5 REQ_LAST_ITEM Move to the last item. .TP 5 REQ_NEXT_ITEM Move to the next item. .TP 5 REQ_PREV_ITEM Move to the previous item. .TP 5 REQ_TOGGLE_ITEM Select/deselect an item. .TP 5 REQ_CLEAR_PATTERN Clear the menu pattern buffer. .TP 5 REQ_BACK_PATTERN Delete the previous character from the pattern buffer. .TP 5 REQ_NEXT_MATCH Move to the next item matching the pattern match. .TP 5 REQ_PREV_MATCH Move to the previous item matching the pattern match. .PP If the second argument is a printable character, the code appends it to the pattern buffer and attempts to move to the next item matching the new pattern. If there is no such match, \fBmenu_driver\fR returns \fBE_NO_MATCH\fR and deletes the appended character from the buffer. .PP If the second argument is one of the above pre-defined requests, the corresponding action is performed. .SS MOUSE HANDLING .PP If the second argument is the KEY_MOUSE special key, the associated mouse event is translated into one of the above pre-defined requests. Currently only clicks in the user window (e.g., inside the menu display area or the decoration window) are handled. .PP If you click above the display region of the menu: .bP a REQ_SCR_ULINE is generated for a single click, .bP a REQ_SCR_UPAGE is generated for a double-click and .bP a REQ_FIRST_ITEM is generated for a triple-click. .PP If you click below the display region of the menu: .bP a REQ_SCR_DLINE is generated for a single click, .bP a REQ_SCR_DPAGE is generated for a double-click and .bP a REQ_LAST_ITEM is generated for a triple-click. .PP If you click at an item inside the display area of the menu: .bP the menu cursor is positioned to that item. .bP If you double-click an item a REQ_TOGGLE_ITEM is generated and \fBE_UNKNOWN_COMMAND\fR is returned. This return value makes sense, because a double click usually means that an item-specific action should be returned. It is exactly the purpose of this return value to signal that an application specific command should be executed. .bP If a translation into a request was done, \fBmenu_driver\fR returns the result of this request. .PP If you clicked outside the user window or the mouse event could not be translated into a menu request an \fBE_REQUEST_DENIED\fR is returned. .SS APPLICATION-DEFINED COMMANDS .PP If the second argument is neither printable nor one of the above pre-defined menu requests or KEY_MOUSE, the drive assumes it is an application-specific command and returns \fBE_UNKNOWN_COMMAND\fR. Application-defined commands should be defined relative to \fBMAX_COMMAND\fR, the maximum value of these pre-defined requests. .SH RETURN VALUE \fBmenu_driver\fR return one of the following error codes: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_BAD_STATE Routine was called from an initialization or termination function. .TP 5 .B E_NOT_POSTED The menu has not been posted. .TP 5 .B E_UNKNOWN_COMMAND The menu driver code saw an unknown request code. .TP 5 .B E_NO_MATCH Character failed to match. .TP 5 .B E_REQUEST_DENIED The menu driver could not process the request. .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X), \fBgetch\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header files \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. The support for mouse events is ncurses specific. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/man_db.renames0000644000175100001440000001615012514505273016032 0ustar tomusers############################################################################## # Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: man_db.renames,v 1.48 2015/04/18 16:47:55 tom Exp $ # Manual-page renamings for the man_db program # # Files: captoinfo.1m captoinfo.1 clear.1 clear.1 curs_add_wch.3x add_wch.3ncurses curs_add_wchstr.3x add_wchstr.3ncurses curs_addch.3x addch.3ncurses curs_addchstr.3x addchstr.3ncurses curs_addstr.3x addstr.3ncurses curs_addwstr.3x addwstr.3ncurses curs_attr.3x attr.3ncurses curs_beep.3x beep.3ncurses curs_bkgd.3x bkgd.3ncurses curs_bkgrnd.3x bkgrnd.3ncurses curs_border.3x border.3ncurses curs_border_set.3x border_set.3ncurses curs_clear.3x clear.3ncurses curs_color.3x color.3ncurses curs_delch.3x delch.3ncurses curs_deleteln.3x deleteln.3ncurses curs_extend.3x extensions.3ncurses curs_get_wch.3x get_wch.3ncurses curs_get_wstr.3x get_wstr.3ncurses curs_getcchar.3x getcchar.3ncurses curs_getch.3x getch.3ncurses curs_getstr.3x getstr.3ncurses curs_getyx.3x getyx.3ncurses curs_in_wch.3x in_wch.3ncurses curs_in_wchstr.3x in_wchstr.3ncurses curs_inch.3x inch.3ncurses curs_inchstr.3x inchstr.3ncurses curs_initscr.3x initscr.3ncurses curs_inopts.3x inopts.3ncurses curs_ins_wch.3x ins_wch.3ncurses curs_ins_wstr.3x ins_wstr.3ncurses curs_insch.3x insch.3ncurses curs_insstr.3x insstr.3ncurses curs_instr.3x instr.3ncurses curs_inwstr.3x inwstr.3ncurses curs_kernel.3x kernel.3ncurses curs_legacy.3x legacy.3ncurses curs_memleaks.3x memleaks.3ncurses curs_mouse.3x mouse.3ncurses curs_move.3x move.3ncurses curs_opaque.3x opaque.3ncurses curs_outopts.3x outopts.3ncurses curs_overlay.3x overlay.3ncurses curs_pad.3x pad.3ncurses curs_print.3x print.3ncurses curs_printw.3x printw.3ncurses curs_refresh.3x refresh.3ncurses curs_scanw.3x scanw.3ncurses curs_scr_dump.3x scr_dump.3ncurses curs_scroll.3x scroll.3ncurses curs_slk.3x slk.3ncurses curs_sp_funcs.3x sp_funcs.3ncurses curs_termattrs.3x termattrs.3ncurses curs_termcap.3x termcap.3ncurses curs_terminfo.3x terminfo.3ncurses curs_threads.3x threads.3ncurses curs_touch.3x touch.3ncurses curs_trace.3x trace.3ncurses curs_util.3x util.3ncurses curs_variables.3x curses_variables.3ncurses curs_window.3x window.3ncurses curses.3x ncurses.3ncurses default_colors.3x default_colors.3ncurses define_key.3x define_key.3ncurses form.3x form.3form form_cursor.3x cursor.3form form_data.3x data.3form form_driver.3x driver.3form form_field.3x field.3form form_field_attributes.3x field_attributes.3form form_field_buffer.3x field_buffer.3form form_field_info.3x field_info.3form form_field_just.3x field_just.3form form_field_new.3x field_new.3form form_field_opts.3x field_opts.3form form_field_userptr.3x field_userptr.3form form_field_validation.3x field_validation.3form form_fieldtype.3x fieldtype.3form form_hook.3x hook.3form form_new.3x new.3form form_new_page.3x new_page.3form form_opts.3x opts.3form form_page.3x page.3form form_post.3x post.3form form_requestname.3x requestname.3form form_userptr.3x userptr.3form form_variables.3x form_variables.3form form_win.3x win.3form infocmp.1m infocmp.1 infotocap.1m infotocap.1 key_defined.3x key_defined.3ncurses keybound.3x keybound.3ncurses keyok.3x keyok.3ncurses legacy_coding.3x legacy_coding.3ncurses menu.3x menu.3menu menu_attributes.3x attributes.3menu menu_cursor.3x cursor.3menu menu_driver.3x driver.3menu menu_format.3x format.3menu menu_hook.3x hook.3menu menu_items.3x items.3menu menu_mark.3x mark.3menu menu_new.3x new.3menu menu_opts.3x opts.3menu menu_pattern.3x pattern.3menu menu_post.3x post.3menu menu_requestname.3x requestname.3menu menu_spacing.3x spacing.3menu menu_userptr.3x userptr.3menu menu_win.3x win.3menu mitem_current.3x menu_current.3menu mitem_name.3x menu_name.3menu mitem_new.3x menu_new.3menu mitem_opts.3x menu_opts.3menu mitem_userptr.3x menu_userptr.3menu mitem_value.3x menu_value.3menu mitem_visible.3x menu_visible.3menu ncurses.3x ncurses.3ncurses panel.3x panel.3curses printf.3s printf.3 putc.3s putc.3 resizeterm.3x resizeterm.3ncurses scanf.3s scanf.3 system.3s system.3 tabs.1 tabs.1 term.5 term.5 term.7 term.7 term_variables.3x terminfo_variables.3ncurses terminfo.5 terminfo.5 terminfo.\\\*n terminfo.5 tic.1m tic.1 toe.1m toe.1 tput.1 tput.1 tset.1 tset.1 vprintf.3s vprintf.3 wresize.3x wresize.3ncurses # # Other: tack.1m tack.1 # getty.1 getty.8 scanf.3 scanf.3 ttys.5 ttys.4 termio.7 termios.3 system.3 system.3 regcomp.3x regcomp.3 regexec.3x regexec.3 # # The following are pages which may be generated depending on configuration: adacurses-config.1 adacurses-config.1 adacurses5-config.1 adacurses5-config.1 adacurses6-config.1 adacurses6-config.1 # ncurses5-config.1 ncurses5-config.1 ncursesw5-config.1 ncursesw5-config.1 ncursest5-config.1 ncursest5-config.1 ncursestw5-config.1 ncursestw5-config.1 # ncurses6-config.1 ncurses6-config.1 ncursesw6-config.1 ncursesw6-config.1 ncursest6-config.1 ncursest6-config.1 ncursestw6-config.1 ncursestw6-config.1 # # vile:cfgmode ncurses-6.0-20160213/man/curs_util.3x0000644000175100001440000003401212534701773015525 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_util.3x,v 1.43 2015/06/06 23:36:27 tom Exp $ .TH curs_util 3X "" .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .de bP .IP \(bu 4 .. .na .hy 0 .SH NAME \fBdelay_output\fR, \fBfilter\fR, \fBflushinp\fR, \fBgetwin\fR, \fBkey_name\fR, \fBkeyname\fR, \fBnofilter\fR, \fBputwin\fR, \fBunctrl\fR, \fBuse_env\fR, \fBuse_tioctl\fR, \fBwunctrl\fR \- miscellaneous \fBcurses\fR utility routines .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBchar *unctrl(chtype c);\fR .br \fBwchar_t *wunctrl(cchar_t *c);\fR .br \fBchar *keyname(int c);\fR .br \fBchar *key_name(wchar_t w);\fR .br \fBvoid filter(void);\fR .br \fBvoid nofilter(void);\fR .br \fBvoid use_env(bool f);\fR .br \fBvoid use_tioctl(bool f);\fR .br \fBint putwin(WINDOW *win, FILE *filep);\fR .br \fBWINDOW *getwin(FILE *filep);\fR .br \fBint delay_output(int ms);\fR .br \fBint flushinp(void);\fR .br .SH DESCRIPTION .SS unctrl .PP The \fBunctrl\fR routine returns a character string which is a printable representation of the character \fIc\fR, ignoring attributes. Control characters are displayed in the \fB^\fR\fIX\fR notation. Printing characters are displayed as is. The corresponding \fBwunctrl\fR returns a printable representation of a wide character. .SS keyname/key_name .PP The \fBkeyname\fR routine returns a character string corresponding to the key \fIc\fR: .bP Printable characters are displayed as themselves, e.g., a one-character string containing the key. .bP Control characters are displayed in the \fB^\fR\fIX\fR notation. .bP DEL (character 127) is displayed as \fB^?\fP. .bP Values above 128 are either meta characters (if the screen has not been initialized, or if \fBmeta\fP has been called with a \fBTRUE\fP parameter), shown in the \fBM\-\fR\fIX\fR notation, or are displayed as themselves. In the latter case, the values may not be printable; this follows the X/Open specification. .bP Values above 256 may be the names of the names of function keys. .bP Otherwise (if there is no corresponding name) the function returns null, to denote an error. X/Open also lists an "UNKNOWN KEY" return value, which some implementations return rather than null. .LP The corresponding \fBkey_name\fR returns a character string corresponding to the wide-character value \fIw\fR. The two functions do not return the same set of strings; the latter returns null where the former would display a meta character. .SS filter/nofilter .PP The \fBfilter\fR routine, if used, must be called before \fBinitscr\fR or \fBnewterm\fR are called. The effect is that, during those calls, \fBLINES\fR is set to 1; the capabilities \fBclear\fR, \fBcup\fR, \fBcud\fR, \fBcud1\fR, \fBcuu1\fR, \fBcuu\fR, \fBvpa\fR are disabled; and the \fBhome\fR string is set to the value of \fBcr\fR. .PP The \fBnofilter\fP routine cancels the effect of a preceding \fBfilter\fP call. That allows the caller to initialize a screen on a different device, using a different value of \fB$TERM\fP. The limitation arises because the \fBfilter\fP routine modifies the in-memory copy of the terminal information. .SS use_env .PP The \fBuse_env\fR routine, if used, should be called before \fBinitscr\fR or \fBnewterm\fR are called (because those compute the screen size). It modifies the way \fBncurses\fP treats environment variables when determining the screen size. .bP Normally ncurses looks first at the terminal database for the screen size. .IP If \fBuse_env\fP was called with \fBFALSE\fP for parameter, it stops here unless If \fBuse_tioctl\fP was also called with \fBTRUE\fP for parameter. .bP Then it asks for the screen size via operating system calls. If successful, it overrides the values from the terminal database. .bP Finally (unless \fBuse_env\fP was called with \fBFALSE\fP parameter), ncurses examines the \fBLINES\fR or \fBCOLUMNS\fR environment variables, using a value in those to override the results from the operating system or terminal database. .IP Ncurses also updates the screen size in response to SIGWINCH, unless overridden by the \fBLINES\fR or \fBCOLUMNS\fR environment variables, .SS use_tioctl .PP The \fBuse_tioctl\fR routine, if used, should be called before \fBinitscr\fR or \fBnewterm\fR are called (because those compute the screen size). After \fBuse_tioctl\fR is called with \fBTRUE\fR as an argument, ncurses modifies the last step in its computation of screen size as follows: .bP checks if the \fBLINES\fR and \fBCOLUMNS\fR environment variables are set to a number greater than zero. .bP for each, ncurses updates the corresponding environment variable with the value that it has obtained via operating system call or from the terminal database. .bP ncurses re-fetches the value of the environment variables so that it is still the environment variables which set the screen size. .PP The \fBuse_env\fP and \fBuse_tioctl\fP routines combine as summarized here: .TS center tab(/); l l l _ _ _ lw7 lw7 lw40. \fIuse_env\fR/\fIuse_tioctl\fR/\fISummary\fR TRUE/FALSE/T{ This is the default behavior. ncurses uses operating system calls unless overridden by $LINES or $COLUMNS environment variables. T} TRUE/TRUE/T{ ncurses updates $LINES and $COLUMNS based on operating system calls. T} FALSE/TRUE/T{ ncurses ignores $LINES and $COLUMNS, uses operating system calls to obtain size. T} FALSE/FALSE/T{ ncurses relies on the terminal database to determine size. T} .TE .SS putwin/getwin .PP The \fBputwin\fR routine writes all data associated with window (or pad) \fIwin\fR into the file to which \fIfilep\fR points. This information can be later retrieved using the \fBgetwin\fR function. .PP The \fBgetwin\fR routine reads window related data stored in the file by \fBputwin\fR. The routine then creates and initializes a new window using that data. It returns a pointer to the new window. There are a few caveats: .bP the data written is a copy of the \fBWINDOW\fP structure, and its associated character cells. The format differs between the wide-character (ncursesw) and non-wide (ncurses) libraries. You can transfer data between the two, however. .bP the retrieved window is always created as a top-level window (or pad), rather than a subwindow. .bP the window's character cells contain the color pair \fIvalue\fP, but not the actual color \fInumbers\fP. If cells in the retrieved window use color pairs which have not been created in the application using \fBinit_pair\fP, they will not be colored when the window is refreshed. .SS delay_output .PP The \fBdelay_output\fR routine inserts an \fIms\fR millisecond pause in output. This routine should not be used extensively because padding characters are used rather than a CPU pause. If no padding character is specified, this uses \fBnapms\fR to perform the delay. .SS flushinp .PP The \fBflushinp\fR routine throws away any typeahead that has been typed by the user and has not yet been read by the program. .SH RETURN VALUE Except for \fBflushinp\fR, routines that return an integer return \fBERR\fR upon failure and \fBOK\fR (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful completion. .PP Routines that return pointers return \fBNULL\fR on error. .PP X/Open does not define any error conditions. In this implementation .RS 3 .TP 5 \fBflushinp\fR returns an error if the terminal was not initialized. .TP 5 \fBmeta\fR returns an error if the terminal was not initialized. .TP 5 \fBputwin\fP returns an error if the associated \fBfwrite\fP calls return an error. .RE .SH PORTABILITY .SS filter .PP The SVr4 documentation describes the action of \fBfilter\fR only in the vaguest terms. The description here is adapted from the XSI Curses standard (which erroneously fails to describe the disabling of \fBcuu\fR). .SS keyname .PP The \fBkeyname\fP function may return the names of user-defined string capabilities which are defined in the terminfo entry via the \fB\-x\fP option of \fB@TIC@\fP. This implementation automatically assigns at run-time keycodes to user-defined strings which begin with "k". The keycodes start at KEY_MAX, but are not guaranteed to be the same value for different runs because user-defined codes are merged from all terminal descriptions which have been loaded. The \fBuse_extended_names\fP function controls whether this data is loaded when the terminal description is read by the library. .SS nofilter/use_tioctl .PP The \fBnofilter\fP and \fBuse_tioctl\fP routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on ncurses extensions be conditioned using NCURSES_VERSION. .SS putwin/getwin .PP The \fBputwin\fP and \fBgetwin\fP functions have several issues with portability: .bP The files written and read by these functions use an implementation-specific format. Although the format is an obvious target for standardization, it has been overlooked. .IP Interestingly enough, according to the copyright dates in Solaris source, the functions (along with \fBscr_init\fP, etc.) originated with the University of California, Berkeley (in 1982) and were later (in 1988) incorporated into SVr4. Oddly, there are no such functions in the 4.3BSD curses sources. .bP Most implementations simply dump the binary \fBWINDOW\fP structure to the file. These include SVr4 curses, NetBSD and PDCurses, as well as older ncurses versions. This implementation (as well as the X/Open variant of Solaris curses, dated 1995) uses textual dumps. .IP The implementations which use binary dumps use block-I/O (the \fBfwrite\fP and \fBfread\fP functions). Those that use textual dumps use buffered-I/O. A few applications may happen to write extra data in the file using these functions. Doing that can run into problems mixing block- and buffered-I/O. This implementation reduces the problem on writes by flushing the output. However, reading from a file written using mixed schemes may not be successful. .SS unctrl/wunctrl .PP The XSI Curses standard, Issue 4 describes these functions. It states that \fBunctrl\fR and \fBwunctrl\fR will return a null pointer if unsuccessful, but does not define any error conditions. This implementation checks for three cases: .bP the parameter is a 7-bit US\-ASCII code. This is the case that X/Open Curses documented. .bP the parameter is in the range 128\-159, i.e., a C1 control code. If \fBuse_legacy_coding\fP has been called with a \fB2\fP parameter, \fBunctrl\fP returns the parameter, i.e., a one-character string with the parameter as the first character. Otherwise, it returns \*(``~@\*('', \*(``~A\*('', etc., analogous to \*(``^@\*('', \*(``^A\*('', C0 controls. .IP X/Open Curses does not document whether \fBunctrl\fP can be called before initializing curses. This implementation permits that, and returns the \*(``~@\*('', etc., values in that case. .bP parameter values outside the 0 to 255 range. \fBunctrl\fP returns a null pointer. .PP The strings returned by \fBunctrl\fR in this implementation are determined at compile time, showing C1 controls from the upper-128 codes with a `~' prefix rather than `^'. Other implementations have different conventions. For example, they may show both sets of control characters with `^', and strip the parameter to 7 bits. Or they may ignore C1 controls and treat all of the upper-128 codes as printable. This implementation uses 8 bits but does not modify the string to reflect locale. The \fBuse_legacy_coding\fP function allows the caller to change the output of \fBunctrl\fP. .PP Likewise, the \fBmeta\fP function allows the caller to change the output of \fBkeyname\fP, i.e., it determines whether to use the `M\-' prefix for \*(``meta\*('' keys (codes in the range 128 to 255). Both \fBuse_legacy_coding\fP and \fBmeta\fP succeed only after curses is initialized. X/Open Curses does not document the treatment of codes 128 to 159. When treating them as \*(``meta\*('' keys (or if \fBkeyname\fP is called before initializing curses), this implementation returns strings \*(``M\-^@\*('', \*(``M\-^A\*('', etc. .SH SEE ALSO \fBlegacy_coding\fR(3X), \fBcurses\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_kernel\fR(3X), \fBcurs_scr_dump\fR(3X), \fBcurs_variables\fR(3X), \fBlegacy_coding\fR(3X). ncurses-6.0-20160213/man/form_requestname.3x0000644000175100001440000000650712630673165017100 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_requestname.3x,v 1.10 2015/12/05 23:42:45 tom Exp $ .TH form_requestname 3X "" .SH NAME \fBform_request_by_name\fP, \fBform_request_name\fR \- handle printable form request names .SH SYNOPSIS \fB#include \fR .br const char *form_request_name(int request); .br int form_request_by_name(const char *name); .br .SH DESCRIPTION The function \fBform_request_name\fR returns the printable name of a form request code. .br The function \fBform_request_by_name\fR searches in the name-table for a request with the given name and returns its request code. Otherwise E_NO_MATCH is returned. .SH RETURN VALUE \fBform_request_name\fR returns \fBNULL\fR on error and sets errno to \fBE_BAD_ARGUMENT\fR. .br \fBform_request_by_name\fR returns \fBE_NO_MATCH\fR on error. It does not set errno. .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on them be conditioned using NCURSES_VERSION. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_add_wchstr.3x0000644000175100001440000001215112045320263016656 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2010,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_add_wchstr.3x,v 1.10 2012/11/03 22:54:43 tom Exp $ .TH curs_add_wchstr 3X "" .de bP .IP \(bu 4 .. .na .hy 0 .SH NAME \fBadd_wchstr\fR, \fBadd_wchnstr\fR, \fBwadd_wchstr\fR, \fBwadd_wchnstr\fR, \fBmvadd_wchstr\fR, \fBmvadd_wchnstr\fR, \fBmvwadd_wchstr\fR, \fBmvwadd_wchnstr\fR \- add an array of complex characters (and attributes) to a curses window .ad .hy .SH SYNOPSIS .nf \fB#include \fR .PP \fBint add_wchstr(const cchar_t *\fR\fIwchstr\fR\fB);\fR .br \fBint add_wchnstr(const cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint wadd_wchstr(WINDOW *\fR \fIwin\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB);\fR .br \fBint wadd_wchnstr(WINDOW *\fR \fIwin\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvadd_wchstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB);\fR .br \fBint mvadd_wchnstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvwadd_wchstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB);\fR .br \fBint mvwadd_wchnstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR .fi .SH DESCRIPTION These functions copy the (null-terminated) array of complex characters \fIwchstr\fR into the window image structure starting at the current cursor position. The four functions with \fIn\fR as the last argument copy at most \fIn\fR elements, but no more than will fit on the line. If \fBn\fR=\fB\-1\fR then the whole array is copied, to the maximum number of characters that will fit on the line. .PP The window cursor is \fInot\fR advanced. These functions work faster than \fBwaddnstr\fR. On the other hand: .bP they do not perform checking (such as for the newline, backspace, or carriage return characters), .bP they do not advance the current cursor position, .bP they do not expand other control characters to ^-escapes, and .bP they truncate the string if it crosses the right margin, rather than wrapping it around to the new line. .PP These functions end successfully on encountering a null \fIcchar_t\fR, or when they have filled the current line. If a complex character cannot completely fit at the end of the current line, the remaining columns are filled with the background character and rendition. .SH RETURN VALUE All functions return the integer \fBERR\fR upon failure and \fBOK\fR on success. .PP X/Open does not define any error conditions. This implementation returns an error if the window pointer is null. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES All functions except \fBwadd_wchnstr\fR may be macros. .SH PORTABILITY These entry points are described in the XSI Curses standard, Issue 4. .SH SEE ALSO \fBcurs_addwstr\fR(3X), \fBcurses\fR(3X). .PP Comparable functions in the narrow-character (ncurses) library are described in \fBcurs_addchstr\fR(3X). ncurses-6.0-20160213/man/form_page.3x0000644000175100001440000000752511476505455015467 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_page.3x,v 1.12 2010/12/04 18:40:45 tom Exp $ .TH form_page 3X "" .SH NAME \fBform_page\fR \- set and get form page number .SH SYNOPSIS \fB#include \fR .br int set_current_field(FORM *form, FIELD *field); .br FIELD *current_field(const FORM *); .br int set_form_page(FORM *form, int n); .br int form_page(const FORM *form); .br int field_index(const FIELD *field); .br .SH DESCRIPTION The function \fBset_current field\fR sets the current field of the given form; \fBcurrent_field\fR returns the current field of the given form. .PP The function \fBset_form_page\fR sets the form's page number (goes to page \fIn\fR of the form). .PP The function \fBform_page\fR returns the form's current page number. .PP The function \fBfield_index\fR returns the index of the field in the field array of the form it is connected to. It returns \fBERR\fR if the argument is the null pointer or the field is not connected. .SH RETURN VALUE Except for \fBform_page\fR, each routine returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_BAD_STATE Routine was called from an initialization or termination function. .TP 5 .B E_INVALID_FIELD Contents of a field are not valid. .TP 5 .B E_REQUEST_DENIED The form driver could not process the request. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). . .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_in_wch.3x0000644000175100001440000000667411476505074016034 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_in_wch.3x,v 1.5 2010/12/04 18:36:44 tom Exp $ .TH curs_in_wch 3X "" .SH NAME \fBin_wch\fR, \fBmvin_wch\fR, \fBmvwin_wch\fR, \fBwin_wch\fR \- extract a complex character and rendition from a window .SH SYNOPSIS \fB#include \fR .sp \fBint in_wch(cchar_t *\fR\fIwcval\fR\fB);\fR .br \fBint mvin_wch(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwcval\fR\fB);\fR .br \fBint mvwin_wch(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwcval\fR\fB);\fR .br \fBint win_wch(WINDOW *\fR\fIwin\fR\fB, cchar_t *\fR\fIwcval\fR\fB);\fR .SH DESCRIPTION These functions extract the complex character and rendition from the current position in the named window into the \fBcchar_t\fR object referenced by wcval. .SH RETURN VALUE No errors are defined in the XSI Curses standard. This implementation checks for null pointers, returns ERR in that case. Also, the \fImv\fR routines check for error moving the cursor, returning ERR in that case. Otherwise they return OK .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES Note that all of these routines may be macros. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_inch\fR(3X). ncurses-6.0-20160213/man/clear.10000644000175100001440000000537112161421623014403 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2013 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: clear.1,v 1.10 2013/06/22 22:22:11 tom Exp $ .TH @CLEAR@ 1 "" .ds n 5 .SH NAME \fB@CLEAR@\fR \- clear the terminal screen .SH SYNOPSIS \fB@CLEAR@\fR .br .SH DESCRIPTION \fB@CLEAR@\fR clears your screen if this is possible, including its scrollback buffer (if the extended "E3" capability is defined). \fB@CLEAR@\fR looks in the environment for the terminal type and then in the \fBterminfo\fR database to determine how to clear the screen. .PP \fB@CLEAR@\fR ignores any command-line parameters that may be present. .SH SEE ALSO \fB@TPUT@\fR(1), \fBterminfo\fR(\*n) .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). ncurses-6.0-20160213/man/menu_requestname.3x0000644000175100001440000000650712630673165017101 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_requestname.3x,v 1.10 2015/12/05 23:42:45 tom Exp $ .TH menu_requestname 3X "" .SH NAME \fBmenu_request_by_name\fP, \fBmenu_request_name\fR \- handle printable menu request names .SH SYNOPSIS \fB#include \fR .br const char *menu_request_name(int request); .br int menu_request_by_name(const char *name); .br .SH DESCRIPTION The function \fBmenu_request_name\fR returns the printable name of a menu request code. .br The function \fBmenu_request_by_name\fR searches in the name-table for a request with the given name and returns its request code. Otherwise E_NO_MATCH is returned. .SH RETURN VALUE \fBmenu_request_name\fR returns \fBNULL\fR on error and sets errno to \fBE_BAD_ARGUMENT\fR. .br \fBmenu_request_by_name\fR returns \fBE_NO_MATCH\fR on error. It does not set errno. .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on them be conditioned using NCURSES_VERSION. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_bkgd.3x0000644000175100001440000001070712623747246015470 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_bkgd.3x,v 1.24 2015/11/21 01:53:42 tom Exp $ .de bP .IP \(bu 4 .. .TH curs_bkgd 3X "" .SH NAME \fBbkgdset\fR, \fBwbkgdset\fR, \fBbkgd\fR, \fBwbkgd\fR, \fBgetbkgd\fR \- \fBcurses\fR window background manipulation routines .SH SYNOPSIS \fB#include \fR .PP \fBvoid bkgdset(chtype \fP\fIch\fP\fB);\fR .br \fBvoid wbkgdset(WINDOW *\fP\fIwin, chtype \fP\fIch\fP\fB);\fR .br \fBint bkgd(chtype \fP\fIch\fP\fB);\fR .br \fBint wbkgd(WINDOW *\fP\fIwin\fP\fB, chtype \fP\fIch\fP\fB);\fR .br \fBchtype getbkgd(WINDOW *\fP\fIwin\fP\fB);\fR .br .SH DESCRIPTION .SS bkgdset The \fBbkgdset\fR and \fBwbkgdset\fR routines manipulate the background of the named window. The window background is a \fBchtype\fR consisting of any combination of attributes (i.e., rendition) and a character. The attribute part of the background is combined (OR'ed) with all non-blank characters that are written into the window with \fBwaddch\fR. Both the character and attribute parts of the background are combined with the blank characters. The background becomes a property of the character and moves with the character through any scrolling and insert/delete line/character operations. .PP To the extent possible on a particular terminal, the attribute part of the background is displayed as the graphic rendition of the character put on the screen. .SS bkgd .PP The \fBbkgd\fR and \fBwbkgd\fR functions set the background property of the current or specified window and then apply this setting to every character position in that window: .PP .bP The rendition of every character on the screen is changed to the new background rendition. .bP Wherever the former background character appears, it is changed to the new background character. .SS getbkgd .PP The \fBgetbkgd\fR function returns the given window's current background character/attribute pair. .SH RETURN VALUE .PP The routines \fBbkgd\fR and \fBwbkgd\fR return the integer \fBOK\fR. The SVr4.0 manual says "or a non-negative integer if \fBimmedok\fR is set", but this appears to be an error. .SH NOTES .PP Note that \fBbkgdset\fR and \fBbkgd\fR may be macros. .SH PORTABILITY .PP These functions are described in the XSI Curses standard, Issue 4. It specifies that \fBbkgd\fR and \fBwbkgd\fR return \fBERR\fR on failure, but gives no failure conditions. .SH SEE ALSO .na .PP \fBcurses\fR(3X), \fBcurs_addch\fR(3X), \fBcurs_attr\fR(3X), \fBcurs_outopts\fR(3X) ncurses-6.0-20160213/man/curs_getstr.3x0000644000175100001440000001272211476505074016064 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2005,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_getstr.3x,v 1.19 2010/12/04 18:36:44 tom Exp $ .TH curs_getstr 3X "" .na .hy 0 .SH NAME \fBgetstr\fR, \fBgetnstr\fR, \fBwgetstr\fR, \fBwgetnstr\fR, \fBmvgetstr\fR, \fBmvgetnstr\fR, \fBmvwgetstr\fR, \fBmvwgetnstr\fR \- accept character strings from \fBcurses\fR terminal keyboard .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint getstr(char *str);\fR .br \fBint getnstr(char *str, int n);\fR .br \fBint wgetstr(WINDOW *win, char *str);\fR .br \fBint wgetnstr(WINDOW *win, char *str, int n);\fR .br \fBint mvgetstr(int y, int x, char *str);\fR .br \fBint mvwgetstr(WINDOW *win, int y, int x, char *str);\fR .br \fBint mvgetnstr(int y, int x, char *str, int n);\fR .br \fBint mvwgetnstr(WINDOW *, int y, int x, char *str, int n);\fR .br .SH DESCRIPTION The function \fBgetstr\fR is equivalent to a series of calls to \fBgetch\fR, until a newline or carriage return is received (the terminating character is not included in the returned string). The resulting value is placed in the area pointed to by the character pointer \fIstr\fR. .PP \fBwgetnstr\fR reads at most \fIn\fR characters, thus preventing a possible overflow of the input buffer. Any attempt to enter more characters (other than the terminating newline or carriage return) causes a beep. Function keys also cause a beep and are ignored. The \fBgetnstr\fR function reads from the \fIstdscr\fR default window. .PP The user's erase and kill characters are interpreted. If keypad mode is on for the window, \fBKEY_LEFT\fR and \fBKEY_BACKSPACE\fR are both considered equivalent to the user's kill character. .PP Characters input are echoed only if \fBecho\fR is currently on. In that case, backspace is echoed as deletion of the previous character (typically a left motion). .SH RETURN VALUE All routines return the integer \fBERR\fR upon failure and an \fBOK\fR (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful completion. .PP X/Open defines no error conditions. .PP In this implementation, these functions return an error if the window pointer is null, or if its timeout expires without having any data. .PP This implementation provides an extension as well. If a SIGWINCH interrupts the function, it will return \fBKEY_RESIZE\fP rather than \fBOK\fP or \fBERR\fP. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES Note that \fBgetstr\fR, \fBmvgetstr\fR, and \fBmvwgetstr\fR may be macros. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. They read single-byte characters only. The standard does not define any error conditions. This implementation returns ERR if the window pointer is null, or if the lower-level \fBwgetch\fR call returns an ERR. .PP SVr3 and early SVr4 curses implementations did not reject function keys; the SVr4.0 documentation claimed that "special keys" (such as function keys, "home" key, "clear" key, \fIetc\fR.) are "interpreted", without giving details. It lied. In fact, the `character' value appended to the string by those implementations was predictable but not useful (being, in fact, the low-order eight bits of the key's KEY_ value). .PP The functions \fBgetnstr\fR, \fBmvgetnstr\fR, and \fBmvwgetnstr\fR were present but not documented in SVr4. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_getch\fR(3X), \fBcurs_variables\fR(3X). ncurses-6.0-20160213/man/curs_color.3x0000644000175100001440000003513212630642206015662 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_color.3x,v 1.40 2015/12/05 20:09:42 tom Exp $ .TH curs_color 3X "" .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .de bP .IP \(bu 4 .. .ds n 5 .na .hy 0 .SH NAME \fBstart_color\fR, \fBinit_pair\fR, \fBinit_color\fR, \fBhas_colors\fR, \fBcan_change_color\fR, \fBcolor_content\fR, \fBpair_content\fR, \fBCOLOR_PAIR\fR \- \fBcurses\fR color manipulation routines .ad .hy .SH SYNOPSIS \fB# include \fR .sp \fBint start_color(void);\fR .br \fBint init_pair(short pair, short f, short b);\fR .br \fBint init_color(short color, short r, short g, short b);\fR .br \fBbool has_colors(void);\fR .br \fBbool can_change_color(void);\fR .br \fBint color_content(short color, short *r, short *g, short *b);\fR .br \fBint pair_content(short pair, short *f, short *b);\fR .br \fBint COLOR_PAIR(int n);\fR .br .SH DESCRIPTION .SS Overview \fBcurses\fR supports color attributes on terminals with that capability. To use these routines \fBstart_color\fR must be called, usually right after \fBinitscr\fR. Colors are always used in pairs (referred to as color-pairs). A color-pair consists of a foreground color (for characters) and a background color (for the blank field on which the characters are displayed). A programmer initializes a color-pair with the routine \fBinit_pair\fR. After it has been initialized, \fBCOLOR_PAIR\fR(\fIn\fR), a macro defined in \fB\fR, can be used as a new video attribute. .PP If a terminal is capable of redefining colors, the programmer can use the routine \fBinit_color\fR to change the definition of a color. The routines \fBhas_colors\fR and \fBcan_change_color\fR return \fBTRUE\fR or \fBFALSE\fR, depending on whether the terminal has color capabilities and whether the programmer can change the colors. The routine \fBcolor_content\fR allows a programmer to extract the amounts of red, green, and blue components in an initialized color. The routine \fBpair_content\fR allows a programmer to find out how a given color-pair is currently defined. .SS Color Rendering The \fBcurses\fP library combines these inputs to produce the actual foreground and background colors shown on the screen: .bP per-character video attributes (e.g., via \fBwaddch\fP), .bP the window attribute (e.g., by \fBwattrset\fP), and .bP the background character (e.g., \fBwbkgdset\fP). .PP Per-character and window attributes are usually set by a parameter containing video attributes including a \fBCOLOR_PAIR\fP value. Some functions such as \fBwattr_set\fP use a separate parameter which is the color pair number. .PP The background character is a special case: it includes a character value, just as if it were passed to \fBwaddch\fP. .PP The \fBcurses\fP library does the actual work of combining these color pairs in an internal function called from \fBwaddch\fP: .bP If the parameter passed to \fBwaddch\fP is \fIblank\fP, and it uses the special color pair 0, .RS .bP \fBcurses\fP next checks the window attribute. .bP If the window attribute does not use color pair 0, \fBcurses\fP uses the color pair from the window attribute. .bP Otherwise, \fBcurses\fP uses the background character. .RE .bP If the parameter passed to \fBwaddch\fP is \fInot blank\fP, or it does not use the special color pair 0, \fBcurses\fP prefers the color pair from the parameter, if it is nonzero. Otherwise, it tries the window attribute next, and finally the background character. .PP Some \fBcurses\fP functions such as \fBwprintw\fP call \fBwaddch\fP. Those do not combine its parameter with a color pair. Consequently those calls use only the window attribute or the background character. .SS Routine Descriptions The \fBstart_color\fR routine requires no arguments. It must be called if the programmer wants to use colors, and before any other color manipulation routine is called. It is good practice to call this routine right after \fBinitscr\fR. \fBstart_color\fR does this: .bP It initializes two global variables, \fBCOLORS\fR and \fBCOLOR_PAIRS\fR (respectively defining the maximum number of colors and color-pairs the terminal can support). .bP It initializes the special color pair \fB0\fP to the default foreground and background colors. No other color pairs are initialized. .bP It restores the colors on the terminal to the values they had when the terminal was just turned on. .bP If the terminal supports the \fBinitc\fP (\fBinitialize_color\fP) capability, \fBstart_color\fP initializes its internal table representing the red, green and blue components of the color palette. .IP The components depend on whether the terminal uses CGA (aka "ANSI") or HLS (i.e., the \fBhls\fP (\fBhue_lightness_saturation\fP) capability is set). The table is initialized first for eight basic colors (black, red, green, yellow, blue, magenta, cyan, and white), and after that (if the terminal supports more than eight colors) the components are initialized to \fB1000\fP. .IP \fBstart_color\fP does not attempt to set the terminal's color palette to match its built-in table. An application may use \fBinit_color\fP to alter the internal table along with the terminal's color. .PP These limits apply to color values and color pairs. Values outside these limits are not legal, and may result in a runtime error: .bP \fBCOLORS\fP corresponds to the terminal database's \fBmax_colors\fP capability, which is typically a signed 16-bit integer (see \fBterminfo\fR(\*n)). .bP color values are expected to be in the range \fB0\fP to \fBCOLORS\-1\fP, inclusive (including \fB0\fP and \fBCOLORS\-1\fP). .bP a special color value \fB\-1\fP is used in certain extended functions to denote the \fIdefault color\fP (see \fBuse_default_colors\fP). .bP \fBCOLOR_PAIRS\fP corresponds to the terminal database's \fBmax_pairs\fP capability, which is typically a signed 16-bit integer (see \fBterminfo\fR(\*n)). .bP legal color pair values are in the range \fB1\fP to \fBCOLOR_PAIRS\-1\fP, inclusive. .bP color pair \fB0\fP is special; it denotes \*(``no color\*(''. .IP Color pair \fB0\fP is assumed to be white on black, but is actually whatever the terminal implements before color is initialized. It cannot be modified by the application. .PP The \fBinit_pair\fR routine changes the definition of a color-pair. It takes three arguments: the number of the color-pair to be changed, the foreground color number, and the background color number. For portable applications: .bP The first argument must be a legal color pair value. If default colors are used (see \fBuse_default_colors\fP) the upper limit is adjusted to allow for extra pairs which use a default color in foreground and/or background. .bP The second and third arguments must be legal color values. .PP If the color-pair was previously initialized, the screen is refreshed and all occurrences of that color-pair are changed to the new definition. .PP As an extension, ncurses allows you to set color pair \fB0\fP via the \fBassume_default_colors\fR routine, or to specify the use of default colors (color number \fB\-1\fR) if you first invoke the \fBuse_default_colors\fR routine. .PP The \fBinit_color\fR routine changes the definition of a color. It takes four arguments: the number of the color to be changed followed by three RGB values (for the amounts of red, green, and blue components). The first argument must be a legal color value; default colors are not allowed here. (See the section \fBColors\fR for the default color index.) Each of the last three arguments must be a value in the range \fB0\fP through \fB1000\fP. When \fBinit_color\fR is used, all occurrences of that color on the screen immediately change to the new definition. .PP The \fBhas_colors\fR routine requires no arguments. It returns \fBTRUE\fR if the terminal can manipulate colors; otherwise, it returns \fBFALSE\fR. This routine facilitates writing terminal-independent programs. For example, a programmer can use it to decide whether to use color or some other video attribute. .PP The \fBcan_change_color\fR routine requires no arguments. It returns \fBTRUE\fR if the terminal supports colors and can change their definitions; other, it returns \fBFALSE\fR. This routine facilitates writing terminal-independent programs. .PP The \fBcolor_content\fR routine gives programmers a way to find the intensity of the red, green, and blue (RGB) components in a color. It requires four arguments: the color number, and three addresses of \fBshort\fRs for storing the information about the amounts of red, green, and blue components in the given color. The first argument must be a legal color value, i.e., \fB0\fP through \fBCOLORS\-1\fP, inclusive. The values that are stored at the addresses pointed to by the last three arguments are in the range \fB0\fP (no component) through \fB1000\fP (maximum amount of component), inclusive. .PP The \fBpair_content\fR routine allows programmers to find out what colors a given color-pair consists of. It requires three arguments: the color-pair number, and two addresses of \fBshort\fRs for storing the foreground and the background color numbers. The first argument must be a legal color value, i.e., in the range \fB1\fP through \fBCOLOR_PAIRS\-1\fR, inclusive. The values that are stored at the addresses pointed to by the second and third arguments are in the range \fB0\fP through \fBCOLORS\fR, inclusive. .SS Colors In \fB\fR the following macros are defined. These are the standard colors (ISO-6429). \fBcurses\fR also assumes that \fBCOLOR_BLACK\fR is the default background color for all terminals. .PP .nf \fBCOLOR_BLACK\fR \fBCOLOR_RED\fR \fBCOLOR_GREEN\fR \fBCOLOR_YELLOW\fR \fBCOLOR_BLUE\fR \fBCOLOR_MAGENTA\fR \fBCOLOR_CYAN\fR \fBCOLOR_WHITE\fR .fi .SH RETURN VALUE The routines \fBcan_change_color()\fR and \fBhas_colors()\fR return \fBTRUE\fR or \fBFALSE\fR. .PP All other routines return the integer \fBERR\fR upon failure and an \fBOK\fR (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful completion. .PP X/Open defines no error conditions. This implementation will return \fBERR\fR on attempts to use color values outside the range \fB0\fP to COLORS\-1 (except for the default colors extension), or use color pairs outside the range \fB0\fP to \fBCOLOR_PAIRS\-1\fP. Color values used in \fBinit_color\fP must be in the range \fB0\fP to \fB1000\fP. An error is returned from all functions if the terminal has not been initialized. An error is returned from secondary functions such as \fBinit_pair\fP if \fBstart_color\fP was not called. .RS 3 .TP 5 \fBinit_color\fP returns an error if the terminal does not support this feature, e.g., if the \fIinitialize_color\fP capability is absent from the terminal description. .TP 5 \fBstart_color\fP returns an error if the color table cannot be allocated. .RE .SH NOTES In the \fIncurses\fR implementation, there is a separate color activation flag, color palette, color pairs table, and associated COLORS and COLOR_PAIRS counts for each screen; the \fBstart_color\fR function only affects the current screen. The SVr4/XSI interface is not really designed with this in mind, and historical implementations may use a single shared color palette. .PP Note that setting an implicit background color via a color pair affects only character cells that a character write operation explicitly touches. To change the background color used when parts of a window are blanked by erasing or scrolling operations, see \fBcurs_bkgd\fR(3X). .PP Several caveats apply on 386 and 486 machines with VGA-compatible graphics: .bP COLOR_YELLOW is actually brown. To get yellow, use COLOR_YELLOW combined with the \fBA_BOLD\fR attribute. .bP The A_BLINK attribute should in theory cause the background to go bright. This often fails to work, and even some cards for which it mostly works (such as the Paradise and compatibles) do the wrong thing when you try to set a bright "yellow" background (you get a blinking yellow foreground instead). .bP Color RGB values are not settable. .SH PORTABILITY This implementation satisfies XSI Curses's minimum maximums for \fBCOLORS\fR and \fBCOLOR_PAIRS\fR. .PP The \fBinit_pair\fP routine accepts negative values of foreground and background color to support the \fBuse_default_colors\fP extension, but only if that routine has been first invoked. .PP The assumption that \fBCOLOR_BLACK\fR is the default background color for all terminals can be modified using the \fBassume_default_colors\fP extension. .PP This implementation checks the pointers, e.g., for the values returned by \fBcolor_content\fP and \fBpair_content\fP, and will treat those as optional parameters when null. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_attr\fR(3X), \fBcurs_variables\fR(3X), \fBdefault_colors\fR(3X) ncurses-6.0-20160213/man/terminfo.tail0000644000175100001440000017346112517175173015752 0ustar tomusers.\" $Id: terminfo.tail,v 1.69 2015/04/26 14:47:23 tom Exp $ .\" Beginning of terminfo.tail file .\" This file is part of ncurses. .\" See "terminfo.head" for copyright. .ps +1 .SS User-Defined Capabilities . The preceding section listed the \fIpredefined\fP capabilities. They deal with some special features for terminals no longer (or possibly never) produced. Occasionally there are special features of newer terminals which are awkward or impossible to represent by reusing the predefined capabilities. .PP \fBncurses\fP addresses this limitation by allowing user-defined capabilities. The \fB@TIC@\fP and \fB@INFOCMP@\fP programs provide the \fB\-x\fP option for this purpose. When \fB\-x\fP is set, \fB@TIC@\fP treats unknown capabilities as user-defined. That is, if \fB@TIC@\fP encounters a capability name which it does not recognize, it infers its type (boolean, number or string) from the syntax and makes an extended table entry for that capability. The \fBuse_extended_names\fP function makes this information conditionally available to applications. The ncurses library provides the data leaving most of the behavior to applications: .bP User-defined capability strings whose name begins with \*(``k\*('' are treated as function keys. .bP The types (boolean, number, string) determined by \fB@TIC@\fP can be inferred by successful calls on \fBtigetflag\fP, etc. .bP If the capability name happens to be two characters, the capability is also available through the termcap interface. .PP While termcap is said to be extensible because it does not use a predefined set of capabilities, in practice it has been limited to the capabilities defined by terminfo implementations. As a rule, user-defined capabilities intended for use by termcap applications should be limited to booleans and numbers to avoid running past the 1023 byte limit assumed by termcap implementations and their applications. In particular, providing extended sets of function keys (past the 60 numbered keys and the handful of special named keys) is best done using the longer names available using terminfo. . .SS A Sample Entry . The following entry, describing an ANSI-standard terminal, is representative of what a \fBterminfo\fR entry for a modern terminal typically looks like. .PP .nf .ft CW \s-2ansi|ansi/pc-term compatible with color, am, mc5i, mir, msgr, colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64, acsc=+\\020\\,\\021-\\030.^Y0\\333`\\004a\\261f\\370g\\361h\\260 j\\331k\\277l\\332m\\300n\\305o~p\\304q\\304r\\304s_t\\303 u\\264v\\301w\\302x\\263y\\363z\\362{\\343|\\330}\\234~\\376, bel=^G, blink=\\E[5m, bold=\\E[1m, cbt=\\E[Z, clear=\\E[H\\E[J, cr=^M, cub=\\E[%p1%dD, cub1=\\E[D, cud=\\E[%p1%dB, cud1=\\E[B, cuf=\\E[%p1%dC, cuf1=\\E[C, cup=\\E[%i%p1%d;%p2%dH, cuu=\\E[%p1%dA, cuu1=\\E[A, dch=\\E[%p1%dP, dch1=\\E[P, dl=\\E[%p1%dM, dl1=\\E[M, ech=\\E[%p1%dX, ed=\\E[J, el=\\E[K, el1=\\E[1K, home=\\E[H, hpa=\\E[%i%p1%dG, ht=\\E[I, hts=\\EH, ich=\\E[%p1%d@, il=\\E[%p1%dL, il1=\\E[L, ind=^J, indn=\\E[%p1%dS, invis=\\E[8m, kbs=^H, kcbt=\\E[Z, kcub1=\\E[D, kcud1=\\E[B, kcuf1=\\E[C, kcuu1=\\E[A, khome=\\E[H, kich1=\\E[L, mc4=\\E[4i, mc5=\\E[5i, nel=\\r\\E[S, op=\\E[39;49m, rep=%p1%c\\E[%p2%{1}%-%db, rev=\\E[7m, rin=\\E[%p1%dT, rmacs=\\E[10m, rmpch=\\E[10m, rmso=\\E[m, rmul=\\E[m, s0ds=\\E(B, s1ds=\\E)B, s2ds=\\E*B, s3ds=\\E+B, setab=\\E[4%p1%dm, setaf=\\E[3%p1%dm, sgr=\\E[0;10%?%p1%t;7%; %?%p2%t;4%; %?%p3%t;7%; %?%p4%t;5%; %?%p6%t;1%; %?%p7%t;8%; %?%p9%t;11%;m, sgr0=\\E[0;10m, smacs=\\E[11m, smpch=\\E[11m, smso=\\E[7m, smul=\\E[4m, tbc=\\E[3g, u6=\\E[%i%d;%dR, u7=\\E[6n, u8=\\E[?%[;0123456789]c, u9=\\E[c, vpa=\\E[%i%p1%dd, .fi .ft R .PP Entries may continue onto multiple lines by placing white space at the beginning of each line except the first. Comments may be included on lines beginning with \*(``#\*(''. Capabilities in .I terminfo are of three types: .bP Boolean capabilities which indicate that the terminal has some particular feature, .bP numeric capabilities giving the size of the terminal or the size of particular delays, and .bP string capabilities, which give a sequence which can be used to perform particular terminal operations. .PP .SS Types of Capabilities .PP All capabilities have names. For instance, the fact that ANSI-standard terminals have .I "automatic margins" (i.e., an automatic return and line-feed when the end of a line is reached) is indicated by the capability \fBam\fR. Hence the description of ansi includes \fBam\fR. Numeric capabilities are followed by the character \*(``#\*('' and then a positive value. Thus \fBcols\fR, which indicates the number of columns the terminal has, gives the value \*(``80\*('' for ansi. Values for numeric capabilities may be specified in decimal, octal or hexadecimal, using the C programming language conventions (e.g., 255, 0377 and 0xff or 0xFF). .PP Finally, string valued capabilities, such as \fBel\fR (clear to end of line sequence) are given by the two-character code, an \*(``=\*('', and then a string ending at the next following \*(``,\*(''. .PP A number of escape sequences are provided in the string valued capabilities for easy encoding of characters there. Both \fB\eE\fR and \fB\ee\fR map to an \s-1ESCAPE\s0 character, \fB^x\fR maps to a control-x for any appropriate x, and the sequences \fB\en \el \er \et \eb \ef \es\fR give a newline, line-feed, return, tab, backspace, form-feed, and space. Other escapes include .bP \fB\e^\fR for \fB^\fR, .bP \fB\e\e\fR for \fB\e\fR, .bP \fB\e\fR, for comma, .bP \fB\e:\fR for \fB:\fR, .bP and \fB\e0\fR for null. .IP \fB\e0\fR will produce \e200, which does not terminate a string but behaves as a null character on most terminals, providing CS7 is specified. See stty(1). .IP The reason for this quirk is to maintain binary compatibility of the compiled terminfo files with other implementations, e.g., the SVr4 systems, which document this. Compiled terminfo files use null-terminated strings, with no lengths. Modifying this would require a new binary format, which would not work with other implementations. .PP Finally, characters may be given as three octal digits after a \fB\e\fR. .PP A delay in milliseconds may appear anywhere in a string capability, enclosed in $<..> brackets, as in \fBel\fP=\eEK$<5>, and padding characters are supplied by .I tputs to provide this delay. The delay must be a number with at most one decimal place of precision; it may be followed by suffixes \*(``*\*('' or \*(``/\*('' or both. A \*(``*\*('' indicates that the padding required is proportional to the number of lines affected by the operation, and the amount given is the per-affected-unit padding required. (In the case of insert character, the factor is still the number of .IR lines affected.) Normally, padding is advisory if the device has the \fBxon\fR capability; it is used for cost computation but does not trigger delays. A \*(``/\*('' suffix indicates that the padding is mandatory and forces a delay of the given number of milliseconds even on devices for which \fBxon\fR is present to indicate flow control. .PP Sometimes individual capabilities must be commented out. To do this, put a period before the capability name. For example, see the second .B ind in the example above. .br .ne 5 .PP .SS Fetching Compiled Descriptions .PP The \fBncurses\fP library searches for terminal descriptions in several places. It uses only the first description found. The library has a compiled-in list of places to search which can be overridden by environment variables. Before starting to search, \fBncurses\fP eliminates duplicates in its search list. .bP If the environment variable TERMINFO is set, it is interpreted as the pathname of a directory containing the compiled description you are working on. Only that directory is searched. .bP If TERMINFO is not set, \fBncurses\fR will instead look in the directory \fB$HOME/.terminfo\fR for a compiled description. .bP Next, if the environment variable TERMINFO_DIRS is set, \fBncurses\fR will interpret the contents of that variable as a list of colon-separated directories (or database files) to be searched. .IP An empty directory name (i.e., if the variable begins or ends with a colon, or contains adjacent colons) is interpreted as the system location \fI\*d\fR. .bP Finally, \fBncurses\fP searches these compiled-in locations: .RS .bP a list of directories (@TERMINFO_DIRS@), and .bP the system terminfo directory, \fI\*d\fR (the compiled-in default). .RE .SS Preparing Descriptions .PP We now outline how to prepare descriptions of terminals. The most effective way to prepare a terminal description is by imitating the description of a similar terminal in .I terminfo and to build up a description gradually, using partial descriptions with .I vi or some other screen-oriented program to check that they are correct. Be aware that a very unusual terminal may expose deficiencies in the ability of the .I terminfo file to describe it or bugs in the screen-handling code of the test program. .PP To get the padding for insert line right (if the terminal manufacturer did not document it) a severe test is to edit a large file at 9600 baud, delete 16 or so lines from the middle of the screen, then hit the \*(``u\*('' key several times quickly. If the terminal messes up, more padding is usually needed. A similar test can be used for insert character. .PP .SS Basic Capabilities .PP The number of columns on each line for the terminal is given by the \fBcols\fR numeric capability. If the terminal is a \s-1CRT\s0, then the number of lines on the screen is given by the \fBlines\fR capability. If the terminal wraps around to the beginning of the next line when it reaches the right margin, then it should have the \fBam\fR capability. If the terminal can clear its screen, leaving the cursor in the home position, then this is given by the \fBclear\fR string capability. If the terminal overstrikes (rather than clearing a position when a character is struck over) then it should have the \fBos\fR capability. If the terminal is a printing terminal, with no soft copy unit, give it both .B hc and .BR os . .RB ( os applies to storage scope terminals, such as \s-1TEKTRONIX\s+1 4010 series, as well as hard copy and APL terminals.) If there is a code to move the cursor to the left edge of the current row, give this as .BR cr . (Normally this will be carriage return, control M.) If there is a code to produce an audible signal (bell, beep, etc) give this as .BR bel . .PP If there is a code to move the cursor one position to the left (such as backspace) that capability should be given as .BR cub1 . Similarly, codes to move to the right, up, and down should be given as .BR cuf1 , .BR cuu1 , and .BR cud1 . These local cursor motions should not alter the text they pass over, for example, you would not normally use \*(``\fBcuf1\fP=\ \*('' because the space would erase the character moved over. .PP A very important point here is that the local cursor motions encoded in .I terminfo are undefined at the left and top edges of a \s-1CRT\s0 terminal. Programs should never attempt to backspace around the left edge, unless .B bw is given, and never attempt to go up locally off the top. In order to scroll text up, a program will go to the bottom left corner of the screen and send the .B ind (index) string. .PP To scroll text down, a program goes to the top left corner of the screen and sends the .B ri (reverse index) string. The strings .B ind and .B ri are undefined when not on their respective corners of the screen. .PP Parameterized versions of the scrolling sequences are .B indn and .B rin which have the same semantics as .B ind and .B ri except that they take one parameter, and scroll that many lines. They are also undefined except at the appropriate edge of the screen. .PP The \fBam\fR capability tells whether the cursor sticks at the right edge of the screen when text is output, but this does not necessarily apply to a .B cuf1 from the last column. The only local motion which is defined from the left edge is if .B bw is given, then a .B cub1 from the left edge will move to the right edge of the previous row. If .B bw is not given, the effect is undefined. This is useful for drawing a box around the edge of the screen, for example. If the terminal has switch selectable automatic margins, the .I terminfo file usually assumes that this is on; i.e., \fBam\fR. If the terminal has a command which moves to the first column of the next line, that command can be given as .B nel (newline). It does not matter if the command clears the remainder of the current line, so if the terminal has no .B cr and .B lf it may still be possible to craft a working .B nel out of one or both of them. .PP These capabilities suffice to describe hard-copy and \*(lqglass-tty\*(rq terminals. Thus the model 33 teletype is described as .PP .DT .nf .ft CW .\".in -2 \s-133\||\|tty33\||\|tty\||\|model 33 teletype, bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,\s+1 .\".in +2 .ft R .fi .PP while the Lear Siegler \s-1ADM-3\s0 is described as .PP .DT .nf .ft CW .\".in -2 \s-1adm3\||\|3\||\|lsi adm3, am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J, ind=^J, lines#24,\s+1 .\".in +2 .ft R .fi .PP .SS Parameterized Strings .PP Cursor addressing and other strings requiring parameters in the terminal are described by a parameterized string capability, with \fIprintf\fP-like escapes such as \fI%x\fR in it. For example, to address the cursor, the .B cup capability is given, using two parameters: the row and column to address to. (Rows and columns are numbered from zero and refer to the physical screen visible to the user, not to any unseen memory.) If the terminal has memory relative cursor addressing, that can be indicated by .BR mrcup . .PP The parameter mechanism uses a stack and special \fB%\fP codes to manipulate it. Typically a sequence will push one of the parameters onto the stack and then print it in some format. Print (e.g., "%d") is a special case. Other operations, including "%t" pop their operand from the stack. It is noted that more complex operations are often necessary, e.g., in the \fBsgr\fP string. .PP The \fB%\fR encodings have the following meanings: .PP .TP 5 \fB%%\fP outputs \*(``%\*('' .TP \fB%\fP\fI[[\fP:\fI]flags][width[.precision]][\fP\fBdoxXs\fP\fI]\fP as in \fBprintf\fP, flags are \fI[\-+#]\fP and \fIspace\fP. Use a \*(``:\*('' to allow the next character to be a \*(``\-\*('' flag, avoiding interpreting "%\-" as an operator. .TP \f(CW%c\fP print pop() like %c in \fBprintf\fP .TP \fB%s\fP print pop() like %s in \fBprintf\fP .TP \fB%p\fP\fI[1\-9]\fP push \fIi\fP'th parameter .TP \fB%P\fP\fI[a\-z]\fP set dynamic variable \fI[a\-z]\fP to pop() .TP \fB%g\fP\fI[a\-z]/\fP get dynamic variable \fI[a\-z]\fP and push it .TP \fB%P\fP\fI[A\-Z]\fP set static variable \fI[a\-z]\fP to \fIpop()\fP .TP \fB%g\fP\fI[A\-Z]\fP get static variable \fI[a\-z]\fP and push it .IP The terms "static" and "dynamic" are misleading. Historically, these are simply two different sets of variables, whose values are not reset between calls to \fBtparm\fP. However, that fact is not documented in other implementations. Relying on it will adversely impact portability to other implementations. .TP \fB%'\fP\fIc\fP\fB'\fP char constant \fIc\fP .TP \fB%{\fP\fInn\fP\fB}\fP integer constant \fInn\fP .TP \fB%l\fP push strlen(pop) .TP \fB%+\fP, \fB%\-\fP, \fB%*\fP, \fB%/\fP, \fB%m\fP arithmetic (%m is mod): \fIpush(pop() op pop())\fP .TP \fB%&\fP, \fB%|\fP, \fB%^\fP bit operations (AND, OR and exclusive-OR): \fIpush(pop() op pop())\fP .TP \fB%=\fP, \fB%>\fP, \fB%<\fP logical operations: \fIpush(pop() op pop())\fP .TP \fB%A\fP, \fB%O\fP logical AND and OR operations (for conditionals) .TP \fB%!\fP, \fB%~\fP unary operations (logical and bit complement): push(op pop()) .TP \fB%i\fP add 1 to first two parameters (for ANSI terminals) .TP \fB%?\fP \fIexpr\fP \fB%t\fP \fIthenpart\fP \fB%e\fP \fIelsepart\fP \fB%;\fP This forms an if-then-else. The \fB%e\fP \fIelsepart\fP is optional. Usually the \fB%?\fP \fIexpr\fP part pushes a value onto the stack, and \fB%t\fP pops it from the stack, testing if it is nonzero (true). If it is zero (false), control passes to the \fB%e\fP (else) part. .IP It is possible to form else-if's a la Algol 68: .RS \fB%?\fP c\d1\u \fB%t\fP b\d1\u \fB%e\fP c\d2\u \fB%t\fP b\d2\u \fB%e\fP c\d3\u \fB%t\fP b\d3\u \fB%e\fP c\d4\u \fB%t\fP b\d4\u \fB%e\fP \fB%;\fP .RE .IP where c\di\u are conditions, b\di\u are bodies. .IP Use the \fB\-f\fP option of \fB@TIC@\fP or \fB@INFOCMP@\fP to see the structure of if-then-else's. Some strings, e.g., \fBsgr\fP can be very complicated when written on one line. The \fB\-f\fP option splits the string into lines with the parts indented. .PP Binary operations are in postfix form with the operands in the usual order. That is, to get x\-5 one would use "%gx%{5}%-". \fB%P\fP and \fB%g\fP variables are persistent across escape-string evaluations. .PP Consider the HP2645, which, to get to row 3 and column 12, needs to be sent \eE&a12c03Y padded for 6 milliseconds. Note that the order of the rows and columns is inverted here, and that the row and column are printed as two digits. Thus its \fBcup\fR capability is \*(lqcup=6\eE&%p2%2dc%p1%2dY\*(rq. .PP The Microterm \s-1ACT-IV\s0 needs the current row and column sent preceded by a \fB^T\fR, with the row and column simply encoded in binary, \*(lqcup=^T%p1%c%p2%c\*(rq. Terminals which use \*(lq%c\*(rq need to be able to backspace the cursor (\fBcub1\fR), and to move the cursor up one line on the screen (\fBcuu1\fR). This is necessary because it is not always safe to transmit \fB\en\fR \fB^D\fR and \fB\er\fR, as the system may change or discard them. (The library routines dealing with terminfo set tty modes so that tabs are never expanded, so \et is safe to send. This turns out to be essential for the Ann Arbor 4080.) .PP A final example is the \s-1LSI ADM\s0-3a, which uses row and column offset by a blank character, thus \*(lqcup=\eE=%p1%' '%+%c%p2%' '%+%c\*(rq. After sending \*(``\eE=\*('', this pushes the first parameter, pushes the ASCII value for a space (32), adds them (pushing the sum on the stack in place of the two previous values) and outputs that value as a character. Then the same is done for the second parameter. More complex arithmetic is possible using the stack. .PP .SS Cursor Motions .PP If the terminal has a fast way to home the cursor (to very upper left corner of screen) then this can be given as \fBhome\fR; similarly a fast way of getting to the lower left-hand corner can be given as \fBll\fR; this may involve going up with \fBcuu1\fR from the home position, but a program should never do this itself (unless \fBll\fR does) because it can make no assumption about the effect of moving up from the home position. Note that the home position is the same as addressing to (0,0): to the top left corner of the screen, not of memory. (Thus, the \eEH sequence on HP terminals cannot be used for .BR home .) .PP If the terminal has row or column absolute cursor addressing, these can be given as single parameter capabilities .B hpa (horizontal position absolute) and .B vpa (vertical position absolute). Sometimes these are shorter than the more general two parameter sequence (as with the hp2645) and can be used in preference to .BR cup . If there are parameterized local motions (e.g., move .I n spaces to the right) these can be given as .BR cud , .BR cub , .BR cuf , and .BR cuu with a single parameter indicating how many spaces to move. These are primarily useful if the terminal does not have .BR cup , such as the \s-1TEKTRONIX\s+1 4025. .PP If the terminal needs to be in a special mode when running a program that uses these capabilities, the codes to enter and exit this mode can be given as \fBsmcup\fR and \fBrmcup\fR. This arises, for example, from terminals like the Concept with more than one page of memory. If the terminal has only memory relative cursor addressing and not screen relative cursor addressing, a one screen-sized window must be fixed into the terminal for cursor addressing to work properly. This is also used for the \s-1TEKTRONIX\s+1 4025, where .B smcup sets the command character to be the one used by terminfo. If the \fBsmcup\fP sequence will not restore the screen after an \fBrmcup\fP sequence is output (to the state prior to outputting \fBrmcup\fP), specify \fBnrrmc\fP. .PP .SS Area Clears .PP If the terminal can clear from the current position to the end of the line, leaving the cursor where it is, this should be given as \fBel\fR. If the terminal can clear from the beginning of the line to the current position inclusive, leaving the cursor where it is, this should be given as \fBel1\fP. If the terminal can clear from the current position to the end of the display, then this should be given as \fBed\fR. \fBEd\fR is only defined from the first column of a line. (Thus, it can be simulated by a request to delete a large number of lines, if a true .B ed is not available.) .PP .SS Insert/delete line and vertical motions .PP If the terminal can open a new blank line before the line where the cursor is, this should be given as \fBil1\fR; this is done only from the first position of a line. The cursor must then appear on the newly blank line. If the terminal can delete the line which the cursor is on, then this should be given as \fBdl1\fR; this is done only from the first position on the line to be deleted. Versions of .B il1 and .B dl1 which take a single parameter and insert or delete that many lines can be given as .B il and .BR dl . .PP If the terminal has a settable scrolling region (like the vt100) the command to set this can be described with the .B csr capability, which takes two parameters: the top and bottom lines of the scrolling region. The cursor position is, alas, undefined after using this command. .PP It is possible to get the effect of insert or delete line using .B csr on a properly chosen region; the .B sc and .B rc (save and restore cursor) commands may be useful for ensuring that your synthesized insert/delete string does not move the cursor. (Note that the \fBncurses\fR(3X) library does this synthesis automatically, so you need not compose insert/delete strings for an entry with \fBcsr\fR). .PP Yet another way to construct insert and delete might be to use a combination of index with the memory-lock feature found on some terminals (like the HP\-700/90 series, which however also has insert/delete). .PP Inserting lines at the top or bottom of the screen can also be done using .B ri or .B ind on many terminals without a true insert/delete line, and is often faster even on terminals with those features. .PP The boolean \fBnon_dest_scroll_region\fR should be set if each scrolling window is effectively a view port on a screen-sized canvas. To test for this capability, create a scrolling region in the middle of the screen, write something to the bottom line, move the cursor to the top of the region, and do \fBri\fR followed by \fBdl1\fR or \fBind\fR. If the data scrolled off the bottom of the region by the \fBri\fR re-appears, then scrolling is non-destructive. System V and XSI Curses expect that \fBind\fR, \fBri\fR, \fBindn\fR, and \fBrin\fR will simulate destructive scrolling; their documentation cautions you not to define \fBcsr\fR unless this is true. This \fBcurses\fR implementation is more liberal and will do explicit erases after scrolling if \fBndstr\fR is defined. .PP If the terminal has the ability to define a window as part of memory, which all commands affect, it should be given as the parameterized string .BR wind . The four parameters are the starting and ending lines in memory and the starting and ending columns in memory, in that order. .PP If the terminal can retain display memory above, then the \fBda\fR capability should be given; if display memory can be retained below, then \fBdb\fR should be given. These indicate that deleting a line or scrolling may bring non-blank lines up from below or that scrolling back with \fBri\fR may bring down non-blank lines. .PP .SS Insert/Delete Character .PP There are two basic kinds of intelligent terminals with respect to insert/delete character which can be described using .I terminfo. The most common insert/delete character operations affect only the characters on the current line and shift characters off the end of the line rigidly. Other terminals, such as the Concept 100 and the Perkin Elmer Owl, make a distinction between typed and untyped blanks on the screen, shifting upon an insert or delete only to an untyped blank on the screen which is either eliminated, or expanded to two untyped blanks. .PP You can determine the kind of terminal you have by clearing the screen and then typing text separated by cursor motions. Type \*(lqabc\ \ \ \ def\*(rq using local cursor motions (not spaces) between the \*(lqabc\*(rq and the \*(lqdef\*(rq. Then position the cursor before the \*(lqabc\*(rq and put the terminal in insert mode. If typing characters causes the rest of the line to shift rigidly and characters to fall off the end, then your terminal does not distinguish between blanks and untyped positions. If the \*(lqabc\*(rq shifts over to the \*(lqdef\*(rq which then move together around the end of the current line and onto the next as you insert, you have the second type of terminal, and should give the capability \fBin\fR, which stands for \*(lqinsert null\*(rq. .PP While these are two logically separate attributes (one line versus multi-line insert mode, and special treatment of untyped spaces) we have seen no terminals whose insert mode cannot be described with the single attribute. .PP Terminfo can describe both terminals which have an insert mode, and terminals which send a simple sequence to open a blank position on the current line. Give as \fBsmir\fR the sequence to get into insert mode. Give as \fBrmir\fR the sequence to leave insert mode. Now give as \fBich1\fR any sequence needed to be sent just before sending the character to be inserted. Most terminals with a true insert mode will not give \fBich1\fR; terminals which send a sequence to open a screen position should give it here. .PP If your terminal has both, insert mode is usually preferable to \fBich1\fR. Technically, you should not give both unless the terminal actually requires both to be used in combination. Accordingly, some non-curses applications get confused if both are present; the symptom is doubled characters in an update using insert. This requirement is now rare; most \fBich\fR sequences do not require previous smir, and most smir insert modes do not require \fBich1\fR before each character. Therefore, the new \fBcurses\fR actually assumes this is the case and uses either \fBrmir\fR/\fBsmir\fR or \fBich\fR/\fBich1\fR as appropriate (but not both). If you have to write an entry to be used under new curses for a terminal old enough to need both, include the \fBrmir\fR/\fBsmir\fR sequences in \fBich1\fR. .PP If post insert padding is needed, give this as a number of milliseconds in \fBip\fR (a string option). Any other sequence which may need to be sent after an insert of a single character may also be given in \fBip\fR. If your terminal needs both to be placed into an \*(``insert mode\*('' and a special code to precede each inserted character, then both .BR smir / rmir and .B ich1 can be given, and both will be used. The .B ich capability, with one parameter, .IR n , will repeat the effects of .B ich1 .I n times. .PP If padding is necessary between characters typed while not in insert mode, give this as a number of milliseconds padding in \fBrmp\fP. .PP It is occasionally necessary to move around while in insert mode to delete characters on the same line (e.g., if there is a tab after the insertion position). If your terminal allows motion while in insert mode you can give the capability \fBmir\fR to speed up inserting in this case. Omitting \fBmir\fR will affect only speed. Some terminals (notably Datamedia's) must not have \fBmir\fR because of the way their insert mode works. .PP Finally, you can specify .B dch1 to delete a single character, .B dch with one parameter, .IR n , to delete .I n characters, and delete mode by giving \fBsmdc\fR and \fBrmdc\fR to enter and exit delete mode (any mode the terminal needs to be placed in for .B dch1 to work). .PP A command to erase .I n characters (equivalent to outputting .I n blanks without moving the cursor) can be given as .B ech with one parameter. .PP .SS "Highlighting, Underlining, and Visible Bells" .PP If your terminal has one or more kinds of display attributes, these can be represented in a number of different ways. You should choose one display form as \f2standout mode\fR, representing a good, high contrast, easy-on-the-eyes, format for highlighting error messages and other attention getters. (If you have a choice, reverse video plus half-bright is good, or reverse video alone.) The sequences to enter and exit standout mode are given as \fBsmso\fR and \fBrmso\fR, respectively. If the code to change into or out of standout mode leaves one or even two blank spaces on the screen, as the TVI 912 and Teleray 1061 do, then \fBxmc\fR should be given to tell how many spaces are left. .PP Codes to begin underlining and end underlining can be given as \fBsmul\fR and \fBrmul\fR respectively. If the terminal has a code to underline the current character and move the cursor one space to the right, such as the Microterm Mime, this can be given as \fBuc\fR. .PP Other capabilities to enter various highlighting modes include .B blink (blinking) .B bold (bold or extra bright) .B dim (dim or half-bright) .B invis (blanking or invisible text) .B prot (protected) .B rev (reverse video) .B sgr0 (turn off .I all attribute modes) .B smacs (enter alternate character set mode) and .B rmacs (exit alternate character set mode). Turning on any of these modes singly may or may not turn off other modes. .PP If there is a sequence to set arbitrary combinations of modes, this should be given as .B sgr (set attributes), taking 9 parameters. Each parameter is either 0 or nonzero, as the corresponding attribute is on or off. The 9 parameters are, in order: standout, underline, reverse, blink, dim, bold, blank, protect, alternate character set. Not all modes need be supported by .BR sgr , only those for which corresponding separate attribute commands exist. .PP For example, the DEC vt220 supports most of the modes: .PP .TS center; l l l l l l lw18 lw14 lw18. \fBtparm parameter attribute escape sequence\fP none none \\E[0m p1 standout \\E[0;1;7m p2 underline \\E[0;4m p3 reverse \\E[0;7m p4 blink \\E[0;5m p5 dim not available p6 bold \\E[0;1m p7 invis \\E[0;8m p8 protect not used p9 altcharset ^O (off) ^N (on) .TE .PP We begin each escape sequence by turning off any existing modes, since there is no quick way to determine whether they are active. Standout is set up to be the combination of reverse and bold. The vt220 terminal has a protect mode, though it is not commonly used in sgr because it protects characters on the screen from the host's erasures. The altcharset mode also is different in that it is either ^O or ^N, depending on whether it is off or on. If all modes are turned on, the resulting sequence is \\E[0;1;4;5;7;8m^N. .PP Some sequences are common to different modes. For example, ;7 is output when either p1 or p3 is true, that is, if either standout or reverse modes are turned on. .PP Writing out the above sequences, along with their dependencies yields .PP .ne 11 .TS center; l l l l l l lw18 lw14 lw18. \fBsequence when to output terminfo translation\fP .ft CW \\E[0 always \\E[0 ;1 if p1 or p6 %?%p1%p6%|%t;1%; ;4 if p2 %?%p2%|%t;4%; ;5 if p4 %?%p4%|%t;5%; ;7 if p1 or p3 %?%p1%p3%|%t;7%; ;8 if p7 %?%p7%|%t;8%; m always m ^N or ^O if p9 ^N, else ^O %?%p9%t^N%e^O%; .ft R .TE .PP Putting this all together into the sgr sequence gives: .PP .ft CW .nf sgr=\\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%; %?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\\016%e\\017%;, .fi .ft R .PP Remember that if you specify sgr, you must also specify sgr0. Also, some implementations rely on sgr being given if sgr0 is, Not all terminfo entries necessarily have an sgr string, however. Many terminfo entries are derived from termcap entries which have no sgr string. The only drawback to adding an sgr string is that termcap also assumes that sgr0 does not exit alternate character set mode. .PP Terminals with the \*(``magic cookie\*('' glitch .RB ( xmc ) deposit special \*(``cookies\*('' when they receive mode-setting sequences, which affect the display algorithm rather than having extra bits for each character. Some terminals, such as the HP 2621, automatically leave standout mode when they move to a new line or the cursor is addressed. Programs using standout mode should exit standout mode before moving the cursor or sending a newline, unless the .B msgr capability, asserting that it is safe to move in standout mode, is present. .PP If the terminal has a way of flashing the screen to indicate an error quietly (a bell replacement) then this can be given as \fBflash\fR; it must not move the cursor. .PP If the cursor needs to be made more visible than normal when it is not on the bottom line (to make, for example, a non-blinking underline into an easier to find block or blinking underline) give this sequence as .BR cvvis . If there is a way to make the cursor completely invisible, give that as .BR civis . The capability .BR cnorm should be given which undoes the effects of both of these modes. .PP If your terminal correctly generates underlined characters (with no special codes needed) even though it does not overstrike, then you should give the capability \fBul\fR. If a character overstriking another leaves both characters on the screen, specify the capability \fBos\fP. If overstrikes are erasable with a blank, then this should be indicated by giving \fBeo\fR. .PP .SS Keypad and Function Keys .PP If the terminal has a keypad that transmits codes when the keys are pressed, this information can be given. Note that it is not possible to handle terminals where the keypad only works in local (this applies, for example, to the unshifted HP 2621 keys). If the keypad can be set to transmit or not transmit, give these codes as \fBsmkx\fR and \fBrmkx\fR. Otherwise the keypad is assumed to always transmit. .PP The codes sent by the left arrow, right arrow, up arrow, down arrow, and home keys can be given as \fBkcub1, kcuf1, kcuu1, kcud1, \fRand\fB khome\fR respectively. If there are function keys such as f0, f1, ..., f10, the codes they send can be given as \fBkf0, kf1, ..., kf10\fR. If these keys have labels other than the default f0 through f10, the labels can be given as \fBlf0, lf1, ..., lf10\fR. .PP The codes transmitted by certain other special keys can be given: .bP .B kll (home down), .bP .B kbs (backspace), .bP .B ktbc (clear all tabs), .bP .B kctab (clear the tab stop in this column), .bP .B kclr (clear screen or erase key), .bP .B kdch1 (delete character), .bP .B kdl1 (delete line), .bP .B krmir (exit insert mode), .bP .B kel (clear to end of line), .bP .B ked (clear to end of screen), .bP .B kich1 (insert character or enter insert mode), .bP .B kil1 (insert line), .bP .B knp (next page), .bP .B kpp (previous page), .bP .B kind (scroll forward/down), .bP .B kri (scroll backward/up), .bP .B khts (set a tab stop in this column). .PP In addition, if the keypad has a 3 by 3 array of keys including the four arrow keys, the other five keys can be given as .BR ka1 , .BR ka3 , .BR kb2 , .BR kc1 , and .BR kc3 . These keys are useful when the effects of a 3 by 3 directional pad are needed. .PP Strings to program function keys can be given as .BR pfkey , .BR pfloc , and .BR pfx . A string to program screen labels should be specified as \fBpln\fP. Each of these strings takes two parameters: the function key number to program (from 0 to 10) and the string to program it with. Function key numbers out of this range may program undefined keys in a terminal dependent manner. The difference between the capabilities is that .B pfkey causes pressing the given key to be the same as the user typing the given string; .B pfloc causes the string to be executed by the terminal in local; and .B pfx causes the string to be transmitted to the computer. .PP The capabilities \fBnlab\fP, \fBlw\fP and \fBlh\fP define the number of programmable screen labels and their width and height. If there are commands to turn the labels on and off, give them in \fBsmln\fP and \fBrmln\fP. \fBsmln\fP is normally output after one or more pln sequences to make sure that the change becomes visible. .PP .SS Tabs and Initialization .PP If the terminal has hardware tabs, the command to advance to the next tab stop can be given as .B ht (usually control I). A \*(``back-tab\*('' command which moves leftward to the preceding tab stop can be given as .BR cbt . By convention, if the teletype modes indicate that tabs are being expanded by the computer rather than being sent to the terminal, programs should not use .B ht or .B cbt even if they are present, since the user may not have the tab stops properly set. If the terminal has hardware tabs which are initially set every .I n spaces when the terminal is powered up, the numeric parameter .B it is given, showing the number of spaces the tabs are set to. This is normally used by the .IR @TSET@ command to determine whether to set the mode for hardware tab expansion, and whether to set the tab stops. If the terminal has tab stops that can be saved in non-volatile memory, the terminfo description can assume that they are properly set. .PP Other capabilities include .BR is1 , .BR is2 , and .BR is3 , initialization strings for the terminal, .BR iprog , the path name of a program to be run to initialize the terminal, and \fBif\fR, the name of a file containing long initialization strings. These strings are expected to set the terminal into modes consistent with the rest of the terminfo description. They are normally sent to the terminal, by the .I init option of the .IR @TPUT@ program, each time the user logs in. They will be printed in the following order: .RS .TP run the program .BR iprog .TP output .BR is1 .BR is2 .TP set the margins using .BR mgc , .BR smgl and .BR smgr .TP set tabs using .B tbc and .BR hts .TP print the file .BR if .TP and finally output .BR is3 . .RE .PP Most initialization is done with .BR is2 . Special terminal modes can be set up without duplicating strings by putting the common sequences in .B is2 and special cases in .B is1 and .BR is3 . .PP A set of sequences that does a harder reset from a totally unknown state can be given as .BR rs1 , .BR rs2 , .BR rf and .BR rs3 , analogous to .B is1 , .B is2 , .B if and .BR is3 respectively. These strings are output by the .IR reset program, which is used when the terminal gets into a wedged state. Commands are normally placed in .BR rs1 , .BR rs2 .B rs3 and .B rf only if they produce annoying effects on the screen and are not necessary when logging in. For example, the command to set the vt100 into 80-column mode would normally be part of .BR is2 , but it causes an annoying glitch of the screen and is not normally needed since the terminal is usually already in 80 column mode. .PP The .IR reset program writes strings including .BR iprog , etc., in the same order as the .IR init program, using .BR rs1 , etc., instead of .BR is1 , etc. If any of .BR rs1 , .BR rs2 , .BR rs3 , or .BR rf reset capability strings are missing, the .IR reset program falls back upon the corresponding initialization capability string. .PP If there are commands to set and clear tab stops, they can be given as .B tbc (clear all tab stops) and .B hts (set a tab stop in the current column of every row). If a more complex sequence is needed to set the tabs than can be described by this, the sequence can be placed in .B is2 or .BR if . .SS Delays and Padding .PP Many older and slower terminals do not support either XON/XOFF or DTR handshaking, including hard copy terminals and some very archaic CRTs (including, for example, DEC VT100s). These may require padding characters after certain cursor motions and screen changes. .PP If the terminal uses xon/xoff handshaking for flow control (that is, it automatically emits ^S back to the host when its input buffers are close to full), set .BR xon . This capability suppresses the emission of padding. You can also set it for memory-mapped console devices effectively that do not have a speed limit. Padding information should still be included so that routines can make better decisions about relative costs, but actual pad characters will not be transmitted. .PP If \fBpb\fR (padding baud rate) is given, padding is suppressed at baud rates below the value of \fBpb\fR. If the entry has no padding baud rate, then whether padding is emitted or not is completely controlled by \fBxon\fR. .PP If the terminal requires other than a null (zero) character as a pad, then this can be given as \fBpad\fR. Only the first character of the .B pad string is used. .PP .SS Status Lines Some terminals have an extra \*(``status line\*('' which is not normally used by software (and thus not counted in the terminal's \fBlines\fR capability). .PP The simplest case is a status line which is cursor-addressable but not part of the main scrolling region on the screen; the Heathkit H19 has a status line of this kind, as would a 24-line VT100 with a 23-line scrolling region set up on initialization. This situation is indicated by the \fBhs\fR capability. .PP Some terminals with status lines need special sequences to access the status line. These may be expressed as a string with single parameter \fBtsl\fR which takes the cursor to a given zero-origin column on the status line. The capability \fBfsl\fR must return to the main-screen cursor positions before the last \fBtsl\fR. You may need to embed the string values of \fBsc\fR (save cursor) and \fBrc\fR (restore cursor) in \fBtsl\fR and \fBfsl\fR to accomplish this. .PP The status line is normally assumed to be the same width as the width of the terminal. If this is untrue, you can specify it with the numeric capability \fBwsl\fR. .PP A command to erase or blank the status line may be specified as \fBdsl\fR. .PP The boolean capability \fBeslok\fR specifies that escape sequences, tabs, etc., work ordinarily in the status line. .PP The \fBncurses\fR implementation does not yet use any of these capabilities. They are documented here in case they ever become important. .PP .SS Line Graphics .PP Many terminals have alternate character sets useful for forms-drawing. Terminfo and \fBcurses\fR build in support for the drawing characters supported by the VT100, with some characters from the AT&T 4410v1 added. This alternate character set may be specified by the \fBacsc\fR capability. .PP .TS H center expand; l l l l l l l l lw25 lw10 lw6 lw6. .\".TH \fBGlyph ACS Ascii VT100\fR \fBName Name Default Name\fR UK pound sign ACS_STERLING f } arrow pointing down ACS_DARROW v . arrow pointing left ACS_LARROW < , arrow pointing right ACS_RARROW > + arrow pointing up ACS_UARROW ^ \- board of squares ACS_BOARD # h bullet ACS_BULLET o ~ checker board (stipple) ACS_CKBOARD : a degree symbol ACS_DEGREE \e f diamond ACS_DIAMOND + ` greater-than-or-equal-to ACS_GEQUAL > z greek pi ACS_PI * { horizontal line ACS_HLINE \- q lantern symbol ACS_LANTERN # i large plus or crossover ACS_PLUS + n less-than-or-equal-to ACS_LEQUAL < y lower left corner ACS_LLCORNER + m lower right corner ACS_LRCORNER + j not-equal ACS_NEQUAL ! | plus/minus ACS_PLMINUS # g scan line 1 ACS_S1 ~ o scan line 3 ACS_S3 \- p scan line 7 ACS_S7 \- r scan line 9 ACS_S9 \&_ s solid square block ACS_BLOCK # 0 tee pointing down ACS_TTEE + w tee pointing left ACS_RTEE + u tee pointing right ACS_LTEE + t tee pointing up ACS_BTEE + v upper left corner ACS_ULCORNER + l upper right corner ACS_URCORNER + k vertical line ACS_VLINE | x .TE .PP The best way to define a new device's graphics set is to add a column to a copy of this table for your terminal, giving the character which (when emitted between \fBsmacs\fR/\fBrmacs\fR switches) will be rendered as the corresponding graphic. Then read off the VT100/your terminal character pairs right to left in sequence; these become the ACSC string. .PP .SS Color Handling .PP Most color terminals are either \*(``Tektronix-like\*('' or \*(``HP-like\*(''. Tektronix-like terminals have a predefined set of N colors (where N usually 8), and can set character-cell foreground and background characters independently, mixing them into N\ *\ N color-pairs. On HP-like terminals, the use must set each color pair up separately (foreground and background are not independently settable). Up to M color-pairs may be set up from 2*M different colors. ANSI-compatible terminals are Tektronix-like. .PP Some basic color capabilities are independent of the color method. The numeric capabilities \fBcolors\fR and \fBpairs\fR specify the maximum numbers of colors and color-pairs that can be displayed simultaneously. The \fBop\fR (original pair) string resets foreground and background colors to their default values for the terminal. The \fBoc\fR string resets all colors or color-pairs to their default values for the terminal. Some terminals (including many PC terminal emulators) erase screen areas with the current background color rather than the power-up default background; these should have the boolean capability \fBbce\fR. .PP To change the current foreground or background color on a Tektronix-type terminal, use \fBsetaf\fR (set ANSI foreground) and \fBsetab\fR (set ANSI background) or \fBsetf\fR (set foreground) and \fBsetb\fR (set background). These take one parameter, the color number. The SVr4 documentation describes only \fBsetaf\fR/\fBsetab\fR; the XPG4 draft says that "If the terminal supports ANSI escape sequences to set background and foreground, they should be coded as \fBsetaf\fR and \fBsetab\fR, respectively. If the terminal supports other escape sequences to set background and foreground, they should be coded as \fBsetf\fR and \fBsetb\fR, respectively. The \fIvidputs()\fR function and the refresh functions use \fBsetaf\fR and \fBsetab\fR if they are defined." .PP The \fBsetaf\fR/\fBsetab\fR and \fBsetf\fR/\fBsetb\fR capabilities take a single numeric argument each. Argument values 0-7 of \fBsetaf\fR/\fBsetab\fR are portably defined as follows (the middle column is the symbolic #define available in the header for the \fBcurses\fR or \fBncurses\fR libraries). The terminal hardware is free to map these as it likes, but the RGB values indicate normal locations in color space. .PP .TS H center; l c c c l l n l. \fBColor #define Value RGB\fR black \fBCOLOR_BLACK\fR 0 0, 0, 0 red \fBCOLOR_RED\ \fR 1 max,0,0 green \fBCOLOR_GREEN\fR 2 0,max,0 yellow \fBCOLOR_YELLOW\fR 3 max,max,0 blue \fBCOLOR_BLUE\fR 4 0,0,max magenta \fBCOLOR_MAGENTA\fR 5 max,0,max cyan \fBCOLOR_CYAN\fR 6 0,max,max white \fBCOLOR_WHITE\fR 7 max,max,max .TE .PP The argument values of \fBsetf\fR/\fBsetb\fR historically correspond to a different mapping, i.e., .TS H center; l c c c l l n l. \fBColor #define Value RGB\fR black \fBCOLOR_BLACK\fR 0 0, 0, 0 blue \fBCOLOR_BLUE\fR 1 0,0,max green \fBCOLOR_GREEN\fR 2 0,max,0 cyan \fBCOLOR_CYAN\fR 3 0,max,max red \fBCOLOR_RED\ \fR 4 max,0,0 magenta \fBCOLOR_MAGENTA\fR 5 max,0,max yellow \fBCOLOR_YELLOW\fR 6 max,max,0 white \fBCOLOR_WHITE\fR 7 max,max,max .TE .PP It is important to not confuse the two sets of color capabilities; otherwise red/blue will be interchanged on the display. .PP On an HP-like terminal, use \fBscp\fR with a color-pair number parameter to set which color pair is current. .PP On a Tektronix-like terminal, the capability \fBccc\fR may be present to indicate that colors can be modified. If so, the \fBinitc\fR capability will take a color number (0 to \fBcolors\fR \- 1)and three more parameters which describe the color. These three parameters default to being interpreted as RGB (Red, Green, Blue) values. If the boolean capability \fBhls\fR is present, they are instead as HLS (Hue, Lightness, Saturation) indices. The ranges are terminal-dependent. .PP On an HP-like terminal, \fBinitp\fR may give a capability for changing a color-pair value. It will take seven parameters; a color-pair number (0 to \fBmax_pairs\fR \- 1), and two triples describing first background and then foreground colors. These parameters must be (Red, Green, Blue) or (Hue, Lightness, Saturation) depending on \fBhls\fR. .PP On some color terminals, colors collide with highlights. You can register these collisions with the \fBncv\fR capability. This is a bit-mask of attributes not to be used when colors are enabled. The correspondence with the attributes understood by \fBcurses\fR is as follows: .PP .TS center; l l l l lw20 lw2 lw10 lw10. \fBAttribute Bit Decimal Set by\fR A_STANDOUT 0 1 sgr A_UNDERLINE 1 2 sgr A_REVERSE 2 4 sgr A_BLINK 3 8 sgr A_DIM 4 16 sgr A_BOLD 5 32 sgr A_INVIS 6 64 sgr A_PROTECT 7 128 sgr A_ALTCHARSET 8 256 sgr A_HORIZONTAL 9 512 sgr1 A_LEFT 10 1024 sgr1 A_LOW 11 2048 sgr1 A_RIGHT 12 4096 sgr1 A_TOP 13 8192 sgr1 A_VERTICAL 14 16384 sgr1 A_ITALIC 15 32768 sitm .TE .PP For example, on many IBM PC consoles, the underline attribute collides with the foreground color blue and is not available in color mode. These should have an \fBncv\fR capability of 2. .PP SVr4 curses does nothing with \fBncv\fR, ncurses recognizes it and optimizes the output in favor of colors. .PP .SS Miscellaneous If the terminal requires other than a null (zero) character as a pad, then this can be given as pad. Only the first character of the pad string is used. If the terminal does not have a pad character, specify npc. Note that ncurses implements the termcap-compatible \fBPC\fR variable; though the application may set this value to something other than a null, ncurses will test \fBnpc\fR first and use napms if the terminal has no pad character. .PP If the terminal can move up or down half a line, this can be indicated with .B hu (half-line up) and .B hd (half-line down). This is primarily useful for superscripts and subscripts on hard-copy terminals. If a hard-copy terminal can eject to the next page (form feed), give this as .B ff (usually control L). .PP If there is a command to repeat a given character a given number of times (to save time transmitting a large number of identical characters) this can be indicated with the parameterized string .BR rep . The first parameter is the character to be repeated and the second is the number of times to repeat it. Thus, tparm(repeat_char, 'x', 10) is the same as \*(``xxxxxxxxxx\*(''. .PP If the terminal has a settable command character, such as the \s-1TEKTRONIX\s+1 4025, this can be indicated with .BR cmdch . A prototype command character is chosen which is used in all capabilities. This character is given in the .B cmdch capability to identify it. The following convention is supported on some UNIX systems: The environment is to be searched for a .B CC variable, and if found, all occurrences of the prototype character are replaced with the character in the environment variable. .PP Terminal descriptions that do not represent a specific kind of known terminal, such as .IR switch , .IR dialup , .IR patch , and .IR network , should include the .B gn (generic) capability so that programs can complain that they do not know how to talk to the terminal. (This capability does not apply to .I virtual terminal descriptions for which the escape sequences are known.) .PP If the terminal has a \*(``meta key\*('' which acts as a shift key, setting the 8th bit of any character transmitted, this fact can be indicated with .BR km . Otherwise, software will assume that the 8th bit is parity and it will usually be cleared. If strings exist to turn this \*(``meta mode\*('' on and off, they can be given as .B smm and .BR rmm . .PP If the terminal has more lines of memory than will fit on the screen at once, the number of lines of memory can be indicated with .BR lm . A value of .BR lm #0 indicates that the number of lines is not fixed, but that there is still more memory than fits on the screen. .PP If the terminal is one of those supported by the \s-1UNIX\s+1 virtual terminal protocol, the terminal number can be given as .BR vt . .PP Media copy strings which control an auxiliary printer connected to the terminal can be given as .BR mc0 : print the contents of the screen, .BR mc4 : turn off the printer, and .BR mc5 : turn on the printer. When the printer is on, all text sent to the terminal will be sent to the printer. It is undefined whether the text is also displayed on the terminal screen when the printer is on. A variation .B mc5p takes one parameter, and leaves the printer on for as many characters as the value of the parameter, then turns the printer off. The parameter should not exceed 255. All text, including .BR mc4 , is transparently passed to the printer while an .B mc5p is in effect. .PP .SS Glitches and Braindamage .PP Hazeltine terminals, which do not allow \*(``~\*('' characters to be displayed should indicate \fBhz\fR. .PP Terminals which ignore a line-feed immediately after an \fBam\fR wrap, such as the Concept and vt100, should indicate \fBxenl\fR. .PP If .B el is required to get rid of standout (instead of merely writing normal text on top of it), \fBxhp\fP should be given. .PP Teleray terminals, where tabs turn all characters moved over to blanks, should indicate \fBxt\fR (destructive tabs). Note: the variable indicating this is now \*(``dest_tabs_magic_smso\*(''; in older versions, it was teleray_glitch. This glitch is also taken to mean that it is not possible to position the cursor on top of a \*(``magic cookie\*('', that to erase standout mode it is instead necessary to use delete and insert line. The ncurses implementation ignores this glitch. .PP The Beehive Superbee, which is unable to correctly transmit the escape or control C characters, has .BR xsb , indicating that the f1 key is used for escape and f2 for control C. (Only certain Superbees have this problem, depending on the ROM.) Note that in older terminfo versions, this capability was called \*(``beehive_glitch\*(''; it is now \*(``no_esc_ctl_c\*(''. .PP Other specific terminal problems may be corrected by adding more capabilities of the form \fBx\fR\fIx\fR. .PP .SS Similar Terminals .PP If there are two very similar terminals, one (the variant) can be defined as being just like the other (the base) with certain exceptions. In the definition of the variant, the string capability \fBuse\fR can be given with the name of the base terminal. The capabilities given before .B use override those in the base type named by .BR use . If there are multiple \fBuse\fR capabilities, they are merged in reverse order. That is, the rightmost \fBuse\fR reference is processed first, then the one to its left, and so forth. Capabilities given explicitly in the entry override those brought in by \fBuse\fR references. .PP A capability can be canceled by placing \fBxx@\fR to the left of the use reference that imports it, where \fIxx\fP is the capability. For example, the entry .RS .PP 2621\-nl, smkx@, rmkx@, use=2621, .RE .PP defines a 2621\-nl that does not have the \fBsmkx\fR or \fBrmkx\fR capabilities, and hence does not turn on the function key labels when in visual mode. This is useful for different modes for a terminal, or for different user preferences. .PP .SS Pitfalls of Long Entries .PP Long terminfo entries are unlikely to be a problem; to date, no entry has even approached terminfo's 4096-byte string-table maximum. Unfortunately, the termcap translations are much more strictly limited (to 1023 bytes), thus termcap translations of long terminfo entries can cause problems. .PP The man pages for 4.3BSD and older versions of \fBtgetent()\fP instruct the user to allocate a 1024-byte buffer for the termcap entry. The entry gets null-terminated by the termcap library, so that makes the maximum safe length for a termcap entry 1k\-1 (1023) bytes. Depending on what the application and the termcap library being used does, and where in the termcap file the terminal type that \fBtgetent()\fP is searching for is, several bad things can happen. .PP Some termcap libraries print a warning message or exit if they find an entry that's longer than 1023 bytes; others do not; others truncate the entries to 1023 bytes. Some application programs allocate more than the recommended 1K for the termcap entry; others do not. .PP Each termcap entry has two important sizes associated with it: before "tc" expansion, and after "tc" expansion. "tc" is the capability that tacks on another termcap entry to the end of the current one, to add on its capabilities. If a termcap entry does not use the "tc" capability, then of course the two lengths are the same. .PP The "before tc expansion" length is the most important one, because it affects more than just users of that particular terminal. This is the length of the entry as it exists in /etc/termcap, minus the backslash-newline pairs, which \fBtgetent()\fP strips out while reading it. Some termcap libraries strip off the final newline, too (GNU termcap does not). Now suppose: .bP a termcap entry before expansion is more than 1023 bytes long, .bP and the application has only allocated a 1k buffer, .bP and the termcap library (like the one in BSD/OS 1.1 and GNU) reads the whole entry into the buffer, no matter what its length, to see if it is the entry it wants, .bP and \fBtgetent()\fP is searching for a terminal type that either is the long entry, appears in the termcap file after the long entry, or does not appear in the file at all (so that \fBtgetent()\fP has to search the whole termcap file). .PP Then \fBtgetent()\fP will overwrite memory, perhaps its stack, and probably core dump the program. Programs like telnet are particularly vulnerable; modern telnets pass along values like the terminal type automatically. The results are almost as undesirable with a termcap library, like SunOS 4.1.3 and Ultrix 4.4, that prints warning messages when it reads an overly long termcap entry. If a termcap library truncates long entries, like OSF/1 3.0, it is immune to dying here but will return incorrect data for the terminal. .PP The "after tc expansion" length will have a similar effect to the above, but only for people who actually set TERM to that terminal type, since \fBtgetent()\fP only does "tc" expansion once it is found the terminal type it was looking for, not while searching. .PP In summary, a termcap entry that is longer than 1023 bytes can cause, on various combinations of termcap libraries and applications, a core dump, warnings, or incorrect operation. If it is too long even before "tc" expansion, it will have this effect even for users of some other terminal types and users whose TERM variable does not have a termcap entry. .PP When in \-C (translate to termcap) mode, the \fBncurses\fR implementation of \fB@TIC@\fR(1M) issues warning messages when the pre-tc length of a termcap translation is too long. The \-c (check) option also checks resolved (after tc expansion) lengths. .SS Binary Compatibility It is not wise to count on portability of binary terminfo entries between commercial UNIX versions. The problem is that there are at least two versions of terminfo (under HP\-UX and AIX) which diverged from System V terminfo after SVr1, and have added extension capabilities to the string table that (in the binary format) collide with System V and XSI Curses extensions. .SH EXTENSIONS .PP Searching for terminal descriptions in \fB$HOME/.terminfo\fR and TERMINFO_DIRS is not supported by older implementations. .PP Some SVr4 \fBcurses\fR implementations, and all previous to SVr4, do not interpret the %A and %O operators in parameter strings. .PP SVr4/XPG4 do not specify whether \fBmsgr\fR licenses movement while in an alternate-character-set mode (such modes may, among other things, map CR and NL to characters that do not trigger local motions). The \fBncurses\fR implementation ignores \fBmsgr\fR in \fBALTCHARSET\fR mode. This raises the possibility that an XPG4 implementation making the opposite interpretation may need terminfo entries made for \fBncurses\fR to have \fBmsgr\fR turned off. .PP The \fBncurses\fR library handles insert-character and insert-character modes in a slightly non-standard way to get better update efficiency. See the \fBInsert/Delete Character\fR subsection above. .PP The parameter substitutions for \fBset_clock\fR and \fBdisplay_clock\fR are not documented in SVr4 or the XSI Curses standard. They are deduced from the documentation for the AT&T 505 terminal. .PP Be careful assigning the \fBkmous\fR capability. The \fBncurses\fR wants to interpret it as \fBKEY_MOUSE\fR, for use by terminals and emulators like xterm that can return mouse-tracking information in the keyboard-input stream. .PP X/Open Curses does not mention italics. Portable applications must assume that numeric capabilities are signed 16-bit values. This includes the \fIno_color_video\fP (ncv) capability. The 32768 mask value used for italics with ncv can be confused with an absent or cancelled ncv. If italics should work with colors, then the ncv value must be specified, even if it is zero. .PP Different commercial ports of terminfo and curses support different subsets of the XSI Curses standard and (in some cases) different extension sets. Here is a summary, accurate as of October 1995: .PP \fBSVR4, Solaris, ncurses\fR \-\- These support all SVr4 capabilities. .PP \fBSGI\fR \-\- Supports the SVr4 set, adds one undocumented extended string capability (\fBset_pglen\fR). .PP \fBSVr1, Ultrix\fR \-\- These support a restricted subset of terminfo capabilities. The booleans end with \fBxon_xoff\fR; the numerics with \fBwidth_status_line\fR; and the strings with \fBprtr_non\fR. .PP \fBHP/UX\fR \-\- Supports the SVr1 subset, plus the SVr[234] numerics \fBnum_labels\fR, \fBlabel_height\fR, \fBlabel_width\fR, plus function keys 11 through 63, plus \fBplab_norm\fR, \fBlabel_on\fR, and \fBlabel_off\fR, plus some incompatible extensions in the string table. .PP \fBAIX\fR \-\- Supports the SVr1 subset, plus function keys 11 through 63, plus a number of incompatible string table extensions. .PP \fBOSF\fR \-\- Supports both the SVr4 set and the AIX extensions. .SH FILES .TP 25 \*d/?/* files containing terminal descriptions .SH SEE ALSO \fB@TIC@\fR(1M), \fB@INFOCMP@\fR(1M), \fBcurses\fR(3X), \fBprintf\fR(3), \fBterm\fR(\*n). \fBterm_variables\fR(3X). .SH AUTHORS Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey. Based on pcurses by Pavel Curtis. ncurses-6.0-20160213/man/curs_initscr.3x0000644000175100001440000002322312553547522016226 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_initscr.3x,v 1.24 2015/07/21 23:01:38 tom Exp $ .TH curs_initscr 3X "" .de bP .IP \(bu 4 .. .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .na .hy 0 .SH NAME \fBinitscr\fR, \fBnewterm\fR, \fBendwin\fR, \fBisendwin\fR, \fBset_term\fR, \fBdelscreen\fR \- \fBcurses\fR screen initialization and manipulation routines .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBWINDOW *initscr(void);\fR .br \fBint endwin(void);\fR .br \fBbool isendwin(void);\fR .br \fBSCREEN *newterm(char *\fP\fItype\fP\fB, FILE *\fP\fIoutfd\fP\fB, FILE *\fP\fIinfd\fP\fB);\fR .br \fBSCREEN *set_term(SCREEN *\fP\fInew\fP\fB);\fR .br \fBvoid delscreen(SCREEN* \fP\fIsp\fP\fB);\fR .br .SH DESCRIPTION .SS initscr \fBinitscr\fR is normally the first \fBcurses\fR routine to call when initializing a program. A few special routines sometimes need to be called before it; these are \fBslk_init\fR, \fBfilter\fR, \fBripoffline\fR, \fBuse_env\fR. For multiple-terminal applications, \fBnewterm\fR may be called before \fBinitscr\fR. .PP The initscr code determines the terminal type and initializes all \fBcurses\fR data structures. \fBinitscr\fR also causes the first call to \fBrefresh\fR to clear the screen. If errors occur, \fBinitscr\fR writes an appropriate error message to standard error and exits; otherwise, a pointer is returned to \fBstdscr\fR. .SS newterm .PP A program that outputs to more than one terminal should use the \fBnewterm\fR routine for each terminal instead of \fBinitscr\fR. A program that needs to inspect capabilities, so it can continue to run in a line-oriented mode if the terminal cannot support a screen-oriented program, would also use \fBnewterm\fR. The routine \fBnewterm\fR should be called once for each terminal. It returns a variable of type \fBSCREEN *\fR which should be saved as a reference to that terminal. \fBnewterm\fP's arguments are .bP the \fItype\fR of the terminal to be used in place of \fB$TERM\fR, .bP a file pointer for output to the terminal, and .bP another file pointer for input from the terminal .PP If the \fItype\fR parameter is \fBNULL\fR, \fB$TERM\fR will be used. .SS endwin .PP The program must also call \fBendwin\fR for each terminal being used before exiting from \fBcurses\fR. If \fBnewterm\fR is called more than once for the same terminal, the first terminal referred to must be the last one for which \fBendwin\fR is called. .PP A program should always call \fBendwin\fR before exiting or escaping from \fBcurses\fR mode temporarily. This routine .bP restores tty modes, .bP moves the cursor to the lower left-hand corner of the screen and .bP resets the terminal into the proper non-visual mode. .PP Calling \fBrefresh\fR or \fBdoupdate\fR after a temporary escape causes the program to resume visual mode. .SS isendwin .PP The \fBisendwin\fR routine returns \fBTRUE\fR if \fBendwin\fR has been called without any subsequent calls to \fBwrefresh\fR, and \fBFALSE\fR otherwise. .SS set_term .PP The \fBset_term\fR routine is used to switch between different terminals. The screen reference \fBnew\fR becomes the new current terminal. The previous terminal is returned by the routine. This is the only routine which manipulates \fBSCREEN\fR pointers; all other routines affect only the current terminal. .SS delscreen .PP The \fBdelscreen\fR routine frees storage associated with the \fBSCREEN\fR data structure. The \fBendwin\fR routine does not do this, so \fBdelscreen\fR should be called after \fBendwin\fR if a particular \fBSCREEN\fR is no longer needed. .SH RETURN VALUE \fBendwin\fR returns the integer \fBERR\fR upon failure and \fBOK\fR upon successful completion. .PP Routines that return pointers always return \fBNULL\fR on error. .PP X/Open defines no error conditions. In this implementation .bP \fBendwin\fP returns an error if the terminal was not initialized. .bP \fBnewterm\fP returns an error if it cannot allocate the data structures for the screen, or for the top-level windows within the screen, i.e., \fBcurscr\fP, \fBnewscr\fP, or \fBstdscr\fP. .bP \fBset_term\fP returns no error. .SH NOTES Note that \fBinitscr\fR and \fBnewterm\fR may be macros. .SH PORTABILITY These functions were described in the XSI Curses standard, Issue 4. As of 2015, the current document is X/Open Curses, Issue 7. .SS Differences X/Open specifies that portable applications must not call \fBinitscr\fR more than once: .bP The portable way to use \fBinitscr\fP is once only, using \fBrefresh\fP (see curs_refresh(3X)) to restore the screen after \fBendwin\fP. .bP This implementation allows using \fBinitscr\fP after \fBendwin\fP. .PP Old versions of curses, e.g., BSD 4.4, may have returned a null pointer from \fBinitscr\fR when an error is detected, rather than exiting. It is safe but redundant to check the return value of \fBinitscr\fR in XSI Curses. .SS Unset TERM Variable .PP If the TERM variable is missing or empty, \fBinitscr\fP uses the value \*(``unknown\*('', which normally corresponds to a terminal entry with the \fIgeneric\fP (\fIgn\fP) capability. Generic entries are detected by \fBsetupterm\fP (see curs_terminfo(3X)) and cannot be used for full-screen operation. Other implementations may handle a missing/empty TERM variable differently. .SS Signal Handlers .PP Quoting from X/Open Curses, section 3.1.1: .RS 5 .PP \fICurses implementations may provide for special handling of the SIGINT, SIGQUIT and SIGTSTP signals if their disposition is SIG_DFL at the time \fBinitscr()\fP is called \fP... .PP \fIAny special handling for these signals may remain in effect for the life of the process or until the process changes the disposition of the signal.\fP .PP \fINone of the Curses functions are required to be safe with respect to signals \fP... .RE .PP This implementation establishes signal handlers during initialization, e.g., \fBinitscr\fP or \fBnewterm\fP. Applications which must handle these signals should set up the corresponding handlers \fIafter\fP initializing the library: .TP 5 .B SIGINT The handler \fIattempts\fP to cleanup the screen on exit. Although it \fIusually\fP works as expected, there are limitations: .RS 5 .bP Walking the \fBSCREEN\fP list is unsafe, since all list management is done without any signal blocking. .bP On systems which have \fBREENTRANT\fP turned on, \fBset_term\fP uses functions which could deadlock or misbehave in other ways. .bP \fBendwin\fP calls other functions, many of which use stdio or other library functions which are clearly unsafe. .RE .TP 5 .B SIGTERM This uses the same handler as \fBSIGINT\fP, with the same limitations. It is not mentioned in X/Open Curses, but is more suitable for this purpose than \fBSIGQUIT\fP (which is used in debugging). .TP 5 .B SIGTSTP This handles the \fIstop\fP signal, used in job control. When resuming the process, this implementation discards pending input with \fBflushinput\fP (see curs_util(3X)), and repaints the screen assuming that it has been completely altered. It also updates the saved terminal modes with \fBdef_shell_mode\fP (see curs_kernel(3X)). .TP 5 .B SIGWINCH This handles the window-size changes which were initially ignored in the standardization efforts. The handler sets a (signal-safe) variable which is later tested in \fBwgetch\fP (see curs_getch(3X)). If \fBkeypad\fP has been enabled for the corresponding window, \fBwgetch\fP returns the key symbol \fBKEY_RESIZE\fP. At the same time, \fBwgetch\fP calls \fBresizeterm\fP to adjust the standard screen \fBstdscr\fP, and update other data such as \fBLINES\fP and \fBCOLS\fP. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_kernel\fR(3X), \fBcurs_refresh\fR(3X), \fBcurs_slk\fR(3X), \fBcurs_terminfo\fR(3X), \fBcurs_util\fR(3X), \fBcurs_variables\fR(3X). ncurses-6.0-20160213/man/MKncu_config.in0000644000175100001440000000743511344553475016145 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: MKncu_config.in,v 1.3 2010/03/06 22:29:17 tom Exp $ .TH @LIB_NAME@@DFT_ARG_SUFFIX@@cf_cv_abi_version@-config 1 "" .SH NAME @LIB_NAME@@DFT_ARG_SUFFIX@@cf_cv_abi_version@-config \- helper script for ncurses libraries .SH SYNOPSIS .B @LIB_NAME@@DFT_ARG_SUFFIX@@cf_cv_abi_version@-config [\fIoptions\fR] .SH DESCRIPTION This is a shell script which simplifies configuring applications against a particular set of ncurses libraries. .SH OPTIONS .TP \fB\-\-prefix\fR echos the package\-prefix of ncurses .TP \fB\-\-exec\-prefix\fR echos the executable\-prefix of ncurses .TP \fB\-\-cflags\fR echos the C compiler flags needed to compile with ncurses .TP \fB\-\-libs\fR echos the libraries needed to link with ncurses .TP \fB\-\-version\fR echos the release+patchdate version of ncurses .TP \fB\-\-abi\-version\fR echos the ABI version of ncurses .TP \fB\-\-mouse\-version\fR echos the mouse\-interface version of ncurses .TP \fB\-\-bindir\fR echos the directory containing ncurses programs .TP \fB\-\-datadir\fR echos the directory containing ncurses data .TP \fB\-\-includedir\fR echos the directory containing ncurses header files .TP \fB\-\-libdir\fR echos the directory containing ncurses libraries .TP \fB\-\-mandir\fR echos the directory containing ncurses manpages .TP \fB\-\-terminfo\fR echos the $TERMINFO terminfo database path, e.g., .RS @TERMINFO@ .RE .TP \fB\-\-terminfo\-dirs\fR echos the $TERMINFO_DIRS directory list, e.g., .RS @TERMINFO_DIRS@ .RE .TP \fB\-\-termpath\fR echos the $TERMPATH termcap list, if support for termcap is configured. .TP \fB\-\-help\fR prints this message .SH "SEE ALSO" \fBcurses\fR(3X) .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). ncurses-6.0-20160213/man/curs_bkgrnd.3x0000644000175100001440000001076512553307742016027 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2012,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_bkgrnd.3x,v 1.6 2015/07/21 00:18:42 tom Exp $ .de bP .IP \(bu 4 .. .TH curs_bkgrnd 3X "" .SH NAME \fBbkgrnd\fR, \fBwbkgrnd\fR, \fBbkgrndset\fR, \fBwbkgrndset\fR, \fBgetbkgrnd\fR, \fBwgetbkgrnd\fR \- \fBcurses\fR window complex background manipulation routines .SH SYNOPSIS .PP .B #include .sp \fBint bkgrnd(\fR\fB const cchar_t *\fR\fIwch\fR\fB);\fR .br \fBint wbkgrnd(\fR\fB WINDOW *\fR\fIwin\fR\fB, const cchar_t *\fR\fIwch\fR\fB);\fR .br \fBvoid bkgrndset(const cchar_t *\fR\fIwch\fR \fB);\fR .br \fBvoid wbkgrndset(WINDOW *\fR\fIwin\fR\fB, const cchar_t *\fR\fIwch\fR\fB);\fR .br \fBint getbkgrnd(cchar_t *\fR\fIwch\fR\fB);\fR .br \fBint wgetbkgrnd(WINDOW *\fR\fIwin\fR\fB, cchar_t *\fR\fIwch\fR\fB);\fR .br .SH DESCRIPTION .SS bkgrndset .PP The \fBbkgrndset\fR and \fBwbkgrndset\fR routines manipulate the background of the named window. The window background is a \fBcchar_t\fR consisting of any combination of attributes (i.e., rendition) and a complex character. The attribute part of the background is combined (OR'ed) with all non-blank characters that are written into the window with \fBwaddch\fR. Both the character and attribute parts of the background are combined with the blank characters. The background becomes a property of the character and moves with the character through any scrolling and insert/delete line/character operations. .PP To the extent possible on a particular terminal, the attribute part of the background is displayed as the graphic rendition of the character put on the screen. .SS bkgrnd .PP The \fBbkgrnd\fR and \fBwbkgrnd\fR functions set the background property of the current or specified window and then apply this setting to every character position in that window: .bP The rendition of every character on the screen is changed to the new background rendition. .bP Wherever the former background character appears, it is changed to the new background character. .SS getbkgrnd .PP The \fBgetbkgrnd\fR function returns the given window's current background character/attribute pair via the \fBwch\fR pointer. .SH NOTES Note that \fBbkgrnd\fR, \fBbkgrndset\fR, and \fBgetbkgrnd\fR may be macros. .SH RETURN VALUE .PP The \fBbkgrndset\fR and \fBwbkgrndset\fR routines do not return a value. .PP Upon successful completion, the other functions return \fBOK\fR. Otherwise, they return \fBERR\fR. A null window pointer is treated as an error. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_bkgd\fR(3X) ncurses-6.0-20160213/man/curs_clear.3x0000644000175100001440000001167011476505074015643 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2007,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_clear.3x,v 1.14 2010/12/04 18:36:44 tom Exp $ .TH curs_clear 3X "" .na .hy 0 .SH NAME \fBerase\fR, \fBwerase\fR, \fBclear\fR, \fBwclear\fR, \fBclrtobot\fR, \fBwclrtobot\fR, \fBclrtoeol\fR, \fBwclrtoeol\fR \- clear all or part of a \fBcurses\fR window .ad .hy .SH SYNOPSIS \fB# include \fR .sp \fBint erase(void);\fR .br \fBint werase(WINDOW *win);\fR .br \fBint clear(void);\fR .br \fBint wclear(WINDOW *win);\fR .br \fBint clrtobot(void);\fR .br \fBint wclrtobot(WINDOW *win);\fR .br \fBint clrtoeol(void);\fR .br \fBint wclrtoeol(WINDOW *win);\fR .br .SH DESCRIPTION The \fBerase\fR and \fBwerase\fR routines copy blanks to every position in the window, clearing the screen. .PP The \fBclear\fR and \fBwclear\fR routines are like \fBerase\fR and \fBwerase\fR, but they also call \fBclearok\fR, so that the screen is cleared completely on the next call to \fBwrefresh\fR for that window and repainted from scratch. .PP The \fBclrtobot\fR and \fBwclrtobot\fR routines erase from the cursor to the end of screen. That is, they erase all lines below the cursor in the window. Also, the current line to the right of the cursor, inclusive, is erased. .PP The \fBclrtoeol\fR and \fBwclrtoeol\fR routines erase the current line to the right of the cursor, inclusive, to the end of the current line. .PP Blanks created by erasure have the current background rendition (as set by \fBwbkgdset\fR) merged into them. .SH RETURN VALUE All routines return the integer \fBOK\fR on success and \fBERR\fP on failure. The SVr4.0 manual says "or a non-negative integer if \fBimmedok\fR is set", but this appears to be an error. .PP X/Open defines no error conditions. In this implementation, functions using a window pointer parameter return an error if it is null. .SH NOTES Note that \fBerase\fR, \fBwerase\fR, \fBclear\fR, \fBwclear\fR, \fBclrtobot\fR, and \fBclrtoeol\fR may be macros. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. The standard specifies that they return \fBERR\fR on failure, but specifies no error conditions. .PP Some historic curses implementations had, as an undocumented feature, the ability to do the equivalent of \fBclearok(..., 1)\fR by saying \fBtouchwin(stdscr)\fR or \fBclear(stdscr)\fR. This will not work under ncurses. .PP This implementation, and others such as Solaris, sets the current position to 0,0 after erasing via \fBwerase()\fP and \fBwclear()\fP. That fact is not documented in other implementations, and may not be true of implementations which were not derived from SVr4 source. .PP Not obvious from the description, most implementations clear the screen after \fBwclear\fP even for a subwindow or derived window. If you do not want to clear the screen during the next \fBwrefresh\fP, use \fBwerase\fP instead. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_outopts\fR(3X), \fBcurs_refresh\fR(3X), \fBcurs_variables\fR(3X) ncurses-6.0-20160213/man/menu_post.3x0000644000175100001440000000735012630673165015532 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_post.3x,v 1.12 2015/12/05 23:42:45 tom Exp $ .TH menu_post 3X "" .SH NAME \fBpost_menu\fR, \fBunpost_menu\fR \- write or erase menus from associated subwindows .SH SYNOPSIS \fB#include \fR .br int post_menu(MENU *menu); .br int unpost_menu(MENU *menu); .br .SH DESCRIPTION The function \fBpost_menu\fR displays a menu to its associated subwindow. To trigger physical display of the subwindow, use \fBrefresh\fR or some equivalent \fBcurses\fR routine (the implicit \fBdoupdate\fR triggered by an \fBcurses\fR input request will do). \fBpost_menu\fR resets the selection status of all items. .PP The function \fBunpost_menu\fR erases menu from its associated subwindow. .SH RETURN VALUE These routines return one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_POSTED The menu has already been posted. .TP 5 .B E_BAD_STATE Routine was called from an initialization or termination function. .TP 5 .B E_NO_ROOM Menu is too large for its window. You should consider to use \fBset_menu_format()\fR to solve the problem. .TP 5 .B E_NOT_POSTED The menu has not been posted. .TP 5 .B E_NOT_CONNECTED No items are connected to the menu. .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_opaque.3x0000644000175100001440000001205212630641631016033 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2007-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_opaque.3x,v 1.13 2015/12/05 20:05:45 tom Exp $ .TH curs_opaque 3X "" .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .na .hy 0 .SH NAME \fBis_cleared\fR, \fBis_idlok\fR, \fBis_idcok\fR, \fBis_immedok\fR, \fBis_keypad\fR, \fBis_leaveok\fR, \fBis_nodelay\fR, \fBis_notimeout\fR, \fBis_pad\fR, \fBis_scrollok\fR, \fBis_subwin\fR, \fBis_syncok\fR, \fBwgetdelay\fR, \fBwgetparent\fR, \fBwgetscrreg\fR \- \fBcurses\fR window properties .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBbool is_cleared(const WINDOW *win);\fR .br \fBbool is_idcok(const WINDOW *win);\fR .br \fBbool is_idlok(const WINDOW *win);\fR .br \fBbool is_immedok(const WINDOW *win);\fR .br \fBbool is_keypad(const WINDOW *win);\fR .br \fBbool is_leaveok(const WINDOW *win);\fR .br \fBbool is_nodelay(const WINDOW *win);\fR .br \fBbool is_notimeout(const WINDOW *win);\fR .br \fBbool is_pad(const WINDOW *win);\fR .br \fBbool is_scrollok(const WINDOW *win);\fR .br \fBbool is_subwin(const WINDOW *win);\fR .br \fBbool is_syncok(const WINDOW *win);\fR .br \fBWINDOW * wgetparent(const WINDOW *win);\fR .br \fBint wgetdelay(const WINDOW *win);\fR .br \fBint wgetscrreg(const WINDOW *win, int *top, int *bottom);\fR .br .SH DESCRIPTION This implementation provides functions which return properties set in the WINDOW structure, allowing it to be \*(``opaque\*('' if the symbol \fBNCURSES_OPAQUE\fR is defined: .TP 5 \fBis_cleared\fR returns the value set in \fBclearok\fR .TP 5 \fBis_idcok\fR returns the value set in \fBidcok\fR .TP 5 \fBis_idlok\fR returns the value set in \fBidlok\fR .TP 5 \fBis_immedok\fR returns the value set in \fBimmedok\fR .TP 5 \fBis_keypad\fR returns the value set in \fBkeypad\fR .TP 5 \fBis_leaveok\fR returns the value set in \fBleaveok\fR .TP 5 \fBis_nodelay\fR returns the value set in \fBnodelay\fR .TP 5 \fBis_notimeout\fR returns the value set in \fBnotimeout\fR .TP 5 \fBis_pad\fR returns \fBTRUE\fP if the window is a pad i.e., created by \fBnewpad\fP .TP 5 \fBis_scrollok\fR returns the value set in \fBscrollok\fR .TP 5 \fBis_subwin\fR returns \fBTRUE\fP if the window is a subwindow, i.e., created by \fBsubwin\fP or \fBderwin\fP .TP 5 \fBis_syncok\fR returns the value set in \fBsyncok\fR .TP 5 \fBwgetdelay\fR returns the delay timeout as set in \fBwtimeout\fP. .TP 5 \fBwgetparent\fR returns the parent WINDOW pointer for subwindows, or NULL for windows having no parent. .TP 5 \fBwgetscrreg\fR returns the top and bottom rows for the scrolling margin as set in \fBwsetscrreg\fP. .SH RETURN VALUE These functions all return \fBTRUE\fP or \fBFALSE\fP, except as noted. .SH NOTES Both a macro and a function are provided for each name. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on ncurses extensions be conditioned using NCURSES_VERSION. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_inopts\fR(3X), \fBcurs_outopts\fR(3X), \fBcurs_window\fR(3X) ncurses-6.0-20160213/man/mitem_userptr.3x0000644000175100001440000000634312630673165016421 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: mitem_userptr.3x,v 1.12 2015/12/05 23:42:45 tom Exp $ .TH mitem_userptr 3X "" .SH NAME \fBset_item_userptr\fP, \fBitem_userptr\fR \- associate application data with a menu item .SH SYNOPSIS \fB#include \fR .br int set_item_userptr(ITEM *item, void *userptr); .br void *item_userptr(const ITEM *item); .br .SH DESCRIPTION Every menu item has a field that can be used to hold application-specific data (that is, the menu-driver code leaves it alone). These functions get and set that field. .SH RETURN VALUE The function \fBitem_userptr\fR returns a pointer (possibly \fBNULL\fR). It does not set errno. .PP The \fBset_item_userptr\fP always returns \fBE_OK\fP (success). . .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .PP The user pointer is a void pointer. We chose not to leave it as a char pointer for SVr4 compatibility. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/make_sed.sh0000755000175100001440000000666310266247303015354 0ustar tomusers#!/bin/sh # $Id: make_sed.sh,v 1.9 2005/07/16 18:15:31 tom Exp $ ############################################################################## # Copyright (c) 1998-2003,2005 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1997-2005 # # Construct a sed-script to perform renaming within man-pages. Originally # written in much simpler form, this one accounts for the common cases of # section-names in man-pages. if test $# != 1 ; then echo '? expected a single filename' exit 1 fi COL=col$$ INPUT=input$$ UPPER=upper$$ SCRIPT=script$$ RESULT=result$$ rm -f $UPPER $SCRIPT $RESULT trap "rm -f $COL.* $INPUT $UPPER $SCRIPT $RESULT" 0 1 2 5 15 fgrep -v \# $1 | \ sed -e 's/[ ][ ]*/ /g' >$INPUT for F in 1 2 3 4 do sed -e 's/\./ /g' $INPUT | \ cut -f $F > $COL.$F done for F in 2 4 do tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ <$COL.$F >$UPPER mv $UPPER $COL.$F done paste $COL.* | \ sed -e 's/^/s\/\\$UPPER echo "# Do the TH lines" >>$RESULT sed -e 's/\//\/TH /' \ -e 's/ / /' \ -e 's/ / ""\/TH /' \ -e 's/ / /' \ -e 's/\/$/ ""\//' \ $UPPER >>$RESULT echo "# Do the embedded references" >>$RESULT sed -e 's/>$RESULT echo "# Do the \fBxxx\fR references in the .NAME section" >>$RESULT sed -e 's/\\>$RESULT # Finally, send the result to standard output cat $RESULT ncurses-6.0-20160213/man/tset.10000644000175100001440000003173012653154665014311 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2013,2016 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: tset.1,v 1.31 2016/01/30 15:41:41 tom Exp $ .TH @TSET@ 1 "" .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .SH NAME \fB@TSET@\fR, \fBreset\fR \- terminal initialization .SH SYNOPSIS \fB@TSET@\fR [\fB\-IQVcqrsw\fR] [\fB\-\fR] [\fB\-e\fR \fIch\fR] [\fB\-i\fR \fIch\fR] [\fB\-k\fR \fIch\fR] [\fB\-m\fR \fImapping\fR] [\fIterminal\fR] .br \fBreset\fR [\fB\-IQVcqrsw\fR] [\fB\-\fR] [\fB\-e\fR \fIch\fR] [\fB\-i\fR \fIch\fR] [\fB\-k\fR \fIch\fR] [\fB\-m\fR \fImapping\fR] [\fIterminal\fR] .SH DESCRIPTION .SS tset - initialization \&\fBTset\fR initializes terminals. \fBTset\fR first determines the type of terminal that you are using. This determination is done as follows, using the first terminal type found. .PP 1. The \fBterminal\fR argument specified on the command line. .PP 2. The value of the \fBTERM\fR environmental variable. .PP 3. (BSD systems only.) The terminal type associated with the standard error output device in the \fI/etc/ttys\fR file. (On System\-V-like UNIXes and systems using that convention, \fIgetty\fR does this job by setting \fBTERM\fR according to the type passed to it by \fI/etc/inittab\fR.) .PP 4. The default terminal type, \*(``unknown\*(''. .PP If the terminal type was not specified on the command-line, the \fB\-m\fR option mappings are then applied (see the section .B TERMINAL TYPE MAPPING for more information). Then, if the terminal type begins with a question mark (\*(``?\*(''), the user is prompted for confirmation of the terminal type. An empty response confirms the type, or, another type can be entered to specify a new type. Once the terminal type has been determined, the terminfo entry for the terminal is retrieved. If no terminfo entry is found for the type, the user is prompted for another terminal type. .PP Once the terminfo entry is retrieved, the window size, backspace, interrupt and line kill characters (among many other things) are set and the terminal and tab initialization strings are sent to the standard error output. Finally, if the erase, interrupt and line kill characters have changed, or are not set to their default values, their values are displayed to the standard error output. Use the \fB\-c\fP or \fB\-w\fP option to select only the window sizing versus the other initialization. If neither option is given, both are assumed. .SS reset - reinitialization .PP When invoked as \fBreset\fR, \fB@TSET@\fR sets cooked and echo modes, turns off cbreak and raw modes, turns on newline translation and resets any unset special characters to their default values before doing the terminal initialization described above. This is useful after a program dies leaving a terminal in an abnormal state. Note, you may have to type .sp \fBreset\fR .sp (the line-feed character is normally control-J) to get the terminal to work, as carriage-return may no longer work in the abnormal state. Also, the terminal will often not echo the command. .SH OPTIONS .PP The options are as follows: .TP 5 .B \-c Set control characters and modes. .TP 5 .B \-e Set the erase character to \fIch\fR. .TP .B \-I Do not send the terminal or tab initialization strings to the terminal. .TP .B \-i Set the interrupt character to \fIch\fR. .TP .B \-k Set the line kill character to \fIch\fR. .TP .B \-m Specify a mapping from a port type to a terminal. See the section .B TERMINAL TYPE MAPPING for more information. .TP .B \-Q Do not display any values for the erase, interrupt and line kill characters. Normally \fB@TSET@\fR displays the values for control characters which differ from the system's default values. .TP .B \-q The terminal type is displayed to the standard output, and the terminal is not initialized in any way. The option `\-' by itself is equivalent but archaic. .TP .B \-r Print the terminal type to the standard error output. .TP .B \-s Print the sequence of shell commands to initialize the environment variable \fBTERM\fR to the standard output. See the section .B SETTING THE ENVIRONMENT for details. .TP .B \-V reports the version of ncurses which was used in this program, and exits. .TP .B \-w Resize the window to match the size deduced via \fBsetupterm\fP. Normally this has no effect, unless \fBsetupterm\fP is not able to detect the window size. .PP The arguments for the \fB\-e\fR, \fB\-i\fR, and \fB\-k\fR options may either be entered as actual characters or by using the `hat' notation, i.e., control-h may be specified as \*(``^H\*('' or \*(``^h\*(''. . .SH SETTING THE ENVIRONMENT It is often desirable to enter the terminal type and information about the terminal's capabilities into the shell's environment. This is done using the \fB\-s\fR option. .PP When the \fB\-s\fR option is specified, the commands to enter the information into the shell's environment are written to the standard output. If the \fBSHELL\fR environmental variable ends in \*(``csh\*('', the commands are for \fBcsh\fR, otherwise, they are for \fBsh\fR. Note, the \fBcsh\fR commands set and unset the shell variable \fBnoglob\fR, leaving it unset. The following line in the \fB.login\fR or \fB.profile\fR files will initialize the environment correctly: .sp eval \`@TSET@ \-s options ... \` . .SH TERMINAL TYPE MAPPING When the terminal is not hardwired into the system (or the current system information is incorrect) the terminal type derived from the \fI/etc/ttys\fR file or the \fBTERM\fR environmental variable is often something generic like \fBnetwork\fR, \fBdialup\fR, or \fBunknown\fR. When \fB@TSET@\fR is used in a startup script it is often desirable to provide information about the type of terminal used on such ports. .PP The purpose of the \fB\-m\fR option is to map from some set of conditions to a terminal type, that is, to tell \fB@TSET@\fR \*(``If I'm on this port at a particular speed, guess that I'm on that kind of terminal\*(''. .PP The argument to the \fB\-m\fR option consists of an optional port type, an optional operator, an optional baud rate specification, an optional colon (\*(``:\*('') character and a terminal type. The port type is a string (delimited by either the operator or the colon character). The operator may be any combination of \*(``>\*('', \*(``<\*('', \*(``@\*('', and \*(``!\*(''; \*(``>\*('' means greater than, \*(``<\*('' means less than, \*(``@\*('' means equal to and \*(``!\*('' inverts the sense of the test. The baud rate is specified as a number and is compared with the speed of the standard error output (which should be the control terminal). The terminal type is a string. .PP If the terminal type is not specified on the command line, the \fB\-m\fR mappings are applied to the terminal type. If the port type and baud rate match the mapping, the terminal type specified in the mapping replaces the current type. If more than one mapping is specified, the first applicable mapping is used. .PP For example, consider the following mapping: \fBdialup>9600:vt100\fR. The port type is dialup , the operator is >, the baud rate specification is 9600, and the terminal type is vt100. The result of this mapping is to specify that if the terminal type is \fBdialup\fR, and the baud rate is greater than 9600 baud, a terminal type of \fBvt100\fR will be used. .PP If no baud rate is specified, the terminal type will match any baud rate. If no port type is specified, the terminal type will match any port type. For example, \fB\-m dialup:vt100 \-m :?xterm\fR will cause any dialup port, regardless of baud rate, to match the terminal type vt100, and any non-dialup port type to match the terminal type ?xterm. Note, because of the leading question mark, the user will be queried on a default port as to whether they are actually using an xterm terminal. .PP No whitespace characters are permitted in the \fB\-m\fR option argument. Also, to avoid problems with meta-characters, it is suggested that the entire \fB\-m\fR option argument be placed within single quote characters, and that \fBcsh\fR users insert a backslash character (\*(``\e\*('') before any exclamation marks (\*(``!\*(''). .SH HISTORY The \fB@TSET@\fR command appeared in BSD 3.0. The \fBncurses\fR implementation was lightly adapted from the 4.4BSD sources for a terminfo environment by Eric S. Raymond . .SH COMPATIBILITY The \fB@TSET@\fR utility has been provided for backward-compatibility with BSD environments (under most modern UNIXes, \fB/etc/inittab\fR and \fIgetty\fR(1) can set \fBTERM\fR appropriately for each dial-up line; this obviates what was \fB@TSET@\fR's most important use). This implementation behaves like 4.4BSD tset, with a few exceptions specified here. .PP The \fB\-S\fR option of BSD tset no longer works; it prints an error message to stderr and dies. The \fB\-s\fR option only sets \fBTERM\fR, not \fBTERMCAP\fP. Both of these changes are because the \fBTERMCAP\fR variable is no longer supported under terminfo-based \fBncurses\fR, which makes \fB@TSET@ \-S\fR useless (we made it die noisily rather than silently induce lossage). .PP There was an undocumented 4.4BSD feature that invoking tset via a link named `TSET` (or via any other name beginning with an upper-case letter) set the terminal to use upper-case only. This feature has been omitted. .PP The \fB\-A\fR, \fB\-E\fR, \fB\-h\fR, \fB\-u\fR and \fB\-v\fR options were deleted from the \fB@TSET@\fR utility in 4.4BSD. None of them were documented in 4.3BSD and all are of limited utility at best. The \fB\-a\fR, \fB\-d\fR, and \fB\-p\fR options are similarly not documented or useful, but were retained as they appear to be in widespread use. It is strongly recommended that any usage of these three options be changed to use the \fB\-m\fR option instead. The \fB\-n\fP option remains, but has no effect. The \fB\-adnp\fR options are therefore omitted from the usage summary above. .PP It is still permissible to specify the \fB\-e\fR, \fB\-i\fR, and \fB\-k\fR options without arguments, although it is strongly recommended that such usage be fixed to explicitly specify the character. .PP As of 4.4BSD, executing \fB@TSET@\fR as \fBreset\fR no longer implies the \fB\-Q\fR option. Also, the interaction between the \- option and the \fIterminal\fR argument in some historic implementations of \fB@TSET@\fR has been removed. .SH ENVIRONMENT The \fB@TSET@\fR command uses these environment variables: .TP 5 SHELL tells \fB@TSET@\fP whether to initialize \fBTERM\fP using \fBsh\fP or \fBcsh\fP syntax. .TP 5 TERM Denotes your terminal type. Each terminal type is distinct, though many are similar. .TP 5 TERMCAP may denote the location of a termcap database. If it is not an absolute pathname, e.g., begins with a `/', \fB@TSET@\fP removes the variable from the environment before looking for the terminal description. .SH FILES .TP 5 /etc/ttys system port name to terminal type mapping database (BSD versions only). .TP @TERMINFO@ terminal capability database .SH SEE ALSO .hy 0 csh(1), sh(1), stty(1), curs_terminfo(3X), tty(4), terminfo(5), ttys(5), environ(7) .hy .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). ncurses-6.0-20160213/man/curs_print.3x0000644000175100001440000000724211476505455015714 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_print.3x,v 1.10 2010/12/04 18:40:45 tom Exp $ .TH curs_print 3X "" .SH NAME \fBmcprint\fR \- ship binary data to printer .SH SYNOPSIS \fB#include \fR .sp \fBint mcprint(char *data, int len);\fR .SH DESCRIPTION This function uses the \fBmc5p\fR or \fBmc4\fR and \fBmc5\fR capabilities, if they are present, to ship given data to a printer attached to the terminal. .PP Note that the \fBmcprint\fR code has no way to do flow control with the printer or to know how much buffering it has. Your application is responsible for keeping the rate of writes to the printer below its continuous throughput rate (typically about half of its nominal cps rating). Dot-matrix printers and 6-page-per-minute lasers can typically handle 80cps, so a good conservative rule of thumb is to sleep for a second after shipping each 80-character line. . .SH RETURN VALUE The \fBmcprint\fR function returns \fBERR\fR if the write operation aborted for some reason. In this case, errno will contain either an error associated with \fBwrite(2)\fR or one of the following: .TP 5 ENODEV Capabilities for printer redirection do not exist. .TP 5 ENOMEM Couldn't allocate sufficient memory to buffer the printer write. .PP When \fBmcprint\fR succeeds, it returns the number of characters actually sent to the printer. .SH PORTABILITY The \fBmcprint\fR call was designed for \fBncurses\fR(3X), and is not found in SVr4 curses, 4.4BSD curses, or any other previous version of curses. .SH BUGS Padding in the \fBmc5p\fR, \fBmc4\fR and \fBmc5\fR capabilities will not be interpreted. .SH SEE ALSO \fBcurses\fR(3X)\fR ncurses-6.0-20160213/man/wresize.3x0000644000175100001440000000704412601574244015205 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" Author: Thomas E. Dickey 1996 .\" .\" $Id: wresize.3x,v 1.14 2015/09/26 19:57:24 tom Exp $ .TH wresize 3X "" .SH NAME \fBwresize\fR \- resize a curses window .SH SYNOPSIS \fB#include \fR .sp \fBint wresize(WINDOW *win, int lines, int columns);\fR .SH DESCRIPTION This is an extension to the curses library. It reallocates storage for an \fBncurses\fR window to adjust its dimensions to the specified values. If either dimension is larger than the current values, the window's data is filled with blanks that have the current background rendition (as set by \fBwbkgdset\fR) merged into them. .SH RETURN VALUE The function returns the integer \fBERR\fR upon failure and \fBOK\fR on success. It will fail if either of the dimensions less than or equal to zero, or if an error occurs while (re)allocating memory for the window. .SH NOTES The only restriction placed on the dimensions is that they be greater than zero. The dimensions are not compared to \fBcurses\fR screen dimensions to simplify the logic of \fBresizeterm\fR. The caller must ensure that the window's dimensions fit within the actual screen dimensions. .SH PORTABILITY .PP It is not possible to resize windows with SVr4 curses. .PP This extension of ncurses was introduced in mid-1995. It was adopted in NetBSD curses (2001) and PDCurses (2003). .SH SEE ALSO \fBresizeterm\fR(3X). .SH AUTHOR Thomas Dickey (from an equivalent function written in 1988 for BSD curses). ncurses-6.0-20160213/man/form_field_validation.3x0000644000175100001440000001475511476505277020055 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_field_validation.3x,v 1.20 2010/12/04 18:38:55 tom Exp $ .TH form_field_validation 3X "" .SH NAME \fBform_field_validation\fR \- data type validation for fields .SH SYNOPSIS \fB#include \fR .br int set_field_type(FIELD *field, FIELDTYPE *type, ...); .br FIELDTYPE *field_type(const FIELD *field); .br void *field_arg(const FIELD *field); .sp FIELDTYPE *TYPE_ALNUM; .br FIELDTYPE *TYPE_ALPHA; .br FIELDTYPE *TYPE_ENUM; .br FIELDTYPE *TYPE_INTEGER; .br FIELDTYPE *TYPE_NUMERIC; .br FIELDTYPE *TYPE_REGEXP; .br FIELDTYPE *TYPE_IPV4; .br .SH DESCRIPTION The function \fBset_field_type\fR declares a data type for a given form field. This is the type checked by validation functions. The predefined types are as follows: .TP 5 TYPE_ALNUM Alphanumeric data. Requires a third \fBint\fR argument, a minimum field width. .TP 5 TYPE_ALPHA Character data. Requires a third \fBint\fR argument, a minimum field width. .TP 5 TYPE_ENUM Accept one of a specified set of strings. Requires a third \fB(char **)\fR argument pointing to a string list; a fourth \fBint\fR flag argument to enable case-sensitivity; and a fifth \fBint\fR flag argument specifying whether a partial match must be a unique one (if this flag is off, a prefix matches the first of any set of more than one list elements with that prefix). Please notice that the string list is copied. So you may use a list that lives in automatic variables on the stack. .TP 5 TYPE_INTEGER Integer data, parsable to an integer by \fBatoi(3)\fR. Requires a third \fBint\fR argument controlling the precision, a fourth \fBlong\fR argument constraining minimum value, and a fifth \fBlong\fR constraining maximum value. If the maximum value is less than or equal to the minimum value, the range is simply ignored. On return the field buffer is formatted according to the \fBprintf\fR format specification ".*ld", where the '*' is replaced by the precision argument. For details of the precision handling see \fBprintf's\fR man-page. .TP 5 TYPE_NUMERIC Numeric data (may have a decimal-point part). Requires a third \fBint\fR argument controlling the precision, a fourth \fBdouble\fR argument constraining minimum value, and a fifth \fBdouble\fR constraining maximum value. If your system supports locales, the decimal point character to be used must be the one specified by your locale. If the maximum value is less than or equal to the minimum value, the range is simply ignored. On return the field buffer is formatted according to the \fBprintf\fR format specification ".*f", where the '*' is replaced by the precision argument. For details of the precision handling see \fBprintf's\fR man-page. .TP 5 TYPE_REGEXP Regular expression data. Requires a regular expression \fB(char *)\fR third argument; the data is valid if the regular expression matches it. Regular expressions are in the format of \fBregcomp\fR and \fBregexec\fR. Please notice that the regular expression must match the whole field. If you have for example an eight character wide field, a regular expression "^[0\-9]*$" always means that you have to fill all eight positions with digits. If you want to allow fewer digits, you may use for example "^[0\-9]* *$" which is good for trailing spaces (up to an empty field), or "^ *[0\-9]* *$" which is good for leading and trailing spaces around the digits. .TP 5 TYPE_IPV4 An Internet Protocol Version 4 address. This requires no additional argument. It is checked whether or not the buffer has the form a.b.c.d, where a,b,c and d are numbers between 0 and 255. Trailing blanks in the buffer are ignored. The address itself is not validated. Please note that this is an ncurses extension. This field type may not be available in other curses implementations. .PP It is possible to set up new programmer-defined field types. See the \fBform_fieldtype\fR(3X) manual page. .SH RETURN VALUE The functions \fBfield_type\fR and \fBfield_arg\fR return \fBNULL\fR on error. The function \fBset_field_type\fR returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X), \fBform_variables\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/ncurses.3x0000644000175100001440000014010612561414357015177 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: ncurses.3x,v 1.124 2015/08/08 14:57:51 tom Exp $ .hy 0 .TH ncurses 3X "" .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .de bP .IP \(bu 4 .. .ds n 5 .ds d @TERMINFO@ .SH NAME \fBncurses\fR \- CRT screen handling and optimization package .SH SYNOPSIS \fB#include \fR .br .SH DESCRIPTION The \fBncurses\fR library routines give the user a terminal-independent method of updating character screens with reasonable optimization. This implementation is \*(``new curses\*('' (ncurses) and is the approved replacement for 4.4BSD classic curses, which has been discontinued. This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). .PP The \fBncurses\fR library emulates the curses library of System V Release 4 UNIX, and XPG4 (X/Open Portability Guide) curses (also known as XSI curses). XSI stands for X/Open System Interfaces Extension. The \fBncurses\fR library is freely redistributable in source form. Differences from the SVr4 curses are summarized under the \fBEXTENSIONS\fP and \fBPORTABILITY\fP sections below and described in detail in the respective \fBEXTENSIONS\fP, \fBPORTABILITY\fP and \fBBUGS\fP sections of individual man pages. .PP The \fBncurses\fR library also provides many useful extensions, i.e., features which cannot be implemented by a simple add-on library but which require access to the internals of the library. .PP A program using these routines must be linked with the \fB\-lncurses\fR option, or (if it has been generated) with the debugging library \fB\-lncurses_g\fR. (Your system integrator may also have installed these libraries under the names \fB\-lcurses\fR and \fB\-lcurses_g\fR.) The ncurses_g library generates trace logs (in a file called 'trace' in the current directory) that describe curses actions. See also the section on \fBALTERNATE CONFIGURATIONS\fP. .PP The \fBncurses\fR package supports: overall screen, window and pad manipulation; output to windows and pads; reading terminal input; control over terminal and \fBcurses\fR input and output options; environment query routines; color manipulation; use of soft label keys; terminfo capabilities; and access to low-level terminal-manipulation routines. .SS Initialization .PP The library uses the locale which the calling program has initialized. That is normally done with \fBsetlocale\fP: .sp \fBsetlocale(LC_ALL, "");\fP .sp If the locale is not initialized, the library assumes that characters are printable as in ISO\-8859\-1, to work with certain legacy programs. You should initialize the locale and not rely on specific details of the library when the locale has not been setup. .PP The function \fBinitscr\fR or \fBnewterm\fR must be called to initialize the library before any of the other routines that deal with windows and screens are used. The routine \fBendwin\fR must be called before exiting. .PP To get character-at-a-time input without echoing (most interactive, screen oriented programs want this), the following sequence should be used: .sp \fBinitscr(); cbreak(); noecho();\fR .sp Most programs would additionally use the sequence: .sp \fBnonl();\fR \fBintrflush(stdscr, FALSE);\fR \fBkeypad(stdscr, TRUE);\fR .sp Before a \fBcurses\fR program is run, the tab stops of the terminal should be set and its initialization strings, if defined, must be output. This can be done by executing the \fB@TPUT@ init\fR command after the shell environment variable \fBTERM\fR has been exported. \fB@TSET@(1)\fR is usually responsible for doing this. [See \fBterminfo\fR(\*n) for further details.] .SS Datatypes .PP The \fBncurses\fR library permits manipulation of data structures, called \fIwindows\fR, which can be thought of as two-dimensional arrays of characters representing all or part of a CRT screen. A default window called \fBstdscr\fR, which is the size of the terminal screen, is supplied. Others may be created with \fBnewwin\fR. .PP Note that \fBcurses\fR does not handle overlapping windows, that's done by the \fBpanel\fR(3X) library. This means that you can either use \fBstdscr\fR or divide the screen into tiled windows and not using \fBstdscr\fR at all. Mixing the two will result in unpredictable, and undesired, effects. .PP Windows are referred to by variables declared as \fBWINDOW *\fR. These data structures are manipulated with routines described here and elsewhere in the \fBncurses\fR manual pages. Among those, the most basic routines are \fBmove\fR and \fBaddch\fR. More general versions of these routines are included with names beginning with \fBw\fR, allowing the user to specify a window. The routines not beginning with \fBw\fR affect \fBstdscr\fR. .PP After using routines to manipulate a window, \fBrefresh\fR is called, telling \fBcurses\fR to make the user's CRT screen look like \fBstdscr\fR. The characters in a window are actually of type \fBchtype\fR, (character and attribute data) so that other information about the character may also be stored with each character. .PP Special windows called \fIpads\fR may also be manipulated. These are windows which are not constrained to the size of the screen and whose contents need not be completely displayed. See \fBcurs_pad\fR(3X) for more information. .PP In addition to drawing characters on the screen, video attributes and colors may be supported, causing the characters to show up in such modes as underlined, in reverse video, or in color on terminals that support such display enhancements. Line drawing characters may be specified to be output. On input, \fBcurses\fR is also able to translate arrow and function keys that transmit escape sequences into single values. The video attributes, line drawing characters, and input values use names, defined in \fB\fR, such as \fBA_REVERSE\fR, \fBACS_HLINE\fR, and \fBKEY_LEFT\fR. .SS Environment variables .PP If the environment variables \fBLINES\fR and \fBCOLUMNS\fR are set, or if the program is executing in a window environment, line and column information in the environment will override information read by \fIterminfo\fR. This would affect a program running in an AT&T 630 layer, for example, where the size of a screen is changeable (see \fBENVIRONMENT\fR). .PP If the environment variable \fBTERMINFO\fR is defined, any program using \fBcurses\fR checks for a local terminal definition before checking in the standard place. For example, if \fBTERM\fR is set to \fBatt4424\fR, then the compiled terminal definition is found in .sp \fB\*d/a/att4424\fR. .sp (The \fBa\fR is copied from the first letter of \fBatt4424\fR to avoid creation of huge directories.) However, if \fBTERMINFO\fR is set to \fB$HOME/myterms\fR, \fBcurses\fR first checks .sp \fB$HOME/myterms/a/att4424\fR, .sp and if that fails, it then checks .sp \fB\*d/a/att4424\fR. .sp This is useful for developing experimental definitions or when write permission in \fB\*d\fR is not available. .PP The integer variables \fBLINES\fR and \fBCOLS\fR are defined in \fB\fR and will be filled in by \fBinitscr\fR with the size of the screen. The constants \fBTRUE\fR and \fBFALSE\fR have the values \fB1\fR and \fB0\fR, respectively. .PP The \fBcurses\fR routines also define the \fBWINDOW *\fR variable \fBcurscr\fR which is used for certain low-level operations like clearing and redrawing a screen containing garbage. The \fBcurscr\fR can be used in only a few routines. .\" .SS Routine and Argument Names Many \fBcurses\fR routines have two or more versions. The routines prefixed with \fBw\fR require a window argument. The routines prefixed with \fBp\fR require a pad argument. Those without a prefix generally use \fBstdscr\fR. .PP The routines prefixed with \fBmv\fR require a \fIy\fR and \fIx\fR coordinate to move to before performing the appropriate action. The \fBmv\fR routines imply a call to \fBmove\fR before the call to the other routine. The coordinate \fIy\fR always refers to the row (of the window), and \fIx\fR always refers to the column. The upper left-hand corner is always (0,0), not (1,1). .PP The routines prefixed with \fBmvw\fR take both a window argument and \fIx\fR and \fIy\fR coordinates. The window argument is always specified before the coordinates. .PP In each case, \fIwin\fR is the window affected, and \fIpad\fR is the pad affected; \fIwin\fR and \fIpad\fR are always pointers to type \fBWINDOW\fR. .PP Option setting routines require a Boolean flag \fIbf\fR with the value \fBTRUE\fR or \fBFALSE\fR; \fIbf\fR is always of type \fBbool\fR. Most of the data types used in the library routines, such as \fBWINDOW\fR, \fBSCREEN\fR, \fBbool\fR, and \fBchtype\fR are defined in \fB\fR. Types used for the terminfo routines such as \fBTERMINAL\fR are defined in \fB\fR. .PP This manual page describes functions which may appear in any configuration of the library. There are two common configurations of the library: .RS 3 .TP 5 .I ncurses the "normal" library, which handles 8-bit characters. The normal (8-bit) library stores characters combined with attributes in \fBchtype\fP data. .IP Attributes alone (no corresponding character) may be stored in \fBchtype\fP or the equivalent \fBattr_t\fP data. In either case, the data is stored in something like an integer. .IP Each cell (row and column) in a \fBWINDOW\fP is stored as a \fBchtype\fP. .TP 5 .I ncursesw the so-called "wide" library, which handles multibyte characters (see the section on \fBALTERNATE CONFIGURATIONS\fP). The "wide" library includes all of the calls from the "normal" library. It adds about one third more calls using data types which store multibyte characters: .RS 5 .TP 5 .B cchar_t corresponds to \fBchtype\fP. However it is a structure, because more data is stored than can fit into an integer. The characters are large enough to require a full integer value \- and there may be more than one character per cell. The video attributes and color are stored in separate fields of the structure. .IP Each cell (row and column) in a \fBWINDOW\fP is stored as a \fBcchar_t\fP. .TP 5 .B wchar_t stores a "wide" character. Like \fBchtype\fP, this may be an integer. .TP 5 .B wint_t stores a \fBwchar_t\fP or \fBWEOF\fP \- not the same, though both may have the same size. .RE .IP The "wide" library provides new functions which are analogous to functions in the "normal" library. There is a naming convention which relates many of the normal/wide variants: a "_w" is inserted into the name. For example, \fBwaddch\fP becomes \fBwadd_wch\fP. .RE .PP .\" .SS Routine Name Index The following table lists each \fBcurses\fR routine and the name of the manual page on which it is described. Routines flagged with `*' are ncurses-specific, not described by XPG4 or present in SVr4. .PP .TS center tab(/); l l l l . \fBcurses\fR Routine Name/Manual Page Name = COLOR_PAIR/\fBcurs_color\fR(3X) PAIR_NUMBER/\fBcurs_attr\fR(3X) _nc_free_and_exit/\fBcurs_memleaks\fR(3X)* _nc_freeall/\fBcurs_memleaks\fR(3X)* _nc_tracebits/\fBcurs_trace\fR(3X)* _traceattr/\fBcurs_trace\fR(3X)* _traceattr2/\fBcurs_trace\fR(3X)* _tracechar/\fBcurs_trace\fR(3X)* _tracechtype/\fBcurs_trace\fR(3X)* _tracechtype2/\fBcurs_trace\fR(3X)* _tracedump/\fBcurs_trace\fR(3X)* _tracef/\fBcurs_trace\fR(3X)* _tracemouse/\fBcurs_trace\fR(3X)* add_wch/\fBcurs_add_wch\fR(3X) add_wchnstr/\fBcurs_add_wchstr\fR(3X) add_wchstr/\fBcurs_add_wchstr\fR(3X) addch/\fBcurs_addch\fR(3X) addchnstr/\fBcurs_addchstr\fR(3X) addchstr/\fBcurs_addchstr\fR(3X) addnstr/\fBcurs_addstr\fR(3X) addnwstr/\fBcurs_addwstr\fR(3X) addstr/\fBcurs_addstr\fR(3X) addwstr/\fBcurs_addwstr\fR(3X) assume_default_colors/\fBdefault_colors\fR(3X)* attr_get/\fBcurs_attr\fR(3X) attr_off/\fBcurs_attr\fR(3X) attr_on/\fBcurs_attr\fR(3X) attr_set/\fBcurs_attr\fR(3X) attroff/\fBcurs_attr\fR(3X) attron/\fBcurs_attr\fR(3X) attrset/\fBcurs_attr\fR(3X) baudrate/\fBcurs_termattrs\fR(3X) beep/\fBcurs_beep\fR(3X) bkgd/\fBcurs_bkgd\fR(3X) bkgdset/\fBcurs_bkgd\fR(3X) bkgrnd/\fBcurs_bkgrnd\fR(3X) bkgrndset/\fBcurs_bkgrnd\fR(3X) border/\fBcurs_border\fR(3X) border_set/\fBcurs_border_set\fR(3X) box/\fBcurs_border\fR(3X) box_set/\fBcurs_border_set\fR(3X) can_change_color/\fBcurs_color\fR(3X) cbreak/\fBcurs_inopts\fR(3X) chgat/\fBcurs_attr\fR(3X) clear/\fBcurs_clear\fR(3X) clearok/\fBcurs_outopts\fR(3X) clrtobot/\fBcurs_clear\fR(3X) clrtoeol/\fBcurs_clear\fR(3X) color_content/\fBcurs_color\fR(3X) color_set/\fBcurs_attr\fR(3X) copywin/\fBcurs_overlay\fR(3X) curs_set/\fBcurs_kernel\fR(3X) curses_version/\fBcurs_extend\fR(3X)* def_prog_mode/\fBcurs_kernel\fR(3X) def_shell_mode/\fBcurs_kernel\fR(3X) define_key/\fBdefine_key\fR(3X)* del_curterm/\fBcurs_terminfo\fR(3X) delay_output/\fBcurs_util\fR(3X) delch/\fBcurs_delch\fR(3X) deleteln/\fBcurs_deleteln\fR(3X) delscreen/\fBcurs_initscr\fR(3X) delwin/\fBcurs_window\fR(3X) derwin/\fBcurs_window\fR(3X) doupdate/\fBcurs_refresh\fR(3X) dupwin/\fBcurs_window\fR(3X) echo/\fBcurs_inopts\fR(3X) echo_wchar/\fBcurs_add_wch\fR(3X) echochar/\fBcurs_addch\fR(3X) endwin/\fBcurs_initscr\fR(3X) erase/\fBcurs_clear\fR(3X) erasechar/\fBcurs_termattrs\fR(3X) erasewchar/\fBcurs_termattrs\fR(3X) filter/\fBcurs_util\fR(3X) flash/\fBcurs_beep\fR(3X) flushinp/\fBcurs_util\fR(3X) get_wch/\fBcurs_get_wch\fR(3X) get_wstr/\fBcurs_get_wstr\fR(3X) getattrs/\fBcurs_attr\fR(3X) getbegx/\fBcurs_legacy\fR(3X)* getbegy/\fBcurs_legacy\fR(3X)* getbegyx/\fBcurs_getyx\fR(3X) getbkgd/\fBcurs_bkgd\fR(3X) getbkgrnd/\fBcurs_bkgrnd\fR(3X) getcchar/\fBcurs_getcchar\fR(3X) getch/\fBcurs_getch\fR(3X) getcurx/\fBcurs_legacy\fR(3X)* getcury/\fBcurs_legacy\fR(3X)* getmaxx/\fBcurs_legacy\fR(3X)* getmaxy/\fBcurs_legacy\fR(3X)* getmaxyx/\fBcurs_getyx\fR(3X) getmouse/\fBcurs_mouse\fR(3X)* getn_wstr/\fBcurs_get_wstr\fR(3X) getnstr/\fBcurs_getstr\fR(3X) getparx/\fBcurs_legacy\fR(3X)* getpary/\fBcurs_legacy\fR(3X)* getparyx/\fBcurs_getyx\fR(3X) getstr/\fBcurs_getstr\fR(3X) getsyx/\fBcurs_kernel\fR(3X) getwin/\fBcurs_util\fR(3X) getyx/\fBcurs_getyx\fR(3X) halfdelay/\fBcurs_inopts\fR(3X) has_colors/\fBcurs_color\fR(3X) has_ic/\fBcurs_termattrs\fR(3X) has_il/\fBcurs_termattrs\fR(3X) has_key/\fBcurs_getch\fR(3X)* hline/\fBcurs_border\fR(3X) hline_set/\fBcurs_border_set\fR(3X) idcok/\fBcurs_outopts\fR(3X) idlok/\fBcurs_outopts\fR(3X) immedok/\fBcurs_outopts\fR(3X) in_wch/\fBcurs_in_wch\fR(3X) in_wchnstr/\fBcurs_in_wchstr\fR(3X) in_wchstr/\fBcurs_in_wchstr\fR(3X) inch/\fBcurs_inch\fR(3X) inchnstr/\fBcurs_inchstr\fR(3X) inchstr/\fBcurs_inchstr\fR(3X) init_color/\fBcurs_color\fR(3X) init_pair/\fBcurs_color\fR(3X) initscr/\fBcurs_initscr\fR(3X) innstr/\fBcurs_instr\fR(3X) innwstr/\fBcurs_inwstr\fR(3X) ins_nwstr/\fBcurs_ins_wstr\fR(3X) ins_wch/\fBcurs_ins_wch\fR(3X) ins_wstr/\fBcurs_ins_wstr\fR(3X) insch/\fBcurs_insch\fR(3X) insdelln/\fBcurs_deleteln\fR(3X) insertln/\fBcurs_deleteln\fR(3X) insnstr/\fBcurs_insstr\fR(3X) insstr/\fBcurs_insstr\fR(3X) instr/\fBcurs_instr\fR(3X) intrflush/\fBcurs_inopts\fR(3X) inwstr/\fBcurs_inwstr\fR(3X) is_cleared/\fBcurs_opaque\fR(3X)* is_idcok/\fBcurs_opaque\fR(3X)* is_idlok/\fBcurs_opaque\fR(3X)* is_immedok/\fBcurs_opaque\fR(3X)* is_keypad/\fBcurs_opaque\fR(3X)* is_leaveok/\fBcurs_opaque\fR(3X)* is_linetouched/\fBcurs_touch\fR(3X) is_nodelay/\fBcurs_opaque\fR(3X)* is_notimeout/\fBcurs_opaque\fR(3X)* is_pad/\fBcurs_opaque\fR(3X)* is_scrollok/\fBcurs_opaque\fR(3X)* is_subwin/\fBcurs_opaque\fR(3X)* is_syncok/\fBcurs_opaque\fR(3X)* is_term_resized/\fBresizeterm\fR(3X)* is_wintouched/\fBcurs_touch\fR(3X) isendwin/\fBcurs_initscr\fR(3X) key_defined/\fBkey_defined\fR(3X)* key_name/\fBcurs_util\fR(3X) keybound/\fBkeybound\fR(3X)* keyname/\fBcurs_util\fR(3X) keyok/\fBkeyok\fR(3X)* keypad/\fBcurs_inopts\fR(3X) killchar/\fBcurs_termattrs\fR(3X) killwchar/\fBcurs_termattrs\fR(3X) leaveok/\fBcurs_outopts\fR(3X) longname/\fBcurs_termattrs\fR(3X) mcprint/\fBcurs_print\fR(3X)* meta/\fBcurs_inopts\fR(3X) mouse_trafo/\fBcurs_mouse\fR(3X)* mouseinterval/\fBcurs_mouse\fR(3X)* mousemask/\fBcurs_mouse\fR(3X)* move/\fBcurs_move\fR(3X) mvadd_wch/\fBcurs_add_wch\fR(3X) mvadd_wchnstr/\fBcurs_add_wchstr\fR(3X) mvadd_wchstr/\fBcurs_add_wchstr\fR(3X) mvaddch/\fBcurs_addch\fR(3X) mvaddchnstr/\fBcurs_addchstr\fR(3X) mvaddchstr/\fBcurs_addchstr\fR(3X) mvaddnstr/\fBcurs_addstr\fR(3X) mvaddnwstr/\fBcurs_addwstr\fR(3X) mvaddstr/\fBcurs_addstr\fR(3X) mvaddwstr/\fBcurs_addwstr\fR(3X) mvchgat/\fBcurs_attr\fR(3X) mvcur/\fBcurs_terminfo\fR(3X) mvdelch/\fBcurs_delch\fR(3X) mvderwin/\fBcurs_window\fR(3X) mvget_wch/\fBcurs_get_wch\fR(3X) mvget_wstr/\fBcurs_get_wstr\fR(3X) mvgetch/\fBcurs_getch\fR(3X) mvgetn_wstr/\fBcurs_get_wstr\fR(3X) mvgetnstr/\fBcurs_getstr\fR(3X) mvgetstr/\fBcurs_getstr\fR(3X) mvhline/\fBcurs_border\fR(3X) mvhline_set/\fBcurs_border_set\fR(3X) mvin_wch/\fBcurs_in_wch\fR(3X) mvin_wchnstr/\fBcurs_in_wchstr\fR(3X) mvin_wchstr/\fBcurs_in_wchstr\fR(3X) mvinch/\fBcurs_inch\fR(3X) mvinchnstr/\fBcurs_inchstr\fR(3X) mvinchstr/\fBcurs_inchstr\fR(3X) mvinnstr/\fBcurs_instr\fR(3X) mvinnwstr/\fBcurs_inwstr\fR(3X) mvins_nwstr/\fBcurs_ins_wstr\fR(3X) mvins_wch/\fBcurs_ins_wch\fR(3X) mvins_wstr/\fBcurs_ins_wstr\fR(3X) mvinsch/\fBcurs_insch\fR(3X) mvinsnstr/\fBcurs_insstr\fR(3X) mvinsstr/\fBcurs_insstr\fR(3X) mvinstr/\fBcurs_instr\fR(3X) mvinwstr/\fBcurs_inwstr\fR(3X) mvprintw/\fBcurs_printw\fR(3X) mvscanw/\fBcurs_scanw\fR(3X) mvvline/\fBcurs_border\fR(3X) mvvline_set/\fBcurs_border_set\fR(3X) mvwadd_wch/\fBcurs_add_wch\fR(3X) mvwadd_wchnstr/\fBcurs_add_wchstr\fR(3X) mvwadd_wchstr/\fBcurs_add_wchstr\fR(3X) mvwaddch/\fBcurs_addch\fR(3X) mvwaddchnstr/\fBcurs_addchstr\fR(3X) mvwaddchstr/\fBcurs_addchstr\fR(3X) mvwaddnstr/\fBcurs_addstr\fR(3X) mvwaddnwstr/\fBcurs_addwstr\fR(3X) mvwaddstr/\fBcurs_addstr\fR(3X) mvwaddwstr/\fBcurs_addwstr\fR(3X) mvwchgat/\fBcurs_attr\fR(3X) mvwdelch/\fBcurs_delch\fR(3X) mvwget_wch/\fBcurs_get_wch\fR(3X) mvwget_wstr/\fBcurs_get_wstr\fR(3X) mvwgetch/\fBcurs_getch\fR(3X) mvwgetn_wstr/\fBcurs_get_wstr\fR(3X) mvwgetnstr/\fBcurs_getstr\fR(3X) mvwgetstr/\fBcurs_getstr\fR(3X) mvwhline/\fBcurs_border\fR(3X) mvwhline_set/\fBcurs_border_set\fR(3X) mvwin/\fBcurs_window\fR(3X) mvwin_wch/\fBcurs_in_wch\fR(3X) mvwin_wchnstr/\fBcurs_in_wchstr\fR(3X) mvwin_wchstr/\fBcurs_in_wchstr\fR(3X) mvwinch/\fBcurs_inch\fR(3X) mvwinchnstr/\fBcurs_inchstr\fR(3X) mvwinchstr/\fBcurs_inchstr\fR(3X) mvwinnstr/\fBcurs_instr\fR(3X) mvwinnwstr/\fBcurs_inwstr\fR(3X) mvwins_nwstr/\fBcurs_ins_wstr\fR(3X) mvwins_wch/\fBcurs_ins_wch\fR(3X) mvwins_wstr/\fBcurs_ins_wstr\fR(3X) mvwinsch/\fBcurs_insch\fR(3X) mvwinsnstr/\fBcurs_insstr\fR(3X) mvwinsstr/\fBcurs_insstr\fR(3X) mvwinstr/\fBcurs_instr\fR(3X) mvwinwstr/\fBcurs_inwstr\fR(3X) mvwprintw/\fBcurs_printw\fR(3X) mvwscanw/\fBcurs_scanw\fR(3X) mvwvline/\fBcurs_border\fR(3X) mvwvline_set/\fBcurs_border_set\fR(3X) napms/\fBcurs_kernel\fR(3X) newpad/\fBcurs_pad\fR(3X) newterm/\fBcurs_initscr\fR(3X) newwin/\fBcurs_window\fR(3X) nl/\fBcurs_outopts\fR(3X) nocbreak/\fBcurs_inopts\fR(3X) nodelay/\fBcurs_inopts\fR(3X) noecho/\fBcurs_inopts\fR(3X) nofilter/\fBcurs_util\fR(3X)* nonl/\fBcurs_outopts\fR(3X) noqiflush/\fBcurs_inopts\fR(3X) noraw/\fBcurs_inopts\fR(3X) notimeout/\fBcurs_inopts\fR(3X) overlay/\fBcurs_overlay\fR(3X) overwrite/\fBcurs_overlay\fR(3X) pair_content/\fBcurs_color\fR(3X) pechochar/\fBcurs_pad\fR(3X) pnoutrefresh/\fBcurs_pad\fR(3X) prefresh/\fBcurs_pad\fR(3X) printw/\fBcurs_printw\fR(3X) putp/\fBcurs_terminfo\fR(3X) putwin/\fBcurs_util\fR(3X) qiflush/\fBcurs_inopts\fR(3X) raw/\fBcurs_inopts\fR(3X) redrawwin/\fBcurs_refresh\fR(3X) refresh/\fBcurs_refresh\fR(3X) reset_prog_mode/\fBcurs_kernel\fR(3X) reset_shell_mode/\fBcurs_kernel\fR(3X) resetty/\fBcurs_kernel\fR(3X) resize_term/\fBresizeterm\fR(3X)* resizeterm/\fBresizeterm\fR(3X)* restartterm/\fBcurs_terminfo\fR(3X) ripoffline/\fBcurs_kernel\fR(3X) savetty/\fBcurs_kernel\fR(3X) scanw/\fBcurs_scanw\fR(3X) scr_dump/\fBcurs_scr_dump\fR(3X) scr_init/\fBcurs_scr_dump\fR(3X) scr_restore/\fBcurs_scr_dump\fR(3X) scr_set/\fBcurs_scr_dump\fR(3X) scrl/\fBcurs_scroll\fR(3X) scroll/\fBcurs_scroll\fR(3X) scrollok/\fBcurs_outopts\fR(3X) set_curterm/\fBcurs_terminfo\fR(3X) set_term/\fBcurs_initscr\fR(3X) setcchar/\fBcurs_getcchar\fR(3X) setscrreg/\fBcurs_outopts\fR(3X) setsyx/\fBcurs_kernel\fR(3X) setterm/\fBcurs_terminfo\fR(3X) setupterm/\fBcurs_terminfo\fR(3X) slk_attr/\fBcurs_slk\fR(3X)* slk_attr_off/\fBcurs_slk\fR(3X) slk_attr_on/\fBcurs_slk\fR(3X) slk_attr_set/\fBcurs_slk\fR(3X) slk_attroff/\fBcurs_slk\fR(3X) slk_attron/\fBcurs_slk\fR(3X) slk_attrset/\fBcurs_slk\fR(3X) slk_clear/\fBcurs_slk\fR(3X) slk_color/\fBcurs_slk\fR(3X) slk_init/\fBcurs_slk\fR(3X) slk_label/\fBcurs_slk\fR(3X) slk_noutrefresh/\fBcurs_slk\fR(3X) slk_refresh/\fBcurs_slk\fR(3X) slk_restore/\fBcurs_slk\fR(3X) slk_set/\fBcurs_slk\fR(3X) slk_touch/\fBcurs_slk\fR(3X) standend/\fBcurs_attr\fR(3X) standout/\fBcurs_attr\fR(3X) start_color/\fBcurs_color\fR(3X) subpad/\fBcurs_pad\fR(3X) subwin/\fBcurs_window\fR(3X) syncok/\fBcurs_window\fR(3X) term_attrs/\fBcurs_termattrs\fR(3X) termattrs/\fBcurs_termattrs\fR(3X) termname/\fBcurs_termattrs\fR(3X) tgetent/\fBcurs_termcap\fR(3X) tgetflag/\fBcurs_termcap\fR(3X) tgetnum/\fBcurs_termcap\fR(3X) tgetstr/\fBcurs_termcap\fR(3X) tgoto/\fBcurs_termcap\fR(3X) tigetflag/\fBcurs_terminfo\fR(3X) tigetnum/\fBcurs_terminfo\fR(3X) tigetstr/\fBcurs_terminfo\fR(3X) tiparm/\fBcurs_terminfo\fR(3X)* timeout/\fBcurs_inopts\fR(3X) touchline/\fBcurs_touch\fR(3X) touchwin/\fBcurs_touch\fR(3X) tparm/\fBcurs_terminfo\fR(3X) tputs/\fBcurs_termcap\fR(3X) tputs/\fBcurs_terminfo\fR(3X) trace/\fBcurs_trace\fR(3X)* typeahead/\fBcurs_inopts\fR(3X) unctrl/\fBcurs_util\fR(3X) unget_wch/\fBcurs_get_wch\fR(3X) ungetch/\fBcurs_getch\fR(3X) ungetmouse/\fBcurs_mouse\fR(3X)* untouchwin/\fBcurs_touch\fR(3X) use_default_colors/\fBdefault_colors\fR(3X)* use_env/\fBcurs_util\fR(3X) use_extended_names/\fBcurs_extend\fR(3X)* use_legacy_coding/\fBlegacy_coding\fR(3X)* use_tioctl/\fBcurs_util\fR(3X) vid_attr/\fBcurs_terminfo\fR(3X) vid_puts/\fBcurs_terminfo\fR(3X) vidattr/\fBcurs_terminfo\fR(3X) vidputs/\fBcurs_terminfo\fR(3X) vline/\fBcurs_border\fR(3X) vline_set/\fBcurs_border_set\fR(3X) vw_printw/\fBcurs_printw\fR(3X) vw_scanw/\fBcurs_scanw\fR(3X) vwprintw/\fBcurs_printw\fR(3X) vwscanw/\fBcurs_scanw\fR(3X) wadd_wch/\fBcurs_add_wch\fR(3X) wadd_wchnstr/\fBcurs_add_wchstr\fR(3X) wadd_wchstr/\fBcurs_add_wchstr\fR(3X) waddch/\fBcurs_addch\fR(3X) waddchnstr/\fBcurs_addchstr\fR(3X) waddchstr/\fBcurs_addchstr\fR(3X) waddnstr/\fBcurs_addstr\fR(3X) waddnwstr/\fBcurs_addwstr\fR(3X) waddstr/\fBcurs_addstr\fR(3X) waddwstr/\fBcurs_addwstr\fR(3X) wattr_get/\fBcurs_attr\fR(3X) wattr_off/\fBcurs_attr\fR(3X) wattr_on/\fBcurs_attr\fR(3X) wattr_set/\fBcurs_attr\fR(3X) wattroff/\fBcurs_attr\fR(3X) wattron/\fBcurs_attr\fR(3X) wattrset/\fBcurs_attr\fR(3X) wbkgd/\fBcurs_bkgd\fR(3X) wbkgdset/\fBcurs_bkgd\fR(3X) wbkgrnd/\fBcurs_bkgrnd\fR(3X) wbkgrndset/\fBcurs_bkgrnd\fR(3X) wborder/\fBcurs_border\fR(3X) wborder_set/\fBcurs_border_set\fR(3X) wchgat/\fBcurs_attr\fR(3X) wclear/\fBcurs_clear\fR(3X) wclrtobot/\fBcurs_clear\fR(3X) wclrtoeol/\fBcurs_clear\fR(3X) wcolor_set/\fBcurs_attr\fR(3X) wcursyncup/\fBcurs_window\fR(3X) wdelch/\fBcurs_delch\fR(3X) wdeleteln/\fBcurs_deleteln\fR(3X) wecho_wchar/\fBcurs_add_wch\fR(3X) wechochar/\fBcurs_addch\fR(3X) wenclose/\fBcurs_mouse\fR(3X)* werase/\fBcurs_clear\fR(3X) wget_wch/\fBcurs_get_wch\fR(3X) wget_wstr/\fBcurs_get_wstr\fR(3X) wgetbkgrnd/\fBcurs_bkgrnd\fR(3X) wgetch/\fBcurs_getch\fR(3X) wgetdelay/\fBcurs_opaque\fR(3X)* wgetn_wstr/\fBcurs_get_wstr\fR(3X) wgetnstr/\fBcurs_getstr\fR(3X) wgetparent/\fBcurs_opaque\fR(3X)* wgetscrreg/\fBcurs_opaque\fR(3X)* wgetstr/\fBcurs_getstr\fR(3X) whline/\fBcurs_border\fR(3X) whline_set/\fBcurs_border_set\fR(3X) win_wch/\fBcurs_in_wch\fR(3X) win_wchnstr/\fBcurs_in_wchstr\fR(3X) win_wchstr/\fBcurs_in_wchstr\fR(3X) winch/\fBcurs_inch\fR(3X) winchnstr/\fBcurs_inchstr\fR(3X) winchstr/\fBcurs_inchstr\fR(3X) winnstr/\fBcurs_instr\fR(3X) winnwstr/\fBcurs_inwstr\fR(3X) wins_nwstr/\fBcurs_ins_wstr\fR(3X) wins_wch/\fBcurs_ins_wch\fR(3X) wins_wstr/\fBcurs_ins_wstr\fR(3X) winsch/\fBcurs_insch\fR(3X) winsdelln/\fBcurs_deleteln\fR(3X) winsertln/\fBcurs_deleteln\fR(3X) winsnstr/\fBcurs_insstr\fR(3X) winsstr/\fBcurs_insstr\fR(3X) winstr/\fBcurs_instr\fR(3X) winwstr/\fBcurs_inwstr\fR(3X) wmouse_trafo/\fBcurs_mouse\fR(3X)* wmove/\fBcurs_move\fR(3X) wnoutrefresh/\fBcurs_refresh\fR(3X) wprintw/\fBcurs_printw\fR(3X) wredrawln/\fBcurs_refresh\fR(3X) wrefresh/\fBcurs_refresh\fR(3X) wresize/\fBwresize\fR(3X)* wscanw/\fBcurs_scanw\fR(3X) wscrl/\fBcurs_scroll\fR(3X) wsetscrreg/\fBcurs_outopts\fR(3X) wstandend/\fBcurs_attr\fR(3X) wstandout/\fBcurs_attr\fR(3X) wsyncdown/\fBcurs_window\fR(3X) wsyncup/\fBcurs_window\fR(3X) wtimeout/\fBcurs_inopts\fR(3X) wtouchln/\fBcurs_touch\fR(3X) wunctrl/\fBcurs_util\fR(3X) wvline/\fBcurs_border\fR(3X) wvline_set/\fBcurs_border_set\fR(3X) .TE .SH RETURN VALUE Routines that return an integer return \fBERR\fR upon failure and an integer value other than \fBERR\fR upon successful completion, unless otherwise noted in the routine descriptions. .PP As a general rule, routines check for null pointers passed as parameters, and handle this as an error. .PP All macros return the value of the \fBw\fR version, except \fBsetscrreg\fR, \fBwsetscrreg\fR, \fBgetyx\fR, \fBgetbegyx\fR, and \fBgetmaxyx\fR. The return values of \fBsetscrreg\fR, \fBwsetscrreg\fR, \fBgetyx\fR, \fBgetbegyx\fR, and \fBgetmaxyx\fR are undefined (i.e., these should not be used as the right-hand side of assignment statements). .PP Routines that return pointers return \fBNULL\fR on error. .SH ENVIRONMENT The following environment symbols are useful for customizing the runtime behavior of the \fBncurses\fR library. The most important ones have been already discussed in detail. .SS CC When set, change occurrences of the command_character (i.e., the \fBcmdch\fP capability) of the loaded terminfo entries to the value of this variable. Very few terminfo entries provide this feature. .PP Because this name is also used in development environments to represent the C compiler's name, \fBncurses\fR ignores it if it does not happen to be a single character. .SS BAUDRATE The debugging library checks this environment variable when the application has redirected output to a file. The variable's numeric value is used for the baudrate. If no value is found, \fBncurses\fR uses 9600. This allows testers to construct repeatable test-cases that take into account costs that depend on baudrate. .SS COLUMNS Specify the width of the screen in characters. Applications running in a windowing environment usually are able to obtain the width of the window in which they are executing. If neither the \fBCOLUMNS\fP value nor the terminal's screen size is available, \fBncurses\fR uses the size which may be specified in the terminfo database (i.e., the \fBcols\fR capability). .PP It is important that your application use a correct size for the screen. This is not always possible because your application may be running on a host which does not honor NAWS (Negotiations About Window Size), or because you are temporarily running as another user. However, setting \fBCOLUMNS\fP and/or \fBLINES\fP overrides the library's use of the screen size obtained from the operating system. .PP Either \fBCOLUMNS\fP or \fBLINES\fP symbols may be specified independently. This is mainly useful to circumvent legacy misfeatures of terminal descriptions, e.g., xterm which commonly specifies a 65 line screen. For best results, \fBlines\fR and \fBcols\fR should not be specified in a terminal description for terminals which are run as emulations. .PP Use the \fBuse_env\fR function to disable all use of external environment (but not including system calls) to determine the screen size. Use the \fBuse_tioctl\fR function to update \fBCOLUMNS\fP or \fBLINES\fP to match the screen size obtained from system calls or the terminal database. .SS ESCDELAY Specifies the total time, in milliseconds, for which ncurses will await a character sequence, e.g., a function key. The default value, 1000 milliseconds, is enough for most uses. However, it is made a variable to accommodate unusual applications. .PP The most common instance where you may wish to change this value is to work with slow hosts, e.g., running on a network. If the host cannot read characters rapidly enough, it will have the same effect as if the terminal did not send characters rapidly enough. The library will still see a timeout. .PP Note that xterm mouse events are built up from character sequences received from the xterm. If your application makes heavy use of multiple-clicking, you may wish to lengthen this default value because the timeout applies to the composed multi-click event as well as the individual clicks. .PP In addition to the environment variable, this implementation provides a global variable with the same name. Portable applications should not rely upon the presence of ESCDELAY in either form, but setting the environment variable rather than the global variable does not create problems when compiling an application. .SS HOME Tells \fBncurses\fR where your home directory is. That is where it may read and write auxiliary terminal descriptions: .PP $HOME/.termcap .br $HOME/.terminfo .SS LINES Like COLUMNS, specify the height of the screen in characters. See COLUMNS for a detailed description. .SS MOUSE_BUTTONS_123 This applies only to the OS/2 EMX port. It specifies the order of buttons on the mouse. OS/2 numbers a 3-button mouse inconsistently from other platforms: .sp 1 = left .br 2 = right .br 3 = middle. .sp This variable lets you customize the mouse. The variable must be three numeric digits 1\-3 in any order, e.g., 123 or 321. If it is not specified, \fBncurses\fR uses 132. .SS NCURSES_ASSUMED_COLORS Override the compiled-in assumption that the terminal's default colors are white-on-black (see \fBdefault_colors\fR(3X)). You may set the foreground and background color values with this environment variable by proving a 2-element list: foreground,background. For example, to tell ncurses to not assume anything about the colors, set this to "\-1,\-1". To make it green-on-black, set it to "2,0". Any positive value from zero to the terminfo \fBmax_colors\fR value is allowed. .SS NCURSES_CONSOLE2 This applies only to the MinGW port of ncurses. .PP The \fBConsole2\fP program's handling of the Microsoft Console API call \fBCreateConsoleScreenBuffer\fP is defective. Applications which use this will hang. However, it is possible to simulate the action of this call by mapping coordinates, explicitly saving and restoring the original screen contents. Setting the environment variable \fBNCGDB\fP has the same effect. .SS NCURSES_GPM_TERMS This applies only to ncurses configured to use the GPM interface. .PP If present, the environment variable is a list of one or more terminal names against which the TERM environment variable is matched. Setting it to an empty value disables the GPM interface; using the built-in support for xterm, etc. .PP If the environment variable is absent, ncurses will attempt to open GPM if TERM contains "linux". .SS NCURSES_NO_HARD_TABS \fBNcurses\fP may use tabs as part of the cursor movement optimization. In some cases, your terminal driver may not handle these properly. Set this environment variable to disable the feature. You can also adjust your \fBstty\fP settings to avoid the problem. NCURSES_NO_MAGIC_COOKIE Some terminals use a magic-cookie feature which requires special handling to make highlighting and other video attributes display properly. You can suppress the highlighting entirely for these terminals by setting this environment variable. .SS NCURSES_NO_PADDING Most of the terminal descriptions in the terminfo database are written for real "hardware" terminals. Many people use terminal emulators which run in a windowing environment and use curses-based applications. Terminal emulators can duplicate all of the important aspects of a hardware terminal, but they do not have the same limitations. The chief limitation of a hardware terminal from the standpoint of your application is the management of dataflow, i.e., timing. Unless a hardware terminal is interfaced into a terminal concentrator (which does flow control), it (or your application) must manage dataflow, preventing overruns. The cheapest solution (no hardware cost) is for your program to do this by pausing after operations that the terminal does slowly, such as clearing the display. .PP As a result, many terminal descriptions (including the vt100) have delay times embedded. You may wish to use these descriptions, but not want to pay the performance penalty. .PP Set the NCURSES_NO_PADDING environment variable to disable all but mandatory padding. Mandatory padding is used as a part of special control sequences such as \fIflash\fR. .SS NCURSES_NO_SETBUF This setting is obsolete. Before changes .RS 3 .bP started with 5.9 patch 20120825 and .bP continued though 5.9 patch 20130126 .RE .PP \fBncurses\fR enabled buffered output during terminal initialization. This was done (as in SVr4 curses) for performance reasons. For testing purposes, both of \fBncurses\fR and certain applications, this feature was made optional. Setting the NCURSES_NO_SETBUF variable disabled output buffering, leaving the output in the original (usually line buffered) mode. .PP In the current implementation, ncurses performs its own buffering and does not require this workaround. It does not modify the buffering of the standard output. .PP The reason for the change was to make the behavior for interrupts and other signals more robust. One drawback is that certain nonconventional programs would mix ordinary stdio calls with ncurses calls and (usually) work. This is no longer possible since ncurses is not using the buffered standard output but its own output (to the same file descriptor). As a special case, the low-level calls such as \fBputp\fP still use the standard output. But high-level curses calls do not. .SS NCURSES_NO_UTF8_ACS During initialization, the \fBncurses\fR library checks for special cases where VT100 line-drawing (and the corresponding alternate character set capabilities) described in the terminfo are known to be missing. Specifically, when running in a UTF\-8 locale, the Linux console emulator and the GNU screen program ignore these. Ncurses checks the TERM environment variable for these. For other special cases, you should set this environment variable. Doing this tells ncurses to use Unicode values which correspond to the VT100 line-drawing glyphs. That works for the special cases cited, and is likely to work for terminal emulators. .PP When setting this variable, you should set it to a nonzero value. Setting it to zero (or to a nonnumber) disables the special check for "linux" and "screen". .PP As an alternative to the environment variable, ncurses checks for an extended terminfo capability \fBU8\fP. This is a numeric capability which can be compiled using \fB@TIC@\ \-x\fP. For example .RS 3 .ft CW .sp .nf # linux console, if patched to provide working # VT100 shift-in/shift-out, with corresponding font. linux-vt100|linux console with VT100 line-graphics, U8#0, use=linux, .sp # uxterm with vt100Graphics resource set to false xterm-utf8|xterm relying on UTF-8 line-graphics, U8#1, use=xterm, .fi .ft .RE .PP The name "U8" is chosen to be two characters, to permit it to be used by applications that use ncurses' termcap interface. .SS NCURSES_TRACE During initialization, the \fBncurses\fR debugging library checks the NCURSES_TRACE environment variable. If it is defined, to a numeric value, \fBncurses\fR calls the \fBtrace\fR function, using that value as the argument. .PP The argument values, which are defined in \fBcurses.h\fR, provide several types of information. When running with traces enabled, your application will write the file \fBtrace\fR to the current directory. .PP See \fBcurs_trace\fP(3X) for more information. .SS TERM Denotes your terminal type. Each terminal type is distinct, though many are similar. .PP \fBTERM\fP is commonly set by terminal emulators to help applications find a workable terminal description. Some of those choose a popular approximation, e.g., \*(``ansi\*('', \*(``vt100\*('', \*(``xterm\*('' rather than an exact fit. Not infrequently, your application will have problems with that approach, e.g., incorrect function-key definitions. .PP If you set \fBTERM\fP in your environment, it has no effect on the operation of the terminal emulator. It only affects the way applications work within the terminal. Likewise, as a general rule (\fBxterm\fP being a rare exception), terminal emulators which allow you to specify \fBTERM\fP as a parameter or configuration value do not change their behavior to match that setting. .SS TERMCAP If the \fBncurses\fR library has been configured with \fItermcap\fR support, \fBncurses\fR will check for a terminal's description in termcap form if it is not available in the terminfo database. .PP The TERMCAP environment variable contains either a terminal description (with newlines stripped out), or a file name telling where the information denoted by the TERM environment variable exists. In either case, setting it directs \fBncurses\fR to ignore the usual place for this information, e.g., /etc/termcap. .SS TERMINFO Overrides the directory in which \fBncurses\fR searches for your terminal description. This is the simplest, but not the only way to change the list of directories. The complete list of directories in order follows: .RS 3 .bP the last directory to which \fBncurses\fR wrote, if any, is searched first .bP the directory specified by the TERMINFO environment variable .bP $HOME/.terminfo .bP directories listed in the TERMINFO_DIRS environment variable .bP one or more directories whose names are configured and compiled into the ncurses library, i.e., .RS 3 .bP @TERMINFO_DIRS@ (corresponding to the TERMINFO_DIRS variable) .bP @TERMINFO@ (corresponding to the TERMINFO variable) .RE .RE .SS TERMINFO_DIRS Specifies a list of directories to search for terminal descriptions. The list is separated by colons (i.e., ":") on Unix, semicolons on OS/2 EMX. .PP All of the terminal descriptions are in terminfo form. Normally these are stored in a directory tree, using subdirectories named by the first letter of the terminal names therein. .PP If \fBncurses\fP is built with a hashed database, then each entry in this list can also be the path of the corresponding database file. .PP If \fBncurses\fP is built with a support for reading termcap files directly, then an entry in this list may be the path of a termcap file. .SS TERMPATH If TERMCAP does not hold a file name then \fBncurses\fR checks the TERMPATH environment variable. This is a list of filenames separated by spaces or colons (i.e., ":") on Unix, semicolons on OS/2 EMX. .PP If the TERMPATH environment variable is not set, \fBncurses\fR looks in the files /etc/termcap, /usr/share/misc/termcap and $HOME/.termcap, in that order. .PP The library may be configured to disregard the following variables when the current user is the superuser (root), or if the application uses setuid or setgid permissions: .PP $TERMINFO, $TERMINFO_DIRS, $TERMPATH, as well as $HOME. .SH ALTERNATE CONFIGURATIONS Several different configurations are possible, depending on the configure script options used when building \fBncurses\fP. There are a few main options whose effects are visible to the applications developer using \fBncurses\fP: .TP 5 \-\-disable\-overwrite The standard include for \fBncurses\fP is as noted in \fBSYNOPSIS\fP: .RS 3 .sp \fB#include \fR .RE .IP This option is used to avoid filename conflicts when \fBncurses\fP is not the main implementation of curses of the computer. If \fBncurses\fP is installed disabling overwrite, it puts its headers in a subdirectory, e.g., .RS 3 .sp \fB#include \fR .RE .IP It also omits a symbolic link which would allow you to use \fB\-lcurses\fP to build executables. .TP 5 \-\-enable\-widec The configure script renames the library and (if the \fB\-\-disable\-overwrite\fP option is used) puts the header files in a different subdirectory. All of the library names have a "w" appended to them, i.e., instead of .RS 3 .sp \fB\-lncurses\fR .RE .IP you link with .RS 3 .sp \fB\-lncursesw\fR .RE .IP You must also define \fB_XOPEN_SOURCE_EXTENDED\fP when compiling for the wide-character library to use the extended (wide-character) functions. The \fBcurses.h\fP file which is installed for the wide-character library is designed to be compatible with the normal library's header. Only the size of the \fBWINDOW\fP structure differs, and very few applications require more than a pointer to \fBWINDOW\fPs. If the headers are installed allowing overwrite, the wide-character library's headers should be installed last, to allow applications to be built using either library from the same set of headers. .TP 5 \-\-with\-pthread The configure script renames the library. All of the library names have a "t" appended to them (before any "w" added by \fB\-\-enable\-widec\fP). .IP The global variables such as \fBLINES\fP are replaced by macros to allow read-only access. At the same time, setter-functions are provided to set these values. Some applications (very few) may require changes to work with this convention. .TP 5 \-\-with\-shared .TP \-\-with\-normal .TP \-\-with\-debug .TP \-\-with\-profile The shared and normal (static) library names differ by their suffixes, e.g., \fBlibncurses.so\fP and \fBlibncurses.a\fP. The debug and profiling libraries add a "_g" and a "_p" to the root names respectively, e.g., \fBlibncurses_g.a\fP and \fBlibncurses_p.a\fP. .TP 5 \-\-with\-trace The \fBtrace\fP function normally resides in the debug library, but it is sometimes useful to configure this in the shared library. Configure scripts should check for the function's existence rather than assuming it is always in the debug library. .SH FILES .TP 5 @DATADIR@/tabset directory containing initialization files for the terminal capability database @TERMINFO@ terminal capability database .SH SEE ALSO \fBterminfo\fR(\*n) and related pages whose names begin "curs_" for detailed routine descriptions. .br \fBcurs_variables\fR(3X) .SH EXTENSIONS The \fBncurses\fR library can be compiled with an option (\fB\-DUSE_GETCAP\fR) that falls back to the old-style /etc/termcap file if the terminal setup code cannot find a terminfo entry corresponding to \fBTERM\fR. Use of this feature is not recommended, as it essentially includes an entire termcap compiler in the \fBncurses\fR startup code, at significant cost in core and startup cycles. .PP The \fBncurses\fR library includes facilities for capturing mouse events on certain terminals (including xterm). See the \fBcurs_mouse\fR(3X) manual page for details. .PP The \fBncurses\fR library includes facilities for responding to window resizing events, e.g., when running in an xterm. See the \fBresizeterm\fR(3X) and \fBwresize\fR(3X) manual pages for details. In addition, the library may be configured with a SIGWINCH handler. .PP The \fBncurses\fR library extends the fixed set of function key capabilities of terminals by allowing the application designer to define additional key sequences at runtime. See the \fBdefine_key\fR(3X) \fBkey_defined\fR(3X), and \fBkeyok\fR(3X) manual pages for details. .PP The \fBncurses\fR library can exploit the capabilities of terminals which implement the ISO\-6429 SGR 39 and SGR 49 controls, which allow an application to reset the terminal to its original foreground and background colors. From the users' perspective, the application is able to draw colored text on a background whose color is set independently, providing better control over color contrasts. See the \fBdefault_colors\fR(3X) manual page for details. .PP The \fBncurses\fR library includes a function for directing application output to a printer attached to the terminal device. See the \fBcurs_print\fR(3X) manual page for details. .SH PORTABILITY The \fBncurses\fR library is intended to be BASE-level conformant with XSI Curses. The EXTENDED XSI Curses functionality (including color support) is supported. .PP A small number of local differences (that is, individual differences between the XSI Curses and \fBncurses\fR calls) are described in \fBPORTABILITY\fR sections of the library man pages. .PP Unlike other implementations, this one checks parameters such as pointers to WINDOW structures to ensure they are not null. The main reason for providing this behavior is to guard against programmer error. The standard interface does not provide a way for the library to tell an application which of several possible errors were detected. Relying on this (or some other) extension will adversely affect the portability of curses applications. .PP This implementation also contains several extensions: .bP The routine \fBhas_key\fR is not part of XPG4, nor is it present in SVr4. See the \fBcurs_getch\fR(3X) manual page for details. .bP The routine \fBslk_attr\fR is not part of XPG4, nor is it present in SVr4. See the \fBcurs_slk\fR(3X) manual page for details. .bP The routines \fBgetmouse\fR, \fBmousemask\fR, \fBungetmouse\fR, \fBmouseinterval\fR, and \fBwenclose\fR relating to mouse interfacing are not part of XPG4, nor are they present in SVr4. See the \fBcurs_mouse\fR(3X) manual page for details. .bP The routine \fBmcprint\fR was not present in any previous curses implementation. See the \fBcurs_print\fR(3X) manual page for details. .bP The routine \fBwresize\fR is not part of XPG4, nor is it present in SVr4. See the \fBwresize\fR(3X) manual page for details. .bP The WINDOW structure's internal details can be hidden from application programs. See \fBcurs_opaque\fR(3X) for the discussion of \fBis_scrollok\fR, etc. .bP This implementation can be configured to provide rudimentary support for multi-threaded applications. See \fBcurs_threads\fR(3X) for details. .bP This implementation can also be configured to provide a set of functions which improve the ability to manage multiple screens. See \fBcurs_sp_funcs\fR(3X) for details. .PP In historic curses versions, delays embedded in the capabilities \fBcr\fR, \fBind\fR, \fBcub1\fR, \fBff\fR and \fBtab\fR activated corresponding delay bits in the UNIX tty driver. In this implementation, all padding is done by sending NUL bytes. This method is slightly more expensive, but narrows the interface to the UNIX kernel significantly and increases the package's portability correspondingly. .SH NOTES The header file \fB\fR automatically includes the header files \fB\fR and \fB\fR. .PP If standard output from a \fBncurses\fR program is re-directed to something which is not a tty, screen updates will be directed to standard error. This was an undocumented feature of AT&T System V Release 3 curses. .SH AUTHORS Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey. Based on pcurses by Pavel Curtis. ncurses-6.0-20160213/man/curs_termcap.3x0000644000175100001440000002231212517033006016167 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_termcap.3x,v 1.31 2015/04/26 00:49:10 tom Exp $ .TH curs_termcap 3X "" .de bP .IP \(bu 4 .. .na .hy 0 .ds n 5 .SH NAME \fBPC\fR, \fBUP\fR, \fBBC\fR, \fBospeed\fR, \fBtgetent\fR, \fBtgetflag\fR, \fBtgetnum\fR, \fBtgetstr\fR, \fBtgoto\fR, \fBtputs\fR \- direct \fBcurses\fR interface to the terminfo capability database .ad .hy .SH SYNOPSIS \fB#include \fR .br \fB#include \fR .sp \fBextern char PC;\fR .br \fBextern char * UP;\fR .br \fBextern char * BC;\fR .br \fBextern @NCURSES_OSPEED@ ospeed;\fR .sp \fBint tgetent(char *bp, const char *name);\fR .br \fBint tgetflag(char *id);\fR .br \fBint tgetnum(char *id);\fR .br \fBchar *tgetstr(char *id, char **area);\fR .br \fBchar *tgoto(const char *cap, int col, int row);\fR .br \fBint tputs(const char *str, int affcnt, int (*putc)(int));\fR .br .SH DESCRIPTION These routines are included as a conversion aid for programs that use the \fItermcap\fR library. Their parameters are the same and the routines are emulated using the \fIterminfo\fR database. Thus, they can only be used to query the capabilities of entries for which a terminfo entry has been compiled. .SS INITIALIZATION .PP The \fBtgetent\fR routine loads the entry for \fIname\fR. It returns: .RS 3 .TP 3 1 on success, .TP 3 0 if there is no such entry (or that it is a generic type, having too little information for curses applications to run), and .TP 3 \-1 if the terminfo database could not be found. .RE .PP This differs from the \fItermcap\fP library in two ways: .RS 3 .bP The emulation ignores the buffer pointer \fIbp\fR. The \fItermcap\fP library would store a copy of the terminal description in the area referenced by this pointer. However, ncurses stores its terminal descriptions in compiled binary form, which is not the same thing. .bP There is a difference in return codes. The \fItermcap\fP library does not check if the terminal description is marked with the \fIgeneric\fP capability, or if the terminal description has cursor-addressing. .RE .SS CAPABILITY VALUES .PP The \fBtgetflag\fR routine gets the boolean entry for \fIid\fR, or zero if it is not available. .PP The \fBtgetnum\fR routine gets the numeric entry for \fIid\fR, or \-1 if it is not available. .PP The \fBtgetstr\fR routine returns the string entry for \fIid\fR, or zero if it is not available. Use \fBtputs\fR to output the returned string. The \fIarea\fP parameter is used as follows: .RS 3 .bP It is assumed to be the address of a pointer to a buffer managed by the calling application. .bP However, ncurses checks to ensure that \fBarea\fP is not NULL, and also that the resulting buffer pointer is not NULL. If either check fails, the \fIarea\fP parameter is ignored. .bP If the checks succeed, ncurses also copies the return value to the buffer pointed to by \fIarea\fR, and the \fIarea\fR value will be updated to point past the null ending this value. .bP The return value itself is an address in the terminal description which is loaded into memory. .RE .PP Only the first two characters of the \fBid\fR parameter of \fBtgetflag\fR, \fBtgetnum\fR and \fBtgetstr\fR are compared in lookups. .SS FORMATTING CAPABILITIES .PP The \fBtgoto\fR routine instantiates the parameters into the given capability. The output from this routine is to be passed to \fBtputs\fR. .PP The \fBtputs\fR routine is described on the \fBcurs_terminfo\fR(3X) manual page. It can retrieve capabilities by either termcap or terminfo name. .SS GLOBAL VARIABLES .PP The variables \fBPC\fR, \fBUP\fR and \fBBC\fR are set by \fBtgetent\fR to the terminfo entry's data for \fBpad_char\fR, \fBcursor_up\fR and \fBbackspace_if_not_bs\fR, respectively. \fBUP\fR is not used by ncurses. \fBPC\fR is used in the \fBtdelay_output\fR function. \fBBC\fR is used in the \fBtgoto\fR emulation. The variable \fBospeed\fR is set by ncurses in a system-specific coding to reflect the terminal speed. . .SH RETURN VALUE Except where explicitly noted, routines that return an integer return \fBERR\fR upon failure and \fBOK\fR (SVr4 only specifies "an integer value other than \fBERR\fR") upon successful completion. .PP Routines that return pointers return \fBNULL\fR on error. .SH BUGS If you call \fBtgetstr\fR to fetch \fBca\fR or any other parameterized string, be aware that it will be returned in terminfo notation, not the older and not-quite-compatible termcap notation. This will not cause problems if all you do with it is call \fBtgoto\fR or \fBtparm\fR, which both expand terminfo-style strings as terminfo. (The \fBtgoto\fR function, if configured to support termcap, will check if the string is indeed terminfo-style by looking for "%p" parameters or "$<..>" delays, and invoke a termcap-style parser if the string does not appear to be terminfo). .PP Because terminfo conventions for representing padding in string capabilities differ from termcap's, \fBtputs("50");\fR will put out a literal "50" rather than busy-waiting for 50 milliseconds. Cope with it. .PP Note that termcap has nothing analogous to terminfo's \fBsgr\fR string. One consequence of this is that termcap applications assume \fRme\fR (terminfo \fBsgr0\fR) does not reset the alternate character set. This implementation checks for, and modifies the data shown to the termcap interface to accommodate termcap's limitation in this respect. .SH PORTABILITY The XSI Curses standard, Issue 4 describes these functions. However, they are marked TO BE WITHDRAWN and may be removed in future versions. .PP Neither the XSI Curses standard nor the SVr4 man pages documented the return values of \fBtgetent\fR correctly, though all three were in fact returned ever since SVr1. In particular, an omission in the XSI Curses documentation has been misinterpreted to mean that \fBtgetent\fR returns \fBOK\fR or \fBERR\fR. Because the purpose of these functions is to provide compatibility with the \fItermcap\fR library, that is a defect in XCurses, Issue 4, Version 2 rather than in ncurses. .PP External variables are provided for support of certain termcap applications. However, termcap applications' use of those variables is poorly documented, e.g., not distinguishing between input and output. In particular, some applications are reported to declare and/or modify \fBospeed\fR. .PP The comment that only the first two characters of the \fBid\fR parameter are used escapes many application developers. The original BSD 4.2 termcap library (and historical relics thereof) did not require a trailing null NUL on the parameter name passed to \fBtgetstr\fP, \fBtgetnum\fP and \fBtgetflag\fP. Some applications assume that the termcap interface does not require the trailing NUL for the parameter name. Taking into account these issues: .bP As a special case, \fBtgetflag\fP matched against a single-character identifier provided that was at the end of the terminal description. You should not rely upon this behavior in portable programs. This implementation disallows matches against single-character capability names. .bP This implementation disallows matches by the termcap interface against extended capability names which are longer than two characters. .SH SEE ALSO \fBcurses\fR(3X), \fBterminfo\fR(\*n), \fBterm_variables\fR(3X), \fBputc\fR(3). .sp http://invisible-island.net/ncurses/tctest.html ncurses-6.0-20160213/man/curs_memleaks.3x0000644000175100001440000000707611476505455016363 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2008,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_memleaks.3x,v 1.3 2010/12/04 18:40:45 tom Exp $ .TH curs_memleaks 3X "" .na .hy 0 .SH NAME \fB_nc_freeall\fP \fB_nc_free_and_exit\fP \- \fBcurses\fR memory-leak checking .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBvoid _nc_freeall(void);\fR .br \fBvoid _nc_free_and_exit(int);\fR .SH DESCRIPTION These functions are used to simplify analysis of memory leaks in the ncurses library. They are normally not available; they must be configured into the library at build time using the \fB\-\-disable-leaks\fP option. That compiles-in code that frees memory that normally would not be freed. .PP Any implementation of curses must not free the memory associated with a screen, since (even after calling \fBendwin\fP), it must be available for use in the next call to \fBrefresh\fP. There are also chunks of memory held for performance reasons. That makes it hard to analyze curses applications for memory leaks. To work around this, one can build a debugging version of the ncurses library which frees those chunks which it can, and provides these functions to free all of the memory allocated by the ncurses library. .PP The \fP_nc_free_and_exit\fP function is the preferred one since some of the memory which is freed may be required for the application to continue running. Its parameter is the code to pass to the \fPexit\fP routine. .SH RETURN VALUE These functions do not return a value. .SH PORTABILITY These functions are not part of the XSI interface. .SH SEE ALSO \fBcurses\fR(3X). ncurses-6.0-20160213/man/menu_cursor.3x0000644000175100001440000000630712630673165016063 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_cursor.3x,v 1.9 2015/12/05 23:42:45 tom Exp $ .TH menu_cursor 3X "" .SH NAME \fBpos_menu_cursor\fR \- position a menu's cursor .SH SYNOPSIS \fB#include \fR .br int pos_menu_cursor(const MENU *menu); .br .SH DESCRIPTION The function \fBpos_menu_cursor\fR restores the cursor to the current position associated with the menu's selected item. This is useful after \fBcurses\fR routines have been called to do screen-painting in response to a menu select. .SH RETURN VALUE This routine returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_NOT_POSTED The menu has not been posted. .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/manhtml.externs0000644000175100001440000000046312255411021016275 0ustar tomusers# $Id: manhtml.externs,v 1.3 2013/12/21 22:11:29 tom Exp $ # Items in this list will not be linked by man2html conflict(1) csh(1) ded(1) environ(7) getty(1) nvi(1) printf(3) profile(5) putc(3) putwc(3) read(2) rogue(1) scanf(3) sh(1) sscanf(3) stdio(3) stty(1) system(3) termio(7) tty(4) ttys(5) wcwidth(3) ncurses-6.0-20160213/man/menu_new.3x0000644000175100001440000000676612630673165015350 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_new.3x,v 1.12 2015/12/05 23:42:45 tom Exp $ .TH menu_new 3X "" .SH NAME \fBnew_menu\fP, \fBfree_menu\fR \- create and destroy menus .SH SYNOPSIS \fB#include \fR .br MENU *new_menu(ITEM **items); .br int free_menu(MENU *menu); .br .SH DESCRIPTION The function \fBnew_menu\fR creates a new menu connected to a specified item pointer array (which must be \fBNULL\fR-terminated). .PP The function \fBfree_menu\fR disconnects \fImenu\fR from its item array and frees the storage allocated for the menu. .SH RETURN VALUE The function \fBnew_menu\fR returns \fBNULL\fR on error. It sets errno according to the function's failure: .TP 5 .B E_NOT_CONNECTED No items are connected to the menu. .TP 5 .B E_SYSTEM_ERROR System error occurred, e.g., malloc failure. .PP The function \fBfree_menu\fR returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_POSTED The menu has already been posted. .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_insch.3x0000644000175100001440000000716011476505277015665 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_insch.3x,v 1.13 2010/12/04 18:38:55 tom Exp $ .TH curs_insch 3X "" .SH NAME \fBinsch\fR, \fBwinsch\fR, \fBmvinsch\fR, \fBmvwinsch\fR \- insert a character before cursor in a \fBcurses\fR window .SH SYNOPSIS \fB#include \fR .sp \fBint insch(chtype ch);\fR .br \fBint winsch(WINDOW *win, chtype ch);\fR .br \fBint mvinsch(int y, int x, chtype ch);\fR .br \fBint mvwinsch(WINDOW *win, int y, int x, chtype ch);\fR .br .SH DESCRIPTION These routines insert the character \fIch\fR before the character under the cursor. All characters to the right of the cursor are moved one space to the right, with the possibility of the rightmost character on the line being lost. The insertion operation does not change the cursor position. .SH RETURN VALUE All routines that return an integer return \fBERR\fR upon failure and OK (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful completion, unless otherwise noted in the preceding routine descriptions. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES These routines do not necessarily imply use of a hardware insert character feature. .PP Note that \fBinsch\fR, \fBmvinsch\fR, and \fBmvwinsch\fR may be macros. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. .SH SEE ALSO \fBcurses\fR(3X). .PP Comparable functions in the wide-character (ncursesw) library are described in \fBcurs_ins_wch\fR(3X). ncurses-6.0-20160213/man/curs_termattrs.3x0000644000175100001440000001323512553306126016573 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_termattrs.3x,v 1.13 2015/07/21 00:03:34 tom Exp $ .TH curs_termattrs 3X "" .SH NAME \fBbaudrate\fR, \fBerasechar\fR, \fBerasewchar\fR, \fBhas_ic\fR, \fBhas_il\fR, \fBkillchar\fR, \fBkillwchar\fR, \fBlongname\fR, \fBterm_attrs\fR, \fBtermattrs\fR, \fBtermname\fR \- \fBcurses\fR environment query routines .SH SYNOPSIS \fB#include \fR .PP \fBint baudrate(void);\fR .br \fBchar erasechar(void);\fR .br \fBint erasewchar(wchar_t *\fR\fIch\fR\fB);\fR .br \fBbool has_ic(void);\fR .br \fBbool has_il(void);\fR .br \fBchar killchar(void);\fR .br \fBint killwchar(wchar_t *\fR\fIch\fR\fB);\fR .br \fBchar *longname(void);\fR .br \fBattr_t term_attrs(void);\fR .br \fBchtype termattrs(void);\fR .br \fBchar *termname(void);\fR .br .SH DESCRIPTION .SS baudrate The \fBbaudrate\fR routine returns the output speed of the terminal. The number returned is in bits per second, for example \fB9600\fR, and is an integer. .SS erasechar, erasewchar .PP The \fBerasechar\fR routine returns the user's current erase character. .PP The \fBerasewchar\fR routine stores the current erase character in the location referenced by \fIch\fR. If no erase character has been defined, the routine fails and the location referenced by \fIch\fR is not changed. .SS has_is, has_il .PP The \fBhas_ic\fR routine is true if the terminal has insert- and delete- character capabilities. .PP The \fBhas_il\fR routine is true if the terminal has insert- and delete-line capabilities, or can simulate them using scrolling regions. This might be used to determine if it would be appropriate to turn on physical scrolling using \fBscrollok\fR. .SS killchar, killwchar .PP The \fBkillchar\fR routine returns the user's current line kill character. .PP The \fBkillwchar\fR routine stores the current line-kill character in the location referenced by \fIch\fR. If no line-kill character has been defined, the routine fails and the location referenced by \fIch\fR is not changed. .SS longname .PP The \fBlongname\fR routine returns a pointer to a static area containing a verbose description of the current terminal. The maximum length of a verbose description is 128 characters. It is defined only after the call to \fBinitscr\fR or \fBnewterm\fR. The area is overwritten by each call to \fBnewterm\fR and is not restored by \fBset_term\fR, so the value should be saved between calls to \fBnewterm\fR if \fBlongname\fR is going to be used with multiple terminals. .SS termattrs, term_attrs .PP If a given terminal does not support a video attribute that an application program is trying to use, \fBcurses\fR may substitute a different video attribute for it. The \fBtermattrs\fR and \fBterm_attrs\fR functions return a logical \fBOR\fR of all video attributes supported by the terminal using \fIA_\fR and \fIWA_\fR constants respectively. This information is useful when a \fBcurses\fR program needs complete control over the appearance of the screen. .SS termname .PP The \fBtermname\fR routine returns the terminal name used by \fBsetupterm\fR. .SH RETURN VALUE \fBlongname\fR and \fBtermname\fR return \fBNULL\fR on error. .PP Routines that return an integer return \fBERR\fR upon failure and \fBOK\fR (SVr4 only specifies "an integer value other than \fBERR\fR") upon successful completion. .SH NOTES Note that \fBtermattrs\fR may be a macro. .SH PORTABILITY The XSI Curses standard, Issue 4 describes these functions. It changes the return type of \fBtermattrs\fR to the new type \fBattr_t\fR. Most versions of curses truncate the result returned by \fBtermname\fR to 14 characters. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_outopts\fR(3X) ncurses-6.0-20160213/man/form_field_new.3x0000644000175100001440000001074512630673165016502 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_field_new.3x,v 1.19 2015/12/05 23:42:45 tom Exp $ .TH form_field_new 3X "" .SH NAME \fBnew_field\fR, \fBdup_field\fR, \fBlink_field\fR, \fBfree_field\fR \- create and destroy form fields .SH SYNOPSIS \fB#include \fR .br FIELD *new_field(int height, int width, int toprow, int leftcol, int offscreen, int nbuffers); .br FIELD *dup_field(FIELD *field, int toprow, int leftcol); .br FIELD *link_field(FIELD *field, int toprow, int leftcol); .br int free_field(FIELD *field); .br .SH DESCRIPTION The function \fBnew_field\fR allocates a new field and initializes it from the parameters given: height, width, row of upper-left corner, column of upper-left corner, number off-screen rows, and number of additional working buffers. .PP The function \fBdup_field\fR duplicates a field at a new location. Most attributes (including current contents, size, validation type, buffer count, growth threshold, justification, foreground, background, pad character, options, and user pointer) are copied. Field status and the field page bit are not copied. .PP The function \fBlink_field\fR acts like \fBdup_field\fR, but the new field shares buffers with its parent. Attribute data is separate. .PP The function \fBfree_field\fR de-allocates storage associated with a field. .SH RETURN VALUE The function, \fBnew_field\fR, \fBdup_field\fR, \fBlink_field\fR return \fBNULL\fR on error. They set errno according to their success: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_SYSTEM_ERROR System error occurred, e.g., malloc failure. .PP The function \fBfree_field\fR returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_CONNECTED field is connected. .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .PP It may be unwise to count on the set of attributes copied by \fBdup_field\fR being portable; the System V forms library documents are not very explicit about what gets copied and what does not. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/toe.1m0000644000175100001440000001115312570426200014254 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2011,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: toe.1m,v 1.27 2015/08/29 22:04:48 tom Exp $ .TH @TOE@ 1M "" .ds n 5 .ds d @TERMINFO@ .SH NAME \fB@TOE@\fR \- table of (terminfo) entries .SH SYNOPSIS \fB@TOE@\fR [\fB\-v\fR[\fIn\fR]] [\fB\-ahsuUV\fR] \fIfile...\fR .br .SH DESCRIPTION .PP With no options, \fB@TOE@\fR lists all available terminal types by primary name with descriptions. File arguments specify the directories to be scanned; if no such arguments are given, your default terminfo directory is scanned. If you also specify the \fB\-h\fR option, a directory header will be issued as each directory is entered. .PP There are other options intended for use by terminfo file maintainers: .TP \fB\-a\fR report on all of the terminal databases which ncurses would search, rather than only the first one that it finds. .IP If the \fB\-s\fR is also given, \fB@TOE@\fR adds a column to the report, showing (like \fBconflict\fP(1)) which entries which belong to a given terminal database. An "*" marks entries which differ, and "+" marks equivalent entries. .IP Without the \fB\-s\fP option, \fB@TOE@\fR does not attempt to merge duplicates in its report .TP \fB\-s\fR sort the output by the entry names. .TP \fB\-u\fR \fIfile\fR says to write a report to the standard output, listing dependencies in the given terminfo/termcap source file. The report condenses the `use' relation: each line consists of the primary name of a terminal that has use capabilities, followed by a colon, followed by the whitespace-separated primary names of all terminals which occur in those use capabilities, followed by a newline .TP \fB\-U\fR \fIfile\fR says to write a report to the standard output, listing reverse dependencies in the given terminfo/termcap source file. The report reverses the `use' relation: each line consists of the primary name of a terminal that occurs in use capabilities, followed by a colon, followed by the whitespace-separated primary names of all terminals which depend on it, followed by a newline. .TP \fB\-v\fR\fIn\fR specifies that (verbose) output be written to standard error, showing \fB@TOE@\fR's progress. The optional parameter \fIn\fR is a number from 1 to 10, interpreted as for \fB@TIC@\fR(1M). .TP \fB\-V\fR reports the version of ncurses which was used in this program, and exits. .SH FILES .TP 5 \fB\*d/?/*\fR Compiled terminal description database. .SH SEE ALSO \fB@TIC@\fR(1M), \fB@INFOCMP@\fR(1M), \fB@CAPTOINFO@\fR(1M), \fB@INFOTOCAP@\fR(1M), \fBcurses\fR(3X), \fBterminfo\fR(\*n). .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). ncurses-6.0-20160213/man/form_field_userptr.3x0000644000175100001440000000637512630666344017422 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_field_userptr.3x,v 1.11 2015/12/05 23:01:56 tom Exp $ .TH form_field_userptr 3X "" .SH NAME \fBset_field_userptr\fR, \fBfield_userptr\fR \- associate application data with a form field .SH SYNOPSIS \fB#include \fR .br int set_field_userptr(FIELD *field, void*userptr); .br void *field_userptr(const FIELD *field); .br .SH DESCRIPTION Every form field has a field that can be used to hold application-specific data (that is, the form-driver code leaves it alone). These functions get and set that field. .SH RETURN VALUE The function \fBfield_userptr\fR returns a pointer (which may be \fBNULL\fR). It does not set errno. .PP The function \fBset_field_userptr\fR returns \fBE_OK\fP (success). .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .PP The user pointer is a void pointer. We chose not to leave it as a char pointer for SVr4 compatibility. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_move.3x0000644000175100001440000000616011476505455015524 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_move.3x,v 1.14 2010/12/04 18:40:45 tom Exp $ .TH curs_move 3X "" .na .hy 0 .SH NAME \fBmove\fR, \fBwmove\fR \- move \fBcurses\fR window cursor .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint move(int y, int x);\fR .br \fBint wmove(WINDOW *win, int y, int x);\fR .br .SH DESCRIPTION These routines move the cursor associated with the window to line \fIy\fR and column \fIx\fR. This routine does not move the physical cursor of the terminal until \fBrefresh\fR is called. The position specified is relative to the upper left-hand corner of the window, which is (0,0). .SH RETURN VALUE These routines return \fBERR\fR upon failure and OK (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful completion. .PP Specifically, they return an error if the window pointer is null, or if the position is outside the window. .SH NOTES Note that \fBmove\fR may be a macro. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_refresh\fR(3X) ncurses-6.0-20160213/man/menu_win.3x0000644000175100001440000001003411476505277015340 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_win.3x,v 1.11 2010/12/04 18:38:55 tom Exp $ .TH menu_win 3X "" .SH NAME \fBmenu_win\fR \- make and break menu window and subwindow associations .SH SYNOPSIS \fB#include \fR .br int set_menu_win(MENU *menu, WINDOW *win); .br WINDOW *menu_win(const MENU *menu); .br int set_menu_sub(MENU *menu, WINDOW *sub); .br WINDOW *menu_sub(const MENU *menu); .br int scale_menu(const MENU *menu, int *rows, int *columns); .br .SH DESCRIPTION Every menu has an associated pair of \fBcurses\fR windows. The menu window displays any title and border associated with the window; the menu subwindow displays the items of the menu that are currently available for selection. .PP The first four functions get and set those windows. It is not necessary to set either window; by default, the driver code uses \fBstdscr\fR for both. .PP In the \fBset_\fR functions, window argument of \fBNULL\fR is treated as though it were \fBstsdcr\fR. A menu argument of \fBNULL\fR is treated as a request to change the system default menu window or subwindow. .PP The function \fBscale_menu\fR returns the minimum size required for the subwindow of \fImenu\fR. .SH RETURN VALUE Routines that return pointers return \fBNULL\fR on error. Routines that return an integer return one of the following error codes: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_POSTED The menu has already been posted. .TP 5 .B E_NOT_CONNECTED No items are connected to the menu. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_variables\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_pad.3x0000644000175100001440000001652312553404704015316 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_pad.3x,v 1.18 2015/07/21 08:58:44 tom Exp $ .TH curs_pad 3X "" .na .hy 0 .SH NAME \fBnewpad\fR, \fBsubpad\fR, \fBprefresh\fR, \fBpnoutrefresh\fR, \fBpechochar\fR, \fBpecho_wchar\fR \- create and display \fBcurses\fR pads .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBWINDOW *newpad(int \fP\fInlines\fP\fB, int \fP\fIncols\fP\fB);\fR .br \fBWINDOW *subpad(WINDOW *\fP\fIorig\fP\fB, int \fP\fInlines\fP\fB, int \fP\fIncols\fP\fB,\fR \fBint \fP\fIbegin_y\fP\fB, int \fP\fIbegin_x\fP\fB);\fR .br \fBint prefresh(WINDOW *\fP\fIpad\fP\fB, int \fP\fIpminrow\fP\fB, int \fP\fIpmincol\fP\fB,\fR \fBint \fP\fIsminrow\fP\fB, int \fP\fIsmincol\fP\fB, int \fP\fIsmaxrow\fP\fB, int \fP\fIsmaxcol\fP\fB);\fR .br \fBint pnoutrefresh(WINDOW *\fP\fIpad\fP\fB, int \fP\fIpminrow\fP\fB, int \fP\fIpmincol\fP\fB,\fR \fBint \fP\fIsminrow\fP\fB, int \fP\fIsmincol\fP\fB, int \fP\fIsmaxrow\fP\fB, int \fP\fIsmaxcol\fP\fB);\fR .br \fBint pechochar(WINDOW *\fP\fIpad\fP\fB, chtype \fP\fIch\fP\fB);\fR .br \fBint pecho_wchar(WINDOW *\fP\fIpad\fP\fB, const cchar_t *\fP\fIwch\fP\fB);\fR .SH DESCRIPTION .SS newpad The \fBnewpad\fR routine creates and returns a pointer to a new pad data structure with the given number of lines, \fInlines\fR, and columns, \fIncols\fR. A pad is like a window, except that it is not restricted by the screen size, and is not necessarily associated with a particular part of the screen. Pads can be used when a large window is needed, and only a part of the window will be on the screen at one time. Automatic refreshes of pads (e.g., from scrolling or echoing of input) do not occur. It is not legal to call \fBwrefresh\fR with a \fIpad\fR as an argument; the routines \fBprefresh\fR or \fBpnoutrefresh\fR should be called instead. Note that these routines require additional parameters to specify the part of the pad to be displayed and the location on the screen to be used for the display. .SS subpad .PP The \fBsubpad\fR routine creates and returns a pointer to a subwindow within a pad with the given number of lines, \fInlines\fR, and columns, \fIncols\fR. Unlike \fBsubwin\fR, which uses screen coordinates, the window is at position (\fIbegin\fR_\fIx\fR\fB,\fR \fIbegin\fR_\fIy\fR) on the pad. The window is made in the middle of the window \fIorig\fR, so that changes made to one window affect both windows. During the use of this routine, it will often be necessary to call \fBtouchwin\fR or \fBtouchline\fR on \fIorig\fR before calling \fBprefresh\fR. .SS prefresh, pnoutrefresh .PP The \fBprefresh\fR and \fBpnoutrefresh\fR routines are analogous to \fBwrefresh\fR and \fBwnoutrefresh\fR except that they relate to pads instead of windows. The additional parameters are needed to indicate what part of the pad and screen are involved. The \fIpminrow\fR and \fIpmincol\fR parameters specify the upper left-hand corner of the rectangle to be displayed in the pad. The \fIsminrow\fR, \fIsmincol\fR, \fIsmaxrow\fR, and \fIsmaxcol\fR parameters specify the edges of the rectangle to be displayed on the screen. The lower right-hand corner of the rectangle to be displayed in the pad is calculated from the screen coordinates, since the rectangles must be the same size. Both rectangles must be entirely contained within their respective structures. Negative values of \fIpminrow\fR, \fIpmincol\fR, \fIsminrow\fR, or \fIsmincol\fR are treated as if they were zero. .SS pechochar .PP The \fBpechochar\fR routine is functionally equivalent to a call to \fBaddch\fR followed by a call to \fBrefresh\fR, a call to \fBwaddch\fR followed by a call to \fBwrefresh\fR, or a call to \fBwaddch\fR followed by a call to \fBprefresh\fR. The knowledge that only a single character is being output is taken into consideration and, for non-control characters, a considerable performance gain might be seen by using these routines instead of their equivalents. In the case of \fBpechochar\fR, the last location of the pad on the screen is reused for the arguments to \fBprefresh\fR. .SS pecho_wchar .PP The \fBpecho_wchar\fR function is the analogous wide-character form of \fBpechochar\fR. It outputs one character to a pad and immediately refreshes the pad. It does this by a call to \fBwadd_wch\fR followed by a call to \fBprefresh\fR. .SH RETURN VALUE Routines that return an integer return \fBERR\fR upon failure and \fBOK\fR (SVr4 only specifies "an integer value other than \fBERR\fR") upon successful completion. .PP Routines that return pointers return \fBNULL\fR on error, and set \fBerrno\fR to \fBENOMEM\fR. .PP X/Open does not define any error conditions. In this implementation .RS 3 .TP 5 \fBprefresh\fP and \fBpnoutrefresh\fP return an error if the window pointer is null, or if the window is not really a pad or if the area to refresh extends off-screen or if the minimum coordinates are greater than the maximum. .TP 5 \fBpechochar\fP returns an error if the window is not really a pad, and the associated call to \fBwechochar\fP returns an error. .TP 5 \fBpecho_wchar\fP returns an error if the window is not really a pad, and the associated call to \fBwecho_wchar\fP returns an error. .RE .SH NOTES Note that \fBpechochar\fR may be a macro. .SH PORTABILITY The XSI Curses standard, Issue 4 describes these functions. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_refresh\fR(3X), \fBcurs_touch\fR(3X), \fBcurs_addch\fR(3X). ncurses-6.0-20160213/man/default_colors.3x0000644000175100001440000001475411510442433016520 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" Author: Thomas E. Dickey 1997,1999,2000,2005 .\" .\" $Id: default_colors.3x,v 1.23 2011/01/03 21:52:27 Tim.van.der.Molen Exp $ .TH default_colors 3X "" .SH NAME \fBuse_default_colors\fR, \fBassume_default_colors\fR \- use terminal's default colors .SH SYNOPSIS \fB#include \fP .sp \fBint use_default_colors(void);\fP .br \fBint assume_default_colors(int fg, int bg);\fP .SH DESCRIPTION The .I use_default_colors() and .I assume_default_colors() functions are extensions to the curses library. They are used with terminals that support ISO 6429 color, or equivalent. These terminals allow the application to reset color to an unspecified default value (e.g., with SGR 39 or SGR 49). .PP Applications that paint a colored background over the whole screen do not take advantage of SGR 39 and SGR 49. Some applications are designed to work with the default background, using colors only for text. For example, there are several implementations of the \fBls\fP program which use colors to denote different file types or permissions. These "color ls" programs do not necessarily modify the background color, typically using only the \fIsetaf\fP terminfo capability to set the foreground color. Full-screen applications that use default colors can achieve similar visual effects. .PP The first function, .I use_default_colors() tells the curses library to assign terminal default foreground/background colors to color number \-1. So init_pair(x,COLOR_RED,\-1) will initialize pair x as red on default background and init_pair(x,\-1,COLOR_BLUE) will initialize pair x as default foreground on blue. .PP The other, .I assume_default_colors() is a refinement which tells which colors to paint for color pair 0. This function recognizes a special color number \-1, which denotes the default terminal color. .PP The following are equivalent: .RS .br .I use_default_colors(); .br .I assume_default_colors(\-1,\-1); .RE .PP These are ncurses extensions. For other curses implementations, color number \-1 does not mean anything, just as for ncurses before a successful call of \fIuse_default_colors()\fP or \fIassume_default_colors()\fP. .PP Other curses implementations do not allow an application to modify color pair 0. They assume that the background is COLOR_BLACK, but do not ensure that the color pair 0 is painted to match the assumption. If your application does not use either .I use_default_colors() or .I assume_default_colors() ncurses will paint a white foreground (text) with black background for color pair 0. .SH RETURN VALUE These functions return the integer \fBERR\fP upon failure and \fBOK\fP on success. They will fail if either the terminal does not support the \fIorig_pair\fP or \fIorig_colors\fP capability. If the \fIinitialize_pair\fP capability is not found, this causes an error as well. .SH NOTES Associated with this extension, the \fBinit_pair\fR function accepts negative arguments to specify default foreground or background colors. .PP The \fIuse_default_colors()\fP function was added to support \fIded\fP. This is a full-screen application which uses curses to manage only part of the screen. The bottom portion of the screen, which is of adjustable size, is left uncolored to display the results from shell commands. The top portion of the screen colors filenames using a scheme like the "color ls" programs. Attempting to manage the background color of the screen for this application would give unsatisfactory results for a variety of reasons. This extension was devised after noting that color xterm (and similar programs) provides a background color which does not necessarily correspond to any of the ANSI colors. While a special terminfo entry could be constructed using nine colors, there was no mechanism provided within curses to account for the related \fIorig_pair\fP and \fIback_color_erase\fP capabilities. .PP The \fIassume_default_colors()\fP function was added to solve a different problem: support for applications which would use environment variables and other configuration to bypass curses' notion of the terminal's default colors, setting specific values. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on them be conditioned using NCURSES_VERSION. .SH SEE ALSO \fBcurs_color\fR(3X), \fBded\fP(1). .SH AUTHOR Thomas Dickey (from an analysis of the requirements for color xterm for XFree86 3.1.2C, February 1996). ncurses-6.0-20160213/man/keyok.3x0000644000175100001440000000613611476505455014647 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" Author: Thomas E. Dickey 1997 .\" .\" $Id: keyok.3x,v 1.11 2010/12/04 18:40:45 tom Exp $ .TH keyok 3X "" .SH NAME \fBkeyok\fP \- enable or disable a keycode .SH SYNOPSIS \fB#include \fP .sp \fBint keyok(int keycode, bool enable);\fP .SH DESCRIPTION This is an extension to the curses library. It permits an application to disable specific keycodes, rather than use the \fIkeypad\fP function to disable all keycodes. Keys that have been disabled can be re-enabled. .SH RETURN VALUE The keycode must be greater than zero, else ERR is returned. If it does not correspond to a defined key, then ERR is returned. If the \fIenable\fP parameter is true, then the key must have been disabled, and vice versa. Otherwise, the function returns OK. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on them be conditioned using NCURSES_VERSION. .SH SEE ALSO \fBdefine_key\fR(3X). .SH AUTHOR Thomas Dickey. ncurses-6.0-20160213/man/form_fieldtype.3x0000644000175100001440000001404111476505455016527 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_fieldtype.3x,v 1.16 2010/12/04 18:40:45 tom Exp $ .TH form_fieldtype 3X "" .SH NAME \fBform_fieldtype\fR \- define validation-field types .SH SYNOPSIS \fB#include \fR .br FIELDTYPE *new_fieldtype( bool (* const field_check)(FIELD *, const void *), bool (* const char_check)(int, const void *)); .br int free_fieldtype(FIELDTYPE *fieldtype); .br int set_fieldtype_arg( FIELDTYPE *fieldtype, void *(* const make_arg)(va_list *), void *(* const copy_arg)(const void *), void (* const free_arg)(void *)); .br int set_fieldtype_choice( FIELDTYPE *fieldtype, bool (* const next_choice)(FIELD *, const void *), bool (* const prev_choice)(FIELD *, const void *)); .br FIELDTYPE *link_fieldtype(FIELDTYPE *type1, FIELDTYPE *type2); .br .SH DESCRIPTION The function \fBnew_fieldtype\fR creates a new field type usable for data validation. You supply it with \fIfield_check\fR, a predicate to check the validity of an entered data string whenever the user attempts to leave a field. The (FIELD *) argument is passed in so the validation predicate can see the field's buffer, sizes and other attributes; the second argument is an argument-block structure, about which more below. .PP You also supply \fBnew_fieldtype\fR with \fIchar_check\fR, a function to validate input characters as they are entered; it will be passed the character to be checked and a pointer to an argument-block structure. .PP The function \fBfree_fieldtype\fR frees the space allocated for a given validation type. .PP The function \fBset_fieldtype_arg\fR associates three storage-management functions with a field type. The \fImake_arg\fR function is automatically applied to the list of arguments you give \fBset_field_type\fR when attaching validation to a field; its job is to bundle these into an allocated argument-block object which can later be passed to validation predicated. The other two hook arguments should copy and free argument-block structures. They will be used by the forms-driver code. You must supply the \fImake_arg\fR function, the other two are optional, you may supply NULL for them. In this case it is assumed that \fImake_arg\fR does not allocate memory but simply loads the argument into a single scalar value. .PP The function \fBlink_fieldtype\fR creates a new field type from the two given types. They are connected by an logical 'OR'. .PP The form driver requests \fBREQ_NEXT_CHOICE\fR and \fBREQ_PREV_CHOICE\fR assume that the possible values of a field form an ordered set, and provide the forms user with a way to move through the set. The \fBset_fieldtype_choice\fR function allows forms programmers to define successor and predecessor functions for the field type. These functions take the field pointer and an argument-block structure as arguments. .SH RETURN VALUE The pointer-valued routines return NULL on error. They set errno according to their success: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_SYSTEM_ERROR System error occurred, e.g., malloc failure. .PP The integer-valued routines return one of the following codes on error: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_CONNECTED The field is already connected to a form. .TP 5 .B E_CURRENT The field is the current field. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .PP All of the \fB(char *)\fR arguments of these functions should actually be \fB(void *)\fR. The type has been left uncorrected for strict compatibility with System V. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_addchstr.3x0000644000175100001440000001074712045320263016341 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_addchstr.3x,v 1.16 2012/11/03 22:54:43 tom Exp $ .TH curs_addchstr 3X "" .de bP .IP \(bu 4 .. .na .hy 0 .SH NAME \fBaddchstr\fR, \fBaddchnstr\fR, \fBwaddchstr\fR, \fBwaddchnstr\fR, \fBmvaddchstr\fR, \fBmvaddchnstr\fR, \fBmvwaddchstr\fR, \fBmvwaddchnstr\fR \- add a string of characters (and attributes) to a \fBcurses\fR window .ad .hy .SH SYNOPSIS .nf \fB#include \fR .PP \fBint addchstr(const chtype *chstr);\fR .br \fBint addchnstr(const chtype *chstr, int n);\fR .br \fBint waddchstr(WINDOW *win, const chtype *chstr);\fR .br \fBint waddchnstr(WINDOW *win, const chtype *chstr, int n);\fR .br \fBint mvaddchstr(int y, int x, const chtype *chstr);\fR .br \fBint mvaddchnstr(int y, int x, const chtype *chstr, int n);\fR .br \fBint mvwaddchstr(WINDOW *win, int y, int x, const chtype *chstr);\fR .br \fBint mvwaddchnstr(WINDOW *win, int y, int x, const chtype *chstr, int n);\fR .fi .SH DESCRIPTION These functions copy the (null-terminated) \fIchstr\fR array into the window image structure starting at the current cursor position. The four functions with \fIn\fR as the last argument copy at most \fIn\fR elements, but no more than will fit on the line. If \fBn\fR=\fB\-1\fR then the whole array is copied, to the maximum number of characters that will fit on the line. .PP The window cursor is \fInot\fR advanced. These functions work faster than \fBwaddnstr\fR. On the other hand: .bP they do not perform checking (such as for the newline, backspace, or carriage return characters), .bP they do not advance the current cursor position, .bP they do not expand other control characters to ^-escapes, and .bP they truncate the string if it crosses the right margin, rather than wrapping it around to the new line. .SH RETURN VALUE All functions return the integer \fBERR\fR upon failure and \fBOK\fR on success. .PP X/Open does not define any error conditions. This implementation returns an error if the window pointer is null. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES All functions except \fBwaddchnstr\fR may be macros. .SH PORTABILITY These entry points are described in the XSI Curses standard, Issue 4. .SH SEE ALSO \fBcurs_addstr\fR(3X), \fBcurses\fR(3X). .PP Comparable functions in the wide-character (ncursesw) library are described in \fBcurs_add_wchstr\fR(3X). ncurses-6.0-20160213/man/panel.3x0000644000175100001440000001745412630673165014626 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: panel.3x,v 1.19 2015/12/05 23:42:45 tom Exp $ .TH panel 3X "" .ds n 5 .ds d @TERMINFO@ .SH NAME panel \- panel stack extension for curses .SH SYNOPSIS \fB#include \fR .P \fBcc [flags] sourcefiles \-lpanel \-lncurses\fR .P \fBPANEL *new_panel(WINDOW *win);\fR .br \fBint bottom_panel(PANEL *pan);\fR .br \fBint top_panel(PANEL *pan);\fR .br \fBint show_panel(PANEL *pan);\fR .br \fBvoid update_panels();\fR .br \fBint hide_panel(PANEL *pan);\fR .br \fBWINDOW *panel_window(const PANEL *pan);\fR .br \fBint replace_panel(PANEL *pan, WINDOW *window);\fR .br \fBint move_panel(PANEL *pan, int starty, int startx);\fR .br \fBint panel_hidden(const PANEL *pan);\fR .br \fBPANEL *panel_above(const PANEL *pan);\fR .br \fBPANEL *panel_below(const PANEL *pan);\fR .br \fBint set_panel_userptr(PANEL *pan, const void *ptr);\fR .br \fBconst void *panel_userptr(const PANEL *pan);\fR .br \fBint del_panel(PANEL *pan);\fR .br .SH DESCRIPTION Panels are \fBcurses\fR(3X) windows with the added feature of depth. Panel functions allow the use of stacked windows and ensure the proper portions of each window and the curses \fBstdscr\fR window are hidden or displayed when panels are added, moved, modified or removed. The set of currently visible panels is the stack of panels. The \fBstdscr\fR window is beneath all panels, and is not considered part of the stack. .P A window is associated with every panel. The panel routines enable you to create, move, hide, and show panels, as well as position a panel at any desired location in the stack. .P Panel routines are a functional layer added to \fBcurses\fR(3X), make only high-level curses calls, and work anywhere terminfo curses does. .SH FUNCTIONS .TP .B new_panel(win) allocates a \fBPANEL\fR structure, associates it with \fBwin\fR, places the panel on the top of the stack (causes it to be displayed above any other panel) and returns a pointer to the new panel. .TP .B update_panels() refreshes the virtual screen to reflect the relations between the panels in the stack, but does not call doupdate() to refresh the physical screen. Use this function and not \fBwrefresh\fP or \fBwnoutrefresh\fP. .B update_panels may be called more than once before a call to doupdate(), but doupdate() is the function responsible for updating the physical screen. .TP .B del_panel(pan) removes the given panel from the stack and deallocates the \fBPANEL\fR structure (but not its associated window). .TP .B hide_panel(pan) removes the given panel from the panel stack and thus hides it from view. The \fBPANEL\fR structure is not lost, merely removed from the stack. .TP .B panel_hidden(pan) returns \fBTRUE\fP if the panel is in the panel stack, \fBFALSE\fP if it is not. If the panel is a null pointer, return ERR. .TP .B show_panel(pan) makes a hidden panel visible by placing it on top of the panels in the panel stack. See COMPATIBILITY below. .TP .B top_panel(pan) puts the given visible panel on top of all panels in the stack. See COMPATIBILITY below. .TP .B bottom_panel(pan) puts panel at the bottom of all panels. .TP .B move_panel(pan,starty,startx) moves the given panel window so that its upper-left corner is at \fBstarty\fR, \fBstartx\fR. It does not change the position of the panel in the stack. Be sure to use this function, not \fBmvwin()\fR, to move a panel window. .TP .B replace_panel(pan,window) replaces the current window of panel with \fBwindow\fR (useful, for example if you want to resize a panel; if you're using \fBncurses\fR, you can call \fBreplace_panel\fR on the output of \fBwresize\fR(3X)). It does not change the position of the panel in the stack. .TP .B panel_above(pan) returns a pointer to the panel above pan. If the panel argument is \fB(PANEL *)0\fR, it returns a pointer to the bottom panel in the stack. .TP .B panel_below(pan) returns a pointer to the panel just below pan. If the panel argument is \fB(PANEL *)0\fR, it returns a pointer to the top panel in the stack. .TP .B set_panel_userptr(pan,ptr) sets the panel's user pointer. .TP .B panel_userptr(pan) returns the user pointer for a given panel. .TP .B panel_window(pan) returns a pointer to the window of the given panel. .SH DIAGNOSTICS Each routine that returns a pointer returns \fBNULL\fR if an error occurs. Each routine that returns an int value returns \fBOK\fR if it executes successfully and \fBERR\fR if not. .SH COMPATIBILITY Reasonable care has been taken to ensure compatibility with the native panel facility introduced in SVr3.2 (inspection of the SVr4 manual pages suggests the programming interface is unchanged). The \fBPANEL\fR data structures are merely similar. The programmer is cautioned not to directly use \fBPANEL\fR fields. .P The functions \fBshow_panel()\fR and \fBtop_panel()\fR are identical in this implementation, and work equally well with displayed or hidden panels. In the native System V implementation, \fBshow_panel()\fR is intended for making a hidden panel visible (at the top of the stack) and \fBtop_panel()\fR is intended for making an already-visible panel move to the top of the stack. You are cautioned to use the correct function to ensure compatibility with native panel libraries. .SH NOTE In your library list, libpanel.a should be before libncurses.a; that is, you want to say `\-lpanel \-lncurses', not the other way around (which would usually give a link-error). .SH FILES .P panel.h interface for the panels library .P libpanel.a the panels library itself .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_variables\fR(3X), .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). .SH AUTHOR Originally written by Warren Tucker , primarily to assist in porting u386mon to systems without a native panels library. Repackaged for ncurses by Zeyd ben-Halim. ncurses-6.0-20160213/man/mitem_name.3x0000644000175100001440000000601612630673165015632 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: mitem_name.3x,v 1.9 2015/12/05 23:42:45 tom Exp $ .TH mitem_name 3X "" .SH NAME \fBitem_name\fR, \fBitem_description\fR \- get menu item name and description fields .SH SYNOPSIS \fB#include \fR .br const char *item_name(const ITEM *item); .br const char *item_description(const ITEM *item); .br .SH DESCRIPTION The function \fBitem_name\fR returns the name part of the given item. .br The function \fBitem_description\fR returns the description part of the given item. .SH RETURN VALUE These routines return a pointer (which may be \fBNULL\fR). They do not set errno. .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_overlay.3x0000644000175100001440000001061712553313623016230 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_overlay.3x,v 1.18 2015/07/21 00:51:31 tom Exp $ .TH curs_overlay 3X "" .na .hy 0 .SH NAME \fBoverlay\fR, \fBoverwrite\fR, \fBcopywin\fR \- overlay and manipulate overlapped \fBcurses\fR windows .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint overlay(const WINDOW *\fP\fIsrcwin\fP\fB, WINDOW *\fP\fIdstwin\fP\fB);\fR .br \fBint overwrite(const WINDOW *\fP\fIsrcwin\fP\fB, WINDOW *\fP\fIdstwin\fP\fB);\fR .br \fBint copywin(const WINDOW *\fP\fIsrcwin\fP\fB, WINDOW *\fP\fIdstwin\fP\fB, int \fP\fIsminrow\fP\fB,\fR \fBint \fP\fIsmincol\fP\fB, int \fP\fIdminrow\fP\fB, int \fP\fIdmincol\fP\fB, int \fP\fIdmaxrow\fP\fB,\fR \fBint \fP\fIdmaxcol\fP\fB, int \fP\fIoverlay\fP\fB);\fR .SH DESCRIPTION .SS overlay, overwrite The \fBoverlay\fR and \fBoverwrite\fR routines overlay \fIsrcwin\fR on top of \fIdstwin\fR. \fIscrwin\fR and \fIdstwin\fR are not required to be the same size; only text where the two windows overlap is copied. The difference is that \fBoverlay\fR is non-destructive (blanks are not copied) whereas \fBoverwrite\fR is destructive. .SS copywin .PP The \fBcopywin\fR routine provides a finer granularity of control over the \fBoverlay\fR and \fBoverwrite\fR routines. As in the \fBprefresh\fR routine, a rectangle is specified in the destination window, (\fIdminrow\fR, \fIdmincol\fR) and (\fIdmaxrow\fR, \fIdmaxcol\fR), and the upper-left-corner coordinates of the source window, (\fIsminrow\fR, \fIsmincol\fR). If the argument \fIoverlay\fR is \fBtrue\fR, then copying is non-destructive, as in \fBoverlay\fR. .SH RETURN VALUE Routines that return an integer return \fBERR\fR upon failure, and \fBOK\fR (SVr4 only specifies "an integer value other than \fBERR\fR") upon successful completion. .PP X/Open defines no error conditions. In this implementation, \fBcopywin\fP, \fBoverlay\fP and \fBoverwrite\fP return an error if either of the window pointers are null, or if some part of the window would be placed off-screen. .SH NOTES Note that \fBoverlay\fR and \fBoverwrite\fR may be macros. .SH PORTABILITY The XSI Curses standard, Issue 4 describes these functions (adding the const qualifiers). It further specifies their behavior in the presence of characters with multibyte renditions (not yet supported in this implementation). .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_pad\fR(3X), \fBcurs_refresh\fR(3X) ncurses-6.0-20160213/man/curs_slk.3x0000644000175100001440000002010511476505277015344 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2007,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_slk.3x,v 1.22 2010/12/04 18:38:55 tom Exp $ .TH curs_slk 3X "" .na .hy 0 .SH NAME \fBslk_init\fR, \fBslk_set\fR, \fBslk_wset\fR, \fBslk_refresh\fR, \fBslk_noutrefresh\fR, \fBslk_label\fR, \fBslk_clear\fR, \fBslk_restore\fR, \fBslk_touch\fR, \fBslk_attron\fR, \fBslk_attrset\fR, \fBslk_attroff\fR, \fBslk_attr_on\fR, \fBslk_attr_set\fR, \fBslk_attr_off\fR, \fBslk_attr\fR, \fBslk_color\fR \- \fBcurses\fR soft label routines .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint slk_init(int fmt);\fR .br \fBint slk_set(int labnum, const char *label, int fmt);\fR .br \fBint slk_refresh(void);\fR .br \fBint slk_noutrefresh(void);\fR .br \fBchar *slk_label(int labnum);\fR .br \fBint slk_clear(void);\fR .br \fBint slk_restore(void);\fR .br \fBint slk_touch(void);\fR .br \fBint slk_attron(const chtype attrs);\fR .br \fBint slk_attroff(const chtype attrs);\fR .br \fBint slk_attrset(const chtype attrs);\fR .br \fBint slk_attr_on(attr_t attrs, void* opts);\fR .br \fBint slk_attr_off(const attr_t attrs, void * opts);\fR .br \fBint slk_attr_set(const attr_t attrs, short color_pair, void* opts);\fR .br \fBattr_t slk_attr(void);\fR .br \fBint slk_color(short color_pair);\fR .br \fBint slk_wset(int labnum, const wchar_t *label, int fmt);\fR .br .SH DESCRIPTION The slk* functions manipulate the set of soft function-key labels that exist on many terminals. For those terminals that do not have soft labels, \fBcurses\fR takes over the bottom line of \fBstdscr\fR, reducing the size of \fBstdscr\fR and the variable \fBLINES\fR. \fBcurses\fR standardizes on eight labels of up to eight characters each. In addition to this, the ncurses implementation supports a mode where it simulates 12 labels of up to five characters each. This is useful for today's PC-like enduser devices. ncurses simulates this mode by taking over up to two lines at the bottom of the screen; it does not try to use any hardware support for this mode. .PP The \fBslk_init\fR routine must be called before \fBinitscr\fR or \fBnewterm\fR is called. If \fBinitscr\fR eventually uses a line from \fBstdscr\fR to emulate the soft labels, then \fIfmt\fR determines how the labels are arranged on the screen: .RS .TP 3 .B 0 indicates a 3\-2\-3 arrangement of the labels. .TP 3 .B 1 indicates a 4\-4 arrangement .TP 3 .B 2 indicates the PC-like 4\-4\-4 mode. .TP 3 .B 3 is again the PC-like 4\-4\-4 mode, but in addition an index line is generated, helping the user to identify the key numbers easily. .RE .PP The \fBslk_set\fR routine (and the \fBslk_wset\fR routine for the wide-character library) has three parameters: .RS .TP 5 .I labnum is the label number, from \fB1\fR to \fB8\fR (12 for \fIfmt\fP in \fBslk_init\fP is \fB2\fP or \fB3\fP); .TP .I label is be the string to put on the label, up to eight (five for \fIfmt\fP in \fBslk_init\fP is \fB2\fP or \fB3\fP) characters in length. A null string or a null pointer sets up a blank label. .TP .I fmt is either \fB0\fR, \fB1\fR, or \fB2\fR, indicating whether the label is to be left-justified, centered, or right-justified, respectively, within the label. .RE .PP The \fBslk_refresh\fR and \fBslk_noutrefresh\fR routines correspond to the \fBwrefresh\fR and \fBwnoutrefresh\fR routines. .PP The \fBslk_label\fR routine returns the current label for label number \fIlabnum\fR, with leading and trailing blanks stripped. .PP The \fBslk_clear\fR routine clears the soft labels from the screen. .PP The \fBslk_restore\fR routine restores the soft labels to the screen after a \fBslk_clear\fR has been performed. .PP The \fBslk_touch\fR routine forces all the soft labels to be output the next time a \fBslk_noutrefresh\fR is performed. .PP The \fBslk_attron\fR, \fBslk_attrset\fR, \fBslk_attroff\fR and \fBslk_attr\fR routines correspond to \fBattron\fR, \fBattrset\fR, \fBattroff\fR and \fBattr_get\fR. They have an effect only if soft labels are simulated on the bottom line of the screen. The default highlight for soft keys is A_STANDOUT (as in System V curses, which does not document this fact). .PP The \fBslk_color\fR routine corresponds to \fBcolor_set\fR. It has an effect only if soft labels are simulated on the bottom line of the screen. . .SH RETURN VALUE These routines return \fBERR\fR upon failure and OK (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful completion. .PP X/Open defines no error conditions. In this implementation .RS .TP 5 \fBslk_attr\fR returns the attribute used for the soft keys. .TP 5 .na .hy 0 \fBslk_attroff\fP, \fBslk_attron\fP, \fBslk_clear\fP, \fBslk_noutrefresh\fP, \fBslk_refresh\fP, \fBslk_touch\fP .ad .hy return an error if the terminal or the softkeys were not initialized. .TP 5 \fBslk_attrset\fP returns an error if the terminal or the softkeys were not initialized. .TP 5 \fBslk_attr_set\fP returns an error if the terminal or the softkeys were not initialized, or the color pair is outside the range 0..COLOR_PAIRS\-1, or opts is not null. .TP 5 \fBslk_color\fP returns an error if the terminal or the softkeys were not initialized, or the color pair is outside the range 0..COLOR_PAIRS\-1. .TP 5 \fBslk_init\fR returns an error if the format parameter is outside the range 0..3. .TP 5 \fBslk_label\fR returns \fBNULL\fR on error. .TP 5 \fBslk_set\fP returns an error if the terminal or the softkeys were not initialized, or the \fIlabnum\fP parameter is outside the range of label counts, or if the format parameter is outside the range 0..2, or if memory for the labels cannot be allocated. .RE .SH NOTES Most applications would use \fBslk_noutrefresh\fR because a \fBwrefresh\fR is likely to follow soon. .SH PORTABILITY The XSI Curses standard, Issue 4, describes these functions. It changes the argument type of the attribute-manipulation functions \fBslk_attron\fR, \fBslk_attroff\fR, \fBslk_attrset\fR to be \fBattr_t\fR, and adds \fBconst\fR qualifiers. The format codes \fB2\fR and \fB3\fR for \fBslk_init()\fR and the function \fBslk_attr\fR are specific to ncurses. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_attr\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_refresh\fR(3X), \fBcurs_variables\fR(3X). ncurses-6.0-20160213/man/tabs.10000644000175100001440000001243412161364355014254 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2008-2011,2013 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: tabs.1,v 1.11 2013/06/22 18:11:57 tom Exp $ .TH @TABS@ 1 "" .ds n 5 .SH NAME \fB@TABS@\fR \- set tabs on a terminal .SH SYNOPSIS \fB@TABS@\fR [\fIoptions\fR]] \fI[tabstop-list]\fR .SH DESCRIPTION .PP The \fB@TABS@\fP program clears and sets tab-stops on the terminal. This uses the terminfo \fIclear_all_tabs\fP and \fIset_tab\fP capabilities. If either is absent, \fB@TABS@\fP is unable to clear/set tab-stops. The terminal should be configured to use hard tabs, e.g., .sp .RS stty tab0 .RE .SH OPTIONS .SS General Options .TP 5 .BI \-T "name" Tell \fB@TABS@\fP which terminal type to use. If this option is not given, \fB@TABS@\fP will use the \fB$TERM\fP environment variable. If that is not set, it will use the \fIansi+tabs\fP entry. .TP 5 .B \-d The debugging option shows a ruler line, followed by two data lines. The first data line shows the expected tab-stops marked with asterisks. The second data line shows the actual tab-stops, marked with asterisks. .TP 5 .B \-n This option tells \fB@TABS@\fP to check the options and run any debugging option, but not to modify the terminal settings. .TP \fB\-V\fR reports the version of ncurses which was used in this program, and exits. .PP The \fB@TABS@\fP program processes a single list of tab stops. The last option to be processed which defines a list is the one that determines the list to be processed. .SS Implicit Lists Use a single number as an option, e.g., "\fB\-5\fP" to set tabs at the given interval (in this case 1, 6, 11, 16, 21, etc.). Tabs are repeated up to the right margin of the screen. .PP Use "\fB\-0\fP" to clear all tabs. .PP Use "\fB\-8\fP" to set tabs to the standard interval. .SS Explicit Lists An explicit list can be defined after the options (this does not use a "\-"). The values in the list must be in increasing numeric order, and greater than zero. They are separated by a comma or a blank, for example, .sp .RS tabs 1,6,11,16,21 .br tabs 1 6 11 16 21 .RE Use a '+' to treat a number as an increment relative to the previous value, e.g., .sp .RS tabs 1,+5,+5,+5,+5 .RE which is equivalent to the 1,6,11,16,21 example. .SS Predefined Tab-Stops X/Open defines several predefined lists of tab stops. .TP 5 .B \-a Assembler, IBM S/370, first format .TP 5 .B \-a2 Assembler, IBM S/370, second format .TP 5 .B \-c COBOL, normal format .TP 5 .B \-c2 COBOL compact format .TP 5 .B \-c3 COBOL compact format extended .TP 5 .B \-f FORTRAN .TP 5 .B \-p PL/I .TP 5 .B \-s SNOBOL .TP 5 .B \-u UNIVAC 1100 Assembler .SH PORTABILITY .PP X/Open describes a \fB+m\fP option, to set a terminal's left-margin. Very few of the entries in the terminal database provide this capability. .PP The \fB\-d\fP (debug) and \fB\-n\fP (no-op) options are extensions not provided by other implementations. .PP Documentation for other implementations states that there is a limit on the number of tab stops. While some terminals may not accept an arbitrary number of tab stops, this implementation will attempt to set tab stops up to the right margin of the screen, if the given list happens to be that long. .SH SEE ALSO \fB@TSET@\fR(1), \fB@INFOCMP@\fR(1M), \fBcurses\fR(3X), \fBterminfo\fR(\*n). .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). ncurses-6.0-20160213/man/form_field.3x0000644000175100001440000000774112045321337015622 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_field.3x,v 1.11 2012/11/03 23:03:59 tom Exp $ .TH form_field 3X "" .SH NAME \fBform_field\fR \- make and break connections between fields and forms .SH SYNOPSIS \fB#include \fR .br int set_form_fields(FORM *form, FIELD **fields); .br FIELD **form_fields(const FORM *form); .br int field_count(const FORM *form); .br int move_field(FIELD *field, int frow, int fcol); .br .SH DESCRIPTION The function \fBset_form_fields\fR changes the field pointer array of the given \fIform\fR. The array must be terminated by a \fBNULL\fR. .PP The function \fBform_fields\fR returns the field array of the given form. .PP The function \fBfield_count\fR returns the count of fields in \fIform\fR. .PP The function \fBmove_field\fR moves the given field (which must be disconnected) to a specified location on the screen. .SH RETURN VALUE The function \fBform_fields\fR returns a pointer (which may be \fBNULL\fR). It does not set errno. .PP The function \fBfield_count\fR returns \fBERR\fR if the \fIform\fP parameter is \fBNULL\fP. .PP The functions \fBset_form_fields\fR and \fBmove_field\fR return one of the following codes on error: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_CONNECTED The field is already connected to a form. .TP 5 .B E_POSTED The form is already posted. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .PP The SVr4 forms library documentation specifies the \fBfield_count\fR error value as \-1 (which is the value of \fBERR\fR). .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/menu_attributes.3x0000644000175100001440000001056312630646272016732 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_attributes.3x,v 1.13 2015/12/05 20:44:42 jmc Exp $ .TH menu_attributes 3X "" .SH NAME \fBmenu_back\fR, \fBmenu_fore\fR, \fBmenu_grey\fR, \fBmenu_pad\fR, \fBset_menu_back\fR, \fBset_menu_fore\fR, \fBset_menu_grey\fR, \fBset_menu_pad\fR \- color and attribute control for menus .SH SYNOPSIS \fB#include \fR .br int set_menu_fore(MENU *menu, chtype attr); .br chtype menu_fore(const MENU *menu); .br int set_menu_back(MENU *menu, chtype attr); .br chtype menu_back(const MENU *menu); .br int set_menu_grey(MENU *menu, chtype attr); .br chtype menu_grey(const MENU *menu); .br int set_menu_pad(MENU *menu, int pad); .br int menu_pad(const MENU *menu); .br .SH DESCRIPTION The function \fBset_menu_fore\fR sets the foreground attribute of \fImenu\fR. This is the highlight used for selected menu items. \fBmenu_fore\fR returns the foreground attribute. The default is \fBA_REVERSE\fR. .PP The function \fBset_menu_back\fR sets the background attribute of \fImenu\fR. This is the highlight used for selectable (but not currently selected) menu items. The function \fBmenu_back\fR returns the background attribute. The default is \fBA_NORMAL\fR. .PP The function \fBset_menu_grey\fR sets the grey attribute of \fImenu\fR. This is the highlight used for un-selectable menu items in menus that permit more than one selection. The function \fBmenu_grey\fR returns the grey attribute. The default is \fBA_UNDERLINE\fR. .PP The function \fBset_menu_pad\fR sets the character used to fill the space between the name and description parts of a menu item. \fBmenu_pad\fR returns the given menu's pad character. The default is a blank. .SH RETURN VALUE These routines return one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .SH SEE ALSO \fBcurses\fR(3X) and related pages whose names begin "menu_" for detailed descriptions of the entry points. .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_inopts.3x0000644000175100001440000003260612626375160016072 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_inopts.3x,v 1.20 2015/11/28 19:03:12 Benno.Schulenberg Exp $ .TH curs_inopts 3X "" .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .na .hy 0 .SH NAME \fBcbreak\fR, \fBnocbreak\fR, \fBecho\fR, \fBnoecho\fR, \fBhalfdelay\fR, \fBintrflush\fR, \fBkeypad\fR, \fBmeta\fR, \fBnodelay\fR, \fBnotimeout\fR, \fBraw\fR, \fBnoraw\fR, \fBnoqiflush\fR, \fBqiflush\fR, \fBtimeout\fR, \fBwtimeout\fR, \fBtypeahead\fR \- \fBcurses\fR input options .ad .hy .SH SYNOPSIS \fB#include \fR .PP \fBint cbreak(void);\fR .br \fBint nocbreak(void);\fR .br \fBint echo(void);\fR .br \fBint noecho(void);\fR .br \fBint halfdelay(int tenths);\fR .br \fBint intrflush(WINDOW *win, bool bf);\fR .br \fBint keypad(WINDOW *win, bool bf);\fR .br \fBint meta(WINDOW *win, bool bf);\fR .br \fBint nodelay(WINDOW *win, bool bf);\fR .br \fBint raw(void);\fR .br \fBint noraw(void);\fR .br \fBvoid noqiflush(void);\fR .br \fBvoid qiflush(void);\fR .br \fBint notimeout(WINDOW *win, bool bf);\fR .br \fBvoid timeout(int delay);\fR .br \fBvoid wtimeout(WINDOW *win, int delay);\fR .br \fBint typeahead(int fd);\fR .br .SH DESCRIPTION The \fBncurses\fP library provides several functions which let an application change the way input from the terminal is handled. Some are global, applying to all windows. Others apply only to a specific window. Window-specific settings are not automatically applied to new or derived windows. An application must apply these to each window, if the same behavior is needed. .\" .SS cbreak Normally, the tty driver buffers typed characters until a newline or carriage return is typed. The \fBcbreak\fR routine disables line buffering and erase/kill character-processing (interrupt and flow control characters are unaffected), making characters typed by the user immediately available to the program. The \fBnocbreak\fR routine returns the terminal to normal (cooked) mode. .PP Initially the terminal may or may not be in \fBcbreak\fR mode, as the mode is inherited; therefore, a program should call \fBcbreak\fR or \fBnocbreak\fR explicitly. Most interactive programs using \fBcurses\fR set the \fBcbreak\fR mode. Note that \fBcbreak\fR overrides \fBraw\fR. [See \fBcurs_getch\fR(3X) for a discussion of how these routines interact with \fBecho\fR and \fBnoecho\fR.] .\" .SS echo/noecho .PP The \fBecho\fR and \fBnoecho\fR routines control whether characters typed by the user are echoed by \fBgetch\fR as they are typed. Echoing by the tty driver is always disabled, but initially \fBgetch\fR is in echo mode, so characters typed are echoed. Authors of most interactive programs prefer to do their own echoing in a controlled area of the screen, or not to echo at all, so they disable echoing by calling \fBnoecho\fR. [See \fBcurs_getch\fR(3X) for a discussion of how these routines interact with \fBcbreak\fR and \fBnocbreak\fR.] .\" .SS halfdelay .PP The \fBhalfdelay\fR routine is used for half-delay mode, which is similar to \fBcbreak\fR mode in that characters typed by the user are immediately available to the program. However, after blocking for \fItenths\fR tenths of seconds, ERR is returned if nothing has been typed. The value of \fItenths\fR must be a number between 1 and 255. Use \fBnocbreak\fR to leave half-delay mode. .\" .SS intrflush .PP If the \fBintrflush\fR option is enabled (\fIbf\fR is \fBTRUE\fR), and an interrupt key is pressed on the keyboard (interrupt, break, quit), all output in the tty driver queue will be flushed, giving the effect of faster response to the interrupt, but causing \fBcurses\fR to have the wrong idea of what is on the screen. Disabling the option (\fIbf\fR is \fBFALSE\fR) prevents the flush. The default for the option is inherited from the tty driver settings. The window argument is ignored. .\" .SS keypad .PP The \fBkeypad\fR option enables the keypad of the user's terminal. If enabled (\fIbf\fR is \fBTRUE\fR), the user can press a function key (such as an arrow key) and \fBwgetch\fR returns a single value representing the function key, as in \fBKEY_LEFT\fR. If disabled (\fIbf\fR is \fBFALSE\fR), \fBcurses\fR does not treat function keys specially and the program has to interpret the escape sequences itself. If the keypad in the terminal can be turned on (made to transmit) and off (made to work locally), turning on this option causes the terminal keypad to be turned on when \fBwgetch\fR is called. The default value for keypad is \fBFALSE\fP. .\" .SS meta .PP Initially, whether the terminal returns 7 or 8 significant bits on input depends on the control mode of the tty driver [see termio(7)]. To force 8 bits to be returned, invoke \fBmeta\fR(\fIwin\fR, \fBTRUE\fR); this is equivalent, under POSIX, to setting the CS8 flag on the terminal. To force 7 bits to be returned, invoke \fBmeta\fR(\fIwin\fR, \fBFALSE\fR); this is equivalent, under POSIX, to setting the CS7 flag on the terminal. The window argument, \fIwin\fR, is always ignored. If the terminfo capabilities \fBsmm\fR (meta_on) and \fBrmm\fR (meta_off) are defined for the terminal, \fBsmm\fR is sent to the terminal when \fBmeta\fR(\fIwin\fR, \fBTRUE\fR) is called and \fBrmm\fR is sent when \fBmeta\fR(\fIwin\fR, \fBFALSE\fR) is called. .\" .SS nodelay .PP The \fBnodelay\fR option causes \fBgetch\fR to be a non-blocking call. If no input is ready, \fBgetch\fR returns \fBERR\fR. If disabled (\fIbf\fR is \fBFALSE\fR), \fBgetch\fR waits until a key is pressed. .PP While interpreting an input escape sequence, \fBwgetch\fR sets a timer while waiting for the next character. If \fBnotimeout(\fR\fIwin\fR, \fBTRUE\fR) is called, then \fBwgetch\fR does not set a timer. The purpose of the timeout is to differentiate between sequences received from a function key and those typed by a user. .\" .SS raw/noraw .PP The \fBraw\fR and \fBnoraw\fR routines place the terminal into or out of raw mode. Raw mode is similar to \fBcbreak\fR mode, in that characters typed are immediately passed through to the user program. The differences are that in raw mode, the interrupt, quit, suspend, and flow control characters are all passed through uninterpreted, instead of generating a signal. The behavior of the BREAK key depends on other bits in the tty driver that are not set by \fBcurses\fR. .\" .SS noqiflush .PP When the \fBnoqiflush\fR routine is used, normal flush of input and output queues associated with the \fBINTR\fR, \fBQUIT\fR and \fBSUSP\fR characters will not be done [see termio(7)]. When \fBqiflush\fR is called, the queues will be flushed when these control characters are read. You may want to call \fBnoqiflush()\fR in a signal handler if you want output to continue as though the interrupt had not occurred, after the handler exits. .\" .SS timeout/wtimeout .PP The \fBtimeout\fR and \fBwtimeout\fR routines set blocking or non-blocking read for a given window. If \fIdelay\fR is negative, blocking read is used (i.e., waits indefinitely for input). If \fIdelay\fR is zero, then non-blocking read is used (i.e., read returns \fBERR\fR if no input is waiting). If \fIdelay\fR is positive, then read blocks for \fIdelay\fR milliseconds, and returns \fBERR\fR if there is still no input. Hence, these routines provide the same functionality as \fBnodelay\fR, plus the additional capability of being able to block for only \fIdelay\fR milliseconds (where \fIdelay\fR is positive). .\" .SS typeahead .PP The \fBcurses\fR library does \*(``line-breakout optimization\*('' by looking for typeahead periodically while updating the screen. If input is found, and it is coming from a tty, the current update is postponed until \fBrefresh\fR or \fBdoupdate\fR is called again. This allows faster response to commands typed in advance. Normally, the input FILE pointer passed to \fBnewterm\fR, or \fBstdin\fR in the case that \fBinitscr\fR was used, will be used to do this typeahead checking. The \fBtypeahead\fR routine specifies that the file descriptor \fIfd\fR is to be used to check for typeahead instead. If \fIfd\fR is \-1, then no typeahead checking is done. .\" .SH RETURN VALUE All routines that return an integer return \fBERR\fR upon failure and OK (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful completion, unless otherwise noted in the preceding routine descriptions. .PP X/Open does not define any error conditions. In this implementation, functions with a window parameter will return an error if it is null. Any function will also return an error if the terminal was not initialized. Also, .RS .TP 5 \fBhalfdelay\fP returns an error if its parameter is outside the range 1..255. .RE .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. .PP The ncurses library obeys the XPG4 standard and the historical practice of the AT&T curses implementations, in that the echo bit is cleared when curses initializes the terminal state. BSD curses differed from this slightly; it left the echo bit on at initialization, but the BSD \fBraw\fR call turned it off as a side-effect. For best portability, set echo or noecho explicitly just after initialization, even if your program remains in cooked mode. .PP When \fBkeypad\fP is first enabled, ncurses loads the key-definitions for the current terminal description. If the terminal description includes extended string capabilities, e.g., from using the \fB\-x\fP option of @TIC@, then ncurses also defines keys for the capabilities whose names begin with "k". The corresponding keycodes are generated and (depending on previous loads of terminal descriptions) may differ from one execution of a program to the next. The generated keycodes are recognized by the \fBkeyname\fP function (which will then return a name beginning with "k" denoting the terminfo capability name rather than "K", used for curses key-names). On the other hand, an application can use \fBdefine_key\fP to establish a specific keycode for a given string. This makes it possible for an application to check for an extended capability's presence with \fItigetstr\fP, and reassign the keycode to match its own needs. .PP Low-level applications can use \fBtigetstr\fP to obtain the definition of any particular string capability. Higher-level applications which use the curses \fBwgetch\fP and similar functions to return keycodes rely upon the order in which the strings are loaded. If more than one key definition has the same string value, then \fBwgetch\fP can return only one keycode. Most curses implementations (including ncurses) load key definitions in the order defined by the array of string capability names. The last key to be loaded determines the keycode which will be returned. In ncurses, you may also have extended capabilities interpreted as key definitions. These are loaded after the predefined keys, and if a capability's value is the same as a previously-loaded key definition, the later definition is the one used. .SH NOTES Note that \fBecho\fR, \fBnoecho\fR, \fBhalfdelay\fR, \fBintrflush\fR, \fBmeta\fR, \fBnodelay\fR, \fBnotimeout\fR, \fBnoqiflush\fR, \fBqiflush\fR, \fBtimeout\fR, and \fBwtimeout\fR may be macros. .PP The \fBnoraw\fR and \fBnocbreak\fR calls follow historical practice in that they attempt to restore to normal (`cooked') mode from raw and cbreak modes respectively. Mixing raw/noraw and cbreak/nocbreak calls leads to tty driver control states that are hard to predict or understand; it is not recommended. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_getch\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_util\fR(3X), \fBdefine_key\fR(3X), \fBtermio\fR(7) ncurses-6.0-20160213/man/curs_insstr.3x0000644000175100001440000001076011476505277016103 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_insstr.3x,v 1.21 2010/12/04 18:38:55 tom Exp $ .TH curs_insstr 3X "" .SH NAME \fBinsstr\fR, \fBinsnstr\fR, \fBwinsstr\fR, \fBwinsnstr\fR, \fBmvinsstr\fR, \fBmvinsnstr\fR, \fBmvwinsstr\fR, \fBmvwinsnstr\fR \- insert string before cursor in a \fBcurses\fR window .SH SYNOPSIS \fB#include \fR .br \fBint insstr(const char *str);\fR .br \fBint insnstr(const char *str, int n);\fR .br \fBint winsstr(WINDOW *win, const char *str);\fR .br \fBint winsnstr(WINDOW *win, const char *str, int n);\fR .br \fBint mvinsstr(int y, int x, const char *str);\fR .br \fBint mvinsnstr(int y, int x, const char *str, int n);\fR .br \fBint mvwinsstr(WINDOW *win, int y, int x, const char *str);\fR .br \fBint mvwinsnstr(WINDOW *win, int y, int x, const char *str, int n);\fR .br .SH DESCRIPTION These routines insert a character string (as many characters as will fit on the line) before the character under the cursor. All characters to the right of the cursor are shifted right with the possibility of the rightmost characters on the line being lost. The cursor position does not change (after moving to \fIy\fR, \fIx\fR, if specified). The functions with \fIn\fR as the last argument insert a leading substring of at most \fIn\fR characters. If \fIn\fR<=0, then the entire string is inserted. .PP Special characters are handled as in \fBaddch\fP. .SH RETURN VALUE All routines that return an integer return \fBERR\fR upon failure and OK (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful completion, unless otherwise noted in the preceding routine descriptions. .PP X/Open defines no error conditions. In this implementation, if the window parameter is null or the str parameter is null, an error is returned. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES Note that all but \fBwinsnstr\fR may be macros. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4, which adds const qualifiers to the arguments. .LP The Single Unix Specification, Version 2 states that \fBinsnstr\fP and \fBwinsnstr\fP perform wrapping. This is probably an error, since it makes this group of functions inconsistent. Also, no implementation of curses documents this inconsistency. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_util\fR(3X), \fBcurs_clear\fR(3X), \fBcurs_inch\fR(3X). ncurses-6.0-20160213/man/resizeterm.3x0000644000175100001440000001324312601574064015704 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" Author: Thomas E. Dickey 1996-on .\" .\" $Id: resizeterm.3x,v 1.21 2015/09/26 19:55:32 tom Exp $ .TH resizeterm 3X "" .de bP .IP \(bu 4 .. .SH NAME \fBis_term_resized\fR, \fBresize_term\fR, \fBresizeterm\fR \- change the curses terminal size .SH SYNOPSIS \fB#include \fR .sp \fBbool is_term_resized(int lines, int columns);\fR .br \fBint resize_term(int lines, int columns);\fR .br \fBint resizeterm(int lines, int columns);\fR .SH DESCRIPTION .PP This is an extension to the curses library. It provides callers with a hook into the \fBncurses\fR data to resize windows, primarily for use by programs running in an X Window terminal (e.g., xterm). .SS resizeterm .PP The function \fBresizeterm\fR resizes the standard and current windows to the specified dimensions, and adjusts other bookkeeping data used by the \fBncurses\fR library that record the window dimensions such as the \fBLINES\fP and \fBCOLS\fP variables. .SS resize_term .PP Most of the work is done by the inner function \fBresize_term\fR. The outer function \fBresizeterm\fR adds bookkeeping for the SIGWINCH handler. When resizing the windows, \fBresize_term\fR blank-fills the areas that are extended. The calling application should fill in these areas with appropriate data. The \fBresize_term\fR function attempts to resize all windows. However, due to the calling convention of pads, it is not possible to resize these without additional interaction with the application. .SS is_term_resized .PP A support function \fBis_term_resized\fR is provided so that applications can check if the \fBresize_term\fR function would modify the window structures. It returns \fBTRUE\fP if the windows would be modified, and \fBFALSE\fP otherwise. .SH RETURN VALUE Except as noted, these functions return the integer \fBERR\fR upon failure and \fBOK\fR on success. They will fail if either of the dimensions are less than or equal to zero, or if an error occurs while (re)allocating memory for the windows. .SH NOTES While these functions are intended to be used to support a signal handler (i.e., for SIGWINCH), care should be taken to avoid invoking them in a context where \fBmalloc\fR or \fBrealloc\fR may have been interrupted, since it uses those functions. .PP If ncurses is configured to supply its own SIGWINCH handler, .bP on receipt of a SIGWINCH, the handler sets a flag .bP which is tested in \fBwgetch\fP and \fBdoupdate\fP, .bP in turn, calling the \fBresizeterm\fR function, .bP which \fBungetch\fP's a \fBKEY_RESIZE\fR which will be read on the next call to \fBwgetch\fR. .IP The \fBKEY_RESIZE\fP alerts an application that the screen size has changed, and that it should repaint special features such as pads that cannot be done automatically. .IP Calling \fBresizeterm\fP or \fBresize_term\fP directly from a signal handler is unsafe. This indirect method is used to provide a safe way to resize the ncurses data structures. .PP If the environment variables \fBLINES\fP or \fBCOLUMNS\fP are set, this overrides the library's use of the window size obtained from the operating system. Thus, even if a SIGWINCH is received, no screen size change may be recorded. .SH PORTABILITY .PP It is possible to resize the screen with SVr4 curses, by .bP exiting curses with \fBendwin\fP(3X) and .bP resuming using \fBrefresh\fP(3X). .PP Doing that clears the screen and is visually distracting. .PP This extension of ncurses was introduced in mid-1995. It was adopted in NetBSD curses (2001) and PDCurses (2003). .SH SEE ALSO \fBcurs_getch\fR(3X), \fBcurs_variables\fR(3X), \fBwresize\fR(3X). .SH AUTHOR Thomas Dickey (from an equivalent function written in 1988 for BSD curses). ncurses-6.0-20160213/man/term.70000644000175100001440000002245111673223201014267 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: term.7,v 1.23 2011/12/17 23:32:17 tom Exp $ .TH term 7 .ds n 5 .ds d @TERMINFO@ .SH NAME term \- conventions for naming terminal types .SH DESCRIPTION .PP The environment variable \fBTERM\fR should normally contain the type name of the terminal, console or display-device type you are using. This information is critical for all screen-oriented programs, including your editor and mailer. .PP A default \fBTERM\fR value will be set on a per-line basis by either \fB/etc/inittab\fR (e.g., System\-V-like UNIXes) or \fB/etc/ttys\fR (BSD UNIXes). This will nearly always suffice for workstation and microcomputer consoles. .PP If you use a dialup line, the type of device attached to it may vary. Older UNIX systems pre-set a very dumb terminal type like `dumb' or `dialup' on dialup lines. Newer ones may pre-set `vt100', reflecting the prevalence of DEC VT100-compatible terminals and personal-computer emulators. .PP Modern telnets pass your \fBTERM\fR environment variable from the local side to the remote one. There can be problems if the remote terminfo or termcap entry for your type is not compatible with yours, but this situation is rare and can almost always be avoided by explicitly exporting `vt100' (assuming you are in fact using a VT100-superset console, terminal, or terminal emulator.) .PP In any case, you are free to override the system \fBTERM\fR setting to your taste in your shell profile. The \fB@TSET@\fP(1) utility may be of assistance; you can give it a set of rules for deducing or requesting a terminal type based on the tty device and baud rate. .PP Setting your own \fBTERM\fR value may also be useful if you have created a custom entry incorporating options (such as visual bell or reverse-video) which you wish to override the system default type for your line. .PP Terminal type descriptions are stored as files of capability data underneath \*d. To browse a list of all terminal names recognized by the system, do .sp @TOE@ | more .sp from your shell. These capability files are in a binary format optimized for retrieval speed (unlike the old text-based \fBtermcap\fR format they replace); to examine an entry, you must use the \fB@INFOCMP@\fR(1M) command. Invoke it as follows: .sp @INFOCMP@ \fIentry_name\fR .sp where \fIentry_name\fR is the name of the type you wish to examine (and the name of its capability file the subdirectory of \*d named for its first letter). This command dumps a capability file in the text format described by \fBterminfo\fR(\*n). .PP The first line of a \fBterminfo\fR(\*n) description gives the names by which terminfo knows a terminal, separated by `|' (pipe-bar) characters with the last name field terminated by a comma. The first name field is the type's \fIprimary name\fR, and is the one to use when setting \fBTERM\fR. The last name field (if distinct from the first) is actually a description of the terminal type (it may contain blanks; the others must be single words). Name fields between the first and last (if present) are aliases for the terminal, usually historical names retained for compatibility. .PP There are some conventions for how to choose terminal primary names that help keep them informative and unique. Here is a step-by-step guide to naming terminals that also explains how to parse them: .PP First, choose a root name. The root will consist of a lower-case letter followed by up to seven lower-case letters or digits. You need to avoid using punctuation characters in root names, because they are used and interpreted as filenames and shell meta-characters (such as !, $, *, ?, etc.) embedded in them may cause odd and unhelpful behavior. The slash (/), or any other character that may be interpreted by anyone's file system (\e, $, [, ]), is especially dangerous (terminfo is platform-independent, and choosing names with special characters could someday make life difficult for users of a future port). The dot (.) character is relatively safe as long as there is at most one per root name; some historical terminfo names use it. .PP The root name for a terminal or workstation console type should almost always begin with a vendor prefix (such as \fBhp\fR for Hewlett-Packard, \fBwy\fR for Wyse, or \fBatt\fR for AT&T terminals), or a common name of the terminal line (\fBvt\fR for the VT series of terminals from DEC, or \fBsun\fR for Sun Microsystems workstation consoles, or \fBregent\fR for the ADDS Regent series. You can list the terminfo tree to see what prefixes are already in common use. The root name prefix should be followed when appropriate by a model number; thus \fBvt100\fR, \fBhp2621\fR, \fBwy50\fR. .PP The root name for a PC-Unix console type should be the OS name, i.e., \fBlinux\fR, \fBbsdos\fR, \fBfreebsd\fR, \fBnetbsd\fR. It should \fInot\fR be \fBconsole\fR or any other generic that might cause confusion in a multi-platform environment! If a model number follows, it should indicate either the OS release level or the console driver release level. .PP The root name for a terminal emulator (assuming it does not fit one of the standard ANSI or vt100 types) should be the program name or a readily recognizable abbreviation of it (i.e., \fBversaterm\fR, \fBctrm\fR). .PP Following the root name, you may add any reasonable number of hyphen-separated feature suffixes. .TP 5 2p Has two pages of memory. Likewise 4p, 8p, etc. .TP 5 mc Magic-cookie. Some terminals (notably older Wyses) can only support one attribute without magic-cookie lossage. Their base entry is usually paired with another that has this suffix and uses magic cookies to support multiple attributes. .TP 5 \-am Enable auto-margin (right-margin wraparound). .TP 5 \-m Mono mode \- suppress color support. .TP 5 \-na No arrow keys \- termcap ignores arrow keys which are actually there on the terminal, so the user can use the arrow keys locally. .TP 5 \-nam No auto-margin \- suppress am capability. .TP 5 \-nl No labels \- suppress soft labels. .TP 5 \-nsl No status line \- suppress status line. .TP 5 \-pp Has a printer port which is used. .TP 5 \-rv Terminal in reverse video mode (black on white). .TP 5 \-s Enable status line. .TP 5 \-vb Use visible bell (flash) rather than beep. .TP 5 \-w Wide; terminal is in 132 column mode. .PP Conventionally, if your terminal type is a variant intended to specify a line height, that suffix should go first. So, for a hypothetical FuBarCo model 2317 terminal in 30-line mode with reverse video, best form would be \fBfubar\-30\-rv\fR (rather than, say, `fubar\-rv\-30'). .PP Terminal types that are written not as standalone entries, but rather as components to be plugged into other entries via \fBuse\fP capabilities, are distinguished by using embedded plus signs rather than dashes. .PP Commands which use a terminal type to control display often accept a \-T option that accepts a terminal name argument. Such programs should fall back on the \fBTERM\fR environment variable when no \-T option is specified. .SH PORTABILITY For maximum compatibility with older System V UNIXes, names and aliases should be unique within the first 14 characters. .SH FILES .TP 5 \*d/?/* compiled terminal capability data base .TP 5 /etc/inittab tty line initialization (AT&T-like UNIXes) .TP 5 /etc/ttys tty line initialization (BSD-like UNIXes) .SH SEE ALSO \fBcurses\fR(3X), \fBterminfo\fR(\*n), \fBterm\fR(\*n). ncurses-6.0-20160213/man/terminfo.head0000644000175100001440000001240612116731630015700 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: terminfo.head,v 1.21 2013/03/09 22:11:36 tom Exp $ .TH terminfo 5 "" "" "File Formats" .ds n 5 .ds d @TERMINFO@ .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .de bP .IP \(bu 4 .. .SH NAME terminfo \- terminal capability data base .SH SYNOPSIS \*d/*/* .SH DESCRIPTION .I Terminfo is a data base describing terminals, used by screen-oriented programs such as \fBnvi\fR(1), \fBrogue\fR(1) and libraries such as \fBcurses\fR(3X). .I Terminfo describes terminals by giving a set of capabilities which they have, by specifying how to perform screen operations, and by specifying padding requirements and initialization sequences. This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). .PP Entries in .I terminfo consist of a sequence of `,' separated fields (embedded commas may be escaped with a backslash or notated as \\054). White space after the `,' separator is ignored. The first entry for each terminal gives the names which are known for the terminal, separated by `|' characters. The first name given is the most common abbreviation for the terminal, the last name given should be a long name fully identifying the terminal, and all others are understood as synonyms for the terminal name. All names but the last should be in lower case and contain no blanks; the last name may well contain upper case and blanks for readability. .PP Lines beginning with a `#' in the first column are treated as comments. While comment lines are legal at any point, the output of \fB@CAPTOINFO@\fP and \fB@INFOTOCAP@\fP (aliases for \fB@TIC@\fP) will move comments so they occur only between entries. .PP Newlines and leading tabs may be used for formatting entries for readability. These are removed from parsed entries. The \fB@INFOCMP@\ \-f\fP option relies on this to format if-then-else expressions: the result can be read by \fB@TIC@\fP. .PP Terminal names (except for the last, verbose entry) should be chosen using the following conventions. The particular piece of hardware making up the terminal should have a root name, thus \*(``hp2621\*(''. This name should not contain hyphens. Modes that the hardware can be in, or user preferences, should be indicated by appending a hyphen and a mode suffix. Thus, a vt100 in 132 column mode would be vt100\-w. The following suffixes should be used where possible: .PP .TS center ; l c l l l l. \fBSuffix Meaning Example\fP \-\fInn\fP Number of lines on the screen aaa\-60 \-\fIn\fPp Number of pages of memory c100\-4p \-am With automargins (usually the default) vt100\-am \-m Mono mode; suppress color ansi\-m \-mc Magic cookie; spaces when highlighting wy30\-mc \-na No arrow keys (leave them in local) c100\-na \-nam Without automatic margins vt100\-nam \-nl No status line att4415\-nl \-ns No status line hp2626\-ns \-rv Reverse video c100\-rv \-s Enable status line vt100\-s \-vb Use visible bell instead of beep wy370\-vb \-w Wide mode (> 80 columns, usually 132) vt100\-w .TE .PP For more on terminal naming conventions, see the \fBterm(7)\fR manual page. .SS Predefined Capabilities .\" Head of terminfo man page ends here .ps -1 ncurses-6.0-20160213/man/mitem_visible.3x0000644000175100001440000000557511476505455016363 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: mitem_visible.3x,v 1.7 2010/12/04 18:40:45 tom Exp $ .TH mitem_visible 3X "" .SH NAME \fBmitem_visible\fR \- check visibility of a menu item .SH SYNOPSIS \fB#include \fR .br bool item_visible(const ITEM *item); .br .SH DESCRIPTION A menu item is visible when it is in the portion of a posted menu that is mapped onto the screen (if the menu is scrollable, in particular, this portion will be smaller than the whole menu). .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/form_data.3x0000644000175100001440000000577612630666274015472 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_data.3x,v 1.11 2015/12/05 23:01:16 tom Exp $ .TH form_data 3X "" .SH NAME \fBdata_ahead\fP, \fBdata_behind\fR \- test for off-screen data in given forms .SH SYNOPSIS \fB#include \fR .br bool data_ahead(const FORM *form); .br bool data_behind(const FORM *form); .br .SH DESCRIPTION The function \fBdata_ahead\fR tests whether there is off-screen data ahead in the given form. It returns TRUE (1) or FALSE (0). .PP The function \fBdata_behind\fR tests whether there is off-screen data behind in the given form. It returns TRUE (1) or FALSE (0). .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_scr_dump.3x0000644000175100001440000001122011476505455016363 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_scr_dump.3x,v 1.9 2010/12/04 18:40:45 tom Exp $ .TH curs_scr_dump 3X "" .na .hy 0 .SH NAME \fBscr_dump\fR, \fBscr_restore\fR, \fBscr_init\fR, \fBscr_set\fR \- read (write) a \fBcurses\fR screen from (to) a file .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint scr_dump(const char *filename);\fR .br \fBint scr_restore(const char *filename);\fR .br \fBint scr_init(const char *filename);\fR .br \fBint scr_set(const char *filename);\fR .br .SH DESCRIPTION The \fBscr_dump\fR routine dumps the current contents of the virtual screen to the file \fIfilename\fR. .PP The \fBscr_restore\fR routine sets the virtual screen to the contents of \fIfilename\fR, which must have been written using \fBscr_dump\fR. The next call to \fBdoupdate\fR restores the screen to the way it looked in the dump file. .PP The \fBscr_init\fR routine reads in the contents of \fIfilename\fR and uses them to initialize the \fBcurses\fR data structures about what the terminal currently has on its screen. If the data is determined to be valid, \fBcurses\fR bases its next update of the screen on this information rather than clearing the screen and starting from scratch. \fBscr_init\fR is used after \fBinitscr\fR or a \fBsystem\fR call to share the screen with another process which has done a \fBscr_dump\fR after its \fBendwin\fR call. The data is declared invalid if the terminfo capabilities \fBrmcup\fR and \fBnrrmc\fR exist; also if the terminal has been written to since the preceding \fBscr_dump\fR call. .PP The \fBscr_set\fR routine is a combination of \fBscr_restore\fR and \fBscr_init\fR. It tells the program that the information in \fIfilename\fR is what is currently on the screen, and also what the program wants on the screen. This can be thought of as a screen inheritance function. .PP To read (write) a window from (to) a file, use the \fBgetwin\fR and \fBputwin\fR routines [see \fBcurs_util\fR(3X)]. .SH RETURN VALUE All routines return the integer \fBERR\fR upon failure and \fBOK\fR upon success. .PP X/Open defines no error conditions. In this implementation, each will return an error if the file cannot be opened. .SH NOTES Note that \fBscr_init\fR, \fBscr_set\fR, and \fBscr_restore\fR may be macros. .SH PORTABILITY The XSI Curses standard, Issue 4, describes these functions (adding the const qualifiers). .PP The SVr4 docs merely say under \fBscr_init\fR that the dump data is also considered invalid "if the time-stamp of the tty is old" but do not define "old". .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_refresh\fR(3X), \fBcurs_util\fR(3X), \fBsystem\fR(3) ncurses-6.0-20160213/man/menu_format.3x0000644000175100001440000000745712630666274016050 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_format.3x,v 1.13 2015/12/05 23:01:16 tom Exp $ .TH menu_format 3X "" .SH NAME \fBset_menu_format\fP, \fBmenu_format\fP \- set and get menu sizes .SH SYNOPSIS \fB#include \fR .br int set_menu_format(MENU *menu, int rows, int cols); .br void menu_format(const MENU *menu, int *rows, int *cols); .br .SH DESCRIPTION The function \fBset_menu_format\fR sets the maximum display size of the given menu. If this size is too small to display all menu items, the menu will be made scrollable. If this size is larger than the menus subwindow and the subwindow is too small to display all menu items, \fBpost_menu()\fR will fail. .PP The default format is 16 rows, 1 column. Calling \fBset_menu_format\fR with a null menu pointer will change this default. A zero row or column argument to \fBset_menu_format\fR is interpreted as a request not to change the current value. .PP The function \fBmenu_format\fR returns the maximum-size constraints for the given menu into the storage addressed by \fBrows\fR and \fBcols\fR. .SH RETURN VALUE These routines returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_POSTED The menu is already posted. .TP 5 .B E_NOT_CONNECTED No items are connected to the menu. .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_kernel.3x0000644000175100001440000002027612553315763016040 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_kernel.3x,v 1.20 2015/07/21 01:10:11 tom Exp $ .de bP .IP \(bu 4 .. .TH curs_kernel 3X "" .na .hy 0 .SH NAME \fBdef_prog_mode\fR, \fBdef_shell_mode\fR, \fBreset_prog_mode\fR, \fBreset_shell_mode\fR, \fBresetty\fR, \fBsavetty\fR, \fBgetsyx\fR, \fBsetsyx\fR, \fBripoffline\fR, \fBcurs_set\fR, \fBnapms\fR \- low-level \fBcurses\fR routines .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBint def_prog_mode(void);\fR .br \fBint def_shell_mode(void);\fR .br \fBint reset_prog_mode(void);\fR .br \fBint reset_shell_mode(void);\fR .br \fBint resetty(void);\fR .br \fBint savetty(void);\fR .br \fBvoid getsyx(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR .br \fBvoid setsyx(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR .br \fBint ripoffline(int \fP\fIline\fP\fB, int (*\fP\fIinit\fP\fB)(WINDOW *, int));\fR .br \fBint curs_set(int \fP\fIvisibility\fP\fB);\fR .br \fBint napms(int \fP\fIms\fP\fB);\fR .br .SH DESCRIPTION The following routines give low-level access to various \fBcurses\fR capabilities. These routines typically are used inside library routines. .SS def_prog_mode, def_shell_mode .PP The \fBdef_prog_mode\fR and \fBdef_shell_mode\fR routines save the current terminal modes as the "program" (in \fBcurses\fR) or "shell" (not in \fBcurses\fR) state for use by the \fBreset_prog_mode\fR and \fBreset_shell_mode\fR routines. This is done automatically by \fBinitscr\fR. There is one such save area for each screen context allocated by \fBnewterm()\fR. .SS reset_prog_mode, reset_shell_mode .PP The \fBreset_prog_mode\fR and \fBreset_shell_mode\fR routines restore the terminal to "program" (in \fBcurses\fR) or "shell" (out of \fBcurses\fR) state. These are done automatically by \fBendwin\fR and, after an \fBendwin\fR, by \fBdoupdate\fR, so they normally are not called. .SS resetty, savetty .PP The \fBresetty\fR and \fBsavetty\fR routines save and restore the state of the terminal modes. \fBsavetty\fR saves the current state in a buffer and \fBresetty\fR restores the state to what it was at the last call to \fBsavetty\fR. .SS getsyx .PP The \fBgetsyx\fR routine returns the current coordinates of the virtual screen cursor in \fIy\fR and \fIx\fR. If \fBleaveok\fR is currently \fBTRUE\fR, then \fB\-1\fR,\fB\-1\fR is returned. If lines have been removed from the top of the screen, using \fBripoffline\fR, \fIy\fR and \fIx\fR include these lines; therefore, \fIy\fR and \fIx\fR should be used only as arguments for \fBsetsyx\fR. .SS setsyx .PP The \fBsetsyx\fR routine sets the virtual screen cursor to \fIy\fR, \fIx\fR. If \fIy\fR and \fIx\fR are both \fB\-1\fR, then \fBleaveok\fR is set. The two routines \fBgetsyx\fR and \fBsetsyx\fR are designed to be used by a library routine, which manipulates \fBcurses\fR windows but does not want to change the current position of the program's cursor. The library routine would call \fBgetsyx\fR at the beginning, do its manipulation of its own windows, do a \fBwnoutrefresh\fR on its windows, call \fBsetsyx\fR, and then call \fBdoupdate\fR. .SS ripoffline .PP The \fBripoffline\fR routine provides access to the same facility that \fBslk_init\fR [see \fBcurs_slk\fR(3X)] uses to reduce the size of the screen. \fBripoffline\fR must be called before \fBinitscr\fR or \fBnewterm\fR is called, to prepare these initial actions: .bP If \fIline\fR is positive, a line is removed from the top of \fBstdscr\fR. .bP if \fIline\fR is negative, a line is removed from the bottom. .PP When the resulting initialization is done inside \fBinitscr\fR, the routine \fBinit\fR (supplied by the user) is called with two arguments: .bP a window pointer to the one-line window that has been allocated and .bP an integer with the number of columns in the window. .PP Inside this initialization routine, the integer variables \fBLINES\fR and \fBCOLS\fR (defined in \fB\fR) are not guaranteed to be accurate and \fBwrefresh\fR or \fBdoupdate\fR must not be called. It is allowable to call \fBwnoutrefresh\fR during the initialization routine. .PP \fBripoffline\fR can be called up to five times before calling \fBinitscr\fR or \fBnewterm\fR. .SS curs_set .PP The \fBcurs_set\fR routine sets the cursor state to invisible, normal, or very visible for \fBvisibility\fR equal to \fB0\fR, \fB1\fR, or \fB2\fR respectively. If the terminal supports the \fIvisibility\fR requested, the previous \fIcursor\fR state is returned; otherwise, \fBERR\fR is returned. .SS napms .PP The \fBnapms\fR routine is used to sleep for \fIms\fR milliseconds. .SH RETURN VALUE Except for \fBcurs_set\fR, these routines always return \fBOK\fR. .PP \fBcurs_set\fR returns the previous cursor state, or \fBERR\fR if the requested \fIvisibility\fR is not supported. .PP X/Open defines no error conditions. In this implementation .TP 5 .na .hy 0 \fBdef_prog_mode\fR, \fBdef_shell_mode\fR, \fBreset_prog_mode\fR, \fBreset_shell_mode\fR .hy .ad return an error if the terminal was not initialized, or if the I/O call to obtain the terminal settings fails. .TP 5 \fBripoffline\fP returns an error if the maximum number of ripped-off lines exceeds the maximum (NRIPS = 5). .SH NOTES Note that \fBgetsyx\fR is a macro, so \fB&\fR is not necessary before the variables \fIy\fR and \fIx\fR. .PP Older SVr4 man pages warn that the return value of \fBcurs_set\fR "is currently incorrect". This implementation gets it right, but it may be unwise to count on the correctness of the return value anywhere else. .PP Both ncurses and SVr4 will call \fBcurs_set\fR in \fBendwin\fR if \fBcurs_set\fR has been called to make the cursor other than normal, i.e., either invisible or very visible. There is no way for ncurses to determine the initial cursor state to restore that. .SH PORTABILITY The functions \fBsetsyx\fR and \fBgetsyx\fR are not described in the XSI Curses standard, Issue 4. All other functions are as described in XSI Curses. .PP The SVr4 documentation describes \fBsetsyx\fR and \fBgetsyx\fR as having return type int. This is misleading, as they are macros with no documented semantics for the return value. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_outopts\fR(3X), \fBcurs_refresh\fR(3X), \fBcurs_scr_dump\fR(3X), \fBcurs_slk\fR(3X), \fBcurs_variables\fR(3X). ncurses-6.0-20160213/man/curs_trace.3x0000644000175100001440000001462312553276064015655 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2000-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_trace.3x,v 1.13 2015/07/20 22:54:44 tom Exp $ .de bP .IP \(bu 4 .. .TH curs_trace 3X "" .na .hy 0 .SH NAME \fB_tracef\fR, \fB_tracedump\fR, \fB_traceattr\fR, \fB_traceattr2\fR, \fB_nc_tracebits\fR, \fB_tracecchar_t\fR, \fB_tracecchar_t2\fR, \fB_tracechar\fR, \fB_tracechtype\fR, \fB_tracechtype2\fR, \fB_tracemouse\fR, \fBtrace\fR \- \fBcurses\fR debugging routines .ad .hy .SH SYNOPSIS \fB#include \fR .sp \fBvoid _tracef(const char *\fP\fIformat\fP\fB, ...);\fR .br \fBvoid _tracedump(const char *\fP\fIlabel\fP\fB, WINDOW *\fP\fIwin\fP\fB);\fR .br \fBchar *_traceattr(attr_t \fP\fIattr\fP\fB);\fR .br \fBchar *_traceattr2(int \fP\fIbuffer\fP\fB, chtype \fP\fIch\fP\fB);\fR .br \fBchar *_nc_tracebits(void);\fR .br \fBchar * _tracecchar_t(const cchar_t *\fP\fIstring\fP\fB);\fR .br \fBchar * _tracecchar_t2(int \fP\fIbuffer\fP\fB, const cchar_t *\fP\fIstring\fP\fB);\fR .br \fBchar *_tracechar(int \fP\fIch\fP\fB);\fR .br \fBchar *_tracechtype(chtype \fP\fIch\fP\fB);\fR .br \fBchar *_tracechtype2(int \fP\fIbuffer\fP\fB, chtype \fP\fIch\fP\fB);\fR .br \fBchar *_tracemouse(const MEVENT *\fP\fIevent\fP\fB);\fR .br \fBvoid trace(const unsigned int \fP\fIparam\fP\fB);\fR .SH DESCRIPTION The \fBtrace\fR routines are used for debugging the ncurses libraries, as well as applications which use the ncurses libraries. These functions are normally available only with the debugging library e.g., \fIlibncurses_g.a\fR, but may be compiled into any model (shared, static, profile) by defining the symbol \fBTRACE\fR. Additionally, some functions are only available with the wide-character configuration of the libraries. .PP The principal parts of this interface are .bP \fBtrace\fR, which selectively enables different tracing features, and .bP \fB_tracef\fR, which writes formatted data to the \fItrace\fR file. .PP Calling \fBtrace\fR with a nonzero parameter opens the file \fBtrace\fR in the current directory for output. The parameter is formed by OR'ing values from the list of \fBTRACE_\fP\fIxxx\fR definitions in \fB\fR. These include: .TP 5 .B TRACE_DISABLE turn off tracing. .TP 5 .B TRACE_TIMES trace user and system times of updates. .TP 5 .B TRACE_TPUTS trace tputs calls. .TP 5 .B TRACE_UPDATE trace update actions, old & new screens. .TP 5 .B TRACE_MOVE trace cursor movement and scrolling. .TP 5 .B TRACE_CHARPUT trace all character outputs. .TP 5 .B TRACE_ORDINARY trace all update actions. The old and new screen contents are written to the trace file for each refresh. .TP 5 .B TRACE_CALLS trace all curses calls. The parameters for each call are traced, as well as return values. .TP 5 .B TRACE_VIRTPUT trace virtual character puts, i.e., calls to \fBaddch\fR. .TP 5 .B TRACE_IEVENT trace low-level input processing, including timeouts. .TP 5 .B TRACE_BITS trace state of TTY control bits. .TP 5 .B TRACE_ICALLS trace internal/nested calls. .TP 5 .B TRACE_CCALLS trace per-character calls. .TP 5 .B TRACE_DATABASE trace read/write of terminfo/termcap data. .TP 5 .B TRACE_ATTRS trace changes to video attributes and colors. .TP 5 .B TRACE_MAXIMUM maximum trace level, enables all of the separate trace features. .PP Some tracing features are enabled whenever the \fBtrace\fR parameter is nonzero. Some features overlap. The specific names are used as a guideline. .PP The other functions either return a pointer to a string-area (allocated by the corresponding function), or return no value (such as \fB_tracedump\fP, which implements the screen dump for \fBTRACE_UPDATE\fP). The caller should not free these strings, since the allocation is reused on successive calls. To work around the problem of a single string-area per function, some use a buffer-number parameter, telling the library to allocate additional string-areas. .PP These functions check the \fBNCURSES_TRACE\fP environment variable, to set the tracing feature as if \fBtrace\fP was called: .RS .PP .na filter, initscr, new_prescr, newterm, nofilter, restartterm, ripoffline, setupterm, slk_init, tgetent, use_env, use_extended_names, use_tioctl .ad .RE .SH RETURN VALUE Routines which return a value are designed to be used as parameters to the \fB_tracef\fR routine. .SH PORTABILITY These functions are not part of the XSI interface. Some other curses implementations are known to have similar, undocumented features, but they are not compatible with ncurses. .SH SEE ALSO \fBcurses\fR(3X). ncurses-6.0-20160213/man/curs_in_wchstr.3x0000644000175100001440000001073412045321337016544 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2002-2010,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_in_wchstr.3x,v 1.9 2012/11/03 23:03:59 tom Exp $ .TH curs_in_wchstr 3X "" .na .hy 0 .SH NAME \fBin_wchstr\fR, \fBin_wchnstr\fR, \fBwin_wchstr\fR, \fBwin_wchnstr\fR, \fBmvin_wchstr\fR, \fBmvin_wchnstr\fR, \fBmvwin_wchstr\fR, \fBmvwin_wchnstr\fR \- get an array of complex characters and renditions from a curses window .ad .hy .SH SYNOPSIS .nf \fB#include \fR .sp \fBint in_wchstr(cchar_t *\fR\fIwchstr\fR\fB);\fR .br \fBint in_wchnstr(cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint win_wchstr(WINDOW *\fR\fIwin\fR\fB, cchar_t *\fR\fIwchstr\fR\fB);\fR .br \fBint win_wchnstr(WINDOW *\fR\fIwin\fR\fB, cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvin_wchstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwchstr\fR\fB);\fR .br \fBint mvin_wchnstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwchstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvwin_wchstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwchstr\fR\fB);\fR .br \fBint mvwin_wchnstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, cchar_t *\fR\fIwchstr\fR, int \fIn\fR\fB);\fR .fi .SH DESCRIPTION These functions return an array of complex characters in \fIwchstr\fR, starting at the current cursor position in the named window. Attributes (rendition) are stored with the characters. .PP The \fBin_wchnstr\fR, \fBmvin_wchnstr\fR, \fBmvwin_wchnstr\fR and \fBwin_wchnstr\fR fill the array with at most \fIn\fR \fBcchar_t\fR elements. .br .SH NOTES Note that all routines except \fBwin_wchnstr\fR may be macros. .PP Reading a line that overflows the array pointed to by \fIwchstr\fR with \fBin_wchstr\fR, \fBmvin_wchstr\fR, \fBmvwin_wchstr\fR or \fBwin_wchstr\fR causes undefined results. Therefore, the use of \fBin_wchnstr\fR, \fBmvin_wchnstr\fR, \fBmvwin_wchnstr\fR, or \fBwin_wchnstr\fR is recommended. .SH RETURN VALUE Upon successful completion, these functions return \fBOK\fR. Otherwise, they return \fBERR\fR. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH PORTABILITY The XSI Curses defines no error conditions. This implementation checks for null pointers, returning ERR in that case. .SH SEE ALSO Functions: \fBcurses\fR(3X), \fBcurs_in_wch\fR(3X), \fBcurs_instr\fR(3X), \fBcurs_inwstr\fR(3X) \fBcurs_inchstr\fR(3X) ncurses-6.0-20160213/man/form_field_attributes.3x0000644000175100001440000000763711476505455020110 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_field_attributes.3x,v 1.12 2010/12/04 18:40:45 tom Exp $ .TH form_field_attributes 3X "" .SH NAME \fBform_field_attributes\fR \- color and attribute control for form fields .SH SYNOPSIS \fB#include \fR .br int set_field_fore(FIELD *field, chtype attr); .br chtype field_fore(const FIELD *field); .br int set_field_back(FIELD *field, chtype attr); .br chtype field_back(const FIELD *field); .br int set_field_pad(FIELD *field, int pad); .br int field_pad(const FIELD *field); .br .SH DESCRIPTION The function \fBset_field_fore\fR sets the foreground attribute of \fIfield\fR. This is the highlight used to display the field contents. The function \fBfield_fore\fR returns the foreground attribute. The default is \fBA_STANDOUT\fR. .PP The function \fBset_field_back\fR sets the background attribute of \fIform\fR. This is the highlight used to display the extent fields in the form. The function \fBfield_back\fR returns the background attribute. The default is \fBA_NORMAL\fR. .PP The function \fBset_field_pad\fR sets the character used to fill the field. The function \fBfield_pad\fR returns the given form's pad character. The default is a blank. .SH RETURN VALUE These routines return one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). . .SH SEE ALSO \fBcurses\fR(3X) and related pages whose names begin "form_" for detailed descriptions of the entry points. .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_variables.3x0000644000175100001440000001333012566203302016506 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2010-2013,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_variables.3x,v 1.8 2015/08/22 23:33:22 tom Exp $ .TH curs_variables 3X "" .de bP .IP \(bu 4 .. .ds n 5 .na .hy 0 .SH NAME \fBCOLORS\fR, \fBCOLOR_PAIRS\fR, \fBCOLS\fR, \fBESCDELAY\fR, \fBLINES\fR, \fBTABSIZE\fR, \fBcurscr\fR, \fBnewscr\fR, \fBstdscr\fR \- \fBcurses\fR global variables .ad .hy .SH SYNOPSIS .nf \fB#include \fR .PP \fBint COLOR_PAIRS;\fR .br \fBint COLORS;\fR .br \fBint COLS;\fR .br \fBint ESCDELAY;\fR .br \fBint LINES;\fR .br \fBint TABSIZE;\fR .br \fBWINDOW * curscr;\fR .br \fBWINDOW * newscr;\fR .br \fBWINDOW * stdscr;\fR .fi .SH DESCRIPTION This page summarizes variables provided by the \fBcurses\fP library. A more complete description is given in the \fBcurses\fP(3X) manual page. .PP Depending on the configuration, these may be actual variables, or macros (see \fBcurs_threads\fR(3X) and \fBcurs_opaque\fR(3X)) which provide read-only access to \fIcurses\fP's state. In either case, applications should treat them as read-only to avoid confusing the library. .SS COLOR_PAIRS After initializing curses, this variable contains the number of color pairs which the terminal can support. Usually the number of color pairs will be the product \fBCOLORS\fP*\fBCOLORS\fP, however this is not always true: .bP a few terminals use HLS colors, which do not follow this rule .bP terminals supporting a large number of colors are limited by the number of color pairs that can be represented in a \fIsigned short\fP value. .SS COLORS After initializing curses, this variable contains the number of colors which the terminal can support. .SS COLS After initializing curses, this variable contains the width of the screen, i.e., the number of columns. .SS ESCDELAY This variable holds the number of milliseconds to wait after reading an escape character, to distinguish between an individual escape character entered on the keyboard from escape sequences sent by cursor- and function-keys (see curses(3X). .SS LINES After initializing curses, this variable contains the height of the screen, i.e., the number of lines. .SS TABSIZE This variable holds the number of columns used by the \fIcurses\fP library when converting a tab character to spaces as it adds the tab to a window (see curs_addch(3X). .SS The Current Screen This implementation of curses uses a special window \fBcurscr\fP to record its updates to the terminal screen. .SS The New Screen This implementation of curses uses a special window \fBnewscr\fP to hold updates to the terminal screen before applying them to \fBcurscr\fP. .SS The Standard Screen Upon initializing curses, a default window called \fBstdscr\fP, which is the size of the terminal screen, is created. Many curses functions use this window. .SH NOTES The curses library is initialized using either \fBinitscr\fR(3X), or \fBnewterm\fR(3X). .PP If \fBcurses\fP is configured to use separate curses/terminfo libraries, most of these variables reside in the curses library. .SH PORTABILITY ESCDELAY and TABSIZE are extensions, not provided in most other implementations of curses. .PP ESCDELAY is an extension in AIX curses: .bP In AIX, the units for ESCDELAY are \fIfifths\fP of a millisecond. .bP The default value for AIX's ESCDELAY is 0.1 seconds. .bP AIX also enforces a limit of 10,000 seconds for ESCDELAY; this implementation currently has no upper limit. .PP This implementation has long used ESCDELAY with units of milliseconds, making it impossible to be completely compatible with AIX. Likewise, most users have either decided to override the value, or rely upon its default value. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_opaque\fR(3X), \fBcurs_terminfo\fR(3X), \fBcurs_threads\fR(3X), \fBterm_variables\fR(3X), \fBterminfo\fR(\*n). ncurses-6.0-20160213/man/form_cursor.3x0000644000175100001440000000633112630645617016060 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_cursor.3x,v 1.9 2015/12/05 20:39:43 jmc Exp $ .TH form_cursor 3X "" .SH NAME \fBpos_form_cursor\fR \- position a form window cursor .SH SYNOPSIS \fB#include \fR .br int pos_form_cursor(FORM *form); .br .SH DESCRIPTION The function \fBpos_form_cursor\fR restores the cursor to the position required for the forms driver to continue processing requests. This is useful after \fBcurses\fR routines have been called to do screen-painting in response to a form operation. .SH RETURN VALUE This routine returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_NOT_POSTED The form has not been posted. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). . .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/menu_hook.3x0000644000175100001440000001053511476505455015507 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2007,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_hook.3x,v 1.11 2010/12/04 18:40:45 tom Exp $ .TH menu_hook 3X "" .SH NAME \fBmenu_hook\fR \- set hooks for automatic invocation by applications .SH SYNOPSIS \fB#include \fR .br int set_item_init(MENU *menu, Menu_Hook func); .br Menu_Hook item_init(const MENU *menu); .br int set_item_term(MENU *menu, Menu_Hook func); .br Menu_Hook item_term(const MENU *menu); .br int set_menu_init(MENU *menu, Menu_Hook func); .br Menu_Hook menu_init(const MENU *menu); .br int set_menu_term(MENU *menu, Menu_Hook func); .br Menu_Hook menu_term(const MENU *menu); .br .SH DESCRIPTION These functions make it possible to set hook functions to be called at various points in the automatic processing of input event codes by \fBmenu_driver\fR. .PP The function \fBset_item_init\fR sets a hook to be called at menu-post time and each time the selected item changes (after the change). \fBitem_init\fR returns the current item init hook, if any (\fBNULL\fR if there is no such hook). .PP The function \fBset_item_term\fR sets a hook to be called at menu-unpost time and each time the selected item changes (before the change). \fBitem_term\fR returns the current item term hook, if any (\fBNULL\fR if there is no such hook). .PP The function \fBset_menu_init\fR sets a hook to be called at menu-post time and just after the top row on the menu changes once it is posted. \fBmenu_init\fR returns the current menu init hook, if any (\fBNULL\fR if there is no such hook). .PP The function \fBset_menu_term\fR sets a hook to be called at menu-unpost time and just before the top row on the menu changes once it is posted. \fBmenu_term\fR returns the current menu term hook, if any (\fBNULL\fR if there is no such hook). .SH RETURN VALUE Routines that return pointers return \fBNULL\fR on error. Other routines return one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/form_new.3x0000644000175100001440000000706112630666274015337 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_new.3x,v 1.10 2015/12/05 23:01:16 tom Exp $ .TH form_new 3X "" .SH NAME \fBnew_form\fR, \fBfree_form\fP \- create and destroy forms .SH SYNOPSIS \fB#include \fR .br FORM *new_form(FIELD **fields); .br int free_form(FORM *form); .br .SH DESCRIPTION The function \fBnew_form\fR creates a new form connected to a specified field pointer array (which must be \fBNULL\fR-terminated). .PP The function \fBfree_form\fR disconnects \fIform\fR from its field array and frees the storage allocated for the form. .SH RETURN VALUE The function \fBnew_form\fR returns \fBNULL\fR on error. It sets errno according to the function's success: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_CONNECTED The field is already connected to a form. .TP 5 .B E_SYSTEM_ERROR System error occurred, e.g., malloc failure. .PP The function \fBfree_form\fR returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_POSTED The form has already been posted. .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_mouse.3x0000644000175100001440000003104012553410213015661 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_mouse.3x,v 1.42 2015/07/21 09:27:39 tom Exp $ .de bP .IP \(bu 4 .. .TH curs_mouse 3X "" .na .hy 0 .SH NAME \fBhas_mouse\fR, \fBgetmouse\fR, \fBungetmouse\fR, \fBmousemask\fR, \fBwenclose\fR, \fBmouse_trafo\fR, \fBwmouse_trafo\fR, \fBmouseinterval\fR \- mouse interface through curses .ad .hy .SH SYNOPSIS \fB#include \fR .PP \fBtypedef unsigned long mmask_t;\fR .PP .nf \fBtypedef struct {\fR \fB short id; \fR\fI/* ID to distinguish multiple devices */\fR \fB int x, y, z; \fR\fI/* event coordinates */\fR \fB mmask_t bstate; \fR\fI/* button state bits */\fR \fB} MEVENT;\fR .fi .PP \fBbool has_mouse(void);\fR .br \fBint getmouse(MEVENT *\fP\fIevent\fP\fB);\fR .br \fBint ungetmouse(MEVENT *\fP\fIevent\fP\fB);\fR .br \fBmmask_t mousemask(mmask_t \fP\fInewmask\fP\fB, mmask_t *\fP\fIoldmask\fP\fB);\fR .br \fBbool wenclose(const WINDOW *\fP\fIwin\fP\fB, int \fP\fIy\fP\fB, int \fP\fIx\fP\fB);\fR .br \fBbool mouse_trafo(int* \fP\fIpY\fP\fB, int* \fP\fIpX\fP\fB, bool \fP\fIto_screen\fP\fB);\fR .br \fBbool wmouse_trafo(const WINDOW* \fP\fIwin\fP\fB, int* \fP\fIpY\fP\fB, int* \fP\fIpX\fP\fB,\fR .br \fBbool \fP\fIto_screen\fP\fB);\fR .br \fBint mouseinterval(int \fP\fIerval\fP\fB);\fR .br .SH DESCRIPTION These functions provide an interface to mouse events from \fBncurses\fR(3X). Mouse events are represented by \fBKEY_MOUSE\fR pseudo-key values in the \fBwgetch\fR input stream. .SS mousemask .PP To make mouse events visible, use the \fBmousemask\fR function. This will set the mouse events to be reported. By default, no mouse events are reported. The function will return a mask to indicate which of the specified mouse events can be reported; on complete failure it returns 0. If oldmask is non-NULL, this function fills the indicated location with the previous value of the given window's mouse event mask. .PP As a side effect, setting a zero mousemask may turn off the mouse pointer; setting a nonzero mask may turn it on. Whether this happens is device-dependent. .SS Mouse events .PP Here are the mouse event type masks which may be defined: .PP .TS l l _ _ l l. \fIName\fR \fIDescription\fR BUTTON1_PRESSED mouse button 1 down BUTTON1_RELEASED mouse button 1 up BUTTON1_CLICKED mouse button 1 clicked BUTTON1_DOUBLE_CLICKED mouse button 1 double clicked BUTTON1_TRIPLE_CLICKED mouse button 1 triple clicked _ BUTTON2_PRESSED mouse button 2 down BUTTON2_RELEASED mouse button 2 up BUTTON2_CLICKED mouse button 2 clicked BUTTON2_DOUBLE_CLICKED mouse button 2 double clicked BUTTON2_TRIPLE_CLICKED mouse button 2 triple clicked _ BUTTON3_PRESSED mouse button 3 down BUTTON3_RELEASED mouse button 3 up BUTTON3_CLICKED mouse button 3 clicked BUTTON3_DOUBLE_CLICKED mouse button 3 double clicked BUTTON3_TRIPLE_CLICKED mouse button 3 triple clicked _ BUTTON4_PRESSED mouse button 4 down BUTTON4_RELEASED mouse button 4 up BUTTON4_CLICKED mouse button 4 clicked BUTTON4_DOUBLE_CLICKED mouse button 4 double clicked BUTTON4_TRIPLE_CLICKED mouse button 4 triple clicked _ BUTTON5_PRESSED mouse button 5 down BUTTON5_RELEASED mouse button 5 up BUTTON5_CLICKED mouse button 5 clicked BUTTON5_DOUBLE_CLICKED mouse button 5 double clicked BUTTON5_TRIPLE_CLICKED mouse button 5 triple clicked _ BUTTON_SHIFT shift was down during button state change BUTTON_CTRL control was down during button state change BUTTON_ALT alt was down during button state change ALL_MOUSE_EVENTS report all button state changes REPORT_MOUSE_POSITION report mouse movement _ .TE .SS getmouse .PP Once a class of mouse events has been made visible in a window, calling the \fBwgetch\fR function on that window may return \fBKEY_MOUSE\fR as an indicator that a mouse event has been queued. To read the event data and pop the event off the queue, call \fBgetmouse\fR. This function will return \fBOK\fR if a mouse event is actually visible in the given window, \fBERR\fR otherwise. When \fBgetmouse\fR returns \fBOK\fR, the data deposited as y and x in the event structure coordinates will be screen-relative character-cell coordinates. The returned state mask will have exactly one bit set to indicate the event type. The corresponding data in the queue is marked invalid. A subsequent call to \fBgetmouse\fP will retrieve the next older item from the queue. .SS ungetmouse .PP The \fBungetmouse\fR function behaves analogously to \fBungetch\fR. It pushes a \fBKEY_MOUSE\fR event onto the input queue, and associates with that event the given state data and screen-relative character-cell coordinates. .SS wenclose .PP The \fBwenclose\fR function tests whether a given pair of screen-relative character-cell coordinates is enclosed by a given window, returning \fBTRUE\fP if it is and \fBFALSE\fP otherwise. It is useful for determining what subset of the screen windows enclose the location of a mouse event. .SS wmouse_trafo .PP The \fBwmouse_trafo\fR function transforms a given pair of coordinates from stdscr-relative coordinates to coordinates relative to the given window or vice versa. The resulting stdscr-relative coordinates are not always identical to window-relative coordinates due to the mechanism to reserve lines on top or bottom of the screen for other purposes (see the \fBripoffline\fP and \fBslk_init\fR calls, for example). .bP If the parameter \fBto_screen\fR is \fBTRUE\fR, the pointers \fBpY, pX\fR must reference the coordinates of a location inside the window \fBwin\fR. They are converted to window-relative coordinates and returned through the pointers. If the conversion was successful, the function returns \fBTRUE\fR. .bP If one of the parameters was NULL or the location is not inside the window, \fBFALSE\fR is returned. .bP If \fBto_screen\fR is \fBFALSE\fR, the pointers \fBpY, pX\fR must reference window-relative coordinates. They are converted to stdscr-relative coordinates if the window \fBwin\fR encloses this point. In this case the function returns \fBTRUE\fR. .bP If one of the parameters is NULL or the point is not inside the window, \fBFALSE\fR is returned. The referenced coordinates are only replaced by the converted coordinates if the transformation was successful. .SS mouse_trafo .PP The \fBmouse_trafo\fR function performs the same translation as \fBwmouse_trafo\fR, using stdscr for \fBwin\fR. .SS mouseinterval .PP The \fBmouseinterval\fR function sets the maximum time (in thousands of a second) that can elapse between press and release events for them to be recognized as a click. Use \fBmouseinterval(0)\fR to disable click resolution. This function returns the previous interval value. Use \fBmouseinterval(\-1)\fR to obtain the interval without altering it. The default is one sixth of a second. .SS has_mouse .PP The \fBhas_mouse\fP function returns \fBTRUE\fP if the mouse driver has been successfully initialized. .PP Note that mouse events will be ignored when input is in cooked mode, and will cause an error beep when cooked mode is being simulated in a window by a function such as \fBgetstr\fR that expects a linefeed for input-loop termination. .SH RETURN VALUE \fBgetmouse\fR and \fBungetmouse\fR return the integer \fBERR\fR upon failure or \fBOK\fR upon successful completion: .RS 3 .TP 5 \fBgetmouse\fP returns an error. .bP If no mouse driver was initialized, or if the mask parameter is zero, .bP It also returns an error if no more events remain in the queue. .TP 5 \fBungetmouse\fP returns an error if the FIFO is full. .RE .PP \fBmousemask\fR returns the mask of reportable events. .PP \fBmouseinterval\fR returns the previous interval value, unless the terminal was not initialized. In that case, it returns the maximum interval value (166). .PP \fBwenclose\fR and \fBwmouse_trafo\fR are boolean functions returning \fBTRUE\fR or \fBFALSE\fR depending on their test result. .SH PORTABILITY These calls were designed for \fBncurses\fR(3X), and are not found in SVr4 curses, 4.4BSD curses, or any other previous version of curses. .PP The feature macro \fBNCURSES_MOUSE_VERSION\fR is provided so the preprocessor can be used to test whether these features are present. If the interface is changed, the value of \fBNCURSES_MOUSE_VERSION\fR will be incremented. These values for \fBNCURSES_MOUSE_VERSION\fR may be specified when configuring ncurses: .RS 3 .TP 3 1 has definitions for reserved events. The mask uses 28 bits. .TP 3 2 adds definitions for button 5, removes the definitions for reserved events. The mask uses 29 bits. .RE .PP The order of the \fBMEVENT\fR structure members is not guaranteed. Additional fields may be added to the structure in the future. .PP Under \fBncurses\fR(3X), these calls are implemented using either xterm's built-in mouse-tracking API or platform-specific drivers including .RS 3 .bP Alessandro Rubini's gpm server .bP FreeBSD sysmouse .bP OS/2 EMX .RE .PP If you are using an unsupported configuration, mouse events will not be visible to \fBncurses\fR(3X) (and the \fBmousemask\fR function will always return \fB0\fR). .PP If the terminfo entry contains a \fBXM\fR string, this is used in the xterm mouse driver to control the way the terminal is initialized for mouse operation. The default, if \fBXM\fR is not found, corresponds to private mode 1000 of xterm: .PP .RS 3 \\E[?1000%?%p1%{1}%=%th%el%; .RE .PP The \fIz\fP member in the event structure is not presently used. It is intended for use with touch screens (which may be pressure-sensitive) or with 3D-mice/trackballs/power gloves. .PP The \fBALL_MOUSE_EVENTS\fP class does not include \fBREPORT_MOUSE_POSITION\fP. They are distinct. For example, in xterm, wheel/scrolling mice send position reports as a sequence of presses of buttons 4 or 5 without matching button-releases. .SH BUGS Mouse events under xterm will not in fact be ignored during cooked mode, if they have been enabled by \fBmousemask\fR. Instead, the xterm mouse report sequence will appear in the string read. .PP Mouse events under xterm will not be detected correctly in a window with its keypad bit off, since they are interpreted as a variety of function key. Your terminfo description should have \fBkmous\fR set to "\\E[M" (the beginning of the response from xterm for mouse clicks). Other values for \fBkmous\fR are permitted, but under the same assumption, i.e., it is the beginning of the response. .PP Because there are no standard terminal responses that would serve to identify terminals which support the xterm mouse protocol, \fBncurses\fR assumes that if your $TERM environment variable contains "xterm", or \fBkmous\fR is defined in the terminal description, then the terminal may send mouse events. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_kernel\fR(3X), \fBcurs_slk\fR(3X), \fBcurs_variables\fR(3X). ncurses-6.0-20160213/man/curs_beep.3x0000644000175100001440000000627411476505074015474 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2005,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_beep.3x,v 1.12 2010/12/04 18:36:44 tom Exp $ .TH curs_beep 3X "" .SH NAME \fBbeep\fR, \fBflash\fR \- \fBcurses\fR bell and screen flash routines .SH SYNOPSIS \fB#include \fR .PP \fBint beep(void);\fR .br \fBint flash(void);\fR .br .SH DESCRIPTION The \fBbeep\fR and \fBflash\fR routines are used to alert the terminal user. The routine \fBbeep\fR sounds an audible alarm on the terminal, if possible; otherwise it flashes the screen (visible bell). The routine \fBflash\fR flashes the screen, and if that is not possible, sounds the alert. If neither alert is possible, nothing happens. Nearly all terminals have an audible alert (bell or beep), but only some can flash the screen. .SH RETURN VALUE These routines return \fBOK\fR if they succeed in beeping or flashing, \fBERR\fR otherwise. .SH EXTENSIONS SVr4's beep and flash routines always returned \fBOK\fR, so it was not possible to tell when the beep or flash failed. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. Like SVr4, it specifies that they always return \fBOK\fR. .SH SEE ALSO \fBcurses\fR(3X) ncurses-6.0-20160213/man/legacy_coding.3x0000644000175100001440000000706711476506460016315 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2005-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" Author: Thomas E. Dickey .\" .\" $Id: legacy_coding.3x,v 1.4 2010/12/04 18:49:20 tom Exp $ .TH legacy_coding 3X "" .SH NAME \fBuse_legacy_coding\fR \- use terminal's default colors .SH SYNOPSIS \fB#include \fP .sp \fBint use_legacy_coding(int level);\fP .SH DESCRIPTION The .I use_legacy_coding() function is an extension to the curses library. It allows the caller to change the result of \fBunctrl\fP, and suppress related checks within the library that would normally cause nonprinting characters to be rendered in visible form. This affects only 8-bit characters. .PP The \fIlevel\fP parameter controls the result: .RS .TP 5 0 the library functions normally, rendering nonprinting characters as described in \fBunctrl\fP. .TP 1 the library ignores \fBisprintf\fP for codes in the range 160-255. .TP 2 the library ignores \fBisprintf\fP for codes in the range 128-255. It also modifies the output of \fBunctrl\fP, showing codes in the range 128-159 as is. .RE .SH RETURN VALUE If the screen has not been initialized, or the \fIlevel\fP parameter is out of range, the function returns \fBERR\fP. Otherwise, it returns the previous level: \fB0\fP, \fB1\fP or \fB2\fP. .SH PORTABILITY This routine is specific to ncurses. It was not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on ncurses extensions be conditioned using NCURSES_VERSION. .SH SEE ALSO \fBunctrl\fR. .SH AUTHOR Thomas Dickey (to support lynx's font-switching feature). ncurses-6.0-20160213/man/menu_pattern.3x0000644000175100001440000000767412630673165016233 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_pattern.3x,v 1.14 2015/12/05 23:42:45 tom Exp $ .TH menu_pattern 3X "" .SH NAME \fBset_menu_pattern\fP, \fBmenu_pattern\fR \- set and get a menu's pattern buffer .SH SYNOPSIS \fB#include \fR .br int set_menu_pattern(MENU *menu, const char *pattern); .br char *menu_pattern(const MENU *menu); .br .SH DESCRIPTION Every menu has an associated pattern match buffer. As input events that are printable characters come in, they are appended to this match buffer and tested for a match, as described in \fBmenu_driver\fR(3X). .PP The function \fBset_menu_pattern\fR sets the pattern buffer for the given menu and tries to find the first matching item. If it succeeds, that item becomes current; if not, the current item does not change. .PP The function \fBmenu_pattern\fR returns the pattern buffer of the given \fImenu\fR. .SH RETURN VALUE The function \fBmenu_pattern\fR returns a pointer, which is \fBNULL\fR if the \fImenu\fP parameter is \fBNULL\fP. Otherwise, it is a pointer to a string which is empty if no pattern has been set. It does not set errno. .PP The function \fBset_menu_pattern\fR may return the following error codes: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_BAD_STATE Routine was called from an initialization or termination function. .TP 5 .B E_NOT_CONNECTED No items are connected to menu. .TP 5 .B E_NO_MATCH Character failed to match. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/term_variables.3x0000644000175100001440000001474612630630115016513 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2011-2013,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: term_variables.3x,v 1.7 2015/12/05 18:43:25 tom Exp $ .TH term_variables 3X "" .ds n 5 .na .hy 0 .SH NAME \fBSP\fP, \fBacs_map\fP, \fBboolcodes\fP, \fBboolfnames\fP, \fBboolnames\fP, \fBcur_term\fP, \fBnumcodes\fP, \fBnumfnames\fP, \fBnumnames\fP, \fBstrcodes\fP, \fBstrfnames\fP, \fBstrnames\fP, \fBttytype\fP \- \fBcurses\fR terminfo global variables .ad .hy .SH SYNOPSIS .nf \fB#include \fR .br \fB#include \fR .PP \fBchtype acs_map[];\fR .sp \fBSCREEN * SP;\fR .sp \fBTERMINAL * cur_term;\fR .sp \fBchar ttytype[];\fR .sp \fBNCURSES_CONST char * const * boolcodes;\fR .br \fBNCURSES_CONST char * const * boolfnames;\fR .br \fBNCURSES_CONST char * const * boolnames;\fR .sp \fBNCURSES_CONST char * const * numcodes;\fR .br \fBNCURSES_CONST char * const * numfnames;\fR .br \fBNCURSES_CONST char * const * numnames;\fR .sp \fBNCURSES_CONST char * const * strcodes;\fR .br \fBNCURSES_CONST char * const * strfnames;\fR .br \fBNCURSES_CONST char * const * strnames;\fR .br .fi .SH DESCRIPTION This page summarizes variables provided by the \fBcurses\fP library's low-level terminfo interface. A more complete description is given in the \fBcurs_terminfo\fP(3X) manual page. .PP Depending on the configuration, these may be actual variables, or macros (see \fBcurs_threads\fR(3X)) which provide read-only access to \fIcurses\fP's state. In either case, applications should treat them as read-only to avoid confusing the library. .SS Alternate Character Set Mapping After initializing the curses or terminfo interfaces, the \fBacs_map\fP array holds information used to translate cells with the \fBA_ALTCHARSET\fP video attribute into line-drawing characters. .PP The encoding of the information in this array has changed periodically. Application developers need only know that it is used for the "ACS_" constants in . .PP The comparable data for the wide-character library is a private variable. .SS Current Terminal Data After initializing the curses or terminfo interfaces, the \fBcur_term\fP contains data describing the current terminal. This variable is also set as a side-effect of \fBset_term\fP(3X) and \fBdelscreen\fP(3X). .PP It is possible to save a value of \fBcur_term\fP for subsequent use as a parameter to \fBset_term\fP, for switching between screens. Alternatively, one can save the return value from \fBnewterm\fP or \fBsetupterm\fP to reuse in \fBset_term\fP. .SS Terminfo Names The \fB@TIC@\fP(1) and \fB@INFOCMP@\fP(1) programs use lookup tables for the long and short names of terminfo capabilities, as well as the corresponding names for termcap capabilities. These are available to other applications, although the hash-tables used by the terminfo and termcap functions are not available. .PP The long terminfo capability names use a "l" (ell) in their names: \fBboolfnames\fP, \fBnumfnames\fP, and \fBstrfnames\fP. .PP These are the short names for terminfo capabilities: \fBboolnames\fP, \fBnumnames\fP, and \fBstrnames\fP. .PP These are the corresponding names used for termcap descriptions: \fBboolcodes\fP, \fBnumcodes\fP, and \fBstrcodes\fP. .\" .SS Terminal Type On initialization of the curses or terminfo interfaces, \fBsetupterm\fP copies the terminal name to the array \fBttytype\fP. .\" .SS Terminfo Names .PP In addition to the variables, \fB\fP also defines a symbol for each terminfo capability \fIlong name\fP. These are in terms of the symbol \fBCUR\fP, which is defined .PP .nf .ft CW #define CUR cur_term->type. .fi .ft R .PP These symbols provide a faster method of accessing terminfo capabilities than using \fBtigetstr\fR(3X), etc. .\" .SH NOTES The low-level terminfo interface is initialized using .hy 0 \fBsetupterm\fR(3X). .hy The upper-level curses interface uses the low-level terminfo interface, internally. .\" .SH PORTABILITY X/Open Curses does not describe any of these except for \fBcur_term\fP. (The inclusion of \fBcur_term\fP appears to be an oversight, since other comparable low-level information is omitted by X/Open). .PP Other implementations may have comparable variables. Some implementations provide the variables in their libraries, but omit them from the header files. .PP All implementations which provide terminfo interfaces add definitions as described in the \fBTerminfo Names\fP section. Most, but not all, base the definition upon the \fBcur_term\fP variable. .SH SEE ALSO .hy 0 \fBcurses\fR(3X), \fBcurs_terminfo\fR(3X), \fBcurs_threads\fR(3X), \fBterminfo\fR(\*n). .hy ncurses-6.0-20160213/man/curs_getcchar.3x0000644000175100001440000001175212553410476016334 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2001-2012,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_getcchar.3x,v 1.17 2015/07/21 09:30:38 tom Exp $ .TH curs_getcchar 3X "" .de bP .IP \(bu 4 .. .SH NAME \fBgetcchar\fP, \fBsetcchar\fP \- Get a wide character string and rendition from a \fBcchar_t\fP or set a \fBcchar_t\fP from a wide-character string .SH SYNOPSIS \fB#include \fP .sp \fBint getcchar(\fP .br .B " const cchar_t *\fIwcval\fP," .br .B " wchar_t *\fIwch\fP," .br .B " attr_t *\fIattrs\fP," .br .B " short *\fIcolor_pair\fP," .br .B " void *\fIopts\fP );" .sp .B "int setcchar(" .br .B " cchar_t *\fIwcval\fP," .br .B " const wchar_t *\fIwch\fP," .br .B " const attr_t \fIattrs\fP," .br .B " short \fIcolor_pair\fP," .br .B " void *\fIopts\fP );" .SH DESCRIPTION .SS getcchar .PP The \fBgetcchar\fP function gets a wide-character string and rendition from a \fBcchar_t\fP argument. When \fIwch\fP is not a null pointer, the \fBgetcchar\fP function does the following: .bP Extracts information from a \fBcchar_t\fP value \fIwcval\fP .bP Stores the character attributes in the location pointed to by \fIattrs\fP .bP Stores the color-pair in the location pointed to by \fIcolor_pair\fP .bP Stores the wide-character string, characters referenced by \fIwcval\fP, into the array pointed to by \fIwch\fP. .PP When \fIwch\fP is a null pointer, the \fBgetcchar\fP function does the following: .bP Obtains the number of wide characters pointed to by \fIwcval\fP .bP Does not change the data referenced by \fIattrs\fP or \fIcolor_pair\fP .SS setcchar .PP The \fBsetcchar\fP function initializes the location pointed to by \fIwcval\fP by using: .bP The character attributes in \fIattrs\fP .bP The color pair in \fIcolor_pair\fP .bP The wide-character string pointed to by \fIwch\fP. The string must be L'\\0' terminated, contain at most one spacing character, which must be the first. .IP Up to \fBCCHARW_MAX\fP\-1 nonspacing characters may follow. Additional nonspacing characters are ignored. .IP The string may contain a single control character instead. In that case, no nonspacing characters are allowed. .SH NOTES .PP The \fIopts\fP argument is reserved for future use. Currently, an application must provide a null pointer as \fIopts\fP. .PP The \fIwcval\fP argument may be a value generated by a call to \fBsetcchar\fP or by a function that has a \fBcchar_t\fP output argument. If \fIwcval\fP is constructed by any other means, the effect is unspecified. .SH RETURN VALUE .PP When \fIwch\fP is a null pointer, \fBgetcchar\fP returns the number of wide characters referenced by \fIwcval\fP, including one for a trailing null. .PP When \fIwch\fP is not a null pointer, \fBgetcchar\fP returns \fBOK\fP upon successful completion, and \fBERR\fP otherwise. .PP Upon successful completion, \fBsetcchar\fP returns \fBOK\fP. Otherwise, it returns \fBERR\fP. .SH SEE ALSO .PP Functions: \fBcurs_attr\fR(3X), \fBcurs_color\fR(3X), \fBcurses\fR(3X), \fBwcwidth\fR(3). ncurses-6.0-20160213/man/curs_add_wch.3x0000644000175100001440000002077212553303770016145 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2001-2012,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_add_wch.3x,v 1.16 2015/07/20 23:44:56 tom Exp $ .TH curs_add_wch 3X "" .de bP .IP \(bu 4 .. .SH NAME \fBadd_wch\fP, \fBwadd_wch\fP, \fBmvadd_wch\fP, \fBmvwadd_wch\fP, \fBecho_wchar\fP, \fBwecho_wchar\fP \- add a complex character and rendition to a \fBcurses\fR window, then advance the cursor .SH SYNOPSIS .PP \fB#include \fP .sp .B "int add_wch( const cchar_t *\fIwch\fB );" .br .B "int wadd_wch( WINDOW *\fIwin\fP, const cchar_t *\fIwch\fB );" .br .B "int mvadd_wch( int \fIy\fP, int \fIx\fP, const cchar_t *\fIwch\fB );" .br .B "int mvwadd_wch( WINDOW *\fIwin\fP, int \fIy\fP, int \fIx\fP, const cchar_t *\fIwch\fB );" .br .B "int echo_wchar( const cchar_t *\fIwch\fB );" .br .B "int wecho_wchar( WINDOW *\fIwin\fP, const cchar_t *\fIwch\fB );" .br .SH DESCRIPTION .SS add_wch .PP The \fBadd_wch\fP, \fBwadd_wch\fP, \fBmvadd_wch\fP, and \fBmvwadd_wch\fP functions put the complex character \fIwch\fP into the given window at its current position, which is then advanced. These functions perform wrapping and special-character processing as follows: .bP If \fIwch\fP refers to a spacing character, then any previous character at that location is removed. A new character specified by \fIwch\fP is placed at that location with rendition specified by \fIwch\fP. The cursor then advances to the next spacing character on the screen. .bP If \fIwch\fP refers to a non-spacing character, all previous characters at that location are preserved. The non-spacing characters of \fIwch\fP are added to the spacing complex character, and the rendition specified by \fIwch\fP is ignored. .bP If the character part of \fIwch\fP is a tab, newline, backspace or other control character, the window is updated and the cursor moves as if \fBaddch\fR were called. .SS echo_wchar .PP The \fBecho_wchar\fP function is functionally equivalent to a call to \fBadd_wch\fP followed by a call to \fBrefresh\fP. Similarly, the \fBwecho_wchar\fP is functionally equivalent to a call to \fBwadd_wch\fP followed by a call to \fBwrefresh\fP. The knowledge that only a single character is being output is taken into consideration and, for non-control characters, a considerable performance gain might be seen by using the *\fBecho\fP* functions instead of their equivalents. .SS Line Graphics Like \fBaddch\fP(3X), \fBaddch_wch\fP accepts symbols which make it simple to draw lines and other frequently used special characters. These symbols correspond to the same VT100 line-drawing set as \fBaddch\fP(3X). .PP .TS l l l l _ _ _ _ lw(1.5i) lw7 lw7 lw20. \fIName\fR \fIUnicode\fP \fIDefault\fR \fIDescription\fR WACS_BLOCK 0x25ae # solid square block WACS_BOARD 0x2592 # board of squares WACS_BTEE 0x2534 + bottom tee WACS_BULLET 0x00b7 o bullet WACS_CKBOARD 0x2592 : checker board (stipple) WACS_DARROW 0x2193 v arrow pointing down WACS_DEGREE 0x00b0 ' degree symbol WACS_DIAMOND 0x25c6 + diamond WACS_GEQUAL 0x2265 > greater-than-or-equal-to WACS_HLINE 0x2500 \- horizontal line WACS_LANTERN 0x2603 # lantern symbol WACS_LARROW 0x2190 < arrow pointing left WACS_LEQUAL 0x2264 < less-than-or-equal-to WACS_LLCORNER 0x2514 + lower left-hand corner WACS_LRCORNER 0x2518 + lower right-hand corner WACS_LTEE 0x2524 + left tee WACS_NEQUAL 0x2260 ! not-equal WACS_PI 0x03c0 * greek pi WACS_PLMINUS 0x00b1 # plus/minus WACS_PLUS 0x253c + plus WACS_RARROW 0x2192 > arrow pointing right WACS_RTEE 0x251c + right tee WACS_S1 0x23ba \- scan line 1 WACS_S3 0x23bb \- scan line 3 WACS_S7 0x23bc \- scan line 7 WACS_S9 0x23bd \&_ scan line 9 WACS_STERLING 0x00a3 f pound-sterling symbol WACS_TTEE 0x252c + top tee WACS_UARROW 0x2191 ^ arrow pointing up WACS_ULCORNER 0x250c + upper left-hand corner WACS_URCORNER 0x2510 + upper right-hand corner WACS_VLINE 0x2502 | vertical line .TE .PP The wide-character configuration of ncurses also defines symbols for thick- and double-lines: .PP .TS l l l l _ _ _ _ lw(1.5i) lw7 lw7 lw20. \fIName\fR \fIUnicode\fP \fIDefault\fR \fIDescription\fR WACS_T_ULCORNER 0x250f + thick upper left corner WACS_T_LLCORNER 0x2517 + thick lower left corner WACS_T_URCORNER 0x2513 + thick upper right corner WACS_T_LRCORNER 0x251b + thick lower right corner WACS_T_LTEE 0x252b + thick tee pointing right WACS_T_RTEE 0x2523 + thick tee pointing left WACS_T_BTEE 0x253b + thick tee pointing up WACS_T_TTEE 0x2533 + thick tee pointing down WACS_T_HLINE 0x2501 - thick horizontal line WACS_T_VLINE 0x2503 | thick vertical line WACS_T_PLUS 0x254b + thick large plus or crossover WACS_D_ULCORNER 0x2554 + double upper left corner WACS_D_LLCORNER 0x255a + double lower left corner WACS_D_URCORNER 0x2557 + double upper right corner WACS_D_LRCORNER 0x255d + double lower right corner WACS_D_RTEE 0x2563 + double tee pointing left WACS_D_LTEE 0x2560 + double tee pointing right WACS_D_BTEE 0x2569 + double tee pointing up WACS_D_TTEE 0x2566 + double tee pointing down WACS_D_HLINE 0x2550 - double horizontal line WACS_D_VLINE 0x2551 | double vertical line WACS_D_PLUS 0x256c + double large plus or crossover .TE .SH RETURN VALUE .PP All routines return the integer \fBERR\fR upon failure and \fBOK\fR on success. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES .PP Note that \fBadd_wch\fP, \fBmvadd_wch\fP, \fBmvwadd_wch\fP, and \fBecho_wchar\fP may be macros. .SH PORTABILITY .PP All of these functions are described in the XSI Curses standard, Issue 4. The defaults specified for line-drawing characters apply in the POSIX locale. .PP X/Open Curses makes it clear that the WACS_ symbols should be defined as a pointer to \fBcchar_t\fP data, e.g., in the discussion of \fBborder_set\fR. A few implementations are problematic: .bP NetBSD curses defines the symbols as a \fBwchar_t\fP within a \fBcchar_t\fP. .bP HPUX curses equates some of the \fIACS_\fP symbols to the analogous \fIWACS_\fP symbols as if the \fIACS_\fP symbols were wide characters. The misdefined symbols are the arrows and other symbols which are not used for line-drawing. .PP X/Open Curses does not define symbols for thick- or double-lines. SVr4 curses implementations defined their line-drawing symbols in terms of intermediate symbols. This implementation extends those symbols, providing new definitions which are not in the SVr4 implementations. .SH SEE ALSO .na .PP \fBcurses\fR(3X), \fBcurs_addch\fR(3X), \fBcurs_attr\fR(3X), \fBcurs_clear\fR(3X), \fBcurs_outopts\fR(3X), \fBcurs_refresh\fR(3X), \fBputwc\fR(3) ncurses-6.0-20160213/man/form_driver.3x0000644000175100001440000002170212630650722016026 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_driver.3x,v 1.25 2015/12/05 21:06:26 tom Exp $ .TH form_driver 3X "" .de bP .IP \(bu 4 .. .SH NAME \fBform_driver\fR, \fBform_driver_w\fR \- command-processing loop of the form system .SH SYNOPSIS \fB#include \fR .br \fBint form_driver(FORM *\fP\fIform\fP\fB, int \fP\fIc\fP\fB);\fP .br \fBint form_driver_w(FORM *\fP\fIform\fP\fB, int \fP\fIc\fP\fB, wchar_t \fP\fIwch\fP\fB);\fP .br .SH DESCRIPTION .SS form_driver Once a form has been posted (displayed), you should funnel input events to it through \fBform_driver\fR. This routine has three major input cases: .bP The input is a form navigation request. Navigation request codes are constants defined in \fB\fP, which are distinct from the key- and character codes returned by \fBwgetch\fP(3X). .bP The input is a printable character. Printable characters (which must be positive, less than 256) are checked according to the program's locale settings. .bP The input is the KEY_MOUSE special key associated with an mouse event. .SS form_driver_w .PP This extension simplifies the use of the forms library using wide characters. The input is either a key code (a request) or a wide character returned by \fBget_wch\fP(3X). The type must be passed as well, to enable the library to determine whether the parameter is a wide character or a request. .SS Form-driver requests .PP The form driver requests are as follows: .TS l l _ _ _ l l. \fIName\fR \fIDescription\fR REQ_BEG_FIELD Move to the beginning of the field. REQ_BEG_LINE Move to the beginning of the line. REQ_CLR_EOF Clear to end of field from cursor. REQ_CLR_EOL Clear to end of line from cursor. REQ_CLR_FIELD Clear the entire field. REQ_DEL_CHAR Delete character at the cursor. REQ_DEL_LINE Delete line at the cursor. REQ_DEL_PREV Delete character before the cursor. REQ_DEL_WORD Delete blank-delimited word at the cursor. REQ_DOWN_CHAR Move down in the field. REQ_DOWN_FIELD Move down to a field. REQ_END_FIELD Move to the end of the field. REQ_END_LINE Move to the end of the line. REQ_FIRST_FIELD Move to the first field. REQ_FIRST_PAGE Move to the first page. REQ_INS_CHAR Insert a blank at the cursor. REQ_INS_LINE Insert a blank line at the cursor. REQ_INS_MODE Enter insert mode. REQ_LAST_FIELD Move to the last field. REQ_LAST_PAGE Move to the last field. REQ_LEFT_CHAR Move left in the field. REQ_LEFT_FIELD Move left to a field. REQ_NEW_LINE Insert or overlay a new line. REQ_NEXT_CHAR Move to the next char. REQ_NEXT_CHOICE Display next field choice. REQ_NEXT_FIELD Move to the next field. REQ_NEXT_LINE Move to the next line. REQ_NEXT_PAGE Move to the next page. REQ_NEXT_PAGE Move to the next page. REQ_NEXT_WORD Move to the next word. REQ_OVL_MODE Enter overlay mode. REQ_PREV_CHAR Move to the previous char. REQ_PREV_CHOICE Display previous field choice. REQ_PREV_FIELD Move to the previous field. REQ_PREV_LINE Move to the previous line. REQ_PREV_PAGE Move to the previous page. REQ_PREV_WORD Move to the previous word. REQ_RIGHT_CHAR Move right in the field. REQ_RIGHT_FIELD Move right to a field. REQ_SCR_BCHAR Scroll the field backward a character. REQ_SCR_BHPAGE Scroll the field backward half a page. REQ_SCR_BLINE Scroll the field backward a line. REQ_SCR_BPAGE Scroll the field backward a page. REQ_SCR_FCHAR Scroll the field forward a character. REQ_SCR_FHPAGE Scroll the field forward half a page. REQ_SCR_FLINE Scroll the field forward a line. REQ_SCR_FPAGE Scroll the field forward a page. REQ_SCR_HBHALF Horizontal scroll the field backward half a line. REQ_SCR_HBLINE Horizontal scroll the field backward a line. REQ_SCR_HFHALF Horizontal scroll the field forward half a line. REQ_SCR_HFLINE Horizontal scroll the field forward a line. REQ_SFIRST_FIELD Move to the sorted first field. REQ_SLAST_FIELD Move to the sorted last field. REQ_SNEXT_FIELD Move to the sorted next field. REQ_SPREV_FIELD Move to the sorted previous field. REQ_UP_CHAR Move up in the field. REQ_UP_FIELD Move up to a field. REQ_VALIDATION Validate field. .TE .PP If the second argument is a printable character, the driver places it in the current position in the current field. If it is one of the forms requests listed above, that request is executed. .SS Mouse handling .PP If the second argument is the KEY_MOUSE special key, the associated mouse event is translated into one of the above pre-defined requests. Currently only clicks in the user window (e.g., inside the form display area or the decoration window) are handled. .PP If you click above the display region of the form: .RS 3 .TP a REQ_PREV_FIELD is generated for a single click, .TP a REQ_PREV_PAGE is generated for a double-click and .TP a REQ_FIRST_FIELD is generated for a triple-click. .RE .PP If you click below the display region of the form: .RS 3 .TP a REQ_NEXT_FIELD is generated for a single click, .TP a REQ_NEXT_PAGE is generated for a double-click and .TP a REQ_LAST_FIELD is generated for a triple-click. .RE .PP If you click at an field inside the display area of the form: .RS 3 .bP the form cursor is positioned to that field. .bP If you double-click a field, the form cursor is positioned to that field and \fBE_UNKNOWN_COMMAND\fR is returned. This return value makes sense, because a double click usually means that an field-specific action should be returned. It is exactly the purpose of this return value to signal that an application specific command should be executed. .bP If a translation into a request was done, \fBform_driver\fR returns the result of this request. .RE .PP If you clicked outside the user window or the mouse event could not be translated into a form request an \fBE_REQUEST_DENIED\fR is returned. .SS Application-defined commands .PP If the second argument is neither printable nor one of the above pre-defined form requests, the driver assumes it is an application-specific command and returns \fBE_UNKNOWN_COMMAND\fR. Application-defined commands should be defined relative to \fBMAX_COMMAND\fR, the maximum value of these pre-defined requests. .SH RETURN VALUE \fBform_driver\fR returns one of the following error codes: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .TP 5 .B E_BAD_STATE Routine was called from an initialization or termination function. .TP 5 .B E_NOT_POSTED The form has not been posted. .TP 5 .B E_INVALID_FIELD Contents of field is invalid. .TP 5 .B E_REQUEST_DENIED The form driver could not process the request. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_UNKNOWN_COMMAND The form driver code saw an unknown request code. . .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X), \fBform_variables\fR(3X), \fBgetch\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header files \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/curs_instr.3x0000644000175100001440000000765311476505277015727 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_instr.3x,v 1.16 2010/12/04 18:38:55 tom Exp $ .TH curs_instr 3X "" .SH NAME \fBinstr\fR, \fBinnstr\fR, \fBwinstr\fR, \fBwinnstr\fR, \fBmvinstr\fR, \fBmvinnstr\fR, \fBmvwinstr\fR, \fBmvwinnstr\fR \- get a string of characters from a \fBcurses\fR window .SH SYNOPSIS \fB#include \fR .sp \fBint instr(char *str);\fR .br \fBint innstr(char *str, int n);\fR .br \fBint winstr(WINDOW *win, char *str);\fR .br \fBint winnstr(WINDOW *win, char *str, int n);\fR .br \fBint mvinstr(int y, int x, char *str);\fR .br \fBint mvinnstr(int y, int x, char *str, int n);\fR .br \fBint mvwinstr(WINDOW *win, int y, int x, char *str);\fR .br \fBint mvwinnstr(WINDOW *win, int y, int x, char *str, int n);\fR .br .SH DESCRIPTION These routines return a string of characters in \fIstr\fR, extracted starting at the current cursor position in the named window. Attributes are stripped from the characters. The four functions with \fIn\fR as the last argument return a leading substring at most \fIn\fR characters long (exclusive of the trailing NUL). .SH RETURN VALUE All of the functions return \fBERR\fR upon failure, or the number of characters actually read into the string. .PP X/Open defines no error conditions. In this implementation, if the window parameter is null or the str parameter is null, a zero is returned. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES Note that all routines except \fBwinnstr\fR may be macros. .SH PORTABILITY SVr4 does not document whether a length limit includes or excludes the trailing NUL. .PP The ncurses library extends the XSI description by allowing a negative value for \fIn\fR. In this case, the functions return the string ending at the right margin. .SH SEE ALSO \fBcurses\fR(3X). ncurses-6.0-20160213/man/key_defined.3x0000644000175100001440000000576011476505455015775 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2003-2006,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" Author: Thomas E. Dickey 2003 .\" .\" $Id: key_defined.3x,v 1.6 2010/12/04 18:40:45 tom Exp $ .TH key_defined 3X "" .SH NAME \fBkey_defined\fP \- check if a keycode is defined .SH SYNOPSIS \fB#include \fP .sp \fBint key_defined(const char *definition);\fP .SH DESCRIPTION This is an extension to the curses library. It permits an application to determine if a string is currently bound to any keycode. .SH RETURN VALUE If the string is bound to a keycode, its value (greater than zero) is returned. If no keycode is bound, zero is returned. If the string conflicts with longer strings which are bound to keys, \-1 is returned. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on them be conditioned using NCURSES_VERSION. .SH SEE ALSO \fBdefine_key\fR(3X). .SH AUTHOR Thomas Dickey. ncurses-6.0-20160213/man/MKterminfo.sh0000755000175100001440000001031407610107664015647 0ustar tomusers#!/bin/sh # $Id: MKterminfo.sh,v 1.12 2003/01/11 21:42:12 tom Exp $ # # MKterminfo.sh -- generate terminfo.5 from Caps tabular data # #*************************************************************************** # Copyright (c) 1998,2002,2003 Free Software Foundation, Inc. * # * # Permission is hereby granted, free of charge, to any person obtaining a * # copy of this software and associated documentation files (the * # "Software"), to deal in the Software without restriction, including * # without limitation the rights to use, copy, modify, merge, publish, * # distribute, distribute with modifications, sublicense, and/or sell * # copies of the Software, and to permit persons to whom the Software is * # furnished to do so, subject to the following conditions: * # * # The above copyright notice and this permission notice shall be included * # in all copies or substantial portions of the Software. * # * # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * # IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * # THE USE OR OTHER DEALINGS IN THE SOFTWARE. * # * # Except as contained in this notice, the name(s) of the above copyright * # holders shall not be used in advertising or otherwise to promote the * # sale, use or other dealings in this Software without prior written * # authorization. * #*************************************************************************** # # This script takes terminfo.head and terminfo.tail and splices in between # them a table derived from the Caps data file. Besides avoiding having # the docs fall out of sync with the table, this also lets us set up tbl # commands for better formatting of the table. # # NOTE: The s in this script really are control characters. It translates #  to \n because I couldn't get used to inserting linefeeds directly. There # had better be no s in the table source text. # # keep the order independent of locale: if test "${LANGUAGE+set}" = set; then LANGUAGE=C; export LANGUAGE; fi if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi if test "${LC_COLLATE+set}" = set; then LC_COLLATE=C; export LC_COLLATE; fi # head=$1 caps=$2 tail=$3 cat <<'EOF' '\" t .\" DO NOT EDIT THIS FILE BY HAND! .\" It is generated from terminfo.head, Caps, and terminfo.tail. .\" .\" Note: this must be run through tbl before nroff. .\" The magic cookie on the first line triggers this under some man programs. EOF cat $head temp=temp$$ sorted=sorted$$ unsorted=unsorted$$ trap "rm -f $sorted $temp $unsorted; exit 99" 1 2 5 15 sed -n <$caps "\ /%%-STOP-HERE-%%/q /^#%/s/#%//p /^#/d s/[ ][ ]*/ /g s/$/T}/ s/ [A-Z0-9_()\-][A-Z0-9_()\-]* [0-9\-][0-9\-]* [Y\-][B\-][C\-][G\-][EK\-]\** / T{/ s/ bool / /p s/ num / /p s/ str / /p " |sed -e 's/^$/../' | tr "\134" "\006" >$unsorted rm -f $sorted rm -f $temp saved=no while true do data= read data test -z "$data" && break case "$data" in #(vi **) #(vi echo "$data" >>$temp saved=yes ;; *) if test $saved = yes ; then saved=no sort $temp >>$sorted rm -f $temp fi echo "$data" >>$sorted ;; esac done <$unsorted test $saved = yes && sort $temp >>$sorted sed -e 's/^\.\.$//' $sorted | tr "\005\006" "\012\134" cat $tail rm -f $sorted $temp $unsorted ncurses-6.0-20160213/man/curs_addstr.3x0000644000175100001440000001063212045320533016017 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: curs_addstr.3x,v 1.17 2012/11/03 22:57:31 tom Exp $ .TH curs_addstr 3X "" .de bP .IP \(bu 4 .. .na .hy 0 .SH NAME \fBaddstr\fR, \fBaddnstr\fR, \fBwaddstr\fR, \fBwaddnstr\fR, \fBmvaddstr\fR, \fBmvaddnstr\fR, \fBmvwaddstr\fR, \fBmvwaddnstr\fR \- add a string of characters to a \fBcurses\fR window and advance cursor .ad .hy .SH SYNOPSIS .nf \fB#include \fR .PP \fBint addstr(const char *\fR\fIstr\fR\fB);\fR .br \fBint addnstr(const char *\fR\fIstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint waddstr(WINDOW *\fR\fIwin\fR\fB, const char *\fR\fIstr\fR\fB);\fR .br \fBint waddnstr(WINDOW *\fR\fIwin\fR\fB, const char *\fR\fIstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvaddstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const char *\fR\fIstr\fR\fB);\fR .br \fBint mvaddnstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const char *\fR\fIstr\fR\fB, int \fR\fIn\fR\fB);\fR .br \fBint mvwaddstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const char *\fR\fIstr\fR\fB);\fR .br \fBint mvwaddnstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, const char *\fR\fIstr, int \fR\fIn\fR\fB);\fR .fi .SH DESCRIPTION These functions write the (null-terminated) character string \fIstr\fR on the given window. It is similar to calling \fBwaddch\fR once for each character in the string. .PP The \fImv\fR functions perform cursor movement once, before writing any characters. Thereafter, the cursor is advanced as a side-effect of writing to the window. .PP The four functions with \fIn\fR as the last argument write at most \fIn\fR characters, or until a terminating null is reached. If \fIn\fR is \-1, then the entire string will be added. .SH RETURN VALUE All functions return the integer \fBERR\fR upon failure and \fBOK\fR on success. .PP X/Open does not define any error conditions. This implementation returns an error .bP if the window pointer is null or .bP if the string pointer is null or .bP if the corresponding calls to \fBwaddch\fP return an error. .PP Functions with a "mv" prefix first perform a cursor movement using \fBwmove\fP, and return an error if the position is outside the window, or if the window pointer is null. .SH NOTES All of these functions except \fBwaddnstr\fR may be macros. .SH PORTABILITY These functions are described in the XSI Curses standard, Issue 4. .SH SEE ALSO \fBcurses\fR(3X), \fBcurs_addch\fR(3X). ncurses-6.0-20160213/man/form_opts.3x0000644000175100001440000000746012630674607015535 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_opts.3x,v 1.12 2015/12/05 23:55:51 tom Exp $ .TH form_opts 3X "" .SH NAME \fBset_form_opts\fP, \fBform_opts_on\fP, \fBform_opts_off\fP, \fBform_opts\fR \- set and get form options .SH SYNOPSIS \fB#include \fR .br int set_form_opts(FORM *form, Field_Options opts); .br int form_opts_on(FORM *form, Field_Options opts); .br int form_opts_off(FORM *form, Field_Options opts); .br Field_Options form_opts(const FORM *form); .br .SH DESCRIPTION The function \fBset_form_opts\fR sets all the given form's option bits (form option bits may be logically-OR'ed together). .PP The function \fBform_opts_on\fR turns on the given option bits, and leaves others alone. .PP The function \fBform_opts_off\fR turns off the given option bits, and leaves others alone. .PP The function \fBform_opts\fR returns the form's current option bits. .PP The following options are defined (all are on by default): .TP 5 O_NL_OVERLOAD Overload the \fBREQ_NEW_LINE\fR forms driver request so that calling it at the end of a field goes to the next field. .TP 5 O_BS_OVERLOAD Overload the \fBREQ_DEL_PREV\fR forms driver request so that calling it at the beginning of a field goes to the previous field. .SH RETURN VALUE Except for \fBform_opts\fR, each routine returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .SH SEE ALSO \fBcurses\fR(3X), \fBform\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/form_field_just.3x0000644000175100001440000000667612630666443016707 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: form_field_just.3x,v 1.12 2015/12/05 23:02:59 tom Exp $ .TH form_field_just 3X "" .SH NAME \fBset_field_just\fR, \fBfield_just\fP \- retrieve field characteristics .SH SYNOPSIS \fB#include \fR .br int set_field_just(FIELD *field, int justification); .br int field_just(const FIELD *field); .br .SH DESCRIPTION The function \fBset_field_just\fR sets the justification attribute of a field; \fBfield_just\fR returns a field's justification attribute. The attribute may be one of NO_JUSTIFICATION, JUSTIFY_RIGHT, JUSTIFY_LEFT, or JUSTIFY_CENTER. . .SH RETURN VALUE The function \fBfield_just\fR returns one of: NO_JUSTIFICATION, JUSTIFY_RIGHT, JUSTIFY_LEFT, or JUSTIFY_CENTER. .PP The function \fBset_field_just\fR returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_BAD_ARGUMENT Routine detected an incorrect or out-of-range argument. .SH SEE ALSO \fBcurses\fR(3X) and related pages whose names begin "form_" for detailed descriptions of the entry points. .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V forms library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/tput.10000644000175100001440000003024412000357545014311 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: tput.1,v 1.32 2012/07/14 21:06:45 tom Exp $ .TH @TPUT@ 1 "" .ds d @TERMINFO@ .ds n 1 .SH NAME \fB@TPUT@\fR, \fBreset\fR \- initialize a terminal or query terminfo database .SH SYNOPSIS \fB@TPUT@\fR [\fB\-T\fR\fItype\fR] \fIcapname\fR [\fIparms\fR ... ] .br \fB@TPUT@\fR [\fB\-T\fR\fItype\fR] \fBinit\fR .br \fB@TPUT@\fR [\fB\-T\fR\fItype\fR] \fBreset\fR .br \fB@TPUT@\fR [\fB\-T\fR\fItype\fR] \fBlongname\fR .br \fB@TPUT@ \-S\fR \fB<<\fR .br \fB@TPUT@ \-V\fR .br .SH DESCRIPTION The \fB@TPUT@\fR utility uses the \fBterminfo\fR database to make the values of terminal-dependent capabilities and information available to the shell (see \fBsh\fR(1)), to initialize or reset the terminal, or return the long name of the requested terminal type. The result depends upon the capability's type: .RS .TP 5 string \fB@TPUT@\fR writes the string to the standard output. No trailing newline is supplied. .TP integer \fB@TPUT@\fR writes the decimal value to the standard output, with a trailing newline. .TP boolean \fB@TPUT@\fR simply sets the exit code (\fB0\fR for TRUE if the terminal has the capability, \fB1\fR for FALSE if it does not), and writes nothing to the standard output. .RE .PP Before using a value returned on the standard output, the application should test the exit code (e.g., \fB$?\fR, see \fBsh\fR(1)) to be sure it is \fB0\fR. (See the \fBEXIT CODES\fR and \fBDIAGNOSTICS\fR sections.) For a complete list of capabilities and the \fIcapname\fR associated with each, see \fBterminfo\fR(5). .TP \fB\-T\fR\fItype\fR indicates the \fItype\fR of terminal. Normally this option is unnecessary, because the default is taken from the environment variable \fBTERM\fR. If \fB\-T\fR is specified, then the shell variables \fBLINES\fR and \fBCOLUMNS\fR will also be ignored. .TP \fIcapname\fR indicates the capability from the \fBterminfo\fR database. When \fBtermcap\fR support is compiled in, the \fBtermcap\fR name for the capability is also accepted. .TP \fIparms\fR If the capability is a string that takes parameters, the arguments \fIparms\fR will be instantiated into the string. .IP Most parameters are numbers. Only a few terminfo capabilities require string parameters; \fB@TPUT@\fR uses a table to decide which to pass as strings. Normally \fB@TPUT@\fR uses \fBtparm\fR (3X) to perform the substitution. If no parameters are given for the capability, \fB@TPUT@\fR writes the string without performing the substitution. .TP \fB\-S\fR allows more than one capability per invocation of \fB@TPUT@\fR. The capabilities must be passed to \fB@TPUT@\fR from the standard input instead of from the command line (see example). Only one \fIcapname\fR is allowed per line. The \fB\-S\fR option changes the meaning of the \fB0\fR and \fB1\fR boolean and string exit codes (see the EXIT CODES section). .IP Again, \fB@TPUT@\fR uses a table and the presence of parameters in its input to decide whether to use \fBtparm\fR (3X), and how to interpret the parameters. .TP \fB\-V\fR reports the version of ncurses which was used in this program, and exits. .TP \fBinit\fR If the \fBterminfo\fR database is present and an entry for the user's terminal exists (see \fB\-T\fR\fItype\fR, above), the following will occur: .RS .TP (1) if present, the terminal's initialization strings will be output as detailed in the \fBterminfo\fR(5) section on .IR "Tabs and Initialization" , .TP (2) any delays (e.g., newline) specified in the entry will be set in the tty driver, .TP (3) tabs expansion will be turned on or off according to the specification in the entry, and .TP (4) if tabs are not expanded, standard tabs will be set (every 8 spaces). .RE .IP If an entry does not contain the information needed for any of the four above activities, that activity will silently be skipped. .TP \fBreset\fR Instead of putting out initialization strings, the terminal's reset strings will be output if present (\fBrs1\fR, \fBrs2\fR, \fBrs3\fR, \fBrf\fR). If the reset strings are not present, but initialization strings are, the initialization strings will be output. Otherwise, \fBreset\fR acts identically to \fBinit\fR. .TP \fBlongname\fR If the \fBterminfo\fR database is present and an entry for the user's terminal exists (see \fB\-T\fR\fItype\fR above), then the long name of the terminal will be put out. The long name is the last name in the first line of the terminal's description in the \fBterminfo\fR database [see \fBterm\fR(5)]. .PP If \fB@TPUT@\fR is invoked by a link named \fBreset\fR, this has the same effect as \fB@TPUT@ reset\fR. See \fB@TSET@\fR for comparison, which has similar behavior. .SH EXAMPLES .TP 5 \fB@TPUT@ init\fR Initialize the terminal according to the type of terminal in the environmental variable \fBTERM\fR. This command should be included in everyone's .profile after the environmental variable \fBTERM\fR has been exported, as illustrated on the \fBprofile\fR(5) manual page. .TP 5 \fB@TPUT@ \-T5620 reset\fR Reset an AT&T 5620 terminal, overriding the type of terminal in the environmental variable \fBTERM\fR. .TP 5 \fB@TPUT@ cup 0 0\fR Send the sequence to move the cursor to row \fB0\fR, column \fB0\fR (the upper left corner of the screen, usually known as the "home" cursor position). .TP 5 \fB@TPUT@ clear\fR Echo the clear-screen sequence for the current terminal. .TP 5 \fB@TPUT@ cols\fR Print the number of columns for the current terminal. .TP 5 \fB@TPUT@ \-T450 cols\fR Print the number of columns for the 450 terminal. .TP 5 \fBbold=`@TPUT@ smso` offbold=`@TPUT@ rmso`\fR Set the shell variables \fBbold\fR, to begin stand-out mode sequence, and \fBoffbold\fR, to end standout mode sequence, for the current terminal. This might be followed by a prompt: \fBecho "${bold}Please type in your name: ${offbold}\\c"\fR .TP 5 \fB@TPUT@ hc\fR Set exit code to indicate if the current terminal is a hard copy terminal. .TP 5 \fB@TPUT@ cup 23 4\fR Send the sequence to move the cursor to row 23, column 4. .TP 5 \fB@TPUT@ cup\fR Send the terminfo string for cursor-movement, with no parameters substituted. .TP 5 \fB@TPUT@ longname\fR Print the long name from the \fBterminfo\fR database for the type of terminal specified in the environmental variable \fBTERM\fR. .PP .RS 5 \fB@TPUT@ \-S < clear\fR .br \fB> cup 10 10\fR .br \fB> bold\fR .br \fB> !\fR .RE .TP 5 \& This example shows \fB@TPUT@\fR processing several capabilities in one invocation. It clears the screen, moves the cursor to position 10, 10 and turns on bold (extra bright) mode. The list is terminated by an exclamation mark (\fB!\fR) on a line by itself. .SH FILES .TP \fB\*d\fR compiled terminal description database .TP \fB@DATADIR@/tabset/*\fR tab settings for some terminals, in a format appropriate to be output to the terminal (escape sequences that set margins and tabs); for more information, see the "Tabs and Initialization" section of \fBterminfo\fR(5) .SH EXIT CODES If the \fB\-S\fR option is used, \fB@TPUT@\fR checks for errors from each line, and if any errors are found, will set the exit code to 4 plus the number of lines with errors. If no errors are found, the exit code is \fB0\fR. No indication of which line failed can be given so exit code \fB1\fR will never appear. Exit codes \fB2\fR, \fB3\fR, and \fB4\fR retain their usual interpretation. If the \fB\-S\fR option is not used, the exit code depends on the type of \fIcapname\fR: .RS 5 .TP .I boolean a value of \fB0\fR is set for TRUE and \fB1\fR for FALSE. .TP .I string a value of \fB0\fR is set if the \fIcapname\fR is defined for this terminal \fItype\fR (the value of \fIcapname\fR is returned on standard output); a value of \fB1\fR is set if \fIcapname\fR is not defined for this terminal \fItype\fR (nothing is written to standard output). .TP .I integer a value of \fB0\fR is always set, whether or not \fIcapname\fR is defined for this terminal \fItype\fR. To determine if \fIcapname\fR is defined for this terminal \fItype\fR, the user must test the value written to standard output. A value of \fB\-1\fR means that \fIcapname\fR is not defined for this terminal \fItype\fR. .TP .I other \fBreset\fR or \fBinit\fR may fail to find their respective files. In that case, the exit code is set to 4 + \fBerrno\fR. .RE .PP Any other exit code indicates an error; see the DIAGNOSTICS section. .SH DIAGNOSTICS \fB@TPUT@\fR prints the following error messages and sets the corresponding exit codes. .PP .ne 15 .TS l l. exit code error message = \fB0\fR T{ (\fIcapname\fR is a numeric variable that is not specified in the \fBterminfo\fR(5) database for this terminal type, e.g. \fB@TPUT@ \-T450 lines\fR and \fB@TPUT@ \-T2621 xmc\fR) T} \fB1\fR no error message is printed, see the \fBEXIT CODES\fR section. \fB2\fR usage error \fB3\fR unknown terminal \fItype\fR or no \fBterminfo\fR database \fB4\fR unknown \fBterminfo\fR capability \fIcapname\fR \fB>4\fR error occurred in \-S = .TE .SH PORTABILITY .PP The \fBlongname\fR and \fB\-S\fR options, and the parameter-substitution features used in the \fBcup\fR example, are not supported in BSD curses or in AT&T/USL curses before SVr4. .PP X/Open documents only the operands for \fBclear\fP, \fBinit\fP and \fBreset\fP. In this implementation, \fBclear\fP is part of the \fIcapname\fR support. Other implementations of \fB@TPUT@\fP on SVr4-based systems such as Solaris, IRIX64 and HPUX as well as others such as AIX and Tru64 provide support for \fIcapname\fR operands. .PP A few platforms such as FreeBSD and NetBSD recognize termcap names rather than terminfo capability names in their respective \fB@TPUT@\fP commands. .PP Most implementations which provide support for \fIcapname\fR operands use the \fItparm\fP function to expand parameters in it. That function expects a mixture of numeric and string parameters, requiring \fB@TPUT@\fP to know which type to use. This implementation uses a table to determine that for the standard \fIcapname\fR operands, and an internal library function to analyze nonstandard \fIcapname\fR operands. Other implementations may simply guess that an operand containing only digits is intended to be a number. .SH SEE ALSO \fB@CLEAR@\fR(1), \fBstty\fR(1), \fBtabs\fR(\*n), \fBterminfo\fR(5), \fBcurs_termcap\fR(3X). .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). ncurses-6.0-20160213/man/manlinks.sed0000644000175100001440000000741210744504105015544 0ustar tomusers# $Id: manlinks.sed,v 1.13 2008/01/19 23:31:17 tom Exp $ ############################################################################## # Copyright (c) 2000-2003,2008 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # Given a manpage (nroff) as input, writes a list of the names that are # listed in the "NAME" section, i.e., the names that we would like to use # as aliases for the manpage -T.Dickey # # eliminate formatting controls that get in the way /^'\\"/d /\.\\"/d /^\.br/d /^\.sp/d /typedef/d s/^\.IX// s/\\f.//g s/[:,]/ /g # # eliminate unnecessary whitespace, convert multiple blanks to single space s/^[ ][ ]*// s/[ ][ ]*$// s/[ ][ ]*/ /g # # convert ".SH" into a more manageable form s/\.SH[ ][ ]*/.SH_(/ # # in ".SH NAME" # change "\-" to "-", eliminate text after "-", and split the remaining lines # at each space, making a list of names: /^\.SH_(NAME/,/^\.SH_(SYNOPSIS/{ s/\\-.*/ -/ / -/{ s/ -.*// s/ /\ /g } /^-/{ d } s/ /\ /g } # # in ".SH SYNOPSIS" # remove any line that does not contain a '(', since we only want functions. # then strip off return-type of each function. # finally, remove the parameter list, which begins with a '('. /^\.SH_(SYNOPSIS/,/^\.SH_(DESCRIPTION/{ /^[^(]*$/d # reduce # .B "int add_wch( const cchar_t *\fIwch\fB );" # to # add_wch( const cchar_t *\fIwch\fB );" s/^\([^ (]* [^ (]* [*]*\)//g s/^\([^ (]* [*]*\)//g # trim blanks in case we have # void (*) (FORM *) field_init(const FORM *form); s/) (/)(/g # reduce stuff like # void (*)(FORM *) field_init(const FORM *form); # to # field_init(const FORM *form); s/^\(([^)]*)\)\(([^)]*)\)*[ ]*//g # rename marker temporarily s/\.SH_(/.SH_/ # kill lines with ");", and trim off beginning of argument list. s/[()].*// # rename marker back s/\.SH_/.SH_(/ } # # delete ".SH DESCRIPTION" and following lines /^\.SH_(DESCRIPTION/,${ d } # # delete any remaining directives /^\./d ncurses-6.0-20160213/man/MKada_config.in0000644000175100001440000001016712344664344016100 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 2010-2011,2014 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: MKada_config.in,v 1.8 2014/06/07 19:32:52 tom Exp $ .TH ADACURSES "1" "" "" "User Commands" .SH NAME adacurses\-config \- helper script for AdaCurses libraries .SH SYNOPSIS .B adacurses\-config [\fIoptions\fR] .SH DESCRIPTION This is a shell script which simplifies configuring an application to use the AdaCurses library binding to ncurses. .SH OPTIONS .TP \fB\-\-cflags\fR echos the gnat (Ada compiler) flags needed to compile with AdaCurses. .TP \fB\-\-libs\fR echos the gnat libraries needed to link with AdaCurses. .TP \fB\-\-version\fR echos the release+patchdate version of the ncurses libraries used to configure and build AdaCurses. .TP \fB\-\-help\fR prints a list of the \fBadacurses\-config\fP script's options. .PP If no options are given, \fBadacurses\-config\fP prints the combination of \fB\-\-cflags\fR and \fB\-\-libs\fR that \fBgnatmake\fP expects (see example). .SH EXAMPLE .PP For example, supposing that you want to compile the "Hello World!" program for AdaCurses. Make a file named "hello.adb": .RS .nf .ft CW with Terminal_Interface.Curses; use Terminal_Interface.Curses; procedure Hello is Visibility : Cursor_Visibility := Invisible; done : Boolean := False; c : Key_Code; begin Init_Screen; Set_Echo_Mode (False); Set_Cursor_Visibility (Visibility); Set_Timeout_Mode (Standard_Window, Non_Blocking, 0); Move_Cursor (Line => Lines / 2, Column => (Columns - 12) / 2); Add (Str => "Hello World!"); while not done loop c := Get_Keystroke (Standard_Window); case c is when Character'Pos ('q') => done := True; when others => null; end case; Nap_Milli_Seconds (50); end loop; End_Windows; end Hello; .fi .RE .PP Then, using .RS .ft CW gnatmake `adacurses-config --cflags` hello -largs `adacurses-config --libs` .ft .RE .PP or (simpler): .RS .ft CW gnatmake hello `adacurses-config` .ft .RE .PP you will compile and link the program. .SH "SEE ALSO" \fBcurses\fR(3X) .PP This describes \fBncurses\fR version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). ncurses-6.0-20160213/man/define_key.3x0000644000175100001440000000651611476506460015626 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" Author: Thomas E. Dickey 1997 .\" .\" $Id: define_key.3x,v 1.14 2010/12/04 18:49:20 tom Exp $ .TH define_key 3X "" .SH NAME \fBdefine_key\fP \- define a keycode .SH SYNOPSIS \fB#include \fP .sp \fBint define_key(const char *definition, int keycode);\fP .SH DESCRIPTION This is an extension to the curses library. It permits an application to define keycodes with their corresponding control strings, so that the ncurses library will interpret them just as it would the predefined codes in the terminfo database. .PP If the given string is null, any existing definition for the keycode is removed. Similarly, if the given keycode is negative or zero, any existing string for the given definition is removed. .SH RETURN VALUE The keycode must be greater than zero, and the string non-null, otherwise ERR is returned. ERR may also be returned if there is insufficient memory to allocate the data to store the definition. If no error is detected, OK is returned. .SH PORTABILITY These routines are specific to ncurses. They were not supported on Version 7, BSD or System V implementations. It is recommended that any code depending on them be conditioned using NCURSES_VERSION. .SH SEE ALSO \fBkeyok\fR(3X), \fBkey_defined\fR(3X). .SH AUTHOR Thomas Dickey. ncurses-6.0-20160213/man/mitem_value.3x0000644000175100001440000000657012630666274016036 0ustar tomusers.\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: mitem_value.3x,v 1.11 2015/12/05 23:01:16 tom Exp $ .TH mitem_value 3X "" .SH NAME \fBset_item_value\fP, \fBitem_value\fP \- set and get menu item values .SH SYNOPSIS \fB#include \fR .br int set_item_value(ITEM *item, bool value); .br bool item_value(const ITEM *item); .br .SH DESCRIPTION If you turn off the menu option \fBO_ONEVALUE\fR (e.g., with \fBset_menu_opts\fR or \fBmenu_opts_off\fR; see \fBmenu_opts\fR(3X)), the menu becomes multi-valued; that is, more than one item may simultaneously be selected. .PP In a multi_valued menu, you can used \fBset_item_value\fR to select the given menu item (second argument \fBTRUE\fR) or deselect it (second argument \fBFALSE\fR). .SH RETURN VALUE The function \fBset_item_value\fR returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_REQUEST_DENIED The menu driver could not process the request. .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/man/menu_opts.3x0000644000175100001440000000775312630673165015541 0ustar tomusers'\" t .\"*************************************************************************** .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * .\" copy of this software and associated documentation files (the * .\" "Software"), to deal in the Software without restriction, including * .\" without limitation the rights to use, copy, modify, merge, publish, * .\" distribute, distribute with modifications, sublicense, and/or sell * .\" copies of the Software, and to permit persons to whom the Software is * .\" furnished to do so, subject to the following conditions: * .\" * .\" The above copyright notice and this permission notice shall be included * .\" in all copies or substantial portions of the Software. * .\" * .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * .\" * .\" Except as contained in this notice, the name(s) of the above copyright * .\" holders shall not be used in advertising or otherwise to promote the * .\" sale, use or other dealings in this Software without prior written * .\" authorization. * .\"*************************************************************************** .\" .\" $Id: menu_opts.3x,v 1.13 2015/12/05 23:42:45 tom Exp $ .TH menu_opts 3X "" .SH NAME \fBset_menu_opts\fP, \fBmenu_opts_on\fP, \fBmenu_opts_off\fP, \fBmenu_opts\fR \- set and get menu options .SH SYNOPSIS \fB#include \fR .br int set_menu_opts(MENU *menu, Menu_Options opts); .br int menu_opts_on(MENU *menu, Menu_Options opts); .br int menu_opts_off(MENU *menu, Menu_Options opts); .br Menu_Options menu_opts(const MENU *menu); .br .SH DESCRIPTION The function \fBset_menu_opts\fR sets all the given menu's option bits (menu option bits may be logically-OR'ed together). .PP The function \fBmenu_opts_on\fR turns on the given option bits, and leaves others alone. .PP The function \fBmenu_opts_off\fR turns off the given option bits, and leaves others alone. .PP The function \fBmenu_opts\fR returns the menu's current option bits. .PP The following options are defined (all are on by default): .TP 5 O_ONEVALUE Only one item can be selected for this menu. .TP 5 O_SHOWDESC Display the item descriptions when the menu is posted. .TP 5 O_ROWMAJOR Display the menu in row-major order. .TP 5 O_IGNORECASE Ignore the case when pattern-matching. .TP 5 O_SHOWMATCH Move the cursor to within the item name while pattern-matching. .TP 5 O_NONCYCLIC Don't wrap around next-item and previous-item, requests to the other end of the menu. .SH RETURN VALUE Except for \fBmenu_opts\fR, each routine returns one of the following: .TP 5 .B E_OK The routine succeeded. .TP 5 .B E_SYSTEM_ERROR System error occurred (see \fBerrno\fR). .TP 5 .B E_POSTED The menu is already posted. .SH SEE ALSO \fBcurses\fR(3X), \fBmenu\fR(3X). .SH NOTES The header file \fB\fR automatically includes the header file \fB\fR. .SH PORTABILITY These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions. .SH AUTHORS Juergen Pfeifer. Manual pages and adaptation for new curses by Eric S. Raymond. ncurses-6.0-20160213/mk-hdr.awk0000644000175100001440000000753412177306666014371 0ustar tomusers# $Id: mk-hdr.awk,v 1.4 2013/08/03 23:09:42 tom Exp $ ############################################################################## # Copyright (c) 2007-2010,2013 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 2007 # # Generate install/uninstall rules for header files # Variables: # subset ("none", "base", "base+ext_funcs" or "termlib", etc.) # compat ("yes" or "no", flag to add link to curses.h # function basename(path) { sub(/^.*\//,"",path) return path; } BEGIN { found = 0 using = 1 count = 0 } /^@/ { using = 0 if (subset == "none") { using = 1 } else if (index(subset,$2) > 0) { using = 1 } else { using = 0 } } /^[@#]/ { next } { if (using && NF != 0) { if (found == 0) { print "" print "# generated by mk-hdr.awk" printf "# subset: %s\n", subset printf "# compat: %s\n", compat print "" found = 1 } data[count] = $1 count = count + 1 } } END { if ( count > 0 ) { print "${INCLUDEDIR} :" print " mkdir -p $@" print "" print "install \\" print "install.libs \\" print "install.includes :: ${AUTO_SRC} ${INCLUDEDIR} \\" for (i = 0; i < count - 1; ++i) { printf " %s \\\n", data[i] } printf " %s\n", data[count - 1] for (i = 0; i < count; ++i) { printf " @ (cd ${INCLUDEDIR} && rm -f %s) ; ../headers.sh ${INSTALL_DATA} ${INCLUDEDIR} ${srcdir} %s\n", basename(data[i]), data[i] if (data[i] == "curses.h" && compat == "yes") { printf " @ (cd ${INCLUDEDIR} && rm -f ncurses.h && ${LN_S} %s ncurses.h)\n", data[i] } } print "" print "uninstall \\" print "uninstall.libs \\" print "uninstall.includes ::" for (i = 0; i < count; ++i) { printf " -@ (cd ${INCLUDEDIR} && rm -f %s)\n", basename(data[i]) if (data[i] == "curses.h" && compat == "yes") { printf " -@ (cd ${INCLUDEDIR} && rm -f ncurses.h)\n" } } } } # vile:ts=4 sw=4 ncurses-6.0-20160213/c++/0000755000175100001440000000000012610551300013015 5ustar tomusersncurses-6.0-20160213/c++/headers0000644000175100001440000000453610543525011014366 0ustar tomusers# C++ headers # $Id: headers,v 1.3 2006/12/24 16:25:45 tom Exp $ ############################################################################## # Copyright (c) 1998,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1997 # $(srcdir)/cursesapp.h $(srcdir)/cursesf.h $(srcdir)/cursesm.h $(srcdir)/cursesp.h $(srcdir)/cursesw.h $(srcdir)/cursslk.h etip.h # vile:makemode ncurses-6.0-20160213/c++/cursesm.cc0000644000175100001440000002351311635215424015023 0ustar tomusers// * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2005,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ #include "internal.h" #include "cursesm.h" #include "cursesapp.h" MODULE_ID("$Id: cursesm.cc,v 1.23 2011/09/17 22:11:32 tom Exp $") NCursesMenuItem::~NCursesMenuItem() { if (item) OnError(::free_item(item)); } bool NCursesMenuItem::action() { return FALSE; } NCursesMenuCallbackItem::~NCursesMenuCallbackItem() { } bool NCursesMenuCallbackItem::action() { if (p_fct) return p_fct (*this); else return FALSE; } /* Internal hook functions. They will route the hook * calls to virtual methods of the NCursesMenu class, * so in C++ providing a hook is done simply by * implementing a virtual method in a derived class */ void _nc_xx_mnu_init(MENU *m) { NCursesMenu::getHook(m)->On_Menu_Init(); } void _nc_xx_mnu_term(MENU *m) { NCursesMenu::getHook(m)->On_Menu_Termination(); } void _nc_xx_itm_init(MENU *m) { NCursesMenu* M = NCursesMenu::getHook(m); M->On_Item_Init (*(M->current_item ())); } void _nc_xx_itm_term(MENU *m) { NCursesMenu* M = NCursesMenu::getHook(m); M->On_Item_Termination (*(M->current_item ())); } /* Construct an ITEM* array from an array of NCursesMenuItem * objects. */ ITEM** NCursesMenu::mapItems(NCursesMenuItem* nitems[]) { int itemCount = 0,lcv; for (lcv=0; nitems[lcv]->item; ++lcv) ++itemCount; ITEM** itemArray = new ITEM*[itemCount + 1]; for (lcv=0;nitems[lcv]->item;++lcv) { itemArray[lcv] = nitems[lcv]->item; } itemArray[lcv] = NULL; my_items = nitems; if (menu) delete[] ::menu_items(menu); return itemArray; } void NCursesMenu::InitMenu(NCursesMenuItem* nitems[], bool with_frame, bool autoDelete_Items) { int mrows, mcols; keypad(TRUE); meta(TRUE); b_framed = with_frame; b_autoDelete = autoDelete_Items; menu = static_cast(0); menu = ::new_menu(mapItems(nitems)); if (!menu) OnError (E_SYSTEM_ERROR); UserHook* hook = new UserHook; hook->m_user = NULL; hook->m_back = this; hook->m_owner = menu; ::set_menu_userptr(menu, static_cast(hook)); ::set_menu_init (menu, _nc_xx_mnu_init); ::set_menu_term (menu, _nc_xx_mnu_term); ::set_item_init (menu, _nc_xx_itm_init); ::set_item_term (menu, _nc_xx_itm_term); scale(mrows, mcols); ::set_menu_win(menu, w); if (with_frame) { if ((mrows > height()-2) || (mcols > width()-2)) OnError(E_NO_ROOM); sub = new NCursesWindow(*this,mrows,mcols,1,1,'r'); ::set_menu_sub(menu, sub->w); b_sub_owner = TRUE; } else { sub = static_cast(0); b_sub_owner = FALSE; } setDefaultAttributes(); } void NCursesMenu::setDefaultAttributes() { NCursesApplication* S = NCursesApplication::getApplication(); if (S) { ::set_menu_fore(menu, S->foregrounds()); ::set_menu_back(menu, S->backgrounds()); ::set_menu_grey(menu, S->inactives()); } } NCursesMenu::~NCursesMenu() { UserHook* hook = reinterpret_cast(::menu_userptr(menu)); delete hook; if (b_sub_owner) { delete sub; ::set_menu_sub(menu, static_cast(0)); } if (menu) { ITEM** itms = ::menu_items(menu); int cnt = count(); OnError(::set_menu_items(menu, static_cast(0))); if (b_autoDelete) { if (cnt>0) { for (int i=0; i <= cnt; i++) delete my_items[i]; } delete[] my_items; } ::free_menu(menu); // It's essential to do this after free_menu() delete[] itms; } } void NCursesMenu::setSubWindow(NCursesWindow& nsub) { if (!isDescendant(nsub)) OnError(E_SYSTEM_ERROR); else { if (b_sub_owner) delete sub; sub = ⊄ ::set_menu_sub(menu,sub->w); } } bool NCursesMenu::set_pattern (const char *pat) { int res = ::set_menu_pattern (menu, pat); switch(res) { case E_OK: break; case E_NO_MATCH: return FALSE; default: OnError (res); } return TRUE; } // call the menu driver and do basic error checking. int NCursesMenu::driver (int c) { int res = ::menu_driver (menu, c); switch (res) { case E_OK: case E_REQUEST_DENIED: case E_NOT_SELECTABLE: case E_UNKNOWN_COMMAND: case E_NO_MATCH: break; default: OnError (res); } return (res); } static const int CMD_QUIT = MAX_COMMAND + 1; static const int CMD_ACTION = MAX_COMMAND + 2; // // ------------------------------------------------------------------------- // Provide a default key virtualization. Translate the keyboard // code c into a menu request code. // The default implementation provides a hopefully straightforward // mapping for the most common keystrokes and menu requests. // ------------------------------------------------------------------------- int NCursesMenu::virtualize(int c) { switch(c) { case CTRL('X') : return(CMD_QUIT); // eXit case KEY_DOWN : return(REQ_DOWN_ITEM); case CTRL('N') : return(REQ_NEXT_ITEM); // Next case KEY_UP : return(REQ_UP_ITEM); case CTRL('P') : return(REQ_PREV_ITEM); // Previous case CTRL('U') : return(REQ_SCR_ULINE); // Up case CTRL('D') : return(REQ_SCR_DLINE); // Down case CTRL('F') : return(REQ_SCR_DPAGE); // Forward case CTRL('B') : return(REQ_SCR_UPAGE); // Backward case CTRL('Y') : return(REQ_CLEAR_PATTERN); case CTRL('H') : return(REQ_BACK_PATTERN); case CTRL('A') : return(REQ_NEXT_MATCH); case CTRL('E') : return(REQ_PREV_MATCH); case CTRL('T') : return(REQ_TOGGLE_ITEM); case CTRL('J') : case CTRL('M') : return(CMD_ACTION); case KEY_HOME : return(REQ_FIRST_ITEM); case KEY_LEFT : return(REQ_LEFT_ITEM); case KEY_RIGHT : return(REQ_RIGHT_ITEM); case KEY_END : return(REQ_LAST_ITEM); case KEY_BACKSPACE : return(REQ_BACK_PATTERN); case KEY_NPAGE : return(REQ_SCR_DPAGE); case KEY_PPAGE : return(REQ_SCR_UPAGE); default: return(c); } } NCursesMenuItem* NCursesMenu::operator()(void) { int drvCmnd; int err; int c; bool b_action = FALSE; post(); show(); refresh(); while (!b_action && ((drvCmnd = virtualize((c=getKey()))) != CMD_QUIT)) { switch((err=driver(drvCmnd))) { case E_REQUEST_DENIED: On_Request_Denied(c); break; case E_NOT_SELECTABLE: On_Not_Selectable(c); break; case E_UNKNOWN_COMMAND: if (drvCmnd == CMD_ACTION) { if (options() & O_ONEVALUE) { NCursesMenuItem* itm = current_item(); assert(itm != 0); if (itm->options() & O_SELECTABLE) { b_action = itm->action(); refresh(); } else On_Not_Selectable(c); } else { int n = count(); for(int i=0; ivalue()) { b_action |= itm->action(); refresh(); } } } } else On_Unknown_Command(c); break; case E_NO_MATCH: On_No_Match(c); break; case E_OK: break; default: OnError(err); } } unpost(); hide(); refresh(); if (options() & O_ONEVALUE) return my_items[::item_index (::current_item (menu))]; else return NULL; } void NCursesMenu::On_Menu_Init() { } void NCursesMenu::On_Menu_Termination() { } void NCursesMenu::On_Item_Init(NCursesMenuItem& item) { (void) item; } void NCursesMenu::On_Item_Termination(NCursesMenuItem& item) { (void) item; } void NCursesMenu::On_Request_Denied(int c) const { (void) c; ::beep(); } void NCursesMenu::On_Not_Selectable(int c) const { (void) c; ::beep(); } void NCursesMenu::On_No_Match(int c) const { (void) c; ::beep(); } void NCursesMenu::On_Unknown_Command(int c) const { (void) c; ::beep(); } ncurses-6.0-20160213/c++/cursespad.cc0000644000175100001440000001722612125640340015331 0ustar tomusers// * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1999 * ****************************************************************************/ #include "internal.h" #include MODULE_ID("$Id: cursespad.cc,v 1.17 2013/03/30 19:45:36 tom Exp $") NCursesPad::NCursesPad(int nlines, int ncols) : NCursesWindow(), viewWin(static_cast(0)), viewSub(static_cast(0)), h_gridsize(0), v_gridsize(0), min_row(0), min_col(0) { w = ::newpad(nlines, ncols); if (static_cast(0) == w) { count--; err_handler("Cannot construct window"); } alloced = TRUE; } int NCursesPad::driver (int key) { // Default implementation switch(key) { case KEY_UP: // ======= return REQ_PAD_UP; case KEY_DOWN: // ========= return REQ_PAD_DOWN; case KEY_LEFT: // ========= return REQ_PAD_LEFT; case KEY_RIGHT: // ========== return REQ_PAD_RIGHT; case KEY_EXIT: // ========= case CTRL('X'): // ========== return REQ_PAD_EXIT; default: return(key); } } void NCursesPad::operator()(void) { NCursesWindow* W = Win(); if (static_cast(0) != W) { int Width = W->width(); int Height = W->height(); int req = REQ_PAD_REFRESH; W->keypad(TRUE); W->meta(TRUE); refresh(); do { bool changed = FALSE; switch (req) { case REQ_PAD_REFRESH: // ================ changed = TRUE; break; case REQ_PAD_LEFT: // ============= if (min_col > 0) { changed = TRUE; if (min_col < h_gridsize) min_col = 0; else min_col -= h_gridsize; } else OnNavigationError(req); break; case REQ_PAD_RIGHT: // ============== if (min_col < (width() - Width - 1)) { changed = TRUE; if (min_col > (width() - Width - h_gridsize - 1)) min_col = width() - Width - 1; else min_col += h_gridsize; } else OnNavigationError(req); break; case REQ_PAD_UP: // =========== if (min_row > 0) { changed = TRUE; if (min_row < v_gridsize) min_row = 0; else min_row -= v_gridsize; } else OnNavigationError(req); break; case REQ_PAD_DOWN: // ============= if (min_row < (height() - Height - 1)) { changed = TRUE; if (min_row > (height() - Height - v_gridsize - 1)) min_row = height() - Height - 1; else min_row += v_gridsize; } else OnNavigationError(req); break; default: OnUnknownOperation(req); } if (changed) { noutrefresh(); W->syncup(); OnOperation(req); viewWin->refresh(); } } while( (req=driver(W->getch())) != REQ_PAD_EXIT ); } } int NCursesPad::refresh() { int res = noutrefresh(); if (res==OK && (static_cast(0) != viewWin)) { res = (viewWin->refresh()); } return(res); } int NCursesPad::noutrefresh() { int res = OK; NCursesWindow* W = Win(); if (static_cast(0) != W) { int high = W->maxy(); int wide = W->maxx(); res = copywin(*W, min_row, min_col, 0, 0, high, wide, FALSE); if (res==OK) { W->syncup(); res = viewWin->noutrefresh(); } } return (res); } void NCursesPad::setWindow(NCursesWindow& view, int v_grid NCURSES_PARAM_INIT(1), int h_grid NCURSES_PARAM_INIT(1)) { viewWin = &view; min_row = min_col = 0; if (h_grid <=0 || v_grid <= 0) err_handler("Illegal Gridsize"); else { h_gridsize = h_grid; v_gridsize = v_grid; } } void NCursesPad::setSubWindow(NCursesWindow& sub) { if (static_cast(0) == viewWin) err_handler("Pad has no viewport"); assert(viewWin != 0); if (!viewWin->isDescendant(sub)) THROW(new NCursesException("NCursesFramePad", E_SYSTEM_ERROR)); viewSub = ⊂ } void NCursesFramedPad::OnOperation(int pad_req) { (void) pad_req; NCursesWindow* W = Win(); NCursesWindow* W2 = getWindow(); if ((static_cast(0) != W) && (static_cast(0) != W2)) { int Width = W->width(); int Height = W->height(); int i, row, col, h_len, v_len; int my_width = width(); if (my_width != 0) { h_len = (Width*Width + my_width - 1) / my_width; if (h_len==0) h_len = 1; if (h_len > Width) h_len = Width; } else { h_len = 1; } int my_height = height(); if (my_height != 0) { v_len = (Height*Height + my_height - 1) / my_height; if (v_len==0) v_len = 1; if (v_len > Height) v_len = Height; } else { v_len = 1; } if (my_width != 0) { col = (min_col * Width + my_width - 1) / my_width; if (col + h_len > Width) col = Width - h_len; } else { col = 0; } if (my_height != 0) { row = (min_row * Height + my_height - 1) / my_height; if (row + v_len > Height) row = Height - v_len; } else { row = 0; } W2->vline(1,Width+1,Height); W2->attron(A_REVERSE); if (v_len>=2) { W2->addch(row+1,Width+1,ACS_UARROW); for(i=2;iaddch(row+i,Width+1,' '); W2->addch(row+v_len,Width+1,ACS_DARROW); } else { for(i=1;i<=v_len;i++) W2->addch(row+i,Width+1,' '); } W2->attroff(A_REVERSE); W2->hline(Height+1,1,Width); W2->attron(A_REVERSE); if (h_len >= 2) { W2->addch(Height+1,col+1,ACS_LARROW); for(i=2;iaddch(Height+1,col+i,' '); W2->addch(Height+1,col+h_len,ACS_RARROW); } else { for(i=1;i<=h_len;i++) W2->addch(Height+1,col+i,' '); } W2->attroff(A_REVERSE); } } ncurses-6.0-20160213/c++/cursesmain.cc0000644000175100001440000000710712221641217015507 0ustar tomusers// * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2007,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ #include "internal.h" #include "cursesapp.h" #if CPP_HAS_TRY_CATCH && HAVE_IOSTREAM #pragma GCC diagnostic ignored "-Weffc++" #include #pragma GCC diagnostic warning "-Weffc++" #else #undef CPP_HAS_TRY_CATCH #define CPP_HAS_TRY_CATCH 0 #endif MODULE_ID("$Id: cursesmain.cc,v 1.15 2013/09/28 20:56:47 tom Exp $") #if HAVE_LOCALE_H #include #else #define setlocale(name,string) /* nothing */ #endif #if NO_LEAKS #include #endif /* This is the default implementation of main() for a NCursesApplication. * You only have to instantiate a static NCursesApplication object in your * main application source file and link this module with your application. */ int main(int argc, char* argv[]) { setlocale(LC_ALL, ""); NCursesApplication* A = NCursesApplication::getApplication(); if (!A) return(1); else { int res; A->handleArgs(argc,argv); ::endwin(); #if CPP_HAS_TRY_CATCH try { res = (*A)(); ::endwin(); } catch(const NCursesException &e) { ::endwin(); std::cerr << e.message << std::endl; res = e.errorno; } #else res = (*A)(); ::endwin(); #endif #if NO_LEAKS delete A; _nc_free_and_exit(res); #else return(res); #endif } } ncurses-6.0-20160213/c++/etip.h.in0000644000175100001440000002210512067662664014562 0ustar tomusers// * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ // $Id: etip.h.in,v 1.39 2012/12/29 21:50:44 tom Exp $ #ifndef NCURSES_ETIP_H_incl #define NCURSES_ETIP_H_incl 1 // These are substituted at configure/build time #ifndef HAVE_BUILTIN_H #define HAVE_BUILTIN_H 0 #endif #ifndef HAVE_GXX_BUILTIN_H #define HAVE_GXX_BUILTIN_H 0 #endif #ifndef HAVE_GPP_BUILTIN_H #define HAVE_GPP_BUILTIN_H 0 #endif #ifndef HAVE_IOSTREAM #define HAVE_IOSTREAM 0 #endif #ifndef HAVE_TYPEINFO #define HAVE_TYPEINFO 0 #endif #ifndef HAVE_VALUES_H #define HAVE_VALUES_H 0 #endif #ifndef ETIP_NEEDS_MATH_H #define ETIP_NEEDS_MATH_H 0 #endif #ifndef ETIP_NEEDS_MATH_EXCEPTION #define ETIP_NEEDS_MATH_EXCEPTION 0 #endif #ifndef CPP_HAS_PARAM_INIT #define CPP_HAS_PARAM_INIT 0 #endif #ifndef CPP_HAS_STATIC_CAST #define CPP_HAS_STATIC_CAST 0 // workaround for g++ 2.95.3 #endif #ifndef IOSTREAM_NAMESPACE #define IOSTREAM_NAMESPACE 0 #endif #ifdef __GNUG__ # if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) # if HAVE_TYPEINFO # include # endif # endif #endif #if defined(__GNUG__) # if HAVE_BUILTIN_H || HAVE_GXX_BUILTIN_H || HAVE_GPP_BUILTIN_H # if ETIP_NEEDS_MATH_H # if ETIP_NEEDS_MATH_EXCEPTION # undef exception # define exception math_exception # endif # include # endif # undef exception # define exception builtin_exception # if HAVE_GPP_BUILTIN_H # include # elif HAVE_GXX_BUILTIN_H # include # else # include # endif # undef exception # endif #elif defined (__SUNPRO_CC) # include #endif #include extern "C" { #if HAVE_VALUES_H # include #endif #include #include #include } // Language features #if CPP_HAS_PARAM_INIT #define NCURSES_PARAM_INIT(value) = value #else #define NCURSES_PARAM_INIT(value) /*nothing*/ #endif #if CPP_HAS_STATIC_CAST #define STATIC_CAST(s) static_cast #else #define STATIC_CAST(s) (s) #endif // Forward Declarations class NCURSES_IMPEXP NCursesPanel; class NCURSES_IMPEXP NCursesMenu; class NCURSES_IMPEXP NCursesForm; class NCURSES_IMPEXP NCursesException { public: const char *message; int errorno; NCursesException (const char* msg, int err) : message(msg), errorno (err) {}; NCursesException (const char* msg) : message(msg), errorno (E_SYSTEM_ERROR) {}; NCursesException& operator=(const NCursesException& rhs) { errorno = rhs.errorno; return *this; } NCursesException(const NCursesException& rhs) : message(rhs.message), errorno(rhs.errorno) { } virtual const char *classname() const { return "NCursesWindow"; } virtual ~NCursesException() { } }; class NCURSES_IMPEXP NCursesPanelException : public NCursesException { public: const NCursesPanel* p; NCursesPanelException (const char *msg, int err) : NCursesException (msg, err), p (0) {}; NCursesPanelException (const NCursesPanel* panel, const char *msg, int err) : NCursesException (msg, err), p (panel) {}; NCursesPanelException (int err) : NCursesException ("panel library error", err), p (0) {}; NCursesPanelException (const NCursesPanel* panel, int err) : NCursesException ("panel library error", err), p (panel) {}; NCursesPanelException& operator=(const NCursesPanelException& rhs) { if (this != &rhs) { NCursesException::operator=(rhs); p = rhs.p; } return *this; } NCursesPanelException(const NCursesPanelException& rhs) : NCursesException(rhs), p(rhs.p) { } virtual const char *classname() const { return "NCursesPanel"; } virtual ~NCursesPanelException() { } }; class NCURSES_IMPEXP NCursesMenuException : public NCursesException { public: const NCursesMenu* m; NCursesMenuException (const char *msg, int err) : NCursesException (msg, err), m (0) {}; NCursesMenuException (const NCursesMenu* menu, const char *msg, int err) : NCursesException (msg, err), m (menu) {}; NCursesMenuException (int err) : NCursesException ("menu library error", err), m (0) {}; NCursesMenuException (const NCursesMenu* menu, int err) : NCursesException ("menu library error", err), m (menu) {}; NCursesMenuException& operator=(const NCursesMenuException& rhs) { if (this != &rhs) { NCursesException::operator=(rhs); m = rhs.m; } return *this; } NCursesMenuException(const NCursesMenuException& rhs) : NCursesException(rhs), m(rhs.m) { } virtual const char *classname() const { return "NCursesMenu"; } virtual ~NCursesMenuException() { } }; class NCURSES_IMPEXP NCursesFormException : public NCursesException { public: const NCursesForm* f; NCursesFormException (const char *msg, int err) : NCursesException (msg, err), f (0) {}; NCursesFormException (const NCursesForm* form, const char *msg, int err) : NCursesException (msg, err), f (form) {}; NCursesFormException (int err) : NCursesException ("form library error", err), f (0) {}; NCursesFormException (const NCursesForm* form, int err) : NCursesException ("form library error", err), f (form) {}; NCursesFormException& operator=(const NCursesFormException& rhs) { if (this != &rhs) { NCursesException::operator=(rhs); f = rhs.f; } return *this; } NCursesFormException(const NCursesFormException& rhs) : NCursesException(rhs), f(rhs.f) { } virtual const char *classname() const { return "NCursesForm"; } virtual ~NCursesFormException() { } }; #if !((defined(__GNUG__) && defined(__EXCEPTIONS)) || defined(__SUNPRO_CC)) # if HAVE_IOSTREAM # include # if IOSTREAM_NAMESPACE using std::cerr; using std::endl; # endif # else # include # endif extern "C" void exit(int); #endif inline void THROW(const NCursesException *e) { #if defined(__GNUG__) && defined(__EXCEPTIONS) # if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) (*lib_error_handler)(e ? e->classname() : "", e ? e->message : ""); #else #define CPP_HAS_TRY_CATCH 1 #endif #elif defined(__SUNPRO_CC) # if !defined(__SUNPRO_CC_COMPAT) || (__SUNPRO_CC_COMPAT < 5) genericerror(1, ((e != 0) ? (char *)(e->message) : "")); #else #define CPP_HAS_TRY_CATCH 1 #endif #else if (e) cerr << e->message << endl; exit(0); #endif #ifndef CPP_HAS_TRY_CATCH #define CPP_HAS_TRY_CATCH 0 #define NCURSES_CPP_TRY /* nothing */ #define NCURSES_CPP_CATCH(e) if (false) #define THROWS(s) /* nothing */ #define THROW2(s,t) /* nothing */ #elif CPP_HAS_TRY_CATCH throw *e; #define NCURSES_CPP_TRY try #define NCURSES_CPP_CATCH(e) catch(e) #define THROWS(s) throw(s) #define THROW2(s,t) throw(s,t) #endif } #endif /* NCURSES_ETIP_H_incl */ ncurses-6.0-20160213/c++/Makefile.in0000644000175100001440000001640712610551300015072 0ustar tomusers# $Id: Makefile.in,v 1.113 2015/10/17 22:59:12 tom Exp $ ############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey # # Simple makefile for c++ window class demo # turn off _all_ suffix rules; we'll generate our own .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ CF_MFLAGS = @cf_cv_makeflags@ @SET_MAKE@ x = @EXEEXT@ o = .@OBJEXT@ MODEL = ../@DFT_OBJ_SUBDIR@ DESTDIR = @DESTDIR@ top_srcdir = @top_srcdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ includesubdir = @includesubdir@ INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir) PACKAGE = @PACKAGE@ LIBTOOL = @LIBTOOL_CXX@ LIBTOOL_OPTS = @LIBTOOL_OPTS@ @LIBTOOL_OPTS_CXX@ LIBTOOL_CLEAN = @LIB_CLEAN@ LIBTOOL_COMPILE = @LIB_COMPILE@ LIBTOOL_LINK = @LIB_LINK@ LIBTOOL_INSTALL = @LIB_INSTALL@ LIBTOOL_UNINSTALL = @LIB_UNINSTALL@ LIBTOOL_VERSION = @LIBTOOL_VERSION@ LT_UNDEF = @LT_UNDEF@ INSTALL = @INSTALL@ INSTALL_LIB = @INSTALL@ @INSTALL_LIB@ INSTALL_DATA = @INSTALL_DATA@ AR = @AR@ ARFLAGS = @ARFLAGS@ AWK = @AWK@ LD = @LD@ LN_S = @LN_S@ CXX_AR = @CXX_AR@ CXX_ARFLAGS = @CXX_ARFLAGS@ RANLIB = @LIB_PREP@ CXX = @CXX@ CPP = @CXXCPP@ CXXFLAGS = @CXXFLAGS@ @EXTRA_CXXFLAGS@ CXXLIBS = @CXXLIBS@ INCDIR = ../include CPPFLAGS = -DHAVE_CONFIG_H @CPPFLAGS@ CTAGS = @CTAGS@ ETAGS = @ETAGS@ CC = ${CXX} CCFLAGS = $(CPPFLAGS) $(CXXFLAGS) CFLAGS_LIBTOOL = $(CCFLAGS) CFLAGS_NORMAL = $(CCFLAGS) CFLAGS_DEBUG = $(CCFLAGS) @CXX_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) NCURSES_MAJOR = @NCURSES_MAJOR@ NCURSES_MINOR = @NCURSES_MINOR@ REL_VERSION = @cf_cv_rel_version@ ABI_VERSION = @cf_cv_abi_version@ LOCAL_LIBDIR = @top_builddir@/lib LINK = @LINK_PROGS@ $(LIBTOOL_LINK) @CXXLDFLAGS@ SHLIB_DIRS = -L../lib SHLIB_LIST = $(SHLIB_DIRS) -lform@USE_LIB_SUFFIX@ -lmenu@USE_LIB_SUFFIX@ -lpanel@USE_LIB_SUFFIX@ -lncurses@USE_LIB_SUFFIX@ @SHLIB_LIST@ LIBROOT = ncurses++ LIBNAME_LIBTOOL = @LIB_PREFIX@$(LIBROOT)@USE_LIB_SUFFIX@.la LIBNAME_NORMAL = @LIB_PREFIX@$(LIBROOT)@USE_LIB_SUFFIX@.a LIBNAME = @LIB_PREFIX@$(LIBROOT)@CXX_LIB_SUFFIX@ LIBRARIES = @Libs_To_Make@ LINK_FLAGS = @EXTRA_LDFLAGS@ -L../lib -l$(LIBROOT)@USE_LIB_SUFFIX@ RPATH_LIST = @RPATH_LIST@ MK_SHARED_LIB = @MK_SHARED_LIB@ LINK_LIBTOOL = @EXTRA_LDFLAGS@ -L../lib $(LIBRARIES) LINK_NORMAL = $(LINK_FLAGS) LINK_DEBUG = $(LINK_FLAGS) LINK_PROFILE = $(LINK_FLAGS) LINK_SHARED = $(LINK_FLAGS) # flags for test-programs TEST_LIBS = @TEST_LIBS@ TEST_ARGS = @LDFLAGS_STATIC@ @TEST_ARGS@ @LDFLAGS_SHARED@ TEST_LDFLAGS = $(TEST_ARGS) @LDFLAGS@ \ @LD_MODEL@ $(TEST_LIBS) @LIBS@ @LOCAL_LDFLAGS@ $(CXXLIBS) LDFLAGS_LIBTOOL = $(TEST_LDFLAGS) $(CFLAGS_LIBTOOL) LDFLAGS_NORMAL = $(TEST_LDFLAGS) $(CFLAGS_NORMAL) LDFLAGS_DEBUG = $(TEST_LDFLAGS) $(CFLAGS_DEBUG) LDFLAGS_PROFILE = $(TEST_LDFLAGS) $(CFLAGS_PROFILE) LDFLAGS_SHARED = $(TEST_LDFLAGS) $(CFLAGS_SHARED) @LD_SHARED_OPTS@ LDFLAGS_DEFAULT = $(LINK_@DFT_UPR_MODEL@) $(LDFLAGS_@DFT_UPR_MODEL@) # flags for library built by this makefile LDFLAGS = $(TEST_ARGS) @LDFLAGS@ \ @LD_MODEL@ $(TEST_LIBS) @LIBS@ $(CXXLIBS) AUTO_SRC = \ etip.h all \ libs :: $(AUTO_SRC) $(LIBRARIES) @MAKE_TESTS@all :: demo$x sources : $(AUTO_SRC) depend : tags: $(CTAGS) *.[h] *.cc $(DESTDIR)$(libdir) : mkdir -p $@ mostlyclean :: -rm -f core tags TAGS *~ *.bak *.i *.ii *.ln *.atac trace clean :: mostlyclean -$(SHELL) -c "if test -n '$x' ; then $(MAKE) clean x=''; fi" -rm -rf $(MODEL)/SunWS_cache -$(LIBTOOL_CLEAN) rm -f demo$x $(AUTO_SRC) $(LIBRARIES) $(OBJS_DEMO) -rm -rf .libs *.dSYM distclean :: clean -rm -f Makefile realclean :: distclean ############################################################################### internal_h = $(srcdir)/internal.h \ $(INCDIR)/ncurses_cfg.h \ $(INCDIR)/nc_mingw.h \ $(INCDIR)/nc_string.h etip_h = etip.h \ $(INCDIR)/ncurses_dll.h cursesw_h = $(srcdir)/cursesw.h \ $(etip_h) \ $(INCDIR)/curses.h cursesp_h = $(srcdir)/cursesp.h \ $(cursesw_h) \ $(INCDIR)/panel.h cursesf_h = $(srcdir)/cursesf.h \ $(cursesp_h) \ $(INCDIR)/form.h cursesm_h = $(srcdir)/cursesm.h \ $(cursesp_h) \ $(INCDIR)/menu.h cursslk_h = $(srcdir)/cursslk.h \ $(cursesw_h) cursesapp_h = $(srcdir)/cursesapp.h \ $(cursslk_h) $(INCDIR)/form.h : cd ../form && $(MAKE) $@ $(INCDIR)/menu.h : cd ../menu && $(MAKE) $@ $(INCDIR)/panel.h : cd ../panel && $(MAKE) $@ ############################################################################### OBJS_DEMO = $(MODEL)/demo$o $(MODEL)/demo$o : $(srcdir)/demo.cc \ $(internal_h) \ $(cursesf_h) \ $(cursesm_h) \ $(cursesapp_h) @echo 'compiling demo (obj_s)' @$(LIBTOOL_COMPILE) $(CXX) $(CFLAGS_DEFAULT) -c $(srcdir)/demo.cc -o $@ demo$x: $(OBJS_DEMO) \ $(LIBRARIES) \ @TEST_DEPS@ @ECHO_LD@ $(LINK) -o $@ $(OBJS_DEMO) $(LDFLAGS_DEFAULT) etip.h: $(srcdir)/etip.h.in $(srcdir)/edit_cfg.sh cp $(srcdir)/etip.h.in $@ $(SHELL) $(srcdir)/edit_cfg.sh ../include/ncurses_cfg.h $@ ############################################################################### # The remainder of this file is automatically generated during configuration ############################################################################### ncurses-6.0-20160213/c++/cursslk.h0000644000175100001440000001621010246164572014672 0ustar tomusers// * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2003,2005 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ // $Id: cursslk.h,v 1.13 2005/05/28 21:58:18 tom Exp $ #ifndef NCURSES_CURSSLK_H_incl #define NCURSES_CURSSLK_H_incl #include class NCURSES_IMPEXP Soft_Label_Key_Set { public: // This inner class represents the attributes of a Soft Label Key (SLK) class NCURSES_IMPEXP Soft_Label_Key { friend class Soft_Label_Key_Set; public: typedef enum { Left=0, Center=1, Right=2 } Justification; private: char *label; // The Text of the Label Justification format; // The Justification int num; // The number of the Label Soft_Label_Key() : label(NULL), format(Left), num(-1) { } virtual ~Soft_Label_Key() { delete[] label; }; public: // Set the text of the Label Soft_Label_Key& operator=(char *text); // Set the Justification of the Label Soft_Label_Key& operator=(Justification just) { format = just; return *this; } // Retrieve the text of the label inline char* operator()(void) const { return label; } Soft_Label_Key& operator=(const Soft_Label_Key& rhs) { if (this != &rhs) { *this = rhs; } return *this; } Soft_Label_Key(const Soft_Label_Key& rhs) : label(NULL), format(rhs.format), num(rhs.num) { *this = rhs.label; } }; public: typedef enum { None = -1, Three_Two_Three = 0, Four_Four = 1, PC_Style = 2, PC_Style_With_Index = 3 } Label_Layout; private: static long NCURSES_IMPEXP count; // Number of Key Sets static Label_Layout NCURSES_IMPEXP format; // Layout of the Key Sets static int NCURSES_IMPEXP num_labels; // Number Of Labels in Key Sets bool NCURSES_IMPEXP b_attrInit; // Are attributes initialized Soft_Label_Key *slk_array; // The array of SLK's // Init the Key Set void init(); // Activate or Deactivate Label# i, Label counting starts with 1! void activate_label(int i, bool bf=TRUE); // Activate of Deactivate all Labels void activate_labels(bool bf); protected: inline void Error (const char* msg) const THROWS(NCursesException) { THROW(new NCursesException (msg)); } // Remove SLK's from screen void clear() { if (ERR==::slk_clear()) Error("slk_clear"); } // Restore them void restore() { if (ERR==::slk_restore()) Error("slk_restore"); } public: // Construct a Key Set, use the most comfortable layout as default. // You must create a Soft_Label_Key_Set before you create any object of // the NCursesWindow, NCursesPanel or derived classes. (Actually before // ::initscr() is called). Soft_Label_Key_Set(Label_Layout fmt); // This constructor assumes, that you already constructed a Key Set // with a layout by the constructor above. This layout will be reused. NCURSES_IMPEXP Soft_Label_Key_Set(); Soft_Label_Key_Set& operator=(const Soft_Label_Key_Set& rhs) { if (this != &rhs) { *this = rhs; init(); // allocate a new slk_array[] } return *this; } Soft_Label_Key_Set(const Soft_Label_Key_Set& rhs) : b_attrInit(rhs.b_attrInit), slk_array(NULL) { init(); // allocate a new slk_array[] } virtual ~Soft_Label_Key_Set(); // Get Label# i. Label counting starts with 1! NCURSES_IMPEXP Soft_Label_Key& operator[](int i); // Retrieve number of Labels inline int labels() const { return num_labels; } // Refresh the SLK portion of the screen inline void refresh() { if (ERR==::slk_refresh()) Error("slk_refresh"); } // Mark the SLK portion of the screen for refresh, defer actual refresh // until next update call. inline void noutrefresh() { if (ERR==::slk_noutrefresh()) Error("slk_noutrefresh"); } // Mark the whole SLK portion of the screen as modified inline void touch() { if (ERR==::slk_touch()) Error("slk_touch"); } // Activate Label# i inline void show(int i) { activate_label(i,FALSE); activate_label(i,TRUE); } // Hide Label# i inline void hide(int i) { activate_label(i,FALSE); } // Show all Labels inline void show() { activate_labels(FALSE); activate_labels(TRUE); } // Hide all Labels inline void hide() { activate_labels(FALSE); } inline void attron(attr_t attrs) { if (ERR==::slk_attron(attrs)) Error("slk_attron"); } inline void attroff(attr_t attrs) { if (ERR==::slk_attroff(attrs)) Error("slk_attroff"); } inline void attrset(attr_t attrs) { if (ERR==::slk_attrset(attrs)) Error("slk_attrset"); } inline void color(short color_pair_number) { if (ERR==::slk_color(color_pair_number)) Error("slk_color"); } inline attr_t attr() const { return ::slk_attr(); } }; #endif /* NCURSES_CURSSLK_H_incl */ ncurses-6.0-20160213/c++/PROBLEMS0000644000175100001440000000456510422525771014211 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: PROBLEMS,v 1.3 2006/04/22 22:19:37 tom Exp $ ------------------------------------------------------------------------------- This is a list of open problems. This mainly lists known missing pieces and design flaws. 1. Testing!!! 2. Better demo program ncurses-6.0-20160213/c++/cursesf.cc0000644000175100001440000002742511635215472015025 0ustar tomusers// * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2005,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ #include "internal.h" #include "cursesf.h" #include "cursesapp.h" MODULE_ID("$Id: cursesf.cc,v 1.22 2011/09/17 22:12:10 tom Exp $") NCursesFormField::~NCursesFormField () { if (field) OnError(::free_field (field)); } /* Construct a FIELD* array from an array of NCursesFormField * objects. */ FIELD** NCursesForm::mapFields(NCursesFormField* nfields[]) { int fieldCount = 0,lcv; FIELD** old_fields; assert(nfields != 0); for (lcv=0; nfields[lcv]->field; ++lcv) ++fieldCount; FIELD** fields = new FIELD*[fieldCount + 1]; for (lcv=0;nfields[lcv]->field;++lcv) { fields[lcv] = nfields[lcv]->field; } fields[lcv] = NULL; my_fields = nfields; if (form && (old_fields = ::form_fields(form))) { ::set_form_fields(form, static_cast(0)); delete[] old_fields; } return fields; } void NCursesForm::setDefaultAttributes() { NCursesApplication* S = NCursesApplication::getApplication(); int n = count(); if (n > 0) { for(int i=0; ioptions() & (O_EDIT|O_ACTIVE))==(O_EDIT|O_ACTIVE)) { if (S) { f->set_foreground(S->foregrounds()); f->set_background(S->backgrounds()); } f->set_pad_character('_'); } else { if (S) f->set_background(S->labels()); } } } if (S) { bkgd(' '|S->dialog_backgrounds()); if (sub) sub->bkgd(' '|S->dialog_backgrounds()); } } void NCursesForm::InitForm(NCursesFormField* nfields[], bool with_frame, bool autoDelete_Fields) { int mrows, mcols; keypad(TRUE); meta(TRUE); b_framed = with_frame; b_autoDelete = autoDelete_Fields; form = static_cast(0); form = ::new_form(mapFields(nfields)); if (!form) OnError (E_SYSTEM_ERROR); UserHook* hook = new UserHook; hook->m_user = NULL; hook->m_back = this; hook->m_owner = form; ::set_form_userptr(form, reinterpret_cast(hook)); ::set_form_init (form, _nc_xx_frm_init); ::set_form_term (form, _nc_xx_frm_term); ::set_field_init (form, _nc_xx_fld_init); ::set_field_term (form, _nc_xx_fld_term); scale(mrows, mcols); ::set_form_win(form, w); if (with_frame) { if ((mrows > height()-2) || (mcols > width()-2)) OnError(E_NO_ROOM); sub = new NCursesWindow(*this,mrows,mcols,1,1,'r'); ::set_form_sub(form, sub->w); b_sub_owner = TRUE; } else { sub = static_cast(0); b_sub_owner = FALSE; } options_on(O_NL_OVERLOAD); setDefaultAttributes(); } NCursesForm::~NCursesForm() { UserHook* hook = reinterpret_cast(::form_userptr(form)); delete hook; if (b_sub_owner) { delete sub; ::set_form_sub(form, static_cast(0)); } if (form) { FIELD** fields = ::form_fields(form); int cnt = count(); OnError(::set_form_fields(form, static_cast(0))); if (b_autoDelete) { if (cnt>0) { for (int i=0; i <= cnt; i++) delete my_fields[i]; } delete[] my_fields; } ::free_form(form); // It's essential to do this after free_form() delete[] fields; } } void NCursesForm::setSubWindow(NCursesWindow& nsub) { if (!isDescendant(nsub)) OnError(E_SYSTEM_ERROR); else { if (b_sub_owner) delete sub; sub = ⊄ ::set_form_sub(form,sub->w); } } /* Internal hook functions. They will route the hook * calls to virtual methods of the NCursesForm class, * so in C++ providing a hook is done simply by * implementing a virtual method in a derived class */ void _nc_xx_frm_init(FORM *f) { NCursesForm::getHook(f)->On_Form_Init(); } void _nc_xx_frm_term(FORM *f) { NCursesForm::getHook(f)->On_Form_Termination(); } void _nc_xx_fld_init(FORM *f) { NCursesForm* F = NCursesForm::getHook(f); F->On_Field_Init (*(F->current_field ())); } void _nc_xx_fld_term(FORM *f) { NCursesForm* F = NCursesForm::getHook(f); F->On_Field_Termination (*(F->current_field ())); } void NCursesForm::On_Form_Init() { } void NCursesForm::On_Form_Termination() { } void NCursesForm::On_Field_Init(NCursesFormField& field) { (void) field; } void NCursesForm::On_Field_Termination(NCursesFormField& field) { (void) field; } // call the form driver and do basic error checking. int NCursesForm::driver (int c) { int res = ::form_driver (form, c); switch (res) { case E_OK: case E_REQUEST_DENIED: case E_INVALID_FIELD: case E_UNKNOWN_COMMAND: break; default: OnError (res); } return (res); } void NCursesForm::On_Request_Denied(int c) const { (void) c; ::beep(); } void NCursesForm::On_Invalid_Field(int c) const { (void) c; ::beep(); } void NCursesForm::On_Unknown_Command(int c) const { (void) c; ::beep(); } static const int CMD_QUIT = MAX_COMMAND + 1; NCursesFormField* NCursesForm::operator()(void) { int drvCmnd; int err; int c; post(); show(); refresh(); while (((drvCmnd = virtualize((c=getKey()))) != CMD_QUIT)) { switch((err=driver(drvCmnd))) { case E_REQUEST_DENIED: On_Request_Denied(c); break; case E_INVALID_FIELD: On_Invalid_Field(c); break; case E_UNKNOWN_COMMAND: On_Unknown_Command(c); break; case E_OK: break; default: OnError(err); } } unpost(); hide(); refresh(); return my_fields[::field_index (::current_field (form))]; } // Provide a default key virtualization. Translate the keyboard // code c into a form request code. // The default implementation provides a hopefully straightforward // mapping for the most common keystrokes and form requests. int NCursesForm::virtualize(int c) { switch(c) { case KEY_HOME : return(REQ_FIRST_FIELD); case KEY_END : return(REQ_LAST_FIELD); case KEY_DOWN : return(REQ_DOWN_CHAR); case KEY_UP : return(REQ_UP_CHAR); case KEY_LEFT : return(REQ_PREV_CHAR); case KEY_RIGHT : return(REQ_NEXT_CHAR); case KEY_NPAGE : return(REQ_NEXT_PAGE); case KEY_PPAGE : return(REQ_PREV_PAGE); case KEY_BACKSPACE : return(REQ_DEL_PREV); case KEY_ENTER : return(REQ_NEW_LINE); case KEY_CLEAR : return(REQ_CLR_FIELD); case CTRL('X') : return(CMD_QUIT); // eXit case CTRL('F') : return(REQ_NEXT_FIELD); // Forward case CTRL('B') : return(REQ_PREV_FIELD); // Backward case CTRL('L') : return(REQ_LEFT_FIELD); // Left case CTRL('R') : return(REQ_RIGHT_FIELD); // Right case CTRL('U') : return(REQ_UP_FIELD); // Up case CTRL('D') : return(REQ_DOWN_FIELD); // Down case CTRL('W') : return(REQ_NEXT_WORD); case CTRL('T') : return(REQ_PREV_WORD); case CTRL('A') : return(REQ_BEG_FIELD); case CTRL('E') : return(REQ_END_FIELD); case CTRL('I') : return(REQ_INS_CHAR); case CTRL('M') : case CTRL('J') : return(REQ_NEW_LINE); case CTRL('O') : return(REQ_INS_LINE); case CTRL('V') : return(REQ_DEL_CHAR); case CTRL('H') : return(REQ_DEL_PREV); case CTRL('Y') : return(REQ_DEL_LINE); case CTRL('G') : return(REQ_DEL_WORD); case CTRL('K') : return(REQ_CLR_EOF); case CTRL('N') : return(REQ_NEXT_CHOICE); case CTRL('P') : return(REQ_PREV_CHOICE); default: return(c); } } // // ------------------------------------------------------------------------- // User Defined Fieldtypes // ------------------------------------------------------------------------- // bool _nc_xx_fld_fcheck(FIELD *f, const void *u) { (void) f; NCursesFormField* F = reinterpret_cast(const_cast(u)); assert(F != 0); UserDefinedFieldType* udf = reinterpret_cast(F->fieldtype()); assert(udf != 0); return udf->field_check(*F); } bool _nc_xx_fld_ccheck(int c, const void *u) { NCursesFormField* F = reinterpret_cast(const_cast(u)); assert(F != 0); UserDefinedFieldType* udf = reinterpret_cast(F->fieldtype()); assert(udf != 0); return udf->char_check(c); } void* _nc_xx_fld_makearg(va_list* va) { return va_arg(*va,NCursesFormField*); } FIELDTYPE* UserDefinedFieldType::generic_fieldtype = ::new_fieldtype(_nc_xx_fld_fcheck, _nc_xx_fld_ccheck); FIELDTYPE* UserDefinedFieldType_With_Choice::generic_fieldtype_with_choice = ::new_fieldtype(_nc_xx_fld_fcheck, _nc_xx_fld_ccheck); bool _nc_xx_next_choice(FIELD *f, const void *u) { (void) f; NCursesFormField* F = reinterpret_cast(const_cast(u)); assert(F != 0); UserDefinedFieldType_With_Choice* udf = reinterpret_cast(F->fieldtype()); assert(udf != 0); return udf->next(*F); } bool _nc_xx_prev_choice(FIELD *f, const void *u) { (void) f; NCursesFormField* F = reinterpret_cast(const_cast(u)); assert(F != 0); UserDefinedFieldType_With_Choice* udf = reinterpret_cast(F->fieldtype()); assert(udf != 0); return udf->previous(*F); } class UDF_Init { private: int code; static UDF_Init* I; public: UDF_Init() : code(0) { code = ::set_fieldtype_arg(UserDefinedFieldType::generic_fieldtype, _nc_xx_fld_makearg, NULL, NULL); if (code==E_OK) code = ::set_fieldtype_arg (UserDefinedFieldType_With_Choice::generic_fieldtype_with_choice, _nc_xx_fld_makearg, NULL, NULL); if (code==E_OK) code = ::set_fieldtype_choice (UserDefinedFieldType_With_Choice::generic_fieldtype_with_choice, _nc_xx_next_choice, _nc_xx_prev_choice); } }; UDF_Init* UDF_Init::I = new UDF_Init(); ncurses-6.0-20160213/c++/cursesw.h0000644000175100001440000014057212273271201014676 0ustar tomusers// * This makes emacs happy -*-Mode: C++;-*- // vile:cppmode /**************************************************************************** * Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ #ifndef NCURSES_CURSESW_H_incl #define NCURSES_CURSESW_H_incl 1 // $Id: cursesw.h,v 1.50 2014/02/01 22:17:37 tom Exp $ #include extern "C" { # include } /* SCO 3.2v4 curses.h includes term.h, which defines lines as a macro. Undefine it here, because NCursesWindow uses lines as a method. */ #undef lines /* "Convert" macros to inlines. We'll define it as another symbol to avoid * conflict with library symbols. */ #undef UNDEF #define UNDEF(name) CUR_ ##name #ifdef addch inline int UNDEF(addch)(chtype ch) { return addch(ch); } #undef addch #define addch UNDEF(addch) #endif #ifdef addchstr inline int UNDEF(addchstr)(chtype *at) { return addchstr(at); } #undef addchstr #define addchstr UNDEF(addchstr) #endif #ifdef addnstr inline int UNDEF(addnstr)(const char *str, int n) { return addnstr(str, n); } #undef addnstr #define addnstr UNDEF(addnstr) #endif #ifdef addstr inline int UNDEF(addstr)(const char * str) { return addstr(str); } #undef addstr #define addstr UNDEF(addstr) #endif #ifdef attroff inline int UNDEF(attroff)(chtype at) { return attroff(at); } #undef attroff #define attroff UNDEF(attroff) #endif #ifdef attron inline int UNDEF(attron)(chtype at) { return attron(at); } #undef attron #define attron UNDEF(attron) #endif #ifdef attrset inline chtype UNDEF(attrset)(chtype at) { return attrset(at); } #undef attrset #define attrset UNDEF(attrset) #endif #ifdef bkgd inline int UNDEF(bkgd)(chtype ch) { return bkgd(ch); } #undef bkgd #define bkgd UNDEF(bkgd) #endif #ifdef bkgdset inline void UNDEF(bkgdset)(chtype ch) { bkgdset(ch); } #undef bkgdset #define bkgdset UNDEF(bkgdset) #endif #ifdef border inline int UNDEF(border)(chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br) { return border(ls, rs, ts, bs, tl, tr, bl, br); } #undef border #define border UNDEF(border) #endif #ifdef box inline int UNDEF(box)(WINDOW *win, int v, int h) { return box(win, v, h); } #undef box #define box UNDEF(box) #endif #ifdef chgat inline int UNDEF(chgat)(int n, attr_t attr, NCURSES_PAIRS_T color, const void *opts) { return chgat(n, attr, color, opts); } #undef chgat #define chgat UNDEF(chgat) #endif #ifdef clear inline int UNDEF(clear)() { return clear(); } #undef clear #define clear UNDEF(clear) #endif #ifdef clearok inline int UNDEF(clearok)(WINDOW* win, bool bf) { return clearok(win, bf); } #undef clearok #define clearok UNDEF(clearok) #else extern "C" NCURSES_IMPEXP int NCURSES_API clearok(WINDOW*, bool); #endif #ifdef clrtobot inline int UNDEF(clrtobot)() { return clrtobot(); } #undef clrtobot #define clrtobot UNDEF(clrtobot) #endif #ifdef clrtoeol inline int UNDEF(clrtoeol)() { return clrtoeol(); } #undef clrtoeol #define clrtoeol UNDEF(clrtoeol) #endif #ifdef color_set inline chtype UNDEF(color_set)(NCURSES_PAIRS_T p, void* opts) { return color_set(p, opts); } #undef color_set #define color_set UNDEF(color_set) #endif #ifdef crmode inline int UNDEF(crmode)(void) { return crmode(); } #undef crmode #define crmode UNDEF(crmode) #endif #ifdef delch inline int UNDEF(delch)() { return delch(); } #undef delch #define delch UNDEF(delch) #endif #ifdef deleteln inline int UNDEF(deleteln)() { return deleteln(); } #undef deleteln #define deleteln UNDEF(deleteln) #endif #ifdef echochar inline int UNDEF(echochar)(chtype ch) { return echochar(ch); } #undef echochar #define echochar UNDEF(echochar) #endif #ifdef erase inline int UNDEF(erase)() { return erase(); } #undef erase #define erase UNDEF(erase) #endif #ifdef fixterm inline int UNDEF(fixterm)(void) { return fixterm(); } #undef fixterm #define fixterm UNDEF(fixterm) #endif #ifdef flushok inline int UNDEF(flushok)(WINDOW* _win, bool _bf) { return flushok(_win, _bf); } #undef flushok #define flushok UNDEF(flushok) #else #define _no_flushok #endif #ifdef getattrs inline int UNDEF(getattrs)(WINDOW *win) { return getattrs(win); } #undef getattrs #define getattrs UNDEF(getattrs) #endif #ifdef getbegyx inline void UNDEF(getbegyx)(WINDOW* win, int& y, int& x) { getbegyx(win, y, x); } #undef getbegyx #define getbegyx UNDEF(getbegyx) #endif #ifdef getbkgd inline chtype UNDEF(getbkgd)(const WINDOW *win) { return getbkgd(win); } #undef getbkgd #define getbkgd UNDEF(getbkgd) #endif #ifdef getch inline int UNDEF(getch)() { return getch(); } #undef getch #define getch UNDEF(getch) #endif #ifdef getmaxyx inline void UNDEF(getmaxyx)(WINDOW* win, int& y, int& x) { getmaxyx(win, y, x); } #undef getmaxyx #define getmaxyx UNDEF(getmaxyx) #endif #ifdef getnstr inline int UNDEF(getnstr)(char *_str, int n) { return getnstr(_str, n); } #undef getnstr #define getnstr UNDEF(getnstr) #endif #ifdef getparyx inline void UNDEF(getparyx)(WINDOW* win, int& y, int& x) { getparyx(win, y, x); } #undef getparyx #define getparyx UNDEF(getparyx) #endif #ifdef getstr inline int UNDEF(getstr)(char *_str) { return getstr(_str); } #undef getstr #define getstr UNDEF(getstr) #endif #ifdef getyx inline void UNDEF(getyx)(const WINDOW* win, int& y, int& x) { getyx(win, y, x); } #undef getyx #define getyx UNDEF(getyx) #endif #ifdef hline inline int UNDEF(hline)(chtype ch, int n) { return hline(ch, n); } #undef hline #define hline UNDEF(hline) #endif #ifdef inch inline chtype UNDEF(inch)() { return inch(); } #undef inch #define inch UNDEF(inch) #endif #ifdef inchstr inline int UNDEF(inchstr)(chtype *str) { return inchstr(str); } #undef inchstr #define inchstr UNDEF(inchstr) #endif #ifdef innstr inline int UNDEF(innstr)(char *_str, int n) { return innstr(_str, n); } #undef innstr #define innstr UNDEF(innstr) #endif #ifdef insch inline int UNDEF(insch)(chtype c) { return insch(c); } #undef insch #define insch UNDEF(insch) #endif #ifdef insdelln inline int UNDEF(insdelln)(int n) { return insdelln(n); } #undef insdelln #define insdelln UNDEF(insdelln) #endif #ifdef insertln inline int UNDEF(insertln)() { return insertln(); } #undef insertln #define insertln UNDEF(insertln) #endif #ifdef insnstr inline int UNDEF(insnstr)(const char *_str, int n) { return insnstr(_str, n); } #undef insnstr #define insnstr UNDEF(insnstr) #endif #ifdef insstr inline int UNDEF(insstr)(const char *_str) { return insstr(_str); } #undef insstr #define insstr UNDEF(insstr) #endif #ifdef instr inline int UNDEF(instr)(char *_str) { return instr(_str); } #undef instr #define instr UNDEF(instr) #endif #ifdef intrflush inline void UNDEF(intrflush)(WINDOW *win, bool bf) { intrflush(); } #undef intrflush #define intrflush UNDEF(intrflush) #endif #ifdef leaveok inline int UNDEF(leaveok)(WINDOW* win, bool bf) { return leaveok(win, bf); } #undef leaveok #define leaveok UNDEF(leaveok) #else extern "C" NCURSES_IMPEXP int NCURSES_API leaveok(WINDOW* win, bool bf); #endif #ifdef move inline int UNDEF(move)(int x, int y) { return move(x, y); } #undef move #define move UNDEF(move) #endif #ifdef mvaddch inline int UNDEF(mvaddch)(int y, int x, chtype ch) { return mvaddch(y, x, ch); } #undef mvaddch #define mvaddch UNDEF(mvaddch) #endif #ifdef mvaddnstr inline int UNDEF(mvaddnstr)(int y, int x, const char *str, int n) { return mvaddnstr(y, x, str, n); } #undef mvaddnstr #define mvaddnstr UNDEF(mvaddnstr) #endif #ifdef mvaddstr inline int UNDEF(mvaddstr)(int y, int x, const char * str) { return mvaddstr(y, x, str); } #undef mvaddstr #define mvaddstr UNDEF(mvaddstr) #endif #ifdef mvchgat inline int UNDEF(mvchgat)(int y, int x, int n, attr_t attr, NCURSES_PAIRS_T color, const void *opts) { return mvchgat(y, x, n, attr, color, opts); } #undef mvchgat #define mvchgat UNDEF(mvchgat) #endif #ifdef mvdelch inline int UNDEF(mvdelch)(int y, int x) { return mvdelch(y, x);} #undef mvdelch #define mvdelch UNDEF(mvdelch) #endif #ifdef mvgetch inline int UNDEF(mvgetch)(int y, int x) { return mvgetch(y, x);} #undef mvgetch #define mvgetch UNDEF(mvgetch) #endif #ifdef mvgetnstr inline int UNDEF(mvgetnstr)(int y, int x, char *str, int n) { return mvgetnstr(y, x, str, n);} #undef mvgetnstr #define mvgetnstr UNDEF(mvgetnstr) #endif #ifdef mvgetstr inline int UNDEF(mvgetstr)(int y, int x, char *str) {return mvgetstr(y, x, str);} #undef mvgetstr #define mvgetstr UNDEF(mvgetstr) #endif #ifdef mvinch inline chtype UNDEF(mvinch)(int y, int x) { return mvinch(y, x);} #undef mvinch #define mvinch UNDEF(mvinch) #endif #ifdef mvinnstr inline int UNDEF(mvinnstr)(int y, int x, char *_str, int n) { return mvinnstr(y, x, _str, n); } #undef mvinnstr #define mvinnstr UNDEF(mvinnstr) #endif #ifdef mvinsch inline int UNDEF(mvinsch)(int y, int x, chtype c) { return mvinsch(y, x, c); } #undef mvinsch #define mvinsch UNDEF(mvinsch) #endif #ifdef mvinsnstr inline int UNDEF(mvinsnstr)(int y, int x, const char *_str, int n) { return mvinsnstr(y, x, _str, n); } #undef mvinsnstr #define mvinsnstr UNDEF(mvinsnstr) #endif #ifdef mvinsstr inline int UNDEF(mvinsstr)(int y, int x, const char *_str) { return mvinsstr(y, x, _str); } #undef mvinsstr #define mvinsstr UNDEF(mvinsstr) #endif #ifdef mvwaddch inline int UNDEF(mvwaddch)(WINDOW *win, int y, int x, const chtype ch) { return mvwaddch(win, y, x, ch); } #undef mvwaddch #define mvwaddch UNDEF(mvwaddch) #endif #ifdef mvwaddchnstr inline int UNDEF(mvwaddchnstr)(WINDOW *win, int y, int x, const chtype *str, int n) { return mvwaddchnstr(win, y, x, str, n); } #undef mvwaddchnstr #define mvwaddchnstr UNDEF(mvwaddchnstr) #endif #ifdef mvwaddchstr inline int UNDEF(mvwaddchstr)(WINDOW *win, int y, int x, const chtype *str) { return mvwaddchstr(win, y, x, str); } #undef mvwaddchstr #define mvwaddchstr UNDEF(mvwaddchstr) #endif #ifdef mvwaddnstr inline int UNDEF(mvwaddnstr)(WINDOW *win, int y, int x, const char *str, int n) { return mvwaddnstr(win, y, x, str, n); } #undef mvwaddnstr #define mvwaddnstr UNDEF(mvwaddnstr) #endif #ifdef mvwaddstr inline int UNDEF(mvwaddstr)(WINDOW *win, int y, int x, const char * str) { return mvwaddstr(win, y, x, str); } #undef mvwaddstr #define mvwaddstr UNDEF(mvwaddstr) #endif #ifdef mvwchgat inline int UNDEF(mvwchgat)(WINDOW *win, int y, int x, int n, attr_t attr, NCURSES_PAIRS_T color, const void *opts) { return mvwchgat(win, y, x, n, attr, color, opts); } #undef mvwchgat #define mvwchgat UNDEF(mvwchgat) #endif #ifdef mvwdelch inline int UNDEF(mvwdelch)(WINDOW *win, int y, int x) { return mvwdelch(win, y, x); } #undef mvwdelch #define mvwdelch UNDEF(mvwdelch) #endif #ifdef mvwgetch inline int UNDEF(mvwgetch)(WINDOW *win, int y, int x) { return mvwgetch(win, y, x);} #undef mvwgetch #define mvwgetch UNDEF(mvwgetch) #endif #ifdef mvwgetnstr inline int UNDEF(mvwgetnstr)(WINDOW *win, int y, int x, char *str, int n) {return mvwgetnstr(win, y, x, str, n);} #undef mvwgetnstr #define mvwgetnstr UNDEF(mvwgetnstr) #endif #ifdef mvwgetstr inline int UNDEF(mvwgetstr)(WINDOW *win, int y, int x, char *str) {return mvwgetstr(win, y, x, str);} #undef mvwgetstr #define mvwgetstr UNDEF(mvwgetstr) #endif #ifdef mvwhline inline int UNDEF(mvwhline)(WINDOW *win, int y, int x, chtype c, int n) { return mvwhline(win, y, x, c, n); } #undef mvwhline #define mvwhline UNDEF(mvwhline) #endif #ifdef mvwinch inline chtype UNDEF(mvwinch)(WINDOW *win, int y, int x) { return mvwinch(win, y, x);} #undef mvwinch #define mvwinch UNDEF(mvwinch) #endif #ifdef mvwinchnstr inline int UNDEF(mvwinchnstr)(WINDOW *win, int y, int x, chtype *str, int n) { return mvwinchnstr(win, y, x, str, n); } #undef mvwinchnstr #define mvwinchnstr UNDEF(mvwinchnstr) #endif #ifdef mvwinchstr inline int UNDEF(mvwinchstr)(WINDOW *win, int y, int x, chtype *str) { return mvwinchstr(win, y, x, str); } #undef mvwinchstr #define mvwinchstr UNDEF(mvwinchstr) #endif #ifdef mvwinnstr inline int UNDEF(mvwinnstr)(WINDOW *win, int y, int x, char *_str, int n) { return mvwinnstr(win, y, x, _str, n); } #undef mvwinnstr #define mvwinnstr UNDEF(mvwinnstr) #endif #ifdef mvwinsch inline int UNDEF(mvwinsch)(WINDOW *win, int y, int x, chtype c) { return mvwinsch(win, y, x, c); } #undef mvwinsch #define mvwinsch UNDEF(mvwinsch) #endif #ifdef mvwinsnstr inline int UNDEF(mvwinsnstr)(WINDOW *w, int y, int x, const char *_str, int n) { return mvwinsnstr(w, y, x, _str, n); } #undef mvwinsnstr #define mvwinsnstr UNDEF(mvwinsnstr) #endif #ifdef mvwinsstr inline int UNDEF(mvwinsstr)(WINDOW *w, int y, int x, const char *_str) { return mvwinsstr(w, y, x, _str); } #undef mvwinsstr #define mvwinsstr UNDEF(mvwinsstr) #endif #ifdef mvwvline inline int UNDEF(mvwvline)(WINDOW *win, int y, int x, chtype c, int n) { return mvwvline(win, y, x, c, n); } #undef mvwvline #define mvwvline UNDEF(mvwvline) #endif #ifdef napms inline void UNDEF(napms)(unsigned long x) { napms(x); } #undef napms #define napms UNDEF(napms) #endif #ifdef nocrmode inline int UNDEF(nocrmode)(void) { return nocrmode(); } #undef nocrmode #define nocrmode UNDEF(nocrmode) #endif #ifdef nodelay inline void UNDEF(nodelay)() { nodelay(); } #undef nodelay #define nodelay UNDEF(nodelay) #endif #ifdef redrawwin inline int UNDEF(redrawwin)(WINDOW *win) { return redrawwin(win); } #undef redrawwin #define redrawwin UNDEF(redrawwin) #endif #ifdef refresh inline int UNDEF(refresh)() { return refresh(); } #undef refresh #define refresh UNDEF(refresh) #endif #ifdef resetterm inline int UNDEF(resetterm)(void) { return resetterm(); } #undef resetterm #define resetterm UNDEF(resetterm) #endif #ifdef saveterm inline int UNDEF(saveterm)(void) { return saveterm(); } #undef saveterm #define saveterm UNDEF(saveterm) #endif #ifdef scrl inline int UNDEF(scrl)(int l) { return scrl(l); } #undef scrl #define scrl UNDEF(scrl) #endif #ifdef scroll inline int UNDEF(scroll)(WINDOW *win) { return scroll(win); } #undef scroll #define scroll UNDEF(scroll) #endif #ifdef scrollok inline int UNDEF(scrollok)(WINDOW* win, bool bf) { return scrollok(win, bf); } #undef scrollok #define scrollok UNDEF(scrollok) #else #if defined(__NCURSES_H) extern "C" NCURSES_IMPEXP int NCURSES_API scrollok(WINDOW*, bool); #else extern "C" NCURSES_IMPEXP int NCURSES_API scrollok(WINDOW*, char); #endif #endif #ifdef setscrreg inline int UNDEF(setscrreg)(int t, int b) { return setscrreg(t, b); } #undef setscrreg #define setscrreg UNDEF(setscrreg) #endif #ifdef standend inline int UNDEF(standend)() { return standend(); } #undef standend #define standend UNDEF(standend) #endif #ifdef standout inline int UNDEF(standout)() { return standout(); } #undef standout #define standout UNDEF(standout) #endif #ifdef subpad inline WINDOW *UNDEF(subpad)(WINDOW *p, int l, int c, int y, int x) { return derwin(p, l, c, y, x); } #undef subpad #define subpad UNDEF(subpad) #endif #ifdef timeout inline void UNDEF(timeout)(int delay) { timeout(delay); } #undef timeout #define timeout UNDEF(timeout) #endif #ifdef touchline inline int UNDEF(touchline)(WINDOW *win, int s, int c) { return touchline(win, s, c); } #undef touchline #define touchline UNDEF(touchline) #endif #ifdef touchwin inline int UNDEF(touchwin)(WINDOW *win) { return touchwin(win); } #undef touchwin #define touchwin UNDEF(touchwin) #endif #ifdef untouchwin inline int UNDEF(untouchwin)(WINDOW *win) { return untouchwin(win); } #undef untouchwin #define untouchwin UNDEF(untouchwin) #endif #ifdef vline inline int UNDEF(vline)(chtype ch, int n) { return vline(ch, n); } #undef vline #define vline UNDEF(vline) #endif #ifdef waddchstr inline int UNDEF(waddchstr)(WINDOW *win, chtype *at) { return waddchstr(win, at); } #undef waddchstr #define waddchstr UNDEF(waddchstr) #endif #ifdef waddstr inline int UNDEF(waddstr)(WINDOW *win, char *str) { return waddstr(win, str); } #undef waddstr #define waddstr UNDEF(waddstr) #endif #ifdef wattroff inline int UNDEF(wattroff)(WINDOW *win, int att) { return wattroff(win, att); } #undef wattroff #define wattroff UNDEF(wattroff) #endif #ifdef wattrset inline int UNDEF(wattrset)(WINDOW *win, int att) { return wattrset(win, att); } #undef wattrset #define wattrset UNDEF(wattrset) #endif #ifdef winch inline chtype UNDEF(winch)(const WINDOW* win) { return winch(win); } #undef winch #define winch UNDEF(winch) #endif #ifdef winchnstr inline int UNDEF(winchnstr)(WINDOW *win, chtype *str, int n) { return winchnstr(win, str, n); } #undef winchnstr #define winchnstr UNDEF(winchnstr) #endif #ifdef winchstr inline int UNDEF(winchstr)(WINDOW *win, chtype *str) { return winchstr(win, str); } #undef winchstr #define winchstr UNDEF(winchstr) #endif #ifdef winsstr inline int UNDEF(winsstr)(WINDOW *w, const char *_str) { return winsstr(w, _str); } #undef winsstr #define winsstr UNDEF(winsstr) #endif #ifdef wstandend inline int UNDEF(wstandend)(WINDOW *win) { return wstandend(win); } #undef wstandend #define wstandend UNDEF(wstandend) #endif #ifdef wstandout inline int UNDEF(wstandout)(WINDOW *win) { return wstandout(win); } #undef wstandout #define wstandout UNDEF(wstandout) #endif /* * * C++ class for windows. * */ extern "C" int _nc_ripoffline(int, int (*init)(WINDOW*, int)); extern "C" int _nc_xx_ripoff_init(WINDOW *, int); extern "C" int _nc_has_mouse(void); class NCURSES_IMPEXP NCursesWindow { friend class NCursesMenu; friend class NCursesForm; private: static bool b_initialized; static void initialize(); void constructing(); friend int _nc_xx_ripoff_init(WINDOW *, int); void set_keyboard(); NCURSES_COLOR_T getcolor(int getback) const; NCURSES_PAIRS_T getPair() const; static int setpalette(NCURSES_COLOR_T fore, NCURSES_COLOR_T back, NCURSES_PAIRS_T pair); static int colorInitialized; // This private constructor is only used during the initialization // of windows generated by ripoffline() calls. NCursesWindow(WINDOW* win, int ncols); protected: virtual void err_handler(const char *) const THROWS(NCursesException); // Signal an error with the given message text. static long count; // count of all active windows: // We rely on the c++ promise that // all otherwise uninitialized // static class vars are set to 0 WINDOW* w; // the curses WINDOW bool alloced; // TRUE if we own the WINDOW NCursesWindow* par; // parent, if subwindow NCursesWindow* subwins; // head of subwindows list NCursesWindow* sib; // next subwindow of parent void kill_subwindows(); // disable all subwindows // Destroy all subwindows. /* Only for use by derived classes. They are then in charge to fill the member variables correctly. */ NCursesWindow(); public: NCursesWindow(WINDOW* window); // useful only for stdscr NCursesWindow(int nlines, // number of lines int ncols, // number of columns int begin_y, // line origin int begin_x); // col origin NCursesWindow(NCursesWindow& par,// parent window int nlines, // number of lines int ncols, // number of columns int begin_y, // absolute or relative int begin_x, // origins: char absrel = 'a');// if `a', begin_y & begin_x are // absolute screen pos, else if `r', they are relative to par origin NCursesWindow(NCursesWindow& par,// parent window bool do_box = TRUE); // this is the very common case that we want to create the subwindow that // is two lines and two columns smaller and begins at (1,1). // We may automatically request the box around it. NCursesWindow& operator=(const NCursesWindow& rhs) { if (this != &rhs) *this = rhs; return *this; } NCursesWindow(const NCursesWindow& rhs) : w(rhs.w), alloced(rhs.alloced), par(rhs.par), subwins(rhs.subwins), sib(rhs.sib) { } virtual ~NCursesWindow(); NCursesWindow Clone(); // Make an exact copy of the window. // Initialization. static void useColors(void); // Call this routine very early if you want to have colors. static int ripoffline(int ripoff_lines, int (*init)(NCursesWindow& win)); // This function is used to generate a window of ripped-of lines. // If the argument is positive, lines are removed from the top, if it // is negative lines are removed from the bottom. This enhances the // lowlevel ripoffline() function because it uses the internal // implementation that allows to remove more than just a single line. // This function must be called before any other ncurses function. The // creation of the window is deferred until ncurses gets initialized. // The initialization function is then called. // ------------------------------------------------------------------------- // terminal status // ------------------------------------------------------------------------- int lines() const { initialize(); return LINES; } // Number of lines on terminal, *not* window int cols() const { initialize(); return COLS; } // Number of cols on terminal, *not* window int tabsize() const { initialize(); return TABSIZE; } // Size of a tab on terminal, *not* window static int NumberOfColors(); // Number of available colors int colors() const { return NumberOfColors(); } // Number of available colors // ------------------------------------------------------------------------- // window status // ------------------------------------------------------------------------- int height() const { return maxy() + 1; } // Number of lines in this window int width() const { return maxx() + 1; } // Number of columns in this window int begx() const { return getbegx(w); } // Column of top left corner relative to stdscr int begy() const { return getbegy(w); } // Line of top left corner relative to stdscr int curx() const { return getcurx(w); } // Column of top left corner relative to stdscr int cury() const { return getcury(w); } // Line of top left corner relative to stdscr int maxx() const { return getmaxx(w) == ERR ? ERR : getmaxx(w)-1; } // Largest x coord in window int maxy() const { return getmaxy(w) == ERR ? ERR : getmaxy(w)-1; } // Largest y coord in window NCURSES_PAIRS_T getcolor() const; // Actual color pair NCURSES_COLOR_T foreground() const { return getcolor(0); } // Actual foreground color NCURSES_COLOR_T background() const { return getcolor(1); } // Actual background color int setpalette(NCURSES_COLOR_T fore, NCURSES_COLOR_T back); // Set color palette entry int setcolor(NCURSES_PAIRS_T pair); // Set actually used palette entry // ------------------------------------------------------------------------- // window positioning // ------------------------------------------------------------------------- virtual int mvwin(int begin_y, int begin_x) { return ::mvwin(w, begin_y, begin_x); } // Move window to new position with the new position as top left corner. // This is virtual because it is redefined in NCursesPanel. // ------------------------------------------------------------------------- // coordinate positioning // ------------------------------------------------------------------------- int move(int y, int x) { return ::wmove(w, y, x); } // Move cursor the this position void getyx(int& y, int& x) const { ::getyx(w, y, x); } // Get current position of the cursor void getbegyx(int& y, int& x) const { ::getbegyx(w, y, x); } // Get beginning of the window void getmaxyx(int& y, int& x) const { ::getmaxyx(w, y, x); } // Get size of the window void getparyx(int& y, int& x) const { ::getparyx(w, y, x); } // Get parent's beginning of the window int mvcur(int oldrow, int oldcol, int newrow, int newcol) const { return ::mvcur(oldrow, oldcol, newrow, newcol); } // Perform lowlevel cursor motion that takes effect immediately. // ------------------------------------------------------------------------- // input // ------------------------------------------------------------------------- int getch() { return ::wgetch(w); } // Get a keystroke from the window. int getch(int y, int x) { return ::mvwgetch(w, y, x); } // Move cursor to position and get a keystroke from the window int getstr(char* str, int n=-1) { return ::wgetnstr(w, str, n); } // Read a series of characters into str until a newline or carriage return // is received. Read at most n characters. If n is negative, the limit is // ignored. int getstr(int y, int x, char* str, int n=-1) { return ::mvwgetnstr(w, y, x, str, n); } // Move the cursor to the requested position and then perform the getstr() // as described above. int instr(char *s, int n=-1) { return ::winnstr(w, s, n); } // Get a string of characters from the window into the buffer s. Retrieve // at most n characters, if n is negative retrieve all characters up to the // end of the current line. Attributes are stripped from the characters. int instr(int y, int x, char *s, int n=-1) { return ::mvwinnstr(w, y, x, s, n); } // Move the cursor to the requested position and then perform the instr() // as described above. int scanw(const char* fmt, ...) // Perform a scanw function from the window. #if __GNUG__ >= 2 __attribute__ ((format (scanf, 2, 3))); #else ; #endif int scanw(const char*, va_list); // Perform a scanw function from the window. int scanw(int y, int x, const char* fmt, ...) // Move the cursor to the requested position and then perform a scanw // from the window. #if __GNUG__ >= 2 __attribute__ ((format (scanf, 4, 5))); #else ; #endif int scanw(int y, int x, const char* fmt, va_list); // Move the cursor to the requested position and then perform a scanw // from the window. // ------------------------------------------------------------------------- // output // ------------------------------------------------------------------------- int addch(const chtype ch) { return ::waddch(w, ch); } // Put attributed character to the window. int addch(int y, int x, const chtype ch) { return ::mvwaddch(w, y, x, ch); } // Move cursor to the requested position and then put attributed character // to the window. int echochar(const chtype ch) { return ::wechochar(w, ch); } // Put attributed character to the window and refresh it immediately. int addstr(const char* str, int n=-1) { return ::waddnstr(w, str, n); } // Write the string str to the window, stop writing if the terminating // NUL or the limit n is reached. If n is negative, it is ignored. int addstr(int y, int x, const char * str, int n=-1) { return ::mvwaddnstr(w, y, x, str, n); } // Move the cursor to the requested position and then perform the addchstr // as described above. int addchstr(const chtype* str, int n=-1) { return ::waddchnstr(w, str, n); } // Write the string str to the window, stop writing if the terminating // NUL or the limit n is reached. If n is negative, it is ignored. int addchstr(int y, int x, const chtype * str, int n=-1) { return ::mvwaddchnstr(w, y, x, str, n); } // Move the cursor to the requested position and then perform the addchstr // as described above. int printw(const char* fmt, ...) // Do a formatted print to the window. #if (__GNUG__ >= 2) && !defined(printf) __attribute__ ((format (printf, 2, 3))); #else ; #endif int printw(int y, int x, const char * fmt, ...) // Move the cursor and then do a formatted print to the window. #if (__GNUG__ >= 2) && !defined(printf) __attribute__ ((format (printf, 4, 5))); #else ; #endif int printw(const char* fmt, va_list args); // Do a formatted print to the window. int printw(int y, int x, const char * fmt, va_list args); // Move the cursor and then do a formatted print to the window. chtype inch() const { return ::winch(w); } // Retrieve attributed character under the current cursor position. chtype inch(int y, int x) { return ::mvwinch(w, y, x); } // Move cursor to requested position and then retrieve attributed character // at this position. int inchstr(chtype* str, int n=-1) { return ::winchnstr(w, str, n); } // Read the string str from the window, stop reading if the terminating // NUL or the limit n is reached. If n is negative, it is ignored. int inchstr(int y, int x, chtype * str, int n=-1) { return ::mvwinchnstr(w, y, x, str, n); } // Move the cursor to the requested position and then perform the inchstr // as described above. int insch(chtype ch) { return ::winsch(w, ch); } // Insert attributed character into the window before current cursor // position. int insch(int y, int x, chtype ch) { return ::mvwinsch(w, y, x, ch); } // Move cursor to requested position and then insert the attributed // character before that position. int insertln() { return ::winsdelln(w, 1); } // Insert an empty line above the current line. int insdelln(int n=1) { return ::winsdelln(w, n); } // If n>0 insert that many lines above the current line. If n<0 delete // that many lines beginning with the current line. int insstr(const char *s, int n=-1) { return ::winsnstr(w, s, n); } // Insert the string into the window before the current cursor position. // Insert stops at end of string or when the limit n is reached. If n is // negative, it is ignored. int insstr(int y, int x, const char *s, int n=-1) { return ::mvwinsnstr(w, y, x, s, n); } // Move the cursor to the requested position and then perform the insstr() // as described above. int attron (chtype at) { return ::wattron (w, at); } // Switch on the window attributes; int attroff(chtype at) { return ::wattroff(w, static_cast(at)); } // Switch off the window attributes; int attrset(chtype at) { return ::wattrset(w, static_cast(at)); } // Set the window attributes; chtype attrget() { return ::getattrs(w); } // Get the window attributes; int color_set(NCURSES_PAIRS_T color_pair_number, void* opts=NULL) { return ::wcolor_set(w, color_pair_number, opts); } // Set the window color attribute; int chgat(int n, attr_t attr, NCURSES_PAIRS_T color, const void *opts=NULL) { return ::wchgat(w, n, attr, color, opts); } // Change the attributes of the next n characters in the current line. If // n is negative or greater than the number of remaining characters in the // line, the attributes will be changed up to the end of the line. int chgat(int y, int x, int n, attr_t attr, NCURSES_PAIRS_T color, const void *opts=NULL) { return ::mvwchgat(w, y, x, n, attr, color, opts); } // Move the cursor to the requested position and then perform chgat() as // described above. // ------------------------------------------------------------------------- // background // ------------------------------------------------------------------------- chtype getbkgd() const { return ::getbkgd(w); } // Get current background setting. int bkgd(const chtype ch) { return ::wbkgd(w, ch); } // Set the background property and apply it to the window. void bkgdset(chtype ch) { ::wbkgdset(w, ch); } // Set the background property. // ------------------------------------------------------------------------- // borders // ------------------------------------------------------------------------- int box(chtype vert=0, chtype hor=0) { return ::wborder(w, vert, vert, hor, hor, 0, 0, 0, 0); } // Draw a box around the window with the given vertical and horizontal // drawing characters. If you specify a zero as character, curses will try // to find a "nice" character. int border(chtype left=0, chtype right=0, chtype top =0, chtype bottom=0, chtype top_left =0, chtype top_right=0, chtype bottom_left =0, chtype bottom_right=0) { return ::wborder(w, left, right, top, bottom, top_left, top_right, bottom_left, bottom_right); } // Draw a border around the window with the given characters for the // various parts of the border. If you pass zero for a character, curses // will try to find "nice" characters. // ------------------------------------------------------------------------- // lines and boxes // ------------------------------------------------------------------------- int hline(int len, chtype ch=0) { return ::whline(w, ch, len); } // Draw a horizontal line of len characters with the given character. If // you pass zero for the character, curses will try to find a "nice" one. int hline(int y, int x, int len, chtype ch=0) { return ::mvwhline(w, y, x, ch, len); } // Move the cursor to the requested position and then draw a horizontal line. int vline(int len, chtype ch=0) { return ::wvline(w, ch, len); } // Draw a vertical line of len characters with the given character. If // you pass zero for the character, curses will try to find a "nice" one. int vline(int y, int x, int len, chtype ch=0) { return ::mvwvline(w, y, x, ch, len); } // Move the cursor to the requested position and then draw a vertical line. // ------------------------------------------------------------------------- // erasure // ------------------------------------------------------------------------- int erase() { return ::werase(w); } // Erase the window. int clear() { return ::wclear(w); } // Clear the window. int clearok(bool bf) { return ::clearok(w, bf); } // Set/Reset the clear flag. If set, the next refresh() will clear the // screen. int clrtobot() { return ::wclrtobot(w); } // Clear to the end of the window. int clrtoeol() { return ::wclrtoeol(w); } // Clear to the end of the line. int delch() { return ::wdelch(w); } // Delete character under the cursor. int delch(int y, int x) { return ::mvwdelch(w, y, x); } // Move cursor to requested position and delete the character under the // cursor. int deleteln() { return ::winsdelln(w, -1); } // Delete the current line. // ------------------------------------------------------------------------- // screen control // ------------------------------------------------------------------------- int scroll(int amount=1) { return ::wscrl(w, amount); } // Scroll amount lines. If amount is positive, scroll up, otherwise // scroll down. int scrollok(bool bf) { return ::scrollok(w, bf); } // If bf is TRUE, window scrolls if cursor is moved off the bottom // edge of the window or a scrolling region, otherwise the cursor is left // at the bottom line. int setscrreg(int from, int to) { return ::wsetscrreg(w, from, to); } // Define a soft scrolling region. int idlok(bool bf) { return ::idlok(w, bf); } // If bf is TRUE, use insert/delete line hardware support if possible. // Otherwise do it in software. void idcok(bool bf) { ::idcok(w, bf); } // If bf is TRUE, use insert/delete character hardware support if possible. // Otherwise do it in software. int touchline(int s, int c) { return ::touchline(w, s, c); } // Mark the given lines as modified. int touchwin() { return ::wtouchln(w, 0, height(), 1); } // Mark the whole window as modified. int untouchwin() { return ::wtouchln(w, 0, height(), 0); } // Mark the whole window as unmodified. int touchln(int s, int cnt, bool changed=TRUE) { return ::wtouchln(w, s, cnt, static_cast(changed ? 1 : 0)); } // Mark cnt lines beginning from line s as changed or unchanged, depending // on the value of the changed flag. bool is_linetouched(int line) const { return (::is_linetouched(w, line) ? TRUE:FALSE); } // Return TRUE if line is marked as changed, FALSE otherwise bool is_wintouched() const { return (::is_wintouched(w) ? TRUE:FALSE); } // Return TRUE if window is marked as changed, FALSE otherwise int leaveok(bool bf) { return ::leaveok(w, bf); } // If bf is TRUE, curses will leave the cursor after an update whereever // it is after the update. int redrawln(int from, int n) { return ::wredrawln(w, from, n); } // Redraw n lines starting from the requested line int redrawwin() { return ::wredrawln(w, 0, height()); } // Redraw the whole window int doupdate() { return ::doupdate(); } // Do all outputs to make the physical screen looking like the virtual one void syncdown() { ::wsyncdown(w); } // Propagate the changes down to all descendant windows void syncup() { ::wsyncup(w); } // Propagate the changes up in the hierarchy void cursyncup() { ::wcursyncup(w); } // Position the cursor in all ancestor windows corresponding to our setting int syncok(bool bf) { return ::syncok(w, bf); } // If called with bf=TRUE, syncup() is called whenever the window is changed #ifndef _no_flushok int flushok(bool bf) { return ::flushok(w, bf); } #endif void immedok(bool bf) { ::immedok(w, bf); } // If called with bf=TRUE, any change in the window will cause an // automatic immediate refresh() int intrflush(bool bf) { return ::intrflush(w, bf); } int keypad(bool bf) { return ::keypad(w, bf); } // If called with bf=TRUE, the application will interpret function keys. int nodelay(bool bf) { return ::nodelay(w, bf); } int meta(bool bf) { return ::meta(w, bf); } // If called with bf=TRUE, keys may generate 8-Bit characters. Otherwise // 7-Bit characters are generated. int standout() { return ::wstandout(w); } // Enable "standout" attributes int standend() { return ::wstandend(w); } // Disable "standout" attributes // ------------------------------------------------------------------------- // The next two are virtual, because we redefine them in the // NCursesPanel class. // ------------------------------------------------------------------------- virtual int refresh() { return ::wrefresh(w); } // Propagate the changes in this window to the virtual screen and call // doupdate(). This is redefined in NCursesPanel. virtual int noutrefresh() { return ::wnoutrefresh(w); } // Propagate the changes in this window to the virtual screen. This is // redefined in NCursesPanel. // ------------------------------------------------------------------------- // multiple window control // ------------------------------------------------------------------------- int overlay(NCursesWindow& win) { return ::overlay(w, win.w); } // Overlay this window over win. int overwrite(NCursesWindow& win) { return ::overwrite(w, win.w); } // Overwrite win with this window. int copywin(NCursesWindow& win, int sminrow, int smincol, int dminrow, int dmincol, int dmaxrow, int dmaxcol, bool overlaywin=TRUE) { return ::copywin(w, win.w, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol, static_cast(overlaywin ? 1 : 0)); } // Overlay or overwrite the rectangle in win given by dminrow,dmincol, // dmaxrow,dmaxcol with the rectangle in this window beginning at // sminrow,smincol. // ------------------------------------------------------------------------- // Extended functions // ------------------------------------------------------------------------- #if defined(NCURSES_EXT_FUNCS) && (NCURSES_EXT_FUNCS != 0) int wresize(int newLines, int newColumns) { return ::wresize(w, newLines, newColumns); } #endif // ------------------------------------------------------------------------- // Mouse related // ------------------------------------------------------------------------- bool has_mouse() const; // Return TRUE if terminal supports a mouse, FALSE otherwise // ------------------------------------------------------------------------- // traversal support // ------------------------------------------------------------------------- NCursesWindow* child() { return subwins; } // Get the first child window. NCursesWindow* sibling() { return sib; } // Get the next child of my parent. NCursesWindow* parent() { return par; } // Get my parent. bool isDescendant(NCursesWindow& win); // Return TRUE if win is a descendant of this. }; // ------------------------------------------------------------------------- // We leave this here for compatibility reasons. // ------------------------------------------------------------------------- class NCURSES_IMPEXP NCursesColorWindow : public NCursesWindow { public: NCursesColorWindow(WINDOW* &window) // useful only for stdscr : NCursesWindow(window) { useColors(); } NCursesColorWindow(int nlines, // number of lines int ncols, // number of columns int begin_y, // line origin int begin_x) // col origin : NCursesWindow(nlines, ncols, begin_y, begin_x) { useColors(); } NCursesColorWindow(NCursesWindow& parentWin,// parent window int nlines, // number of lines int ncols, // number of columns int begin_y, // absolute or relative int begin_x, // origins: char absrel = 'a') // if `a', by & bx are : NCursesWindow(parentWin, nlines, ncols, // absolute screen pos, begin_y, begin_x, // else if `r', they are absrel ) { // relative to par origin useColors(); } }; // These enum definitions really belong inside the NCursesPad class, but only // recent compilers support that feature. typedef enum { REQ_PAD_REFRESH = KEY_MAX + 1, REQ_PAD_UP, REQ_PAD_DOWN, REQ_PAD_LEFT, REQ_PAD_RIGHT, REQ_PAD_EXIT } Pad_Request; const Pad_Request PAD_LOW = REQ_PAD_REFRESH; // lowest op-code const Pad_Request PAD_HIGH = REQ_PAD_EXIT; // highest op-code // ------------------------------------------------------------------------- // Pad Support. We allow an association of a pad with a "real" window // through which the pad may be viewed. // ------------------------------------------------------------------------- class NCURSES_IMPEXP NCursesPad : public NCursesWindow { private: NCursesWindow* viewWin; // the "viewport" window NCursesWindow* viewSub; // the "viewport" subwindow int h_gridsize, v_gridsize; protected: int min_row, min_col; // top left row/col of the pads display area NCursesWindow* Win(void) const { // Get the window into which the pad should be copied (if any) return (viewSub?viewSub:(viewWin?viewWin:0)); } NCursesWindow* getWindow(void) const { return viewWin; } NCursesWindow* getSubWindow(void) const { return viewSub; } virtual int driver (int key); // Virtualize keystroke key // The driver translates the keystroke c into an Pad_Request virtual void OnUnknownOperation(int pad_req) { (void) pad_req; ::beep(); } // This is called if the driver returns an unknown op-code virtual void OnNavigationError(int pad_req) { (void) pad_req; ::beep(); } // This is called if a navigation request couldn't be satisfied virtual void OnOperation(int pad_req) { (void) pad_req; }; // OnOperation is called if a Pad_Operation was executed and just before // the refresh() operation is done. public: NCursesPad(int nlines, int ncols); // create a pad with the given size NCursesPad& operator=(const NCursesPad& rhs) { if (this != &rhs) { *this = rhs; NCursesWindow::operator=(rhs); } return *this; } NCursesPad(const NCursesPad& rhs) : NCursesWindow(rhs), viewWin(rhs.viewWin), viewSub(rhs.viewSub), h_gridsize(rhs.h_gridsize), v_gridsize(rhs.v_gridsize), min_row(rhs.min_row), min_col(rhs.min_col) { } virtual ~NCursesPad() {} int echochar(const chtype ch) { return ::pechochar(w, ch); } // Put the attributed character onto the pad and immediately do a // prefresh(). int refresh(); // If a viewport is defined the pad is displayed in this window, otherwise // this is a noop. int refresh(int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { return ::prefresh(w, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol); } // The coordinates sminrow,smincol,smaxrow,smaxcol describe a rectangle // on the screen. refresh copies a rectangle of this size beginning // with top left corner pminrow,pmincol onto the screen and calls doupdate(). int noutrefresh(); // If a viewport is defined the pad is displayed in this window, otherwise // this is a noop. int noutrefresh(int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { return ::pnoutrefresh(w, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol); } // Does the same as refresh() but without calling doupdate(). virtual void setWindow(NCursesWindow& view, int v_grid = 1, int h_grid = 1); // Add the window "view" as viewing window to the pad. virtual void setSubWindow(NCursesWindow& sub); // Use the subwindow "sub" of the viewport window for the actual viewing. // The full viewport window is usually used to provide some decorations // like frames, titles etc. virtual void operator() (void); // Perform Pad's operation }; // A FramedPad is constructed always with a viewport window. This viewport // will be framed (by a box() command) and the interior of the box is the // viewport subwindow. On the frame we display scrollbar sliders. class NCURSES_IMPEXP NCursesFramedPad : public NCursesPad { protected: virtual void OnOperation(int pad_req); public: NCursesFramedPad(NCursesWindow& win, int nlines, int ncols, int v_grid = 1, int h_grid = 1) : NCursesPad(nlines, ncols) { NCursesPad::setWindow(win, v_grid, h_grid); NCursesPad::setSubWindow(*(new NCursesWindow(win))); } // Construct the FramedPad with the given Window win as viewport. virtual ~NCursesFramedPad() { delete getSubWindow(); } void setWindow(NCursesWindow& view, int v_grid = 1, int h_grid = 1) { (void) view; (void) v_grid; (void) h_grid; err_handler("Operation not allowed"); } // Disable this call; the viewport is already defined void setSubWindow(NCursesWindow& sub) { (void) sub; err_handler("Operation not allowed"); } // Disable this call; the viewport subwindow is already defined }; #endif /* NCURSES_CURSESW_H_incl */ ncurses-6.0-20160213/c++/cursesp.h0000644000175100001440000002063112371515542014670 0ustar tomusers// * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ #ifndef NCURSES_CURSESP_H_incl #define NCURSES_CURSESP_H_incl 1 // $Id: cursesp.h,v 1.31 2014/08/09 22:06:26 Adam.Jiang Exp $ #include extern "C" { # include } class NCURSES_IMPEXP NCursesPanel : public NCursesWindow { protected: PANEL *p; static NCursesPanel *dummy; private: // This structure is used for the panel's user data field to link the // PANEL* to the C++ object and to provide extra space for a user pointer. typedef struct { void* m_user; // the pointer for the user's data const NCursesPanel* m_back; // backward pointer to C++ object const PANEL* m_owner; // the panel itself } UserHook; inline UserHook *UserPointer() { UserHook* uptr = reinterpret_cast( const_cast(::panel_userptr (p))); return uptr; } void init(); // Initialize the panel object protected: void set_user(void *user) { UserHook* uptr = UserPointer(); if (uptr != 0 && uptr->m_back==this && uptr->m_owner==p) { uptr->m_user = user; } } // Set the user pointer of the panel. void *get_user() { UserHook* uptr = UserPointer(); void *result = 0; if (uptr != 0 && uptr->m_back==this && uptr->m_owner==p) result = uptr->m_user; return result; } void OnError (int err) const THROW2(NCursesException const, NCursesPanelException) { if (err==ERR) THROW(new NCursesPanelException (this, err)); } // If err is equal to the curses error indicator ERR, an error handler // is called. // Get a keystroke. Default implementation calls getch() virtual int getKey(void); public: NCursesPanel(int nlines, int ncols, int begin_y = 0, int begin_x = 0) : NCursesWindow(nlines,ncols,begin_y,begin_x), p(0) { init(); } // Create a panel with this size starting at the requested position. NCursesPanel() : NCursesWindow(::stdscr), p(0) { init(); } // This constructor creates the default Panel associated with the // ::stdscr window NCursesPanel& operator=(const NCursesPanel& rhs) { if (this != &rhs) { *this = rhs; NCursesWindow::operator=(rhs); } return *this; } NCursesPanel(const NCursesPanel& rhs) : NCursesWindow(rhs), p(rhs.p) { } virtual ~NCursesPanel(); // basic manipulation inline void hide() { OnError (::hide_panel(p)); } // Hide the panel. It stays in the stack but becomes invisible. inline void show() { OnError (::show_panel(p)); } // Show the panel, i.e. make it visible. inline void top() { OnError (::top_panel(p)); } // Make this panel the top panel in the stack. inline void bottom() { OnError (::bottom_panel(p)); } // Make this panel the bottom panel in the stack. // N.B.: The panel associated with ::stdscr is always on the bottom. So // actually bottom() makes the panel the first above ::stdscr. virtual int mvwin(int y, int x) { OnError(::move_panel(p, y, x)); return OK; } inline bool hidden() const { return (::panel_hidden (p) ? TRUE : FALSE); } // Return TRUE if the panel is hidden, FALSE otherwise. /* The functions panel_above() and panel_below() are not reflected in the NCursesPanel class. The reason for this is, that we cannot assume that a panel retrieved by those operations is one wrapped by a C++ class. Although this situation might be handled, we also need a reverse mapping from PANEL to NCursesPanel which needs some redesign of the low level stuff. At the moment, we define them in the interface but they will always produce an error. */ inline NCursesPanel& above() const { OnError(ERR); return *dummy; } inline NCursesPanel& below() const { OnError(ERR); return *dummy; } // Those two are rewrites of the corresponding virtual members of // NCursesWindow virtual int refresh(); // Propagate all panel changes to the virtual screen and update the // physical screen. virtual int noutrefresh(); // Propagate all panel changes to the virtual screen. static void redraw(); // Redraw all panels. // decorations virtual void frame(const char* title=NULL, const char* btitle=NULL); // Put a frame around the panel and put the title centered in the top line // and btitle in the bottom line. virtual void boldframe(const char* title=NULL, const char* btitle=NULL); // Same as frame(), but use highlighted attributes. virtual void label(const char* topLabel, const char* bottomLabel); // Put the title centered in the top line and btitle in the bottom line. virtual void centertext(int row,const char* label); // Put the label text centered in the specified row. }; /* We use templates to provide a typesafe mechanism to associate * user data with a panel. A NCursesUserPanel is a panel * associated with some user data of type T. */ template class NCursesUserPanel : public NCursesPanel { public: NCursesUserPanel (int nlines, int ncols, int begin_y = 0, int begin_x = 0, const T* p_UserData = STATIC_CAST(T*)(0)) : NCursesPanel (nlines, ncols, begin_y, begin_x) { if (p) set_user (const_cast(reinterpret_cast (p_UserData))); }; // This creates an user panel of the requested size with associated // user data pointed to by p_UserData. NCursesUserPanel(const T* p_UserData = STATIC_CAST(T*)(0)) : NCursesPanel() { if (p) set_user(const_cast(reinterpret_cast(p_UserData))); }; // This creates an user panel associated with the ::stdscr and user data // pointed to by p_UserData. virtual ~NCursesUserPanel() {}; T* UserData (void) { return reinterpret_cast(get_user ()); }; // Retrieve the user data associated with the panel. virtual void setUserData (const T* p_UserData) { if (p) set_user (const_cast(reinterpret_cast(p_UserData))); } // Associate the user panel with the user data pointed to by p_UserData. }; #endif /* NCURSES_CURSESP_H_incl */ ncurses-6.0-20160213/c++/cursesp.cc0000644000175100001440000001002510275232724015021 0ustar tomusers// * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2003,2005 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1993, 1997 * ****************************************************************************/ #include "internal.h" #include "cursesp.h" MODULE_ID("$Id: cursesp.cc,v 1.25 2005/08/06 22:12:36 tom Exp $") NCursesPanel* NCursesPanel::dummy = static_cast(0); void NCursesPanel::init() { p = ::new_panel(w); if (!p) OnError(ERR); UserHook* hook = new UserHook; hook->m_user = NULL; hook->m_back = this; hook->m_owner = p; ::set_panel_userptr(p, reinterpret_cast(hook)); } NCursesPanel::~NCursesPanel() { UserHook* hook = UserPointer(); assert(hook != 0 && hook->m_back==this && hook->m_owner==p); delete hook; ::del_panel(p); ::update_panels(); } void NCursesPanel::redraw() { PANEL *pan; pan = ::panel_above(NULL); while (pan) { ::touchwin(panel_window(pan)); pan = ::panel_above(pan); } ::update_panels(); ::doupdate(); } int NCursesPanel::refresh() { ::update_panels(); return ::doupdate(); } int NCursesPanel::noutrefresh() { ::update_panels(); return OK; } void NCursesPanel::boldframe(const char *title, const char* btitle) { standout(); frame(title, btitle); standend(); } void NCursesPanel::frame(const char *title,const char *btitle) { int err = OK; if (!title && !btitle) { err = box(); } else { err = box(); if (err==OK) label(title,btitle); } OnError(err); } void NCursesPanel::label(const char *tLabel, const char *bLabel) { if (tLabel) centertext(0,tLabel); if (bLabel) centertext(maxy(),bLabel); } void NCursesPanel::centertext(int row,const char *labelText) { if (labelText) { int x = (maxx() - ::strlen(labelText)) / 2; if (x<0) x=0; OnError(addstr(row, x, labelText, width())); } } int NCursesPanel::getKey(void) { return getch(); } ncurses-6.0-20160213/c++/NEWS0000644000175100001440000001031310422525771013526 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: NEWS,v 1.4 2006/04/22 22:19:37 tom Exp $ ------------------------------------------------------------------------------- This is a log of changes that the ncurses C++ binding has gone through starting with the integration of menu and forms integration into the binding. 990731 + Improve support for pads. A viewport window may now be added to a pad. It will then be possible to use a builtin panning mechanism to view the pad. 970908 + Improve NCursesWindow class: added additional methods to cover more ncurses functionality. Make refresh() and noutrefresh() virtual members to allow different implementation in the NCursesPanel class. + CAUTION: changed order of parameters in vline() and hline() of NCursesWindow class. + Make refresh() in NCursesPanel non-static, it is now a reimplementation of refresh() in the base class. Added noutrefresh() to NCursesPanel. + Added NCursesForm and related classes to support libform functionality. + Moved most of configuration related stuff from cursesw.h to etip.h + Added NCursesApplication class to support easy configuration of menu and forms related attributes as well as ripped of title lines and Soft-Label-Keys for an application. + Support of Auto-Cleanup for a menus fieldlist. + Change of return type for current_item() and operator[] for menus. + Enhanced demo. 970502 + Introduced the THROW and THROWS functions/macros to prepare a smoother transition to real exception handling. + Exception classes provided in etip.h + Added the NCursesMenu class to support libmenu functionality. + The inheritace relation between NCursesWindow and NCursesColorWindow was kind of brain damage. Monochrome is a special case of colored, so the relation should be just the opposite. This would allow all derived classes like NCursesPanel, NCursesMenu or NCursesForm to have colors. To resolve that design flaw I put the color functionality into the NCursesWindow class and it can be switched on by the static member useColors(). NCursesColorWindow is still there for compatibility reasons. ncurses-6.0-20160213/c++/README-first0000644000175100001440000001121710556714575015052 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README-first,v 1.9 2007/01/27 18:27:09 tom Exp $ ------------------------------------------------------------------------------- C++ interface to ncurses routines ----------------------------------------------------------------------- This directory contains the source code for several C++ classes which ease the use of writing ncurses-based programs. The code was originally derived from the libg++ CursesWindow class, but rewritten for ncurses. The classes simplify the use of window specific functions by encapsulating them in the window object. Function overloading is used in order to narrow the interface. For example, you do not have the distinction between `printw' and `mvprintw' anymore. A second benefit is the removal of all #defines which are included in the curses.h file. This is a steady cause of trouble because many common identifiers are used. Instead now all #defines are inline functions, which also allows strict type checking of arguments. The next enhancement is color support. It was originally provided by a derived class. This caused some trouble if you think about Panels or Menus and Forms with colors. We decided to put color support into the base class so that any derived class may use color support also. The implementation chosen here is directed to unrestricted use of mixes of color and monochrome windows. The original NCursesColorWindow class is maintained for compatibility reasons. The last point to mention is the support of other packages that are distributed with the ncurses package: the panels library, the menu library and the form library. This support is provided by the NCursesPanel class, which is also derived from the NCursesWindow class and the NCursesMenu and NCursesForm classes which are derived from NCursesPanel. This allows building interfaces with windows. Please see the example program for a quick introduction. Note that at this point, there is no documentation for these classes. Hopefully some will be written in the not too distant future. For now, to find out how to use the classes, read the code and the example program. Suggestions for enhancements and contributions of code (and docs) are welcome. Please let us know which functionality you miss. Original author: Eric Newton for FSF's libg++ Authors of first ncurses based release (NCursesWindow, NCursesPanel): Ulrich Drepper and Anatoly Ivasyuk Authors of this release: Juergen Pfeifer Thomas E. Dickey ncurses-6.0-20160213/c++/modules0000644000175100001440000000526012125637727014436 0ustar tomusers# Program modules # $Id: modules,v 1.11 2013/03/30 19:41:11 tom Exp $ ############################################################################## # Copyright (c) 1998-2006,2013 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1995-on # @ base cursesf c++ $(srcdir) $(internal_h) $(cursesf_h) $(cursesapp_h) cursesm c++ $(srcdir) $(internal_h) $(cursesm_h) $(cursesapp_h) cursesw c++ $(srcdir) $(internal_h) $(cursesw_h) cursespad c++ $(srcdir) $(internal_h) $(cursesw_h) cursesp c++ $(srcdir) $(internal_h) $(cursesp_h) cursslk c++ $(srcdir) $(internal_h) $(cursesapp_h) cursesapp c++ $(srcdir) $(internal_h) $(cursesapp_h) cursesmain c++ $(srcdir) $(internal_h) $(cursesapp_h) $(INCDIR)/nc_alloc.h # vile:makemode ncurses-6.0-20160213/c++/cursesapp.h0000644000175100001440000001516711635215472015222 0ustar tomusers// * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2005,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ // $Id: cursesapp.h,v 1.12 2011/09/17 22:12:10 tom Exp $ #ifndef NCURSES_CURSESAPP_H_incl #define NCURSES_CURSESAPP_H_incl #include class NCURSES_IMPEXP NCursesApplication { public: typedef struct _slk_link { // This structure is used to maintain struct _slk_link* prev; // a stack of SLKs Soft_Label_Key_Set* SLKs; } SLK_Link; private: static int rinit(NCursesWindow& w); // Internal Init function for title static NCursesApplication* theApp; // Global ref. to the application static SLK_Link* slk_stack; protected: static NCursesWindow* titleWindow; // The Title Window (if any) bool b_Colors; // Is this a color application? NCursesWindow* Root_Window; // This is the stdscr equiv. // Initialization of attributes; // Rewrite this in your derived class if you prefer other settings virtual void init(bool bColors); // The number of lines for the title window. Default is no title window // You may rewrite this in your derived class virtual int titlesize() const { return 0; } // This method is called to put something into the title window initially // You may rewrite this in your derived class virtual void title() { } // The layout used for the Soft Label Keys. Default is to have no SLKs. // You may rewrite this in your derived class virtual Soft_Label_Key_Set::Label_Layout useSLKs() const { return Soft_Label_Key_Set::None; } // This method is called to initialize the SLKs. Default is nothing. // You may rewrite this in your derived class virtual void init_labels(Soft_Label_Key_Set& S) const { (void) S; } // Your derived class must implement this method. The return value must // be the exit value of your application. virtual int run() = 0; // The constructor is protected, so you may use it in your derived // class constructor. The argument tells whether or not you want colors. NCursesApplication(bool wantColors = FALSE); NCursesApplication& operator=(const NCursesApplication& rhs) { if (this != &rhs) { *this = rhs; } return *this; } NCursesApplication(const NCursesApplication& rhs) : b_Colors(rhs.b_Colors), Root_Window(rhs.Root_Window) { } public: virtual ~NCursesApplication(); // Get a pointer to the current application object static NCursesApplication* getApplication() { return theApp; } // This method runs the application and returns its exit value int operator()(void); // Process the commandline arguments. The default implementation simply // ignores them. Your derived class may rewrite this. virtual void handleArgs(int argc, char* argv[]) { (void) argc; (void) argv; } // Does this application use colors? inline bool useColors() const { return b_Colors; } // Push the Key Set S onto the SLK Stack. S then becomes the current set // of Soft Labelled Keys. void push(Soft_Label_Key_Set& S); // Throw away the current set of SLKs and make the previous one the // new current set. bool pop(); // Retrieve the current set of Soft Labelled Keys. Soft_Label_Key_Set* top() const; // Attributes to use for menu and forms foregrounds virtual chtype foregrounds() const { return b_Colors ? static_cast(COLOR_PAIR(1)) : A_BOLD; } // Attributes to use for menu and forms backgrounds virtual chtype backgrounds() const { return b_Colors ? static_cast(COLOR_PAIR(2)) : A_NORMAL; } // Attributes to use for inactive (menu) elements virtual chtype inactives() const { return b_Colors ? static_cast(COLOR_PAIR(3)|A_DIM) : A_DIM; } // Attributes to use for (form) labels and SLKs virtual chtype labels() const { return b_Colors ? static_cast(COLOR_PAIR(4)) : A_NORMAL; } // Attributes to use for form backgrounds virtual chtype dialog_backgrounds() const { return b_Colors ? static_cast(COLOR_PAIR(4)) : A_NORMAL; } // Attributes to use as default for (form) window backgrounds virtual chtype window_backgrounds() const { return b_Colors ? static_cast(COLOR_PAIR(5)) : A_NORMAL; } // Attributes to use for the title window virtual chtype screen_titles() const { return b_Colors ? static_cast(COLOR_PAIR(6)) : A_BOLD; } }; #endif /* NCURSES_CURSESAPP_H_incl */ ncurses-6.0-20160213/c++/demo.cc0000644000175100001440000003437711721413764014303 0ustar tomusers// * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Silly demo program for the NCursesPanel class. * * written by Anatoly Ivasyuk (anatoly@nick.csh.rit.edu) * * Demo code for NCursesMenu and NCursesForm written by * Juergen Pfeifer * * $Id: demo.cc,v 1.41 2012/02/23 10:41:56 tom Exp $ */ #include "internal.h" #include "cursesapp.h" #include "cursesm.h" #include "cursesf.h" #ifdef __MINGW32__ #undef KEY_EVENT #endif #ifndef __MINGW32__ extern "C" unsigned int sleep(unsigned int); #endif #undef index // needed for NeXT // // ------------------------------------------------------------------------- // class SillyDemo { public: void run(int sleeptime) { NCursesPanel *mystd = new NCursesPanel(); // Make a few small demo panels NCursesPanel *u = new NCursesPanel(8, 20, 12, 4); NCursesPanel *v = new NCursesPanel(8, 20, 10, 6); NCursesPanel *w = new NCursesPanel(8, 20, 8, 8); NCursesPanel *x = new NCursesPanel(8, 20, 6, 10); NCursesPanel *y = new NCursesPanel(8, 20, 4, 12); NCursesPanel *z = new NCursesPanel(8, 30, 2, 14); // Draw something on the main screen, so we can see what happens // when panels get moved or deleted. mystd->box(); mystd->move(mystd->height()/2, 1); mystd->hline(mystd->width()-2); mystd->move(1, mystd->width()/2); mystd->vline(mystd->height()-2); mystd->addch(0, mystd->width()/2, ACS_TTEE); mystd->addch(mystd->height()-1, mystd->width()/2, ACS_BTEE); mystd->addch(mystd->height()/2, 0, ACS_LTEE); mystd->addch(mystd->height()/2, mystd->width()-1, ACS_RTEE); mystd->addch(mystd->height()/2, mystd->width()/2, ACS_PLUS); // Draw frames with titles around panels so that we can see where // the panels are located. u->boldframe("Win U"); v->frame("Win V"); w->boldframe("Win W"); x->frame("Win X"); y->boldframe("Win Y"); z->frame("Win Z"); if (NCursesApplication::getApplication()->useColors()) { u->bkgd(' '|COLOR_PAIR(1)); w->bkgd(' '|COLOR_PAIR(1)); y->bkgd(' '|COLOR_PAIR(1)); v->bkgd(' '|COLOR_PAIR(2)); x->bkgd(' '|COLOR_PAIR(2)); z->bkgd(' '|COLOR_PAIR(2)); } // A refresh to any valid panel updates all panels and refreshes // the screen. Using mystd is just convenient - We know it's always // valid until the end of the program. mystd->refresh(); sleep(sleeptime); // Show what happens when panels are deleted and moved. sleep(sleeptime); delete u; mystd->refresh(); sleep(sleeptime); delete z; mystd->refresh(); sleep(sleeptime); delete v; mystd->refresh(); // show how it looks when a panel moves sleep(sleeptime); y->mvwin(5, 30); mystd->refresh(); sleep(sleeptime); delete y; mystd->refresh(); // show how it looks when you raise a panel sleep(sleeptime); w->top(); mystd->refresh(); sleep(sleeptime); delete w; mystd->refresh(); sleep(sleeptime); delete x; mystd->clear(); mystd->refresh(); // Don't forget to clean up the main screen. Since this is the // last thing using NCursesWindow, this has the effect of // shutting down ncurses and restoring the terminal state. sleep(sleeptime); delete mystd; } }; class UserData { private: int u; public: UserData(int x) : u(x) {} int sleeptime() const { return u; } }; // // ------------------------------------------------------------------------- // template class MyAction : public NCursesUserItem { public: MyAction (const char* p_name, const T* p_UserData) : NCursesUserItem(p_name, static_cast(0), p_UserData) {} virtual ~MyAction() {} bool action() { SillyDemo a; a.run(NCursesUserItem::UserData()->sleeptime()); return FALSE; } }; template class MyAction; template class NCURSES_IMPEXP NCursesUserItem; class QuitItem : public NCursesMenuItem { public: QuitItem() : NCursesMenuItem("Quit") { } bool action() { return TRUE; } }; // // ------------------------------------------------------------------------- // class Label : public NCursesFormField { public: Label(const char* title, int row, int col) : NCursesFormField(1, static_cast(::strlen(title)), row, col) { set_value(title); options_off(O_EDIT|O_ACTIVE); } }; // // ------------------------------------------------------------------------- // class MyFieldType : public UserDefinedFieldType { private: int chk; protected: bool field_check(NCursesFormField& f) { (void) f; return TRUE; } bool char_check(int c) { return (c==chk?TRUE:FALSE); } public: MyFieldType(int x) : chk(x) { } }; // // ------------------------------------------------------------------------- // class TestForm : public NCursesForm { private: NCursesFormField** F; MyFieldType* mft; Integer_Field *ift; Enumeration_Field *eft; static const char *weekdays[]; public: TestForm() : NCursesForm(13, 51, (lines() - 15)/2, (cols() - 53)/2), F(0), mft(0), ift(0), eft(0) { F = new NCursesFormField*[10]; mft = new MyFieldType('X'); ift = new Integer_Field(0, 1, 10); eft = new Enumeration_Field(weekdays); F[0] = new Label("Demo Entry Form", 0, 16); F[1] = new Label("Weekday Enum", 2, 1); F[2] = new Label("Number(1-10)", 2, 21); F[3] = new Label("Only 'X'", 2, 35); F[4] = new Label("Multiline Field (Dynamic and Scrollable)", 5, 1); F[5] = new NCursesFormField(1, 18, 3, 1); F[6] = new NCursesFormField(1, 12, 3, 21); F[7] = new NCursesFormField(1, 12, 3, 35); F[8] = new NCursesFormField(4, 46, 6, 1, 2); F[9] = new NCursesFormField(); InitForm(F, TRUE, TRUE); boldframe(); F[5]->set_fieldtype(*eft); F[6]->set_fieldtype(*ift); F[7]->set_fieldtype(*mft); F[7]->set_maximum_growth(20); // max. 20 characters F[7]->options_off(O_STATIC); // make field dynamic F[8]->set_maximum_growth(10); // max. 10 lines F[8]->options_off(O_STATIC); // make field dynamic } TestForm& operator=(const TestForm& rhs) { if (this != &rhs) { *this = rhs; } return *this; } TestForm(const TestForm& rhs) : NCursesForm(rhs), F(0), mft(0), ift(0), eft(0) { } ~TestForm() { delete mft; delete ift; delete eft; } }; const char* TestForm::weekdays[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", NULL }; // // ------------------------------------------------------------------------- // class FormAction : public NCursesMenuItem { public: FormAction(const char *s) : NCursesMenuItem(s) { } bool action() { TestForm F; Soft_Label_Key_Set* S = new Soft_Label_Key_Set; for(int i=1; i <= S->labels(); i++) { char buf[8]; assert(i < 100); ::_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "Frm%02d", i); (*S)[i] = buf; // Text (*S)[i] = Soft_Label_Key_Set::Soft_Label_Key::Left; // Justification } NCursesApplication::getApplication()->push(*S); F(); NCursesApplication::getApplication()->pop(); delete S; return FALSE; } }; // // ------------------------------------------------------------------------- // class PadAction : public NCursesMenuItem { public: PadAction(const char* s) : NCursesMenuItem(s) { } bool action() { const int GRIDSIZE = 3; const int PADSIZE = 200; unsigned gridcount = 0; NCursesPanel mystd; NCursesPanel P(mystd.lines()-2, mystd.cols()-2, 1, 1); NCursesFramedPad FP(P, PADSIZE, PADSIZE); for (int i=0; i < PADSIZE; i++) { for (int j=0; j < PADSIZE; j++) { if (i % GRIDSIZE == 0 && j % GRIDSIZE == 0) { if (i==0 || j==0) FP.addch('+'); else FP.addch(static_cast('A' + (gridcount++ % 26))); } else if (i % GRIDSIZE == 0) FP.addch('-'); else if (j % GRIDSIZE == 0) FP.addch('|'); else FP.addch(' '); } } P.label("Pad Demo", NULL); FP(); P.clear(); return FALSE; } }; // // ------------------------------------------------------------------------- // class PassiveItem : public NCursesMenuItem { public: PassiveItem(const char* text) : NCursesMenuItem(text) { options_off(O_SELECTABLE); } }; // // ------------------------------------------------------------------------- // class ScanAction : public NCursesMenuItem { public: ScanAction(const char* s) : NCursesMenuItem(s) { } bool action() { NCursesPanel *mystd = new NCursesPanel(); NCursesPanel *w = new NCursesPanel(mystd->lines() - 2, mystd->cols() - 2, 1, 1); w->box(); w->refresh(); NCursesPanel *s = new NCursesPanel(w->lines() - 6, w->cols() - 6, 3, 3); s->scrollok(TRUE); ::echo(); s->printw("Enter decimal integers. The running total will be shown\n"); int nvalue = -1; int result = 0; while (nvalue != 0) { nvalue = 0; s->scanw("%d", &nvalue); if (nvalue != 0) { s->printw("%d: ", result += nvalue); } s->refresh(); } s->printw("\nPress any key to continue..."); s->getch(); delete s; delete w; delete mystd; ::noecho(); return FALSE; } }; // // ------------------------------------------------------------------------- // class MyMenu : public NCursesMenu { private: NCursesPanel* P; NCursesMenuItem** I; UserData *u; #define n_items 7 public: MyMenu () : NCursesMenu (n_items+2, 8, (lines()-10)/2, (cols()-10)/2), P(0), I(0), u(0) { u = new UserData(1); I = new NCursesMenuItem*[1+n_items]; I[0] = new PassiveItem("One"); I[1] = new PassiveItem("Two"); I[2] = new MyAction ("Silly", u); I[3] = new FormAction("Form"); I[4] = new PadAction("Pad"); I[5] = new ScanAction("Scan"); I[6] = new QuitItem(); I[7] = new NCursesMenuItem(); // Terminating empty item InitMenu(I, TRUE, TRUE); P = new NCursesPanel(1, n_items, LINES-1, 1); boldframe("Demo", "Silly"); P->show(); } MyMenu& operator=(const MyMenu& rhs) { if (this != &rhs) { *this = rhs; } return *this; } MyMenu(const MyMenu& rhs) : NCursesMenu(rhs), P(0), I(0), u(0) { } ~MyMenu() { P->hide(); delete P; delete u; } virtual void On_Menu_Init() { NCursesWindow W(::stdscr); P->move(0, 0); P->clrtoeol(); for(int i=1; i<=count(); i++) P->addch('0' + i); P->bkgd(W.getbkgd()); refresh(); } virtual void On_Menu_Termination() { P->move(0, 0); P->clrtoeol(); refresh(); } virtual void On_Item_Init(NCursesMenuItem& item) { P->move(0, item.index()); P->attron(A_REVERSE); P->printw("%1d", 1+item.index()); P->attroff(A_REVERSE); refresh(); } virtual void On_Item_Termination(NCursesMenuItem& item) { P->move(0, item.index()); P->attroff(A_REVERSE); P->printw("%1d", 1+item.index()); refresh(); } }; // // ------------------------------------------------------------------------- // class TestApplication : public NCursesApplication { protected: int titlesize() const { return 1; } void title(); Soft_Label_Key_Set::Label_Layout useSLKs() const { return Soft_Label_Key_Set::PC_Style_With_Index; } void init_labels(Soft_Label_Key_Set& S) const; public: TestApplication() : NCursesApplication(TRUE) { } int run(); }; void TestApplication::init_labels(Soft_Label_Key_Set& S) const { for(int i=1; i <= S.labels(); i++) { char buf[8]; assert(i < 100); ::_nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "Key%02d", i); S[i] = buf; // Text S[i] = Soft_Label_Key_Set::Soft_Label_Key::Left; // Justification } } void TestApplication::title() { const char * const titleText = "Simple C++ Binding Demo"; const int len = ::strlen(titleText); titleWindow->bkgd(screen_titles()); titleWindow->addstr(0, (titleWindow->cols() - len)/2, titleText); titleWindow->noutrefresh(); } int TestApplication::run() { MyMenu M; M(); return 0; } // // ------------------------------------------------------------------------- // static TestApplication *Demo = new TestApplication(); ncurses-6.0-20160213/c++/cursslk.cc0000644000175100001440000001112111721413764015023 0ustar tomusers// * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2005,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ #include "internal.h" #include "cursslk.h" #include "cursesapp.h" MODULE_ID("$Id: cursslk.cc,v 1.16 2012/02/23 10:41:56 tom Exp $") Soft_Label_Key_Set::Soft_Label_Key& Soft_Label_Key_Set::Soft_Label_Key::operator=(char *text) { delete[] label; size_t need = 1 + ::strlen(text); label = new char[need]; ::_nc_STRCPY(label,text,need); return *this; } long Soft_Label_Key_Set::count = 0L; int Soft_Label_Key_Set::num_labels = 0; Soft_Label_Key_Set::Label_Layout Soft_Label_Key_Set::format = None; void Soft_Label_Key_Set::init() { slk_array = new Soft_Label_Key[num_labels]; for(int i=0; i < num_labels; i++) { slk_array[i].num = i+1; } b_attrInit = FALSE; } Soft_Label_Key_Set::Soft_Label_Key_Set() : b_attrInit(FALSE), slk_array(NULL) { if (format==None) Error("No default SLK layout"); init(); } Soft_Label_Key_Set::Soft_Label_Key_Set(Soft_Label_Key_Set::Label_Layout fmt) : b_attrInit(FALSE), slk_array(NULL) { if (fmt==None) Error("Invalid SLK Layout"); if (count++==0) { format = fmt; if (ERR == ::slk_init(static_cast(fmt))) Error("slk_init"); num_labels = (fmt>=PC_Style?12:8); } else if (fmt!=format) Error("All SLKs must have same layout"); init(); } Soft_Label_Key_Set::~Soft_Label_Key_Set() { if (!::isendwin()) clear(); delete[] slk_array; count--; } Soft_Label_Key_Set::Soft_Label_Key& Soft_Label_Key_Set::operator[](int i) { if (i<1 || i>num_labels) Error("Invalid Label index"); return slk_array[i-1]; } void Soft_Label_Key_Set::activate_label(int i, bool bf) { if (!b_attrInit) { NCursesApplication* A = NCursesApplication::getApplication(); if (A) attrset(A->labels()); b_attrInit = TRUE; } Soft_Label_Key& K = (*this)[i]; if (ERR==::slk_set(K.num,bf?K.label:"",K.format)) Error("slk_set"); noutrefresh(); } void Soft_Label_Key_Set::activate_labels(bool bf) { if (!b_attrInit) { NCursesApplication* A = NCursesApplication::getApplication(); if (A) attrset(A->labels()); b_attrInit = TRUE; } for(int i=1; i <= num_labels; i++) { Soft_Label_Key& K = (*this)[i]; if (ERR==::slk_set(K.num,bf?K.label:"",K.format)) Error("slk_set"); } if (bf) restore(); else clear(); noutrefresh(); } ncurses-6.0-20160213/c++/cursesw.cc0000644000175100001440000002556412273270342015044 0ustar tomusers// * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 2007-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * Authors: * Thomas E. Dickey * Juergen Pfeifer * * The NCursesWindow class was originally based on a file written by * Eric Newton, later modified by Ulrich Drepper and Anatoly Ivasyuk. * However, aside from the compatible interface definition, no trace * of the original code remains in this version: it consists only of * changes introduced since 1995. */ #include "internal.h" #include "cursesw.h" MODULE_ID("$Id: cursesw.cc,v 1.54 2014/02/01 22:10:42 tom Exp $") #define COLORS_NEED_INITIALIZATION -1 #define COLORS_NOT_INITIALIZED 0 #define COLORS_MONOCHROME 1 #define COLORS_ARE_REALLY_THERE 2 #define HaveColors() (colorInitialized == COLORS_ARE_REALLY_THERE) // declare static variables for the class long NCursesWindow::count = 0L; bool NCursesWindow::b_initialized = FALSE; int NCursesWindow::scanw(const char* fmt, ...) { int result = ERR; va_list args; va_start(args, fmt); result = ::vw_scanw (w, const_cast(fmt), args); va_end(args); return result; } int NCursesWindow::scanw(int y, int x, const char* fmt, ...) { int result = ERR; if (::wmove(w, y, x) != ERR) { va_list args; va_start(args, fmt); result = ::vw_scanw (w, const_cast(fmt), args); va_end(args); } return result; } int NCursesWindow::scanw(const char* fmt, va_list args) { int result = ERR; result = ::vw_scanw (w, const_cast(fmt), args); return result; } int NCursesWindow::scanw(int y, int x, const char* fmt, va_list args) { int result = ERR; if (::wmove(w, y, x) != ERR) { result = ::vw_scanw (w, const_cast(fmt), args); } return result; } int NCursesWindow::printw(const char * fmt, ...) { va_list args; va_start(args, fmt); int result = ::vw_printw(w, fmt, args); va_end(args); return result; } int NCursesWindow::printw(int y, int x, const char * fmt, ...) { va_list args; va_start(args, fmt); int result = ::wmove(w, y, x); if (result == OK) { result = ::vw_printw(w, fmt, args); } va_end(args); return result; } int NCursesWindow::printw(const char * fmt, va_list args) { int result = ::vw_printw(w, fmt, args); return result; } int NCursesWindow::printw(int y, int x, const char * fmt, va_list args) { int result = ::wmove(w, y, x); if (result == OK) { result = ::vw_printw(w, fmt, args); } return result; } void NCursesWindow::set_keyboard(void) { keypad(TRUE); meta(TRUE); } void NCursesWindow::err_handler(const char *msg) const THROWS(NCursesException) { THROW(new NCursesException(msg)); } void NCursesWindow::initialize() { if (!b_initialized) { ::initscr(); b_initialized = TRUE; if (colorInitialized == COLORS_NEED_INITIALIZATION) { colorInitialized = COLORS_NOT_INITIALIZED; useColors(); } ::noecho(); ::cbreak(); } } void NCursesWindow::constructing() { initialize(); ++count; } NCursesWindow::NCursesWindow() : w(0), alloced(FALSE), par(0), subwins(0), sib(0) { constructing(); w = static_cast(0); } NCursesWindow::NCursesWindow(int nlines, int ncols, int begin_y, int begin_x) : w(0), alloced(TRUE), par(0), subwins(0), sib(0) { constructing(); w = ::newwin(nlines, ncols, begin_y, begin_x); if (w == 0) { err_handler("Cannot construct window"); } set_keyboard(); } NCursesWindow::NCursesWindow(WINDOW* window) : w(0), alloced(FALSE), par(0), subwins(0), sib(0) { constructing(); // We used to use a reference on the "window" parameter, but we cannot do // that with an opaque pointer (see NCURSES_OPAQUE). If the parameter was // "::stdscr", that is first set via the "constructing() call, and is null // up to that point. So we allow a null pointer here as meaning the "same" // as "::stdscr". w = window ? window : ::stdscr; set_keyboard(); } NCursesWindow::NCursesWindow(NCursesWindow& win, int ny, int nx, int begin_y, int begin_x, char absrel) : w(0), alloced(TRUE), par(0), subwins(0), sib(0) { constructing(); if (absrel == 'a') { // absolute origin begin_y -= win.begy(); begin_x -= win.begx(); } // Link this window into its parent's list of subwindows. // We use derwin(), since this also works for pads. w = ::derwin(win.w, ny, nx, begin_y, begin_x); if (w == 0) { err_handler("Cannot construct subwindow"); } par = &win; sib = win.subwins; win.subwins = this; } NCursesWindow::NCursesWindow(NCursesWindow& win, bool do_box NCURSES_PARAM_INIT(TRUE)) : w(0), alloced(TRUE), par(0), subwins(0), sib(0) { constructing(); int myHeight = win.height(); int myWidth = win.width(); w = :: derwin(win.w, myHeight - 2, myWidth - 2, 1, 1); if (w == 0) { err_handler("Cannot construct subwindow"); } par = &win; sib = win.subwins; win.subwins = this; subwins = 0; if (do_box) { win.box(); win.touchwin(); } } NCursesWindow NCursesWindow::Clone() { WINDOW *d = ::dupwin(w); NCursesWindow W(d); W.subwins = subwins; W.sib = sib; W.par = par; W.alloced = alloced; return W; } typedef int (*RIPOFFINIT)(NCursesWindow&); static RIPOFFINIT R_INIT[5]; // There can't be more static int r_init_idx = 0; static RIPOFFINIT* prip = R_INIT; NCursesWindow::NCursesWindow(WINDOW *win, int ncols) : w(0), alloced(FALSE), par(0), subwins(0), sib(0) { (void) ncols; initialize(); w = win; } int _nc_xx_ripoff_init(WINDOW *w, int ncols) { (void) ncols; int res = ERR; RIPOFFINIT init = *prip++; if (init) { res = init(*(new NCursesWindow(w,ncols))); } return res; } int NCursesWindow::ripoffline(int ripoff_lines, int (*init)(NCursesWindow& win)) { int code = ::_nc_ripoffline(ripoff_lines,_nc_xx_ripoff_init); if (code == OK && init && ripoff_lines) { R_INIT[r_init_idx++] = init; } return code; } bool NCursesWindow::isDescendant(NCursesWindow& win) { bool result = FALSE; for (NCursesWindow* p = subwins; p != NULL; p = p->sib) { if (p == &win || p->isDescendant(win)) { result = TRUE; break; } } return result; } void NCursesWindow::kill_subwindows() { NCursesWindow* p = subwins; subwins = 0; while (p != 0) { NCursesWindow* q = p->sib; p->kill_subwindows(); if (p->alloced) { if (p->w != 0) ::delwin(p->w); } delete p; p = q; } } NCursesWindow::~NCursesWindow() { kill_subwindows(); if (par != 0) { // Remove this window from the parent's list of subwindows. NCursesWindow * next = par->subwins; NCursesWindow * prev = 0; while (next != 0) { if (next == this) { if (prev != 0) { prev->sib = next->sib; } else { par->subwins = next->sib; } break; } prev = next; next = next->sib; } } if (alloced && w != 0) ::delwin(w); if (alloced) { --count; if (count == 0) { ::endwin(); } else if (count < 0) { // cannot happen! err_handler("Too many windows destroyed"); } } } // --------------------------------------------------------------------- // Color stuff // int NCursesWindow::colorInitialized = COLORS_NOT_INITIALIZED; void NCursesWindow::useColors(void) { if (colorInitialized == COLORS_NOT_INITIALIZED) { if (b_initialized) { if (::has_colors()) { ::start_color(); colorInitialized = COLORS_ARE_REALLY_THERE; } else { colorInitialized = COLORS_MONOCHROME; } } else { colorInitialized = COLORS_NEED_INITIALIZATION; } } } NCURSES_PAIRS_T NCursesWindow::getPair() const { return static_cast(PAIR_NUMBER(getattrs(w))); } NCURSES_COLOR_T NCursesWindow::getcolor(int getback) const { NCURSES_COLOR_T fore, back; if (HaveColors()) { if (::pair_content(getPair(), &fore, &back) == ERR) err_handler("Can't get color pair"); } else { // Monochrome means white on black back = COLOR_BLACK; fore = COLOR_WHITE; } return getback ? back : fore; } int NCursesWindow::NumberOfColors() { return (HaveColors()) ? COLORS : 1; } NCURSES_PAIRS_T NCursesWindow::getcolor() const { return (HaveColors()) ? getPair() : 0; } int NCursesWindow::setpalette(NCURSES_COLOR_T fore, NCURSES_COLOR_T back, NCURSES_PAIRS_T pair) { return (HaveColors()) ? ::init_pair(pair, fore, back) : OK; } int NCursesWindow::setpalette(NCURSES_COLOR_T fore, NCURSES_COLOR_T back) { return setpalette(fore, back, getPair()); } int NCursesWindow::setcolor(NCURSES_PAIRS_T pair) { if (HaveColors()) { if ((pair < 1) || (pair > COLOR_PAIRS)) err_handler("Can't set color pair"); attroff(A_COLOR); attrset(COLOR_PAIR(pair)); } return OK; } #if HAVE_HAS_KEY bool NCursesWindow::has_mouse() const { return ((::has_key(KEY_MOUSE) || ::has_mouse()) ? TRUE : FALSE); } #endif ncurses-6.0-20160213/c++/cursesapp.cc0000644000175100001440000001205511051605467015350 0ustar tomusers// * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * * and: Thomas E. Dickey * ****************************************************************************/ #include "internal.h" #include "cursesapp.h" MODULE_ID("$Id: cursesapp.cc,v 1.15 2008/08/16 17:15:35 tom Exp $") void NCursesApplication::init(bool bColors) { if (bColors) NCursesWindow::useColors(); if (Root_Window->colors() > 1) { b_Colors = TRUE; Root_Window->setcolor(1); Root_Window->setpalette(COLOR_YELLOW,COLOR_BLUE); Root_Window->setcolor(2); Root_Window->setpalette(COLOR_CYAN,COLOR_BLUE); Root_Window->setcolor(3); Root_Window->setpalette(COLOR_BLACK,COLOR_BLUE); Root_Window->setcolor(4); Root_Window->setpalette(COLOR_BLACK,COLOR_CYAN); Root_Window->setcolor(5); Root_Window->setpalette(COLOR_BLUE,COLOR_YELLOW); Root_Window->setcolor(6); Root_Window->setpalette(COLOR_BLACK,COLOR_GREEN); } else b_Colors = FALSE; Root_Window->bkgd(' '|window_backgrounds()); } NCursesApplication* NCursesApplication::theApp = 0; NCursesWindow* NCursesApplication::titleWindow = 0; NCursesApplication::SLK_Link* NCursesApplication::slk_stack = 0; NCursesApplication::~NCursesApplication() { Soft_Label_Key_Set* S; delete titleWindow; titleWindow = 0; while( (S=top()) ) { pop(); delete S; } delete Root_Window; Root_Window = 0; ::endwin(); } int NCursesApplication::rinit(NCursesWindow& w) { titleWindow = &w; return OK; } void NCursesApplication::push(Soft_Label_Key_Set& S) { SLK_Link* L = new SLK_Link; assert(L != 0); L->prev = slk_stack; L->SLKs = &S; slk_stack = L; if (Root_Window) S.show(); } bool NCursesApplication::pop() { if (slk_stack) { SLK_Link* L = slk_stack; slk_stack = slk_stack->prev; delete L; if (Root_Window) { Soft_Label_Key_Set* xx = top(); if (xx != 0) xx->show(); } } return (slk_stack ? FALSE : TRUE); } Soft_Label_Key_Set* NCursesApplication::top() const { if (slk_stack) return slk_stack->SLKs; else return static_cast(0); } int NCursesApplication::operator()(void) { bool bColors = b_Colors; Soft_Label_Key_Set* S = 0; int ts = titlesize(); if (ts>0) NCursesWindow::ripoffline(ts,rinit); Soft_Label_Key_Set::Label_Layout fmt = useSLKs(); if (fmt!=Soft_Label_Key_Set::None) { S = new Soft_Label_Key_Set(fmt); assert(S != 0); init_labels(*S); } Root_Window = new NCursesWindow(::stdscr); init(bColors); if (ts>0) title(); if (fmt!=Soft_Label_Key_Set::None) { push(*S); } return run(); } NCursesApplication::NCursesApplication(bool bColors) : b_Colors(bColors), Root_Window(NULL) { if (theApp) THROW(new NCursesException("Application object already created.")); else theApp = this; } ncurses-6.0-20160213/c++/edit_cfg.sh0000755000175100001440000000571411056321431015132 0ustar tomusers#!/bin/sh # $Id: edit_cfg.sh,v 1.17 2008/08/30 19:44:25 tom Exp $ ############################################################################## # Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1997-on # # Edit the default value of the etip.h file based on the autoconf-generated # values: # # $1 = ncurses_cfg.h # $2 = etip.h # echo "substituting autoconf'd values from $1 into $2" for name in \ CPP_HAS_PARAM_INIT \ CPP_HAS_STATIC_CAST \ ETIP_NEEDS_MATH_EXCEPTION \ ETIP_NEEDS_MATH_H \ HAVE_BUILTIN_H \ HAVE_GPP_BUILTIN_H \ HAVE_GXX_BUILTIN_H \ HAVE_IOSTREAM \ HAVE_TYPEINFO \ HAVE_VALUES_H \ IOSTREAM_NAMESPACE do rm -f $2.bak mv $2 $2.bak if ( grep "[ ]$name[ ]1" $1 2>&1 >/dev/null) then value=1 sed -e 's/define '$name'.*$/define '$name' 1/' $2.bak >$2 else value=0 sed -e 's/define '$name'.*$/define '$name' 0/' $2.bak >$2 fi if (cmp -s $2 $2.bak) then echo '... '$name $value mv $2.bak $2 else echo '... '$name $value rm -f $2.bak fi done ncurses-6.0-20160213/c++/cursesm.h0000644000175100001440000004633512371515532014675 0ustar tomusers// * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ // $Id: cursesm.h,v 1.30 2014/08/09 22:06:18 Adam.Jiang Exp $ #ifndef NCURSES_CURSESM_H_incl #define NCURSES_CURSESM_H_incl 1 #include extern "C" { # include } // // ------------------------------------------------------------------------- // This wraps the ITEM type of // ------------------------------------------------------------------------- // class NCURSES_IMPEXP NCursesMenuItem { friend class NCursesMenu; protected: ITEM *item; inline void OnError (int err) const THROW2(NCursesException const, NCursesMenuException) { if (err != E_OK) THROW(new NCursesMenuException (err)); } public: NCursesMenuItem (const char* p_name = NULL, const char* p_descript = NULL) : item(0) { item = p_name ? ::new_item (p_name, p_descript) : STATIC_CAST(ITEM*)(0); if (p_name && !item) OnError (E_SYSTEM_ERROR); } // Create an item. If you pass both parameters as NULL, a delimiting // item is constructed which can be used to terminate a list of // NCursesMenu objects. NCursesMenuItem& operator=(const NCursesMenuItem& rhs) { if (this != &rhs) { *this = rhs; } return *this; } NCursesMenuItem(const NCursesMenuItem& rhs) : item(0) { (void) rhs; } virtual ~NCursesMenuItem (); // Release the items memory inline const char* name () const { return ::item_name (item); } // Name of the item inline const char* description () const { return ::item_description (item); } // Description of the item inline int (index) (void) const { return ::item_index (item); } // Index of the item in an item array (or -1) inline void options_on (Item_Options opts) { OnError (::item_opts_on (item, opts)); } // Switch on the items options inline void options_off (Item_Options opts) { OnError (::item_opts_off (item, opts)); } // Switch off the item's option inline Item_Options options () const { return ::item_opts (item); } // Retrieve the items options inline void set_options (Item_Options opts) { OnError (::set_item_opts (item, opts)); } // Set the items options inline void set_value (bool f) { OnError (::set_item_value (item,f)); } // Set/Reset the items selection state inline bool value () const { return ::item_value (item); } // Retrieve the items selection state inline bool visible () const { return ::item_visible (item); } // Retrieve visibility of the item virtual bool action(); // Perform an action associated with this item; you may use this in an // user supplied driver for a menu; you may derive from this class and // overload action() to supply items with different actions. // If an action returns true, the menu will be exited. The default action // is to do nothing. }; // Prototype for an items callback function. typedef bool ITEMCALLBACK(NCursesMenuItem&); // If you don't like to create a child class for individual items to // overload action(), you may use this class and provide a callback // function pointer for items. class NCURSES_IMPEXP NCursesMenuCallbackItem : public NCursesMenuItem { private: ITEMCALLBACK* p_fct; public: NCursesMenuCallbackItem(ITEMCALLBACK* fct = NULL, const char* p_name = NULL, const char* p_descript = NULL ) : NCursesMenuItem (p_name, p_descript), p_fct (fct) { } NCursesMenuCallbackItem& operator=(const NCursesMenuCallbackItem& rhs) { if (this != &rhs) { *this = rhs; } return *this; } NCursesMenuCallbackItem(const NCursesMenuCallbackItem& rhs) : NCursesMenuItem(rhs), p_fct(0) { } virtual ~NCursesMenuCallbackItem(); bool action(); }; // This are the built-in hook functions in this C++ binding. In C++ we use // virtual member functions (see below On_..._Init and On_..._Termination) // to provide this functionality in an object oriented manner. extern "C" { void _nc_xx_mnu_init(MENU *); void _nc_xx_mnu_term(MENU *); void _nc_xx_itm_init(MENU *); void _nc_xx_itm_term(MENU *); } // // ------------------------------------------------------------------------- // This wraps the MENU type of // ------------------------------------------------------------------------- // class NCURSES_IMPEXP NCursesMenu : public NCursesPanel { protected: MENU *menu; private: NCursesWindow* sub; // the subwindow object bool b_sub_owner; // is this our own subwindow? bool b_framed; // has the menu a border? bool b_autoDelete; // Delete items when deleting menu? NCursesMenuItem** my_items; // The array of items for this menu // This structure is used for the menu's user data field to link the // MENU* to the C++ object and to provide extra space for a user pointer. typedef struct { void* m_user; // the pointer for the user's data const NCursesMenu* m_back; // backward pointer to C++ object const MENU* m_owner; } UserHook; // Get the backward pointer to the C++ object from a MENU static inline NCursesMenu* getHook(const MENU *m) { UserHook* hook = STATIC_CAST(UserHook*)(::menu_userptr(m)); assert(hook != 0 && hook->m_owner==m); return const_cast(hook->m_back); } friend void _nc_xx_mnu_init(MENU *); friend void _nc_xx_mnu_term(MENU *); friend void _nc_xx_itm_init(MENU *); friend void _nc_xx_itm_term(MENU *); // Calculate ITEM* array for the menu ITEM** mapItems(NCursesMenuItem* nitems[]); protected: // internal routines inline void set_user(void *user) { UserHook* uptr = STATIC_CAST(UserHook*)(::menu_userptr (menu)); assert (uptr != 0 && uptr->m_back==this && uptr->m_owner==menu); uptr->m_user = user; } inline void *get_user() { UserHook* uptr = STATIC_CAST(UserHook*)(::menu_userptr (menu)); assert (uptr != 0 && uptr->m_back==this && uptr->m_owner==menu); return uptr->m_user; } void InitMenu (NCursesMenuItem* menu[], bool with_frame, bool autoDeleteItems); inline void OnError (int err) const THROW2(NCursesException const, NCursesMenuException) { if (err != E_OK) THROW(new NCursesMenuException (this, err)); } // this wraps the menu_driver call. virtual int driver (int c) ; // 'Internal' constructor to create a menu without association to // an array of items. NCursesMenu( int nlines, int ncols, int begin_y = 0, int begin_x = 0) : NCursesPanel(nlines,ncols,begin_y,begin_x), menu (STATIC_CAST(MENU*)(0)), sub(0), b_sub_owner(0), b_framed(0), b_autoDelete(0), my_items(0) { } public: // Make a full window size menu NCursesMenu (NCursesMenuItem* Items[], bool with_frame=FALSE, // Reserve space for a frame? bool autoDelete_Items=FALSE) // Autocleanup of Items? : NCursesPanel(), menu(0), sub(0), b_sub_owner(0), b_framed(0), b_autoDelete(0), my_items(0) { InitMenu(Items, with_frame, autoDelete_Items); } // Make a menu with a window of this size. NCursesMenu (NCursesMenuItem* Items[], int nlines, int ncols, int begin_y = 0, int begin_x = 0, bool with_frame=FALSE, // Reserve space for a frame? bool autoDelete_Items=FALSE) // Autocleanup of Items? : NCursesPanel(nlines, ncols, begin_y, begin_x), menu(0), sub(0), b_sub_owner(0), b_framed(0), b_autoDelete(0), my_items(0) { InitMenu(Items, with_frame, autoDelete_Items); } NCursesMenu& operator=(const NCursesMenu& rhs) { if (this != &rhs) { *this = rhs; NCursesPanel::operator=(rhs); } return *this; } NCursesMenu(const NCursesMenu& rhs) : NCursesPanel(rhs), menu(rhs.menu), sub(rhs.sub), b_sub_owner(rhs.b_sub_owner), b_framed(rhs.b_framed), b_autoDelete(rhs.b_autoDelete), my_items(rhs.my_items) { } virtual ~NCursesMenu (); // Retrieve the menus subwindow inline NCursesWindow& subWindow() const { assert(sub!=NULL); return *sub; } // Set the menus subwindow void setSubWindow(NCursesWindow& sub); // Set these items for the menu inline void setItems(NCursesMenuItem* Items[]) { OnError(::set_menu_items(menu,mapItems(Items))); } // Remove the menu from the screen inline void unpost (void) { OnError (::unpost_menu (menu)); } // Post the menu to the screen if flag is true, unpost it otherwise inline void post(bool flag = TRUE) { flag ? OnError (::post_menu(menu)) : OnError (::unpost_menu (menu)); } // Get the numer of rows and columns for this menu inline void scale (int& mrows, int& mcols) const { OnError (::scale_menu (menu, &mrows, &mcols)); } // Set the format of this menu inline void set_format(int mrows, int mcols) { OnError (::set_menu_format(menu, mrows, mcols)); } // Get the format of this menu inline void menu_format(int& rows,int& ncols) { ::menu_format(menu,&rows,&ncols); } // Items of the menu inline NCursesMenuItem* items() const { return *my_items; } // Get the number of items in this menu inline int count() const { return ::item_count(menu); } // Get the current item (i.e. the one the cursor is located) inline NCursesMenuItem* current_item() const { return my_items[::item_index(::current_item(menu))]; } // Get the marker string inline const char* mark() const { return ::menu_mark(menu); } // Set the marker string inline void set_mark(const char *marker) { OnError (::set_menu_mark (menu, marker)); } // Get the name of the request code c inline static const char* request_name(int c) { return ::menu_request_name(c); } // Get the current pattern inline char* pattern() const { return ::menu_pattern(menu); } // true if there is a pattern match, false otherwise. bool set_pattern (const char *pat); // set the default attributes for the menu // i.e. set fore, back and grey attribute virtual void setDefaultAttributes(); // Get the menus background attributes inline chtype back() const { return ::menu_back(menu); } // Get the menus foreground attributes inline chtype fore() const { return ::menu_fore(menu); } // Get the menus grey attributes (used for unselectable items) inline chtype grey() const { return ::menu_grey(menu); } // Set the menus background attributes inline chtype set_background(chtype a) { return ::set_menu_back(menu,a); } // Set the menus foreground attributes inline chtype set_foreground(chtype a) { return ::set_menu_fore(menu,a); } // Set the menus grey attributes (used for unselectable items) inline chtype set_grey(chtype a) { return ::set_menu_grey(menu,a); } inline void options_on (Menu_Options opts) { OnError (::menu_opts_on (menu,opts)); } inline void options_off(Menu_Options opts) { OnError (::menu_opts_off(menu,opts)); } inline Menu_Options options() const { return ::menu_opts(menu); } inline void set_options (Menu_Options opts) { OnError (::set_menu_opts (menu,opts)); } inline int pad() const { return ::menu_pad(menu); } inline void set_pad (int padch) { OnError (::set_menu_pad (menu, padch)); } // Position the cursor to the current item inline void position_cursor () const { OnError (::pos_menu_cursor (menu)); } // Set the current item inline void set_current(NCursesMenuItem& I) { OnError (::set_current_item(menu, I.item)); } // Get the current top row of the menu inline int top_row (void) const { return ::top_row (menu); } // Set the current top row of the menu inline void set_top_row (int row) { OnError (::set_top_row (menu, row)); } // spacing control // Set the spacing for the menu inline void setSpacing(int spc_description, int spc_rows, int spc_columns) { OnError(::set_menu_spacing(menu, spc_description, spc_rows, spc_columns)); } // Get the spacing info for the menu inline void Spacing(int& spc_description, int& spc_rows, int& spc_columns) const { OnError(::menu_spacing(menu, &spc_description, &spc_rows, &spc_columns)); } // Decorations inline void frame(const char *title=NULL, const char* btitle=NULL) { if (b_framed) NCursesPanel::frame(title,btitle); else OnError(E_SYSTEM_ERROR); } inline void boldframe(const char *title=NULL, const char* btitle=NULL) { if (b_framed) NCursesPanel::boldframe(title,btitle); else OnError(E_SYSTEM_ERROR); } inline void label(const char *topLabel, const char *bottomLabel) { if (b_framed) NCursesPanel::label(topLabel,bottomLabel); else OnError(E_SYSTEM_ERROR); } // ----- // Hooks // ----- // Called after the menu gets repositioned in its window. // This is especially true if the menu is posted. virtual void On_Menu_Init(); // Called before the menu gets repositioned in its window. // This is especially true if the menu is unposted. virtual void On_Menu_Termination(); // Called after the item became the current item virtual void On_Item_Init(NCursesMenuItem& item); // Called before this item is left as current item. virtual void On_Item_Termination(NCursesMenuItem& item); // Provide a default key virtualization. Translate the keyboard // code c into a menu request code. // The default implementation provides a hopefully straightforward // mapping for the most common keystrokes and menu requests. virtual int virtualize(int c); // Operators inline NCursesMenuItem* operator[](int i) const { if ( (i < 0) || (i >= ::item_count (menu)) ) OnError (E_BAD_ARGUMENT); return (my_items[i]); } // Perform the menu's operation // Return the item where you left the selection mark for a single // selection menu, or NULL for a multivalued menu. virtual NCursesMenuItem* operator()(void); // -------------------- // Exception handlers // Called by operator() // -------------------- // Called if the request is denied virtual void On_Request_Denied(int c) const; // Called if the item is not selectable virtual void On_Not_Selectable(int c) const; // Called if pattern doesn't match virtual void On_No_Match(int c) const; // Called if the command is unknown virtual void On_Unknown_Command(int c) const; }; // // ------------------------------------------------------------------------- // This is the typical C++ typesafe way to allow to attach // user data to an item of a menu. Its assumed that the user // data belongs to some class T. Use T as template argument // to create a UserItem. // ------------------------------------------------------------------------- // template class NCURSES_IMPEXP NCursesUserItem : public NCursesMenuItem { public: NCursesUserItem (const char* p_name, const char* p_descript = NULL, const T* p_UserData = STATIC_CAST(T*)(0)) : NCursesMenuItem (p_name, p_descript) { if (item) OnError (::set_item_userptr (item, const_cast(reinterpret_cast(p_UserData)))); } virtual ~NCursesUserItem() {} inline const T* UserData (void) const { return reinterpret_cast(::item_userptr (item)); }; inline virtual void setUserData(const T* p_UserData) { if (item) OnError (::set_item_userptr (item, const_cast(reinterpret_cast(p_UserData)))); } }; // // ------------------------------------------------------------------------- // The same mechanism is used to attach user data to a menu // ------------------------------------------------------------------------- // template class NCURSES_IMPEXP NCursesUserMenu : public NCursesMenu { protected: NCursesUserMenu( int nlines, int ncols, int begin_y = 0, int begin_x = 0, const T* p_UserData = STATIC_CAST(T*)(0)) : NCursesMenu(nlines,ncols,begin_y,begin_x) { if (menu) set_user (const_cast(reinterpret_cast(p_UserData))); } public: NCursesUserMenu (NCursesMenuItem* Items[], const T* p_UserData = STATIC_CAST(T*)(0), bool with_frame=FALSE, bool autoDelete_Items=FALSE) : NCursesMenu (Items, with_frame, autoDelete_Items) { if (menu) set_user (const_cast(reinterpret_cast(p_UserData))); }; NCursesUserMenu (NCursesMenuItem* Items[], int nlines, int ncols, int begin_y = 0, int begin_x = 0, const T* p_UserData = STATIC_CAST(T*)(0), bool with_frame=FALSE) : NCursesMenu (Items, nlines, ncols, begin_y, begin_x, with_frame) { if (menu) set_user (const_cast(reinterpret_cast(p_UserData))); }; virtual ~NCursesUserMenu() { }; inline T* UserData (void) { return reinterpret_cast(get_user ()); }; inline virtual void setUserData (const T* p_UserData) { if (menu) set_user (const_cast(reinterpret_cast(p_UserData))); } }; #endif /* NCURSES_CURSESM_H_incl */ ncurses-6.0-20160213/c++/internal.h0000644000175100001440000000557511721413764015033 0ustar tomusers// * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2008,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ // $Id: internal.h,v 1.18 2012/02/23 10:41:56 tom Exp $ #ifndef NCURSES_CPLUS_INTERNAL_H #define NCURSES_CPLUS_INTERNAL_H 1 #include #if USE_RCS_IDS #define MODULE_ID(id) static const char Ident[] = id; #else #define MODULE_ID(id) /*nothing*/ #endif #ifdef __MINGW32__ #include #undef KEY_EVENT #endif #ifndef _QNX_SOURCE #include #include #endif #ifndef CTRL #define CTRL(x) ((x) & 0x1f) #endif #ifndef NULL #define NULL 0 #endif #include #endif /* NCURSES_CPLUS_INTERNAL_H */ ncurses-6.0-20160213/c++/cursesf.h0000644000175100001440000006631112371515523014662 0ustar tomusers// * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * ****************************************************************************/ // $Id: cursesf.h,v 1.32 2014/08/09 22:06:11 Adam.Jiang Exp $ #ifndef NCURSES_CURSESF_H_incl #define NCURSES_CURSESF_H_incl 1 #include #ifndef __EXT_QNX #include #endif extern "C" { # include } // // ------------------------------------------------------------------------- // The abstract base class for buitin and user defined Fieldtypes. // ------------------------------------------------------------------------- // class NCURSES_IMPEXP NCursesFormField; // forward declaration // Class to represent builtin field types as well as C++ written new // fieldtypes (see classes UserDefineFieldType... class NCURSES_IMPEXP NCursesFieldType { friend class NCursesFormField; protected: FIELDTYPE* fieldtype; inline void OnError(int err) const THROW2(NCursesException const, NCursesFormException) { if (err!=E_OK) THROW(new NCursesFormException (err)); } NCursesFieldType(FIELDTYPE *f) : fieldtype(f) { } virtual ~NCursesFieldType() {} // Set the fields f fieldtype to this one. virtual void set(NCursesFormField& f) = 0; public: NCursesFieldType() : fieldtype(STATIC_CAST(FIELDTYPE*)(0)) { } NCursesFieldType& operator=(const NCursesFieldType& rhs) { if (this != &rhs) { *this = rhs; } return *this; } NCursesFieldType(const NCursesFieldType& rhs) : fieldtype(rhs.fieldtype) { } }; // // ------------------------------------------------------------------------- // The class representing a forms field, wrapping the lowlevel FIELD struct // ------------------------------------------------------------------------- // class NCURSES_IMPEXP NCursesFormField { friend class NCursesForm; protected: FIELD *field; // lowlevel structure NCursesFieldType* ftype; // Associated field type // Error handler inline void OnError (int err) const THROW2(NCursesException const, NCursesFormException) { if (err != E_OK) THROW(new NCursesFormException (err)); } public: // Create a 'Null' field. Can be used to delimit a field list NCursesFormField() : field(STATIC_CAST(FIELD*)(0)), ftype(STATIC_CAST(NCursesFieldType*)(0)) { } // Create a new field NCursesFormField (int rows, int ncols, int first_row = 0, int first_col = 0, int offscreen_rows = 0, int additional_buffers = 0) : field(0), ftype(STATIC_CAST(NCursesFieldType*)(0)) { field = ::new_field(rows, ncols, first_row, first_col, offscreen_rows, additional_buffers); if (!field) OnError(errno); } NCursesFormField& operator=(const NCursesFormField& rhs) { if (this != &rhs) { *this = rhs; } return *this; } NCursesFormField(const NCursesFormField& rhs) : field(rhs.field), ftype(rhs.ftype) { } virtual ~NCursesFormField (); // Duplicate the field at a new position inline NCursesFormField* dup(int first_row, int first_col) { NCursesFormField* f = new NCursesFormField(); if (!f) OnError(E_SYSTEM_ERROR); else { f->ftype = ftype; f->field = ::dup_field(field,first_row,first_col); if (!f->field) OnError(errno); } return f; } // Link the field to a new location inline NCursesFormField* link(int first_row, int first_col) { NCursesFormField* f = new NCursesFormField(); if (!f) OnError(E_SYSTEM_ERROR); else { f->ftype = ftype; f->field = ::link_field(field,first_row,first_col); if (!f->field) OnError(errno); } return f; } // Get the lowlevel field representation inline FIELD* get_field() const { return field; } // Retrieve info about the field inline void info(int& rows, int& ncols, int& first_row, int& first_col, int& offscreen_rows, int& additional_buffers) const { OnError(::field_info(field, &rows, &ncols, &first_row, &first_col, &offscreen_rows, &additional_buffers)); } // Retrieve info about the fields dynamic properties. inline void dynamic_info(int& dynamic_rows, int& dynamic_cols, int& max_growth) const { OnError(::dynamic_field_info(field, &dynamic_rows, &dynamic_cols, &max_growth)); } // For a dynamic field you may set the maximum growth limit. // A zero means unlimited growth. inline void set_maximum_growth(int growth = 0) { OnError(::set_max_field(field,growth)); } // Move the field to a new position inline void move(int row, int col) { OnError(::move_field(field,row,col)); } // Mark the field to start a new page inline void new_page(bool pageFlag = FALSE) { OnError(::set_new_page(field,pageFlag)); } // Retrieve whether or not the field starts a new page. inline bool is_new_page() const { return ::new_page(field); } // Set the justification for the field inline void set_justification(int just) { OnError(::set_field_just(field,just)); } // Retrieve the fields justification inline int justification() const { return ::field_just(field); } // Set the foreground attribute for the field inline void set_foreground(chtype foreground) { OnError(::set_field_fore(field,foreground)); } // Retrieve the fields foreground attribute inline chtype fore() const { return ::field_fore(field); } // Set the background attribute for the field inline void set_background(chtype background) { OnError(::set_field_back(field,background)); } // Retrieve the fields background attribute inline chtype back() const { return ::field_back(field); } // Set the padding character for the field inline void set_pad_character(int padding) { OnError(::set_field_pad(field, padding)); } // Retrieve the fields padding character inline int pad() const { return ::field_pad(field); } // Switch on the fields options inline void options_on (Field_Options opts) { OnError (::field_opts_on (field, opts)); } // Switch off the fields options inline void options_off (Field_Options opts) { OnError (::field_opts_off (field, opts)); } // Retrieve the fields options inline Field_Options options () const { return ::field_opts (field); } // Set the fields options inline void set_options (Field_Options opts) { OnError (::set_field_opts (field, opts)); } // Mark the field as changed inline void set_changed(bool changeFlag = TRUE) { OnError(::set_field_status(field,changeFlag)); } // Test whether or not the field is marked as changed inline bool changed() const { return ::field_status(field); } // Return the index of the field in the field array of a form // or -1 if the field is not associated to a form inline int (index)() const { return ::field_index(field); } // Store a value in a fields buffer. The default buffer is nr. 0 inline void set_value(const char *val, int buffer = 0) { OnError(::set_field_buffer(field,buffer,val)); } // Retrieve the value of a fields buffer. The default buffer is nr. 0 inline char* value(int buffer = 0) const { return ::field_buffer(field,buffer); } // Set the validation type of the field. inline void set_fieldtype(NCursesFieldType& f) { ftype = &f; f.set(*this); // A good friend may do that... } // Retrieve the validation type of the field. inline NCursesFieldType* fieldtype() const { return ftype; } }; // This are the built-in hook functions in this C++ binding. In C++ we use // virtual member functions (see below On_..._Init and On_..._Termination) // to provide this functionality in an object oriented manner. extern "C" { void _nc_xx_frm_init(FORM *); void _nc_xx_frm_term(FORM *); void _nc_xx_fld_init(FORM *); void _nc_xx_fld_term(FORM *); } // // ------------------------------------------------------------------------- // The class representing a form, wrapping the lowlevel FORM struct // ------------------------------------------------------------------------- // class NCURSES_IMPEXP NCursesForm : public NCursesPanel { protected: FORM* form; // the lowlevel structure private: NCursesWindow* sub; // the subwindow object bool b_sub_owner; // is this our own subwindow? bool b_framed; // has the form a border? bool b_autoDelete; // Delete fields when deleting form? NCursesFormField** my_fields; // The array of fields for this form // This structure is used for the form's user data field to link the // FORM* to the C++ object and to provide extra space for a user pointer. typedef struct { void* m_user; // the pointer for the user's data const NCursesForm* m_back; // backward pointer to C++ object const FORM* m_owner; } UserHook; // Get the backward pointer to the C++ object from a FORM static inline NCursesForm* getHook(const FORM *f) { UserHook* hook = reinterpret_cast(::form_userptr(f)); assert(hook != 0 && hook->m_owner==f); return const_cast(hook->m_back); } friend void _nc_xx_frm_init(FORM *); friend void _nc_xx_frm_term(FORM *); friend void _nc_xx_fld_init(FORM *); friend void _nc_xx_fld_term(FORM *); // Calculate FIELD* array for the menu FIELD** mapFields(NCursesFormField* nfields[]); protected: // internal routines inline void set_user(void *user) { UserHook* uptr = reinterpret_cast(::form_userptr (form)); assert (uptr != 0 && uptr->m_back==this && uptr->m_owner==form); uptr->m_user = user; } inline void *get_user() { UserHook* uptr = reinterpret_cast(::form_userptr (form)); assert (uptr != 0 && uptr->m_back==this && uptr->m_owner==form); return uptr->m_user; } void InitForm (NCursesFormField* Fields[], bool with_frame, bool autoDeleteFields); inline void OnError (int err) const THROW2(NCursesException const, NCursesFormException) { if (err != E_OK) THROW(new NCursesFormException (err)); } // this wraps the form_driver call. virtual int driver (int c) ; // 'Internal' constructor, builds an object without association to a // field array. NCursesForm( int nlines, int ncols, int begin_y = 0, int begin_x = 0) : NCursesPanel(nlines, ncols, begin_y, begin_x), form (STATIC_CAST(FORM*)(0)), sub(0), b_sub_owner(0), b_framed(0), b_autoDelete(0), my_fields(0) { } public: // Create form for the default panel. NCursesForm (NCursesFormField* Fields[], bool with_frame=FALSE, // reserve space for a frame? bool autoDelete_Fields=FALSE) // do automatic cleanup? : NCursesPanel(), form(0), sub(0), b_sub_owner(0), b_framed(0), b_autoDelete(0), my_fields(0) { InitForm(Fields, with_frame, autoDelete_Fields); } // Create a form in a panel with the given position and size. NCursesForm (NCursesFormField* Fields[], int nlines, int ncols, int begin_y, int begin_x, bool with_frame=FALSE, // reserve space for a frame? bool autoDelete_Fields=FALSE) // do automatic cleanup? : NCursesPanel(nlines, ncols, begin_y, begin_x), form(0), sub(0), b_sub_owner(0), b_framed(0), b_autoDelete(0), my_fields(0) { InitForm(Fields, with_frame, autoDelete_Fields); } NCursesForm& operator=(const NCursesForm& rhs) { if (this != &rhs) { *this = rhs; NCursesPanel::operator=(rhs); } return *this; } NCursesForm(const NCursesForm& rhs) : NCursesPanel(rhs), form(rhs.form), sub(rhs.sub), b_sub_owner(rhs.b_sub_owner), b_framed(rhs.b_framed), b_autoDelete(rhs.b_autoDelete), my_fields(rhs.my_fields) { } virtual ~NCursesForm(); // Set the default attributes for the form virtual void setDefaultAttributes(); // Retrieve current field of the form. inline NCursesFormField* current_field() const { return my_fields[::field_index(::current_field(form))]; } // Set the forms subwindow void setSubWindow(NCursesWindow& sub); // Set these fields for the form inline void setFields(NCursesFormField* Fields[]) { OnError(::set_form_fields(form,mapFields(Fields))); } // Remove the form from the screen inline void unpost (void) { OnError (::unpost_form (form)); } // Post the form to the screen if flag is true, unpost it otherwise inline void post(bool flag = TRUE) { OnError (flag ? ::post_form(form) : ::unpost_form (form)); } // Decorations inline void frame(const char *title=NULL, const char* btitle=NULL) { if (b_framed) NCursesPanel::frame(title,btitle); else OnError(E_SYSTEM_ERROR); } inline void boldframe(const char *title=NULL, const char* btitle=NULL) { if (b_framed) NCursesPanel::boldframe(title,btitle); else OnError(E_SYSTEM_ERROR); } inline void label(const char *topLabel, const char *bottomLabel) { if (b_framed) NCursesPanel::label(topLabel,bottomLabel); else OnError(E_SYSTEM_ERROR); } // ----- // Hooks // ----- // Called after the form gets repositioned in its window. // This is especially true if the form is posted. virtual void On_Form_Init(); // Called before the form gets repositioned in its window. // This is especially true if the form is unposted. virtual void On_Form_Termination(); // Called after the field became the current field virtual void On_Field_Init(NCursesFormField& field); // Called before this field is left as current field. virtual void On_Field_Termination(NCursesFormField& field); // Calculate required window size for the form. void scale(int& rows, int& ncols) const { OnError(::scale_form(form,&rows,&ncols)); } // Retrieve number of fields in the form. int count() const { return ::field_count(form); } // Make the page the current page of the form. void set_page(int pageNum) { OnError(::set_form_page(form, pageNum)); } // Retrieve current page number int page() const { return ::form_page(form); } // Switch on the forms options inline void options_on (Form_Options opts) { OnError (::form_opts_on (form, opts)); } // Switch off the forms options inline void options_off (Form_Options opts) { OnError (::form_opts_off (form, opts)); } // Retrieve the forms options inline Form_Options options () const { return ::form_opts (form); } // Set the forms options inline void set_options (Form_Options opts) { OnError (::set_form_opts (form, opts)); } // Are there more data in the current field after the data shown inline bool data_ahead() const { return ::data_ahead(form); } // Are there more data in the current field before the data shown inline bool data_behind() const { return ::data_behind(form); } // Position the cursor to the current field inline void position_cursor () { OnError (::pos_form_cursor (form)); } // Set the current field inline void set_current(NCursesFormField& F) { OnError (::set_current_field(form, F.field)); } // Provide a default key virtualization. Translate the keyboard // code c into a form request code. // The default implementation provides a hopefully straightforward // mapping for the most common keystrokes and form requests. virtual int virtualize(int c); // Operators inline NCursesFormField* operator[](int i) const { if ( (i < 0) || (i >= ::field_count (form)) ) OnError (E_BAD_ARGUMENT); return my_fields[i]; } // Perform the menu's operation // Return the field where you left the form. virtual NCursesFormField* operator()(void); // Exception handlers. The default is a Beep. virtual void On_Request_Denied(int c) const; virtual void On_Invalid_Field(int c) const; virtual void On_Unknown_Command(int c) const; }; // // ------------------------------------------------------------------------- // This is the typical C++ typesafe way to allow to attach // user data to a field of a form. Its assumed that the user // data belongs to some class T. Use T as template argument // to create a UserField. // ------------------------------------------------------------------------- template class NCURSES_IMPEXP NCursesUserField : public NCursesFormField { public: NCursesUserField (int rows, int ncols, int first_row = 0, int first_col = 0, const T* p_UserData = STATIC_CAST(T*)(0), int offscreen_rows = 0, int additional_buffers = 0) : NCursesFormField (rows, ncols, first_row, first_col, offscreen_rows, additional_buffers) { if (field) OnError(::set_field_userptr(field, STATIC_CAST(void *)(p_UserData))); } virtual ~NCursesUserField() {}; inline const T* UserData (void) const { return reinterpret_cast(::field_userptr (field)); } inline virtual void setUserData(const T* p_UserData) { if (field) OnError (::set_field_userptr (field, STATIC_CAST(void *)(p_UserData))); } }; // // ------------------------------------------------------------------------- // The same mechanism is used to attach user data to a form // ------------------------------------------------------------------------- // template class NCURSES_IMPEXP NCursesUserForm : public NCursesForm { protected: // 'Internal' constructor, builds an object without association to a // field array. NCursesUserForm( int nlines, int ncols, int begin_y = 0, int begin_x = 0, const T* p_UserData = STATIC_CAST(T*)(0)) : NCursesForm(nlines,ncols,begin_y,begin_x) { if (form) set_user (const_cast(reinterpret_cast (p_UserData))); } public: NCursesUserForm (NCursesFormField* Fields[], const T* p_UserData = STATIC_CAST(T*)(0), bool with_frame=FALSE, bool autoDelete_Fields=FALSE) : NCursesForm (Fields, with_frame, autoDelete_Fields) { if (form) set_user (const_cast(reinterpret_cast(p_UserData))); }; NCursesUserForm (NCursesFormField* Fields[], int nlines, int ncols, int begin_y = 0, int begin_x = 0, const T* p_UserData = STATIC_CAST(T*)(0), bool with_frame=FALSE, bool autoDelete_Fields=FALSE) : NCursesForm (Fields, nlines, ncols, begin_y, begin_x, with_frame, autoDelete_Fields) { if (form) set_user (const_cast(reinterpret_cast (p_UserData))); }; virtual ~NCursesUserForm() { }; inline T* UserData (void) { return reinterpret_cast(get_user ()); }; inline virtual void setUserData (const T* p_UserData) { if (form) set_user (const_cast(reinterpret_cast(p_UserData))); } }; // // ------------------------------------------------------------------------- // Builtin Fieldtypes // ------------------------------------------------------------------------- // class NCURSES_IMPEXP Alpha_Field : public NCursesFieldType { private: int min_field_width; void set(NCursesFormField& f) { OnError(::set_field_type(f.get_field(),fieldtype,min_field_width)); } public: Alpha_Field(int width) : NCursesFieldType(TYPE_ALPHA), min_field_width(width) { } }; class NCURSES_IMPEXP Alphanumeric_Field : public NCursesFieldType { private: int min_field_width; void set(NCursesFormField& f) { OnError(::set_field_type(f.get_field(),fieldtype,min_field_width)); } public: Alphanumeric_Field(int width) : NCursesFieldType(TYPE_ALNUM), min_field_width(width) { } }; class NCURSES_IMPEXP Integer_Field : public NCursesFieldType { private: int precision; long lower_limit, upper_limit; void set(NCursesFormField& f) { OnError(::set_field_type(f.get_field(),fieldtype, precision,lower_limit,upper_limit)); } public: Integer_Field(int prec, long low=0L, long high=0L) : NCursesFieldType(TYPE_INTEGER), precision(prec), lower_limit(low), upper_limit(high) { } }; class NCURSES_IMPEXP Numeric_Field : public NCursesFieldType { private: int precision; double lower_limit, upper_limit; void set(NCursesFormField& f) { OnError(::set_field_type(f.get_field(),fieldtype, precision,lower_limit,upper_limit)); } public: Numeric_Field(int prec, double low=0.0, double high=0.0) : NCursesFieldType(TYPE_NUMERIC), precision(prec), lower_limit(low), upper_limit(high) { } }; class NCURSES_IMPEXP Regular_Expression_Field : public NCursesFieldType { private: char* regex; void set(NCursesFormField& f) { OnError(::set_field_type(f.get_field(),fieldtype,regex)); } void copy_regex(const char *source) { regex = new char[1 + ::strlen(source)]; (::strcpy)(regex, source); } public: Regular_Expression_Field(const char *expr) : NCursesFieldType(TYPE_REGEXP), regex(NULL) { copy_regex(expr); } Regular_Expression_Field& operator=(const Regular_Expression_Field& rhs) { if (this != &rhs) { *this = rhs; copy_regex(rhs.regex); NCursesFieldType::operator=(rhs); } return *this; } Regular_Expression_Field(const Regular_Expression_Field& rhs) : NCursesFieldType(rhs), regex(NULL) { copy_regex(rhs.regex); } ~Regular_Expression_Field() { delete[] regex; } }; class NCURSES_IMPEXP Enumeration_Field : public NCursesFieldType { private: const char** list; int case_sensitive; int non_unique_matches; void set(NCursesFormField& f) { OnError(::set_field_type(f.get_field(),fieldtype, list,case_sensitive,non_unique_matches)); } public: Enumeration_Field(const char* enums[], bool case_sens=FALSE, bool non_unique=FALSE) : NCursesFieldType(TYPE_ENUM), list(enums), case_sensitive(case_sens ? -1 : 0), non_unique_matches(non_unique ? -1 : 0) { } Enumeration_Field& operator=(const Enumeration_Field& rhs) { if (this != &rhs) { *this = rhs; NCursesFieldType::operator=(rhs); } return *this; } Enumeration_Field(const Enumeration_Field& rhs) : NCursesFieldType(rhs), list(rhs.list), case_sensitive(rhs.case_sensitive), non_unique_matches(rhs.non_unique_matches) { } }; class NCURSES_IMPEXP IPV4_Address_Field : public NCursesFieldType { private: void set(NCursesFormField& f) { OnError(::set_field_type(f.get_field(),fieldtype)); } public: IPV4_Address_Field() : NCursesFieldType(TYPE_IPV4) { } }; extern "C" { bool _nc_xx_fld_fcheck(FIELD *, const void*); bool _nc_xx_fld_ccheck(int c, const void *); void* _nc_xx_fld_makearg(va_list*); } // // ------------------------------------------------------------------------- // Abstract base class for User-Defined Fieldtypes // ------------------------------------------------------------------------- // class NCURSES_IMPEXP UserDefinedFieldType : public NCursesFieldType { friend class UDF_Init; // Internal helper to set up statics private: // For all C++ defined fieldtypes we need only one generic lowlevel // FIELDTYPE* element. static FIELDTYPE* generic_fieldtype; protected: // This are the functions required by the low level libforms functions // to construct a fieldtype. friend bool _nc_xx_fld_fcheck(FIELD *, const void*); friend bool _nc_xx_fld_ccheck(int c, const void *); friend void* _nc_xx_fld_makearg(va_list*); void set(NCursesFormField& f) { OnError(::set_field_type(f.get_field(),fieldtype,&f)); } protected: // Redefine this function to do a field validation. The argument // is a reference to the field you should validate. virtual bool field_check(NCursesFormField& f) = 0; // Redefine this function to do a character validation. The argument // is the character to be validated. virtual bool char_check (int c) = 0; public: UserDefinedFieldType() : NCursesFieldType(generic_fieldtype) { } }; extern "C" { bool _nc_xx_next_choice(FIELD*, const void *); bool _nc_xx_prev_choice(FIELD*, const void *); } // // ------------------------------------------------------------------------- // Abstract base class for User-Defined Fieldtypes with Choice functions // ------------------------------------------------------------------------- // class NCURSES_IMPEXP UserDefinedFieldType_With_Choice : public UserDefinedFieldType { friend class UDF_Init; // Internal helper to set up statics private: // For all C++ defined fieldtypes with choice functions we need only one // generic lowlevel FIELDTYPE* element. static FIELDTYPE* generic_fieldtype_with_choice; // This are the functions required by the low level libforms functions // to construct a fieldtype with choice functions. friend bool _nc_xx_next_choice(FIELD*, const void *); friend bool _nc_xx_prev_choice(FIELD*, const void *); protected: // Redefine this function to do the retrieval of the next choice value. // The argument is a reference to the field tobe examined. virtual bool next (NCursesFormField& f) = 0; // Redefine this function to do the retrieval of the previous choice value. // The argument is a reference to the field tobe examined. virtual bool previous(NCursesFormField& f) = 0; public: UserDefinedFieldType_With_Choice() { fieldtype = generic_fieldtype_with_choice; } }; #endif /* NCURSES_CURSESF_H_incl */ ncurses-6.0-20160213/ncurses/0000755000175100001440000000000012657717005014150 5ustar tomusersncurses-6.0-20160213/ncurses/llib-ltictw0000644000175100001440000001247612563707022016325 0ustar tomusers/**************************************************************************** * Copyright (c) 2012,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2012-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tinfo/alloc_entry.c */ #include #undef _nc_init_entry void _nc_init_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_copy_entry ENTRY *_nc_copy_entry( ENTRY *oldp) { return(*(ENTRY **)0); } #undef _nc_save_str char *_nc_save_str( const char *const string) { return(*(char **)0); } #undef _nc_wrap_entry void _nc_wrap_entry( ENTRY *const ep, NCURSES_BOOL copy_strings) { /* void */ } #undef _nc_merge_entry void _nc_merge_entry( TERMTYPE *const to, TERMTYPE *const from) { /* void */ } /* ./tinfo/captoinfo.c */ #undef _nc_captoinfo char *_nc_captoinfo( const char *cap, const char *s, int const parameterized) { return(*(char **)0); } #undef _nc_infotocap char *_nc_infotocap( const char *cap, const char *str, int const parameterized) { return(*(char **)0); } /* ./tinfo/comp_expand.c */ #undef _nc_tic_expand char *_nc_tic_expand( const char *srcp, NCURSES_BOOL tic_format, int numbers) { return(*(char **)0); } /* ./tinfo/comp_parse.c */ #undef _nc_check_termtype2 void (*_nc_check_termtype2)( TERMTYPE *p1, NCURSES_BOOL p2); #undef _nc_check_termtype void (*_nc_check_termtype)( TERMTYPE *p1); #undef _nc_entry_match NCURSES_BOOL _nc_entry_match( char *n1, char *n2) { return(*(NCURSES_BOOL *)0); } #undef _nc_read_entry_source void _nc_read_entry_source( FILE *fp, char *buf, int literal, NCURSES_BOOL silent, NCURSES_BOOL (*hook)( ENTRY *p1)) { /* void */ } #undef _nc_resolve_uses2 int _nc_resolve_uses2( NCURSES_BOOL fullresolve, NCURSES_BOOL literal) { return(*(int *)0); } #undef _nc_resolve_uses int _nc_resolve_uses( NCURSES_BOOL fullresolve) { return(*(int *)0); } /* ./tinfo/comp_scan.c */ #undef _nc_syntax int _nc_syntax; #undef _nc_strict_bsd int _nc_strict_bsd; #undef _nc_curr_file_pos long _nc_curr_file_pos; #undef _nc_comment_start long _nc_comment_start; #undef _nc_comment_end long _nc_comment_end; #undef _nc_start_line long _nc_start_line; #undef _nc_curr_token struct token _nc_curr_token; #undef _nc_disable_period NCURSES_BOOL _nc_disable_period; #undef _nc_reset_input void _nc_reset_input( FILE *fp, char *buf) { /* void */ } #undef _nc_get_token int _nc_get_token( NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_trans_string int _nc_trans_string( char *ptr, char *last) { return(*(int *)0); } #undef _nc_push_token void _nc_push_token( int tokclass) { /* void */ } #undef _nc_panic_mode void _nc_panic_mode( char ch) { /* void */ } /* ./tinfo/parse_entry.c */ #undef _nc_parse_entry int _nc_parse_entry( struct entry *entryp, int literal, NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_capcmp int _nc_capcmp( const char *s, const char *t) { return(*(int *)0); } /* ./tinfo/write_entry.c */ #undef _nc_set_writedir void _nc_set_writedir( const char *dir) { /* void */ } #undef _nc_write_entry void _nc_write_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_tic_written int _nc_tic_written(void) { return(*(int *)0); } ncurses-6.0-20160213/ncurses/llib-ltinfot0000644000175100001440000007007212563707102016471 0ustar tomusers/**************************************************************************** * Copyright (c) 2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2013-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tinfo/access.c */ #include #undef _nc_rootname char *_nc_rootname( char *path) { return(*(char **)0); } #undef _nc_is_abs_path NCURSES_BOOL _nc_is_abs_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_pathlast unsigned _nc_pathlast( const char *path) { return(*(unsigned *)0); } #undef _nc_basename char *_nc_basename( char *path) { return(*(char **)0); } #undef _nc_access int _nc_access( const char *path, int mode) { return(*(int *)0); } #undef _nc_is_dir_path NCURSES_BOOL _nc_is_dir_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_is_file_path NCURSES_BOOL _nc_is_file_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_env_access int _nc_env_access(void) { return(*(int *)0); } /* ./tinfo/add_tries.c */ #undef _nc_add_to_try int _nc_add_to_try( TRIES **tree, const char *str, unsigned code) { return(*(int *)0); } /* ./tinfo/alloc_ttype.c */ #undef _nc_align_termtype void _nc_align_termtype( TERMTYPE *to, TERMTYPE *from) { /* void */ } #undef _nc_copy_termtype void _nc_copy_termtype( TERMTYPE *dst, const TERMTYPE *src) { /* void */ } /* ./codes.c */ #undef _nc_boolcodes const char *const *_nc_boolcodes(void) { return(*(const char **)0); } #undef _nc_numcodes const char *const *_nc_numcodes(void) { return(*(const char **)0); } #undef _nc_strcodes const char *const *_nc_strcodes(void) { return(*(const char **)0); } /* ./comp_captab.c */ #undef _nc_get_table const struct name_table_entry *_nc_get_table( NCURSES_BOOL termcap) { return(*(const struct name_table_entry **)0); } #undef _nc_get_hash_table const HashValue *_nc_get_hash_table( NCURSES_BOOL termcap) { return(*(const HashValue **)0); } #undef _nc_get_alias_table const struct alias *_nc_get_alias_table( NCURSES_BOOL termcap) { return(*(const struct alias **)0); } #undef _nc_get_hash_info const HashData *_nc_get_hash_info( NCURSES_BOOL termcap) { return(*(const HashData **)0); } /* ./tinfo/comp_error.c */ #undef _nc_suppress_warnings NCURSES_BOOL _nc_suppress_warnings; #undef _nc_curr_line int _nc_curr_line; #undef _nc_curr_col int _nc_curr_col; #undef _nc_get_source const char *_nc_get_source(void) { return(*(const char **)0); } #undef _nc_set_source void _nc_set_source( const char *const name) { /* void */ } #undef _nc_set_type void _nc_set_type( const char *const name) { /* void */ } #undef _nc_get_type void _nc_get_type( char *name) { /* void */ } #undef _nc_warning void _nc_warning( const char *const fmt, ...) { /* void */ } #undef _nc_err_abort void _nc_err_abort( const char *const fmt, ...) { /* void */ } #undef _nc_syserr_abort void _nc_syserr_abort( const char *const fmt, ...) { /* void */ } /* ./tinfo/comp_hash.c */ #undef _nc_find_entry struct name_table_entry const *_nc_find_entry( const char *string, const HashValue *hash_table) { return(*(struct name_table_entry const **)0); } #undef _nc_find_type_entry struct name_table_entry const *_nc_find_type_entry( const char *string, int type, NCURSES_BOOL termcap) { return(*(struct name_table_entry const **)0); } /* ./tinfo/db_iterator.c */ #undef _nc_tic_dir const char *_nc_tic_dir( const char *path) { return(*(const char **)0); } #undef _nc_keep_tic_dir void _nc_keep_tic_dir( const char *path) { /* void */ } #undef _nc_last_db void _nc_last_db(void) { /* void */ } #undef _nc_next_db const char *_nc_next_db( DBDIRS *state, int *offset) { return(*(const char **)0); } #undef _nc_first_db void _nc_first_db( DBDIRS *state, int *offset) { /* void */ } /* ./tinfo/doalloc.c */ #undef _nc_doalloc void *_nc_doalloc( void *oldp, size_t amount) { return(*(void **)0); } /* ./tinfo/entries.c */ #undef _nc_head ENTRY *_nc_head; #undef _nc_tail ENTRY *_nc_tail; #undef _nc_free_entry void _nc_free_entry( ENTRY *headp, TERMTYPE *tterm) { /* void */ } #undef _nc_free_entries void _nc_free_entries( ENTRY *headp) { /* void */ } #undef _nc_delink_entry ENTRY *_nc_delink_entry( ENTRY *headp, TERMTYPE *tterm) { return(*(ENTRY **)0); } #undef _nc_leaks_tinfo void _nc_leaks_tinfo(void) { /* void */ } /* ./fallback.c */ #undef _nc_fallback const TERMTYPE *_nc_fallback( const char *name) { return(*(const TERMTYPE **)0); } /* ./tinfo/free_ttype.c */ #undef _nc_free_termtype void _nc_free_termtype( TERMTYPE *ptr) { /* void */ } #undef _nc_user_definable NCURSES_BOOL _nc_user_definable; #undef use_extended_names int use_extended_names( NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/getenv_num.c */ #undef _nc_getenv_num int _nc_getenv_num( const char *name) { return(*(int *)0); } #undef _nc_setenv_num void _nc_setenv_num( const char *name, int value) { /* void */ } /* ./tinfo/home_terminfo.c */ #undef _nc_home_terminfo char *_nc_home_terminfo(void) { return(*(char **)0); } /* ./tinfo/init_keytry.c */ #undef _nc_init_keytry void _nc_init_keytry( SCREEN *sp) { /* void */ } /* ./tinfo/lib_acs.c */ #undef _nc_acs_map chtype *_nc_acs_map(void) { return(*(chtype **)0); } #undef _nc_init_acs_sp void _nc_init_acs_sp( SCREEN *sp) { /* void */ } #undef _nc_init_acs void _nc_init_acs(void) { /* void */ } /* ./tinfo/lib_baudrate.c */ struct speed { short s; int sp; }; #undef _nc_baudrate int _nc_baudrate( int OSpeed) { return(*(int *)0); } #undef _nc_ospeed int _nc_ospeed( int BaudRate) { return(*(int *)0); } #undef baudrate_sp int baudrate_sp( SCREEN *sp) { return(*(int *)0); } #undef baudrate int baudrate(void) { return(*(int *)0); } /* ./tinfo/lib_cur_term.c */ #undef _nc_get_cur_term_sp TERMINAL *_nc_get_cur_term_sp( SCREEN *sp) { return(*(TERMINAL **)0); } #undef _nc_get_cur_term TERMINAL *_nc_get_cur_term(void) { return(*(TERMINAL **)0); } #undef _nc_cur_term TERMINAL *_nc_cur_term(void) { return(*(TERMINAL **)0); } #undef set_curterm_sp TERMINAL *set_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(TERMINAL **)0); } #undef set_curterm TERMINAL *set_curterm( TERMINAL *termp) { return(*(TERMINAL **)0); } #undef del_curterm_sp int del_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(int *)0); } #undef del_curterm int del_curterm( TERMINAL *termp) { return(*(int *)0); } /* ./tinfo/lib_data.c */ #undef _nc_stdscr WINDOW *_nc_stdscr(void) { return(*(WINDOW **)0); } #undef _nc_curscr WINDOW *_nc_curscr(void) { return(*(WINDOW **)0); } #undef _nc_newscr WINDOW *_nc_newscr(void) { return(*(WINDOW **)0); } #undef _nc_screen_chain SCREEN *_nc_screen_chain; #undef SP SCREEN *SP; #undef _nc_globals NCURSES_GLOBALS _nc_globals; #undef _nc_prescreen NCURSES_PRESCREEN _nc_prescreen; #undef _nc_screen_of SCREEN *_nc_screen_of( WINDOW *win) { return(*(SCREEN **)0); } #undef _nc_init_pthreads void _nc_init_pthreads(void) { /* void */ } #undef _nc_mutex_init void _nc_mutex_init( pthread_mutex_t *obj) { /* void */ } #undef _nc_mutex_lock int _nc_mutex_lock( pthread_mutex_t *obj) { return(*(int *)0); } #undef _nc_mutex_trylock int _nc_mutex_trylock( pthread_mutex_t *obj) { return(*(int *)0); } #undef _nc_mutex_unlock int _nc_mutex_unlock( pthread_mutex_t *obj) { return(*(int *)0); } /* ./tinfo/lib_has_cap.c */ #undef has_ic_sp NCURSES_BOOL has_ic_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_ic NCURSES_BOOL has_ic(void) { return(*(NCURSES_BOOL *)0); } #undef has_il_sp NCURSES_BOOL has_il_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_il NCURSES_BOOL has_il(void) { return(*(NCURSES_BOOL *)0); } /* ./tinfo/lib_kernel.c */ #undef erasechar_sp char erasechar_sp( SCREEN *sp) { return(*(char *)0); } #undef erasechar char erasechar(void) { return(*(char *)0); } #undef killchar_sp char killchar_sp( SCREEN *sp) { return(*(char *)0); } #undef killchar char killchar(void) { return(*(char *)0); } #undef flushinp_sp int flushinp_sp( SCREEN *sp) { return(*(int *)0); } #undef flushinp int flushinp(void) { return(*(int *)0); } /* ./lib_keyname.c */ struct kn { short offset; int code; }; #undef keyname_sp const char *keyname_sp( SCREEN *sp, int c) { return(*(const char **)0); } #undef keyname const char *keyname( int c) { return(*(const char **)0); } /* ./tinfo/lib_longname.c */ #undef longname_sp char *longname_sp( SCREEN *sp) { return(*(char **)0); } #undef longname char *longname(void) { return(*(char **)0); } /* ./tinfo/lib_napms.c */ #undef napms_sp int napms_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef napms int napms( int ms) { return(*(int *)0); } /* ./tinfo/lib_options.c */ #undef idlok int idlok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef idcok void idcok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } #undef halfdelay_sp int halfdelay_sp( SCREEN *sp, int t) { return(*(int *)0); } #undef halfdelay int halfdelay( int t) { return(*(int *)0); } #undef nodelay int nodelay( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef notimeout int notimeout( WINDOW *win, NCURSES_BOOL f) { return(*(int *)0); } #undef wtimeout void wtimeout( WINDOW *win, int delay) { /* void */ } #undef keypad int keypad( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef meta int meta( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef curs_set_sp int curs_set_sp( SCREEN *sp, int vis) { return(*(int *)0); } #undef curs_set int curs_set( int vis) { return(*(int *)0); } #undef typeahead_sp int typeahead_sp( SCREEN *sp, int fd) { return(*(int *)0); } #undef typeahead int typeahead( int fd) { return(*(int *)0); } #undef has_key_sp int has_key_sp( SCREEN *sp, int keycode) { return(*(int *)0); } #undef has_key int has_key( int keycode) { return(*(int *)0); } #undef _nc_putp_flush_sp int _nc_putp_flush_sp( SCREEN *sp, const char *name, const char *value) { return(*(int *)0); } #undef _nc_keypad int _nc_keypad( SCREEN *sp, int flag) { return(*(int *)0); } /* ./tinfo/lib_raw.c */ #undef raw_sp int raw_sp( SCREEN *sp) { return(*(int *)0); } #undef raw int raw(void) { return(*(int *)0); } #undef cbreak_sp int cbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef cbreak int cbreak(void) { return(*(int *)0); } #undef qiflush_sp void qiflush_sp( SCREEN *sp) { /* void */ } #undef qiflush void qiflush(void) { /* void */ } #undef noraw_sp int noraw_sp( SCREEN *sp) { return(*(int *)0); } #undef noraw int noraw(void) { return(*(int *)0); } #undef nocbreak_sp int nocbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef nocbreak int nocbreak(void) { return(*(int *)0); } #undef noqiflush_sp void noqiflush_sp( SCREEN *sp) { /* void */ } #undef noqiflush void noqiflush(void) { /* void */ } #undef intrflush_sp int intrflush_sp( SCREEN *sp, WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef intrflush int intrflush( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/lib_setup.c */ #undef _nc_ttytype char *_nc_ttytype(void) { return(*(char **)0); } #undef _nc_ptr_Lines int *_nc_ptr_Lines( SCREEN *sp) { return(*(int **)0); } #undef _nc_LINES int _nc_LINES(void) { return(*(int *)0); } #undef _nc_ptr_Cols int *_nc_ptr_Cols( SCREEN *sp) { return(*(int **)0); } #undef _nc_COLS int _nc_COLS(void) { return(*(int *)0); } #undef _nc_ptr_Tabsize int *_nc_ptr_Tabsize( SCREEN *sp) { return(*(int **)0); } #undef _nc_TABSIZE int _nc_TABSIZE(void) { return(*(int *)0); } #undef set_tabsize_sp int set_tabsize_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_tabsize int set_tabsize( int value) { return(*(int *)0); } #undef _nc_handle_sigwinch int _nc_handle_sigwinch( SCREEN *sp) { return(*(int *)0); } #undef use_env_sp void use_env_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_tioctl_sp void use_tioctl_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_env void use_env( NCURSES_BOOL f) { /* void */ } #undef use_tioctl void use_tioctl( NCURSES_BOOL f) { /* void */ } #undef _nc_get_screensize void _nc_get_screensize( SCREEN *sp, int *linep, int *colp) { /* void */ } #undef _nc_update_screensize void _nc_update_screensize( SCREEN *sp) { /* void */ } #undef _nc_setup_tinfo int _nc_setup_tinfo( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } #undef _nc_tinfo_cmdch void _nc_tinfo_cmdch( TERMINAL *termp, int proto) { /* void */ } #undef _nc_get_locale char *_nc_get_locale(void) { return(*(char **)0); } #undef _nc_unicode_locale int _nc_unicode_locale(void) { return(*(int *)0); } #undef _nc_locale_breaks_acs int _nc_locale_breaks_acs( TERMINAL *termp) { return(*(int *)0); } #undef _nc_setupterm int _nc_setupterm( const char *tname, int Filedes, int *errret, int reuse) { return(*(int *)0); } #undef new_prescr SCREEN *new_prescr(void) { return(*(SCREEN **)0); } #undef setupterm int setupterm( const char *tname, int Filedes, int *errret) { return(*(int *)0); } /* ./tinfo/lib_termcap.c */ #undef UP char *UP; #undef BC char *BC; #undef tgetent_sp int tgetent_sp( SCREEN *sp, char *bufp, const char *name) { return(*(int *)0); } #undef tgetent int tgetent( char *bufp, const char *name) { return(*(int *)0); } #undef tgetflag_sp int tgetflag_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetflag int tgetflag( const char *id) { return(*(int *)0); } #undef tgetnum_sp int tgetnum_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetnum int tgetnum( const char *id) { return(*(int *)0); } #undef tgetstr_sp char *tgetstr_sp( SCREEN *sp, const char *id, char **area) { return(*(char **)0); } #undef tgetstr char *tgetstr( const char *id, char **area) { return(*(char **)0); } /* ./tinfo/lib_termname.c */ #undef termname_sp char *termname_sp( SCREEN *sp) { return(*(char **)0); } #undef termname char *termname(void) { return(*(char **)0); } /* ./tinfo/lib_tgoto.c */ #undef tgoto char *tgoto( const char *string, int x, int y) { return(*(char **)0); } /* ./tinfo/lib_ti.c */ #undef tigetflag_sp int tigetflag_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetflag int tigetflag( const char *str) { return(*(int *)0); } #undef tigetnum_sp int tigetnum_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetnum int tigetnum( const char *str) { return(*(int *)0); } #undef tigetstr_sp char *tigetstr_sp( SCREEN *sp, const char *str) { return(*(char **)0); } #undef tigetstr char *tigetstr( const char *str) { return(*(char **)0); } /* ./tinfo/lib_tparm.c */ #undef _nc_tparm_err int _nc_tparm_err; #undef _nc_tparm_analyze int _nc_tparm_analyze( const char *string, char *p_is_s[9], int *_nc_popcount) { return(*(int *)0); } #undef tparm char *tparm( const char *string, ...) { return(*(char **)0); } #undef tiparm char *tiparm( const char *string, ...) { return(*(char **)0); } /* ./tinfo/lib_tputs.c */ #undef PC char PC; #undef ospeed short ospeed; #undef _nc_nulls_sent int _nc_nulls_sent; #undef _nc_set_no_padding void _nc_set_no_padding( SCREEN *sp) { /* void */ } #undef delay_output_sp int delay_output_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef delay_output int delay_output( int ms) { return(*(int *)0); } #undef _nc_flush_sp void _nc_flush_sp( SCREEN *sp) { /* void */ } #undef _nc_flush void _nc_flush(void) { /* void */ } #undef _nc_outch_sp int _nc_outch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_outch int _nc_outch( int ch) { return(*(int *)0); } #undef _nc_putchar_sp int _nc_putchar_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_putchar int _nc_putchar( int ch) { return(*(int *)0); } #undef putp_sp int putp_sp( SCREEN *sp, const char *string) { return(*(int *)0); } #undef putp int putp( const char *string) { return(*(int *)0); } #undef _nc_putp_sp int _nc_putp_sp( SCREEN *sp, const char *name, const char *string) { return(*(int *)0); } #undef _nc_putp int _nc_putp( const char *name, const char *string) { return(*(int *)0); } #undef tputs_sp int tputs_sp( SCREEN *sp, const char *string, int affcnt, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef _nc_outc_wrapper int _nc_outc_wrapper( SCREEN *sp, int c) { return(*(int *)0); } #undef tputs int tputs( const char *string, int affcnt, int (*outc)( int p1)) { return(*(int *)0); } /* ./trace/lib_trace.c */ #undef _nc_tracing unsigned _nc_tracing; #undef _nc__nc_tputs_trace const char *_nc__nc_tputs_trace(void) { return(*(const char **)0); } #undef _nc__nc_outchars long _nc__nc_outchars(void) { return(*(long *)0); } #undef _nc_set_tputs_trace void _nc_set_tputs_trace( const char *s) { /* void */ } #undef _nc_count_outchars void _nc_count_outchars( long increment) { /* void */ } #undef trace void trace( const unsigned int tracelevel) { /* void */ } #undef _tracef void _tracef( const char *fmt, ...) { /* void */ } #undef _nc_retrace_bool NCURSES_BOOL _nc_retrace_bool( int code) { return(*(NCURSES_BOOL *)0); } #undef _nc_retrace_char char _nc_retrace_char( int code) { return(*(char *)0); } #undef _nc_retrace_int int _nc_retrace_int( int code) { return(*(int *)0); } #undef _nc_retrace_unsigned unsigned _nc_retrace_unsigned( unsigned code) { return(*(unsigned *)0); } #undef _nc_retrace_ptr char *_nc_retrace_ptr( char *code) { return(*(char **)0); } #undef _nc_retrace_cptr const char *_nc_retrace_cptr( const char *code) { return(*(const char **)0); } #undef _nc_retrace_cvoid_ptr const void *_nc_retrace_cvoid_ptr( const void *code) { return(*(const void **)0); } #undef _nc_retrace_void_ptr void *_nc_retrace_void_ptr( void *code) { return(*(void **)0); } #undef _nc_retrace_sp SCREEN *_nc_retrace_sp( SCREEN *code) { return(*(SCREEN **)0); } #undef _nc_retrace_win WINDOW *_nc_retrace_win( WINDOW *code) { return(*(WINDOW **)0); } #undef _nc_use_tracef int _nc_use_tracef( unsigned mask) { return(*(int *)0); } #undef _nc_locked_tracef void _nc_locked_tracef( const char *fmt, ...) { /* void */ } /* ./trace/lib_traceatr.c */ #undef _traceattr2 char *_traceattr2( int bufnum, chtype newmode) { return(*(char **)0); } #undef _traceattr char *_traceattr( attr_t newmode) { return(*(char **)0); } #undef _nc_retrace_int_attr_t int _nc_retrace_int_attr_t( attr_t code) { return(*(int *)0); } #undef _nc_retrace_attr_t attr_t _nc_retrace_attr_t( attr_t code) { return(*(attr_t *)0); } #undef _nc_altcharset_name const char *_nc_altcharset_name( attr_t attr, chtype ch) { return(*(const char **)0); } #undef _tracechtype2 char *_tracechtype2( int bufnum, chtype ch) { return(*(char **)0); } #undef _tracechtype char *_tracechtype( chtype ch) { return(*(char **)0); } #undef _nc_retrace_chtype chtype _nc_retrace_chtype( chtype code) { return(*(chtype *)0); } /* ./trace/lib_tracebits.c */ #undef _nc_trace_ttymode char *_nc_trace_ttymode( struct termios *tty) { return(*(char **)0); } #undef _nc_tracebits char *_nc_tracebits(void) { return(*(char **)0); } /* ./trace/lib_tracechr.c */ #undef _nc_tracechar char *_nc_tracechar( SCREEN *sp, int ch) { return(*(char **)0); } #undef _tracechar char *_tracechar( int ch) { return(*(char **)0); } /* ./tinfo/lib_ttyflags.c */ #undef _nc_get_tty_mode_sp int _nc_get_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_get_tty_mode int _nc_get_tty_mode( struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode_sp int _nc_set_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode int _nc_set_tty_mode( struct termios *buf) { return(*(int *)0); } #undef def_shell_mode_sp int def_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_shell_mode int def_shell_mode(void) { return(*(int *)0); } #undef def_prog_mode_sp int def_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_prog_mode int def_prog_mode(void) { return(*(int *)0); } #undef reset_prog_mode_sp int reset_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_prog_mode int reset_prog_mode(void) { return(*(int *)0); } #undef reset_shell_mode_sp int reset_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_shell_mode int reset_shell_mode(void) { return(*(int *)0); } #undef savetty_sp int savetty_sp( SCREEN *sp) { return(*(int *)0); } #undef savetty int savetty(void) { return(*(int *)0); } #undef resetty_sp int resetty_sp( SCREEN *sp) { return(*(int *)0); } #undef resetty int resetty(void) { return(*(int *)0); } /* ./tty/lib_twait.c */ #undef _nc_timed_wait int _nc_timed_wait( SCREEN *sp, int mode, int milliseconds, int *timeleft) { return(*(int *)0); } /* ./tinfo/name_match.c */ #undef _nc_first_name char *_nc_first_name( const char *const sp) { return(*(char **)0); } #undef _nc_name_match int _nc_name_match( const char *const namelst, const char *const name, const char *const delim) { return(*(int *)0); } /* ./names.c */ #undef _nc_boolnames const char *const *_nc_boolnames(void) { return(*(const char **)0); } #undef _nc_boolfnames const char *const *_nc_boolfnames(void) { return(*(const char **)0); } #undef _nc_numnames const char *const *_nc_numnames(void) { return(*(const char **)0); } #undef _nc_numfnames const char *const *_nc_numfnames(void) { return(*(const char **)0); } #undef _nc_strnames const char *const *_nc_strnames(void) { return(*(const char **)0); } #undef _nc_strfnames const char *const *_nc_strfnames(void) { return(*(const char **)0); } /* ./tinfo/obsolete.c */ #undef _nc_set_buffer_sp void _nc_set_buffer_sp( SCREEN *sp, FILE *ofp, int buffered) { /* void */ } #undef _nc_set_buffer void _nc_set_buffer( FILE *ofp, int buffered) { /* void */ } /* ./tinfo/read_entry.c */ #undef _nc_init_termtype void _nc_init_termtype( TERMTYPE *const tp) { /* void */ } #undef _nc_read_termtype int _nc_read_termtype( TERMTYPE *ptr, char *buffer, int limit) { return(*(int *)0); } #undef _nc_read_file_entry int _nc_read_file_entry( const char *const filename, TERMTYPE *ptr) { return(*(int *)0); } #undef _nc_read_entry int _nc_read_entry( const char *const name, char *const filename, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/read_termcap.c */ #undef _nc_read_termcap void _nc_read_termcap(void) { /* void */ } /* ./tinfo/strings.c */ #undef _nc_str_init string_desc *_nc_str_init( string_desc *dst, char *src, size_t len) { return(*(string_desc **)0); } #undef _nc_str_null string_desc *_nc_str_null( string_desc *dst, size_t len) { return(*(string_desc **)0); } #undef _nc_str_copy string_desc *_nc_str_copy( string_desc *dst, string_desc *src) { return(*(string_desc **)0); } #undef _nc_safe_strcat NCURSES_BOOL _nc_safe_strcat( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_safe_strcpy NCURSES_BOOL _nc_safe_strcpy( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } /* ./trace/trace_buf.c */ #undef _nc_trace_buf char *_nc_trace_buf( int bufnum, size_t want) { return(*(char **)0); } #undef _nc_trace_bufcat char *_nc_trace_bufcat( int bufnum, const char *value) { return(*(char **)0); } /* ./trace/trace_tries.c */ #undef _nc_trace_tries void _nc_trace_tries( TRIES *tree) { /* void */ } /* ./base/tries.c */ #undef _nc_expand_try char *_nc_expand_try( TRIES *tree, unsigned code, int *count, size_t len) { return(*(char **)0); } #undef _nc_remove_key int _nc_remove_key( TRIES **tree, unsigned code) { return(*(int *)0); } #undef _nc_remove_string int _nc_remove_string( TRIES **tree, const char *string) { return(*(int *)0); } /* ./tinfo/trim_sgr0.c */ #undef _nc_trim_sgr0 char *_nc_trim_sgr0( TERMTYPE *tp) { return(*(char **)0); } /* ./unctrl.c */ #undef unctrl_sp const char *unctrl_sp( SCREEN *sp, chtype ch) { return(*(const char **)0); } #undef unctrl const char *unctrl( chtype ch) { return(*(const char **)0); } /* ./trace/visbuf.c */ #undef _nc_visbuf2 const char *_nc_visbuf2( int bufnum, const char *buf) { return(*(const char **)0); } #undef _nc_visbuf const char *_nc_visbuf( const char *buf) { return(*(const char **)0); } #undef _nc_visbufn const char *_nc_visbufn( const char *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf2 const char *_nc_viscbuf2( int bufnum, const chtype *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf const char *_nc_viscbuf( const chtype *buf, int len) { return(*(const char **)0); } /* ./base/define_key.c */ #undef define_key_sp int define_key_sp( SCREEN *sp, const char *str, int keycode) { return(*(int *)0); } #undef define_key int define_key( const char *str, int keycode) { return(*(int *)0); } /* ./tinfo/hashed_db.c */ #undef _nc_hashed_db void _nc_hashed_db(void) { /* void */ } /* ./base/key_defined.c */ #undef key_defined_sp int key_defined_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef key_defined int key_defined( const char *str) { return(*(int *)0); } /* ./base/keybound.c */ #undef keybound_sp char *keybound_sp( SCREEN *sp, int code, int count) { return(*(char **)0); } #undef keybound char *keybound( int code, int count) { return(*(char **)0); } /* ./base/keyok.c */ #undef keyok_sp int keyok_sp( SCREEN *sp, int c, NCURSES_BOOL flag) { return(*(int *)0); } #undef keyok int keyok( int c, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/version.c */ #undef curses_version const char *curses_version(void) { return(*(const char **)0); } ncurses-6.0-20160213/ncurses/llib-lncursesw0000644000175100001440000024202512563715437017050 0ustar tomusers/**************************************************************************** * Copyright (c) 2001-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2001-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tty/hardscroll.c */ #include #undef _nc_oldnums int *_nc_oldnums; #undef _nc_scroll_optimize_sp void _nc_scroll_optimize_sp( SCREEN *sp) { /* void */ } #undef _nc_scroll_optimize void _nc_scroll_optimize(void) { /* void */ } #undef _nc_linedump_sp void _nc_linedump_sp( SCREEN *sp) { /* void */ } #undef _nc_linedump void _nc_linedump(void) { /* void */ } /* ./tty/hashmap.c */ #undef _nc_hash_map_sp void _nc_hash_map_sp( SCREEN *sp) { /* void */ } #undef _nc_hash_map void _nc_hash_map(void) { /* void */ } #undef _nc_make_oldhash_sp void _nc_make_oldhash_sp( SCREEN *sp, int i) { /* void */ } #undef _nc_make_oldhash void _nc_make_oldhash( int i) { /* void */ } #undef _nc_scroll_oldhash_sp void _nc_scroll_oldhash_sp( SCREEN *sp, int n, int top, int bot) { /* void */ } #undef _nc_scroll_oldhash void _nc_scroll_oldhash( int n, int top, int bot) { /* void */ } /* ./base/lib_addch.c */ #undef _nc_render cchar_t _nc_render( WINDOW *win, cchar_t ch) { return(*(cchar_t *)0); } #undef _nc_build_wch int _nc_build_wch( WINDOW *win, cchar_t *ch) { return(*(int *)0); } #undef _nc_waddch_nosync int _nc_waddch_nosync( WINDOW *win, const cchar_t c) { return(*(int *)0); } #undef waddch int waddch( WINDOW *win, const chtype ch) { return(*(int *)0); } #undef wechochar int wechochar( WINDOW *win, const chtype ch) { return(*(int *)0); } /* ./base/lib_addstr.c */ #undef waddnstr int waddnstr( WINDOW *win, const char *astr, int n) { return(*(int *)0); } #undef waddchnstr int waddchnstr( WINDOW *win, const chtype *astr, int n) { return(*(int *)0); } #undef _nc_wchstrlen int _nc_wchstrlen( const cchar_t *s) { return(*(int *)0); } #undef wadd_wchnstr int wadd_wchnstr( WINDOW *win, const cchar_t *astr, int n) { return(*(int *)0); } #undef waddnwstr int waddnwstr( WINDOW *win, const wchar_t *str, int n) { return(*(int *)0); } /* ./base/lib_beep.c */ #undef beep_sp int beep_sp( SCREEN *sp) { return(*(int *)0); } #undef beep int beep(void) { return(*(int *)0); } /* ./base/lib_bkgd.c */ #undef wbkgrndset void wbkgrndset( WINDOW *win, const cchar_t *ch) { /* void */ } #undef wbkgdset void wbkgdset( WINDOW *win, chtype ch) { /* void */ } #undef wbkgrnd int wbkgrnd( WINDOW *win, const cchar_t *ch) { return(*(int *)0); } #undef wbkgd int wbkgd( WINDOW *win, chtype ch) { return(*(int *)0); } /* ./base/lib_box.c */ #undef wborder int wborder( WINDOW *win, chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br) { return(*(int *)0); } /* ./base/lib_chgat.c */ #undef wchgat int wchgat( WINDOW *win, int n, attr_t attr, short color, const void *opts) { return(*(int *)0); } /* ./base/lib_clear.c */ #undef wclear int wclear( WINDOW *win) { return(*(int *)0); } /* ./base/lib_clearok.c */ #undef clearok int clearok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_clrbot.c */ #undef wclrtobot int wclrtobot( WINDOW *win) { return(*(int *)0); } /* ./base/lib_clreol.c */ #undef wclrtoeol int wclrtoeol( WINDOW *win) { return(*(int *)0); } /* ./base/lib_color.c */ #undef COLOR_PAIRS int COLOR_PAIRS; #undef COLORS int COLORS; #undef _nc_reset_colors_sp NCURSES_BOOL _nc_reset_colors_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef _nc_reset_colors NCURSES_BOOL _nc_reset_colors(void) { return(*(NCURSES_BOOL *)0); } #undef start_color_sp int start_color_sp( SCREEN *sp) { return(*(int *)0); } #undef start_color int start_color(void) { return(*(int *)0); } #undef init_pair_sp int init_pair_sp( SCREEN *sp, short pair, short f, short b) { return(*(int *)0); } #undef init_pair int init_pair( short pair, short f, short b) { return(*(int *)0); } #undef init_color_sp int init_color_sp( SCREEN *sp, short color, short r, short g, short b) { return(*(int *)0); } #undef init_color int init_color( short color, short r, short g, short b) { return(*(int *)0); } #undef can_change_color_sp NCURSES_BOOL can_change_color_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef can_change_color NCURSES_BOOL can_change_color(void) { return(*(NCURSES_BOOL *)0); } #undef has_colors_sp NCURSES_BOOL has_colors_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_colors NCURSES_BOOL has_colors(void) { return(*(NCURSES_BOOL *)0); } #undef color_content_sp int color_content_sp( SCREEN *sp, short color, short *r, short *g, short *b) { return(*(int *)0); } #undef color_content int color_content( short color, short *r, short *g, short *b) { return(*(int *)0); } #undef pair_content_sp int pair_content_sp( SCREEN *sp, short pair, short *f, short *b) { return(*(int *)0); } #undef pair_content int pair_content( short pair, short *f, short *b) { return(*(int *)0); } #undef _nc_do_color_sp void _nc_do_color_sp( SCREEN *sp, int old_pair, int pair, int reverse, NCURSES_OUTC_sp outc) { /* void */ } #undef _nc_do_color void _nc_do_color( int old_pair, int pair, int reverse, NCURSES_OUTC outc) { /* void */ } /* ./base/lib_colorset.c */ #undef wcolor_set int wcolor_set( WINDOW *win, short color_pair_number, void *opts) { return(*(int *)0); } /* ./base/lib_delch.c */ #undef wdelch int wdelch( WINDOW *win) { return(*(int *)0); } /* ./base/lib_delwin.c */ #undef delwin int delwin( WINDOW *win) { return(*(int *)0); } /* ./base/lib_echo.c */ #undef echo_sp int echo_sp( SCREEN *sp) { return(*(int *)0); } #undef echo int echo(void) { return(*(int *)0); } #undef noecho_sp int noecho_sp( SCREEN *sp) { return(*(int *)0); } #undef noecho int noecho(void) { return(*(int *)0); } /* ./base/lib_endwin.c */ #undef endwin_sp int endwin_sp( SCREEN *sp) { return(*(int *)0); } #undef endwin int endwin(void) { return(*(int *)0); } /* ./base/lib_erase.c */ #undef werase int werase( WINDOW *win) { return(*(int *)0); } /* ./base/lib_flash.c */ #undef flash_sp int flash_sp( SCREEN *sp) { return(*(int *)0); } #undef flash int flash(void) { return(*(int *)0); } /* ./lib_gen.c */ #undef addch int (addch)( const chtype z) { return(*(int *)0); } #undef addchnstr int (addchnstr)( const chtype *a1, int z) { return(*(int *)0); } #undef addchstr int (addchstr)( const chtype *z) { return(*(int *)0); } #undef addnstr int (addnstr)( const char *a1, int z) { return(*(int *)0); } #undef addstr int (addstr)( const char *z) { return(*(int *)0); } #undef attroff int (attroff)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attron int (attron)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attrset int (attrset)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attr_get int (attr_get)( attr_t *a1, short *a2, void *z) { return(*(int *)0); } #undef attr_off int (attr_off)( attr_t a1, void *z) { return(*(int *)0); } #undef attr_on int (attr_on)( attr_t a1, void *z) { return(*(int *)0); } #undef attr_set int (attr_set)( attr_t a1, short a2, void *z) { return(*(int *)0); } #undef bkgd int (bkgd)( chtype z) { return(*(int *)0); } #undef bkgdset void (bkgdset)( chtype z) { /* void */ } #undef border int (border)( chtype a1, chtype a2, chtype a3, chtype a4, chtype a5, chtype a6, chtype a7, chtype z) { return(*(int *)0); } #undef box int (box)( WINDOW *a1, chtype a2, chtype z) { return(*(int *)0); } #undef chgat int (chgat)( int a1, attr_t a2, short a3, const void *z) { return(*(int *)0); } #undef clear int (clear)(void) { return(*(int *)0); } #undef clrtobot int (clrtobot)(void) { return(*(int *)0); } #undef clrtoeol int (clrtoeol)(void) { return(*(int *)0); } #undef color_set int (color_set)( short a1, void *z) { return(*(int *)0); } #undef COLOR_PAIR int (COLOR_PAIR)( int z) { return(*(int *)0); } #undef delch int (delch)(void) { return(*(int *)0); } #undef deleteln int (deleteln)(void) { return(*(int *)0); } #undef echochar int (echochar)( const chtype z) { return(*(int *)0); } #undef erase int (erase)(void) { return(*(int *)0); } #undef getbkgd chtype (getbkgd)( WINDOW *z) { return(*(chtype *)0); } #undef getch int (getch)(void) { return(*(int *)0); } #undef getnstr int (getnstr)( char *a1, int z) { return(*(int *)0); } #undef getstr int (getstr)( char *z) { return(*(int *)0); } #undef hline int (hline)( chtype a1, int z) { return(*(int *)0); } #undef inch chtype (inch)(void) { return(*(chtype *)0); } #undef inchnstr int (inchnstr)( chtype *a1, int z) { return(*(int *)0); } #undef inchstr int (inchstr)( chtype *z) { return(*(int *)0); } #undef innstr int (innstr)( char *a1, int z) { return(*(int *)0); } #undef insch int (insch)( chtype z) { return(*(int *)0); } #undef insdelln int (insdelln)( int z) { return(*(int *)0); } #undef insertln int (insertln)(void) { return(*(int *)0); } #undef insnstr int (insnstr)( const char *a1, int z) { return(*(int *)0); } #undef insstr int (insstr)( const char *z) { return(*(int *)0); } #undef instr int (instr)( char *z) { return(*(int *)0); } #undef move int (move)( int a1, int z) { return(*(int *)0); } #undef mvaddch int (mvaddch)( int a1, int a2, const chtype z) { return(*(int *)0); } #undef mvaddchnstr int (mvaddchnstr)( int a1, int a2, const chtype *a3, int z) { return(*(int *)0); } #undef mvaddchstr int (mvaddchstr)( int a1, int a2, const chtype *z) { return(*(int *)0); } #undef mvaddnstr int (mvaddnstr)( int a1, int a2, const char *a3, int z) { return(*(int *)0); } #undef mvaddstr int (mvaddstr)( int a1, int a2, const char *z) { return(*(int *)0); } #undef mvchgat int (mvchgat)( int a1, int a2, int a3, attr_t a4, short a5, const void *z) { return(*(int *)0); } #undef mvdelch int (mvdelch)( int a1, int z) { return(*(int *)0); } #undef mvgetch int (mvgetch)( int a1, int z) { return(*(int *)0); } #undef mvgetnstr int (mvgetnstr)( int a1, int a2, char *a3, int z) { return(*(int *)0); } #undef mvgetstr int (mvgetstr)( int a1, int a2, char *z) { return(*(int *)0); } #undef mvhline int (mvhline)( int a1, int a2, chtype a3, int z) { return(*(int *)0); } #undef mvinch chtype (mvinch)( int a1, int z) { return(*(chtype *)0); } #undef mvinchnstr int (mvinchnstr)( int a1, int a2, chtype *a3, int z) { return(*(int *)0); } #undef mvinchstr int (mvinchstr)( int a1, int a2, chtype *z) { return(*(int *)0); } #undef mvinnstr int (mvinnstr)( int a1, int a2, char *a3, int z) { return(*(int *)0); } #undef mvinsch int (mvinsch)( int a1, int a2, chtype z) { return(*(int *)0); } #undef mvinsnstr int (mvinsnstr)( int a1, int a2, const char *a3, int z) { return(*(int *)0); } #undef mvinsstr int (mvinsstr)( int a1, int a2, const char *z) { return(*(int *)0); } #undef mvinstr int (mvinstr)( int a1, int a2, char *z) { return(*(int *)0); } #undef mvvline int (mvvline)( int a1, int a2, chtype a3, int z) { return(*(int *)0); } #undef mvwaddch int (mvwaddch)( WINDOW *a1, int a2, int a3, const chtype z) { return(*(int *)0); } #undef mvwaddchnstr int (mvwaddchnstr)( WINDOW *a1, int a2, int a3, const chtype *a4, int z) { return(*(int *)0); } #undef mvwaddchstr int (mvwaddchstr)( WINDOW *a1, int a2, int a3, const chtype *z) { return(*(int *)0); } #undef mvwaddnstr int (mvwaddnstr)( WINDOW *a1, int a2, int a3, const char *a4, int z) { return(*(int *)0); } #undef mvwaddstr int (mvwaddstr)( WINDOW *a1, int a2, int a3, const char *z) { return(*(int *)0); } #undef mvwchgat int (mvwchgat)( WINDOW *a1, int a2, int a3, int a4, attr_t a5, short a6, const void *z) { return(*(int *)0); } #undef mvwdelch int (mvwdelch)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef mvwgetch int (mvwgetch)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef mvwgetnstr int (mvwgetnstr)( WINDOW *a1, int a2, int a3, char *a4, int z) { return(*(int *)0); } #undef mvwgetstr int (mvwgetstr)( WINDOW *a1, int a2, int a3, char *z) { return(*(int *)0); } #undef mvwhline int (mvwhline)( WINDOW *a1, int a2, int a3, chtype a4, int z) { return(*(int *)0); } #undef mvwinch chtype (mvwinch)( WINDOW *a1, int a2, int z) { return(*(chtype *)0); } #undef mvwinchnstr int (mvwinchnstr)( WINDOW *a1, int a2, int a3, chtype *a4, int z) { return(*(int *)0); } #undef mvwinchstr int (mvwinchstr)( WINDOW *a1, int a2, int a3, chtype *z) { return(*(int *)0); } #undef mvwinnstr int (mvwinnstr)( WINDOW *a1, int a2, int a3, char *a4, int z) { return(*(int *)0); } #undef mvwinsch int (mvwinsch)( WINDOW *a1, int a2, int a3, chtype z) { return(*(int *)0); } #undef mvwinsnstr int (mvwinsnstr)( WINDOW *a1, int a2, int a3, const char *a4, int z) { return(*(int *)0); } #undef mvwinsstr int (mvwinsstr)( WINDOW *a1, int a2, int a3, const char *z) { return(*(int *)0); } #undef mvwinstr int (mvwinstr)( WINDOW *a1, int a2, int a3, char *z) { return(*(int *)0); } #undef mvwvline int (mvwvline)( WINDOW *a1, int a2, int a3, chtype a4, int z) { return(*(int *)0); } #undef PAIR_NUMBER int (PAIR_NUMBER)( int z) { return(*(int *)0); } #undef redrawwin int (redrawwin)( WINDOW *z) { return(*(int *)0); } #undef refresh int (refresh)(void) { return(*(int *)0); } #undef scrl int (scrl)( int z) { return(*(int *)0); } #undef scroll int (scroll)( WINDOW *z) { return(*(int *)0); } #undef setscrreg int (setscrreg)( int a1, int z) { return(*(int *)0); } #undef slk_attr_off int (slk_attr_off)( const attr_t a1, void *z) { return(*(int *)0); } #undef slk_attr_on int (slk_attr_on)( attr_t a1, void *z) { return(*(int *)0); } #undef standout int (standout)(void) { return(*(int *)0); } #undef standend int (standend)(void) { return(*(int *)0); } #undef timeout void (timeout)( int z) { /* void */ } #undef touchline int (touchline)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef touchwin int (touchwin)( WINDOW *z) { return(*(int *)0); } #undef untouchwin int (untouchwin)( WINDOW *z) { return(*(int *)0); } #undef vline int (vline)( chtype a1, int z) { return(*(int *)0); } #undef vw_printw int (vw_printw)( WINDOW *a1, const char *a2, va_list z) { return(*(int *)0); } #undef vw_scanw int (vw_scanw)( WINDOW *a1, const char *a2, va_list z) { return(*(int *)0); } #undef waddchstr int (waddchstr)( WINDOW *a1, const chtype *z) { return(*(int *)0); } #undef waddstr int (waddstr)( WINDOW *a1, const char *z) { return(*(int *)0); } #undef wattron int (wattron)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattroff int (wattroff)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattrset int (wattrset)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattr_get int (wattr_get)( WINDOW *a1, attr_t *a2, short *a3, void *z) { return(*(int *)0); } #undef wattr_set int (wattr_set)( WINDOW *a1, attr_t a2, short a3, void *z) { return(*(int *)0); } #undef wdeleteln int (wdeleteln)( WINDOW *z) { return(*(int *)0); } #undef wgetstr int (wgetstr)( WINDOW *a1, char *z) { return(*(int *)0); } #undef winchstr int (winchstr)( WINDOW *a1, chtype *z) { return(*(int *)0); } #undef winsertln int (winsertln)( WINDOW *z) { return(*(int *)0); } #undef winsstr int (winsstr)( WINDOW *a1, const char *z) { return(*(int *)0); } #undef winstr int (winstr)( WINDOW *a1, char *z) { return(*(int *)0); } #undef wstandout int (wstandout)( WINDOW *z) { return(*(int *)0); } #undef wstandend int (wstandend)( WINDOW *z) { return(*(int *)0); } #undef getattrs int (getattrs)( const WINDOW *z) { return(*(int *)0); } #undef getcurx int (getcurx)( const WINDOW *z) { return(*(int *)0); } #undef getcury int (getcury)( const WINDOW *z) { return(*(int *)0); } #undef getbegx int (getbegx)( const WINDOW *z) { return(*(int *)0); } #undef getbegy int (getbegy)( const WINDOW *z) { return(*(int *)0); } #undef getmaxx int (getmaxx)( const WINDOW *z) { return(*(int *)0); } #undef getmaxy int (getmaxy)( const WINDOW *z) { return(*(int *)0); } #undef getparx int (getparx)( const WINDOW *z) { return(*(int *)0); } #undef getpary int (getpary)( const WINDOW *z) { return(*(int *)0); } #undef wgetparent WINDOW *(wgetparent)( const WINDOW *z) { return(*(WINDOW **)0); } #undef is_cleared NCURSES_BOOL (is_cleared)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_idcok NCURSES_BOOL (is_idcok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_idlok NCURSES_BOOL (is_idlok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_immedok NCURSES_BOOL (is_immedok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_keypad NCURSES_BOOL (is_keypad)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_leaveok NCURSES_BOOL (is_leaveok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_nodelay NCURSES_BOOL (is_nodelay)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_notimeout NCURSES_BOOL (is_notimeout)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_pad NCURSES_BOOL (is_pad)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_scrollok NCURSES_BOOL (is_scrollok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_subwin NCURSES_BOOL (is_subwin)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_syncok NCURSES_BOOL (is_syncok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef wgetdelay int (wgetdelay)( const WINDOW *z) { return(*(int *)0); } #undef wgetscrreg int (wgetscrreg)( const WINDOW *a1, int *a2, int *z) { return(*(int *)0); } #undef add_wch int (add_wch)( const cchar_t *z) { return(*(int *)0); } #undef add_wchnstr int (add_wchnstr)( const cchar_t *a1, int z) { return(*(int *)0); } #undef add_wchstr int (add_wchstr)( const cchar_t *z) { return(*(int *)0); } #undef addnwstr int (addnwstr)( const wchar_t *a1, int z) { return(*(int *)0); } #undef addwstr int (addwstr)( const wchar_t *z) { return(*(int *)0); } #undef bkgrnd int (bkgrnd)( const cchar_t *z) { return(*(int *)0); } #undef bkgrndset void (bkgrndset)( const cchar_t *z) { /* void */ } #undef border_set int (border_set)( const cchar_t *a1, const cchar_t *a2, const cchar_t *a3, const cchar_t *a4, const cchar_t *a5, const cchar_t *a6, const cchar_t *a7, const cchar_t *z) { return(*(int *)0); } #undef box_set int (box_set)( WINDOW *a1, const cchar_t *a2, const cchar_t *z) { return(*(int *)0); } #undef echo_wchar int (echo_wchar)( const cchar_t *z) { return(*(int *)0); } #undef get_wch int (get_wch)( wint_t *z) { return(*(int *)0); } #undef get_wstr int (get_wstr)( wint_t *z) { return(*(int *)0); } #undef getbkgrnd int (getbkgrnd)( cchar_t *z) { return(*(int *)0); } #undef getn_wstr int (getn_wstr)( wint_t *a1, int z) { return(*(int *)0); } #undef hline_set int (hline_set)( const cchar_t *a1, int z) { return(*(int *)0); } #undef in_wch int (in_wch)( cchar_t *z) { return(*(int *)0); } #undef in_wchnstr int (in_wchnstr)( cchar_t *a1, int z) { return(*(int *)0); } #undef in_wchstr int (in_wchstr)( cchar_t *z) { return(*(int *)0); } #undef innwstr int (innwstr)( wchar_t *a1, int z) { return(*(int *)0); } #undef ins_nwstr int (ins_nwstr)( const wchar_t *a1, int z) { return(*(int *)0); } #undef ins_wch int (ins_wch)( const cchar_t *z) { return(*(int *)0); } #undef ins_wstr int (ins_wstr)( const wchar_t *z) { return(*(int *)0); } #undef inwstr int (inwstr)( wchar_t *z) { return(*(int *)0); } #undef mvadd_wch int (mvadd_wch)( int a1, int a2, const cchar_t *z) { return(*(int *)0); } #undef mvadd_wchnstr int (mvadd_wchnstr)( int a1, int a2, const cchar_t *a3, int z) { return(*(int *)0); } #undef mvadd_wchstr int (mvadd_wchstr)( int a1, int a2, const cchar_t *z) { return(*(int *)0); } #undef mvaddnwstr int (mvaddnwstr)( int a1, int a2, const wchar_t *a3, int z) { return(*(int *)0); } #undef mvaddwstr int (mvaddwstr)( int a1, int a2, const wchar_t *z) { return(*(int *)0); } #undef mvget_wch int (mvget_wch)( int a1, int a2, wint_t *z) { return(*(int *)0); } #undef mvget_wstr int (mvget_wstr)( int a1, int a2, wint_t *z) { return(*(int *)0); } #undef mvgetn_wstr int (mvgetn_wstr)( int a1, int a2, wint_t *a3, int z) { return(*(int *)0); } #undef mvhline_set int (mvhline_set)( int a1, int a2, const cchar_t *a3, int z) { return(*(int *)0); } #undef mvin_wch int (mvin_wch)( int a1, int a2, cchar_t *z) { return(*(int *)0); } #undef mvin_wchnstr int (mvin_wchnstr)( int a1, int a2, cchar_t *a3, int z) { return(*(int *)0); } #undef mvin_wchstr int (mvin_wchstr)( int a1, int a2, cchar_t *z) { return(*(int *)0); } #undef mvinnwstr int (mvinnwstr)( int a1, int a2, wchar_t *a3, int z) { return(*(int *)0); } #undef mvins_nwstr int (mvins_nwstr)( int a1, int a2, const wchar_t *a3, int z) { return(*(int *)0); } #undef mvins_wch int (mvins_wch)( int a1, int a2, const cchar_t *z) { return(*(int *)0); } #undef mvins_wstr int (mvins_wstr)( int a1, int a2, const wchar_t *z) { return(*(int *)0); } #undef mvinwstr int (mvinwstr)( int a1, int a2, wchar_t *z) { return(*(int *)0); } #undef mvvline_set int (mvvline_set)( int a1, int a2, const cchar_t *a3, int z) { return(*(int *)0); } #undef mvwadd_wch int (mvwadd_wch)( WINDOW *a1, int a2, int a3, const cchar_t *z) { return(*(int *)0); } #undef mvwadd_wchnstr int (mvwadd_wchnstr)( WINDOW *a1, int a2, int a3, const cchar_t *a4, int z) { return(*(int *)0); } #undef mvwadd_wchstr int (mvwadd_wchstr)( WINDOW *a1, int a2, int a3, const cchar_t *z) { return(*(int *)0); } #undef mvwaddnwstr int (mvwaddnwstr)( WINDOW *a1, int a2, int a3, const wchar_t *a4, int z) { return(*(int *)0); } #undef mvwaddwstr int (mvwaddwstr)( WINDOW *a1, int a2, int a3, const wchar_t *z) { return(*(int *)0); } #undef mvwget_wch int (mvwget_wch)( WINDOW *a1, int a2, int a3, wint_t *z) { return(*(int *)0); } #undef mvwget_wstr int (mvwget_wstr)( WINDOW *a1, int a2, int a3, wint_t *z) { return(*(int *)0); } #undef mvwgetn_wstr int (mvwgetn_wstr)( WINDOW *a1, int a2, int a3, wint_t *a4, int z) { return(*(int *)0); } #undef mvwhline_set int (mvwhline_set)( WINDOW *a1, int a2, int a3, const cchar_t *a4, int z) { return(*(int *)0); } #undef mvwin_wch int (mvwin_wch)( WINDOW *a1, int a2, int a3, cchar_t *z) { return(*(int *)0); } #undef mvwin_wchnstr int (mvwin_wchnstr)( WINDOW *a1, int a2, int a3, cchar_t *a4, int z) { return(*(int *)0); } #undef mvwin_wchstr int (mvwin_wchstr)( WINDOW *a1, int a2, int a3, cchar_t *z) { return(*(int *)0); } #undef mvwinnwstr int (mvwinnwstr)( WINDOW *a1, int a2, int a3, wchar_t *a4, int z) { return(*(int *)0); } #undef mvwins_nwstr int (mvwins_nwstr)( WINDOW *a1, int a2, int a3, const wchar_t *a4, int z) { return(*(int *)0); } #undef mvwins_wch int (mvwins_wch)( WINDOW *a1, int a2, int a3, const cchar_t *z) { return(*(int *)0); } #undef mvwins_wstr int (mvwins_wstr)( WINDOW *a1, int a2, int a3, const wchar_t *z) { return(*(int *)0); } #undef mvwinwstr int (mvwinwstr)( WINDOW *a1, int a2, int a3, wchar_t *z) { return(*(int *)0); } #undef mvwvline_set int (mvwvline_set)( WINDOW *a1, int a2, int a3, const cchar_t *a4, int z) { return(*(int *)0); } #undef vline_set int (vline_set)( const cchar_t *a1, int z) { return(*(int *)0); } #undef wadd_wchstr int (wadd_wchstr)( WINDOW *a1, const cchar_t *z) { return(*(int *)0); } #undef waddwstr int (waddwstr)( WINDOW *a1, const wchar_t *z) { return(*(int *)0); } #undef wget_wstr int (wget_wstr)( WINDOW *a1, wint_t *z) { return(*(int *)0); } #undef wgetbkgrnd int (wgetbkgrnd)( WINDOW *a1, cchar_t *z) { return(*(int *)0); } #undef win_wchstr int (win_wchstr)( WINDOW *a1, cchar_t *z) { return(*(int *)0); } #undef wins_wstr int (wins_wstr)( WINDOW *a1, const wchar_t *z) { return(*(int *)0); } #undef mouse_trafo NCURSES_BOOL (mouse_trafo)( int *a1, int *a2, NCURSES_BOOL z) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_getch.c */ #undef ESCDELAY int ESCDELAY; #undef set_escdelay_sp int set_escdelay_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_escdelay int set_escdelay( int value) { return(*(int *)0); } #undef get_escdelay_sp int get_escdelay_sp( SCREEN *sp) { return(*(int *)0); } #undef get_escdelay int get_escdelay(void) { return(*(int *)0); } #undef _nc_wgetch int _nc_wgetch( WINDOW *win, int *result, int use_meta) { return(*(int *)0); } #undef wgetch int wgetch( WINDOW *win) { return(*(int *)0); } /* ./base/lib_getstr.c */ #undef wgetnstr int wgetnstr( WINDOW *win, char *str, int maxlen) { return(*(int *)0); } /* ./base/lib_hline.c */ #undef whline int whline( WINDOW *win, chtype ch, int n) { return(*(int *)0); } /* ./base/lib_immedok.c */ #undef immedok void immedok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } /* ./base/lib_inchstr.c */ #undef winchnstr int winchnstr( WINDOW *win, chtype *str, int n) { return(*(int *)0); } /* ./base/lib_initscr.c */ #undef initscr WINDOW *initscr(void) { return(*(WINDOW **)0); } /* ./base/lib_insch.c */ #undef _nc_insert_ch int _nc_insert_ch( SCREEN *sp, WINDOW *win, chtype ch) { return(*(int *)0); } #undef winsch int winsch( WINDOW *win, chtype c) { return(*(int *)0); } /* ./base/lib_insdel.c */ #undef winsdelln int winsdelln( WINDOW *win, int n) { return(*(int *)0); } /* ./base/lib_insnstr.c */ #undef winsnstr int winsnstr( WINDOW *win, const char *s, int n) { return(*(int *)0); } /* ./base/lib_instr.c */ #undef winnstr int winnstr( WINDOW *win, char *str, int n) { return(*(int *)0); } /* ./base/lib_isendwin.c */ #undef isendwin_sp NCURSES_BOOL isendwin_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef isendwin NCURSES_BOOL isendwin(void) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_leaveok.c */ #undef leaveok int leaveok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_mouse.c */ #undef getmouse_sp int getmouse_sp( SCREEN *sp, MEVENT *aevent) { return(*(int *)0); } #undef getmouse int getmouse( MEVENT *aevent) { return(*(int *)0); } #undef ungetmouse_sp int ungetmouse_sp( SCREEN *sp, MEVENT *aevent) { return(*(int *)0); } #undef ungetmouse int ungetmouse( MEVENT *aevent) { return(*(int *)0); } #undef mousemask_sp mmask_t mousemask_sp( SCREEN *sp, mmask_t newmask, mmask_t *oldmask) { return(*(mmask_t *)0); } #undef mousemask mmask_t mousemask( mmask_t newmask, mmask_t *oldmask) { return(*(mmask_t *)0); } #undef wenclose NCURSES_BOOL wenclose( const WINDOW *win, int y, int x) { return(*(NCURSES_BOOL *)0); } #undef mouseinterval_sp int mouseinterval_sp( SCREEN *sp, int maxclick) { return(*(int *)0); } #undef mouseinterval int mouseinterval( int maxclick) { return(*(int *)0); } #undef _nc_has_mouse NCURSES_BOOL _nc_has_mouse( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_mouse_sp NCURSES_BOOL has_mouse_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_mouse NCURSES_BOOL has_mouse(void) { return(*(NCURSES_BOOL *)0); } #undef wmouse_trafo NCURSES_BOOL wmouse_trafo( const WINDOW *win, int *pY, int *pX, NCURSES_BOOL to_screen) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_move.c */ #undef wmove int wmove( WINDOW *win, int y, int x) { return(*(int *)0); } /* ./tty/lib_mvcur.c */ #undef _nc_msec_cost_sp int _nc_msec_cost_sp( SCREEN *sp, const char *const cap, int affcnt) { return(*(int *)0); } #undef _nc_msec_cost int _nc_msec_cost( const char *const cap, int affcnt) { return(*(int *)0); } #undef _nc_mvcur_resume_sp void _nc_mvcur_resume_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_resume void _nc_mvcur_resume(void) { /* void */ } #undef _nc_mvcur_init_sp void _nc_mvcur_init_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_init void _nc_mvcur_init(void) { /* void */ } #undef _nc_mvcur_wrap_sp void _nc_mvcur_wrap_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_wrap void _nc_mvcur_wrap(void) { /* void */ } #undef _nc_mvcur_sp int _nc_mvcur_sp( SCREEN *sp, int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef _nc_mvcur int _nc_mvcur( int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef mvcur_sp int mvcur_sp( SCREEN *sp, int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef mvcur int mvcur( int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef _nc_optimize_enable int _nc_optimize_enable; /* ./base/lib_mvwin.c */ #undef mvwin int mvwin( WINDOW *win, int by, int bx) { return(*(int *)0); } /* ./base/lib_newterm.c */ #undef filter_sp void filter_sp( SCREEN *sp) { /* void */ } #undef filter void filter(void) { /* void */ } #undef nofilter_sp void nofilter_sp( SCREEN *sp) { /* void */ } #undef nofilter void nofilter(void) { /* void */ } #undef newterm_sp SCREEN *newterm_sp( SCREEN *sp, const char *name, FILE *ofp, FILE *ifp) { return(*(SCREEN **)0); } #undef newterm SCREEN *newterm( const char *name, FILE *ofp, FILE *ifp) { return(*(SCREEN **)0); } /* ./base/lib_newwin.c */ #undef _nc_freewin int _nc_freewin( WINDOW *win) { return(*(int *)0); } #undef newwin_sp WINDOW *newwin_sp( SCREEN *sp, int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef newwin WINDOW *newwin( int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef derwin WINDOW *derwin( WINDOW *orig, int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef subwin WINDOW *subwin( WINDOW *w, int l, int c, int y, int x) { return(*(WINDOW **)0); } #undef _nc_makenew_sp WINDOW *_nc_makenew_sp( SCREEN *sp, int num_lines, int num_columns, int begy, int begx, int flags) { return(*(WINDOW **)0); } #undef _nc_curscr_of WINDOW *_nc_curscr_of( SCREEN *sp) { return(*(WINDOW **)0); } #undef _nc_newscr_of WINDOW *_nc_newscr_of( SCREEN *sp) { return(*(WINDOW **)0); } #undef _nc_stdscr_of WINDOW *_nc_stdscr_of( SCREEN *sp) { return(*(WINDOW **)0); } /* ./base/lib_nl.c */ #undef nl_sp int nl_sp( SCREEN *sp) { return(*(int *)0); } #undef nl int nl(void) { return(*(int *)0); } #undef nonl_sp int nonl_sp( SCREEN *sp) { return(*(int *)0); } #undef nonl int nonl(void) { return(*(int *)0); } /* ./base/lib_overlay.c */ #undef overlay int overlay( const WINDOW *win1, WINDOW *win2) { return(*(int *)0); } #undef overwrite int overwrite( const WINDOW *win1, WINDOW *win2) { return(*(int *)0); } #undef copywin int copywin( const WINDOW *src, WINDOW *dst, int sminrow, int smincol, int dminrow, int dmincol, int dmaxrow, int dmaxcol, int over) { return(*(int *)0); } /* ./base/lib_pad.c */ #undef newpad_sp WINDOW *newpad_sp( SCREEN *sp, int l, int c) { return(*(WINDOW **)0); } #undef newpad WINDOW *newpad( int l, int c) { return(*(WINDOW **)0); } #undef subpad WINDOW *subpad( WINDOW *orig, int l, int c, int begy, int begx) { return(*(WINDOW **)0); } #undef prefresh int prefresh( WINDOW *win, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { return(*(int *)0); } #undef pnoutrefresh int pnoutrefresh( WINDOW *win, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { return(*(int *)0); } #undef pechochar int pechochar( WINDOW *pad, const chtype ch) { return(*(int *)0); } /* ./base/lib_printw.c */ #undef printw int printw( const char *fmt, ...) { return(*(int *)0); } #undef wprintw int wprintw( WINDOW *win, const char *fmt, ...) { return(*(int *)0); } #undef mvprintw int mvprintw( int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef mvwprintw int mvwprintw( WINDOW *win, int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef vwprintw int vwprintw( WINDOW *win, const char *fmt, va_list argp) { return(*(int *)0); } /* ./base/lib_redrawln.c */ #undef wredrawln int wredrawln( WINDOW *win, int beg, int num) { return(*(int *)0); } /* ./base/lib_refresh.c */ #undef wrefresh int wrefresh( WINDOW *win) { return(*(int *)0); } #undef wnoutrefresh int wnoutrefresh( WINDOW *win) { return(*(int *)0); } /* ./base/lib_restart.c */ #undef restartterm_sp int restartterm_sp( SCREEN *sp, const char *termp, int filenum, int *errret) { return(*(int *)0); } #undef restartterm int restartterm( const char *termp, int filenum, int *errret) { return(*(int *)0); } /* ./base/lib_scanw.c */ #undef vwscanw int vwscanw( WINDOW *win, const char *fmt, va_list argp) { return(*(int *)0); } #undef scanw int scanw( const char *fmt, ...) { return(*(int *)0); } #undef wscanw int wscanw( WINDOW *win, const char *fmt, ...) { return(*(int *)0); } #undef mvscanw int mvscanw( int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef mvwscanw int mvwscanw( WINDOW *win, int y, int x, const char *fmt, ...) { return(*(int *)0); } /* ./base/lib_screen.c */ #undef getwin_sp WINDOW *getwin_sp( SCREEN *sp, FILE *filep) { return(*(WINDOW **)0); } #undef getwin WINDOW *getwin( FILE *filep) { return(*(WINDOW **)0); } #undef putwin int putwin( WINDOW *win, FILE *filep) { return(*(int *)0); } #undef scr_restore_sp int scr_restore_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_restore int scr_restore( const char *file) { return(*(int *)0); } #undef scr_dump int scr_dump( const char *file) { return(*(int *)0); } #undef scr_init_sp int scr_init_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_init int scr_init( const char *file) { return(*(int *)0); } #undef scr_set_sp int scr_set_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_set int scr_set( const char *file) { return(*(int *)0); } /* ./base/lib_scroll.c */ #undef _nc_scroll_window void _nc_scroll_window( WINDOW *win, int const n, int const top, int const bottom, cchar_t blank) { /* void */ } #undef wscrl int wscrl( WINDOW *win, int n) { return(*(int *)0); } /* ./base/lib_scrollok.c */ #undef scrollok int scrollok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_scrreg.c */ #undef wsetscrreg int wsetscrreg( WINDOW *win, int top, int bottom) { return(*(int *)0); } /* ./base/lib_set_term.c */ #undef set_term SCREEN *set_term( SCREEN *screenp) { return(*(SCREEN **)0); } #undef delscreen void delscreen( SCREEN *sp) { /* void */ } #undef _nc_setupscreen_sp int _nc_setupscreen_sp( SCREEN **spp, int slines, int scolumns, FILE *output, int filtered, int slk_format) { return(*(int *)0); } #undef _nc_setupscreen int _nc_setupscreen( int slines, int scolumns, FILE *output, int filtered, int slk_format) { return(*(int *)0); } #undef _nc_ripoffline_sp int _nc_ripoffline_sp( SCREEN *sp, int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef _nc_ripoffline int _nc_ripoffline( int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef ripoffline_sp int ripoffline_sp( SCREEN *sp, int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef ripoffline int ripoffline( int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } /* ./base/lib_slk.c */ #undef _nc_format_slks int _nc_format_slks( SCREEN *sp, int cols) { return(*(int *)0); } #undef _nc_slk_initialize int _nc_slk_initialize( WINDOW *stwin, int cols) { return(*(int *)0); } #undef slk_restore_sp int slk_restore_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_restore int slk_restore(void) { return(*(int *)0); } /* ./base/lib_slkatr_set.c */ #undef slk_attr_set_sp int slk_attr_set_sp( SCREEN *sp, const attr_t attr, short color_pair_number, void *opts) { return(*(int *)0); } #undef slk_attr_set int slk_attr_set( const attr_t attr, short color_pair_number, void *opts) { return(*(int *)0); } /* ./base/lib_slkatrof.c */ #undef slk_attroff_sp int slk_attroff_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attroff int slk_attroff( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkatron.c */ #undef slk_attron_sp int slk_attron_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attron int slk_attron( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkatrset.c */ #undef slk_attrset_sp int slk_attrset_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attrset int slk_attrset( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkattr.c */ #undef slk_attr_sp attr_t slk_attr_sp( SCREEN *sp) { return(*(attr_t *)0); } #undef slk_attr attr_t slk_attr(void) { return(*(attr_t *)0); } /* ./base/lib_slkclear.c */ #undef slk_clear_sp int slk_clear_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_clear int slk_clear(void) { return(*(int *)0); } /* ./base/lib_slkcolor.c */ #undef slk_color_sp int slk_color_sp( SCREEN *sp, short color_pair_number) { return(*(int *)0); } #undef slk_color int slk_color( short color_pair_number) { return(*(int *)0); } /* ./base/lib_slkinit.c */ #undef slk_init_sp int slk_init_sp( SCREEN *sp, int format) { return(*(int *)0); } #undef slk_init int slk_init( int format) { return(*(int *)0); } /* ./base/lib_slklab.c */ #undef slk_label_sp char *slk_label_sp( SCREEN *sp, int n) { return(*(char **)0); } #undef slk_label char *slk_label( int n) { return(*(char **)0); } /* ./base/lib_slkrefr.c */ #undef slk_noutrefresh_sp int slk_noutrefresh_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_noutrefresh int slk_noutrefresh(void) { return(*(int *)0); } #undef slk_refresh_sp int slk_refresh_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_refresh int slk_refresh(void) { return(*(int *)0); } /* ./base/lib_slkset.c */ #undef slk_set_sp int slk_set_sp( SCREEN *sp, int i, const char *astr, int format) { return(*(int *)0); } #undef slk_set int slk_set( int i, const char *astr, int format) { return(*(int *)0); } /* ./base/lib_slktouch.c */ #undef slk_touch_sp int slk_touch_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_touch int slk_touch(void) { return(*(int *)0); } /* ./base/lib_touch.c */ #undef is_linetouched NCURSES_BOOL is_linetouched( WINDOW *win, int line) { return(*(NCURSES_BOOL *)0); } #undef is_wintouched NCURSES_BOOL is_wintouched( WINDOW *win) { return(*(NCURSES_BOOL *)0); } #undef wtouchln int wtouchln( WINDOW *win, int y, int n, int changed) { return(*(int *)0); } /* ./trace/lib_tracedmp.c */ #undef _tracedump void _tracedump( const char *name, WINDOW *win) { /* void */ } /* ./trace/lib_tracemse.c */ #undef _nc_trace_mmask_t char *_nc_trace_mmask_t( SCREEN *sp, mmask_t code) { return(*(char **)0); } #undef _nc_tracemouse char *_nc_tracemouse( SCREEN *sp, MEVENT const *ep) { return(*(char **)0); } #undef _nc_retrace_mmask_t mmask_t _nc_retrace_mmask_t( SCREEN *sp, mmask_t code) { return(*(mmask_t *)0); } #undef _tracemouse char *_tracemouse( MEVENT const *ep) { return(*(char **)0); } /* ./tty/lib_tstp.c */ #undef _nc_signal_handler void _nc_signal_handler( int enable) { /* void */ } /* ./base/lib_ungetch.c */ #undef _nc_fifo_dump void _nc_fifo_dump( SCREEN *sp) { /* void */ } #undef ungetch_sp int ungetch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef ungetch int ungetch( int ch) { return(*(int *)0); } /* ./tty/lib_vidattr.c */ #undef vidputs_sp int vidputs_sp( SCREEN *sp, chtype newmode, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef vidputs int vidputs( chtype newmode, NCURSES_OUTC outc) { return(*(int *)0); } #undef vidattr_sp int vidattr_sp( SCREEN *sp, chtype newmode) { return(*(int *)0); } #undef vidattr int vidattr( chtype newmode) { return(*(int *)0); } #undef termattrs_sp chtype termattrs_sp( SCREEN *sp) { return(*(chtype *)0); } #undef termattrs chtype termattrs(void) { return(*(chtype *)0); } /* ./base/lib_vline.c */ #undef wvline int wvline( WINDOW *win, chtype ch, int n) { return(*(int *)0); } /* ./base/lib_wattroff.c */ #undef wattr_off int wattr_off( WINDOW *win, attr_t at, void *opts) { return(*(int *)0); } /* ./base/lib_wattron.c */ #undef wattr_on int wattr_on( WINDOW *win, attr_t at, void *opts) { return(*(int *)0); } /* ./base/lib_winch.c */ #undef winch chtype winch( WINDOW *win) { return(*(chtype *)0); } /* ./base/lib_window.c */ #undef _nc_synchook void _nc_synchook( WINDOW *win) { /* void */ } #undef mvderwin int mvderwin( WINDOW *win, int y, int x) { return(*(int *)0); } #undef syncok int syncok( WINDOW *win, NCURSES_BOOL bf) { return(*(int *)0); } #undef wsyncup void wsyncup( WINDOW *win) { /* void */ } #undef wsyncdown void wsyncdown( WINDOW *win) { /* void */ } #undef wcursyncup void wcursyncup( WINDOW *win) { /* void */ } #undef dupwin WINDOW *dupwin( WINDOW *win) { return(*(WINDOW **)0); } /* ./base/nc_panel.c */ #undef _nc_panelhook_sp struct panelhook *_nc_panelhook_sp( SCREEN *sp) { return(*(struct panelhook **)0); } #undef _nc_panelhook struct panelhook *_nc_panelhook(void) { return(*(struct panelhook **)0); } /* ./base/safe_sprintf.c */ #undef _nc_printf_string_sp char *_nc_printf_string_sp( SCREEN *sp, const char *fmt, va_list ap) { return(*(char **)0); } #undef _nc_printf_string char *_nc_printf_string( const char *fmt, va_list ap) { return(*(char **)0); } /* ./tty/tty_update.c */ #undef doupdate_sp int doupdate_sp( SCREEN *sp) { return(*(int *)0); } #undef doupdate int doupdate(void) { return(*(int *)0); } #undef _nc_scrolln_sp int _nc_scrolln_sp( SCREEN *sp, int n, int top, int bot, int maxy) { return(*(int *)0); } #undef _nc_scrolln int _nc_scrolln( int n, int top, int bot, int maxy) { return(*(int *)0); } #undef _nc_screen_resume_sp void _nc_screen_resume_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_resume void _nc_screen_resume(void) { /* void */ } #undef _nc_screen_init_sp void _nc_screen_init_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_init void _nc_screen_init(void) { /* void */ } #undef _nc_screen_wrap_sp void _nc_screen_wrap_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_wrap void _nc_screen_wrap(void) { /* void */ } #undef _nc_do_xmc_glitch_sp void _nc_do_xmc_glitch_sp( SCREEN *sp, attr_t previous) { /* void */ } #undef _nc_do_xmc_glitch void _nc_do_xmc_glitch( attr_t previous) { /* void */ } /* ./trace/varargs.c */ #undef _nc_varargs char *_nc_varargs( const char *fmt, va_list ap) { return(*(char **)0); } /* ./base/vsscanf.c */ #undef _nc_vsscanf void _nc_vsscanf(void) { /* void */ } /* ./base/lib_freeall.c */ #undef _nc_freeall void _nc_freeall(void) { /* void */ } #undef _nc_free_and_exit_sp void _nc_free_and_exit_sp( SCREEN *sp, int code) { /* void */ } #undef _nc_free_and_exit void _nc_free_and_exit( int code) { /* void */ } /* ./widechar/charable.c */ #undef _nc_is_charable NCURSES_BOOL _nc_is_charable( wchar_t ch) { return(*(NCURSES_BOOL *)0); } #undef _nc_to_char int _nc_to_char( wint_t ch) { return(*(int *)0); } #undef _nc_to_widechar wint_t _nc_to_widechar( int ch) { return(*(wint_t *)0); } /* ./widechar/lib_add_wch.c */ #undef wadd_wch int wadd_wch( WINDOW *win, const cchar_t *wch) { return(*(int *)0); } #undef wecho_wchar int wecho_wchar( WINDOW *win, const cchar_t *wch) { return(*(int *)0); } /* ./widechar/lib_box_set.c */ #undef wborder_set int wborder_set( WINDOW *win, const cchar_t *ls, const cchar_t *rs, const cchar_t *ts, const cchar_t *bs, const cchar_t *tl, const cchar_t *tr, const cchar_t *bl, const cchar_t *br) { return(*(int *)0); } /* ./widechar/lib_cchar.c */ #undef setcchar int setcchar( cchar_t *wcval, const wchar_t *wch, const attr_t attrs, short color_pair, const void *opts) { return(*(int *)0); } #undef getcchar int getcchar( const cchar_t *wcval, wchar_t *wch, attr_t *attrs, short *color_pair, void *opts) { return(*(int *)0); } /* ./widechar/lib_erasewchar.c */ #undef erasewchar int erasewchar( wchar_t *wch) { return(*(int *)0); } #undef killwchar int killwchar( wchar_t *wch) { return(*(int *)0); } /* ./widechar/lib_get_wch.c */ #undef wget_wch int wget_wch( WINDOW *win, wint_t *result) { return(*(int *)0); } /* ./widechar/lib_get_wstr.c */ #undef wgetn_wstr int wgetn_wstr( WINDOW *win, wint_t *str, int maxlen) { return(*(int *)0); } /* ./widechar/lib_hline_set.c */ #undef whline_set int whline_set( WINDOW *win, const cchar_t *ch, int n) { return(*(int *)0); } /* ./widechar/lib_in_wch.c */ #undef win_wch int win_wch( WINDOW *win, cchar_t *wcval) { return(*(int *)0); } /* ./widechar/lib_in_wchnstr.c */ #undef win_wchnstr int win_wchnstr( WINDOW *win, cchar_t *wchstr, int n) { return(*(int *)0); } /* ./widechar/lib_ins_wch.c */ #undef _nc_insert_wch int _nc_insert_wch( WINDOW *win, const cchar_t *wch) { return(*(int *)0); } #undef wins_wch int wins_wch( WINDOW *win, const cchar_t *wch) { return(*(int *)0); } #undef wins_nwstr int wins_nwstr( WINDOW *win, const wchar_t *wstr, int n) { return(*(int *)0); } /* ./widechar/lib_inwstr.c */ #undef winnwstr int winnwstr( WINDOW *win, wchar_t *wstr, int n) { return(*(int *)0); } #undef winwstr int winwstr( WINDOW *win, wchar_t *wstr) { return(*(int *)0); } /* ./widechar/lib_key_name.c */ #undef key_name const char *key_name( wchar_t c) { return(*(const char **)0); } /* ./widechar/lib_pecho_wchar.c */ #undef pecho_wchar int pecho_wchar( WINDOW *pad, const cchar_t *wch) { return(*(int *)0); } /* ./widechar/lib_slk_wset.c */ #undef slk_wset int slk_wset( int i, const wchar_t *astr, int format) { return(*(int *)0); } /* ./widechar/lib_unget_wch.c */ #undef _nc_wcrtomb size_t _nc_wcrtomb( char *target, wchar_t source, mbstate_t *state) { return(*(size_t *)0); } #undef unget_wch_sp int unget_wch_sp( SCREEN *sp, const wchar_t wch) { return(*(int *)0); } #undef unget_wch int unget_wch( const wchar_t wch) { return(*(int *)0); } /* ./widechar/lib_vid_attr.c */ #undef vid_puts_sp int vid_puts_sp( SCREEN *sp, attr_t newmode, short pair, void *opts, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef vid_puts int vid_puts( attr_t newmode, short pair, void *opts, NCURSES_OUTC outc) { return(*(int *)0); } #undef vid_attr_sp int vid_attr_sp( SCREEN *sp, attr_t newmode, short pair, void *opts) { return(*(int *)0); } #undef vid_attr int vid_attr( attr_t newmode, short pair, void *opts) { return(*(int *)0); } #undef term_attrs_sp attr_t term_attrs_sp( SCREEN *sp) { return(*(attr_t *)0); } #undef term_attrs attr_t term_attrs(void) { return(*(attr_t *)0); } /* ./widechar/lib_vline_set.c */ #undef wvline_set int wvline_set( WINDOW *win, const cchar_t *ch, int n) { return(*(int *)0); } /* ./widechar/lib_wacs.c */ #undef _nc_wacs cchar_t *_nc_wacs; #undef _nc_init_wacs void _nc_init_wacs(void) { /* void */ } /* ./widechar/lib_wunctrl.c */ #undef wunctrl_sp wchar_t *wunctrl_sp( SCREEN *sp, cchar_t *wc) { return(*(wchar_t **)0); } #undef wunctrl wchar_t *wunctrl( cchar_t *wc) { return(*(wchar_t **)0); } /* ./expanded.c */ #undef _nc_toggle_attr_on void _nc_toggle_attr_on( attr_t *S, attr_t at) { /* void */ } #undef _nc_toggle_attr_off void _nc_toggle_attr_off( attr_t *S, attr_t at) { /* void */ } #undef _nc_DelCharCost_sp int _nc_DelCharCost_sp( SCREEN *sp, int count) { return(*(int *)0); } #undef _nc_InsCharCost_sp int _nc_InsCharCost_sp( SCREEN *sp, int count) { return(*(int *)0); } #undef _nc_UpdateAttrs_sp void _nc_UpdateAttrs_sp( SCREEN *sp, const cchar_t *c) { /* void */ } #undef _nc_DelCharCost int _nc_DelCharCost( int count) { return(*(int *)0); } #undef _nc_InsCharCost int _nc_InsCharCost( int count) { return(*(int *)0); } #undef _nc_UpdateAttrs void _nc_UpdateAttrs( const cchar_t *c) { /* void */ } /* ./base/legacy_coding.c */ #undef use_legacy_coding_sp int use_legacy_coding_sp( SCREEN *sp, int level) { return(*(int *)0); } #undef use_legacy_coding int use_legacy_coding( int level) { return(*(int *)0); } /* ./base/lib_dft_fgbg.c */ #undef use_default_colors_sp int use_default_colors_sp( SCREEN *sp) { return(*(int *)0); } #undef use_default_colors int use_default_colors(void) { return(*(int *)0); } #undef assume_default_colors_sp int assume_default_colors_sp( SCREEN *sp, int fg, int bg) { return(*(int *)0); } #undef assume_default_colors int assume_default_colors( int fg, int bg) { return(*(int *)0); } /* ./tinfo/lib_print.c */ #undef mcprint_sp int mcprint_sp( SCREEN *sp, char *data, int len) { return(*(int *)0); } #undef mcprint int mcprint( char *data, int len) { return(*(int *)0); } /* ./base/resizeterm.c */ #undef is_term_resized_sp NCURSES_BOOL is_term_resized_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(NCURSES_BOOL *)0); } #undef is_term_resized NCURSES_BOOL is_term_resized( int ToLines, int ToCols) { return(*(NCURSES_BOOL *)0); } #undef resize_term_sp int resize_term_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(int *)0); } #undef resize_term int resize_term( int ToLines, int ToCols) { return(*(int *)0); } #undef resizeterm_sp int resizeterm_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(int *)0); } #undef resizeterm int resizeterm( int ToLines, int ToCols) { return(*(int *)0); } /* ./trace/trace_xnames.c */ #undef _nc_trace_xnames void _nc_trace_xnames( TERMTYPE *tp) { /* void */ } /* ./tinfo/use_screen.c */ #undef use_screen int use_screen( SCREEN *screen, NCURSES_SCREEN_CB func, void *data) { return(*(int *)0); } /* ./base/use_window.c */ #undef use_window int use_window( WINDOW *win, NCURSES_WINDOW_CB func, void *data) { return(*(int *)0); } /* ./base/wresize.c */ #undef wresize int wresize( WINDOW *win, int ToLines, int ToCols) { return(*(int *)0); } /* ./tinfo/access.c */ #undef _nc_rootname char *_nc_rootname( char *path) { return(*(char **)0); } #undef _nc_is_abs_path NCURSES_BOOL _nc_is_abs_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_pathlast unsigned _nc_pathlast( const char *path) { return(*(unsigned *)0); } #undef _nc_basename char *_nc_basename( char *path) { return(*(char **)0); } #undef _nc_access int _nc_access( const char *path, int mode) { return(*(int *)0); } #undef _nc_is_dir_path NCURSES_BOOL _nc_is_dir_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_is_file_path NCURSES_BOOL _nc_is_file_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_env_access int _nc_env_access(void) { return(*(int *)0); } /* ./tinfo/add_tries.c */ #undef _nc_add_to_try int _nc_add_to_try( TRIES **tree, const char *str, unsigned code) { return(*(int *)0); } /* ./tinfo/alloc_ttype.c */ #undef _nc_align_termtype void _nc_align_termtype( TERMTYPE *to, TERMTYPE *from) { /* void */ } #undef _nc_copy_termtype void _nc_copy_termtype( TERMTYPE *dst, const TERMTYPE *src) { /* void */ } /* ./codes.c */ #undef boolcodes const char *const boolcodes[] = {0}; #undef numcodes const char *const numcodes[] = {0}; #undef strcodes const char *const strcodes[] = {0}; /* ./comp_captab.c */ #undef _nc_get_table const struct name_table_entry *_nc_get_table( NCURSES_BOOL termcap) { return(*(const struct name_table_entry **)0); } #undef _nc_get_hash_table const HashValue *_nc_get_hash_table( NCURSES_BOOL termcap) { return(*(const HashValue **)0); } #undef _nc_get_alias_table const struct alias *_nc_get_alias_table( NCURSES_BOOL termcap) { return(*(const struct alias **)0); } #undef _nc_get_hash_info const HashData *_nc_get_hash_info( NCURSES_BOOL termcap) { return(*(const HashData **)0); } /* ./tinfo/comp_error.c */ #undef _nc_suppress_warnings NCURSES_BOOL _nc_suppress_warnings; #undef _nc_curr_line int _nc_curr_line; #undef _nc_curr_col int _nc_curr_col; #undef _nc_get_source const char *_nc_get_source(void) { return(*(const char **)0); } #undef _nc_set_source void _nc_set_source( const char *const name) { /* void */ } #undef _nc_set_type void _nc_set_type( const char *const name) { /* void */ } #undef _nc_get_type void _nc_get_type( char *name) { /* void */ } #undef _nc_warning void _nc_warning( const char *const fmt, ...) { /* void */ } #undef _nc_err_abort void _nc_err_abort( const char *const fmt, ...) { /* void */ } #undef _nc_syserr_abort void _nc_syserr_abort( const char *const fmt, ...) { /* void */ } /* ./tinfo/comp_hash.c */ #undef _nc_find_entry struct name_table_entry const *_nc_find_entry( const char *string, const HashValue *hash_table) { return(*(struct name_table_entry const **)0); } #undef _nc_find_type_entry struct name_table_entry const *_nc_find_type_entry( const char *string, int type, NCURSES_BOOL termcap) { return(*(struct name_table_entry const **)0); } /* ./tinfo/db_iterator.c */ #undef _nc_tic_dir const char *_nc_tic_dir( const char *path) { return(*(const char **)0); } #undef _nc_keep_tic_dir void _nc_keep_tic_dir( const char *path) { /* void */ } #undef _nc_last_db void _nc_last_db(void) { /* void */ } #undef _nc_next_db const char *_nc_next_db( DBDIRS *state, int *offset) { return(*(const char **)0); } #undef _nc_first_db void _nc_first_db( DBDIRS *state, int *offset) { /* void */ } /* ./tinfo/doalloc.c */ #undef _nc_doalloc void *_nc_doalloc( void *oldp, size_t amount) { return(*(void **)0); } /* ./tinfo/entries.c */ #undef _nc_head ENTRY *_nc_head; #undef _nc_tail ENTRY *_nc_tail; #undef _nc_free_entry void _nc_free_entry( ENTRY *headp, TERMTYPE *tterm) { /* void */ } #undef _nc_free_entries void _nc_free_entries( ENTRY *headp) { /* void */ } #undef _nc_delink_entry ENTRY *_nc_delink_entry( ENTRY *headp, TERMTYPE *tterm) { return(*(ENTRY **)0); } #undef _nc_leaks_tinfo void _nc_leaks_tinfo(void) { /* void */ } /* ./fallback.c */ #undef _nc_fallback const TERMTYPE *_nc_fallback( const char *name) { return(*(const TERMTYPE **)0); } /* ./tinfo/free_ttype.c */ #undef _nc_free_termtype void _nc_free_termtype( TERMTYPE *ptr) { /* void */ } #undef _nc_user_definable NCURSES_BOOL _nc_user_definable; #undef use_extended_names int use_extended_names( NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/getenv_num.c */ #undef _nc_getenv_num int _nc_getenv_num( const char *name) { return(*(int *)0); } #undef _nc_setenv_num void _nc_setenv_num( const char *name, int value) { /* void */ } /* ./tinfo/home_terminfo.c */ #undef _nc_home_terminfo char *_nc_home_terminfo(void) { return(*(char **)0); } /* ./tinfo/init_keytry.c */ #undef _nc_init_keytry void _nc_init_keytry( SCREEN *sp) { /* void */ } /* ./tinfo/lib_acs.c */ #undef acs_map chtype acs_map[128]; #undef _nc_init_acs_sp void _nc_init_acs_sp( SCREEN *sp) { /* void */ } #undef _nc_init_acs void _nc_init_acs(void) { /* void */ } /* ./tinfo/lib_baudrate.c */ struct speed { short s; int sp; }; #undef _nc_baudrate int _nc_baudrate( int OSpeed) { return(*(int *)0); } #undef _nc_ospeed int _nc_ospeed( int BaudRate) { return(*(int *)0); } #undef baudrate_sp int baudrate_sp( SCREEN *sp) { return(*(int *)0); } #undef baudrate int baudrate(void) { return(*(int *)0); } /* ./tinfo/lib_cur_term.c */ #undef cur_term TERMINAL *cur_term; #undef set_curterm_sp TERMINAL *set_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(TERMINAL **)0); } #undef set_curterm TERMINAL *set_curterm( TERMINAL *termp) { return(*(TERMINAL **)0); } #undef del_curterm_sp int del_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(int *)0); } #undef del_curterm int del_curterm( TERMINAL *termp) { return(*(int *)0); } /* ./tinfo/lib_data.c */ #undef stdscr WINDOW *stdscr; #undef curscr WINDOW *curscr; #undef newscr WINDOW *newscr; #undef _nc_screen_chain SCREEN *_nc_screen_chain; #undef SP SCREEN *SP; #undef _nc_globals NCURSES_GLOBALS _nc_globals; #undef _nc_prescreen NCURSES_PRESCREEN _nc_prescreen; #undef _nc_screen_of SCREEN *_nc_screen_of( WINDOW *win) { return(*(SCREEN **)0); } /* ./tinfo/lib_has_cap.c */ #undef has_ic_sp NCURSES_BOOL has_ic_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_ic NCURSES_BOOL has_ic(void) { return(*(NCURSES_BOOL *)0); } #undef has_il_sp NCURSES_BOOL has_il_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_il NCURSES_BOOL has_il(void) { return(*(NCURSES_BOOL *)0); } /* ./tinfo/lib_kernel.c */ #undef erasechar_sp char erasechar_sp( SCREEN *sp) { return(*(char *)0); } #undef erasechar char erasechar(void) { return(*(char *)0); } #undef killchar_sp char killchar_sp( SCREEN *sp) { return(*(char *)0); } #undef killchar char killchar(void) { return(*(char *)0); } #undef flushinp_sp int flushinp_sp( SCREEN *sp) { return(*(int *)0); } #undef flushinp int flushinp(void) { return(*(int *)0); } /* ./lib_keyname.c */ struct kn { short offset; int code; }; #undef keyname_sp const char *keyname_sp( SCREEN *sp, int c) { return(*(const char **)0); } #undef keyname const char *keyname( int c) { return(*(const char **)0); } /* ./tinfo/lib_longname.c */ #undef longname_sp char *longname_sp( SCREEN *sp) { return(*(char **)0); } #undef longname char *longname(void) { return(*(char **)0); } /* ./tinfo/lib_napms.c */ #undef napms_sp int napms_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef napms int napms( int ms) { return(*(int *)0); } /* ./tinfo/lib_options.c */ #undef idlok int idlok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef idcok void idcok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } #undef halfdelay_sp int halfdelay_sp( SCREEN *sp, int t) { return(*(int *)0); } #undef halfdelay int halfdelay( int t) { return(*(int *)0); } #undef nodelay int nodelay( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef notimeout int notimeout( WINDOW *win, NCURSES_BOOL f) { return(*(int *)0); } #undef wtimeout void wtimeout( WINDOW *win, int delay) { /* void */ } #undef keypad int keypad( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef meta int meta( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef curs_set_sp int curs_set_sp( SCREEN *sp, int vis) { return(*(int *)0); } #undef curs_set int curs_set( int vis) { return(*(int *)0); } #undef typeahead_sp int typeahead_sp( SCREEN *sp, int fd) { return(*(int *)0); } #undef typeahead int typeahead( int fd) { return(*(int *)0); } #undef has_key_sp int has_key_sp( SCREEN *sp, int keycode) { return(*(int *)0); } #undef has_key int has_key( int keycode) { return(*(int *)0); } #undef _nc_putp_flush_sp int _nc_putp_flush_sp( SCREEN *sp, const char *name, const char *value) { return(*(int *)0); } #undef _nc_keypad int _nc_keypad( SCREEN *sp, int flag) { return(*(int *)0); } /* ./tinfo/lib_raw.c */ #undef raw_sp int raw_sp( SCREEN *sp) { return(*(int *)0); } #undef raw int raw(void) { return(*(int *)0); } #undef cbreak_sp int cbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef cbreak int cbreak(void) { return(*(int *)0); } #undef qiflush_sp void qiflush_sp( SCREEN *sp) { /* void */ } #undef qiflush void qiflush(void) { /* void */ } #undef noraw_sp int noraw_sp( SCREEN *sp) { return(*(int *)0); } #undef noraw int noraw(void) { return(*(int *)0); } #undef nocbreak_sp int nocbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef nocbreak int nocbreak(void) { return(*(int *)0); } #undef noqiflush_sp void noqiflush_sp( SCREEN *sp) { /* void */ } #undef noqiflush void noqiflush(void) { /* void */ } #undef intrflush_sp int intrflush_sp( SCREEN *sp, WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef intrflush int intrflush( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/lib_setup.c */ #undef ttytype char ttytype[256]; #undef LINES int LINES; #undef COLS int COLS; #undef TABSIZE int TABSIZE; #undef set_tabsize_sp int set_tabsize_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_tabsize int set_tabsize( int value) { return(*(int *)0); } #undef _nc_handle_sigwinch int _nc_handle_sigwinch( SCREEN *sp) { return(*(int *)0); } #undef use_env_sp void use_env_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_tioctl_sp void use_tioctl_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_env void use_env( NCURSES_BOOL f) { /* void */ } #undef use_tioctl void use_tioctl( NCURSES_BOOL f) { /* void */ } #undef _nc_get_screensize void _nc_get_screensize( SCREEN *sp, int *linep, int *colp) { /* void */ } #undef _nc_update_screensize void _nc_update_screensize( SCREEN *sp) { /* void */ } #undef _nc_setup_tinfo int _nc_setup_tinfo( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } #undef _nc_tinfo_cmdch void _nc_tinfo_cmdch( TERMINAL *termp, int proto) { /* void */ } #undef _nc_get_locale char *_nc_get_locale(void) { return(*(char **)0); } #undef _nc_unicode_locale int _nc_unicode_locale(void) { return(*(int *)0); } #undef _nc_locale_breaks_acs int _nc_locale_breaks_acs( TERMINAL *termp) { return(*(int *)0); } #undef _nc_setupterm int _nc_setupterm( const char *tname, int Filedes, int *errret, int reuse) { return(*(int *)0); } #undef new_prescr SCREEN *new_prescr(void) { return(*(SCREEN **)0); } #undef setupterm int setupterm( const char *tname, int Filedes, int *errret) { return(*(int *)0); } /* ./tinfo/lib_termcap.c */ #undef UP char *UP; #undef BC char *BC; #undef tgetent_sp int tgetent_sp( SCREEN *sp, char *bufp, const char *name) { return(*(int *)0); } #undef tgetent int tgetent( char *bufp, const char *name) { return(*(int *)0); } #undef tgetflag_sp int tgetflag_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetflag int tgetflag( const char *id) { return(*(int *)0); } #undef tgetnum_sp int tgetnum_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetnum int tgetnum( const char *id) { return(*(int *)0); } #undef tgetstr_sp char *tgetstr_sp( SCREEN *sp, const char *id, char **area) { return(*(char **)0); } #undef tgetstr char *tgetstr( const char *id, char **area) { return(*(char **)0); } /* ./tinfo/lib_termname.c */ #undef termname_sp char *termname_sp( SCREEN *sp) { return(*(char **)0); } #undef termname char *termname(void) { return(*(char **)0); } /* ./tinfo/lib_tgoto.c */ #undef tgoto char *tgoto( const char *string, int x, int y) { return(*(char **)0); } /* ./tinfo/lib_ti.c */ #undef tigetflag_sp int tigetflag_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetflag int tigetflag( const char *str) { return(*(int *)0); } #undef tigetnum_sp int tigetnum_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetnum int tigetnum( const char *str) { return(*(int *)0); } #undef tigetstr_sp char *tigetstr_sp( SCREEN *sp, const char *str) { return(*(char **)0); } #undef tigetstr char *tigetstr( const char *str) { return(*(char **)0); } /* ./tinfo/lib_tparm.c */ #undef _nc_tparm_err int _nc_tparm_err; #undef _nc_tparm_analyze int _nc_tparm_analyze( const char *string, char *p_is_s[9], int *_nc_popcount) { return(*(int *)0); } #undef tparm char *tparm( const char *string, ...) { return(*(char **)0); } #undef tiparm char *tiparm( const char *string, ...) { return(*(char **)0); } /* ./tinfo/lib_tputs.c */ #undef PC char PC; #undef ospeed short ospeed; #undef _nc_nulls_sent int _nc_nulls_sent; #undef _nc_set_no_padding void _nc_set_no_padding( SCREEN *sp) { /* void */ } #undef delay_output_sp int delay_output_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef delay_output int delay_output( int ms) { return(*(int *)0); } #undef _nc_flush_sp void _nc_flush_sp( SCREEN *sp) { /* void */ } #undef _nc_flush void _nc_flush(void) { /* void */ } #undef _nc_outch_sp int _nc_outch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_outch int _nc_outch( int ch) { return(*(int *)0); } #undef _nc_putchar_sp int _nc_putchar_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_putchar int _nc_putchar( int ch) { return(*(int *)0); } #undef putp_sp int putp_sp( SCREEN *sp, const char *string) { return(*(int *)0); } #undef putp int putp( const char *string) { return(*(int *)0); } #undef _nc_putp_sp int _nc_putp_sp( SCREEN *sp, const char *name, const char *string) { return(*(int *)0); } #undef _nc_putp int _nc_putp( const char *name, const char *string) { return(*(int *)0); } #undef tputs_sp int tputs_sp( SCREEN *sp, const char *string, int affcnt, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef _nc_outc_wrapper int _nc_outc_wrapper( SCREEN *sp, int c) { return(*(int *)0); } #undef tputs int tputs( const char *string, int affcnt, int (*outc)( int p1)) { return(*(int *)0); } /* ./trace/lib_trace.c */ #undef _nc_tracing unsigned _nc_tracing; #undef _nc_tputs_trace const char *_nc_tputs_trace = {0}; #undef _nc_outchars long _nc_outchars; #undef trace void trace( const unsigned int tracelevel) { /* void */ } #undef _tracef void _tracef( const char *fmt, ...) { /* void */ } #undef _nc_retrace_bool NCURSES_BOOL _nc_retrace_bool( int code) { return(*(NCURSES_BOOL *)0); } #undef _nc_retrace_char char _nc_retrace_char( int code) { return(*(char *)0); } #undef _nc_retrace_int int _nc_retrace_int( int code) { return(*(int *)0); } #undef _nc_retrace_unsigned unsigned _nc_retrace_unsigned( unsigned code) { return(*(unsigned *)0); } #undef _nc_retrace_ptr char *_nc_retrace_ptr( char *code) { return(*(char **)0); } #undef _nc_retrace_cptr const char *_nc_retrace_cptr( const char *code) { return(*(const char **)0); } #undef _nc_retrace_cvoid_ptr const void *_nc_retrace_cvoid_ptr( const void *code) { return(*(const void **)0); } #undef _nc_retrace_void_ptr void *_nc_retrace_void_ptr( void *code) { return(*(void **)0); } #undef _nc_retrace_sp SCREEN *_nc_retrace_sp( SCREEN *code) { return(*(SCREEN **)0); } #undef _nc_retrace_win WINDOW *_nc_retrace_win( WINDOW *code) { return(*(WINDOW **)0); } /* ./trace/lib_traceatr.c */ #undef _traceattr2 char *_traceattr2( int bufnum, chtype newmode) { return(*(char **)0); } #undef _traceattr char *_traceattr( attr_t newmode) { return(*(char **)0); } #undef _nc_retrace_int_attr_t int _nc_retrace_int_attr_t( attr_t code) { return(*(int *)0); } #undef _nc_retrace_attr_t attr_t _nc_retrace_attr_t( attr_t code) { return(*(attr_t *)0); } #undef _nc_altcharset_name const char *_nc_altcharset_name( attr_t attr, chtype ch) { return(*(const char **)0); } #undef _tracechtype2 char *_tracechtype2( int bufnum, chtype ch) { return(*(char **)0); } #undef _tracechtype char *_tracechtype( chtype ch) { return(*(char **)0); } #undef _nc_retrace_chtype chtype _nc_retrace_chtype( chtype code) { return(*(chtype *)0); } #undef _tracecchar_t2 char *_tracecchar_t2( int bufnum, const cchar_t *ch) { return(*(char **)0); } #undef _tracecchar_t char *_tracecchar_t( const cchar_t *ch) { return(*(char **)0); } /* ./trace/lib_tracebits.c */ #undef _nc_trace_ttymode char *_nc_trace_ttymode( struct termios *tty) { return(*(char **)0); } #undef _nc_tracebits char *_nc_tracebits(void) { return(*(char **)0); } /* ./trace/lib_tracechr.c */ #undef _nc_tracechar char *_nc_tracechar( SCREEN *sp, int ch) { return(*(char **)0); } #undef _tracechar char *_tracechar( int ch) { return(*(char **)0); } /* ./tinfo/lib_ttyflags.c */ #undef _nc_get_tty_mode_sp int _nc_get_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_get_tty_mode int _nc_get_tty_mode( struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode_sp int _nc_set_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode int _nc_set_tty_mode( struct termios *buf) { return(*(int *)0); } #undef def_shell_mode_sp int def_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_shell_mode int def_shell_mode(void) { return(*(int *)0); } #undef def_prog_mode_sp int def_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_prog_mode int def_prog_mode(void) { return(*(int *)0); } #undef reset_prog_mode_sp int reset_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_prog_mode int reset_prog_mode(void) { return(*(int *)0); } #undef reset_shell_mode_sp int reset_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_shell_mode int reset_shell_mode(void) { return(*(int *)0); } #undef savetty_sp int savetty_sp( SCREEN *sp) { return(*(int *)0); } #undef savetty int savetty(void) { return(*(int *)0); } #undef resetty_sp int resetty_sp( SCREEN *sp) { return(*(int *)0); } #undef resetty int resetty(void) { return(*(int *)0); } /* ./tty/lib_twait.c */ #undef _nc_timed_wait int _nc_timed_wait( SCREEN *sp, int mode, int milliseconds, int *timeleft) { return(*(int *)0); } /* ./tinfo/name_match.c */ #undef _nc_first_name char *_nc_first_name( const char *const sp) { return(*(char **)0); } #undef _nc_name_match int _nc_name_match( const char *const namelst, const char *const name, const char *const delim) { return(*(int *)0); } /* ./names.c */ #undef boolnames const char *const boolnames[] = {0}; #undef boolfnames const char *const boolfnames[] = {0}; #undef numnames const char *const numnames[] = {0}; #undef numfnames const char *const numfnames[] = {0}; #undef strnames const char *const strnames[] = {0}; #undef strfnames const char *const strfnames[] = {0}; /* ./tinfo/obsolete.c */ #undef _nc_set_buffer_sp void _nc_set_buffer_sp( SCREEN *sp, FILE *ofp, int buffered) { /* void */ } #undef _nc_set_buffer void _nc_set_buffer( FILE *ofp, int buffered) { /* void */ } /* ./tinfo/read_entry.c */ #undef _nc_init_termtype void _nc_init_termtype( TERMTYPE *const tp) { /* void */ } #undef _nc_read_termtype int _nc_read_termtype( TERMTYPE *ptr, char *buffer, int limit) { return(*(int *)0); } #undef _nc_read_file_entry int _nc_read_file_entry( const char *const filename, TERMTYPE *ptr) { return(*(int *)0); } #undef _nc_read_entry int _nc_read_entry( const char *const name, char *const filename, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/read_termcap.c */ #undef _nc_read_termcap_entry int _nc_read_termcap_entry( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/strings.c */ #undef _nc_str_init string_desc *_nc_str_init( string_desc *dst, char *src, size_t len) { return(*(string_desc **)0); } #undef _nc_str_null string_desc *_nc_str_null( string_desc *dst, size_t len) { return(*(string_desc **)0); } #undef _nc_str_copy string_desc *_nc_str_copy( string_desc *dst, string_desc *src) { return(*(string_desc **)0); } #undef _nc_safe_strcat NCURSES_BOOL _nc_safe_strcat( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_safe_strcpy NCURSES_BOOL _nc_safe_strcpy( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } /* ./trace/trace_buf.c */ #undef _nc_trace_buf char *_nc_trace_buf( int bufnum, size_t want) { return(*(char **)0); } #undef _nc_trace_bufcat char *_nc_trace_bufcat( int bufnum, const char *value) { return(*(char **)0); } /* ./trace/trace_tries.c */ #undef _nc_trace_tries void _nc_trace_tries( TRIES *tree) { /* void */ } /* ./base/tries.c */ #undef _nc_expand_try char *_nc_expand_try( TRIES *tree, unsigned code, int *count, size_t len) { return(*(char **)0); } #undef _nc_remove_key int _nc_remove_key( TRIES **tree, unsigned code) { return(*(int *)0); } #undef _nc_remove_string int _nc_remove_string( TRIES **tree, const char *string) { return(*(int *)0); } /* ./tinfo/trim_sgr0.c */ #undef _nc_trim_sgr0 char *_nc_trim_sgr0( TERMTYPE *tp) { return(*(char **)0); } /* ./unctrl.c */ #undef unctrl_sp const char *unctrl_sp( SCREEN *sp, chtype ch) { return(*(const char **)0); } #undef unctrl const char *unctrl( chtype ch) { return(*(const char **)0); } /* ./trace/visbuf.c */ #undef _nc_visbuf2 const char *_nc_visbuf2( int bufnum, const char *buf) { return(*(const char **)0); } #undef _nc_visbuf const char *_nc_visbuf( const char *buf) { return(*(const char **)0); } #undef _nc_visbufn const char *_nc_visbufn( const char *buf, int len) { return(*(const char **)0); } #undef _nc_viswbuf2 const char *_nc_viswbuf2( int bufnum, const wchar_t *buf) { return(*(const char **)0); } #undef _nc_viswbuf const char *_nc_viswbuf( const wchar_t *buf) { return(*(const char **)0); } #undef _nc_viswbufn const char *_nc_viswbufn( const wchar_t *buf, int len) { return(*(const char **)0); } #undef _nc_viswibuf const char *_nc_viswibuf( const wint_t *buf) { return(*(const char **)0); } #undef _nc_viscbuf2 const char *_nc_viscbuf2( int bufnum, const cchar_t *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf const char *_nc_viscbuf( const cchar_t *buf, int len) { return(*(const char **)0); } /* ./tinfo/alloc_entry.c */ #undef _nc_init_entry void _nc_init_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_copy_entry ENTRY *_nc_copy_entry( ENTRY *oldp) { return(*(ENTRY **)0); } #undef _nc_save_str char *_nc_save_str( const char *const string) { return(*(char **)0); } #undef _nc_wrap_entry void _nc_wrap_entry( ENTRY *const ep, NCURSES_BOOL copy_strings) { /* void */ } #undef _nc_merge_entry void _nc_merge_entry( TERMTYPE *const to, TERMTYPE *const from) { /* void */ } /* ./tinfo/captoinfo.c */ #undef _nc_captoinfo char *_nc_captoinfo( const char *cap, const char *s, int const parameterized) { return(*(char **)0); } #undef _nc_infotocap char *_nc_infotocap( const char *cap, const char *str, int const parameterized) { return(*(char **)0); } /* ./tinfo/comp_expand.c */ #undef _nc_tic_expand char *_nc_tic_expand( const char *srcp, NCURSES_BOOL tic_format, int numbers) { return(*(char **)0); } /* ./tinfo/comp_parse.c */ #undef _nc_check_termtype2 void (*_nc_check_termtype2)( TERMTYPE *p1, NCURSES_BOOL p2); #undef _nc_check_termtype void (*_nc_check_termtype)( TERMTYPE *p1); #undef _nc_entry_match NCURSES_BOOL _nc_entry_match( char *n1, char *n2) { return(*(NCURSES_BOOL *)0); } #undef _nc_read_entry_source void _nc_read_entry_source( FILE *fp, char *buf, int literal, NCURSES_BOOL silent, NCURSES_BOOL (*hook)( ENTRY *p1)) { /* void */ } #undef _nc_resolve_uses2 int _nc_resolve_uses2( NCURSES_BOOL fullresolve, NCURSES_BOOL literal) { return(*(int *)0); } #undef _nc_resolve_uses int _nc_resolve_uses( NCURSES_BOOL fullresolve) { return(*(int *)0); } /* ./tinfo/comp_scan.c */ #undef _nc_syntax int _nc_syntax; #undef _nc_strict_bsd int _nc_strict_bsd; #undef _nc_curr_file_pos long _nc_curr_file_pos; #undef _nc_comment_start long _nc_comment_start; #undef _nc_comment_end long _nc_comment_end; #undef _nc_start_line long _nc_start_line; #undef _nc_curr_token struct token _nc_curr_token; #undef _nc_disable_period NCURSES_BOOL _nc_disable_period; #undef _nc_reset_input void _nc_reset_input( FILE *fp, char *buf) { /* void */ } #undef _nc_get_token int _nc_get_token( NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_trans_string int _nc_trans_string( char *ptr, char *last) { return(*(int *)0); } #undef _nc_push_token void _nc_push_token( int tokclass) { /* void */ } #undef _nc_panic_mode void _nc_panic_mode( char ch) { /* void */ } /* ./tinfo/parse_entry.c */ #undef _nc_parse_entry int _nc_parse_entry( struct entry *entryp, int literal, NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_capcmp int _nc_capcmp( const char *s, const char *t) { return(*(int *)0); } /* ./tinfo/write_entry.c */ #undef _nc_set_writedir void _nc_set_writedir( const char *dir) { /* void */ } #undef _nc_write_entry void _nc_write_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_tic_written int _nc_tic_written(void) { return(*(int *)0); } /* ./base/define_key.c */ #undef define_key_sp int define_key_sp( SCREEN *sp, const char *str, int keycode) { return(*(int *)0); } #undef define_key int define_key( const char *str, int keycode) { return(*(int *)0); } /* ./tinfo/hashed_db.c */ #undef _nc_hashed_db void _nc_hashed_db(void) { /* void */ } /* ./base/key_defined.c */ #undef key_defined_sp int key_defined_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef key_defined int key_defined( const char *str) { return(*(int *)0); } /* ./base/keybound.c */ #undef keybound_sp char *keybound_sp( SCREEN *sp, int code, int count) { return(*(char **)0); } #undef keybound char *keybound( int code, int count) { return(*(char **)0); } /* ./base/keyok.c */ #undef keyok_sp int keyok_sp( SCREEN *sp, int c, NCURSES_BOOL flag) { return(*(int *)0); } #undef keyok int keyok( int c, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/version.c */ #undef curses_version const char *curses_version(void) { return(*(const char **)0); } ncurses-6.0-20160213/ncurses/tty/0000755000175100001440000000000012635376535014775 5ustar tomusersncurses-6.0-20160213/ncurses/tty/tty_update.c0000644000175100001440000020231612635376535017327 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /*----------------------------------------------------------------- * * lib_doupdate.c * * The routine doupdate() and its dependents. * All physical output is concentrated here (except _nc_outch() * in lib_tputs.c). * *-----------------------------------------------------------------*/ #include #ifndef CUR #define CUR SP_TERMTYPE #endif #if defined __HAIKU__ && defined __BEOS__ #undef __BEOS__ #endif #ifdef __BEOS__ #undef false #undef true #include #endif #if defined(TRACE) && HAVE_SYS_TIMES_H && HAVE_TIMES #define USE_TRACE_TIMES 1 #else #define USE_TRACE_TIMES 0 #endif #if HAVE_SYS_TIME_H && HAVE_SYS_TIME_SELECT #include #endif #if USE_TRACE_TIMES #include #endif #if USE_FUNC_POLL #elif HAVE_SELECT #if HAVE_SYS_SELECT_H #include #endif #endif #include MODULE_ID("$Id: tty_update.c,v 1.282 2015/12/20 00:59:09 tom Exp $") /* * This define controls the line-breakout optimization. Every once in a * while during screen refresh, we want to check for input and abort the * update if there's some waiting. CHECK_INTERVAL controls the number of * changed lines to be emitted between input checks. * * Note: Input-check-and-abort is no longer done if the screen is being * updated from scratch. This is a feature, not a bug. */ #define CHECK_INTERVAL 5 #define FILL_BCE(sp) (sp->_coloron && !sp->_default_color && !back_color_erase) static const NCURSES_CH_T blankchar = NewChar(BLANK_TEXT); static NCURSES_CH_T normal = NewChar(BLANK_TEXT); /* * Enable checking to see if doupdate and friends are tracking the true * cursor position correctly. NOTE: this is a debugging hack which will * work ONLY on ANSI-compatible terminals! */ /* #define POSITION_DEBUG */ static NCURSES_INLINE NCURSES_CH_T ClrBlank(NCURSES_SP_DCLx WINDOW *win); #if NCURSES_SP_FUNCS static int ClrBottom(SCREEN *, int total); static void ClearScreen(SCREEN *, NCURSES_CH_T blank); static void ClrUpdate(SCREEN *); static void DelChar(SCREEN *, int count); static void InsStr(SCREEN *, NCURSES_CH_T * line, int count); static void TransformLine(SCREEN *, int const lineno); #else static int ClrBottom(int total); static void ClearScreen(NCURSES_CH_T blank); static void ClrUpdate(void); static void DelChar(int count); static void InsStr(NCURSES_CH_T * line, int count); static void TransformLine(int const lineno); #endif #ifdef POSITION_DEBUG /**************************************************************************** * * Debugging code. Only works on ANSI-standard terminals. * ****************************************************************************/ static void position_check(NCURSES_SP_DCLx int expected_y, int expected_x, char *legend) /* check to see if the real cursor position matches the virtual */ { char buf[20]; char *s; int y, x; if (!_nc_tracing || (expected_y < 0 && expected_x < 0)) return; NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG); memset(buf, '\0', sizeof(buf)); NCURSES_PUTP2_FLUSH("cpr", "\033[6n"); /* only works on ANSI-compatibles */ *(s = buf) = 0; do { int ask = sizeof(buf) - 1 - (s - buf); int got = read(0, s, ask); if (got == 0) break; s += got; } while (strchr(buf, 'R') == 0); _tracef("probe returned %s", _nc_visbuf(buf)); /* try to interpret as a position report */ if (sscanf(buf, "\033[%d;%dR", &y, &x) != 2) { _tracef("position probe failed in %s", legend); } else { if (expected_x < 0) expected_x = x - 1; if (expected_y < 0) expected_y = y - 1; if (y - 1 != expected_y || x - 1 != expected_x) { NCURSES_SP_NAME(beep) (NCURSES_SP_ARG); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx tparm("\033[%d;%dH", expected_y + 1, expected_x + 1), 1, NCURSES_SP_NAME(_nc_outch)); _tracef("position seen (%d, %d) doesn't match expected one (%d, %d) in %s", y - 1, x - 1, expected_y, expected_x, legend); } else { _tracef("position matches OK in %s", legend); } } } #else #define position_check(expected_y, expected_x, legend) /* nothing */ #endif /* POSITION_DEBUG */ /**************************************************************************** * * Optimized update code * ****************************************************************************/ static NCURSES_INLINE void GoTo(NCURSES_SP_DCLx int const row, int const col) { TR(TRACE_MOVE, ("GoTo(%p, %d, %d) from (%d, %d)", (void *) SP_PARM, row, col, SP_PARM->_cursrow, SP_PARM->_curscol)); position_check(NCURSES_SP_ARGx SP_PARM->_cursrow, SP_PARM->_curscol, "GoTo"); TINFO_MVCUR(NCURSES_SP_ARGx SP_PARM->_cursrow, SP_PARM->_curscol, row, col); position_check(NCURSES_SP_ARGx SP_PARM->_cursrow, SP_PARM->_curscol, "GoTo2"); } #if !NCURSES_WCWIDTH_GRAPHICS static bool is_wacs_value(unsigned ch) { bool result; switch (ch) { case 0x00a3: /* FALLTHRU - ncurses pound-sterling symbol */ case 0x00b0: /* FALLTHRU - VT100 degree symbol */ case 0x00b1: /* FALLTHRU - VT100 plus/minus */ case 0x00b7: /* FALLTHRU - VT100 bullet */ case 0x03c0: /* FALLTHRU - ncurses greek pi */ case 0x2190: /* FALLTHRU - Teletype arrow pointing left */ case 0x2191: /* FALLTHRU - Teletype arrow pointing up */ case 0x2192: /* FALLTHRU - Teletype arrow pointing right */ case 0x2193: /* FALLTHRU - Teletype arrow pointing down */ case 0x2260: /* FALLTHRU - ncurses not-equal */ case 0x2264: /* FALLTHRU - ncurses less-than-or-equal-to */ case 0x2265: /* FALLTHRU - ncurses greater-than-or-equal-to */ case 0x23ba: /* FALLTHRU - VT100 scan line 1 */ case 0x23bb: /* FALLTHRU - ncurses scan line 3 */ case 0x23bc: /* FALLTHRU - ncurses scan line 7 */ case 0x23bd: /* FALLTHRU - VT100 scan line 9 */ case 0x2500: /* FALLTHRU - VT100 horizontal line */ case 0x2501: /* FALLTHRU - thick horizontal line */ case 0x2502: /* FALLTHRU - VT100 vertical line */ case 0x2503: /* FALLTHRU - thick vertical line */ case 0x250c: /* FALLTHRU - VT100 upper left corner */ case 0x250f: /* FALLTHRU - thick upper left corner */ case 0x2510: /* FALLTHRU - VT100 upper right corner */ case 0x2513: /* FALLTHRU - thick upper right corner */ case 0x2514: /* FALLTHRU - VT100 lower left corner */ case 0x2517: /* FALLTHRU - thick lower left corner */ case 0x2518: /* FALLTHRU - VT100 lower right corner */ case 0x251b: /* FALLTHRU - thick lower right corner */ case 0x251c: /* FALLTHRU - VT100 tee pointing left */ case 0x2523: /* FALLTHRU - thick tee pointing left */ case 0x2524: /* FALLTHRU - VT100 tee pointing right */ case 0x252b: /* FALLTHRU - thick tee pointing right */ case 0x252c: /* FALLTHRU - VT100 tee pointing down */ case 0x2533: /* FALLTHRU - thick tee pointing down */ case 0x2534: /* FALLTHRU - VT100 tee pointing up */ case 0x253b: /* FALLTHRU - thick tee pointing up */ case 0x253c: /* FALLTHRU - VT100 large plus or crossover */ case 0x254b: /* FALLTHRU - thick large plus or crossover */ case 0x2550: /* FALLTHRU - double horizontal line */ case 0x2551: /* FALLTHRU - double vertical line */ case 0x2554: /* FALLTHRU - double upper left corner */ case 0x2557: /* FALLTHRU - double upper right corner */ case 0x255a: /* FALLTHRU - double lower left corner */ case 0x255d: /* FALLTHRU - double lower right corner */ case 0x2560: /* FALLTHRU - double tee pointing right */ case 0x2563: /* FALLTHRU - double tee pointing left */ case 0x2566: /* FALLTHRU - double tee pointing down */ case 0x2569: /* FALLTHRU - double tee pointing up */ case 0x256c: /* FALLTHRU - double large plus or crossover */ case 0x2592: /* FALLTHRU - VT100 checker board (stipple) */ case 0x25ae: /* FALLTHRU - Teletype solid square block */ case 0x25c6: /* FALLTHRU - VT100 diamond */ case 0x2603: /* FALLTHRU - Teletype lantern symbol */ result = TRUE; break; default: result = FALSE; break; } return result; } #endif static NCURSES_INLINE void PutAttrChar(NCURSES_SP_DCLx CARG_CH_T ch) { int chlen = 1; NCURSES_CH_T my_ch; #if USE_WIDEC_SUPPORT PUTC_DATA; #endif NCURSES_CH_T tilde; NCURSES_CH_T attr = CHDEREF(ch); TR(TRACE_CHARPUT, ("PutAttrChar(%s) at (%d, %d)", _tracech_t(ch), SP_PARM->_cursrow, SP_PARM->_curscol)); #if USE_WIDEC_SUPPORT /* * If this is not a valid character, there is nothing more to do. */ if (isWidecExt(CHDEREF(ch))) { TR(TRACE_CHARPUT, ("...skip")); return; } /* * Determine the number of character cells which the 'ch' value will use * on the screen. It should be at least one. */ if ((chlen = wcwidth(CharOf(CHDEREF(ch)))) <= 0) { static const NCURSES_CH_T blank = NewChar(BLANK_TEXT); /* * If the character falls into any of these special cases, do * not force the result to a blank: * * a) it is printable (this works around a bug in wcwidth()). * b) use_legacy_coding() has been called to modify the treatment * of codes 128-255. * c) the acs_map[] has been initialized to allow codes 0-31 * to be rendered. This supports Linux console's "PC" * characters. Codes 128-255 are allowed though this is * not checked. */ if (is8bits(CharOf(CHDEREF(ch))) && (isprint(CharOf(CHDEREF(ch))) || (SP_PARM->_legacy_coding > 0 && CharOf(CHDEREF(ch)) >= 160) || (SP_PARM->_legacy_coding > 1 && CharOf(CHDEREF(ch)) >= 128) || (AttrOf(attr) & A_ALTCHARSET && ((CharOfD(ch) < ACS_LEN && SP_PARM->_acs_map != 0 && SP_PARM->_acs_map[CharOfD(ch)] != 0) || (CharOfD(ch) >= 128))))) { ; } else { ch = CHREF(blank); TR(TRACE_CHARPUT, ("forced to blank")); } chlen = 1; } #endif if ((AttrOf(attr) & A_ALTCHARSET) && SP_PARM->_acs_map != 0 && ((CharOfD(ch) < ACS_LEN) #if !NCURSES_WCWIDTH_GRAPHICS || is_wacs_value(CharOfD(ch)) #endif )) { my_ch = CHDEREF(ch); /* work around const param */ #if USE_WIDEC_SUPPORT /* * This is crude & ugly, but works most of the time. It checks if the * acs_chars string specified that we have a mapping for this * character, and uses the wide-character mapping when we expect the * normal one to be broken (by mis-design ;-). */ if (SP_PARM->_screen_unicode && _nc_wacs[CharOf(my_ch)].chars[0]) { if (SP_PARM->_screen_acs_map[CharOf(my_ch)]) { if (SP_PARM->_screen_acs_fix) { RemAttr(attr, A_ALTCHARSET); my_ch = _nc_wacs[CharOf(my_ch)]; } } else { RemAttr(attr, A_ALTCHARSET); my_ch = _nc_wacs[CharOf(my_ch)]; } #if !NCURSES_WCWIDTH_GRAPHICS if (!(AttrOf(attr) & A_ALTCHARSET)) { chlen = 1; } #endif /* !NCURSES_WCWIDTH_GRAPHICS */ } #endif /* * If we (still) have alternate character set, it is the normal 8bit * flavor. The _screen_acs_map[] array tells if the character was * really in acs_chars, needed because of the way wide/normal line * drawing flavors are integrated. */ if (AttrOf(attr) & A_ALTCHARSET) { int j = CharOfD(ch); chtype temp = UChar(SP_PARM->_acs_map[j]); if (temp != 0) { SetChar(my_ch, temp, AttrOf(attr)); } else { my_ch = CHDEREF(ch); RemAttr(attr, A_ALTCHARSET); } } ch = CHREF(my_ch); } #if USE_WIDEC_SUPPORT && !NCURSES_WCWIDTH_GRAPHICS else if (chlen > 1 && is_wacs_value(CharOfD(ch))) { chlen = 1; } #endif if (tilde_glitch && (CharOfD(ch) == L('~'))) { SetChar(tilde, L('`'), AttrOf(attr)); ch = CHREF(tilde); } UpdateAttrs(SP_PARM, attr); PUTC(CHDEREF(ch)); #if !USE_WIDEC_SUPPORT COUNT_OUTCHARS(1); #endif SP_PARM->_curscol += chlen; if (char_padding) { NCURSES_PUTP2("char_padding", char_padding); } } static bool check_pending(NCURSES_SP_DCL0) /* check for pending input */ { bool have_pending = FALSE; /* * Only carry out this check when the flag is zero, otherwise we'll * have the refreshing slow down drastically (or stop) if there's an * unread character available. */ if (SP_PARM->_fifohold != 0) return FALSE; if (SP_PARM->_checkfd >= 0) { #if USE_FUNC_POLL struct pollfd fds[1]; fds[0].fd = SP_PARM->_checkfd; fds[0].events = POLLIN; if (poll(fds, (size_t) 1, 0) > 0) { have_pending = TRUE; } #elif defined(__BEOS__) /* * BeOS's select() is declared in socket.h, so the configure script does * not see it. That's just as well, since that function works only for * sockets. This (using snooze and ioctl) was distilled from Be's patch * for ncurses which uses a separate thread to simulate select(). * * FIXME: the return values from the ioctl aren't very clear if we get * interrupted. */ int n = 0; int howmany = ioctl(0, 'ichr', &n); if (howmany >= 0 && n > 0) { have_pending = TRUE; } #elif HAVE_SELECT fd_set fdset; struct timeval ktimeout; ktimeout.tv_sec = ktimeout.tv_usec = 0; FD_ZERO(&fdset); FD_SET(SP_PARM->_checkfd, &fdset); if (select(SP_PARM->_checkfd + 1, &fdset, NULL, NULL, &ktimeout) != 0) { have_pending = TRUE; } #endif } if (have_pending) { SP_PARM->_fifohold = 5; NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG); } return FALSE; } /* put char at lower right corner */ static void PutCharLR(NCURSES_SP_DCLx const ARG_CH_T ch) { if (!auto_right_margin) { /* we can put the char directly */ PutAttrChar(NCURSES_SP_ARGx ch); } else if (enter_am_mode && exit_am_mode) { /* we can suppress automargin */ NCURSES_PUTP2("exit_am_mode", exit_am_mode); PutAttrChar(NCURSES_SP_ARGx ch); SP_PARM->_curscol--; position_check(NCURSES_SP_ARGx SP_PARM->_cursrow, SP_PARM->_curscol, "exit_am_mode"); NCURSES_PUTP2("enter_am_mode", enter_am_mode); } else if ((enter_insert_mode && exit_insert_mode) || insert_character || parm_ich) { GoTo(NCURSES_SP_ARGx screen_lines(SP_PARM) - 1, screen_columns(SP_PARM) - 2); PutAttrChar(NCURSES_SP_ARGx ch); GoTo(NCURSES_SP_ARGx screen_lines(SP_PARM) - 1, screen_columns(SP_PARM) - 2); InsStr(NCURSES_SP_ARGx NewScreen(SP_PARM)->_line[screen_lines(SP_PARM) - 1].text + screen_columns(SP_PARM) - 2, 1); } } /* * Wrap the cursor position, i.e., advance to the beginning of the next line. */ static void wrap_cursor(NCURSES_SP_DCL0) { if (eat_newline_glitch) { /* * xenl can manifest two different ways. The vt100 way is that, when * you'd expect the cursor to wrap, it stays hung at the right margin * (on top of the character just emitted) and doesn't wrap until the * *next* graphic char is emitted. The c100 way is to ignore LF * received just after an am wrap. * * An aggressive way to handle this would be to emit CR/LF after the * char and then assume the wrap is done, you're on the first position * of the next line, and the terminal out of its weird state. Here * it's safe to just tell the code that the cursor is in hyperspace and * let the next mvcur() call straighten things out. */ SP_PARM->_curscol = -1; SP_PARM->_cursrow = -1; } else if (auto_right_margin) { SP_PARM->_curscol = 0; SP_PARM->_cursrow++; /* * We've actually moved - but may have to work around problems with * video attributes not working. */ if (!move_standout_mode && AttrOf(SCREEN_ATTRS(SP_PARM))) { TR(TRACE_CHARPUT, ("turning off (%#lx) %s before wrapping", (unsigned long) AttrOf(SCREEN_ATTRS(SP_PARM)), _traceattr(AttrOf(SCREEN_ATTRS(SP_PARM))))); (void) VIDATTR(SP_PARM, A_NORMAL, 0); } } else { SP_PARM->_curscol--; } position_check(NCURSES_SP_ARGx SP_PARM->_cursrow, SP_PARM->_curscol, "wrap_cursor"); } static NCURSES_INLINE void PutChar(NCURSES_SP_DCLx const ARG_CH_T ch) /* insert character, handling automargin stuff */ { if (SP_PARM->_cursrow == screen_lines(SP_PARM) - 1 && SP_PARM->_curscol == screen_columns(SP_PARM) - 1) { PutCharLR(NCURSES_SP_ARGx ch); } else { PutAttrChar(NCURSES_SP_ARGx ch); } if (SP_PARM->_curscol >= screen_columns(SP_PARM)) wrap_cursor(NCURSES_SP_ARG); position_check(NCURSES_SP_ARGx SP_PARM->_cursrow, SP_PARM->_curscol, "PutChar"); } /* * Check whether the given character can be output by clearing commands. This * includes test for being a space and not including any 'bad' attributes, such * as A_REVERSE. All attribute flags which don't affect appearance of a space * or can be output by clearing (A_COLOR in case of bce-terminal) are excluded. */ static NCURSES_INLINE bool can_clear_with(NCURSES_SP_DCLx ARG_CH_T ch) { if (!back_color_erase && SP_PARM->_coloron) { #if NCURSES_EXT_FUNCS int pair; if (!SP_PARM->_default_color) return FALSE; if (SP_PARM->_default_fg != C_MASK || SP_PARM->_default_bg != C_MASK) return FALSE; if ((pair = GetPair(CHDEREF(ch))) != 0) { NCURSES_COLOR_T fg, bg; if (NCURSES_SP_NAME(pair_content) (NCURSES_SP_ARGx (short) pair, &fg, &bg) == ERR || (fg != C_MASK || bg != C_MASK)) { return FALSE; } } #else if (AttrOfD(ch) & A_COLOR) return FALSE; #endif } return (ISBLANK(CHDEREF(ch)) && (AttrOfD(ch) & ~(NONBLANK_ATTR | A_COLOR)) == BLANK_ATTR); } /* * Issue a given span of characters from an array. * Must be functionally equivalent to: * for (i = 0; i < num; i++) * PutChar(ntext[i]); * but can leave the cursor positioned at the middle of the interval. * * Returns: 0 - cursor is at the end of interval * 1 - cursor is somewhere in the middle * * This code is optimized using ech and rep. */ static int EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num) { int i; TR(TRACE_CHARPUT, ("EmitRange %d:%s", num, _nc_viscbuf(ntext, num))); if (erase_chars || repeat_char) { while (num > 0) { int runcount; NCURSES_CH_T ntext0; while (num > 1 && !CharEq(ntext[0], ntext[1])) { PutChar(NCURSES_SP_ARGx CHREF(ntext[0])); ntext++; num--; } ntext0 = ntext[0]; if (num == 1) { PutChar(NCURSES_SP_ARGx CHREF(ntext0)); return 0; } runcount = 2; while (runcount < num && CharEq(ntext[runcount], ntext0)) runcount++; /* * The cost expression in the middle isn't exactly right. * _cup_ch_cost is an upper bound on the cost for moving to the * end of the erased area, but not the cost itself (which we * can't compute without emitting the move). This may result * in erase_chars not getting used in some situations for * which it would be marginally advantageous. */ if (erase_chars && runcount > SP_PARM->_ech_cost + SP_PARM->_cup_ch_cost && can_clear_with(NCURSES_SP_ARGx CHREF(ntext0))) { UpdateAttrs(SP_PARM, ntext0); NCURSES_PUTP2("erase_chars", TPARM_1(erase_chars, runcount)); /* * If this is the last part of the given interval, * don't bother moving cursor, since it can be the * last update on the line. */ if (runcount < num) { GoTo(NCURSES_SP_ARGx SP_PARM->_cursrow, SP_PARM->_curscol + runcount); } else { return 1; /* cursor stays in the middle */ } } else if (repeat_char && runcount > SP_PARM->_rep_cost) { bool wrap_possible = (SP_PARM->_curscol + runcount >= screen_columns(SP_PARM)); int rep_count = runcount; if (wrap_possible) rep_count--; UpdateAttrs(SP_PARM, ntext0); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_2(repeat_char, CharOf(ntext0), rep_count), rep_count, NCURSES_SP_NAME(_nc_outch)); SP_PARM->_curscol += rep_count; if (wrap_possible) PutChar(NCURSES_SP_ARGx CHREF(ntext0)); } else { for (i = 0; i < runcount; i++) PutChar(NCURSES_SP_ARGx CHREF(ntext[i])); } ntext += runcount; num -= runcount; } return 0; } for (i = 0; i < num; i++) PutChar(NCURSES_SP_ARGx CHREF(ntext[i])); return 0; } /* * Output the line in the given range [first .. last] * * If there's a run of identical characters that's long enough to justify * cursor movement, use that also. * * Returns: same as EmitRange */ static int PutRange(NCURSES_SP_DCLx const NCURSES_CH_T * otext, const NCURSES_CH_T * ntext, int row, int first, int last) { int i, j, same; int rc; TR(TRACE_CHARPUT, ("PutRange(%p, %p, %p, %d, %d, %d)", (void *) SP_PARM, (const void *) otext, (const void *) ntext, row, first, last)); if (otext != ntext && (last - first + 1) > SP_PARM->_inline_cost) { for (j = first, same = 0; j <= last; j++) { if (!same && isWidecExt(otext[j])) continue; if (CharEq(otext[j], ntext[j])) { same++; } else { if (same > SP_PARM->_inline_cost) { EmitRange(NCURSES_SP_ARGx ntext + first, j - same - first); GoTo(NCURSES_SP_ARGx row, first = j); } same = 0; } } i = EmitRange(NCURSES_SP_ARGx ntext + first, j - same - first); /* * Always return 1 for the next GoTo() after a PutRange() if we found * identical characters at end of interval */ rc = (same == 0 ? i : 1); } else { rc = EmitRange(NCURSES_SP_ARGx ntext + first, last - first + 1); } return rc; } /* leave unbracketed here so 'indent' works */ #define MARK_NOCHANGE(win,row) \ win->_line[row].firstchar = _NOCHANGE; \ win->_line[row].lastchar = _NOCHANGE; \ if_USE_SCROLL_HINTS(win->_line[row].oldindex = row) NCURSES_EXPORT(int) TINFO_DOUPDATE(NCURSES_SP_DCL0) { int i; int nonempty; #if USE_TRACE_TIMES struct tms before, after; #endif /* USE_TRACE_TIMES */ T((T_CALLED("_nc_tinfo:doupdate(%p)"), (void *) SP_PARM)); if (SP_PARM == 0) returnCode(ERR); #if !USE_REENTRANT /* * It is "legal" but unlikely that an application could assign a new * value to one of the standard windows. Check for that possibility * and try to recover. * * We do not allow applications to assign new values in the reentrant * model. */ #define SyncScreens(internal,exported) \ if (internal == 0) internal = exported; \ if (internal != exported) exported = internal SyncScreens(CurScreen(SP_PARM), curscr); SyncScreens(NewScreen(SP_PARM), newscr); SyncScreens(StdScreen(SP_PARM), stdscr); #endif if (CurScreen(SP_PARM) == 0 || NewScreen(SP_PARM) == 0 || StdScreen(SP_PARM) == 0) returnCode(ERR); #ifdef TRACE if (USE_TRACEF(TRACE_UPDATE)) { if (CurScreen(SP_PARM)->_clear) _tracef("curscr is clear"); else _tracedump("curscr", CurScreen(SP_PARM)); _tracedump("newscr", NewScreen(SP_PARM)); _nc_unlock_global(tracef); } #endif /* TRACE */ _nc_signal_handler(FALSE); if (SP_PARM->_fifohold) SP_PARM->_fifohold--; #if USE_SIZECHANGE if (SP_PARM->_endwin || _nc_handle_sigwinch(SP_PARM)) { /* * This is a transparent extension: XSI does not address it, * and applications need not know that ncurses can do it. * * Check if the terminal size has changed while curses was off * (this can happen in an xterm, for example), and resize the * ncurses data structures accordingly. */ _nc_update_screensize(SP_PARM); } #endif if (SP_PARM->_endwin) { T(("coming back from shell mode")); NCURSES_SP_NAME(reset_prog_mode) (NCURSES_SP_ARG); NCURSES_SP_NAME(_nc_mvcur_resume) (NCURSES_SP_ARG); NCURSES_SP_NAME(_nc_screen_resume) (NCURSES_SP_ARG); SP_PARM->_mouse_resume(SP_PARM); SP_PARM->_endwin = FALSE; } #if USE_TRACE_TIMES /* zero the metering machinery */ RESET_OUTCHARS(); (void) times(&before); #endif /* USE_TRACE_TIMES */ /* * This is the support for magic-cookie terminals. The theory: we scan * the virtual screen looking for attribute turnons. Where we find one, * check to make sure it's realizable by seeing if the required number of * un-attributed blanks are present before and after the attributed range; * try to shift the range boundaries over blanks (not changing the screen * display) so this becomes true. If it is, shift the beginning attribute * change appropriately (the end one, if we've gotten this far, is * guaranteed room for its cookie). If not, nuke the added attributes out * of the span. */ #if USE_XMC_SUPPORT if (magic_cookie_glitch > 0) { int j, k; attr_t rattr = A_NORMAL; for (i = 0; i < screen_lines(SP_PARM); i++) { for (j = 0; j < screen_columns(SP_PARM); j++) { bool failed = FALSE; NCURSES_CH_T *thisline = NewScreen(SP_PARM)->_line[i].text; attr_t thisattr = AttrOf(thisline[j]) & SP_PARM->_xmc_triggers; attr_t turnon = thisattr & ~rattr; /* is an attribute turned on here? */ if (turnon == 0) { rattr = thisattr; continue; } TR(TRACE_ATTRS, ("At (%d, %d): from %s...", i, j, _traceattr(rattr))); TR(TRACE_ATTRS, ("...to %s", _traceattr(turnon))); /* * If the attribute change location is a blank with a "safe" * attribute, undo the attribute turnon. This may ensure * there's enough room to set the attribute before the first * non-blank in the run. */ #define SAFE(scr,a) (!((a) & (scr)->_xmc_triggers)) if (ISBLANK(thisline[j]) && SAFE(SP_PARM, turnon)) { RemAttr(thisline[j], turnon); continue; } /* check that there's enough room at start of span */ for (k = 1; k <= magic_cookie_glitch; k++) { if (j - k < 0 || !ISBLANK(thisline[j - k]) || !SAFE(SP_PARM, AttrOf(thisline[j - k]))) { failed = TRUE; TR(TRACE_ATTRS, ("No room at start in %d,%d%s%s", i, j - k, (ISBLANK(thisline[j - k]) ? "" : ":nonblank"), (SAFE(SP_PARM, AttrOf(thisline[j - k])) ? "" : ":unsafe"))); break; } } if (!failed) { bool end_onscreen = FALSE; int m, n = j; /* find end of span, if it's onscreen */ for (m = i; m < screen_lines(SP_PARM); m++) { for (; n < screen_columns(SP_PARM); n++) { attr_t testattr = AttrOf(NewScreen(SP_PARM)->_line[m].text[n]); if ((testattr & SP_PARM->_xmc_triggers) == rattr) { end_onscreen = TRUE; TR(TRACE_ATTRS, ("Range attributed with %s ends at (%d, %d)", _traceattr(turnon), m, n)); goto foundit; } } n = 0; } TR(TRACE_ATTRS, ("Range attributed with %s ends offscreen", _traceattr(turnon))); foundit:; if (end_onscreen) { NCURSES_CH_T *lastline = NewScreen(SP_PARM)->_line[m].text; /* * If there are safely-attributed blanks at the end of * the range, shorten the range. This will help ensure * that there is enough room at end of span. */ while (n >= 0 && ISBLANK(lastline[n]) && SAFE(SP_PARM, AttrOf(lastline[n]))) { RemAttr(lastline[n--], turnon); } /* check that there's enough room at end of span */ for (k = 1; k <= magic_cookie_glitch; k++) { if (n + k >= screen_columns(SP_PARM) || !ISBLANK(lastline[n + k]) || !SAFE(SP_PARM, AttrOf(lastline[n + k]))) { failed = TRUE; TR(TRACE_ATTRS, ("No room at end in %d,%d%s%s", i, j - k, (ISBLANK(lastline[n + k]) ? "" : ":nonblank"), (SAFE(SP_PARM, AttrOf(lastline[n + k])) ? "" : ":unsafe"))); break; } } } } if (failed) { int p, q = j; TR(TRACE_ATTRS, ("Clearing %s beginning at (%d, %d)", _traceattr(turnon), i, j)); /* turn off new attributes over span */ for (p = i; p < screen_lines(SP_PARM); p++) { for (; q < screen_columns(SP_PARM); q++) { attr_t testattr = AttrOf(newscr->_line[p].text[q]); if ((testattr & SP_PARM->_xmc_triggers) == rattr) goto foundend; RemAttr(NewScreen(SP_PARM)->_line[p].text[q], turnon); } q = 0; } foundend:; } else { TR(TRACE_ATTRS, ("Cookie space for %s found before (%d, %d)", _traceattr(turnon), i, j)); /* * Back up the start of range so there's room for cookies * before the first nonblank character. */ for (k = 1; k <= magic_cookie_glitch; k++) AddAttr(thisline[j - k], turnon); } rattr = thisattr; } } #ifdef TRACE /* show altered highlights after magic-cookie check */ if (USE_TRACEF(TRACE_UPDATE)) { _tracef("After magic-cookie check..."); _tracedump("newscr", NewScreen(SP_PARM)); _nc_unlock_global(tracef); } #endif /* TRACE */ } #endif /* USE_XMC_SUPPORT */ nonempty = 0; if (CurScreen(SP_PARM)->_clear || NewScreen(SP_PARM)->_clear) { /* force refresh ? */ ClrUpdate(NCURSES_SP_ARG); CurScreen(SP_PARM)->_clear = FALSE; /* reset flag */ NewScreen(SP_PARM)->_clear = FALSE; /* reset flag */ } else { int changedlines = CHECK_INTERVAL; if (check_pending(NCURSES_SP_ARG)) goto cleanup; nonempty = min(screen_lines(SP_PARM), NewScreen(SP_PARM)->_maxy + 1); if (SP_PARM->_scrolling) { NCURSES_SP_NAME(_nc_scroll_optimize) (NCURSES_SP_ARG); } nonempty = ClrBottom(NCURSES_SP_ARGx nonempty); TR(TRACE_UPDATE, ("Transforming lines, nonempty %d", nonempty)); for (i = 0; i < nonempty; i++) { /* * Here is our line-breakout optimization. */ if (changedlines == CHECK_INTERVAL) { if (check_pending(NCURSES_SP_ARG)) goto cleanup; changedlines = 0; } /* * newscr->line[i].firstchar is normally set * by wnoutrefresh. curscr->line[i].firstchar * is normally set by _nc_scroll_window in the * vertical-movement optimization code, */ if (NewScreen(SP_PARM)->_line[i].firstchar != _NOCHANGE || CurScreen(SP_PARM)->_line[i].firstchar != _NOCHANGE) { TransformLine(NCURSES_SP_ARGx i); changedlines++; } /* mark line changed successfully */ if (i <= NewScreen(SP_PARM)->_maxy) { MARK_NOCHANGE(NewScreen(SP_PARM), i); } if (i <= CurScreen(SP_PARM)->_maxy) { MARK_NOCHANGE(CurScreen(SP_PARM), i); } } } /* put everything back in sync */ for (i = nonempty; i <= NewScreen(SP_PARM)->_maxy; i++) { MARK_NOCHANGE(NewScreen(SP_PARM), i); } for (i = nonempty; i <= CurScreen(SP_PARM)->_maxy; i++) { MARK_NOCHANGE(CurScreen(SP_PARM), i); } if (!NewScreen(SP_PARM)->_leaveok) { CurScreen(SP_PARM)->_curx = NewScreen(SP_PARM)->_curx; CurScreen(SP_PARM)->_cury = NewScreen(SP_PARM)->_cury; GoTo(NCURSES_SP_ARGx CurScreen(SP_PARM)->_cury, CurScreen(SP_PARM)->_curx); } cleanup: /* * We would like to keep the physical screen in normal mode in case we get * other processes writing to the screen. This goal cannot be met for * magic cookies since it interferes with attributes that may propagate * past the current position. */ #if USE_XMC_SUPPORT if (magic_cookie_glitch != 0) #endif UpdateAttrs(SP_PARM, normal); NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG); WINDOW_ATTRS(CurScreen(SP_PARM)) = WINDOW_ATTRS(NewScreen(SP_PARM)); #if USE_TRACE_TIMES (void) times(&after); TR(TRACE_TIMES, ("Update cost: %ld chars, %ld clocks system time, %ld clocks user time", _nc_outchars, (long) (after.tms_stime - before.tms_stime), (long) (after.tms_utime - before.tms_utime))); #endif /* USE_TRACE_TIMES */ _nc_signal_handler(TRUE); returnCode(OK); } #if NCURSES_SP_FUNCS && !defined(USE_TERM_DRIVER) NCURSES_EXPORT(int) doupdate(void) { return TINFO_DOUPDATE(CURRENT_SCREEN); } #endif /* * ClrBlank(win) * * Returns the attributed character that corresponds to the "cleared" * screen. If the terminal has the back-color-erase feature, this will be * colored according to the wbkgd() call. * * We treat 'curscr' specially because it isn't supposed to be set directly * in the wbkgd() call. Assume 'stdscr' for this case. */ #define BCE_ATTRS (A_NORMAL|A_COLOR) #define BCE_BKGD(sp,win) (((win) == CurScreen(sp) ? StdScreen(sp) : (win))->_nc_bkgd) static NCURSES_INLINE NCURSES_CH_T ClrBlank(NCURSES_SP_DCLx WINDOW *win) { NCURSES_CH_T blank = blankchar; if (back_color_erase) AddAttr(blank, (AttrOf(BCE_BKGD(SP_PARM, win)) & BCE_ATTRS)); return blank; } /* ** ClrUpdate() ** ** Update by clearing and redrawing the entire screen. ** */ static void ClrUpdate(NCURSES_SP_DCL0) { TR(TRACE_UPDATE, (T_CALLED("ClrUpdate"))); if (0 != SP_PARM) { int i; NCURSES_CH_T blank = ClrBlank(NCURSES_SP_ARGx StdScreen(SP_PARM)); int nonempty = min(screen_lines(SP_PARM), NewScreen(SP_PARM)->_maxy + 1); ClearScreen(NCURSES_SP_ARGx blank); TR(TRACE_UPDATE, ("updating screen from scratch")); nonempty = ClrBottom(NCURSES_SP_ARGx nonempty); for (i = 0; i < nonempty; i++) TransformLine(NCURSES_SP_ARGx i); } TR(TRACE_UPDATE, (T_RETURN(""))); } /* ** ClrToEOL(blank) ** ** Clear to end of current line, starting at the cursor position */ static void ClrToEOL(NCURSES_SP_DCLx NCURSES_CH_T blank, int needclear) { int j; if (CurScreen(SP_PARM) != 0 && SP_PARM->_cursrow >= 0) { for (j = SP_PARM->_curscol; j < screen_columns(SP_PARM); j++) { if (j >= 0) { NCURSES_CH_T *cp = &(CurScreen(SP_PARM)->_line[SP_PARM->_cursrow].text[j]); if (!CharEq(*cp, blank)) { *cp = blank; needclear = TRUE; } } } } if (needclear) { UpdateAttrs(SP_PARM, blank); if (clr_eol && SP_PARM->_el_cost <= (screen_columns(SP_PARM) - SP_PARM->_curscol)) { NCURSES_PUTP2("clr_eol", clr_eol); } else { int count = (screen_columns(SP_PARM) - SP_PARM->_curscol); while (count-- > 0) PutChar(NCURSES_SP_ARGx CHREF(blank)); } } } /* ** ClrToEOS(blank) ** ** Clear to end of screen, starting at the cursor position */ static void ClrToEOS(NCURSES_SP_DCLx NCURSES_CH_T blank) { int row, col; row = SP_PARM->_cursrow; col = SP_PARM->_curscol; if (row < 0) row = 0; if (col < 0) col = 0; UpdateAttrs(SP_PARM, blank); TPUTS_TRACE("clr_eos"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx clr_eos, screen_lines(SP_PARM) - row, NCURSES_SP_NAME(_nc_outch)); while (col < screen_columns(SP_PARM)) CurScreen(SP_PARM)->_line[row].text[col++] = blank; for (row++; row < screen_lines(SP_PARM); row++) { for (col = 0; col < screen_columns(SP_PARM); col++) CurScreen(SP_PARM)->_line[row].text[col] = blank; } } /* * ClrBottom(total) * * Test if clearing the end of the screen would satisfy part of the * screen-update. Do this by scanning backwards through the lines in the * screen, checking if each is blank, and one or more are changed. */ static int ClrBottom(NCURSES_SP_DCLx int total) { int row; int col; int top = total; int last = min(screen_columns(SP_PARM), NewScreen(SP_PARM)->_maxx + 1); NCURSES_CH_T blank = NewScreen(SP_PARM)->_line[total - 1].text[last - 1]; bool ok; if (clr_eos && can_clear_with(NCURSES_SP_ARGx CHREF(blank))) { for (row = total - 1; row >= 0; row--) { for (col = 0, ok = TRUE; ok && col < last; col++) { ok = (CharEq(NewScreen(SP_PARM)->_line[row].text[col], blank)); } if (!ok) break; for (col = 0; ok && col < last; col++) { ok = (CharEq(CurScreen(SP_PARM)->_line[row].text[col], blank)); } if (!ok) top = row; } /* don't use clr_eos for just one line if clr_eol available */ if (top < total) { GoTo(NCURSES_SP_ARGx top, 0); ClrToEOS(NCURSES_SP_ARGx blank); if (SP_PARM->oldhash && SP_PARM->newhash) { for (row = top; row < screen_lines(SP_PARM); row++) SP_PARM->oldhash[row] = SP_PARM->newhash[row]; } } } return top; } #if USE_XMC_SUPPORT #if USE_WIDEC_SUPPORT #define check_xmc_transition(sp, a, b) \ ((((a)->attr ^ (b)->attr) & ~((a)->attr) & (sp)->_xmc_triggers) != 0) #define xmc_turn_on(sp,a,b) check_xmc_transition(sp,&(a), &(b)) #else #define xmc_turn_on(sp,a,b) ((((a)^(b)) & ~(a) & (sp)->_xmc_triggers) != 0) #endif #define xmc_new(sp,r,c) NewScreen(sp)->_line[r].text[c] #define xmc_turn_off(sp,a,b) xmc_turn_on(sp,b,a) #endif /* USE_XMC_SUPPORT */ /* ** TransformLine(lineno) ** ** Transform the given line in curscr to the one in newscr, using ** Insert/Delete Character if idcok && has_ic(). ** ** firstChar = position of first different character in line ** oLastChar = position of last different character in old line ** nLastChar = position of last different character in new line ** ** move to firstChar ** overwrite chars up to min(oLastChar, nLastChar) ** if oLastChar < nLastChar ** insert newLine[oLastChar+1..nLastChar] ** else ** delete oLastChar - nLastChar spaces */ static void TransformLine(NCURSES_SP_DCLx int const lineno) { int firstChar, oLastChar, nLastChar; NCURSES_CH_T *newLine = NewScreen(SP_PARM)->_line[lineno].text; NCURSES_CH_T *oldLine = CurScreen(SP_PARM)->_line[lineno].text; int n; bool attrchanged = FALSE; TR(TRACE_UPDATE, (T_CALLED("TransformLine(%p, %d)"), (void *) SP_PARM, lineno)); /* copy new hash value to old one */ if (SP_PARM->oldhash && SP_PARM->newhash) SP_PARM->oldhash[lineno] = SP_PARM->newhash[lineno]; /* * If we have colors, there is the possibility of having two color pairs * that display as the same colors. For instance, Lynx does this. Check * for this case, and update the old line with the new line's colors when * they are equivalent. */ if (SP_PARM->_coloron) { int oldPair; int newPair; for (n = 0; n < screen_columns(SP_PARM); n++) { if (!CharEq(newLine[n], oldLine[n])) { oldPair = GetPair(oldLine[n]); newPair = GetPair(newLine[n]); if (oldPair != newPair && unColor(oldLine[n]) == unColor(newLine[n])) { if (oldPair < SP_PARM->_pair_limit && newPair < SP_PARM->_pair_limit && (SP_PARM->_color_pairs[oldPair] == SP_PARM->_color_pairs[newPair])) { SetPair(oldLine[n], GetPair(newLine[n])); } } } } } if (ceol_standout_glitch && clr_eol) { firstChar = 0; while (firstChar < screen_columns(SP_PARM)) { if (!SameAttrOf(newLine[firstChar], oldLine[firstChar])) { attrchanged = TRUE; break; } firstChar++; } } firstChar = 0; if (attrchanged) { /* we may have to disregard the whole line */ GoTo(NCURSES_SP_ARGx lineno, firstChar); ClrToEOL(NCURSES_SP_ARGx ClrBlank(NCURSES_SP_ARGx CurScreen(SP_PARM)), FALSE); PutRange(NCURSES_SP_ARGx oldLine, newLine, lineno, 0, screen_columns(SP_PARM) - 1); #if USE_XMC_SUPPORT /* * This is a very simple loop to paint characters which may have the * magic cookie glitch embedded. It doesn't know much about video * attributes which are continued from one line to the next. It * assumes that we have filtered out requests for attribute changes * that do not get mapped to blank positions. * * FIXME: we are not keeping track of where we put the cookies, so this * will work properly only once, since we may overwrite a cookie in a * following operation. */ } else if (magic_cookie_glitch > 0) { GoTo(NCURSES_SP_ARGx lineno, firstChar); for (n = 0; n < screen_columns(SP_PARM); n++) { int m = n + magic_cookie_glitch; /* check for turn-on: * If we are writing an attributed blank, where the * previous cell is not attributed. */ if (ISBLANK(newLine[n]) && ((n > 0 && xmc_turn_on(SP_PARM, newLine[n - 1], newLine[n])) || (n == 0 && lineno > 0 && xmc_turn_on(SP_PARM, xmc_new(SP_PARM, lineno - 1, screen_columns(SP_PARM) - 1), newLine[n])))) { n = m; } PutChar(NCURSES_SP_ARGx CHREF(newLine[n])); /* check for turn-off: * If we are writing an attributed non-blank, where the * next cell is blank, and not attributed. */ if (!ISBLANK(newLine[n]) && ((n + 1 < screen_columns(SP_PARM) && xmc_turn_off(SP_PARM, newLine[n], newLine[n + 1])) || (n + 1 >= screen_columns(SP_PARM) && lineno + 1 < screen_lines(SP_PARM) && xmc_turn_off(SP_PARM, newLine[n], xmc_new(SP_PARM, lineno + 1, 0))))) { n = m; } } #endif } else { NCURSES_CH_T blank; /* it may be cheap to clear leading whitespace with clr_bol */ blank = newLine[0]; if (clr_bol && can_clear_with(NCURSES_SP_ARGx CHREF(blank))) { int oFirstChar, nFirstChar; for (oFirstChar = 0; oFirstChar < screen_columns(SP_PARM); oFirstChar++) if (!CharEq(oldLine[oFirstChar], blank)) break; for (nFirstChar = 0; nFirstChar < screen_columns(SP_PARM); nFirstChar++) if (!CharEq(newLine[nFirstChar], blank)) break; if (nFirstChar == oFirstChar) { firstChar = nFirstChar; /* find the first differing character */ while (firstChar < screen_columns(SP_PARM) && CharEq(newLine[firstChar], oldLine[firstChar])) firstChar++; } else if (oFirstChar > nFirstChar) { firstChar = nFirstChar; } else { /* oFirstChar < nFirstChar */ firstChar = oFirstChar; if (SP_PARM->_el1_cost < nFirstChar - oFirstChar) { if (nFirstChar >= screen_columns(SP_PARM) && SP_PARM->_el_cost <= SP_PARM->_el1_cost) { GoTo(NCURSES_SP_ARGx lineno, 0); UpdateAttrs(SP_PARM, blank); NCURSES_PUTP2("clr_eol", clr_eol); } else { GoTo(NCURSES_SP_ARGx lineno, nFirstChar - 1); UpdateAttrs(SP_PARM, blank); NCURSES_PUTP2("clr_bol", clr_bol); } while (firstChar < nFirstChar) oldLine[firstChar++] = blank; } } } else { /* find the first differing character */ while (firstChar < screen_columns(SP_PARM) && CharEq(newLine[firstChar], oldLine[firstChar])) firstChar++; } /* if there wasn't one, we're done */ if (firstChar >= screen_columns(SP_PARM)) { TR(TRACE_UPDATE, (T_RETURN(""))); return; } blank = newLine[screen_columns(SP_PARM) - 1]; if (!can_clear_with(NCURSES_SP_ARGx CHREF(blank))) { /* find the last differing character */ nLastChar = screen_columns(SP_PARM) - 1; while (nLastChar > firstChar && CharEq(newLine[nLastChar], oldLine[nLastChar])) nLastChar--; if (nLastChar >= firstChar) { GoTo(NCURSES_SP_ARGx lineno, firstChar); PutRange(NCURSES_SP_ARGx oldLine, newLine, lineno, firstChar, nLastChar); memcpy(oldLine + firstChar, newLine + firstChar, (unsigned) (nLastChar - firstChar + 1) * sizeof(NCURSES_CH_T)); } TR(TRACE_UPDATE, (T_RETURN(""))); return; } /* find last non-blank character on old line */ oLastChar = screen_columns(SP_PARM) - 1; while (oLastChar > firstChar && CharEq(oldLine[oLastChar], blank)) oLastChar--; /* find last non-blank character on new line */ nLastChar = screen_columns(SP_PARM) - 1; while (nLastChar > firstChar && CharEq(newLine[nLastChar], blank)) nLastChar--; if ((nLastChar == firstChar) && (SP_PARM->_el_cost < (oLastChar - nLastChar))) { GoTo(NCURSES_SP_ARGx lineno, firstChar); if (!CharEq(newLine[firstChar], blank)) PutChar(NCURSES_SP_ARGx CHREF(newLine[firstChar])); ClrToEOL(NCURSES_SP_ARGx blank, FALSE); } else if ((nLastChar != oLastChar) && (!CharEq(newLine[nLastChar], oldLine[oLastChar]) || !(SP_PARM->_nc_sp_idcok && NCURSES_SP_NAME(has_ic) (NCURSES_SP_ARG)))) { GoTo(NCURSES_SP_ARGx lineno, firstChar); if ((oLastChar - nLastChar) > SP_PARM->_el_cost) { if (PutRange(NCURSES_SP_ARGx oldLine, newLine, lineno, firstChar, nLastChar)) { GoTo(NCURSES_SP_ARGx lineno, nLastChar + 1); } ClrToEOL(NCURSES_SP_ARGx blank, FALSE); } else { n = max(nLastChar, oLastChar); PutRange(NCURSES_SP_ARGx oldLine, newLine, lineno, firstChar, n); } } else { int nLastNonblank = nLastChar; int oLastNonblank = oLastChar; /* find the last characters that really differ */ /* can be -1 if no characters differ */ while (CharEq(newLine[nLastChar], oldLine[oLastChar])) { /* don't split a wide char */ if (isWidecExt(newLine[nLastChar]) && !CharEq(newLine[nLastChar - 1], oldLine[oLastChar - 1])) break; nLastChar--; oLastChar--; if (nLastChar == -1 || oLastChar == -1) break; } n = min(oLastChar, nLastChar); if (n >= firstChar) { GoTo(NCURSES_SP_ARGx lineno, firstChar); PutRange(NCURSES_SP_ARGx oldLine, newLine, lineno, firstChar, n); } if (oLastChar < nLastChar) { int m = max(nLastNonblank, oLastNonblank); #if USE_WIDEC_SUPPORT if (n) { while (isWidecExt(newLine[n + 1]) && n) { --n; --oLastChar; /* increase cost */ } } else if (n >= firstChar && isWidecBase(newLine[n])) { while (isWidecExt(newLine[n + 1])) { ++n; ++oLastChar; /* decrease cost */ } } #endif GoTo(NCURSES_SP_ARGx lineno, n + 1); if ((nLastChar < nLastNonblank) || InsCharCost(SP_PARM, nLastChar - oLastChar) > (m - n)) { PutRange(NCURSES_SP_ARGx oldLine, newLine, lineno, n + 1, m); } else { InsStr(NCURSES_SP_ARGx &newLine[n + 1], nLastChar - oLastChar); } } else if (oLastChar > nLastChar) { GoTo(NCURSES_SP_ARGx lineno, n + 1); if (DelCharCost(SP_PARM, oLastChar - nLastChar) > SP_PARM->_el_cost + nLastNonblank - (n + 1)) { if (PutRange(NCURSES_SP_ARGx oldLine, newLine, lineno, n + 1, nLastNonblank)) { GoTo(NCURSES_SP_ARGx lineno, nLastNonblank + 1); } ClrToEOL(NCURSES_SP_ARGx blank, FALSE); } else { /* * The delete-char sequence will * effectively shift in blanks from the * right margin of the screen. Ensure * that they are the right color by * setting the video attributes from * the last character on the row. */ UpdateAttrs(SP_PARM, blank); DelChar(NCURSES_SP_ARGx oLastChar - nLastChar); } } } } /* update the code's internal representation */ if (screen_columns(SP_PARM) > firstChar) memcpy(oldLine + firstChar, newLine + firstChar, (unsigned) (screen_columns(SP_PARM) - firstChar) * sizeof(NCURSES_CH_T)); TR(TRACE_UPDATE, (T_RETURN(""))); return; } /* ** ClearScreen(blank) ** ** Clear the physical screen and put cursor at home ** */ static void ClearScreen(NCURSES_SP_DCLx NCURSES_CH_T blank) { int i, j; bool fast_clear = (clear_screen || clr_eos || clr_eol); TR(TRACE_UPDATE, ("ClearScreen() called")); #if NCURSES_EXT_FUNCS if (SP_PARM->_coloron && !SP_PARM->_default_color) { NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx (short) GET_SCREEN_PAIR(SP_PARM), 0, FALSE, NCURSES_SP_NAME(_nc_outch)); if (!back_color_erase) { fast_clear = FALSE; } } #endif if (fast_clear) { if (clear_screen) { UpdateAttrs(SP_PARM, blank); NCURSES_PUTP2("clear_screen", clear_screen); SP_PARM->_cursrow = SP_PARM->_curscol = 0; position_check(NCURSES_SP_ARGx SP_PARM->_cursrow, SP_PARM->_curscol, "ClearScreen"); } else if (clr_eos) { SP_PARM->_cursrow = SP_PARM->_curscol = -1; GoTo(NCURSES_SP_ARGx 0, 0); UpdateAttrs(SP_PARM, blank); TPUTS_TRACE("clr_eos"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx clr_eos, screen_lines(SP_PARM), NCURSES_SP_NAME(_nc_outch)); } else if (clr_eol) { SP_PARM->_cursrow = SP_PARM->_curscol = -1; UpdateAttrs(SP_PARM, blank); for (i = 0; i < screen_lines(SP_PARM); i++) { GoTo(NCURSES_SP_ARGx i, 0); NCURSES_PUTP2("clr_eol", clr_eol); } GoTo(NCURSES_SP_ARGx 0, 0); } } else { UpdateAttrs(SP_PARM, blank); for (i = 0; i < screen_lines(SP_PARM); i++) { GoTo(NCURSES_SP_ARGx i, 0); for (j = 0; j < screen_columns(SP_PARM); j++) PutChar(NCURSES_SP_ARGx CHREF(blank)); } GoTo(NCURSES_SP_ARGx 0, 0); } for (i = 0; i < screen_lines(SP_PARM); i++) { for (j = 0; j < screen_columns(SP_PARM); j++) CurScreen(SP_PARM)->_line[i].text[j] = blank; } TR(TRACE_UPDATE, ("screen cleared")); } /* ** InsStr(line, count) ** ** Insert the count characters pointed to by line. ** */ static void InsStr(NCURSES_SP_DCLx NCURSES_CH_T * line, int count) { TR(TRACE_UPDATE, ("InsStr(%p, %p,%d) called", (void *) SP_PARM, (void *) line, count)); /* Prefer parm_ich as it has the smallest cost - no need to shift * the whole line on each character. */ /* The order must match that of InsCharCost. */ if (parm_ich) { TPUTS_TRACE("parm_ich"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(parm_ich, count), count, NCURSES_SP_NAME(_nc_outch)); while (count) { PutAttrChar(NCURSES_SP_ARGx CHREF(*line)); line++; count--; } } else if (enter_insert_mode && exit_insert_mode) { NCURSES_PUTP2("enter_insert_mode", enter_insert_mode); while (count) { PutAttrChar(NCURSES_SP_ARGx CHREF(*line)); if (insert_padding) { NCURSES_PUTP2("insert_padding", insert_padding); } line++; count--; } NCURSES_PUTP2("exit_insert_mode", exit_insert_mode); } else { while (count) { NCURSES_PUTP2("insert_character", insert_character); PutAttrChar(NCURSES_SP_ARGx CHREF(*line)); if (insert_padding) { NCURSES_PUTP2("insert_padding", insert_padding); } line++; count--; } } position_check(NCURSES_SP_ARGx SP_PARM->_cursrow, SP_PARM->_curscol, "InsStr"); } /* ** DelChar(count) ** ** Delete count characters at current position ** */ static void DelChar(NCURSES_SP_DCLx int count) { int n; TR(TRACE_UPDATE, ("DelChar(%p, %d) called, position = (%ld,%ld)", (void *) SP_PARM, count, (long) NewScreen(SP_PARM)->_cury, (long) NewScreen(SP_PARM)->_curx)); if (parm_dch) { TPUTS_TRACE("parm_dch"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(parm_dch, count), count, NCURSES_SP_NAME(_nc_outch)); } else { for (n = 0; n < count; n++) { NCURSES_PUTP2("delete_character", delete_character); } } } /* * Physical-scrolling support * * This code was adapted from Keith Bostic's hardware scrolling * support for 4.4BSD curses. I (esr) translated it to use terminfo * capabilities, narrowed the call interface slightly, and cleaned * up some convoluted tests. I also added support for the memory_above * memory_below, and non_dest_scroll_region capabilities. * * For this code to work, we must have either * change_scroll_region and scroll forward/reverse commands, or * insert and delete line capabilities. * When the scrolling region has been set, the cursor has to * be at the last line of the region to make the scroll up * happen, or on the first line of region to scroll down. * * This code makes one aesthetic decision in the opposite way from * BSD curses. BSD curses preferred pairs of il/dl operations * over scrolls, allegedly because il/dl looked faster. We, on * the other hand, prefer scrolls because (a) they're just as fast * on many terminals and (b) using them avoids bouncing an * unchanged bottom section of the screen up and down, which is * visually nasty. * * (lav): added more cases, used dl/il when bot==maxy and in csr case. * * I used assumption that capabilities il/il1/dl/dl1 work inside * changed scroll region not shifting screen contents outside of it. * If there are any terminals behaving different way, it would be * necessary to add some conditions to scroll_csr_forward/backward. */ /* Try to scroll up assuming given csr (miny, maxy). Returns ERR on failure */ static int scroll_csr_forward(NCURSES_SP_DCLx int n, int top, int bot, int miny, int maxy, NCURSES_CH_T blank) { int i; if (n == 1 && scroll_forward && top == miny && bot == maxy) { GoTo(NCURSES_SP_ARGx bot, 0); UpdateAttrs(SP_PARM, blank); NCURSES_PUTP2("scroll_forward", scroll_forward); } else if (n == 1 && delete_line && bot == maxy) { GoTo(NCURSES_SP_ARGx top, 0); UpdateAttrs(SP_PARM, blank); NCURSES_PUTP2("delete_line", delete_line); } else if (parm_index && top == miny && bot == maxy) { GoTo(NCURSES_SP_ARGx bot, 0); UpdateAttrs(SP_PARM, blank); TPUTS_TRACE("parm_index"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_2(parm_index, n, 0), n, NCURSES_SP_NAME(_nc_outch)); } else if (parm_delete_line && bot == maxy) { GoTo(NCURSES_SP_ARGx top, 0); UpdateAttrs(SP_PARM, blank); TPUTS_TRACE("parm_delete_line"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_2(parm_delete_line, n, 0), n, NCURSES_SP_NAME(_nc_outch)); } else if (scroll_forward && top == miny && bot == maxy) { GoTo(NCURSES_SP_ARGx bot, 0); UpdateAttrs(SP_PARM, blank); for (i = 0; i < n; i++) { NCURSES_PUTP2("scroll_forward", scroll_forward); } } else if (delete_line && bot == maxy) { GoTo(NCURSES_SP_ARGx top, 0); UpdateAttrs(SP_PARM, blank); for (i = 0; i < n; i++) { NCURSES_PUTP2("delete_line", delete_line); } } else return ERR; #if NCURSES_EXT_FUNCS if (FILL_BCE(SP_PARM)) { int j; for (i = 0; i < n; i++) { GoTo(NCURSES_SP_ARGx bot - i, 0); for (j = 0; j < screen_columns(SP_PARM); j++) PutChar(NCURSES_SP_ARGx CHREF(blank)); } } #endif return OK; } /* Try to scroll down assuming given csr (miny, maxy). Returns ERR on failure */ /* n > 0 */ static int scroll_csr_backward(NCURSES_SP_DCLx int n, int top, int bot, int miny, int maxy, NCURSES_CH_T blank) { int i; if (n == 1 && scroll_reverse && top == miny && bot == maxy) { GoTo(NCURSES_SP_ARGx top, 0); UpdateAttrs(SP_PARM, blank); NCURSES_PUTP2("scroll_reverse", scroll_reverse); } else if (n == 1 && insert_line && bot == maxy) { GoTo(NCURSES_SP_ARGx top, 0); UpdateAttrs(SP_PARM, blank); NCURSES_PUTP2("insert_line", insert_line); } else if (parm_rindex && top == miny && bot == maxy) { GoTo(NCURSES_SP_ARGx top, 0); UpdateAttrs(SP_PARM, blank); TPUTS_TRACE("parm_rindex"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_2(parm_rindex, n, 0), n, NCURSES_SP_NAME(_nc_outch)); } else if (parm_insert_line && bot == maxy) { GoTo(NCURSES_SP_ARGx top, 0); UpdateAttrs(SP_PARM, blank); TPUTS_TRACE("parm_insert_line"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_2(parm_insert_line, n, 0), n, NCURSES_SP_NAME(_nc_outch)); } else if (scroll_reverse && top == miny && bot == maxy) { GoTo(NCURSES_SP_ARGx top, 0); UpdateAttrs(SP_PARM, blank); for (i = 0; i < n; i++) { NCURSES_PUTP2("scroll_reverse", scroll_reverse); } } else if (insert_line && bot == maxy) { GoTo(NCURSES_SP_ARGx top, 0); UpdateAttrs(SP_PARM, blank); for (i = 0; i < n; i++) { NCURSES_PUTP2("insert_line", insert_line); } } else return ERR; #if NCURSES_EXT_FUNCS if (FILL_BCE(SP_PARM)) { int j; for (i = 0; i < n; i++) { GoTo(NCURSES_SP_ARGx top + i, 0); for (j = 0; j < screen_columns(SP_PARM); j++) PutChar(NCURSES_SP_ARGx CHREF(blank)); } } #endif return OK; } /* scroll by using delete_line at del and insert_line at ins */ /* n > 0 */ static int scroll_idl(NCURSES_SP_DCLx int n, int del, int ins, NCURSES_CH_T blank) { int i; if (!((parm_delete_line || delete_line) && (parm_insert_line || insert_line))) return ERR; GoTo(NCURSES_SP_ARGx del, 0); UpdateAttrs(SP_PARM, blank); if (n == 1 && delete_line) { NCURSES_PUTP2("delete_line", delete_line); } else if (parm_delete_line) { TPUTS_TRACE("parm_delete_line"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_2(parm_delete_line, n, 0), n, NCURSES_SP_NAME(_nc_outch)); } else { /* if (delete_line) */ for (i = 0; i < n; i++) { NCURSES_PUTP2("delete_line", delete_line); } } GoTo(NCURSES_SP_ARGx ins, 0); UpdateAttrs(SP_PARM, blank); if (n == 1 && insert_line) { NCURSES_PUTP2("insert_line", insert_line); } else if (parm_insert_line) { TPUTS_TRACE("parm_insert_line"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_2(parm_insert_line, n, 0), n, NCURSES_SP_NAME(_nc_outch)); } else { /* if (insert_line) */ for (i = 0; i < n; i++) { NCURSES_PUTP2("insert_line", insert_line); } } return OK; } /* * Note: some terminals require the cursor to be within the scrolling margins * before setting them. Generally, the cursor must be at the appropriate end * of the scrolling margins when issuing an indexing operation (it is not * apparent whether it must also be at the left margin; we do this just to be * safe). To make the related cursor movement a little faster, we use the * save/restore cursor capabilities if the terminal has them. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_scrolln) (NCURSES_SP_DCLx int n, int top, int bot, int maxy) /* scroll region from top to bot by n lines */ { NCURSES_CH_T blank; int i; bool cursor_saved = FALSE; int res; TR(TRACE_MOVE, ("_nc_scrolln(%p, %d, %d, %d, %d)", (void *) SP_PARM, n, top, bot, maxy)); if (!IsValidScreen(SP_PARM)) return (ERR); blank = ClrBlank(NCURSES_SP_ARGx StdScreen(SP_PARM)); #if USE_XMC_SUPPORT /* * If we scroll, we might remove a cookie. */ if (magic_cookie_glitch > 0) { return (ERR); } #endif if (n > 0) { /* scroll up (forward) */ /* * Explicitly clear if stuff pushed off top of region might * be saved by the terminal. */ res = scroll_csr_forward(NCURSES_SP_ARGx n, top, bot, 0, maxy, blank); if (res == ERR && change_scroll_region) { if ((((n == 1 && scroll_forward) || parm_index) && (SP_PARM->_cursrow == bot || SP_PARM->_cursrow == bot - 1)) && save_cursor && restore_cursor) { cursor_saved = TRUE; NCURSES_PUTP2("save_cursor", save_cursor); } NCURSES_PUTP2("change_scroll_region", TPARM_2(change_scroll_region, top, bot)); if (cursor_saved) { NCURSES_PUTP2("restore_cursor", restore_cursor); } else { SP_PARM->_cursrow = SP_PARM->_curscol = -1; } res = scroll_csr_forward(NCURSES_SP_ARGx n, top, bot, top, bot, blank); NCURSES_PUTP2("change_scroll_region", TPARM_2(change_scroll_region, 0, maxy)); SP_PARM->_cursrow = SP_PARM->_curscol = -1; } if (res == ERR && SP_PARM->_nc_sp_idlok) res = scroll_idl(NCURSES_SP_ARGx n, top, bot - n + 1, blank); /* * Clear the newly shifted-in text. */ if (res != ERR && (non_dest_scroll_region || (memory_below && bot == maxy))) { static const NCURSES_CH_T blank2 = NewChar(BLANK_TEXT); if (bot == maxy && clr_eos) { GoTo(NCURSES_SP_ARGx bot - n + 1, 0); ClrToEOS(NCURSES_SP_ARGx blank2); } else { for (i = 0; i < n; i++) { GoTo(NCURSES_SP_ARGx bot - i, 0); ClrToEOL(NCURSES_SP_ARGx blank2, FALSE); } } } } else { /* (n < 0) - scroll down (backward) */ res = scroll_csr_backward(NCURSES_SP_ARGx -n, top, bot, 0, maxy, blank); if (res == ERR && change_scroll_region) { if (top != 0 && (SP_PARM->_cursrow == top || SP_PARM->_cursrow == top - 1) && save_cursor && restore_cursor) { cursor_saved = TRUE; NCURSES_PUTP2("save_cursor", save_cursor); } NCURSES_PUTP2("change_scroll_region", TPARM_2(change_scroll_region, top, bot)); if (cursor_saved) { NCURSES_PUTP2("restore_cursor", restore_cursor); } else { SP_PARM->_cursrow = SP_PARM->_curscol = -1; } res = scroll_csr_backward(NCURSES_SP_ARGx -n, top, bot, top, bot, blank); NCURSES_PUTP2("change_scroll_region", TPARM_2(change_scroll_region, 0, maxy)); SP_PARM->_cursrow = SP_PARM->_curscol = -1; } if (res == ERR && SP_PARM->_nc_sp_idlok) res = scroll_idl(NCURSES_SP_ARGx -n, bot + n + 1, top, blank); /* * Clear the newly shifted-in text. */ if (res != ERR && (non_dest_scroll_region || (memory_above && top == 0))) { static const NCURSES_CH_T blank2 = NewChar(BLANK_TEXT); for (i = 0; i < -n; i++) { GoTo(NCURSES_SP_ARGx i + top, 0); ClrToEOL(NCURSES_SP_ARGx blank2, FALSE); } } } if (res == ERR) return (ERR); _nc_scroll_window(CurScreen(SP_PARM), n, (NCURSES_SIZE_T) top, (NCURSES_SIZE_T) bot, blank); /* shift hash values too - they can be reused */ NCURSES_SP_NAME(_nc_scroll_oldhash) (NCURSES_SP_ARGx n, top, bot); return (OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_scrolln(int n, int top, int bot, int maxy) { return NCURSES_SP_NAME(_nc_scrolln) (CURRENT_SCREEN, n, top, bot, maxy); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_resume) (NCURSES_SP_DCL0) { assert(SP_PARM); /* make sure terminal is in a sane known state */ SetAttr(SCREEN_ATTRS(SP_PARM), A_NORMAL); NewScreen(SP_PARM)->_clear = TRUE; /* reset color pairs and definitions */ if (SP_PARM->_coloron || SP_PARM->_color_defs) NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_ARG); /* restore user-defined colors, if any */ if (SP_PARM->_color_defs < 0) { int n; SP_PARM->_color_defs = -(SP_PARM->_color_defs); for (n = 0; n < SP_PARM->_color_defs; ++n) { if (SP_PARM->_color_table[n].init) { NCURSES_SP_NAME(init_color) (NCURSES_SP_ARGx (short) n, SP_PARM->_color_table[n].r, SP_PARM->_color_table[n].g, SP_PARM->_color_table[n].b); } } } if (exit_attribute_mode) NCURSES_PUTP2("exit_attribute_mode", exit_attribute_mode); else { /* turn off attributes */ if (exit_alt_charset_mode) NCURSES_PUTP2("exit_alt_charset_mode", exit_alt_charset_mode); if (exit_standout_mode) NCURSES_PUTP2("exit_standout_mode", exit_standout_mode); if (exit_underline_mode) NCURSES_PUTP2("exit_underline_mode", exit_underline_mode); } if (exit_insert_mode) NCURSES_PUTP2("exit_insert_mode", exit_insert_mode); if (enter_am_mode && exit_am_mode) { if (auto_right_margin) { NCURSES_PUTP2("enter_am_mode", enter_am_mode); } else { NCURSES_PUTP2("exit_am_mode", exit_am_mode); } } } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_screen_resume(void) { NCURSES_SP_NAME(_nc_screen_resume) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_init) (NCURSES_SP_DCL0) { NCURSES_SP_NAME(_nc_screen_resume) (NCURSES_SP_ARG); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_screen_init(void) { NCURSES_SP_NAME(_nc_screen_init) (CURRENT_SCREEN); } #endif /* wrap up screen handling */ NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_wrap) (NCURSES_SP_DCL0) { if (SP_PARM != 0) { UpdateAttrs(SP_PARM, normal); #if NCURSES_EXT_FUNCS if (SP_PARM->_coloron && !SP_PARM->_default_color) { static const NCURSES_CH_T blank = NewChar(BLANK_TEXT); SP_PARM->_default_color = TRUE; NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx -1, 0, FALSE, NCURSES_SP_NAME(_nc_outch)); SP_PARM->_default_color = FALSE; TINFO_MVCUR(NCURSES_SP_ARGx SP_PARM->_cursrow, SP_PARM->_curscol, screen_lines(SP_PARM) - 1, 0); ClrToEOL(NCURSES_SP_ARGx blank, TRUE); } #endif if (SP_PARM->_color_defs) { NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_ARG); } } } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_screen_wrap(void) { NCURSES_SP_NAME(_nc_screen_wrap) (CURRENT_SCREEN); } #endif #if USE_XMC_SUPPORT NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_do_xmc_glitch) (NCURSES_SP_DCLx attr_t previous) { if (SP_PARM != 0) { attr_t chg = XMC_CHANGES(previous ^ AttrOf(SCREEN_ATTRS(SP_PARM))); while (chg != 0) { if (chg & 1) { SP_PARM->_curscol += magic_cookie_glitch; if (SP_PARM->_curscol >= SP_PARM->_columns) wrap_cursor(NCURSES_SP_ARG); TR(TRACE_UPDATE, ("bumped to %d,%d after cookie", SP_PARM->_cursrow, SP_PARM->_curscol)); } chg >>= 1; } } } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_do_xmc_glitch(attr_t previous) { NCURSES_SP_NAME(_nc_do_xmc_glitch) (CURRENT_SCREEN, previous); } #endif #endif /* USE_XMC_SUPPORT */ ncurses-6.0-20160213/ncurses/tty/hashmap.c0000644000175100001440000004123112554767004016556 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /****************************************************************************** NAME hashmap.c -- fill in scramble vector based on text hashes SYNOPSIS void _nc_hash_map(void) DESCRIPTION: This code attempts to recognize pairs of old and new lines in the physical and virtual screens. When a line pair is recognized, the old line index is placed in the oldindex member of the virtual screen line, to be used by the vertical-motion optimizer portion of the update logic (see hardscroll.c). Line pairs are recognized by applying a modified Heckel's algorithm, sped up by hashing. If a line hash is unique in both screens, those lines must be a pair. Then if the lines just before or after the pair are the same or similar, they are a pair too. We don't worry about false pairs produced by hash collisions, on the assumption that such cases are rare and will only make the latter stages of update less efficient, not introduce errors. HOW TO TEST THIS: Use the following production: hashmap: hashmap.c $(CC) -g -DHASHDEBUG hashmap.c hardscroll.c ../objects/lib_trace.o -o hashmap AUTHOR Eric S. Raymond , May 1996 Bug fixes and improvements by Alexander V. Lukyanov , 1997 *****************************************************************************/ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: hashmap.c,v 1.65 2015/07/25 20:13:56 tom Exp $") #ifdef HASHDEBUG # define _tracef printf # undef TR # ifdef TRACE # define TR(n, a) if (_nc_tracing & (n)) { _tracef a ; putchar('\n'); } # else # define TR(n, a) { _tracef a ; putchar('\n'); } # endif # undef screen_lines # define screen_lines(sp) MAXLINES # define TEXTWIDTH(sp) 1 int oldnums[MAXLINES], reallines[MAXLINES]; static NCURSES_CH_T oldtext[MAXLINES][TEXTWIDTH(sp)]; static NCURSES_CH_T newtext[MAXLINES][TEXTWIDTH(sp)]; # define OLDNUM(sp,n) oldnums[n] # define OLDTEXT(sp,n) oldtext[n] # define NEWTEXT(sp,m) newtext[m] # define PENDING(sp,n) 1 #else /* !HASHDEBUG */ # define OLDNUM(sp,n) (sp)->_oldnum_list[n] # define OLDTEXT(sp,n) CurScreen(sp)->_line[n].text # define NEWTEXT(sp,m) NewScreen(sp)->_line[m].text # define TEXTWIDTH(sp) (CurScreen(sp)->_maxx + 1) # define PENDING(sp,n) (NewScreen(sp)->_line[n].firstchar != _NOCHANGE) #endif /* !HASHDEBUG */ #define oldhash(sp) ((sp)->oldhash) #define newhash(sp) ((sp)->newhash) #define hashtab(sp) ((sp)->hashtab) #define lines_alloc(sp) ((sp)->hashtab_len) #if USE_WIDEC_SUPPORT #define HASH_VAL(ch) (ch.chars[0]) #else #define HASH_VAL(ch) (ch) #endif static const NCURSES_CH_T blankchar = NewChar(BLANK_TEXT); static NCURSES_INLINE unsigned long hash(SCREEN *sp, NCURSES_CH_T * text) { int i; NCURSES_CH_T ch; unsigned long result = 0; (void) sp; for (i = TEXTWIDTH(sp); i > 0; i--) { ch = *text++; result += (result << 5) + (unsigned long) HASH_VAL(ch); } return result; } /* approximate update cost */ static int update_cost(SCREEN *sp, NCURSES_CH_T * from, NCURSES_CH_T * to) { int cost = 0; int i; (void) sp; for (i = TEXTWIDTH(sp); i > 0; i--, from++, to++) if (!(CharEq(*from, *to))) cost++; return cost; } static int update_cost_from_blank(SCREEN *sp, NCURSES_CH_T * to) { int cost = 0; int i; NCURSES_CH_T blank = blankchar; (void) sp; if (back_color_erase) SetPair(blank, GetPair(stdscr->_nc_bkgd)); for (i = TEXTWIDTH(sp); i > 0; i--, to++) if (!(CharEq(blank, *to))) cost++; return cost; } /* * Returns true when moving line 'from' to line 'to' seems to be cost * effective. 'blank' indicates whether the line 'to' would become blank. */ static NCURSES_INLINE bool cost_effective(SCREEN *sp, const int from, const int to, const int blank) { int new_from; if (from == to) return FALSE; new_from = OLDNUM(sp, from); if (new_from == _NEWINDEX) new_from = from; /* * On the left side of >= is the cost before moving; * on the right side -- cost after moving. */ return (((blank ? update_cost_from_blank(sp, NEWTEXT(sp, to)) : update_cost(sp, OLDTEXT(sp, to), NEWTEXT(sp, to))) + update_cost(sp, OLDTEXT(sp, new_from), NEWTEXT(sp, from))) >= ((new_from == from ? update_cost_from_blank(sp, NEWTEXT(sp, from)) : update_cost(sp, OLDTEXT(sp, new_from), NEWTEXT(sp, from))) + update_cost(sp, OLDTEXT(sp, from), NEWTEXT(sp, to)))) ? TRUE : FALSE; } static void grow_hunks(SCREEN *sp) { int start, end, shift; int back_limit, forward_limit; /* limits for cells to fill */ int back_ref_limit, forward_ref_limit; /* limits for refrences */ int i; int next_hunk; /* * This is tricky part. We have unique pairs to use as anchors. * Use these to deduce the presence of spans of identical lines. */ back_limit = 0; back_ref_limit = 0; i = 0; while (i < screen_lines(sp) && OLDNUM(sp, i) == _NEWINDEX) i++; for (; i < screen_lines(sp); i = next_hunk) { start = i; shift = OLDNUM(sp, i) - i; /* get forward limit */ i = start + 1; while (i < screen_lines(sp) && OLDNUM(sp, i) != _NEWINDEX && OLDNUM(sp, i) - i == shift) i++; end = i; while (i < screen_lines(sp) && OLDNUM(sp, i) == _NEWINDEX) i++; next_hunk = i; forward_limit = i; if (i >= screen_lines(sp) || OLDNUM(sp, i) >= i) forward_ref_limit = i; else forward_ref_limit = OLDNUM(sp, i); i = start - 1; /* grow back */ if (shift < 0) back_limit = back_ref_limit + (-shift); while (i >= back_limit) { if (newhash(sp)[i] == oldhash(sp)[i + shift] || cost_effective(sp, i + shift, i, shift < 0)) { OLDNUM(sp, i) = i + shift; TR(TRACE_UPDATE | TRACE_MOVE, ("connected new line %d to old line %d (backward continuation)", i, i + shift)); } else { TR(TRACE_UPDATE | TRACE_MOVE, ("not connecting new line %d to old line %d (backward continuation)", i, i + shift)); break; } i--; } i = end; /* grow forward */ if (shift > 0) forward_limit = forward_ref_limit - shift; while (i < forward_limit) { if (newhash(sp)[i] == oldhash(sp)[i + shift] || cost_effective(sp, i + shift, i, shift > 0)) { OLDNUM(sp, i) = i + shift; TR(TRACE_UPDATE | TRACE_MOVE, ("connected new line %d to old line %d (forward continuation)", i, i + shift)); } else { TR(TRACE_UPDATE | TRACE_MOVE, ("not connecting new line %d to old line %d (forward continuation)", i, i + shift)); break; } i++; } back_ref_limit = back_limit = i; if (shift > 0) back_ref_limit += shift; } } NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_hash_map) (NCURSES_SP_DCL0) { HASHMAP *hsp; register int i; int start, shift, size; if (screen_lines(SP_PARM) > lines_alloc(SP_PARM)) { if (hashtab(SP_PARM)) free(hashtab(SP_PARM)); hashtab(SP_PARM) = typeMalloc(HASHMAP, ((size_t) screen_lines(SP_PARM) + 1) * 2); if (!hashtab(SP_PARM)) { if (oldhash(SP_PARM)) { FreeAndNull(oldhash(SP_PARM)); } lines_alloc(SP_PARM) = 0; return; } lines_alloc(SP_PARM) = screen_lines(SP_PARM); } if (oldhash(SP_PARM) && newhash(SP_PARM)) { /* re-hash only changed lines */ for (i = 0; i < screen_lines(SP_PARM); i++) { if (PENDING(SP_PARM, i)) newhash(SP_PARM)[i] = hash(SP_PARM, NEWTEXT(SP_PARM, i)); } } else { /* re-hash all */ if (oldhash(SP_PARM) == 0) oldhash(SP_PARM) = typeCalloc(unsigned long, (size_t) screen_lines(SP_PARM)); if (newhash(SP_PARM) == 0) newhash(SP_PARM) = typeCalloc(unsigned long, (size_t) screen_lines(SP_PARM)); if (!oldhash(SP_PARM) || !newhash(SP_PARM)) return; /* malloc failure */ for (i = 0; i < screen_lines(SP_PARM); i++) { newhash(SP_PARM)[i] = hash(SP_PARM, NEWTEXT(SP_PARM, i)); oldhash(SP_PARM)[i] = hash(SP_PARM, OLDTEXT(SP_PARM, i)); } } #ifdef HASH_VERIFY for (i = 0; i < screen_lines(SP_PARM); i++) { if (newhash(SP_PARM)[i] != hash(SP_PARM, NEWTEXT(SP_PARM, i))) fprintf(stderr, "error in newhash[%d]\n", i); if (oldhash(SP_PARM)[i] != hash(SP_PARM, OLDTEXT(SP_PARM, i))) fprintf(stderr, "error in oldhash[%d]\n", i); } #endif /* * Set up and count line-hash values. */ memset(hashtab(SP_PARM), '\0', sizeof(*(hashtab(SP_PARM))) * ((size_t) screen_lines(SP_PARM) + 1) * 2); for (i = 0; i < screen_lines(SP_PARM); i++) { unsigned long hashval = oldhash(SP_PARM)[i]; for (hsp = hashtab(SP_PARM); hsp->hashval; hsp++) if (hsp->hashval == hashval) break; hsp->hashval = hashval; /* in case this is a new entry */ hsp->oldcount++; hsp->oldindex = i; } for (i = 0; i < screen_lines(SP_PARM); i++) { unsigned long hashval = newhash(SP_PARM)[i]; for (hsp = hashtab(SP_PARM); hsp->hashval; hsp++) if (hsp->hashval == hashval) break; hsp->hashval = hashval; /* in case this is a new entry */ hsp->newcount++; hsp->newindex = i; OLDNUM(SP_PARM, i) = _NEWINDEX; /* initialize old indices array */ } /* * Mark line pairs corresponding to unique hash pairs. * * We don't mark lines with offset 0, because it can make fail * extending hunks by cost_effective. Otherwise, it does not * have any side effects. */ for (hsp = hashtab(SP_PARM); hsp->hashval; hsp++) if (hsp->oldcount == 1 && hsp->newcount == 1 && hsp->oldindex != hsp->newindex) { TR(TRACE_UPDATE | TRACE_MOVE, ("new line %d is hash-identical to old line %d (unique)", hsp->newindex, hsp->oldindex)); OLDNUM(SP_PARM, hsp->newindex) = hsp->oldindex; } grow_hunks(SP_PARM); /* * Eliminate bad or impossible shifts -- this includes removing * those hunks which could not grow because of conflicts, as well * those which are to be moved too far, they are likely to destroy * more than carry. */ for (i = 0; i < screen_lines(SP_PARM);) { while (i < screen_lines(SP_PARM) && OLDNUM(SP_PARM, i) == _NEWINDEX) i++; if (i >= screen_lines(SP_PARM)) break; start = i; shift = OLDNUM(SP_PARM, i) - i; i++; while (i < screen_lines(SP_PARM) && OLDNUM(SP_PARM, i) != _NEWINDEX && OLDNUM(SP_PARM, i) - i == shift) i++; size = i - start; if (size < 3 || size + min(size / 8, 2) < abs(shift)) { while (start < i) { OLDNUM(SP_PARM, start) = _NEWINDEX; start++; } } } /* After clearing invalid hunks, try grow the rest. */ grow_hunks(SP_PARM); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_hash_map(void) { NCURSES_SP_NAME(_nc_hash_map) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_make_oldhash) (NCURSES_SP_DCLx int i) { if (oldhash(SP_PARM)) oldhash(SP_PARM)[i] = hash(SP_PARM, OLDTEXT(SP_PARM, i)); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_make_oldhash(int i) { NCURSES_SP_NAME(_nc_make_oldhash) (CURRENT_SCREEN, i); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_scroll_oldhash) (NCURSES_SP_DCLx int n, int top, int bot) { size_t size; int i; if (!oldhash(SP_PARM)) return; size = sizeof(*(oldhash(SP_PARM))) * (size_t) (bot - top + 1 - abs(n)); if (n > 0) { memmove(oldhash(SP_PARM) + top, oldhash(SP_PARM) + top + n, size); for (i = bot; i > bot - n; i--) oldhash(SP_PARM)[i] = hash(SP_PARM, OLDTEXT(SP_PARM, i)); } else { memmove(oldhash(SP_PARM) + top - n, oldhash(SP_PARM) + top, size); for (i = top; i < top - n; i++) oldhash(SP_PARM)[i] = hash(SP_PARM, OLDTEXT(SP_PARM, i)); } } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_scroll_oldhash(int n, int top, int bot) { NCURSES_SP_NAME(_nc_scroll_oldhash) (CURRENT_SCREEN, n, top, bot); } #endif #ifdef HASHDEBUG static void usage(void) { static const char *table[] = { "hashmap test-driver", "", "# comment", "l get initial line number vector", "n use following letters as text of new lines", "o use following letters as text of old lines", "d dump state of test arrays", "h apply hash mapper and see scroll optimization", "? this message" }; size_t n; for (n = 0; n < sizeof(table) / sizeof(table[0]); n++) fprintf(stderr, "%s\n", table[n]); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { char line[BUFSIZ], *st; int n; if (setupterm(NULL, fileno(stdout), (int *) 0) == ERR) return EXIT_FAILURE; (void) _nc_alloc_screen(); for (n = 0; n < screen_lines(sp); n++) { reallines[n] = n; oldnums[n] = _NEWINDEX; CharOf(oldtext[n][0]) = CharOf(newtext[n][0]) = '.'; } if (NC_ISATTY(fileno(stdin))) usage(); #ifdef TRACE _nc_tracing = TRACE_MOVE; #endif for (;;) { /* grab a test command */ if (fgets(line, sizeof(line), stdin) == (char *) NULL) break; switch (line[0]) { case '#': /* comment */ (void) fputs(line, stderr); break; case 'l': /* get initial line number vector */ for (n = 0; n < screen_lines(sp); n++) { reallines[n] = n; oldnums[n] = _NEWINDEX; } n = 0; st = strtok(line, " "); do { oldnums[n++] = atoi(st); } while ((st = strtok((char *) NULL, " ")) != 0); break; case 'n': /* use following letters as text of new lines */ for (n = 0; n < screen_lines(sp); n++) CharOf(newtext[n][0]) = '.'; for (n = 0; n < screen_lines(sp); n++) if (line[n + 1] == '\n') break; else CharOf(newtext[n][0]) = line[n + 1]; break; case 'o': /* use following letters as text of old lines */ for (n = 0; n < screen_lines(sp); n++) CharOf(oldtext[n][0]) = '.'; for (n = 0; n < screen_lines(sp); n++) if (line[n + 1] == '\n') break; else CharOf(oldtext[n][0]) = line[n + 1]; break; case 'd': /* dump state of test arrays */ #ifdef TRACE _nc_linedump(); #endif (void) fputs("Old lines: [", stdout); for (n = 0; n < screen_lines(sp); n++) putchar(CharOf(oldtext[n][0])); putchar(']'); putchar('\n'); (void) fputs("New lines: [", stdout); for (n = 0; n < screen_lines(sp); n++) putchar(CharOf(newtext[n][0])); putchar(']'); putchar('\n'); break; case 'h': /* apply hash mapper and see scroll optimization */ _nc_hash_map(); (void) fputs("Result:\n", stderr); #ifdef TRACE _nc_linedump(); #endif _nc_scroll_optimize(); (void) fputs("Done.\n", stderr); break; default: case '?': usage(); break; } } #if NO_LEAKS _nc_free_and_exit(EXIT_SUCCESS); #else return EXIT_SUCCESS; #endif } #endif /* HASHDEBUG */ /* hashmap.c ends here */ ncurses-6.0-20160213/ncurses/tty/lib_vidattr.c0000644000175100001440000003021212402160467017425 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * vidputs(newmode, outc) * * newmode is taken to be the logical 'or' of the symbols in curses.h * representing graphic renditions. The terminal is set to be in all of * the given modes, if possible. * * if the new attribute is normal * if exit-alt-char-set exists * emit it * emit exit-attribute-mode * else if set-attributes exists * use it to set exactly what you want * else * if exit-attribute-mode exists * turn off everything * else * turn off those which can be turned off and aren't in * newmode. * turn on each mode which should be on and isn't, one by one * * NOTE that this algorithm won't achieve the desired mix of attributes * in some cases, but those are probably just those cases in which it is * actually impossible, anyway, so... * * NOTE that we cannot assume that there's no interaction between color * and other attribute resets. So each time we reset color (or other * attributes) we'll have to be prepared to restore the other. */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_vidattr.c,v 1.71 2014/09/04 22:01:27 tom Exp $") #define doPut(mode) \ TPUTS_TRACE(#mode); \ NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx mode, 1, outc) #define TurnOn(mask, mode) \ if ((turn_on & mask) && mode) { doPut(mode); } #define TurnOff(mask, mode) \ if ((turn_off & mask) && mode) { doPut(mode); turn_off &= ~mask; } /* if there is no current screen, assume we *can* do color */ #define SetColorsIf(why, old_attr) \ if (can_color && (why)) { \ int old_pair = PairNumber(old_attr); \ TR(TRACE_ATTRS, ("old pair = %d -- new pair = %d", old_pair, pair)); \ if ((pair != old_pair) \ || (fix_pair0 && (pair == 0)) \ || (reverse ^ ((old_attr & A_REVERSE) != 0))) { \ NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx \ (short) old_pair, \ (short) pair, \ reverse, outc); \ } \ } #define PreviousAttr _nc_prescreen.previous_attr NCURSES_EXPORT(int) NCURSES_SP_NAME(vidputs) (NCURSES_SP_DCLx chtype newmode, NCURSES_SP_OUTC outc) { attr_t turn_on, turn_off; int pair; bool reverse = FALSE; bool can_color = (SP_PARM == 0 || SP_PARM->_coloron); #if NCURSES_EXT_FUNCS bool fix_pair0 = (SP_PARM != 0 && SP_PARM->_coloron && !SP_PARM->_default_color); #else #define fix_pair0 FALSE #endif newmode &= A_ATTRIBUTES; T((T_CALLED("vidputs(%p,%s)"), (void *) SP_PARM, _traceattr(newmode))); if (!IsTermInfo(SP_PARM)) returnCode(ERR); /* this allows us to go on whether or not newterm() has been called */ if (SP_PARM) PreviousAttr = AttrOf(SCREEN_ATTRS(SP_PARM)); TR(TRACE_ATTRS, ("previous attribute was %s", _traceattr(PreviousAttr))); if ((SP_PARM != 0) && (magic_cookie_glitch > 0)) { #if USE_XMC_SUPPORT static const chtype table[] = { A_STANDOUT, A_UNDERLINE, A_REVERSE, A_BLINK, A_DIM, A_BOLD, A_INVIS, A_PROTECT, #if USE_ITALIC A_ITALIC, #endif }; unsigned n; int used = 0; int limit = (max_attributes <= 0) ? 1 : max_attributes; chtype retain = 0; /* * Limit the number of attribute bits set in the newmode according to * the terminfo max_attributes value. */ for (n = 0; n < SIZEOF(table); ++n) { if ((table[n] & SP_PARM->_ok_attributes) == 0) { newmode &= ~table[n]; } else if ((table[n] & newmode) != 0) { if (used++ >= limit) { newmode &= ~table[n]; if (newmode == retain) break; } else { retain = newmode; } } } #else newmode &= ~(SP_PARM->_xmc_suppress); #endif TR(TRACE_ATTRS, ("suppressed attribute is %s", _traceattr(newmode))); } /* * If we have a terminal that cannot combine color with video * attributes, use the colors in preference. */ if (((newmode & A_COLOR) != 0 || fix_pair0) && (no_color_video > 0)) { /* * If we had chosen the A_xxx definitions to correspond to the * no_color_video mask, we could simply shift it up and mask off the * attributes. But we did not (actually copied Solaris' definitions). * However, this is still simpler/faster than a lookup table. * * The 63 corresponds to A_STANDOUT, A_UNDERLINE, A_REVERSE, A_BLINK, * A_DIM, A_BOLD which are 1:1 with no_color_video. The bits that * correspond to A_INVIS, A_PROTECT (192) must be shifted up 1 and * A_ALTCHARSET (256) down 2 to line up. We use the NCURSES_BITS * macro so this will work properly for the wide-character layout. */ unsigned value = (unsigned) no_color_video; attr_t mask = NCURSES_BITS((value & 63) | ((value & 192) << 1) | ((value & 256) >> 2), 8); if ((mask & A_REVERSE) != 0 && (newmode & A_REVERSE) != 0) { reverse = TRUE; mask &= ~A_REVERSE; } newmode &= ~mask; } if (newmode == PreviousAttr) returnCode(OK); pair = PairNumber(newmode); if (reverse) { newmode &= ~A_REVERSE; } turn_off = (~newmode & PreviousAttr) & ALL_BUT_COLOR; turn_on = (newmode & ~(PreviousAttr & TPARM_ATTR)) & ALL_BUT_COLOR; SetColorsIf(((pair == 0) && !fix_pair0), PreviousAttr); if (newmode == A_NORMAL) { if ((PreviousAttr & A_ALTCHARSET) && exit_alt_charset_mode) { doPut(exit_alt_charset_mode); PreviousAttr &= ~A_ALTCHARSET; } if (PreviousAttr) { if (exit_attribute_mode) { doPut(exit_attribute_mode); } else { if (!SP_PARM || SP_PARM->_use_rmul) { TurnOff(A_UNDERLINE, exit_underline_mode); } if (!SP_PARM || SP_PARM->_use_rmso) { TurnOff(A_STANDOUT, exit_standout_mode); } #if USE_ITALIC if (!SP_PARM || SP_PARM->_use_ritm) { TurnOff(A_ITALIC, exit_italics_mode); } #endif } PreviousAttr &= ALL_BUT_COLOR; } SetColorsIf((pair != 0) || fix_pair0, PreviousAttr); } else if (set_attributes) { if (turn_on || turn_off) { TPUTS_TRACE("set_attributes"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx tparm(set_attributes, (newmode & A_STANDOUT) != 0, (newmode & A_UNDERLINE) != 0, (newmode & A_REVERSE) != 0, (newmode & A_BLINK) != 0, (newmode & A_DIM) != 0, (newmode & A_BOLD) != 0, (newmode & A_INVIS) != 0, (newmode & A_PROTECT) != 0, (newmode & A_ALTCHARSET) != 0), 1, outc); PreviousAttr &= ALL_BUT_COLOR; } #if USE_ITALIC if (!SP_PARM || SP_PARM->_use_ritm) { if (turn_on & A_ITALIC) { TurnOn(A_ITALIC, enter_italics_mode); } else if (turn_off & A_ITALIC) { TurnOff(A_ITALIC, exit_italics_mode); } } #endif SetColorsIf((pair != 0) || fix_pair0, PreviousAttr); } else { TR(TRACE_ATTRS, ("turning %s off", _traceattr(turn_off))); TurnOff(A_ALTCHARSET, exit_alt_charset_mode); if (!SP_PARM || SP_PARM->_use_rmul) { TurnOff(A_UNDERLINE, exit_underline_mode); } if (!SP_PARM || SP_PARM->_use_rmso) { TurnOff(A_STANDOUT, exit_standout_mode); } #if USE_ITALIC if (!SP_PARM || SP_PARM->_use_ritm) { TurnOff(A_ITALIC, exit_italics_mode); } #endif if (turn_off && exit_attribute_mode) { doPut(exit_attribute_mode); turn_on |= (newmode & ALL_BUT_COLOR); PreviousAttr &= ALL_BUT_COLOR; } SetColorsIf((pair != 0) || fix_pair0, PreviousAttr); TR(TRACE_ATTRS, ("turning %s on", _traceattr(turn_on))); /* *INDENT-OFF* */ TurnOn(A_ALTCHARSET, enter_alt_charset_mode); TurnOn(A_BLINK, enter_blink_mode); TurnOn(A_BOLD, enter_bold_mode); TurnOn(A_DIM, enter_dim_mode); TurnOn(A_REVERSE, enter_reverse_mode); TurnOn(A_STANDOUT, enter_standout_mode); TurnOn(A_PROTECT, enter_protected_mode); TurnOn(A_INVIS, enter_secure_mode); TurnOn(A_UNDERLINE, enter_underline_mode); #if USE_ITALIC TurnOn(A_ITALIC, enter_italics_mode); #endif #if USE_WIDEC_SUPPORT TurnOn(A_HORIZONTAL, enter_horizontal_hl_mode); TurnOn(A_LEFT, enter_left_hl_mode); TurnOn(A_LOW, enter_low_hl_mode); TurnOn(A_RIGHT, enter_right_hl_mode); TurnOn(A_TOP, enter_top_hl_mode); TurnOn(A_VERTICAL, enter_vertical_hl_mode); #endif /* *INDENT-ON* */ } if (reverse) newmode |= A_REVERSE; if (SP_PARM) SetAttr(SCREEN_ATTRS(SP_PARM), newmode); else PreviousAttr = newmode; returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) vidputs(chtype newmode, NCURSES_OUTC outc) { SetSafeOutcWrapper(outc); return NCURSES_SP_NAME(vidputs) (CURRENT_SCREEN, newmode, _nc_outc_wrapper); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(vidattr) (NCURSES_SP_DCLx chtype newmode) { T((T_CALLED("vidattr(%p,%s)"), (void *) SP_PARM, _traceattr(newmode))); returnCode(NCURSES_SP_NAME(vidputs) (NCURSES_SP_ARGx newmode, NCURSES_SP_NAME(_nc_putchar))); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) vidattr(chtype newmode) { return NCURSES_SP_NAME(vidattr) (CURRENT_SCREEN, newmode); } #endif NCURSES_EXPORT(chtype) NCURSES_SP_NAME(termattrs) (NCURSES_SP_DCL0) { chtype attrs = A_NORMAL; T((T_CALLED("termattrs(%p)"), (void *) SP_PARM)); if (HasTerminal(SP_PARM)) { #ifdef USE_TERM_DRIVER attrs = CallDriver(SP_PARM, td_conattr); #else /* ! USE_TERM_DRIVER */ if (enter_alt_charset_mode) attrs |= A_ALTCHARSET; if (enter_blink_mode) attrs |= A_BLINK; if (enter_bold_mode) attrs |= A_BOLD; if (enter_dim_mode) attrs |= A_DIM; if (enter_reverse_mode) attrs |= A_REVERSE; if (enter_standout_mode) attrs |= A_STANDOUT; if (enter_protected_mode) attrs |= A_PROTECT; if (enter_secure_mode) attrs |= A_INVIS; if (enter_underline_mode) attrs |= A_UNDERLINE; if (SP_PARM->_coloron) attrs |= A_COLOR; #if USE_ITALIC if (enter_italics_mode) attrs |= A_ITALIC; #endif #endif /* USE_TERM_DRIVER */ } returnChtype(attrs); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(chtype) termattrs(void) { return NCURSES_SP_NAME(termattrs) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/tty/MKexpanded.sh0000755000175100001440000001027612613013254017340 0ustar tomusers#! /bin/sh ############################################################################## # Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey, 1997-on # # $Id: MKexpanded.sh,v 1.18 2015/10/24 23:39:24 tom Exp $ # # Script to generate 'expanded.c', a dummy source that contains functions # corresponding to complex macros used in this library. By making functions, # we simplify analysis and debugging. if test $# != 0; then preprocessor="$1" else preprocessor="cc -E" fi shift if test $# != 0 ; then preprocessor="$preprocessor $*" else preprocessor="$preprocessor -DHAVE_CONFIG_H -I. -I../include" fi TMP=gen$$.c trap "rm -f $TMP" 0 1 2 5 15 cat < #ifndef CUR #define CUR SP_TERMTYPE #endif #if NCURSES_EXPANDED EOF cat >$TMP < #undef NCURSES_EXPANDED /* this probably is set in ncurses_cfg.h */ #include /* these are names we'd like to see */ #undef ALL_BUT_COLOR #undef PAIR_NUMBER #undef TRUE #undef FALSE /* this is a marker */ IGNORE NCURSES_EXPORT(void) _nc_toggle_attr_on (attr_t *S, attr_t at) { toggle_attr_on(*S,at); } NCURSES_EXPORT(void) _nc_toggle_attr_off (attr_t *S, attr_t at) { toggle_attr_off(*S,at); } NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_DelCharCost) (NCURSES_SP_DCLx int count) { return DelCharCost(SP_PARM, count); } NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_InsCharCost) (NCURSES_SP_DCLx int count) { return InsCharCost(SP_PARM, count); } NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_UpdateAttrs) (NCURSES_SP_DCLx CARG_CH_T c) { UpdateAttrs(SP_PARM, CHDEREF(c)); } @if_NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_DelCharCost (int count) { return NCURSES_SP_NAME(_nc_DelCharCost) (CURRENT_SCREEN, count); } NCURSES_EXPORT(int) _nc_InsCharCost (int count) { return NCURSES_SP_NAME(_nc_InsCharCost)(CURRENT_SCREEN, count); } NCURSES_EXPORT(void) _nc_UpdateAttrs (CARG_CH_T c) { NCURSES_SP_NAME(_nc_UpdateAttrs)(CURRENT_SCREEN,c); } @endif EOF $preprocessor $TMP 2>/dev/null | \ sed -e '1,/^IGNORE$/d' -e 's/^@/#/' -e 's/^#if_/#if /' -e "s,$TMP,expanded.c," cat < 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* ** lib_twait.c ** ** The routine _nc_timed_wait(). ** ** (This file was originally written by Eric Raymond; however except for ** comments, none of the original code remains - T.Dickey). */ #include #if defined __HAIKU__ && defined __BEOS__ #undef __BEOS__ #endif #ifdef __BEOS__ #undef false #undef true #include #endif #if USE_KLIBC_KBD #define INCL_KBD #include #endif #if USE_FUNC_POLL # if HAVE_SYS_TIME_H # include # endif #elif HAVE_SELECT # if HAVE_SYS_TIME_H && HAVE_SYS_TIME_SELECT # include # endif # if HAVE_SYS_SELECT_H # include # endif #endif #ifdef __MINGW32__ # include #endif #undef CUR MODULE_ID("$Id: lib_twait.c,v 1.70 2015/07/04 21:01:02 tom Exp $") static long _nc_gettime(TimeType * t0, int first) { long res; #if PRECISE_GETTIME TimeType t1; gettimeofday(&t1, (struct timezone *) 0); if (first) { *t0 = t1; res = 0; } else { /* .tv_sec and .tv_usec are unsigned, be careful when subtracting */ if (t0->tv_usec > t1.tv_usec) { t1.tv_usec += 1000000; /* Convert 1s in 1e6 microsecs */ t1.tv_sec--; } res = (t1.tv_sec - t0->tv_sec) * 1000 + (t1.tv_usec - t0->tv_usec) / 1000; } #else time_t t1 = time((time_t *) 0); if (first) { *t0 = t1; } res = (long) ((t1 - *t0) * 1000); #endif TR(TRACE_IEVENT, ("%s time: %ld msec", first ? "get" : "elapsed", res)); return res; } #ifdef NCURSES_WGETCH_EVENTS NCURSES_EXPORT(int) _nc_eventlist_timeout(_nc_eventlist * evl) { int event_delay = -1; int n; if (evl != 0) { for (n = 0; n < evl->count; ++n) { _nc_event *ev = evl->events[n]; if (ev->type == _NC_EVENT_TIMEOUT_MSEC) { event_delay = (int) ev->data.timeout_msec; if (event_delay < 0) event_delay = INT_MAX; /* FIXME Is this defined? */ } } } return event_delay; } #endif /* NCURSES_WGETCH_EVENTS */ #if (USE_FUNC_POLL || HAVE_SELECT) # define MAYBE_UNUSED #else # define MAYBE_UNUSED GCC_UNUSED #endif #if (USE_FUNC_POLL || HAVE_SELECT) # define MAYBE_UNUSED #else # define MAYBE_UNUSED GCC_UNUSED #endif /* * Wait a specified number of milliseconds, returning nonzero if the timer * didn't expire before there is activity on the specified file descriptors. * The file-descriptors are specified by the mode: * TW_NONE 0 - none (absolute time) * TW_INPUT 1 - ncurses' normal input-descriptor * TW_MOUSE 2 - mouse descriptor, if any * TW_ANY 3 - either input or mouse. * TW_EVENT 4 - * Experimental: if NCURSES_WGETCH_EVENTS is defined, (mode & 4) determines * whether to pay attention to evl argument. If set, the smallest of * millisecond and of timeout of evl is taken. * * We return a mask that corresponds to the mode (e.g., 2 for mouse activity). * * If the milliseconds given are -1, the wait blocks until activity on the * descriptors. */ NCURSES_EXPORT(int) _nc_timed_wait(SCREEN *sp MAYBE_UNUSED, int mode MAYBE_UNUSED, int milliseconds, int *timeleft EVENTLIST_2nd(_nc_eventlist * evl)) { int count; int result = TW_NONE; TimeType t0; #if (USE_FUNC_POLL || HAVE_SELECT) int fd; #endif #ifdef NCURSES_WGETCH_EVENTS int timeout_is_event = 0; int n; #endif #if USE_FUNC_POLL #define MIN_FDS 2 struct pollfd fd_list[MIN_FDS]; struct pollfd *fds = fd_list; #elif defined(__BEOS__) #elif HAVE_SELECT fd_set set; #endif #if USE_KLIBC_KBD fd_set saved_set; KBDKEYINFO ki; struct timeval tv; #endif long starttime, returntime; TR(TRACE_IEVENT, ("start twait: %d milliseconds, mode: %d", milliseconds, mode)); #ifdef NCURSES_WGETCH_EVENTS if (mode & TW_EVENT) { int event_delay = _nc_eventlist_timeout(evl); if (event_delay >= 0 && (milliseconds >= event_delay || milliseconds < 0)) { milliseconds = event_delay; timeout_is_event = 1; } } #endif #if PRECISE_GETTIME && HAVE_NANOSLEEP retry: #endif starttime = _nc_gettime(&t0, TRUE); count = 0; (void) count; #ifdef NCURSES_WGETCH_EVENTS if ((mode & TW_EVENT) && evl) evl->result_flags = 0; #endif #if USE_FUNC_POLL memset(fd_list, 0, sizeof(fd_list)); #ifdef NCURSES_WGETCH_EVENTS if ((mode & TW_EVENT) && evl) { if (fds == fd_list) fds = typeMalloc(struct pollfd, MIN_FDS + evl->count); if (fds == 0) return TW_NONE; } #endif if (mode & TW_INPUT) { fds[count].fd = sp->_ifd; fds[count].events = POLLIN; count++; } if ((mode & TW_MOUSE) && (fd = sp->_mouse_fd) >= 0) { fds[count].fd = fd; fds[count].events = POLLIN; count++; } #ifdef NCURSES_WGETCH_EVENTS if ((mode & TW_EVENT) && evl) { for (n = 0; n < evl->count; ++n) { _nc_event *ev = evl->events[n]; if (ev->type == _NC_EVENT_FILE && (ev->data.fev.flags & _NC_EVENT_FILE_READABLE)) { fds[count].fd = ev->data.fev.fd; fds[count].events = POLLIN; count++; } } } #endif result = poll(fds, (size_t) count, milliseconds); #ifdef NCURSES_WGETCH_EVENTS if ((mode & TW_EVENT) && evl) { int c; if (!result) count = 0; for (n = 0; n < evl->count; ++n) { _nc_event *ev = evl->events[n]; if (ev->type == _NC_EVENT_FILE && (ev->data.fev.flags & _NC_EVENT_FILE_READABLE)) { ev->data.fev.result = 0; for (c = 0; c < count; c++) if (fds[c].fd == ev->data.fev.fd && fds[c].revents & POLLIN) { ev->data.fev.result |= _NC_EVENT_FILE_READABLE; evl->result_flags |= _NC_EVENT_FILE_READABLE; } } else if (ev->type == _NC_EVENT_TIMEOUT_MSEC && !result && timeout_is_event) { evl->result_flags |= _NC_EVENT_TIMEOUT_MSEC; } } } #endif #elif defined(__BEOS__) /* * BeOS's select() is declared in socket.h, so the configure script does * not see it. That's just as well, since that function works only for * sockets. This (using snooze and ioctl) was distilled from Be's patch * for ncurses which uses a separate thread to simulate select(). * * FIXME: the return values from the ioctl aren't very clear if we get * interrupted. * * FIXME: this assumes mode&1 if milliseconds < 0 (see lib_getch.c). */ result = TW_NONE; if (mode & TW_INPUT) { int step = (milliseconds < 0) ? 0 : 5000; bigtime_t d; bigtime_t useconds = milliseconds * 1000; int n, howmany; if (useconds <= 0) /* we're here to go _through_ the loop */ useconds = 1; for (d = 0; d < useconds; d += step) { n = 0; howmany = ioctl(0, 'ichr', &n); if (howmany >= 0 && n > 0) { result = 1; break; } if (useconds > 1 && step > 0) { snooze(step); milliseconds -= (step / 1000); if (milliseconds <= 0) { milliseconds = 0; break; } } } } else if (milliseconds > 0) { snooze(milliseconds * 1000); milliseconds = 0; } #elif HAVE_SELECT /* * select() modifies the fd_set arguments; do this in the * loop. */ FD_ZERO(&set); #if !USE_KLIBC_KBD if (mode & TW_INPUT) { FD_SET(sp->_ifd, &set); count = sp->_ifd + 1; } #endif if ((mode & TW_MOUSE) && (fd = sp->_mouse_fd) >= 0) { FD_SET(fd, &set); count = max(fd, count) + 1; } #ifdef NCURSES_WGETCH_EVENTS if ((mode & TW_EVENT) && evl) { for (n = 0; n < evl->count; ++n) { _nc_event *ev = evl->events[n]; if (ev->type == _NC_EVENT_FILE && (ev->data.fev.flags & _NC_EVENT_FILE_READABLE)) { FD_SET(ev->data.fev.fd, &set); count = max(ev->data.fev.fd + 1, count); } } } #endif #if USE_KLIBC_KBD for (saved_set = set;; set = saved_set) { if ((mode & TW_INPUT) && (sp->_extended_key || (KbdPeek(&ki, 0) == 0 && (ki.fbStatus & KBDTRF_FINAL_CHAR_IN)))) { FD_ZERO(&set); FD_SET(sp->_ifd, &set); result = 1; break; } tv.tv_sec = 0; tv.tv_usec = (milliseconds == 0) ? 0 : (10 * 1000); if ((result = select(count, &set, NULL, NULL, &tv)) != 0) break; /* Time out ? */ if (milliseconds >= 0 && _nc_gettime(&t0, FALSE) >= milliseconds) { result = 0; break; } } #else if (milliseconds >= 0) { struct timeval ntimeout; ntimeout.tv_sec = milliseconds / 1000; ntimeout.tv_usec = (milliseconds % 1000) * 1000; result = select(count, &set, NULL, NULL, &ntimeout); } else { result = select(count, &set, NULL, NULL, NULL); } #endif #ifdef NCURSES_WGETCH_EVENTS if ((mode & TW_EVENT) && evl) { evl->result_flags = 0; for (n = 0; n < evl->count; ++n) { _nc_event *ev = evl->events[n]; if (ev->type == _NC_EVENT_FILE && (ev->data.fev.flags & _NC_EVENT_FILE_READABLE)) { ev->data.fev.result = 0; if (FD_ISSET(ev->data.fev.fd, &set)) { ev->data.fev.result |= _NC_EVENT_FILE_READABLE; evl->result_flags |= _NC_EVENT_FILE_READABLE; } } else if (ev->type == _NC_EVENT_TIMEOUT_MSEC && !result && timeout_is_event) evl->result_flags |= _NC_EVENT_TIMEOUT_MSEC; } } #endif #endif /* USE_FUNC_POLL, etc */ returntime = _nc_gettime(&t0, FALSE); if (milliseconds >= 0) milliseconds -= (int) (returntime - starttime); #ifdef NCURSES_WGETCH_EVENTS if (evl) { evl->result_flags = 0; for (n = 0; n < evl->count; ++n) { _nc_event *ev = evl->events[n]; if (ev->type == _NC_EVENT_TIMEOUT_MSEC) { long diff = (returntime - starttime); if (ev->data.timeout_msec <= diff) ev->data.timeout_msec = 0; else ev->data.timeout_msec -= diff; } } } #endif #if PRECISE_GETTIME && HAVE_NANOSLEEP /* * If the timeout hasn't expired, and we've gotten no data, * this is probably a system where 'select()' needs to be left * alone so that it can complete. Make this process sleep, * then come back for more. */ if (result == 0 && milliseconds > 100) { napms(100); /* FIXME: this won't be right if I recur! */ milliseconds -= 100; goto retry; } #endif /* return approximate time left in milliseconds */ if (timeleft) *timeleft = milliseconds; TR(TRACE_IEVENT, ("end twait: returned %d (%d), remaining time %d msec", result, errno, milliseconds)); /* * Both 'poll()' and 'select()' return the number of file descriptors * that are active. Translate this back to the mask that denotes which * file-descriptors, so that we don't need all of this system-specific * code everywhere. */ if (result != 0) { if (result > 0) { result = 0; #if USE_FUNC_POLL for (count = 0; count < MIN_FDS; count++) { if ((mode & (1 << count)) && (fds[count].revents & POLLIN)) { result |= (1 << count); } } #elif defined(__BEOS__) result = TW_INPUT; /* redundant, but simple */ #elif HAVE_SELECT if ((mode & TW_MOUSE) && (fd = sp->_mouse_fd) >= 0 && FD_ISSET(fd, &set)) result |= TW_MOUSE; if ((mode & TW_INPUT) && FD_ISSET(sp->_ifd, &set)) result |= TW_INPUT; #endif } else result = 0; } #ifdef NCURSES_WGETCH_EVENTS if ((mode & TW_EVENT) && evl && evl->result_flags) result |= TW_EVENT; #endif #if USE_FUNC_POLL #ifdef NCURSES_WGETCH_EVENTS if (fds != fd_list) free((char *) fds); #endif #endif return (result); } ncurses-6.0-20160213/ncurses/tty/hardscroll.c0000644000175100001440000003056412554766723017310 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Alexander V Lukyanov 1997-1998 * ****************************************************************************/ /****************************************************************************** NAME hardscroll.c -- hardware-scrolling optimization for ncurses SYNOPSIS void _nc_scroll_optimize(void) DESCRIPTION OVERVIEW This algorithm for computes optimum hardware scrolling to transform an old screen (curscr) into a new screen (newscr) via vertical line moves. Because the screen has a `grain' (there are insert/delete/scroll line operations but no insert/delete/scroll column operations), it is efficient break the update algorithm into two pieces: a first stage that does only line moves, optimizing the end product of user-invoked insertions, deletions, and scrolls; and a second phase (corresponding to the present doupdate code in ncurses) that does only line transformations. The common case we want hardware scrolling for is to handle line insertions and deletions in screen-oriented text-editors. This two-stage approach will accomplish that at a low computation and code-size cost. LINE-MOVE COMPUTATION Now, to a discussion of the line-move computation. For expository purposes, consider the screen lines to be represented by integers 0..23 (with the understanding that the value of 23 may vary). Let a new line introduced by insertion, scrolling, or at the bottom of the screen following a line delete be given the index -1. Assume that the real screen starts with lines 0..23. Now, we have the following possible line-oriented operations on the screen: Insertion: inserts a line at a given screen row, forcing all lines below to scroll forward. The last screen line is lost. For example, an insertion at line 5 would produce: 0..4 -1 5..23. Deletion: deletes a line at a given screen row, forcing all lines below to scroll forward. The last screen line is made new. For example, a deletion at line 7 would produce: 0..6 8..23 -1. Scroll up: move a range of lines up 1. The bottom line of the range becomes new. For example, scrolling up the region from 9 to 14 will produce 0..8 10..14 -1 15..23. Scroll down: move a range of lines down 1. The top line of the range becomes new. For example, scrolling down the region from 12 to 16 will produce 0..11 -1 12..15 17..23. Now, an obvious property of all these operations is that they preserve the order of old lines, though not their position in the sequence. The key trick of this algorithm is that the original line indices described above are actually maintained as _line[].oldindex fields in the window structure, and stick to each line through scroll and insert/delete operations. Thus, it is possible at update time to look at the oldnum fields and compute an optimal set of il/dl/scroll operations that will take the real screen lines to the virtual screen lines. Once these vertical moves have been done, we can hand off to the second stage of the update algorithm, which does line transformations. Note that the move computation does not need to have the full generality of a diff algorithm (which it superficially resembles) because lines cannot be moved out of order. THE ALGORITHM The scrolling is done in two passes. The first pass is from top to bottom scroling hunks UP. The second one is from bottom to top scrolling hunks DOWN. Obviously enough, no lines to be scrolled will be destroyed. (lav) HOW TO TEST THIS: Use the following production: hardscroll: hardscroll.c $(CC) -g -DSCROLLDEBUG hardscroll.c -o hardscroll Then just type scramble vectors and watch. The following test loads are a representative sample of cases: ----------------------------- CUT HERE ------------------------------------ # No lines moved 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # # A scroll up 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 -1 # # A scroll down -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # # An insertion (after line 12) 0 1 2 3 4 5 6 7 8 9 10 11 12 -1 13 14 15 16 17 18 19 20 21 22 # # A simple deletion (line 10) 0 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 20 21 22 23 -1 # # A more complex case -1 -1 -1 -1 -1 3 4 5 6 7 -1 -1 8 9 10 11 12 13 14 15 16 17 -1 -1 ----------------------------- CUT HERE ------------------------------------ AUTHOR Eric S. Raymond , November 1994 New algorithm by Alexander V. Lukyanov , Aug 1997 *****************************************************************************/ #include MODULE_ID("$Id: hardscroll.c,v 1.52 2015/07/25 20:13:07 tom Exp $") #if defined(SCROLLDEBUG) || defined(HASHDEBUG) # undef screen_lines # define screen_lines(sp) MAXLINES NCURSES_EXPORT_VAR (int) oldnums[MAXLINES]; # define OLDNUM(sp,n) oldnums[n] # define _tracef printf # undef TR # define TR(n, a) if (_nc_tracing & (n)) { _tracef a ; putchar('\n'); } extern NCURSES_EXPORT_VAR(unsigned) _nc_tracing; #else /* no debug */ /* OLDNUM(n) indicates which line will be shifted to the position n. if OLDNUM(n) == _NEWINDEX, then the line n in new, not shifted from somewhere. */ NCURSES_EXPORT_VAR (int *) _nc_oldnums = 0; /* obsolete: keep for ABI compat */ # if USE_HASHMAP # define oldnums(sp) (sp)->_oldnum_list # define OLDNUM(sp,n) oldnums(sp)[n] # else /* !USE_HASHMAP */ # define OLDNUM(sp,n) NewScreen(sp)->_line[n].oldindex # endif /* !USE_HASHMAP */ #define OLDNUM_SIZE(sp) (sp)->_oldnum_size #endif /* defined(SCROLLDEBUG) || defined(HASHDEBUG) */ NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_scroll_optimize) (NCURSES_SP_DCL0) /* scroll optimization to transform curscr to newscr */ { int i; int start, end, shift; TR(TRACE_ICALLS, (T_CALLED("_nc_scroll_optimize(%p)"), (void *) SP_PARM)); #if !defined(SCROLLDEBUG) && !defined(HASHDEBUG) #if USE_HASHMAP /* get enough storage */ assert(OLDNUM_SIZE(SP_PARM) >= 0); assert(screen_lines(SP_PARM) > 0); if ((oldnums(SP_PARM) == 0) || (OLDNUM_SIZE(SP_PARM) < screen_lines(SP_PARM))) { int need_lines = ((OLDNUM_SIZE(SP_PARM) < screen_lines(SP_PARM)) ? screen_lines(SP_PARM) : OLDNUM_SIZE(SP_PARM)); int *new_oldnums = typeRealloc(int, (size_t) need_lines, oldnums(SP_PARM)); if (!new_oldnums) return; oldnums(SP_PARM) = new_oldnums; OLDNUM_SIZE(SP_PARM) = need_lines; } /* calculate the indices */ NCURSES_SP_NAME(_nc_hash_map) (NCURSES_SP_ARG); #endif #endif /* !defined(SCROLLDEBUG) && !defined(HASHDEBUG) */ #ifdef TRACE if (USE_TRACEF(TRACE_UPDATE | TRACE_MOVE)) { NCURSES_SP_NAME(_nc_linedump) (NCURSES_SP_ARG); _nc_unlock_global(tracef); } #endif /* TRACE */ /* pass 1 - from top to bottom scrolling up */ for (i = 0; i < screen_lines(SP_PARM);) { while (i < screen_lines(SP_PARM) && (OLDNUM(SP_PARM, i) == _NEWINDEX || OLDNUM(SP_PARM, i) <= i)) i++; if (i >= screen_lines(SP_PARM)) break; shift = OLDNUM(SP_PARM, i) - i; /* shift > 0 */ start = i; i++; while (i < screen_lines(SP_PARM) && OLDNUM(SP_PARM, i) != _NEWINDEX && OLDNUM(SP_PARM, i) - i == shift) i++; end = i - 1 + shift; TR(TRACE_UPDATE | TRACE_MOVE, ("scroll [%d, %d] by %d", start, end, shift)); #if !defined(SCROLLDEBUG) && !defined(HASHDEBUG) if (NCURSES_SP_NAME(_nc_scrolln) (NCURSES_SP_ARGx shift, start, end, screen_lines(SP_PARM) - 1) == ERR) { TR(TRACE_UPDATE | TRACE_MOVE, ("unable to scroll")); continue; } #endif /* !defined(SCROLLDEBUG) && !defined(HASHDEBUG) */ } /* pass 2 - from bottom to top scrolling down */ for (i = screen_lines(SP_PARM) - 1; i >= 0;) { while (i >= 0 && (OLDNUM(SP_PARM, i) == _NEWINDEX || OLDNUM(SP_PARM, i) >= i)) { i--; } if (i < 0) break; shift = OLDNUM(SP_PARM, i) - i; /* shift < 0 */ end = i; i--; while (i >= 0 && OLDNUM(SP_PARM, i) != _NEWINDEX && OLDNUM(SP_PARM, i) - i == shift) { i--; } start = i + 1 - (-shift); TR(TRACE_UPDATE | TRACE_MOVE, ("scroll [%d, %d] by %d", start, end, shift)); #if !defined(SCROLLDEBUG) && !defined(HASHDEBUG) if (NCURSES_SP_NAME(_nc_scrolln) (NCURSES_SP_ARGx shift, start, end, screen_lines(SP_PARM) - 1) == ERR) { TR(TRACE_UPDATE | TRACE_MOVE, ("unable to scroll")); continue; } #endif /* !defined(SCROLLDEBUG) && !defined(HASHDEBUG) */ } TR(TRACE_ICALLS, (T_RETURN(""))); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_scroll_optimize(void) { NCURSES_SP_NAME(_nc_scroll_optimize) (CURRENT_SCREEN); } #endif #if defined(TRACE) || defined(SCROLLDEBUG) || defined(HASHDEBUG) NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_linedump) (NCURSES_SP_DCL0) /* dump the state of the real and virtual oldnum fields */ { int n; char *buf = 0; size_t want = ((size_t) screen_lines(SP_PARM) + 1) * 4; (void) SP_PARM; if ((buf = typeMalloc(char, want)) != 0) { *buf = '\0'; for (n = 0; n < screen_lines(SP_PARM); n++) _nc_SPRINTF(buf + strlen(buf), _nc_SLIMIT(want - strlen(buf)) " %02d", OLDNUM(SP_PARM, n)); TR(TRACE_UPDATE | TRACE_MOVE, ("virt %s", buf)); free(buf); } } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_linedump(void) { NCURSES_SP_NAME(_nc_linedump) (CURRENT_SCREEN); } #endif #endif /* defined(TRACE) || defined(SCROLLDEBUG) */ #ifdef SCROLLDEBUG int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { char line[BUFSIZ], *st; #ifdef TRACE _nc_tracing = TRACE_MOVE; #endif for (;;) { int n; for (n = 0; n < screen_lines(sp); n++) oldnums[n] = _NEWINDEX; /* grab the test vector */ if (fgets(line, sizeof(line), stdin) == (char *) NULL) exit(EXIT_SUCCESS); /* parse it */ n = 0; if (line[0] == '#') { (void) fputs(line, stderr); continue; } st = strtok(line, " "); do { oldnums[n++] = atoi(st); } while ((st = strtok((char *) NULL, " ")) != 0); /* display it */ (void) fputs("Initial input:\n", stderr); _nc_linedump(); _nc_scroll_optimize(); } } #endif /* SCROLLDEBUG */ /* hardscroll.c ends here */ ncurses-6.0-20160213/ncurses/tty/lib_tstp.c0000644000175100001440000003113712326777507016767 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1995-on * ****************************************************************************/ /* ** lib_tstp.c ** ** The routine _nc_signal_handler(). ** */ #include #include MODULE_ID("$Id: lib_tstp.c,v 1.48 2014/04/26 18:47:35 juergen Exp $") #if defined(SIGTSTP) && (HAVE_SIGACTION || HAVE_SIGVEC) #define USE_SIGTSTP 1 #else #define USE_SIGTSTP 0 #endif #ifdef TRACE static const char * signal_name(int sig) { switch (sig) { #ifdef SIGALRM case SIGALRM: return "SIGALRM"; #endif #ifdef SIGCONT case SIGCONT: return "SIGCONT"; #endif case SIGINT: return "SIGINT"; #ifdef SIGQUIT case SIGQUIT: return "SIGQUIT"; #endif case SIGTERM: return "SIGTERM"; #ifdef SIGTSTP case SIGTSTP: return "SIGTSTP"; #endif #ifdef SIGTTOU case SIGTTOU: return "SIGTTOU"; #endif #ifdef SIGWINCH case SIGWINCH: return "SIGWINCH"; #endif default: return "unknown signal"; } } #endif /* * Note: This code is fragile! Its problem is that different OSs * handle restart of system calls interrupted by signals differently. * The ncurses code needs signal-call restart to happen -- otherwise, * interrupted wgetch() calls will return FAIL, probably making the * application think the input stream has ended and it should * terminate. In particular, you know you have this problem if, when * you suspend an ncurses-using lynx with ^Z and resume, it dies * immediately. * * Default behavior of POSIX sigaction(2) is not to restart * interrupted system calls, but Linux's sigaction does it anyway (at * least, on and after the 1.1.47 I (esr) use). Thus this code works * OK under Linux. The 4.4BSD sigaction(2) supports a (non-portable) * SA_RESTART flag that forces the right behavior. Thus, this code * should work OK under BSD/OS, NetBSD, and FreeBSD (let us know if it * does not). * * Stock System Vs (and anything else using a strict-POSIX * sigaction(2) without SA_RESTART) may have a problem. Possible * solutions: * * sigvec restarts by default (SV_INTERRUPT flag to not restart) * signal restarts by default in SVr4 (assuming you link with -lucb) * and BSD, but not SVr3. * sigset restarts, but is only available under SVr4/Solaris. * * The signal(3) call is mandated by the ANSI standard, and its * interaction with sigaction(2) is described in the POSIX standard * (3.3.4.2, page 72,line 934). According to section 8.1, page 191, * however, signal(3) itself is not required by POSIX.1. And POSIX is * silent on whether it is required to restart signals. * * So. The present situation is, we use sigaction(2) with no * guarantee of restart anywhere but on Linux and BSD. We could * switch to signal(3) and collar Linux, BSD, and SVr4. Any way * we slice it, System V UNIXes older than SVr4 will probably lose * (this may include XENIX). * * This implementation will probably be changed to use signal(3) in * the future. If nothing else, it's simpler... */ #if USE_SIGTSTP static void handle_SIGTSTP(int dummy GCC_UNUSED) { SCREEN *sp = CURRENT_SCREEN; sigset_t mask, omask; sigaction_t act, oact; #ifdef SIGTTOU int sigttou_blocked; #endif _nc_globals.have_sigtstp = 1; T(("handle_SIGTSTP() called")); /* * The user may have changed the prog_mode tty bits, so save them. * * But first try to detect whether we still are in the foreground * process group - if not, an interactive shell may already have * taken ownership of the tty and modified the settings when our * parent was stopped before us, and we would likely pick up the * settings already modified by the shell. */ if (sp != 0 && !sp->_endwin) /* don't do this if we're not in curses */ #if HAVE_TCGETPGRP if (tcgetpgrp(STDIN_FILENO) == getpgrp()) #endif NCURSES_SP_NAME(def_prog_mode) (NCURSES_SP_ARG); /* * Block window change and timer signals. The latter * is because applications use timers to decide when * to repaint the screen. */ (void) sigemptyset(&mask); #ifdef SIGALRM (void) sigaddset(&mask, SIGALRM); #endif #if USE_SIGWINCH (void) sigaddset(&mask, SIGWINCH); #endif (void) sigprocmask(SIG_BLOCK, &mask, &omask); #ifdef SIGTTOU sigttou_blocked = sigismember(&omask, SIGTTOU); if (!sigttou_blocked) { (void) sigemptyset(&mask); (void) sigaddset(&mask, SIGTTOU); (void) sigprocmask(SIG_BLOCK, &mask, NULL); } #endif /* * End window mode, which also resets the terminal state to the * original (pre-curses) modes. */ NCURSES_SP_NAME(endwin) (NCURSES_SP_ARG); /* Unblock SIGTSTP. */ (void) sigemptyset(&mask); (void) sigaddset(&mask, SIGTSTP); #ifdef SIGTTOU if (!sigttou_blocked) { /* Unblock this too if it wasn't blocked on entry */ (void) sigaddset(&mask, SIGTTOU); } #endif (void) sigprocmask(SIG_UNBLOCK, &mask, NULL); /* Now we want to resend SIGSTP to this process and suspend it */ act.sa_handler = SIG_DFL; sigemptyset(&act.sa_mask); act.sa_flags = 0; #ifdef SA_RESTART act.sa_flags |= SA_RESTART; #endif /* SA_RESTART */ sigaction(SIGTSTP, &act, &oact); kill(getpid(), SIGTSTP); /* Process gets suspended...time passes...process resumes */ T(("SIGCONT received")); sigaction(SIGTSTP, &oact, NULL); NCURSES_SP_NAME(flushinp) (NCURSES_SP_ARG); /* * If the user modified the tty state while suspended, he wants * those changes to stick. So save the new "default" terminal state. */ NCURSES_SP_NAME(def_shell_mode) (NCURSES_SP_ARG); /* * This relies on the fact that doupdate() will restore the * program-mode tty state, and issue enter_ca_mode if need be. */ NCURSES_SP_NAME(doupdate) (NCURSES_SP_ARG); /* Reset the signals. */ (void) sigprocmask(SIG_SETMASK, &omask, NULL); } #endif /* USE_SIGTSTP */ static void handle_SIGINT(int sig) { SCREEN *sp = CURRENT_SCREEN; /* * Much of this is unsafe from a signal handler. But we'll _try_ to clean * up the screen and terminal settings on the way out. * * There are at least the following problems: * 1) Walking the SCREEN list is unsafe, since all list management * is done without any signal blocking. * 2) On systems which have REENTRANT turned on, set_term() uses * _nc_lock_global() which could deadlock or misbehave in other ways. * 3) endwin() calls all sorts of stuff, many of which use stdio or * other library functions which are clearly unsafe. */ if (!_nc_globals.cleanup_nested++ && (sig == SIGINT || sig == SIGTERM)) { #if HAVE_SIGACTION || HAVE_SIGVEC sigaction_t act; sigemptyset(&act.sa_mask); act.sa_flags = 0; act.sa_handler = SIG_IGN; if (sigaction(sig, &act, NULL) == 0) #else if (signal(sig, SIG_IGN) != SIG_ERR) #endif { SCREEN *scan; for (each_screen(scan)) { if (scan->_ofp != 0 && NC_ISATTY(fileno(scan->_ofp))) { scan->_outch = NCURSES_SP_NAME(_nc_outch); } set_term(scan); NCURSES_SP_NAME(endwin) (NCURSES_SP_ARG); if (sp) sp->_endwin = FALSE; /* in case of reuse */ } } } _exit(EXIT_FAILURE); } #if USE_SIGWINCH static void handle_SIGWINCH(int sig GCC_UNUSED) { _nc_globals.have_sigwinch = 1; # if USE_PTHREADS_EINTR if (_nc_globals.read_thread) { if (!pthread_equal(pthread_self(), _nc_globals.read_thread)) pthread_kill(_nc_globals.read_thread, SIGWINCH); _nc_globals.read_thread = 0; } # endif } #endif /* USE_SIGWINCH */ /* * If the given signal is still in its default state, set it to the given * handler. */ static int CatchIfDefault(int sig, void (*handler) (int)) { int result; #if HAVE_SIGACTION || HAVE_SIGVEC sigaction_t old_act; sigaction_t new_act; memset(&new_act, 0, sizeof(new_act)); sigemptyset(&new_act.sa_mask); #ifdef SA_RESTART #ifdef SIGWINCH if (sig != SIGWINCH) #endif new_act.sa_flags |= SA_RESTART; #endif /* SA_RESTART */ new_act.sa_handler = handler; if (sigaction(sig, NULL, &old_act) == 0 && (old_act.sa_handler == SIG_DFL || old_act.sa_handler == handler #if USE_SIGWINCH || (sig == SIGWINCH && old_act.sa_handler == SIG_IGN) #endif )) { (void) sigaction(sig, &new_act, NULL); result = TRUE; } else { result = FALSE; } #else /* !HAVE_SIGACTION */ void (*ohandler) (int); ohandler = signal(sig, SIG_IGN); if (ohandler == SIG_DFL || ohandler == handler #if USE_SIGWINCH || (sig == SIGWINCH && ohandler == SIG_IGN) #endif ) { signal(sig, handler); result = TRUE; } else { signal(sig, ohandler); result = FALSE; } #endif T(("CatchIfDefault - will %scatch %s", result ? "" : "not ", signal_name(sig))); return result; } /* * This is invoked once at the beginning (e.g., from 'initscr()'), to * initialize the signal catchers, and thereafter when spawning a shell (and * returning) to disable/enable the SIGTSTP (i.e., ^Z) catcher. * * If the application has already set one of the signals, we'll not modify it * (during initialization). * * The XSI document implies that we shouldn't keep the SIGTSTP handler if * the caller later changes its mind, but that doesn't seem correct. */ NCURSES_EXPORT(void) _nc_signal_handler(int enable) { T((T_CALLED("_nc_signal_handler(%d)"), enable)); #if USE_SIGTSTP /* Xenix 2.x doesn't have SIGTSTP, for example */ { static bool ignore_tstp = FALSE; if (!ignore_tstp) { static sigaction_t new_sigaction, old_sigaction; if (!enable) { new_sigaction.sa_handler = SIG_IGN; sigaction(SIGTSTP, &new_sigaction, &old_sigaction); } else if (new_sigaction.sa_handler != SIG_DFL) { sigaction(SIGTSTP, &old_sigaction, NULL); } else if (sigaction(SIGTSTP, NULL, &old_sigaction) == 0 && (old_sigaction.sa_handler == SIG_DFL)) { sigemptyset(&new_sigaction.sa_mask); #ifdef SA_RESTART new_sigaction.sa_flags |= SA_RESTART; #endif /* SA_RESTART */ new_sigaction.sa_handler = handle_SIGTSTP; (void) sigaction(SIGTSTP, &new_sigaction, NULL); } else { ignore_tstp = TRUE; } } } #endif /* !USE_SIGTSTP */ if (!_nc_globals.init_signals) { if (enable) { CatchIfDefault(SIGINT, handle_SIGINT); CatchIfDefault(SIGTERM, handle_SIGINT); #if USE_SIGWINCH CatchIfDefault(SIGWINCH, handle_SIGWINCH); #endif _nc_globals.init_signals = TRUE; } } returnVoid; } ncurses-6.0-20160213/ncurses/tty/lib_mvcur.c0000644000175100001440000012454512554767101017127 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_mvcur.c ** ** The routines for moving the physical cursor and scrolling: ** ** void _nc_mvcur_init(void) ** ** void _nc_mvcur_resume(void) ** ** int mvcur(int old_y, int old_x, int new_y, int new_x) ** ** void _nc_mvcur_wrap(void) ** ** Comparisons with older movement optimizers: ** SVr3 curses mvcur() can't use cursor_to_ll or auto_left_margin. ** 4.4BSD curses can't use cuu/cud/cuf/cub/hpa/vpa/tab/cbt for local ** motions. It doesn't use tactics based on auto_left_margin. Weirdly ** enough, it doesn't use its own hardware-scrolling routine to scroll up ** destination lines for out-of-bounds addresses! ** old ncurses optimizer: less accurate cost computations (in fact, ** it was broken and had to be commented out!). ** ** Compile with -DMAIN to build an interactive tester/timer for the movement ** optimizer. You can use it to investigate the optimizer's behavior. ** You can also use it for tuning the formulas used to determine whether ** or not full optimization is attempted. ** ** This code has a nasty tendency to find bugs in terminfo entries, because it ** exercises the non-cup movement capabilities heavily. If you think you've ** found a bug, try deleting subsets of the following capabilities (arranged ** in decreasing order of suspiciousness): it, tab, cbt, hpa, vpa, cuu, cud, ** cuf, cub, cuu1, cud1, cuf1, cub1. It may be that one or more are wrong. ** ** Note: you should expect this code to look like a resource hog in a profile. ** That's because it does a lot of I/O, through the tputs() calls. The I/O ** cost swamps the computation overhead (and as machines get faster, this ** will become even more true). Comments in the test exerciser at the end ** go into detail about tuning and how you can gauge the optimizer's ** effectiveness. **/ /**************************************************************************** * * Constants and macros for optimizer tuning. * ****************************************************************************/ /* * The average overhead of a full optimization computation in character * transmission times. If it's too high, the algorithm will be a bit * over-biased toward using cup rather than local motions; if it's too * low, the algorithm may spend more time than is strictly optimal * looking for non-cup motions. Profile the optimizer using the `t' * command of the exerciser (see below), and round to the nearest integer. * * Yes, I (esr) thought about computing expected overhead dynamically, say * by derivation from a running average of optimizer times. But the * whole point of this optimization is to *decrease* the frequency of * system calls. :-) */ #define COMPUTE_OVERHEAD 1 /* I use a 90MHz Pentium @ 9.6Kbps */ /* * LONG_DIST is the distance we consider to be just as costly to move over as a * cup sequence is to emit. In other words, it's the length of a cup sequence * adjusted for average computation overhead. The magic number is the length * of "\033[yy;xxH", the typical cup sequence these days. */ #define LONG_DIST (8 - COMPUTE_OVERHEAD) /* * Tell whether a motion is optimizable by local motions. Needs to be cheap to * compute. In general, all the fast moves go to either the right or left edge * of the screen. So any motion to a location that is (a) further away than * LONG_DIST and (b) further inward from the right or left edge than LONG_DIST, * we'll consider nonlocal. */ #define NOT_LOCAL(sp, fy, fx, ty, tx) ((tx > LONG_DIST) \ && (tx < screen_columns(sp) - 1 - LONG_DIST) \ && (abs(ty-fy) + abs(tx-fx) > LONG_DIST)) /**************************************************************************** * * External interfaces * ****************************************************************************/ /* * For this code to work OK, the following components must live in the * screen structure: * * int _char_padding; // cost of character put * int _cr_cost; // cost of (carriage_return) * int _cup_cost; // cost of (cursor_address) * int _home_cost; // cost of (cursor_home) * int _ll_cost; // cost of (cursor_to_ll) *#if USE_HARD_TABS * int _ht_cost; // cost of (tab) * int _cbt_cost; // cost of (back_tab) *#endif USE_HARD_TABS * int _cub1_cost; // cost of (cursor_left) * int _cuf1_cost; // cost of (cursor_right) * int _cud1_cost; // cost of (cursor_down) * int _cuu1_cost; // cost of (cursor_up) * int _cub_cost; // cost of (parm_cursor_left) * int _cuf_cost; // cost of (parm_cursor_right) * int _cud_cost; // cost of (parm_cursor_down) * int _cuu_cost; // cost of (parm_cursor_up) * int _hpa_cost; // cost of (column_address) * int _vpa_cost; // cost of (row_address) * int _ech_cost; // cost of (erase_chars) * int _rep_cost; // cost of (repeat_char) * * The USE_HARD_TABS switch controls whether it is reliable to use tab/backtabs * for local motions. On many systems, it's not, due to uncertainties about * tab delays and whether or not tabs will be expanded in raw mode. If you * have parm_right_cursor, tab motions don't win you a lot anyhow. */ #include #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_mvcur.c,v 1.136 2015/07/25 20:14:57 tom Exp $") #define WANT_CHAR(sp, y, x) NewScreen(sp)->_line[y].text[x] /* desired state */ #if NCURSES_SP_FUNCS #define BAUDRATE(sp) sp->_term->_baudrate /* bits per second */ #else #define BAUDRATE(sp) cur_term->_baudrate /* bits per second */ #endif #if defined(MAIN) || defined(NCURSES_TEST) #include static bool profiling = FALSE; static float diff; #endif /* MAIN */ #undef NCURSES_OUTC_FUNC #define NCURSES_OUTC_FUNC myOutCh #define OPT_SIZE 512 static int normalized_cost(NCURSES_SP_DCLx const char *const cap, int affcnt); /**************************************************************************** * * Initialization/wrapup (including cost pre-computation) * ****************************************************************************/ #ifdef TRACE static int trace_cost_of(NCURSES_SP_DCLx const char *capname, const char *cap, int affcnt) { int result = NCURSES_SP_NAME(_nc_msec_cost) (NCURSES_SP_ARGx cap, affcnt); TR(TRACE_CHARPUT | TRACE_MOVE, ("CostOf %s %d %s", capname, result, _nc_visbuf(cap))); return result; } #define CostOf(cap,affcnt) trace_cost_of(NCURSES_SP_ARGx #cap, cap, affcnt) static int trace_normalized_cost(NCURSES_SP_DCLx const char *capname, const char *cap, int affcnt) { int result = normalized_cost(NCURSES_SP_ARGx cap, affcnt); TR(TRACE_CHARPUT | TRACE_MOVE, ("NormalizedCost %s %d %s", capname, result, _nc_visbuf(cap))); return result; } #define NormalizedCost(cap,affcnt) trace_normalized_cost(NCURSES_SP_ARGx #cap, cap, affcnt) #else #define CostOf(cap,affcnt) NCURSES_SP_NAME(_nc_msec_cost)(NCURSES_SP_ARGx cap, affcnt) #define NormalizedCost(cap,affcnt) normalized_cost(NCURSES_SP_ARGx cap, affcnt) #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_msec_cost) (NCURSES_SP_DCLx const char *const cap, int affcnt) /* compute the cost of a given operation */ { if (cap == 0) return (INFINITY); else { const char *cp; float cum_cost = 0.0; for (cp = cap; *cp; cp++) { /* extract padding, either mandatory or required */ if (cp[0] == '$' && cp[1] == '<' && strchr(cp, '>')) { float number = 0.0; for (cp += 2; *cp != '>'; cp++) { if (isdigit(UChar(*cp))) number = number * 10 + (float) (*cp - '0'); else if (*cp == '*') number *= (float) affcnt; else if (*cp == '.' && (*++cp != '>') && isdigit(UChar(*cp))) number += (float) ((*cp - '0') / 10.0); } #if NCURSES_NO_PADDING if (!GetNoPadding(SP_PARM)) #endif cum_cost += number * 10; } else if (SP_PARM) { cum_cost += (float) SP_PARM->_char_padding; } } return ((int) cum_cost); } } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_msec_cost(const char *const cap, int affcnt) { return NCURSES_SP_NAME(_nc_msec_cost) (CURRENT_SCREEN, cap, affcnt); } #endif static int normalized_cost(NCURSES_SP_DCLx const char *const cap, int affcnt) /* compute the effective character-count for an operation (round up) */ { int cost = NCURSES_SP_NAME(_nc_msec_cost) (NCURSES_SP_ARGx cap, affcnt); if (cost != INFINITY) cost = (cost + SP_PARM->_char_padding - 1) / SP_PARM->_char_padding; return cost; } static void reset_scroll_region(NCURSES_SP_DCL0) /* Set the scroll-region to a known state (the default) */ { if (change_scroll_region) { NCURSES_PUTP2("change_scroll_region", TPARM_2(change_scroll_region, 0, screen_lines(SP_PARM) - 1)); } } NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_resume) (NCURSES_SP_DCL0) /* what to do at initialization time and after each shellout */ { if (!SP_PARM || !IsTermInfo(SP_PARM)) return; /* initialize screen for cursor access */ if (enter_ca_mode) { NCURSES_PUTP2("enter_ca_mode", enter_ca_mode); } /* * Doing this here rather than in _nc_mvcur_wrap() ensures that * ncurses programs will see a reset scroll region even if a * program that messed with it died ungracefully. * * This also undoes the effects of terminal init strings that assume * they know the screen size. This is useful when you're running * a vt100 emulation through xterm. */ reset_scroll_region(NCURSES_SP_ARG); SP_PARM->_cursrow = SP_PARM->_curscol = -1; /* restore cursor shape */ if (SP_PARM->_cursor != -1) { int cursor = SP_PARM->_cursor; SP_PARM->_cursor = -1; NCURSES_SP_NAME(curs_set) (NCURSES_SP_ARGx cursor); } } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_mvcur_resume(void) { NCURSES_SP_NAME(_nc_mvcur_resume) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_init) (NCURSES_SP_DCL0) /* initialize the cost structure */ { if (SP_PARM->_ofp && NC_ISATTY(fileno(SP_PARM->_ofp))) { SP_PARM->_char_padding = ((BAUDBYTE * 1000 * 10) / (BAUDRATE(SP_PARM) > 0 ? BAUDRATE(SP_PARM) : 9600)); } else { SP_PARM->_char_padding = 1; /* must be nonzero */ } if (SP_PARM->_char_padding <= 0) SP_PARM->_char_padding = 1; /* must be nonzero */ TR(TRACE_CHARPUT | TRACE_MOVE, ("char_padding %d msecs", SP_PARM->_char_padding)); /* non-parameterized local-motion strings */ SP_PARM->_cr_cost = CostOf(carriage_return, 0); SP_PARM->_home_cost = CostOf(cursor_home, 0); SP_PARM->_ll_cost = CostOf(cursor_to_ll, 0); #if USE_HARD_TABS if (getenv("NCURSES_NO_HARD_TABS") == 0) { SP_PARM->_ht_cost = CostOf(tab, 0); SP_PARM->_cbt_cost = CostOf(back_tab, 0); } else { SP_PARM->_ht_cost = INFINITY; SP_PARM->_cbt_cost = INFINITY; } #endif /* USE_HARD_TABS */ SP_PARM->_cub1_cost = CostOf(cursor_left, 0); SP_PARM->_cuf1_cost = CostOf(cursor_right, 0); SP_PARM->_cud1_cost = CostOf(cursor_down, 0); SP_PARM->_cuu1_cost = CostOf(cursor_up, 0); SP_PARM->_smir_cost = CostOf(enter_insert_mode, 0); SP_PARM->_rmir_cost = CostOf(exit_insert_mode, 0); SP_PARM->_ip_cost = 0; if (insert_padding) { SP_PARM->_ip_cost = CostOf(insert_padding, 0); } /* * Assumption: if the terminal has memory_relative addressing, the * initialization strings or smcup will set single-page mode so we * can treat it like absolute screen addressing. This seems to be true * for all cursor_mem_address terminal types in the terminfo database. */ SP_PARM->_address_cursor = cursor_address ? cursor_address : cursor_mem_address; /* * Parametrized local-motion strings. This static cost computation * depends on the following assumptions: * * (1) They never have * padding. In the entire master terminfo database * as of March 1995, only the obsolete Zenith Z-100 pc violates this. * (Proportional padding is found mainly in insert, delete and scroll * capabilities). * * (2) The average case of cup has two two-digit parameters. Strictly, * the average case for a 24 * 80 screen has ((10*10*(1 + 1)) + * (14*10*(1 + 2)) + (10*70*(2 + 1)) + (14*70*4)) / (24*80) = 3.458 * digits of parameters. On a 25x80 screen the average is 3.6197. * On larger screens the value gets much closer to 4. * * (3) The average case of cub/cuf/hpa/ech/rep has 2 digits of parameters * (strictly, (((10 * 1) + (70 * 2)) / 80) = 1.8750). * * (4) The average case of cud/cuu/vpa has 2 digits of parameters * (strictly, (((10 * 1) + (14 * 2)) / 24) = 1.5833). * * All these averages depend on the assumption that all parameter values * are equally probable. */ SP_PARM->_cup_cost = CostOf(TPARM_2(SP_PARM->_address_cursor, 23, 23), 1); SP_PARM->_cub_cost = CostOf(TPARM_1(parm_left_cursor, 23), 1); SP_PARM->_cuf_cost = CostOf(TPARM_1(parm_right_cursor, 23), 1); SP_PARM->_cud_cost = CostOf(TPARM_1(parm_down_cursor, 23), 1); SP_PARM->_cuu_cost = CostOf(TPARM_1(parm_up_cursor, 23), 1); SP_PARM->_hpa_cost = CostOf(TPARM_1(column_address, 23), 1); SP_PARM->_vpa_cost = CostOf(TPARM_1(row_address, 23), 1); /* non-parameterized screen-update strings */ SP_PARM->_ed_cost = NormalizedCost(clr_eos, 1); SP_PARM->_el_cost = NormalizedCost(clr_eol, 1); SP_PARM->_el1_cost = NormalizedCost(clr_bol, 1); SP_PARM->_dch1_cost = NormalizedCost(delete_character, 1); SP_PARM->_ich1_cost = NormalizedCost(insert_character, 1); /* * If this is a bce-terminal, we want to bias the choice so we use clr_eol * rather than spaces at the end of a line. */ if (back_color_erase) SP_PARM->_el_cost = 0; /* parameterized screen-update strings */ SP_PARM->_dch_cost = NormalizedCost(TPARM_1(parm_dch, 23), 1); SP_PARM->_ich_cost = NormalizedCost(TPARM_1(parm_ich, 23), 1); SP_PARM->_ech_cost = NormalizedCost(TPARM_1(erase_chars, 23), 1); SP_PARM->_rep_cost = NormalizedCost(TPARM_2(repeat_char, ' ', 23), 1); SP_PARM->_cup_ch_cost = NormalizedCost( TPARM_2(SP_PARM->_address_cursor, 23, 23), 1); SP_PARM->_hpa_ch_cost = NormalizedCost(TPARM_1(column_address, 23), 1); SP_PARM->_cuf_ch_cost = NormalizedCost(TPARM_1(parm_right_cursor, 23), 1); SP_PARM->_inline_cost = min(SP_PARM->_cup_ch_cost, min(SP_PARM->_hpa_ch_cost, SP_PARM->_cuf_ch_cost)); /* * If save_cursor is used within enter_ca_mode, we should not use it for * scrolling optimization, since the corresponding restore_cursor is not * nested on the various terminals (vt100, xterm, etc.) which use this * feature. */ if (save_cursor != 0 && enter_ca_mode != 0 && strstr(enter_ca_mode, save_cursor) != 0) { T(("...suppressed sc/rc capability due to conflict with smcup/rmcup")); save_cursor = 0; restore_cursor = 0; } /* * A different, possibly better way to arrange this would be to set the * SCREEN's _endwin to TRUE at window initialization time and let this be * called by doupdate's return-from-shellout code. */ NCURSES_SP_NAME(_nc_mvcur_resume) (NCURSES_SP_ARG); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_mvcur_init(void) { NCURSES_SP_NAME(_nc_mvcur_init) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_wrap) (NCURSES_SP_DCL0) /* wrap up cursor-addressing mode */ { /* leave cursor at screen bottom */ TINFO_MVCUR(NCURSES_SP_ARGx -1, -1, screen_lines(SP_PARM) - 1, 0); if (!SP_PARM || !IsTermInfo(SP_PARM)) return; /* set cursor to normal mode */ if (SP_PARM->_cursor != -1) { int cursor = SP_PARM->_cursor; NCURSES_SP_NAME(curs_set) (NCURSES_SP_ARGx 1); SP_PARM->_cursor = cursor; } if (exit_ca_mode) { NCURSES_PUTP2("exit_ca_mode", exit_ca_mode); } /* * Reset terminal's tab counter. There's a long-time bug that * if you exit a "curses" program such as vi or more, tab * forward, and then backspace, the cursor doesn't go to the * right place. The problem is that the kernel counts the * escape sequences that reset things as column positions. * Utter a \r to reset this invisibly. */ NCURSES_SP_NAME(_nc_outch) (NCURSES_SP_ARGx '\r'); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_mvcur_wrap(void) { NCURSES_SP_NAME(_nc_mvcur_wrap) (CURRENT_SCREEN); } #endif /**************************************************************************** * * Optimized cursor movement * ****************************************************************************/ /* * Perform repeated-append, returning cost */ static NCURSES_INLINE int repeated_append(string_desc * target, int total, int num, int repeat, const char *src) { size_t need = (size_t) repeat * strlen(src); if (need < target->s_size) { while (repeat-- > 0) { if (_nc_safe_strcat(target, src)) { total += num; } else { total = INFINITY; break; } } } else { total = INFINITY; } return total; } #ifndef NO_OPTIMIZE #define NEXTTAB(fr) (fr + init_tabs - (fr % init_tabs)) /* * Assume back_tab (CBT) does not wrap backwards at the left margin, return * a negative value at that point to simplify the loop. */ #define LASTTAB(fr) ((fr > 0) ? ((fr - 1) / init_tabs) * init_tabs : -1) static int relative_move(NCURSES_SP_DCLx string_desc * target, int from_y, int from_x, int to_y, int to_x, int ovw) /* move via local motions (cuu/cuu1/cud/cud1/cub1/cub/cuf1/cuf/vpa/hpa) */ { string_desc save; int n, vcost = 0, hcost = 0; (void) _nc_str_copy(&save, target); if (to_y != from_y) { vcost = INFINITY; if (row_address != 0 && _nc_safe_strcat(target, TPARM_1(row_address, to_y))) { vcost = SP_PARM->_vpa_cost; } if (to_y > from_y) { n = (to_y - from_y); if (parm_down_cursor && SP_PARM->_cud_cost < vcost && _nc_safe_strcat(_nc_str_copy(target, &save), TPARM_1(parm_down_cursor, n))) { vcost = SP_PARM->_cud_cost; } if (cursor_down && (*cursor_down != '\n' || SP_PARM->_nl) && (n * SP_PARM->_cud1_cost < vcost)) { vcost = repeated_append(_nc_str_copy(target, &save), 0, SP_PARM->_cud1_cost, n, cursor_down); } } else { /* (to_y < from_y) */ n = (from_y - to_y); if (parm_up_cursor && SP_PARM->_cuu_cost < vcost && _nc_safe_strcat(_nc_str_copy(target, &save), TPARM_1(parm_up_cursor, n))) { vcost = SP_PARM->_cuu_cost; } if (cursor_up && (n * SP_PARM->_cuu1_cost < vcost)) { vcost = repeated_append(_nc_str_copy(target, &save), 0, SP_PARM->_cuu1_cost, n, cursor_up); } } if (vcost == INFINITY) return (INFINITY); } save = *target; if (to_x != from_x) { char str[OPT_SIZE]; string_desc check; hcost = INFINITY; if (column_address && _nc_safe_strcat(_nc_str_copy(target, &save), TPARM_1(column_address, to_x))) { hcost = SP_PARM->_hpa_cost; } if (to_x > from_x) { n = to_x - from_x; if (parm_right_cursor && SP_PARM->_cuf_cost < hcost && _nc_safe_strcat(_nc_str_copy(target, &save), TPARM_1(parm_right_cursor, n))) { hcost = SP_PARM->_cuf_cost; } if (cursor_right) { int lhcost = 0; (void) _nc_str_init(&check, str, sizeof(str)); #if USE_HARD_TABS /* use hard tabs, if we have them, to do as much as possible */ if (init_tabs > 0 && tab) { int nxt, fr; for (fr = from_x; (nxt = NEXTTAB(fr)) <= to_x; fr = nxt) { lhcost = repeated_append(&check, lhcost, SP_PARM->_ht_cost, 1, tab); if (lhcost == INFINITY) break; } n = to_x - fr; from_x = fr; } #endif /* USE_HARD_TABS */ if (n <= 0 || n >= (int) check.s_size) ovw = FALSE; #if BSD_TPUTS /* * If we're allowing BSD-style padding in tputs, don't generate * a string with a leading digit. Otherwise, that will be * interpreted as a padding value rather than sent to the * screen. */ if (ovw && n > 0 && n < (int) check.s_size && vcost == 0 && str[0] == '\0') { int wanted = CharOf(WANT_CHAR(SP_PARM, to_y, from_x)); if (is8bits(wanted) && isdigit(wanted)) ovw = FALSE; } #endif /* * If we have no attribute changes, overwrite is cheaper. * Note: must suppress this by passing in ovw = FALSE whenever * WANT_CHAR would return invalid data. In particular, this * is true between the time a hardware scroll has been done * and the time the structure WANT_CHAR would access has been * updated. */ if (ovw) { int i; for (i = 0; i < n; i++) { NCURSES_CH_T ch = WANT_CHAR(SP_PARM, to_y, from_x + i); if (!SameAttrOf(ch, SCREEN_ATTRS(SP_PARM)) #if USE_WIDEC_SUPPORT || !Charable(ch) #endif ) { ovw = FALSE; break; } } } if (ovw) { int i; for (i = 0; i < n; i++) *check.s_tail++ = (char) CharOf(WANT_CHAR(SP_PARM, to_y, from_x + i)); *check.s_tail = '\0'; check.s_size -= (size_t) n; lhcost += n * SP_PARM->_char_padding; } else { lhcost = repeated_append(&check, lhcost, SP_PARM->_cuf1_cost, n, cursor_right); } if (lhcost < hcost && _nc_safe_strcat(_nc_str_copy(target, &save), str)) { hcost = lhcost; } } } else { /* (to_x < from_x) */ n = from_x - to_x; if (parm_left_cursor && SP_PARM->_cub_cost < hcost && _nc_safe_strcat(_nc_str_copy(target, &save), TPARM_1(parm_left_cursor, n))) { hcost = SP_PARM->_cub_cost; } if (cursor_left) { int lhcost = 0; (void) _nc_str_init(&check, str, sizeof(str)); #if USE_HARD_TABS if (init_tabs > 0 && back_tab) { int nxt, fr; for (fr = from_x; (nxt = LASTTAB(fr)) >= to_x; fr = nxt) { lhcost = repeated_append(&check, lhcost, SP_PARM->_cbt_cost, 1, back_tab); if (lhcost == INFINITY) break; } n = fr - to_x; } #endif /* USE_HARD_TABS */ lhcost = repeated_append(&check, lhcost, SP_PARM->_cub1_cost, n, cursor_left); if (lhcost < hcost && _nc_safe_strcat(_nc_str_copy(target, &save), str)) { hcost = lhcost; } } } if (hcost == INFINITY) return (INFINITY); } return (vcost + hcost); } #endif /* !NO_OPTIMIZE */ /* * With the machinery set up above, it's conceivable that * onscreen_mvcur could be modified into a recursive function that does * an alpha-beta search of motion space, as though it were a chess * move tree, with the weight function being boolean and the search * depth equated to length of string. However, this would jack up the * computation cost a lot, especially on terminals without a cup * capability constraining the search tree depth. So we settle for * the simpler method below. */ static NCURSES_INLINE int onscreen_mvcur(NCURSES_SP_DCLx int yold, int xold, int ynew, int xnew, int ovw, NCURSES_SP_OUTC myOutCh) /* onscreen move from (yold, xold) to (ynew, xnew) */ { string_desc result; char buffer[OPT_SIZE]; int tactic = 0, newcost, usecost = INFINITY; int t5_cr_cost; #if defined(MAIN) || defined(NCURSES_TEST) struct timeval before, after; gettimeofday(&before, NULL); #endif /* MAIN */ #define NullResult _nc_str_null(&result, sizeof(buffer)) #define InitResult _nc_str_init(&result, buffer, sizeof(buffer)) /* tactic #0: use direct cursor addressing */ if (_nc_safe_strcpy(InitResult, TPARM_2(SP_PARM->_address_cursor, ynew, xnew))) { tactic = 0; usecost = SP_PARM->_cup_cost; #if defined(TRACE) || defined(NCURSES_TEST) if (!(_nc_optimize_enable & OPTIMIZE_MVCUR)) goto nonlocal; #endif /* TRACE */ /* * We may be able to tell in advance that the full optimization * will probably not be worth its overhead. Also, don't try to * use local movement if the current attribute is anything but * A_NORMAL...there are just too many ways this can screw up * (like, say, local-movement \n getting mapped to some obscure * character because A_ALTCHARSET is on). */ if (yold == -1 || xold == -1 || NOT_LOCAL(SP_PARM, yold, xold, ynew, xnew)) { #if defined(MAIN) || defined(NCURSES_TEST) if (!profiling) { (void) fputs("nonlocal\n", stderr); goto nonlocal; /* always run the optimizer if profiling */ } #else goto nonlocal; #endif /* MAIN */ } } #ifndef NO_OPTIMIZE /* tactic #1: use local movement */ if (yold != -1 && xold != -1 && ((newcost = relative_move(NCURSES_SP_ARGx NullResult, yold, xold, ynew, xnew, ovw)) != INFINITY) && newcost < usecost) { tactic = 1; usecost = newcost; } /* tactic #2: use carriage-return + local movement */ if (yold != -1 && carriage_return && ((newcost = relative_move(NCURSES_SP_ARGx NullResult, yold, 0, ynew, xnew, ovw)) != INFINITY) && SP_PARM->_cr_cost + newcost < usecost) { tactic = 2; usecost = SP_PARM->_cr_cost + newcost; } /* tactic #3: use home-cursor + local movement */ if (cursor_home && ((newcost = relative_move(NCURSES_SP_ARGx NullResult, 0, 0, ynew, xnew, ovw)) != INFINITY) && SP_PARM->_home_cost + newcost < usecost) { tactic = 3; usecost = SP_PARM->_home_cost + newcost; } /* tactic #4: use home-down + local movement */ if (cursor_to_ll && ((newcost = relative_move(NCURSES_SP_ARGx NullResult, screen_lines(SP_PARM) - 1, 0, ynew, xnew, ovw)) != INFINITY) && SP_PARM->_ll_cost + newcost < usecost) { tactic = 4; usecost = SP_PARM->_ll_cost + newcost; } /* * tactic #5: use left margin for wrap to right-hand side, * unless strange wrap behavior indicated by xenl might hose us. */ t5_cr_cost = (xold > 0 ? SP_PARM->_cr_cost : 0); if (auto_left_margin && !eat_newline_glitch && yold > 0 && cursor_left && ((newcost = relative_move(NCURSES_SP_ARGx NullResult, yold - 1, screen_columns(SP_PARM) - 1, ynew, xnew, ovw)) != INFINITY) && t5_cr_cost + SP_PARM->_cub1_cost + newcost < usecost) { tactic = 5; usecost = t5_cr_cost + SP_PARM->_cub1_cost + newcost; } /* * These cases are ordered by estimated relative frequency. */ if (tactic) InitResult; switch (tactic) { case 1: (void) relative_move(NCURSES_SP_ARGx &result, yold, xold, ynew, xnew, ovw); break; case 2: (void) _nc_safe_strcpy(&result, carriage_return); (void) relative_move(NCURSES_SP_ARGx &result, yold, 0, ynew, xnew, ovw); break; case 3: (void) _nc_safe_strcpy(&result, cursor_home); (void) relative_move(NCURSES_SP_ARGx &result, 0, 0, ynew, xnew, ovw); break; case 4: (void) _nc_safe_strcpy(&result, cursor_to_ll); (void) relative_move(NCURSES_SP_ARGx &result, screen_lines(SP_PARM) - 1, 0, ynew, xnew, ovw); break; case 5: if (xold > 0) (void) _nc_safe_strcat(&result, carriage_return); (void) _nc_safe_strcat(&result, cursor_left); (void) relative_move(NCURSES_SP_ARGx &result, yold - 1, screen_columns(SP_PARM) - 1, ynew, xnew, ovw); break; } #endif /* !NO_OPTIMIZE */ nonlocal: #if defined(MAIN) || defined(NCURSES_TEST) gettimeofday(&after, NULL); diff = after.tv_usec - before.tv_usec + (after.tv_sec - before.tv_sec) * 1000000; if (!profiling) (void) fprintf(stderr, "onscreen: %d microsec, %f 28.8Kbps char-equivalents\n", (int) diff, diff / 288); #endif /* MAIN */ if (usecost != INFINITY) { TPUTS_TRACE("mvcur"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx buffer, 1, myOutCh); SP_PARM->_cursrow = ynew; SP_PARM->_curscol = xnew; return (OK); } else return (ERR); } /* * optimized cursor move from (yold, xold) to (ynew, xnew) */ static int _nc_real_mvcur(NCURSES_SP_DCLx int yold, int xold, int ynew, int xnew, NCURSES_SP_OUTC myOutCh, int ovw) { NCURSES_CH_T oldattr; int code; TR(TRACE_CALLS | TRACE_MOVE, (T_CALLED("_nc_tinfo_mvcur(%p,%d,%d,%d,%d)"), (void *) SP_PARM, yold, xold, ynew, xnew)); if (SP_PARM == 0) { code = ERR; } else if (yold == ynew && xold == xnew) { code = OK; } else { /* * Most work here is rounding for terminal boundaries getting the * column position implied by wraparound or the lack thereof and * rolling up the screen to get ynew on the screen. */ if (xnew >= screen_columns(SP_PARM)) { ynew += xnew / screen_columns(SP_PARM); xnew %= screen_columns(SP_PARM); } /* * Force restore even if msgr is on when we're in an alternate * character set -- these have a strong tendency to screw up the CR & * LF used for local character motions! */ oldattr = SCREEN_ATTRS(SP_PARM); if ((AttrOf(oldattr) & A_ALTCHARSET) || (AttrOf(oldattr) && !move_standout_mode)) { TR(TRACE_CHARPUT, ("turning off (%#lx) %s before move", (unsigned long) AttrOf(oldattr), _traceattr(AttrOf(oldattr)))); (void) VIDATTR(SP_PARM, A_NORMAL, 0); } if (xold >= screen_columns(SP_PARM)) { int l; if (SP_PARM->_nl) { l = (xold + 1) / screen_columns(SP_PARM); yold += l; if (yold >= screen_lines(SP_PARM)) l -= (yold - screen_lines(SP_PARM) - 1); if (l > 0) { if (carriage_return) { NCURSES_PUTP2("carriage_return", carriage_return); } else { myOutCh(NCURSES_SP_ARGx '\r'); } xold = 0; while (l > 0) { if (newline) { NCURSES_PUTP2("newline", newline); } else { myOutCh(NCURSES_SP_ARGx '\n'); } l--; } } } else { /* * If caller set nonl(), we cannot really use newlines to * position to the next row. */ xold = -1; yold = -1; } } if (yold > screen_lines(SP_PARM) - 1) yold = screen_lines(SP_PARM) - 1; if (ynew > screen_lines(SP_PARM) - 1) ynew = screen_lines(SP_PARM) - 1; /* destination location is on screen now */ code = onscreen_mvcur(NCURSES_SP_ARGx yold, xold, ynew, xnew, ovw, myOutCh); /* * Restore attributes if we disabled them before moving. */ if (!SameAttrOf(oldattr, SCREEN_ATTRS(SP_PARM))) { TR(TRACE_CHARPUT, ("turning on (%#lx) %s after move", (unsigned long) AttrOf(oldattr), _traceattr(AttrOf(oldattr)))); (void) VIDATTR(SP_PARM, AttrOf(oldattr), GetPair(oldattr)); } } returnCode(code); } /* * These entrypoints are used within the library. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_mvcur) (NCURSES_SP_DCLx int yold, int xold, int ynew, int xnew) { return _nc_real_mvcur(NCURSES_SP_ARGx yold, xold, ynew, xnew, NCURSES_SP_NAME(_nc_outch), TRUE); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_mvcur(int yold, int xold, int ynew, int xnew) { return NCURSES_SP_NAME(_nc_mvcur) (CURRENT_SCREEN, yold, xold, ynew, xnew); } #endif #if defined(USE_TERM_DRIVER) /* * The terminal driver does not support the external "mvcur()". */ NCURSES_EXPORT(int) TINFO_MVCUR(NCURSES_SP_DCLx int yold, int xold, int ynew, int xnew) { return _nc_real_mvcur(NCURSES_SP_ARGx yold, xold, ynew, xnew, NCURSES_SP_NAME(_nc_outch), TRUE); } #else /* !USE_TERM_DRIVER */ /* * These entrypoints support users of the library. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (NCURSES_SP_DCLx int yold, int xold, int ynew, int xnew) { return _nc_real_mvcur(NCURSES_SP_ARGx yold, xold, ynew, xnew, NCURSES_SP_NAME(_nc_putchar), FALSE); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) mvcur(int yold, int xold, int ynew, int xnew) { return NCURSES_SP_NAME(mvcur) (CURRENT_SCREEN, yold, xold, ynew, xnew); } #endif #endif /* USE_TERM_DRIVER */ #if defined(TRACE) || defined(NCURSES_TEST) NCURSES_EXPORT_VAR(int) _nc_optimize_enable = OPTIMIZE_ALL; #endif #if defined(MAIN) || defined(NCURSES_TEST) /**************************************************************************** * * Movement optimizer test code * ****************************************************************************/ #include #include #include NCURSES_EXPORT_VAR(const char *) _nc_progname = "mvcur"; static unsigned long xmits; /* these override lib_tputs.c */ NCURSES_EXPORT(int) tputs(const char *string, int affcnt GCC_UNUSED, int (*outc) (int) GCC_UNUSED) /* stub tputs() that dumps sequences in a visible form */ { if (profiling) xmits += strlen(string); else (void) fputs(_nc_visbuf(string), stdout); return (OK); } NCURSES_EXPORT(int) putp(const char *string) { return (tputs(string, 1, _nc_outch)); } NCURSES_EXPORT(int) _nc_outch(int ch) { putc(ch, stdout); return OK; } NCURSES_EXPORT(int) delay_output(int ms GCC_UNUSED) { return OK; } static char tname[PATH_MAX]; static void load_term(void) { (void) setupterm(tname, STDOUT_FILENO, NULL); } static int roll(int n) { int i, j; i = (RAND_MAX / n) * n; while ((j = rand()) >= i) continue; return (j % n); } int main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { strcpy(tname, getenv("TERM")); load_term(); _nc_setupscreen(lines, columns, stdout, FALSE, 0); baudrate(); _nc_mvcur_init(); (void) puts("The mvcur tester. Type ? for help"); fputs("smcup:", stdout); putchar('\n'); for (;;) { int fy, fx, ty, tx, n, i; char buf[BUFSIZ], capname[BUFSIZ]; (void) fputs("> ", stdout); (void) fgets(buf, sizeof(buf), stdin); if (buf[0] == '?') { (void) puts("? -- display this help message"); (void) puts("fy fx ty tx -- (4 numbers) display (fy,fx)->(ty,tx) move"); (void) puts("s[croll] n t b m -- display scrolling sequence"); (void) printf("r[eload] -- reload terminal info for %s\n", termname()); (void) puts("l[oad] -- load terminal info for type "); (void) puts("d[elete] -- delete named capability"); (void) puts("i[nspect] -- display terminal capabilities"); (void) puts("c[ost] -- dump cursor-optimization cost table"); (void) puts("o[optimize] -- toggle movement optimization"); (void) puts("t[orture] -- torture-test with random moves"); (void) puts("q[uit] -- quit the program"); } else if (sscanf(buf, "%d %d %d %d", &fy, &fx, &ty, &tx) == 4) { struct timeval before, after; putchar('"'); gettimeofday(&before, NULL); mvcur(fy, fx, ty, tx); gettimeofday(&after, NULL); printf("\" (%ld msec)\n", (long) (after.tv_usec - before.tv_usec + (after.tv_sec - before.tv_sec) * 1000000)); } else if (sscanf(buf, "s %d %d %d %d", &fy, &fx, &ty, &tx) == 4) { struct timeval before, after; putchar('"'); gettimeofday(&before, NULL); _nc_scrolln(fy, fx, ty, tx); gettimeofday(&after, NULL); printf("\" (%ld msec)\n", (long) (after.tv_usec - before.tv_usec + (after.tv_sec - before.tv_sec) * 1000000)); } else if (buf[0] == 'r') { (void) strcpy(tname, termname()); load_term(); } else if (sscanf(buf, "l %s", tname) == 1) { load_term(); } else if (sscanf(buf, "d %s", capname) == 1) { struct name_table_entry const *np = _nc_find_entry(capname, _nc_get_hash_table(FALSE)); if (np == NULL) (void) printf("No such capability as \"%s\"\n", capname); else { switch (np->nte_type) { case BOOLEAN: cur_term->type.Booleans[np->nte_index] = FALSE; (void) printf("Boolean capability `%s' (%d) turned off.\n", np->nte_name, np->nte_index); break; case NUMBER: cur_term->type.Numbers[np->nte_index] = ABSENT_NUMERIC; (void) printf("Number capability `%s' (%d) set to -1.\n", np->nte_name, np->nte_index); break; case STRING: cur_term->type.Strings[np->nte_index] = ABSENT_STRING; (void) printf("String capability `%s' (%d) deleted.\n", np->nte_name, np->nte_index); break; } } } else if (buf[0] == 'i') { dump_init(NULL, F_TERMINFO, S_TERMINFO, 70, 0, 0, FALSE, FALSE); dump_entry(&cur_term->type, FALSE, TRUE, 0, 0); putchar('\n'); } else if (buf[0] == 'o') { if (_nc_optimize_enable & OPTIMIZE_MVCUR) { _nc_optimize_enable &= ~OPTIMIZE_MVCUR; (void) puts("Optimization is now off."); } else { _nc_optimize_enable |= OPTIMIZE_MVCUR; (void) puts("Optimization is now on."); } } /* * You can use the `t' test to profile and tune the movement * optimizer. Use iteration values in three digits or more. * At above 5000 iterations the profile timing averages are stable * to within a millisecond or three. * * The `overhead' field of the report will help you pick a * COMPUTE_OVERHEAD figure appropriate for your processor and * expected line speed. The `total estimated time' is * computation time plus a character-transmission time * estimate computed from the number of transmits and the baud * rate. * * Use this together with the `o' command to get a read on the * optimizer's effectiveness. Compare the total estimated times * for `t' runs of the same length in both optimized and un-optimized * modes. As long as the optimized times are less, the optimizer * is winning. */ else if (sscanf(buf, "t %d", &n) == 1) { float cumtime = 0.0, perchar; int speeds[] = {2400, 9600, 14400, 19200, 28800, 38400, 0}; srand((unsigned) (getpid() + time((time_t *) 0))); profiling = TRUE; xmits = 0; for (i = 0; i < n; i++) { /* * This does a move test between two random locations, * Random moves probably short-change the optimizer, * which will work better on the short moves probably * typical of doupdate()'s usage pattern. Still, * until we have better data... */ #ifdef FIND_COREDUMP int from_y = roll(lines); int to_y = roll(lines); int from_x = roll(columns); int to_x = roll(columns); printf("(%d,%d) -> (%d,%d)\n", from_y, from_x, to_y, to_x); mvcur(from_y, from_x, to_y, to_x); #else mvcur(roll(lines), roll(columns), roll(lines), roll(columns)); #endif /* FIND_COREDUMP */ if (diff) cumtime += diff; } profiling = FALSE; /* * Average milliseconds per character optimization time. * This is the key figure to watch when tuning the optimizer. */ perchar = cumtime / n; (void) printf("%d moves (%ld chars) in %d msec, %f msec each:\n", n, xmits, (int) cumtime, perchar); for (i = 0; speeds[i]; i++) { /* * Total estimated time for the moves, computation and * transmission both. Transmission time is an estimate * assuming 9 bits/char, 8 bits + 1 stop bit. */ float totalest = cumtime + xmits * 9 * 1e6 / speeds[i]; /* * Per-character optimization overhead in character transmits * at the current speed. Round this to the nearest integer * to figure COMPUTE_OVERHEAD for the speed. */ float overhead = speeds[i] * perchar / 1e6; (void) printf("%6d bps: %3.2f char-xmits overhead; total estimated time %15.2f\n", speeds[i], overhead, totalest); } } else if (buf[0] == 'c') { (void) printf("char padding: %d\n", CURRENT_SCREEN->_char_padding); (void) printf("cr cost: %d\n", CURRENT_SCREEN->_cr_cost); (void) printf("cup cost: %d\n", CURRENT_SCREEN->_cup_cost); (void) printf("home cost: %d\n", CURRENT_SCREEN->_home_cost); (void) printf("ll cost: %d\n", CURRENT_SCREEN->_ll_cost); #if USE_HARD_TABS (void) printf("ht cost: %d\n", CURRENT_SCREEN->_ht_cost); (void) printf("cbt cost: %d\n", CURRENT_SCREEN->_cbt_cost); #endif /* USE_HARD_TABS */ (void) printf("cub1 cost: %d\n", CURRENT_SCREEN->_cub1_cost); (void) printf("cuf1 cost: %d\n", CURRENT_SCREEN->_cuf1_cost); (void) printf("cud1 cost: %d\n", CURRENT_SCREEN->_cud1_cost); (void) printf("cuu1 cost: %d\n", CURRENT_SCREEN->_cuu1_cost); (void) printf("cub cost: %d\n", CURRENT_SCREEN->_cub_cost); (void) printf("cuf cost: %d\n", CURRENT_SCREEN->_cuf_cost); (void) printf("cud cost: %d\n", CURRENT_SCREEN->_cud_cost); (void) printf("cuu cost: %d\n", CURRENT_SCREEN->_cuu_cost); (void) printf("hpa cost: %d\n", CURRENT_SCREEN->_hpa_cost); (void) printf("vpa cost: %d\n", CURRENT_SCREEN->_vpa_cost); } else if (buf[0] == 'x' || buf[0] == 'q') break; else (void) puts("Invalid command."); } (void) fputs("rmcup:", stdout); _nc_mvcur_wrap(); putchar('\n'); return (0); } #endif /* MAIN */ /* lib_mvcur.c ends here */ ncurses-6.0-20160213/ncurses/llib-lncurses0000644000175100001440000021122512563706654016660 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tty/hardscroll.c */ #include #undef _nc_oldnums int *_nc_oldnums; #undef _nc_scroll_optimize_sp void _nc_scroll_optimize_sp( SCREEN *sp) { /* void */ } #undef _nc_scroll_optimize void _nc_scroll_optimize(void) { /* void */ } #undef _nc_linedump_sp void _nc_linedump_sp( SCREEN *sp) { /* void */ } #undef _nc_linedump void _nc_linedump(void) { /* void */ } /* ./tty/hashmap.c */ #undef _nc_hash_map_sp void _nc_hash_map_sp( SCREEN *sp) { /* void */ } #undef _nc_hash_map void _nc_hash_map(void) { /* void */ } #undef _nc_make_oldhash_sp void _nc_make_oldhash_sp( SCREEN *sp, int i) { /* void */ } #undef _nc_make_oldhash void _nc_make_oldhash( int i) { /* void */ } #undef _nc_scroll_oldhash_sp void _nc_scroll_oldhash_sp( SCREEN *sp, int n, int top, int bot) { /* void */ } #undef _nc_scroll_oldhash void _nc_scroll_oldhash( int n, int top, int bot) { /* void */ } /* ./base/lib_addch.c */ #undef _nc_render chtype _nc_render( WINDOW *win, chtype ch) { return(*(chtype *)0); } #undef _nc_waddch_nosync int _nc_waddch_nosync( WINDOW *win, const chtype c) { return(*(int *)0); } #undef waddch int waddch( WINDOW *win, const chtype ch) { return(*(int *)0); } #undef wechochar int wechochar( WINDOW *win, const chtype ch) { return(*(int *)0); } /* ./base/lib_addstr.c */ #undef waddnstr int waddnstr( WINDOW *win, const char *astr, int n) { return(*(int *)0); } #undef waddchnstr int waddchnstr( WINDOW *win, const chtype *astr, int n) { return(*(int *)0); } /* ./base/lib_beep.c */ #undef beep_sp int beep_sp( SCREEN *sp) { return(*(int *)0); } #undef beep int beep(void) { return(*(int *)0); } /* ./base/lib_bkgd.c */ #undef wbkgdset void wbkgdset( WINDOW *win, chtype ch) { /* void */ } #undef wbkgd int wbkgd( WINDOW *win, chtype ch) { return(*(int *)0); } /* ./base/lib_box.c */ #undef wborder int wborder( WINDOW *win, chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br) { return(*(int *)0); } /* ./base/lib_chgat.c */ #undef wchgat int wchgat( WINDOW *win, int n, attr_t attr, short color, const void *opts) { return(*(int *)0); } /* ./base/lib_clear.c */ #undef wclear int wclear( WINDOW *win) { return(*(int *)0); } /* ./base/lib_clearok.c */ #undef clearok int clearok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_clrbot.c */ #undef wclrtobot int wclrtobot( WINDOW *win) { return(*(int *)0); } /* ./base/lib_clreol.c */ #undef wclrtoeol int wclrtoeol( WINDOW *win) { return(*(int *)0); } /* ./base/lib_color.c */ #undef COLOR_PAIRS int COLOR_PAIRS; #undef COLORS int COLORS; #undef _nc_reset_colors_sp NCURSES_BOOL _nc_reset_colors_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef _nc_reset_colors NCURSES_BOOL _nc_reset_colors(void) { return(*(NCURSES_BOOL *)0); } #undef start_color_sp int start_color_sp( SCREEN *sp) { return(*(int *)0); } #undef start_color int start_color(void) { return(*(int *)0); } #undef init_pair_sp int init_pair_sp( SCREEN *sp, short pair, short f, short b) { return(*(int *)0); } #undef init_pair int init_pair( short pair, short f, short b) { return(*(int *)0); } #undef init_color_sp int init_color_sp( SCREEN *sp, short color, short r, short g, short b) { return(*(int *)0); } #undef init_color int init_color( short color, short r, short g, short b) { return(*(int *)0); } #undef can_change_color_sp NCURSES_BOOL can_change_color_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef can_change_color NCURSES_BOOL can_change_color(void) { return(*(NCURSES_BOOL *)0); } #undef has_colors_sp NCURSES_BOOL has_colors_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_colors NCURSES_BOOL has_colors(void) { return(*(NCURSES_BOOL *)0); } #undef color_content_sp int color_content_sp( SCREEN *sp, short color, short *r, short *g, short *b) { return(*(int *)0); } #undef color_content int color_content( short color, short *r, short *g, short *b) { return(*(int *)0); } #undef pair_content_sp int pair_content_sp( SCREEN *sp, short pair, short *f, short *b) { return(*(int *)0); } #undef pair_content int pair_content( short pair, short *f, short *b) { return(*(int *)0); } #undef _nc_do_color_sp void _nc_do_color_sp( SCREEN *sp, int old_pair, int pair, int reverse, NCURSES_OUTC_sp outc) { /* void */ } #undef _nc_do_color void _nc_do_color( int old_pair, int pair, int reverse, NCURSES_OUTC outc) { /* void */ } /* ./base/lib_colorset.c */ #undef wcolor_set int wcolor_set( WINDOW *win, short color_pair_number, void *opts) { return(*(int *)0); } /* ./base/lib_delch.c */ #undef wdelch int wdelch( WINDOW *win) { return(*(int *)0); } /* ./base/lib_delwin.c */ #undef delwin int delwin( WINDOW *win) { return(*(int *)0); } /* ./base/lib_echo.c */ #undef echo_sp int echo_sp( SCREEN *sp) { return(*(int *)0); } #undef echo int echo(void) { return(*(int *)0); } #undef noecho_sp int noecho_sp( SCREEN *sp) { return(*(int *)0); } #undef noecho int noecho(void) { return(*(int *)0); } /* ./base/lib_endwin.c */ #undef endwin_sp int endwin_sp( SCREEN *sp) { return(*(int *)0); } #undef endwin int endwin(void) { return(*(int *)0); } /* ./base/lib_erase.c */ #undef werase int werase( WINDOW *win) { return(*(int *)0); } /* ./base/lib_flash.c */ #undef flash_sp int flash_sp( SCREEN *sp) { return(*(int *)0); } #undef flash int flash(void) { return(*(int *)0); } /* ./lib_gen.c */ #undef addch int (addch)( const chtype z) { return(*(int *)0); } #undef addchnstr int (addchnstr)( const chtype *a1, int z) { return(*(int *)0); } #undef addchstr int (addchstr)( const chtype *z) { return(*(int *)0); } #undef addnstr int (addnstr)( const char *a1, int z) { return(*(int *)0); } #undef addstr int (addstr)( const char *z) { return(*(int *)0); } #undef attroff int (attroff)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attron int (attron)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attrset int (attrset)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attr_get int (attr_get)( attr_t *a1, short *a2, void *z) { return(*(int *)0); } #undef attr_off int (attr_off)( attr_t a1, void *z) { return(*(int *)0); } #undef attr_on int (attr_on)( attr_t a1, void *z) { return(*(int *)0); } #undef attr_set int (attr_set)( attr_t a1, short a2, void *z) { return(*(int *)0); } #undef bkgd int (bkgd)( chtype z) { return(*(int *)0); } #undef bkgdset void (bkgdset)( chtype z) { /* void */ } #undef border int (border)( chtype a1, chtype a2, chtype a3, chtype a4, chtype a5, chtype a6, chtype a7, chtype z) { return(*(int *)0); } #undef box int (box)( WINDOW *a1, chtype a2, chtype z) { return(*(int *)0); } #undef chgat int (chgat)( int a1, attr_t a2, short a3, const void *z) { return(*(int *)0); } #undef clear int (clear)(void) { return(*(int *)0); } #undef clrtobot int (clrtobot)(void) { return(*(int *)0); } #undef clrtoeol int (clrtoeol)(void) { return(*(int *)0); } #undef color_set int (color_set)( short a1, void *z) { return(*(int *)0); } #undef COLOR_PAIR int (COLOR_PAIR)( int z) { return(*(int *)0); } #undef delch int (delch)(void) { return(*(int *)0); } #undef deleteln int (deleteln)(void) { return(*(int *)0); } #undef echochar int (echochar)( const chtype z) { return(*(int *)0); } #undef erase int (erase)(void) { return(*(int *)0); } #undef getbkgd chtype (getbkgd)( WINDOW *z) { return(*(chtype *)0); } #undef getch int (getch)(void) { return(*(int *)0); } #undef getnstr int (getnstr)( char *a1, int z) { return(*(int *)0); } #undef getstr int (getstr)( char *z) { return(*(int *)0); } #undef hline int (hline)( chtype a1, int z) { return(*(int *)0); } #undef inch chtype (inch)(void) { return(*(chtype *)0); } #undef inchnstr int (inchnstr)( chtype *a1, int z) { return(*(int *)0); } #undef inchstr int (inchstr)( chtype *z) { return(*(int *)0); } #undef innstr int (innstr)( char *a1, int z) { return(*(int *)0); } #undef insch int (insch)( chtype z) { return(*(int *)0); } #undef insdelln int (insdelln)( int z) { return(*(int *)0); } #undef insertln int (insertln)(void) { return(*(int *)0); } #undef insnstr int (insnstr)( const char *a1, int z) { return(*(int *)0); } #undef insstr int (insstr)( const char *z) { return(*(int *)0); } #undef instr int (instr)( char *z) { return(*(int *)0); } #undef move int (move)( int a1, int z) { return(*(int *)0); } #undef mvaddch int (mvaddch)( int a1, int a2, const chtype z) { return(*(int *)0); } #undef mvaddchnstr int (mvaddchnstr)( int a1, int a2, const chtype *a3, int z) { return(*(int *)0); } #undef mvaddchstr int (mvaddchstr)( int a1, int a2, const chtype *z) { return(*(int *)0); } #undef mvaddnstr int (mvaddnstr)( int a1, int a2, const char *a3, int z) { return(*(int *)0); } #undef mvaddstr int (mvaddstr)( int a1, int a2, const char *z) { return(*(int *)0); } #undef mvchgat int (mvchgat)( int a1, int a2, int a3, attr_t a4, short a5, const void *z) { return(*(int *)0); } #undef mvdelch int (mvdelch)( int a1, int z) { return(*(int *)0); } #undef mvgetch int (mvgetch)( int a1, int z) { return(*(int *)0); } #undef mvgetnstr int (mvgetnstr)( int a1, int a2, char *a3, int z) { return(*(int *)0); } #undef mvgetstr int (mvgetstr)( int a1, int a2, char *z) { return(*(int *)0); } #undef mvhline int (mvhline)( int a1, int a2, chtype a3, int z) { return(*(int *)0); } #undef mvinch chtype (mvinch)( int a1, int z) { return(*(chtype *)0); } #undef mvinchnstr int (mvinchnstr)( int a1, int a2, chtype *a3, int z) { return(*(int *)0); } #undef mvinchstr int (mvinchstr)( int a1, int a2, chtype *z) { return(*(int *)0); } #undef mvinnstr int (mvinnstr)( int a1, int a2, char *a3, int z) { return(*(int *)0); } #undef mvinsch int (mvinsch)( int a1, int a2, chtype z) { return(*(int *)0); } #undef mvinsnstr int (mvinsnstr)( int a1, int a2, const char *a3, int z) { return(*(int *)0); } #undef mvinsstr int (mvinsstr)( int a1, int a2, const char *z) { return(*(int *)0); } #undef mvinstr int (mvinstr)( int a1, int a2, char *z) { return(*(int *)0); } #undef mvvline int (mvvline)( int a1, int a2, chtype a3, int z) { return(*(int *)0); } #undef mvwaddch int (mvwaddch)( WINDOW *a1, int a2, int a3, const chtype z) { return(*(int *)0); } #undef mvwaddchnstr int (mvwaddchnstr)( WINDOW *a1, int a2, int a3, const chtype *a4, int z) { return(*(int *)0); } #undef mvwaddchstr int (mvwaddchstr)( WINDOW *a1, int a2, int a3, const chtype *z) { return(*(int *)0); } #undef mvwaddnstr int (mvwaddnstr)( WINDOW *a1, int a2, int a3, const char *a4, int z) { return(*(int *)0); } #undef mvwaddstr int (mvwaddstr)( WINDOW *a1, int a2, int a3, const char *z) { return(*(int *)0); } #undef mvwchgat int (mvwchgat)( WINDOW *a1, int a2, int a3, int a4, attr_t a5, short a6, const void *z) { return(*(int *)0); } #undef mvwdelch int (mvwdelch)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef mvwgetch int (mvwgetch)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef mvwgetnstr int (mvwgetnstr)( WINDOW *a1, int a2, int a3, char *a4, int z) { return(*(int *)0); } #undef mvwgetstr int (mvwgetstr)( WINDOW *a1, int a2, int a3, char *z) { return(*(int *)0); } #undef mvwhline int (mvwhline)( WINDOW *a1, int a2, int a3, chtype a4, int z) { return(*(int *)0); } #undef mvwinch chtype (mvwinch)( WINDOW *a1, int a2, int z) { return(*(chtype *)0); } #undef mvwinchnstr int (mvwinchnstr)( WINDOW *a1, int a2, int a3, chtype *a4, int z) { return(*(int *)0); } #undef mvwinchstr int (mvwinchstr)( WINDOW *a1, int a2, int a3, chtype *z) { return(*(int *)0); } #undef mvwinnstr int (mvwinnstr)( WINDOW *a1, int a2, int a3, char *a4, int z) { return(*(int *)0); } #undef mvwinsch int (mvwinsch)( WINDOW *a1, int a2, int a3, chtype z) { return(*(int *)0); } #undef mvwinsnstr int (mvwinsnstr)( WINDOW *a1, int a2, int a3, const char *a4, int z) { return(*(int *)0); } #undef mvwinsstr int (mvwinsstr)( WINDOW *a1, int a2, int a3, const char *z) { return(*(int *)0); } #undef mvwinstr int (mvwinstr)( WINDOW *a1, int a2, int a3, char *z) { return(*(int *)0); } #undef mvwvline int (mvwvline)( WINDOW *a1, int a2, int a3, chtype a4, int z) { return(*(int *)0); } #undef PAIR_NUMBER int (PAIR_NUMBER)( int z) { return(*(int *)0); } #undef redrawwin int (redrawwin)( WINDOW *z) { return(*(int *)0); } #undef refresh int (refresh)(void) { return(*(int *)0); } #undef scrl int (scrl)( int z) { return(*(int *)0); } #undef scroll int (scroll)( WINDOW *z) { return(*(int *)0); } #undef setscrreg int (setscrreg)( int a1, int z) { return(*(int *)0); } #undef standout int (standout)(void) { return(*(int *)0); } #undef standend int (standend)(void) { return(*(int *)0); } #undef timeout void (timeout)( int z) { /* void */ } #undef touchline int (touchline)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef touchwin int (touchwin)( WINDOW *z) { return(*(int *)0); } #undef untouchwin int (untouchwin)( WINDOW *z) { return(*(int *)0); } #undef vline int (vline)( chtype a1, int z) { return(*(int *)0); } #undef vw_printw int (vw_printw)( WINDOW *a1, const char *a2, va_list z) { return(*(int *)0); } #undef vw_scanw int (vw_scanw)( WINDOW *a1, const char *a2, va_list z) { return(*(int *)0); } #undef waddchstr int (waddchstr)( WINDOW *a1, const chtype *z) { return(*(int *)0); } #undef waddstr int (waddstr)( WINDOW *a1, const char *z) { return(*(int *)0); } #undef wattron int (wattron)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattroff int (wattroff)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattrset int (wattrset)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattr_get int (wattr_get)( WINDOW *a1, attr_t *a2, short *a3, void *z) { return(*(int *)0); } #undef wattr_set int (wattr_set)( WINDOW *a1, attr_t a2, short a3, void *z) { return(*(int *)0); } #undef wdeleteln int (wdeleteln)( WINDOW *z) { return(*(int *)0); } #undef wgetstr int (wgetstr)( WINDOW *a1, char *z) { return(*(int *)0); } #undef winchstr int (winchstr)( WINDOW *a1, chtype *z) { return(*(int *)0); } #undef winsertln int (winsertln)( WINDOW *z) { return(*(int *)0); } #undef winsstr int (winsstr)( WINDOW *a1, const char *z) { return(*(int *)0); } #undef winstr int (winstr)( WINDOW *a1, char *z) { return(*(int *)0); } #undef wstandout int (wstandout)( WINDOW *z) { return(*(int *)0); } #undef wstandend int (wstandend)( WINDOW *z) { return(*(int *)0); } #undef getattrs int (getattrs)( const WINDOW *z) { return(*(int *)0); } #undef getcurx int (getcurx)( const WINDOW *z) { return(*(int *)0); } #undef getcury int (getcury)( const WINDOW *z) { return(*(int *)0); } #undef getbegx int (getbegx)( const WINDOW *z) { return(*(int *)0); } #undef getbegy int (getbegy)( const WINDOW *z) { return(*(int *)0); } #undef getmaxx int (getmaxx)( const WINDOW *z) { return(*(int *)0); } #undef getmaxy int (getmaxy)( const WINDOW *z) { return(*(int *)0); } #undef getparx int (getparx)( const WINDOW *z) { return(*(int *)0); } #undef getpary int (getpary)( const WINDOW *z) { return(*(int *)0); } #undef wgetparent WINDOW *(wgetparent)( const WINDOW *z) { return(*(WINDOW **)0); } #undef is_cleared NCURSES_BOOL (is_cleared)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_idcok NCURSES_BOOL (is_idcok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_idlok NCURSES_BOOL (is_idlok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_immedok NCURSES_BOOL (is_immedok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_keypad NCURSES_BOOL (is_keypad)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_leaveok NCURSES_BOOL (is_leaveok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_nodelay NCURSES_BOOL (is_nodelay)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_notimeout NCURSES_BOOL (is_notimeout)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_pad NCURSES_BOOL (is_pad)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_scrollok NCURSES_BOOL (is_scrollok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_subwin NCURSES_BOOL (is_subwin)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_syncok NCURSES_BOOL (is_syncok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef wgetdelay int (wgetdelay)( const WINDOW *z) { return(*(int *)0); } #undef wgetscrreg int (wgetscrreg)( const WINDOW *a1, int *a2, int *z) { return(*(int *)0); } #undef mouse_trafo NCURSES_BOOL (mouse_trafo)( int *a1, int *a2, NCURSES_BOOL z) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_getch.c */ #undef ESCDELAY int ESCDELAY; #undef set_escdelay_sp int set_escdelay_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_escdelay int set_escdelay( int value) { return(*(int *)0); } #undef get_escdelay_sp int get_escdelay_sp( SCREEN *sp) { return(*(int *)0); } #undef get_escdelay int get_escdelay(void) { return(*(int *)0); } #undef _nc_wgetch int _nc_wgetch( WINDOW *win, int *result, int use_meta) { return(*(int *)0); } #undef wgetch int wgetch( WINDOW *win) { return(*(int *)0); } /* ./base/lib_getstr.c */ #undef wgetnstr int wgetnstr( WINDOW *win, char *str, int maxlen) { return(*(int *)0); } /* ./base/lib_hline.c */ #undef whline int whline( WINDOW *win, chtype ch, int n) { return(*(int *)0); } /* ./base/lib_immedok.c */ #undef immedok void immedok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } /* ./base/lib_inchstr.c */ #undef winchnstr int winchnstr( WINDOW *win, chtype *str, int n) { return(*(int *)0); } /* ./base/lib_initscr.c */ #undef initscr WINDOW *initscr(void) { return(*(WINDOW **)0); } /* ./base/lib_insch.c */ #undef _nc_insert_ch int _nc_insert_ch( SCREEN *sp, WINDOW *win, chtype ch) { return(*(int *)0); } #undef winsch int winsch( WINDOW *win, chtype c) { return(*(int *)0); } /* ./base/lib_insdel.c */ #undef winsdelln int winsdelln( WINDOW *win, int n) { return(*(int *)0); } /* ./base/lib_insnstr.c */ #undef winsnstr int winsnstr( WINDOW *win, const char *s, int n) { return(*(int *)0); } /* ./base/lib_instr.c */ #undef winnstr int winnstr( WINDOW *win, char *str, int n) { return(*(int *)0); } /* ./base/lib_isendwin.c */ #undef isendwin_sp NCURSES_BOOL isendwin_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef isendwin NCURSES_BOOL isendwin(void) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_leaveok.c */ #undef leaveok int leaveok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_mouse.c */ #undef getmouse_sp int getmouse_sp( SCREEN *sp, MEVENT *aevent) { return(*(int *)0); } #undef getmouse int getmouse( MEVENT *aevent) { return(*(int *)0); } #undef ungetmouse_sp int ungetmouse_sp( SCREEN *sp, MEVENT *aevent) { return(*(int *)0); } #undef ungetmouse int ungetmouse( MEVENT *aevent) { return(*(int *)0); } #undef mousemask_sp mmask_t mousemask_sp( SCREEN *sp, mmask_t newmask, mmask_t *oldmask) { return(*(mmask_t *)0); } #undef mousemask mmask_t mousemask( mmask_t newmask, mmask_t *oldmask) { return(*(mmask_t *)0); } #undef wenclose NCURSES_BOOL wenclose( const WINDOW *win, int y, int x) { return(*(NCURSES_BOOL *)0); } #undef mouseinterval_sp int mouseinterval_sp( SCREEN *sp, int maxclick) { return(*(int *)0); } #undef mouseinterval int mouseinterval( int maxclick) { return(*(int *)0); } #undef _nc_has_mouse NCURSES_BOOL _nc_has_mouse( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_mouse_sp NCURSES_BOOL has_mouse_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_mouse NCURSES_BOOL has_mouse(void) { return(*(NCURSES_BOOL *)0); } #undef wmouse_trafo NCURSES_BOOL wmouse_trafo( const WINDOW *win, int *pY, int *pX, NCURSES_BOOL to_screen) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_move.c */ #undef wmove int wmove( WINDOW *win, int y, int x) { return(*(int *)0); } /* ./tty/lib_mvcur.c */ #undef _nc_msec_cost_sp int _nc_msec_cost_sp( SCREEN *sp, const char *const cap, int affcnt) { return(*(int *)0); } #undef _nc_msec_cost int _nc_msec_cost( const char *const cap, int affcnt) { return(*(int *)0); } #undef _nc_mvcur_resume_sp void _nc_mvcur_resume_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_resume void _nc_mvcur_resume(void) { /* void */ } #undef _nc_mvcur_init_sp void _nc_mvcur_init_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_init void _nc_mvcur_init(void) { /* void */ } #undef _nc_mvcur_wrap_sp void _nc_mvcur_wrap_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_wrap void _nc_mvcur_wrap(void) { /* void */ } #undef _nc_mvcur_sp int _nc_mvcur_sp( SCREEN *sp, int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef _nc_mvcur int _nc_mvcur( int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef mvcur_sp int mvcur_sp( SCREEN *sp, int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef mvcur int mvcur( int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef _nc_optimize_enable int _nc_optimize_enable; /* ./base/lib_mvwin.c */ #undef mvwin int mvwin( WINDOW *win, int by, int bx) { return(*(int *)0); } /* ./base/lib_newterm.c */ #undef filter_sp void filter_sp( SCREEN *sp) { /* void */ } #undef filter void filter(void) { /* void */ } #undef nofilter_sp void nofilter_sp( SCREEN *sp) { /* void */ } #undef nofilter void nofilter(void) { /* void */ } #undef newterm_sp SCREEN *newterm_sp( SCREEN *sp, const char *name, FILE *ofp, FILE *ifp) { return(*(SCREEN **)0); } #undef newterm SCREEN *newterm( const char *name, FILE *ofp, FILE *ifp) { return(*(SCREEN **)0); } /* ./base/lib_newwin.c */ #undef _nc_freewin int _nc_freewin( WINDOW *win) { return(*(int *)0); } #undef newwin_sp WINDOW *newwin_sp( SCREEN *sp, int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef newwin WINDOW *newwin( int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef derwin WINDOW *derwin( WINDOW *orig, int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef subwin WINDOW *subwin( WINDOW *w, int l, int c, int y, int x) { return(*(WINDOW **)0); } #undef _nc_makenew_sp WINDOW *_nc_makenew_sp( SCREEN *sp, int num_lines, int num_columns, int begy, int begx, int flags) { return(*(WINDOW **)0); } #undef _nc_curscr_of WINDOW *_nc_curscr_of( SCREEN *sp) { return(*(WINDOW **)0); } #undef _nc_newscr_of WINDOW *_nc_newscr_of( SCREEN *sp) { return(*(WINDOW **)0); } #undef _nc_stdscr_of WINDOW *_nc_stdscr_of( SCREEN *sp) { return(*(WINDOW **)0); } /* ./base/lib_nl.c */ #undef nl_sp int nl_sp( SCREEN *sp) { return(*(int *)0); } #undef nl int nl(void) { return(*(int *)0); } #undef nonl_sp int nonl_sp( SCREEN *sp) { return(*(int *)0); } #undef nonl int nonl(void) { return(*(int *)0); } /* ./base/lib_overlay.c */ #undef overlay int overlay( const WINDOW *win1, WINDOW *win2) { return(*(int *)0); } #undef overwrite int overwrite( const WINDOW *win1, WINDOW *win2) { return(*(int *)0); } #undef copywin int copywin( const WINDOW *src, WINDOW *dst, int sminrow, int smincol, int dminrow, int dmincol, int dmaxrow, int dmaxcol, int over) { return(*(int *)0); } /* ./base/lib_pad.c */ #undef newpad_sp WINDOW *newpad_sp( SCREEN *sp, int l, int c) { return(*(WINDOW **)0); } #undef newpad WINDOW *newpad( int l, int c) { return(*(WINDOW **)0); } #undef subpad WINDOW *subpad( WINDOW *orig, int l, int c, int begy, int begx) { return(*(WINDOW **)0); } #undef prefresh int prefresh( WINDOW *win, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { return(*(int *)0); } #undef pnoutrefresh int pnoutrefresh( WINDOW *win, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { return(*(int *)0); } #undef pechochar int pechochar( WINDOW *pad, const chtype ch) { return(*(int *)0); } /* ./base/lib_printw.c */ #undef printw int printw( const char *fmt, ...) { return(*(int *)0); } #undef wprintw int wprintw( WINDOW *win, const char *fmt, ...) { return(*(int *)0); } #undef mvprintw int mvprintw( int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef mvwprintw int mvwprintw( WINDOW *win, int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef vwprintw int vwprintw( WINDOW *win, const char *fmt, va_list argp) { return(*(int *)0); } /* ./base/lib_redrawln.c */ #undef wredrawln int wredrawln( WINDOW *win, int beg, int num) { return(*(int *)0); } /* ./base/lib_refresh.c */ #undef wrefresh int wrefresh( WINDOW *win) { return(*(int *)0); } #undef wnoutrefresh int wnoutrefresh( WINDOW *win) { return(*(int *)0); } /* ./base/lib_restart.c */ #undef restartterm_sp int restartterm_sp( SCREEN *sp, const char *termp, int filenum, int *errret) { return(*(int *)0); } #undef restartterm int restartterm( const char *termp, int filenum, int *errret) { return(*(int *)0); } /* ./base/lib_scanw.c */ #undef vwscanw int vwscanw( WINDOW *win, const char *fmt, va_list argp) { return(*(int *)0); } #undef scanw int scanw( const char *fmt, ...) { return(*(int *)0); } #undef wscanw int wscanw( WINDOW *win, const char *fmt, ...) { return(*(int *)0); } #undef mvscanw int mvscanw( int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef mvwscanw int mvwscanw( WINDOW *win, int y, int x, const char *fmt, ...) { return(*(int *)0); } /* ./base/lib_screen.c */ #undef getwin_sp WINDOW *getwin_sp( SCREEN *sp, FILE *filep) { return(*(WINDOW **)0); } #undef getwin WINDOW *getwin( FILE *filep) { return(*(WINDOW **)0); } #undef putwin int putwin( WINDOW *win, FILE *filep) { return(*(int *)0); } #undef scr_restore_sp int scr_restore_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_restore int scr_restore( const char *file) { return(*(int *)0); } #undef scr_dump int scr_dump( const char *file) { return(*(int *)0); } #undef scr_init_sp int scr_init_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_init int scr_init( const char *file) { return(*(int *)0); } #undef scr_set_sp int scr_set_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_set int scr_set( const char *file) { return(*(int *)0); } /* ./base/lib_scroll.c */ #undef _nc_scroll_window void _nc_scroll_window( WINDOW *win, int const n, int const top, int const bottom, chtype blank) { /* void */ } #undef wscrl int wscrl( WINDOW *win, int n) { return(*(int *)0); } /* ./base/lib_scrollok.c */ #undef scrollok int scrollok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_scrreg.c */ #undef wsetscrreg int wsetscrreg( WINDOW *win, int top, int bottom) { return(*(int *)0); } /* ./base/lib_set_term.c */ #undef set_term SCREEN *set_term( SCREEN *screenp) { return(*(SCREEN **)0); } #undef delscreen void delscreen( SCREEN *sp) { /* void */ } #undef _nc_setupscreen_sp int _nc_setupscreen_sp( SCREEN **spp, int slines, int scolumns, FILE *output, int filtered, int slk_format) { return(*(int *)0); } #undef _nc_setupscreen int _nc_setupscreen( int slines, int scolumns, FILE *output, int filtered, int slk_format) { return(*(int *)0); } #undef _nc_ripoffline_sp int _nc_ripoffline_sp( SCREEN *sp, int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef _nc_ripoffline int _nc_ripoffline( int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef ripoffline_sp int ripoffline_sp( SCREEN *sp, int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef ripoffline int ripoffline( int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } /* ./base/lib_slk.c */ #undef _nc_format_slks int _nc_format_slks( SCREEN *sp, int cols) { return(*(int *)0); } #undef _nc_slk_initialize int _nc_slk_initialize( WINDOW *stwin, int cols) { return(*(int *)0); } #undef slk_restore_sp int slk_restore_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_restore int slk_restore(void) { return(*(int *)0); } /* ./base/lib_slkatr_set.c */ #undef slk_attr_set_sp int slk_attr_set_sp( SCREEN *sp, const attr_t attr, short color_pair_number, void *opts) { return(*(int *)0); } #undef slk_attr_set int slk_attr_set( const attr_t attr, short color_pair_number, void *opts) { return(*(int *)0); } /* ./base/lib_slkatrof.c */ #undef slk_attroff_sp int slk_attroff_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attroff int slk_attroff( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkatron.c */ #undef slk_attron_sp int slk_attron_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attron int slk_attron( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkatrset.c */ #undef slk_attrset_sp int slk_attrset_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attrset int slk_attrset( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkattr.c */ #undef slk_attr_sp attr_t slk_attr_sp( SCREEN *sp) { return(*(attr_t *)0); } #undef slk_attr attr_t slk_attr(void) { return(*(attr_t *)0); } /* ./base/lib_slkclear.c */ #undef slk_clear_sp int slk_clear_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_clear int slk_clear(void) { return(*(int *)0); } /* ./base/lib_slkcolor.c */ #undef slk_color_sp int slk_color_sp( SCREEN *sp, short color_pair_number) { return(*(int *)0); } #undef slk_color int slk_color( short color_pair_number) { return(*(int *)0); } /* ./base/lib_slkinit.c */ #undef slk_init_sp int slk_init_sp( SCREEN *sp, int format) { return(*(int *)0); } #undef slk_init int slk_init( int format) { return(*(int *)0); } /* ./base/lib_slklab.c */ #undef slk_label_sp char *slk_label_sp( SCREEN *sp, int n) { return(*(char **)0); } #undef slk_label char *slk_label( int n) { return(*(char **)0); } /* ./base/lib_slkrefr.c */ #undef slk_noutrefresh_sp int slk_noutrefresh_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_noutrefresh int slk_noutrefresh(void) { return(*(int *)0); } #undef slk_refresh_sp int slk_refresh_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_refresh int slk_refresh(void) { return(*(int *)0); } /* ./base/lib_slkset.c */ #undef slk_set_sp int slk_set_sp( SCREEN *sp, int i, const char *astr, int format) { return(*(int *)0); } #undef slk_set int slk_set( int i, const char *astr, int format) { return(*(int *)0); } /* ./base/lib_slktouch.c */ #undef slk_touch_sp int slk_touch_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_touch int slk_touch(void) { return(*(int *)0); } /* ./base/lib_touch.c */ #undef is_linetouched NCURSES_BOOL is_linetouched( WINDOW *win, int line) { return(*(NCURSES_BOOL *)0); } #undef is_wintouched NCURSES_BOOL is_wintouched( WINDOW *win) { return(*(NCURSES_BOOL *)0); } #undef wtouchln int wtouchln( WINDOW *win, int y, int n, int changed) { return(*(int *)0); } /* ./trace/lib_tracedmp.c */ #undef _tracedump void _tracedump( const char *name, WINDOW *win) { /* void */ } /* ./trace/lib_tracemse.c */ #undef _nc_trace_mmask_t char *_nc_trace_mmask_t( SCREEN *sp, mmask_t code) { return(*(char **)0); } #undef _nc_tracemouse char *_nc_tracemouse( SCREEN *sp, MEVENT const *ep) { return(*(char **)0); } #undef _nc_retrace_mmask_t mmask_t _nc_retrace_mmask_t( SCREEN *sp, mmask_t code) { return(*(mmask_t *)0); } #undef _tracemouse char *_tracemouse( MEVENT const *ep) { return(*(char **)0); } /* ./tty/lib_tstp.c */ #undef _nc_signal_handler void _nc_signal_handler( int enable) { /* void */ } /* ./base/lib_ungetch.c */ #undef _nc_fifo_dump void _nc_fifo_dump( SCREEN *sp) { /* void */ } #undef ungetch_sp int ungetch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef ungetch int ungetch( int ch) { return(*(int *)0); } /* ./tty/lib_vidattr.c */ #undef vidputs_sp int vidputs_sp( SCREEN *sp, chtype newmode, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef vidputs int vidputs( chtype newmode, NCURSES_OUTC outc) { return(*(int *)0); } #undef vidattr_sp int vidattr_sp( SCREEN *sp, chtype newmode) { return(*(int *)0); } #undef vidattr int vidattr( chtype newmode) { return(*(int *)0); } #undef termattrs_sp chtype termattrs_sp( SCREEN *sp) { return(*(chtype *)0); } #undef termattrs chtype termattrs(void) { return(*(chtype *)0); } /* ./base/lib_vline.c */ #undef wvline int wvline( WINDOW *win, chtype ch, int n) { return(*(int *)0); } /* ./base/lib_wattroff.c */ #undef wattr_off int wattr_off( WINDOW *win, attr_t at, void *opts) { return(*(int *)0); } /* ./base/lib_wattron.c */ #undef wattr_on int wattr_on( WINDOW *win, attr_t at, void *opts) { return(*(int *)0); } /* ./base/lib_winch.c */ #undef winch chtype winch( WINDOW *win) { return(*(chtype *)0); } /* ./base/lib_window.c */ #undef _nc_synchook void _nc_synchook( WINDOW *win) { /* void */ } #undef mvderwin int mvderwin( WINDOW *win, int y, int x) { return(*(int *)0); } #undef syncok int syncok( WINDOW *win, NCURSES_BOOL bf) { return(*(int *)0); } #undef wsyncup void wsyncup( WINDOW *win) { /* void */ } #undef wsyncdown void wsyncdown( WINDOW *win) { /* void */ } #undef wcursyncup void wcursyncup( WINDOW *win) { /* void */ } #undef dupwin WINDOW *dupwin( WINDOW *win) { return(*(WINDOW **)0); } /* ./base/nc_panel.c */ #undef _nc_panelhook_sp struct panelhook *_nc_panelhook_sp( SCREEN *sp) { return(*(struct panelhook **)0); } #undef _nc_panelhook struct panelhook *_nc_panelhook(void) { return(*(struct panelhook **)0); } /* ./base/safe_sprintf.c */ #undef _nc_printf_string_sp char *_nc_printf_string_sp( SCREEN *sp, const char *fmt, va_list ap) { return(*(char **)0); } #undef _nc_printf_string char *_nc_printf_string( const char *fmt, va_list ap) { return(*(char **)0); } /* ./tty/tty_update.c */ #undef doupdate_sp int doupdate_sp( SCREEN *sp) { return(*(int *)0); } #undef doupdate int doupdate(void) { return(*(int *)0); } #undef _nc_scrolln_sp int _nc_scrolln_sp( SCREEN *sp, int n, int top, int bot, int maxy) { return(*(int *)0); } #undef _nc_scrolln int _nc_scrolln( int n, int top, int bot, int maxy) { return(*(int *)0); } #undef _nc_screen_resume_sp void _nc_screen_resume_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_resume void _nc_screen_resume(void) { /* void */ } #undef _nc_screen_init_sp void _nc_screen_init_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_init void _nc_screen_init(void) { /* void */ } #undef _nc_screen_wrap_sp void _nc_screen_wrap_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_wrap void _nc_screen_wrap(void) { /* void */ } #undef _nc_do_xmc_glitch_sp void _nc_do_xmc_glitch_sp( SCREEN *sp, attr_t previous) { /* void */ } #undef _nc_do_xmc_glitch void _nc_do_xmc_glitch( attr_t previous) { /* void */ } /* ./trace/varargs.c */ #undef _nc_varargs char *_nc_varargs( const char *fmt, va_list ap) { return(*(char **)0); } /* ./base/vsscanf.c */ #undef _nc_vsscanf void _nc_vsscanf(void) { /* void */ } /* ./base/lib_freeall.c */ #undef _nc_freeall void _nc_freeall(void) { /* void */ } #undef _nc_free_and_exit_sp void _nc_free_and_exit_sp( SCREEN *sp, int code) { /* void */ } #undef _nc_free_and_exit void _nc_free_and_exit( int code) { /* void */ } /* ./expanded.c */ #undef _nc_toggle_attr_on void _nc_toggle_attr_on( attr_t *S, attr_t at) { /* void */ } #undef _nc_toggle_attr_off void _nc_toggle_attr_off( attr_t *S, attr_t at) { /* void */ } #undef _nc_DelCharCost_sp int _nc_DelCharCost_sp( SCREEN *sp, int count) { return(*(int *)0); } #undef _nc_InsCharCost_sp int _nc_InsCharCost_sp( SCREEN *sp, int count) { return(*(int *)0); } #undef _nc_UpdateAttrs_sp void _nc_UpdateAttrs_sp( SCREEN *sp, chtype c) { /* void */ } #undef _nc_DelCharCost int _nc_DelCharCost( int count) { return(*(int *)0); } #undef _nc_InsCharCost int _nc_InsCharCost( int count) { return(*(int *)0); } #undef _nc_UpdateAttrs void _nc_UpdateAttrs( chtype c) { /* void */ } /* ./base/legacy_coding.c */ #undef use_legacy_coding_sp int use_legacy_coding_sp( SCREEN *sp, int level) { return(*(int *)0); } #undef use_legacy_coding int use_legacy_coding( int level) { return(*(int *)0); } /* ./base/lib_dft_fgbg.c */ #undef use_default_colors_sp int use_default_colors_sp( SCREEN *sp) { return(*(int *)0); } #undef use_default_colors int use_default_colors(void) { return(*(int *)0); } #undef assume_default_colors_sp int assume_default_colors_sp( SCREEN *sp, int fg, int bg) { return(*(int *)0); } #undef assume_default_colors int assume_default_colors( int fg, int bg) { return(*(int *)0); } /* ./tinfo/lib_print.c */ #undef mcprint_sp int mcprint_sp( SCREEN *sp, char *data, int len) { return(*(int *)0); } #undef mcprint int mcprint( char *data, int len) { return(*(int *)0); } /* ./base/resizeterm.c */ #undef is_term_resized_sp NCURSES_BOOL is_term_resized_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(NCURSES_BOOL *)0); } #undef is_term_resized NCURSES_BOOL is_term_resized( int ToLines, int ToCols) { return(*(NCURSES_BOOL *)0); } #undef resize_term_sp int resize_term_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(int *)0); } #undef resize_term int resize_term( int ToLines, int ToCols) { return(*(int *)0); } #undef resizeterm_sp int resizeterm_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(int *)0); } #undef resizeterm int resizeterm( int ToLines, int ToCols) { return(*(int *)0); } /* ./trace/trace_xnames.c */ #undef _nc_trace_xnames void _nc_trace_xnames( TERMTYPE *tp) { /* void */ } /* ./tinfo/use_screen.c */ #undef use_screen int use_screen( SCREEN *screen, NCURSES_SCREEN_CB func, void *data) { return(*(int *)0); } /* ./base/use_window.c */ #undef use_window int use_window( WINDOW *win, NCURSES_WINDOW_CB func, void *data) { return(*(int *)0); } /* ./base/wresize.c */ #undef wresize int wresize( WINDOW *win, int ToLines, int ToCols) { return(*(int *)0); } /* ./tinfo/access.c */ #undef _nc_rootname char *_nc_rootname( char *path) { return(*(char **)0); } #undef _nc_is_abs_path NCURSES_BOOL _nc_is_abs_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_pathlast unsigned _nc_pathlast( const char *path) { return(*(unsigned *)0); } #undef _nc_basename char *_nc_basename( char *path) { return(*(char **)0); } #undef _nc_access int _nc_access( const char *path, int mode) { return(*(int *)0); } #undef _nc_is_dir_path NCURSES_BOOL _nc_is_dir_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_is_file_path NCURSES_BOOL _nc_is_file_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_env_access int _nc_env_access(void) { return(*(int *)0); } /* ./tinfo/add_tries.c */ #undef _nc_add_to_try int _nc_add_to_try( TRIES **tree, const char *str, unsigned code) { return(*(int *)0); } /* ./tinfo/alloc_ttype.c */ #undef _nc_align_termtype void _nc_align_termtype( TERMTYPE *to, TERMTYPE *from) { /* void */ } #undef _nc_copy_termtype void _nc_copy_termtype( TERMTYPE *dst, const TERMTYPE *src) { /* void */ } /* ./codes.c */ #undef boolcodes const char *const boolcodes[] = {0}; #undef numcodes const char *const numcodes[] = {0}; #undef strcodes const char *const strcodes[] = {0}; /* ./comp_captab.c */ #undef _nc_get_table const struct name_table_entry *_nc_get_table( NCURSES_BOOL termcap) { return(*(const struct name_table_entry **)0); } #undef _nc_get_hash_table const HashValue *_nc_get_hash_table( NCURSES_BOOL termcap) { return(*(const HashValue **)0); } #undef _nc_get_alias_table const struct alias *_nc_get_alias_table( NCURSES_BOOL termcap) { return(*(const struct alias **)0); } #undef _nc_get_hash_info const HashData *_nc_get_hash_info( NCURSES_BOOL termcap) { return(*(const HashData **)0); } /* ./tinfo/comp_error.c */ #undef _nc_suppress_warnings NCURSES_BOOL _nc_suppress_warnings; #undef _nc_curr_line int _nc_curr_line; #undef _nc_curr_col int _nc_curr_col; #undef _nc_get_source const char *_nc_get_source(void) { return(*(const char **)0); } #undef _nc_set_source void _nc_set_source( const char *const name) { /* void */ } #undef _nc_set_type void _nc_set_type( const char *const name) { /* void */ } #undef _nc_get_type void _nc_get_type( char *name) { /* void */ } #undef _nc_warning void _nc_warning( const char *const fmt, ...) { /* void */ } #undef _nc_err_abort void _nc_err_abort( const char *const fmt, ...) { /* void */ } #undef _nc_syserr_abort void _nc_syserr_abort( const char *const fmt, ...) { /* void */ } /* ./tinfo/comp_hash.c */ #undef _nc_find_entry struct name_table_entry const *_nc_find_entry( const char *string, const HashValue *hash_table) { return(*(struct name_table_entry const **)0); } #undef _nc_find_type_entry struct name_table_entry const *_nc_find_type_entry( const char *string, int type, NCURSES_BOOL termcap) { return(*(struct name_table_entry const **)0); } /* ./tinfo/db_iterator.c */ #undef _nc_tic_dir const char *_nc_tic_dir( const char *path) { return(*(const char **)0); } #undef _nc_keep_tic_dir void _nc_keep_tic_dir( const char *path) { /* void */ } #undef _nc_last_db void _nc_last_db(void) { /* void */ } #undef _nc_next_db const char *_nc_next_db( DBDIRS *state, int *offset) { return(*(const char **)0); } #undef _nc_first_db void _nc_first_db( DBDIRS *state, int *offset) { /* void */ } /* ./tinfo/doalloc.c */ #undef _nc_doalloc void *_nc_doalloc( void *oldp, size_t amount) { return(*(void **)0); } /* ./tinfo/entries.c */ #undef _nc_head ENTRY *_nc_head; #undef _nc_tail ENTRY *_nc_tail; #undef _nc_free_entry void _nc_free_entry( ENTRY *headp, TERMTYPE *tterm) { /* void */ } #undef _nc_free_entries void _nc_free_entries( ENTRY *headp) { /* void */ } #undef _nc_delink_entry ENTRY *_nc_delink_entry( ENTRY *headp, TERMTYPE *tterm) { return(*(ENTRY **)0); } #undef _nc_leaks_tinfo void _nc_leaks_tinfo(void) { /* void */ } /* ./fallback.c */ #undef _nc_fallback const TERMTYPE *_nc_fallback( const char *name) { return(*(const TERMTYPE **)0); } /* ./tinfo/free_ttype.c */ #undef _nc_free_termtype void _nc_free_termtype( TERMTYPE *ptr) { /* void */ } #undef _nc_user_definable NCURSES_BOOL _nc_user_definable; #undef use_extended_names int use_extended_names( NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/getenv_num.c */ #undef _nc_getenv_num int _nc_getenv_num( const char *name) { return(*(int *)0); } #undef _nc_setenv_num void _nc_setenv_num( const char *name, int value) { /* void */ } /* ./tinfo/home_terminfo.c */ #undef _nc_home_terminfo char *_nc_home_terminfo(void) { return(*(char **)0); } /* ./tinfo/init_keytry.c */ #undef _nc_init_keytry void _nc_init_keytry( SCREEN *sp) { /* void */ } /* ./tinfo/lib_acs.c */ #undef acs_map chtype acs_map[128]; #undef _nc_init_acs_sp void _nc_init_acs_sp( SCREEN *sp) { /* void */ } #undef _nc_init_acs void _nc_init_acs(void) { /* void */ } /* ./tinfo/lib_baudrate.c */ struct speed { short s; int sp; }; #undef _nc_baudrate int _nc_baudrate( int OSpeed) { return(*(int *)0); } #undef _nc_ospeed int _nc_ospeed( int BaudRate) { return(*(int *)0); } #undef baudrate_sp int baudrate_sp( SCREEN *sp) { return(*(int *)0); } #undef baudrate int baudrate(void) { return(*(int *)0); } /* ./tinfo/lib_cur_term.c */ #undef cur_term TERMINAL *cur_term; #undef set_curterm_sp TERMINAL *set_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(TERMINAL **)0); } #undef set_curterm TERMINAL *set_curterm( TERMINAL *termp) { return(*(TERMINAL **)0); } #undef del_curterm_sp int del_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(int *)0); } #undef del_curterm int del_curterm( TERMINAL *termp) { return(*(int *)0); } /* ./tinfo/lib_data.c */ #undef stdscr WINDOW *stdscr; #undef curscr WINDOW *curscr; #undef newscr WINDOW *newscr; #undef _nc_screen_chain SCREEN *_nc_screen_chain; #undef SP SCREEN *SP; #undef _nc_globals NCURSES_GLOBALS _nc_globals; #undef _nc_prescreen NCURSES_PRESCREEN _nc_prescreen; #undef _nc_screen_of SCREEN *_nc_screen_of( WINDOW *win) { return(*(SCREEN **)0); } /* ./tinfo/lib_has_cap.c */ #undef has_ic_sp NCURSES_BOOL has_ic_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_ic NCURSES_BOOL has_ic(void) { return(*(NCURSES_BOOL *)0); } #undef has_il_sp NCURSES_BOOL has_il_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_il NCURSES_BOOL has_il(void) { return(*(NCURSES_BOOL *)0); } /* ./tinfo/lib_kernel.c */ #undef erasechar_sp char erasechar_sp( SCREEN *sp) { return(*(char *)0); } #undef erasechar char erasechar(void) { return(*(char *)0); } #undef killchar_sp char killchar_sp( SCREEN *sp) { return(*(char *)0); } #undef killchar char killchar(void) { return(*(char *)0); } #undef flushinp_sp int flushinp_sp( SCREEN *sp) { return(*(int *)0); } #undef flushinp int flushinp(void) { return(*(int *)0); } /* ./lib_keyname.c */ struct kn { short offset; int code; }; #undef keyname_sp const char *keyname_sp( SCREEN *sp, int c) { return(*(const char **)0); } #undef keyname const char *keyname( int c) { return(*(const char **)0); } /* ./tinfo/lib_longname.c */ #undef longname_sp char *longname_sp( SCREEN *sp) { return(*(char **)0); } #undef longname char *longname(void) { return(*(char **)0); } /* ./tinfo/lib_napms.c */ #undef napms_sp int napms_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef napms int napms( int ms) { return(*(int *)0); } /* ./tinfo/lib_options.c */ #undef idlok int idlok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef idcok void idcok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } #undef halfdelay_sp int halfdelay_sp( SCREEN *sp, int t) { return(*(int *)0); } #undef halfdelay int halfdelay( int t) { return(*(int *)0); } #undef nodelay int nodelay( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef notimeout int notimeout( WINDOW *win, NCURSES_BOOL f) { return(*(int *)0); } #undef wtimeout void wtimeout( WINDOW *win, int delay) { /* void */ } #undef keypad int keypad( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef meta int meta( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef curs_set_sp int curs_set_sp( SCREEN *sp, int vis) { return(*(int *)0); } #undef curs_set int curs_set( int vis) { return(*(int *)0); } #undef typeahead_sp int typeahead_sp( SCREEN *sp, int fd) { return(*(int *)0); } #undef typeahead int typeahead( int fd) { return(*(int *)0); } #undef has_key_sp int has_key_sp( SCREEN *sp, int keycode) { return(*(int *)0); } #undef has_key int has_key( int keycode) { return(*(int *)0); } #undef _nc_putp_flush_sp int _nc_putp_flush_sp( SCREEN *sp, const char *name, const char *value) { return(*(int *)0); } #undef _nc_keypad int _nc_keypad( SCREEN *sp, int flag) { return(*(int *)0); } /* ./tinfo/lib_raw.c */ #undef raw_sp int raw_sp( SCREEN *sp) { return(*(int *)0); } #undef raw int raw(void) { return(*(int *)0); } #undef cbreak_sp int cbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef cbreak int cbreak(void) { return(*(int *)0); } #undef qiflush_sp void qiflush_sp( SCREEN *sp) { /* void */ } #undef qiflush void qiflush(void) { /* void */ } #undef noraw_sp int noraw_sp( SCREEN *sp) { return(*(int *)0); } #undef noraw int noraw(void) { return(*(int *)0); } #undef nocbreak_sp int nocbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef nocbreak int nocbreak(void) { return(*(int *)0); } #undef noqiflush_sp void noqiflush_sp( SCREEN *sp) { /* void */ } #undef noqiflush void noqiflush(void) { /* void */ } #undef intrflush_sp int intrflush_sp( SCREEN *sp, WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef intrflush int intrflush( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/lib_setup.c */ #undef ttytype char ttytype[256]; #undef LINES int LINES; #undef COLS int COLS; #undef TABSIZE int TABSIZE; #undef set_tabsize_sp int set_tabsize_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_tabsize int set_tabsize( int value) { return(*(int *)0); } #undef _nc_handle_sigwinch int _nc_handle_sigwinch( SCREEN *sp) { return(*(int *)0); } #undef use_env_sp void use_env_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_tioctl_sp void use_tioctl_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_env void use_env( NCURSES_BOOL f) { /* void */ } #undef use_tioctl void use_tioctl( NCURSES_BOOL f) { /* void */ } #undef _nc_get_screensize void _nc_get_screensize( SCREEN *sp, int *linep, int *colp) { /* void */ } #undef _nc_update_screensize void _nc_update_screensize( SCREEN *sp) { /* void */ } #undef _nc_setup_tinfo int _nc_setup_tinfo( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } #undef _nc_tinfo_cmdch void _nc_tinfo_cmdch( TERMINAL *termp, int proto) { /* void */ } #undef _nc_get_locale char *_nc_get_locale(void) { return(*(char **)0); } #undef _nc_unicode_locale int _nc_unicode_locale(void) { return(*(int *)0); } #undef _nc_locale_breaks_acs int _nc_locale_breaks_acs( TERMINAL *termp) { return(*(int *)0); } #undef _nc_setupterm int _nc_setupterm( const char *tname, int Filedes, int *errret, int reuse) { return(*(int *)0); } #undef new_prescr SCREEN *new_prescr(void) { return(*(SCREEN **)0); } #undef setupterm int setupterm( const char *tname, int Filedes, int *errret) { return(*(int *)0); } /* ./tinfo/lib_termcap.c */ #undef UP char *UP; #undef BC char *BC; #undef tgetent_sp int tgetent_sp( SCREEN *sp, char *bufp, const char *name) { return(*(int *)0); } #undef tgetent int tgetent( char *bufp, const char *name) { return(*(int *)0); } #undef tgetflag_sp int tgetflag_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetflag int tgetflag( const char *id) { return(*(int *)0); } #undef tgetnum_sp int tgetnum_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetnum int tgetnum( const char *id) { return(*(int *)0); } #undef tgetstr_sp char *tgetstr_sp( SCREEN *sp, const char *id, char **area) { return(*(char **)0); } #undef tgetstr char *tgetstr( const char *id, char **area) { return(*(char **)0); } /* ./tinfo/lib_termname.c */ #undef termname_sp char *termname_sp( SCREEN *sp) { return(*(char **)0); } #undef termname char *termname(void) { return(*(char **)0); } /* ./tinfo/lib_tgoto.c */ #undef tgoto char *tgoto( const char *string, int x, int y) { return(*(char **)0); } /* ./tinfo/lib_ti.c */ #undef tigetflag_sp int tigetflag_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetflag int tigetflag( const char *str) { return(*(int *)0); } #undef tigetnum_sp int tigetnum_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetnum int tigetnum( const char *str) { return(*(int *)0); } #undef tigetstr_sp char *tigetstr_sp( SCREEN *sp, const char *str) { return(*(char **)0); } #undef tigetstr char *tigetstr( const char *str) { return(*(char **)0); } /* ./tinfo/lib_tparm.c */ #undef _nc_tparm_err int _nc_tparm_err; #undef _nc_tparm_analyze int _nc_tparm_analyze( const char *string, char *p_is_s[9], int *_nc_popcount) { return(*(int *)0); } #undef tparm char *tparm( const char *string, ...) { return(*(char **)0); } #undef tiparm char *tiparm( const char *string, ...) { return(*(char **)0); } /* ./tinfo/lib_tputs.c */ #undef PC char PC; #undef ospeed short ospeed; #undef _nc_nulls_sent int _nc_nulls_sent; #undef _nc_set_no_padding void _nc_set_no_padding( SCREEN *sp) { /* void */ } #undef delay_output_sp int delay_output_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef delay_output int delay_output( int ms) { return(*(int *)0); } #undef _nc_flush_sp void _nc_flush_sp( SCREEN *sp) { /* void */ } #undef _nc_flush void _nc_flush(void) { /* void */ } #undef _nc_outch_sp int _nc_outch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_outch int _nc_outch( int ch) { return(*(int *)0); } #undef _nc_putchar_sp int _nc_putchar_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_putchar int _nc_putchar( int ch) { return(*(int *)0); } #undef putp_sp int putp_sp( SCREEN *sp, const char *string) { return(*(int *)0); } #undef putp int putp( const char *string) { return(*(int *)0); } #undef _nc_putp_sp int _nc_putp_sp( SCREEN *sp, const char *name, const char *string) { return(*(int *)0); } #undef _nc_putp int _nc_putp( const char *name, const char *string) { return(*(int *)0); } #undef tputs_sp int tputs_sp( SCREEN *sp, const char *string, int affcnt, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef _nc_outc_wrapper int _nc_outc_wrapper( SCREEN *sp, int c) { return(*(int *)0); } #undef tputs int tputs( const char *string, int affcnt, int (*outc)( int p1)) { return(*(int *)0); } /* ./trace/lib_trace.c */ #undef _nc_tracing unsigned _nc_tracing; #undef _nc_tputs_trace const char *_nc_tputs_trace = {0}; #undef _nc_outchars long _nc_outchars; #undef trace void trace( const unsigned int tracelevel) { /* void */ } #undef _tracef void _tracef( const char *fmt, ...) { /* void */ } #undef _nc_retrace_bool NCURSES_BOOL _nc_retrace_bool( int code) { return(*(NCURSES_BOOL *)0); } #undef _nc_retrace_char char _nc_retrace_char( int code) { return(*(char *)0); } #undef _nc_retrace_int int _nc_retrace_int( int code) { return(*(int *)0); } #undef _nc_retrace_unsigned unsigned _nc_retrace_unsigned( unsigned code) { return(*(unsigned *)0); } #undef _nc_retrace_ptr char *_nc_retrace_ptr( char *code) { return(*(char **)0); } #undef _nc_retrace_cptr const char *_nc_retrace_cptr( const char *code) { return(*(const char **)0); } #undef _nc_retrace_cvoid_ptr const void *_nc_retrace_cvoid_ptr( const void *code) { return(*(const void **)0); } #undef _nc_retrace_void_ptr void *_nc_retrace_void_ptr( void *code) { return(*(void **)0); } #undef _nc_retrace_sp SCREEN *_nc_retrace_sp( SCREEN *code) { return(*(SCREEN **)0); } #undef _nc_retrace_win WINDOW *_nc_retrace_win( WINDOW *code) { return(*(WINDOW **)0); } /* ./trace/lib_traceatr.c */ #undef _traceattr2 char *_traceattr2( int bufnum, chtype newmode) { return(*(char **)0); } #undef _traceattr char *_traceattr( attr_t newmode) { return(*(char **)0); } #undef _nc_retrace_int_attr_t int _nc_retrace_int_attr_t( attr_t code) { return(*(int *)0); } #undef _nc_retrace_attr_t attr_t _nc_retrace_attr_t( attr_t code) { return(*(attr_t *)0); } #undef _nc_altcharset_name const char *_nc_altcharset_name( attr_t attr, chtype ch) { return(*(const char **)0); } #undef _tracechtype2 char *_tracechtype2( int bufnum, chtype ch) { return(*(char **)0); } #undef _tracechtype char *_tracechtype( chtype ch) { return(*(char **)0); } #undef _nc_retrace_chtype chtype _nc_retrace_chtype( chtype code) { return(*(chtype *)0); } /* ./trace/lib_tracebits.c */ #undef _nc_trace_ttymode char *_nc_trace_ttymode( struct termios *tty) { return(*(char **)0); } #undef _nc_tracebits char *_nc_tracebits(void) { return(*(char **)0); } /* ./trace/lib_tracechr.c */ #undef _nc_tracechar char *_nc_tracechar( SCREEN *sp, int ch) { return(*(char **)0); } #undef _tracechar char *_tracechar( int ch) { return(*(char **)0); } /* ./tinfo/lib_ttyflags.c */ #undef _nc_get_tty_mode_sp int _nc_get_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_get_tty_mode int _nc_get_tty_mode( struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode_sp int _nc_set_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode int _nc_set_tty_mode( struct termios *buf) { return(*(int *)0); } #undef def_shell_mode_sp int def_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_shell_mode int def_shell_mode(void) { return(*(int *)0); } #undef def_prog_mode_sp int def_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_prog_mode int def_prog_mode(void) { return(*(int *)0); } #undef reset_prog_mode_sp int reset_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_prog_mode int reset_prog_mode(void) { return(*(int *)0); } #undef reset_shell_mode_sp int reset_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_shell_mode int reset_shell_mode(void) { return(*(int *)0); } #undef savetty_sp int savetty_sp( SCREEN *sp) { return(*(int *)0); } #undef savetty int savetty(void) { return(*(int *)0); } #undef resetty_sp int resetty_sp( SCREEN *sp) { return(*(int *)0); } #undef resetty int resetty(void) { return(*(int *)0); } /* ./tty/lib_twait.c */ #undef _nc_timed_wait int _nc_timed_wait( SCREEN *sp, int mode, int milliseconds, int *timeleft) { return(*(int *)0); } /* ./tinfo/name_match.c */ #undef _nc_first_name char *_nc_first_name( const char *const sp) { return(*(char **)0); } #undef _nc_name_match int _nc_name_match( const char *const namelst, const char *const name, const char *const delim) { return(*(int *)0); } /* ./names.c */ #undef boolnames const char *const boolnames[] = {0}; #undef boolfnames const char *const boolfnames[] = {0}; #undef numnames const char *const numnames[] = {0}; #undef numfnames const char *const numfnames[] = {0}; #undef strnames const char *const strnames[] = {0}; #undef strfnames const char *const strfnames[] = {0}; /* ./tinfo/obsolete.c */ #undef _nc_set_buffer_sp void _nc_set_buffer_sp( SCREEN *sp, FILE *ofp, int buffered) { /* void */ } #undef _nc_set_buffer void _nc_set_buffer( FILE *ofp, int buffered) { /* void */ } /* ./tinfo/read_entry.c */ #undef _nc_init_termtype void _nc_init_termtype( TERMTYPE *const tp) { /* void */ } #undef _nc_read_termtype int _nc_read_termtype( TERMTYPE *ptr, char *buffer, int limit) { return(*(int *)0); } #undef _nc_read_file_entry int _nc_read_file_entry( const char *const filename, TERMTYPE *ptr) { return(*(int *)0); } #undef _nc_read_entry int _nc_read_entry( const char *const name, char *const filename, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/read_termcap.c */ #undef _nc_read_termcap_entry int _nc_read_termcap_entry( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/strings.c */ #undef _nc_str_init string_desc *_nc_str_init( string_desc *dst, char *src, size_t len) { return(*(string_desc **)0); } #undef _nc_str_null string_desc *_nc_str_null( string_desc *dst, size_t len) { return(*(string_desc **)0); } #undef _nc_str_copy string_desc *_nc_str_copy( string_desc *dst, string_desc *src) { return(*(string_desc **)0); } #undef _nc_safe_strcat NCURSES_BOOL _nc_safe_strcat( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_safe_strcpy NCURSES_BOOL _nc_safe_strcpy( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } /* ./trace/trace_buf.c */ #undef _nc_trace_buf char *_nc_trace_buf( int bufnum, size_t want) { return(*(char **)0); } #undef _nc_trace_bufcat char *_nc_trace_bufcat( int bufnum, const char *value) { return(*(char **)0); } /* ./trace/trace_tries.c */ #undef _nc_trace_tries void _nc_trace_tries( TRIES *tree) { /* void */ } /* ./base/tries.c */ #undef _nc_expand_try char *_nc_expand_try( TRIES *tree, unsigned code, int *count, size_t len) { return(*(char **)0); } #undef _nc_remove_key int _nc_remove_key( TRIES **tree, unsigned code) { return(*(int *)0); } #undef _nc_remove_string int _nc_remove_string( TRIES **tree, const char *string) { return(*(int *)0); } /* ./tinfo/trim_sgr0.c */ #undef _nc_trim_sgr0 char *_nc_trim_sgr0( TERMTYPE *tp) { return(*(char **)0); } /* ./unctrl.c */ #undef unctrl_sp const char *unctrl_sp( SCREEN *sp, chtype ch) { return(*(const char **)0); } #undef unctrl const char *unctrl( chtype ch) { return(*(const char **)0); } /* ./trace/visbuf.c */ #undef _nc_visbuf2 const char *_nc_visbuf2( int bufnum, const char *buf) { return(*(const char **)0); } #undef _nc_visbuf const char *_nc_visbuf( const char *buf) { return(*(const char **)0); } #undef _nc_visbufn const char *_nc_visbufn( const char *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf2 const char *_nc_viscbuf2( int bufnum, const chtype *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf const char *_nc_viscbuf( const chtype *buf, int len) { return(*(const char **)0); } /* ./tinfo/alloc_entry.c */ #undef _nc_init_entry void _nc_init_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_copy_entry ENTRY *_nc_copy_entry( ENTRY *oldp) { return(*(ENTRY **)0); } #undef _nc_save_str char *_nc_save_str( const char *const string) { return(*(char **)0); } #undef _nc_wrap_entry void _nc_wrap_entry( ENTRY *const ep, NCURSES_BOOL copy_strings) { /* void */ } #undef _nc_merge_entry void _nc_merge_entry( TERMTYPE *const to, TERMTYPE *const from) { /* void */ } /* ./tinfo/captoinfo.c */ #undef _nc_captoinfo char *_nc_captoinfo( const char *cap, const char *s, int const parameterized) { return(*(char **)0); } #undef _nc_infotocap char *_nc_infotocap( const char *cap, const char *str, int const parameterized) { return(*(char **)0); } /* ./tinfo/comp_expand.c */ #undef _nc_tic_expand char *_nc_tic_expand( const char *srcp, NCURSES_BOOL tic_format, int numbers) { return(*(char **)0); } /* ./tinfo/comp_parse.c */ #undef _nc_check_termtype2 void (*_nc_check_termtype2)( TERMTYPE *p1, NCURSES_BOOL p2); #undef _nc_check_termtype void (*_nc_check_termtype)( TERMTYPE *p1); #undef _nc_entry_match NCURSES_BOOL _nc_entry_match( char *n1, char *n2) { return(*(NCURSES_BOOL *)0); } #undef _nc_read_entry_source void _nc_read_entry_source( FILE *fp, char *buf, int literal, NCURSES_BOOL silent, NCURSES_BOOL (*hook)( ENTRY *p1)) { /* void */ } #undef _nc_resolve_uses2 int _nc_resolve_uses2( NCURSES_BOOL fullresolve, NCURSES_BOOL literal) { return(*(int *)0); } #undef _nc_resolve_uses int _nc_resolve_uses( NCURSES_BOOL fullresolve) { return(*(int *)0); } /* ./tinfo/comp_scan.c */ #undef _nc_syntax int _nc_syntax; #undef _nc_strict_bsd int _nc_strict_bsd; #undef _nc_curr_file_pos long _nc_curr_file_pos; #undef _nc_comment_start long _nc_comment_start; #undef _nc_comment_end long _nc_comment_end; #undef _nc_start_line long _nc_start_line; #undef _nc_curr_token struct token _nc_curr_token; #undef _nc_disable_period NCURSES_BOOL _nc_disable_period; #undef _nc_reset_input void _nc_reset_input( FILE *fp, char *buf) { /* void */ } #undef _nc_get_token int _nc_get_token( NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_trans_string int _nc_trans_string( char *ptr, char *last) { return(*(int *)0); } #undef _nc_push_token void _nc_push_token( int tokclass) { /* void */ } #undef _nc_panic_mode void _nc_panic_mode( char ch) { /* void */ } /* ./tinfo/parse_entry.c */ #undef _nc_parse_entry int _nc_parse_entry( struct entry *entryp, int literal, NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_capcmp int _nc_capcmp( const char *s, const char *t) { return(*(int *)0); } /* ./tinfo/write_entry.c */ #undef _nc_set_writedir void _nc_set_writedir( const char *dir) { /* void */ } #undef _nc_write_entry void _nc_write_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_tic_written int _nc_tic_written(void) { return(*(int *)0); } /* ./base/define_key.c */ #undef define_key_sp int define_key_sp( SCREEN *sp, const char *str, int keycode) { return(*(int *)0); } #undef define_key int define_key( const char *str, int keycode) { return(*(int *)0); } /* ./tinfo/hashed_db.c */ #undef _nc_hashed_db void _nc_hashed_db(void) { /* void */ } /* ./base/key_defined.c */ #undef key_defined_sp int key_defined_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef key_defined int key_defined( const char *str) { return(*(int *)0); } /* ./base/keybound.c */ #undef keybound_sp char *keybound_sp( SCREEN *sp, int code, int count) { return(*(char **)0); } #undef keybound char *keybound( int code, int count) { return(*(char **)0); } /* ./base/keyok.c */ #undef keyok_sp int keyok_sp( SCREEN *sp, int c, NCURSES_BOOL flag) { return(*(int *)0); } #undef keyok int keyok( int c, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/version.c */ #undef curses_version const char *curses_version(void) { return(*(const char **)0); } ncurses-6.0-20160213/ncurses/llib-lncursest0000644000175100001440000021553112563716132017040 0ustar tomusers/**************************************************************************** * Copyright (c) 2008-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2008-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tty/hardscroll.c */ #include #undef _nc_oldnums int *_nc_oldnums; #undef _nc_scroll_optimize_sp void _nc_scroll_optimize_sp( SCREEN *sp) { /* void */ } #undef _nc_scroll_optimize void _nc_scroll_optimize(void) { /* void */ } #undef _nc_linedump_sp void _nc_linedump_sp( SCREEN *sp) { /* void */ } #undef _nc_linedump void _nc_linedump(void) { /* void */ } /* ./tty/hashmap.c */ #undef _nc_hash_map_sp void _nc_hash_map_sp( SCREEN *sp) { /* void */ } #undef _nc_hash_map void _nc_hash_map(void) { /* void */ } #undef _nc_make_oldhash_sp void _nc_make_oldhash_sp( SCREEN *sp, int i) { /* void */ } #undef _nc_make_oldhash void _nc_make_oldhash( int i) { /* void */ } #undef _nc_scroll_oldhash_sp void _nc_scroll_oldhash_sp( SCREEN *sp, int n, int top, int bot) { /* void */ } #undef _nc_scroll_oldhash void _nc_scroll_oldhash( int n, int top, int bot) { /* void */ } /* ./base/lib_addch.c */ #undef _nc_render chtype _nc_render( WINDOW *win, chtype ch) { return(*(chtype *)0); } #undef _nc_waddch_nosync int _nc_waddch_nosync( WINDOW *win, const chtype c) { return(*(int *)0); } #undef waddch int waddch( WINDOW *win, const chtype ch) { return(*(int *)0); } #undef wechochar int wechochar( WINDOW *win, const chtype ch) { return(*(int *)0); } /* ./base/lib_addstr.c */ #undef waddnstr int waddnstr( WINDOW *win, const char *astr, int n) { return(*(int *)0); } #undef waddchnstr int waddchnstr( WINDOW *win, const chtype *astr, int n) { return(*(int *)0); } /* ./base/lib_beep.c */ #undef beep_sp int beep_sp( SCREEN *sp) { return(*(int *)0); } #undef beep int beep(void) { return(*(int *)0); } /* ./base/lib_bkgd.c */ #undef wbkgdset void wbkgdset( WINDOW *win, chtype ch) { /* void */ } #undef wbkgd int wbkgd( WINDOW *win, chtype ch) { return(*(int *)0); } /* ./base/lib_box.c */ #undef wborder int wborder( WINDOW *win, chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br) { return(*(int *)0); } /* ./base/lib_chgat.c */ #undef wchgat int wchgat( WINDOW *win, int n, attr_t attr, short color, const void *opts) { return(*(int *)0); } /* ./base/lib_clear.c */ #undef wclear int wclear( WINDOW *win) { return(*(int *)0); } /* ./base/lib_clearok.c */ #undef clearok int clearok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_clrbot.c */ #undef wclrtobot int wclrtobot( WINDOW *win) { return(*(int *)0); } /* ./base/lib_clreol.c */ #undef wclrtoeol int wclrtoeol( WINDOW *win) { return(*(int *)0); } /* ./base/lib_color.c */ #undef _nc_COLOR_PAIRS int _nc_COLOR_PAIRS(void) { return(*(int *)0); } #undef _nc_COLORS int _nc_COLORS(void) { return(*(int *)0); } #undef _nc_reset_colors_sp NCURSES_BOOL _nc_reset_colors_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef _nc_reset_colors NCURSES_BOOL _nc_reset_colors(void) { return(*(NCURSES_BOOL *)0); } #undef start_color_sp int start_color_sp( SCREEN *sp) { return(*(int *)0); } #undef start_color int start_color(void) { return(*(int *)0); } #undef init_pair_sp int init_pair_sp( SCREEN *sp, short pair, short f, short b) { return(*(int *)0); } #undef init_pair int init_pair( short pair, short f, short b) { return(*(int *)0); } #undef init_color_sp int init_color_sp( SCREEN *sp, short color, short r, short g, short b) { return(*(int *)0); } #undef init_color int init_color( short color, short r, short g, short b) { return(*(int *)0); } #undef can_change_color_sp NCURSES_BOOL can_change_color_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef can_change_color NCURSES_BOOL can_change_color(void) { return(*(NCURSES_BOOL *)0); } #undef has_colors_sp NCURSES_BOOL has_colors_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_colors NCURSES_BOOL has_colors(void) { return(*(NCURSES_BOOL *)0); } #undef color_content_sp int color_content_sp( SCREEN *sp, short color, short *r, short *g, short *b) { return(*(int *)0); } #undef color_content int color_content( short color, short *r, short *g, short *b) { return(*(int *)0); } #undef pair_content_sp int pair_content_sp( SCREEN *sp, short pair, short *f, short *b) { return(*(int *)0); } #undef pair_content int pair_content( short pair, short *f, short *b) { return(*(int *)0); } #undef _nc_do_color_sp void _nc_do_color_sp( SCREEN *sp, int old_pair, int pair, int reverse, NCURSES_OUTC_sp outc) { /* void */ } #undef _nc_do_color void _nc_do_color( int old_pair, int pair, int reverse, NCURSES_OUTC outc) { /* void */ } /* ./base/lib_colorset.c */ #undef wcolor_set int wcolor_set( WINDOW *win, short color_pair_number, void *opts) { return(*(int *)0); } /* ./base/lib_delch.c */ #undef wdelch int wdelch( WINDOW *win) { return(*(int *)0); } /* ./base/lib_delwin.c */ #undef delwin int delwin( WINDOW *win) { return(*(int *)0); } /* ./base/lib_echo.c */ #undef echo_sp int echo_sp( SCREEN *sp) { return(*(int *)0); } #undef echo int echo(void) { return(*(int *)0); } #undef noecho_sp int noecho_sp( SCREEN *sp) { return(*(int *)0); } #undef noecho int noecho(void) { return(*(int *)0); } /* ./base/lib_endwin.c */ #undef endwin_sp int endwin_sp( SCREEN *sp) { return(*(int *)0); } #undef endwin int endwin(void) { return(*(int *)0); } /* ./base/lib_erase.c */ #undef werase int werase( WINDOW *win) { return(*(int *)0); } /* ./base/lib_flash.c */ #undef flash_sp int flash_sp( SCREEN *sp) { return(*(int *)0); } #undef flash int flash(void) { return(*(int *)0); } /* ./lib_gen.c */ #undef addch int (addch)( const chtype z) { return(*(int *)0); } #undef addchnstr int (addchnstr)( const chtype *a1, int z) { return(*(int *)0); } #undef addchstr int (addchstr)( const chtype *z) { return(*(int *)0); } #undef addnstr int (addnstr)( const char *a1, int z) { return(*(int *)0); } #undef addstr int (addstr)( const char *z) { return(*(int *)0); } #undef attroff int (attroff)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attron int (attron)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attrset int (attrset)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attr_get int (attr_get)( attr_t *a1, short *a2, void *z) { return(*(int *)0); } #undef attr_off int (attr_off)( attr_t a1, void *z) { return(*(int *)0); } #undef attr_on int (attr_on)( attr_t a1, void *z) { return(*(int *)0); } #undef attr_set int (attr_set)( attr_t a1, short a2, void *z) { return(*(int *)0); } #undef bkgd int (bkgd)( chtype z) { return(*(int *)0); } #undef bkgdset void (bkgdset)( chtype z) { /* void */ } #undef border int (border)( chtype a1, chtype a2, chtype a3, chtype a4, chtype a5, chtype a6, chtype a7, chtype z) { return(*(int *)0); } #undef box int (box)( WINDOW *a1, chtype a2, chtype z) { return(*(int *)0); } #undef chgat int (chgat)( int a1, attr_t a2, short a3, const void *z) { return(*(int *)0); } #undef clear int (clear)(void) { return(*(int *)0); } #undef clrtobot int (clrtobot)(void) { return(*(int *)0); } #undef clrtoeol int (clrtoeol)(void) { return(*(int *)0); } #undef color_set int (color_set)( short a1, void *z) { return(*(int *)0); } #undef COLOR_PAIR int (COLOR_PAIR)( int z) { return(*(int *)0); } #undef delch int (delch)(void) { return(*(int *)0); } #undef deleteln int (deleteln)(void) { return(*(int *)0); } #undef echochar int (echochar)( const chtype z) { return(*(int *)0); } #undef erase int (erase)(void) { return(*(int *)0); } #undef getbkgd chtype (getbkgd)( WINDOW *z) { return(*(chtype *)0); } #undef getch int (getch)(void) { return(*(int *)0); } #undef getnstr int (getnstr)( char *a1, int z) { return(*(int *)0); } #undef getstr int (getstr)( char *z) { return(*(int *)0); } #undef hline int (hline)( chtype a1, int z) { return(*(int *)0); } #undef inch chtype (inch)(void) { return(*(chtype *)0); } #undef inchnstr int (inchnstr)( chtype *a1, int z) { return(*(int *)0); } #undef inchstr int (inchstr)( chtype *z) { return(*(int *)0); } #undef innstr int (innstr)( char *a1, int z) { return(*(int *)0); } #undef insch int (insch)( chtype z) { return(*(int *)0); } #undef insdelln int (insdelln)( int z) { return(*(int *)0); } #undef insertln int (insertln)(void) { return(*(int *)0); } #undef insnstr int (insnstr)( const char *a1, int z) { return(*(int *)0); } #undef insstr int (insstr)( const char *z) { return(*(int *)0); } #undef instr int (instr)( char *z) { return(*(int *)0); } #undef move int (move)( int a1, int z) { return(*(int *)0); } #undef mvaddch int (mvaddch)( int a1, int a2, const chtype z) { return(*(int *)0); } #undef mvaddchnstr int (mvaddchnstr)( int a1, int a2, const chtype *a3, int z) { return(*(int *)0); } #undef mvaddchstr int (mvaddchstr)( int a1, int a2, const chtype *z) { return(*(int *)0); } #undef mvaddnstr int (mvaddnstr)( int a1, int a2, const char *a3, int z) { return(*(int *)0); } #undef mvaddstr int (mvaddstr)( int a1, int a2, const char *z) { return(*(int *)0); } #undef mvchgat int (mvchgat)( int a1, int a2, int a3, attr_t a4, short a5, const void *z) { return(*(int *)0); } #undef mvdelch int (mvdelch)( int a1, int z) { return(*(int *)0); } #undef mvgetch int (mvgetch)( int a1, int z) { return(*(int *)0); } #undef mvgetnstr int (mvgetnstr)( int a1, int a2, char *a3, int z) { return(*(int *)0); } #undef mvgetstr int (mvgetstr)( int a1, int a2, char *z) { return(*(int *)0); } #undef mvhline int (mvhline)( int a1, int a2, chtype a3, int z) { return(*(int *)0); } #undef mvinch chtype (mvinch)( int a1, int z) { return(*(chtype *)0); } #undef mvinchnstr int (mvinchnstr)( int a1, int a2, chtype *a3, int z) { return(*(int *)0); } #undef mvinchstr int (mvinchstr)( int a1, int a2, chtype *z) { return(*(int *)0); } #undef mvinnstr int (mvinnstr)( int a1, int a2, char *a3, int z) { return(*(int *)0); } #undef mvinsch int (mvinsch)( int a1, int a2, chtype z) { return(*(int *)0); } #undef mvinsnstr int (mvinsnstr)( int a1, int a2, const char *a3, int z) { return(*(int *)0); } #undef mvinsstr int (mvinsstr)( int a1, int a2, const char *z) { return(*(int *)0); } #undef mvinstr int (mvinstr)( int a1, int a2, char *z) { return(*(int *)0); } #undef mvvline int (mvvline)( int a1, int a2, chtype a3, int z) { return(*(int *)0); } #undef mvwaddch int (mvwaddch)( WINDOW *a1, int a2, int a3, const chtype z) { return(*(int *)0); } #undef mvwaddchnstr int (mvwaddchnstr)( WINDOW *a1, int a2, int a3, const chtype *a4, int z) { return(*(int *)0); } #undef mvwaddchstr int (mvwaddchstr)( WINDOW *a1, int a2, int a3, const chtype *z) { return(*(int *)0); } #undef mvwaddnstr int (mvwaddnstr)( WINDOW *a1, int a2, int a3, const char *a4, int z) { return(*(int *)0); } #undef mvwaddstr int (mvwaddstr)( WINDOW *a1, int a2, int a3, const char *z) { return(*(int *)0); } #undef mvwchgat int (mvwchgat)( WINDOW *a1, int a2, int a3, int a4, attr_t a5, short a6, const void *z) { return(*(int *)0); } #undef mvwdelch int (mvwdelch)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef mvwgetch int (mvwgetch)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef mvwgetnstr int (mvwgetnstr)( WINDOW *a1, int a2, int a3, char *a4, int z) { return(*(int *)0); } #undef mvwgetstr int (mvwgetstr)( WINDOW *a1, int a2, int a3, char *z) { return(*(int *)0); } #undef mvwhline int (mvwhline)( WINDOW *a1, int a2, int a3, chtype a4, int z) { return(*(int *)0); } #undef mvwinch chtype (mvwinch)( WINDOW *a1, int a2, int z) { return(*(chtype *)0); } #undef mvwinchnstr int (mvwinchnstr)( WINDOW *a1, int a2, int a3, chtype *a4, int z) { return(*(int *)0); } #undef mvwinchstr int (mvwinchstr)( WINDOW *a1, int a2, int a3, chtype *z) { return(*(int *)0); } #undef mvwinnstr int (mvwinnstr)( WINDOW *a1, int a2, int a3, char *a4, int z) { return(*(int *)0); } #undef mvwinsch int (mvwinsch)( WINDOW *a1, int a2, int a3, chtype z) { return(*(int *)0); } #undef mvwinsnstr int (mvwinsnstr)( WINDOW *a1, int a2, int a3, const char *a4, int z) { return(*(int *)0); } #undef mvwinsstr int (mvwinsstr)( WINDOW *a1, int a2, int a3, const char *z) { return(*(int *)0); } #undef mvwinstr int (mvwinstr)( WINDOW *a1, int a2, int a3, char *z) { return(*(int *)0); } #undef mvwvline int (mvwvline)( WINDOW *a1, int a2, int a3, chtype a4, int z) { return(*(int *)0); } #undef PAIR_NUMBER int (PAIR_NUMBER)( int z) { return(*(int *)0); } #undef redrawwin int (redrawwin)( WINDOW *z) { return(*(int *)0); } #undef refresh int (refresh)(void) { return(*(int *)0); } #undef scrl int (scrl)( int z) { return(*(int *)0); } #undef scroll int (scroll)( WINDOW *z) { return(*(int *)0); } #undef setscrreg int (setscrreg)( int a1, int z) { return(*(int *)0); } #undef standout int (standout)(void) { return(*(int *)0); } #undef standend int (standend)(void) { return(*(int *)0); } #undef timeout void (timeout)( int z) { /* void */ } #undef touchline int (touchline)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef touchwin int (touchwin)( WINDOW *z) { return(*(int *)0); } #undef untouchwin int (untouchwin)( WINDOW *z) { return(*(int *)0); } #undef vline int (vline)( chtype a1, int z) { return(*(int *)0); } #undef vw_printw int (vw_printw)( WINDOW *a1, const char *a2, va_list z) { return(*(int *)0); } #undef vw_scanw int (vw_scanw)( WINDOW *a1, const char *a2, va_list z) { return(*(int *)0); } #undef waddchstr int (waddchstr)( WINDOW *a1, const chtype *z) { return(*(int *)0); } #undef waddstr int (waddstr)( WINDOW *a1, const char *z) { return(*(int *)0); } #undef wattron int (wattron)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattroff int (wattroff)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattrset int (wattrset)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattr_get int (wattr_get)( WINDOW *a1, attr_t *a2, short *a3, void *z) { return(*(int *)0); } #undef wattr_set int (wattr_set)( WINDOW *a1, attr_t a2, short a3, void *z) { return(*(int *)0); } #undef wdeleteln int (wdeleteln)( WINDOW *z) { return(*(int *)0); } #undef wgetstr int (wgetstr)( WINDOW *a1, char *z) { return(*(int *)0); } #undef winchstr int (winchstr)( WINDOW *a1, chtype *z) { return(*(int *)0); } #undef winsertln int (winsertln)( WINDOW *z) { return(*(int *)0); } #undef winsstr int (winsstr)( WINDOW *a1, const char *z) { return(*(int *)0); } #undef winstr int (winstr)( WINDOW *a1, char *z) { return(*(int *)0); } #undef wstandout int (wstandout)( WINDOW *z) { return(*(int *)0); } #undef wstandend int (wstandend)( WINDOW *z) { return(*(int *)0); } #undef getattrs int (getattrs)( const WINDOW *z) { return(*(int *)0); } #undef getcurx int (getcurx)( const WINDOW *z) { return(*(int *)0); } #undef getcury int (getcury)( const WINDOW *z) { return(*(int *)0); } #undef getbegx int (getbegx)( const WINDOW *z) { return(*(int *)0); } #undef getbegy int (getbegy)( const WINDOW *z) { return(*(int *)0); } #undef getmaxx int (getmaxx)( const WINDOW *z) { return(*(int *)0); } #undef getmaxy int (getmaxy)( const WINDOW *z) { return(*(int *)0); } #undef getparx int (getparx)( const WINDOW *z) { return(*(int *)0); } #undef getpary int (getpary)( const WINDOW *z) { return(*(int *)0); } #undef wgetparent WINDOW *(wgetparent)( const WINDOW *z) { return(*(WINDOW **)0); } #undef is_cleared NCURSES_BOOL (is_cleared)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_idcok NCURSES_BOOL (is_idcok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_idlok NCURSES_BOOL (is_idlok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_immedok NCURSES_BOOL (is_immedok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_keypad NCURSES_BOOL (is_keypad)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_leaveok NCURSES_BOOL (is_leaveok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_nodelay NCURSES_BOOL (is_nodelay)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_notimeout NCURSES_BOOL (is_notimeout)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_pad NCURSES_BOOL (is_pad)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_scrollok NCURSES_BOOL (is_scrollok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_subwin NCURSES_BOOL (is_subwin)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_syncok NCURSES_BOOL (is_syncok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef wgetdelay int (wgetdelay)( const WINDOW *z) { return(*(int *)0); } #undef wgetscrreg int (wgetscrreg)( const WINDOW *a1, int *a2, int *z) { return(*(int *)0); } #undef mouse_trafo NCURSES_BOOL (mouse_trafo)( int *a1, int *a2, NCURSES_BOOL z) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_getch.c */ #undef _nc_ESCDELAY int _nc_ESCDELAY(void) { return(*(int *)0); } #undef _nc_ptr_Escdelay int *_nc_ptr_Escdelay( SCREEN *sp) { return(*(int **)0); } #undef set_escdelay_sp int set_escdelay_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_escdelay int set_escdelay( int value) { return(*(int *)0); } #undef get_escdelay_sp int get_escdelay_sp( SCREEN *sp) { return(*(int *)0); } #undef get_escdelay int get_escdelay(void) { return(*(int *)0); } #undef _nc_wgetch int _nc_wgetch( WINDOW *win, int *result, int use_meta) { return(*(int *)0); } #undef wgetch int wgetch( WINDOW *win) { return(*(int *)0); } /* ./base/lib_getstr.c */ #undef wgetnstr int wgetnstr( WINDOW *win, char *str, int maxlen) { return(*(int *)0); } /* ./base/lib_hline.c */ #undef whline int whline( WINDOW *win, chtype ch, int n) { return(*(int *)0); } /* ./base/lib_immedok.c */ #undef immedok void immedok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } /* ./base/lib_inchstr.c */ #undef winchnstr int winchnstr( WINDOW *win, chtype *str, int n) { return(*(int *)0); } /* ./base/lib_initscr.c */ #undef initscr WINDOW *initscr(void) { return(*(WINDOW **)0); } /* ./base/lib_insch.c */ #undef _nc_insert_ch int _nc_insert_ch( SCREEN *sp, WINDOW *win, chtype ch) { return(*(int *)0); } #undef winsch int winsch( WINDOW *win, chtype c) { return(*(int *)0); } /* ./base/lib_insdel.c */ #undef winsdelln int winsdelln( WINDOW *win, int n) { return(*(int *)0); } /* ./base/lib_insnstr.c */ #undef winsnstr int winsnstr( WINDOW *win, const char *s, int n) { return(*(int *)0); } /* ./base/lib_instr.c */ #undef winnstr int winnstr( WINDOW *win, char *str, int n) { return(*(int *)0); } /* ./base/lib_isendwin.c */ #undef isendwin_sp NCURSES_BOOL isendwin_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef isendwin NCURSES_BOOL isendwin(void) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_leaveok.c */ #undef leaveok int leaveok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_mouse.c */ #undef getmouse_sp int getmouse_sp( SCREEN *sp, MEVENT *aevent) { return(*(int *)0); } #undef getmouse int getmouse( MEVENT *aevent) { return(*(int *)0); } #undef ungetmouse_sp int ungetmouse_sp( SCREEN *sp, MEVENT *aevent) { return(*(int *)0); } #undef ungetmouse int ungetmouse( MEVENT *aevent) { return(*(int *)0); } #undef mousemask_sp mmask_t mousemask_sp( SCREEN *sp, mmask_t newmask, mmask_t *oldmask) { return(*(mmask_t *)0); } #undef mousemask mmask_t mousemask( mmask_t newmask, mmask_t *oldmask) { return(*(mmask_t *)0); } #undef wenclose NCURSES_BOOL wenclose( const WINDOW *win, int y, int x) { return(*(NCURSES_BOOL *)0); } #undef mouseinterval_sp int mouseinterval_sp( SCREEN *sp, int maxclick) { return(*(int *)0); } #undef mouseinterval int mouseinterval( int maxclick) { return(*(int *)0); } #undef _nc_has_mouse NCURSES_BOOL _nc_has_mouse( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_mouse_sp NCURSES_BOOL has_mouse_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_mouse NCURSES_BOOL has_mouse(void) { return(*(NCURSES_BOOL *)0); } #undef wmouse_trafo NCURSES_BOOL wmouse_trafo( const WINDOW *win, int *pY, int *pX, NCURSES_BOOL to_screen) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_move.c */ #undef wmove int wmove( WINDOW *win, int y, int x) { return(*(int *)0); } /* ./tty/lib_mvcur.c */ #undef _nc_msec_cost_sp int _nc_msec_cost_sp( SCREEN *sp, const char *const cap, int affcnt) { return(*(int *)0); } #undef _nc_msec_cost int _nc_msec_cost( const char *const cap, int affcnt) { return(*(int *)0); } #undef _nc_mvcur_resume_sp void _nc_mvcur_resume_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_resume void _nc_mvcur_resume(void) { /* void */ } #undef _nc_mvcur_init_sp void _nc_mvcur_init_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_init void _nc_mvcur_init(void) { /* void */ } #undef _nc_mvcur_wrap_sp void _nc_mvcur_wrap_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_wrap void _nc_mvcur_wrap(void) { /* void */ } #undef _nc_mvcur_sp int _nc_mvcur_sp( SCREEN *sp, int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef _nc_mvcur int _nc_mvcur( int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef mvcur_sp int mvcur_sp( SCREEN *sp, int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef mvcur int mvcur( int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef _nc_optimize_enable int _nc_optimize_enable; /* ./base/lib_mvwin.c */ #undef mvwin int mvwin( WINDOW *win, int by, int bx) { return(*(int *)0); } /* ./base/lib_newterm.c */ #undef filter_sp void filter_sp( SCREEN *sp) { /* void */ } #undef filter void filter(void) { /* void */ } #undef nofilter_sp void nofilter_sp( SCREEN *sp) { /* void */ } #undef nofilter void nofilter(void) { /* void */ } #undef newterm_sp SCREEN *newterm_sp( SCREEN *sp, const char *name, FILE *ofp, FILE *ifp) { return(*(SCREEN **)0); } #undef newterm SCREEN *newterm( const char *name, FILE *ofp, FILE *ifp) { return(*(SCREEN **)0); } /* ./base/lib_newwin.c */ #undef _nc_freewin int _nc_freewin( WINDOW *win) { return(*(int *)0); } #undef newwin_sp WINDOW *newwin_sp( SCREEN *sp, int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef newwin WINDOW *newwin( int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef derwin WINDOW *derwin( WINDOW *orig, int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef subwin WINDOW *subwin( WINDOW *w, int l, int c, int y, int x) { return(*(WINDOW **)0); } #undef _nc_makenew_sp WINDOW *_nc_makenew_sp( SCREEN *sp, int num_lines, int num_columns, int begy, int begx, int flags) { return(*(WINDOW **)0); } #undef _nc_curscr_of WINDOW *_nc_curscr_of( SCREEN *sp) { return(*(WINDOW **)0); } #undef _nc_newscr_of WINDOW *_nc_newscr_of( SCREEN *sp) { return(*(WINDOW **)0); } #undef _nc_stdscr_of WINDOW *_nc_stdscr_of( SCREEN *sp) { return(*(WINDOW **)0); } /* ./base/lib_nl.c */ #undef nl_sp int nl_sp( SCREEN *sp) { return(*(int *)0); } #undef nl int nl(void) { return(*(int *)0); } #undef nonl_sp int nonl_sp( SCREEN *sp) { return(*(int *)0); } #undef nonl int nonl(void) { return(*(int *)0); } /* ./base/lib_overlay.c */ #undef overlay int overlay( const WINDOW *win1, WINDOW *win2) { return(*(int *)0); } #undef overwrite int overwrite( const WINDOW *win1, WINDOW *win2) { return(*(int *)0); } #undef copywin int copywin( const WINDOW *src, WINDOW *dst, int sminrow, int smincol, int dminrow, int dmincol, int dmaxrow, int dmaxcol, int over) { return(*(int *)0); } /* ./base/lib_pad.c */ #undef newpad_sp WINDOW *newpad_sp( SCREEN *sp, int l, int c) { return(*(WINDOW **)0); } #undef newpad WINDOW *newpad( int l, int c) { return(*(WINDOW **)0); } #undef subpad WINDOW *subpad( WINDOW *orig, int l, int c, int begy, int begx) { return(*(WINDOW **)0); } #undef prefresh int prefresh( WINDOW *win, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { return(*(int *)0); } #undef pnoutrefresh int pnoutrefresh( WINDOW *win, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { return(*(int *)0); } #undef pechochar int pechochar( WINDOW *pad, const chtype ch) { return(*(int *)0); } /* ./base/lib_printw.c */ #undef printw int printw( const char *fmt, ...) { return(*(int *)0); } #undef wprintw int wprintw( WINDOW *win, const char *fmt, ...) { return(*(int *)0); } #undef mvprintw int mvprintw( int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef mvwprintw int mvwprintw( WINDOW *win, int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef vwprintw int vwprintw( WINDOW *win, const char *fmt, va_list argp) { return(*(int *)0); } /* ./base/lib_redrawln.c */ #undef wredrawln int wredrawln( WINDOW *win, int beg, int num) { return(*(int *)0); } /* ./base/lib_refresh.c */ #undef wrefresh int wrefresh( WINDOW *win) { return(*(int *)0); } #undef wnoutrefresh int wnoutrefresh( WINDOW *win) { return(*(int *)0); } /* ./base/lib_restart.c */ #undef restartterm_sp int restartterm_sp( SCREEN *sp, const char *termp, int filenum, int *errret) { return(*(int *)0); } #undef restartterm int restartterm( const char *termp, int filenum, int *errret) { return(*(int *)0); } /* ./base/lib_scanw.c */ #undef vwscanw int vwscanw( WINDOW *win, const char *fmt, va_list argp) { return(*(int *)0); } #undef scanw int scanw( const char *fmt, ...) { return(*(int *)0); } #undef wscanw int wscanw( WINDOW *win, const char *fmt, ...) { return(*(int *)0); } #undef mvscanw int mvscanw( int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef mvwscanw int mvwscanw( WINDOW *win, int y, int x, const char *fmt, ...) { return(*(int *)0); } /* ./base/lib_screen.c */ #undef getwin_sp WINDOW *getwin_sp( SCREEN *sp, FILE *filep) { return(*(WINDOW **)0); } #undef getwin WINDOW *getwin( FILE *filep) { return(*(WINDOW **)0); } #undef putwin int putwin( WINDOW *win, FILE *filep) { return(*(int *)0); } #undef scr_restore_sp int scr_restore_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_restore int scr_restore( const char *file) { return(*(int *)0); } #undef scr_dump int scr_dump( const char *file) { return(*(int *)0); } #undef scr_init_sp int scr_init_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_init int scr_init( const char *file) { return(*(int *)0); } #undef scr_set_sp int scr_set_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_set int scr_set( const char *file) { return(*(int *)0); } /* ./base/lib_scroll.c */ #undef _nc_scroll_window void _nc_scroll_window( WINDOW *win, int const n, int const top, int const bottom, chtype blank) { /* void */ } #undef wscrl int wscrl( WINDOW *win, int n) { return(*(int *)0); } /* ./base/lib_scrollok.c */ #undef scrollok int scrollok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_scrreg.c */ #undef wsetscrreg int wsetscrreg( WINDOW *win, int top, int bottom) { return(*(int *)0); } /* ./base/lib_set_term.c */ #undef set_term SCREEN *set_term( SCREEN *screenp) { return(*(SCREEN **)0); } #undef delscreen void delscreen( SCREEN *sp) { /* void */ } #undef _nc_setupscreen_sp int _nc_setupscreen_sp( SCREEN **spp, int slines, int scolumns, FILE *output, int filtered, int slk_format) { return(*(int *)0); } #undef _nc_setupscreen int _nc_setupscreen( int slines, int scolumns, FILE *output, int filtered, int slk_format) { return(*(int *)0); } #undef _nc_ripoffline_sp int _nc_ripoffline_sp( SCREEN *sp, int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef _nc_ripoffline int _nc_ripoffline( int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef ripoffline_sp int ripoffline_sp( SCREEN *sp, int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef ripoffline int ripoffline( int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } /* ./base/lib_slk.c */ #undef _nc_format_slks int _nc_format_slks( SCREEN *sp, int cols) { return(*(int *)0); } #undef _nc_slk_initialize int _nc_slk_initialize( WINDOW *stwin, int cols) { return(*(int *)0); } #undef slk_restore_sp int slk_restore_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_restore int slk_restore(void) { return(*(int *)0); } /* ./base/lib_slkatr_set.c */ #undef slk_attr_set_sp int slk_attr_set_sp( SCREEN *sp, const attr_t attr, short color_pair_number, void *opts) { return(*(int *)0); } #undef slk_attr_set int slk_attr_set( const attr_t attr, short color_pair_number, void *opts) { return(*(int *)0); } /* ./base/lib_slkatrof.c */ #undef slk_attroff_sp int slk_attroff_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attroff int slk_attroff( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkatron.c */ #undef slk_attron_sp int slk_attron_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attron int slk_attron( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkatrset.c */ #undef slk_attrset_sp int slk_attrset_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attrset int slk_attrset( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkattr.c */ #undef slk_attr_sp attr_t slk_attr_sp( SCREEN *sp) { return(*(attr_t *)0); } #undef slk_attr attr_t slk_attr(void) { return(*(attr_t *)0); } /* ./base/lib_slkclear.c */ #undef slk_clear_sp int slk_clear_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_clear int slk_clear(void) { return(*(int *)0); } /* ./base/lib_slkcolor.c */ #undef slk_color_sp int slk_color_sp( SCREEN *sp, short color_pair_number) { return(*(int *)0); } #undef slk_color int slk_color( short color_pair_number) { return(*(int *)0); } /* ./base/lib_slkinit.c */ #undef slk_init_sp int slk_init_sp( SCREEN *sp, int format) { return(*(int *)0); } #undef slk_init int slk_init( int format) { return(*(int *)0); } /* ./base/lib_slklab.c */ #undef slk_label_sp char *slk_label_sp( SCREEN *sp, int n) { return(*(char **)0); } #undef slk_label char *slk_label( int n) { return(*(char **)0); } /* ./base/lib_slkrefr.c */ #undef slk_noutrefresh_sp int slk_noutrefresh_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_noutrefresh int slk_noutrefresh(void) { return(*(int *)0); } #undef slk_refresh_sp int slk_refresh_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_refresh int slk_refresh(void) { return(*(int *)0); } /* ./base/lib_slkset.c */ #undef slk_set_sp int slk_set_sp( SCREEN *sp, int i, const char *astr, int format) { return(*(int *)0); } #undef slk_set int slk_set( int i, const char *astr, int format) { return(*(int *)0); } /* ./base/lib_slktouch.c */ #undef slk_touch_sp int slk_touch_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_touch int slk_touch(void) { return(*(int *)0); } /* ./base/lib_touch.c */ #undef is_linetouched NCURSES_BOOL is_linetouched( WINDOW *win, int line) { return(*(NCURSES_BOOL *)0); } #undef is_wintouched NCURSES_BOOL is_wintouched( WINDOW *win) { return(*(NCURSES_BOOL *)0); } #undef wtouchln int wtouchln( WINDOW *win, int y, int n, int changed) { return(*(int *)0); } /* ./trace/lib_tracedmp.c */ #undef _tracedump void _tracedump( const char *name, WINDOW *win) { /* void */ } /* ./trace/lib_tracemse.c */ #undef _nc_trace_mmask_t char *_nc_trace_mmask_t( SCREEN *sp, mmask_t code) { return(*(char **)0); } #undef _nc_tracemouse char *_nc_tracemouse( SCREEN *sp, MEVENT const *ep) { return(*(char **)0); } #undef _nc_retrace_mmask_t mmask_t _nc_retrace_mmask_t( SCREEN *sp, mmask_t code) { return(*(mmask_t *)0); } #undef _tracemouse char *_tracemouse( MEVENT const *ep) { return(*(char **)0); } /* ./tty/lib_tstp.c */ #undef _nc_signal_handler void _nc_signal_handler( int enable) { /* void */ } /* ./base/lib_ungetch.c */ #undef _nc_fifo_dump void _nc_fifo_dump( SCREEN *sp) { /* void */ } #undef ungetch_sp int ungetch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef ungetch int ungetch( int ch) { return(*(int *)0); } /* ./tty/lib_vidattr.c */ #undef vidputs_sp int vidputs_sp( SCREEN *sp, chtype newmode, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef vidputs int vidputs( chtype newmode, NCURSES_OUTC outc) { return(*(int *)0); } #undef vidattr_sp int vidattr_sp( SCREEN *sp, chtype newmode) { return(*(int *)0); } #undef vidattr int vidattr( chtype newmode) { return(*(int *)0); } #undef termattrs_sp chtype termattrs_sp( SCREEN *sp) { return(*(chtype *)0); } #undef termattrs chtype termattrs(void) { return(*(chtype *)0); } /* ./base/lib_vline.c */ #undef wvline int wvline( WINDOW *win, chtype ch, int n) { return(*(int *)0); } /* ./base/lib_wattroff.c */ #undef wattr_off int wattr_off( WINDOW *win, attr_t at, void *opts) { return(*(int *)0); } /* ./base/lib_wattron.c */ #undef wattr_on int wattr_on( WINDOW *win, attr_t at, void *opts) { return(*(int *)0); } /* ./base/lib_winch.c */ #undef winch chtype winch( WINDOW *win) { return(*(chtype *)0); } /* ./base/lib_window.c */ #undef _nc_synchook void _nc_synchook( WINDOW *win) { /* void */ } #undef mvderwin int mvderwin( WINDOW *win, int y, int x) { return(*(int *)0); } #undef syncok int syncok( WINDOW *win, NCURSES_BOOL bf) { return(*(int *)0); } #undef wsyncup void wsyncup( WINDOW *win) { /* void */ } #undef wsyncdown void wsyncdown( WINDOW *win) { /* void */ } #undef wcursyncup void wcursyncup( WINDOW *win) { /* void */ } #undef dupwin WINDOW *dupwin( WINDOW *win) { return(*(WINDOW **)0); } /* ./base/nc_panel.c */ #undef _nc_panelhook_sp struct panelhook *_nc_panelhook_sp( SCREEN *sp) { return(*(struct panelhook **)0); } #undef _nc_panelhook struct panelhook *_nc_panelhook(void) { return(*(struct panelhook **)0); } /* ./base/safe_sprintf.c */ #undef _nc_printf_string_sp char *_nc_printf_string_sp( SCREEN *sp, const char *fmt, va_list ap) { return(*(char **)0); } #undef _nc_printf_string char *_nc_printf_string( const char *fmt, va_list ap) { return(*(char **)0); } /* ./tty/tty_update.c */ #undef doupdate_sp int doupdate_sp( SCREEN *sp) { return(*(int *)0); } #undef doupdate int doupdate(void) { return(*(int *)0); } #undef _nc_scrolln_sp int _nc_scrolln_sp( SCREEN *sp, int n, int top, int bot, int maxy) { return(*(int *)0); } #undef _nc_scrolln int _nc_scrolln( int n, int top, int bot, int maxy) { return(*(int *)0); } #undef _nc_screen_resume_sp void _nc_screen_resume_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_resume void _nc_screen_resume(void) { /* void */ } #undef _nc_screen_init_sp void _nc_screen_init_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_init void _nc_screen_init(void) { /* void */ } #undef _nc_screen_wrap_sp void _nc_screen_wrap_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_wrap void _nc_screen_wrap(void) { /* void */ } #undef _nc_do_xmc_glitch_sp void _nc_do_xmc_glitch_sp( SCREEN *sp, attr_t previous) { /* void */ } #undef _nc_do_xmc_glitch void _nc_do_xmc_glitch( attr_t previous) { /* void */ } /* ./trace/varargs.c */ #undef _nc_varargs char *_nc_varargs( const char *fmt, va_list ap) { return(*(char **)0); } /* ./base/vsscanf.c */ #undef _nc_vsscanf void _nc_vsscanf(void) { /* void */ } /* ./base/lib_freeall.c */ #undef _nc_freeall void _nc_freeall(void) { /* void */ } #undef _nc_free_and_exit_sp void _nc_free_and_exit_sp( SCREEN *sp, int code) { /* void */ } #undef _nc_free_and_exit void _nc_free_and_exit( int code) { /* void */ } /* ./expanded.c */ #undef _nc_toggle_attr_on void _nc_toggle_attr_on( attr_t *S, attr_t at) { /* void */ } #undef _nc_toggle_attr_off void _nc_toggle_attr_off( attr_t *S, attr_t at) { /* void */ } #undef _nc_DelCharCost_sp int _nc_DelCharCost_sp( SCREEN *sp, int count) { return(*(int *)0); } #undef _nc_InsCharCost_sp int _nc_InsCharCost_sp( SCREEN *sp, int count) { return(*(int *)0); } #undef _nc_UpdateAttrs_sp void _nc_UpdateAttrs_sp( SCREEN *sp, chtype c) { /* void */ } #undef _nc_DelCharCost int _nc_DelCharCost( int count) { return(*(int *)0); } #undef _nc_InsCharCost int _nc_InsCharCost( int count) { return(*(int *)0); } #undef _nc_UpdateAttrs void _nc_UpdateAttrs( chtype c) { /* void */ } /* ./base/legacy_coding.c */ #undef use_legacy_coding_sp int use_legacy_coding_sp( SCREEN *sp, int level) { return(*(int *)0); } #undef use_legacy_coding int use_legacy_coding( int level) { return(*(int *)0); } /* ./base/lib_dft_fgbg.c */ #undef use_default_colors_sp int use_default_colors_sp( SCREEN *sp) { return(*(int *)0); } #undef use_default_colors int use_default_colors(void) { return(*(int *)0); } #undef assume_default_colors_sp int assume_default_colors_sp( SCREEN *sp, int fg, int bg) { return(*(int *)0); } #undef assume_default_colors int assume_default_colors( int fg, int bg) { return(*(int *)0); } /* ./tinfo/lib_print.c */ #undef mcprint_sp int mcprint_sp( SCREEN *sp, char *data, int len) { return(*(int *)0); } #undef mcprint int mcprint( char *data, int len) { return(*(int *)0); } /* ./base/resizeterm.c */ #undef is_term_resized_sp NCURSES_BOOL is_term_resized_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(NCURSES_BOOL *)0); } #undef is_term_resized NCURSES_BOOL is_term_resized( int ToLines, int ToCols) { return(*(NCURSES_BOOL *)0); } #undef resize_term_sp int resize_term_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(int *)0); } #undef resize_term int resize_term( int ToLines, int ToCols) { return(*(int *)0); } #undef resizeterm_sp int resizeterm_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(int *)0); } #undef resizeterm int resizeterm( int ToLines, int ToCols) { return(*(int *)0); } /* ./trace/trace_xnames.c */ #undef _nc_trace_xnames void _nc_trace_xnames( TERMTYPE *tp) { /* void */ } /* ./tinfo/use_screen.c */ #undef use_screen int use_screen( SCREEN *screen, NCURSES_SCREEN_CB func, void *data) { return(*(int *)0); } /* ./base/use_window.c */ #undef use_window int use_window( WINDOW *win, NCURSES_WINDOW_CB func, void *data) { return(*(int *)0); } /* ./base/wresize.c */ #undef wresize int wresize( WINDOW *win, int ToLines, int ToCols) { return(*(int *)0); } /* ./tinfo/access.c */ #undef _nc_rootname char *_nc_rootname( char *path) { return(*(char **)0); } #undef _nc_is_abs_path NCURSES_BOOL _nc_is_abs_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_pathlast unsigned _nc_pathlast( const char *path) { return(*(unsigned *)0); } #undef _nc_basename char *_nc_basename( char *path) { return(*(char **)0); } #undef _nc_access int _nc_access( const char *path, int mode) { return(*(int *)0); } #undef _nc_is_dir_path NCURSES_BOOL _nc_is_dir_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_is_file_path NCURSES_BOOL _nc_is_file_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_env_access int _nc_env_access(void) { return(*(int *)0); } /* ./tinfo/add_tries.c */ #undef _nc_add_to_try int _nc_add_to_try( TRIES **tree, const char *str, unsigned code) { return(*(int *)0); } /* ./tinfo/alloc_ttype.c */ #undef _nc_align_termtype void _nc_align_termtype( TERMTYPE *to, TERMTYPE *from) { /* void */ } #undef _nc_copy_termtype void _nc_copy_termtype( TERMTYPE *dst, const TERMTYPE *src) { /* void */ } /* ./codes.c */ #undef _nc_boolcodes const char *const *_nc_boolcodes(void) { return(*(const char **)0); } #undef _nc_numcodes const char *const *_nc_numcodes(void) { return(*(const char **)0); } #undef _nc_strcodes const char *const *_nc_strcodes(void) { return(*(const char **)0); } /* ./comp_captab.c */ #undef _nc_get_table const struct name_table_entry *_nc_get_table( NCURSES_BOOL termcap) { return(*(const struct name_table_entry **)0); } #undef _nc_get_hash_table const HashValue *_nc_get_hash_table( NCURSES_BOOL termcap) { return(*(const HashValue **)0); } #undef _nc_get_alias_table const struct alias *_nc_get_alias_table( NCURSES_BOOL termcap) { return(*(const struct alias **)0); } #undef _nc_get_hash_info const HashData *_nc_get_hash_info( NCURSES_BOOL termcap) { return(*(const HashData **)0); } /* ./tinfo/comp_error.c */ #undef _nc_suppress_warnings NCURSES_BOOL _nc_suppress_warnings; #undef _nc_curr_line int _nc_curr_line; #undef _nc_curr_col int _nc_curr_col; #undef _nc_get_source const char *_nc_get_source(void) { return(*(const char **)0); } #undef _nc_set_source void _nc_set_source( const char *const name) { /* void */ } #undef _nc_set_type void _nc_set_type( const char *const name) { /* void */ } #undef _nc_get_type void _nc_get_type( char *name) { /* void */ } #undef _nc_warning void _nc_warning( const char *const fmt, ...) { /* void */ } #undef _nc_err_abort void _nc_err_abort( const char *const fmt, ...) { /* void */ } #undef _nc_syserr_abort void _nc_syserr_abort( const char *const fmt, ...) { /* void */ } /* ./tinfo/comp_hash.c */ #undef _nc_find_entry struct name_table_entry const *_nc_find_entry( const char *string, const HashValue *hash_table) { return(*(struct name_table_entry const **)0); } #undef _nc_find_type_entry struct name_table_entry const *_nc_find_type_entry( const char *string, int type, NCURSES_BOOL termcap) { return(*(struct name_table_entry const **)0); } /* ./tinfo/db_iterator.c */ #undef _nc_tic_dir const char *_nc_tic_dir( const char *path) { return(*(const char **)0); } #undef _nc_keep_tic_dir void _nc_keep_tic_dir( const char *path) { /* void */ } #undef _nc_last_db void _nc_last_db(void) { /* void */ } #undef _nc_next_db const char *_nc_next_db( DBDIRS *state, int *offset) { return(*(const char **)0); } #undef _nc_first_db void _nc_first_db( DBDIRS *state, int *offset) { /* void */ } /* ./tinfo/doalloc.c */ #undef _nc_doalloc void *_nc_doalloc( void *oldp, size_t amount) { return(*(void **)0); } /* ./tinfo/entries.c */ #undef _nc_head ENTRY *_nc_head; #undef _nc_tail ENTRY *_nc_tail; #undef _nc_free_entry void _nc_free_entry( ENTRY *headp, TERMTYPE *tterm) { /* void */ } #undef _nc_free_entries void _nc_free_entries( ENTRY *headp) { /* void */ } #undef _nc_delink_entry ENTRY *_nc_delink_entry( ENTRY *headp, TERMTYPE *tterm) { return(*(ENTRY **)0); } #undef _nc_leaks_tinfo void _nc_leaks_tinfo(void) { /* void */ } /* ./fallback.c */ #undef _nc_fallback const TERMTYPE *_nc_fallback( const char *name) { return(*(const TERMTYPE **)0); } /* ./tinfo/free_ttype.c */ #undef _nc_free_termtype void _nc_free_termtype( TERMTYPE *ptr) { /* void */ } #undef _nc_user_definable NCURSES_BOOL _nc_user_definable; #undef use_extended_names int use_extended_names( NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/getenv_num.c */ #undef _nc_getenv_num int _nc_getenv_num( const char *name) { return(*(int *)0); } #undef _nc_setenv_num void _nc_setenv_num( const char *name, int value) { /* void */ } /* ./tinfo/home_terminfo.c */ #undef _nc_home_terminfo char *_nc_home_terminfo(void) { return(*(char **)0); } /* ./tinfo/init_keytry.c */ #undef _nc_init_keytry void _nc_init_keytry( SCREEN *sp) { /* void */ } /* ./tinfo/lib_acs.c */ #undef _nc_acs_map chtype *_nc_acs_map(void) { return(*(chtype **)0); } #undef _nc_init_acs_sp void _nc_init_acs_sp( SCREEN *sp) { /* void */ } #undef _nc_init_acs void _nc_init_acs(void) { /* void */ } /* ./tinfo/lib_baudrate.c */ struct speed { short s; int sp; }; #undef _nc_baudrate int _nc_baudrate( int OSpeed) { return(*(int *)0); } #undef _nc_ospeed int _nc_ospeed( int BaudRate) { return(*(int *)0); } #undef baudrate_sp int baudrate_sp( SCREEN *sp) { return(*(int *)0); } #undef baudrate int baudrate(void) { return(*(int *)0); } /* ./tinfo/lib_cur_term.c */ #undef _nc_get_cur_term_sp TERMINAL *_nc_get_cur_term_sp( SCREEN *sp) { return(*(TERMINAL **)0); } #undef _nc_get_cur_term TERMINAL *_nc_get_cur_term(void) { return(*(TERMINAL **)0); } #undef _nc_cur_term TERMINAL *_nc_cur_term(void) { return(*(TERMINAL **)0); } #undef set_curterm_sp TERMINAL *set_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(TERMINAL **)0); } #undef set_curterm TERMINAL *set_curterm( TERMINAL *termp) { return(*(TERMINAL **)0); } #undef del_curterm_sp int del_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(int *)0); } #undef del_curterm int del_curterm( TERMINAL *termp) { return(*(int *)0); } /* ./tinfo/lib_data.c */ #undef _nc_stdscr WINDOW *_nc_stdscr(void) { return(*(WINDOW **)0); } #undef _nc_curscr WINDOW *_nc_curscr(void) { return(*(WINDOW **)0); } #undef _nc_newscr WINDOW *_nc_newscr(void) { return(*(WINDOW **)0); } #undef _nc_screen_chain SCREEN *_nc_screen_chain; #undef SP SCREEN *SP; #undef _nc_globals NCURSES_GLOBALS _nc_globals; #undef _nc_prescreen NCURSES_PRESCREEN _nc_prescreen; #undef _nc_screen_of SCREEN *_nc_screen_of( WINDOW *win) { return(*(SCREEN **)0); } #undef _nc_init_pthreads void _nc_init_pthreads(void) { /* void */ } #undef _nc_mutex_init void _nc_mutex_init( pthread_mutex_t *obj) { /* void */ } #undef _nc_mutex_lock int _nc_mutex_lock( pthread_mutex_t *obj) { return(*(int *)0); } #undef _nc_mutex_trylock int _nc_mutex_trylock( pthread_mutex_t *obj) { return(*(int *)0); } #undef _nc_mutex_unlock int _nc_mutex_unlock( pthread_mutex_t *obj) { return(*(int *)0); } /* ./tinfo/lib_has_cap.c */ #undef has_ic_sp NCURSES_BOOL has_ic_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_ic NCURSES_BOOL has_ic(void) { return(*(NCURSES_BOOL *)0); } #undef has_il_sp NCURSES_BOOL has_il_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_il NCURSES_BOOL has_il(void) { return(*(NCURSES_BOOL *)0); } /* ./tinfo/lib_kernel.c */ #undef erasechar_sp char erasechar_sp( SCREEN *sp) { return(*(char *)0); } #undef erasechar char erasechar(void) { return(*(char *)0); } #undef killchar_sp char killchar_sp( SCREEN *sp) { return(*(char *)0); } #undef killchar char killchar(void) { return(*(char *)0); } #undef flushinp_sp int flushinp_sp( SCREEN *sp) { return(*(int *)0); } #undef flushinp int flushinp(void) { return(*(int *)0); } /* ./lib_keyname.c */ struct kn { short offset; int code; }; #undef keyname_sp const char *keyname_sp( SCREEN *sp, int c) { return(*(const char **)0); } #undef keyname const char *keyname( int c) { return(*(const char **)0); } /* ./tinfo/lib_longname.c */ #undef longname_sp char *longname_sp( SCREEN *sp) { return(*(char **)0); } #undef longname char *longname(void) { return(*(char **)0); } /* ./tinfo/lib_napms.c */ #undef napms_sp int napms_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef napms int napms( int ms) { return(*(int *)0); } /* ./tinfo/lib_options.c */ #undef idlok int idlok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef idcok void idcok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } #undef halfdelay_sp int halfdelay_sp( SCREEN *sp, int t) { return(*(int *)0); } #undef halfdelay int halfdelay( int t) { return(*(int *)0); } #undef nodelay int nodelay( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef notimeout int notimeout( WINDOW *win, NCURSES_BOOL f) { return(*(int *)0); } #undef wtimeout void wtimeout( WINDOW *win, int delay) { /* void */ } #undef keypad int keypad( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef meta int meta( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef curs_set_sp int curs_set_sp( SCREEN *sp, int vis) { return(*(int *)0); } #undef curs_set int curs_set( int vis) { return(*(int *)0); } #undef typeahead_sp int typeahead_sp( SCREEN *sp, int fd) { return(*(int *)0); } #undef typeahead int typeahead( int fd) { return(*(int *)0); } #undef has_key_sp int has_key_sp( SCREEN *sp, int keycode) { return(*(int *)0); } #undef has_key int has_key( int keycode) { return(*(int *)0); } #undef _nc_putp_flush_sp int _nc_putp_flush_sp( SCREEN *sp, const char *name, const char *value) { return(*(int *)0); } #undef _nc_keypad int _nc_keypad( SCREEN *sp, int flag) { return(*(int *)0); } /* ./tinfo/lib_raw.c */ #undef raw_sp int raw_sp( SCREEN *sp) { return(*(int *)0); } #undef raw int raw(void) { return(*(int *)0); } #undef cbreak_sp int cbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef cbreak int cbreak(void) { return(*(int *)0); } #undef qiflush_sp void qiflush_sp( SCREEN *sp) { /* void */ } #undef qiflush void qiflush(void) { /* void */ } #undef noraw_sp int noraw_sp( SCREEN *sp) { return(*(int *)0); } #undef noraw int noraw(void) { return(*(int *)0); } #undef nocbreak_sp int nocbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef nocbreak int nocbreak(void) { return(*(int *)0); } #undef noqiflush_sp void noqiflush_sp( SCREEN *sp) { /* void */ } #undef noqiflush void noqiflush(void) { /* void */ } #undef intrflush_sp int intrflush_sp( SCREEN *sp, WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef intrflush int intrflush( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/lib_setup.c */ #undef _nc_ttytype char *_nc_ttytype(void) { return(*(char **)0); } #undef _nc_ptr_Lines int *_nc_ptr_Lines( SCREEN *sp) { return(*(int **)0); } #undef _nc_LINES int _nc_LINES(void) { return(*(int *)0); } #undef _nc_ptr_Cols int *_nc_ptr_Cols( SCREEN *sp) { return(*(int **)0); } #undef _nc_COLS int _nc_COLS(void) { return(*(int *)0); } #undef _nc_ptr_Tabsize int *_nc_ptr_Tabsize( SCREEN *sp) { return(*(int **)0); } #undef _nc_TABSIZE int _nc_TABSIZE(void) { return(*(int *)0); } #undef set_tabsize_sp int set_tabsize_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_tabsize int set_tabsize( int value) { return(*(int *)0); } #undef _nc_handle_sigwinch int _nc_handle_sigwinch( SCREEN *sp) { return(*(int *)0); } #undef use_env_sp void use_env_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_tioctl_sp void use_tioctl_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_env void use_env( NCURSES_BOOL f) { /* void */ } #undef use_tioctl void use_tioctl( NCURSES_BOOL f) { /* void */ } #undef _nc_get_screensize void _nc_get_screensize( SCREEN *sp, int *linep, int *colp) { /* void */ } #undef _nc_update_screensize void _nc_update_screensize( SCREEN *sp) { /* void */ } #undef _nc_setup_tinfo int _nc_setup_tinfo( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } #undef _nc_tinfo_cmdch void _nc_tinfo_cmdch( TERMINAL *termp, int proto) { /* void */ } #undef _nc_get_locale char *_nc_get_locale(void) { return(*(char **)0); } #undef _nc_unicode_locale int _nc_unicode_locale(void) { return(*(int *)0); } #undef _nc_locale_breaks_acs int _nc_locale_breaks_acs( TERMINAL *termp) { return(*(int *)0); } #undef _nc_setupterm int _nc_setupterm( const char *tname, int Filedes, int *errret, int reuse) { return(*(int *)0); } #undef new_prescr SCREEN *new_prescr(void) { return(*(SCREEN **)0); } #undef setupterm int setupterm( const char *tname, int Filedes, int *errret) { return(*(int *)0); } /* ./tinfo/lib_termcap.c */ #undef UP char *UP; #undef BC char *BC; #undef tgetent_sp int tgetent_sp( SCREEN *sp, char *bufp, const char *name) { return(*(int *)0); } #undef tgetent int tgetent( char *bufp, const char *name) { return(*(int *)0); } #undef tgetflag_sp int tgetflag_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetflag int tgetflag( const char *id) { return(*(int *)0); } #undef tgetnum_sp int tgetnum_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetnum int tgetnum( const char *id) { return(*(int *)0); } #undef tgetstr_sp char *tgetstr_sp( SCREEN *sp, const char *id, char **area) { return(*(char **)0); } #undef tgetstr char *tgetstr( const char *id, char **area) { return(*(char **)0); } /* ./tinfo/lib_termname.c */ #undef termname_sp char *termname_sp( SCREEN *sp) { return(*(char **)0); } #undef termname char *termname(void) { return(*(char **)0); } /* ./tinfo/lib_tgoto.c */ #undef tgoto char *tgoto( const char *string, int x, int y) { return(*(char **)0); } /* ./tinfo/lib_ti.c */ #undef tigetflag_sp int tigetflag_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetflag int tigetflag( const char *str) { return(*(int *)0); } #undef tigetnum_sp int tigetnum_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetnum int tigetnum( const char *str) { return(*(int *)0); } #undef tigetstr_sp char *tigetstr_sp( SCREEN *sp, const char *str) { return(*(char **)0); } #undef tigetstr char *tigetstr( const char *str) { return(*(char **)0); } /* ./tinfo/lib_tparm.c */ #undef _nc_tparm_err int _nc_tparm_err; #undef _nc_tparm_analyze int _nc_tparm_analyze( const char *string, char *p_is_s[9], int *_nc_popcount) { return(*(int *)0); } #undef tparm char *tparm( const char *string, ...) { return(*(char **)0); } #undef tiparm char *tiparm( const char *string, ...) { return(*(char **)0); } /* ./tinfo/lib_tputs.c */ #undef PC char PC; #undef ospeed short ospeed; #undef _nc_nulls_sent int _nc_nulls_sent; #undef _nc_set_no_padding void _nc_set_no_padding( SCREEN *sp) { /* void */ } #undef delay_output_sp int delay_output_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef delay_output int delay_output( int ms) { return(*(int *)0); } #undef _nc_flush_sp void _nc_flush_sp( SCREEN *sp) { /* void */ } #undef _nc_flush void _nc_flush(void) { /* void */ } #undef _nc_outch_sp int _nc_outch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_outch int _nc_outch( int ch) { return(*(int *)0); } #undef _nc_putchar_sp int _nc_putchar_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_putchar int _nc_putchar( int ch) { return(*(int *)0); } #undef putp_sp int putp_sp( SCREEN *sp, const char *string) { return(*(int *)0); } #undef putp int putp( const char *string) { return(*(int *)0); } #undef _nc_putp_sp int _nc_putp_sp( SCREEN *sp, const char *name, const char *string) { return(*(int *)0); } #undef _nc_putp int _nc_putp( const char *name, const char *string) { return(*(int *)0); } #undef tputs_sp int tputs_sp( SCREEN *sp, const char *string, int affcnt, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef _nc_outc_wrapper int _nc_outc_wrapper( SCREEN *sp, int c) { return(*(int *)0); } #undef tputs int tputs( const char *string, int affcnt, int (*outc)( int p1)) { return(*(int *)0); } /* ./trace/lib_trace.c */ #undef _nc_tracing unsigned _nc_tracing; #undef _nc__nc_tputs_trace const char *_nc__nc_tputs_trace(void) { return(*(const char **)0); } #undef _nc__nc_outchars long _nc__nc_outchars(void) { return(*(long *)0); } #undef _nc_set_tputs_trace void _nc_set_tputs_trace( const char *s) { /* void */ } #undef _nc_count_outchars void _nc_count_outchars( long increment) { /* void */ } #undef trace void trace( const unsigned int tracelevel) { /* void */ } #undef _tracef void _tracef( const char *fmt, ...) { /* void */ } #undef _nc_retrace_bool NCURSES_BOOL _nc_retrace_bool( int code) { return(*(NCURSES_BOOL *)0); } #undef _nc_retrace_char char _nc_retrace_char( int code) { return(*(char *)0); } #undef _nc_retrace_int int _nc_retrace_int( int code) { return(*(int *)0); } #undef _nc_retrace_unsigned unsigned _nc_retrace_unsigned( unsigned code) { return(*(unsigned *)0); } #undef _nc_retrace_ptr char *_nc_retrace_ptr( char *code) { return(*(char **)0); } #undef _nc_retrace_cptr const char *_nc_retrace_cptr( const char *code) { return(*(const char **)0); } #undef _nc_retrace_cvoid_ptr const void *_nc_retrace_cvoid_ptr( const void *code) { return(*(const void **)0); } #undef _nc_retrace_void_ptr void *_nc_retrace_void_ptr( void *code) { return(*(void **)0); } #undef _nc_retrace_sp SCREEN *_nc_retrace_sp( SCREEN *code) { return(*(SCREEN **)0); } #undef _nc_retrace_win WINDOW *_nc_retrace_win( WINDOW *code) { return(*(WINDOW **)0); } #undef _nc_use_tracef int _nc_use_tracef( unsigned mask) { return(*(int *)0); } #undef _nc_locked_tracef void _nc_locked_tracef( const char *fmt, ...) { /* void */ } /* ./trace/lib_traceatr.c */ #undef _traceattr2 char *_traceattr2( int bufnum, chtype newmode) { return(*(char **)0); } #undef _traceattr char *_traceattr( attr_t newmode) { return(*(char **)0); } #undef _nc_retrace_int_attr_t int _nc_retrace_int_attr_t( attr_t code) { return(*(int *)0); } #undef _nc_retrace_attr_t attr_t _nc_retrace_attr_t( attr_t code) { return(*(attr_t *)0); } #undef _nc_altcharset_name const char *_nc_altcharset_name( attr_t attr, chtype ch) { return(*(const char **)0); } #undef _tracechtype2 char *_tracechtype2( int bufnum, chtype ch) { return(*(char **)0); } #undef _tracechtype char *_tracechtype( chtype ch) { return(*(char **)0); } #undef _nc_retrace_chtype chtype _nc_retrace_chtype( chtype code) { return(*(chtype *)0); } /* ./trace/lib_tracebits.c */ #undef _nc_trace_ttymode char *_nc_trace_ttymode( struct termios *tty) { return(*(char **)0); } #undef _nc_tracebits char *_nc_tracebits(void) { return(*(char **)0); } /* ./trace/lib_tracechr.c */ #undef _nc_tracechar char *_nc_tracechar( SCREEN *sp, int ch) { return(*(char **)0); } #undef _tracechar char *_tracechar( int ch) { return(*(char **)0); } /* ./tinfo/lib_ttyflags.c */ #undef _nc_get_tty_mode_sp int _nc_get_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_get_tty_mode int _nc_get_tty_mode( struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode_sp int _nc_set_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode int _nc_set_tty_mode( struct termios *buf) { return(*(int *)0); } #undef def_shell_mode_sp int def_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_shell_mode int def_shell_mode(void) { return(*(int *)0); } #undef def_prog_mode_sp int def_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_prog_mode int def_prog_mode(void) { return(*(int *)0); } #undef reset_prog_mode_sp int reset_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_prog_mode int reset_prog_mode(void) { return(*(int *)0); } #undef reset_shell_mode_sp int reset_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_shell_mode int reset_shell_mode(void) { return(*(int *)0); } #undef savetty_sp int savetty_sp( SCREEN *sp) { return(*(int *)0); } #undef savetty int savetty(void) { return(*(int *)0); } #undef resetty_sp int resetty_sp( SCREEN *sp) { return(*(int *)0); } #undef resetty int resetty(void) { return(*(int *)0); } /* ./tty/lib_twait.c */ #undef _nc_timed_wait int _nc_timed_wait( SCREEN *sp, int mode, int milliseconds, int *timeleft) { return(*(int *)0); } /* ./tinfo/name_match.c */ #undef _nc_first_name char *_nc_first_name( const char *const sp) { return(*(char **)0); } #undef _nc_name_match int _nc_name_match( const char *const namelst, const char *const name, const char *const delim) { return(*(int *)0); } /* ./names.c */ #undef _nc_boolnames const char *const *_nc_boolnames(void) { return(*(const char **)0); } #undef _nc_boolfnames const char *const *_nc_boolfnames(void) { return(*(const char **)0); } #undef _nc_numnames const char *const *_nc_numnames(void) { return(*(const char **)0); } #undef _nc_numfnames const char *const *_nc_numfnames(void) { return(*(const char **)0); } #undef _nc_strnames const char *const *_nc_strnames(void) { return(*(const char **)0); } #undef _nc_strfnames const char *const *_nc_strfnames(void) { return(*(const char **)0); } /* ./tinfo/obsolete.c */ #undef _nc_set_buffer_sp void _nc_set_buffer_sp( SCREEN *sp, FILE *ofp, int buffered) { /* void */ } #undef _nc_set_buffer void _nc_set_buffer( FILE *ofp, int buffered) { /* void */ } /* ./tinfo/read_entry.c */ #undef _nc_init_termtype void _nc_init_termtype( TERMTYPE *const tp) { /* void */ } #undef _nc_read_termtype int _nc_read_termtype( TERMTYPE *ptr, char *buffer, int limit) { return(*(int *)0); } #undef _nc_read_file_entry int _nc_read_file_entry( const char *const filename, TERMTYPE *ptr) { return(*(int *)0); } #undef _nc_read_entry int _nc_read_entry( const char *const name, char *const filename, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/read_termcap.c */ #undef _nc_read_termcap_entry int _nc_read_termcap_entry( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/strings.c */ #undef _nc_str_init string_desc *_nc_str_init( string_desc *dst, char *src, size_t len) { return(*(string_desc **)0); } #undef _nc_str_null string_desc *_nc_str_null( string_desc *dst, size_t len) { return(*(string_desc **)0); } #undef _nc_str_copy string_desc *_nc_str_copy( string_desc *dst, string_desc *src) { return(*(string_desc **)0); } #undef _nc_safe_strcat NCURSES_BOOL _nc_safe_strcat( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_safe_strcpy NCURSES_BOOL _nc_safe_strcpy( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } /* ./trace/trace_buf.c */ #undef _nc_trace_buf char *_nc_trace_buf( int bufnum, size_t want) { return(*(char **)0); } #undef _nc_trace_bufcat char *_nc_trace_bufcat( int bufnum, const char *value) { return(*(char **)0); } /* ./trace/trace_tries.c */ #undef _nc_trace_tries void _nc_trace_tries( TRIES *tree) { /* void */ } /* ./base/tries.c */ #undef _nc_expand_try char *_nc_expand_try( TRIES *tree, unsigned code, int *count, size_t len) { return(*(char **)0); } #undef _nc_remove_key int _nc_remove_key( TRIES **tree, unsigned code) { return(*(int *)0); } #undef _nc_remove_string int _nc_remove_string( TRIES **tree, const char *string) { return(*(int *)0); } /* ./tinfo/trim_sgr0.c */ #undef _nc_trim_sgr0 char *_nc_trim_sgr0( TERMTYPE *tp) { return(*(char **)0); } /* ./unctrl.c */ #undef unctrl_sp const char *unctrl_sp( SCREEN *sp, chtype ch) { return(*(const char **)0); } #undef unctrl const char *unctrl( chtype ch) { return(*(const char **)0); } /* ./trace/visbuf.c */ #undef _nc_visbuf2 const char *_nc_visbuf2( int bufnum, const char *buf) { return(*(const char **)0); } #undef _nc_visbuf const char *_nc_visbuf( const char *buf) { return(*(const char **)0); } #undef _nc_visbufn const char *_nc_visbufn( const char *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf2 const char *_nc_viscbuf2( int bufnum, const chtype *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf const char *_nc_viscbuf( const chtype *buf, int len) { return(*(const char **)0); } /* ./tinfo/alloc_entry.c */ #undef _nc_init_entry void _nc_init_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_copy_entry ENTRY *_nc_copy_entry( ENTRY *oldp) { return(*(ENTRY **)0); } #undef _nc_save_str char *_nc_save_str( const char *const string) { return(*(char **)0); } #undef _nc_wrap_entry void _nc_wrap_entry( ENTRY *const ep, NCURSES_BOOL copy_strings) { /* void */ } #undef _nc_merge_entry void _nc_merge_entry( TERMTYPE *const to, TERMTYPE *const from) { /* void */ } /* ./tinfo/captoinfo.c */ #undef _nc_captoinfo char *_nc_captoinfo( const char *cap, const char *s, int const parameterized) { return(*(char **)0); } #undef _nc_infotocap char *_nc_infotocap( const char *cap, const char *str, int const parameterized) { return(*(char **)0); } /* ./tinfo/comp_expand.c */ #undef _nc_tic_expand char *_nc_tic_expand( const char *srcp, NCURSES_BOOL tic_format, int numbers) { return(*(char **)0); } /* ./tinfo/comp_parse.c */ #undef _nc_check_termtype2 void (*_nc_check_termtype2)( TERMTYPE *p1, NCURSES_BOOL p2); #undef _nc_check_termtype void (*_nc_check_termtype)( TERMTYPE *p1); #undef _nc_entry_match NCURSES_BOOL _nc_entry_match( char *n1, char *n2) { return(*(NCURSES_BOOL *)0); } #undef _nc_read_entry_source void _nc_read_entry_source( FILE *fp, char *buf, int literal, NCURSES_BOOL silent, NCURSES_BOOL (*hook)( ENTRY *p1)) { /* void */ } #undef _nc_resolve_uses2 int _nc_resolve_uses2( NCURSES_BOOL fullresolve, NCURSES_BOOL literal) { return(*(int *)0); } #undef _nc_resolve_uses int _nc_resolve_uses( NCURSES_BOOL fullresolve) { return(*(int *)0); } /* ./tinfo/comp_scan.c */ #undef _nc_syntax int _nc_syntax; #undef _nc_strict_bsd int _nc_strict_bsd; #undef _nc_curr_file_pos long _nc_curr_file_pos; #undef _nc_comment_start long _nc_comment_start; #undef _nc_comment_end long _nc_comment_end; #undef _nc_start_line long _nc_start_line; #undef _nc_curr_token struct token _nc_curr_token; #undef _nc_disable_period NCURSES_BOOL _nc_disable_period; #undef _nc_reset_input void _nc_reset_input( FILE *fp, char *buf) { /* void */ } #undef _nc_get_token int _nc_get_token( NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_trans_string int _nc_trans_string( char *ptr, char *last) { return(*(int *)0); } #undef _nc_push_token void _nc_push_token( int tokclass) { /* void */ } #undef _nc_panic_mode void _nc_panic_mode( char ch) { /* void */ } /* ./tinfo/parse_entry.c */ #undef _nc_parse_entry int _nc_parse_entry( struct entry *entryp, int literal, NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_capcmp int _nc_capcmp( const char *s, const char *t) { return(*(int *)0); } /* ./tinfo/write_entry.c */ #undef _nc_set_writedir void _nc_set_writedir( const char *dir) { /* void */ } #undef _nc_write_entry void _nc_write_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_tic_written int _nc_tic_written(void) { return(*(int *)0); } /* ./base/define_key.c */ #undef define_key_sp int define_key_sp( SCREEN *sp, const char *str, int keycode) { return(*(int *)0); } #undef define_key int define_key( const char *str, int keycode) { return(*(int *)0); } /* ./tinfo/hashed_db.c */ #undef _nc_hashed_db void _nc_hashed_db(void) { /* void */ } /* ./base/key_defined.c */ #undef key_defined_sp int key_defined_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef key_defined int key_defined( const char *str) { return(*(int *)0); } /* ./base/keybound.c */ #undef keybound_sp char *keybound_sp( SCREEN *sp, int code, int count) { return(*(char **)0); } #undef keybound char *keybound( int code, int count) { return(*(char **)0); } /* ./base/keyok.c */ #undef keyok_sp int keyok_sp( SCREEN *sp, int c, NCURSES_BOOL flag) { return(*(int *)0); } #undef keyok int keyok( int c, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/version.c */ #undef curses_version const char *curses_version(void) { return(*(const char **)0); } ncurses-6.0-20160213/ncurses/Makefile.in0000644000175100001440000002367312653153547016231 0ustar tomusers# $Id: Makefile.in,v 1.150 2016/01/30 15:31:51 tom Exp $ ############################################################################## # Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # # Makefile for ncurses source code. # # This makes the following: # programs # includes # libraries (normal/debug/profile/shared) # # The variable 'srcdir' refers to the source-distribution, and can be set with # the configure script by "--srcdir=DIR". # # The rules are organized to produce the libraries for the configured models, # and the programs with the configured default model. # turn off _all_ suffix rules; we'll generate our own .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile CF_MFLAGS = @cf_cv_makeflags@ @SET_MAKE@ x = @EXEEXT@ o = .@OBJEXT@ MODEL = @DFT_LWR_MODEL@ DESTDIR = @DESTDIR@ top_srcdir = @top_srcdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ datarootdir = @datarootdir@ datadir = @datadir@ includesubdir = @includesubdir@ INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir) PACKAGE = @PACKAGE@ LIBTOOL = @LIBTOOL@ LIBTOOL_OPTS = @LIBTOOL_OPTS@ @EXPORT_SYMS@ LIBTOOL_CLEAN = @LIB_CLEAN@ LIBTOOL_COMPILE = @LIB_COMPILE@ LIBTOOL_LINK = @LIB_LINK@ LIBTOOL_INSTALL = @LIB_INSTALL@ LIBTOOL_UNINSTALL = @LIB_UNINSTALL@ LT_UNDEF = @LT_UNDEF@ INSTALL = @INSTALL@ INSTALL_LIB = @INSTALL@ @INSTALL_LIB@ INSTALL_PROG = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ AR = @AR@ ARFLAGS = @ARFLAGS@ AWK = @AWK@ LD = @LD@ LN_S = @LN_S@ NM = @NM@ CTAGS = @CTAGS@ ETAGS = @ETAGS@ CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ INCDIR = $(srcdir)/../include CPPFLAGS = -DHAVE_CONFIG_H @CPPFLAGS@ CCFLAGS = $(CPPFLAGS) $(CFLAGS) BUILD_CPPFLAGS = -DHAVE_CONFIG_H -DUSE_BUILD_CC -I../ncurses -I$(srcdir) -I../include -I$(INCDIR) @BUILD_CPPFLAGS@ BUILD_CC = @BUILD_CC@ BUILD_CCFLAGS = @BUILD_CFLAGS@ BUILD_LDFLAGS = @BUILD_LDFLAGS@ BUILD_LIBS = @BUILD_LIBS@ # The executables built in this directory are used for generating source that # is compiled into the build, or are test-programs that are not installed. BUILD_EXEEXT = @BUILD_EXEEXT@ x = @EXEEXT@ CFLAGS_LIBTOOL = $(CCFLAGS) CFLAGS_NORMAL = $(CCFLAGS) CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) LINK = $(LIBTOOL) LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@ SHLIB_DIRS = -L../lib SHLIB_LIST = $(SHLIB_DIRS) @SHLIB_LIST@ TINFO_LIST = $(SHLIB_DIRS) @TINFO_LIST@ TICS_LIST = $(SHLIB_DIRS) @TICS_LIST@ RPATH_LIST = @RPATH_LIST@ RESULTING_SYMS = @RESULTING_SYMS@ VERSIONED_SYMS = @VERSIONED_SYMS@ MK_SHARED_LIB = @MK_SHARED_LIB@ NCURSES_MAJOR = @NCURSES_MAJOR@ NCURSES_MINOR = @NCURSES_MINOR@ REL_VERSION = @cf_cv_rel_version@ ABI_VERSION = @cf_cv_abi_version@ RANLIB = @LIB_PREP@ LIBRARIES = @Libs_To_Make@ LINT = @LINT@ LINT_OPTS = @LINT_OPTS@ LINT_LIBS = -lncurses @LIBS@ FALLBACK_LIST = @FALLBACK_LIST@ USE_BIG_STRINGS = @USE_BIG_STRINGS@ TERMINFO_CAPS = $(top_srcdir)/include/@TERMINFO_CAPS@ TERMINFO = @TERMINFO@ TERMINFO_SRC = @TERMINFO_SRC@ TIC_PATH = @TIC_PATH@ AUTO_SRC = \ ./codes.c \ ./comp_captab.c \ ./expanded.c \ ./fallback.c \ ./lib_gen.c \ ./lib_keyname.c \ ./link_test.c \ ./names.c \ ./unctrl.c \ init_keytry.h \ keys.list HEADER_DEPS = \ $(srcdir)/curses.priv.h \ ../include/ncurses_dll.h \ ../include/ncurses_cfg.h \ ../include/curses.h \ $(INCDIR)/nc_panel.h \ ../include/term.h \ $(INCDIR)/term_entry.h \ $(INCDIR)/nc_tparm.h \ $(INCDIR)/nc_alloc.h \ $(INCDIR)/nc_mingw.h TEST_DEPS = ../lib/@LIB_PREFIX@ncurses@DFT_DEP_SUFFIX@ TEST_ARGS = @LDFLAGS_STATIC@ @TEST_ARGS@ @LDFLAGS_SHARED@ TEST_LDFLAGS = @LD_MODEL@ $(TEST_ARGS) @LIBS@ @LOCAL_LDFLAGS@ @LDFLAGS@ TEST_PROGS = \ captoinfo$x \ hardscroll$x \ link_test$x \ hashmap$x \ lib_mvcur$x base = $(srcdir)/base serial = $(srcdir)/tty tinfo = $(srcdir)/tinfo trace = $(srcdir)/trace wide = $(srcdir)/widechar win32con = $(srcdir)/win32con ################################################################################ all \ libs :: $(AUTO_SRC) ../lib $(LIBRARIES) sources: $(AUTO_SRC) $(DESTDIR)$(bindir) \ $(DESTDIR)$(libdir) : mkdir -p $@ ../lib : ; mkdir $@ ./fallback.c : $(tinfo)/MKfallback.sh $(SHELL) -e $(tinfo)/MKfallback.sh $(TERMINFO) $(TERMINFO_SRC) $(TIC_PATH) $(FALLBACK_LIST) >$@ ./lib_gen.c : $(base)/MKlib_gen.sh ../include/curses.h $(SHELL) -e $(base)/MKlib_gen.sh "$(CPP) $(CPPFLAGS)" "$(AWK)" generated <../include/curses.h >$@ init_keytry.h: make_keys$(BUILD_EXEEXT) keys.list ./make_keys$(BUILD_EXEEXT) keys.list > $@ keys.list : $(tinfo)/MKkeys_list.sh AWK=$(AWK) $(SHELL) $(tinfo)/MKkeys_list.sh $(TERMINFO_CAPS) | LC_ALL=C sort >$@ make_keys$(BUILD_EXEEXT) : \ $(tinfo)/make_keys.c \ names.c $(BUILD_CC) -o $@ $(BUILD_CPPFLAGS) $(BUILD_CCFLAGS) $(tinfo)/make_keys.c $(BUILD_LDFLAGS) $(BUILD_LIBS) make_hash$(BUILD_EXEEXT) : \ $(tinfo)/make_hash.c \ ../include/hashsize.h $(BUILD_CC) -o $@ $(BUILD_CPPFLAGS) $(BUILD_CCFLAGS) $(tinfo)/make_hash.c $(BUILD_LDFLAGS) $(BUILD_LIBS) ./expanded.c : $(srcdir)/curses.priv.h $(serial)/MKexpanded.sh $(SHELL) -e $(serial)/MKexpanded.sh "$(CPP)" $(CPPFLAGS) > $@ ./comp_captab.c: \ make_hash$(BUILD_EXEEXT) \ ../include/hashsize.h \ $(tinfo)/MKcaptab.sh \ $(tinfo)/MKcaptab.awk $(SHELL) -e $(tinfo)/MKcaptab.sh $(AWK) $(USE_BIG_STRINGS) $(tinfo)/MKcaptab.awk $(srcdir)/../include/@TERMINFO_CAPS@ > $@ ./lib_keyname.c: keys.list $(base)/MKkeyname.awk $(AWK) -f $(base)/MKkeyname.awk bigstrings=$(USE_BIG_STRINGS) keys.list > $@ ./codes.c: $(tinfo)/MKcodes.awk $(AWK) -f $(tinfo)/MKcodes.awk bigstrings=$(USE_BIG_STRINGS) $(srcdir)/../include/@TERMINFO_CAPS@ >$@ ./names.c: $(tinfo)/MKnames.awk $(AWK) -f $(tinfo)/MKnames.awk bigstrings=$(USE_BIG_STRINGS) $(srcdir)/../include/@TERMINFO_CAPS@ >$@ ./unctrl.c: $(base)/MKunctrl.awk echo | $(AWK) -f $(base)/MKunctrl.awk bigstrings=$(USE_BIG_STRINGS) >$@ tags: $(CTAGS) *.[ch] */*.[ch] @MAKE_UPPER_TAGS@TAGS: @MAKE_UPPER_TAGS@ $(ETAGS) *.[ch] */*.[ch] mostlyclean :: -rm -f core tags TAGS *~ *.bak *.i *.ln *.atac -test -d trace || rm -f trace -rm -f $(TEST_PROGS) clean :: mostlyclean -rm -f $(AUTO_SRC) -rm -f make_keys$(BUILD_EXEEXT) -rm -f make_hash$(BUILD_EXEEXT) -rm -rf .libs *.dSYM *.map distclean :: clean -rm -f Makefile realclean :: distclean # These rules are used to allow "make -n" to work on a clean directory-tree ../include/hashsize.h \ ../include/parametrized.h \ ../include/term.h : cd ../include; $(MAKE) $(CF_MFLAGS) # These rules build test-programs for the modules that have test-drivers test_progs : $(TEST_PROGS) ./link_test.c : $(base)/MKlib_gen.sh ../include/curses.h $(SHELL) -e $(base)/MKlib_gen.sh "$(CPP) $(CPPFLAGS)" "$(AWK)" implemented <../include/curses.h >$@ captoinfo$x : $(tinfo)/captoinfo.c $(TEST_DEPS) @ECHO_LD@ $(LIBTOOL_LINK) -o $@ $(CFLAGS_DEFAULT) -DMAIN $(tinfo)/captoinfo.c $(TEST_LDFLAGS) hardscroll$x : $(serial)/hardscroll.c $(TEST_DEPS) @ECHO_LD@ $(LIBTOOL_LINK) -o $@ $(CFLAGS_DEFAULT) -DSCROLLDEBUG $(serial)/hardscroll.c $(TEST_LDFLAGS) hashmap$x : $(serial)/hashmap.c $(serial)/hardscroll.c $(TEST_DEPS) @ECHO_LD@ $(LIBTOOL_LINK) -o $@ $(CFLAGS_DEFAULT) -DHASHDEBUG $(serial)/hashmap.c $(serial)/hardscroll.c $(TEST_LDFLAGS) lib_mvcur$x : $(serial)/lib_mvcur.c $(TEST_DEPS) \ ../@DFT_OBJ_SUBDIR@/dump_entry$o @ECHO_LD@ $(LIBTOOL_LINK) -o $@ $(CFLAGS_DEFAULT) -DNCURSES_TEST -I$(serial)/../../progs $(serial)/lib_mvcur.c ../@DFT_OBJ_SUBDIR@/dump_entry$o $(TEST_LDFLAGS) link_test$x : ./link_test.c $(TEST_DEPS) \ ../@DFT_OBJ_SUBDIR@/link_test$o @ECHO_LD@ $(CC) -o $@ $(CFLAGS_DEFAULT) ../@DFT_OBJ_SUBDIR@/link_test$o $(TEST_LDFLAGS) ../@DFT_OBJ_SUBDIR@/dump_entry$o: cd ../progs && $(MAKE) ../@DFT_OBJ_SUBDIR@/dump_entry$o ############################################################################### # The remainder of this file is automatically generated during configuration ############################################################################### ncurses-6.0-20160213/ncurses/win32con/0000755000175100001440000000000012474431557015614 5ustar tomusersncurses-6.0-20160213/ncurses/win32con/win_driver.c0000644000175100001440000014446612474431557020147 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer * * and: Thomas E. Dickey * ****************************************************************************/ /* * TODO - GetMousePos(POINT * result) from ntconio.c * TODO - implement nodelay * TODO - improve screen-repainting performance, using implied wraparound to reduce write's * TODO - make it optional whether screen is restored or not when non-buffered */ #include #ifdef __MINGW32__ #include #else #include #include #endif #include #define PSAPI_VERSION 2 #include #define CUR my_term.type. MODULE_ID("$Id: win_driver.c,v 1.55 2015/02/28 21:30:23 tom Exp $") #ifndef __GNUC__ # error We need GCC to compile for MinGW #endif #define WINMAGIC NCDRV_MAGIC(NCDRV_WINCONSOLE) #define EXP_OPTIMIZE 0 #define array_length(a) (sizeof(a)/sizeof(a[0])) static bool InitConsole(void); static bool okConsoleHandle(TERMINAL_CONTROL_BLOCK *); #define AssertTCB() assert(TCB != 0 && (TCB->magic == WINMAGIC)) #define SetSP() assert(TCB->csp != 0); sp = TCB->csp; (void) sp #define GenMap(vKey,key) MAKELONG(key, vKey) #define AdjustY() (CON.buffered ? 0 : (int) CON.SBI.srWindow.Top) #if USE_WIDEC_SUPPORT #define write_screen WriteConsoleOutputW #define read_screen ReadConsoleOutputW #else #define write_screen WriteConsoleOutput #define read_screen ReadConsoleOutput #endif static const LONG keylist[] = { GenMap(VK_PRIOR, KEY_PPAGE), GenMap(VK_NEXT, KEY_NPAGE), GenMap(VK_END, KEY_END), GenMap(VK_HOME, KEY_HOME), GenMap(VK_LEFT, KEY_LEFT), GenMap(VK_UP, KEY_UP), GenMap(VK_RIGHT, KEY_RIGHT), GenMap(VK_DOWN, KEY_DOWN), GenMap(VK_DELETE, KEY_DC), GenMap(VK_INSERT, KEY_IC) }; static const LONG ansi_keys[] = { GenMap(VK_PRIOR, 'I'), GenMap(VK_NEXT, 'Q'), GenMap(VK_END, 'O'), GenMap(VK_HOME, 'H'), GenMap(VK_LEFT, 'K'), GenMap(VK_UP, 'H'), GenMap(VK_RIGHT, 'M'), GenMap(VK_DOWN, 'P'), GenMap(VK_DELETE, 'S'), GenMap(VK_INSERT, 'R') }; #define N_INI ((int)array_length(keylist)) #define FKEYS 24 #define MAPSIZE (FKEYS + N_INI) #define NUMPAIRS 64 /* A process can only have a single console, so it's safe to maintain all the information about it in a single static structure. */ static struct { BOOL initialized; BOOL buffered; BOOL window_only; BOOL progMode; BOOL isMinTTY; BOOL isTermInfoConsole; HANDLE out; HANDLE inp; HANDLE hdl; HANDLE lastOut; int numButtons; DWORD ansi_map[MAPSIZE]; DWORD map[MAPSIZE]; DWORD rmap[MAPSIZE]; WORD pairs[NUMPAIRS]; COORD origin; CHAR_INFO *save_screen; COORD save_size; SMALL_RECT save_region; CONSOLE_SCREEN_BUFFER_INFO SBI; CONSOLE_SCREEN_BUFFER_INFO save_SBI; CONSOLE_CURSOR_INFO save_CI; } CON; static BOOL console_initialized = FALSE; static WORD MapColor(bool fore, int color) { static const int _cmap[] = {0, 4, 2, 6, 1, 5, 3, 7}; int a; if (color < 0 || color > 7) a = fore ? 7 : 0; else a = _cmap[color]; if (!fore) a = a << 4; return (WORD) a; } #define RevAttr(attr) \ (WORD) (((attr) & 0xff00) | \ ((((attr) & 0x07) << 4) | \ (((attr) & 0x70) >> 4))) static WORD MapAttr(WORD res, attr_t ch) { if (ch & A_COLOR) { int p; p = PairNumber(ch); if (p > 0 && p < NUMPAIRS) { WORD a; a = CON.pairs[p]; res = (WORD) ((res & 0xff00) | a); } } if (ch & A_REVERSE) { res = RevAttr(res); } if (ch & A_STANDOUT) { res = RevAttr(res) | BACKGROUND_INTENSITY; } if (ch & A_BOLD) res |= FOREGROUND_INTENSITY; if (ch & A_DIM) res |= BACKGROUND_INTENSITY; return res; } #if 0 /* def TRACE */ static void dump_screen(const char *fn, int ln) { int max_cells = (CON.SBI.dwSize.Y * (1 + CON.SBI.dwSize.X)) + 1; char output[max_cells]; CHAR_INFO save_screen[max_cells]; COORD save_size; SMALL_RECT save_region; COORD bufferCoord; T(("dump_screen %s@%d", fn, ln)); save_region.Top = CON.SBI.srWindow.Top; save_region.Left = CON.SBI.srWindow.Left; save_region.Bottom = CON.SBI.srWindow.Bottom; save_region.Right = CON.SBI.srWindow.Right; save_size.X = (SHORT) (save_region.Right - save_region.Left + 1); save_size.Y = (SHORT) (save_region.Bottom - save_region.Top + 1); bufferCoord.X = bufferCoord.Y = 0; if (read_screen(CON.hdl, save_screen, save_size, bufferCoord, &save_region)) { int i, j; int ij = 0; int k = 0; for (i = save_region.Top; i <= save_region.Bottom; ++i) { for (j = save_region.Left; j <= save_region.Right; ++j) { output[k++] = save_screen[ij++].Char.AsciiChar; } output[k++] = '\n'; } output[k] = 0; T(("DUMP: %d,%d - %d,%d", save_region.Top, save_region.Left, save_region.Bottom, save_region.Right)); T(("%s", output)); } } #else #define dump_screen(fn,ln) /* nothing */ #endif #if USE_WIDEC_SUPPORT /* * TODO: support surrogate pairs * TODO: support combining characters * TODO: support acsc * TODO: _nc_wacs should be part of sp. */ static BOOL con_write16(TERMINAL_CONTROL_BLOCK * TCB, int y, int x, cchar_t *str, int limit) { int actual = 0; CHAR_INFO ci[limit]; COORD loc, siz; SMALL_RECT rec; int i; cchar_t ch; SCREEN *sp; AssertTCB(); SetSP(); for (i = actual = 0; i < limit; i++) { ch = str[i]; if (isWidecExt(ch)) continue; ci[actual].Char.UnicodeChar = CharOf(ch); ci[actual].Attributes = MapAttr(CON.SBI.wAttributes, AttrOf(ch)); if (AttrOf(ch) & A_ALTCHARSET) { if (_nc_wacs) { int which = CharOf(ch); if (which > 0 && which < ACS_LEN && CharOf(_nc_wacs[which]) != 0) { ci[actual].Char.UnicodeChar = CharOf(_nc_wacs[which]); } else { ci[actual].Char.UnicodeChar = ' '; } } } ++actual; } loc.X = (SHORT) 0; loc.Y = (SHORT) 0; siz.X = (SHORT) actual; siz.Y = 1; rec.Left = (SHORT) x; rec.Top = (SHORT) (y + AdjustY()); rec.Right = (SHORT) (x + limit - 1); rec.Bottom = rec.Top; return write_screen(CON.hdl, ci, siz, loc, &rec); } #define con_write(tcb, y, x, str, n) con_write16(tcb, y, x, str, n) #else static BOOL con_write8(TERMINAL_CONTROL_BLOCK * TCB, int y, int x, chtype *str, int n) { CHAR_INFO ci[n]; COORD loc, siz; SMALL_RECT rec; int i; chtype ch; SCREEN *sp; AssertTCB(); SetSP(); for (i = 0; i < n; i++) { ch = str[i]; ci[i].Char.AsciiChar = ChCharOf(ch); ci[i].Attributes = MapAttr(CON.SBI.wAttributes, ChAttrOf(ch)); if (ChAttrOf(ch) & A_ALTCHARSET) { if (sp->_acs_map) ci[i].Char.AsciiChar = ChCharOf(NCURSES_SP_NAME(_nc_acs_char) (sp, ChCharOf(ch))); } } loc.X = (short) 0; loc.Y = (short) 0; siz.X = (short) n; siz.Y = 1; rec.Left = (short) x; rec.Top = (short) y; rec.Right = (short) (x + n - 1); rec.Bottom = rec.Top; return write_screen(CON.hdl, ci, siz, loc, &rec); } #define con_write(tcb, y, x, str, n) con_write8(tcb, y, x, str, n) #endif #if EXP_OPTIMIZE /* * Comparing new/current screens, determine the last column-index for a change * beginning on the given row,col position. Unlike a serial terminal, there is * no cost for "moving" the "cursor" on the line as we update it. */ static int find_end_of_change(SCREEN *sp, int row, int col) { int result = col; struct ldat *curdat = CurScreen(sp)->_line + row; struct ldat *newdat = NewScreen(sp)->_line + row; while (col <= newdat->lastchar) { #if USE_WIDEC_SUPPORT if (isWidecExt(curdat->text[col]) || isWidecExt(newdat->text[col])) { result = col; } else if (memcmp(&curdat->text[col], &newdat->text[col], sizeof(curdat->text[0]))) { result = col; } else { break; } #else if (curdat->text[col] != newdat->text[col]) { result = col; } else { break; } #endif ++col; } return result; } /* * Given a row,col position at the end of a change-chunk, look for the * beginning of the next change-chunk. */ static int find_next_change(SCREEN *sp, int row, int col) { struct ldat *curdat = CurScreen(sp)->_line + row; struct ldat *newdat = NewScreen(sp)->_line + row; int result = newdat->lastchar + 1; while (++col <= newdat->lastchar) { #if USE_WIDEC_SUPPORT if (isWidecExt(curdat->text[col]) != isWidecExt(newdat->text[col])) { result = col; break; } else if (memcmp(&curdat->text[col], &newdat->text[col], sizeof(curdat->text[0]))) { result = col; break; } #else if (curdat->text[col] != newdat->text[col]) { result = col; break; } #endif } return result; } #define EndChange(first) \ find_end_of_change(sp, y, first) #define NextChange(last) \ find_next_change(sp, y, last) #endif /* EXP_OPTIMIZE */ #define MARK_NOCHANGE(win,row) \ win->_line[row].firstchar = _NOCHANGE; \ win->_line[row].lastchar = _NOCHANGE static void selectActiveHandle(void) { if (CON.lastOut != CON.hdl) { CON.lastOut = CON.hdl; SetConsoleActiveScreenBuffer(CON.lastOut); } } static bool restore_original_screen(void) { COORD bufferCoord; bool result = FALSE; SMALL_RECT save_region = CON.save_region; T(("... restoring %s", CON.window_only ? "window" : "entire buffer")); bufferCoord.X = (SHORT) (CON.window_only ? CON.SBI.srWindow.Left : 0); bufferCoord.Y = (SHORT) (CON.window_only ? CON.SBI.srWindow.Top : 0); if (write_screen(CON.hdl, CON.save_screen, CON.save_size, bufferCoord, &save_region)) { result = TRUE; mvcur(-1, -1, LINES - 2, 0); T(("... restore original screen contents ok %dx%d (%d,%d - %d,%d)", CON.save_size.Y, CON.save_size.X, save_region.Top, save_region.Left, save_region.Bottom, save_region.Right)); } else { T(("... restore original screen contents err")); } return result; } static const char * wcon_name(TERMINAL_CONTROL_BLOCK * TCB) { (void) TCB; return "win32console"; } static int wcon_doupdate(TERMINAL_CONTROL_BLOCK * TCB) { int result = ERR; int y, nonempty, n, x0, x1, Width, Height; SCREEN *sp; T((T_CALLED("win32con::wcon_doupdate(%p)"), TCB)); if (okConsoleHandle(TCB)) { SetSP(); Width = screen_columns(sp); Height = screen_lines(sp); nonempty = min(Height, NewScreen(sp)->_maxy + 1); T(("... %dx%d clear cur:%d new:%d", Height, Width, CurScreen(sp)->_clear, NewScreen(sp)->_clear)); if (SP_PARM->_endwin) { T(("coming back from shell mode")); NCURSES_SP_NAME(reset_prog_mode) (NCURSES_SP_ARG); NCURSES_SP_NAME(_nc_mvcur_resume) (NCURSES_SP_ARG); NCURSES_SP_NAME(_nc_screen_resume) (NCURSES_SP_ARG); SP_PARM->_mouse_resume(SP_PARM); SP_PARM->_endwin = FALSE; } if ((CurScreen(sp)->_clear || NewScreen(sp)->_clear)) { int x; #if USE_WIDEC_SUPPORT cchar_t empty[Width]; wchar_t blank[2] = { L' ', L'\0' }; for (x = 0; x < Width; x++) setcchar(&empty[x], blank, 0, 0, 0); #else chtype empty[Width]; for (x = 0; x < Width; x++) empty[x] = ' '; #endif for (y = 0; y < nonempty; y++) { con_write(TCB, y, 0, empty, Width); memcpy(empty, CurScreen(sp)->_line[y].text, (size_t) Width * sizeof(empty[0])); } CurScreen(sp)->_clear = FALSE; NewScreen(sp)->_clear = FALSE; touchwin(NewScreen(sp)); T(("... cleared %dx%d lines @%d of screen", nonempty, Width, AdjustY())); } for (y = 0; y < nonempty; y++) { x0 = NewScreen(sp)->_line[y].firstchar; if (x0 != _NOCHANGE) { #if EXP_OPTIMIZE int x2; int limit = NewScreen(sp)->_line[y].lastchar; while ((x1 = EndChange(x0)) <= limit) { while ((x2 = NextChange(x1)) <= limit && x2 <= (x1 + 2)) { x1 = x2; } n = x1 - x0 + 1; memcpy(&CurScreen(sp)->_line[y].text[x0], &NewScreen(sp)->_line[y].text[x0], n * sizeof(CurScreen(sp)->_line[y].text[x0])); con_write(TCB, y, x0, &CurScreen(sp)->_line[y].text[x0], n); x0 = NextChange(x1); } /* mark line changed successfully */ if (y <= NewScreen(sp)->_maxy) { MARK_NOCHANGE(NewScreen(sp), y); } if (y <= CurScreen(sp)->_maxy) { MARK_NOCHANGE(CurScreen(sp), y); } #else x1 = NewScreen(sp)->_line[y].lastchar; n = x1 - x0 + 1; if (n > 0) { memcpy(&CurScreen(sp)->_line[y].text[x0], &NewScreen(sp)->_line[y].text[x0], (size_t) n * sizeof(CurScreen(sp)->_line[y].text[x0])); con_write(TCB, y, x0, &CurScreen(sp)->_line[y].text[x0], n); /* mark line changed successfully */ if (y <= NewScreen(sp)->_maxy) { MARK_NOCHANGE(NewScreen(sp), y); } if (y <= CurScreen(sp)->_maxy) { MARK_NOCHANGE(CurScreen(sp), y); } } #endif } } /* put everything back in sync */ for (y = nonempty; y <= NewScreen(sp)->_maxy; y++) { MARK_NOCHANGE(NewScreen(sp), y); } for (y = nonempty; y <= CurScreen(sp)->_maxy; y++) { MARK_NOCHANGE(CurScreen(sp), y); } if (!NewScreen(sp)->_leaveok) { CurScreen(sp)->_curx = NewScreen(sp)->_curx; CurScreen(sp)->_cury = NewScreen(sp)->_cury; TCB->drv->td_hwcur(TCB, 0, 0, CurScreen(sp)->_cury, CurScreen(sp)->_curx); } selectActiveHandle(); result = OK; } returnCode(result); } static bool wcon_CanHandle(TERMINAL_CONTROL_BLOCK * TCB, const char *tname, int *errret GCC_UNUSED) { bool code = FALSE; T((T_CALLED("win32con::wcon_CanHandle(%p)"), TCB)); assert((TCB != 0) && (tname != 0)); TCB->magic = WINMAGIC; if (tname == 0 || *tname == 0) code = TRUE; else if (tname != 0 && *tname == '#') { /* * Use "#" (a character which cannot begin a terminal's name) to * select specific driver from the table. * * In principle, we could have more than one non-terminfo driver, * e.g., "win32gui". */ size_t n = strlen(tname + 1); if (n != 0 && ((strncmp(tname + 1, "win32console", n) == 0) || (strncmp(tname + 1, "win32con", n) == 0))) { code = TRUE; } } else if (tname != 0 && stricmp(tname, "unknown") == 0) { code = TRUE; } /* * This is intentional, to avoid unnecessary breakage of applications * using symbols. */ if (code && (TCB->term.type.Booleans == 0)) { _nc_init_termtype(&(TCB->term.type)); } if (!code) { if (_nc_mingw_isconsole(0)) CON.isTermInfoConsole = TRUE; } returnBool(code); } static int wcon_dobeepflash(TERMINAL_CONTROL_BLOCK * TCB, int beepFlag) { SCREEN *sp; int res = ERR; int high = (CON.SBI.srWindow.Bottom - CON.SBI.srWindow.Top + 1); int wide = (CON.SBI.srWindow.Right - CON.SBI.srWindow.Left + 1); int max_cells = (high * wide); int i; CHAR_INFO this_screen[max_cells]; CHAR_INFO that_screen[max_cells]; COORD this_size; SMALL_RECT this_region; COORD bufferCoord; if (okConsoleHandle(TCB)) { SetSP(); this_region.Top = CON.SBI.srWindow.Top; this_region.Left = CON.SBI.srWindow.Left; this_region.Bottom = CON.SBI.srWindow.Bottom; this_region.Right = CON.SBI.srWindow.Right; this_size.X = (SHORT) wide; this_size.Y = (SHORT) high; bufferCoord.X = this_region.Left; bufferCoord.Y = this_region.Top; if (!beepFlag && read_screen(CON.hdl, this_screen, this_size, bufferCoord, &this_region)) { memcpy(that_screen, this_screen, sizeof(that_screen)); for (i = 0; i < max_cells; i++) { that_screen[i].Attributes = RevAttr(that_screen[i].Attributes); } write_screen(CON.hdl, that_screen, this_size, bufferCoord, &this_region); Sleep(200); write_screen(CON.hdl, this_screen, this_size, bufferCoord, &this_region); } else { MessageBeep(MB_ICONWARNING); /* MB_OK might be better */ } res = OK; } return res; } static int wcon_print(TERMINAL_CONTROL_BLOCK * TCB, char *data GCC_UNUSED, int len GCC_UNUSED) { SCREEN *sp; AssertTCB(); SetSP(); return ERR; } static int wcon_defaultcolors(TERMINAL_CONTROL_BLOCK * TCB, int fg GCC_UNUSED, int bg GCC_UNUSED) { SCREEN *sp; int code = ERR; AssertTCB(); SetSP(); return (code); } static bool get_SBI(void) { bool rc = FALSE; if (GetConsoleScreenBufferInfo(CON.hdl, &(CON.SBI))) { T(("GetConsoleScreenBufferInfo")); T(("... buffer(X:%d Y:%d)", CON.SBI.dwSize.X, CON.SBI.dwSize.Y)); T(("... window(X:%d Y:%d)", CON.SBI.dwMaximumWindowSize.X, CON.SBI.dwMaximumWindowSize.Y)); T(("... cursor(X:%d Y:%d)", CON.SBI.dwCursorPosition.X, CON.SBI.dwCursorPosition.Y)); T(("... display(Top:%d Bottom:%d Left:%d Right:%d)", CON.SBI.srWindow.Top, CON.SBI.srWindow.Bottom, CON.SBI.srWindow.Left, CON.SBI.srWindow.Right)); if (CON.buffered) { CON.origin.X = 0; CON.origin.Y = 0; } else { CON.origin.X = CON.SBI.srWindow.Left; CON.origin.Y = CON.SBI.srWindow.Top; } rc = TRUE; } else { T(("GetConsoleScreenBufferInfo ERR")); } return rc; } static void wcon_setcolor(TERMINAL_CONTROL_BLOCK * TCB, int fore, int color, int (*outc) (SCREEN *, int) GCC_UNUSED) { if (okConsoleHandle(TCB)) { WORD a = MapColor(fore, color); a |= (WORD) ((CON.SBI.wAttributes) & (fore ? 0xfff8 : 0xff8f)); SetConsoleTextAttribute(CON.hdl, a); get_SBI(); } } static bool wcon_rescol(TERMINAL_CONTROL_BLOCK * TCB) { bool res = FALSE; if (okConsoleHandle(TCB)) { WORD a = FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN; SetConsoleTextAttribute(CON.hdl, a); get_SBI(); res = TRUE; } return res; } static bool wcon_rescolors(TERMINAL_CONTROL_BLOCK * TCB) { int result = FALSE; SCREEN *sp; AssertTCB(); SetSP(); return result; } static int wcon_size(TERMINAL_CONTROL_BLOCK * TCB, int *Lines, int *Cols) { int result = ERR; T((T_CALLED("win32con::wcon_size(%p)"), TCB)); if (okConsoleHandle(TCB) && Lines != NULL && Cols != NULL) { if (CON.buffered) { *Lines = (int) (CON.SBI.dwSize.Y); *Cols = (int) (CON.SBI.dwSize.X); } else { *Lines = (int) (CON.SBI.srWindow.Bottom + 1 - CON.SBI.srWindow.Top); *Cols = (int) (CON.SBI.srWindow.Right + 1 - CON.SBI.srWindow.Left); } result = OK; } returnCode(result); } static int wcon_setsize(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int l GCC_UNUSED, int c GCC_UNUSED) { AssertTCB(); return ERR; } static int wcon_sgmode(TERMINAL_CONTROL_BLOCK * TCB, int setFlag, TTY * buf) { DWORD dwFlag = 0; tcflag_t iflag; tcflag_t lflag; int result = ERR; if (buf != NULL && okConsoleHandle(TCB)) { if (setFlag) { iflag = buf->c_iflag; lflag = buf->c_lflag; GetConsoleMode(CON.inp, &dwFlag); if (lflag & ICANON) dwFlag |= ENABLE_LINE_INPUT; else dwFlag &= (DWORD) (~ENABLE_LINE_INPUT); if (lflag & ECHO) dwFlag |= ENABLE_ECHO_INPUT; else dwFlag &= (DWORD) (~ENABLE_ECHO_INPUT); if (iflag & BRKINT) dwFlag |= ENABLE_PROCESSED_INPUT; else dwFlag &= (DWORD) (~ENABLE_PROCESSED_INPUT); dwFlag |= ENABLE_MOUSE_INPUT; buf->c_iflag = iflag; buf->c_lflag = lflag; SetConsoleMode(CON.inp, dwFlag); TCB->term.Nttyb = *buf; } else { iflag = TCB->term.Nttyb.c_iflag; lflag = TCB->term.Nttyb.c_lflag; GetConsoleMode(CON.inp, &dwFlag); if (dwFlag & ENABLE_LINE_INPUT) lflag |= ICANON; else lflag &= (tcflag_t) (~ICANON); if (dwFlag & ENABLE_ECHO_INPUT) lflag |= ECHO; else lflag &= (tcflag_t) (~ECHO); if (dwFlag & ENABLE_PROCESSED_INPUT) iflag |= BRKINT; else iflag &= (tcflag_t) (~BRKINT); TCB->term.Nttyb.c_iflag = iflag; TCB->term.Nttyb.c_lflag = lflag; *buf = TCB->term.Nttyb; } result = OK; } return result; } #define MIN_WIDE 80 #define MIN_HIGH 24 /* * In "normal" mode, reset the buffer- and window-sizes back to their original values. */ static void set_scrollback(bool normal, CONSOLE_SCREEN_BUFFER_INFO * info) { SMALL_RECT rect; COORD coord; bool changed = FALSE; T((T_CALLED("win32con::set_scrollback(%s)"), (normal ? "normal" : "application"))); T(("... SBI.srWindow %d,%d .. %d,%d", info->srWindow.Top, info->srWindow.Left, info->srWindow.Bottom, info->srWindow.Right)); T(("... SBI.dwSize %dx%d", info->dwSize.Y, info->dwSize.X)); if (normal) { rect = info->srWindow; coord = info->dwSize; if (memcmp(info, &CON.SBI, sizeof(*info)) != 0) { changed = TRUE; CON.SBI = *info; } } else { int high = info->srWindow.Bottom - info->srWindow.Top + 1; int wide = info->srWindow.Right - info->srWindow.Left + 1; if (high < MIN_HIGH) { T(("... height %d < %d", high, MIN_HIGH)); high = MIN_HIGH; changed = TRUE; } if (wide < MIN_WIDE) { T(("... width %d < %d", wide, MIN_WIDE)); wide = MIN_WIDE; changed = TRUE; } rect.Left = rect.Top = 0; rect.Right = (SHORT) (wide - 1); rect.Bottom = (SHORT) (high - 1); coord.X = (SHORT) wide; coord.Y = (SHORT) high; if (info->dwSize.Y != high || info->dwSize.X != wide || info->srWindow.Top != 0 || info->srWindow.Left != 0) { changed = TRUE; } } if (changed) { T(("... coord %d,%d", coord.Y, coord.X)); T(("... rect %d,%d - %d,%d", rect.Top, rect.Left, rect.Bottom, rect.Right)); SetConsoleScreenBufferSize(CON.hdl, coord); /* dwSize */ SetConsoleWindowInfo(CON.hdl, TRUE, &rect); /* srWindow */ get_SBI(); } returnVoid; } static int wcon_mode(TERMINAL_CONTROL_BLOCK * TCB, int progFlag, int defFlag) { SCREEN *sp; TERMINAL *_term = (TERMINAL *) TCB; int code = ERR; if (okConsoleHandle(TCB)) { sp = TCB->csp; T((T_CALLED("win32con::wcon_mode(%p, prog=%d, def=%d)"), TCB, progFlag, defFlag)); CON.progMode = progFlag; CON.lastOut = progFlag ? CON.hdl : CON.out; SetConsoleActiveScreenBuffer(CON.lastOut); if (progFlag) /* prog mode */ { if (defFlag) { if ((wcon_sgmode(TCB, FALSE, &(_term->Nttyb)) == OK)) { _term->Nttyb.c_oflag &= (tcflag_t) (~OFLAGS_TABS); code = OK; } } else { /* reset_prog_mode */ if (wcon_sgmode(TCB, TRUE, &(_term->Nttyb)) == OK) { if (sp) { if (sp->_keypad_on) _nc_keypad(sp, TRUE); } if (!CON.buffered) { set_scrollback(FALSE, &CON.SBI); } code = OK; } } T(("... buffered:%d, clear:%d", CON.buffered, CurScreen(sp)->_clear)); } else { /* shell mode */ if (defFlag) { /* def_shell_mode */ if (wcon_sgmode(TCB, FALSE, &(_term->Ottyb)) == OK) { code = OK; } } else { /* reset_shell_mode */ if (sp) { _nc_keypad(sp, FALSE); NCURSES_SP_NAME(_nc_flush) (sp); } code = wcon_sgmode(TCB, TRUE, &(_term->Ottyb)); if (!CON.buffered) { set_scrollback(TRUE, &CON.save_SBI); if (!restore_original_screen()) code = ERR; } SetConsoleCursorInfo(CON.hdl, &CON.save_CI); } } } returnCode(code); } static void wcon_screen_init(SCREEN *sp GCC_UNUSED) { } static void wcon_wrap(SCREEN *sp GCC_UNUSED) { } static int rkeycompare(const void *el1, const void *el2) { WORD key1 = (LOWORD((*((const LONG *) el1)))) & 0x7fff; WORD key2 = (LOWORD((*((const LONG *) el2)))) & 0x7fff; return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1)); } static int keycompare(const void *el1, const void *el2) { WORD key1 = HIWORD((*((const LONG *) el1))); WORD key2 = HIWORD((*((const LONG *) el2))); return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1)); } static int MapKey(WORD vKey) { WORD nKey = 0; void *res; LONG key = GenMap(vKey, 0); int code = -1; res = bsearch(&key, CON.map, (size_t) (N_INI + FKEYS), sizeof(keylist[0]), keycompare); if (res) { key = *((LONG *) res); nKey = LOWORD(key); code = (int) (nKey & 0x7fff); if (nKey & 0x8000) code = -code; } return code; } static int AnsiKey(WORD vKey) { WORD nKey = 0; void *res; LONG key = GenMap(vKey, 0); int code = -1; res = bsearch(&key, CON.ansi_map, (size_t) (N_INI + FKEYS), sizeof(keylist[0]), keycompare); if (res) { key = *((LONG *) res); nKey = LOWORD(key); code = (int) (nKey & 0x7fff); if (nKey & 0x8000) code = -code; } return code; } static void wcon_release(TERMINAL_CONTROL_BLOCK * TCB) { T((T_CALLED("win32con::wcon_release(%p)"), TCB)); AssertTCB(); if (TCB->prop) free(TCB->prop); returnVoid; } static bool read_screen_data(void) { bool result = FALSE; COORD bufferCoord; size_t want; CON.save_size.X = (SHORT) (CON.save_region.Right - CON.save_region.Left + 1); CON.save_size.Y = (SHORT) (CON.save_region.Bottom - CON.save_region.Top + 1); want = (size_t) (CON.save_size.X * CON.save_size.Y); if ((CON.save_screen = malloc(want * sizeof(CHAR_INFO))) != 0) { bufferCoord.X = (SHORT) (CON.window_only ? CON.SBI.srWindow.Left : 0); bufferCoord.Y = (SHORT) (CON.window_only ? CON.SBI.srWindow.Top : 0); T(("... reading console %s %dx%d into %d,%d - %d,%d at %d,%d", CON.window_only ? "window" : "buffer", CON.save_size.Y, CON.save_size.X, CON.save_region.Top, CON.save_region.Left, CON.save_region.Bottom, CON.save_region.Right, bufferCoord.Y, bufferCoord.X)); if (read_screen(CON.hdl, CON.save_screen, CON.save_size, bufferCoord, &CON.save_region)) { result = TRUE; } else { T((" error %#lx", (unsigned long) GetLastError())); FreeAndNull(CON.save_screen); } } return result; } /* * Attempt to save the screen contents. PDCurses does this if * PDC_RESTORE_SCREEN is set, giving the same visual appearance on * restoration as if the library had allocated a console buffer. MSDN * says that the data which can be read is limited to 64Kb (and may be * less). */ static bool save_original_screen(void) { bool result = FALSE; CON.save_region.Top = 0; CON.save_region.Left = 0; CON.save_region.Bottom = (SHORT) (CON.SBI.dwSize.Y - 1); CON.save_region.Right = (SHORT) (CON.SBI.dwSize.X - 1); if (read_screen_data()) { result = TRUE; } else { CON.save_region.Top = CON.SBI.srWindow.Top; CON.save_region.Left = CON.SBI.srWindow.Left; CON.save_region.Bottom = CON.SBI.srWindow.Bottom; CON.save_region.Right = CON.SBI.srWindow.Right; CON.window_only = TRUE; if (read_screen_data()) { result = TRUE; } } T(("... save original screen contents %s", result ? "ok" : "err")); return result; } static void wcon_init(TERMINAL_CONTROL_BLOCK * TCB) { T((T_CALLED("win32con::wcon_init(%p)"), TCB)); AssertTCB(); if (TCB) { if (!InitConsole()) { returnVoid; } TCB->info.initcolor = TRUE; TCB->info.canchange = FALSE; TCB->info.hascolor = TRUE; TCB->info.caninit = TRUE; TCB->info.maxpairs = NUMPAIRS; TCB->info.maxcolors = 8; TCB->info.numlabels = 0; TCB->info.labelwidth = 0; TCB->info.labelheight = 0; TCB->info.nocolorvideo = 1; TCB->info.tabsize = 8; TCB->info.numbuttons = CON.numButtons; TCB->info.defaultPalette = _nc_cga_palette; } returnVoid; } static void wcon_initpair(TERMINAL_CONTROL_BLOCK * TCB, int pair, int f, int b) { SCREEN *sp; if (okConsoleHandle(TCB)) { SetSP(); if ((pair > 0) && (pair < NUMPAIRS) && (f >= 0) && (f < 8) && (b >= 0) && (b < 8)) { CON.pairs[pair] = MapColor(true, f) | MapColor(false, b); } } } static void wcon_initcolor(TERMINAL_CONTROL_BLOCK * TCB, int color GCC_UNUSED, int r GCC_UNUSED, int g GCC_UNUSED, int b GCC_UNUSED) { SCREEN *sp; AssertTCB(); SetSP(); } static void wcon_do_color(TERMINAL_CONTROL_BLOCK * TCB, int old_pair GCC_UNUSED, int pair GCC_UNUSED, int reverse GCC_UNUSED, int (*outc) (SCREEN *, int) GCC_UNUSED ) { SCREEN *sp; AssertTCB(); SetSP(); } static void wcon_initmouse(TERMINAL_CONTROL_BLOCK * TCB) { SCREEN *sp; if (okConsoleHandle(TCB)) { SetSP(); sp->_mouse_type = M_TERM_DRIVER; } } static int wcon_testmouse(TERMINAL_CONTROL_BLOCK * TCB, int delay) { int rc = 0; SCREEN *sp; if (okConsoleHandle(TCB)) { SetSP(); if (sp->_drv_mouse_head < sp->_drv_mouse_tail) { rc = TW_MOUSE; } else { rc = TCBOf(sp)->drv->td_twait(TCBOf(sp), TWAIT_MASK, delay, (int *) 0 EVENTLIST_2nd(evl)); } } return rc; } static int wcon_mvcur(TERMINAL_CONTROL_BLOCK * TCB, int yold GCC_UNUSED, int xold GCC_UNUSED, int y, int x) { int ret = ERR; if (okConsoleHandle(TCB)) { COORD loc; loc.X = (short) x; loc.Y = (short) (y + AdjustY()); SetConsoleCursorPosition(CON.hdl, loc); ret = OK; } return ret; } static void wcon_hwlabel(TERMINAL_CONTROL_BLOCK * TCB, int labnum GCC_UNUSED, char *text GCC_UNUSED) { SCREEN *sp; AssertTCB(); SetSP(); } static void wcon_hwlabelOnOff(TERMINAL_CONTROL_BLOCK * TCB, int OnFlag GCC_UNUSED) { SCREEN *sp; AssertTCB(); SetSP(); } static chtype wcon_conattr(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED) { chtype res = A_NORMAL; res |= (A_BOLD | A_DIM | A_REVERSE | A_STANDOUT | A_COLOR); return res; } static void wcon_setfilter(TERMINAL_CONTROL_BLOCK * TCB) { SCREEN *sp; AssertTCB(); SetSP(); } static void wcon_initacs(TERMINAL_CONTROL_BLOCK * TCB, chtype *real_map GCC_UNUSED, chtype *fake_map GCC_UNUSED) { #define DATA(a,b) { a, b } static struct { int acs_code; int use_code; } table[] = { DATA('a', 0xb1), /* ACS_CKBOARD */ DATA('f', 0xf8), /* ACS_DEGREE */ DATA('g', 0xf1), /* ACS_PLMINUS */ DATA('j', 0xd9), /* ACS_LRCORNER */ DATA('l', 0xda), /* ACS_ULCORNER */ DATA('k', 0xbf), /* ACS_URCORNER */ DATA('m', 0xc0), /* ACS_LLCORNER */ DATA('n', 0xc5), /* ACS_PLUS */ DATA('q', 0xc4), /* ACS_HLINE */ DATA('t', 0xc3), /* ACS_LTEE */ DATA('u', 0xb4), /* ACS_RTEE */ DATA('v', 0xc1), /* ACS_BTEE */ DATA('w', 0xc2), /* ACS_TTEE */ DATA('x', 0xb3), /* ACS_VLINE */ DATA('y', 0xf3), /* ACS_LEQUAL */ DATA('z', 0xf2), /* ACS_GEQUAL */ DATA('0', 0xdb), /* ACS_BLOCK */ DATA('{', 0xe3), /* ACS_PI */ DATA('}', 0x9c), /* ACS_STERLING */ DATA(',', 0xae), /* ACS_LARROW */ DATA('+', 0xaf), /* ACS_RARROW */ DATA('~', 0xf9), /* ACS_BULLET */ }; #undef DATA unsigned n; SCREEN *sp; if (okConsoleHandle(TCB)) { SetSP(); for (n = 0; n < SIZEOF(table); ++n) { real_map[table[n].acs_code] = (chtype) table[n].use_code | A_ALTCHARSET; if (sp != 0) sp->_screen_acs_map[table[n].acs_code] = TRUE; } } } static ULONGLONG tdiff(FILETIME fstart, FILETIME fend) { ULARGE_INTEGER ustart; ULARGE_INTEGER uend; ULONGLONG diff; ustart.LowPart = fstart.dwLowDateTime; ustart.HighPart = fstart.dwHighDateTime; uend.LowPart = fend.dwLowDateTime; uend.HighPart = fend.dwHighDateTime; diff = (uend.QuadPart - ustart.QuadPart) / 10000; return diff; } static int Adjust(int milliseconds, int diff) { if (milliseconds != INFINITY) { milliseconds -= diff; if (milliseconds < 0) milliseconds = 0; } return milliseconds; } #define BUTTON_MASK (FROM_LEFT_1ST_BUTTON_PRESSED | \ FROM_LEFT_2ND_BUTTON_PRESSED | \ FROM_LEFT_3RD_BUTTON_PRESSED | \ FROM_LEFT_4TH_BUTTON_PRESSED | \ RIGHTMOST_BUTTON_PRESSED) static int decode_mouse(SCREEN *sp, int mask) { int result = 0; (void) sp; assert(sp && console_initialized); if (mask & FROM_LEFT_1ST_BUTTON_PRESSED) result |= BUTTON1_PRESSED; if (mask & FROM_LEFT_2ND_BUTTON_PRESSED) result |= BUTTON2_PRESSED; if (mask & FROM_LEFT_3RD_BUTTON_PRESSED) result |= BUTTON3_PRESSED; if (mask & FROM_LEFT_4TH_BUTTON_PRESSED) result |= BUTTON4_PRESSED; if (mask & RIGHTMOST_BUTTON_PRESSED) { switch (CON.numButtons) { case 1: result |= BUTTON1_PRESSED; break; case 2: result |= BUTTON2_PRESSED; break; case 3: result |= BUTTON3_PRESSED; break; case 4: result |= BUTTON4_PRESSED; break; } } return result; } static int console_twait( SCREEN *sp, HANDLE fd, int mode, int milliseconds, int *timeleft EVENTLIST_2nd(_nc_eventlist * evl)) { INPUT_RECORD inp_rec; BOOL b; DWORD nRead = 0, rc = (DWORD) (-1); int code = 0; FILETIME fstart; FILETIME fend; int diff; bool isImmed = (milliseconds == 0); #define CONSUME() ReadConsoleInput(fd,&inp_rec,1,&nRead) assert(sp); TR(TRACE_IEVENT, ("start twait: %d milliseconds, mode: %d", milliseconds, mode)); if (milliseconds < 0) milliseconds = INFINITY; memset(&inp_rec, 0, sizeof(inp_rec)); while (true) { GetSystemTimeAsFileTime(&fstart); rc = WaitForSingleObject(fd, (DWORD) milliseconds); GetSystemTimeAsFileTime(&fend); diff = (int) tdiff(fstart, fend); milliseconds = Adjust(milliseconds, diff); if (!isImmed && milliseconds <= 0) break; if (rc == WAIT_OBJECT_0) { if (mode) { b = GetNumberOfConsoleInputEvents(fd, &nRead); if (b && nRead > 0) { b = PeekConsoleInput(fd, &inp_rec, 1, &nRead); if (b && nRead > 0) { switch (inp_rec.EventType) { case KEY_EVENT: if (mode & TW_INPUT) { WORD vk = inp_rec.Event.KeyEvent.wVirtualKeyCode; char ch = inp_rec.Event.KeyEvent.uChar.AsciiChar; if (inp_rec.Event.KeyEvent.bKeyDown) { if (0 == ch) { int nKey = MapKey(vk); if (nKey < 0) { CONSUME(); continue; } } code = TW_INPUT; goto end; } else { CONSUME(); } } continue; case MOUSE_EVENT: if (decode_mouse(sp, (inp_rec.Event.MouseEvent.dwButtonState & BUTTON_MASK)) == 0) { CONSUME(); } else if (mode & TW_MOUSE) { code = TW_MOUSE; goto end; } continue; /* e.g., FOCUS_EVENT */ default: CONSUME(); selectActiveHandle(); continue; } } } } continue; } else { if (rc != WAIT_TIMEOUT) { code = -1; break; } else { code = 0; break; } } } end: TR(TRACE_IEVENT, ("end twait: returned %d (%d), remaining time %d msec", code, errno, milliseconds)); if (timeleft) *timeleft = milliseconds; return code; } static int wcon_twait(TERMINAL_CONTROL_BLOCK * TCB, int mode, int milliseconds, int *timeleft EVENTLIST_2nd(_nc_eventlist * evl)) { SCREEN *sp; int code = 0; if (okConsoleHandle(TCB)) { SetSP(); code = console_twait(sp, CON.inp, mode, milliseconds, timeleft EVENTLIST_2nd(_nc_eventlist * evl)); } return code; } static bool handle_mouse(SCREEN *sp, MOUSE_EVENT_RECORD mer) { MEVENT work; bool result = FALSE; assert(sp); sp->_drv_mouse_old_buttons = sp->_drv_mouse_new_buttons; sp->_drv_mouse_new_buttons = mer.dwButtonState & BUTTON_MASK; /* * We're only interested if the button is pressed or released. * FIXME: implement continuous event-tracking. */ if (sp->_drv_mouse_new_buttons != sp->_drv_mouse_old_buttons) { memset(&work, 0, sizeof(work)); if (sp->_drv_mouse_new_buttons) { work.bstate |= (mmask_t) decode_mouse(sp, sp->_drv_mouse_new_buttons); } else { /* cf: BUTTON_PRESSED, BUTTON_RELEASED */ work.bstate |= (mmask_t) (decode_mouse(sp, sp->_drv_mouse_old_buttons) >> 1); result = TRUE; } work.x = mer.dwMousePosition.X; work.y = mer.dwMousePosition.Y - AdjustY(); sp->_drv_mouse_fifo[sp->_drv_mouse_tail] = work; sp->_drv_mouse_tail += 1; } return result; } static int wcon_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf) { SCREEN *sp; int n = -1; T((T_CALLED("win32con::wcon_read(%p)"), TCB)); assert(buf); if (okConsoleHandle(TCB)) { SetSP(); n = _nc_mingw_console_read(sp, CON.inp, buf); } returnCode(n); } static int wcon_nap(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int ms) { T((T_CALLED("win32con::wcon_nap(%p, %d)"), TCB, ms)); Sleep((DWORD) ms); returnCode(OK); } static int wcon_cursorSet(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int mode) { int res = -1; T((T_CALLED("win32con:wcon_cursorSet(%d)"), mode)); if (okConsoleHandle(TCB)) { CONSOLE_CURSOR_INFO this_CI = CON.save_CI; switch (mode) { case 0: this_CI.bVisible = FALSE; break; case 1: break; case 2: this_CI.dwSize = 100; break; } SetConsoleCursorInfo(CON.hdl, &this_CI); } returnCode(res); } static bool wcon_kyExist(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int keycode) { WORD nKey; void *res; bool found = FALSE; LONG key = GenMap(0, (WORD) keycode); T((T_CALLED("win32con::wcon_kyExist(%d)"), keycode)); res = bsearch(&key, CON.rmap, (size_t) (N_INI + FKEYS), sizeof(keylist[0]), rkeycompare); if (res) { key = *((LONG *) res); nKey = LOWORD(key); if (!(nKey & 0x8000)) found = TRUE; } returnCode(found); } static int wcon_kpad(TERMINAL_CONTROL_BLOCK * TCB, int flag GCC_UNUSED) { SCREEN *sp; int code = ERR; T((T_CALLED("win32con::wcon_kpad(%p, %d)"), TCB, flag)); if (okConsoleHandle(TCB)) { SetSP(); if (sp) { code = OK; } } returnCode(code); } static int wcon_keyok(TERMINAL_CONTROL_BLOCK * TCB, int keycode, int flag) { int code = ERR; SCREEN *sp; WORD nKey; WORD vKey; void *res; LONG key = GenMap(0, (WORD) keycode); T((T_CALLED("win32con::wcon_keyok(%p, %d, %d)"), TCB, keycode, flag)); if (okConsoleHandle(TCB)) { SetSP(); if (sp) { res = bsearch(&key, CON.rmap, (size_t) (N_INI + FKEYS), sizeof(keylist[0]), rkeycompare); if (res) { key = *((LONG *) res); vKey = HIWORD(key); nKey = (LOWORD(key)) & 0x7fff; if (!flag) nKey |= 0x8000; *(LONG *) res = GenMap(vKey, nKey); } } } returnCode(code); } NCURSES_EXPORT_VAR (TERM_DRIVER) _nc_WIN_DRIVER = { FALSE, wcon_name, /* Name */ wcon_CanHandle, /* CanHandle */ wcon_init, /* init */ wcon_release, /* release */ wcon_size, /* size */ wcon_sgmode, /* sgmode */ wcon_conattr, /* conattr */ wcon_mvcur, /* hwcur */ wcon_mode, /* mode */ wcon_rescol, /* rescol */ wcon_rescolors, /* rescolors */ wcon_setcolor, /* color */ wcon_dobeepflash, /* DoBeepFlash */ wcon_initpair, /* initpair */ wcon_initcolor, /* initcolor */ wcon_do_color, /* docolor */ wcon_initmouse, /* initmouse */ wcon_testmouse, /* testmouse */ wcon_setfilter, /* setfilter */ wcon_hwlabel, /* hwlabel */ wcon_hwlabelOnOff, /* hwlabelOnOff */ wcon_doupdate, /* update */ wcon_defaultcolors, /* defaultcolors */ wcon_print, /* print */ wcon_size, /* getsize */ wcon_setsize, /* setsize */ wcon_initacs, /* initacs */ wcon_screen_init, /* scinit */ wcon_wrap, /* scexit */ wcon_twait, /* twait */ wcon_read, /* read */ wcon_nap, /* nap */ wcon_kpad, /* kpad */ wcon_keyok, /* kyOk */ wcon_kyExist, /* kyExist */ wcon_cursorSet /* cursorSet */ }; /* --------------------------------------------------------- */ static HANDLE get_handle(int fd) { intptr_t value = _get_osfhandle(fd); return (HANDLE) value; } #if WINVER >= 0x0600 /* This function tests, whether or not the ncurses application is running as a descendant of MSYS2/cygwin mintty terminal application. mintty doesn't use Windows Console for it's screen I/O, so the native Windows _isatty doesn't recognize it as character device. But we can discover we are at the end of an Pipe and can query to server side of the pipe, looking whether or not this is mintty. */ static int _ismintty(int fd, LPHANDLE pMinTTY) { HANDLE handle = get_handle(fd); DWORD dw; int code = 0; T((T_CALLED("win32con::_ismintty(%d, %p)"), fd, pMinTTY)); if (handle != INVALID_HANDLE_VALUE) { dw = GetFileType(handle); if (dw == FILE_TYPE_PIPE) { if (GetNamedPipeInfo(handle, 0, 0, 0, 0)) { ULONG pPid; /* Requires NT6 */ if (GetNamedPipeServerProcessId(handle, &pPid)) { TCHAR buf[MAX_PATH]; DWORD len = 0; /* These security attributes may allow us to create a remote thread in mintty to manipulate the terminal state remotely */ HANDLE pHandle = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, pPid); if (pMinTTY) *pMinTTY = INVALID_HANDLE_VALUE; if (pHandle != INVALID_HANDLE_VALUE) { if ((len = GetProcessImageFileName( pHandle, buf, (DWORD) array_length(buf)))) { TCHAR *pos = _tcsrchr(buf, _T('\\')); if (pos) { pos++; if (_tcsnicmp(pos, _TEXT("mintty.exe"), 10) == 0) { if (pMinTTY) *pMinTTY = pHandle; code = 1; } } } } } } } } returnCode(code); } #endif /* Borrowed from ansicon project. Check whether or not an I/O handle is associated with a Windows console. */ static BOOL IsConsoleHandle(HANDLE hdl) { DWORD dwFlag = 0; BOOL result; if (!GetConsoleMode(hdl, &dwFlag)) { result = (int) WriteConsoleA(hdl, NULL, 0, &dwFlag, NULL); } else { result = (int) (dwFlag & ENABLE_PROCESSED_OUTPUT); } return result; } /* Our replacement for the systems _isatty to include also a test for mintty. This is called from the NC_ISATTY macro defined in curses.priv.h */ int _nc_mingw_isatty(int fd) { int result = 0; #ifdef __MING32__ #define SysISATTY(fd) _isatty(fd) #else #define SysISATTY(fd) isatty(fd) #endif if (SysISATTY(fd)) { result = 1; } else { #if WINVER >= 0x0600 result = _ismintty(fd, NULL); #endif } return result; } /* This is used when running in terminfo mode to discover, whether or not the "terminal" is actually a Windows Console. It's the responsibilty of the console to deal with the terminal escape sequences that are sent by terminfo. */ int _nc_mingw_isconsole(int fd) { HANDLE hdl = get_handle(fd); int code = 0; T((T_CALLED("win32con::_nc_mingw_isconsole(%d)"), fd)); code = (int) IsConsoleHandle(hdl); returnCode(code); } #define TC_PROLOGUE(fd) \ SCREEN *sp; \ TERMINAL *term = 0; \ int code = ERR; \ if (_nc_screen_chain == 0) \ return 0; \ for (each_screen(sp)) { \ if (sp->_term && (sp->_term->Filedes == fd)) { \ term = sp->_term; \ break; \ } \ } \ assert(term != 0) int _nc_mingw_tcsetattr( int fd, int optional_action GCC_UNUSED, const struct termios *arg) { TC_PROLOGUE(fd); if (_nc_mingw_isconsole(fd)) { DWORD dwFlag = 0; HANDLE ofd = get_handle(fd); if (ofd != INVALID_HANDLE_VALUE) { if (arg) { if (arg->c_lflag & ICANON) dwFlag |= ENABLE_LINE_INPUT; else dwFlag = dwFlag & (DWORD) (~ENABLE_LINE_INPUT); if (arg->c_lflag & ECHO) dwFlag = dwFlag | ENABLE_ECHO_INPUT; else dwFlag = dwFlag & (DWORD) (~ENABLE_ECHO_INPUT); if (arg->c_iflag & BRKINT) dwFlag |= ENABLE_PROCESSED_INPUT; else dwFlag = dwFlag & (DWORD) (~ENABLE_PROCESSED_INPUT); } dwFlag |= ENABLE_MOUSE_INPUT; SetConsoleMode(ofd, dwFlag); code = OK; } } if (arg) term->Nttyb = *arg; return code; } int _nc_mingw_tcgetattr(int fd, struct termios *arg) { TC_PROLOGUE(fd); if (_nc_mingw_isconsole(fd)) { if (arg) *arg = term->Nttyb; } return code; } int _nc_mingw_tcflush(int fd, int queue) { TC_PROLOGUE(fd); (void) term; if (_nc_mingw_isconsole(fd)) { if (queue == TCIFLUSH) { BOOL b = FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); if (!b) return (int) GetLastError(); } } return code; } int _nc_mingw_testmouse( SCREEN *sp, HANDLE fd, int delay) { int rc = 0; assert(sp); if (sp->_drv_mouse_head < sp->_drv_mouse_tail) { rc = TW_MOUSE; } else { rc = console_twait(sp, fd, TWAIT_MASK, delay, (int *) 0 EVENTLIST_2nd(evl)); } return rc; } int _nc_mingw_console_read( SCREEN *sp, HANDLE fd, int *buf) { int rc = -1; INPUT_RECORD inp_rec; BOOL b; DWORD nRead; WORD vk; assert(sp); assert(buf); memset(&inp_rec, 0, sizeof(inp_rec)); T((T_CALLED("_nc_mingw_console_read(%p)"), sp)); while ((b = ReadConsoleInput(fd, &inp_rec, 1, &nRead))) { if (b && nRead > 0) { if (rc < 0) rc = 0; rc += nRead; if (inp_rec.EventType == KEY_EVENT) { if (!inp_rec.Event.KeyEvent.bKeyDown) continue; *buf = (int) inp_rec.Event.KeyEvent.uChar.AsciiChar; vk = inp_rec.Event.KeyEvent.wVirtualKeyCode; /* * There are 24 virtual function-keys, and typically * 12 function-keys on a keyboard. Use the shift-modifier * to provide the remaining 12 keys. */ if (vk >= VK_F1 && vk <= VK_F12) { if (inp_rec.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED) { vk = (WORD) (vk + 12); } } if (*buf == 0) { int key = MapKey(vk); if (key < 0) continue; if (sp->_keypad_on) { *buf = key; } else { ungetch('\0'); *buf = AnsiKey(vk); } } break; } else if (inp_rec.EventType == MOUSE_EVENT) { if (handle_mouse(sp, inp_rec.Event.MouseEvent)) { *buf = KEY_MOUSE; break; } } continue; } } returnCode(rc); } static bool InitConsole(void) { /* initalize once, or not at all */ if (!console_initialized) { int i; DWORD num_buttons; WORD a; BOOL buffered = TRUE; BOOL b; START_TRACE(); if (_nc_mingw_isatty(0)) { CON.isMinTTY = TRUE; } for (i = 0; i < (N_INI + FKEYS); i++) { if (i < N_INI) { CON.rmap[i] = CON.map[i] = (DWORD) keylist[i]; CON.ansi_map[i] = (DWORD) ansi_keys[i]; } else { CON.rmap[i] = CON.map[i] = (DWORD) GenMap((VK_F1 + (i - N_INI)), (KEY_F(1) + (i - N_INI))); CON.ansi_map[i] = (DWORD) GenMap((VK_F1 + (i - N_INI)), (';' + (i - N_INI))); } } qsort(CON.ansi_map, (size_t) (MAPSIZE), sizeof(keylist[0]), keycompare); qsort(CON.map, (size_t) (MAPSIZE), sizeof(keylist[0]), keycompare); qsort(CON.rmap, (size_t) (MAPSIZE), sizeof(keylist[0]), rkeycompare); if (GetNumberOfConsoleMouseButtons(&num_buttons)) { CON.numButtons = (int) num_buttons; } else { CON.numButtons = 1; } a = MapColor(true, COLOR_WHITE) | MapColor(false, COLOR_BLACK); for (i = 0; i < NUMPAIRS; i++) CON.pairs[i] = a; CON.inp = GetStdHandle(STD_INPUT_HANDLE); CON.out = GetStdHandle(STD_OUTPUT_HANDLE); b = AllocConsole(); if (!b) b = AttachConsole(ATTACH_PARENT_PROCESS); if (getenv("NCGDB") || getenv("NCURSES_CONSOLE2")) { T(("... will not buffer console")); buffered = FALSE; CON.hdl = CON.out; } else { T(("... creating console buffer")); CON.hdl = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL); } if (CON.hdl != INVALID_HANDLE_VALUE) { CON.buffered = buffered; get_SBI(); CON.save_SBI = CON.SBI; if (!buffered) { save_original_screen(); set_scrollback(FALSE, &CON.SBI); } GetConsoleCursorInfo(CON.hdl, &CON.save_CI); T(("... initial cursor is %svisible, %d%%", (CON.save_CI.bVisible ? "" : "not-"), (int) CON.save_CI.dwSize)); } console_initialized = TRUE; } return (CON.hdl != INVALID_HANDLE_VALUE); } static bool okConsoleHandle(TERMINAL_CONTROL_BLOCK * TCB) { return ((TCB != 0) && (TCB->magic == WINMAGIC) && InitConsole()); } /* * While a constructor would ensure that this module is initialized, that will * interfere with applications that may combine this with GUI interfaces. */ #if 0 static __attribute__((constructor)) void _enter_console(void) { (void) InitConsole(); } #endif ncurses-6.0-20160213/ncurses/win32con/gettimeofday.c0000644000175100001440000000523512327005756020441 0ustar tomusers/**************************************************************************** * Copyright (c) 2008-2010,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ #ifdef WINVER # undef WINVER #endif #define WINVER 0x0501 #include #include MODULE_ID("$Id: gettimeofday.c,v 1.3 2014/04/26 19:41:34 juergen Exp $") #define JAN1970 116444736000000000LL /* the value for 01/01/1970 00:00 */ int gettimeofday(struct timeval *tv, void *tz GCC_UNUSED) { union { FILETIME ft; long long since1601; /* time since 1 Jan 1601 in 100ns units */ } data; GetSystemTimeAsFileTime(&data.ft); tv->tv_usec = (long) ((data.since1601 / 10LL) % 1000000LL); tv->tv_sec = (long) ((data.since1601 - JAN1970) / 10000000LL); return (0); } ncurses-6.0-20160213/ncurses/win32con/wcwidth.c0000644000175100001440000000522311427343633017425 0ustar tomusers/**************************************************************************** * Copyright (c) 2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ #include MODULE_ID("$Id: wcwidth.c,v 1.2 2010/08/07 20:52:43 tom Exp $") #if USE_WIDEC_SUPPORT #define mk_wcwidth(ucs) _nc_wcwidth(ucs) #define mk_wcswidth(pwcs, n) _nc_wcswidth(pwcs, n) #define mk_wcwidth_cjk(ucs) _nc_wcwidth_cjk(ucs) #define mk_wcswidth_cjk(pwcs, n) _nc_wcswidth_cjk(pwcs, n) extern int mk_wcwidth(wchar_t); extern int mk_wcswidth(const wchar_t *, size_t); extern int mk_wcwidth_cjk(wchar_t); extern int mk_wcswidth_cjk(const wchar_t *, size_t); #include #else void _nc_empty_wcwidth(void); void _nc_empty_wcwidth(void) { } #endif ncurses-6.0-20160213/ncurses/README0000644000175100001440000000621511221430116015011 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-2006,2009 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README,v 1.10 2009/06/27 14:44:30 tom Exp $ ------------------------------------------------------------------------------- For discussion of the package internals, see hackguide.html in the doc/html directory. ------------------------------------------------------------------------------- The llib-lXXXX files could be used as lint-library sources (and were, at one time). However, they are actually used as a documentation aid to keep track of changes to the public/private interfaces in ncurses. Most of the text in these files is generated using cproto; some manual cleanup and adjustment of types (to reflect #define's in curses.h) is needed. The functions listed in the llib-lXXXX files do not correspond to the default configure options; some additional ones are added to include "all" of the entrypoints for each of the major configurations (normal, wide-character, threaded): --disable-macros --disable-root-environ --enable-expanded --enable-getcap --enable-getcap-cache --enable-sp-funcs --enable-termcap --with-develop ncurses-6.0-20160213/ncurses/tinfo/0000755000175100001440000000000012657717005015267 5ustar tomusersncurses-6.0-20160213/ncurses/tinfo/lib_baudrate.c0000644000175100001440000001475512537146004020054 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * lib_baudrate.c * */ #include #include /* ospeed */ #if defined(__FreeBSD__) #include #endif /* * These systems use similar header files, which define B1200 as 1200, etc., * but can be overridden by defining USE_OLD_TTY so B1200 is 9, which makes all * of the indices up to B115200 fit nicely in a 'short', allowing us to retain * ospeed's type for compatibility. */ #if NCURSES_OSPEED_COMPAT && ((defined(__FreeBSD__) && (__FreeBSD_version < 700000)) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)) #undef B0 #undef B50 #undef B75 #undef B110 #undef B134 #undef B150 #undef B200 #undef B300 #undef B600 #undef B1200 #undef B1800 #undef B2400 #undef B4800 #undef B9600 #undef B19200 #undef EXTA #undef B38400 #undef EXTB #undef B57600 #undef B115200 #undef B230400 #undef B460800 #undef B921600 #define USE_OLD_TTY #include #else #undef USE_OLD_TTY #endif /* USE_OLD_TTY */ MODULE_ID("$Id: lib_baudrate.c,v 1.37 2015/06/14 00:34:12 tom Exp $") /* * int * baudrate() * * Returns the current terminal's baud rate. * */ struct speed { NCURSES_OSPEED s; /* values for 'ospeed' */ int sp; /* the actual speed */ }; #define DATA(number) { B##number, number } static struct speed const speeds[] = { DATA(0), DATA(50), DATA(75), DATA(110), DATA(134), DATA(150), DATA(200), DATA(300), DATA(600), DATA(1200), DATA(1800), DATA(2400), DATA(4800), DATA(9600), #ifdef B19200 DATA(19200), #elif defined(EXTA) {EXTA, 19200}, #endif #ifdef B38400 DATA(38400), #elif defined(EXTB) {EXTB, 38400}, #endif #ifdef B57600 DATA(57600), #endif /* ifdef to prevent overflow when OLD_TTY is not available */ #if !(NCURSES_OSPEED_COMPAT && defined(__FreeBSD__) && (__FreeBSD_version > 700000)) #ifdef B115200 DATA(115200), #endif #ifdef B230400 DATA(230400), #endif #ifdef B460800 DATA(460800), #endif #ifdef B921600 DATA(921600), #endif #endif }; NCURSES_EXPORT(int) _nc_baudrate(int OSpeed) { #if !USE_REENTRANT static int last_OSpeed; static int last_baudrate; #endif int result = ERR; unsigned i; #if !USE_REENTRANT if (OSpeed == last_OSpeed) { result = last_baudrate; } #endif if (result == ERR) { if (OSpeed >= 0) { for (i = 0; i < SIZEOF(speeds); i++) { if ((int) speeds[i].s == OSpeed) { result = speeds[i].sp; break; } } } #if !USE_REENTRANT if (OSpeed != last_OSpeed) { last_OSpeed = OSpeed; last_baudrate = result; } #endif } return (result); } NCURSES_EXPORT(int) _nc_ospeed(int BaudRate) { int result = 1; unsigned i; if (BaudRate >= 0) { for (i = 0; i < SIZEOF(speeds); i++) { if (speeds[i].sp == BaudRate) { result = speeds[i].s; break; } } } return (result); } NCURSES_EXPORT(int) NCURSES_SP_NAME(baudrate) (NCURSES_SP_DCL0) { int result; T((T_CALLED("baudrate(%p)"), (void *) SP_PARM)); /* * In debugging, allow the environment symbol to override when we're * redirecting to a file, so we can construct repeatable test-cases * that take into account costs that depend on baudrate. */ #ifdef TRACE if (IsValidTIScreen(SP_PARM) && !NC_ISATTY(fileno(SP_PARM ? SP_PARM->_ofp : stdout)) && getenv("BAUDRATE") != 0) { int ret; if ((ret = _nc_getenv_num("BAUDRATE")) <= 0) ret = 9600; ospeed = (NCURSES_OSPEED) _nc_ospeed(ret); returnCode(ret); } #endif if (IsValidTIScreen(SP_PARM)) { #ifdef USE_OLD_TTY result = (int) cfgetospeed(&(TerminalOf(SP_PARM)->Nttyb)); ospeed = (NCURSES_OSPEED) _nc_ospeed(result); #else /* !USE_OLD_TTY */ #ifdef TERMIOS ospeed = (NCURSES_OSPEED) cfgetospeed(&(TerminalOf(SP_PARM)->Nttyb)); #else ospeed = (NCURSES_OSPEED) TerminalOf(SP_PARM)->Nttyb.sg_ospeed; #endif result = _nc_baudrate(ospeed); #endif TerminalOf(SP_PARM)->_baudrate = result; } else { result = ERR; } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) baudrate(void) { return NCURSES_SP_NAME(baudrate) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/tinfo/lib_acs.c0000644000175100001440000002251412306677173017035 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2008 * ****************************************************************************/ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_acs.c,v 1.45 2014/03/08 20:32:59 tom Exp $") #if BROKEN_LINKER || USE_REENTRANT #define MyBuffer _nc_prescreen.real_acs_map NCURSES_EXPORT(chtype *) NCURSES_PUBLIC_VAR(acs_map) (void) { if (MyBuffer == 0) MyBuffer = typeCalloc(chtype, ACS_LEN); return MyBuffer; } #undef MyBuffer #else NCURSES_EXPORT_VAR (chtype) acs_map[ACS_LEN] = { 0 }; #endif #ifdef USE_TERM_DRIVER NCURSES_EXPORT(chtype) NCURSES_SP_NAME(_nc_acs_char) (NCURSES_SP_DCLx int c) { chtype *map; if (c < 0 || c >= ACS_LEN) return (chtype) 0; map = (SP_PARM != 0) ? SP_PARM->_acs_map : #if BROKEN_LINKER || USE_REENTRANT _nc_prescreen.real_acs_map #else acs_map #endif ; return map[c]; } #endif /* USE_TERM_DRIVER */ NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_init_acs) (NCURSES_SP_DCL0) { chtype *fake_map = acs_map; chtype *real_map = SP_PARM != 0 ? SP_PARM->_acs_map : fake_map; int j; T(("initializing ACS map")); /* * If we're using this from curses (rather than terminfo), we are storing * the mapping information in the SCREEN struct so we can decide how to * render it. */ if (real_map != fake_map) { for (j = 1; j < ACS_LEN; ++j) { real_map[j] = 0; fake_map[j] = A_ALTCHARSET | (chtype) j; if (SP_PARM) SP_PARM->_screen_acs_map[j] = FALSE; } } else { for (j = 1; j < ACS_LEN; ++j) { real_map[j] = 0; } } /* * Initializations for a UNIX-like multi-terminal environment. Use * ASCII chars and count on the terminfo description to do better. */ real_map['l'] = '+'; /* should be upper left corner */ real_map['m'] = '+'; /* should be lower left corner */ real_map['k'] = '+'; /* should be upper right corner */ real_map['j'] = '+'; /* should be lower right corner */ real_map['u'] = '+'; /* should be tee pointing left */ real_map['t'] = '+'; /* should be tee pointing right */ real_map['v'] = '+'; /* should be tee pointing up */ real_map['w'] = '+'; /* should be tee pointing down */ real_map['q'] = '-'; /* should be horizontal line */ real_map['x'] = '|'; /* should be vertical line */ real_map['n'] = '+'; /* should be large plus or crossover */ real_map['o'] = '~'; /* should be scan line 1 */ real_map['s'] = '_'; /* should be scan line 9 */ real_map['`'] = '+'; /* should be diamond */ real_map['a'] = ':'; /* should be checker board (stipple) */ real_map['f'] = '\''; /* should be degree symbol */ real_map['g'] = '#'; /* should be plus/minus */ real_map['~'] = 'o'; /* should be bullet */ real_map[','] = '<'; /* should be arrow pointing left */ real_map['+'] = '>'; /* should be arrow pointing right */ real_map['.'] = 'v'; /* should be arrow pointing down */ real_map['-'] = '^'; /* should be arrow pointing up */ real_map['h'] = '#'; /* should be board of squares */ real_map['i'] = '#'; /* should be lantern symbol */ real_map['0'] = '#'; /* should be solid square block */ /* these defaults were invented for ncurses */ real_map['p'] = '-'; /* should be scan line 3 */ real_map['r'] = '-'; /* should be scan line 7 */ real_map['y'] = '<'; /* should be less-than-or-equal-to */ real_map['z'] = '>'; /* should be greater-than-or-equal-to */ real_map['{'] = '*'; /* should be greek pi */ real_map['|'] = '!'; /* should be not-equal */ real_map['}'] = 'f'; /* should be pound-sterling symbol */ /* thick-line-drawing */ real_map['L'] = '+'; /* upper left corner */ real_map['M'] = '+'; /* lower left corner */ real_map['K'] = '+'; /* upper right corner */ real_map['J'] = '+'; /* lower right corner */ real_map['T'] = '+'; /* tee pointing left */ real_map['U'] = '+'; /* tee pointing right */ real_map['V'] = '+'; /* tee pointing up */ real_map['W'] = '+'; /* tee pointing down */ real_map['Q'] = '-'; /* horizontal line */ real_map['X'] = '|'; /* vertical line */ real_map['N'] = '+'; /* large plus or crossover */ /* double-line-drawing */ real_map['C'] = '+'; /* upper left corner */ real_map['D'] = '+'; /* lower left corner */ real_map['B'] = '+'; /* upper right corner */ real_map['A'] = '+'; /* lower right corner */ real_map['G'] = '+'; /* tee pointing left */ real_map['F'] = '+'; /* tee pointing right */ real_map['H'] = '+'; /* tee pointing up */ real_map['I'] = '+'; /* tee pointing down */ real_map['R'] = '-'; /* horizontal line */ real_map['Y'] = '|'; /* vertical line */ real_map['E'] = '+'; /* large plus or crossover */ #ifdef USE_TERM_DRIVER CallDriver_2(SP_PARM, td_initacs, real_map, fake_map); #else if (ena_acs != NULL) { NCURSES_PUTP2("ena_acs", ena_acs); } #if NCURSES_EXT_FUNCS /* * Linux console "supports" the "PC ROM" character set by the coincidence * that smpch/rmpch and smacs/rmacs have the same values. ncurses has * no codepage support (see SCO Merge for an example). Outside of the * values defined in acsc, there are no definitions for the "PC ROM" * character set (assumed by some applications to be codepage 437), but we * allow those applications to use those codepoints. * * test/blue.c uses this feature. */ #define PCH_KLUDGE(a,b) (a != 0 && b != 0 && !strcmp(a,b)) if (PCH_KLUDGE(enter_pc_charset_mode, enter_alt_charset_mode) && PCH_KLUDGE(exit_pc_charset_mode, exit_alt_charset_mode)) { size_t i; for (i = 1; i < ACS_LEN; ++i) { if (real_map[i] == 0) { real_map[i] = (chtype) i; if (real_map != fake_map) { if (SP != 0) SP->_screen_acs_map[i] = TRUE; } } } } #endif if (acs_chars != NULL) { size_t i = 0; size_t length = strlen(acs_chars); while (i + 1 < length) { if (acs_chars[i] != 0 && UChar(acs_chars[i]) < ACS_LEN) { real_map[UChar(acs_chars[i])] = UChar(acs_chars[i + 1]) | A_ALTCHARSET; if (SP != 0) SP->_screen_acs_map[UChar(acs_chars[i])] = TRUE; } i += 2; } } #ifdef TRACE /* Show the equivalent mapping, noting if it does not match the * given attribute, whether by re-ordering or duplication. */ if (USE_TRACEF(TRACE_CALLS)) { size_t n, m; char show[ACS_LEN * 2 + 1]; for (n = 1, m = 0; n < ACS_LEN; n++) { if (real_map[n] != 0) { show[m++] = (char) n; show[m++] = (char) ChCharOf(real_map[n]); } } show[m] = 0; if (acs_chars == NULL || strcmp(acs_chars, show)) _tracef("%s acs_chars %s", (acs_chars == NULL) ? "NULL" : "READ", _nc_visbuf(acs_chars)); _tracef("%s acs_chars %s", (acs_chars == NULL) ? "NULL" : (strcmp(acs_chars, show) ? "DIFF" : "SAME"), _nc_visbuf(show)); _nc_unlock_global(tracef); } #endif /* TRACE */ #endif } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_init_acs(void) { NCURSES_SP_NAME(_nc_init_acs) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/tinfo/tinfo_driver.c0000644000175100001440000010134212543375151020122 0ustar tomusers/**************************************************************************** * Copyright (c) 2008-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer * * * ****************************************************************************/ #include #define CUR ((TERMINAL*)TCB)->type. #include #if HAVE_NANOSLEEP #include #if HAVE_SYS_TIME_H #include /* needed for MacOS X DP3 */ #endif #endif #if HAVE_SIZECHANGE # if !defined(sun) || !TERMIOS # if HAVE_SYS_IOCTL_H # include # endif # endif #endif MODULE_ID("$Id: tinfo_driver.c,v 1.40 2015/06/27 01:20:41 tom Exp $") /* * SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS, * Solaris, IRIX) define TIOCGWINSZ and struct winsize. */ #ifdef TIOCGSIZE # define IOCTL_WINSIZE TIOCGSIZE # define STRUCT_WINSIZE struct ttysize # define WINSIZE_ROWS(n) (int)n.ts_lines # define WINSIZE_COLS(n) (int)n.ts_cols #else # ifdef TIOCGWINSZ # define IOCTL_WINSIZE TIOCGWINSZ # define STRUCT_WINSIZE struct winsize # define WINSIZE_ROWS(n) (int)n.ws_row # define WINSIZE_COLS(n) (int)n.ws_col # endif #endif /* * These should be screen structure members. They need to be globals for * historical reasons. So we assign them in start_color() and also in * set_term()'s screen-switching logic. */ #if USE_REENTRANT NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(COLOR_PAIRS) (void) { return CURRENT_SCREEN ? CURRENT_SCREEN->_pair_count : -1; } NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(COLORS) (void) { return CURRENT_SCREEN ? CURRENT_SCREEN->_color_count : -1; } #else NCURSES_EXPORT_VAR(int) COLOR_PAIRS = 0; NCURSES_EXPORT_VAR(int) COLORS = 0; #endif #define TCBMAGIC NCDRV_MAGIC(NCDRV_TINFO) #define AssertTCB() assert(TCB!=0 && TCB->magic==TCBMAGIC) #define SetSP() assert(TCB->csp!=0); sp = TCB->csp; (void) sp /* * This routine needs to do all the work to make curscr look * like newscr. */ static int drv_doupdate(TERMINAL_CONTROL_BLOCK * TCB) { AssertTCB(); return TINFO_DOUPDATE(TCB->csp); } static const char * drv_Name(TERMINAL_CONTROL_BLOCK * TCB) { (void) TCB; return "tinfo"; } #undef SETUP_FAIL #define SETUP_FAIL FALSE static bool drv_CanHandle(TERMINAL_CONTROL_BLOCK * TCB, const char *tname, int *errret) { bool result = FALSE; int status; TERMINAL *termp; SCREEN *sp; START_TRACE(); T((T_CALLED("tinfo::drv_CanHandle(%p)"), TCB)); assert(TCB != 0 && tname != 0); termp = (TERMINAL *) TCB; sp = TCB->csp; TCB->magic = TCBMAGIC; #if (NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP) status = _nc_setup_tinfo(tname, &termp->type); #else status = TGETENT_NO; #endif /* try fallback list if entry on disk */ if (status != TGETENT_YES) { const TERMTYPE *fallback = _nc_fallback(tname); if (fallback) { termp->type = *fallback; status = TGETENT_YES; } } if (status != TGETENT_YES) { NCURSES_SP_NAME(del_curterm) (NCURSES_SP_ARGx termp); if (status == TGETENT_ERR) { ret_error0(status, "terminals database is inaccessible\n"); } else if (status == TGETENT_NO) { ret_error1(status, "unknown terminal type.\n", tname); } } result = TRUE; #if !USE_REENTRANT strncpy(ttytype, termp->type.term_names, (size_t) NAMESIZE - 1); ttytype[NAMESIZE - 1] = '\0'; #endif if (command_character) _nc_tinfo_cmdch(termp, *command_character); if (generic_type) { /* * BSD 4.3's termcap contains mis-typed "gn" for wy99. Do a sanity * check before giving up. */ if ((VALID_STRING(cursor_address) || (VALID_STRING(cursor_down) && VALID_STRING(cursor_home))) && VALID_STRING(clear_screen)) { ret_error1(TGETENT_YES, "terminal is not really generic.\n", tname); } else { ret_error1(TGETENT_NO, "I need something more specific.\n", tname); } } if (hard_copy) { ret_error1(TGETENT_YES, "I can't handle hardcopy terminals.\n", tname); } returnBool(result); } static int drv_dobeepflash(TERMINAL_CONTROL_BLOCK * TCB, int beepFlag) { SCREEN *sp; int res = ERR; AssertTCB(); SetSP(); /* FIXME: should make sure that we are not in altchar mode */ if (beepFlag) { if (bell) { res = NCURSES_PUTP2("bell", bell); NCURSES_SP_NAME(_nc_flush) (sp); } else if (flash_screen) { res = NCURSES_PUTP2("flash_screen", flash_screen); NCURSES_SP_NAME(_nc_flush) (sp); } } else { if (flash_screen) { res = NCURSES_PUTP2("flash_screen", flash_screen); NCURSES_SP_NAME(_nc_flush) (sp); } else if (bell) { res = NCURSES_PUTP2("bell", bell); NCURSES_SP_NAME(_nc_flush) (sp); } } return res; } /* * SVr4 curses is known to interchange color codes (1,4) and (3,6), possibly * to maintain compatibility with a pre-ANSI scheme. The same scheme is * also used in the FreeBSD syscons. */ static int toggled_colors(int c) { if (c < 16) { static const int table[] = {0, 4, 2, 6, 1, 5, 3, 7, 8, 12, 10, 14, 9, 13, 11, 15}; c = table[c]; } return c; } static int drv_print(TERMINAL_CONTROL_BLOCK * TCB, char *data, int len) { SCREEN *sp; AssertTCB(); SetSP(); #if NCURSES_EXT_FUNCS return NCURSES_SP_NAME(mcprint) (TCB->csp, data, len); #else return ERR; #endif } static int drv_defaultcolors(TERMINAL_CONTROL_BLOCK * TCB, int fg, int bg) { SCREEN *sp; int code = ERR; AssertTCB(); SetSP(); if (sp != 0 && orig_pair && orig_colors && (initialize_pair != 0)) { #if NCURSES_EXT_FUNCS sp->_default_color = isDefaultColor(fg) || isDefaultColor(bg); sp->_has_sgr_39_49 = (NCURSES_SP_NAME(tigetflag) (NCURSES_SP_ARGx "AX") == TRUE); sp->_default_fg = isDefaultColor(fg) ? COLOR_DEFAULT : (fg & C_MASK); sp->_default_bg = isDefaultColor(bg) ? COLOR_DEFAULT : (bg & C_MASK); if (sp->_color_pairs != 0) { bool save = sp->_default_color; sp->_default_color = TRUE; NCURSES_SP_NAME(init_pair) (NCURSES_SP_ARGx 0, (short)fg, (short)bg); sp->_default_color = save; } #endif code = OK; } return (code); } static void drv_setcolor(TERMINAL_CONTROL_BLOCK * TCB, int fore, int color, NCURSES_SP_OUTC outc) { SCREEN *sp; AssertTCB(); SetSP(); if (fore) { if (set_a_foreground) { TPUTS_TRACE("set_a_foreground"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(set_a_foreground, color), 1, outc); } else { TPUTS_TRACE("set_foreground"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(set_foreground, toggled_colors(color)), 1, outc); } } else { if (set_a_background) { TPUTS_TRACE("set_a_background"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(set_a_background, color), 1, outc); } else { TPUTS_TRACE("set_background"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(set_background, toggled_colors(color)), 1, outc); } } } static bool drv_rescol(TERMINAL_CONTROL_BLOCK * TCB) { bool result = FALSE; SCREEN *sp; AssertTCB(); SetSP(); if (orig_pair != 0) { NCURSES_PUTP2("orig_pair", orig_pair); result = TRUE; } return result; } static bool drv_rescolors(TERMINAL_CONTROL_BLOCK * TCB) { int result = FALSE; SCREEN *sp; AssertTCB(); SetSP(); if (orig_colors != 0) { NCURSES_PUTP2("orig_colors", orig_colors); result = TRUE; } return result; } static int drv_size(TERMINAL_CONTROL_BLOCK * TCB, int *linep, int *colp) { SCREEN *sp; bool useEnv = TRUE; bool useTioctl = TRUE; AssertTCB(); sp = TCB->csp; /* can be null here */ if (sp) { useEnv = sp->_use_env; useTioctl = sp->_use_tioctl; } else { useEnv = _nc_prescreen.use_env; useTioctl = _nc_prescreen.use_tioctl; } /* figure out the size of the screen */ T(("screen size: terminfo lines = %d columns = %d", lines, columns)); *linep = (int) lines; *colp = (int) columns; if (useEnv || useTioctl) { int value; #ifdef __EMX__ { int screendata[2]; _scrsize(screendata); *colp = screendata[0]; *linep = ((sp != 0 && sp->_filtered) ? 1 : screendata[1]); T(("EMX screen size: environment LINES = %d COLUMNS = %d", *linep, *colp)); } #endif #if HAVE_SIZECHANGE /* try asking the OS */ { TERMINAL *termp = (TERMINAL *) TCB; if (NC_ISATTY(termp->Filedes)) { STRUCT_WINSIZE size; errno = 0; do { if (ioctl(termp->Filedes, IOCTL_WINSIZE, &size) >= 0) { *linep = ((sp != 0 && sp->_filtered) ? 1 : WINSIZE_ROWS(size)); *colp = WINSIZE_COLS(size); T(("SYS screen size: environment LINES = %d COLUMNS = %d", *linep, *colp)); break; } } while (errno == EINTR); } } #endif /* HAVE_SIZECHANGE */ if (useEnv) { if (useTioctl) { /* * If environment variables are used, update them. */ if ((sp == 0 || !sp->_filtered) && _nc_getenv_num("LINES") > 0) { _nc_setenv_num("LINES", *linep); } if (_nc_getenv_num("COLUMNS") > 0) { _nc_setenv_num("COLUMNS", *colp); } } /* * Finally, look for environment variables. * * Solaris lets users override either dimension with an environment * variable. */ if ((value = _nc_getenv_num("LINES")) > 0) { *linep = value; T(("screen size: environment LINES = %d", *linep)); } if ((value = _nc_getenv_num("COLUMNS")) > 0) { *colp = value; T(("screen size: environment COLUMNS = %d", *colp)); } } /* if we can't get dynamic info about the size, use static */ if (*linep <= 0) { *linep = (int) lines; } if (*colp <= 0) { *colp = (int) columns; } /* the ultimate fallback, assume fixed 24x80 size */ if (*linep <= 0) { *linep = 24; } if (*colp <= 0) { *colp = 80; } /* * Put the derived values back in the screen-size caps, so * tigetnum() and tgetnum() will do the right thing. */ lines = (short) (*linep); columns = (short) (*colp); } T(("screen size is %dx%d", *linep, *colp)); return OK; } static int drv_getsize(TERMINAL_CONTROL_BLOCK * TCB, int *l, int *c) { AssertTCB(); assert(l != 0 && c != 0); *l = lines; *c = columns; return OK; } static int drv_setsize(TERMINAL_CONTROL_BLOCK * TCB, int l, int c) { AssertTCB(); lines = (short) l; columns = (short) c; return OK; } static int drv_sgmode(TERMINAL_CONTROL_BLOCK * TCB, int setFlag, TTY * buf) { SCREEN *sp = TCB->csp; TERMINAL *_term = (TERMINAL *) TCB; int result = OK; AssertTCB(); if (setFlag) { for (;;) { if (SET_TTY(_term->Filedes, buf) != 0) { if (errno == EINTR) continue; if (errno == ENOTTY) { if (sp) sp->_notty = TRUE; } result = ERR; } break; } } else { for (;;) { if (GET_TTY(_term->Filedes, buf) != 0) { if (errno == EINTR) continue; result = ERR; } break; } } return result; } static int drv_mode(TERMINAL_CONTROL_BLOCK * TCB, int progFlag, int defFlag) { SCREEN *sp; TERMINAL *_term = (TERMINAL *) TCB; int code = ERR; AssertTCB(); sp = TCB->csp; if (progFlag) /* prog mode */ { if (defFlag) { /* def_prog_mode */ /* * Turn off the XTABS bit in the tty structure if it was on. */ if ((drv_sgmode(TCB, FALSE, &(_term->Nttyb)) == OK)) { #ifdef TERMIOS _term->Nttyb.c_oflag &= (unsigned) ~OFLAGS_TABS; #else _term->Nttyb.sg_flags &= (unsigned) ~XTABS; #endif code = OK; } } else { /* reset_prog_mode */ if (drv_sgmode(TCB, TRUE, &(_term->Nttyb)) == OK) { if (sp) { if (sp->_keypad_on) _nc_keypad(sp, TRUE); } code = OK; } } } else { /* shell mode */ if (defFlag) { /* def_shell_mode */ /* * If XTABS was on, remove the tab and backtab capabilities. */ if (drv_sgmode(TCB, FALSE, &(_term->Ottyb)) == OK) { #ifdef TERMIOS if (_term->Ottyb.c_oflag & OFLAGS_TABS) tab = back_tab = NULL; #else if (_term->Ottyb.sg_flags & XTABS) tab = back_tab = NULL; #endif code = OK; } } else { /* reset_shell_mode */ if (sp) { _nc_keypad(sp, FALSE); NCURSES_SP_NAME(_nc_flush) (sp); } code = drv_sgmode(TCB, TRUE, &(_term->Ottyb)); } } return (code); } static void drv_wrap(SCREEN *sp) { if (sp) { sp->_mouse_wrap(sp); NCURSES_SP_NAME(_nc_screen_wrap) (sp); NCURSES_SP_NAME(_nc_mvcur_wrap) (sp); /* wrap up cursor addressing */ } } static void drv_release(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED) { } # define SGR0_TEST(mode) (mode != 0) && (exit_attribute_mode == 0 || strcmp(mode, exit_attribute_mode)) static void drv_screen_init(SCREEN *sp) { TERMINAL_CONTROL_BLOCK *TCB = TCBOf(sp); AssertTCB(); /* * Check for mismatched graphic-rendition capabilities. Most SVr4 * terminfo trees contain entries that have rmul or rmso equated to * sgr0 (Solaris curses copes with those entries). We do this only * for curses, since many termcap applications assume that * smso/rmso and smul/rmul are paired, and will not function * properly if we remove rmso or rmul. Curses applications * shouldn't be looking at this detail. */ sp->_use_rmso = SGR0_TEST(exit_standout_mode); sp->_use_rmul = SGR0_TEST(exit_underline_mode); /* * Check whether we can optimize scrolling under dumb terminals in * case we do not have any of these capabilities, scrolling * optimization will be useless. */ sp->_scrolling = ((scroll_forward && scroll_reverse) || ((parm_rindex || parm_insert_line || insert_line) && (parm_index || parm_delete_line || delete_line))); NCURSES_SP_NAME(baudrate) (sp); NCURSES_SP_NAME(_nc_mvcur_init) (sp); /* initialize terminal to a sane state */ NCURSES_SP_NAME(_nc_screen_init) (sp); } static void drv_init(TERMINAL_CONTROL_BLOCK * TCB) { TERMINAL *trm; AssertTCB(); trm = (TERMINAL *) TCB; TCB->info.initcolor = VALID_STRING(initialize_color); TCB->info.canchange = can_change; TCB->info.hascolor = ((VALID_NUMERIC(max_colors) && VALID_NUMERIC(max_pairs) && (((set_foreground != NULL) && (set_background != NULL)) || ((set_a_foreground != NULL) && (set_a_background != NULL)) || set_color_pair)) ? TRUE : FALSE); TCB->info.caninit = !(exit_ca_mode && non_rev_rmcup); TCB->info.maxpairs = VALID_NUMERIC(max_pairs) ? max_pairs : 0; TCB->info.maxcolors = VALID_NUMERIC(max_colors) ? max_colors : 0; TCB->info.numlabels = VALID_NUMERIC(num_labels) ? num_labels : 0; TCB->info.labelwidth = VALID_NUMERIC(label_width) ? label_width : 0; TCB->info.labelheight = VALID_NUMERIC(label_height) ? label_height : 0; TCB->info.nocolorvideo = VALID_NUMERIC(no_color_video) ? no_color_video : 0; TCB->info.tabsize = VALID_NUMERIC(init_tabs) ? (int) init_tabs : 8; TCB->info.defaultPalette = hue_lightness_saturation ? _nc_hls_palette : _nc_cga_palette; /* * If an application calls setupterm() rather than initscr() or * newterm(), we will not have the def_prog_mode() call in * _nc_setupscreen(). Do it now anyway, so we can initialize the * baudrate. */ if (NC_ISATTY(trm->Filedes)) { TCB->drv->td_mode(TCB, TRUE, TRUE); } } #define MAX_PALETTE 8 #define InPalette(n) ((n) >= 0 && (n) < MAX_PALETTE) static void drv_initpair(TERMINAL_CONTROL_BLOCK * TCB, int pair, int f, int b) { SCREEN *sp; AssertTCB(); SetSP(); if ((initialize_pair != NULL) && InPalette(f) && InPalette(b)) { const color_t *tp = InfoOf(sp).defaultPalette; TR(TRACE_ATTRS, ("initializing pair: pair = %d, fg=(%d,%d,%d), bg=(%d,%d,%d)", pair, tp[f].red, tp[f].green, tp[f].blue, tp[b].red, tp[b].green, tp[b].blue)); NCURSES_PUTP2("initialize_pair", TPARM_7(initialize_pair, pair, tp[f].red, tp[f].green, tp[f].blue, tp[b].red, tp[b].green, tp[b].blue)); } } static int default_fg(SCREEN *sp) { #if NCURSES_EXT_FUNCS return (sp != 0) ? sp->_default_fg : COLOR_WHITE; #else return COLOR_WHITE; #endif } static int default_bg(SCREEN *sp) { #if NCURSES_EXT_FUNCS return sp != 0 ? sp->_default_bg : COLOR_BLACK; #else return COLOR_BLACK; #endif } static void drv_initcolor(TERMINAL_CONTROL_BLOCK * TCB, int color, int r, int g, int b) { SCREEN *sp = TCB->csp; AssertTCB(); if (initialize_color != NULL) { NCURSES_PUTP2("initialize_color", TPARM_4(initialize_color, color, r, g, b)); } } static void drv_do_color(TERMINAL_CONTROL_BLOCK * TCB, int old_pair, int pair, int reverse, NCURSES_SP_OUTC outc) { SCREEN *sp = TCB->csp; NCURSES_COLOR_T fg = COLOR_DEFAULT; NCURSES_COLOR_T bg = COLOR_DEFAULT; NCURSES_COLOR_T old_fg, old_bg; AssertTCB(); if (sp == 0) return; if (pair < 0 || pair >= COLOR_PAIRS) { return; } else if (pair != 0) { if (set_color_pair) { TPUTS_TRACE("set_color_pair"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(set_color_pair, pair), 1, outc); return; } else if (sp != 0) { NCURSES_SP_NAME(pair_content) (NCURSES_SP_ARGx (short) pair, &fg, &bg); } } if (old_pair >= 0 && sp != 0 && NCURSES_SP_NAME(pair_content) (NCURSES_SP_ARGx (short) old_pair, &old_fg, &old_bg) !=ERR) { if ((isDefaultColor(fg) && !isDefaultColor(old_fg)) || (isDefaultColor(bg) && !isDefaultColor(old_bg))) { #if NCURSES_EXT_FUNCS /* * A minor optimization - but extension. If "AX" is specified in * the terminal description, treat it as screen's indicator of ECMA * SGR 39 and SGR 49, and assume the two sequences are independent. */ if (sp->_has_sgr_39_49 && isDefaultColor(old_bg) && !isDefaultColor(old_fg)) { NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx "\033[39m", 1, outc); } else if (sp->_has_sgr_39_49 && isDefaultColor(old_fg) && !isDefaultColor(old_bg)) { NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx "\033[49m", 1, outc); } else #endif drv_rescol(TCB); } } else { drv_rescol(TCB); if (old_pair < 0) return; } #if NCURSES_EXT_FUNCS if (isDefaultColor(fg)) fg = (NCURSES_COLOR_T) default_fg(sp); if (isDefaultColor(bg)) bg = (NCURSES_COLOR_T) default_bg(sp); #endif if (reverse) { NCURSES_COLOR_T xx = fg; fg = bg; bg = xx; } TR(TRACE_ATTRS, ("setting colors: pair = %d, fg = %d, bg = %d", pair, fg, bg)); if (!isDefaultColor(fg)) { drv_setcolor(TCB, TRUE, fg, outc); } if (!isDefaultColor(bg)) { drv_setcolor(TCB, FALSE, bg, outc); } } #define xterm_kmous "\033[M" static void init_xterm_mouse(SCREEN *sp) { sp->_mouse_type = M_XTERM; sp->_mouse_xtermcap = NCURSES_SP_NAME(tigetstr) (NCURSES_SP_ARGx "XM"); if (!VALID_STRING(sp->_mouse_xtermcap)) sp->_mouse_xtermcap = "\033[?1000%?%p1%{1}%=%th%el%;"; } static void drv_initmouse(TERMINAL_CONTROL_BLOCK * TCB) { SCREEN *sp; AssertTCB(); SetSP(); /* we know how to recognize mouse events under "xterm" */ if (sp != 0) { if (key_mouse != 0) { if (!strcmp(key_mouse, xterm_kmous) || strstr(TerminalOf(sp)->type.term_names, "xterm") != 0) { init_xterm_mouse(sp); } } else if (strstr(TerminalOf(sp)->type.term_names, "xterm") != 0) { if (_nc_add_to_try(&(sp->_keytry), xterm_kmous, KEY_MOUSE) == OK) init_xterm_mouse(sp); } } } static int drv_testmouse(TERMINAL_CONTROL_BLOCK * TCB, int delay EVENTLIST_2nd(_nc_eventlist * evl)) { int rc = 0; SCREEN *sp; AssertTCB(); SetSP(); #if USE_SYSMOUSE if ((sp->_mouse_type == M_SYSMOUSE) && (sp->_sysmouse_head < sp->_sysmouse_tail)) { rc = TW_MOUSE; } else #endif { rc = TCBOf(sp)->drv->td_twait(TCBOf(sp), TWAIT_MASK, delay, (int *) 0 EVENTLIST_2nd(evl)); #if USE_SYSMOUSE if ((sp->_mouse_type == M_SYSMOUSE) && (sp->_sysmouse_head < sp->_sysmouse_tail) && (rc == 0) && (errno == EINTR)) { rc |= TW_MOUSE; } #endif } return rc; } static int drv_mvcur(TERMINAL_CONTROL_BLOCK * TCB, int yold, int xold, int ynew, int xnew) { SCREEN *sp = TCB->csp; AssertTCB(); return NCURSES_SP_NAME(_nc_mvcur) (sp, yold, xold, ynew, xnew); } static void drv_hwlabel(TERMINAL_CONTROL_BLOCK * TCB, int labnum, char *text) { SCREEN *sp = TCB->csp; AssertTCB(); if (labnum > 0 && labnum <= num_labels) { NCURSES_PUTP2("plab_norm", TPARM_2(plab_norm, labnum, text)); } } static void drv_hwlabelOnOff(TERMINAL_CONTROL_BLOCK * TCB, int OnFlag) { SCREEN *sp = TCB->csp; AssertTCB(); if (OnFlag) { NCURSES_PUTP2("label_on", label_on); } else { NCURSES_PUTP2("label_off", label_off); } } static chtype drv_conattr(TERMINAL_CONTROL_BLOCK * TCB) { SCREEN *sp = TCB->csp; chtype attrs = A_NORMAL; AssertTCB(); if (enter_alt_charset_mode) attrs |= A_ALTCHARSET; if (enter_blink_mode) attrs |= A_BLINK; if (enter_bold_mode) attrs |= A_BOLD; if (enter_dim_mode) attrs |= A_DIM; if (enter_reverse_mode) attrs |= A_REVERSE; if (enter_standout_mode) attrs |= A_STANDOUT; if (enter_protected_mode) attrs |= A_PROTECT; if (enter_secure_mode) attrs |= A_INVIS; if (enter_underline_mode) attrs |= A_UNDERLINE; if (sp && sp->_coloron) attrs |= A_COLOR; #if USE_ITALIC if (enter_italics_mode) attrs |= A_ITALIC; #endif return (attrs); } static void drv_setfilter(TERMINAL_CONTROL_BLOCK * TCB) { AssertTCB(); clear_screen = 0; cursor_down = parm_down_cursor = 0; cursor_address = 0; cursor_up = parm_up_cursor = 0; row_address = 0; cursor_home = carriage_return; } static void drv_initacs(TERMINAL_CONTROL_BLOCK * TCB, chtype *real_map, chtype *fake_map) { SCREEN *sp = TCB->csp; AssertTCB(); assert(sp != 0); if (ena_acs != NULL) { NCURSES_PUTP2("ena_acs", ena_acs); } #if NCURSES_EXT_FUNCS /* * Linux console "supports" the "PC ROM" character set by the coincidence * that smpch/rmpch and smacs/rmacs have the same values. ncurses has * no codepage support (see SCO Merge for an example). Outside of the * values defined in acsc, there are no definitions for the "PC ROM" * character set (assumed by some applications to be codepage 437), but we * allow those applications to use those codepoints. * * test/blue.c uses this feature. */ #define PCH_KLUDGE(a,b) (a != 0 && b != 0 && !strcmp(a,b)) if (PCH_KLUDGE(enter_pc_charset_mode, enter_alt_charset_mode) && PCH_KLUDGE(exit_pc_charset_mode, exit_alt_charset_mode)) { size_t i; for (i = 1; i < ACS_LEN; ++i) { if (real_map[i] == 0) { real_map[i] = (chtype) i; if (real_map != fake_map) { if (sp != 0) sp->_screen_acs_map[i] = TRUE; } } } } #endif if (acs_chars != NULL) { size_t i = 0; size_t length = strlen(acs_chars); while (i + 1 < length) { if (acs_chars[i] != 0 && UChar(acs_chars[i]) < ACS_LEN) { real_map[UChar(acs_chars[i])] = UChar(acs_chars[i + 1]) | A_ALTCHARSET; if (sp != 0) sp->_screen_acs_map[UChar(acs_chars[i])] = TRUE; } i += 2; } } #ifdef TRACE /* Show the equivalent mapping, noting if it does not match the * given attribute, whether by re-ordering or duplication. */ if (USE_TRACEF(TRACE_CALLS)) { size_t n, m; char show[ACS_LEN * 2 + 1]; for (n = 1, m = 0; n < ACS_LEN; n++) { if (real_map[n] != 0) { show[m++] = (char) n; show[m++] = (char) ChCharOf(real_map[n]); } } show[m] = 0; if (acs_chars == NULL || strcmp(acs_chars, show)) _tracef("%s acs_chars %s", (acs_chars == NULL) ? "NULL" : "READ", _nc_visbuf(acs_chars)); _tracef("%s acs_chars %s", (acs_chars == NULL) ? "NULL" : (strcmp(acs_chars, show) ? "DIFF" : "SAME"), _nc_visbuf(show)); _nc_unlock_global(tracef); } #endif /* TRACE */ } #define ENSURE_TINFO(sp) (TCBOf(sp)->drv->isTerminfo) NCURSES_EXPORT(void) _nc_cookie_init(SCREEN *sp) { bool support_cookies = USE_XMC_SUPPORT; TERMINAL_CONTROL_BLOCK *TCB = (TERMINAL_CONTROL_BLOCK *) (sp->_term); if (sp == 0 || !ENSURE_TINFO(sp)) return; #if USE_XMC_SUPPORT /* * If we have no magic-cookie support compiled-in, or if it is suppressed * in the environment, reset the support-flag. */ if (magic_cookie_glitch >= 0) { if (getenv("NCURSES_NO_MAGIC_COOKIE") != 0) { support_cookies = FALSE; } } #endif if (!support_cookies && magic_cookie_glitch >= 0) { T(("will disable attributes to work w/o magic cookies")); } if (magic_cookie_glitch > 0) { /* tvi, wyse */ sp->_xmc_triggers = sp->_ok_attributes & XMC_CONFLICT; #if 0 /* * We "should" treat colors as an attribute. The wyse350 (and its * clones) appear to be the only ones that have both colors and magic * cookies. */ if (has_colors()) { sp->_xmc_triggers |= A_COLOR; } #endif sp->_xmc_suppress = sp->_xmc_triggers & (chtype) ~(A_BOLD); T(("magic cookie attributes %s", _traceattr(sp->_xmc_suppress))); /* * Supporting line-drawing may be possible. But make the regular * video attributes work first. */ acs_chars = ABSENT_STRING; ena_acs = ABSENT_STRING; enter_alt_charset_mode = ABSENT_STRING; exit_alt_charset_mode = ABSENT_STRING; #if USE_XMC_SUPPORT /* * To keep the cookie support simple, suppress all of the optimization * hooks except for clear_screen and the cursor addressing. */ if (support_cookies) { clr_eol = ABSENT_STRING; clr_eos = ABSENT_STRING; set_attributes = ABSENT_STRING; } #endif } else if (magic_cookie_glitch == 0) { /* hpterm */ } /* * If magic cookies are not supported, cancel the strings that set * video attributes. */ if (!support_cookies && magic_cookie_glitch >= 0) { magic_cookie_glitch = ABSENT_NUMERIC; set_attributes = ABSENT_STRING; enter_blink_mode = ABSENT_STRING; enter_bold_mode = ABSENT_STRING; enter_dim_mode = ABSENT_STRING; enter_reverse_mode = ABSENT_STRING; enter_standout_mode = ABSENT_STRING; enter_underline_mode = ABSENT_STRING; } /* initialize normal acs before wide, since we use mapping in the latter */ #if !USE_WIDEC_SUPPORT if (_nc_unicode_locale() && _nc_locale_breaks_acs(sp->_term)) { acs_chars = NULL; ena_acs = NULL; enter_alt_charset_mode = NULL; exit_alt_charset_mode = NULL; set_attributes = NULL; } #endif } static int drv_twait(TERMINAL_CONTROL_BLOCK * TCB, int mode, int milliseconds, int *timeleft EVENTLIST_2nd(_nc_eventlist * evl)) { SCREEN *sp; AssertTCB(); SetSP(); return _nc_timed_wait(sp, mode, milliseconds, timeleft EVENTLIST_2nd(evl)); } static int drv_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf) { SCREEN *sp; unsigned char c2 = 0; int n; AssertTCB(); assert(buf); SetSP(); # if USE_PTHREADS_EINTR if ((pthread_self) && (pthread_kill) && (pthread_equal)) _nc_globals.read_thread = pthread_self(); # endif n = (int) read(sp->_ifd, &c2, (size_t) 1); #if USE_PTHREADS_EINTR _nc_globals.read_thread = 0; #endif *buf = (int) c2; return n; } static int drv_nap(TERMINAL_CONTROL_BLOCK * TCB GCC_UNUSED, int ms) { #if HAVE_NANOSLEEP { struct timespec request, remaining; request.tv_sec = ms / 1000; request.tv_nsec = (ms % 1000) * 1000000; while (nanosleep(&request, &remaining) == -1 && errno == EINTR) { request = remaining; } } #else _nc_timed_wait(0, 0, ms, (int *) 0 EVENTLIST_2nd(0)); #endif return OK; } static int __nc_putp(SCREEN *sp, const char *name GCC_UNUSED, const char *value) { int rc = ERR; if (value) { rc = NCURSES_PUTP2(name, value); } return rc; } static int __nc_putp_flush(SCREEN *sp, const char *name, const char *value) { int rc = __nc_putp(sp, name, value); if (rc != ERR) { NCURSES_SP_NAME(_nc_flush) (sp); } return rc; } static int drv_kpad(TERMINAL_CONTROL_BLOCK * TCB, int flag) { int ret = ERR; SCREEN *sp; AssertTCB(); sp = TCB->csp; if (sp) { if (flag) { (void) __nc_putp_flush(sp, "keypad_xmit", keypad_xmit); } else if (!flag && keypad_local) { (void) __nc_putp_flush(sp, "keypad_local", keypad_local); } if (flag && !sp->_tried) { _nc_init_keytry(sp); sp->_tried = TRUE; } ret = OK; } return ret; } static int drv_keyok(TERMINAL_CONTROL_BLOCK * TCB, int c, int flag) { SCREEN *sp; int code = ERR; int count = 0; char *s; AssertTCB(); SetSP(); if (c >= 0) { unsigned ch = (unsigned) c; if (flag) { while ((s = _nc_expand_try(sp->_key_ok, ch, &count, (size_t) 0)) != 0 && _nc_remove_key(&(sp->_key_ok), ch)) { code = _nc_add_to_try(&(sp->_keytry), s, ch); free(s); count = 0; if (code != OK) break; } } else { while ((s = _nc_expand_try(sp->_keytry, ch, &count, (size_t) 0)) != 0 && _nc_remove_key(&(sp->_keytry), ch)) { code = _nc_add_to_try(&(sp->_key_ok), s, ch); free(s); count = 0; if (code != OK) break; } } } return (code); } static int drv_cursorSet(TERMINAL_CONTROL_BLOCK * TCB, int vis) { SCREEN *sp; int code = ERR; AssertTCB(); SetSP(); T((T_CALLED("tinfo:drv_cursorSet(%p,%d)"), (void *) SP_PARM, vis)); if (SP_PARM != 0 && IsTermInfo(SP_PARM)) { switch (vis) { case 2: code = NCURSES_PUTP2_FLUSH("cursor_visible", cursor_visible); break; case 1: code = NCURSES_PUTP2_FLUSH("cursor_normal", cursor_normal); break; case 0: code = NCURSES_PUTP2_FLUSH("cursor_invisible", cursor_invisible); break; } } else { code = ERR; } returnCode(code); } static bool drv_kyExist(TERMINAL_CONTROL_BLOCK * TCB, int key) { bool res = FALSE; AssertTCB(); if (TCB->csp) res = TINFO_HAS_KEY(TCB->csp, key) == 0 ? FALSE : TRUE; return res; } NCURSES_EXPORT_VAR (TERM_DRIVER) _nc_TINFO_DRIVER = { TRUE, drv_Name, /* Name */ drv_CanHandle, /* CanHandle */ drv_init, /* init */ drv_release, /* release */ drv_size, /* size */ drv_sgmode, /* sgmode */ drv_conattr, /* conattr */ drv_mvcur, /* hwcur */ drv_mode, /* mode */ drv_rescol, /* rescol */ drv_rescolors, /* rescolors */ drv_setcolor, /* color */ drv_dobeepflash, /* doBeepOrFlash */ drv_initpair, /* initpair */ drv_initcolor, /* initcolor */ drv_do_color, /* docolor */ drv_initmouse, /* initmouse */ drv_testmouse, /* testmouse */ drv_setfilter, /* setfilter */ drv_hwlabel, /* hwlabel */ drv_hwlabelOnOff, /* hwlabelOnOff */ drv_doupdate, /* update */ drv_defaultcolors, /* defaultcolors */ drv_print, /* print */ drv_getsize, /* getsize */ drv_setsize, /* setsize */ drv_initacs, /* initacs */ drv_screen_init, /* scinit */ drv_wrap, /* scexit */ drv_twait, /* twait */ drv_read, /* read */ drv_nap, /* nap */ drv_kpad, /* kpad */ drv_keyok, /* kyOk */ drv_kyExist, /* kyExist */ drv_cursorSet /* cursorSet */ }; ncurses-6.0-20160213/ncurses/tinfo/parse_entry.c0000644000175100001440000007404712507771276020006 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * parse_entry.c -- compile one terminfo or termcap entry * * Get an exact in-core representation of an entry. Don't * try to resolve use or tc capabilities, that is someone * else's job. Depends on the lexical analyzer to get tokens * from the input stream. */ #define __INTERNAL_CAPS_VISIBLE #include #include #include MODULE_ID("$Id: parse_entry.c,v 1.80 2015/04/04 14:18:38 tom Exp $") #ifdef LINT static short const parametrized[] = {0}; #else #include #endif static void postprocess_termcap(TERMTYPE *, bool); static void postprocess_terminfo(TERMTYPE *); static struct name_table_entry const *lookup_fullname(const char *name); #if NCURSES_XNAMES static struct name_table_entry const * _nc_extend_names(ENTRY * entryp, char *name, int token_type) { static struct name_table_entry temp; TERMTYPE *tp = &(entryp->tterm); unsigned offset = 0; unsigned actual; unsigned tindex; unsigned first, last, n; bool found; switch (token_type) { case BOOLEAN: first = 0; last = tp->ext_Booleans; offset = tp->ext_Booleans; tindex = tp->num_Booleans; break; case NUMBER: first = tp->ext_Booleans; last = tp->ext_Numbers + first; offset = (unsigned) (tp->ext_Booleans + tp->ext_Numbers); tindex = tp->num_Numbers; break; case STRING: first = (unsigned) (tp->ext_Booleans + tp->ext_Numbers); last = tp->ext_Strings + first; offset = (unsigned) (tp->ext_Booleans + tp->ext_Numbers + tp->ext_Strings); tindex = tp->num_Strings; break; case CANCEL: actual = NUM_EXT_NAMES(tp); for (n = 0; n < actual; n++) { if (!strcmp(name, tp->ext_Names[n])) { if (n > (unsigned) (tp->ext_Booleans + tp->ext_Numbers)) { token_type = STRING; } else if (n > tp->ext_Booleans) { token_type = NUMBER; } else { token_type = BOOLEAN; } return _nc_extend_names(entryp, name, token_type); } } /* Well, we are given a cancel for a name that we don't recognize */ return _nc_extend_names(entryp, name, STRING); default: return 0; } /* Adjust the 'offset' (insertion-point) to keep the lists of extended * names sorted. */ for (n = first, found = FALSE; n < last; n++) { int cmp = strcmp(tp->ext_Names[n], name); if (cmp == 0) found = TRUE; if (cmp >= 0) { offset = n; tindex = n - first; switch (token_type) { case BOOLEAN: tindex += BOOLCOUNT; break; case NUMBER: tindex += NUMCOUNT; break; case STRING: tindex += STRCOUNT; break; } break; } } #define for_each_value(max) \ for (last = (unsigned) (max - 1); last > tindex; last--) if (!found) { switch (token_type) { case BOOLEAN: tp->ext_Booleans++; tp->num_Booleans++; TYPE_REALLOC(NCURSES_SBOOL, tp->num_Booleans, tp->Booleans); for_each_value(tp->num_Booleans) tp->Booleans[last] = tp->Booleans[last - 1]; break; case NUMBER: tp->ext_Numbers++; tp->num_Numbers++; TYPE_REALLOC(short, tp->num_Numbers, tp->Numbers); for_each_value(tp->num_Numbers) tp->Numbers[last] = tp->Numbers[last - 1]; break; case STRING: tp->ext_Strings++; tp->num_Strings++; TYPE_REALLOC(char *, tp->num_Strings, tp->Strings); for_each_value(tp->num_Strings) tp->Strings[last] = tp->Strings[last - 1]; break; } actual = NUM_EXT_NAMES(tp); TYPE_REALLOC(char *, actual, tp->ext_Names); while (--actual > offset) tp->ext_Names[actual] = tp->ext_Names[actual - 1]; tp->ext_Names[offset] = _nc_save_str(name); } temp.nte_name = tp->ext_Names[offset]; temp.nte_type = token_type; temp.nte_index = (short) tindex; temp.nte_link = -1; return &temp; } #endif /* NCURSES_XNAMES */ /* * int * _nc_parse_entry(entry, literal, silent) * * Compile one entry. Doesn't try to resolve use or tc capabilities. * * found-forward-use = FALSE * re-initialise internal arrays * get_token(); * if the token was not a name in column 1, complain and die * save names in entry's string table * while (get_token() is not EOF and not NAMES) * check for existence and type-correctness * enter cap into structure * if STRING * save string in entry's string table * push back token */ #define BAD_TC_USAGE if (!bad_tc_usage) \ { bad_tc_usage = TRUE; \ _nc_warning("Legacy termcap allows only a trailing tc= clause"); } #define MAX_NUMBER 0x7fff /* positive shorts only */ NCURSES_EXPORT(int) _nc_parse_entry(struct entry *entryp, int literal, bool silent) { int token_type; struct name_table_entry const *entry_ptr; char *ptr, *base; bool bad_tc_usage = FALSE; token_type = _nc_get_token(silent); if (token_type == EOF) return (EOF); if (token_type != NAMES) _nc_err_abort("Entry does not start with terminal names in column one"); _nc_init_entry(&entryp->tterm); entryp->cstart = _nc_comment_start; entryp->cend = _nc_comment_end; entryp->startline = _nc_start_line; DEBUG(2, ("Comment range is %ld to %ld", entryp->cstart, entryp->cend)); /* * Strip off the 2-character termcap name, if present. Originally termcap * used that as an indexing aid. We can retain 2-character terminfo names, * but note that they would be lost if we translate to/from termcap. This * feature is supposedly obsolete since "newer" BSD implementations do not * use it; however our reference for this feature is SunOS 4.x, which * implemented it. Note that the resulting terminal type was never the * 2-character name, but was instead the first alias after that. */ ptr = _nc_curr_token.tk_name; if (_nc_syntax == SYN_TERMCAP #if NCURSES_XNAMES && !_nc_user_definable #endif ) { if (ptr[2] == '|') { ptr += 3; _nc_curr_token.tk_name[2] = '\0'; } } entryp->tterm.str_table = entryp->tterm.term_names = _nc_save_str(ptr); if (entryp->tterm.str_table == 0) return (ERR); DEBUG(1, ("Starting '%s'", ptr)); /* * We do this because the one-token lookahead in the parse loop * results in the terminal type getting prematurely set to correspond * to that of the next entry. */ _nc_set_type(_nc_first_name(entryp->tterm.term_names)); /* check for overly-long names and aliases */ for (base = entryp->tterm.term_names; (ptr = strchr(base, '|')) != 0; base = ptr + 1) { if (ptr - base > MAX_ALIAS) { _nc_warning("%s `%.*s' may be too long", (base == entryp->tterm.term_names) ? "primary name" : "alias", (int) (ptr - base), base); } } entryp->nuses = 0; for (token_type = _nc_get_token(silent); token_type != EOF && token_type != NAMES; token_type = _nc_get_token(silent)) { bool is_use = (strcmp(_nc_curr_token.tk_name, "use") == 0); bool is_tc = !is_use && (strcmp(_nc_curr_token.tk_name, "tc") == 0); if (is_use || is_tc) { entryp->uses[entryp->nuses].name = _nc_save_str(_nc_curr_token.tk_valstring); entryp->uses[entryp->nuses].line = _nc_curr_line; entryp->nuses++; if (entryp->nuses > 1 && is_tc) { BAD_TC_USAGE } } else { /* normal token lookup */ entry_ptr = _nc_find_entry(_nc_curr_token.tk_name, _nc_get_hash_table(_nc_syntax)); /* * Our kluge to handle aliasing. The reason it's done * this ugly way, with a linear search, is so the hashing * machinery doesn't have to be made really complicated * (also we get better warnings this way). No point in * making this case fast, aliased caps aren't common now * and will get rarer. */ if (entry_ptr == NOTFOUND) { const struct alias *ap; if (_nc_syntax == SYN_TERMCAP) { if (entryp->nuses != 0) { BAD_TC_USAGE } for (ap = _nc_get_alias_table(TRUE); ap->from; ap++) if (strcmp(ap->from, _nc_curr_token.tk_name) == 0) { if (ap->to == (char *) 0) { _nc_warning("%s (%s termcap extension) ignored", ap->from, ap->source); goto nexttok; } entry_ptr = _nc_find_entry(ap->to, _nc_get_hash_table(TRUE)); if (entry_ptr && !silent) _nc_warning("%s (%s termcap extension) aliased to %s", ap->from, ap->source, ap->to); break; } } else { /* if (_nc_syntax == SYN_TERMINFO) */ for (ap = _nc_get_alias_table(FALSE); ap->from; ap++) if (strcmp(ap->from, _nc_curr_token.tk_name) == 0) { if (ap->to == (char *) 0) { _nc_warning("%s (%s terminfo extension) ignored", ap->from, ap->source); goto nexttok; } entry_ptr = _nc_find_entry(ap->to, _nc_get_hash_table(FALSE)); if (entry_ptr && !silent) _nc_warning("%s (%s terminfo extension) aliased to %s", ap->from, ap->source, ap->to); break; } if (entry_ptr == NOTFOUND) { entry_ptr = lookup_fullname(_nc_curr_token.tk_name); } } } #if NCURSES_XNAMES /* * If we have extended-names active, we will automatically * define a name based on its context. */ if (entry_ptr == NOTFOUND && _nc_user_definable && (entry_ptr = _nc_extend_names(entryp, _nc_curr_token.tk_name, token_type)) != 0) { if (_nc_tracing >= DEBUG_LEVEL(1)) _nc_warning("extended capability '%s'", _nc_curr_token.tk_name); } #endif /* NCURSES_XNAMES */ /* can't find this cap name, not even as an alias */ if (entry_ptr == NOTFOUND) { if (!silent) _nc_warning("unknown capability '%s'", _nc_curr_token.tk_name); continue; } /* deal with bad type/value combinations. */ if (token_type != CANCEL && entry_ptr->nte_type != token_type) { /* * Nasty special cases here handle situations in which type * information can resolve name clashes. Normal lookup * finds the last instance in the capability table of a * given name, regardless of type. find_type_entry looks * for a first matching instance with given type. So as * long as all ambiguous names occur in pairs of distinct * type, this will do the job. */ if (token_type == NUMBER && !strcmp("ma", _nc_curr_token.tk_name)) { /* tell max_attributes from arrow_key_map */ entry_ptr = _nc_find_type_entry("ma", NUMBER, _nc_syntax != 0); assert(entry_ptr != 0); } else if (token_type == STRING && !strcmp("MT", _nc_curr_token.tk_name)) { /* map terminfo's string MT to MT */ entry_ptr = _nc_find_type_entry("MT", STRING, _nc_syntax != 0); assert(entry_ptr != 0); } else if (token_type == BOOLEAN && entry_ptr->nte_type == STRING) { /* treat strings without following "=" as empty strings */ token_type = STRING; } else { /* we couldn't recover; skip this token */ if (!silent) { const char *type_name; switch (entry_ptr->nte_type) { case BOOLEAN: type_name = "boolean"; break; case STRING: type_name = "string"; break; case NUMBER: type_name = "numeric"; break; default: type_name = "unknown"; break; } _nc_warning("wrong type used for %s capability '%s'", type_name, _nc_curr_token.tk_name); } continue; } } /* now we know that the type/value combination is OK */ switch (token_type) { case CANCEL: switch (entry_ptr->nte_type) { case BOOLEAN: entryp->tterm.Booleans[entry_ptr->nte_index] = CANCELLED_BOOLEAN; break; case NUMBER: entryp->tterm.Numbers[entry_ptr->nte_index] = CANCELLED_NUMERIC; break; case STRING: entryp->tterm.Strings[entry_ptr->nte_index] = CANCELLED_STRING; break; } break; case BOOLEAN: entryp->tterm.Booleans[entry_ptr->nte_index] = TRUE; break; case NUMBER: if (_nc_curr_token.tk_valnumber > MAX_NUMBER) { entryp->tterm.Numbers[entry_ptr->nte_index] = MAX_NUMBER; } else { entryp->tterm.Numbers[entry_ptr->nte_index] = (short) _nc_curr_token.tk_valnumber; } break; case STRING: ptr = _nc_curr_token.tk_valstring; if (_nc_syntax == SYN_TERMCAP) ptr = _nc_captoinfo(_nc_curr_token.tk_name, ptr, parametrized[entry_ptr->nte_index]); entryp->tterm.Strings[entry_ptr->nte_index] = _nc_save_str(ptr); break; default: if (!silent) _nc_warning("unknown token type"); _nc_panic_mode((char) ((_nc_syntax == SYN_TERMCAP) ? ':' : ',')); continue; } } /* end else cur_token.name != "use" */ nexttok: continue; /* cannot have a label w/o statement */ } /* endwhile (not EOF and not NAMES) */ _nc_push_token(token_type); _nc_set_type(_nc_first_name(entryp->tterm.term_names)); /* * Try to deduce as much as possible from extension capabilities * (this includes obsolete BSD capabilities). Sigh...it would be more * space-efficient to call this after use resolution, but it has * to be done before entry allocation is wrapped up. */ if (!literal) { if (_nc_syntax == SYN_TERMCAP) { bool has_base_entry = FALSE; unsigned i; /* * Don't insert defaults if this is a `+' entry meant only * for inclusion in other entries (not sure termcap ever * had these, actually). */ if (strchr(entryp->tterm.term_names, '+')) has_base_entry = TRUE; else /* * Otherwise, look for a base entry that will already * have picked up defaults via translation. */ for (i = 0; i < entryp->nuses; i++) if (!strchr((char *) entryp->uses[i].name, '+')) has_base_entry = TRUE; postprocess_termcap(&entryp->tterm, has_base_entry); } else postprocess_terminfo(&entryp->tterm); } _nc_wrap_entry(entryp, FALSE); return (OK); } NCURSES_EXPORT(int) _nc_capcmp(const char *s, const char *t) /* compare two string capabilities, stripping out padding */ { if (!VALID_STRING(s) && !VALID_STRING(t)) return (0); else if (!VALID_STRING(s) || !VALID_STRING(t)) return (1); for (;;) { if (s[0] == '$' && s[1] == '<') { for (s += 2;; s++) if (!(isdigit(UChar(*s)) || *s == '.' || *s == '*' || *s == '/' || *s == '>')) break; } if (t[0] == '$' && t[1] == '<') { for (t += 2;; t++) if (!(isdigit(UChar(*t)) || *t == '.' || *t == '*' || *t == '/' || *t == '>')) break; } /* we've now pushed s and t past any padding they were pointing at */ if (*s == '\0' && *t == '\0') return (0); if (*s != *t) return (*t - *s); /* else *s == *t but one is not NUL, so continue */ s++, t++; } } static void append_acs0(string_desc * dst, int code, int src) { if (src != 0) { char temp[3]; temp[0] = (char) code; temp[1] = (char) src; temp[2] = 0; _nc_safe_strcat(dst, temp); } } static void append_acs(string_desc * dst, int code, char *src) { if (src != 0 && strlen(src) == 1) { append_acs0(dst, code, *src); } } /* * The ko capability, if present, consists of a comma-separated capability * list. For each capability, we may assume there is a keycap that sends the * string which is the value of that capability. */ #define DATA(from, to) { { from }, { to } } typedef struct { const char from[3]; const char to[6]; } assoc; static assoc const ko_xlate[] = { DATA("al", "kil1"), /* insert line key -> KEY_IL */ DATA("bt", "kcbt"), /* back tab -> KEY_BTAB */ DATA("cd", "ked"), /* clear-to-eos key -> KEY_EOL */ DATA("ce", "kel"), /* clear-to-eol key -> KEY_EOS */ DATA("cl", "kclr"), /* clear key -> KEY_CLEAR */ DATA("ct", "tbc"), /* clear all tabs -> KEY_CATAB */ DATA("dc", "kdch1"), /* delete char -> KEY_DC */ DATA("dl", "kdl1"), /* delete line -> KEY_DL */ DATA("do", "kcud1"), /* down key -> KEY_DOWN */ DATA("ei", "krmir"), /* exit insert key -> KEY_EIC */ DATA("ho", "khome"), /* home key -> KEY_HOME */ DATA("ic", "kich1"), /* insert char key -> KEY_IC */ DATA("im", "kIC"), /* insert-mode key -> KEY_SIC */ DATA("le", "kcub1"), /* le key -> KEY_LEFT */ DATA("nd", "kcuf1"), /* nd key -> KEY_RIGHT */ DATA("nl", "kent"), /* new line key -> KEY_ENTER */ DATA("st", "khts"), /* set-tab key -> KEY_STAB */ DATA("ta", ""), DATA("up", "kcuu1"), /* up-arrow key -> KEY_UP */ }; /* * This routine fills in string caps that either had defaults under * termcap or can be manufactured from obsolete termcap capabilities. * It was lifted from Ross Ridge's mytinfo package. */ static const char C_CR[] = "\r"; static const char C_LF[] = "\n"; static const char C_BS[] = "\b"; static const char C_HT[] = "\t"; /* * Note that WANTED and PRESENT are not simple inverses! If a capability * has been explicitly cancelled, it's not considered WANTED. */ #define WANTED(s) ((s) == ABSENT_STRING) #define PRESENT(s) (((s) != ABSENT_STRING) && ((s) != CANCELLED_STRING)) /* * This bit of legerdemain turns all the terminfo variable names into * references to locations in the arrays Booleans, Numbers, and Strings --- * precisely what's needed. */ #undef CUR #define CUR tp-> static void postprocess_termcap(TERMTYPE *tp, bool has_base) { char buf[MAX_LINE * 2 + 2]; string_desc result; /* * TERMCAP DEFAULTS AND OBSOLETE-CAPABILITY TRANSLATIONS * * This first part of the code is the functional inverse of the * fragment in capdefaults.c. * ---------------------------------------------------------------------- */ /* if there was a tc entry, assume we picked up defaults via that */ if (!has_base) { if (WANTED(init_3string) && termcap_init2) init_3string = _nc_save_str(termcap_init2); if (WANTED(reset_2string) && termcap_reset) reset_2string = _nc_save_str(termcap_reset); if (WANTED(carriage_return)) { if (carriage_return_delay > 0) { _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "%s$<%d>", C_CR, carriage_return_delay); carriage_return = _nc_save_str(buf); } else carriage_return = _nc_save_str(C_CR); } if (WANTED(cursor_left)) { if (backspace_delay > 0) { _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "%s$<%d>", C_BS, backspace_delay); cursor_left = _nc_save_str(buf); } else if (backspaces_with_bs == 1) cursor_left = _nc_save_str(C_BS); else if (PRESENT(backspace_if_not_bs)) cursor_left = backspace_if_not_bs; } /* vi doesn't use "do", but it does seem to use nl (or '\n') instead */ if (WANTED(cursor_down)) { if (PRESENT(linefeed_if_not_lf)) cursor_down = linefeed_if_not_lf; else if (linefeed_is_newline != 1) { if (new_line_delay > 0) { _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "%s$<%d>", C_LF, new_line_delay); cursor_down = _nc_save_str(buf); } else cursor_down = _nc_save_str(C_LF); } } if (WANTED(scroll_forward) && crt_no_scrolling != 1) { if (PRESENT(linefeed_if_not_lf)) cursor_down = linefeed_if_not_lf; else if (linefeed_is_newline != 1) { if (new_line_delay > 0) { _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "%s$<%d>", C_LF, new_line_delay); scroll_forward = _nc_save_str(buf); } else scroll_forward = _nc_save_str(C_LF); } } if (WANTED(newline)) { if (linefeed_is_newline == 1) { if (new_line_delay > 0) { _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "%s$<%d>", C_LF, new_line_delay); newline = _nc_save_str(buf); } else newline = _nc_save_str(C_LF); } else if (PRESENT(carriage_return) && PRESENT(scroll_forward)) { _nc_str_init(&result, buf, sizeof(buf)); if (_nc_safe_strcat(&result, carriage_return) && _nc_safe_strcat(&result, scroll_forward)) newline = _nc_save_str(buf); } else if (PRESENT(carriage_return) && PRESENT(cursor_down)) { _nc_str_init(&result, buf, sizeof(buf)); if (_nc_safe_strcat(&result, carriage_return) && _nc_safe_strcat(&result, cursor_down)) newline = _nc_save_str(buf); } } } /* * Inverse of capdefaults.c code ends here. * ---------------------------------------------------------------------- * * TERMCAP-TO TERMINFO MAPPINGS FOR SOURCE TRANSLATION * * These translations will *not* be inverted by tgetent(). */ if (!has_base) { /* * We wait until now to decide if we've got a working cr because even * one that doesn't work can be used for newline. Unfortunately the * space allocated for it is wasted. */ if (return_does_clr_eol == 1 || no_correctly_working_cr == 1) carriage_return = ABSENT_STRING; /* * Supposedly most termcap entries have ta now and '\t' is no longer a * default, but it doesn't seem to be true... */ if (WANTED(tab)) { if (horizontal_tab_delay > 0) { _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "%s$<%d>", C_HT, horizontal_tab_delay); tab = _nc_save_str(buf); } else tab = _nc_save_str(C_HT); } if (init_tabs == ABSENT_NUMERIC && has_hardware_tabs == TRUE) init_tabs = 8; /* * Assume we can beep with ^G unless we're given bl@. */ if (WANTED(bell)) bell = _nc_save_str("\007"); } /* * Translate the old termcap :pt: capability to it#8 + ht=\t */ if (has_hardware_tabs == TRUE) { if (init_tabs != 8 && init_tabs != ABSENT_NUMERIC) _nc_warning("hardware tabs with a width other than 8: %d", init_tabs); else { if (tab && _nc_capcmp(tab, C_HT)) _nc_warning("hardware tabs with a non-^I tab string %s", _nc_visbuf(tab)); else { if (WANTED(tab)) tab = _nc_save_str(C_HT); init_tabs = 8; } } } /* * Now translate the ko capability, if there is one. This * isn't from mytinfo... */ if (PRESENT(other_non_function_keys)) { char *base; char *bp, *cp, *dp; struct name_table_entry const *from_ptr; struct name_table_entry const *to_ptr; char buf2[MAX_TERMINFO_LENGTH]; bool foundim; /* we're going to use this for a special case later */ dp = strchr(other_non_function_keys, 'i'); foundim = (dp != 0) && (dp[1] == 'm'); /* look at each comma-separated capability in the ko string... */ for (base = other_non_function_keys; (cp = strchr(base, ',')) != 0; base = cp + 1) { size_t len = (unsigned) (cp - base); size_t n; assoc const *ap = 0; for (n = 0; n < SIZEOF(ko_xlate); ++n) { if (len == strlen(ko_xlate[n].from) && strncmp(ko_xlate[n].from, base, len) == 0) { ap = ko_xlate + n; break; } } if (ap == 0) { _nc_warning("unknown capability `%.*s' in ko string", (int) len, base); continue; } else if (ap->to[0] == '\0') /* ignore it */ continue; /* now we know we found a match in ko_table, so... */ from_ptr = _nc_find_entry(ap->from, _nc_get_hash_table(TRUE)); to_ptr = _nc_find_entry(ap->to, _nc_get_hash_table(FALSE)); if (!from_ptr || !to_ptr) /* should never happen! */ _nc_err_abort("ko translation table is invalid, I give up"); if (WANTED(tp->Strings[from_ptr->nte_index])) { _nc_warning("no value for ko capability %s", ap->from); continue; } if (tp->Strings[to_ptr->nte_index]) { /* There's no point in warning about it if it's the same * string; that's just an inefficiency. */ if (strcmp( tp->Strings[from_ptr->nte_index], tp->Strings[to_ptr->nte_index]) != 0) _nc_warning("%s (%s) already has an explicit value %s, ignoring ko", ap->to, ap->from, _nc_visbuf(tp->Strings[to_ptr->nte_index])); continue; } /* * The magic moment -- copy the mapped key string over, * stripping out padding. */ for (dp = buf2, bp = tp->Strings[from_ptr->nte_index]; *bp; bp++) { if (bp[0] == '$' && bp[1] == '<') { while (*bp && *bp != '>') { ++bp; } } else *dp++ = *bp; } *dp = '\0'; tp->Strings[to_ptr->nte_index] = _nc_save_str(buf2); } /* * Note: ko=im and ko=ic both want to grab the `Insert' * keycap. There's a kich1 but no ksmir, so the ic capability * got mapped to kich1 and im to kIC to avoid a collision. * If the description has im but not ic, hack kIC back to kich1. */ if (foundim && WANTED(key_ic) && key_sic) { key_ic = key_sic; key_sic = ABSENT_STRING; } } if (!has_base) { if (!hard_copy) { if (WANTED(key_backspace)) key_backspace = _nc_save_str(C_BS); if (WANTED(key_left)) key_left = _nc_save_str(C_BS); if (WANTED(key_down)) key_down = _nc_save_str(C_LF); } } /* * Translate XENIX forms characters. */ if (PRESENT(acs_ulcorner) || PRESENT(acs_llcorner) || PRESENT(acs_urcorner) || PRESENT(acs_lrcorner) || PRESENT(acs_ltee) || PRESENT(acs_rtee) || PRESENT(acs_btee) || PRESENT(acs_ttee) || PRESENT(acs_hline) || PRESENT(acs_vline) || PRESENT(acs_plus)) { char buf2[MAX_TERMCAP_LENGTH]; _nc_str_init(&result, buf2, sizeof(buf2)); _nc_safe_strcat(&result, acs_chars); append_acs(&result, 'j', acs_lrcorner); append_acs(&result, 'k', acs_urcorner); append_acs(&result, 'l', acs_ulcorner); append_acs(&result, 'm', acs_llcorner); append_acs(&result, 'n', acs_plus); append_acs(&result, 'q', acs_hline); append_acs(&result, 't', acs_ltee); append_acs(&result, 'u', acs_rtee); append_acs(&result, 'v', acs_btee); append_acs(&result, 'w', acs_ttee); append_acs(&result, 'x', acs_vline); if (buf2[0]) { acs_chars = _nc_save_str(buf2); _nc_warning("acsc string synthesized from XENIX capabilities"); } } else if (acs_chars == 0 && enter_alt_charset_mode != 0 && exit_alt_charset_mode != 0) { acs_chars = _nc_save_str(VT_ACSC); } } static void postprocess_terminfo(TERMTYPE *tp) { /* * TERMINFO-TO-TERMINFO MAPPINGS FOR SOURCE TRANSLATION * ---------------------------------------------------------------------- */ /* * Translate AIX forms characters. */ if (PRESENT(box_chars_1)) { char buf2[MAX_TERMCAP_LENGTH]; string_desc result; _nc_str_init(&result, buf2, sizeof(buf2)); _nc_safe_strcat(&result, acs_chars); append_acs0(&result, 'l', box_chars_1[0]); /* ACS_ULCORNER */ append_acs0(&result, 'q', box_chars_1[1]); /* ACS_HLINE */ append_acs0(&result, 'k', box_chars_1[2]); /* ACS_URCORNER */ append_acs0(&result, 'x', box_chars_1[3]); /* ACS_VLINE */ append_acs0(&result, 'j', box_chars_1[4]); /* ACS_LRCORNER */ append_acs0(&result, 'm', box_chars_1[5]); /* ACS_LLCORNER */ append_acs0(&result, 'w', box_chars_1[6]); /* ACS_TTEE */ append_acs0(&result, 'u', box_chars_1[7]); /* ACS_RTEE */ append_acs0(&result, 'v', box_chars_1[8]); /* ACS_BTEE */ append_acs0(&result, 't', box_chars_1[9]); /* ACS_LTEE */ append_acs0(&result, 'n', box_chars_1[10]); /* ACS_PLUS */ if (buf2[0]) { acs_chars = _nc_save_str(buf2); _nc_warning("acsc string synthesized from AIX capabilities"); box_chars_1 = ABSENT_STRING; } } /* * ---------------------------------------------------------------------- */ } /* * Do a linear search through the terminfo tables to find a given full-name. * We don't expect to do this often, so there's no hashing function. * * In effect, this scans through the 3 lists of full-names, and looks them * up in _nc_info_table, which is organized so that the nte_index fields are * sorted, but the nte_type fields are not necessarily grouped together. */ static struct name_table_entry const * lookup_fullname(const char *find) { int state = -1; for (;;) { int count = 0; NCURSES_CONST char *const *names; switch (++state) { case BOOLEAN: names = boolfnames; break; case STRING: names = strfnames; break; case NUMBER: names = numfnames; break; default: return NOTFOUND; } for (count = 0; names[count] != 0; count++) { if (!strcmp(names[count], find)) { struct name_table_entry const *entry_ptr = _nc_get_table(FALSE); while (entry_ptr->nte_type != state || entry_ptr->nte_index != count) entry_ptr++; return entry_ptr; } } } } /* parse_entry.c ends here */ ncurses-6.0-20160213/ncurses/tinfo/lib_tputs.c0000644000175100001440000002626712650770520017447 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * tputs.c * delay_output() * _nc_outch() * tputs() * */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif #include #include /* ospeed */ #include MODULE_ID("$Id: lib_tputs.c,v 1.97 2016/01/23 21:32:00 tom Exp $") NCURSES_EXPORT_VAR(char) PC = 0; /* used by termcap library */ NCURSES_EXPORT_VAR(NCURSES_OSPEED) ospeed = 0; /* used by termcap library */ NCURSES_EXPORT_VAR(int) _nc_nulls_sent = 0; /* used by 'tack' program */ #if NCURSES_NO_PADDING NCURSES_EXPORT(void) _nc_set_no_padding(SCREEN *sp) { bool no_padding = (getenv("NCURSES_NO_PADDING") != 0); if (sp) sp->_no_padding = no_padding; else _nc_prescreen._no_padding = no_padding; TR(TRACE_CHARPUT | TRACE_MOVE, ("padding will%s be used", GetNoPadding(sp) ? " not" : "")); } #endif #if NCURSES_SP_FUNCS #define SetOutCh(func) if (SP_PARM) SP_PARM->_outch = func; else _nc_prescreen._outch = func #define GetOutCh() (SP_PARM ? SP_PARM->_outch : _nc_prescreen._outch) #else #define SetOutCh(func) static_outch = func #define GetOutCh() static_outch static NCURSES_SP_OUTC static_outch = NCURSES_SP_NAME(_nc_outch); #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(delay_output) (NCURSES_SP_DCLx int ms) { T((T_CALLED("delay_output(%p,%d)"), (void *) SP_PARM, ms)); if (!HasTInfoTerminal(SP_PARM)) returnCode(ERR); if (no_pad_char) { NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG); napms(ms); } else { NCURSES_SP_OUTC my_outch = GetOutCh(); register int nullcount; nullcount = (ms * _nc_baudrate(ospeed)) / (BAUDBYTE * 1000); for (_nc_nulls_sent += nullcount; nullcount > 0; nullcount--) my_outch(NCURSES_SP_ARGx PC); if (my_outch == NCURSES_SP_NAME(_nc_outch)) NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG); } returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) delay_output(int ms) { return NCURSES_SP_NAME(delay_output) (CURRENT_SCREEN, ms); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_DCL0) { if (SP_PARM != 0 && SP_PARM->_ofd >= 0) { if (SP_PARM->out_inuse) { char *buf = SP_PARM->out_buffer; size_t amount = SP->out_inuse; ssize_t res; SP->out_inuse = 0; while (amount) { res = write(SP_PARM->_ofd, buf, amount); if (res > 0) { /* if the write was incomplete, try again */ amount -= (size_t) res; buf += res; } else if (errno == EAGAIN) { continue; } else if (errno == EINTR) { continue; } else { break; /* an error we can not recover from */ } } } } } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_flush(void) { NCURSES_SP_NAME(_nc_flush) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_outch) (NCURSES_SP_DCLx int ch) { int rc = OK; COUNT_OUTCHARS(1); if (HasTInfoTerminal(SP_PARM) && SP_PARM != 0) { if (SP_PARM->out_buffer != 0) { if (SP_PARM->out_inuse + 1 >= SP_PARM->out_limit) NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG); SP_PARM->out_buffer[SP_PARM->out_inuse++] = (char) ch; } else { char tmp = (char) ch; /* * POSIX says write() is safe in a signal handler, but the * buffered I/O is not. */ if (write(fileno(NC_OUTPUT(SP_PARM)), &tmp, (size_t) 1) == -1) rc = ERR; } } else { char tmp = (char) ch; if (write(fileno(stdout), &tmp, (size_t) 1) == -1) rc = ERR; } return rc; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_outch(int ch) { return NCURSES_SP_NAME(_nc_outch) (CURRENT_SCREEN, ch); } #endif /* * This is used for the putp special case. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putchar) (NCURSES_SP_DCLx int ch) { (void) SP_PARM; return putchar(ch); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_putchar(int ch) { return putchar(ch); } #endif /* * putp is special - per documentation it calls tputs with putchar as the * parameter for outputting characters. This means that it uses stdio, which * is not signal-safe. Applications call this entrypoint; we do not call it * from within the library. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(putp) (NCURSES_SP_DCLx const char *string) { return NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx string, 1, NCURSES_SP_NAME(_nc_putchar)); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) putp(const char *string) { return NCURSES_SP_NAME(putp) (CURRENT_SCREEN, string); } #endif /* * Use these entrypoints rather than "putp" within the library. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putp) (NCURSES_SP_DCLx const char *name GCC_UNUSED, const char *string) { int rc = ERR; if (string != 0) { TPUTS_TRACE(name); rc = NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx string, 1, NCURSES_SP_NAME(_nc_outch)); } return rc; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_putp(const char *name, const char *string) { return NCURSES_SP_NAME(_nc_putp) (CURRENT_SCREEN, name, string); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(tputs) (NCURSES_SP_DCLx const char *string, int affcnt, NCURSES_SP_OUTC outc) { NCURSES_SP_OUTC my_outch = GetOutCh(); bool always_delay; bool normal_delay; int number; #if BSD_TPUTS int trailpad; #endif /* BSD_TPUTS */ #ifdef TRACE char addrbuf[32]; if (USE_TRACEF(TRACE_TPUTS)) { if (outc == NCURSES_SP_NAME(_nc_outch)) _nc_STRCPY(addrbuf, "_nc_outch", sizeof(addrbuf)); else _nc_SPRINTF(addrbuf, _nc_SLIMIT(sizeof(addrbuf)) "%p", TR_FUNC(outc)); if (_nc_tputs_trace) { _tracef("tputs(%s = %s, %d, %s) called", _nc_tputs_trace, _nc_visbuf(string), affcnt, addrbuf); } else { _tracef("tputs(%s, %d, %s) called", _nc_visbuf(string), affcnt, addrbuf); } TPUTS_TRACE(NULL); _nc_unlock_global(tracef); } #endif /* TRACE */ if (SP_PARM != 0 && !HasTInfoTerminal(SP_PARM)) return ERR; if (!VALID_STRING(string)) return ERR; if ( #if NCURSES_SP_FUNCS (SP_PARM != 0 && SP_PARM->_term == 0) #else cur_term == 0 #endif ) { always_delay = FALSE; normal_delay = TRUE; } else { always_delay = (string == bell) || (string == flash_screen); normal_delay = !xon_xoff && padding_baud_rate #if NCURSES_NO_PADDING && !GetNoPadding(SP_PARM) #endif && (_nc_baudrate(ospeed) >= padding_baud_rate); } #if BSD_TPUTS /* * This ugly kluge deals with the fact that some ancient BSD programs * (like nethack) actually do the likes of tputs("50") to get delays. */ trailpad = 0; if (isdigit(UChar(*string))) { while (isdigit(UChar(*string))) { trailpad = trailpad * 10 + (*string - '0'); string++; } trailpad *= 10; if (*string == '.') { string++; if (isdigit(UChar(*string))) { trailpad += (*string - '0'); string++; } while (isdigit(UChar(*string))) string++; } if (*string == '*') { trailpad *= affcnt; string++; } } #endif /* BSD_TPUTS */ SetOutCh(outc); /* redirect delay_output() */ while (*string) { if (*string != '$') (*outc) (NCURSES_SP_ARGx *string); else { string++; if (*string != '<') { (*outc) (NCURSES_SP_ARGx '$'); if (*string) (*outc) (NCURSES_SP_ARGx *string); } else { bool mandatory; string++; if ((!isdigit(UChar(*string)) && *string != '.') || !strchr(string, '>')) { (*outc) (NCURSES_SP_ARGx '$'); (*outc) (NCURSES_SP_ARGx '<'); continue; } number = 0; while (isdigit(UChar(*string))) { number = number * 10 + (*string - '0'); string++; } number *= 10; if (*string == '.') { string++; if (isdigit(UChar(*string))) { number += (*string - '0'); string++; } while (isdigit(UChar(*string))) string++; } mandatory = FALSE; while (*string == '*' || *string == '/') { if (*string == '*') { number *= affcnt; string++; } else { /* if (*string == '/') */ mandatory = TRUE; string++; } } if (number > 0 && (always_delay || normal_delay || mandatory)) NCURSES_SP_NAME(delay_output) (NCURSES_SP_ARGx number / 10); } /* endelse (*string == '<') */ } /* endelse (*string == '$') */ if (*string == '\0') break; string++; } #if BSD_TPUTS /* * Emit any BSD-style prefix padding that we've accumulated now. */ if (trailpad > 0 && (always_delay || normal_delay)) delay_output(trailpad / 10); #endif /* BSD_TPUTS */ SetOutCh(my_outch); return OK; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_outc_wrapper(SCREEN *sp, int c) { if (0 == sp) { return (ERR); } else { return sp->jump(c); } } NCURSES_EXPORT(int) tputs(const char *string, int affcnt, int (*outc) (int)) { SetSafeOutcWrapper(outc); return NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx string, affcnt, _nc_outc_wrapper); } #endif ncurses-6.0-20160213/ncurses/tinfo/lib_data.c0000644000175100001440000002441512206166470017172 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer * ****************************************************************************/ /* ** lib_data.c ** ** Common data that may/may not be allocated, but is referenced globally ** */ #include MODULE_ID("$Id: lib_data.c,v 1.66 2013/08/24 17:28:24 tom Exp $") /* * OS/2's native linker complains if we don't initialize public data when * constructing a dll (reported by J.J.G.Ripoll). */ #if USE_REENTRANT NCURSES_EXPORT(WINDOW *) NCURSES_PUBLIC_VAR(stdscr) (void) { return CURRENT_SCREEN ? StdScreen(CURRENT_SCREEN) : 0; } NCURSES_EXPORT(WINDOW *) NCURSES_PUBLIC_VAR(curscr) (void) { return CURRENT_SCREEN ? CurScreen(CURRENT_SCREEN) : 0; } NCURSES_EXPORT(WINDOW *) NCURSES_PUBLIC_VAR(newscr) (void) { return CURRENT_SCREEN ? NewScreen(CURRENT_SCREEN) : 0; } #else NCURSES_EXPORT_VAR(WINDOW *) stdscr = 0; NCURSES_EXPORT_VAR(WINDOW *) curscr = 0; NCURSES_EXPORT_VAR(WINDOW *) newscr = 0; #endif NCURSES_EXPORT_VAR(SCREEN *) _nc_screen_chain = 0; /* * The variable 'SP' will be defined as a function on systems that cannot link * data-only modules, since it is used in a lot of places within ncurses and we * cannot guarantee that any application will use any particular function. We * put the WINDOW variables in this module, because it appears that any * application that uses them will also use 'SP'. * * This module intentionally does not reference other ncurses modules, to avoid * module coupling that increases the size of the executable. */ #if BROKEN_LINKER static SCREEN *my_screen; NCURSES_EXPORT(SCREEN *) _nc_screen(void) { return my_screen; } NCURSES_EXPORT(int) _nc_alloc_screen(void) { return ((my_screen = _nc_alloc_screen_sp()) != 0); } NCURSES_EXPORT(void) _nc_set_screen(SCREEN *sp) { my_screen = sp; } #else NCURSES_EXPORT_VAR(SCREEN *) SP = NULL; /* Some linkers require initialized data... */ #endif /* *INDENT-OFF* */ #define CHARS_0s { '\0' } #define TGETENT_0 { 0L, FALSE, NULL, NULL, NULL } #define TGETENT_0s { TGETENT_0, TGETENT_0, TGETENT_0, TGETENT_0 } NCURSES_EXPORT_VAR(NCURSES_GLOBALS) _nc_globals = { 0, /* have_sigtstp */ 0, /* have_sigwinch */ 0, /* cleanup_nested */ FALSE, /* init_signals */ FALSE, /* init_screen */ NULL, /* comp_sourcename */ NULL, /* comp_termtype */ FALSE, /* have_tic_directory */ FALSE, /* keep_tic_directory */ 0, /* tic_directory */ NULL, /* dbi_list */ 0, /* dbi_size */ NULL, /* first_name */ NULL, /* keyname_table */ 0, /* init_keyname */ 0, /* slk_format */ NULL, /* safeprint_buf */ 0, /* safeprint_used */ TGETENT_0s, /* tgetent_cache */ 0, /* tgetent_index */ 0, /* tgetent_sequence */ 0, /* dbd_blob */ 0, /* dbd_list */ 0, /* dbd_size */ 0, /* dbd_time */ { { 0, 0 } }, /* dbd_vars */ #ifndef USE_SP_WINDOWLIST 0, /* _nc_windowlist */ #endif #if USE_HOME_TERMINFO NULL, /* home_terminfo */ #endif #if !USE_SAFE_SPRINTF 0, /* safeprint_cols */ 0, /* safeprint_rows */ #endif #ifdef USE_TERM_DRIVER 0, /* term_driver */ #endif #ifdef TRACE FALSE, /* init_trace */ CHARS_0s, /* trace_fname */ 0, /* trace_level */ NULL, /* trace_fp */ NULL, /* tracearg_buf */ 0, /* tracearg_used */ NULL, /* tracebuf_ptr */ 0, /* tracebuf_used */ CHARS_0s, /* tracechr_buf */ NULL, /* tracedmp_buf */ 0, /* tracedmp_used */ NULL, /* tracetry_buf */ 0, /* tracetry_used */ { CHARS_0s, CHARS_0s }, /* traceatr_color_buf */ 0, /* traceatr_color_sel */ -1, /* traceatr_color_last */ #if !defined(USE_PTHREADS) && USE_REENTRANT 0, /* nested_tracef */ #endif #endif /* TRACE */ #ifdef USE_PTHREADS PTHREAD_MUTEX_INITIALIZER, /* mutex_curses */ PTHREAD_MUTEX_INITIALIZER, /* mutex_tst_tracef */ PTHREAD_MUTEX_INITIALIZER, /* mutex_tracef */ 0, /* nested_tracef */ 0, /* use_pthreads */ #endif #if USE_PTHREADS_EINTR 0, /* read_thread */ #endif }; #define STACK_FRAME_0 { { 0 }, 0 } #define STACK_FRAME_0s { STACK_FRAME_0 } #define NUM_VARS_0s { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } #define RIPOFF_0 { 0,0,0 } #define RIPOFF_0s { RIPOFF_0 } NCURSES_EXPORT_VAR(NCURSES_PRESCREEN) _nc_prescreen = { TRUE, /* use_env */ FALSE, /* filter_mode */ A_NORMAL, /* previous_attr */ #ifndef USE_SP_RIPOFF RIPOFF_0s, /* ripoff */ NULL, /* rsp */ #endif { /* tparm_state */ #ifdef TRACE NULL, /* tname */ #endif NULL, /* tparam_base */ STACK_FRAME_0s, /* stack */ 0, /* stack_ptr */ NULL, /* out_buff */ 0, /* out_size */ 0, /* out_used */ NULL, /* fmt_buff */ 0, /* fmt_size */ NUM_VARS_0s, /* dynamic_var */ NUM_VARS_0s, /* static_vars */ }, NULL, /* saved_tty */ #if NCURSES_NO_PADDING FALSE, /* flag to set if padding disabled */ #endif 0, /* _outch */ #if BROKEN_LINKER || USE_REENTRANT NULL, /* real_acs_map */ 0, /* LINES */ 0, /* COLS */ 8, /* TABSIZE */ 1000, /* ESCDELAY */ 0, /* cur_term */ #ifdef TRACE 0L, /* _outchars */ NULL, /* _tputs_trace */ #endif #endif FALSE, /* use_tioctl */ }; /* *INDENT-ON* */ /* * wgetch() and other functions with a WINDOW* parameter may use a SCREEN* * internally, and it is useful to allow those to be invoked without switching * SCREEN's, e.g., for multi-threaded applications. */ NCURSES_EXPORT(SCREEN *) _nc_screen_of(WINDOW *win) { SCREEN *sp = 0; if (win != 0) { sp = WINDOW_EXT(win, screen); } return (sp); } /******************************************************************************/ #ifdef USE_PTHREADS static void init_global_mutexes(void) { static bool initialized = FALSE; if (!initialized) { initialized = TRUE; _nc_mutex_init(&_nc_globals.mutex_curses); _nc_mutex_init(&_nc_globals.mutex_tst_tracef); _nc_mutex_init(&_nc_globals.mutex_tracef); } } NCURSES_EXPORT(void) _nc_init_pthreads(void) { if (_nc_use_pthreads) return; # if USE_WEAK_SYMBOLS if ((pthread_mutex_init) == 0) return; if ((pthread_mutex_lock) == 0) return; if ((pthread_mutex_unlock) == 0) return; if ((pthread_mutex_trylock) == 0) return; if ((pthread_mutexattr_settype) == 0) return; # endif _nc_use_pthreads = 1; init_global_mutexes(); } /* * Use recursive mutexes if we have them - they're part of Unix98. * For the cases where we do not, _nc_mutex_trylock() is used to avoid a * deadlock, at the expense of memory leaks and unexpected failures that * may not be handled by typical clients. * * FIXME - need configure check for PTHREAD_MUTEX_RECURSIVE, define it to * PTHREAD_MUTEX_NORMAL if not supported. */ NCURSES_EXPORT(void) _nc_mutex_init(pthread_mutex_t * obj) { pthread_mutexattr_t recattr; if (_nc_use_pthreads) { pthread_mutexattr_init(&recattr); pthread_mutexattr_settype(&recattr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(obj, &recattr); } } NCURSES_EXPORT(int) _nc_mutex_lock(pthread_mutex_t * obj) { if (_nc_use_pthreads == 0) return 0; return pthread_mutex_lock(obj); } NCURSES_EXPORT(int) _nc_mutex_trylock(pthread_mutex_t * obj) { if (_nc_use_pthreads == 0) return 0; return pthread_mutex_trylock(obj); } NCURSES_EXPORT(int) _nc_mutex_unlock(pthread_mutex_t * obj) { if (_nc_use_pthreads == 0) return 0; return pthread_mutex_unlock(obj); } #endif /* USE_PTHREADS */ #if defined(USE_PTHREADS) || USE_PTHREADS_EINTR #if USE_WEAK_SYMBOLS /* * NB: sigprocmask(2) is global but pthread_sigmask(3p) * only for the calling thread. */ NCURSES_EXPORT(int) _nc_sigprocmask(int how, const sigset_t * newmask, sigset_t * oldmask) { if ((pthread_sigmask)) return pthread_sigmask(how, newmask, oldmask); else return sigprocmask(how, newmask, oldmask); } #endif #endif /* USE_PTHREADS */ ncurses-6.0-20160213/ncurses/tinfo/free_ttype.c0000644000175100001440000000632211523372217017575 0ustar tomusers/**************************************************************************** * Copyright (c) 1999-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1999-on * ****************************************************************************/ /* * free_ttype.c -- allocation functions for TERMTYPE * * _nc_free_termtype() * use_extended_names() * */ #include #include MODULE_ID("$Id: free_ttype.c,v 1.15 2011/02/06 01:08:31 tom Exp $") NCURSES_EXPORT(void) _nc_free_termtype(TERMTYPE *ptr) { T(("_nc_free_termtype(%s)", ptr->term_names)); FreeIfNeeded(ptr->str_table); FreeIfNeeded(ptr->Booleans); FreeIfNeeded(ptr->Numbers); FreeIfNeeded(ptr->Strings); #if NCURSES_XNAMES FreeIfNeeded(ptr->ext_str_table); FreeIfNeeded(ptr->ext_Names); #endif memset(ptr, 0, sizeof(TERMTYPE)); _nc_free_entry(_nc_head, ptr); } #if NCURSES_XNAMES NCURSES_EXPORT_VAR(bool) _nc_user_definable = TRUE; NCURSES_EXPORT(int) use_extended_names(bool flag) { int oldflag = _nc_user_definable; START_TRACE(); T((T_CALLED("use_extended_names(%d)"), flag)); _nc_user_definable = flag; returnBool(oldflag); } #endif ncurses-6.0-20160213/ncurses/tinfo/name_match.c0000644000175100001440000001016512150216370017515 0ustar tomusers/**************************************************************************** * Copyright (c) 1999-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1999-on * ****************************************************************************/ #include #include MODULE_ID("$Id: name_match.c,v 1.23 2013/05/25 20:20:08 tom Exp $") #define FirstName _nc_globals.first_name #if NCURSES_USE_TERMCAP && NCURSES_XNAMES static const char * skip_index(const char *name) { if ((_nc_syntax == SYN_TERMCAP) && _nc_user_definable) { const char *bar = strchr(name, '|'); if (bar != 0 && (bar - name) == 2) name = bar + 1; } return name; } #endif /* * Get the primary name from the given name list. For terminfo, this is the * first name. For termcap, this may be the second name, if the first one * happens to be two characters. */ NCURSES_EXPORT(char *) _nc_first_name(const char *const sp) { unsigned n; #if NO_LEAKS if (sp == 0) { if (FirstName != 0) { FreeAndNull(FirstName); } } else #endif { if (FirstName == 0) FirstName = typeMalloc(char, MAX_NAME_SIZE + 1); if (FirstName != 0) { const char *src = sp; #if NCURSES_USE_TERMCAP && NCURSES_XNAMES src = skip_index(sp); #endif for (n = 0; n < MAX_NAME_SIZE; n++) { if ((FirstName[n] = src[n]) == '\0' || (FirstName[n] == '|')) break; } FirstName[n] = '\0'; } } return (FirstName); } /* * Is the given name matched in namelist? */ NCURSES_EXPORT(int) _nc_name_match(const char *const namelst, const char *const name, const char *const delim) { const char *s, *d, *t; int code, found; if ((s = namelst) != 0) { while (*s != '\0') { for (d = name; *d != '\0'; d++) { if (*s != *d) break; s++; } found = FALSE; for (code = TRUE; *s != '\0'; code = FALSE, s++) { for (t = delim; *t != '\0'; t++) { if (*s == *t) { found = TRUE; break; } } if (found) break; } if (code && *d == '\0') return code; if (*s++ == 0) break; } } return FALSE; } ncurses-6.0-20160213/ncurses/tinfo/MKcaptab.awk0000644000175100001440000000726210657451647017471 0ustar tomusers############################################################################## # Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: MKcaptab.awk,v 1.20 2007/08/12 00:26:15 tom Exp $ function add_string(text) { if (text != "IGNORE") { offsets[num_strings] = offset; offset = offset + length(text) + 1; printf "%s\\0", text; } else { offsets[num_strings] = -1; } num_strings = num_strings + 1; if ((num_strings % 3) == 0) { printf "\\\n"; } return offsets[num_strings - 1]; } BEGIN { first = 1; num_aliases = 0; num_strings = 0; offset = 0; } /^[^#]/ { if (first) { printf "/* generated by MKcaptab.awk %s(%d) */\n", tablename, bigstrings; print "" if (bigstrings) { printf "static struct alias *_nc_%s_table = 0;\n", tablename; print ""; printf "static const char %s_text[] = \"\\\n", tablename; } else { printf "static const struct alias _nc_%s_table[] =\n", tablename; printf "{\n"; } first = 0; } if ($1 == tablename) { if ($3 == "IGNORE") { to = "(char *)NULL"; } else { to = "\"" $3 "\""; } if (bigstrings) { c1 = add_string($2); c2 = add_string($3); c3 = add_string($4); aliases[num_aliases] = sprintf("\t{%5d, %5d, %5d},\t /* %s */", c1, c2, c3, $5); num_aliases = num_aliases + 1; } else { printf "\t{\"%s\", %s, \"%s\"},\t /* %s */\n", $2, to, $4, $5; } } } END { if (bigstrings) { printf "\";\n\n"; printf "static const alias_table_data %s_data[] = {\n", tablename; for (n = 0; n < num_aliases; ++n) { printf "%s\n", aliases[n]; } printf "};\n\n"; } else { printf "\t{(char *)NULL, (char *)NULL, (char *)NULL}\n"; printf "};\n\n"; } } # vile:sw=4: ncurses-6.0-20160213/ncurses/tinfo/trim_sgr0.c0000644000175100001440000002247212063162055017336 0ustar tomusers/**************************************************************************** * Copyright (c) 2005-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas Dickey * ****************************************************************************/ #include #include #include MODULE_ID("$Id: trim_sgr0.c,v 1.15 2012/12/15 20:57:17 tom Exp $") #undef CUR #define CUR tp-> #define CSI 233 #define ESC 033 /* ^[ */ #define L_BRACK '[' static char * set_attribute_9(TERMTYPE *tp, int flag) { const char *value; char *result; value = tparm(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, flag); if (PRESENT(value)) result = strdup(value); else result = 0; return result; } static int is_csi(const char *s) { int result = 0; if (s != 0) { if (UChar(s[0]) == CSI) result = 1; else if (s[0] == ESC && s[1] == L_BRACK) result = 2; } return result; } static char * skip_zero(char *s) { if (s[0] == '0') { if (s[1] == ';') s += 2; else if (isalpha(UChar(s[1]))) s += 1; } return s; } static const char * skip_delay(const char *s) { if (s[0] == '$' && s[1] == '<') { s += 2; while (isdigit(UChar(*s)) || *s == '/') ++s; if (*s == '>') ++s; } return s; } /* * Improve similar_sgr a little by moving the attr-string from the beginning * to the end of the s-string. */ static bool rewrite_sgr(char *s, char *attr) { if (s != 0) { if (PRESENT(attr)) { size_t len_s = strlen(s); size_t len_a = strlen(attr); if (len_s > len_a && !strncmp(attr, s, len_a)) { unsigned n; TR(TRACE_DATABASE, ("rewrite:\n\t%s", s)); for (n = 0; n < len_s - len_a; ++n) { s[n] = s[n + len_a]; } _nc_STRCPY(s + n, attr, strlen(s) + 1); TR(TRACE_DATABASE, ("to:\n\t%s", s)); } } return TRUE; } return FALSE; /* oops */ } static bool similar_sgr(char *a, char *b) { bool result = FALSE; if (a != 0 && b != 0) { int csi_a = is_csi(a); int csi_b = is_csi(b); size_t len_a; size_t len_b; TR(TRACE_DATABASE, ("similar_sgr:\n\t%s\n\t%s", _nc_visbuf2(1, a), _nc_visbuf2(2, b))); if (csi_a != 0 && csi_b != 0 && csi_a == csi_b) { a += csi_a; b += csi_b; if (*a != *b) { a = skip_zero(a); b = skip_zero(b); } } len_a = strlen(a); len_b = strlen(b); if (len_a && len_b) { if (len_a > len_b) result = (strncmp(a, b, len_b) == 0); else result = (strncmp(a, b, len_a) == 0); } TR(TRACE_DATABASE, ("...similar_sgr: %d\n\t%s\n\t%s", result, _nc_visbuf2(1, a), _nc_visbuf2(2, b))); } return result; } static unsigned chop_out(char *string, unsigned i, unsigned j) { TR(TRACE_DATABASE, ("chop_out %d..%d from %s", i, j, _nc_visbuf(string))); while (string[j] != '\0') { string[i++] = string[j++]; } string[i] = '\0'; return i; } /* * Compare, ignoring delays. Some of the delay values are inconsistent, and * we do not want to be stopped by that. * * Returns the number of chars from 'full' that we matched. If any mismatch * occurs, return zero. */ static unsigned compare_part(const char *part, const char *full) { const char *next_part; const char *next_full; unsigned used_full = 0; unsigned used_delay = 0; while (*part != 0) { if (*part != *full) { used_full = 0; break; } /* * Adjust the return-value to allow the rare case of * stringstring * to remove the whole piece. The most common case is a delay at the * end of the string. The adjusted string will retain the delay, which * is conservative. */ if (used_delay != 0) { used_full += used_delay; used_delay = 0; } if (*part == '$' && *full == '$') { next_part = skip_delay(part); next_full = skip_delay(full); if (next_part != part && next_full != full) { used_delay += (unsigned) (next_full - full); full = next_full; part = next_part; continue; } } ++used_full; ++part; ++full; } return used_full; } /* * While 'sgr0' is the "same" as termcap 'me', there is a compatibility issue. * The sgr/sgr0 capabilities include setting/clearing alternate character set * mode. A termcap application cannot use sgr, so sgr0 strings that reset * alternate character set mode will be misinterpreted. Here, we remove those * from the more common ISO/ANSI/VT100 entries, which have sgr0 agreeing with * sgr. * * This function returns the modified sgr0 if it can be modified, a null if * an error occurs, or the original sgr0 if no change is needed. */ NCURSES_EXPORT(char *) _nc_trim_sgr0(TERMTYPE *tp) { char *result = exit_attribute_mode; T((T_CALLED("_nc_trim_sgr0()"))); if (PRESENT(exit_attribute_mode) && PRESENT(set_attributes)) { bool found = FALSE; char *on = set_attribute_9(tp, 1); char *off = set_attribute_9(tp, 0); char *end = strdup(exit_attribute_mode); char *tmp; size_t i, j, k; TR(TRACE_DATABASE, ("checking if we can trim sgr0 based on sgr")); TR(TRACE_DATABASE, ("sgr0 %s", _nc_visbuf(end))); TR(TRACE_DATABASE, ("sgr(9:off) %s", _nc_visbuf(off))); TR(TRACE_DATABASE, ("sgr(9:on) %s", _nc_visbuf(on))); if (!rewrite_sgr(on, enter_alt_charset_mode) || !rewrite_sgr(off, exit_alt_charset_mode) || !rewrite_sgr(end, exit_alt_charset_mode)) { FreeIfNeeded(off); } else if (similar_sgr(off, end) && !similar_sgr(off, on)) { TR(TRACE_DATABASE, ("adjusting sgr(9:off) : %s", _nc_visbuf(off))); result = off; /* * If rmacs is a substring of sgr(0), remove that chunk. */ if (exit_alt_charset_mode != 0) { TR(TRACE_DATABASE, ("scan for rmacs %s", _nc_visbuf(exit_alt_charset_mode))); j = strlen(off); k = strlen(exit_alt_charset_mode); if (j > k) { for (i = 0; i <= (j - k); ++i) { unsigned k2 = compare_part(exit_alt_charset_mode, off + i); if (k2 != 0) { found = TRUE; chop_out(off, (unsigned) i, (unsigned) (i + k2)); break; } } } } /* * SGR 10 would reset to normal font. */ if (!found) { if ((i = (size_t) is_csi(off)) != 0 && off[strlen(off) - 1] == 'm') { TR(TRACE_DATABASE, ("looking for SGR 10 in %s", _nc_visbuf(off))); tmp = skip_zero(off + i); if (tmp[0] == '1' && skip_zero(tmp + 1) != tmp + 1) { i = (size_t) (tmp - off); if (off[i - 1] == ';') i--; j = (size_t) (skip_zero(tmp + 1) - off); (void) chop_out(off, (unsigned) i, (unsigned) j); found = TRUE; } } } if (!found && (tmp = strstr(end, off)) != 0 && strcmp(end, off) != 0) { i = (size_t) (tmp - end); j = strlen(off); tmp = strdup(end); chop_out(tmp, (unsigned) i, (unsigned) j); free(off); result = tmp; } TR(TRACE_DATABASE, ("...adjusted sgr0 : %s", _nc_visbuf(result))); if (!strcmp(result, exit_attribute_mode)) { TR(TRACE_DATABASE, ("...same result, discard")); free(result); result = exit_attribute_mode; } } else { /* * Either the sgr does not reference alternate character set, * or it is incorrect. That's too hard to decide right now. */ free(off); } FreeIfNeeded(end); FreeIfNeeded(on); } else { /* * Possibly some applications are confused if sgr0 contains rmacs, * but that would be a different bug report -TD */ } returnPtr(result); } ncurses-6.0-20160213/ncurses/tinfo/comp_error.c0000644000175100001440000001203211721266567017603 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * comp_error.c -- Error message routines * */ #include #include MODULE_ID("$Id: comp_error.c,v 1.36 2012/02/22 22:34:31 tom Exp $") NCURSES_EXPORT_VAR(bool) _nc_suppress_warnings = FALSE; NCURSES_EXPORT_VAR(int) _nc_curr_line = 0; /* current line # in input */ NCURSES_EXPORT_VAR(int) _nc_curr_col = 0; /* current column # in input */ #define SourceName _nc_globals.comp_sourcename #define TermType _nc_globals.comp_termtype NCURSES_EXPORT(const char *) _nc_get_source(void) { return SourceName; } NCURSES_EXPORT(void) _nc_set_source(const char *const name) { FreeIfNeeded(SourceName); SourceName = strdup(name); } NCURSES_EXPORT(void) _nc_set_type(const char *const name) { if (TermType == 0) TermType = typeMalloc(char, MAX_NAME_SIZE + 1); if (TermType != 0) { TermType[0] = '\0'; if (name) strncat(TermType, name, (size_t) MAX_NAME_SIZE); } } NCURSES_EXPORT(void) _nc_get_type(char *name) { #if NO_LEAKS if (name == 0 && TermType != 0) { FreeAndNull(TermType); return; } #endif if (name != 0) _nc_STRCPY(name, TermType != 0 ? TermType : "", MAX_NAME_SIZE); } static NCURSES_INLINE void where_is_problem(void) { fprintf(stderr, "\"%s\"", SourceName ? SourceName : "?"); if (_nc_curr_line >= 0) fprintf(stderr, ", line %d", _nc_curr_line); if (_nc_curr_col >= 0) fprintf(stderr, ", col %d", _nc_curr_col); if (TermType != 0 && TermType[0] != '\0') fprintf(stderr, ", terminal '%s'", TermType); fputc(':', stderr); fputc(' ', stderr); } NCURSES_EXPORT(void) _nc_warning(const char *const fmt,...) { va_list argp; if (_nc_suppress_warnings) return; where_is_problem(); va_start(argp, fmt); vfprintf(stderr, fmt, argp); fprintf(stderr, "\n"); va_end(argp); } NCURSES_EXPORT(void) _nc_err_abort(const char *const fmt,...) { va_list argp; where_is_problem(); va_start(argp, fmt); vfprintf(stderr, fmt, argp); fprintf(stderr, "\n"); va_end(argp); exit(EXIT_FAILURE); } NCURSES_EXPORT(void) _nc_syserr_abort(const char *const fmt,...) { va_list argp; where_is_problem(); va_start(argp, fmt); vfprintf(stderr, fmt, argp); fprintf(stderr, "\n"); va_end(argp); /* If we're debugging, try to show where the problem occurred - this * will dump core. */ #if defined(TRACE) || !defined(NDEBUG) abort(); #else /* Dumping core in production code is not a good idea. */ exit(EXIT_FAILURE); #endif } #if NO_LEAKS NCURSES_EXPORT(void) _nc_comp_error_leaks(void) { FreeAndNull(SourceName); FreeAndNull(TermType); } #endif ncurses-6.0-20160213/ncurses/tinfo/lib_ti.c0000644000175100001440000001305012154660751016671 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ #include #include MODULE_ID("$Id: lib_ti.c,v 1.30 2013/06/08 16:55:05 tom Exp $") #if 0 static bool same_name(const char *a, const char *b) { fprintf(stderr, "compare(%s,%s)\n", a, b); return !strcmp(a, b); } #else #define same_name(a,b) !strcmp(a,b) #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(tigetflag) (NCURSES_SP_DCLx NCURSES_CONST char *str) { int result = ABSENT_BOOLEAN; int j = -1; T((T_CALLED("tigetflag(%p, %s)"), (void *) SP_PARM, str)); if (HasTInfoTerminal(SP_PARM)) { TERMTYPE *tp = &(TerminalOf(SP_PARM)->type); struct name_table_entry const *entry_ptr; entry_ptr = _nc_find_type_entry(str, BOOLEAN, FALSE); if (entry_ptr != 0) { j = entry_ptr->nte_index; } #if NCURSES_XNAMES else { int i; for_each_ext_boolean(i, tp) { const char *capname = ExtBoolname(tp, i, boolnames); if (same_name(str, capname)) { j = i; break; } } } #endif if (j >= 0) { /* note: setupterm forces invalid booleans to false */ result = tp->Booleans[j]; } } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) tigetflag(NCURSES_CONST char *str) { return NCURSES_SP_NAME(tigetflag) (CURRENT_SCREEN, str); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(tigetnum) (NCURSES_SP_DCLx NCURSES_CONST char *str) { int j = -1; int result = CANCELLED_NUMERIC; /* Solaris returns a -1 on error */ T((T_CALLED("tigetnum(%p, %s)"), (void *) SP_PARM, str)); if (HasTInfoTerminal(SP_PARM)) { TERMTYPE *tp = &(TerminalOf(SP_PARM)->type); struct name_table_entry const *entry_ptr; entry_ptr = _nc_find_type_entry(str, NUMBER, FALSE); if (entry_ptr != 0) { j = entry_ptr->nte_index; } #if NCURSES_XNAMES else { int i; for_each_ext_number(i, tp) { const char *capname = ExtNumname(tp, i, numnames); if (same_name(str, capname)) { j = i; break; } } } #endif if (j >= 0) { if (VALID_NUMERIC(tp->Numbers[j])) result = tp->Numbers[j]; else result = ABSENT_NUMERIC; } } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) tigetnum(NCURSES_CONST char *str) { return NCURSES_SP_NAME(tigetnum) (CURRENT_SCREEN, str); } #endif NCURSES_EXPORT(char *) NCURSES_SP_NAME(tigetstr) (NCURSES_SP_DCLx NCURSES_CONST char *str) { char *result = CANCELLED_STRING; int j = -1; T((T_CALLED("tigetstr(%p, %s)"), (void *) SP_PARM, str)); if (HasTInfoTerminal(SP_PARM)) { TERMTYPE *tp = &(TerminalOf(SP_PARM)->type); struct name_table_entry const *entry_ptr; entry_ptr = _nc_find_type_entry(str, STRING, FALSE); if (entry_ptr != 0) { j = entry_ptr->nte_index; } #if NCURSES_XNAMES else { int i; for_each_ext_string(i, tp) { const char *capname = ExtStrname(tp, i, strnames); if (same_name(str, capname)) { j = i; break; } } } #endif if (j >= 0) { /* note: setupterm forces cancelled strings to null */ result = tp->Strings[j]; } } returnPtr(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(char *) tigetstr(NCURSES_CONST char *str) { return NCURSES_SP_NAME(tigetstr) (CURRENT_SCREEN, str); } #endif ncurses-6.0-20160213/ncurses/tinfo/MKkeys_list.sh0000755000175100001440000000527607746521252020076 0ustar tomusers#! /bin/sh # $Id: MKkeys_list.sh,v 1.4 2003/10/25 16:19:54 tom Exp $ ############################################################################## # Copyright (c) 2001,2003 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # MKkey_defs.sh -- generate list of function-keys for terminfo database # # Author: Thomas E. Dickey 2001 # # Extract function-key names from the Caps file # : ${AWK-awk} DATA=${1-../../include/Caps} data=data$$ trap 'rm -f $data' 0 1 2 5 15 sed -e 's/[ ][ ]*/ /g' < $DATA >$data cat < MODULE_ID("$Id: lib_termname.c,v 1.12 2009/10/24 21:56:58 tom Exp $") NCURSES_EXPORT(char *) NCURSES_SP_NAME(termname) (NCURSES_SP_DCL0) { char *name = 0; T((T_CALLED("termname(%p)"), (void *) SP_PARM)); #if NCURSES_SP_FUNCS if (TerminalOf(SP_PARM) != 0) { name = TerminalOf(SP_PARM)->_termname; } #else if (cur_term != 0) name = cur_term->_termname; #endif returnPtr(name); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(char *) termname(void) { return NCURSES_SP_NAME(termname) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/tinfo/lib_tgoto.c0000644000175100001440000001312711721570410017405 0ustar tomusers/**************************************************************************** * Copyright (c) 2000-2008,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ #include #include #include MODULE_ID("$Id: lib_tgoto.c,v 1.16 2012/02/24 02:08:08 tom Exp $") #if !PURE_TERMINFO static bool is_termcap(const char *string) { bool result = TRUE; if (string == 0 || *string == '\0') { result = FALSE; /* tparm() handles empty strings */ } else { while ((*string != '\0') && result) { if (*string == '%') { switch (*++string) { case 'p': result = FALSE; break; case '\0': string--; break; } } else if (string[0] == '$' && string[1] == '<') { result = FALSE; } string++; } } return result; } static char * tgoto_internal(const char *string, int x, int y) { static char *result; static size_t length; int swap_arg; int param[3]; size_t used = 0; size_t need = 10; int *value = param; bool need_BC = FALSE; if (BC) need += strlen(BC); param[0] = y; param[1] = x; param[2] = 0; while (*string != 0) { if ((used + need) > length) { length += (used + need); if ((result = typeRealloc(char, length, result)) == 0) { length = 0; break; } } if (*string == '%') { const char *fmt = 0; switch (*++string) { case '\0': string--; break; case 'd': fmt = "%d"; break; case '2': fmt = "%02d"; *value %= 100; break; case '3': fmt = "%03d"; *value %= 1000; break; case '+': *value += UChar(*++string); /* FALLTHRU */ case '.': /* * Guard against tputs() seeing a truncated string. The * termcap documentation refers to a similar fixup for \n * and \r, but I don't see that it could work -TD */ if (*value == 0) { if (BC != 0) { *value += 1; need_BC = TRUE; } else { *value = 0200; /* tputs will treat this as \0 */ } } result[used++] = (char) *value++; break; case '%': result[used++] = *string; break; case 'r': swap_arg = param[0]; param[0] = param[1]; param[1] = swap_arg; break; case 'i': param[0] += 1; param[1] += 1; break; case '>': if (*value > string[1]) *value += string[2]; string += 2; break; case 'n': /* Datamedia 2500 */ param[0] ^= 0140; param[1] ^= 0140; break; case 'B': /* BCD */ *value = 16 * (*value / 10) + (*value % 10); break; case 'D': /* Reverse coding (Delta Data) */ *value -= 2 * (*value % 16); break; } if (fmt != 0) { _nc_SPRINTF(result + used, _nc_SLIMIT(length - used) fmt, *value++); used += strlen(result + used); fmt = 0; } if (value - param > 2) { value = param + 2; *value = 0; } } else { result[used++] = *string; } string++; } if (result != 0) { if (need_BC) { _nc_STRCPY(result + used, BC, length - used); used += strlen(BC); } result[used] = '\0'; } return result; } #endif /* * Retained solely for upward compatibility. Note the intentional reversing of * the last two arguments when invoking tparm(). */ NCURSES_EXPORT(char *) tgoto(const char *string, int x, int y) { char *result; T((T_CALLED("tgoto(%s, %d, %d)"), _nc_visbuf(string), x, y)); #if !PURE_TERMINFO if (is_termcap(string)) result = tgoto_internal(string, x, y); else #endif result = TPARM_2((NCURSES_CONST char *) string, y, x); returnPtr(result); } ncurses-6.0-20160213/ncurses/tinfo/lib_termcap.c0000644000175100001440000003000012154660157017702 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer * * * * some of the code in here was contributed by: * * Magnus Bengtsson, d6mbeng@dtek.chalmers.se (Nov'93) * * (but it has changed a lot) * ****************************************************************************/ #define __INTERNAL_CAPS_VISIBLE #include #include #include #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_termcap.c,v 1.80 2013/06/08 16:48:47 tom Exp $") NCURSES_EXPORT_VAR(char *) UP = 0; NCURSES_EXPORT_VAR(char *) BC = 0; #define MyCache _nc_globals.tgetent_cache #define CacheInx _nc_globals.tgetent_index #define CacheSeq _nc_globals.tgetent_sequence #define FIX_SGR0 MyCache[CacheInx].fix_sgr0 #define LAST_TRM MyCache[CacheInx].last_term #define LAST_BUF MyCache[CacheInx].last_bufp #define LAST_USE MyCache[CacheInx].last_used #define LAST_SEQ MyCache[CacheInx].sequence /* * Termcap names are matched only using the first two bytes. * Ignore any extended names longer than two bytes, to avoid problems * with legacy code which passes in parameters whose use is long forgotten. */ #define ValidCap(cap) (((cap)[0] != '\0') && ((cap)[1] != '\0')) #define SameCap(a,b) (((a)[0] == (b)[0]) && ((a)[1] == (b)[1])) #define ValidExt(ext) (ValidCap(ext) && (ext)[2] == '\0') /*************************************************************************** * * tgetent(bufp, term) * * In termcap, this function reads in the entry for terminal `term' into the * buffer pointed to by bufp. It must be called before any of the functions * below are called. * In this terminfo emulation, tgetent() simply calls setupterm() (which * does a bit more than tgetent() in termcap does), and returns its return * value (1 if successful, 0 if no terminal with the given name could be * found, or -1 if no terminal descriptions have been installed on the * system). The bufp argument is ignored. * ***************************************************************************/ NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetent) (NCURSES_SP_DCLx char *bufp, const char *name) { int rc = ERR; int n; bool found_cache = FALSE; #ifdef USE_TERM_DRIVER TERMINAL *termp = 0; #endif START_TRACE(); T((T_CALLED("tgetent()"))); TINFO_SETUP_TERM(&termp, (NCURSES_CONST char *) name, STDOUT_FILENO, &rc, TRUE); #ifdef USE_TERM_DRIVER if (termp == 0 || !((TERMINAL_CONTROL_BLOCK *) termp)->drv->isTerminfo) returnCode(rc); #endif /* * In general we cannot tell if the fixed sgr0 is still used by the * caller, but if tgetent() is called with the same buffer, that is * good enough, since the previous data would be invalidated by the * current call. * * bufp may be a null pointer, e.g., GNU termcap. That allocates data, * which is good until the next tgetent() call. The conventional termcap * is inconvenient because of the fixed buffer size, but because it uses * caller-supplied buffers, can have multiple terminal descriptions in * use at a given time. */ for (n = 0; n < TGETENT_MAX; ++n) { bool same_result = (MyCache[n].last_used && MyCache[n].last_bufp == bufp); if (same_result) { CacheInx = n; if (FIX_SGR0 != 0) { FreeAndNull(FIX_SGR0); } /* * Also free the terminfo data that we loaded (much bigger leak). */ if (LAST_TRM != 0 && LAST_TRM != TerminalOf(SP_PARM)) { TERMINAL *trm = LAST_TRM; NCURSES_SP_NAME(del_curterm) (NCURSES_SP_ARGx LAST_TRM); for (CacheInx = 0; CacheInx < TGETENT_MAX; ++CacheInx) if (LAST_TRM == trm) LAST_TRM = 0; CacheInx = n; } found_cache = TRUE; break; } } if (!found_cache) { int best = 0; for (CacheInx = 0; CacheInx < TGETENT_MAX; ++CacheInx) { if (LAST_SEQ < MyCache[best].sequence) { best = CacheInx; } } CacheInx = best; } LAST_TRM = TerminalOf(SP_PARM); LAST_SEQ = ++CacheSeq; PC = 0; UP = 0; BC = 0; FIX_SGR0 = 0; /* don't free it - application may still use */ if (rc == 1) { if (cursor_left) if ((backspaces_with_bs = (char) !strcmp(cursor_left, "\b")) == 0) backspace_if_not_bs = cursor_left; /* we're required to export these */ if (pad_char != NULL) PC = pad_char[0]; if (cursor_up != NULL) UP = cursor_up; if (backspace_if_not_bs != NULL) BC = backspace_if_not_bs; if ((FIX_SGR0 = _nc_trim_sgr0(&(TerminalOf(SP_PARM)->type))) != 0) { if (!strcmp(FIX_SGR0, exit_attribute_mode)) { if (FIX_SGR0 != exit_attribute_mode) { free(FIX_SGR0); } FIX_SGR0 = 0; } } LAST_BUF = bufp; LAST_USE = TRUE; SetNoPadding(SP_PARM); (void) NCURSES_SP_NAME(baudrate) (NCURSES_SP_ARG); /* sets ospeed as a side-effect */ /* LINT_PREPRO #if 0*/ #include /* LINT_PREPRO #endif*/ } returnCode(rc); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) tgetent(char *bufp, const char *name) { return NCURSES_SP_NAME(tgetent) (CURRENT_SCREEN, bufp, name); } #endif #if 0 static bool same_tcname(const char *a, const char *b) { bool code = SameCap(a, b); fprintf(stderr, "compare(%s,%s) %s\n", a, b, code ? "same" : "diff"); return code; } #else #define same_tcname(a,b) SameCap(a,b) #endif /*************************************************************************** * * tgetflag(str) * * Look up boolean termcap capability str and return its value (TRUE=1 if * present, FALSE=0 if not). * ***************************************************************************/ NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetflag) (NCURSES_SP_DCLx NCURSES_CONST char *id) { int result = 0; /* Solaris returns zero for missing flag */ int j = -1; T((T_CALLED("tgetflag(%p, %s)"), (void *) SP_PARM, id)); if (HasTInfoTerminal(SP_PARM) && ValidCap(id)) { TERMTYPE *tp = &(TerminalOf(SP_PARM)->type); struct name_table_entry const *entry_ptr; entry_ptr = _nc_find_type_entry(id, BOOLEAN, TRUE); if (entry_ptr != 0) { j = entry_ptr->nte_index; } #if NCURSES_XNAMES else { int i; for_each_ext_boolean(i, tp) { const char *capname = ExtBoolname(tp, i, boolcodes); if (same_tcname(id, capname) && ValidExt(capname)) { j = i; break; } } } #endif if (j >= 0) { /* note: setupterm forces invalid booleans to false */ result = tp->Booleans[j]; } } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) tgetflag(NCURSES_CONST char *id) { return NCURSES_SP_NAME(tgetflag) (CURRENT_SCREEN, id); } #endif /*************************************************************************** * * tgetnum(str) * * Look up numeric termcap capability str and return its value, or -1 if * not given. * ***************************************************************************/ NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetnum) (NCURSES_SP_DCLx NCURSES_CONST char *id) { int result = ABSENT_NUMERIC; int j = -1; T((T_CALLED("tgetnum(%p, %s)"), (void *) SP_PARM, id)); if (HasTInfoTerminal(SP_PARM) && ValidCap(id)) { TERMTYPE *tp = &(TerminalOf(SP_PARM)->type); struct name_table_entry const *entry_ptr; entry_ptr = _nc_find_type_entry(id, NUMBER, TRUE); if (entry_ptr != 0) { j = entry_ptr->nte_index; } #if NCURSES_XNAMES else { int i; for_each_ext_number(i, tp) { const char *capname = ExtNumname(tp, i, numcodes); if (same_tcname(id, capname) && ValidExt(capname)) { j = i; break; } } } #endif if (j >= 0) { if (VALID_NUMERIC(tp->Numbers[j])) result = tp->Numbers[j]; } } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) tgetnum(NCURSES_CONST char *id) { return NCURSES_SP_NAME(tgetnum) (CURRENT_SCREEN, id); } #endif /*************************************************************************** * * tgetstr(str, area) * * Look up string termcap capability str and return a pointer to its value, * or NULL if not given. * ***************************************************************************/ NCURSES_EXPORT(char *) NCURSES_SP_NAME(tgetstr) (NCURSES_SP_DCLx NCURSES_CONST char *id, char **area) { char *result = NULL; int j = -1; T((T_CALLED("tgetstr(%s,%p)"), id, (void *) area)); if (HasTInfoTerminal(SP_PARM) && ValidCap(id)) { TERMTYPE *tp = &(TerminalOf(SP_PARM)->type); struct name_table_entry const *entry_ptr; entry_ptr = _nc_find_type_entry(id, STRING, TRUE); if (entry_ptr != 0) { j = entry_ptr->nte_index; } #if NCURSES_XNAMES else { int i; for_each_ext_string(i, tp) { const char *capname = ExtStrname(tp, i, strcodes); if (same_tcname(id, capname) && ValidExt(capname)) { j = i; break; } } } #endif if (j >= 0) { result = tp->Strings[j]; TR(TRACE_DATABASE, ("found match %d: %s", j, _nc_visbuf(result))); /* setupterm forces canceled strings to null */ if (VALID_STRING(result)) { if (result == exit_attribute_mode && FIX_SGR0 != 0) { result = FIX_SGR0; TR(TRACE_DATABASE, ("altered to : %s", _nc_visbuf(result))); } if (area != 0 && *area != 0) { _nc_STRCPY(*area, result, 1024); result = *area; *area += strlen(*area) + 1; } } } } returnPtr(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(char *) tgetstr(NCURSES_CONST char *id, char **area) { return NCURSES_SP_NAME(tgetstr) (CURRENT_SCREEN, id, area); } #endif #if NO_LEAKS NCURSES_EXPORT(void) _nc_tgetent_leaks(void) { for (CacheInx = 0; CacheInx < TGETENT_MAX; ++CacheInx) { FreeIfNeeded(FIX_SGR0); if (LAST_TRM != 0) del_curterm(LAST_TRM); } } #endif ncurses-6.0-20160213/ncurses/tinfo/hashed_db.c0000644000175100001440000002000512253174275017327 0ustar tomusers/**************************************************************************** * Copyright (c) 2006-2011,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2006-on * ****************************************************************************/ #include #include #include #if USE_HASHED_DB MODULE_ID("$Id: hashed_db.c,v 1.17 2013/12/15 00:33:01 tom Exp $") #if HASHED_DB_API >= 2 static DBC *cursor; #endif typedef struct _myconn { struct _myconn *next; DB *db; char *path; bool modify; } MYCONN; static MYCONN *connections; static void cleanup(void) { while (connections != 0) { _nc_db_close(connections->db); } } static DB * find_connection(const char *path, bool modify) { DB *result = 0; MYCONN *p; for (p = connections; p != 0; p = p->next) { if (!strcmp(p->path, path) && p->modify == modify) { result = p->db; break; } } return result; } static void drop_connection(DB * db) { MYCONN *p, *q; for (p = connections, q = 0; p != 0; q = p, p = p->next) { if (p->db == db) { if (q != 0) q->next = p->next; else connections = p->next; free(p->path); free(p); break; } } } static void make_connection(DB * db, const char *path, bool modify) { MYCONN *p = typeCalloc(MYCONN, 1); if (p != 0) { p->db = db; p->path = strdup(path); p->modify = modify; if (p->path != 0) { p->next = connections; connections = p; } else { free(p); } } } /* * Open the database. */ NCURSES_EXPORT(DB *) _nc_db_open(const char *path, bool modify) { DB *result = 0; int code; if (connections == 0) atexit(cleanup); if ((result = find_connection(path, modify)) == 0) { #if HASHED_DB_API >= 4 db_create(&result, NULL, 0); if ((code = result->open(result, NULL, path, NULL, DB_HASH, modify ? DB_CREATE : DB_RDONLY, 0644)) != 0) { result = 0; } #elif HASHED_DB_API >= 3 db_create(&result, NULL, 0); if ((code = result->open(result, path, NULL, DB_HASH, modify ? DB_CREATE : DB_RDONLY, 0644)) != 0) { result = 0; } #elif HASHED_DB_API >= 2 if ((code = db_open(path, DB_HASH, modify ? DB_CREATE : DB_RDONLY, 0644, (DB_ENV *) 0, (DB_INFO *) 0, &result)) != 0) { result = 0; } #else if ((result = dbopen(path, modify ? (O_CREAT | O_RDWR) : O_RDONLY, 0644, DB_HASH, NULL)) == 0) { code = errno; } #endif if (result != 0) { make_connection(result, path, modify); T(("opened %s", path)); } else { T(("cannot open %s: %s", path, strerror(code))); } } return result; } /* * Close the database. Do not attempt to use the 'db' handle after this call. */ NCURSES_EXPORT(int) _nc_db_close(DB * db) { int result; drop_connection(db); #if HASHED_DB_API >= 2 result = db->close(db, 0); #else result = db->close(db); #endif return result; } /* * Write a record to the database. * * Returns 0 on success. * * FIXME: the FreeBSD cap_mkdb program assumes the database could have * duplicates. There appears to be no good reason for that (review/fix). */ NCURSES_EXPORT(int) _nc_db_put(DB * db, DBT * key, DBT * data) { int result; #if HASHED_DB_API >= 2 /* remove any pre-existing value, since we do not want duplicates */ (void) db->del(db, NULL, key, 0); result = db->put(db, NULL, key, data, DB_NOOVERWRITE); #else result = db->put(db, key, data, R_NOOVERWRITE); #endif return result; } /* * Read a record from the database. * * Returns 0 on success. */ NCURSES_EXPORT(int) _nc_db_get(DB * db, DBT * key, DBT * data) { int result; memset(data, 0, sizeof(*data)); #if HASHED_DB_API >= 2 result = db->get(db, NULL, key, data, 0); #else result = db->get(db, key, data, 0); #endif return result; } /* * Read the first record from the database, ignoring order. * * Returns 0 on success. */ NCURSES_EXPORT(int) _nc_db_first(DB * db, DBT * key, DBT * data) { int result; memset(key, 0, sizeof(*key)); memset(data, 0, sizeof(*data)); #if HASHED_DB_API >= 2 if ((result = db->cursor(db, NULL, &cursor, 0)) == 0) { result = cursor->c_get(cursor, key, data, DB_FIRST); } #else result = db->seq(db, key, data, 0); #endif return result; } /* * Read the next record from the database, ignoring order. * * Returns 0 on success. */ NCURSES_EXPORT(int) _nc_db_next(DB * db, DBT * key, DBT * data) { int result; #if HASHED_DB_API >= 2 (void) db; if (cursor != 0) { result = cursor->c_get(cursor, key, data, DB_NEXT); } else { result = -1; } #else result = db->seq(db, key, data, 0); #endif return result; } /* * Check if a record is a terminfo index record. Index records are those that * contain only an alias pointing to a list of aliases. */ NCURSES_EXPORT(bool) _nc_db_have_index(DBT * key, DBT * data, char **buffer, int *size) { bool result = FALSE; int used = (int) data->size - 1; char *have = (char *) data->data; (void) key; if (*have++ == 2) { result = TRUE; } /* * Update params in any case for consistency with _nc_db_have_data(). */ *buffer = have; *size = used; return result; } /* * Check if a record is the terminfo data record. Ignore index records, e.g., * those that contain only an alias pointing to a list of aliases. */ NCURSES_EXPORT(bool) _nc_db_have_data(DBT * key, DBT * data, char **buffer, int *size) { bool result = FALSE; int used = (int) data->size - 1; char *have = (char *) data->data; if (*have++ == 0) { if (data->size > key->size && IS_TIC_MAGIC(have)) { result = TRUE; } } /* * Update params in any case to make it simple to follow a index record * to the data record. */ *buffer = have; *size = used; return result; } #else extern NCURSES_EXPORT(void) _nc_hashed_db(void); NCURSES_EXPORT(void) _nc_hashed_db(void) { } #endif /* USE_HASHED_DB */ ncurses-6.0-20160213/ncurses/tinfo/comp_parse.c0000644000175100001440000004135012210405067017551 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * comp_parse.c -- parser driver loop and use handling. * * Use this code by calling _nc_read_entry_source() on as many source * files as you like (either terminfo or termcap syntax). If you * want use-resolution, call _nc_resolve_uses2(). To free the list * storage, do _nc_free_entries(). */ #include #include #include MODULE_ID("$Id: comp_parse.c,v 1.90 2013/08/31 15:22:31 tom Exp $") static void sanity_check2(TERMTYPE *, bool); NCURSES_IMPEXP void NCURSES_API(*_nc_check_termtype2) (TERMTYPE *, bool) = sanity_check2; /* obsolete: 20040705 */ static void sanity_check(TERMTYPE *); NCURSES_IMPEXP void NCURSES_API(*_nc_check_termtype) (TERMTYPE *) = sanity_check; static void fixup_acsc(TERMTYPE *, int); static void enqueue(ENTRY * ep) /* add an entry to the in-core list */ { ENTRY *newp = _nc_copy_entry(ep); if (newp == 0) _nc_err_abort(MSG_NO_MEMORY); newp->last = _nc_tail; _nc_tail = newp; newp->next = 0; if (newp->last) newp->last->next = newp; } static char * force_bar(char *dst, char *src) { if (strchr(src, '|') == 0) { size_t len = strlen(src); if (len > MAX_NAME_SIZE) len = MAX_NAME_SIZE; (void) strncpy(dst, src, len); _nc_STRCPY(dst + len, "|", MAX_NAME_SIZE); src = dst; } return src; } #define ForceBar(dst, src) ((strchr(src, '|') == 0) ? force_bar(dst, src) : src) #if NCURSES_USE_TERMCAP && NCURSES_XNAMES static char * skip_index(char *name) { char *bar = strchr(name, '|'); if (bar != 0 && (bar - name) == 2) name = bar + 1; return name; } #endif static bool check_collisions(char *n1, char *n2, int counter) { char *pstart, *qstart, *pend, *qend; char nc1[MAX_NAME_SIZE + 2]; char nc2[MAX_NAME_SIZE + 2]; n1 = ForceBar(nc1, n1); n2 = ForceBar(nc2, n2); #if NCURSES_USE_TERMCAP && NCURSES_XNAMES if ((_nc_syntax == SYN_TERMCAP) && _nc_user_definable) { n1 = skip_index(n1); n2 = skip_index(n2); } #endif for (pstart = n1; (pend = strchr(pstart, '|')); pstart = pend + 1) { for (qstart = n2; (qend = strchr(qstart, '|')); qstart = qend + 1) { if ((pend - pstart == qend - qstart) && memcmp(pstart, qstart, (size_t) (pend - pstart)) == 0) { if (counter > 0) (void) fprintf(stderr, "Name collision '%.*s' between\n", (int) (pend - pstart), pstart); return (TRUE); } } } return (FALSE); } static char * next_name(char *name) { if (*name != '\0') ++name; return name; } static char * name_ending(char *name) { if (*name == '\0') { name = 0; } else { while (*name != '\0' && *name != '|') ++name; } return name; } /* * Essentially, find the conflict reported in check_collisions() and remove * it from the second name, unless that happens to be the last alias. */ static bool remove_collision(char *n1, char *n2) { char *p2 = n2; char *pstart, *qstart, *pend, *qend; bool removed = FALSE; #if NCURSES_USE_TERMCAP && NCURSES_XNAMES if ((_nc_syntax == SYN_TERMCAP) && _nc_user_definable) { n1 = skip_index(n1); p2 = n2 = skip_index(n2); } #endif for (pstart = n1; (pend = name_ending(pstart)); pstart = next_name(pend)) { for (qstart = n2; (qend = name_ending(qstart)); qstart = next_name(qend)) { if ((pend - pstart == qend - qstart) && memcmp(pstart, qstart, (size_t) (pend - pstart)) == 0) { if (qstart != p2 || *qend == '|') { if (*qend == '|') ++qend; while ((*qstart++ = *qend++) != '\0') ; fprintf(stderr, "...now\t%s\n", p2); } else { fprintf(stderr, "Cannot remove alias '%.*s'\n", (int) (qend - qstart), qstart); } removed = TRUE; break; } } } return removed; } /* do any of the aliases in a pair of terminal names match? */ NCURSES_EXPORT(bool) _nc_entry_match(char *n1, char *n2) { return check_collisions(n1, n2, 0); } /**************************************************************************** * * Entry compiler and resolution logic * ****************************************************************************/ NCURSES_EXPORT(void) _nc_read_entry_source(FILE *fp, char *buf, int literal, bool silent, bool(*hook) (ENTRY *)) /* slurp all entries in the given file into core */ { ENTRY thisentry; bool oldsuppress = _nc_suppress_warnings; int immediate = 0; if (silent) _nc_suppress_warnings = TRUE; /* shut the lexer up, too */ _nc_reset_input(fp, buf); for (;;) { memset(&thisentry, 0, sizeof(thisentry)); if (_nc_parse_entry(&thisentry, literal, silent) == ERR) break; if (!isalnum(UChar(thisentry.tterm.term_names[0]))) _nc_err_abort("terminal names must start with letter or digit"); /* * This can be used for immediate compilation of entries with no "use=" * references to disk. That avoids consuming a lot of memory when the * resolution code could fetch entries off disk. */ if (hook != NULLHOOK && (*hook) (&thisentry)) { immediate++; } else { enqueue(&thisentry); /* * The enqueued entry is copied with _nc_copy_termtype(), so we can * free some of the data from thisentry, i.e., the arrays. */ FreeIfNeeded(thisentry.tterm.Booleans); FreeIfNeeded(thisentry.tterm.Numbers); FreeIfNeeded(thisentry.tterm.Strings); #if NCURSES_XNAMES FreeIfNeeded(thisentry.tterm.ext_Names); #endif } } if (_nc_tail) { /* set up the head pointer */ for (_nc_head = _nc_tail; _nc_head->last; _nc_head = _nc_head->last) continue; DEBUG(1, ("head = %s", _nc_head->tterm.term_names)); DEBUG(1, ("tail = %s", _nc_tail->tterm.term_names)); } #ifdef TRACE else if (!immediate) DEBUG(1, ("no entries parsed")); #endif _nc_suppress_warnings = oldsuppress; } NCURSES_EXPORT(int) _nc_resolve_uses2(bool fullresolve, bool literal) /* try to resolve all use capabilities */ { ENTRY *qp, *rp, *lastread = 0; bool keepgoing; unsigned i; int unresolved, total_unresolved, multiples; DEBUG(2, ("RESOLUTION BEGINNING")); /* * Check for multiple occurrences of the same name. */ multiples = 0; for_entry_list(qp) { int matchcount = 0; for_entry_list(rp) { if (qp > rp && check_collisions(qp->tterm.term_names, rp->tterm.term_names, matchcount + 1)) { if (!matchcount++) { (void) fprintf(stderr, "\t%s\n", rp->tterm.term_names); } (void) fprintf(stderr, "and\t%s\n", qp->tterm.term_names); if (!remove_collision(rp->tterm.term_names, qp->tterm.term_names)) { ++multiples; } } } } if (multiples > 0) return (FALSE); DEBUG(2, ("NO MULTIPLE NAME OCCURRENCES")); /* * First resolution stage: compute link pointers corresponding to names. */ total_unresolved = 0; _nc_curr_col = -1; for_entry_list(qp) { unresolved = 0; for (i = 0; i < qp->nuses; i++) { bool foundit; char *child = _nc_first_name(qp->tterm.term_names); char *lookfor = qp->uses[i].name; long lookline = qp->uses[i].line; foundit = FALSE; _nc_set_type(child); /* first, try to resolve from in-core records */ for_entry_list(rp) { if (rp != qp && _nc_name_match(rp->tterm.term_names, lookfor, "|")) { DEBUG(2, ("%s: resolving use=%s (in core)", child, lookfor)); qp->uses[i].link = rp; foundit = TRUE; } } /* if that didn't work, try to merge in a compiled entry */ if (!foundit) { TERMTYPE thisterm; char filename[PATH_MAX]; memset(&thisterm, 0, sizeof(thisterm)); if (_nc_read_entry(lookfor, filename, &thisterm) == 1) { DEBUG(2, ("%s: resolving use=%s (compiled)", child, lookfor)); TYPE_MALLOC(ENTRY, 1, rp); rp->tterm = thisterm; rp->nuses = 0; rp->next = lastread; lastread = rp; qp->uses[i].link = rp; foundit = TRUE; } } /* no good, mark this one unresolvable and complain */ if (!foundit) { unresolved++; total_unresolved++; _nc_curr_line = (int) lookline; _nc_warning("resolution of use=%s failed", lookfor); qp->uses[i].link = 0; } } } if (total_unresolved) { /* free entries read in off disk */ _nc_free_entries(lastread); return (FALSE); } DEBUG(2, ("NAME RESOLUTION COMPLETED OK")); /* * OK, at this point all (char *) references in `name' members * have been successfully converted to (ENTRY *) pointers in * `link' members. Time to do the actual merges. */ if (fullresolve) { do { TERMTYPE merged; keepgoing = FALSE; for_entry_list(qp) { if (qp->nuses > 0) { DEBUG(2, ("%s: attempting merge", _nc_first_name(qp->tterm.term_names))); /* * If any of the use entries we're looking for is * incomplete, punt. We'll catch this entry on a * subsequent pass. */ for (i = 0; i < qp->nuses; i++) if (qp->uses[i].link->nuses) { DEBUG(2, ("%s: use entry %d unresolved", _nc_first_name(qp->tterm.term_names), i)); goto incomplete; } /* * First, make sure there is no garbage in the * merge block. As a side effect, copy into * the merged entry the name field and string * table pointer. */ _nc_copy_termtype(&merged, &(qp->tterm)); /* * Now merge in each use entry in the proper * (reverse) order. */ for (; qp->nuses; qp->nuses--) _nc_merge_entry(&merged, &qp->uses[qp->nuses - 1].link->tterm); /* * Now merge in the original entry. */ _nc_merge_entry(&merged, &qp->tterm); /* * Replace the original entry with the merged one. */ FreeIfNeeded(qp->tterm.Booleans); FreeIfNeeded(qp->tterm.Numbers); FreeIfNeeded(qp->tterm.Strings); #if NCURSES_XNAMES FreeIfNeeded(qp->tterm.ext_Names); #endif qp->tterm = merged; _nc_wrap_entry(qp, TRUE); /* * We know every entry is resolvable because name resolution * didn't bomb. So go back for another pass. */ /* FALLTHRU */ incomplete: keepgoing = TRUE; } } } while (keepgoing); DEBUG(2, ("MERGES COMPLETED OK")); } /* * We'd like to free entries read in off disk at this point, but can't. * The merge_entry() code doesn't copy the strings in the use entries, * it just aliases them. If this ever changes, do a * free_entries(lastread) here. */ DEBUG(2, ("RESOLUTION FINISHED")); if (fullresolve) if (_nc_check_termtype != 0) { _nc_curr_col = -1; for_entry_list(qp) { _nc_curr_line = (int) qp->startline; _nc_set_type(_nc_first_name(qp->tterm.term_names)); /* * tic overrides this function pointer to provide more verbose * checking. */ if (_nc_check_termtype2 != sanity_check2) { SCREEN *save_SP = SP; SCREEN fake_sp; TERMINAL fake_tm; TERMINAL *save_tm = cur_term; /* * Setup so that tic can use ordinary terminfo interface * to obtain capability information. */ memset(&fake_sp, 0, sizeof(fake_sp)); memset(&fake_tm, 0, sizeof(fake_tm)); fake_sp._term = &fake_tm; fake_tm.type = qp->tterm; _nc_set_screen(&fake_sp); set_curterm(&fake_tm); _nc_check_termtype2(&qp->tterm, literal); _nc_set_screen(save_SP); set_curterm(save_tm); } else { fixup_acsc(&qp->tterm, literal); } } DEBUG(2, ("SANITY CHECK FINISHED")); } return (TRUE); } /* obsolete: 20040705 */ NCURSES_EXPORT(int) _nc_resolve_uses(bool fullresolve) { return _nc_resolve_uses2(fullresolve, FALSE); } /* * This bit of legerdemain turns all the terminfo variable names into * references to locations in the arrays Booleans, Numbers, and Strings --- * precisely what's needed. */ #undef CUR #define CUR tp-> static void fixup_acsc(TERMTYPE *tp, int literal) { if (!literal) { if (acs_chars == 0 && enter_alt_charset_mode != 0 && exit_alt_charset_mode != 0) acs_chars = strdup(VT_ACSC); } } static void sanity_check2(TERMTYPE *tp, bool literal) { if (!PRESENT(exit_attribute_mode)) { #ifdef __UNUSED__ /* this casts too wide a net */ bool terminal_entry = !strchr(tp->term_names, '+'); if (terminal_entry && (PRESENT(set_attributes) || PRESENT(enter_standout_mode) || PRESENT(enter_underline_mode) || PRESENT(enter_blink_mode) || PRESENT(enter_bold_mode) || PRESENT(enter_dim_mode) || PRESENT(enter_secure_mode) || PRESENT(enter_protected_mode) || PRESENT(enter_reverse_mode))) _nc_warning("no exit_attribute_mode"); #endif /* __UNUSED__ */ PAIRED(enter_standout_mode, exit_standout_mode); PAIRED(enter_underline_mode, exit_underline_mode); PAIRED(enter_italics_mode, exit_italics_mode); } /* we do this check/fix in postprocess_termcap(), but some packagers * prefer to bypass it... */ if (!literal) { fixup_acsc(tp, literal); ANDMISSING(enter_alt_charset_mode, acs_chars); ANDMISSING(exit_alt_charset_mode, acs_chars); } /* listed in structure-member order of first argument */ PAIRED(enter_alt_charset_mode, exit_alt_charset_mode); ANDMISSING(enter_blink_mode, exit_attribute_mode); ANDMISSING(enter_bold_mode, exit_attribute_mode); PAIRED(exit_ca_mode, enter_ca_mode); PAIRED(enter_delete_mode, exit_delete_mode); ANDMISSING(enter_dim_mode, exit_attribute_mode); PAIRED(enter_insert_mode, exit_insert_mode); ANDMISSING(enter_secure_mode, exit_attribute_mode); ANDMISSING(enter_protected_mode, exit_attribute_mode); ANDMISSING(enter_reverse_mode, exit_attribute_mode); PAIRED(from_status_line, to_status_line); PAIRED(meta_off, meta_on); PAIRED(prtr_on, prtr_off); PAIRED(save_cursor, restore_cursor); PAIRED(enter_xon_mode, exit_xon_mode); PAIRED(enter_am_mode, exit_am_mode); ANDMISSING(label_off, label_on); #ifdef remove_clock PAIRED(display_clock, remove_clock); #endif ANDMISSING(set_color_pair, initialize_pair); } /* obsolete: 20040705 */ static void sanity_check(TERMTYPE *tp) { sanity_check2(tp, FALSE); } #if NO_LEAKS NCURSES_EXPORT(void) _nc_leaks_tic(void) { _nc_alloc_entry_leaks(); _nc_captoinfo_leaks(); _nc_comp_scan_leaks(); #if BROKEN_LINKER || USE_REENTRANT _nc_names_leaks(); _nc_codes_leaks(); #endif _nc_tic_expand(0, FALSE, 0); } NCURSES_EXPORT(void) _nc_free_tic(int code) { _nc_leaks_tic(); _nc_free_tinfo(code); } #endif ncurses-6.0-20160213/ncurses/tinfo/MKcodes.awk0000644000175100001440000001401611326634227017316 0ustar tomusers############################################################################## # Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: MKcodes.awk,v 1.9 2010/01/23 17:57:43 tom Exp $ function large_item(value) { result = sprintf("%d,", offset); offset = offset + length(value) + 1; offcol = offcol + length(result) + 2; if (offcol > 70) { result = result "\n"; offcol = 0; } else { result = result " "; } bigstr = bigstr sprintf("\"%s\\0\" ", value); bigcol = bigcol + length(value) + 5; if (bigcol > 70) { bigstr = bigstr "\\\n"; bigcol = 0; } return result; } function small_item(value) { return sprintf("\t\t\"%s\",\n", value); } function print_strings(name,value) { printf "DCL(%s) = {\n", name print value print "\t\t(NCURSES_CONST char *)0," print "};" print "" } function print_offsets(name,value) { printf "static const short _nc_offset_%s[] = {\n", name printf "%s", value print "};" print "" printf "static NCURSES_CONST char ** ptr_%s = 0;\n", name print "" } BEGIN { print "/* This file was generated by MKcodes.awk */" print "" print "#include " print "" print "#define IT NCURSES_CONST char * const" print "" offset = 0; offcol = 0; bigcol = 0; } $1 ~ /^#/ {next;} $1 == "SKIPWARN" {next;} $3 == "bool" { small_boolcodes = small_boolcodes small_item($4); large_boolcodes = large_boolcodes large_item($4); } $3 == "num" { small_numcodes = small_numcodes small_item($4); large_numcodes = large_numcodes large_item($4); } $3 == "str" { small_strcodes = small_strcodes small_item($4); large_strcodes = large_strcodes large_item($4); } END { print "" print "#if BROKEN_LINKER || USE_REENTRANT" print "" if (bigstrings) { printf "static const char _nc_code_blob[] = \n" printf "%s;\n", bigstr; print_offsets("boolcodes", large_boolcodes); print_offsets("numcodes", large_numcodes); print_offsets("strcodes", large_strcodes); print "" print "static IT *" print "alloc_array(NCURSES_CONST char ***value, const short *offsets, unsigned size)" print "{" print " if (*value == 0) {" print " if ((*value = typeCalloc(NCURSES_CONST char *, size + 1)) != 0) {" print " unsigned n;" print " for (n = 0; n < size; ++n) {" print " (*value)[n] = (NCURSES_CONST char *) _nc_code_blob + offsets[n];" print " }" print " }" print " }" print " return *value;" print "}" print "" print "#define FIX(it) NCURSES_IMPEXP IT * NCURSES_API NCURSES_PUBLIC_VAR(it)(void) { return alloc_array(&ptr_##it, _nc_offset_##it, SIZEOF(_nc_offset_##it)); }" } else { print "#define DCL(it) static IT data##it[]" print "" print_strings("boolcodes", small_boolcodes); print_strings("numcodes", small_numcodes); print_strings("strcodes", small_strcodes); print "#define FIX(it) NCURSES_IMPEXP IT * NCURSES_API NCURSES_PUBLIC_VAR(it)(void) { return data##it; }" } print "" print "/* remove public definition which conflicts with FIX() */" print "#undef boolcodes" print "#undef numcodes" print "#undef strcodes" print "" print "/* add local definition */" print "FIX(boolcodes)" print "FIX(numcodes)" print "FIX(strcodes)" print "" print "/* restore the public definition */" print "" print "#define FREE_FIX(it) if (ptr_##it) { FreeAndNull(ptr_##it); }" print "#define boolcodes NCURSES_PUBLIC_VAR(boolcodes())" print "#define numcodes NCURSES_PUBLIC_VAR(numcodes())" print "#define strcodes NCURSES_PUBLIC_VAR(strcodes())" print "" print "#if NO_LEAKS" print "NCURSES_EXPORT(void)" print "_nc_codes_leaks(void)" print "{" if (bigstrings) { print "FREE_FIX(boolcodes)" print "FREE_FIX(numcodes)" print "FREE_FIX(strcodes)" } print "}" print "#endif" print "" print "#else" print "" print "#define DCL(it) NCURSES_EXPORT_VAR(IT) it[]" print "" print_strings("boolcodes", small_boolcodes); print_strings("numcodes", small_numcodes); print_strings("strcodes", small_strcodes); print "" print "#endif /* BROKEN_LINKER */" } ncurses-6.0-20160213/ncurses/tinfo/captoinfo.c0000644000175100001440000005454312067707740017430 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * captoinfo.c --- conversion between termcap and terminfo formats * * The captoinfo() code was swiped from Ross Ridge's mytinfo package, * adapted to fit ncurses by Eric S. Raymond . * * There is just one entry point: * * char *_nc_captoinfo(n, s, parameterized) * * Convert value s for termcap string capability named n into terminfo * format. * * This code recognizes all the standard 4.4BSD %-escapes: * * %% output `%' * %d output value as in printf %d * %2 output value as in printf %2d * %3 output value as in printf %3d * %. output value as in printf %c * %+x add x to value, then do %. * %>xy if value > x then add y, no output * %r reverse order of two parameters, no output * %i increment by one, no output * %n exclusive-or all parameters with 0140 (Datamedia 2500) * %B BCD (16*(value/10)) + (value%10), no output * %D Reverse coding (value - 2*(value%16)), no output (Delta Data). * * Also, %02 and %03 are accepted as synonyms for %2 and %3. * * Besides all the standard termcap escapes, this translator understands * the following extended escapes: * * used by GNU Emacs termcap libraries * %a[+*-/=][cp]x GNU arithmetic. * %m xor the first two parameters by 0177 * %b backup to previous parameter * %f skip this parameter * * used by the University of Waterloo (MFCF) termcap libraries * %-x subtract parameter FROM char x and output it as a char * %ax add the character x to parameter * * If #define WATERLOO is on, also enable these translations: * * %sx subtract parameter FROM the character x * * By default, this Waterloo translations are not compiled in, because * the Waterloo %s conflicts with the way terminfo uses %s in strings for * function programming. * * Note the two definitions of %a: the GNU definition is translated if the * characters after the 'a' are valid for it, otherwise the UW definition * is translated. */ #include #include #include MODULE_ID("$Id: captoinfo.c,v 1.77 2012/12/30 00:50:40 tom Exp $") #define MAX_PUSHED 16 /* max # args we can push onto the stack */ static int stack[MAX_PUSHED]; /* the stack */ static int stackptr; /* the next empty place on the stack */ static int onstack; /* the top of stack */ static int seenm; /* seen a %m */ static int seenn; /* seen a %n */ static int seenr; /* seen a %r */ static int param; /* current parameter */ static char *dp; /* pointer to end of the converted string */ static char *my_string; static size_t my_length; static char * init_string(void) /* initialize 'my_string', 'my_length' */ { if (my_string == 0) TYPE_MALLOC(char, my_length = 256, my_string); *my_string = '\0'; return my_string; } static char * save_string(char *d, const char *const s) { size_t have = (size_t) (d - my_string); size_t need = have + strlen(s) + 2; if (need > my_length) { my_string = (char *) _nc_doalloc(my_string, my_length = (need + need)); if (my_string == 0) _nc_err_abort(MSG_NO_MEMORY); d = my_string + have; } _nc_STRCPY(d, s, my_length - have); return d + strlen(d); } static NCURSES_INLINE char * save_char(char *s, int c) { static char temp[2]; temp[0] = (char) c; return save_string(s, temp); } static void push(void) /* push onstack on to the stack */ { if (stackptr >= MAX_PUSHED) _nc_warning("string too complex to convert"); else stack[stackptr++] = onstack; } static void pop(void) /* pop the top of the stack into onstack */ { if (stackptr == 0) { if (onstack == 0) _nc_warning("I'm confused"); else onstack = 0; } else onstack = stack[--stackptr]; param++; } static int cvtchar(register const char *sp) /* convert a character to a terminfo push */ { unsigned char c = 0; int len; switch (*sp) { case '\\': switch (*++sp) { case '\'': case '$': case '\\': case '%': c = (unsigned char) (*sp); len = 2; break; case '\0': c = '\\'; len = 1; break; case '0': case '1': case '2': case '3': len = 1; while (isdigit(UChar(*sp))) { c = (unsigned char) (8 * c + (*sp++ - '0')); len++; } break; default: c = (unsigned char) (*sp); len = 2; break; } break; case '^': c = (unsigned char) (*++sp & 0x1f); len = 2; break; default: c = (unsigned char) (*sp); len = 1; } if (isgraph(c) && c != ',' && c != '\'' && c != '\\' && c != ':') { dp = save_string(dp, "%\'"); dp = save_char(dp, c); dp = save_char(dp, '\''); } else { dp = save_string(dp, "%{"); if (c > 99) dp = save_char(dp, c / 100 + '0'); if (c > 9) dp = save_char(dp, ((int) (c / 10)) % 10 + '0'); dp = save_char(dp, c % 10 + '0'); dp = save_char(dp, '}'); } return len; } static void getparm(int parm, int n) /* push n copies of param on the terminfo stack if not already there */ { if (seenr) { if (parm == 1) parm = 2; else if (parm == 2) parm = 1; } while (n--) { dp = save_string(dp, "%p"); dp = save_char(dp, '0' + parm); } if (onstack == parm) { if (n > 1) { _nc_warning("string may not be optimal"); dp = save_string(dp, "%Pa"); while (n--) { dp = save_string(dp, "%ga"); } } return; } if (onstack != 0) push(); onstack = parm; if (seenn && parm < 3) { dp = save_string(dp, "%{96}%^"); } if (seenm && parm < 3) { dp = save_string(dp, "%{127}%^"); } } /* * Convert a termcap string to terminfo format. * 'cap' is the relevant terminfo capability index. * 's' is the string value of the capability. * 'parameterized' tells what type of translations to do: * % translations if 1 * pad translations if >=0 */ NCURSES_EXPORT(char *) _nc_captoinfo(const char *cap, const char *s, int const parameterized) { const char *capstart; stackptr = 0; onstack = 0; seenm = 0; seenn = 0; seenr = 0; param = 1; dp = init_string(); /* skip the initial padding (if we haven't been told not to) */ capstart = 0; if (s == 0) s = ""; if (parameterized >= 0 && isdigit(UChar(*s))) for (capstart = s;; s++) if (!(isdigit(UChar(*s)) || *s == '*' || *s == '.')) break; while (*s != '\0') { switch (*s) { case '%': s++; if (parameterized < 1) { dp = save_char(dp, '%'); break; } switch (*s++) { case '%': dp = save_char(dp, '%'); break; case 'r': if (seenr++ == 1) { _nc_warning("saw %%r twice in %s", cap); } break; case 'm': if (seenm++ == 1) { _nc_warning("saw %%m twice in %s", cap); } break; case 'n': if (seenn++ == 1) { _nc_warning("saw %%n twice in %s", cap); } break; case 'i': dp = save_string(dp, "%i"); break; case '6': case 'B': getparm(param, 1); dp = save_string(dp, "%{10}%/%{16}%*"); getparm(param, 1); dp = save_string(dp, "%{10}%m%+"); break; case '8': case 'D': getparm(param, 2); dp = save_string(dp, "%{2}%*%-"); break; case '>': getparm(param, 2); /* %?%{x}%>%t%{y}%+%; */ dp = save_string(dp, "%?"); s += cvtchar(s); dp = save_string(dp, "%>%t"); s += cvtchar(s); dp = save_string(dp, "%+%;"); break; case 'a': if ((*s == '=' || *s == '+' || *s == '-' || *s == '*' || *s == '/') && (s[1] == 'p' || s[1] == 'c') && s[2] != '\0') { int l; l = 2; if (*s != '=') getparm(param, 1); if (s[1] == 'p') { getparm(param + s[2] - '@', 1); if (param != onstack) { pop(); param--; } l++; } else l += cvtchar(s + 2); switch (*s) { case '+': dp = save_string(dp, "%+"); break; case '-': dp = save_string(dp, "%-"); break; case '*': dp = save_string(dp, "%*"); break; case '/': dp = save_string(dp, "%/"); break; case '=': if (seenr) { if (param == 1) onstack = 2; else if (param == 2) onstack = 1; else onstack = param; } else onstack = param; break; } s += l; break; } getparm(param, 1); s += cvtchar(s); dp = save_string(dp, "%+"); break; case '+': getparm(param, 1); s += cvtchar(s); dp = save_string(dp, "%+%c"); pop(); break; case 's': #ifdef WATERLOO s += cvtchar(s); getparm(param, 1); dp = save_string(dp, "%-"); #else getparm(param, 1); dp = save_string(dp, "%s"); pop(); #endif /* WATERLOO */ break; case '-': s += cvtchar(s); getparm(param, 1); dp = save_string(dp, "%-%c"); pop(); break; case '.': getparm(param, 1); dp = save_string(dp, "%c"); pop(); break; case '0': /* not clear any of the historical termcaps did this */ if (*s == '3') goto see03; else if (*s != '2') goto invalid; /* FALLTHRU */ case '2': getparm(param, 1); dp = save_string(dp, "%2d"); pop(); break; case '3': see03: getparm(param, 1); dp = save_string(dp, "%3d"); pop(); break; case 'd': getparm(param, 1); dp = save_string(dp, "%d"); pop(); break; case 'f': param++; break; case 'b': param--; break; case '\\': dp = save_string(dp, "%\\"); break; default: invalid: dp = save_char(dp, '%'); s--; _nc_warning("unknown %% code %s (%#x) in %s", unctrl((chtype) *s), UChar(*s), cap); break; } break; default: dp = save_char(dp, *s++); break; } } /* * Now, if we stripped off some leading padding, add it at the end * of the string as mandatory padding. */ if (capstart) { dp = save_string(dp, "$<"); for (s = capstart;; s++) if (isdigit(UChar(*s)) || *s == '*' || *s == '.') dp = save_char(dp, *s); else break; dp = save_string(dp, "/>"); } (void) save_char(dp, '\0'); return (my_string); } /* * Check for an expression that corresponds to "%B" (BCD): * (parameter / 10) * 16 + (parameter % 10) */ static int bcd_expression(const char *str) { /* leave this non-const for HPUX */ static char fmt[] = "%%p%c%%{10}%%/%%{16}%%*%%p%c%%{10}%%m%%+"; int len = 0; char ch1, ch2; if (sscanf(str, fmt, &ch1, &ch2) == 2 && isdigit(UChar(ch1)) && isdigit(UChar(ch2)) && (ch1 == ch2)) { len = 28; #ifndef NDEBUG { char buffer[80]; int tst; _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) fmt, ch1, ch2); tst = strlen(buffer) - 1; assert(len == tst); } #endif } return len; } static char * save_tc_char(char *bufptr, int c1) { char temp[80]; if (is7bits(c1) && isprint(c1)) { if (c1 == ':' || c1 == '\\') bufptr = save_char(bufptr, '\\'); bufptr = save_char(bufptr, c1); } else { if (c1 == (c1 & 0x1f)) { /* iscntrl() returns T on 255 */ _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "%.20s", unctrl((chtype) c1)); } else { _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "\\%03o", c1); } bufptr = save_string(bufptr, temp); } return bufptr; } static char * save_tc_inequality(char *bufptr, int c1, int c2) { bufptr = save_string(bufptr, "%>"); bufptr = save_tc_char(bufptr, c1); bufptr = save_tc_char(bufptr, c2); return bufptr; } /* * Here are the capabilities infotocap assumes it can translate to: * * %% output `%' * %d output value as in printf %d * %2 output value as in printf %2d * %3 output value as in printf %3d * %. output value as in printf %c * %+c add character c to value, then do %. * %>xy if value > x then add y, no output * %r reverse order of two parameters, no output * %i increment by one, no output * %n exclusive-or all parameters with 0140 (Datamedia 2500) * %B BCD (16*(value/10)) + (value%10), no output * %D Reverse coding (value - 2*(value%16)), no output (Delta Data). * %m exclusive-or all parameters with 0177 (not in 4.4BSD) */ /* * Convert a terminfo string to termcap format. Parameters are as in * _nc_captoinfo(). */ NCURSES_EXPORT(char *) _nc_infotocap(const char *cap GCC_UNUSED, const char *str, int const parameterized) { int seenone = 0, seentwo = 0, saw_m = 0, saw_n = 0; const char *padding; const char *trimmed = 0; int in0, in1, in2; char ch1 = 0, ch2 = 0; char *bufptr = init_string(); char octal[4]; int len; bool syntax_error = FALSE; /* we may have to move some trailing mandatory padding up front */ padding = str + strlen(str) - 1; if (padding > str && *padding == '>') { if (*--padding == '/') --padding; while (isdigit(UChar(*padding)) || *padding == '.' || *padding == '*') padding--; if (padding > str && *padding == '<' && *--padding == '$') trimmed = padding; padding += 2; while (isdigit(UChar(*padding)) || *padding == '.' || *padding == '*') bufptr = save_char(bufptr, *padding++); } for (; *str && ((trimmed == 0) || (str < trimmed)); str++) { int c1, c2; char *cp = 0; if (str[0] == '^') { if (str[1] == '\0' || (str + 1) == trimmed) { bufptr = save_string(bufptr, "\\136"); ++str; } else { bufptr = save_char(bufptr, *str++); bufptr = save_char(bufptr, *str); } } else if (str[0] == '\\') { if (str[1] == '\0' || (str + 1) == trimmed) { bufptr = save_string(bufptr, "\\134"); ++str; } else if (str[1] == '^') { bufptr = save_string(bufptr, "\\136"); ++str; } else if (str[1] == ',') { bufptr = save_char(bufptr, *++str); } else { int xx1, xx2; bufptr = save_char(bufptr, *str++); xx1 = *str; if (_nc_strict_bsd) { if (isdigit(UChar(xx1))) { int pad = 0; if (!isdigit(UChar(str[1]))) pad = 2; else if (str[1] && !isdigit(UChar(str[2]))) pad = 1; /* * Test for "\0", "\00" or "\000" and transform those * into "\200". */ if (xx1 == '0' && ((pad == 2) || (str[1] == '0')) && ((pad >= 1) || (str[2] == '0'))) { xx2 = '2'; } else { xx2 = '0'; pad = 0; /* FIXME - optionally pad to 3 digits */ } while (pad-- > 0) { bufptr = save_char(bufptr, xx2); xx2 = '0'; } } else if (strchr("E\\nrtbf", xx1) == 0) { switch (xx1) { case 'e': xx1 = 'E'; break; case 'l': xx1 = 'n'; break; case 's': bufptr = save_char(bufptr, '0'); bufptr = save_char(bufptr, '4'); xx1 = '0'; break; case ':': /* * Note: termcap documentation claims that ":" * must be escaped as "\072", however the * documentation is incorrect - read the code. * The replacement does not work reliably, * so the advice is not helpful. */ bufptr = save_char(bufptr, '0'); bufptr = save_char(bufptr, '7'); xx1 = '2'; break; default: /* should not happen, but handle this anyway */ _nc_SPRINTF(octal, _nc_SLIMIT(sizeof(octal)) "%03o", UChar(xx1)); bufptr = save_char(bufptr, octal[0]); bufptr = save_char(bufptr, octal[1]); xx1 = octal[2]; break; } } } bufptr = save_char(bufptr, xx1); } } else if (str[0] == '$' && str[1] == '<') { /* discard padding */ str += 2; while (isdigit(UChar(*str)) || *str == '.' || *str == '*' || *str == '/' || *str == '>') str++; --str; } else if (sscanf(str, "[%%?%%p1%%{8}%%<%%t%d%%p1%%d%%e%%p1%%{16}%%<%%t%d%%p1%%{8}%%-%%d%%e%d;5;%%p1%%d%%;m", &in0, &in1, &in2) == 3 && ((in0 == 4 && in1 == 10 && in2 == 48) || (in0 == 3 && in1 == 9 && in2 == 38))) { /* dumb-down an optimized case from xterm-256color for termcap */ if ((str = strstr(str, ";m")) == 0) break; /* cannot happen */ ++str; if (in2 == 48) { bufptr = save_string(bufptr, "[48;5;%dm"); } else { bufptr = save_string(bufptr, "[38;5;%dm"); } } else if (str[0] == '%' && str[1] == '%') { /* escaped '%' */ bufptr = save_string(bufptr, "%%"); ++str; } else if (*str != '%' || (parameterized < 1)) { bufptr = save_char(bufptr, *str); } else if (sscanf(str, "%%?%%{%d}%%>%%t%%{%d}%%+%%;", &c1, &c2) == 2) { str = strchr(str, ';'); bufptr = save_tc_inequality(bufptr, c1, c2); } else if (sscanf(str, "%%?%%{%d}%%>%%t%%'%c'%%+%%;", &c1, &ch2) == 2) { str = strchr(str, ';'); bufptr = save_tc_inequality(bufptr, c1, ch2); } else if (sscanf(str, "%%?%%'%c'%%>%%t%%{%d}%%+%%;", &ch1, &c2) == 2) { str = strchr(str, ';'); bufptr = save_tc_inequality(bufptr, ch1, c2); } else if (sscanf(str, "%%?%%'%c'%%>%%t%%'%c'%%+%%;", &ch1, &ch2) == 2) { str = strchr(str, ';'); bufptr = save_tc_inequality(bufptr, ch1, ch2); } else if ((len = bcd_expression(str)) != 0) { str += len; bufptr = save_string(bufptr, "%B"); } else if ((sscanf(str, "%%{%d}%%+%%c", &c1) == 1 || sscanf(str, "%%'%c'%%+%%c", &ch1) == 1) && (cp = strchr(str, '+'))) { str = cp + 2; bufptr = save_string(bufptr, "%+"); if (ch1) c1 = ch1; bufptr = save_tc_char(bufptr, c1); } /* FIXME: this "works" for 'delta' */ else if (strncmp(str, "%{2}%*%-", (size_t) 8) == 0) { str += 7; bufptr = save_string(bufptr, "%D"); } else if (strncmp(str, "%{96}%^", (size_t) 7) == 0) { str += 6; if (saw_m++ == 0) { bufptr = save_string(bufptr, "%n"); } } else if (strncmp(str, "%{127}%^", (size_t) 8) == 0) { str += 7; if (saw_n++ == 0) { bufptr = save_string(bufptr, "%m"); } } else { /* cm-style format element */ str++; switch (*str) { case '%': bufptr = save_char(bufptr, '%'); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': bufptr = save_char(bufptr, '%'); ch1 = 0; ch2 = 0; while (isdigit(UChar(*str))) { ch2 = ch1; ch1 = *str++; if (_nc_strict_bsd) { if (ch1 > '3') return 0; } else { bufptr = save_char(bufptr, ch1); } } if (_nc_strict_bsd) { if (ch2 != 0 && ch2 != '0') return 0; if (ch1 < '2') ch1 = 'd'; bufptr = save_char(bufptr, ch1); } if (strchr("doxX.", *str)) { if (*str != 'd') /* termcap doesn't have octal, hex */ return 0; } break; case 'd': bufptr = save_string(bufptr, "%d"); break; case 'c': bufptr = save_string(bufptr, "%."); break; /* * %s isn't in termcap, but it's convenient to pass it through * so we can represent things like terminfo pfkey strings in * termcap notation. */ case 's': if (_nc_strict_bsd) return 0; bufptr = save_string(bufptr, "%s"); break; case 'p': str++; if (*str == '1') seenone = 1; else if (*str == '2') { if (!seenone && !seentwo) { bufptr = save_string(bufptr, "%r"); seentwo++; } } else if (*str >= '3') return (0); break; case 'i': bufptr = save_string(bufptr, "%i"); break; default: bufptr = save_char(bufptr, *str); syntax_error = TRUE; break; } /* endswitch (*str) */ } /* endelse (*str == '%') */ /* * 'str' always points to the end of what was scanned in this step, * but that may not be the end of the string. */ assert(str != 0); if (str == 0 || *str == '\0') break; } /* endwhile (*str) */ return (syntax_error ? NULL : my_string); } #ifdef MAIN int curr_line; int main(int argc, char *argv[]) { int c, tc = FALSE; while ((c = getopt(argc, argv, "c")) != EOF) switch (c) { case 'c': tc = TRUE; break; } curr_line = 0; for (;;) { char buf[BUFSIZ]; ++curr_line; if (fgets(buf, sizeof(buf), stdin) == 0) break; buf[strlen(buf) - 1] = '\0'; _nc_set_source(buf); if (tc) { char *cp = _nc_infotocap("to termcap", buf, 1); if (cp) (void) fputs(cp, stdout); } else (void) fputs(_nc_captoinfo("to terminfo", buf, 1), stdout); (void) putchar('\n'); } return (0); } #endif /* MAIN */ #if NO_LEAKS NCURSES_EXPORT(void) _nc_captoinfo_leaks(void) { if (my_string != 0) { FreeAndNull(my_string); } my_length = 0; } #endif ncurses-6.0-20160213/ncurses/tinfo/README0000644000175100001440000000513110422525771016142 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README,v 1.2 2006/04/22 22:19:37 tom Exp $ ------------------------------------------------------------------------------- The files in this directory (tinfo) are those that support the terminfo database and interfaces for ncurses. The terminfo library can be built separately, as a lower-level library for ncurses, but usually is bundled. In addition to the standard documented interfaces, ncurses uses internal functions which reside in tinfo to satisfy linkage requirements. ncurses-6.0-20160213/ncurses/tinfo/doalloc.c0000644000175100001440000000556612045270055017052 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1998 * ****************************************************************************/ /* * Wrapper for malloc/realloc. Standard implementations allow realloc with * a null pointer, but older libraries may not (e.g., SunOS). * * Also if realloc fails, we discard the old memory to avoid leaks. */ #include MODULE_ID("$Id: doalloc.c,v 1.11 2012/11/03 19:27:41 tom Exp $") NCURSES_EXPORT(void *) _nc_doalloc(void *oldp, size_t amount) { void *newp; if (oldp != 0) { if ((newp = realloc(oldp, amount)) == 0) { free(oldp); errno = ENOMEM; /* just in case 'free' reset */ } } else { newp = malloc(amount); } return newp; } ncurses-6.0-20160213/ncurses/tinfo/lib_has_cap.c0000644000175100001440000000715212241747042017655 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-2003 * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_has_cap.c ** ** The routines to query terminal capabilities ** */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_has_cap.c,v 1.10 2013/11/16 19:57:22 tom Exp $") NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_ic) (NCURSES_SP_DCL0) { bool code = FALSE; T((T_CALLED("has_ic(%p)"), (void *) SP_PARM)); if (HasTInfoTerminal(SP_PARM)) { code = ((insert_character || parm_ich || (enter_insert_mode && exit_insert_mode)) && (delete_character || parm_dch)) ? TRUE : FALSE; } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(bool) has_ic(void) { return NCURSES_SP_NAME(has_ic) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_il) (NCURSES_SP_DCL0) { bool code = FALSE; T((T_CALLED("has_il(%p)"), (void *) SP_PARM)); if (HasTInfoTerminal(SP_PARM)) { code = ((insert_line || parm_insert_line) && (delete_line || parm_delete_line)) ? TRUE : FALSE; } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(bool) has_il(void) { return NCURSES_SP_NAME(has_il) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/tinfo/lib_raw.c0000644000175100001440000002243611706610071017046 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1998-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * raw.c * * Routines: * raw() * cbreak() * noraw() * nocbreak() * qiflush() * noqiflush() * intrflush() * */ #include MODULE_ID("$Id: lib_raw.c,v 1.21 2012/01/21 19:21:29 KO.Myung-Hun Exp $") #if HAVE_SYS_TERMIO_H #include /* needed for ISC */ #endif #ifdef __EMX__ #include #define _nc_setmode(mode) setmode(SP_PARM->_ifd, mode) #else #define _nc_setmode(mode) /* nothing */ #endif #if USE_KLIBC_KBD #define INCL_KBD #include #endif #define COOKED_INPUT (IXON|BRKINT|PARMRK) #ifdef TRACE #define BEFORE(N) if (USE_TRACEF(TRACE_BITS)) _nc_locked_tracef("%s before bits: %s", N, _nc_tracebits()) #define AFTER(N) if (USE_TRACEF(TRACE_BITS)) _nc_locked_tracef("%s after bits: %s", N, _nc_tracebits()) #else #define BEFORE(s) #define AFTER(s) #endif /* TRACE */ NCURSES_EXPORT(int) NCURSES_SP_NAME(raw) (NCURSES_SP_DCL0) { int result = ERR; TERMINAL *termp; T((T_CALLED("raw(%p)"), (void *) SP_PARM)); if ((termp = TerminalOf(SP_PARM)) != 0) { TTY buf; BEFORE("raw"); _nc_setmode(O_BINARY); buf = termp->Nttyb; #ifdef TERMIOS buf.c_lflag &= (unsigned) ~(ICANON | ISIG | IEXTEN); buf.c_iflag &= (unsigned) ~(COOKED_INPUT); buf.c_cc[VMIN] = 1; buf.c_cc[VTIME] = 0; #else buf.sg_flags |= RAW; #endif result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf); if (result == OK) { #if USE_KLIBC_KBD KBDINFO kbdinfo; kbdinfo.cb = sizeof(kbdinfo); KbdGetStatus(&kbdinfo, 0); kbdinfo.cb = sizeof(kbdinfo); kbdinfo.fsMask &= ~KEYBOARD_ASCII_MODE; kbdinfo.fsMask |= KEYBOARD_BINARY_MODE; KbdSetStatus(&kbdinfo, 0); #endif SP_PARM->_raw = TRUE; SP_PARM->_cbreak = 1; termp->Nttyb = buf; } AFTER("raw"); } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) raw(void) { return NCURSES_SP_NAME(raw) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(cbreak) (NCURSES_SP_DCL0) { int result = ERR; TERMINAL *termp; T((T_CALLED("cbreak(%p)"), (void *) SP_PARM)); if ((termp = TerminalOf(SP_PARM)) != 0) { TTY buf; BEFORE("cbreak"); _nc_setmode(O_BINARY); buf = termp->Nttyb; #ifdef TERMIOS buf.c_lflag &= (unsigned) ~ICANON; buf.c_iflag &= (unsigned) ~ICRNL; buf.c_lflag |= ISIG; buf.c_cc[VMIN] = 1; buf.c_cc[VTIME] = 0; #else buf.sg_flags |= CBREAK; #endif result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf); if (result == OK) { SP_PARM->_cbreak = 1; termp->Nttyb = buf; } AFTER("cbreak"); } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) cbreak(void) { return NCURSES_SP_NAME(cbreak) (CURRENT_SCREEN); } #endif /* * Note: * this implementation may be wrong. See the comment under intrflush(). */ NCURSES_EXPORT(void) NCURSES_SP_NAME(qiflush) (NCURSES_SP_DCL0) { int result = ERR; TERMINAL *termp; T((T_CALLED("qiflush(%p)"), (void *) SP_PARM)); if ((termp = TerminalOf(SP_PARM)) != 0) { TTY buf; BEFORE("qiflush"); buf = termp->Nttyb; #ifdef TERMIOS buf.c_lflag &= (unsigned) ~(NOFLSH); result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf); #else /* FIXME */ #endif if (result == OK) termp->Nttyb = buf; AFTER("qiflush"); } returnVoid; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) qiflush(void) { NCURSES_SP_NAME(qiflush) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(noraw) (NCURSES_SP_DCL0) { int result = ERR; TERMINAL *termp; T((T_CALLED("noraw(%p)"), (void *) SP_PARM)); if ((termp = TerminalOf(SP_PARM)) != 0) { TTY buf; BEFORE("noraw"); _nc_setmode(O_TEXT); buf = termp->Nttyb; #ifdef TERMIOS buf.c_lflag |= ISIG | ICANON | (termp->Ottyb.c_lflag & IEXTEN); buf.c_iflag |= COOKED_INPUT; #else buf.sg_flags &= ~(RAW | CBREAK); #endif result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf); if (result == OK) { #if USE_KLIBC_KBD KBDINFO kbdinfo; kbdinfo.cb = sizeof(kbdinfo); KbdGetStatus(&kbdinfo, 0); kbdinfo.cb = sizeof(kbdinfo); kbdinfo.fsMask &= ~KEYBOARD_BINARY_MODE; kbdinfo.fsMask |= KEYBOARD_ASCII_MODE; KbdSetStatus(&kbdinfo, 0); #endif SP_PARM->_raw = FALSE; SP_PARM->_cbreak = 0; termp->Nttyb = buf; } AFTER("noraw"); } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) noraw(void) { return NCURSES_SP_NAME(noraw) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(nocbreak) (NCURSES_SP_DCL0) { int result = ERR; TERMINAL *termp; T((T_CALLED("nocbreak(%p)"), (void *) SP_PARM)); if ((termp = TerminalOf(SP_PARM)) != 0) { TTY buf; BEFORE("nocbreak"); _nc_setmode(O_TEXT); buf = termp->Nttyb; #ifdef TERMIOS buf.c_lflag |= ICANON; buf.c_iflag |= ICRNL; #else buf.sg_flags &= ~CBREAK; #endif result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf); if (result == OK) { SP_PARM->_cbreak = 0; termp->Nttyb = buf; } AFTER("nocbreak"); } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) nocbreak(void) { return NCURSES_SP_NAME(nocbreak) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(noqiflush) (NCURSES_SP_DCL0) { int result = ERR; TERMINAL *termp; T((T_CALLED("noqiflush(%p)"), (void *) SP_PARM)); if ((termp = TerminalOf(SP_PARM)) != 0) { TTY buf; BEFORE("noqiflush"); buf = termp->Nttyb; #ifdef TERMIOS buf.c_lflag |= NOFLSH; result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf); #else /* FIXME */ #endif if (result == OK) termp->Nttyb = buf; AFTER("noqiflush"); } returnVoid; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) noqiflush(void) { NCURSES_SP_NAME(noqiflush) (CURRENT_SCREEN); } #endif /* * This call does the same thing as the qiflush()/noqiflush() pair. We know * for certain that SVr3 intrflush() tweaks the NOFLSH bit; on the other hand, * the match (in the SVr4 man pages) between the language describing NOFLSH in * termio(7) and the language describing qiflush()/noqiflush() in * curs_inopts(3x) is too exact to be coincidence. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(intrflush) (NCURSES_SP_DCLx WINDOW *win GCC_UNUSED, bool flag) { int result = ERR; TERMINAL *termp; T((T_CALLED("intrflush(%p,%d)"), (void *) SP_PARM, flag)); if (SP_PARM == 0) returnCode(ERR); if ((termp = TerminalOf(SP_PARM)) != 0) { TTY buf; BEFORE("intrflush"); buf = termp->Nttyb; #ifdef TERMIOS if (flag) buf.c_lflag &= (unsigned) ~(NOFLSH); else buf.c_lflag |= (NOFLSH); result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf); #else /* FIXME */ #endif if (result == OK) { termp->Nttyb = buf; } AFTER("intrflush"); } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) intrflush(WINDOW *win GCC_UNUSED, bool flag) { return NCURSES_SP_NAME(intrflush) (CURRENT_SCREEN, win, flag); } #endif ncurses-6.0-20160213/ncurses/tinfo/init_keytry.c0000644000175100001440000000752511364670344020014 0ustar tomusers/**************************************************************************** * Copyright (c) 1999-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ #include #include /* struct tinfo_fkeys */ MODULE_ID("$Id: init_keytry.c,v 1.17 2010/04/24 22:29:56 tom Exp $") /* ** _nc_init_keytry() ** ** Construct the try for the current terminal's keypad keys. ** */ /* * Internal entrypoints use SCREEN* parameter to obtain capabilities rather * than cur_term. */ #undef CUR #define CUR SP_TERMTYPE #if BROKEN_LINKER #undef _nc_tinfo_fkeys #endif /* LINT_PREPRO #if 0*/ #include /* LINT_PREPRO #endif*/ #if BROKEN_LINKER const struct tinfo_fkeys * _nc_tinfo_fkeysf(void) { return _nc_tinfo_fkeys; } #endif NCURSES_EXPORT(void) _nc_init_keytry(SCREEN *sp) { unsigned n; /* The sp->_keytry value is initialized in newterm(), where the sp * structure is created, because we can not tell where keypad() or * mouse_activate() (which will call keyok()) are first called. */ if (sp != 0) { for (n = 0; _nc_tinfo_fkeys[n].code; n++) { if (_nc_tinfo_fkeys[n].offset < STRCOUNT) { (void) _nc_add_to_try(&(sp->_keytry), CUR Strings[_nc_tinfo_fkeys[n].offset], _nc_tinfo_fkeys[n].code); } } #if NCURSES_XNAMES /* * Add any of the extended strings to the tries if their name begins * with 'k', i.e., they follow the convention of other terminfo key * names. */ { TERMTYPE *tp = &(sp->_term->type); for (n = STRCOUNT; n < NUM_STRINGS(tp); ++n) { const char *name = ExtStrname(tp, (int) n, strnames); char *value = tp->Strings[n]; if (name != 0 && *name == 'k' && value != 0 && NCURSES_SP_NAME(key_defined) (NCURSES_SP_ARGx value) == 0) { (void) _nc_add_to_try(&(sp->_keytry), value, n - STRCOUNT + KEY_MAX); } } } #endif #ifdef TRACE _nc_trace_tries(sp->_keytry); #endif } } ncurses-6.0-20160213/ncurses/tinfo/make_hash.c0000644000175100001440000002251712221641123017342 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * make_hash.c --- build-time program for constructing comp_captab.c * */ #include #include #include #include MODULE_ID("$Id: make_hash.c,v 1.13 2013/09/28 20:55:47 tom Exp $") /* * _nc_make_hash_table() * * Takes the entries in table[] and hashes them into hash_table[] * by name. There are CAPTABSIZE entries in table[] and HASHTABSIZE * slots in hash_table[]. * */ #undef MODULE_ID #define MODULE_ID(id) /*nothing */ #include static void failed(const char *s) { perror(s); exit(EXIT_FAILURE); } static char * strmalloc(char *s) { size_t need = strlen(s) + 1; char *result = malloc(need); if (result == 0) failed("strmalloc"); _nc_STRCPY(result, s, need); return result; } /* * int hash_function(string) * * Computes the hashing function on the given string. * * The current hash function is the sum of each consectutive pair * of characters, taken as two-byte integers, mod HASHTABSIZE. * */ static int hash_function(const char *string) { long sum = 0; while (*string) { sum += (long) (*string + (*(string + 1) << 8)); string++; } return (int) (sum % HASHTABSIZE); } static void _nc_make_hash_table(struct name_table_entry *table, HashValue * hash_table) { short i; int hashvalue; int collisions = 0; for (i = 0; i < HASHTABSIZE; i++) { hash_table[i] = -1; } for (i = 0; i < CAPTABSIZE; i++) { hashvalue = hash_function(table[i].nte_name); if (hash_table[hashvalue] >= 0) collisions++; if (hash_table[hashvalue] != 0) table[i].nte_link = hash_table[hashvalue]; hash_table[hashvalue] = i; } printf("/* %d collisions out of %d entries */\n", collisions, CAPTABSIZE); } /* * This filter reads from standard input a list of tab-delimited columns, * (e.g., from Caps.filtered) computes the hash-value of a specified column and * writes the hashed tables to standard output. * * By compiling the hash table at build time, we're able to make the entire * set of terminfo and termcap tables readonly (and also provide some runtime * performance enhancement). */ #define MAX_COLUMNS BUFSIZ /* this _has_ to be worst-case */ static int count_columns(char **list) { int result = 0; if (list != 0) { while (*list++) { ++result; } } return result; } static char ** parse_columns(char *buffer) { static char **list; int col = 0; if (list == 0 && (list = typeCalloc(char *, (MAX_COLUMNS + 1))) == 0) return (0); if (*buffer != '#') { while (*buffer != '\0') { char *s; for (s = buffer; (*s != '\0') && !isspace(UChar(*s)); s++) /*EMPTY */ ; if (s != buffer) { char mark = *s; *s = '\0'; if ((s - buffer) > 1 && (*buffer == '"') && (s[-1] == '"')) { /* strip the quotes */ assert(s > buffer + 1); s[-1] = '\0'; buffer++; } list[col] = buffer; col++; if (mark == '\0') break; while (*++s && isspace(UChar(*s))) /*EMPTY */ ; buffer = s; } else break; } } return col ? list : 0; } int main(int argc, char **argv) { struct name_table_entry *name_table = typeCalloc(struct name_table_entry, CAPTABSIZE); HashValue *hash_table = typeCalloc(HashValue, HASHTABSIZE); const char *root_name = ""; int column = 0; int bigstring = 0; int n; char buffer[BUFSIZ]; static const char *typenames[] = {"BOOLEAN", "NUMBER", "STRING"}; short BoolCount = 0; short NumCount = 0; short StrCount = 0; /* The first argument is the column-number (starting with 0). * The second is the root name of the tables to generate. */ if (argc <= 3 || (column = atoi(argv[1])) <= 0 || (column >= MAX_COLUMNS) || *(root_name = argv[2]) == 0 || (bigstring = atoi(argv[3])) < 0 || name_table == 0 || hash_table == 0) { fprintf(stderr, "usage: make_hash column root_name bigstring\n"); exit(EXIT_FAILURE); } /* * Read the table into our arrays. */ for (n = 0; (n < CAPTABSIZE) && fgets(buffer, BUFSIZ, stdin);) { char **list, *nlp = strchr(buffer, '\n'); if (nlp) *nlp = '\0'; list = parse_columns(buffer); if (list == 0) /* blank or comment */ continue; if (column > count_columns(list)) { fprintf(stderr, "expected %d columns, have %d:\n%s\n", column, count_columns(list), buffer); exit(EXIT_FAILURE); } name_table[n].nte_link = -1; /* end-of-hash */ name_table[n].nte_name = strmalloc(list[column]); if (!strcmp(list[2], "bool")) { name_table[n].nte_type = BOOLEAN; name_table[n].nte_index = BoolCount++; } else if (!strcmp(list[2], "num")) { name_table[n].nte_type = NUMBER; name_table[n].nte_index = NumCount++; } else if (!strcmp(list[2], "str")) { name_table[n].nte_type = STRING; name_table[n].nte_index = StrCount++; } else { fprintf(stderr, "Unknown type: %s\n", list[2]); exit(EXIT_FAILURE); } n++; } _nc_make_hash_table(name_table, hash_table); /* * Write the compiled tables to standard output */ if (bigstring) { int len = 0; int nxt; printf("static const char %s_names_text[] = \\\n", root_name); for (n = 0; n < CAPTABSIZE; n++) { nxt = (int) strlen(name_table[n].nte_name) + 5; if (nxt + len > 72) { printf("\\\n"); len = 0; } printf("\"%s\\0\" ", name_table[n].nte_name); len += nxt; } printf(";\n\n"); len = 0; printf("static name_table_data const %s_names_data[] =\n", root_name); printf("{\n"); for (n = 0; n < CAPTABSIZE; n++) { printf("\t{ %15d,\t%10s,\t%3d, %3d }%c\n", len, typenames[name_table[n].nte_type], name_table[n].nte_index, name_table[n].nte_link, n < CAPTABSIZE - 1 ? ',' : ' '); len += (int) strlen(name_table[n].nte_name) + 1; } printf("};\n\n"); printf("static struct name_table_entry *_nc_%s_table = 0;\n\n", root_name); } else { printf("static struct name_table_entry const _nc_%s_table[] =\n", root_name); printf("{\n"); for (n = 0; n < CAPTABSIZE; n++) { _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "\"%s\"", name_table[n].nte_name); printf("\t{ %15s,\t%10s,\t%3d, %3d }%c\n", buffer, typenames[name_table[n].nte_type], name_table[n].nte_index, name_table[n].nte_link, n < CAPTABSIZE - 1 ? ',' : ' '); } printf("};\n\n"); } printf("static const HashValue _nc_%s_hash_table[%d] =\n", root_name, HASHTABSIZE + 1); printf("{\n"); for (n = 0; n < HASHTABSIZE; n++) { printf("\t%3d,\n", hash_table[n]); } printf("\t0\t/* base-of-table */\n"); printf("};\n\n"); printf("#if (BOOLCOUNT!=%d)||(NUMCOUNT!=%d)||(STRCOUNT!=%d)\n", BoolCount, NumCount, StrCount); printf("#error\t--> term.h and comp_captab.c disagree about the <--\n"); printf("#error\t--> numbers of booleans, numbers and/or strings <--\n"); printf("#endif\n\n"); free(hash_table); return EXIT_SUCCESS; } ncurses-6.0-20160213/ncurses/tinfo/strings.c0000644000175100001440000001105711721266567017133 0ustar tomusers/**************************************************************************** * Copyright (c) 2000-2007,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ /* ** lib_mvcur.c **/ #include MODULE_ID("$Id: strings.c,v 1.8 2012/02/22 22:34:31 tom Exp $") /**************************************************************************** * Useful string functions (especially for mvcur) ****************************************************************************/ #if !HAVE_STRSTR NCURSES_EXPORT(char *) _nc_strstr(const char *haystack, const char *needle) { size_t len1 = strlen(haystack); size_t len2 = strlen(needle); char *result = 0; while ((len1 != 0) && (len1-- >= len2)) { if (!strncmp(haystack, needle, len2)) { result = (char *) haystack; break; } haystack++; } return result; } #endif /* * Initialize the descriptor so we can append to it. Note that 'src' may * be a null pointer (see _nc_str_null), so the corresponding strcat and * strcpy calls have to allow for this. */ NCURSES_EXPORT(string_desc *) _nc_str_init(string_desc * dst, char *src, size_t len) { if (dst != 0) { dst->s_head = src; dst->s_tail = src; dst->s_size = len - 1; dst->s_init = dst->s_size; if (src != 0) *src = 0; } return dst; } /* * Initialize the descriptor for only tracking the amount of memory used. */ NCURSES_EXPORT(string_desc *) _nc_str_null(string_desc * dst, size_t len) { return _nc_str_init(dst, 0, len); } /* * Copy a descriptor */ NCURSES_EXPORT(string_desc *) _nc_str_copy(string_desc * dst, string_desc * src) { *dst = *src; return dst; } /* * Replaces strcat into a fixed buffer, returning false on failure. */ NCURSES_EXPORT(bool) _nc_safe_strcat(string_desc * dst, const char *src) { if (src != 0) { size_t len = strlen(src); if (len < dst->s_size) { if (dst->s_tail != 0) { _nc_STRCPY(dst->s_tail, src, dst->s_size); dst->s_tail += len; } dst->s_size -= len; return TRUE; } } return FALSE; } /* * Replaces strcpy into a fixed buffer, returning false on failure. */ NCURSES_EXPORT(bool) _nc_safe_strcpy(string_desc * dst, const char *src) { if (src != 0) { size_t len = strlen(src); if (len < dst->s_size) { if (dst->s_head != 0) { _nc_STRCPY(dst->s_head, src, dst->s_size); dst->s_tail = dst->s_head + len; } dst->s_size = dst->s_init - len; return TRUE; } } return FALSE; } ncurses-6.0-20160213/ncurses/tinfo/db_iterator.c0000644000175100001440000002544212425171144017727 0ustar tomusers/**************************************************************************** * Copyright (c) 2006-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ /* * Iterators for terminal databases. */ #include #include #include #if USE_HASHED_DB #include #endif MODULE_ID("$Id: db_iterator.c,v 1.39 2014/11/01 14:47:00 tom Exp $") #define HaveTicDirectory _nc_globals.have_tic_directory #define KeepTicDirectory _nc_globals.keep_tic_directory #define TicDirectory _nc_globals.tic_directory #define my_blob _nc_globals.dbd_blob #define my_list _nc_globals.dbd_list #define my_size _nc_globals.dbd_size #define my_time _nc_globals.dbd_time #define my_vars _nc_globals.dbd_vars static void add_to_blob(const char *text, size_t limit) { (void) limit; if (*text != '\0') { char *last = my_blob + strlen(my_blob); if (last != my_blob) *last++ = NCURSES_PATHSEP; _nc_STRCPY(last, text, limit); } } static bool check_existence(const char *name, struct stat *sb) { bool result = FALSE; if (stat(name, sb) == 0 && (S_ISDIR(sb->st_mode) || S_ISREG(sb->st_mode))) { result = TRUE; } #if USE_HASHED_DB else if (strlen(name) < PATH_MAX - sizeof(DBM_SUFFIX)) { char temp[PATH_MAX]; _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "%s%s", name, DBM_SUFFIX); if (stat(temp, sb) == 0 && S_ISREG(sb->st_mode)) { result = TRUE; } } #endif return result; } /* * Store the latest value of an environment variable in my_vars[] so we can * detect if one changes, invalidating the cached search-list. */ static bool update_getenv(const char *name, DBDIRS which) { bool result = FALSE; if (which < dbdLAST) { char *value; if ((value = getenv(name)) == 0 || (value = strdup(value)) == 0) { ; } else if (my_vars[which].name == 0 || strcmp(my_vars[which].name, name)) { FreeIfNeeded(my_vars[which].value); my_vars[which].name = name; my_vars[which].value = value; result = TRUE; } else if ((my_vars[which].value != 0) ^ (value != 0)) { FreeIfNeeded(my_vars[which].value); my_vars[which].value = value; result = TRUE; } else if (value != 0 && strcmp(value, my_vars[which].value)) { FreeIfNeeded(my_vars[which].value); my_vars[which].value = value; result = TRUE; } else { free(value); } } return result; } static char * cache_getenv(const char *name, DBDIRS which) { char *result = 0; (void) update_getenv(name, which); if (which < dbdLAST) { result = my_vars[which].value; } return result; } /* * The cache expires if at least a second has passed since the initial lookup, * or if one of the environment variables changed. * * Only a few applications use multiple lookups of terminal entries, seems that * aside from bulk I/O such as tic and toe, that leaves interactive programs * which should not be modifying the terminal databases in a way that would * invalidate the search-list. * * The "1-second" is to allow for user-directed changes outside the program. */ static bool cache_expired(void) { bool result = FALSE; time_t now = time((time_t *) 0); if (now > my_time) { result = TRUE; } else { DBDIRS n; for (n = (DBDIRS) 0; n < dbdLAST; ++n) { if (my_vars[n].name != 0 && update_getenv(my_vars[n].name, n)) { result = TRUE; break; } } } return result; } static void free_cache(void) { FreeAndNull(my_blob); FreeAndNull(my_list); } /* * Record the "official" location of the terminfo directory, according to * the place where we're writing to, or the normal default, if not. */ NCURSES_EXPORT(const char *) _nc_tic_dir(const char *path) { T(("_nc_tic_dir %s", NonNull(path))); if (!KeepTicDirectory) { if (path != 0) { TicDirectory = path; HaveTicDirectory = TRUE; } else if (HaveTicDirectory == 0) { if (use_terminfo_vars()) { const char *envp; if ((envp = getenv("TERMINFO")) != 0) return _nc_tic_dir(envp); } } } return TicDirectory ? TicDirectory : TERMINFO; } /* * Special fix to prevent the terminfo directory from being moved after tic * has chdir'd to it. If we let it be changed, then if $TERMINFO has a * relative path, we'll lose track of the actual directory. */ NCURSES_EXPORT(void) _nc_keep_tic_dir(const char *path) { _nc_tic_dir(path); KeepTicDirectory = TRUE; } /* * Cleanup. */ NCURSES_EXPORT(void) _nc_last_db(void) { if (my_blob != 0 && cache_expired()) { free_cache(); } } /* * This is a simple iterator which allows the caller to step through the * possible locations for a terminfo directory. ncurses uses this to find * terminfo files to read. */ NCURSES_EXPORT(const char *) _nc_next_db(DBDIRS * state, int *offset) { const char *result; (void) offset; if ((int) *state < my_size && my_list != 0 && my_list[*state] != 0) { result = my_list[*state]; (*state)++; } else { result = 0; } if (result != 0) { T(("_nc_next_db %d %s", *state, result)); } return result; } NCURSES_EXPORT(void) _nc_first_db(DBDIRS * state, int *offset) { bool cache_has_expired = FALSE; *state = dbdTIC; *offset = 0; T(("_nc_first_db")); /* build a blob containing all of the strings we will use for a lookup * table. */ if (my_blob == 0 || (cache_has_expired = cache_expired())) { size_t blobsize = 0; const char *values[dbdLAST]; struct stat *my_stat; int j, k; if (cache_has_expired) free_cache(); for (j = 0; j < dbdLAST; ++j) values[j] = 0; /* * This is the first item in the list, and is used only when tic is * writing to the database, as a performance improvement. */ values[dbdTIC] = TicDirectory; #if NCURSES_USE_DATABASE #ifdef TERMINFO_DIRS values[dbdCfgList] = TERMINFO_DIRS; #endif #ifdef TERMINFO values[dbdCfgOnce] = TERMINFO; #endif #endif #if NCURSES_USE_TERMCAP values[dbdCfgList2] = TERMPATH; #endif if (use_terminfo_vars()) { #if NCURSES_USE_DATABASE values[dbdEnvOnce] = cache_getenv("TERMINFO", dbdEnvOnce); values[dbdHome] = _nc_home_terminfo(); (void) cache_getenv("HOME", dbdHome); values[dbdEnvList] = cache_getenv("TERMINFO_DIRS", dbdEnvList); #endif #if NCURSES_USE_TERMCAP values[dbdEnvOnce2] = cache_getenv("TERMCAP", dbdEnvOnce2); /* only use $TERMCAP if it is an absolute path */ if (values[dbdEnvOnce2] != 0 && *values[dbdEnvOnce2] != '/') { values[dbdEnvOnce2] = 0; } values[dbdEnvList2] = cache_getenv("TERMPATH", dbdEnvList2); #endif /* NCURSES_USE_TERMCAP */ } for (j = 0; j < dbdLAST; ++j) { if (values[j] == 0) values[j] = ""; blobsize += 2 + strlen(values[j]); } my_blob = malloc(blobsize); if (my_blob != 0) { *my_blob = '\0'; for (j = 0; j < dbdLAST; ++j) { add_to_blob(values[j], blobsize); } /* Now, build an array which will be pointers to the distinct * strings in the blob. */ blobsize = 2; for (j = 0; my_blob[j] != '\0'; ++j) { if (my_blob[j] == NCURSES_PATHSEP) ++blobsize; } my_list = typeCalloc(char *, blobsize); my_stat = typeCalloc(struct stat, blobsize); if (my_list != 0 && my_stat != 0) { k = 0; my_list[k++] = my_blob; for (j = 0; my_blob[j] != '\0'; ++j) { if (my_blob[j] == NCURSES_PATHSEP) { my_blob[j] = '\0'; my_list[k++] = &my_blob[j + 1]; } } /* * Eliminate duplicates from the list. */ for (j = 0; my_list[j] != 0; ++j) { #ifdef TERMINFO if (*my_list[j] == '\0') my_list[j] = strdup(TERMINFO); #endif for (k = 0; k < j; ++k) { if (!strcmp(my_list[j], my_list[k])) { k = j - 1; while ((my_list[j] = my_list[j + 1]) != 0) { ++j; } j = k; break; } } } /* * Eliminate non-existent databases, and those that happen to * be symlinked to another location. */ for (j = 0; my_list[j] != 0; ++j) { bool found = check_existence(my_list[j], &my_stat[j]); #if HAVE_LINK if (found) { for (k = 0; k < j; ++k) { if (my_stat[j].st_dev == my_stat[k].st_dev && my_stat[j].st_ino == my_stat[k].st_ino) { found = FALSE; break; } } } #endif if (!found) { k = j; while ((my_list[k] = my_list[k + 1]) != 0) { ++k; } --j; } } my_size = j; my_time = time((time_t *) 0); } else { FreeAndNull(my_blob); } free(my_stat); } } } #if NO_LEAKS void _nc_db_iterator_leaks(void) { DBDIRS which; if (my_blob != 0) FreeAndNull(my_blob); if (my_list != 0) FreeAndNull(my_list); for (which = 0; (int) which < dbdLAST; ++which) { my_vars[which].name = 0; FreeIfNeeded(my_vars[which].value); my_vars[which].value = 0; } } #endif ncurses-6.0-20160213/ncurses/tinfo/use_screen.c0000644000175100001440000000566312650770520017572 0ustar tomusers/**************************************************************************** * Copyright (c) 2007-2009,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2007 * ****************************************************************************/ #include MODULE_ID("$Id: use_screen.c,v 1.9 2016/01/23 21:32:00 tom Exp $") NCURSES_EXPORT(int) use_screen(SCREEN *screen, NCURSES_SCREEN_CB func, void *data) { SCREEN *save_SP; int code = OK; T((T_CALLED("use_screen(%p,%p,%p)"), (void *) screen, TR_FUNC(func), (void *) data)); /* * FIXME - add a flag so a given thread can check if _it_ has already * recurred through this point, return an error if so. */ _nc_lock_global(curses); save_SP = CURRENT_SCREEN; set_term(screen); code = func(screen, data); set_term(save_SP); _nc_unlock_global(curses); returnCode(code); } ncurses-6.0-20160213/ncurses/tinfo/lib_napms.c0000644000175100001440000000724212306677173017406 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * lib_napms.c * * The routine napms. * * (This file was originally written by Eric Raymond; however except for * comments, none of the original code remains - T.Dickey). */ #include #if HAVE_NANOSLEEP #include #if HAVE_SYS_TIME_H #include /* needed for MacOS X DP3 */ #endif #endif MODULE_ID("$Id: lib_napms.c,v 1.24 2014/03/08 20:32:59 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(napms) (NCURSES_SP_DCLx int ms) { T((T_CALLED("napms(%d)"), ms)); #ifdef USE_TERM_DRIVER if (HasTerminal(SP_PARM)) { CallDriver_1(SP_PARM, td_nap, ms); } #else /* !USE_TERM_DRIVER */ #if NCURSES_SP_FUNCS (void) sp; #endif #if HAVE_NANOSLEEP { struct timespec request, remaining; request.tv_sec = ms / 1000; request.tv_nsec = (ms % 1000) * 1000000; while (nanosleep(&request, &remaining) == -1 && errno == EINTR) { request = remaining; } } #else _nc_timed_wait(0, 0, ms, (int *) 0 EVENTLIST_2nd(0)); #endif #endif /* !USE_TERM_DRIVER */ returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) napms(int ms) { return NCURSES_SP_NAME(napms) (CURRENT_SCREEN, ms); } #endif ncurses-6.0-20160213/ncurses/tinfo/getenv_num.c0000644000175100001440000000614212221635444017576 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1998 * ****************************************************************************/ /* * getenv_num.c -- obtain a number from the environment */ #include MODULE_ID("$Id: getenv_num.c,v 1.6 2013/09/28 20:25:08 tom Exp $") NCURSES_EXPORT(int) _nc_getenv_num(const char *name) { char *dst = 0; char *src = getenv(name); long value; if ((src == 0) || (value = strtol(src, &dst, 0)) < 0 || (dst == src) || (*dst != '\0') || (int) value < value) value = -1; return (int) value; } NCURSES_EXPORT(void) _nc_setenv_num(const char *name, int value) { if (name != 0 && value >= 0) { char buffer[128]; #if HAVE_SETENV _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%d", value); setenv(name, buffer, 1); #elif HAVE_PUTENV char *s; _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%s=%d", name, value); if ((s = strdup(buffer)) != 0) putenv(s); #endif } } ncurses-6.0-20160213/ncurses/tinfo/entries.c0000644000175100001440000001213711751307250017077 0ustar tomusers/**************************************************************************** * Copyright (c) 2006-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * * and: Juergen Pfeifer * ****************************************************************************/ #include #include #include MODULE_ID("$Id: entries.c,v 1.21 2012/05/05 20:33:44 tom Exp $") /**************************************************************************** * * Entry queue handling * ****************************************************************************/ /* * The entry list is a doubly linked list with NULLs terminating the lists: * * --------- --------- --------- * | | | | | | offset * |-------| |-------| |-------| * | ----+-->| ----+-->| NULL | next * |-------| |-------| |-------| * | NULL |<--+---- |<--+---- | last * --------- --------- --------- * ^ ^ * | | * | | * _nc_head _nc_tail */ NCURSES_EXPORT_VAR(ENTRY *) _nc_head = 0; NCURSES_EXPORT_VAR(ENTRY *) _nc_tail = 0; NCURSES_EXPORT(void) _nc_free_entry(ENTRY * headp, TERMTYPE *tterm) /* free the allocated storage consumed by the given list entry */ { ENTRY *ep; if ((ep = _nc_delink_entry(headp, tterm)) != 0) { free(ep); } } NCURSES_EXPORT(void) _nc_free_entries(ENTRY * headp) /* free the allocated storage consumed by list entries */ { (void) headp; /* unused - _nc_head is altered here! */ while (_nc_head != 0) { _nc_free_termtype(&(_nc_head->tterm)); } } NCURSES_EXPORT(ENTRY *) _nc_delink_entry(ENTRY * headp, TERMTYPE *tterm) /* delink the allocated storage for the given list entry */ { ENTRY *ep, *last; for (last = 0, ep = headp; ep != 0; last = ep, ep = ep->next) { if (&(ep->tterm) == tterm) { if (last != 0) { last->next = ep->next; } if (ep->next != 0) { ep->next->last = last; } if (ep == _nc_head) { _nc_head = ep->next; } if (ep == _nc_tail) { _nc_tail = last; } break; } } return ep; } NCURSES_EXPORT(void) _nc_leaks_tinfo(void) { #if NO_LEAKS char *s; #endif T((T_CALLED("_nc_free_tinfo()"))); #if NO_LEAKS _nc_free_tparm(); _nc_tgetent_leaks(); if (TerminalOf(CURRENT_SCREEN) != 0) { del_curterm(TerminalOf(CURRENT_SCREEN)); } _nc_comp_captab_leaks(); _nc_free_entries(_nc_head); _nc_get_type(0); _nc_first_name(0); _nc_db_iterator_leaks(); _nc_keyname_leaks(); #if BROKEN_LINKER || USE_REENTRANT _nc_names_leaks(); _nc_codes_leaks(); FreeIfNeeded(_nc_prescreen.real_acs_map); #endif _nc_comp_error_leaks(); if ((s = _nc_home_terminfo()) != 0) free(s); #ifdef TRACE trace(0); _nc_trace_buf(-1, (size_t) 0); #endif #endif /* NO_LEAKS */ returnVoid; } #if NO_LEAKS NCURSES_EXPORT(void) _nc_free_tinfo(int code) { _nc_leaks_tinfo(); exit(code); } #endif ncurses-6.0-20160213/ncurses/tinfo/comp_hash.c0000644000175100001440000001100511237333625017364 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * comp_hash.c --- Routines to deal with the hashtable of capability * names. * */ #define USE_TERMLIB 1 #include #include #include MODULE_ID("$Id: comp_hash.c,v 1.48 2009/08/08 17:36:21 tom Exp $") /* * Finds the entry for the given string in the hash table if present. * Returns a pointer to the entry in the table or 0 if not found. */ /* entrypoint used by tack (do not alter) */ NCURSES_EXPORT(struct name_table_entry const *) _nc_find_entry(const char *string, const HashValue * hash_table) { bool termcap = (hash_table != _nc_get_hash_table(FALSE)); const HashData *data = _nc_get_hash_info(termcap); int hashvalue; struct name_table_entry const *ptr = 0; struct name_table_entry const *real_table; hashvalue = data->hash_of(string); if (data->table_data[hashvalue] >= 0) { real_table = _nc_get_table(termcap); ptr = real_table + data->table_data[hashvalue]; while (!data->compare_names(ptr->nte_name, string)) { if (ptr->nte_link < 0) { ptr = 0; break; } ptr = real_table + (ptr->nte_link + data->table_data[data->table_size]); } } return (ptr); } /* * Finds the entry for the given name with the given type in the given table if * present (as distinct from _nc_find_entry, which finds the last entry * regardless of type). * * Returns a pointer to the entry in the table or 0 if not found. */ NCURSES_EXPORT(struct name_table_entry const *) _nc_find_type_entry(const char *string, int type, bool termcap) { struct name_table_entry const *ptr = NULL; const HashData *data = _nc_get_hash_info(termcap); int hashvalue = data->hash_of(string); if (data->table_data[hashvalue] >= 0) { const struct name_table_entry *const table = _nc_get_table(termcap); ptr = table + data->table_data[hashvalue]; while (ptr->nte_type != type || !data->compare_names(ptr->nte_name, string)) { if (ptr->nte_link < 0) { ptr = 0; break; } ptr = table + (ptr->nte_link + data->table_data[data->table_size]); } } return ptr; } ncurses-6.0-20160213/ncurses/tinfo/lib_cur_term.c0000644000175100001440000001237112306677173020107 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997 * ****************************************************************************/ /* * Module that "owns" the 'cur_term' variable: * * TERMINAL *set_curterm(TERMINAL *) * int del_curterm(TERMINAL *) */ #include #include /* ospeed */ MODULE_ID("$Id: lib_cur_term.c,v 1.33 2014/03/08 20:32:59 tom Exp $") #undef CUR #define CUR termp->type. #if USE_REENTRANT NCURSES_EXPORT(TERMINAL *) NCURSES_SP_NAME(_nc_get_cur_term) (NCURSES_SP_DCL0) { return ((0 != TerminalOf(SP_PARM)) ? TerminalOf(SP_PARM) : CurTerm); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(TERMINAL *) _nc_get_cur_term(void) { return NCURSES_SP_NAME(_nc_get_cur_term) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(TERMINAL *) NCURSES_PUBLIC_VAR(cur_term) (void) { #if NCURSES_SP_FUNCS return NCURSES_SP_NAME(_nc_get_cur_term) (CURRENT_SCREEN); #else return NCURSES_SP_NAME(_nc_get_cur_term) (NCURSES_SP_ARG); #endif } #else NCURSES_EXPORT_VAR(TERMINAL *) cur_term = 0; #endif NCURSES_EXPORT(TERMINAL *) NCURSES_SP_NAME(set_curterm) (NCURSES_SP_DCLx TERMINAL * termp) { TERMINAL *oldterm; T((T_CALLED("set_curterm(%p)"), (void *) termp)); _nc_lock_global(curses); oldterm = cur_term; if (SP_PARM) SP_PARM->_term = termp; #if USE_REENTRANT CurTerm = termp; #else cur_term = termp; #endif if (termp != 0) { #ifdef USE_TERM_DRIVER TERMINAL_CONTROL_BLOCK *TCB = (TERMINAL_CONTROL_BLOCK *) termp; ospeed = (NCURSES_OSPEED) _nc_ospeed(termp->_baudrate); if (TCB->drv->isTerminfo && termp->type.Strings) { PC = (char) ((pad_char != NULL) ? pad_char[0] : 0); } TCB->csp = SP_PARM; #else ospeed = (NCURSES_OSPEED) _nc_ospeed(termp->_baudrate); if (termp->type.Strings) { PC = (char) ((pad_char != NULL) ? pad_char[0] : 0); } #endif } _nc_unlock_global(curses); T((T_RETURN("%p"), (void *) oldterm)); return (oldterm); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(TERMINAL *) set_curterm(TERMINAL * termp) { return NCURSES_SP_NAME(set_curterm) (CURRENT_SCREEN, termp); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(del_curterm) (NCURSES_SP_DCLx TERMINAL * termp) { int rc = ERR; T((T_CALLED("del_curterm(%p, %p)"), (void *) SP_PARM, (void *) termp)); if (termp != 0) { #ifdef USE_TERM_DRIVER TERMINAL_CONTROL_BLOCK *TCB = (TERMINAL_CONTROL_BLOCK *) termp; #endif TERMINAL *cur = ( #if USE_REENTRANT NCURSES_SP_NAME(_nc_get_cur_term) (NCURSES_SP_ARG) #else cur_term #endif ); _nc_free_termtype(&(termp->type)); if (termp == cur) NCURSES_SP_NAME(set_curterm) (NCURSES_SP_ARGx 0); FreeIfNeeded(termp->_termname); #if USE_HOME_TERMINFO if (_nc_globals.home_terminfo != 0) { FreeAndNull(_nc_globals.home_terminfo); } #endif #ifdef USE_TERM_DRIVER if (TCB->drv) TCB->drv->td_release(TCB); #endif free(termp); rc = OK; } returnCode(rc); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) del_curterm(TERMINAL * termp) { int rc = ERR; _nc_lock_global(curses); rc = NCURSES_SP_NAME(del_curterm) (CURRENT_SCREEN, termp); _nc_unlock_global(curses); return (rc); } #endif ncurses-6.0-20160213/ncurses/tinfo/MKfallback.sh0000755000175100001440000000745211427341342017614 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: MKfallback.sh,v 1.15 2010/08/07 20:32:34 tom Exp $ # # MKfallback.sh -- create fallback table for entry reads # # This script generates source code for a custom version of read_entry.c # that (instead of reading capabilities for an argument terminal type # from an on-disk terminfo tree) tries to match the type with one of a # specified list of types generated in. # terminfo_dir=$1 shift terminfo_src=$1 shift tic_path=$1 shift case $tic_path in #(vi /*) tic_head=`echo "$tic_path" | sed -e 's,/[^/]*$,,'` PATH=$tic_head:$PATH export PATH ;; esac if test $# != 0 ; then tmp_info=tmp_info echo creating temporary terminfo directory... >&2 TERMINFO=`pwd`/$tmp_info export TERMINFO TERMINFO_DIRS=$TERMINFO:$terminfo_dir export TERMINFO_DIRS $tic_path -x $terminfo_src >&2 else tmp_info= fi cat < EOF if [ "$*" ] then cat < /* fallback entries for: $* */ EOF for x in $* do echo "/* $x */" infocmp -E $x done cat <term_names, name, "|")) return(tp); EOF else echo " /* the fallback list is empty */"; fi cat <&2 rm -rf $tmp_info fi ncurses-6.0-20160213/ncurses/tinfo/lib_ttyflags.c0000644000175100001440000001724612326777470020135 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* * def_prog_mode() * def_shell_mode() * reset_prog_mode() * reset_shell_mode() * savetty() * resetty() */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_ttyflags.c,v 1.30 2014/04/26 18:47:20 juergen Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_get_tty_mode) (NCURSES_SP_DCLx TTY * buf) { int result = OK; if (buf == 0 || SP_PARM == 0) { result = ERR; } else { TERMINAL *termp = TerminalOf(SP_PARM); if (0 == termp) { result = ERR; } else { #ifdef USE_TERM_DRIVER result = CallDriver_2(SP_PARM, td_sgmode, FALSE, buf); #else for (;;) { if (GET_TTY(termp->Filedes, buf) != 0) { if (errno == EINTR) continue; result = ERR; } break; } #endif } if (result == ERR) memset(buf, 0, sizeof(*buf)); TR(TRACE_BITS, ("_nc_get_tty_mode(%d): %s", termp ? termp->Filedes : -1, _nc_trace_ttymode(buf))); } return (result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_get_tty_mode(TTY * buf) { return NCURSES_SP_NAME(_nc_get_tty_mode) (CURRENT_SCREEN, buf); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_DCLx TTY * buf) { int result = OK; if (buf == 0 || SP_PARM == 0) { result = ERR; } else { TERMINAL *termp = TerminalOf(SP_PARM); if (0 == termp) { result = ERR; } else { #ifdef USE_TERM_DRIVER result = CallDriver_2(SP_PARM, td_sgmode, TRUE, buf); #else for (;;) { if ((SET_TTY(termp->Filedes, buf) != 0) #if USE_KLIBC_KBD && !NC_ISATTY(termp->Filedes) #endif ) { if (errno == EINTR) continue; if ((errno == ENOTTY) && (SP_PARM != 0)) SP_PARM->_notty = TRUE; result = ERR; } break; } #endif } TR(TRACE_BITS, ("_nc_set_tty_mode(%d): %s", termp ? termp->Filedes : -1, _nc_trace_ttymode(buf))); } return (result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_set_tty_mode(TTY * buf) { return NCURSES_SP_NAME(_nc_set_tty_mode) (CURRENT_SCREEN, buf); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(def_shell_mode) (NCURSES_SP_DCL0) { int rc = ERR; TERMINAL *termp = TerminalOf(SP_PARM); T((T_CALLED("def_shell_mode(%p)"), (void *) SP_PARM)); if (termp != 0) { #ifdef USE_TERM_DRIVER rc = CallDriver_2(SP_PARM, td_mode, FALSE, TRUE); #else /* * If XTABS was on, remove the tab and backtab capabilities. */ if (_nc_get_tty_mode(&termp->Ottyb) == OK) { #ifdef TERMIOS if (termp->Ottyb.c_oflag & OFLAGS_TABS) tab = back_tab = NULL; #else if (termp->Ottyb.sg_flags & XTABS) tab = back_tab = NULL; #endif rc = OK; } #endif } returnCode(rc); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) def_shell_mode(void) { return NCURSES_SP_NAME(def_shell_mode) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(def_prog_mode) (NCURSES_SP_DCL0) { int rc = ERR; TERMINAL *termp = TerminalOf(SP_PARM); T((T_CALLED("def_prog_mode(%p)"), (void *) SP_PARM)); if (termp != 0) { #ifdef USE_TERM_DRIVER rc = CallDriver_2(SP_PARM, td_mode, TRUE, TRUE); #else /* * Turn off the XTABS bit in the tty structure if it was on. */ if (_nc_get_tty_mode(&termp->Nttyb) == OK) { #ifdef TERMIOS termp->Nttyb.c_oflag &= (unsigned) (~OFLAGS_TABS); #else termp->Nttyb.sg_flags &= (unsigned) (~XTABS); #endif rc = OK; } #endif } returnCode(rc); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) def_prog_mode(void) { return NCURSES_SP_NAME(def_prog_mode) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_prog_mode) (NCURSES_SP_DCL0) { int rc = ERR; TERMINAL *termp = TerminalOf(SP_PARM); T((T_CALLED("reset_prog_mode(%p)"), (void *) SP_PARM)); if (termp != 0) { #ifdef USE_TERM_DRIVER rc = CallDriver_2(SP_PARM, td_mode, TRUE, FALSE); #else if (_nc_set_tty_mode(&termp->Nttyb) == OK) { if (SP_PARM) { if (SP_PARM->_keypad_on) _nc_keypad(SP_PARM, TRUE); } rc = OK; } #endif } returnCode(rc); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) reset_prog_mode(void) { return NCURSES_SP_NAME(reset_prog_mode) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_shell_mode) (NCURSES_SP_DCL0) { int rc = ERR; TERMINAL *termp = TerminalOf(SP_PARM); T((T_CALLED("reset_shell_mode(%p)"), (void *) SP_PARM)); if (termp != 0) { #ifdef USE_TERM_DRIVER rc = CallDriver_2(SP_PARM, td_mode, FALSE, FALSE); #else if (SP_PARM) { _nc_keypad(SP_PARM, FALSE); _nc_flush(); } rc = _nc_set_tty_mode(&termp->Ottyb); #endif } returnCode(rc); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) reset_shell_mode(void) { return NCURSES_SP_NAME(reset_shell_mode) (CURRENT_SCREEN); } #endif static TTY * saved_tty(NCURSES_SP_DCL0) { TTY *result = 0; if (SP_PARM != 0) { result = (TTY *) & (SP_PARM->_saved_tty); } else { if (_nc_prescreen.saved_tty == 0) { _nc_prescreen.saved_tty = typeCalloc(TTY, 1); } result = _nc_prescreen.saved_tty; } return result; } /* ** savetty() and resetty() ** */ NCURSES_EXPORT(int) NCURSES_SP_NAME(savetty) (NCURSES_SP_DCL0) { T((T_CALLED("savetty(%p)"), (void *) SP_PARM)); returnCode(NCURSES_SP_NAME(_nc_get_tty_mode) (NCURSES_SP_ARGx saved_tty(NCURSES_SP_ARG))); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) savetty(void) { return NCURSES_SP_NAME(savetty) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(resetty) (NCURSES_SP_DCL0) { T((T_CALLED("resetty(%p)"), (void *) SP_PARM)); returnCode(NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx saved_tty(NCURSES_SP_ARG))); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) resetty(void) { return NCURSES_SP_NAME(resetty) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/tinfo/lib_tparm.c0000644000175100001440000004727212552052147017411 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey, 1996 on * ****************************************************************************/ /* * tparm.c * */ #include #include #include MODULE_ID("$Id: lib_tparm.c,v 1.94 2015/07/17 01:03:35 tom Exp $") /* * char * * tparm(string, ...) * * Substitute the given parameters into the given string by the following * rules (taken from terminfo(5)): * * Cursor addressing and other strings requiring parame- * ters in the terminal are described by a parameterized string * capability, with escapes like %x in it. For example, to * address the cursor, the cup capability is given, using two * parameters: the row and column to address to. (Rows and * columns are numbered from zero and refer to the physical * screen visible to the user, not to any unseen memory.) If * the terminal has memory relative cursor addressing, that can * be indicated by * * The parameter mechanism uses a stack and special % * codes to manipulate it. Typically a sequence will push one * of the parameters onto the stack and then print it in some * format. Often more complex operations are necessary. * * The % encodings have the following meanings: * * %% outputs `%' * %c print pop() like %c in printf() * %s print pop() like %s in printf() * %[[:]flags][width[.precision]][doxXs] * as in printf, flags are [-+#] and space * The ':' is used to avoid making %+ or %- * patterns (see below). * * %p[1-9] push ith parm * %P[a-z] set dynamic variable [a-z] to pop() * %g[a-z] get dynamic variable [a-z] and push it * %P[A-Z] set static variable [A-Z] to pop() * %g[A-Z] get static variable [A-Z] and push it * %l push strlen(pop) * %'c' push char constant c * %{nn} push integer constant nn * * %+ %- %* %/ %m * arithmetic (%m is mod): push(pop() op pop()) * %& %| %^ bit operations: push(pop() op pop()) * %= %> %< logical operations: push(pop() op pop()) * %A %O logical and & or operations for conditionals * %! %~ unary operations push(op pop()) * %i add 1 to first two parms (for ANSI terminals) * * %? expr %t thenpart %e elsepart %; * if-then-else, %e elsepart is optional. * else-if's are possible ala Algol 68: * %? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e b5 %; * * For those of the above operators which are binary and not commutative, * the stack works in the usual way, with * %gx %gy %m * resulting in x mod y, not the reverse. */ NCURSES_EXPORT_VAR(int) _nc_tparm_err = 0; #define TPS(var) _nc_prescreen.tparm_state.var #define popcount _nc_popcount /* workaround for NetBSD 6.0 defect */ #if NO_LEAKS NCURSES_EXPORT(void) _nc_free_tparm(void) { if (TPS(out_buff) != 0) { FreeAndNull(TPS(out_buff)); TPS(out_size) = 0; TPS(out_used) = 0; FreeAndNull(TPS(fmt_buff)); TPS(fmt_size) = 0; } } #endif static NCURSES_INLINE void get_space(size_t need) { need += TPS(out_used); if (need > TPS(out_size)) { TPS(out_size) = need * 2; TYPE_REALLOC(char, TPS(out_size), TPS(out_buff)); } } static NCURSES_INLINE void save_text(const char *fmt, const char *s, int len) { size_t s_len = strlen(s); if (len > (int) s_len) s_len = (size_t) len; get_space(s_len + 1); _nc_SPRINTF(TPS(out_buff) + TPS(out_used), _nc_SLIMIT(TPS(out_size) - TPS(out_used)) fmt, s); TPS(out_used) += strlen(TPS(out_buff) + TPS(out_used)); } static NCURSES_INLINE void save_number(const char *fmt, int number, int len) { if (len < 30) len = 30; /* actually log10(MAX_INT)+1 */ get_space((size_t) len + 1); _nc_SPRINTF(TPS(out_buff) + TPS(out_used), _nc_SLIMIT(TPS(out_size) - TPS(out_used)) fmt, number); TPS(out_used) += strlen(TPS(out_buff) + TPS(out_used)); } static NCURSES_INLINE void save_char(int c) { if (c == 0) c = 0200; get_space((size_t) 1); TPS(out_buff)[TPS(out_used)++] = (char) c; } static NCURSES_INLINE void npush(int x) { if (TPS(stack_ptr) < STACKSIZE) { TPS(stack)[TPS(stack_ptr)].num_type = TRUE; TPS(stack)[TPS(stack_ptr)].data.num = x; TPS(stack_ptr)++; } else { DEBUG(2, ("npush: stack overflow: %s", _nc_visbuf(TPS(tparam_base)))); _nc_tparm_err++; } } static NCURSES_INLINE int npop(void) { int result = 0; if (TPS(stack_ptr) > 0) { TPS(stack_ptr)--; if (TPS(stack)[TPS(stack_ptr)].num_type) result = TPS(stack)[TPS(stack_ptr)].data.num; } else { DEBUG(2, ("npop: stack underflow: %s", _nc_visbuf(TPS(tparam_base)))); _nc_tparm_err++; } return result; } static NCURSES_INLINE void spush(char *x) { if (TPS(stack_ptr) < STACKSIZE) { TPS(stack)[TPS(stack_ptr)].num_type = FALSE; TPS(stack)[TPS(stack_ptr)].data.str = x; TPS(stack_ptr)++; } else { DEBUG(2, ("spush: stack overflow: %s", _nc_visbuf(TPS(tparam_base)))); _nc_tparm_err++; } } static NCURSES_INLINE char * spop(void) { static char dummy[] = ""; /* avoid const-cast */ char *result = dummy; if (TPS(stack_ptr) > 0) { TPS(stack_ptr)--; if (!TPS(stack)[TPS(stack_ptr)].num_type && TPS(stack)[TPS(stack_ptr)].data.str != 0) result = TPS(stack)[TPS(stack_ptr)].data.str; } else { DEBUG(2, ("spop: stack underflow: %s", _nc_visbuf(TPS(tparam_base)))); _nc_tparm_err++; } return result; } static NCURSES_INLINE const char * parse_format(const char *s, char *format, int *len) { *len = 0; if (format != 0) { bool done = FALSE; bool allowminus = FALSE; bool dot = FALSE; bool err = FALSE; char *fmt = format; int my_width = 0; int my_prec = 0; int value = 0; *len = 0; *format++ = '%'; while (*s != '\0' && !done) { switch (*s) { case 'c': /* FALLTHRU */ case 'd': /* FALLTHRU */ case 'o': /* FALLTHRU */ case 'x': /* FALLTHRU */ case 'X': /* FALLTHRU */ case 's': #ifdef EXP_XTERM_1005 case 'u': #endif *format++ = *s; done = TRUE; break; case '.': *format++ = *s++; if (dot) { err = TRUE; } else { /* value before '.' is the width */ dot = TRUE; my_width = value; } value = 0; break; case '#': *format++ = *s++; break; case ' ': *format++ = *s++; break; case ':': s++; allowminus = TRUE; break; case '-': if (allowminus) { *format++ = *s++; } else { done = TRUE; } break; default: if (isdigit(UChar(*s))) { value = (value * 10) + (*s - '0'); if (value > 10000) err = TRUE; *format++ = *s++; } else { done = TRUE; } } } /* * If we found an error, ignore (and remove) the flags. */ if (err) { my_width = my_prec = value = 0; format = fmt; *format++ = '%'; *format++ = *s; } /* * Any value after '.' is the precision. If we did not see '.', then * the value is the width. */ if (dot) my_prec = value; else my_width = value; *format = '\0'; /* return maximum string length in print */ *len = (my_width > my_prec) ? my_width : my_prec; } return s; } #define isUPPER(c) ((c) >= 'A' && (c) <= 'Z') #define isLOWER(c) ((c) >= 'a' && (c) <= 'z') /* * Analyze the string to see how many parameters we need from the varargs list, * and what their types are. We will only accept string parameters if they * appear as a %l or %s format following an explicit parameter reference (e.g., * %p2%s). All other parameters are numbers. * * 'number' counts coarsely the number of pop's we see in the string, and * 'popcount' shows the highest parameter number in the string. We would like * to simply use the latter count, but if we are reading termcap strings, there * may be cases that we cannot see the explicit parameter numbers. */ NCURSES_EXPORT(int) _nc_tparm_analyze(const char *string, char *p_is_s[NUM_PARM], int *popcount) { size_t len2; int i; int lastpop = -1; int len; int number = 0; const char *cp = string; static char dummy[] = ""; if (cp == 0) return 0; if ((len2 = strlen(cp)) > TPS(fmt_size)) { TPS(fmt_size) = len2 + TPS(fmt_size) + 2; TPS(fmt_buff) = typeRealloc(char, TPS(fmt_size), TPS(fmt_buff)); if (TPS(fmt_buff) == 0) return 0; } memset(p_is_s, 0, sizeof(p_is_s[0]) * NUM_PARM); *popcount = 0; while ((cp - string) < (int) len2) { if (*cp == '%') { cp++; cp = parse_format(cp, TPS(fmt_buff), &len); switch (*cp) { default: break; case 'd': /* FALLTHRU */ case 'o': /* FALLTHRU */ case 'x': /* FALLTHRU */ case 'X': /* FALLTHRU */ case 'c': /* FALLTHRU */ #ifdef EXP_XTERM_1005 case 'u': #endif if (lastpop <= 0) number++; lastpop = -1; break; case 'l': case 's': if (lastpop > 0) p_is_s[lastpop - 1] = dummy; ++number; break; case 'p': cp++; i = (UChar(*cp) - '0'); if (i >= 0 && i <= NUM_PARM) { lastpop = i; if (lastpop > *popcount) *popcount = lastpop; } break; case 'P': ++number; ++cp; break; case 'g': cp++; break; case S_QUOTE: cp += 2; lastpop = -1; break; case L_BRACE: cp++; while (isdigit(UChar(*cp))) { cp++; } break; case '+': case '-': case '*': case '/': case 'm': case 'A': case 'O': case '&': case '|': case '^': case '=': case '<': case '>': lastpop = -1; number += 2; break; case '!': case '~': lastpop = -1; ++number; break; case 'i': /* will add 1 to first (usually two) parameters */ break; } } if (*cp != '\0') cp++; } if (number > NUM_PARM) number = NUM_PARM; return number; } static NCURSES_INLINE char * tparam_internal(int use_TPARM_ARG, const char *string, va_list ap) { char *p_is_s[NUM_PARM]; TPARM_ARG param[NUM_PARM]; int popcount = 0; int number; int num_args; int len; int level; int x, y; int i; const char *cp = string; size_t len2; bool termcap_hack; bool incremented_two; if (cp == NULL) return NULL; TPS(out_used) = 0; len2 = strlen(cp); /* * Find the highest parameter-number referred to in the format string. * Use this value to limit the number of arguments copied from the * variable-length argument list. */ number = _nc_tparm_analyze(cp, p_is_s, &popcount); if (TPS(fmt_buff) == 0) return NULL; incremented_two = FALSE; if (number > NUM_PARM) number = NUM_PARM; if (popcount > NUM_PARM) popcount = NUM_PARM; num_args = max(popcount, number); for (i = 0; i < num_args; i++) { /* * A few caps (such as plab_norm) have string-valued parms. * We'll have to assume that the caller knows the difference, since * a char* and an int may not be the same size on the stack. The * normal prototype for this uses 9 long's, which is consistent with * our va_arg() usage. */ if (p_is_s[i] != 0) { p_is_s[i] = va_arg(ap, char *); param[i] = 0; } else if (use_TPARM_ARG) { param[i] = va_arg(ap, TPARM_ARG); } else { param[i] = (TPARM_ARG) va_arg(ap, int); } } /* * This is a termcap compatibility hack. If there are no explicit pop * operations in the string, load the stack in such a way that * successive pops will grab successive parameters. That will make * the expansion of (for example) \E[%d;%dH work correctly in termcap * style, which means tparam() will expand termcap strings OK. */ TPS(stack_ptr) = 0; termcap_hack = FALSE; if (popcount == 0) { termcap_hack = TRUE; popcount = number; for (i = number - 1; i >= 0; i--) { if (p_is_s[i]) spush(p_is_s[i]); else npush((int) param[i]); } } #ifdef TRACE if (USE_TRACEF(TRACE_CALLS)) { for (i = 0; i < num_args; i++) { if (p_is_s[i] != 0) save_text(", %s", _nc_visbuf(p_is_s[i]), 0); else save_number(", %d", (int) param[i], 0); } _tracef(T_CALLED("%s(%s%s)"), TPS(tname), _nc_visbuf(cp), TPS(out_buff)); TPS(out_used) = 0; _nc_unlock_global(tracef); } #endif /* TRACE */ while ((cp - string) < (int) len2) { if (*cp != '%') { save_char(UChar(*cp)); } else { TPS(tparam_base) = cp++; cp = parse_format(cp, TPS(fmt_buff), &len); switch (*cp) { default: break; case '%': save_char('%'); break; case 'd': /* FALLTHRU */ case 'o': /* FALLTHRU */ case 'x': /* FALLTHRU */ case 'X': /* FALLTHRU */ save_number(TPS(fmt_buff), npop(), len); break; case 'c': /* FALLTHRU */ save_char(npop()); break; #ifdef EXP_XTERM_1005 case 'u': { unsigned char target[10]; unsigned source = (unsigned) npop(); int rc = _nc_conv_to_utf8(target, source, (unsigned) sizeof(target)); int n; for (n = 0; n < rc; ++n) { save_char(target[n]); } } break; #endif case 'l': npush((int) strlen(spop())); break; case 's': save_text(TPS(fmt_buff), spop(), len); break; case 'p': cp++; i = (UChar(*cp) - '1'); if (i >= 0 && i < NUM_PARM) { if (p_is_s[i]) { spush(p_is_s[i]); } else { npush((int) param[i]); } } break; case 'P': cp++; if (isUPPER(*cp)) { i = (UChar(*cp) - 'A'); TPS(static_vars)[i] = npop(); } else if (isLOWER(*cp)) { i = (UChar(*cp) - 'a'); TPS(dynamic_var)[i] = npop(); } break; case 'g': cp++; if (isUPPER(*cp)) { i = (UChar(*cp) - 'A'); npush(TPS(static_vars)[i]); } else if (isLOWER(*cp)) { i = (UChar(*cp) - 'a'); npush(TPS(dynamic_var)[i]); } break; case S_QUOTE: cp++; npush(UChar(*cp)); cp++; break; case L_BRACE: number = 0; cp++; while (isdigit(UChar(*cp))) { number = (number * 10) + (UChar(*cp) - '0'); cp++; } npush(number); break; case '+': npush(npop() + npop()); break; case '-': y = npop(); x = npop(); npush(x - y); break; case '*': npush(npop() * npop()); break; case '/': y = npop(); x = npop(); npush(y ? (x / y) : 0); break; case 'm': y = npop(); x = npop(); npush(y ? (x % y) : 0); break; case 'A': y = npop(); x = npop(); npush(y && x); break; case 'O': y = npop(); x = npop(); npush(y || x); break; case '&': npush(npop() & npop()); break; case '|': npush(npop() | npop()); break; case '^': npush(npop() ^ npop()); break; case '=': y = npop(); x = npop(); npush(x == y); break; case '<': y = npop(); x = npop(); npush(x < y); break; case '>': y = npop(); x = npop(); npush(x > y); break; case '!': npush(!npop()); break; case '~': npush(~npop()); break; case 'i': /* * Increment the first two parameters -- if they are numbers * rather than strings. As a side effect, assign into the * stack; if this is termcap, then the stack was populated * using the termcap hack above rather than via the terminfo * 'p' case. */ if (!incremented_two) { incremented_two = TRUE; if (p_is_s[0] == 0) { param[0]++; if (termcap_hack) TPS(stack)[0].data.num = (int) param[0]; } if (p_is_s[1] == 0) { param[1]++; if (termcap_hack) TPS(stack)[1].data.num = (int) param[1]; } } break; case '?': break; case 't': x = npop(); if (!x) { /* scan forward for %e or %; at level zero */ cp++; level = 0; while (*cp) { if (*cp == '%') { cp++; if (*cp == '?') level++; else if (*cp == ';') { if (level > 0) level--; else break; } else if (*cp == 'e' && level == 0) break; } if (*cp) cp++; } } break; case 'e': /* scan forward for a %; at level zero */ cp++; level = 0; while (*cp) { if (*cp == '%') { cp++; if (*cp == '?') level++; else if (*cp == ';') { if (level > 0) level--; else break; } } if (*cp) cp++; } break; case ';': break; } /* endswitch (*cp) */ } /* endelse (*cp == '%') */ if (*cp == '\0') break; cp++; } /* endwhile (*cp) */ get_space((size_t) 1); TPS(out_buff)[TPS(out_used)] = '\0'; T((T_RETURN("%s"), _nc_visbuf(TPS(out_buff)))); return (TPS(out_buff)); } #if NCURSES_TPARM_VARARGS #define tparm_varargs tparm #else #define tparm_proto tparm #endif NCURSES_EXPORT(char *) tparm_varargs(NCURSES_CONST char *string,...) { va_list ap; char *result; _nc_tparm_err = 0; va_start(ap, string); #ifdef TRACE TPS(tname) = "tparm"; #endif /* TRACE */ result = tparam_internal(TRUE, string, ap); va_end(ap); return result; } #if !NCURSES_TPARM_VARARGS NCURSES_EXPORT(char *) tparm_proto(NCURSES_CONST char *string, TPARM_ARG a1, TPARM_ARG a2, TPARM_ARG a3, TPARM_ARG a4, TPARM_ARG a5, TPARM_ARG a6, TPARM_ARG a7, TPARM_ARG a8, TPARM_ARG a9) { return tparm_varargs(string, a1, a2, a3, a4, a5, a6, a7, a8, a9); } #endif /* NCURSES_TPARM_VARARGS */ NCURSES_EXPORT(char *) tiparm(const char *string,...) { va_list ap; char *result; _nc_tparm_err = 0; va_start(ap, string); #ifdef TRACE TPS(tname) = "tiparm"; #endif /* TRACE */ result = tparam_internal(FALSE, string, ap); va_end(ap); return result; } ncurses-6.0-20160213/ncurses/tinfo/access.c0000644000175100001440000001237612020460071016663 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ #include #include #include MODULE_ID("$Id: access.c,v 1.23 2012/09/01 19:21:29 tom Exp $") #ifdef __TANDEM #define ROOT_UID 65535 #endif #ifndef ROOT_UID #define ROOT_UID 0 #endif #define LOWERCASE(c) ((isalpha(UChar(c)) && isupper(UChar(c))) ? tolower(UChar(c)) : (c)) NCURSES_EXPORT(char *) _nc_rootname(char *path) { char *result = _nc_basename(path); #if !MIXEDCASE_FILENAMES || defined(PROG_EXT) static char *temp; char *s; temp = strdup(result); result = temp; #if !MIXEDCASE_FILENAMES for (s = result; *s != '\0'; ++s) { *s = (char) LOWERCASE(*s); } #endif #if defined(PROG_EXT) if ((s = strrchr(result, '.')) != 0) { if (!strcmp(s, PROG_EXT)) *s = '\0'; } #endif #endif return result; } /* * Check if a string appears to be an absolute pathname. */ NCURSES_EXPORT(bool) _nc_is_abs_path(const char *path) { #if defined(__EMX__) || defined(__DJGPP__) #define is_pathname(s) ((((s) != 0) && ((s)[0] == '/')) \ || (((s)[0] != 0) && ((s)[1] == ':'))) #else #define is_pathname(s) ((s) != 0 && (s)[0] == '/') #endif return is_pathname(path); } /* * Return index of the basename */ NCURSES_EXPORT(unsigned) _nc_pathlast(const char *path) { const char *test = strrchr(path, '/'); #ifdef __EMX__ if (test == 0) test = strrchr(path, '\\'); #endif if (test == 0) test = path; else test++; return (unsigned) (test - path); } NCURSES_EXPORT(char *) _nc_basename(char *path) { return path + _nc_pathlast(path); } NCURSES_EXPORT(int) _nc_access(const char *path, int mode) { int result; if (path == 0) { result = -1; } else if (access(path, mode) < 0) { if ((mode & W_OK) != 0 && errno == ENOENT && strlen(path) < PATH_MAX) { char head[PATH_MAX]; char *leaf; _nc_STRCPY(head, path, sizeof(head)); leaf = _nc_basename(head); if (leaf == 0) leaf = head; *leaf = '\0'; if (head == leaf) _nc_STRCPY(head, ".", sizeof(head)); result = access(head, R_OK | W_OK | X_OK); } else { result = -1; } } else { result = 0; } return result; } NCURSES_EXPORT(bool) _nc_is_dir_path(const char *path) { bool result = FALSE; struct stat sb; if (stat(path, &sb) == 0 && S_ISDIR(sb.st_mode)) { result = TRUE; } return result; } NCURSES_EXPORT(bool) _nc_is_file_path(const char *path) { bool result = FALSE; struct stat sb; if (stat(path, &sb) == 0 && S_ISREG(sb.st_mode)) { result = TRUE; } return result; } #ifndef USE_ROOT_ENVIRON /* * Returns true if we allow application to use environment variables that are * used for searching lists of directories, etc. */ NCURSES_EXPORT(int) _nc_env_access(void) { #if HAVE_ISSETUGID if (issetugid()) return FALSE; #elif HAVE_GETEUID && HAVE_GETEGID if (getuid() != geteuid() || getgid() != getegid()) return FALSE; #endif /* ...finally, disallow root */ return (getuid() != ROOT_UID) && (geteuid() != ROOT_UID); } #endif ncurses-6.0-20160213/ncurses/tinfo/lib_setup.c0000644000175100001440000005351412657717005017431 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * Terminal setup routines common to termcap and terminfo: * * use_env(bool) * use_tioctl(bool) * setupterm(char *, int, int *) */ #include #include /* for MAX_NAME_SIZE */ #if HAVE_LOCALE_H #include #endif MODULE_ID("$Id: lib_setup.c,v 1.165 2016/02/13 21:20:05 tom Exp $") /**************************************************************************** * * Terminal size computation * ****************************************************************************/ #if HAVE_SIZECHANGE # if !defined(sun) || !TERMIOS # if HAVE_SYS_IOCTL_H # include # endif # endif #endif #if NEED_PTEM_H /* On SCO, they neglected to define struct winsize in termios.h -- it's only * in termio.h and ptem.h (the former conflicts with other definitions). */ # include # include #endif #if HAVE_LANGINFO_CODESET #include #endif /* * SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS, * Solaris, IRIX) define TIOCGWINSZ and struct winsize. */ #ifdef TIOCGSIZE # define IOCTL_WINSIZE TIOCGSIZE # define STRUCT_WINSIZE struct ttysize # define WINSIZE_ROWS(n) (int)n.ts_lines # define WINSIZE_COLS(n) (int)n.ts_cols #else # ifdef TIOCGWINSZ # define IOCTL_WINSIZE TIOCGWINSZ # define STRUCT_WINSIZE struct winsize # define WINSIZE_ROWS(n) (int)n.ws_row # define WINSIZE_COLS(n) (int)n.ws_col # endif #endif /* * Reduce explicit use of "cur_term" global variable. */ #undef CUR #define CUR termp->type. /* * Wrap global variables in this module. */ #if USE_REENTRANT NCURSES_EXPORT(char *) NCURSES_PUBLIC_VAR(ttytype) (void) { static char empty[] = ""; char *result = empty; #if NCURSES_SP_FUNCS if (CURRENT_SCREEN) { TERMINAL *termp = TerminalOf(CURRENT_SCREEN); if (termp != 0) { result = termp->type.term_names; } } #else if (cur_term != 0) { result = cur_term->type.term_names; } #endif return result; } NCURSES_EXPORT(int *) _nc_ptr_Lines(SCREEN *sp) { return ptrLines(sp); } NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(LINES) (void) { return *_nc_ptr_Lines(CURRENT_SCREEN); } NCURSES_EXPORT(int *) _nc_ptr_Cols(SCREEN *sp) { return ptrCols(sp); } NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(COLS) (void) { return *_nc_ptr_Cols(CURRENT_SCREEN); } NCURSES_EXPORT(int *) _nc_ptr_Tabsize(SCREEN *sp) { return ptrTabsize(sp); } NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(TABSIZE) (void) { return *_nc_ptr_Tabsize(CURRENT_SCREEN); } #else NCURSES_EXPORT_VAR(char) ttytype[NAMESIZE] = ""; NCURSES_EXPORT_VAR(int) LINES = 0; NCURSES_EXPORT_VAR(int) COLS = 0; NCURSES_EXPORT_VAR(int) TABSIZE = 8; #endif #if NCURSES_EXT_FUNCS NCURSES_EXPORT(int) NCURSES_SP_NAME(set_tabsize) (NCURSES_SP_DCLx int value) { int code = OK; #if USE_REENTRANT if (SP_PARM) { SP_PARM->_TABSIZE = value; } else { code = ERR; } #else (void) SP_PARM; TABSIZE = value; #endif return code; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) set_tabsize(int value) { return NCURSES_SP_NAME(set_tabsize) (CURRENT_SCREEN, value); } #endif #endif /* NCURSES_EXT_FUNCS */ #if USE_SIGWINCH /* * If we have a pending SIGWINCH, set the flag in each screen. */ NCURSES_EXPORT(int) _nc_handle_sigwinch(SCREEN *sp) { SCREEN *scan; if (_nc_globals.have_sigwinch) { _nc_globals.have_sigwinch = 0; for (each_screen(scan)) { scan->_sig_winch = TRUE; } } return (sp ? sp->_sig_winch : 0); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(use_env) (NCURSES_SP_DCLx bool f) { T((T_CALLED("use_env(%p,%d)"), (void *) SP_PARM, (int) f)); #if NCURSES_SP_FUNCS START_TRACE(); if (IsPreScreen(SP_PARM)) { SP_PARM->_use_env = f; } #else _nc_prescreen.use_env = f; #endif returnVoid; } NCURSES_EXPORT(void) NCURSES_SP_NAME(use_tioctl) (NCURSES_SP_DCLx bool f) { T((T_CALLED("use_tioctl(%p,%d)"), (void *) SP_PARM, (int) f)); #if NCURSES_SP_FUNCS START_TRACE(); if (IsPreScreen(SP_PARM)) { SP_PARM->_use_tioctl = f; } #else _nc_prescreen.use_tioctl = f; #endif returnVoid; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) use_env(bool f) { T((T_CALLED("use_env(%d)"), (int) f)); START_TRACE(); _nc_prescreen.use_env = f; returnVoid; } NCURSES_EXPORT(void) use_tioctl(bool f) { T((T_CALLED("use_tioctl(%d)"), (int) f)); START_TRACE(); _nc_prescreen.use_tioctl = f; returnVoid; } #endif NCURSES_EXPORT(void) _nc_get_screensize(SCREEN *sp, #ifdef USE_TERM_DRIVER TERMINAL * termp, #endif int *linep, int *colp) /* Obtain lines/columns values from the environment and/or terminfo entry */ { #ifdef USE_TERM_DRIVER TERMINAL_CONTROL_BLOCK *TCB; int my_tabsize; assert(termp != 0 && linep != 0 && colp != 0); TCB = (TERMINAL_CONTROL_BLOCK *) termp; my_tabsize = TCB->info.tabsize; TCB->drv->td_size(TCB, linep, colp); #if USE_REENTRANT if (sp != 0) { sp->_TABSIZE = my_tabsize; } #else (void) sp; TABSIZE = my_tabsize; #endif T(("TABSIZE = %d", my_tabsize)); #else /* !USE_TERM_DRIVER */ TERMINAL *termp = cur_term; int my_tabsize; /* figure out the size of the screen */ T(("screen size: terminfo lines = %d columns = %d", lines, columns)); *linep = (int) lines; *colp = (int) columns; if (_nc_prescreen.use_env || _nc_prescreen.use_tioctl) { int value; #ifdef __EMX__ { int screendata[2]; _scrsize(screendata); *colp = screendata[0]; *linep = ((sp != 0 && sp->_filtered) ? 1 : screendata[1]); T(("EMX screen size: environment LINES = %d COLUMNS = %d", *linep, *colp)); } #endif #if HAVE_SIZECHANGE /* try asking the OS */ if (NC_ISATTY(cur_term->Filedes)) { STRUCT_WINSIZE size; errno = 0; do { if (ioctl(cur_term->Filedes, IOCTL_WINSIZE, &size) >= 0) { *linep = ((sp != 0 && sp->_filtered) ? 1 : WINSIZE_ROWS(size)); *colp = WINSIZE_COLS(size); T(("SYS screen size: environment LINES = %d COLUMNS = %d", *linep, *colp)); break; } } while (errno == EINTR); } #endif /* HAVE_SIZECHANGE */ if (_nc_prescreen.use_env) { if (_nc_prescreen.use_tioctl) { /* * If environment variables are used, update them. */ if ((sp == 0 || !sp->_filtered) && _nc_getenv_num("LINES") > 0) { _nc_setenv_num("LINES", *linep); } if (_nc_getenv_num("COLUMNS") > 0) { _nc_setenv_num("COLUMNS", *colp); } } /* * Finally, look for environment variables. * * Solaris lets users override either dimension with an environment * variable. */ if ((value = _nc_getenv_num("LINES")) > 0) { *linep = value; T(("screen size: environment LINES = %d", *linep)); } if ((value = _nc_getenv_num("COLUMNS")) > 0) { *colp = value; T(("screen size: environment COLUMNS = %d", *colp)); } } /* if we can't get dynamic info about the size, use static */ if (*linep <= 0) { *linep = (int) lines; } if (*colp <= 0) { *colp = (int) columns; } /* the ultimate fallback, assume fixed 24x80 size */ if (*linep <= 0) { *linep = 24; } if (*colp <= 0) { *colp = 80; } /* * Put the derived values back in the screen-size caps, so * tigetnum() and tgetnum() will do the right thing. */ lines = (short) (*linep); columns = (short) (*colp); } T(("screen size is %dx%d", *linep, *colp)); if (VALID_NUMERIC(init_tabs)) my_tabsize = (int) init_tabs; else my_tabsize = 8; #if USE_REENTRANT if (sp != 0) sp->_TABSIZE = my_tabsize; #else TABSIZE = my_tabsize; #endif T(("TABSIZE = %d", TABSIZE)); #endif /* USE_TERM_DRIVER */ } #if USE_SIZECHANGE NCURSES_EXPORT(void) _nc_update_screensize(SCREEN *sp) { int new_lines; int new_cols; #ifdef USE_TERM_DRIVER int old_lines; int old_cols; assert(sp != 0); CallDriver_2(sp, td_getsize, &old_lines, &old_cols); #else TERMINAL *termp = cur_term; int old_lines = lines; int old_cols = columns; #endif TINFO_GET_SIZE(sp, sp->_term, &new_lines, &new_cols); /* * See is_term_resized() and resizeterm(). * We're doing it this way because those functions belong to the upper * ncurses library, while this resides in the lower terminfo library. */ if (sp != 0 && sp->_resize != 0) { if ((new_lines != old_lines) || (new_cols != old_cols)) { sp->_resize(NCURSES_SP_ARGx new_lines, new_cols); } else if (sp->_sig_winch && (sp->_ungetch != 0)) { sp->_ungetch(SP_PARM, KEY_RESIZE); /* so application can know this */ } sp->_sig_winch = FALSE; } } #endif /**************************************************************************** * * Terminal setup * ****************************************************************************/ #if NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP /* * Return 1 if entry found, 0 if not found, -1 if database not accessible, * just like tgetent(). */ int _nc_setup_tinfo(const char *const tn, TERMTYPE *const tp) { char filename[PATH_MAX]; int status = _nc_read_entry(tn, filename, tp); /* * If we have an entry, force all of the cancelled strings to null * pointers so we don't have to test them in the rest of the library. * (The terminfo compiler bypasses this logic, since it must know if * a string is cancelled, for merging entries). */ if (status == TGETENT_YES) { unsigned n; for_each_boolean(n, tp) { if (!VALID_BOOLEAN(tp->Booleans[n])) tp->Booleans[n] = FALSE; } for_each_string(n, tp) { if (tp->Strings[n] == CANCELLED_STRING) tp->Strings[n] = ABSENT_STRING; } } return (status); } #endif /* ** Take the real command character out of the CC environment variable ** and substitute it in for the prototype given in 'command_character'. */ void _nc_tinfo_cmdch(TERMINAL * termp, int proto) { unsigned i; char CC; char *tmp; /* * Only use the character if the string is a single character, * since it is fairly common for developers to set the C compiler * name as an environment variable - using the same symbol. */ if ((tmp = getenv("CC")) != 0 && strlen(tmp) == 1) { CC = *tmp; for_each_string(i, &(termp->type)) { for (tmp = termp->type.Strings[i]; tmp && *tmp; tmp++) { if (UChar(*tmp) == proto) *tmp = CC; } } } } /* * Find the locale which is in effect. */ NCURSES_EXPORT(char *) _nc_get_locale(void) { char *env; #if HAVE_LOCALE_H /* * This is preferable to using getenv() since it ensures that we are using * the locale which was actually initialized by the application. */ env = setlocale(LC_CTYPE, 0); #else if (((env = getenv("LC_ALL")) != 0 && *env != '\0') || ((env = getenv("LC_CTYPE")) != 0 && *env != '\0') || ((env = getenv("LANG")) != 0 && *env != '\0')) { ; } #endif T(("_nc_get_locale %s", _nc_visbuf(env))); return env; } /* * Check if we are running in a UTF-8 locale. */ NCURSES_EXPORT(int) _nc_unicode_locale(void) { int result = 0; #if defined(__MINGW32__) && USE_WIDEC_SUPPORT result = 1; #elif HAVE_LANGINFO_CODESET char *env = nl_langinfo(CODESET); result = !strcmp(env, "UTF-8"); T(("_nc_unicode_locale(%s) ->%d", env, result)); #else char *env = _nc_get_locale(); if (env != 0) { if (strstr(env, ".UTF-8") != 0) { result = 1; T(("_nc_unicode_locale(%s) ->%d", env, result)); } } #endif return result; } #define CONTROL_N(s) ((s) != 0 && strstr(s, "\016") != 0) #define CONTROL_O(s) ((s) != 0 && strstr(s, "\017") != 0) /* * Check for known broken cases where a UTF-8 locale breaks the alternate * character set. */ NCURSES_EXPORT(int) _nc_locale_breaks_acs(TERMINAL * termp) { const char *env_name = "NCURSES_NO_UTF8_ACS"; const char *env; int value; int result = 0; T((T_CALLED("_nc_locale_breaks_acs:%d"), result)); if (getenv(env_name) != 0) { result = _nc_getenv_num(env_name); } else if ((value = tigetnum("U8")) >= 0) { result = value; /* use extension feature */ } else if ((env = getenv("TERM")) != 0) { if (strstr(env, "linux")) { result = 1; /* always broken */ } else if (strstr(env, "screen") != 0 && ((env = getenv("TERMCAP")) != 0 && strstr(env, "screen") != 0) && strstr(env, "hhII00") != 0) { if (CONTROL_N(enter_alt_charset_mode) || CONTROL_O(enter_alt_charset_mode) || CONTROL_N(set_attributes) || CONTROL_O(set_attributes)) { result = 1; } } } returnCode(result); } NCURSES_EXPORT(int) TINFO_SETUP_TERM(TERMINAL ** tp, NCURSES_CONST char *tname, int Filedes, int *errret, int reuse) { #ifdef USE_TERM_DRIVER TERMINAL_CONTROL_BLOCK *TCB = 0; #else int status; #endif TERMINAL *termp; SCREEN *sp = 0; int code = ERR; START_TRACE(); #ifdef USE_TERM_DRIVER T((T_CALLED("_nc_setupterm_ex(%p,%s,%d,%p)"), (void *) tp, _nc_visbuf(tname), Filedes, (void *) errret)); if (tp == 0) { ret_error0(TGETENT_ERR, "Invalid parameter, internal error.\n"); } else termp = *tp; #else termp = cur_term; T((T_CALLED("setupterm(%s,%d,%p)"), _nc_visbuf(tname), Filedes, (void *) errret)); #endif if (tname == 0) { tname = getenv("TERM"); if (tname == 0 || *tname == '\0') { #ifdef USE_TERM_DRIVER tname = "unknown"; #else ret_error0(TGETENT_ERR, "TERM environment variable not set.\n"); #endif } } if (strlen(tname) > MAX_NAME_SIZE) { ret_error(TGETENT_ERR, "TERM environment must be <= %d characters.\n", MAX_NAME_SIZE); } T(("your terminal name is %s", tname)); /* * Allow output redirection. This is what SVr3 does. If stdout is * directed to a file, screen updates go to standard error. */ if (Filedes == STDOUT_FILENO && !NC_ISATTY(Filedes)) Filedes = STDERR_FILENO; /* * Check if we have already initialized to use this terminal. If so, we * do not need to re-read the terminfo entry, or obtain TTY settings. * * This is an improvement on SVr4 curses. If an application mixes curses * and termcap calls, it may call both initscr and tgetent. This is not * really a good thing to do, but can happen if someone tries using ncurses * with the readline library. The problem we are fixing is that when * tgetent calls setupterm, the resulting Ottyb struct in cur_term is * zeroed. A subsequent call to endwin uses the zeroed terminal settings * rather than the ones saved in initscr. So we check if cur_term appears * to contain terminal settings for the same output file as our current * call - and copy those terminal settings. (SVr4 curses does not do this, * however applications that are working around the problem will still work * properly with this feature). */ if (reuse && (termp != 0) && termp->Filedes == Filedes && termp->_termname != 0 && !strcmp(termp->_termname, tname) && _nc_name_match(termp->type.term_names, tname, "|")) { T(("reusing existing terminal information and mode-settings")); code = OK; #ifdef USE_TERM_DRIVER TCB = (TERMINAL_CONTROL_BLOCK *) termp; #endif } else { #ifdef USE_TERM_DRIVER TERMINAL_CONTROL_BLOCK *my_tcb; my_tcb = typeCalloc(TERMINAL_CONTROL_BLOCK, 1); termp = &(my_tcb->term); #else termp = typeCalloc(TERMINAL, 1); #endif if (termp == 0) { ret_error0(TGETENT_ERR, "Not enough memory to create terminal structure.\n"); } #ifdef USE_TERM_DRIVER INIT_TERM_DRIVER(); TCB = (TERMINAL_CONTROL_BLOCK *) termp; code = _nc_globals.term_driver(TCB, tname, errret); if (code == OK) { termp->Filedes = (short) Filedes; termp->_termname = strdup(tname); } else { ret_error0(errret ? *errret : TGETENT_ERR, "Could not find any driver to handle this terminal.\n"); } #else #if NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP status = _nc_setup_tinfo(tname, &termp->type); #else status = TGETENT_NO; #endif /* try fallback list if entry on disk */ if (status != TGETENT_YES) { const TERMTYPE *fallback = _nc_fallback(tname); if (fallback) { _nc_copy_termtype(&(termp->type), fallback); status = TGETENT_YES; } } if (status != TGETENT_YES) { del_curterm(termp); if (status == TGETENT_ERR) { ret_error0(status, "terminals database is inaccessible\n"); } else if (status == TGETENT_NO) { ret_error1(status, "unknown terminal type.\n", tname); } } #if !USE_REENTRANT strncpy(ttytype, termp->type.term_names, (size_t) (NAMESIZE - 1)); ttytype[NAMESIZE - 1] = '\0'; #endif termp->Filedes = (short) Filedes; termp->_termname = strdup(tname); set_curterm(termp); if (command_character) _nc_tinfo_cmdch(termp, UChar(*command_character)); /* * If an application calls setupterm() rather than initscr() or * newterm(), we will not have the def_prog_mode() call in * _nc_setupscreen(). Do it now anyway, so we can initialize the * baudrate. */ if (NC_ISATTY(Filedes)) { def_prog_mode(); baudrate(); } code = OK; #endif } #ifdef USE_TERM_DRIVER *tp = termp; NCURSES_SP_NAME(set_curterm) (sp, termp); TCB->drv->td_init(TCB); #else sp = SP; #endif /* * We should always check the screensize, just in case. */ TINFO_GET_SIZE(sp, termp, ptrLines(sp), ptrCols(sp)); if (errret) *errret = TGETENT_YES; #ifndef USE_TERM_DRIVER if (generic_type) { /* * BSD 4.3's termcap contains mis-typed "gn" for wy99. Do a sanity * check before giving up. */ if ((VALID_STRING(cursor_address) || (VALID_STRING(cursor_down) && VALID_STRING(cursor_home))) && VALID_STRING(clear_screen)) { ret_error1(TGETENT_YES, "terminal is not really generic.\n", tname); } else { del_curterm(termp); ret_error1(TGETENT_NO, "I need something more specific.\n", tname); } } else if (hard_copy) { ret_error1(TGETENT_YES, "I can't handle hardcopy terminals.\n", tname); } #endif returnCode(code); } #if NCURSES_SP_FUNCS /* * In case of handling multiple screens, we need to have a screen before * initialization in setupscreen takes place. This is to extend the substitute * for some of the stuff in _nc_prescreen, especially for slk and ripoff * handling which should be done per screen. */ NCURSES_EXPORT(SCREEN *) new_prescr(void) { SCREEN *sp; START_TRACE(); T((T_CALLED("new_prescr()"))); sp = _nc_alloc_screen_sp(); if (sp != 0) { sp->rsp = sp->rippedoff; sp->_filtered = _nc_prescreen.filter_mode; sp->_use_env = _nc_prescreen.use_env; #if NCURSES_NO_PADDING sp->_no_padding = _nc_prescreen._no_padding; #endif sp->slk_format = 0; sp->_slk = 0; sp->_prescreen = TRUE; SP_PRE_INIT(sp); #if USE_REENTRANT sp->_TABSIZE = _nc_prescreen._TABSIZE; sp->_ESCDELAY = _nc_prescreen._ESCDELAY; #endif } returnSP(sp); } #endif #ifdef USE_TERM_DRIVER /* * This entrypoint is called from tgetent() to allow a special case of reusing * the same TERMINAL data (see comment). */ NCURSES_EXPORT(int) _nc_setupterm(NCURSES_CONST char *tname, int Filedes, int *errret, int reuse) { int res; TERMINAL *termp = 0; res = TINFO_SETUP_TERM(&termp, tname, Filedes, errret, reuse); if (ERR != res) NCURSES_SP_NAME(set_curterm) (CURRENT_SCREEN_PRE, termp); return res; } #endif /* * setupterm(termname, Filedes, errret) * * Find and read the appropriate object file for the terminal * Make cur_term point to the structure. */ NCURSES_EXPORT(int) setupterm(NCURSES_CONST char *tname, int Filedes, int *errret) { START_TRACE(); return _nc_setupterm(tname, Filedes, errret, FALSE); } ncurses-6.0-20160213/ncurses/tinfo/make_keys.c0000644000175100001440000001132712551602153017375 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997-on * ****************************************************************************/ /* * This replaces an awk script which translated keys.list into keys.tries by * making the output show the indices into the TERMTYPE Strings array. Doing * it that way lets us cut down on the size of the init_keytry() function. */ #define USE_TERMLIB 1 #include MODULE_ID("$Id: make_keys.c,v 1.21 2015/07/16 01:10:03 tom Exp $") #include static unsigned unknown(void) { static unsigned result = 0; if (result == 0) { unsigned n; for (n = 0; strnames[n] != 0; n++) { ++result; } for (n = 0; strfnames[n] != 0; n++) { ++result; } } return result; } static unsigned lookup(const char *name) { unsigned n; bool found = FALSE; for (n = 0; strnames[n] != 0; n++) { if (!strcmp(name, strnames[n])) { found = TRUE; break; } } if (!found) { for (n = 0; strfnames[n] != 0; n++) { if (!strcmp(name, strfnames[n])) { found = TRUE; break; } } } return found ? n : unknown(); } static void make_keys(FILE *ifp, FILE *ofp) { char buffer[BUFSIZ]; char from[256]; char to[256]; unsigned ignore = unknown(); unsigned maxlen = 16; int scanned; while (fgets(buffer, (int) sizeof(buffer), ifp) != 0) { if (*buffer == '#') continue; to[sizeof(to) - 1] = '\0'; from[sizeof(from) - 1] = '\0'; scanned = sscanf(buffer, "%255s %255s", to, from); if (scanned == 2) { unsigned code = lookup(from); if (code == ignore) continue; if (strlen(from) > maxlen) maxlen = (unsigned) strlen(from); fprintf(ofp, "\t{ %4u, %-*.*s },\t/* %s */\n", code, (int) maxlen, (int) maxlen, to, from); } } } static void write_list(FILE *ofp, const char **list) { while (*list != 0) fprintf(ofp, "%s\n", *list++); } int main(int argc, char *argv[]) { static const char *prefix[] = { "#ifndef NCU_KEYS_H", "#define NCU_KEYS_H 1", "", "/* This file was generated by MAKE_KEYS */", "", "#if BROKEN_LINKER", "static", "#endif", "const struct tinfo_fkeys _nc_tinfo_fkeys[] = {", 0 }; static const char *suffix[] = { "\t{ 0, 0} };", "", "#endif /* NCU_KEYS_H */", 0 }; write_list(stdout, prefix); if (argc > 1) { int n; for (n = 1; n < argc; n++) { FILE *fp = fopen(argv[n], "r"); if (fp != 0) { make_keys(fp, stdout); fclose(fp); } } } else { make_keys(stdin, stdout); } write_list(stdout, suffix); return EXIT_SUCCESS; } ncurses-6.0-20160213/ncurses/tinfo/lib_longname.c0000644000175100001440000000723412554766256020077 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_longname.c ** ** The routine longname(). ** */ #include MODULE_ID("$Id: lib_longname.c,v 1.13 2015/07/25 20:08:14 tom Exp $") #if USE_REENTRANT NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname) (NCURSES_SP_DCL0) { static char empty[] = {'\0'}; char *ptr; T((T_CALLED("longname(%p)"), (void *) SP_PARM)); if (SP_PARM) { for (ptr = SP_PARM->_ttytype + strlen(SP_PARM->_ttytype); ptr > SP_PARM->_ttytype; ptr--) if (*ptr == '|') returnPtr(ptr + 1); returnPtr(SP_PARM->_ttytype); } return empty; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(char *) longname(void) { return NCURSES_SP_NAME(longname) (CURRENT_SCREEN); } #endif #else /* a dummy entrypoint is simpler than generating a conditional in curses.h */ #if NCURSES_SP_FUNCS NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname) (NCURSES_SP_DCL0) { (void) SP_PARM; return longname(); } #endif NCURSES_EXPORT(char *) longname(void) { char *ptr; T((T_CALLED("longname()"))); for (ptr = ttytype + strlen(ttytype); ptr > ttytype; ptr--) if (*ptr == '|') returnPtr(ptr + 1); returnPtr(ttytype); } #endif ncurses-6.0-20160213/ncurses/tinfo/lib_options.c0000644000175100001440000002274512411631114017746 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_options.c ** ** The routines to handle option setting. ** */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_options.c,v 1.78 2014/09/27 21:55:24 tom Exp $") NCURSES_EXPORT(int) idlok(WINDOW *win, bool flag) { int res = ERR; T((T_CALLED("idlok(%p,%d)"), (void *) win, flag)); if (win) { SCREEN *sp = _nc_screen_of(win); if (sp != 0 #ifdef USE_TERM_DRIVER && IsTermInfo(sp) #endif ) { sp->_nc_sp_idlok = win->_idlok = (flag && (NCURSES_SP_NAME(has_il) (NCURSES_SP_ARG) || change_scroll_region)); res = OK; } } returnCode(res); } NCURSES_EXPORT(void) idcok(WINDOW *win, bool flag) { T((T_CALLED("idcok(%p,%d)"), (void *) win, flag)); if (win) { SCREEN *sp = _nc_screen_of(win); sp->_nc_sp_idcok = win->_idcok = (flag && NCURSES_SP_NAME(has_ic) (NCURSES_SP_ARG)); } returnVoid; } NCURSES_EXPORT(int) NCURSES_SP_NAME(halfdelay) (NCURSES_SP_DCLx int t) { T((T_CALLED("halfdelay(%p,%d)"), (void *) SP_PARM, t)); if (t < 1 || t > 255 || !IsValidTIScreen(SP_PARM)) returnCode(ERR); NCURSES_SP_NAME(cbreak) (NCURSES_SP_ARG); SP_PARM->_cbreak = t + 1; returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) halfdelay(int t) { return NCURSES_SP_NAME(halfdelay) (CURRENT_SCREEN, t); } #endif NCURSES_EXPORT(int) nodelay(WINDOW *win, bool flag) { T((T_CALLED("nodelay(%p,%d)"), (void *) win, flag)); if (win) { if (flag == TRUE) win->_delay = 0; else win->_delay = -1; returnCode(OK); } else returnCode(ERR); } NCURSES_EXPORT(int) notimeout(WINDOW *win, bool f) { T((T_CALLED("notimeout(%p,%d)"), (void *) win, f)); if (win) { win->_notimeout = f; returnCode(OK); } else returnCode(ERR); } NCURSES_EXPORT(void) wtimeout(WINDOW *win, int delay) { T((T_CALLED("wtimeout(%p,%d)"), (void *) win, delay)); if (win) { win->_delay = delay; } returnVoid; } NCURSES_EXPORT(int) keypad(WINDOW *win, bool flag) { T((T_CALLED("keypad(%p,%d)"), (void *) win, flag)); if (win) { win->_use_keypad = flag; returnCode(_nc_keypad(_nc_screen_of(win), flag)); } else returnCode(ERR); } NCURSES_EXPORT(int) meta(WINDOW *win GCC_UNUSED, bool flag) { int result = ERR; SCREEN *sp = (win == 0) ? CURRENT_SCREEN : _nc_screen_of(win); /* Ok, we stay relaxed and don't signal an error if win is NULL */ T((T_CALLED("meta(%p,%d)"), (void *) win, flag)); /* Ok, we stay relaxed and don't signal an error if win is NULL */ if (sp != 0) { sp->_use_meta = flag; #ifdef USE_TERM_DRIVER if (IsTermInfo(sp)) { if (flag) { NCURSES_PUTP2("meta_on", meta_on); } else { NCURSES_PUTP2("meta_off", meta_off); } } #else if (flag) { NCURSES_PUTP2("meta_on", meta_on); } else { NCURSES_PUTP2("meta_off", meta_off); } #endif result = OK; } returnCode(result); } /* curs_set() moved here to narrow the kernel interface */ NCURSES_EXPORT(int) NCURSES_SP_NAME(curs_set) (NCURSES_SP_DCLx int vis) { int code = ERR; T((T_CALLED("curs_set(%p,%d)"), (void *) SP_PARM, vis)); if (SP_PARM != 0 && vis >= 0 && vis <= 2) { int cursor = SP_PARM->_cursor; if (vis == cursor) { code = cursor; } else { #ifdef USE_TERM_DRIVER code = CallDriver_1(SP_PARM, td_cursorSet, vis); #else if (IsTermInfo(SP_PARM)) { switch (vis) { case 2: code = NCURSES_PUTP2_FLUSH("cursor_visible", cursor_visible); break; case 1: code = NCURSES_PUTP2_FLUSH("cursor_normal", cursor_normal); break; case 0: code = NCURSES_PUTP2_FLUSH("cursor_invisible", cursor_invisible); break; } } else { code = ERR; } #endif if (code != ERR) code = (cursor == -1 ? 1 : cursor); SP_PARM->_cursor = vis; } } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) curs_set(int vis) { return (NCURSES_SP_NAME(curs_set) (CURRENT_SCREEN, vis)); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(typeahead) (NCURSES_SP_DCLx int fd) { T((T_CALLED("typeahead(%p, %d)"), (void *) SP_PARM, fd)); if (IsValidTIScreen(SP_PARM)) { SP_PARM->_checkfd = fd; returnCode(OK); } else { returnCode(ERR); } } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) typeahead(int fd) { return NCURSES_SP_NAME(typeahead) (CURRENT_SCREEN, fd); } #endif /* ** has_key() ** ** Return TRUE if the current terminal has the given key ** */ #if NCURSES_EXT_FUNCS static int has_key_internal(int keycode, TRIES * tp) { if (tp == 0) return (FALSE); else if (tp->value == keycode) return (TRUE); else return (has_key_internal(keycode, tp->child) || has_key_internal(keycode, tp->sibling)); } #ifdef USE_TERM_DRIVER NCURSES_EXPORT(int) TINFO_HAS_KEY(SCREEN *sp, int keycode) { return IsValidTIScreen(sp) ? has_key_internal(keycode, sp->_keytry) : 0; } #else NCURSES_EXPORT(int) NCURSES_SP_NAME(has_key) (NCURSES_SP_DCLx int keycode) { T((T_CALLED("has_key(%p,%d)"), (void *) SP_PARM, keycode)); returnCode(SP != 0 ? has_key_internal(keycode, SP_PARM->_keytry) : FALSE); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) has_key(int keycode) { return NCURSES_SP_NAME(has_key) (CURRENT_SCREEN, keycode); } #endif #endif #endif /* NCURSES_EXT_FUNCS */ NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putp_flush) (NCURSES_SP_DCLx const char *name, const char *value) { int rc = NCURSES_PUTP2(name, value); if (rc != ERR) { _nc_flush(); } return rc; } #if 0 && NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_putp_flush(const char *name, const char *value) { return NCURSES_SP_NAME(_nc_putp_flush) (CURRENT_SCREEN, name, value); } #endif /* Turn the keypad on/off * * Note: we flush the output because changing this mode causes some terminals * to emit different escape sequences for cursor and keypad keys. If we don't * flush, then the next wgetch may get the escape sequence that corresponds to * the terminal state _before_ switching modes. */ NCURSES_EXPORT(int) _nc_keypad(SCREEN *sp, int flag) { int rc = ERR; if (sp != 0) { #ifdef USE_PTHREADS /* * We might have this situation in a multithreaded application that * has wgetch() reading in more than one thread. putp() and below * may use SP explicitly. */ if (_nc_use_pthreads && sp != CURRENT_SCREEN) { SCREEN *save_sp; /* cannot use use_screen(), since that is not in tinfo library */ _nc_lock_global(curses); save_sp = CURRENT_SCREEN; _nc_set_screen(sp); rc = _nc_keypad(sp, flag); _nc_set_screen(save_sp); _nc_unlock_global(curses); } else #endif { #ifdef USE_TERM_DRIVER rc = CallDriver_1(sp, td_kpad, flag); if (rc == OK) sp->_keypad_on = flag; #else if (flag) { (void) NCURSES_PUTP2_FLUSH("keypad_xmit", keypad_xmit); } else if (!flag && keypad_local) { (void) NCURSES_PUTP2_FLUSH("keypad_local", keypad_local); } if (flag && !sp->_tried) { _nc_init_keytry(sp); sp->_tried = TRUE; } sp->_keypad_on = flag; rc = OK; #endif } } return (rc); } ncurses-6.0-20160213/ncurses/tinfo/read_entry.c0000644000175100001440000004523412543546150017572 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * read_entry.c -- Routine for reading in a compiled terminfo file */ #include #include #include MODULE_ID("$Id: read_entry.c,v 1.129 2015/06/27 16:16:40 tom Exp $") #define TYPE_CALLOC(type,elts) typeCalloc(type, (unsigned)(elts)) #define MyNumber(n) (short) LOW_MSB(n) #if NCURSES_USE_DATABASE static void convert_shorts(char *buf, short *Numbers, int count) { int i; for (i = 0; i < count; i++) { if (IS_NEG1(buf + 2 * i)) Numbers[i] = ABSENT_NUMERIC; else if (IS_NEG2(buf + 2 * i)) Numbers[i] = CANCELLED_NUMERIC; else Numbers[i] = MyNumber(buf + 2 * i); TR(TRACE_DATABASE, ("get Numbers[%d]=%d", i, Numbers[i])); } } static void convert_strings(char *buf, char **Strings, int count, int size, char *table) { int i; char *p; for (i = 0; i < count; i++) { if (IS_NEG1(buf + 2 * i)) { Strings[i] = ABSENT_STRING; } else if (IS_NEG2(buf + 2 * i)) { Strings[i] = CANCELLED_STRING; } else if (MyNumber(buf + 2 * i) > size) { Strings[i] = ABSENT_STRING; } else { Strings[i] = (MyNumber(buf + 2 * i) + table); TR(TRACE_DATABASE, ("Strings[%d] = %s", i, _nc_visbuf(Strings[i]))); } /* make sure all strings are NUL terminated */ if (VALID_STRING(Strings[i])) { for (p = Strings[i]; p <= table + size; p++) if (*p == '\0') break; /* if there is no NUL, ignore the string */ if (p > table + size) Strings[i] = ABSENT_STRING; } } } static int fake_read(char *src, int *offset, int limit, char *dst, unsigned want) { int have = (limit - *offset); if (have > 0) { if ((int) want > have) want = (unsigned) have; memcpy(dst, src + *offset, (size_t) want); *offset += (int) want; } else { want = 0; } return (int) want; } #define Read(buf, count) fake_read(buffer, &offset, limit, (char *) buf, (unsigned) count) #define read_shorts(buf, count) \ (Read(buf, (count)*2) == (int) (count)*2) #define even_boundary(value) \ if ((value) % 2 != 0) Read(buf, 1) #endif NCURSES_EXPORT(void) _nc_init_termtype(TERMTYPE *const tp) { unsigned i; #if NCURSES_XNAMES tp->num_Booleans = BOOLCOUNT; tp->num_Numbers = NUMCOUNT; tp->num_Strings = STRCOUNT; tp->ext_Booleans = 0; tp->ext_Numbers = 0; tp->ext_Strings = 0; #endif if (tp->Booleans == 0) TYPE_MALLOC(NCURSES_SBOOL, BOOLCOUNT, tp->Booleans); if (tp->Numbers == 0) TYPE_MALLOC(short, NUMCOUNT, tp->Numbers); if (tp->Strings == 0) TYPE_MALLOC(char *, STRCOUNT, tp->Strings); for_each_boolean(i, tp) tp->Booleans[i] = FALSE; for_each_number(i, tp) tp->Numbers[i] = ABSENT_NUMERIC; for_each_string(i, tp) tp->Strings[i] = ABSENT_STRING; } #if NCURSES_USE_DATABASE #if NCURSES_XNAMES static bool valid_shorts(char *buffer, int limit) { bool result = FALSE; int n; for (n = 0; n < limit; ++n) { if (MyNumber(buffer + (n * 2)) > 0) { result = TRUE; break; } } return result; } #endif /* * Return TGETENT_YES if read, TGETENT_NO if not found or garbled. */ NCURSES_EXPORT(int) _nc_read_termtype(TERMTYPE *ptr, char *buffer, int limit) { int offset = 0; int name_size, bool_count, num_count, str_count, str_size; int i; char buf[MAX_ENTRY_SIZE + 2]; char *string_table; unsigned want, have; TR(TRACE_DATABASE, ("READ termtype header @%d", offset)); memset(ptr, 0, sizeof(*ptr)); /* grab the header */ if (!read_shorts(buf, 6) || !IS_TIC_MAGIC(buf)) { return (TGETENT_NO); } name_size = MyNumber(buf + 2); bool_count = MyNumber(buf + 4); num_count = MyNumber(buf + 6); str_count = MyNumber(buf + 8); str_size = MyNumber(buf + 10); TR(TRACE_DATABASE, ("TERMTYPE name_size=%d, bool=%d/%d, num=%d/%d str=%d/%d(%d)", name_size, bool_count, BOOLCOUNT, num_count, NUMCOUNT, str_count, STRCOUNT, str_size)); if (name_size < 0 || bool_count < 0 || num_count < 0 || str_count < 0 || str_size < 0) { return (TGETENT_NO); } want = (unsigned) (str_size + name_size + 1); if (str_size) { /* try to allocate space for the string table */ if (str_count * 2 >= MAX_ENTRY_SIZE || (string_table = typeMalloc(char, want)) == 0) { return (TGETENT_NO); } } else { str_count = 0; if ((string_table = typeMalloc(char, want)) == 0) { return (TGETENT_NO); } } /* grab the name (a null-terminated string) */ want = min(MAX_NAME_SIZE, (unsigned) name_size); ptr->str_table = string_table; ptr->term_names = string_table; if ((have = (unsigned) Read(ptr->term_names, want)) != want) { memset(ptr->term_names + have, 0, (size_t) (want - have)); } ptr->term_names[want] = '\0'; string_table += (want + 1); if (have > MAX_NAME_SIZE) offset = (int) (have - MAX_NAME_SIZE); /* grab the booleans */ if ((ptr->Booleans = TYPE_CALLOC(NCURSES_SBOOL, max(BOOLCOUNT, bool_count))) == 0 || Read(ptr->Booleans, (unsigned) bool_count) < bool_count) { return (TGETENT_NO); } /* * If booleans end on an odd byte, skip it. The machine they * originally wrote terminfo on must have been a 16-bit * word-oriented machine that would trap out if you tried a * word access off a 2-byte boundary. */ even_boundary(name_size + bool_count); /* grab the numbers */ if ((ptr->Numbers = TYPE_CALLOC(short, max(NUMCOUNT, num_count))) == 0 || !read_shorts(buf, num_count)) { return (TGETENT_NO); } convert_shorts(buf, ptr->Numbers, num_count); if ((ptr->Strings = TYPE_CALLOC(char *, max(STRCOUNT, str_count))) == 0) { return (TGETENT_NO); } if (str_count) { /* grab the string offsets */ if (!read_shorts(buf, str_count)) { return (TGETENT_NO); } /* finally, grab the string table itself */ if (Read(string_table, (unsigned) str_size) != str_size) { return (TGETENT_NO); } convert_strings(buf, ptr->Strings, str_count, str_size, string_table); } #if NCURSES_XNAMES ptr->num_Booleans = BOOLCOUNT; ptr->num_Numbers = NUMCOUNT; ptr->num_Strings = STRCOUNT; /* * Read extended entries, if any, after the normal end of terminfo data. */ even_boundary(str_size); TR(TRACE_DATABASE, ("READ extended_header @%d", offset)); if (_nc_user_definable && read_shorts(buf, 5) && valid_shorts(buf, 5)) { int ext_bool_count = MyNumber(buf + 0); int ext_num_count = MyNumber(buf + 2); int ext_str_count = MyNumber(buf + 4); int ext_str_size = MyNumber(buf + 6); int ext_str_limit = MyNumber(buf + 8); unsigned need = (unsigned) (ext_bool_count + ext_num_count + ext_str_count); int base = 0; if (need >= (MAX_ENTRY_SIZE / 2) || ext_str_size >= MAX_ENTRY_SIZE || ext_str_limit >= MAX_ENTRY_SIZE || ext_bool_count < 0 || ext_num_count < 0 || ext_str_count < 0 || ext_str_size < 0 || ext_str_limit < 0) { return (TGETENT_NO); } ptr->num_Booleans = UShort(BOOLCOUNT + ext_bool_count); ptr->num_Numbers = UShort(NUMCOUNT + ext_num_count); ptr->num_Strings = UShort(STRCOUNT + ext_str_count); TYPE_REALLOC(NCURSES_SBOOL, ptr->num_Booleans, ptr->Booleans); TYPE_REALLOC(short, ptr->num_Numbers, ptr->Numbers); TYPE_REALLOC(char *, ptr->num_Strings, ptr->Strings); TR(TRACE_DATABASE, ("extended header is %d/%d/%d(%d:%d)", ext_bool_count, ext_num_count, ext_str_count, ext_str_size, ext_str_limit)); TR(TRACE_DATABASE, ("READ %d extended-booleans @%d", ext_bool_count, offset)); if ((ptr->ext_Booleans = UShort(ext_bool_count)) != 0) { if (Read(ptr->Booleans + BOOLCOUNT, (unsigned) ext_bool_count) != ext_bool_count) { return (TGETENT_NO); } } even_boundary(ext_bool_count); TR(TRACE_DATABASE, ("READ %d extended-numbers @%d", ext_num_count, offset)); if ((ptr->ext_Numbers = UShort(ext_num_count)) != 0) { if (!read_shorts(buf, ext_num_count)) { return (TGETENT_NO); } TR(TRACE_DATABASE, ("Before converting extended-numbers")); convert_shorts(buf, ptr->Numbers + NUMCOUNT, ext_num_count); } TR(TRACE_DATABASE, ("READ extended-offsets @%d", offset)); if ((unsigned) (ext_str_count + (int) need) >= (MAX_ENTRY_SIZE / 2)) { return (TGETENT_NO); } if ((ext_str_count || need) && !read_shorts(buf, ext_str_count + (int) need)) { return (TGETENT_NO); } TR(TRACE_DATABASE, ("READ %d bytes of extended-strings @%d", ext_str_limit, offset)); if (ext_str_limit) { ptr->ext_str_table = typeMalloc(char, (size_t) ext_str_limit); if (ptr->ext_str_table == 0) { return (TGETENT_NO); } if (Read(ptr->ext_str_table, (unsigned) ext_str_limit) != ext_str_limit) { return (TGETENT_NO); } TR(TRACE_DATABASE, ("first extended-string is %s", _nc_visbuf(ptr->ext_str_table))); } if ((ptr->ext_Strings = UShort(ext_str_count)) != 0) { TR(TRACE_DATABASE, ("Before computing extended-string capabilities str_count=%d, ext_str_count=%d", str_count, ext_str_count)); convert_strings(buf, ptr->Strings + str_count, ext_str_count, ext_str_limit, ptr->ext_str_table); for (i = ext_str_count - 1; i >= 0; i--) { TR(TRACE_DATABASE, ("MOVE from [%d:%d] %s", i, i + str_count, _nc_visbuf(ptr->Strings[i + str_count]))); ptr->Strings[i + STRCOUNT] = ptr->Strings[i + str_count]; if (VALID_STRING(ptr->Strings[i + STRCOUNT])) base += (int) (strlen(ptr->Strings[i + STRCOUNT]) + 1); TR(TRACE_DATABASE, ("... to [%d] %s", i + STRCOUNT, _nc_visbuf(ptr->Strings[i + STRCOUNT]))); } } if (need) { if (ext_str_count >= (MAX_ENTRY_SIZE / 2)) { return (TGETENT_NO); } if ((ptr->ext_Names = TYPE_CALLOC(char *, need)) == 0) { return (TGETENT_NO); } TR(TRACE_DATABASE, ("ext_NAMES starting @%d in extended_strings, first = %s", base, _nc_visbuf(ptr->ext_str_table + base))); convert_strings(buf + (2 * ext_str_count), ptr->ext_Names, (int) need, ext_str_limit, ptr->ext_str_table + base); } TR(TRACE_DATABASE, ("...done reading terminfo bool %d(%d) num %d(%d) str %d(%d)", ptr->num_Booleans, ptr->ext_Booleans, ptr->num_Numbers, ptr->ext_Numbers, ptr->num_Strings, ptr->ext_Strings)); TR(TRACE_DATABASE, ("extend: num_Booleans:%d", ptr->num_Booleans)); } else #endif /* NCURSES_XNAMES */ { TR(TRACE_DATABASE, ("...done reading terminfo bool %d num %d str %d", bool_count, num_count, str_count)); #if NCURSES_XNAMES TR(TRACE_DATABASE, ("normal: num_Booleans:%d", ptr->num_Booleans)); #endif } for (i = bool_count; i < BOOLCOUNT; i++) ptr->Booleans[i] = FALSE; for (i = num_count; i < NUMCOUNT; i++) ptr->Numbers[i] = ABSENT_NUMERIC; for (i = str_count; i < STRCOUNT; i++) ptr->Strings[i] = ABSENT_STRING; return (TGETENT_YES); } /* * int * _nc_read_file_entry(filename, ptr) * * Read the compiled terminfo entry in the given file into the * structure pointed to by ptr, allocating space for the string * table. */ NCURSES_EXPORT(int) _nc_read_file_entry(const char *const filename, TERMTYPE *ptr) /* return 1 if read, 0 if not found or garbled */ { FILE *fp = 0; int code; int limit; char buffer[MAX_ENTRY_SIZE + 1]; if (_nc_access(filename, R_OK) < 0 || (fp = fopen(filename, "rb")) == 0) { TR(TRACE_DATABASE, ("cannot open terminfo %s (errno=%d)", filename, errno)); code = TGETENT_NO; } else { if ((limit = (int) fread(buffer, sizeof(char), sizeof(buffer), fp)) > 0) { TR(TRACE_DATABASE, ("read terminfo %s", filename)); if ((code = _nc_read_termtype(ptr, buffer, limit)) == TGETENT_NO) { _nc_free_termtype(ptr); } } else { code = TGETENT_NO; } fclose(fp); } return (code); } #if USE_HASHED_DB /* * Return if if we can build the filename of a ".db" file. */ static bool make_db_filename(char *filename, unsigned limit, const char *const path) { static const char suffix[] = DBM_SUFFIX; size_t lens = sizeof(suffix) - 1; size_t size = strlen(path); size_t test = lens + size; bool result = FALSE; if (test < limit) { if (size >= lens && !strcmp(path + size - lens, suffix)) _nc_STRCPY(filename, path, limit); else _nc_SPRINTF(filename, _nc_SLIMIT(limit) "%s%s", path, suffix); result = TRUE; } return result; } #endif /* * Return true if we can build the name of a filesystem entry. */ static bool make_dir_filename(char *filename, unsigned limit, const char *const path, const char *name) { bool result = FALSE; #if NCURSES_USE_TERMCAP if (_nc_is_dir_path(path)) #endif { unsigned need = (unsigned) (LEAF_LEN + 3 + strlen(path) + strlen(name)); if (need <= limit) { _nc_SPRINTF(filename, _nc_SLIMIT(limit) "%s/" LEAF_FMT "/%s", path, *name, name); result = TRUE; } } return result; } /* * Build a terminfo pathname and try to read the data. Returns TGETENT_YES on * success, TGETENT_NO on failure. */ static int _nc_read_tic_entry(char *filename, unsigned limit, const char *const path, const char *name, TERMTYPE *const tp) { int code = TGETENT_NO; #if USE_HASHED_DB DB *capdbp; if (make_db_filename(filename, limit, path) && (capdbp = _nc_db_open(filename, FALSE)) != 0) { DBT key, data; int reccnt = 0; char *save = strdup(name); memset(&key, 0, sizeof(key)); key.data = save; key.size = strlen(save); /* * This lookup could return termcap data, which we do not want. We are * looking for compiled (binary) terminfo data. * * cgetent uses a two-level lookup. On the first it uses the given * name to return a record containing only the aliases for an entry. * On the second (using that list of aliases as a key), it returns the * content of the terminal description. We expect second lookup to * return data beginning with the same set of aliases. * * For compiled terminfo, the list of aliases in the second case will * be null-terminated. A termcap entry will not be, and will run on * into the description. So we can easily distinguish between the two * (source/binary) by checking the lengths. */ while (_nc_db_get(capdbp, &key, &data) == 0) { int used = (int) data.size - 1; char *have = (char *) data.data; if (*have++ == 0) { if (data.size > key.size && IS_TIC_MAGIC(have)) { code = _nc_read_termtype(tp, have, used); if (code == TGETENT_NO) { _nc_free_termtype(tp); } } break; } /* * Just in case we have a corrupt database, do not waste time with * it. */ if (++reccnt >= 3) break; /* * Prepare for the second level. */ key.data = have; key.size = used; } free(save); } else /* may be either filesystem or flat file */ #endif if (make_dir_filename(filename, limit, path, name)) { code = _nc_read_file_entry(filename, tp); } #if NCURSES_USE_TERMCAP else if (code != TGETENT_YES) { code = _nc_read_termcap_entry(name, tp); _nc_SPRINTF(filename, _nc_SLIMIT(PATH_MAX) "%.*s", PATH_MAX - 1, _nc_get_source()); } #endif return code; } #endif /* NCURSES_USE_DATABASE */ /* * _nc_read_entry(char *name, char *filename, TERMTYPE *tp) * * Find and read the compiled entry for a given terminal type, * if it exists. We take pains here to make sure no combination * of environment variables and terminal type name can be used to * overrun the file buffer. */ NCURSES_EXPORT(int) _nc_read_entry(const char *const name, char *const filename, TERMTYPE *const tp) { int code = TGETENT_NO; _nc_SPRINTF(filename, _nc_SLIMIT(PATH_MAX) "%.*s", PATH_MAX - 1, name); if (strlen(name) == 0 || strcmp(name, ".") == 0 || strcmp(name, "..") == 0 || _nc_pathlast(name) != 0 || strchr(name, NCURSES_PATHSEP) != 0) { TR(TRACE_DATABASE, ("illegal or missing entry name '%s'", name)); } else { #if NCURSES_USE_DATABASE DBDIRS state; int offset; const char *path; _nc_first_db(&state, &offset); code = TGETENT_ERR; while ((path = _nc_next_db(&state, &offset)) != 0) { TR(TRACE_DATABASE, ("_nc_read_tic_entry path=%s, name=%s", path, name)); code = _nc_read_tic_entry(filename, PATH_MAX, path, name, tp); if (code == TGETENT_YES) { _nc_last_db(); break; } } #elif NCURSES_USE_TERMCAP if (code != TGETENT_YES) { code = _nc_read_termcap_entry(name, tp); _nc_SPRINTF(filename, _nc_SLIMIT(PATH_MAX) "%.*s", PATH_MAX - 1, _nc_get_source()); } #endif } return code; } ncurses-6.0-20160213/ncurses/tinfo/home_terminfo.c0000644000175100001440000000577012043053332020260 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ /* * home_terminfo.c -- return the $HOME/.terminfo string, expanded */ #include #include MODULE_ID("$Id: home_terminfo.c,v 1.15 2012/10/27 21:49:14 tom Exp $") /* ncurses extension...fall back on user's private directory */ #define MyBuffer _nc_globals.home_terminfo NCURSES_EXPORT(char *) _nc_home_terminfo(void) { char *result = 0; #if USE_HOME_TERMINFO char *home; if (use_terminfo_vars()) { if (MyBuffer == 0) { if ((home = getenv("HOME")) != 0) { size_t want = (strlen(home) + sizeof(PRIVATE_INFO)); TYPE_MALLOC(char, want, MyBuffer); _nc_SPRINTF(MyBuffer, _nc_SLIMIT(want) PRIVATE_INFO, home); } } result = MyBuffer; } #endif return result; } ncurses-6.0-20160213/ncurses/tinfo/lib_kernel.c0000644000175100001440000001214411503257017017532 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 2002 * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * lib_kernel.c * * Misc. low-level routines: * erasechar() * killchar() * flushinp() * * The baudrate() and delay_output() functions could logically live here, * but are in other modules to reduce the static-link size of programs * that use only these facilities. */ #include MODULE_ID("$Id: lib_kernel.c,v 1.31 2010/12/19 01:21:19 tom Exp $") static int _nc_vdisable(void) { int value = -1; #if defined(_POSIX_VDISABLE) && HAVE_UNISTD_H value = _POSIX_VDISABLE; #endif #if defined(_PC_VDISABLE) if (value == -1) { value = (int) fpathconf(0, _PC_VDISABLE); if (value == -1) { value = 0377; } } #elif defined(VDISABLE) if (value == -1) value = VDISABLE; #endif return value; } /* * erasechar() * * Return erase character as given in cur_term->Ottyb. * */ NCURSES_EXPORT(char) NCURSES_SP_NAME(erasechar) (NCURSES_SP_DCL0) { int result = ERR; TERMINAL *termp = TerminalOf(SP_PARM); T((T_CALLED("erasechar(%p)"), (void *) SP_PARM)); if (termp != 0) { #ifdef TERMIOS result = termp->Ottyb.c_cc[VERASE]; if (result == _nc_vdisable()) result = ERR; #else result = termp->Ottyb.sg_erase; #endif } returnChar((char) result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(char) erasechar(void) { return NCURSES_SP_NAME(erasechar) (CURRENT_SCREEN); } #endif /* * killchar() * * Return kill character as given in cur_term->Ottyb. * */ NCURSES_EXPORT(char) NCURSES_SP_NAME(killchar) (NCURSES_SP_DCL0) { int result = ERR; TERMINAL *termp = TerminalOf(SP_PARM); T((T_CALLED("killchar(%p)"), (void *) SP_PARM)); if (termp != 0) { #ifdef TERMIOS result = termp->Ottyb.c_cc[VKILL]; if (result == _nc_vdisable()) result = ERR; #else result = termp->Ottyb.sg_kill; #endif } returnChar((char) result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(char) killchar(void) { return NCURSES_SP_NAME(killchar) (CURRENT_SCREEN); } #endif /* * flushinp() * * Flush any input on cur_term->Filedes * */ NCURSES_EXPORT(int) NCURSES_SP_NAME(flushinp) (NCURSES_SP_DCL0) { TERMINAL *termp = TerminalOf(SP_PARM); T((T_CALLED("flushinp(%p)"), (void *) SP_PARM)); if (termp != 0) { #ifdef TERMIOS tcflush(termp->Filedes, TCIFLUSH); #else errno = 0; do { ioctl(termp->Filedes, TIOCFLUSH, 0); } while (errno == EINTR); #endif if (SP_PARM) { SP_PARM->_fifohead = -1; SP_PARM->_fifotail = 0; SP_PARM->_fifopeek = 0; } returnCode(OK); } returnCode(ERR); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) flushinp(void) { return NCURSES_SP_NAME(flushinp) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/tinfo/alloc_ttype.c0000644000175100001440000003502112154660732017747 0ustar tomusers/**************************************************************************** * Copyright (c) 1999-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1999-on * ****************************************************************************/ /* * align_ttype.c -- functions for TERMTYPE * * _nc_align_termtype() * _nc_copy_termtype() * */ #include #include MODULE_ID("$Id: alloc_ttype.c,v 1.27 2013/06/08 16:54:50 tom Exp $") #if NCURSES_XNAMES /* * Merge the a/b lists into dst. Both a/b are sorted (see _nc_extend_names()), * so we do not have to worry about order dependencies. */ static int merge_names(char **dst, char **a, int na, char **b, int nb) { int n = 0; while (na > 0 && nb > 0) { int cmp = strcmp(*a, *b); if (cmp < 0) { dst[n++] = *a++; na--; } else if (cmp > 0) { dst[n++] = *b++; nb--; } else if (cmp == 0) { dst[n++] = *a; a++, b++; na--, nb--; } } while (na-- > 0) { dst[n++] = *a++; } while (nb-- > 0) { dst[n++] = *b++; } DEBUG(4, ("merge_names -> %d", n)); return n; } static bool find_name(char **table, int length, char *name) { while (length-- > 0) { if (!strcmp(*table++, name)) { DEBUG(4, ("found name '%s'", name)); return TRUE; } } DEBUG(4, ("did not find name '%s'", name)); return FALSE; } #define EXTEND_NUM(num, ext) \ to->num = (unsigned short) (to->num + (ext - to->ext)) static void realign_data(TERMTYPE *to, char **ext_Names, int ext_Booleans, int ext_Numbers, int ext_Strings) { int n, m, base; int limit = (to->ext_Booleans + to->ext_Numbers + to->ext_Strings); if (to->ext_Booleans != ext_Booleans) { EXTEND_NUM(num_Booleans, ext_Booleans); TYPE_REALLOC(NCURSES_SBOOL, to->num_Booleans, to->Booleans); for (n = to->ext_Booleans - 1, m = ext_Booleans - 1, base = to->num_Booleans - (m + 1); m >= 0; m--) { if (find_name(to->ext_Names, limit, ext_Names[m])) { to->Booleans[base + m] = to->Booleans[base + n--]; } else { to->Booleans[base + m] = FALSE; } } to->ext_Booleans = UShort(ext_Booleans); } if (to->ext_Numbers != ext_Numbers) { EXTEND_NUM(num_Numbers, ext_Numbers); TYPE_REALLOC(short, to->num_Numbers, to->Numbers); for (n = to->ext_Numbers - 1, m = ext_Numbers - 1, base = to->num_Numbers - (m + 1); m >= 0; m--) { if (find_name(to->ext_Names, limit, ext_Names[m + ext_Booleans])) { to->Numbers[base + m] = to->Numbers[base + n--]; } else { to->Numbers[base + m] = ABSENT_NUMERIC; } } to->ext_Numbers = UShort(ext_Numbers); } if (to->ext_Strings != ext_Strings) { EXTEND_NUM(num_Strings, ext_Strings); TYPE_REALLOC(char *, to->num_Strings, to->Strings); for (n = to->ext_Strings - 1, m = ext_Strings - 1, base = to->num_Strings - (m + 1); m >= 0; m--) { if (find_name(to->ext_Names, limit, ext_Names[m + ext_Booleans + ext_Numbers])) { to->Strings[base + m] = to->Strings[base + n--]; } else { to->Strings[base + m] = ABSENT_STRING; } } to->ext_Strings = UShort(ext_Strings); } } /* * Returns the first index in ext_Names[] for the given token-type */ static unsigned _nc_first_ext_name(TERMTYPE *tp, int token_type) { unsigned first; switch (token_type) { case BOOLEAN: first = 0; break; case NUMBER: first = tp->ext_Booleans; break; case STRING: first = (unsigned) (tp->ext_Booleans + tp->ext_Numbers); break; default: first = 0; break; } return first; } /* * Returns the last index in ext_Names[] for the given token-type */ static unsigned _nc_last_ext_name(TERMTYPE *tp, int token_type) { unsigned last; switch (token_type) { case BOOLEAN: last = tp->ext_Booleans; break; case NUMBER: last = (unsigned) (tp->ext_Booleans + tp->ext_Numbers); break; default: case STRING: last = NUM_EXT_NAMES(tp); break; } return last; } /* * Lookup an entry from extended-names, returning -1 if not found */ static int _nc_find_ext_name(TERMTYPE *tp, char *name, int token_type) { unsigned j; unsigned first = _nc_first_ext_name(tp, token_type); unsigned last = _nc_last_ext_name(tp, token_type); for (j = first; j < last; j++) { if (!strcmp(name, tp->ext_Names[j])) { return (int) j; } } return -1; } /* * Translate an index into ext_Names[] into the corresponding index into data * (e.g., Booleans[]). */ static int _nc_ext_data_index(TERMTYPE *tp, int n, int token_type) { switch (token_type) { case BOOLEAN: n += (tp->num_Booleans - tp->ext_Booleans); break; case NUMBER: n += (tp->num_Numbers - tp->ext_Numbers) - (tp->ext_Booleans); break; default: case STRING: n += (tp->num_Strings - tp->ext_Strings) - (tp->ext_Booleans + tp->ext_Numbers); } return n; } /* * Adjust tables to remove (not free) an extended name and its corresponding * data. */ static bool _nc_del_ext_name(TERMTYPE *tp, char *name, int token_type) { int j; int first, last; if ((first = _nc_find_ext_name(tp, name, token_type)) >= 0) { last = (int) NUM_EXT_NAMES(tp) - 1; for (j = first; j < last; j++) { tp->ext_Names[j] = tp->ext_Names[j + 1]; } first = _nc_ext_data_index(tp, first, token_type); switch (token_type) { case BOOLEAN: last = tp->num_Booleans - 1; for (j = first; j < last; j++) tp->Booleans[j] = tp->Booleans[j + 1]; tp->ext_Booleans--; tp->num_Booleans--; break; case NUMBER: last = tp->num_Numbers - 1; for (j = first; j < last; j++) tp->Numbers[j] = tp->Numbers[j + 1]; tp->ext_Numbers--; tp->num_Numbers--; break; case STRING: last = tp->num_Strings - 1; for (j = first; j < last; j++) tp->Strings[j] = tp->Strings[j + 1]; tp->ext_Strings--; tp->num_Strings--; break; } return TRUE; } return FALSE; } /* * Adjust tables to insert an extended name, making room for new data. The * index into the corresponding data array is returned. */ static int _nc_ins_ext_name(TERMTYPE *tp, char *name, int token_type) { unsigned first = _nc_first_ext_name(tp, token_type); unsigned last = _nc_last_ext_name(tp, token_type); unsigned total = NUM_EXT_NAMES(tp) + 1; unsigned j, k; for (j = first; j < last; j++) { int cmp = strcmp(name, tp->ext_Names[j]); if (cmp == 0) /* already present */ return _nc_ext_data_index(tp, (int) j, token_type); if (cmp < 0) { break; } } TYPE_REALLOC(char *, total, tp->ext_Names); for (k = total - 1; k > j; k--) tp->ext_Names[k] = tp->ext_Names[k - 1]; tp->ext_Names[j] = name; j = (unsigned) _nc_ext_data_index(tp, (int) j, token_type); switch (token_type) { case BOOLEAN: tp->ext_Booleans++; tp->num_Booleans++; TYPE_REALLOC(NCURSES_SBOOL, tp->num_Booleans, tp->Booleans); for (k = (unsigned) (tp->num_Booleans - 1); k > j; k--) tp->Booleans[k] = tp->Booleans[k - 1]; break; case NUMBER: tp->ext_Numbers++; tp->num_Numbers++; TYPE_REALLOC(short, tp->num_Numbers, tp->Numbers); for (k = (unsigned) (tp->num_Numbers - 1); k > j; k--) tp->Numbers[k] = tp->Numbers[k - 1]; break; case STRING: tp->ext_Strings++; tp->num_Strings++; TYPE_REALLOC(char *, tp->num_Strings, tp->Strings); for (k = (unsigned) (tp->num_Strings - 1); k > j; k--) tp->Strings[k] = tp->Strings[k - 1]; break; } return (int) j; } /* * Look for strings that are marked cancelled, which happen to be the same name * as a boolean or number. We'll get this as a special case when we get a * cancellation of a name that is inherited from another entry. */ static void adjust_cancels(TERMTYPE *to, TERMTYPE *from) { int first = to->ext_Booleans + to->ext_Numbers; int last = first + to->ext_Strings; int j, k; for (j = first; j < last;) { char *name = to->ext_Names[j]; int j_str = to->num_Strings - first - to->ext_Strings; if (to->Strings[j + j_str] == CANCELLED_STRING) { if (_nc_find_ext_name(from, to->ext_Names[j], BOOLEAN) >= 0) { if (_nc_del_ext_name(to, name, STRING) || _nc_del_ext_name(to, name, NUMBER)) { k = _nc_ins_ext_name(to, name, BOOLEAN); to->Booleans[k] = FALSE; } else { j++; } } else if (_nc_find_ext_name(from, to->ext_Names[j], NUMBER) >= 0) { if (_nc_del_ext_name(to, name, STRING) || _nc_del_ext_name(to, name, BOOLEAN)) { k = _nc_ins_ext_name(to, name, NUMBER); to->Numbers[k] = CANCELLED_NUMERIC; } else { j++; } } else if (_nc_find_ext_name(from, to->ext_Names[j], STRING) >= 0) { if (_nc_del_ext_name(to, name, NUMBER) || _nc_del_ext_name(to, name, BOOLEAN)) { k = _nc_ins_ext_name(to, name, STRING); to->Strings[k] = CANCELLED_STRING; } else { j++; } } else { j++; } } else { j++; } } } NCURSES_EXPORT(void) _nc_align_termtype(TERMTYPE *to, TERMTYPE *from) { int na = (int) NUM_EXT_NAMES(to); int nb = (int) NUM_EXT_NAMES(from); int n; bool same; char **ext_Names; int ext_Booleans, ext_Numbers, ext_Strings; bool used_ext_Names = FALSE; DEBUG(2, ("align_termtype to(%d:%s), from(%d:%s)", na, to->term_names, nb, from->term_names)); if (na != 0 || nb != 0) { if ((na == nb) /* check if the arrays are equivalent */ &&(to->ext_Booleans == from->ext_Booleans) && (to->ext_Numbers == from->ext_Numbers) && (to->ext_Strings == from->ext_Strings)) { for (n = 0, same = TRUE; n < na; n++) { if (strcmp(to->ext_Names[n], from->ext_Names[n])) { same = FALSE; break; } } if (same) return; } /* * This is where we pay for having a simple extension representation. * Allocate a new ext_Names array and merge the two ext_Names arrays * into it, updating to's counts for booleans, etc. Fortunately we do * this only for the terminfo compiler (tic) and comparer (infocmp). */ TYPE_MALLOC(char *, (size_t)(na + nb), ext_Names); if (to->ext_Strings && (from->ext_Booleans + from->ext_Numbers)) adjust_cancels(to, from); if (from->ext_Strings && (to->ext_Booleans + to->ext_Numbers)) adjust_cancels(from, to); ext_Booleans = merge_names(ext_Names, to->ext_Names, to->ext_Booleans, from->ext_Names, from->ext_Booleans); ext_Numbers = merge_names(ext_Names + ext_Booleans, to->ext_Names + to->ext_Booleans, to->ext_Numbers, from->ext_Names + from->ext_Booleans, from->ext_Numbers); ext_Strings = merge_names(ext_Names + ext_Numbers + ext_Booleans, to->ext_Names + to->ext_Booleans + to->ext_Numbers, to->ext_Strings, from->ext_Names + from->ext_Booleans + from->ext_Numbers, from->ext_Strings); /* * Now we must reallocate the Booleans, etc., to allow the data to be * overlaid. */ if (na != (ext_Booleans + ext_Numbers + ext_Strings)) { realign_data(to, ext_Names, ext_Booleans, ext_Numbers, ext_Strings); FreeIfNeeded(to->ext_Names); to->ext_Names = ext_Names; DEBUG(2, ("realigned %d extended names for '%s' (to)", NUM_EXT_NAMES(to), to->term_names)); used_ext_Names = TRUE; } if (nb != (ext_Booleans + ext_Numbers + ext_Strings)) { nb = (ext_Booleans + ext_Numbers + ext_Strings); realign_data(from, ext_Names, ext_Booleans, ext_Numbers, ext_Strings); TYPE_REALLOC(char *, (size_t) nb, from->ext_Names); memcpy(from->ext_Names, ext_Names, sizeof(char *) * (size_t) nb); DEBUG(2, ("realigned %d extended names for '%s' (from)", NUM_EXT_NAMES(from), from->term_names)); } if (!used_ext_Names) free(ext_Names); } } #endif NCURSES_EXPORT(void) _nc_copy_termtype(TERMTYPE *dst, const TERMTYPE *src) { #if NCURSES_XNAMES unsigned i; #endif *dst = *src; /* ...to copy the sizes and string-tables */ TYPE_MALLOC(NCURSES_SBOOL, NUM_BOOLEANS(dst), dst->Booleans); TYPE_MALLOC(short, NUM_NUMBERS(dst), dst->Numbers); TYPE_MALLOC(char *, NUM_STRINGS(dst), dst->Strings); memcpy(dst->Booleans, src->Booleans, NUM_BOOLEANS(dst) * sizeof(dst->Booleans[0])); memcpy(dst->Numbers, src->Numbers, NUM_NUMBERS(dst) * sizeof(dst->Numbers[0])); memcpy(dst->Strings, src->Strings, NUM_STRINGS(dst) * sizeof(dst->Strings[0])); /* FIXME: we probably should also copy str_table and ext_str_table, * but tic and infocmp are not written to exploit that (yet). */ #if NCURSES_XNAMES if ((i = NUM_EXT_NAMES(src)) != 0) { TYPE_MALLOC(char *, i, dst->ext_Names); memcpy(dst->ext_Names, src->ext_Names, i * sizeof(char *)); } else { dst->ext_Names = 0; } #endif } ncurses-6.0-20160213/ncurses/tinfo/comp_scan.c0000644000175100001440000006220312241747076017400 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996 on * ****************************************************************************/ /* * comp_scan.c --- Lexical scanner for terminfo compiler. * * _nc_reset_input() * _nc_get_token() * _nc_panic_mode() * int _nc_syntax; * int _nc_curr_line; * long _nc_curr_file_pos; * long _nc_comment_start; * long _nc_comment_end; */ #include #include #include MODULE_ID("$Id: comp_scan.c,v 1.102 2013/11/16 19:57:50 tom Exp $") /* * Maximum length of string capability we'll accept before raising an error. * Yes, there is a real capability in /etc/termcap this long, an "is". */ #define MAXCAPLEN 600 #define iswhite(ch) (ch == ' ' || ch == '\t') NCURSES_EXPORT_VAR (int) _nc_syntax = 0; /* termcap or terminfo? */ NCURSES_EXPORT_VAR (int) _nc_strict_bsd = 1; /* ncurses extended termcap? */ NCURSES_EXPORT_VAR (long) _nc_curr_file_pos = 0; /* file offset of current line */ NCURSES_EXPORT_VAR (long) _nc_comment_start = 0; /* start of comment range before name */ NCURSES_EXPORT_VAR (long) _nc_comment_end = 0; /* end of comment range before name */ NCURSES_EXPORT_VAR (long) _nc_start_line = 0; /* start line of current entry */ NCURSES_EXPORT_VAR (struct token) _nc_curr_token = { 0, 0, 0 }; /***************************************************************************** * * Token-grabbing machinery * *****************************************************************************/ static bool first_column; /* See 'next_char()' below */ static bool had_newline; static char separator; /* capability separator */ static int pushtype; /* type of pushback token */ static char *pushname; #if NCURSES_EXT_FUNCS NCURSES_EXPORT_VAR (bool) _nc_disable_period = FALSE; /* used by tic -a option */ #endif /***************************************************************************** * * Character-stream handling * *****************************************************************************/ #define LEXBUFSIZ 1024 static char *bufptr; /* otherwise, the input buffer pointer */ static char *bufstart; /* start of buffer so we can compute offsets */ static FILE *yyin; /* scanner's input file descriptor */ /* * _nc_reset_input() * * Resets the input-reading routines. Used on initialization, * or after a seek has been done. Exactly one argument must be * non-null. */ NCURSES_EXPORT(void) _nc_reset_input(FILE *fp, char *buf) { pushtype = NO_PUSHBACK; if (pushname != 0) pushname[0] = '\0'; yyin = fp; bufstart = bufptr = buf; _nc_curr_file_pos = 0L; if (fp != 0) _nc_curr_line = 0; _nc_curr_col = 0; } /* * int last_char() * * Returns the final nonblank character on the current input buffer */ static int last_char(int from_end) { size_t len = strlen(bufptr); int result = 0; while (len--) { if (!isspace(UChar(bufptr[len]))) { if (from_end < (int) len) result = bufptr[(int) len - from_end]; break; } } return result; } /* * int next_char() * * Returns the next character in the input stream. Comments and leading * white space are stripped. * * The global state variable 'firstcolumn' is set TRUE if the character * returned is from the first column of the input line. * * The global variable _nc_curr_line is incremented for each new line. * The global variable _nc_curr_file_pos is set to the file offset of the * beginning of each line. */ static int next_char(void) { static char *result; static size_t allocated; int the_char; if (!yyin) { if (result != 0) { FreeAndNull(result); FreeAndNull(pushname); allocated = 0; } /* * An string with an embedded null will truncate the input. This is * intentional (we don't read binary files here). */ if (bufptr == 0 || *bufptr == '\0') return (EOF); if (*bufptr == '\n') { _nc_curr_line++; _nc_curr_col = 0; } else if (*bufptr == '\t') { _nc_curr_col = (_nc_curr_col | 7); } } else if (!bufptr || !*bufptr) { /* * In theory this could be recoded to do its I/O one character at a * time, saving the buffer space. In practice, this turns out to be * quite hard to get completely right. Try it and see. If you * succeed, don't forget to hack push_back() correspondingly. */ size_t used; size_t len; do { bufstart = 0; used = 0; do { if (used + (LEXBUFSIZ / 4) >= allocated) { allocated += (allocated + LEXBUFSIZ); result = typeRealloc(char, allocated, result); if (result == 0) return (EOF); if (bufstart) bufstart = result; } if (used == 0) _nc_curr_file_pos = ftell(yyin); if (fgets(result + used, (int) (allocated - used), yyin) != 0) { bufstart = result; if (used == 0) { if (_nc_curr_line == 0 && IS_TIC_MAGIC(result)) { _nc_err_abort("This is a compiled terminal description, not a source"); } _nc_curr_line++; _nc_curr_col = 0; } } else { if (used != 0) _nc_STRCAT(result, "\n", allocated); } if ((bufptr = bufstart) != 0) { used = strlen(bufptr); while (iswhite(*bufptr)) { if (*bufptr == '\t') { _nc_curr_col = (_nc_curr_col | 7) + 1; } else { _nc_curr_col++; } bufptr++; } /* * Treat a trailing the same as a so we * can read files on OS/2, etc. */ if ((len = strlen(bufptr)) > 1) { if (bufptr[len - 1] == '\n' && bufptr[len - 2] == '\r') { len--; bufptr[len - 1] = '\n'; bufptr[len] = '\0'; } } } else { return (EOF); } } while (bufptr[len - 1] != '\n'); /* complete a line */ } while (result[0] == '#'); /* ignore comments */ } else if (*bufptr == '\t') { _nc_curr_col = (_nc_curr_col | 7); } first_column = (bufptr == bufstart); if (first_column) had_newline = FALSE; _nc_curr_col++; the_char = *bufptr++; return UChar(the_char); } static void push_back(int c) /* push a character back onto the input stream */ { if (bufptr == bufstart) _nc_syserr_abort("Can't backspace off beginning of line"); *--bufptr = (char) c; _nc_curr_col--; } static long stream_pos(void) /* return our current character position in the input stream */ { return (yyin ? ftell(yyin) : (bufptr ? bufptr - bufstart : 0)); } static bool end_of_stream(void) /* are we at end of input? */ { return ((yyin ? feof(yyin) : (bufptr && *bufptr == '\0')) ? TRUE : FALSE); } /* Assume we may be looking at a termcap-style continuation */ static NCURSES_INLINE int eat_escaped_newline(int ch) { if (ch == '\\') while ((ch = next_char()) == '\n' || iswhite(ch)) continue; return ch; } #define TOK_BUF_SIZE MAX_ENTRY_SIZE #define OkToAdd() \ ((tok_ptr - tok_buf) < (TOK_BUF_SIZE - 2)) #define AddCh(ch) \ *tok_ptr++ = (char) ch; \ *tok_ptr = '\0' static char *tok_buf; /* * int * get_token() * * Scans the input for the next token, storing the specifics in the * global structure 'curr_token' and returning one of the following: * * NAMES A line beginning in column 1. 'name' * will be set to point to everything up to but * not including the first separator on the line. * BOOLEAN An entry consisting of a name followed by * a separator. 'name' will be set to point to * the name of the capability. * NUMBER An entry of the form * name#digits, * 'name' will be set to point to the capability * name and 'valnumber' to the number given. * STRING An entry of the form * name=characters, * 'name' is set to the capability name and * 'valstring' to the string of characters, with * input translations done. * CANCEL An entry of the form * name@, * 'name' is set to the capability name and * 'valnumber' to -1. * EOF The end of the file has been reached. * * A `separator' is either a comma or a semicolon, depending on whether * we are in termcap or terminfo mode. * */ NCURSES_EXPORT(int) _nc_get_token(bool silent) { static const char terminfo_punct[] = "@%&*!#"; char *after_name; /* after primary name */ char *after_list; /* after primary and alias list */ char *numchk; char *tok_ptr; char *s; char numbuf[80]; int ch, c0, c1; int dot_flag = FALSE; int type; long number; long token_start; unsigned found; #ifdef TRACE int old_line; int old_col; #endif if (pushtype != NO_PUSHBACK) { int retval = pushtype; _nc_set_type(pushname != 0 ? pushname : ""); DEBUG(3, ("pushed-back token: `%s', class %d", _nc_curr_token.tk_name, pushtype)); pushtype = NO_PUSHBACK; if (pushname != 0) pushname[0] = '\0'; /* currtok wasn't altered by _nc_push_token() */ return (retval); } if (end_of_stream()) { yyin = 0; (void) next_char(); /* frees its allocated memory */ if (tok_buf != 0) { if (_nc_curr_token.tk_name == tok_buf) _nc_curr_token.tk_name = 0; } return (EOF); } start_token: token_start = stream_pos(); while ((ch = next_char()) == '\n' || iswhite(ch)) { if (ch == '\n') had_newline = TRUE; continue; } ch = eat_escaped_newline(ch); _nc_curr_token.tk_valstring = 0; #ifdef TRACE old_line = _nc_curr_line; old_col = _nc_curr_col; #endif if (ch == EOF) type = EOF; else { /* if this is a termcap entry, skip a leading separator */ if (separator == ':' && ch == ':') ch = next_char(); if (ch == '.' #if NCURSES_EXT_FUNCS && !_nc_disable_period #endif ) { dot_flag = TRUE; DEBUG(8, ("dot-flag set")); while ((ch = next_char()) == '.' || iswhite(ch)) continue; } if (ch == EOF) { type = EOF; goto end_of_token; } /* have to make some punctuation chars legal for terminfo */ if (!isalnum(UChar(ch)) #if NCURSES_EXT_FUNCS && !(ch == '.' && _nc_disable_period) #endif && ((strchr) (terminfo_punct, (char) ch) == 0)) { if (!silent) _nc_warning("Illegal character (expected alphanumeric or %s) - '%s'", terminfo_punct, unctrl(UChar(ch))); _nc_panic_mode(separator); goto start_token; } if (tok_buf == 0) tok_buf = typeMalloc(char, TOK_BUF_SIZE); #ifdef TRACE old_line = _nc_curr_line; old_col = _nc_curr_col; #endif tok_ptr = tok_buf; AddCh(ch); if (first_column) { _nc_comment_start = token_start; _nc_comment_end = _nc_curr_file_pos; _nc_start_line = _nc_curr_line; _nc_syntax = ERR; after_name = 0; after_list = 0; while ((ch = next_char()) != '\n') { if (ch == EOF) { _nc_err_abort(MSG_NO_INPUTS); } else if (ch == '|') { after_list = tok_ptr; if (after_name == 0) after_name = tok_ptr; } else if (ch == ':' && last_char(0) != ',') { _nc_syntax = SYN_TERMCAP; separator = ':'; break; } else if (ch == ',') { _nc_syntax = SYN_TERMINFO; separator = ','; /* * If we did not see a '|', then we found a name with no * aliases or description. */ if (after_name == 0) break; /* * We saw a comma, but are not entirely sure this is * terminfo format, since we can still be parsing the * description field (for either syntax). * * A properly formatted termcap line ends with either a * colon, or a backslash after a colon. It is possible * to have a backslash in the middle of a capability, but * then there would be no leading whitespace on the next * line - something we want to discourage. */ c0 = last_char(0); c1 = last_char(1); if (c1 != ':' && c0 != '\\' && c0 != ':') { bool capability = FALSE; /* * Since it is not termcap, assume the line is terminfo * format. However, the comma can be embedded in a * description field. It also can be a separator * between a description field and a capability. * * Improve the guess by checking if the next word after * the comma does not look like a capability. In that * case, extend the description past the comma. */ for (s = bufptr; isspace(UChar(*s)); ++s) { ; } if (islower(UChar(*s))) { char *name = s; while (isalnum(UChar(*s))) { ++s; } if (*s == '#' || *s == '=' || *s == '@') { /* * Checking solely with syntax allows us to * support extended capabilities with string * values. */ capability = TRUE; } else if (*s == ',') { c0 = *s; *s = '\0'; /* * Otherwise, we can handle predefined boolean * capabilities, still aided by syntax. */ if (_nc_find_entry(name, _nc_get_hash_table(FALSE))) { capability = TRUE; } *s = (char) c0; } } if (capability) { break; } } } else ch = eat_escaped_newline(ch); if (OkToAdd()) { AddCh(ch); } else { break; } } *tok_ptr = '\0'; if (_nc_syntax == ERR) { /* * Grrr...what we ought to do here is barf, complaining that * the entry is malformed. But because a couple of name fields * in the 8.2 termcap file end with |\, we just have to assume * it's termcap syntax. */ _nc_syntax = SYN_TERMCAP; separator = ':'; } else if (_nc_syntax == SYN_TERMINFO) { /* throw away trailing /, *$/ */ for (--tok_ptr; iswhite(*tok_ptr) || *tok_ptr == ','; tok_ptr--) continue; tok_ptr[1] = '\0'; } /* * This is the soonest we have the terminal name fetched. Set up * for following warning messages. If there's no '|', then there * is no description. */ if (after_name != 0) { ch = *after_name; *after_name = '\0'; _nc_set_type(tok_buf); *after_name = (char) ch; } /* * Compute the boundary between the aliases and the description * field for syntax-checking purposes. */ if (after_list != 0) { if (!silent) { if (*after_list == '\0') _nc_warning("empty longname field"); else if (strchr(after_list, ' ') == 0) _nc_warning("older tic versions may treat the description field as an alias"); } } else { after_list = tok_buf + strlen(tok_buf); DEBUG(1, ("missing description")); } /* * Whitespace in a name field other than the long name can confuse * rdist and some termcap tools. Slashes are a no-no. Other * special characters can be dangerous due to shell expansion. */ for (s = tok_buf; s < after_list; ++s) { if (isspace(UChar(*s))) { if (!silent) _nc_warning("whitespace in name or alias field"); break; } else if (*s == '/') { if (!silent) _nc_warning("slashes aren't allowed in names or aliases"); break; } else if (strchr("$[]!*?", *s)) { if (!silent) _nc_warning("dubious character `%c' in name or alias field", *s); break; } } _nc_curr_token.tk_name = tok_buf; type = NAMES; } else { if (had_newline && _nc_syntax == SYN_TERMCAP) { _nc_warning("Missing backslash before newline"); had_newline = FALSE; } while ((ch = next_char()) != EOF) { if (!isalnum(UChar(ch))) { if (_nc_syntax == SYN_TERMINFO) { if (ch != '_') break; } else { /* allow ';' for "k;" */ if (ch != ';') break; } } if (OkToAdd()) { AddCh(ch); } else { ch = EOF; break; } } *tok_ptr++ = '\0'; /* separate name/value in buffer */ switch (ch) { case ',': case ':': if (ch != separator) _nc_err_abort("Separator inconsistent with syntax"); _nc_curr_token.tk_name = tok_buf; type = BOOLEAN; break; case '@': if ((ch = next_char()) != separator && !silent) _nc_warning("Missing separator after `%s', have %s", tok_buf, unctrl(UChar(ch))); _nc_curr_token.tk_name = tok_buf; type = CANCEL; break; case '#': found = 0; while (isalnum(ch = next_char())) { numbuf[found++] = (char) ch; if (found >= sizeof(numbuf) - 1) break; } numbuf[found] = '\0'; number = strtol(numbuf, &numchk, 0); if (!silent) { if (numchk == numbuf) _nc_warning("no value given for `%s'", tok_buf); if ((*numchk != '\0') || (ch != separator)) _nc_warning("Missing separator"); } _nc_curr_token.tk_name = tok_buf; _nc_curr_token.tk_valnumber = (int) number; type = NUMBER; break; case '=': ch = _nc_trans_string(tok_ptr, tok_buf + TOK_BUF_SIZE); if (!silent && ch != separator) _nc_warning("Missing separator"); _nc_curr_token.tk_name = tok_buf; _nc_curr_token.tk_valstring = tok_ptr; type = STRING; break; case EOF: type = EOF; break; default: /* just to get rid of the compiler warning */ type = UNDEF; if (!silent) _nc_warning("Illegal character - '%s'", unctrl(UChar(ch))); } } /* end else (first_column == FALSE) */ } /* end else (ch != EOF) */ end_of_token: #ifdef TRACE if (dot_flag == TRUE) DEBUG(8, ("Commented out ")); if (_nc_tracing >= DEBUG_LEVEL(8)) { _tracef("parsed %d.%d to %d.%d", old_line, old_col, _nc_curr_line, _nc_curr_col); } if (_nc_tracing >= DEBUG_LEVEL(7)) { switch (type) { case BOOLEAN: _tracef("Token: Boolean; name='%s'", _nc_curr_token.tk_name); break; case NUMBER: _tracef("Token: Number; name='%s', value=%d", _nc_curr_token.tk_name, _nc_curr_token.tk_valnumber); break; case STRING: _tracef("Token: String; name='%s', value=%s", _nc_curr_token.tk_name, _nc_visbuf(_nc_curr_token.tk_valstring)); break; case CANCEL: _tracef("Token: Cancel; name='%s'", _nc_curr_token.tk_name); break; case NAMES: _tracef("Token: Names; value='%s'", _nc_curr_token.tk_name); break; case EOF: _tracef("Token: End of file"); break; default: _nc_warning("Bad token type"); } } #endif if (dot_flag == TRUE) /* if commented out, use the next one */ type = _nc_get_token(silent); DEBUG(3, ("token: `%s', class %d", ((_nc_curr_token.tk_name != 0) ? _nc_curr_token.tk_name : ""), type)); return (type); } /* * char * trans_string(ptr) * * Reads characters using next_char() until encountering a separator, nl, * or end-of-file. The returned value is the character which caused * reading to stop. The following translations are done on the input: * * ^X goes to ctrl-X (i.e. X & 037) * {\E,\n,\r,\b,\t,\f} go to * {ESCAPE,newline,carriage-return,backspace,tab,formfeed} * {\^,\\} go to {carat,backslash} * \ddd (for ddd = up to three octal digits) goes to the character ddd * * \e == \E * \0 == \200 * */ NCURSES_EXPORT(int) _nc_trans_string(char *ptr, char *last) { int count = 0; int number = 0; int i, c; int last_ch = '\0'; bool ignored = FALSE; bool long_warning = FALSE; while ((c = next_char()) != separator && c != EOF) { if (ptr >= (last - 1)) { if (c != EOF) { while ((c = next_char()) != separator && c != EOF) { ; } } break; } if ((_nc_syntax == SYN_TERMCAP) && c == '\n') break; if (c == '^' && last_ch != '%') { c = next_char(); if (c == EOF) _nc_err_abort(MSG_NO_INPUTS); if (!(is7bits(c) && isprint(c))) { _nc_warning("Illegal ^ character - '%s'", unctrl(UChar(c))); } if (c == '?' && (_nc_syntax != SYN_TERMCAP)) { *(ptr++) = '\177'; if (_nc_tracing) _nc_warning("Allow ^? as synonym for \\177"); } else { if ((c &= 037) == 0) c = 128; *(ptr++) = (char) (c); } } else if (c == '\\') { bool strict_bsd = ((_nc_syntax == SYN_TERMCAP) && _nc_strict_bsd); c = next_char(); if (c == EOF) _nc_err_abort(MSG_NO_INPUTS); #define isoctal(c) ((c) >= '0' && (c) <= '7') if (isoctal(c) || (strict_bsd && isdigit(c))) { number = c - '0'; for (i = 0; i < 2; i++) { c = next_char(); if (c == EOF) _nc_err_abort(MSG_NO_INPUTS); if (!isoctal(c)) { if (isdigit(c)) { if (!strict_bsd) { _nc_warning("Non-octal digit `%c' in \\ sequence", c); /* allow the digit; it'll do less harm */ } } else { push_back(c); break; } } number = number * 8 + c - '0'; } number = UChar(number); if (number == 0 && !strict_bsd) number = 0200; *(ptr++) = (char) number; } else { switch (c) { case 'E': *(ptr++) = '\033'; break; case 'n': *(ptr++) = '\n'; break; case 'r': *(ptr++) = '\r'; break; case 'b': *(ptr++) = '\010'; break; case 'f': *(ptr++) = '\014'; break; case 't': *(ptr++) = '\t'; break; case '\\': *(ptr++) = '\\'; break; case '^': *(ptr++) = '^'; break; case ',': *(ptr++) = ','; break; case '\n': continue; default: if ((_nc_syntax == SYN_TERMINFO) || !_nc_strict_bsd) { switch (c) { case 'a': c = '\007'; break; case 'e': c = '\033'; break; case 'l': c = '\n'; break; case 's': c = ' '; break; case ':': c = ':'; break; default: _nc_warning("Illegal character '%s' in \\ sequence", unctrl(UChar(c))); break; } } /* FALLTHRU */ case '|': *(ptr++) = (char) c; } /* endswitch (c) */ } /* endelse (c < '0' || c > '7') */ } /* end else if (c == '\\') */ else if (c == '\n' && (_nc_syntax == SYN_TERMINFO)) { /* * Newlines embedded in a terminfo string are ignored, provided * that the next line begins with whitespace. */ ignored = TRUE; } else { *(ptr++) = (char) c; } if (!ignored) { if (_nc_curr_col <= 1) { push_back(c); c = '\n'; break; } last_ch = c; count++; } ignored = FALSE; if (count > MAXCAPLEN && !long_warning) { _nc_warning("Very long string found. Missing separator?"); long_warning = TRUE; } } /* end while */ *ptr = '\0'; return (c); } /* * _nc_push_token() * * Push a token of given type so that it will be reread by the next * get_token() call. */ NCURSES_EXPORT(void) _nc_push_token(int tokclass) { /* * This implementation is kind of bogus, it will fail if we ever do more * than one pushback at a time between get_token() calls. It relies on the * fact that _nc_curr_token is static storage that nothing but * _nc_get_token() touches. */ pushtype = tokclass; if (pushname == 0) pushname = typeMalloc(char, MAX_NAME_SIZE + 1); _nc_get_type(pushname); DEBUG(3, ("pushing token: `%s', class %d", ((_nc_curr_token.tk_name != 0) ? _nc_curr_token.tk_name : ""), pushtype)); } /* * Panic mode error recovery - skip everything until a "ch" is found. */ NCURSES_EXPORT(void) _nc_panic_mode(char ch) { int c; for (;;) { c = next_char(); if (c == ch) return; if (c == EOF) return; } } #if NO_LEAKS NCURSES_EXPORT(void) _nc_comp_scan_leaks(void) { if (pushname != 0) { FreeAndNull(pushname); } if (tok_buf != 0) { FreeAndNull(tok_buf); } } #endif ncurses-6.0-20160213/ncurses/tinfo/add_tries.c0000644000175100001440000001002711503260142017351 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1998-on * ****************************************************************************/ /* ** add_tries.c ** ** Add keycode/string to tries-tree. ** */ #include MODULE_ID("$Id: add_tries.c,v 1.10 2010/12/19 01:31:14 tom Exp $") #define SET_TRY(dst,src) if ((dst->ch = *src++) == 128) dst->ch = '\0' #define CMP_TRY(a,b) ((a)? (a == b) : (b == 128)) NCURSES_EXPORT(int) _nc_add_to_try(TRIES ** tree, const char *str, unsigned code) { TRIES *ptr, *savedptr; unsigned const char *txt = (unsigned const char *) str; T((T_CALLED("_nc_add_to_try(%p, %s, %u)"), (void *) *tree, _nc_visbuf(str), code)); if (txt == 0 || *txt == '\0' || code == 0) returnCode(ERR); if ((*tree) != 0) { ptr = savedptr = (*tree); for (;;) { unsigned char cmp = *txt; while (!CMP_TRY(ptr->ch, cmp) && ptr->sibling != 0) ptr = ptr->sibling; if (CMP_TRY(ptr->ch, cmp)) { if (*(++txt) == '\0') { ptr->value = (unsigned short) code; returnCode(OK); } if (ptr->child != 0) ptr = ptr->child; else break; } else { if ((ptr->sibling = typeCalloc(TRIES, 1)) == 0) { returnCode(ERR); } savedptr = ptr = ptr->sibling; SET_TRY(ptr, txt); ptr->value = 0; break; } } /* end for (;;) */ } else { /* (*tree) == 0 :: First sequence to be added */ savedptr = ptr = (*tree) = typeCalloc(TRIES, 1); if (ptr == 0) { returnCode(ERR); } SET_TRY(ptr, txt); ptr->value = 0; } /* at this point, we are adding to the try. ptr->child == 0 */ while (*txt) { ptr->child = typeCalloc(TRIES, 1); ptr = ptr->child; if (ptr == 0) { while ((ptr = savedptr) != 0) { savedptr = ptr->child; free(ptr); } returnCode(ERR); } SET_TRY(ptr, txt); ptr->value = 0; } ptr->value = (unsigned short) code; returnCode(OK); } ncurses-6.0-20160213/ncurses/tinfo/read_termcap.c0000644000175100001440000010206512253174253020057 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * Termcap compatibility support * * If your OS integrator didn't install a terminfo database, you can call * _nc_read_termcap_entry() to support reading and translating capabilities * from the system termcap file. This is a kludge; it will bulk up and slow * down every program that uses ncurses, and translated termcap entries cannot * use full terminfo capabilities. Don't use it unless you absolutely have to; * instead, get your system people to run tic(1) from root on the terminfo * master included with ncurses to translate it into a terminfo database. * * If USE_GETCAP is enabled, we use what is effectively a copy of the 4.4BSD * getcap code to fetch entries. There are disadvantages to this; mainly that * getcap(3) does its own resolution, meaning that entries read in in this way * can't reference the terminfo tree. The only thing it buys is faster startup * time, getcap(3) is much faster than our tic parser. */ #include #include #include #include MODULE_ID("$Id: read_termcap.c,v 1.89 2013/12/15 00:32:43 tom Exp $") #if !PURE_TERMINFO #define TC_SUCCESS 0 #define TC_NOT_FOUND -1 #define TC_SYS_ERR -2 #define TC_REF_LOOP -3 #define TC_UNRESOLVED -4 /* this is not returned by BSD cgetent */ static NCURSES_CONST char * get_termpath(void) { NCURSES_CONST char *result; if (!use_terminfo_vars() || (result = getenv("TERMPATH")) == 0) result = TERMPATH; TR(TRACE_DATABASE, ("TERMPATH is %s", result)); return result; } /* * Note: * getcap(), cgetent(), etc., are BSD functions. A copy of those was added to * this file in November 1995, derived from the BSD4.4 Lite sources. * * The initial adaptation uses 518 lines from that source. * The current source (in 2009) uses 183 lines of BSD4.4 Lite (441 ignoring * whitespace). */ #if USE_GETCAP #if HAVE_BSD_CGETENT #define _nc_cgetcap cgetcap #define _nc_cgetent(buf, oline, db_array, name) cgetent(buf, db_array, name) #define _nc_cgetmatch cgetmatch #define _nc_cgetset cgetset #else static int _nc_cgetmatch(char *, const char *); static int _nc_getent(char **, unsigned *, int *, int, char **, int, const char *, int, char *); static int _nc_nfcmp(const char *, char *); /*- * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Casey Leedom of Lawrence Livermore National Laboratory. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* static char sccsid[] = "@(#)getcap.c 8.3 (Berkeley) 3/25/94"; */ #define BFRAG 1024 #define BSIZE 1024 #define MAX_RECURSION 32 /* maximum getent recursion */ static size_t topreclen; /* toprec length */ static char *toprec; /* Additional record specified by cgetset() */ static int gottoprec; /* Flag indicating retrieval of toprecord */ /* * Cgetset() allows the addition of a user specified buffer to be added to the * database array, in effect "pushing" the buffer on top of the virtual * database. 0 is returned on success, -1 on failure. */ static int _nc_cgetset(const char *ent) { if (ent == 0) { FreeIfNeeded(toprec); toprec = 0; topreclen = 0; return (0); } topreclen = strlen(ent); if ((toprec = typeMalloc(char, topreclen + 1)) == 0) { errno = ENOMEM; return (-1); } gottoprec = 0; _nc_STRCPY(toprec, ent, topreclen); return (0); } /* * Cgetcap searches the capability record buf for the capability cap with type * `type'. A pointer to the value of cap is returned on success, 0 if the * requested capability couldn't be found. * * Specifying a type of ':' means that nothing should follow cap (:cap:). In * this case a pointer to the terminating ':' or NUL will be returned if cap is * found. * * If (cap, '@') or (cap, terminator, '@') is found before (cap, terminator) * return 0. */ static char * _nc_cgetcap(char *buf, const char *cap, int type) { register const char *cp; register char *bp; bp = buf; for (;;) { /* * Skip past the current capability field - it's either the * name field if this is the first time through the loop, or * the remainder of a field whose name failed to match cap. */ for (;;) { if (*bp == '\0') return (0); else if (*bp++ == ':') break; } /* * Try to match (cap, type) in buf. */ for (cp = cap; *cp == *bp && *bp != '\0'; cp++, bp++) continue; if (*cp != '\0') continue; if (*bp == '@') return (0); if (type == ':') { if (*bp != '\0' && *bp != ':') continue; return (bp); } if (*bp != type) continue; bp++; return (*bp == '@' ? 0 : bp); } /* NOTREACHED */ } /* * Cgetent extracts the capability record name from the NULL terminated file * array db_array and returns a pointer to a malloc'd copy of it in buf. Buf * must be retained through all subsequent calls to cgetcap, cgetnum, cgetflag, * and cgetstr, but may then be freed. * * Returns: * * positive # on success (i.e., the index in db_array) * TC_NOT_FOUND if the requested record couldn't be found * TC_SYS_ERR if a system error was encountered (e.g.,couldn't open a file) * TC_REF_LOOP if a potential reference loop is detected * TC_UNRESOLVED if we had too many recurrences to resolve */ static int _nc_cgetent(char **buf, int *oline, char **db_array, const char *name) { unsigned dummy; return (_nc_getent(buf, &dummy, oline, 0, db_array, -1, name, 0, 0)); } /* * Getent implements the functions of cgetent. If fd is non-negative, * *db_array has already been opened and fd is the open file descriptor. We * do this to save time and avoid using up file descriptors for tc= * recursions. * * Getent returns the same success/failure codes as cgetent. On success, a * pointer to a malloc'd capability record with all tc= capabilities fully * expanded and its length (not including trailing ASCII NUL) are left in * *cap and *len. * * Basic algorithm: * + Allocate memory incrementally as needed in chunks of size BFRAG * for capability buffer. * + Recurse for each tc=name and interpolate result. Stop when all * names interpolated, a name can't be found, or depth exceeds * MAX_RECURSION. */ #define DOALLOC(size) typeRealloc(char, size, record) static int _nc_getent( char **cap, /* termcap-content */ unsigned *len, /* length, needed for recursion */ int *beginning, /* line-number at match */ int in_array, /* index in 'db_array[] */ char **db_array, /* list of files to search */ int fd, const char *name, int depth, char *nfield) { register char *r_end, *rp; int myfd = FALSE; char *record = 0; int tc_not_resolved; int current; int lineno; /* * Return with ``loop detected'' error if we've recurred more than * MAX_RECURSION times. */ if (depth > MAX_RECURSION) return (TC_REF_LOOP); /* * Check if we have a top record from cgetset(). */ if (depth == 0 && toprec != 0 && _nc_cgetmatch(toprec, name) == 0) { if ((record = DOALLOC(topreclen + BFRAG)) == 0) { errno = ENOMEM; return (TC_SYS_ERR); } _nc_STRCPY(record, toprec, topreclen + BFRAG); rp = record + topreclen + 1; r_end = rp + BFRAG; current = in_array; } else { int foundit; /* * Allocate first chunk of memory. */ if ((record = DOALLOC(BFRAG)) == 0) { errno = ENOMEM; return (TC_SYS_ERR); } rp = r_end = record + BFRAG; foundit = FALSE; /* * Loop through database array until finding the record. */ for (current = in_array; db_array[current] != 0; current++) { int eof = FALSE; /* * Open database if not already open. */ if (fd >= 0) { (void) lseek(fd, (off_t) 0, SEEK_SET); } else if ((_nc_access(db_array[current], R_OK) < 0) || (fd = open(db_array[current], O_RDONLY, 0)) < 0) { /* No error on unfound file. */ if (errno == ENOENT) continue; free(record); return (TC_SYS_ERR); } else { myfd = TRUE; } lineno = 0; /* * Find the requested capability record ... */ { char buf[2048]; register char *b_end = buf; register char *bp = buf; register int c; /* * Loop invariants: * There is always room for one more character in record. * R_end always points just past end of record. * Rp always points just past last character in record. * B_end always points just past last character in buf. * Bp always points at next character in buf. */ for (;;) { int first = lineno + 1; /* * Read in a line implementing (\, newline) * line continuation. */ rp = record; for (;;) { if (bp >= b_end) { int n; n = read(fd, buf, sizeof(buf)); if (n <= 0) { if (myfd) (void) close(fd); if (n < 0) { free(record); return (TC_SYS_ERR); } fd = -1; eof = TRUE; break; } b_end = buf + n; bp = buf; } c = *bp++; if (c == '\n') { lineno++; /* * Unlike BSD 4.3, this ignores a backslash at the * end of a comment-line. That makes it consistent * with the rest of ncurses -TD */ if (rp == record || *record == '#' || *(rp - 1) != '\\') break; } *rp++ = c; /* * Enforce loop invariant: if no room * left in record buffer, try to get * some more. */ if (rp >= r_end) { unsigned pos; size_t newsize; pos = rp - record; newsize = r_end - record + BFRAG; record = DOALLOC(newsize); if (record == 0) { if (myfd) (void) close(fd); errno = ENOMEM; return (TC_SYS_ERR); } r_end = record + newsize; rp = record + pos; } } /* loop invariant lets us do this */ *rp++ = '\0'; /* * If encountered eof check next file. */ if (eof) break; /* * Toss blank lines and comments. */ if (*record == '\0' || *record == '#') continue; /* * See if this is the record we want ... */ if (_nc_cgetmatch(record, name) == 0 && (nfield == 0 || !_nc_nfcmp(nfield, record))) { foundit = TRUE; *beginning = first; break; /* found it! */ } } } if (foundit) break; } if (!foundit) { free(record); return (TC_NOT_FOUND); } } /* * Got the capability record, but now we have to expand all tc=name * references in it ... */ { register char *newicap, *s; register int newilen; unsigned ilen; int diff, iret, tclen, oline; char *icap = 0, *scan, *tc, *tcstart, *tcend; /* * Loop invariants: * There is room for one more character in record. * R_end points just past end of record. * Rp points just past last character in record. * Scan points at remainder of record that needs to be * scanned for tc=name constructs. */ scan = record; tc_not_resolved = FALSE; for (;;) { if ((tc = _nc_cgetcap(scan, "tc", '=')) == 0) { break; } /* * Find end of tc=name and stomp on the trailing `:' * (if present) so we can use it to call ourselves. */ s = tc; while (*s != '\0') { if (*s++ == ':') { *(s - 1) = '\0'; break; } } tcstart = tc - 3; tclen = s - tcstart; tcend = s; icap = 0; iret = _nc_getent(&icap, &ilen, &oline, current, db_array, fd, tc, depth + 1, 0); newicap = icap; /* Put into a register. */ newilen = ilen; if (iret != TC_SUCCESS) { /* an error */ if (iret < TC_NOT_FOUND) { if (myfd) (void) close(fd); free(record); FreeIfNeeded(icap); return (iret); } if (iret == TC_UNRESOLVED) { tc_not_resolved = TRUE; /* couldn't resolve tc */ } else if (iret == TC_NOT_FOUND) { *(s - 1) = ':'; scan = s - 1; tc_not_resolved = TRUE; continue; } } /* not interested in name field of tc'ed record */ s = newicap; while (*s != '\0' && *s++ != ':') ; newilen -= s - newicap; newicap = s; /* make sure interpolated record is `:'-terminated */ s += newilen; if (*(s - 1) != ':') { *s = ':'; /* overwrite NUL with : */ newilen++; } /* * Make sure there's enough room to insert the * new record. */ diff = newilen - tclen; if (diff >= r_end - rp) { unsigned pos, tcpos, tcposend; size_t newsize; pos = rp - record; newsize = r_end - record + diff + BFRAG; tcpos = tcstart - record; tcposend = tcend - record; record = DOALLOC(newsize); if (record == 0) { if (myfd) (void) close(fd); free(icap); errno = ENOMEM; return (TC_SYS_ERR); } r_end = record + newsize; rp = record + pos; tcstart = record + tcpos; tcend = record + tcposend; } /* * Insert tc'ed record into our record. */ s = tcstart + newilen; memmove(s, tcend, (size_t) (rp - tcend)); memmove(tcstart, newicap, (size_t) newilen); rp += diff; free(icap); /* * Start scan on `:' so next cgetcap works properly * (cgetcap always skips first field). */ scan = s - 1; } } /* * Close file (if we opened it), give back any extra memory, and * return capability, length and success. */ if (myfd) (void) close(fd); *len = rp - record - 1; /* don't count NUL */ if (r_end > rp) { if ((record = DOALLOC((size_t) (rp - record))) == 0) { errno = ENOMEM; return (TC_SYS_ERR); } } *cap = record; if (tc_not_resolved) { return (TC_UNRESOLVED); } return (current); } /* * Cgetmatch will return 0 if name is one of the names of the capability * record buf, -1 if not. */ static int _nc_cgetmatch(char *buf, const char *name) { register const char *np; register char *bp; /* * Start search at beginning of record. */ bp = buf; for (;;) { /* * Try to match a record name. */ np = name; for (;;) { if (*np == '\0') { if (*bp == '|' || *bp == ':' || *bp == '\0') return (0); else break; } else if (*bp++ != *np++) { break; } } /* * Match failed, skip to next name in record. */ bp--; /* a '|' or ':' may have stopped the match */ for (;;) { if (*bp == '\0' || *bp == ':') return (-1); /* match failed totally */ else if (*bp++ == '|') break; /* found next name */ } } } /* * Compare name field of record. */ static int _nc_nfcmp(const char *nf, char *rec) { char *cp, tmp; int ret; for (cp = rec; *cp != ':'; cp++) ; tmp = *(cp + 1); *(cp + 1) = '\0'; ret = strcmp(nf, rec); *(cp + 1) = tmp; return (ret); } #endif /* HAVE_BSD_CGETENT */ /* * Since ncurses provides its own 'tgetent()', we cannot use the native one. * So we reproduce the logic to get down to cgetent() -- or our cut-down * version of that -- to circumvent the problem of configuring against the * termcap library. */ #define USE_BSD_TGETENT 1 #if USE_BSD_TGETENT /* * Copyright (c) 1980, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgment: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* static char sccsid[] = "@(#)termcap.c 8.1 (Berkeley) 6/4/93" */ #define PBUFSIZ 512 /* max length of filename path */ #define PVECSIZ 32 /* max number of names in path */ #define TBUFSIZ (2048*2) /* * On entry, srcp points to a non ':' character which is the beginning of the * token, if any. We'll try to return a string that doesn't end with a ':'. */ static char * get_tc_token(char **srcp, int *endp) { int ch; bool found = FALSE; char *s, *base; char *tok = 0; *endp = TRUE; for (s = base = *srcp; *s != '\0';) { ch = *s++; if (ch == '\\') { if (*s == '\0') { break; } else if (*s++ == '\n') { while (isspace(UChar(*s))) s++; } else { found = TRUE; } } else if (ch == ':') { if (found) { tok = base; s[-1] = '\0'; *srcp = s; *endp = FALSE; break; } base = s; } else if (isgraph(UChar(ch))) { found = TRUE; } } /* malformed entry may end without a ':' */ if (tok == 0 && found) { tok = base; } return tok; } static char * copy_tc_token(char *dst, const char *src, size_t len) { int ch; while ((ch = *src++) != '\0') { if (ch == '\\' && *src == '\n') { while (isspace(UChar(*src))) src++; continue; } if (--len == 0) { dst = 0; break; } *dst++ = (char) ch; } return dst; } /* * Get an entry for terminal name in buffer bp from the termcap file. */ static int _nc_tgetent(char *bp, char **sourcename, int *lineno, const char *name) { static char *the_source; register char *p; register char *cp; char *dummy = NULL; CGETENT_CONST char **fname; char *home; int i; char pathbuf[PBUFSIZ]; /* holds raw path of filenames */ CGETENT_CONST char *pathvec[PVECSIZ]; /* point to names in pathbuf */ NCURSES_CONST char *termpath; string_desc desc; *lineno = 1; fname = pathvec; p = pathbuf; cp = use_terminfo_vars()? getenv("TERMCAP") : NULL; /* * TERMCAP can have one of two things in it. It can be the name of a file * to use instead of /etc/termcap. In this case it better start with a * "/". Or it can be an entry to use so we don't have to read the file. * In this case it has to already have the newlines crunched out. If * TERMCAP does not hold a file name then a path of names is searched * instead. The path is found in the TERMPATH variable, or becomes * "$HOME/.termcap /etc/termcap" if no TERMPATH exists. */ _nc_str_init(&desc, pathbuf, sizeof(pathbuf)); if (cp == NULL) { _nc_safe_strcpy(&desc, get_termpath()); } else if (!_nc_is_abs_path(cp)) { /* TERMCAP holds an entry */ if ((termpath = get_termpath()) != 0) { _nc_safe_strcat(&desc, termpath); } else { char temp[PBUFSIZ]; temp[0] = 0; if ((home = getenv("HOME")) != 0 && *home != '\0' && strchr(home, ' ') == 0 && strlen(home) < sizeof(temp) - 10) { /* setup path */ _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "%s/", home); /* $HOME first */ } /* if no $HOME look in current directory */ _nc_STRCAT(temp, ".termcap", sizeof(temp)); _nc_safe_strcat(&desc, temp); _nc_safe_strcat(&desc, " "); _nc_safe_strcat(&desc, get_termpath()); } } else { /* user-defined name in TERMCAP */ _nc_safe_strcat(&desc, cp); /* still can be tokenized */ } *fname++ = pathbuf; /* tokenize path into vector of names */ while (*++p) { if (*p == ' ' || *p == NCURSES_PATHSEP) { *p = '\0'; while (*++p) if (*p != ' ' && *p != NCURSES_PATHSEP) break; if (*p == '\0') break; *fname++ = p; if (fname >= pathvec + PVECSIZ) { fname--; break; } } } *fname = 0; /* mark end of vector */ #if !HAVE_BSD_CGETENT (void) _nc_cgetset(0); #endif if (_nc_is_abs_path(cp)) { if (_nc_cgetset(cp) < 0) { return (TC_SYS_ERR); } } i = _nc_cgetent(&dummy, lineno, pathvec, name); /* ncurses' termcap-parsing routines cannot handle multiple adjacent * empty fields, and mistakenly use the last valid cap entry instead of * the first (breaks tc= includes) */ *bp = '\0'; if (i >= 0) { char *pd, *ps, *tok; int endflag = FALSE; char *list[1023]; size_t n, count = 0; pd = bp; ps = dummy; while (!endflag && (tok = get_tc_token(&ps, &endflag)) != 0) { bool ignore = FALSE; for (n = 1; n < count; n++) { char *s = list[n]; if (s[0] == tok[0] && s[1] == tok[1]) { ignore = TRUE; break; } } if (ignore != TRUE) { list[count++] = tok; pd = copy_tc_token(pd, tok, (size_t) (TBUFSIZ - (2 + pd - bp))); if (pd == 0) { i = -1; break; } *pd++ = ':'; *pd = '\0'; } } } FreeIfNeeded(dummy); FreeIfNeeded(the_source); the_source = 0; /* This is not related to the BSD cgetent(), but to fake up a suitable * filename for ncurses' error reporting. (If we are not using BSD * cgetent, then it is the actual filename). */ if (i >= 0) { #if HAVE_BSD_CGETENT char temp[PATH_MAX]; _nc_str_init(&desc, temp, sizeof(temp)); _nc_safe_strcpy(&desc, pathvec[i]); _nc_safe_strcat(&desc, ".db"); if (_nc_access(temp, R_OK) == 0) { _nc_safe_strcpy(&desc, pathvec[i]); } if ((the_source = strdup(temp)) != 0) *sourcename = the_source; #else if ((the_source = strdup(pathvec[i])) != 0) *sourcename = the_source; #endif } return (i); } #endif /* USE_BSD_TGETENT */ #endif /* USE_GETCAP */ #define MAXPATHS 32 /* * Add a filename to the list in 'termpaths[]', checking that we really have * a right to open the file. */ #if !USE_GETCAP static int add_tc(char *termpaths[], char *path, int count) { char *save = strchr(path, NCURSES_PATHSEP); if (save != 0) *save = '\0'; if (count < MAXPATHS && _nc_access(path, R_OK) == 0) { termpaths[count++] = path; TR(TRACE_DATABASE, ("Adding termpath %s", path)); } termpaths[count] = 0; if (save != 0) *save = NCURSES_PATHSEP; return count; } #define ADD_TC(path, count) filecount = add_tc(termpaths, path, count) #endif /* !USE_GETCAP */ NCURSES_EXPORT(int) _nc_read_termcap_entry(const char *const tn, TERMTYPE *const tp) { int found = TGETENT_NO; ENTRY *ep; #if USE_GETCAP_CACHE char cwd_buf[PATH_MAX]; #endif #if USE_GETCAP char *p, tc[TBUFSIZ]; int status; static char *source; static int lineno; TR(TRACE_DATABASE, ("read termcap entry for %s", tn)); if (strlen(tn) == 0 || strcmp(tn, ".") == 0 || strcmp(tn, "..") == 0 || _nc_pathlast(tn) != 0) { TR(TRACE_DATABASE, ("illegal or missing entry name '%s'", tn)); return TGETENT_NO; } if (use_terminfo_vars() && (p = getenv("TERMCAP")) != 0 && !_nc_is_abs_path(p) && _nc_name_match(p, tn, "|:")) { /* TERMCAP holds a termcap entry */ strncpy(tc, p, sizeof(tc) - 1); tc[sizeof(tc) - 1] = '\0'; _nc_set_source("TERMCAP"); } else { /* we're using getcap(3) */ if ((status = _nc_tgetent(tc, &source, &lineno, tn)) < 0) return (status == TC_NOT_FOUND ? TGETENT_NO : TGETENT_ERR); _nc_curr_line = lineno; _nc_set_source(source); } _nc_read_entry_source((FILE *) 0, tc, FALSE, TRUE, NULLHOOK); #else /* * Here is what the 4.4BSD termcap(3) page prescribes: * * It will look in the environment for a TERMCAP variable. If found, and * the value does not begin with a slash, and the terminal type name is the * same as the environment string TERM, the TERMCAP string is used instead * of reading a termcap file. If it does begin with a slash, the string is * used as a path name of the termcap file to search. If TERMCAP does not * begin with a slash and name is different from TERM, tgetent() searches * the files $HOME/.termcap and /usr/share/misc/termcap, in that order, * unless the environment variable TERMPATH exists, in which case it * specifies a list of file pathnames (separated by spaces or colons) to be * searched instead. * * It goes on to state: * * Whenever multiple files are searched and a tc field occurs in the * requested entry, the entry it names must be found in the same file or * one of the succeeding files. * * However, this restriction is relaxed in ncurses; tc references to * previous files are permitted. * * This routine returns 1 if an entry is found, 0 if not found, and -1 if * the database is not accessible. */ FILE *fp; char *tc, *termpaths[MAXPATHS]; int filecount = 0; int j, k; bool use_buffer = FALSE; bool normal = TRUE; char tc_buf[1024]; char pathbuf[PATH_MAX]; char *copied = 0; char *cp; struct stat test_stat[MAXPATHS]; termpaths[filecount] = 0; if (use_terminfo_vars() && (tc = getenv("TERMCAP")) != 0) { if (_nc_is_abs_path(tc)) { /* interpret as a filename */ ADD_TC(tc, 0); normal = FALSE; } else if (_nc_name_match(tc, tn, "|:")) { /* treat as a capability file */ use_buffer = TRUE; _nc_SPRINTF(tc_buf, _nc_SLIMIT(sizeof(tc_buf)) "%.*s\n", (int) sizeof(tc_buf) - 2, tc); normal = FALSE; } } if (normal) { /* normal case */ char envhome[PATH_MAX], *h; copied = strdup(get_termpath()); for (cp = copied; *cp; cp++) { if (*cp == NCURSES_PATHSEP) *cp = '\0'; else if (cp == copied || cp[-1] == '\0') { ADD_TC(cp, filecount); } } #define PRIVATE_CAP "%s/.termcap" if (use_terminfo_vars() && (h = getenv("HOME")) != NULL && *h != '\0' && (strlen(h) + sizeof(PRIVATE_CAP)) < PATH_MAX) { /* user's .termcap, if any, should override it */ _nc_STRCPY(envhome, h, sizeof(envhome)); _nc_SPRINTF(pathbuf, _nc_SLIMIT(sizeof(pathbuf)) PRIVATE_CAP, envhome); ADD_TC(pathbuf, filecount); } } /* * Probably /etc/termcap is a symlink to /usr/share/misc/termcap. * Avoid reading the same file twice. */ #if HAVE_LINK for (j = 0; j < filecount; j++) { bool omit = FALSE; if (stat(termpaths[j], &test_stat[j]) != 0 || !S_ISREG(test_stat[j].st_mode)) { omit = TRUE; } else { for (k = 0; k < j; k++) { if (test_stat[k].st_dev == test_stat[j].st_dev && test_stat[k].st_ino == test_stat[j].st_ino) { omit = TRUE; break; } } } if (omit) { TR(TRACE_DATABASE, ("Path %s is a duplicate", termpaths[j])); for (k = j + 1; k < filecount; k++) { termpaths[k - 1] = termpaths[k]; test_stat[k - 1] = test_stat[k]; } --filecount; --j; } } #endif /* parse the sources */ if (use_buffer) { _nc_set_source("TERMCAP"); /* * We don't suppress warning messages here. The presumption is * that since it's just a single entry, they won't be a pain. */ _nc_read_entry_source((FILE *) 0, tc_buf, FALSE, FALSE, NULLHOOK); } else { int i; for (i = 0; i < filecount; i++) { TR(TRACE_DATABASE, ("Looking for %s in %s", tn, termpaths[i])); if (_nc_access(termpaths[i], R_OK) == 0 && (fp = fopen(termpaths[i], "r")) != (FILE *) 0) { _nc_set_source(termpaths[i]); /* * Suppress warning messages. Otherwise you get 400 lines of * crap from archaic termcap files as ncurses complains about * all the obsolete capabilities. */ _nc_read_entry_source(fp, (char *) 0, FALSE, TRUE, NULLHOOK); (void) fclose(fp); } } } if (copied != 0) free(copied); #endif /* USE_GETCAP */ if (_nc_head == 0) return (TGETENT_ERR); /* resolve all use references */ _nc_resolve_uses2(TRUE, FALSE); /* find a terminal matching tn, if we can */ #if USE_GETCAP_CACHE if (getcwd(cwd_buf, sizeof(cwd_buf)) != 0) { _nc_set_writedir((char *) 0); /* note: this does a chdir */ #endif for_entry_list(ep) { if (_nc_name_match(ep->tterm.term_names, tn, "|:")) { /* * Make a local copy of the terminal capabilities, delinked * from the list. */ *tp = ep->tterm; _nc_free_entry(_nc_head, &(ep->tterm)); /* * OK, now try to write the type to user's terminfo directory. * Next time he loads this, it will come through terminfo. * * Advantage: Second and subsequent fetches of this entry will * be very fast. * * Disadvantage: After the first time a termcap type is loaded * by its user, editing it in the /etc/termcap file, or in * TERMCAP, or in a local ~/.termcap, will be ineffective * unless the terminfo entry is explicitly removed. */ #if USE_GETCAP_CACHE (void) _nc_write_entry(tp); #endif found = TGETENT_YES; break; } } #if USE_GETCAP_CACHE chdir(cwd_buf); } #endif return (found); } #else extern NCURSES_EXPORT(void) _nc_read_termcap(void); NCURSES_EXPORT(void) _nc_read_termcap(void) { } #endif /* PURE_TERMINFO */ ncurses-6.0-20160213/ncurses/tinfo/MKcaptab.sh0000755000175100001440000001377611650570252017317 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 2007-2010,2011 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: MKcaptab.sh,v 1.14 2011/10/22 16:34:50 tom Exp $ AWK=${1-awk} OPT1=${2-0} OPT2=${3-tinfo/MKcaptab.awk} DATA=${4-../include/Caps} cat < #include #include EOF ./make_hash 1 info $OPT1 <$DATA ./make_hash 3 cap $OPT1 <$DATA $AWK -f $OPT2 bigstrings=$OPT1 tablename=capalias <$DATA $AWK -f $OPT2 bigstrings=$OPT1 tablename=infoalias <$DATA cat <= 0) { \\ (*actual)[n].field = strings + source[n].field; \\ } static const struct alias * _nc_build_alias(struct alias **actual, const alias_table_data *source, const char *strings, size_t tablesize) { if (*actual == 0) { *actual = typeCalloc(struct alias, tablesize + 1); if (*actual != 0) { size_t n; for (n = 0; n < tablesize; ++n) { add_alias(from); add_alias(to); add_alias(source); } } } return *actual; } #define build_names(root) _nc_build_names(&_nc_##root##_table, \\ root##_names_data, \\ root##_names_text) #define build_alias(root) _nc_build_alias(&_nc_##root##alias_table, \\ root##alias_data, \\ root##alias_text, \\ SIZEOF(root##alias_data)) #else #define build_names(root) _nc_ ## root ## _table #define build_alias(root) _nc_ ## root ## alias_table #endif NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool termcap) { return termcap ? build_names(cap) : build_names(info) ; } /* entrypoint used by tack (do not alter) */ NCURSES_EXPORT(const HashValue *) _nc_get_hash_table (bool termcap) { return termcap ? _nc_cap_hash_table: _nc_info_hash_table ; } NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool termcap) { return termcap ? build_alias(cap) : build_alias(info) ; } static HashValue info_hash(const char *string) { long sum = 0; DEBUG(9, ("hashing %s", string)); while (*string) { sum += (long) (*string + (*(string + 1) << 8)); string++; } DEBUG(9, ("sum is %ld", sum)); return (HashValue) (sum % HASHTABSIZE); } #define TCAP_LEN 2 /* only 1- or 2-character names are used */ static HashValue tcap_hash(const char *string) { char temp[TCAP_LEN + 1]; int limit = 0; while (*string) { temp[limit++] = *string++; if (limit >= TCAP_LEN) break; } temp[limit] = '\0'; return info_hash(temp); } static int compare_tcap_names(const char *a, const char *b) { return !strncmp(a, b, (size_t) TCAP_LEN); } static int compare_info_names(const char *a, const char *b) { return !strcmp(a, b); } static const HashData hash_data[2] = { { HASHTABSIZE, _nc_info_hash_table, info_hash, compare_info_names }, { HASHTABSIZE, _nc_cap_hash_table, tcap_hash, compare_tcap_names } }; NCURSES_EXPORT(const HashData *) _nc_get_hash_info (bool termcap) { return &hash_data[(termcap != FALSE)]; } #if NO_LEAKS NCURSES_EXPORT(void) _nc_comp_captab_leaks(void) { #if $OPT1 FreeIfNeeded(_nc_cap_table); FreeIfNeeded(_nc_info_table); FreeIfNeeded(_nc_capalias_table); FreeIfNeeded(_nc_infoalias_table); #endif } #endif /* NO_LEAKS */ EOF ncurses-6.0-20160213/ncurses/tinfo/alloc_entry.c0000644000175100001440000002024112203746406017737 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * alloc_entry.c -- allocation functions for terminfo entries * * _nc_copy_entry() * _nc_init_entry() * _nc_merge_entry() * _nc_save_str() * _nc_wrap_entry() * */ #include #include MODULE_ID("$Id: alloc_entry.c,v 1.58 2013/08/17 19:20:38 tom Exp $") #define ABSENT_OFFSET -1 #define CANCELLED_OFFSET -2 #define MAX_STRTAB 4096 /* documented maximum entry size */ static char *stringbuf; /* buffer for string capabilities */ static size_t next_free; /* next free character in stringbuf */ NCURSES_EXPORT(void) _nc_init_entry(TERMTYPE *const tp) /* initialize a terminal type data block */ { #if NO_LEAKS if (tp == 0) { if (stringbuf != 0) { FreeAndNull(stringbuf); } return; } #endif if (stringbuf == 0) TYPE_MALLOC(char, (size_t) MAX_STRTAB, stringbuf); next_free = 0; _nc_init_termtype(tp); } NCURSES_EXPORT(ENTRY *) _nc_copy_entry(ENTRY * oldp) { ENTRY *newp = typeCalloc(ENTRY, 1); if (newp != 0) { *newp = *oldp; _nc_copy_termtype(&(newp->tterm), &(oldp->tterm)); } return newp; } /* save a copy of string in the string buffer */ NCURSES_EXPORT(char *) _nc_save_str(const char *const string) { char *result = 0; size_t old_next_free = next_free; size_t len = strlen(string) + 1; if (len == 1 && next_free != 0) { /* * Cheat a little by making an empty string point to the end of the * previous string. */ if (next_free < MAX_STRTAB) { result = (stringbuf + next_free - 1); } } else if (next_free + len < MAX_STRTAB) { _nc_STRCPY(&stringbuf[next_free], string, MAX_STRTAB); DEBUG(7, ("Saved string %s", _nc_visbuf(string))); DEBUG(7, ("at location %d", (int) next_free)); next_free += len; result = (stringbuf + old_next_free); } else { _nc_warning("Too much data, some is lost: %s", string); } return result; } NCURSES_EXPORT(void) _nc_wrap_entry(ENTRY * const ep, bool copy_strings) /* copy the string parts to allocated storage, preserving pointers to it */ { int offsets[MAX_ENTRY_SIZE / sizeof(short)]; int useoffsets[MAX_USES]; unsigned i, n; unsigned nuses = ep->nuses; TERMTYPE *tp = &(ep->tterm); if (copy_strings) { next_free = 0; /* clear static storage */ /* copy term_names, Strings, uses */ tp->term_names = _nc_save_str(tp->term_names); for_each_string(i, tp) { if (tp->Strings[i] != ABSENT_STRING && tp->Strings[i] != CANCELLED_STRING) { tp->Strings[i] = _nc_save_str(tp->Strings[i]); } } for (i = 0; i < nuses; i++) { if (ep->uses[i].name == 0) { ep->uses[i].name = _nc_save_str(ep->uses[i].name); } } free(tp->str_table); } assert(tp->term_names >= stringbuf); n = (unsigned) (tp->term_names - stringbuf); for_each_string(i, &(ep->tterm)) { if (i < SIZEOF(offsets)) { if (tp->Strings[i] == ABSENT_STRING) { offsets[i] = ABSENT_OFFSET; } else if (tp->Strings[i] == CANCELLED_STRING) { offsets[i] = CANCELLED_OFFSET; } else { offsets[i] = (int) (tp->Strings[i] - stringbuf); } } } for (i = 0; i < nuses; i++) { if (ep->uses[i].name == 0) useoffsets[i] = ABSENT_OFFSET; else useoffsets[i] = (int) (ep->uses[i].name - stringbuf); } TYPE_MALLOC(char, next_free, tp->str_table); (void) memcpy(tp->str_table, stringbuf, next_free); tp->term_names = tp->str_table + n; for_each_string(i, &(ep->tterm)) { if (i < SIZEOF(offsets)) { if (offsets[i] == ABSENT_OFFSET) { tp->Strings[i] = ABSENT_STRING; } else if (offsets[i] == CANCELLED_OFFSET) { tp->Strings[i] = CANCELLED_STRING; } else { tp->Strings[i] = tp->str_table + offsets[i]; } } } #if NCURSES_XNAMES if (!copy_strings) { if ((n = (unsigned) NUM_EXT_NAMES(tp)) != 0) { if (n < SIZEOF(offsets)) { size_t length = 0; size_t offset; for (i = 0; i < n; i++) { length += strlen(tp->ext_Names[i]) + 1; offsets[i] = (int) (tp->ext_Names[i] - stringbuf); } TYPE_MALLOC(char, length, tp->ext_str_table); for (i = 0, offset = 0; i < n; i++) { tp->ext_Names[i] = tp->ext_str_table + offset; _nc_STRCPY(tp->ext_Names[i], stringbuf + offsets[i], length - offset); offset += strlen(tp->ext_Names[i]) + 1; } } } } #endif for (i = 0; i < nuses; i++) { if (useoffsets[i] == ABSENT_OFFSET) ep->uses[i].name = 0; else ep->uses[i].name = (tp->str_table + useoffsets[i]); } } NCURSES_EXPORT(void) _nc_merge_entry(TERMTYPE *const to, TERMTYPE *const from) /* merge capabilities from `from' entry into `to' entry */ { unsigned i; #if NCURSES_XNAMES _nc_align_termtype(to, from); #endif for_each_boolean(i, from) { if (to->Booleans[i] != (char) CANCELLED_BOOLEAN) { int mergebool = from->Booleans[i]; if (mergebool == CANCELLED_BOOLEAN) to->Booleans[i] = FALSE; else if (mergebool == TRUE) to->Booleans[i] = (char) mergebool; } } for_each_number(i, from) { if (to->Numbers[i] != CANCELLED_NUMERIC) { short mergenum = from->Numbers[i]; if (mergenum == CANCELLED_NUMERIC) to->Numbers[i] = ABSENT_NUMERIC; else if (mergenum != ABSENT_NUMERIC) to->Numbers[i] = mergenum; } } /* * Note: the copies of strings this makes don't have their own * storage. This is OK right now, but will be a problem if we * we ever want to deallocate entries. */ for_each_string(i, from) { if (to->Strings[i] != CANCELLED_STRING) { char *mergestring = from->Strings[i]; if (mergestring == CANCELLED_STRING) to->Strings[i] = ABSENT_STRING; else if (mergestring != ABSENT_STRING) to->Strings[i] = mergestring; } } } #if NO_LEAKS NCURSES_EXPORT(void) _nc_alloc_entry_leaks(void) { if (stringbuf != 0) { FreeAndNull(stringbuf); } next_free = 0; } #endif ncurses-6.0-20160213/ncurses/tinfo/obsolete.c0000644000175100001440000001554112416114147017244 0ustar tomusers/**************************************************************************** * Copyright (c) 2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2013-on * ****************************************************************************/ /* ** Support for obsolete/unusual features. */ #include MODULE_ID("$Id: obsolete.c,v 1.3 2014/10/11 02:39:35 tom Exp $") /* * Obsolete entrypoint retained for binary compatbility. */ NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_set_buffer) (NCURSES_SP_DCLx FILE *ofp, int buffered) { #if NCURSES_SP_FUNCS (void) SP_PARM; #endif (void) ofp; (void) buffered; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_set_buffer(FILE *ofp, int buffered) { NCURSES_SP_NAME(_nc_set_buffer) (CURRENT_SCREEN, ofp, buffered); } #endif #if !HAVE_STRDUP NCURSES_EXPORT(char *) _nc_strdup(const char *s) { char *result = 0; if (s != 0) { size_t need = strlen(s); result = malloc(need + 1); if (result != 0) { strcpy(result, s); } } return result; } #endif #if USE_MY_MEMMOVE #define DST ((char *)s1) #define SRC ((const char *)s2) NCURSES_EXPORT(void *) _nc_memmove(void *s1, const void *s2, size_t n) { if (n != 0) { if ((DST + n > SRC) && (SRC + n > DST)) { static char *bfr; static size_t length; register size_t j; if (length < n) { length = (n * 3) / 2; bfr = typeRealloc(char, length, bfr); } for (j = 0; j < n; j++) bfr[j] = SRC[j]; s2 = bfr; } while (n-- != 0) DST[n] = SRC[n]; } return s1; } #endif /* USE_MY_MEMMOVE */ #ifdef EXP_XTERM_1005 NCURSES_EXPORT(int) _nc_conv_to_utf8(unsigned char *target, unsigned source, unsigned limit) { #define CH(n) UChar((source) >> ((n) * 8)) int rc = 0; if (source <= 0x0000007f) rc = 1; else if (source <= 0x000007ff) rc = 2; else if (source <= 0x0000ffff) rc = 3; else if (source <= 0x001fffff) rc = 4; else if (source <= 0x03ffffff) rc = 5; else /* (source <= 0x7fffffff) */ rc = 6; if ((unsigned) rc > limit) { /* whatever it is, we cannot decode it */ rc = 0; } if (target != 0) { switch (rc) { case 1: target[0] = CH(0); break; case 2: target[1] = UChar(0x80 | (CH(0) & 0x3f)); target[0] = UChar(0xc0 | (CH(0) >> 6) | ((CH(1) & 0x07) << 2)); break; case 3: target[2] = UChar(0x80 | (CH(0) & 0x3f)); target[1] = UChar(0x80 | (CH(0) >> 6) | ((CH(1) & 0x0f) << 2)); target[0] = UChar(0xe0 | ((int) (CH(1) & 0xf0) >> 4)); break; case 4: target[3] = UChar(0x80 | (CH(0) & 0x3f)); target[2] = UChar(0x80 | (CH(0) >> 6) | ((CH(1) & 0x0f) << 2)); target[1] = UChar(0x80 | ((int) (CH(1) & 0xf0) >> 4) | ((int) (CH(2) & 0x03) << 4)); target[0] = UChar(0xf0 | ((int) (CH(2) & 0x1f) >> 2)); break; case 5: target[4] = UChar(0x80 | (CH(0) & 0x3f)); target[3] = UChar(0x80 | (CH(0) >> 6) | ((CH(1) & 0x0f) << 2)); target[2] = UChar(0x80 | ((int) (CH(1) & 0xf0) >> 4) | ((int) (CH(2) & 0x03) << 4)); target[1] = UChar(0x80 | (CH(2) >> 2)); target[0] = UChar(0xf8 | (CH(3) & 0x03)); break; case 6: target[5] = UChar(0x80 | (CH(0) & 0x3f)); target[4] = UChar(0x80 | (CH(0) >> 6) | ((CH(1) & 0x0f) << 2)); target[3] = UChar(0x80 | (CH(1) >> 4) | ((CH(2) & 0x03) << 4)); target[2] = UChar(0x80 | (CH(2) >> 2)); target[1] = UChar(0x80 | (CH(3) & 0x3f)); target[0] = UChar(0xfc | ((int) (CH(3) & 0x40) >> 6)); break; } } return rc; /* number of bytes needed in target */ #undef CH } NCURSES_EXPORT(int) _nc_conv_to_utf32(unsigned *target, const char *source, unsigned limit) { #define CH(n) UChar((*target) >> ((n) * 8)) int rc = 0; int j; unsigned mask = 0; /* * Find the number of bytes we will need from the source. */ if ((*source & 0x80) == 0) { rc = 1; mask = (unsigned) *source; } else if ((*source & 0xe0) == 0xc0) { rc = 2; mask = (unsigned) (*source & 0x1f); } else if ((*source & 0xf0) == 0xe0) { rc = 3; mask = (unsigned) (*source & 0x0f); } else if ((*source & 0xf8) == 0xf0) { rc = 4; mask = (unsigned) (*source & 0x07); } else if ((*source & 0xfc) == 0xf8) { rc = 5; mask = (unsigned) (*source & 0x03); } else if ((*source & 0xfe) == 0xfc) { rc = 6; mask = (unsigned) (*source & 0x01); } if ((unsigned) rc > limit) { /* whatever it is, we cannot decode it */ rc = 0; } /* * sanity-check. */ if (rc > 1) { for (j = 1; j < rc; j++) { if ((source[j] & 0xc0) != 0x80) break; } if (j != rc) { rc = 0; } } if (target != 0) { int shift = 0; *target = 0; for (j = 1; j < rc; j++) { *target |= (unsigned) (source[rc - j] & 0x3f) << shift; shift += 6; } *target |= mask << shift; } return rc; #undef CH } #endif /* EXP_XTERM_1005 */ ncurses-6.0-20160213/ncurses/tinfo/MKnames.awk0000644000175100001440000001630111161253053017312 0ustar tomusers############################################################################## # Copyright (c) 2007-2008,2009 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: MKnames.awk,v 1.22 2009/03/21 21:03:39 tom Exp $ function large_item(value) { result = sprintf("%d,", offset); offset = offset + length(value) + 1; offcol = offcol + length(result) + 2; if (offcol > 70) { result = result "\n"; offcol = 0; } else { result = result " "; } bigstr = bigstr sprintf("\"%s\\0\" ", value); bigcol = bigcol + length(value) + 5; if (bigcol > 70) { bigstr = bigstr "\\\n"; bigcol = 0; } return result; } function small_item(value) { return sprintf("\t\t\"%s\",\n", value); } function print_strings(name,value) { printf "DCL(%s) = {\n", name print value print "\t\t(NCURSES_CONST char *)0," print "};" print "" } function print_offsets(name,value) { printf "static const short _nc_offset_%s[] = {\n", name printf "%s", value print "};" print "" printf "static NCURSES_CONST char ** ptr_%s = 0;\n", name print "" } BEGIN { print "/* This file was generated by MKnames.awk */" print "" print "#include " print "" print "#define IT NCURSES_CONST char * const" print "" offset = 0; offcol = 0; bigcol = 0; } $1 ~ /^#/ {next;} $1 == "SKIPWARN" {next;} $3 == "bool" { small_boolnames = small_boolnames small_item($2); large_boolnames = large_boolnames large_item($2); small_boolfnames = small_boolfnames small_item($1); large_boolfnames = large_boolfnames large_item($1); } $3 == "num" { small_numnames = small_numnames small_item($2); large_numnames = large_numnames large_item($2); small_numfnames = small_numfnames small_item($1); large_numfnames = large_numfnames large_item($1); } $3 == "str" { small_strnames = small_strnames small_item($2); large_strnames = large_strnames large_item($2); small_strfnames = small_strfnames small_item($1); large_strfnames = large_strfnames large_item($1); } END { print "" print "#if BROKEN_LINKER || USE_REENTRANT" print "" if (bigstrings) { printf "static const char _nc_name_blob[] = \n" printf "%s;\n", bigstr; print_offsets("boolfnames", large_boolfnames); print_offsets("boolnames", large_boolnames); print_offsets("numfnames", large_numfnames); print_offsets("numnames", large_numnames); print_offsets("strfnames", large_strfnames); print_offsets("strnames", large_strnames); print "" print "static IT *" print "alloc_array(NCURSES_CONST char ***value, const short *offsets, unsigned size)" print "{" print " if (*value == 0) {" print " if ((*value = typeCalloc(NCURSES_CONST char *, size + 1)) != 0) {" print " unsigned n;" print " for (n = 0; n < size; ++n) {" print " (*value)[n] = (NCURSES_CONST char *) _nc_name_blob + offsets[n];" print " }" print " }" print " }" print " return *value;" print "}" print "" print "#define FIX(it) NCURSES_IMPEXP IT * NCURSES_API NCURSES_PUBLIC_VAR(it)(void) { return alloc_array(&ptr_##it, _nc_offset_##it, SIZEOF(_nc_offset_##it)); }" } else { print "#define DCL(it) static IT data##it[]" print "" print_strings("boolnames", small_boolnames); print_strings("boolfnames", small_boolfnames); print_strings("numnames", small_numnames); print_strings("numfnames", small_numfnames); print_strings("strnames", small_strnames); print_strings("strfnames", small_strfnames); print "#define FIX(it) NCURSES_IMPEXP IT * NCURSES_API NCURSES_PUBLIC_VAR(it)(void) { return data##it; }" } print "" print "/* remove public definition which conflicts with FIX() */" print "#undef boolnames" print "#undef boolfnames" print "#undef numnames" print "#undef numfnames" print "#undef strnames" print "#undef strfnames" print "" print "/* add local definition */" print "FIX(boolnames)" print "FIX(boolfnames)" print "FIX(numnames)" print "FIX(numfnames)" print "FIX(strnames)" print "FIX(strfnames)" print "" print "/* restore the public definition */" print "#define boolnames NCURSES_PUBLIC_VAR(boolnames())" print "#define boolfnames NCURSES_PUBLIC_VAR(boolfnames())" print "#define numnames NCURSES_PUBLIC_VAR(numnames())" print "#define numfnames NCURSES_PUBLIC_VAR(numfnames())" print "#define strnames NCURSES_PUBLIC_VAR(strnames())" print "#define strfnames NCURSES_PUBLIC_VAR(strfnames())" print "" print "#define FREE_FIX(it) if (ptr_##it) { FreeAndNull(ptr_##it); }" print "" print "#if NO_LEAKS" print "NCURSES_EXPORT(void)" print "_nc_names_leaks(void)" print "{" if (bigstrings) { print "FREE_FIX(boolnames)" print "FREE_FIX(boolfnames)" print "FREE_FIX(numnames)" print "FREE_FIX(numfnames)" print "FREE_FIX(strnames)" print "FREE_FIX(strfnames)" } print "}" print "#endif" print "" print "#else" print "" print "#define DCL(it) NCURSES_EXPORT_VAR(IT) it[]" print "" print_strings("boolnames", small_boolnames); print_strings("boolfnames", small_boolfnames); print_strings("numnames", small_numnames); print_strings("numfnames", small_numfnames); print_strings("strnames", small_strnames); print_strings("strfnames", small_strfnames); print "" print "#endif /* BROKEN_LINKER */" } ncurses-6.0-20160213/ncurses/tinfo/lib_print.c0000644000175100001440000001057511721266567017430 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer * ****************************************************************************/ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_print.c,v 1.23 2012/02/22 22:34:31 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(mcprint) (NCURSES_SP_DCLx char *data, int len) /* ship binary character data to the printer via mc4/mc5/mc5p */ { int result; char *mybuf, *switchon; size_t onsize, offsize; size_t need; errno = 0; if (!HasTInfoTerminal(SP_PARM) || len <= 0 || (!prtr_non && (!prtr_on || !prtr_off))) { errno = ENODEV; return (ERR); } if (prtr_non) { switchon = TPARM_1(prtr_non, len); onsize = strlen(switchon); offsize = 0; } else { switchon = prtr_on; onsize = strlen(prtr_on); offsize = strlen(prtr_off); } need = onsize + (size_t) len + offsize; if (switchon == 0 || (mybuf = typeMalloc(char, need + 1)) == 0) { errno = ENOMEM; return (ERR); } _nc_STRCPY(mybuf, switchon, need); memcpy(mybuf + onsize, data, (size_t) len); if (offsize) _nc_STRCPY(mybuf + onsize + len, prtr_off, need); /* * We're relying on the atomicity of UNIX writes here. The * danger is that output from a refresh() might get interspersed * with the printer data after the write call returns but before the * data has actually been shipped to the terminal. If the write(2) * operation is truly atomic we're protected from this. */ result = (int) write(TerminalOf(SP_PARM)->Filedes, mybuf, need); /* * By giving up our scheduler slot here we increase the odds that the * kernel will ship the contiguous clist items from the last write * immediately. */ #ifndef __MINGW32__ (void) sleep(0); #endif free(mybuf); return (result); } #if NCURSES_SP_FUNCS && !defined(USE_TERM_DRIVER) NCURSES_EXPORT(int) mcprint(char *data, int len) { return NCURSES_SP_NAME(mcprint) (CURRENT_SCREEN, data, len); } #endif ncurses-6.0-20160213/ncurses/tinfo/comp_expand.c0000644000175100001440000001470411733412135017724 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1998 * ****************************************************************************/ #include #include #include MODULE_ID("$Id: comp_expand.c,v 1.25 2012/03/24 18:37:17 tom Exp $") static int trailing_spaces(const char *src) { while (*src == ' ') src++; return *src == 0; } /* this deals with differences over whether 0x7f and 0x80..0x9f are controls */ #define REALCTL(s) (UChar(*(s)) < 127 && iscntrl(UChar(*(s)))) #define REALPRINT(s) (UChar(*(s)) < 127 && isprint(UChar(*(s)))) #define P_LIMIT(p) (length - (size_t)(p)) NCURSES_EXPORT(char *) _nc_tic_expand(const char *srcp, bool tic_format, int numbers) { static char *buffer; static size_t length; int bufp; const char *str = VALID_STRING(srcp) ? srcp : "\0\0"; bool islong = (strlen(str) > 3); size_t need = (2 + strlen(str)) * 4; int ch; if (srcp == 0) { #if NO_LEAKS if (buffer != 0) { FreeAndNull(buffer); length = 0; } #endif return 0; } if (buffer == 0 || need > length) { if ((buffer = typeRealloc(char, length = need, buffer)) == 0) return 0; } bufp = 0; while ((ch = UChar(*str)) != 0) { if (ch == '%' && REALPRINT(str + 1)) { buffer[bufp++] = *str++; /* * Though the character literals are more compact, most * terminal descriptions use numbers and are not easy * to read in character-literal form. */ switch (numbers) { case -1: if (str[0] == S_QUOTE && str[1] != '\\' && REALPRINT(str + 1) && str[2] == S_QUOTE) { _nc_SPRINTF(buffer + bufp, _nc_SLIMIT(P_LIMIT(bufp)) "{%d}", str[1]); bufp += (int) strlen(buffer + bufp); str += 2; } else { buffer[bufp++] = *str; } break; /* * If we have a "%{number}", try to translate it into * a "%'char'" form, since that will run a little faster * when we're interpreting it. Also, having one form * for the constant makes it simpler to compare terminal * descriptions. */ case 1: if (str[0] == L_BRACE && isdigit(UChar(str[1]))) { char *dst = 0; long value = strtol(str + 1, &dst, 0); if (dst != 0 && *dst == R_BRACE && value < 127 && value != '\\' /* FIXME */ && isprint((int) value)) { ch = (int) value; buffer[bufp++] = S_QUOTE; if (ch == '\\' || ch == S_QUOTE) buffer[bufp++] = '\\'; buffer[bufp++] = (char) ch; buffer[bufp++] = S_QUOTE; str = dst; } else { buffer[bufp++] = *str; } } else { buffer[bufp++] = *str; } break; default: buffer[bufp++] = *str; break; } } else if (ch == 128) { buffer[bufp++] = '\\'; buffer[bufp++] = '0'; } else if (ch == '\033') { buffer[bufp++] = '\\'; buffer[bufp++] = 'E'; } else if (ch == '\\' && tic_format && (str == srcp || str[-1] != '^')) { buffer[bufp++] = '\\'; buffer[bufp++] = '\\'; } else if (ch == ' ' && tic_format && (str == srcp || trailing_spaces(str))) { buffer[bufp++] = '\\'; buffer[bufp++] = 's'; } else if ((ch == ',' || ch == ':' || ch == '^') && tic_format) { buffer[bufp++] = '\\'; buffer[bufp++] = (char) ch; } else if (REALPRINT(str) && (ch != ',' && ch != ':' && !(ch == '!' && !tic_format) && ch != '^')) buffer[bufp++] = (char) ch; #if 0 /* FIXME: this would be more readable (in fact the whole 'islong' logic should be removed) */ else if (ch == '\b') { buffer[bufp++] = '\\'; buffer[bufp++] = 'b'; } else if (ch == '\f') { buffer[bufp++] = '\\'; buffer[bufp++] = 'f'; } else if (ch == '\t' && islong) { buffer[bufp++] = '\\'; buffer[bufp++] = 't'; } #endif else if (ch == '\r' && (islong || (strlen(srcp) > 2 && str[1] == '\0'))) { buffer[bufp++] = '\\'; buffer[bufp++] = 'r'; } else if (ch == '\n' && islong) { buffer[bufp++] = '\\'; buffer[bufp++] = 'n'; } #define UnCtl(c) ((c) + '@') else if (REALCTL(str) && ch != '\\' && (!islong || isdigit(UChar(str[1])))) { _nc_SPRINTF(&buffer[bufp], _nc_SLIMIT(P_LIMIT(bufp)) "^%c", UnCtl(ch)); bufp += 2; } else { _nc_SPRINTF(&buffer[bufp], _nc_SLIMIT(P_LIMIT(bufp)) "\\%03o", ch); bufp += 4; } str++; } buffer[bufp] = '\0'; return (buffer); } ncurses-6.0-20160213/ncurses/tinfo/write_entry.c0000644000175100001440000005225212572656615020021 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * write_entry.c -- write a terminfo structure onto the file system */ #include #include #include #if 1 #define TRACE_OUT(p) DEBUG(2, p) #else #define TRACE_OUT(p) /*nothing */ #endif MODULE_ID("$Id: write_entry.c,v 1.93 2015/09/05 21:24:29 tom Exp $") static int total_written; static int make_db_root(const char *); #if !USE_HASHED_DB static void write_file(char *filename, TERMTYPE *tp) { char buffer[MAX_ENTRY_SIZE]; unsigned limit = sizeof(buffer); unsigned offset = 0; FILE *fp = (_nc_access(filename, W_OK) == 0) ? fopen(filename, "wb") : 0; if (fp == 0) { perror(filename); _nc_syserr_abort("can't open %s/%s", _nc_tic_dir(0), filename); } DEBUG(1, ("Created %s", filename)); if (_nc_write_object(tp, buffer, &offset, limit) == ERR || fwrite(buffer, sizeof(char), (size_t) offset, fp) != offset) { _nc_syserr_abort("error writing %s/%s", _nc_tic_dir(0), filename); } fclose(fp); } /* * Check for access rights to destination directories * Create any directories which don't exist. * * Note: there's no reason to return the result of make_db_root(), since * this function is called only in instances where that has to succeed. */ static void check_writeable(int code) { static const char dirnames[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; static bool verified[sizeof(dirnames)]; char dir[sizeof(LEAF_FMT)]; char *s = 0; if (code == 0 || (s = (strchr) (dirnames, code)) == 0) _nc_err_abort("Illegal terminfo subdirectory \"" LEAF_FMT "\"", code); if (verified[s - dirnames]) return; _nc_SPRINTF(dir, _nc_SLIMIT(sizeof(dir)) LEAF_FMT, code); if (make_db_root(dir) < 0) { _nc_err_abort("%s/%s: permission denied", _nc_tic_dir(0), dir); } verified[s - dirnames] = TRUE; } #endif /* !USE_HASHED_DB */ static int make_db_path(char *dst, const char *src, size_t limit) { int rc = -1; const char *top = _nc_tic_dir(0); if (src == top || _nc_is_abs_path(src)) { if (strlen(src) + 1 <= limit) { _nc_STRCPY(dst, src, limit); rc = 0; } } else { if (strlen(top) + strlen(src) + 2 <= limit) { _nc_SPRINTF(dst, _nc_SLIMIT(limit) "%s/%s", top, src); rc = 0; } } #if USE_HASHED_DB if (rc == 0) { static const char suffix[] = DBM_SUFFIX; size_t have = strlen(dst); size_t need = strlen(suffix); if (have > need && strcmp(dst + (int) (have - need), suffix)) { if (have + need <= limit) { _nc_STRCAT(dst, suffix, limit); } else { rc = -1; } } else if (_nc_is_dir_path(dst)) { rc = -1; } } #endif return rc; } /* * Make a database-root if it doesn't exist. */ static int make_db_root(const char *path) { int rc; char fullpath[PATH_MAX]; if ((rc = make_db_path(fullpath, path, sizeof(fullpath))) == 0) { #if USE_HASHED_DB DB *capdbp; if ((capdbp = _nc_db_open(fullpath, TRUE)) == NULL) { rc = -1; } else if (_nc_db_close(capdbp) < 0) { rc = -1; } #else struct stat statbuf; if ((rc = stat(path, &statbuf)) < 0) { rc = mkdir(path #if !defined(__MINGW32__) ,0777 #endif ); } else if (_nc_access(path, R_OK | W_OK | X_OK) < 0) { rc = -1; /* permission denied */ } else if (!(S_ISDIR(statbuf.st_mode))) { rc = -1; /* not a directory */ } #endif } return rc; } /* * Set the write directory for compiled entries. */ NCURSES_EXPORT(void) _nc_set_writedir(const char *dir) { const char *destination; char actual[PATH_MAX]; if (dir == 0 #ifndef USE_ROOT_ENVIRON && use_terminfo_vars() #endif ) dir = getenv("TERMINFO"); if (dir != 0) (void) _nc_tic_dir(dir); destination = _nc_tic_dir(0); if (make_db_root(destination) < 0) { char *home = _nc_home_terminfo(); if (home != 0) { destination = home; if (make_db_root(destination) < 0) _nc_err_abort("%s: permission denied (errno %d)", destination, errno); } } /* * Note: because of this code, this logic should be exercised * *once only* per run. */ #if USE_HASHED_DB make_db_path(actual, destination, sizeof(actual)); #else if (chdir(_nc_tic_dir(destination)) < 0 || getcwd(actual, sizeof(actual)) == 0) _nc_err_abort("%s: not a directory", destination); #endif _nc_keep_tic_dir(strdup(actual)); } /* * Save the compiled version of a description in the filesystem. * * make a copy of the name-list * break it up into first-name and all-but-last-name * creat(first-name) * write object information to first-name * close(first-name) * for each name in all-but-last-name * link to first-name * * Using 'time()' to obtain a reference for file timestamps is unreliable, * e.g., with NFS, because the filesystem may have a different time * reference. We check for pre-existence of links by latching the first * timestamp from a file that we create. * * The _nc_warning() calls will report a correct line number only if * _nc_curr_line is properly set before the write_entry() call. */ NCURSES_EXPORT(void) _nc_write_entry(TERMTYPE *const tp) { #if USE_HASHED_DB char buffer[MAX_ENTRY_SIZE + 1]; unsigned limit = sizeof(buffer); unsigned offset = 0; #else /* !USE_HASHED_DB */ struct stat statbuf; char filename[PATH_MAX]; char linkname[PATH_MAX]; #if USE_SYMLINKS char symlinkname[PATH_MAX]; #if !HAVE_LINK #undef HAVE_LINK #define HAVE_LINK 1 #endif #endif /* USE_SYMLINKS */ static int call_count; static time_t start_time; /* time at start of writes */ #endif /* USE_HASHED_DB */ char name_list[MAX_TERMINFO_LENGTH]; char *first_name, *other_names; char *ptr; char *term_names = tp->term_names; size_t name_size = strlen(term_names); if (name_size == 0) { _nc_syserr_abort("no terminal name found."); } else if (name_size >= sizeof(name_list) - 1) { _nc_syserr_abort("terminal name too long: %s", term_names); } _nc_STRCPY(name_list, term_names, sizeof(name_list)); DEBUG(7, ("Name list = '%s'", name_list)); first_name = name_list; ptr = &name_list[name_size - 1]; other_names = ptr + 1; while (ptr > name_list && *ptr != '|') ptr--; if (ptr != name_list) { *ptr = '\0'; for (ptr = name_list; *ptr != '\0' && *ptr != '|'; ptr++) continue; if (*ptr == '\0') other_names = ptr; else { *ptr = '\0'; other_names = ptr + 1; } } DEBUG(7, ("First name = '%s'", first_name)); DEBUG(7, ("Other names = '%s'", other_names)); _nc_set_type(first_name); #if USE_HASHED_DB if (_nc_write_object(tp, buffer + 1, &offset, limit - 1) != ERR) { DB *capdb = _nc_db_open(_nc_tic_dir(0), TRUE); DBT key, data; if (capdb != 0) { buffer[0] = 0; memset(&key, 0, sizeof(key)); key.data = term_names; key.size = name_size; memset(&data, 0, sizeof(data)); data.data = buffer; data.size = offset + 1; _nc_db_put(capdb, &key, &data); buffer[0] = 2; key.data = name_list; key.size = strlen(name_list); _nc_STRCPY(buffer + 1, term_names, sizeof(buffer) - 1); data.size = name_size + 1; _nc_db_put(capdb, &key, &data); while (*other_names != '\0') { ptr = other_names++; assert(ptr < buffer + sizeof(buffer) - 1); while (*other_names != '|' && *other_names != '\0') other_names++; if (*other_names != '\0') *(other_names++) = '\0'; key.data = ptr; key.size = strlen(ptr); _nc_db_put(capdb, &key, &data); } } } #else /* !USE_HASHED_DB */ if (call_count++ == 0) { start_time = 0; } if (strlen(first_name) >= sizeof(filename) - (2 + LEAF_LEN)) _nc_warning("terminal name too long."); _nc_SPRINTF(filename, _nc_SLIMIT(sizeof(filename)) LEAF_FMT "/%s", first_name[0], first_name); /* * Has this primary name been written since the first call to * write_entry()? If so, the newer write will step on the older, * so warn the user. */ if (start_time > 0 && stat(filename, &statbuf) >= 0 && statbuf.st_mtime >= start_time) { #if HAVE_LINK && !USE_SYMLINKS /* * If the file has more than one link, the reason for the previous * write could be that the current primary name used to be an alias for * the previous entry. In that case, unlink the file so that we will * not modify the previous entry as we write this one. */ if (statbuf.st_nlink > 1) { _nc_warning("name redefined."); unlink(filename); } else { _nc_warning("name multiply defined."); } #else _nc_warning("name multiply defined."); #endif } check_writeable(first_name[0]); write_file(filename, tp); if (start_time == 0) { if (stat(filename, &statbuf) < 0 || (start_time = statbuf.st_mtime) == 0) { _nc_syserr_abort("error obtaining time from %s/%s", _nc_tic_dir(0), filename); } } while (*other_names != '\0') { ptr = other_names++; while (*other_names != '|' && *other_names != '\0') other_names++; if (*other_names != '\0') *(other_names++) = '\0'; if (strlen(ptr) > sizeof(linkname) - (2 + LEAF_LEN)) { _nc_warning("terminal alias %s too long.", ptr); continue; } if (strchr(ptr, '/') != 0) { _nc_warning("cannot link alias %s.", ptr); continue; } check_writeable(ptr[0]); _nc_SPRINTF(linkname, _nc_SLIMIT(sizeof(linkname)) LEAF_FMT "/%s", ptr[0], ptr); if (strcmp(filename, linkname) == 0) { _nc_warning("self-synonym ignored"); } else if (stat(linkname, &statbuf) >= 0 && statbuf.st_mtime < start_time) { _nc_warning("alias %s multiply defined.", ptr); } else if (_nc_access(linkname, W_OK) == 0) #if HAVE_LINK { int code; #if USE_SYMLINKS if (first_name[0] == linkname[0]) strncpy(symlinkname, first_name, sizeof(symlinkname) - 1); else { _nc_STRCPY(symlinkname, "../", sizeof(suymlinkname)); strncat(symlinkname, filename, sizeof(symlinkname) - 4); } symlinkname[sizeof(symlinkname) - 1] = '\0'; #endif /* USE_SYMLINKS */ #if HAVE_REMOVE code = remove(linkname); #else code = unlink(linkname); #endif if (code != 0 && errno == ENOENT) code = 0; #if USE_SYMLINKS if (symlink(symlinkname, linkname) < 0) #else if (link(filename, linkname) < 0) #endif /* USE_SYMLINKS */ { /* * If there wasn't anything there, and we cannot * link to the target because it is the same as the * target, then the source must be on a filesystem * that uses caseless filenames, such as Win32, etc. */ if (code == 0 && errno == EEXIST) _nc_warning("can't link %s to %s", filename, linkname); else if (code == 0 && (errno == EPERM || errno == ENOENT)) write_file(linkname, tp); else { #if MIXEDCASE_FILENAMES _nc_syserr_abort("can't link %s to %s", filename, linkname); #else _nc_warning("can't link %s to %s (errno=%d)", filename, linkname, errno); #endif } } else { DEBUG(1, ("Linked %s", linkname)); } } #else /* just make copies */ write_file(linkname, tp); #endif /* HAVE_LINK */ } #endif /* USE_HASHED_DB */ } static size_t fake_write(char *dst, unsigned *offset, size_t limit, char *src, size_t want, size_t size) { size_t have = (limit - *offset); want *= size; if (have > 0) { if (want > have) want = have; memcpy(dst + *offset, src, want); *offset += (unsigned) want; } else { want = 0; } return (want / size); } #define Write(buf, size, count) fake_write(buffer, offset, (size_t) limit, (char *) buf, (size_t) count, (size_t) size) #undef LITTLE_ENDIAN /* BSD/OS defines this as a feature macro */ #define HI(x) ((x) / 256) #define LO(x) ((x) % 256) #define LITTLE_ENDIAN(p, x) (p)[0] = (unsigned char)LO(x), \ (p)[1] = (unsigned char)HI(x) #define WRITE_STRING(str) (Write(str, sizeof(char), strlen(str) + 1) == strlen(str) + 1) static int compute_offsets(char **Strings, size_t strmax, short *offsets) { int nextfree = 0; size_t i; for (i = 0; i < strmax; i++) { if (Strings[i] == ABSENT_STRING) { offsets[i] = -1; } else if (Strings[i] == CANCELLED_STRING) { offsets[i] = -2; } else { offsets[i] = (short) nextfree; nextfree += (int) strlen(Strings[i]) + 1; TRACE_OUT(("put Strings[%d]=%s(%d)", (int) i, _nc_visbuf(Strings[i]), (int) nextfree)); } } return nextfree; } static void convert_shorts(unsigned char *buf, short *Numbers, size_t count) { size_t i; for (i = 0; i < count; i++) { if (Numbers[i] == ABSENT_NUMERIC) { /* HI/LO won't work */ buf[2 * i] = buf[2 * i + 1] = 0377; } else if (Numbers[i] == CANCELLED_NUMERIC) { /* HI/LO won't work */ buf[2 * i] = 0376; buf[2 * i + 1] = 0377; } else { LITTLE_ENDIAN(buf + 2 * i, Numbers[i]); TRACE_OUT(("put Numbers[%u]=%d", (unsigned) i, Numbers[i])); } } } #define even_boundary(value) \ ((value) % 2 != 0 && Write(&zero, sizeof(char), 1) != 1) #if NCURSES_XNAMES static unsigned extended_Booleans(TERMTYPE *tp) { unsigned result = 0; unsigned i; for (i = 0; i < tp->ext_Booleans; ++i) { if (tp->Booleans[BOOLCOUNT + i] == TRUE) result = (i + 1); } return result; } static unsigned extended_Numbers(TERMTYPE *tp) { unsigned result = 0; unsigned i; for (i = 0; i < tp->ext_Numbers; ++i) { if (tp->Numbers[NUMCOUNT + i] != ABSENT_NUMERIC) result = (i + 1); } return result; } static unsigned extended_Strings(TERMTYPE *tp) { unsigned short result = 0; unsigned short i; for (i = 0; i < tp->ext_Strings; ++i) { if (tp->Strings[STRCOUNT + i] != ABSENT_STRING) result = (unsigned short) (i + 1); } return result; } /* * _nc_align_termtype() will extend entries that are referenced in a use= * clause - discard the unneeded data. */ static bool extended_object(TERMTYPE *tp) { bool result = FALSE; if (_nc_user_definable) { result = ((extended_Booleans(tp) + extended_Numbers(tp) + extended_Strings(tp)) != 0); } return result; } #endif NCURSES_EXPORT(int) _nc_write_object(TERMTYPE *tp, char *buffer, unsigned *offset, unsigned limit) { char *namelist; size_t namelen, boolmax, nummax, strmax; char zero = '\0'; size_t i; int nextfree; short offsets[MAX_ENTRY_SIZE / 2]; unsigned char buf[MAX_ENTRY_SIZE]; unsigned last_bool = BOOLWRITE; unsigned last_num = NUMWRITE; unsigned last_str = STRWRITE; #if NCURSES_XNAMES /* * Normally we limit the list of values to exclude the "obsolete" * capabilities. However, if we are accepting extended names, add * these as well, since they are used for supporting translation * to/from termcap. */ if (_nc_user_definable) { last_bool = BOOLCOUNT; last_num = NUMCOUNT; last_str = STRCOUNT; } #endif namelist = tp->term_names; namelen = strlen(namelist) + 1; boolmax = 0; for (i = 0; i < last_bool; i++) { if (tp->Booleans[i] == TRUE) boolmax = i + 1; } nummax = 0; for (i = 0; i < last_num; i++) { if (tp->Numbers[i] != ABSENT_NUMERIC) nummax = i + 1; } strmax = 0; for (i = 0; i < last_str; i++) { if (tp->Strings[i] != ABSENT_STRING) strmax = i + 1; } nextfree = compute_offsets(tp->Strings, strmax, offsets); /* fill in the header */ LITTLE_ENDIAN(buf, MAGIC); LITTLE_ENDIAN(buf + 2, min(namelen, MAX_NAME_SIZE + 1)); LITTLE_ENDIAN(buf + 4, boolmax); LITTLE_ENDIAN(buf + 6, nummax); LITTLE_ENDIAN(buf + 8, strmax); LITTLE_ENDIAN(buf + 10, nextfree); /* write out the header */ TRACE_OUT(("Header of %s @%d", namelist, *offset)); if (Write(buf, 12, 1) != 1 || Write(namelist, sizeof(char), namelen) != namelen) return (ERR); for (i = 0; i < boolmax; i++) if (tp->Booleans[i] == TRUE) buf[i] = TRUE; else buf[i] = FALSE; if (Write(buf, sizeof(char), boolmax) != boolmax) return (ERR); if (even_boundary(namelen + boolmax)) return (ERR); TRACE_OUT(("Numerics begin at %04x", *offset)); /* the numerics */ convert_shorts(buf, tp->Numbers, nummax); if (Write(buf, 2, nummax) != nummax) return (ERR); TRACE_OUT(("String offsets begin at %04x", *offset)); /* the string offsets */ convert_shorts(buf, offsets, strmax); if (Write(buf, 2, strmax) != strmax) return (ERR); TRACE_OUT(("String table begins at %04x", *offset)); /* the strings */ for (i = 0; i < strmax; i++) if (VALID_STRING(tp->Strings[i])) if (!WRITE_STRING(tp->Strings[i])) return (ERR); #if NCURSES_XNAMES if (extended_object(tp)) { unsigned extcnt = (unsigned) NUM_EXT_NAMES(tp); if (even_boundary(nextfree)) return (ERR); nextfree = compute_offsets(tp->Strings + STRCOUNT, (size_t) tp->ext_Strings, offsets); TRACE_OUT(("after extended string capabilities, nextfree=%d", nextfree)); if (tp->ext_Strings >= SIZEOF(offsets)) return (ERR); nextfree += compute_offsets(tp->ext_Names, (size_t) extcnt, offsets + tp->ext_Strings); TRACE_OUT(("after extended capnames, nextfree=%d", nextfree)); strmax = tp->ext_Strings + extcnt; /* * Write the extended header */ LITTLE_ENDIAN(buf + 0, tp->ext_Booleans); LITTLE_ENDIAN(buf + 2, tp->ext_Numbers); LITTLE_ENDIAN(buf + 4, tp->ext_Strings); LITTLE_ENDIAN(buf + 6, strmax); LITTLE_ENDIAN(buf + 8, nextfree); TRACE_OUT(("WRITE extended-header @%d", *offset)); if (Write(buf, 10, 1) != 1) return (ERR); TRACE_OUT(("WRITE %d booleans @%d", tp->ext_Booleans, *offset)); if (tp->ext_Booleans && Write(tp->Booleans + BOOLCOUNT, sizeof(char), tp->ext_Booleans) != tp->ext_Booleans) return (ERR); if (even_boundary(tp->ext_Booleans)) return (ERR); TRACE_OUT(("WRITE %d numbers @%d", tp->ext_Numbers, *offset)); if (tp->ext_Numbers) { convert_shorts(buf, tp->Numbers + NUMCOUNT, (size_t) tp->ext_Numbers); if (Write(buf, 2, tp->ext_Numbers) != tp->ext_Numbers) return (ERR); } /* * Convert the offsets for the ext_Strings and ext_Names tables, * in that order. */ convert_shorts(buf, offsets, strmax); TRACE_OUT(("WRITE offsets @%d", *offset)); if (Write(buf, 2, strmax) != strmax) return (ERR); /* * Write the string table after the offset tables so we do not * have to do anything about alignment. */ for (i = 0; i < tp->ext_Strings; i++) { if (VALID_STRING(tp->Strings[i + STRCOUNT])) { TRACE_OUT(("WRITE ext_Strings[%d]=%s", (int) i, _nc_visbuf(tp->Strings[i + STRCOUNT]))); if (!WRITE_STRING(tp->Strings[i + STRCOUNT])) return (ERR); } } /* * Write the extended names */ for (i = 0; i < extcnt; i++) { TRACE_OUT(("WRITE ext_Names[%d]=%s", (int) i, tp->ext_Names[i])); if (!WRITE_STRING(tp->ext_Names[i])) return (ERR); } } #endif /* NCURSES_XNAMES */ total_written++; return (OK); } /* * Returns the total number of entries written by this process */ NCURSES_EXPORT(int) _nc_tic_written(void) { return total_written; } ncurses-6.0-20160213/ncurses/llib-ltict0000644000175100001440000001247612563707075016146 0ustar tomusers/**************************************************************************** * Copyright (c) 2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2013-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tinfo/alloc_entry.c */ #include #undef _nc_init_entry void _nc_init_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_copy_entry ENTRY *_nc_copy_entry( ENTRY *oldp) { return(*(ENTRY **)0); } #undef _nc_save_str char *_nc_save_str( const char *const string) { return(*(char **)0); } #undef _nc_wrap_entry void _nc_wrap_entry( ENTRY *const ep, NCURSES_BOOL copy_strings) { /* void */ } #undef _nc_merge_entry void _nc_merge_entry( TERMTYPE *const to, TERMTYPE *const from) { /* void */ } /* ./tinfo/captoinfo.c */ #undef _nc_captoinfo char *_nc_captoinfo( const char *cap, const char *s, int const parameterized) { return(*(char **)0); } #undef _nc_infotocap char *_nc_infotocap( const char *cap, const char *str, int const parameterized) { return(*(char **)0); } /* ./tinfo/comp_expand.c */ #undef _nc_tic_expand char *_nc_tic_expand( const char *srcp, NCURSES_BOOL tic_format, int numbers) { return(*(char **)0); } /* ./tinfo/comp_parse.c */ #undef _nc_check_termtype2 void (*_nc_check_termtype2)( TERMTYPE *p1, NCURSES_BOOL p2); #undef _nc_check_termtype void (*_nc_check_termtype)( TERMTYPE *p1); #undef _nc_entry_match NCURSES_BOOL _nc_entry_match( char *n1, char *n2) { return(*(NCURSES_BOOL *)0); } #undef _nc_read_entry_source void _nc_read_entry_source( FILE *fp, char *buf, int literal, NCURSES_BOOL silent, NCURSES_BOOL (*hook)( ENTRY *p1)) { /* void */ } #undef _nc_resolve_uses2 int _nc_resolve_uses2( NCURSES_BOOL fullresolve, NCURSES_BOOL literal) { return(*(int *)0); } #undef _nc_resolve_uses int _nc_resolve_uses( NCURSES_BOOL fullresolve) { return(*(int *)0); } /* ./tinfo/comp_scan.c */ #undef _nc_syntax int _nc_syntax; #undef _nc_strict_bsd int _nc_strict_bsd; #undef _nc_curr_file_pos long _nc_curr_file_pos; #undef _nc_comment_start long _nc_comment_start; #undef _nc_comment_end long _nc_comment_end; #undef _nc_start_line long _nc_start_line; #undef _nc_curr_token struct token _nc_curr_token; #undef _nc_disable_period NCURSES_BOOL _nc_disable_period; #undef _nc_reset_input void _nc_reset_input( FILE *fp, char *buf) { /* void */ } #undef _nc_get_token int _nc_get_token( NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_trans_string int _nc_trans_string( char *ptr, char *last) { return(*(int *)0); } #undef _nc_push_token void _nc_push_token( int tokclass) { /* void */ } #undef _nc_panic_mode void _nc_panic_mode( char ch) { /* void */ } /* ./tinfo/parse_entry.c */ #undef _nc_parse_entry int _nc_parse_entry( struct entry *entryp, int literal, NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_capcmp int _nc_capcmp( const char *s, const char *t) { return(*(int *)0); } /* ./tinfo/write_entry.c */ #undef _nc_set_writedir void _nc_set_writedir( const char *dir) { /* void */ } #undef _nc_write_entry void _nc_write_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_tic_written int _nc_tic_written(void) { return(*(int *)0); } ncurses-6.0-20160213/ncurses/llib-ltic0000644000175100001440000001247612563706665015766 0ustar tomusers/**************************************************************************** * Copyright (c) 2012,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2012-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tinfo/alloc_entry.c */ #include #undef _nc_init_entry void _nc_init_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_copy_entry ENTRY *_nc_copy_entry( ENTRY *oldp) { return(*(ENTRY **)0); } #undef _nc_save_str char *_nc_save_str( const char *const string) { return(*(char **)0); } #undef _nc_wrap_entry void _nc_wrap_entry( ENTRY *const ep, NCURSES_BOOL copy_strings) { /* void */ } #undef _nc_merge_entry void _nc_merge_entry( TERMTYPE *const to, TERMTYPE *const from) { /* void */ } /* ./tinfo/captoinfo.c */ #undef _nc_captoinfo char *_nc_captoinfo( const char *cap, const char *s, int const parameterized) { return(*(char **)0); } #undef _nc_infotocap char *_nc_infotocap( const char *cap, const char *str, int const parameterized) { return(*(char **)0); } /* ./tinfo/comp_expand.c */ #undef _nc_tic_expand char *_nc_tic_expand( const char *srcp, NCURSES_BOOL tic_format, int numbers) { return(*(char **)0); } /* ./tinfo/comp_parse.c */ #undef _nc_check_termtype2 void (*_nc_check_termtype2)( TERMTYPE *p1, NCURSES_BOOL p2); #undef _nc_check_termtype void (*_nc_check_termtype)( TERMTYPE *p1); #undef _nc_entry_match NCURSES_BOOL _nc_entry_match( char *n1, char *n2) { return(*(NCURSES_BOOL *)0); } #undef _nc_read_entry_source void _nc_read_entry_source( FILE *fp, char *buf, int literal, NCURSES_BOOL silent, NCURSES_BOOL (*hook)( ENTRY *p1)) { /* void */ } #undef _nc_resolve_uses2 int _nc_resolve_uses2( NCURSES_BOOL fullresolve, NCURSES_BOOL literal) { return(*(int *)0); } #undef _nc_resolve_uses int _nc_resolve_uses( NCURSES_BOOL fullresolve) { return(*(int *)0); } /* ./tinfo/comp_scan.c */ #undef _nc_syntax int _nc_syntax; #undef _nc_strict_bsd int _nc_strict_bsd; #undef _nc_curr_file_pos long _nc_curr_file_pos; #undef _nc_comment_start long _nc_comment_start; #undef _nc_comment_end long _nc_comment_end; #undef _nc_start_line long _nc_start_line; #undef _nc_curr_token struct token _nc_curr_token; #undef _nc_disable_period NCURSES_BOOL _nc_disable_period; #undef _nc_reset_input void _nc_reset_input( FILE *fp, char *buf) { /* void */ } #undef _nc_get_token int _nc_get_token( NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_trans_string int _nc_trans_string( char *ptr, char *last) { return(*(int *)0); } #undef _nc_push_token void _nc_push_token( int tokclass) { /* void */ } #undef _nc_panic_mode void _nc_panic_mode( char ch) { /* void */ } /* ./tinfo/parse_entry.c */ #undef _nc_parse_entry int _nc_parse_entry( struct entry *entryp, int literal, NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_capcmp int _nc_capcmp( const char *s, const char *t) { return(*(int *)0); } /* ./tinfo/write_entry.c */ #undef _nc_set_writedir void _nc_set_writedir( const char *dir) { /* void */ } #undef _nc_write_entry void _nc_write_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_tic_written int _nc_tic_written(void) { return(*(int *)0); } ncurses-6.0-20160213/ncurses/SigAction.h0000644000175100001440000000753310275214014016173 0ustar tomusers/**************************************************************************** * Copyright (c) 1998,2000 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* * $Id: SigAction.h,v 1.8 2005/08/06 20:05:32 tom Exp $ * * This file exists to handle non-POSIX systems which don't have , * and usually no sigaction() nor */ #ifndef _SIGACTION_H #define _SIGACTION_H #ifndef HAVE_SIGACTION #define HAVE_SIGACTION 0 #endif #ifndef HAVE_SIGVEC #define HAVE_SIGVEC 0 #endif #if HAVE_SIGACTION #if !HAVE_TYPE_SIGACTION typedef struct sigaction sigaction_t; #endif #else /* !HAVE_SIGACTION */ #if HAVE_SIGVEC #undef SIG_BLOCK #define SIG_BLOCK 00 #undef SIG_UNBLOCK #define SIG_UNBLOCK 01 #undef SIG_SETMASK #define SIG_SETMASK 02 /* * is in the Linux 1.2.8 + gcc 2.7.0 configuration, * and is useful for testing this header file. */ #if HAVE_BSD_SIGNAL_H #include #endif typedef struct sigvec sigaction_t; #define sigset_t _nc_sigset_t typedef unsigned long sigset_t; #undef sa_mask #define sa_mask sv_mask #undef sa_handler #define sa_handler sv_handler #undef sa_flags #define sa_flags sv_flags #undef sigaction #define sigaction _nc_sigaction #undef sigprocmask #define sigprocmask _nc_sigprocmask #undef sigemptyset #define sigemptyset _nc_sigemptyset #undef sigsuspend #define sigsuspend _nc_sigsuspend #undef sigdelset #define sigdelset _nc_sigdelset #undef sigaddset #define sigaddset _nc_sigaddset /* tty/lib_tstp.c is the only user */ #include #endif /* HAVE_SIGVEC */ #endif /* HAVE_SIGACTION */ #endif /* !defined(_SIGACTION_H) */ ncurses-6.0-20160213/ncurses/trace/0000755000175100001440000000000012646532337015247 5ustar tomusersncurses-6.0-20160213/ncurses/trace/trace_xnames.c0000644000175100001440000000666011326634377020075 0ustar tomusers/**************************************************************************** * Copyright (c) 1999-2000,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1999 * ****************************************************************************/ /* * trace_xnames.c - Tracing/Debugging buffers (TERMTYPE extended names) */ #include MODULE_ID("$Id: trace_xnames.c,v 1.6 2010/01/23 17:59:27 tom Exp $") NCURSES_EXPORT(void) _nc_trace_xnames(TERMTYPE *tp GCC_UNUSED) { #ifdef TRACE #if NCURSES_XNAMES int limit = tp->ext_Booleans + tp->ext_Numbers + tp->ext_Strings; int n, m; if (limit) { int begin_num = tp->ext_Booleans; int begin_str = tp->ext_Booleans + tp->ext_Numbers; _tracef("extended names (%s) %d = %d+%d+%d of %d+%d+%d", tp->term_names, limit, tp->ext_Booleans, tp->ext_Numbers, tp->ext_Strings, tp->num_Booleans, tp->num_Numbers, tp->num_Strings); for (n = 0; n < limit; n++) { if ((m = n - begin_str) >= 0) { _tracef("[%d] %s = %s", n, tp->ext_Names[n], _nc_visbuf(tp->Strings[tp->num_Strings + m - tp->ext_Strings])); } else if ((m = n - begin_num) >= 0) { _tracef("[%d] %s = %d (num)", n, tp->ext_Names[n], tp->Numbers[tp->num_Numbers + m - tp->ext_Numbers]); } else { _tracef("[%d] %s = %d (bool)", n, tp->ext_Names[n], tp->Booleans[tp->num_Booleans + n - tp->ext_Booleans]); } } } #endif #endif } ncurses-6.0-20160213/ncurses/trace/visbuf.c0000644000175100001440000002301512644567234016714 0ustar tomusers/**************************************************************************** * Copyright (c) 2001-2014,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-on * * and: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* * visbuf.c - Tracing/Debugging support routines */ #define NEED_NCURSES_CH_T #include #include #include MODULE_ID("$Id: visbuf.c,v 1.46 2016/01/10 23:51:56 tom Exp $") #define NUM_VISBUFS 4 #define NormalLen(len) (size_t) (((size_t)(len) + 1) * 4) #define WideLen(len) (size_t) (((size_t)(len) + 1) * 4 * (size_t) MB_CUR_MAX) #ifdef TRACE static const char d_quote[] = StringOf(D_QUOTE); static const char l_brace[] = StringOf(L_BRACE); static const char r_brace[] = StringOf(R_BRACE); #endif #if USE_STRING_HACKS && HAVE_SNPRINTF #define VisChar(tp, chr, limit) _nc_vischar(tp, chr, limit) #define LIMIT_ARG ,size_t limit #else #define VisChar(tp, chr, limit) _nc_vischar(tp, chr) #define LIMIT_ARG /* nothing */ #endif static char * _nc_vischar(char *tp, unsigned c LIMIT_ARG) { if (c == '"' || c == '\\') { *tp++ = '\\'; *tp++ = (char) c; } else if (is7bits((int) c) && (isgraph((int) c) || c == ' ')) { *tp++ = (char) c; } else if (c == '\n') { *tp++ = '\\'; *tp++ = 'n'; } else if (c == '\r') { *tp++ = '\\'; *tp++ = 'r'; } else if (c == '\b') { *tp++ = '\\'; *tp++ = 'b'; } else if (c == '\033') { *tp++ = '\\'; *tp++ = 'e'; } else if (UChar(c) == 0x7f) { *tp++ = '\\'; *tp++ = '^'; *tp++ = '?'; } else if (is7bits(c) && iscntrl(UChar(c))) { *tp++ = '\\'; *tp++ = '^'; *tp++ = (char) ('@' + c); } else { _nc_SPRINTF(tp, _nc_SLIMIT(limit) "\\%03lo", (unsigned long) ChCharOf(c)); tp += strlen(tp); } *tp = 0; return tp; } static const char * _nc_visbuf2n(int bufnum, const char *buf, int len) { const char *vbuf = 0; char *tp; int c; int count; if (buf == 0) return ("(null)"); if (buf == CANCELLED_STRING) return ("(cancelled)"); if (len < 0) len = (int) strlen(buf); count = len; #ifdef TRACE vbuf = tp = _nc_trace_buf(bufnum, NormalLen(len)); #else { static char *mybuf[NUM_VISBUFS]; if (bufnum < 0) { for (c = 0; c < NUM_VISBUFS; ++c) { FreeAndNull(mybuf[c]); } tp = 0; } else { mybuf[bufnum] = typeRealloc(char, NormalLen(len), mybuf[bufnum]); vbuf = tp = mybuf[bufnum]; } } #endif if (tp != 0) { *tp++ = D_QUOTE; while ((--count >= 0) && (c = *buf++) != '\0') { tp = VisChar(tp, UChar(c), NormalLen(len)); } *tp++ = D_QUOTE; *tp = '\0'; } else { vbuf = ("(_nc_visbuf2n failed)"); } return (vbuf); } NCURSES_EXPORT(const char *) _nc_visbuf2(int bufnum, const char *buf) { return _nc_visbuf2n(bufnum, buf, -1); } NCURSES_EXPORT(const char *) _nc_visbuf(const char *buf) { return _nc_visbuf2(0, buf); } NCURSES_EXPORT(const char *) _nc_visbufn(const char *buf, int len) { return _nc_visbuf2n(0, buf, len); } #ifdef TRACE #if USE_WIDEC_SUPPORT #if defined(USE_TERMLIB) #define _nc_wchstrlen _my_wchstrlen static int _nc_wchstrlen(const cchar_t *s) { int result = 0; while (CharOf(s[result]) != L'\0') { result++; } return result; } #endif static const char * _nc_viswbuf2n(int bufnum, const wchar_t *buf, int len) { const char *vbuf; char *tp; wchar_t c; int count; if (buf == 0) return ("(null)"); if (len < 0) len = (int) wcslen(buf); count = len; #ifdef TRACE vbuf = tp = _nc_trace_buf(bufnum, WideLen(len)); #else { static char *mybuf[NUM_VISBUFS]; mybuf[bufnum] = typeRealloc(char, WideLen(len), mybuf[bufnum]); vbuf = tp = mybuf[bufnum]; } #endif if (tp != 0) { *tp++ = D_QUOTE; while ((--count >= 0) && (c = *buf++) != '\0') { char temp[CCHARW_MAX + 80]; int j = wctomb(temp, c), k; if (j <= 0) { _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "\\u%08X", (unsigned) c); j = (int) strlen(temp); } for (k = 0; k < j; ++k) { tp = VisChar(tp, UChar(temp[k]), WideLen(len)); } } *tp++ = D_QUOTE; *tp = '\0'; } else { vbuf = ("(_nc_viswbuf2n failed)"); } return (vbuf); } NCURSES_EXPORT(const char *) _nc_viswbuf2(int bufnum, const wchar_t *buf) { return _nc_viswbuf2n(bufnum, buf, -1); } NCURSES_EXPORT(const char *) _nc_viswbuf(const wchar_t *buf) { return _nc_viswbuf2(0, buf); } NCURSES_EXPORT(const char *) _nc_viswbufn(const wchar_t *buf, int len) { return _nc_viswbuf2n(0, buf, len); } /* this special case is used for wget_wstr() */ NCURSES_EXPORT(const char *) _nc_viswibuf(const wint_t *buf) { static wchar_t *mybuf; static unsigned mylen; unsigned n; for (n = 0; buf[n] != 0; ++n) { ; /* empty */ } if (mylen < ++n) { mylen = n + 80; if (mybuf != 0) mybuf = typeRealloc(wchar_t, mylen, mybuf); else mybuf = typeMalloc(wchar_t, mylen); } if (mybuf != 0) { for (n = 0; buf[n] != 0; ++n) { mybuf[n] = (wchar_t) buf[n]; } mybuf[n] = L'\0'; } return _nc_viswbuf2(0, mybuf); } #endif /* USE_WIDEC_SUPPORT */ /* use these functions for displaying parts of a line within a window */ NCURSES_EXPORT(const char *) _nc_viscbuf2(int bufnum, const NCURSES_CH_T * buf, int len) { char *result = _nc_trace_buf(bufnum, (size_t) BUFSIZ); int first; const char *found; if (result != 0) { #if USE_WIDEC_SUPPORT if (len < 0) len = _nc_wchstrlen(buf); #endif /* USE_WIDEC_SUPPORT */ /* * Display one or more strings followed by attributes. */ first = 0; while (first < len) { attr_t attr = AttrOf(buf[first]); int last = len - 1; int j; for (j = first + 1; j < len; ++j) { if (!SameAttrOf(buf[j], buf[first])) { last = j - 1; break; } } (void) _nc_trace_bufcat(bufnum, l_brace); (void) _nc_trace_bufcat(bufnum, d_quote); for (j = first; j <= last; ++j) { found = _nc_altcharset_name(attr, (chtype) CharOf(buf[j])); if (found != 0) { (void) _nc_trace_bufcat(bufnum, found); attr &= ~A_ALTCHARSET; } else #if USE_WIDEC_SUPPORT if (!isWidecExt(buf[j])) { PUTC_DATA; for (PUTC_i = 0; PUTC_i < CCHARW_MAX; ++PUTC_i) { int k; char temp[80]; PUTC_ch = buf[j].chars[PUTC_i]; if (PUTC_ch == L'\0') { if (PUTC_i == 0) (void) _nc_trace_bufcat(bufnum, "\\000"); break; } PUTC_INIT; PUTC_n = (int) wcrtomb(PUTC_buf, buf[j].chars[PUTC_i], &PUT_st); if (PUTC_n <= 0 || buf[j].chars[PUTC_i] > 255) { sprintf(temp, "{%d:\\u%x}", wcwidth(buf[j].chars[PUTC_i]), buf[j].chars[PUTC_i]); (void) _nc_trace_bufcat(bufnum, temp); break; } for (k = 0; k < PUTC_n; k++) { VisChar(temp, UChar(PUTC_buf[k]), sizeof(temp)); (void) _nc_trace_bufcat(bufnum, temp); } } } #else { char temp[80]; VisChar(temp, UChar(buf[j]), sizeof(temp)); (void) _nc_trace_bufcat(bufnum, temp); } #endif /* USE_WIDEC_SUPPORT */ } (void) _nc_trace_bufcat(bufnum, d_quote); if (attr != A_NORMAL) { (void) _nc_trace_bufcat(bufnum, " | "); (void) _nc_trace_bufcat(bufnum, _traceattr2(bufnum + 20, attr)); } result = _nc_trace_bufcat(bufnum, r_brace); first = last + 1; } } return result; } NCURSES_EXPORT(const char *) _nc_viscbuf(const NCURSES_CH_T * buf, int len) { return _nc_viscbuf2(0, buf, len); } #endif /* TRACE */ ncurses-6.0-20160213/ncurses/trace/lib_trace.c0000644000175100001440000002341412166071421017330 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer * ****************************************************************************/ /* * lib_trace.c - Tracing/Debugging routines * * The _tracef() function is originally from pcurses (by Pavel Curtis) in 1982. * pcurses allowed one to enable/disable tracing using traceon() and traceoff() * functions. ncurses provides a trace() function which allows one to * selectively enable or disable several tracing features. */ #include #include #include MODULE_ID("$Id: lib_trace.c,v 1.82 2013/07/06 19:42:09 tom Exp $") NCURSES_EXPORT_VAR(unsigned) _nc_tracing = 0; /* always define this */ #ifdef TRACE #if USE_REENTRANT NCURSES_EXPORT(const char *) NCURSES_PUBLIC_VAR(_nc_tputs_trace) (void) { return CURRENT_SCREEN ? CURRENT_SCREEN->_tputs_trace : _nc_prescreen._tputs_trace; } NCURSES_EXPORT(long) NCURSES_PUBLIC_VAR(_nc_outchars) (void) { return CURRENT_SCREEN ? CURRENT_SCREEN->_outchars : _nc_prescreen._outchars; } NCURSES_EXPORT(void) _nc_set_tputs_trace(const char *s) { if (CURRENT_SCREEN) CURRENT_SCREEN->_tputs_trace = s; else _nc_prescreen._tputs_trace = s; } NCURSES_EXPORT(void) _nc_count_outchars(long increment) { if (CURRENT_SCREEN) CURRENT_SCREEN->_outchars += increment; else _nc_prescreen._outchars += increment; } #else NCURSES_EXPORT_VAR(const char *) _nc_tputs_trace = ""; NCURSES_EXPORT_VAR(long) _nc_outchars = 0; #endif #define TraceFP _nc_globals.trace_fp #define TracePath _nc_globals.trace_fname #define TraceLevel _nc_globals.trace_level NCURSES_EXPORT(void) trace(const unsigned int tracelevel) { if ((TraceFP == 0) && tracelevel) { const char *mode = _nc_globals.init_trace ? "ab" : "wb"; if (TracePath[0] == '\0') { size_t size = sizeof(TracePath) - 12; if (getcwd(TracePath, size) == 0) { perror("curses: Can't get working directory"); exit(EXIT_FAILURE); } TracePath[size] = '\0'; assert(strlen(TracePath) <= size); _nc_STRCAT(TracePath, "/trace", sizeof(TracePath)); if (_nc_is_dir_path(TracePath)) { _nc_STRCAT(TracePath, ".log", sizeof(TracePath)); } } _nc_globals.init_trace = TRUE; _nc_tracing = tracelevel; if (_nc_access(TracePath, W_OK) < 0 || (TraceFP = fopen(TracePath, mode)) == 0) { perror("curses: Can't open 'trace' file"); exit(EXIT_FAILURE); } /* Try to set line-buffered mode, or (failing that) unbuffered, * so that the trace-output gets flushed automatically at the * end of each line. This is useful in case the program dies. */ #if HAVE_SETVBUF /* ANSI */ (void) setvbuf(TraceFP, (char *) 0, _IOLBF, (size_t) 0); #elif HAVE_SETBUF /* POSIX */ (void) setbuffer(TraceFP, (char *) 0); #endif _tracef("TRACING NCURSES version %s.%d (tracelevel=%#x)", NCURSES_VERSION, NCURSES_VERSION_PATCH, tracelevel); } else if (tracelevel == 0) { if (TraceFP != 0) { fclose(TraceFP); TraceFP = 0; } _nc_tracing = tracelevel; } else if (_nc_tracing != tracelevel) { _nc_tracing = tracelevel; _tracef("tracelevel=%#x", tracelevel); } } static void _nc_va_tracef(const char *fmt, va_list ap) { static const char Called[] = T_CALLED(""); static const char Return[] = T_RETURN(""); bool before = FALSE; bool after = FALSE; unsigned doit = _nc_tracing; int save_err = errno; if (strlen(fmt) >= sizeof(Called) - 1) { if (!strncmp(fmt, Called, sizeof(Called) - 1)) { before = TRUE; TraceLevel++; } else if (!strncmp(fmt, Return, sizeof(Return) - 1)) { after = TRUE; } if (before || after) { if ((TraceLevel <= 1) || (doit & TRACE_ICALLS) != 0) doit &= (TRACE_CALLS | TRACE_CCALLS); else doit = 0; } } if (doit != 0) { if (TraceFP == 0) TraceFP = stderr; #ifdef USE_PTHREADS /* * TRACE_ICALLS is "really" needed to show normal use with threaded * applications, since anything can be running during a napms(), * making it appear in the hierarchical trace as it other functions * are being called. * * Rather than add the complication of a per-thread stack, just * show the thread-id in each line of the trace. */ # if USE_WEAK_SYMBOLS if ((pthread_self)) # endif #ifdef __MINGW32__ fprintf(TraceFP, "%#lx:", (long) (intptr_t) pthread_self().p); #else fprintf(TraceFP, "%#lx:", (long) (intptr_t) pthread_self()); #endif #endif if (before || after) { int n; for (n = 1; n < TraceLevel; n++) fputs("+ ", TraceFP); } vfprintf(TraceFP, fmt, ap); fputc('\n', TraceFP); fflush(TraceFP); } if (after && TraceLevel) TraceLevel--; errno = save_err; } NCURSES_EXPORT(void) _tracef(const char *fmt,...) { va_list ap; va_start(ap, fmt); _nc_va_tracef(fmt, ap); va_end(ap); } /* Trace 'bool' return-values */ NCURSES_EXPORT(NCURSES_BOOL) _nc_retrace_bool(int code) { T((T_RETURN("%s"), code ? "TRUE" : "FALSE")); return code; } /* Trace 'char' return-values */ NCURSES_EXPORT(char) _nc_retrace_char(int code) { T((T_RETURN("%c"), code)); return (char) code; } /* Trace 'int' return-values */ NCURSES_EXPORT(int) _nc_retrace_int(int code) { T((T_RETURN("%d"), code)); return code; } /* Trace 'unsigned' return-values */ NCURSES_EXPORT(unsigned) _nc_retrace_unsigned(unsigned code) { T((T_RETURN("%#x"), code)); return code; } /* Trace 'char*' return-values */ NCURSES_EXPORT(char *) _nc_retrace_ptr(char *code) { T((T_RETURN("%s"), _nc_visbuf(code))); return code; } /* Trace 'const char*' return-values */ NCURSES_EXPORT(const char *) _nc_retrace_cptr(const char *code) { T((T_RETURN("%s"), _nc_visbuf(code))); return code; } /* Trace 'NCURSES_CONST void*' return-values */ NCURSES_EXPORT(NCURSES_CONST void *) _nc_retrace_cvoid_ptr(NCURSES_CONST void *code) { T((T_RETURN("%p"), code)); return code; } /* Trace 'void*' return-values */ NCURSES_EXPORT(void *) _nc_retrace_void_ptr(void *code) { T((T_RETURN("%p"), code)); return code; } /* Trace 'SCREEN *' return-values */ NCURSES_EXPORT(SCREEN *) _nc_retrace_sp(SCREEN *code) { T((T_RETURN("%p"), (void *) code)); return code; } /* Trace 'WINDOW *' return-values */ NCURSES_EXPORT(WINDOW *) _nc_retrace_win(WINDOW *code) { T((T_RETURN("%p"), (void *) code)); return code; } #if USE_REENTRANT /* * Check if the given trace-mask is enabled. * * This function may be called from within one of the functions that fills * in parameters for _tracef(), but in that case we do not want to lock the * mutex, since it is already locked. */ NCURSES_EXPORT(int) _nc_use_tracef(unsigned mask) { bool result = FALSE; _nc_lock_global(tst_tracef); if (!_nc_globals.nested_tracef++) { if ((result = (_nc_tracing & (mask))) != 0 && _nc_try_global(tracef) == 0) { /* we will call _nc_locked_tracef(), no nesting so far */ } else { /* we will not call _nc_locked_tracef() */ _nc_globals.nested_tracef = 0; } } else { /* we may call _nc_locked_tracef(), but with nested_tracef > 0 */ result = (_nc_tracing & (mask)); } _nc_unlock_global(tst_tracef); return result; } /* * We call this if _nc_use_tracef() returns true, which means we must unlock * the tracef mutex. */ NCURSES_EXPORT(void) _nc_locked_tracef(const char *fmt,...) { va_list ap; va_start(ap, fmt); _nc_va_tracef(fmt, ap); va_end(ap); if (--(_nc_globals.nested_tracef) == 0) { _nc_unlock_global(tracef); } } #endif /* USE_REENTRANT */ #endif /* TRACE */ ncurses-6.0-20160213/ncurses/trace/lib_traceatr.c0000644000175100001440000002626312646532337020057 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas Dickey 1996-on * * and: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer * ****************************************************************************/ /* * lib_traceatr.c - Tracing/Debugging routines (attributes) */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_traceatr.c,v 1.85 2016/01/16 21:23:43 tom Exp $") #define COLOR_OF(c) ((c < 0) ? "default" : (c > 7 ? color_of(c) : colors[c].name)) #define TRACE_BUF_SIZE(num) (_nc_globals.tracebuf_ptr[num].size) #define COLOR_BUF_SIZE(num) (sizeof(my_buffer[num])) #ifdef TRACE static const char l_brace[] = StringOf(L_BRACE); static const char r_brace[] = StringOf(R_BRACE); #ifndef USE_TERMLIB #define my_buffer _nc_globals.traceatr_color_buf #define my_select _nc_globals.traceatr_color_sel #define my_cached _nc_globals.traceatr_color_last static char * color_of(int c) { if (c != my_cached) { my_cached = c; my_select = !my_select; if (c == COLOR_DEFAULT) _nc_STRCPY(my_buffer[my_select], "default", COLOR_BUF_SIZE(my_select)); else _nc_SPRINTF(my_buffer[my_select], _nc_SLIMIT(COLOR_BUF_SIZE(my_select)) "color%d", c); } return my_buffer[my_select]; } #undef my_buffer #undef my_select #endif /* !USE_TERMLIB */ NCURSES_EXPORT(char *) _traceattr2(int bufnum, chtype newmode) { #define DATA(name) { name, { #name } } static const struct { unsigned int val; const char name[14]; } names[] = { DATA(A_STANDOUT), DATA(A_UNDERLINE), DATA(A_REVERSE), DATA(A_BLINK), DATA(A_DIM), DATA(A_BOLD), DATA(A_ALTCHARSET), DATA(A_INVIS), DATA(A_PROTECT), DATA(A_CHARTEXT), DATA(A_NORMAL), DATA(A_COLOR), #if USE_ITALIC DATA(A_ITALIC), #endif } #ifndef USE_TERMLIB , colors[] = { DATA(COLOR_BLACK), DATA(COLOR_RED), DATA(COLOR_GREEN), DATA(COLOR_YELLOW), DATA(COLOR_BLUE), DATA(COLOR_MAGENTA), DATA(COLOR_CYAN), DATA(COLOR_WHITE), } #endif /* !USE_TERMLIB */ ; #undef DATA size_t n; char temp[80]; char *result = _nc_trace_buf(bufnum, (size_t) BUFSIZ); if (result != 0) { unsigned save_nc_tracing = _nc_tracing; _nc_tracing = 0; _nc_STRCPY(result, l_brace, TRACE_BUF_SIZE(bufnum)); for (n = 0; n < SIZEOF(names); n++) { if ((newmode & names[n].val) != 0) { if (result[1] != '\0') (void) _nc_trace_bufcat(bufnum, "|"); result = _nc_trace_bufcat(bufnum, names[n].name); if (names[n].val == A_COLOR) { short pairnum = (short) PairNumber(newmode); #ifdef USE_TERMLIB /* pair_content lives in libncurses */ _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "{%d}", pairnum); #else NCURSES_COLOR_T fg, bg; if (pair_content(pairnum, &fg, &bg) == OK) { _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "{%d = {%s, %s}}", pairnum, COLOR_OF(fg), COLOR_OF(bg)); } else { _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "{%d}", pairnum); } #endif result = _nc_trace_bufcat(bufnum, temp); } } } if (ChAttrOf(newmode) == A_NORMAL) { if (result != 0 && result[1] != '\0') (void) _nc_trace_bufcat(bufnum, "|"); (void) _nc_trace_bufcat(bufnum, "A_NORMAL"); } _nc_tracing = save_nc_tracing; result = _nc_trace_bufcat(bufnum, r_brace); } return result; } NCURSES_EXPORT(char *) _traceattr(attr_t newmode) { return _traceattr2(0, newmode); } /* Trace 'int' return-values */ NCURSES_EXPORT(int) _nc_retrace_int_attr_t(attr_t code) { T((T_RETURN("%s"), _traceattr(code))); return (int) code; } /* Trace 'attr_t' return-values */ NCURSES_EXPORT(attr_t) _nc_retrace_attr_t(attr_t code) { T((T_RETURN("%s"), _traceattr(code))); return code; } const char * _nc_altcharset_name(attr_t attr, chtype ch) { #define DATA(code, name) { code, { #name } } typedef struct { unsigned int val; const char name[13]; } ALT_NAMES; #if NCURSES_SP_FUNCS SCREEN *sp = CURRENT_SCREEN; #endif static const ALT_NAMES names[] = { DATA('l', ACS_ULCORNER), /* upper left corner */ DATA('m', ACS_LLCORNER), /* lower left corner */ DATA('k', ACS_URCORNER), /* upper right corner */ DATA('j', ACS_LRCORNER), /* lower right corner */ DATA('t', ACS_LTEE), /* tee pointing right */ DATA('u', ACS_RTEE), /* tee pointing left */ DATA('v', ACS_BTEE), /* tee pointing up */ DATA('w', ACS_TTEE), /* tee pointing down */ DATA('q', ACS_HLINE), /* horizontal line */ DATA('x', ACS_VLINE), /* vertical line */ DATA('n', ACS_PLUS), /* large plus or crossover */ DATA('o', ACS_S1), /* scan line 1 */ DATA('s', ACS_S9), /* scan line 9 */ DATA('`', ACS_DIAMOND), /* diamond */ DATA('a', ACS_CKBOARD), /* checker board (stipple) */ DATA('f', ACS_DEGREE), /* degree symbol */ DATA('g', ACS_PLMINUS), /* plus/minus */ DATA('~', ACS_BULLET), /* bullet */ DATA(',', ACS_LARROW), /* arrow pointing left */ DATA('+', ACS_RARROW), /* arrow pointing right */ DATA('.', ACS_DARROW), /* arrow pointing down */ DATA('-', ACS_UARROW), /* arrow pointing up */ DATA('h', ACS_BOARD), /* board of squares */ DATA('i', ACS_LANTERN), /* lantern symbol */ DATA('0', ACS_BLOCK), /* solid square block */ DATA('p', ACS_S3), /* scan line 3 */ DATA('r', ACS_S7), /* scan line 7 */ DATA('y', ACS_LEQUAL), /* less/equal */ DATA('z', ACS_GEQUAL), /* greater/equal */ DATA('{', ACS_PI), /* Pi */ DATA('|', ACS_NEQUAL), /* not equal */ DATA('}', ACS_STERLING), /* UK pound sign */ }; #undef DATA const char *result = 0; #if NCURSES_SP_FUNCS (void) sp; #endif if (SP_PARM != 0 && (attr & A_ALTCHARSET) && (acs_chars != 0)) { char *cp; char *found = 0; size_t n; for (cp = acs_chars; cp[0] && cp[1]; cp += 2) { if (ChCharOf(UChar(cp[1])) == ChCharOf(ch)) { found = cp; /* don't exit from loop - there may be redefinitions */ } } if (found != 0) { ch = ChCharOf(UChar(*found)); for (n = 0; n < SIZEOF(names); ++n) { if (names[n].val == ch) { result = names[n].name; break; } } } } return result; } NCURSES_EXPORT(char *) _tracechtype2(int bufnum, chtype ch) { const char *found; char *result = _nc_trace_buf(bufnum, (size_t) BUFSIZ); if (result != 0) { _nc_STRCPY(result, l_brace, TRACE_BUF_SIZE(bufnum)); if ((found = _nc_altcharset_name(ChAttrOf(ch), ch)) != 0) { (void) _nc_trace_bufcat(bufnum, found); } else (void) _nc_trace_bufcat(bufnum, _nc_tracechar(CURRENT_SCREEN, (int) ChCharOf(ch))); if (ChAttrOf(ch) != A_NORMAL) { (void) _nc_trace_bufcat(bufnum, " | "); (void) _nc_trace_bufcat(bufnum, _traceattr2(bufnum + 20, ChAttrOf(ch))); } result = _nc_trace_bufcat(bufnum, r_brace); } return result; } NCURSES_EXPORT(char *) _tracechtype(chtype ch) { return _tracechtype2(0, ch); } /* Trace 'chtype' return-values */ NCURSES_EXPORT(chtype) _nc_retrace_chtype(chtype code) { T((T_RETURN("%s"), _tracechtype(code))); return code; } #if USE_WIDEC_SUPPORT NCURSES_EXPORT(char *) _tracecchar_t2(int bufnum, const cchar_t *ch) { char *result = _nc_trace_buf(bufnum, (size_t) BUFSIZ); attr_t attr; const char *found; if (result != 0) { _nc_STRCPY(result, l_brace, TRACE_BUF_SIZE(bufnum)); if (ch != 0) { attr = AttrOfD(ch); if ((found = _nc_altcharset_name(attr, (chtype) CharOfD(ch))) != 0) { (void) _nc_trace_bufcat(bufnum, found); attr &= ~A_ALTCHARSET; } else if (isWidecExt(CHDEREF(ch))) { (void) _nc_trace_bufcat(bufnum, "{NAC}"); attr &= ~A_CHARTEXT; } else { PUTC_DATA; int n; (void) _nc_trace_bufcat(bufnum, "{ "); for (PUTC_i = 0; PUTC_i < CCHARW_MAX; ++PUTC_i) { PUTC_ch = ch->chars[PUTC_i]; if (PUTC_ch == L'\0') { if (PUTC_i == 0) (void) _nc_trace_bufcat(bufnum, "\\000"); break; } PUTC_INIT; PUTC_n = (int) wcrtomb(PUTC_buf, ch->chars[PUTC_i], &PUT_st); if (PUTC_n <= 0) { if (PUTC_ch != L'\0') { /* it could not be a multibyte sequence */ (void) _nc_trace_bufcat(bufnum, _nc_tracechar(CURRENT_SCREEN, UChar(ch->chars[PUTC_i]))); } break; } else if (ch->chars[PUTC_i] > 255) { char temp[80]; sprintf(temp, "{%d:\\u%x}", wcwidth(ch->chars[PUTC_i]), ch->chars[PUTC_i]); (void) _nc_trace_bufcat(bufnum, temp); break; } for (n = 0; n < PUTC_n; n++) { if (n) (void) _nc_trace_bufcat(bufnum, ", "); (void) _nc_trace_bufcat(bufnum, _nc_tracechar(CURRENT_SCREEN, UChar(PUTC_buf[n]))); } } (void) _nc_trace_bufcat(bufnum, " }"); } if (attr != A_NORMAL) { (void) _nc_trace_bufcat(bufnum, " | "); (void) _nc_trace_bufcat(bufnum, _traceattr2(bufnum + 20, attr)); } } result = _nc_trace_bufcat(bufnum, r_brace); } return result; } NCURSES_EXPORT(char *) _tracecchar_t(const cchar_t *ch) { return _tracecchar_t2(0, ch); } #endif #else EMPTY_MODULE(_nc_lib_traceatr) #endif /* TRACE */ ncurses-6.0-20160213/ncurses/trace/trace_buf.c0000644000175100001440000001007211721266567017347 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997-on * ****************************************************************************/ /* * trace_buf.c - Tracing/Debugging buffers (attributes) */ #include MODULE_ID("$Id: trace_buf.c,v 1.20 2012/02/22 22:34:31 tom Exp $") #ifdef TRACE #define MyList _nc_globals.tracebuf_ptr #define MySize _nc_globals.tracebuf_used static char * _nc_trace_alloc(int bufnum, size_t want) { char *result = 0; if (bufnum >= 0) { if ((size_t) (bufnum + 1) > MySize) { size_t need = (size_t) (bufnum + 1) * 2; if ((MyList = typeRealloc(TRACEBUF, need, MyList)) != 0) { while (need > MySize) MyList[MySize++].text = 0; } } if (MyList != 0) { if (MyList[bufnum].text == 0 || want > MyList[bufnum].size) { MyList[bufnum].text = typeRealloc(char, want, MyList[bufnum].text); if (MyList[bufnum].text != 0) MyList[bufnum].size = want; } result = MyList[bufnum].text; } } #if NO_LEAKS else { if (MySize) { if (MyList) { while (MySize--) { if (MyList[MySize].text != 0) { free(MyList[MySize].text); } } free(MyList); MyList = 0; } MySize = 0; } } #endif return result; } /* * (re)Allocate a buffer big enough for the caller's wants. */ NCURSES_EXPORT(char *) _nc_trace_buf(int bufnum, size_t want) { char *result = _nc_trace_alloc(bufnum, want); if (result != 0) *result = '\0'; return result; } /* * Append a new string to an existing buffer. */ NCURSES_EXPORT(char *) _nc_trace_bufcat(int bufnum, const char *value) { char *buffer = _nc_trace_alloc(bufnum, (size_t) 0); if (buffer != 0) { size_t have = strlen(buffer); size_t need = strlen(value) + have; buffer = _nc_trace_alloc(bufnum, 1 + need); if (buffer != 0) _nc_STRCPY(buffer + have, value, need); } return buffer; } #else EMPTY_MODULE(_nc_empty_trace_buf) #endif /* TRACE */ ncurses-6.0-20160213/ncurses/trace/lib_tracedmp.c0000644000175100001440000001371112043045022020020 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-on * * and: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* * lib_tracedmp.c - Tracing/Debugging routines */ #include #include MODULE_ID("$Id: lib_tracedmp.c,v 1.34 2012/10/27 20:54:42 tom Exp $") #ifdef TRACE #define my_buffer _nc_globals.tracedmp_buf #define my_length _nc_globals.tracedmp_used NCURSES_EXPORT(void) _tracedump(const char *name, WINDOW *win) { int i, j, n, width; /* compute narrowest possible display width */ for (width = i = 0; i <= win->_maxy; ++i) { n = 0; for (j = 0; j <= win->_maxx; ++j) { if (CharOf(win->_line[i].text[j]) != L(' ') || AttrOf(win->_line[i].text[j]) != A_NORMAL || GetPair(win->_line[i].text[j]) != 0) { n = j; } } if (n > width) width = n; } if (width < win->_maxx) ++width; if (++width + 1 > (int) my_length) { my_length = (unsigned) (2 * (width + 1)); my_buffer = typeRealloc(char, my_length, my_buffer); if (my_buffer == 0) return; } for (n = 0; n <= win->_maxy; ++n) { char *ep = my_buffer; bool haveattrs, havecolors; /* * Dump A_CHARTEXT part. It is more important to make the grid line up * in the trace file than to represent control- and wide-characters, so * we map those to '.' and '?' respectively. */ for (j = 0; j < width; ++j) { chtype test = (chtype) CharOf(win->_line[n].text[j]); ep[j] = (char) ((UChar(test) == test #if USE_WIDEC_SUPPORT && (win->_line[n].text[j].chars[1] == 0) #endif ) ? (iscntrl(UChar(test)) ? '.' : UChar(test)) : '?'); } ep[j] = '\0'; _tracef("%s[%2d] %3ld%3ld ='%s'", name, n, (long) win->_line[n].firstchar, (long) win->_line[n].lastchar, ep); /* if there are multi-column characters on the line, print them now */ if_WIDEC({ bool multicolumn = FALSE; for (j = 0; j < width; ++j) if (WidecExt(win->_line[n].text[j]) != 0) { multicolumn = TRUE; break; } if (multicolumn) { ep = my_buffer; for (j = 0; j < width; ++j) { int test = WidecExt(win->_line[n].text[j]); if (test) { ep[j] = (char) (test + '0'); } else { ep[j] = ' '; } } ep[j] = '\0'; _tracef("%*s[%2d]%*s='%s'", (int) strlen(name), "widec", n, 8, " ", my_buffer); } }); /* dump A_COLOR part, will screw up if there are more than 96 */ havecolors = FALSE; for (j = 0; j < width; ++j) if (GetPair(win->_line[n].text[j]) != 0) { havecolors = TRUE; break; } if (havecolors) { ep = my_buffer; for (j = 0; j < width; ++j) { int pair = GetPair(win->_line[n].text[j]); if (pair >= 52) ep[j] = '?'; else if (pair >= 36) ep[j] = (char) (pair + 'A'); else if (pair >= 10) ep[j] = (char) (pair + 'a'); else if (pair >= 1) ep[j] = (char) (pair + '0'); else ep[j] = ' '; } ep[j] = '\0'; _tracef("%*s[%2d]%*s='%s'", (int) strlen(name), "colors", n, 8, " ", my_buffer); } for (i = 0; i < 4; ++i) { const char *hex = " 123456789ABCDEF"; attr_t mask = (attr_t) (0xf << ((i + 4) * 4)); haveattrs = FALSE; for (j = 0; j < width; ++j) if (AttrOf(win->_line[n].text[j]) & mask) { haveattrs = TRUE; break; } if (haveattrs) { ep = my_buffer; for (j = 0; j < width; ++j) ep[j] = hex[(AttrOf(win->_line[n].text[j]) & mask) >> ((i + 4) * 4)]; ep[j] = '\0'; _tracef("%*s%d[%2d]%*s='%s'", (int) strlen(name) - 1, "attrs", i, n, 8, " ", my_buffer); } } } #if NO_LEAKS free(my_buffer); my_buffer = 0; my_length = 0; #endif } #else EMPTY_MODULE(_nc_lib_tracedmp) #endif /* TRACE */ ncurses-6.0-20160213/ncurses/trace/README0000644000175100001440000000464710422525771016134 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README,v 1.2 2006/04/22 22:19:37 tom Exp $ ------------------------------------------------------------------------------- The files in this directory (trace) support both the terminfo and ncurses libraries. Most of the functions are linked in only when the libraries are compiled with TRACE defined. ncurses-6.0-20160213/ncurses/trace/lib_tracechr.c0000644000175100001440000000731311721267330020027 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * lib_tracechr.c - Tracing/Debugging routines */ #include #include MODULE_ID("$Id: lib_tracechr.c,v 1.22 2012/02/22 22:40:24 tom Exp $") #ifdef TRACE #define MyBufSize sizeof(_nc_globals.tracechr_buf) NCURSES_EXPORT(char *) _nc_tracechar(SCREEN *sp, int ch) { NCURSES_CONST char *name; char *MyBuffer = ((sp != 0) ? sp->tracechr_buf : _nc_globals.tracechr_buf); if (ch > KEY_MIN || ch < 0) { name = safe_keyname(SP_PARM, ch); if (name == 0 || *name == '\0') name = "NULL"; _nc_SPRINTF(MyBuffer, _nc_SLIMIT(MyBufSize) "'%.30s' = %#03o", name, ch); } else if (!is8bits(ch) || !isprint(UChar(ch))) { /* * workaround for glibc bug: * sprintf changes the result from unctrl() to an empty string if it * does not correspond to a valid multibyte sequence. */ _nc_SPRINTF(MyBuffer, _nc_SLIMIT(MyBufSize) "%#03o", ch); } else { name = safe_unctrl(SP_PARM, (chtype) ch); if (name == 0 || *name == 0) name = "null"; /* shouldn't happen */ _nc_SPRINTF(MyBuffer, _nc_SLIMIT(MyBufSize) "'%.30s' = %#03o", name, ch); } return (MyBuffer); } NCURSES_EXPORT(char *) _tracechar(int ch) { return _nc_tracechar(CURRENT_SCREEN, ch); } #else EMPTY_MODULE(_nc_lib_tracechr) #endif ncurses-6.0-20160213/ncurses/trace/trace_tries.c0000644000175100001440000000664712043044452017717 0ustar tomusers/**************************************************************************** * Copyright (c) 1999-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1999 * ****************************************************************************/ /* * trace_tries.c - Tracing/Debugging buffers (keycode tries-trees) */ #include MODULE_ID("$Id: trace_tries.c,v 1.17 2012/10/27 20:50:50 tom Exp $") #ifdef TRACE #define my_buffer _nc_globals.tracetry_buf #define my_length _nc_globals.tracetry_used static void recur_tries(TRIES * tree, unsigned level) { if (level > my_length) { my_length = (level + 1) * 4; my_buffer = (unsigned char *) _nc_doalloc(my_buffer, my_length); } if (my_buffer != 0) { while (tree != 0) { if ((my_buffer[level] = tree->ch) == 0) my_buffer[level] = 128; my_buffer[level + 1] = 0; if (tree->value != 0) { _tracef("%5d: %s (%s)", tree->value, _nc_visbuf((char *) my_buffer), keyname(tree->value)); } if (tree->child) recur_tries(tree->child, level + 1); tree = tree->sibling; } } } NCURSES_EXPORT(void) _nc_trace_tries(TRIES * tree) { if ((my_buffer = typeMalloc(unsigned char, my_length = 80)) != 0) { _tracef("BEGIN tries %p", (void *) tree); recur_tries(tree, 0); _tracef(". . . tries %p", (void *) tree); free(my_buffer); } } #else EMPTY_MODULE(_nc_empty_trace_tries) #endif ncurses-6.0-20160213/ncurses/trace/varargs.c0000644000175100001440000001325312043046040017042 0ustar tomusers/**************************************************************************** * Copyright (c) 2001-2008,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2001 * ****************************************************************************/ #include #include MODULE_ID("$Id: varargs.c,v 1.11 2012/10/27 21:03:28 tom Exp $") #ifdef TRACE #define MAX_PARMS 10 typedef enum { atUnknown = 0, atInteger, atFloat, atPoint, atString } ARGTYPE; #define VA_INT(type) ival = (int) va_arg(ap, type) #define VA_FLT(type) fval = va_arg(ap, type) #define VA_PTR(type) pval = (char *)va_arg(ap, type) #define VA_STR(type) sval = va_arg(ap, type) #define MyBuffer _nc_globals.tracearg_buf #define MyLength _nc_globals.tracearg_used /* * Returns a string that represents the parameter list of a printf-style call. */ NCURSES_EXPORT(char *) _nc_varargs(const char *fmt, va_list ap) { static char dummy[] = ""; char buffer[BUFSIZ]; const char *param; int n; if (fmt == 0 || *fmt == '\0') return dummy; if (MyLength == 0) MyBuffer = typeMalloc(char, MyLength = BUFSIZ); if (MyBuffer == 0) return dummy; *MyBuffer = '\0'; while (*fmt != '\0') { if (*fmt == '%') { char *pval = 0; /* avoid const-cast */ const char *sval = ""; double fval = 0.0; int done = FALSE; int ival = 0; int type = 0; ARGTYPE parm[MAX_PARMS]; int parms = 0; ARGTYPE used = atUnknown; while (*++fmt != '\0' && !done) { if (*fmt == '*') { VA_INT(int); if (parms < MAX_PARMS) parm[parms++] = atInteger; } else if (isalpha(UChar(*fmt))) { done = TRUE; switch (*fmt) { case 'Z': /* FALLTHRU */ case 'h': /* FALLTHRU */ case 'l': /* FALLTHRU */ done = FALSE; type = *fmt; break; case 'i': /* FALLTHRU */ case 'd': /* FALLTHRU */ case 'u': /* FALLTHRU */ case 'x': /* FALLTHRU */ case 'X': /* FALLTHRU */ if (type == 'l') VA_INT(long); else if (type == 'Z') VA_INT(size_t); else VA_INT(int); used = atInteger; break; case 'f': /* FALLTHRU */ case 'e': /* FALLTHRU */ case 'E': /* FALLTHRU */ case 'g': /* FALLTHRU */ case 'G': /* FALLTHRU */ VA_FLT(double); used = atFloat; break; case 'c': VA_INT(int); used = atInteger; break; case 's': VA_STR(const char *); used = atString; break; case 'p': VA_PTR(void *); used = atPoint; break; case 'n': VA_PTR(int *); used = atPoint; break; default: break; } } else if (*fmt == '%') { done = TRUE; } if (used != atUnknown && parms < MAX_PARMS) { parm[parms++] = used; for (n = 0; n < parms; ++n) { used = parm[n]; param = buffer; switch (used) { case atInteger: _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%d", ival); break; case atFloat: _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%f", fval); break; case atPoint: _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%p", pval); break; case atString: param = _nc_visbuf2(1, sval); break; case atUnknown: default: _nc_STRCPY(buffer, "?", sizeof(buffer)); break; } MyLength += strlen(param) + 2; MyBuffer = typeRealloc(char, MyLength, MyBuffer); if (MyBuffer != 0) { _nc_SPRINTF(MyBuffer + strlen(MyBuffer), _nc_SLIMIT(MyLength - strlen(MyBuffer)) ", %s", param); } } } used = atUnknown; } } else { fmt++; } } return (MyBuffer ? MyBuffer : dummy); } #else EMPTY_MODULE(_nc_varargs) #endif ncurses-6.0-20160213/ncurses/trace/lib_tracebits.c0000644000175100001440000001544612514741237020226 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ #include MODULE_ID("$Id: lib_tracebits.c,v 1.26 2015/04/19 14:58:39 tom Exp $") #if HAVE_SYS_TERMIO_H #include /* needed for ISC */ #endif #ifdef __EMX__ #include #endif /* may be undefined if we're using termio.h */ #ifndef TOSTOP #define TOSTOP 0 #endif #ifndef IEXTEN #define IEXTEN 0 #endif #ifndef ONLCR #define ONLCR 0 #endif #ifndef OCRNL #define OCRNL 0 #endif #ifndef ONOCR #define ONOCR 0 #endif #ifndef ONLRET #define ONLRET 0 #endif #ifdef TRACE typedef struct { unsigned int val; const char name[8]; } BITNAMES; #define TRACE_BUF_SIZE(num) (_nc_globals.tracebuf_ptr[num].size) static void lookup_bits(char *buf, const BITNAMES * table, const char *label, unsigned int val) { const BITNAMES *sp; _nc_STRCAT(buf, label, TRACE_BUF_SIZE(0)); _nc_STRCAT(buf, ": {", TRACE_BUF_SIZE(0)); for (sp = table; sp->name[0]; sp++) if (sp->val != 0 && (val & sp->val) == sp->val) { _nc_STRCAT(buf, sp->name, TRACE_BUF_SIZE(0)); _nc_STRCAT(buf, ", ", TRACE_BUF_SIZE(0)); } if (buf[strlen(buf) - 2] == ',') buf[strlen(buf) - 2] = '\0'; _nc_STRCAT(buf, "} ", TRACE_BUF_SIZE(0)); } NCURSES_EXPORT(char *) _nc_trace_ttymode(TTY * tty) /* describe the state of the terminal control bits exactly */ { char *buf; #ifdef TERMIOS #define DATA(name) { name, { #name } } #define DATA2(name,name2) { name, { #name2 } } #define DATAX() { 0, { "" } } static const BITNAMES iflags[] = { DATA(BRKINT), DATA(IGNBRK), DATA(IGNPAR), DATA(PARMRK), DATA(INPCK), DATA(ISTRIP), DATA(INLCR), DATA(IGNCR), DATA(ICRNL), DATA(IXON), DATA(IXOFF), DATAX() #define ALLIN (BRKINT|IGNBRK|IGNPAR|PARMRK|INPCK|ISTRIP|INLCR|IGNCR|ICRNL|IXON|IXOFF) }, oflags[] = { DATA(OPOST), DATA2(OFLAGS_TABS, XTABS), DATA(ONLCR), DATA(OCRNL), DATA(ONOCR), DATA(ONLRET), DATAX() #define ALLOUT (OPOST|OFLAGS_TABS|ONLCR|OCRNL|ONOCR|ONLRET) }, cflags[] = { DATA(CLOCAL), DATA(CREAD), DATA(CSTOPB), #if !defined(CS5) || !defined(CS8) DATA(CSIZE), #endif DATA(HUPCL), DATA(PARENB), DATA2(PARODD | PARENB, PARODD), DATAX() #define ALLCTRL (CLOCAL|CREAD|CSIZE|CSTOPB|HUPCL|PARENB|PARODD) }, lflags[] = { DATA(ECHO), DATA2(ECHOE | ECHO, ECHOE), DATA2(ECHOK | ECHO, ECHOK), DATA(ECHONL), DATA(ICANON), DATA(ISIG), DATA(NOFLSH), DATA(TOSTOP), DATA(IEXTEN), DATAX() #define ALLLOCAL (ECHO|ECHONL|ICANON|ISIG|NOFLSH|TOSTOP|IEXTEN) }; buf = _nc_trace_buf(0, 8 + sizeof(iflags) + 8 + sizeof(oflags) + 8 + sizeof(cflags) + 8 + sizeof(lflags) + 8); if (buf != 0) { if (tty->c_iflag & ALLIN) lookup_bits(buf, iflags, "iflags", tty->c_iflag); if (tty->c_oflag & ALLOUT) lookup_bits(buf, oflags, "oflags", tty->c_oflag); if (tty->c_cflag & ALLCTRL) lookup_bits(buf, cflags, "cflags", tty->c_cflag); #if defined(CS5) && defined(CS8) { static const struct { int value; const char name[5]; } csizes[] = { #define CS_DATA(name) { name, { #name " " } } CS_DATA(CS5), #ifdef CS6 CS_DATA(CS6), #endif #ifdef CS7 CS_DATA(CS7), #endif CS_DATA(CS8), }; const char *result = "CSIZE? "; int value = (int) (tty->c_cflag & CSIZE); unsigned n; if (value != 0) { for (n = 0; n < SIZEOF(csizes); n++) { if (csizes[n].value == value) { result = csizes[n].name; break; } } } _nc_STRCAT(buf, result, TRACE_BUF_SIZE(0)); } #endif if (tty->c_lflag & ALLLOCAL) lookup_bits(buf, lflags, "lflags", tty->c_lflag); } #else /* reference: ttcompat(4M) on SunOS 4.1 */ #ifndef EVENP #define EVENP 0 #endif #ifndef LCASE #define LCASE 0 #endif #ifndef LLITOUT #define LLITOUT 0 #endif #ifndef ODDP #define ODDP 0 #endif #ifndef TANDEM #define TANDEM 0 #endif static const BITNAMES cflags[] = { DATA(CBREAK), DATA(CRMOD), DATA(ECHO), DATA(EVENP), DATA(LCASE), DATA(LLITOUT), DATA(ODDP), DATA(RAW), DATA(TANDEM), DATA(XTABS), DATAX() #define ALLCTRL (CBREAK|CRMOD|ECHO|EVENP|LCASE|LLITOUT|ODDP|RAW|TANDEM|XTABS) }; buf = _nc_trace_buf(0, 8 + sizeof(cflags)); if (buf != 0) { if (tty->sg_flags & ALLCTRL) { lookup_bits(buf, cflags, "cflags", tty->sg_flags); } } #endif return (buf); } NCURSES_EXPORT(char *) _nc_tracebits(void) { return _nc_trace_ttymode(&(cur_term->Nttyb)); } #else EMPTY_MODULE(_nc_empty_lib_tracebits) #endif /* TRACE */ ncurses-6.0-20160213/ncurses/trace/lib_tracemse.c0000644000175100001440000001275612415720622020045 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * lib_tracemse.c - Tracing/Debugging routines (mouse events) */ #include MODULE_ID("$Id: lib_tracemse.c,v 1.22 2014/10/10 09:06:26 tom Exp $") #ifdef TRACE #define my_buffer sp->tracemse_buf NCURSES_EXPORT(char *) _nc_trace_mmask_t(SCREEN *sp, mmask_t code) { #define SHOW(m, s) \ if ((code & m) == m) { \ size_t n = strlen(my_buffer); \ if (n && (my_buffer[n-1] != '{')) \ _nc_STRCAT(my_buffer, ", ", sizeof(my_buffer)); \ _nc_STRCAT(my_buffer, s, sizeof(my_buffer)); \ } SHOW(BUTTON1_RELEASED, "release-1"); SHOW(BUTTON1_PRESSED, "press-1"); SHOW(BUTTON1_CLICKED, "click-1"); SHOW(BUTTON1_DOUBLE_CLICKED, "doubleclick-1"); SHOW(BUTTON1_TRIPLE_CLICKED, "tripleclick-1"); #if NCURSES_MOUSE_VERSION == 1 SHOW(BUTTON1_RESERVED_EVENT, "reserved-1"); #endif SHOW(BUTTON2_RELEASED, "release-2"); SHOW(BUTTON2_PRESSED, "press-2"); SHOW(BUTTON2_CLICKED, "click-2"); SHOW(BUTTON2_DOUBLE_CLICKED, "doubleclick-2"); SHOW(BUTTON2_TRIPLE_CLICKED, "tripleclick-2"); #if NCURSES_MOUSE_VERSION == 1 SHOW(BUTTON2_RESERVED_EVENT, "reserved-2"); #endif SHOW(BUTTON3_RELEASED, "release-3"); SHOW(BUTTON3_PRESSED, "press-3"); SHOW(BUTTON3_CLICKED, "click-3"); SHOW(BUTTON3_DOUBLE_CLICKED, "doubleclick-3"); SHOW(BUTTON3_TRIPLE_CLICKED, "tripleclick-3"); #if NCURSES_MOUSE_VERSION == 1 SHOW(BUTTON3_RESERVED_EVENT, "reserved-3"); #endif SHOW(BUTTON4_RELEASED, "release-4"); SHOW(BUTTON4_PRESSED, "press-4"); SHOW(BUTTON4_CLICKED, "click-4"); SHOW(BUTTON4_DOUBLE_CLICKED, "doubleclick-4"); SHOW(BUTTON4_TRIPLE_CLICKED, "tripleclick-4"); #if NCURSES_MOUSE_VERSION == 1 SHOW(BUTTON4_RESERVED_EVENT, "reserved-4"); #endif #if NCURSES_MOUSE_VERSION == 2 SHOW(BUTTON5_RELEASED, "release-5"); SHOW(BUTTON5_PRESSED, "press-5"); SHOW(BUTTON5_CLICKED, "click-5"); SHOW(BUTTON5_DOUBLE_CLICKED, "doubleclick-5"); SHOW(BUTTON5_TRIPLE_CLICKED, "tripleclick-5"); #endif SHOW(BUTTON_CTRL, "ctrl"); SHOW(BUTTON_SHIFT, "shift"); SHOW(BUTTON_ALT, "alt"); SHOW(ALL_MOUSE_EVENTS, "all-events"); SHOW(REPORT_MOUSE_POSITION, "position"); #undef SHOW if (my_buffer[strlen(my_buffer) - 1] == ' ') my_buffer[strlen(my_buffer) - 2] = '\0'; return (my_buffer); } NCURSES_EXPORT(char *) _nc_tracemouse(SCREEN *sp, MEVENT const *ep) { char *result = 0; if (sp != 0) { _nc_SPRINTF(my_buffer, _nc_SLIMIT(sizeof(my_buffer)) TRACEMSE_FMT, ep->id, ep->x, ep->y, ep->z, (unsigned long) ep->bstate); (void) _nc_trace_mmask_t(sp, ep->bstate); _nc_STRCAT(my_buffer, "}", sizeof(my_buffer)); result = (my_buffer); } return result; } NCURSES_EXPORT(mmask_t) _nc_retrace_mmask_t(SCREEN *sp, mmask_t code) { if (sp != 0) { *my_buffer = '\0'; T((T_RETURN("{%s}"), _nc_trace_mmask_t(sp, code))); } else { T((T_RETURN("{?}"))); } return code; } NCURSES_EXPORT(char *) _tracemouse(MEVENT const *ep) { return _nc_tracemouse(CURRENT_SCREEN, ep); } #else /* !TRACE */ EMPTY_MODULE(_nc_lib_tracemouse) #endif ncurses-6.0-20160213/ncurses/widechar/0000755000175100001440000000000012635364077015741 5ustar tomusersncurses-6.0-20160213/ncurses/widechar/lib_hline_set.c0000644000175100001440000000607311503261637020702 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas Dickey 2002 * ****************************************************************************/ /* ** lib_hline_set.c ** ** The routine whline_set(). ** */ #include MODULE_ID("$Id: lib_hline_set.c,v 1.4 2010/12/19 01:45:03 tom Exp $") NCURSES_EXPORT(int) whline_set(WINDOW *win, const cchar_t *ch, int n) { int code = ERR; int start; int end; T((T_CALLED("whline_set(%p,%s,%d)"), (void *) win, _tracecchar_t(ch), n)); if (win) { struct ldat *line = &(win->_line[win->_cury]); NCURSES_CH_T wch; start = win->_curx; end = start + n - 1; if (end > win->_maxx) end = win->_maxx; CHANGED_RANGE(line, start, end); if (ch == 0) wch = *WACS_HLINE; else wch = *ch; wch = _nc_render(win, wch); while (end >= start) { line->text[end] = wch; end--; } _nc_synchook(win); code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/widechar/lib_in_wchnstr.c0000644000175100001440000000620011270700674021076 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2007,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas Dickey * ****************************************************************************/ /* ** lib_in_wchnstr.c ** ** The routine win_wchnstr(). ** */ #include MODULE_ID("$Id: lib_in_wchnstr.c,v 1.8 2009/10/24 22:37:48 tom Exp $") NCURSES_EXPORT(int) win_wchnstr(WINDOW *win, cchar_t *wchstr, int n) { int code = OK; T((T_CALLED("win_wchnstr(%p,%p,%d)"), (void *) win, (void *) wchstr, n)); if (win != 0 && wchstr != 0) { NCURSES_CH_T *src; int row, col; int j, k, limit; getyx(win, row, col); limit = getmaxx(win) - col; src = &(win->_line[row].text[col]); if (n < 0) { n = limit; } else if (n > limit) { n = limit; } for (j = k = 0; j < n; ++j) { if (j == 0 || !WidecExt(src[j]) || isWidecBase(src[j])) { wchstr[k++] = src[j]; } } memset(&(wchstr[k]), 0, sizeof(*wchstr)); T(("result = %s", _nc_viscbuf(wchstr, n))); } else { code = ERR; } returnCode(code); } ncurses-6.0-20160213/ncurses/widechar/lib_cchar.c0000644000175100001440000001122612273270342020002 0ustar tomusers/**************************************************************************** * Copyright (c) 2001-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* ** lib_cchar.c ** ** The routines setcchar() and getcchar(). ** */ #include MODULE_ID("$Id: lib_cchar.c,v 1.27 2014/02/01 22:10:42 tom Exp $") /* * The SuSv2 description leaves some room for interpretation. We'll assume wch * points to a string which is L'\0' terminated, contains at least one * character with strictly positive width, which must be the first, and * contains no characters of negative width. */ NCURSES_EXPORT(int) setcchar(cchar_t *wcval, const wchar_t *wch, const attr_t attrs, NCURSES_PAIRS_T color_pair, const void *opts) { unsigned i; unsigned len; int code = OK; TR(TRACE_CCALLS, (T_CALLED("setcchar(%p,%s,%lu,%d,%p)"), (void *) wcval, _nc_viswbuf(wch), (unsigned long) attrs, (int) color_pair, opts)); if (opts != NULL || wch == NULL || ((len = (unsigned) wcslen(wch)) > 1 && wcwidth(wch[0]) < 0)) { code = ERR; } else { if (len > CCHARW_MAX) len = CCHARW_MAX; /* * If we have a following spacing-character, stop at that point. We * are only interested in adding non-spacing characters. */ for (i = 1; i < len; ++i) { if (wcwidth(wch[i]) != 0) { len = i; break; } } memset(wcval, 0, sizeof(*wcval)); if (len != 0) { SetAttr(*wcval, attrs); SetPair(CHDEREF(wcval), color_pair); memcpy(&wcval->chars, wch, len * sizeof(wchar_t)); TR(TRACE_CCALLS, ("copy %d wchars, first is %s", len, _tracecchar_t(wcval))); } } TR(TRACE_CCALLS, (T_RETURN("%d"), code)); return (code); } NCURSES_EXPORT(int) getcchar(const cchar_t *wcval, wchar_t *wch, attr_t *attrs, NCURSES_PAIRS_T *color_pair, void *opts) { wchar_t *wp; int len; int code = ERR; TR(TRACE_CCALLS, (T_CALLED("getcchar(%p,%p,%p,%p,%p)"), (const void *) wcval, (void *) wch, (void *) attrs, (void *) color_pair, opts)); if (opts == NULL && wcval != NULL) { len = ((wp = wmemchr(wcval->chars, L'\0', (size_t) CCHARW_MAX)) ? (int) (wp - wcval->chars) : CCHARW_MAX); if (wch == NULL) { /* * If the value is a null, set the length to 1. * If the value is not a null, return the length plus 1 for null. */ code = (len < CCHARW_MAX) ? (len + 1) : CCHARW_MAX; } else if (attrs == 0 || color_pair == 0) { code = ERR; } else if (len >= 0) { *attrs = AttrOf(*wcval) & A_ATTRIBUTES; *color_pair = (NCURSES_PAIRS_T) GetPair(*wcval); wmemcpy(wch, wcval->chars, (size_t) len); wch[len] = L'\0'; code = OK; } } TR(TRACE_CCALLS, (T_RETURN("%d"), code)); return (code); } ncurses-6.0-20160213/ncurses/widechar/lib_ins_wch.c0000644000175100001440000001134511650570252020357 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas Dickey 2002 * ****************************************************************************/ /* ** lib_ins_wch.c ** ** The routine wins_wch(). ** */ #include MODULE_ID("$Id: lib_ins_wch.c,v 1.17 2011/10/22 16:34:50 tom Exp $") /* * Insert the given character, updating the current location to simplify * inserting a string. */ NCURSES_EXPORT(int) _nc_insert_wch(WINDOW *win, const cchar_t *wch) { int cells = wcwidth(CharOf(CHDEREF(wch))); int cell; int code = OK; if (cells < 0) { code = winsch(win, (chtype) CharOf(CHDEREF(wch))); } else { if (cells == 0) cells = 1; if (win->_curx <= win->_maxx) { struct ldat *line = &(win->_line[win->_cury]); NCURSES_CH_T *end = &(line->text[win->_curx]); NCURSES_CH_T *temp1 = &(line->text[win->_maxx]); NCURSES_CH_T *temp2 = temp1 - cells; CHANGED_TO_EOL(line, win->_curx, win->_maxx); while (temp1 > end) *temp1-- = *temp2--; *temp1 = _nc_render(win, *wch); for (cell = 1; cell < cells; ++cell) { SetWidecExt(temp1[cell], cell); } win->_curx++; } } return code; } NCURSES_EXPORT(int) wins_wch(WINDOW *win, const cchar_t *wch) { NCURSES_SIZE_T oy; NCURSES_SIZE_T ox; int code = ERR; T((T_CALLED("wins_wch(%p, %s)"), (void *) win, _tracecchar_t(wch))); if (win != 0) { oy = win->_cury; ox = win->_curx; code = _nc_insert_wch(win, wch); win->_curx = ox; win->_cury = oy; _nc_synchook(win); } returnCode(code); } NCURSES_EXPORT(int) wins_nwstr(WINDOW *win, const wchar_t *wstr, int n) { int code = ERR; NCURSES_SIZE_T oy; NCURSES_SIZE_T ox; const wchar_t *cp; T((T_CALLED("wins_nwstr(%p,%s,%d)"), (void *) win, _nc_viswbufn(wstr, n), n)); if (win != 0 && wstr != 0) { if (n < 1) n = (int) wcslen(wstr); code = OK; if (n > 0) { SCREEN *sp = _nc_screen_of(win); oy = win->_cury; ox = win->_curx; for (cp = wstr; *cp && ((cp - wstr) < n); cp++) { int len = wcwidth(*cp); if ((len >= 0 && len != 1) || !is7bits(*cp)) { cchar_t tmp_cchar; wchar_t tmp_wchar = *cp; memset(&tmp_cchar, 0, sizeof(tmp_cchar)); (void) setcchar(&tmp_cchar, &tmp_wchar, WA_NORMAL, (short) 0, (void *) 0); code = _nc_insert_wch(win, &tmp_cchar); } else { /* tabs, other ASCII stuff */ code = _nc_insert_ch(sp, win, (chtype) (*cp)); } if (code != OK) break; } win->_curx = ox; win->_cury = oy; _nc_synchook(win); } } returnCode(code); } ncurses-6.0-20160213/ncurses/widechar/lib_wacs.c0000644000175100001440000001451112635364077017672 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas Dickey 2002 * ****************************************************************************/ #include MODULE_ID("$Id: lib_wacs.c,v 1.16 2015/12/19 23:29:03 tom Exp $") NCURSES_EXPORT_VAR(cchar_t) * _nc_wacs = 0; NCURSES_EXPORT(void) _nc_init_wacs(void) { /* *INDENT-OFF* */ static const struct { unsigned map; int value[2]; } table[] = { /* VT100 symbols */ { 'l', { '+', 0x250c }}, /* upper left corner */ { 'm', { '+', 0x2514 }}, /* lower left corner */ { 'k', { '+', 0x2510 }}, /* upper right corner */ { 'j', { '+', 0x2518 }}, /* lower right corner */ { 't', { '+', 0x251c }}, /* tee pointing left */ { 'u', { '+', 0x2524 }}, /* tee pointing right */ { 'v', { '+', 0x2534 }}, /* tee pointing up */ { 'w', { '+', 0x252c }}, /* tee pointing down */ { 'q', { '-', 0x2500 }}, /* horizontal line */ { 'x', { '|', 0x2502 }}, /* vertical line */ { 'n', { '+', 0x253c }}, /* large plus or crossover */ { 'o', { '~', 0x23ba }}, /* scan line 1 */ { 's', { '_', 0x23bd }}, /* scan line 9 */ { '`', { '+', 0x25c6 }}, /* diamond */ { 'a', { ':', 0x2592 }}, /* checker board (stipple) */ { 'f', { '\'', 0x00b0 }}, /* degree symbol */ { 'g', { '#', 0x00b1 }}, /* plus/minus */ { '~', { 'o', 0x00b7 }}, /* bullet */ /* Teletype 5410v1 symbols */ { ',', { '<', 0x2190 }}, /* arrow pointing left */ { '+', { '>', 0x2192 }}, /* arrow pointing right */ { '.', { 'v', 0x2193 }}, /* arrow pointing down */ { '-', { '^', 0x2191 }}, /* arrow pointing up */ { 'h', { '#', 0x2592 }}, /* board of squares */ { 'i', { '#', 0x2603 }}, /* lantern symbol */ { '0', { '#', 0x25ae }}, /* solid square block */ /* these defaults were invented for ncurses */ { 'p', { '-', 0x23bb }}, /* scan line 3 */ { 'r', { '-', 0x23bc }}, /* scan line 7 */ { 'y', { '<', 0x2264 }}, /* less-than-or-equal-to */ { 'z', { '>', 0x2265 }}, /* greater-than-or-equal-to */ { '{', { '*', 0x03c0 }}, /* greek pi */ { '|', { '!', 0x2260 }}, /* not-equal */ { '}', { 'f', 0x00a3 }}, /* pound-sterling symbol */ /* thick-line-drawing */ { 'L', { '+', 0x250f }}, /* upper left corner */ { 'M', { '+', 0x2517 }}, /* lower left corner */ { 'K', { '+', 0x2513 }}, /* upper right corner */ { 'J', { '+', 0x251b }}, /* lower right corner */ { 'T', { '+', 0x2523 }}, /* tee pointing left */ { 'U', { '+', 0x252b }}, /* tee pointing right */ { 'V', { '+', 0x253b }}, /* tee pointing up */ { 'W', { '+', 0x2533 }}, /* tee pointing down */ { 'Q', { '-', 0x2501 }}, /* horizontal line */ { 'X', { '|', 0x2503 }}, /* vertical line */ { 'N', { '+', 0x254b }}, /* large plus or crossover */ /* double-line-drawing */ { 'C', { '+', 0x2554 }}, /* upper left corner */ { 'D', { '+', 0x255a }}, /* lower left corner */ { 'B', { '+', 0x2557 }}, /* upper right corner */ { 'A', { '+', 0x255d }}, /* lower right corner */ { 'G', { '+', 0x2563 }}, /* tee pointing left */ { 'F', { '+', 0x2560 }}, /* tee pointing right */ { 'H', { '+', 0x2569 }}, /* tee pointing up */ { 'I', { '+', 0x2566 }}, /* tee pointing down */ { 'R', { '-', 0x2550 }}, /* horizontal line */ { 'Y', { '|', 0x2551 }}, /* vertical line */ { 'E', { '+', 0x256c }}, /* large plus or crossover */ }; /* *INDENT-ON* */ unsigned n, m; int active = _nc_unicode_locale(); /* * If we're running in a UTF-8 locale, will use the Unicode equivalents * rather than the terminfo information. Actually the terminfo should * be the rule, but there are people who are offended by the notion that * a Unicode-capable terminal would have something resembling a mode. * So the smacs/rmacs may be disabled -- sometime. */ T(("initializing WIDE-ACS map (Unicode is%s active)", active ? "" : " not")); if ((_nc_wacs = typeCalloc(cchar_t, ACS_LEN)) != 0) { for (n = 0; n < SIZEOF(table); ++n) { #if NCURSES_WCWIDTH_GRAPHICS int wide = wcwidth((wchar_t) table[n].value[active]); #else int wide = 1; #endif m = table[n].map; SetChar(_nc_wacs[m], table[n].value[(active && (wide == 1)) ? 1 : 0], A_NORMAL); T(("#%d, wide:%d SetChar(%c, %#04x) = %s", n, wide, m, table[n].value[active], _tracecchar_t(&_nc_wacs[m]))); } } } ncurses-6.0-20160213/ncurses/widechar/lib_unget_wch.c0000644000175100001440000000767211650570252020720 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2002 * ****************************************************************************/ /* ** lib_unget_wch.c ** ** The routine unget_wch(). ** */ #include MODULE_ID("$Id: lib_unget_wch.c,v 1.15 2011/10/22 16:34:50 tom Exp $") /* * Wrapper for wcrtomb() which obtains the length needed for the given * wide-character 'source'. */ NCURSES_EXPORT(size_t) _nc_wcrtomb(char *target, wchar_t source, mbstate_t * state) { int result; if (target == 0) { wchar_t temp[2]; const wchar_t *tempp = temp; temp[0] = source; temp[1] = 0; result = (int) wcsrtombs(NULL, &tempp, (size_t) 0, state); } else { result = (int) wcrtomb(target, source, state); } if (!isEILSEQ(result) && (result == 0)) result = 1; return (size_t) result; } NCURSES_EXPORT(int) NCURSES_SP_NAME(unget_wch) (NCURSES_SP_DCLx const wchar_t wch) { int result = OK; mbstate_t state; size_t length; int n; T((T_CALLED("unget_wch(%p, %#lx)"), (void *) SP_PARM, (unsigned long) wch)); init_mb(state); length = _nc_wcrtomb(0, wch, &state); if (length != (size_t) (-1) && length != 0) { char *string; if ((string = (char *) malloc(length)) != 0) { init_mb(state); /* ignore the result, since we already validated the character */ IGNORE_RC((int) wcrtomb(string, wch, &state)); for (n = (int) (length - 1); n >= 0; --n) { if (NCURSES_SP_NAME(ungetch) (NCURSES_SP_ARGx UChar(string[n])) !=OK) { result = ERR; break; } } free(string); } else { result = ERR; } } else { result = ERR; } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) unget_wch(const wchar_t wch) { return NCURSES_SP_NAME(unget_wch) (CURRENT_SCREEN, wch); } #endif ncurses-6.0-20160213/ncurses/widechar/lib_pecho_wchar.c0000644000175100001440000000553511270701424021206 0ustar tomusers/**************************************************************************** * Copyright (c) 2004,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ #include MODULE_ID("$Id: lib_pecho_wchar.c,v 1.2 2009/10/24 22:43:32 tom Exp $") NCURSES_EXPORT(int) pecho_wchar(WINDOW *pad, const cchar_t *wch) { T((T_CALLED("pecho_wchar(%p, %s)"), (void *) pad, _tracech_t(wch))); if (pad == 0) returnCode(ERR); if (!(pad->_flags & _ISPAD)) returnCode(wecho_wchar(pad, wch)); wadd_wch(pad, wch); prefresh(pad, pad->_pad._pad_y, pad->_pad._pad_x, pad->_pad._pad_top, pad->_pad._pad_left, pad->_pad._pad_bottom, pad->_pad._pad_right); returnCode(OK); } ncurses-6.0-20160213/ncurses/widechar/lib_box_set.c0000644000175100001440000001074411601430257020366 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2009,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Authors: Sven Verdoolaege and Thomas Dickey 2001,2002 * ****************************************************************************/ /* ** lib_box_set.c ** ** The routine wborder_set(). ** */ #include MODULE_ID("$Id: lib_box_set.c,v 1.6 2011/06/25 19:02:07 Vassili.Courzakis Exp $") NCURSES_EXPORT(int) wborder_set(WINDOW *win, const ARG_CH_T ls, const ARG_CH_T rs, const ARG_CH_T ts, const ARG_CH_T bs, const ARG_CH_T tl, const ARG_CH_T tr, const ARG_CH_T bl, const ARG_CH_T br) { NCURSES_SIZE_T i; NCURSES_SIZE_T endx, endy; NCURSES_CH_T wls, wrs, wts, wbs, wtl, wtr, wbl, wbr; T((T_CALLED("wborder_set(%p,%s,%s,%s,%s,%s,%s,%s,%s)"), (void *) win, _tracech_t2(1, ls), _tracech_t2(2, rs), _tracech_t2(3, ts), _tracech_t2(4, bs), _tracech_t2(5, tl), _tracech_t2(6, tr), _tracech_t2(7, bl), _tracech_t2(8, br))); if (!win) returnCode(ERR); #define RENDER_WITH_DEFAULT(ch,def) w ##ch = _nc_render(win, (ch == 0) ? *(const ARG_CH_T)def : *ch) RENDER_WITH_DEFAULT(ls, WACS_VLINE); RENDER_WITH_DEFAULT(rs, WACS_VLINE); RENDER_WITH_DEFAULT(ts, WACS_HLINE); RENDER_WITH_DEFAULT(bs, WACS_HLINE); RENDER_WITH_DEFAULT(tl, WACS_ULCORNER); RENDER_WITH_DEFAULT(tr, WACS_URCORNER); RENDER_WITH_DEFAULT(bl, WACS_LLCORNER); RENDER_WITH_DEFAULT(br, WACS_LRCORNER); T(("using %s, %s, %s, %s, %s, %s, %s, %s", _tracech_t2(1, CHREF(wls)), _tracech_t2(2, CHREF(wrs)), _tracech_t2(3, CHREF(wts)), _tracech_t2(4, CHREF(wbs)), _tracech_t2(5, CHREF(wtl)), _tracech_t2(6, CHREF(wtr)), _tracech_t2(7, CHREF(wbl)), _tracech_t2(8, CHREF(wbr)))); endx = win->_maxx; endy = win->_maxy; for (i = 0; i <= endx; i++) { win->_line[0].text[i] = wts; win->_line[endy].text[i] = wbs; } win->_line[endy].firstchar = win->_line[0].firstchar = 0; win->_line[endy].lastchar = win->_line[0].lastchar = endx; for (i = 0; i <= endy; i++) { win->_line[i].text[0] = wls; win->_line[i].text[endx] = wrs; win->_line[i].firstchar = 0; win->_line[i].lastchar = endx; } win->_line[0].text[0] = wtl; win->_line[0].text[endx] = wtr; win->_line[endy].text[0] = wbl; win->_line[endy].text[endx] = wbr; _nc_synchook(win); returnCode(OK); } ncurses-6.0-20160213/ncurses/widechar/widechars.c0000644000175100001440000001040112114445467020045 0ustar tomusers/**************************************************************************** * Copyright (c) 2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ #include #if USE_WIDEC_SUPPORT MODULE_ID("$Id: widechars.c,v 1.5 2013/03/02 18:55:51 tom Exp $") #if defined(__MINGW32__) /* * MinGW has wide-character functions, but they do not work correctly. */ int _nc_mbtowc(wchar_t *pwc, const char *s, size_t n) { int result; int count; int try; if (s != 0 && n != 0) { /* * MultiByteToWideChar() can decide to return more than one * wide-character. We want only one. Ignore any trailing null, both * in the initial count and in the conversion. */ count = 0; for (try = 1; try <= (int) n; ++try) { count = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, s, try, pwc, 0); TR(TRACE_BITS, ("...try %d:%d", try, count)); if (count > 0) { break; } } if (count < 1 || count > 2) { result = -1; } else { wchar_t actual[2]; memset(&actual, 0, sizeof(actual)); count = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, s, try, actual, 2); TR(TRACE_BITS, ("\twin32 ->%#x, %#x", actual[0], actual[1])); *pwc = actual[0]; if (actual[1] != 0) result = -1; else result = try; } } else { result = 0; } return result; } int _nc_mblen(const char *s, size_t n) { int result = -1; int count; wchar_t temp; if (s != 0 && n != 0) { count = _nc_mbtowc(&temp, s, n); if (count == 1) { int check = WideCharToMultiByte(CP_UTF8, 0, &temp, 1, NULL, 0, /* compute length only */ NULL, NULL); TR(TRACE_BITS, ("\tcheck ->%d\n", check)); if (check > 0 && (size_t) check <= n) { result = check; } } } else { result = 0; } return result; } int __MINGW_NOTHROW _nc_wctomb(char *s, wchar_t wc) { int result; int check; check = WideCharToMultiByte(CP_UTF8, 0, &wc, 1, NULL, 0, /* compute length only */ NULL, NULL); if (check > 0) { result = WideCharToMultiByte(CP_UTF8, 0, &wc, 1, s, check + 1, NULL, NULL); } else { result = -1; } return result; } #endif /* __MINGW32__ */ #endif /* USE_WIDEC_SUPPORT */ ncurses-6.0-20160213/ncurses/widechar/lib_get_wstr.c0000644000175100001440000001501511650567747020600 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2009,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ /* ** lib_get_wstr.c ** ** The routine wgetn_wstr(). ** */ #include MODULE_ID("$Id: lib_get_wstr.c,v 1.13 2011/10/22 16:31:35 tom Exp $") static int wadd_wint(WINDOW *win, wint_t *src) { cchar_t tmp; wchar_t wch[2]; wch[0] = (wchar_t) (*src); wch[1] = 0; setcchar(&tmp, wch, A_NORMAL, (short) 0, NULL); return wadd_wch(win, &tmp); } /* * This wipes out the last character, no matter whether it was a tab, control * or other character, and handles reverse wraparound. */ static wint_t * WipeOut(WINDOW *win, int y, int x, wint_t *first, wint_t *last, int echoed) { if (last > first) { *--last = '\0'; if (echoed) { int y1 = win->_cury; int x1 = win->_curx; int n; wmove(win, y, x); for (n = 0; first[n] != 0; ++n) { wadd_wint(win, first + n); } getyx(win, y, x); while (win->_cury < y1 || (win->_cury == y1 && win->_curx < x1)) waddch(win, (chtype) ' '); wmove(win, y, x); } } return last; } NCURSES_EXPORT(int) wgetn_wstr(WINDOW *win, wint_t *str, int maxlen) { SCREEN *sp = _nc_screen_of(win); TTY buf; bool oldnl, oldecho, oldraw, oldcbreak; wint_t erasec; wint_t killc; wint_t *oldstr = str; wint_t *tmpstr = str; wint_t ch; int y, x, code; T((T_CALLED("wgetn_wstr(%p,%p, %d)"), (void *) win, (void *) str, maxlen)); if (!win) returnCode(ERR); _nc_get_tty_mode(&buf); oldnl = sp->_nl; oldecho = sp->_echo; oldraw = sp->_raw; oldcbreak = sp->_cbreak; nl(); noecho(); noraw(); cbreak(); erasec = (wint_t) erasechar(); killc = (wint_t) killchar(); getyx(win, y, x); if (is_wintouched(win) || (win->_flags & _HASMOVED)) wrefresh(win); while ((code = wget_wch(win, &ch)) != ERR) { /* * Map special characters into key-codes. */ if (ch == '\r') ch = '\n'; if (ch == '\n') { code = KEY_CODE_YES; ch = KEY_ENTER; } if (ch < KEY_MIN) { if (ch == erasec) { ch = KEY_BACKSPACE; code = KEY_CODE_YES; } if (ch == killc) { ch = KEY_EOL; code = KEY_CODE_YES; } } if (code == KEY_CODE_YES) { /* * Some terminals (the Wyse-50 is the most common) generate a \n * from the down-arrow key. With this logic, it's the user's * choice whether to set kcud=\n for wget_wch(); terminating * *getn_wstr() with \n should work either way. */ if (ch == KEY_DOWN || ch == KEY_ENTER) { if (oldecho == TRUE && win->_cury == win->_maxy && win->_scroll) wechochar(win, (chtype) '\n'); break; } if (ch == KEY_LEFT || ch == KEY_BACKSPACE) { if (tmpstr > oldstr) { tmpstr = WipeOut(win, y, x, oldstr, tmpstr, oldecho); } } else if (ch == KEY_EOL) { while (tmpstr > oldstr) { tmpstr = WipeOut(win, y, x, oldstr, tmpstr, oldecho); } } else { beep(); } } else if (maxlen >= 0 && tmpstr - oldstr >= maxlen) { beep(); } else { *tmpstr++ = ch; *tmpstr = 0; if (oldecho == TRUE) { int oldy = win->_cury; if (wadd_wint(win, tmpstr - 1) == ERR) { /* * We can't really use the lower-right corner for input, * since it'll mess up bookkeeping for erases. */ win->_flags &= ~_WRAPPED; waddch(win, (chtype) ' '); tmpstr = WipeOut(win, y, x, oldstr, tmpstr, oldecho); continue; } else if (win->_flags & _WRAPPED) { /* * If the last waddch forced a wrap & scroll, adjust our * reference point for erasures. */ if (win->_scroll && oldy == win->_maxy && win->_cury == win->_maxy) { if (--y <= 0) { y = 0; } } win->_flags &= ~_WRAPPED; } wrefresh(win); } } } win->_curx = 0; win->_flags &= ~_WRAPPED; if (win->_cury < win->_maxy) win->_cury++; wrefresh(win); /* Restore with a single I/O call, to fix minor asymmetry between * raw/noraw, etc. */ sp->_nl = oldnl; sp->_echo = oldecho; sp->_raw = oldraw; sp->_cbreak = oldcbreak; (void) _nc_set_tty_mode(&buf); *tmpstr = 0; if (code == ERR) { if (tmpstr == oldstr) { *tmpstr++ = WEOF; *tmpstr = 0; } returnCode(ERR); } T(("wgetn_wstr returns %s", _nc_viswibuf(oldstr))); returnCode(OK); } ncurses-6.0-20160213/ncurses/widechar/lib_add_wch.c0000644000175100001440000002771611542066143020326 0ustar tomusers/**************************************************************************** * Copyright (c) 2004-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* ** lib_add_wch.c ** ** The routine wadd_wch(). ** */ #include #if HAVE_WCTYPE_H #include #endif MODULE_ID("$Id: lib_add_wch.c,v 1.12 2011/03/22 09:31:15 Petr.Pavlu Exp $") /* clone/adapt lib_addch.c */ static const cchar_t blankchar = NewChar(BLANK_TEXT); /* * Ugly microtweaking alert. Everything from here to end of module is * likely to be speed-critical -- profiling data sure says it is! * Most of the important screen-painting functions are shells around * wadd_wch(). So we make every effort to reduce function-call overhead * by inlining stuff, even at the cost of making wrapped copies for * export. Also we supply some internal versions that don't call the * window sync hook, for use by string-put functions. */ /* Return bit mask for clearing color pair number if given ch has color */ #define COLOR_MASK(ch) (~(attr_t)((ch) & A_COLOR ? A_COLOR : 0)) static NCURSES_INLINE cchar_t render_char(WINDOW *win, cchar_t ch) /* compute a rendition of the given char correct for the current context */ { attr_t a = WINDOW_ATTRS(win); int pair = GetPair(ch); if (ISBLANK(ch) && AttrOf(ch) == A_NORMAL && pair == 0) { /* color/pair in attrs has precedence over bkgrnd */ ch = win->_nc_bkgd; SetAttr(ch, a | AttrOf(win->_nc_bkgd)); if ((pair = GET_WINDOW_PAIR(win)) == 0) pair = GetPair(win->_nc_bkgd); SetPair(ch, pair); } else { /* color in attrs has precedence over bkgrnd */ a |= AttrOf(win->_nc_bkgd) & COLOR_MASK(a); /* color in ch has precedence */ if (pair == 0) { if ((pair = GET_WINDOW_PAIR(win)) == 0) pair = GetPair(win->_nc_bkgd); } AddAttr(ch, (a & COLOR_MASK(AttrOf(ch)))); SetPair(ch, pair); } TR(TRACE_VIRTPUT, ("render_char bkg %s (%d), attrs %s (%d) -> ch %s (%d)", _tracech_t2(1, CHREF(win->_nc_bkgd)), GetPair(win->_nc_bkgd), _traceattr(WINDOW_ATTRS(win)), GET_WINDOW_PAIR(win), _tracech_t2(3, CHREF(ch)), GetPair(ch))); return (ch); } /* check if position is legal; if not, return error */ #ifndef NDEBUG /* treat this like an assertion */ #define CHECK_POSITION(win, x, y) \ if (y > win->_maxy \ || x > win->_maxx \ || y < 0 \ || x < 0) { \ TR(TRACE_VIRTPUT, ("Alert! Win=%p _curx = %d, _cury = %d " \ "(_maxx = %d, _maxy = %d)", win, x, y, \ win->_maxx, win->_maxy)); \ return(ERR); \ } #else #define CHECK_POSITION(win, x, y) /* nothing */ #endif static bool newline_forces_scroll(WINDOW *win, NCURSES_SIZE_T * ypos) { bool result = FALSE; if (*ypos >= win->_regtop && *ypos == win->_regbottom) { *ypos = win->_regbottom; result = TRUE; } else { *ypos = (NCURSES_SIZE_T) (*ypos + 1); } return result; } /* * The _WRAPPED flag is useful only for telling an application that we've just * wrapped the cursor. We don't do anything with this flag except set it when * wrapping, and clear it whenever we move the cursor. If we try to wrap at * the lower-right corner of a window, we cannot move the cursor (since that * wouldn't be legal). So we return an error (which is what SVr4 does). * Unlike SVr4, we can successfully add a character to the lower-right corner * (Solaris 2.6 does this also, however). */ static int wrap_to_next_line(WINDOW *win) { win->_flags |= _WRAPPED; if (newline_forces_scroll(win, &(win->_cury))) { win->_curx = win->_maxx; if (!win->_scroll) return (ERR); scroll(win); } win->_curx = 0; return (OK); } static int wadd_wch_literal(WINDOW *, cchar_t); /* * Fill the given number of cells with blanks using the current background * rendition. This saves/restores the current x-position. */ static void fill_cells(WINDOW *win, int count) { cchar_t blank = blankchar; int save_x = win->_curx; int save_y = win->_cury; while (count-- > 0) { if (wadd_wch_literal(win, blank) == ERR) break; } win->_curx = (NCURSES_SIZE_T) save_x; win->_cury = (NCURSES_SIZE_T) save_y; } static int wadd_wch_literal(WINDOW *win, cchar_t ch) { int x; int y; struct ldat *line; x = win->_curx; y = win->_cury; CHECK_POSITION(win, x, y); ch = render_char(win, ch); line = win->_line + y; CHANGED_CELL(line, x); /* * Non-spacing characters are added to the current cell. * * Spacing characters that are wider than one column require some display * adjustments. */ { int len = wcwidth(CharOf(ch)); int i; int j; wchar_t *chars; if (len == 0) { /* non-spacing */ if ((x > 0 && y >= 0) || (win->_maxx >= 0 && win->_cury >= 1)) { if (x > 0 && y >= 0) chars = (win->_line[y].text[x - 1].chars); else chars = (win->_line[y - 1].text[win->_maxx].chars); for (i = 0; i < CCHARW_MAX; ++i) { if (chars[i] == 0) { TR(TRACE_VIRTPUT, ("added non-spacing %d: %x", x, (int) CharOf(ch))); chars[i] = CharOf(ch); break; } } } goto testwrapping; } else if (len > 1) { /* multi-column characters */ /* * Check if the character will fit on the current line. If it does * not fit, fill in the remainder of the line with blanks. and * move to the next line. */ if (len > win->_maxx + 1) { TR(TRACE_VIRTPUT, ("character will not fit")); return ERR; } else if (x + len > win->_maxx + 1) { int count = win->_maxx + 1 - x; TR(TRACE_VIRTPUT, ("fill %d remaining cells", count)); fill_cells(win, count); if (wrap_to_next_line(win) == ERR) return ERR; x = win->_curx; y = win->_cury; line = win->_line + y; } /* * Check for cells which are orphaned by adding this character, set * those to blanks. * * FIXME: this actually could fill j-i cells, more complicated to * setup though. */ for (i = 0; i < len; ++i) { if (isWidecBase(win->_line[y].text[x + i])) { break; } else if (isWidecExt(win->_line[y].text[x + i])) { for (j = i; x + j <= win->_maxx; ++j) { if (!isWidecExt(win->_line[y].text[x + j])) { TR(TRACE_VIRTPUT, ("fill %d orphan cells", j)); fill_cells(win, j); break; } } break; } } /* * Finally, add the cells for this character. */ for (i = 0; i < len; ++i) { cchar_t value = ch; SetWidecExt(value, i); TR(TRACE_VIRTPUT, ("multicolumn %d:%d (%d,%d)", i + 1, len, win->_begy + y, win->_begx + x)); line->text[x] = value; CHANGED_CELL(line, x); ++x; } goto testwrapping; } } /* * Single-column characters. */ line->text[x++] = ch; /* * This label is used only for wide-characters. */ testwrapping: TR(TRACE_VIRTPUT, ("cell (%ld, %ld..%d) = %s", (long) win->_cury, (long) win->_curx, x - 1, _tracech_t(CHREF(ch)))); if (x > win->_maxx) { return wrap_to_next_line(win); } win->_curx = (NCURSES_SIZE_T) x; return OK; } static NCURSES_INLINE int wadd_wch_nosync(WINDOW *win, cchar_t ch) /* the workhorse function -- add a character to the given window */ { NCURSES_SIZE_T x, y; wchar_t *s; int tabsize = 8; #if USE_REENTRANT SCREEN *sp = _nc_screen_of(win); #endif /* * If we are using the alternate character set, forget about locale. * Otherwise, if the locale claims the code is printable, treat it that * way. */ if ((AttrOf(ch) & A_ALTCHARSET) || iswprint((wint_t) CharOf(ch))) return wadd_wch_literal(win, ch); /* * Handle carriage control and other codes that are not printable, or are * known to expand to more than one character according to unctrl(). */ x = win->_curx; y = win->_cury; switch (CharOf(ch)) { case '\t': #if USE_REENTRANT tabsize = *ptrTabsize(sp); #else tabsize = TABSIZE; #endif x = (NCURSES_SIZE_T) (x + (tabsize - (x % tabsize))); /* * Space-fill the tab on the bottom line so that we'll get the * "correct" cursor position. */ if ((!win->_scroll && (y == win->_regbottom)) || (x <= win->_maxx)) { cchar_t blank = blankchar; AddAttr(blank, AttrOf(ch)); while (win->_curx < x) { if (wadd_wch_literal(win, blank) == ERR) return (ERR); } break; } else { wclrtoeol(win); win->_flags |= _WRAPPED; if (newline_forces_scroll(win, &y)) { x = win->_maxx; if (win->_scroll) { scroll(win); x = 0; } } else { x = 0; } } break; case '\n': wclrtoeol(win); if (newline_forces_scroll(win, &y)) { if (win->_scroll) scroll(win); else return (ERR); } /* FALLTHRU */ case '\r': x = 0; win->_flags &= ~_WRAPPED; break; case '\b': if (x == 0) return (OK); x--; win->_flags &= ~_WRAPPED; break; default: if ((s = wunctrl(&ch)) != 0) { while (*s) { cchar_t sch; SetChar(sch, *s++, AttrOf(ch)); if_EXT_COLORS(SetPair(sch, GetPair(ch))); if (wadd_wch_literal(win, sch) == ERR) return ERR; } return OK; } return ERR; } win->_curx = x; win->_cury = y; return OK; } /* * The versions below call _nc_synchook(). We wanted to avoid this in the * version exported for string puts; they'll call _nc_synchook once at end * of run. */ /* These are actual entry points */ NCURSES_EXPORT(int) wadd_wch(WINDOW *win, const cchar_t *wch) { int code = ERR; TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_CALLED("wadd_wch(%p, %s)"), (void *) win, _tracecchar_t(wch))); if (win && (wadd_wch_nosync(win, *wch) != ERR)) { _nc_synchook(win); code = OK; } TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_RETURN("%d"), code)); return (code); } NCURSES_EXPORT(int) wecho_wchar(WINDOW *win, const cchar_t *wch) { int code = ERR; TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_CALLED("wechochar(%p, %s)"), (void *) win, _tracecchar_t(wch))); if (win && (wadd_wch_nosync(win, *wch) != ERR)) { bool save_immed = win->_immed; win->_immed = TRUE; _nc_synchook(win); win->_immed = save_immed; code = OK; } TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_RETURN("%d"), code)); return (code); } ncurses-6.0-20160213/ncurses/widechar/lib_erasewchar.c0000644000175100001440000000577612302246404021056 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2010,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2002 * ****************************************************************************/ #include MODULE_ID("$Id: lib_erasewchar.c,v 1.3 2014/02/23 01:21:08 tom Exp $") /* * erasewchar() * * Return erase character as given in cur_term->Ottyb. * */ NCURSES_EXPORT(int) erasewchar(wchar_t *wch) { int value; int result = ERR; T((T_CALLED("erasewchar()"))); if ((value = erasechar()) != ERR) { *wch = (wchar_t) value; result = OK; } returnCode(result); } /* * killwchar() * * Return kill character as given in cur_term->Ottyb. * */ NCURSES_EXPORT(int) killwchar(wchar_t *wch) { int value; int result = ERR; T((T_CALLED("killwchar()"))); if ((value = killchar()) != ERR) { *wch = (wchar_t) value; result = OK; } returnCode(result); } ncurses-6.0-20160213/ncurses/widechar/lib_get_wch.c0000644000175100001440000001044111570277215020345 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2002-on * ****************************************************************************/ /* ** lib_get_wch.c ** ** The routine get_wch(). ** */ #include #include MODULE_ID("$Id: lib_get_wch.c,v 1.23 2011/05/28 23:00:29 tom Exp $") NCURSES_EXPORT(int) wget_wch(WINDOW *win, wint_t *result) { SCREEN *sp; int code; char buffer[(MB_LEN_MAX * 9) + 1]; /* allow some redundant shifts */ int status; size_t count = 0; int value = 0; wchar_t wch; #ifndef state_unused mbstate_t state; #endif T((T_CALLED("wget_wch(%p)"), (void *) win)); /* * We can get a stream of single-byte characters and KEY_xxx codes from * _nc_wgetch(), while we want to return a wide character or KEY_xxx code. */ _nc_lock_global(curses); sp = _nc_screen_of(win); if (sp != 0) { for (;;) { T(("reading %d of %d", (int) count + 1, (int) sizeof(buffer))); code = _nc_wgetch(win, &value, TRUE EVENTLIST_2nd((_nc_eventlist *) 0)); if (code == ERR) { break; } else if (code == KEY_CODE_YES) { /* * If we were processing an incomplete multibyte character, * return an error since we have a KEY_xxx code which * interrupts it. For some cases, we could improve this by * writing a new version of lib_getch.c(!), but it is not clear * whether the improvement would be worth the effort. */ if (count != 0) { safe_ungetch(SP_PARM, value); code = ERR; } break; } else if (count + 1 >= sizeof(buffer)) { safe_ungetch(SP_PARM, value); code = ERR; break; } else { buffer[count++] = (char) UChar(value); reset_mbytes(state); status = count_mbytes(buffer, count, state); if (status >= 0) { reset_mbytes(state); if (check_mbytes(wch, buffer, count, state) != status) { code = ERR; /* the two calls should match */ safe_ungetch(SP_PARM, value); } value = wch; break; } } } } else { code = ERR; } if (result != 0) *result = (wint_t) value; _nc_unlock_global(curses); T(("result %#o", value)); returnCode(code); } ncurses-6.0-20160213/ncurses/widechar/lib_wunctrl.c0000644000175100001440000000552712063161526020427 0ustar tomusers/**************************************************************************** * Copyright (c) 2001-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* ** lib_wunctrl.c ** ** The routine wunctrl(). ** */ #include MODULE_ID("$Id: lib_wunctrl.c,v 1.16 2012/12/15 20:53:42 tom Exp $") NCURSES_EXPORT(wchar_t *) NCURSES_SP_NAME(wunctrl) (NCURSES_SP_DCLx cchar_t *wc) { static wchar_t str[CCHARW_MAX + 1], *wsp; wchar_t *result; if (wc == 0) { result = 0; } else if (SP_PARM != 0 && Charable(*wc)) { const char *p = NCURSES_SP_NAME(unctrl) (NCURSES_SP_ARGx (unsigned) _nc_to_char((wint_t)CharOf(*wc))); for (wsp = str; *p; ++p) { *wsp++ = (wchar_t) _nc_to_widechar(*p); } *wsp = 0; result = str; } else { result = wc->chars; } return result; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(wchar_t *) wunctrl(cchar_t *wc) { return NCURSES_SP_NAME(wunctrl) (CURRENT_SCREEN, wc); } #endif ncurses-6.0-20160213/ncurses/widechar/lib_in_wch.c0000644000175100001440000000555111270700703020170 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2006,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas Dickey * ****************************************************************************/ /* ** lib_in_wch.c ** ** The routine win_wch(). ** */ #include MODULE_ID("$Id: lib_in_wch.c,v 1.5 2009/10/24 22:37:55 tom Exp $") NCURSES_EXPORT(int) win_wch(WINDOW *win, cchar_t *wcval) { int row, col; int code = OK; TR(TRACE_CCALLS, (T_CALLED("win_wch(%p,%p)"), (void *) win, (void *) wcval)); if (win != 0 && wcval != 0) { getyx(win, row, col); *wcval = win->_line[row].text[col]; TR(TRACE_CCALLS, ("data %s", _tracecchar_t(wcval))); } else { code = ERR; } TR(TRACE_CCALLS, (T_RETURN("%d"), code)); return (code); } ncurses-6.0-20160213/ncurses/widechar/lib_key_name.c0000644000175100001440000000531211074204522020504 0ustar tomusers/**************************************************************************** * Copyright (c) 2007 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* ** lib_key_name.c ** ** The routine key_name(). ** */ #include MODULE_ID("$Id: lib_key_name.c,v 1.3 2008/10/11 20:15:14 tom Exp $") NCURSES_EXPORT(NCURSES_CONST char *) key_name(wchar_t c) { cchar_t my_cchar; wchar_t *my_wchars; size_t len; /* FIXME: move to _nc_globals */ static char result[MB_LEN_MAX + 1]; memset(&my_cchar, 0, sizeof(my_cchar)); my_cchar.chars[0] = c; my_cchar.chars[1] = L'\0'; my_wchars = wunctrl(&my_cchar); len = wcstombs(result, my_wchars, sizeof(result) - 1); if (isEILSEQ(len) || (len == 0)) { return 0; } result[len] = '\0'; return result; } ncurses-6.0-20160213/ncurses/widechar/lib_vline_set.c0000644000175100001440000000607611503262372020720 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas Dickey 2002 * ****************************************************************************/ /* ** lib_vline_set.c ** ** The routine wvline_set(). ** */ #include MODULE_ID("$Id: lib_vline_set.c,v 1.4 2010/12/19 01:50:50 tom Exp $") NCURSES_EXPORT(int) wvline_set(WINDOW *win, const cchar_t *ch, int n) { int code = ERR; int row, col; int end; T((T_CALLED("wvline(%p,%s,%d)"), (void *) win, _tracecchar_t(ch), n)); if (win) { NCURSES_CH_T wch; row = win->_cury; col = win->_curx; end = row + n - 1; if (end > win->_maxy) end = win->_maxy; if (ch == 0) wch = *WACS_VLINE; else wch = *ch; wch = _nc_render(win, wch); while (end >= row) { struct ldat *line = &(win->_line[end]); line->text[col] = wch; CHANGED_CELL(line, col); end--; } _nc_synchook(win); code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/widechar/lib_slk_wset.c0000644000175100001440000000634011650563264020564 0ustar tomusers/**************************************************************************** * Copyright (c) 2003-2002,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ /* * lib_slk_wset.c * Set soft label text. */ #include #if HAVE_WCTYPE_H #include #endif MODULE_ID("$Id: lib_slk_wset.c,v 1.13 2011/10/22 15:52:20 tom Exp $") NCURSES_EXPORT(int) slk_wset(int i, const wchar_t *astr, int format) { int result = ERR; size_t arglen; const wchar_t *str; char *mystr; mbstate_t state; T((T_CALLED("slk_wset(%d, %s, %d)"), i, _nc_viswbuf(astr), format)); if (astr != 0) { init_mb(state); str = astr; if ((arglen = wcsrtombs(NULL, &str, (size_t) 0, &state)) != (size_t) -1) { if ((mystr = (char *) _nc_doalloc(0, arglen + 1)) != 0) { str = astr; if (wcsrtombs(mystr, &str, arglen, &state) != (size_t) -1) { /* glibc documentation claims that the terminating L'\0' * is written, but it is not... */ mystr[arglen] = 0; result = slk_set(i, mystr, format); } free(mystr); } } } returnCode(result); } ncurses-6.0-20160213/ncurses/widechar/charable.c0000644000175100001440000000575511033757335017654 0ustar tomusers/**************************************************************************** * Copyright (c) 2003-2005,2008 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* ** Support functions for wide/narrow conversion. */ #include MODULE_ID("$Id: charable.c,v 1.5 2008/07/05 20:51:41 tom Exp $") NCURSES_EXPORT(bool) _nc_is_charable(wchar_t ch) { bool result; #if HAVE_WCTOB result = (wctob((wint_t) ch) == (int) ch); #else result = (_nc_to_char(ch) >= 0); #endif return result; } NCURSES_EXPORT(int) _nc_to_char(wint_t ch) { int result; #if HAVE_WCTOB result = wctob(ch); #elif HAVE_WCTOMB char temp[MB_LEN_MAX]; result = wctomb(temp, ch); if (strlen(temp) == 1) result = UChar(temp[0]); else result = -1; #endif return result; } NCURSES_EXPORT(wint_t) _nc_to_widechar(int ch) { wint_t result; #if HAVE_BTOWC result = btowc(ch); #elif HAVE_MBTOWC wchar_t convert; char temp[2]; temp[0] = ch; temp[1] = '\0'; if (mbtowc(&convert, temp, 1) >= 0) result = convert; else result = WEOF; #endif return result; } ncurses-6.0-20160213/ncurses/widechar/lib_vid_attr.c0000644000175100001440000002535012344707232020543 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_vid_attr.c,v 1.23 2014/06/07 22:13:46 tom Exp $") #define doPut(mode) \ TPUTS_TRACE(#mode); \ NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx mode, 1, outc) #define TurnOn(mask, mode) \ if ((turn_on & mask) && mode) { doPut(mode); } #define TurnOff(mask, mode) \ if ((turn_off & mask) && mode) { doPut(mode); turn_off &= ~mask; } /* if there is no current screen, assume we *can* do color */ #define SetColorsIf(why, old_attr, old_pair) \ if (can_color && (why)) { \ TR(TRACE_ATTRS, ("old pair = %d -- new pair = %d", old_pair, pair)); \ if ((pair != old_pair) \ || (fix_pair0 && (pair == 0)) \ || (reverse ^ ((old_attr & A_REVERSE) != 0))) { \ NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_ARGx \ old_pair, pair, \ reverse, outc); \ } \ } #define set_color(mode, pair) \ mode &= ALL_BUT_COLOR; \ mode |= (attr_t) ColorPair(pair) NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_puts) (NCURSES_SP_DCLx attr_t newmode, NCURSES_PAIRS_T pair, void *opts GCC_UNUSED, NCURSES_SP_OUTC outc) { #if NCURSES_EXT_COLORS static attr_t previous_attr = A_NORMAL; static int previous_pair = 0; attr_t turn_on, turn_off; bool reverse = FALSE; bool can_color = (SP_PARM == 0 || SP_PARM->_coloron); #if NCURSES_EXT_FUNCS bool fix_pair0 = (SP_PARM != 0 && SP_PARM->_coloron && !SP_PARM->_default_color); #else #define fix_pair0 FALSE #endif newmode &= A_ATTRIBUTES; T((T_CALLED("vid_puts(%s,%d)"), _traceattr(newmode), pair)); /* this allows us to go on whether or not newterm() has been called */ if (SP_PARM) { previous_attr = AttrOf(SCREEN_ATTRS(SP_PARM)); previous_pair = GetPair(SCREEN_ATTRS(SP_PARM)); } TR(TRACE_ATTRS, ("previous attribute was %s, %d", _traceattr(previous_attr), previous_pair)); #if !USE_XMC_SUPPORT if ((SP_PARM != 0) && (magic_cookie_glitch > 0)) newmode &= ~(SP_PARM->_xmc_suppress); #endif /* * If we have a terminal that cannot combine color with video * attributes, use the colors in preference. */ if ((pair != 0 || fix_pair0) && (no_color_video > 0)) { /* * If we had chosen the A_xxx definitions to correspond to the * no_color_video mask, we could simply shift it up and mask off the * attributes. But we did not (actually copied Solaris' definitions). * However, this is still simpler/faster than a lookup table. * * The 63 corresponds to A_STANDOUT, A_UNDERLINE, A_REVERSE, A_BLINK, * A_DIM, A_BOLD which are 1:1 with no_color_video. The bits that * correspond to A_INVIS, A_PROTECT (192) must be shifted up 1 and * A_ALTCHARSET (256) down 2 to line up. We use the NCURSES_BITS * macro so this will work properly for the wide-character layout. */ unsigned value = (unsigned) no_color_video; attr_t mask = NCURSES_BITS((value & 63) | ((value & 192) << 1) | ((value & 256) >> 2), 8); if ((mask & A_REVERSE) != 0 && (newmode & A_REVERSE) != 0) { reverse = TRUE; mask &= ~A_REVERSE; } newmode &= ~mask; } if (newmode == previous_attr && pair == previous_pair) returnCode(OK); if (reverse) { newmode &= ~A_REVERSE; } turn_off = (~newmode & previous_attr) & ALL_BUT_COLOR; turn_on = (newmode & ~(previous_attr & TPARM_ATTR)) & ALL_BUT_COLOR; SetColorsIf(((pair == 0) && !fix_pair0), previous_attr, previous_pair); if (newmode == A_NORMAL) { if ((previous_attr & A_ALTCHARSET) && exit_alt_charset_mode) { doPut(exit_alt_charset_mode); previous_attr &= ~A_ALTCHARSET; } if (previous_attr) { if (exit_attribute_mode) { doPut(exit_attribute_mode); } else { if (!SP_PARM || SP_PARM->_use_rmul) { TurnOff(A_UNDERLINE, exit_underline_mode); } if (!SP_PARM || SP_PARM->_use_rmso) { TurnOff(A_STANDOUT, exit_standout_mode); } #if USE_ITALIC if (!SP_PARM || SP_PARM->_use_ritm) { TurnOff(A_ITALIC, exit_italics_mode); } #endif } previous_attr &= ALL_BUT_COLOR; previous_pair = 0; } SetColorsIf((pair != 0) || fix_pair0, previous_attr, previous_pair); } else if (set_attributes) { if (turn_on || turn_off) { TPUTS_TRACE("set_attributes"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_9(set_attributes, (newmode & A_STANDOUT) != 0, (newmode & A_UNDERLINE) != 0, (newmode & A_REVERSE) != 0, (newmode & A_BLINK) != 0, (newmode & A_DIM) != 0, (newmode & A_BOLD) != 0, (newmode & A_INVIS) != 0, (newmode & A_PROTECT) != 0, (newmode & A_ALTCHARSET) != 0), 1, outc); previous_attr &= ALL_BUT_COLOR; previous_pair = 0; } #if USE_ITALIC if (!SP_PARM || SP_PARM->_use_ritm) { if (turn_on & A_ITALIC) { TurnOn(A_ITALIC, enter_italics_mode); } else if (turn_off & A_ITALIC) { TurnOff(A_ITALIC, exit_italics_mode); } } #endif SetColorsIf((pair != 0) || fix_pair0, previous_attr, previous_pair); } else { TR(TRACE_ATTRS, ("turning %s off", _traceattr(turn_off))); TurnOff(A_ALTCHARSET, exit_alt_charset_mode); if (!SP_PARM || SP_PARM->_use_rmul) { TurnOff(A_UNDERLINE, exit_underline_mode); } if (!SP_PARM || SP_PARM->_use_rmso) { TurnOff(A_STANDOUT, exit_standout_mode); } #if USE_ITALIC if (!SP_PARM || SP_PARM->_use_ritm) { TurnOff(A_ITALIC, exit_italics_mode); } #endif if (turn_off && exit_attribute_mode) { doPut(exit_attribute_mode); turn_on |= (newmode & ALL_BUT_COLOR); previous_attr &= ALL_BUT_COLOR; previous_pair = 0; } SetColorsIf((pair != 0) || fix_pair0, previous_attr, previous_pair); TR(TRACE_ATTRS, ("turning %s on", _traceattr(turn_on))); /* *INDENT-OFF* */ TurnOn(A_ALTCHARSET, enter_alt_charset_mode); TurnOn(A_BLINK, enter_blink_mode); TurnOn(A_BOLD, enter_bold_mode); TurnOn(A_DIM, enter_dim_mode); TurnOn(A_REVERSE, enter_reverse_mode); TurnOn(A_STANDOUT, enter_standout_mode); TurnOn(A_PROTECT, enter_protected_mode); TurnOn(A_INVIS, enter_secure_mode); TurnOn(A_UNDERLINE, enter_underline_mode); #if USE_ITALIC TurnOn(A_ITALIC, enter_italics_mode); #endif #if USE_WIDEC_SUPPORT TurnOn(A_HORIZONTAL, enter_horizontal_hl_mode); TurnOn(A_LEFT, enter_left_hl_mode); TurnOn(A_LOW, enter_low_hl_mode); TurnOn(A_RIGHT, enter_right_hl_mode); TurnOn(A_TOP, enter_top_hl_mode); TurnOn(A_VERTICAL, enter_vertical_hl_mode); #endif /* *INDENT-ON* */ } if (reverse) newmode |= A_REVERSE; if (SP_PARM) { SetAttr(SCREEN_ATTRS(SP_PARM), newmode); SetPair(SCREEN_ATTRS(SP_PARM), pair); } else { previous_attr = newmode; previous_pair = pair; } returnCode(OK); #else T((T_CALLED("vid_puts(%s,%d)"), _traceattr(newmode), (int) pair)); set_color(newmode, pair); returnCode(NCURSES_SP_NAME(vidputs) (NCURSES_SP_ARGx newmode, outc)); #endif } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) vid_puts(attr_t newmode, NCURSES_PAIRS_T pair, void *opts GCC_UNUSED, NCURSES_OUTC outc) { SetSafeOutcWrapper(outc); return NCURSES_SP_NAME(vid_puts) (CURRENT_SCREEN, newmode, pair, opts, _nc_outc_wrapper); } #endif #undef vid_attr NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_attr) (NCURSES_SP_DCLx attr_t newmode, NCURSES_PAIRS_T pair, void *opts) { T((T_CALLED("vid_attr(%s,%d)"), _traceattr(newmode), (int) pair)); returnCode(NCURSES_SP_NAME(vid_puts) (NCURSES_SP_ARGx newmode, pair, opts, NCURSES_SP_NAME(_nc_putchar))); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) vid_attr(attr_t newmode, NCURSES_PAIRS_T pair, void *opts) { return NCURSES_SP_NAME(vid_attr) (CURRENT_SCREEN, newmode, pair, opts); } #endif /* * This implementation uses the same mask values for A_xxx and WA_xxx, so * we can use termattrs() for part of the logic. */ NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(term_attrs) (NCURSES_SP_DCL0) { attr_t attrs = 0; T((T_CALLED("term_attrs()"))); if (SP_PARM) { attrs = NCURSES_SP_NAME(termattrs) (NCURSES_SP_ARG); /* these are only supported for wide-character mode */ if (enter_horizontal_hl_mode) attrs |= WA_HORIZONTAL; if (enter_left_hl_mode) attrs |= WA_LEFT; if (enter_low_hl_mode) attrs |= WA_LOW; if (enter_right_hl_mode) attrs |= WA_RIGHT; if (enter_top_hl_mode) attrs |= WA_TOP; if (enter_vertical_hl_mode) attrs |= WA_VERTICAL; } returnAttr(attrs); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(attr_t) term_attrs(void) { return NCURSES_SP_NAME(term_attrs) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/widechar/lib_inwstr.c0000644000175100001440000000754111570276015020257 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2009,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas Dickey * ****************************************************************************/ /* ** lib_inwstr.c ** ** The routines winnwstr() and winwstr(). ** */ #include MODULE_ID("$Id: lib_inwstr.c,v 1.6 2011/05/28 22:49:49 tom Exp $") NCURSES_EXPORT(int) winnwstr(WINDOW *win, wchar_t *wstr, int n) { int row, col, inx; int count = 0; int last = 0; cchar_t *text; wchar_t wch; T((T_CALLED("winnwstr(%p,%p,%d)"), (void *) win, (void *) wstr, n)); if (wstr != 0) { if (win) { getyx(win, row, col); text = win->_line[row].text; while (count < n && count != ERR) { if (!isWidecExt(text[col])) { for (inx = 0; (inx < CCHARW_MAX) && ((wch = text[col].chars[inx]) != 0); ++inx) { if (count + 1 > n) { if ((count = last) == 0) { count = ERR; /* error if we store nothing */ } break; } wstr[count++] = wch; } } last = count; if (++col > win->_maxx) { break; } } } if (count > 0) { wstr[count] = '\0'; T(("winnwstr returns %s", _nc_viswbuf(wstr))); } } returnCode(count); } /* * X/Open says winwstr() returns OK if not ERR. If that is not a blunder, it * must have a null termination on the string (see above). Unlike winnstr(), * it does not define what happens for a negative count with winnwstr(). */ NCURSES_EXPORT(int) winwstr(WINDOW *win, wchar_t *wstr) { int result = OK; T((T_CALLED("winwstr(%p,%p)"), (void *) win, (void *) wstr)); if (win == 0) { result = ERR; } else if (winnwstr(win, wstr, CCHARW_MAX * (win->_maxx - win->_curx + 1)) == ERR) { result = ERR; } returnCode(result); } ncurses-6.0-20160213/ncurses/modules0000644000175100001440000002542412101053023015523 0ustar tomusers# $Id: modules,v 1.120 2013/01/26 22:17:55 tom Exp $ ############################################################################## # Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # @ base # Library objects hardscroll lib $(serial) $(HEADER_DEPS) hashmap lib $(serial) $(HEADER_DEPS) lib_addch lib $(base) $(HEADER_DEPS) lib_addstr lib $(base) $(HEADER_DEPS) lib_beep lib $(base) $(HEADER_DEPS) lib_bkgd lib $(base) $(HEADER_DEPS) lib_box lib $(base) $(HEADER_DEPS) lib_chgat lib $(base) $(HEADER_DEPS) lib_clear lib $(base) $(HEADER_DEPS) lib_clearok lib $(base) $(HEADER_DEPS) lib_clrbot lib $(base) $(HEADER_DEPS) lib_clreol lib $(base) $(HEADER_DEPS) lib_color lib $(base) $(HEADER_DEPS) $(INCDIR)/tic.h lib_colorset lib $(base) $(HEADER_DEPS) lib_delch lib $(base) $(HEADER_DEPS) lib_delwin lib $(base) $(HEADER_DEPS) lib_echo lib $(base) $(HEADER_DEPS) lib_endwin lib $(base) $(HEADER_DEPS) lib_erase lib $(base) $(HEADER_DEPS) lib_flash lib $(base) $(HEADER_DEPS) lib_gen lib . $(HEADER_DEPS) lib_getch lib $(base) $(HEADER_DEPS) $(srcdir)/fifo_defs.h lib_getstr lib $(base) $(HEADER_DEPS) lib_hline lib $(base) $(HEADER_DEPS) lib_immedok lib $(base) $(HEADER_DEPS) lib_inchstr lib $(base) $(HEADER_DEPS) lib_initscr lib $(base) $(HEADER_DEPS) lib_insch lib $(base) $(HEADER_DEPS) lib_insdel lib $(base) $(HEADER_DEPS) lib_insnstr lib $(base) $(HEADER_DEPS) lib_instr lib $(base) $(HEADER_DEPS) lib_isendwin lib $(base) $(HEADER_DEPS) lib_leaveok lib $(base) $(HEADER_DEPS) lib_mouse lib $(base) $(HEADER_DEPS) $(INCDIR)/tic.h lib_move lib $(base) $(HEADER_DEPS) lib_mvcur lib $(serial) $(HEADER_DEPS) $(INCDIR)/tic.h $(srcdir)/../progs/dump_entry.h lib_mvwin lib $(base) $(HEADER_DEPS) lib_newterm lib $(base) $(HEADER_DEPS) $(INCDIR)/tic.h lib_newwin lib $(base) $(HEADER_DEPS) lib_nl lib $(base) $(HEADER_DEPS) lib_overlay lib $(base) $(HEADER_DEPS) lib_pad lib $(base) $(HEADER_DEPS) lib_printw lib $(base) $(HEADER_DEPS) lib_redrawln lib $(base) $(HEADER_DEPS) lib_refresh lib $(base) $(HEADER_DEPS) lib_restart lib $(base) $(HEADER_DEPS) lib_scanw lib $(base) $(HEADER_DEPS) lib_screen lib $(base) $(HEADER_DEPS) lib_scroll lib $(base) $(HEADER_DEPS) lib_scrollok lib $(base) $(HEADER_DEPS) lib_scrreg lib $(base) $(HEADER_DEPS) lib_set_term lib $(base) $(HEADER_DEPS) $(INCDIR)/tic.h lib_slk lib $(base) $(HEADER_DEPS) lib_slkatr_set lib $(base) $(HEADER_DEPS) lib_slkatrof lib $(base) $(HEADER_DEPS) lib_slkatron lib $(base) $(HEADER_DEPS) lib_slkatrset lib $(base) $(HEADER_DEPS) lib_slkattr lib $(base) $(HEADER_DEPS) lib_slkclear lib $(base) $(HEADER_DEPS) lib_slkcolor lib $(base) $(HEADER_DEPS) lib_slkinit lib $(base) $(HEADER_DEPS) lib_slklab lib $(base) $(HEADER_DEPS) lib_slkrefr lib $(base) $(HEADER_DEPS) lib_slkset lib $(base) $(HEADER_DEPS) lib_slktouch lib $(base) $(HEADER_DEPS) lib_touch lib $(base) $(HEADER_DEPS) lib_tracedmp lib $(trace) $(HEADER_DEPS) lib_tracemse lib $(trace) $(HEADER_DEPS) lib_tstp lib $(serial) $(HEADER_DEPS) $(srcdir)/SigAction.h lib_ungetch lib $(base) $(HEADER_DEPS) $(srcdir)/fifo_defs.h lib_vidattr lib $(serial) $(HEADER_DEPS) lib_vline lib $(base) $(HEADER_DEPS) lib_wattroff lib $(base) $(HEADER_DEPS) lib_wattron lib $(base) $(HEADER_DEPS) lib_winch lib $(base) $(HEADER_DEPS) lib_window lib $(base) $(HEADER_DEPS) link_test lib . $(HEADER_DEPS) nc_panel lib $(base) $(HEADER_DEPS) safe_sprintf lib $(base) $(HEADER_DEPS) tty_update lib $(serial) $(HEADER_DEPS) varargs lib $(trace) $(HEADER_DEPS) # Modules for porting vsscanf lib $(base) $(HEADER_DEPS) # actually an extension, but with its own configure option (--disable-leaks) lib_freeall lib $(base) $(HEADER_DEPS) $(INCDIR)/tic.h # XSI extensions to the base library (wide-character) @ widechar charable lib $(wide) $(HEADER_DEPS) lib_add_wch lib $(wide) $(HEADER_DEPS) lib_box_set lib $(wide) $(HEADER_DEPS) lib_cchar lib $(wide) $(HEADER_DEPS) lib_erasewchar lib $(wide) $(HEADER_DEPS) lib_get_wch lib $(wide) $(HEADER_DEPS) lib_get_wstr lib $(wide) $(HEADER_DEPS) lib_hline_set lib $(wide) $(HEADER_DEPS) lib_in_wch lib $(wide) $(HEADER_DEPS) lib_in_wchnstr lib $(wide) $(HEADER_DEPS) lib_ins_wch lib $(wide) $(HEADER_DEPS) lib_inwstr lib $(wide) $(HEADER_DEPS) lib_key_name lib $(wide) $(HEADER_DEPS) lib_pecho_wchar lib $(wide) $(HEADER_DEPS) lib_slk_wset lib $(wide) $(HEADER_DEPS) lib_unget_wch lib $(wide) $(HEADER_DEPS) lib_vid_attr lib $(wide) $(HEADER_DEPS) lib_vline_set lib $(wide) $(HEADER_DEPS) lib_wacs lib $(wide) $(HEADER_DEPS) lib_wunctrl lib $(wide) $(HEADER_DEPS) # Extensions to the base library @ ext_funcs expanded lib . $(HEADER_DEPS) legacy_coding lib $(base) $(HEADER_DEPS) lib_dft_fgbg lib $(base) $(HEADER_DEPS) lib_print lib $(tinfo) $(HEADER_DEPS) resizeterm lib $(base) $(HEADER_DEPS) trace_xnames lib $(trace) $(HEADER_DEPS) use_screen lib $(tinfo) $(HEADER_DEPS) use_window lib $(base) $(HEADER_DEPS) wresize lib $(base) $(HEADER_DEPS) # Support for termcap (and tic, etc.), which can be a separate library @ termlib access lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h add_tries lib $(tinfo) $(HEADER_DEPS) alloc_ttype lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h codes lib . $(HEADER_DEPS) comp_captab lib . $(HEADER_DEPS) $(INCDIR)/tic.h ../include/hashsize.h comp_error lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h comp_hash lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h ../include/hashsize.h db_iterator lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h doalloc lib $(tinfo) $(HEADER_DEPS) entries lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h fallback lib . $(HEADER_DEPS) free_ttype lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h getenv_num lib $(tinfo) $(HEADER_DEPS) home_terminfo lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h init_keytry lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h init_keytry.h lib_acs lib $(tinfo) $(HEADER_DEPS) lib_baudrate lib $(tinfo) $(HEADER_DEPS) ../include/termcap.h lib_cur_term lib $(tinfo) $(HEADER_DEPS) ../include/termcap.h lib_data lib $(tinfo) $(HEADER_DEPS) lib_has_cap lib $(tinfo) $(HEADER_DEPS) lib_kernel lib $(tinfo) $(HEADER_DEPS) lib_keyname lib . $(HEADER_DEPS) $(INCDIR)/tic.h lib_longname lib $(tinfo) $(HEADER_DEPS) lib_napms lib $(tinfo) $(HEADER_DEPS) lib_options lib $(tinfo) $(HEADER_DEPS) lib_raw lib $(tinfo) $(HEADER_DEPS) lib_setup lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h lib_termcap lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h ../include/termcap.h $(INCDIR)/capdefaults.c lib_termname lib $(tinfo) $(HEADER_DEPS) lib_tgoto lib $(tinfo) $(HEADER_DEPS) ../include/termcap.h lib_ti lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h lib_tparm lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h lib_tputs lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h ../include/termcap.h lib_trace lib $(trace) $(HEADER_DEPS) $(INCDIR)/tic.h lib_traceatr lib $(trace) $(HEADER_DEPS) lib_tracebits lib $(trace) $(HEADER_DEPS) lib_tracechr lib $(trace) $(HEADER_DEPS) lib_ttyflags lib $(tinfo) $(HEADER_DEPS) lib_twait lib $(serial) $(HEADER_DEPS) name_match lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h names lib . $(HEADER_DEPS) obsolete lib $(tinfo) $(HEADER_DEPS) read_entry lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h $(INCDIR)/hashed_db.h read_termcap lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h strings lib $(tinfo) $(HEADER_DEPS) trace_buf lib $(trace) $(HEADER_DEPS) trace_tries lib $(trace) $(HEADER_DEPS) tries lib $(base) $(HEADER_DEPS) trim_sgr0 lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h unctrl lib . $(HEADER_DEPS) visbuf lib $(trace) $(HEADER_DEPS) $(INCDIR)/tic.h # Modules used only for tic, other programs using internal interfaces @ ticlib alloc_entry lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h captoinfo lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h comp_expand lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h comp_parse lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h comp_scan lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h parse_entry lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h ../include/parametrized.h write_entry lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h $(INCDIR)/hashed_db.h # Extensions to the termlib library @ ext_tinfo define_key lib $(base) $(HEADER_DEPS) hashed_db lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h $(INCDIR)/hashed_db.h key_defined lib $(base) $(HEADER_DEPS) keybound lib $(base) $(HEADER_DEPS) keyok lib $(base) $(HEADER_DEPS) version lib $(base) $(HEADER_DEPS) # Porting @ port_drivers lib_driver lib $(base) $(HEADER_DEPS) @ port_win32con gettimeofday lib $(win32con) $(HEADER_DEPS) wcwidth lib $(win32con) $(HEADER_DEPS) widechars lib $(wide) $(HEADER_DEPS) win_driver lib $(win32con) $(HEADER_DEPS) @ port_tinfo tinfo_driver lib $(tinfo) $(HEADER_DEPS) $(INCDIR)/tic.h # vile:makemode ncurses-6.0-20160213/ncurses/curses.priv.h0000644000175100001440000023565212657655704016630 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer * ****************************************************************************/ /* * $Id: curses.priv.h,v 1.552 2016/02/13 16:37:24 tom Exp $ * * curses.priv.h * * Header file for curses library objects which are private to * the library. * */ #ifndef CURSES_PRIV_H #define CURSES_PRIV_H 1 /* *INDENT-OFF* */ #include #ifdef __cplusplus extern "C" { #endif #include #if USE_RCS_IDS #define MODULE_ID(id) static const char Ident[] = id; #else #define MODULE_ID(id) /*nothing*/ #endif #include /* for offsetof */ #include #include #include #include #if HAVE_UNISTD_H #include #endif #if HAVE_SYS_BSDTYPES_H #include /* needed for ISC */ #endif #if HAVE_LIMITS_H # include #elif HAVE_SYS_PARAM_H # include #endif #include #include #include #if defined __hpux # ifndef EILSEQ # define EILSEQ 47 # endif #endif #ifndef PATH_MAX # if defined(_POSIX_PATH_MAX) # define PATH_MAX _POSIX_PATH_MAX # elif defined(MAXPATHLEN) # define PATH_MAX MAXPATHLEN # else # define PATH_MAX 255 /* the Posix minimum path-size */ # endif #endif #if DECL_ERRNO extern int errno; #endif /* Some systems have a broken 'select()', but workable 'poll()'. Use that */ #if HAVE_WORKING_POLL #define USE_FUNC_POLL 1 #if HAVE_POLL_H #include #else #include #endif #else #define USE_FUNC_POLL 0 #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif /* include signal.h before curses.h to work-around defect in glibc 2.1.3 */ #include /* Alessandro Rubini's GPM (general-purpose mouse) */ #if HAVE_LIBGPM && HAVE_GPM_H #define USE_GPM_SUPPORT 1 #else #define USE_GPM_SUPPORT 0 #endif /* QNX mouse support */ #if defined(__QNX__) && !defined(__QNXNTO__) #define USE_QNX_MOUSE 1 #else #define USE_QNX_MOUSE 0 #endif /* EMX mouse support */ #ifdef __EMX__ #define USE_EMX_MOUSE 1 #else #define USE_EMX_MOUSE 0 #endif /* kLIBC keyboard/mouse support */ #if defined(__OS2__) && defined(__KLIBC__) #define USE_KLIBC_KBD 1 #define USE_KLIBC_MOUSE 1 #else #define USE_KLIBC_KBD 0 #define USE_KLIBC_MOUSE 0 #endif #define DEFAULT_MAXCLICK 166 #define EV_MAX 8 /* size of mouse circular event queue */ /* * If we don't have signals to support it, don't add a sigwinch handler. * In any case, resizing is an extended feature. Use it if we've got it. */ #if !NCURSES_EXT_FUNCS #undef HAVE_SIZECHANGE #define HAVE_SIZECHANGE 0 #endif #if HAVE_SIZECHANGE && USE_SIGWINCH && defined(SIGWINCH) #define USE_SIZECHANGE 1 #else #define USE_SIZECHANGE 0 #undef USE_SIGWINCH #define USE_SIGWINCH 0 #endif /* * When building in the MSYS2 environment, the automatic discovery of * the path separator in configure doesn't work properly. So, if building * for MinGW, we enforce the correct Windows PATH separator */ #ifdef __MINGW32__ # ifdef NCURSES_PATHSEP # undef NCURSES_PATHSEP # endif # define NCURSES_PATHSEP ';' #endif /* * If desired, one can configure this, disabling environment variables that * point to custom terminfo/termcap locations. */ #ifdef USE_ROOT_ENVIRON #define use_terminfo_vars() 1 #else #define use_terminfo_vars() _nc_env_access() extern NCURSES_EXPORT(int) _nc_env_access (void); #endif /* * Not all platforms have memmove; some have an equivalent bcopy. (Some may * have neither). */ #if USE_OK_BCOPY #define memmove(d,s,n) bcopy(s,d,n) #elif USE_MY_MEMMOVE #define memmove(d,s,n) _nc_memmove(d,s,n) extern NCURSES_EXPORT(void *) _nc_memmove (void *, const void *, size_t); #endif /* * If we have va_copy(), use it for assigning va_list's. */ #if defined(HAVE___VA_COPY) #define begin_va_copy(dst,src) __va_copy(dst, src) #define end_va_copy(dst) va_end(dst) #elif defined(va_copy) || defined(HAVE_VA_COPY) #define begin_va_copy(dst,src) va_copy(dst, src) #define end_va_copy(dst) va_end(dst) #else #define begin_va_copy(dst,src) (dst) = (src) #define end_va_copy(dst) /* nothing */ #endif /* * Either/both S_ISxxx and/or S_IFxxx are defined in sys/types.h; some systems * lack one or the other. */ #ifndef S_ISDIR #define S_ISDIR(mode) ((mode & S_IFMT) == S_IFDIR) #endif #ifndef S_ISREG #define S_ISREG(mode) ((mode & S_IFMT) == S_IFREG) #endif /* * Scroll hints are useless when hashmap is used */ #if !USE_SCROLL_HINTS #if !USE_HASHMAP #define USE_SCROLL_HINTS 1 #else #define USE_SCROLL_HINTS 0 #endif #endif #if USE_SCROLL_HINTS #define if_USE_SCROLL_HINTS(stmt) stmt #else #define if_USE_SCROLL_HINTS(stmt) /*nothing*/ #endif #include /* * Options for terminal drivers, etc... */ #ifdef USE_TERM_DRIVER #define USE_SP_RIPOFF 1 #define USE_SP_TERMTYPE 1 #define USE_SP_WINDOWLIST 1 #endif /* * Note: ht/cbt expansion flakes out randomly under Linux 1.1.47, but only * when we're throwing control codes at the screen at high volume. To see * this, re-enable USE_HARD_TABS and run worm for a while. Other systems * probably don't want to define this either due to uncertainties about tab * delays and expansion in raw mode. */ #define TRIES struct tries typedef TRIES { TRIES *child; /* ptr to child. NULL if none */ TRIES *sibling; /* ptr to sibling. NULL if none */ unsigned char ch; /* character at this node */ unsigned short value; /* code of string so far. 0 if none. */ #undef TRIES } TRIES; /* * Common/troublesome character definitions */ #define StringOf(ch) {ch, 0} #define L_BRACE '{' #define R_BRACE '}' #define S_QUOTE '\'' #define D_QUOTE '"' #define VT_ACSC "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~" /* * Structure for palette tables */ #define MAXCOLUMNS 135 #define MAXLINES 66 #define FIFO_SIZE MAXCOLUMNS+2 /* for nocbreak mode input */ #define ACS_LEN 128 #define WINDOWLIST struct _win_list #if USE_WIDEC_SUPPORT #define _nc_bkgd _bkgrnd #else #undef _XOPEN_SOURCE_EXTENDED #undef _XPG5 #define _nc_bkgd _bkgd #define wgetbkgrnd(win, wch) ((*wch = win->_bkgd) != 0 ? OK : ERR) #define wbkgrnd wbkgd #endif #undef NCURSES_OPAQUE #define NCURSES_INTERNALS 1 #define NCURSES_OPAQUE 0 #include /* we'll use -Ipath directive to get the right one! */ typedef struct { NCURSES_COLOR_T red, green, blue; /* what color_content() returns */ NCURSES_COLOR_T r, g, b; /* params to init_color() */ int init; /* true if we called init_color() */ } color_t; /* * If curses.h did not expose the SCREEN-functions, then we do not need the * parameter in the corresponding unextended functions. */ #define USE_SP_FUNC_SUPPORT NCURSES_SP_FUNCS #define USE_EXT_SP_FUNC_SUPPORT (NCURSES_SP_FUNCS && NCURSES_EXT_FUNCS) #if NCURSES_SP_FUNCS #define SP_PARM sp /* use parameter */ #define NCURSES_SP_ARG SP_PARM #define NCURSES_SP_DCL SCREEN *NCURSES_SP_ARG #define NCURSES_SP_DCL0 NCURSES_SP_DCL #define NCURSES_SP_ARGx NCURSES_SP_ARG, #define NCURSES_SP_DCLx SCREEN *NCURSES_SP_ARGx #else #define SP_PARM SP /* use global variable */ #define NCURSES_SP_ARG #define NCURSES_SP_DCL #define NCURSES_SP_DCL0 void #define NCURSES_SP_ARGx #define NCURSES_SP_DCLx #endif #include #define IsPreScreen(sp) (((sp) != 0) && sp->_prescreen) #define HasTerminal(sp) (((sp) != 0) && (0 != ((sp)->_term))) #define IsValidScreen(sp) (HasTerminal(sp) && !IsPreScreen(sp)) #if USE_REENTRANT #define CurTerm _nc_prescreen._cur_term #else #define CurTerm cur_term #endif #if NCURSES_SP_FUNCS #define TerminalOf(sp) ((sp) ? ((sp)->_term ? (sp)->_term : CurTerm) : CurTerm) #else #define TerminalOf(sp) CurTerm #endif #include #include /* * Reduce dependency on cur_term global by using terminfo data from SCREEN's * pointer to this data. */ #ifdef USE_SP_TERMTYPE #undef CUR #endif #define SP_TERMTYPE TerminalOf(sp)->type. #include #include /* * Simplify ifdef's for the "*_ATTR" macros in case italics are not configured. */ #ifdef A_ITALIC #define USE_ITALIC 1 #else #define USE_ITALIC 0 #define A_ITALIC 0 #endif /* * Use these macros internally, to make tracing less verbose. But leave the * option for compiling the tracing into the library. */ #if 1 #define ColorPair(n) NCURSES_BITS(n, 0) #define PairNumber(a) (NCURSES_CAST(int,(((unsigned long)(a) & A_COLOR) >> NCURSES_ATTR_SHIFT))) #else #define ColorPair(pair) COLOR_PAIR(pair) #define PairNumber(attr) PAIR_NUMBER(attr) #endif #define unColor(n) unColor2(AttrOf(n)) #define unColor2(a) ((a) & ALL_BUT_COLOR) /* * Extended-colors stores the color pair in a separate struct-member than the * attributes. But for compatibility, we handle most cases where a program * written for non-extended colors stores the color in the attributes by * checking for a color pair in both places. */ #if NCURSES_EXT_COLORS #define if_EXT_COLORS(stmt) stmt #define SetPair(value,p) SetPair2((value).ext_color, AttrOf(value), p) #define SetPair2(c,a,p) c = (p), \ a = (unColor2(a) | (A_COLOR & (unsigned) ColorPair(oldColor(c)))) #define GetPair(value) GetPair2((value).ext_color, AttrOf(value)) #define GetPair2(c,a) ((c) ? (c) : PairNumber(a)) #define oldColor(p) (((p) > 255) ? 255 : (p)) #define GET_WINDOW_PAIR(w) GetPair2((w)->_color, (w)->_attrs) #define SET_WINDOW_PAIR(w,p) (w)->_color = (p) #define SameAttrOf(a,b) (AttrOf(a) == AttrOf(b) && GetPair(a) == GetPair(b)) #define VIDATTR(sp,attr,pair) NCURSES_SP_NAME(vid_puts)(NCURSES_SP_ARGx attr, (short) pair, 0, NCURSES_OUTC_FUNC) #else /* !NCURSES_EXT_COLORS */ #define if_EXT_COLORS(stmt) /* nothing */ #define SetPair(value,p) RemAttr(value, A_COLOR), \ SetAttr(value, AttrOf(value) | (A_COLOR & (attr_t) ColorPair(p))) #define GetPair(value) PairNumber(AttrOf(value)) #define GET_WINDOW_PAIR(w) PairNumber(WINDOW_ATTRS(w)) #define SET_WINDOW_PAIR(w,p) WINDOW_ATTRS(w) &= ALL_BUT_COLOR, \ WINDOW_ATTRS(w) |= (A_COLOR & (attr_t) ColorPair(p)) #define SameAttrOf(a,b) (AttrOf(a) == AttrOf(b)) #define VIDATTR(sp,attr,pair) NCURSES_SP_NAME(vidputs)(NCURSES_SP_ARGx attr, NCURSES_OUTC_FUNC) #endif /* NCURSES_EXT_COLORS */ #define NCURSES_OUTC_FUNC NCURSES_SP_NAME(_nc_outch) #define NCURSES_PUTP2(name,value) NCURSES_SP_NAME(_nc_putp)(NCURSES_SP_ARGx name, value) #define NCURSES_PUTP2_FLUSH(name,value) NCURSES_SP_NAME(_nc_putp_flush)(NCURSES_SP_ARGx name, value) #if NCURSES_NO_PADDING #define GetNoPadding(sp) ((sp) ? (sp)->_no_padding : _nc_prescreen._no_padding) #define SetNoPadding(sp) _nc_set_no_padding(sp) extern NCURSES_EXPORT(void) _nc_set_no_padding(SCREEN *); #else #define GetNoPadding(sp) FALSE #define SetNoPadding(sp) /*nothing*/ #endif #define WINDOW_ATTRS(w) ((w)->_attrs) #define SCREEN_ATTRS(s) (*((s)->_current_attr)) #define GET_SCREEN_PAIR(s) GetPair(SCREEN_ATTRS(s)) #define SET_SCREEN_PAIR(s,p) SetPair(SCREEN_ATTRS(s), p) #if USE_REENTRANT || NCURSES_SP_FUNCS NCURSES_EXPORT(int *) _nc_ptr_Lines (SCREEN *); NCURSES_EXPORT(int *) _nc_ptr_Cols (SCREEN *); NCURSES_EXPORT(int *) _nc_ptr_Tabsize (SCREEN *); NCURSES_EXPORT(int *) _nc_ptr_Escdelay (SCREEN *); #endif #if USE_REENTRANT #define ptrLines(sp) (sp ? &(sp->_LINES) : &(_nc_prescreen._LINES)) #define ptrCols(sp) (sp ? &(sp->_COLS) : &(_nc_prescreen._COLS)) #define ptrTabsize(sp) (sp ? &(sp->_TABSIZE) : &(_nc_prescreen._TABSIZE)) #define ptrEscdelay(sp) (sp ? &(sp->_ESCDELAY) : &(_nc_prescreen._ESCDELAY)) #define SET_LINES(value) *_nc_ptr_Lines(SP_PARM) = value #define SET_COLS(value) *_nc_ptr_Cols(SP_PARM) = value #define SET_TABSIZE(value) *_nc_ptr_Tabsize(SP_PARM) = value #define SET_ESCDELAY(value) *_nc_ptr_Escdelay(SP_PARM) = value #else #define ptrLines(sp) &LINES #define ptrCols(sp) &COLS #define ptrTabsize(sp) &TABSIZE #define ptrEscdelay(sp) &ESCDELAY #define SET_LINES(value) LINES = value #define SET_COLS(value) COLS = value #define SET_TABSIZE(value) TABSIZE = value #define SET_ESCDELAY(value) ESCDELAY = value #endif #define TR_MUTEX(data) _tracef("%s@%d: me:%08lX COUNT:%2u/%2d/%6d/%2d/%s%9u: " #data, \ __FILE__, __LINE__, \ (unsigned long) (pthread_self()), \ data.__data.__lock, \ data.__data.__count, \ data.__data.__owner, \ data.__data.__kind, \ (data.__data.__nusers > 5) ? " OOPS " : "", \ data.__data.__nusers) #define TR_GLOBAL_MUTEX(name) TR_MUTEX(_nc_globals.mutex_##name) #if USE_WEAK_SYMBOLS #if defined(__GNUC__) # if defined __USE_ISOC99 # define _cat_pragma(exp) _Pragma(#exp) # define _weak_pragma(exp) _cat_pragma(weak name) # else # define _weak_pragma(exp) # endif # define _declare(name) __extension__ extern __typeof__(name) name # define weak_symbol(name) _weak_pragma(name) _declare(name) __attribute__((weak)) #else # undef USE_WEAK_SYMBOLS # define USE_WEAK_SYMBOLS 0 #endif #endif #ifdef USE_PTHREADS #if USE_REENTRANT #include extern NCURSES_EXPORT(void) _nc_init_pthreads(void); extern NCURSES_EXPORT(void) _nc_mutex_init(pthread_mutex_t *); extern NCURSES_EXPORT(int) _nc_mutex_lock(pthread_mutex_t *); extern NCURSES_EXPORT(int) _nc_mutex_trylock(pthread_mutex_t *); extern NCURSES_EXPORT(int) _nc_mutex_unlock(pthread_mutex_t *); #define _nc_lock_global(name) _nc_mutex_lock(&_nc_globals.mutex_##name) #define _nc_try_global(name) _nc_mutex_trylock(&_nc_globals.mutex_##name) #define _nc_unlock_global(name) _nc_mutex_unlock(&_nc_globals.mutex_##name) #else #error POSIX threads requires --enable-reentrant option #endif #ifdef USE_PTHREADS # if USE_WEAK_SYMBOLS weak_symbol(pthread_sigmask); weak_symbol(pthread_kill); weak_symbol(pthread_self); weak_symbol(pthread_equal); weak_symbol(pthread_mutex_init); weak_symbol(pthread_mutex_lock); weak_symbol(pthread_mutex_unlock); weak_symbol(pthread_mutex_trylock); weak_symbol(pthread_mutexattr_settype); weak_symbol(pthread_mutexattr_init); extern NCURSES_EXPORT(int) _nc_sigprocmask(int, const sigset_t *, sigset_t *); # undef sigprocmask # define sigprocmask _nc_sigprocmask # endif #endif #if HAVE_NANOSLEEP #undef HAVE_NANOSLEEP #define HAVE_NANOSLEEP 0 /* nanosleep suspends all threads */ #endif #else /* !USE_PTHREADS */ #if USE_PTHREADS_EINTR # if USE_WEAK_SYMBOLS #include weak_symbol(pthread_sigmask); weak_symbol(pthread_kill); weak_symbol(pthread_self); weak_symbol(pthread_equal); extern NCURSES_EXPORT(int) _nc_sigprocmask(int, const sigset_t *, sigset_t *); # undef sigprocmask # define sigprocmask _nc_sigprocmask # endif #endif /* USE_PTHREADS_EINTR */ #define _nc_init_pthreads() /* nothing */ #define _nc_mutex_init(obj) /* nothing */ #define _nc_lock_global(name) /* nothing */ #define _nc_try_global(name) 0 #define _nc_unlock_global(name) /* nothing */ #endif /* USE_PTHREADS */ /* * When using sp-funcs, locks are targeted to SCREEN-level granularity. * So the locking is done in the non-sp-func (which calls the sp-func) rather * than in the sp-func itself. * * Use the _nc_nonsp_XXX functions in the function using "NCURSES_SP_NAME()". * Use the _nc_sp_XXX functions in the function using "#if NCURSES_SP_FUNCS". */ #if NCURSES_SP_FUNCS #define _nc_nonsp_lock_global(name) /* nothing */ #define _nc_nonsp_try_global(name) 0 #define _nc_nonsp_unlock_global(name) /* nothing */ #define _nc_sp_lock_global(name) _nc_lock_global(name) #define _nc_sp_try_global(name) _nc_try_global(name) #define _nc_sp_unlock_global(name) _nc_unlock_global(name) #else #define _nc_nonsp_lock_global(name) _nc_lock_global(name) #define _nc_nonsp_try_global(name) _nc_try_global(name) #define _nc_nonsp_unlock_global(name) _nc_unlock_global(name) #define _nc_sp_lock_global(name) /* nothing */ #define _nc_sp_try_global(name) 0 #define _nc_sp_unlock_global(name) /* nothing */ #endif #if HAVE_GETTIMEOFDAY # define PRECISE_GETTIME 1 # define TimeType struct timeval #else # define PRECISE_GETTIME 0 # define TimeType time_t #endif /* * Definitions for color pairs */ typedef unsigned colorpair_t; /* type big enough to store PAIR_OF() */ #define C_SHIFT 9 /* we need more bits than there are colors */ #define C_MASK ((1 << C_SHIFT) - 1) #define PAIR_OF(fg, bg) (colorpair_t) ((((fg) & C_MASK) << C_SHIFT) | ((bg) & C_MASK)) #define FORE_OF(c) (((c) >> C_SHIFT) & C_MASK) #define BACK_OF(c) ((c) & C_MASK) #define isDefaultColor(c) ((c) >= COLOR_DEFAULT || (c) < 0) #define COLOR_DEFAULT C_MASK #if defined(USE_BUILD_CC) || (defined(USE_TERMLIB) && !defined(NEED_NCURSES_CH_T)) #undef NCURSES_CH_T /* this is not a termlib feature */ #define NCURSES_CH_T void /* ...but we need a pointer in SCREEN */ #endif /* USE_TERMLIB */ #ifndef USE_TERMLIB struct ldat { NCURSES_CH_T *text; /* text of the line */ NCURSES_SIZE_T firstchar; /* first changed character in the line */ NCURSES_SIZE_T lastchar; /* last changed character in the line */ NCURSES_SIZE_T oldindex; /* index of the line at last update */ }; #endif /* USE_TERMLIB */ typedef enum { M_XTERM = -1 /* use xterm's mouse tracking? */ ,M_NONE = 0 /* no mouse device */ #if USE_GPM_SUPPORT ,M_GPM /* use GPM */ #endif #if USE_SYSMOUSE ,M_SYSMOUSE /* FreeBSD sysmouse on console */ #endif #ifdef USE_TERM_DRIVER ,M_TERM_DRIVER /* Win32 console, etc */ #endif } MouseType; typedef enum { MF_X10 = 0 /* conventional 3-byte format */ , MF_SGR1006 /* xterm private mode 1006, SGR-style */ #ifdef EXP_XTERM_1005 , MF_XTERM_1005 /* xterm UTF-8 private mode 1005 */ #endif } MouseFormat; /* * Structures for scrolling. */ typedef struct { unsigned long hashval; int oldcount, newcount; int oldindex, newindex; } HASHMAP; /* * Structures for soft labels. */ struct _SLK; #if !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) typedef struct { char *ent_text; /* text for the label */ char *form_text; /* formatted text (left/center/...) */ int ent_x; /* x coordinate of this field */ char dirty; /* this label has changed */ char visible; /* field is visible */ } slk_ent; typedef struct _SLK { bool dirty; /* all labels have changed */ bool hidden; /* soft labels are hidden */ WINDOW *win; slk_ent *ent; short maxlab; /* number of available labels */ short labcnt; /* number of allocated labels */ short maxlen; /* length of labels */ NCURSES_CH_T attr; /* soft label attribute */ } SLK; #endif /* USE_TERMLIB */ typedef struct { WINDOW *win; /* the window used in the hook */ int line; /* lines to take, < 0 => from bottom*/ int (*hook)(WINDOW *, int); /* callback for user */ } ripoff_t; #if USE_GPM_SUPPORT #undef buttons /* term.h defines this, and gpm uses it! */ #include #if USE_WEAK_SYMBOLS weak_symbol(Gpm_Wgetch); #endif #ifdef HAVE_LIBDL /* link dynamically to GPM */ typedef int *TYPE_gpm_fd; typedef int (*TYPE_Gpm_Open) (Gpm_Connect *, int); typedef int (*TYPE_Gpm_Close) (void); typedef int (*TYPE_Gpm_GetEvent) (Gpm_Event *); #define my_gpm_fd SP_PARM->_mouse_gpm_fd #define my_Gpm_Open SP_PARM->_mouse_Gpm_Open #define my_Gpm_Close SP_PARM->_mouse_Gpm_Close #define my_Gpm_GetEvent SP_PARM->_mouse_Gpm_GetEvent #else /* link statically to GPM */ #define my_gpm_fd &gpm_fd #define my_Gpm_Open Gpm_Open #define my_Gpm_Close Gpm_Close #define my_Gpm_GetEvent Gpm_GetEvent #endif /* HAVE_LIBDL */ #endif /* USE_GPM_SUPPORT */ typedef struct { long sequence; bool last_used; char *fix_sgr0; /* this holds the filtered sgr0 string */ char *last_bufp; /* help with fix_sgr0 leak */ TERMINAL *last_term; } TGETENT_CACHE; #define TGETENT_MAX 4 /* * State of tparm(). */ #define STACKSIZE 20 typedef struct { union { int num; char *str; } data; bool num_type; } STACK_FRAME; #define NUM_VARS 26 typedef struct { #ifdef TRACE const char *tname; #endif const char *tparam_base; STACK_FRAME stack[STACKSIZE]; int stack_ptr; char *out_buff; size_t out_size; size_t out_used; char *fmt_buff; size_t fmt_size; int dynamic_var[NUM_VARS]; int static_vars[NUM_VARS]; } TPARM_STATE; typedef struct { char *text; size_t size; } TRACEBUF; /* * The filesystem database normally uses a single-letter for the lower level * of directories. Use a hexadecimal code for filesystems which do not * preserve mixed-case names. */ #if MIXEDCASE_FILENAMES #define LEAF_FMT "%c" #define LEAF_LEN 1 #else #define LEAF_FMT "%02x" #define LEAF_LEN 2 #endif /* * TRACEMSE_FMT is no longer than 80 columns, there are 5 numbers that * could at most have 10 digits, and the mask contains no more than 32 bits * with each bit representing less than 15 characters. Usually the whole * string is less than 80 columns, but this buffer size is an absolute * limit. */ #define TRACEMSE_MAX (80 + (5 * 10) + (32 * 15)) #define TRACEMSE_FMT "id %2d at (%2d, %2d, %2d) state %4lx = {" /* } */ #ifdef USE_TERM_DRIVER struct DriverTCB; /* Terminal Control Block forward declaration */ #define INIT_TERM_DRIVER() _nc_globals.term_driver = _nc_get_driver #else #define INIT_TERM_DRIVER() /* nothing */ #endif typedef struct { const char *name; char *value; } ITERATOR_VARS; /* * Global data which is not specific to a screen. */ typedef struct { SIG_ATOMIC_T have_sigtstp; SIG_ATOMIC_T have_sigwinch; SIG_ATOMIC_T cleanup_nested; bool init_signals; bool init_screen; char *comp_sourcename; char *comp_termtype; bool have_tic_directory; bool keep_tic_directory; const char *tic_directory; char *dbi_list; int dbi_size; char *first_name; char **keyname_table; int init_keyname; int slk_format; char *safeprint_buf; size_t safeprint_used; TGETENT_CACHE tgetent_cache[TGETENT_MAX]; int tgetent_index; long tgetent_sequence; char *dbd_blob; /* string-heap for dbd_list[] */ char **dbd_list; /* distinct places to look for data */ int dbd_size; /* length of dbd_list[] */ time_t dbd_time; /* cache last updated */ ITERATOR_VARS dbd_vars[dbdLAST]; #ifndef USE_SP_WINDOWLIST WINDOWLIST *_nc_windowlist; #define WindowList(sp) _nc_globals._nc_windowlist #endif #if USE_HOME_TERMINFO char *home_terminfo; #endif #if !USE_SAFE_SPRINTF int safeprint_cols; int safeprint_rows; #endif #ifdef USE_TERM_DRIVER int (*term_driver)(struct DriverTCB*, const char*, int*); #endif #ifdef TRACE bool init_trace; char trace_fname[PATH_MAX]; int trace_level; FILE *trace_fp; char *tracearg_buf; size_t tracearg_used; TRACEBUF *tracebuf_ptr; size_t tracebuf_used; char tracechr_buf[40]; char *tracedmp_buf; size_t tracedmp_used; unsigned char *tracetry_buf; size_t tracetry_used; char traceatr_color_buf[2][80]; int traceatr_color_sel; int traceatr_color_last; #if !defined(USE_PTHREADS) && USE_REENTRANT int nested_tracef; #endif #endif /* TRACE */ #ifdef USE_PTHREADS pthread_mutex_t mutex_curses; pthread_mutex_t mutex_tst_tracef; pthread_mutex_t mutex_tracef; int nested_tracef; int use_pthreads; #define _nc_use_pthreads _nc_globals.use_pthreads #endif #if USE_PTHREADS_EINTR pthread_t read_thread; /* The reading thread */ #endif } NCURSES_GLOBALS; extern NCURSES_EXPORT_VAR(NCURSES_GLOBALS) _nc_globals; #define N_RIPS 5 /* * Global data which can be swept up into a SCREEN when one is created. * It may be modified before the next SCREEN is created. */ typedef struct { bool use_env; bool filter_mode; attr_t previous_attr; #ifndef USE_SP_RIPOFF ripoff_t rippedoff[N_RIPS]; ripoff_t *rsp; #endif TPARM_STATE tparm_state; TTY *saved_tty; /* savetty/resetty information */ #if NCURSES_NO_PADDING bool _no_padding; /* flag to set if padding disabled */ #endif NCURSES_SP_OUTC _outch; /* output handler if not putc */ #if BROKEN_LINKER || USE_REENTRANT chtype *real_acs_map; int _LINES; int _COLS; int _TABSIZE; int _ESCDELAY; TERMINAL *_cur_term; #ifdef TRACE long _outchars; const char *_tputs_trace; #endif #endif bool use_tioctl; } NCURSES_PRESCREEN; /* * Use screen-specific ripoff data (for softkeys) rather than global. */ #ifdef USE_SP_RIPOFF #define safe_ripoff_sp (sp)->rsp #define safe_ripoff_stack (sp)->rippedoff #else #define safe_ripoff_sp _nc_prescreen.rsp #define safe_ripoff_stack _nc_prescreen.rippedoff #endif extern NCURSES_EXPORT_VAR(NCURSES_PRESCREEN) _nc_prescreen; /* * The SCREEN structure. */ struct screen { int _ifd; /* input file descriptor for screen */ int _ofd; /* output file descriptor for screen */ FILE *_ofp; /* output file ptr for screen */ char *out_buffer; /* output buffer */ size_t out_limit; /* output buffer size */ size_t out_inuse; /* output buffer current use */ bool _filtered; /* filter() was called */ bool _prescreen; /* is in prescreen phase */ bool _use_env; /* LINES & COLS from environment? */ int _checkfd; /* filedesc for typeahead check */ TERMINAL *_term; /* terminal type information */ TTY _saved_tty; /* savetty/resetty information */ NCURSES_SIZE_T _lines; /* screen lines */ NCURSES_SIZE_T _columns; /* screen columns */ NCURSES_SIZE_T _lines_avail; /* lines available for stdscr */ NCURSES_SIZE_T _topstolen; /* lines stolen from top */ WINDOW *_curscr; /* current screen */ WINDOW *_newscr; /* virtual screen to be updated to */ WINDOW *_stdscr; /* screen's full-window context */ #define CurScreen(sp) (sp)->_curscr #define NewScreen(sp) (sp)->_newscr #define StdScreen(sp) (sp)->_stdscr TRIES *_keytry; /* "Try" for use with keypad mode */ TRIES *_key_ok; /* Disabled keys via keyok(,FALSE) */ bool _tried; /* keypad mode was initialized */ bool _keypad_on; /* keypad mode is currently on */ bool _called_wgetch; /* check for recursion in wgetch() */ int _fifo[FIFO_SIZE]; /* input push-back buffer */ short _fifohead, /* head of fifo queue */ _fifotail, /* tail of fifo queue */ _fifopeek, /* where to peek for next char */ _fifohold; /* set if breakout marked */ int _endwin; /* are we out of window mode? */ NCURSES_CH_T *_current_attr; /* holds current attributes set */ int _coloron; /* is color enabled? */ int _color_defs; /* are colors modified */ int _cursor; /* visibility of the cursor */ int _cursrow; /* physical cursor row */ int _curscol; /* physical cursor column */ bool _notty; /* true if we cannot switch non-tty */ int _nl; /* True if NL -> CR/NL is on */ int _raw; /* True if in raw mode */ int _cbreak; /* 1 if in cbreak mode */ /* > 1 if in halfdelay mode */ int _echo; /* True if echo on */ int _use_meta; /* use the meta key? */ struct _SLK *_slk; /* ptr to soft key struct / NULL */ int slk_format; /* selected format for this screen */ /* cursor movement costs; units are 10ths of milliseconds */ #if NCURSES_NO_PADDING bool _no_padding; /* flag to set if padding disabled */ #endif int _char_padding; /* cost of character put */ int _cr_cost; /* cost of (carriage_return) */ int _cup_cost; /* cost of (cursor_address) */ int _home_cost; /* cost of (cursor_home) */ int _ll_cost; /* cost of (cursor_to_ll) */ #if USE_HARD_TABS int _ht_cost; /* cost of (tab) */ int _cbt_cost; /* cost of (backtab) */ #endif /* USE_HARD_TABS */ int _cub1_cost; /* cost of (cursor_left) */ int _cuf1_cost; /* cost of (cursor_right) */ int _cud1_cost; /* cost of (cursor_down) */ int _cuu1_cost; /* cost of (cursor_up) */ int _cub_cost; /* cost of (parm_cursor_left) */ int _cuf_cost; /* cost of (parm_cursor_right) */ int _cud_cost; /* cost of (parm_cursor_down) */ int _cuu_cost; /* cost of (parm_cursor_up) */ int _hpa_cost; /* cost of (column_address) */ int _vpa_cost; /* cost of (row_address) */ /* used in tty_update.c, must be chars */ int _ed_cost; /* cost of (clr_eos) */ int _el_cost; /* cost of (clr_eol) */ int _el1_cost; /* cost of (clr_bol) */ int _dch1_cost; /* cost of (delete_character) */ int _ich1_cost; /* cost of (insert_character) */ int _dch_cost; /* cost of (parm_dch) */ int _ich_cost; /* cost of (parm_ich) */ int _ech_cost; /* cost of (erase_chars) */ int _rep_cost; /* cost of (repeat_char) */ int _hpa_ch_cost; /* cost of (column_address) */ int _cup_ch_cost; /* cost of (cursor_address) */ int _cuf_ch_cost; /* cost of (parm_cursor_right) */ int _inline_cost; /* cost of inline-move */ int _smir_cost; /* cost of (enter_insert_mode) */ int _rmir_cost; /* cost of (exit_insert_mode) */ int _ip_cost; /* cost of (insert_padding) */ /* used in lib_mvcur.c */ char * _address_cursor; /* used in tty_update.c */ int _scrolling; /* 1 if terminal's smart enough to */ /* used in lib_color.c */ color_t *_color_table; /* screen's color palette */ int _color_count; /* count of colors in palette */ colorpair_t *_color_pairs; /* screen's color pair list */ int _pair_count; /* count of color pairs */ int _pair_limit; /* actual limit of color-pairs */ #if NCURSES_EXT_FUNCS bool _assumed_color; /* use assumed colors */ bool _default_color; /* use default colors */ bool _has_sgr_39_49; /* has ECMA default color support */ int _default_fg; /* assumed default foreground */ int _default_bg; /* assumed default background */ int _default_pairs; /* count pairs using default color */ #endif chtype _ok_attributes; /* valid attributes for terminal */ chtype _xmc_suppress; /* attributes to suppress if xmc */ chtype _xmc_triggers; /* attributes to process if xmc */ chtype * _acs_map; /* the real alternate-charset map */ bool * _screen_acs_map; /* used in lib_vidattr.c */ bool _use_rmso; /* true if we may use 'rmso' */ bool _use_rmul; /* true if we may use 'rmul' */ #if USE_ITALIC bool _use_ritm; /* true if we may use 'ritm' */ #endif #if USE_KLIBC_KBD bool _extended_key; /* true if an extended key */ #endif /* * These data correspond to the state of the idcok() and idlok() * functions. A caveat is in order here: the XSI and SVr4 * documentation specify that these functions apply to the window which * is given as an argument. However, ncurses implements this logic * only for the newscr/curscr update process, _not_ per-window. */ bool _nc_sp_idlok; bool _nc_sp_idcok; /* * These are the data that support the mouse interface. */ bool _mouse_initialized; MouseType _mouse_type; int _maxclick; bool (*_mouse_event) (SCREEN *); bool (*_mouse_inline)(SCREEN *); bool (*_mouse_parse) (SCREEN *, int); void (*_mouse_resume)(SCREEN *); void (*_mouse_wrap) (SCREEN *); int _mouse_fd; /* file-descriptor, if any */ bool _mouse_active; /* true if initialized */ mmask_t _mouse_mask; /* set via mousemask() */ mmask_t _mouse_mask2; /* OR's in press/release bits */ mmask_t _mouse_bstate; MouseFormat _mouse_format; /* type of xterm mouse protocol */ NCURSES_CONST char *_mouse_xtermcap; /* string to enable/disable mouse */ MEVENT _mouse_events[EV_MAX]; /* hold the last mouse event seen */ MEVENT *_mouse_eventp; /* next free slot in event queue */ #if USE_GPM_SUPPORT bool _mouse_gpm_loaded; bool _mouse_gpm_found; #ifdef HAVE_LIBDL void *_dlopen_gpm; TYPE_gpm_fd _mouse_gpm_fd; TYPE_Gpm_Open _mouse_Gpm_Open; TYPE_Gpm_Close _mouse_Gpm_Close; TYPE_Gpm_GetEvent _mouse_Gpm_GetEvent; #endif Gpm_Connect _mouse_gpm_connect; #endif /* USE_GPM_SUPPORT */ #if USE_EMX_MOUSE int _emxmouse_wfd; int _emxmouse_thread; int _emxmouse_activated; char _emxmouse_buttons[4]; #endif #if USE_SYSMOUSE MEVENT _sysmouse_fifo[FIFO_SIZE]; int _sysmouse_head; int _sysmouse_tail; int _sysmouse_char_width; /* character width */ int _sysmouse_char_height; /* character height */ int _sysmouse_old_buttons; int _sysmouse_new_buttons; #endif #ifdef USE_TERM_DRIVER MEVENT _drv_mouse_fifo[FIFO_SIZE]; int _drv_mouse_head; int _drv_mouse_tail; int _drv_mouse_old_buttons; int _drv_mouse_new_buttons; #endif /* * This supports automatic resizing */ #if USE_SIZECHANGE int (*_resize)(NCURSES_SP_DCLx int y, int x); int (*_ungetch)(SCREEN *, int); #endif /* * These are data that support the proper handling of the panel stack on an * per screen basis. */ struct panelhook _panelHook; bool _sig_winch; SCREEN *_next_screen; /* hashes for old and new lines */ unsigned long *oldhash, *newhash; HASHMAP *hashtab; int hashtab_len; int *_oldnum_list; int _oldnum_size; NCURSES_SP_OUTC _outch; /* output handler if not putc */ int _legacy_coding; /* see use_legacy_coding() */ #if USE_REENTRANT char _ttytype[NAMESIZE]; int _ESCDELAY; int _TABSIZE; int _LINES; int _COLS; #ifdef TRACE long _outchars; const char *_tputs_trace; #endif #endif #ifdef TRACE char tracechr_buf[40]; char tracemse_buf[TRACEMSE_MAX]; #endif #ifdef USE_SP_WINDOWLIST WINDOWLIST* _windowlist; #define WindowList(sp) (sp)->_windowlist #endif NCURSES_OUTC jump; ripoff_t rippedoff[N_RIPS]; ripoff_t *rsp; /* * ncurses/ncursesw are the same up to this point. */ #if USE_WIDEC_SUPPORT /* recent versions of 'screen' have partially-working support for * UTF-8, but do not permit ACS at the same time (see tty_update.c). */ bool _screen_acs_fix; bool _screen_unicode; #endif bool _use_tioctl; }; extern NCURSES_EXPORT_VAR(SCREEN *) _nc_screen_chain; extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch; WINDOWLIST { WINDOWLIST *next; SCREEN *screen; /* screen containing the window */ WINDOW win; /* WINDOW_EXT() needs to account for offset */ #if NCURSES_WIDECHAR char addch_work[(MB_LEN_MAX * 9) + 1]; unsigned addch_used; /* number of bytes in addch_work[] */ int addch_x; /* x-position for addch_work[] */ int addch_y; /* y-position for addch_work[] */ #endif }; #define WINDOW_EXT(w,m) (((WINDOWLIST *)((void *)((char *)(w) - offsetof(WINDOWLIST, win))))->m) #define SP_PRE_INIT(sp) \ sp->_cursrow = -1; \ sp->_curscol = -1; \ sp->_nl = TRUE; \ sp->_raw = FALSE; \ sp->_cbreak = 0; \ sp->_echo = TRUE; \ sp->_fifohead = -1; \ sp->_endwin = TRUE; \ sp->_cursor = -1; \ WindowList(sp) = 0; \ sp->_outch = NCURSES_OUTC_FUNC; \ sp->jump = 0 \ /* usually in */ #ifndef UCHAR_MAX #define UCHAR_MAX 255 #endif /* The terminfo source is assumed to be 7-bit ASCII */ #define is7bits(c) ((unsigned)(c) < 128) /* Checks for isprint() should be done on 8-bit characters (non-wide) */ #define is8bits(c) ((unsigned)(c) <= UCHAR_MAX) #ifndef min #define min(a,b) ((a) > (b) ? (b) : (a)) #endif #ifndef max #define max(a,b) ((a) < (b) ? (b) : (a)) #endif /* usually in */ #ifndef STDIN_FILENO #define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO #define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO #define STDERR_FILENO 2 #endif #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #ifndef EXIT_FAILURE #define EXIT_FAILURE 1 #endif #ifndef R_OK #define R_OK 4 /* Test for read permission. */ #endif #ifndef W_OK #define W_OK 2 /* Test for write permission. */ #endif #ifndef X_OK #define X_OK 1 /* Test for execute permission. */ #endif #ifndef F_OK #define F_OK 0 /* Test for existence. */ #endif #if HAVE_FCNTL_H #include /* may define O_BINARY */ #endif #ifndef O_BINARY #define O_BINARY 0 #endif #ifdef TRACE #if USE_REENTRANT #define COUNT_OUTCHARS(n) _nc_count_outchars(n); #else #define COUNT_OUTCHARS(n) _nc_outchars += (n); #endif #else #define COUNT_OUTCHARS(n) /* nothing */ #endif #define RESET_OUTCHARS() COUNT_OUTCHARS(-_nc_outchars) #define UChar(c) ((unsigned char)(c)) #define UShort(c) ((unsigned short)(c)) #define ChCharOf(c) ((chtype)(c) & (chtype)A_CHARTEXT) #define ChAttrOf(c) ((chtype)(c) & (chtype)A_ATTRIBUTES) #ifndef MB_LEN_MAX #define MB_LEN_MAX 8 /* should be >= MB_CUR_MAX, but that may be a function */ #endif #if USE_WIDEC_SUPPORT /* { */ #define isEILSEQ(status) (((size_t)status == (size_t)-1) && (errno == EILSEQ)) #define init_mb(state) memset(&state, 0, sizeof(state)) #if NCURSES_EXT_COLORS #define NulColor , 0 #else #define NulColor /* nothing */ #endif #define NulChar 0,0,0,0 /* FIXME: see CCHARW_MAX */ #define CharOf(c) ((c).chars[0]) #define AttrOf(c) ((c).attr) #define AddAttr(c,a) AttrOf(c) |= ((a) & A_ATTRIBUTES) #define RemAttr(c,a) AttrOf(c) &= ~((a) & A_ATTRIBUTES) #define SetAttr(c,a) AttrOf(c) = ((a) & A_ATTRIBUTES) | WidecExt(c) #define NewChar2(c,a) { a, { c, NulChar } NulColor } #define NewChar(ch) NewChar2(ChCharOf(ch), ChAttrOf(ch)) #if CCHARW_MAX == 5 #define CharEq(a,b) (((a).attr == (b).attr) \ && (a).chars[0] == (b).chars[0] \ && (a).chars[1] == (b).chars[1] \ && (a).chars[2] == (b).chars[2] \ && (a).chars[3] == (b).chars[3] \ && (a).chars[4] == (b).chars[4] \ if_EXT_COLORS(&& (a).ext_color == (b).ext_color)) #else #define CharEq(a,b) (!memcmp(&(a), &(b), sizeof(a))) #endif #define SetChar(ch,c,a) do { \ NCURSES_CH_T *_cp = &ch; \ memset(_cp, 0, sizeof(ch)); \ _cp->chars[0] = (wchar_t) (c); \ _cp->attr = (a); \ if_EXT_COLORS(SetPair(ch, PairNumber(a))); \ } while (0) #define CHREF(wch) (&wch) #define CHDEREF(wch) (*wch) #define ARG_CH_T NCURSES_CH_T * #define CARG_CH_T const NCURSES_CH_T * #define PUTC_DATA char PUTC_buf[MB_LEN_MAX]; int PUTC_i, PUTC_n; \ mbstate_t PUT_st; wchar_t PUTC_ch #define PUTC_INIT init_mb (PUT_st) #define PUTC(ch) do { if(!isWidecExt(ch)) { \ if (Charable(ch)) { \ NCURSES_OUTC_FUNC (NCURSES_SP_ARGx CharOf(ch)); \ COUNT_OUTCHARS(1); \ } else { \ for (PUTC_i = 0; PUTC_i < CCHARW_MAX; ++PUTC_i) { \ PUTC_ch = (ch).chars[PUTC_i]; \ if (PUTC_ch == L'\0') \ break; \ PUTC_INIT; \ PUTC_n = (int) wcrtomb(PUTC_buf, \ (ch).chars[PUTC_i], &PUT_st); \ if (PUTC_n <= 0) { \ if (PUTC_ch && is8bits(PUTC_ch) && PUTC_i == 0) \ NCURSES_OUTC_FUNC (NCURSES_SP_ARGx CharOf(ch)); \ break; \ } else { \ int PUTC_j; \ for (PUTC_j = 0; PUTC_j < PUTC_n; ++PUTC_j) { \ NCURSES_OUTC_FUNC (NCURSES_SP_ARGx PUTC_buf[PUTC_j]); \ } \ } \ } \ COUNT_OUTCHARS(PUTC_i); \ } } } while (0) #define BLANK NewChar2(' ', WA_NORMAL) #define ZEROS NewChar2('\0', WA_NORMAL) #define ISBLANK(ch) ((ch).chars[0] == L' ' && (ch).chars[1] == L'\0') /* * Wide characters cannot be represented in the A_CHARTEXT mask of * attr_t's but an application might have set a narrow character there. * But even in that case, it would only be a printable character, or * zero. Otherwise we can use those bits to tell if a cell is the * first or extension part of a wide character. */ #define WidecExt(ch) (int) (AttrOf(ch) & A_CHARTEXT) #define isWidecBase(ch) (WidecExt(ch) == 1) #define isWidecExt(ch) (WidecExt(ch) > 1 && WidecExt(ch) < 32) #define SetWidecExt(dst, ext) AttrOf(dst) &= ~A_CHARTEXT, \ AttrOf(dst) |= (attr_t) (ext + 1) #define if_WIDEC(code) code #define Charable(ch) (((SP_PARM->_legacy_coding) \ || (AttrOf(ch) & A_ALTCHARSET) \ || (!isWidecExt(ch))) && \ (ch).chars[1] == L'\0' && \ _nc_is_charable(CharOf(ch))) #define L(ch) L ## ch #else /* }{ */ #define CharOf(c) ChCharOf(c) #define AttrOf(c) ChAttrOf(c) #define AddAttr(c,a) c |= (a) #define RemAttr(c,a) c &= ~((a) & A_ATTRIBUTES) #define SetAttr(c,a) c = ((c) & ~A_ATTRIBUTES) | (a) #define NewChar(ch) (ch) #define NewChar2(c,a) ((c) | (a)) #define CharEq(a,b) ((a) == (b)) #define SetChar(ch,c,a) ch = (c) | (a) #define CHREF(wch) wch #define CHDEREF(wch) wch #define ARG_CH_T NCURSES_CH_T #define CARG_CH_T NCURSES_CH_T #define PUTC_DATA /* nothing */ #define PUTC(ch) NCURSES_OUTC_FUNC (NCURSES_SP_ARGx (int) ch) #define BLANK (' '|A_NORMAL) #define ZEROS ('\0'|A_NORMAL) #define ISBLANK(ch) (CharOf(ch) == ' ') #define isWidecExt(ch) (0) #define if_WIDEC(code) /* nothing */ #define L(ch) ch #endif /* } */ #define AttrOfD(ch) AttrOf(CHDEREF(ch)) #define CharOfD(ch) CharOf(CHDEREF(ch)) #define SetChar2(wch,ch) SetChar(wch,ChCharOf(ch),ChAttrOf(ch)) #define BLANK_ATTR A_NORMAL #define BLANK_TEXT L(' ') #define CHANGED -1 #define LEGALYX(w, y, x) \ ((w) != 0 && \ ((x) >= 0 && (x) <= (w)->_maxx && \ (y) >= 0 && (y) <= (w)->_maxy)) #define CHANGED_CELL(line,col) \ if (line->firstchar == _NOCHANGE) \ line->firstchar = line->lastchar = (NCURSES_SIZE_T) (col); \ else if ((col) < line->firstchar) \ line->firstchar = (NCURSES_SIZE_T) (col); \ else if ((col) > line->lastchar) \ line->lastchar = (NCURSES_SIZE_T) (col) #define CHANGED_RANGE(line,start,end) \ if (line->firstchar == _NOCHANGE \ || line->firstchar > (start)) \ line->firstchar = (NCURSES_SIZE_T) (start); \ if (line->lastchar == _NOCHANGE \ || line->lastchar < (end)) \ line->lastchar = (NCURSES_SIZE_T) (end) #define CHANGED_TO_EOL(line,start,end) \ if (line->firstchar == _NOCHANGE \ || line->firstchar > (start)) \ line->firstchar = (NCURSES_SIZE_T) (start); \ line->lastchar = (NCURSES_SIZE_T) (end) #define SIZEOF(v) (sizeof(v)/sizeof(v[0])) #define FreeIfNeeded(p) if ((p) != 0) free(p) /* FreeAndNull() is not a comma-separated expression because some compilers * do not accept a mixture of void with values. */ #define FreeAndNull(p) free(p); p = 0 #include /* * Use these for tic/infocmp malloc failures. Generally the ncurses library * tries to limp along after a failure. */ #define TYPE_MALLOC(type, size, name) \ name = typeMalloc(type, size); \ if (name == 0) \ _nc_err_abort(MSG_NO_MEMORY) #define TYPE_REALLOC(type, size, name) \ name = typeRealloc(type, size, name); \ if (name == 0) \ _nc_err_abort(MSG_NO_MEMORY) /* * TTY bit definition for converting tabs to spaces. */ #ifdef TAB3 # define OFLAGS_TABS TAB3 /* POSIX specifies TAB3 */ #else # ifdef XTABS # define OFLAGS_TABS XTABS /* XTABS is usually the "same" */ # else # ifdef OXTABS # define OFLAGS_TABS OXTABS /* the traditional BSD equivalent */ # else # define OFLAGS_TABS 0 # endif # endif #endif /* * Standardize/simplify common loops */ #define each_screen(p) p = _nc_screen_chain; p != 0; p = (p)->_next_screen #define each_window(sp,p) p = WindowList(sp); p != 0; p = (p)->next #define each_ripoff(p) p = safe_ripoff_stack; (p - safe_ripoff_stack) < N_RIPS; ++p /* * Prefixes for call/return points of library function traces. We use these to * instrument the public functions so that the traces can be easily transformed * into regression scripts. */ #define T_CALLED(fmt) "called {" fmt #define T_CREATE(fmt) "create :" fmt #define T_RETURN(fmt) "return }" fmt #ifdef TRACE #if USE_REENTRANT #define TPUTS_TRACE(s) _nc_set_tputs_trace(s); #else #define TPUTS_TRACE(s) _nc_tputs_trace = s; #endif #define START_TRACE() \ if ((_nc_tracing & TRACE_MAXIMUM) == 0) { \ int t = _nc_getenv_num("NCURSES_TRACE"); \ if (t >= 0) \ trace((unsigned) t); \ } /* * Many of the _tracef() calls use static buffers; lock the trace state before * trying to fill them. */ #if USE_REENTRANT #define USE_TRACEF(mask) _nc_use_tracef(mask) extern NCURSES_EXPORT(int) _nc_use_tracef (unsigned); extern NCURSES_EXPORT(void) _nc_locked_tracef (const char *, ...) GCC_PRINTFLIKE(1,2); #else #define USE_TRACEF(mask) (_nc_tracing & (mask)) #define _nc_locked_tracef _tracef #endif #define TR(n, a) if (USE_TRACEF(n)) _nc_locked_tracef a #define T(a) TR(TRACE_CALLS, a) #define TRACE_RETURN(value,type) return _nc_retrace_##type((type)(value)) #define TRACE_RETURN1(value,dst) return _nc_retrace_##dst(value) #define TRACE_RETURN2(value,dst,src) return _nc_retrace_##dst##_##src(value) #define TRACE_RETURN_SP(value,type) return _nc_retrace_##type(SP_PARM, value) typedef void VoidFunc(void); #define TR_FUNC(value) ((const char*) &(value)) #define NonNull(s) ((s) != 0 ? s : "") #define returnAttr(code) TRACE_RETURN(code,attr_t) #define returnBits(code) TRACE_RETURN(code,unsigned) #define returnBool(code) TRACE_RETURN(code,bool) #define returnCPtr(code) TRACE_RETURN1(code,cptr) #define returnCVoidPtr(code) TRACE_RETURN1(code,cvoid_ptr) #define returnChar(code) TRACE_RETURN(code,char) #define returnChtype(code) TRACE_RETURN(code,chtype) #define returnCode(code) TRACE_RETURN(code,int) #define returnIntAttr(code) TRACE_RETURN2(code,int,attr_t) #define returnMMask(code) TRACE_RETURN_SP(code,mmask_t) #define returnPtr(code) TRACE_RETURN1(code,ptr) #define returnSP(code) TRACE_RETURN1(code,sp) #define returnVoid T((T_RETURN(""))); return #define returnVoidPtr(code) TRACE_RETURN1(code,void_ptr) #define returnWin(code) TRACE_RETURN1(code,win) extern NCURSES_EXPORT(NCURSES_BOOL) _nc_retrace_bool (int); extern NCURSES_EXPORT(NCURSES_CONST void *) _nc_retrace_cvoid_ptr (NCURSES_CONST void *); extern NCURSES_EXPORT(SCREEN *) _nc_retrace_sp (SCREEN *); extern NCURSES_EXPORT(WINDOW *) _nc_retrace_win (WINDOW *); extern NCURSES_EXPORT(attr_t) _nc_retrace_attr_t (attr_t); extern NCURSES_EXPORT(char *) _nc_retrace_ptr (char *); extern NCURSES_EXPORT(char *) _nc_trace_ttymode(TTY *tty); extern NCURSES_EXPORT(char *) _nc_varargs (const char *, va_list); extern NCURSES_EXPORT(chtype) _nc_retrace_chtype (chtype); extern NCURSES_EXPORT(const char *) _nc_altcharset_name(attr_t, chtype); extern NCURSES_EXPORT(const char *) _nc_retrace_cptr (const char *); extern NCURSES_EXPORT(char) _nc_retrace_char (int); extern NCURSES_EXPORT(int) _nc_retrace_int (int); extern NCURSES_EXPORT(int) _nc_retrace_int_attr_t (attr_t); extern NCURSES_EXPORT(mmask_t) _nc_retrace_mmask_t (SCREEN *, mmask_t); extern NCURSES_EXPORT(unsigned) _nc_retrace_unsigned (unsigned); extern NCURSES_EXPORT(void *) _nc_retrace_void_ptr (void *); extern NCURSES_EXPORT(void) _nc_fifo_dump (SCREEN *); #if USE_REENTRANT NCURSES_WRAPPED_VAR(long, _nc_outchars); NCURSES_WRAPPED_VAR(const char *, _nc_tputs_trace); #define _nc_outchars NCURSES_PUBLIC_VAR(_nc_outchars()) #define _nc_tputs_trace NCURSES_PUBLIC_VAR(_nc_tputs_trace()) extern NCURSES_EXPORT(void) _nc_set_tputs_trace (const char *); extern NCURSES_EXPORT(void) _nc_count_outchars (long); #else extern NCURSES_EXPORT_VAR(const char *) _nc_tputs_trace; extern NCURSES_EXPORT_VAR(long) _nc_outchars; #endif extern NCURSES_EXPORT_VAR(unsigned) _nc_tracing; extern NCURSES_EXPORT(char *) _nc_tracebits (void); extern NCURSES_EXPORT(char *) _tracemouse (const MEVENT *); extern NCURSES_EXPORT(void) _tracedump (const char *, WINDOW *); #if USE_WIDEC_SUPPORT extern NCURSES_EXPORT(const char *) _nc_viswbuf2 (int, const wchar_t *); extern NCURSES_EXPORT(const char *) _nc_viswbufn (const wchar_t *, int); #endif extern NCURSES_EXPORT(const char *) _nc_viscbuf2 (int, const NCURSES_CH_T *, int); extern NCURSES_EXPORT(const char *) _nc_viscbuf (const NCURSES_CH_T *, int); #else /* !TRACE */ #define START_TRACE() /* nothing */ #define T(a) #define TR(n, a) #define TPUTS_TRACE(s) #define returnAttr(code) return code #define returnBits(code) return code #define returnBool(code) return code #define returnCPtr(code) return code #define returnCVoidPtr(code) return code #define returnChar(code) return ((char) code) #define returnChtype(code) return code #define returnCode(code) return code #define returnIntAttr(code) return code #define returnMMask(code) return code #define returnPtr(code) return code #define returnSP(code) return code #define returnVoid return #define returnVoidPtr(code) return code #define returnWin(code) return code #endif /* TRACE/!TRACE */ /* * Workaround for defective implementation of gcc attribute warn_unused_result */ #if defined(__GNUC__) && defined(_FORTIFY_SOURCE) #define IGNORE_RC(func) errno = (int) func #else #define IGNORE_RC(func) (void) func #endif /* gcc workarounds */ /* * Return-codes for tgetent() and friends. */ #define TGETENT_YES 1 /* entry is found */ #define TGETENT_NO 0 /* entry is not found */ #define TGETENT_ERR -1 /* an error occurred */ extern NCURSES_EXPORT(const char *) _nc_visbuf2 (int, const char *); extern NCURSES_EXPORT(const char *) _nc_visbufn (const char *, int); #define EMPTY_MODULE(name) \ extern NCURSES_EXPORT(void) name (void); \ NCURSES_EXPORT(void) name (void) { } #define ALL_BUT_COLOR ((chtype)~(A_COLOR)) #define NONBLANK_ATTR (A_BOLD | A_DIM | A_BLINK | A_ITALIC) #define TPARM_ATTR (A_STANDOUT | A_UNDERLINE | A_REVERSE | A_BLINK | A_DIM | A_BOLD | A_ALTCHARSET | A_INVIS | A_PROTECT) #define XMC_CONFLICT (A_STANDOUT | A_UNDERLINE | A_REVERSE | A_BLINK | A_DIM | A_BOLD | A_INVIS | A_PROTECT | A_ITALIC) #define XMC_CHANGES(c) ((c) & SP_PARM->_xmc_suppress) #define toggle_attr_on(S,at) {\ if (PairNumber(at) > 0) {\ (S) = ((S) & ALL_BUT_COLOR) | (attr_t) (at);\ } else {\ (S) |= (attr_t) (at);\ }\ TR(TRACE_ATTRS, ("new attribute is %s", _traceattr((S))));} #define toggle_attr_off(S,at) {\ if (PairNumber(at) > 0) {\ (S) &= ~(at|A_COLOR);\ } else {\ (S) &= ~(at);\ }\ TR(TRACE_ATTRS, ("new attribute is %s", _traceattr((S))));} #define DelCharCost(sp,count) \ ((parm_dch != 0) \ ? sp->_dch_cost \ : ((delete_character != 0) \ ? (sp->_dch1_cost * count) \ : INFINITY)) #define InsCharCost(sp,count) \ ((parm_ich != 0) \ ? sp->_ich_cost \ : ((enter_insert_mode && exit_insert_mode) \ ? sp->_smir_cost + sp->_rmir_cost + (sp->_ip_cost * count) \ : ((insert_character != 0) \ ? ((sp->_ich1_cost + sp->_ip_cost) * count) \ : INFINITY))) #if USE_XMC_SUPPORT #define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) { \ attr_t chg = AttrOf(SCREEN_ATTRS(sp)); \ VIDATTR(sp, AttrOf(c), GetPair(c)); \ if (magic_cookie_glitch > 0 \ && XMC_CHANGES((chg ^ AttrOf(SCREEN_ATTRS(sp))))) { \ T(("%s @%d before glitch %d,%d", \ __FILE__, __LINE__, \ sp->_cursrow, \ sp->_curscol)); \ NCURSES_SP_NAME(_nc_do_xmc_glitch)(NCURSES_SP_ARGx chg); \ } \ } #else #define UpdateAttrs(sp,c) if (!SameAttrOf(SCREEN_ATTRS(sp), c)) { \ VIDATTR(sp, AttrOf(c), GetPair(c)); \ } #endif /* * Macros to make additional parameter to implement wgetch_events() */ #ifdef NCURSES_WGETCH_EVENTS #define EVENTLIST_0th(param) param #define EVENTLIST_1st(param) param #define EVENTLIST_2nd(param) , param #define TWAIT_MASK (TW_ANY | TW_EVENT) #else #define EVENTLIST_0th(param) void #define EVENTLIST_1st(param) /* nothing */ #define EVENTLIST_2nd(param) /* nothing */ #define TWAIT_MASK TW_ANY #endif #if NCURSES_EXPANDED && NCURSES_EXT_FUNCS #undef toggle_attr_on #define toggle_attr_on(S,at) _nc_toggle_attr_on(&(S), at) extern NCURSES_EXPORT(void) _nc_toggle_attr_on (attr_t *, attr_t); #undef toggle_attr_off #define toggle_attr_off(S,at) _nc_toggle_attr_off(&(S), at) extern NCURSES_EXPORT(void) _nc_toggle_attr_off (attr_t *, attr_t); #undef DelCharCost #define DelCharCost(sp, count) NCURSES_SP_NAME(_nc_DelCharCost)(NCURSES_SP_ARGx count) #undef InsCharCost #define InsCharCost(sp, count) NCURSES_SP_NAME(_nc_InsCharCost)(NCURSES_SP_ARGx count) extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_DelCharCost) (NCURSES_SP_DCLx int _c); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_InsCharCost) (NCURSES_SP_DCLx int _c); #undef UpdateAttrs #define UpdateAttrs(sp,c) NCURSES_SP_NAME(_nc_UpdateAttrs)(NCURSES_SP_ARGx CHREF(c)) #if USE_WIDEC_SUPPORT || defined(NEED_NCURSES_CH_T) extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_UpdateAttrs) (NCURSES_SP_DCLx CARG_CH_T _c); #else extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_UpdateAttrs) (NCURSES_SP_DCLx chtype c); #endif #if NCURSES_SP_FUNCS extern NCURSES_EXPORT(int) _nc_DelCharCost (int); extern NCURSES_EXPORT(int) _nc_InsCharCost (int); extern NCURSES_EXPORT(void) _nc_UpdateAttrs (CARG_CH_T); #endif /* NCURSES_SP_FUNCS */ #else extern NCURSES_EXPORT(void) _nc_expanded (void); #endif #if !NCURSES_EXT_FUNCS #define set_escdelay(value) ESCDELAY = value #endif #if !HAVE_GETCWD #define getcwd(buf,len) getwd(buf) #endif /* charable.c */ #if USE_WIDEC_SUPPORT extern NCURSES_EXPORT(bool) _nc_is_charable(wchar_t); extern NCURSES_EXPORT(int) _nc_to_char(wint_t); extern NCURSES_EXPORT(wint_t) _nc_to_widechar(int); #endif /* comp_captab.c */ typedef struct { short nte_name; /* offset of name to hash on */ int nte_type; /* BOOLEAN, NUMBER or STRING */ short nte_index; /* index of associated variable in its array */ short nte_link; /* index in table of next hash, or -1 */ } name_table_data; typedef struct { short from; short to; short source; } alias_table_data; /* doupdate.c */ #if USE_XMC_SUPPORT extern NCURSES_EXPORT(void) _nc_do_xmc_glitch (attr_t); #endif /* hardscroll.c */ #if defined(TRACE) || defined(SCROLLDEBUG) || defined(HASHDEBUG) extern NCURSES_EXPORT(void) _nc_linedump (void); #endif /* lib_acs.c */ extern NCURSES_EXPORT(void) _nc_init_acs (void); /* corresponds to traditional 'init_acs()' */ extern NCURSES_EXPORT(int) _nc_msec_cost (const char *const, int); /* used by 'tack' program */ /* lib_addch.c */ #if USE_WIDEC_SUPPORT NCURSES_EXPORT(int) _nc_build_wch(WINDOW *win, ARG_CH_T ch); #endif /* lib_addstr.c */ #if USE_WIDEC_SUPPORT && !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) extern NCURSES_EXPORT(int) _nc_wchstrlen(const cchar_t *); #endif /* lib_color.c */ extern NCURSES_EXPORT(bool) _nc_reset_colors(void); /* lib_getch.c */ extern NCURSES_EXPORT(int) _nc_wgetch(WINDOW *, int *, int EVENTLIST_2nd(_nc_eventlist *)); /* lib_insch.c */ extern NCURSES_EXPORT(int) _nc_insert_ch(SCREEN *, WINDOW *, chtype); /* lib_mvcur.c */ #define INFINITY 1000000 /* cost: too high to use */ extern NCURSES_EXPORT(int) _nc_mvcur(int yold, int xold, int ynew, int xnew); extern NCURSES_EXPORT(void) _nc_mvcur_init (void); extern NCURSES_EXPORT(void) _nc_mvcur_resume (void); extern NCURSES_EXPORT(void) _nc_mvcur_wrap (void); extern NCURSES_EXPORT(int) _nc_scrolln (int, int, int, int); extern NCURSES_EXPORT(void) _nc_screen_init (void); extern NCURSES_EXPORT(void) _nc_screen_resume (void); extern NCURSES_EXPORT(void) _nc_screen_wrap (void); /* lib_mouse.c */ extern NCURSES_EXPORT(bool) _nc_has_mouse (SCREEN *); /* lib_mvcur.c */ #define INFINITY 1000000 /* cost: too high to use */ #define BAUDBYTE 9 /* 9 = 7 bits + 1 parity + 1 stop */ /* lib_setup.c */ extern NCURSES_EXPORT(char *) _nc_get_locale(void); extern NCURSES_EXPORT(int) _nc_unicode_locale(void); extern NCURSES_EXPORT(int) _nc_locale_breaks_acs(TERMINAL *); extern NCURSES_EXPORT(int) _nc_setupterm(NCURSES_CONST char *, int, int *, int); extern NCURSES_EXPORT(void) _nc_tinfo_cmdch(TERMINAL *, int); /* lib_set_term.c */ extern NCURSES_EXPORT(int) _nc_ripoffline(int, int(*)(WINDOW*, int)); /* lib_setup.c */ #define SETUP_FAIL ERR #define ret_error(code, fmt, arg) if (errret) {\ *errret = code;\ returnCode(SETUP_FAIL);\ } else {\ fprintf(stderr, fmt, arg);\ exit(EXIT_FAILURE);\ } #define ret_error1(code, fmt, arg) ret_error(code, "'%s': " fmt, arg) #define ret_error0(code, msg) if (errret) {\ *errret = code;\ returnCode(SETUP_FAIL);\ } else {\ fprintf(stderr, msg);\ exit(EXIT_FAILURE);\ } /* lib_tstp.c */ #if USE_SIGWINCH extern NCURSES_EXPORT(int) _nc_handle_sigwinch(SCREEN *); #else #define _nc_handle_sigwinch(a) /* nothing */ #endif /* lib_wacs.c */ #if USE_WIDEC_SUPPORT extern NCURSES_EXPORT(void) _nc_init_wacs(void); #endif typedef struct { char *s_head; /* beginning of the string (may be null) */ char *s_tail; /* end of the string (may be null) */ size_t s_size; /* current remaining size available */ size_t s_init; /* total size available */ } string_desc; /* strings.c */ extern NCURSES_EXPORT(string_desc *) _nc_str_init (string_desc *, char *, size_t); extern NCURSES_EXPORT(string_desc *) _nc_str_null (string_desc *, size_t); extern NCURSES_EXPORT(string_desc *) _nc_str_copy (string_desc *, string_desc *); extern NCURSES_EXPORT(bool) _nc_safe_strcat (string_desc *, const char *); extern NCURSES_EXPORT(bool) _nc_safe_strcpy (string_desc *, const char *); #if !HAVE_STRSTR #define strstr _nc_strstr extern NCURSES_EXPORT(char *) _nc_strstr (const char *, const char *); #endif /* safe_sprintf.c */ extern NCURSES_EXPORT(char *) _nc_printf_string (const char *, va_list); /* tries.c */ extern NCURSES_EXPORT(int) _nc_add_to_try (TRIES **, const char *, unsigned); extern NCURSES_EXPORT(char *) _nc_expand_try (TRIES *, unsigned, int *, size_t); extern NCURSES_EXPORT(int) _nc_remove_key (TRIES **, unsigned); extern NCURSES_EXPORT(int) _nc_remove_string (TRIES **, const char *); /* elsewhere ... */ extern NCURSES_EXPORT(ENTRY *) _nc_delink_entry (ENTRY *, TERMTYPE *); extern NCURSES_EXPORT(SCREEN *) _nc_screen_of (WINDOW *); extern NCURSES_EXPORT(TERMINAL*) _nc_get_cur_term (void); extern NCURSES_EXPORT(WINDOW *) _nc_makenew (int, int, int, int, int); extern NCURSES_EXPORT(char *) _nc_trace_buf (int, size_t); extern NCURSES_EXPORT(char *) _nc_trace_bufcat (int, const char *); extern NCURSES_EXPORT(char *) _nc_tracechar (SCREEN *, int); extern NCURSES_EXPORT(char *) _nc_tracemouse (SCREEN *, MEVENT const *); extern NCURSES_EXPORT(char *) _nc_trace_mmask_t (SCREEN *, mmask_t); extern NCURSES_EXPORT(int) _nc_access (const char *, int); extern NCURSES_EXPORT(int) _nc_baudrate (int); extern NCURSES_EXPORT(int) _nc_freewin (WINDOW *); extern NCURSES_EXPORT(int) _nc_getenv_num (const char *); extern NCURSES_EXPORT(int) _nc_keypad (SCREEN *, int); extern NCURSES_EXPORT(int) _nc_ospeed (int); extern NCURSES_EXPORT(int) _nc_outch (int); extern NCURSES_EXPORT(int) _nc_putchar (int); extern NCURSES_EXPORT(int) _nc_putp(const char *, const char *); extern NCURSES_EXPORT(int) _nc_putp_flush(const char *, const char *); extern NCURSES_EXPORT(int) _nc_read_termcap_entry (const char *const, TERMTYPE *const); extern NCURSES_EXPORT(int) _nc_setup_tinfo(const char *, TERMTYPE *); extern NCURSES_EXPORT(int) _nc_setupscreen (int, int, FILE *, int, int); extern NCURSES_EXPORT(int) _nc_timed_wait (SCREEN *, int, int, int * EVENTLIST_2nd(_nc_eventlist *)); extern NCURSES_EXPORT(void) _nc_do_color (int, int, int, NCURSES_OUTC); extern NCURSES_EXPORT(void) _nc_flush (void); extern NCURSES_EXPORT(void) _nc_free_and_exit (int) GCC_NORETURN; extern NCURSES_EXPORT(void) _nc_free_entry (ENTRY *, TERMTYPE *); extern NCURSES_EXPORT(void) _nc_freeall (void); extern NCURSES_EXPORT(void) _nc_hash_map (void); extern NCURSES_EXPORT(void) _nc_init_keytry (SCREEN *); extern NCURSES_EXPORT(void) _nc_keep_tic_dir (const char *); extern NCURSES_EXPORT(void) _nc_make_oldhash (int i); extern NCURSES_EXPORT(void) _nc_scroll_oldhash (int n, int top, int bot); extern NCURSES_EXPORT(void) _nc_scroll_optimize (void); extern NCURSES_EXPORT(void) _nc_set_buffer (FILE *, int); extern NCURSES_EXPORT(void) _nc_setenv_num (const char *, int); extern NCURSES_EXPORT(void) _nc_signal_handler (int); extern NCURSES_EXPORT(void) _nc_synchook (WINDOW *); extern NCURSES_EXPORT(void) _nc_trace_tries (TRIES *); #if NO_LEAKS extern NCURSES_EXPORT(void) _nc_alloc_entry_leaks(void); extern NCURSES_EXPORT(void) _nc_captoinfo_leaks(void); extern NCURSES_EXPORT(void) _nc_codes_leaks(void); extern NCURSES_EXPORT(void) _nc_comp_captab_leaks(void); extern NCURSES_EXPORT(void) _nc_comp_error_leaks(void); extern NCURSES_EXPORT(void) _nc_comp_scan_leaks(void); extern NCURSES_EXPORT(void) _nc_db_iterator_leaks(void); extern NCURSES_EXPORT(void) _nc_keyname_leaks(void); extern NCURSES_EXPORT(void) _nc_names_leaks(void); extern NCURSES_EXPORT(void) _nc_tgetent_leaks(void); #endif #if !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) extern NCURSES_EXPORT(NCURSES_CH_T) _nc_render (WINDOW *, NCURSES_CH_T); extern NCURSES_EXPORT(int) _nc_waddch_nosync (WINDOW *, const NCURSES_CH_T); extern NCURSES_EXPORT(void) _nc_scroll_window (WINDOW *, int const, int const, int const, NCURSES_CH_T); #endif #if USE_WIDEC_SUPPORT extern NCURSES_EXPORT(int) _nc_insert_wch(WINDOW *, const cchar_t *); #endif #if USE_WIDEC_SUPPORT && !(defined(USE_TERMLIB) || defined(USE_BUILD_CC)) extern NCURSES_EXPORT(size_t) _nc_wcrtomb (char *, wchar_t, mbstate_t *); #endif #if USE_SIZECHANGE extern NCURSES_EXPORT(void) _nc_update_screensize (SCREEN *); #endif #if HAVE_RESIZETERM extern NCURSES_EXPORT(void) _nc_resize_margins (WINDOW *); #else #define _nc_resize_margins(wp) /* nothing */ #endif #ifdef NCURSES_WGETCH_EVENTS extern NCURSES_EXPORT(int) _nc_eventlist_timeout(_nc_eventlist *); #else #define wgetch_events(win, evl) wgetch(win) #define wgetnstr_events(win, str, maxlen, evl) wgetnstr(win, str, maxlen) #endif /* * Wide-character macros to hide some platform-differences. */ #if USE_WIDEC_SUPPORT #if defined(__MINGW32__) /* * MinGW has wide-character functions, but they do not work correctly. */ extern int __MINGW_NOTHROW _nc_wctomb(char *, wchar_t); #define wctomb(s,wc) _nc_wctomb(s,wc) #define wcrtomb(s,wc,n) _nc_wctomb(s,wc) extern int __MINGW_NOTHROW _nc_mbtowc(wchar_t *, const char *, size_t); #define mbtowc(pwc,s,n) _nc_mbtowc(pwc,s,n) extern int __MINGW_NOTHROW _nc_mblen(const char *, size_t); #define mblen(s,n) _nc_mblen(s, n) #endif /* __MINGW32__ */ #if HAVE_MBTOWC && HAVE_MBLEN #define reset_mbytes(state) IGNORE_RC(mblen(NULL, (size_t) 0)), IGNORE_RC(mbtowc(NULL, NULL, (size_t) 0)) #define count_mbytes(buffer,length,state) mblen(buffer,length) #define check_mbytes(wch,buffer,length,state) \ (int) mbtowc(&wch, buffer, length) #define state_unused #elif HAVE_MBRTOWC && HAVE_MBRLEN #define reset_mbytes(state) init_mb(state) #define count_mbytes(buffer,length,state) mbrlen(buffer,length,&state) #define check_mbytes(wch,buffer,length,state) \ (int) mbrtowc(&wch, buffer, length, &state) #else make an error #endif #endif /* USE_WIDEC_SUPPORT */ /* * Not everyone has vsscanf(), but we'd like to use it for scanw(). */ #if !HAVE_VSSCANF extern int vsscanf(const char *str, const char *format, va_list __arg); #endif /* scroll indices */ extern NCURSES_EXPORT_VAR(int *) _nc_oldnums; #define USE_SETBUF_0 0 #define NC_OUTPUT(sp) ((sp != 0) ? sp->_ofp : stdout) /* * On systems with a broken linker, define 'SP' as a function to force the * linker to pull in the data-only module with 'SP'. */ #define _nc_alloc_screen_sp() typeCalloc(SCREEN, 1) #if BROKEN_LINKER #define SP _nc_screen() extern NCURSES_EXPORT(SCREEN *) _nc_screen (void); extern NCURSES_EXPORT(int) _nc_alloc_screen (void); extern NCURSES_EXPORT(void) _nc_set_screen (SCREEN *); #define CURRENT_SCREEN _nc_screen() #else /* current screen is private data; avoid possible linking conflicts too */ extern NCURSES_EXPORT_VAR(SCREEN *) SP; #define CURRENT_SCREEN SP #define _nc_alloc_screen() ((SP = _nc_alloc_screen_sp()) != 0) #define _nc_set_screen(sp) SP = sp #endif #if NCURSES_SP_FUNCS #define CURRENT_SCREEN_PRE (IsPreScreen(CURRENT_SCREEN) ? CURRENT_SCREEN : new_prescr()) #else #define CURRENT_SCREEN_PRE CURRENT_SCREEN #endif /* * We don't want to use the lines or columns capabilities internally, because * if the application is running multiple screens under X, it's quite possible * they could all have type xterm but have different sizes! So... */ #define screen_lines(sp) (sp)->_lines #define screen_columns(sp) (sp)->_columns extern NCURSES_EXPORT(int) _nc_slk_initialize (WINDOW *, int); extern NCURSES_EXPORT(int) _nc_format_slks (NCURSES_SP_DCLx int _c); /* * Some constants related to SLK's */ #define MAX_SKEY_OLD 8 /* count of soft keys */ #define MAX_SKEY_LEN_OLD 8 /* max length of soft key text */ #define MAX_SKEY_PC 12 /* This is what most PC's have */ #define MAX_SKEY_LEN_PC 5 /* Macro to check whether or not we use a standard format */ #define SLK_STDFMT(fmt) (fmt < 3) /* Macro to determine height of label window */ #define SLK_LINES(fmt) (SLK_STDFMT(fmt) ? 1 : ((fmt) - 2)) #define MAX_SKEY(fmt) (SLK_STDFMT(fmt)? MAX_SKEY_OLD : MAX_SKEY_PC) #define MAX_SKEY_LEN(fmt) (SLK_STDFMT(fmt)? MAX_SKEY_LEN_OLD : MAX_SKEY_LEN_PC) /* * Common error messages */ #define MSG_NO_MEMORY "Out of memory" #define MSG_NO_INPUTS "Premature EOF" extern NCURSES_EXPORT(int) _nc_set_tty_mode(TTY *); extern NCURSES_EXPORT(int) _nc_get_tty_mode(TTY *); /* timed_wait flag definitions */ #define TW_NONE 0 #define TW_INPUT 1 #define TW_MOUSE 2 #define TW_ANY (TW_INPUT | TW_MOUSE) #define TW_EVENT 4 #define SetSafeOutcWrapper(outc) \ SCREEN* sp = CURRENT_SCREEN; \ struct screen outc_wrapper; \ if (sp==0) { \ sp = &outc_wrapper; \ memset(sp,0,sizeof(struct screen)); \ sp->_outch = _nc_outc_wrapper; \ }\ sp->jump = outc #ifdef USE_TERM_DRIVER typedef struct _termInfo { bool caninit; bool hascolor; bool initcolor; bool canchange; int tabsize; int maxcolors; int maxpairs; int nocolorvideo; int numbuttons; int numlabels; int labelwidth; int labelheight; const color_t* defaultPalette; } TerminalInfo; typedef struct term_driver { bool isTerminfo; const char* (*td_name)(struct DriverTCB*); bool (*td_CanHandle)(struct DriverTCB*, const char*, int*); void (*td_init)(struct DriverTCB*); void (*td_release)(struct DriverTCB*); int (*td_size)(struct DriverTCB*, int* Line, int *Cols); int (*td_sgmode)(struct DriverTCB*, int setFlag, TTY*); chtype (*td_conattr)(struct DriverTCB*); int (*td_hwcur)(struct DriverTCB*, int yold, int xold, int y, int x); int (*td_mode)(struct DriverTCB*, int progFlag, int defFlag); bool (*td_rescol)(struct DriverTCB*); bool (*td_rescolors)(struct DriverTCB*); void (*td_color)(struct DriverTCB*, int fore, int color, int(*)(SCREEN*, int)); int (*td_doBeepOrFlash)(struct DriverTCB*, int); void (*td_initpair)(struct DriverTCB*, int, int, int); void (*td_initcolor)(struct DriverTCB*, int, int, int, int); void (*td_docolor)(struct DriverTCB*, int, int, int, int(*)(SCREEN*, int)); void (*td_initmouse)(struct DriverTCB*); int (*td_testmouse)(struct DriverTCB*, int EVENTLIST_2nd(_nc_eventlist*)); void (*td_setfilter)(struct DriverTCB*); void (*td_hwlabel)(struct DriverTCB*, int, char*); void (*td_hwlabelOnOff)(struct DriverTCB*, int); int (*td_update)(struct DriverTCB*); int (*td_defaultcolors)(struct DriverTCB*, int, int); int (*td_print)(struct DriverTCB*, char*, int); int (*td_getsize)(struct DriverTCB*, int*, int*); int (*td_setsize)(struct DriverTCB*, int, int); void (*td_initacs)(struct DriverTCB*, chtype*, chtype*); void (*td_scinit)(SCREEN *); void (*td_scexit)(SCREEN *); int (*td_twait)(struct DriverTCB*, int, int, int* EVENTLIST_2nd(_nc_eventlist*)); int (*td_read)(struct DriverTCB*, int*); int (*td_nap)(struct DriverTCB*, int); int (*td_kpad)(struct DriverTCB*, int); int (*td_kyOk)(struct DriverTCB*, int, int); bool (*td_kyExist)(struct DriverTCB*, int); int (*td_cursorSet)(struct DriverTCB*, int); } TERM_DRIVER; typedef struct DriverTCB { TERMINAL term; /* needs to be the first Element !!! */ TERM_DRIVER* drv; /* The driver for that Terminal */ SCREEN* csp; /* The screen that owns that Terminal */ TerminalInfo info; /* Driver independent core capabilities of the Terminal */ void* prop; /* Driver dependent property storage to be used by the Driver */ long magic; } TERMINAL_CONTROL_BLOCK; #define NCDRV_MAGIC(id) (0x47110000 | (id&0xffff)) #define NCDRV_TINFO 0x01 #define NCDRV_WINCONSOLE 0x02 #define TCBOf(sp) ((TERMINAL_CONTROL_BLOCK*)(TerminalOf(sp))) #define InfoOf(sp) TCBOf(sp)->info #define CallDriver(sp,method) TCBOf(sp)->drv->method(TCBOf(sp)) #define CallDriver_1(sp,method,arg1) TCBOf(sp)->drv->method(TCBOf(sp),arg1) #define CallDriver_2(sp,method,arg1,arg2) TCBOf(sp)->drv->method(TCBOf(sp),arg1,arg2) #define CallDriver_3(sp,method,arg1,arg2,arg3) TCBOf(sp)->drv->method(TCBOf(sp),arg1,arg2,arg3) #define CallDriver_4(sp,method,arg1,arg2,arg3,arg4) TCBOf(sp)->drv->method(TCBOf(sp),arg1,arg2,arg3,arg4) extern NCURSES_EXPORT_VAR(const color_t*) _nc_cga_palette; extern NCURSES_EXPORT_VAR(const color_t*) _nc_hls_palette; extern NCURSES_EXPORT(int) _nc_get_driver(TERMINAL_CONTROL_BLOCK*, const char*, int*); extern NCURSES_EXPORT(void) _nc_get_screensize_ex(SCREEN *, TERMINAL *, int *, int *); #endif /* USE_TERM_DRIVER */ /* * Entrypoints which are actually provided in the terminal driver, which would * be an sp-name otherwise. */ #ifdef USE_TERM_DRIVER #define TINFO_HAS_KEY _nc_tinfo_has_key #define TINFO_DOUPDATE _nc_tinfo_doupdate #define TINFO_MVCUR _nc_tinfo_mvcur extern NCURSES_EXPORT(int) TINFO_HAS_KEY(SCREEN*, int); extern NCURSES_EXPORT(int) TINFO_DOUPDATE(SCREEN *); extern NCURSES_EXPORT(int) TINFO_MVCUR(SCREEN*, int, int, int, int); #else #define TINFO_HAS_KEY NCURSES_SP_NAME(has_key) #define TINFO_DOUPDATE NCURSES_SP_NAME(doupdate) #define TINFO_MVCUR NCURSES_SP_NAME(_nc_mvcur) #endif /* * Entrypoints using an extra parameter with the terminal driver. */ #ifdef USE_TERM_DRIVER extern NCURSES_EXPORT(void) _nc_get_screensize(SCREEN *, TERMINAL *, int *, int *); extern NCURSES_EXPORT(int) _nc_setupterm_ex(TERMINAL **, NCURSES_CONST char *, int , int *, int); #define TINFO_GET_SIZE(sp, tp, lp, cp) \ _nc_get_screensize(sp, tp, lp, cp) #define TINFO_SET_CURTERM(sp, tp) \ NCURSES_SP_NAME(set_curterm)(sp, tp) #define TINFO_SETUP_TERM(tpp, name, fd, err, reuse) \ _nc_setupterm_ex(tpp, name, fd, err, reuse) #else /* !USE_TERM_DRIVER */ extern NCURSES_EXPORT(void) _nc_get_screensize(SCREEN *, int *, int *); #define TINFO_GET_SIZE(sp, tp, lp, cp) \ _nc_get_screensize(sp, lp, cp) #define TINFO_SET_CURTERM(sp, tp) \ set_curterm(tp) #define TINFO_SETUP_TERM(tpp, name, fd, err, reuse) \ _nc_setupterm(name, fd, err, reuse) #endif /* !USE_TERM_DRIVER */ #ifdef USE_TERM_DRIVER #if defined(USE_WIN32CON_DRIVER) #include extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_WIN_DRIVER; extern NCURSES_EXPORT(int) _nc_mingw_isatty(int fd); extern NCURSES_EXPORT(int) _nc_mingw_isconsole(int fd); extern NCURSES_EXPORT(int) _nc_mingw_console_read( SCREEN *sp, HANDLE fd, int *buf); extern NCURSES_EXPORT(int) _nc_mingw_testmouse( SCREEN * sp, HANDLE fd, int delay); #else #endif extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_TINFO_DRIVER; #endif #if defined(USE_TERM_DRIVER) && defined(USE_WIN32CON_DRIVER) #define NC_ISATTY(fd) _nc_mingw_isatty(fd) #else #define NC_ISATTY(fd) isatty(fd) #endif #ifdef USE_TERM_DRIVER # define IsTermInfo(sp) ((TCBOf(sp) != 0) && ((TCBOf(sp)->drv->isTerminfo))) # define HasTInfoTerminal(sp) ((0 != TerminalOf(sp)) && IsTermInfo(sp)) # if defined(USE_WIN32CON_DRIVER) # define IsTermInfoOnConsole(sp) (IsTermInfo(sp)&&_nc_mingw_isconsole(TerminalOf(sp)->Filedes)) #else # define IsTermInfoOnConsole(sp) FALSE # endif #else # define IsTermInfo(sp) TRUE # define HasTInfoTerminal(sp) (0 != TerminalOf(sp)) # define IsTermInfoOnConsole(sp) FALSE #endif #define IsValidTIScreen(sp) (HasTInfoTerminal(sp)) /* * Exported entrypoints beyond the published API */ #if NCURSES_SP_FUNCS extern NCURSES_EXPORT(WINDOW *) _nc_curscr_of(SCREEN*); extern NCURSES_EXPORT(WINDOW *) _nc_newscr_of(SCREEN*); extern NCURSES_EXPORT(WINDOW *) _nc_stdscr_of(SCREEN*); extern NCURSES_EXPORT(int) _nc_outc_wrapper(SCREEN*,int); #if USE_REENTRANT extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_TABSIZE)(SCREEN*); extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname)(SCREEN*); #endif #if NCURSES_EXT_FUNCS extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_set_tabsize)(SCREEN*, int); #endif /* * We put the safe versions of various calls here as they are not published * part of the API up to now */ extern NCURSES_EXPORT(TERMINAL*) NCURSES_SP_NAME(_nc_get_cur_term) (SCREEN *sp); extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(_nc_makenew) (SCREEN*, int, int, int, int, int); extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(_nc_reset_colors)(SCREEN*); extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(_nc_printf_string)(SCREEN*, const char *, va_list); extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(_nc_acs_char)(SCREEN*,int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_curs_set)(SCREEN*,int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_get_tty_mode)(SCREEN*,TTY*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_mcprint)(SCREEN*,char*, int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_msec_cost)(SCREEN*, const char *, int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_mvcur)(SCREEN*, int, int, int, int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_outch)(SCREEN*, int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putchar)(SCREEN*, int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putp)(SCREEN*, const char *, const char*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_putp_flush)(SCREEN*, const char *, const char *); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_resetty)(SCREEN*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_resize_term)(SCREEN*,int,int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_ripoffline)(SCREEN*, int, int (*)(WINDOW *,int)); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_savetty)(SCREEN*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_scr_init)(SCREEN*,const char*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_scr_restore)(SCREEN*, const char*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_scrolln)(SCREEN*, int, int, int, int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_set_tty_mode)(SCREEN*, TTY*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_setupscreen)(SCREEN**, int, int, FILE *, int, int); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_tgetent)(SCREEN*,char*,const char *); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_tigetnum)(SCREEN*,NCURSES_CONST char*); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_vid_attr)(SCREEN *, attr_t, NCURSES_COLOR_T, void *); extern NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_vidputs)(SCREEN*,chtype,int(*) (SCREEN*, int)); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_do_color)(SCREEN*, int, int, int, NCURSES_SP_OUTC); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_do_xmc_glitch)(SCREEN*, attr_t); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_flush)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_free_and_exit)(SCREEN*, int) GCC_NORETURN; extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_freeall)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_hash_map)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_init_acs)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_make_oldhash)(SCREEN*, int i); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_init)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_resume)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_mvcur_wrap)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_init)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_resume)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_screen_wrap)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_scroll_oldhash)(SCREEN*, int n, int top, int bot); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_scroll_optimize)(SCREEN*); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_set_buffer)(SCREEN*, FILE *, int); extern NCURSES_EXPORT(void) _nc_cookie_init(SCREEN *sp); #if defined(TRACE) || defined(SCROLLDEBUG) || defined(HASHDEBUG) extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_linedump)(SCREEN*); #endif #if USE_WIDEC_SUPPORT extern NCURSES_EXPORT(wchar_t *) NCURSES_SP_NAME(_nc_wunctrl)(SCREEN*, cchar_t *); #endif #endif /* NCURSES_SP_FUNCS */ #if NCURSES_SP_FUNCS #define safe_keyname NCURSES_SP_NAME(keyname) #define safe_unctrl NCURSES_SP_NAME(unctrl) #define safe_ungetch NCURSES_SP_NAME(ungetch) #else #define safe_keyname _nc_keyname #define safe_unctrl _nc_unctrl #define safe_ungetch _nc_ungetch extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_keyname (SCREEN *, int); extern NCURSES_EXPORT(int) _nc_ungetch (SCREEN *, int); extern NCURSES_EXPORT(NCURSES_CONST char *) _nc_unctrl (SCREEN *, chtype); #endif #ifdef EXP_XTERM_1005 NCURSES_EXPORT(int) _nc_conv_to_utf8(unsigned char *, unsigned, unsigned); NCURSES_EXPORT(int) _nc_conv_to_utf32(unsigned *, const char *, unsigned); #endif #ifdef __cplusplus } #endif /* *INDENT-ON* */ #endif /* CURSES_PRIV_H */ ncurses-6.0-20160213/ncurses/llib-lncursestw0000644000175100001440000024633112563707010017224 0ustar tomusers/**************************************************************************** * Copyright (c) 2009-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2009-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tty/hardscroll.c */ #include #undef _nc_oldnums int *_nc_oldnums; #undef _nc_scroll_optimize_sp void _nc_scroll_optimize_sp( SCREEN *sp) { /* void */ } #undef _nc_scroll_optimize void _nc_scroll_optimize(void) { /* void */ } #undef _nc_linedump_sp void _nc_linedump_sp( SCREEN *sp) { /* void */ } #undef _nc_linedump void _nc_linedump(void) { /* void */ } /* ./tty/hashmap.c */ #undef _nc_hash_map_sp void _nc_hash_map_sp( SCREEN *sp) { /* void */ } #undef _nc_hash_map void _nc_hash_map(void) { /* void */ } #undef _nc_make_oldhash_sp void _nc_make_oldhash_sp( SCREEN *sp, int i) { /* void */ } #undef _nc_make_oldhash void _nc_make_oldhash( int i) { /* void */ } #undef _nc_scroll_oldhash_sp void _nc_scroll_oldhash_sp( SCREEN *sp, int n, int top, int bot) { /* void */ } #undef _nc_scroll_oldhash void _nc_scroll_oldhash( int n, int top, int bot) { /* void */ } /* ./base/lib_addch.c */ #undef _nc_render cchar_t _nc_render( WINDOW *win, cchar_t ch) { return(*(cchar_t *)0); } #undef _nc_build_wch int _nc_build_wch( WINDOW *win, cchar_t *ch) { return(*(int *)0); } #undef _nc_waddch_nosync int _nc_waddch_nosync( WINDOW *win, const cchar_t c) { return(*(int *)0); } #undef waddch int waddch( WINDOW *win, const chtype ch) { return(*(int *)0); } #undef wechochar int wechochar( WINDOW *win, const chtype ch) { return(*(int *)0); } /* ./base/lib_addstr.c */ #undef waddnstr int waddnstr( WINDOW *win, const char *astr, int n) { return(*(int *)0); } #undef waddchnstr int waddchnstr( WINDOW *win, const chtype *astr, int n) { return(*(int *)0); } #undef _nc_wchstrlen int _nc_wchstrlen( const cchar_t *s) { return(*(int *)0); } #undef wadd_wchnstr int wadd_wchnstr( WINDOW *win, const cchar_t *astr, int n) { return(*(int *)0); } #undef waddnwstr int waddnwstr( WINDOW *win, const wchar_t *str, int n) { return(*(int *)0); } /* ./base/lib_beep.c */ #undef beep_sp int beep_sp( SCREEN *sp) { return(*(int *)0); } #undef beep int beep(void) { return(*(int *)0); } /* ./base/lib_bkgd.c */ #undef wbkgrndset void wbkgrndset( WINDOW *win, const cchar_t *ch) { /* void */ } #undef wbkgdset void wbkgdset( WINDOW *win, chtype ch) { /* void */ } #undef wbkgrnd int wbkgrnd( WINDOW *win, const cchar_t *ch) { return(*(int *)0); } #undef wbkgd int wbkgd( WINDOW *win, chtype ch) { return(*(int *)0); } /* ./base/lib_box.c */ #undef wborder int wborder( WINDOW *win, chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br) { return(*(int *)0); } /* ./base/lib_chgat.c */ #undef wchgat int wchgat( WINDOW *win, int n, attr_t attr, short color, const void *opts) { return(*(int *)0); } /* ./base/lib_clear.c */ #undef wclear int wclear( WINDOW *win) { return(*(int *)0); } /* ./base/lib_clearok.c */ #undef clearok int clearok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_clrbot.c */ #undef wclrtobot int wclrtobot( WINDOW *win) { return(*(int *)0); } /* ./base/lib_clreol.c */ #undef wclrtoeol int wclrtoeol( WINDOW *win) { return(*(int *)0); } /* ./base/lib_color.c */ #undef _nc_COLOR_PAIRS int _nc_COLOR_PAIRS(void) { return(*(int *)0); } #undef _nc_COLORS int _nc_COLORS(void) { return(*(int *)0); } #undef _nc_reset_colors_sp NCURSES_BOOL _nc_reset_colors_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef _nc_reset_colors NCURSES_BOOL _nc_reset_colors(void) { return(*(NCURSES_BOOL *)0); } #undef start_color_sp int start_color_sp( SCREEN *sp) { return(*(int *)0); } #undef start_color int start_color(void) { return(*(int *)0); } #undef init_pair_sp int init_pair_sp( SCREEN *sp, short pair, short f, short b) { return(*(int *)0); } #undef init_pair int init_pair( short pair, short f, short b) { return(*(int *)0); } #undef init_color_sp int init_color_sp( SCREEN *sp, short color, short r, short g, short b) { return(*(int *)0); } #undef init_color int init_color( short color, short r, short g, short b) { return(*(int *)0); } #undef can_change_color_sp NCURSES_BOOL can_change_color_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef can_change_color NCURSES_BOOL can_change_color(void) { return(*(NCURSES_BOOL *)0); } #undef has_colors_sp NCURSES_BOOL has_colors_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_colors NCURSES_BOOL has_colors(void) { return(*(NCURSES_BOOL *)0); } #undef color_content_sp int color_content_sp( SCREEN *sp, short color, short *r, short *g, short *b) { return(*(int *)0); } #undef color_content int color_content( short color, short *r, short *g, short *b) { return(*(int *)0); } #undef pair_content_sp int pair_content_sp( SCREEN *sp, short pair, short *f, short *b) { return(*(int *)0); } #undef pair_content int pair_content( short pair, short *f, short *b) { return(*(int *)0); } #undef _nc_do_color_sp void _nc_do_color_sp( SCREEN *sp, int old_pair, int pair, int reverse, NCURSES_OUTC_sp outc) { /* void */ } #undef _nc_do_color void _nc_do_color( int old_pair, int pair, int reverse, NCURSES_OUTC outc) { /* void */ } /* ./base/lib_colorset.c */ #undef wcolor_set int wcolor_set( WINDOW *win, short color_pair_number, void *opts) { return(*(int *)0); } /* ./base/lib_delch.c */ #undef wdelch int wdelch( WINDOW *win) { return(*(int *)0); } /* ./base/lib_delwin.c */ #undef delwin int delwin( WINDOW *win) { return(*(int *)0); } /* ./base/lib_echo.c */ #undef echo_sp int echo_sp( SCREEN *sp) { return(*(int *)0); } #undef echo int echo(void) { return(*(int *)0); } #undef noecho_sp int noecho_sp( SCREEN *sp) { return(*(int *)0); } #undef noecho int noecho(void) { return(*(int *)0); } /* ./base/lib_endwin.c */ #undef endwin_sp int endwin_sp( SCREEN *sp) { return(*(int *)0); } #undef endwin int endwin(void) { return(*(int *)0); } /* ./base/lib_erase.c */ #undef werase int werase( WINDOW *win) { return(*(int *)0); } /* ./base/lib_flash.c */ #undef flash_sp int flash_sp( SCREEN *sp) { return(*(int *)0); } #undef flash int flash(void) { return(*(int *)0); } /* ./lib_gen.c */ #undef addch int (addch)( const chtype z) { return(*(int *)0); } #undef addchnstr int (addchnstr)( const chtype *a1, int z) { return(*(int *)0); } #undef addchstr int (addchstr)( const chtype *z) { return(*(int *)0); } #undef addnstr int (addnstr)( const char *a1, int z) { return(*(int *)0); } #undef addstr int (addstr)( const char *z) { return(*(int *)0); } #undef attroff int (attroff)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attron int (attron)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attrset int (attrset)( NCURSES_ATTR_T z) { return(*(int *)0); } #undef attr_get int (attr_get)( attr_t *a1, short *a2, void *z) { return(*(int *)0); } #undef attr_off int (attr_off)( attr_t a1, void *z) { return(*(int *)0); } #undef attr_on int (attr_on)( attr_t a1, void *z) { return(*(int *)0); } #undef attr_set int (attr_set)( attr_t a1, short a2, void *z) { return(*(int *)0); } #undef bkgd int (bkgd)( chtype z) { return(*(int *)0); } #undef bkgdset void (bkgdset)( chtype z) { /* void */ } #undef border int (border)( chtype a1, chtype a2, chtype a3, chtype a4, chtype a5, chtype a6, chtype a7, chtype z) { return(*(int *)0); } #undef box int (box)( WINDOW *a1, chtype a2, chtype z) { return(*(int *)0); } #undef chgat int (chgat)( int a1, attr_t a2, short a3, const void *z) { return(*(int *)0); } #undef clear int (clear)(void) { return(*(int *)0); } #undef clrtobot int (clrtobot)(void) { return(*(int *)0); } #undef clrtoeol int (clrtoeol)(void) { return(*(int *)0); } #undef color_set int (color_set)( short a1, void *z) { return(*(int *)0); } #undef COLOR_PAIR int (COLOR_PAIR)( int z) { return(*(int *)0); } #undef delch int (delch)(void) { return(*(int *)0); } #undef deleteln int (deleteln)(void) { return(*(int *)0); } #undef echochar int (echochar)( const chtype z) { return(*(int *)0); } #undef erase int (erase)(void) { return(*(int *)0); } #undef getbkgd chtype (getbkgd)( WINDOW *z) { return(*(chtype *)0); } #undef getch int (getch)(void) { return(*(int *)0); } #undef getnstr int (getnstr)( char *a1, int z) { return(*(int *)0); } #undef getstr int (getstr)( char *z) { return(*(int *)0); } #undef hline int (hline)( chtype a1, int z) { return(*(int *)0); } #undef inch chtype (inch)(void) { return(*(chtype *)0); } #undef inchnstr int (inchnstr)( chtype *a1, int z) { return(*(int *)0); } #undef inchstr int (inchstr)( chtype *z) { return(*(int *)0); } #undef innstr int (innstr)( char *a1, int z) { return(*(int *)0); } #undef insch int (insch)( chtype z) { return(*(int *)0); } #undef insdelln int (insdelln)( int z) { return(*(int *)0); } #undef insertln int (insertln)(void) { return(*(int *)0); } #undef insnstr int (insnstr)( const char *a1, int z) { return(*(int *)0); } #undef insstr int (insstr)( const char *z) { return(*(int *)0); } #undef instr int (instr)( char *z) { return(*(int *)0); } #undef move int (move)( int a1, int z) { return(*(int *)0); } #undef mvaddch int (mvaddch)( int a1, int a2, const chtype z) { return(*(int *)0); } #undef mvaddchnstr int (mvaddchnstr)( int a1, int a2, const chtype *a3, int z) { return(*(int *)0); } #undef mvaddchstr int (mvaddchstr)( int a1, int a2, const chtype *z) { return(*(int *)0); } #undef mvaddnstr int (mvaddnstr)( int a1, int a2, const char *a3, int z) { return(*(int *)0); } #undef mvaddstr int (mvaddstr)( int a1, int a2, const char *z) { return(*(int *)0); } #undef mvchgat int (mvchgat)( int a1, int a2, int a3, attr_t a4, short a5, const void *z) { return(*(int *)0); } #undef mvdelch int (mvdelch)( int a1, int z) { return(*(int *)0); } #undef mvgetch int (mvgetch)( int a1, int z) { return(*(int *)0); } #undef mvgetnstr int (mvgetnstr)( int a1, int a2, char *a3, int z) { return(*(int *)0); } #undef mvgetstr int (mvgetstr)( int a1, int a2, char *z) { return(*(int *)0); } #undef mvhline int (mvhline)( int a1, int a2, chtype a3, int z) { return(*(int *)0); } #undef mvinch chtype (mvinch)( int a1, int z) { return(*(chtype *)0); } #undef mvinchnstr int (mvinchnstr)( int a1, int a2, chtype *a3, int z) { return(*(int *)0); } #undef mvinchstr int (mvinchstr)( int a1, int a2, chtype *z) { return(*(int *)0); } #undef mvinnstr int (mvinnstr)( int a1, int a2, char *a3, int z) { return(*(int *)0); } #undef mvinsch int (mvinsch)( int a1, int a2, chtype z) { return(*(int *)0); } #undef mvinsnstr int (mvinsnstr)( int a1, int a2, const char *a3, int z) { return(*(int *)0); } #undef mvinsstr int (mvinsstr)( int a1, int a2, const char *z) { return(*(int *)0); } #undef mvinstr int (mvinstr)( int a1, int a2, char *z) { return(*(int *)0); } #undef mvvline int (mvvline)( int a1, int a2, chtype a3, int z) { return(*(int *)0); } #undef mvwaddch int (mvwaddch)( WINDOW *a1, int a2, int a3, const chtype z) { return(*(int *)0); } #undef mvwaddchnstr int (mvwaddchnstr)( WINDOW *a1, int a2, int a3, const chtype *a4, int z) { return(*(int *)0); } #undef mvwaddchstr int (mvwaddchstr)( WINDOW *a1, int a2, int a3, const chtype *z) { return(*(int *)0); } #undef mvwaddnstr int (mvwaddnstr)( WINDOW *a1, int a2, int a3, const char *a4, int z) { return(*(int *)0); } #undef mvwaddstr int (mvwaddstr)( WINDOW *a1, int a2, int a3, const char *z) { return(*(int *)0); } #undef mvwchgat int (mvwchgat)( WINDOW *a1, int a2, int a3, int a4, attr_t a5, short a6, const void *z) { return(*(int *)0); } #undef mvwdelch int (mvwdelch)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef mvwgetch int (mvwgetch)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef mvwgetnstr int (mvwgetnstr)( WINDOW *a1, int a2, int a3, char *a4, int z) { return(*(int *)0); } #undef mvwgetstr int (mvwgetstr)( WINDOW *a1, int a2, int a3, char *z) { return(*(int *)0); } #undef mvwhline int (mvwhline)( WINDOW *a1, int a2, int a3, chtype a4, int z) { return(*(int *)0); } #undef mvwinch chtype (mvwinch)( WINDOW *a1, int a2, int z) { return(*(chtype *)0); } #undef mvwinchnstr int (mvwinchnstr)( WINDOW *a1, int a2, int a3, chtype *a4, int z) { return(*(int *)0); } #undef mvwinchstr int (mvwinchstr)( WINDOW *a1, int a2, int a3, chtype *z) { return(*(int *)0); } #undef mvwinnstr int (mvwinnstr)( WINDOW *a1, int a2, int a3, char *a4, int z) { return(*(int *)0); } #undef mvwinsch int (mvwinsch)( WINDOW *a1, int a2, int a3, chtype z) { return(*(int *)0); } #undef mvwinsnstr int (mvwinsnstr)( WINDOW *a1, int a2, int a3, const char *a4, int z) { return(*(int *)0); } #undef mvwinsstr int (mvwinsstr)( WINDOW *a1, int a2, int a3, const char *z) { return(*(int *)0); } #undef mvwinstr int (mvwinstr)( WINDOW *a1, int a2, int a3, char *z) { return(*(int *)0); } #undef mvwvline int (mvwvline)( WINDOW *a1, int a2, int a3, chtype a4, int z) { return(*(int *)0); } #undef PAIR_NUMBER int (PAIR_NUMBER)( int z) { return(*(int *)0); } #undef redrawwin int (redrawwin)( WINDOW *z) { return(*(int *)0); } #undef refresh int (refresh)(void) { return(*(int *)0); } #undef scrl int (scrl)( int z) { return(*(int *)0); } #undef scroll int (scroll)( WINDOW *z) { return(*(int *)0); } #undef setscrreg int (setscrreg)( int a1, int z) { return(*(int *)0); } #undef slk_attr_off int (slk_attr_off)( const attr_t a1, void *z) { return(*(int *)0); } #undef slk_attr_on int (slk_attr_on)( attr_t a1, void *z) { return(*(int *)0); } #undef standout int (standout)(void) { return(*(int *)0); } #undef standend int (standend)(void) { return(*(int *)0); } #undef timeout void (timeout)( int z) { /* void */ } #undef touchline int (touchline)( WINDOW *a1, int a2, int z) { return(*(int *)0); } #undef touchwin int (touchwin)( WINDOW *z) { return(*(int *)0); } #undef untouchwin int (untouchwin)( WINDOW *z) { return(*(int *)0); } #undef vline int (vline)( chtype a1, int z) { return(*(int *)0); } #undef vw_printw int (vw_printw)( WINDOW *a1, const char *a2, va_list z) { return(*(int *)0); } #undef vw_scanw int (vw_scanw)( WINDOW *a1, const char *a2, va_list z) { return(*(int *)0); } #undef waddchstr int (waddchstr)( WINDOW *a1, const chtype *z) { return(*(int *)0); } #undef waddstr int (waddstr)( WINDOW *a1, const char *z) { return(*(int *)0); } #undef wattron int (wattron)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattroff int (wattroff)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattrset int (wattrset)( WINDOW *a1, int z) { return(*(int *)0); } #undef wattr_get int (wattr_get)( WINDOW *a1, attr_t *a2, short *a3, void *z) { return(*(int *)0); } #undef wattr_set int (wattr_set)( WINDOW *a1, attr_t a2, short a3, void *z) { return(*(int *)0); } #undef wdeleteln int (wdeleteln)( WINDOW *z) { return(*(int *)0); } #undef wgetstr int (wgetstr)( WINDOW *a1, char *z) { return(*(int *)0); } #undef winchstr int (winchstr)( WINDOW *a1, chtype *z) { return(*(int *)0); } #undef winsertln int (winsertln)( WINDOW *z) { return(*(int *)0); } #undef winsstr int (winsstr)( WINDOW *a1, const char *z) { return(*(int *)0); } #undef winstr int (winstr)( WINDOW *a1, char *z) { return(*(int *)0); } #undef wstandout int (wstandout)( WINDOW *z) { return(*(int *)0); } #undef wstandend int (wstandend)( WINDOW *z) { return(*(int *)0); } #undef getattrs int (getattrs)( const WINDOW *z) { return(*(int *)0); } #undef getcurx int (getcurx)( const WINDOW *z) { return(*(int *)0); } #undef getcury int (getcury)( const WINDOW *z) { return(*(int *)0); } #undef getbegx int (getbegx)( const WINDOW *z) { return(*(int *)0); } #undef getbegy int (getbegy)( const WINDOW *z) { return(*(int *)0); } #undef getmaxx int (getmaxx)( const WINDOW *z) { return(*(int *)0); } #undef getmaxy int (getmaxy)( const WINDOW *z) { return(*(int *)0); } #undef getparx int (getparx)( const WINDOW *z) { return(*(int *)0); } #undef getpary int (getpary)( const WINDOW *z) { return(*(int *)0); } #undef wgetparent WINDOW *(wgetparent)( const WINDOW *z) { return(*(WINDOW **)0); } #undef is_cleared NCURSES_BOOL (is_cleared)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_idcok NCURSES_BOOL (is_idcok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_idlok NCURSES_BOOL (is_idlok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_immedok NCURSES_BOOL (is_immedok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_keypad NCURSES_BOOL (is_keypad)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_leaveok NCURSES_BOOL (is_leaveok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_nodelay NCURSES_BOOL (is_nodelay)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_notimeout NCURSES_BOOL (is_notimeout)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_pad NCURSES_BOOL (is_pad)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_scrollok NCURSES_BOOL (is_scrollok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_subwin NCURSES_BOOL (is_subwin)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef is_syncok NCURSES_BOOL (is_syncok)( const WINDOW *z) { return(*(NCURSES_BOOL *)0); } #undef wgetdelay int (wgetdelay)( const WINDOW *z) { return(*(int *)0); } #undef wgetscrreg int (wgetscrreg)( const WINDOW *a1, int *a2, int *z) { return(*(int *)0); } #undef add_wch int (add_wch)( const cchar_t *z) { return(*(int *)0); } #undef add_wchnstr int (add_wchnstr)( const cchar_t *a1, int z) { return(*(int *)0); } #undef add_wchstr int (add_wchstr)( const cchar_t *z) { return(*(int *)0); } #undef addnwstr int (addnwstr)( const wchar_t *a1, int z) { return(*(int *)0); } #undef addwstr int (addwstr)( const wchar_t *z) { return(*(int *)0); } #undef bkgrnd int (bkgrnd)( const cchar_t *z) { return(*(int *)0); } #undef bkgrndset void (bkgrndset)( const cchar_t *z) { /* void */ } #undef border_set int (border_set)( const cchar_t *a1, const cchar_t *a2, const cchar_t *a3, const cchar_t *a4, const cchar_t *a5, const cchar_t *a6, const cchar_t *a7, const cchar_t *z) { return(*(int *)0); } #undef box_set int (box_set)( WINDOW *a1, const cchar_t *a2, const cchar_t *z) { return(*(int *)0); } #undef echo_wchar int (echo_wchar)( const cchar_t *z) { return(*(int *)0); } #undef get_wch int (get_wch)( wint_t *z) { return(*(int *)0); } #undef get_wstr int (get_wstr)( wint_t *z) { return(*(int *)0); } #undef getbkgrnd int (getbkgrnd)( cchar_t *z) { return(*(int *)0); } #undef getn_wstr int (getn_wstr)( wint_t *a1, int z) { return(*(int *)0); } #undef hline_set int (hline_set)( const cchar_t *a1, int z) { return(*(int *)0); } #undef in_wch int (in_wch)( cchar_t *z) { return(*(int *)0); } #undef in_wchnstr int (in_wchnstr)( cchar_t *a1, int z) { return(*(int *)0); } #undef in_wchstr int (in_wchstr)( cchar_t *z) { return(*(int *)0); } #undef innwstr int (innwstr)( wchar_t *a1, int z) { return(*(int *)0); } #undef ins_nwstr int (ins_nwstr)( const wchar_t *a1, int z) { return(*(int *)0); } #undef ins_wch int (ins_wch)( const cchar_t *z) { return(*(int *)0); } #undef ins_wstr int (ins_wstr)( const wchar_t *z) { return(*(int *)0); } #undef inwstr int (inwstr)( wchar_t *z) { return(*(int *)0); } #undef mvadd_wch int (mvadd_wch)( int a1, int a2, const cchar_t *z) { return(*(int *)0); } #undef mvadd_wchnstr int (mvadd_wchnstr)( int a1, int a2, const cchar_t *a3, int z) { return(*(int *)0); } #undef mvadd_wchstr int (mvadd_wchstr)( int a1, int a2, const cchar_t *z) { return(*(int *)0); } #undef mvaddnwstr int (mvaddnwstr)( int a1, int a2, const wchar_t *a3, int z) { return(*(int *)0); } #undef mvaddwstr int (mvaddwstr)( int a1, int a2, const wchar_t *z) { return(*(int *)0); } #undef mvget_wch int (mvget_wch)( int a1, int a2, wint_t *z) { return(*(int *)0); } #undef mvget_wstr int (mvget_wstr)( int a1, int a2, wint_t *z) { return(*(int *)0); } #undef mvgetn_wstr int (mvgetn_wstr)( int a1, int a2, wint_t *a3, int z) { return(*(int *)0); } #undef mvhline_set int (mvhline_set)( int a1, int a2, const cchar_t *a3, int z) { return(*(int *)0); } #undef mvin_wch int (mvin_wch)( int a1, int a2, cchar_t *z) { return(*(int *)0); } #undef mvin_wchnstr int (mvin_wchnstr)( int a1, int a2, cchar_t *a3, int z) { return(*(int *)0); } #undef mvin_wchstr int (mvin_wchstr)( int a1, int a2, cchar_t *z) { return(*(int *)0); } #undef mvinnwstr int (mvinnwstr)( int a1, int a2, wchar_t *a3, int z) { return(*(int *)0); } #undef mvins_nwstr int (mvins_nwstr)( int a1, int a2, const wchar_t *a3, int z) { return(*(int *)0); } #undef mvins_wch int (mvins_wch)( int a1, int a2, const cchar_t *z) { return(*(int *)0); } #undef mvins_wstr int (mvins_wstr)( int a1, int a2, const wchar_t *z) { return(*(int *)0); } #undef mvinwstr int (mvinwstr)( int a1, int a2, wchar_t *z) { return(*(int *)0); } #undef mvvline_set int (mvvline_set)( int a1, int a2, const cchar_t *a3, int z) { return(*(int *)0); } #undef mvwadd_wch int (mvwadd_wch)( WINDOW *a1, int a2, int a3, const cchar_t *z) { return(*(int *)0); } #undef mvwadd_wchnstr int (mvwadd_wchnstr)( WINDOW *a1, int a2, int a3, const cchar_t *a4, int z) { return(*(int *)0); } #undef mvwadd_wchstr int (mvwadd_wchstr)( WINDOW *a1, int a2, int a3, const cchar_t *z) { return(*(int *)0); } #undef mvwaddnwstr int (mvwaddnwstr)( WINDOW *a1, int a2, int a3, const wchar_t *a4, int z) { return(*(int *)0); } #undef mvwaddwstr int (mvwaddwstr)( WINDOW *a1, int a2, int a3, const wchar_t *z) { return(*(int *)0); } #undef mvwget_wch int (mvwget_wch)( WINDOW *a1, int a2, int a3, wint_t *z) { return(*(int *)0); } #undef mvwget_wstr int (mvwget_wstr)( WINDOW *a1, int a2, int a3, wint_t *z) { return(*(int *)0); } #undef mvwgetn_wstr int (mvwgetn_wstr)( WINDOW *a1, int a2, int a3, wint_t *a4, int z) { return(*(int *)0); } #undef mvwhline_set int (mvwhline_set)( WINDOW *a1, int a2, int a3, const cchar_t *a4, int z) { return(*(int *)0); } #undef mvwin_wch int (mvwin_wch)( WINDOW *a1, int a2, int a3, cchar_t *z) { return(*(int *)0); } #undef mvwin_wchnstr int (mvwin_wchnstr)( WINDOW *a1, int a2, int a3, cchar_t *a4, int z) { return(*(int *)0); } #undef mvwin_wchstr int (mvwin_wchstr)( WINDOW *a1, int a2, int a3, cchar_t *z) { return(*(int *)0); } #undef mvwinnwstr int (mvwinnwstr)( WINDOW *a1, int a2, int a3, wchar_t *a4, int z) { return(*(int *)0); } #undef mvwins_nwstr int (mvwins_nwstr)( WINDOW *a1, int a2, int a3, const wchar_t *a4, int z) { return(*(int *)0); } #undef mvwins_wch int (mvwins_wch)( WINDOW *a1, int a2, int a3, const cchar_t *z) { return(*(int *)0); } #undef mvwins_wstr int (mvwins_wstr)( WINDOW *a1, int a2, int a3, const wchar_t *z) { return(*(int *)0); } #undef mvwinwstr int (mvwinwstr)( WINDOW *a1, int a2, int a3, wchar_t *z) { return(*(int *)0); } #undef mvwvline_set int (mvwvline_set)( WINDOW *a1, int a2, int a3, const cchar_t *a4, int z) { return(*(int *)0); } #undef vline_set int (vline_set)( const cchar_t *a1, int z) { return(*(int *)0); } #undef wadd_wchstr int (wadd_wchstr)( WINDOW *a1, const cchar_t *z) { return(*(int *)0); } #undef waddwstr int (waddwstr)( WINDOW *a1, const wchar_t *z) { return(*(int *)0); } #undef wget_wstr int (wget_wstr)( WINDOW *a1, wint_t *z) { return(*(int *)0); } #undef wgetbkgrnd int (wgetbkgrnd)( WINDOW *a1, cchar_t *z) { return(*(int *)0); } #undef win_wchstr int (win_wchstr)( WINDOW *a1, cchar_t *z) { return(*(int *)0); } #undef wins_wstr int (wins_wstr)( WINDOW *a1, const wchar_t *z) { return(*(int *)0); } #undef mouse_trafo NCURSES_BOOL (mouse_trafo)( int *a1, int *a2, NCURSES_BOOL z) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_getch.c */ #undef _nc_ESCDELAY int _nc_ESCDELAY(void) { return(*(int *)0); } #undef _nc_ptr_Escdelay int *_nc_ptr_Escdelay( SCREEN *sp) { return(*(int **)0); } #undef set_escdelay_sp int set_escdelay_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_escdelay int set_escdelay( int value) { return(*(int *)0); } #undef get_escdelay_sp int get_escdelay_sp( SCREEN *sp) { return(*(int *)0); } #undef get_escdelay int get_escdelay(void) { return(*(int *)0); } #undef _nc_wgetch int _nc_wgetch( WINDOW *win, int *result, int use_meta) { return(*(int *)0); } #undef wgetch int wgetch( WINDOW *win) { return(*(int *)0); } /* ./base/lib_getstr.c */ #undef wgetnstr int wgetnstr( WINDOW *win, char *str, int maxlen) { return(*(int *)0); } /* ./base/lib_hline.c */ #undef whline int whline( WINDOW *win, chtype ch, int n) { return(*(int *)0); } /* ./base/lib_immedok.c */ #undef immedok void immedok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } /* ./base/lib_inchstr.c */ #undef winchnstr int winchnstr( WINDOW *win, chtype *str, int n) { return(*(int *)0); } /* ./base/lib_initscr.c */ #undef initscr WINDOW *initscr(void) { return(*(WINDOW **)0); } /* ./base/lib_insch.c */ #undef _nc_insert_ch int _nc_insert_ch( SCREEN *sp, WINDOW *win, chtype ch) { return(*(int *)0); } #undef winsch int winsch( WINDOW *win, chtype c) { return(*(int *)0); } /* ./base/lib_insdel.c */ #undef winsdelln int winsdelln( WINDOW *win, int n) { return(*(int *)0); } /* ./base/lib_insnstr.c */ #undef winsnstr int winsnstr( WINDOW *win, const char *s, int n) { return(*(int *)0); } /* ./base/lib_instr.c */ #undef winnstr int winnstr( WINDOW *win, char *str, int n) { return(*(int *)0); } /* ./base/lib_isendwin.c */ #undef isendwin_sp NCURSES_BOOL isendwin_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef isendwin NCURSES_BOOL isendwin(void) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_leaveok.c */ #undef leaveok int leaveok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_mouse.c */ #undef getmouse_sp int getmouse_sp( SCREEN *sp, MEVENT *aevent) { return(*(int *)0); } #undef getmouse int getmouse( MEVENT *aevent) { return(*(int *)0); } #undef ungetmouse_sp int ungetmouse_sp( SCREEN *sp, MEVENT *aevent) { return(*(int *)0); } #undef ungetmouse int ungetmouse( MEVENT *aevent) { return(*(int *)0); } #undef mousemask_sp mmask_t mousemask_sp( SCREEN *sp, mmask_t newmask, mmask_t *oldmask) { return(*(mmask_t *)0); } #undef mousemask mmask_t mousemask( mmask_t newmask, mmask_t *oldmask) { return(*(mmask_t *)0); } #undef wenclose NCURSES_BOOL wenclose( const WINDOW *win, int y, int x) { return(*(NCURSES_BOOL *)0); } #undef mouseinterval_sp int mouseinterval_sp( SCREEN *sp, int maxclick) { return(*(int *)0); } #undef mouseinterval int mouseinterval( int maxclick) { return(*(int *)0); } #undef _nc_has_mouse NCURSES_BOOL _nc_has_mouse( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_mouse_sp NCURSES_BOOL has_mouse_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_mouse NCURSES_BOOL has_mouse(void) { return(*(NCURSES_BOOL *)0); } #undef wmouse_trafo NCURSES_BOOL wmouse_trafo( const WINDOW *win, int *pY, int *pX, NCURSES_BOOL to_screen) { return(*(NCURSES_BOOL *)0); } /* ./base/lib_move.c */ #undef wmove int wmove( WINDOW *win, int y, int x) { return(*(int *)0); } /* ./tty/lib_mvcur.c */ #undef _nc_msec_cost_sp int _nc_msec_cost_sp( SCREEN *sp, const char *const cap, int affcnt) { return(*(int *)0); } #undef _nc_msec_cost int _nc_msec_cost( const char *const cap, int affcnt) { return(*(int *)0); } #undef _nc_mvcur_resume_sp void _nc_mvcur_resume_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_resume void _nc_mvcur_resume(void) { /* void */ } #undef _nc_mvcur_init_sp void _nc_mvcur_init_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_init void _nc_mvcur_init(void) { /* void */ } #undef _nc_mvcur_wrap_sp void _nc_mvcur_wrap_sp( SCREEN *sp) { /* void */ } #undef _nc_mvcur_wrap void _nc_mvcur_wrap(void) { /* void */ } #undef _nc_mvcur_sp int _nc_mvcur_sp( SCREEN *sp, int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef _nc_mvcur int _nc_mvcur( int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef mvcur_sp int mvcur_sp( SCREEN *sp, int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef mvcur int mvcur( int yold, int xold, int ynew, int xnew) { return(*(int *)0); } #undef _nc_optimize_enable int _nc_optimize_enable; /* ./base/lib_mvwin.c */ #undef mvwin int mvwin( WINDOW *win, int by, int bx) { return(*(int *)0); } /* ./base/lib_newterm.c */ #undef filter_sp void filter_sp( SCREEN *sp) { /* void */ } #undef filter void filter(void) { /* void */ } #undef nofilter_sp void nofilter_sp( SCREEN *sp) { /* void */ } #undef nofilter void nofilter(void) { /* void */ } #undef newterm_sp SCREEN *newterm_sp( SCREEN *sp, const char *name, FILE *ofp, FILE *ifp) { return(*(SCREEN **)0); } #undef newterm SCREEN *newterm( const char *name, FILE *ofp, FILE *ifp) { return(*(SCREEN **)0); } /* ./base/lib_newwin.c */ #undef _nc_freewin int _nc_freewin( WINDOW *win) { return(*(int *)0); } #undef newwin_sp WINDOW *newwin_sp( SCREEN *sp, int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef newwin WINDOW *newwin( int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef derwin WINDOW *derwin( WINDOW *orig, int num_lines, int num_columns, int begy, int begx) { return(*(WINDOW **)0); } #undef subwin WINDOW *subwin( WINDOW *w, int l, int c, int y, int x) { return(*(WINDOW **)0); } #undef _nc_makenew_sp WINDOW *_nc_makenew_sp( SCREEN *sp, int num_lines, int num_columns, int begy, int begx, int flags) { return(*(WINDOW **)0); } #undef _nc_curscr_of WINDOW *_nc_curscr_of( SCREEN *sp) { return(*(WINDOW **)0); } #undef _nc_newscr_of WINDOW *_nc_newscr_of( SCREEN *sp) { return(*(WINDOW **)0); } #undef _nc_stdscr_of WINDOW *_nc_stdscr_of( SCREEN *sp) { return(*(WINDOW **)0); } /* ./base/lib_nl.c */ #undef nl_sp int nl_sp( SCREEN *sp) { return(*(int *)0); } #undef nl int nl(void) { return(*(int *)0); } #undef nonl_sp int nonl_sp( SCREEN *sp) { return(*(int *)0); } #undef nonl int nonl(void) { return(*(int *)0); } /* ./base/lib_overlay.c */ #undef overlay int overlay( const WINDOW *win1, WINDOW *win2) { return(*(int *)0); } #undef overwrite int overwrite( const WINDOW *win1, WINDOW *win2) { return(*(int *)0); } #undef copywin int copywin( const WINDOW *src, WINDOW *dst, int sminrow, int smincol, int dminrow, int dmincol, int dmaxrow, int dmaxcol, int over) { return(*(int *)0); } /* ./base/lib_pad.c */ #undef newpad_sp WINDOW *newpad_sp( SCREEN *sp, int l, int c) { return(*(WINDOW **)0); } #undef newpad WINDOW *newpad( int l, int c) { return(*(WINDOW **)0); } #undef subpad WINDOW *subpad( WINDOW *orig, int l, int c, int begy, int begx) { return(*(WINDOW **)0); } #undef prefresh int prefresh( WINDOW *win, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { return(*(int *)0); } #undef pnoutrefresh int pnoutrefresh( WINDOW *win, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { return(*(int *)0); } #undef pechochar int pechochar( WINDOW *pad, const chtype ch) { return(*(int *)0); } /* ./base/lib_printw.c */ #undef printw int printw( const char *fmt, ...) { return(*(int *)0); } #undef wprintw int wprintw( WINDOW *win, const char *fmt, ...) { return(*(int *)0); } #undef mvprintw int mvprintw( int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef mvwprintw int mvwprintw( WINDOW *win, int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef vwprintw int vwprintw( WINDOW *win, const char *fmt, va_list argp) { return(*(int *)0); } /* ./base/lib_redrawln.c */ #undef wredrawln int wredrawln( WINDOW *win, int beg, int num) { return(*(int *)0); } /* ./base/lib_refresh.c */ #undef wrefresh int wrefresh( WINDOW *win) { return(*(int *)0); } #undef wnoutrefresh int wnoutrefresh( WINDOW *win) { return(*(int *)0); } /* ./base/lib_restart.c */ #undef restartterm_sp int restartterm_sp( SCREEN *sp, const char *termp, int filenum, int *errret) { return(*(int *)0); } #undef restartterm int restartterm( const char *termp, int filenum, int *errret) { return(*(int *)0); } /* ./base/lib_scanw.c */ #undef vwscanw int vwscanw( WINDOW *win, const char *fmt, va_list argp) { return(*(int *)0); } #undef scanw int scanw( const char *fmt, ...) { return(*(int *)0); } #undef wscanw int wscanw( WINDOW *win, const char *fmt, ...) { return(*(int *)0); } #undef mvscanw int mvscanw( int y, int x, const char *fmt, ...) { return(*(int *)0); } #undef mvwscanw int mvwscanw( WINDOW *win, int y, int x, const char *fmt, ...) { return(*(int *)0); } /* ./base/lib_screen.c */ #undef getwin_sp WINDOW *getwin_sp( SCREEN *sp, FILE *filep) { return(*(WINDOW **)0); } #undef getwin WINDOW *getwin( FILE *filep) { return(*(WINDOW **)0); } #undef putwin int putwin( WINDOW *win, FILE *filep) { return(*(int *)0); } #undef scr_restore_sp int scr_restore_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_restore int scr_restore( const char *file) { return(*(int *)0); } #undef scr_dump int scr_dump( const char *file) { return(*(int *)0); } #undef scr_init_sp int scr_init_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_init int scr_init( const char *file) { return(*(int *)0); } #undef scr_set_sp int scr_set_sp( SCREEN *sp, const char *file) { return(*(int *)0); } #undef scr_set int scr_set( const char *file) { return(*(int *)0); } /* ./base/lib_scroll.c */ #undef _nc_scroll_window void _nc_scroll_window( WINDOW *win, int const n, int const top, int const bottom, cchar_t blank) { /* void */ } #undef wscrl int wscrl( WINDOW *win, int n) { return(*(int *)0); } /* ./base/lib_scrollok.c */ #undef scrollok int scrollok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/lib_scrreg.c */ #undef wsetscrreg int wsetscrreg( WINDOW *win, int top, int bottom) { return(*(int *)0); } /* ./base/lib_set_term.c */ #undef set_term SCREEN *set_term( SCREEN *screenp) { return(*(SCREEN **)0); } #undef delscreen void delscreen( SCREEN *sp) { /* void */ } #undef _nc_setupscreen_sp int _nc_setupscreen_sp( SCREEN **spp, int slines, int scolumns, FILE *output, int filtered, int slk_format) { return(*(int *)0); } #undef _nc_setupscreen int _nc_setupscreen( int slines, int scolumns, FILE *output, int filtered, int slk_format) { return(*(int *)0); } #undef _nc_ripoffline_sp int _nc_ripoffline_sp( SCREEN *sp, int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef _nc_ripoffline int _nc_ripoffline( int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef ripoffline_sp int ripoffline_sp( SCREEN *sp, int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } #undef ripoffline int ripoffline( int line, int (*init)( WINDOW *p1, int p2)) { return(*(int *)0); } /* ./base/lib_slk.c */ #undef _nc_format_slks int _nc_format_slks( SCREEN *sp, int cols) { return(*(int *)0); } #undef _nc_slk_initialize int _nc_slk_initialize( WINDOW *stwin, int cols) { return(*(int *)0); } #undef slk_restore_sp int slk_restore_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_restore int slk_restore(void) { return(*(int *)0); } /* ./base/lib_slkatr_set.c */ #undef slk_attr_set_sp int slk_attr_set_sp( SCREEN *sp, const attr_t attr, short color_pair_number, void *opts) { return(*(int *)0); } #undef slk_attr_set int slk_attr_set( const attr_t attr, short color_pair_number, void *opts) { return(*(int *)0); } /* ./base/lib_slkatrof.c */ #undef slk_attroff_sp int slk_attroff_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attroff int slk_attroff( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkatron.c */ #undef slk_attron_sp int slk_attron_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attron int slk_attron( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkatrset.c */ #undef slk_attrset_sp int slk_attrset_sp( SCREEN *sp, const chtype attr) { return(*(int *)0); } #undef slk_attrset int slk_attrset( const chtype attr) { return(*(int *)0); } /* ./base/lib_slkattr.c */ #undef slk_attr_sp attr_t slk_attr_sp( SCREEN *sp) { return(*(attr_t *)0); } #undef slk_attr attr_t slk_attr(void) { return(*(attr_t *)0); } /* ./base/lib_slkclear.c */ #undef slk_clear_sp int slk_clear_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_clear int slk_clear(void) { return(*(int *)0); } /* ./base/lib_slkcolor.c */ #undef slk_color_sp int slk_color_sp( SCREEN *sp, short color_pair_number) { return(*(int *)0); } #undef slk_color int slk_color( short color_pair_number) { return(*(int *)0); } /* ./base/lib_slkinit.c */ #undef slk_init_sp int slk_init_sp( SCREEN *sp, int format) { return(*(int *)0); } #undef slk_init int slk_init( int format) { return(*(int *)0); } /* ./base/lib_slklab.c */ #undef slk_label_sp char *slk_label_sp( SCREEN *sp, int n) { return(*(char **)0); } #undef slk_label char *slk_label( int n) { return(*(char **)0); } /* ./base/lib_slkrefr.c */ #undef slk_noutrefresh_sp int slk_noutrefresh_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_noutrefresh int slk_noutrefresh(void) { return(*(int *)0); } #undef slk_refresh_sp int slk_refresh_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_refresh int slk_refresh(void) { return(*(int *)0); } /* ./base/lib_slkset.c */ #undef slk_set_sp int slk_set_sp( SCREEN *sp, int i, const char *astr, int format) { return(*(int *)0); } #undef slk_set int slk_set( int i, const char *astr, int format) { return(*(int *)0); } /* ./base/lib_slktouch.c */ #undef slk_touch_sp int slk_touch_sp( SCREEN *sp) { return(*(int *)0); } #undef slk_touch int slk_touch(void) { return(*(int *)0); } /* ./base/lib_touch.c */ #undef is_linetouched NCURSES_BOOL is_linetouched( WINDOW *win, int line) { return(*(NCURSES_BOOL *)0); } #undef is_wintouched NCURSES_BOOL is_wintouched( WINDOW *win) { return(*(NCURSES_BOOL *)0); } #undef wtouchln int wtouchln( WINDOW *win, int y, int n, int changed) { return(*(int *)0); } /* ./trace/lib_tracedmp.c */ #undef _tracedump void _tracedump( const char *name, WINDOW *win) { /* void */ } /* ./trace/lib_tracemse.c */ #undef _nc_trace_mmask_t char *_nc_trace_mmask_t( SCREEN *sp, mmask_t code) { return(*(char **)0); } #undef _nc_tracemouse char *_nc_tracemouse( SCREEN *sp, MEVENT const *ep) { return(*(char **)0); } #undef _nc_retrace_mmask_t mmask_t _nc_retrace_mmask_t( SCREEN *sp, mmask_t code) { return(*(mmask_t *)0); } #undef _tracemouse char *_tracemouse( MEVENT const *ep) { return(*(char **)0); } /* ./tty/lib_tstp.c */ #undef _nc_signal_handler void _nc_signal_handler( int enable) { /* void */ } /* ./base/lib_ungetch.c */ #undef _nc_fifo_dump void _nc_fifo_dump( SCREEN *sp) { /* void */ } #undef ungetch_sp int ungetch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef ungetch int ungetch( int ch) { return(*(int *)0); } /* ./tty/lib_vidattr.c */ #undef vidputs_sp int vidputs_sp( SCREEN *sp, chtype newmode, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef vidputs int vidputs( chtype newmode, NCURSES_OUTC outc) { return(*(int *)0); } #undef vidattr_sp int vidattr_sp( SCREEN *sp, chtype newmode) { return(*(int *)0); } #undef vidattr int vidattr( chtype newmode) { return(*(int *)0); } #undef termattrs_sp chtype termattrs_sp( SCREEN *sp) { return(*(chtype *)0); } #undef termattrs chtype termattrs(void) { return(*(chtype *)0); } /* ./base/lib_vline.c */ #undef wvline int wvline( WINDOW *win, chtype ch, int n) { return(*(int *)0); } /* ./base/lib_wattroff.c */ #undef wattr_off int wattr_off( WINDOW *win, attr_t at, void *opts) { return(*(int *)0); } /* ./base/lib_wattron.c */ #undef wattr_on int wattr_on( WINDOW *win, attr_t at, void *opts) { return(*(int *)0); } /* ./base/lib_winch.c */ #undef winch chtype winch( WINDOW *win) { return(*(chtype *)0); } /* ./base/lib_window.c */ #undef _nc_synchook void _nc_synchook( WINDOW *win) { /* void */ } #undef mvderwin int mvderwin( WINDOW *win, int y, int x) { return(*(int *)0); } #undef syncok int syncok( WINDOW *win, NCURSES_BOOL bf) { return(*(int *)0); } #undef wsyncup void wsyncup( WINDOW *win) { /* void */ } #undef wsyncdown void wsyncdown( WINDOW *win) { /* void */ } #undef wcursyncup void wcursyncup( WINDOW *win) { /* void */ } #undef dupwin WINDOW *dupwin( WINDOW *win) { return(*(WINDOW **)0); } /* ./base/nc_panel.c */ #undef _nc_panelhook_sp struct panelhook *_nc_panelhook_sp( SCREEN *sp) { return(*(struct panelhook **)0); } #undef _nc_panelhook struct panelhook *_nc_panelhook(void) { return(*(struct panelhook **)0); } /* ./base/safe_sprintf.c */ #undef _nc_printf_string_sp char *_nc_printf_string_sp( SCREEN *sp, const char *fmt, va_list ap) { return(*(char **)0); } #undef _nc_printf_string char *_nc_printf_string( const char *fmt, va_list ap) { return(*(char **)0); } /* ./tty/tty_update.c */ #undef doupdate_sp int doupdate_sp( SCREEN *sp) { return(*(int *)0); } #undef doupdate int doupdate(void) { return(*(int *)0); } #undef _nc_scrolln_sp int _nc_scrolln_sp( SCREEN *sp, int n, int top, int bot, int maxy) { return(*(int *)0); } #undef _nc_scrolln int _nc_scrolln( int n, int top, int bot, int maxy) { return(*(int *)0); } #undef _nc_screen_resume_sp void _nc_screen_resume_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_resume void _nc_screen_resume(void) { /* void */ } #undef _nc_screen_init_sp void _nc_screen_init_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_init void _nc_screen_init(void) { /* void */ } #undef _nc_screen_wrap_sp void _nc_screen_wrap_sp( SCREEN *sp) { /* void */ } #undef _nc_screen_wrap void _nc_screen_wrap(void) { /* void */ } #undef _nc_do_xmc_glitch_sp void _nc_do_xmc_glitch_sp( SCREEN *sp, attr_t previous) { /* void */ } #undef _nc_do_xmc_glitch void _nc_do_xmc_glitch( attr_t previous) { /* void */ } /* ./trace/varargs.c */ #undef _nc_varargs char *_nc_varargs( const char *fmt, va_list ap) { return(*(char **)0); } /* ./base/vsscanf.c */ #undef _nc_vsscanf void _nc_vsscanf(void) { /* void */ } /* ./base/lib_freeall.c */ #undef _nc_freeall void _nc_freeall(void) { /* void */ } #undef _nc_free_and_exit_sp void _nc_free_and_exit_sp( SCREEN *sp, int code) { /* void */ } #undef _nc_free_and_exit void _nc_free_and_exit( int code) { /* void */ } /* ./widechar/charable.c */ #undef _nc_is_charable NCURSES_BOOL _nc_is_charable( wchar_t ch) { return(*(NCURSES_BOOL *)0); } #undef _nc_to_char int _nc_to_char( wint_t ch) { return(*(int *)0); } #undef _nc_to_widechar wint_t _nc_to_widechar( int ch) { return(*(wint_t *)0); } /* ./widechar/lib_add_wch.c */ #undef wadd_wch int wadd_wch( WINDOW *win, const cchar_t *wch) { return(*(int *)0); } #undef wecho_wchar int wecho_wchar( WINDOW *win, const cchar_t *wch) { return(*(int *)0); } /* ./widechar/lib_box_set.c */ #undef wborder_set int wborder_set( WINDOW *win, const cchar_t *ls, const cchar_t *rs, const cchar_t *ts, const cchar_t *bs, const cchar_t *tl, const cchar_t *tr, const cchar_t *bl, const cchar_t *br) { return(*(int *)0); } /* ./widechar/lib_cchar.c */ #undef setcchar int setcchar( cchar_t *wcval, const wchar_t *wch, const attr_t attrs, short color_pair, const void *opts) { return(*(int *)0); } #undef getcchar int getcchar( const cchar_t *wcval, wchar_t *wch, attr_t *attrs, short *color_pair, void *opts) { return(*(int *)0); } /* ./widechar/lib_erasewchar.c */ #undef erasewchar int erasewchar( wchar_t *wch) { return(*(int *)0); } #undef killwchar int killwchar( wchar_t *wch) { return(*(int *)0); } /* ./widechar/lib_get_wch.c */ #undef wget_wch int wget_wch( WINDOW *win, wint_t *result) { return(*(int *)0); } /* ./widechar/lib_get_wstr.c */ #undef wgetn_wstr int wgetn_wstr( WINDOW *win, wint_t *str, int maxlen) { return(*(int *)0); } /* ./widechar/lib_hline_set.c */ #undef whline_set int whline_set( WINDOW *win, const cchar_t *ch, int n) { return(*(int *)0); } /* ./widechar/lib_in_wch.c */ #undef win_wch int win_wch( WINDOW *win, cchar_t *wcval) { return(*(int *)0); } /* ./widechar/lib_in_wchnstr.c */ #undef win_wchnstr int win_wchnstr( WINDOW *win, cchar_t *wchstr, int n) { return(*(int *)0); } /* ./widechar/lib_ins_wch.c */ #undef _nc_insert_wch int _nc_insert_wch( WINDOW *win, const cchar_t *wch) { return(*(int *)0); } #undef wins_wch int wins_wch( WINDOW *win, const cchar_t *wch) { return(*(int *)0); } #undef wins_nwstr int wins_nwstr( WINDOW *win, const wchar_t *wstr, int n) { return(*(int *)0); } /* ./widechar/lib_inwstr.c */ #undef winnwstr int winnwstr( WINDOW *win, wchar_t *wstr, int n) { return(*(int *)0); } #undef winwstr int winwstr( WINDOW *win, wchar_t *wstr) { return(*(int *)0); } /* ./widechar/lib_key_name.c */ #undef key_name const char *key_name( wchar_t c) { return(*(const char **)0); } /* ./widechar/lib_pecho_wchar.c */ #undef pecho_wchar int pecho_wchar( WINDOW *pad, const cchar_t *wch) { return(*(int *)0); } /* ./widechar/lib_slk_wset.c */ #undef slk_wset int slk_wset( int i, const wchar_t *astr, int format) { return(*(int *)0); } /* ./widechar/lib_unget_wch.c */ #undef _nc_wcrtomb size_t _nc_wcrtomb( char *target, wchar_t source, mbstate_t *state) { return(*(size_t *)0); } #undef unget_wch_sp int unget_wch_sp( SCREEN *sp, const wchar_t wch) { return(*(int *)0); } #undef unget_wch int unget_wch( const wchar_t wch) { return(*(int *)0); } /* ./widechar/lib_vid_attr.c */ #undef vid_puts_sp int vid_puts_sp( SCREEN *sp, attr_t newmode, short pair, void *opts, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef vid_puts int vid_puts( attr_t newmode, short pair, void *opts, NCURSES_OUTC outc) { return(*(int *)0); } #undef vid_attr_sp int vid_attr_sp( SCREEN *sp, attr_t newmode, short pair, void *opts) { return(*(int *)0); } #undef vid_attr int vid_attr( attr_t newmode, short pair, void *opts) { return(*(int *)0); } #undef term_attrs_sp attr_t term_attrs_sp( SCREEN *sp) { return(*(attr_t *)0); } #undef term_attrs attr_t term_attrs(void) { return(*(attr_t *)0); } /* ./widechar/lib_vline_set.c */ #undef wvline_set int wvline_set( WINDOW *win, const cchar_t *ch, int n) { return(*(int *)0); } /* ./widechar/lib_wacs.c */ #undef _nc_wacs cchar_t *_nc_wacs; #undef _nc_init_wacs void _nc_init_wacs(void) { /* void */ } /* ./widechar/lib_wunctrl.c */ #undef wunctrl_sp wchar_t *wunctrl_sp( SCREEN *sp, cchar_t *wc) { return(*(wchar_t **)0); } #undef wunctrl wchar_t *wunctrl( cchar_t *wc) { return(*(wchar_t **)0); } /* ./expanded.c */ #undef _nc_toggle_attr_on void _nc_toggle_attr_on( attr_t *S, attr_t at) { /* void */ } #undef _nc_toggle_attr_off void _nc_toggle_attr_off( attr_t *S, attr_t at) { /* void */ } #undef _nc_DelCharCost_sp int _nc_DelCharCost_sp( SCREEN *sp, int count) { return(*(int *)0); } #undef _nc_InsCharCost_sp int _nc_InsCharCost_sp( SCREEN *sp, int count) { return(*(int *)0); } #undef _nc_UpdateAttrs_sp void _nc_UpdateAttrs_sp( SCREEN *sp, const cchar_t *c) { /* void */ } #undef _nc_DelCharCost int _nc_DelCharCost( int count) { return(*(int *)0); } #undef _nc_InsCharCost int _nc_InsCharCost( int count) { return(*(int *)0); } #undef _nc_UpdateAttrs void _nc_UpdateAttrs( const cchar_t *c) { /* void */ } /* ./base/legacy_coding.c */ #undef use_legacy_coding_sp int use_legacy_coding_sp( SCREEN *sp, int level) { return(*(int *)0); } #undef use_legacy_coding int use_legacy_coding( int level) { return(*(int *)0); } /* ./base/lib_dft_fgbg.c */ #undef use_default_colors_sp int use_default_colors_sp( SCREEN *sp) { return(*(int *)0); } #undef use_default_colors int use_default_colors(void) { return(*(int *)0); } #undef assume_default_colors_sp int assume_default_colors_sp( SCREEN *sp, int fg, int bg) { return(*(int *)0); } #undef assume_default_colors int assume_default_colors( int fg, int bg) { return(*(int *)0); } /* ./tinfo/lib_print.c */ #undef mcprint_sp int mcprint_sp( SCREEN *sp, char *data, int len) { return(*(int *)0); } #undef mcprint int mcprint( char *data, int len) { return(*(int *)0); } /* ./base/resizeterm.c */ #undef is_term_resized_sp NCURSES_BOOL is_term_resized_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(NCURSES_BOOL *)0); } #undef is_term_resized NCURSES_BOOL is_term_resized( int ToLines, int ToCols) { return(*(NCURSES_BOOL *)0); } #undef resize_term_sp int resize_term_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(int *)0); } #undef resize_term int resize_term( int ToLines, int ToCols) { return(*(int *)0); } #undef resizeterm_sp int resizeterm_sp( SCREEN *sp, int ToLines, int ToCols) { return(*(int *)0); } #undef resizeterm int resizeterm( int ToLines, int ToCols) { return(*(int *)0); } /* ./trace/trace_xnames.c */ #undef _nc_trace_xnames void _nc_trace_xnames( TERMTYPE *tp) { /* void */ } /* ./tinfo/use_screen.c */ #undef use_screen int use_screen( SCREEN *screen, NCURSES_SCREEN_CB func, void *data) { return(*(int *)0); } /* ./base/use_window.c */ #undef use_window int use_window( WINDOW *win, NCURSES_WINDOW_CB func, void *data) { return(*(int *)0); } /* ./base/wresize.c */ #undef wresize int wresize( WINDOW *win, int ToLines, int ToCols) { return(*(int *)0); } /* ./tinfo/access.c */ #undef _nc_rootname char *_nc_rootname( char *path) { return(*(char **)0); } #undef _nc_is_abs_path NCURSES_BOOL _nc_is_abs_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_pathlast unsigned _nc_pathlast( const char *path) { return(*(unsigned *)0); } #undef _nc_basename char *_nc_basename( char *path) { return(*(char **)0); } #undef _nc_access int _nc_access( const char *path, int mode) { return(*(int *)0); } #undef _nc_is_dir_path NCURSES_BOOL _nc_is_dir_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_is_file_path NCURSES_BOOL _nc_is_file_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_env_access int _nc_env_access(void) { return(*(int *)0); } /* ./tinfo/add_tries.c */ #undef _nc_add_to_try int _nc_add_to_try( TRIES **tree, const char *str, unsigned code) { return(*(int *)0); } /* ./tinfo/alloc_ttype.c */ #undef _nc_align_termtype void _nc_align_termtype( TERMTYPE *to, TERMTYPE *from) { /* void */ } #undef _nc_copy_termtype void _nc_copy_termtype( TERMTYPE *dst, const TERMTYPE *src) { /* void */ } /* ./codes.c */ #undef _nc_boolcodes const char *const *_nc_boolcodes(void) { return(*(const char **)0); } #undef _nc_numcodes const char *const *_nc_numcodes(void) { return(*(const char **)0); } #undef _nc_strcodes const char *const *_nc_strcodes(void) { return(*(const char **)0); } /* ./comp_captab.c */ #undef _nc_get_table const struct name_table_entry *_nc_get_table( NCURSES_BOOL termcap) { return(*(const struct name_table_entry **)0); } #undef _nc_get_hash_table const HashValue *_nc_get_hash_table( NCURSES_BOOL termcap) { return(*(const HashValue **)0); } #undef _nc_get_alias_table const struct alias *_nc_get_alias_table( NCURSES_BOOL termcap) { return(*(const struct alias **)0); } #undef _nc_get_hash_info const HashData *_nc_get_hash_info( NCURSES_BOOL termcap) { return(*(const HashData **)0); } /* ./tinfo/comp_error.c */ #undef _nc_suppress_warnings NCURSES_BOOL _nc_suppress_warnings; #undef _nc_curr_line int _nc_curr_line; #undef _nc_curr_col int _nc_curr_col; #undef _nc_get_source const char *_nc_get_source(void) { return(*(const char **)0); } #undef _nc_set_source void _nc_set_source( const char *const name) { /* void */ } #undef _nc_set_type void _nc_set_type( const char *const name) { /* void */ } #undef _nc_get_type void _nc_get_type( char *name) { /* void */ } #undef _nc_warning void _nc_warning( const char *const fmt, ...) { /* void */ } #undef _nc_err_abort void _nc_err_abort( const char *const fmt, ...) { /* void */ } #undef _nc_syserr_abort void _nc_syserr_abort( const char *const fmt, ...) { /* void */ } /* ./tinfo/comp_hash.c */ #undef _nc_find_entry struct name_table_entry const *_nc_find_entry( const char *string, const HashValue *hash_table) { return(*(struct name_table_entry const **)0); } #undef _nc_find_type_entry struct name_table_entry const *_nc_find_type_entry( const char *string, int type, NCURSES_BOOL termcap) { return(*(struct name_table_entry const **)0); } /* ./tinfo/db_iterator.c */ #undef _nc_tic_dir const char *_nc_tic_dir( const char *path) { return(*(const char **)0); } #undef _nc_keep_tic_dir void _nc_keep_tic_dir( const char *path) { /* void */ } #undef _nc_last_db void _nc_last_db(void) { /* void */ } #undef _nc_next_db const char *_nc_next_db( DBDIRS *state, int *offset) { return(*(const char **)0); } #undef _nc_first_db void _nc_first_db( DBDIRS *state, int *offset) { /* void */ } /* ./tinfo/doalloc.c */ #undef _nc_doalloc void *_nc_doalloc( void *oldp, size_t amount) { return(*(void **)0); } /* ./tinfo/entries.c */ #undef _nc_head ENTRY *_nc_head; #undef _nc_tail ENTRY *_nc_tail; #undef _nc_free_entry void _nc_free_entry( ENTRY *headp, TERMTYPE *tterm) { /* void */ } #undef _nc_free_entries void _nc_free_entries( ENTRY *headp) { /* void */ } #undef _nc_delink_entry ENTRY *_nc_delink_entry( ENTRY *headp, TERMTYPE *tterm) { return(*(ENTRY **)0); } #undef _nc_leaks_tinfo void _nc_leaks_tinfo(void) { /* void */ } /* ./fallback.c */ #undef _nc_fallback const TERMTYPE *_nc_fallback( const char *name) { return(*(const TERMTYPE **)0); } /* ./tinfo/free_ttype.c */ #undef _nc_free_termtype void _nc_free_termtype( TERMTYPE *ptr) { /* void */ } #undef _nc_user_definable NCURSES_BOOL _nc_user_definable; #undef use_extended_names int use_extended_names( NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/getenv_num.c */ #undef _nc_getenv_num int _nc_getenv_num( const char *name) { return(*(int *)0); } #undef _nc_setenv_num void _nc_setenv_num( const char *name, int value) { /* void */ } /* ./tinfo/home_terminfo.c */ #undef _nc_home_terminfo char *_nc_home_terminfo(void) { return(*(char **)0); } /* ./tinfo/init_keytry.c */ #undef _nc_init_keytry void _nc_init_keytry( SCREEN *sp) { /* void */ } /* ./tinfo/lib_acs.c */ #undef _nc_acs_map chtype *_nc_acs_map(void) { return(*(chtype **)0); } #undef _nc_init_acs_sp void _nc_init_acs_sp( SCREEN *sp) { /* void */ } #undef _nc_init_acs void _nc_init_acs(void) { /* void */ } /* ./tinfo/lib_baudrate.c */ struct speed { short s; int sp; }; #undef _nc_baudrate int _nc_baudrate( int OSpeed) { return(*(int *)0); } #undef _nc_ospeed int _nc_ospeed( int BaudRate) { return(*(int *)0); } #undef baudrate_sp int baudrate_sp( SCREEN *sp) { return(*(int *)0); } #undef baudrate int baudrate(void) { return(*(int *)0); } /* ./tinfo/lib_cur_term.c */ #undef _nc_get_cur_term_sp TERMINAL *_nc_get_cur_term_sp( SCREEN *sp) { return(*(TERMINAL **)0); } #undef _nc_get_cur_term TERMINAL *_nc_get_cur_term(void) { return(*(TERMINAL **)0); } #undef _nc_cur_term TERMINAL *_nc_cur_term(void) { return(*(TERMINAL **)0); } #undef set_curterm_sp TERMINAL *set_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(TERMINAL **)0); } #undef set_curterm TERMINAL *set_curterm( TERMINAL *termp) { return(*(TERMINAL **)0); } #undef del_curterm_sp int del_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(int *)0); } #undef del_curterm int del_curterm( TERMINAL *termp) { return(*(int *)0); } /* ./tinfo/lib_data.c */ #undef _nc_stdscr WINDOW *_nc_stdscr(void) { return(*(WINDOW **)0); } #undef _nc_curscr WINDOW *_nc_curscr(void) { return(*(WINDOW **)0); } #undef _nc_newscr WINDOW *_nc_newscr(void) { return(*(WINDOW **)0); } #undef _nc_screen_chain SCREEN *_nc_screen_chain; #undef SP SCREEN *SP; #undef _nc_globals NCURSES_GLOBALS _nc_globals; #undef _nc_prescreen NCURSES_PRESCREEN _nc_prescreen; #undef _nc_screen_of SCREEN *_nc_screen_of( WINDOW *win) { return(*(SCREEN **)0); } #undef _nc_init_pthreads void _nc_init_pthreads(void) { /* void */ } #undef _nc_mutex_init void _nc_mutex_init( pthread_mutex_t *obj) { /* void */ } #undef _nc_mutex_lock int _nc_mutex_lock( pthread_mutex_t *obj) { return(*(int *)0); } #undef _nc_mutex_trylock int _nc_mutex_trylock( pthread_mutex_t *obj) { return(*(int *)0); } #undef _nc_mutex_unlock int _nc_mutex_unlock( pthread_mutex_t *obj) { return(*(int *)0); } /* ./tinfo/lib_has_cap.c */ #undef has_ic_sp NCURSES_BOOL has_ic_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_ic NCURSES_BOOL has_ic(void) { return(*(NCURSES_BOOL *)0); } #undef has_il_sp NCURSES_BOOL has_il_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_il NCURSES_BOOL has_il(void) { return(*(NCURSES_BOOL *)0); } /* ./tinfo/lib_kernel.c */ #undef erasechar_sp char erasechar_sp( SCREEN *sp) { return(*(char *)0); } #undef erasechar char erasechar(void) { return(*(char *)0); } #undef killchar_sp char killchar_sp( SCREEN *sp) { return(*(char *)0); } #undef killchar char killchar(void) { return(*(char *)0); } #undef flushinp_sp int flushinp_sp( SCREEN *sp) { return(*(int *)0); } #undef flushinp int flushinp(void) { return(*(int *)0); } /* ./lib_keyname.c */ struct kn { short offset; int code; }; #undef keyname_sp const char *keyname_sp( SCREEN *sp, int c) { return(*(const char **)0); } #undef keyname const char *keyname( int c) { return(*(const char **)0); } /* ./tinfo/lib_longname.c */ #undef longname_sp char *longname_sp( SCREEN *sp) { return(*(char **)0); } #undef longname char *longname(void) { return(*(char **)0); } /* ./tinfo/lib_napms.c */ #undef napms_sp int napms_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef napms int napms( int ms) { return(*(int *)0); } /* ./tinfo/lib_options.c */ #undef idlok int idlok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef idcok void idcok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } #undef halfdelay_sp int halfdelay_sp( SCREEN *sp, int t) { return(*(int *)0); } #undef halfdelay int halfdelay( int t) { return(*(int *)0); } #undef nodelay int nodelay( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef notimeout int notimeout( WINDOW *win, NCURSES_BOOL f) { return(*(int *)0); } #undef wtimeout void wtimeout( WINDOW *win, int delay) { /* void */ } #undef keypad int keypad( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef meta int meta( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef curs_set_sp int curs_set_sp( SCREEN *sp, int vis) { return(*(int *)0); } #undef curs_set int curs_set( int vis) { return(*(int *)0); } #undef typeahead_sp int typeahead_sp( SCREEN *sp, int fd) { return(*(int *)0); } #undef typeahead int typeahead( int fd) { return(*(int *)0); } #undef has_key_sp int has_key_sp( SCREEN *sp, int keycode) { return(*(int *)0); } #undef has_key int has_key( int keycode) { return(*(int *)0); } #undef _nc_putp_flush_sp int _nc_putp_flush_sp( SCREEN *sp, const char *name, const char *value) { return(*(int *)0); } #undef _nc_keypad int _nc_keypad( SCREEN *sp, int flag) { return(*(int *)0); } /* ./tinfo/lib_raw.c */ #undef raw_sp int raw_sp( SCREEN *sp) { return(*(int *)0); } #undef raw int raw(void) { return(*(int *)0); } #undef cbreak_sp int cbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef cbreak int cbreak(void) { return(*(int *)0); } #undef qiflush_sp void qiflush_sp( SCREEN *sp) { /* void */ } #undef qiflush void qiflush(void) { /* void */ } #undef noraw_sp int noraw_sp( SCREEN *sp) { return(*(int *)0); } #undef noraw int noraw(void) { return(*(int *)0); } #undef nocbreak_sp int nocbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef nocbreak int nocbreak(void) { return(*(int *)0); } #undef noqiflush_sp void noqiflush_sp( SCREEN *sp) { /* void */ } #undef noqiflush void noqiflush(void) { /* void */ } #undef intrflush_sp int intrflush_sp( SCREEN *sp, WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef intrflush int intrflush( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/lib_setup.c */ #undef _nc_ttytype char *_nc_ttytype(void) { return(*(char **)0); } #undef _nc_ptr_Lines int *_nc_ptr_Lines( SCREEN *sp) { return(*(int **)0); } #undef _nc_LINES int _nc_LINES(void) { return(*(int *)0); } #undef _nc_ptr_Cols int *_nc_ptr_Cols( SCREEN *sp) { return(*(int **)0); } #undef _nc_COLS int _nc_COLS(void) { return(*(int *)0); } #undef _nc_ptr_Tabsize int *_nc_ptr_Tabsize( SCREEN *sp) { return(*(int **)0); } #undef _nc_TABSIZE int _nc_TABSIZE(void) { return(*(int *)0); } #undef set_tabsize_sp int set_tabsize_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_tabsize int set_tabsize( int value) { return(*(int *)0); } #undef _nc_handle_sigwinch int _nc_handle_sigwinch( SCREEN *sp) { return(*(int *)0); } #undef use_env_sp void use_env_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_tioctl_sp void use_tioctl_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_env void use_env( NCURSES_BOOL f) { /* void */ } #undef use_tioctl void use_tioctl( NCURSES_BOOL f) { /* void */ } #undef _nc_get_screensize void _nc_get_screensize( SCREEN *sp, int *linep, int *colp) { /* void */ } #undef _nc_update_screensize void _nc_update_screensize( SCREEN *sp) { /* void */ } #undef _nc_setup_tinfo int _nc_setup_tinfo( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } #undef _nc_tinfo_cmdch void _nc_tinfo_cmdch( TERMINAL *termp, int proto) { /* void */ } #undef _nc_get_locale char *_nc_get_locale(void) { return(*(char **)0); } #undef _nc_unicode_locale int _nc_unicode_locale(void) { return(*(int *)0); } #undef _nc_locale_breaks_acs int _nc_locale_breaks_acs( TERMINAL *termp) { return(*(int *)0); } #undef _nc_setupterm int _nc_setupterm( const char *tname, int Filedes, int *errret, int reuse) { return(*(int *)0); } #undef new_prescr SCREEN *new_prescr(void) { return(*(SCREEN **)0); } #undef setupterm int setupterm( const char *tname, int Filedes, int *errret) { return(*(int *)0); } /* ./tinfo/lib_termcap.c */ #undef UP char *UP; #undef BC char *BC; #undef tgetent_sp int tgetent_sp( SCREEN *sp, char *bufp, const char *name) { return(*(int *)0); } #undef tgetent int tgetent( char *bufp, const char *name) { return(*(int *)0); } #undef tgetflag_sp int tgetflag_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetflag int tgetflag( const char *id) { return(*(int *)0); } #undef tgetnum_sp int tgetnum_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetnum int tgetnum( const char *id) { return(*(int *)0); } #undef tgetstr_sp char *tgetstr_sp( SCREEN *sp, const char *id, char **area) { return(*(char **)0); } #undef tgetstr char *tgetstr( const char *id, char **area) { return(*(char **)0); } /* ./tinfo/lib_termname.c */ #undef termname_sp char *termname_sp( SCREEN *sp) { return(*(char **)0); } #undef termname char *termname(void) { return(*(char **)0); } /* ./tinfo/lib_tgoto.c */ #undef tgoto char *tgoto( const char *string, int x, int y) { return(*(char **)0); } /* ./tinfo/lib_ti.c */ #undef tigetflag_sp int tigetflag_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetflag int tigetflag( const char *str) { return(*(int *)0); } #undef tigetnum_sp int tigetnum_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetnum int tigetnum( const char *str) { return(*(int *)0); } #undef tigetstr_sp char *tigetstr_sp( SCREEN *sp, const char *str) { return(*(char **)0); } #undef tigetstr char *tigetstr( const char *str) { return(*(char **)0); } /* ./tinfo/lib_tparm.c */ #undef _nc_tparm_err int _nc_tparm_err; #undef _nc_tparm_analyze int _nc_tparm_analyze( const char *string, char *p_is_s[9], int *_nc_popcount) { return(*(int *)0); } #undef tparm char *tparm( const char *string, ...) { return(*(char **)0); } #undef tiparm char *tiparm( const char *string, ...) { return(*(char **)0); } /* ./tinfo/lib_tputs.c */ #undef PC char PC; #undef ospeed short ospeed; #undef _nc_nulls_sent int _nc_nulls_sent; #undef _nc_set_no_padding void _nc_set_no_padding( SCREEN *sp) { /* void */ } #undef delay_output_sp int delay_output_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef delay_output int delay_output( int ms) { return(*(int *)0); } #undef _nc_flush_sp void _nc_flush_sp( SCREEN *sp) { /* void */ } #undef _nc_flush void _nc_flush(void) { /* void */ } #undef _nc_outch_sp int _nc_outch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_outch int _nc_outch( int ch) { return(*(int *)0); } #undef _nc_putchar_sp int _nc_putchar_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_putchar int _nc_putchar( int ch) { return(*(int *)0); } #undef putp_sp int putp_sp( SCREEN *sp, const char *string) { return(*(int *)0); } #undef putp int putp( const char *string) { return(*(int *)0); } #undef _nc_putp_sp int _nc_putp_sp( SCREEN *sp, const char *name, const char *string) { return(*(int *)0); } #undef _nc_putp int _nc_putp( const char *name, const char *string) { return(*(int *)0); } #undef tputs_sp int tputs_sp( SCREEN *sp, const char *string, int affcnt, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef _nc_outc_wrapper int _nc_outc_wrapper( SCREEN *sp, int c) { return(*(int *)0); } #undef tputs int tputs( const char *string, int affcnt, int (*outc)( int p1)) { return(*(int *)0); } /* ./trace/lib_trace.c */ #undef _nc_tracing unsigned _nc_tracing; #undef _nc__nc_tputs_trace const char *_nc__nc_tputs_trace(void) { return(*(const char **)0); } #undef _nc__nc_outchars long _nc__nc_outchars(void) { return(*(long *)0); } #undef _nc_set_tputs_trace void _nc_set_tputs_trace( const char *s) { /* void */ } #undef _nc_count_outchars void _nc_count_outchars( long increment) { /* void */ } #undef trace void trace( const unsigned int tracelevel) { /* void */ } #undef _tracef void _tracef( const char *fmt, ...) { /* void */ } #undef _nc_retrace_bool NCURSES_BOOL _nc_retrace_bool( int code) { return(*(NCURSES_BOOL *)0); } #undef _nc_retrace_char char _nc_retrace_char( int code) { return(*(char *)0); } #undef _nc_retrace_int int _nc_retrace_int( int code) { return(*(int *)0); } #undef _nc_retrace_unsigned unsigned _nc_retrace_unsigned( unsigned code) { return(*(unsigned *)0); } #undef _nc_retrace_ptr char *_nc_retrace_ptr( char *code) { return(*(char **)0); } #undef _nc_retrace_cptr const char *_nc_retrace_cptr( const char *code) { return(*(const char **)0); } #undef _nc_retrace_cvoid_ptr const void *_nc_retrace_cvoid_ptr( const void *code) { return(*(const void **)0); } #undef _nc_retrace_void_ptr void *_nc_retrace_void_ptr( void *code) { return(*(void **)0); } #undef _nc_retrace_sp SCREEN *_nc_retrace_sp( SCREEN *code) { return(*(SCREEN **)0); } #undef _nc_retrace_win WINDOW *_nc_retrace_win( WINDOW *code) { return(*(WINDOW **)0); } #undef _nc_use_tracef int _nc_use_tracef( unsigned mask) { return(*(int *)0); } #undef _nc_locked_tracef void _nc_locked_tracef( const char *fmt, ...) { /* void */ } /* ./trace/lib_traceatr.c */ #undef _traceattr2 char *_traceattr2( int bufnum, chtype newmode) { return(*(char **)0); } #undef _traceattr char *_traceattr( attr_t newmode) { return(*(char **)0); } #undef _nc_retrace_int_attr_t int _nc_retrace_int_attr_t( attr_t code) { return(*(int *)0); } #undef _nc_retrace_attr_t attr_t _nc_retrace_attr_t( attr_t code) { return(*(attr_t *)0); } #undef _nc_altcharset_name const char *_nc_altcharset_name( attr_t attr, chtype ch) { return(*(const char **)0); } #undef _tracechtype2 char *_tracechtype2( int bufnum, chtype ch) { return(*(char **)0); } #undef _tracechtype char *_tracechtype( chtype ch) { return(*(char **)0); } #undef _nc_retrace_chtype chtype _nc_retrace_chtype( chtype code) { return(*(chtype *)0); } #undef _tracecchar_t2 char *_tracecchar_t2( int bufnum, const cchar_t *ch) { return(*(char **)0); } #undef _tracecchar_t char *_tracecchar_t( const cchar_t *ch) { return(*(char **)0); } /* ./trace/lib_tracebits.c */ #undef _nc_trace_ttymode char *_nc_trace_ttymode( struct termios *tty) { return(*(char **)0); } #undef _nc_tracebits char *_nc_tracebits(void) { return(*(char **)0); } /* ./trace/lib_tracechr.c */ #undef _nc_tracechar char *_nc_tracechar( SCREEN *sp, int ch) { return(*(char **)0); } #undef _tracechar char *_tracechar( int ch) { return(*(char **)0); } /* ./tinfo/lib_ttyflags.c */ #undef _nc_get_tty_mode_sp int _nc_get_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_get_tty_mode int _nc_get_tty_mode( struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode_sp int _nc_set_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode int _nc_set_tty_mode( struct termios *buf) { return(*(int *)0); } #undef def_shell_mode_sp int def_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_shell_mode int def_shell_mode(void) { return(*(int *)0); } #undef def_prog_mode_sp int def_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_prog_mode int def_prog_mode(void) { return(*(int *)0); } #undef reset_prog_mode_sp int reset_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_prog_mode int reset_prog_mode(void) { return(*(int *)0); } #undef reset_shell_mode_sp int reset_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_shell_mode int reset_shell_mode(void) { return(*(int *)0); } #undef savetty_sp int savetty_sp( SCREEN *sp) { return(*(int *)0); } #undef savetty int savetty(void) { return(*(int *)0); } #undef resetty_sp int resetty_sp( SCREEN *sp) { return(*(int *)0); } #undef resetty int resetty(void) { return(*(int *)0); } /* ./tty/lib_twait.c */ #undef _nc_timed_wait int _nc_timed_wait( SCREEN *sp, int mode, int milliseconds, int *timeleft) { return(*(int *)0); } /* ./tinfo/name_match.c */ #undef _nc_first_name char *_nc_first_name( const char *const sp) { return(*(char **)0); } #undef _nc_name_match int _nc_name_match( const char *const namelst, const char *const name, const char *const delim) { return(*(int *)0); } /* ./names.c */ #undef _nc_boolnames const char *const *_nc_boolnames(void) { return(*(const char **)0); } #undef _nc_boolfnames const char *const *_nc_boolfnames(void) { return(*(const char **)0); } #undef _nc_numnames const char *const *_nc_numnames(void) { return(*(const char **)0); } #undef _nc_numfnames const char *const *_nc_numfnames(void) { return(*(const char **)0); } #undef _nc_strnames const char *const *_nc_strnames(void) { return(*(const char **)0); } #undef _nc_strfnames const char *const *_nc_strfnames(void) { return(*(const char **)0); } /* ./tinfo/obsolete.c */ #undef _nc_set_buffer_sp void _nc_set_buffer_sp( SCREEN *sp, FILE *ofp, int buffered) { /* void */ } #undef _nc_set_buffer void _nc_set_buffer( FILE *ofp, int buffered) { /* void */ } /* ./tinfo/read_entry.c */ #undef _nc_init_termtype void _nc_init_termtype( TERMTYPE *const tp) { /* void */ } #undef _nc_read_termtype int _nc_read_termtype( TERMTYPE *ptr, char *buffer, int limit) { return(*(int *)0); } #undef _nc_read_file_entry int _nc_read_file_entry( const char *const filename, TERMTYPE *ptr) { return(*(int *)0); } #undef _nc_read_entry int _nc_read_entry( const char *const name, char *const filename, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/read_termcap.c */ #undef _nc_read_termcap_entry int _nc_read_termcap_entry( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/strings.c */ #undef _nc_str_init string_desc *_nc_str_init( string_desc *dst, char *src, size_t len) { return(*(string_desc **)0); } #undef _nc_str_null string_desc *_nc_str_null( string_desc *dst, size_t len) { return(*(string_desc **)0); } #undef _nc_str_copy string_desc *_nc_str_copy( string_desc *dst, string_desc *src) { return(*(string_desc **)0); } #undef _nc_safe_strcat NCURSES_BOOL _nc_safe_strcat( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_safe_strcpy NCURSES_BOOL _nc_safe_strcpy( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } /* ./trace/trace_buf.c */ #undef _nc_trace_buf char *_nc_trace_buf( int bufnum, size_t want) { return(*(char **)0); } #undef _nc_trace_bufcat char *_nc_trace_bufcat( int bufnum, const char *value) { return(*(char **)0); } /* ./trace/trace_tries.c */ #undef _nc_trace_tries void _nc_trace_tries( TRIES *tree) { /* void */ } /* ./base/tries.c */ #undef _nc_expand_try char *_nc_expand_try( TRIES *tree, unsigned code, int *count, size_t len) { return(*(char **)0); } #undef _nc_remove_key int _nc_remove_key( TRIES **tree, unsigned code) { return(*(int *)0); } #undef _nc_remove_string int _nc_remove_string( TRIES **tree, const char *string) { return(*(int *)0); } /* ./tinfo/trim_sgr0.c */ #undef _nc_trim_sgr0 char *_nc_trim_sgr0( TERMTYPE *tp) { return(*(char **)0); } /* ./unctrl.c */ #undef unctrl_sp const char *unctrl_sp( SCREEN *sp, chtype ch) { return(*(const char **)0); } #undef unctrl const char *unctrl( chtype ch) { return(*(const char **)0); } /* ./trace/visbuf.c */ #undef _nc_visbuf2 const char *_nc_visbuf2( int bufnum, const char *buf) { return(*(const char **)0); } #undef _nc_visbuf const char *_nc_visbuf( const char *buf) { return(*(const char **)0); } #undef _nc_visbufn const char *_nc_visbufn( const char *buf, int len) { return(*(const char **)0); } #undef _nc_viswbuf2 const char *_nc_viswbuf2( int bufnum, const wchar_t *buf) { return(*(const char **)0); } #undef _nc_viswbuf const char *_nc_viswbuf( const wchar_t *buf) { return(*(const char **)0); } #undef _nc_viswbufn const char *_nc_viswbufn( const wchar_t *buf, int len) { return(*(const char **)0); } #undef _nc_viswibuf const char *_nc_viswibuf( const wint_t *buf) { return(*(const char **)0); } #undef _nc_viscbuf2 const char *_nc_viscbuf2( int bufnum, const cchar_t *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf const char *_nc_viscbuf( const cchar_t *buf, int len) { return(*(const char **)0); } /* ./tinfo/alloc_entry.c */ #undef _nc_init_entry void _nc_init_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_copy_entry ENTRY *_nc_copy_entry( ENTRY *oldp) { return(*(ENTRY **)0); } #undef _nc_save_str char *_nc_save_str( const char *const string) { return(*(char **)0); } #undef _nc_wrap_entry void _nc_wrap_entry( ENTRY *const ep, NCURSES_BOOL copy_strings) { /* void */ } #undef _nc_merge_entry void _nc_merge_entry( TERMTYPE *const to, TERMTYPE *const from) { /* void */ } /* ./tinfo/captoinfo.c */ #undef _nc_captoinfo char *_nc_captoinfo( const char *cap, const char *s, int const parameterized) { return(*(char **)0); } #undef _nc_infotocap char *_nc_infotocap( const char *cap, const char *str, int const parameterized) { return(*(char **)0); } /* ./tinfo/comp_expand.c */ #undef _nc_tic_expand char *_nc_tic_expand( const char *srcp, NCURSES_BOOL tic_format, int numbers) { return(*(char **)0); } /* ./tinfo/comp_parse.c */ #undef _nc_check_termtype2 void (*_nc_check_termtype2)( TERMTYPE *p1, NCURSES_BOOL p2); #undef _nc_check_termtype void (*_nc_check_termtype)( TERMTYPE *p1); #undef _nc_entry_match NCURSES_BOOL _nc_entry_match( char *n1, char *n2) { return(*(NCURSES_BOOL *)0); } #undef _nc_read_entry_source void _nc_read_entry_source( FILE *fp, char *buf, int literal, NCURSES_BOOL silent, NCURSES_BOOL (*hook)( ENTRY *p1)) { /* void */ } #undef _nc_resolve_uses2 int _nc_resolve_uses2( NCURSES_BOOL fullresolve, NCURSES_BOOL literal) { return(*(int *)0); } #undef _nc_resolve_uses int _nc_resolve_uses( NCURSES_BOOL fullresolve) { return(*(int *)0); } /* ./tinfo/comp_scan.c */ #undef _nc_syntax int _nc_syntax; #undef _nc_strict_bsd int _nc_strict_bsd; #undef _nc_curr_file_pos long _nc_curr_file_pos; #undef _nc_comment_start long _nc_comment_start; #undef _nc_comment_end long _nc_comment_end; #undef _nc_start_line long _nc_start_line; #undef _nc_curr_token struct token _nc_curr_token; #undef _nc_disable_period NCURSES_BOOL _nc_disable_period; #undef _nc_reset_input void _nc_reset_input( FILE *fp, char *buf) { /* void */ } #undef _nc_get_token int _nc_get_token( NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_trans_string int _nc_trans_string( char *ptr, char *last) { return(*(int *)0); } #undef _nc_push_token void _nc_push_token( int tokclass) { /* void */ } #undef _nc_panic_mode void _nc_panic_mode( char ch) { /* void */ } /* ./tinfo/parse_entry.c */ #undef _nc_parse_entry int _nc_parse_entry( struct entry *entryp, int literal, NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_capcmp int _nc_capcmp( const char *s, const char *t) { return(*(int *)0); } /* ./tinfo/write_entry.c */ #undef _nc_set_writedir void _nc_set_writedir( const char *dir) { /* void */ } #undef _nc_write_entry void _nc_write_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_tic_written int _nc_tic_written(void) { return(*(int *)0); } /* ./base/define_key.c */ #undef define_key_sp int define_key_sp( SCREEN *sp, const char *str, int keycode) { return(*(int *)0); } #undef define_key int define_key( const char *str, int keycode) { return(*(int *)0); } /* ./tinfo/hashed_db.c */ #undef _nc_hashed_db void _nc_hashed_db(void) { /* void */ } /* ./base/key_defined.c */ #undef key_defined_sp int key_defined_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef key_defined int key_defined( const char *str) { return(*(int *)0); } /* ./base/keybound.c */ #undef keybound_sp char *keybound_sp( SCREEN *sp, int code, int count) { return(*(char **)0); } #undef keybound char *keybound( int code, int count) { return(*(char **)0); } /* ./base/keyok.c */ #undef keyok_sp int keyok_sp( SCREEN *sp, int c, NCURSES_BOOL flag) { return(*(int *)0); } #undef keyok int keyok( int c, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/version.c */ #undef curses_version const char *curses_version(void) { return(*(const char **)0); } ncurses-6.0-20160213/ncurses/fifo_defs.h0000644000175100001440000000661512007243325016241 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2008,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* * Common macros for lib_getch.c, lib_ungetch.c * * $Id: fifo_defs.h,v 1.7 2012/08/04 15:59:17 tom Exp $ */ #ifndef FIFO_DEFS_H #define FIFO_DEFS_H 1 #define head sp->_fifohead #define tail sp->_fifotail /* peek points to next uninterpreted character */ #define peek sp->_fifopeek #define h_inc() { \ (head >= FIFO_SIZE-1) \ ? head = 0 \ : head++; \ if (head == tail) \ head = -1, tail = 0; \ } #define h_dec() { \ (head <= 0) \ ? head = FIFO_SIZE-1 \ : head--; \ if (head == tail) \ tail = -1; \ } #define t_inc() { \ (tail >= FIFO_SIZE-1) \ ? tail = 0 \ : tail++; \ if (tail == head) \ tail = -1; \ } #define t_dec() { \ (tail <= 0) \ ? tail = FIFO_SIZE-1 \ : tail--; \ if (head == tail) \ fifo_clear(sp); \ } #define p_inc() { \ (peek >= FIFO_SIZE-1) \ ? peek = 0 \ : peek++; \ } #define cooked_key_in_fifo() ((head >= 0) && (peek != head)) #define raw_key_in_fifo() ((head >= 0) && (peek != tail)) #undef HIDE_EINTR #endif /* FIFO_DEFS_H */ ncurses-6.0-20160213/ncurses/README.IZ0000644000175100001440000001202310422534201015326 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 2002,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README.IZ,v 1.2 2006/04/22 23:13:05 tom Exp $ --------------------------------------------------------------------- Here is the patch. I did no testing whatsoever with event watching requests present (I need some applications which exersize this before this, probably lynx ;-), but the code looks working "the normal way". I had no way to test that the poll() branch compiles/works... Here is the API: *) two new functions wgetch_events() wgetstrn_event() are introduced, which allow an event-watch specification given as the last argument; *) if the last argument is NULL, they behave as wgetch() and wgetstrn() (TESTED!); *) the event specification is a pointer to _nc_eventlist, which contains bookkeeping elements (count and the summary of results), and an array of pointers to _nc_event; *) each _nc_event is a typed union, with two types supported "as shipped": _NC_EVENT_TIMEOUT_MSEC, _NC_EVENT_FILE. For _NC_EVENT_FILE the fields are fd, flag, and the output field. *) The only supported flag "as shipped" is _NC_EVENT_FILE_READABLE. If the file was found readable, the return field is set to this, otherwise to 0; *) If these functions return KEY_EVENT, this means that the return fields in both the _nc_eventlist and _nc_event structures make sense. The field result_flags of _nc_eventlist may have a combination of bits _NC_EVENT_TIMEOUT_MSEC and _NC_EVENT_FILE_READABLE set; *) The timeout_msec field of _NC_EVENT_TIMEOUT_MSEC _nc_event's is updated on return, even if the return is not KEY_EVENT. However, the change in the value represents only the amount of time spent in waiting for events, not the amount of time spent bookkeeping; *) the return KEY_EVENT of wgetstrn_event() means that the output string includes the user input typed so far, but the user did not have a chance to press ENTER (or whatever). This call should be repeated (with "shifted" pointer to a buffer, of course) to complete the input; *) The presence of this extension can be checked via inspecting #ifdef NCURSES_EVENT_VERSION. This symbol is not defined on BeOS, since there is no support for this on BeOS. Known issues: calls interrupted by KEY_EVENT reset the ESCDELAY timer. This is not entirely new, since other synthetic events behave the same (see "if (ch >= KEY_MIN)" branch of kgetch()). However, KEY_EVENT may be generated in a continuous stream (say, when downloading a file), thus this may be more important than with other synthetic keys. An additional field in window structure which keeps timestamp of the first raw key in the queue may be needed to circumvent this. Another possible issue: KEY_EVENT has a preference over a user input, so a stream of KEY_EVENT's can make input hard. Maybe use result_flags as in input parameter too, which specifies whether the user input should have higher precedence? Also: I took an opportunity to document kgetch() better. Enjoy, Ilya ncurses-6.0-20160213/ncurses/build.priv.h0000644000175100001440000000733311721264536016402 0ustar tomusers/**************************************************************************** * Copyright (c) 2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2010 * ****************************************************************************/ /* * $Id: build.priv.h,v 1.9 2012/02/22 22:17:02 tom Exp $ * * build.priv.h * * This is a reduced version of curses.priv.h, for build-time utilties. * Because it has fewer dependencies, this simplifies cross-compiling. * */ #ifndef CURSES_PRIV_H #define CURSES_PRIV_H 1 #include #ifdef __cplusplus extern "C" { #endif #include #if USE_RCS_IDS #define MODULE_ID(id) static const char Ident[] = id; #else #define MODULE_ID(id) /*nothing*/ #endif #include #include #include #include #include #include #include /* we'll use -Ipath directive to get the right one! */ /* usually in */ #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #ifndef EXIT_FAILURE #define EXIT_FAILURE 1 #endif #define FreeAndNull(p) free(p); p = 0 #define UChar(c) ((unsigned char)(c)) #define SIZEOF(v) (sizeof(v) / sizeof(v[0])) #include #include /* declare these, to avoid needing term.h */ #if BROKEN_LINKER || USE_REENTRANT #define NCURSES_ARRAY(name) \ NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, name) NCURSES_ARRAY(boolnames); NCURSES_ARRAY(boolfnames); NCURSES_ARRAY(numnames); NCURSES_ARRAY(numfnames); NCURSES_ARRAY(strnames); NCURSES_ARRAY(strfnames); #endif #if NO_LEAKS NCURSES_EXPORT(void) _nc_names_leaks(void); #endif #ifdef __cplusplus } #endif #endif /* CURSES_PRIV_H */ ncurses-6.0-20160213/ncurses/llib-lticw0000644000175100001440000001247612563706743016152 0ustar tomusers/**************************************************************************** * Copyright (c) 2012,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2012-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tinfo/alloc_entry.c */ #include #undef _nc_init_entry void _nc_init_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_copy_entry ENTRY *_nc_copy_entry( ENTRY *oldp) { return(*(ENTRY **)0); } #undef _nc_save_str char *_nc_save_str( const char *const string) { return(*(char **)0); } #undef _nc_wrap_entry void _nc_wrap_entry( ENTRY *const ep, NCURSES_BOOL copy_strings) { /* void */ } #undef _nc_merge_entry void _nc_merge_entry( TERMTYPE *const to, TERMTYPE *const from) { /* void */ } /* ./tinfo/captoinfo.c */ #undef _nc_captoinfo char *_nc_captoinfo( const char *cap, const char *s, int const parameterized) { return(*(char **)0); } #undef _nc_infotocap char *_nc_infotocap( const char *cap, const char *str, int const parameterized) { return(*(char **)0); } /* ./tinfo/comp_expand.c */ #undef _nc_tic_expand char *_nc_tic_expand( const char *srcp, NCURSES_BOOL tic_format, int numbers) { return(*(char **)0); } /* ./tinfo/comp_parse.c */ #undef _nc_check_termtype2 void (*_nc_check_termtype2)( TERMTYPE *p1, NCURSES_BOOL p2); #undef _nc_check_termtype void (*_nc_check_termtype)( TERMTYPE *p1); #undef _nc_entry_match NCURSES_BOOL _nc_entry_match( char *n1, char *n2) { return(*(NCURSES_BOOL *)0); } #undef _nc_read_entry_source void _nc_read_entry_source( FILE *fp, char *buf, int literal, NCURSES_BOOL silent, NCURSES_BOOL (*hook)( ENTRY *p1)) { /* void */ } #undef _nc_resolve_uses2 int _nc_resolve_uses2( NCURSES_BOOL fullresolve, NCURSES_BOOL literal) { return(*(int *)0); } #undef _nc_resolve_uses int _nc_resolve_uses( NCURSES_BOOL fullresolve) { return(*(int *)0); } /* ./tinfo/comp_scan.c */ #undef _nc_syntax int _nc_syntax; #undef _nc_strict_bsd int _nc_strict_bsd; #undef _nc_curr_file_pos long _nc_curr_file_pos; #undef _nc_comment_start long _nc_comment_start; #undef _nc_comment_end long _nc_comment_end; #undef _nc_start_line long _nc_start_line; #undef _nc_curr_token struct token _nc_curr_token; #undef _nc_disable_period NCURSES_BOOL _nc_disable_period; #undef _nc_reset_input void _nc_reset_input( FILE *fp, char *buf) { /* void */ } #undef _nc_get_token int _nc_get_token( NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_trans_string int _nc_trans_string( char *ptr, char *last) { return(*(int *)0); } #undef _nc_push_token void _nc_push_token( int tokclass) { /* void */ } #undef _nc_panic_mode void _nc_panic_mode( char ch) { /* void */ } /* ./tinfo/parse_entry.c */ #undef _nc_parse_entry int _nc_parse_entry( struct entry *entryp, int literal, NCURSES_BOOL silent) { return(*(int *)0); } #undef _nc_capcmp int _nc_capcmp( const char *s, const char *t) { return(*(int *)0); } /* ./tinfo/write_entry.c */ #undef _nc_set_writedir void _nc_set_writedir( const char *dir) { /* void */ } #undef _nc_write_entry void _nc_write_entry( TERMTYPE *const tp) { /* void */ } #undef _nc_tic_written int _nc_tic_written(void) { return(*(int *)0); } ncurses-6.0-20160213/ncurses/llib-ltinfotw0000644000175100001440000007126312563707030016663 0ustar tomusers/**************************************************************************** * Copyright (c) 2012-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2012-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tinfo/access.c */ #include #undef _nc_rootname char *_nc_rootname( char *path) { return(*(char **)0); } #undef _nc_is_abs_path NCURSES_BOOL _nc_is_abs_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_pathlast unsigned _nc_pathlast( const char *path) { return(*(unsigned *)0); } #undef _nc_basename char *_nc_basename( char *path) { return(*(char **)0); } #undef _nc_access int _nc_access( const char *path, int mode) { return(*(int *)0); } #undef _nc_is_dir_path NCURSES_BOOL _nc_is_dir_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_is_file_path NCURSES_BOOL _nc_is_file_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_env_access int _nc_env_access(void) { return(*(int *)0); } /* ./tinfo/add_tries.c */ #undef _nc_add_to_try int _nc_add_to_try( TRIES **tree, const char *str, unsigned code) { return(*(int *)0); } /* ./tinfo/alloc_ttype.c */ #undef _nc_align_termtype void _nc_align_termtype( TERMTYPE *to, TERMTYPE *from) { /* void */ } #undef _nc_copy_termtype void _nc_copy_termtype( TERMTYPE *dst, const TERMTYPE *src) { /* void */ } /* ./codes.c */ #undef _nc_boolcodes const char *const *_nc_boolcodes(void) { return(*(const char **)0); } #undef _nc_numcodes const char *const *_nc_numcodes(void) { return(*(const char **)0); } #undef _nc_strcodes const char *const *_nc_strcodes(void) { return(*(const char **)0); } /* ./comp_captab.c */ #undef _nc_get_table const struct name_table_entry *_nc_get_table( NCURSES_BOOL termcap) { return(*(const struct name_table_entry **)0); } #undef _nc_get_hash_table const HashValue *_nc_get_hash_table( NCURSES_BOOL termcap) { return(*(const HashValue **)0); } #undef _nc_get_alias_table const struct alias *_nc_get_alias_table( NCURSES_BOOL termcap) { return(*(const struct alias **)0); } #undef _nc_get_hash_info const HashData *_nc_get_hash_info( NCURSES_BOOL termcap) { return(*(const HashData **)0); } /* ./tinfo/comp_error.c */ #undef _nc_suppress_warnings NCURSES_BOOL _nc_suppress_warnings; #undef _nc_curr_line int _nc_curr_line; #undef _nc_curr_col int _nc_curr_col; #undef _nc_get_source const char *_nc_get_source(void) { return(*(const char **)0); } #undef _nc_set_source void _nc_set_source( const char *const name) { /* void */ } #undef _nc_set_type void _nc_set_type( const char *const name) { /* void */ } #undef _nc_get_type void _nc_get_type( char *name) { /* void */ } #undef _nc_warning void _nc_warning( const char *const fmt, ...) { /* void */ } #undef _nc_err_abort void _nc_err_abort( const char *const fmt, ...) { /* void */ } #undef _nc_syserr_abort void _nc_syserr_abort( const char *const fmt, ...) { /* void */ } /* ./tinfo/comp_hash.c */ #undef _nc_find_entry struct name_table_entry const *_nc_find_entry( const char *string, const HashValue *hash_table) { return(*(struct name_table_entry const **)0); } #undef _nc_find_type_entry struct name_table_entry const *_nc_find_type_entry( const char *string, int type, NCURSES_BOOL termcap) { return(*(struct name_table_entry const **)0); } /* ./tinfo/db_iterator.c */ #undef _nc_tic_dir const char *_nc_tic_dir( const char *path) { return(*(const char **)0); } #undef _nc_keep_tic_dir void _nc_keep_tic_dir( const char *path) { /* void */ } #undef _nc_last_db void _nc_last_db(void) { /* void */ } #undef _nc_next_db const char *_nc_next_db( DBDIRS *state, int *offset) { return(*(const char **)0); } #undef _nc_first_db void _nc_first_db( DBDIRS *state, int *offset) { /* void */ } /* ./tinfo/doalloc.c */ #undef _nc_doalloc void *_nc_doalloc( void *oldp, size_t amount) { return(*(void **)0); } /* ./tinfo/entries.c */ #undef _nc_head ENTRY *_nc_head; #undef _nc_tail ENTRY *_nc_tail; #undef _nc_free_entry void _nc_free_entry( ENTRY *headp, TERMTYPE *tterm) { /* void */ } #undef _nc_free_entries void _nc_free_entries( ENTRY *headp) { /* void */ } #undef _nc_delink_entry ENTRY *_nc_delink_entry( ENTRY *headp, TERMTYPE *tterm) { return(*(ENTRY **)0); } #undef _nc_leaks_tinfo void _nc_leaks_tinfo(void) { /* void */ } /* ./fallback.c */ #undef _nc_fallback const TERMTYPE *_nc_fallback( const char *name) { return(*(const TERMTYPE **)0); } /* ./tinfo/free_ttype.c */ #undef _nc_free_termtype void _nc_free_termtype( TERMTYPE *ptr) { /* void */ } #undef _nc_user_definable NCURSES_BOOL _nc_user_definable; #undef use_extended_names int use_extended_names( NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/getenv_num.c */ #undef _nc_getenv_num int _nc_getenv_num( const char *name) { return(*(int *)0); } #undef _nc_setenv_num void _nc_setenv_num( const char *name, int value) { /* void */ } /* ./tinfo/home_terminfo.c */ #undef _nc_home_terminfo char *_nc_home_terminfo(void) { return(*(char **)0); } /* ./tinfo/init_keytry.c */ #undef _nc_init_keytry void _nc_init_keytry( SCREEN *sp) { /* void */ } /* ./tinfo/lib_acs.c */ #undef _nc_acs_map chtype *_nc_acs_map(void) { return(*(chtype **)0); } #undef _nc_init_acs_sp void _nc_init_acs_sp( SCREEN *sp) { /* void */ } #undef _nc_init_acs void _nc_init_acs(void) { /* void */ } /* ./tinfo/lib_baudrate.c */ struct speed { short s; int sp; }; #undef _nc_baudrate int _nc_baudrate( int OSpeed) { return(*(int *)0); } #undef _nc_ospeed int _nc_ospeed( int BaudRate) { return(*(int *)0); } #undef baudrate_sp int baudrate_sp( SCREEN *sp) { return(*(int *)0); } #undef baudrate int baudrate(void) { return(*(int *)0); } /* ./tinfo/lib_cur_term.c */ #undef _nc_get_cur_term_sp TERMINAL *_nc_get_cur_term_sp( SCREEN *sp) { return(*(TERMINAL **)0); } #undef _nc_get_cur_term TERMINAL *_nc_get_cur_term(void) { return(*(TERMINAL **)0); } #undef _nc_cur_term TERMINAL *_nc_cur_term(void) { return(*(TERMINAL **)0); } #undef set_curterm_sp TERMINAL *set_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(TERMINAL **)0); } #undef set_curterm TERMINAL *set_curterm( TERMINAL *termp) { return(*(TERMINAL **)0); } #undef del_curterm_sp int del_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(int *)0); } #undef del_curterm int del_curterm( TERMINAL *termp) { return(*(int *)0); } /* ./tinfo/lib_data.c */ #undef _nc_stdscr WINDOW *_nc_stdscr(void) { return(*(WINDOW **)0); } #undef _nc_curscr WINDOW *_nc_curscr(void) { return(*(WINDOW **)0); } #undef _nc_newscr WINDOW *_nc_newscr(void) { return(*(WINDOW **)0); } #undef _nc_screen_chain SCREEN *_nc_screen_chain; #undef SP SCREEN *SP; #undef _nc_globals NCURSES_GLOBALS _nc_globals; #undef _nc_prescreen NCURSES_PRESCREEN _nc_prescreen; #undef _nc_screen_of SCREEN *_nc_screen_of( WINDOW *win) { return(*(SCREEN **)0); } #undef _nc_init_pthreads void _nc_init_pthreads(void) { /* void */ } #undef _nc_mutex_init void _nc_mutex_init( pthread_mutex_t *obj) { /* void */ } #undef _nc_mutex_lock int _nc_mutex_lock( pthread_mutex_t *obj) { return(*(int *)0); } #undef _nc_mutex_trylock int _nc_mutex_trylock( pthread_mutex_t *obj) { return(*(int *)0); } #undef _nc_mutex_unlock int _nc_mutex_unlock( pthread_mutex_t *obj) { return(*(int *)0); } /* ./tinfo/lib_has_cap.c */ #undef has_ic_sp NCURSES_BOOL has_ic_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_ic NCURSES_BOOL has_ic(void) { return(*(NCURSES_BOOL *)0); } #undef has_il_sp NCURSES_BOOL has_il_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_il NCURSES_BOOL has_il(void) { return(*(NCURSES_BOOL *)0); } /* ./tinfo/lib_kernel.c */ #undef erasechar_sp char erasechar_sp( SCREEN *sp) { return(*(char *)0); } #undef erasechar char erasechar(void) { return(*(char *)0); } #undef killchar_sp char killchar_sp( SCREEN *sp) { return(*(char *)0); } #undef killchar char killchar(void) { return(*(char *)0); } #undef flushinp_sp int flushinp_sp( SCREEN *sp) { return(*(int *)0); } #undef flushinp int flushinp(void) { return(*(int *)0); } /* ./lib_keyname.c */ struct kn { short offset; int code; }; #undef keyname_sp const char *keyname_sp( SCREEN *sp, int c) { return(*(const char **)0); } #undef keyname const char *keyname( int c) { return(*(const char **)0); } /* ./tinfo/lib_longname.c */ #undef longname_sp char *longname_sp( SCREEN *sp) { return(*(char **)0); } #undef longname char *longname(void) { return(*(char **)0); } /* ./tinfo/lib_napms.c */ #undef napms_sp int napms_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef napms int napms( int ms) { return(*(int *)0); } /* ./tinfo/lib_options.c */ #undef idlok int idlok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef idcok void idcok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } #undef halfdelay_sp int halfdelay_sp( SCREEN *sp, int t) { return(*(int *)0); } #undef halfdelay int halfdelay( int t) { return(*(int *)0); } #undef nodelay int nodelay( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef notimeout int notimeout( WINDOW *win, NCURSES_BOOL f) { return(*(int *)0); } #undef wtimeout void wtimeout( WINDOW *win, int delay) { /* void */ } #undef keypad int keypad( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef meta int meta( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef curs_set_sp int curs_set_sp( SCREEN *sp, int vis) { return(*(int *)0); } #undef curs_set int curs_set( int vis) { return(*(int *)0); } #undef typeahead_sp int typeahead_sp( SCREEN *sp, int fd) { return(*(int *)0); } #undef typeahead int typeahead( int fd) { return(*(int *)0); } #undef has_key_sp int has_key_sp( SCREEN *sp, int keycode) { return(*(int *)0); } #undef has_key int has_key( int keycode) { return(*(int *)0); } #undef _nc_putp_flush_sp int _nc_putp_flush_sp( SCREEN *sp, const char *name, const char *value) { return(*(int *)0); } #undef _nc_keypad int _nc_keypad( SCREEN *sp, int flag) { return(*(int *)0); } /* ./tinfo/lib_raw.c */ #undef raw_sp int raw_sp( SCREEN *sp) { return(*(int *)0); } #undef raw int raw(void) { return(*(int *)0); } #undef cbreak_sp int cbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef cbreak int cbreak(void) { return(*(int *)0); } #undef qiflush_sp void qiflush_sp( SCREEN *sp) { /* void */ } #undef qiflush void qiflush(void) { /* void */ } #undef noraw_sp int noraw_sp( SCREEN *sp) { return(*(int *)0); } #undef noraw int noraw(void) { return(*(int *)0); } #undef nocbreak_sp int nocbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef nocbreak int nocbreak(void) { return(*(int *)0); } #undef noqiflush_sp void noqiflush_sp( SCREEN *sp) { /* void */ } #undef noqiflush void noqiflush(void) { /* void */ } #undef intrflush_sp int intrflush_sp( SCREEN *sp, WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef intrflush int intrflush( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/lib_setup.c */ #undef _nc_ttytype char *_nc_ttytype(void) { return(*(char **)0); } #undef _nc_ptr_Lines int *_nc_ptr_Lines( SCREEN *sp) { return(*(int **)0); } #undef _nc_LINES int _nc_LINES(void) { return(*(int *)0); } #undef _nc_ptr_Cols int *_nc_ptr_Cols( SCREEN *sp) { return(*(int **)0); } #undef _nc_COLS int _nc_COLS(void) { return(*(int *)0); } #undef _nc_ptr_Tabsize int *_nc_ptr_Tabsize( SCREEN *sp) { return(*(int **)0); } #undef _nc_TABSIZE int _nc_TABSIZE(void) { return(*(int *)0); } #undef set_tabsize_sp int set_tabsize_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_tabsize int set_tabsize( int value) { return(*(int *)0); } #undef _nc_handle_sigwinch int _nc_handle_sigwinch( SCREEN *sp) { return(*(int *)0); } #undef use_env_sp void use_env_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_tioctl_sp void use_tioctl_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_env void use_env( NCURSES_BOOL f) { /* void */ } #undef use_tioctl void use_tioctl( NCURSES_BOOL f) { /* void */ } #undef _nc_get_screensize void _nc_get_screensize( SCREEN *sp, int *linep, int *colp) { /* void */ } #undef _nc_update_screensize void _nc_update_screensize( SCREEN *sp) { /* void */ } #undef _nc_setup_tinfo int _nc_setup_tinfo( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } #undef _nc_tinfo_cmdch void _nc_tinfo_cmdch( TERMINAL *termp, int proto) { /* void */ } #undef _nc_get_locale char *_nc_get_locale(void) { return(*(char **)0); } #undef _nc_unicode_locale int _nc_unicode_locale(void) { return(*(int *)0); } #undef _nc_locale_breaks_acs int _nc_locale_breaks_acs( TERMINAL *termp) { return(*(int *)0); } #undef _nc_setupterm int _nc_setupterm( const char *tname, int Filedes, int *errret, int reuse) { return(*(int *)0); } #undef new_prescr SCREEN *new_prescr(void) { return(*(SCREEN **)0); } #undef setupterm int setupterm( const char *tname, int Filedes, int *errret) { return(*(int *)0); } /* ./tinfo/lib_termcap.c */ #undef UP char *UP; #undef BC char *BC; #undef tgetent_sp int tgetent_sp( SCREEN *sp, char *bufp, const char *name) { return(*(int *)0); } #undef tgetent int tgetent( char *bufp, const char *name) { return(*(int *)0); } #undef tgetflag_sp int tgetflag_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetflag int tgetflag( const char *id) { return(*(int *)0); } #undef tgetnum_sp int tgetnum_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetnum int tgetnum( const char *id) { return(*(int *)0); } #undef tgetstr_sp char *tgetstr_sp( SCREEN *sp, const char *id, char **area) { return(*(char **)0); } #undef tgetstr char *tgetstr( const char *id, char **area) { return(*(char **)0); } /* ./tinfo/lib_termname.c */ #undef termname_sp char *termname_sp( SCREEN *sp) { return(*(char **)0); } #undef termname char *termname(void) { return(*(char **)0); } /* ./tinfo/lib_tgoto.c */ #undef tgoto char *tgoto( const char *string, int x, int y) { return(*(char **)0); } /* ./tinfo/lib_ti.c */ #undef tigetflag_sp int tigetflag_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetflag int tigetflag( const char *str) { return(*(int *)0); } #undef tigetnum_sp int tigetnum_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetnum int tigetnum( const char *str) { return(*(int *)0); } #undef tigetstr_sp char *tigetstr_sp( SCREEN *sp, const char *str) { return(*(char **)0); } #undef tigetstr char *tigetstr( const char *str) { return(*(char **)0); } /* ./tinfo/lib_tparm.c */ #undef _nc_tparm_err int _nc_tparm_err; #undef _nc_tparm_analyze int _nc_tparm_analyze( const char *string, char *p_is_s[9], int *_nc_popcount) { return(*(int *)0); } #undef tparm char *tparm( const char *string, ...) { return(*(char **)0); } #undef tiparm char *tiparm( const char *string, ...) { return(*(char **)0); } /* ./tinfo/lib_tputs.c */ #undef PC char PC; #undef ospeed short ospeed; #undef _nc_nulls_sent int _nc_nulls_sent; #undef _nc_set_no_padding void _nc_set_no_padding( SCREEN *sp) { /* void */ } #undef delay_output_sp int delay_output_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef delay_output int delay_output( int ms) { return(*(int *)0); } #undef _nc_flush_sp void _nc_flush_sp( SCREEN *sp) { /* void */ } #undef _nc_flush void _nc_flush(void) { /* void */ } #undef _nc_outch_sp int _nc_outch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_outch int _nc_outch( int ch) { return(*(int *)0); } #undef _nc_putchar_sp int _nc_putchar_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_putchar int _nc_putchar( int ch) { return(*(int *)0); } #undef putp_sp int putp_sp( SCREEN *sp, const char *string) { return(*(int *)0); } #undef putp int putp( const char *string) { return(*(int *)0); } #undef _nc_putp_sp int _nc_putp_sp( SCREEN *sp, const char *name, const char *string) { return(*(int *)0); } #undef _nc_putp int _nc_putp( const char *name, const char *string) { return(*(int *)0); } #undef tputs_sp int tputs_sp( SCREEN *sp, const char *string, int affcnt, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef _nc_outc_wrapper int _nc_outc_wrapper( SCREEN *sp, int c) { return(*(int *)0); } #undef tputs int tputs( const char *string, int affcnt, int (*outc)( int p1)) { return(*(int *)0); } /* ./trace/lib_trace.c */ #undef _nc_tracing unsigned _nc_tracing; #undef _nc__nc_tputs_trace const char *_nc__nc_tputs_trace(void) { return(*(const char **)0); } #undef _nc__nc_outchars long _nc__nc_outchars(void) { return(*(long *)0); } #undef _nc_set_tputs_trace void _nc_set_tputs_trace( const char *s) { /* void */ } #undef _nc_count_outchars void _nc_count_outchars( long increment) { /* void */ } #undef trace void trace( const unsigned int tracelevel) { /* void */ } #undef _tracef void _tracef( const char *fmt, ...) { /* void */ } #undef _nc_retrace_bool NCURSES_BOOL _nc_retrace_bool( int code) { return(*(NCURSES_BOOL *)0); } #undef _nc_retrace_char char _nc_retrace_char( int code) { return(*(char *)0); } #undef _nc_retrace_int int _nc_retrace_int( int code) { return(*(int *)0); } #undef _nc_retrace_unsigned unsigned _nc_retrace_unsigned( unsigned code) { return(*(unsigned *)0); } #undef _nc_retrace_ptr char *_nc_retrace_ptr( char *code) { return(*(char **)0); } #undef _nc_retrace_cptr const char *_nc_retrace_cptr( const char *code) { return(*(const char **)0); } #undef _nc_retrace_cvoid_ptr const void *_nc_retrace_cvoid_ptr( const void *code) { return(*(const void **)0); } #undef _nc_retrace_void_ptr void *_nc_retrace_void_ptr( void *code) { return(*(void **)0); } #undef _nc_retrace_sp SCREEN *_nc_retrace_sp( SCREEN *code) { return(*(SCREEN **)0); } #undef _nc_retrace_win WINDOW *_nc_retrace_win( WINDOW *code) { return(*(WINDOW **)0); } #undef _nc_use_tracef int _nc_use_tracef( unsigned mask) { return(*(int *)0); } #undef _nc_locked_tracef void _nc_locked_tracef( const char *fmt, ...) { /* void */ } /* ./trace/lib_traceatr.c */ #undef _traceattr2 char *_traceattr2( int bufnum, chtype newmode) { return(*(char **)0); } #undef _traceattr char *_traceattr( attr_t newmode) { return(*(char **)0); } #undef _nc_retrace_int_attr_t int _nc_retrace_int_attr_t( attr_t code) { return(*(int *)0); } #undef _nc_retrace_attr_t attr_t _nc_retrace_attr_t( attr_t code) { return(*(attr_t *)0); } #undef _nc_altcharset_name const char *_nc_altcharset_name( attr_t attr, chtype ch) { return(*(const char **)0); } #undef _tracechtype2 char *_tracechtype2( int bufnum, chtype ch) { return(*(char **)0); } #undef _tracechtype char *_tracechtype( chtype ch) { return(*(char **)0); } #undef _nc_retrace_chtype chtype _nc_retrace_chtype( chtype code) { return(*(chtype *)0); } #undef _tracecchar_t2 char *_tracecchar_t2( int bufnum, const cchar_t *ch) { return(*(char **)0); } #undef _tracecchar_t char *_tracecchar_t( const cchar_t *ch) { return(*(char **)0); } /* ./trace/lib_tracebits.c */ #undef _nc_trace_ttymode char *_nc_trace_ttymode( struct termios *tty) { return(*(char **)0); } #undef _nc_tracebits char *_nc_tracebits(void) { return(*(char **)0); } /* ./trace/lib_tracechr.c */ #undef _nc_tracechar char *_nc_tracechar( SCREEN *sp, int ch) { return(*(char **)0); } #undef _tracechar char *_tracechar( int ch) { return(*(char **)0); } /* ./tinfo/lib_ttyflags.c */ #undef _nc_get_tty_mode_sp int _nc_get_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_get_tty_mode int _nc_get_tty_mode( struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode_sp int _nc_set_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode int _nc_set_tty_mode( struct termios *buf) { return(*(int *)0); } #undef def_shell_mode_sp int def_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_shell_mode int def_shell_mode(void) { return(*(int *)0); } #undef def_prog_mode_sp int def_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_prog_mode int def_prog_mode(void) { return(*(int *)0); } #undef reset_prog_mode_sp int reset_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_prog_mode int reset_prog_mode(void) { return(*(int *)0); } #undef reset_shell_mode_sp int reset_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_shell_mode int reset_shell_mode(void) { return(*(int *)0); } #undef savetty_sp int savetty_sp( SCREEN *sp) { return(*(int *)0); } #undef savetty int savetty(void) { return(*(int *)0); } #undef resetty_sp int resetty_sp( SCREEN *sp) { return(*(int *)0); } #undef resetty int resetty(void) { return(*(int *)0); } /* ./tty/lib_twait.c */ #undef _nc_timed_wait int _nc_timed_wait( SCREEN *sp, int mode, int milliseconds, int *timeleft) { return(*(int *)0); } /* ./tinfo/name_match.c */ #undef _nc_first_name char *_nc_first_name( const char *const sp) { return(*(char **)0); } #undef _nc_name_match int _nc_name_match( const char *const namelst, const char *const name, const char *const delim) { return(*(int *)0); } /* ./names.c */ #undef _nc_boolnames const char *const *_nc_boolnames(void) { return(*(const char **)0); } #undef _nc_boolfnames const char *const *_nc_boolfnames(void) { return(*(const char **)0); } #undef _nc_numnames const char *const *_nc_numnames(void) { return(*(const char **)0); } #undef _nc_numfnames const char *const *_nc_numfnames(void) { return(*(const char **)0); } #undef _nc_strnames const char *const *_nc_strnames(void) { return(*(const char **)0); } #undef _nc_strfnames const char *const *_nc_strfnames(void) { return(*(const char **)0); } /* ./tinfo/obsolete.c */ #undef _nc_set_buffer_sp void _nc_set_buffer_sp( SCREEN *sp, FILE *ofp, int buffered) { /* void */ } #undef _nc_set_buffer void _nc_set_buffer( FILE *ofp, int buffered) { /* void */ } /* ./tinfo/read_entry.c */ #undef _nc_init_termtype void _nc_init_termtype( TERMTYPE *const tp) { /* void */ } #undef _nc_read_termtype int _nc_read_termtype( TERMTYPE *ptr, char *buffer, int limit) { return(*(int *)0); } #undef _nc_read_file_entry int _nc_read_file_entry( const char *const filename, TERMTYPE *ptr) { return(*(int *)0); } #undef _nc_read_entry int _nc_read_entry( const char *const name, char *const filename, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/read_termcap.c */ #undef _nc_read_termcap void _nc_read_termcap(void) { /* void */ } /* ./tinfo/strings.c */ #undef _nc_str_init string_desc *_nc_str_init( string_desc *dst, char *src, size_t len) { return(*(string_desc **)0); } #undef _nc_str_null string_desc *_nc_str_null( string_desc *dst, size_t len) { return(*(string_desc **)0); } #undef _nc_str_copy string_desc *_nc_str_copy( string_desc *dst, string_desc *src) { return(*(string_desc **)0); } #undef _nc_safe_strcat NCURSES_BOOL _nc_safe_strcat( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_safe_strcpy NCURSES_BOOL _nc_safe_strcpy( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } /* ./trace/trace_buf.c */ #undef _nc_trace_buf char *_nc_trace_buf( int bufnum, size_t want) { return(*(char **)0); } #undef _nc_trace_bufcat char *_nc_trace_bufcat( int bufnum, const char *value) { return(*(char **)0); } /* ./trace/trace_tries.c */ #undef _nc_trace_tries void _nc_trace_tries( TRIES *tree) { /* void */ } /* ./base/tries.c */ #undef _nc_expand_try char *_nc_expand_try( TRIES *tree, unsigned code, int *count, size_t len) { return(*(char **)0); } #undef _nc_remove_key int _nc_remove_key( TRIES **tree, unsigned code) { return(*(int *)0); } #undef _nc_remove_string int _nc_remove_string( TRIES **tree, const char *string) { return(*(int *)0); } /* ./tinfo/trim_sgr0.c */ #undef _nc_trim_sgr0 char *_nc_trim_sgr0( TERMTYPE *tp) { return(*(char **)0); } /* ./unctrl.c */ #undef unctrl_sp const char *unctrl_sp( SCREEN *sp, chtype ch) { return(*(const char **)0); } #undef unctrl const char *unctrl( chtype ch) { return(*(const char **)0); } /* ./trace/visbuf.c */ #undef _nc_visbuf2 const char *_nc_visbuf2( int bufnum, const char *buf) { return(*(const char **)0); } #undef _nc_visbuf const char *_nc_visbuf( const char *buf) { return(*(const char **)0); } #undef _nc_visbufn const char *_nc_visbufn( const char *buf, int len) { return(*(const char **)0); } #undef _nc_viswbuf2 const char *_nc_viswbuf2( int bufnum, const wchar_t *buf) { return(*(const char **)0); } #undef _nc_viswbuf const char *_nc_viswbuf( const wchar_t *buf) { return(*(const char **)0); } #undef _nc_viswbufn const char *_nc_viswbufn( const wchar_t *buf, int len) { return(*(const char **)0); } #undef _nc_viswibuf const char *_nc_viswibuf( const wint_t *buf) { return(*(const char **)0); } #undef _nc_viscbuf2 const char *_nc_viscbuf2( int bufnum, const cchar_t *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf const char *_nc_viscbuf( const cchar_t *buf, int len) { return(*(const char **)0); } /* ./base/define_key.c */ #undef define_key_sp int define_key_sp( SCREEN *sp, const char *str, int keycode) { return(*(int *)0); } #undef define_key int define_key( const char *str, int keycode) { return(*(int *)0); } /* ./tinfo/hashed_db.c */ #undef _nc_hashed_db void _nc_hashed_db(void) { /* void */ } /* ./base/key_defined.c */ #undef key_defined_sp int key_defined_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef key_defined int key_defined( const char *str) { return(*(int *)0); } /* ./base/keybound.c */ #undef keybound_sp char *keybound_sp( SCREEN *sp, int code, int count) { return(*(char **)0); } #undef keybound char *keybound( int code, int count) { return(*(char **)0); } /* ./base/keyok.c */ #undef keyok_sp int keyok_sp( SCREEN *sp, int c, NCURSES_BOOL flag) { return(*(int *)0); } #undef keyok int keyok( int c, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/version.c */ #undef curses_version const char *curses_version(void) { return(*(const char **)0); } ncurses-6.0-20160213/ncurses/wcwidth.h0000644000175100001440000003327612166072671016003 0ustar tomusers/* * This is an implementation of wcwidth() and wcswidth() (defined in * IEEE Std 1002.1-2001) for Unicode. * * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html * * In fixed-width output devices, Latin characters all occupy a single * "cell" position of equal width, whereas ideographic CJK characters * occupy two such cells. Interoperability between terminal-line * applications and (teletype-style) character terminals using the * UTF-8 encoding requires agreement on which character should advance * the cursor by how many cell positions. No established formal * standards exist at present on which Unicode character shall occupy * how many cell positions on character terminals. These routines are * a first attempt of defining such behavior based on simple rules * applied to data provided by the Unicode Consortium. * * For some graphical characters, the Unicode standard explicitly * defines a character-cell width via the definition of the East Asian * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes. * In all these cases, there is no ambiguity about which width a * terminal shall use. For characters in the East Asian Ambiguous (A) * class, the width choice depends purely on a preference of backward * compatibility with either historic CJK or Western practice. * Choosing single-width for these characters is easy to justify as * the appropriate long-term solution, as the CJK practice of * displaying these characters as double-width comes from historic * implementation simplicity (8-bit encoded characters were displayed * single-width and 16-bit ones double-width, even for Greek, * Cyrillic, etc.) and not any typographic considerations. * * Much less clear is the choice of width for the Not East Asian * (Neutral) class. Existing practice does not dictate a width for any * of these characters. It would nevertheless make sense * typographically to allocate two character cells to characters such * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be * represented adequately with a single-width glyph. The following * routines at present merely assign a single-cell width to all * neutral characters, in the interest of simplicity. This is not * entirely satisfactory and should be reconsidered before * establishing a formal standard in this area. At the moment, the * decision which Not East Asian (Neutral) characters should be * represented by double-width glyphs cannot yet be answered by * applying a simple rule from the Unicode database content. Setting * up a proper standard for the behavior of UTF-8 character terminals * will require a careful analysis not only of each Unicode character, * but also of each presentation form, something the author of these * routines has avoided to do so far. * * http://www.unicode.org/unicode/reports/tr11/ * * Markus Kuhn -- 2007-05-26 (Unicode 5.0) * * Permission to use, copy, modify, and distribute this software * for any purpose and without fee is hereby granted. The author * disclaims all warranties with regard to this software. * * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c */ #include struct interval { int first; int last; }; /* auxiliary function for binary search in interval table */ static int bisearch(wchar_t ucs, const struct interval *table, int max) { int min = 0; int mid; if (ucs < table[0].first || ucs > table[max].last) return 0; while (max >= min) { mid = (min + max) / 2; if (ucs > table[mid].last) min = mid + 1; else if (ucs < table[mid].first) max = mid - 1; else return 1; } return 0; } /* The following two functions define the column width of an ISO 10646 * character as follows: * * - The null character (U+0000) has a column width of 0. * * - Other C0/C1 control characters and DEL will lead to a return * value of -1. * * - Non-spacing and enclosing combining characters (general * category code Mn or Me in the Unicode database) have a * column width of 0. * * - SOFT HYPHEN (U+00AD) has a column width of 1. * * - Other format characters (general category code Cf in the Unicode * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0. * * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) * have a column width of 0. * * - Spacing characters in the East Asian Wide (W) or East Asian * Full-width (F) category as defined in Unicode Technical * Report #11 have a column width of 2. * * - All remaining characters (including all printable * ISO 8859-1 and WGL4 characters, Unicode control characters, * etc.) have a column width of 1. * * This implementation assumes that wchar_t characters are encoded * in ISO 10646. */ int mk_wcwidth(wchar_t ucs) { /* sorted list of non-overlapping intervals of non-spacing characters */ /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ static const struct interval combining[] = { { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 }, { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 }, { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 }, { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } }; /* test for 8-bit control characters */ if (ucs == 0) return 0; if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) return -1; /* binary search in table of non-spacing characters */ if (bisearch(ucs, combining, sizeof(combining) / sizeof(struct interval) - 1)) return 0; /* if we arrive here, ucs is not a combining or C0/C1 control character */ return 1 + (ucs >= 0x1100 && (ucs <= 0x115f || /* Hangul Jamo init. consonants */ ucs == 0x2329 || ucs == 0x232a || (ucs >= 0x2e80 && ucs <= 0xa4cf && ucs != 0x303f) /* CJK ... Yi */ || (ucs >= 0xac00 && ucs <= 0xd7a3) /* Hangul Syllables */ || (ucs >= 0xf900 && ucs <= 0xfaff) /* CJK Compatibility Ideographs */ || (ucs >= 0xfe10 && ucs <= 0xfe19) /* Vertical forms */ || (ucs >= 0xfe30 && ucs <= 0xfe6f) /* CJK Compatibility Forms */ || (ucs >= 0xff00 && ucs <= 0xff60) /* Fullwidth Forms */ || (ucs >= 0xffe0 && ucs <= 0xffe6) #if !defined(SIZEOF_WCHAR_T) || (SIZEOF_WCHAR_T >= 4) || (ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd) #endif )); } int mk_wcswidth(const wchar_t *pwcs, size_t n) { int w, width = 0; for (;*pwcs && n-- > 0; pwcs++) if ((w = mk_wcwidth(*pwcs)) < 0) return -1; else width += w; return width; } /* * The following functions are the same as mk_wcwidth() and * mk_wcswidth(), except that spacing characters in the East Asian * Ambiguous (A) category as defined in Unicode Technical Report #11 * have a column width of 2. This variant might be useful for users of * CJK legacy encodings who want to migrate to UCS without changing * the traditional terminal character-width behaviour. It is not * otherwise recommended for general use. */ int mk_wcwidth_cjk(wchar_t ucs) { /* sorted list of non-overlapping intervals of East Asian Ambiguous * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */ static const struct interval ambiguous[] = { { 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 }, { 0x00AA, 0x00AA }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B4 }, { 0x00B6, 0x00BA }, { 0x00BC, 0x00BF }, { 0x00C6, 0x00C6 }, { 0x00D0, 0x00D0 }, { 0x00D7, 0x00D8 }, { 0x00DE, 0x00E1 }, { 0x00E6, 0x00E6 }, { 0x00E8, 0x00EA }, { 0x00EC, 0x00ED }, { 0x00F0, 0x00F0 }, { 0x00F2, 0x00F3 }, { 0x00F7, 0x00FA }, { 0x00FC, 0x00FC }, { 0x00FE, 0x00FE }, { 0x0101, 0x0101 }, { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x011B, 0x011B }, { 0x0126, 0x0127 }, { 0x012B, 0x012B }, { 0x0131, 0x0133 }, { 0x0138, 0x0138 }, { 0x013F, 0x0142 }, { 0x0144, 0x0144 }, { 0x0148, 0x014B }, { 0x014D, 0x014D }, { 0x0152, 0x0153 }, { 0x0166, 0x0167 }, { 0x016B, 0x016B }, { 0x01CE, 0x01CE }, { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, { 0x01DC, 0x01DC }, { 0x0251, 0x0251 }, { 0x0261, 0x0261 }, { 0x02C4, 0x02C4 }, { 0x02C7, 0x02C7 }, { 0x02C9, 0x02CB }, { 0x02CD, 0x02CD }, { 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB }, { 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03A9 }, { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 }, { 0x0401, 0x0401 }, { 0x0410, 0x044F }, { 0x0451, 0x0451 }, { 0x2010, 0x2010 }, { 0x2013, 0x2016 }, { 0x2018, 0x2019 }, { 0x201C, 0x201D }, { 0x2020, 0x2022 }, { 0x2024, 0x2027 }, { 0x2030, 0x2030 }, { 0x2032, 0x2033 }, { 0x2035, 0x2035 }, { 0x203B, 0x203B }, { 0x203E, 0x203E }, { 0x2074, 0x2074 }, { 0x207F, 0x207F }, { 0x2081, 0x2084 }, { 0x20AC, 0x20AC }, { 0x2103, 0x2103 }, { 0x2105, 0x2105 }, { 0x2109, 0x2109 }, { 0x2113, 0x2113 }, { 0x2116, 0x2116 }, { 0x2121, 0x2122 }, { 0x2126, 0x2126 }, { 0x212B, 0x212B }, { 0x2153, 0x2154 }, { 0x215B, 0x215E }, { 0x2160, 0x216B }, { 0x2170, 0x2179 }, { 0x2190, 0x2199 }, { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 }, { 0x21D4, 0x21D4 }, { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 }, { 0x2202, 0x2203 }, { 0x2207, 0x2208 }, { 0x220B, 0x220B }, { 0x220F, 0x220F }, { 0x2211, 0x2211 }, { 0x2215, 0x2215 }, { 0x221A, 0x221A }, { 0x221D, 0x2220 }, { 0x2223, 0x2223 }, { 0x2225, 0x2225 }, { 0x2227, 0x222C }, { 0x222E, 0x222E }, { 0x2234, 0x2237 }, { 0x223C, 0x223D }, { 0x2248, 0x2248 }, { 0x224C, 0x224C }, { 0x2252, 0x2252 }, { 0x2260, 0x2261 }, { 0x2264, 0x2267 }, { 0x226A, 0x226B }, { 0x226E, 0x226F }, { 0x2282, 0x2283 }, { 0x2286, 0x2287 }, { 0x2295, 0x2295 }, { 0x2299, 0x2299 }, { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF }, { 0x2312, 0x2312 }, { 0x2460, 0x24E9 }, { 0x24EB, 0x254B }, { 0x2550, 0x2573 }, { 0x2580, 0x258F }, { 0x2592, 0x2595 }, { 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 }, { 0x25B2, 0x25B3 }, { 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD }, { 0x25C0, 0x25C1 }, { 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB }, { 0x25CE, 0x25D1 }, { 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF }, { 0x2605, 0x2606 }, { 0x2609, 0x2609 }, { 0x260E, 0x260F }, { 0x2614, 0x2615 }, { 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 }, { 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 }, { 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F }, { 0x273D, 0x273D }, { 0x2776, 0x277F }, { 0xE000, 0xF8FF }, { 0xFFFD, 0xFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } }; /* binary search in table of non-spacing characters */ if (bisearch(ucs, ambiguous, sizeof(ambiguous) / sizeof(struct interval) - 1)) return 2; return mk_wcwidth(ucs); } int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n) { int w, width = 0; for (;*pwcs && n-- > 0; pwcs++) if ((w = mk_wcwidth_cjk(*pwcs)) < 0) return -1; else width += w; return width; } ncurses-6.0-20160213/ncurses/llib-ltinfo0000644000175100001440000006410112563706672016314 0ustar tomusers/**************************************************************************** * Copyright (c) 2012-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2012-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tinfo/access.c */ #include #undef _nc_rootname char *_nc_rootname( char *path) { return(*(char **)0); } #undef _nc_is_abs_path NCURSES_BOOL _nc_is_abs_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_pathlast unsigned _nc_pathlast( const char *path) { return(*(unsigned *)0); } #undef _nc_basename char *_nc_basename( char *path) { return(*(char **)0); } #undef _nc_access int _nc_access( const char *path, int mode) { return(*(int *)0); } #undef _nc_is_dir_path NCURSES_BOOL _nc_is_dir_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_is_file_path NCURSES_BOOL _nc_is_file_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_env_access int _nc_env_access(void) { return(*(int *)0); } /* ./tinfo/add_tries.c */ #undef _nc_add_to_try int _nc_add_to_try( TRIES **tree, const char *str, unsigned code) { return(*(int *)0); } /* ./tinfo/alloc_ttype.c */ #undef _nc_align_termtype void _nc_align_termtype( TERMTYPE *to, TERMTYPE *from) { /* void */ } #undef _nc_copy_termtype void _nc_copy_termtype( TERMTYPE *dst, const TERMTYPE *src) { /* void */ } /* ./codes.c */ #undef boolcodes const char *const boolcodes[] = {0}; #undef numcodes const char *const numcodes[] = {0}; #undef strcodes const char *const strcodes[] = {0}; /* ./comp_captab.c */ #undef _nc_get_table const struct name_table_entry *_nc_get_table( NCURSES_BOOL termcap) { return(*(const struct name_table_entry **)0); } #undef _nc_get_hash_table const HashValue *_nc_get_hash_table( NCURSES_BOOL termcap) { return(*(const HashValue **)0); } #undef _nc_get_alias_table const struct alias *_nc_get_alias_table( NCURSES_BOOL termcap) { return(*(const struct alias **)0); } #undef _nc_get_hash_info const HashData *_nc_get_hash_info( NCURSES_BOOL termcap) { return(*(const HashData **)0); } /* ./tinfo/comp_error.c */ #undef _nc_suppress_warnings NCURSES_BOOL _nc_suppress_warnings; #undef _nc_curr_line int _nc_curr_line; #undef _nc_curr_col int _nc_curr_col; #undef _nc_get_source const char *_nc_get_source(void) { return(*(const char **)0); } #undef _nc_set_source void _nc_set_source( const char *const name) { /* void */ } #undef _nc_set_type void _nc_set_type( const char *const name) { /* void */ } #undef _nc_get_type void _nc_get_type( char *name) { /* void */ } #undef _nc_warning void _nc_warning( const char *const fmt, ...) { /* void */ } #undef _nc_err_abort void _nc_err_abort( const char *const fmt, ...) { /* void */ } #undef _nc_syserr_abort void _nc_syserr_abort( const char *const fmt, ...) { /* void */ } /* ./tinfo/comp_hash.c */ #undef _nc_find_entry struct name_table_entry const *_nc_find_entry( const char *string, const HashValue *hash_table) { return(*(struct name_table_entry const **)0); } #undef _nc_find_type_entry struct name_table_entry const *_nc_find_type_entry( const char *string, int type, NCURSES_BOOL termcap) { return(*(struct name_table_entry const **)0); } /* ./tinfo/db_iterator.c */ #undef _nc_tic_dir const char *_nc_tic_dir( const char *path) { return(*(const char **)0); } #undef _nc_keep_tic_dir void _nc_keep_tic_dir( const char *path) { /* void */ } #undef _nc_last_db void _nc_last_db(void) { /* void */ } #undef _nc_next_db const char *_nc_next_db( DBDIRS *state, int *offset) { return(*(const char **)0); } #undef _nc_first_db void _nc_first_db( DBDIRS *state, int *offset) { /* void */ } /* ./tinfo/doalloc.c */ #undef _nc_doalloc void *_nc_doalloc( void *oldp, size_t amount) { return(*(void **)0); } /* ./tinfo/entries.c */ #undef _nc_head ENTRY *_nc_head; #undef _nc_tail ENTRY *_nc_tail; #undef _nc_free_entry void _nc_free_entry( ENTRY *headp, TERMTYPE *tterm) { /* void */ } #undef _nc_free_entries void _nc_free_entries( ENTRY *headp) { /* void */ } #undef _nc_delink_entry ENTRY *_nc_delink_entry( ENTRY *headp, TERMTYPE *tterm) { return(*(ENTRY **)0); } #undef _nc_leaks_tinfo void _nc_leaks_tinfo(void) { /* void */ } /* ./fallback.c */ #undef _nc_fallback const TERMTYPE *_nc_fallback( const char *name) { return(*(const TERMTYPE **)0); } /* ./tinfo/free_ttype.c */ #undef _nc_free_termtype void _nc_free_termtype( TERMTYPE *ptr) { /* void */ } #undef _nc_user_definable NCURSES_BOOL _nc_user_definable; #undef use_extended_names int use_extended_names( NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/getenv_num.c */ #undef _nc_getenv_num int _nc_getenv_num( const char *name) { return(*(int *)0); } #undef _nc_setenv_num void _nc_setenv_num( const char *name, int value) { /* void */ } /* ./tinfo/home_terminfo.c */ #undef _nc_home_terminfo char *_nc_home_terminfo(void) { return(*(char **)0); } /* ./tinfo/init_keytry.c */ #undef _nc_init_keytry void _nc_init_keytry( SCREEN *sp) { /* void */ } /* ./tinfo/lib_acs.c */ #undef acs_map chtype acs_map[128]; #undef _nc_init_acs_sp void _nc_init_acs_sp( SCREEN *sp) { /* void */ } #undef _nc_init_acs void _nc_init_acs(void) { /* void */ } /* ./tinfo/lib_baudrate.c */ struct speed { short s; int sp; }; #undef _nc_baudrate int _nc_baudrate( int OSpeed) { return(*(int *)0); } #undef _nc_ospeed int _nc_ospeed( int BaudRate) { return(*(int *)0); } #undef baudrate_sp int baudrate_sp( SCREEN *sp) { return(*(int *)0); } #undef baudrate int baudrate(void) { return(*(int *)0); } /* ./tinfo/lib_cur_term.c */ #undef cur_term TERMINAL *cur_term; #undef set_curterm_sp TERMINAL *set_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(TERMINAL **)0); } #undef set_curterm TERMINAL *set_curterm( TERMINAL *termp) { return(*(TERMINAL **)0); } #undef del_curterm_sp int del_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(int *)0); } #undef del_curterm int del_curterm( TERMINAL *termp) { return(*(int *)0); } /* ./tinfo/lib_data.c */ #undef stdscr WINDOW *stdscr; #undef curscr WINDOW *curscr; #undef newscr WINDOW *newscr; #undef _nc_screen_chain SCREEN *_nc_screen_chain; #undef SP SCREEN *SP; #undef _nc_globals NCURSES_GLOBALS _nc_globals; #undef _nc_prescreen NCURSES_PRESCREEN _nc_prescreen; #undef _nc_screen_of SCREEN *_nc_screen_of( WINDOW *win) { return(*(SCREEN **)0); } /* ./tinfo/lib_has_cap.c */ #undef has_ic_sp NCURSES_BOOL has_ic_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_ic NCURSES_BOOL has_ic(void) { return(*(NCURSES_BOOL *)0); } #undef has_il_sp NCURSES_BOOL has_il_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_il NCURSES_BOOL has_il(void) { return(*(NCURSES_BOOL *)0); } /* ./tinfo/lib_kernel.c */ #undef erasechar_sp char erasechar_sp( SCREEN *sp) { return(*(char *)0); } #undef erasechar char erasechar(void) { return(*(char *)0); } #undef killchar_sp char killchar_sp( SCREEN *sp) { return(*(char *)0); } #undef killchar char killchar(void) { return(*(char *)0); } #undef flushinp_sp int flushinp_sp( SCREEN *sp) { return(*(int *)0); } #undef flushinp int flushinp(void) { return(*(int *)0); } /* ./lib_keyname.c */ struct kn { short offset; int code; }; #undef keyname_sp const char *keyname_sp( SCREEN *sp, int c) { return(*(const char **)0); } #undef keyname const char *keyname( int c) { return(*(const char **)0); } /* ./tinfo/lib_longname.c */ #undef longname_sp char *longname_sp( SCREEN *sp) { return(*(char **)0); } #undef longname char *longname(void) { return(*(char **)0); } /* ./tinfo/lib_napms.c */ #undef napms_sp int napms_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef napms int napms( int ms) { return(*(int *)0); } /* ./tinfo/lib_options.c */ #undef idlok int idlok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef idcok void idcok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } #undef halfdelay_sp int halfdelay_sp( SCREEN *sp, int t) { return(*(int *)0); } #undef halfdelay int halfdelay( int t) { return(*(int *)0); } #undef nodelay int nodelay( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef notimeout int notimeout( WINDOW *win, NCURSES_BOOL f) { return(*(int *)0); } #undef wtimeout void wtimeout( WINDOW *win, int delay) { /* void */ } #undef keypad int keypad( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef meta int meta( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef curs_set_sp int curs_set_sp( SCREEN *sp, int vis) { return(*(int *)0); } #undef curs_set int curs_set( int vis) { return(*(int *)0); } #undef typeahead_sp int typeahead_sp( SCREEN *sp, int fd) { return(*(int *)0); } #undef typeahead int typeahead( int fd) { return(*(int *)0); } #undef has_key_sp int has_key_sp( SCREEN *sp, int keycode) { return(*(int *)0); } #undef has_key int has_key( int keycode) { return(*(int *)0); } #undef _nc_putp_flush_sp int _nc_putp_flush_sp( SCREEN *sp, const char *name, const char *value) { return(*(int *)0); } #undef _nc_keypad int _nc_keypad( SCREEN *sp, int flag) { return(*(int *)0); } /* ./tinfo/lib_raw.c */ #undef raw_sp int raw_sp( SCREEN *sp) { return(*(int *)0); } #undef raw int raw(void) { return(*(int *)0); } #undef cbreak_sp int cbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef cbreak int cbreak(void) { return(*(int *)0); } #undef qiflush_sp void qiflush_sp( SCREEN *sp) { /* void */ } #undef qiflush void qiflush(void) { /* void */ } #undef noraw_sp int noraw_sp( SCREEN *sp) { return(*(int *)0); } #undef noraw int noraw(void) { return(*(int *)0); } #undef nocbreak_sp int nocbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef nocbreak int nocbreak(void) { return(*(int *)0); } #undef noqiflush_sp void noqiflush_sp( SCREEN *sp) { /* void */ } #undef noqiflush void noqiflush(void) { /* void */ } #undef intrflush_sp int intrflush_sp( SCREEN *sp, WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef intrflush int intrflush( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/lib_setup.c */ #undef ttytype char ttytype[256]; #undef LINES int LINES; #undef COLS int COLS; #undef TABSIZE int TABSIZE; #undef set_tabsize_sp int set_tabsize_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_tabsize int set_tabsize( int value) { return(*(int *)0); } #undef _nc_handle_sigwinch int _nc_handle_sigwinch( SCREEN *sp) { return(*(int *)0); } #undef use_env_sp void use_env_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_tioctl_sp void use_tioctl_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_env void use_env( NCURSES_BOOL f) { /* void */ } #undef use_tioctl void use_tioctl( NCURSES_BOOL f) { /* void */ } #undef _nc_get_screensize void _nc_get_screensize( SCREEN *sp, int *linep, int *colp) { /* void */ } #undef _nc_update_screensize void _nc_update_screensize( SCREEN *sp) { /* void */ } #undef _nc_setup_tinfo int _nc_setup_tinfo( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } #undef _nc_tinfo_cmdch void _nc_tinfo_cmdch( TERMINAL *termp, int proto) { /* void */ } #undef _nc_get_locale char *_nc_get_locale(void) { return(*(char **)0); } #undef _nc_unicode_locale int _nc_unicode_locale(void) { return(*(int *)0); } #undef _nc_locale_breaks_acs int _nc_locale_breaks_acs( TERMINAL *termp) { return(*(int *)0); } #undef _nc_setupterm int _nc_setupterm( const char *tname, int Filedes, int *errret, int reuse) { return(*(int *)0); } #undef new_prescr SCREEN *new_prescr(void) { return(*(SCREEN **)0); } #undef setupterm int setupterm( const char *tname, int Filedes, int *errret) { return(*(int *)0); } /* ./tinfo/lib_termcap.c */ #undef UP char *UP; #undef BC char *BC; #undef tgetent_sp int tgetent_sp( SCREEN *sp, char *bufp, const char *name) { return(*(int *)0); } #undef tgetent int tgetent( char *bufp, const char *name) { return(*(int *)0); } #undef tgetflag_sp int tgetflag_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetflag int tgetflag( const char *id) { return(*(int *)0); } #undef tgetnum_sp int tgetnum_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetnum int tgetnum( const char *id) { return(*(int *)0); } #undef tgetstr_sp char *tgetstr_sp( SCREEN *sp, const char *id, char **area) { return(*(char **)0); } #undef tgetstr char *tgetstr( const char *id, char **area) { return(*(char **)0); } /* ./tinfo/lib_termname.c */ #undef termname_sp char *termname_sp( SCREEN *sp) { return(*(char **)0); } #undef termname char *termname(void) { return(*(char **)0); } /* ./tinfo/lib_tgoto.c */ #undef tgoto char *tgoto( const char *string, int x, int y) { return(*(char **)0); } /* ./tinfo/lib_ti.c */ #undef tigetflag_sp int tigetflag_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetflag int tigetflag( const char *str) { return(*(int *)0); } #undef tigetnum_sp int tigetnum_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetnum int tigetnum( const char *str) { return(*(int *)0); } #undef tigetstr_sp char *tigetstr_sp( SCREEN *sp, const char *str) { return(*(char **)0); } #undef tigetstr char *tigetstr( const char *str) { return(*(char **)0); } /* ./tinfo/lib_tparm.c */ #undef _nc_tparm_err int _nc_tparm_err; #undef _nc_tparm_analyze int _nc_tparm_analyze( const char *string, char *p_is_s[9], int *_nc_popcount) { return(*(int *)0); } #undef tparm char *tparm( const char *string, ...) { return(*(char **)0); } #undef tiparm char *tiparm( const char *string, ...) { return(*(char **)0); } /* ./tinfo/lib_tputs.c */ #undef PC char PC; #undef ospeed short ospeed; #undef _nc_nulls_sent int _nc_nulls_sent; #undef _nc_set_no_padding void _nc_set_no_padding( SCREEN *sp) { /* void */ } #undef delay_output_sp int delay_output_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef delay_output int delay_output( int ms) { return(*(int *)0); } #undef _nc_flush_sp void _nc_flush_sp( SCREEN *sp) { /* void */ } #undef _nc_flush void _nc_flush(void) { /* void */ } #undef _nc_outch_sp int _nc_outch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_outch int _nc_outch( int ch) { return(*(int *)0); } #undef _nc_putchar_sp int _nc_putchar_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_putchar int _nc_putchar( int ch) { return(*(int *)0); } #undef putp_sp int putp_sp( SCREEN *sp, const char *string) { return(*(int *)0); } #undef putp int putp( const char *string) { return(*(int *)0); } #undef _nc_putp_sp int _nc_putp_sp( SCREEN *sp, const char *name, const char *string) { return(*(int *)0); } #undef _nc_putp int _nc_putp( const char *name, const char *string) { return(*(int *)0); } #undef tputs_sp int tputs_sp( SCREEN *sp, const char *string, int affcnt, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef _nc_outc_wrapper int _nc_outc_wrapper( SCREEN *sp, int c) { return(*(int *)0); } #undef tputs int tputs( const char *string, int affcnt, int (*outc)( int p1)) { return(*(int *)0); } /* ./trace/lib_trace.c */ #undef _nc_tracing unsigned _nc_tracing; #undef _nc_tputs_trace const char *_nc_tputs_trace = {0}; #undef _nc_outchars long _nc_outchars; #undef trace void trace( const unsigned int tracelevel) { /* void */ } #undef _tracef void _tracef( const char *fmt, ...) { /* void */ } #undef _nc_retrace_bool NCURSES_BOOL _nc_retrace_bool( int code) { return(*(NCURSES_BOOL *)0); } #undef _nc_retrace_char char _nc_retrace_char( int code) { return(*(char *)0); } #undef _nc_retrace_int int _nc_retrace_int( int code) { return(*(int *)0); } #undef _nc_retrace_unsigned unsigned _nc_retrace_unsigned( unsigned code) { return(*(unsigned *)0); } #undef _nc_retrace_ptr char *_nc_retrace_ptr( char *code) { return(*(char **)0); } #undef _nc_retrace_cptr const char *_nc_retrace_cptr( const char *code) { return(*(const char **)0); } #undef _nc_retrace_cvoid_ptr const void *_nc_retrace_cvoid_ptr( const void *code) { return(*(const void **)0); } #undef _nc_retrace_void_ptr void *_nc_retrace_void_ptr( void *code) { return(*(void **)0); } #undef _nc_retrace_sp SCREEN *_nc_retrace_sp( SCREEN *code) { return(*(SCREEN **)0); } #undef _nc_retrace_win WINDOW *_nc_retrace_win( WINDOW *code) { return(*(WINDOW **)0); } /* ./trace/lib_traceatr.c */ #undef _traceattr2 char *_traceattr2( int bufnum, chtype newmode) { return(*(char **)0); } #undef _traceattr char *_traceattr( attr_t newmode) { return(*(char **)0); } #undef _nc_retrace_int_attr_t int _nc_retrace_int_attr_t( attr_t code) { return(*(int *)0); } #undef _nc_retrace_attr_t attr_t _nc_retrace_attr_t( attr_t code) { return(*(attr_t *)0); } #undef _nc_altcharset_name const char *_nc_altcharset_name( attr_t attr, chtype ch) { return(*(const char **)0); } #undef _tracechtype2 char *_tracechtype2( int bufnum, chtype ch) { return(*(char **)0); } #undef _tracechtype char *_tracechtype( chtype ch) { return(*(char **)0); } #undef _nc_retrace_chtype chtype _nc_retrace_chtype( chtype code) { return(*(chtype *)0); } /* ./trace/lib_tracebits.c */ #undef _nc_trace_ttymode char *_nc_trace_ttymode( struct termios *tty) { return(*(char **)0); } #undef _nc_tracebits char *_nc_tracebits(void) { return(*(char **)0); } /* ./trace/lib_tracechr.c */ #undef _nc_tracechar char *_nc_tracechar( SCREEN *sp, int ch) { return(*(char **)0); } #undef _tracechar char *_tracechar( int ch) { return(*(char **)0); } /* ./tinfo/lib_ttyflags.c */ #undef _nc_get_tty_mode_sp int _nc_get_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_get_tty_mode int _nc_get_tty_mode( struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode_sp int _nc_set_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode int _nc_set_tty_mode( struct termios *buf) { return(*(int *)0); } #undef def_shell_mode_sp int def_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_shell_mode int def_shell_mode(void) { return(*(int *)0); } #undef def_prog_mode_sp int def_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_prog_mode int def_prog_mode(void) { return(*(int *)0); } #undef reset_prog_mode_sp int reset_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_prog_mode int reset_prog_mode(void) { return(*(int *)0); } #undef reset_shell_mode_sp int reset_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_shell_mode int reset_shell_mode(void) { return(*(int *)0); } #undef savetty_sp int savetty_sp( SCREEN *sp) { return(*(int *)0); } #undef savetty int savetty(void) { return(*(int *)0); } #undef resetty_sp int resetty_sp( SCREEN *sp) { return(*(int *)0); } #undef resetty int resetty(void) { return(*(int *)0); } /* ./tty/lib_twait.c */ #undef _nc_timed_wait int _nc_timed_wait( SCREEN *sp, int mode, int milliseconds, int *timeleft) { return(*(int *)0); } /* ./tinfo/name_match.c */ #undef _nc_first_name char *_nc_first_name( const char *const sp) { return(*(char **)0); } #undef _nc_name_match int _nc_name_match( const char *const namelst, const char *const name, const char *const delim) { return(*(int *)0); } /* ./names.c */ #undef boolnames const char *const boolnames[] = {0}; #undef boolfnames const char *const boolfnames[] = {0}; #undef numnames const char *const numnames[] = {0}; #undef numfnames const char *const numfnames[] = {0}; #undef strnames const char *const strnames[] = {0}; #undef strfnames const char *const strfnames[] = {0}; /* ./tinfo/obsolete.c */ #undef _nc_set_buffer_sp void _nc_set_buffer_sp( SCREEN *sp, FILE *ofp, int buffered) { /* void */ } #undef _nc_set_buffer void _nc_set_buffer( FILE *ofp, int buffered) { /* void */ } /* ./tinfo/read_entry.c */ #undef _nc_init_termtype void _nc_init_termtype( TERMTYPE *const tp) { /* void */ } #undef _nc_read_termtype int _nc_read_termtype( TERMTYPE *ptr, char *buffer, int limit) { return(*(int *)0); } #undef _nc_read_file_entry int _nc_read_file_entry( const char *const filename, TERMTYPE *ptr) { return(*(int *)0); } #undef _nc_read_entry int _nc_read_entry( const char *const name, char *const filename, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/read_termcap.c */ #undef _nc_read_termcap void _nc_read_termcap(void) { /* void */ } /* ./tinfo/strings.c */ #undef _nc_str_init string_desc *_nc_str_init( string_desc *dst, char *src, size_t len) { return(*(string_desc **)0); } #undef _nc_str_null string_desc *_nc_str_null( string_desc *dst, size_t len) { return(*(string_desc **)0); } #undef _nc_str_copy string_desc *_nc_str_copy( string_desc *dst, string_desc *src) { return(*(string_desc **)0); } #undef _nc_safe_strcat NCURSES_BOOL _nc_safe_strcat( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_safe_strcpy NCURSES_BOOL _nc_safe_strcpy( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } /* ./trace/trace_buf.c */ #undef _nc_trace_buf char *_nc_trace_buf( int bufnum, size_t want) { return(*(char **)0); } #undef _nc_trace_bufcat char *_nc_trace_bufcat( int bufnum, const char *value) { return(*(char **)0); } /* ./trace/trace_tries.c */ #undef _nc_trace_tries void _nc_trace_tries( TRIES *tree) { /* void */ } /* ./base/tries.c */ #undef _nc_expand_try char *_nc_expand_try( TRIES *tree, unsigned code, int *count, size_t len) { return(*(char **)0); } #undef _nc_remove_key int _nc_remove_key( TRIES **tree, unsigned code) { return(*(int *)0); } #undef _nc_remove_string int _nc_remove_string( TRIES **tree, const char *string) { return(*(int *)0); } /* ./tinfo/trim_sgr0.c */ #undef _nc_trim_sgr0 char *_nc_trim_sgr0( TERMTYPE *tp) { return(*(char **)0); } /* ./unctrl.c */ #undef unctrl_sp const char *unctrl_sp( SCREEN *sp, chtype ch) { return(*(const char **)0); } #undef unctrl const char *unctrl( chtype ch) { return(*(const char **)0); } /* ./trace/visbuf.c */ #undef _nc_visbuf2 const char *_nc_visbuf2( int bufnum, const char *buf) { return(*(const char **)0); } #undef _nc_visbuf const char *_nc_visbuf( const char *buf) { return(*(const char **)0); } #undef _nc_visbufn const char *_nc_visbufn( const char *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf2 const char *_nc_viscbuf2( int bufnum, const chtype *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf const char *_nc_viscbuf( const chtype *buf, int len) { return(*(const char **)0); } /* ./base/define_key.c */ #undef define_key_sp int define_key_sp( SCREEN *sp, const char *str, int keycode) { return(*(int *)0); } #undef define_key int define_key( const char *str, int keycode) { return(*(int *)0); } /* ./tinfo/hashed_db.c */ #undef _nc_hashed_db void _nc_hashed_db(void) { /* void */ } /* ./base/key_defined.c */ #undef key_defined_sp int key_defined_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef key_defined int key_defined( const char *str) { return(*(int *)0); } /* ./base/keybound.c */ #undef keybound_sp char *keybound_sp( SCREEN *sp, int code, int count) { return(*(char **)0); } #undef keybound char *keybound( int code, int count) { return(*(char **)0); } /* ./base/keyok.c */ #undef keyok_sp int keyok_sp( SCREEN *sp, int c, NCURSES_BOOL flag) { return(*(int *)0); } #undef keyok int keyok( int c, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/version.c */ #undef curses_version const char *curses_version(void) { return(*(const char **)0); } ncurses-6.0-20160213/ncurses/llib-ltinfow0000644000175100001440000006527212563706750016512 0ustar tomusers/**************************************************************************** * Copyright (c) 2012-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2012-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./tinfo/access.c */ #include #undef _nc_rootname char *_nc_rootname( char *path) { return(*(char **)0); } #undef _nc_is_abs_path NCURSES_BOOL _nc_is_abs_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_pathlast unsigned _nc_pathlast( const char *path) { return(*(unsigned *)0); } #undef _nc_basename char *_nc_basename( char *path) { return(*(char **)0); } #undef _nc_access int _nc_access( const char *path, int mode) { return(*(int *)0); } #undef _nc_is_dir_path NCURSES_BOOL _nc_is_dir_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_is_file_path NCURSES_BOOL _nc_is_file_path( const char *path) { return(*(NCURSES_BOOL *)0); } #undef _nc_env_access int _nc_env_access(void) { return(*(int *)0); } /* ./tinfo/add_tries.c */ #undef _nc_add_to_try int _nc_add_to_try( TRIES **tree, const char *str, unsigned code) { return(*(int *)0); } /* ./tinfo/alloc_ttype.c */ #undef _nc_align_termtype void _nc_align_termtype( TERMTYPE *to, TERMTYPE *from) { /* void */ } #undef _nc_copy_termtype void _nc_copy_termtype( TERMTYPE *dst, const TERMTYPE *src) { /* void */ } /* ./codes.c */ #undef boolcodes const char *const boolcodes[] = {0}; #undef numcodes const char *const numcodes[] = {0}; #undef strcodes const char *const strcodes[] = {0}; /* ./comp_captab.c */ #undef _nc_get_table const struct name_table_entry *_nc_get_table( NCURSES_BOOL termcap) { return(*(const struct name_table_entry **)0); } #undef _nc_get_hash_table const HashValue *_nc_get_hash_table( NCURSES_BOOL termcap) { return(*(const HashValue **)0); } #undef _nc_get_alias_table const struct alias *_nc_get_alias_table( NCURSES_BOOL termcap) { return(*(const struct alias **)0); } #undef _nc_get_hash_info const HashData *_nc_get_hash_info( NCURSES_BOOL termcap) { return(*(const HashData **)0); } /* ./tinfo/comp_error.c */ #undef _nc_suppress_warnings NCURSES_BOOL _nc_suppress_warnings; #undef _nc_curr_line int _nc_curr_line; #undef _nc_curr_col int _nc_curr_col; #undef _nc_get_source const char *_nc_get_source(void) { return(*(const char **)0); } #undef _nc_set_source void _nc_set_source( const char *const name) { /* void */ } #undef _nc_set_type void _nc_set_type( const char *const name) { /* void */ } #undef _nc_get_type void _nc_get_type( char *name) { /* void */ } #undef _nc_warning void _nc_warning( const char *const fmt, ...) { /* void */ } #undef _nc_err_abort void _nc_err_abort( const char *const fmt, ...) { /* void */ } #undef _nc_syserr_abort void _nc_syserr_abort( const char *const fmt, ...) { /* void */ } /* ./tinfo/comp_hash.c */ #undef _nc_find_entry struct name_table_entry const *_nc_find_entry( const char *string, const HashValue *hash_table) { return(*(struct name_table_entry const **)0); } #undef _nc_find_type_entry struct name_table_entry const *_nc_find_type_entry( const char *string, int type, NCURSES_BOOL termcap) { return(*(struct name_table_entry const **)0); } /* ./tinfo/db_iterator.c */ #undef _nc_tic_dir const char *_nc_tic_dir( const char *path) { return(*(const char **)0); } #undef _nc_keep_tic_dir void _nc_keep_tic_dir( const char *path) { /* void */ } #undef _nc_last_db void _nc_last_db(void) { /* void */ } #undef _nc_next_db const char *_nc_next_db( DBDIRS *state, int *offset) { return(*(const char **)0); } #undef _nc_first_db void _nc_first_db( DBDIRS *state, int *offset) { /* void */ } /* ./tinfo/doalloc.c */ #undef _nc_doalloc void *_nc_doalloc( void *oldp, size_t amount) { return(*(void **)0); } /* ./tinfo/entries.c */ #undef _nc_head ENTRY *_nc_head; #undef _nc_tail ENTRY *_nc_tail; #undef _nc_free_entry void _nc_free_entry( ENTRY *headp, TERMTYPE *tterm) { /* void */ } #undef _nc_free_entries void _nc_free_entries( ENTRY *headp) { /* void */ } #undef _nc_delink_entry ENTRY *_nc_delink_entry( ENTRY *headp, TERMTYPE *tterm) { return(*(ENTRY **)0); } #undef _nc_leaks_tinfo void _nc_leaks_tinfo(void) { /* void */ } /* ./fallback.c */ #undef _nc_fallback const TERMTYPE *_nc_fallback( const char *name) { return(*(const TERMTYPE **)0); } /* ./tinfo/free_ttype.c */ #undef _nc_free_termtype void _nc_free_termtype( TERMTYPE *ptr) { /* void */ } #undef _nc_user_definable NCURSES_BOOL _nc_user_definable; #undef use_extended_names int use_extended_names( NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/getenv_num.c */ #undef _nc_getenv_num int _nc_getenv_num( const char *name) { return(*(int *)0); } #undef _nc_setenv_num void _nc_setenv_num( const char *name, int value) { /* void */ } /* ./tinfo/home_terminfo.c */ #undef _nc_home_terminfo char *_nc_home_terminfo(void) { return(*(char **)0); } /* ./tinfo/init_keytry.c */ #undef _nc_init_keytry void _nc_init_keytry( SCREEN *sp) { /* void */ } /* ./tinfo/lib_acs.c */ #undef acs_map chtype acs_map[128]; #undef _nc_init_acs_sp void _nc_init_acs_sp( SCREEN *sp) { /* void */ } #undef _nc_init_acs void _nc_init_acs(void) { /* void */ } /* ./tinfo/lib_baudrate.c */ struct speed { short s; int sp; }; #undef _nc_baudrate int _nc_baudrate( int OSpeed) { return(*(int *)0); } #undef _nc_ospeed int _nc_ospeed( int BaudRate) { return(*(int *)0); } #undef baudrate_sp int baudrate_sp( SCREEN *sp) { return(*(int *)0); } #undef baudrate int baudrate(void) { return(*(int *)0); } /* ./tinfo/lib_cur_term.c */ #undef cur_term TERMINAL *cur_term; #undef set_curterm_sp TERMINAL *set_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(TERMINAL **)0); } #undef set_curterm TERMINAL *set_curterm( TERMINAL *termp) { return(*(TERMINAL **)0); } #undef del_curterm_sp int del_curterm_sp( SCREEN *sp, TERMINAL *termp) { return(*(int *)0); } #undef del_curterm int del_curterm( TERMINAL *termp) { return(*(int *)0); } /* ./tinfo/lib_data.c */ #undef stdscr WINDOW *stdscr; #undef curscr WINDOW *curscr; #undef newscr WINDOW *newscr; #undef _nc_screen_chain SCREEN *_nc_screen_chain; #undef SP SCREEN *SP; #undef _nc_globals NCURSES_GLOBALS _nc_globals; #undef _nc_prescreen NCURSES_PRESCREEN _nc_prescreen; #undef _nc_screen_of SCREEN *_nc_screen_of( WINDOW *win) { return(*(SCREEN **)0); } /* ./tinfo/lib_has_cap.c */ #undef has_ic_sp NCURSES_BOOL has_ic_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_ic NCURSES_BOOL has_ic(void) { return(*(NCURSES_BOOL *)0); } #undef has_il_sp NCURSES_BOOL has_il_sp( SCREEN *sp) { return(*(NCURSES_BOOL *)0); } #undef has_il NCURSES_BOOL has_il(void) { return(*(NCURSES_BOOL *)0); } /* ./tinfo/lib_kernel.c */ #undef erasechar_sp char erasechar_sp( SCREEN *sp) { return(*(char *)0); } #undef erasechar char erasechar(void) { return(*(char *)0); } #undef killchar_sp char killchar_sp( SCREEN *sp) { return(*(char *)0); } #undef killchar char killchar(void) { return(*(char *)0); } #undef flushinp_sp int flushinp_sp( SCREEN *sp) { return(*(int *)0); } #undef flushinp int flushinp(void) { return(*(int *)0); } /* ./lib_keyname.c */ struct kn { short offset; int code; }; #undef keyname_sp const char *keyname_sp( SCREEN *sp, int c) { return(*(const char **)0); } #undef keyname const char *keyname( int c) { return(*(const char **)0); } /* ./tinfo/lib_longname.c */ #undef longname_sp char *longname_sp( SCREEN *sp) { return(*(char **)0); } #undef longname char *longname(void) { return(*(char **)0); } /* ./tinfo/lib_napms.c */ #undef napms_sp int napms_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef napms int napms( int ms) { return(*(int *)0); } /* ./tinfo/lib_options.c */ #undef idlok int idlok( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef idcok void idcok( WINDOW *win, NCURSES_BOOL flag) { /* void */ } #undef halfdelay_sp int halfdelay_sp( SCREEN *sp, int t) { return(*(int *)0); } #undef halfdelay int halfdelay( int t) { return(*(int *)0); } #undef nodelay int nodelay( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef notimeout int notimeout( WINDOW *win, NCURSES_BOOL f) { return(*(int *)0); } #undef wtimeout void wtimeout( WINDOW *win, int delay) { /* void */ } #undef keypad int keypad( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef meta int meta( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef curs_set_sp int curs_set_sp( SCREEN *sp, int vis) { return(*(int *)0); } #undef curs_set int curs_set( int vis) { return(*(int *)0); } #undef typeahead_sp int typeahead_sp( SCREEN *sp, int fd) { return(*(int *)0); } #undef typeahead int typeahead( int fd) { return(*(int *)0); } #undef has_key_sp int has_key_sp( SCREEN *sp, int keycode) { return(*(int *)0); } #undef has_key int has_key( int keycode) { return(*(int *)0); } #undef _nc_putp_flush_sp int _nc_putp_flush_sp( SCREEN *sp, const char *name, const char *value) { return(*(int *)0); } #undef _nc_keypad int _nc_keypad( SCREEN *sp, int flag) { return(*(int *)0); } /* ./tinfo/lib_raw.c */ #undef raw_sp int raw_sp( SCREEN *sp) { return(*(int *)0); } #undef raw int raw(void) { return(*(int *)0); } #undef cbreak_sp int cbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef cbreak int cbreak(void) { return(*(int *)0); } #undef qiflush_sp void qiflush_sp( SCREEN *sp) { /* void */ } #undef qiflush void qiflush(void) { /* void */ } #undef noraw_sp int noraw_sp( SCREEN *sp) { return(*(int *)0); } #undef noraw int noraw(void) { return(*(int *)0); } #undef nocbreak_sp int nocbreak_sp( SCREEN *sp) { return(*(int *)0); } #undef nocbreak int nocbreak(void) { return(*(int *)0); } #undef noqiflush_sp void noqiflush_sp( SCREEN *sp) { /* void */ } #undef noqiflush void noqiflush(void) { /* void */ } #undef intrflush_sp int intrflush_sp( SCREEN *sp, WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } #undef intrflush int intrflush( WINDOW *win, NCURSES_BOOL flag) { return(*(int *)0); } /* ./tinfo/lib_setup.c */ #undef ttytype char ttytype[256]; #undef LINES int LINES; #undef COLS int COLS; #undef TABSIZE int TABSIZE; #undef set_tabsize_sp int set_tabsize_sp( SCREEN *sp, int value) { return(*(int *)0); } #undef set_tabsize int set_tabsize( int value) { return(*(int *)0); } #undef _nc_handle_sigwinch int _nc_handle_sigwinch( SCREEN *sp) { return(*(int *)0); } #undef use_env_sp void use_env_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_tioctl_sp void use_tioctl_sp( SCREEN *sp, NCURSES_BOOL f) { /* void */ } #undef use_env void use_env( NCURSES_BOOL f) { /* void */ } #undef use_tioctl void use_tioctl( NCURSES_BOOL f) { /* void */ } #undef _nc_get_screensize void _nc_get_screensize( SCREEN *sp, int *linep, int *colp) { /* void */ } #undef _nc_update_screensize void _nc_update_screensize( SCREEN *sp) { /* void */ } #undef _nc_setup_tinfo int _nc_setup_tinfo( const char *const tn, TERMTYPE *const tp) { return(*(int *)0); } #undef _nc_tinfo_cmdch void _nc_tinfo_cmdch( TERMINAL *termp, int proto) { /* void */ } #undef _nc_get_locale char *_nc_get_locale(void) { return(*(char **)0); } #undef _nc_unicode_locale int _nc_unicode_locale(void) { return(*(int *)0); } #undef _nc_locale_breaks_acs int _nc_locale_breaks_acs( TERMINAL *termp) { return(*(int *)0); } #undef _nc_setupterm int _nc_setupterm( const char *tname, int Filedes, int *errret, int reuse) { return(*(int *)0); } #undef new_prescr SCREEN *new_prescr(void) { return(*(SCREEN **)0); } #undef setupterm int setupterm( const char *tname, int Filedes, int *errret) { return(*(int *)0); } /* ./tinfo/lib_termcap.c */ #undef UP char *UP; #undef BC char *BC; #undef tgetent_sp int tgetent_sp( SCREEN *sp, char *bufp, const char *name) { return(*(int *)0); } #undef tgetent int tgetent( char *bufp, const char *name) { return(*(int *)0); } #undef tgetflag_sp int tgetflag_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetflag int tgetflag( const char *id) { return(*(int *)0); } #undef tgetnum_sp int tgetnum_sp( SCREEN *sp, const char *id) { return(*(int *)0); } #undef tgetnum int tgetnum( const char *id) { return(*(int *)0); } #undef tgetstr_sp char *tgetstr_sp( SCREEN *sp, const char *id, char **area) { return(*(char **)0); } #undef tgetstr char *tgetstr( const char *id, char **area) { return(*(char **)0); } /* ./tinfo/lib_termname.c */ #undef termname_sp char *termname_sp( SCREEN *sp) { return(*(char **)0); } #undef termname char *termname(void) { return(*(char **)0); } /* ./tinfo/lib_tgoto.c */ #undef tgoto char *tgoto( const char *string, int x, int y) { return(*(char **)0); } /* ./tinfo/lib_ti.c */ #undef tigetflag_sp int tigetflag_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetflag int tigetflag( const char *str) { return(*(int *)0); } #undef tigetnum_sp int tigetnum_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef tigetnum int tigetnum( const char *str) { return(*(int *)0); } #undef tigetstr_sp char *tigetstr_sp( SCREEN *sp, const char *str) { return(*(char **)0); } #undef tigetstr char *tigetstr( const char *str) { return(*(char **)0); } /* ./tinfo/lib_tparm.c */ #undef _nc_tparm_err int _nc_tparm_err; #undef _nc_tparm_analyze int _nc_tparm_analyze( const char *string, char *p_is_s[9], int *_nc_popcount) { return(*(int *)0); } #undef tparm char *tparm( const char *string, ...) { return(*(char **)0); } #undef tiparm char *tiparm( const char *string, ...) { return(*(char **)0); } /* ./tinfo/lib_tputs.c */ #undef PC char PC; #undef ospeed short ospeed; #undef _nc_nulls_sent int _nc_nulls_sent; #undef _nc_set_no_padding void _nc_set_no_padding( SCREEN *sp) { /* void */ } #undef delay_output_sp int delay_output_sp( SCREEN *sp, int ms) { return(*(int *)0); } #undef delay_output int delay_output( int ms) { return(*(int *)0); } #undef _nc_flush_sp void _nc_flush_sp( SCREEN *sp) { /* void */ } #undef _nc_flush void _nc_flush(void) { /* void */ } #undef _nc_outch_sp int _nc_outch_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_outch int _nc_outch( int ch) { return(*(int *)0); } #undef _nc_putchar_sp int _nc_putchar_sp( SCREEN *sp, int ch) { return(*(int *)0); } #undef _nc_putchar int _nc_putchar( int ch) { return(*(int *)0); } #undef putp_sp int putp_sp( SCREEN *sp, const char *string) { return(*(int *)0); } #undef putp int putp( const char *string) { return(*(int *)0); } #undef _nc_putp_sp int _nc_putp_sp( SCREEN *sp, const char *name, const char *string) { return(*(int *)0); } #undef _nc_putp int _nc_putp( const char *name, const char *string) { return(*(int *)0); } #undef tputs_sp int tputs_sp( SCREEN *sp, const char *string, int affcnt, NCURSES_OUTC_sp outc) { return(*(int *)0); } #undef _nc_outc_wrapper int _nc_outc_wrapper( SCREEN *sp, int c) { return(*(int *)0); } #undef tputs int tputs( const char *string, int affcnt, int (*outc)( int p1)) { return(*(int *)0); } /* ./trace/lib_trace.c */ #undef _nc_tracing unsigned _nc_tracing; #undef _nc_tputs_trace const char *_nc_tputs_trace = {0}; #undef _nc_outchars long _nc_outchars; #undef trace void trace( const unsigned int tracelevel) { /* void */ } #undef _tracef void _tracef( const char *fmt, ...) { /* void */ } #undef _nc_retrace_bool NCURSES_BOOL _nc_retrace_bool( int code) { return(*(NCURSES_BOOL *)0); } #undef _nc_retrace_char char _nc_retrace_char( int code) { return(*(char *)0); } #undef _nc_retrace_int int _nc_retrace_int( int code) { return(*(int *)0); } #undef _nc_retrace_unsigned unsigned _nc_retrace_unsigned( unsigned code) { return(*(unsigned *)0); } #undef _nc_retrace_ptr char *_nc_retrace_ptr( char *code) { return(*(char **)0); } #undef _nc_retrace_cptr const char *_nc_retrace_cptr( const char *code) { return(*(const char **)0); } #undef _nc_retrace_cvoid_ptr const void *_nc_retrace_cvoid_ptr( const void *code) { return(*(const void **)0); } #undef _nc_retrace_void_ptr void *_nc_retrace_void_ptr( void *code) { return(*(void **)0); } #undef _nc_retrace_sp SCREEN *_nc_retrace_sp( SCREEN *code) { return(*(SCREEN **)0); } #undef _nc_retrace_win WINDOW *_nc_retrace_win( WINDOW *code) { return(*(WINDOW **)0); } /* ./trace/lib_traceatr.c */ #undef _traceattr2 char *_traceattr2( int bufnum, chtype newmode) { return(*(char **)0); } #undef _traceattr char *_traceattr( attr_t newmode) { return(*(char **)0); } #undef _nc_retrace_int_attr_t int _nc_retrace_int_attr_t( attr_t code) { return(*(int *)0); } #undef _nc_retrace_attr_t attr_t _nc_retrace_attr_t( attr_t code) { return(*(attr_t *)0); } #undef _nc_altcharset_name const char *_nc_altcharset_name( attr_t attr, chtype ch) { return(*(const char **)0); } #undef _tracechtype2 char *_tracechtype2( int bufnum, chtype ch) { return(*(char **)0); } #undef _tracechtype char *_tracechtype( chtype ch) { return(*(char **)0); } #undef _nc_retrace_chtype chtype _nc_retrace_chtype( chtype code) { return(*(chtype *)0); } #undef _tracecchar_t2 char *_tracecchar_t2( int bufnum, const cchar_t *ch) { return(*(char **)0); } #undef _tracecchar_t char *_tracecchar_t( const cchar_t *ch) { return(*(char **)0); } /* ./trace/lib_tracebits.c */ #undef _nc_trace_ttymode char *_nc_trace_ttymode( struct termios *tty) { return(*(char **)0); } #undef _nc_tracebits char *_nc_tracebits(void) { return(*(char **)0); } /* ./trace/lib_tracechr.c */ #undef _nc_tracechar char *_nc_tracechar( SCREEN *sp, int ch) { return(*(char **)0); } #undef _tracechar char *_tracechar( int ch) { return(*(char **)0); } /* ./tinfo/lib_ttyflags.c */ #undef _nc_get_tty_mode_sp int _nc_get_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_get_tty_mode int _nc_get_tty_mode( struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode_sp int _nc_set_tty_mode_sp( SCREEN *sp, struct termios *buf) { return(*(int *)0); } #undef _nc_set_tty_mode int _nc_set_tty_mode( struct termios *buf) { return(*(int *)0); } #undef def_shell_mode_sp int def_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_shell_mode int def_shell_mode(void) { return(*(int *)0); } #undef def_prog_mode_sp int def_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef def_prog_mode int def_prog_mode(void) { return(*(int *)0); } #undef reset_prog_mode_sp int reset_prog_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_prog_mode int reset_prog_mode(void) { return(*(int *)0); } #undef reset_shell_mode_sp int reset_shell_mode_sp( SCREEN *sp) { return(*(int *)0); } #undef reset_shell_mode int reset_shell_mode(void) { return(*(int *)0); } #undef savetty_sp int savetty_sp( SCREEN *sp) { return(*(int *)0); } #undef savetty int savetty(void) { return(*(int *)0); } #undef resetty_sp int resetty_sp( SCREEN *sp) { return(*(int *)0); } #undef resetty int resetty(void) { return(*(int *)0); } /* ./tty/lib_twait.c */ #undef _nc_timed_wait int _nc_timed_wait( SCREEN *sp, int mode, int milliseconds, int *timeleft) { return(*(int *)0); } /* ./tinfo/name_match.c */ #undef _nc_first_name char *_nc_first_name( const char *const sp) { return(*(char **)0); } #undef _nc_name_match int _nc_name_match( const char *const namelst, const char *const name, const char *const delim) { return(*(int *)0); } /* ./names.c */ #undef boolnames const char *const boolnames[] = {0}; #undef boolfnames const char *const boolfnames[] = {0}; #undef numnames const char *const numnames[] = {0}; #undef numfnames const char *const numfnames[] = {0}; #undef strnames const char *const strnames[] = {0}; #undef strfnames const char *const strfnames[] = {0}; /* ./tinfo/obsolete.c */ #undef _nc_set_buffer_sp void _nc_set_buffer_sp( SCREEN *sp, FILE *ofp, int buffered) { /* void */ } #undef _nc_set_buffer void _nc_set_buffer( FILE *ofp, int buffered) { /* void */ } /* ./tinfo/read_entry.c */ #undef _nc_init_termtype void _nc_init_termtype( TERMTYPE *const tp) { /* void */ } #undef _nc_read_termtype int _nc_read_termtype( TERMTYPE *ptr, char *buffer, int limit) { return(*(int *)0); } #undef _nc_read_file_entry int _nc_read_file_entry( const char *const filename, TERMTYPE *ptr) { return(*(int *)0); } #undef _nc_read_entry int _nc_read_entry( const char *const name, char *const filename, TERMTYPE *const tp) { return(*(int *)0); } /* ./tinfo/read_termcap.c */ #undef _nc_read_termcap void _nc_read_termcap(void) { /* void */ } /* ./tinfo/strings.c */ #undef _nc_str_init string_desc *_nc_str_init( string_desc *dst, char *src, size_t len) { return(*(string_desc **)0); } #undef _nc_str_null string_desc *_nc_str_null( string_desc *dst, size_t len) { return(*(string_desc **)0); } #undef _nc_str_copy string_desc *_nc_str_copy( string_desc *dst, string_desc *src) { return(*(string_desc **)0); } #undef _nc_safe_strcat NCURSES_BOOL _nc_safe_strcat( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } #undef _nc_safe_strcpy NCURSES_BOOL _nc_safe_strcpy( string_desc *dst, const char *src) { return(*(NCURSES_BOOL *)0); } /* ./trace/trace_buf.c */ #undef _nc_trace_buf char *_nc_trace_buf( int bufnum, size_t want) { return(*(char **)0); } #undef _nc_trace_bufcat char *_nc_trace_bufcat( int bufnum, const char *value) { return(*(char **)0); } /* ./trace/trace_tries.c */ #undef _nc_trace_tries void _nc_trace_tries( TRIES *tree) { /* void */ } /* ./base/tries.c */ #undef _nc_expand_try char *_nc_expand_try( TRIES *tree, unsigned code, int *count, size_t len) { return(*(char **)0); } #undef _nc_remove_key int _nc_remove_key( TRIES **tree, unsigned code) { return(*(int *)0); } #undef _nc_remove_string int _nc_remove_string( TRIES **tree, const char *string) { return(*(int *)0); } /* ./tinfo/trim_sgr0.c */ #undef _nc_trim_sgr0 char *_nc_trim_sgr0( TERMTYPE *tp) { return(*(char **)0); } /* ./unctrl.c */ #undef unctrl_sp const char *unctrl_sp( SCREEN *sp, chtype ch) { return(*(const char **)0); } #undef unctrl const char *unctrl( chtype ch) { return(*(const char **)0); } /* ./trace/visbuf.c */ #undef _nc_visbuf2 const char *_nc_visbuf2( int bufnum, const char *buf) { return(*(const char **)0); } #undef _nc_visbuf const char *_nc_visbuf( const char *buf) { return(*(const char **)0); } #undef _nc_visbufn const char *_nc_visbufn( const char *buf, int len) { return(*(const char **)0); } #undef _nc_viswbuf2 const char *_nc_viswbuf2( int bufnum, const wchar_t *buf) { return(*(const char **)0); } #undef _nc_viswbuf const char *_nc_viswbuf( const wchar_t *buf) { return(*(const char **)0); } #undef _nc_viswbufn const char *_nc_viswbufn( const wchar_t *buf, int len) { return(*(const char **)0); } #undef _nc_viswibuf const char *_nc_viswibuf( const wint_t *buf) { return(*(const char **)0); } #undef _nc_viscbuf2 const char *_nc_viscbuf2( int bufnum, const cchar_t *buf, int len) { return(*(const char **)0); } #undef _nc_viscbuf const char *_nc_viscbuf( const cchar_t *buf, int len) { return(*(const char **)0); } /* ./base/define_key.c */ #undef define_key_sp int define_key_sp( SCREEN *sp, const char *str, int keycode) { return(*(int *)0); } #undef define_key int define_key( const char *str, int keycode) { return(*(int *)0); } /* ./tinfo/hashed_db.c */ #undef _nc_hashed_db void _nc_hashed_db(void) { /* void */ } /* ./base/key_defined.c */ #undef key_defined_sp int key_defined_sp( SCREEN *sp, const char *str) { return(*(int *)0); } #undef key_defined int key_defined( const char *str) { return(*(int *)0); } /* ./base/keybound.c */ #undef keybound_sp char *keybound_sp( SCREEN *sp, int code, int count) { return(*(char **)0); } #undef keybound char *keybound( int code, int count) { return(*(char **)0); } /* ./base/keyok.c */ #undef keyok_sp int keyok_sp( SCREEN *sp, int c, NCURSES_BOOL flag) { return(*(int *)0); } #undef keyok int keyok( int c, NCURSES_BOOL flag) { return(*(int *)0); } /* ./base/version.c */ #undef curses_version const char *curses_version(void) { return(*(const char **)0); } ncurses-6.0-20160213/ncurses/base/0000755000175100001440000000000012650770520015054 5ustar tomusersncurses-6.0-20160213/ncurses/base/lib_slkcolor.c0000644000175100001440000000642012273270342017676 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1998,2009 * * and: Thomas E. Dickey 2005-on * ****************************************************************************/ /* * lib_slkcolor.c * Soft key routines. * Set the label's color */ #include MODULE_ID("$Id: lib_slkcolor.c,v 1.17 2014/02/01 22:10:42 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_color) (NCURSES_SP_DCLx NCURSES_PAIRS_T color_pair_number) { int code = ERR; T((T_CALLED("slk_color(%p,%d)"), (void *) SP_PARM, (int) color_pair_number)); if (SP_PARM != 0 && SP_PARM->_slk != 0 && color_pair_number >= 0 && color_pair_number < SP_PARM->_pair_limit) { TR(TRACE_ATTRS, ("... current is %s", _tracech_t(CHREF(SP_PARM->_slk->attr)))); SetPair(SP_PARM->_slk->attr, color_pair_number); TR(TRACE_ATTRS, ("new attribute is %s", _tracech_t(CHREF(SP_PARM->_slk->attr)))); code = OK; } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_color(NCURSES_PAIRS_T color_pair_number) { return NCURSES_SP_NAME(slk_color) (CURRENT_SCREEN, color_pair_number); } #endif ncurses-6.0-20160213/ncurses/base/lib_insch.c0000644000175100001440000001216512145774640017165 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Sven Verdoolaege * * and: Thomas E. Dickey * ****************************************************************************/ /* ** lib_insch.c ** ** The routine winsch(). ** */ #include #include MODULE_ID("$Id: lib_insch.c,v 1.35 2013/05/18 21:58:56 tom Exp $") /* * Insert the given character, updating the current location to simplify * inserting a string. */ NCURSES_EXPORT(int) _nc_insert_ch(SCREEN *sp, WINDOW *win, chtype ch) { int code = OK; int ch8 = (int) ChCharOf(ch); NCURSES_CH_T wch; int count; NCURSES_CONST char *s; int tabsize = ( #if USE_REENTRANT sp->_TABSIZE #else TABSIZE #endif ); switch (ch) { case '\t': for (count = (tabsize - (win->_curx % tabsize)); count > 0; count--) { if ((code = _nc_insert_ch(sp, win, ' ')) != OK) break; } break; case '\n': case '\r': case '\b': SetChar2(wch, ch); _nc_waddch_nosync(win, wch); break; default: if ( #if USE_WIDEC_SUPPORT WINDOW_EXT(win, addch_used) == 0 && #endif (isprint(ch8) || (ChAttrOf(ch) & A_ALTCHARSET) || (sp != 0 && sp->_legacy_coding && !iscntrl(ch8)))) { if (win->_curx <= win->_maxx) { struct ldat *line = &(win->_line[win->_cury]); NCURSES_CH_T *end = &(line->text[win->_curx]); NCURSES_CH_T *temp1 = &(line->text[win->_maxx]); NCURSES_CH_T *temp2 = temp1 - 1; SetChar2(wch, ch); CHANGED_TO_EOL(line, win->_curx, win->_maxx); while (temp1 > end) *temp1-- = *temp2--; *temp1 = _nc_render(win, wch); win->_curx++; } } else if (iscntrl(ch8)) { s = NCURSES_SP_NAME(unctrl) (NCURSES_SP_ARGx (chtype) ch8); while (*s != '\0') { code = _nc_insert_ch(sp, win, ChAttrOf(ch) | UChar(*s)); if (code != OK) break; ++s; } } #if USE_WIDEC_SUPPORT else { /* * Handle multibyte characters here */ SetChar2(wch, ch); wch = _nc_render(win, wch); count = _nc_build_wch(win, &wch); if (count > 0) { code = _nc_insert_wch(win, &wch); } else if (count == -1) { /* handle EILSEQ */ s = NCURSES_SP_NAME(unctrl) (NCURSES_SP_ARGx (chtype) ch8); if (strlen(s) > 1) { while (*s != '\0') { code = _nc_insert_ch(sp, win, ChAttrOf(ch) | UChar(*s)); if (code != OK) break; ++s; } } else { code = ERR; } } } #endif break; } return code; } NCURSES_EXPORT(int) winsch(WINDOW *win, chtype c) { NCURSES_SIZE_T oy; NCURSES_SIZE_T ox; int code = ERR; T((T_CALLED("winsch(%p, %s)"), (void *) win, _tracechtype(c))); if (win != 0) { oy = win->_cury; ox = win->_curx; code = _nc_insert_ch(_nc_screen_of(win), win, c); win->_curx = ox; win->_cury = oy; _nc_synchook(win); } returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_getstr.c0000644000175100001440000001513611650567747017402 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_getstr.c ** ** The routine wgetstr(). ** */ #include MODULE_ID("$Id: lib_getstr.c,v 1.30 2011/10/22 16:31:35 tom Exp $") /* * This wipes out the last character, no matter whether it was a tab, control * or other character, and handles reverse wraparound. */ static char * WipeOut(WINDOW *win, int y, int x, char *first, char *last, int echoed) { if (last > first) { *--last = '\0'; if (echoed) { int y1 = win->_cury; int x1 = win->_curx; wmove(win, y, x); waddstr(win, first); getyx(win, y, x); while (win->_cury < y1 || (win->_cury == y1 && win->_curx < x1)) waddch(win, (chtype) ' '); wmove(win, y, x); } } return last; } NCURSES_EXPORT(int) wgetnstr_events(WINDOW *win, char *str, int maxlen, EVENTLIST_1st(_nc_eventlist * evl)) { SCREEN *sp = _nc_screen_of(win); TTY buf; bool oldnl, oldecho, oldraw, oldcbreak; char erasec; char killc; char *oldstr; int ch; int y, x; T((T_CALLED("wgetnstr(%p,%p,%d)"), (void *) win, (void *) str, maxlen)); if (!win) returnCode(ERR); NCURSES_SP_NAME(_nc_get_tty_mode) (NCURSES_SP_ARGx &buf); oldnl = sp->_nl; oldecho = sp->_echo; oldraw = sp->_raw; oldcbreak = sp->_cbreak; NCURSES_SP_NAME(nl) (NCURSES_SP_ARG); NCURSES_SP_NAME(noecho) (NCURSES_SP_ARG); NCURSES_SP_NAME(noraw) (NCURSES_SP_ARG); NCURSES_SP_NAME(cbreak) (NCURSES_SP_ARG); erasec = NCURSES_SP_NAME(erasechar) (NCURSES_SP_ARG); killc = NCURSES_SP_NAME(killchar) (NCURSES_SP_ARG); oldstr = str; getyx(win, y, x); if (is_wintouched(win) || (win->_flags & _HASMOVED)) wrefresh(win); while ((ch = wgetch_events(win, evl)) != ERR) { /* * Some terminals (the Wyse-50 is the most common) generate * a \n from the down-arrow key. With this logic, it's the * user's choice whether to set kcud=\n for wgetch(); * terminating *getstr() with \n should work either way. */ if (ch == '\n' || ch == '\r' || ch == KEY_DOWN || ch == KEY_ENTER) { if (oldecho == TRUE && win->_cury == win->_maxy && win->_scroll) wechochar(win, (chtype) '\n'); break; } #ifdef KEY_EVENT if (ch == KEY_EVENT) break; #endif #ifdef KEY_RESIZE if (ch == KEY_RESIZE) break; #endif if (ch == erasec || ch == KEY_LEFT || ch == KEY_BACKSPACE) { if (str > oldstr) { str = WipeOut(win, y, x, oldstr, str, oldecho); } } else if (ch == killc) { while (str > oldstr) { str = WipeOut(win, y, x, oldstr, str, oldecho); } } else if (ch >= KEY_MIN || (maxlen >= 0 && str - oldstr >= maxlen)) { NCURSES_SP_NAME(beep) (NCURSES_SP_ARG); } else { *str++ = (char) ch; if (oldecho == TRUE) { int oldy = win->_cury; if (waddch(win, (chtype) ch) == ERR) { /* * We can't really use the lower-right * corner for input, since it'll mess * up bookkeeping for erases. */ win->_flags &= ~_WRAPPED; waddch(win, (chtype) ' '); str = WipeOut(win, y, x, oldstr, str, oldecho); continue; } else if (win->_flags & _WRAPPED) { /* * If the last waddch forced a wrap & * scroll, adjust our reference point * for erasures. */ if (win->_scroll && oldy == win->_maxy && win->_cury == win->_maxy) { if (--y <= 0) { y = 0; } } win->_flags &= ~_WRAPPED; } wrefresh(win); } } } win->_curx = 0; win->_flags &= ~_WRAPPED; if (win->_cury < win->_maxy) win->_cury++; wrefresh(win); /* Restore with a single I/O call, to fix minor asymmetry between * raw/noraw, etc. */ sp->_nl = oldnl; sp->_echo = oldecho; sp->_raw = oldraw; sp->_cbreak = oldcbreak; NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf); *str = '\0'; if (ch == ERR) returnCode(ch); T(("wgetnstr returns %s", _nc_visbuf(oldstr))); #ifdef KEY_EVENT if (ch == KEY_EVENT) returnCode(ch); #endif #ifdef KEY_RESIZE if (ch == KEY_RESIZE) returnCode(ch); #endif returnCode(OK); } #ifdef NCURSES_WGETCH_EVENTS NCURSES_EXPORT(int) wgetnstr(WINDOW *win, char *str, int maxlen) { returnCode(wgetnstr_events(win, str, maxlen, EVENTLIST_1st((_nc_eventlist *) 0))); } #endif ncurses-6.0-20160213/ncurses/base/lib_insdel.c0000644000175100001440000000566411270700401017323 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_insdel.c ** ** The routine winsdelln(win, n). ** positive n insert n lines above current line ** negative n delete n lines starting from current line ** */ #include MODULE_ID("$Id: lib_insdel.c,v 1.13 2009/10/24 22:34:41 tom Exp $") NCURSES_EXPORT(int) winsdelln(WINDOW *win, int n) { int code = ERR; T((T_CALLED("winsdelln(%p,%d)"), (void *) win, n)); if (win) { if (n != 0) { _nc_scroll_window(win, -n, win->_cury, win->_maxy, win->_nc_bkgd); _nc_synchook(win); } code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_slk.c0000644000175100001440000001743111534524560016646 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Authors: * * Gerhard Fuernkranz 1993 (original) * * Zeyd M. Ben-Halim 1992,1995 (sic) * * Eric S. Raymond * * Juergen Pfeifer 1996-on * * Thomas E. Dickey * ****************************************************************************/ /* * lib_slk.c * Soft key routines. */ #include #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_slk.c,v 1.48 2011/03/05 21:21:52 tom Exp $") #ifdef USE_TERM_DRIVER #define NumLabels InfoOf(SP_PARM).numlabels #define NoColorVideo InfoOf(SP_PARM).nocolorvideo #define LabelWidth InfoOf(SP_PARM).labelwidth #define LabelHeight InfoOf(SP_PARM).labelheight #else #define NumLabels num_labels #define NoColorVideo no_color_video #define LabelWidth label_width #define LabelHeight label_height #endif /* * Free any memory related to soft labels, return an error. */ static int slk_failed(NCURSES_SP_DCL0) { if ((0 != SP_PARM) && SP_PARM->_slk) { FreeIfNeeded(SP_PARM->_slk->ent); free(SP_PARM->_slk); SP_PARM->_slk = (SLK *) 0; } return ERR; } NCURSES_EXPORT(int) _nc_format_slks(NCURSES_SP_DCLx int cols) { int gap, i, x; int max_length; if (!SP_PARM || !SP_PARM->_slk) return ERR; max_length = SP_PARM->_slk->maxlen; if (SP_PARM->slk_format >= 3) { /* PC style */ gap = (cols - 3 * (3 + 4 * max_length)) / 2; if (gap < 1) gap = 1; for (i = x = 0; i < SP_PARM->_slk->maxlab; i++) { SP_PARM->_slk->ent[i].ent_x = x; x += max_length; x += (i == 3 || i == 7) ? gap : 1; } } else { if (SP_PARM->slk_format == 2) { /* 4-4 */ gap = cols - (int) (SP_PARM->_slk->maxlab * max_length) - 6; if (gap < 1) gap = 1; for (i = x = 0; i < SP_PARM->_slk->maxlab; i++) { SP_PARM->_slk->ent[i].ent_x = x; x += max_length; x += (i == 3) ? gap : 1; } } else { if (SP_PARM->slk_format == 1) { /* 1 -> 3-2-3 */ gap = (cols - (SP_PARM->_slk->maxlab * max_length) - 5) / 2; if (gap < 1) gap = 1; for (i = x = 0; i < SP_PARM->_slk->maxlab; i++) { SP_PARM->_slk->ent[i].ent_x = x; x += max_length; x += (i == 2 || i == 4) ? gap : 1; } } else { return slk_failed(NCURSES_SP_ARG); } } } SP_PARM->_slk->dirty = TRUE; return OK; } /* * Initialize soft labels. * Called from newterm() */ NCURSES_EXPORT(int) _nc_slk_initialize(WINDOW *stwin, int cols) { int i; int res = OK; size_t max_length; SCREEN *sp; int numlab; T((T_CALLED("_nc_slk_initialize()"))); assert(stwin); sp = _nc_screen_of(stwin); if (0 == sp) returnCode(ERR); assert(TerminalOf(SP_PARM)); numlab = NumLabels; if (SP_PARM->_slk) { /* we did this already, so simply return */ returnCode(OK); } else if ((SP_PARM->_slk = typeCalloc(SLK, 1)) == 0) returnCode(ERR); if (!SP_PARM->slk_format) SP_PARM->slk_format = _nc_globals.slk_format; /* * If we use colors, vidputs() will suppress video attributes that conflict * with colors. In that case, we're still guaranteed that "reverse" would * work. */ if ((NoColorVideo & 1) == 0) SetAttr(SP_PARM->_slk->attr, A_STANDOUT); else SetAttr(SP_PARM->_slk->attr, A_REVERSE); SP_PARM->_slk->maxlab = (short) ((numlab > 0) ? numlab : MAX_SKEY(SP_PARM->slk_format)); SP_PARM->_slk->maxlen = (short) ((numlab > 0) ? LabelWidth * LabelHeight : MAX_SKEY_LEN(SP_PARM->slk_format)); SP_PARM->_slk->labcnt = (short) ((SP_PARM->_slk->maxlab < MAX_SKEY(SP_PARM->slk_format)) ? MAX_SKEY(SP_PARM->slk_format) : SP_PARM->_slk->maxlab); if (SP_PARM->_slk->maxlen <= 0 || SP_PARM->_slk->labcnt <= 0 || (SP_PARM->_slk->ent = typeCalloc(slk_ent, (size_t) SP_PARM->_slk->labcnt)) == NULL) returnCode(slk_failed(NCURSES_SP_ARG)); max_length = (size_t) SP_PARM->_slk->maxlen; for (i = 0; i < SP_PARM->_slk->labcnt; i++) { size_t used = max_length + 1; SP_PARM->_slk->ent[i].ent_text = (char *) _nc_doalloc(0, used); if (SP_PARM->_slk->ent[i].ent_text == 0) returnCode(slk_failed(NCURSES_SP_ARG)); memset(SP_PARM->_slk->ent[i].ent_text, 0, used); SP_PARM->_slk->ent[i].form_text = (char *) _nc_doalloc(0, used); if (SP_PARM->_slk->ent[i].form_text == 0) returnCode(slk_failed(NCURSES_SP_ARG)); if (used > 1) { memset(SP_PARM->_slk->ent[i].form_text, ' ', used - 1); } SP_PARM->_slk->ent[i].form_text[used - 1] = '\0'; SP_PARM->_slk->ent[i].visible = (char) (i < SP_PARM->_slk->maxlab); } res = _nc_format_slks(NCURSES_SP_ARGx cols); if ((SP_PARM->_slk->win = stwin) == NULL) { returnCode(slk_failed(NCURSES_SP_ARG)); } /* We now reset the format so that the next newterm has again * per default no SLK keys and may call slk_init again to * define a new layout. (juergen 03-Mar-1999) */ _nc_globals.slk_format = 0; returnCode(res); } /* * Restore the soft labels on the screen. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_restore) (NCURSES_SP_DCL0) { T((T_CALLED("slk_restore(%p)"), (void *) SP_PARM)); if (0 == SP_PARM) returnCode(ERR); if (SP_PARM->_slk == NULL) returnCode(ERR); SP_PARM->_slk->hidden = FALSE; SP_PARM->_slk->dirty = TRUE; returnCode(NCURSES_SP_NAME(slk_refresh) (NCURSES_SP_ARG)); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_restore(void) { return NCURSES_SP_NAME(slk_restore) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/lib_pad.c0000644000175100001440000002503611364701725016622 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * lib_pad.c * newpad -- create a new pad * pnoutrefresh -- refresh a pad, no update * pechochar -- add a char to a pad and refresh */ #include MODULE_ID("$Id: lib_pad.c,v 1.46 2010/04/24 23:50:45 tom Exp $") NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newpad) (NCURSES_SP_DCLx int l, int c) { WINDOW *win; NCURSES_CH_T *ptr; int i; T((T_CALLED("newpad(%p,%d, %d)"), (void *) SP_PARM, l, c)); if (l <= 0 || c <= 0) returnWin(0); win = NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_ARGx l, c, 0, 0, _ISPAD); if (win == NULL) returnWin(0); for (i = 0; i < l; i++) { if_USE_SCROLL_HINTS(win->_line[i].oldindex = _NEWINDEX); if ((win->_line[i].text = typeCalloc(NCURSES_CH_T, ((size_t) c))) == 0) { (void) _nc_freewin(win); returnWin(0); } for (ptr = win->_line[i].text; ptr < win->_line[i].text + c; ptr++) SetChar(*ptr, BLANK_TEXT, BLANK_ATTR); } returnWin(win); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(WINDOW *) newpad(int l, int c) { return NCURSES_SP_NAME(newpad) (CURRENT_SCREEN, l, c); } #endif NCURSES_EXPORT(WINDOW *) subpad(WINDOW *orig, int l, int c, int begy, int begx) { WINDOW *win = (WINDOW *) 0; T((T_CALLED("subpad(%d, %d)"), l, c)); if (orig) { if (!(orig->_flags & _ISPAD) || ((win = derwin(orig, l, c, begy, begx)) == NULL)) returnWin(0); } returnWin(win); } NCURSES_EXPORT(int) prefresh(WINDOW *win, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { #if NCURSES_SP_FUNCS SCREEN *sp = _nc_screen_of(win); #endif T((T_CALLED("prefresh()"))); if (pnoutrefresh(win, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol) != ERR && NCURSES_SP_NAME(doupdate) (NCURSES_SP_ARG) != ERR) { returnCode(OK); } returnCode(ERR); } NCURSES_EXPORT(int) pnoutrefresh(WINDOW *win, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol) { int i, j; int m, n; int pmaxrow; int pmaxcol; SCREEN *sp; #if USE_SCROLL_HINTS const int my_len = 2; /* parameterize the threshold for hardscroll */ NCURSES_SIZE_T displaced; bool wide; #endif T((T_CALLED("pnoutrefresh(%p, %d, %d, %d, %d, %d, %d)"), (void *) win, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol)); if (win == 0) returnCode(ERR); if (!(win->_flags & _ISPAD)) returnCode(ERR); sp = _nc_screen_of(win); /* negative values are interpreted as zero */ if (pminrow < 0) pminrow = 0; if (pmincol < 0) pmincol = 0; if (sminrow < 0) sminrow = 0; if (smincol < 0) smincol = 0; pmaxrow = pminrow + smaxrow - sminrow; pmaxcol = pmincol + smaxcol - smincol; T((" pminrow + smaxrow - sminrow %ld, win->_maxy %ld", (long) pmaxrow, (long) win->_maxy)); T((" pmincol + smaxcol - smincol %ld, win->_maxx %ld", (long) pmaxcol, (long) win->_maxx)); /* * Trim the caller's screen size back to the actual limits. */ if (pmaxrow > win->_maxy) { smaxrow -= (pmaxrow - win->_maxy); pmaxrow = pminrow + smaxrow - sminrow; } if (pmaxcol > win->_maxx) { smaxcol -= (pmaxcol - win->_maxx); pmaxcol = pmincol + smaxcol - smincol; } if (smaxrow >= screen_lines(sp) || smaxcol >= screen_columns(sp) || sminrow > smaxrow || smincol > smaxcol) returnCode(ERR); T(("pad being refreshed")); #if USE_SCROLL_HINTS if (win->_pad._pad_y >= 0) { displaced = pminrow - win->_pad._pad_y - (sminrow - win->_pad._pad_top); T(("pad being shifted by %d line(s)", displaced)); } else displaced = 0; #endif /* * For pure efficiency, we'd want to transfer scrolling information * from the pad to newscr whenever the window is wide enough that * its update will dominate the cost of the update for the horizontal * band of newscr that it occupies. Unfortunately, this threshold * tends to be complex to estimate, and in any case scrolling the * whole band and rewriting the parts outside win's image would look * really ugly. So. What we do is consider the pad "wide" if it * either (a) occupies the whole width of newscr, or (b) occupies * all but at most one column on either vertical edge of the screen * (this caters to fussy people who put boxes around full-screen * windows). Note that changing this formula will not break any code, * merely change the costs of various update cases. */ #if USE_SCROLL_HINTS wide = (smincol < my_len && smaxcol > (NewScreen(sp)->_maxx - my_len)); #endif for (i = pminrow, m = sminrow + win->_yoffset; i <= pmaxrow && m <= NewScreen(sp)->_maxy; i++, m++) { register struct ldat *nline = &NewScreen(sp)->_line[m]; register struct ldat *oline = &win->_line[i]; for (j = pmincol, n = smincol; j <= pmaxcol; j++, n++) { NCURSES_CH_T ch = oline->text[j]; #if USE_WIDEC_SUPPORT /* * Special case for leftmost character of the displayed area. * Only half of a double-width character may be visible. */ if (j == pmincol && j > 0 && isWidecExt(ch)) { SetChar(ch, L(' '), AttrOf(oline->text[j - 1])); } #endif if (!CharEq(ch, nline->text[n])) { nline->text[n] = ch; CHANGED_CELL(nline, n); } } #if USE_SCROLL_HINTS if (wide) { int nind = m + displaced; if (oline->oldindex < 0 || nind < sminrow || nind > smaxrow) { nind = _NEWINDEX; } else if (displaced) { register struct ldat *pline = &CurScreen(sp)->_line[nind]; for (j = 0; j <= my_len; j++) { int k = NewScreen(sp)->_maxx - j; if (pline->text[j] != nline->text[j] || pline->text[k] != nline->text[k]) { nind = _NEWINDEX; break; } } } nline->oldindex = nind; } #endif /* USE_SCROLL_HINTS */ oline->firstchar = oline->lastchar = _NOCHANGE; if_USE_SCROLL_HINTS(oline->oldindex = i); } /* * Clean up debris from scrolling or resizing the pad, so we do not * accidentally pick up the index value during the next call to this * procedure. The only rows that should have an index value are those * that are displayed during this cycle. */ #if USE_SCROLL_HINTS for (i = pminrow - 1; (i >= 0) && (win->_line[i].oldindex >= 0); i--) win->_line[i].oldindex = _NEWINDEX; for (i = pmaxrow + 1; (i <= win->_maxy) && (win->_line[i].oldindex >= 0); i++) win->_line[i].oldindex = _NEWINDEX; #endif win->_begx = (NCURSES_SIZE_T) smincol; win->_begy = (NCURSES_SIZE_T) sminrow; if (win->_clear) { win->_clear = FALSE; NewScreen(sp)->_clear = TRUE; } /* * Use the pad's current position, if it will be visible. * If not, don't do anything; it's not an error. */ if (win->_leaveok == FALSE && win->_cury >= pminrow && win->_curx >= pmincol && win->_cury <= pmaxrow && win->_curx <= pmaxcol) { NewScreen(sp)->_cury = (NCURSES_SIZE_T) (win->_cury - pminrow + win->_begy + win->_yoffset); NewScreen(sp)->_curx = (NCURSES_SIZE_T) (win->_curx - pmincol + win->_begx); } NewScreen(sp)->_leaveok = win->_leaveok; win->_flags &= ~_HASMOVED; /* * Update our cache of the line-numbers that we displayed from the pad. * We will use this on subsequent calls to this function to derive * values to stuff into 'oldindex[]' -- for scrolling optimization. */ win->_pad._pad_y = (NCURSES_SIZE_T) pminrow; win->_pad._pad_x = (NCURSES_SIZE_T) pmincol; win->_pad._pad_top = (NCURSES_SIZE_T) sminrow; win->_pad._pad_left = (NCURSES_SIZE_T) smincol; win->_pad._pad_bottom = (NCURSES_SIZE_T) smaxrow; win->_pad._pad_right = (NCURSES_SIZE_T) smaxcol; returnCode(OK); } NCURSES_EXPORT(int) pechochar(WINDOW *pad, const chtype ch) { T((T_CALLED("pechochar(%p, %s)"), (void *) pad, _tracechtype(ch))); if (pad == 0) returnCode(ERR); if (!(pad->_flags & _ISPAD)) returnCode(wechochar(pad, ch)); waddch(pad, ch); prefresh(pad, pad->_pad._pad_y, pad->_pad._pad_x, pad->_pad._pad_top, pad->_pad._pad_left, pad->_pad._pad_bottom, pad->_pad._pad_right); returnCode(OK); } ncurses-6.0-20160213/ncurses/base/lib_instr.c0000644000175100001440000001015212273270227017204 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* ** lib_instr.c ** ** The routine winnstr(). ** */ #include MODULE_ID("$Id: lib_instr.c,v 1.21 2014/02/01 22:09:27 tom Exp $") NCURSES_EXPORT(int) winnstr(WINDOW *win, char *str, int n) { int i = 0, row, col; T((T_CALLED("winnstr(%p,%p,%d)"), (void *) win, str, n)); if (!str) returnCode(0); if (win) { getyx(win, row, col); if (n < 0) n = win->_maxx - win->_curx + 1; for (; i < n;) { #if USE_WIDEC_SUPPORT cchar_t *cell = &(win->_line[row].text[col]); wchar_t *wch; attr_t attrs; NCURSES_PAIRS_T pair; int n2; bool done = FALSE; mbstate_t state; size_t i3, n3; char *tmp; if (!isWidecExt(*cell)) { n2 = getcchar(cell, 0, 0, 0, 0); if (n2 > 0 && (wch = typeCalloc(wchar_t, (unsigned) n2 + 1)) != 0) { if (getcchar(cell, wch, &attrs, &pair, 0) == OK) { init_mb(state); n3 = wcstombs(0, wch, (size_t) 0); if (!isEILSEQ(n3) && (n3 != 0)) { size_t need = n3 + 10 + (size_t) i; int have = (int) n3 + i; /* check for loop-done as well as overflow */ if (have > n || (int) need <= 0) { done = TRUE; } else if ((tmp = typeCalloc(char, need)) == 0) { done = TRUE; } else { init_mb(state); wcstombs(tmp, wch, n3); for (i3 = 0; i3 < n3; ++i3) str[i++] = tmp[i3]; free(tmp); } } } free(wch); if (done) break; } } #else str[i++] = (char) CharOf(win->_line[row].text[col]); #endif if (++col > win->_maxx) { break; } } } str[i] = '\0'; /* SVr4 does not seem to count the null */ T(("winnstr returns %s", _nc_visbuf(str))); returnCode(i); } ncurses-6.0-20160213/ncurses/base/lib_hline.c0000644000175100001440000000617411503262167017154 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_hline.c ** ** The routine whline(). ** */ #include MODULE_ID("$Id: lib_hline.c,v 1.13 2010/12/19 01:48:39 tom Exp $") NCURSES_EXPORT(int) whline(WINDOW *win, chtype ch, int n) { int code = ERR; int start; int end; T((T_CALLED("whline(%p,%s,%d)"), (void *) win, _tracechtype(ch), n)); if (win) { struct ldat *line = &(win->_line[win->_cury]); NCURSES_CH_T wch; start = win->_curx; end = start + n - 1; if (end > win->_maxx) end = win->_maxx; CHANGED_RANGE(line, start, end); if (ch == 0) SetChar2(wch, ACS_HLINE); else SetChar2(wch, ch); wch = _nc_render(win, wch); while (end >= start) { line->text[end] = wch; end--; } _nc_synchook(win); code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_clreol.c0000644000175100001440000000666311270700242017330 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2001,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_clreol.c ** ** The routine wclrtoeol(). ** */ #include MODULE_ID("$Id: lib_clreol.c,v 1.22 2009/10/24 22:33:06 tom Exp $") NCURSES_EXPORT(int) wclrtoeol(WINDOW *win) { int code = ERR; T((T_CALLED("wclrtoeol(%p)"), (void *) win)); if (win) { NCURSES_CH_T blank; NCURSES_CH_T *ptr, *end; struct ldat *line; NCURSES_SIZE_T y = win->_cury; NCURSES_SIZE_T x = win->_curx; /* * If we have just wrapped the cursor, the clear applies to the * new line, unless we are at the lower right corner. */ if ((win->_flags & _WRAPPED) != 0 && y < win->_maxy) { win->_flags &= ~_WRAPPED; } /* * There's no point in clearing if we're not on a legal * position, either. */ if ((win->_flags & _WRAPPED) != 0 || y > win->_maxy || x > win->_maxx) returnCode(ERR); blank = win->_nc_bkgd; line = &win->_line[y]; CHANGED_TO_EOL(line, x, win->_maxx); ptr = &(line->text[x]); end = &(line->text[win->_maxx]); while (ptr <= end) *ptr++ = blank; _nc_synchook(win); code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_echo.c0000644000175100001440000000645311270674546017004 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * echo.c * * Routines: * echo() * noecho() * */ #include MODULE_ID("$Id: lib_echo.c,v 1.8 2009/10/24 22:02:14 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(echo) (NCURSES_SP_DCL0) { T((T_CALLED("echo(%p)"), (void *) SP_PARM)); if (0 == SP_PARM) returnCode(ERR); SP_PARM->_echo = TRUE; returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) echo(void) { return NCURSES_SP_NAME(echo) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(noecho) (NCURSES_SP_DCL0) { T((T_CALLED("noecho(%p)"), (void *) SP_PARM)); if (0 == SP_PARM) returnCode(ERR); SP_PARM->_echo = FALSE; returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) noecho(void) { return NCURSES_SP_NAME(noecho) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/keybound.c0000644000175100001440000000613511650571611017044 0ustar tomusers/**************************************************************************** * Copyright (c) 1999-2009,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1999-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ #include MODULE_ID("$Id: keybound.c,v 1.11 2011/10/22 16:47:05 tom Exp $") /* * Returns the count'th string definition which is associated with the * given keycode. The result is malloc'd, must be freed by the caller. */ NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (NCURSES_SP_DCLx int code, int count) { char *result = 0; T((T_CALLED("keybound(%p, %d,%d)"), (void *) SP_PARM, code, count)); if (SP_PARM != 0 && code >= 0) { result = _nc_expand_try(SP_PARM->_keytry, (unsigned) code, &count, (size_t) 0); } returnPtr(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(char *) keybound(int code, int count) { return NCURSES_SP_NAME(keybound) (CURRENT_SCREEN, code, count); } #endif ncurses-6.0-20160213/ncurses/base/use_window.c0000644000175100001440000000525412650770520017411 0ustar tomusers/**************************************************************************** * Copyright (c) 2007-2009,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2007 * ****************************************************************************/ #include MODULE_ID("$Id: use_window.c,v 1.10 2016/01/23 21:32:00 tom Exp $") NCURSES_EXPORT(int) use_window(WINDOW *win, NCURSES_WINDOW_CB func, void *data) { int code = OK; T((T_CALLED("use_window(%p,%p,%p)"), (void *) win, TR_FUNC(func), data)); _nc_lock_global(curses); code = func(win, data); _nc_unlock_global(curses); returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_bkgd.c0000644000175100001440000001252312402031224016742 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1997 * * and: Sven Verdoolaege 2000 * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ #include MODULE_ID("$Id: lib_bkgd.c,v 1.49 2014/09/04 09:36:20 tom Exp $") /* * Set the window's background information. */ #if USE_WIDEC_SUPPORT NCURSES_EXPORT(void) #else static NCURSES_INLINE void #endif wbkgrndset(WINDOW *win, const ARG_CH_T ch) { T((T_CALLED("wbkgdset(%p,%s)"), (void *) win, _tracech_t(ch))); if (win) { attr_t off = AttrOf(win->_nc_bkgd); attr_t on = AttrOf(CHDEREF(ch)); toggle_attr_off(WINDOW_ATTRS(win), off); toggle_attr_on(WINDOW_ATTRS(win), on); #if NCURSES_EXT_COLORS { int pair; if ((pair = GetPair(win->_nc_bkgd)) != 0) SET_WINDOW_PAIR(win, 0); if ((pair = GetPair(CHDEREF(ch))) != 0) SET_WINDOW_PAIR(win, pair); } #endif if (CharOf(CHDEREF(ch)) == L('\0')) { SetChar(win->_nc_bkgd, BLANK_TEXT, AttrOf(CHDEREF(ch))); if_EXT_COLORS(SetPair(win->_nc_bkgd, GetPair(CHDEREF(ch)))); } else { win->_nc_bkgd = CHDEREF(ch); } #if USE_WIDEC_SUPPORT /* * If we're compiled for wide-character support, _bkgrnd is the * preferred location for the background information since it stores * more than _bkgd. Update _bkgd each time we modify _bkgrnd, so the * macro getbkgd() will work. */ { cchar_t wch; int tmp; memset(&wch, 0, sizeof(wch)); (void) wgetbkgrnd(win, &wch); tmp = _nc_to_char((wint_t) CharOf(wch)); win->_bkgd = (((tmp == EOF) ? ' ' : (chtype) tmp) | (AttrOf(wch) & ALL_BUT_COLOR) | (chtype) ColorPair(GET_WINDOW_PAIR(win))); } #endif } returnVoid; } NCURSES_EXPORT(void) wbkgdset(WINDOW *win, chtype ch) { NCURSES_CH_T wch; SetChar2(wch, ch); wbkgrndset(win, CHREF(wch)); } /* * Set the window's background information and apply it to each cell. */ #if USE_WIDEC_SUPPORT NCURSES_EXPORT(int) #else static NCURSES_INLINE int #undef wbkgrnd #endif wbkgrnd(WINDOW *win, const ARG_CH_T ch) { int code = ERR; int x, y; T((T_CALLED("wbkgd(%p,%s)"), (void *) win, _tracech_t(ch))); if (win) { NCURSES_CH_T new_bkgd = CHDEREF(ch); NCURSES_CH_T old_bkgrnd; memset(&old_bkgrnd, 0, sizeof(old_bkgrnd)); (void) wgetbkgrnd(win, &old_bkgrnd); (void) wbkgrndset(win, CHREF(new_bkgd)); (void) wattrset(win, (int) AttrOf(win->_nc_bkgd)); for (y = 0; y <= win->_maxy; y++) { for (x = 0; x <= win->_maxx; x++) { if (CharEq(win->_line[y].text[x], old_bkgrnd)) { win->_line[y].text[x] = win->_nc_bkgd; } else { NCURSES_CH_T wch = win->_line[y].text[x]; RemAttr(wch, (~(A_ALTCHARSET | A_CHARTEXT))); win->_line[y].text[x] = _nc_render(win, wch); } } } touchwin(win); _nc_synchook(win); code = OK; } returnCode(code); } NCURSES_EXPORT(int) wbkgd(WINDOW *win, chtype ch) { NCURSES_CH_T wch; SetChar2(wch, ch); return wbkgrnd(win, CHREF(wch)); } ncurses-6.0-20160213/ncurses/base/lib_color.c0000644000175100001440000005641512610530766017201 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* lib_color.c * * Handles color emulation of SYS V curses */ #include #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_color.c,v 1.112 2015/10/17 20:39:18 Denis.Tikhomirov Exp $") #ifdef USE_TERM_DRIVER #define CanChange InfoOf(SP_PARM).canchange #define DefaultPalette InfoOf(SP_PARM).defaultPalette #define HasColor InfoOf(SP_PARM).hascolor #define InitColor InfoOf(SP_PARM).initcolor #define MaxColors InfoOf(SP_PARM).maxcolors #define MaxPairs InfoOf(SP_PARM).maxpairs #define UseHlsPalette (DefaultPalette == _nc_hls_palette) #else #define CanChange can_change #define DefaultPalette (hue_lightness_saturation ? hls_palette : cga_palette) #define HasColor has_color #define InitColor initialize_color #define MaxColors max_colors #define MaxPairs max_pairs #define UseHlsPalette (hue_lightness_saturation) #endif #ifndef USE_TERM_DRIVER /* * These should be screen structure members. They need to be globals for * historical reasons. So we assign them in start_color() and also in * set_term()'s screen-switching logic. */ #if USE_REENTRANT NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(COLOR_PAIRS) (void) { return SP ? SP->_pair_count : -1; } NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(COLORS) (void) { return SP ? SP->_color_count : -1; } #else NCURSES_EXPORT_VAR(int) COLOR_PAIRS = 0; NCURSES_EXPORT_VAR(int) COLORS = 0; #endif #endif /* !USE_TERM_DRIVER */ #define DATA(r,g,b) {r,g,b, 0,0,0, 0} #define TYPE_CALLOC(type,elts) typeCalloc(type, (unsigned)(elts)) #define MAX_PALETTE 8 #define OkColorHi(n) (((n) < COLORS) && ((n) < maxcolors)) #define InPalette(n) ((n) >= 0 && (n) < MAX_PALETTE) /* * Given a RGB range of 0..1000, we'll normally set the individual values * to about 2/3 of the maximum, leaving full-range for bold/bright colors. */ #define RGB_ON 680 #define RGB_OFF 0 /* *INDENT-OFF* */ static const color_t cga_palette[] = { /* R G B */ DATA(RGB_OFF, RGB_OFF, RGB_OFF), /* COLOR_BLACK */ DATA(RGB_ON, RGB_OFF, RGB_OFF), /* COLOR_RED */ DATA(RGB_OFF, RGB_ON, RGB_OFF), /* COLOR_GREEN */ DATA(RGB_ON, RGB_ON, RGB_OFF), /* COLOR_YELLOW */ DATA(RGB_OFF, RGB_OFF, RGB_ON), /* COLOR_BLUE */ DATA(RGB_ON, RGB_OFF, RGB_ON), /* COLOR_MAGENTA */ DATA(RGB_OFF, RGB_ON, RGB_ON), /* COLOR_CYAN */ DATA(RGB_ON, RGB_ON, RGB_ON), /* COLOR_WHITE */ }; static const color_t hls_palette[] = { /* H L S */ DATA( 0, 0, 0), /* COLOR_BLACK */ DATA( 120, 50, 100), /* COLOR_RED */ DATA( 240, 50, 100), /* COLOR_GREEN */ DATA( 180, 50, 100), /* COLOR_YELLOW */ DATA( 330, 50, 100), /* COLOR_BLUE */ DATA( 60, 50, 100), /* COLOR_MAGENTA */ DATA( 300, 50, 100), /* COLOR_CYAN */ DATA( 0, 50, 100), /* COLOR_WHITE */ }; #ifdef USE_TERM_DRIVER NCURSES_EXPORT_VAR(const color_t*) _nc_cga_palette = cga_palette; NCURSES_EXPORT_VAR(const color_t*) _nc_hls_palette = hls_palette; #endif /* *INDENT-ON* */ /* * Ensure that we use color pairs only when colors have been started, and also * that the index is within the limits of the table which we allocated. */ #define ValidPair(pair) \ ((SP_PARM != 0) && (pair >= 0) && (pair < SP_PARM->_pair_limit) && SP_PARM->_coloron) #if NCURSES_EXT_FUNCS /* * These are called from _nc_do_color(), which in turn is called from * vidattr - so we have to assume that sp may be null. */ static int default_fg(NCURSES_SP_DCL0) { return (SP_PARM != 0) ? SP_PARM->_default_fg : COLOR_WHITE; } static int default_bg(NCURSES_SP_DCL0) { return SP_PARM != 0 ? SP_PARM->_default_bg : COLOR_BLACK; } #else #define default_fg(sp) COLOR_WHITE #define default_bg(sp) COLOR_BLACK #endif #ifndef USE_TERM_DRIVER /* * SVr4 curses is known to interchange color codes (1,4) and (3,6), possibly * to maintain compatibility with a pre-ANSI scheme. The same scheme is * also used in the FreeBSD syscons. */ static int toggled_colors(int c) { if (c < 16) { static const int table[] = {0, 4, 2, 6, 1, 5, 3, 7, 8, 12, 10, 14, 9, 13, 11, 15}; c = table[c]; } return c; } #endif static void set_background_color(NCURSES_SP_DCLx int bg, NCURSES_SP_OUTC outc) { #ifdef USE_TERM_DRIVER CallDriver_3(SP_PARM, td_color, FALSE, bg, outc); #else if (set_a_background) { TPUTS_TRACE("set_a_background"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(set_a_background, bg), 1, outc); } else { TPUTS_TRACE("set_background"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(set_background, toggled_colors(bg)), 1, outc); } #endif } static void set_foreground_color(NCURSES_SP_DCLx int fg, NCURSES_SP_OUTC outc) { #ifdef USE_TERM_DRIVER CallDriver_3(SP_PARM, td_color, TRUE, fg, outc); #else if (set_a_foreground) { TPUTS_TRACE("set_a_foreground"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(set_a_foreground, fg), 1, outc); } else { TPUTS_TRACE("set_foreground"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(set_foreground, toggled_colors(fg)), 1, outc); } #endif } static void init_color_table(NCURSES_SP_DCL0) { const color_t *tp = DefaultPalette; int n; assert(tp != 0); for (n = 0; n < COLORS; n++) { if (InPalette(n)) { SP_PARM->_color_table[n] = tp[n]; } else { SP_PARM->_color_table[n] = tp[n % MAX_PALETTE]; if (UseHlsPalette) { SP_PARM->_color_table[n].green = 100; } else { if (SP_PARM->_color_table[n].red) SP_PARM->_color_table[n].red = 1000; if (SP_PARM->_color_table[n].green) SP_PARM->_color_table[n].green = 1000; if (SP_PARM->_color_table[n].blue) SP_PARM->_color_table[n].blue = 1000; } } } } /* * Reset the color pair, e.g., to whatever color pair 0 is. */ static bool reset_color_pair(NCURSES_SP_DCL0) { #ifdef USE_TERM_DRIVER return CallDriver(SP_PARM, td_rescol); #else bool result = FALSE; (void) SP_PARM; if (orig_pair != 0) { (void) NCURSES_PUTP2("orig_pair", orig_pair); result = TRUE; } return result; #endif } /* * Reset color pairs and definitions. Actually we do both more to accommodate * badly-written terminal descriptions than for the relatively rare case where * someone has changed the color definitions. */ NCURSES_EXPORT(bool) NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_DCL0) { int result = FALSE; T((T_CALLED("_nc_reset_colors(%p)"), (void *) SP_PARM)); if (SP_PARM->_color_defs > 0) SP_PARM->_color_defs = -(SP_PARM->_color_defs); if (reset_color_pair(NCURSES_SP_ARG)) result = TRUE; #ifdef USE_TERM_DRIVER result = CallDriver(SP_PARM, td_rescolors); #else if (orig_colors != 0) { NCURSES_PUTP2("orig_colors", orig_colors); result = TRUE; } #endif returnBool(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(bool) _nc_reset_colors(void) { return NCURSES_SP_NAME(_nc_reset_colors) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(start_color) (NCURSES_SP_DCL0) { int result = ERR; int maxpairs = 0, maxcolors = 0; T((T_CALLED("start_color(%p)"), (void *) SP_PARM)); if (SP_PARM == 0) { result = ERR; } else if (SP_PARM->_coloron) { result = OK; } else { maxpairs = MaxPairs; maxcolors = MaxColors; if (reset_color_pair(NCURSES_SP_ARG) != TRUE) { set_foreground_color(NCURSES_SP_ARGx default_fg(NCURSES_SP_ARG), NCURSES_SP_NAME(_nc_outch)); set_background_color(NCURSES_SP_ARGx default_bg(NCURSES_SP_ARG), NCURSES_SP_NAME(_nc_outch)); } #if !NCURSES_EXT_COLORS /* * Without ext-colors, we cannot represent more than 256 color pairs. */ if (maxpairs > 256) maxpairs = 256; #endif if (maxpairs > 0 && maxcolors > 0) { SP_PARM->_pair_limit = maxpairs; #if NCURSES_EXT_FUNCS /* * If using default colors, allocate extra space in table to * allow for default-color as a component of a color-pair. */ SP_PARM->_pair_limit += (1 + (2 * maxcolors)); #endif SP_PARM->_pair_count = maxpairs; SP_PARM->_color_count = maxcolors; #if !USE_REENTRANT COLOR_PAIRS = maxpairs; COLORS = maxcolors; #endif SP_PARM->_color_pairs = TYPE_CALLOC(colorpair_t, SP_PARM->_pair_limit); if (SP_PARM->_color_pairs != 0) { SP_PARM->_color_table = TYPE_CALLOC(color_t, maxcolors); if (SP_PARM->_color_table != 0) { SP_PARM->_color_pairs[0] = PAIR_OF(default_fg(NCURSES_SP_ARG), default_bg(NCURSES_SP_ARG)); init_color_table(NCURSES_SP_ARG); T(("started color: COLORS = %d, COLOR_PAIRS = %d", COLORS, COLOR_PAIRS)); SP_PARM->_coloron = 1; result = OK; } else if (SP_PARM->_color_pairs != 0) { FreeAndNull(SP_PARM->_color_pairs); } } } else { result = OK; } } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) start_color(void) { return NCURSES_SP_NAME(start_color) (CURRENT_SCREEN); } #endif /* This function was originally written by Daniel Weaver */ static void rgb2hls(int r, int g, int b, NCURSES_COLOR_T *h, NCURSES_COLOR_T *l, NCURSES_COLOR_T *s) /* convert RGB to HLS system */ { int min, max, t; if ((min = g < r ? g : r) > b) min = b; if ((max = g > r ? g : r) < b) max = b; /* calculate lightness */ *l = (NCURSES_COLOR_T) ((min + max) / 20); if (min == max) { /* black, white and all shades of gray */ *h = 0; *s = 0; return; } /* calculate saturation */ if (*l < 50) *s = (NCURSES_COLOR_T) (((max - min) * 100) / (max + min)); else *s = (NCURSES_COLOR_T) (((max - min) * 100) / (2000 - max - min)); /* calculate hue */ if (r == max) t = (NCURSES_COLOR_T) (120 + ((g - b) * 60) / (max - min)); else if (g == max) t = (NCURSES_COLOR_T) (240 + ((b - r) * 60) / (max - min)); else t = (NCURSES_COLOR_T) (360 + ((r - g) * 60) / (max - min)); *h = (NCURSES_COLOR_T) (t % 360); } /* * Extension (1997/1/18) - Allow negative f/b values to set default color * values. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(init_pair) (NCURSES_SP_DCLx NCURSES_PAIRS_T pair, NCURSES_COLOR_T f, NCURSES_COLOR_T b) { colorpair_t result; colorpair_t previous; int maxcolors; T((T_CALLED("init_pair(%p,%d,%d,%d)"), (void *) SP_PARM, (int) pair, (int) f, (int) b)); if (!ValidPair(pair)) returnCode(ERR); maxcolors = MaxColors; previous = SP_PARM->_color_pairs[pair]; #if NCURSES_EXT_FUNCS if (SP_PARM->_default_color || SP_PARM->_assumed_color) { bool isDefault = FALSE; bool wasDefault = FALSE; int default_pairs = SP_PARM->_default_pairs; /* * Map caller's color number, e.g., -1, 0, 1, .., 7, etc., into * internal unsigned values which we will store in the _color_pairs[] * table. */ if (isDefaultColor(f)) { f = COLOR_DEFAULT; isDefault = TRUE; } else if (!OkColorHi(f)) { returnCode(ERR); } if (isDefaultColor(b)) { b = COLOR_DEFAULT; isDefault = TRUE; } else if (!OkColorHi(b)) { returnCode(ERR); } /* * Check if the table entry that we are going to init/update used * default colors. */ if ((FORE_OF(previous) == COLOR_DEFAULT) || (BACK_OF(previous) == COLOR_DEFAULT)) wasDefault = TRUE; /* * Keep track of the number of entries in the color pair table which * used a default color. */ if (isDefault && !wasDefault) { ++default_pairs; } else if (wasDefault && !isDefault) { --default_pairs; } /* * As an extension, ncurses allows the pair number to exceed the * terminal's color_pairs value for pairs using a default color. * * Note that updating a pair which used a default color with one * that does not will decrement the count - and possibly interfere * with sequentially adding new pairs. */ if (pair > (SP_PARM->_pair_count + default_pairs)) { returnCode(ERR); } SP_PARM->_default_pairs = default_pairs; } else #endif { if ((f < 0) || !OkColorHi(f) || (b < 0) || !OkColorHi(b) || (pair < 1)) { returnCode(ERR); } } /* * When a pair's content is changed, replace its colors (if pair was * initialized before a screen update is performed replacing original * pair colors with the new ones). */ result = PAIR_OF(f, b); if (previous != 0 && previous != result) { int y, x; for (y = 0; y <= CurScreen(SP_PARM)->_maxy; y++) { struct ldat *ptr = &(CurScreen(SP_PARM)->_line[y]); bool changed = FALSE; for (x = 0; x <= CurScreen(SP_PARM)->_maxx; x++) { if (GetPair(ptr->text[x]) == pair) { /* Set the old cell to zero to ensure it will be updated on the next doupdate() */ SetChar(ptr->text[x], 0, 0); CHANGED_CELL(ptr, x); changed = TRUE; } } if (changed) NCURSES_SP_NAME(_nc_make_oldhash) (NCURSES_SP_ARGx y); } } SP_PARM->_color_pairs[pair] = result; if (GET_SCREEN_PAIR(SP_PARM) == pair) SET_SCREEN_PAIR(SP_PARM, (int) (~0)); /* force attribute update */ #ifdef USE_TERM_DRIVER CallDriver_3(SP_PARM, td_initpair, pair, f, b); #else if (initialize_pair && InPalette(f) && InPalette(b)) { const color_t *tp = DefaultPalette; TR(TRACE_ATTRS, ("initializing pair: pair = %d, fg=(%d,%d,%d), bg=(%d,%d,%d)", (int) pair, (int) tp[f].red, (int) tp[f].green, (int) tp[f].blue, (int) tp[b].red, (int) tp[b].green, (int) tp[b].blue)); NCURSES_PUTP2("initialize_pair", TPARM_7(initialize_pair, pair, (int) tp[f].red, (int) tp[f].green, (int) tp[f].blue, (int) tp[b].red, (int) tp[b].green, (int) tp[b].blue)); } #endif returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) init_pair(NCURSES_COLOR_T pair, NCURSES_COLOR_T f, NCURSES_COLOR_T b) { return NCURSES_SP_NAME(init_pair) (CURRENT_SCREEN, pair, f, b); } #endif #define okRGB(n) ((n) >= 0 && (n) <= 1000) NCURSES_EXPORT(int) NCURSES_SP_NAME(init_color) (NCURSES_SP_DCLx NCURSES_COLOR_T color, NCURSES_COLOR_T r, NCURSES_COLOR_T g, NCURSES_COLOR_T b) { int result = ERR; int maxcolors; T((T_CALLED("init_color(%p,%d,%d,%d,%d)"), (void *) SP_PARM, color, r, g, b)); if (SP_PARM == 0) returnCode(result); maxcolors = MaxColors; if (InitColor && SP_PARM->_coloron && (color >= 0 && OkColorHi(color)) && (okRGB(r) && okRGB(g) && okRGB(b))) { SP_PARM->_color_table[color].init = 1; SP_PARM->_color_table[color].r = r; SP_PARM->_color_table[color].g = g; SP_PARM->_color_table[color].b = b; if (UseHlsPalette) { rgb2hls(r, g, b, &SP_PARM->_color_table[color].red, &SP_PARM->_color_table[color].green, &SP_PARM->_color_table[color].blue); } else { SP_PARM->_color_table[color].red = r; SP_PARM->_color_table[color].green = g; SP_PARM->_color_table[color].blue = b; } #ifdef USE_TERM_DRIVER CallDriver_4(SP_PARM, td_initcolor, color, r, g, b); #else NCURSES_PUTP2("initialize_color", TPARM_4(initialize_color, color, r, g, b)); #endif SP_PARM->_color_defs = max(color + 1, SP_PARM->_color_defs); result = OK; } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) init_color(NCURSES_COLOR_T color, NCURSES_COLOR_T r, NCURSES_COLOR_T g, NCURSES_COLOR_T b) { return NCURSES_SP_NAME(init_color) (CURRENT_SCREEN, color, r, g, b); } #endif NCURSES_EXPORT(bool) NCURSES_SP_NAME(can_change_color) (NCURSES_SP_DCL) { int result = FALSE; T((T_CALLED("can_change_color(%p)"), (void *) SP_PARM)); if (HasTerminal(SP_PARM) && (CanChange != 0)) { result = TRUE; } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(bool) can_change_color(void) { return NCURSES_SP_NAME(can_change_color) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_colors) (NCURSES_SP_DCL0) { int code = FALSE; (void) SP_PARM; T((T_CALLED("has_colors()"))); if (HasTerminal(SP_PARM)) { #ifdef USE_TERM_DRIVER code = HasColor; #else code = ((VALID_NUMERIC(max_colors) && VALID_NUMERIC(max_pairs) && (((set_foreground != NULL) && (set_background != NULL)) || ((set_a_foreground != NULL) && (set_a_background != NULL)) || set_color_pair)) ? TRUE : FALSE); #endif } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(bool) has_colors(void) { return NCURSES_SP_NAME(has_colors) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(color_content) (NCURSES_SP_DCLx NCURSES_COLOR_T color, NCURSES_COLOR_T *r, NCURSES_COLOR_T *g, NCURSES_COLOR_T *b) { int result = ERR; int maxcolors; T((T_CALLED("color_content(%p,%d,%p,%p,%p)"), (void *) SP_PARM, color, (void *) r, (void *) g, (void *) b)); if (SP_PARM == 0) returnCode(result); maxcolors = MaxColors; if (color < 0 || !OkColorHi(color) || !SP_PARM->_coloron) { result = ERR; } else { NCURSES_COLOR_T c_r = SP_PARM->_color_table[color].red; NCURSES_COLOR_T c_g = SP_PARM->_color_table[color].green; NCURSES_COLOR_T c_b = SP_PARM->_color_table[color].blue; if (r) *r = c_r; if (g) *g = c_g; if (b) *b = c_b; TR(TRACE_ATTRS, ("...color_content(%d,%d,%d,%d)", color, c_r, c_g, c_b)); result = OK; } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) color_content(NCURSES_COLOR_T color, NCURSES_COLOR_T *r, NCURSES_COLOR_T *g, NCURSES_COLOR_T *b) { return NCURSES_SP_NAME(color_content) (CURRENT_SCREEN, color, r, g, b); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(pair_content) (NCURSES_SP_DCLx NCURSES_PAIRS_T pair, NCURSES_COLOR_T *f, NCURSES_COLOR_T *b) { int result; T((T_CALLED("pair_content(%p,%d,%p,%p)"), (void *) SP_PARM, (int) pair, (void *) f, (void *) b)); if (!ValidPair(pair)) { result = ERR; } else { NCURSES_COLOR_T fg = (NCURSES_COLOR_T) FORE_OF(SP_PARM->_color_pairs[pair]); NCURSES_COLOR_T bg = (NCURSES_COLOR_T) BACK_OF(SP_PARM->_color_pairs[pair]); #if NCURSES_EXT_FUNCS if (fg == COLOR_DEFAULT) fg = -1; if (bg == COLOR_DEFAULT) bg = -1; #endif if (f) *f = fg; if (b) *b = bg; TR(TRACE_ATTRS, ("...pair_content(%p,%d,%d,%d)", (void *) SP_PARM, (int) pair, (int) fg, (int) bg)); result = OK; } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) pair_content(NCURSES_COLOR_T pair, NCURSES_COLOR_T *f, NCURSES_COLOR_T *b) { return NCURSES_SP_NAME(pair_content) (CURRENT_SCREEN, pair, f, b); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_DCLx int old_pair, int pair, int reverse, NCURSES_SP_OUTC outc) { #ifdef USE_TERM_DRIVER CallDriver_4(SP_PARM, td_docolor, old_pair, pair, reverse, outc); #else NCURSES_COLOR_T fg = COLOR_DEFAULT; NCURSES_COLOR_T bg = COLOR_DEFAULT; NCURSES_COLOR_T old_fg = -1; NCURSES_COLOR_T old_bg = -1; if (!ValidPair(pair)) { return; } else if (pair != 0) { if (set_color_pair) { TPUTS_TRACE("set_color_pair"); NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx TPARM_1(set_color_pair, pair), 1, outc); return; } else if (SP_PARM != 0) { if (pair_content((NCURSES_COLOR_T) pair, &fg, &bg) == ERR) return; } } if (old_pair >= 0 && SP_PARM != 0 && pair_content((NCURSES_COLOR_T) old_pair, &old_fg, &old_bg) != ERR) { if ((isDefaultColor(fg) && !isDefaultColor(old_fg)) || (isDefaultColor(bg) && !isDefaultColor(old_bg))) { #if NCURSES_EXT_FUNCS /* * A minor optimization - but extension. If "AX" is specified in * the terminal description, treat it as screen's indicator of ECMA * SGR 39 and SGR 49, and assume the two sequences are independent. */ if (SP_PARM->_has_sgr_39_49 && isDefaultColor(old_bg) && !isDefaultColor(old_fg)) { NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx "\033[39m", 1, outc); } else if (SP_PARM->_has_sgr_39_49 && isDefaultColor(old_fg) && !isDefaultColor(old_bg)) { NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx "\033[49m", 1, outc); } else #endif reset_color_pair(NCURSES_SP_ARG); } } else { reset_color_pair(NCURSES_SP_ARG); } #if NCURSES_EXT_FUNCS if (isDefaultColor(fg)) fg = (NCURSES_COLOR_T) default_fg(NCURSES_SP_ARG); if (isDefaultColor(bg)) bg = (NCURSES_COLOR_T) default_bg(NCURSES_SP_ARG); #endif if (reverse) { NCURSES_COLOR_T xx = fg; fg = bg; bg = xx; } TR(TRACE_ATTRS, ("setting colors: pair = %d, fg = %d, bg = %d", pair, fg, bg)); if (!isDefaultColor(fg)) { set_foreground_color(NCURSES_SP_ARGx fg, outc); } if (!isDefaultColor(bg)) { set_background_color(NCURSES_SP_ARGx bg, outc); } #endif } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_do_color(int old_pair, int pair, int reverse, NCURSES_OUTC outc) { SetSafeOutcWrapper(outc); NCURSES_SP_NAME(_nc_do_color) (CURRENT_SCREEN, old_pair, pair, reverse, _nc_outc_wrapper); } #endif ncurses-6.0-20160213/ncurses/base/MKunctrl.awk0000644000175100001440000001324111764731055017325 0ustar tomusers# $Id: MKunctrl.awk,v 1.27 2012/06/09 20:29:33 tom Exp $ ############################################################################## # Copyright (c) 1998-2009,2012 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey (1997-on) # BEGIN { print "/* generated by MKunctrl.awk */" print "" print "#include " print "#include " print "" print "#undef unctrl" print "" } END { print "NCURSES_EXPORT(NCURSES_CONST char *) safe_unctrl(SCREEN *sp, chtype ch)" print "{" blob="" offset=0 if (bigstrings) { printf "static const short unctrl_table[] = {" } else { printf "static const char* const unctrl_table[] = {" } for ( ch = 0; ch < 256; ch++ ) { gap = "," part="" if ((ch % 8) == 0) { printf "\n " if (ch != 0) blob = blob "\"" blob = blob "\n \"" } if (bigstrings) printf "%4d%s", offset, gap; if (ch < 32) { part = sprintf ("^\\%03o", ch + 64); offset = offset + 3; } else if (ch == 127) { part = "^?"; offset = offset + 3; } else if (ch >= 128 && ch < 160) { part = sprintf("~\\%03o", ch - 64); offset = offset + 3; } else if (ch == 255) { part = "~?"; offset = offset + 3; } else if (ch >= 160) { part = sprintf("M-\\%03o", ch - 128); offset = offset + 4; } else { gap = gap " " part = sprintf("\\%03o", ch); offset = offset + 2; } if (ch == 255) gap = "\n" else if (((ch + 1) % 8) != 0) gap = gap " " if (bigstrings) { blob = blob part "\\0"; } else { printf "\"%s\"%s", part, gap } } print "};" blob = blob "\""; print "" printf "#if NCURSES_EXT_FUNCS\n"; if (bigstrings) { blob = blob "\n/* printable values in 128-255 range */" printf "static const short unctrl_c1[] = {" } else { printf "static const char* const unctrl_c1[] = {" } for ( ch = 128; ch < 256; ch++ ) { gap = "," if ((ch % 8) == 0) { if (ch != 128) blob = blob "\"" printf "\n " blob = blob "\n \"" } if (bigstrings) { printf "%4d%s", offset, gap; part = sprintf("\\%03o\\0", ch); blob = blob part offset = offset + 2; if (((ch + 1) % 8) != 0) gap = gap " " } else { if (ch >= 128) { printf "\"\\%03o\"", ch gap = gap " " } if (ch == 255) gap = "\n" else if (((ch + 1) % 8) != 0) gap = gap " " printf "%s", gap } } print "};" print "#endif /* NCURSES_EXT_FUNCS */" blob = blob "\"\n" print "" if (bigstrings) { print "static const char unctrl_blob[] = "blob";" print "" stringname = "unctrl_blob + unctrl" } else { stringname = "unctrl" } print "\tint check = (int) ChCharOf(ch);" print "\tconst char *result;" print "" print "\tif (check >= 0 && check < (int)SIZEOF(unctrl_table)) {" print "#if NCURSES_EXT_FUNCS" print "\t\tif ((sp != 0)" print "\t\t && (sp->_legacy_coding > 1)" print "\t\t && (check >= 128)" print "\t\t && (check < 160))" printf "\t\t\tresult = %s_c1[check - 128];\n", stringname; print "\t\telse" print "\t\tif ((check >= 160)" print "\t\t && (check < 256)" print "\t\t && ((sp != 0)" print "\t\t && ((sp->_legacy_coding > 0)" print "\t\t || (sp->_legacy_coding == 0" print "\t\t && isprint(check)))))" printf "\t\t\tresult = %s_c1[check - 128];\n", stringname; print "\t\telse" print "#endif /* NCURSES_EXT_FUNCS */" printf "\t\t\tresult = %s_table[check];\n", stringname; print "\t} else {" print "\t\tresult = 0;" print "\t}" print "\treturn (NCURSES_CONST char *)result;" print "}" print "" print "NCURSES_EXPORT(NCURSES_CONST char *) unctrl (chtype ch)" print "{" print "\treturn safe_unctrl(CURRENT_SCREEN, ch);" print "}" } ncurses-6.0-20160213/ncurses/base/lib_move.c0000644000175100001440000000561711270700337017021 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* ** lib_move.c ** ** The routine wmove(). ** */ #include MODULE_ID("$Id: lib_move.c,v 1.13 2009/10/24 22:34:07 tom Exp $") NCURSES_EXPORT(int) wmove(WINDOW *win, int y, int x) { T((T_CALLED("wmove(%p,%d,%d)"), (void *) win, y, x)); if (LEGALYX(win, y, x)) { win->_curx = (NCURSES_SIZE_T) x; win->_cury = (NCURSES_SIZE_T) y; win->_flags &= ~_WRAPPED; win->_flags |= _HASMOVED; returnCode(OK); } else returnCode(ERR); } ncurses-6.0-20160213/ncurses/base/lib_slkrefr.c0000644000175100001440000001312312306677173017526 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1996-on * * and: Thomas E. Dickey * ****************************************************************************/ /* * lib_slkrefr.c * Write SLK window to the (virtual) screen. */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_slkrefr.c,v 1.30 2014/03/08 20:32:59 tom Exp $") #ifdef USE_TERM_DRIVER #define NumLabels InfoOf(SP_PARM).numlabels #else #define NumLabels num_labels #endif /* * Paint the info line for the PC style SLK emulation. */ static void slk_paint_info(WINDOW *win) { SCREEN *sp = _nc_screen_of(win); if (win && sp && (sp->slk_format == 4)) { int i; (void) mvwhline(win, 0, 0, 0, getmaxx(win)); wmove(win, 0, 0); for (i = 0; i < sp->_slk->maxlab; i++) { mvwprintw(win, 0, sp->_slk->ent[i].ent_x, "F%d", i + 1); } } } /* * Write the soft labels to the soft-key window. */ static void slk_intern_refresh(SCREEN *sp) { int i; int fmt; SLK *slk; int numlab; if (sp == 0) return; slk = sp->_slk; fmt = sp->slk_format; numlab = NumLabels; if (slk->hidden) return; for (i = 0; i < slk->labcnt; i++) { if (slk->dirty || slk->ent[i].dirty) { if (slk->ent[i].visible) { if (numlab > 0 && SLK_STDFMT(fmt)) { #ifdef USE_TERM_DRIVER CallDriver_2(sp, td_hwlabel, i + 1, slk->ent[i].form_text); #else if (i < num_labels) { NCURSES_PUTP2("plab_norm", TPARM_2(plab_norm, i + 1, slk->ent[i].form_text)); } #endif } else { if (fmt == 4) slk_paint_info(slk->win); wmove(slk->win, SLK_LINES(fmt) - 1, slk->ent[i].ent_x); (void) wattrset(slk->win, (int) AttrOf(slk->attr)); waddstr(slk->win, slk->ent[i].form_text); /* if we simulate SLK's, it's looking much more natural to use the current ATTRIBUTE also for the label window */ (void) wattrset(slk->win, (int) WINDOW_ATTRS(StdScreen(sp))); } } slk->ent[i].dirty = FALSE; } } slk->dirty = FALSE; if (numlab > 0) { #ifdef USE_TERM_DRIVER CallDriver_1(sp, td_hwlabelOnOff, slk->hidden ? FALSE : TRUE); #else if (slk->hidden) { NCURSES_PUTP2("label_off", label_off); } else { NCURSES_PUTP2("label_on", label_on); } #endif } } /* * Refresh the soft labels. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_noutrefresh) (NCURSES_SP_DCL0) { T((T_CALLED("slk_noutrefresh(%p)"), (void *) SP_PARM)); if (SP_PARM == 0 || SP_PARM->_slk == 0) returnCode(ERR); if (SP_PARM->_slk->hidden) returnCode(OK); slk_intern_refresh(SP_PARM); returnCode(wnoutrefresh(SP_PARM->_slk->win)); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_noutrefresh(void) { return NCURSES_SP_NAME(slk_noutrefresh) (CURRENT_SCREEN); } #endif /* * Refresh the soft labels. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_refresh) (NCURSES_SP_DCL0) { T((T_CALLED("slk_refresh(%p)"), (void *) SP_PARM)); if (SP_PARM == 0 || SP_PARM->_slk == 0) returnCode(ERR); if (SP_PARM->_slk->hidden) returnCode(OK); slk_intern_refresh(SP_PARM); returnCode(wrefresh(SP_PARM->_slk->win)); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_refresh(void) { return NCURSES_SP_NAME(slk_refresh) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/lib_winch.c0000644000175100001440000000532011503257162017154 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1998 * ****************************************************************************/ /* ** lib_winch.c ** ** The routine winch(). ** */ #include MODULE_ID("$Id: lib_winch.c,v 1.8 2010/12/19 01:22:58 tom Exp $") NCURSES_EXPORT(chtype) winch(WINDOW *win) { T((T_CALLED("winch(%p)"), (void *) win)); if (win != 0) { returnChtype((chtype) CharOf(win->_line[win->_cury].text[win->_curx]) | AttrOf(win->_line[win->_cury].text[win->_curx])); } else { returnChtype(0); } } ncurses-6.0-20160213/ncurses/base/nc_panel.c0000644000175100001440000000536011170203006016765 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997 * ****************************************************************************/ #include MODULE_ID("$Id: nc_panel.c,v 1.5 2009/04/11 21:05:10 tom Exp $") NCURSES_EXPORT(struct panelhook *) NCURSES_SP_NAME(_nc_panelhook) (NCURSES_SP_DCL0) { return (SP_PARM ? &(SP_PARM->_panelHook) : (CURRENT_SCREEN ? &(CURRENT_SCREEN->_panelHook) : 0)); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(struct panelhook *) _nc_panelhook(void) { return NCURSES_SP_NAME(_nc_panelhook) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/safe_sprintf.c0000644000175100001440000001734412076641240017712 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997-on * ****************************************************************************/ #include #include MODULE_ID("$Id: safe_sprintf.c,v 1.27 2013/01/20 01:04:32 tom Exp $") #if USE_SAFE_SPRINTF typedef enum { Flags, Width, Prec, Type, Format } PRINTF; #define VA_INTGR(type) ival = va_arg(ap, type) #define VA_FLOAT(type) fval = va_arg(ap, type) #define VA_POINT(type) pval = (void *)va_arg(ap, type) /* * Scan a variable-argument list for printf to determine the number of * characters that would be emitted. */ static int _nc_printf_length(const char *fmt, va_list ap) { size_t length = BUFSIZ; char *buffer; char *format; int len = 0; size_t fmt_len; char fmt_arg[BUFSIZ]; if (fmt == 0 || *fmt == '\0') return 0; fmt_len = strlen(fmt) + 1; if ((format = typeMalloc(char, fmt_len)) == 0) return -1; if ((buffer = typeMalloc(char, length)) == 0) { free(format); return -1; } while (*fmt != '\0') { if (*fmt == '%') { static char dummy[] = ""; PRINTF state = Flags; char *pval = dummy; /* avoid const-cast */ double fval = 0.0; int done = FALSE; int ival = 0; int prec = -1; int type = 0; int used = 0; int width = -1; size_t f = 0; format[f++] = *fmt; while (*++fmt != '\0' && len >= 0 && !done) { format[f++] = *fmt; if (isdigit(UChar(*fmt))) { int num = *fmt - '0'; if (state == Flags && num != 0) state = Width; if (state == Width) { if (width < 0) width = 0; width = (width * 10) + num; } else if (state == Prec) { if (prec < 0) prec = 0; prec = (prec * 10) + num; } } else if (*fmt == '*') { VA_INTGR(int); if (state == Flags) state = Width; if (state == Width) { width = ival; } else if (state == Prec) { prec = ival; } _nc_SPRINTF(fmt_arg, _nc_SLIMIT(sizeof(fmt_arg)) "%d", ival); fmt_len += strlen(fmt_arg); if ((format = _nc_doalloc(format, fmt_len)) == 0) { free(buffer); return -1; } --f; _nc_STRCPY(&format[f], fmt_arg, fmt_len - f); f = strlen(format); } else if (isalpha(UChar(*fmt))) { done = TRUE; switch (*fmt) { case 'Z': /* FALLTHRU */ case 'h': /* FALLTHRU */ case 'l': /* FALLTHRU */ done = FALSE; type = *fmt; break; case 'i': /* FALLTHRU */ case 'd': /* FALLTHRU */ case 'u': /* FALLTHRU */ case 'x': /* FALLTHRU */ case 'X': /* FALLTHRU */ if (type == 'l') VA_INTGR(long); else if (type == 'Z') VA_INTGR(size_t); else VA_INTGR(int); used = 'i'; break; case 'f': /* FALLTHRU */ case 'e': /* FALLTHRU */ case 'E': /* FALLTHRU */ case 'g': /* FALLTHRU */ case 'G': /* FALLTHRU */ VA_FLOAT(double); used = 'f'; break; case 'c': VA_INTGR(int); used = 'i'; break; case 's': VA_POINT(char *); if (prec < 0) prec = strlen(pval); if (prec > (int) length) { length = length + prec; buffer = typeRealloc(char, length, buffer); if (buffer == 0) { free(format); return -1; } } used = 'p'; break; case 'p': VA_POINT(void *); used = 'p'; break; case 'n': VA_POINT(int *); used = 0; break; default: break; } } else if (*fmt == '.') { state = Prec; } else if (*fmt == '%') { done = TRUE; used = 'p'; } } format[f] = '\0'; switch (used) { case 'i': _nc_SPRINTF(buffer, _nc_SLIMIT(length) format, ival); break; case 'f': _nc_SPRINTF(buffer, _nc_SLIMIT(length) format, fval); break; default: _nc_SPRINTF(buffer, _nc_SLIMIT(length) format, pval); break; } len += (int) strlen(buffer); } else { fmt++; len++; } } free(buffer); free(format); return len; } #endif #define my_buffer _nc_globals.safeprint_buf #define my_length _nc_globals.safeprint_used /* * Wrapper for vsprintf that allocates a buffer big enough to hold the result. */ NCURSES_EXPORT(char *) NCURSES_SP_NAME(_nc_printf_string) (NCURSES_SP_DCLx const char *fmt, va_list ap) { char *result = 0; if (fmt != 0) { #if USE_SAFE_SPRINTF va_list ap2; int len; begin_va_copy(ap2, ap); len = _nc_printf_length(fmt, ap2); end_va_copy(ap2); if ((int) my_length < len + 1) { my_length = 2 * (len + 1); my_buffer = typeRealloc(char, my_length, my_buffer); } if (my_buffer != 0) { *my_buffer = '\0'; if (len >= 0) { vsprintf(my_buffer, fmt, ap); } result = my_buffer; } #else #define MyCols _nc_globals.safeprint_cols #define MyRows _nc_globals.safeprint_rows if (screen_lines(SP_PARM) > MyRows || screen_columns(SP_PARM) > MyCols) { if (screen_lines(SP_PARM) > MyRows) MyRows = screen_lines(SP_PARM); if (screen_columns(SP_PARM) > MyCols) MyCols = screen_columns(SP_PARM); my_length = (size_t) (MyRows * (MyCols + 1)) + 1; my_buffer = typeRealloc(char, my_length, my_buffer); } if (my_buffer != 0) { # if HAVE_VSNPRINTF vsnprintf(my_buffer, my_length, fmt, ap); /* GNU extension */ # else vsprintf(my_buffer, fmt, ap); /* ANSI */ # endif result = my_buffer; } #endif } else if (my_buffer != 0) { /* see _nc_freeall() */ free(my_buffer); my_buffer = 0; my_length = 0; } return result; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(char *) _nc_printf_string(const char *fmt, va_list ap) { return NCURSES_SP_NAME(_nc_printf_string) (CURRENT_SCREEN, fmt, ap); } #endif ncurses-6.0-20160213/ncurses/base/lib_slktouch.c0000644000175100001440000000567211270675705017722 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer 1997,2009 * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * lib_slktouch.c * Soft key routines. * Force the code to believe that the soft keys have been changed. */ #include MODULE_ID("$Id: lib_slktouch.c,v 1.8 2009/10/24 22:12:21 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_touch) (NCURSES_SP_DCL0) { T((T_CALLED("slk_touch(%p)"), (void *) SP_PARM)); if (SP_PARM == 0 || SP_PARM->_slk == 0) returnCode(ERR); SP_PARM->_slk->dirty = TRUE; returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_touch(void) { return NCURSES_SP_NAME(slk_touch) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/lib_clrbot.c0000644000175100001440000000632411270700257017335 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2006,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_clrbot.c ** ** The routine wclrtobot(). ** */ #include MODULE_ID("$Id: lib_clrbot.c,v 1.21 2009/10/24 22:33:19 tom Exp $") NCURSES_EXPORT(int) wclrtobot(WINDOW *win) { int code = ERR; T((T_CALLED("wclrtobot(%p)"), (void *) win)); if (win) { NCURSES_SIZE_T y; NCURSES_SIZE_T startx = win->_curx; NCURSES_CH_T blank = win->_nc_bkgd; T(("clearing from y = %ld to y = %ld with maxx = %ld", (long) win->_cury, (long) win->_maxy, (long) win->_maxx)); for (y = win->_cury; y <= win->_maxy; y++) { struct ldat *line = &(win->_line[y]); NCURSES_CH_T *ptr = &(line->text[startx]); NCURSES_CH_T *end = &(line->text[win->_maxx]); CHANGED_TO_EOL(line, startx, win->_maxx); while (ptr <= end) *ptr++ = blank; startx = 0; } _nc_synchook(win); code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_insnstr.c0000644000175100001440000000606611270674763017567 0ustar tomusers/**************************************************************************** * Copyright (c) 2004,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ /* ** lib_insnstr.c ** ** The routine winsnstr(). ** */ #include #include MODULE_ID("$Id: lib_insnstr.c,v 1.3 2009/10/24 22:04:35 tom Exp $") NCURSES_EXPORT(int) winsnstr(WINDOW *win, const char *s, int n) { int code = ERR; NCURSES_SIZE_T oy; NCURSES_SIZE_T ox; const unsigned char *str = (const unsigned char *) s; const unsigned char *cp; T((T_CALLED("winsnstr(%p,%s,%d)"), (void *) win, _nc_visbufn(s, n), n)); if (win != 0 && str != 0) { SCREEN *sp = _nc_screen_of(win); oy = win->_cury; ox = win->_curx; for (cp = str; *cp && (n <= 0 || (cp - str) < n); cp++) { _nc_insert_ch(sp, win, (chtype) UChar(*cp)); } win->_curx = ox; win->_cury = oy; _nc_synchook(win); code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/base/version.c0000644000175100001440000000502310165646452016712 0ustar tomusers/**************************************************************************** * Copyright (c) 1999-2004,2005 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1999 * ****************************************************************************/ #include MODULE_ID("$Id: version.c,v 1.6 2005/01/02 01:23:54 tom Exp $") NCURSES_EXPORT(const char *) curses_version(void) { T((T_CALLED("curses_version()"))); returnCPtr("ncurses " NCURSES_VERSION_STRING); } ncurses-6.0-20160213/ncurses/base/lib_clearok.c0000644000175100001440000000531711270700415017465 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_clearok.c ** ** The routine clearok. ** */ #include MODULE_ID("$Id: lib_clearok.c,v 1.5 2009/10/24 22:34:53 tom Exp $") NCURSES_EXPORT(int) clearok(WINDOW *win, bool flag) { T((T_CALLED("clearok(%p,%d)"), (void *) win, flag)); if (win) { win->_clear = flag; returnCode(OK); } else returnCode(ERR); } ncurses-6.0-20160213/ncurses/base/lib_nl.c0000644000175100001440000000672511270675103016467 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * nl.c * * Routines: * nl() * nonl() * */ #include MODULE_ID("$Id: lib_nl.c,v 1.12 2009/10/24 22:05:55 tom Exp $") #ifdef __EMX__ #include #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(nl) (NCURSES_SP_DCL0) { T((T_CALLED("nl(%p)"), (void *) SP_PARM)); if (0 == SP_PARM) returnCode(ERR); SP_PARM->_nl = TRUE; #ifdef __EMX__ _nc_flush(); _fsetmode(NC_OUTPUT(SP_PARM), "t"); #endif returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) nl(void) { return NCURSES_SP_NAME(nl) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(nonl) (NCURSES_SP_DCL0) { T((T_CALLED("nonl(%p)"), (void *) SP_PARM)); if (0 == SP_PARM) returnCode(ERR); SP_PARM->_nl = FALSE; #ifdef __EMX__ _nc_flush(); _fsetmode(NC_OUTPUT(SP_PARM), "b"); #endif returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) nonl(void) { return NCURSES_SP_NAME(nonl) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/vsscanf.c0000644000175100001440000002074011721265662016672 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2004,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * State-machine fallback written by Thomas E. Dickey 2002 * ****************************************************************************/ /* * This function is needed to support vwscanw */ #include #if !HAVE_VSSCANF MODULE_ID("$Id: vsscanf.c,v 1.20 2012/02/22 22:26:58 tom Exp $") #if !(HAVE_VFSCANF || HAVE__DOSCAN) #include #define L_SQUARE '[' #define R_SQUARE ']' typedef enum { cUnknown ,cError /* anything that isn't ANSI */ ,cAssigned ,cChar ,cInt ,cFloat ,cDouble ,cPointer ,cLong ,cShort ,cRange ,cString } ChunkType; typedef enum { oUnknown ,oShort ,oLong } OtherType; typedef enum { sUnknown ,sPercent /* last was '%' beginning a format */ ,sNormal /* ...somewhere in the middle */ ,sLeft /* last was left square bracket beginning a range */ ,sRange /* ...somewhere in the middle */ ,sFinal /* last finished a format */ } ScanState; static ChunkType final_ch(int ch, OtherType other) { ChunkType result = cUnknown; switch (ch) { case 'c': if (other == oUnknown) result = cChar; else result = cError; break; case 'd': case 'i': case 'X': case 'x': switch (other) { case oUnknown: result = cInt; break; case oShort: result = cShort; break; case oLong: result = cLong; break; } break; case 'E': case 'e': case 'f': case 'g': switch (other) { case oUnknown: result = cFloat; break; case oShort: result = cError; break; case oLong: result = cDouble; break; } break; case 'n': if (other == oUnknown) result = cAssigned; else result = cError; break; case 'p': if (other == oUnknown) result = cPointer; else result = cError; break; case 's': if (other == oUnknown) result = cString; else result = cError; break; } return result; } static OtherType other_ch(int ch) { OtherType result = oUnknown; switch (ch) { case 'h': result = oShort; break; case 'l': result = oLong; break; } return result; } #endif /*VARARGS2*/ NCURSES_EXPORT(int) vsscanf(const char *str, const char *format, va_list ap) { #if HAVE_VFSCANF || HAVE__DOSCAN /* * This code should work on anything descended from AT&T SVr1. */ FILE strbuf; strbuf._flag = _IOREAD; strbuf._ptr = strbuf._base = (unsigned char *) str; strbuf._cnt = strlen(str); strbuf._file = _NFILE; #if HAVE_VFSCANF return (vfscanf(&strbuf, format, ap)); #else return (_doscan(&strbuf, format, ap)); #endif #else static int can_convert = -1; int assigned = 0; int consumed = 0; T((T_CALLED("vsscanf(%s,%s,...)"), _nc_visbuf2(1, str), _nc_visbuf2(2, format))); /* * This relies on having a working "%n" format conversion. Check if it * works. Only very old C libraries do not support it. * * FIXME: move this check into the configure script. */ if (can_convert < 0) { int check1; int check2; if (sscanf("123", "%d%n", &check1, &check2) > 0 && check1 == 123 && check2 == 3) { can_convert = 1; } else { can_convert = 0; } } if (can_convert) { size_t len_fmt = strlen(format) + 32; char *my_fmt = malloc(len_fmt); ChunkType chunk, ctest; OtherType other, otest; ScanState state; unsigned n; int eaten; void *pointer; if (my_fmt != 0) { /* * Split the original format into chunks, adding a "%n" to the end * of each (except of course if it used %n), and use that * information to decide where to start scanning the next chunk. * * FIXME: does %n count bytes or characters? If the latter, this * will require further work for multibyte strings. */ while (*format != '\0') { /* find a chunk */ state = sUnknown; chunk = cUnknown; other = oUnknown; pointer = 0; for (n = 0; format[n] != 0 && state != sFinal; ++n) { my_fmt[n] = format[n]; switch (state) { case sUnknown: if (format[n] == '%') state = sPercent; break; case sPercent: if (format[n] == '%') { state = sUnknown; } else if (format[n] == L_SQUARE) { state = sLeft; } else { state = sNormal; --n; } break; case sLeft: state = sRange; if (format[n] == '^') { ++n; my_fmt[n] = format[n]; } break; case sRange: if (format[n] == R_SQUARE) { state = sFinal; chunk = cRange; } break; case sNormal: if (format[n] == '*') { state = sUnknown; } else { if ((ctest = final_ch(format[n], other)) != cUnknown) { state = sFinal; chunk = ctest; } else if ((otest = other_ch(format[n])) != oUnknown) { other = otest; } else if (isalpha(UChar(format[n]))) { state = sFinal; chunk = cError; } } break; case sFinal: break; } } my_fmt[n] = '\0'; format += n; if (chunk == cUnknown || chunk == cError) { if (assigned == 0) assigned = EOF; break; } /* add %n, if the format was not that */ if (chunk != cAssigned) { _nc_STRCAT(my_fmt, "%n", len_fmt); } switch (chunk) { case cAssigned: _nc_STRCAT(my_fmt, "%n", len_fmt); pointer = &eaten; break; case cInt: pointer = va_arg(ap, int *); break; case cShort: pointer = va_arg(ap, short *); break; case cFloat: pointer = va_arg(ap, float *); break; case cDouble: pointer = va_arg(ap, double *); break; case cLong: pointer = va_arg(ap, long *); break; case cPointer: pointer = va_arg(ap, void *); break; case cChar: case cRange: case cString: pointer = va_arg(ap, char *); break; case cError: case cUnknown: break; } /* do the conversion */ T(("...converting chunk #%d type %d(%s,%s)", assigned + 1, chunk, _nc_visbuf2(1, str + consumed), _nc_visbuf2(2, my_fmt))); if (sscanf(str + consumed, my_fmt, pointer, &eaten) > 0) consumed += eaten; else break; ++assigned; } free(my_fmt); } } returnCode(assigned); #endif } #else extern NCURSES_EXPORT(void) _nc_vsscanf(void); /* quiet's gcc warning */ NCURSES_EXPORT(void) _nc_vsscanf(void) { } /* nonempty for strict ANSI compilers */ #endif /* !HAVE_VSSCANF */ ncurses-6.0-20160213/ncurses/base/sigaction.c0000644000175100001440000000705607764476454017233 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2002,2003 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-2003 * ****************************************************************************/ /* This file provides sigaction() emulation using sigvec() */ /* Use only if this is non POSIX system */ MODULE_ID("$Id: sigaction.c,v 1.14 2003/12/07 01:06:52 tom Exp $") static int _nc_sigaction(int sig, sigaction_t * sigact, sigaction_t * osigact) { return sigvec(sig, sigact, osigact); } static int _nc_sigemptyset(sigset_t * mask) { *mask = 0; return 0; } static int _nc_sigprocmask(int mode, sigset_t * mask, sigset_t * omask) { sigset_t current = sigsetmask(0); if (omask) *omask = current; if (mode == SIG_BLOCK) current |= *mask; else if (mode == SIG_UNBLOCK) current &= ~*mask; else if (mode == SIG_SETMASK) current = *mask; sigsetmask(current); return 0; } static int _nc_sigaddset(sigset_t * mask, int sig) { *mask |= sigmask(sig); return 0; } /* not used in lib_tstp.c */ #if 0 static int _nc_sigsuspend(sigset_t * mask) { return sigpause(*mask); } static int _nc_sigdelset(sigset_t * mask, int sig) { *mask &= ~sigmask(sig); return 0; } static int _nc_sigismember(sigset_t * mask, int sig) { return (*mask & sigmask(sig)) != 0; } #endif ncurses-6.0-20160213/ncurses/base/lib_ungetch.c0000644000175100001440000000701112007257055017501 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_ungetch.c ** ** The routine ungetch(). ** */ #include MODULE_ID("$Id: lib_ungetch.c,v 1.16 2012/08/04 17:38:53 tom Exp $") #include #ifdef TRACE NCURSES_EXPORT(void) _nc_fifo_dump(SCREEN *sp) { int i; T(("head = %d, tail = %d, peek = %d", head, tail, peek)); for (i = 0; i < 10; i++) T(("char %d = %s", i, _nc_tracechar(sp, sp->_fifo[i]))); } #endif /* TRACE */ NCURSES_EXPORT(int) safe_ungetch(SCREEN *sp, int ch) { int rc = ERR; T((T_CALLED("ungetch(%p,%s)"), (void *) sp, _nc_tracechar(sp, ch))); if (sp != 0 && tail >= 0) { if (head < 0) { head = 0; t_inc(); peek = tail; /* no raw keys */ } else { h_dec(); } sp->_fifo[head] = ch; T(("ungetch %s ok", _nc_tracechar(sp, ch))); #ifdef TRACE if (USE_TRACEF(TRACE_IEVENT)) { _nc_fifo_dump(sp); _nc_unlock_global(tracef); } #endif rc = OK; } returnCode(rc); } NCURSES_EXPORT(int) ungetch(int ch) { return safe_ungetch(CURRENT_SCREEN, ch); } ncurses-6.0-20160213/ncurses/base/lib_dft_fgbg.c0000644000175100001440000001030312306677173017615 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1998-on * * Juergen Pfeifer 2009 * ****************************************************************************/ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_dft_fgbg.c,v 1.27 2014/03/08 20:32:59 tom Exp $") /* * Modify the behavior of color-pair 0 so that the library doesn't assume that * it is white on black. This is an extension to XSI curses. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(use_default_colors) (NCURSES_SP_DCL0) { T((T_CALLED("use_default_colors(%p)"), (void *) SP_PARM)); returnCode(NCURSES_SP_NAME(assume_default_colors) (NCURSES_SP_ARGx -1, -1)); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) use_default_colors(void) { return NCURSES_SP_NAME(use_default_colors) (CURRENT_SCREEN); } #endif /* * Modify the behavior of color-pair 0 so that the library assumes that it * is something specific, possibly not white on black. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(assume_default_colors) (NCURSES_SP_DCLx int fg, int bg) { int code = ERR; T((T_CALLED("assume_default_colors(%p,%d,%d)"), (void *) SP_PARM, fg, bg)); #ifdef USE_TERM_DRIVER if (sp != 0) code = CallDriver_2(sp, td_defaultcolors, fg, bg); #else if ((orig_pair || orig_colors) && !initialize_pair) { SP_PARM->_default_color = isDefaultColor(fg) || isDefaultColor(bg); SP_PARM->_has_sgr_39_49 = (tigetflag("AX") == TRUE); SP_PARM->_default_fg = isDefaultColor(fg) ? COLOR_DEFAULT : (fg & C_MASK); SP_PARM->_default_bg = isDefaultColor(bg) ? COLOR_DEFAULT : (bg & C_MASK); if (SP_PARM->_color_pairs != 0) { bool save = SP_PARM->_default_color; SP_PARM->_assumed_color = TRUE; SP_PARM->_default_color = TRUE; init_pair(0, (short) fg, (short) bg); SP_PARM->_default_color = save; } code = OK; } #endif returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) assume_default_colors(int fg, int bg) { return NCURSES_SP_NAME(assume_default_colors) (CURRENT_SCREEN, fg, bg); } #endif ncurses-6.0-20160213/ncurses/base/lib_screen.c0000644000175100001440000005545012635401363017335 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996 on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ #include #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_screen.c,v 1.79 2015/12/20 01:22:59 tom Exp $") #define MAX_SIZE 0x3fff /* 16k is big enough for a window or pad */ #define MARKER '\\' #define APPEND '+' #define GUTTER '|' #define L_CURL '{' #define R_CURL '}' /* * Use 0x8888 as the magic number for new-format files, since it cannot be * mistaken for the _cury/_curx pair of 16-bit numbers which start the old * format. It happens to be unused in the file 5.22 database (2015/03/07). */ static const char my_magic[] = {'\210', '\210', '\210', '\210'}; #if NCURSES_EXT_PUTWIN typedef enum { pINT /* int */ ,pSHORT /* short */ ,pBOOL /* bool */ ,pATTR /* attr_t */ ,pCHAR /* chtype */ ,pSIZE /* NCURSES_SIZE_T */ #if NCURSES_WIDECHAR ,pCCHAR /* cchar_t */ #endif } PARAM_TYPE; typedef struct { const char name[11]; attr_t attr; } SCR_ATTRS; typedef struct { const char name[17]; PARAM_TYPE type; size_t size; size_t offset; } SCR_PARAMS; #define DATA(name) { { #name }, A_##name } static const SCR_ATTRS scr_attrs[] = { DATA(NORMAL), DATA(STANDOUT), DATA(UNDERLINE), DATA(REVERSE), DATA(BLINK), DATA(DIM), DATA(BOLD), DATA(ALTCHARSET), DATA(INVIS), DATA(PROTECT), DATA(HORIZONTAL), DATA(LEFT), DATA(LOW), DATA(RIGHT), DATA(TOP), DATA(VERTICAL), #ifdef A_ITALIC DATA(ITALIC), #endif }; #undef DATA #define sizeof2(type,name) sizeof(((type *)0)->name) #define DATA(name, type) { { #name }, type, sizeof2(WINDOW, name), offsetof(WINDOW, name) } static const SCR_PARAMS scr_params[] = { DATA(_cury, pSIZE), DATA(_curx, pSIZE), DATA(_maxy, pSIZE), DATA(_maxx, pSIZE), DATA(_begy, pSIZE), DATA(_begx, pSIZE), DATA(_flags, pSHORT), DATA(_attrs, pATTR), DATA(_bkgd, pCHAR), DATA(_notimeout, pBOOL), DATA(_clear, pBOOL), DATA(_leaveok, pBOOL), DATA(_scroll, pBOOL), DATA(_idlok, pBOOL), DATA(_idcok, pBOOL), DATA(_immed, pBOOL), DATA(_sync, pBOOL), DATA(_use_keypad, pBOOL), DATA(_delay, pINT), DATA(_regtop, pSIZE), DATA(_regbottom, pSIZE), DATA(_pad._pad_y, pSIZE), DATA(_pad._pad_x, pSIZE), DATA(_pad._pad_top, pSIZE), DATA(_pad._pad_left, pSIZE), DATA(_pad._pad_bottom, pSIZE), DATA(_pad._pad_right, pSIZE), DATA(_yoffset, pSIZE), #if NCURSES_WIDECHAR DATA(_bkgrnd, pCCHAR), #if NCURSES_EXT_COLORS DATA(_color, pINT), #endif #endif }; #undef DATA static const NCURSES_CH_T blank = NewChar(BLANK_TEXT); /* * Allocate and read a line of text. Caller must free it. */ static char * read_txt(FILE *fp) { size_t limit = 1024; size_t used = 0; char *result = malloc(limit); char *buffer; if (result != 0) { int ch = 0; clearerr(fp); result[used] = '\0'; do { if (used + 2 >= limit) { limit += 1024; buffer = realloc(result, limit); if (buffer == 0) { free(result); result = 0; break; } result = buffer; } ch = fgetc(fp); if (ch == EOF) break; result[used++] = (char) ch; result[used] = '\0'; } while (ch != '\n'); if (ch == '\n') { result[--used] = '\0'; T(("READ:%s", result)); } else if (used == 0) { free(result); result = 0; } } return result; } static char * decode_attr(char *source, attr_t *target, int *color) { bool found = FALSE; T(("decode_attr '%s'", source)); while (*source) { if (source[0] == MARKER && source[1] == L_CURL) { source += 2; found = TRUE; } else if (source[0] == R_CURL) { source++; found = FALSE; } else if (found) { size_t n; char *next = source; if (source[0] == GUTTER) { ++next; } else if (*next == 'C') { int value = 0; unsigned pair; next++; while (isdigit(UChar(*next))) { value = value * 10 + (*next++ - '0'); } *target &= ~A_COLOR; pair = (unsigned) ((value > 256) ? COLOR_PAIR(255) : COLOR_PAIR(value)); *target |= pair; *color = value; } else { while (isalnum(UChar(*next))) { ++next; } for (n = 0; n < SIZEOF(scr_attrs); ++n) { if ((size_t) (next - source) == strlen(scr_attrs[n].name)) { if (scr_attrs[n].attr) { *target |= scr_attrs[n].attr; } else { *target = A_NORMAL; } break; } } } source = next; } else { break; } } return source; } static char * decode_char(char *source, int *target) { int limit = 0; int base = 16; const char digits[] = "0123456789abcdef"; T(("decode_char '%s'", source)); *target = ' '; switch (*source) { case MARKER: switch (*++source) { case APPEND: break; case MARKER: *target = MARKER; ++source; break; case 's': *target = ' '; ++source; break; case '0': case '1': case '2': case '3': base = 8; limit = 3; break; case 'u': limit = 4; ++source; break; case 'U': limit = 8; ++source; break; } if (limit) { *target = 0; while (limit-- > 0) { char *find = strchr(digits, *source++); int ch = (find != 0) ? (int) (find - digits) : -1; *target *= base; if (ch >= 0 && ch < base) { *target += ch; } } } break; default: *target = *source++; break; } return source; } static char * decode_chtype(char *source, chtype fillin, chtype *target) { attr_t attr = ChAttrOf(fillin); int color = PAIR_NUMBER((int) attr); int value; T(("decode_chtype '%s'", source)); source = decode_attr(source, &attr, &color); source = decode_char(source, &value); *target = (ChCharOf(value) | attr | (chtype) COLOR_PAIR(color)); /* FIXME - ignore combining characters */ return source; } #if NCURSES_WIDECHAR static char * decode_cchar(char *source, cchar_t *fillin, cchar_t *target) { int color; attr_t attr = fillin->attr; wchar_t chars[CCHARW_MAX]; int append = 0; int value = 0; T(("decode_cchar '%s'", source)); *target = blank; #if NCURSES_EXT_COLORS color = fillin->ext_color; #else color = (int) PAIR_NUMBER(attr); #endif source = decode_attr(source, &attr, &color); memset(chars, 0, sizeof(chars)); source = decode_char(source, &value); chars[0] = (wchar_t) value; /* handle combining characters */ while (source[0] == MARKER && source[1] == APPEND) { source += 2; source = decode_char(source, &value); if (++append < CCHARW_MAX) { chars[append] = (wchar_t) value; } } setcchar(target, chars, attr, (short) color, NULL); return source; } #endif static int read_win(WINDOW *win, FILE *fp) { int code = ERR; char *txt; char *name; char *value; size_t n; int color; #if NCURSES_WIDECHAR NCURSES_CH_T prior; #endif chtype prior2; memset(win, 0, sizeof(WINDOW)); for (;;) { txt = read_txt(fp); if (txt == 0) break; if (!strcmp(txt, "rows:")) { free(txt); code = OK; break; } if ((value = strchr(txt, '=')) == 0) { free(txt); continue; } *value++ = '\0'; name = !strcmp(txt, "flag") ? value : txt; for (n = 0; n < SIZEOF(scr_params); ++n) { if (!strcmp(name, scr_params[n].name)) { void *data = (void *) ((char *) win + scr_params[n].offset); switch (scr_params[n].type) { case pATTR: (void) decode_attr(value, data, &color); break; case pBOOL: *(bool *) data = TRUE; break; case pCHAR: prior2 = ' '; decode_chtype(value, prior2, data); break; case pINT: *(int *) data = atoi(value); break; case pSHORT: *(short *) data = (short) atoi(value); break; case pSIZE: *(NCURSES_SIZE_T *) data = (NCURSES_SIZE_T) atoi(value); break; #if NCURSES_WIDECHAR case pCCHAR: prior = blank; decode_cchar(value, &prior, data); break; #endif } break; } } free(txt); } return code; } static int read_row(char *source, NCURSES_CH_T * prior, NCURSES_CH_T * target, int length) { while (*source != '\0' && length > 0) { #if NCURSES_WIDECHAR int n, len; source = decode_cchar(source, prior, target); len = wcwidth(target->chars[0]); if (len > 1) { SetWidecExt(CHDEREF(target), 0); for (n = 1; n < len; ++n) { target[n] = target[0]; SetWidecExt(CHDEREF(target), n); } target += (len - 1); length -= (len - 1); } #else source = decode_chtype(source, *prior, target); #endif *prior = *target; ++target; --length; } while (length-- > 0) { *target++ = blank; } /* FIXME - see what error conditions should apply if I need to return ERR */ return 0; } #endif /* NCURSES_EXT_PUTWIN */ /* * Originally, getwin/putwin used fread/fwrite, because they used binary data. * The new format uses printable ASCII, which does not have as predictable * sizes. Consequently, we use buffered I/O, e.g., fgetc/fprintf, which need * special handling if we want to read screen dumps from an older library. */ static int read_block(void *target, size_t length, FILE *fp) { int result = 0; char *buffer = target; clearerr(fp); while (length-- != 0) { int ch = fgetc(fp); if (ch == EOF) { result = -1; break; } *buffer++ = (char) ch; } return result; } NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(getwin) (NCURSES_SP_DCLx FILE *filep) { WINDOW tmp, *nwin; int n; bool old_format = FALSE; T((T_CALLED("getwin(%p)"), (void *) filep)); if (filep == 0) { returnWin(0); } /* * Read the first 4 bytes to determine first if this is an old-format * screen-dump, or new-format. */ if (read_block(&tmp, 4, filep) < 0) { returnWin(0); } /* * If this is a new-format file, and we do not support it, give up. */ if (!memcmp(&tmp, my_magic, 4)) { #if NCURSES_EXT_PUTWIN if (read_win(&tmp, filep) < 0) #endif returnWin(0); } else if (read_block(((char *) &tmp) + 4, sizeof(WINDOW) - 4, filep) < 0) { returnWin(0); } else { old_format = TRUE; } /* * Check the window-size: */ if (tmp._maxy == 0 || tmp._maxy > MAX_SIZE || tmp._maxx == 0 || tmp._maxx > MAX_SIZE) { returnWin(0); } if (tmp._flags & _ISPAD) { nwin = NCURSES_SP_NAME(newpad) (NCURSES_SP_ARGx tmp._maxy + 1, tmp._maxx + 1); } else { nwin = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx tmp._maxy + 1, tmp._maxx + 1, 0, 0); } /* * We deliberately do not restore the _parx, _pary, or _parent * fields, because the window hierarchy within which they * made sense is probably gone. */ if (nwin != 0) { size_t linesize = sizeof(NCURSES_CH_T) * (size_t) (tmp._maxx + 1); nwin->_curx = tmp._curx; nwin->_cury = tmp._cury; nwin->_maxy = tmp._maxy; nwin->_maxx = tmp._maxx; nwin->_begy = tmp._begy; nwin->_begx = tmp._begx; nwin->_yoffset = tmp._yoffset; nwin->_flags = tmp._flags & ~(_SUBWIN); WINDOW_ATTRS(nwin) = WINDOW_ATTRS(&tmp); nwin->_nc_bkgd = tmp._nc_bkgd; nwin->_notimeout = tmp._notimeout; nwin->_clear = tmp._clear; nwin->_leaveok = tmp._leaveok; nwin->_idlok = tmp._idlok; nwin->_idcok = tmp._idcok; nwin->_immed = tmp._immed; nwin->_scroll = tmp._scroll; nwin->_sync = tmp._sync; nwin->_use_keypad = tmp._use_keypad; nwin->_delay = tmp._delay; nwin->_regtop = tmp._regtop; nwin->_regbottom = tmp._regbottom; if (tmp._flags & _ISPAD) nwin->_pad = tmp._pad; if (old_format) { T(("reading old-format screen dump")); for (n = 0; n <= nwin->_maxy; n++) { if (read_block(nwin->_line[n].text, linesize, filep) < 0) { delwin(nwin); returnWin(0); } } } #if NCURSES_EXT_PUTWIN else { char *txt = 0; bool success = TRUE; NCURSES_CH_T prior = blank; T(("reading new-format screen dump")); for (n = 0; n <= nwin->_maxy; n++) { long row; char *next; if ((txt = read_txt(filep)) == 0) { T(("...failed to read string for row %d", n + 1)); success = FALSE; break; } row = strtol(txt, &next, 10); if (row != (n + 1) || *next != ':') { T(("...failed to read row-number %d", n + 1)); success = FALSE; break; } if (read_row(++next, &prior, nwin->_line[n].text, tmp._maxx + 1) < 0) { T(("...failed to read cells for row %d", n + 1)); success = FALSE; break; } free(txt); txt = 0; } if (!success) { free(txt); delwin(nwin); returnWin(0); } } #endif touchwin(nwin); } returnWin(nwin); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(WINDOW *) getwin(FILE *filep) { return NCURSES_SP_NAME(getwin) (CURRENT_SCREEN, filep); } #endif #if NCURSES_EXT_PUTWIN static void encode_attr(char *target, attr_t source, attr_t prior) { source &= ~A_CHARTEXT; prior &= ~A_CHARTEXT; *target = '\0'; if (source != prior) { size_t n; bool first = TRUE; *target++ = MARKER; *target++ = L_CURL; for (n = 0; n < SIZEOF(scr_attrs); ++n) { if ((source & scr_attrs[n].attr) != 0 || ((source & ALL_BUT_COLOR) == 0 && (scr_attrs[n].attr == A_NORMAL))) { if (first) { first = FALSE; } else { *target++ = '|'; } strcpy(target, scr_attrs[n].name); target += strlen(target); } } if ((source & A_COLOR) != (prior & A_COLOR)) { if (!first) *target++ = '|'; sprintf(target, "C%d", PAIR_NUMBER((int) source)); target += strlen(target); } *target++ = R_CURL; *target = '\0'; } } static void encode_cell(char *target, CARG_CH_T source, CARG_CH_T previous) { #if NCURSES_WIDECHAR size_t n; *target = '\0'; if (previous->attr != source->attr) { encode_attr(target, source->attr, previous->attr); } target += strlen(target); #if NCURSES_EXT_COLORS if (previous->ext_color != source->ext_color) { sprintf(target, "%c%cC%d%c", MARKER, L_CURL, source->ext_color, R_CURL); } #endif for (n = 0; n < SIZEOF(source->chars); ++n) { unsigned uch = (unsigned) source->chars[n]; if (uch == 0) continue; if (n) { *target++ = MARKER; *target++ = APPEND; } *target++ = MARKER; if (uch > 0xffff) { sprintf(target, "U%08x", uch); } else if (uch > 0xff) { sprintf(target, "u%04x", uch); } else if (uch < 32 || uch >= 127) { sprintf(target, "%03o", uch & 0xff); } else { switch (uch) { case ' ': strcpy(target, "s"); break; case MARKER: *target++ = MARKER; *target = '\0'; break; default: sprintf(--target, "%c", uch); break; } } target += strlen(target); } #else chtype ch = CharOfD(source); *target = '\0'; if (AttrOfD(previous) != AttrOfD(source)) { encode_attr(target, AttrOfD(source), AttrOfD(previous)); } target += strlen(target); *target++ = MARKER; if (ch < 32 || ch >= 127) { sprintf(target, "%03o", UChar(ch)); } else { switch (ch) { case ' ': strcpy(target, "s"); break; case MARKER: *target++ = MARKER; *target = '\0'; break; default: sprintf(--target, "%c", UChar(ch)); break; } } #endif } #endif NCURSES_EXPORT(int) putwin(WINDOW *win, FILE *filep) { int code = ERR; int y; T((T_CALLED("putwin(%p,%p)"), (void *) win, (void *) filep)); #if NCURSES_EXT_PUTWIN if (win != 0) { const char *version = curses_version(); char buffer[1024]; NCURSES_CH_T last_cell; memset(&last_cell, 0, sizeof(last_cell)); clearerr(filep); /* * Our magic number is technically nonprinting, but aside from that, * all of the file is printable ASCII. */ #define PUTS(s) if (fputs(s, filep) == EOF || ferror(filep)) returnCode(code) PUTS(my_magic); PUTS(version); PUTS("\n"); for (y = 0; y < (int) SIZEOF(scr_params); ++y) { const char *name = scr_params[y].name; const char *data = (char *) win + scr_params[y].offset; const void *dp = (const void *) data; *buffer = '\0'; if (!strncmp(name, "_pad.", 5) && !(win->_flags & _ISPAD)) { continue; } switch (scr_params[y].type) { case pATTR: encode_attr(buffer, (*(const attr_t *) dp) & ~A_CHARTEXT, A_NORMAL); break; case pBOOL: if (!(*(const bool *) data)) { continue; } strcpy(buffer, name); name = "flag"; break; case pCHAR: encode_attr(buffer, *(const attr_t *) dp, A_NORMAL); break; case pINT: if (!(*(const int *) dp)) continue; sprintf(buffer, "%d", *(const int *) dp); break; case pSHORT: if (!(*(const short *) dp)) continue; sprintf(buffer, "%d", *(const short *) dp); break; case pSIZE: if (!(*(const NCURSES_SIZE_T *) dp)) continue; sprintf(buffer, "%d", *(const NCURSES_SIZE_T *) dp); break; #if NCURSES_WIDECHAR case pCCHAR: encode_cell(buffer, (CARG_CH_T) dp, CHREF(last_cell)); break; #endif } /* * Only write non-default data. */ if (*buffer != '\0') { if (fprintf(filep, "%s=%s\n", name, buffer) <= 0 || ferror(filep)) returnCode(code); } } /* Write row-data */ fprintf(filep, "rows:\n"); for (y = 0; y <= win->_maxy; y++) { NCURSES_CH_T *data = win->_line[y].text; int x; if (fprintf(filep, "%d:", y + 1) <= 0 || ferror(filep)) returnCode(code); for (x = 0; x <= win->_maxx; x++) { #if NCURSES_WIDECHAR int len = wcwidth(data[x].chars[0]); encode_cell(buffer, CHREF(data[x]), CHREF(last_cell)); last_cell = data[x]; PUTS(buffer); if (len > 1) x += (len - 1); #else encode_cell(buffer, CHREF(data[x]), CHREF(last_cell)); last_cell = data[x]; PUTS(buffer); #endif } PUTS("\n"); } } #else /* * This is the original putwin(): * A straight binary dump is simple, but its format can depend on whether * ncurses is compiled with wide-character support, and also may depend * on the version of ncurses, e.g., if the WINDOW structure is extended. */ if (win != 0) { size_t len = (size_t) (win->_maxx + 1); clearerr(filep); if (fwrite(win, sizeof(WINDOW), (size_t) 1, filep) != 1 || ferror(filep)) returnCode(code); for (y = 0; y <= win->_maxy; y++) { if (fwrite(win->_line[y].text, sizeof(NCURSES_CH_T), len, filep) != len || ferror(filep)) { returnCode(code); } } code = OK; } #endif returnCode(code); } NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_restore) (NCURSES_SP_DCLx const char *file) { FILE *fp = 0; int code = ERR; T((T_CALLED("scr_restore(%p,%s)"), (void *) SP_PARM, _nc_visbuf(file))); if (_nc_access(file, R_OK) >= 0 && (fp = fopen(file, "rb")) != 0) { delwin(NewScreen(SP_PARM)); NewScreen(SP_PARM) = getwin(fp); #if !USE_REENTRANT newscr = NewScreen(SP_PARM); #endif (void) fclose(fp); if (NewScreen(SP_PARM) != 0) { code = OK; } } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) scr_restore(const char *file) { return NCURSES_SP_NAME(scr_restore) (CURRENT_SCREEN, file); } #endif NCURSES_EXPORT(int) scr_dump(const char *file) { int result; FILE *fp = 0; T((T_CALLED("scr_dump(%s)"), _nc_visbuf(file))); if (_nc_access(file, W_OK) < 0 || (fp = fopen(file, "wb")) == 0) { result = ERR; } else { (void) putwin(newscr, fp); (void) fclose(fp); result = OK; } returnCode(result); } NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_init) (NCURSES_SP_DCLx const char *file) { FILE *fp = 0; int code = ERR; T((T_CALLED("scr_init(%p,%s)"), (void *) SP_PARM, _nc_visbuf(file))); if (SP_PARM != 0 && #ifdef USE_TERM_DRIVER InfoOf(SP_PARM).caninit #else !(exit_ca_mode && non_rev_rmcup) #endif ) { if (_nc_access(file, R_OK) >= 0 && (fp = fopen(file, "rb")) != 0) { delwin(CurScreen(SP_PARM)); CurScreen(SP_PARM) = getwin(fp); #if !USE_REENTRANT curscr = CurScreen(SP_PARM); #endif (void) fclose(fp); if (CurScreen(SP_PARM) != 0) { code = OK; } } } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) scr_init(const char *file) { return NCURSES_SP_NAME(scr_init) (CURRENT_SCREEN, file); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_set) (NCURSES_SP_DCLx const char *file) { int code = ERR; T((T_CALLED("scr_set(%p,%s)"), (void *) SP_PARM, _nc_visbuf(file))); if (NCURSES_SP_NAME(scr_init) (NCURSES_SP_ARGx file) == OK) { delwin(NewScreen(SP_PARM)); NewScreen(SP_PARM) = dupwin(curscr); #if !USE_REENTRANT newscr = NewScreen(SP_PARM); #endif if (NewScreen(SP_PARM) != 0) { code = OK; } } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) scr_set(const char *file) { return NCURSES_SP_NAME(scr_set) (CURRENT_SCREEN, file); } #endif ncurses-6.0-20160213/ncurses/base/lib_flash.c0000644000175100001440000000671412306677173017163 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * flash.c * * The routine flash(). * */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_flash.c,v 1.14 2014/03/08 20:32:59 tom Exp $") /* * flash() * * Flash the current terminal's screen if possible. If not, * sound the audible bell if one exists. * */ NCURSES_EXPORT(int) NCURSES_SP_NAME(flash) (NCURSES_SP_DCL0) { int res = ERR; T((T_CALLED("flash(%p)"), (void *) SP_PARM)); #ifdef USE_TERM_DRIVER if (SP_PARM != 0) res = CallDriver_1(SP_PARM, td_doBeepOrFlash, FALSE); #else if (HasTerminal(SP_PARM)) { /* FIXME: should make sure that we are not in altchar mode */ if (flash_screen) { res = NCURSES_PUTP2_FLUSH("flash_screen", flash_screen); } else if (bell) { res = NCURSES_PUTP2_FLUSH("bell", bell); } } #endif returnCode(res); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) flash(void) { return NCURSES_SP_NAME(flash) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/lib_leaveok.c0000644000175100001440000000532111270700357017473 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_leaveok.c ** ** The routine leaveok. ** */ #include MODULE_ID("$Id: lib_leaveok.c,v 1.6 2009/10/24 22:34:23 tom Exp $") NCURSES_EXPORT(int) leaveok(WINDOW *win, bool flag) { T((T_CALLED("leaveok(%p,%d)"), (void *) win, flag)); if (win) { win->_leaveok = flag; returnCode(OK); } else returnCode(ERR); } ncurses-6.0-20160213/ncurses/base/keyok.c0000644000175100001440000000777212306677173016367 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ #include MODULE_ID("$Id: keyok.c,v 1.14 2014/03/08 20:32:59 tom Exp $") /* * Enable (or disable) ncurses' interpretation of a keycode by adding (or * removing) the corresponding 'tries' entry. * * Do this by storing a second tree of tries, which records the disabled keys. * The simplest way to copy is to make a function that returns the string (with * nulls set to 0200), then use that to reinsert the string into the * corresponding tree. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(keyok) (NCURSES_SP_DCLx int c, bool flag) { int code = ERR; if (HasTerminal(SP_PARM)) { T((T_CALLED("keyok(%p, %d,%d)"), (void *) SP_PARM, c, flag)); #ifdef USE_TERM_DRIVER code = CallDriver_2(sp, td_kyOk, c, flag); #else T((T_CALLED("keyok(%d,%d)"), c, flag)); if (c >= 0) { int count = 0; char *s; unsigned ch = (unsigned) c; if (flag) { while ((s = _nc_expand_try(SP_PARM->_key_ok, ch, &count, (size_t) 0)) != 0) { if (_nc_remove_key(&(SP_PARM->_key_ok), ch)) { code = _nc_add_to_try(&(SP_PARM->_keytry), s, ch); free(s); count = 0; if (code != OK) break; } else { free(s); } } } else { while ((s = _nc_expand_try(SP_PARM->_keytry, ch, &count, (size_t) 0)) != 0) { if (_nc_remove_key(&(SP_PARM->_keytry), ch)) { code = _nc_add_to_try(&(SP_PARM->_key_ok), s, ch); free(s); count = 0; if (code != OK) break; } else { free(s); } } } } #endif } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) keyok(int c, bool flag) { return NCURSES_SP_NAME(keyok) (CURRENT_SCREEN, c, flag); } #endif ncurses-6.0-20160213/ncurses/base/lib_endwin.c0000644000175100001440000000652412306677173017351 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_endwin.c ** ** The routine endwin(). ** */ #include MODULE_ID("$Id: lib_endwin.c,v 1.23 2014/03/08 20:32:59 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(endwin) (NCURSES_SP_DCL0) { int code = ERR; T((T_CALLED("endwin(%p)"), (void *) SP_PARM)); if (SP_PARM) { #ifdef USE_TERM_DRIVER TERMINAL_CONTROL_BLOCK *TCB = TCBOf(SP_PARM); SP_PARM->_endwin = TRUE; if (TCB && TCB->drv && TCB->drv->td_scexit) TCB->drv->td_scexit(SP_PARM); #else SP_PARM->_endwin = TRUE; SP_PARM->_mouse_wrap(SP_PARM); _nc_screen_wrap(); _nc_mvcur_wrap(); /* wrap up cursor addressing */ #endif code = NCURSES_SP_NAME(reset_shell_mode) (NCURSES_SP_ARG); } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) endwin(void) { return NCURSES_SP_NAME(endwin) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/MKkeyname.awk0000644000175100001440000001463412206167522017450 0ustar tomusers# $Id: MKkeyname.awk,v 1.48 2013/08/24 17:37:22 tom Exp $ ############################################################################## # Copyright (c) 1999-2012,2013 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## BEGIN { print "/* generated by MKkeyname.awk */" print "" print "#include " print "#include " print "" first = 1; } /^[^#]/ { if (bigstrings) { if (first) { print "struct kn { short offset; int code; };" print "static const struct kn _nc_key_names[] = {" } printf "\t{ %d, %s },\n", offset, $1 offset += length($1) + 1 names = names"\n\t\""$1"\\0\"" } else { if (first) { print "struct kn { const char *name; int code; };" print "static const struct kn _nc_key_names[] = {" } printf "\t{ \"%s\", %s },\n", $1, $1; } first = 0; } END { if (bigstrings) { printf "\t{ -1, 0 }};\n" print "" print "static const char key_names[] = "names";" } else { printf "\t{ 0, 0 }};\n" } print "" print "#define SIZEOF_TABLE 256" print "#define MyTable _nc_globals.keyname_table" print "#define MyInit _nc_globals.init_keyname" print "" print "NCURSES_EXPORT(NCURSES_CONST char *)" print "safe_keyname (SCREEN *sp, int c)" print "{" print " int i;" print " char name[20];" print " char *p;" print " NCURSES_CONST char *result = 0;" print "" print " if (c == -1) {" print " result = \"-1\";" print " } else {" if (bigstrings) { print " for (i = 0; _nc_key_names[i].offset != -1; i++) {" print " if (_nc_key_names[i].code == c) {" print " result = (NCURSES_CONST char *)key_names + _nc_key_names[i].offset;" print " break;" print " }" print " }" } else { print " for (i = 0; _nc_key_names[i].name != 0; i++) {" print " if (_nc_key_names[i].code == c) {" print " result = (NCURSES_CONST char *)_nc_key_names[i].name;" print " break;" print " }" print " }" } print "" print " if (result == 0 && (c >= 0 && c < SIZEOF_TABLE)) {" print " if (MyTable == 0)" print " MyTable = typeCalloc(char *, SIZEOF_TABLE);" print "" print " if (MyTable != 0) {" print " int m_prefix = (sp == 0 || sp->_use_meta);" print "" print " /* if sense of meta() changed, discard cached data */" print " if (MyInit != (m_prefix + 1)) {" print " MyInit = m_prefix + 1;" print " for (i = 0; i < SIZEOF_TABLE; ++i) {" print " if (MyTable[i]) {" print " FreeAndNull(MyTable[i]);" print " }" print " }" print " }" print "" print " /* create and cache result as needed */" print " if (MyTable[c] == 0) {" print " int cc = c;" print " p = name;" print "#define P_LIMIT (sizeof(name) - (size_t) (p - name))" print " if (cc >= 128 && m_prefix) {" print " _nc_STRCPY(p, \"M-\", P_LIMIT);" print " p += 2;" print " cc -= 128;" print " }" print " if (cc < 32)" print " _nc_SPRINTF(p, _nc_SLIMIT(P_LIMIT) \"^%c\", cc + '@');" print " else if (cc == 127)" print " _nc_STRCPY(p, \"^?\", P_LIMIT);" print " else" print " _nc_SPRINTF(p, _nc_SLIMIT(P_LIMIT) \"%c\", cc);" print " MyTable[c] = strdup(name);" print " }" print " result = MyTable[c];" print " }" print "#if NCURSES_EXT_FUNCS && NCURSES_XNAMES" print " } else if (result == 0 && HasTerminal(sp)) {" print " int j, k;" print " char * bound;" print " TERMTYPE *tp = &(TerminalOf(sp)->type);" print " unsigned save_trace = _nc_tracing;" print "" print " _nc_tracing = 0; /* prevent recursion via keybound() */" print " for (j = 0; (bound = NCURSES_SP_NAME(keybound)(NCURSES_SP_ARGx c, j)) != 0; ++j) {" print " for(k = STRCOUNT; k < (int) NUM_STRINGS(tp); k++) {" print " if (tp->Strings[k] != 0 && !strcmp(bound, tp->Strings[k])) {" print " result = ExtStrname(tp, k, strnames);" print " break;" print " }" print " }" print " free(bound);" print " if (result != 0)" print " break;" print " }" print " _nc_tracing = save_trace;" print "#endif" print " }" print " }" print " return result;" print "}" print "" print "NCURSES_EXPORT(NCURSES_CONST char *)" print "keyname (int c)" print "{" print " return safe_keyname (CURRENT_SCREEN, c);" print "}" print "" print "#if NO_LEAKS" print "void _nc_keyname_leaks(void)" print "{" print " int j;" print " if (MyTable != 0) {" print " for (j = 0; j < SIZEOF_TABLE; ++j) {" print " FreeIfNeeded(MyTable[j]);" print " }" print " FreeAndNull(MyTable);" print " }" print "}" print "#endif /* NO_LEAKS */" } ncurses-6.0-20160213/ncurses/base/lib_window.c0000644000175100001440000001740711503262052017356 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_window.c ** ** */ #include MODULE_ID("$Id: lib_window.c,v 1.29 2010/12/19 01:47:22 tom Exp $") NCURSES_EXPORT(void) _nc_synchook(WINDOW *win) /* hook to be called after each window change */ { if (win->_immed) wrefresh(win); if (win->_sync) wsyncup(win); } NCURSES_EXPORT(int) mvderwin(WINDOW *win, int y, int x) /* move a derived window */ { WINDOW *orig; int i; int rc = ERR; T((T_CALLED("mvderwin(%p,%d,%d)"), (void *) win, y, x)); if (win != 0 && (orig = win->_parent) != 0 && (x >= 0 && y >= 0) && (x + getmaxx(win) <= getmaxx(orig)) && (y + getmaxy(win) <= getmaxy(orig))) { wsyncup(win); win->_parx = x; win->_pary = y; for (i = 0; i < getmaxy(win); i++) win->_line[i].text = &(orig->_line[y++].text[x]); rc = OK; } returnCode(rc); } NCURSES_EXPORT(int) syncok(WINDOW *win, bool bf) /* enable/disable automatic wsyncup() on each change to window */ { T((T_CALLED("syncok(%p,%d)"), (void *) win, bf)); if (win) { win->_sync = bf; returnCode(OK); } else returnCode(ERR); } NCURSES_EXPORT(void) wsyncup(WINDOW *win) /* mark changed every cell in win's ancestors that is changed in win */ /* Rewritten by J. Pfeifer, 1-Apr-96 (don't even think that...) */ { WINDOW *wp; T((T_CALLED("wsyncup(%p)"), (void *) win)); if (win && win->_parent) { for (wp = win; wp->_parent; wp = wp->_parent) { int y; WINDOW *pp = wp->_parent; assert((wp->_pary <= pp->_maxy) && ((wp->_pary + wp->_maxy) <= pp->_maxy)); for (y = 0; y <= wp->_maxy; y++) { int left = wp->_line[y].firstchar; if (left >= 0) { /* line is touched */ struct ldat *line = &(pp->_line[wp->_pary + y]); /* left & right character in parent window coordinates */ int right = wp->_line[y].lastchar + wp->_parx; left += wp->_parx; CHANGED_RANGE(line, left, right); } } } } returnVoid; } NCURSES_EXPORT(void) wsyncdown(WINDOW *win) /* mark changed every cell in win that is changed in any of its ancestors */ /* Rewritten by J. Pfeifer, 1-Apr-96 (don't even think that...) */ { T((T_CALLED("wsyncdown(%p)"), (void *) win)); if (win && win->_parent) { WINDOW *pp = win->_parent; int y; /* This recursion guarantees, that the changes are propagated down- wards from the root to our direct parent. */ wsyncdown(pp); /* and now we only have to propagate the changes from our direct parent, if there are any. */ assert((win->_pary <= pp->_maxy) && ((win->_pary + win->_maxy) <= pp->_maxy)); for (y = 0; y <= win->_maxy; y++) { if (pp->_line[win->_pary + y].firstchar >= 0) { /* parent changed */ struct ldat *line = &(win->_line[y]); /* left and right character in child coordinates */ int left = pp->_line[win->_pary + y].firstchar - win->_parx; int right = pp->_line[win->_pary + y].lastchar - win->_parx; /* The change may be outside the child's range */ if (left < 0) left = 0; if (right > win->_maxx) right = win->_maxx; CHANGED_RANGE(line, left, right); } } } returnVoid; } NCURSES_EXPORT(void) wcursyncup(WINDOW *win) /* sync the cursor in all derived windows to its value in the base window */ { WINDOW *wp; T((T_CALLED("wcursyncup(%p)"), (void *) win)); for (wp = win; wp && wp->_parent; wp = wp->_parent) { wmove(wp->_parent, wp->_pary + wp->_cury, wp->_parx + wp->_curx); } returnVoid; } NCURSES_EXPORT(WINDOW *) dupwin(WINDOW *win) /* make an exact duplicate of the given window */ { WINDOW *nwin = 0; size_t linesize; int i; T((T_CALLED("dupwin(%p)"), (void *) win)); if (win != 0) { #if NCURSES_SP_FUNCS SCREEN *sp = _nc_screen_of(win); #endif _nc_lock_global(curses); if (win->_flags & _ISPAD) { nwin = NCURSES_SP_NAME(newpad) (NCURSES_SP_ARGx win->_maxy + 1, win->_maxx + 1); } else { nwin = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx win->_maxy + 1, win->_maxx + 1, win->_begy, win->_begx); } if (nwin != 0) { nwin->_curx = win->_curx; nwin->_cury = win->_cury; nwin->_maxy = win->_maxy; nwin->_maxx = win->_maxx; nwin->_begy = win->_begy; nwin->_begx = win->_begx; nwin->_yoffset = win->_yoffset; nwin->_flags = win->_flags & ~_SUBWIN; /* Due to the use of newwin(), the clone is not a subwindow. * The text is really copied into the clone. */ WINDOW_ATTRS(nwin) = WINDOW_ATTRS(win); nwin->_nc_bkgd = win->_nc_bkgd; nwin->_notimeout = win->_notimeout; nwin->_clear = win->_clear; nwin->_leaveok = win->_leaveok; nwin->_scroll = win->_scroll; nwin->_idlok = win->_idlok; nwin->_idcok = win->_idcok; nwin->_immed = win->_immed; nwin->_sync = win->_sync; nwin->_use_keypad = win->_use_keypad; nwin->_delay = win->_delay; nwin->_parx = 0; nwin->_pary = 0; nwin->_parent = (WINDOW *) 0; /* See above: the clone isn't a subwindow! */ nwin->_regtop = win->_regtop; nwin->_regbottom = win->_regbottom; if (win->_flags & _ISPAD) nwin->_pad = win->_pad; linesize = (unsigned) (win->_maxx + 1) * sizeof(NCURSES_CH_T); for (i = 0; i <= nwin->_maxy; i++) { memcpy(nwin->_line[i].text, win->_line[i].text, linesize); nwin->_line[i].firstchar = win->_line[i].firstchar; nwin->_line[i].lastchar = win->_line[i].lastchar; } } _nc_unlock_global(curses); } returnWin(nwin); } ncurses-6.0-20160213/ncurses/base/lib_wattroff.c0000644000175100001440000000601211270700530017670 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2006,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* ** lib_wattroff.c ** ** The routine wattr_off(). ** */ #include #include MODULE_ID("$Id: lib_wattroff.c,v 1.10 2009/10/24 22:36:08 tom Exp $") NCURSES_EXPORT(int) wattr_off(WINDOW *win, attr_t at, void *opts GCC_UNUSED) { T((T_CALLED("wattr_off(%p,%s)"), (void *) win, _traceattr(at))); if (win) { T(("... current %s (%d)", _traceattr(WINDOW_ATTRS(win)), GET_WINDOW_PAIR(win))); if_EXT_COLORS({ if (at & A_COLOR) win->_color = 0; }); toggle_attr_off(WINDOW_ATTRS(win), at); returnCode(OK); } else returnCode(ERR); } ncurses-6.0-20160213/ncurses/base/lib_delwin.c0000644000175100001440000000704211270674546017343 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2008 * ****************************************************************************/ /* ** lib_delwin.c ** ** The routine delwin(). ** */ #include MODULE_ID("$Id: lib_delwin.c,v 1.20 2009/10/24 22:02:14 tom Exp $") static bool cannot_delete(WINDOW *win) { WINDOWLIST *p; bool result = TRUE; #ifdef USE_SP_WINDOWLIST SCREEN *sp = _nc_screen_of(win); #endif for (each_window(SP_PARM, p)) { if (&(p->win) == win) { result = FALSE; } else if ((p->win._flags & _SUBWIN) != 0 && p->win._parent == win) { result = TRUE; break; } } return result; } NCURSES_EXPORT(int) delwin(WINDOW *win) { int result = ERR; T((T_CALLED("delwin(%p)"), (void *) win)); if (_nc_try_global(curses) == 0) { if (win == 0 || cannot_delete(win)) { result = ERR; } else { #if NCURSES_SP_FUNCS SCREEN *sp = _nc_screen_of(win); #endif if (win->_flags & _SUBWIN) touchwin(win->_parent); else if (CurScreen(SP_PARM) != 0) touchwin(CurScreen(SP_PARM)); result = _nc_freewin(win); } _nc_unlock_global(curses); } returnCode(result); } ncurses-6.0-20160213/ncurses/base/lib_slklab.c0000644000175100001440000000613711270675705017333 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2003,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer, 1998,2009 * * and: Thomas E. Dickey 1998-on * ****************************************************************************/ /* * lib_slklab.c * Soft key routines. * Fetch the label text. */ #include MODULE_ID("$Id: lib_slklab.c,v 1.10 2009/10/24 22:12:21 tom Exp $") NCURSES_EXPORT(char *) NCURSES_SP_NAME(slk_label) (NCURSES_SP_DCLx int n) { T((T_CALLED("slk_label(%p,%d)"), (void *) SP_PARM, n)); if (SP_PARM == 0 || SP_PARM->_slk == 0 || n < 1 || n > SP_PARM->_slk->labcnt) returnPtr(0); returnPtr(SP_PARM->_slk->ent[n - 1].ent_text); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(char *) slk_label(int n) { return NCURSES_SP_NAME(slk_label) (CURRENT_SCREEN, n); } #endif ncurses-6.0-20160213/ncurses/base/README0000644000175100001440000000471010422525771015737 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README,v 1.2 2006/04/22 22:19:37 tom Exp $ ------------------------------------------------------------------------------- The functions in this directory are the generic (not device-specific) modules of ncurses. As a rule, these modules should not depend directly on term.h references and associated terminfo function and variables. ncurses-6.0-20160213/ncurses/base/define_key.c0000644000175100001440000000723212306677173017336 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ #include MODULE_ID("$Id: define_key.c,v 1.21 2014/03/08 20:32:59 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(define_key) (NCURSES_SP_DCLx const char *str, int keycode) { int code = ERR; T((T_CALLED("define_key(%p, %s,%d)"), (void *) SP_PARM, _nc_visbuf(str), keycode)); if (SP_PARM == 0 || !HasTInfoTerminal(SP_PARM)) { code = ERR; } else if (keycode > 0) { unsigned ukey = (unsigned) keycode; #ifdef USE_TERM_DRIVER #define CallHasKey(keycode) CallDriver_1(SP_PARM, td_kyExist, keycode) #else #define CallHasKey(keycode) NCURSES_SP_NAME(has_key)(NCURSES_SP_ARGx keycode) #endif if (str != 0) { NCURSES_SP_NAME(define_key) (NCURSES_SP_ARGx str, 0); } else if (CallHasKey(keycode)) { while (_nc_remove_key(&(SP_PARM->_keytry), ukey)) code = OK; } if (str != 0) { if (NCURSES_SP_NAME(key_defined) (NCURSES_SP_ARGx str) == 0) { if (_nc_add_to_try(&(SP_PARM->_keytry), str, ukey) == OK) { code = OK; } else { code = ERR; } } else { code = ERR; } } } else { while (_nc_remove_string(&(SP_PARM->_keytry), str)) code = OK; } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) define_key(const char *str, int keycode) { return NCURSES_SP_NAME(define_key) (CURRENT_SCREEN, str, keycode); } #endif ncurses-6.0-20160213/ncurses/base/legacy_coding.c0000644000175100001440000000567511270676144020030 0ustar tomusers/**************************************************************************** * Copyright (c) 2005,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2005 * * Juergen Pfeifer 2009 * ****************************************************************************/ #include MODULE_ID("$Id: legacy_coding.c,v 1.5 2009/10/24 22:15:00 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (NCURSES_SP_DCLx int level) { int result = ERR; T((T_CALLED("use_legacy_coding(%p,%d)"), (void *) SP_PARM, level)); if (level >= 0 && level <= 2 && SP_PARM != 0) { result = SP_PARM->_legacy_coding; SP_PARM->_legacy_coding = level; } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) use_legacy_coding(int level) { return NCURSES_SP_NAME(use_legacy_coding) (CURRENT_SCREEN, level); } #endif ncurses-6.0-20160213/ncurses/base/lib_getch.c0000644000175100001440000004643712650770520017156 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_getch.c ** ** The routine getch(). ** */ #include MODULE_ID("$Id: lib_getch.c,v 1.134 2016/01/23 21:32:00 tom Exp $") #include #if USE_REENTRANT #define GetEscdelay(sp) *_nc_ptr_Escdelay(sp) NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(ESCDELAY) (void) { return *(_nc_ptr_Escdelay(CURRENT_SCREEN)); } NCURSES_EXPORT(int *) _nc_ptr_Escdelay(SCREEN *sp) { return ptrEscdelay(sp); } #else #define GetEscdelay(sp) ESCDELAY NCURSES_EXPORT_VAR(int) ESCDELAY = 1000; #endif #if NCURSES_EXT_FUNCS NCURSES_EXPORT(int) NCURSES_SP_NAME(set_escdelay) (NCURSES_SP_DCLx int value) { int code = OK; #if USE_REENTRANT if (SP_PARM) { SET_ESCDELAY(value); } else { code = ERR; } #else (void) SP_PARM; ESCDELAY = value; #endif return code; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) set_escdelay(int value) { int code; #if USE_REENTRANT code = NCURSES_SP_NAME(set_escdelay) (CURRENT_SCREEN, value); #else ESCDELAY = value; code = OK; #endif return code; } #endif #endif /* NCURSES_EXT_FUNCS */ #if NCURSES_EXT_FUNCS NCURSES_EXPORT(int) NCURSES_SP_NAME(get_escdelay) (NCURSES_SP_DCL0) { #if !USE_REENTRANT (void) SP_PARM; #endif return GetEscdelay(SP_PARM); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) get_escdelay(void) { return NCURSES_SP_NAME(get_escdelay) (CURRENT_SCREEN); } #endif #endif /* NCURSES_EXT_FUNCS */ static int _nc_use_meta(WINDOW *win) { SCREEN *sp = _nc_screen_of(win); return (sp ? sp->_use_meta : 0); } #ifdef USE_TERM_DRIVER # ifdef __MINGW32__ static HANDLE _nc_get_handle(int fd) { intptr_t value = _get_osfhandle(fd); return (HANDLE) value; } # endif #endif /* * Check for mouse activity, returning nonzero if we find any. */ static int check_mouse_activity(SCREEN *sp, int delay EVENTLIST_2nd(_nc_eventlist * evl)) { int rc; #ifdef USE_TERM_DRIVER TERMINAL_CONTROL_BLOCK *TCB = TCBOf(sp); rc = TCBOf(sp)->drv->td_testmouse(TCBOf(sp), delay EVENTLIST_2nd(evl)); # ifdef __MINGW32__ /* if we emulate terminfo on console, we have to use the console routine */ if (IsTermInfoOnConsole(sp)) { HANDLE fd = _nc_get_handle(sp->_ifd); rc = _nc_mingw_testmouse(sp, fd, delay EVENTLIST_2nd(evl)); } else # endif rc = TCB->drv->td_testmouse(TCB, delay EVENTLIST_2nd(evl)); #else #if USE_SYSMOUSE if ((sp->_mouse_type == M_SYSMOUSE) && (sp->_sysmouse_head < sp->_sysmouse_tail)) { rc = TW_MOUSE; } else #endif { rc = _nc_timed_wait(sp, TWAIT_MASK, delay, (int *) 0 EVENTLIST_2nd(evl)); #if USE_SYSMOUSE if ((sp->_mouse_type == M_SYSMOUSE) && (sp->_sysmouse_head < sp->_sysmouse_tail) && (rc == 0) && (errno == EINTR)) { rc |= TW_MOUSE; } #endif } #endif return rc; } static NCURSES_INLINE int fifo_peek(SCREEN *sp) { int ch = (peek >= 0) ? sp->_fifo[peek] : ERR; TR(TRACE_IEVENT, ("peeking at %d", peek)); p_inc(); return ch; } static NCURSES_INLINE int fifo_pull(SCREEN *sp) { int ch = (head >= 0) ? sp->_fifo[head] : ERR; TR(TRACE_IEVENT, ("pulling %s from %d", _nc_tracechar(sp, ch), head)); if (peek == head) { h_inc(); peek = head; } else { h_inc(); } #ifdef TRACE if (USE_TRACEF(TRACE_IEVENT)) { _nc_fifo_dump(sp); _nc_unlock_global(tracef); } #endif return ch; } static NCURSES_INLINE int fifo_push(SCREEN *sp EVENTLIST_2nd(_nc_eventlist * evl)) { int n; int ch = 0; int mask = 0; (void) mask; if (tail < 0) return ERR; #ifdef HIDE_EINTR again: errno = 0; #endif #ifdef NCURSES_WGETCH_EVENTS if (evl #if USE_GPM_SUPPORT || USE_EMX_MOUSE || USE_SYSMOUSE || (sp->_mouse_fd >= 0) #endif ) { mask = check_mouse_activity(sp, -1 EVENTLIST_2nd(evl)); } else mask = 0; if (mask & TW_EVENT) { T(("fifo_push: ungetch KEY_EVENT")); safe_ungetch(sp, KEY_EVENT); return KEY_EVENT; } #elif USE_GPM_SUPPORT || USE_EMX_MOUSE || USE_SYSMOUSE if (sp->_mouse_fd >= 0) { mask = check_mouse_activity(sp, -1 EVENTLIST_2nd(evl)); } #endif #if USE_GPM_SUPPORT || USE_EMX_MOUSE if ((sp->_mouse_fd >= 0) && (mask & TW_MOUSE)) { sp->_mouse_event(sp); ch = KEY_MOUSE; n = 1; } else #endif #if USE_SYSMOUSE if ((sp->_mouse_type == M_SYSMOUSE) && (sp->_sysmouse_head < sp->_sysmouse_tail)) { sp->_mouse_event(sp); ch = KEY_MOUSE; n = 1; } else if ((sp->_mouse_type == M_SYSMOUSE) && (mask <= 0) && errno == EINTR) { sp->_mouse_event(sp); ch = KEY_MOUSE; n = 1; } else #endif #ifdef USE_TERM_DRIVER if ((sp->_mouse_type == M_TERM_DRIVER) && (sp->_drv_mouse_head < sp->_drv_mouse_tail)) { sp->_mouse_event(sp); ch = KEY_MOUSE; n = 1; } else #endif #if USE_KLIBC_KBD if (NC_ISATTY(sp->_ifd) && sp->_cbreak) { ch = _read_kbd(0, 1, !sp->_raw); n = (ch == -1) ? -1 : 1; sp->_extended_key = (ch == 0); } else #endif { /* Can block... */ #ifdef USE_TERM_DRIVER int buf; #ifdef __MINGW32__ if (NC_ISATTY(sp->_ifd) && IsTermInfoOnConsole(sp) && sp->_cbreak) n = _nc_mingw_console_read(sp, _nc_get_handle(sp->_ifd), &buf); else #endif n = CallDriver_1(sp, td_read, &buf); ch = buf; #else unsigned char c2 = 0; # if USE_PTHREADS_EINTR # if USE_WEAK_SYMBOLS if ((pthread_self) && (pthread_kill) && (pthread_equal)) # endif _nc_globals.read_thread = pthread_self(); # endif n = (int) read(sp->_ifd, &c2, (size_t) 1); #if USE_PTHREADS_EINTR _nc_globals.read_thread = 0; #endif ch = c2; #endif } #ifdef HIDE_EINTR /* * Under System V curses with non-restarting signals, getch() returns * with value ERR when a handled signal keeps it from completing. * If signals restart system calls, OTOH, the signal is invisible * except to its handler. * * We don't want this difference to show. This piece of code * tries to make it look like we always have restarting signals. */ if (n <= 0 && errno == EINTR # if USE_PTHREADS_EINTR && (_nc_globals.have_sigwinch == 0) # endif ) goto again; #endif if ((n == -1) || (n == 0)) { TR(TRACE_IEVENT, ("read(%d,&ch,1)=%d, errno=%d", sp->_ifd, n, errno)); ch = ERR; } TR(TRACE_IEVENT, ("read %d characters", n)); sp->_fifo[tail] = ch; sp->_fifohold = 0; if (head == -1) head = peek = tail; t_inc(); TR(TRACE_IEVENT, ("pushed %s at %d", _nc_tracechar(sp, ch), tail)); #ifdef TRACE if (USE_TRACEF(TRACE_IEVENT)) { _nc_fifo_dump(sp); _nc_unlock_global(tracef); } #endif return ch; } static NCURSES_INLINE void fifo_clear(SCREEN *sp) { memset(sp->_fifo, 0, sizeof(sp->_fifo)); head = -1; tail = peek = 0; } static int kgetch(SCREEN *EVENTLIST_2nd(_nc_eventlist * evl)); static void recur_wrefresh(WINDOW *win) { #ifdef USE_PTHREADS SCREEN *sp = _nc_screen_of(win); if (_nc_use_pthreads && sp != CURRENT_SCREEN) { SCREEN *save_SP; /* temporarily switch to the window's screen to check/refresh */ _nc_lock_global(curses); save_SP = CURRENT_SCREEN; _nc_set_screen(sp); recur_wrefresh(win); _nc_set_screen(save_SP); _nc_unlock_global(curses); } else #endif if ((is_wintouched(win) || (win->_flags & _HASMOVED)) && !(win->_flags & _ISPAD)) { wrefresh(win); } } static int recur_wgetnstr(WINDOW *win, char *buf) { SCREEN *sp = _nc_screen_of(win); int rc; if (sp != 0) { #ifdef USE_PTHREADS if (_nc_use_pthreads && sp != CURRENT_SCREEN) { SCREEN *save_SP; /* temporarily switch to the window's screen to get cooked input */ _nc_lock_global(curses); save_SP = CURRENT_SCREEN; _nc_set_screen(sp); rc = recur_wgetnstr(win, buf); _nc_set_screen(save_SP); _nc_unlock_global(curses); } else #endif { sp->_called_wgetch = TRUE; rc = wgetnstr(win, buf, MAXCOLUMNS); sp->_called_wgetch = FALSE; } } else { rc = ERR; } return rc; } NCURSES_EXPORT(int) _nc_wgetch(WINDOW *win, int *result, int use_meta EVENTLIST_2nd(_nc_eventlist * evl)) { SCREEN *sp; int ch; int rc = 0; #ifdef NCURSES_WGETCH_EVENTS int event_delay = -1; #endif T((T_CALLED("_nc_wgetch(%p)"), (void *) win)); *result = 0; sp = _nc_screen_of(win); if (win == 0 || sp == 0) { returnCode(ERR); } if (cooked_key_in_fifo()) { recur_wrefresh(win); *result = fifo_pull(sp); returnCode(*result >= KEY_MIN ? KEY_CODE_YES : OK); } #ifdef NCURSES_WGETCH_EVENTS if (evl && (evl->count == 0)) evl = NULL; event_delay = _nc_eventlist_timeout(evl); #endif /* * Handle cooked mode. Grab a string from the screen, * stuff its contents in the FIFO queue, and pop off * the first character to return it. */ if (head == -1 && !sp->_notty && !sp->_raw && !sp->_cbreak && !sp->_called_wgetch) { char buf[MAXCOLUMNS], *bufp; TR(TRACE_IEVENT, ("filling queue in cooked mode")); /* ungetch in reverse order */ #ifdef NCURSES_WGETCH_EVENTS rc = recur_wgetnstr(win, buf); if (rc != KEY_EVENT && rc != ERR) safe_ungetch(sp, '\n'); #else if (recur_wgetnstr(win, buf) != ERR) safe_ungetch(sp, '\n'); #endif for (bufp = buf + strlen(buf); bufp > buf; bufp--) safe_ungetch(sp, bufp[-1]); #ifdef NCURSES_WGETCH_EVENTS /* Return it first */ if (rc == KEY_EVENT) { *result = rc; } else #endif *result = fifo_pull(sp); returnCode(*result >= KEY_MIN ? KEY_CODE_YES : OK); } if (win->_use_keypad != sp->_keypad_on) _nc_keypad(sp, win->_use_keypad); recur_wrefresh(win); if (win->_notimeout || (win->_delay >= 0) || (sp->_cbreak > 1)) { if (head == -1) { /* fifo is empty */ int delay; TR(TRACE_IEVENT, ("timed delay in wgetch()")); if (sp->_cbreak > 1) delay = (sp->_cbreak - 1) * 100; else if (win->_notimeout) delay = 0; else delay = win->_delay; #ifdef NCURSES_WGETCH_EVENTS if (event_delay >= 0 && delay > event_delay) delay = event_delay; #endif TR(TRACE_IEVENT, ("delay is %d milliseconds", delay)); rc = check_mouse_activity(sp, delay EVENTLIST_2nd(evl)); #ifdef NCURSES_WGETCH_EVENTS if (rc & TW_EVENT) { *result = KEY_EVENT; returnCode(KEY_CODE_YES); } #endif if (!rc) { goto check_sigwinch; } } /* else go on to read data available */ } if (win->_use_keypad) { /* * This is tricky. We only want to get special-key * events one at a time. But we want to accumulate * mouse events until either (a) the mouse logic tells * us it's picked up a complete gesture, or (b) * there's a detectable time lapse after one. * * Note: if the mouse code starts failing to compose * press/release events into clicks, you should probably * increase the wait with mouseinterval(). */ int runcount = 0; do { ch = kgetch(sp EVENTLIST_2nd(evl)); if (ch == KEY_MOUSE) { ++runcount; if (sp->_mouse_inline(sp)) break; } if (sp->_maxclick < 0) break; } while (ch == KEY_MOUSE && (((rc = check_mouse_activity(sp, sp->_maxclick EVENTLIST_2nd(evl))) != 0 && !(rc & TW_EVENT)) || !sp->_mouse_parse(sp, runcount))); #ifdef NCURSES_WGETCH_EVENTS if ((rc & TW_EVENT) && !(ch == KEY_EVENT)) { safe_ungetch(sp, ch); ch = KEY_EVENT; } #endif if (runcount > 0 && ch != KEY_MOUSE) { #ifdef NCURSES_WGETCH_EVENTS /* mouse event sequence ended by an event, report event */ if (ch == KEY_EVENT) { safe_ungetch(sp, KEY_MOUSE); /* FIXME This interrupts a gesture... */ } else #endif { /* mouse event sequence ended by keystroke, store keystroke */ safe_ungetch(sp, ch); ch = KEY_MOUSE; } } } else { if (head == -1) fifo_push(sp EVENTLIST_2nd(evl)); ch = fifo_pull(sp); } if (ch == ERR) { check_sigwinch: #if USE_SIZECHANGE if (_nc_handle_sigwinch(sp)) { _nc_update_screensize(sp); /* resizeterm can push KEY_RESIZE */ if (cooked_key_in_fifo()) { *result = fifo_pull(sp); /* * Get the ERR from queue -- it is from WINCH, * so we should take it out, the "error" is handled. */ if (fifo_peek(sp) == -1) fifo_pull(sp); returnCode(*result >= KEY_MIN ? KEY_CODE_YES : OK); } } #endif returnCode(ERR); } /* * If echo() is in effect, display the printable version of the * key on the screen. Carriage return and backspace are treated * specially by Solaris curses: * * If carriage return is defined as a function key in the * terminfo, e.g., kent, then Solaris may return either ^J (or ^M * if nonl() is set) or KEY_ENTER depending on the echo() mode. * We echo before translating carriage return based on nonl(), * since the visual result simply moves the cursor to column 0. * * Backspace is a different matter. Solaris curses does not * translate it to KEY_BACKSPACE if kbs=^H. This does not depend * on the stty modes, but appears to be a hardcoded special case. * This is a difference from ncurses, which uses the terminfo entry. * However, we provide the same visual result as Solaris, moving the * cursor to the left. */ if (sp->_echo && !(win->_flags & _ISPAD)) { chtype backup = (chtype) ((ch == KEY_BACKSPACE) ? '\b' : ch); if (backup < KEY_MIN) wechochar(win, backup); } /* * Simulate ICRNL mode */ if ((ch == '\r') && sp->_nl) ch = '\n'; /* Strip 8th-bit if so desired. We do this only for characters that * are in the range 128-255, to provide compatibility with terminals * that display only 7-bit characters. Note that 'ch' may be a * function key at this point, so we mustn't strip _those_. */ if (!use_meta) if ((ch < KEY_MIN) && (ch & 0x80)) ch &= 0x7f; T(("wgetch returning : %s", _nc_tracechar(sp, ch))); *result = ch; returnCode(ch >= KEY_MIN ? KEY_CODE_YES : OK); } #ifdef NCURSES_WGETCH_EVENTS NCURSES_EXPORT(int) wgetch_events(WINDOW *win, _nc_eventlist * evl) { int code; int value; T((T_CALLED("wgetch_events(%p,%p)"), (void *) win, (void *)evl)); code = _nc_wgetch(win, &value, _nc_use_meta(win) EVENTLIST_2nd(evl)); if (code != ERR) code = value; returnCode(code); } #endif NCURSES_EXPORT(int) wgetch(WINDOW *win) { int code; int value; T((T_CALLED("wgetch(%p)"), (void *) win)); code = _nc_wgetch(win, &value, _nc_use_meta(win) EVENTLIST_2nd((_nc_eventlist *) 0)); if (code != ERR) code = value; returnCode(code); } /* ** int ** kgetch() ** ** Get an input character, but take care of keypad sequences, returning ** an appropriate code when one matches the input. After each character ** is received, set an alarm call based on ESCDELAY. If no more of the ** sequence is received by the time the alarm goes off, pass through ** the sequence gotten so far. ** ** This function must be called when there are no cooked keys in queue. ** (that is head==-1 || peek==head) ** */ static int kgetch(SCREEN *sp EVENTLIST_2nd(_nc_eventlist * evl)) { TRIES *ptr; int ch = 0; int timeleft = GetEscdelay(sp); TR(TRACE_IEVENT, ("kgetch() called")); ptr = sp->_keytry; for (;;) { if (cooked_key_in_fifo() && sp->_fifo[head] >= KEY_MIN) { break; } else if (!raw_key_in_fifo()) { ch = fifo_push(sp EVENTLIST_2nd(evl)); if (ch == ERR) { peek = head; /* the keys stay uninterpreted */ return ERR; } #ifdef NCURSES_WGETCH_EVENTS else if (ch == KEY_EVENT) { peek = head; /* the keys stay uninterpreted */ return fifo_pull(sp); /* Remove KEY_EVENT from the queue */ } #endif } ch = fifo_peek(sp); if (ch >= KEY_MIN) { /* If not first in queue, somebody put this key there on purpose in * emergency. Consider it higher priority than the unfinished * keysequence we are parsing. */ peek = head; /* assume the key is the last in fifo */ t_dec(); /* remove the key */ return ch; } TR(TRACE_IEVENT, ("ch: %s", _nc_tracechar(sp, (unsigned char) ch))); while ((ptr != NULL) && (ptr->ch != (unsigned char) ch)) ptr = ptr->sibling; if (ptr == NULL) { TR(TRACE_IEVENT, ("ptr is null")); break; } TR(TRACE_IEVENT, ("ptr=%p, ch=%d, value=%d", (void *) ptr, ptr->ch, ptr->value)); if (ptr->value != 0) { /* sequence terminated */ TR(TRACE_IEVENT, ("end of sequence")); if (peek == tail) { fifo_clear(sp); } else { head = peek; } return (ptr->value); } ptr = ptr->child; if (!raw_key_in_fifo()) { int rc; TR(TRACE_IEVENT, ("waiting for rest of sequence")); rc = check_mouse_activity(sp, timeleft EVENTLIST_2nd(evl)); #ifdef NCURSES_WGETCH_EVENTS if (rc & TW_EVENT) { TR(TRACE_IEVENT, ("interrupted by a user event")); /* FIXME Should have preserved remainder timeleft for reuse... */ peek = head; /* Restart interpreting later */ return KEY_EVENT; } #endif if (!rc) { TR(TRACE_IEVENT, ("ran out of time")); break; } } } ch = fifo_pull(sp); peek = head; return ch; } ncurses-6.0-20160213/ncurses/base/lib_scrreg.c0000644000175100001440000000560611270700460017333 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_scrreg.c ** ** The routine wsetscrreg(). ** */ #include MODULE_ID("$Id: lib_scrreg.c,v 1.11 2009/10/24 22:35:28 tom Exp $") NCURSES_EXPORT(int) wsetscrreg(WINDOW *win, int top, int bottom) { T((T_CALLED("wsetscrreg(%p,%d,%d)"), (void *) win, top, bottom)); if (win && top >= 0 && top <= win->_maxy && bottom >= 0 && bottom <= win->_maxy && bottom > top) { win->_regtop = (NCURSES_SIZE_T) top; win->_regbottom = (NCURSES_SIZE_T) bottom; returnCode(OK); } else returnCode(ERR); } ncurses-6.0-20160213/ncurses/base/lib_overlay.c0000644000175100001440000001464012130132001017507 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_overlay.c ** ** The routines overlay(), copywin(), and overwrite(). ** */ #include MODULE_ID("$Id: lib_overlay.c,v 1.31 2013/04/06 23:47:13 tom Exp $") static int overlap(const WINDOW *const src, WINDOW *const dst, int const flag) { int rc = ERR; int sx1, sy1, sx2, sy2; int dx1, dy1, dx2, dy2; int sminrow, smincol; int dminrow, dmincol; int dmaxrow, dmaxcol; T((T_CALLED("overlap(%p,%p,%d)"), (const void *) src, (void *) dst, flag)); if (src != 0 && dst != 0) { _nc_lock_global(curses); T(("src : begy %ld, begx %ld, maxy %ld, maxx %ld", (long) src->_begy, (long) src->_begx, (long) src->_maxy, (long) src->_maxx)); T(("dst : begy %ld, begx %ld, maxy %ld, maxx %ld", (long) dst->_begy, (long) dst->_begx, (long) dst->_maxy, (long) dst->_maxx)); sx1 = src->_begx; sy1 = src->_begy; sx2 = sx1 + src->_maxx; sy2 = sy1 + src->_maxy; dx1 = dst->_begx; dy1 = dst->_begy; dx2 = dx1 + dst->_maxx; dy2 = dy1 + dst->_maxy; if (dx2 >= sx1 && dx1 <= sx2 && dy2 >= sy1 && dy1 <= sy2) { sminrow = max(sy1, dy1) - sy1; smincol = max(sx1, dx1) - sx1; dminrow = max(sy1, dy1) - dy1; dmincol = max(sx1, dx1) - dx1; dmaxrow = min(sy2, dy2) - dy1; dmaxcol = min(sx2, dx2) - dx1; rc = copywin(src, dst, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol, flag); } _nc_unlock_global(curses); } returnCode(rc); } /* ** ** overlay(win1, win2) ** ** ** overlay() writes the overlapping area of win1 behind win2 ** on win2 non-destructively. ** **/ NCURSES_EXPORT(int) overlay(const WINDOW *win1, WINDOW *win2) { T((T_CALLED("overlay(%p,%p)"), (const void *) win1, (void *) win2)); returnCode(overlap(win1, win2, TRUE)); } /* ** ** overwrite(win1, win2) ** ** ** overwrite() writes the overlapping area of win1 behind win2 ** on win2 destructively. ** **/ NCURSES_EXPORT(int) overwrite(const WINDOW *win1, WINDOW *win2) { T((T_CALLED("overwrite(%p,%p)"), (const void *) win1, (void *) win2)); returnCode(overlap(win1, win2, FALSE)); } NCURSES_EXPORT(int) copywin(const WINDOW *src, WINDOW *dst, int sminrow, int smincol, int dminrow, int dmincol, int dmaxrow, int dmaxcol, int over) { int rc = ERR; int sx, sy, dx, dy; bool touched; attr_t bk; attr_t mask; T((T_CALLED("copywin(%p, %p, %d, %d, %d, %d, %d, %d, %d)"), (const void *) src, (void *) dst, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol, over)); if (src != 0 && dst != 0 && dmaxrow >= dminrow && dmaxcol >= dmincol) { _nc_lock_global(curses); bk = AttrOf(dst->_nc_bkgd); mask = ~(attr_t) ((bk & A_COLOR) ? A_COLOR : 0); /* make sure rectangle exists in source */ if ((sminrow + dmaxrow - dminrow) <= (src->_maxy + 1) && (smincol + dmaxcol - dmincol) <= (src->_maxx + 1)) { bool copied = FALSE; T(("rectangle exists in source")); /* make sure rectangle fits in destination */ if (dmaxrow <= dst->_maxy && dmaxcol <= dst->_maxx) { T(("rectangle fits in destination")); for (dy = dminrow, sy = sminrow; dy <= dmaxrow; sy++, dy++) { if (dy < 0 || sy < 0) continue; touched = FALSE; for (dx = dmincol, sx = smincol; dx <= dmaxcol; sx++, dx++) { if (dx < 0 || sx < 0) continue; copied = TRUE; if (over) { if ((CharOf(src->_line[sy].text[sx]) != L(' ')) && (!CharEq(dst->_line[dy].text[dx], src->_line[sy].text[sx]))) { dst->_line[dy].text[dx] = src->_line[sy].text[sx]; SetAttr(dst->_line[dy].text[dx], ((AttrOf(src->_line[sy].text[sx]) & mask) | bk)); touched = TRUE; } } else { if (!CharEq(dst->_line[dy].text[dx], src->_line[sy].text[sx])) { dst->_line[dy].text[dx] = src->_line[sy].text[sx]; touched = TRUE; } } } if (touched) { touchline(dst, dminrow, (dmaxrow - dminrow + 1)); } } T(("finished copywin")); if (copied) rc = OK; } } _nc_unlock_global(curses); } returnCode(rc); } ncurses-6.0-20160213/ncurses/base/lib_slkatron.c0000644000175100001440000000633111354756332017713 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * * and: Thomas E. Dickey 2005 * ****************************************************************************/ /* * lib_slkatron.c * Soft key routines. * Switch on labels attributes */ #include MODULE_ID("$Id: lib_slkatron.c,v 1.12 2010/03/31 23:38:02 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attron) (NCURSES_SP_DCLx const chtype attr) { T((T_CALLED("slk_attron(%p,%s)"), (void *) SP_PARM, _traceattr(attr))); if (SP_PARM != 0 && SP_PARM->_slk != 0) { TR(TRACE_ATTRS, ("... current %s", _tracech_t(CHREF(SP_PARM->_slk->attr)))); AddAttr(SP_PARM->_slk->attr, attr); if ((attr & A_COLOR) != 0) { SetPair(SP_PARM->_slk->attr, PairNumber(attr)); } TR(TRACE_ATTRS, ("new attribute is %s", _tracech_t(CHREF(SP_PARM->_slk->attr)))); returnCode(OK); } else returnCode(ERR); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_attron(const chtype attr) { return NCURSES_SP_NAME(slk_attron) (CURRENT_SCREEN, attr); } #endif ncurses-6.0-20160213/ncurses/base/lib_newterm.c0000644000175100001440000002474612326772107017547 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_newterm.c ** ** The newterm() function. ** */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif #include MODULE_ID("$Id: lib_newterm.c,v 1.92 2014/04/26 18:00:39 tom Exp $") #ifdef USE_TERM_DRIVER #define NumLabels InfoOf(SP_PARM).numlabels #else #define NumLabels num_labels #endif #ifndef ONLCR /* Allows compilation under the QNX 4.2 OS */ #define ONLCR 0 #endif /* * SVr4/XSI Curses specify that hardware echo is turned off in initscr, and not * restored during the curses session. The library simulates echo in software. * (The behavior is unspecified if the application enables hardware echo). * * The newterm function also initializes terminal settings, and since initscr * is supposed to behave as if it calls newterm, we do it here. */ static NCURSES_INLINE int _nc_initscr(NCURSES_SP_DCL0) { int result = ERR; TERMINAL *term = TerminalOf(SP_PARM); /* for extended XPG4 conformance requires cbreak() at this point */ /* (SVr4 curses does this anyway) */ if (NCURSES_SP_NAME(cbreak) (NCURSES_SP_ARG) == OK) { TTY buf; buf = term->Nttyb; #ifdef TERMIOS buf.c_lflag &= (unsigned) ~(ECHO | ECHONL); buf.c_iflag &= (unsigned) ~(ICRNL | INLCR | IGNCR); buf.c_oflag &= (unsigned) ~(ONLCR); #elif HAVE_SGTTY_H buf.sg_flags &= ~(ECHO | CRMOD); #else memset(&buf, 0, sizeof(buf)); #endif result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf); if (result == OK) term->Nttyb = buf; } return result; } /* * filter() has to be called before either initscr() or newterm(), so there is * apparently no way to make this flag apply to some terminals and not others, * aside from possibly delaying a filter() call until some terminals have been * initialized. */ NCURSES_EXPORT(void) NCURSES_SP_NAME(filter) (NCURSES_SP_DCL0) { START_TRACE(); T((T_CALLED("filter(%p)"), (void *) SP_PARM)); #if NCURSES_SP_FUNCS if (IsPreScreen(SP_PARM)) { SP_PARM->_filtered = TRUE; } #else _nc_prescreen.filter_mode = TRUE; #endif returnVoid; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) filter(void) { START_TRACE(); T((T_CALLED("filter()"))); _nc_prescreen.filter_mode = TRUE; returnVoid; } #endif #if NCURSES_EXT_FUNCS /* * An extension, allowing the application to open a new screen without * requiring it to also be filtered. */ NCURSES_EXPORT(void) NCURSES_SP_NAME(nofilter) (NCURSES_SP_DCL0) { START_TRACE(); T((T_CALLED("nofilter(%p)"), (void *) SP_PARM)); #if NCURSES_SP_FUNCS if (IsPreScreen(SP_PARM)) { SP_PARM->_filtered = FALSE; } #else _nc_prescreen.filter_mode = FALSE; #endif returnVoid; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) nofilter(void) { START_TRACE(); T((T_CALLED("nofilter()"))); _nc_prescreen.filter_mode = FALSE; returnVoid; } #endif #endif /* NCURSES_EXT_FUNCS */ NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (NCURSES_SP_DCLx NCURSES_CONST char *name, FILE *ofp, FILE *ifp) { int value; int errret; SCREEN *result = 0; SCREEN *current; TERMINAL *its_term; FILE *_ofp = ofp ? ofp : stdout; FILE *_ifp = ifp ? ifp : stdin; int cols; int slk_format; int filter_mode; TERMINAL *new_term = 0; START_TRACE(); T((T_CALLED("newterm(%p, \"%s\", %p,%p)"), (void *) SP_PARM, (name ? name : ""), (void *) ofp, (void *) ifp)); #if NCURSES_SP_FUNCS assert(SP_PARM != 0); if (SP_PARM == 0) returnSP(SP_PARM); #endif _nc_init_pthreads(); _nc_lock_global(curses); current = CURRENT_SCREEN; its_term = (current ? current->_term : 0); INIT_TERM_DRIVER(); /* this loads the capability entry, then sets LINES and COLS */ if ( TINFO_SETUP_TERM(&new_term, name, fileno(_ofp), &errret, FALSE) != ERR) { _nc_set_screen(0); #ifdef USE_TERM_DRIVER assert(new_term != 0); #endif #if NCURSES_SP_FUNCS slk_format = SP_PARM->slk_format; filter_mode = SP_PARM->_filtered; #else slk_format = _nc_globals.slk_format; filter_mode = _nc_prescreen.filter_mode; #endif /* * This actually allocates the screen structure, and saves the original * terminal settings. */ if (NCURSES_SP_NAME(_nc_setupscreen) ( #if NCURSES_SP_FUNCS &SP_PARM, #endif *(ptrLines(SP_PARM)), *(ptrCols(SP_PARM)), _ofp, filter_mode, slk_format) == ERR) { _nc_set_screen(current); result = 0; } else { #ifdef USE_TERM_DRIVER TERMINAL_CONTROL_BLOCK *TCB; #elif !NCURSES_SP_FUNCS _nc_set_screen(CURRENT_SCREEN); #endif assert(SP_PARM != 0); cols = *(ptrCols(SP_PARM)); #ifdef USE_TERM_DRIVER _nc_set_screen(SP_PARM); TCB = (TERMINAL_CONTROL_BLOCK *) new_term; TCB->csp = SP_PARM; #endif /* * In setupterm() we did a set_curterm(), but it was before we set * CURRENT_SCREEN. So the "current" screen's terminal pointer was * overwritten with a different terminal. Later, in * _nc_setupscreen(), we set CURRENT_SCREEN and the terminal * pointer in the new screen. * * Restore the terminal-pointer for the pre-existing screen, if * any. */ if (current) current->_term = its_term; #ifdef USE_TERM_DRIVER SP_PARM->_term = new_term; #else new_term = SP_PARM->_term; #endif /* allow user to set maximum escape delay from the environment */ if ((value = _nc_getenv_num("ESCDELAY")) >= 0) { NCURSES_SP_NAME(set_escdelay) (NCURSES_SP_ARGx value); } /* if the terminal type has real soft labels, set those up */ if (slk_format && NumLabels > 0 && SLK_STDFMT(slk_format)) _nc_slk_initialize(StdScreen(SP_PARM), cols); SP_PARM->_ifd = fileno(_ifp); NCURSES_SP_NAME(typeahead) (NCURSES_SP_ARGx fileno(_ifp)); #ifdef TERMIOS SP_PARM->_use_meta = ((new_term->Ottyb.c_cflag & CSIZE) == CS8 && !(new_term->Ottyb.c_iflag & ISTRIP)) || USE_KLIBC_KBD; #else SP_PARM->_use_meta = FALSE; #endif SP_PARM->_endwin = FALSE; #ifndef USE_TERM_DRIVER /* * Check whether we can optimize scrolling under dumb terminals in * case we do not have any of these capabilities, scrolling * optimization will be useless. */ SP_PARM->_scrolling = ((scroll_forward && scroll_reverse) || ((parm_rindex || parm_insert_line || insert_line) && (parm_index || parm_delete_line || delete_line))); #endif NCURSES_SP_NAME(baudrate) (NCURSES_SP_ARG); /* sets a field in the screen structure */ SP_PARM->_keytry = 0; /* compute movement costs so we can do better move optimization */ #ifdef USE_TERM_DRIVER TCBOf(SP_PARM)->drv->td_scinit(SP_PARM); #else /* ! USE_TERM_DRIVER */ /* * Check for mismatched graphic-rendition capabilities. Most SVr4 * terminfo trees contain entries that have rmul or rmso equated to * sgr0 (Solaris curses copes with those entries). We do this only * for curses, since many termcap applications assume that * smso/rmso and smul/rmul are paired, and will not function * properly if we remove rmso or rmul. Curses applications * shouldn't be looking at this detail. */ #define SGR0_TEST(mode) (mode != 0) && (exit_attribute_mode == 0 || strcmp(mode, exit_attribute_mode)) SP_PARM->_use_rmso = SGR0_TEST(exit_standout_mode); SP_PARM->_use_rmul = SGR0_TEST(exit_underline_mode); #if USE_ITALIC SP_PARM->_use_ritm = SGR0_TEST(exit_italics_mode); #endif /* compute movement costs so we can do better move optimization */ _nc_mvcur_init(); /* initialize terminal to a sane state */ _nc_screen_init(); #endif /* USE_TERM_DRIVER */ /* Initialize the terminal line settings. */ _nc_initscr(NCURSES_SP_ARG); _nc_signal_handler(TRUE); result = SP_PARM; } } _nc_unlock_global(curses); returnSP(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(SCREEN *) newterm(NCURSES_CONST char *name, FILE *ofp, FILE *ifp) { return NCURSES_SP_NAME(newterm) (CURRENT_SCREEN_PRE, name, ofp, ifp); } #endif ncurses-6.0-20160213/ncurses/base/lib_isendwin.c0000644000175100001440000000565611145661610017677 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_endwin.c ** ** The routine endwin(). ** */ #include MODULE_ID("$Id: lib_isendwin.c,v 1.7 2009/02/15 00:36:24 tom Exp $") NCURSES_EXPORT(bool) NCURSES_SP_NAME(isendwin) (NCURSES_SP_DCL0) { if (SP_PARM == NULL) return FALSE; return SP_PARM->_endwin; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(bool) isendwin(void) { return NCURSES_SP_NAME(isendwin) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/lib_mvwin.c0000644000175100001440000001145011503257162017205 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer * ****************************************************************************/ /* ** lib_mvwin.c ** ** The routine mvwin(). ** */ #include MODULE_ID("$Id: lib_mvwin.c,v 1.18 2010/12/19 01:22:58 tom Exp $") NCURSES_EXPORT(int) mvwin(WINDOW *win, int by, int bx) { #if NCURSES_SP_FUNCS SCREEN *sp = _nc_screen_of(win); #endif T((T_CALLED("mvwin(%p,%d,%d)"), (void *) win, by, bx)); if (!win || (win->_flags & _ISPAD)) returnCode(ERR); /* * mvwin() should only modify the indices. See test/demo_menus.c and * test/movewindow.c for examples. */ #if 0 /* Copying subwindows is allowed, but it is expensive... */ if (win->_flags & _SUBWIN) { int err = ERR; WINDOW *parent = win->_parent; if (parent) { /* Now comes the complicated and costly part, you should really * try to avoid to move subwindows. Because a subwindow shares * the text buffers with its parent, one can't do a simple * memmove of the text buffers. One has to create a copy, then * to relocate the subwindow and then to do a copy. */ if ((by - parent->_begy == win->_pary) && (bx - parent->_begx == win->_parx)) err = OK; /* we don't actually move */ else { WINDOW *clone = dupwin(win); if (clone) { /* now we have the clone, so relocate win */ werase(win); /* Erase the original place */ /* fill with parents background */ wbkgrnd(win, CHREF(parent->_nc_bkgd)); wsyncup(win); /* Tell the parent(s) */ err = mvderwin(win, by - parent->_begy, bx - parent->_begx); if (err != ERR) { err = copywin(clone, win, 0, 0, 0, 0, win->_maxy, win->_maxx, 0); if (ERR != err) wsyncup(win); } if (ERR == delwin(clone)) err = ERR; } } } returnCode(err); } #endif if (by + win->_maxy > screen_lines(SP_PARM) - 1 || bx + win->_maxx > screen_columns(SP_PARM) - 1 || by < 0 || bx < 0) returnCode(ERR); /* * Whether or not the window is moved, touch the window's contents so * that a following call to 'wrefresh()' will paint the window at the * new location. This ensures that if the caller has refreshed another * window at the same location, that this one will be displayed. */ win->_begy = (NCURSES_SIZE_T) by; win->_begx = (NCURSES_SIZE_T) bx; returnCode(touchwin(win)); } ncurses-6.0-20160213/ncurses/base/lib_touch.c0000644000175100001440000000717411764731055017206 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_touch.c ** ** The routines untouchwin(), ** wtouchln(), ** is_linetouched() ** is_wintouched(). ** */ #include MODULE_ID("$Id: lib_touch.c,v 1.12 2012/06/09 20:29:33 tom Exp $") NCURSES_EXPORT(bool) is_linetouched(WINDOW *win, int line) { T((T_CALLED("is_linetouched(%p,%d)"), (void *) win, line)); /* XSI doesn't define any error */ if (!win || (line > win->_maxy) || (line < 0)) returnCode((bool) ERR); returnCode(win->_line[line].firstchar != _NOCHANGE ? TRUE : FALSE); } NCURSES_EXPORT(bool) is_wintouched(WINDOW *win) { int i; T((T_CALLED("is_wintouched(%p)"), (void *) win)); if (win) for (i = 0; i <= win->_maxy; i++) if (win->_line[i].firstchar != _NOCHANGE) returnCode(TRUE); returnCode(FALSE); } NCURSES_EXPORT(int) wtouchln(WINDOW *win, int y, int n, int changed) { int i; T((T_CALLED("wtouchln(%p,%d,%d,%d)"), (void *) win, y, n, changed)); if (!win || (n < 0) || (y < 0) || (y > win->_maxy)) returnCode(ERR); for (i = y; i < y + n; i++) { if (i > win->_maxy) break; win->_line[i].firstchar = (NCURSES_SIZE_T) (changed ? 0 : _NOCHANGE); win->_line[i].lastchar = (NCURSES_SIZE_T) (changed ? win->_maxx : _NOCHANGE); } returnCode(OK); } ncurses-6.0-20160213/ncurses/base/lib_addch.c0000644000175100001440000003660212373740740017123 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* ** lib_addch.c ** ** The routine waddch(). ** */ #include #include MODULE_ID("$Id: lib_addch.c,v 1.129 2014/08/16 20:41:04 tom Exp $") static const NCURSES_CH_T blankchar = NewChar(BLANK_TEXT); /* * Ugly microtweaking alert. Everything from here to end of module is * likely to be speed-critical -- profiling data sure says it is! * Most of the important screen-painting functions are shells around * waddch(). So we make every effort to reduce function-call overhead * by inlining stuff, even at the cost of making wrapped copies for * export. Also we supply some internal versions that don't call the * window sync hook, for use by string-put functions. */ /* Return bit mask for clearing color pair number if given ch has color */ #define COLOR_MASK(ch) (~(attr_t)((ch) & A_COLOR ? A_COLOR : 0)) static NCURSES_INLINE NCURSES_CH_T render_char(WINDOW *win, NCURSES_CH_T ch) /* compute a rendition of the given char correct for the current context */ { attr_t a = WINDOW_ATTRS(win); int pair = GetPair(ch); if (ISBLANK(ch) && AttrOf(ch) == A_NORMAL && pair == 0) { /* color/pair in attrs has precedence over bkgrnd */ ch = win->_nc_bkgd; SetAttr(ch, a | AttrOf(win->_nc_bkgd)); if ((pair = GET_WINDOW_PAIR(win)) == 0) pair = GetPair(win->_nc_bkgd); SetPair(ch, pair); } else { /* color in attrs has precedence over bkgrnd */ a |= AttrOf(win->_nc_bkgd) & COLOR_MASK(a); /* color in ch has precedence */ if (pair == 0) { if ((pair = GET_WINDOW_PAIR(win)) == 0) pair = GetPair(win->_nc_bkgd); } AddAttr(ch, (a & COLOR_MASK(AttrOf(ch)))); SetPair(ch, pair); } TR(TRACE_VIRTPUT, ("render_char bkg %s (%d), attrs %s (%d) -> ch %s (%d)", _tracech_t2(1, CHREF(win->_nc_bkgd)), GetPair(win->_nc_bkgd), _traceattr(WINDOW_ATTRS(win)), GET_WINDOW_PAIR(win), _tracech_t2(3, CHREF(ch)), GetPair(ch))); return (ch); } NCURSES_EXPORT(NCURSES_CH_T) _nc_render(WINDOW *win, NCURSES_CH_T ch) /* make render_char() visible while still allowing us to inline it below */ { return render_char(win, ch); } /* check if position is legal; if not, return error */ #ifndef NDEBUG /* treat this like an assertion */ #define CHECK_POSITION(win, x, y) \ if (y > win->_maxy \ || x > win->_maxx \ || y < 0 \ || x < 0) { \ TR(TRACE_VIRTPUT, ("Alert! Win=%p _curx = %d, _cury = %d " \ "(_maxx = %d, _maxy = %d)", win, x, y, \ win->_maxx, win->_maxy)); \ return(ERR); \ } #else #define CHECK_POSITION(win, x, y) /* nothing */ #endif static bool newline_forces_scroll(WINDOW *win, NCURSES_SIZE_T * ypos) { bool result = FALSE; if (*ypos >= win->_regtop && *ypos == win->_regbottom) { *ypos = win->_regbottom; result = TRUE; } else { *ypos = (NCURSES_SIZE_T) (*ypos + 1); } return result; } /* * The _WRAPPED flag is useful only for telling an application that we've just * wrapped the cursor. We don't do anything with this flag except set it when * wrapping, and clear it whenever we move the cursor. If we try to wrap at * the lower-right corner of a window, we cannot move the cursor (since that * wouldn't be legal). So we return an error (which is what SVr4 does). * Unlike SVr4, we can successfully add a character to the lower-right corner * (Solaris 2.6 does this also, however). */ static int wrap_to_next_line(WINDOW *win) { win->_flags |= _WRAPPED; if (newline_forces_scroll(win, &(win->_cury))) { win->_curx = win->_maxx; if (!win->_scroll) return (ERR); scroll(win); } win->_curx = 0; return (OK); } #if USE_WIDEC_SUPPORT static int waddch_literal(WINDOW *, NCURSES_CH_T); /* * Fill the given number of cells with blanks using the current background * rendition. This saves/restores the current x-position. */ static void fill_cells(WINDOW *win, int count) { NCURSES_CH_T blank = blankchar; int save_x = win->_curx; int save_y = win->_cury; while (count-- > 0) { if (waddch_literal(win, blank) == ERR) break; } win->_curx = (NCURSES_SIZE_T) save_x; win->_cury = (NCURSES_SIZE_T) save_y; } #endif /* * Build up the bytes for a multibyte character, returning the length when * complete (a positive number), -1 for error and -2 for incomplete. */ #if USE_WIDEC_SUPPORT NCURSES_EXPORT(int) _nc_build_wch(WINDOW *win, ARG_CH_T ch) { char *buffer = WINDOW_EXT(win, addch_work); int len; int x = win->_curx; int y = win->_cury; mbstate_t state; wchar_t result; if ((WINDOW_EXT(win, addch_used) != 0) && (WINDOW_EXT(win, addch_x) != x || WINDOW_EXT(win, addch_y) != y)) { /* discard the incomplete multibyte character */ WINDOW_EXT(win, addch_used) = 0; TR(TRACE_VIRTPUT, ("Alert discarded multibyte on move (%d,%d) -> (%d,%d)", WINDOW_EXT(win, addch_y), WINDOW_EXT(win, addch_x), y, x)); } WINDOW_EXT(win, addch_x) = x; WINDOW_EXT(win, addch_y) = y; init_mb(state); buffer[WINDOW_EXT(win, addch_used)] = (char) CharOf(CHDEREF(ch)); WINDOW_EXT(win, addch_used) += 1; buffer[WINDOW_EXT(win, addch_used)] = '\0'; if ((len = (int) mbrtowc(&result, buffer, (size_t) WINDOW_EXT(win, addch_used), &state)) > 0) { attr_t attrs = AttrOf(CHDEREF(ch)); if_EXT_COLORS(int pair = GetPair(CHDEREF(ch))); SetChar(CHDEREF(ch), result, attrs); if_EXT_COLORS(SetPair(CHDEREF(ch), pair)); WINDOW_EXT(win, addch_used) = 0; } else if (len == -1) { /* * An error occurred. We could either discard everything, * or assume that the error was in the previous input. * Try the latter. */ TR(TRACE_VIRTPUT, ("Alert! mbrtowc returns error")); /* handle this with unctrl() */ WINDOW_EXT(win, addch_used) = 0; } return len; } #endif /* USE_WIDEC_SUPPORT */ static #if !USE_WIDEC_SUPPORT /* cannot be inline if it is recursive */ NCURSES_INLINE #endif int waddch_literal(WINDOW *win, NCURSES_CH_T ch) { int x; int y; struct ldat *line; x = win->_curx; y = win->_cury; CHECK_POSITION(win, x, y); ch = render_char(win, ch); line = win->_line + y; CHANGED_CELL(line, x); /* * Build up multibyte characters until we have a wide-character. */ #if NCURSES_SP_FUNCS #define DeriveSP() SCREEN *sp = _nc_screen_of(win); #else #define DeriveSP() /*nothing */ #endif if_WIDEC({ DeriveSP(); if (WINDOW_EXT(win, addch_used) != 0 || !Charable(ch)) { int len = _nc_build_wch(win, CHREF(ch)); if (len >= -1) { attr_t attr = AttrOf(ch); /* handle EILSEQ (i.e., when len >= -1) */ if (len == -1 && is8bits(CharOf(ch))) { int rc = OK; const char *s = NCURSES_SP_NAME(unctrl) (NCURSES_SP_ARGx (chtype) CharOf(ch)); if (s[1] != '\0') { while (*s != '\0') { rc = waddch(win, UChar(*s) | attr); if (rc != OK) break; ++s; } return rc; } } if (len == -1) return waddch(win, ' ' | attr); } else { return OK; } } }); /* * Non-spacing characters are added to the current cell. * * Spacing characters that are wider than one column require some display * adjustments. */ if_WIDEC({ int len = wcwidth(CharOf(ch)); int i; int j; wchar_t *chars; if (len == 0) { /* non-spacing */ if ((x > 0 && y >= 0) || (win->_maxx >= 0 && win->_cury >= 1)) { if (x > 0 && y >= 0) chars = (win->_line[y].text[x - 1].chars); else chars = (win->_line[y - 1].text[win->_maxx].chars); for (i = 0; i < CCHARW_MAX; ++i) { if (chars[i] == 0) { TR(TRACE_VIRTPUT, ("added non-spacing %d: %x", x, (int) CharOf(ch))); chars[i] = CharOf(ch); break; } } } goto testwrapping; } else if (len > 1) { /* multi-column characters */ /* * Check if the character will fit on the current line. If it does * not fit, fill in the remainder of the line with blanks. and * move to the next line. */ if (len > win->_maxx + 1) { TR(TRACE_VIRTPUT, ("character will not fit")); return ERR; } else if (x + len > win->_maxx + 1) { int count = win->_maxx + 1 - x; TR(TRACE_VIRTPUT, ("fill %d remaining cells", count)); fill_cells(win, count); if (wrap_to_next_line(win) == ERR) return ERR; x = win->_curx; y = win->_cury; line = win->_line + y; } /* * Check for cells which are orphaned by adding this character, set * those to blanks. * * FIXME: this actually could fill j-i cells, more complicated to * setup though. */ for (i = 0; i < len; ++i) { if (isWidecBase(win->_line[y].text[x + i])) { break; } else if (isWidecExt(win->_line[y].text[x + i])) { for (j = i; x + j <= win->_maxx; ++j) { if (!isWidecExt(win->_line[y].text[x + j])) { TR(TRACE_VIRTPUT, ("fill %d orphan cells", j)); fill_cells(win, j); break; } } break; } } /* * Finally, add the cells for this character. */ for (i = 0; i < len; ++i) { NCURSES_CH_T value = ch; SetWidecExt(value, i); TR(TRACE_VIRTPUT, ("multicolumn %d:%d (%d,%d)", i + 1, len, win->_begy + y, win->_begx + x)); line->text[x] = value; CHANGED_CELL(line, x); ++x; } goto testwrapping; } }); /* * Single-column characters. */ line->text[x++] = ch; /* * This label is used only for wide-characters. */ if_WIDEC( testwrapping: ); TR(TRACE_VIRTPUT, ("cell (%ld, %ld..%d) = %s", (long) win->_cury, (long) win->_curx, x - 1, _tracech_t(CHREF(ch)))); if (x > win->_maxx) { return wrap_to_next_line(win); } win->_curx = (NCURSES_SIZE_T) x; return OK; } static NCURSES_INLINE int waddch_nosync(WINDOW *win, const NCURSES_CH_T ch) /* the workhorse function -- add a character to the given window */ { NCURSES_SIZE_T x, y; chtype t = (chtype) CharOf(ch); #if USE_WIDEC_SUPPORT || NCURSES_SP_FUNCS || USE_REENTRANT SCREEN *sp = _nc_screen_of(win); #endif const char *s = NCURSES_SP_NAME(unctrl) (NCURSES_SP_ARGx t); int tabsize = 8; /* * If we are using the alternate character set, forget about locale. * Otherwise, if unctrl() returns a single-character or the locale * claims the code is printable (and not also a control character), * treat it that way. */ if ((AttrOf(ch) & A_ALTCHARSET) || ( #if USE_WIDEC_SUPPORT (sp != 0 && sp->_legacy_coding) && #endif s[1] == 0 ) || ( (isprint((int)t) && !iscntrl((int)t)) #if USE_WIDEC_SUPPORT || ((sp == 0 || !sp->_legacy_coding) && (WINDOW_EXT(win, addch_used) || !_nc_is_charable(CharOf(ch)))) #endif )) { return waddch_literal(win, ch); } /* * Handle carriage control and other codes that are not printable, or are * known to expand to more than one character according to unctrl(). */ x = win->_curx; y = win->_cury; switch (t) { case '\t': #if USE_REENTRANT tabsize = *ptrTabsize(sp); #else tabsize = TABSIZE; #endif x = (NCURSES_SIZE_T) (x + (tabsize - (x % tabsize))); /* * Space-fill the tab on the bottom line so that we'll get the * "correct" cursor position. */ if ((!win->_scroll && (y == win->_regbottom)) || (x <= win->_maxx)) { NCURSES_CH_T blank = blankchar; AddAttr(blank, AttrOf(ch)); while (win->_curx < x) { if (waddch_literal(win, blank) == ERR) return (ERR); } break; } else { wclrtoeol(win); win->_flags |= _WRAPPED; if (newline_forces_scroll(win, &y)) { x = win->_maxx; if (win->_scroll) { scroll(win); x = 0; } } else { x = 0; } } break; case '\n': wclrtoeol(win); if (newline_forces_scroll(win, &y)) { if (win->_scroll) scroll(win); else return (ERR); } /* FALLTHRU */ case '\r': x = 0; win->_flags &= ~_WRAPPED; break; case '\b': if (x == 0) return (OK); x--; win->_flags &= ~_WRAPPED; break; default: while (*s) { NCURSES_CH_T sch; SetChar(sch, UChar(*s++), AttrOf(ch)); if_EXT_COLORS(SetPair(sch, GetPair(ch))); if (waddch_literal(win, sch) == ERR) return ERR; } return (OK); } win->_curx = x; win->_cury = y; return (OK); } NCURSES_EXPORT(int) _nc_waddch_nosync(WINDOW *win, const NCURSES_CH_T c) /* export copy of waddch_nosync() so the string-put functions can use it */ { return (waddch_nosync(win, c)); } /* * The versions below call _nc_synchook(). We wanted to avoid this in the * version exported for string puts; they'll call _nc_synchook once at end * of run. */ /* These are actual entry points */ NCURSES_EXPORT(int) waddch(WINDOW *win, const chtype ch) { int code = ERR; NCURSES_CH_T wch; SetChar2(wch, ch); TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_CALLED("waddch(%p, %s)"), (void *) win, _tracechtype(ch))); if (win && (waddch_nosync(win, wch) != ERR)) { _nc_synchook(win); code = OK; } TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_RETURN("%d"), code)); return (code); } NCURSES_EXPORT(int) wechochar(WINDOW *win, const chtype ch) { int code = ERR; NCURSES_CH_T wch; SetChar2(wch, ch); TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_CALLED("wechochar(%p, %s)"), (void *) win, _tracechtype(ch))); if (win && (waddch_nosync(win, wch) != ERR)) { bool save_immed = win->_immed; win->_immed = TRUE; _nc_synchook(win); win->_immed = save_immed; code = OK; } TR(TRACE_VIRTPUT | TRACE_CCALLS, (T_RETURN("%d"), code)); return (code); } ncurses-6.0-20160213/ncurses/base/lib_inchstr.c0000644000175100001440000000604511503531545017523 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* ** lib_inchstr.c ** ** The routine winchnstr(). ** */ #include MODULE_ID("$Id: lib_inchstr.c,v 1.12 2010/12/20 01:37:41 tom Exp $") NCURSES_EXPORT(int) winchnstr(WINDOW *win, chtype *str, int n) { int i = 0; T((T_CALLED("winchnstr(%p,%p,%d)"), (void *) win, (void *) str, n)); if (!str) returnCode(0); if (win) { for (; (n < 0 || (i < n)) && (win->_curx + i <= win->_maxx); i++) str[i] = (chtype) CharOf(win->_line[win->_cury].text[win->_curx + i]) | AttrOf(win->_line[win->_cury].text[win->_curx + i]); } str[i] = (chtype) 0; returnCode(i); } ncurses-6.0-20160213/ncurses/base/lib_slkatr_set.c0000644000175100001440000000701712273270342020224 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1998 * * and: Thomas E. Dickey 2005-on * ****************************************************************************/ /* * lib_slkatr_set.c * Soft key routines. * Set the label's attributes */ #include MODULE_ID("$Id: lib_slkatr_set.c,v 1.15 2014/02/01 22:10:42 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attr_set) (NCURSES_SP_DCLx const attr_t attr, NCURSES_PAIRS_T color_pair_number, void *opts) { int code = ERR; T((T_CALLED("slk_attr_set(%p,%s,%d)"), (void *) SP_PARM, _traceattr(attr), (int) color_pair_number)); if (SP_PARM != 0 && SP_PARM->_slk != 0 && !opts && color_pair_number >= 0 && color_pair_number < SP_PARM->_pair_limit) { TR(TRACE_ATTRS, ("... current %s", _tracech_t(CHREF(SP_PARM->_slk->attr)))); SetAttr(SP_PARM->_slk->attr, attr); if (color_pair_number > 0) { SetPair(SP_PARM->_slk->attr, color_pair_number); } TR(TRACE_ATTRS, ("new attribute is %s", _tracech_t(CHREF(SP_PARM->_slk->attr)))); code = OK; } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_attr_set(const attr_t attr, NCURSES_COLOR_T color_pair_number, void *opts) { return NCURSES_SP_NAME(slk_attr_set) (CURRENT_SCREEN, attr, color_pair_number, opts); } #endif ncurses-6.0-20160213/ncurses/base/lib_colorset.c0000644000175100001440000000603612273270342017703 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1998 * * and: Thomas E. Dickey, 2005-on * ****************************************************************************/ /* ** lib_colorset.c ** ** The routine wcolor_set(). ** */ #include #include MODULE_ID("$Id: lib_colorset.c,v 1.14 2014/02/01 22:10:42 tom Exp $") NCURSES_EXPORT(int) wcolor_set(WINDOW *win, NCURSES_PAIRS_T color_pair_number, void *opts) { int code = ERR; T((T_CALLED("wcolor_set(%p,%d)"), (void *) win, (int) color_pair_number)); if (win && !opts && (SP != 0) && (color_pair_number >= 0) && (color_pair_number < SP->_pair_limit)) { TR(TRACE_ATTRS, ("... current %ld", (long) GET_WINDOW_PAIR(win))); SET_WINDOW_PAIR(win, color_pair_number); if_EXT_COLORS(win->_color = color_pair_number); code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_set_term.c0000644000175100001440000005072312650770520017677 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_set_term.c ** ** The routine set_term(). ** */ #include #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_set_term.c,v 1.154 2016/01/23 21:32:00 tom Exp $") #ifdef USE_TERM_DRIVER #define MaxColors InfoOf(sp).maxcolors #define NumLabels InfoOf(sp).numlabels #else #define MaxColors max_colors #define NumLabels num_labels #endif NCURSES_EXPORT(SCREEN *) set_term(SCREEN *screenp) { SCREEN *oldSP; SCREEN *newSP; T((T_CALLED("set_term(%p)"), (void *) screenp)); _nc_lock_global(curses); oldSP = CURRENT_SCREEN; _nc_set_screen(screenp); newSP = screenp; if (newSP != 0) { TINFO_SET_CURTERM(newSP, newSP->_term); #if !USE_REENTRANT curscr = CurScreen(newSP); newscr = NewScreen(newSP); stdscr = StdScreen(newSP); COLORS = newSP->_color_count; COLOR_PAIRS = newSP->_pair_count; #endif } else { TINFO_SET_CURTERM(oldSP, 0); #if !USE_REENTRANT curscr = 0; newscr = 0; stdscr = 0; COLORS = 0; COLOR_PAIRS = 0; #endif } _nc_unlock_global(curses); T((T_RETURN("%p"), (void *) oldSP)); return (oldSP); } static void _nc_free_keytry(TRIES * kt) { if (kt != 0) { _nc_free_keytry(kt->child); _nc_free_keytry(kt->sibling); free(kt); } } static bool delink_screen(SCREEN *sp) { SCREEN *last = 0; SCREEN *temp; bool result = FALSE; for (each_screen(temp)) { if (temp == sp) { if (last) last->_next_screen = sp->_next_screen; else _nc_screen_chain = sp->_next_screen; result = TRUE; break; } last = temp; } return result; } /* * Free the storage associated with the given SCREEN sp. */ NCURSES_EXPORT(void) delscreen(SCREEN *sp) { int i; T((T_CALLED("delscreen(%p)"), (void *) sp)); _nc_lock_global(curses); if (delink_screen(sp)) { #ifdef USE_SP_RIPOFF ripoff_t *rop; if (safe_ripoff_sp && safe_ripoff_sp != safe_ripoff_stack) { for (rop = safe_ripoff_stack; rop != safe_ripoff_sp && (rop - safe_ripoff_stack) < N_RIPS; rop++) { if (rop->win) { (void) delwin(rop->win); rop->win = 0; } } } #endif (void) _nc_freewin(CurScreen(sp)); (void) _nc_freewin(NewScreen(sp)); (void) _nc_freewin(StdScreen(sp)); if (sp->_slk != 0) { if (sp->_slk->ent != 0) { for (i = 0; i < sp->_slk->labcnt; ++i) { FreeIfNeeded(sp->_slk->ent[i].ent_text); FreeIfNeeded(sp->_slk->ent[i].form_text); } free(sp->_slk->ent); } free(sp->_slk); sp->_slk = 0; } _nc_free_keytry(sp->_keytry); sp->_keytry = 0; _nc_free_keytry(sp->_key_ok); sp->_key_ok = 0; FreeIfNeeded(sp->_current_attr); FreeIfNeeded(sp->_color_table); FreeIfNeeded(sp->_color_pairs); FreeIfNeeded(sp->oldhash); FreeIfNeeded(sp->newhash); FreeIfNeeded(sp->hashtab); FreeIfNeeded(sp->_acs_map); FreeIfNeeded(sp->_screen_acs_map); NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG); NCURSES_SP_NAME(del_curterm) (NCURSES_SP_ARGx sp->_term); FreeIfNeeded(sp->out_buffer); free(sp); /* * If this was the current screen, reset everything that the * application might try to use (except cur_term, which may have * multiple references in different screens). */ if (sp == CURRENT_SCREEN) { #if !USE_REENTRANT curscr = 0; newscr = 0; stdscr = 0; COLORS = 0; COLOR_PAIRS = 0; #endif _nc_set_screen(0); #if USE_WIDEC_SUPPORT if (SP == 0) { FreeIfNeeded(_nc_wacs); _nc_wacs = 0; } #endif } } _nc_unlock_global(curses); returnVoid; } static bool no_mouse_event(SCREEN *sp GCC_UNUSED) { return FALSE; } static bool no_mouse_inline(SCREEN *sp GCC_UNUSED) { return FALSE; } static bool no_mouse_parse(SCREEN *sp GCC_UNUSED, int code GCC_UNUSED) { return TRUE; } static void no_mouse_resume(SCREEN *sp GCC_UNUSED) { } static void no_mouse_wrap(SCREEN *sp GCC_UNUSED) { } #if NCURSES_EXT_FUNCS && USE_COLORFGBG static const char * extract_fgbg(const char *src, int *result) { const char *dst = 0; char *tmp = 0; long value = strtol(src, &tmp, 0); if ((dst = tmp) == 0) { dst = src; } else if (value >= 0) { *result = value; } while (*dst != 0 && *dst != ';') dst++; if (*dst == ';') dst++; return dst; } #endif #define ReturnScreenError() do { _nc_set_screen(0); \ returnCode(ERR); } while (0) /* OS-independent screen initializations */ NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_setupscreen) ( #if NCURSES_SP_FUNCS SCREEN **spp, #endif int slines, int scolumns, FILE *output, int filtered, int slk_format) { char *env; int bottom_stolen = 0; ripoff_t *rop; SCREEN *sp; #ifndef USE_TERM_DRIVER bool support_cookies = USE_XMC_SUPPORT; #endif T((T_CALLED("_nc_setupscreen(%d, %d, %p, %d, %d)"), slines, scolumns, (void *) output, filtered, slk_format)); assert(CURRENT_SCREEN == 0); /* has been reset in newterm() ! */ #if NCURSES_SP_FUNCS assert(spp != 0); sp = *spp; if (!sp) { sp = _nc_alloc_screen_sp(); *spp = sp; } if (!sp || ((sp->_acs_map = typeCalloc(chtype, ACS_LEN)) == 0) || ((sp->_screen_acs_map = typeCalloc(bool, ACS_LEN)) == 0)) { ReturnScreenError(); } T(("created SP %p", (void *) sp)); sp->_next_screen = _nc_screen_chain; _nc_screen_chain = sp; if ((sp->_current_attr = typeCalloc(NCURSES_CH_T, 1)) == 0) { ReturnScreenError(); } #else if (!_nc_alloc_screen() || ((SP->_acs_map = typeCalloc(chtype, ACS_LEN)) == 0) || ((SP->_screen_acs_map = typeCalloc(bool, ACS_LEN)) == 0)) { returnCode(ERR); } T(("created SP %p", (void *) SP)); sp = SP; /* fixup so SET_LINES and SET_COLS works */ sp->_next_screen = _nc_screen_chain; _nc_screen_chain = sp; if ((sp->_current_attr = typeCalloc(NCURSES_CH_T, 1)) == 0) returnCode(ERR); #endif /* * We should always check the screensize, just in case. */ _nc_set_screen(sp); sp->_term = cur_term; #ifdef USE_TERM_DRIVER TCBOf(sp)->csp = sp; _nc_get_screensize(sp, sp->_term, &slines, &scolumns); #else _nc_get_screensize(sp, &slines, &scolumns); #endif SET_LINES(slines); SET_COLS(scolumns); T((T_CREATE("screen %s %dx%d"), NCURSES_SP_NAME(termname) (NCURSES_SP_ARG), slines, scolumns)); sp->_filtered = filtered; /* implement filter mode */ if (filtered) { slines = 1; SET_LINES(slines); #ifdef USE_TERM_DRIVER CallDriver(sp, td_setfilter); #else clear_screen = 0; cursor_down = parm_down_cursor = 0; cursor_address = 0; cursor_up = parm_up_cursor = 0; row_address = 0; cursor_home = carriage_return; #endif T(("filter screensize %dx%d", slines, scolumns)); } #ifdef __DJGPP__ T(("setting output mode to binary")); fflush(output); setmode(output, O_BINARY); #endif NCURSES_SP_NAME(_nc_set_buffer) (NCURSES_SP_ARGx output, TRUE); sp->_lines = (NCURSES_SIZE_T) slines; sp->_lines_avail = (NCURSES_SIZE_T) slines; sp->_columns = (NCURSES_SIZE_T) scolumns; fflush(output); sp->_ofd = output ? fileno(output) : -1; sp->_ofp = output; sp->out_limit = (size_t) ((2 + slines) * (6 + scolumns)); if ((sp->out_buffer = malloc(sp->out_limit)) == 0) sp->out_limit = 0; sp->out_inuse = 0; SP_PRE_INIT(sp); SetNoPadding(sp); #if NCURSES_EXT_FUNCS sp->_default_color = FALSE; sp->_has_sgr_39_49 = FALSE; /* * Set our assumption of the terminal's default foreground and background * colors. The curs_color man-page states that we can assume that the * background is black. The origin of this assumption appears to be * terminals that displayed colored text, but no colored backgrounds, e.g., * the first colored terminals around 1980. More recent ones with better * technology can display not only colored backgrounds, but all * combinations. So a terminal might be something other than "white" on * black (green/black looks monochrome too), but black on white or even * on ivory. * * White-on-black is the simplest thing to use for monochrome. Almost * all applications that use color paint both text and background, so * the distinction is moot. But a few do not - which is why we leave this * configurable (a better solution is to use assume_default_colors() for * the rare applications that do require that sort of appearance, since * is appears that more users expect to be able to make a white-on-black * or black-on-white display under control of the application than not). */ #ifdef USE_ASSUMED_COLOR sp->_default_fg = COLOR_WHITE; sp->_default_bg = COLOR_BLACK; #else sp->_default_fg = C_MASK; sp->_default_bg = C_MASK; #endif /* * Allow those assumed/default color assumptions to be overridden at * runtime: */ if ((env = getenv("NCURSES_ASSUMED_COLORS")) != 0) { int fg, bg; char sep1, sep2; int count = sscanf(env, "%d%c%d%c", &fg, &sep1, &bg, &sep2); if (count >= 1) { sp->_default_fg = ((fg >= 0 && fg < MaxColors) ? fg : C_MASK); if (count >= 3) { sp->_default_bg = ((bg >= 0 && bg < MaxColors) ? bg : C_MASK); } TR(TRACE_CHARPUT | TRACE_MOVE, ("from environment assumed fg=%d, bg=%d", sp->_default_fg, sp->_default_bg)); } } #if USE_COLORFGBG /* * If rxvt's $COLORFGBG variable is set, use it to specify the assumed * default colors. Note that rxvt (mis)uses bold colors, equating a bold * color to that value plus 8. We'll only use the non-bold color for now - * decide later if it is worth having default attributes as well. */ if (getenv("COLORFGBG") != 0) { const char *p = getenv("COLORFGBG"); TR(TRACE_CHARPUT | TRACE_MOVE, ("decoding COLORFGBG %s", p)); p = extract_fgbg(p, &(sp->_default_fg)); p = extract_fgbg(p, &(sp->_default_bg)); if (*p) /* assume rxvt was compiled with xpm support */ p = extract_fgbg(p, &(sp->_default_bg)); TR(TRACE_CHARPUT | TRACE_MOVE, ("decoded fg=%d, bg=%d", sp->_default_fg, sp->_default_bg)); if (sp->_default_fg >= MaxColors) { if (set_a_foreground != ABSENT_STRING && !strcmp(set_a_foreground, "\033[3%p1%dm")) { set_a_foreground = strdup("\033[3%?%p1%{8}%>%t9%e%p1%d%;m"); } else { sp->_default_fg %= MaxColors; } } if (sp->_default_bg >= MaxColors) { if (set_a_background != ABSENT_STRING && !strcmp(set_a_background, "\033[4%p1%dm")) { set_a_background = strdup("\033[4%?%p1%{8}%>%t9%e%p1%d%;m"); } else { sp->_default_bg %= MaxColors; } } } #endif #endif /* NCURSES_EXT_FUNCS */ sp->_maxclick = DEFAULT_MAXCLICK; sp->_mouse_event = no_mouse_event; sp->_mouse_inline = no_mouse_inline; sp->_mouse_parse = no_mouse_parse; sp->_mouse_resume = no_mouse_resume; sp->_mouse_wrap = no_mouse_wrap; sp->_mouse_fd = -1; /* * If we've no magic cookie support, we suppress attributes that xmc would * affect, i.e., the attributes that affect the rendition of a space. */ sp->_ok_attributes = NCURSES_SP_NAME(termattrs) (NCURSES_SP_ARG); if (NCURSES_SP_NAME(has_colors) (NCURSES_SP_ARG)) { sp->_ok_attributes |= A_COLOR; } #ifdef USE_TERM_DRIVER _nc_cookie_init(sp); #else #if USE_XMC_SUPPORT /* * If we have no magic-cookie support compiled-in, or if it is suppressed * in the environment, reset the support-flag. */ if (magic_cookie_glitch >= 0) { if (getenv("NCURSES_NO_MAGIC_COOKIE") != 0) { support_cookies = FALSE; } } #endif if (!support_cookies && magic_cookie_glitch >= 0) { T(("will disable attributes to work w/o magic cookies")); } if (magic_cookie_glitch > 0) { /* tvi, wyse */ sp->_xmc_triggers = sp->_ok_attributes & XMC_CONFLICT; #if 0 /* * We "should" treat colors as an attribute. The wyse350 (and its * clones) appear to be the only ones that have both colors and magic * cookies. */ if (has_colors()) { sp->_xmc_triggers |= A_COLOR; } #endif sp->_xmc_suppress = sp->_xmc_triggers & (chtype) ~(A_BOLD); T(("magic cookie attributes %s", _traceattr(sp->_xmc_suppress))); /* * Supporting line-drawing may be possible. But make the regular * video attributes work first. */ acs_chars = ABSENT_STRING; ena_acs = ABSENT_STRING; enter_alt_charset_mode = ABSENT_STRING; exit_alt_charset_mode = ABSENT_STRING; #if USE_XMC_SUPPORT /* * To keep the cookie support simple, suppress all of the optimization * hooks except for clear_screen and the cursor addressing. */ if (support_cookies) { clr_eol = ABSENT_STRING; clr_eos = ABSENT_STRING; set_attributes = ABSENT_STRING; } #endif } else if (magic_cookie_glitch == 0) { /* hpterm */ } /* * If magic cookies are not supported, cancel the strings that set * video attributes. */ if (!support_cookies && magic_cookie_glitch >= 0) { magic_cookie_glitch = ABSENT_NUMERIC; set_attributes = ABSENT_STRING; enter_blink_mode = ABSENT_STRING; enter_bold_mode = ABSENT_STRING; enter_dim_mode = ABSENT_STRING; enter_reverse_mode = ABSENT_STRING; enter_standout_mode = ABSENT_STRING; enter_underline_mode = ABSENT_STRING; } /* initialize normal acs before wide, since we use mapping in the latter */ #if !USE_WIDEC_SUPPORT if (_nc_unicode_locale() && _nc_locale_breaks_acs(sp->_term)) { acs_chars = NULL; ena_acs = NULL; enter_alt_charset_mode = NULL; exit_alt_charset_mode = NULL; set_attributes = NULL; } #endif #endif NCURSES_SP_NAME(_nc_init_acs) (NCURSES_SP_ARG); #if USE_WIDEC_SUPPORT sp->_screen_unicode = _nc_unicode_locale(); if (_nc_wacs == 0) { _nc_init_wacs(); } if (_nc_wacs == 0) { ReturnScreenError(); } sp->_screen_acs_fix = (sp->_screen_unicode && _nc_locale_breaks_acs(sp->_term)); #endif env = _nc_get_locale(); sp->_legacy_coding = ((env == 0) || !strcmp(env, "C") || !strcmp(env, "POSIX")); T(("legacy-coding %d", sp->_legacy_coding)); sp->_nc_sp_idcok = TRUE; sp->_nc_sp_idlok = FALSE; sp->oldhash = 0; sp->newhash = 0; T(("creating newscr")); NewScreen(sp) = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx slines, scolumns, 0, 0); if (NewScreen(sp) == 0) { ReturnScreenError(); } T(("creating curscr")); CurScreen(sp) = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx slines, scolumns, 0, 0); if (CurScreen(sp) == 0) { ReturnScreenError(); } #if !USE_REENTRANT newscr = NewScreen(sp); curscr = CurScreen(sp); #endif #if USE_SIZECHANGE sp->_resize = NCURSES_SP_NAME(resizeterm); sp->_ungetch = safe_ungetch; #endif NewScreen(sp)->_clear = TRUE; CurScreen(sp)->_clear = FALSE; NCURSES_SP_NAME(def_shell_mode) (NCURSES_SP_ARG); NCURSES_SP_NAME(def_prog_mode) (NCURSES_SP_ARG); if (safe_ripoff_sp && safe_ripoff_sp != safe_ripoff_stack) { for (rop = safe_ripoff_stack; rop != safe_ripoff_sp && (rop - safe_ripoff_stack) < N_RIPS; rop++) { /* If we must simulate soft labels, grab off the line to be used. We assume that we must simulate, if it is none of the standard formats (4-4 or 3-2-3) for which there may be some hardware support. */ if (rop->hook == _nc_slk_initialize) { if (!(NumLabels <= 0 || !SLK_STDFMT(slk_format))) { continue; } } if (rop->hook) { int count; WINDOW *w; count = (rop->line < 0) ? -rop->line : rop->line; T(("ripping off %i lines at %s", count, ((rop->line < 0) ? "bottom" : "top"))); w = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx count, scolumns, ((rop->line < 0) ? sp->_lines_avail - count : 0), 0); if (w) { rop->win = w; rop->hook(w, scolumns); } else { ReturnScreenError(); } if (rop->line < 0) { bottom_stolen += count; } else { sp->_topstolen = (NCURSES_SIZE_T) (sp->_topstolen + count); } sp->_lines_avail = (NCURSES_SIZE_T) (sp->_lines_avail - count); } } /* reset the stack */ safe_ripoff_sp = safe_ripoff_stack; } T(("creating stdscr")); assert((sp->_lines_avail + sp->_topstolen + bottom_stolen) == slines); if ((StdScreen(sp) = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx sp->_lines_avail, scolumns, 0, 0)) == 0) { ReturnScreenError(); } SET_LINES(sp->_lines_avail); #if !USE_REENTRANT stdscr = StdScreen(sp); #endif sp->_prescreen = FALSE; returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_setupscreen(int slines GCC_UNUSED, int scolumns GCC_UNUSED, FILE *output, int filtered, int slk_format) { SCREEN *sp = 0; int rc = NCURSES_SP_NAME(_nc_setupscreen) (&sp, slines, scolumns, output, filtered, slk_format); if (rc != OK) _nc_set_screen(0); return rc; } #endif /* * The internal implementation interprets line as the number of lines to rip * off from the top or bottom. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_ripoffline) (NCURSES_SP_DCLx int line, int (*init) (WINDOW *, int)) { int code = ERR; START_TRACE(); T((T_CALLED("ripoffline(%p,%d,%p)"), (void *) SP_PARM, line, TR_FUNC(init))); #if NCURSES_SP_FUNCS if (SP_PARM != 0 && SP_PARM->_prescreen) #endif { if (line == 0) { code = OK; } else { if (safe_ripoff_sp == 0) safe_ripoff_sp = safe_ripoff_stack; if (safe_ripoff_sp < safe_ripoff_stack + N_RIPS) { safe_ripoff_sp->line = line; safe_ripoff_sp->hook = init; (safe_ripoff_sp)++; code = OK; } } } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) _nc_ripoffline(int line, int (*init) (WINDOW *, int)) { return NCURSES_SP_NAME(_nc_ripoffline) (CURRENT_SCREEN_PRE, line, init); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(ripoffline) (NCURSES_SP_DCLx int line, int (*init) (WINDOW *, int)) { START_TRACE(); return NCURSES_SP_NAME(_nc_ripoffline) (NCURSES_SP_ARGx (line < 0) ? -1 : 1, init); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) ripoffline(int line, int (*init) (WINDOW *, int)) { return NCURSES_SP_NAME(ripoffline) (CURRENT_SCREEN_PRE, line, init); } #endif ncurses-6.0-20160213/ncurses/base/lib_slkclear.c0000644000175100001440000000671111275317731017656 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2007,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1996-1999 * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * lib_slkclear.c * Soft key routines. * Remove soft labels from the screen. */ #include MODULE_ID("$Id: lib_slkclear.c,v 1.14 2009/11/07 16:27:05 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_clear) (NCURSES_SP_DCL0) { int rc = ERR; T((T_CALLED("slk_clear(%p)"), (void *) SP_PARM)); if (SP_PARM != 0 && SP_PARM->_slk != 0) { SP_PARM->_slk->hidden = TRUE; /* For simulated SLK's it looks much more natural to inherit those attributes from the standard screen */ SP_PARM->_slk->win->_nc_bkgd = StdScreen(SP_PARM)->_nc_bkgd; WINDOW_ATTRS(SP_PARM->_slk->win) = WINDOW_ATTRS(StdScreen(SP_PARM)); if (SP_PARM->_slk->win == StdScreen(SP_PARM)) { rc = OK; } else { werase(SP_PARM->_slk->win); rc = wrefresh(SP_PARM->_slk->win); } } returnCode(rc); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_clear(void) { return NCURSES_SP_NAME(slk_clear) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/lib_scroll.c0000644000175100001440000001316411650570252017350 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-2003 * * and: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_scroll.c ** ** The routine wscrl(win, n). ** positive n scroll the window up (ie. move lines down) ** negative n scroll the window down (ie. move lines up) ** */ #include MODULE_ID("$Id: lib_scroll.c,v 1.29 2011/10/22 16:34:50 tom Exp $") NCURSES_EXPORT(void) _nc_scroll_window(WINDOW *win, int const n, int const top, int const bottom, NCURSES_CH_T blank) { int limit; int line; int j; size_t to_copy = (sizeof(NCURSES_CH_T) * (size_t) (win->_maxx + 1)); TR(TRACE_MOVE, ("_nc_scroll_window(%p, %d, %ld, %ld)", (void *) win, n, (long) top, (long) bottom)); if (top < 0 || bottom < top || bottom > win->_maxy) { TR(TRACE_MOVE, ("nothing to scroll")); return; } /* * This used to do a line-text pointer-shuffle instead of text copies. * That (a) doesn't work when the window is derived and doesn't have * its own storage, (b) doesn't save you a lot on modern machines * anyway. Your typical memcpy implementations are coded in * assembler using a tight BLT loop; for the size of copies we're * talking here, the total execution time is dominated by the one-time * setup cost. So there is no point in trying to be excessively * clever -- esr. */ /* shift n lines downwards */ if (n < 0) { limit = top - n; for (line = bottom; line >= limit && line >= 0; line--) { TR(TRACE_MOVE, ("...copying %d to %d", line + n, line)); memcpy(win->_line[line].text, win->_line[line + n].text, to_copy); if_USE_SCROLL_HINTS(win->_line[line].oldindex = win->_line[line + n].oldindex); } for (line = top; line < limit && line <= win->_maxy; line++) { TR(TRACE_MOVE, ("...filling %d", line)); for (j = 0; j <= win->_maxx; j++) win->_line[line].text[j] = blank; if_USE_SCROLL_HINTS(win->_line[line].oldindex = _NEWINDEX); } } /* shift n lines upwards */ if (n > 0) { limit = bottom - n; for (line = top; line <= limit && line <= win->_maxy; line++) { memcpy(win->_line[line].text, win->_line[line + n].text, to_copy); if_USE_SCROLL_HINTS(win->_line[line].oldindex = win->_line[line + n].oldindex); } for (line = bottom; line > limit && line >= 0; line--) { for (j = 0; j <= win->_maxx; j++) win->_line[line].text[j] = blank; if_USE_SCROLL_HINTS(win->_line[line].oldindex = _NEWINDEX); } } touchline(win, top, bottom - top + 1); if_WIDEC({ if (WINDOW_EXT(win, addch_used) != 0) { int next = WINDOW_EXT(win, addch_y) + n; if (next < 0 || next > win->_maxy) { TR(TRACE_VIRTPUT, ("Alert discarded multibyte on scroll")); WINDOW_EXT(win, addch_y) = 0; } else { TR(TRACE_VIRTPUT, ("scrolled working position to %d,%d", WINDOW_EXT(win, addch_y), WINDOW_EXT(win, addch_x))); WINDOW_EXT(win, addch_y) = next; } } }) } NCURSES_EXPORT(int) wscrl(WINDOW *win, int n) { T((T_CALLED("wscrl(%p,%d)"), (void *) win, n)); if (!win || !win->_scroll) { TR(TRACE_MOVE, ("...scrollok is false")); returnCode(ERR); } if (n != 0) { _nc_scroll_window(win, n, win->_regtop, win->_regbottom, win->_nc_bkgd); _nc_synchook(win); } returnCode(OK); } ncurses-6.0-20160213/ncurses/base/lib_wattron.c0000644000175100001440000000602711354756332017556 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* ** lib_wattron.c ** ** The routines wattr_on(). ** */ #include #include MODULE_ID("$Id: lib_wattron.c,v 1.11 2010/03/31 23:38:02 tom Exp $") NCURSES_EXPORT(int) wattr_on(WINDOW *win, attr_t at, void *opts GCC_UNUSED) { T((T_CALLED("wattr_on(%p,%s)"), (void *) win, _traceattr(at))); if (win != 0) { T(("... current %s (%d)", _traceattr(WINDOW_ATTRS(win)), GET_WINDOW_PAIR(win))); if_EXT_COLORS({ if (at & A_COLOR) win->_color = PairNumber(at); }); toggle_attr_on(WINDOW_ATTRS(win), at); returnCode(OK); } else returnCode(ERR); } ncurses-6.0-20160213/ncurses/base/lib_delch.c0000644000175100001440000000602411270700217017120 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2001,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_delch.c ** ** The routine wdelch(). ** */ #include MODULE_ID("$Id: lib_delch.c,v 1.13 2009/10/24 22:32:47 tom Exp $") NCURSES_EXPORT(int) wdelch(WINDOW *win) { int code = ERR; T((T_CALLED("wdelch(%p)"), (void *) win)); if (win) { NCURSES_CH_T blank = win->_nc_bkgd; struct ldat *line = &(win->_line[win->_cury]); NCURSES_CH_T *end = &(line->text[win->_maxx]); NCURSES_CH_T *temp2 = &(line->text[win->_curx + 1]); NCURSES_CH_T *temp1 = temp2 - 1; CHANGED_TO_EOL(line, win->_curx, win->_maxx); while (temp1 < end) *temp1++ = *temp2++; *temp1 = blank; _nc_synchook(win); code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_driver.c0000644000175100001440000001150112321723003017324 0ustar tomusers/**************************************************************************** * Copyright (c) 2008-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer * * * ****************************************************************************/ #include MODULE_ID("$Id: lib_driver.c,v 1.6 2014/04/11 08:21:23 jpf Exp $") typedef struct DriverEntry { const char *name; TERM_DRIVER *driver; } DRIVER_ENTRY; static DRIVER_ENTRY DriverTable[] = { #ifdef __MINGW32__ {"win32console", &_nc_WIN_DRIVER}, #endif {"tinfo", &_nc_TINFO_DRIVER} /* must be last */ }; NCURSES_EXPORT(int) _nc_get_driver(TERMINAL_CONTROL_BLOCK * TCB, const char *name, int *errret) { int code = ERR; size_t i; TERM_DRIVER *res = (TERM_DRIVER *) 0; TERM_DRIVER *use = 0; T((T_CALLED("_nc_get_driver(%p, %s, %p)"), (void *) TCB, NonNull(name), (void *) errret)); assert(TCB != 0); for (i = 0; i < SIZEOF(DriverTable); i++) { res = DriverTable[i].driver; if (strcmp(DriverTable[i].name, res->td_name(TCB)) == 0) { if (res->td_CanHandle(TCB, name, errret)) { use = res; break; } } } if (use != 0) { TCB->drv = use; code = OK; } returnCode(code); } NCURSES_EXPORT(int) NCURSES_SP_NAME(has_key) (SCREEN *sp, int keycode) { T((T_CALLED("has_key(%p, %d)"), (void *) sp, keycode)); returnCode(IsValidTIScreen(sp) ? CallDriver_1(sp, td_kyExist, keycode) : FALSE); } NCURSES_EXPORT(int) has_key(int keycode) { return NCURSES_SP_NAME(has_key) (CURRENT_SCREEN, keycode); } NCURSES_EXPORT(int) NCURSES_SP_NAME(_nc_mcprint) (SCREEN *sp, char *data, int len) { int code = ERR; if (0 != TerminalOf(sp)) code = CallDriver_2(sp, td_print, data, len); return (code); } NCURSES_EXPORT(int) mcprint(char *data, int len) { return NCURSES_SP_NAME(_nc_mcprint) (CURRENT_SCREEN, data, len); } NCURSES_EXPORT(int) NCURSES_SP_NAME(doupdate) (SCREEN *sp) { int code = ERR; T((T_CALLED("doupdate(%p)"), (void *) sp)); if (IsValidScreen(sp)) code = CallDriver(sp, td_update); returnCode(code); } NCURSES_EXPORT(int) doupdate(void) { return NCURSES_SP_NAME(doupdate) (CURRENT_SCREEN); } NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (SCREEN *sp, int yold, int xold, int ynew, int xnew) { int code = ERR; TR(TRACE_CALLS | TRACE_MOVE, (T_CALLED("mvcur(%p,%d,%d,%d,%d)"), (void *) sp, yold, xold, ynew, xnew)); if (HasTerminal(sp)) { code = CallDriver_4(sp, td_hwcur, yold, xold, ynew, xnew); } returnCode(code); } NCURSES_EXPORT(int) mvcur(int yold, int xold, int ynew, int xnew) /* optimized cursor move from (yold, xold) to (ynew, xnew) */ { return NCURSES_SP_NAME(mvcur) (CURRENT_SCREEN, yold, xold, ynew, xnew); } ncurses-6.0-20160213/ncurses/base/wresize.c0000644000175100001440000002012111566005213016677 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer * ****************************************************************************/ #include MODULE_ID("$Id: wresize.c,v 1.35 2011/05/21 18:55:07 tom Exp $") static int cleanup_lines(struct ldat *data, int length) { while (--length >= 0) free(data[length].text); free(data); return ERR; } /* * If we have reallocated the ldat structs, we will have to repair pointers * used in subwindows. */ static void repair_subwindows(WINDOW *cmp) { WINDOWLIST *wp; struct ldat *pline = cmp->_line; int row; #ifdef USE_SP_WINDOWLIST SCREEN *sp = _nc_screen_of(cmp); #endif _nc_lock_global(curses); for (each_window(SP_PARM, wp)) { WINDOW *tst = &(wp->win); if (tst->_parent == cmp) { if (tst->_pary > cmp->_maxy) tst->_pary = cmp->_maxy; if (tst->_parx > cmp->_maxx) tst->_parx = cmp->_maxx; if (tst->_maxy + tst->_pary > cmp->_maxy) tst->_maxy = (NCURSES_SIZE_T) (cmp->_maxy - tst->_pary); if (tst->_maxx + tst->_parx > cmp->_maxx) tst->_maxx = (NCURSES_SIZE_T) (cmp->_maxx - tst->_parx); for (row = 0; row <= tst->_maxy; ++row) { tst->_line[row].text = &pline[tst->_pary + row].text[tst->_parx]; } repair_subwindows(tst); } } _nc_unlock_global(curses); } /* * Reallocate a curses WINDOW struct to either shrink or grow to the specified * new lines/columns. If it grows, the new character cells are filled with * blanks. The application is responsible for repainting the blank area. */ NCURSES_EXPORT(int) wresize(WINDOW *win, int ToLines, int ToCols) { int col, row, size_x, size_y; struct ldat *pline; struct ldat *new_lines = 0; #ifdef TRACE T((T_CALLED("wresize(%p,%d,%d)"), (void *) win, ToLines, ToCols)); if (win) { TR(TRACE_UPDATE, ("...beg (%ld, %ld), max(%ld,%ld), reg(%ld,%ld)", (long) win->_begy, (long) win->_begx, (long) win->_maxy, (long) win->_maxx, (long) win->_regtop, (long) win->_regbottom)); if (USE_TRACEF(TRACE_UPDATE)) { _tracedump("...before", win); _nc_unlock_global(tracef); } } #endif if (!win || --ToLines < 0 || --ToCols < 0) returnCode(ERR); size_x = win->_maxx; size_y = win->_maxy; if (ToLines == size_y && ToCols == size_x) returnCode(OK); if ((win->_flags & _SUBWIN)) { /* * Check if the new limits will fit into the parent window's size. If * not, do not resize. We could adjust the location of the subwindow, * but the application may not like that. */ if (win->_pary + ToLines > win->_parent->_maxy || win->_parx + ToCols > win->_parent->_maxx) { returnCode(ERR); } pline = win->_parent->_line; } else { pline = 0; } /* * Allocate new memory as needed. Do the allocations without modifying * the original window, in case an allocation fails. Always allocate * (at least temporarily) the array pointing to the individual lines. */ new_lines = typeCalloc(struct ldat, (unsigned) (ToLines + 1)); if (new_lines == 0) returnCode(ERR); /* * For each line in the target, allocate or adjust pointers for the * corresponding text, depending on whether this is a window or a * subwindow. */ for (row = 0; row <= ToLines; ++row) { int begin = (row > size_y) ? 0 : (size_x + 1); int end = ToCols; NCURSES_CH_T *s; if (!(win->_flags & _SUBWIN)) { if (row <= size_y) { if (ToCols != size_x) { s = typeMalloc(NCURSES_CH_T, (unsigned) ToCols + 1); if (s == 0) returnCode(cleanup_lines(new_lines, row)); for (col = 0; col <= ToCols; ++col) { s[col] = (col <= size_x ? win->_line[row].text[col] : win->_nc_bkgd); } } else { s = win->_line[row].text; } } else { s = typeMalloc(NCURSES_CH_T, (unsigned) ToCols + 1); if (s == 0) returnCode(cleanup_lines(new_lines, row)); for (col = 0; col <= ToCols; ++col) s[col] = win->_nc_bkgd; } } else if (pline != 0 && pline[win->_pary + row].text != 0) { s = &pline[win->_pary + row].text[win->_parx]; } else { s = 0; } if_USE_SCROLL_HINTS(new_lines[row].oldindex = row); if (row <= size_y) { new_lines[row].firstchar = win->_line[row].firstchar; new_lines[row].lastchar = win->_line[row].lastchar; } if ((ToCols != size_x) || (row > size_y)) { if (end >= begin) { /* growing */ if (new_lines[row].firstchar < begin) new_lines[row].firstchar = (NCURSES_SIZE_T) begin; } else { /* shrinking */ new_lines[row].firstchar = 0; } new_lines[row].lastchar = (NCURSES_SIZE_T) ToCols; } new_lines[row].text = s; } /* * Dispose of unwanted memory. */ if (!(win->_flags & _SUBWIN)) { if (ToCols == size_x) { for (row = ToLines + 1; row <= size_y; row++) { free(win->_line[row].text); } } else { for (row = 0; row <= size_y; row++) { free(win->_line[row].text); } } } free(win->_line); win->_line = new_lines; /* * Finally, adjust the parameters showing screen size and cursor * position: */ win->_maxx = (NCURSES_SIZE_T) ToCols; win->_maxy = (NCURSES_SIZE_T) ToLines; if (win->_regtop > win->_maxy) win->_regtop = win->_maxy; if (win->_regbottom > win->_maxy || win->_regbottom == size_y) win->_regbottom = win->_maxy; if (win->_curx > win->_maxx) win->_curx = win->_maxx; if (win->_cury > win->_maxy) win->_cury = win->_maxy; /* * Check for subwindows of this one, and readjust pointers to our text, * if needed. */ repair_subwindows(win); #ifdef TRACE TR(TRACE_UPDATE, ("...beg (%ld, %ld), max(%ld,%ld), reg(%ld,%ld)", (long) win->_begy, (long) win->_begx, (long) win->_maxy, (long) win->_maxx, (long) win->_regtop, (long) win->_regbottom)); if (USE_TRACEF(TRACE_UPDATE)) { _tracedump("...after:", win); _nc_unlock_global(tracef); } #endif returnCode(OK); } ncurses-6.0-20160213/ncurses/base/resizeterm.c0000644000175100001440000003434312606265515017424 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * * and: Juergen Pfeifer * ****************************************************************************/ /* * This is an extension to the curses library. It provides callers with a hook * into the NCURSES data to resize windows, primarily for use by programs * running in an X Window terminal (e.g., xterm). I abstracted this module * from my application library for NCURSES because it must be compiled with * the private data structures -- T.Dickey 1995/7/4. */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: resizeterm.c,v 1.48 2015/10/10 19:47:25 tom Exp $") /* * If we're trying to be reentrant, do not want any local statics. */ #if USE_REENTRANT #define EXTRA_ARGS , CurLines, CurCols #define EXTRA_DCLS , int CurLines, int CurCols #else static int current_lines; static int current_cols; #define CurLines current_lines #define CurCols current_cols #define EXTRA_ARGS /* nothing */ #define EXTRA_DCLS /* nothing */ #endif #if NCURSES_SP_FUNCS && !defined(USE_SP_WINDOWLIST) #define UNUSED_SP (void) sp #else #define UNUSED_SP /* nothing */ #endif #ifdef TRACE static void show_window_sizes(const char *name) { SCREEN *sp; WINDOWLIST *wp; _nc_lock_global(curses); for (each_screen(sp)) { _tracef("%s resizing: %p: %2d x %2d (%2d x %2d)", name, (void *) sp, *(ptrLines(sp)), *(ptrCols(sp)), screen_lines(sp), screen_columns(sp)); for (each_window(sp, wp)) { _tracef(" window %p is %2ld x %2ld at %2ld,%2ld", (void *) &(wp->win), (long) wp->win._maxy + 1, (long) wp->win._maxx + 1, (long) wp->win._begy, (long) wp->win._begx); } } _nc_unlock_global(curses); } #endif /* * Return true if the given dimensions do not match the internal terminal * structure's size. */ NCURSES_EXPORT(bool) NCURSES_SP_NAME(is_term_resized) (NCURSES_SP_DCLx int ToLines, int ToCols) { T((T_CALLED("is_term_resized(%p, %d, %d)"), (void *) SP_PARM, ToLines, ToCols)); returnCode(ToLines > 0 && ToCols > 0 && (ToLines != screen_lines(SP_PARM) || ToCols != screen_columns(SP_PARM))); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(bool) is_term_resized(int ToLines, int ToCols) { return NCURSES_SP_NAME(is_term_resized) (CURRENT_SCREEN, ToLines, ToCols); } #endif /* */ static ripoff_t * ripped_window(WINDOW *win) { ripoff_t *result = 0; ripoff_t *rop; if (win != 0) { #ifdef USE_SP_RIPOFF SCREEN *sp = _nc_screen_of(win); #endif for (each_ripoff(rop)) { if (rop->win == win && rop->line != 0) { result = rop; break; } } } return result; } /* * Returns the number of lines from the bottom for the beginning of a ripped * off window. */ static int ripped_bottom(WINDOW *win) { int result = 0; ripoff_t *rop; if (win != 0) { #ifdef USE_SP_RIPOFF SCREEN *sp = _nc_screen_of(win); #endif for (each_ripoff(rop)) { if (rop->line < 0) { result -= rop->line; if (rop->win == win) { break; } } } } return result; } /* * Return the number of levels of child-windows under the current window. */ static int child_depth(WINDOW *cmp) { int depth = 0; if (cmp != 0) { #ifdef USE_SP_WINDOWLIST SCREEN *sp = _nc_screen_of(cmp); #endif WINDOWLIST *wp; for (each_window(sp, wp)) { WINDOW *tst = &(wp->win); if (tst->_parent == cmp) { depth = 1 + child_depth(tst); break; } } } return depth; } /* * Return the number of levels of parent-windows above the current window. */ static int parent_depth(WINDOW *cmp) { int depth = 0; if (cmp != 0) { WINDOW *tst; while ((tst = cmp->_parent) != 0) { ++depth; cmp = tst; } } return depth; } /* * FIXME: must adjust position so it's within the parent! */ static int adjust_window(WINDOW *win, int ToLines, int ToCols, int stolen EXTRA_DCLS) { int result; int bottom = CurLines + _nc_screen_of(win)->_topstolen - stolen; int myLines = win->_maxy + 1; int myCols = win->_maxx + 1; ripoff_t *rop = ripped_window(win); T((T_CALLED("adjust_window(%p,%d,%d)%s depth %d/%d currently %ldx%ld at %ld,%ld"), (void *) win, ToLines, ToCols, (rop != 0) ? " (rip)" : "", parent_depth(win), child_depth(win), (long) getmaxy(win), (long) getmaxx(win), (long) getbegy(win) + win->_yoffset, (long) getbegx(win))); if (rop != 0 && rop->line < 0) { /* * If it is a ripped-off window at the bottom of the screen, simply * move it to the same relative position. */ win->_begy = (NCURSES_SIZE_T) (ToLines - ripped_bottom(win) - 0 - win->_yoffset); if (rop->hook == _nc_slk_initialize) _nc_format_slks( #if NCURSES_SP_FUNCS _nc_screen_of(win), #endif ToCols); } else if (win->_begy >= bottom) { /* * If it is below the bottom of the new screen, move up by the same * amount that the screen shrank. */ win->_begy = (NCURSES_SIZE_T) (win->_begy + (ToLines - CurLines)); } else { if (myLines == (CurLines - stolen) && ToLines != CurLines) { myLines = ToLines - stolen; } else if (myLines == CurLines && ToLines != CurLines) { myLines = ToLines; } } if (myLines > ToLines) { myLines = ToLines; } if (myCols > ToCols) myCols = ToCols; if (myCols == CurCols && ToCols != CurCols) myCols = ToCols; result = wresize(win, myLines, myCols); returnCode(result); } /* * If we're decreasing size, recursively search for windows that have no * children, decrease those to fit, then decrease the containing window, etc. */ static int decrease_size(NCURSES_SP_DCLx int ToLines, int ToCols, int stolen EXTRA_DCLS) { bool found; int depth = 0; WINDOWLIST *wp; T((T_CALLED("decrease_size(%p, %d, %d)"), (void *) SP_PARM, ToLines, ToCols)); UNUSED_SP; do { found = FALSE; TR(TRACE_UPDATE, ("decreasing size of windows to %dx%d, depth=%d", ToLines, ToCols, depth)); for (each_window(SP_PARM, wp)) { WINDOW *win = &(wp->win); if (!(win->_flags & _ISPAD)) { if (child_depth(win) == depth) { found = TRUE; if (adjust_window(win, ToLines, ToCols, stolen EXTRA_ARGS) != OK) returnCode(ERR); } } } ++depth; } while (found); returnCode(OK); } /* * If we're increasing size, recursively search for windows that have no * parent, increase those to fit, then increase the contained window, etc. */ static int increase_size(NCURSES_SP_DCLx int ToLines, int ToCols, int stolen EXTRA_DCLS) { bool found; int depth = 0; WINDOWLIST *wp; T((T_CALLED("increase_size(%p, %d, %d)"), (void *) SP_PARM, ToLines, ToCols)); UNUSED_SP; do { found = FALSE; TR(TRACE_UPDATE, ("increasing size of windows to %dx%d, depth=%d", ToLines, ToCols, depth)); for (each_window(SP_PARM, wp)) { WINDOW *win = &(wp->win); if (!(win->_flags & _ISPAD)) { if (parent_depth(win) == depth) { found = TRUE; if (adjust_window(win, ToLines, ToCols, stolen EXTRA_ARGS) != OK) returnCode(ERR); } } } ++depth; } while (found); returnCode(OK); } /* * This function reallocates NCURSES window structures, with no side-effects * such as ungetch(). */ NCURSES_EXPORT(int) NCURSES_SP_NAME(resize_term) (NCURSES_SP_DCLx int ToLines, int ToCols) { int result = OK EXTRA_ARGS; int was_stolen; T((T_CALLED("resize_term(%p,%d,%d) old(%d,%d)"), (void *) SP_PARM, ToLines, ToCols, (SP_PARM == 0) ? -1 : screen_lines(SP_PARM), (SP_PARM == 0) ? -1 : screen_columns(SP_PARM))); if (SP_PARM == 0 || ToLines <= 0 || ToCols <= 0) { returnCode(ERR); } _nc_nonsp_lock_global(curses); was_stolen = (screen_lines(SP_PARM) - SP_PARM->_lines_avail); if (NCURSES_SP_NAME(is_term_resized) (NCURSES_SP_ARGx ToLines, ToCols)) { int myLines = CurLines = screen_lines(SP_PARM); int myCols = CurCols = screen_columns(SP_PARM); #ifdef TRACE if (USE_TRACEF(TRACE_UPDATE)) { show_window_sizes("before"); _nc_unlock_global(tracef); } #endif if (ToLines > screen_lines(SP_PARM)) { result = increase_size(NCURSES_SP_ARGx myLines = ToLines, myCols, was_stolen EXTRA_ARGS); CurLines = myLines; CurCols = myCols; } if ((result == OK) && (ToCols > screen_columns(SP_PARM))) { result = increase_size(NCURSES_SP_ARGx myLines, myCols = ToCols, was_stolen EXTRA_ARGS); CurLines = myLines; CurCols = myCols; } if ((result == OK) && (ToLines < myLines || ToCols < myCols)) { result = decrease_size(NCURSES_SP_ARGx ToLines, ToCols, was_stolen EXTRA_ARGS); } if (result == OK) { screen_lines(SP_PARM) = (NCURSES_SIZE_T) ToLines; screen_columns(SP_PARM) = (NCURSES_SIZE_T) ToCols; #ifdef USE_TERM_DRIVER CallDriver_2(SP_PARM, td_setsize, ToLines, ToCols); #else lines = (NCURSES_SIZE_T) ToLines; columns = (NCURSES_SIZE_T) ToCols; #endif SP_PARM->_lines_avail = (NCURSES_SIZE_T) (ToLines - was_stolen); if (SP_PARM->oldhash) { FreeAndNull(SP_PARM->oldhash); } if (SP_PARM->newhash) { FreeAndNull(SP_PARM->newhash); } #ifdef TRACE if (USE_TRACEF(TRACE_UPDATE)) { SET_LINES(ToLines - was_stolen); SET_COLS(ToCols); show_window_sizes("after"); _nc_unlock_global(tracef); } #endif } } if (result == OK) { /* * Always update LINES, to allow for call from lib_doupdate.c which * needs to have the count adjusted by the stolen (ripped off) lines. */ SET_LINES(ToLines - was_stolen); SET_COLS(ToCols); } _nc_nonsp_unlock_global(curses); returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) resize_term(int ToLines, int ToCols) { int res = ERR; _nc_sp_lock_global(curses); res = NCURSES_SP_NAME(resize_term) (CURRENT_SCREEN, ToLines, ToCols); _nc_sp_unlock_global(curses); return (res); } #endif /* * This function reallocates NCURSES window structures. It is invoked in * response to a SIGWINCH interrupt. Other user-defined windows may also need * to be reallocated. * * Because this performs memory allocation, it should not (in general) be * invoked directly from the signal handler. */ NCURSES_EXPORT(int) NCURSES_SP_NAME(resizeterm) (NCURSES_SP_DCLx int ToLines, int ToCols) { int result = ERR; T((T_CALLED("resizeterm(%p, %d,%d) old(%d,%d)"), (void *) SP_PARM, ToLines, ToCols, (SP_PARM == 0) ? -1 : screen_lines(SP_PARM), (SP_PARM == 0) ? -1 : screen_columns(SP_PARM))); if (SP_PARM != 0 && ToLines > 0 && ToCols > 0) { result = OK; SP_PARM->_sig_winch = FALSE; if (NCURSES_SP_NAME(is_term_resized) (NCURSES_SP_ARGx ToLines, ToCols)) { #if USE_SIGWINCH ripoff_t *rop; bool slk_visible = (SP_PARM != 0 && SP_PARM->_slk != 0 && !(SP_PARM->_slk->hidden)); if (slk_visible) { slk_clear(); } #endif result = NCURSES_SP_NAME(resize_term) (NCURSES_SP_ARGx ToLines, ToCols); #if USE_SIGWINCH clearok(CurScreen(SP_PARM), TRUE); /* screen contents are unknown */ /* ripped-off lines are a special case: if we did not lengthen * them, we haven't moved them either. repaint them, too. * * for the rest - stdscr and other windows - the client has to * decide which to repaint, since without panels, ncurses does * not know which are really on top. */ for (each_ripoff(rop)) { if (rop->win != StdScreen(SP_PARM) && rop->win != 0 && rop->line < 0) { if (rop->hook != _nc_slk_initialize) { touchwin(rop->win); wnoutrefresh(rop->win); } } } /* soft-keys are a special case: we _know_ how to repaint them */ if (slk_visible) { NCURSES_SP_NAME(slk_restore) (NCURSES_SP_ARG); NCURSES_SP_NAME(slk_touch) (NCURSES_SP_ARG); NCURSES_SP_NAME(slk_refresh) (NCURSES_SP_ARG); } #endif } #if USE_SIGWINCH safe_ungetch(SP_PARM, KEY_RESIZE); /* so application can know this */ #endif } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) resizeterm(int ToLines, int ToCols) { return NCURSES_SP_NAME(resizeterm) (CURRENT_SCREEN, ToLines, ToCols); } #endif ncurses-6.0-20160213/ncurses/base/key_defined.c0000644000175100001440000000704311270676223017474 0ustar tomusers/**************************************************************************** * Copyright (c) 2003-2006,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey, 2003 * ****************************************************************************/ #include MODULE_ID("$Id: key_defined.c,v 1.9 2009/10/24 22:15:47 tom Exp $") static int find_definition(TRIES * tree, const char *str) { TRIES *ptr; int result = OK; if (str != 0 && *str != '\0') { for (ptr = tree; ptr != 0; ptr = ptr->sibling) { if (UChar(*str) == UChar(ptr->ch)) { if (str[1] == '\0' && ptr->child != 0) { result = ERR; } else if ((result = find_definition(ptr->child, str + 1)) == OK) { result = ptr->value; } else if (str[1] == '\0') { result = ERR; } } if (result != OK) break; } } return (result); } /* * Returns the keycode associated with the given string. If none is found, * return OK. If the string is only a prefix to other strings, return ERR. * Otherwise, return the keycode's value (neither OK/ERR). */ NCURSES_EXPORT(int) NCURSES_SP_NAME(key_defined) (NCURSES_SP_DCLx const char *str) { int code = ERR; T((T_CALLED("key_defined(%p, %s)"), (void *) SP_PARM, _nc_visbuf(str))); if (SP_PARM != 0 && str != 0) { code = find_definition(SP_PARM->_keytry, str); } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) key_defined(const char *str) { return NCURSES_SP_NAME(key_defined) (CURRENT_SCREEN, str); } #endif ncurses-6.0-20160213/ncurses/base/lib_slkset.c0000644000175100001440000001167312060744245017363 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer * * and: Thomas E. Dickey * ****************************************************************************/ /* * lib_slkset.c * Set soft label text. */ #include #include #if USE_WIDEC_SUPPORT #if HAVE_WCTYPE_H #include #endif #endif MODULE_ID("$Id: lib_slkset.c,v 1.24 2012/12/08 23:09:25 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_set) (NCURSES_SP_DCLx int i, const char *astr, int format) { SLK *slk; int offset = 0; int numchrs; int numcols; int limit; const char *str = astr; const char *p; T((T_CALLED("slk_set(%p, %d, \"%s\", %d)"), (void *) SP_PARM, i, str, format)); if (SP_PARM == 0 || (slk = SP_PARM->_slk) == 0 || i < 1 || i > slk->labcnt || format < 0 || format > 2) returnCode(ERR); if (str == 0) str = ""; --i; /* Adjust numbering of labels */ limit = MAX_SKEY_LEN(SP_PARM->slk_format); while (isspace(UChar(*str))) str++; /* skip over leading spaces */ p = str; #if USE_WIDEC_SUPPORT numcols = 0; while (*p != 0) { mbstate_t state; wchar_t wc; size_t need; init_mb(state); need = mbrtowc(0, p, strlen(p), &state); if (need == (size_t) -1) break; mbrtowc(&wc, p, need, &state); if (!iswprint((wint_t) wc)) break; if (wcwidth(wc) + numcols > limit) break; numcols += wcwidth(wc); p += need; } numchrs = (int) (p - str); #else while (isprint(UChar(*p))) p++; /* The first non-print stops */ numcols = (int) (p - str); if (numcols > limit) numcols = limit; numchrs = numcols; #endif FreeIfNeeded(slk->ent[i].ent_text); if ((slk->ent[i].ent_text = strdup(str)) == 0) returnCode(ERR); slk->ent[i].ent_text[numchrs] = '\0'; if ((slk->ent[i].form_text = (char *) _nc_doalloc(slk->ent[i].form_text, (size_t) (limit + numchrs + 1)) ) == 0) returnCode(ERR); switch (format) { case 0: /* left-justified */ offset = 0; break; case 1: /* centered */ offset = (limit - numcols) / 2; break; case 2: /* right-justified */ offset = limit - numcols; break; } if (offset <= 0) offset = 0; else memset(slk->ent[i].form_text, ' ', (size_t) offset); memcpy(slk->ent[i].form_text + offset, slk->ent[i].ent_text, (size_t) numchrs); if (offset < limit) { memset(slk->ent[i].form_text + offset + numchrs, ' ', (size_t) (limit - (offset + numcols))); } slk->ent[i].form_text[numchrs - numcols + limit] = 0; slk->ent[i].dirty = TRUE; returnCode(OK); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_set(int i, const char *astr, int format) { return NCURSES_SP_NAME(slk_set) (CURRENT_SCREEN, i, astr, format); } #endif ncurses-6.0-20160213/ncurses/base/lib_mouse.c0000644000175100001440000014773712615224355017222 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2008 * ****************************************************************************/ /* * This module is intended to encapsulate ncurses's interface to pointing * devices. * * The primary method used is xterm's internal mouse-tracking facility. * Additional methods depend on the platform: * Alessandro Rubini's GPM server (Linux) * sysmouse (FreeBSD) * special-purpose mouse interface for OS/2 EMX. * * Notes for implementors of new mouse-interface methods: * * The code is logically split into a lower level that accepts event reports * in a device-dependent format and an upper level that parses mouse gestures * and filters events. The mediating data structure is a circular queue of * MEVENT structures. * * Functionally, the lower level's job is to pick up primitive events and * put them on the circular queue. This can happen in one of two ways: * either (a) _nc_mouse_event() detects a series of incoming mouse reports * and queues them, or (b) code in lib_getch.c detects the kmous prefix in * the keyboard input stream and calls _nc_mouse_inline to queue up a series * of adjacent mouse reports. * * In either case, _nc_mouse_parse() should be called after the series is * accepted to parse the digested mouse reports (low-level MEVENTs) into * a gesture (a high-level or composite MEVENT). * * Don't be too shy about adding new event types or modifiers, if you can find * room for them in the 32-bit mask. The API is written so that users get * feedback on which theoretical event types they won't see when they call * mousemask. There's one bit per button (the RESERVED_EVENT bit) not being * used yet, and a couple of bits open at the high end. */ #ifdef __EMX__ # include # define INCL_DOS # define INCL_VIO # define INCL_KBD # define INCL_MOU # define INCL_DOSPROCESS # include /* Need to include before the others */ #endif #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_mouse.c,v 1.168 2015/10/31 20:47:41 tom Exp $") #include #if USE_GPM_SUPPORT #include /* defines KG_* macros */ #ifdef HAVE_LIBDL /* use dynamic loader to avoid linkage dependency */ #include #ifdef RTLD_NOW #define my_RTLD RTLD_NOW #else #ifdef RTLD_LAZY #define my_RTLD RTLD_LAZY #else make an error #endif #endif /* RTLD_NOW */ #endif /* HAVE_LIBDL */ #endif /* USE_GPM_SUPPORT */ #if USE_SYSMOUSE #undef buttons /* symbol conflict in consio.h */ #undef mouse_info /* symbol conflict in consio.h */ #include #if defined(__DragonFly_version) || (defined(__FreeBSD__) && (__FreeBSD_version >= 400017)) #include #include #else #include #endif #endif /* use_SYSMOUSE */ #if USE_KLIBC_MOUSE #include #define pipe(handles) socketpair(AF_LOCAL, SOCK_STREAM, 0, handles) #define DosWrite(hfile, pbuffer, cbwrite, pcbactual) \ write(hfile, pbuffer, cbwrite) #define DosExit(action, result ) /* do nothing */ #define DosCreateThread(ptid, pfn, param, flag, cbStack) \ (*(ptid) = _beginthread(pfn, NULL, cbStack, \ (void *)param), (*(ptid) == -1)) #endif #define MY_TRACE TRACE_ICALLS|TRACE_IEVENT #define MASK_RELEASE(x) (mmask_t) NCURSES_MOUSE_MASK(x, 001) #define MASK_PRESS(x) (mmask_t) NCURSES_MOUSE_MASK(x, 002) #define MASK_CLICK(x) (mmask_t) NCURSES_MOUSE_MASK(x, 004) #define MASK_DOUBLE_CLICK(x) (mmask_t) NCURSES_MOUSE_MASK(x, 010) #define MASK_TRIPLE_CLICK(x) (mmask_t) NCURSES_MOUSE_MASK(x, 020) #define MASK_RESERVED_EVENT(x) (mmask_t) NCURSES_MOUSE_MASK(x, 040) #if NCURSES_MOUSE_VERSION == 1 #define BUTTON_CLICKED (BUTTON1_CLICKED | BUTTON2_CLICKED | BUTTON3_CLICKED | BUTTON4_CLICKED) #define BUTTON_PRESSED (BUTTON1_PRESSED | BUTTON2_PRESSED | BUTTON3_PRESSED | BUTTON4_PRESSED) #define BUTTON_RELEASED (BUTTON1_RELEASED | BUTTON2_RELEASED | BUTTON3_RELEASED | BUTTON4_RELEASED) #define BUTTON_DOUBLE_CLICKED (BUTTON1_DOUBLE_CLICKED | BUTTON2_DOUBLE_CLICKED | BUTTON3_DOUBLE_CLICKED | BUTTON4_DOUBLE_CLICKED) #define BUTTON_TRIPLE_CLICKED (BUTTON1_TRIPLE_CLICKED | BUTTON2_TRIPLE_CLICKED | BUTTON3_TRIPLE_CLICKED | BUTTON4_TRIPLE_CLICKED) #define MAX_BUTTONS 4 #else #define BUTTON_CLICKED (BUTTON1_CLICKED | BUTTON2_CLICKED | BUTTON3_CLICKED | BUTTON4_CLICKED | BUTTON5_CLICKED) #define BUTTON_PRESSED (BUTTON1_PRESSED | BUTTON2_PRESSED | BUTTON3_PRESSED | BUTTON4_PRESSED | BUTTON5_PRESSED) #define BUTTON_RELEASED (BUTTON1_RELEASED | BUTTON2_RELEASED | BUTTON3_RELEASED | BUTTON4_RELEASED | BUTTON5_RELEASED) #define BUTTON_DOUBLE_CLICKED (BUTTON1_DOUBLE_CLICKED | BUTTON2_DOUBLE_CLICKED | BUTTON3_DOUBLE_CLICKED | BUTTON4_DOUBLE_CLICKED | BUTTON5_DOUBLE_CLICKED) #define BUTTON_TRIPLE_CLICKED (BUTTON1_TRIPLE_CLICKED | BUTTON2_TRIPLE_CLICKED | BUTTON3_TRIPLE_CLICKED | BUTTON4_TRIPLE_CLICKED | BUTTON5_TRIPLE_CLICKED) #define MAX_BUTTONS 5 #endif #define INVALID_EVENT -1 #define NORMAL_EVENT 0 #define ValidEvent(ep) ((ep)->id != INVALID_EVENT) #define Invalidate(ep) (ep)->id = INVALID_EVENT #if USE_GPM_SUPPORT #ifndef LIBGPM_SONAME #define LIBGPM_SONAME "libgpm.so" #endif #define GET_DLSYM(name) (my_##name = (TYPE_##name) dlsym(sp->_dlopen_gpm, #name)) #endif /* USE_GPM_SUPPORT */ static bool _nc_mouse_parse(SCREEN *, int); static void _nc_mouse_resume(SCREEN *); static void _nc_mouse_wrap(SCREEN *); /* maintain a circular list of mouse events */ #define FirstEV(sp) ((sp)->_mouse_events) #define LastEV(sp) ((sp)->_mouse_events + EV_MAX - 1) #undef NEXT #define NEXT(ep) ((ep >= LastEV(SP_PARM)) \ ? FirstEV(SP_PARM) \ : ep + 1) #undef PREV #define PREV(ep) ((ep <= FirstEV(SP_PARM)) \ ? LastEV(SP_PARM) \ : ep - 1) #define IndexEV(sp, ep) (ep - FirstEV(sp)) #define RunParams(sp, eventp, runp) \ (long) IndexEV(sp, runp), \ (long) (IndexEV(sp, eventp) + (EV_MAX - 1)) % EV_MAX #ifdef TRACE static void _trace_slot(SCREEN *sp, const char *tag) { MEVENT *ep; _tracef("%s", tag); for (ep = FirstEV(sp); ep <= LastEV(sp); ep++) _tracef("mouse event queue slot %ld = %s", (long) IndexEV(sp, ep), _nc_tracemouse(sp, ep)); } #endif #if USE_EMX_MOUSE # define TOP_ROW 0 # define LEFT_COL 0 # define M_FD(sp) sp->_mouse_fd static void write_event(SCREEN *sp, int down, int button, int x, int y) { char buf[6]; unsigned long ignore; strcpy(buf, "\033[M"); /* should be the same as key_mouse */ buf[3] = ' ' + (button - 1) + (down ? 0 : 0x40); buf[4] = ' ' + x - LEFT_COL + 1; buf[5] = ' ' + y - TOP_ROW + 1; DosWrite(sp->_emxmouse_wfd, buf, 6, &ignore); } static void #if USE_KLIBC_MOUSE mouse_server(void *param) #else mouse_server(unsigned long param) #endif { SCREEN *sp = (SCREEN *) param; unsigned short fWait = MOU_WAIT; /* NOPTRRECT mourt = { 0,0,24,79 }; */ MOUEVENTINFO mouev; HMOU hmou; unsigned short mask = MOUSE_BN1_DOWN | MOUSE_BN2_DOWN | MOUSE_BN3_DOWN; int nbuttons = 3; int oldstate = 0; char err[80]; unsigned long rc; /* open the handle for the mouse */ if (MouOpen(NULL, &hmou) == 0) { rc = MouSetEventMask(&mask, hmou); if (rc) { /* retry with 2 buttons */ mask = MOUSE_BN1_DOWN | MOUSE_BN2_DOWN; rc = MouSetEventMask(&mask, hmou); nbuttons = 2; } if (rc == 0 && MouDrawPtr(hmou) == 0) { for (;;) { /* sit and wait on the event queue */ rc = MouReadEventQue(&mouev, &fWait, hmou); if (rc) { _nc_SPRINTF(err, _nc_SLIMIT(sizeof(err)) "Error reading mouse queue, rc=%lu.\r\n", rc); break; } if (!sp->_emxmouse_activated) goto finish; /* * OS/2 numbers a 3-button mouse inconsistently from other * platforms: * 1 = left * 2 = right * 3 = middle. */ if ((mouev.fs ^ oldstate) & MOUSE_BN1_DOWN) write_event(sp, mouev.fs & MOUSE_BN1_DOWN, sp->_emxmouse_buttons[1], mouev.col, mouev.row); if ((mouev.fs ^ oldstate) & MOUSE_BN2_DOWN) write_event(sp, mouev.fs & MOUSE_BN2_DOWN, sp->_emxmouse_buttons[3], mouev.col, mouev.row); if ((mouev.fs ^ oldstate) & MOUSE_BN3_DOWN) write_event(sp, mouev.fs & MOUSE_BN3_DOWN, sp->_emxmouse_buttons[2], mouev.col, mouev.row); finish: oldstate = mouev.fs; } } else { _nc_SPRINTF(err, _nc_SLIMIT(sizeof(err)) "Error setting event mask, buttons=%d, rc=%lu.\r\n", nbuttons, rc); } DosWrite(2, err, strlen(err), &rc); MouClose(hmou); } DosExit(EXIT_THREAD, 0L); } #endif /* USE_EMX_MOUSE */ #if USE_SYSMOUSE static void sysmouse_server(SCREEN *sp) { struct mouse_info the_mouse; MEVENT *work; the_mouse.operation = MOUSE_GETINFO; if (sp != 0 && sp->_mouse_fd >= 0 && sp->_sysmouse_tail < FIFO_SIZE && ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse) != -1) { if (sp->_sysmouse_head > sp->_sysmouse_tail) { sp->_sysmouse_tail = 0; sp->_sysmouse_head = 0; } work = &(sp->_sysmouse_fifo[sp->_sysmouse_tail]); memset(work, 0, sizeof(*work)); work->id = NORMAL_EVENT; /* there's only one mouse... */ sp->_sysmouse_old_buttons = sp->_sysmouse_new_buttons; sp->_sysmouse_new_buttons = the_mouse.u.data.buttons & 0x7; if (sp->_sysmouse_new_buttons) { if (sp->_sysmouse_new_buttons & 1) work->bstate |= BUTTON1_PRESSED; if (sp->_sysmouse_new_buttons & 2) work->bstate |= BUTTON2_PRESSED; if (sp->_sysmouse_new_buttons & 4) work->bstate |= BUTTON3_PRESSED; } else { if (sp->_sysmouse_old_buttons & 1) work->bstate |= BUTTON1_RELEASED; if (sp->_sysmouse_old_buttons & 2) work->bstate |= BUTTON2_RELEASED; if (sp->_sysmouse_old_buttons & 4) work->bstate |= BUTTON3_RELEASED; } /* for cosmetic bug in syscons.c on FreeBSD 3.[34] */ the_mouse.operation = MOUSE_HIDE; ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse); the_mouse.operation = MOUSE_SHOW; ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse); /* * We're only interested if the button is pressed or released. * FIXME: implement continuous event-tracking. */ if (sp->_sysmouse_new_buttons != sp->_sysmouse_old_buttons) { sp->_sysmouse_tail += 1; } work->x = the_mouse.u.data.x / sp->_sysmouse_char_width; work->y = the_mouse.u.data.y / sp->_sysmouse_char_height; } } static void handle_sysmouse(int sig GCC_UNUSED) { sysmouse_server(CURRENT_SCREEN); } #endif /* USE_SYSMOUSE */ #ifndef USE_TERM_DRIVER #define xterm_kmous "\033[M" static void init_xterm_mouse(SCREEN *sp) { sp->_mouse_type = M_XTERM; sp->_mouse_format = MF_X10; sp->_mouse_xtermcap = tigetstr("XM"); if (VALID_STRING(sp->_mouse_xtermcap)) { char *code = strstr(sp->_mouse_xtermcap, "[?"); if (code != 0) { code += 2; while ((*code >= '0') && (*code <= '9')) { char *next = code; while ((*next >= '0') && (*next <= '9')) { ++next; } if (!strncmp(code, "1006", (size_t) (next - code))) { sp->_mouse_format = MF_SGR1006; } #ifdef EXP_XTERM_1005 if (!strncmp(code, "1005", (size_t) (next - code))) { sp->_mouse_format = MF_XTERM_1005; } #endif if (*next == ';') { while (*next == ';') { ++next; } code = next; } else { break; } } } } else { int code = tigetnum("XM"); switch (code) { case 1006: break; default: code = 1000; break; } sp->_mouse_xtermcap = "\033[?1000%?%p1%{1}%=%th%el%;"; } } #endif static void enable_xterm_mouse(SCREEN *sp, int enable) { #if USE_EMX_MOUSE sp->_emxmouse_activated = enable; #else NCURSES_PUTP2("xterm-mouse", TPARM_1(sp->_mouse_xtermcap, enable)); #endif sp->_mouse_active = enable; } #if USE_GPM_SUPPORT static bool allow_gpm_mouse(SCREEN *sp GCC_UNUSED) { bool result = FALSE; #if USE_WEAK_SYMBOLS /* Danger Robinson: do not use dlopen for libgpm if already loaded */ if ((Gpm_Wgetch)) { if (!sp->_mouse_gpm_loaded) { T(("GPM library was already dlopen'd, not by us")); } } else #endif /* GPM does printf's without checking if stdout is a terminal */ if (NC_ISATTY(fileno(stdout))) { const char *list = getenv("NCURSES_GPM_TERMS"); const char *env = getenv("TERM"); if (list != 0) { if (env != 0) { result = _nc_name_match(list, env, "|:"); } } else { /* GPM checks the beginning of the $TERM variable to decide if it * should pass xterm events through. There is no real advantage in * allowing GPM to do this. Recent versions relax that check, and * pretend that GPM can work with any terminal having the kmous * capability. Perhaps that works for someone. If so, they can * set the environment variable (above). */ if (env != 0 && strstr(env, "linux") != 0) { result = TRUE; } } } return result; } #ifdef HAVE_LIBDL static void unload_gpm_library(SCREEN *sp) { if (sp->_dlopen_gpm != 0) { T(("unload GPM library")); sp->_mouse_gpm_loaded = FALSE; sp->_mouse_fd = -1; dlclose(sp->_dlopen_gpm); sp->_dlopen_gpm = 0; } } static void load_gpm_library(SCREEN *sp) { sp->_mouse_gpm_found = FALSE; if ((sp->_dlopen_gpm = dlopen(LIBGPM_SONAME, my_RTLD)) != 0) { if (GET_DLSYM(gpm_fd) == 0 || GET_DLSYM(Gpm_Open) == 0 || GET_DLSYM(Gpm_Close) == 0 || GET_DLSYM(Gpm_GetEvent) == 0) { T(("GPM initialization failed: %s", dlerror())); unload_gpm_library(sp); } else { sp->_mouse_gpm_found = TRUE; sp->_mouse_gpm_loaded = TRUE; } } } #endif static bool enable_gpm_mouse(SCREEN *sp, bool enable) { bool result; T((T_CALLED("enable_gpm_mouse(%d)"), enable)); if (enable && !sp->_mouse_active) { #ifdef HAVE_LIBDL if (sp->_mouse_gpm_found && !sp->_mouse_gpm_loaded) { load_gpm_library(sp); } #endif if (sp->_mouse_gpm_loaded) { int code; /* GPM: initialize connection to gpm server */ sp->_mouse_gpm_connect.eventMask = GPM_DOWN | GPM_UP; sp->_mouse_gpm_connect.defaultMask = (unsigned short) (~(sp->_mouse_gpm_connect.eventMask | GPM_HARD)); sp->_mouse_gpm_connect.minMod = 0; sp->_mouse_gpm_connect.maxMod = (unsigned short) (~((1 << KG_SHIFT) | (1 << KG_SHIFTL) | (1 << KG_SHIFTR))); /* * Note: GPM hardcodes \E[?1001s and \E[?1000h during its open. * The former is recognized by wscons (SunOS), and the latter by * xterm. Those will not show up in ncurses' traces. */ code = my_Gpm_Open(&sp->_mouse_gpm_connect, 0); result = (code >= 0); /* * GPM can return a -2 if it is trying to do something with xterm. * Ignore that, since it conflicts with our use of stdin. */ if (code == -2) { my_Gpm_Close(); } } else { result = FALSE; } sp->_mouse_active = result; T(("GPM open %s", result ? "succeeded" : "failed")); } else { if (!enable && sp->_mouse_active) { /* GPM: close connection to gpm server */ my_Gpm_Close(); sp->_mouse_active = FALSE; T(("GPM closed")); } result = enable; } #ifdef HAVE_LIBDL if (!result) { unload_gpm_library(sp); } #endif returnBool(result); } #endif /* USE_GPM_SUPPORT */ static void initialize_mousetype(SCREEN *sp) { T((T_CALLED("initialize_mousetype()"))); /* Try gpm first, because gpm may be configured to run in xterm */ #if USE_GPM_SUPPORT if (allow_gpm_mouse(sp)) { if (!sp->_mouse_gpm_loaded) { #ifdef HAVE_LIBDL load_gpm_library(sp); #else /* !HAVE_LIBDL */ sp->_mouse_gpm_found = TRUE; sp->_mouse_gpm_loaded = TRUE; #endif } /* * The gpm_fd file-descriptor may be negative (xterm). So we have to * maintain our notion of whether the mouse connection is active * without testing the file-descriptor. */ if (sp->_mouse_gpm_found && enable_gpm_mouse(sp, TRUE)) { sp->_mouse_type = M_GPM; sp->_mouse_fd = *(my_gpm_fd); T(("GPM mouse_fd %d", sp->_mouse_fd)); returnVoid; } } #endif /* USE_GPM_SUPPORT */ /* OS/2 VIO */ #if USE_EMX_MOUSE if (!sp->_emxmouse_thread && strstr(TerminalOf(sp)->type.term_names, "xterm") == 0 && key_mouse) { int handles[2]; if (pipe(handles) < 0) { perror("mouse pipe error"); returnVoid; } else { int rc; if (!sp->_emxmouse_buttons[0]) { const char *s = getenv("MOUSE_BUTTONS_123"); sp->_emxmouse_buttons[0] = 1; if (s && strlen(s) >= 3) { sp->_emxmouse_buttons[1] = s[0] - '0'; sp->_emxmouse_buttons[2] = s[1] - '0'; sp->_emxmouse_buttons[3] = s[2] - '0'; } else { sp->_emxmouse_buttons[1] = 1; sp->_emxmouse_buttons[2] = 3; sp->_emxmouse_buttons[3] = 2; } } sp->_emxmouse_wfd = handles[1]; M_FD(sp) = handles[0]; /* Needed? */ setmode(handles[0], O_BINARY); setmode(handles[1], O_BINARY); /* Do not use CRT functions, we may single-threaded. */ rc = DosCreateThread((unsigned long *) &sp->_emxmouse_thread, mouse_server, (long) sp, 0, 8192); if (rc) { printf("mouse thread error %d=%#x", rc, rc); } else { sp->_mouse_type = M_XTERM; } returnVoid; } } #endif /* USE_EMX_MOUSE */ #if USE_SYSMOUSE { static char dev_tty[] = "/dev/tty"; struct mouse_info the_mouse; char *the_device = 0; if (NC_ISATTY(sp->_ifd)) the_device = ttyname(sp->_ifd); if (the_device == 0) the_device = dev_tty; sp->_mouse_fd = open(the_device, O_RDWR); if (sp->_mouse_fd >= 0) { /* * sysmouse does not have a usable user interface for obtaining * mouse events. The logical way to proceed (reading data on a * stream) only works if one opens the device as root. Even in * that mode, careful examination shows we lose events * occasionally. The interface provided for user programs is to * establish a signal handler. really. * * Take over SIGUSR2 for this purpose since SIGUSR1 is more * likely to be used by an application. getch() will have to * handle the misleading EINTR's. */ signal(SIGUSR2, SIG_IGN); the_mouse.operation = MOUSE_MODE; the_mouse.u.mode.mode = 0; the_mouse.u.mode.signal = SIGUSR2; if (ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse) != -1) { signal(SIGUSR2, handle_sysmouse); the_mouse.operation = MOUSE_SHOW; ioctl(sp->_mouse_fd, CONS_MOUSECTL, &the_mouse); #if defined(FBIO_MODEINFO) || defined(CONS_MODEINFO) /* FreeBSD > 2.x */ { #ifndef FBIO_GETMODE /* FreeBSD 3.x */ #define FBIO_GETMODE CONS_GET #define FBIO_MODEINFO CONS_MODEINFO #endif /* FBIO_GETMODE */ video_info_t the_video; if (ioctl(sp->_mouse_fd, FBIO_GETMODE, &the_video.vi_mode) != -1 && ioctl(sp->_mouse_fd, FBIO_MODEINFO, &the_video) != -1) { sp->_sysmouse_char_width = the_video.vi_cwidth; sp->_sysmouse_char_height = the_video.vi_cheight; } } #endif /* defined(FBIO_MODEINFO) || defined(CONS_MODEINFO) */ if (sp->_sysmouse_char_width <= 0) sp->_sysmouse_char_width = 8; if (sp->_sysmouse_char_height <= 0) sp->_sysmouse_char_height = 16; sp->_mouse_type = M_SYSMOUSE; returnVoid; } } } #endif /* USE_SYSMOUSE */ #ifdef USE_TERM_DRIVER CallDriver(sp, td_initmouse); #else /* we know how to recognize mouse events under "xterm" */ if (key_mouse != 0) { if (!strcmp(key_mouse, xterm_kmous) || strstr(TerminalOf(sp)->type.term_names, "xterm") != 0) { init_xterm_mouse(sp); } } else if (strstr(TerminalOf(sp)->type.term_names, "xterm") != 0) { if (_nc_add_to_try(&(sp->_keytry), xterm_kmous, KEY_MOUSE) == OK) init_xterm_mouse(sp); } #endif returnVoid; } static bool _nc_mouse_init(SCREEN *sp) /* initialize the mouse */ { bool result = FALSE; int i; if (sp != 0) { if (!sp->_mouse_initialized) { sp->_mouse_initialized = TRUE; TR(MY_TRACE, ("_nc_mouse_init() called")); sp->_mouse_eventp = FirstEV(sp); for (i = 0; i < EV_MAX; i++) Invalidate(sp->_mouse_events + i); initialize_mousetype(sp); T(("_nc_mouse_init() set mousetype to %d", sp->_mouse_type)); } result = sp->_mouse_initialized; } return result; } /* * Query to see if there is a pending mouse event. This is called from * fifo_push() in lib_getch.c */ static bool _nc_mouse_event(SCREEN *sp) { MEVENT *eventp = sp->_mouse_eventp; bool result = FALSE; (void) eventp; switch (sp->_mouse_type) { case M_XTERM: /* xterm: never have to query, mouse events are in the keyboard stream */ #if USE_EMX_MOUSE { char kbuf[3]; int i, res = read(M_FD(sp), &kbuf, 3); /* Eat the prefix */ if (res != 3) printf("Got %d chars instead of 3 for prefix.\n", res); for (i = 0; i < res; i++) { if (kbuf[i] != key_mouse[i]) printf("Got char %d instead of %d for prefix.\n", (int) kbuf[i], (int) key_mouse[i]); } result = TRUE; } #endif /* USE_EMX_MOUSE */ break; #if USE_GPM_SUPPORT case M_GPM: if (sp->_mouse_fd >= 0) { /* query server for event, return TRUE if we find one */ Gpm_Event ev; switch (my_Gpm_GetEvent(&ev)) { case 0: /* Connection closed, drop the mouse. */ sp->_mouse_fd = -1; break; case 1: /* there's only one mouse... */ eventp->id = NORMAL_EVENT; eventp->bstate = 0; switch (ev.type & 0x0f) { case (GPM_DOWN): if (ev.buttons & GPM_B_LEFT) eventp->bstate |= BUTTON1_PRESSED; if (ev.buttons & GPM_B_MIDDLE) eventp->bstate |= BUTTON2_PRESSED; if (ev.buttons & GPM_B_RIGHT) eventp->bstate |= BUTTON3_PRESSED; break; case (GPM_UP): if (ev.buttons & GPM_B_LEFT) eventp->bstate |= BUTTON1_RELEASED; if (ev.buttons & GPM_B_MIDDLE) eventp->bstate |= BUTTON2_RELEASED; if (ev.buttons & GPM_B_RIGHT) eventp->bstate |= BUTTON3_RELEASED; break; default: eventp->bstate |= REPORT_MOUSE_POSITION; break; } eventp->x = ev.x - 1; eventp->y = ev.y - 1; eventp->z = 0; /* bump the next-free pointer into the circular list */ sp->_mouse_eventp = NEXT(eventp); result = TRUE; break; } } break; #endif #if USE_SYSMOUSE case M_SYSMOUSE: if (sp->_sysmouse_head < sp->_sysmouse_tail) { *eventp = sp->_sysmouse_fifo[sp->_sysmouse_head]; /* * Point the fifo-head to the next possible location. If there * are none, reset the indices. This may be interrupted by the * signal handler, doing essentially the same reset. */ sp->_sysmouse_head += 1; if (sp->_sysmouse_head == sp->_sysmouse_tail) { sp->_sysmouse_tail = 0; sp->_sysmouse_head = 0; } /* bump the next-free pointer into the circular list */ sp->_mouse_eventp = eventp = NEXT(eventp); result = TRUE; } break; #endif /* USE_SYSMOUSE */ #ifdef USE_TERM_DRIVER case M_TERM_DRIVER: while (sp->_drv_mouse_head < sp->_drv_mouse_tail) { *eventp = sp->_drv_mouse_fifo[sp->_drv_mouse_head]; /* * Point the fifo-head to the next possible location. If there * are none, reset the indices. */ sp->_drv_mouse_head += 1; if (sp->_drv_mouse_head == sp->_drv_mouse_tail) { sp->_drv_mouse_tail = 0; sp->_drv_mouse_head = 0; } /* bump the next-free pointer into the circular list */ sp->_mouse_eventp = eventp = NEXT(eventp); result = TRUE; } break; #endif case M_NONE: break; } return result; /* true if we found an event */ } #if USE_EMX_MOUSE #define PRESS_POSITION(n) \ do { \ eventp->bstate = MASK_PRESS(n); \ sp->_mouse_bstate |= MASK_PRESS(n); \ if (button & 0x40) { \ eventp->bstate = MASK_RELEASE(n); \ sp->_mouse_bstate &= ~MASK_PRESS(n); \ } \ } while (0) #else #define PRESS_POSITION(n) \ do { \ eventp->bstate = (mmask_t) (sp->_mouse_bstate & MASK_PRESS(n) \ ? REPORT_MOUSE_POSITION \ : MASK_PRESS(n)); \ sp->_mouse_bstate |= MASK_PRESS(n); \ } while (0) #endif static bool handle_wheel(SCREEN *sp, MEVENT * eventp, int button, int wheel) { bool result = TRUE; switch (button & 3) { case 0: if (wheel) { eventp->bstate = MASK_PRESS(4); /* Do not record in sp->_mouse_bstate; there will be no * corresponding release event. */ } else { PRESS_POSITION(1); } break; case 1: if (wheel) { #if NCURSES_MOUSE_VERSION == 2 eventp->bstate = MASK_PRESS(5); /* See comment above for button 4 */ #else /* Ignore this event as it is not a true press of the button */ eventp->bstate = REPORT_MOUSE_POSITION; #endif } else { PRESS_POSITION(2); } break; case 2: PRESS_POSITION(3); break; default: result = FALSE; break; } return result; } static bool decode_X10_bstate(SCREEN *sp, MEVENT * eventp, unsigned intro) { bool result; int b; eventp->bstate = 0; if (!handle_wheel(sp, eventp, (int) intro, (intro & 96) == 96)) { /* * Release events aren't reported for individual buttons, just for * the button set as a whole. However, because there are normally * no mouse events under xterm that intervene between press and * release, we can infer the button actually released by looking at * the previous event. */ if (sp->_mouse_bstate & BUTTON_PRESSED) { eventp->bstate = BUTTON_RELEASED; for (b = 1; b <= MAX_BUTTONS; ++b) { if (!(sp->_mouse_bstate & MASK_PRESS(b))) eventp->bstate &= ~MASK_RELEASE(b); } sp->_mouse_bstate = 0; } else { /* * xterm will return a stream of release-events to let the * application know where the mouse is going, if private mode * 1002 or 1003 is enabled. */ eventp->bstate = REPORT_MOUSE_POSITION; } } if (intro & 4) { eventp->bstate |= BUTTON_SHIFT; } if (intro & 8) { eventp->bstate |= BUTTON_ALT; } if (intro & 16) { eventp->bstate |= BUTTON_CTRL; } result = (eventp->bstate & REPORT_MOUSE_POSITION) ? TRUE : FALSE; return result; } /* This code requires that your xterm entry contain the kmous capability and * that it be set to the \E[M documented in the Xterm Control Sequences * reference. This is how we arrange for mouse events to be reported via a * KEY_MOUSE return value from wgetch(). After this value is received, * _nc_mouse_inline() gets called and is immediately responsible for parsing * the mouse status information following the prefix. * * The following quotes from the ctlseqs.ms document in the XTerm distribution, * describing the mouse tracking feature: * * Parameters for all mouse tracking escape sequences generated by xterm encode * numeric parameters in a single character as value+040. For example, ! is * 1. * * On button press or release, xterm sends ESC [ M CbCxCy. The low two bits of * Cb encode button information: 0=MB1 pressed, 1=MB2 pressed, 2=MB3 pressed, * 3=release. The upper bits encode what modifiers were down when the button * was pressed and are added together. 4=Shift, 8=Meta, 16=Control. Cx and Cy * are the x and y coordinates of the mouse event. The upper left corner is * (1,1). * * (End quote) By the time we get here, we've eaten the key prefix. FYI, the * loop below is necessary because mouse click info isn't guaranteed to present * as a single clist item. * * Wheel mice may return buttons 4 and 5 when the wheel is turned. We encode * those as button presses. */ static bool decode_xterm_X10(SCREEN *sp, MEVENT * eventp) { unsigned char kbuf[4]; size_t grabbed; int res; bool result; # if USE_PTHREADS_EINTR # if USE_WEAK_SYMBOLS if ((pthread_self) && (pthread_kill) && (pthread_equal)) # endif _nc_globals.read_thread = pthread_self(); # endif for (grabbed = 0; grabbed < 3; grabbed += (size_t) res) { /* For VIO mouse we add extra bit 64 to disambiguate button-up. */ res = (int) read( #if USE_EMX_MOUSE (M_FD(sp) >= 0) ? M_FD(sp) : sp->_ifd, #else sp->_ifd, #endif kbuf + grabbed, 3 - grabbed); if (res == -1) break; } #if USE_PTHREADS_EINTR _nc_globals.read_thread = 0; #endif kbuf[3] = '\0'; TR(TRACE_IEVENT, ("_nc_mouse_inline sees the following xterm data: '%s'", kbuf)); /* there's only one mouse... */ eventp->id = NORMAL_EVENT; result = decode_X10_bstate(sp, eventp, kbuf[0]); eventp->x = (kbuf[1] - ' ') - 1; eventp->y = (kbuf[2] - ' ') - 1; return result; } #ifdef EXP_XTERM_1005 /* * This is identical to X10/X11 responses except that there are two UTF-8 * characters storing the ordinates instead of two bytes. */ static bool decode_xterm_1005(SCREEN *sp, MEVENT * eventp) { char kbuf[80]; size_t grabbed; size_t limit = (sizeof(kbuf) - 1); unsigned coords[2]; int res; bool result; coords[0] = 0; coords[1] = 0; # if USE_PTHREADS_EINTR # if USE_WEAK_SYMBOLS if ((pthread_self) && (pthread_kill) && (pthread_equal)) # endif _nc_globals.read_thread = pthread_self(); # endif for (grabbed = 0; grabbed < limit;) { res = (int) read( #if USE_EMX_MOUSE (M_FD(sp) >= 0) ? M_FD(sp) : sp->_ifd, #else sp->_ifd, #endif kbuf + grabbed, 1); if (res == -1) break; grabbed += (size_t) res; if (grabbed > 1) { size_t check = 1; int n; int rc; for (n = 0; n < 2; ++n) { if (check >= grabbed) break; rc = _nc_conv_to_utf32(&coords[n], kbuf + check, (unsigned) (grabbed - check)); if (!rc) break; check += (size_t) rc; } if (n >= 2) break; } } #if USE_PTHREADS_EINTR _nc_globals.read_thread = 0; #endif TR(TRACE_IEVENT, ("_nc_mouse_inline sees the following xterm data: %s", _nc_visbufn(kbuf, (int) grabbed))); /* there's only one mouse... */ eventp->id = NORMAL_EVENT; result = decode_X10_bstate(sp, eventp, UChar(kbuf[0])); eventp->x = (int) (coords[0] - ' ') - 1; eventp->y = (int) (coords[1] - ' ') - 1; return result; } #endif /* EXP_XTERM_1005 */ /* * ECMA-48 section 5.4 */ #define isInter(c) ((c) >= 0x20 && (c) <= 0x2f) #define isParam(c) ((c) >= 0x30 && (c) <= 0x3f) #define isFinal(c) ((c) >= 0x40 && (c) <= 0x7e) #define MAX_PARAMS 9 typedef struct { int nerror; /* nonzero if there are unexpected chars */ int nparam; /* number of numeric parameters */ int params[MAX_PARAMS]; int final; /* the final-character */ } SGR_DATA; static bool read_SGR(SCREEN *sp, SGR_DATA * result) { char kbuf[80]; /* bigger than any possible mouse response */ int grabbed = 0; int res; int ch = 0; int now = -1; int marker = 1; memset(result, 0, sizeof(*result)); # if USE_PTHREADS_EINTR # if USE_WEAK_SYMBOLS if ((pthread_self) && (pthread_kill) && (pthread_equal)) # endif _nc_globals.read_thread = pthread_self(); # endif do { res = (int) read( #if USE_EMX_MOUSE (M_FD(sp) >= 0) ? M_FD(sp) : sp->_ifd, #else sp->_ifd, #endif kbuf + grabbed, 1); if (res == -1) break; if ((grabbed + 3) >= (int) sizeof(kbuf)) { result->nerror++; break; } ch = UChar(kbuf[grabbed]); kbuf[grabbed + 1] = 0; switch (ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (marker) { ++now; result->nparam = (now + 1); } marker = 0; result->params[now] = (result->params[now] * 10) + (ch - '0'); break; case ';': if (marker) { ++now; result->nparam = (now + 1); } marker = 1; break; default: if (ch < 32 || ch > 126) { /* * Technically other characters could be interspersed in the * response. Ignore those for now. */ result->nerror++; continue; } else if (isFinal(ch)) { if (marker) { result->nparam++; } result->final = ch; } else { result->nerror++; } break; } ++grabbed; } while (!isFinal(ch)); #if USE_PTHREADS_EINTR _nc_globals.read_thread = 0; #endif kbuf[++grabbed] = 0; TR(TRACE_IEVENT, ("_nc_mouse_inline sees the following xterm data: '%s'", kbuf)); return (grabbed > 0) && (result->nerror == 0); } static bool decode_xterm_SGR1006(SCREEN *sp, MEVENT * eventp) { SGR_DATA data; bool result = FALSE; if (read_SGR(sp, &data)) { int b = data.params[0]; int b3 = 1 + (b & 3); eventp->id = NORMAL_EVENT; if (data.final == 'M') { (void) handle_wheel(sp, eventp, b, (b & 64) == 64); } else { mmask_t pressed = (mmask_t) NCURSES_MOUSE_MASK(b3, NCURSES_BUTTON_PRESSED); mmask_t release = (mmask_t) NCURSES_MOUSE_MASK(b3, NCURSES_BUTTON_RELEASED); if (sp->_mouse_bstate & pressed) { eventp->bstate = release; sp->_mouse_bstate &= ~pressed; } else { eventp->bstate = REPORT_MOUSE_POSITION; } } result = (eventp->bstate & REPORT_MOUSE_POSITION) ? TRUE : FALSE; eventp->x = (data.params[1] ? (data.params[1] - 1) : 0); eventp->y = (data.params[2] ? (data.params[2] - 1) : 0); } return result; } static bool _nc_mouse_inline(SCREEN *sp) /* mouse report received in the keyboard stream -- parse its info */ { bool result = FALSE; MEVENT *eventp = sp->_mouse_eventp; TR(MY_TRACE, ("_nc_mouse_inline() called")); if (sp->_mouse_type == M_XTERM) { switch (sp->_mouse_format) { case MF_X10: result = decode_xterm_X10(sp, eventp); break; case MF_SGR1006: result = decode_xterm_SGR1006(sp, eventp); break; #ifdef EXP_XTERM_1005 case MF_XTERM_1005: result = decode_xterm_1005(sp, eventp); break; #endif } TR(MY_TRACE, ("_nc_mouse_inline: primitive mouse-event %s has slot %ld", _nc_tracemouse(sp, eventp), (long) IndexEV(sp, eventp))); /* bump the next-free pointer into the circular list */ sp->_mouse_eventp = NEXT(eventp); if (!result) { /* If this event is from a wheel-mouse, treat it like position * reports and avoid waiting for the release-events which will * never come. */ if (eventp->bstate & BUTTON_PRESSED) { int b; for (b = 4; b <= MAX_BUTTONS; ++b) { if ((eventp->bstate & MASK_PRESS(b))) { result = TRUE; break; } } } } } return (result); } static void mouse_activate(SCREEN *sp, int on) { if (!on && !sp->_mouse_initialized) return; if (!_nc_mouse_init(sp)) return; if (on) { sp->_mouse_bstate = 0; switch (sp->_mouse_type) { case M_XTERM: #if NCURSES_EXT_FUNCS NCURSES_SP_NAME(keyok) (NCURSES_SP_ARGx KEY_MOUSE, on); #endif TPUTS_TRACE("xterm mouse initialization"); enable_xterm_mouse(sp, 1); break; #if USE_GPM_SUPPORT case M_GPM: if (enable_gpm_mouse(sp, TRUE)) { sp->_mouse_fd = *(my_gpm_fd); T(("GPM mouse_fd %d", sp->_mouse_fd)); } break; #endif #if USE_SYSMOUSE case M_SYSMOUSE: signal(SIGUSR2, handle_sysmouse); sp->_mouse_active = TRUE; break; #endif #ifdef USE_TERM_DRIVER case M_TERM_DRIVER: sp->_mouse_active = TRUE; break; #endif case M_NONE: return; } /* Make runtime binding to cut down on object size of applications that * do not use the mouse (e.g., 'clear'). */ sp->_mouse_event = _nc_mouse_event; sp->_mouse_inline = _nc_mouse_inline; sp->_mouse_parse = _nc_mouse_parse; sp->_mouse_resume = _nc_mouse_resume; sp->_mouse_wrap = _nc_mouse_wrap; } else { switch (sp->_mouse_type) { case M_XTERM: TPUTS_TRACE("xterm mouse deinitialization"); enable_xterm_mouse(sp, 0); break; #if USE_GPM_SUPPORT case M_GPM: enable_gpm_mouse(sp, FALSE); break; #endif #if USE_SYSMOUSE case M_SYSMOUSE: signal(SIGUSR2, SIG_IGN); sp->_mouse_active = FALSE; break; #endif #ifdef USE_TERM_DRIVER case M_TERM_DRIVER: sp->_mouse_active = FALSE; break; #endif case M_NONE: return; } } NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG); } /************************************************************************** * * Device-independent code * **************************************************************************/ static bool _nc_mouse_parse(SCREEN *sp, int runcount) /* parse a run of atomic mouse events into a gesture */ { MEVENT *eventp = sp->_mouse_eventp; MEVENT *next, *ep; MEVENT *first_valid = NULL; MEVENT *first_invalid = NULL; int n; int b; bool merge; bool endLoop; TR(MY_TRACE, ("_nc_mouse_parse(%d) called", runcount)); /* * When we enter this routine, the event list next-free pointer * points just past a run of mouse events that we know were separated * in time by less than the critical click interval. The job of this * routine is to collapse this run into a single higher-level event * or gesture. * * We accomplish this in two passes. The first pass merges press/release * pairs into click events. The second merges runs of click events into * double or triple-click events. * * It's possible that the run may not resolve to a single event (for * example, if the user quadruple-clicks). If so, leading events * in the run are ignored if user does not call getmouse in a loop (getting * them from newest to older). * * Note that this routine is independent of the format of the specific * format of the pointing-device's reports. We can use it to parse * gestures on anything that reports press/release events on a per- * button basis, as long as the device-dependent mouse code puts stuff * on the queue in MEVENT format. */ /* * Reset all events that were not set, in case the user sometimes calls * getmouse only once and other times until there are no more events in * queue. * * This also allows reaching the beginning of the run. */ ep = eventp; for (n = runcount; n < EV_MAX; n++) { Invalidate(ep); ep = NEXT(ep); } #ifdef TRACE if (USE_TRACEF(TRACE_IEVENT)) { _trace_slot(sp, "before mouse press/release merge:"); _tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d", RunParams(sp, eventp, ep), runcount); _nc_unlock_global(tracef); } #endif /* TRACE */ /* first pass; merge press/release pairs */ endLoop = FALSE; while (!endLoop) { next = NEXT(ep); if (next == eventp) { /* Will end the loop, but compact before */ endLoop = TRUE; } else { #define MASK_CHANGED(x) (!(ep->bstate & MASK_PRESS(x)) \ == !(next->bstate & MASK_RELEASE(x))) if (ValidEvent(ep) && ValidEvent(next) && ep->x == next->x && ep->y == next->y && (ep->bstate & BUTTON_PRESSED) && (!(next->bstate & BUTTON_PRESSED))) { bool changed = TRUE; for (b = 1; b <= MAX_BUTTONS; ++b) { if (!MASK_CHANGED(b)) { changed = FALSE; break; } } if (changed) { merge = FALSE; for (b = 1; b <= MAX_BUTTONS; ++b) { if ((sp->_mouse_mask & MASK_CLICK(b)) && (ep->bstate & MASK_PRESS(b))) { next->bstate &= ~MASK_RELEASE(b); next->bstate |= MASK_CLICK(b); merge = TRUE; } } if (merge) { Invalidate(ep); } } } } /* Compact valid events */ if (!ValidEvent(ep)) { if ((first_valid != NULL) && (first_invalid == NULL)) { first_invalid = ep; } } else { if (first_valid == NULL) { first_valid = ep; } else if (first_invalid != NULL) { *first_invalid = *ep; Invalidate(ep); first_invalid = NEXT(first_invalid); } } ep = next; } if (first_invalid != NULL) { eventp = first_invalid; } #ifdef TRACE if (USE_TRACEF(TRACE_IEVENT)) { _trace_slot(sp, "before mouse click merge:"); if (first_valid == NULL) { _tracef("_nc_mouse_parse: no valid event"); } else { _tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d", RunParams(sp, eventp, first_valid), runcount); _nc_unlock_global(tracef); } } #endif /* TRACE */ /* * Second pass; merge click runs. We merge click events forward in the * queue. For example, double click can be changed to triple click. * * NOTE: There is a problem with this design! If the application * allows enough click events to pile up in the circular queue so * they wrap around, it will cheerfully merge the newest forward * into the oldest, creating a bogus doubleclick and confusing * the queue-traversal logic rather badly. Generally this won't * happen, because calling getmouse() marks old events invalid and * ineligible for merges. The true solution to this problem would * be to timestamp each MEVENT and perform the obvious sanity check, * but the timer element would have to have sub-second resolution, * which would get us into portability trouble. */ first_invalid = NULL; endLoop = (first_valid == NULL); ep = first_valid; while (!endLoop) { next = NEXT(ep); if (next == eventp) { /* Will end the loop, but check event type and compact before */ endLoop = TRUE; } else if (!ValidEvent(next)) { continue; } else { /* merge click events forward */ if ((ep->bstate & BUTTON_CLICKED) && (next->bstate & BUTTON_CLICKED)) { merge = FALSE; for (b = 1; b <= MAX_BUTTONS; ++b) { if ((sp->_mouse_mask & MASK_DOUBLE_CLICK(b)) && (ep->bstate & MASK_CLICK(b)) && (next->bstate & MASK_CLICK(b))) { next->bstate &= ~MASK_CLICK(b); next->bstate |= MASK_DOUBLE_CLICK(b); merge = TRUE; } } if (merge) { Invalidate(ep); } } /* merge double-click events forward */ if ((ep->bstate & BUTTON_DOUBLE_CLICKED) && (next->bstate & BUTTON_CLICKED)) { merge = FALSE; for (b = 1; b <= MAX_BUTTONS; ++b) { if ((sp->_mouse_mask & MASK_TRIPLE_CLICK(b)) && (ep->bstate & MASK_DOUBLE_CLICK(b)) && (next->bstate & MASK_CLICK(b))) { next->bstate &= ~MASK_CLICK(b); next->bstate |= MASK_TRIPLE_CLICK(b); merge = TRUE; } } if (merge) { Invalidate(ep); } } } /* Discard event if it does not match event mask */ if (!(ep->bstate & sp->_mouse_mask2)) { Invalidate(ep); } /* Compact valid events */ if (!ValidEvent(ep)) { if (ep == first_valid) { first_valid = next; } else if (first_invalid == NULL) { first_invalid = ep; } } else if (first_invalid != NULL) { *first_invalid = *ep; Invalidate(ep); first_invalid = NEXT(first_invalid); } ep = next; } if (first_invalid == NULL) { first_invalid = eventp; } sp->_mouse_eventp = first_invalid; #ifdef TRACE if (first_valid != NULL) { if (USE_TRACEF(TRACE_IEVENT)) { _trace_slot(sp, "after mouse event queue compaction:"); _tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d", RunParams(sp, first_invalid, first_valid), runcount); _nc_unlock_global(tracef); } for (ep = first_valid; ep != first_invalid; ep = NEXT(ep)) { if (ValidEvent(ep)) TR(MY_TRACE, ("_nc_mouse_parse: returning composite mouse event %s at slot %ld", _nc_tracemouse(sp, ep), (long) IndexEV(sp, ep))); } } #endif /* TRACE */ /* after all this, do we have a valid event? */ return ValidEvent(PREV(first_invalid)); } static void _nc_mouse_wrap(SCREEN *sp) /* release mouse -- called by endwin() before shellout/exit */ { TR(MY_TRACE, ("_nc_mouse_wrap() called")); switch (sp->_mouse_type) { case M_XTERM: if (sp->_mouse_mask) mouse_activate(sp, FALSE); break; #if USE_GPM_SUPPORT /* GPM: pass all mouse events to next client */ case M_GPM: if (sp->_mouse_mask) mouse_activate(sp, FALSE); break; #endif #if USE_SYSMOUSE case M_SYSMOUSE: mouse_activate(sp, FALSE); break; #endif #ifdef USE_TERM_DRIVER case M_TERM_DRIVER: mouse_activate(sp, FALSE); break; #endif case M_NONE: break; } } static void _nc_mouse_resume(SCREEN *sp) /* re-connect to mouse -- called by doupdate() after shellout */ { TR(MY_TRACE, ("_nc_mouse_resume() called")); switch (sp->_mouse_type) { case M_XTERM: /* xterm: re-enable reporting */ if (sp->_mouse_mask) mouse_activate(sp, TRUE); break; #if USE_GPM_SUPPORT case M_GPM: /* GPM: reclaim our event set */ if (sp->_mouse_mask) mouse_activate(sp, TRUE); break; #endif #if USE_SYSMOUSE case M_SYSMOUSE: mouse_activate(sp, TRUE); break; #endif #ifdef USE_TERM_DRIVER case M_TERM_DRIVER: mouse_activate(sp, TRUE); break; #endif case M_NONE: break; } } /************************************************************************** * * Mouse interface entry points for the API * **************************************************************************/ NCURSES_EXPORT(int) NCURSES_SP_NAME(getmouse) (NCURSES_SP_DCLx MEVENT * aevent) { int result = ERR; T((T_CALLED("getmouse(%p,%p)"), (void *) SP_PARM, (void *) aevent)); if ((aevent != 0) && (SP_PARM != 0) && (SP_PARM->_mouse_type != M_NONE)) { MEVENT *eventp = SP_PARM->_mouse_eventp; /* compute the current-event pointer */ MEVENT *prev = PREV(eventp); /* * Discard events not matching mask (there could be still some if * _nc_mouse_parse was not called, e.g., when _nc_mouse_inline returns * false). */ while (ValidEvent(prev) && (!(prev->bstate & SP_PARM->_mouse_mask2))) { Invalidate(prev); prev = PREV(prev); } if (ValidEvent(prev)) { /* copy the event we find there */ *aevent = *prev; TR(TRACE_IEVENT, ("getmouse: returning event %s from slot %ld", _nc_tracemouse(SP_PARM, prev), (long) IndexEV(SP_PARM, prev))); Invalidate(prev); /* so the queue slot becomes free */ SP_PARM->_mouse_eventp = prev; result = OK; } else { /* Reset the provided event */ aevent->bstate = 0; Invalidate(aevent); aevent->x = 0; aevent->y = 0; aevent->z = 0; } } returnCode(result); } #if NCURSES_SP_FUNCS /* grab a copy of the current mouse event */ NCURSES_EXPORT(int) getmouse(MEVENT * aevent) { return NCURSES_SP_NAME(getmouse) (CURRENT_SCREEN, aevent); } #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetmouse) (NCURSES_SP_DCLx MEVENT * aevent) { int result = ERR; T((T_CALLED("ungetmouse(%p,%p)"), (void *) SP_PARM, (void *) aevent)); if (aevent != 0 && SP_PARM != 0) { MEVENT *eventp = SP_PARM->_mouse_eventp; /* stick the given event in the next-free slot */ *eventp = *aevent; /* bump the next-free pointer into the circular list */ SP_PARM->_mouse_eventp = NEXT(eventp); /* push back the notification event on the keyboard queue */ result = NCURSES_SP_NAME(ungetch) (NCURSES_SP_ARGx KEY_MOUSE); } returnCode(result); } #if NCURSES_SP_FUNCS /* enqueue a synthesized mouse event to be seen by the next wgetch() */ NCURSES_EXPORT(int) ungetmouse(MEVENT * aevent) { return NCURSES_SP_NAME(ungetmouse) (CURRENT_SCREEN, aevent); } #endif NCURSES_EXPORT(mmask_t) NCURSES_SP_NAME(mousemask) (NCURSES_SP_DCLx mmask_t newmask, mmask_t * oldmask) /* set the mouse event mask */ { mmask_t result = 0; int b; T((T_CALLED("mousemask(%p,%#lx,%p)"), (void *) SP_PARM, (unsigned long) newmask, (void *) oldmask)); if (SP_PARM != 0) { if (oldmask) *oldmask = SP_PARM->_mouse_mask; if (newmask || SP_PARM->_mouse_initialized) { _nc_mouse_init(SP_PARM); if (SP_PARM->_mouse_type != M_NONE) { result = newmask & (REPORT_MOUSE_POSITION | BUTTON_ALT | BUTTON_CTRL | BUTTON_SHIFT | BUTTON_PRESSED | BUTTON_RELEASED | BUTTON_CLICKED | BUTTON_DOUBLE_CLICKED | BUTTON_TRIPLE_CLICKED); mouse_activate(SP_PARM, (bool) (result != 0)); SP_PARM->_mouse_mask = result; SP_PARM->_mouse_mask2 = result; /* * Make a mask corresponding to the states we will need to * retain (temporarily) while building up the state that the * user asked for. */ for (b = 1; b <= MAX_BUTTONS; ++b) { if (SP_PARM->_mouse_mask2 & MASK_TRIPLE_CLICK(b)) SP_PARM->_mouse_mask2 |= MASK_DOUBLE_CLICK(b); if (SP_PARM->_mouse_mask2 & MASK_DOUBLE_CLICK(b)) SP_PARM->_mouse_mask2 |= MASK_CLICK(b); if (SP_PARM->_mouse_mask2 & MASK_CLICK(b)) SP_PARM->_mouse_mask2 |= (MASK_PRESS(b) | MASK_RELEASE(b)); } } } } returnMMask(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(mmask_t) mousemask(mmask_t newmask, mmask_t * oldmask) { return NCURSES_SP_NAME(mousemask) (CURRENT_SCREEN, newmask, oldmask); } #endif NCURSES_EXPORT(bool) wenclose(const WINDOW *win, int y, int x) /* check to see if given window encloses given screen location */ { bool result = FALSE; T((T_CALLED("wenclose(%p,%d,%d)"), (const void *) win, y, x)); if (win != 0) { y -= win->_yoffset; result = ((win->_begy <= y && win->_begx <= x && (win->_begx + win->_maxx) >= x && (win->_begy + win->_maxy) >= y) ? TRUE : FALSE); } returnBool(result); } NCURSES_EXPORT(int) NCURSES_SP_NAME(mouseinterval) (NCURSES_SP_DCLx int maxclick) /* set the maximum mouse interval within which to recognize a click */ { int oldval; T((T_CALLED("mouseinterval(%p,%d)"), (void *) SP_PARM, maxclick)); if (SP_PARM != 0) { oldval = SP_PARM->_maxclick; if (maxclick >= 0) SP_PARM->_maxclick = maxclick; } else { oldval = DEFAULT_MAXCLICK; } returnCode(oldval); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) mouseinterval(int maxclick) { return NCURSES_SP_NAME(mouseinterval) (CURRENT_SCREEN, maxclick); } #endif /* This may be used by other routines to ask for the existence of mouse support */ NCURSES_EXPORT(bool) _nc_has_mouse(SCREEN *sp) { return (((0 == sp) || (sp->_mouse_type == M_NONE)) ? FALSE : TRUE); } NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_mouse) (NCURSES_SP_DCL0) { return _nc_has_mouse(SP_PARM); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(bool) has_mouse(void) { return _nc_has_mouse(CURRENT_SCREEN); } #endif NCURSES_EXPORT(bool) wmouse_trafo(const WINDOW *win, int *pY, int *pX, bool to_screen) { bool result = FALSE; T((T_CALLED("wmouse_trafo(%p,%p,%p,%d)"), (const void *) win, (void *) pY, (void *) pX, to_screen)); if (win && pY && pX) { int y = *pY; int x = *pX; if (to_screen) { y += win->_begy + win->_yoffset; x += win->_begx; if (wenclose(win, y, x)) result = TRUE; } else { if (wenclose(win, y, x)) { y -= (win->_begy + win->_yoffset); x -= win->_begx; result = TRUE; } } if (result) { *pX = x; *pY = y; } } returnBool(result); } ncurses-6.0-20160213/ncurses/base/lib_vline.c0000644000175100001440000000620311503257162017162 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_vline.c ** ** The routine wvline(). ** */ #include MODULE_ID("$Id: lib_vline.c,v 1.12 2010/12/19 01:22:58 tom Exp $") NCURSES_EXPORT(int) wvline(WINDOW *win, chtype ch, int n) { int code = ERR; int row, col; int end; T((T_CALLED("wvline(%p,%s,%d)"), (void *) win, _tracechtype(ch), n)); if (win) { NCURSES_CH_T wch; row = win->_cury; col = win->_curx; end = row + n - 1; if (end > win->_maxy) end = win->_maxy; if (ch == 0) SetChar2(wch, ACS_VLINE); else SetChar2(wch, ch); wch = _nc_render(win, wch); while (end >= row) { struct ldat *line = &(win->_line[end]); line->text[col] = wch; CHANGED_CELL(line, col); end--; } _nc_synchook(win); code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_freeall.c0000644000175100001440000001167212521260722017462 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-on * ****************************************************************************/ #include #include #if HAVE_NC_FREEALL #if HAVE_LIBDBMALLOC extern int malloc_errfd; /* FIXME */ #endif MODULE_ID("$Id: lib_freeall.c,v 1.63 2015/05/02 23:46:26 tom Exp $") /* * Free all ncurses data. This is used for testing only (there's no practical * use for it as an extension). */ NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_freeall) (NCURSES_SP_DCL0) { WINDOWLIST *p, *q; static va_list empty_va; T((T_CALLED("_nc_freeall()"))); #if NO_LEAKS if (SP_PARM != 0) { if (SP_PARM->_oldnum_list != 0) { FreeAndNull(SP_PARM->_oldnum_list); } if (SP_PARM->_panelHook.destroy != 0) { SP_PARM->_panelHook.destroy(SP_PARM->_panelHook.stdscr_pseudo_panel); } } #endif if (SP_PARM != 0) { _nc_lock_global(curses); while (WindowList(SP_PARM) != 0) { bool deleted = FALSE; /* Delete only windows that're not a parent */ for (each_window(SP_PARM, p)) { WINDOW *p_win = &(p->win); bool found = FALSE; for (each_window(SP_PARM, q)) { WINDOW *q_win = &(q->win); if ((p != q) && (q_win->_flags & _SUBWIN) && (p_win == q_win->_parent)) { found = TRUE; break; } } if (!found) { if (delwin(p_win) != ERR) deleted = TRUE; break; } } /* * Don't continue to loop if the list is trashed. */ if (!deleted) break; } delscreen(SP_PARM); _nc_unlock_global(curses); } (void) _nc_printf_string(0, empty_va); #ifdef TRACE (void) _nc_trace_buf(-1, (size_t) 0); #endif #if USE_WIDEC_SUPPORT FreeIfNeeded(_nc_wacs); #endif _nc_leaks_tinfo(); #if HAVE_LIBDBMALLOC malloc_dump(malloc_errfd); #elif HAVE_LIBDMALLOC #elif HAVE_LIBMPATROL __mp_summary(); #elif HAVE_PURIFY purify_all_inuse(); #endif returnVoid; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_freeall(void) { NCURSES_SP_NAME(_nc_freeall) (CURRENT_SCREEN); } #endif NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_free_and_exit) (NCURSES_SP_DCLx int code) { NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG); NCURSES_SP_NAME(_nc_freeall) (NCURSES_SP_ARG); #ifdef TRACE trace(0); /* close trace file, freeing its setbuf */ { static va_list fake; free(_nc_varargs("?", fake)); } #endif exit(code); } #else NCURSES_EXPORT(void) _nc_freeall(void) { } NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_free_and_exit) (NCURSES_SP_DCLx int code) { if (SP_PARM) { delscreen(SP_PARM); if (SP_PARM->_term) NCURSES_SP_NAME(del_curterm) (NCURSES_SP_ARGx SP_PARM->_term); } exit(code); } #endif #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) _nc_free_and_exit(int code) { NCURSES_SP_NAME(_nc_free_and_exit) (CURRENT_SCREEN, code); } #endif ncurses-6.0-20160213/ncurses/base/lib_beep.c0000644000175100001440000000673512306677173017004 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * beep.c * * The routine beep(). * */ #include #ifndef CUR #define CUR SP_TERMTYPE #endif MODULE_ID("$Id: lib_beep.c,v 1.17 2014/03/08 20:32:59 tom Exp $") /* * beep() * * Sound the current terminal's audible bell if it has one. If not, * flash the screen if possible. * */ NCURSES_EXPORT(int) NCURSES_SP_NAME(beep) (NCURSES_SP_DCL0) { int res = ERR; T((T_CALLED("beep(%p)"), (void *) SP_PARM)); #ifdef USE_TERM_DRIVER if (SP_PARM != 0) res = CallDriver_1(SP_PARM, td_doBeepOrFlash, TRUE); #else /* FIXME: should make sure that we are not in altchar mode */ if (cur_term == 0) { res = ERR; } else if (bell) { res = NCURSES_PUTP2_FLUSH("bell", bell); } else if (flash_screen) { res = NCURSES_PUTP2_FLUSH("flash_screen", flash_screen); _nc_flush(); } #endif returnCode(res); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) beep(void) { return NCURSES_SP_NAME(beep) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/lib_box.c0000644000175100001440000001165011364702035016636 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Sven Verdoolaege 2001 * ****************************************************************************/ /* ** lib_box.c ** ** The routine wborder(). ** */ #include MODULE_ID("$Id: lib_box.c,v 1.24 2010/04/24 23:51:57 tom Exp $") #if USE_WIDEC_SUPPORT static NCURSES_INLINE chtype _my_render(WINDOW *win, chtype ch) { NCURSES_CH_T wch; SetChar2(wch, ch); wch = _nc_render(win, wch); return ((attr_t) CharOf(wch)) | AttrOf(wch); } #define RENDER_WITH_DEFAULT(ch,def) w ## ch = _my_render(win, (ch == 0) ? def : ch) #else #define RENDER_WITH_DEFAULT(ch,def) w ## ch = _nc_render(win, (ch == 0) ? def : ch) #endif NCURSES_EXPORT(int) wborder(WINDOW *win, chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br) { NCURSES_SIZE_T i; NCURSES_SIZE_T endx, endy; chtype wls, wrs, wts, wbs, wtl, wtr, wbl, wbr; T((T_CALLED("wborder(%p,%s,%s,%s,%s,%s,%s,%s,%s)"), (void *) win, _tracechtype2(1, ls), _tracechtype2(2, rs), _tracechtype2(3, ts), _tracechtype2(4, bs), _tracechtype2(5, tl), _tracechtype2(6, tr), _tracechtype2(7, bl), _tracechtype2(8, br))); if (!win) returnCode(ERR); RENDER_WITH_DEFAULT(ls, ACS_VLINE); RENDER_WITH_DEFAULT(rs, ACS_VLINE); RENDER_WITH_DEFAULT(ts, ACS_HLINE); RENDER_WITH_DEFAULT(bs, ACS_HLINE); RENDER_WITH_DEFAULT(tl, ACS_ULCORNER); RENDER_WITH_DEFAULT(tr, ACS_URCORNER); RENDER_WITH_DEFAULT(bl, ACS_LLCORNER); RENDER_WITH_DEFAULT(br, ACS_LRCORNER); T(("using %s, %s, %s, %s, %s, %s, %s, %s", _tracechtype2(1, wls), _tracechtype2(2, wrs), _tracechtype2(3, wts), _tracechtype2(4, wbs), _tracechtype2(5, wtl), _tracechtype2(6, wtr), _tracechtype2(7, wbl), _tracechtype2(8, wbr))); endx = win->_maxx; endy = win->_maxy; for (i = 0; i <= endx; i++) { SetChar2(win->_line[0].text[i], wts); SetChar2(win->_line[endy].text[i], wbs); } win->_line[endy].firstchar = win->_line[0].firstchar = 0; win->_line[endy].lastchar = win->_line[0].lastchar = endx; for (i = 0; i <= endy; i++) { SetChar2(win->_line[i].text[0], wls); SetChar2(win->_line[i].text[endx], wrs); win->_line[i].firstchar = 0; win->_line[i].lastchar = endx; } SetChar2(win->_line[0].text[0], wtl); SetChar2(win->_line[0].text[endx], wtr); SetChar2(win->_line[endy].text[0], wbl); SetChar2(win->_line[endy].text[endx], wbr); _nc_synchook(win); returnCode(OK); } ncurses-6.0-20160213/ncurses/base/lib_printw.c0000644000175100001440000001067612021167420017372 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997-on * ****************************************************************************/ /* ** lib_printw.c ** ** The routines printw(), wprintw() and friends. ** */ #include MODULE_ID("$Id: lib_printw.c,v 1.23 2012/09/03 17:55:28 tom Exp $") NCURSES_EXPORT(int) printw(const char *fmt,...) { va_list argp; int code; #ifdef TRACE va_list argq; va_start(argq, fmt); T((T_CALLED("printw(%s%s)"), _nc_visbuf(fmt), _nc_varargs(fmt, argq))); va_end(argq); #endif va_start(argp, fmt); code = vwprintw(stdscr, fmt, argp); va_end(argp); returnCode(code); } NCURSES_EXPORT(int) wprintw(WINDOW *win, const char *fmt,...) { va_list argp; int code; #ifdef TRACE va_list argq; va_start(argq, fmt); T((T_CALLED("wprintw(%p,%s%s)"), (void *) win, _nc_visbuf(fmt), _nc_varargs(fmt, argq))); va_end(argq); #endif va_start(argp, fmt); code = vwprintw(win, fmt, argp); va_end(argp); returnCode(code); } NCURSES_EXPORT(int) mvprintw(int y, int x, const char *fmt,...) { va_list argp; int code; #ifdef TRACE va_list argq; va_start(argq, fmt); T((T_CALLED("mvprintw(%d,%d,%s%s)"), y, x, _nc_visbuf(fmt), _nc_varargs(fmt, argq))); va_end(argq); #endif if ((code = move(y, x)) != ERR) { va_start(argp, fmt); code = vwprintw(stdscr, fmt, argp); va_end(argp); } returnCode(code); } NCURSES_EXPORT(int) mvwprintw(WINDOW *win, int y, int x, const char *fmt,...) { va_list argp; int code; #ifdef TRACE va_list argq; va_start(argq, fmt); T((T_CALLED("mvwprintw(%d,%d,%p,%s%s)"), y, x, (void *) win, _nc_visbuf(fmt), _nc_varargs(fmt, argq))); va_end(argq); #endif if ((code = wmove(win, y, x)) != ERR) { va_start(argp, fmt); code = vwprintw(win, fmt, argp); va_end(argp); } returnCode(code); } NCURSES_EXPORT(int) vwprintw(WINDOW *win, const char *fmt, va_list argp) { char *buf; int code = ERR; #if NCURSES_SP_FUNCS SCREEN *sp = _nc_screen_of(win); #endif T((T_CALLED("vwprintw(%p,%s,va_list)"), (void *) win, _nc_visbuf(fmt))); buf = NCURSES_SP_NAME(_nc_printf_string) (NCURSES_SP_ARGx fmt, argp); if (buf != 0) { code = waddstr(win, buf); } returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_slkatrof.c0000644000175100001440000000631711270675705017710 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * * and: Thomas E. Dickey 2005 * ****************************************************************************/ /* * lib_slkatrof.c * Soft key routines. * Switch off labels attributes */ #include MODULE_ID("$Id: lib_slkatrof.c,v 1.11 2009/10/24 22:12:21 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attroff) (NCURSES_SP_DCLx const chtype attr) { T((T_CALLED("slk_attroff(%p,%s)"), (void *) SP_PARM, _traceattr(attr))); if (SP_PARM != 0 && SP_PARM->_slk != 0) { TR(TRACE_ATTRS, ("... current %s", _tracech_t(CHREF(SP_PARM->_slk->attr)))); RemAttr(SP_PARM->_slk->attr, attr); if ((attr & A_COLOR) != 0) { SetPair(SP_PARM->_slk->attr, 0); } TR(TRACE_ATTRS, ("new attribute is %s", _tracech_t(CHREF(SP_PARM->_slk->attr)))); returnCode(OK); } else returnCode(ERR); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_attroff(const chtype attr) { return NCURSES_SP_NAME(slk_attroff) (CURRENT_SCREEN, attr); } #endif ncurses-6.0-20160213/ncurses/base/lib_scanw.c0000644000175100001440000000727411650567747017211 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_scanw.c ** ** The routines scanw(), wscanw() and friends. ** */ #include MODULE_ID("$Id: lib_scanw.c,v 1.13 2011/10/22 16:31:35 tom Exp $") NCURSES_EXPORT(int) vwscanw(WINDOW *win, NCURSES_CONST char *fmt, va_list argp) { char buf[BUFSIZ]; if (wgetnstr(win, buf, (int) sizeof(buf) - 1) == ERR) return (ERR); return (vsscanf(buf, fmt, argp)); } NCURSES_EXPORT(int) scanw(NCURSES_CONST char *fmt,...) { int code; va_list ap; T(("scanw(\"%s\",...) called", fmt)); va_start(ap, fmt); code = vwscanw(stdscr, fmt, ap); va_end(ap); return (code); } NCURSES_EXPORT(int) wscanw(WINDOW *win, NCURSES_CONST char *fmt,...) { int code; va_list ap; T(("wscanw(%p,\"%s\",...) called", (void *) win, fmt)); va_start(ap, fmt); code = vwscanw(win, fmt, ap); va_end(ap); return (code); } NCURSES_EXPORT(int) mvscanw(int y, int x, NCURSES_CONST char *fmt,...) { int code; va_list ap; va_start(ap, fmt); code = (move(y, x) == OK) ? vwscanw(stdscr, fmt, ap) : ERR; va_end(ap); return (code); } NCURSES_EXPORT(int) mvwscanw(WINDOW *win, int y, int x, NCURSES_CONST char *fmt,...) { int code; va_list ap; va_start(ap, fmt); code = (wmove(win, y, x) == OK) ? vwscanw(win, fmt, ap) : ERR; va_end(ap); return (code); } ncurses-6.0-20160213/ncurses/base/lib_immedok.c0000644000175100001440000000526111270700153017467 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_immedok.c ** ** The routine immedok. ** */ #include MODULE_ID("$Id: lib_immedok.c,v 1.5 2009/10/24 22:32:11 tom Exp $") NCURSES_EXPORT(void) immedok(WINDOW *win, bool flag) { T((T_CALLED("immedok(%p,%d)"), (void *) win, flag)); if (win) win->_immed = flag; returnVoid; } ncurses-6.0-20160213/ncurses/base/lib_chgat.c0000644000175100001440000000637712273270613017150 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Sven Verdoolaege 2001 * * and: Thomas E. Dickey 2005 * ****************************************************************************/ /* ** lib_chgat.c ** ** The routine wchgat(). ** */ #include MODULE_ID("$Id: lib_chgat.c,v 1.10 2014/02/01 22:13:31 tom Exp $") NCURSES_EXPORT(int) wchgat(WINDOW *win, int n, attr_t attr, NCURSES_PAIRS_T color, const void *opts GCC_UNUSED) { int i; T((T_CALLED("wchgat(%p,%d,%s,%d)"), (void *) win, n, _traceattr(attr), (int) color)); if (win) { struct ldat *line = &(win->_line[win->_cury]); toggle_attr_on(attr, ColorPair(color)); for (i = win->_curx; i <= win->_maxx && (n == -1 || (n-- > 0)); i++) { SetAttr(line->text[i], attr); SetPair(line->text[i], color); CHANGED_CELL(line, i); } returnCode(OK); } else returnCode(ERR); } ncurses-6.0-20160213/ncurses/base/lib_slkinit.c0000644000175100001440000000671511272700206017525 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* * lib_slkinit.c * Soft key routines. * Initialize soft labels. Called by the user before initscr(). */ #include MODULE_ID("$Id: lib_slkinit.c,v 1.13 2009/10/31 00:10:46 tom Exp $") #ifdef USE_SP_RIPOFF #define SoftkeyFormat SP_PARM->slk_format #else #define SoftkeyFormat _nc_globals.slk_format #endif NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_init) (NCURSES_SP_DCLx int format) { int code = ERR; START_TRACE(); T((T_CALLED("slk_init(%p,%d)"), (void *) SP_PARM, format)); if (format >= 0 && format <= 3 #ifdef USE_SP_RIPOFF && SP_PARM && SP_PARM->_prescreen #endif && !SoftkeyFormat) { SoftkeyFormat = 1 + format; code = NCURSES_SP_NAME(_nc_ripoffline) (NCURSES_SP_ARGx -SLK_LINES(SoftkeyFormat), _nc_slk_initialize); } returnCode(code); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_init(int format) { return NCURSES_SP_NAME(slk_init) (CURRENT_SCREEN_PRE, format); } #endif ncurses-6.0-20160213/ncurses/base/lib_slkatrset.c0000644000175100001440000000574611270675705020104 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * * and: Thomas E. Dickey 2005 * ****************************************************************************/ /* * lib_slkatrset.c * Soft key routines. * Set the labels attributes */ #include MODULE_ID("$Id: lib_slkatrset.c,v 1.10 2009/10/24 22:12:21 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attrset) (NCURSES_SP_DCLx const chtype attr) { T((T_CALLED("slk_attrset(%p,%s)"), (void *) SP_PARM, _traceattr(attr))); if (SP_PARM != 0 && SP_PARM->_slk != 0) { SetAttr(SP_PARM->_slk->attr, attr); returnCode(OK); } else returnCode(ERR); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) slk_attrset(const chtype attr) { return NCURSES_SP_NAME(slk_attrset) (CURRENT_SCREEN, attr); } #endif ncurses-6.0-20160213/ncurses/base/lib_addstr.c0000644000175100001440000001617612646527605017353 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2011,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * * * Rewritten 2001-2004 to support wide-characters by * * Sven Verdoolaege * * Thomas Dickey * ****************************************************************************/ /* ** lib_addstr.c * ** The routines waddnstr(), waddchnstr(). ** */ #include MODULE_ID("$Id: lib_addstr.c,v 1.53 2016/01/16 21:00:53 tom Exp $") NCURSES_EXPORT(int) waddnstr(WINDOW *win, const char *astr, int n) { const char *str = astr; int code = ERR; T((T_CALLED("waddnstr(%p,%s,%d)"), (void *) win, _nc_visbufn(astr, n), n)); if (win && (str != 0)) { TR(TRACE_VIRTPUT | TRACE_ATTRS, ("... current %s", _traceattr(WINDOW_ATTRS(win)))); code = OK; if (n < 0) n = (int) strlen(astr); TR(TRACE_VIRTPUT, ("str is not null, length = %d", n)); while ((n-- > 0) && (*str != '\0')) { NCURSES_CH_T ch; TR(TRACE_VIRTPUT, ("*str = %#o", UChar(*str))); SetChar(ch, UChar(*str++), A_NORMAL); if (_nc_waddch_nosync(win, ch) == ERR) { code = ERR; break; } } _nc_synchook(win); } TR(TRACE_VIRTPUT, ("waddnstr returns %d", code)); returnCode(code); } NCURSES_EXPORT(int) waddchnstr(WINDOW *win, const chtype *astr, int n) { NCURSES_SIZE_T y, x; int code = OK; int i; struct ldat *line; T((T_CALLED("waddchnstr(%p,%p,%d)"), (void *) win, (const void *) astr, n)); if (!win) returnCode(ERR); y = win->_cury; x = win->_curx; if (n < 0) { const chtype *str; n = 0; for (str = (const chtype *) astr; *str != 0; str++) n++; } if (n > win->_maxx - x + 1) n = win->_maxx - x + 1; if (n == 0) returnCode(code); line = &(win->_line[y]); for (i = 0; i < n && ChCharOf(astr[i]) != '\0'; ++i) { SetChar2(line->text[i + x], astr[i]); } CHANGED_RANGE(line, x, (NCURSES_SIZE_T) (x + n - 1)); _nc_synchook(win); returnCode(code); } #if USE_WIDEC_SUPPORT NCURSES_EXPORT(int) _nc_wchstrlen(const cchar_t *s) { int result = 0; if (s != 0) { while (CharOf(s[result]) != L'\0') { result++; } } return result; } NCURSES_EXPORT(int) wadd_wchnstr(WINDOW *win, const cchar_t *astr, int n) { static const NCURSES_CH_T blank = NewChar(BLANK_TEXT); NCURSES_SIZE_T y; NCURSES_SIZE_T x; int code = OK; struct ldat *line; int i, j, start, len, end; T((T_CALLED("wadd_wchnstr(%p,%s,%d)"), (void *) win, _nc_viscbuf(astr, n), n)); if (!win) returnCode(ERR); y = win->_cury; x = win->_curx; if (n < 0) { n = _nc_wchstrlen(astr); } if (n > win->_maxx - x + 1) n = win->_maxx - x + 1; if (n == 0) returnCode(code); line = &(win->_line[y]); start = x; end = x + n - 1; /* * Reset orphaned cells of multi-column characters that extend up to the * new string's location to blanks. */ if (x > 0 && isWidecExt(line->text[x])) { for (i = 0; i <= x; ++i) { if (!isWidecExt(line->text[x - i])) { /* must be isWidecBase() */ start -= i; while (i > 0) { line->text[x - i--] = _nc_render(win, blank); } break; } } } /* * Copy the new string to the window. */ for (i = 0; i < n && CharOf(astr[i]) != L'\0' && x <= win->_maxx; ++i) { if (isWidecExt(astr[i])) continue; len = wcwidth(CharOf(astr[i])); if (x + len - 1 <= win->_maxx) { line->text[x] = _nc_render(win, astr[i]); if (len > 1) { for (j = 0; j < len; ++j) { if (j != 0) { line->text[x + j] = line->text[x]; } SetWidecExt(line->text[x + j], j); } } else { len = 1; } x = (NCURSES_SIZE_T) (x + len); end += len - 1; } else { break; } } /* * Set orphaned cells of multi-column characters which lie after the new * string to blanks. */ while (x <= win->_maxx && isWidecExt(line->text[x])) { line->text[x] = _nc_render(win, blank); ++end; ++x; } CHANGED_RANGE(line, start, end); _nc_synchook(win); returnCode(code); } NCURSES_EXPORT(int) waddnwstr(WINDOW *win, const wchar_t *str, int n) { int code = ERR; T((T_CALLED("waddnwstr(%p,%s,%d)"), (void *) win, _nc_viswbufn(str, n), n)); if (win && (str != 0)) { TR(TRACE_VIRTPUT | TRACE_ATTRS, ("... current %s", _traceattr(WINDOW_ATTRS(win)))); code = OK; if (n < 0) n = (int) wcslen(str); TR(TRACE_VIRTPUT, ("str is not null, length = %d", n)); while ((n-- > 0) && (*str != L('\0'))) { NCURSES_CH_T ch; TR(TRACE_VIRTPUT, ("*str[0] = %#lx", (unsigned long) *str)); SetChar(ch, *str++, A_NORMAL); if (wadd_wch(win, &ch) == ERR) { code = ERR; break; } } _nc_synchook(win); } TR(TRACE_VIRTPUT, ("waddnwstr returns %d", code)); returnCode(code); } #endif ncurses-6.0-20160213/ncurses/base/lib_initscr.c0000644000175100001440000000772712326777527017554 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-2003 * ****************************************************************************/ /* ** lib_initscr.c ** ** The routines initscr(), and termname(). ** */ #include #if HAVE_SYS_TERMIO_H #include /* needed for ISC */ #endif MODULE_ID("$Id: lib_initscr.c,v 1.40 2014/04/26 18:47:51 juergen Exp $") NCURSES_EXPORT(WINDOW *) initscr(void) { WINDOW *result; NCURSES_CONST char *name; START_TRACE(); T((T_CALLED("initscr()"))); _nc_init_pthreads(); _nc_lock_global(curses); /* Portable applications must not call initscr() more than once */ if (!_nc_globals.init_screen) { _nc_globals.init_screen = TRUE; if ((name = getenv("TERM")) == 0 || *name == '\0') name = "unknown"; #ifdef __CYGWIN__ /* * 2002/9/21 * Work around a bug in Cygwin. Full-screen subprocesses run from * bash, in turn spawned from another full-screen process, will dump * core when attempting to write to stdout. Opening /dev/tty * explicitly seems to fix the problem. */ if (NC_ISATTY(fileno(stdout))) { FILE *fp = fopen("/dev/tty", "w"); if (fp != 0 && NC_ISATTY(fileno(fp))) { fclose(stdout); dup2(fileno(fp), STDOUT_FILENO); stdout = fdopen(STDOUT_FILENO, "w"); } } #endif if (newterm(name, stdout, stdin) == 0) { fprintf(stderr, "Error opening terminal: %s.\n", name); exit(EXIT_FAILURE); } /* def_shell_mode - done in newterm/_nc_setupscreen */ #if NCURSES_SP_FUNCS NCURSES_SP_NAME(def_prog_mode) (CURRENT_SCREEN); #else def_prog_mode(); #endif } result = stdscr; _nc_unlock_global(curses); returnWin(result); } ncurses-6.0-20160213/ncurses/base/lib_erase.c0000644000175100001440000000704511270700175017147 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* ** lib_erase.c ** ** The routine werase(). ** */ #include MODULE_ID("$Id: lib_erase.c,v 1.17 2009/10/24 22:32:29 tom Exp $") NCURSES_EXPORT(int) werase(WINDOW *win) { int code = ERR; int y; NCURSES_CH_T blank; NCURSES_CH_T *sp, *end, *start; T((T_CALLED("werase(%p)"), (void *) win)); if (win) { blank = win->_nc_bkgd; for (y = 0; y <= win->_maxy; y++) { start = win->_line[y].text; end = &start[win->_maxx]; /* * If this is a derived window, we have to handle the case where * a multicolumn character extends into the window that we are * erasing. */ if_WIDEC({ if (isWidecExt(start[0])) { int x = (win->_parent != 0) ? (win->_begx) : 0; while (x-- > 0) { if (isWidecBase(start[-1])) { --start; break; } --start; } } }); for (sp = start; sp <= end; sp++) *sp = blank; win->_line[y].firstchar = 0; win->_line[y].lastchar = win->_maxx; } win->_curx = win->_cury = 0; win->_flags &= ~_WRAPPED; _nc_synchook(win); code = OK; } returnCode(code); } ncurses-6.0-20160213/ncurses/base/MKlib_gen.sh0000755000175100001440000003214012606264317017245 0ustar tomusers#!/bin/sh # # MKlib_gen.sh -- generate sources from curses.h macro definitions # # ($Id: MKlib_gen.sh,v 1.52 2015/10/10 19:36:47 tom Exp $) # ############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # The XSI Curses standard requires all curses entry points to exist as # functions, even though many definitions would normally be shadowed # by macros. Rather than hand-hack all that code, we actually # generate functions from the macros. # # This script accepts a file of prototypes on standard input. It discards # any that don't have a `generated' comment attached. It then parses each # prototype (relying on the fact that none of the macros take function # pointer or array arguments) and generates C source from it. # # Here is what the pipeline stages are doing: # # 1. sed: extract prototypes of generated functions # 2. sed: decorate prototypes with generated arguments a1. a2,...z # 3. awk: generate the calls with args matching the formals # 4. sed: prefix function names in prototypes so the preprocessor won't expand # them. # 5. cpp: macro-expand the file so the macro calls turn into C calls # 6. awk: strip the expansion junk off the front and add the new header # 7. sed: squeeze spaces, strip off gen_ prefix. # # keep the editing independent of locale: if test "${LANGUAGE+set}" = set; then LANGUAGE=C; export LANGUAGE; fi if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi if test "${LC_COLLATE+set}" = set; then LC_COLLATE=C; export LC_COLLATE; fi preprocessor="$1 -DNCURSES_INTERNALS -I../include" AWK="$2" USE="$3" # A patch discussed here: # https://gcc.gnu.org/ml/gcc-patches/2014-06/msg02185.html # introduces spurious #line markers into the preprocessor output. The result # appears in gcc 5.0 and (with modification) in 5.1, making it necessary to # determine if we are using gcc, and if so, what version because the proposed # solution uses a nonstandard option. PRG=`echo "$1" | $AWK '{ sub(/^[ ]*/,""); sub(/[ ].*$/, ""); print; }' || exit 0` FSF=`"$PRG" --version 2>/dev/null || exit 0 | fgrep "Free Software Foundation" | head -n 1` ALL=`"$PRG" -dumpversion 2>/dev/null || exit 0` ONE=`echo "$ALL" | sed -e 's/\..*$//'` if test -n "$FSF" && test -n "$ALL" && test -n "$ONE" ; then if test $ONE -ge 5 ; then echo ".. adding -P option to work around $PRG $ALL" >&2 preprocessor="$preprocessor -P" fi fi PID=$$ ED1=sed1_${PID}.sed ED2=sed2_${PID}.sed ED3=sed3_${PID}.sed ED4=sed4_${PID}.sed AW1=awk1_${PID}.awk AW2=awk2_${PID}.awk TMP=gen__${PID}.c trap "rm -f $ED1 $ED2 $ED3 $ED4 $AW1 $AW2 $TMP" 0 1 2 5 15 ALL=$USE if test "$USE" = implemented ; then CALL="call_" cat >$ED1 <$ED1 <$ED2 <$ED3 <$ED4 <$ED4 <$AW1 <<\EOF1 BEGIN { skip=0; } /^P_POUNDCif/ { print "\n" print $0 skip=0; } /^P_POUNDCendif/ { print $0 skip=1; } $0 !~ /^P_/ { if (skip) print "\n" skip=1; first=$1 for (i = 1; i <= NF; i++) { if ( $i != "NCURSES_CONST" ) { first = i; break; } } second = first + 1; returnCast = ""; if ( $first == "chtype" ) { returnType = "Chtype"; } else if ( $first == "SCREEN" ) { returnType = "SP"; } else if ( $first == "WINDOW" ) { returnType = "Win"; } else if ( $first == "attr_t" || $second == "attrset" || $second == "standout" || $second == "standend" || $second == "wattrset" || $second == "wstandout" || $second == "wstandend" ) { returnType = "IntAttr"; returnCast = "(attr_t)"; } else if ( $first == "bool" || $first == "NCURSES_BOOL" ) { returnType = "Bool"; } else if ( $second == "*" ) { returnType = "Ptr"; } else { returnType = "Code"; } myfunc = second; for (i = second; i <= NF; i++) { if ($i != "*") { myfunc = i; break; } } print $0; print "{"; argcount = 1; check = NF - 1; if ($check == "void") argcount = 0; if (argcount != 0) { for (i = 1; i <= NF; i++) if ($i == ",") argcount++; } # suppress trace-code for functions that we cannot do properly here, # since they return data. dotrace = 1; if ($myfunc ~ /innstr/) dotrace = 0; if ($myfunc ~ /innwstr/) dotrace = 0; # workaround functions that we do not parse properly if ($myfunc ~ /ripoffline/) { dotrace = 0; argcount = 2; if ($myfunc ~ /NCURSES_SP_NAME/) { argcount = 3; } } if ($myfunc ~ /wunctrl/) { dotrace = 0; } call = "@@T((T_CALLED(\"" args = "" comma = "" num = 0; pointer = 0; va_list = 0; varargs = 0; argtype = "" for (i = myfunc; i <= NF; i++) { ch = $i; if ( ch == "*" ) { pointer = 1; } else if ( ch == "va_list" ) { va_list = 1; } else if ( ch == "..." ) { varargs = 1; } else if ( ch == "char" ) { argtype = "char"; } else if ( ch == "int" ) { argtype = "int"; } else if ( ch == "short" ) { argtype = "short"; } else if ( ch == "chtype" ) { argtype = "chtype"; } else if ( ch == "attr_t" || ch == "NCURSES_ATTR_T" ) { argtype = "attr"; } if ( ch == "," || ch == ")" ) { argcast = ""; if (va_list) { call = call "%s" } else if (varargs) { call = call "%s" } else if (pointer) { if ( argtype == "char" ) { call = call "%s" comma = comma "_nc_visbuf2(" num "," pointer = 0; } else { call = call "%p" comma = comma "(const void *)" } } else if (argcount != 0) { if ( argtype == "int" || argtype == "short" ) { call = call "%d" argtype = "" } else if ( argtype != "" ) { call = call "%s" comma = comma "_trace" argtype "2(" num "," if (argtype == "attr") { argcast = "(chtype)"; } } else { call = call "%#lx" comma = comma "(long)" } } if (ch == ",") { args = args comma "a" ++num; } else if ( argcount != 0 ) { if ( va_list ) { args = args comma "\"va_list\"" } else if ( varargs ) { args = args comma "\"...\"" } else { args = args comma argcast "z" } } call = call ch if (pointer == 0 && argcount != 0 && argtype != "" ) args = args ")" if (args != "") comma = ", " pointer = 0; argtype = "" } if ( i == myfunc || ch == "(" ) call = call ch } call = call "\")" if (args != "") call = call ", " args call = call ")); " if (dotrace) printf "%s", call if (match($0, "^void")) { call = "" } else if (dotrace) { call = sprintf("return%s( ", returnType); if (returnCast != "") { call = call returnCast; } } else { call = "@@return "; } call = call $myfunc "("; for (i = 1; i < argcount; i++) { if (i != 1) call = call ", "; call = call "a" i; } if ( argcount != 0 && $check != "..." ) { if (argcount != 1) call = call ", "; call = call "z"; } if (!match($0, "^void")) call = call ") "; if (dotrace) { call = call ")"; } print call ";" if (match($0, "^void")) print "@@returnVoid;" print "}"; } EOF1 cat >$AW2 <" print "" print "#undef NCURSES_NOMACROS /* _this_ file uses macros */" print "" print "#include " print "" print "#undef vw_scanw" print "#undef vwscanw" print "" print "#undef vw_printw" print "#undef vwprintw" } /^DECLARATIONS/ {start = 1; next;} { if (start) { if ( "$USE" == "generated" ) { print \$0; } else if ( \$0 ~ /^[{}]?\$/ ) { print \$0; } else if ( \$0 ~ /;/ ) { print \$0; } else { calls[start] = \$0; print \$0; start++; } } } END { if ( "$USE" != "generated" ) { print "int main(void)" print "{" for (n = 1; n < start; ++n) { value = calls[n]; if ( value !~ /P_POUNDC/ ) { gsub(/[[:blank:]]+/," ",value); sub(/^[[:alnum:]_]+ /,"",value); sub(/^\* /,"",value); gsub(/[[:alnum:]_]+ \* /,"",value); gsub(/ (const) /," ",value); gsub(/ (int|short|attr_t|chtype|wchar_t|NCURSES_BOOL|NCURSES_OUTC|NCURSES_OUTC_sp|va_list) /," ",value); gsub(/ void /,"",value); sub(/^/,"call_",value); gsub(/ (a[[:digit:]]|z) /, " 0 ", value); gsub(/ int[[:blank:]]*[(][^)]+[)][(][^)]+[)]/, "0", value); printf "\t%s;\n", value; } else { print value; } } print " return 0;" print "}" } } EOF1 cat >$TMP < #undef NCURSES_NOMACROS #include #include #include DECLARATIONS EOF sed -n -f $ED1 \ | sed -e 's/NCURSES_EXPORT(\(.*\)) \(.*\) (\(.*\))/\1 \2(\3)/' \ | sed -f $ED2 \ | $AWK -f $AW1 using=$USE \ | sed \ -e 's/ [ ]*$//g' \ -e 's/^\([a-zA-Z_][a-zA-Z_]*[ *]*\)/\1 gen_/' \ -e 's/gen_$//' \ -e 's/ / /g' >>$TMP $preprocessor $TMP 2>/dev/null \ | sed \ -e 's/ / /g' \ -e 's/^ //' \ -e 's/_Bool/NCURSES_BOOL/g' \ | $AWK -f $AW2 \ | sed -f $ED3 \ | sed \ -e 's/^.*T_CALLED.*returnCode( \([a-z].*) \));/ return \1;/' \ -e 's/^.*T_CALLED.*returnCode( \((wmove.*) \));/ return \1;/' \ -e 's/gen_//' \ -e 's/^[ ]*#/#/' \ -e '/#ident/d' \ -e '/#line/d' \ | sed -f $ED4 ncurses-6.0-20160213/ncurses/base/lib_newwin.c0000644000175100001440000002560511570265003017360 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* ** lib_newwin.c ** ** The routines newwin(), subwin() and their dependent ** */ #include #include MODULE_ID("$Id: lib_newwin.c,v 1.71 2011/05/28 21:32:51 tom Exp $") #define window_is(name) ((sp)->_##name == win) #if USE_REENTRANT #define remove_window(name) \ sp->_##name = 0 #else #define remove_window(name) \ sp->_##name = 0; \ if (win == name) \ name = 0 #endif static void remove_window_from_screen(WINDOW *win) { SCREEN *sp; #ifdef USE_SP_WINDOWLIST if ((sp = _nc_screen_of(win)) != 0) { if (window_is(curscr)) { remove_window(curscr); } else if (window_is(stdscr)) { remove_window(stdscr); } else if (window_is(newscr)) { remove_window(newscr); } } #else for (each_screen(sp)) { if (window_is(curscr)) { remove_window(curscr); break; } else if (window_is(stdscr)) { remove_window(stdscr); break; } else if (window_is(newscr)) { remove_window(newscr); break; } } #endif } NCURSES_EXPORT(int) _nc_freewin(WINDOW *win) { WINDOWLIST *p, *q; int i; int result = ERR; #ifdef USE_SP_WINDOWLIST SCREEN *sp = _nc_screen_of(win); /* pretend this is parameter */ #endif T((T_CALLED("_nc_freewin(%p)"), (void *) win)); if (win != 0) { if (_nc_nonsp_try_global(curses) == 0) { q = 0; for (each_window(SP_PARM, p)) { if (&(p->win) == win) { remove_window_from_screen(win); if (q == 0) WindowList(SP_PARM) = p->next; else q->next = p->next; if (!(win->_flags & _SUBWIN)) { for (i = 0; i <= win->_maxy; i++) FreeIfNeeded(win->_line[i].text); } free(win->_line); free(p); result = OK; T(("...deleted win=%p", (void *) win)); break; } q = p; } _nc_nonsp_unlock_global(curses); } } returnCode(result); } NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newwin) (NCURSES_SP_DCLx int num_lines, int num_columns, int begy, int begx) { WINDOW *win; NCURSES_CH_T *ptr; int i; T((T_CALLED("newwin(%p, %d,%d,%d,%d)"), (void *) SP_PARM, num_lines, num_columns, begy, begx)); if (begy < 0 || begx < 0 || num_lines < 0 || num_columns < 0 || SP_PARM == 0) returnWin(0); if (num_lines == 0) num_lines = SP_PARM->_lines_avail - begy; if (num_columns == 0) num_columns = screen_columns(SP_PARM) - begx; win = NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_ARGx num_lines, num_columns, begy, begx, 0); if (win == 0) returnWin(0); for (i = 0; i < num_lines; i++) { win->_line[i].text = typeCalloc(NCURSES_CH_T, (unsigned) num_columns); if (win->_line[i].text == 0) { (void) _nc_freewin(win); returnWin(0); } for (ptr = win->_line[i].text; ptr < win->_line[i].text + num_columns; ptr++) SetChar(*ptr, BLANK_TEXT, BLANK_ATTR); } returnWin(win); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(WINDOW *) newwin(int num_lines, int num_columns, int begy, int begx) { WINDOW *win; _nc_sp_lock_global(curses); win = NCURSES_SP_NAME(newwin) (CURRENT_SCREEN, num_lines, num_columns, begy, begx); _nc_sp_unlock_global(curses); return (win); } #endif NCURSES_EXPORT(WINDOW *) derwin(WINDOW *orig, int num_lines, int num_columns, int begy, int begx) { WINDOW *win; int i; int flags = _SUBWIN; #if NCURSES_SP_FUNCS SCREEN *sp = _nc_screen_of(orig); #endif T((T_CALLED("derwin(%p,%d,%d,%d,%d)"), (void *) orig, num_lines, num_columns, begy, begx)); /* * make sure window fits inside the original one */ if (begy < 0 || begx < 0 || orig == 0 || num_lines < 0 || num_columns < 0) returnWin(0); if (begy + num_lines > orig->_maxy + 1 || begx + num_columns > orig->_maxx + 1) returnWin(0); if (num_lines == 0) num_lines = orig->_maxy + 1 - begy; if (num_columns == 0) num_columns = orig->_maxx + 1 - begx; if (orig->_flags & _ISPAD) flags |= _ISPAD; win = NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_ARGx num_lines, num_columns, orig->_begy + begy, orig->_begx + begx, flags); if (win == 0) returnWin(0); win->_pary = begy; win->_parx = begx; WINDOW_ATTRS(win) = WINDOW_ATTRS(orig); win->_nc_bkgd = orig->_nc_bkgd; for (i = 0; i < num_lines; i++) win->_line[i].text = &orig->_line[begy++].text[begx]; win->_parent = orig; returnWin(win); } NCURSES_EXPORT(WINDOW *) subwin(WINDOW *w, int l, int c, int y, int x) { WINDOW *result = 0; T((T_CALLED("subwin(%p, %d, %d, %d, %d)"), (void *) w, l, c, y, x)); if (w != 0) { T(("parent has begy = %ld, begx = %ld", (long) w->_begy, (long) w->_begx)); result = derwin(w, l, c, y - w->_begy, x - w->_begx); } returnWin(result); } static bool dimension_limit(int value) { NCURSES_SIZE_T test = (NCURSES_SIZE_T) value; return (test == value && value > 0); } NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx int num_lines, int num_columns, int begy, int begx, int flags) { int i; WINDOWLIST *wp; WINDOW *win; bool is_padwin = (flags & _ISPAD); T((T_CALLED("_nc_makenew(%p,%d,%d,%d,%d)"), (void *) SP_PARM, num_lines, num_columns, begy, begx)); if (SP_PARM == 0) returnWin(0); if (!dimension_limit(num_lines) || !dimension_limit(num_columns)) returnWin(0); if ((wp = typeCalloc(WINDOWLIST, 1)) == 0) returnWin(0); win = &(wp->win); if ((win->_line = typeCalloc(struct ldat, ((unsigned) num_lines))) == 0) { free(wp); returnWin(0); } _nc_nonsp_lock_global(curses); win->_curx = 0; win->_cury = 0; win->_maxy = (NCURSES_SIZE_T) (num_lines - 1); win->_maxx = (NCURSES_SIZE_T) (num_columns - 1); win->_begy = (NCURSES_SIZE_T) begy; win->_begx = (NCURSES_SIZE_T) begx; win->_yoffset = SP_PARM->_topstolen; win->_flags = (short) flags; WINDOW_ATTRS(win) = A_NORMAL; SetChar(win->_nc_bkgd, BLANK_TEXT, BLANK_ATTR); win->_clear = (is_padwin ? FALSE : (num_lines == screen_lines(SP_PARM) && num_columns == screen_columns(SP_PARM))); win->_idlok = FALSE; win->_idcok = TRUE; win->_scroll = FALSE; win->_leaveok = FALSE; win->_use_keypad = FALSE; win->_delay = -1; win->_immed = FALSE; win->_sync = 0; win->_parx = -1; win->_pary = -1; win->_parent = 0; win->_regtop = 0; win->_regbottom = (NCURSES_SIZE_T) (num_lines - 1); win->_pad._pad_y = -1; win->_pad._pad_x = -1; win->_pad._pad_top = -1; win->_pad._pad_bottom = -1; win->_pad._pad_left = -1; win->_pad._pad_right = -1; for (i = 0; i < num_lines; i++) { /* * This used to do * * win->_line[i].firstchar = win->_line[i].lastchar = _NOCHANGE; * * which marks the whole window unchanged. That's how * SVr1 curses did it, but SVr4 curses marks the whole new * window changed. * * With the old SVr1-like code, say you have stdscr full of * characters, then create a new window with newwin(), * then do a printw(win, "foo ");, the trailing spaces are * completely ignored by the following refreshes. So, you * get "foojunkjunk" on the screen instead of "foo " as * you actually intended. * * SVr4 doesn't do this. Instead the spaces are actually written. * So that's how we want ncurses to behave. */ win->_line[i].firstchar = 0; win->_line[i].lastchar = (NCURSES_SIZE_T) (num_columns - 1); if_USE_SCROLL_HINTS(win->_line[i].oldindex = i); } if (!is_padwin && (begx + num_columns == screen_columns(SP_PARM))) { win->_flags |= _ENDLINE; if (begx == 0 && num_lines == screen_lines(SP_PARM) && begy == 0) win->_flags |= _FULLWIN; if (begy + num_lines == screen_lines(SP_PARM)) win->_flags |= _SCROLLWIN; } wp->next = WindowList(SP_PARM); wp->screen = SP_PARM; WindowList(SP_PARM) = wp; T((T_CREATE("window %p"), (void *) win)); _nc_nonsp_unlock_global(curses); returnWin(win); } /* * wgetch() and other functions with a WINDOW* parameter may use a SCREEN* * internally, and it is useful to allow those to be invoked without switching * SCREEN's, e.g., for multi-threaded applications. */ #if NCURSES_SP_FUNCS NCURSES_EXPORT(WINDOW *) _nc_curscr_of(SCREEN *sp) { return sp == 0 ? 0 : CurScreen(sp); } NCURSES_EXPORT(WINDOW *) _nc_newscr_of(SCREEN *sp) { return sp == 0 ? 0 : NewScreen(sp); } NCURSES_EXPORT(WINDOW *) _nc_stdscr_of(SCREEN *sp) { return sp == 0 ? 0 : StdScreen(sp); } #endif ncurses-6.0-20160213/ncurses/base/lib_clear.c0000644000175100001440000000531211270700271017126 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_clear.c ** ** The routine wclear(). ** */ #include MODULE_ID("$Id: lib_clear.c,v 1.8 2009/10/24 22:33:29 tom Exp $") NCURSES_EXPORT(int) wclear(WINDOW *win) { int code = ERR; T((T_CALLED("wclear(%p)"), (void *) win)); if ((code = werase(win)) != ERR) win->_clear = TRUE; returnCode(code); } ncurses-6.0-20160213/ncurses/base/lib_refresh.c0000644000175100001440000002251111601430276017501 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer * ****************************************************************************/ /* * lib_refresh.c * * The routines wrefresh() and wnoutrefresh(). * */ #include MODULE_ID("$Id: lib_refresh.c,v 1.45 2011/06/25 19:02:22 Vassili.Courzakis Exp $") NCURSES_EXPORT(int) wrefresh(WINDOW *win) { int code; #if NCURSES_SP_FUNCS SCREEN *SP_PARM = _nc_screen_of(win); #endif T((T_CALLED("wrefresh(%p)"), (void *) win)); if (win == 0) { code = ERR; } else if (win == CurScreen(SP_PARM)) { CurScreen(SP_PARM)->_clear = TRUE; code = NCURSES_SP_NAME(doupdate) (NCURSES_SP_ARG); } else if ((code = wnoutrefresh(win)) == OK) { if (win->_clear) NewScreen(SP_PARM)->_clear = TRUE; code = NCURSES_SP_NAME(doupdate) (NCURSES_SP_ARG); /* * Reset the clearok() flag in case it was set for the special * case in hardscroll.c (if we don't reset it here, we'll get 2 * refreshes because the flag is copied from stdscr to newscr). * Resetting the flag shouldn't do any harm, anyway. */ win->_clear = FALSE; } returnCode(code); } NCURSES_EXPORT(int) wnoutrefresh(WINDOW *win) { int limit_x; int src_row, src_col; int begx; int begy; int dst_row, dst_col; #if USE_SCROLL_HINTS bool wide; #endif #if NCURSES_SP_FUNCS SCREEN *SP_PARM = _nc_screen_of(win); #endif T((T_CALLED("wnoutrefresh(%p)"), (void *) win)); /* * This function will break badly if we try to refresh a pad. */ if ((win == 0) || (win->_flags & _ISPAD)) returnCode(ERR); #ifdef TRACE if (USE_TRACEF(TRACE_UPDATE)) { _tracedump("...win", win); _nc_unlock_global(tracef); } #endif /* TRACE */ /* put them here so "win == 0" won't break our code */ begx = win->_begx; begy = win->_begy; NewScreen(SP_PARM)->_nc_bkgd = win->_nc_bkgd; WINDOW_ATTRS(NewScreen(SP_PARM)) = WINDOW_ATTRS(win); /* merge in change information from all subwindows of this window */ wsyncdown(win); #if USE_SCROLL_HINTS /* * For pure efficiency, we'd want to transfer scrolling information * from the window to newscr whenever the window is wide enough that * its update will dominate the cost of the update for the horizontal * band of newscr that it occupies. Unfortunately, this threshold * tends to be complex to estimate, and in any case scrolling the * whole band and rewriting the parts outside win's image would look * really ugly. So. What we do is consider the window "wide" if it * either (a) occupies the whole width of newscr, or (b) occupies * all but at most one column on either vertical edge of the screen * (this caters to fussy people who put boxes around full-screen * windows). Note that changing this formula will not break any code, * merely change the costs of various update cases. */ wide = (begx <= 1 && win->_maxx >= (NewScreen(SP_PARM)->_maxx - 1)); #endif win->_flags &= ~_HASMOVED; /* * Microtweaking alert! This double loop is one of the genuine * hot spots in the code. Even gcc doesn't seem to do enough * common-subexpression chunking to make it really tense, * so we'll force the issue. */ /* limit(dst_col) */ limit_x = win->_maxx; /* limit(src_col) */ if (limit_x > NewScreen(SP_PARM)->_maxx - begx) limit_x = NewScreen(SP_PARM)->_maxx - begx; for (src_row = 0, dst_row = begy + win->_yoffset; src_row <= win->_maxy && dst_row <= NewScreen(SP_PARM)->_maxy; src_row++, dst_row++) { struct ldat *nline = &(NewScreen(SP_PARM)->_line[dst_row]); struct ldat *oline = &win->_line[src_row]; if (oline->firstchar != _NOCHANGE) { int last_src = oline->lastchar; if (last_src > limit_x) last_src = limit_x; src_col = oline->firstchar; dst_col = src_col + begx; if_WIDEC({ int j; /* * Ensure that we will copy complete multi-column characters * on the left-boundary. */ if (isWidecExt(oline->text[src_col])) { j = 1 + dst_col - WidecExt(oline->text[src_col]); if (j < 0) j = 0; if (dst_col > j) { src_col -= (dst_col - j); dst_col = j; } } /* * Ensure that we will copy complete multi-column characters * on the right-boundary. */ j = last_src; if (WidecExt(oline->text[j])) { ++j; while (j <= limit_x) { if (isWidecBase(oline->text[j])) { break; } else { last_src = j; } ++j; } } }); if_WIDEC({ static cchar_t blank = BLANK; int last_dst = begx + ((last_src < win->_maxx) ? last_src : win->_maxx); int fix_left = dst_col; int fix_right = last_dst; int j; /* * Check for boundary cases where we may overwrite part of a * multi-column character. For those, wipe the remainder of * the character to blanks. */ j = dst_col; if (isWidecExt(nline->text[j])) { /* * On the left, we only care about multi-column characters * that extend into the changed region. */ fix_left = 1 + j - WidecExt(nline->text[j]); if (fix_left < 0) fix_left = 0; /* only if cell is corrupt */ } j = last_dst; if (WidecExt(nline->text[j]) != 0) { /* * On the right, any multi-column character is a problem, * unless it happens to be contained in the change, and * ending at the right boundary of the change. The * computation for 'fix_left' accounts for the left-side of * this character. Find the end of the character. */ ++j; while (j <= NewScreen(SP_PARM)->_maxx && isWidecExt(nline->text[j])) { fix_right = j++; } } /* * The analysis is simpler if we do the clearing afterwards. * Do that now. */ if (fix_left < dst_col || fix_right > last_dst) { for (j = fix_left; j <= fix_right; ++j) { nline->text[j] = blank; CHANGED_CELL(nline, j); } } }); /* * Copy the changed text. */ for (; src_col <= last_src; src_col++, dst_col++) { if (!CharEq(oline->text[src_col], nline->text[dst_col])) { nline->text[dst_col] = oline->text[src_col]; CHANGED_CELL(nline, dst_col); } } } #if USE_SCROLL_HINTS if (wide) { int oind = oline->oldindex; nline->oldindex = ((oind == _NEWINDEX) ? _NEWINDEX : (begy + oind + win->_yoffset)); } #endif /* USE_SCROLL_HINTS */ oline->firstchar = oline->lastchar = _NOCHANGE; if_USE_SCROLL_HINTS(oline->oldindex = src_row); } if (win->_clear) { win->_clear = FALSE; NewScreen(SP_PARM)->_clear = TRUE; } if (!win->_leaveok) { NewScreen(SP_PARM)->_cury = (NCURSES_SIZE_T) (win->_cury + win->_begy + win->_yoffset); NewScreen(SP_PARM)->_curx = (NCURSES_SIZE_T) (win->_curx + win->_begx); } NewScreen(SP_PARM)->_leaveok = win->_leaveok; #ifdef TRACE if (USE_TRACEF(TRACE_UPDATE)) { _tracedump("newscr", NewScreen(SP_PARM)); _nc_unlock_global(tracef); } #endif /* TRACE */ returnCode(OK); } ncurses-6.0-20160213/ncurses/base/lib_redrawln.c0000644000175100001440000000670511503245713017671 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997 * ****************************************************************************/ /* * lib_redrawln.c * * The routine wredrawln(). * */ #include MODULE_ID("$Id: lib_redrawln.c,v 1.17 2010/12/19 00:03:23 tom Exp $") NCURSES_EXPORT(int) wredrawln(WINDOW *win, int beg, int num) { int i; int end; size_t len; SCREEN *sp; T((T_CALLED("wredrawln(%p,%d,%d)"), (void *) win, beg, num)); if (win == 0) returnCode(ERR); sp = _nc_screen_of(win); if (beg < 0) beg = 0; if (touchline(win, beg, num) == ERR) returnCode(ERR); if (touchline(CurScreen(sp), beg + win->_begy, num) == ERR) returnCode(ERR); end = beg + num; if (end > CurScreen(sp)->_maxy + 1 - win->_begy) end = CurScreen(sp)->_maxy + 1 - win->_begy; if (end > win->_maxy + 1) end = win->_maxy + 1; len = (size_t) (win->_maxx + 1); if (len > (size_t) (CurScreen(sp)->_maxx + 1 - win->_begx)) len = (size_t) (CurScreen(sp)->_maxx + 1 - win->_begx); len *= sizeof(CurScreen(sp)->_line[0].text[0]); for (i = beg; i < end; i++) { int crow = i + win->_begy; memset(CurScreen(sp)->_line[crow].text + win->_begx, 0, len); NCURSES_SP_NAME(_nc_make_oldhash) (NCURSES_SP_ARGx crow); } returnCode(OK); } ncurses-6.0-20160213/ncurses/base/lib_slkattr.c0000644000175100001440000000601711503532105017525 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Juergen Pfeifer, 1997 * * and: Thomas E. Dickey 2005 * ****************************************************************************/ /* * lib_slkattr.c * Soft key routines. * Fetch the labels attributes */ #include MODULE_ID("$Id: lib_slkattr.c,v 1.11 2010/12/20 01:41:25 tom Exp $") NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(slk_attr) (NCURSES_SP_DCL0) { T((T_CALLED("slk_attr(%p)"), (void *) SP_PARM)); if (SP_PARM != 0 && SP_PARM->_slk != 0) { attr_t result = AttrOf(SP_PARM->_slk->attr) & ALL_BUT_COLOR; int pair = GetPair(SP_PARM->_slk->attr); result |= (attr_t) ColorPair(pair); returnAttr(result); } else returnAttr(0); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(attr_t) slk_attr(void) { return NCURSES_SP_NAME(slk_attr) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/ncurses/base/lib_restart.c0000644000175100001440000001051712543563577017553 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * * and: Juergen Pfeifer 2008 * ****************************************************************************/ /* * Terminfo-only terminal setup routines: * * int restartterm(const char *, int, int *) */ #include MODULE_ID("$Id: lib_restart.c,v 1.16 2015/06/27 18:12:15 tom Exp $") NCURSES_EXPORT(int) NCURSES_SP_NAME(restartterm) (NCURSES_SP_DCLx NCURSES_CONST char *termp, int filenum, int *errret) { int result; #ifdef USE_TERM_DRIVER TERMINAL *new_term = 0; #endif START_TRACE(); T((T_CALLED("restartterm(%p,%s,%d,%p)"), (void *) SP_PARM, termp, filenum, (void *) errret)); if (TINFO_SETUP_TERM(&new_term, termp, filenum, errret, FALSE) != OK) { result = ERR; } else if (SP_PARM != 0) { int saveecho = SP_PARM->_echo; int savecbreak = SP_PARM->_cbreak; int saveraw = SP_PARM->_raw; int savenl = SP_PARM->_nl; #ifdef USE_TERM_DRIVER SP_PARM->_term = new_term; #endif if (saveecho) { NCURSES_SP_NAME(echo) (NCURSES_SP_ARG); } else { NCURSES_SP_NAME(noecho) (NCURSES_SP_ARG); } if (savecbreak) { NCURSES_SP_NAME(cbreak) (NCURSES_SP_ARG); NCURSES_SP_NAME(noraw) (NCURSES_SP_ARG); } else if (saveraw) { NCURSES_SP_NAME(nocbreak) (NCURSES_SP_ARG); NCURSES_SP_NAME(raw) (NCURSES_SP_ARG); } else { NCURSES_SP_NAME(nocbreak) (NCURSES_SP_ARG); NCURSES_SP_NAME(noraw) (NCURSES_SP_ARG); } if (savenl) { NCURSES_SP_NAME(nl) (NCURSES_SP_ARG); } else { NCURSES_SP_NAME(nonl) (NCURSES_SP_ARG); } NCURSES_SP_NAME(reset_prog_mode) (NCURSES_SP_ARG); #if USE_SIZECHANGE _nc_update_screensize(SP_PARM); #endif result = OK; } else { result = ERR; } returnCode(result); } #if NCURSES_SP_FUNCS NCURSES_EXPORT(int) restartterm(NCURSES_CONST char *termp, int filenum, int *errret) { START_TRACE(); return NCURSES_SP_NAME(restartterm) (CURRENT_SCREEN, termp, filenum, errret); } #endif ncurses-6.0-20160213/ncurses/base/tries.c0000644000175100001440000001144311436275307016355 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997 * ****************************************************************************/ /* ** tries.c ** ** Functions to manage the tree of partial-completions for keycodes. ** */ #include MODULE_ID("$Id: tries.c,v 1.30 2010/08/28 21:08:23 tom Exp $") /* * Expand a keycode into the string that it corresponds to, returning null if * no match was found, otherwise allocating a string of the result. */ NCURSES_EXPORT(char *) _nc_expand_try(TRIES * tree, unsigned code, int *count, size_t len) { TRIES *ptr = tree; char *result = 0; if (code != 0) { while (ptr != 0) { if ((result = _nc_expand_try(ptr->child, code, count, len + 1)) != 0) { break; } if (ptr->value == code) { *count -= 1; if (*count == -1) { result = typeCalloc(char, len + 2); break; } } ptr = ptr->sibling; } } if (result != 0) { if (ptr != 0 && (result[len] = (char) ptr->ch) == 0) *((unsigned char *) (result + len)) = 128; #ifdef TRACE if (len == 0 && USE_TRACEF(TRACE_MAXIMUM)) { _tracef("expand_key %s %s", _nc_tracechar(CURRENT_SCREEN, (int) code), _nc_visbuf(result)); _nc_unlock_global(tracef); } #endif } return result; } /* * Remove a code from the specified tree, freeing the unused nodes. Returns * true if the code was found/removed. */ NCURSES_EXPORT(int) _nc_remove_key(TRIES ** tree, unsigned code) { T((T_CALLED("_nc_remove_key(%p,%d)"), (void *) tree, code)); if (code == 0) returnCode(FALSE); while (*tree != 0) { if (_nc_remove_key(&(*tree)->child, code)) { returnCode(TRUE); } if ((*tree)->value == code) { if ((*tree)->child) { /* don't cut the whole sub-tree */ (*tree)->value = 0; } else { TRIES *to_free = *tree; *tree = (*tree)->sibling; free(to_free); } returnCode(TRUE); } tree = &(*tree)->sibling; } returnCode(FALSE); } /* * Remove a string from the specified tree, freeing the unused nodes. Returns * true if the string was found/removed. */ NCURSES_EXPORT(int) _nc_remove_string(TRIES ** tree, const char *string) { T((T_CALLED("_nc_remove_string(%p,%s)"), (void *) tree, _nc_visbuf(string))); if (string == 0 || *string == 0) returnCode(FALSE); while (*tree != 0) { if (UChar((*tree)->ch) == UChar(*string)) { if (string[1] != 0) returnCode(_nc_remove_string(&(*tree)->child, string + 1)); if ((*tree)->child == 0) { TRIES *to_free = *tree; *tree = (*tree)->sibling; free(to_free); returnCode(TRUE); } else { returnCode(FALSE); } } tree = &(*tree)->sibling; } returnCode(FALSE); } ncurses-6.0-20160213/ncurses/base/lib_scrollok.c0000644000175100001440000000532511270700472017677 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2000,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * ****************************************************************************/ /* ** lib_scrollok.c ** ** The routine scrollok. ** */ #include MODULE_ID("$Id: lib_scrollok.c,v 1.5 2009/10/24 22:35:38 tom Exp $") NCURSES_EXPORT(int) scrollok(WINDOW *win, bool flag) { T((T_CALLED("scrollok(%p,%d)"), (void *) win, flag)); if (win) { win->_scroll = flag; returnCode(OK); } else returnCode(ERR); } ncurses-6.0-20160213/panel/0000755000175100001440000000000012563673051013563 5ustar tomusersncurses-6.0-20160213/panel/headers0000644000175100001440000000425610543525011015114 0ustar tomusers############################################################################## # Copyright (c) 1998,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996 # $(srcdir)/panel.h # vile:makemode ncurses-6.0-20160213/panel/panel.h0000644000175100001440000000773611170172220015031 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2006,2009 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1996-1999,2008 * ****************************************************************************/ /* $Id: panel.h,v 1.11 2009/04/11 19:50:40 tom Exp $ */ /* panel.h -- interface file for panels library */ #ifndef NCURSES_PANEL_H_incl #define NCURSES_PANEL_H_incl 1 #include typedef struct panel { WINDOW *win; struct panel *below; struct panel *above; NCURSES_CONST void *user; } PANEL; #if defined(__cplusplus) extern "C" { #endif extern NCURSES_EXPORT(WINDOW*) panel_window (const PANEL *); extern NCURSES_EXPORT(void) update_panels (void); extern NCURSES_EXPORT(int) hide_panel (PANEL *); extern NCURSES_EXPORT(int) show_panel (PANEL *); extern NCURSES_EXPORT(int) del_panel (PANEL *); extern NCURSES_EXPORT(int) top_panel (PANEL *); extern NCURSES_EXPORT(int) bottom_panel (PANEL *); extern NCURSES_EXPORT(PANEL*) new_panel (WINDOW *); extern NCURSES_EXPORT(PANEL*) panel_above (const PANEL *); extern NCURSES_EXPORT(PANEL*) panel_below (const PANEL *); extern NCURSES_EXPORT(int) set_panel_userptr (PANEL *, NCURSES_CONST void *); extern NCURSES_EXPORT(NCURSES_CONST void*) panel_userptr (const PANEL *); extern NCURSES_EXPORT(int) move_panel (PANEL *, int, int); extern NCURSES_EXPORT(int) replace_panel (PANEL *,WINDOW *); extern NCURSES_EXPORT(int) panel_hidden (const PANEL *); #if NCURSES_SP_FUNCS extern NCURSES_EXPORT(PANEL *) ground_panel(SCREEN *); extern NCURSES_EXPORT(PANEL *) ceiling_panel(SCREEN *); extern NCURSES_EXPORT(void) NCURSES_SP_NAME(update_panels) (SCREEN*); #endif #if defined(__cplusplus) } #endif #endif /* NCURSES_PANEL_H_incl */ /* end of panel.h */ ncurses-6.0-20160213/panel/p_delete.c0000644000175100001440000000563711326664210015514 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1999,2008 * ****************************************************************************/ /* p_delete.c * Remove a panel from stack, if in it, and free struct */ #include "panel.priv.h" MODULE_ID("$Id: p_delete.c,v 1.10 2010/01/23 21:22:16 tom Exp $") NCURSES_EXPORT(int) del_panel(PANEL * pan) { int err = OK; T((T_CALLED("del_panel(%p)"), (void *)pan)); if (pan) { dBug(("--> del_panel %s", USER_PTR(pan->user))); { GetHook(pan); HIDE_PANEL(pan, err, OK); free((void *)pan); } } else err = ERR; returnCode(err); } ncurses-6.0-20160213/panel/llib-lpanelw0000644000175100001440000001136612555001323016063 0ustar tomusers/**************************************************************************** * Copyright (c) 2002-2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2002-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./panel.c */ #include #undef _nc_retrace_panel PANEL *_nc_retrace_panel( PANEL *pan) { return(*(PANEL **)0); } #undef _nc_my_visbuf const char *_nc_my_visbuf( const void *ptr) { return(*(const char **)0); } #undef _nc_dPanel void _nc_dPanel( const char *text, const PANEL *pan) { /* void */ } #undef _nc_dStack void _nc_dStack( const char *fmt, int num, const PANEL *pan) { /* void */ } #undef _nc_Wnoutrefresh void _nc_Wnoutrefresh( const PANEL *pan) { /* void */ } #undef _nc_Touchpan void _nc_Touchpan( const PANEL *pan) { /* void */ } #undef _nc_Touchline void _nc_Touchline( const PANEL *pan, int start, int count) { /* void */ } /* ./p_above.c */ #undef ground_panel PANEL *ground_panel( SCREEN *sp) { return(*(PANEL **)0); } #undef panel_above PANEL *panel_above( const PANEL *pan) { return(*(PANEL **)0); } /* ./p_below.c */ #undef ceiling_panel PANEL *ceiling_panel( SCREEN *sp) { return(*(PANEL **)0); } #undef panel_below PANEL *panel_below( const PANEL *pan) { return(*(PANEL **)0); } /* ./p_bottom.c */ #undef bottom_panel int bottom_panel( PANEL *pan) { return(*(int *)0); } /* ./p_delete.c */ #undef del_panel int del_panel( PANEL *pan) { return(*(int *)0); } /* ./p_hide.c */ #undef hide_panel int hide_panel( PANEL *pan) { return(*(int *)0); } /* ./p_hidden.c */ #undef panel_hidden int panel_hidden( const PANEL *pan) { return(*(int *)0); } /* ./p_move.c */ #undef move_panel int move_panel( PANEL *pan, int starty, int startx) { return(*(int *)0); } /* ./p_new.c */ #undef new_panel PANEL *new_panel( WINDOW *win) { return(*(PANEL **)0); } /* ./p_replace.c */ #undef replace_panel int replace_panel( PANEL *pan, WINDOW *win) { return(*(int *)0); } /* ./p_show.c */ #undef show_panel int show_panel( PANEL *pan) { return(*(int *)0); } /* ./p_top.c */ #undef top_panel int top_panel( PANEL *pan) { return(*(int *)0); } /* ./p_update.c */ #undef update_panels_sp void update_panels_sp( SCREEN *sp) { /* void */ } #undef update_panels void update_panels(void) { /* void */ } /* ./p_user.c */ #undef set_panel_userptr int set_panel_userptr( PANEL *pan, const void *uptr) { return(*(int *)0); } #undef panel_userptr const void *panel_userptr( const PANEL *pan) { return(*(const void **)0); } /* ./p_win.c */ #undef panel_window WINDOW *panel_window( const PANEL *pan) { return(*(WINDOW **)0); } ncurses-6.0-20160213/panel/p_bottom.c0000644000175100001440000000631411326664210015547 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1997-1999,2008 * ****************************************************************************/ /* p_bottom.c * Place a panel on bottom of the stack; may already be in the stack */ #include "panel.priv.h" MODULE_ID("$Id: p_bottom.c,v 1.13 2010/01/23 21:22:16 tom Exp $") NCURSES_EXPORT(int) bottom_panel(PANEL * pan) { int err = OK; T((T_CALLED("bottom_panel(%p)"), (void *)pan)); if (pan) { GetHook(pan); if (!Is_Bottom(pan)) { dBug(("--> bottom_panel %s", USER_PTR(pan->user))); HIDE_PANEL(pan, err, OK); assert(_nc_bottom_panel == _nc_stdscr_pseudo_panel); dStack("", 1, pan); pan->below = _nc_bottom_panel; pan->above = _nc_bottom_panel->above; if (pan->above) pan->above->below = pan; _nc_bottom_panel->above = pan; dStack("", 9, pan); } } else err = ERR; returnCode(err); } ncurses-6.0-20160213/panel/p_above.c0000644000175100001440000000676411726763455015367 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1997-1999,2008 * ****************************************************************************/ /* p_above.c */ #include "panel.priv.h" MODULE_ID("$Id: p_above.c,v 1.9 2012/03/10 23:43:41 tom Exp $") #if NCURSES_SP_FUNCS NCURSES_EXPORT(PANEL *) ground_panel(SCREEN * sp) { T((T_CALLED("ground_panel(%p)"), (void *)sp)); if (sp) { struct panelhook *ph = NCURSES_SP_NAME(_nc_panelhook) (sp); if (_nc_bottom_panel) /* this is the pseudo panel */ returnPanel(_nc_bottom_panel->above); else returnPanel(0); } else { if (0 == CURRENT_SCREEN) returnPanel(0); else returnPanel(ground_panel(CURRENT_SCREEN)); } } #endif NCURSES_EXPORT(PANEL *) panel_above(const PANEL * pan) { PANEL *result; T((T_CALLED("panel_above(%p)"), (const void *)pan)); if (pan) result = pan->above; else { #if NCURSES_SP_FUNCS result = ground_panel(CURRENT_SCREEN); #else /* if top and bottom are equal, we have no or only the pseudo panel; if not, we return the panel above the pseudo panel */ result = EMPTY_STACK()? (PANEL *) 0 : _nc_bottom_panel->above; #endif } returnPanel(result); } ncurses-6.0-20160213/panel/Makefile.in0000644000175100001440000001245612560514435015635 0ustar tomusers# $Id: Makefile.in,v 1.69 2015/08/05 23:15:41 tom Exp $ ############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # # Makefile for panels source code. # # This makes the following: # libraries (normal/debug/profile/shared) # # The variable 'srcdir' refers to the source-distribution, and can be set with # the configure script by "--srcdir=DIR". # # The rules are organized to produce the libraries for the configured models, # turn off _all_ suffix rules; we'll generate our own .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile x = @EXEEXT@ o = .@OBJEXT@ MODEL = @DFT_LWR_MODEL@ DESTDIR = @DESTDIR@ top_srcdir = @top_srcdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ datarootdir = @datarootdir@ datadir = @datadir@ includesubdir = @includesubdir@ INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir) PACKAGE = @PACKAGE@ LIBTOOL = @LIBTOOL@ LIBTOOL_OPTS = @LIBTOOL_OPTS@ @EXPORT_SYMS@ LIBTOOL_CLEAN = @LIB_CLEAN@ LIBTOOL_COMPILE = @LIB_COMPILE@ LIBTOOL_LINK = @LIB_LINK@ LIBTOOL_INSTALL = @LIB_INSTALL@ LIBTOOL_UNINSTALL = @LIB_UNINSTALL@ LT_UNDEF = @LT_UNDEF@ INSTALL = @INSTALL@ INSTALL_LIB = @INSTALL@ @INSTALL_LIB@ INSTALL_PROG = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ AR = @AR@ ARFLAGS = @ARFLAGS@ AWK = @AWK@ LD = @LD@ LN_S = @LN_S@ CTAGS = @CTAGS@ ETAGS = @ETAGS@ CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ CPPFLAGS = -I${top_srcdir}/ncurses -DHAVE_CONFIG_H @CPPFLAGS@ CCFLAGS = $(CPPFLAGS) $(CFLAGS) CFLAGS_LIBTOOL = $(CCFLAGS) CFLAGS_NORMAL = $(CCFLAGS) CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) LINK = $(LIBTOOL_LINK) LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@ SHLIB_DIRS = -L../lib SHLIB_LIST = $(SHLIB_DIRS) -lncurses@USE_LIB_SUFFIX@ @SHLIB_LIST@ RPATH_LIST = @RPATH_LIST@ RESULTING_SYMS = @RESULTING_SYMS@ VERSIONED_SYMS = @VERSIONED_SYMS@ MK_SHARED_LIB = @MK_SHARED_LIB@ NCURSES_MAJOR = @NCURSES_MAJOR@ NCURSES_MINOR = @NCURSES_MINOR@ REL_VERSION = @cf_cv_rel_version@ ABI_VERSION = @cf_cv_abi_version@ RANLIB = @LIB_PREP@ LIBRARIES = @Libs_To_Make@ LINT = @LINT@ LINT_OPTS = @LINT_OPTS@ LINT_LIBS = -lpanel -lncurses @LIBS@ AUTO_SRC = \ ../include/panel.h ################################################################################ all \ libs \ install :: $(AUTO_SRC) $(LIBRARIES) sources: $(AUTO_SRC) $(DESTDIR)$(bindir) \ $(DESTDIR)$(libdir) : mkdir -p $@ # make a copy to simplify include-paths while still keeping panel's include # file in this directory. ../include/panel.h : $(srcdir)/panel.h -rm -f $@ cp $(srcdir)/panel.h $@ HEADER_DEPS = \ $(srcdir)/panel.priv.h \ $(srcdir)/panel.h tags: $(CTAGS) *.[ch] @MAKE_UPPER_TAGS@TAGS: @MAKE_UPPER_TAGS@ $(ETAGS) *.[ch] mostlyclean :: -rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace clean :: mostlyclean -rm -f $(AUTO_SRC) -rm -rf .libs *.dSYM distclean :: clean -rm -f Makefile realclean :: distclean ############################################################################### # The remainder of this file is automatically generated during configuration ############################################################################### ncurses-6.0-20160213/panel/p_below.c0000644000175100001440000000706711726763455015400 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1997-1999,2008 * ****************************************************************************/ /* p_below.c */ #include "panel.priv.h" MODULE_ID("$Id: p_below.c,v 1.9 2012/03/10 23:43:41 tom Exp $") #if NCURSES_SP_FUNCS NCURSES_EXPORT(PANEL *) ceiling_panel(SCREEN * sp) { T((T_CALLED("ceiling_panel(%p)"), (void *)sp)); if (sp) { struct panelhook *ph = NCURSES_SP_NAME(_nc_panelhook) (sp); /* if top and bottom are equal, we have no or only the pseudo panel */ returnPanel(EMPTY_STACK()? (PANEL *) 0 : _nc_top_panel); } else { if (0 == CURRENT_SCREEN) returnPanel(0); else returnPanel(ceiling_panel(CURRENT_SCREEN)); } } #endif NCURSES_EXPORT(PANEL *) panel_below(const PANEL * pan) { PANEL *result; T((T_CALLED("panel_below(%p)"), (const void *)pan)); if (pan) { GetHook(pan); /* we must not return the pseudo panel */ result = Is_Pseudo(pan->below) ? (PANEL *) 0 : pan->below; } else { #if NCURSES_SP_FUNCS result = ceiling_panel(CURRENT_SCREEN); #else /* if top and bottom are equal, we have no or only the pseudo panel */ result = EMPTY_STACK()? (PANEL *) 0 : _nc_top_panel; #endif } returnPanel(result); } ncurses-6.0-20160213/panel/p_hidden.c0000644000175100001440000000550211326664207015502 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1997-1999,2008 * ****************************************************************************/ /* p_hidden.c * Test whether or not panel is hidden */ #include "panel.priv.h" MODULE_ID("$Id: p_hidden.c,v 1.9 2010/01/23 21:22:15 tom Exp $") NCURSES_EXPORT(int) panel_hidden(const PANEL * pan) { int rc = ERR; T((T_CALLED("panel_hidden(%p)"), (const void *)pan)); if (pan) { GetHook(pan); rc = (IS_LINKED(pan) ? FALSE : TRUE); } returnCode(rc); } ncurses-6.0-20160213/panel/p_show.c0000644000175100001440000000614511326664210015225 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * ****************************************************************************/ /* p_show.c * Place a panel on top of the stack; may already be in the stack */ #include "panel.priv.h" MODULE_ID("$Id: p_show.c,v 1.13 2010/01/23 21:22:16 tom Exp $") NCURSES_EXPORT(int) show_panel(PANEL * pan) { int err = ERR; T((T_CALLED("show_panel(%p)"), (void *)pan)); if (pan) { GetHook(pan); if (Is_Top(pan)) returnCode(OK); dBug(("--> show_panel %s", USER_PTR(pan->user))); HIDE_PANEL(pan, err, OK); dStack("", 1, pan); assert(_nc_bottom_panel == _nc_stdscr_pseudo_panel); _nc_top_panel->above = pan; pan->below = _nc_top_panel; pan->above = (PANEL *) 0; _nc_top_panel = pan; err = OK; dStack("", 9, pan); } returnCode(err); } ncurses-6.0-20160213/panel/panel.priv.h0000644000175100001440000002146112425171243016007 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /* $Id: panel.priv.h,v 1.26 2014/11/01 14:48:03 tom Exp $ */ #ifndef NCURSES_PANEL_PRIV_H #define NCURSES_PANEL_PRIV_H 1 /* *INDENT-OFF* */ #if HAVE_CONFIG_H # include #endif #include #include #include struct screen; /* forward declaration */ #include "curses.priv.h" /* includes nc_panel.h */ #include "panel.h" #if USE_RCS_IDS # define MODULE_ID(id) static const char Ident[] = id; #else # define MODULE_ID(id) /*nothing*/ #endif #ifdef TRACE extern NCURSES_EXPORT(const char *) _nc_my_visbuf (const void *); # ifdef TRACE_TXT # define USER_PTR(ptr) _nc_visbuf((const char *)ptr) # else # define USER_PTR(ptr) _nc_my_visbuf((const char *)ptr) # endif # define returnPanel(code) TRACE_RETURN1(code,panel) extern NCURSES_EXPORT(PANEL *) _nc_retrace_panel (PANEL *); extern NCURSES_EXPORT(void) _nc_dPanel (const char*, const PANEL*); extern NCURSES_EXPORT(void) _nc_dStack (const char*, int, const PANEL*); extern NCURSES_EXPORT(void) _nc_Wnoutrefresh (const PANEL*); extern NCURSES_EXPORT(void) _nc_Touchpan (const PANEL*); extern NCURSES_EXPORT(void) _nc_Touchline (const PANEL*, int, int); # define dBug(x) _tracef x # define dPanel(text,pan) _nc_dPanel(text,pan) # define dStack(fmt,num,pan) _nc_dStack(fmt,num,pan) # define Wnoutrefresh(pan) _nc_Wnoutrefresh(pan) # define Touchpan(pan) _nc_Touchpan(pan) # define Touchline(pan,start,count) _nc_Touchline(pan,start,count) #else /* !TRACE */ # define returnPanel(code) return code # define dBug(x) # define dPanel(text,pan) # define dStack(fmt,num,pan) # define Wnoutrefresh(pan) wnoutrefresh((pan)->win) # define Touchpan(pan) touchwin((pan)->win) # define Touchline(pan,start,count) touchline((pan)->win,start,count) #endif #if NCURSES_SP_FUNCS #define GetScreenHook(sp) \ struct panelhook* ph = NCURSES_SP_NAME(_nc_panelhook)(sp) #define GetPanelHook(pan) \ GetScreenHook(pan ? _nc_screen_of((pan)->win) : 0) #define GetWindowHook(win) \ SCREEN* sp = _nc_screen_of(win); \ GetScreenHook(sp) #define GetHook(pan) SCREEN* sp = _nc_screen_of(pan->win); \ GetScreenHook(sp) #define _nc_stdscr_pseudo_panel ((ph)->stdscr_pseudo_panel) #define _nc_top_panel ((ph)->top_panel) #define _nc_bottom_panel ((ph)->bottom_panel) #else /* !NCURSES_SP_FUNCS */ #define GetScreenHook(sp) /* nothing */ #define GetPanelHook(pan) /* nothing */ #define GetWindowHook(win) /* nothing */ #define GetHook(pan) /* nothing */ #define _nc_stdscr_pseudo_panel _nc_panelhook()->stdscr_pseudo_panel #define _nc_top_panel _nc_panelhook()->top_panel #define _nc_bottom_panel _nc_panelhook()->bottom_panel #endif /* NCURSES_SP_FUNCS */ #define EMPTY_STACK() (_nc_top_panel == _nc_bottom_panel) #define Is_Bottom(p) (((p) != (PANEL*)0) && !EMPTY_STACK() && (_nc_bottom_panel->above == (p))) #define Is_Top(p) (((p) != (PANEL*)0) && !EMPTY_STACK() && (_nc_top_panel == (p))) #define Is_Pseudo(p) (((p) != (PANEL*)0) && ((p) == _nc_bottom_panel)) /*+------------------------------------------------------------------------- IS_LINKED(pan) - check to see if panel is in the stack --------------------------------------------------------------------------*/ /* This works! The only case where it would fail is, when the list has only one element. But this could only be the pseudo panel at the bottom */ #define IS_LINKED(p) (((p)->above || (p)->below ||((p)==_nc_bottom_panel)) ? TRUE : FALSE) #define PSTARTX(pan) ((pan)->win->_begx) #define PENDX(pan) ((pan)->win->_begx + getmaxx((pan)->win) - 1) #define PSTARTY(pan) ((pan)->win->_begy) #define PENDY(pan) ((pan)->win->_begy + getmaxy((pan)->win) - 1) /*+------------------------------------------------------------------------- PANELS_OVERLAPPED(pan1,pan2) - check panel overlapped ---------------------------------------------------------------------------*/ #define PANELS_OVERLAPPED(pan1,pan2) \ (( !(pan1) || !(pan2) || \ PSTARTY(pan1) > PENDY(pan2) || PENDY(pan1) < PSTARTY(pan2) ||\ PSTARTX(pan1) > PENDX(pan2) || PENDX(pan1) < PSTARTX(pan2) ) \ ? FALSE : TRUE) /*+------------------------------------------------------------------------- Compute the intersection rectangle of two overlapping rectangles ---------------------------------------------------------------------------*/ #define COMPUTE_INTERSECTION(pan1,pan2,ix1,ix2,iy1,iy2)\ ix1 = (PSTARTX(pan1) < PSTARTX(pan2)) ? PSTARTX(pan2) : PSTARTX(pan1);\ ix2 = (PENDX(pan1) < PENDX(pan2)) ? PENDX(pan1) : PENDX(pan2);\ iy1 = (PSTARTY(pan1) < PSTARTY(pan2)) ? PSTARTY(pan2) : PSTARTY(pan1);\ iy2 = (PENDY(pan1) < PENDY(pan2)) ? PENDY(pan1) : PENDY(pan2);\ assert((ix1<=ix2) && (iy1<=iy2)) /*+------------------------------------------------------------------------- Walk through the panel stack starting at the given location and check for intersections; overlapping panels are "touched", so they are incrementally overwriting cells that should be hidden. If the "touch" flag is set, the panel gets touched before it is updated. ---------------------------------------------------------------------------*/ #define PANEL_UPDATE(pan,panstart)\ { PANEL* pan2 = ((panstart) ? (panstart) : _nc_bottom_panel);\ while(pan2 && pan2->win) {\ if ((pan2 != pan) && PANELS_OVERLAPPED(pan,pan2)) {\ int y, ix1, ix2, iy1, iy2;\ COMPUTE_INTERSECTION(pan, pan2, ix1, ix2, iy1, iy2);\ for(y = iy1; y <= iy2; y++) {\ if (is_linetouched(pan->win,y - PSTARTY(pan))) {\ struct ldat* line = &(pan2->win->_line[y - PSTARTY(pan2)]);\ CHANGED_RANGE(line, ix1 - PSTARTX(pan2), ix2 - PSTARTX(pan2));\ }\ }\ }\ pan2 = pan2->above;\ }\ } /*+------------------------------------------------------------------------- Remove panel from stack. ---------------------------------------------------------------------------*/ #define PANEL_UNLINK(pan,err) \ { err = ERR;\ if (pan) {\ if (IS_LINKED(pan)) {\ if ((pan)->below)\ (pan)->below->above = (pan)->above;\ if ((pan)->above)\ (pan)->above->below = (pan)->below;\ if ((pan) == _nc_bottom_panel) \ _nc_bottom_panel = (pan)->above;\ if ((pan) == _nc_top_panel) \ _nc_top_panel = (pan)->below;\ err = OK;\ }\ (pan)->above = (pan)->below = (PANEL*)0;\ }\ } #define HIDE_PANEL(pan,err,err_if_unlinked)\ if (IS_LINKED(pan)) {\ Touchpan(pan);\ PANEL_UPDATE(pan,(PANEL*)0);\ PANEL_UNLINK(pan,err);\ } \ else {\ err = err_if_unlinked;\ } #if NCURSES_SP_FUNCS /* These may become later renamed and part of panel.h and the public API */ extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_update_panels)(SCREEN*); #endif /* *INDENT-ON* */ #endif /* NCURSES_PANEL_PRIV_H */ ncurses-6.0-20160213/panel/p_hide.c0000644000175100001440000000554611326664210015162 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * ****************************************************************************/ /* p_hide.c * Remove a panel from the stack */ #include "panel.priv.h" MODULE_ID("$Id: p_hide.c,v 1.11 2010/01/23 21:22:16 tom Exp $") NCURSES_EXPORT(int) hide_panel(register PANEL * pan) { int err = ERR; T((T_CALLED("hide_panel(%p)"), (void *)pan)); if (pan) { GetHook(pan); dBug(("--> hide_panel %s", USER_PTR(pan->user))); dStack("", 1, pan); HIDE_PANEL(pan, err, ERR); err = OK; dStack("", 9, pan); } returnCode(err); } ncurses-6.0-20160213/panel/p_new.c0000644000175100001440000001062111326664210015030 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1997-1999 * * and: Thomas E. Dickey 2000-on * ****************************************************************************/ /* p_new.c * Creation of a new panel */ #include "panel.priv.h" MODULE_ID("$Id: p_new.c,v 1.16 2010/01/23 21:22:16 tom Exp $") #ifdef TRACE static char *stdscr_id; static char *new_id; #endif /*+------------------------------------------------------------------------- Get root (i.e. stdscr's) panel. Establish the pseudo panel for stdscr if necessary. --------------------------------------------------------------------------*/ static PANEL * root_panel(NCURSES_SP_DCL0) { #if NCURSES_SP_FUNCS struct panelhook *ph = NCURSES_SP_NAME(_nc_panelhook) (sp); #elif NO_LEAKS struct panelhook *ph = _nc_panelhook(); #endif if (_nc_stdscr_pseudo_panel == (PANEL *) 0) { assert(SP_PARM && SP_PARM->_stdscr && !_nc_bottom_panel && !_nc_top_panel); #if NO_LEAKS ph->destroy = del_panel; #endif _nc_stdscr_pseudo_panel = typeMalloc(PANEL, 1); if (_nc_stdscr_pseudo_panel != 0) { PANEL *pan = _nc_stdscr_pseudo_panel; WINDOW *win = SP_PARM->_stdscr; pan->win = win; pan->below = (PANEL *) 0; pan->above = (PANEL *) 0; #ifdef TRACE if (!stdscr_id) stdscr_id = strdup("stdscr"); pan->user = stdscr_id; #else pan->user = (void *)0; #endif _nc_bottom_panel = _nc_top_panel = pan; } } return _nc_stdscr_pseudo_panel; } NCURSES_EXPORT(PANEL *) new_panel(WINDOW *win) { PANEL *pan = (PANEL *) 0; GetWindowHook(win); T((T_CALLED("new_panel(%p)"), (void *)win)); if (!win) returnPanel(pan); if (!_nc_stdscr_pseudo_panel) (void)root_panel(NCURSES_SP_ARG); assert(_nc_stdscr_pseudo_panel); if (!(win->_flags & _ISPAD) && (pan = typeMalloc(PANEL, 1))) { pan->win = win; pan->above = (PANEL *) 0; pan->below = (PANEL *) 0; #ifdef TRACE if (!new_id) new_id = strdup("new"); pan->user = new_id; #else pan->user = (char *)0; #endif (void)show_panel(pan); } returnPanel(pan); } ncurses-6.0-20160213/panel/p_update.c0000644000175100001440000000626311326664210015530 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1997-1999,2008 * ****************************************************************************/ /* p_update.c * wnoutrefresh windows in an orderly fashion */ #include "panel.priv.h" MODULE_ID("$Id: p_update.c,v 1.11 2010/01/23 21:22:16 tom Exp $") NCURSES_EXPORT(void) NCURSES_SP_NAME(update_panels) (NCURSES_SP_DCL0) { PANEL *pan; T((T_CALLED("update_panels(%p)"), (void *)SP_PARM)); dBug(("--> update_panels")); if (SP_PARM) { GetScreenHook(SP_PARM); pan = _nc_bottom_panel; while (pan && pan->above) { PANEL_UPDATE(pan, pan->above); pan = pan->above; } pan = _nc_bottom_panel; while (pan) { Wnoutrefresh(pan); pan = pan->above; } } returnVoid; } #if NCURSES_SP_FUNCS NCURSES_EXPORT(void) update_panels(void) { NCURSES_SP_NAME(update_panels) (CURRENT_SCREEN); } #endif ncurses-6.0-20160213/panel/llib-lpaneltw0000644000175100001440000001136612563672532016266 0ustar tomusers/**************************************************************************** * Copyright (c) 2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2010-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./panel.c */ #include #undef _nc_retrace_panel PANEL *_nc_retrace_panel( PANEL *pan) { return(*(PANEL **)0); } #undef _nc_my_visbuf const char *_nc_my_visbuf( const void *ptr) { return(*(const char **)0); } #undef _nc_dPanel void _nc_dPanel( const char *text, const PANEL *pan) { /* void */ } #undef _nc_dStack void _nc_dStack( const char *fmt, int num, const PANEL *pan) { /* void */ } #undef _nc_Wnoutrefresh void _nc_Wnoutrefresh( const PANEL *pan) { /* void */ } #undef _nc_Touchpan void _nc_Touchpan( const PANEL *pan) { /* void */ } #undef _nc_Touchline void _nc_Touchline( const PANEL *pan, int start, int count) { /* void */ } /* ./p_above.c */ #undef ground_panel PANEL *ground_panel( SCREEN *sp) { return(*(PANEL **)0); } #undef panel_above PANEL *panel_above( const PANEL *pan) { return(*(PANEL **)0); } /* ./p_below.c */ #undef ceiling_panel PANEL *ceiling_panel( SCREEN *sp) { return(*(PANEL **)0); } #undef panel_below PANEL *panel_below( const PANEL *pan) { return(*(PANEL **)0); } /* ./p_bottom.c */ #undef bottom_panel int bottom_panel( PANEL *pan) { return(*(int *)0); } /* ./p_delete.c */ #undef del_panel int del_panel( PANEL *pan) { return(*(int *)0); } /* ./p_hide.c */ #undef hide_panel int hide_panel( PANEL *pan) { return(*(int *)0); } /* ./p_hidden.c */ #undef panel_hidden int panel_hidden( const PANEL *pan) { return(*(int *)0); } /* ./p_move.c */ #undef move_panel int move_panel( PANEL *pan, int starty, int startx) { return(*(int *)0); } /* ./p_new.c */ #undef new_panel PANEL *new_panel( WINDOW *win) { return(*(PANEL **)0); } /* ./p_replace.c */ #undef replace_panel int replace_panel( PANEL *pan, WINDOW *win) { return(*(int *)0); } /* ./p_show.c */ #undef show_panel int show_panel( PANEL *pan) { return(*(int *)0); } /* ./p_top.c */ #undef top_panel int top_panel( PANEL *pan) { return(*(int *)0); } /* ./p_update.c */ #undef update_panels_sp void update_panels_sp( SCREEN *sp) { /* void */ } #undef update_panels void update_panels(void) { /* void */ } /* ./p_user.c */ #undef set_panel_userptr int set_panel_userptr( PANEL *pan, const void *uptr) { return(*(int *)0); } #undef panel_userptr const void *panel_userptr( const PANEL *pan) { return(*(const void **)0); } /* ./p_win.c */ #undef panel_window WINDOW *panel_window( const PANEL *pan) { return(*(WINDOW **)0); } ncurses-6.0-20160213/panel/modules0000644000175100001440000000543111326622124015150 0ustar tomusers# $Id: modules,v 1.10 2010/01/23 16:31:16 tom Exp $ ############################################################################## # Copyright (c) 1998-2006,2010 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1995-on # @ base # Library objects panel lib $(srcdir) $(HEADER_DEPS) p_above lib $(srcdir) $(HEADER_DEPS) p_below lib $(srcdir) $(HEADER_DEPS) p_bottom lib $(srcdir) $(HEADER_DEPS) p_delete lib $(srcdir) $(HEADER_DEPS) p_hide lib $(srcdir) $(HEADER_DEPS) p_hidden lib $(srcdir) $(HEADER_DEPS) p_move lib $(srcdir) $(HEADER_DEPS) p_new lib $(srcdir) $(HEADER_DEPS) p_replace lib $(srcdir) $(HEADER_DEPS) p_show lib $(srcdir) $(HEADER_DEPS) p_top lib $(srcdir) $(HEADER_DEPS) p_update lib $(srcdir) $(HEADER_DEPS) p_user lib $(srcdir) $(HEADER_DEPS) p_win lib $(srcdir) $(HEADER_DEPS) # vile:makemode ncurses-6.0-20160213/panel/p_move.c0000644000175100001440000000565611326664207015227 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2008,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1997-1999,2009 * ****************************************************************************/ /* p_move.c * Move a panel to a new location */ #include "panel.priv.h" MODULE_ID("$Id: p_move.c,v 1.11 2010/01/23 21:22:15 tom Exp $") NCURSES_EXPORT(int) move_panel(PANEL * pan, int starty, int startx) { int rc = ERR; T((T_CALLED("move_panel(%p,%d,%d)"), (void *)pan, starty, startx)); if (pan) { GetHook(pan); if (IS_LINKED(pan)) { Touchpan(pan); PANEL_UPDATE(pan, (PANEL *) 0); } rc = mvwin(pan->win, starty, startx); } returnCode(rc); } ncurses-6.0-20160213/panel/p_user.c0000644000175100001440000000565611326701713015231 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * ****************************************************************************/ /* p_user.c * Set/Get panels user pointer */ #include "panel.priv.h" MODULE_ID("$Id: p_user.c,v 1.8 2010/01/23 23:18:35 tom Exp $") NCURSES_EXPORT(int) set_panel_userptr(PANEL * pan, NCURSES_CONST void *uptr) { T((T_CALLED("set_panel_userptr(%p,%p)"), (void *)pan, (NCURSES_CONST void *)uptr)); if (!pan) returnCode(ERR); pan->user = uptr; returnCode(OK); } NCURSES_EXPORT(NCURSES_CONST void *) panel_userptr(const PANEL * pan) { T((T_CALLED("panel_userptr(%p)"), (const void *)pan)); returnCVoidPtr(pan ? pan->user : (NCURSES_CONST void *)0); } ncurses-6.0-20160213/panel/llib-lpanelt0000644000175100001440000001136612563673051016074 0ustar tomusers/**************************************************************************** * Copyright (c) 2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2010-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./panel.c */ #include #undef _nc_retrace_panel PANEL *_nc_retrace_panel( PANEL *pan) { return(*(PANEL **)0); } #undef _nc_my_visbuf const char *_nc_my_visbuf( const void *ptr) { return(*(const char **)0); } #undef _nc_dPanel void _nc_dPanel( const char *text, const PANEL *pan) { /* void */ } #undef _nc_dStack void _nc_dStack( const char *fmt, int num, const PANEL *pan) { /* void */ } #undef _nc_Wnoutrefresh void _nc_Wnoutrefresh( const PANEL *pan) { /* void */ } #undef _nc_Touchpan void _nc_Touchpan( const PANEL *pan) { /* void */ } #undef _nc_Touchline void _nc_Touchline( const PANEL *pan, int start, int count) { /* void */ } /* ./p_above.c */ #undef ground_panel PANEL *ground_panel( SCREEN *sp) { return(*(PANEL **)0); } #undef panel_above PANEL *panel_above( const PANEL *pan) { return(*(PANEL **)0); } /* ./p_below.c */ #undef ceiling_panel PANEL *ceiling_panel( SCREEN *sp) { return(*(PANEL **)0); } #undef panel_below PANEL *panel_below( const PANEL *pan) { return(*(PANEL **)0); } /* ./p_bottom.c */ #undef bottom_panel int bottom_panel( PANEL *pan) { return(*(int *)0); } /* ./p_delete.c */ #undef del_panel int del_panel( PANEL *pan) { return(*(int *)0); } /* ./p_hide.c */ #undef hide_panel int hide_panel( PANEL *pan) { return(*(int *)0); } /* ./p_hidden.c */ #undef panel_hidden int panel_hidden( const PANEL *pan) { return(*(int *)0); } /* ./p_move.c */ #undef move_panel int move_panel( PANEL *pan, int starty, int startx) { return(*(int *)0); } /* ./p_new.c */ #undef new_panel PANEL *new_panel( WINDOW *win) { return(*(PANEL **)0); } /* ./p_replace.c */ #undef replace_panel int replace_panel( PANEL *pan, WINDOW *win) { return(*(int *)0); } /* ./p_show.c */ #undef show_panel int show_panel( PANEL *pan) { return(*(int *)0); } /* ./p_top.c */ #undef top_panel int top_panel( PANEL *pan) { return(*(int *)0); } /* ./p_update.c */ #undef update_panels_sp void update_panels_sp( SCREEN *sp) { /* void */ } #undef update_panels void update_panels(void) { /* void */ } /* ./p_user.c */ #undef set_panel_userptr int set_panel_userptr( PANEL *pan, const void *uptr) { return(*(int *)0); } #undef panel_userptr const void *panel_userptr( const PANEL *pan) { return(*(const void **)0); } /* ./p_win.c */ #undef panel_window WINDOW *panel_window( const PANEL *pan) { return(*(WINDOW **)0); } ncurses-6.0-20160213/panel/p_replace.c0000644000175100001440000000551611326664210015661 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * ****************************************************************************/ /* p_replace.c * Replace a panels window. */ #include "panel.priv.h" MODULE_ID("$Id: p_replace.c,v 1.11 2010/01/23 21:22:16 tom Exp $") NCURSES_EXPORT(int) replace_panel(PANEL * pan, WINDOW *win) { int rc = ERR; T((T_CALLED("replace_panel(%p,%p)"), (void *)pan, (void *)win)); if (pan) { GetHook(pan); if (IS_LINKED(pan)) { Touchpan(pan); PANEL_UPDATE(pan, (PANEL *) 0); } pan->win = win; rc = OK; } returnCode(rc); } ncurses-6.0-20160213/panel/llib-lpanel0000644000175100001440000001136612555001246015700 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1996-on * ****************************************************************************/ /* LINTLIBRARY */ /* ./panel.c */ #include #undef _nc_retrace_panel PANEL *_nc_retrace_panel( PANEL *pan) { return(*(PANEL **)0); } #undef _nc_my_visbuf const char *_nc_my_visbuf( const void *ptr) { return(*(const char **)0); } #undef _nc_dPanel void _nc_dPanel( const char *text, const PANEL *pan) { /* void */ } #undef _nc_dStack void _nc_dStack( const char *fmt, int num, const PANEL *pan) { /* void */ } #undef _nc_Wnoutrefresh void _nc_Wnoutrefresh( const PANEL *pan) { /* void */ } #undef _nc_Touchpan void _nc_Touchpan( const PANEL *pan) { /* void */ } #undef _nc_Touchline void _nc_Touchline( const PANEL *pan, int start, int count) { /* void */ } /* ./p_above.c */ #undef ground_panel PANEL *ground_panel( SCREEN *sp) { return(*(PANEL **)0); } #undef panel_above PANEL *panel_above( const PANEL *pan) { return(*(PANEL **)0); } /* ./p_below.c */ #undef ceiling_panel PANEL *ceiling_panel( SCREEN *sp) { return(*(PANEL **)0); } #undef panel_below PANEL *panel_below( const PANEL *pan) { return(*(PANEL **)0); } /* ./p_bottom.c */ #undef bottom_panel int bottom_panel( PANEL *pan) { return(*(int *)0); } /* ./p_delete.c */ #undef del_panel int del_panel( PANEL *pan) { return(*(int *)0); } /* ./p_hide.c */ #undef hide_panel int hide_panel( PANEL *pan) { return(*(int *)0); } /* ./p_hidden.c */ #undef panel_hidden int panel_hidden( const PANEL *pan) { return(*(int *)0); } /* ./p_move.c */ #undef move_panel int move_panel( PANEL *pan, int starty, int startx) { return(*(int *)0); } /* ./p_new.c */ #undef new_panel PANEL *new_panel( WINDOW *win) { return(*(PANEL **)0); } /* ./p_replace.c */ #undef replace_panel int replace_panel( PANEL *pan, WINDOW *win) { return(*(int *)0); } /* ./p_show.c */ #undef show_panel int show_panel( PANEL *pan) { return(*(int *)0); } /* ./p_top.c */ #undef top_panel int top_panel( PANEL *pan) { return(*(int *)0); } /* ./p_update.c */ #undef update_panels_sp void update_panels_sp( SCREEN *sp) { /* void */ } #undef update_panels void update_panels(void) { /* void */ } /* ./p_user.c */ #undef set_panel_userptr int set_panel_userptr( PANEL *pan, const void *uptr) { return(*(int *)0); } #undef panel_userptr const void *panel_userptr( const PANEL *pan) { return(*(const void **)0); } /* ./p_win.c */ #undef panel_window WINDOW *panel_window( const PANEL *pan) { return(*(WINDOW **)0); } ncurses-6.0-20160213/panel/panel.c0000644000175100001440000001346111721407247015030 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * * and: Juergen Pfeifer 1996-1999,2008 * * and: Thomas E. Dickey * ****************************************************************************/ /* panel.c -- implementation of panels library, some core routines */ #include "panel.priv.h" MODULE_ID("$Id: panel.c,v 1.26 2012/02/23 10:02:15 tom Exp $") /*+------------------------------------------------------------------------- _nc_retrace_panel (pan) --------------------------------------------------------------------------*/ #ifdef TRACE NCURSES_EXPORT(PANEL *) _nc_retrace_panel(PANEL * pan) { T((T_RETURN("%p"), (void *)pan)); return pan; } #endif /*+------------------------------------------------------------------------- _nc_my_visbuf(ptr) --------------------------------------------------------------------------*/ #ifdef TRACE #ifndef TRACE_TXT NCURSES_EXPORT(const char *) _nc_my_visbuf(const void *ptr) { char temp[32]; if (ptr != 0) _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "ptr:%p", ptr); else _nc_STRCPY(temp, "", sizeof(temp)); return _nc_visbuf(temp); } #endif #endif /*+------------------------------------------------------------------------- dPanel(text,pan) --------------------------------------------------------------------------*/ #ifdef TRACE NCURSES_EXPORT(void) _nc_dPanel(const char *text, const PANEL * pan) { _tracef("%s id=%s b=%s a=%s y=%d x=%d", text, USER_PTR(pan->user), (pan->below) ? USER_PTR(pan->below->user) : "--", (pan->above) ? USER_PTR(pan->above->user) : "--", PSTARTY(pan), PSTARTX(pan)); } #endif /*+------------------------------------------------------------------------- dStack(fmt,num,pan) --------------------------------------------------------------------------*/ #ifdef TRACE NCURSES_EXPORT(void) _nc_dStack(const char *fmt, int num, const PANEL * pan) { char s80[80]; GetPanelHook(pan); _nc_SPRINTF(s80, _nc_SLIMIT(sizeof(s80)) fmt, num, pan); _tracef("%s b=%s t=%s", s80, (_nc_bottom_panel) ? USER_PTR(_nc_bottom_panel->user) : "--", (_nc_top_panel) ? USER_PTR(_nc_top_panel->user) : "--"); if (pan) _tracef("pan id=%s", USER_PTR(pan->user)); pan = _nc_bottom_panel; while (pan) { dPanel("stk", pan); pan = pan->above; } } #endif /*+------------------------------------------------------------------------- Wnoutrefresh(pan) - debugging hook for wnoutrefresh --------------------------------------------------------------------------*/ #ifdef TRACE NCURSES_EXPORT(void) _nc_Wnoutrefresh(const PANEL * pan) { dPanel("wnoutrefresh", pan); wnoutrefresh(pan->win); } #endif /*+------------------------------------------------------------------------- Touchpan(pan) --------------------------------------------------------------------------*/ #ifdef TRACE NCURSES_EXPORT(void) _nc_Touchpan(const PANEL * pan) { dPanel("Touchpan", pan); touchwin(pan->win); } #endif /*+------------------------------------------------------------------------- Touchline(pan,start,count) --------------------------------------------------------------------------*/ #ifdef TRACE NCURSES_EXPORT(void) _nc_Touchline(const PANEL * pan, int start, int count) { char s80[80]; _nc_SPRINTF(s80, _nc_SLIMIT(sizeof(s80)) "Touchline s=%d c=%d", start, count); dPanel(s80, pan); touchline(pan->win, start, count); } #endif #ifndef TRACE # ifndef __GNUC__ /* Some C compilers need something defined in a source file */ extern void _nc_dummy_panel(void); void _nc_dummy_panel(void) { } # endif #endif ncurses-6.0-20160213/panel/p_top.c0000644000175100001440000000520011326664210015036 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * ****************************************************************************/ /* p_top.c * Place a panel on top of the stack. */ #include "panel.priv.h" MODULE_ID("$Id: p_top.c,v 1.6 2010/01/23 21:22:16 tom Exp $") NCURSES_EXPORT(int) top_panel(PANEL * pan) { T((T_CALLED("top_panel(%p)"), (void *)pan)); returnCode(show_panel(pan)); } ncurses-6.0-20160213/panel/p_win.c0000644000175100001440000000523011326664207015042 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2005,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * ****************************************************************************/ /* p_win.c * Return a panels window. */ #include "panel.priv.h" MODULE_ID("$Id: p_win.c,v 1.6 2010/01/23 21:22:15 tom Exp $") NCURSES_EXPORT(WINDOW *) panel_window(const PANEL * pan) { T((T_CALLED("panel_window(%p)"), (const void *)pan)); returnWin(pan ? pan->win : (WINDOW *)0); } ncurses-6.0-20160213/config.sub0000755000175100001440000010646012612747761014463 0ustar tomusers#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-08-20' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ncurses-6.0-20160213/INSTALL0000644000175100001440000024671212612753016013524 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: INSTALL,v 1.194 2015/10/24 19:03:42 Tomas.Cech Exp $ --------------------------------------------------------------------- How to install Ncurses/Terminfo on your system --------------------------------------------------------------------- ************************************************************ * READ ALL OF THIS FILE BEFORE YOU TRY TO INSTALL NCURSES. * ************************************************************ You should be reading the file INSTALL in a directory called ncurses-d.d, where d.d is the current version number. There should be several subdirectories, including `c++', `form', `man', `menu', 'misc', `ncurses', `panel', `progs', and `test'. See the README file for a roadmap to the package. If you are a distribution integrator or packager, please read and act on the section titled IF YOU ARE A SYSTEM INTEGRATOR below. If you are converting from BSD curses and do not have root access, be sure to read the BSD CONVERSION NOTES section below. If you are trying to build applications using gpm with ncurses, read the USING NCURSES WITH GPM section below. If you are running over the Andrew File System see the note below on USING NCURSES WITH AFS. If you are cross-compiling, see the note below on BUILDING NCURSES WITH A CROSS-COMPILER. If you want to build the Ada95 binding, go to the Ada95 directory and follow the instructions there. The Ada95 binding is not covered below. REQUIREMENTS: ------------ You will need the following to build and install ncurses under UNIX: * ANSI C compiler (gcc, for instance) * sh (bash will do) * awk (mawk or gawk will do) * sed * BSD or System V style install (a script is enclosed) Ncurses has been also built in the OS/2 EMX environment. INSTALLATION PROCEDURE: ---------------------- 1. First, decide whether you want ncurses to replace your existing library (in which case you'll need super-user privileges) or be installed in parallel with it. The --prefix option to configure changes the root directory for installing ncurses. The default is normally in subdirectories of /usr/local, except for systems where ncurses is normally installed as a system library (see "IF YOU ARE A SYSTEM INTEGRATOR"). Use --prefix=/usr to replace your default curses distribution. The package gets installed beneath the --prefix directory as follows: In $(prefix)/bin: tic, infocmp, captoinfo, tset, reset, clear, tput, toe, tabs In $(prefix)/lib: libncurses*.* libcurses.a In $(prefix)/share/terminfo: compiled terminal descriptions In $(prefix)/include: C header files Under $(prefix)/man: the manual pages Note that the configure script attempts to locate previous installation of ncurses, and will set the default prefix according to where it finds the ncurses headers. Do not use commands such as make install prefix=XXX to change the prefix after configuration, since the prefix value is used for some absolute pathnames such as TERMINFO. Instead do this make install DESTDIR=XXX See also the discussion of --with-install-prefix. 2. Type `./configure' in the top-level directory of the distribution to configure ncurses for your operating system and create the Makefiles. Besides --prefix, various configuration options are available to customize the installation; use `./configure --help' to list the available options. If your operating system is not supported, read the PORTABILITY section in the file ncurses/README for information on how to create a configuration file for your system. The `configure' script generates makefile rules for one or more object models and their associated libraries: libncurses.a (normal) libcurses.a (normal, a link to libncurses.a) This gets left out if you configure with --disable-overwrite. libncurses.so (shared) libncurses_g.a (debug) libncurses_p.a (profile) libncurses.la (libtool) If you configure using the --enable-widec option, a "w" is appended to the library names (e.g., libncursesw.a), and the resulting libraries support wide-characters, e.g., via a UTF-8 locale. The corresponding header files are compatible with the non-wide-character configuration; wide-character features are provided by ifdef's in the header files. The wide-character library interfaces are not binary-compatible with the non-wide-character version. Building and running the wide-character code relies on a fairly recent implementation of libiconv. We have built this configuration on various systems using libiconv, sometimes requiring libutf8. If you configure using the --with-pthread option, a "t" is appended to the library names (e.g., libncursest.a, libncursestw.a). If you do not specify any models, the normal and debug libraries will be configured. Typing `configure' with no arguments is equivalent to: ./configure --with-normal --with-debug --enable-overwrite Typing ./configure --with-shared makes the shared libraries the default, resulting in ./configure --with-shared --with-normal --with-debug --enable-overwrite If you want only shared libraries, type ./configure --with-shared --without-normal --without-debug Rules for generating shared libraries are highly dependent upon the choice of host system and compiler. We've been testing shared libraries on several systems, but more work needs to be done to make shared libraries work on other systems. If you have libtool installed, you can type ./configure --with-libtool to generate the appropriate static and/or shared libraries for your platform using libtool. You can make curses and terminfo fall back to an existing file of termcap definitions by configuring with --enable-termcap. If you do this, the library will search /etc/termcap before the terminfo database, and will also interpret the contents of the TERM environment variable. See the section BSD CONVERSION NOTES below. 3. Type `make'. Ignore any warnings, no error messages should be produced. This should compile the ncurses library, the terminfo compiler tic(1), captoinfo(1), infocmp(1), toe(1), clear(1) tset(1), reset(1), and tput(1) programs (see the manual pages for explanation of what they do), some test programs, and the panels, menus, and forms libraries. 4. Run ncurses and several other test programs in the test directory to verify that ncurses functions correctly before doing an install that may overwrite system files. Read the file test/README for details on the test programs. NOTE: You must have installed the terminfo database, or set the environment variable $TERMINFO to point to a SVr4-compatible terminfo database before running the test programs. Not all vendors' terminfo databases are SVr4-compatible, but most seem to be. It is possible to configure ncurses to use other terminfo database formats. A few are provided as examples in the include-directory (see --with-caps). If you run the test programs WITHOUT installing terminfo, ncurses may read the termcap file and cache that in $HOME/.terminfo, which will thereafter be used instead of the terminfo database. See the comments on "--enable-getcap-cache", to see why this is a Bad Thing. The ncurses program is designed specifically to test the ncurses library. You can use it to verify that the screen highlights work correctly, that cursor addressing and window scrolling works OK, etc. 5. Once you've tested, you can type `make install' to install libraries, the programs, the terminfo database and the manual pages. Alternately, you can type `make install' in each directory you want to install. In the top-level directory, you can do a partial install using these commands: 'make install.progs' installs tic, infocmp, etc... 'make install.includes' installs the headers. 'make install.libs' installs the libraries (and the headers). 'make install.data' installs the terminfo data. (Note: `tic' must be installed before the terminfo data can be compiled). 'make install.man' installs the manual pages. ############################################################################ # CAVEAT EMPTOR: `install.data' run as root will NUKE any existing # # terminfo database. If you have any custom or unusual entries SAVE them # # before you install ncurses. # ############################################################################ The terminfo(5) manual page must be preprocessed with tbl(1) before being formatted by nroff(1). Modern man(1) implementations tend to do this by default, but you may want to look at your version's manual page to be sure. You may also install the manual pages after preprocessing with tbl(1) by specifying the configure option --with-manpage-tbl. If the system already has a curses library that you need to keep using you'll need to distinguish between it and ncurses. See the discussion of --disable-overwrite. If ncurses is installed outside the standard directories (/usr/include and /usr/lib) then all your users will need to use the -I option to compile programs and -L to link them. If you have another curses installed in your system and you accidentally compile using its curses.h you'll end up with a large number of undefined symbols at link time. IF YOU DO NOT HAVE ROOT: Change directory to the `progs' subdirectory and run the `capconvert' script. This script will deduce various things about your environment and use them to build you a private terminfo tree, so you can use ncurses applications. If more than one user at your site does this, the space for the duplicate trees is wasted. Try to get your site administrators to install a system- wide terminfo tree instead. See the BSD CONVERSION NOTES section below for a few more details. 6. The c++ directory has C++ classes that are built on top of ncurses and panels. You must have c++ (and its libraries) installed before you can compile and run the demo. Use --without-cxx-binding to tell configure to not build the C++ bindings and demo. If you do not have C++, you must use the --without-cxx option to tell the configure script to not attempt to determine the type of 'bool' which may be supported by C++. IF YOU USE THIS OPTION, BE ADVISED THAT YOU MAY NOT BE ABLE TO COMPILE (OR RUN) NCURSES APPLICATIONS WITH C++. SUMMARY OF CONFIGURE OPTIONS: ---------------------------- The configure script provides a short list of its options when you type ./configure --help The --help and several options are common to all configure scripts that are generated with autoconf. Those are all listed before the line --enable and --with options recognized: The other options are specific to this package. We list them in alphabetic order. --disable-assumed-color With ncurses 5.1, we introduced a new function, assume_default_colors() which allows applications to specify what the default foreground and background color are assumed to be. Most color applications use full-screen color; but a few do not color the background. While the assumed values can be overridden by invoking assume_default_colors(), you may find it useful to set the assumed values to the pre-5.1 convention, using this configure option. --disable-big-core Assume machine has little memory. The configure script attempts to determine if your machine has enough memory (about 6Mb) to compile the terminfo database without writing portions to disk. Some allocators return deceptive results, so you may have to override the configure script. Or you may be building tic for a smaller machine. --disable-big-strings Disable compile-time optimization of predefined tables which puts all of their strings into a very long string, to reduce relocation overhead. --disable-database Use only built-in data. The ncurses libraries normally read terminfo and termcap data from disk. You can configure ncurses to have a built-in database, aka "fallback" entries. Embedded applications may have no need for an external database. Some, but not all of the programs are useful in this configuration, e.g., reset and tput versus infocmp and tic. --disable-db-install Do not install the terminal database. This is used to omit features for packages, as done with --without-progs. --disable-ext-funcs Disable function-extensions. Configure ncurses without the functions that are not specified by XSI. See ncurses/modules for the exact list of library modules that would be suppressed. --disable-hashmap Compile without hashmap scrolling-optimization code. This algorithm is the default. --disable-home-terminfo The $HOME/.terminfo directory is normally added to ncurses' search list for reading/writing terminfo entries, since that directory is more likely writable than the system terminfo database. Use this option to disable the feature altogether. --disable-largefile Disable compiler flags needed to use large-file interfaces. --disable-lib-suffixes Suppress the "w", "t" or "tw" suffixes which normally would be added to the library names for the --enable-widec and --with-pthread options. --disable-libtool-version when using --with-libtool, control how the major/minor version numbers are used for constructing the library name. The default uses the -version-number feature of libtool, which makes the library names compatible (though not identical) with the standard build using --with-shared. Use --disable-libtool-version to use the libtool -version-info feature. This corresponds to the setting used before patch 20100515. Starting with patch 20141115, using this option causes the configure script to apply the top-level VERSION file to the ABI version used for libtool. --disable-leaks For testing, compile-in code that frees memory that normally would not be freed, to simplify analysis of memory-leaks. Any implementation of curses must not free the memory associated with a screen, since (even after calling endwin()), it must be available for use in the next call to refresh(). There are also chunks of memory held for performance reasons. That makes it hard to analyze curses applications for memory leaks. To work around this, build a debugging version of the ncurses library which frees those chunks which it can, and provides the _nc_free_and_exit() function to free the remainder and then exit. The ncurses utility and test programs use this feature, e.g., via the ExitProgram() macro. Because this lies outside of the library's intended usage, it is not normally considered part of the ABI. If there were some (as yet unplanned) extension which frees memory in a manner that would let the library resume and reallocate memory, then that would not use a "_nc_" prefix. --disable-lp64 The header files will ignore use of the _LP64 symbol to make chtype and mmask_t types 32 bits (they may be long on 64-bit hosts, for compatibility with older releases). NOTE: this is potentially an ABI change, depending on existing packages. The default for this option is "disabled" for ncurses ABI 5, and "enabled" for ABI 6. --disable-macros For testing, use functions rather than macros. The program will run more slowly, but it is simpler to debug. This defines NCURSES_NOMACROS at build time. See also the --enable-expanded option. --disable-overwrite If you are installing ncurses on a system which contains another development version of curses, or which could be confused by the loader for another version, we recommend that you leave out the link to -lcurses. The ncurses library is always available as -lncurses. Disabling overwrite also causes the ncurses header files to be installed into a subdirectory, e.g., /usr/local/include/ncurses, rather than the include directory. This makes it simpler to avoid compile-time conflicts with other versions of curses.h Putting the header files into a subdirectory assumes that applications will follow the (standard) practice of including the headers with reference to the subdirectory name. For instance, the normal ncurses header would be included using #include #include while the ncursesw headers would be found this way: #include #include In either case (with or without the --disable-overwrite option), almost all applications are designed to include a related set of curses header files from the same directory. Manipulating the --includedir configure option to put header files directly in a subdirectory of the normal include-directory defeats this, and breaks builds of portable applications. Likewise, putting some headers in /usr/include, and others in a subdirectory is a good way to break builds. When configured with --disable-overwrite, the installed header files' embedded #include's are adjusted to use the same style of includes noted above. In particular, the unctrl.h header is included from curses.h, which means that a makefile which tells the compiler to include directly from the subdirectory will fail to compile correctly. Without some special effort, it will either fail to compile at all, or the compiler may find a different unctrl.h file. --disable-relink If --enable-rpath is given, the generated makefiles normally will rebuild the libraries during install. Use this option to simply copy whatever the linked produced. This option is ignored if --enable-rpath is not given. --disable-root-environ Compile with environment restriction, so certain environment variables are not available when running as root, or via a setuid/setgid application. These are (for example $TERMINFO) those that allow the search path for the terminfo or termcap entry to be customized. --disable-rpath-hack Normally the configure script helps link libraries found in unusual places by adding an rpath option to the link command. If you are building packages, this feature may be redundant. Use this option to suppress the feature. --disable-scroll-hints Compile without scroll-hints code. This option is ignored when hashmap scrolling is configured, which is the default. --disable-tic-depends When building shared libraries, normally the tic library is linked to depend upon the ncurses library (or equivalently, on the tinfo-library if the --with-termlib option was given). The tic- and tinfo-library ABIs do not depend on the --enable-widec option. Some packagers have used this to reduce the number of library files which are packaged by using only one copy of those libraries. To make this work properly, the tic library must be built without an explicit dependency on the underlying library (ncurses vs ncursesw, tinfo vs tinfow). Use this configure option to do that. For example configure --with-ticlib --with-shared --disable-tic-depends --disable-tparm-varargs Portable programs should call tparm() using the fixed-length parameter list documented in X/Open. ncurses provides varargs support for this function. Use --disable-tparm-varargs to disable this support. --enable-assertions For testing, compile-in assertion code. This is used only for a few places where ncurses cannot easily recover by returning an error code. --enable-broken_linker A few platforms have what we consider a broken linker: it cannot link objects from an archive solely by referring to data objects in those files, but requires a function reference. This configure option changes several data references to functions to work around this problem. NOTE: With ncurses 5.1, this may not be necessary, since we are told that some linkers interpret uninitialized global data as a different type of reference which behaves as described above. We have explicitly initialized all of the global data to work around the problem. --enable-bsdpad Recognize BSD-style prefix padding. Some ancient BSD programs (such as nethack) call tputs("50") to implement delays. --enable-colorfgbg Compile with experimental $COLORFGBG code. That environment variable is set by some terminal emulators as a hint to applications, by advertising the default foreground and background colors. During initialization, ncurses sets color pair 0 to match this. --enable-const The curses interface as documented in XSI is rather old, in fact including features that precede ANSI C. The prototypes generally do not make effective use of "const". When using stricter compilers (or gcc with appropriate warnings), you may see warnings about the mismatch between const and non-const data. We provide a configure option which changes the interfaces to use const - quieting these warnings and reflecting the actual use of the parameters more closely. The ncurses library uses the symbol NCURSES_CONST for these instances of const, and if you have asked for compiler warnings, will add gcc's const-qual warning. There will still be warnings due to subtle inconsistencies in the interface, but at a lower level. NOTE: configuring ncurses with this option may detract from the portability of your applications by encouraging you to use const in places where the XSI curses interface would not allow them. Similar issues arise when porting to SVr4 curses, which uses const in even fewer places. --enable-echo Use the option --disable-echo to make the build-log less verbose by suppressing the display of the compile and link commands. This makes it easier to see the compiler warnings. (You can always use "make -n" to see the options that are used). --enable-expanded For testing, generate functions for certain macros to make them visible as such to the debugger. See also the --disable-macros option. --enable-ext-colors Extend the cchar_t structure to allow more than 16 colors to be encoded. This applies only to the wide-character (--enable-widec) configuration. NOTE: using this option will make libraries which are not binary- compatible with libncursesw 5.4. None of the interfaces change, but applications which have an array of cchar_t's must be recompiled. --enable-ext-mouse Modify the encoding of mouse state to make room for a 5th mouse button. That allows one to use ncurses with a wheel mouse with xterm or similar X terminal emulators. NOTE: using this option will make libraries which are not binary- compatible with libncursesw 5.4. None of the interfaces change, but applications which have mouse mask mmask_t's must be recompiled. --enable-ext-putwin Modify the file-format written by putwin() to use printable text rather than binary files, allowing getwin() to read screen dumps written by differently-configured ncurses libraries. The extended getwin() can still read binary screen dumps from the "same" configuration of ncurses. This does not change the ABI (the binary interface seen by calling applications). --enable-getcap Use the 4.4BSD getcap code if available, or a bundled version of it to fetch termcap entries. Entries read in this way cannot use (make cross-references to) the terminfo tree, but it is faster than reading /etc/termcap. If configured for one of the *BSD systems, this automatically uses the hashed database system produced using cap_mkdb or similar tools. In that case, there is no advantage in using the --enable-getcap-cache option. See also the --with-hashed-db option. --enable-getcap-cache Cache translated termcaps under the directory $HOME/.terminfo NOTE: this sounds good - it makes ncurses run faster the second time. But look where the data comes from - an /etc/termcap containing lots of entries that are not up to date. If you configure with this option and forget to install the terminfo database before running an ncurses application, you will end up with a hidden terminfo database that generally does not support color and will miss some function keys. --enable-hard-tabs Compile-in cursor-optimization code that uses hard-tabs. We would make this a standard feature except for the concern that the terminfo entry may not be accurate, or that your stty settings have disabled the use of tabs. --enable-interop Compile-in experimental interop bindings. These provide generic types for the form-library. --enable-mixed-case Controls whether the filesystem on which the terminfo database resides supports mixed-case filenames (normal for UNIX, but not on other systems). If you do not specify this option, the configure script checks the current filesystem. --enable-no-padding Compile-in support for the $NCURSES_NO_PADDING environment variable, which allows you to suppress the effect of non-mandatory padding in terminfo entries. This is the default, unless you have disabled the extended functions. --enable-pc-files If pkg-config is found (see --with-pkg-config), generate ".pc" files for each of the libraries, and install them in pkg-config's library directory. --enable-pthreads-eintr add logic in threaded configuration to ensure that a read(2) system call can be interrupted for SIGWINCH. --enable-reentrant Compile experimental configuration which improves reentrant use of the library by reducing global and static variables. This option is also set if --with-pthread is used. Enabling this option adds a "t" to the library names, except for the special case when --enable-weak-symbols is also used. --enable-rpath Use rpath option when generating shared libraries, and (with some restrictions) when linking the corresponding programs. This originally (in 1997) applied mainly to systems using the GNU linker (read the manpage). More recently it is useful for systems that require special treatment shared libraries in "unusual" locations. The "system" libraries reside in directories which are on the loader's default search-path. While you may be able to use workarounds such as the $LD_LIBRARY_PATH environment variable, they do not work with setuid applications since the LD_LIBRARY_PATH variable would be unset in that situation. This option does not apply to --with-libtool, since libtool makes extra assumptions about rpath. --enable-safe-sprintf Compile with experimental safe-sprintf code. You may consider using this if you are building ncurses for a system that has neither vsnprintf() or vsprintf(). It is slow, however. --enable-sigwinch Compile support for ncurses' SIGWINCH handler. If your application has its own SIGWINCH handler, ncurses will not use its own. The ncurses handler causes wgetch() to return KEY_RESIZE when the screen-size changes. This option is the default, unless you have disabled the extended functions. --enable-signed-char The term.h header declares a Booleans[] array typed "char". But it stores signed values there and "char" is not necessarily signed. Some packagers choose to alter the type of Booleans[] though this is not strictly compatible. This option allows one to implement this alteration without patching the source code. --enable-sp-funcs Compile-in support for extended functions which accept a SCREEN pointer, reducing the need for juggling the global SP value with set_term() and delscreen(). --enable-string-hacks Controls whether strlcat and strlcpy may be used. The same issue applies to OpenBSD's warnings about snprintf, noting that this function is weakly standardized. Aside from stifling these warnings, there is no functional improvement in ncurses. --enable-symlinks If your system supports symbolic links, make tic use symbolic links rather than hard links to save diskspace when writing aliases in the terminfo database. --enable-tcap-names Compile-in support for user-definable terminal capabilities. Use the -x option of tic and infocmp to treat unrecognized terminal capabilities as user-defined strings. This option is the default, unless you have disabled the extended functions. --enable-term-driver Enable experimental terminal-driver. This is currently used for the MinGW port, by providing a way to substitute the low-level terminfo library with different terminal drivers. --enable-termcap Compile in support for reading terminal descriptions from termcap if no match is found in the terminfo database. See also the --enable-getcap and --enable-getcap-cache options. Termcap support requires run-time parsing rather than loading predigested data. If you have specified --with-ticlib, then you cannot have termcap support since run-time parsing is done in the tic library, which is intentionally not part of normal linkage dependencies. --enable-warnings Turn on GCC compiler warnings. There should be only a few. --enable-weak-symbols If the --with-pthread option is set, check if the compiler supports weak-symbols. If it does, then name the thread-capable library without the "t" (libncurses rather than libncursest), and provide for dynamically loading the pthreads entrypoints at runtime. This allows one to reduce the number of library files for ncurses. --enable-wgetch-events Compile with experimental wgetch-events code. See ncurses/README.IZ --enable-widec Compile with wide-character code. This makes a different version of the libraries (e.g., libncursesw.so), which stores characters as wide-characters, NOTE: applications compiled with this configuration are not compatible with those built for 8-bit characters. You cannot simply make a symbolic link to equate libncurses.so with libncursesw.so NOTE: the Ada95 binding may be built against either version of the the ncurses library, but you must decide which: the binding installs the same set of files for either version. Currently (2002/6/22) it does not use the extended features from the wide-character code, so it is probably better to not install the binding for that configuration. --enable-xmc-glitch Compile-in support experimental xmc (magic cookie) code. --with-abi-version=NUM Override the ABI version, which is used in shared library filenames. Normally this is the same as the release version; some ports have special requirements for compatibility. This option does not affect linking with libtool, which uses the release major/minor numbers. --with-ada-compiler=CMD Specify the Ada95 compiler command (default "gnatmake") --with-ada-include=DIR Tell where to install the Ada includes (default: PREFIX/lib/ada/adainclude) --with-ada-objects=DIR Tell where to install the Ada objects (default: PREFIX/lib/ada/adalib) --with-ada-sharedlib Build a shared library for Ada95 binding, if the compiler permits. NOTE: You must also set the --with-shared option on some platforms for a successful build. You need not use this option when you set --with-shared, unless you want to use the Ada shared library. --with-bool=TYPE If --without-cxx is specified, override the type used for the "bool" declared in curses.h (normally the type is automatically chosen to correspond with that in , or defaults to platform-specific sizes). --with-build-cpp=XXX This option is provided by the same macro used for $BUILD_CC, etc., but is not directly used by ncurses. --with-build-cc=XXX If cross-compiling, specify a host C compiler, which is needed to compile a few utilities which generate source modules for ncurses. If you do not give this option, the configure script checks if the $BUILD_CC variable is set, and otherwise defaults to gcc or cc. --with-build-cflags=XXX If cross-compiling, specify the host C compiler-flags. You might need to do this if the target compiler has unusual flags which confuse the host compiler. You can also set the environment variable $BUILD_CFLAGS rather than use this option. --with-build-cppflags=XXX If cross-compiling, specify the host C preprocessor-flags. You might need to do this if the target compiler has unusual flags which confuse the host compiler. You can also set the environment variable $BUILD_CPPFLAGS rather than use this option. --with-build-ldflags=XXX If cross-compiling, specify the host linker-flags. You might need to do this if the target linker has unusual flags which confuse the host compiler. You can also set the environment variable $BUILD_LDFLAGS rather than use this option. --with-build-libs=XXX If cross-compiling, the host libraries. You might need to do this if the target environment requires unusual libraries. You can also set the environment variable $BUILD_LIBS rather than use this option. --with-caps=XXX Specify an alternate terminfo capabilities file, which makes the configure script look for "include/Caps.XXX". A few systems, e.g., AIX 4.x use the same overall file-format as ncurses for terminfo data, but use different alignments within the tables to support legacy applications. For those systems, you can configure ncurses to use a terminfo database which is compatible with the native applications. --with-ccharw-max=XXX Override the size of the wide-character array in cchar_t structures. Changing this will alter the binary interface. This defaults to 5. --with-chtype=TYPE Override type of chtype, which stores the video attributes and (if --enable-widec is not given) a character. Prior to ncurses 5.5, this was always unsigned long, but with ncurses 5.5, it may be unsigned. Use this option if you need to preserve compatibility with 64-bit executables, e.g., by setting "--with-chtype=long" (the configure script supplies "unsigned"). --with-cxx-shared When --with-shared is set, build libncurses++ as a shared library. This implicitly relies upon building with gcc/g++, since other compiler suites may have differences in the way shared libraries are built. libtool by the way has similar limitations. --with-database=XXX Specify the terminfo source file to install. Usually you will wish to install ncurses' default (misc/terminfo.src). Certain systems have special requirements, e.g, OS/2 EMX has a customized terminfo source file. --with-dbmalloc For testing, compile and link with Conor Cahill's dbmalloc library. This also sets the --disable-leaks option. --with-debug Generate debug-libraries (default). These are named by adding "_g" to the root, e.g., libncurses_g.a --with-default-terminfo-dir=XXX Specify the default terminfo database directory. This is normally DATADIR/terminfo, e.g., /usr/share/terminfo. --with-dmalloc For testing, compile and link with Gray Watson's dmalloc library. This also sets the --disable-leaks option. --with-export-syms[=XXX] Limit exported symbols using libtool. The configure script automatically chooses an appropriate ".sym" file, which lists the symbols which are part of the ABI. --with-extra-suffix[=XXX] Add the given suffix to header- and library-names to simplify installing incompatible ncurses libraries, e.g., those using a different ABI. The renaming affects the name of the include-subdirectory if --disable-overwrite is given. --with-fallbacks=XXX Specify a list of fallback terminal descriptions which will be compiled into the ncurses library. See CONFIGURING FALLBACK ENTRIES. --with-gpm use Alessandro Rubini's GPM library to provide mouse support on the Linux console. Prior to ncurses 5.5, this introduced a dependency on the GPM library. Currently ncurses uses the dlsym() function to bind to the library at runtime, so it is only necessary that the library be present when ncurses is built, to obtain the filename (or soname) used in the corresponding dlopen() call. If you give a value for this option, e.g., --with-gpm=$HOME/tmp/test-gpm.so that overrides the configure check for the soname. See also --without-dlsym --with-hashed-db[=XXX] Use a hashed database for storing terminfo data rather than storing each compiled entry in a separate binary file within a directory tree. In particular, this uses the Berkeley database 1.8.5 interface, as provided by that and its successors db 2, 3, and 4. The actual interface is slightly different in the successor versions of the Berkeley database. The database should have been configured using "--enable-compat185". If you use this option for configuring ncurses, tic will only be able to write entries in the hashed database. infocmp can still read entries from a directory tree as well as reading entries from the hashed database. To do this, infocmp determines whether the $TERMINFO variable points to a directory or a file, and reads the directory-tree or hashed database respectively. You cannot have a directory containing both hashed-database and filesystem-based terminfo entries. Use the parameter value to give the install-prefix used for the database, e.g., --with-hashed-db=/usr/local/BigBase to find the corresponding include- and lib-directories under the given directory. Alternatively, you can specify a directory leaf name, e.g., --with-hashed-db=db4 to make the configure script look for files in a subdirectory such as /usr/include/db4/db.h /usr/lib/db4/libdb.so See also the --enable-getcap option. --with-install-prefix=XXX Allows you to specify an alternate location for installing ncurses after building it. The value you specify is prepended to the "real" install location. This simplifies making binary packages. The makefile variable DESTDIR is set by this option. It is also possible to use make install DESTDIR=XXX since the makefiles pass that variable to subordinate makes. NOTE: a few systems build shared libraries with fixed pathnames; this option probably will not work for those configurations. --with-lib-prefix=XXX OS/2 EMX used a different naming convention from most Unix-like platforms. It required that the "lib" part of a library name was omitted. Newer EMX as part of eComStation does not follow that convention. Use this option to override the configure script's assumptions about the library-prefix. If this option is omitted, it uses the original OS/2 EMX convention for that platform. Use "--with-lib-prefix=lib" for the newer EMX in eComStation. Use "--without-lib-prefix" to suppress it for other odd platforms. --with-libtool[=XXX] Generate libraries with libtool. If this option is selected, then it overrides all other library model specifications. Note that libtool must already be installed, uses makefile rules dependent on GNU make, and does not promise to follow the version numbering convention of other shared libraries on your system. However, if the --with-shared option does not succeed, you may get better results with this option. If a parameter value is given, it must be the full pathname of the particular version of libtool, e.g., /usr/bin/libtool-1.2.3 It is possible to rebuild the configure script to use the automake macros for libtool, e.g., AC_PROG_LIBTOOL. See the comments in aclocal.m4 for CF_PROG_LIBTOOL, and ensure that you build configure using the appropriate patch for autoconf from http://invisible-island.net/autoconf/ --with-libtool-opts=XXX Specify additional libtool options. --with-manpage-aliases Tell the configure script you wish to create entries in the man-directory for aliases to manpages which list them, e.g., the functions in the panel manpage. This is the default. You can disable it if your man program does this. You can also disable --with-manpage-symlinks to install files containing a ".so" command rather than symbolic links. --with-manpage-format=XXX Tell the configure script how you would like to install man-pages. The option value must be one of these: gzip, compress, BSDI, normal, formatted. If you do not give this option, the configure script attempts to determine which is the case. --with-manpage-renames=XXX Tell the configure script that you wish to rename the manpages while installing. Currently the only distribution which does this is Debian. The option value specifies the name of a file that lists the renamed files, e.g., $srcdir/man/man_db.renames --with-manpage-symlinks Tell the configure script that you wish to make symbolic links in the man-directory for aliases to the man-pages. This is the default, but can be disabled for systems that provide this automatically. Doing this on systems that do not support symbolic links will result in copying the man-page for each alias. --with-manpage-tbl Tell the configure script that you wish to preprocess the manpages by running them through tbl to generate tables understandable by nroff. --with-mmask-t=TYPE Override type of mmask_t, which stores the mouse mask. Prior to ncurses 5.5, this was always unsigned long, but with ncurses 5.5, it may be unsigned. Use this option if you need to preserve compatibility with 64-bit executables. --with-normal Generate normal (i.e., static) libraries (default). Note: on Linux, the configure script will attempt to use the GPM library via the dlsym() function call. Use --without-dlsym to disable this feature, or --without-gpm, depending on whether you wish to use GPM. --with-ospeed=TYPE Override type of ospeed variable, which is part of the termcap compatibility interface. In termcap, this is a 'short', which works for a wide range of baudrates because ospeed is not the actual speed but the encoded value, e.g., B9600 would be a small number such as 13. However the encoding scheme originally allowed for values "only" up to 38400bd. A newer set of definitions past 38400bd is not encoded as compactly, and is not guaranteed to fit into a short (see the function cfgetospeed(), which returns a speed_t for this reason). In practice, applications that required knowledge of the ospeed variable, i.e., those using termcap, do not use the higher speeds. Your application (or system, in general) may or may not. --with-pc-suffix=SUFFIX If ".pc" files are installed, optionally add a suffix to the files and corresponding package names to separate unusual configurations. If no option value is given (or if it is "none"), no suffix is added. --with-pkg-config=[DIR] Check for pkg-config, optionally specifying its path. --with-pkg-config-libdir=[DIR] If pkg-config was found, override the automatic check for its library path. --with-profile Generate profile-libraries These are named by adding "_p" to the root, e.g., libncurses_p.a --with-pthread Link with POSIX threads, set --enable-reentrant. The use_window() and use_screen() functions will use mutex's, allowing rudimentary support for multithreaded applications. --with-rcs-ids Compile-in RCS identifiers. Most of the C files have an identifier. --with-rel-version=NUM Override the release version, which may be used in shared library filenames. This consists of a major and minor version number separated by ".". Normally the major version number is the same as the ABI version; some ports have special requirements for compatibility. --with-shared Generate shared-libraries. The names given depend on the system for which you are building, typically using a ".so" suffix, along with symbolic links that refer to the release version. NOTE: Unless you override the configure script by setting the $CFLAGS environment variable, these will not be built with the -g debugging option. NOTE: For some configurations, e.g., installing a new version of ncurses shared libraries on a machine which already has ncurses shared libraries, you may encounter problems with the linker. For example, it may prevent you from running the build tree's copy of tic (for installing the terminfo database) because it loads the system's copy of the ncurses shared libraries. In that case, using the misc/shlib script may be helpful, since it sets $LD_LIBRARY_PATH to point to the build tree, e.g., ./misc/shlib make install Alternatively, for most platforms, the linker accepts a list of directories which will be searched for libraries at run-time. The configure script allows you to modify this list using the RPATH_LIST environment variable. It is a colon-separated list of directories (default: the "libdir" set via the configure script). If you set that to put "../lib" first in the list, the linker will look first at the build-directory, and avoid conflict with libraries already installed. One drawback to this approach is that libraries can be accidentally searched in any "../lib" directory. NOTE: If you use the --with-ada-sharedlib option, you should also set this option, to ensure that C-language modules needed for the Ada binding use appropriate compiler options. --with-shlib-version=XXX Specify whether to use the release or ABI version for shared libraries. This is normally chosen automatically based on the type of system which you are building on. We use it for testing the configure script. --with-sysmouse use FreeBSD sysmouse interface provide mouse support on the console. --with-system-type=XXX For testing, override the derived host system-type which is used to decide things such as the linker commands used to build shared libraries. This is normally chosen automatically based on the type of system which you are building on. We use it for testing the configure script. --with-terminfo-dirs=XXX Specify a search-list of terminfo directories which will be compiled into the ncurses library (default: DATADIR/terminfo) This is a colon-separated list, like the TERMINFO_DIRS environment variable. --with-termlib[=XXX] When building the ncurses library, organize this as two parts: the curses library (libncurses) and the low-level terminfo library (libtinfo). This is done to accommodate applications that use only the latter. The terminfo library is about half the size of the total. If an option value is given, that overrides the name of the terminfo library. For instance, if the wide-character version is built, the terminfo library would be named libtinfow. But the libtinfow interface is upward compatible from libtinfo, so it would be possible to overlay libtinfo.so with a "wide" version of libtinfow.so by renaming it with this option. --with-termpath=XXX Specify a search-list of termcap files which will be compiled into the ncurses library (default: /etc/termcap:/usr/share/misc/termcap) --with-ticlib[=XXX] When building the ncurses library, build a separate library for the modules that are used only by the utility programs. Normally those would be bundled with the termlib or ncurses libraries. If an option value is given, that overrides the name of the tic library. As in termlib, there is no ABI difference between the "wide" libticw.so and libtic.so NOTE: Overriding the name of the tic library may be useful if you are also using the --with-termlib option to rename libtinfo. If you are not doing that, renaming the tic library can result in conflicting library dependencies for tic and other programs built with the tic library. --with-tparm-arg[=XXX] Override the type used for tparm() arguments, which normally is a "long". However the function must assume that its arguments can hold a pointer to char's which is not always workable for 64-bit platforms. A better choice would be intptr_t, which was not available at the time tparm's interface was defined. If the option is not given, this defaults to "long". --with-trace Configure the trace() function as part of the all models of the ncurses library. Normally it is part of the debug (libncurses_g) library only. --with-versioned-syms[=XXX] The Solaris, GNU and reportedly some other linkers (ld) accept a "--version-script" option which tells the linker to annotate the resulting objects with version identifiers. Use "objdump -T" on a library to see the annotations. The configure script attempts to automatically apply a suitable ".map" file to provide this information for Linux. Solaris mapfiles differ: a) comments are not accepted b) wildcards are not accepted, except for a special case of "_*". c) each symbol listed in the map file must exist in the library The Solaris limitations conflict with the development goal of providing a small set of ".map" files as examples, which cover the most common configurations. Because that coverage is done by merging together several builds, some symbols will be listed in the the ".map" files that do not happen to be present in one configuration or another. The sample ".map" (and ".sym") files are generated using a set of scripts which build several configurations for each release version, checking to see which of the "_nc_" symbols can be made local. In addition to the ncurses libraries and programs, the symbols used by the "tack" program are made global. These sample ".map" files will not cover all possible combinations. In some cases, e.g., when using the --with-weak-symbols option, you may prefer to use a different ".map" file by setting this option's value. --with-xterm-kbs=XXX Configure xterm's terminfo entries to use either BS (^H, i.e., ASCII backspace) or DEL (^?, or 127). XXX can be BS (or bs, 8) or DEL (or del, 127). During installation, the makefile and scripts modifies the "xterm+kbs" terminfo entry to use this setting. --with-valgrind For testing, compile with debug option. This also sets the --disable-leaks option. --with-wrap-prefix=XXX When using the --enable-reentrant option, ncurses redefines variables that would be global in curses, e.g., LINES, as a macro that calls a "wrapping" function which fetches the data from the current SCREEN structure. Normally that function is named by prepending "_nc_" to the variable's name. The function is technically private (since portable applications would not refer directly to it). But according to one line of reasoning, it is not the same type of "private" as functions which applications should not call even via a macro. This configure option lets you choose the prefix for these wrapped variables. --without-ada Suppress the configure script's check for Ada95, do not build the Ada95 binding and related demo. --without-curses-h Don't install the ncurses header with the name "curses.h". Rather, install as "ncurses.h" and modify the installed headers and manpages accordingly. Likewise, do not install an alias "curses" for the ncurses manpage. --without-cxx XSI curses declares "bool" as part of the interface. C++ also declares "bool". Neither specifies the size and type of booleans, but both insist on the same name. We chose to accommodate this by making the configure script check for the size and type (e.g., unsigned or signed) that your C++ compiler uses for booleans. If you do not wish to use ncurses with C++, use this option to tell the configure script to not adjust ncurses bool to match C++. --without-cxx-binding Suppress the configure script's check for C++, do not build the C++ binding and related demo. --without-develop Disable development options. This does not include those that change the interface, such as --enable-widec. --without-dlsym Do not use dlsym() to load GPM dynamically. --without-manpages Tell the configure script to suppress the install of ncurses' manpages. --without-progs Tell the configure script to suppress the build of ncurses' application programs (e.g., tic). The test applications will still be built if you type "make", though not if you simply do "make install". --without-tests Tell the configure script to suppress the build of ncurses' test programs. --without-xterm-new Tell the configure script to use "xterm-old" for the entry used in the terminfo database. This will work with variations such as X11R5 and X11R6 xterm. COMPATIBILITY WITH OLDER VERSIONS OF NCURSES: -------------------------------------------- Because ncurses implements X/Open Curses, its interface is fairly stable. That does not mean the interface does not change. Changes are made to the documented interfaces when we find differences between ncurses and X/Open or implementations which largely correspond to X/Open (such as Solaris). We add extensions to those interfaces to solve problems not addressed by the original curses design, but those must not conflict with the X/Open documentation. Here are some of the major interface changes, and related problems which you may encounter when building a system with different versions of ncurses: 6.0 (Aug 08, 2015) Interface changes: + The 6.0 ABI modifies the defaults for these configure options: --enable-const --enable-ext-colors --enable-ext-mouse --enable-ext-putwin --enable-interop --enable-lp64 --enable-sp-funcs --with-chtype=uint32_t --with-mmask_t=uint32_t --with-tparm-arg=intptr_t + ncurses supports symbol versioning. If you use this feature, about half of the "_nc_" private symbols are changed to local symbols. + a few applications may need to explicitly flush the standard output when switching between printf's and (curses) printw. Added extensions: + use_tioctl is an improvement over use_env + added wgetdelay to support the NCURSES_OPAQUE feature. Added internal functions (other than "_sp" variants): _nc_init_termtype _nc_mvcur _nc_putchar _nc_setenv_num _nc_trace_mmask_t Removed internal functions: none Modified internal functions: _nc_do_color - change parameters from short/bool to int _nc_keypad - change parameter from bool to int _nc_setupscreen - change parameter from bool to int _nc_signal_handler - change parameter from bool to int 5.9 (Apr 04, 2011) 5.8 (Feb 26, 2011) Interface changes: + add an alternate library configuration, i.e., "terminal driver" to support port to Windows, built with MinGW. There are two drivers (terminfo and Windows console). The terminfo driver works on other platforms. + add a new set of functions which accept a SCREEN* parameter, in contrast with the original set which use the global value "sp". By default, these names end with "_sp", and are otherwise functionally identical with the originals. In addition to the "_sp" functions, there are a few new functions associated with this feature: ceiling_panel, ground_panel, new_prescr. If the library is not built with the sp-funcs extension, there are no related interface changes. + add tiparm function based on review of X/Open Curses Issue 7. + change internal _nc_has_mouse function to public has_mouse function Added extensions: + add a few more functions to support the NCURSES_OPAQUE feature: get_escdelay, is_pad, is_subwin Added internal functions (other than "_sp" variants): _nc_curscr_of _nc_format_slks _nc_get_alias_table _nc_get_hash_info _nc_insert_wch _nc_newscr_of _nc_outc_wrapper _nc_retrace_char _nc_retrace_int_attr_t _nc_retrace_mmask_t _nc_setup_tinfo _nc_stdscr_of _nc_tinfo_cmdch Removed internal functions: _nc_makenew (some configurations replace by _nc_makenew_sp) Modified internal functions: _nc_UpdateAttrs _nc_get_hash_table _nc_has_mouse _nc_insert_ch _nc_wgetch 5.7 (November 2, 2008) Interface changes: + generate linkable stubs for some macros: getattrs + Add new library configuration for tic-library (the non-curses portion of the ncurses library used for the tic program as well as some others such as tack. There is no API change, but makefiles would be changed to use the tic-library built separately. tack, distributed separately from ncurses, uses some of the internal _nc_XXX functions, which are declared in the tic.h header file. The reason for providing this separate library is that none of the functions in it are suitable for threaded applications. + Add new library configuration (ncursest, ncurseswt) which provides rudimentary support for POSIX threads. This introduces opaque access functions to the WINDOW structure and adds a parameter to several internal functions. + move most internal variables (except tic-library) into data blocks _nc_globals and _nc_prescreen to simplify analysis. Those were globally accessible, but since they were not part of the documented API, there is no ABI change. + changed static tables of strings to be indices into long strings, to improve startup performance. This changes parameter lists for some of the internal functions. Added extensions: + add NCURSES_OPAQUE definition in curses.h to control whether internal details of the WINDOW structure are visible to an application. This is always defined when the threaded library is built, and is optional otherwise. New functions for this: is_cleared, is_idcok, is_idlok, is_immedok, is_keypad, is_leaveok, is_nodelay, is_notimeout, is_scrollok, is_syncok, wgetparent and wgetscrreg. + the threaded library (ncursest) also disallows direct updating of global curses-level variables, providing functions (via macros) for obtaining their value. A few of those variables can be modified by the application, using new functions: set_escdelay, set_tabsize + added functions use_window() and use_screen() which wrap a mutex (if threading is configured) around a call to a user-supplied function. Added internal functions: _nc_get_alias_table _nc_get_screensize _nc_keyname _nc_screen_of _nc_set_no_padding _nc_tracechar _nc_tracemouse _nc_unctrl _nc_ungetch These are used for leak-testing, and are stubs for ABI compatibility when ncurses is not configured for that using the --disable-leaks configure script option: _nc_free_and_exit _nc_leaks_tinfo Removed internal functions: none Modified internal functions: _nc_fifo_dump _nc_find_entry _nc_handle_sigwinch _nc_init_keytry _nc_keypad _nc_locale_breaks_acs _nc_timed_wait _nc_update_screensize Use new typedef TRIES to replace "struct tries": _nc_add_to_try _nc_expand_try _nc_remove_key _nc_remove_string _nc_trace_tries 5.6 (December 17, 2006) Interface changes: + generate linkable stubs for some macros: getbegx, getbegy, getcurx, getcury, getmaxx, getmaxy, getparx, getpary, getpary, and (for libncursesw) wgetbkgrnd Added extensions: nofilter() use_legacy_coding() Added internal functions: _nc_first_db _nc_get_source _nc_handle_sigwinch _nc_is_abs_path _nc_is_dir_path _nc_is_file_path _nc_keep_tic_dir _nc_keep_tic_dir _nc_last_db _nc_next_db _nc_read_termtype _nc_tic_dir Also (if using the hashed database configuration): _nc_db_close _nc_db_first _nc_db_get _nc_db_have_data _nc_db_have_index _nc_db_next _nc_db_open _nc_db_put otherwise _nc_hashed_db Removed internal functions: none Modified internal functions: _nc_add_to_try _nc_do_color _nc_expand_try _nc_remove_key _nc_setupscreen 5.5 (October 10, 2005) Interface changes: + terminfo installs "xterm-new" as "xterm" entry rather than "xterm-old" (aka xterm-r6). + terminfo data is installed using the tic -x option (few systems still use ncurses 4.2). + modify C++ binding to work with newer C++ compilers by providing initializers and using modern casts. Old-style header names are still used in this release to allow compiling with not-so-old compilers. + form and menu libraries now work with wide-character data. Applications which bypassed the form library and manipulated the FIELD.buf data directly will not work properly with libformw, since that no longer points to an array of char. The set_field_buffer() and field_buffer() functions translate to/from the actual field data. + change SP->_current_attr to a pointer, adjust ifdef's to ensure that libtinfo.so and libtinfow.so have the same ABI. The reason for this is that the corresponding data which belongs to the upper-level ncurses library has a different size in each model. + winnstr() now returns multibyte character strings for the wide-character configuration. + assume_default_colors() no longer requires that use_default_colors() be called first. + data_ahead() now works with wide-characters. + slk_set() and slk_wset() now accept and store multibyte or multicolumn characters. + start_color() now returns OK if colors have already been started. start_color() also returns ERR if it cannot allocate memory. + pair_content() now returns -1 for consistency with init_pair() if it corresponds to the default-color. + unctrl() now returns null if its parameter does not correspond to an unsigned char. Added extensions: Experimental mouse version 2 supports wheel mice with buttons 4 and 5. This requires ABI 6 because it modifies the encoding of mouse events. Experimental extended colors allows encoding of 256 foreground and background colors, e.g., with the xterm-256color or xterm-88color terminfo entries. This requires ABI 6 because it changes the size of cchar_t. Added internal functions: _nc_check_termtype2 _nc_resolve_uses2 _nc_retrace_cptr _nc_retrace_cvoid_ptr _nc_retrace_void_ptr _nc_setup_term Removed internal functions: none Modified internal functions: _nc_insert_ch _nc_save_str _nc_trans_string 5.4 (February 8, 2004) Interface changes: + add the remaining functions for X/Open curses wide-character support. These are only available if the library is configured using the --enable-widec option. pecho_wchar() slk_wset() + write getyx() and related 2-return macros in terms of getcury(), getcurx(), etc. + simplify ifdef for bool declaration in curses.h + modify ifdef's in curses.h that disabled use of __attribute__() for g++, since recent versions implement the cases which ncurses uses. + change some interfaces to use const: define_key() mvprintw() mvwprintw() printw() vw_printw() winsnstr() wprintw() Added extensions: key_defined() Added internal functions: _nc_get_locale() _nc_insert_ch() _nc_is_charable() wide _nc_locale_breaks_acs() _nc_pathlast() _nc_to_char() wide _nc_to_widechar() wide _nc_tparm_analyze() _nc_trace_bufcat() debug _nc_unicode_locale() Removed internal functions: _nc_outstr() _nc_sigaction() Modified internal functions: _nc_remove_string() _nc_retrace_chtype() 5.3 (October 12, 2002) Interface changes: + change type for bool used in headers to NCURSES_BOOL, which usually is the same as the compiler's definition for 'bool'. + add all but two functions for X/Open curses wide-character support. These are only available if the library is configured using the --enable-widec option. Missing functions are pecho_wchar() slk_wset() + add environment variable $NCURSES_ASSUMED_COLORS to modify the assume_default_colors() extension. Added extensions: is_term_resized() resize_term() Added internal functions: _nc_altcharset_name() debug _nc_reset_colors() _nc_retrace_bool() debug _nc_retrace_unsigned() debug _nc_rootname() _nc_trace_ttymode() debug _nc_varargs() debug _nc_visbufn() debug _nc_wgetch() Removed internal functions: _nc_background() Modified internal functions: _nc_freeall() debug 5.2 (October 21, 2000) Interface changes: + revert termcap ospeed variable to 'short' (see discussion of the --with-ospeed configure option). 5.1 (July 8, 2000) Interface changes: + made the extended terminal capabilities (configure --enable-tcap-names) a standard feature. This should be transparent to applications that do not require it. + removed the trace() function and related trace support from the production library. + modified curses.h.in, undef'ing some symbols to avoid conflict with C++ STL. Added extensions: assume_default_colors(). 5.0 (October 23, 1999) Interface changes: + implemented the wcolor_set() and slk_color() functions. + move macro winch to a function, to hide details of struct ldat + corrected prototypes for slk_* functions, using chtype rather than attr_t. + the slk_attr_{set,off,on} functions need an additional void* parameter according to XSI. + modified several prototypes to correspond with 1997 version of X/Open Curses: [w]attr_get(), [w]attr_set(), border_set() have different parameters. Some functions were renamed or misspelled: erase_wchar(), in_wchntr(), mvin_wchntr(). Some developers have used attr_get(). Added extensions: keybound(), curses_version(). Terminfo database changes: + change translation for termcap 'rs' to terminfo 'rs2', which is the documented equivalent, rather than 'rs1'. The problems are subtler in recent releases. a) This release provides users with the ability to define their own terminal capability extensions, like termcap. To accomplish this, we redesigned the TERMTYPE struct (in term.h). Very few applications use this struct. They must be recompiled to work with the 5.0 library. a) If you use the extended terminfo names (i.e., you used configure --enable-tcap-names), the resulting terminfo database can have some entries which are not readable by older versions of ncurses. This is a bug in the older versions: + the terminfo database stores booleans, numbers and strings in arrays. The capabilities that are listed in the arrays are specified by X/Open. ncurses recognizes a number of obsolete and extended names which are stored past the end of the specified entries. + a change to read_entry.c in 951001 made the library do an lseek() call incorrectly skipping data which is already read from the string array. This happens when the number of strings in the terminfo data file is greater than STRCOUNT, the number of specified and obsolete or extended strings. + as part of alignment with the X/Open final specification, in the 990109 patch we added two new terminfo capabilities: set_a_attributes and set_pglen_inch). This makes the indices for the obsolete and extended capabilities shift up by 2. + the last two capabilities in the obsolete/extended list are memu and meml, which are found in most terminfo descriptions for xterm. When trying to read this terminfo entry, the spurious lseek() causes the library to attempt to read the final portion of the terminfo data (the text of the string capabilities) 4 characters past its starting point, and reads 4 characters too few. The library rejects the data, and applications are unable to initialize that terminal type. FIX: remove memu and meml from the xterm description. They are obsolete, not used by ncurses. (It appears that the feature was added to xterm to make it more like hpterm). This is not a problem if you do not use the -x option of tic to create a terminfo database with extended names. Note that the user-defined terminal capabilities are not affected by this bug, since they are stored in a table after the older terminfo data ends, and are invisible to the older libraries. c) Some developers did not wish to use the C++ binding, and used the configure --without-cxx option. This causes problems if someone uses the ncurses library from C++ because that configure test determines the type for C++'s bool and makes ncurses match it, since both C++ and curses are specified to declare bool. Calling ncurses functions with the incorrect type for bool will cause execution errors. In 5.0 we added a configure option "--without-cxx-binding" which controls whether the binding itself is built and installed. 4.2 (March 2, 1998) Interface changes: + correct prototype for termattrs() as per XPG4 version 2. + add placeholder prototypes for color_set(), erasewchar(), term_attrs(), wcolor_set() as per XPG4 version 2. + add macros getcur[xy] getbeg[xy] getpar[xy], which are defined in SVr4 headers. New extensions: keyok() and define_key(). Terminfo database changes: + corrected definition in curses.h for ACS_LANTERN, which was 'I' rather than 'i'. 4.1 (May 15, 1997) We added these extensions: use_default_colors(). Also added configure option --enable-const, to support the use of const where X/Open should have, but did not, specify. The terminfo database content changed the representation of color for most entries that use ANSI colors. SVr4 curses treats the setaf/setab and setf/setb capabilities differently, interchanging the red/blue colors in the latter. 4.0 (December 24, 1996) We bumped to version 4.0 because the newly released Linux dynamic loader (ld.so.1.8.5) did not load shared libraries whose ABI and REL versions were inconsistent. At that point, ncurses ABI was 3.4 and the REL was 1.9.9g, so we made them consistent. 1.9.9g (December 1, 1996) This fixed most of the problems with 1.9.9e, and made these interface changes: + remove tparam(), which had been provided for compatibility with some termcap. tparm() is standard, and does not conflict with application's fallback for missing tparam(). + turn off hardware echo in initscr(). This changes the sense of the echo() function, which was initialized to echoing rather than nonechoing (the latter is specified). There were several other corrections to the terminal I/O settings which cause applications to behave differently. + implemented several functions (such as attr_on()) which were available only as macros. + corrected several typos in curses.h.in (i.e., the mvXXXX macros). + corrected prototypes for delay_output(), has_color, immedok() and idcok(). + corrected misspelled getbkgd(). Some applications used the misspelled name. + added _yoffset to WINDOW. The size of WINDOW does not impact applications, since they use only pointers to WINDOW structs. These changes were made to the terminfo database: + removed boolean 'getm' which was available as an extended name. We added these extensions: wresize(), resizeterm(), has_key() and mcprint(). 1.9.9e (March 24, 1996) not recommended (a last-minute/untested change left the forms and menus libraries unusable since they do not repaint the screen). Foreground/background colors are combined incorrectly, working properly only on a black background. When this was released, the X/Open specification was available only in draft form. Some applications (such as lxdialog) were "fixed" to work with the incorrect color scheme. IF YOU ARE A SYSTEM INTEGRATOR: ------------------------------ Configuration and Installation: On platforms where ncurses is assumed to be installed in /usr/lib, the configure script uses "/usr" as a default. These include any that use the Linux kernel, as well as these special cases: FreeBSD, NetBSD, OpenBSD, Cygwin, MinGW For other platforms, the default is "/usr/local". See the discussion of the "--disable-overwrite" option. The location of the terminfo is set indirectly by the "--datadir" configure option, e.g., /usr/share/terminfo, given a datadir of /usr/share. You may want to override this if you are installing ncurses libraries in nonstandard locations, but wish to share the terminfo database. Normally the ncurses library is configured in a pure-terminfo mode; that is, with the --disable-termcap option. This makes the ncurses library smaller and faster. The ncurses library includes a termcap emulation that queries the terminfo database, so even applications that use raw termcap to query terminal characteristics will win (providing you recompile and relink them!). If you must configure with termcap fallback enabled, you may also wish to use the --enable-getcap option. This speeds up termcap-based startups, at the expense of not allowing personal termcap entries to reference the terminfo tree. See comments in ncurses/tinfo/read_termcap.c for further details. Note that if you have $TERMCAP set, ncurses will use that value to locate termcap data. In particular, running from xterm will set $TERMCAP to the contents of the xterm's termcap entry. If ncurses sees that, it will not examine /etc/termcap. Keyboard Mapping: The terminfo file assumes that Shift-Tab generates \E[Z (the ECMA-48 reverse-tabulation sequence) rather than ^I. Here are the loadkeys -d mappings that will set this up: keycode 15 = Tab Tab alt keycode 15 = Meta_Tab shift keycode 15 = F26 string F26 ="\033[Z" Naming the Console Terminal In various systems there has been a practice of designating the system console driver type as `console'. Please do not do this! It complicates peoples' lives, because it can mean that several different terminfo entries from different operating systems all logically want to be called `console'. Please pick a name unique to your console driver and set that up in the /etc/inittab table or local equivalent. Send the entry to the terminfo maintainer (listed in the misc/terminfo file) to be included in the terminfo file, if it's not already there. See the term(7) manual page included with this distribution for more on conventions for choosing type names. Here are some recommended primary console names: linux -- Linux console driver freebsd -- FreeBSD netbsd -- NetBSD bsdos -- BSD/OS If you are responsible for integrating ncurses for one of these distributions, please either use the recommended name or get back to us explaining why you don't want to, so we can work out nomenclature that will make users' lives easier rather than harder. RECENT XTERM VERSIONS: --------------------- The terminfo database file included with this distribution assumes you are running a modern xterm based on XFree86 (i.e., xterm-new). The earlier X11R6 entry (xterm-r6) and X11R5 entry (xterm-r5) is provided as well. See the --without-xterm-new configure script option if you are unable to update your system. CONFIGURING FALLBACK ENTRIES: ---------------------------- In order to support operation of ncurses programs before the terminfo tree is accessible (that is, in single-user mode or at OS installation time) the ncurses library can be compiled to include an array of pre-fetched fallback entries. This must be done on a machine which has ncurses' infocmp and terminfo database installed (as well as ncurses' tic and infocmp programs). These entries are checked by setupterm() only when the conventional fetches from the terminfo tree and the termcap fallback (if configured) have been tried and failed. Thus, the presence of a fallback will not shadow modifications to the on-disk entry for the same type, when that entry is accessible. By default, there are no entries on the fallback list. After you have built the ncurses suite for the first time, you can change the list (the process needs infocmp(1)). To do so, use the script ncurses/tinfo/MKfallback.sh. The configure script option --with-fallbacks does this (it accepts a comma-separated list of the names you wish, and does not require a rebuild). If you wanted (say) to have linux, vt100, and xterm fallbacks, you might use the commands cd ncurses; tinfo/MKfallback.sh \ $TERMINFO \ ../misc/terminfo.src \ `which tic` \ linux vt100 xterm >fallback.c The first three parameters of the script are normally supplied by the configured makefiles via the "--with-fallbacks" option. They are 1) the location of the terminfo database 2) the source for the terminfo entries 3) the location of the tic program, used to create a terminfo database. Then just rebuild and reinstall the library as you would normally. You can restore the default empty fallback list with tinfo/MKfallback.sh \ $TERMINFO \ ../misc/terminfo.src \ `which tic` \ >fallback.c The overhead for an empty fallback list is one trivial stub function. Any non-empty fallback list is const-ed and therefore lives in sharable text space. You can look at the comment trailing each initializer in the generated ncurses/fallback.c file to see the core cost of the fallbacks. A good rule of thumb for modern vt100-like entries is that each one will cost about 2.5K of text space. BSD CONVERSION NOTES: -------------------- If you need to support really ancient BSD programs, you probably want to configure with the --enable-bsdpad option. What this does is enable code in tputs() that recognizes a numeric prefix on a capability as a request for that much trailing padding in milliseconds. There are old BSD programs that do things like tputs("50"). (If you are distributing ncurses as a support-library component of an application you probably want to put the remainder of this section in the package README file.) The following note applies only if you have configured ncurses with --enable-termcap. ------------------------------- CUT HERE -------------------------------- If you are installing this application privately (either because you have no root access or want to experiment with it before doing a root installation), there are a couple of details you need to be aware of. They have to do with the ncurses library, which uses terminfo rather than termcap for describing terminal characteristics. Though the ncurses library is terminfo-based, it can interpret your TERMCAP variable (if present), any local termcap files you reference through it, and the system termcap file. However, to avoid slowing down your application startup, it does this only once per terminal type! The first time you load a given terminal type from your termcap database, the library initialization code will automatically write it in terminfo format to a subdirectory under $HOME/.terminfo. After that, the initialization code will find it there and do a (much faster) terminfo fetch. Usually, all this means is that your home directory will silently grow an invisible .terminfo subdirectory which will get filled in with terminfo descriptions of terminal types as you invoke them. If anyone ever installs a global terminfo tree on your system, this will quietly stop happening and your $HOME/.terminfo will become redundant. The objective of all this logic is to make converting from BSD termcap as painless as possible without slowing down your application (termcap compilation is expensive). If you don't have a TERMCAP variable or custom personal termcap file, you can skip the rest of this dissertation. If you *do* have a TERMCAP variable and/or a custom personal termcap file that defines a terminal type, that definition will stop being visible to this application after the first time you run it, because it will instead see the terminfo entry that it wrote to $HOME/terminfo the first time around. Subsequently, editing the TERMCAP variable or personal TERMCAP file will have no effect unless you explicitly remove the terminfo entry under $HOME/terminfo. If you do that, the entry will be recompiled from your termcap resources the next time it is invoked. To avoid these complications, use infocmp(1) and tic(1) to edit the terminfo directory directly. ------------------------------- CUT HERE -------------------------------- USING NCURSES WITH AFS: AFS treats each directory as a separate logical filesystem, you can't hard-link across them. The --enable-symlinks option copes with this by making tic use symbolic links. USING NCURSES WITH GPM: Ncurses 4.1 and up can be configured to use GPM (General Purpose Mouse) which is used with Linux console. Be aware that GPM is commonly installed as a shared library which contains a wrapper for the curses wgetch() function (libcurses.o). Some integrators have simplified linking applications by combining all or part of libcurses.so into the libgpm.so file, producing symbol conflicts with ncurses (specifically the wgetch function). This was originally the BSD curses, but generally whatever curses library exists on the system. You may be able to work around this problem by linking as follows: cc -o foo foo.o -lncurses -lgpm -lncurses but the linker may not cooperate, producing mysterious errors. See the FAQ, as well as the discussion under the --with-gpm option: http://invisible-island.net/ncurses/ncurses.faq.html#using_gpm_lib BUILDING NCURSES WITH A CROSS-COMPILER Ncurses can be built with a cross-compiler. Some parts must be built with the host's compiler since they are used for building programs (e.g., ncurses/make_hash and ncurses/make_keys) that generate tables that are compiled into the ncurses library. The essential thing to do is set the BUILD_CC environment variable to your host's compiler, and run the configure script configuring for the cross-compiler. The configure options --with-build-cc, etc., are provided to make this simpler. Since make_hash and make_keys use only ANSI C features, it is normally not necessary to provide the other options such as --with-build-libs, but they are provided for completeness. Note that all of the generated source-files which are part of ncurses will be made if you use make sources This would be useful in porting to an environment which has little support for the tools used to generate the sources, e.g., sed, awk and Bourne-shell. When ncurses has been successfully cross-compiled, you may want to use "make install" (with a suitable target directory) to construct an install tree. Note that in this case (as with the --with-fallbacks option), ncurses uses the development platform's tic to do the "make install.data" portion. The system's tic program is used to install the terminal database, even for cross-compiles. For best results, the tic program should be from the most current version of ncurses. BUGS: Send any feedback to the ncurses mailing list at bug-ncurses@gnu.org. To subscribe send mail to bug-ncurses-request@gnu.org with body that reads: subscribe ncurses The Hacker's Guide in the doc directory includes some guidelines on how to report bugs in ways that will get them fixed most quickly. -- vile:txtmode ncurses-6.0-20160213/README.emx0000644000175100001440000000762110422525771014137 0ustar tomusers------------------------------------------------------------------------------- -- Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining a -- -- copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, distribute with modifications, sublicense, and/or sell copies -- -- of the Software, and to permit persons to whom the Software is furnished -- -- to do so, subject to the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be included -- -- in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- -- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -- -- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- -- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- -- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- -- USE OR OTHER DEALINGS IN THE SOFTWARE. -- -- -- -- Except as contained in this notice, the name(s) of the above copyright -- -- holders shall not be used in advertising or otherwise to promote the -- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- -- $Id: README.emx,v 1.8 2006/04/22 22:19:37 tom Exp $ -- Author: Thomas Dickey ------------------------------------------------------------------------------- You can build ncurses on OS/2 in the EMX environment. But you must build and acquire tools. Not all of the tools distributed with EMX work properly, and some additional ones are required. First, the configure script distributed with ncurses will not run as-is in EMX. You can generate a new one if you have autoconf built for EMX. You will need the EMX development tools, of course. Get these programs to start: GNU m4 program (version 1.4) GNU autoconf (version 2.13). GNU patch (version 2.5) Apply the autoconf patches from http://invisible-island.net/autoconf ftp://invisible-island.net/autoconf These are ordered by date: autoconf-2.13-20030927.patch.gz autoconf-2.13-20030927-emx.patch.gz I built my development environment for ncurses using EMX 0.9c at the end of 1997. Much of the EMX patch for autoconf was done originally by J.J.G.Ripoll, using a similar environment (he prefers using the 'ash' shell). Newer versions may fix these problems: + The pdksh program distributed at Hobbes and Leo (with a 1996 date) is defective. It does not process "here documents" correctly (which renders it useless for running the autoconf script). I built my own copy of pdksh 5.2.13, which does have the bug corrected (documented in the change log for pdksh). + I also built from sources (because the distributed binaries did not work) the cmp, diff programs. Other required utilities such as ar, cat, chmod, cp, gawk, grep, mv, ls, rm, mkdir, sed, sort and tr worked. Once you have autoconf patched and installed, run 'autoconf' from the top-level directory of ncurses to generate the EMX-specific configure script. ncurses-6.0-20160213/announce.html.in0000644000175100001440000023263512561454025015574 0ustar tomusers Announcing ncurses @VERSION@

Announcing ncurses @VERSION@

Overview

The ncurses (new curses) library is a free software emulation of curses in System V Release 4.0 (SVr4), and more. It uses terminfo format, supports pads and color and multiple highlights and forms characters and function-key mapping, and has all the other SVr4-curses enhancements over BSD curses. SVr4 curses is better known today as X/Open Curses.

In mid-June 1995, the maintainer of 4.4BSD curses declared that he considered 4.4BSD curses obsolete, and encouraged the keepers of unix releases such as BSD/OS, FreeBSD and NetBSD to switch over to ncurses.

Since 1995, ncurses has been ported to many systems:

  • It is used in almost every system based on the Linux kernel (aside from some embedded applications).
  • It is used as the system curses library on OpenBSD, FreeBSD and OSX.
  • It is used in environments such as Cygwin and MinGW. The first of these was EMX on OS/2 Warp.
  • It is used (though usually not as the system curses) on all of the vendor unix systems, e.g., AIX, HP-UX, IRIX64, SCO, Solaris, Tru64.
  • It should work readily on any ANSI/POSIX-conforming unix.

The distribution includes the library and support utilities, including

  • captoinfo, a termcap conversion tool
  • clear, utility for clearing the screen
  • infocmp, the terminfo decompiler
  • tabs, set tabs on a terminal
  • tic, the terminfo compiler
  • toe, list (table of) terminfo entries
  • tput, utility for retrieving terminal capabilities in shell scripts
  • tset, to initialize the terminal

Full manual pages are provided for the library and tools.

The ncurses distribution is available via anonymous FTP at the GNU distribution site

ftp://ftp.gnu.org/gnu/ncurses/ .

It is also available at

ftp://invisible-island.net/ncurses/ .

Release Notes

These notes are for ncurses @VERSION@, released August 8, 2015.

This release is designed to be source-compatible with ncurses 5.0 through 5.9; providing a new application binary interface (ABI). Although the source can still be configured to support the ncurses 5 ABI, the intent of the release is to provide extensions which are generally useful, but binary-incompatible with ncurses 5:

  • Extend the cchar_t structure to allow more than 16 colors to be encoded.

  • Modify the encoding of mouse state to make room for a 5th mouse button. That allows one to use ncurses with a wheel mouse with xterm or similar X terminal emulators.

There are, of course, numerous other improvements, including

  • fixes made based on the Clang and Coverity static analyzers.

  • memory leak fixes using Valgrind

The release notes mention some bug-fixes, but are focused on new features and improvements to existing features log since ncurses 5.9 release.

While the intent of the release is to provide a new stable ABI, there are other development activities which are summarized below.

  • The original release plan, e.g., for "5.10" was to improve the MinGW port. Ultimately that was completed (wide-character support, mouse, etc), but was deferred to focus on termcap support and performance issues. Also, pinpointing the problems with Console2 took a while.

  • A review of termcap compatibility in 2011 led to several minor fixes in the library and improvements to utilities. To do this properly, a review of the various extent termcap implementations was needed.

    The termcap library checker (tctest) (not part of ncurses) was one result. A followup review of performance using ncurses-examples in 2014 led to additional improvements.

  • Output buffering provided a further, but worthwhile distraction. A bug report in 2012 regarding the use of signal handlers in ncurses) pointed out a problem with the use of unsafe functions for handling SIGTSTP. Other signals could be addressed with workarounds; repairing SIGTSTP required a different approach. The solution required changing internal behavior of the library: how it handles output buffering.

    Now ncurses buffers its own output, independently of the standard output. A few applications relied upon the library's direct reuse of the standard output buffering; however that is unspecified behavior and has never been a recommended practice. Identifying these applications as well as refining the change to permit low-level applications to work consistently took time.

  • Since the introduction of the experimental support for 256 colors early in 2005 (released in ncurses 5.5), there has been increased user interest. Almost all packagers continue providing the ncurses ABI 5 which cannot support 256 colors.

  • Symbol versioning, or the lack of it in ncurses, is the main reason why packagers would be reluctant to add a new ncurses ABI.

    This release provides the new ABI along with script-generated lists of versioned symbols which can be used for both ABI 5 and 6 (with distinct names to keep the two separate). This took time to development, as reported in Symbol versioning in ncurses.

Library improvements

Output buffering

X/Open curses provides more than one initialization function:

  • initscr (the simplest) accepts no parameters.
  • newterm accepts parameters for the stream input and output
  • setupterm (the low-level function) accepts a parameter for the file descriptor of the output.

They are documented in X/Open as if initscr calls newterm using stdout for output stream, and in turn newterm calls setupterm using fileno(stdout) for the file descriptor. As long as an implementation acts as if it does this, it conforms. In practice, implementations do what is implied. This creates a problem: the low-level setupterm function's file descriptor is unbuffered, while newterm implies buffered output. X/Open Curses says that all output is done through the file descriptor, and does not say how the output stream is actually used.

Initially, ncurses used the file descriptor (obtained from the output stream passed to newterm) for changing the terminal modes, and relied upon the output parameter of newterm for buffered output. Later (to avoid using unsafe buffered I/O in signal handlers), ncurses was modified to use the file descriptor (unbuffered output) when cleaning up on receipt of a signal. Otherwise (when not handling a signal), it continued to use the buffered output.

That approach worked reasonably well and as a side effect, using the same buffered output as an application might use for printf meant that no flushing was needed when switching between normal- and screen-modes.

There were a couple of problems:

  • to get good performance, curses (not only ncurses, but SVr4 curses in general) set an output buffer using setbuf or similar function. There is no standard (or portable) way to turn that output buffer off, and revert to line-buffering. The NCURSES_NO_SETBUF environment variable did make it optional.

  • to handle SIGTSTP (the “stop” signal), ncurses relied upon unsafe functions. That is, due to the complexity of the feature, it relied upon reusing existing functions which should not have been called via the signal handler.

Conveniently, solving the second problem (by making ncurses do its own output buffering) also fixed the first one. But there were special cases to resolve: low-level functions such as mvcur, putp, vidattr explicitly use the standard output. Those functions were reused internally, and required modification to distinguish whether they were used by the high-level or low-level interfaces.

Finally, there may still be a few programs which should be modified to improve their portability, e.g., adding an

fflush(stdout);

when switching from “shell” mode to “program” (curses) mode. Those are fairly rare because most programmers have learned not to mix printf and printw.

Symbol versioning

This release introduces symbol-versioning to ncurses because without it, the change of ABI would be less successful. A lengthy discussion will be presented in Symbol versioning in ncurses. These notes summarize what has changed, and what can be done with the new release.

Symbol-versioning allows the developers of a library to mark each public symbol (both data and functions) with an identifier denoting the library name and the version for which it was built. By doing this, users of the library have a way to help ensure that applications do not accidentally load an incompatible library. In addition, private symbols can be hidden entirely.

This release provides sample files for the four principal configurations of ncurses libraries: ncurses, ncursesw, ncursest and ncursestw. Each sample is given in two forms:

.map
These list all public symbols, together with version names.
.sym
These list all public symbols, without version names.

The sample files are generated by scripts which take into account a few special cases such as tack to omit many of the ncurses private symbols (beginning with “_nc_”). Here are counts of globals versus locals:

Config Symbols Globals Locals "_nc_"
ncurses 976 796 180 332
ncursesw 1089 905 184 343
ncursest 979 804 175 358
ncursestw 1098 914 184 372

Although only four sample configurations are presented, each is formed by merging symbols from several combinations of configure-script options, taking into account advice from downstream packagers. Because they are formed by merging, the sample files may list a symbol which is not in a given package. That is expected. The samples have been tested and are working with systems (such as Fedora, FreeBSD and Debian) which fully support this feature. There are other systems which do not support the feature, and a few (such as Solaris) which provide incomplete support.

The version-naming convention used allows these sample files to build distinct libraries for ABI 5 and 6. Version names consist of

  • configuration name, e.g., “NCURSESW” for the wide-character libraries

  • ABI version (if not 5)

  • library name for two special cases which have the same interface across configurations: “TINFO” and “TIC

  • release version

  • patch date (for the release version)

For example, running nm -D on the libraries in the ncurses6 test package shows these symbol-versions:

0000000000000000 A NCURSES6_TIC_5.0.19991023
0000000000000000 A NCURSES6_TIC_5.1.20000708
0000000000000000 A NCURSES6_TIC_5.5.20051010
0000000000000000 A NCURSES6_TIC_5.7.20081102
0000000000000000 A NCURSES6_TIC_5.9.20150530
0000000000000000 A NCURSES6_TINFO_5.0.19991023
0000000000000000 A NCURSES6_TINFO_5.1.20000708
0000000000000000 A NCURSES6_TINFO_5.2.20001021
0000000000000000 A NCURSES6_TINFO_5.3.20021019
0000000000000000 A NCURSES6_TINFO_5.4.20040208
0000000000000000 A NCURSES6_TINFO_5.5.20051010
0000000000000000 A NCURSES6_TINFO_5.6.20061217
0000000000000000 A NCURSES6_TINFO_5.7.20081102
0000000000000000 A NCURSES6_TINFO_5.8.20110226
0000000000000000 A NCURSES6_TINFO_5.9.20150530
0000000000000000 A NCURSESW6_5.1.20000708
0000000000000000 A NCURSESW6_5.3.20021019
0000000000000000 A NCURSESW6_5.4.20040208
0000000000000000 A NCURSESW6_5.5.20051010
0000000000000000 A NCURSESW6_5.6.20061217
0000000000000000 A NCURSESW6_5.7.20081102
0000000000000000 A NCURSESW6_5.8.20110226
0000000000000000 A NCURSESW6_5.9.20150530

As a special case, this release (which makes the final change for ABI 5) is marked with release version 5.9 and patch date 20150530.

Miscellaneous

The new release has several improvements for performance and building. For instance:

  • several files in ncurses- and progs-directories were modified to allow const data used in internal tables to be put by the linker into the readonly text segment.

  • various improvements were made to building the Ada95 binding, both in simplifying the generated files as well as improving the way it uses gnatmake

There are also new features in the libraries:

  • added use_tioctl function
  • added wgetdelay to retrieve _delay member of WINDOW if it happens to be opaque, e.g., in the pthread configuration.

  • added A_ITALIC extension.

  • added form library extension O_DYNAMIC_JUSTIFY option which can be used to override the different treatment of justification for static versus dynamic fields .

  • rewrote putwin and getwin, making an extended version which is capable of reading screen-dumps between the wide/normal ncurses configurations. These are text files, except for a magic code at the beginning:

    0       string          \210\210        Screen-dump (ncurses)
    
  • several changes to mouse support include:

    • added decoder for xterm SGR 1006 mouse mode.
    • added experimental support for “%u” format to terminfo.
    • improved behavior of wheel-mice for xterm protocol: noting that there are only button-presses for buttons “4” and “5”, so there is no need to wait to combine events into double-clicks .

There are a few new configure options dealing with library customization:

  • add “--enable-ext-putwin” configure option to turn on the extended putwin/getwin. By default, this is enabled for ABI 6 and disabled with ABI 5.

  • add “--enable-string-hacks” option to control whether strlcat and strlcpy may be used. Because ncurses already does the requisite buffer-limit checks, this feature is mainly of interest to quiet compiler-warnings on a few systems.

  • add configure option “--with-tparm-arg” to allow tparm's parameters to be something more likely to be the same size as a pointer, e.g., intptr_t (again, the default is set for ABI 6).

Program improvements

Utilities

Most of the termcap-related changes based on development of tctest (termcap library checker) are implemented in the tic and infocmp programs rather than affecting the library. As noted in the discussion of tctest, ncurses's ability to translate between terminfo and termcap formats has been improved at different times, but subject to feedback from "real" termcap users. There are very few of those. Nowadays, virtually all termcap users are using ncurses (or NetBSD, with its own terminfo library) and their programs are actually using terminfo rather than termcap data.

Still, there are a few. A comment about the translation of the ASCII NUL character prompted a review:

  • Both terminfo and termcap store string capabilities as NUL-terminated strings.

  • In terminfo, a \0 in a terminal description is stored as \200.

  • There are no (known) terminals which would behave differently when sent \0 or \200.

  • When translating to terminfo format (or displaying a printable version of an entry using infocmp), ncurses shows \200 as \0.

  • It has done this since 1998 (quoting from the NEWS file):

    980103
    ...
            + modify _nc_tic_expand() to generate \0 rather than \200.
    ...
            + correct translation of terminfo "^@", to \200, like \0.
    
  • However, the _nc_tic_expand function (which optionally produces terminfo or termcap format) did not address this special case for termcap. Even the later 4.4BSD cgetstr interprets a \0 literally, ending that string (rather than using the terminfo improvement).

As a result of the review, several improvements were made to ncurses translation to/from termcap format — and improving the checks made in tic for consistency of entries. Most of these are not of general interest, except for two new command-line options for tic and infocmp:

  • the “-0” option generates termcap/terminfo source on a single line.

  • the “-K” option provides stricter BSD-compatibility for termcap output.

Other user-visible improvements and new features include:

  • added “-D” option to tic and infocmp, to show the database locations that it could use.

  • added “-s” option to toe, to sort its output.

  • extended “-c” and “-n” options of infocmp to allow comparing more than two entries.

  • modified toe's report when “-a” and “-s” options are combined, to add a column showing which entries belong to a given database.

  • modified the clear program to take into account the “E3” extended capability to clear the terminal's scrollback buffer.

Examples

Along with the library and utilities, many improvements were made to the ncurses-examples. Some were made to allow building (and comparison-testing) against NetBSD curses and PDCurses. Both lack some of the X/Open Curses features, necessitating customization. But this activity was useful because it showed some remaining performance issues (which have been resolved in this release).

These changes were made to verify compatibility or compare performance of ncurses:

  • made workarounds for compiling test-programs with NetBSD curses, though it lacks some common functions such as use_env.

  • added dots_termcap test-program

  • added dots_curses test-program, for comparison with the low-level examples.

  • added test_setupterm test-proram to demonstrate normal/error returns from the setupterm and restartterm functions.

  • added “-d”, “-e” and “-q” options to the demo_terminfo and demo_termcap test-programs.

  • added “-y” option to demo_termcap and test/demo_terminfo test-programs to demonstrate behavior with/without extended capabilities.

  • modified demo_termcap and demo_terminfo test-programs to make their options more directly comparable, and add “-i” option to specify a terminal description filename to parse for names to lookup.

  • rewrote the tests for mvderwin and test for recursive mvwin in the movewindow test-program.

These changes were made to help with the MinGW port:

  • added test-screens to the ncurses test-program to show 256-characters at a time, to help with MinGW port.

  • modified the view test-program to load UTF-8 when built with MinGW by using regular win32 API because the MinGW functions mblen and mbtowc do not work.

  • added “-s” option to the view test-program to allow it to start in single-step mode, reducing size of trace files when it is used for debugging MinGW changes.

These changes were made to verify new extensions in ncurses:

  • added form_driver_w entrypoint to wide-character forms library, as well as form_driver_w test-program.

  • modified ncurses test-program's b/B tests to display lines only for the attributes which a given terminal supports, to make room for an italics test.

  • modified ncurses test-program, adding “-E” and “-T” options to demonstrate use_env versus use_tioctl.

  • modified ncurses test-program's c/C tests to cycle through subsets of the total number of colors, to better illustrate 8/16/88/256-colors by providing directly comparable screens.

  • modified the ncurses test-program to also show position reports in 'a' test.

These changes were made to make the examples more useful:

  • added scripts for building dpkg and rpm test-packages

  • modified the hanoi test-program to show the minimum number of moves possible for the given number of tiles.

  • modified the knight test-program to show the number of choices possible for each position in automove option, e.g., to allow user to follow Warnsdorff's rule to solve the puzzle.

Terminal database

This release provides improvements to tic's “-c” checking option, which was used for example to

  • make sgr in several entries agree with other caps.

  • correct padding in some entries where earlier versions had miscounted the number of octal digits.

There are several new terminal descriptions:

A few entries use extensions (user-defined terminal capabilities):

  • E3, used in linux, putty and xterm-basic is tested in the clear program to erase a terminal's scrollback.

  • TS is used in the xterm+sl building block to help deprecate the misuse of tsl for xterm's title-string.

  • XT is used in some terminfo entries to improve usefulness for other applications than screen, which would like to pretend that xterm's title is a status-line.

  • xm is used in examples xterm-1005 and xterm-1006 to illustrate a way to make mouse handling more general

A few terminals support italics and/or dim capabilities. In particular, screen does not. Documented that, and accommodated the terminals where this feature works with the A_ITALIC extension.

  • konsole, mlterm3 (italics)
  • nsterm (dim)
  • screen (dim)
  • vte (dim, italics)
  • xterm (dim, italics)

Documentation

As usual, this release

  • improves documentation by describing new features,

  • attempts to improve the description of features which users have found confusing

  • fills in overlooked descriptions of features which were described in the NEWS file but treated sketchily in manual pages.

In addition, the mechanism for producing HTML versions of the documentation has been improved:

Interesting bug-fixes

  • Ada95 binding:

    • modify makefile rules to ensure that the PIC option is not used when building a static library

    • make Ada95 build-fix for big-endian architectures such as sparc. This undoes one of the fixes from 20110319, which added an “Unused” member to representation clauses, replacing that with pragmas to suppress warnings about unused bits.

  • Color and attributes:

    • parenthesize parameter of COLOR_PAIR and PAIR_NUMBER in curses.h in case it happens to be a comma-expression.

    • improve 20021221 workaround for broken acs, handling a case where that ACS_xxx character is not in the acsc string but there is a known wide-character which can be used.

    • modify init_pair to accept -1's for color value after assume_default_colors has been called.

    • add a check in start_color to limit color-pairs to 256 when extended colors are not supported.

  • Resizing the screen:

    • propagate error-returns from wresize, i.e., the internal increase_size and decrease_size functions through resize_term.

    • add check for zero/negative dimensions for resizeterm and resize_term.

    • modify resizeterm to always push a KEY_RESIZE onto the fifo, even if screensize is unchanged. Modify library to push a KEY_RESIZE if there was a SIGWINCH, even if it does not call resizeterm). These changes eliminate the case where a SIGWINCH is received, but ERR is returned from wgetch or wgetnstr because the screen dimensions did not change.

  • Low-level interfaces

    • fix an old bug in the termcap emulation; “%i” was ignored in tparm because the parameters to be incremented were already on the internal stack.

    • change “%l” behavior in tparm to push the string length onto the stack rather than saving the formatted length into the output buffer.

    • modify name-comparison for tgetstr, etc., to accommodate legacy applications as well as to improve compatbility with BSD 4.2 termcap implementations (see note for 980725).

  • High-level interfaces
    • modify internal recursion in wgetch which handles cooked mode to check if the call to wgetnstr returned an error. This can happen when both nocbreak and nodelay are set, for instance (see note for 960418).

    • add a check in internal function waddch_nosync to ensure that tab characters are treated as control characters; some broken locales claim they are printable.

    • modify menu library to ensure that a menu's top-row is adjusted as needed to ensure that the current item is on the screen

    • fix special case where double-width character overwrites a single- width character in the first column.

Configuration changes

Major changes

The ncurses 6.0 configure script makes changes to the default value of several configure options, depending on the --with-abi-version option (i.e., whether its value is “5” or “6”):

--enable-const

Feature introduced in 970405 supports the use of const where X/Open Curses should have, but did not. NetBSD curses does something similar with const.

--enable-ext-colors

Extends the cchar_t structure to allow more than 16 colors to be encoded. This applies only to the wide-character (--enable-widec) configuration.

--enable-ext-mouse

Modifies the encoding of mouse state to make room for a 5th mouse button. That allows one to use ncurses with a wheel mouse with xterm or similar X terminal emulators.

--enable-ext-putwin

Modifies the file-format written by putwin to use printable text rather than binary files, allowing getwin to read screen dumps written by differently-configured ncurses libraries. The extended getwin can still read binary screen dumps from the same configuration of ncurses. This does not change the ABI (the binary interface seen by calling applications).

--enable-interop

Modifies the FIELDTYPE structure used for the form library to make it more generic.

--enable-lp64

Allows an application to define _LP64 to declare chtype and mmask_t as simply “unsigned” rather than the configured types using the --with-chtype and --with-mmask_t options.

--enable-sp-funcs

Compile-in support for extended functions which accept a SCREEN pointer, reducing the need for juggling the global SP value with set_term and delscreen.

--with-chtype=uint32_t

Makes chtype explicitly a 32-bit unsigned value.

--with-mmask_t=uint32_t

Makes mmask_t explicitly a 32-bit unsigned value.

--with-tparm-arg=intptr_t

X/Open Curses declares tparm using long for each of the parameters aside from the formatting string, presuming that long and char* are the same size. This configure option uses intptr_t which provides a better guarantee of the sizes.

The configure script no longer checks for antique compilers; c89 is assumed as a minimum. There are a few features from later revisions which are used when available. The configure script makes checks to turn on useful warnings from clang, gcc and icc. You should be able to build ncurses 6.0 with any of the current (or not so current) C compilers available in 2015.

The configure script, by the way, makes changes which do not work with systems whose /bin/sh is non-POSIX. This mainly affects Solaris (the other vendor unix systems have followed the POSIX guidelines for the past twenty years). If you must build on Solaris, its xpg4 binaries suffice, e.g.,

#!/bin/sh
WHAT=`hostname|sed -e 's/\..*//'`
OUT=configure.out
cat >>$OUT <<EOF/
** 
`date`
** node: 
$WHAT
** user: 
`id`
** conf: $*
EOF/

 
SHELL=/bin/sh
if test -f /usr/xpg4/bin/sh
then
        CONFIG_SHELL=/usr/xpg4/bin/sh
        export CONFIG_SHELL
        SHELL=$CONFIG_SHELL
fi
 
rm -f config.status config.cache
TOP=$HOME/$WHAT
$SHELL ./configure --verbose \
        --disable-echo \
        --disable-overwrite \
        --enable-warnings \
        --with-warnings \
        --prefix=$TOP $* 2>&1 | tee -a $OUT

Other major changes to the configure script include:

  • ABI 6 is now the default, intending that the existing ABI 5 should build as before using the “--with-abi-version=5” option.

  • added --with-extra-suffix option to help with installing nonconflicting ncurses6 packages, e.g., avoiding header- and library-conflicts.

    NOTE: as a side-effect, this renames

    adacurses-config to adacurses5-config and
    adacursesw-config to adacursesw5-config

  • the configure script looks for gnatgcc if the Ada95 binding is built, in preference to the default gcc/cc. The script also ensures that the Ada95 binding is built with the level of optimization as the C libraries.

  • the configure script captures define's related to -D_XOPEN_SOURCE from the configure check and adds those to the *-config and *.pc files, to simplify use for the wide-character libraries.

Configuration options

There are several new (or extended) configure options:

--disable-db-install

Do not install the terminal database. This is used to omit features for packages, as done with --without-progs. The option simplifies building cross-compile support packages.

--disable-gnat-projects

This option is used for regression testing

--disable-lib-suffixes

Suppress the “w”, “t” or “tw” suffixes which normally would be added to the library names for the --enable-widec and --with-pthread options.

--with-cxx-shared

When --with-shared is set, build libncurses++ as a shared library. This implicitly relies upon building with gcc/g++, since other compiler suites may have differences in the way shared libraries are built. libtool by the way has similar limitations.

--with-hashed-db

Extended this configure option to simplify building with different versions of Berkeley database using FreeBSD ports.

--with-pc-suffix

If ".pc" files are installed, optionally add a suffix to the files and corresponding package names to separate unusual configurations. If no option value is given (or if it is "none"), no suffix is added. This option is used in the test package for ncurses6.

--with-xterm-kbs

Configure xterm's terminfo entries to use either BS (^H, i.e., ASCII backspace) or DEL (^?, or 127).

Portability

MinGW

Most of the portability-related work since ncurses 5.9 extended and improved the MinGW port introduced in ncurses 5.8.

The MinGW port can be readily cross-compiled:

  • modified configure script to allow creating dll's for MinGW when cross-compiling.

  • enforced Windows-style path-separator if cross-compiling,

  • added scripts for test-builds of cross-compiled packages for ncurses6 to MinGW.

  • added pc-files to the MinGW cross-compiling test-packages.

  • added script for building test-packages of binaries cross-compiled to MinGW using NSIS.

  • added nc_mingw.h to installed headers for MinGW port; this is needed for cross-compiling ncurses-examples.

  • added test-packages for cross-compiling ncurses-examples using the MinGW test-packages.

The MinGW-specific Windows driver accounts for several changes:

  • wide-character display is made usable by replacing MinGW's non-working wcrtomb and wctomb functions.

  • implemented some display features: beep, flash, curs_set.

  • the driver handles repainting on endwin/refresh combination.

  • modified treatment of TERM variable for MinGW port to allow explicit use of the Windows console driver by checking if $TERM is set to “#win32console” or an abbreviation of that.

  • the Windows driver also matches the special TERM value “unknown”

  • the driver now returns characters for special keys, (like ansi.sys does), when keypad mode is off, rather than returning nothing at all.

  • the driver checks a new environment variable NCURSES_CONSOLE2 to optionally work around a deficiency in Console2 (and its descendent ConsoleZ) which hang when an application creates a console buffer.

Finally, there are other improvements:

  • MinGW is one of the configurations where ncurses installs by default into /usr

  • configuration for cross-compiling uses AC_CHECK_TOOLS in preference to AC_PATH_PROGS when searching for ncurses*-config, e.g., in Ada95/configure and test/configure.
  • extend Windows support to work with MSYS2;

    • this works with a scenario where there is an ANSI-escape handler such as ansicon running in the console window.

    • wrap isatty calls with a macro, provide a corresponding set of support routines to address differences between MinGW and MSYS2.
  • ensure WINVER is defined in makefiles rather than using headers.

  • add check for the gnatprep-T” option.

  • work around a bug introduced by gcc 4.8.1 in MinGW which breaks "trace" feature.

  • add a driver-name method to each of the drivers.

Other ports

These changes affect certain platforms (ports):

  • the configure script knows how to build shared libraries with DragonFlyBSD and Interix.

  • support for AIX shared libraries is improved, tested with AIX 5.3, 6.1 and 7.1 with both gcc 4.2.4 and cc:

    • the shared-library suffix for AIX 5 and 6 is now ".so"

    • the -brtl option is used with AIX 5-7; it is needed to link with the shared libraries.

  • the configure --enable-pc-files option takes into account the PKG_CONFIG_PATH variable.

  • the configure option --with-pkg-config-libdir provides control over the actual directory into which pc-files are installed.

  • the build scripts add explicit -ltinfo, etc., to the generated ".pc" file when ld option “--as-needed” is used, or when ncurses and tinfo are installed without using rpath.

  • the configure script disallows conflicting options “--with-termlib” and “--enable-term-driver”.

  • the check for missing c++ compiler to work when no error is reported, and no variables set is improved (see note for 20021206).

  • the misc/gen_edit.sh script selects a "linux" entry which works with the current kernel rather than assuming it is always "linux3.0"

  • the test/configure script makes it simpler to override names of curses-related libraries, to help with linking with pdcurses in MinGW environment.

  • the configure-script/ifdef's allow the BSD OLD_TTY feature to be suppressed if the type of ospeed is configured using the option --with-ospeed to not be a short. By default, it is a short for termcap-compatibility.

  • the MKlib_gen.sh script works around a recent change in gcc 5 (released mid-2015) which essentially emits multiple #line statements for the same position in a file.

  • the configure script works with Minix3.2 (see note on portability)

  • OS/2 redux:

    • the configure script supports OS/2 kLIBC.

    • the --with-lib-prefix option allows configuring for old/new flavors of OS/2 EMX.

  • improved configure-script checks for _XOPEN_SOURCE:

    • the definition works starting with Solaris 10.

    • the definition is suppressed for IRIX64, since its header files have a conflict versus _SGI_SOURCE.


Features of ncurses

The ncurses package is fully upward-compatible with SVr4 (System V Release 4) curses:

  • All of the SVr4 calls have been implemented (and are documented).

  • ncurses supports all of the for SVr4 curses features including keyboard mapping, color, forms-drawing with ACS characters, and automatic recognition of keypad and function keys.

  • ncurses provides these SVr4 add-on libraries (not part of X/Open Curses):

    • the panels library, supporting a stack of windows with backing store.

    • the menus library, supporting a uniform but flexible interface for menu programming.

    • the form library, supporting data collection through on-screen forms.

  • ncurses's terminal database is fully compatible with that used by SVr4 curses.

    • ncurses supports user-defined capabilities which it can see, but which are hidden from SVr4 curses applications using the same terminal database.
    • It can be optionally configured to match the format used in related systems such as AIX and Tru64.

    • Alternatively, ncurses can be configured to use hashed databases rather than the directory of files used by SVr4 curses.

  • The ncurses utilities have options to allow you to filter terminfo entries for use with less capable curses/terminfo versions such as the HP/UX and AIX ports.

The ncurses package also has many useful extensions over SVr4:

  • The API is 8-bit clean and base-level conformant with the X/OPEN curses specification, XSI curses (that is, it implements all BASE level features, and most EXTENDED features). It includes many function calls not supported under SVr4 curses (but portability of all calls is documented so you can use the SVr4 subset only).

  • Unlike SVr3 curses, ncurses can write to the rightmost-bottommost corner of the screen if your terminal has an insert-character capability.

  • Ada95 and C++ bindings.

  • Support for mouse event reporting with X Window xterm and FreeBSD and OS/2 console windows.

  • Extended mouse support via Alessandro Rubini's gpm package.

  • The function wresize allows you to resize windows, preserving their data.

  • The function use_default_colors allows you to use the terminal's default colors for the default color pair, achieving the effect of transparent colors.

  • The functions keyok and define_key allow you to better control the use of function keys, e.g., disabling the ncurses KEY_MOUSE, or by defining more than one control sequence to map to a given key code.

  • Support for 256-color terminals, such as modern xterm.

  • Support for 16-color terminals, such as aixterm and modern xterm.

  • Better cursor-movement optimization. The package now features a cursor-local-movement computation more efficient than either BSD's or System V's.

  • Super hardware scrolling support. The screen-update code incorporates a novel, simple, and cheap algorithm that enables it to make optimal use of hardware scrolling, line-insertion, and line-deletion for screen-line movements. This algorithm is more powerful than the 4.4BSD curses quickch routine.

  • Real support for terminals with the magic-cookie glitch. The screen-update code will refrain from drawing a highlight if the magic- cookie unattributed spaces required just before the beginning and after the end would step on a non-space character. It will automatically shift highlight boundaries when doing so would make it possible to draw the highlight without changing the visual appearance of the screen.

  • It is possible to generate the library with a list of pre-loaded fallback entries linked to it so that it can serve those terminal types even when no terminfo tree or termcap file is accessible (this may be useful for support of screen-oriented programs that must run in single-user mode).

  • The tic/captoinfo utility provided with ncurses has the ability to translate many termcaps from the XENIX, IBM and AT&T extension sets.

  • A BSD-like tset utility is provided.

  • The ncurses library and utilities will automatically read terminfo entries from $HOME/.terminfo if it exists, and compile to that directory if it exists and the user has no write access to the system directory. This feature makes it easier for users to have personal terminfo entries without giving up access to the system terminfo directory.

  • You may specify a path of directories to search for compiled descriptions with the environment variable TERMINFO_DIRS (this generalizes the feature provided by TERMINFO under stock System V.)

  • In terminfo source files, use capabilities may refer not just to other entries in the same source file (as in System V) but also to compiled entries in either the system terminfo directory or the user's $HOME/.terminfo directory.

  • The table-of-entries utility toe makes it easy for users to see exactly what terminal types are available on the system.

  • The library meets the XSI requirement that every macro entry point have a corresponding function which may be linked (and will be prototype-checked) if the macro definition is disabled with #undef.

  • Extensive documentation is provided (see the Additional Reading section of the ncurses FAQ for online documentation).

Applications using ncurses

The ncurses distribution includes a selection of test programs (including a few games). These are available separately as ncurses-examples

The ncurses library has been tested with a wide variety of applications including:

cdk

Curses Development Kit

http://invisible-island.net/cdk/

ded

directory-editor

http://invisible-island.net/ded/

dialog

the underlying application used in Slackware's setup, and the basis for similar install/configure applications on many systems.

http://invisible-island.net/dialog/

lynx

the text WWW browser

http://lynx.isc.org/

Midnight Commander

file manager

http://www.midnight-commander.org/

mutt

mail utility

http://www.mutt.org/

ncftp

file-transfer utility

http://www.ncftp.com/

nvi

New vi uses ncurses.

https://sites.google.com/a/bostic.com/keithbostic/nvi

tin

newsreader, supporting color, MIME

http://www.tin.org/

as well as some that use ncurses for the terminfo support alone:

minicom

terminal emulator for serial modem connections

http://alioth.debian.org/projects/minicom/

mosh

a replacement for ssh.

https://mosh.mit.edu/

tack

terminfo action checker

http://invisible-island.net/ncurses/tack.html

tmux

terminal multiplexor

http://tmux.github.io/

vile

vi-like-emacs may be built to use the terminfo, termcap or curses interfaces.

http://invisible-island.net/vile/

and finally, those which use only the termcap interface:

emacs

text editor

http://www.gnu.org/software/emacs/

screen

terminal multiplexor

http://www.gnu.org/software/screen/

vim

text editor

http://www.vim.org/

Development activities

Zeyd Ben-Halim started ncurses from a previous package pcurses, written by Pavel Curtis. Eric S. Raymond continued development. Jürgen Pfeifer wrote most of the form and menu libraries. Ongoing development work is done by Thomas Dickey. Thomas Dickey also acts as the maintainer for the Free Software Foundation, which holds the copyright on ncurses.

Contact the current maintainers at

bug-ncurses@gnu.org

To join the ncurses mailing list, please write email to

bug-ncurses-request@gnu.org
containing the line:

subscribe <name>@<host.domain>

This list is open to anyone interested in helping with the development and testing of this package.

Beta versions of ncurses and patches to the current release are made available at

ftp://invisible-island.net/ncurses/ .

There is an archive of the mailing list here:

http://lists.gnu.org/archive/html/bug-ncurses (also https)

Related resources

The release notes make scattered references to these pages, which may be interesting by themselves:

Other resources

The distribution provides a newer version of the terminfo-format terminal description file once maintained by Eric Raymond . Unlike the older version, the termcap and terminfo data are provided in the same file, and provides several user-definable extensions beyond the X/Open specification.

You can find lots of information on terminal-related topics not covered in the terminfo file at Richard Shuford's archive .

ncurses-6.0-20160213/doc/0000755000175100001440000000000012653207013013220 5ustar tomusersncurses-6.0-20160213/doc/ncurses-intro.doc0000644000175100001440000033461712552040213016533 0ustar tomusers Writing Programs with NCURSES by Eric S. Raymond and Zeyd M. Ben-Halim updates since release 1.9.9e by Thomas Dickey Contents * Introduction + A Brief History of Curses + Scope of This Document + Terminology * The Curses Library + An Overview of Curses o Compiling Programs using Curses o Updating the Screen o Standard Windows and Function Naming Conventions o Variables + Using the Library o Starting up o Output o Input o Using Forms Characters o Character Attributes and Color o Mouse Interfacing o Finishing Up + Function Descriptions o Initialization and Wrapup o Causing Output to the Terminal o Low-Level Capability Access o Debugging + Hints, Tips, and Tricks o Some Notes of Caution o Temporarily Leaving ncurses Mode o Using ncurses under xterm o Handling Multiple Terminal Screens o Testing for Terminal Capabilities o Tuning for Speed o Special Features of ncurses + Compatibility with Older Versions o Refresh of Overlapping Windows o Background Erase + XSI Curses Conformance * The Panels Library + Compiling With the Panels Library + Overview of Panels + Panels, Input, and the Standard Screen + Hiding Panels + Miscellaneous Other Facilities * The Menu Library + Compiling with the menu Library + Overview of Menus + Selecting items + Menu Display + Menu Windows + Processing Menu Input + Miscellaneous Other Features * The Forms Library + Compiling with the forms Library + Overview of Forms + Creating and Freeing Fields and Forms + Fetching and Changing Field Attributes o Fetching Size and Location Data o Changing the Field Location o The Justification Attribute o Field Display Attributes o Field Option Bits o Field Status o Field User Pointer + Variable-Sized Fields + Field Validation o TYPE_ALPHA o TYPE_ALNUM o TYPE_ENUM o TYPE_INTEGER o TYPE_NUMERIC o TYPE_REGEXP + Direct Field Buffer Manipulation + Attributes of Forms + Control of Form Display + Input Processing in the Forms Driver o Page Navigation Requests o Inter-Field Navigation Requests o Intra-Field Navigation Requests o Scrolling Requests o Field Editing Requests o Order Requests o Application Commands + Field Change Hooks + Field Change Commands + Form Options + Custom Validation Types o Union Types o New Field Types o Validation Function Arguments o Order Functions For Custom Types o Avoiding Problems _________________________________________________________________ Introduction This document is an introduction to programming with curses. It is not an exhaustive reference for the curses Application Programming Interface (API); that role is filled by the curses manual pages. Rather, it is intended to help C programmers ease into using the package. This document is aimed at C applications programmers not yet specifically familiar with ncurses. If you are already an experienced curses programmer, you should nevertheless read the sections on Mouse Interfacing, Debugging, Compatibility with Older Versions, and Hints, Tips, and Tricks. These will bring you up to speed on the special features and quirks of the ncurses implementation. If you are not so experienced, keep reading. The curses package is a subroutine library for terminal-independent screen-painting and input-event handling which presents a high level screen model to the programmer, hiding differences between terminal types and doing automatic optimization of output to change one screen full of text into another. Curses uses terminfo, which is a database format that can describe the capabilities of thousands of different terminals. The curses API may seem something of an archaism on UNIX desktops increasingly dominated by X, Motif, and Tcl/Tk. Nevertheless, UNIX still supports tty lines and X supports xterm(1); the curses API has the advantage of (a) back-portability to character-cell terminals, and (b) simplicity. For an application that does not require bit-mapped graphics and multiple fonts, an interface implementation using curses will typically be a great deal simpler and less expensive than one using an X toolkit. A Brief History of Curses Historically, the first ancestor of curses was the routines written to provide screen-handling for the game rogue; these used the already-existing termcap database facility for describing terminal capabilities. These routines were abstracted into a documented library and first released with the early BSD UNIX versions. System III UNIX from Bell Labs featured a rewritten and much-improved curses library. It introduced the terminfo format. Terminfo is based on Berkeley's termcap database, but contains a number of improvements and extensions. Parameterized capabilities strings were introduced, making it possible to describe multiple video attributes, and colors and to handle far more unusual terminals than possible with termcap. In the later AT&T System V releases, curses evolved to use more facilities and offer more capabilities, going far beyond BSD curses in power and flexibility. Scope of This Document This document describes ncurses, a free implementation of the System V curses API with some clearly marked extensions. It includes the following System V curses features: * Support for multiple screen highlights (BSD curses could only handle one `standout' highlight, usually reverse-video). * Support for line- and box-drawing using forms characters. * Recognition of function keys on input. * Color support. * Support for pads (windows of larger than screen size on which the screen or a subwindow defines a viewport). Also, this package makes use of the insert and delete line and character features of terminals so equipped, and determines how to optimally use these features with no help from the programmer. It allows arbitrary combinations of video attributes to be displayed, even on terminals that leave ``magic cookies'' on the screen to mark changes in attributes. The ncurses package can also capture and use event reports from a mouse in some environments (notably, xterm under the X window system). This document includes tips for using the mouse. The ncurses package was originated by Pavel Curtis. The original maintainer of this package is Zeyd Ben-Halim . Eric S. Raymond wrote many of the new features in versions after 1.8.1 and wrote most of this introduction. Juergen Pfeifer wrote all of the menu and forms code as well as the Ada95 binding. Ongoing work is being done by Thomas Dickey (maintainer). Contact the current maintainers at bug-ncurses@gnu.org. This document also describes the panels extension library, similarly modeled on the SVr4 panels facility. This library allows you to associate backing store with each of a stack or deck of overlapping windows, and provides operations for moving windows around in the stack that change their visibility in the natural way (handling window overlaps). Finally, this document describes in detail the menus and forms extension libraries, also cloned from System V, which support easy construction and sequences of menus and fill-in forms. Terminology In this document, the following terminology is used with reasonable consistency: window A data structure describing a sub-rectangle of the screen (possibly the entire screen). You can write to a window as though it were a miniature screen, scrolling independently of other windows on the physical screen. screens A subset of windows which are as large as the terminal screen, i.e., they start at the upper left hand corner and encompass the lower right hand corner. One of these, stdscr, is automatically provided for the programmer. terminal screen The package's idea of what the terminal display currently looks like, i.e., what the user sees now. This is a special screen. The Curses Library An Overview of Curses Compiling Programs using Curses In order to use the library, it is necessary to have certain types and variables defined. Therefore, the programmer must have a line: #include at the top of the program source. The screen package uses the Standard I/O library, so includes . also includes , , or depending on your system. It is redundant (but harmless) for the programmer to do these includes, too. In linking with curses you need to have -lncurses in your LDFLAGS or on the command line. There is no need for any other libraries. Updating the Screen In order to update the screen optimally, it is necessary for the routines to know what the screen currently looks like and what the programmer wants it to look like next. For this purpose, a data type (structure) named WINDOW is defined which describes a window image to the routines, including its starting position on the screen (the (y, x) coordinates of the upper left hand corner) and its size. One of these (called curscr, for current screen) is a screen image of what the terminal currently looks like. Another screen (called stdscr, for standard screen) is provided by default to make changes on. A window is a purely internal representation. It is used to build and store a potential image of a portion of the terminal. It doesn't bear any necessary relation to what is really on the terminal screen; it's more like a scratchpad or write buffer. To make the section of physical screen corresponding to a window reflect the contents of the window structure, the routine refresh() (or wrefresh() if the window is not stdscr) is called. A given physical screen section may be within the scope of any number of overlapping windows. Also, changes can be made to windows in any order, without regard to motion efficiency. Then, at will, the programmer can effectively say ``make it look like this,'' and let the package implementation determine the most efficient way to repaint the screen. Standard Windows and Function Naming Conventions As hinted above, the routines can use several windows, but two are automatically given: curscr, which knows what the terminal looks like, and stdscr, which is what the programmer wants the terminal to look like next. The user should never actually access curscr directly. Changes should be made to through the API, and then the routine refresh() (or wrefresh()) called. Many functions are defined to use stdscr as a default screen. For example, to add a character to stdscr, one calls addch() with the desired character as argument. To write to a different window. use the routine waddch() (for `w'indow-specific addch()) is provided. This convention of prepending function names with a `w' when they are to be applied to specific windows is consistent. The only routines which do not follow it are those for which a window must always be specified. In order to move the current (y, x) coordinates from one point to another, the routines move() and wmove() are provided. However, it is often desirable to first move and then perform some I/O operation. In order to avoid clumsiness, most I/O routines can be preceded by the prefix 'mv' and the desired (y, x) coordinates prepended to the arguments to the function. For example, the calls move(y, x); addch(ch); can be replaced by mvaddch(y, x, ch); and wmove(win, y, x); waddch(win, ch); can be replaced by mvwaddch(win, y, x, ch); Note that the window description pointer (win) comes before the added (y, x) coordinates. If a function requires a window pointer, it is always the first parameter passed. Variables The curses library sets some variables describing the terminal capabilities. type name description ------------------------------------------------------------------ int LINES number of lines on the terminal int COLS number of columns on the terminal The curses.h also introduces some #define constants and types of general usefulness: bool boolean type, actually a `char' (e.g., bool doneit;) TRUE boolean `true' flag (1). FALSE boolean `false' flag (0). ERR error flag returned by routines on a failure (-1). OK error flag returned by routines when things go right. Using the Library Now we describe how to actually use the screen package. In it, we assume all updating, reading, etc. is applied to stdscr. These instructions will work on any window, providing you change the function names and parameters as mentioned above. Here is a sample program to motivate the discussion: #include #include #include static void finish(int sig); int main(int argc, char *argv[]) { int num = 0; /* initialize your non-curses data structures here */ (void) signal(SIGINT, finish); /* arrange interrupts to terminate */ (void) initscr(); /* initialize the curses library */ keypad(stdscr, TRUE); /* enable keyboard mapping */ (void) nonl(); /* tell curses not to do NL->CR/NL on output */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) echo(); /* echo input - in color */ if (has_colors()) { start_color(); /* * Simple color assignment, often all we need. Color pair 0 cannot * be redefined. This example uses the same value for the color * pair as for the foreground color, though of course that is not * necessary: */ init_pair(1, COLOR_RED, COLOR_BLACK); init_pair(2, COLOR_GREEN, COLOR_BLACK); init_pair(3, COLOR_YELLOW, COLOR_BLACK); init_pair(4, COLOR_BLUE, COLOR_BLACK); init_pair(5, COLOR_CYAN, COLOR_BLACK); init_pair(6, COLOR_MAGENTA, COLOR_BLACK); init_pair(7, COLOR_WHITE, COLOR_BLACK); } for (;;) { int c = getch(); /* refresh, accept single keystroke of input */ attrset(COLOR_PAIR(num % 8)); num++; /* process the command keystroke */ } finish(0); /* we're done */ } static void finish(int sig) { endwin(); /* do your non-curses wrapup here */ exit(0); } Starting up In order to use the screen package, the routines must know about terminal characteristics, and the space for curscr and stdscr must be allocated. These function initscr() does both these things. Since it must allocate space for the windows, it can overflow memory when attempting to do so. On the rare occasions this happens, initscr() will terminate the program with an error message. initscr() must always be called before any of the routines which affect windows are used. If it is not, the program will core dump as soon as either curscr or stdscr are referenced. However, it is usually best to wait to call it until after you are sure you will need it, like after checking for startup errors. Terminal status changing routines like nl() and cbreak() should be called after initscr(). Once the screen windows have been allocated, you can set them up for your program. If you want to, say, allow a screen to scroll, use scrollok(). If you want the cursor to be left in place after the last change, use leaveok(). If this isn't done, refresh() will move the cursor to the window's current (y, x) coordinates after updating it. You can create new windows of your own using the functions newwin(), derwin(), and subwin(). The routine delwin() will allow you to get rid of old windows. All the options described above can be applied to any window. Output Now that we have set things up, we will want to actually update the terminal. The basic functions used to change what will go on a window are addch() and move(). addch() adds a character at the current (y, x) coordinates. move() changes the current (y, x) coordinates to whatever you want them to be. It returns ERR if you try to move off the window. As mentioned above, you can combine the two into mvaddch() to do both things at once. The other output functions, such as addstr() and printw(), all call addch() to add characters to the window. After you have put on the window what you want there, when you want the portion of the terminal covered by the window to be made to look like it, you must call refresh(). In order to optimize finding changes, refresh() assumes that any part of the window not changed since the last refresh() of that window has not been changed on the terminal, i.e., that you have not refreshed a portion of the terminal with an overlapping window. If this is not the case, the routine touchwin() is provided to make it look like the entire window has been changed, thus making refresh() check the whole subsection of the terminal for changes. If you call wrefresh() with curscr as its argument, it will make the screen look like curscr thinks it looks like. This is useful for implementing a command which would redraw the screen in case it get messed up. Input The complementary function to addch() is getch() which, if echo is set, will call addch() to echo the character. Since the screen package needs to know what is on the terminal at all times, if characters are to be echoed, the tty must be in raw or cbreak mode. Since initially the terminal has echoing enabled and is in ordinary ``cooked'' mode, one or the other has to changed before calling getch(); otherwise, the program's output will be unpredictable. When you need to accept line-oriented input in a window, the functions wgetstr() and friends are available. There is even a wscanw() function that can do scanf()(3)-style multi-field parsing on window input. These pseudo-line-oriented functions turn on echoing while they execute. The example code above uses the call keypad(stdscr, TRUE) to enable support for function-key mapping. With this feature, the getch() code watches the input stream for character sequences that correspond to arrow and function keys. These sequences are returned as pseudo-character values. The #define values returned are listed in the curses.h The mapping from sequences to #define values is determined by key_ capabilities in the terminal's terminfo entry. Using Forms Characters The addch() function (and some others, including box() and border()) can accept some pseudo-character arguments which are specially defined by ncurses. These are #define values set up in the curses.h header; see there for a complete list (look for the prefix ACS_). The most useful of the ACS defines are the forms-drawing characters. You can use these to draw boxes and simple graphs on the screen. If the terminal does not have such characters, curses.h will map them to a recognizable (though ugly) set of ASCII defaults. Character Attributes and Color The ncurses package supports screen highlights including standout, reverse-video, underline, and blink. It also supports color, which is treated as another kind of highlight. Highlights are encoded, internally, as high bits of the pseudo-character type (chtype) that curses.h uses to represent the contents of a screen cell. See the curses.h header file for a complete list of highlight mask values (look for the prefix A_). There are two ways to make highlights. One is to logical-or the value of the highlights you want into the character argument of an addch() call, or any other output call that takes a chtype argument. The other is to set the current-highlight value. This is logical-or'ed with any highlight you specify the first way. You do this with the functions attron(), attroff(), and attrset(); see the manual pages for details. Color is a special kind of highlight. The package actually thinks in terms of color pairs, combinations of foreground and background colors. The sample code above sets up eight color pairs, all of the guaranteed-available colors on black. Note that each color pair is, in effect, given the name of its foreground color. Any other range of eight non-conflicting values could have been used as the first arguments of the init_pair() values. Once you've done an init_pair() that creates color-pair N, you can use COLOR_PAIR(N) as a highlight that invokes that particular color combination. Note that COLOR_PAIR(N), for constant N, is itself a compile-time constant and can be used in initializers. Mouse Interfacing The ncurses library also provides a mouse interface. NOTE: this facility is specific to ncurses, it is not part of either the XSI Curses standard, nor of System V Release 4, nor BSD curses. System V Release 4 curses contains code with similar interface definitions, however it is not documented. Other than by disassembling the library, we have no way to determine exactly how that mouse code works. Thus, we recommend that you wrap mouse-related code in an #ifdef using the feature macro NCURSES_MOUSE_VERSION so it will not be compiled and linked on non-ncurses systems. Presently, mouse event reporting works in the following environments: * xterm and similar programs such as rxvt. * Linux console, when configured with gpm(1), Alessandro Rubini's mouse server. * FreeBSD sysmouse (console) * OS/2 EMX The mouse interface is very simple. To activate it, you use the function mousemask(), passing it as first argument a bit-mask that specifies what kinds of events you want your program to be able to see. It will return the bit-mask of events that actually become visible, which may differ from the argument if the mouse device is not capable of reporting some of the event types you specify. Once the mouse is active, your application's command loop should watch for a return value of KEY_MOUSE from wgetch(). When you see this, a mouse event report has been queued. To pick it off the queue, use the function getmouse() (you must do this before the next wgetch(), otherwise another mouse event might come in and make the first one inaccessible). Each call to getmouse() fills a structure (the address of which you'll pass it) with mouse event data. The event data includes zero-origin, screen-relative character-cell coordinates of the mouse pointer. It also includes an event mask. Bits in this mask will be set, corresponding to the event type being reported. The mouse structure contains two additional fields which may be significant in the future as ncurses interfaces to new kinds of pointing device. In addition to x and y coordinates, there is a slot for a z coordinate; this might be useful with touch-screens that can return a pressure or duration parameter. There is also a device ID field, which could be used to distinguish between multiple pointing devices. The class of visible events may be changed at any time via mousemask(). Events that can be reported include presses, releases, single-, double- and triple-clicks (you can set the maximum button-down time for clicks). If you don't make clicks visible, they will be reported as press-release pairs. In some environments, the event mask may include bits reporting the state of shift, alt, and ctrl keys on the keyboard during the event. A function to check whether a mouse event fell within a given window is also supplied. You can use this to see whether a given window should consider a mouse event relevant to it. Because mouse event reporting will not be available in all environments, it would be unwise to build ncurses applications that require the use of a mouse. Rather, you should use the mouse as a shortcut for point-and-shoot commands your application would normally accept from the keyboard. Two of the test games in the ncurses distribution (bs and knight) contain code that illustrates how this can be done. See the manual page curs_mouse(3X) for full details of the mouse-interface functions. Finishing Up In order to clean up after the ncurses routines, the routine endwin() is provided. It restores tty modes to what they were when initscr() was first called, and moves the cursor down to the lower-left corner. Thus, anytime after the call to initscr, endwin() should be called before exiting. Function Descriptions We describe the detailed behavior of some important curses functions here, as a supplement to the manual page descriptions. Initialization and Wrapup initscr() The first function called should almost always be initscr(). This will determine the terminal type and initialize curses data structures. initscr() also arranges that the first call to refresh() will clear the screen. If an error occurs a message is written to standard error and the program exits. Otherwise it returns a pointer to stdscr. A few functions may be called before initscr (slk_init(), filter(), ripoffline(), use_env(), and, if you are using multiple terminals, newterm().) endwin() Your program should always call endwin() before exiting or shelling out of the program. This function will restore tty modes, move the cursor to the lower left corner of the screen, reset the terminal into the proper non-visual mode. Calling refresh() or doupdate() after a temporary escape from the program will restore the ncurses screen from before the escape. newterm(type, ofp, ifp) A program which outputs to more than one terminal should use newterm() instead of initscr(). newterm() should be called once for each terminal. It returns a variable of type SCREEN * which should be saved as a reference to that terminal. (NOTE: a SCREEN variable is not a screen in the sense we are describing in this introduction, but a collection of parameters used to assist in optimizing the display.) The arguments are the type of the terminal (a string) and FILE pointers for the output and input of the terminal. If type is NULL then the environment variable $TERM is used. endwin() should called once at wrapup time for each terminal opened using this function. set_term(new) This function is used to switch to a different terminal previously opened by newterm(). The screen reference for the new terminal is passed as the parameter. The previous terminal is returned by the function. All other calls affect only the current terminal. delscreen(sp) The inverse of newterm(); deallocates the data structures associated with a given SCREEN reference. Causing Output to the Terminal refresh() and wrefresh(win) These functions must be called to actually get any output on the terminal, as other routines merely manipulate data structures. wrefresh() copies the named window to the physical terminal screen, taking into account what is already there in order to do optimizations. refresh() does a refresh of stdscr. Unless leaveok() has been enabled, the physical cursor of the terminal is left at the location of the window's cursor. doupdate() and wnoutrefresh(win) These two functions allow multiple updates with more efficiency than wrefresh. To use them, it is important to understand how curses works. In addition to all the window structures, curses keeps two data structures representing the terminal screen: a physical screen, describing what is actually on the screen, and a virtual screen, describing what the programmer wants to have on the screen. wrefresh works by first copying the named window to the virtual screen (wnoutrefresh()), and then calling the routine to update the screen (doupdate()). If the programmer wishes to output several windows at once, a series of calls to wrefresh will result in alternating calls to wnoutrefresh() and doupdate(), causing several bursts of output to the screen. By calling wnoutrefresh() for each window, it is then possible to call doupdate() once, resulting in only one burst of output, with fewer total characters transmitted (this also avoids a visually annoying flicker at each update). Low-Level Capability Access setupterm(term, filenum, errret) This routine is called to initialize a terminal's description, without setting up the curses screen structures or changing the tty-driver mode bits. term is the character string representing the name of the terminal being used. filenum is the UNIX file descriptor of the terminal to be used for output. errret is a pointer to an integer, in which a success or failure indication is returned. The values returned can be 1 (all is well), 0 (no such terminal), or -1 (some problem locating the terminfo database). The value of term can be given as NULL, which will cause the value of TERM in the environment to be used. The errret pointer can also be given as NULL, meaning no error code is wanted. If errret is defaulted, and something goes wrong, setupterm() will print an appropriate error message and exit, rather than returning. Thus, a simple program can call setupterm(0, 1, 0) and not worry about initialization errors. After the call to setupterm(), the global variable cur_term is set to point to the current structure of terminal capabilities. By calling setupterm() for each terminal, and saving and restoring cur_term, it is possible for a program to use two or more terminals at once. Setupterm() also stores the names section of the terminal description in the global character array ttytype[]. Subsequent calls to setupterm() will overwrite this array, so you'll have to save it yourself if need be. Debugging NOTE: These functions are not part of the standard curses API! trace() This function can be used to explicitly set a trace level. If the trace level is nonzero, execution of your program will generate a file called `trace' in the current working directory containing a report on the library's actions. Higher trace levels enable more detailed (and verbose) reporting -- see comments attached to TRACE_ defines in the curses.h file for details. (It is also possible to set a trace level by assigning a trace level value to the environment variable NCURSES_TRACE). _tracef() This function can be used to output your own debugging information. It is only available only if you link with -lncurses_g. It can be used the same way as printf(), only it outputs a newline after the end of arguments. The output goes to a file called trace in the current directory. Trace logs can be difficult to interpret due to the sheer volume of data dumped in them. There is a script called tracemunch included with the ncurses distribution that can alleviate this problem somewhat; it compacts long sequences of similar operations into more succinct single-line pseudo-operations. These pseudo-ops can be distinguished by the fact that they are named in capital letters. Hints, Tips, and Tricks The ncurses manual pages are a complete reference for this library. In the remainder of this document, we discuss various useful methods that may not be obvious from the manual page descriptions. Some Notes of Caution If you find yourself thinking you need to use noraw() or nocbreak(), think again and move carefully. It's probably better design to use getstr() or one of its relatives to simulate cooked mode. The noraw() and nocbreak() functions try to restore cooked mode, but they may end up clobbering some control bits set before you started your application. Also, they have always been poorly documented, and are likely to hurt your application's usability with other curses libraries. Bear in mind that refresh() is a synonym for wrefresh(stdscr). Don't try to mix use of stdscr with use of windows declared by newwin(); a refresh() call will blow them off the screen. The right way to handle this is to use subwin(), or not touch stdscr at all and tile your screen with declared windows which you then wnoutrefresh() somewhere in your program event loop, with a single doupdate() call to trigger actual repainting. You are much less likely to run into problems if you design your screen layouts to use tiled rather than overlapping windows. Historically, curses support for overlapping windows has been weak, fragile, and poorly documented. The ncurses library is not yet an exception to this rule. There is a panels library included in the ncurses distribution that does a pretty good job of strengthening the overlapping-windows facilities. Try to avoid using the global variables LINES and COLS. Use getmaxyx() on the stdscr context instead. Reason: your code may be ported to run in an environment with window resizes, in which case several screens could be open with different sizes. Temporarily Leaving NCURSES Mode Sometimes you will want to write a program that spends most of its time in screen mode, but occasionally returns to ordinary `cooked' mode. A common reason for this is to support shell-out. This behavior is simple to arrange in ncurses. To leave ncurses mode, call endwin() as you would if you were intending to terminate the program. This will take the screen back to cooked mode; you can do your shell-out. When you want to return to ncurses mode, simply call refresh() or doupdate(). This will repaint the screen. There is a boolean function, isendwin(), which code can use to test whether ncurses screen mode is active. It returns TRUE in the interval between an endwin() call and the following refresh(), FALSE otherwise. Here is some sample code for shellout: addstr("Shelling out..."); def_prog_mode(); /* save current tty modes */ endwin(); /* restore original tty modes */ system("sh"); /* run shell */ addstr("returned.\n"); /* prepare return message */ refresh(); /* restore save modes, repaint screen */ Using NCURSES under XTERM A resize operation in X sends SIGWINCH to the application running under xterm. The easiest way to handle SIGWINCH is to do an endwin, followed by an refresh and a screen repaint you code yourself. The refresh will pick up the new screen size from the xterm's environment. That is the standard way, of course (it even works with some vendor's curses implementations). Its drawback is that it clears the screen to reinitialize the display, and does not resize subwindows which must be shrunk. Ncurses provides an extension which works better, the resizeterm function. That function ensures that all windows are limited to the new screen dimensions, and pads stdscr with blanks if the screen is larger. The ncurses library provides a SIGWINCH signal handler, which pushes a KEY_RESIZE via the wgetch() calls. When ncurses returns that code, it calls resizeterm to update the size of the standard screen's window, repainting that (filling with blanks or truncating as needed). It also resizes other windows, but its effect may be less satisfactory because it cannot know how you want the screen re-painted. You will usually have to write special-purpose code to handle KEY_RESIZE yourself. Handling Multiple Terminal Screens The initscr() function actually calls a function named newterm() to do most of its work. If you are writing a program that opens multiple terminals, use newterm() directly. For each call, you will have to specify a terminal type and a pair of file pointers; each call will return a screen reference, and stdscr will be set to the last one allocated. You will switch between screens with the set_term call. Note that you will also have to call def_shell_mode and def_prog_mode on each tty yourself. Testing for Terminal Capabilities Sometimes you may want to write programs that test for the presence of various capabilities before deciding whether to go into ncurses mode. An easy way to do this is to call setupterm(), then use the functions tigetflag(), tigetnum(), and tigetstr() to do your testing. A particularly useful case of this often comes up when you want to test whether a given terminal type should be treated as `smart' (cursor-addressable) or `stupid'. The right way to test this is to see if the return value of tigetstr("cup") is non-NULL. Alternatively, you can include the term.h file and test the value of the macro cursor_address. Tuning for Speed Use the addchstr() family of functions for fast screen-painting of text when you know the text doesn't contain any control characters. Try to make attribute changes infrequent on your screens. Don't use the immedok() option! Special Features of NCURSES The wresize() function allows you to resize a window in place. The associated resizeterm() function simplifies the construction of SIGWINCH handlers, for resizing all windows. The define_key() function allows you to define at runtime function-key control sequences which are not in the terminal description. The keyok() function allows you to temporarily enable or disable interpretation of any function-key control sequence. The use_default_colors() function allows you to construct applications which can use the terminal's default foreground and background colors as an additional "default" color. Several terminal emulators support this feature, which is based on ISO 6429. Ncurses supports up 16 colors, unlike SVr4 curses which defines only 8. While most terminals which provide color allow only 8 colors, about a quarter (including XFree86 xterm) support 16 colors. Compatibility with Older Versions Despite our best efforts, there are some differences between ncurses and the (undocumented!) behavior of older curses implementations. These arise from ambiguities or omissions in the documentation of the API. Refresh of Overlapping Windows If you define two windows A and B that overlap, and then alternately scribble on and refresh them, the changes made to the overlapping region under historic curses versions were often not documented precisely. To understand why this is a problem, remember that screen updates are calculated between two representations of the entire display. The documentation says that when you refresh a window, it is first copied to the virtual screen, and then changes are calculated to update the physical screen (and applied to the terminal). But "copied to" is not very specific, and subtle differences in how copying works can produce different behaviors in the case where two overlapping windows are each being refreshed at unpredictable intervals. What happens to the overlapping region depends on what wnoutrefresh() does with its argument -- what portions of the argument window it copies to the virtual screen. Some implementations do "change copy", copying down only locations in the window that have changed (or been marked changed with wtouchln() and friends). Some implementations do "entire copy", copying all window locations to the virtual screen whether or not they have changed. The ncurses library itself has not always been consistent on this score. Due to a bug, versions 1.8.7 to 1.9.8a did entire copy. Versions 1.8.6 and older, and versions 1.9.9 and newer, do change copy. For most commercial curses implementations, it is not documented and not known for sure (at least not to the ncurses maintainers) whether they do change copy or entire copy. We know that System V release 3 curses has logic in it that looks like an attempt to do change copy, but the surrounding logic and data representations are sufficiently complex, and our knowledge sufficiently indirect, that it's hard to know whether this is reliable. It is not clear what the SVr4 documentation and XSI standard intend. The XSI Curses standard barely mentions wnoutrefresh(); the SVr4 documents seem to be describing entire-copy, but it is possible with some effort and straining to read them the other way. It might therefore be unwise to rely on either behavior in programs that might have to be linked with other curses implementations. Instead, you can do an explicit touchwin() before the wnoutrefresh() call to guarantee an entire-contents copy anywhere. The really clean way to handle this is to use the panels library. If, when you want a screen update, you do update_panels(), it will do all the necessary wnoutrefresh() calls for whatever panel stacking order you have defined. Then you can do one doupdate() and there will be a single burst of physical I/O that will do all your updates. Background Erase If you have been using a very old versions of ncurses (1.8.7 or older) you may be surprised by the behavior of the erase functions. In older versions, erased areas of a window were filled with a blank modified by the window's current attribute (as set by wattrset(), wattron(), wattroff() and friends). In newer versions, this is not so. Instead, the attribute of erased blanks is normal unless and until it is modified by the functions bkgdset() or wbkgdset(). This change in behavior conforms ncurses to System V Release 4 and the XSI Curses standard. XSI Curses Conformance The ncurses library is intended to be base-level conformant with the XSI Curses standard from X/Open. Many extended-level features (in fact, almost all features not directly concerned with wide characters and internationalization) are also supported. One effect of XSI conformance is the change in behavior described under "Background Erase -- Compatibility with Old Versions". Also, ncurses meets the XSI requirement that every macro entry point have a corresponding function which may be linked (and will be prototype-checked) if the macro definition is disabled with #undef. The Panels Library The ncurses library by itself provides good support for screen displays in which the windows are tiled (non-overlapping). In the more general case that windows may overlap, you have to use a series of wnoutrefresh() calls followed by a doupdate(), and be careful about the order you do the window refreshes in. It has to be bottom-upwards, otherwise parts of windows that should be obscured will show through. When your interface design is such that windows may dive deeper into the visibility stack or pop to the top at runtime, the resulting book-keeping can be tedious and difficult to get right. Hence the panels library. The panel library first appeared in AT&T System V. The version documented here is the panel code distributed with ncurses. Compiling With the Panels Library Your panels-using modules must import the panels library declarations with #include and must be linked explicitly with the panels library using an -lpanel argument. Note that they must also link the ncurses library with -lncurses. Many linkers are two-pass and will accept either order, but it is still good practice to put -lpanel first and -lncurses second. Overview of Panels A panel object is a window that is implicitly treated as part of a deck including all other panel objects. The deck has an implicit bottom-to-top visibility order. The panels library includes an update function (analogous to refresh()) that displays all panels in the deck in the proper order to resolve overlaps. The standard window, stdscr, is considered below all panels. Details on the panels functions are available in the man pages. We'll just hit the highlights here. You create a panel from a window by calling new_panel() on a window pointer. It then becomes the top of the deck. The panel's window is available as the value of panel_window() called with the panel pointer as argument. You can delete a panel (removing it from the deck) with del_panel. This will not deallocate the associated window; you have to do that yourself. You can replace a panel's window with a different window by calling replace_window. The new window may be of different size; the panel code will re-compute all overlaps. This operation doesn't change the panel's position in the deck. To move a panel's window, use move_panel(). The mvwin() function on the panel's window isn't sufficient because it doesn't update the panels library's representation of where the windows are. This operation leaves the panel's depth, contents, and size unchanged. Two functions (top_panel(), bottom_panel()) are provided for rearranging the deck. The first pops its argument window to the top of the deck; the second sends it to the bottom. Either operation leaves the panel's screen location, contents, and size unchanged. The function update_panels() does all the wnoutrefresh() calls needed to prepare for doupdate() (which you must call yourself, afterwards). Typically, you will want to call update_panels() and doupdate() just before accepting command input, once in each cycle of interaction with the user. If you call update_panels() after each and every panel write, you'll generate a lot of unnecessary refresh activity and screen flicker. Panels, Input, and the Standard Screen You shouldn't mix wnoutrefresh() or wrefresh() operations with panels code; this will work only if the argument window is either in the top panel or unobscured by any other panels. The stsdcr window is a special case. It is considered below all panels. Because changes to panels may obscure parts of stdscr, though, you should call update_panels() before doupdate() even when you only change stdscr. Note that wgetch automatically calls wrefresh. Therefore, before requesting input from a panel window, you need to be sure that the panel is totally unobscured. There is presently no way to display changes to one obscured panel without repainting all panels. Hiding Panels It's possible to remove a panel from the deck temporarily; use hide_panel for this. Use show_panel() to render it visible again. The predicate function panel_hidden tests whether or not a panel is hidden. The panel_update code ignores hidden panels. You cannot do top_panel() or bottom_panel on a hidden panel(). Other panels operations are applicable. Miscellaneous Other Facilities It's possible to navigate the deck using the functions panel_above() and panel_below. Handed a panel pointer, they return the panel above or below that panel. Handed NULL, they return the bottom-most or top-most panel. Every panel has an associated user pointer, not used by the panel code, to which you can attach application data. See the man page documentation of set_panel_userptr() and panel_userptr for details. The Menu Library A menu is a screen display that assists the user to choose some subset of a given set of items. The menu library is a curses extension that supports easy programming of menu hierarchies with a uniform but flexible interface. The menu library first appeared in AT&T System V. The version documented here is the menu code distributed with ncurses. Compiling With the menu Library Your menu-using modules must import the menu library declarations with #include and must be linked explicitly with the menus library using an -lmenu argument. Note that they must also link the ncurses library with -lncurses. Many linkers are two-pass and will accept either order, but it is still good practice to put -lmenu first and -lncurses second. Overview of Menus The menus created by this library consist of collections of items including a name string part and a description string part. To make menus, you create groups of these items and connect them with menu frame objects. The menu can then by posted, that is written to an associated window. Actually, each menu has two associated windows; a containing window in which the programmer can scribble titles or borders, and a subwindow in which the menu items proper are displayed. If this subwindow is too small to display all the items, it will be a scrollable viewport on the collection of items. A menu may also be unposted (that is, undisplayed), and finally freed to make the storage associated with it and its items available for re-use. The general flow of control of a menu program looks like this: 1. Initialize curses. 2. Create the menu items, using new_item(). 3. Create the menu using new_menu(). 4. Post the menu using post_menu(). 5. Refresh the screen. 6. Process user requests via an input loop. 7. Unpost the menu using unpost_menu(). 8. Free the menu, using free_menu(). 9. Free the items using free_item(). 10. Terminate curses. Selecting items Menus may be multi-valued or (the default) single-valued (see the manual page menu_opts(3x) to see how to change the default). Both types always have a current item. From a single-valued menu you can read the selected value simply by looking at the current item. From a multi-valued menu, you get the selected set by looping through the items applying the item_value() predicate function. Your menu-processing code can use the function set_item_value() to flag the items in the select set. Menu items can be made unselectable using set_item_opts() or item_opts_off() with the O_SELECTABLE argument. This is the only option so far defined for menus, but it is good practice to code as though other option bits might be on. Menu Display The menu library calculates a minimum display size for your window, based on the following variables: * The number and maximum length of the menu items * Whether the O_ROWMAJOR option is enabled * Whether display of descriptions is enabled * Whatever menu format may have been set by the programmer * The length of the menu mark string used for highlighting selected items The function set_menu_format() allows you to set the maximum size of the viewport or menu page that will be used to display menu items. You can retrieve any format associated with a menu with menu_format(). The default format is rows=16, columns=1. The actual menu page may be smaller than the format size. This depends on the item number and size and whether O_ROWMAJOR is on. This option (on by default) causes menu items to be displayed in a `raster-scan' pattern, so that if more than one item will fit horizontally the first couple of items are side-by-side in the top row. The alternative is column-major display, which tries to put the first several items in the first column. As mentioned above, a menu format not large enough to allow all items to fit on-screen will result in a menu display that is vertically scrollable. You can scroll it with requests to the menu driver, which will be described in the section on menu input handling. Each menu has a mark string used to visually tag selected items; see the menu_mark(3x) manual page for details. The mark string length also influences the menu page size. The function scale_menu() returns the minimum display size that the menu code computes from all these factors. There are other menu display attributes including a select attribute, an attribute for selectable items, an attribute for unselectable items, and a pad character used to separate item name text from description text. These have reasonable defaults which the library allows you to change (see the menu_attribs(3x) manual page. Menu Windows Each menu has, as mentioned previously, a pair of associated windows. Both these windows are painted when the menu is posted and erased when the menu is unposted. The outer or frame window is not otherwise touched by the menu routines. It exists so the programmer can associate a title, a border, or perhaps help text with the menu and have it properly refreshed or erased at post/unpost time. The inner window or subwindow is where the current menu page is displayed. By default, both windows are stdscr. You can set them with the functions in menu_win(3x). When you call post_menu(), you write the menu to its subwindow. When you call unpost_menu(), you erase the subwindow, However, neither of these actually modifies the screen. To do that, call wrefresh() or some equivalent. Processing Menu Input The main loop of your menu-processing code should call menu_driver() repeatedly. The first argument of this routine is a menu pointer; the second is a menu command code. You should write an input-fetching routine that maps input characters to menu command codes, and pass its output to menu_driver(). The menu command codes are fully documented in menu_driver(3x). The simplest group of command codes is REQ_NEXT_ITEM, REQ_PREV_ITEM, REQ_FIRST_ITEM, REQ_LAST_ITEM, REQ_UP_ITEM, REQ_DOWN_ITEM, REQ_LEFT_ITEM, REQ_RIGHT_ITEM. These change the currently selected item. These requests may cause scrolling of the menu page if it only partially displayed. There are explicit requests for scrolling which also change the current item (because the select location does not change, but the item there does). These are REQ_SCR_DLINE, REQ_SCR_ULINE, REQ_SCR_DPAGE, and REQ_SCR_UPAGE. The REQ_TOGGLE_ITEM selects or deselects the current item. It is for use in multi-valued menus; if you use it with O_ONEVALUE on, you'll get an error return (E_REQUEST_DENIED). Each menu has an associated pattern buffer. The menu_driver() logic tries to accumulate printable ASCII characters passed in in that buffer; when it matches a prefix of an item name, that item (or the next matching item) is selected. If appending a character yields no new match, that character is deleted from the pattern buffer, and menu_driver() returns E_NO_MATCH. Some requests change the pattern buffer directly: REQ_CLEAR_PATTERN, REQ_BACK_PATTERN, REQ_NEXT_MATCH, REQ_PREV_MATCH. The latter two are useful when pattern buffer input matches more than one item in a multi-valued menu. Each successful scroll or item navigation request clears the pattern buffer. It is also possible to set the pattern buffer explicitly with set_menu_pattern(). Finally, menu driver requests above the constant MAX_COMMAND are considered application-specific commands. The menu_driver() code ignores them and returns E_UNKNOWN_COMMAND. Miscellaneous Other Features Various menu options can affect the processing and visual appearance and input processing of menus. See menu_opts(3x) for details. It is possible to change the current item from application code; this is useful if you want to write your own navigation requests. It is also possible to explicitly set the top row of the menu display. See mitem_current(3x). If your application needs to change the menu subwindow cursor for any reason, pos_menu_cursor() will restore it to the correct location for continuing menu driver processing. It is possible to set hooks to be called at menu initialization and wrapup time, and whenever the selected item changes. See menu_hook(3x). Each item, and each menu, has an associated user pointer on which you can hang application data. See mitem_userptr(3x) and menu_userptr(3x). The Forms Library The form library is a curses extension that supports easy programming of on-screen forms for data entry and program control. The form library first appeared in AT&T System V. The version documented here is the form code distributed with ncurses. Compiling With the form Library Your form-using modules must import the form library declarations with #include and must be linked explicitly with the forms library using an -lform argument. Note that they must also link the ncurses library with -lncurses. Many linkers are two-pass and will accept either order, but it is still good practice to put -lform first and -lncurses second. Overview of Forms A form is a collection of fields; each field may be either a label (explanatory text) or a data-entry location. Long forms may be segmented into pages; each entry to a new page clears the screen. To make forms, you create groups of fields and connect them with form frame objects; the form library makes this relatively simple. Once defined, a form can be posted, that is written to an associated window. Actually, each form has two associated windows; a containing window in which the programmer can scribble titles or borders, and a subwindow in which the form fields proper are displayed. As the form user fills out the posted form, navigation and editing keys support movement between fields, editing keys support modifying field, and plain text adds to or changes data in a current field. The form library allows you (the forms designer) to bind each navigation and editing key to any keystroke accepted by curses Fields may have validation conditions on them, so that they check input data for type and value. The form library supplies a rich set of pre-defined field types, and makes it relatively easy to define new ones. Once its transaction is completed (or aborted), a form may be unposted (that is, undisplayed), and finally freed to make the storage associated with it and its items available for re-use. The general flow of control of a form program looks like this: 1. Initialize curses. 2. Create the form fields, using new_field(). 3. Create the form using new_form(). 4. Post the form using post_form(). 5. Refresh the screen. 6. Process user requests via an input loop. 7. Unpost the form using unpost_form(). 8. Free the form, using free_form(). 9. Free the fields using free_field(). 10. Terminate curses. Note that this looks much like a menu program; the form library handles tasks which are in many ways similar, and its interface was obviously designed to resemble that of the menu library wherever possible. In forms programs, however, the `process user requests' is somewhat more complicated than for menus. Besides menu-like navigation operations, the menu driver loop has to support field editing and data validation. Creating and Freeing Fields and Forms The basic function for creating fields is new_field(): FIELD *new_field(int height, int width, /* new field size */ int top, int left, /* upper left corner */ int offscreen, /* number of offscreen rows */ int nbuf); /* number of working buffers */ Menu items always occupy a single row, but forms fields may have multiple rows. So new_field() requires you to specify a width and height (the first two arguments, which mist both be greater than zero). You must also specify the location of the field's upper left corner on the screen (the third and fourth arguments, which must be zero or greater). Note that these coordinates are relative to the form subwindow, which will coincide with stdscr by default but need not be stdscr if you've done an explicit set_form_win() call. The fifth argument allows you to specify a number of off-screen rows. If this is zero, the entire field will always be displayed. If it is nonzero, the form will be scrollable, with only one screen-full (initially the top part) displayed at any given time. If you make a field dynamic and grow it so it will no longer fit on the screen, the form will become scrollable even if the offscreen argument was initially zero. The forms library allocates one working buffer per field; the size of each buffer is ((height + offscreen)*width + 1, one character for each position in the field plus a NUL terminator. The sixth argument is the number of additional data buffers to allocate for the field; your application can use them for its own purposes. FIELD *dup_field(FIELD *field, /* field to copy */ int top, int left); /* location of new copy */ The function dup_field() duplicates an existing field at a new location. Size and buffering information are copied; some attribute flags and status bits are not (see the form_field_new(3X) for details). FIELD *link_field(FIELD *field, /* field to copy */ int top, int left); /* location of new copy */ The function link_field() also duplicates an existing field at a new location. The difference from dup_field() is that it arranges for the new field's buffer to be shared with the old one. Besides the obvious use in making a field editable from two different form pages, linked fields give you a way to hack in dynamic labels. If you declare several fields linked to an original, and then make them inactive, changes from the original will still be propagated to the linked fields. As with duplicated fields, linked fields have attribute bits separate from the original. As you might guess, all these field-allocations return NULL if the field allocation is not possible due to an out-of-memory error or out-of-bounds arguments. To connect fields to a form, use FORM *new_form(FIELD **fields); This function expects to see a NULL-terminated array of field pointers. Said fields are connected to a newly-allocated form object; its address is returned (or else NULL if the allocation fails). Note that new_field() does not copy the pointer array into private storage; if you modify the contents of the pointer array during forms processing, all manner of bizarre things might happen. Also note that any given field may only be connected to one form. The functions free_field() and free_form are available to free field and form objects. It is an error to attempt to free a field connected to a form, but not vice-versa; thus, you will generally free your form objects first. Fetching and Changing Field Attributes Each form field has a number of location and size attributes associated with it. There are other field attributes used to control display and editing of the field. Some (for example, the O_STATIC bit) involve sufficient complications to be covered in sections of their own later on. We cover the functions used to get and set several basic attributes here. When a field is created, the attributes not specified by the new_field function are copied from an invisible system default field. In attribute-setting and -fetching functions, the argument NULL is taken to mean this field. Changes to it persist as defaults until your forms application terminates. Fetching Size and Location Data You can retrieve field sizes and locations through: int field_info(FIELD *field, /* field from which to fetch */ int *height, *int width, /* field size */ int *top, int *left, /* upper left corner */ int *offscreen, /* number of offscreen rows */ int *nbuf); /* number of working buffers */ This function is a sort of inverse of new_field(); instead of setting size and location attributes of a new field, it fetches them from an existing one. Changing the Field Location It is possible to move a field's location on the screen: int move_field(FIELD *field, /* field to alter */ int top, int left); /* new upper-left corner */ You can, of course. query the current location through field_info(). The Justification Attribute One-line fields may be unjustified, justified right, justified left, or centered. Here is how you manipulate this attribute: int set_field_just(FIELD *field, /* field to alter */ int justmode); /* mode to set */ int field_just(FIELD *field); /* fetch mode of field */ The mode values accepted and returned by this functions are preprocessor macros NO_JUSTIFICATION, JUSTIFY_RIGHT, JUSTIFY_LEFT, or JUSTIFY_CENTER. Field Display Attributes For each field, you can set a foreground attribute for entered characters, a background attribute for the entire field, and a pad character for the unfilled portion of the field. You can also control pagination of the form. This group of four field attributes controls the visual appearance of the field on the screen, without affecting in any way the data in the field buffer. int set_field_fore(FIELD *field, /* field to alter */ chtype attr); /* attribute to set */ chtype field_fore(FIELD *field); /* field to query */ int set_field_back(FIELD *field, /* field to alter */ chtype attr); /* attribute to set */ chtype field_back(FIELD *field); /* field to query */ int set_field_pad(FIELD *field, /* field to alter */ int pad); /* pad character to set */ chtype field_pad(FIELD *field); int set_new_page(FIELD *field, /* field to alter */ int flag); /* TRUE to force new page */ chtype new_page(FIELD *field); /* field to query */ The attributes set and returned by the first four functions are normal curses(3x) display attribute values (A_STANDOUT, A_BOLD, A_REVERSE etc). The page bit of a field controls whether it is displayed at the start of a new form screen. Field Option Bits There is also a large collection of field option bits you can set to control various aspects of forms processing. You can manipulate them with these functions: int set_field_opts(FIELD *field, /* field to alter */ int attr); /* attribute to set */ int field_opts_on(FIELD *field, /* field to alter */ int attr); /* attributes to turn on */ int field_opts_off(FIELD *field, /* field to alter */ int attr); /* attributes to turn off */ int field_opts(FIELD *field); /* field to query */ By default, all options are on. Here are the available option bits: O_VISIBLE Controls whether the field is visible on the screen. Can be used during form processing to hide or pop up fields depending on the value of parent fields. O_ACTIVE Controls whether the field is active during forms processing (i.e. visited by form navigation keys). Can be used to make labels or derived fields with buffer values alterable by the forms application, not the user. O_PUBLIC Controls whether data is displayed during field entry. If this option is turned off on a field, the library will accept and edit data in that field, but it will not be displayed and the visible field cursor will not move. You can turn off the O_PUBLIC bit to define password fields. O_EDIT Controls whether the field's data can be modified. When this option is off, all editing requests except REQ_PREV_CHOICE and REQ_NEXT_CHOICE will fail. Such read-only fields may be useful for help messages. O_WRAP Controls word-wrapping in multi-line fields. Normally, when any character of a (blank-separated) word reaches the end of the current line, the entire word is wrapped to the next line (assuming there is one). When this option is off, the word will be split across the line break. O_BLANK Controls field blanking. When this option is on, entering a character at the first field position erases the entire field (except for the just-entered character). O_AUTOSKIP Controls automatic skip to next field when this one fills. Normally, when the forms user tries to type more data into a field than will fit, the editing location jumps to next field. When this option is off, the user's cursor will hang at the end of the field. This option is ignored in dynamic fields that have not reached their size limit. O_NULLOK Controls whether validation is applied to blank fields. Normally, it is not; the user can leave a field blank without invoking the usual validation check on exit. If this option is off on a field, exit from it will invoke a validation check. O_PASSOK Controls whether validation occurs on every exit, or only after the field is modified. Normally the latter is true. Setting O_PASSOK may be useful if your field's validation function may change during forms processing. O_STATIC Controls whether the field is fixed to its initial dimensions. If you turn this off, the field becomes dynamic and will stretch to fit entered data. A field's options cannot be changed while the field is currently selected. However, options may be changed on posted fields that are not current. The option values are bit-masks and can be composed with logical-or in the obvious way. Field Status Every field has a status flag, which is set to FALSE when the field is created and TRUE when the value in field buffer 0 changes. This flag can be queried and set directly: int set_field_status(FIELD *field, /* field to alter */ int status); /* mode to set */ int field_status(FIELD *field); /* fetch mode of field */ Setting this flag under program control can be useful if you use the same form repeatedly, looking for modified fields each time. Calling field_status() on a field not currently selected for input will return a correct value. Calling field_status() on a field that is currently selected for input may not necessarily give a correct field status value, because entered data isn't necessarily copied to buffer zero before the exit validation check. To guarantee that the returned status value reflects reality, call field_status() either (1) in the field's exit validation check routine, (2) from the field's or form's initialization or termination hooks, or (3) just after a REQ_VALIDATION request has been processed by the forms driver. Field User Pointer Each field structure contains one character pointer slot that is not used by the forms library. It is intended to be used by applications to store private per-field data. You can manipulate it with: int set_field_userptr(FIELD *field, /* field to alter */ char *userptr); /* mode to set */ char *field_userptr(FIELD *field); /* fetch mode of field */ (Properly, this user pointer field ought to have (void *) type. The (char *) type is retained for System V compatibility.) It is valid to set the user pointer of the default field (with a set_field_userptr() call passed a NULL field pointer.) When a new field is created, the default-field user pointer is copied to initialize the new field's user pointer. Variable-Sized Fields Normally, a field is fixed at the size specified for it at creation time. If, however, you turn off its O_STATIC bit, it becomes dynamic and will automatically resize itself to accommodate data as it is entered. If the field has extra buffers associated with it, they will grow right along with the main input buffer. A one-line dynamic field will have a fixed height (1) but variable width, scrolling horizontally to display data within the field area as originally dimensioned and located. A multi-line dynamic field will have a fixed width, but variable height (number of rows), scrolling vertically to display data within the field area as originally dimensioned and located. Normally, a dynamic field is allowed to grow without limit. But it is possible to set an upper limit on the size of a dynamic field. You do it with this function: int set_max_field(FIELD *field, /* field to alter (may not be NULL) */ int max_size); /* upper limit on field size */ If the field is one-line, max_size is taken to be a column size limit; if it is multi-line, it is taken to be a line size limit. To disable any limit, use an argument of zero. The growth limit can be changed whether or not the O_STATIC bit is on, but has no effect until it is. The following properties of a field change when it becomes dynamic: * If there is no growth limit, there is no final position of the field; therefore O_AUTOSKIP and O_NL_OVERLOAD are ignored. * Field justification will be ignored (though whatever justification is set up will be retained internally and can be queried). * The dup_field() and link_field() calls copy dynamic-buffer sizes. If the O_STATIC option is set on one of a collection of links, buffer resizing will occur only when the field is edited through that link. * The call field_info() will retrieve the original static size of the field; use dynamic_field_info() to get the actual dynamic size. Field Validation By default, a field will accept any data that will fit in its input buffer. However, it is possible to attach a validation type to a field. If you do this, any attempt to leave the field while it contains data that doesn't match the validation type will fail. Some validation types also have a character-validity check for each time a character is entered in the field. A field's validation check (if any) is not called when set_field_buffer() modifies the input buffer, nor when that buffer is changed through a linked field. The form library provides a rich set of pre-defined validation types, and gives you the capability to define custom ones of your own. You can examine and change field validation attributes with the following functions: int set_field_type(FIELD *field, /* field to alter */ FIELDTYPE *ftype, /* type to associate */ ...); /* additional arguments*/ FIELDTYPE *field_type(FIELD *field); /* field to query */ The validation type of a field is considered an attribute of the field. As with other field attributes, Also, doing set_field_type() with a NULL field default will change the system default for validation of newly-created fields. Here are the pre-defined validation types: TYPE_ALPHA This field type accepts alphabetic data; no blanks, no digits, no special characters (this is checked at character-entry time). It is set up with: int set_field_type(FIELD *field, /* field to alter */ TYPE_ALPHA, /* type to associate */ int width); /* maximum width of field */ The width argument sets a minimum width of data. Typically you'll want to set this to the field width; if it's greater than the field width, the validation check will always fail. A minimum width of zero makes field completion optional. TYPE_ALNUM This field type accepts alphabetic data and digits; no blanks, no special characters (this is checked at character-entry time). It is set up with: int set_field_type(FIELD *field, /* field to alter */ TYPE_ALNUM, /* type to associate */ int width); /* maximum width of field */ The width argument sets a minimum width of data. As with TYPE_ALPHA, typically you'll want to set this to the field width; if it's greater than the field width, the validation check will always fail. A minimum width of zero makes field completion optional. TYPE_ENUM This type allows you to restrict a field's values to be among a specified set of string values (for example, the two-letter postal codes for U.S. states). It is set up with: int set_field_type(FIELD *field, /* field to alter */ TYPE_ENUM, /* type to associate */ char **valuelist; /* list of possible values */ int checkcase; /* case-sensitive? */ int checkunique); /* must specify uniquely? */ The valuelist parameter must point at a NULL-terminated list of valid strings. The checkcase argument, if true, makes comparison with the string case-sensitive. When the user exits a TYPE_ENUM field, the validation procedure tries to complete the data in the buffer to a valid entry. If a complete choice string has been entered, it is of course valid. But it is also possible to enter a prefix of a valid string and have it completed for you. By default, if you enter such a prefix and it matches more than one value in the string list, the prefix will be completed to the first matching value. But the checkunique argument, if true, requires prefix matches to be unique in order to be valid. The REQ_NEXT_CHOICE and REQ_PREV_CHOICE input requests can be particularly useful with these fields. TYPE_INTEGER This field type accepts an integer. It is set up as follows: int set_field_type(FIELD *field, /* field to alter */ TYPE_INTEGER, /* type to associate */ int padding, /* # places to zero-pad to */ int vmin, int vmax); /* valid range */ Valid characters consist of an optional leading minus and digits. The range check is performed on exit. If the range maximum is less than or equal to the minimum, the range is ignored. If the value passes its range check, it is padded with as many leading zero digits as necessary to meet the padding argument. A TYPE_INTEGER value buffer can conveniently be interpreted with the C library function atoi(3). TYPE_NUMERIC This field type accepts a decimal number. It is set up as follows: int set_field_type(FIELD *field, /* field to alter */ TYPE_NUMERIC, /* type to associate */ int padding, /* # places of precision */ double vmin, double vmax); /* valid range */ Valid characters consist of an optional leading minus and digits. possibly including a decimal point. If your system supports locale's, the decimal point character used must be the one defined by your locale. The range check is performed on exit. If the range maximum is less than or equal to the minimum, the range is ignored. If the value passes its range check, it is padded with as many trailing zero digits as necessary to meet the padding argument. A TYPE_NUMERIC value buffer can conveniently be interpreted with the C library function atof(3). TYPE_REGEXP This field type accepts data matching a regular expression. It is set up as follows: int set_field_type(FIELD *field, /* field to alter */ TYPE_REGEXP, /* type to associate */ char *regexp); /* expression to match */ The syntax for regular expressions is that of regcomp(3). The check for regular-expression match is performed on exit. Direct Field Buffer Manipulation The chief attribute of a field is its buffer contents. When a form has been completed, your application usually needs to know the state of each field buffer. You can find this out with: char *field_buffer(FIELD *field, /* field to query */ int bufindex); /* number of buffer to query */ Normally, the state of the zero-numbered buffer for each field is set by the user's editing actions on that field. It's sometimes useful to be able to set the value of the zero-numbered (or some other) buffer from your application: int set_field_buffer(FIELD *field, /* field to alter */ int bufindex, /* number of buffer to alter */ char *value); /* string value to set */ If the field is not large enough and cannot be resized to a sufficiently large size to contain the specified value, the value will be truncated to fit. Calling field_buffer() with a null field pointer will raise an error. Calling field_buffer() on a field not currently selected for input will return a correct value. Calling field_buffer() on a field that is currently selected for input may not necessarily give a correct field buffer value, because entered data isn't necessarily copied to buffer zero before the exit validation check. To guarantee that the returned buffer value reflects on-screen reality, call field_buffer() either (1) in the field's exit validation check routine, (2) from the field's or form's initialization or termination hooks, or (3) just after a REQ_VALIDATION request has been processed by the forms driver. Attributes of Forms As with field attributes, form attributes inherit a default from a system default form structure. These defaults can be queried or set by of these functions using a form-pointer argument of NULL. The principal attribute of a form is its field list. You can query and change this list with: int set_form_fields(FORM *form, /* form to alter */ FIELD **fields); /* fields to connect */ char *form_fields(FORM *form); /* fetch fields of form */ int field_count(FORM *form); /* count connect fields */ The second argument of set_form_fields() may be a NULL-terminated field pointer array like the one required by new_form(). In that case, the old fields of the form are disconnected but not freed (and eligible to be connected to other forms), then the new fields are connected. It may also be null, in which case the old fields are disconnected (and not freed) but no new ones are connected. The field_count() function simply counts the number of fields connected to a given from. It returns -1 if the form-pointer argument is NULL. Control of Form Display In the overview section, you saw that to display a form you normally start by defining its size (and fields), posting it, and refreshing the screen. There is an hidden step before posting, which is the association of the form with a frame window (actually, a pair of windows) within which it will be displayed. By default, the forms library associates every form with the full-screen window stdscr. By making this step explicit, you can associate a form with a declared frame window on your screen display. This can be useful if you want to adapt the form display to different screen sizes, dynamically tile forms on the screen, or use a form as part of an interface layout managed by panels. The two windows associated with each form have the same functions as their analogues in the menu library. Both these windows are painted when the form is posted and erased when the form is unposted. The outer or frame window is not otherwise touched by the form routines. It exists so the programmer can associate a title, a border, or perhaps help text with the form and have it properly refreshed or erased at post/unpost time. The inner window or subwindow is where the current form page is actually displayed. In order to declare your own frame window for a form, you'll need to know the size of the form's bounding rectangle. You can get this information with: int scale_form(FORM *form, /* form to query */ int *rows, /* form rows */ int *cols); /* form cols */ The form dimensions are passed back in the locations pointed to by the arguments. Once you have this information, you can use it to declare of windows, then use one of these functions: int set_form_win(FORM *form, /* form to alter */ WINDOW *win); /* frame window to connect */ WINDOW *form_win(FORM *form); /* fetch frame window of form */ int set_form_sub(FORM *form, /* form to alter */ WINDOW *win); /* form subwindow to connect */ WINDOW *form_sub(FORM *form); /* fetch form subwindow of form */ Note that curses operations, including refresh(), on the form, should be done on the frame window, not the form subwindow. It is possible to check from your application whether all of a scrollable field is actually displayed within the menu subwindow. Use these functions: int data_ahead(FORM *form); /* form to be queried */ int data_behind(FORM *form); /* form to be queried */ The function data_ahead() returns TRUE if (a) the current field is one-line and has undisplayed data off to the right, (b) the current field is multi-line and there is data off-screen below it. The function data_behind() returns TRUE if the first (upper left hand) character position is off-screen (not being displayed). Finally, there is a function to restore the form window's cursor to the value expected by the forms driver: int pos_form_cursor(FORM *) /* form to be queried */ If your application changes the form window cursor, call this function before handing control back to the forms driver in order to re-synchronize it. Input Processing in the Forms Driver The function form_driver() handles virtualized input requests for form navigation, editing, and validation requests, just as menu_driver does for menus (see the section on menu input handling). int form_driver(FORM *form, /* form to pass input to */ int request); /* form request code */ Your input virtualization function needs to take input and then convert it to either an alphanumeric character (which is treated as data to be entered in the currently-selected field), or a forms processing request. The forms driver provides hooks (through input-validation and field-termination functions) with which your application code can check that the input taken by the driver matched what was expected. Page Navigation Requests These requests cause page-level moves through the form, triggering display of a new form screen. REQ_NEXT_PAGE Move to the next form page. REQ_PREV_PAGE Move to the previous form page. REQ_FIRST_PAGE Move to the first form page. REQ_LAST_PAGE Move to the last form page. These requests treat the list as cyclic; that is, REQ_NEXT_PAGE from the last page goes to the first, and REQ_PREV_PAGE from the first page goes to the last. Inter-Field Navigation Requests These requests handle navigation between fields on the same page. REQ_NEXT_FIELD Move to next field. REQ_PREV_FIELD Move to previous field. REQ_FIRST_FIELD Move to the first field. REQ_LAST_FIELD Move to the last field. REQ_SNEXT_FIELD Move to sorted next field. REQ_SPREV_FIELD Move to sorted previous field. REQ_SFIRST_FIELD Move to the sorted first field. REQ_SLAST_FIELD Move to the sorted last field. REQ_LEFT_FIELD Move left to field. REQ_RIGHT_FIELD Move right to field. REQ_UP_FIELD Move up to field. REQ_DOWN_FIELD Move down to field. These requests treat the list of fields on a page as cyclic; that is, REQ_NEXT_FIELD from the last field goes to the first, and REQ_PREV_FIELD from the first field goes to the last. The order of the fields for these (and the REQ_FIRST_FIELD and REQ_LAST_FIELD requests) is simply the order of the field pointers in the form array (as set up by new_form() or set_form_fields() It is also possible to traverse the fields as if they had been sorted in screen-position order, so the sequence goes left-to-right and top-to-bottom. To do this, use the second group of four sorted-movement requests. Finally, it is possible to move between fields using visual directions up, down, right, and left. To accomplish this, use the third group of four requests. Note, however, that the position of a form for purposes of these requests is its upper-left corner. For example, suppose you have a multi-line field B, and two single-line fields A and C on the same line with B, with A to the left of B and C to the right of B. A REQ_MOVE_RIGHT from A will go to B only if A, B, and C all share the same first line; otherwise it will skip over B to C. Intra-Field Navigation Requests These requests drive movement of the edit cursor within the currently selected field. REQ_NEXT_CHAR Move to next character. REQ_PREV_CHAR Move to previous character. REQ_NEXT_LINE Move to next line. REQ_PREV_LINE Move to previous line. REQ_NEXT_WORD Move to next word. REQ_PREV_WORD Move to previous word. REQ_BEG_FIELD Move to beginning of field. REQ_END_FIELD Move to end of field. REQ_BEG_LINE Move to beginning of line. REQ_END_LINE Move to end of line. REQ_LEFT_CHAR Move left in field. REQ_RIGHT_CHAR Move right in field. REQ_UP_CHAR Move up in field. REQ_DOWN_CHAR Move down in field. Each word is separated from the previous and next characters by whitespace. The commands to move to beginning and end of line or field look for the first or last non-pad character in their ranges. Scrolling Requests Fields that are dynamic and have grown and fields explicitly created with offscreen rows are scrollable. One-line fields scroll horizontally; multi-line fields scroll vertically. Most scrolling is triggered by editing and intra-field movement (the library scrolls the field to keep the cursor visible). It is possible to explicitly request scrolling with the following requests: REQ_SCR_FLINE Scroll vertically forward a line. REQ_SCR_BLINE Scroll vertically backward a line. REQ_SCR_FPAGE Scroll vertically forward a page. REQ_SCR_BPAGE Scroll vertically backward a page. REQ_SCR_FHPAGE Scroll vertically forward half a page. REQ_SCR_BHPAGE Scroll vertically backward half a page. REQ_SCR_FCHAR Scroll horizontally forward a character. REQ_SCR_BCHAR Scroll horizontally backward a character. REQ_SCR_HFLINE Scroll horizontally one field width forward. REQ_SCR_HBLINE Scroll horizontally one field width backward. REQ_SCR_HFHALF Scroll horizontally one half field width forward. REQ_SCR_HBHALF Scroll horizontally one half field width backward. For scrolling purposes, a page of a field is the height of its visible part. Editing Requests When you pass the forms driver an ASCII character, it is treated as a request to add the character to the field's data buffer. Whether this is an insertion or a replacement depends on the field's edit mode (insertion is the default. The following requests support editing the field and changing the edit mode: REQ_INS_MODE Set insertion mode. REQ_OVL_MODE Set overlay mode. REQ_NEW_LINE New line request (see below for explanation). REQ_INS_CHAR Insert space at character location. REQ_INS_LINE Insert blank line at character location. REQ_DEL_CHAR Delete character at cursor. REQ_DEL_PREV Delete previous word at cursor. REQ_DEL_LINE Delete line at cursor. REQ_DEL_WORD Delete word at cursor. REQ_CLR_EOL Clear to end of line. REQ_CLR_EOF Clear to end of field. REQ_CLEAR_FIELD Clear entire field. The behavior of the REQ_NEW_LINE and REQ_DEL_PREV requests is complicated and partly controlled by a pair of forms options. The special cases are triggered when the cursor is at the beginning of a field, or on the last line of the field. First, we consider REQ_NEW_LINE: The normal behavior of REQ_NEW_LINE in insert mode is to break the current line at the position of the edit cursor, inserting the portion of the current line after the cursor as a new line following the current and moving the cursor to the beginning of that new line (you may think of this as inserting a newline in the field buffer). The normal behavior of REQ_NEW_LINE in overlay mode is to clear the current line from the position of the edit cursor to end of line. The cursor is then moved to the beginning of the next line. However, REQ_NEW_LINE at the beginning of a field, or on the last line of a field, instead does a REQ_NEXT_FIELD. O_NL_OVERLOAD option is off, this special action is disabled. Now, let us consider REQ_DEL_PREV: The normal behavior of REQ_DEL_PREV is to delete the previous character. If insert mode is on, and the cursor is at the start of a line, and the text on that line will fit on the previous one, it instead appends the contents of the current line to the previous one and deletes the current line (you may think of this as deleting a newline from the field buffer). However, REQ_DEL_PREV at the beginning of a field is instead treated as a REQ_PREV_FIELD. If the O_BS_OVERLOAD option is off, this special action is disabled and the forms driver just returns E_REQUEST_DENIED. See Form Options for discussion of how to set and clear the overload options. Order Requests If the type of your field is ordered, and has associated functions for getting the next and previous values of the type from a given value, there are requests that can fetch that value into the field buffer: REQ_NEXT_CHOICE Place the successor value of the current value in the buffer. REQ_PREV_CHOICE Place the predecessor value of the current value in the buffer. Of the built-in field types, only TYPE_ENUM has built-in successor and predecessor functions. When you define a field type of your own (see Custom Validation Types), you can associate our own ordering functions. Application Commands Form requests are represented as integers above the curses value greater than KEY_MAX and less than or equal to the constant MAX_COMMAND. If your input-virtualization routine returns a value above MAX_COMMAND, the forms driver will ignore it. Field Change Hooks It is possible to set function hooks to be executed whenever the current field or form changes. Here are the functions that support this: typedef void (*HOOK)(); /* pointer to function returning void */ int set_form_init(FORM *form, /* form to alter */ HOOK hook); /* initialization hook */ HOOK form_init(FORM *form); /* form to query */ int set_form_term(FORM *form, /* form to alter */ HOOK hook); /* termination hook */ HOOK form_term(FORM *form); /* form to query */ int set_field_init(FORM *form, /* form to alter */ HOOK hook); /* initialization hook */ HOOK field_init(FORM *form); /* form to query */ int set_field_term(FORM *form, /* form to alter */ HOOK hook); /* termination hook */ HOOK field_term(FORM *form); /* form to query */ These functions allow you to either set or query four different hooks. In each of the set functions, the second argument should be the address of a hook function. These functions differ only in the timing of the hook call. form_init This hook is called when the form is posted; also, just after each page change operation. field_init This hook is called when the form is posted; also, just after each field change field_term This hook is called just after field validation; that is, just before the field is altered. It is also called when the form is unposted. form_term This hook is called when the form is unposted; also, just before each page change operation. Calls to these hooks may be triggered 1. When user editing requests are processed by the forms driver 2. When the current page is changed by set_current_field() call 3. When the current field is changed by a set_form_page() call See Field Change Commands for discussion of the latter two cases. You can set a default hook for all fields by passing one of the set functions a NULL first argument. You can disable any of these hooks by (re)setting them to NULL, the default value. Field Change Commands Normally, navigation through the form will be driven by the user's input requests. But sometimes it is useful to be able to move the focus for editing and viewing under control of your application, or ask which field it currently is in. The following functions help you accomplish this: int set_current_field(FORM *form, /* form to alter */ FIELD *field); /* field to shift to */ FIELD *current_field(FORM *form); /* form to query */ int field_index(FORM *form, /* form to query */ FIELD *field); /* field to get index of */ The function field_index() returns the index of the given field in the given form's field array (the array passed to new_form() or set_form_fields()). The initial current field of a form is the first active field on the first page. The function set_form_fields() resets this. It is also possible to move around by pages. int set_form_page(FORM *form, /* form to alter */ int page); /* page to go to (0-origin) */ int form_page(FORM *form); /* return form's current page */ The initial page of a newly-created form is 0. The function set_form_fields() resets this. Form Options Like fields, forms may have control option bits. They can be changed or queried with these functions: int set_form_opts(FORM *form, /* form to alter */ int attr); /* attribute to set */ int form_opts_on(FORM *form, /* form to alter */ int attr); /* attributes to turn on */ int form_opts_off(FORM *form, /* form to alter */ int attr); /* attributes to turn off */ int form_opts(FORM *form); /* form to query */ By default, all options are on. Here are the available option bits: O_NL_OVERLOAD Enable overloading of REQ_NEW_LINE as described in Editing Requests. The value of this option is ignored on dynamic fields that have not reached their size limit; these have no last line, so the circumstances for triggering a REQ_NEXT_FIELD never arise. O_BS_OVERLOAD Enable overloading of REQ_DEL_PREV as described in Editing Requests. The option values are bit-masks and can be composed with logical-or in the obvious way. Custom Validation Types The form library gives you the capability to define custom validation types of your own. Further, the optional additional arguments of set_field_type effectively allow you to parameterize validation types. Most of the complications in the validation-type interface have to do with the handling of the additional arguments within custom validation functions. Union Types The simplest way to create a custom data type is to compose it from two preexisting ones: FIELD *link_fieldtype(FIELDTYPE *type1, FIELDTYPE *type2); This function creates a field type that will accept any of the values legal for either of its argument field types (which may be either predefined or programmer-defined). If a set_field_type() call later requires arguments, the new composite type expects all arguments for the first type, than all arguments for the second. Order functions (see Order Requests) associated with the component types will work on the composite; what it does is check the validation function for the first type, then for the second, to figure what type the buffer contents should be treated as. New Field Types To create a field type from scratch, you need to specify one or both of the following things: * A character-validation function, to check each character as it is entered. * A field-validation function to be applied on exit from the field. Here's how you do that: typedef int (*HOOK)(); /* pointer to function returning int */ FIELDTYPE *new_fieldtype(HOOK f_validate, /* field validator */ HOOK c_validate) /* character validator */ int free_fieldtype(FIELDTYPE *ftype); /* type to free */ At least one of the arguments of new_fieldtype() must be non-NULL. The forms driver will automatically call the new type's validation functions at appropriate points in processing a field of the new type. The function free_fieldtype() deallocates the argument fieldtype, freeing all storage associated with it. Normally, a field validator is called when the user attempts to leave the field. Its first argument is a field pointer, from which it can get to field buffer 0 and test it. If the function returns TRUE, the operation succeeds; if it returns FALSE, the edit cursor stays in the field. A character validator gets the character passed in as a first argument. It too should return TRUE if the character is valid, FALSE otherwise. Validation Function Arguments Your field- and character- validation functions will be passed a second argument as well. This second argument is the address of a structure (which we'll call a pile) built from any of the field-type-specific arguments passed to set_field_type(). If no such arguments are defined for the field type, this pile pointer argument will be NULL. In order to arrange for such arguments to be passed to your validation functions, you must associate a small set of storage-management functions with the type. The forms driver will use these to synthesize a pile from the trailing arguments of each set_field_type() argument, and a pointer to the pile will be passed to the validation functions. Here is how you make the association: typedef char *(*PTRHOOK)(); /* pointer to function returning (char *) */ typedef void (*VOIDHOOK)(); /* pointer to function returning void */ int set_fieldtype_arg(FIELDTYPE *type, /* type to alter */ PTRHOOK make_str, /* make structure from args */ PTRHOOK copy_str, /* make copy of structure */ VOIDHOOK free_str); /* free structure storage */ Here is how the storage-management hooks are used: make_str This function is called by set_field_type(). It gets one argument, a va_list of the type-specific arguments passed to set_field_type(). It is expected to return a pile pointer to a data structure that encapsulates those arguments. copy_str This function is called by form library functions that allocate new field instances. It is expected to take a pile pointer, copy the pile to allocated storage, and return the address of the pile copy. free_str This function is called by field- and type-deallocation routines in the library. It takes a pile pointer argument, and is expected to free the storage of that pile. The make_str and copy_str functions may return NULL to signal allocation failure. The library routines will that call them will return error indication when this happens. Thus, your validation functions should never see a NULL file pointer and need not check specially for it. Order Functions For Custom Types Some custom field types are simply ordered in the same well-defined way that TYPE_ENUM is. For such types, it is possible to define successor and predecessor functions to support the REQ_NEXT_CHOICE and REQ_PREV_CHOICE requests. Here's how: typedef int (*INTHOOK)(); /* pointer to function returning int */ int set_fieldtype_arg(FIELDTYPE *type, /* type to alter */ INTHOOK succ, /* get successor value */ INTHOOK pred); /* get predecessor value */ The successor and predecessor arguments will each be passed two arguments; a field pointer, and a pile pointer (as for the validation functions). They are expected to use the function field_buffer() to read the current value, and set_field_buffer() on buffer 0 to set the next or previous value. Either hook may return TRUE to indicate success (a legal next or previous value was set) or FALSE to indicate failure. Avoiding Problems The interface for defining custom types is complicated and tricky. Rather than attempting to create a custom type entirely from scratch, you should start by studying the library source code for whichever of the pre-defined types seems to be closest to what you want. Use that code as a model, and evolve it towards what you really want. You will avoid many problems and annoyances that way. The code in the ncurses library has been specifically exempted from the package copyright to support this. If your custom type defines order functions, have do something intuitive with a blank field. A useful convention is to make the successor of a blank field the types minimum value, and its predecessor the maximum. ncurses-6.0-20160213/doc/html/0000755000175100001440000000000012653207013014164 5ustar tomusersncurses-6.0-20160213/doc/html/hackguide.html0000644000175100001440000010554312145536516017017 0ustar tomusers A Hacker's Guide to Ncurses Internals

A Hacker's Guide to NCURSES

Contents

Abstract

This document is a hacker's tour of the ncurses library and utilities. It discusses design philosophy, implementation methods, and the conventions used for coding and documentation. It is recommended reading for anyone who is interested in porting, extending or improving the package.

Objective of the Package

The objective of the ncurses package is to provide a free software API for character-cell terminals and terminal emulators with the following characteristics:
  • Source-compatible with historical curses implementations (including the original BSD curses and System V curses.
  • Conformant with the XSI Curses standard issued as part of XPG4 by X/Open.
  • High-quality -- stable and reliable code, wide portability, good packaging, superior documentation.
  • Featureful -- should eliminate as much of the drudgery of C interface programming as possible, freeing programmers to think at a higher level of design.
These objectives are in priority order. So, for example, source compatibility with older version must trump featurefulness -- we cannot add features if it means breaking the portion of the API corresponding to historical curses versions.

Why System V Curses?

We used System V curses as a model, reverse-engineering their API, in order to fulfill the first two objectives.

System V curses implementations can support BSD curses programs with just a recompilation, so by capturing the System V API we also capture BSD's.

More importantly for the future, the XSI Curses standard issued by X/Open is explicitly and closely modeled on System V. So conformance with System V took us most of the way to base-level XSI conformance.

How to Design Extensions

The third objective (standards conformance) requires that it be easy to condition source code using ncurses so that the absence of nonstandard extensions does not break the code.

Accordingly, we have a policy of associating with each nonstandard extension a feature macro, so that ncurses client code can use this macro to condition in or out the code that requires the ncurses extension.

For example, there is a macro NCURSES_MOUSE_VERSION which XSI Curses does not define, but which is defined in the ncurses library header. You can use this to condition the calls to the mouse API calls.

Portability and Configuration

Code written for ncurses may assume an ANSI-standard C compiler and POSIX-compatible OS interface. It may also assume the presence of a System-V-compatible select(2) call.

We encourage (but do not require) developers to make the code friendly to less-capable UNIX environments wherever possible.

We encourage developers to support OS-specific optimizations and methods not available under POSIX/ANSI, provided only that:

  • All such code is properly conditioned so the build process does not attempt to compile it under a plain ANSI/POSIX environment.
  • Adding such implementation methods does not introduce incompatibilities in the ncurses API between platforms.
We use GNU autoconf(1) as a tool to deal with portability issues. The right way to leverage an OS-specific feature is to modify the autoconf specification files (configure.in and aclocal.m4) to set up a new feature macro, which you then use to condition your code.

Documentation Conventions

There are three kinds of documentation associated with this package. Each has a different preferred format:
  • Package-internal files (README, INSTALL, TO-DO etc.)
  • Manual pages.
  • Everything else (i.e., narrative documentation).
Our conventions are simple:
  1. Maintain package-internal files in plain text. The expected viewer for them more(1) or an editor window; there's no point in elaborate mark-up.
  2. Mark up manual pages in the man macros. These have to be viewable through traditional man(1) programs.
  3. Write everything else in HTML.
When in doubt, HTMLize a master and use lynx(1) to generate plain ASCII (as we do for the announcement document).

The reason for choosing HTML is that it's (a) well-adapted for on-line browsing through viewers that are everywhere; (b) more easily readable as plain text than most other mark-ups, if you don't have a viewer; and (c) carries enough information that you can generate a nice-looking printed version from it. Also, of course, it make exporting things like the announcement document to WWW pretty trivial.

How to Report Bugs

The reporting address for bugs is bug-ncurses@gnu.org. This is a majordomo list; to join, write to bug-ncurses-request@gnu.org with a message containing the line:
             subscribe <name>@<host.domain>
The ncurses code is maintained by a small group of volunteers. While we try our best to fix bugs promptly, we simply don't have a lot of hours to spend on elementary hand-holding. We rely on intelligent cooperation from our users. If you think you have found a bug in ncurses, there are some steps you can take before contacting us that will help get the bug fixed quickly.

In order to use our bug-fixing time efficiently, we put people who show us they've taken these steps at the head of our queue. This means that if you don't, you'll probably end up at the tail end and have to wait a while.

  1. Develop a recipe to reproduce the bug.

    Bugs we can reproduce are likely to be fixed very quickly, often within days. The most effective single thing you can do to get a quick fix is develop a way we can duplicate the bad behavior -- ideally, by giving us source for a small, portable test program that breaks the library. (Even better is a keystroke recipe using one of the test programs provided with the distribution.)

  2. Try to reproduce the bug on a different terminal type.

    In our experience, most of the behaviors people report as library bugs are actually due to subtle problems in terminal descriptions. This is especially likely to be true if you're using a traditional asynchronous terminal or PC-based terminal emulator, rather than xterm or a UNIX console entry.

    It's therefore extremely helpful if you can tell us whether or not your problem reproduces on other terminal types. Usually you'll have both a console type and xterm available; please tell us whether or not your bug reproduces on both.

    If you have xterm available, it is also good to collect xterm reports for different window sizes. This is especially true if you normally use an unusual xterm window size -- a surprising number of the bugs we've seen are either triggered or masked by these.

  3. Generate and examine a trace file for the broken behavior.

    Recompile your program with the debugging versions of the libraries. Insert a trace() call with the argument set to TRACE_UPDATE. (See "Writing Programs with NCURSES" for details on trace levels.) Reproduce your bug, then look at the trace file to see what the library was actually doing.

    Another frequent cause of apparent bugs is application coding errors that cause the wrong things to be put on the virtual screen. Looking at the virtual-screen dumps in the trace file will tell you immediately if this is happening, and save you from the possible embarrassment of being told that the bug is in your code and is your problem rather than ours.

    If the virtual-screen dumps look correct but the bug persists, it's possible to crank up the trace level to give more and more information about the library's update actions and the control sequences it issues to perform them. The test directory of the distribution contains a tool for digesting these logs to make them less tedious to wade through.

    Often you'll find terminfo problems at this stage by noticing that the escape sequences put out for various capabilities are wrong. If not, you're likely to learn enough to be able to characterize any bug in the screen-update logic quite exactly.

  4. Report details and symptoms, not just interpretations.

    If you do the preceding two steps, it is very likely that you'll discover the nature of the problem yourself and be able to send us a fix. This will create happy feelings all around and earn you good karma for the first time you run into a bug you really can't characterize and fix yourself.

    If you're still stuck, at least you'll know what to tell us. Remember, we need details. If you guess about what is safe to leave out, you are too likely to be wrong.

    If your bug produces a bad update, include a trace file. Try to make the trace at the least voluminous level that pins down the bug. Logs that have been through tracemunch are OK, it doesn't throw away any information (actually they're better than un-munched ones because they're easier to read).

    If your bug produces a core-dump, please include a symbolic stack trace generated by gdb(1) or your local equivalent.

    Tell us about every terminal on which you've reproduced the bug -- and every terminal on which you can't. Ideally, sent us terminfo sources for all of these (yours might differ from ours).

    Include your ncurses version and your OS/machine type, of course! You can find your ncurses version in the curses.h file.

If your problem smells like a logic error or in cursor movement or scrolling or a bad capability, there are a couple of tiny test frames for the library algorithms in the progs directory that may help you isolate it. These are not part of the normal build, but do have their own make productions.

The most important of these is mvcur, a test frame for the cursor-movement optimization code. With this program, you can see directly what control sequences will be emitted for any given cursor movement or scroll/insert/delete operations. If you think you've got a bad capability identified, you can disable it and test again. The program is command-driven and has on-line help.

If you think the vertical-scroll optimization is broken, or just want to understand how it works better, build hashmap and read the header comments of hardscroll.c and hashmap.c; then try it out. You can also test the hardware-scrolling optimization separately with hardscroll.

A Tour of the Ncurses Library

Library Overview

Most of the library is superstructure -- fairly trivial convenience interfaces to a small set of basic functions and data structures used to manipulate the virtual screen (in particular, none of this code does any I/O except through calls to more fundamental modules described below). The files
lib_addch.c lib_bkgd.c lib_box.c lib_chgat.c lib_clear.c lib_clearok.c lib_clrbot.c lib_clreol.c lib_colorset.c lib_data.c lib_delch.c lib_delwin.c lib_echo.c lib_erase.c lib_gen.c lib_getstr.c lib_hline.c lib_immedok.c lib_inchstr.c lib_insch.c lib_insdel.c lib_insstr.c lib_instr.c lib_isendwin.c lib_keyname.c lib_leaveok.c lib_move.c lib_mvwin.c lib_overlay.c lib_pad.c lib_printw.c lib_redrawln.c lib_scanw.c lib_screen.c lib_scroll.c lib_scrollok.c lib_scrreg.c lib_set_term.c lib_slk.c lib_slkatr_set.c lib_slkatrof.c lib_slkatron.c lib_slkatrset.c lib_slkattr.c lib_slkclear.c lib_slkcolor.c lib_slkinit.c lib_slklab.c lib_slkrefr.c lib_slkset.c lib_slktouch.c lib_touch.c lib_unctrl.c lib_vline.c lib_wattroff.c lib_wattron.c lib_window.c
are all in this category. They are very unlikely to need change, barring bugs or some fundamental reorganization in the underlying data structures.

These files are used only for debugging support:

lib_trace.c lib_traceatr.c lib_tracebits.c lib_tracechr.c lib_tracedmp.c lib_tracemse.c trace_buf.c
It is rather unlikely you will ever need to change these, unless you want to introduce a new debug trace level for some reason.

There is another group of files that do direct I/O via tputs(), computations on the terminal capabilities, or queries to the OS environment, but nevertheless have only fairly low complexity. These include:

lib_acs.c lib_beep.c lib_color.c lib_endwin.c lib_initscr.c lib_longname.c lib_newterm.c lib_options.c lib_termcap.c lib_ti.c lib_tparm.c lib_tputs.c lib_vidattr.c read_entry.c.
They are likely to need revision only if ncurses is being ported to an environment without an underlying terminfo capability representation.

These files have serious hooks into the tty driver and signal facilities:

lib_kernel.c lib_baudrate.c lib_raw.c lib_tstp.c lib_twait.c
If you run into porting snafus moving the package to another UNIX, the problem is likely to be in one of these files. The file lib_print.c uses sleep(2) and also falls in this category.

Almost all of the real work is done in the files

hardscroll.c hashmap.c lib_addch.c lib_doupdate.c lib_getch.c lib_mouse.c lib_mvcur.c lib_refresh.c lib_setup.c lib_vidattr.c
Most of the algorithmic complexity in the library lives in these files. If there is a real bug in ncurses itself, it's probably here. We'll tour some of these files in detail below (see The Engine Room).

Finally, there is a group of files that is actually most of the terminfo compiler. The reason this code lives in the ncurses library is to support fallback to /etc/termcap. These files include

alloc_entry.c captoinfo.c comp_captab.c comp_error.c comp_hash.c comp_parse.c comp_scan.c parse_entry.c read_termcap.c write_entry.c
We'll discuss these in the compiler tour.

The Engine Room

Keyboard Input

All ncurses input funnels through the function wgetch(), defined in lib_getch.c. This function is tricky; it has to poll for keyboard and mouse events and do a running match of incoming input against the set of defined special keys.

The central data structure in this module is a FIFO queue, used to match multiple-character input sequences against special-key capabilities; also to implement pushback via ungetch().

The wgetch() code distinguishes between function key sequences and the same sequences typed manually by doing a timed wait after each input character that could lead a function key sequence. If the entire sequence takes less than 1 second, it is assumed to have been generated by a function key press.

Hackers bruised by previous encounters with variant select(2) calls may find the code in lib_twait.c interesting. It deals with the problem that some BSD selects don't return a reliable time-left value. The function timed_wait() effectively simulates a System V select.

Mouse Events

If the mouse interface is active, wgetch() polls for mouse events each call, before it goes to the keyboard for input. It is up to lib_mouse.c how the polling is accomplished; it may vary for different devices.

Under xterm, however, mouse event notifications come in via the keyboard input stream. They are recognized by having the kmous capability as a prefix. This is kind of klugey, but trying to wire in recognition of a mouse key prefix without going through the function-key machinery would be just too painful, and this turns out to imply having the prefix somewhere in the function-key capabilities at terminal-type initialization.

This kluge only works because kmous isn't actually used by any historic terminal type or curses implementation we know of. Best guess is it's a relic of some forgotten experiment in-house at Bell Labs that didn't leave any traces in the publicly-distributed System V terminfo files. If System V or XPG4 ever gets serious about using it again, this kluge may have to change.

Here are some more details about mouse event handling:

The lib_mouse()code is logically split into a lower level that accepts event reports in a device-dependent format and an upper level that parses mouse gestures and filters events. The mediating data structure is a circular queue of event structures.

Functionally, the lower level's job is to pick up primitive events and put them on the circular queue. This can happen in one of two ways: either (a) _nc_mouse_event() detects a series of incoming mouse reports and queues them, or (b) code in lib_getch.c detects the kmous prefix in the keyboard input stream and calls _nc_mouse_inline to queue up a series of adjacent mouse reports.

In either case, _nc_mouse_parse() should be called after the series is accepted to parse the digested mouse reports (low-level events) into a gesture (a high-level or composite event).

Output and Screen Updating

With the single exception of character echoes during a wgetnstr() call (which simulates cooked-mode line editing in an ncurses window), the library normally does all its output at refresh time.

The main job is to go from the current state of the screen (as represented in the curscr window structure) to the desired new state (as represented in the newscr window structure), while doing as little I/O as possible.

The brains of this operation are the modules hashmap.c, hardscroll.c and lib_doupdate.c; the latter two use lib_mvcur.c. Essentially, what happens looks like this:

The hashmap.c module tries to detect vertical motion changes between the real and virtual screens. This information is represented by the oldindex members in the newscr structure. These are modified by vertical-motion and clear operations, and both are re-initialized after each update. To this change-journalling information, the hashmap code adds deductions made using a modified Heckel algorithm on hash values generated from the line contents.

The hardscroll.c module computes an optimum set of scroll, insertion, and deletion operations to make the indices match. It calls _nc_mvcur_scrolln() in lib_mvcur.c to do those motions.

Then lib_doupdate.c goes to work. Its job is to do line-by-line transformations of curscr lines to newscr lines. Its main tool is the routine mvcur() in lib_mvcur.c. This routine does cursor-movement optimization, attempting to get from given screen location A to given location B in the fewest output characters possible.

If you want to work on screen optimizations, you should use the fact that (in the trace-enabled version of the library) enabling the TRACE_TIMES trace level causes a report to be emitted after each screen update giving the elapsed time and a count of characters emitted during the update. You can use this to tell when an update optimization improves efficiency.

In the trace-enabled version of the library, it is also possible to disable and re-enable various optimizations at runtime by tweaking the variable _nc_optimize_enable. See the file include/curses.h.in for mask values, near the end.

The Forms and Menu Libraries

The forms and menu libraries should work reliably in any environment you can port ncurses to. The only portability issue anywhere in them is what flavor of regular expressions the built-in form field type TYPE_REGEXP will recognize.

The configuration code prefers the POSIX regex facility, modeled on System V's, but will settle for BSD regexps if the former isn't available.

Historical note: the panels code was written primarily to assist in porting u386mon 2.0 (comp.sources.misc v14i001-4) to systems lacking panels support; u386mon 2.10 and beyond use it. This version has been slightly cleaned up for ncurses.

A Tour of the Terminfo Compiler

The ncurses implementation of tic is rather complex internally; it has to do a trying combination of missions. This starts with the fact that, in addition to its normal duty of compiling terminfo sources into loadable terminfo binaries, it has to be able to handle termcap syntax and compile that too into terminfo entries.

The implementation therefore starts with a table-driven, dual-mode lexical analyzer (in comp_scan.c). The lexer chooses its mode (termcap or terminfo) based on the first `,' or `:' it finds in each entry. The lexer does all the work of recognizing capability names and values; the grammar above it is trivial, just "parse entries till you run out of file".

Translation of Non-use Capabilities

Translation of most things besides use capabilities is pretty straightforward. The lexical analyzer's tokenizer hands each capability name to a hash function, which drives a table lookup. The table entry yields an index which is used to look up the token type in another table, and controls interpretation of the value.

One possibly interesting aspect of the implementation is the way the compiler tables are initialized. All the tables are generated by various awk/sed/sh scripts from a master table include/Caps; these scripts actually write C initializers which are linked to the compiler. Furthermore, the hash table is generated in the same way, so it doesn't have to be generated at compiler startup time (another benefit of this organization is that the hash table can be in shareable text space).

Thus, adding a new capability is usually pretty trivial, just a matter of adding one line to the include/Caps file. We'll have more to say about this in the section on Source-Form Translation.

Use Capability Resolution

The background problem that makes tic tricky isn't the capability translation itself, it's the resolution of use capabilities. Older versions would not handle forward use references for this reason (that is, a using terminal always had to follow its use target in the source file). By doing this, they got away with a simple implementation tactic; compile everything as it blows by, then resolve uses from compiled entries.

This won't do for ncurses. The problem is that that the whole compilation process has to be embeddable in the ncurses library so that it can be called by the startup code to translate termcap entries on the fly. The embedded version can't go promiscuously writing everything it translates out to disk -- for one thing, it will typically be running with non-root permissions.

So our tic is designed to parse an entire terminfo file into a doubly-linked circular list of entry structures in-core, and then do use resolution in-memory before writing everything out. This design has other advantages: it makes forward and back use-references equally easy (so we get the latter for free), and it makes checking for name collisions before they're written out easy to do.

And this is exactly how the embedded version works. But the stand-alone user-accessible version of tic partly reverts to the historical strategy; it writes to disk (not keeping in core) any entry with no use references.

This is strictly a core-economy kluge, implemented because the terminfo master file is large enough that some core-poor systems swap like crazy when you compile it all in memory...there have been reports of this process taking three hours, rather than the twenty seconds or less typical on the author's development box.

So. The executable tic passes the entry-parser a hook that immediately writes out the referenced entry if it has no use capabilities. The compiler main loop refrains from adding the entry to the in-core list when this hook fires. If some other entry later needs to reference an entry that got written immediately, that's OK; the resolution code will fetch it off disk when it can't find it in core.

Name collisions will still be detected, just not as cleanly. The write_entry() code complains before overwriting an entry that postdates the time of tic's first call to write_entry(), Thus it will complain about overwriting entries newly made during the tic run, but not about overwriting ones that predate it.

Source-Form Translation

Another use of tic is to do source translation between various termcap and terminfo formats. There are more variants out there than you might think; the ones we know about are described in the captoinfo(1) manual page.

The translation output code (dump_entry() in ncurses/dump_entry.c) is shared with the infocmp(1) utility. It takes the same internal representation used to generate the binary form and dumps it to standard output in a specified format.

The include/Caps file has a header comment describing ways you can specify source translations for nonstandard capabilities just by altering the master table. It's possible to set up capability aliasing or tell the compiler to plain ignore a given capability without writing any C code at all.

For circumstances where you need to do algorithmic translation, there are functions in parse_entry.c called after the parse of each entry that are specifically intended to encapsulate such translations. This, for example, is where the AIX box1 capability get translated to an acsc string.

Other Utilities

The infocmp utility is just a wrapper around the same entry-dumping code used by tic for source translation. Perhaps the one interesting aspect of the code is the use of a predicate function passed in to dump_entry() to control which capabilities are dumped. This is necessary in order to handle both the ordinary De-compilation case and entry difference reporting.

The tput and clear utilities just do an entry load followed by a tputs() of a selected capability.

Style Tips for Developers

See the TO-DO file in the top-level directory of the source distribution for additions that would be particularly useful.

The prefix _nc_ should be used on library public functions that are not part of the curses API in order to prevent pollution of the application namespace. If you have to add to or modify the function prototypes in curses.h.in, read ncurses/MKlib_gen.sh first so you can avoid breaking XSI conformance. Please join the ncurses mailing list. See the INSTALL file in the top level of the distribution for details on the list.

Look for the string FIXME in source files to tag minor bugs and potential problems that could use fixing.

Don't try to auto-detect OS features in the main body of the C code. That's the job of the configuration system.

To hold down complexity, do make your code data-driven. Especially, if you can drive logic from a table filtered out of include/Caps, do it. If you find you need to augment the data in that file in order to generate the proper table, that's still preferable to ad-hoc code -- that's why the fifth field (flags) is there.

Have fun!

Porting Hints

The following notes are intended to be a first step towards DOS and Macintosh ports of the ncurses libraries.

The following library modules are `pure curses'; they operate only on the curses internal structures, do all output through other curses calls (not including tputs() and putp()) and do not call any other UNIX routines such as signal(2) or the stdio library. Thus, they should not need to be modified for single-terminal ports.

lib_addch.c lib_addstr.c lib_bkgd.c lib_box.c lib_clear.c lib_clrbot.c lib_clreol.c lib_delch.c lib_delwin.c lib_erase.c lib_inchstr.c lib_insch.c lib_insdel.c lib_insstr.c lib_keyname.c lib_move.c lib_mvwin.c lib_newwin.c lib_overlay.c lib_pad.c lib_printw.c lib_refresh.c lib_scanw.c lib_scroll.c lib_scrreg.c lib_set_term.c lib_touch.c lib_tparm.c lib_tputs.c lib_unctrl.c lib_window.c panel.c

This module is pure curses, but calls outstr():

lib_getstr.c

These modules are pure curses, except that they use tputs() and putp():

lib_beep.c lib_color.c lib_endwin.c lib_options.c lib_slk.c lib_vidattr.c

This modules assist in POSIX emulation on non-POSIX systems:

sigaction.c
signal calls
The following source files will not be needed for a single-terminal-type port.
alloc_entry.c captoinfo.c clear.c comp_captab.c comp_error.c comp_hash.c comp_main.c comp_parse.c comp_scan.c dump_entry.c infocmp.c parse_entry.c read_entry.c tput.c write_entry.c

The following modules will use open()/read()/write()/close()/lseek() on files, but no other OS calls.

lib_screen.c
used to read/write screen dumps
lib_trace.c
used to write trace data to the logfile
Modules that would have to be modified for a port start here:

The following modules are `pure curses' but contain assumptions inappropriate for a memory-mapped port.

lib_longname.c
assumes there may be multiple terminals
lib_acs.c
assumes acs_map as a double indirection
lib_mvcur.c
assumes cursor moves have variable cost
lib_termcap.c
assumes there may be multiple terminals
lib_ti.c
assumes there may be multiple terminals
The following modules use UNIX-specific calls:
lib_doupdate.c
input checking
lib_getch.c
read()
lib_initscr.c
getenv()
lib_newterm.c
lib_baudrate.c
lib_kernel.c
various tty-manipulation and system calls
lib_raw.c
various tty-manipulation calls
lib_setup.c
various tty-manipulation calls
lib_restart.c
various tty-manipulation calls
lib_tstp.c
signal-manipulation calls
lib_twait.c
gettimeofday(), select().

Eric S. Raymond <esr@snark.thyrsus.com>
(Note: This is not the bug address!) ncurses-6.0-20160213/doc/html/ada/0000755000175100001440000000000012561447144014722 5ustar tomusersncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-panels-user_data__adb.htm0000644000175100001440000002511712340214310026747 0ustar tomusers terminal_interface-curses-panels-user_data.adb

File : terminal_interface-curses-panels-user_data.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                 Terminal_Interface.Curses.Panels.User_Data               --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux;
use  Terminal_Interface.Curses.Aux;
with Terminal_Interface.Curses.Panels;
use  Terminal_Interface.Curses.Panels;

package body Terminal_Interface.Curses.Panels.User_Data is

   use type Interfaces.C.int;

   procedure Set_User_Data (Pan  : Panel;
                            Data : User_Access)
   is
      function Set_Panel_Userptr (Pan  : Panel;
                                  Addr : User_Access) return C_Int;
      pragma Import (C, Set_Panel_Userptr, "set_panel_userptr");
   begin
      if Set_Panel_Userptr (Pan, Data) = Curses_Err then
         raise Panel_Exception;
      end if;
   end Set_User_Data;

   function Get_User_Data (Pan  : Panel) return User_Access
   is
      function Panel_Userptr (Pan : Panel) return User_Access;
      pragma Import (C, Panel_Userptr, "panel_userptr");
   begin
      return Panel_Userptr (Pan);
   end Get_User_Data;

   procedure Get_User_Data (Pan  : Panel;
                            Data : out User_Access)
   is
   begin
      Data := Get_User_Data (Pan);
   end Get_User_Data;

end Terminal_Interface.Curses.Panels.User_Data;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-intfield__ads.htm0000644000175100001440000001642112340214310030766 0ustar tomusers terminal_interface-curses-forms-field_types-intfield.ads

File : terminal_interface-curses-forms-field_types-intfield.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--            Terminal_Interface.Curses.Forms.Field_Types.IntField          --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.IntField is
   pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.IntField);

   type Integer_Field is new Field_Type with
      record
         Precision   : Natural;
         Lower_Limit : Integer;
         Upper_Limit : Integer;
      end record;

   procedure Set_Field_Type (Fld : Field;
                             Typ : Integer_Field);
   pragma Inline (Set_Field_Type);

end Terminal_Interface.Curses.Forms.Field_Types.IntField;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-user-choice__adb.htm0000644000175100001440000003563012340214310031360 0ustar tomusers terminal_interface-curses-forms-field_types-user-choice.adb

File : terminal_interface-curses-forms-field_types-user-choice.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--          Terminal_Interface.Curses.Forms.Field_Types.User.Choice         --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.20 @
--  @Date: 2014/05/24 21:31:05 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with System.Address_To_Access_Conversions;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms.Field_Types.User.Choice is

   package Argument_Conversions is
      new System.Address_To_Access_Conversions (Argument);

   function Generic_Next (Fld : Field;
                          Usr : System.Address) return Curses_Bool
   is
      Result : Boolean;
      Udf    : constant User_Defined_Field_Type_With_Choice_Access :=
        User_Defined_Field_Type_With_Choice_Access
        (Argument_Access (Argument_Conversions.To_Pointer (Usr)).all.Typ);
   begin
      Result := Next (Fld, Udf.all);
      return Curses_Bool (Boolean'Pos (Result));
   end Generic_Next;

   function Generic_Prev (Fld : Field;
                          Usr : System.Address) return Curses_Bool
   is
      Result : Boolean;
      Udf    : constant User_Defined_Field_Type_With_Choice_Access :=
        User_Defined_Field_Type_With_Choice_Access
        (Argument_Access (Argument_Conversions.To_Pointer (Usr)).all.Typ);
   begin
      Result := Previous (Fld, Udf.all);
      return Curses_Bool (Boolean'Pos (Result));
   end Generic_Prev;

   --  -----------------------------------------------------------------------
   --
   function C_Generic_Choice return C_Field_Type
   is
      Res : Eti_Error;
      T   : C_Field_Type;
   begin
      if M_Generic_Choice = Null_Field_Type then
         T := New_Fieldtype (Generic_Field_Check'Access,
                             Generic_Char_Check'Access);
         if T = Null_Field_Type then
            raise Form_Exception;
         else
            Res := Set_Fieldtype_Arg (T,
                                      Make_Arg'Access,
                                      Copy_Arg'Access,
                                      Free_Arg'Access);
            Eti_Exception (Res);

            Res := Set_Fieldtype_Choice (T,
                                         Generic_Next'Access,
                                         Generic_Prev'Access);
            Eti_Exception (Res);
         end if;
         M_Generic_Choice := T;
      end if;
      pragma Assert (M_Generic_Choice /= Null_Field_Type);
      return M_Generic_Choice;
   end C_Generic_Choice;

end Terminal_Interface.Curses.Forms.Field_Types.User.Choice;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-putwin__adb.htm0000644000175100001440000002325012340214310025042 0ustar tomusers terminal_interface-curses-putwin.adb

File : terminal_interface-curses-putwin.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                    Terminal_Interface.Curses.PutWin                      --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 2000 Free Software Foundation, Inc.                        --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.3 @
--  Binding Version 01.00

with Ada.Streams.Stream_IO.C_Streams;
with Interfaces.C_Streams;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.PutWin is

   package ICS renames Interfaces.C_Streams;
   package ACS renames Ada.Streams.Stream_IO.C_Streams;
   use type C_Int;

   procedure Put_Window (Win  : Window;
                         File : Ada.Streams.Stream_IO.File_Type) is
      function putwin (Win : Window; f : ICS.FILEs) return C_Int;
      pragma Import (C, putwin, "putwin");

      R : constant C_Int := putwin (Win, ACS.C_Stream (File));
   begin
      if R /= Curses_Ok then
         raise Curses_Exception;
      end if;
   end Put_Window;

   function Get_Window (File : Ada.Streams.Stream_IO.File_Type)
                        return Window is
      function getwin (f : ICS.FILEs) return Window;
      pragma Import (C, getwin, "getwin");

      W : constant Window := getwin (ACS.C_Stream (File));
   begin
      if W = Null_Window then
         raise Curses_Exception;
      else
         return W;
      end if;
   end Get_Window;

end Terminal_Interface.Curses.PutWin;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-alphanumeric__adb.htm0000644000175100001440000002123212340214310031613 0ustar tomusers terminal_interface-curses-forms-field_types-alphanumeric.adb

File : terminal_interface-curses-forms-field_types-alphanumeric.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--          Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric        --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.13 @
--  @Date: 2014/05/24 21:31:05 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric is

   procedure Set_Field_Type (Fld : Field;
                             Typ : AlphaNumeric_Field)
   is
      function Set_Fld_Type (F    : Field := Fld;
                             Arg1 : C_Int) return Eti_Error;
      pragma Import (C, Set_Fld_Type, "set_field_type_alnum");

   begin
      Eti_Exception (Set_Fld_Type (Arg1 => C_Int (Typ.Minimum_Field_Width)));
      Wrap_Builtin (Fld, Typ);
   end Set_Field_Type;

end Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-menus-item_user_data__ads.htm0000644000175100001440000002265712340214310027661 0ustar tomusers terminal_interface-curses-menus-item_user_data.ads

File : terminal_interface-curses-menus-item_user_data.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Menus.Item_User_Data             --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2006,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.17 @
--  @Date: 2009/12/26 17:31:35 @
--  Binding Version 01.00
------------------------------------------------------------------------------

generic
   type User is limited private;
   type User_Access is access User;
package Terminal_Interface.Curses.Menus.Item_User_Data is
   pragma Preelaborate (Terminal_Interface.Curses.Menus.Item_User_Data);

   --  The binding uses the same user pointer for menu items
   --  as the low level C implementation. So you can safely
   --  read or write the user pointer also with the C routines
   --
   --  |=====================================================================
   --  | Man page mitem_userptr.3x
   --  |=====================================================================

   --  #1A NAME="AFU_1"#2|
   procedure Set_User_Data (Itm  : Item;
                            Data : User_Access);
   --  AKA: set_item_userptr
   pragma Inline (Set_User_Data);

   --  #1A NAME="AFU_2"#2|
   procedure Get_User_Data (Itm  : Item;
                            Data : out User_Access);
   --  AKA: item_userptr

   --  #1A NAME="AFU_3"#2|
   function Get_User_Data (Itm  : Item) return User_Access;
   --  AKA: item_userptr
   --  Same as function
   pragma Inline (Get_User_Data);

end Terminal_Interface.Curses.Menus.Item_User_Data;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-menus__ads.htm0000644000175100001440000024767312340214310024705 0ustar tomusers terminal_interface-curses-menus.ads

File : terminal_interface-curses-menus.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                      Terminal_Interface.Curses.Menu                      --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.31 @
--  @Date: 2014/05/24 21:31:57 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with System;
with Ada.Characters.Latin_1;

package Terminal_Interface.Curses.Menus is
   pragma Preelaborate (Terminal_Interface.Curses.Menus);
   pragma Linker_Options ("-lmenu" & Curses_Constants.DFT_ARG_SUFFIX);

   Space : Character renames Ada.Characters.Latin_1.Space;

   type Item is private;
   type Menu is private;

   ---------------------------
   --  Interface constants  --
   ---------------------------
   Null_Item : constant Item;
   Null_Menu : constant Menu;

   subtype Menu_Request_Code is Key_Code
     range (Key_Max + 1) .. (Key_Max + 17);

   --  The prefix M_ stands for "Menu Request"
   M_Left_Item       : constant Menu_Request_Code := Key_Max + 1;
   M_Right_Item      : constant Menu_Request_Code := Key_Max + 2;
   M_Up_Item         : constant Menu_Request_Code := Key_Max + 3;
   M_Down_Item       : constant Menu_Request_Code := Key_Max + 4;
   M_ScrollUp_Line   : constant Menu_Request_Code := Key_Max + 5;
   M_ScrollDown_Line : constant Menu_Request_Code := Key_Max + 6;
   M_ScrollDown_Page : constant Menu_Request_Code := Key_Max + 7;
   M_ScrollUp_Page   : constant Menu_Request_Code := Key_Max + 8;
   M_First_Item      : constant Menu_Request_Code := Key_Max + 9;
   M_Last_Item       : constant Menu_Request_Code := Key_Max + 10;
   M_Next_Item       : constant Menu_Request_Code := Key_Max + 11;
   M_Previous_Item   : constant Menu_Request_Code := Key_Max + 12;
   M_Toggle_Item     : constant Menu_Request_Code := Key_Max + 13;
   M_Clear_Pattern   : constant Menu_Request_Code := Key_Max + 14;
   M_Back_Pattern    : constant Menu_Request_Code := Key_Max + 15;
   M_Next_Match      : constant Menu_Request_Code := Key_Max + 16;
   M_Previous_Match  : constant Menu_Request_Code := Key_Max + 17;

   --  For those who like the old 'C' names for the request codes
   REQ_LEFT_ITEM     : Menu_Request_Code renames M_Left_Item;
   REQ_RIGHT_ITEM    : Menu_Request_Code renames M_Right_Item;
   REQ_UP_ITEM       : Menu_Request_Code renames M_Up_Item;
   REQ_DOWN_ITEM     : Menu_Request_Code renames M_Down_Item;
   REQ_SCR_ULINE     : Menu_Request_Code renames M_ScrollUp_Line;
   REQ_SCR_DLINE     : Menu_Request_Code renames M_ScrollDown_Line;
   REQ_SCR_DPAGE     : Menu_Request_Code renames M_ScrollDown_Page;
   REQ_SCR_UPAGE     : Menu_Request_Code renames M_ScrollUp_Page;
   REQ_FIRST_ITEM    : Menu_Request_Code renames M_First_Item;
   REQ_LAST_ITEM     : Menu_Request_Code renames M_Last_Item;
   REQ_NEXT_ITEM     : Menu_Request_Code renames M_Next_Item;
   REQ_PREV_ITEM     : Menu_Request_Code renames M_Previous_Item;
   REQ_TOGGLE_ITEM   : Menu_Request_Code renames M_Toggle_Item;
   REQ_CLEAR_PATTERN : Menu_Request_Code renames M_Clear_Pattern;
   REQ_BACK_PATTERN  : Menu_Request_Code renames M_Back_Pattern;
   REQ_NEXT_MATCH    : Menu_Request_Code renames M_Next_Match;
   REQ_PREV_MATCH    : Menu_Request_Code renames M_Previous_Match;

   procedure Request_Name (Key  : Menu_Request_Code;
                           Name : out String);

   function  Request_Name (Key : Menu_Request_Code) return String;
   --  Same as function

   ------------------
   --  Exceptions  --
   ------------------

   Menu_Exception : exception;
   --
   --  Menu options
   --
   type Menu_Option_Set is
      record
         One_Valued        : Boolean;
         Show_Descriptions : Boolean;
         Row_Major_Order   : Boolean;
         Ignore_Case       : Boolean;
         Show_Matches      : Boolean;
         Non_Cyclic        : Boolean;
      end record;
   pragma Convention (C_Pass_By_Copy, Menu_Option_Set);

   for Menu_Option_Set use
      record
         One_Valued        at 0 range Curses_Constants.O_ONEVALUE_First
           .. Curses_Constants.O_ONEVALUE_Last;
         Show_Descriptions at 0 range Curses_Constants.O_SHOWDESC_First
           .. Curses_Constants.O_SHOWDESC_Last;
         Row_Major_Order   at 0 range Curses_Constants.O_ROWMAJOR_First
           .. Curses_Constants.O_ROWMAJOR_Last;
         Ignore_Case       at 0 range Curses_Constants.O_IGNORECASE_First
           .. Curses_Constants.O_IGNORECASE_Last;
         Show_Matches      at 0 range Curses_Constants.O_SHOWMATCH_First
           .. Curses_Constants.O_SHOWMATCH_Last;
         Non_Cyclic        at 0 range Curses_Constants.O_NONCYCLIC_First
           .. Curses_Constants.O_NONCYCLIC_Last;
      end record;
   pragma Warnings (Off);
   for Menu_Option_Set'Size use Curses_Constants.Menu_Options_Size;
   pragma Warnings (On);

   function Default_Menu_Options return Menu_Option_Set;
   --  Initial default options for a menu.
   pragma Inline (Default_Menu_Options);
   --
   --  Item options
   --
   type Item_Option_Set is
      record
         Selectable : Boolean;
      end record;
   pragma Convention (C_Pass_By_Copy, Item_Option_Set);

   for Item_Option_Set use
      record
         Selectable at 0 range Curses_Constants.O_SELECTABLE_First
           ..  Curses_Constants.O_SELECTABLE_Last;
      end record;
   pragma Warnings (Off);
   for Item_Option_Set'Size use Curses_Constants.Item_Options_Size;
   pragma Warnings (On);

   function Default_Item_Options return Item_Option_Set;
   --  Initial default options for an item.
   pragma Inline (Default_Item_Options);

   --
   --  Item Array
   --
   type Item_Array is array (Positive range <>) of aliased Item;
   pragma Convention (C, Item_Array);

   type Item_Array_Access is access Item_Array;

   procedure Free (IA         : in out Item_Array_Access;
                   Free_Items : Boolean := False);
   --  Release the memory for an allocated item array
   --  If Free_Items is True, call Delete() for all the items in
   --  the array.

   --  |=====================================================================
   --  | Man page mitem_new.3x
   --  |=====================================================================

   --  #1A NAME="AFU_1"#2|
   function Create (Name        : String;
                    Description : String := "") return Item;
   --  AKA: new_item()
   --  Not inlined.

   --  #1A NAME="AFU_2"#2|
   function New_Item (Name        : String;
                      Description : String := "") return Item
     renames Create;
   --  AKA: new_item()

   --  #1A NAME="AFU_3"#2|
   procedure Delete (Itm : in out Item);
   --  AKA: free_item()
   --  Resets Itm to Null_Item

   --  |=====================================================================
   --  | Man page mitem_value.3x
   --  |=====================================================================

   --  #1A NAME="AFU_4"#2|
   procedure Set_Value (Itm   : Item;
                        Value : Boolean := True);
   --  AKA: set_item_value()
   pragma Inline (Set_Value);

   --  #1A NAME="AFU_5"#2|
   function Value (Itm : Item) return Boolean;
   --  AKA: item_value()
   pragma Inline (Value);

   --  |=====================================================================
   --  | Man page mitem_visible.3x
   --  |=====================================================================

   --  #1A NAME="AFU_6"#2|
   function Visible (Itm : Item) return Boolean;
   --  AKA: item_visible()
   pragma Inline (Visible);

   --  |=====================================================================
   --  | Man page mitem_opts.3x
   --  |=====================================================================

   --  #1A NAME="AFU_7"#2|
   procedure Set_Options (Itm     : Item;
                          Options : Item_Option_Set);
   --  AKA: set_item_opts()
   --  An overloaded Set_Options is defined later. Pragma Inline appears there

   --  #1A NAME="AFU_8"#2|
   procedure Switch_Options (Itm     : Item;
                             Options : Item_Option_Set;
                             On      : Boolean := True);
   --  AKA: item_opts_on()
   --  AKA: item_opts_off()
   --  An overloaded Switch_Options is defined later.
   --  Pragma Inline appears there

   --  #1A NAME="AFU_9"#2|
   procedure Get_Options (Itm     : Item;
                          Options : out Item_Option_Set);
   --  AKA: item_opts()

   --  #1A NAME="AFU_10"#2|
   function Get_Options (Itm : Item := Null_Item) return Item_Option_Set;
   --  AKA: item_opts()
   --  An overloaded Get_Options is defined later. Pragma Inline appears there

   --  |=====================================================================
   --  | Man page mitem_name.3x
   --  |=====================================================================

   --  #1A NAME="AFU_11"#2|
   procedure Name (Itm  : Item;
                   Name : out String);
   --  AKA: item_name()
   function  Name (Itm : Item) return String;
   --  AKA: item_name()
   --  Implemented as function
   pragma Inline (Name);

   --  #1A NAME="AFU_12"#2|
   procedure Description (Itm         : Item;
                          Description : out String);
   --  AKA: item_description();

   function  Description (Itm : Item) return String;
   --  AKA: item_description();
   --  Implemented as function
   pragma Inline (Description);

   --  |=====================================================================
   --  | Man page mitem_current.3x
   --  |=====================================================================

   --  #1A NAME="AFU_13"#2|
   procedure Set_Current (Men : Menu;
                          Itm : Item);
   --  AKA: set_current_item()
   pragma Inline (Set_Current);

   --  #1A NAME="AFU_14"#2|
   function Current (Men : Menu) return Item;
   --  AKA: current_item()
   pragma Inline (Current);

   --  #1A NAME="AFU_15"#2|
   procedure Set_Top_Row (Men  : Menu;
                          Line : Line_Position);
   --  AKA: set_top_row()
   pragma Inline (Set_Top_Row);

   --  #1A NAME="AFU_16"#2|
   function Top_Row (Men : Menu) return Line_Position;
   --  AKA: top_row()
   pragma Inline (Top_Row);

   --  #1A NAME="AFU_17"#2|
   function Get_Index (Itm : Item) return Positive;
   --  AKA: item_index()
   --  Please note that in this binding we start the numbering of items
   --  with 1. So this is number is one more than you get from the low
   --  level call.
   pragma Inline (Get_Index);

   --  |=====================================================================
   --  | Man page menu_post.3x
   --  |=====================================================================

   --  #1A NAME="AFU_18"#2|
   procedure Post (Men  : Menu;
                   Post : Boolean := True);
   --  AKA: post_menu()
   --  AKA: unpost_menu()
   pragma Inline (Post);

   --  |=====================================================================
   --  | Man page menu_opts.3x
   --  |=====================================================================

   --  #1A NAME="AFU_19"#2|
   procedure Set_Options (Men     : Menu;
                          Options : Menu_Option_Set);
   --  AKA: set_menu_opts()
   pragma Inline (Set_Options);

   --  #1A NAME="AFU_20"#2|
   procedure Switch_Options (Men     : Menu;
                             Options : Menu_Option_Set;
                             On      : Boolean := True);
   --  AKA: menu_opts_on()
   --  AKA: menu_opts_off()
   pragma Inline (Switch_Options);

   --  #1A NAME="AFU_21"#2|
   procedure Get_Options (Men     : Menu;
                          Options : out Menu_Option_Set);
   --  AKA: menu_opts()

   --  #1A NAME="AFU_22"#2|
   function Get_Options (Men : Menu := Null_Menu) return Menu_Option_Set;
   --  AKA: menu_opts()
   pragma Inline (Get_Options);

   --  |=====================================================================
   --  | Man page menu_win.3x
   --  |=====================================================================

   --  #1A NAME="AFU_23"#2|
   procedure Set_Window (Men : Menu;
                         Win : Window);
   --  AKA: set_menu_win()
   pragma Inline (Set_Window);

   --  #1A NAME="AFU_24"#2|
   function Get_Window (Men : Menu) return Window;
   --  AKA: menu_win()
   pragma Inline (Get_Window);

   --  #1A NAME="AFU_25"#2|
   procedure Set_Sub_Window (Men : Menu;
                             Win : Window);
   --  AKA: set_menu_sub()
   pragma Inline (Set_Sub_Window);

   --  #1A NAME="AFU_26"#2|
   function Get_Sub_Window (Men : Menu) return Window;
   --  AKA: menu_sub()
   pragma Inline (Get_Sub_Window);

   --  #1A NAME="AFU_27"#2|
   procedure Scale (Men     : Menu;
                    Lines   : out Line_Count;
                    Columns : out Column_Count);
   --  AKA: scale_menu()
   pragma Inline (Scale);

   --  |=====================================================================
   --  | Man page menu_cursor.3x
   --  |=====================================================================

   --  #1A NAME="AFU_28"#2|
   procedure Position_Cursor (Men : Menu);
   --  AKA: pos_menu_cursor()
   pragma Inline (Position_Cursor);

   --  |=====================================================================
   --  | Man page menu_mark.3x
   --  |=====================================================================

   --  #1A NAME="AFU_29"#2|
   procedure Set_Mark (Men  : Menu;
                       Mark : String);
   --  AKA: set_menu_mark()
   pragma Inline (Set_Mark);

   --  #1A NAME="AFU_30"#2|
   procedure Mark (Men  : Menu;
                   Mark : out String);
   --  AKA: menu_mark()

   function  Mark (Men : Menu) return String;
   --  AKA: menu_mark()
   --  Implemented as function
   pragma Inline (Mark);

   --  |=====================================================================
   --  | Man page menu_attributes.3x
   --  |=====================================================================

   --  #1A NAME="AFU_31"#2|
   procedure Set_Foreground
     (Men   : Menu;
      Fore  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First);
   --  AKA: set_menu_fore()
   pragma Inline (Set_Foreground);

   --  #1A NAME="AFU_32"#2|
   procedure Foreground (Men   : Menu;
                         Fore  : out Character_Attribute_Set);
   --  AKA: menu_fore()

   --  #1A NAME="AFU_33"#2|
   procedure Foreground (Men   : Menu;
                         Fore  : out Character_Attribute_Set;
                         Color : out Color_Pair);
   --  AKA: menu_fore()
   pragma Inline (Foreground);

   --  #1A NAME="AFU_34"#2|
   procedure Set_Background
     (Men   : Menu;
      Back  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First);
   --  AKA: set_menu_back()
   pragma Inline (Set_Background);

   --  #1A NAME="AFU_35"#2|
   procedure Background (Men  : Menu;
                         Back : out Character_Attribute_Set);
   --  AKA: menu_back()
   --  #1A NAME="AFU_36"#2|

   procedure Background (Men   : Menu;
                         Back  : out Character_Attribute_Set;
                         Color : out Color_Pair);
   --  AKA: menu_back()
   pragma Inline (Background);

   --  #1A NAME="AFU_37"#2|
   procedure Set_Grey
     (Men   : Menu;
      Grey  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First);
   --  AKA: set_menu_grey()
   pragma Inline (Set_Grey);

   --  #1A NAME="AFU_38"#2|
   procedure Grey (Men  : Menu;
                   Grey : out Character_Attribute_Set);
   --  AKA: menu_grey()

   --  #1A NAME="AFU_39"#2|
   procedure Grey
     (Men   : Menu;
      Grey  : out Character_Attribute_Set;
      Color : out Color_Pair);
   --  AKA: menu_grey()
   pragma Inline (Grey);

   --  #1A NAME="AFU_40"#2|
   procedure Set_Pad_Character (Men : Menu;
                                Pad : Character := Space);
   --  AKA: set_menu_pad()
   pragma Inline (Set_Pad_Character);

   --  #1A NAME="AFU_41"#2|
   procedure Pad_Character (Men : Menu;
                            Pad : out Character);
   --  AKA: menu_pad()
   pragma Inline (Pad_Character);

   --  |=====================================================================
   --  | Man page menu_spacing.3x
   --  |=====================================================================

   --  #1A NAME="AFU_42"#2|
   procedure Set_Spacing (Men   : Menu;
                          Descr : Column_Position := 0;
                          Row   : Line_Position   := 0;
                          Col   : Column_Position := 0);
   --  AKA: set_menu_spacing()
   pragma Inline (Set_Spacing);

   --  #1A NAME="AFU_43"#2|
   procedure Spacing (Men   : Menu;
                      Descr : out Column_Position;
                      Row   : out Line_Position;
                      Col   : out Column_Position);
   --  AKA: menu_spacing()
   pragma Inline (Spacing);

   --  |=====================================================================
   --  | Man page menu_pattern.3x
   --  |=====================================================================

   --  #1A NAME="AFU_44"#2|
   function Set_Pattern (Men  : Menu;
                         Text : String) return Boolean;
   --  AKA: set_menu_pattern()
   --  Return TRUE if the pattern matches, FALSE otherwise
   pragma Inline (Set_Pattern);

   --  #1A NAME="AFU_45"#2|
   procedure Pattern (Men  : Menu;
                      Text : out String);
   --  AKA: menu_pattern()
   pragma Inline (Pattern);

   --  |=====================================================================
   --  | Man page menu_format.3x
   --  |=====================================================================

   --  #1A NAME="AFU_46"#2|
   procedure Set_Format (Men     : Menu;
                         Lines   : Line_Count;
                         Columns : Column_Count);
   --  Not implemented: 0 argument for Lines or Columns;
   --  instead use Format to get the current sizes
   --      The  default  format  is  16  rows,  1  column.    Calling
   --      set_menu_format  with a null menu pointer will change this
   --      default.  A zero row or column argument to set_menu_format
   --      is  interpreted  as  a  request  not to change the current
   --      value.
   --  AKA: set_menu_format()
   pragma Inline (Set_Format);

   --  #1A NAME="AFU_47"#2|
   procedure Format (Men     : Menu;
                     Lines   : out Line_Count;
                     Columns : out Column_Count);
   --  AKA: menu_format()
   pragma Inline (Format);

   --  |=====================================================================
   --  | Man page menu_hook.3x
   --  |=====================================================================

   type Menu_Hook_Function is access procedure (Men : Menu);
   pragma Convention (C, Menu_Hook_Function);

   --  #1A NAME="AFU_48"#2|
   procedure Set_Item_Init_Hook (Men  : Menu;
                                 Proc : Menu_Hook_Function);
   --  AKA: set_item_init()
   pragma Inline (Set_Item_Init_Hook);

   --  #1A NAME="AFU_49"#2|
   procedure Set_Item_Term_Hook (Men  : Menu;
                                 Proc : Menu_Hook_Function);
   --  AKA: set_item_term()
   pragma Inline (Set_Item_Term_Hook);

   --  #1A NAME="AFU_50"#2|
   procedure Set_Menu_Init_Hook (Men  : Menu;
                                 Proc : Menu_Hook_Function);
   --  AKA: set_menu_init()
   pragma Inline (Set_Menu_Init_Hook);

   --  #1A NAME="AFU_51"#2|
   procedure Set_Menu_Term_Hook (Men  : Menu;
                                 Proc : Menu_Hook_Function);
   --  AKA: set_menu_term()
   pragma Inline (Set_Menu_Term_Hook);

   --  #1A NAME="AFU_52"#2|
   function Get_Item_Init_Hook (Men : Menu) return Menu_Hook_Function;
   --  AKA: item_init()
   pragma Inline (Get_Item_Init_Hook);

   --  #1A NAME="AFU_53"#2|
   function Get_Item_Term_Hook (Men : Menu) return Menu_Hook_Function;
   --  AKA: item_term()
   pragma Inline (Get_Item_Term_Hook);

   --  #1A NAME="AFU_54"#2|
   function Get_Menu_Init_Hook (Men : Menu) return Menu_Hook_Function;
   --  AKA: menu_init()
   pragma Inline (Get_Menu_Init_Hook);

   --  #1A NAME="AFU_55"#2|
   function Get_Menu_Term_Hook (Men : Menu) return Menu_Hook_Function;
   --  AKA: menu_term()
   pragma Inline (Get_Menu_Term_Hook);

   --  |=====================================================================
   --  | Man page menu_items.3x
   --  |=====================================================================

   --  #1A NAME="AFU_56"#2|
   procedure Redefine (Men   : Menu;
                       Items : Item_Array_Access);
   --  AKA: set_menu_items()
   pragma Inline (Redefine);

   procedure Set_Items (Men   : Menu;
                        Items : Item_Array_Access) renames Redefine;
   --  pragma Inline (Set_Items);

   --  #1A NAME="AFU_57"#2|
   function Items (Men   : Menu;
                   Index : Positive) return Item;
   --  AKA: menu_items()
   pragma Inline (Items);

   --  #1A NAME="AFU_58"#2|
   function Item_Count (Men : Menu) return Natural;
   --  AKA: item_count()
   pragma Inline (Item_Count);

   --  |=====================================================================
   --  | Man page menu_new.3x
   --  |=====================================================================

   --  #1A NAME="AFU_59"#2|
   function Create (Items : Item_Array_Access) return Menu;
   --  AKA: new_menu()
   --  Not inlined

   function New_Menu (Items : Item_Array_Access) return Menu renames Create;

   --  #1A NAME="AFU_60"#2|
   procedure Delete (Men : in out Menu);
   --  AKA: free_menu()
   --  Reset Men to Null_Menu
   --  Not inlined

   --  |=====================================================================
   --  | Man page menu_driver.3x
   --  |=====================================================================

   type Driver_Result is (Menu_Ok,
                          Request_Denied,
                          Unknown_Request,
                          No_Match);

   --  #1A NAME="AFU_61"#2|
   function Driver (Men : Menu;
                    Key : Key_Code) return Driver_Result;
   --  AKA: menu_driver()
   --  Driver is not inlined

   --  #1A NAME="AFU_62"#2|
   --  Not Implemented: menu_request_name, menu_request_by_name
-------------------------------------------------------------------------------
private
   type Item   is new System.Storage_Elements.Integer_Address;
   type Menu   is new System.Storage_Elements.Integer_Address;

   Null_Item : constant Item := 0;
   Null_Menu : constant Menu := 0;

end Terminal_Interface.Curses.Menus;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-panels-user_data__ads.htm0000644000175100001440000002164512340214310026772 0ustar tomusers terminal_interface-curses-panels-user_data.ads

File : terminal_interface-curses-panels-user_data.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                 Terminal_Interface.Curses.Panels.User_Data               --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.15 @
--  Binding Version 01.00
------------------------------------------------------------------------------

generic
   type User is limited private;
   type User_Access is access all User;
package Terminal_Interface.Curses.Panels.User_Data is
   pragma Preelaborate (Terminal_Interface.Curses.Panels.User_Data);

   --  |=====================================================================
   --  | Man page panel.3x
   --  |=====================================================================

   --  #1A NAME="AFU_1"#2|
   procedure Set_User_Data (Pan  : Panel;
                            Data : User_Access);
   --  AKA: set_panel_userptr
   pragma Inline (Set_User_Data);

   --  #1A NAME="AFU_2"#2|
   procedure Get_User_Data (Pan  : Panel;
                            Data : out User_Access);
   --  AKA: panel_userptr

   --  #1A NAME="AFU_3"#2|
   function Get_User_Data (Pan  : Panel) return User_Access;
   --  AKA: panel_userptr
   --  Same as function
   pragma Inline (Get_User_Data);

end Terminal_Interface.Curses.Panels.User_Data;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-aux__ads.htm0000644000175100001440000003715312340214307024347 0ustar tomusers terminal_interface-curses-aux.ads

File : terminal_interface-curses-aux.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                       Terminal_Interface.Curses.Aux                      --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.23 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with System;
with Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;

package Terminal_Interface.Curses.Aux is
   pragma Preelaborate (Terminal_Interface.Curses.Aux);

   use type Interfaces.C.int;

   subtype C_Int      is Interfaces.C.int;
   subtype C_Short    is Interfaces.C.short;
   subtype C_Long_Int is Interfaces.C.long;
   subtype C_Size_T   is Interfaces.C.size_t;
   subtype C_UInt     is Interfaces.C.unsigned;
   subtype C_ULong    is Interfaces.C.unsigned_long;
   subtype C_Char_Ptr is Interfaces.C.Strings.chars_ptr;
   type    C_Void_Ptr is new System.Address;

   --  This is how those constants are defined in ncurses. I see them also
   --  exactly like this in all ETI implementations I ever tested. So it
   --  could be that this is quite general, but please check with your curses.
   --  This is critical, because curses sometime mixes Boolean returns with
   --  returning an error status.
   Curses_Ok    : constant C_Int := Curses_Constants.OK;
   Curses_Err   : constant C_Int := Curses_Constants.ERR;

   Curses_True  : constant C_Int := Curses_Constants.TRUE;
   Curses_False : constant C_Int := Curses_Constants.FALSE;

   --  Eti_Error: type for error codes returned by the menu and form subsystem
   type Eti_Error is
     (E_Current,
      E_Invalid_Field,
      E_Request_Denied,
      E_Not_Connected,
      E_Not_Selectable,
      E_No_Match,
      E_Unknown_Command,
      E_Not_Posted,
      E_No_Room,
      E_Bad_State,
      E_Connected,
      E_Posted,
      E_Bad_Argument,
      E_System_Error,
      E_Ok);

   procedure Eti_Exception (Code : Eti_Error);
   --  Do nothing if Code = E_Ok.
   --  Else dispatch the error code and raise the appropriate exception.

   procedure Fill_String (Cp  : chars_ptr;
                          Str : out String);
   --  Fill the Str parameter with the string denoted by the chars_ptr
   --  C-Style string.

   function Fill_String (Cp : chars_ptr) return String;
   --  Same but as function.

private
   for Eti_Error'Size use C_Int'Size;
   pragma Convention (C, Eti_Error);
   for Eti_Error use
     (E_Current         => Curses_Constants.E_CURRENT,
      E_Invalid_Field   => Curses_Constants.E_INVALID_FIELD,
      E_Request_Denied  => Curses_Constants.E_REQUEST_DENIED,
      E_Not_Connected   => Curses_Constants.E_NOT_CONNECTED,
      E_Not_Selectable  => Curses_Constants.E_NOT_SELECTABLE,
      E_No_Match        => Curses_Constants.E_NO_MATCH,
      E_Unknown_Command => Curses_Constants.E_UNKNOWN_COMMAND,
      E_Not_Posted      => Curses_Constants.E_NOT_POSTED,
      E_No_Room         => Curses_Constants.E_NO_ROOM,
      E_Bad_State       => Curses_Constants.E_BAD_STATE,
      E_Connected       => Curses_Constants.E_CONNECTED,
      E_Posted          => Curses_Constants.E_POSTED,
      E_Bad_Argument    => Curses_Constants.E_BAD_ARGUMENT,
      E_System_Error    => Curses_Constants.E_SYSTEM_ERROR,
      E_Ok              => Curses_Constants.E_OK);
end Terminal_Interface.Curses.Aux;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-terminfo__adb.htm0000644000175100001440000004710612340214310025345 0ustar tomusers terminal_interface-curses-terminfo.adb

File : terminal_interface-curses-terminfo.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                    Terminal_Interface.Curses.Terminfo                    --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2006,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.6 @
--  @Date: 2009/12/26 17:38:58 @
--  Binding Version 01.00
------------------------------------------------------------------------------

with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
with Interfaces.C; use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;
with Ada.Unchecked_Conversion;

package body Terminal_Interface.Curses.Terminfo is

   function Is_MinusOne_Pointer (P : chars_ptr) return Boolean;

   function Is_MinusOne_Pointer (P : chars_ptr) return Boolean is
      type Weird_Address is new System.Storage_Elements.Integer_Address;
      Invalid_Pointer : constant Weird_Address := -1;
      function To_Weird is new Ada.Unchecked_Conversion
        (Source => chars_ptr, Target => Weird_Address);
   begin
      if To_Weird (P) = Invalid_Pointer then
         return True;
      else
         return False;
      end if;
   end Is_MinusOne_Pointer;
   pragma Inline (Is_MinusOne_Pointer);

------------------------------------------------------------------------------
   function Get_Flag (Name : String) return Boolean
   is
      function tigetflag (id : char_array) return Curses_Bool;
      pragma Import (C, tigetflag);
      Txt    : char_array (0 .. Name'Length);
      Length : size_t;
   begin
      To_C (Name, Txt, Length);
      if tigetflag (Txt) = Curses_Bool (Curses_True) then
         return True;
      else
         return False;
      end if;
   end Get_Flag;

------------------------------------------------------------------------------
   procedure Get_String (Name   : String;
                         Value  : out Terminfo_String;
                         Result : out Boolean)
   is
      function tigetstr (id : char_array) return chars_ptr;
      pragma Import (C, tigetstr, "tigetstr");
      Txt    : char_array (0 .. Name'Length);
      Length : size_t;
      Txt2 : chars_ptr;
   begin
      To_C (Name, Txt, Length);
      Txt2 := tigetstr (Txt);
      if Txt2 = Null_Ptr then
         Result := False;
      elsif Is_MinusOne_Pointer (Txt2) then
         raise Curses_Exception;
      else
         Value  := Terminfo_String (Fill_String (Txt2));
         Result := True;
      end if;
   end Get_String;

------------------------------------------------------------------------------
   function Has_String (Name : String) return Boolean
   is
      function tigetstr (id : char_array) return chars_ptr;
      pragma Import (C, tigetstr, "tigetstr");
      Txt    : char_array (0 .. Name'Length);
      Length : size_t;
      Txt2 : chars_ptr;
   begin
      To_C (Name, Txt, Length);
      Txt2 := tigetstr (Txt);
      if Txt2 = Null_Ptr then
         return False;
      elsif Is_MinusOne_Pointer (Txt2) then
         raise Curses_Exception;
      else
         return True;
      end if;
   end Has_String;

------------------------------------------------------------------------------
   function Get_Number (Name : String) return Integer is
      function tigetstr (s : char_array) return C_Int;
      pragma Import (C, tigetstr);
      Txt    : char_array (0 .. Name'Length);
      Length : size_t;
   begin
      To_C (Name, Txt, Length);
      return Integer (tigetstr (Txt));
   end Get_Number;

------------------------------------------------------------------------------
   procedure Put_String (Str    : Terminfo_String;
                         affcnt : Natural := 1;
                         putc   : putctype := null) is
      function tputs (str    : char_array;
                      affcnt : C_Int;
                      putc   : putctype) return C_Int;
      function putp (str : char_array) return C_Int;
      pragma Import (C, tputs);
      pragma Import (C, putp);
      Txt    : char_array (0 .. Str'Length);
      Length : size_t;
      Err : C_Int;
   begin
      To_C (String (Str), Txt, Length);
      if putc = null then
         Err := putp (Txt);
      else
         Err := tputs (Txt, C_Int (affcnt), putc);
      end if;
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Put_String;

end Terminal_Interface.Curses.Terminfo;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-float_io__adb.htm0000644000175100001440000002637412340214310026773 0ustar tomusers terminal_interface-curses-text_io-float_io.adb

File : terminal_interface-curses-text_io-float_io.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                Terminal_Interface.Curses.Text_IO.Float_IO                --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Terminal_Interface.Curses.Text_IO.Aux;

package body Terminal_Interface.Curses.Text_IO.Float_IO is

   package Aux renames Terminal_Interface.Curses.Text_IO.Aux;
   package FIO is new Ada.Text_IO.Float_IO (Num);

   procedure Put
     (Win  : Window;
      Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp)
   is
      Buf : String (1 .. Field'Last);
      Len : Field := Fore + 1 + Aft;
   begin
      if Exp > 0 then
         Len := Len + 1 + Exp;
      end if;
      FIO.Put (Buf, Item, Aft, Exp);
      Aux.Put_Buf (Win, Buf, Len, False);
   end Put;

   procedure Put
     (Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp)
   is
   begin
      Put (Get_Window, Item, Fore, Aft, Exp);
   end Put;

end Terminal_Interface.Curses.Text_IO.Float_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-termcap__adb.htm0000644000175100001440000004757112340214310025163 0ustar tomusers terminal_interface-curses-termcap.adb

File : terminal_interface-curses-termcap.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                    Terminal_Interface.Curses.Termcap                     --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 2000-2006,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  @Date: 2009/12/26 17:38:58 @
--  Binding Version 01.00
------------------------------------------------------------------------------

with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
with Interfaces.C; use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;

package body Terminal_Interface.Curses.Termcap is

   function Get_Entry (Name : String) return Boolean
   is
      function tgetent (name : char_array; val : char_array)
                        return C_Int;
      pragma Import (C, tgetent, "tgetent");
      NameTxt : char_array (0 .. Name'Length);
      Length  : size_t;
      ignored : constant char_array (0 .. 0) := (0 => nul);
      result  : C_Int;
   begin
      To_C (Name, NameTxt, Length);
      result := tgetent (char_array (ignored), NameTxt);
      if result = -1 then
         raise Curses_Exception;
      else
         return Boolean'Val (result);
      end if;
   end Get_Entry;

------------------------------------------------------------------------------
   function Get_Flag (Name : String) return Boolean
   is
      function tgetflag (id : char_array) return C_Int;
      pragma Import (C, tgetflag, "tgetflag");
      Txt    : char_array (0 .. Name'Length);
      Length : size_t;
   begin
      To_C (Name, Txt, Length);
      if tgetflag (Txt) = 0 then
         return False;
      else
         return True;
      end if;
   end Get_Flag;

------------------------------------------------------------------------------
   procedure Get_Number (Name   : String;
                         Value  : out Integer;
                         Result : out Boolean)
   is
      function tgetnum (id : char_array) return C_Int;
      pragma Import (C, tgetnum, "tgetnum");
      Txt    : char_array (0 .. Name'Length);
      Length : size_t;
   begin
      To_C (Name, Txt, Length);
      Value := Integer (tgetnum (Txt));
      if Value = -1 then
         Result := False;
      else
         Result :=  True;
      end if;
   end Get_Number;

------------------------------------------------------------------------------
   procedure Get_String (Name   : String;
                         Value  : out String;
                         Result : out Boolean)
   is
      function tgetstr (id  : char_array;
                        buf : char_array) return chars_ptr;
      pragma Import (C, tgetstr, "tgetstr");
      Txt    : char_array (0 .. Name'Length);
      Length : size_t;
      Txt2   : chars_ptr;
      type t is new char_array (0 .. 1024); --  does it need to be 1024?
      Return_Buffer : constant t := (others => nul);
   begin
      To_C (Name, Txt, Length);
      Txt2 := tgetstr (Txt, char_array (Return_Buffer));
      if Txt2 = Null_Ptr then
         Result := False;
      else
         Value := Fill_String (Txt2);
         Result := True;
      end if;
   end Get_String;

   function Get_String (Name : String) return Boolean
   is
      function tgetstr (Id  : char_array;
                        buf : char_array) return chars_ptr;
      pragma Import (C, tgetstr, "tgetstr");
      Txt    : char_array (0 .. Name'Length);
      Length : size_t;
      Txt2   : chars_ptr;
      type t is new char_array (0 .. 1024); --  does it need to be 1024?
      Phony_Txt : constant t := (others => nul);
   begin
      To_C (Name, Txt, Length);
      Txt2 := tgetstr (Txt, char_array (Phony_Txt));
      if Txt2 = Null_Ptr then
         return False;
      else
         return True;
      end if;
   end Get_String;

------------------------------------------------------------------------------
   function TGoto (Cap : String;
                   Col : Column_Position;
                   Row : Line_Position) return Termcap_String is
      function tgoto (cap : char_array;
                      col : C_Int;
                      row : C_Int) return chars_ptr;
      pragma Import (C, tgoto);
      Txt    : char_array (0 .. Cap'Length);
      Length : size_t;
   begin
      To_C (Cap, Txt, Length);
      return Termcap_String (Fill_String
                             (tgoto (Txt, C_Int (Col), C_Int (Row))));
   end TGoto;

end Terminal_Interface.Curses.Termcap;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-fixed_io__ads.htm0000644000175100001440000002170212340214310026774 0ustar tomusers terminal_interface-curses-text_io-fixed_io.ads

File : terminal_interface-curses-text_io-fixed_io.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                Terminal_Interface.Curses.Text_IO.Fixed_IO                --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
generic
   type Num is delta <>;

package Terminal_Interface.Curses.Text_IO.Fixed_IO is

   Default_Fore : Field := Num'Fore;
   Default_Aft  : Field := Num'Aft;
   Default_Exp  : Field := 0;

   procedure Put
     (Win  : Window;
      Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp);

   procedure Put
     (Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp);

private
   pragma Inline (Put);

end Terminal_Interface.Curses.Text_IO.Fixed_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-user__ads.htm0000644000175100001440000003022712340214310030146 0ustar tomusers terminal_interface-curses-forms-field_types-user.ads

File : terminal_interface-curses-forms-field_types-user.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Forms.Field_Types.User           --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2009,2011 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.15 @
--  @Date: 2011/03/19 12:27:21 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;

package Terminal_Interface.Curses.Forms.Field_Types.User is
   pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.User);
   subtype C_Int is Interfaces.C.int;

   type User_Defined_Field_Type is abstract new Field_Type with null record;
   --  This is the root of the mechanism we use to create field types in
   --  Ada95. You should your own type derive from this one and implement
   --  the Field_Check and Character_Check functions for your own type.

   type User_Defined_Field_Type_Access is access all
     User_Defined_Field_Type'Class;

   function Field_Check
     (Fld : Field;
      Typ : User_Defined_Field_Type) return Boolean
      is abstract;
   --  If True is returned, the field is considered valid, otherwise it is
   --  invalid.

   function Character_Check
     (Ch  : Character;
      Typ : User_Defined_Field_Type) return Boolean
      is abstract;
   --  If True is returned, the character is considered as valid for the
   --  field, otherwise as invalid.

   procedure Set_Field_Type (Fld : Field;
                             Typ : User_Defined_Field_Type);
   --  This should work for all types derived from User_Defined_Field_Type.
   --  No need to reimplement it for your derived type.

   --  +----------------------------------------------------------------------
   --  | Private Part.
   --  | Used by the Choice child package.
private
   function C_Generic_Type   return C_Field_Type;

   function Generic_Field_Check (Fld : Field;
                                 Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Generic_Field_Check);
   --  This is the generic Field_Check_Function for the low-level fieldtype
   --  representing all the User_Defined_Field_Type derivatives. It routes
   --  the call to the Field_Check implementation for the type.

   function Generic_Char_Check (Ch  : C_Int;
                                Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Generic_Char_Check);
   --  This is the generic Char_Check_Function for the low-level fieldtype
   --  representing all the User_Defined_Field_Type derivatives. It routes
   --  the call to the Character_Check implementation for the type.

end Terminal_Interface.Curses.Forms.Field_Types.User;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-user__adb.htm0000644000175100001440000004451212340214310030127 0ustar tomusers terminal_interface-curses-forms-field_types-user.adb

File : terminal_interface-curses-forms-field_types-user.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--              Terminal_Interface.Curses.Forms.Field_Types.User            --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.23 @
--  @Date: 2014/05/24 21:31:05 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with System.Address_To_Access_Conversions;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms.Field_Types.User is

   procedure Set_Field_Type (Fld : Field;
                             Typ : User_Defined_Field_Type)
   is
      function Allocate_Arg (T : User_Defined_Field_Type'Class)
                             return Argument_Access;

      function Set_Fld_Type (F    : Field := Fld;
                             Cft  : C_Field_Type := C_Generic_Type;
                             Arg1 : Argument_Access)
                             return Eti_Error;
      pragma Import (C, Set_Fld_Type, "set_field_type_user");

      function Allocate_Arg (T : User_Defined_Field_Type'Class)
                             return Argument_Access
      is
         Ptr : constant Field_Type_Access
             := new User_Defined_Field_Type'Class'(T);
      begin
         return new Argument'(Usr => System.Null_Address,
                              Typ => Ptr,
                              Cft => Null_Field_Type);
      end Allocate_Arg;

   begin
      Eti_Exception (Set_Fld_Type (Arg1 => Allocate_Arg (Typ)));
   end Set_Field_Type;

   package Argument_Conversions is
      new System.Address_To_Access_Conversions (Argument);

   function Generic_Field_Check (Fld : Field;
                                 Usr : System.Address) return Curses_Bool
   is
      Result : Boolean;
      Udf    : constant User_Defined_Field_Type_Access :=
        User_Defined_Field_Type_Access
          (Argument_Access (Argument_Conversions.To_Pointer (Usr)).all.Typ);
   begin
      Result := Field_Check (Fld, Udf.all);
      return Curses_Bool (Boolean'Pos (Result));
   end Generic_Field_Check;

   function Generic_Char_Check (Ch  : C_Int;
                                Usr : System.Address) return Curses_Bool
   is
      Result : Boolean;
      Udf    : constant User_Defined_Field_Type_Access :=
        User_Defined_Field_Type_Access
          (Argument_Access (Argument_Conversions.To_Pointer (Usr)).all.Typ);
   begin
      Result := Character_Check (Character'Val (Ch), Udf.all);
      return Curses_Bool (Boolean'Pos (Result));
   end Generic_Char_Check;

   --  -----------------------------------------------------------------------
   --
   function C_Generic_Type return C_Field_Type
   is
      Res : Eti_Error;
      T   : C_Field_Type;
   begin
      if M_Generic_Type = Null_Field_Type then
         T := New_Fieldtype (Generic_Field_Check'Access,
                             Generic_Char_Check'Access);
         if T = Null_Field_Type then
            raise Form_Exception;
         else
            Res := Set_Fieldtype_Arg (T,
                                      Make_Arg'Access,
                                      Copy_Arg'Access,
                                      Free_Arg'Access);
            Eti_Exception (Res);
         end if;
         M_Generic_Type := T;
      end if;
      pragma Assert (M_Generic_Type /= Null_Field_Type);
      return M_Generic_Type;
   end C_Generic_Type;

end Terminal_Interface.Curses.Forms.Field_Types.User;
././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-enumeration-ada__adb.htmncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-enumeration-ada__adb.h0000644000175100001440000003275112340214310031663 0ustar tomusers terminal_interface-curses-forms-field_types-enumeration-ada.adb

File : terminal_interface-curses-forms-field_types-enumeration-ada.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--         Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada      --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2004,2011 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  @Date: 2011/03/22 23:36:20 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Characters.Handling; use Ada.Characters.Handling;

package body Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada is

   function Create (Set            : Type_Set := Mixed_Case;
                    Case_Sensitive : Boolean  := False;
                    Must_Be_Unique : Boolean  := False)
                    return Enumeration_Field
   is
      I : Enumeration_Info (T'Pos (T'Last) - T'Pos (T'First) + 1);
      J : Positive := 1;
   begin
      I.Case_Sensitive := Case_Sensitive;
      I.Match_Must_Be_Unique := Must_Be_Unique;

      for E in T'Range loop
         I.Names (J) := new String'(T'Image (E));
         --  The Image attribute defaults to upper case, so we have to handle
         --  only the other ones...
         if Set /= Upper_Case then
            I.Names (J).all := To_Lower (I.Names (J).all);
            if Set = Mixed_Case then
               I.Names (J).all (I.Names (J).all'First) :=
                 To_Upper (I.Names (J).all (I.Names (J).all'First));
            end if;
         end if;
         J := J + 1;
      end loop;

      return Create (I, True);
   end Create;

   function Value (Fld : Field;
                   Buf : Buffer_Number := Buffer_Number'First) return T
   is
   begin
      return T'Value (Get_Buffer (Fld, Buf));
   end Value;

end Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-regexp__adb.htm0000644000175100001440000002071412340214310030441 0ustar tomusers terminal_interface-curses-forms-field_types-regexp.adb

File : terminal_interface-curses-forms-field_types-regexp.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--             Terminal_Interface.Curses.Forms.Field_Types.RegExp           --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C; use Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms.Field_Types.RegExp is

   procedure Set_Field_Type (Fld : Field;
                             Typ : Regular_Expression_Field)
   is
      function Set_Ftyp (F    : Field := Fld;
                         Arg1 : char_array) return Eti_Error;
      pragma Import (C, Set_Ftyp, "set_field_type_regexp");

   begin
      Eti_Exception (Set_Ftyp (Arg1 => To_C (Typ.Regular_Expression.all)));
      Wrap_Builtin (Fld, Typ);
   end Set_Field_Type;

end Terminal_Interface.Curses.Forms.Field_Types.RegExp;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-menus__adb.htm0000644000175100001440000037736112340214310024662 0ustar tomusers terminal_interface-curses-menus.adb

File : terminal_interface-curses-menus.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                      Terminal_Interface.Curses.Menus                     --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.32 @
--  @Date: 2014/05/24 21:31:05 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Unchecked_Deallocation;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

with Interfaces.C; use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;
with Interfaces.C.Pointers;

package body Terminal_Interface.Curses.Menus is

   type C_Item_Array is array (Natural range <>) of aliased Item;
   package I_Array is new
     Interfaces.C.Pointers (Natural, Item, C_Item_Array, Null_Item);

   use type System.Bit_Order;
   subtype chars_ptr is Interfaces.C.Strings.chars_ptr;

------------------------------------------------------------------------------
   procedure Request_Name (Key  : Menu_Request_Code;
                           Name : out String)
   is
      function Request_Name (Key : C_Int) return chars_ptr;
      pragma Import (C, Request_Name, "menu_request_name");
   begin
      Fill_String (Request_Name (C_Int (Key)), Name);
   end Request_Name;

   function Request_Name (Key : Menu_Request_Code) return String
   is
      function Request_Name (Key : C_Int) return chars_ptr;
      pragma Import (C, Request_Name, "menu_request_name");
   begin
      return Fill_String (Request_Name (C_Int (Key)));
   end Request_Name;

   function Create (Name        : String;
                    Description : String := "") return Item
   is
      type Char_Ptr is access all Interfaces.C.char;
      function Newitem (Name, Desc : Char_Ptr) return Item;
      pragma Import (C, Newitem, "new_item");

      type Name_String is new char_array (0 .. Name'Length);
      type Name_String_Ptr is access Name_String;
      pragma Controlled (Name_String_Ptr);

      type Desc_String is new char_array (0 .. Description'Length);
      type Desc_String_Ptr is access Desc_String;
      pragma Controlled (Desc_String_Ptr);

      Name_Str : constant Name_String_Ptr := new Name_String;
      Desc_Str : constant Desc_String_Ptr := new Desc_String;
      Name_Len, Desc_Len : size_t;
      Result : Item;
   begin
      To_C (Name, Name_Str.all, Name_Len);
      To_C (Description, Desc_Str.all, Desc_Len);
      Result := Newitem (Name_Str.all (Name_Str.all'First)'Access,
                         Desc_Str.all (Desc_Str.all'First)'Access);
      if Result = Null_Item then
         raise Eti_System_Error;
      end if;
      return Result;
   end Create;

   procedure Delete (Itm : in out Item)
   is
      function Descname (Itm  : Item) return chars_ptr;
      pragma Import (C, Descname, "item_description");
      function Itemname (Itm  : Item) return chars_ptr;
      pragma Import (C, Itemname, "item_name");

      function Freeitem (Itm : Item) return Eti_Error;
      pragma Import (C, Freeitem, "free_item");

      Ptr : chars_ptr;
   begin
      Ptr := Descname (Itm);
      if Ptr /= Null_Ptr then
         Interfaces.C.Strings.Free (Ptr);
      end if;
      Ptr := Itemname (Itm);
      if Ptr /= Null_Ptr then
         Interfaces.C.Strings.Free (Ptr);
      end if;
      Eti_Exception (Freeitem (Itm));
      Itm := Null_Item;
   end Delete;
-------------------------------------------------------------------------------
   procedure Set_Value (Itm   : Item;
                        Value : Boolean := True)
   is
      function Set_Item_Val (Itm : Item;
                             Val : C_Int) return Eti_Error;
      pragma Import (C, Set_Item_Val, "set_item_value");

   begin
      Eti_Exception (Set_Item_Val (Itm, Boolean'Pos (Value)));
   end Set_Value;

   function Value (Itm : Item) return Boolean
   is
      function Item_Val (Itm : Item) return C_Int;
      pragma Import (C, Item_Val, "item_value");
   begin
      if Item_Val (Itm) = Curses_False then
         return False;
      else
         return True;
      end if;
   end Value;

-------------------------------------------------------------------------------
   function Visible (Itm : Item) return Boolean
   is
      function Item_Vis (Itm : Item) return C_Int;
      pragma Import (C, Item_Vis, "item_visible");
   begin
      if Item_Vis (Itm) = Curses_False then
         return False;
      else
         return True;
      end if;
   end Visible;
-------------------------------------------------------------------------------
   procedure Set_Options (Itm     : Item;
                          Options : Item_Option_Set)
   is
      function Set_Item_Opts (Itm : Item;
                              Opt : Item_Option_Set) return Eti_Error;
      pragma Import (C, Set_Item_Opts, "set_item_opts");

   begin
      Eti_Exception (Set_Item_Opts (Itm, Options));
   end Set_Options;

   procedure Switch_Options (Itm     : Item;
                             Options : Item_Option_Set;
                             On      : Boolean := True)
   is
      function Item_Opts_On (Itm : Item;
                             Opt : Item_Option_Set) return Eti_Error;
      pragma Import (C, Item_Opts_On, "item_opts_on");
      function Item_Opts_Off (Itm : Item;
                              Opt : Item_Option_Set) return Eti_Error;
      pragma Import (C, Item_Opts_Off, "item_opts_off");

   begin
      if On then
         Eti_Exception (Item_Opts_On (Itm, Options));
      else
         Eti_Exception (Item_Opts_Off (Itm, Options));
      end if;
   end Switch_Options;

   procedure Get_Options (Itm     : Item;
                          Options : out Item_Option_Set)
   is
      function Item_Opts (Itm : Item) return Item_Option_Set;
      pragma Import (C, Item_Opts, "item_opts");

   begin
      Options := Item_Opts (Itm);
   end Get_Options;

   function Get_Options (Itm : Item := Null_Item) return Item_Option_Set
   is
      Ios : Item_Option_Set;
   begin
      Get_Options (Itm, Ios);
      return Ios;
   end Get_Options;
-------------------------------------------------------------------------------
   procedure Name (Itm  : Item;
                   Name : out String)
   is
      function Itemname (Itm : Item) return chars_ptr;
      pragma Import (C, Itemname, "item_name");
   begin
      Fill_String (Itemname (Itm), Name);
   end Name;

   function Name (Itm : Item) return String
   is
      function Itemname (Itm : Item) return chars_ptr;
      pragma Import (C, Itemname, "item_name");
   begin
      return Fill_String (Itemname (Itm));
   end Name;

   procedure Description (Itm         : Item;
                          Description : out String)
   is
      function Descname (Itm  : Item) return chars_ptr;
      pragma Import (C, Descname, "item_description");
   begin
      Fill_String (Descname (Itm), Description);
   end Description;

   function Description (Itm : Item) return String
   is
      function Descname (Itm  : Item) return chars_ptr;
      pragma Import (C, Descname, "item_description");
   begin
      return Fill_String (Descname (Itm));
   end Description;
-------------------------------------------------------------------------------
   procedure Set_Current (Men : Menu;
                          Itm : Item)
   is
      function Set_Curr_Item (Men : Menu;
                              Itm : Item) return Eti_Error;
      pragma Import (C, Set_Curr_Item, "set_current_item");

   begin
      Eti_Exception (Set_Curr_Item (Men, Itm));
   end Set_Current;

   function Current (Men : Menu) return Item
   is
      function Curr_Item (Men : Menu) return Item;
      pragma Import (C, Curr_Item, "current_item");

      Res : constant Item := Curr_Item (Men);
   begin
      if Res = Null_Item then
         raise Menu_Exception;
      end if;
      return Res;
   end Current;

   procedure Set_Top_Row (Men  : Menu;
                          Line : Line_Position)
   is
      function Set_Toprow (Men  : Menu;
                           Line : C_Int) return Eti_Error;
      pragma Import (C, Set_Toprow, "set_top_row");

   begin
      Eti_Exception (Set_Toprow (Men, C_Int (Line)));
   end Set_Top_Row;

   function Top_Row (Men : Menu) return Line_Position
   is
      function Toprow (Men : Menu) return C_Int;
      pragma Import (C, Toprow, "top_row");

      Res : constant C_Int := Toprow (Men);
   begin
      if Res = Curses_Err then
         raise Menu_Exception;
      end if;
      return Line_Position (Res);
   end Top_Row;

   function Get_Index (Itm : Item) return Positive
   is
      function Get_Itemindex (Itm : Item) return C_Int;
      pragma Import (C, Get_Itemindex, "item_index");

      Res : constant C_Int := Get_Itemindex (Itm);
   begin
      if Res = Curses_Err then
         raise Menu_Exception;
      end if;
      return Positive (Natural (Res) + Positive'First);
   end Get_Index;
-------------------------------------------------------------------------------
   procedure Post (Men  : Menu;
                   Post : Boolean := True)
   is
      function M_Post (Men : Menu) return Eti_Error;
      pragma Import (C, M_Post, "post_menu");
      function M_Unpost (Men : Menu) return Eti_Error;
      pragma Import (C, M_Unpost, "unpost_menu");

   begin
      if Post then
         Eti_Exception (M_Post (Men));
      else
         Eti_Exception (M_Unpost (Men));
      end if;
   end Post;
-------------------------------------------------------------------------------
   procedure Set_Options (Men     : Menu;
                          Options : Menu_Option_Set)
   is
      function Set_Menu_Opts (Men : Menu;
                              Opt : Menu_Option_Set) return Eti_Error;
      pragma Import (C, Set_Menu_Opts, "set_menu_opts");

   begin
      Eti_Exception (Set_Menu_Opts (Men, Options));
   end Set_Options;

   procedure Switch_Options (Men     : Menu;
                             Options : Menu_Option_Set;
                             On      : Boolean := True)
   is
      function Menu_Opts_On (Men : Menu;
                             Opt : Menu_Option_Set) return Eti_Error;
      pragma Import (C, Menu_Opts_On, "menu_opts_on");
      function Menu_Opts_Off (Men : Menu;
                              Opt : Menu_Option_Set) return Eti_Error;
      pragma Import (C, Menu_Opts_Off, "menu_opts_off");

   begin
      if On then
         Eti_Exception (Menu_Opts_On  (Men, Options));
      else
         Eti_Exception (Menu_Opts_Off (Men, Options));
      end if;
   end Switch_Options;

   procedure Get_Options (Men     : Menu;
                          Options : out Menu_Option_Set)
   is
      function Menu_Opts (Men : Menu) return Menu_Option_Set;
      pragma Import (C, Menu_Opts, "menu_opts");

   begin
      Options := Menu_Opts (Men);
   end Get_Options;

   function Get_Options (Men : Menu := Null_Menu) return Menu_Option_Set
   is
      Mos : Menu_Option_Set;
   begin
      Get_Options (Men, Mos);
      return Mos;
   end Get_Options;
-------------------------------------------------------------------------------
   procedure Set_Window (Men : Menu;
                         Win : Window)
   is
      function Set_Menu_Win (Men : Menu;
                             Win : Window) return Eti_Error;
      pragma Import (C, Set_Menu_Win, "set_menu_win");

   begin
      Eti_Exception (Set_Menu_Win (Men, Win));
   end Set_Window;

   function Get_Window (Men : Menu) return Window
   is
      function Menu_Win (Men : Menu) return Window;
      pragma Import (C, Menu_Win, "menu_win");

      W : constant Window := Menu_Win (Men);
   begin
      return W;
   end Get_Window;

   procedure Set_Sub_Window (Men : Menu;
                             Win : Window)
   is
      function Set_Menu_Sub (Men : Menu;
                             Win : Window) return Eti_Error;
      pragma Import (C, Set_Menu_Sub, "set_menu_sub");

   begin
      Eti_Exception (Set_Menu_Sub (Men, Win));
   end Set_Sub_Window;

   function Get_Sub_Window (Men : Menu) return Window
   is
      function Menu_Sub (Men : Menu) return Window;
      pragma Import (C, Menu_Sub, "menu_sub");

      W : constant Window := Menu_Sub (Men);
   begin
      return W;
   end Get_Sub_Window;

   procedure Scale (Men     : Menu;
                    Lines   : out Line_Count;
                    Columns : out Column_Count)
   is
      type C_Int_Access is access all C_Int;
      function M_Scale (Men    : Menu;
                        Yp, Xp : C_Int_Access) return Eti_Error;
      pragma Import (C, M_Scale, "scale_menu");

      X, Y : aliased C_Int;
   begin
      Eti_Exception (M_Scale (Men, Y'Access, X'Access));
      Lines := Line_Count (Y);
      Columns := Column_Count (X);
   end Scale;
-------------------------------------------------------------------------------
   procedure Position_Cursor (Men : Menu)
   is
      function Pos_Menu_Cursor (Men : Menu) return Eti_Error;
      pragma Import (C, Pos_Menu_Cursor, "pos_menu_cursor");

   begin
      Eti_Exception (Pos_Menu_Cursor (Men));
   end Position_Cursor;

-------------------------------------------------------------------------------
   procedure Set_Mark (Men  : Menu;
                       Mark : String)
   is
      type Char_Ptr is access all Interfaces.C.char;
      function Set_Mark (Men  : Menu;
                         Mark : Char_Ptr) return Eti_Error;
      pragma Import (C, Set_Mark, "set_menu_mark");

      Txt : char_array (0 .. Mark'Length);
      Len : size_t;
   begin
      To_C (Mark, Txt, Len);
      Eti_Exception (Set_Mark (Men, Txt (Txt'First)'Access));
   end Set_Mark;

   procedure Mark (Men  : Menu;
                   Mark : out String)
   is
      function Get_Menu_Mark (Men : Menu) return chars_ptr;
      pragma Import (C, Get_Menu_Mark, "menu_mark");
   begin
      Fill_String (Get_Menu_Mark (Men), Mark);
   end Mark;

   function Mark (Men : Menu) return String
   is
      function Get_Menu_Mark (Men : Menu) return chars_ptr;
      pragma Import (C, Get_Menu_Mark, "menu_mark");
   begin
      return Fill_String (Get_Menu_Mark (Men));
   end Mark;

-------------------------------------------------------------------------------
   procedure Set_Foreground
     (Men   : Menu;
      Fore  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First)
   is
      function Set_Menu_Fore (Men  : Menu;
                              Attr : Attributed_Character) return Eti_Error;
      pragma Import (C, Set_Menu_Fore, "set_menu_fore");

      Ch : constant Attributed_Character := (Ch    => Character'First,
                                             Color => Color,
                                             Attr  => Fore);
   begin
      Eti_Exception (Set_Menu_Fore (Men, Ch));
   end Set_Foreground;

   procedure Foreground (Men  : Menu;
                         Fore : out Character_Attribute_Set)
   is
      function Menu_Fore (Men : Menu) return Attributed_Character;
      pragma Import (C, Menu_Fore, "menu_fore");
   begin
      Fore := Menu_Fore (Men).Attr;
   end Foreground;

   procedure Foreground (Men   : Menu;
                         Fore  : out Character_Attribute_Set;
                         Color : out Color_Pair)
   is
      function Menu_Fore (Men : Menu) return Attributed_Character;
      pragma Import (C, Menu_Fore, "menu_fore");
   begin
      Fore  := Menu_Fore (Men).Attr;
      Color := Menu_Fore (Men).Color;
   end Foreground;

   procedure Set_Background
     (Men   : Menu;
      Back  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First)
   is
      function Set_Menu_Back (Men  : Menu;
                              Attr : Attributed_Character) return Eti_Error;
      pragma Import (C, Set_Menu_Back, "set_menu_back");

      Ch : constant Attributed_Character := (Ch    => Character'First,
                                             Color => Color,
                                             Attr  => Back);
   begin
      Eti_Exception (Set_Menu_Back (Men, Ch));
   end Set_Background;

   procedure Background (Men  : Menu;
                         Back : out Character_Attribute_Set)
   is
      function Menu_Back (Men : Menu) return Attributed_Character;
      pragma Import (C, Menu_Back, "menu_back");
   begin
      Back := Menu_Back (Men).Attr;
   end Background;

   procedure Background (Men   : Menu;
                         Back  : out Character_Attribute_Set;
                         Color : out Color_Pair)
   is
      function Menu_Back (Men : Menu) return Attributed_Character;
      pragma Import (C, Menu_Back, "menu_back");
   begin
      Back  := Menu_Back (Men).Attr;
      Color := Menu_Back (Men).Color;
   end Background;

   procedure Set_Grey (Men   : Menu;
                       Grey  : Character_Attribute_Set := Normal_Video;
                       Color : Color_Pair := Color_Pair'First)
   is
      function Set_Menu_Grey (Men  : Menu;
                              Attr : Attributed_Character) return Eti_Error;
      pragma Import (C, Set_Menu_Grey, "set_menu_grey");

      Ch : constant Attributed_Character := (Ch    => Character'First,
                                             Color => Color,
                                             Attr  => Grey);

   begin
      Eti_Exception (Set_Menu_Grey (Men, Ch));
   end Set_Grey;

   procedure Grey (Men  : Menu;
                   Grey : out Character_Attribute_Set)
   is
      function Menu_Grey (Men : Menu) return Attributed_Character;
      pragma Import (C, Menu_Grey, "menu_grey");
   begin
      Grey := Menu_Grey (Men).Attr;
   end Grey;

   procedure Grey (Men  : Menu;
                   Grey : out Character_Attribute_Set;
                   Color : out Color_Pair)
   is
      function Menu_Grey (Men : Menu) return Attributed_Character;
      pragma Import (C, Menu_Grey, "menu_grey");
   begin
      Grey  := Menu_Grey (Men).Attr;
      Color := Menu_Grey (Men).Color;
   end Grey;

   procedure Set_Pad_Character (Men : Menu;
                                Pad : Character := Space)
   is
      function Set_Menu_Pad (Men : Menu;
                             Ch  : C_Int) return Eti_Error;
      pragma Import (C, Set_Menu_Pad, "set_menu_pad");

   begin
      Eti_Exception (Set_Menu_Pad (Men, C_Int (Character'Pos (Pad))));
   end Set_Pad_Character;

   procedure Pad_Character (Men : Menu;
                            Pad : out Character)
   is
      function Menu_Pad (Men : Menu) return C_Int;
      pragma Import (C, Menu_Pad, "menu_pad");
   begin
      Pad := Character'Val (Menu_Pad (Men));
   end Pad_Character;
-------------------------------------------------------------------------------
   procedure Set_Spacing (Men   : Menu;
                          Descr : Column_Position := 0;
                          Row   : Line_Position   := 0;
                          Col   : Column_Position := 0)
   is
      function Set_Spacing (Men     : Menu;
                            D, R, C : C_Int) return Eti_Error;
      pragma Import (C, Set_Spacing, "set_menu_spacing");

   begin
      Eti_Exception (Set_Spacing (Men,
                                  C_Int (Descr),
                                  C_Int (Row),
                                  C_Int (Col)));
   end Set_Spacing;

   procedure Spacing (Men   : Menu;
                      Descr : out Column_Position;
                      Row   : out Line_Position;
                      Col   : out Column_Position)
   is
      type C_Int_Access is access all C_Int;
      function Get_Spacing (Men     : Menu;
                            D, R, C : C_Int_Access) return Eti_Error;
      pragma Import (C, Get_Spacing, "menu_spacing");

      D, R, C : aliased C_Int;
   begin
      Eti_Exception (Get_Spacing (Men,
                                  D'Access,
                                  R'Access,
                                  C'Access));
      Descr := Column_Position (D);
      Row   := Line_Position (R);
      Col   := Column_Position (C);
   end Spacing;
-------------------------------------------------------------------------------
   function Set_Pattern (Men  : Menu;
                         Text : String) return Boolean
   is
      type Char_Ptr is access all Interfaces.C.char;
      function Set_Pattern (Men     : Menu;
                            Pattern : Char_Ptr) return Eti_Error;
      pragma Import (C, Set_Pattern, "set_menu_pattern");

      S   : char_array (0 .. Text'Length);
      L   : size_t;
      Res : Eti_Error;
   begin
      To_C (Text, S, L);
      Res := Set_Pattern (Men, S (S'First)'Access);
      case Res is
         when E_No_Match =>
            return False;
         when others =>
            Eti_Exception (Res);
            return True;
      end case;
   end Set_Pattern;

   procedure Pattern (Men  : Menu;
                      Text : out String)
   is
      function Get_Pattern (Men : Menu) return chars_ptr;
      pragma Import (C, Get_Pattern, "menu_pattern");
   begin
      Fill_String (Get_Pattern (Men), Text);
   end Pattern;
-------------------------------------------------------------------------------
   procedure Set_Format (Men     : Menu;
                         Lines   : Line_Count;
                         Columns : Column_Count)
   is
      function Set_Menu_Fmt (Men : Menu;
                             Lin : C_Int;
                             Col : C_Int) return Eti_Error;
      pragma Import (C, Set_Menu_Fmt, "set_menu_format");

   begin
      Eti_Exception (Set_Menu_Fmt (Men,
                                   C_Int (Lines),
                                   C_Int (Columns)));

   end Set_Format;

   procedure Format (Men     : Menu;
                     Lines   : out Line_Count;
                     Columns : out Column_Count)
   is
      type C_Int_Access is access all C_Int;
      function Menu_Fmt (Men  : Menu;
                         Y, X : C_Int_Access) return Eti_Error;
      pragma Import (C, Menu_Fmt, "menu_format");

      L, C : aliased C_Int;
   begin
      Eti_Exception (Menu_Fmt (Men, L'Access, C'Access));
      Lines   := Line_Count (L);
      Columns := Column_Count (C);
   end Format;
-------------------------------------------------------------------------------
   procedure Set_Item_Init_Hook (Men  : Menu;
                                 Proc : Menu_Hook_Function)
   is
      function Set_Item_Init (Men  : Menu;
                              Proc : Menu_Hook_Function) return Eti_Error;
      pragma Import (C, Set_Item_Init, "set_item_init");

   begin
      Eti_Exception (Set_Item_Init (Men, Proc));
   end Set_Item_Init_Hook;

   procedure Set_Item_Term_Hook (Men  : Menu;
                                 Proc : Menu_Hook_Function)
   is
      function Set_Item_Term (Men  : Menu;
                              Proc : Menu_Hook_Function) return Eti_Error;
      pragma Import (C, Set_Item_Term, "set_item_term");

   begin
      Eti_Exception (Set_Item_Term (Men, Proc));
   end Set_Item_Term_Hook;

   procedure Set_Menu_Init_Hook (Men  : Menu;
                                 Proc : Menu_Hook_Function)
   is
      function Set_Menu_Init (Men  : Menu;
                              Proc : Menu_Hook_Function) return Eti_Error;
      pragma Import (C, Set_Menu_Init, "set_menu_init");

   begin
      Eti_Exception (Set_Menu_Init (Men, Proc));
   end Set_Menu_Init_Hook;

   procedure Set_Menu_Term_Hook (Men  : Menu;
                                 Proc : Menu_Hook_Function)
   is
      function Set_Menu_Term (Men  : Menu;
                              Proc : Menu_Hook_Function) return Eti_Error;
      pragma Import (C, Set_Menu_Term, "set_menu_term");

   begin
      Eti_Exception (Set_Menu_Term (Men, Proc));
   end Set_Menu_Term_Hook;

   function Get_Item_Init_Hook (Men : Menu) return Menu_Hook_Function
   is
      function Item_Init (Men : Menu) return Menu_Hook_Function;
      pragma Import (C, Item_Init, "item_init");
   begin
      return Item_Init (Men);
   end Get_Item_Init_Hook;

   function Get_Item_Term_Hook (Men : Menu) return Menu_Hook_Function
   is
      function Item_Term (Men : Menu) return Menu_Hook_Function;
      pragma Import (C, Item_Term, "item_term");
   begin
      return Item_Term (Men);
   end Get_Item_Term_Hook;

   function Get_Menu_Init_Hook (Men : Menu) return Menu_Hook_Function
   is
      function Menu_Init (Men : Menu) return Menu_Hook_Function;
      pragma Import (C, Menu_Init, "menu_init");
   begin
      return Menu_Init (Men);
   end Get_Menu_Init_Hook;

   function Get_Menu_Term_Hook (Men : Menu) return Menu_Hook_Function
   is
      function Menu_Term (Men : Menu) return Menu_Hook_Function;
      pragma Import (C, Menu_Term, "menu_term");
   begin
      return Menu_Term (Men);
   end Get_Menu_Term_Hook;
-------------------------------------------------------------------------------
   procedure Redefine (Men   : Menu;
                       Items : Item_Array_Access)
   is
      function Set_Items (Men   : Menu;
                          Items : System.Address) return Eti_Error;
      pragma Import (C, Set_Items, "set_menu_items");

   begin
      pragma Assert (Items.all (Items'Last) = Null_Item);
      if Items.all (Items'Last) /= Null_Item then
         raise Menu_Exception;
      else
         Eti_Exception (Set_Items (Men, Items.all'Address));
      end if;
   end Redefine;

   function Item_Count (Men : Menu) return Natural
   is
      function Count (Men : Menu) return C_Int;
      pragma Import (C, Count, "item_count");
   begin
      return Natural (Count (Men));
   end Item_Count;

   function Items (Men   : Menu;
                   Index : Positive) return Item
   is
      use I_Array;

      function C_Mitems (Men : Menu) return Pointer;
      pragma Import (C, C_Mitems, "menu_items");

      P : Pointer := C_Mitems (Men);
   begin
      if P = null or else Index > Item_Count (Men) then
         raise Menu_Exception;
      else
         P := P + ptrdiff_t (C_Int (Index) - 1);
         return P.all;
      end if;
   end Items;

-------------------------------------------------------------------------------
   function Create (Items : Item_Array_Access) return Menu
   is
      function Newmenu (Items : System.Address) return Menu;
      pragma Import (C, Newmenu, "new_menu");

      M   : Menu;
   begin
      pragma Assert (Items.all (Items'Last) = Null_Item);
      if Items.all (Items'Last) /= Null_Item then
         raise Menu_Exception;
      else
         M := Newmenu (Items.all'Address);
         if M = Null_Menu then
            raise Menu_Exception;
         end if;
         return M;
      end if;
   end Create;

   procedure Delete (Men : in out Menu)
   is
      function Free (Men : Menu) return Eti_Error;
      pragma Import (C, Free, "free_menu");

   begin
      Eti_Exception (Free (Men));
      Men := Null_Menu;
   end Delete;

------------------------------------------------------------------------------
   function Driver (Men : Menu;
                    Key : Key_Code) return Driver_Result
   is
      function Driver (Men : Menu;
                       Key : C_Int) return Eti_Error;
      pragma Import (C, Driver, "menu_driver");

      R : constant Eti_Error := Driver (Men, C_Int (Key));
   begin
      case R is
         when E_Unknown_Command =>
            return Unknown_Request;
         when E_No_Match =>
            return No_Match;
         when E_Request_Denied | E_Not_Selectable =>
            return Request_Denied;
         when others =>
            Eti_Exception (R);
            return Menu_Ok;
      end case;
   end Driver;

   procedure Free (IA         : in out Item_Array_Access;
                   Free_Items : Boolean := False)
   is
      procedure Release is new Ada.Unchecked_Deallocation
        (Item_Array, Item_Array_Access);
   begin
      if IA /= null and then Free_Items then
         for I in IA'First .. (IA'Last - 1) loop
            if IA.all (I) /= Null_Item then
               Delete (IA.all (I));
            end if;
         end loop;
      end if;
      Release (IA);
   end Free;

-------------------------------------------------------------------------------
   function Default_Menu_Options return Menu_Option_Set
   is
   begin
      return Get_Options (Null_Menu);
   end Default_Menu_Options;

   function Default_Item_Options return Item_Option_Set
   is
   begin
      return Get_Options (Null_Item);
   end Default_Item_Options;
-------------------------------------------------------------------------------

end Terminal_Interface.Curses.Menus;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types__adb.htm0000644000175100001440000011451012534703456027172 0ustar tomusers terminal_interface-curses-forms-field_types.adb

File : terminal_interface-curses-forms-field_types.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                 Terminal_Interface.Curses.Forms.Field_Types              --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.28 @
--  @Date: 2014/09/13 19:00:47 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
with Ada.Unchecked_Deallocation;
with System.Address_To_Access_Conversions;

--  |
--  |=====================================================================
--  | man page form_fieldtype.3x
--  |=====================================================================
--  |
package body Terminal_Interface.Curses.Forms.Field_Types is

   use type System.Address;

   package Argument_Conversions is
      new System.Address_To_Access_Conversions (Argument);

   function Get_Fieldtype (F : Field) return C_Field_Type;
   pragma Import (C, Get_Fieldtype, "field_type");

   function Get_Arg (F : Field) return System.Address;
   pragma Import (C, Get_Arg, "field_arg");
   --  |
   --  |=====================================================================
   --  | man page form_field_validation.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   function Get_Type (Fld : Field) return Field_Type_Access
   is
      Low_Level : constant C_Field_Type := Get_Fieldtype (Fld);
      Arg : Argument_Access;
   begin
      if Low_Level = Null_Field_Type then
         return null;
      else
         if Low_Level = M_Builtin_Router or else
            Low_Level = M_Generic_Type or else
            Low_Level = M_Choice_Router or else
            Low_Level = M_Generic_Choice
         then
            Arg := Argument_Access
         (Argument_Conversions.To_Pointer (Get_Arg (Fld)));
            if Arg = null then
               raise Form_Exception;
            else
               return Arg.all.Typ;
            end if;
         else
            raise Form_Exception;
         end if;
      end if;
   end Get_Type;

   function Copy_Arg (Usr : System.Address) return System.Address
   is
   begin
      return Usr;
   end Copy_Arg;

   procedure Free_Arg (Usr : System.Address)
   is
      procedure Free_Type is new Ada.Unchecked_Deallocation
        (Field_Type'Class, Field_Type_Access);
      procedure Freeargs is new Ada.Unchecked_Deallocation
        (Argument, Argument_Access);

      To_Be_Free : Argument_Access
   := Argument_Access (Argument_Conversions.To_Pointer (Usr));
      Low_Level  : C_Field_Type;
   begin
      if To_Be_Free /= null then
         if To_Be_Free.all.Usr /= System.Null_Address then
            Low_Level := To_Be_Free.all.Cft;
            if Low_Level.all.Freearg /= null then
               Low_Level.all.Freearg (To_Be_Free.all.Usr);
            end if;
         end if;
         if To_Be_Free.all.Typ /= null then
            Free_Type (To_Be_Free.all.Typ);
         end if;
         Freeargs (To_Be_Free);
      end if;
   end Free_Arg;

   procedure Wrap_Builtin (Fld : Field;
                           Typ : Field_Type'Class;
                           Cft : C_Field_Type := C_Builtin_Router)
   is
      Usr_Arg   : constant System.Address := Get_Arg (Fld);
      Low_Level : constant C_Field_Type := Get_Fieldtype (Fld);
      Arg : Argument_Access;
      function Set_Fld_Type (F    : Field := Fld;
                             Cf   : C_Field_Type := Cft;
                             Arg1 : Argument_Access) return Eti_Error;
      pragma Import (C, Set_Fld_Type, "set_field_type_user");

   begin
      pragma Assert (Low_Level /= Null_Field_Type);
      if Cft /= C_Builtin_Router and then Cft /= C_Choice_Router then
         raise Form_Exception;
      else
         Arg := new Argument'(Usr => System.Null_Address,
                              Typ => new Field_Type'Class'(Typ),
                              Cft => Get_Fieldtype (Fld));
         if Usr_Arg /= System.Null_Address then
            if Low_Level.all.Copyarg /= null then
               Arg.all.Usr := Low_Level.all.Copyarg (Usr_Arg);
            else
               Arg.all.Usr := Usr_Arg;
            end if;
         end if;

         Eti_Exception (Set_Fld_Type (Arg1 => Arg));
      end if;
   end Wrap_Builtin;

   function Field_Check_Router (Fld : Field;
                                Usr : System.Address) return Curses_Bool
   is
      Arg  : constant Argument_Access
   := Argument_Access (Argument_Conversions.To_Pointer (Usr));
   begin
      pragma Assert (Arg /= null and then Arg.all.Cft /= Null_Field_Type
                     and then Arg.all.Typ /= null);
      if Arg.all.Cft.all.Fcheck /= null then
         return Arg.all.Cft.all.Fcheck (Fld, Arg.all.Usr);
      else
         return 1;
      end if;
   end Field_Check_Router;

   function Char_Check_Router (Ch  : C_Int;
                               Usr : System.Address) return Curses_Bool
   is
      Arg  : constant Argument_Access
   := Argument_Access (Argument_Conversions.To_Pointer (Usr));
   begin
      pragma Assert (Arg /= null and then Arg.all.Cft /= Null_Field_Type
                     and then Arg.all.Typ /= null);
      if Arg.all.Cft.all.Ccheck /= null then
         return Arg.all.Cft.all.Ccheck (Ch, Arg.all.Usr);
      else
         return 1;
      end if;
   end Char_Check_Router;

   function Next_Router (Fld : Field;
                         Usr : System.Address) return Curses_Bool
   is
      Arg  : constant Argument_Access
   := Argument_Access (Argument_Conversions.To_Pointer (Usr));
   begin
      pragma Assert (Arg /= null and then Arg.all.Cft /= Null_Field_Type
                     and then Arg.all.Typ /= null);
      if Arg.all.Cft.all.Next /= null then
         return Arg.all.Cft.all.Next (Fld, Arg.all.Usr);
      else
         return 1;
      end if;
   end Next_Router;

   function Prev_Router (Fld : Field;
                         Usr : System.Address) return Curses_Bool
   is
      Arg  : constant Argument_Access :=
               Argument_Access (Argument_Conversions.To_Pointer (Usr));
   begin
      pragma Assert (Arg /= null and then Arg.all.Cft /= Null_Field_Type
                     and then Arg.all.Typ /= null);
      if Arg.all.Cft.all.Prev /= null then
         return Arg.all.Cft.all.Prev (Fld, Arg.all.Usr);
      else
         return 1;
      end if;
   end Prev_Router;

   --  -----------------------------------------------------------------------
   --
   function C_Builtin_Router return C_Field_Type
   is
      T   : C_Field_Type;
   begin
      if M_Builtin_Router = Null_Field_Type then
         T := New_Fieldtype (Field_Check_Router'Access,
                             Char_Check_Router'Access);
         if T = Null_Field_Type then
            raise Form_Exception;
         else
            Eti_Exception (Set_Fieldtype_Arg (T,
                                              Make_Arg'Access,
                                              Copy_Arg'Access,
                                              Free_Arg'Access));
         end if;
         M_Builtin_Router := T;
      end if;
      pragma Assert (M_Builtin_Router /= Null_Field_Type);
      return M_Builtin_Router;
   end C_Builtin_Router;

   --  -----------------------------------------------------------------------
   --
   function C_Choice_Router return C_Field_Type
   is
      T   : C_Field_Type;
   begin
      if M_Choice_Router = Null_Field_Type then
         T := New_Fieldtype (Field_Check_Router'Access,
                             Char_Check_Router'Access);
         if T = Null_Field_Type then
            raise Form_Exception;
         else
            Eti_Exception (Set_Fieldtype_Arg (T,
                                              Make_Arg'Access,
                                              Copy_Arg'Access,
                                              Free_Arg'Access));

            Eti_Exception (Set_Fieldtype_Choice (T,
                                                 Next_Router'Access,
                                                 Prev_Router'Access));
         end if;
         M_Choice_Router := T;
      end if;
      pragma Assert (M_Choice_Router /= Null_Field_Type);
      return M_Choice_Router;
   end C_Choice_Router;

end Terminal_Interface.Curses.Forms.Field_Types;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-modular_io__adb.htm0000644000175100001440000002365212340214310027325 0ustar tomusers terminal_interface-curses-text_io-modular_io.adb

File : terminal_interface-curses-text_io-modular_io.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Text_IO.Modular_IO               --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Terminal_Interface.Curses.Text_IO.Aux;

package body Terminal_Interface.Curses.Text_IO.Modular_IO is

   package Aux renames Terminal_Interface.Curses.Text_IO.Aux;
   package MIO is new Ada.Text_IO.Modular_IO (Num);

   procedure Put
     (Win   : Window;
      Item  : Num;
      Width : Field := Default_Width;
      Base  : Number_Base := Default_Base)
   is
      Buf : String (1 .. Field'Last);
   begin
      MIO.Put (Buf, Item, Base);
      Aux.Put_Buf (Win, Buf, Width);
   end Put;

   procedure Put
     (Item  : Num;
      Width : Field := Default_Width;
      Base  : Number_Base := Default_Base)
   is
   begin
      Put (Get_Window, Item, Width, Base);
   end Put;

end Terminal_Interface.Curses.Text_IO.Modular_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-form_user_data__adb.htm0000644000175100001440000002530712340214310027637 0ustar tomusers terminal_interface-curses-forms-form_user_data.adb

File : terminal_interface-curses-forms-form_user_data.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                Terminal_Interface.Curses.Forms.Form_User_Data            --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.15 @
--  Binding Version 01.00
------------------------------------------------------------------------------
--  |
--  |=====================================================================
--  | man page form__userptr.3x
--  |=====================================================================
--  |
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms.Form_User_Data is

   use type Interfaces.C.int;

   --  |
   --  |
   --  |
   procedure Set_User_Data (Frm  : Form;
                            Data : User_Access)
   is
      function Set_Form_Userptr (Frm  : Form;
                                 Data : User_Access)  return Eti_Error;
      pragma Import (C, Set_Form_Userptr, "set_form_userptr");

   begin
      Eti_Exception (Set_Form_Userptr (Frm, Data));
   end Set_User_Data;
   --  |
   --  |
   --  |
   function Get_User_Data (Frm  : Form) return User_Access
   is
      function Form_Userptr (Frm : Form) return User_Access;
      pragma Import (C, Form_Userptr, "form_userptr");
   begin
      return Form_Userptr (Frm);
   end Get_User_Data;

   procedure Get_User_Data (Frm  : Form;
                            Data : out User_Access)
   is
   begin
      Data := Get_User_Data (Frm);
   end Get_User_Data;

end Terminal_Interface.Curses.Forms.Form_User_Data;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-integer_io__adb.htm0000644000175100001440000002365212340214310027317 0ustar tomusers terminal_interface-curses-text_io-integer_io.adb

File : terminal_interface-curses-text_io-integer_io.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Text_IO.Integer_IO               --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Terminal_Interface.Curses.Text_IO.Aux;

package body Terminal_Interface.Curses.Text_IO.Integer_IO is

   package Aux renames Terminal_Interface.Curses.Text_IO.Aux;
   package IIO is new Ada.Text_IO.Integer_IO (Num);

   procedure Put
     (Win   : Window;
      Item  : Num;
      Width : Field := Default_Width;
      Base  : Number_Base := Default_Base)
   is
      Buf : String (1 .. Field'Last);
   begin
      IIO.Put (Buf, Item, Base);
      Aux.Put_Buf (Win, Buf, Width);
   end Put;

   procedure Put
     (Item  : Num;
      Width : Field := Default_Width;
      Base  : Number_Base := Default_Base)
   is
   begin
      Put (Get_Window, Item, Width, Base);
   end Put;

end Terminal_Interface.Curses.Text_IO.Integer_IO;
ncurses-6.0-20160213/doc/html/ada/main.htm0000644000175100001440000001256512340214310016347 0ustar tomusers

[No frame version is here]

Files

[T]

Functions/Procedures

[A] [B] [C] [D] [E] [F] [G] [H] [I] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W]
You should start your browsing with one of these files: ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-decimal_io__adb.htm0000644000175100001440000002653112340214310027257 0ustar tomusers terminal_interface-curses-text_io-decimal_io.adb

File : terminal_interface-curses-text_io-decimal_io.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Text_IO.Decimal_IO               --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Terminal_Interface.Curses.Text_IO.Aux;

package body Terminal_Interface.Curses.Text_IO.Decimal_IO is

   package Aux renames Terminal_Interface.Curses.Text_IO.Aux;
   package DIO is new Ada.Text_IO.Decimal_IO (Num);

   procedure Put
     (Win  : Window;
      Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp)
   is
      Buf : String (1 .. Field'Last);
      Len : Field := Fore + 1 + Aft;
   begin
      if Exp > 0 then
         Len := Len + 1 + Exp;
      end if;
      DIO.Put (Buf, Item, Aft, Exp);
      Aux.Put_Buf (Win, Buf, Len, False);
   end Put;

   procedure Put
     (Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp) is
   begin
      Put (Get_Window, Item, Fore, Aft, Exp);
   end Put;

end Terminal_Interface.Curses.Text_IO.Decimal_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-aux__ads.htm0000644000175100001440000001625012340214310026005 0ustar tomusers terminal_interface-curses-text_io-aux.ads

File : terminal_interface-curses-text_io-aux.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                   Terminal_Interface.Curses.Text_IO.Aux                  --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2006,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.14 @
--  @Date: 2009/12/26 17:38:58 @
--  Binding Version 01.00
------------------------------------------------------------------------------
private package Terminal_Interface.Curses.Text_IO.Aux is
   --  pragma Preelaborate (Aux);

   --  This routine is called from the Text_IO output routines for numeric
   --  and enumeration types.
   --
   procedure Put_Buf
     (Win    : Window;               -- The output window
      Buf    : String;               -- The buffer containing the text
      Width  : Field;                -- The width of the output field
      Signal : Boolean := True;      -- If true, we raise Layout_Error
      Ljust  : Boolean := False);    -- The Buf is left justified

end Terminal_Interface.Curses.Text_IO.Aux;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-form_user_data__ads.htm0000644000175100001440000002201512340214310027651 0ustar tomusers terminal_interface-curses-forms-form_user_data.ads

File : terminal_interface-curses-forms-form_user_data.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                Terminal_Interface.Curses.Forms.Form_User_Data            --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.15 @
--  Binding Version 01.00
------------------------------------------------------------------------------

generic
   type User is limited private;
   type User_Access is access User;
package Terminal_Interface.Curses.Forms.Form_User_Data is
   pragma Preelaborate (Terminal_Interface.Curses.Forms.Form_User_Data);

   --  |=====================================================================
   --  | Man page form_userptr.3x
   --  |=====================================================================

   --  #1A NAME="AFU_1"#2|
   procedure Set_User_Data (Frm  : Form;
                            Data : User_Access);
   --  AKA: set_form_userptr
   pragma Inline (Set_User_Data);

   --  #1A NAME="AFU_2"#2|
   procedure Get_User_Data (Frm  : Form;
                            Data : out User_Access);
   --  AKA: form_userptr

   --  #1A NAME="AFU_3"#2|
   function Get_User_Data (Frm  : Form) return User_Access;
   --  AKA: form_userptr
   --  Same as function
   pragma Inline (Get_User_Data);

end Terminal_Interface.Curses.Forms.Form_User_Data;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-panels__adb.htm0000644000175100001440000005136412340214310025005 0ustar tomusers terminal_interface-curses-panels.adb

File : terminal_interface-curses-panels.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                      Terminal_Interface.Curses.Panels                    --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2004,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.14 @
--  @Date: 2009/12/26 17:38:58 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
with Interfaces.C;

package body Terminal_Interface.Curses.Panels is

   use type Interfaces.C.int;

   function Create (Win : Window) return Panel
   is
      function Newpanel (Win : Window) return Panel;
      pragma Import (C, Newpanel, "new_panel");

      Pan : Panel;
   begin
      Pan := Newpanel (Win);
      if Pan = Null_Panel then
         raise Panel_Exception;
      end if;
      return Pan;
   end Create;

   procedure Bottom (Pan : Panel)
   is
      function Bottompanel (Pan : Panel) return C_Int;
      pragma Import (C, Bottompanel, "bottom_panel");
   begin
      if Bottompanel (Pan) = Curses_Err then
         raise Panel_Exception;
      end if;
   end Bottom;

   procedure Top (Pan : Panel)
   is
      function Toppanel (Pan : Panel) return C_Int;
      pragma Import (C, Toppanel, "top_panel");
   begin
      if Toppanel (Pan) = Curses_Err then
         raise Panel_Exception;
      end if;
   end Top;

   procedure Show (Pan : Panel)
   is
      function Showpanel (Pan : Panel) return C_Int;
      pragma Import (C, Showpanel, "show_panel");
   begin
      if Showpanel (Pan) = Curses_Err then
         raise Panel_Exception;
      end if;
   end Show;

   procedure Hide (Pan : Panel)
   is
      function Hidepanel (Pan : Panel) return C_Int;
      pragma Import (C, Hidepanel, "hide_panel");
   begin
      if Hidepanel (Pan) = Curses_Err then
         raise Panel_Exception;
      end if;
   end Hide;

   function Get_Window (Pan : Panel) return Window
   is
      function Panel_Win (Pan : Panel) return Window;
      pragma Import (C, Panel_Win, "panel_window");

      Win : constant Window := Panel_Win (Pan);
   begin
      if Win = Null_Window then
         raise Panel_Exception;
      end if;
      return Win;
   end Get_Window;

   procedure Replace (Pan : Panel;
                      Win : Window)
   is
      function Replace_Pan (Pan : Panel;
                            Win : Window) return C_Int;
      pragma Import (C, Replace_Pan, "replace_panel");
   begin
      if Replace_Pan (Pan, Win) = Curses_Err then
         raise Panel_Exception;
      end if;
   end Replace;

   procedure Move (Pan    : Panel;
                   Line   : Line_Position;
                   Column : Column_Position)
   is
      function Move (Pan    : Panel;
                     Line   : C_Int;
                     Column : C_Int) return C_Int;
      pragma Import (C, Move, "move_panel");
   begin
      if Move (Pan, C_Int (Line), C_Int (Column)) = Curses_Err then
         raise Panel_Exception;
      end if;
   end Move;

   function Is_Hidden (Pan : Panel) return Boolean
   is
      function Panel_Hidden (Pan : Panel) return C_Int;
      pragma Import (C, Panel_Hidden, "panel_hidden");
   begin
      if Panel_Hidden (Pan) = Curses_False then
         return False;
      else
         return True;
      end if;
   end Is_Hidden;

   procedure Delete (Pan : in out Panel)
   is
      function Del_Panel (Pan : Panel) return C_Int;
      pragma Import (C, Del_Panel, "del_panel");
   begin
      if Del_Panel (Pan) = Curses_Err then
         raise Panel_Exception;
      end if;
      Pan := Null_Panel;
   end Delete;

end Terminal_Interface.Curses.Panels;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-float_io__ads.htm0000644000175100001440000002157712340214310027014 0ustar tomusers terminal_interface-curses-text_io-float_io.ads

File : terminal_interface-curses-text_io-float_io.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                Terminal_Interface.Curses.Text_IO.Float_IO                --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
generic
   type Num is digits <>;

package Terminal_Interface.Curses.Text_IO.Float_IO is

   Default_Fore : Field := 2;
   Default_Aft  : Field := Num'Digits - 1;
   Default_Exp  : Field := 3;

   procedure Put
     (Win  : Window;
      Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp);

   procedure Put
     (Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp);

private
   pragma Inline (Put);

end Terminal_Interface.Curses.Text_IO.Float_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_user_data__adb.htm0000644000175100001440000002537012340214310027757 0ustar tomusers terminal_interface-curses-forms-field_user_data.adb

File : terminal_interface-curses-forms-field_user_data.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Forms.Field_User_Data            --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.15 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use  Terminal_Interface.Curses.Aux;

--  |
--  |=====================================================================
--  | man page form_field_userptr.3x
--  |=====================================================================
--  |
package body Terminal_Interface.Curses.Forms.Field_User_Data is
   --  |
   --  |
   --  |
   use type Interfaces.C.int;

   procedure Set_User_Data (Fld  : Field;
                            Data : User_Access)
   is
      function Set_Field_Userptr (Fld : Field;
                                  Usr : User_Access) return Eti_Error;
      pragma Import (C, Set_Field_Userptr, "set_field_userptr");

   begin
      Eti_Exception (Set_Field_Userptr (Fld, Data));
   end Set_User_Data;
   --  |
   --  |
   --  |
   function Get_User_Data (Fld  : Field) return User_Access
   is
      function Field_Userptr (Fld : Field) return User_Access;
      pragma Import (C, Field_Userptr, "field_userptr");
   begin
      return Field_Userptr (Fld);
   end Get_User_Data;

   procedure Get_User_Data (Fld  : Field;
                            Data : out User_Access)
   is
   begin
      Data := Get_User_Data (Fld);
   end Get_User_Data;

end Terminal_Interface.Curses.Forms.Field_User_Data;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-intfield__adb.htm0000644000175100001440000002347412340214310030753 0ustar tomusers terminal_interface-curses-forms-field_types-intfield.adb

File : terminal_interface-curses-forms-field_types-intfield.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--            Terminal_Interface.Curses.Forms.Field_Types.IntField          --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.13 @
--  @Date: 2014/05/24 21:31:05 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms.Field_Types.IntField is

   procedure Set_Field_Type (Fld : Field;
                             Typ : Integer_Field)
   is
      function Set_Fld_Type (F    : Field := Fld;
                             Arg1 : C_Int;
                             Arg2 : C_Long_Int;
                             Arg3 : C_Long_Int) return Eti_Error;
      pragma Import (C, Set_Fld_Type, "set_field_type_integer");

   begin
      Eti_Exception (Set_Fld_Type (Arg1 => C_Int (Typ.Precision),
                                   Arg2 => C_Long_Int (Typ.Lower_Limit),
                                   Arg3 => C_Long_Int (Typ.Upper_Limit)));
      Wrap_Builtin (Fld, Typ);
   end Set_Field_Type;

end Terminal_Interface.Curses.Forms.Field_Types.IntField;
ncurses-6.0-20160213/doc/html/ada/funcs/0000755000175100001440000000000012534703455016040 5ustar tomusersncurses-6.0-20160213/doc/html/ada/funcs/M.htm0000644000175100001440000001223612534703455016752 0ustar tomusers M

Functions - M

[index] ncurses-6.0-20160213/doc/html/ada/funcs/N.htm0000644000175100001440000000617312340214307016742 0ustar tomusers N

Functions - N

[index] ncurses-6.0-20160213/doc/html/ada/funcs/K.htm0000644000175100001440000000176112340214307016735 0ustar tomusers K

Functions - K

[index] ncurses-6.0-20160213/doc/html/ada/funcs/O.htm0000644000175100001440000000162212340214307016735 0ustar tomusers O

Functions - O

[index] ncurses-6.0-20160213/doc/html/ada/funcs/W.htm0000644000175100001440000001072412340214307016750 0ustar tomusers W

Functions - W

[index] ncurses-6.0-20160213/doc/html/ada/funcs/D.htm0000644000175100001440000001145612340214307016730 0ustar tomusers D

Functions - D

[index] ncurses-6.0-20160213/doc/html/ada/funcs/E.htm0000644000175100001440000000246212340214307016726 0ustar tomusers E

Functions - E

[index] ncurses-6.0-20160213/doc/html/ada/funcs/U.htm0000644000175100001440000000372312340214307016747 0ustar tomusers U

Functions - U

[index] ncurses-6.0-20160213/doc/html/ada/funcs/Q.htm0000644000175100001440000000060412340214307016736 0ustar tomusers Q

Functions - Q

[index] ncurses-6.0-20160213/doc/html/ada/funcs/R.htm0000644000175100001440000000771512340214307016751 0ustar tomusers R

Functions - R

[index] ncurses-6.0-20160213/doc/html/ada/funcs/T.htm0000644000175100001440000000733612534703455016766 0ustar tomusers T

Functions - T

[index] ncurses-6.0-20160213/doc/html/ada/funcs/V.htm0000644000175100001440000000145712340214307016752 0ustar tomusers V

Functions - V

[index] ncurses-6.0-20160213/doc/html/ada/funcs/L.htm0000644000175100001440000000364612340214307016742 0ustar tomusers L

Functions - L

[index] ncurses-6.0-20160213/doc/html/ada/funcs/H.htm0000644000175100001440000000325212340214307016727 0ustar tomusers H

Functions - H

[index] ncurses-6.0-20160213/doc/html/ada/funcs/B.htm0000644000175100001440000000335212340214307016722 0ustar tomusers B

Functions - B

[index] ncurses-6.0-20160213/doc/html/ada/funcs/S.htm0000644000175100001440000005320312534703455016757 0ustar tomusers S

Functions - S

[index] ncurses-6.0-20160213/doc/html/ada/funcs/A.htm0000644000175100001440000000463312340214307016724 0ustar tomusers A

Functions - A

[index] ncurses-6.0-20160213/doc/html/ada/funcs/G.htm0000644000175100001440000002642712340214307016737 0ustar tomusers G

Functions - G

[index] ncurses-6.0-20160213/doc/html/ada/funcs/I.htm0000644000175100001440000001134712340214307016734 0ustar tomusers I

Functions - I

[index] ncurses-6.0-20160213/doc/html/ada/funcs/C.htm0000644000175100001440000001406712340214307016730 0ustar tomusers C

Functions - C

[index] ncurses-6.0-20160213/doc/html/ada/funcs/P.htm0000644000175100001440000001553512340214307016746 0ustar tomusers P

Functions - P

[index] ncurses-6.0-20160213/doc/html/ada/funcs/F.htm0000644000175100001440000001335612340214307016733 0ustar tomusers F

Functions - F

[index] ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-user-choice__ads.htm0000644000175100001440000002757112340214310031406 0ustar tomusers terminal_interface-curses-forms-field_types-user-choice.ads

File : terminal_interface-curses-forms-field_types-user-choice.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--           Terminal_Interface.Curses.Forms.Field_Types.User.Choice        --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2008,2011 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.14 @
--  @Date: 2011/03/19 12:27:47 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;

package Terminal_Interface.Curses.Forms.Field_Types.User.Choice is
   pragma Preelaborate
     (Terminal_Interface.Curses.Forms.Field_Types.User.Choice);

   subtype C_Int is Interfaces.C.int;

   type User_Defined_Field_Type_With_Choice is abstract new
     User_Defined_Field_Type with null record;
   --  This is the root of the mechanism we use to create field types in
   --  Ada95 that allow the prev/next mechanism. You should your own type
   --  derive from this one and implement the Field_Check, Character_Check
   --  Next and Previous functions for your own type.

   type User_Defined_Field_Type_With_Choice_Access is access all
     User_Defined_Field_Type_With_Choice'Class;

   function Next
     (Fld : Field;
      Typ : User_Defined_Field_Type_With_Choice) return Boolean
      is abstract;
   --  If True is returned, the function successfully generated a next
   --  value into the fields buffer.

   function Previous
     (Fld : Field;
      Typ : User_Defined_Field_Type_With_Choice) return Boolean
      is abstract;
   --  If True is returned, the function successfully generated a previous
   --  value into the fields buffer.

   --  +----------------------------------------------------------------------
   --  | Private Part.
   --  |
private
   function C_Generic_Choice return C_Field_Type;

   function Generic_Next (Fld : Field;
                          Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Generic_Next);
   --  This is the generic next Choice_Function for the low-level fieldtype
   --  representing all the User_Defined_Field_Type derivatives. It routes
   --  the call to the Next implementation for the type.

   function Generic_Prev (Fld : Field;
                          Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Generic_Prev);
   --  This is the generic prev Choice_Function for the low-level fieldtype
   --  representing all the User_Defined_Field_Type derivatives. It routes
   --  the call to the Previous implementation for the type.

end Terminal_Interface.Curses.Forms.Field_Types.User.Choice;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-complex_io__adb.htm0000644000175100001440000002471412340214310027331 0ustar tomusers terminal_interface-curses-text_io-complex_io.adb

File : terminal_interface-curses-text_io-complex_io.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Text_IO.Complex_IO               --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Text_IO.Float_IO;

package body Terminal_Interface.Curses.Text_IO.Complex_IO is

   package FIO is new
     Terminal_Interface.Curses.Text_IO.Float_IO (Complex_Types.Real'Base);

   procedure Put
     (Win  : Window;
      Item : Complex;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp)
   is
   begin
      Put (Win, '(');
      FIO.Put (Win, Item.Re, Fore, Aft, Exp);
      Put (Win, ',');
      FIO.Put (Win, Item.Im, Fore, Aft, Exp);
      Put (Win, ')');
   end Put;

   procedure Put
     (Item : Complex;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp)
   is
   begin
      Put (Get_Window, Item, Fore, Aft, Exp);
   end Put;

end Terminal_Interface.Curses.Text_IO.Complex_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-aux__adb.htm0000644000175100001440000003202412340214307024316 0ustar tomusers terminal_interface-curses-aux.adb

File : terminal_interface-curses-aux.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                      Terminal_Interface.Curses.Aux                       --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  Binding Version 01.00
------------------------------------------------------------------------------
package body Terminal_Interface.Curses.Aux is
   --
   --  Some helpers
   procedure Fill_String (Cp  : chars_ptr;
                          Str : out String)
   is
      --  Fill the string with the characters referenced by the
      --  chars_ptr.
      --
      Len : Natural;
   begin
      if Cp /= Null_Ptr then
         Len := Natural (Strlen (Cp));
         if Str'Length < Len then
            raise Constraint_Error;
         end if;
         declare
            S : String (1 .. Len);
         begin
            S := Value (Cp);
            Str (Str'First .. (Str'First + Len - 1)) := S (S'Range);
         end;
      else
         Len := 0;
      end if;

      if Len < Str'Length then
         Str ((Str'First + Len) .. Str'Last) := (others => ' ');
      end if;

   end Fill_String;

   function Fill_String (Cp : chars_ptr) return String
   is
      Len : Natural;
   begin
      if Cp /= Null_Ptr then
         Len := Natural (Strlen (Cp));
         if Len = 0 then
            return "";
         else
            declare
               S : String (1 .. Len);
            begin
               Fill_String (Cp, S);
               return S;
            end;
         end if;
      else
         return "";
      end if;
   end Fill_String;

   procedure Eti_Exception (Code : Eti_Error)
   is
   begin
      case Code is
         when E_Ok              => null;
         when E_System_Error    => raise Eti_System_Error;
         when E_Bad_Argument    => raise Eti_Bad_Argument;
         when E_Posted          => raise Eti_Posted;
         when E_Connected       => raise Eti_Connected;
         when E_Bad_State       => raise Eti_Bad_State;
         when E_No_Room         => raise Eti_No_Room;
         when E_Not_Posted      => raise Eti_Not_Posted;
         when E_Unknown_Command => raise Eti_Unknown_Command;
         when E_No_Match        => raise Eti_No_Match;
         when E_Not_Selectable  => raise Eti_Not_Selectable;
         when E_Not_Connected   => raise Eti_Not_Connected;
         when E_Request_Denied  => raise Eti_Request_Denied;
         when E_Invalid_Field   => raise Eti_Invalid_Field;
         when E_Current         => raise Eti_Current;
      end case;
   end Eti_Exception;

end Terminal_Interface.Curses.Aux;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_user_data__ads.htm0000644000175100001440000002211012340214310027765 0ustar tomusers terminal_interface-curses-forms-field_user_data.ads

File : terminal_interface-curses-forms-field_user_data.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Forms.Field_User_Data            --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.16 @
--  Binding Version 01.00
------------------------------------------------------------------------------

generic
   type User is limited private;
   type User_Access is access User;
package Terminal_Interface.Curses.Forms.Field_User_Data is
   pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_User_Data);

   --  |=====================================================================
   --  | Man page form_field_userptr.3x
   --  |=====================================================================

   --  #1A NAME="AFU_1"#2|
   procedure Set_User_Data (Fld  : Field;
                            Data : User_Access);
   --  AKA: set_field_userptr
   pragma Inline (Set_User_Data);

   --  #1A NAME="AFU_2"#2|
   procedure Get_User_Data (Fld  : Field;
                            Data : out User_Access);
   --  AKA: field_userptr

   --  #1A NAME="AFU_3"#2|
   function Get_User_Data (Fld  : Field) return User_Access;
   --  AKA: field_userptr
   --  Sama as function
   pragma Inline (Get_User_Data);

end Terminal_Interface.Curses.Forms.Field_User_Data;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-enumeration__adb.htm0000644000175100001440000004337412340214310031504 0ustar tomusers terminal_interface-curses-forms-field_types-enumeration.adb

File : terminal_interface-curses-forms-field_types-enumeration.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--          Terminal_Interface.Curses.Forms.Field_Types.Enumeration         --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Unchecked_Deallocation;
with Interfaces.C; use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms.Field_Types.Enumeration is

   function Create (Info               : Enumeration_Info;
                    Auto_Release_Names : Boolean := False)
                    return Enumeration_Field
   is
      procedure Release_String is
        new Ada.Unchecked_Deallocation (String,
                                        String_Access);
      E : Enumeration_Field;
      L : constant size_t := 1 + size_t (Info.C);
      S : String_Access;
   begin
      E.Case_Sensitive       := Info.Case_Sensitive;
      E.Match_Must_Be_Unique := Info.Match_Must_Be_Unique;
      E.Arr := new chars_ptr_array (size_t (1) .. L);
      for I in 1 .. Positive (L - 1) loop
         if Info.Names (I) = null then
            raise Form_Exception;
         end if;
         E.Arr.all (size_t (I)) := New_String (Info.Names (I).all);
         if Auto_Release_Names then
            S := Info.Names (I);
            Release_String (S);
         end if;
      end loop;
      E.Arr.all (L) := Null_Ptr;
      return E;
   end Create;

   procedure Release (Enum : in out Enumeration_Field)
   is
      I : size_t := 0;
      P : chars_ptr;
   begin
      loop
         P := Enum.Arr.all (I);
         exit when P = Null_Ptr;
         Free (P);
         Enum.Arr.all (I) := Null_Ptr;
         I := I + 1;
      end loop;
      Enum.Arr := null;
   end Release;

   procedure Set_Field_Type (Fld : Field;
                             Typ : Enumeration_Field)
   is
      function Set_Fld_Type (F    : Field := Fld;
                             Arg1 : chars_ptr_array;
                             Arg2 : C_Int;
                             Arg3 : C_Int) return Eti_Error;
      pragma Import (C, Set_Fld_Type, "set_field_type_enum");

   begin
      if Typ.Arr = null then
         raise Form_Exception;
      end if;
      Eti_Exception
        (Set_Fld_Type
           (Arg1 => Typ.Arr.all,
            Arg2 => C_Int (Boolean'Pos (Typ.Case_Sensitive)),
            Arg3 => C_Int (Boolean'Pos (Typ.Match_Must_Be_Unique))));
      Wrap_Builtin (Fld, Typ, C_Choice_Router);
   end Set_Field_Type;

end Terminal_Interface.Curses.Forms.Field_Types.Enumeration;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-aux__adb.htm0000644000175100001440000004060512340214310025765 0ustar tomusers terminal_interface-curses-text_io-aux.adb

File : terminal_interface-curses-text_io-aux.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                   Terminal_Interface.Curses.Text_IO.Aux                  --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2006,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.13 @
--  @Date: 2009/12/26 17:38:58 @
--  Binding Version 01.00
------------------------------------------------------------------------------
package body Terminal_Interface.Curses.Text_IO.Aux is

   procedure Put_Buf
     (Win    : Window;
      Buf    : String;
      Width  : Field;
      Signal : Boolean := True;
      Ljust  : Boolean := False)
   is
      L   : Field;
      Len : Field;
      W   : Field := Width;
      LC  : Line_Count;
      CC  : Column_Count;
      Y   : Line_Position;
      X   : Column_Position;

      procedure Output (From, To : Field);

      procedure Output (From, To : Field)
      is
      begin
         if Len > 0 then
            if W = 0 then
               W := Len;
            end if;
            if Len > W then
               --  LRM A10.6 (7) says this
               W := Len;
            end if;

            pragma Assert (Len <= W);
            Get_Size (Win, LC, CC);
            if Column_Count (Len) > CC then
               if Signal then
                  raise Layout_Error;
               else
                  return;
               end if;
            else
               if Len < W and then not Ljust then
                  declare
                     Filler : constant String (1 .. (W - Len))
                       := (others => ' ');
                  begin
                     Put (Win, Filler);
                  end;
               end if;
               Get_Cursor_Position (Win, Y, X);
               if (X + Column_Position (Len)) > CC then
                  New_Line (Win);
               end if;
               Put (Win, Buf (From .. To));
               if Len < W and then Ljust then
                  declare
                     Filler : constant String (1 .. (W - Len))
                       := (others => ' ');
                  begin
                     Put (Win, Filler);
                  end;
               end if;
            end if;
         end if;
      end Output;

   begin
      pragma Assert (Win /= Null_Window);
      if Ljust then
         L := 1;
         for I in 1 .. Buf'Length loop
            exit when Buf (L) = ' ';
            L := L + 1;
         end loop;
         Len := L - 1;
         Output (1, Len);
      else  -- input buffer is not left justified
         L := Buf'Length;
         for I in 1 .. Buf'Length loop
            exit when Buf (L) = ' ';
            L := L - 1;
         end loop;
         Len := Buf'Length - L;
         Output (L + 1, Buf'Length);
      end if;
   end Put_Buf;

end Terminal_Interface.Curses.Text_IO.Aux;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses__adb.htm0000644000175100001440000121721412340214310023524 0ustar tomusers terminal_interface-curses.adb

File : terminal_interface-curses.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                        Terminal_Interface.Curses                         --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author: Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.14 @
--  @Date: 2014/05/24 21:31:05 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with System;

with Terminal_Interface.Curses.Aux;
with Interfaces.C;                  use Interfaces.C;
with Interfaces.C.Strings;          use Interfaces.C.Strings;
with Ada.Characters.Handling;       use Ada.Characters.Handling;
with Ada.Strings.Fixed;

package body Terminal_Interface.Curses is

   use Aux;
   use type System.Bit_Order;

   package ASF renames Ada.Strings.Fixed;

   type chtype_array is array (size_t range <>)
      of aliased Attributed_Character;
   pragma Convention (C, chtype_array);

------------------------------------------------------------------------------
   function Key_Name (Key : Real_Key_Code) return String
   is
      function Keyname (K : C_Int) return chars_ptr;
      pragma Import (C, Keyname, "keyname");

      Ch : Character;
   begin
      if Key <= Character'Pos (Character'Last) then
         Ch := Character'Val (Key);
         if Is_Control (Ch) then
            return Un_Control (Attributed_Character'(Ch    => Ch,
                                                     Color => Color_Pair'First,
                                                     Attr  => Normal_Video));
         elsif Is_Graphic (Ch) then
            declare
               S : String (1 .. 1);
            begin
               S (1) := Ch;
               return S;
            end;
         else
            return "";
         end if;
      else
         return Fill_String (Keyname (C_Int (Key)));
      end if;
   end Key_Name;

   procedure Key_Name (Key  :  Real_Key_Code;
                       Name : out String)
   is
   begin
      ASF.Move (Key_Name (Key), Name);
   end Key_Name;

------------------------------------------------------------------------------
   procedure Init_Screen
   is
      function Initscr return Window;
      pragma Import (C, Initscr, "initscr");

      W : Window;
   begin
      W := Initscr;
      if W = Null_Window then
         raise Curses_Exception;
      end if;
   end Init_Screen;

   procedure End_Windows
   is
      function Endwin return C_Int;
      pragma Import (C, Endwin, "endwin");
   begin
      if Endwin = Curses_Err then
         raise Curses_Exception;
      end if;
   end End_Windows;

   function Is_End_Window return Boolean
   is
      function Isendwin return Curses_Bool;
      pragma Import (C, Isendwin, "isendwin");
   begin
      if Isendwin = Curses_Bool_False then
         return False;
      else
         return True;
      end if;
   end Is_End_Window;
------------------------------------------------------------------------------
   procedure Move_Cursor (Win    : Window := Standard_Window;
                          Line   : Line_Position;
                          Column : Column_Position)
   is
      function Wmove (Win    : Window;
                      Line   : C_Int;
                      Column : C_Int
                     ) return C_Int;
      pragma Import (C, Wmove, "wmove");
   begin
      if Wmove (Win, C_Int (Line), C_Int (Column)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Move_Cursor;
------------------------------------------------------------------------------
   procedure Add (Win : Window := Standard_Window;
                  Ch  : Attributed_Character)
   is
      function Waddch (W  : Window;
                       Ch : Attributed_Character) return C_Int;
      pragma Import (C, Waddch, "waddch");
   begin
      if Waddch (Win, Ch) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Add;

   procedure Add (Win : Window := Standard_Window;
                  Ch  : Character)
   is
   begin
      Add (Win,
           Attributed_Character'(Ch    => Ch,
                                 Color => Color_Pair'First,
                                 Attr  => Normal_Video));
   end Add;

   procedure Add
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position;
      Ch     : Attributed_Character)
   is
      function mvwaddch (W  : Window;
                         Y  : C_Int;
                         X  : C_Int;
                         Ch : Attributed_Character) return C_Int;
      pragma Import (C, mvwaddch, "mvwaddch");
   begin
      if mvwaddch (Win, C_Int (Line),
                   C_Int (Column),
                   Ch) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Add;

   procedure Add
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position;
      Ch     : Character)
   is
   begin
      Add (Win,
           Line,
           Column,
           Attributed_Character'(Ch    => Ch,
                                 Color => Color_Pair'First,
                                 Attr  => Normal_Video));
   end Add;

   procedure Add_With_Immediate_Echo
     (Win : Window := Standard_Window;
      Ch  : Attributed_Character)
   is
      function Wechochar (W  : Window;
                          Ch : Attributed_Character) return C_Int;
      pragma Import (C, Wechochar, "wechochar");
   begin
      if Wechochar (Win, Ch) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Add_With_Immediate_Echo;

   procedure Add_With_Immediate_Echo
     (Win : Window := Standard_Window;
      Ch  : Character)
   is
   begin
      Add_With_Immediate_Echo
        (Win,
         Attributed_Character'(Ch    => Ch,
                               Color => Color_Pair'First,
                               Attr  => Normal_Video));
   end Add_With_Immediate_Echo;
------------------------------------------------------------------------------
   function Create (Number_Of_Lines       : Line_Count;
                    Number_Of_Columns     : Column_Count;
                    First_Line_Position   : Line_Position;
                    First_Column_Position : Column_Position) return Window
   is
      function Newwin (Number_Of_Lines       : C_Int;
                       Number_Of_Columns     : C_Int;
                       First_Line_Position   : C_Int;
                       First_Column_Position : C_Int) return Window;
      pragma Import (C, Newwin, "newwin");

      W : Window;
   begin
      W := Newwin (C_Int (Number_Of_Lines),
                   C_Int (Number_Of_Columns),
                   C_Int (First_Line_Position),
                   C_Int (First_Column_Position));
      if W = Null_Window then
         raise Curses_Exception;
      end if;
      return W;
   end Create;

   procedure Delete (Win : in out Window)
   is
      function Wdelwin (W : Window) return C_Int;
      pragma Import (C, Wdelwin, "delwin");
   begin
      if Wdelwin (Win) = Curses_Err then
         raise Curses_Exception;
      end if;
      Win := Null_Window;
   end Delete;

   function Sub_Window
     (Win                   : Window := Standard_Window;
      Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window
   is
      function Subwin
        (Win                   : Window;
         Number_Of_Lines       : C_Int;
         Number_Of_Columns     : C_Int;
         First_Line_Position   : C_Int;
         First_Column_Position : C_Int) return Window;
      pragma Import (C, Subwin, "subwin");

      W : Window;
   begin
      W := Subwin (Win,
                   C_Int (Number_Of_Lines),
                   C_Int (Number_Of_Columns),
                   C_Int (First_Line_Position),
                   C_Int (First_Column_Position));
      if W = Null_Window then
         raise Curses_Exception;
      end if;
      return W;
   end Sub_Window;

   function Derived_Window
     (Win                   : Window := Standard_Window;
      Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window
   is
      function Derwin
        (Win                   : Window;
         Number_Of_Lines       : C_Int;
         Number_Of_Columns     : C_Int;
         First_Line_Position   : C_Int;
         First_Column_Position : C_Int) return Window;
      pragma Import (C, Derwin, "derwin");

      W : Window;
   begin
      W := Derwin (Win,
                   C_Int (Number_Of_Lines),
                   C_Int (Number_Of_Columns),
                   C_Int (First_Line_Position),
                   C_Int (First_Column_Position));
      if W = Null_Window then
         raise Curses_Exception;
      end if;
      return W;
   end Derived_Window;

   function Duplicate (Win : Window) return Window
   is
      function Dupwin (Win : Window) return Window;
      pragma Import (C, Dupwin, "dupwin");

      W : constant Window := Dupwin (Win);
   begin
      if W = Null_Window then
         raise Curses_Exception;
      end if;
      return W;
   end Duplicate;

   procedure Move_Window (Win    : Window;
                          Line   : Line_Position;
                          Column : Column_Position)
   is
      function Mvwin (Win    : Window;
                      Line   : C_Int;
                      Column : C_Int) return C_Int;
      pragma Import (C, Mvwin, "mvwin");
   begin
      if Mvwin (Win, C_Int (Line), C_Int (Column)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Move_Window;

   procedure Move_Derived_Window (Win    : Window;
                                  Line   : Line_Position;
                                  Column : Column_Position)
   is
      function Mvderwin (Win    : Window;
                         Line   : C_Int;
                         Column : C_Int) return C_Int;
      pragma Import (C, Mvderwin, "mvderwin");
   begin
      if Mvderwin (Win, C_Int (Line), C_Int (Column)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Move_Derived_Window;

   procedure Set_Synch_Mode (Win  : Window  := Standard_Window;
                             Mode : Boolean := False)
   is
      function Syncok (Win  : Window;
                       Mode : Curses_Bool) return C_Int;
      pragma Import (C, Syncok, "syncok");
   begin
      if Syncok (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_Synch_Mode;
------------------------------------------------------------------------------
   procedure Add (Win : Window := Standard_Window;
                  Str : String;
                  Len : Integer := -1)
   is
      function Waddnstr (Win : Window;
                         Str : char_array;
                         Len : C_Int := -1) return C_Int;
      pragma Import (C, Waddnstr, "waddnstr");

      Txt    : char_array (0 .. Str'Length);
      Length : size_t;
   begin
      To_C (Str, Txt, Length);
      if Waddnstr (Win, Txt, C_Int (Len)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Add;

   procedure Add
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position;
      Str    : String;
      Len    : Integer := -1)
   is
   begin
      Move_Cursor (Win, Line, Column);
      Add (Win, Str, Len);
   end Add;
------------------------------------------------------------------------------
   procedure Add
     (Win : Window := Standard_Window;
      Str : Attributed_String;
      Len : Integer := -1)
   is
      function Waddchnstr (Win : Window;
                           Str : chtype_array;
                           Len : C_Int := -1) return C_Int;
      pragma Import (C, Waddchnstr, "waddchnstr");

      Txt : chtype_array (0 .. Str'Length);
   begin
      for Length in 1 .. size_t (Str'Length) loop
         Txt (Length - 1) := Str (Natural (Length));
      end loop;
      Txt (Str'Length) := Default_Character;
      if Waddchnstr (Win,
                     Txt,
                     C_Int (Len)) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Add;

   procedure Add
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position;
      Str    : Attributed_String;
      Len    : Integer := -1)
   is
   begin
      Move_Cursor (Win, Line, Column);
      Add (Win, Str, Len);
   end Add;
------------------------------------------------------------------------------
   procedure Border
     (Win                       : Window := Standard_Window;
      Left_Side_Symbol          : Attributed_Character := Default_Character;
      Right_Side_Symbol         : Attributed_Character := Default_Character;
      Top_Side_Symbol           : Attributed_Character := Default_Character;
      Bottom_Side_Symbol        : Attributed_Character := Default_Character;
      Upper_Left_Corner_Symbol  : Attributed_Character := Default_Character;
      Upper_Right_Corner_Symbol : Attributed_Character := Default_Character;
      Lower_Left_Corner_Symbol  : Attributed_Character := Default_Character;
      Lower_Right_Corner_Symbol : Attributed_Character := Default_Character)
   is
      function Wborder (W   : Window;
                        LS  : Attributed_Character;
                        RS  : Attributed_Character;
                        TS  : Attributed_Character;
                        BS  : Attributed_Character;
                        ULC : Attributed_Character;
                        URC : Attributed_Character;
                        LLC : Attributed_Character;
                        LRC : Attributed_Character) return C_Int;
      pragma Import (C, Wborder, "wborder");
   begin
      if Wborder (Win,
                  Left_Side_Symbol,
                  Right_Side_Symbol,
                  Top_Side_Symbol,
                  Bottom_Side_Symbol,
                  Upper_Left_Corner_Symbol,
                  Upper_Right_Corner_Symbol,
                  Lower_Left_Corner_Symbol,
                  Lower_Right_Corner_Symbol) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Border;

   procedure Box
     (Win               : Window := Standard_Window;
      Vertical_Symbol   : Attributed_Character := Default_Character;
      Horizontal_Symbol : Attributed_Character := Default_Character)
   is
   begin
      Border (Win,
              Vertical_Symbol, Vertical_Symbol,
              Horizontal_Symbol, Horizontal_Symbol);
   end Box;

   procedure Horizontal_Line
     (Win         : Window := Standard_Window;
      Line_Size   : Natural;
      Line_Symbol : Attributed_Character := Default_Character)
   is
      function Whline (W   : Window;
                       Ch  : Attributed_Character;
                       Len : C_Int) return C_Int;
      pragma Import (C, Whline, "whline");
   begin
      if Whline (Win,
                 Line_Symbol,
                 C_Int (Line_Size)) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Horizontal_Line;

   procedure Vertical_Line
     (Win         : Window := Standard_Window;
      Line_Size   : Natural;
      Line_Symbol : Attributed_Character := Default_Character)
   is
      function Wvline (W   : Window;
                       Ch  : Attributed_Character;
                       Len : C_Int) return C_Int;
      pragma Import (C, Wvline, "wvline");
   begin
      if Wvline (Win,
                 Line_Symbol,
                 C_Int (Line_Size)) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Vertical_Line;

------------------------------------------------------------------------------
   function Get_Keystroke (Win : Window := Standard_Window)
     return Real_Key_Code
   is
      function Wgetch (W : Window) return C_Int;
      pragma Import (C, Wgetch, "wgetch");

      C : constant C_Int := Wgetch (Win);
   begin
      if C = Curses_Err then
         return Key_None;
      else
         return Real_Key_Code (C);
      end if;
   end Get_Keystroke;

   procedure Undo_Keystroke (Key : Real_Key_Code)
   is
      function Ungetch (Ch : C_Int) return C_Int;
      pragma Import (C, Ungetch, "ungetch");
   begin
      if Ungetch (C_Int (Key)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Undo_Keystroke;

   function Has_Key (Key : Special_Key_Code) return Boolean
   is
      function Haskey (Key : C_Int) return C_Int;
      pragma Import (C, Haskey, "has_key");
   begin
      if Haskey (C_Int (Key)) = Curses_False then
         return False;
      else
         return True;
      end if;
   end Has_Key;

   function Is_Function_Key (Key : Special_Key_Code) return Boolean
   is
      L : constant Special_Key_Code  := Special_Key_Code (Natural (Key_F0) +
        Natural (Function_Key_Number'Last));
   begin
      if (Key >= Key_F0) and then (Key <= L) then
         return True;
      else
         return False;
      end if;
   end Is_Function_Key;

   function Function_Key (Key : Real_Key_Code)
                          return Function_Key_Number
   is
   begin
      if Is_Function_Key (Key) then
         return Function_Key_Number (Key - Key_F0);
      else
         raise Constraint_Error;
      end if;
   end Function_Key;

   function Function_Key_Code (Key : Function_Key_Number) return Real_Key_Code
   is
   begin
      return Real_Key_Code (Natural (Key_F0) + Natural (Key));
   end Function_Key_Code;
------------------------------------------------------------------------------
   procedure Standout (Win : Window  := Standard_Window;
                       On  : Boolean := True)
   is
      function wstandout (Win : Window) return C_Int;
      pragma Import (C, wstandout, "wstandout");
      function wstandend (Win : Window) return C_Int;
      pragma Import (C, wstandend, "wstandend");

      Err : C_Int;
   begin
      if On then
         Err := wstandout (Win);
      else
         Err := wstandend (Win);
      end if;
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Standout;

   procedure Switch_Character_Attribute
     (Win  : Window := Standard_Window;
      Attr : Character_Attribute_Set := Normal_Video;
      On   : Boolean := True)
   is
      function Wattron (Win    : Window;
                        C_Attr : Attributed_Character) return C_Int;
      pragma Import (C, Wattron, "wattr_on");
      function Wattroff (Win    : Window;
                         C_Attr : Attributed_Character) return C_Int;
      pragma Import (C, Wattroff, "wattr_off");
      --  In Ada we use the On Boolean to control whether or not we want to
      --  switch on or off the attributes in the set.
      Err : C_Int;
      AC  : constant Attributed_Character := (Ch    => Character'First,
                                              Color => Color_Pair'First,
                                              Attr  => Attr);
   begin
      if On then
         Err := Wattron  (Win, AC);
      else
         Err := Wattroff (Win, AC);
      end if;
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Switch_Character_Attribute;

   procedure Set_Character_Attributes
     (Win   : Window := Standard_Window;
      Attr  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First)
   is
      function Wattrset (Win    : Window;
                         C_Attr : Attributed_Character) return C_Int;
      pragma Import (C, Wattrset, "wattrset"); -- ??? wattr_set
   begin
      if Wattrset (Win, (Ch => Character'First,
                         Color => Color,
                         Attr => Attr)) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Set_Character_Attributes;

   function Get_Character_Attribute (Win : Window := Standard_Window)
                                     return Character_Attribute_Set
   is
      function Wattrget (Win : Window;
                         Atr : access Attributed_Character;
                         Col : access C_Short;
                         Opt : System.Address) return C_Int;
      pragma Import (C, Wattrget, "wattr_get");

      Attr : aliased Attributed_Character;
      Col  : aliased C_Short;
      Res  : constant C_Int := Wattrget (Win, Attr'Access, Col'Access,
                                         System.Null_Address);
   begin
      if Res = Curses_Ok then
         return Attr.Attr;
      else
         raise Curses_Exception;
      end if;
   end Get_Character_Attribute;

   function Get_Character_Attribute (Win : Window := Standard_Window)
                                     return Color_Pair
   is
      function Wattrget (Win : Window;
                         Atr : access Attributed_Character;
                         Col : access C_Short;
                         Opt : System.Address) return C_Int;
      pragma Import (C, Wattrget, "wattr_get");

      Attr : aliased Attributed_Character;
      Col  : aliased C_Short;
      Res  : constant C_Int := Wattrget (Win, Attr'Access, Col'Access,
                                         System.Null_Address);
   begin
      if Res = Curses_Ok then
         return Attr.Color;
      else
         raise Curses_Exception;
      end if;
   end Get_Character_Attribute;

   procedure Set_Color (Win  : Window := Standard_Window;
                        Pair : Color_Pair)
   is
      function Wset_Color (Win   : Window;
                           Color : C_Short;
                           Opts  : C_Void_Ptr) return C_Int;
      pragma Import (C, Wset_Color, "wcolor_set");
   begin
      if Wset_Color (Win,
                     C_Short (Pair),
                     C_Void_Ptr (System.Null_Address)) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Set_Color;

   procedure Change_Attributes
     (Win   : Window := Standard_Window;
      Count : Integer := -1;
      Attr  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First)
   is
      function Wchgat (Win   : Window;
                       Cnt   : C_Int;
                       Attr  : Attributed_Character;
                       Color : C_Short;
                       Opts  : System.Address := System.Null_Address)
                       return C_Int;
      pragma Import (C, Wchgat, "wchgat");
   begin
      if Wchgat (Win,
                 C_Int (Count),
                 (Ch => Character'First,
                  Color => Color_Pair'First,
                  Attr => Attr),
                 C_Short (Color)) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Change_Attributes;

   procedure Change_Attributes
     (Win    : Window := Standard_Window;
      Line   : Line_Position := Line_Position'First;
      Column : Column_Position := Column_Position'First;
      Count  : Integer := -1;
      Attr   : Character_Attribute_Set := Normal_Video;
      Color  : Color_Pair := Color_Pair'First)
   is
   begin
      Move_Cursor (Win, Line, Column);
      Change_Attributes (Win, Count, Attr, Color);
   end Change_Attributes;
------------------------------------------------------------------------------
   procedure Beep
   is
      function Beeper return C_Int;
      pragma Import (C, Beeper, "beep");
   begin
      if Beeper = Curses_Err then
         raise Curses_Exception;
      end if;
   end Beep;

   procedure Flash_Screen
   is
      function Flash return C_Int;
      pragma Import (C, Flash, "flash");
   begin
      if Flash = Curses_Err then
         raise Curses_Exception;
      end if;
   end Flash_Screen;
------------------------------------------------------------------------------
   procedure Set_Cbreak_Mode (SwitchOn : Boolean := True)
   is
      function Cbreak return C_Int;
      pragma Import (C, Cbreak, "cbreak");
      function NoCbreak return C_Int;
      pragma Import (C, NoCbreak, "nocbreak");

      Err : C_Int;
   begin
      if SwitchOn then
         Err := Cbreak;
      else
         Err := NoCbreak;
      end if;
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_Cbreak_Mode;

   procedure Set_Raw_Mode (SwitchOn : Boolean := True)
   is
      function Raw return C_Int;
      pragma Import (C, Raw, "raw");
      function NoRaw return C_Int;
      pragma Import (C, NoRaw, "noraw");

      Err : C_Int;
   begin
      if SwitchOn then
         Err := Raw;
      else
         Err := NoRaw;
      end if;
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_Raw_Mode;

   procedure Set_Echo_Mode (SwitchOn : Boolean := True)
   is
      function Echo return C_Int;
      pragma Import (C, Echo, "echo");
      function NoEcho return C_Int;
      pragma Import (C, NoEcho, "noecho");

      Err : C_Int;
   begin
      if SwitchOn then
         Err := Echo;
      else
         Err := NoEcho;
      end if;
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_Echo_Mode;

   procedure Set_Meta_Mode (Win      : Window := Standard_Window;
                            SwitchOn : Boolean := True)
   is
      function Meta (W : Window; Mode : Curses_Bool) return C_Int;
      pragma Import (C, Meta, "meta");
   begin
      if Meta (Win, Curses_Bool (Boolean'Pos (SwitchOn))) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_Meta_Mode;

   procedure Set_KeyPad_Mode (Win      : Window := Standard_Window;
                              SwitchOn : Boolean := True)
   is
      function Keypad (W : Window; Mode : Curses_Bool) return C_Int;
      pragma Import (C, Keypad, "keypad");
   begin
      if Keypad (Win, Curses_Bool (Boolean'Pos (SwitchOn))) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_KeyPad_Mode;

   function Get_KeyPad_Mode (Win : Window := Standard_Window)
                             return Boolean
   is
      function Is_Keypad (W : Window) return Curses_Bool;
      pragma Import (C, Is_Keypad, "is_keypad");
   begin
      return (Is_Keypad (Win) /= Curses_Bool_False);
   end Get_KeyPad_Mode;

   procedure Half_Delay (Amount : Half_Delay_Amount)
   is
      function Halfdelay (Amount : C_Int) return C_Int;
      pragma Import (C, Halfdelay, "halfdelay");
   begin
      if Halfdelay (C_Int (Amount)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Half_Delay;

   procedure Set_Flush_On_Interrupt_Mode
     (Win  : Window := Standard_Window;
      Mode : Boolean := True)
   is
      function Intrflush (Win : Window; Mode : Curses_Bool) return C_Int;
      pragma Import (C, Intrflush, "intrflush");
   begin
      if Intrflush (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_Flush_On_Interrupt_Mode;

   procedure Set_Queue_Interrupt_Mode
     (Win   : Window := Standard_Window;
      Flush : Boolean := True)
   is
      procedure Qiflush;
      pragma Import (C, Qiflush, "qiflush");
      procedure No_Qiflush;
      pragma Import (C, No_Qiflush, "noqiflush");
   begin
      if Win = Null_Window then
         raise Curses_Exception;
      end if;
      if Flush then
         Qiflush;
      else
         No_Qiflush;
      end if;
   end Set_Queue_Interrupt_Mode;

   procedure Set_NoDelay_Mode
     (Win  : Window := Standard_Window;
      Mode : Boolean := False)
   is
      function Nodelay (Win : Window; Mode : Curses_Bool) return C_Int;
      pragma Import (C, Nodelay, "nodelay");
   begin
      if Nodelay (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_NoDelay_Mode;

   procedure Set_Timeout_Mode (Win    : Window := Standard_Window;
                               Mode   : Timeout_Mode;
                               Amount : Natural)
   is
      procedure Wtimeout (Win : Window; Amount : C_Int);
      pragma Import (C, Wtimeout, "wtimeout");

      Time : C_Int;
   begin
      case Mode is
         when Blocking     => Time := -1;
         when Non_Blocking => Time := 0;
         when Delayed      =>
            if Amount = 0 then
               raise Constraint_Error;
            end if;
            Time := C_Int (Amount);
      end case;
      Wtimeout (Win, Time);
   end Set_Timeout_Mode;

   procedure Set_Escape_Timer_Mode
     (Win       : Window := Standard_Window;
      Timer_Off : Boolean := False)
   is
      function Notimeout (Win : Window; Mode : Curses_Bool) return C_Int;
      pragma Import (C, Notimeout, "notimeout");
   begin
      if Notimeout (Win, Curses_Bool (Boolean'Pos (Timer_Off)))
        = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Set_Escape_Timer_Mode;

------------------------------------------------------------------------------
   procedure Set_NL_Mode (SwitchOn : Boolean := True)
   is
      function NL return C_Int;
      pragma Import (C, NL, "nl");
      function NoNL return C_Int;
      pragma Import (C, NoNL, "nonl");

      Err : C_Int;
   begin
      if SwitchOn then
         Err := NL;
      else
         Err := NoNL;
      end if;
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_NL_Mode;

   procedure Clear_On_Next_Update
     (Win      : Window := Standard_Window;
      Do_Clear : Boolean := True)
   is
      function Clear_Ok (W : Window; Flag : Curses_Bool) return C_Int;
      pragma Import (C, Clear_Ok, "clearok");
   begin
      if Clear_Ok (Win, Curses_Bool (Boolean'Pos (Do_Clear))) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Clear_On_Next_Update;

   procedure Use_Insert_Delete_Line
     (Win    : Window := Standard_Window;
      Do_Idl : Boolean := True)
   is
      function IDL_Ok (W : Window; Flag : Curses_Bool) return C_Int;
      pragma Import (C, IDL_Ok, "idlok");
   begin
      if IDL_Ok (Win, Curses_Bool (Boolean'Pos (Do_Idl))) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Use_Insert_Delete_Line;

   procedure Use_Insert_Delete_Character
     (Win    : Window := Standard_Window;
      Do_Idc : Boolean := True)
   is
      procedure IDC_Ok (W : Window; Flag : Curses_Bool);
      pragma Import (C, IDC_Ok, "idcok");
   begin
      IDC_Ok (Win, Curses_Bool (Boolean'Pos (Do_Idc)));
   end Use_Insert_Delete_Character;

   procedure Leave_Cursor_After_Update
     (Win      : Window := Standard_Window;
      Do_Leave : Boolean := True)
   is
      function Leave_Ok (W : Window; Flag : Curses_Bool) return C_Int;
      pragma Import (C, Leave_Ok, "leaveok");
   begin
      if Leave_Ok (Win, Curses_Bool (Boolean'Pos (Do_Leave))) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Leave_Cursor_After_Update;

   procedure Immediate_Update_Mode
     (Win  : Window := Standard_Window;
      Mode : Boolean := False)
   is
      procedure Immedok (Win : Window; Mode : Curses_Bool);
      pragma Import (C, Immedok, "immedok");
   begin
      Immedok (Win, Curses_Bool (Boolean'Pos (Mode)));
   end Immediate_Update_Mode;

   procedure Allow_Scrolling
     (Win  : Window  := Standard_Window;
      Mode : Boolean := False)
   is
      function Scrollok (Win : Window; Mode : Curses_Bool) return C_Int;
      pragma Import (C, Scrollok, "scrollok");
   begin
      if Scrollok (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Allow_Scrolling;

   function Scrolling_Allowed (Win : Window := Standard_Window)
                               return Boolean
   is
      function Is_Scroll_Ok (W : Window) return Curses_Bool;
      pragma Import (C, Is_Scroll_Ok, "is_scrollok");
   begin
      return (Is_Scroll_Ok (Win) /= Curses_Bool_False);
   end Scrolling_Allowed;

   procedure Set_Scroll_Region
     (Win         : Window := Standard_Window;
      Top_Line    : Line_Position;
      Bottom_Line : Line_Position)
   is
      function Wsetscrreg (Win : Window;
                           Lin : C_Int;
                           Col : C_Int) return C_Int;
      pragma Import (C, Wsetscrreg, "wsetscrreg");
   begin
      if Wsetscrreg (Win, C_Int (Top_Line), C_Int (Bottom_Line))
        = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Set_Scroll_Region;
------------------------------------------------------------------------------
   procedure Update_Screen
   is
      function Do_Update return C_Int;
      pragma Import (C, Do_Update, "doupdate");
   begin
      if Do_Update = Curses_Err then
         raise Curses_Exception;
      end if;
   end Update_Screen;

   procedure Refresh (Win : Window := Standard_Window)
   is
      function Wrefresh (W : Window) return C_Int;
      pragma Import (C, Wrefresh, "wrefresh");
   begin
      if Wrefresh (Win) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Refresh;

   procedure Refresh_Without_Update
     (Win : Window := Standard_Window)
   is
      function Wnoutrefresh (W : Window) return C_Int;
      pragma Import (C, Wnoutrefresh, "wnoutrefresh");
   begin
      if Wnoutrefresh (Win) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Refresh_Without_Update;

   procedure Redraw (Win : Window := Standard_Window)
   is
      function Redrawwin (Win : Window) return C_Int;
      pragma Import (C, Redrawwin, "redrawwin");
   begin
      if Redrawwin (Win) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Redraw;

   procedure Redraw
     (Win        : Window := Standard_Window;
      Begin_Line : Line_Position;
      Line_Count : Positive)
   is
      function Wredrawln (Win : Window; First : C_Int; Cnt : C_Int)
                          return C_Int;
      pragma Import (C, Wredrawln, "wredrawln");
   begin
      if Wredrawln (Win,
                    C_Int (Begin_Line),
                    C_Int (Line_Count)) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Redraw;

------------------------------------------------------------------------------
   procedure Erase (Win : Window := Standard_Window)
   is
      function Werase (W : Window) return C_Int;
      pragma Import (C, Werase, "werase");
   begin
      if Werase (Win) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Erase;

   procedure Clear (Win : Window := Standard_Window)
   is
      function Wclear (W : Window) return C_Int;
      pragma Import (C, Wclear, "wclear");
   begin
      if Wclear (Win) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Clear;

   procedure Clear_To_End_Of_Screen (Win : Window := Standard_Window)
   is
      function Wclearbot (W : Window) return C_Int;
      pragma Import (C, Wclearbot, "wclrtobot");
   begin
      if Wclearbot (Win) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Clear_To_End_Of_Screen;

   procedure Clear_To_End_Of_Line (Win : Window := Standard_Window)
   is
      function Wcleareol (W : Window) return C_Int;
      pragma Import (C, Wcleareol, "wclrtoeol");
   begin
      if Wcleareol (Win) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Clear_To_End_Of_Line;
------------------------------------------------------------------------------
   procedure Set_Background
     (Win : Window := Standard_Window;
      Ch  : Attributed_Character)
   is
      procedure WBackground (W : Window; Ch : Attributed_Character);
      pragma Import (C, WBackground, "wbkgdset");
   begin
      WBackground (Win, Ch);
   end Set_Background;

   procedure Change_Background
     (Win : Window := Standard_Window;
      Ch  : Attributed_Character)
   is
      function WChangeBkgd (W : Window; Ch : Attributed_Character)
         return C_Int;
      pragma Import (C, WChangeBkgd, "wbkgd");
   begin
      if WChangeBkgd (Win, Ch) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Change_Background;

   function Get_Background (Win : Window := Standard_Window)
     return Attributed_Character
   is
      function Wgetbkgd (Win : Window) return Attributed_Character;
      pragma Import (C, Wgetbkgd, "getbkgd");
   begin
      return Wgetbkgd (Win);
   end Get_Background;
------------------------------------------------------------------------------
   procedure Change_Lines_Status (Win   : Window := Standard_Window;
                                  Start : Line_Position;
                                  Count : Positive;
                                  State : Boolean)
   is
      function Wtouchln (Win : Window;
                         Sta : C_Int;
                         Cnt : C_Int;
                         Chg : C_Int) return C_Int;
      pragma Import (C, Wtouchln, "wtouchln");
   begin
      if Wtouchln (Win, C_Int (Start), C_Int (Count),
                   C_Int (Boolean'Pos (State))) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Change_Lines_Status;

   procedure Touch (Win : Window := Standard_Window)
   is
      Y : Line_Position;
      X : Column_Position;
   begin
      Get_Size (Win, Y, X);
      pragma Warnings (Off, X);         --  unreferenced
      Change_Lines_Status (Win, 0, Positive (Y), True);
   end Touch;

   procedure Untouch (Win : Window := Standard_Window)
   is
      Y : Line_Position;
      X : Column_Position;
   begin
      Get_Size (Win, Y, X);
      pragma Warnings (Off, X);         --  unreferenced
      Change_Lines_Status (Win, 0, Positive (Y), False);
   end Untouch;

   procedure Touch (Win   : Window := Standard_Window;
                    Start : Line_Position;
                    Count : Positive)
   is
   begin
      Change_Lines_Status (Win, Start, Count, True);
   end Touch;

   function Is_Touched
     (Win  : Window := Standard_Window;
      Line : Line_Position) return Boolean
   is
      function WLineTouched (W : Window; L : C_Int) return Curses_Bool;
      pragma Import (C, WLineTouched, "is_linetouched");
   begin
      if WLineTouched (Win, C_Int (Line)) = Curses_Bool_False then
         return False;
      else
         return True;
      end if;
   end Is_Touched;

   function Is_Touched
     (Win : Window := Standard_Window) return Boolean
   is
      function WWinTouched (W : Window) return Curses_Bool;
      pragma Import (C, WWinTouched, "is_wintouched");
   begin
      if WWinTouched (Win) = Curses_Bool_False then
         return False;
      else
         return True;
      end if;
   end Is_Touched;
------------------------------------------------------------------------------
   procedure Copy
     (Source_Window            : Window;
      Destination_Window       : Window;
      Source_Top_Row           : Line_Position;
      Source_Left_Column       : Column_Position;
      Destination_Top_Row      : Line_Position;
      Destination_Left_Column  : Column_Position;
      Destination_Bottom_Row   : Line_Position;
      Destination_Right_Column : Column_Position;
      Non_Destructive_Mode     : Boolean := True)
   is
      function Copywin (Src : Window;
                        Dst : Window;
                        Str : C_Int;
                        Slc : C_Int;
                        Dtr : C_Int;
                        Dlc : C_Int;
                        Dbr : C_Int;
                        Drc : C_Int;
                        Ndm : C_Int) return C_Int;
      pragma Import (C, Copywin, "copywin");
   begin
      if Copywin (Source_Window,
                  Destination_Window,
                  C_Int (Source_Top_Row),
                  C_Int (Source_Left_Column),
                  C_Int (Destination_Top_Row),
                  C_Int (Destination_Left_Column),
                  C_Int (Destination_Bottom_Row),
                  C_Int (Destination_Right_Column),
                  Boolean'Pos (Non_Destructive_Mode)
                 ) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Copy;

   procedure Overwrite
     (Source_Window      : Window;
      Destination_Window : Window)
   is
      function Overwrite (Src : Window; Dst : Window) return C_Int;
      pragma Import (C, Overwrite, "overwrite");
   begin
      if Overwrite (Source_Window, Destination_Window) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Overwrite;

   procedure Overlay
     (Source_Window      : Window;
      Destination_Window : Window)
   is
      function Overlay (Src : Window; Dst : Window) return C_Int;
      pragma Import (C, Overlay, "overlay");
   begin
      if Overlay (Source_Window, Destination_Window) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Overlay;

------------------------------------------------------------------------------
   procedure Insert_Delete_Lines
     (Win   : Window := Standard_Window;
      Lines : Integer       := 1) -- default is to insert one line above
   is
      function Winsdelln (W : Window; N : C_Int) return C_Int;
      pragma Import (C, Winsdelln, "winsdelln");
   begin
      if Winsdelln (Win, C_Int (Lines)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Insert_Delete_Lines;

   procedure Delete_Line (Win : Window := Standard_Window)
   is
   begin
      Insert_Delete_Lines (Win, -1);
   end Delete_Line;

   procedure Insert_Line (Win : Window := Standard_Window)
   is
   begin
      Insert_Delete_Lines (Win, 1);
   end Insert_Line;
------------------------------------------------------------------------------

   procedure Get_Size
     (Win               : Window := Standard_Window;
      Number_Of_Lines   : out Line_Count;
      Number_Of_Columns : out Column_Count)
   is
      function GetMaxY (W : Window) return C_Int;
      pragma Import (C, GetMaxY, "getmaxy");

      function GetMaxX (W : Window) return C_Int;
      pragma Import (C, GetMaxX, "getmaxx");

      Y : constant C_Int := GetMaxY (Win);
      X : constant C_Int := GetMaxX (Win);
   begin
      Number_Of_Lines   := Line_Count (Y);
      Number_Of_Columns := Column_Count (X);
   end Get_Size;

   procedure Get_Window_Position
     (Win             : Window := Standard_Window;
      Top_Left_Line   : out Line_Position;
      Top_Left_Column : out Column_Position)
   is
      function GetBegY (W : Window) return C_Int;
      pragma Import (C, GetBegY, "getbegy");

      function GetBegX (W : Window) return C_Int;
      pragma Import (C, GetBegX, "getbegx");

      Y : constant C_Short := C_Short (GetBegY (Win));
      X : constant C_Short := C_Short (GetBegX (Win));
   begin
      Top_Left_Line   := Line_Position (Y);
      Top_Left_Column := Column_Position (X);
   end Get_Window_Position;

   procedure Get_Cursor_Position
     (Win    :  Window := Standard_Window;
      Line   : out Line_Position;
      Column : out Column_Position)
   is
      function GetCurY (W : Window) return C_Int;
      pragma Import (C, GetCurY, "getcury");

      function GetCurX (W : Window) return C_Int;
      pragma Import (C, GetCurX, "getcurx");

      Y : constant C_Short := C_Short (GetCurY (Win));
      X : constant C_Short := C_Short (GetCurX (Win));
   begin
      Line   := Line_Position (Y);
      Column := Column_Position (X);
   end Get_Cursor_Position;

   procedure Get_Origin_Relative_To_Parent
     (Win                :  Window;
      Top_Left_Line      : out Line_Position;
      Top_Left_Column    : out Column_Position;
      Is_Not_A_Subwindow : out Boolean)
   is
      function GetParY (W : Window) return C_Int;
      pragma Import (C, GetParY, "getpary");

      function GetParX (W : Window) return C_Int;
      pragma Import (C, GetParX, "getparx");

      Y : constant C_Int := GetParY (Win);
      X : constant C_Int := GetParX (Win);
   begin
      if Y = -1 then
         Top_Left_Line   := Line_Position'Last;
         Top_Left_Column := Column_Position'Last;
         Is_Not_A_Subwindow := True;
      else
         Top_Left_Line   := Line_Position (Y);
         Top_Left_Column := Column_Position (X);
         Is_Not_A_Subwindow := False;
      end if;
   end Get_Origin_Relative_To_Parent;
------------------------------------------------------------------------------
   function New_Pad (Lines   : Line_Count;
                     Columns : Column_Count) return Window
   is
      function Newpad (Lines : C_Int; Columns : C_Int) return Window;
      pragma Import (C, Newpad, "newpad");

      W : Window;
   begin
      W := Newpad (C_Int (Lines), C_Int (Columns));
      if W = Null_Window then
         raise Curses_Exception;
      end if;
      return W;
   end New_Pad;

   function Sub_Pad
     (Pad                   : Window;
      Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window
   is
      function Subpad
        (Pad                   : Window;
         Number_Of_Lines       : C_Int;
         Number_Of_Columns     : C_Int;
         First_Line_Position   : C_Int;
         First_Column_Position : C_Int) return Window;
      pragma Import (C, Subpad, "subpad");

      W : Window;
   begin
      W := Subpad (Pad,
                   C_Int (Number_Of_Lines),
                   C_Int (Number_Of_Columns),
                   C_Int (First_Line_Position),
                   C_Int (First_Column_Position));
      if W = Null_Window then
         raise Curses_Exception;
      end if;
      return W;
   end Sub_Pad;

   procedure Refresh
     (Pad                      : Window;
      Source_Top_Row           : Line_Position;
      Source_Left_Column       : Column_Position;
      Destination_Top_Row      : Line_Position;
      Destination_Left_Column  : Column_Position;
      Destination_Bottom_Row   : Line_Position;
      Destination_Right_Column : Column_Position)
   is
      function Prefresh
        (Pad                      : Window;
         Source_Top_Row           : C_Int;
         Source_Left_Column       : C_Int;
         Destination_Top_Row      : C_Int;
         Destination_Left_Column  : C_Int;
         Destination_Bottom_Row   : C_Int;
         Destination_Right_Column : C_Int) return C_Int;
      pragma Import (C, Prefresh, "prefresh");
   begin
      if Prefresh (Pad,
                   C_Int (Source_Top_Row),
                   C_Int (Source_Left_Column),
                   C_Int (Destination_Top_Row),
                   C_Int (Destination_Left_Column),
                   C_Int (Destination_Bottom_Row),
                   C_Int (Destination_Right_Column)) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Refresh;

   procedure Refresh_Without_Update
     (Pad                      : Window;
      Source_Top_Row           : Line_Position;
      Source_Left_Column       : Column_Position;
      Destination_Top_Row      : Line_Position;
      Destination_Left_Column  : Column_Position;
      Destination_Bottom_Row   : Line_Position;
      Destination_Right_Column : Column_Position)
   is
      function Pnoutrefresh
        (Pad                      : Window;
         Source_Top_Row           : C_Int;
         Source_Left_Column       : C_Int;
         Destination_Top_Row      : C_Int;
         Destination_Left_Column  : C_Int;
         Destination_Bottom_Row   : C_Int;
         Destination_Right_Column : C_Int) return C_Int;
      pragma Import (C, Pnoutrefresh, "pnoutrefresh");
   begin
      if Pnoutrefresh (Pad,
                       C_Int (Source_Top_Row),
                       C_Int (Source_Left_Column),
                       C_Int (Destination_Top_Row),
                       C_Int (Destination_Left_Column),
                       C_Int (Destination_Bottom_Row),
                       C_Int (Destination_Right_Column)) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Refresh_Without_Update;

   procedure Add_Character_To_Pad_And_Echo_It
     (Pad : Window;
      Ch  : Attributed_Character)
   is
      function Pechochar (Pad : Window; Ch : Attributed_Character)
                          return C_Int;
      pragma Import (C, Pechochar, "pechochar");
   begin
      if Pechochar (Pad, Ch) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Add_Character_To_Pad_And_Echo_It;

   procedure Add_Character_To_Pad_And_Echo_It
     (Pad : Window;
      Ch  : Character)
   is
   begin
      Add_Character_To_Pad_And_Echo_It
        (Pad,
         Attributed_Character'(Ch    => Ch,
                               Color => Color_Pair'First,
                               Attr  => Normal_Video));
   end Add_Character_To_Pad_And_Echo_It;
------------------------------------------------------------------------------
   procedure Scroll (Win    : Window := Standard_Window;
                     Amount : Integer := 1)
   is
      function Wscrl (Win : Window; N : C_Int) return C_Int;
      pragma Import (C, Wscrl, "wscrl");

   begin
      if Wscrl (Win, C_Int (Amount)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Scroll;

------------------------------------------------------------------------------
   procedure Delete_Character (Win : Window := Standard_Window)
   is
      function Wdelch (Win : Window) return C_Int;
      pragma Import (C, Wdelch, "wdelch");
   begin
      if Wdelch (Win) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Delete_Character;

   procedure Delete_Character
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position)
   is
      function Mvwdelch (Win : Window;
                         Lin : C_Int;
                         Col : C_Int) return C_Int;
      pragma Import (C, Mvwdelch, "mvwdelch");
   begin
      if Mvwdelch (Win, C_Int (Line), C_Int (Column)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Delete_Character;
------------------------------------------------------------------------------
   function Peek (Win : Window := Standard_Window)
     return Attributed_Character
   is
      function Winch (Win : Window) return Attributed_Character;
      pragma Import (C, Winch, "winch");
   begin
      return Winch (Win);
   end Peek;

   function Peek
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position) return Attributed_Character
   is
      function Mvwinch (Win : Window;
                        Lin : C_Int;
                        Col : C_Int) return Attributed_Character;
      pragma Import (C, Mvwinch, "mvwinch");
   begin
      return Mvwinch (Win, C_Int (Line), C_Int (Column));
   end Peek;
------------------------------------------------------------------------------
   procedure Insert (Win : Window := Standard_Window;
                     Ch  : Attributed_Character)
   is
      function Winsch (Win : Window; Ch : Attributed_Character) return C_Int;
      pragma Import (C, Winsch, "winsch");
   begin
      if Winsch (Win, Ch) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Insert;

   procedure Insert
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position;
      Ch     : Attributed_Character)
   is
      function Mvwinsch (Win : Window;
                         Lin : C_Int;
                         Col : C_Int;
                         Ch  : Attributed_Character) return C_Int;
      pragma Import (C, Mvwinsch, "mvwinsch");
   begin
      if Mvwinsch (Win,
                   C_Int (Line),
                   C_Int (Column),
                   Ch) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Insert;
------------------------------------------------------------------------------
   procedure Insert (Win : Window := Standard_Window;
                     Str : String;
                     Len : Integer := -1)
   is
      function Winsnstr (Win : Window;
                         Str : char_array;
                         Len : Integer := -1) return C_Int;
      pragma Import (C, Winsnstr, "winsnstr");

      Txt    : char_array (0 .. Str'Length);
      Length : size_t;
   begin
      To_C (Str, Txt, Length);
      if Winsnstr (Win, Txt, Len) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Insert;

   procedure Insert
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position;
      Str    : String;
      Len    : Integer := -1)
   is
      function Mvwinsnstr (Win    : Window;
                           Line   : C_Int;
                           Column : C_Int;
                           Str    : char_array;
                           Len    : C_Int) return C_Int;
      pragma Import (C, Mvwinsnstr, "mvwinsnstr");

      Txt    : char_array (0 .. Str'Length);
      Length : size_t;
   begin
      To_C (Str, Txt, Length);
      if Mvwinsnstr (Win, C_Int (Line), C_Int (Column), Txt, C_Int (Len))
        = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Insert;
------------------------------------------------------------------------------
   procedure Peek (Win :  Window := Standard_Window;
                   Str : out String;
                   Len :  Integer := -1)
   is
      function Winnstr (Win : Window;
                        Str : char_array;
                        Len : C_Int) return C_Int;
      pragma Import (C, Winnstr, "winnstr");

      N   : Integer := Len;
      Txt : char_array (0 .. Str'Length);
      Cnt : Natural;
   begin
      if N < 0 then
         N := Str'Length;
      end if;
      if N > Str'Length then
         raise Constraint_Error;
      end if;
      Txt (0) := Interfaces.C.char'First;
      if Winnstr (Win, Txt, C_Int (N)) = Curses_Err then
         raise Curses_Exception;
      end if;
      To_Ada (Txt, Str, Cnt, True);
      if Cnt < Str'Length then
         Str ((Str'First + Cnt) .. Str'Last) := (others => ' ');
      end if;
   end Peek;

   procedure Peek
     (Win    :  Window := Standard_Window;
      Line   :  Line_Position;
      Column :  Column_Position;
      Str    : out String;
      Len    :  Integer := -1)
   is
   begin
      Move_Cursor (Win, Line, Column);
      Peek (Win, Str, Len);
   end Peek;
------------------------------------------------------------------------------
   procedure Peek
     (Win :  Window := Standard_Window;
      Str : out Attributed_String;
      Len :  Integer := -1)
   is
      function Winchnstr (Win : Window;
                          Str : chtype_array;             -- out
                          Len : C_Int) return C_Int;
      pragma Import (C, Winchnstr, "winchnstr");

      N   : Integer := Len;
      Txt : constant chtype_array (0 .. Str'Length)
          := (0 => Default_Character);
      Cnt : Natural := 0;
   begin
      if N < 0 then
         N := Str'Length;
      end if;
      if N > Str'Length then
         raise Constraint_Error;
      end if;
      if Winchnstr (Win, Txt, C_Int (N)) = Curses_Err then
         raise Curses_Exception;
      end if;
      for To in Str'Range loop
         exit when Txt (size_t (Cnt)) = Default_Character;
         Str (To) := Txt (size_t (Cnt));
         Cnt := Cnt + 1;
      end loop;
      if Cnt < Str'Length then
         Str ((Str'First + Cnt) .. Str'Last) :=
           (others => (Ch => ' ',
                       Color => Color_Pair'First,
                       Attr => Normal_Video));
      end if;
   end Peek;

   procedure Peek
     (Win    :  Window := Standard_Window;
      Line   :  Line_Position;
      Column :  Column_Position;
      Str    : out Attributed_String;
      Len    : Integer := -1)
   is
   begin
      Move_Cursor (Win, Line, Column);
      Peek (Win, Str, Len);
   end Peek;
------------------------------------------------------------------------------
   procedure Get (Win :  Window := Standard_Window;
                  Str : out String;
                  Len :  Integer := -1)
   is
      function Wgetnstr (Win : Window;
                         Str : char_array;
                         Len : C_Int) return C_Int;
      pragma Import (C, Wgetnstr, "wgetnstr");

      N   : Integer := Len;
      Txt : char_array (0 .. Str'Length);
      Cnt : Natural;
   begin
      if N < 0 then
         N := Str'Length;
      end if;
      if N > Str'Length then
         raise Constraint_Error;
      end if;
      Txt (0) := Interfaces.C.char'First;
      if Wgetnstr (Win, Txt, C_Int (N)) = Curses_Err then
         raise Curses_Exception;
      end if;
      To_Ada (Txt, Str, Cnt, True);
      if Cnt < Str'Length then
         Str ((Str'First + Cnt) .. Str'Last) := (others => ' ');
      end if;
   end Get;

   procedure Get
     (Win    :  Window := Standard_Window;
      Line   :  Line_Position;
      Column :  Column_Position;
      Str    : out String;
      Len    :  Integer := -1)
   is
   begin
      Move_Cursor (Win, Line, Column);
      Get (Win, Str, Len);
   end Get;
------------------------------------------------------------------------------
   procedure Init_Soft_Label_Keys
     (Format : Soft_Label_Key_Format := Three_Two_Three)
   is
      function Slk_Init (Fmt : C_Int) return C_Int;
      pragma Import (C, Slk_Init, "slk_init");
   begin
      if Slk_Init (Soft_Label_Key_Format'Pos (Format)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Init_Soft_Label_Keys;

   procedure Set_Soft_Label_Key (Label : Label_Number;
                                 Text  : String;
                                 Fmt   : Label_Justification := Left)
   is
      function Slk_Set (Label : C_Int;
                        Txt   : char_array;
                        Fmt   : C_Int) return C_Int;
      pragma Import (C, Slk_Set, "slk_set");

      Txt : char_array (0 .. Text'Length);
      Len : size_t;
   begin
      To_C (Text, Txt, Len);
      if Slk_Set (C_Int (Label), Txt,
                  C_Int (Label_Justification'Pos (Fmt))) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Set_Soft_Label_Key;

   procedure Refresh_Soft_Label_Keys
   is
      function Slk_Refresh return C_Int;
      pragma Import (C, Slk_Refresh, "slk_refresh");
   begin
      if Slk_Refresh = Curses_Err then
         raise Curses_Exception;
      end if;
   end Refresh_Soft_Label_Keys;

   procedure Refresh_Soft_Label_Keys_Without_Update
   is
      function Slk_Noutrefresh return C_Int;
      pragma Import (C, Slk_Noutrefresh, "slk_noutrefresh");
   begin
      if Slk_Noutrefresh = Curses_Err then
         raise Curses_Exception;
      end if;
   end Refresh_Soft_Label_Keys_Without_Update;

   procedure Get_Soft_Label_Key (Label : Label_Number;
                                 Text  : out String)
   is
      function Slk_Label (Label : C_Int) return chars_ptr;
      pragma Import (C, Slk_Label, "slk_label");
   begin
      Fill_String (Slk_Label (C_Int (Label)), Text);
   end Get_Soft_Label_Key;

   function Get_Soft_Label_Key (Label : Label_Number) return String
   is
      function Slk_Label (Label : C_Int) return chars_ptr;
      pragma Import (C, Slk_Label, "slk_label");
   begin
      return Fill_String (Slk_Label (C_Int (Label)));
   end Get_Soft_Label_Key;

   procedure Clear_Soft_Label_Keys
   is
      function Slk_Clear return C_Int;
      pragma Import (C, Slk_Clear, "slk_clear");
   begin
      if Slk_Clear = Curses_Err then
         raise Curses_Exception;
      end if;
   end Clear_Soft_Label_Keys;

   procedure Restore_Soft_Label_Keys
   is
      function Slk_Restore return C_Int;
      pragma Import (C, Slk_Restore, "slk_restore");
   begin
      if Slk_Restore = Curses_Err then
         raise Curses_Exception;
      end if;
   end Restore_Soft_Label_Keys;

   procedure Touch_Soft_Label_Keys
   is
      function Slk_Touch return C_Int;
      pragma Import (C, Slk_Touch, "slk_touch");
   begin
      if Slk_Touch = Curses_Err then
         raise Curses_Exception;
      end if;
   end Touch_Soft_Label_Keys;

   procedure Switch_Soft_Label_Key_Attributes
     (Attr : Character_Attribute_Set;
      On   : Boolean := True)
   is
      function Slk_Attron (Ch : Attributed_Character) return C_Int;
      pragma Import (C, Slk_Attron, "slk_attron");
      function Slk_Attroff (Ch : Attributed_Character) return C_Int;
      pragma Import (C, Slk_Attroff, "slk_attroff");

      Err : C_Int;
      Ch  : constant Attributed_Character := (Ch    => Character'First,
                                              Attr  => Attr,
                                              Color => Color_Pair'First);
   begin
      if On then
         Err := Slk_Attron  (Ch);
      else
         Err := Slk_Attroff (Ch);
      end if;
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Switch_Soft_Label_Key_Attributes;

   procedure Set_Soft_Label_Key_Attributes
     (Attr  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First)
   is
      function Slk_Attrset (Ch : Attributed_Character) return C_Int;
      pragma Import (C, Slk_Attrset, "slk_attrset");

      Ch : constant Attributed_Character := (Ch    => Character'First,
                                             Attr  => Attr,
                                             Color => Color);
   begin
      if Slk_Attrset (Ch) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_Soft_Label_Key_Attributes;

   function Get_Soft_Label_Key_Attributes return Character_Attribute_Set
   is
      function Slk_Attr return Attributed_Character;
      pragma Import (C, Slk_Attr, "slk_attr");

      Attr : constant Attributed_Character := Slk_Attr;
   begin
      return Attr.Attr;
   end Get_Soft_Label_Key_Attributes;

   function Get_Soft_Label_Key_Attributes return Color_Pair
   is
      function Slk_Attr return Attributed_Character;
      pragma Import (C, Slk_Attr, "slk_attr");

      Attr : constant Attributed_Character := Slk_Attr;
   begin
      return Attr.Color;
   end Get_Soft_Label_Key_Attributes;

   procedure Set_Soft_Label_Key_Color (Pair : Color_Pair)
   is
      function Slk_Color (Color : C_Short) return C_Int;
      pragma Import (C, Slk_Color, "slk_color");
   begin
      if Slk_Color (C_Short (Pair)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Set_Soft_Label_Key_Color;

------------------------------------------------------------------------------
   procedure Enable_Key (Key    : Special_Key_Code;
                         Enable : Boolean := True)
   is
      function Keyok (Keycode : C_Int;
                      On_Off  : Curses_Bool) return C_Int;
      pragma Import (C, Keyok, "keyok");
   begin
      if Keyok (C_Int (Key), Curses_Bool (Boolean'Pos (Enable)))
        = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Enable_Key;
------------------------------------------------------------------------------
   procedure Define_Key (Definition : String;
                         Key        : Special_Key_Code)
   is
      function Defkey (Def : char_array;
                       Key : C_Int) return C_Int;
      pragma Import (C, Defkey, "define_key");

      Txt    : char_array (0 .. Definition'Length);
      Length : size_t;
   begin
      To_C (Definition, Txt, Length);
      if Defkey (Txt, C_Int (Key)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Define_Key;
------------------------------------------------------------------------------
   procedure Un_Control (Ch  : Attributed_Character;
                         Str : out String)
   is
      function Unctrl (Ch : Attributed_Character) return chars_ptr;
      pragma Import (C, Unctrl, "unctrl");
   begin
      Fill_String (Unctrl (Ch), Str);
   end Un_Control;

   function Un_Control (Ch : Attributed_Character) return String
   is
      function Unctrl (Ch : Attributed_Character) return chars_ptr;
      pragma Import (C, Unctrl, "unctrl");
   begin
      return Fill_String (Unctrl (Ch));
   end Un_Control;

   procedure Delay_Output (Msecs : Natural)
   is
      function Delayoutput (Msecs : C_Int) return C_Int;
      pragma Import (C, Delayoutput, "delay_output");
   begin
      if Delayoutput (C_Int (Msecs)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Delay_Output;

   procedure Flush_Input
   is
      function Flushinp return C_Int;
      pragma Import (C, Flushinp, "flushinp");
   begin
      if Flushinp = Curses_Err then  -- docu says that never happens, but...
         raise Curses_Exception;
      end if;
   end Flush_Input;
------------------------------------------------------------------------------
   function Baudrate return Natural
   is
      function Baud return C_Int;
      pragma Import (C, Baud, "baudrate");
   begin
      return Natural (Baud);
   end Baudrate;

   function Erase_Character return Character
   is
      function Erasechar return C_Int;
      pragma Import (C, Erasechar, "erasechar");
   begin
      return Character'Val (Erasechar);
   end Erase_Character;

   function Kill_Character return Character
   is
      function Killchar return C_Int;
      pragma Import (C, Killchar, "killchar");
   begin
      return Character'Val (Killchar);
   end Kill_Character;

   function Has_Insert_Character return Boolean
   is
      function Has_Ic return Curses_Bool;
      pragma Import (C, Has_Ic, "has_ic");
   begin
      if Has_Ic = Curses_Bool_False then
         return False;
      else
         return True;
      end if;
   end Has_Insert_Character;

   function Has_Insert_Line return Boolean
   is
      function Has_Il return Curses_Bool;
      pragma Import (C, Has_Il, "has_il");
   begin
      if Has_Il = Curses_Bool_False then
         return False;
      else
         return True;
      end if;
   end Has_Insert_Line;

   function Supported_Attributes return Character_Attribute_Set
   is
      function Termattrs return Attributed_Character;
      pragma Import (C, Termattrs, "termattrs");

      Ch : constant Attributed_Character := Termattrs;
   begin
      return Ch.Attr;
   end Supported_Attributes;

   procedure Long_Name (Name : out String)
   is
      function Longname return chars_ptr;
      pragma Import (C, Longname, "longname");
   begin
      Fill_String (Longname, Name);
   end Long_Name;

   function Long_Name return String
   is
      function Longname return chars_ptr;
      pragma Import (C, Longname, "longname");
   begin
      return Fill_String (Longname);
   end Long_Name;

   procedure Terminal_Name (Name : out String)
   is
      function Termname return chars_ptr;
      pragma Import (C, Termname, "termname");
   begin
      Fill_String (Termname, Name);
   end Terminal_Name;

   function Terminal_Name return String
   is
      function Termname return chars_ptr;
      pragma Import (C, Termname, "termname");
   begin
      return Fill_String (Termname);
   end Terminal_Name;
------------------------------------------------------------------------------
   procedure Init_Pair (Pair : Redefinable_Color_Pair;
                        Fore : Color_Number;
                        Back : Color_Number)
   is
      function Initpair (Pair : C_Short;
                         Fore : C_Short;
                         Back : C_Short) return C_Int;
      pragma Import (C, Initpair, "init_pair");
   begin
      if Integer (Pair) >= Number_Of_Color_Pairs then
         raise Constraint_Error;
      end if;
      if Integer (Fore) >= Number_Of_Colors or else
         Integer (Back) >= Number_Of_Colors
      then
         raise Constraint_Error;
      end if;
      if Initpair (C_Short (Pair), C_Short (Fore), C_Short (Back))
        = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Init_Pair;

   procedure Pair_Content (Pair : Color_Pair;
                           Fore : out Color_Number;
                           Back : out Color_Number)
   is
      type C_Short_Access is access all C_Short;
      function Paircontent (Pair : C_Short;
                            Fp   : C_Short_Access;
                            Bp   : C_Short_Access) return C_Int;
      pragma Import (C, Paircontent, "pair_content");

      F, B : aliased C_Short;
   begin
      if Paircontent (C_Short (Pair), F'Access, B'Access) = Curses_Err then
         raise Curses_Exception;
      else
         Fore := Color_Number (F);
         Back := Color_Number (B);
      end if;
   end Pair_Content;

   function Has_Colors return Boolean
   is
      function Hascolors return Curses_Bool;
      pragma Import (C, Hascolors, "has_colors");
   begin
      if Hascolors = Curses_Bool_False then
         return False;
      else
         return True;
      end if;
   end Has_Colors;

   procedure Init_Color (Color : Color_Number;
                         Red   : RGB_Value;
                         Green : RGB_Value;
                         Blue  : RGB_Value)
   is
      function Initcolor (Col   : C_Short;
                          Red   : C_Short;
                          Green : C_Short;
                          Blue  : C_Short) return C_Int;
      pragma Import (C, Initcolor, "init_color");
   begin
      if Initcolor (C_Short (Color), C_Short (Red), C_Short (Green),
                    C_Short (Blue)) = Curses_Err
      then
            raise Curses_Exception;
      end if;
   end Init_Color;

   function Can_Change_Color return Boolean
   is
      function Canchangecolor return Curses_Bool;
      pragma Import (C, Canchangecolor, "can_change_color");
   begin
      if Canchangecolor = Curses_Bool_False then
         return False;
      else
         return True;
      end if;
   end Can_Change_Color;

   procedure Color_Content (Color :  Color_Number;
                            Red   : out RGB_Value;
                            Green : out RGB_Value;
                            Blue  : out RGB_Value)
   is
      type C_Short_Access is access all C_Short;

      function Colorcontent (Color : C_Short; R, G, B : C_Short_Access)
                             return C_Int;
      pragma Import (C, Colorcontent, "color_content");

      R, G, B : aliased C_Short;
   begin
      if Colorcontent (C_Short (Color), R'Access, G'Access, B'Access) =
        Curses_Err
      then
         raise Curses_Exception;
      else
         Red   := RGB_Value (R);
         Green := RGB_Value (G);
         Blue  := RGB_Value (B);
      end if;
   end Color_Content;

------------------------------------------------------------------------------
   procedure Save_Curses_Mode (Mode : Curses_Mode)
   is
      function Def_Prog_Mode return C_Int;
      pragma Import (C, Def_Prog_Mode, "def_prog_mode");
      function Def_Shell_Mode return C_Int;
      pragma Import (C, Def_Shell_Mode, "def_shell_mode");

      Err : C_Int;
   begin
      case Mode is
         when Curses => Err := Def_Prog_Mode;
         when Shell  => Err := Def_Shell_Mode;
      end case;
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Save_Curses_Mode;

   procedure Reset_Curses_Mode (Mode : Curses_Mode)
   is
      function Reset_Prog_Mode return C_Int;
      pragma Import (C, Reset_Prog_Mode, "reset_prog_mode");
      function Reset_Shell_Mode return C_Int;
      pragma Import (C, Reset_Shell_Mode, "reset_shell_mode");

      Err : C_Int;
   begin
      case Mode is
         when Curses => Err := Reset_Prog_Mode;
         when Shell  => Err := Reset_Shell_Mode;
      end case;
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Reset_Curses_Mode;

   procedure Save_Terminal_State
   is
      function Savetty return C_Int;
      pragma Import (C, Savetty, "savetty");
   begin
      if Savetty = Curses_Err then
         raise Curses_Exception;
      end if;
   end Save_Terminal_State;

   procedure Reset_Terminal_State
   is
      function Resetty return C_Int;
      pragma Import (C, Resetty, "resetty");
   begin
      if Resetty = Curses_Err then
         raise Curses_Exception;
      end if;
   end Reset_Terminal_State;

   procedure Rip_Off_Lines (Lines : Integer;
                            Proc  : Stdscr_Init_Proc)
   is
      function Ripoffline (Lines : C_Int;
                           Proc  : Stdscr_Init_Proc) return C_Int;
      pragma Import (C, Ripoffline, "_nc_ripoffline");
   begin
      if Ripoffline (C_Int (Lines), Proc) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Rip_Off_Lines;

   procedure Set_Cursor_Visibility (Visibility : in out Cursor_Visibility)
   is
      function Curs_Set (Curs : C_Int) return C_Int;
      pragma Import (C, Curs_Set, "curs_set");

      Res : C_Int;
   begin
      Res := Curs_Set (Cursor_Visibility'Pos (Visibility));
      if Res /= Curses_Err then
         Visibility := Cursor_Visibility'Val (Res);
      end if;
   end Set_Cursor_Visibility;

   procedure Nap_Milli_Seconds (Ms : Natural)
   is
      function Napms (Ms : C_Int) return C_Int;
      pragma Import (C, Napms, "napms");
   begin
      if Napms (C_Int (Ms)) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Nap_Milli_Seconds;
------------------------------------------------------------------------------
   function Lines return Line_Count
   is
      function LINES_As_Function return Interfaces.C.int;
      pragma Import (C, LINES_As_Function, "LINES_as_function");
   begin
      return Line_Count (LINES_As_Function);
   end Lines;

   function Columns return Column_Count
   is
      function COLS_As_Function return Interfaces.C.int;
      pragma Import (C, COLS_As_Function, "COLS_as_function");
   begin
      return Column_Count (COLS_As_Function);
   end Columns;

   function Tab_Size return Natural
   is
      function TABSIZE_As_Function return Interfaces.C.int;
      pragma Import (C, TABSIZE_As_Function, "TABSIZE_as_function");

   begin
      return Natural (TABSIZE_As_Function);
   end Tab_Size;

   function Number_Of_Colors return Natural
   is
      function COLORS_As_Function return Interfaces.C.int;
      pragma Import (C, COLORS_As_Function, "COLORS_as_function");
   begin
      return Natural (COLORS_As_Function);
   end Number_Of_Colors;

   function Number_Of_Color_Pairs return Natural
   is
      function COLOR_PAIRS_As_Function return Interfaces.C.int;
      pragma Import (C, COLOR_PAIRS_As_Function, "COLOR_PAIRS_as_function");
   begin
      return Natural (COLOR_PAIRS_As_Function);
   end Number_Of_Color_Pairs;
------------------------------------------------------------------------------
   procedure Transform_Coordinates
     (W      : Window := Standard_Window;
      Line   : in out Line_Position;
      Column : in out Column_Position;
      Dir    : Transform_Direction := From_Screen)
   is
      type Int_Access is access all C_Int;
      function Transform (W    : Window;
                          Y, X : Int_Access;
                          Dir  : Curses_Bool) return C_Int;
      pragma Import (C, Transform, "wmouse_trafo");

      X : aliased C_Int := C_Int (Column);
      Y : aliased C_Int := C_Int (Line);
      D : Curses_Bool := Curses_Bool_False;
      R : C_Int;
   begin
      if Dir = To_Screen then
         D := 1;
      end if;
      R := Transform (W, Y'Access, X'Access, D);
      if R = Curses_False then
         raise Curses_Exception;
      else
         Line   := Line_Position (Y);
         Column := Column_Position (X);
      end if;
   end Transform_Coordinates;
------------------------------------------------------------------------------
   procedure Use_Default_Colors is
      function C_Use_Default_Colors return C_Int;
      pragma Import (C, C_Use_Default_Colors, "use_default_colors");
      Err : constant C_Int := C_Use_Default_Colors;
   begin
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Use_Default_Colors;

   procedure Assume_Default_Colors (Fore : Color_Number := Default_Color;
                                    Back : Color_Number := Default_Color)
   is
      function C_Assume_Default_Colors (Fore : C_Int;
                                        Back : C_Int) return C_Int;
      pragma Import (C, C_Assume_Default_Colors, "assume_default_colors");

      Err : constant C_Int := C_Assume_Default_Colors (C_Int (Fore),
                                                       C_Int (Back));
   begin
      if Err = Curses_Err then
         raise Curses_Exception;
      end if;
   end Assume_Default_Colors;
------------------------------------------------------------------------------
   function Curses_Version return String
   is
      function curses_versionC return chars_ptr;
      pragma Import (C, curses_versionC, "curses_version");
      Result : constant chars_ptr := curses_versionC;
   begin
      return Fill_String (Result);
   end Curses_Version;
------------------------------------------------------------------------------
   procedure Curses_Free_All is
      procedure curses_freeall;
      pragma Import (C, curses_freeall, "_nc_freeall");
   begin
      --  Use this only for testing: you cannot use curses after calling it,
      --  so it has to be the "last" thing done before exiting the program.
      --  This will not really free ALL of memory used by curses.  That is
      --  because it cannot free the memory used for stdout's setbuf.  The
      --  _nc_free_and_exit() procedure can do that, but it can be invoked
      --  safely only from C - and again, that only as the "last" thing done
      --  before exiting the program.
      curses_freeall;
   end Curses_Free_All;
------------------------------------------------------------------------------
   function Use_Extended_Names (Enable : Boolean) return Boolean
   is
      function use_extended_namesC (e : Curses_Bool) return C_Int;
      pragma Import (C, use_extended_namesC, "use_extended_names");

      Res : constant C_Int :=
         use_extended_namesC (Curses_Bool (Boolean'Pos (Enable)));
   begin
      if Res = C_Int (Curses_Bool_False) then
         return False;
      else
         return True;
      end if;
   end Use_Extended_Names;
------------------------------------------------------------------------------
   procedure Screen_Dump_To_File (Filename : String)
   is
      function scr_dump (f : char_array) return C_Int;
      pragma Import (C, scr_dump, "scr_dump");
      Txt    : char_array (0 .. Filename'Length);
      Length : size_t;
   begin
      To_C (Filename, Txt, Length);
      if Curses_Err = scr_dump (Txt) then
         raise Curses_Exception;
      end if;
   end Screen_Dump_To_File;

   procedure Screen_Restore_From_File (Filename : String)
   is
      function scr_restore (f : char_array) return C_Int;
      pragma Import (C, scr_restore, "scr_restore");
      Txt    : char_array (0 .. Filename'Length);
      Length : size_t;
   begin
      To_C (Filename, Txt, Length);
      if Curses_Err = scr_restore (Txt)  then
         raise Curses_Exception;
      end if;
   end Screen_Restore_From_File;

   procedure Screen_Init_From_File (Filename : String)
   is
      function scr_init (f : char_array) return C_Int;
      pragma Import (C, scr_init, "scr_init");
      Txt    : char_array (0 .. Filename'Length);
      Length : size_t;
   begin
      To_C (Filename, Txt, Length);
      if Curses_Err = scr_init (Txt) then
         raise Curses_Exception;
      end if;
   end Screen_Init_From_File;

   procedure Screen_Set_File (Filename : String)
   is
      function scr_set (f : char_array) return C_Int;
      pragma Import (C, scr_set, "scr_set");
      Txt    : char_array (0 .. Filename'Length);
      Length : size_t;
   begin
      To_C (Filename, Txt, Length);
      if Curses_Err = scr_set (Txt) then
         raise Curses_Exception;
      end if;
   end Screen_Set_File;
------------------------------------------------------------------------------
   procedure Resize (Win               : Window := Standard_Window;
                     Number_Of_Lines   : Line_Count;
                     Number_Of_Columns : Column_Count) is
      function wresize (win     : Window;
                        lines   : C_Int;
                        columns : C_Int) return C_Int;
      pragma Import (C, wresize);
   begin
      if wresize (Win,
                  C_Int (Number_Of_Lines),
                  C_Int (Number_Of_Columns)) = Curses_Err
      then
         raise Curses_Exception;
      end if;
   end Resize;
------------------------------------------------------------------------------

end Terminal_Interface.Curses;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-enumeration_io__adb.htm0000644000175100001440000002671512340214310030213 0ustar tomusers terminal_interface-curses-text_io-enumeration_io.adb

File : terminal_interface-curses-text_io-enumeration_io.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--             Terminal_Interface.Curses.Text_IO.Enumeration_IO             --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Ada.Characters.Handling; use Ada.Characters.Handling;
with Terminal_Interface.Curses.Text_IO.Aux;

package body Terminal_Interface.Curses.Text_IO.Enumeration_IO is

   package Aux renames Terminal_Interface.Curses.Text_IO.Aux;
   package EIO is new Ada.Text_IO.Enumeration_IO (Enum);

   procedure Put
     (Win   : Window;
      Item  : Enum;
      Width : Field := Default_Width;
      Set   : Type_Set := Default_Setting)
   is
      Buf  : String (1 .. Field'Last);
      Tset : Ada.Text_IO.Type_Set;
   begin
      if Set /= Mixed_Case then
         Tset := Ada.Text_IO.Type_Set'Val (Type_Set'Pos (Set));
      else
         Tset := Ada.Text_IO.Lower_Case;
      end if;
      EIO.Put (Buf, Item, Tset);
      if Set = Mixed_Case then
         Buf (Buf'First) := To_Upper (Buf (Buf'First));
      end if;
      Aux.Put_Buf (Win, Buf, Width, True, True);
   end Put;

   procedure Put
     (Item  : Enum;
      Width : Field := Default_Width;
      Set   : Type_Set := Default_Setting)
   is
   begin
      Put (Get_Window, Item, Width, Set);
   end Put;

end Terminal_Interface.Curses.Text_IO.Enumeration_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types__ads.htm0000644000175100001440000007426212534703456027224 0ustar tomusers terminal_interface-curses-forms-field_types.ads

File : terminal_interface-curses-forms-field_types.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                 Terminal_Interface.Curses.Forms.Field_Types              --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.19 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux;

package Terminal_Interface.Curses.Forms.Field_Types is
   pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types);
   use type Interfaces.C.int;
   subtype C_Int is Interfaces.C.int;

   --  |=====================================================================
   --  | Man page form_fieldtype.3x
   --  |=====================================================================

   type Field_Type is abstract tagged null record;
   --  Abstract base type for all field types. A concrete field type
   --  is an extension that adds some data elements describing formats or
   --  boundary values for the type and validation routines.
   --  For the builtin low-level fieldtypes, the validation routines are
   --  already defined by the low-level C library.
   --  The builtin types like Alpha or AlphaNumeric etc. are defined in
   --  child packages of this package. You may use one of them as example
   --  how to create you own child packages for low-level field types that
   --  you may have already written in C.

   type Field_Type_Access is access all Field_Type'Class;

   --  #1A NAME="AFU_1"#2|
   procedure Set_Field_Type (Fld      : Field;
                             Fld_Type : Field_Type) is abstract;
   --  AKA: set_field_type()
   --  But: we hide the vararg mechanism of the C interface. You always
   --       have to pass a single Field_Type parameter.

   --  ---------------------------------------------------------------------

   --  |=====================================================================
   --  | Man page form_field_validation.3x
   --  |=====================================================================

   --  #1A NAME="AFU_2"#2|
   function Get_Type (Fld : Field) return Field_Type_Access;
   --  AKA: field_type()
   --  AKA: field_arg()
   --  In Ada95 we can combine these. If you try to retrieve the field type
   --  that is not defined as extension of the abstract tagged type above,
   --  you will raise a Form_Exception.
   --  This is not inlined

   --  +----------------------------------------------------------------------
   --  | Private Part.
   --  | Most of this is used by the implementations of the child packages.
   --  |
private
   type Makearg_Function is access
     function (Args : System.Address) return System.Address;
   pragma Convention (C, Makearg_Function);

   type Copyarg_Function is access
     function (Usr : System.Address) return System.Address;
   pragma Convention (C, Copyarg_Function);

   type Freearg_Function is access
     procedure (Usr : System.Address);
   pragma Convention (C, Freearg_Function);

   type Field_Check_Function is access
     function (Fld : Field; Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Field_Check_Function);

   type Char_Check_Function is access
     function (Ch : C_Int; Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Char_Check_Function);

   type Choice_Function is access
     function (Fld : Field; Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Choice_Function);

   --  +----------------------------------------------------------------------
   --  | This must be in sync with the FIELDTYPE structure in form.h
   --  |
   type Low_Level_Field_Type is
      record
         Status :              Interfaces.C.unsigned_short;
         Ref_Count :           Interfaces.C.long;
         Left, Right :         System.Address;
         Makearg :             Makearg_Function;
         Copyarg :             Copyarg_Function;
         Freearg :             Freearg_Function;
         Fcheck :              Field_Check_Function;
         Ccheck :              Char_Check_Function;
         Next, Prev :          Choice_Function;
      end record;
   pragma Convention (C, Low_Level_Field_Type);
   type C_Field_Type is access all Low_Level_Field_Type;

   Null_Field_Type   : constant C_Field_Type := null;

   --  +----------------------------------------------------------------------
   --  | This four low-level fieldtypes are the ones associated with
   --  | fieldtypes handled by this binding. Any other low-level fieldtype
   --  | will result in a Form_Exception is function Get_Type.
   --  |
   M_Generic_Type   : C_Field_Type := null;
   M_Generic_Choice : C_Field_Type := null;
   M_Builtin_Router : C_Field_Type := null;
   M_Choice_Router  : C_Field_Type := null;

   --  Two wrapper functions to access those low-level fieldtypes defined
   --  in this package.
   function C_Builtin_Router return C_Field_Type;
   function C_Choice_Router  return C_Field_Type;

   procedure Wrap_Builtin (Fld : Field;
                           Typ : Field_Type'Class;
                           Cft : C_Field_Type := C_Builtin_Router);
   --  This procedure has to be called by the Set_Field_Type implementation
   --  for builtin low-level fieldtypes to replace it by an Ada95
   --  conformant Field_Type object.
   --  The parameter Cft must be C_Builtin_Router for regular low-level
   --  fieldtypes (like TYP_ALPHA or TYP_ALNUM) and C_Choice_Router for
   --  low-level fieldtypes witch choice functions (like TYP_ENUM).
   --  Any other value will raise a Form_Exception.

   function Make_Arg (Args : System.Address) return System.Address;
   pragma Import (C, Make_Arg, "void_star_make_arg");
   --  This is the Makearg_Function for the internal low-level types
   --  introduced by this binding.

   function Copy_Arg (Usr : System.Address) return System.Address;
   pragma Convention (C, Copy_Arg);
   --  This is the Copyarg_Function for the internal low-level types
   --  introduced by this binding.

   procedure Free_Arg (Usr : System.Address);
   pragma Convention (C, Free_Arg);
   --  This is the Freearg_Function for the internal low-level types
   --  introduced by this binding.

   function Field_Check_Router (Fld : Field;
                                Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Field_Check_Router);
   --  This is the Field_Check_Function for the internal low-level types
   --  introduced to wrap the low-level types by a Field_Type derived
   --  type. It routes the call to the corresponding low-level validation
   --  function.

   function Char_Check_Router (Ch : C_Int;
                               Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Char_Check_Router);
   --  This is the Char_Check_Function for the internal low-level types
   --  introduced to wrap the low-level types by a Field_Type derived
   --  type. It routes the call to the corresponding low-level validation
   --  function.

   function Next_Router (Fld : Field;
                         Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Next_Router);
   --  This is the Choice_Function for the internal low-level types
   --  introduced to wrap the low-level types by a Field_Type derived
   --  type. It routes the call to the corresponding low-level next_choice
   --  function.

   function Prev_Router (Fld : Field;
                         Usr : System.Address) return Curses_Bool;
   pragma Convention (C, Prev_Router);
   --  This is the Choice_Function for the internal low-level types
   --  introduced to wrap the low-level types by a Field_Type derived
   --  type. It routes the call to the corresponding low-level prev_choice
   --  function.

   --  This is the Argument structure maintained by all low-level field types
   --  introduced by this binding.
   type Argument is record
      Typ : Field_Type_Access;   --  the Field_Type creating this record
      Usr : System.Address;      --  original arg for builtin low-level types
      Cft : C_Field_Type;        --  the original low-level type
   end record;
   type Argument_Access is access all Argument;

   --  +----------------------------------------------------------------------
   --  |
   --  | Some Imports of libform routines to deal with low-level fieldtypes.
   --  |
   function New_Fieldtype (Fcheck : Field_Check_Function;
                           Ccheck : Char_Check_Function)
     return C_Field_Type;
   pragma Import (C, New_Fieldtype, "new_fieldtype");

   function Set_Fieldtype_Arg (Cft : C_Field_Type;
                               Mak : Makearg_Function := Make_Arg'Access;
                               Cop : Copyarg_Function := Copy_Arg'Access;
                               Fre : Freearg_Function := Free_Arg'Access)
     return Aux.Eti_Error;
   pragma Import (C, Set_Fieldtype_Arg, "set_fieldtype_arg");

   function Set_Fieldtype_Choice (Cft : C_Field_Type;
                                  Next, Prev : Choice_Function)
     return Aux.Eti_Error;
   pragma Import (C, Set_Fieldtype_Choice, "set_fieldtype_choice");

end Terminal_Interface.Curses.Forms.Field_Types;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-panels__ads.htm0000644000175100001440000004025712340214310025025 0ustar tomusers terminal_interface-curses-panels.ads

File : terminal_interface-curses-panels.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                      Terminal_Interface.Curses.Panels                    --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.22 @
--  @Date: 2014/05/24 21:31:57 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with System;

package Terminal_Interface.Curses.Panels is
   pragma Preelaborate (Terminal_Interface.Curses.Panels);
   pragma Linker_Options ("-lpanel" & Curses_Constants.DFT_ARG_SUFFIX);

   type Panel is private;

   ---------------------------
   --  Interface constants  --
   ---------------------------
   Null_Panel : constant Panel;

   -------------------
   --  Exceptions   --
   -------------------

   Panel_Exception : exception;

   --  |=====================================================================
   --  | Man page panel.3x
   --  |=====================================================================

   --  #1A NAME="AFU_1"#2|
   function Create (Win : Window) return Panel;
   --  AKA: new_panel()
   pragma Inline (Create);

   --  #1A NAME="AFU_2"#2|
   function New_Panel (Win : Window) return Panel renames Create;
   --  AKA: new_panel()
   --  pragma Inline (New_Panel);

   --  #1A NAME="AFU_3"#2|
   procedure Bottom (Pan : Panel);
   --  AKA: bottom_panel()
   pragma Inline (Bottom);

   --  #1A NAME="AFU_4"#2|
   procedure Top (Pan : Panel);
   --  AKA: top_panel()
   pragma Inline (Top);

   --  #1A NAME="AFU_5"#2|
   procedure Show (Pan : Panel);
   --  AKA: show_panel()
   pragma Inline (Show);

   --  #1A NAME="AFU_6"#2|
   procedure Update_Panels;
   --  AKA: update_panels()
   pragma Import (C, Update_Panels, "update_panels");

   --  #1A NAME="AFU_7"#2|
   procedure Hide (Pan : Panel);
   --  AKA: hide_panel()
   pragma Inline (Hide);

   --  #1A NAME="AFU_8"#2|
   function Get_Window (Pan : Panel) return Window;
   --  AKA: panel_window()
   pragma Inline (Get_Window);

   --  #1A NAME="AFU_9"#2|
   function Panel_Window (Pan : Panel) return Window renames Get_Window;
   --  pragma Inline (Panel_Window);

   --  #1A NAME="AFU_10"#2|
   procedure Replace (Pan : Panel;
                      Win : Window);
   --  AKA: replace_panel()
   pragma Inline (Replace);

   --  #1A NAME="AFU_11"#2|
   procedure Move (Pan    : Panel;
                   Line   : Line_Position;
                   Column : Column_Position);
   --  AKA: move_panel()
   pragma Inline (Move);

   --  #1A NAME="AFU_12"#2|
   function Is_Hidden (Pan : Panel) return Boolean;
   --  AKA: panel_hidden()
   pragma Inline (Is_Hidden);

   --  #1A NAME="AFU_13"#2|
   function Above (Pan : Panel) return Panel;
   --  AKA: panel_above()
   pragma Import (C, Above, "panel_above");

   --  #1A NAME="AFU_14"#2|
   function Below (Pan : Panel) return Panel;
   --  AKA: panel_below()
   pragma Import (C, Below, "panel_below");

   --  #1A NAME="AFU_15"#2|
   procedure Delete (Pan : in out Panel);
   --  AKA: del_panel()
   pragma Inline (Delete);

private
      type Panel is new System.Storage_Elements.Integer_Address;
      Null_Panel : constant Panel := 0;

end Terminal_Interface.Curses.Panels;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-menus-item_user_data__adb.htm0000644000175100001440000002416112340214310027630 0ustar tomusers terminal_interface-curses-menus-item_user_data.adb

File : terminal_interface-curses-menus-item_user_data.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Menus.Item_User_Data             --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.14 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Menus.Item_User_Data is

   use type Interfaces.C.int;

   procedure Set_User_Data (Itm  : Item;
                            Data : User_Access)
   is
      function Set_Item_Userptr (Itm  : Item;
                                 Addr : User_Access)  return Eti_Error;
      pragma Import (C, Set_Item_Userptr, "set_item_userptr");

   begin
      Eti_Exception (Set_Item_Userptr (Itm, Data));
   end Set_User_Data;

   function Get_User_Data (Itm  : Item) return User_Access
   is
      function Item_Userptr (Itm : Item) return User_Access;
      pragma Import (C, Item_Userptr, "item_userptr");
   begin
      return Item_Userptr (Itm);
   end Get_User_Data;

   procedure Get_User_Data (Itm  : Item;
                            Data : out User_Access)
   is
   begin
      Data := Get_User_Data (Itm);
   end Get_User_Data;

end Terminal_Interface.Curses.Menus.Item_User_Data;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms__adb.htm0000644000175100001440000041304212340214310024644 0ustar tomusers terminal_interface-curses-forms.adb

File : terminal_interface-curses-forms.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                      Terminal_Interface.Curses.Forms                     --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.32 @
--  @Date: 2014/05/24 21:31:05 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Unchecked_Deallocation;

with Interfaces.C; use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;
with Interfaces.C.Pointers;

with Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms is

   use Terminal_Interface.Curses.Aux;

   type C_Field_Array is array (Natural range <>) of aliased Field;
   package F_Array is new
     Interfaces.C.Pointers (Natural, Field, C_Field_Array, Null_Field);

------------------------------------------------------------------------------
   --  |
   --  |
   --  |
   --  subtype chars_ptr is Interfaces.C.Strings.chars_ptr;

   procedure Request_Name (Key  : Form_Request_Code;
                                Name : out String)
   is
      function Form_Request_Name (Key : C_Int) return chars_ptr;
      pragma Import (C, Form_Request_Name, "form_request_name");
   begin
      Fill_String (Form_Request_Name (C_Int (Key)), Name);
   end Request_Name;

   function Request_Name (Key : Form_Request_Code) return String
   is
      function Form_Request_Name (Key : C_Int) return chars_ptr;
      pragma Import (C, Form_Request_Name, "form_request_name");
   begin
      return Fill_String (Form_Request_Name (C_Int (Key)));
   end Request_Name;
------------------------------------------------------------------------------
   --  |
   --  |
   --  |
   --  |
   --  |=====================================================================
   --  | man page form_field_new.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   function Create (Height       : Line_Count;
                    Width        : Column_Count;
                    Top          : Line_Position;
                    Left         : Column_Position;
                    Off_Screen   : Natural := 0;
                    More_Buffers : Buffer_Number := Buffer_Number'First)
                    return Field
   is
      function Newfield (H, W, T, L, O, M : C_Int) return Field;
      pragma Import (C, Newfield, "new_field");
      Fld : constant Field := Newfield (C_Int (Height), C_Int (Width),
                                        C_Int (Top), C_Int (Left),
                                        C_Int (Off_Screen),
                                        C_Int (More_Buffers));
   begin
      if Fld = Null_Field then
         raise Form_Exception;
      end if;
      return Fld;
   end Create;
--  |
--  |
--  |
   procedure Delete (Fld : in out Field)
   is
      function Free_Field (Fld : Field) return Eti_Error;
      pragma Import (C, Free_Field, "free_field");

   begin
      Eti_Exception (Free_Field (Fld));
      Fld := Null_Field;
   end Delete;
   --  |
   --  |
   --  |
   function Duplicate (Fld  : Field;
                       Top  : Line_Position;
                       Left : Column_Position) return Field
   is
      function Dup_Field (Fld  : Field;
                          Top  : C_Int;
                          Left : C_Int) return Field;
      pragma Import (C, Dup_Field, "dup_field");

      F : constant Field := Dup_Field (Fld,
                                       C_Int (Top),
                                       C_Int (Left));
   begin
      if F = Null_Field then
         raise Form_Exception;
      end if;
      return F;
   end Duplicate;
   --  |
   --  |
   --  |
   function Link (Fld  : Field;
                  Top  : Line_Position;
                  Left : Column_Position) return Field
   is
      function Lnk_Field (Fld  : Field;
                          Top  : C_Int;
                          Left : C_Int) return Field;
      pragma Import (C, Lnk_Field, "link_field");

      F : constant Field := Lnk_Field (Fld,
                                       C_Int (Top),
                                       C_Int (Left));
   begin
      if F = Null_Field then
         raise Form_Exception;
      end if;
      return F;
   end Link;
   --  |
   --  |=====================================================================
   --  | man page form_field_just.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Set_Justification (Fld  : Field;
                                Just : Field_Justification := None)
   is
      function Set_Field_Just (Fld  : Field;
                               Just : C_Int) return Eti_Error;
      pragma Import (C, Set_Field_Just, "set_field_just");

   begin
      Eti_Exception (Set_Field_Just (Fld,
                                     C_Int (Field_Justification'Pos (Just))));
   end Set_Justification;
   --  |
   --  |
   --  |
   function Get_Justification (Fld : Field) return Field_Justification
   is
      function Field_Just (Fld : Field) return C_Int;
      pragma Import (C, Field_Just, "field_just");
   begin
      return Field_Justification'Val (Field_Just (Fld));
   end Get_Justification;
   --  |
   --  |=====================================================================
   --  | man page form_field_buffer.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Set_Buffer
     (Fld    : Field;
      Buffer : Buffer_Number := Buffer_Number'First;
      Str    : String)
   is
      function Set_Fld_Buffer (Fld    : Field;
                                 Bufnum : C_Int;
                                 S      : char_array)
        return Eti_Error;
      pragma Import (C, Set_Fld_Buffer, "set_field_buffer");

   begin
      Eti_Exception (Set_Fld_Buffer (Fld, C_Int (Buffer), To_C (Str)));
   end Set_Buffer;
   --  |
   --  |
   --  |
   procedure Get_Buffer
     (Fld    : Field;
      Buffer : Buffer_Number := Buffer_Number'First;
      Str    : out String)
   is
      function Field_Buffer (Fld : Field;
                             B   : C_Int) return chars_ptr;
      pragma Import (C, Field_Buffer, "field_buffer");
   begin
      Fill_String (Field_Buffer (Fld, C_Int (Buffer)), Str);
   end Get_Buffer;

   function Get_Buffer
     (Fld    : Field;
      Buffer : Buffer_Number := Buffer_Number'First) return String
   is
      function Field_Buffer (Fld : Field;
                             B   : C_Int) return chars_ptr;
      pragma Import (C, Field_Buffer, "field_buffer");
   begin
      return Fill_String (Field_Buffer (Fld, C_Int (Buffer)));
   end Get_Buffer;
   --  |
   --  |
   --  |
   procedure Set_Status (Fld    : Field;
                         Status : Boolean := True)
   is
      function Set_Fld_Status (Fld : Field;
                               St  : C_Int) return Eti_Error;
      pragma Import (C, Set_Fld_Status, "set_field_status");

   begin
      if Set_Fld_Status (Fld, Boolean'Pos (Status)) /= E_Ok then
         raise Form_Exception;
      end if;
   end Set_Status;
   --  |
   --  |
   --  |
   function Changed (Fld : Field) return Boolean
   is
      function Field_Status (Fld : Field) return C_Int;
      pragma Import (C, Field_Status, "field_status");

      Res : constant C_Int := Field_Status (Fld);
   begin
      if Res = Curses_False then
         return False;
      else
         return True;
      end if;
   end Changed;
   --  |
   --  |
   --  |
   procedure Set_Maximum_Size (Fld : Field;
                               Max : Natural := 0)
   is
      function Set_Field_Max (Fld : Field;
                              M   : C_Int) return Eti_Error;
      pragma Import (C, Set_Field_Max, "set_max_field");

   begin
      Eti_Exception (Set_Field_Max (Fld, C_Int (Max)));
   end Set_Maximum_Size;
   --  |
   --  |=====================================================================
   --  | man page form_field_opts.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Set_Options (Fld     : Field;
                          Options : Field_Option_Set)
   is
      function Set_Field_Opts (Fld : Field;
                               Opt : Field_Option_Set) return Eti_Error;
      pragma Import (C, Set_Field_Opts, "set_field_opts");

   begin
      Eti_Exception (Set_Field_Opts (Fld, Options));
   end Set_Options;
   --  |
   --  |
   --  |
   procedure Switch_Options (Fld     : Field;
                             Options : Field_Option_Set;
                             On      : Boolean := True)
   is
      function Field_Opts_On (Fld : Field;
                              Opt : Field_Option_Set) return Eti_Error;
      pragma Import (C, Field_Opts_On, "field_opts_on");
      function Field_Opts_Off (Fld : Field;
                               Opt : Field_Option_Set) return Eti_Error;
      pragma Import (C, Field_Opts_Off, "field_opts_off");

   begin
      if On then
         Eti_Exception (Field_Opts_On (Fld, Options));
      else
         Eti_Exception (Field_Opts_Off (Fld, Options));
      end if;
   end Switch_Options;
   --  |
   --  |
   --  |
   procedure Get_Options (Fld     : Field;
                          Options : out Field_Option_Set)
   is
      function Field_Opts (Fld : Field) return Field_Option_Set;
      pragma Import (C, Field_Opts, "field_opts");

   begin
      Options := Field_Opts (Fld);
   end Get_Options;
   --  |
   --  |
   --  |
   function Get_Options (Fld : Field := Null_Field)
                         return Field_Option_Set
   is
      Fos : Field_Option_Set;
   begin
      Get_Options (Fld, Fos);
      return Fos;
   end Get_Options;
   --  |
   --  |=====================================================================
   --  | man page form_field_attributes.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Set_Foreground
     (Fld   : Field;
      Fore  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First)
   is
      function Set_Field_Fore (Fld  : Field;
                               Attr : Attributed_Character) return Eti_Error;
      pragma Import (C, Set_Field_Fore, "set_field_fore");

   begin
      Eti_Exception (Set_Field_Fore (Fld, (Ch    => Character'First,
                                           Color => Color,
                                           Attr  => Fore)));
   end Set_Foreground;
   --  |
   --  |
   --  |
   procedure Foreground (Fld  : Field;
                         Fore : out Character_Attribute_Set)
   is
      function Field_Fore (Fld : Field) return Attributed_Character;
      pragma Import (C, Field_Fore, "field_fore");
   begin
      Fore := Field_Fore (Fld).Attr;
   end Foreground;

   procedure Foreground (Fld   : Field;
                         Fore  : out Character_Attribute_Set;
                         Color : out Color_Pair)
   is
      function Field_Fore (Fld : Field) return Attributed_Character;
      pragma Import (C, Field_Fore, "field_fore");
   begin
      Fore  := Field_Fore (Fld).Attr;
      Color := Field_Fore (Fld).Color;
   end Foreground;
   --  |
   --  |
   --  |
   procedure Set_Background
     (Fld   : Field;
      Back  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First)
   is
      function Set_Field_Back (Fld  : Field;
                               Attr : Attributed_Character) return Eti_Error;
      pragma Import (C, Set_Field_Back, "set_field_back");

   begin
      Eti_Exception (Set_Field_Back (Fld, (Ch    => Character'First,
                                           Color => Color,
                                           Attr  => Back)));
   end Set_Background;
   --  |
   --  |
   --  |
   procedure Background (Fld  : Field;
                         Back : out Character_Attribute_Set)
   is
      function Field_Back (Fld : Field) return Attributed_Character;
      pragma Import (C, Field_Back, "field_back");
   begin
      Back := Field_Back (Fld).Attr;
   end Background;

   procedure Background (Fld   : Field;
                         Back  : out Character_Attribute_Set;
                         Color : out Color_Pair)
   is
      function Field_Back (Fld : Field) return Attributed_Character;
      pragma Import (C, Field_Back, "field_back");
   begin
      Back  := Field_Back (Fld).Attr;
      Color := Field_Back (Fld).Color;
   end Background;
   --  |
   --  |
   --  |
   procedure Set_Pad_Character (Fld : Field;
                                Pad : Character := Space)
   is
      function Set_Field_Pad (Fld : Field;
                              Ch  : C_Int) return Eti_Error;
      pragma Import (C, Set_Field_Pad, "set_field_pad");

   begin
      Eti_Exception (Set_Field_Pad (Fld,
                                    C_Int (Character'Pos (Pad))));
   end Set_Pad_Character;
   --  |
   --  |
   --  |
   procedure Pad_Character (Fld : Field;
                            Pad : out Character)
   is
      function Field_Pad (Fld : Field) return C_Int;
      pragma Import (C, Field_Pad, "field_pad");
   begin
      Pad := Character'Val (Field_Pad (Fld));
   end Pad_Character;
   --  |
   --  |=====================================================================
   --  | man page form_field_info.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Info (Fld                : Field;
                   Lines              : out Line_Count;
                   Columns            : out Column_Count;
                   First_Row          : out Line_Position;
                   First_Column       : out Column_Position;
                   Off_Screen         : out Natural;
                   Additional_Buffers : out Buffer_Number)
   is
      type C_Int_Access is access all C_Int;
      function Fld_Info (Fld : Field;
                         L, C, Fr, Fc, Os, Ab : C_Int_Access)
                         return Eti_Error;
      pragma Import (C, Fld_Info, "field_info");

      L, C, Fr, Fc, Os, Ab : aliased C_Int;
   begin
      Eti_Exception (Fld_Info (Fld,
                               L'Access, C'Access,
                               Fr'Access, Fc'Access,
                               Os'Access, Ab'Access));
      Lines              := Line_Count (L);
      Columns            := Column_Count (C);
      First_Row          := Line_Position (Fr);
      First_Column       := Column_Position (Fc);
      Off_Screen         := Natural (Os);
      Additional_Buffers := Buffer_Number (Ab);
   end Info;
--  |
--  |
--  |
   procedure Dynamic_Info (Fld     : Field;
                           Lines   : out Line_Count;
                           Columns : out Column_Count;
                           Max     : out Natural)
   is
      type C_Int_Access is access all C_Int;
      function Dyn_Info (Fld : Field; L, C, M : C_Int_Access) return Eti_Error;
      pragma Import (C, Dyn_Info, "dynamic_field_info");

      L, C, M : aliased C_Int;
   begin
      Eti_Exception (Dyn_Info (Fld,
                               L'Access, C'Access,
                               M'Access));
      Lines   := Line_Count (L);
      Columns := Column_Count (C);
      Max     := Natural (M);
   end Dynamic_Info;
   --  |
   --  |=====================================================================
   --  | man page form_win.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Set_Window (Frm : Form;
                         Win : Window)
   is
      function Set_Form_Win (Frm : Form;
                             Win : Window) return Eti_Error;
      pragma Import (C, Set_Form_Win, "set_form_win");

   begin
      Eti_Exception (Set_Form_Win (Frm, Win));
   end Set_Window;
   --  |
   --  |
   --  |
   function Get_Window (Frm : Form) return Window
   is
      function Form_Win (Frm : Form) return Window;
      pragma Import (C, Form_Win, "form_win");

      W : constant Window := Form_Win (Frm);
   begin
      return W;
   end Get_Window;
   --  |
   --  |
   --  |
   procedure Set_Sub_Window (Frm : Form;
                             Win : Window)
   is
      function Set_Form_Sub (Frm : Form;
                             Win : Window) return Eti_Error;
      pragma Import (C, Set_Form_Sub, "set_form_sub");

   begin
      Eti_Exception (Set_Form_Sub (Frm, Win));
   end Set_Sub_Window;
   --  |
   --  |
   --  |
   function Get_Sub_Window (Frm : Form) return Window
   is
      function Form_Sub (Frm : Form) return Window;
      pragma Import (C, Form_Sub, "form_sub");

      W : constant Window := Form_Sub (Frm);
   begin
      return W;
   end Get_Sub_Window;
   --  |
   --  |
   --  |
   procedure Scale (Frm     : Form;
                    Lines   : out Line_Count;
                    Columns : out Column_Count)
   is
      type C_Int_Access is access all C_Int;
      function M_Scale (Frm : Form; Yp, Xp : C_Int_Access) return Eti_Error;
      pragma Import (C, M_Scale, "scale_form");

      X, Y : aliased C_Int;
   begin
      Eti_Exception (M_Scale (Frm, Y'Access, X'Access));
      Lines   := Line_Count (Y);
      Columns := Column_Count (X);
   end Scale;
   --  |
   --  |=====================================================================
   --  | man page menu_hook.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Set_Field_Init_Hook (Frm  : Form;
                                  Proc : Form_Hook_Function)
   is
      function Set_Field_Init (Frm  : Form;
                               Proc : Form_Hook_Function) return Eti_Error;
      pragma Import (C, Set_Field_Init, "set_field_init");

   begin
      Eti_Exception (Set_Field_Init (Frm, Proc));
   end Set_Field_Init_Hook;
   --  |
   --  |
   --  |
   procedure Set_Field_Term_Hook (Frm  : Form;
                                  Proc : Form_Hook_Function)
   is
      function Set_Field_Term (Frm  : Form;
                               Proc : Form_Hook_Function) return Eti_Error;
      pragma Import (C, Set_Field_Term, "set_field_term");

   begin
      Eti_Exception (Set_Field_Term (Frm, Proc));
   end Set_Field_Term_Hook;
   --  |
   --  |
   --  |
   procedure Set_Form_Init_Hook (Frm  : Form;
                                 Proc : Form_Hook_Function)
   is
      function Set_Form_Init (Frm  : Form;
                              Proc : Form_Hook_Function) return Eti_Error;
      pragma Import (C, Set_Form_Init, "set_form_init");

   begin
      Eti_Exception (Set_Form_Init (Frm, Proc));
   end Set_Form_Init_Hook;
   --  |
   --  |
   --  |
   procedure Set_Form_Term_Hook (Frm  : Form;
                                 Proc : Form_Hook_Function)
   is
      function Set_Form_Term (Frm  : Form;
                              Proc : Form_Hook_Function) return Eti_Error;
      pragma Import (C, Set_Form_Term, "set_form_term");

   begin
      Eti_Exception (Set_Form_Term (Frm, Proc));
   end Set_Form_Term_Hook;
   --  |
   --  |=====================================================================
   --  | man page form_fields.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Redefine (Frm  : Form;
                       Flds : Field_Array_Access)
   is
      function Set_Frm_Fields (Frm   : Form;
                               Items : System.Address) return Eti_Error;
      pragma Import (C, Set_Frm_Fields, "set_form_fields");

   begin
      pragma Assert (Flds.all (Flds'Last) = Null_Field);
      if Flds.all (Flds'Last) /= Null_Field then
         raise Form_Exception;
      else
         Eti_Exception (Set_Frm_Fields (Frm, Flds.all (Flds'First)'Address));
      end if;
   end Redefine;
   --  |
   --  |
   --  |
   function Fields (Frm   : Form;
                    Index : Positive) return Field
   is
      use F_Array;

      function C_Fields (Frm : Form) return Pointer;
      pragma Import (C, C_Fields, "form_fields");

      P : Pointer := C_Fields (Frm);
   begin
      if P = null or else Index > Field_Count (Frm) then
         raise Form_Exception;
      else
         P := P + ptrdiff_t (C_Int (Index) - 1);
         return P.all;
      end if;
   end Fields;
   --  |
   --  |
   --  |
   function Field_Count (Frm : Form) return Natural
   is
      function Count (Frm : Form) return C_Int;
      pragma Import (C, Count, "field_count");
   begin
      return Natural (Count (Frm));
   end Field_Count;
   --  |
   --  |
   --  |
   procedure Move (Fld    : Field;
                   Line   : Line_Position;
                   Column : Column_Position)
   is
      function Move (Fld : Field; L, C : C_Int) return Eti_Error;
      pragma Import (C, Move, "move_field");

   begin
      Eti_Exception (Move (Fld, C_Int (Line), C_Int (Column)));
   end Move;
   --  |
   --  |=====================================================================
   --  | man page form_new.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   function Create (Fields : Field_Array_Access) return Form
   is
      function NewForm (Fields : System.Address) return Form;
      pragma Import (C, NewForm, "new_form");

      M   : Form;
   begin
      pragma Assert (Fields.all (Fields'Last) = Null_Field);
      if Fields.all (Fields'Last) /= Null_Field then
         raise Form_Exception;
      else
         M := NewForm (Fields.all (Fields'First)'Address);
         if M = Null_Form then
            raise Form_Exception;
         end if;
         return M;
      end if;
   end Create;
   --  |
   --  |
   --  |
   procedure Delete (Frm : in out Form)
   is
      function Free (Frm : Form) return Eti_Error;
      pragma Import (C, Free, "free_form");

   begin
      Eti_Exception (Free (Frm));
      Frm := Null_Form;
   end Delete;
   --  |
   --  |=====================================================================
   --  | man page form_opts.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Set_Options (Frm     : Form;
                          Options : Form_Option_Set)
   is
      function Set_Form_Opts (Frm : Form;
                              Opt : Form_Option_Set) return Eti_Error;
      pragma Import (C, Set_Form_Opts, "set_form_opts");

   begin
      Eti_Exception (Set_Form_Opts (Frm, Options));
   end Set_Options;
   --  |
   --  |
   --  |
   procedure Switch_Options (Frm     : Form;
                             Options : Form_Option_Set;
                             On      : Boolean := True)
   is
      function Form_Opts_On (Frm : Form;
                             Opt : Form_Option_Set) return Eti_Error;
      pragma Import (C, Form_Opts_On, "form_opts_on");
      function Form_Opts_Off (Frm : Form;
                              Opt : Form_Option_Set) return Eti_Error;
      pragma Import (C, Form_Opts_Off, "form_opts_off");

   begin
      if On then
         Eti_Exception (Form_Opts_On (Frm, Options));
      else
         Eti_Exception (Form_Opts_Off (Frm, Options));
      end if;
   end Switch_Options;
   --  |
   --  |
   --  |
   procedure Get_Options (Frm     : Form;
                          Options : out Form_Option_Set)
   is
      function Form_Opts (Frm : Form) return Form_Option_Set;
      pragma Import (C, Form_Opts, "form_opts");

   begin
      Options := Form_Opts (Frm);
   end Get_Options;
   --  |
   --  |
   --  |
   function Get_Options (Frm : Form := Null_Form) return Form_Option_Set
   is
      Fos : Form_Option_Set;
   begin
      Get_Options (Frm, Fos);
      return Fos;
   end Get_Options;
   --  |
   --  |=====================================================================
   --  | man page form_post.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Post (Frm  : Form;
                   Post : Boolean := True)
   is
      function M_Post (Frm : Form) return Eti_Error;
      pragma Import (C, M_Post, "post_form");
      function M_Unpost (Frm : Form) return Eti_Error;
      pragma Import (C, M_Unpost, "unpost_form");

   begin
      if Post then
         Eti_Exception (M_Post (Frm));
      else
         Eti_Exception (M_Unpost (Frm));
      end if;
   end Post;
   --  |
   --  |=====================================================================
   --  | man page form_cursor.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Position_Cursor (Frm : Form)
   is
      function Pos_Form_Cursor (Frm : Form) return Eti_Error;
      pragma Import (C, Pos_Form_Cursor, "pos_form_cursor");

   begin
      Eti_Exception (Pos_Form_Cursor (Frm));
   end Position_Cursor;
   --  |
   --  |=====================================================================
   --  | man page form_data.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   function Data_Ahead (Frm : Form) return Boolean
   is
      function Ahead (Frm : Form) return C_Int;
      pragma Import (C, Ahead, "data_ahead");

      Res : constant C_Int := Ahead (Frm);
   begin
      if Res = Curses_False then
         return False;
      else
         return True;
      end if;
   end Data_Ahead;
   --  |
   --  |
   --  |
   function Data_Behind (Frm : Form) return Boolean
   is
      function Behind (Frm : Form) return C_Int;
      pragma Import (C, Behind, "data_behind");

      Res : constant C_Int := Behind (Frm);
   begin
      if Res = Curses_False then
         return False;
      else
         return True;
      end if;
   end Data_Behind;
   --  |
   --  |=====================================================================
   --  | man page form_driver.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   function Driver (Frm : Form;
                    Key : Key_Code) return Driver_Result
   is
      function Frm_Driver (Frm : Form; Key : C_Int) return Eti_Error;
      pragma Import (C, Frm_Driver, "form_driver");

      R : constant Eti_Error := Frm_Driver (Frm, C_Int (Key));
   begin
      case R is
         when E_Unknown_Command =>
            return Unknown_Request;
         when E_Invalid_Field =>
            return Invalid_Field;
         when E_Request_Denied =>
            return Request_Denied;
         when others =>
            Eti_Exception (R);
            return Form_Ok;
      end case;
   end Driver;
   --  |
   --  |=====================================================================
   --  | man page form_page.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Set_Current (Frm : Form;
                          Fld : Field)
   is
      function Set_Current_Fld (Frm : Form; Fld : Field) return Eti_Error;
      pragma Import (C, Set_Current_Fld, "set_current_field");

   begin
      Eti_Exception (Set_Current_Fld (Frm, Fld));
   end Set_Current;
   --  |
   --  |
   --  |
   function Current (Frm : Form) return Field
   is
      function Current_Fld (Frm : Form) return Field;
      pragma Import (C, Current_Fld, "current_field");

      Fld : constant Field := Current_Fld (Frm);
   begin
      if Fld = Null_Field then
         raise Form_Exception;
      end if;
      return Fld;
   end Current;
   --  |
   --  |
   --  |
   procedure Set_Page (Frm  : Form;
                       Page : Page_Number := Page_Number'First)
   is
      function Set_Frm_Page (Frm : Form; Pg : C_Int) return Eti_Error;
      pragma Import (C, Set_Frm_Page, "set_form_page");

   begin
      Eti_Exception (Set_Frm_Page (Frm, C_Int (Page)));
   end Set_Page;
   --  |
   --  |
   --  |
   function Page (Frm : Form) return Page_Number
   is
      function Get_Page (Frm : Form) return C_Int;
      pragma Import (C, Get_Page, "form_page");

      P : constant C_Int := Get_Page (Frm);
   begin
      if P < 0 then
         raise Form_Exception;
      else
         return Page_Number (P);
      end if;
   end Page;

   function Get_Index (Fld : Field) return Positive
   is
      function Get_Fieldindex (Fld : Field) return C_Int;
      pragma Import (C, Get_Fieldindex, "field_index");

      Res : constant C_Int := Get_Fieldindex (Fld);
   begin
      if Res = Curses_Err then
         raise Form_Exception;
      end if;
      return Positive (Natural (Res) + Positive'First);
   end Get_Index;

   --  |
   --  |=====================================================================
   --  | man page form_new_page.3x
   --  |=====================================================================
   --  |
   --  |
   --  |
   procedure Set_New_Page (Fld      : Field;
                           New_Page : Boolean := True)
   is
      function Set_Page (Fld : Field; Flg : C_Int) return Eti_Error;
      pragma Import (C, Set_Page, "set_new_page");

   begin
      Eti_Exception (Set_Page (Fld, Boolean'Pos (New_Page)));
   end Set_New_Page;
   --  |
   --  |
   --  |
   function Is_New_Page (Fld : Field) return Boolean
   is
      function Is_New (Fld : Field) return C_Int;
      pragma Import (C, Is_New, "new_page");

      Res : constant C_Int := Is_New (Fld);
   begin
      if Res = Curses_False then
         return False;
      else
         return True;
      end if;
   end Is_New_Page;

   procedure Free (FA          : in out Field_Array_Access;
                   Free_Fields : Boolean := False)
   is
      procedure Release is new Ada.Unchecked_Deallocation
        (Field_Array, Field_Array_Access);
   begin
      if FA /= null and then Free_Fields then
         for I in FA'First .. (FA'Last - 1) loop
            if FA.all (I) /= Null_Field then
               Delete (FA.all (I));
            end if;
         end loop;
      end if;
      Release (FA);
   end Free;

   --  |=====================================================================

   function Default_Field_Options return Field_Option_Set
   is
   begin
      return Get_Options (Null_Field);
   end Default_Field_Options;

   function Default_Form_Options return Form_Option_Set
   is
   begin
      return Get_Options (Null_Form);
   end Default_Form_Options;

end Terminal_Interface.Curses.Forms;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-termcap__ads.htm0000644000175100001440000002253112340214310025171 0ustar tomusers terminal_interface-curses-termcap.ads

File : terminal_interface-curses-termcap.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                     Terminal_Interface.Curses.Termcap                    --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 2000 Free Software Foundation, Inc.                        --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.3 @
--  Binding Version 01.00
------------------------------------------------------------------------------

package Terminal_Interface.Curses.Termcap is
   pragma Preelaborate (Terminal_Interface.Curses.Termcap);

   --  |=====================================================================
   --  | Man page curs_termcap.3x
   --  |=====================================================================
   --  Not implemented:  tputs (see curs_terminfo)

   type Termcap_String is new String;

   --  |
   function TGoto (Cap : String;
                   Col : Column_Position;
                   Row : Line_Position) return Termcap_String;
   --  AKA: tgoto()

   --  |
   function Get_Entry (Name : String) return Boolean;
   --  AKA: tgetent()

   --  |
   function Get_Flag (Name : String) return Boolean;
   --  AKA: tgetflag()

   --  |
   procedure Get_Number (Name   : String;
                         Value  : out Integer;
                         Result : out Boolean);
   --  AKA: tgetnum()

   --  |
   procedure Get_String (Name   : String;
                         Value  : out String;
                         Result : out Boolean);
   function Get_String (Name : String) return Boolean;
   --  Returns True if the string is found.
   --  AKA: tgetstr()

end Terminal_Interface.Curses.Termcap;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses__ads.htm0000644000175100001440000102633712340214310023551 0ustar tomusers terminal_interface-curses.ads

File : terminal_interface-curses.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                         Terminal_Interface.Curses                        --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.47 @
--  @Date: 2014/05/24 21:31:57 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with System.Storage_Elements;
with Interfaces.C;   --  We need this for some assertions.

with Terminal_Interface.Curses_Constants;

package Terminal_Interface.Curses is
   pragma Preelaborate (Terminal_Interface.Curses);
   pragma Linker_Options ("-lncurses" & Curses_Constants.DFT_ARG_SUFFIX);

   Major_Version : constant := Curses_Constants.NCURSES_VERSION_MAJOR;
   Minor_Version : constant := Curses_Constants.NCURSES_VERSION_MINOR;
   NC_Version : String renames Curses_Constants.Version;

   type Window is private;
   Null_Window : constant Window;

   type Line_Position   is new Integer; --  line coordinate
   type Column_Position is new Integer; --  column coordinate

   subtype Line_Count   is Line_Position   range 1 .. Line_Position'Last;
   --  Type to count lines. We do not allow null windows, so must be positive
   subtype Column_Count is Column_Position range 1 .. Column_Position'Last;
   --  Type to count columns. We do not allow null windows, so must be positive

   type Key_Code is new Integer;
   --  That is anything including real characters, special keys and logical
   --  request codes.

   --  FIXME: The "-1" should be Curses_Err
   subtype Real_Key_Code is Key_Code range -1 .. Curses_Constants.KEY_MAX;
   --  This are the codes that potentially represent a real keystroke.
   --  Not all codes may be possible on a specific terminal. To check the
   --  availability of a special key, the Has_Key function is provided.

   subtype Special_Key_Code is Real_Key_Code
     range Curses_Constants. KEY_MIN - 1 .. Real_Key_Code'Last;
   --  Type for a function- or special key number

   subtype Normal_Key_Code is Real_Key_Code range
     Character'Pos (Character'First) .. Character'Pos (Character'Last);
   --  This are the codes for regular (incl. non-graphical) characters.

   --  For those who like to use the original key names we produce them were
   --  they differ from the original.

   --  Constants for function- and special keys
   Key_None                    : constant Special_Key_Code
     := Curses_Constants.KEY_MIN - 1;
   Key_Min                     : constant Special_Key_Code
     := Curses_Constants.KEY_MIN;
   Key_Break                   : constant Special_Key_Code
     := Curses_Constants.KEY_BREAK;
   KEY_DOWN                    : constant Special_Key_Code
     := Curses_Constants.KEY_DOWN;
   Key_Cursor_Down             : Special_Key_Code renames KEY_DOWN;
   KEY_UP                      : constant Special_Key_Code
     := Curses_Constants.KEY_UP;
   Key_Cursor_Up               : Special_Key_Code renames KEY_UP;
   KEY_LEFT                    : constant Special_Key_Code
     := Curses_Constants.KEY_LEFT;
   Key_Cursor_Left             : Special_Key_Code renames KEY_LEFT;
   KEY_RIGHT                   : constant Special_Key_Code
     := Curses_Constants.KEY_RIGHT;
   Key_Cursor_Right            : Special_Key_Code renames KEY_RIGHT;
   Key_Home                    : constant Special_Key_Code
     := Curses_Constants.KEY_HOME;
   Key_Backspace               : constant Special_Key_Code
     := Curses_Constants.KEY_BACKSPACE;
   Key_F0                      : constant Special_Key_Code
     := Curses_Constants.KEY_F0;
   Key_F1                      : constant Special_Key_Code
     := Curses_Constants.KEY_F1;
   Key_F2                      : constant Special_Key_Code
     := Curses_Constants.KEY_F2;
   Key_F3                      : constant Special_Key_Code
     := Curses_Constants.KEY_F3;
   Key_F4                      : constant Special_Key_Code
     := Curses_Constants.KEY_F4;
   Key_F5                      : constant Special_Key_Code
     := Curses_Constants.KEY_F5;
   Key_F6                      : constant Special_Key_Code
     := Curses_Constants.KEY_F6;
   Key_F7                      : constant Special_Key_Code
     := Curses_Constants.KEY_F7;
   Key_F8                      : constant Special_Key_Code
     := Curses_Constants.KEY_F8;
   Key_F9                      : constant Special_Key_Code
     := Curses_Constants.KEY_F9;
   Key_F10                     : constant Special_Key_Code
     := Curses_Constants.KEY_F10;
   Key_F11                     : constant Special_Key_Code
     := Curses_Constants.KEY_F11;
   Key_F12                     : constant Special_Key_Code
     := Curses_Constants.KEY_F12;
   Key_F13                     : constant Special_Key_Code
     := Curses_Constants.KEY_F13;
   Key_F14                     : constant Special_Key_Code
     := Curses_Constants.KEY_F14;
   Key_F15                     : constant Special_Key_Code
     := Curses_Constants.KEY_F15;
   Key_F16                     : constant Special_Key_Code
     := Curses_Constants.KEY_F16;
   Key_F17                     : constant Special_Key_Code
     := Curses_Constants.KEY_F17;
   Key_F18                     : constant Special_Key_Code
     := Curses_Constants.KEY_F18;
   Key_F19                     : constant Special_Key_Code
     := Curses_Constants.KEY_F19;
   Key_F20                     : constant Special_Key_Code
     := Curses_Constants.KEY_F20;
   Key_F21                     : constant Special_Key_Code
     := Curses_Constants.KEY_F21;
   Key_F22                     : constant Special_Key_Code
     := Curses_Constants.KEY_F22;
   Key_F23                     : constant Special_Key_Code
     := Curses_Constants.KEY_F23;
   Key_F24                     : constant Special_Key_Code
     := Curses_Constants.KEY_F24;
   KEY_DL                      : constant Special_Key_Code
     := Curses_Constants.KEY_DL;
   Key_Delete_Line             : Special_Key_Code renames KEY_DL;
   KEY_IL                      : constant Special_Key_Code
     := Curses_Constants.KEY_IL;
   Key_Insert_Line             : Special_Key_Code renames KEY_IL;
   KEY_DC                      : constant Special_Key_Code
     := Curses_Constants.KEY_DC;
   Key_Delete_Char             : Special_Key_Code renames KEY_DC;
   KEY_IC                      : constant Special_Key_Code
     := Curses_Constants.KEY_IC;
   Key_Insert_Char             : Special_Key_Code renames KEY_IC;
   KEY_EIC                     : constant Special_Key_Code
     := Curses_Constants.KEY_EIC;
   Key_Exit_Insert_Mode        : Special_Key_Code renames KEY_EIC;
   KEY_CLEAR                   : constant Special_Key_Code
     := Curses_Constants.KEY_CLEAR;
   Key_Clear_Screen            : Special_Key_Code renames KEY_CLEAR;
   KEY_EOS                     : constant Special_Key_Code
     := Curses_Constants.KEY_EOS;
   Key_Clear_End_Of_Screen     : Special_Key_Code renames KEY_EOS;
   KEY_EOL                     : constant Special_Key_Code
     := Curses_Constants.KEY_EOL;
   Key_Clear_End_Of_Line       : Special_Key_Code renames KEY_EOL;
   KEY_SF                      : constant Special_Key_Code
     := Curses_Constants.KEY_SF;
   Key_Scroll_1_Forward        : Special_Key_Code renames KEY_SF;
   KEY_SR                      : constant Special_Key_Code
     := Curses_Constants.KEY_SR;
   Key_Scroll_1_Backward       : Special_Key_Code renames KEY_SR;
   KEY_NPAGE                   : constant Special_Key_Code
     := Curses_Constants.KEY_NPAGE;
   Key_Next_Page               : Special_Key_Code renames KEY_NPAGE;
   KEY_PPAGE                   : constant Special_Key_Code
     := Curses_Constants.KEY_PPAGE;
   Key_Previous_Page           : Special_Key_Code renames KEY_PPAGE;
   KEY_STAB                    : constant Special_Key_Code
     := Curses_Constants.KEY_STAB;
   Key_Set_Tab                 : Special_Key_Code renames KEY_STAB;
   KEY_CTAB                    : constant Special_Key_Code
     := Curses_Constants.KEY_CTAB;
   Key_Clear_Tab               : Special_Key_Code renames KEY_CTAB;
   KEY_CATAB                   : constant Special_Key_Code
     := Curses_Constants.KEY_CATAB;
   Key_Clear_All_Tabs          : Special_Key_Code renames KEY_CATAB;
   KEY_ENTER                   : constant Special_Key_Code
     := Curses_Constants.KEY_ENTER;
   Key_Enter_Or_Send           : Special_Key_Code renames KEY_ENTER;
   KEY_SRESET                  : constant Special_Key_Code
     := Curses_Constants.KEY_SRESET;
   Key_Soft_Reset              : Special_Key_Code renames KEY_SRESET;
   Key_Reset                   : constant Special_Key_Code
     := Curses_Constants.KEY_RESET;
   Key_Print                   : constant Special_Key_Code
     := Curses_Constants.KEY_PRINT;
   KEY_LL                      : constant Special_Key_Code
     := Curses_Constants.KEY_LL;
   Key_Bottom                  : Special_Key_Code renames KEY_LL;
   KEY_A1                      : constant Special_Key_Code
     := Curses_Constants.KEY_A1;
   Key_Upper_Left_Of_Keypad    : Special_Key_Code renames KEY_A1;
   KEY_A3                      : constant Special_Key_Code
     := Curses_Constants.KEY_A3;
   Key_Upper_Right_Of_Keypad   : Special_Key_Code renames KEY_A3;
   KEY_B2                      : constant Special_Key_Code
     := Curses_Constants.KEY_B2;
   Key_Center_Of_Keypad        : Special_Key_Code renames KEY_B2;
   KEY_C1                      : constant Special_Key_Code
     := Curses_Constants.KEY_C1;
   Key_Lower_Left_Of_Keypad    : Special_Key_Code renames KEY_C1;
   KEY_C3                      : constant Special_Key_Code
     := Curses_Constants.KEY_C3;
   Key_Lower_Right_Of_Keypad   : Special_Key_Code renames KEY_C3;
   KEY_BTAB                    : constant Special_Key_Code
     := Curses_Constants.KEY_BTAB;
   Key_Back_Tab                : Special_Key_Code renames KEY_BTAB;
   KEY_BEG                     : constant Special_Key_Code
     := Curses_Constants.KEY_BEG;
   Key_Beginning               : Special_Key_Code renames KEY_BEG;
   Key_Cancel                  : constant Special_Key_Code
     := Curses_Constants.KEY_CANCEL;
   Key_Close                   : constant Special_Key_Code
     := Curses_Constants.KEY_CLOSE;
   Key_Command                 : constant Special_Key_Code
     := Curses_Constants.KEY_COMMAND;
   Key_Copy                    : constant Special_Key_Code
     := Curses_Constants.KEY_COPY;
   Key_Create                  : constant Special_Key_Code
     := Curses_Constants.KEY_CREATE;
   Key_End                     : constant Special_Key_Code
     := Curses_Constants.KEY_END;
   Key_Exit                    : constant Special_Key_Code
     := Curses_Constants.KEY_EXIT;
   Key_Find                    : constant Special_Key_Code
     := Curses_Constants.KEY_FIND;
   Key_Help                    : constant Special_Key_Code
     := Curses_Constants.KEY_HELP;
   Key_Mark                    : constant Special_Key_Code
     := Curses_Constants.KEY_MARK;
   Key_Message                 : constant Special_Key_Code
     := Curses_Constants.KEY_MESSAGE;
   Key_Move                    : constant Special_Key_Code
     := Curses_Constants.KEY_MOVE;
   Key_Next                    : constant Special_Key_Code
     := Curses_Constants.KEY_NEXT;
   Key_Open                    : constant Special_Key_Code
     := Curses_Constants.KEY_OPEN;
   Key_Options                 : constant Special_Key_Code
     := Curses_Constants.KEY_OPTIONS;
   Key_Previous                : constant Special_Key_Code
     := Curses_Constants.KEY_PREVIOUS;
   Key_Redo                    : constant Special_Key_Code
     := Curses_Constants.KEY_REDO;
   Key_Reference               : constant Special_Key_Code
     := Curses_Constants.KEY_REFERENCE;
   Key_Refresh                 : constant Special_Key_Code
     := Curses_Constants.KEY_REFRESH;
   Key_Replace                 : constant Special_Key_Code
     := Curses_Constants.KEY_REPLACE;
   Key_Restart                 : constant Special_Key_Code
     := Curses_Constants.KEY_RESTART;
   Key_Resume                  : constant Special_Key_Code
     := Curses_Constants.KEY_RESUME;
   Key_Save                    : constant Special_Key_Code
     := Curses_Constants.KEY_SAVE;
   KEY_SBEG                    : constant Special_Key_Code
     := Curses_Constants.KEY_SBEG;
   Key_Shift_Begin             : Special_Key_Code renames KEY_SBEG;
   KEY_SCANCEL                 : constant Special_Key_Code
     := Curses_Constants.KEY_SCANCEL;
   Key_Shift_Cancel            : Special_Key_Code renames KEY_SCANCEL;
   KEY_SCOMMAND                : constant Special_Key_Code
     := Curses_Constants.KEY_SCOMMAND;
   Key_Shift_Command           : Special_Key_Code renames KEY_SCOMMAND;
   KEY_SCOPY                   : constant Special_Key_Code
     := Curses_Constants.KEY_SCOPY;
   Key_Shift_Copy              : Special_Key_Code renames KEY_SCOPY;
   KEY_SCREATE                 : constant Special_Key_Code
     := Curses_Constants.KEY_SCREATE;
   Key_Shift_Create            : Special_Key_Code renames KEY_SCREATE;
   KEY_SDC                     : constant Special_Key_Code
     := Curses_Constants.KEY_SDC;
   Key_Shift_Delete_Char       : Special_Key_Code renames KEY_SDC;
   KEY_SDL                     : constant Special_Key_Code
     := Curses_Constants.KEY_SDL;
   Key_Shift_Delete_Line       : Special_Key_Code renames KEY_SDL;
   Key_Select                  : constant Special_Key_Code
     := Curses_Constants.KEY_SELECT;
   KEY_SEND                    : constant Special_Key_Code
     := Curses_Constants.KEY_SEND;
   Key_Shift_End               : Special_Key_Code renames KEY_SEND;
   KEY_SEOL                    : constant Special_Key_Code
     := Curses_Constants.KEY_SEOL;
   Key_Shift_Clear_End_Of_Line : Special_Key_Code renames KEY_SEOL;
   KEY_SEXIT                   : constant Special_Key_Code
     := Curses_Constants.KEY_SEXIT;
   Key_Shift_Exit              : Special_Key_Code renames KEY_SEXIT;
   KEY_SFIND                   : constant Special_Key_Code
     := Curses_Constants.KEY_SFIND;
   Key_Shift_Find              : Special_Key_Code renames KEY_SFIND;
   KEY_SHELP                   : constant Special_Key_Code
     := Curses_Constants.KEY_SHELP;
   Key_Shift_Help              : Special_Key_Code renames KEY_SHELP;
   KEY_SHOME                   : constant Special_Key_Code
     := Curses_Constants.KEY_SHOME;
   Key_Shift_Home              : Special_Key_Code renames KEY_SHOME;
   KEY_SIC                     : constant Special_Key_Code
     := Curses_Constants.KEY_SIC;
   Key_Shift_Insert_Char       : Special_Key_Code renames KEY_SIC;
   KEY_SLEFT                   : constant Special_Key_Code
     := Curses_Constants.KEY_SLEFT;
   Key_Shift_Cursor_Left       : Special_Key_Code renames KEY_SLEFT;
   KEY_SMESSAGE                : constant Special_Key_Code
     := Curses_Constants.KEY_SMESSAGE;
   Key_Shift_Message           : Special_Key_Code renames KEY_SMESSAGE;
   KEY_SMOVE                   : constant Special_Key_Code
     := Curses_Constants.KEY_SMOVE;
   Key_Shift_Move              : Special_Key_Code renames KEY_SMOVE;
   KEY_SNEXT                   : constant Special_Key_Code
     := Curses_Constants.KEY_SNEXT;
   Key_Shift_Next_Page         : Special_Key_Code renames KEY_SNEXT;
   KEY_SOPTIONS                : constant Special_Key_Code
     := Curses_Constants.KEY_SOPTIONS;
   Key_Shift_Options           : Special_Key_Code renames KEY_SOPTIONS;
   KEY_SPREVIOUS               : constant Special_Key_Code
     := Curses_Constants.KEY_SPREVIOUS;
   Key_Shift_Previous_Page     : Special_Key_Code renames KEY_SPREVIOUS;
   KEY_SPRINT                  : constant Special_Key_Code
     := Curses_Constants.KEY_SPRINT;
   Key_Shift_Print             : Special_Key_Code renames KEY_SPRINT;
   KEY_SREDO                   : constant Special_Key_Code
     := Curses_Constants.KEY_SREDO;
   Key_Shift_Redo              : Special_Key_Code renames KEY_SREDO;
   KEY_SREPLACE                : constant Special_Key_Code
     := Curses_Constants.KEY_SREPLACE;
   Key_Shift_Replace           : Special_Key_Code renames KEY_SREPLACE;
   KEY_SRIGHT                  : constant Special_Key_Code
     := Curses_Constants.KEY_SRIGHT;
   Key_Shift_Cursor_Right      : Special_Key_Code renames KEY_SRIGHT;
   KEY_SRSUME                  : constant Special_Key_Code
     := Curses_Constants.KEY_SRSUME;
   Key_Shift_Resume            : Special_Key_Code renames KEY_SRSUME;
   KEY_SSAVE                   : constant Special_Key_Code
     := Curses_Constants.KEY_SSAVE;
   Key_Shift_Save              : Special_Key_Code renames KEY_SSAVE;
   KEY_SSUSPEND                : constant Special_Key_Code
     := Curses_Constants.KEY_SSUSPEND;
   Key_Shift_Suspend           : Special_Key_Code renames KEY_SSUSPEND;
   KEY_SUNDO                   : constant Special_Key_Code
     := Curses_Constants.KEY_SUNDO;
   Key_Shift_Undo              : Special_Key_Code renames KEY_SUNDO;
   Key_Suspend                 : constant Special_Key_Code
     := Curses_Constants.KEY_SUSPEND;
   Key_Undo                    : constant Special_Key_Code
     := Curses_Constants.KEY_UNDO;
   Key_Mouse                   : constant Special_Key_Code
     := Curses_Constants.KEY_MOUSE;
   Key_Resize                  : constant Special_Key_Code
     := Curses_Constants.KEY_RESIZE;
   Key_Max                     : constant Special_Key_Code
     := Special_Key_Code'Last;

   subtype User_Key_Code is Key_Code
     range (Key_Max + 129) .. Key_Code'Last;
   --  This is reserved for user defined key codes. The range between Key_Max
   --  and the first user code is reserved for subsystems like menu and forms.

   --------------------------------------------------------------------------

   type Color_Number is range -1 .. Integer (Interfaces.C.short'Last);
   for Color_Number'Size use Interfaces.C.short'Size;
   --  (n)curses uses a short for the color index
   --  The model is, that a Color_Number is an index into an array of
   --  (potentially) definable colors. Some of those indices are
   --  predefined (see below), although they may not really exist.

   Black   : constant Color_Number := Curses_Constants.COLOR_BLACK;
   Red     : constant Color_Number := Curses_Constants.COLOR_RED;
   Green   : constant Color_Number := Curses_Constants.COLOR_GREEN;
   Yellow  : constant Color_Number := Curses_Constants.COLOR_YELLOW;
   Blue    : constant Color_Number := Curses_Constants.COLOR_BLUE;
   Magenta : constant Color_Number := Curses_Constants.COLOR_MAGENTA;
   Cyan    : constant Color_Number := Curses_Constants.COLOR_CYAN;
   White   : constant Color_Number := Curses_Constants.COLOR_WHITE;

   type RGB_Value is range 0 .. Integer (Interfaces.C.short'Last);
   for RGB_Value'Size use Interfaces.C.short'Size;
   --  Some system may allow to redefine a color by setting RGB values.

   type Color_Pair is range 0 .. 255;
   for Color_Pair'Size use 8;
   subtype Redefinable_Color_Pair is Color_Pair range 1 .. 255;
   --  (n)curses reserves 1 Byte for the color-pair number. Color Pair 0
   --  is fixed (Black & White). A color pair is simply a combination of
   --  two colors described by Color_Numbers, one for the foreground and
   --  the other for the background

   type Character_Attribute_Set is
      record
         Stand_Out               : Boolean;
         Under_Line              : Boolean;
         Reverse_Video           : Boolean;
         Blink                   : Boolean;
         Dim_Character           : Boolean;
         Bold_Character          : Boolean;
         Protected_Character     : Boolean;
         Invisible_Character     : Boolean;
         Alternate_Character_Set : Boolean;
         Horizontal              : Boolean;
         Left                    : Boolean;
         Low                     : Boolean;
         Right                   : Boolean;
         Top                     : Boolean;
         Vertical                : Boolean;
      end record;

   for Character_Attribute_Set use
      record
         Stand_Out at 0 range
           Curses_Constants.A_STANDOUT_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_STANDOUT_Last - Curses_Constants.Attr_First;
         Under_Line at 0 range
           Curses_Constants.A_UNDERLINE_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_UNDERLINE_Last - Curses_Constants.Attr_First;
         Reverse_Video at 0 range
           Curses_Constants.A_REVERSE_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_REVERSE_Last - Curses_Constants.Attr_First;
         Blink at 0 range
           Curses_Constants.A_BLINK_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_BLINK_Last - Curses_Constants.Attr_First;
         Dim_Character at 0 range
           Curses_Constants.A_DIM_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_DIM_Last - Curses_Constants.Attr_First;
         Bold_Character at 0 range
           Curses_Constants.A_BOLD_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_BOLD_Last - Curses_Constants.Attr_First;
         Protected_Character at 0 range
           Curses_Constants.A_PROTECT_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_PROTECT_Last - Curses_Constants.Attr_First;
         Invisible_Character at 0 range
           Curses_Constants.A_INVIS_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_INVIS_Last - Curses_Constants.Attr_First;
         Alternate_Character_Set at 0 range
           Curses_Constants.A_ALTCHARSET_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_ALTCHARSET_Last - Curses_Constants.Attr_First;
         Horizontal at 0 range
           Curses_Constants.A_HORIZONTAL_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_HORIZONTAL_Last - Curses_Constants.Attr_First;
         Left at 0 range
           Curses_Constants.A_LEFT_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_LEFT_Last - Curses_Constants.Attr_First;
         Low at 0 range
           Curses_Constants.A_LOW_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_LOW_Last - Curses_Constants.Attr_First;
         Right at 0 range
           Curses_Constants.A_RIGHT_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_RIGHT_Last - Curses_Constants.Attr_First;
         Top at 0 range
           Curses_Constants.A_TOP_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_TOP_Last - Curses_Constants.Attr_First;
         Vertical at 0 range
           Curses_Constants.A_VERTICAL_First - Curses_Constants.Attr_First
           .. Curses_Constants.A_VERTICAL_Last - Curses_Constants.Attr_First;
      end record;

   Normal_Video : constant Character_Attribute_Set := (others => False);

   type Attributed_Character is
      record
         Attr  : Character_Attribute_Set;
         Color : Color_Pair;
         Ch    : Character;
      end record;
   pragma Convention (C_Pass_By_Copy, Attributed_Character);
   --  This is the counterpart for the chtype in C.

   for Attributed_Character use
      record
         Ch    at 0 range Curses_Constants.A_CHARTEXT_First
           .. Curses_Constants.A_CHARTEXT_Last;
         Color at 0 range Curses_Constants.A_COLOR_First
           .. Curses_Constants.A_COLOR_Last;
         pragma Warnings (Off);
         Attr  at 0 range Curses_Constants.Attr_First
           .. Curses_Constants.Attr_Last;
         pragma Warnings (On);
      end record;
   for Attributed_Character'Size use Curses_Constants.chtype_Size;

   Default_Character : constant Attributed_Character
     := (Ch    => Character'First,
         Color => Color_Pair'First,
         Attr  => (others => False));  --  preelaboratable Normal_Video

   type Attributed_String is array (Positive range <>) of Attributed_Character;
   pragma Convention (C, Attributed_String);
   --  In this binding we allow strings of attributed characters.

   ------------------
   --  Exceptions  --
   ------------------
   Curses_Exception     : exception;
   Wrong_Curses_Version : exception;

   --  Those exceptions are raised by the ETI (Extended Terminal Interface)
   --  subpackets for Menu and Forms handling.
   --
   Eti_System_Error    : exception;
   Eti_Bad_Argument    : exception;
   Eti_Posted          : exception;
   Eti_Connected       : exception;
   Eti_Bad_State       : exception;
   Eti_No_Room         : exception;
   Eti_Not_Posted      : exception;
   Eti_Unknown_Command : exception;
   Eti_No_Match        : exception;
   Eti_Not_Selectable  : exception;
   Eti_Not_Connected   : exception;
   Eti_Request_Denied  : exception;
   Eti_Invalid_Field   : exception;
   Eti_Current         : exception;

   --------------------------------------------------------------------------
   --  External C variables
   --  Conceptually even in C this are kind of constants, but they are
   --  initialized and sometimes changed by the library routines at runtime
   --  depending on the type of terminal. I believe the best way to model
   --  this is to use functions.
   --------------------------------------------------------------------------

   function Lines            return Line_Count;
   pragma Inline (Lines);

   function Columns          return Column_Count;
   pragma Inline (Columns);

   function Tab_Size         return Natural;
   pragma Inline (Tab_Size);

   function Number_Of_Colors return Natural;
   pragma Inline (Number_Of_Colors);

   function Number_Of_Color_Pairs return Natural;
   pragma Inline (Number_Of_Color_Pairs);

   subtype ACS_Index is Character range
     Character'Val (0) .. Character'Val (127);
   function ACS_Map (Index : ACS_Index) return Attributed_Character;
   pragma Import (C, ACS_Map, "acs_map_as_function");

   --  Constants for several characters from the Alternate Character Set
   --  You must use these constants as indices into the ACS_Map function
   --  to get the corresponding attributed character at runtime
   ACS_Upper_Left_Corner  : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_ULCORNER);
   ACS_Lower_Left_Corner  : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_LLCORNER);
   ACS_Upper_Right_Corner : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_URCORNER);
   ACS_Lower_Right_Corner : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_LRCORNER);
   ACS_Left_Tee           : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_LTEE);
   ACS_Right_Tee          : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_RTEE);
   ACS_Bottom_Tee         : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_BTEE);
   ACS_Top_Tee            : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_TTEE);
   ACS_Horizontal_Line    : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_HLINE);
   ACS_Vertical_Line      : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_VLINE);
   ACS_Plus_Symbol        : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_PLUS);
   ACS_Scan_Line_1        : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_S1);
   ACS_Scan_Line_9        : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_S9);
   ACS_Diamond            : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_DIAMOND);
   ACS_Checker_Board      : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_CKBOARD);
   ACS_Degree             : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_DEGREE);
   ACS_Plus_Minus         : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_PLMINUS);
   ACS_Bullet             : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_BULLET);
   ACS_Left_Arrow         : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_LARROW);
   ACS_Right_Arrow        : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_RARROW);
   ACS_Down_Arrow         : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_DARROW);
   ACS_Up_Arrow           : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_UARROW);
   ACS_Board_Of_Squares   : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_BOARD);
   ACS_Lantern            : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_LANTERN);
   ACS_Solid_Block        : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_BLOCK);
   ACS_Scan_Line_3        : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_S3);
   ACS_Scan_Line_7        : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_S7);
   ACS_Less_Or_Equal      : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_LEQUAL);
   ACS_Greater_Or_Equal   : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_GEQUAL);
   ACS_PI                 : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_PI);
   ACS_Not_Equal          : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_NEQUAL);
   ACS_Sterling           : constant ACS_Index
      := Character'Val (Curses_Constants.ACS_STERLING);

   --  |=====================================================================
   --  | Man page curs_initscr.3x
   --  |=====================================================================
   --  | Not implemented: newterm, set_term, delscreen

   --  #1A NAME="AFU_1"#2|
   function Standard_Window return Window;
   --  AKA: stdscr
   pragma Import (C, Standard_Window, "stdscr_as_function");
   pragma Inline (Standard_Window);

   --  #1A NAME="AFU_2"#2|
   function Current_Window return Window;
   --  AKA: curscr
   pragma Import (C, Current_Window, "curscr_as_function");
   pragma Inline (Current_Window);

   --  #1A NAME="AFU_3"#2|
   procedure Init_Screen;

   --  #1A NAME="AFU_4"#2|
   procedure Init_Windows renames Init_Screen;
   --  AKA: initscr()
   pragma Inline (Init_Screen);
   --  pragma Inline (Init_Windows);

   --  #1A NAME="AFU_5"#2|
   procedure End_Windows;
   --  AKA: endwin()
   procedure End_Screen renames End_Windows;
   pragma Inline (End_Windows);
   --  pragma Inline (End_Screen);

   --  #1A NAME="AFU_6"#2|
   function Is_End_Window return Boolean;
   --  AKA: isendwin()
   pragma Inline (Is_End_Window);

   --  |=====================================================================
   --  | Man page curs_move.3x
   --  |=====================================================================

   --  #1A NAME="AFU_7"#2|
   procedure Move_Cursor (Win    : Window := Standard_Window;
                          Line   : Line_Position;
                          Column : Column_Position);
   --  AKA: wmove()
   --  AKA: move()
   pragma Inline (Move_Cursor);

   --  |=====================================================================
   --  | Man page curs_addch.3x
   --  |=====================================================================

   --  #1A NAME="AFU_8"#2|
   procedure Add (Win : Window := Standard_Window;
                  Ch  : Attributed_Character);
   --  AKA: waddch()
   --  AKA: addch()

   procedure Add (Win : Window := Standard_Window;
                  Ch  : Character);
   --  Add a single character at the current logical cursor position to
   --  the window. Use the current windows attributes.

   --  #1A NAME="AFU_9"#2|
   procedure Add
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position;
      Ch     : Attributed_Character);
   --  AKA: mvwaddch()
   --  AKA: mvaddch()

   procedure Add
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position;
      Ch     : Character);
   --  Move to the position and add a single character into the window
   --  There are more Add routines, so the Inline pragma follows later

   --  #1A NAME="AFU_10"#2|
   procedure Add_With_Immediate_Echo
     (Win : Window := Standard_Window;
      Ch  : Attributed_Character);
   --  AKA: wechochar()
   --  AKA: echochar()

   procedure Add_With_Immediate_Echo
     (Win : Window := Standard_Window;
      Ch  : Character);
   --  Add a character and do an immediate refresh of the screen.
   pragma Inline (Add_With_Immediate_Echo);

   --  |=====================================================================
   --  | Man page curs_window.3x
   --  |=====================================================================
   --  Not Implemented: wcursyncup

   --  #1A NAME="AFU_11"#2|
   function Create
     (Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window;
   --  Not Implemented: Default Number_Of_Lines, Number_Of_Columns
   --  the C version lets them be 0, see the man page.
   --  AKA: newwin()
   pragma Inline (Create);

   function New_Window
     (Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window
     renames Create;
   --  pragma Inline (New_Window);

   --  #1A NAME="AFU_12"#2|
   procedure Delete (Win : in out Window);
   --  AKA: delwin()
   --  Reset Win to Null_Window
   pragma Inline (Delete);

   --  #1A NAME="AFU_13"#2|
   function Sub_Window
     (Win                   : Window := Standard_Window;
      Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window;
   --  AKA: subwin()
   pragma Inline (Sub_Window);

   --  #1A NAME="AFU_14"#2|
   function Derived_Window
     (Win                   : Window := Standard_Window;
      Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window;
   --  AKA: derwin()
   pragma Inline (Derived_Window);

   --  #1A NAME="AFU_15"#2|
   function Duplicate (Win : Window) return Window;
   --  AKA: dupwin()
   pragma Inline (Duplicate);

   --  #1A NAME="AFU_16"#2|
   procedure Move_Window (Win    : Window;
                          Line   : Line_Position;
                          Column : Column_Position);
   --  AKA: mvwin()
   pragma Inline (Move_Window);

   --  #1A NAME="AFU_17"#2|
   procedure Move_Derived_Window (Win    : Window;
                                  Line   : Line_Position;
                                  Column : Column_Position);
   --  AKA: mvderwin()
   pragma Inline (Move_Derived_Window);

   --  #1A NAME="AFU_18"#2|
   procedure Synchronize_Upwards (Win : Window);
   --  AKA: wsyncup()
   pragma Import (C, Synchronize_Upwards, "wsyncup");

   --  #1A NAME="AFU_19"#2|
   procedure Synchronize_Downwards (Win : Window);
   --  AKA: wsyncdown()
   pragma Import (C, Synchronize_Downwards, "wsyncdown");

   --  #1A NAME="AFU_20"#2|
   procedure Set_Synch_Mode (Win  : Window := Standard_Window;
                             Mode : Boolean := False);
   --  AKA: syncok()
   pragma Inline (Set_Synch_Mode);

   --  |=====================================================================
   --  | Man page curs_addstr.3x
   --  |=====================================================================

   --  #1A NAME="AFU_21"#2|
   procedure Add (Win : Window := Standard_Window;
                  Str : String;
                  Len : Integer := -1);
   --  AKA: waddnstr()
   --  AKA: waddstr()
   --  AKA: addnstr()
   --  AKA: addstr()

   --  #1A NAME="AFU_22"#2|
   procedure Add (Win    : Window := Standard_Window;
                  Line   : Line_Position;
                  Column : Column_Position;
                  Str    : String;
                  Len    : Integer := -1);
   --  AKA: mvwaddnstr()
   --  AKA: mvwaddstr()
   --  AKA: mvaddnstr()
   --  AKA: mvaddstr()

   --  |=====================================================================
   --  | Man page curs_addchstr.3x
   --  |=====================================================================

   --  #1A NAME="AFU_23"#2|
   procedure Add (Win : Window := Standard_Window;
                  Str : Attributed_String;
                  Len : Integer := -1);
   --  AKA: waddchnstr()
   --  AKA: waddchstr()
   --  AKA: addchnstr()
   --  AKA: addchstr()

   --  #1A NAME="AFU_24"#2|
   procedure Add (Win    : Window := Standard_Window;
                  Line   : Line_Position;
                  Column : Column_Position;
                  Str    : Attributed_String;
                  Len    : Integer := -1);
   --  AKA: mvwaddchnstr()
   --  AKA: mvwaddchstr()
   --  AKA: mvaddchnstr()
   --  AKA: mvaddchstr()
   pragma Inline (Add);

   --  |=====================================================================
   --  | Man page curs_border.3x
   --  |=====================================================================
   --  | Not implemented: mvhline,  mvwhline, mvvline, mvwvline
   --  | use Move_Cursor then Horizontal_Line or Vertical_Line

   --  #1A NAME="AFU_25"#2|
   procedure Border
     (Win                       : Window := Standard_Window;
      Left_Side_Symbol          : Attributed_Character := Default_Character;
      Right_Side_Symbol         : Attributed_Character := Default_Character;
      Top_Side_Symbol           : Attributed_Character := Default_Character;
      Bottom_Side_Symbol        : Attributed_Character := Default_Character;
      Upper_Left_Corner_Symbol  : Attributed_Character := Default_Character;
      Upper_Right_Corner_Symbol : Attributed_Character := Default_Character;
      Lower_Left_Corner_Symbol  : Attributed_Character := Default_Character;
      Lower_Right_Corner_Symbol : Attributed_Character := Default_Character
     );
   --  AKA: wborder()
   --  AKA: border()
   pragma Inline (Border);

   --  #1A NAME="AFU_26"#2|
   procedure Box
     (Win               : Window := Standard_Window;
      Vertical_Symbol   : Attributed_Character := Default_Character;
      Horizontal_Symbol : Attributed_Character := Default_Character);
   --  AKA: box()
   pragma Inline (Box);

   --  #1A NAME="AFU_27"#2|
   procedure Horizontal_Line
     (Win         : Window := Standard_Window;
      Line_Size   : Natural;
      Line_Symbol : Attributed_Character := Default_Character);
   --  AKA: whline()
   --  AKA: hline()
   pragma Inline (Horizontal_Line);

   --  #1A NAME="AFU_28"#2|
   procedure Vertical_Line
     (Win         : Window := Standard_Window;
      Line_Size   : Natural;
      Line_Symbol : Attributed_Character := Default_Character);
   --  AKA: wvline()
   --  AKA: vline()
   pragma Inline (Vertical_Line);

   --  |=====================================================================
   --  | Man page curs_getch.3x
   --  |=====================================================================
   --  Not implemented: mvgetch, mvwgetch

   --  #1A NAME="AFU_29"#2|
   function Get_Keystroke (Win : Window := Standard_Window)
                           return Real_Key_Code;
   --  AKA: wgetch()
   --  AKA: getch()
   --  Get a character from the keyboard and echo it - if enabled - to the
   --  window.
   --  If for any reason (i.e. a timeout) we could not get a character the
   --  returned keycode is Key_None.
   pragma Inline (Get_Keystroke);

   --  #1A NAME="AFU_30"#2|
   procedure Undo_Keystroke (Key : Real_Key_Code);
   --  AKA: ungetch()
   pragma Inline (Undo_Keystroke);

   --  #1A NAME="AFU_31"#2|
   function Has_Key (Key : Special_Key_Code) return Boolean;
   --  AKA: has_key()
   pragma Inline (Has_Key);

   --  |
   --  | Some helper functions
   --  |
   function Is_Function_Key (Key : Special_Key_Code) return Boolean;
   --  Return True if the Key is a function key (i.e. one of F0 .. F63)
   pragma Inline (Is_Function_Key);

   subtype Function_Key_Number is Integer range 0 .. 63;
   --  (n)curses allows for 64 function keys.

   function Function_Key (Key : Real_Key_Code) return Function_Key_Number;
   --  Return the number of the function key. If the code is not a
   --  function key, a CONSTRAINT_ERROR will be raised.
   pragma Inline (Function_Key);

   function Function_Key_Code (Key : Function_Key_Number) return Real_Key_Code;
   --  Return the key code for a given function-key number.
   pragma Inline (Function_Key_Code);

   --  |=====================================================================
   --  | Man page curs_attr.3x
   --  |=====================================================================
   --  | Not implemented attr_off,  wattr_off,
   --  |  attr_on, wattr_on, attr_set, wattr_set

   --  PAIR_NUMBER
   --  PAIR_NUMBER(c) is the same as c.Color

   --  #1A NAME="AFU_32"#2|
   procedure Standout (Win : Window  := Standard_Window;
                       On  : Boolean := True);
   --  AKA: wstandout()
   --  AKA: wstandend()

   --  #1A NAME="AFU_33"#2|
   procedure Switch_Character_Attribute
     (Win  : Window := Standard_Window;
      Attr : Character_Attribute_Set := Normal_Video;
      On   : Boolean := True); --  if False we switch Off.
   --  Switches those Attributes set to true in the list.
   --  AKA: wattron()
   --  AKA: wattroff()
   --  AKA: attron()
   --  AKA: attroff()

   --  #1A NAME="AFU_34"#2|
   procedure Set_Character_Attributes
     (Win   : Window := Standard_Window;
      Attr  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First);
   --  AKA: wattrset()
   --  AKA: attrset()
   pragma Inline (Set_Character_Attributes);

   --  #1A NAME="AFU_35"#2|
   function Get_Character_Attribute
     (Win : Window := Standard_Window) return Character_Attribute_Set;
   --  AKA: wattr_get()
   --  AKA: attr_get()

   --  #1A NAME="AFU_36"#2|
   function Get_Character_Attribute
     (Win : Window := Standard_Window) return Color_Pair;
   --  AKA: wattr_get()
   pragma Inline (Get_Character_Attribute);

   --  #1A NAME="AFU_37"#2|
   procedure Set_Color (Win  : Window := Standard_Window;
                        Pair : Color_Pair);
   --  AKA: wcolor_set()
   --  AKA: color_set()
   pragma Inline (Set_Color);

   --  #1A NAME="AFU_38"#2|
   procedure Change_Attributes
     (Win   : Window := Standard_Window;
      Count : Integer := -1;
      Attr  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First);
   --  AKA: wchgat()
   --  AKA: chgat()

   --  #1A NAME="AFU_39"#2|
   procedure Change_Attributes
     (Win    : Window := Standard_Window;
      Line   : Line_Position := Line_Position'First;
      Column : Column_Position := Column_Position'First;
      Count  : Integer := -1;
      Attr   : Character_Attribute_Set := Normal_Video;
      Color  : Color_Pair := Color_Pair'First);
   --  AKA: mvwchgat()
   --  AKA: mvchgat()
   pragma Inline (Change_Attributes);

   --  |=====================================================================
   --  | Man page curs_beep.3x
   --  |=====================================================================

   --  #1A NAME="AFU_40"#2|
   procedure Beep;
   --  AKA: beep()
   pragma Inline (Beep);

   --  #1A NAME="AFU_41"#2|
   procedure Flash_Screen;
   --  AKA: flash()
   pragma Inline (Flash_Screen);

   --  |=====================================================================
   --  | Man page curs_inopts.3x
   --  |=====================================================================

   --  | Not implemented : typeahead
   --
   --  #1A NAME="AFU_42"#2|
   procedure Set_Cbreak_Mode (SwitchOn : Boolean := True);
   --  AKA: cbreak()
   --  AKA: nocbreak()
   pragma Inline (Set_Cbreak_Mode);

   --  #1A NAME="AFU_43"#2|
   procedure Set_Raw_Mode (SwitchOn : Boolean := True);
   --  AKA: raw()
   --  AKA: noraw()
   pragma Inline (Set_Raw_Mode);

   --  #1A NAME="AFU_44"#2|
   procedure Set_Echo_Mode (SwitchOn : Boolean := True);
   --  AKA: echo()
   --  AKA: noecho()
   pragma Inline (Set_Echo_Mode);

   --  #1A NAME="AFU_45"#2|
   procedure Set_Meta_Mode (Win      : Window := Standard_Window;
                            SwitchOn : Boolean := True);
   --  AKA: meta()
   pragma Inline (Set_Meta_Mode);

   --  #1A NAME="AFU_46"#2|
   procedure Set_KeyPad_Mode (Win      : Window := Standard_Window;
                              SwitchOn : Boolean := True);
   --  AKA: keypad()
   pragma Inline (Set_KeyPad_Mode);

   function Get_KeyPad_Mode (Win : Window := Standard_Window)
                             return Boolean;
   --  This has no pendant in C. There you've to look into the WINDOWS
   --  structure to get the value. Bad practice, not repeated in Ada.

   type Half_Delay_Amount is range 1 .. 255;

   --  #1A NAME="AFU_47"#2|
   procedure Half_Delay (Amount : Half_Delay_Amount);
   --  AKA: halfdelay()
   pragma Inline (Half_Delay);

   --  #1A NAME="AFU_48"#2|
   procedure Set_Flush_On_Interrupt_Mode
     (Win  : Window := Standard_Window;
      Mode : Boolean := True);
   --  AKA: intrflush()
   pragma Inline (Set_Flush_On_Interrupt_Mode);

   --  #1A NAME="AFU_49"#2|
   procedure Set_Queue_Interrupt_Mode
     (Win   : Window := Standard_Window;
      Flush : Boolean := True);
   --  AKA: qiflush()
   --  AKA: noqiflush()
   pragma Inline (Set_Queue_Interrupt_Mode);

   --  #1A NAME="AFU_50"#2|
   procedure Set_NoDelay_Mode
     (Win  : Window := Standard_Window;
      Mode : Boolean := False);
   --  AKA: nodelay()
   pragma Inline (Set_NoDelay_Mode);

   type Timeout_Mode is (Blocking, Non_Blocking, Delayed);

   --  #1A NAME="AFU_51"#2|
   procedure Set_Timeout_Mode (Win    : Window := Standard_Window;
                               Mode   : Timeout_Mode;
                               Amount : Natural); --  in Milliseconds
   --  AKA: wtimeout()
   --  AKA: timeout()
   --  Instead of overloading the semantic of the sign of amount, we
   --  introduce the Timeout_Mode parameter. This should improve
   --  readability. For Blocking and Non_Blocking, the Amount is not
   --  evaluated.
   --  We do not inline this procedure.

   --  #1A NAME="AFU_52"#2|
   procedure Set_Escape_Timer_Mode
     (Win       : Window := Standard_Window;
      Timer_Off : Boolean := False);
   --  AKA: notimeout()
   pragma Inline (Set_Escape_Timer_Mode);

   --  |=====================================================================
   --  | Man page curs_outopts.3x
   --  |=====================================================================

   --  #1A NAME="AFU_53"#2|
   procedure Set_NL_Mode (SwitchOn : Boolean := True);
   --  AKA: nl()
   --  AKA: nonl()
   pragma Inline (Set_NL_Mode);

   --  #1A NAME="AFU_54"#2|
   procedure Clear_On_Next_Update
     (Win      : Window := Standard_Window;
      Do_Clear : Boolean := True);
   --  AKA: clearok()
   pragma Inline (Clear_On_Next_Update);

   --  #1A NAME="AFU_55"#2|
   procedure Use_Insert_Delete_Line
     (Win    : Window := Standard_Window;
      Do_Idl : Boolean := True);
   --  AKA: idlok()
   pragma Inline (Use_Insert_Delete_Line);

   --  #1A NAME="AFU_56"#2|
   procedure Use_Insert_Delete_Character
     (Win    : Window := Standard_Window;
      Do_Idc : Boolean := True);
   --  AKA: idcok()
   pragma Inline (Use_Insert_Delete_Character);

   --  #1A NAME="AFU_57"#2|
   procedure Leave_Cursor_After_Update
     (Win      : Window := Standard_Window;
      Do_Leave : Boolean := True);
   --  AKA: leaveok()
   pragma Inline (Leave_Cursor_After_Update);

   --  #1A NAME="AFU_58"#2|
   procedure Immediate_Update_Mode
     (Win  : Window := Standard_Window;
      Mode : Boolean := False);
   --  AKA: immedok()
   pragma Inline (Immediate_Update_Mode);

   --  #1A NAME="AFU_59"#2|
   procedure Allow_Scrolling
     (Win  : Window := Standard_Window;
      Mode : Boolean := False);
   --  AKA: scrollok()
   pragma Inline (Allow_Scrolling);

   function Scrolling_Allowed (Win : Window := Standard_Window) return Boolean;
   --  There is no such function in the C interface.
   pragma Inline (Scrolling_Allowed);

   --  #1A NAME="AFU_60"#2|
   procedure Set_Scroll_Region
     (Win         : Window := Standard_Window;
      Top_Line    : Line_Position;
      Bottom_Line : Line_Position);
   --  AKA: wsetscrreg()
   --  AKA: setscrreg()
   pragma Inline (Set_Scroll_Region);

   --  |=====================================================================
   --  | Man page curs_refresh.3x
   --  |=====================================================================

   --  #1A NAME="AFU_61"#2|
   procedure Update_Screen;
   --  AKA: doupdate()
   pragma Inline (Update_Screen);

   --  #1A NAME="AFU_62"#2|
   procedure Refresh (Win : Window := Standard_Window);
   --  AKA: wrefresh()
   --  There is an overloaded Refresh for Pads.
   --  The Inline pragma appears there
   --  AKA: refresh()

   --  #1A NAME="AFU_63"#2|
   procedure Refresh_Without_Update
     (Win : Window := Standard_Window);
   --  AKA: wnoutrefresh()
   --  There is an overloaded Refresh_Without_Update for Pads.
   --  The Inline pragma appears there

   --  #1A NAME="AFU_64"#2|
   procedure Redraw (Win : Window := Standard_Window);
   --  AKA: redrawwin()

   --  #1A NAME="AFU_65"#2|
   procedure Redraw (Win        : Window := Standard_Window;
                     Begin_Line : Line_Position;
                     Line_Count : Positive);
   --  AKA: wredrawln()
   pragma Inline (Redraw);

   --  |=====================================================================
   --  | Man page curs_clear.3x
   --  |=====================================================================

   --  #1A NAME="AFU_66"#2|
   procedure Erase (Win : Window := Standard_Window);
   --  AKA: werase()
   --  AKA: erase()
   pragma Inline (Erase);

   --  #1A NAME="AFU_67"#2|
   procedure Clear
     (Win : Window := Standard_Window);
   --  AKA: wclear()
   --  AKA: clear()
   pragma Inline (Clear);

   --  #1A NAME="AFU_68"#2|
   procedure Clear_To_End_Of_Screen
     (Win : Window := Standard_Window);
   --  AKA: wclrtobot()
   --  AKA: clrtobot()
   pragma Inline (Clear_To_End_Of_Screen);

   --  #1A NAME="AFU_69"#2|
   procedure Clear_To_End_Of_Line
     (Win : Window := Standard_Window);
   --  AKA: wclrtoeol()
   --  AKA: clrtoeol()
   pragma Inline (Clear_To_End_Of_Line);

   --  |=====================================================================
   --  | Man page curs_bkgd.3x
   --  |=====================================================================

   --  #1A NAME="AFU_70"#2|
   --  TODO: we could have Set_Background(Window; Character_Attribute_Set)
   --  because in C it is common to see bkgdset(A_BOLD) or
   --  bkgdset(COLOR_PAIR(n))
   procedure Set_Background
     (Win : Window := Standard_Window;
      Ch  : Attributed_Character);
   --  AKA: wbkgdset()
   --  AKA: bkgdset()
   pragma Inline (Set_Background);

   --  #1A NAME="AFU_71"#2|
   procedure Change_Background
     (Win : Window := Standard_Window;
      Ch  : Attributed_Character);
   --  AKA: wbkgd()
   --  AKA: bkgd()
   pragma Inline (Change_Background);

   --  #1A NAME="AFU_72"#2|
   --  ? wbkgdget is not listed in curs_bkgd, getbkgd is thpough.
   function Get_Background (Win : Window := Standard_Window)
     return Attributed_Character;
   --  AKA: wbkgdget()
   --  AKA: bkgdget()
   pragma Inline (Get_Background);

   --  |=====================================================================
   --  | Man page curs_touch.3x
   --  |=====================================================================

   --  #1A NAME="AFU_73"#2|
   procedure Untouch (Win : Window := Standard_Window);
   --  AKA: untouchwin()
   pragma Inline (Untouch);

   --  #1A NAME="AFU_74"#2|
   procedure Touch (Win : Window := Standard_Window);
   --  AKA: touchwin()

   --  #1A NAME="AFU_75"#2|
   procedure Touch (Win   : Window := Standard_Window;
                    Start : Line_Position;
                    Count : Positive);
   --  AKA: touchline()
   pragma Inline (Touch);

   --  #1A NAME="AFU_76"#2|
   procedure Change_Lines_Status (Win   : Window := Standard_Window;
                                  Start : Line_Position;
                                  Count : Positive;
                                  State : Boolean);
   --  AKA: wtouchln()
   pragma Inline (Change_Lines_Status);

   --  #1A NAME="AFU_77"#2|
   function Is_Touched (Win  : Window := Standard_Window;
                        Line : Line_Position) return Boolean;
   --  AKA: is_linetouched()

   --  #1A NAME="AFU_78"#2|
   function Is_Touched (Win : Window := Standard_Window) return Boolean;
   --  AKA: is_wintouched()
   pragma Inline (Is_Touched);

   --  |=====================================================================
   --  | Man page curs_overlay.3x
   --  |=====================================================================

   --  #1A NAME="AFU_79"#2|
   procedure Copy
     (Source_Window            : Window;
      Destination_Window       : Window;
      Source_Top_Row           : Line_Position;
      Source_Left_Column       : Column_Position;
      Destination_Top_Row      : Line_Position;
      Destination_Left_Column  : Column_Position;
      Destination_Bottom_Row   : Line_Position;
      Destination_Right_Column : Column_Position;
      Non_Destructive_Mode     : Boolean := True);
   --  AKA: copywin()
   pragma Inline (Copy);

   --  #1A NAME="AFU_80"#2|
   procedure Overwrite (Source_Window      : Window;
                        Destination_Window : Window);
   --  AKA: overwrite()
   pragma Inline (Overwrite);

   --  #1A NAME="AFU_81"#2|
   procedure Overlay (Source_Window      : Window;
                      Destination_Window : Window);
   --  AKA: overlay()
   pragma Inline (Overlay);

   --  |=====================================================================
   --  | Man page curs_deleteln.3x
   --  |=====================================================================

   --  #1A NAME="AFU_82"#2|
   procedure Insert_Delete_Lines
     (Win   : Window  := Standard_Window;
      Lines : Integer := 1); --  default is to insert one line above
   --  AKA: winsdelln()
   --  AKA: insdelln()
   pragma Inline (Insert_Delete_Lines);

   --  #1A NAME="AFU_83"#2|
   procedure Delete_Line (Win : Window := Standard_Window);
   --  AKA: wdeleteln()
   --  AKA: deleteln()
   pragma Inline (Delete_Line);

   --  #1A NAME="AFU_84"#2|
   procedure Insert_Line (Win : Window := Standard_Window);
   --  AKA: winsertln()
   --  AKA: insertln()
   pragma Inline (Insert_Line);

   --  |=====================================================================
   --  | Man page curs_getyx.3x
   --  |=====================================================================

   --  #1A NAME="AFU_85"#2|
   procedure Get_Size
     (Win               : Window := Standard_Window;
      Number_Of_Lines   : out Line_Count;
      Number_Of_Columns : out Column_Count);
   --  AKA: getmaxyx()
   pragma Inline (Get_Size);

   --  #1A NAME="AFU_86"#2|
   procedure Get_Window_Position
     (Win             : Window := Standard_Window;
      Top_Left_Line   : out Line_Position;
      Top_Left_Column : out Column_Position);
   --  AKA: getbegyx()
   pragma Inline (Get_Window_Position);

   --  #1A NAME="AFU_87"#2|
   procedure Get_Cursor_Position
     (Win    : Window := Standard_Window;
      Line   : out Line_Position;
      Column : out Column_Position);
   --  AKA: getyx()
   pragma Inline (Get_Cursor_Position);

   --  #1A NAME="AFU_88"#2|
   procedure Get_Origin_Relative_To_Parent
     (Win                : Window;
      Top_Left_Line      : out Line_Position;
      Top_Left_Column    : out Column_Position;
      Is_Not_A_Subwindow : out Boolean);
   --  AKA: getparyx()
   --  Instead of placing -1 in the coordinates as return, we use a Boolean
   --  to return the info that the window has no parent.
   pragma Inline (Get_Origin_Relative_To_Parent);

   --  |=====================================================================
   --  | Man page curs_pad.3x
   --  |=====================================================================

   --  #1A NAME="AFU_89"#2|
   function New_Pad (Lines   : Line_Count;
                     Columns : Column_Count) return Window;
   --  AKA: newpad()
   pragma Inline (New_Pad);

   --  #1A NAME="AFU_90"#2|
   function Sub_Pad
     (Pad                   : Window;
      Number_Of_Lines       : Line_Count;
      Number_Of_Columns     : Column_Count;
      First_Line_Position   : Line_Position;
      First_Column_Position : Column_Position) return Window;
   --  AKA: subpad()
   pragma Inline (Sub_Pad);

   --  #1A NAME="AFU_91"#2|
   procedure Refresh
     (Pad                      : Window;
      Source_Top_Row           : Line_Position;
      Source_Left_Column       : Column_Position;
      Destination_Top_Row      : Line_Position;
      Destination_Left_Column  : Column_Position;
      Destination_Bottom_Row   : Line_Position;
      Destination_Right_Column : Column_Position);
   --  AKA: prefresh()
   pragma Inline (Refresh);

   --  #1A NAME="AFU_92"#2|
   procedure Refresh_Without_Update
     (Pad                      : Window;
      Source_Top_Row           : Line_Position;
      Source_Left_Column       : Column_Position;
      Destination_Top_Row      : Line_Position;
      Destination_Left_Column  : Column_Position;
      Destination_Bottom_Row   : Line_Position;
      Destination_Right_Column : Column_Position);
   --  AKA: pnoutrefresh()
   pragma Inline (Refresh_Without_Update);

   --  #1A NAME="AFU_93"#2|
   procedure Add_Character_To_Pad_And_Echo_It
     (Pad : Window;
      Ch  : Attributed_Character);
   --  AKA: pechochar()

   procedure Add_Character_To_Pad_And_Echo_It
     (Pad : Window;
      Ch  : Character);
   pragma Inline (Add_Character_To_Pad_And_Echo_It);

   --  |=====================================================================
   --  | Man page curs_scroll.3x
   --  |=====================================================================

   --  #1A NAME="AFU_94"#2|
   procedure Scroll (Win    : Window  := Standard_Window;
                     Amount : Integer := 1);
   --  AKA: wscrl()
   --  AKA: scroll()
   --  AKA: scrl()
   pragma Inline (Scroll);

   --  |=====================================================================
   --  | Man page curs_delch.3x
   --  |=====================================================================

   --  #1A NAME="AFU_95"#2|
   procedure Delete_Character (Win : Window := Standard_Window);
   --  AKA: wdelch()
   --  AKA: delch()

   --  #1A NAME="AFU_96"#2|
   procedure Delete_Character
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position);
   --  AKA: mvwdelch()
   --  AKA: mvdelch()
   pragma Inline (Delete_Character);

   --  |=====================================================================
   --  | Man page curs_inch.3x
   --  |=====================================================================

   --  #1A NAME="AFU_97"#2|
   function Peek (Win : Window := Standard_Window)
     return Attributed_Character;
   --  AKA: inch()
   --  AKA: winch()

   --  #1A NAME="AFU_98"#2|
   function Peek
     (Win    : Window := Standard_Window;
      Line   : Line_Position;
      Column : Column_Position) return Attributed_Character;
   --  AKA: mvwinch()
   --  AKA: mvinch()
   --  More Peek's follow, pragma Inline appears later.

   --  |=====================================================================
   --  | Man page curs_insch.3x
   --  |=====================================================================

   --  #1A NAME="AFU_99"#2|
   procedure Insert (Win : Window := Standard_Window;
                     Ch  : Attributed_Character);
   --  AKA: winsch()
   --  AKA: insch()

   --  #1A NAME="AFU_100"#2|
   procedure Insert (Win    : Window := Standard_Window;
                     Line   : Line_Position;
                     Column : Column_Position;
                     Ch     : Attributed_Character);
   --  AKA: mvwinsch()
   --  AKA: mvinsch()

   --  |=====================================================================
   --  | Man page curs_insstr.3x
   --  |=====================================================================

   --  #1A NAME="AFU_101"#2|
   procedure Insert (Win : Window := Standard_Window;
                     Str : String;
                     Len : Integer := -1);
   --  AKA: winsnstr()
   --  AKA: winsstr()
   --  AKA: insnstr()
   --  AKA: insstr()

   --  #1A NAME="AFU_102"#2|
   procedure Insert (Win    : Window := Standard_Window;
                     Line   : Line_Position;
                     Column : Column_Position;
                     Str    : String;
                     Len    : Integer := -1);
   --  AKA: mvwinsnstr()
   --  AKA: mvwinsstr()
   --  AKA: mvinsnstr()
   --  AKA: mvinsstr()
   pragma Inline (Insert);

   --  |=====================================================================
   --  | Man page curs_instr.3x
   --  |=====================================================================

   --  #1A NAME="AFU_103"#2|
   procedure Peek (Win : Window := Standard_Window;
                   Str : out String;
                   Len : Integer := -1);
   --  AKA: winnstr()
   --  AKA: winstr()
   --  AKA: innstr()
   --  AKA: instr()

   --  #1A NAME="AFU_104"#2|
   procedure Peek (Win    : Window := Standard_Window;
                   Line   : Line_Position;
                   Column : Column_Position;
                   Str    : out String;
                   Len    : Integer := -1);
   --  AKA: mvwinnstr()
   --  AKA: mvwinstr()
   --  AKA: mvinnstr()
   --  AKA: mvinstr()

   --  |=====================================================================
   --  | Man page curs_inchstr.3x
   --  |=====================================================================

   --  #1A NAME="AFU_105"#2|
   procedure Peek (Win : Window := Standard_Window;
                   Str : out Attributed_String;
                   Len : Integer := -1);
   --  AKA: winchnstr()
   --  AKA: winchstr()
   --  AKA: inchnstr()
   --  AKA: inchstr()

   --  #1A NAME="AFU_106"#2|
   procedure Peek (Win    : Window := Standard_Window;
                   Line   : Line_Position;
                   Column : Column_Position;
                   Str    : out Attributed_String;
                   Len    : Integer := -1);
   --  AKA: mvwinchnstr()
   --  AKA: mvwinchstr()
   --  AKA: mvinchnstr()
   --  AKA: mvinchstr()
   --  We do not inline the Peek procedures

   --  |=====================================================================
   --  | Man page curs_getstr.3x
   --  |=====================================================================

   --  #1A NAME="AFU_107"#2|
   procedure Get (Win : Window := Standard_Window;
                  Str : out String;
                  Len : Integer := -1);
   --  AKA: wgetnstr()
   --  AKA: wgetstr()
   --  AKA: getnstr()
   --  AKA: getstr()
   --  actually getstr is not supported because that results in buffer
   --  overflows.

   --  #1A NAME="AFU_108"#2|
   procedure Get (Win    : Window := Standard_Window;
                  Line   : Line_Position;
                  Column : Column_Position;
                  Str    : out String;
                  Len    : Integer := -1);
   --  AKA: mvwgetnstr()
   --  AKA: mvwgetstr()
   --  AKA: mvgetnstr()
   --  AKA: mvgetstr()
   --  Get is not inlined

   --  |=====================================================================
   --  | Man page curs_slk.3x
   --  |=====================================================================

   --  Not Implemented: slk_attr_on, slk_attr_off, slk_attr_set

   type Soft_Label_Key_Format is (Three_Two_Three,
                                  Four_Four,
                                  PC_Style,              --  ncurses specific
                                  PC_Style_With_Index);  --  "
   type Label_Number is new Positive range 1 .. 12;
   type Label_Justification is (Left, Centered, Right);

   --  #1A NAME="AFU_109"#2|
   procedure Init_Soft_Label_Keys
     (Format : Soft_Label_Key_Format := Three_Two_Three);
   --  AKA: slk_init()
   pragma Inline (Init_Soft_Label_Keys);

   --  #1A NAME="AFU_110"#2|
   procedure Set_Soft_Label_Key (Label : Label_Number;
                                 Text  : String;
                                 Fmt   : Label_Justification := Left);
   --  AKA: slk_set()
   --  We do not inline this procedure

   --  #1A NAME="AFU_111"#2|
   procedure Refresh_Soft_Label_Keys;
   --  AKA: slk_refresh()
   pragma Inline (Refresh_Soft_Label_Keys);

   --  #1A NAME="AFU_112"#2|
   procedure Refresh_Soft_Label_Keys_Without_Update;
   --  AKA: slk_noutrefresh()
   pragma Inline (Refresh_Soft_Label_Keys_Without_Update);

   --  #1A NAME="AFU_113"#2|
   procedure Get_Soft_Label_Key (Label : Label_Number;
                                 Text  : out String);
   --  AKA: slk_label()

   --  #1A NAME="AFU_114"#2|
   function Get_Soft_Label_Key (Label : Label_Number) return String;
   --  AKA: slk_label()
   --  Same as function
   pragma Inline (Get_Soft_Label_Key);

   --  #1A NAME="AFU_115"#2|
   procedure Clear_Soft_Label_Keys;
   --  AKA: slk_clear()
   pragma Inline (Clear_Soft_Label_Keys);

   --  #1A NAME="AFU_116"#2|
   procedure Restore_Soft_Label_Keys;
   --  AKA: slk_restore()
   pragma Inline (Restore_Soft_Label_Keys);

   --  #1A NAME="AFU_117"#2|
   procedure Touch_Soft_Label_Keys;
   --  AKA: slk_touch()
   pragma Inline (Touch_Soft_Label_Keys);

   --  #1A NAME="AFU_118"#2|
   procedure Switch_Soft_Label_Key_Attributes
     (Attr : Character_Attribute_Set;
      On   : Boolean := True);
   --  AKA: slk_attron()
   --  AKA: slk_attroff()
   pragma Inline (Switch_Soft_Label_Key_Attributes);

   --  #1A NAME="AFU_119"#2|
   procedure Set_Soft_Label_Key_Attributes
     (Attr  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First);
   --  AKA: slk_attrset()
   pragma Inline (Set_Soft_Label_Key_Attributes);

   --  #1A NAME="AFU_120"#2|
   function Get_Soft_Label_Key_Attributes return Character_Attribute_Set;
   --  AKA: slk_attr()

   --  #1A NAME="AFU_121"#2|
   function Get_Soft_Label_Key_Attributes return Color_Pair;
   --  AKA: slk_attr()
   pragma Inline (Get_Soft_Label_Key_Attributes);

   --  #1A NAME="AFU_122"#2|
   procedure Set_Soft_Label_Key_Color (Pair : Color_Pair);
   --  AKA: slk_color()
   pragma Inline (Set_Soft_Label_Key_Color);

   --  |=====================================================================
   --  | Man page keybound.3x
   --  |=====================================================================
   --  Not Implemented: keybound

   --  |=====================================================================
   --  | Man page keyok.3x
   --  |=====================================================================

   --  #1A NAME="AFU_123"#2|
   procedure Enable_Key (Key    : Special_Key_Code;
                         Enable : Boolean := True);
   --  AKA: keyok()
   pragma Inline (Enable_Key);

   --  |=====================================================================
   --  | Man page define_key.3x
   --  |=====================================================================

   --  #1A NAME="AFU_124"#2|
   procedure Define_Key (Definition : String;
                         Key        : Special_Key_Code);
   --  AKA: define_key()
   pragma Inline (Define_Key);

   --  |=====================================================================
   --  | Man page curs_util.3x
   --  |=====================================================================

   --  | Not implemented : filter, use_env
   --  | putwin, getwin are in the child package PutWin
   --

   --  #1A NAME="AFU_125"#2|
   procedure Key_Name (Key  : Real_Key_Code;
                       Name : out String);
   --  AKA: keyname()
   --  The external name for a real keystroke.

   --  #1A NAME="AFU_126"#2|
   function Key_Name (Key  : Real_Key_Code) return String;
   --  AKA: keyname()
   --  Same as function
   --  We do not inline this routine

   --  #1A NAME="AFU_127"#2|
   procedure Un_Control (Ch  : Attributed_Character;
                         Str : out String);
   --  AKA: unctrl()

   --  #1A NAME="AFU_128"#2|
   function Un_Control (Ch  : Attributed_Character) return String;
   --  AKA: unctrl()
   --  Same as function
   pragma Inline (Un_Control);

   --  #1A NAME="AFU_129"#2|
   procedure Delay_Output (Msecs : Natural);
   --  AKA: delay_output()
   pragma Inline (Delay_Output);

   --  #1A NAME="AFU_130"#2|
   procedure Flush_Input;
   --  AKA: flushinp()
   pragma Inline (Flush_Input);

   --  |=====================================================================
   --  | Man page curs_termattrs.3x
   --  |=====================================================================

   --  #1A NAME="AFU_131"#2|
   function Baudrate return Natural;
   --  AKA: baudrate()
   pragma Inline (Baudrate);

   --  #1A NAME="AFU_132"#2|
   function Erase_Character return Character;
   --  AKA: erasechar()
   pragma Inline (Erase_Character);

   --  #1A NAME="AFU_133"#2|
   function Kill_Character return Character;
   --  AKA: killchar()
   pragma Inline (Kill_Character);

   --  #1A NAME="AFU_134"#2|
   function Has_Insert_Character return Boolean;
   --  AKA: has_ic()
   pragma Inline (Has_Insert_Character);

   --  #1A NAME="AFU_135"#2|
   function Has_Insert_Line return Boolean;
   --  AKA: has_il()
   pragma Inline (Has_Insert_Line);

   --  #1A NAME="AFU_136"#2|
   function Supported_Attributes return Character_Attribute_Set;
   --  AKA: termattrs()
   pragma Inline (Supported_Attributes);

   --  #1A NAME="AFU_137"#2|
   procedure Long_Name (Name : out String);
   --  AKA: longname()

   --  #1A NAME="AFU_138"#2|
   function Long_Name return String;
   --  AKA: longname()
   --  Same as function
   pragma Inline (Long_Name);

   --  #1A NAME="AFU_139"#2|
   procedure Terminal_Name (Name : out String);
   --  AKA: termname()

   --  #1A NAME="AFU_140"#2|
   function Terminal_Name return String;
   --  AKA: termname()
   --  Same as function
   pragma Inline (Terminal_Name);

   --  |=====================================================================
   --  | Man page curs_color.3x
   --  |=====================================================================

   --  COLOR_PAIR
   --  COLOR_PAIR(n) in C is the same as
   --  Attributed_Character(Ch => Nul, Color => n, Attr => Normal_Video)
   --  In C you often see something like c = c | COLOR_PAIR(n);
   --  This is equivalent to c.Color := n;

   --  #1A NAME="AFU_141"#2|
   procedure Start_Color;
   --  AKA: start_color()
   pragma Import (C, Start_Color, "start_color");

   --  #1A NAME="AFU_142"#2|
   procedure Init_Pair (Pair : Redefinable_Color_Pair;
                        Fore : Color_Number;
                        Back : Color_Number);
   --  AKA: init_pair()
   pragma Inline (Init_Pair);

   --  #1A NAME="AFU_143"#2|
   procedure Pair_Content (Pair : Color_Pair;
                           Fore : out Color_Number;
                           Back : out Color_Number);
   --  AKA: pair_content()
   pragma Inline (Pair_Content);

   --  #1A NAME="AFU_144"#2|
   function Has_Colors return Boolean;
   --  AKA: has_colors()
   pragma Inline (Has_Colors);

   --  #1A NAME="AFU_145"#2|
   procedure Init_Color (Color : Color_Number;
                         Red   : RGB_Value;
                         Green : RGB_Value;
                         Blue  : RGB_Value);
   --  AKA: init_color()
   pragma Inline (Init_Color);

   --  #1A NAME="AFU_146"#2|
   function Can_Change_Color return Boolean;
   --  AKA: can_change_color()
   pragma Inline (Can_Change_Color);

   --  #1A NAME="AFU_147"#2|
   procedure Color_Content (Color : Color_Number;
                            Red   : out RGB_Value;
                            Green : out RGB_Value;
                            Blue  : out RGB_Value);
   --  AKA: color_content()
   pragma Inline (Color_Content);

   --  |=====================================================================
   --  | Man page curs_kernel.3x
   --  |=====================================================================
   --  | Not implemented: getsyx, setsyx
   --
   type Curses_Mode is (Curses, Shell);

   --  #1A NAME="AFU_148"#2|
   procedure Save_Curses_Mode (Mode : Curses_Mode);
   --  AKA: def_prog_mode()
   --  AKA: def_shell_mode()
   pragma Inline (Save_Curses_Mode);

   --  #1A NAME="AFU_149"#2|
   procedure Reset_Curses_Mode (Mode : Curses_Mode);
   --  AKA: reset_prog_mode()
   --  AKA: reset_shell_mode()
   pragma Inline (Reset_Curses_Mode);

   --  #1A NAME="AFU_150"#2|
   procedure Save_Terminal_State;
   --  AKA: savetty()
   pragma Inline (Save_Terminal_State);

   --  #1A NAME="AFU_151"#2|
   procedure Reset_Terminal_State;
   --  AKA: resetty();
   pragma Inline (Reset_Terminal_State);

   type Stdscr_Init_Proc is access
      function (Win     : Window;
                Columns : Column_Count) return Integer;
   pragma Convention (C, Stdscr_Init_Proc);
   --  N.B.: the return value is actually ignored, but it seems to be
   --        a good practice to return 0 if you think all went fine
   --        and -1 otherwise.

   --  #1A NAME="AFU_152"#2|
   procedure Rip_Off_Lines (Lines : Integer;
                            Proc  : Stdscr_Init_Proc);
   --  AKA: ripoffline()
   --  N.B.: to be more precise, this uses a ncurses specific enhancement of
   --        ripoffline(), in which the Lines argument absolute value is the
   --        number of lines to be ripped of. The official ripoffline() only
   --        uses the sign of Lines to remove a single line from bottom or top.
   pragma Inline (Rip_Off_Lines);

   type Cursor_Visibility is (Invisible, Normal, Very_Visible);

   --  #1A NAME="AFU_153"#2|
   procedure Set_Cursor_Visibility (Visibility : in out Cursor_Visibility);
   --  AKA: curs_set()
   pragma Inline (Set_Cursor_Visibility);

   --  #1A NAME="AFU_154"#2|
   procedure Nap_Milli_Seconds (Ms : Natural);
   --  AKA: napms()
   pragma Inline (Nap_Milli_Seconds);

   --  |=====================================================================
   --  | Some useful helpers.
   --  |=====================================================================
   type Transform_Direction is (From_Screen, To_Screen);
   procedure Transform_Coordinates
     (W      : Window := Standard_Window;
      Line   : in out Line_Position;
      Column : in out Column_Position;
      Dir    : Transform_Direction := From_Screen);
   --  This procedure transforms screen coordinates into coordinates relative
   --  to the window and vice versa, depending on the Dir parameter.
   --  Screen coordinates are the position information for the physical device.
   --  An Curses_Exception will be raised if Line and Column are not in the
   --  Window or if you pass the Null_Window as argument.
   --  We do not inline this procedure

   --  |=====================================================================
   --  | Man page default_colors.3x
   --  |=====================================================================

   Default_Color : constant Color_Number := -1;

   --  #1A NAME="AFU_155"#2|
   procedure Use_Default_Colors;
   --  AKA: use_default_colors()
   pragma Inline (Use_Default_Colors);

   --  #1A NAME="AFU_156"#2|
   procedure Assume_Default_Colors (Fore : Color_Number := Default_Color;
                                    Back : Color_Number := Default_Color);
   --  AKA: assume_default_colors()
   pragma Inline (Assume_Default_Colors);

   --  |=====================================================================
   --  | Man page curs_extend.3x
   --  |=====================================================================

   --  #1A NAME="AFU_157"#2|
   function Curses_Version return String;
   --  AKA: curses_version()

   --  #1A NAME="AFU_158"#2|
   --  The returnvalue is the previous setting of the flag
   function Use_Extended_Names (Enable : Boolean) return Boolean;
   --  AKA: use_extended_names()

   --  |=====================================================================
   --  | Man page curs_trace.3x
   --  |=====================================================================

   --  #1A NAME="AFU_159"#2|
   procedure Curses_Free_All;
   --  AKA: _nc_freeall()

   --  |=====================================================================
   --  | Man page curs_scr_dump.3x
   --  |=====================================================================

   --  #1A NAME="AFU_160"#2|
   procedure Screen_Dump_To_File (Filename : String);
   --  AKA: scr_dump()

   --  #1A NAME="AFU_161"#2|
   procedure Screen_Restore_From_File (Filename : String);
   --  AKA: scr_restore()

   --  #1A NAME="AFU_162"#2|
   procedure Screen_Init_From_File (Filename : String);
   --  AKA: scr_init()

   --  #1A NAME="AFU_163"#2|
   procedure Screen_Set_File (Filename : String);
   --  AKA: scr_set()

   --  |=====================================================================
   --  | Man page curs_print.3x
   --  |=====================================================================
   --  Not implemented: mcprint

   --  |=====================================================================
   --  | Man page curs_printw.3x
   --  |=====================================================================
   --  Not implemented: printw,  wprintw, mvprintw, mvwprintw, vwprintw,
   --                   vw_printw
   --  Please use the Ada style Text_IO child packages for formatted
   --  printing. It does not make a lot of sense to map the printf style
   --  C functions to Ada.

   --  |=====================================================================
   --  | Man page curs_scanw.3x
   --  |=====================================================================
   --  Not implemented: scanw, wscanw, mvscanw, mvwscanw, vwscanw, vw_scanw

   --  |=====================================================================
   --  | Man page resizeterm.3x
   --  |=====================================================================
   --  Not Implemented: resizeterm

   --  |=====================================================================
   --  | Man page wresize.3x
   --  |=====================================================================

   --  #1A NAME="AFU_164"#2|
   procedure Resize (Win               : Window := Standard_Window;
                     Number_Of_Lines   : Line_Count;
                     Number_Of_Columns : Column_Count);
   --  AKA: wresize()

private
   type Window is new System.Storage_Elements.Integer_Address;
   Null_Window : constant Window := 0;

   --  The next constants are generated and may be different on your
   --  architecture.
   --

   Sizeof_Bool : constant := Curses_Constants.Sizeof_Bool;

   type Curses_Bool is mod 2 ** Sizeof_Bool;

   Curses_Bool_False : constant Curses_Bool := 0;

end Terminal_Interface.Curses;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-integer_io__ads.htm0000644000175100001440000002033412340214310027332 0ustar tomusers terminal_interface-curses-text_io-integer_io.ads

File : terminal_interface-curses-text_io-integer_io.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Text_IO.Integer_IO               --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
generic
   type Num is range <>;

package Terminal_Interface.Curses.Text_IO.Integer_IO is

   Default_Width : Field := Num'Width;
   Default_Base  : Number_Base := 10;

   procedure Put
     (Win   : Window;
      Item  : Num;
      Width : Field := Default_Width;
      Base  : Number_Base := Default_Base);

   procedure Put
     (Item  : Num;
      Width : Field := Default_Width;
      Base  : Number_Base := Default_Base);

private
   pragma Inline (Put);

end Terminal_Interface.Curses.Text_IO.Integer_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-alphanumeric__ads.htm0000644000175100001440000001626112340214310031642 0ustar tomusers terminal_interface-curses-forms-field_types-alphanumeric.ads

File : terminal_interface-curses-forms-field_types-alphanumeric.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--          Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric        --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric is
   pragma Preelaborate
     (Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric);

   type AlphaNumeric_Field is new Field_Type
     with record
        Minimum_Field_Width : Natural := 0;
     end record;

   procedure Set_Field_Type (Fld : Field;
                             Typ : AlphaNumeric_Field);
   pragma Inline (Set_Field_Type);

end Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric;
ncurses-6.0-20160213/doc/html/ada/table.html0000644000175100001440000016102612561447144016705 0ustar tomusers Correspondence between ncurses C and Ada functions

Correspondence between ncurses C and Ada functions

Sorted by C function name

C nameAda nameman page
_nc_freeall()Curses_Free_Allcurs_trace.3x
_tracef()Trace_Putcurs_trace.3x
assume_default_colors()Assume_Default_Colorsdefault_colors.3x
baudrate()Baudratecurs_termattrs.3x
beep()Beepcurs_beep.3x
bottom_panel()Bottompanel.3x
box()Boxcurs_border.3x
can_change_color()Can_Change_Colorcurs_color.3x
cbreak()Set_Cbreak_Modecurs_inopts.3x
clearok()Clear_On_Next_Updatecurs_outopts.3x
color_content()Color_Contentcurs_color.3x
copywin()Copycurs_overlay.3x
current_field()Currentform_page.3x
current_item()Currentmitem_current.3x
curs_set()Set_Cursor_Visibilitycurs_kernel.3x
curscrCurrent_Windowcurs_initscr.3x
curses_version()Curses_Versioncurs_extend.3x
data_ahead()Data_Aheadform_data.3x
data_behind()Data_Behindform_data.3x
def_prog_mode()Save_Curses_Modecurs_kernel.3x
define_key()Define_Keydefine_key.3x
del_panel()Deletepanel.3x
delay_output()Delay_Outputcurs_util.3x
delwin()Deletecurs_window.3x
derwin()Derived_Windowcurs_window.3x
doupdate()Update_Screencurs_refresh.3x
dup_field()Duplicateform_field_new.3x
dupwin()Duplicatecurs_window.3x
dynamic_field_info()Dynamic_Infoform_field_info.3x
echo()Set_Echo_Modecurs_inopts.3x
endwin()End_Windowscurs_initscr.3x
erasechar()Erase_Charactercurs_termattrs.3x
field_back()Backgroundform_field_attributes.3x
field_back()Backgroundform_field_attributes.3x
field_buffer()Get_Bufferform_field_buffer.3x
field_count()Field_Countform_field.3x
field_fore()Foregroundform_field_attributes.3x
field_fore()Foregroundform_field_attributes.3x
field_index()Get_Indexform_page.3x
field_info()Infoform_field_info.3x
field_init()Get_Field_Init_Hookform_hook.3x
field_just()Get_Justificationform_field_just.3x
field_opts()Get_Optionsform_field_opts.3x
field_opts()Get_Optionsform_field_opts.3x
field_opts_on()Switch_Optionsform_field_opts.3x
field_pad()Pad_Characterform_field_attributes.3x
field_status()Changedform_field_buffer.3x
field_term()Get_Field_Term_Hookform_hook.3x
field_type()Get_Typeform_field_validation.3x
field_userptrGet_User_Dataform_field_userptr.3x
field_userptrGet_User_Dataform_field_userptr.3x
flash()Flash_Screencurs_beep.3x
flushinp()Flush_Inputcurs_util.3x
form_driver()Driverform_driver.3x
form_fields()Fieldsform_field.3x
form_init()Get_Form_Init_Hookform_hook.3x
form_opts()Get_Optionsform_opts.3x
form_opts()Get_Optionsform_opts.3x
form_opts_on()Switch_Optionsform_opts.3x
form_page()Pageform_page.3x
form_sub()Get_Sub_Windowform_win.3x
form_term()Get_Form_Term_Hookform_hook.3x
form_userptrGet_User_Dataform_userptr.3x
form_userptrGet_User_Dataform_userptr.3x
form_win()Get_Windowform_win.3x
free_field()Deleteform_field_new.3x
free_form()Deleteform_new.3x
free_item()Deletemitem_new.3x
free_menu()Deletemenu_new.3x
getbegyx()Get_Window_Positioncurs_getyx.3x
getmaxyx()Get_Sizecurs_getyx.3x
getmouse()Get_Mousecurs_mouse.3x
getparyx()Get_Origin_Relative_To_Parentcurs_getyx.3x
getyx()Get_Cursor_Positioncurs_getyx.3x
halfdelay()Half_Delaycurs_inopts.3x
has_colors()Has_Colorscurs_color.3x
has_ic()Has_Insert_Charactercurs_termattrs.3x
has_il()Has_Insert_Linecurs_termattrs.3x
has_key()Has_Keycurs_getch.3x
hide_panel()Hidepanel.3x
idcok()Use_Insert_Delete_Charactercurs_outopts.3x
idlok()Use_Insert_Delete_Linecurs_outopts.3x
immedok()Immediate_Update_Modecurs_outopts.3x
init_color()Init_Colorcurs_color.3x
init_pair()Init_Paircurs_color.3x
initscr()Init_Screencurs_initscr.3x
initscr()Init_Windowscurs_initscr.3x
intrflush()Set_Flush_On_Interrupt_Modecurs_inopts.3x
is_linetouched()Is_Touchedcurs_touch.3x
is_wintouched()Is_Touchedcurs_touch.3x
isendwin()Is_End_Windowcurs_initscr.3x
item_count()Item_Countmenu_items.3x
item_description();Descriptionmitem_name.3x
item_index()Get_Indexmitem_current.3x
item_init()Get_Item_Init_Hookmenu_hook.3x
item_name()Namemitem_name.3x
item_opts()Get_Optionsmitem_opts.3x
item_opts()Get_Optionsmitem_opts.3x
item_opts_on()Switch_Optionsmitem_opts.3x
item_term()Get_Item_Term_Hookmenu_hook.3x
item_userptrGet_User_Datamitem_userptr.3x
item_userptrGet_User_Datamitem_userptr.3x
item_value()Valuemitem_value.3x
item_visible()Visiblemitem_visible.3x
keyname()Key_Namecurs_util.3x
keyname()Key_Namecurs_util.3x
keyok()Enable_Keykeyok.3x
keypad()Set_KeyPad_Modecurs_inopts.3x
killchar()Kill_Charactercurs_termattrs.3x
leaveok()Leave_Cursor_After_Updatecurs_outopts.3x
link_field()Linkform_field_new.3x
longname()Long_Namecurs_termattrs.3x
longname()Long_Namecurs_termattrs.3x
menu_back()Backgroundmenu_attributes.3x
menu_back()Backgroundmenu_attributes.3x
menu_driver()Drivermenu_driver.3x
menu_fore()Foregroundmenu_attributes.3x
menu_fore()Foregroundmenu_attributes.3x
menu_format()Formatmenu_format.3x
menu_grey()Greymenu_attributes.3x
menu_grey()Greymenu_attributes.3x
menu_init()Get_Menu_Init_Hookmenu_hook.3x
menu_items()Itemsmenu_items.3x
menu_mark()Markmenu_mark.3x
menu_opts()Get_Optionsmenu_opts.3x
menu_opts()Get_Optionsmenu_opts.3x
menu_opts_on()Switch_Optionsmenu_opts.3x
menu_pad()Pad_Charactermenu_attributes.3x
menu_pattern()Patternmenu_pattern.3x
menu_requestname.3xmenu_driver.3x
menu_spacing()Spacingmenu_spacing.3x
menu_sub()Get_Sub_Windowmenu_win.3x
menu_term()Get_Menu_Term_Hookmenu_hook.3x
menu_userptrGet_User_Datamenu_userptr.3x
menu_userptrGet_User_Datamenu_userptr.3x
menu_win()Get_Windowmenu_win.3x
meta()Set_Meta_Modecurs_inopts.3x
mouseinterval()Mouse_Intervalcurs_mouse.3x
mousemask()Start_Mousecurs_mouse.3x
move_field()Moveform_field.3x
move_panel()Movepanel.3x
mvderwin()Move_Derived_Windowcurs_window.3x
mvwaddch()Addcurs_addch.3x
mvwaddchnstr()Addcurs_addchstr.3x
mvwaddnstr()Addcurs_addstr.3x
mvwchgat()Change_Attributescurs_attr.3x
mvwdelch()Delete_Charactercurs_delch.3x
mvwgetnstr()Getcurs_getstr.3x
mvwin()Move_Windowcurs_window.3x
mvwinch()Peekcurs_inch.3x
mvwinchnstr()Peekcurs_inchstr.3x
mvwinnstr()Peekcurs_instr.3x
mvwinsch()Insertcurs_insch.3x
mvwinsnstr()Insertcurs_insstr.3x
napms()Nap_Milli_Secondscurs_kernel.3x
new_field()Createform_field_new.3x
new_field()New_Fieldform_field_new.3x
new_form()Createform_new.3x
new_form()New_Formform_new.3x
new_item()Createmitem_new.3x
new_item()New_Itemmitem_new.3x
new_menu()Createmenu_new.3x
new_page()Is_New_Pageform_new_page.3x
new_panel()Createpanel.3x
new_panel()New_Panelpanel.3x
newpad()New_Padcurs_pad.3x
newwin()Createcurs_window.3x
nl()Set_NL_Modecurs_outopts.3x
nodelay()Set_NoDelay_Modecurs_inopts.3x
notimeout()Set_Escape_Time_Modecurs_inopts.3x
overlay()Overlaycurs_overlay.3x
overwrite()Overwritecurs_overlay.3x
pair_content()Pair_Contentcurs_color.3x
panel_above()Abovepanel.3x
panel_below()Belowpanel.3x
panel_hidden()Is_Hiddenpanel.3x
panel_userptrGet_User_Datapanel.3x
panel_userptrGet_User_Datapanel.3x
panel_window()Get_Windowpanel.3x
panel_window()Panel_Windowpanel.3x
pechochar()Add_Character_To_Pad_And_Echo_Itcurs_pad.3x
pnoutrefresh()Refresh_Without_Updatecurs_pad.3x
pos_form_cursor()Position_Cursorform_cursor.3x
pos_menu_cursor()Position_Cursormenu_cursor.3x
post_form()Postform_post.3x
post_menu()Postmenu_post.3x
prefresh()Refreshcurs_pad.3x
qiflush()Set_Queue_Interrupt_Modecurs_inopts.3x
raw()Set_Raw_Modecurs_inopts.3x
redrawwin()Redrawcurs_refresh.3x
replace_panel()Replacepanel.3x
reset_prog_mode()Reset_Curses_Modecurs_kernel.3x
resetty();Reset_Terminal_Statecurs_kernel.3x
ripoffline()Rip_Off_Linescurs_kernel.3x
savetty()Save_Terminal_Statecurs_kernel.3x
scale_form()Scaleform_win.3x
scale_menu()Scalemenu_win.3x
scr_dump()Screen_Dump_To_Filecurs_scr_dump.3x
scr_init()Screen_Init_From_Filecurs_scr_dump.3x
scr_restore()Screen_Restore_From_Filecurs_scr_dump.3x
scr_set()Screen_Set_Filecurs_scr_dump.3x
scrollok()Allow_Scrollingcurs_outopts.3x
set_current_field()Set_Currentform_page.3x
set_current_item()Set_Currentmitem_current.3x
set_field_back()Set_Backgroundform_field_attributes.3x
set_field_buffer()Set_Bufferform_field_buffer.3x
set_field_fore()Set_Foregroundform_field_attributes.3x
set_field_init()Set_Field_Init_Hookform_hook.3x
set_field_just()Set_Justificationform_field_just.3x
set_field_max()Set_Maximum_Sizeform_field_buffer.3x
set_field_opts()Set_Optionsform_field_opts.3x
set_field_pad()Set_Pad_Characterform_field_attributes.3x
set_field_status()Set_Statusform_field_buffer.3x
set_field_term()Set_Field_Term_Hookform_hook.3x
set_field_type()Set_Typeform_fieldtype.3x
set_field_userptrSet_User_Dataform_field_userptr.3x
set_form_fields()Redefineform_field.3x
set_form_fields()Set_Fieldsform_field.3x
set_form_init()Set_Form_Init_Hookform_hook.3x
set_form_opts()Set_Optionsform_opts.3x
set_form_page()Set_Pageform_page.3x
set_form_sub()Set_Sub_Windowform_win.3x
set_form_term()Set_Form_Term_Hookform_hook.3x
set_form_userptrSet_User_Dataform_userptr.3x
set_form_win()Set_Windowform_win.3x
set_item_init()Set_Item_Init_Hookmenu_hook.3x
set_item_opts()Set_Optionsmitem_opts.3x
set_item_term()Set_Item_Term_Hookmenu_hook.3x
set_item_userptrSet_User_Datamitem_userptr.3x
set_item_value()Set_Valuemitem_value.3x
set_menu_back()Set_Backgroundmenu_attributes.3x
set_menu_fore()Set_Foregroundmenu_attributes.3x
set_menu_format()Set_Formatmenu_format.3x
set_menu_grey()Set_Greymenu_attributes.3x
set_menu_init()Set_Menu_Init_Hookmenu_hook.3x
set_menu_items()Redefinemenu_items.3x
set_menu_mark()Set_Markmenu_mark.3x
set_menu_opts()Set_Optionsmenu_opts.3x
set_menu_pad()Set_Pad_Charactermenu_attributes.3x
set_menu_pattern()Set_Patternmenu_pattern.3x
set_menu_spacing()Set_Spacingmenu_spacing.3x
set_menu_sub()Set_Sub_Windowmenu_win.3x
set_menu_term()Set_Menu_Term_Hookmenu_hook.3x
set_menu_userptrSet_User_Datamenu_userptr.3x
set_menu_win()Set_Windowmenu_win.3x
set_new_page()Set_New_Pageform_new_page.3x
set_panel_userptrSet_User_Datapanel.3x
set_top_row()Set_Top_Rowmitem_current.3x
show_panel()Showpanel.3x
slk_attr()Get_Soft_Label_Key_Attributescurs_slk.3x
slk_attr()Get_Soft_Label_Key_Attributescurs_slk.3x
slk_attron()Switch_Soft_Label_Key_Attributescurs_slk.3x
slk_attrset()Set_Soft_Label_Key_Attributescurs_slk.3x
slk_clear()Clear_Soft_Label_Keyscurs_slk.3x
slk_color()Set_Soft_Label_Key_Colorcurs_slk.3x
slk_init()Init_Soft_Label_Keyscurs_slk.3x
slk_label()Get_Soft_Label_Keycurs_slk.3x
slk_label()Get_Soft_Label_Keycurs_slk.3x
slk_noutrefresh()Refresh_Soft_Label_Keys_Without_Updatecurs_slk.3x
slk_refresh()Refresh_Soft_Label_Keycurs_slk.3x
slk_restore()Restore_Soft_Label_Keyscurs_slk.3x
slk_set()Set_Soft_Label_Keycurs_slk.3x
slk_touch()Touch_Soft_Label_Keyscurs_slk.3x
standout()Standoutcurs_attr.3x
start_color()Start_Colorcurs_color.3x
stdscrStandard_Windowcurs_initscr.3x
subpad()Sub_Padcurs_pad.3x
subwin()Sub_Windowcurs_window.3x
syncok()Set_Synch_Modecurs_window.3x
termattrs()Supported_Attributescurs_termattrs.3x
termname()Terminal_Namecurs_termattrs.3x
termname()Terminal_Namecurs_termattrs.3x
top_panel()Toppanel.3x
top_row()Top_Rowmitem_current.3x
touchline()Touchcurs_touch.3x
touchwin()Touchcurs_touch.3x
trace()Trace_oncurs_trace.3x
unctrl()Un_Controlcurs_util.3x
unctrl()Un_Controlcurs_util.3x
ungetch()Undo_Keystrokecurs_getch.3x
ungetmouse()Unget_Mousecurs_mouse.3x
untouchwin()Untouchcurs_touch.3x
update_panels()Update_Panelspanel.3x
use_default_colors()Use_Default_Colorsdefault_colors.3x
use_extended_names()Use_Extended_Namescurs_extend.3x
waddch()Addcurs_addch.3x
waddchnstr()Addcurs_addchstr.3x
waddnstr()Addcurs_addstr.3x
wattr_get()Get_Character_Attributescurs_attr.3x
wattr_get()Get_Character_Attributecurs_attr.3x
wattron()Switch_Character_Attributecurs_attr.3x
wattrset()Set_Character_Attributescurs_attr.3x
wbkgd()Change_Backgroundcurs_bkgd.3x
wbkgdget()Get_Backgroundcurs_bkgd.3x
wbkgdset()Set_Backgroundcurs_bkgd.3x
wborder()Bordercurs_border.3x
wchgat()Change_Attributescurs_attr.3x
wclear()Clearcurs_clear.3x
wclrtobot()Clear_To_End_Of_Screencurs_clear.3x
wclrtoeol()Clear_To_End_Of_Linecurs_clear.3x
wcolor_set()Set_Colorcurs_attr.3x
wdelch()Delete_Charactercurs_delch.3x
wdeleteln()Delete_Linecurs_deleteln.3x
wechochar()Add_With_Immediate_Echocurs_addch.3x
wenclose()Enclosed_In_Windowcurs_mouse.3x
werase()Erasecurs_clear.3x
wgetch()Get_Keystrokecurs_getch.3x
wgetnstr()Getcurs_getstr.3x
whline()Horizontal_Linecurs_border.3x
winch()Peekcurs_inch.3x
winchnstr()Peekcurs_inchstr.3x
winnstr()Peekcurs_instr.3x
winsch()Insertcurs_insch.3x
winsdelln()Insert_Delete_Linescurs_deleteln.3x
winsertln()Insert_Linecurs_deleteln.3x
winsnstr()Insertcurs_insstr.3x
wmove()Move_Cursorcurs_move.3x
wnoutrefresh()Refresh_Without_Updatecurs_refresh.3x
wredrawln()Redrawcurs_refresh.3x
wrefresh()Refreshcurs_refresh.3x
wresize()Resizewresize.3x
wscrl()Scrollcurs_scroll.3x
wsetscrreg()Set_Scroll_Regioncurs_outopts.3x
wsyncdown()Synchronize_Downwardscurs_window.3x
wsyncup()Synchronize_Upwardscurs_window.3x
wtimeout()Set_Timeout_Modecurs_inopts.3x
wtouchln()Change_Line_Statuscurs_touch.3x
wvline()Vertical_Linecurs_border.3x
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-numeric__adb.htm0000644000175100001440000002411412340214310030607 0ustar tomusers terminal_interface-curses-forms-field_types-numeric.adb

File : terminal_interface-curses-forms-field_types-numeric.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--            Terminal_Interface.Curses.Forms.Field_Types.Numeric           --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.14 @
--  @Date: 2014/05/24 21:31:05 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms.Field_Types.Numeric is

   procedure Set_Field_Type (Fld : Field;
                             Typ : Numeric_Field)
   is
      type Double is new Interfaces.C.double;

      function Set_Fld_Type (F    : Field := Fld;
                             Arg1 : C_Int;
                             Arg2 : Double;
                             Arg3 : Double) return Eti_Error;
      pragma Import (C, Set_Fld_Type, "set_field_type_numeric");

   begin
      Eti_Exception (Set_Fld_Type (Arg1 => C_Int (Typ.Precision),
                                   Arg2 => Double (Typ.Lower_Limit),
                                   Arg3 => Double (Typ.Upper_Limit)));
      Wrap_Builtin (Fld, Typ);
   end Set_Field_Type;

end Terminal_Interface.Curses.Forms.Field_Types.Numeric;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-complex_io__ads.htm0000644000175100001440000002133712340214310027350 0ustar tomusers terminal_interface-curses-text_io-complex_io.ads

File : terminal_interface-curses-text_io-complex_io.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Text_IO.Complex_IO               --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Numerics.Generic_Complex_Types;

generic
   with package Complex_Types is new Ada.Numerics.Generic_Complex_Types (<>);

package Terminal_Interface.Curses.Text_IO.Complex_IO is

   use Complex_Types;

   Default_Fore : Field := 2;
   Default_Aft  : Field := Real'Digits - 1;
   Default_Exp  : Field := 3;

   procedure Put
     (Win  : Window;
      Item : Complex;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp);

   procedure Put
     (Item : Complex;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp);

private
   pragma Inline (Put);

end Terminal_Interface.Curses.Text_IO.Complex_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-putwin__ads.htm0000644000175100001440000001411612340214310025064 0ustar tomusers terminal_interface-curses-putwin.ads

File : terminal_interface-curses-putwin.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                    Terminal_Interface.Curses.PutWin                      --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 2000 Free Software Foundation, Inc.                        --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.3 @
--  Binding Version 01.00

with Ada.Streams.Stream_IO;

package Terminal_Interface.Curses.PutWin is

   procedure Put_Window (Win  : Window;
                         File : Ada.Streams.Stream_IO.File_Type);

   function Get_Window (File  : Ada.Streams.Stream_IO.File_Type) return Window;

end Terminal_Interface.Curses.PutWin;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-menus-menu_user_data__adb.htm0000644000175100001440000002405712340214310027642 0ustar tomusers terminal_interface-curses-menus-menu_user_data.adb

File : terminal_interface-curses-menus-menu_user_data.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Menus.Menu_User_Data             --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.15 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Menus.Menu_User_Data is

   use type Interfaces.C.int;

   procedure Set_User_Data (Men  : Menu;
                            Data : User_Access)
   is
      function Set_Menu_Userptr (Men  : Menu;
                                 Data : User_Access)  return Eti_Error;
      pragma Import (C, Set_Menu_Userptr, "set_menu_userptr");

   begin
      Eti_Exception (Set_Menu_Userptr (Men, Data));

   end Set_User_Data;

   function Get_User_Data (Men  : Menu) return User_Access
   is
      function Menu_Userptr (Men : Menu) return User_Access;
      pragma Import (C, Menu_Userptr, "menu_userptr");
   begin
      return Menu_Userptr (Men);
   end Get_User_Data;

   procedure Get_User_Data (Men  : Menu;
                            Data : out User_Access)
   is
   begin
      Data := Get_User_Data (Men);
   end Get_User_Data;

end Terminal_Interface.Curses.Menus.Menu_User_Data;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io__adb.htm0000644000175100001440000011500512340214310025167 0ustar tomusers terminal_interface-curses-text_io.adb

File : terminal_interface-curses-text_io.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                     Terminal_Interface.Curses.Text_IO                    --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.22 @
--  @Date: 2014/05/24 21:32:18 @
--  Binding Version 01.00
------------------------------------------------------------------------------
package body Terminal_Interface.Curses.Text_IO is

   Default_Window : Window := Null_Window;

   procedure Set_Window (Win : Window)
   is
   begin
      Default_Window := Win;
   end Set_Window;

   function Get_Window return Window
   is
   begin
      if Default_Window = Null_Window then
         return Standard_Window;
      else
         return Default_Window;
      end if;
   end Get_Window;
   pragma Inline (Get_Window);

   procedure Flush (Win : Window)
   is
   begin
      Refresh (Win);
   end Flush;

   procedure Flush
   is
   begin
      Flush (Get_Window);
   end Flush;

   --------------------------------------------
   -- Specification of line and page lengths --
   --------------------------------------------

   --  There are no set routines in this package. I assume, that you allocate
   --  the window with an appropriate size.
   --  A scroll-window is interpreted as an page with unbounded page length,
   --  i.e. it returns the conventional 0 as page length.

   function Line_Length (Win : Window) return Count
   is
      N_Lines : Line_Count;
      N_Cols  : Column_Count;
   begin
      Get_Size (Win, N_Lines, N_Cols);
      --  if Natural (N_Cols) > Natural (Count'Last) then
      --     raise Layout_Error;
      --  end if;
      return Count (N_Cols);
   end Line_Length;

   function Line_Length return Count
   is
   begin
      return Line_Length (Get_Window);
   end Line_Length;

   function Page_Length (Win : Window) return Count
   is
      N_Lines : Line_Count;
      N_Cols  : Column_Count;
   begin
      if Scrolling_Allowed (Win) then
         return 0;
      else
         Get_Size (Win, N_Lines, N_Cols);
         --  if Natural (N_Lines) > Natural (Count'Last) then
         --     raise Layout_Error;
         --  end if;
         return Count (N_Lines);
      end if;
   end Page_Length;

   function Page_Length return Count
   is
   begin
      return Page_Length (Get_Window);
   end Page_Length;

   ------------------------------------
   -- Column, Line, and Page Control --
   ------------------------------------
   procedure New_Line (Win : Window; Spacing : Positive_Count := 1)
   is
      P_Size : constant Count := Page_Length (Win);
   begin
      if not Spacing'Valid then
         raise Constraint_Error;
      end if;

      for I in 1 .. Spacing loop
         if P_Size > 0 and then Line (Win) >= P_Size then
            New_Page (Win);
         else
            Add (Win, ASCII.LF);
         end if;
      end loop;
   end New_Line;

   procedure New_Line (Spacing : Positive_Count := 1)
   is
   begin
      New_Line (Get_Window, Spacing);
   end New_Line;

   procedure New_Page (Win : Window)
   is
   begin
      Clear (Win);
   end New_Page;

   procedure New_Page
   is
   begin
      New_Page (Get_Window);
   end New_Page;

   procedure Set_Col (Win : Window;  To : Positive_Count)
   is
      Y  : Line_Position;
      X1 : Column_Position;
      X2 : Column_Position;
      N  : Natural;
   begin
      if not To'Valid then
         raise Constraint_Error;
      end if;

      Get_Cursor_Position (Win, Y, X1);
      N  := Natural (To); N := N - 1;
      X2 := Column_Position (N);
      if X1 > X2 then
         New_Line (Win, 1);
         X1 := 0;
      end if;
      if X1 < X2 then
         declare
            Filler : constant String (Integer (X1) .. (Integer (X2) - 1))
              := (others => ' ');
         begin
            Put (Win, Filler);
         end;
      end if;
   end Set_Col;

   procedure Set_Col (To : Positive_Count)
   is
   begin
      Set_Col (Get_Window, To);
   end Set_Col;

   procedure Set_Line (Win : Window; To : Positive_Count)
   is
      Y1 : Line_Position;
      Y2 : Line_Position;
      X  : Column_Position;
      N  : Natural;
   begin
      if not To'Valid then
         raise Constraint_Error;
      end if;

      Get_Cursor_Position (Win, Y1, X);
      pragma Warnings (Off, X);         --  unreferenced
      N  := Natural (To); N := N - 1;
      Y2 := Line_Position (N);
      if Y2 < Y1 then
         New_Page (Win);
         Y1 := 0;
      end if;
      if Y1 < Y2 then
         New_Line (Win, Positive_Count (Y2 - Y1));
      end if;
   end Set_Line;

   procedure Set_Line (To : Positive_Count)
   is
   begin
      Set_Line (Get_Window, To);
   end Set_Line;

   function Col (Win : Window) return Positive_Count
   is
      Y : Line_Position;
      X : Column_Position;
      N : Natural;
   begin
      Get_Cursor_Position (Win, Y, X);
      N := Natural (X); N := N + 1;
      --  if N > Natural (Count'Last) then
      --     raise Layout_Error;
      --  end if;
      return Positive_Count (N);
   end Col;

   function Col return Positive_Count
   is
   begin
      return Col (Get_Window);
   end Col;

   function Line (Win : Window) return Positive_Count
   is
      Y : Line_Position;
      X : Column_Position;
      N : Natural;
   begin
      Get_Cursor_Position (Win, Y, X);
      N := Natural (Y); N := N + 1;
      --  if N > Natural (Count'Last) then
      --     raise Layout_Error;
      --  end if;
      return Positive_Count (N);
   end Line;

   function Line return Positive_Count
   is
   begin
      return Line (Get_Window);
   end Line;

   -----------------------
   -- Characters Output --
   -----------------------

   procedure Put (Win  : Window; Item : Character)
   is
      P_Size : constant Count := Page_Length (Win);
      Y : Line_Position;
      X : Column_Position;
      L : Line_Count;
      C : Column_Count;
   begin
      if P_Size > 0 then
         Get_Cursor_Position (Win, Y, X);
         Get_Size (Win, L, C);
         if (Y + 1) = L and then (X + 1) = C then
            New_Page (Win);
         end if;
      end if;
      Add (Win, Item);
   end Put;

   procedure Put (Item : Character)
   is
   begin
      Put (Get_Window, Item);
   end Put;

   --------------------
   -- Strings-Output --
   --------------------

   procedure Put (Win  : Window; Item : String)
   is
      P_Size : constant Count := Page_Length (Win);
      Y : Line_Position;
      X : Column_Position;
      L : Line_Count;
      C : Column_Count;
   begin
      if P_Size > 0 then
         Get_Cursor_Position (Win, Y, X);
         Get_Size (Win, L, C);
         if (Y + 1) = L and then (X + 1 + Item'Length) >= C then
            New_Page (Win);
         end if;
      end if;
      Add (Win, Item);
   end Put;

   procedure Put (Item : String)
   is
   begin
      Put (Get_Window, Item);
   end Put;

   procedure Put_Line
     (Win  : Window;
      Item : String)
   is
   begin
      Put (Win, Item);
      New_Line (Win, 1);
   end Put_Line;

   procedure Put_Line
     (Item : String)
   is
   begin
      Put_Line (Get_Window, Item);
   end Put_Line;

end Terminal_Interface.Curses.Text_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-terminfo__ads.htm0000644000175100001440000002241112340214310025356 0ustar tomusers terminal_interface-curses-terminfo.ads

File : terminal_interface-curses-terminfo.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                     Terminal_Interface.Curses.Terminfo                   --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 2000 Free Software Foundation, Inc.                        --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.3 @
--  Binding Version 01.00
------------------------------------------------------------------------------

with Interfaces.C;

package Terminal_Interface.Curses.Terminfo is
   pragma Preelaborate (Terminal_Interface.Curses.Terminfo);

   --  |=====================================================================
   --  | Man page curs_terminfo.3x
   --  |=====================================================================
   --  Not implemented:  setupterm, setterm, set_curterm, del_curterm,
   --                    restartterm, tparm, putp, vidputs,  vidattr,
   --                    mvcur

   type Terminfo_String is new String;

   --  |
   procedure Get_String (Name   : String;
                         Value  : out Terminfo_String;
                         Result : out Boolean);
   function Has_String (Name : String) return Boolean;
   --  AKA: tigetstr()

   --  |
   function Get_Flag (Name : String) return Boolean;
   --  AKA: tigetflag()

   --  |
   function Get_Number (Name : String) return Integer;
   --  AKA: tigetnum()

   type putctype is access function (c : Interfaces.C.int)
                                    return Interfaces.C.int;
   pragma Convention (C, putctype);

   --  |
   procedure Put_String (Str    : Terminfo_String;
                         affcnt : Natural := 1;
                         putc   : putctype := null);
   --  AKA: tputs()

end Terminal_Interface.Curses.Terminfo;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-modular_io__ads.htm0000644000175100001440000002033212340214310027336 0ustar tomusers terminal_interface-curses-text_io-modular_io.ads

File : terminal_interface-curses-text_io-modular_io.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Text_IO.Modular_IO               --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
generic
   type Num is mod <>;

package Terminal_Interface.Curses.Text_IO.Modular_IO is

   Default_Width : Field := Num'Width;
   Default_Base  : Number_Base := 10;

   procedure Put
     (Win   : Window;
      Item  : Num;
      Width : Field := Default_Width;
      Base  : Number_Base := Default_Base);

   procedure Put
     (Item  : Num;
      Width : Field := Default_Width;
      Base  : Number_Base := Default_Base);

private
   pragma Inline (Put);

end Terminal_Interface.Curses.Text_IO.Modular_IO;
ncurses-6.0-20160213/doc/html/ada/files/0000755000175100001440000000000012340214307016010 5ustar tomusersncurses-6.0-20160213/doc/html/ada/files/T.htm0000644000175100001440000002334112340214307016730 0ustar tomusers T

Files - T

[index] ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-alpha__ads.htm0000644000175100001440000001611212340214310030252 0ustar tomusers terminal_interface-curses-forms-field_types-alpha.ads

File : terminal_interface-curses-forms-field_types-alpha.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--              Terminal_Interface.Curses.Forms.Field_Types.Alpha           --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.Alpha is
   pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.Alpha);

   type Alpha_Field is new Field_Type
     with record
        Minimum_Field_Width : Natural := 0;
     end record;

   procedure Set_Field_Type (Fld : Field;
                             Typ : Alpha_Field);
   pragma Inline (Set_Field_Type);

end Terminal_Interface.Curses.Forms.Field_Types.Alpha;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-enumeration_io__ads.htm0000644000175100001440000002043612340214310030226 0ustar tomusers terminal_interface-curses-text_io-enumeration_io.ads

File : terminal_interface-curses-text_io-enumeration_io.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--             Terminal_Interface.Curses.Text_IO.Enumeration_IO             --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
generic
   type Enum is (<>);

package Terminal_Interface.Curses.Text_IO.Enumeration_IO is

   Default_Width : Field := 0;
   Default_Setting : Type_Set := Mixed_Case;

   procedure Put
     (Win   : Window;
      Item  : Enum;
      Width : Field := Default_Width;
      Set   : Type_Set := Default_Setting);

   procedure Put
     (Item  : Enum;
      Width : Field := Default_Width;
      Set   : Type_Set := Default_Setting);

private
   pragma Inline (Put);

end Terminal_Interface.Curses.Text_IO.Enumeration_IO;
././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-enumeration-ada__ads.htmncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-enumeration-ada__ads.h0000644000175100001440000002140212340214310031673 0ustar tomusers terminal_interface-curses-forms-field_types-enumeration-ada.ads

File : terminal_interface-curses-forms-field_types-enumeration-ada.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--         Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada      --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998 Free Software Foundation, Inc.                        --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.10 @
--  Binding Version 01.00
------------------------------------------------------------------------------
generic
   type T is (<>);

package Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada is
   pragma Preelaborate
     (Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada);

   function Create (Set            : Type_Set := Mixed_Case;
                    Case_Sensitive : Boolean  := False;
                    Must_Be_Unique : Boolean  := False)
                    return Enumeration_Field;

   function Value (Fld : Field;
                   Buf : Buffer_Number := Buffer_Number'First) return T;
   --  Translate the content of the fields buffer - indicated by the
   --  buffer number - into an enumeration value. If the buffer is empty
   --  or the content is invalid, a Constraint_Error is raises.

end Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-ipv4_address__ads.htm0000644000175100001440000001611112340214310031553 0ustar tomusers terminal_interface-curses-forms-field_types-ipv4_address.ads

File : terminal_interface-curses-forms-field_types-ipv4_address.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--          Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address        --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address is
   pragma Preelaborate
     (Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address);

   type Internet_V4_Address_Field is new Field_Type with null record;

   procedure Set_Field_Type (Fld : Field;
                             Typ : Internet_V4_Address_Field);
   pragma Inline (Set_Field_Type);

end Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-mouse__adb.htm0000644000175100001440000007202212534703456024670 0ustar tomusers terminal_interface-curses-mouse.adb

File : terminal_interface-curses-mouse.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                     Terminal_Interface.Curses.Mouse                      --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.25 @
--  @Date: 2014/09/13 19:10:18 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
with Interfaces.C; use Interfaces.C;
use Interfaces;

package body Terminal_Interface.Curses.Mouse is

   use type System.Bit_Order;

   function Has_Mouse return Boolean
   is
      function Mouse_Avail return C_Int;
      pragma Import (C, Mouse_Avail, "has_mouse");
   begin
      if Has_Key (Key_Mouse) or else Mouse_Avail /= 0 then
         return True;
      else
         return False;
      end if;
   end Has_Mouse;

   function Get_Mouse return Mouse_Event
   is
      type Event_Access is access all Mouse_Event;

      function Getmouse (Ev : Event_Access) return C_Int;
      pragma Import (C, Getmouse, "getmouse");

      Event : aliased Mouse_Event;
   begin
      if Getmouse (Event'Access) = Curses_Err then
         raise Curses_Exception;
      end if;
      return Event;
   end Get_Mouse;

   procedure Register_Reportable_Event (Button : Mouse_Button;
                                        State  : Button_State;
                                        Mask   : in out Event_Mask)
   is
      Button_Nr : constant Natural := Mouse_Button'Pos (Button);
      State_Nr  : constant Natural := Button_State'Pos (State);
   begin
      if Button in Modifier_Keys and then State /= Pressed then
         raise Curses_Exception;
      else
         if Button in Real_Buttons then
            Mask := Mask or ((2 ** (6 * Button_Nr)) ** State_Nr);
         else
            Mask := Mask or (BUTTON_CTRL ** (Button_Nr - 4));
         end if;
      end if;
   end Register_Reportable_Event;

   procedure Register_Reportable_Events (Button : Mouse_Button;
                                         State  : Button_States;
                                         Mask   : in out Event_Mask)
   is
   begin
      for S in Button_States'Range loop
         if State (S) then
            Register_Reportable_Event (Button, S, Mask);
         end if;
      end loop;
   end Register_Reportable_Events;

   function Start_Mouse (Mask : Event_Mask := All_Events)
                         return Event_Mask
   is
      function MMask (M : Event_Mask;
                      O : access Event_Mask) return Event_Mask;
      pragma Import (C, MMask, "mousemask");
      R   : Event_Mask;
      Old : aliased Event_Mask;
   begin
      R := MMask (Mask, Old'Access);
      if R = No_Events then
         Beep;
      end if;
      return Old;
   end Start_Mouse;

   procedure End_Mouse (Mask : Event_Mask := No_Events)
   is
   begin
      if Mask /= No_Events then
         Beep;
      end if;
   end End_Mouse;

   procedure Dispatch_Event (Mask   : Event_Mask;
                             Button : out Mouse_Button;
                             State  : out Button_State);

   procedure Dispatch_Event (Mask   : Event_Mask;
                             Button : out Mouse_Button;
                             State  : out Button_State) is
      L : Event_Mask;
   begin
      Button := Alt;  --  preset to non real button;
      if (Mask and BUTTON1_EVENTS) /= 0 then
         Button := Left;
      elsif (Mask and BUTTON2_EVENTS) /= 0 then
         Button := Middle;
      elsif (Mask and BUTTON3_EVENTS) /= 0 then
         Button := Right;
      elsif (Mask and BUTTON4_EVENTS) /= 0 then
         Button := Button4;
      end if;
      if Button in Real_Buttons then
         L := 2 ** (6 * Mouse_Button'Pos (Button));
         for I in Button_State'Range loop
            if (Mask and L) /= 0 then
               State := I;
               exit;
            end if;
            L := 2 * L;
         end loop;
      else
         State := Pressed;
         if (Mask and BUTTON_CTRL) /= 0 then
            Button := Control;
         elsif (Mask and BUTTON_SHIFT) /= 0 then
            Button := Shift;
         elsif (Mask and BUTTON_ALT) /= 0 then
            Button := Alt;
         end if;
      end if;
   end Dispatch_Event;

   procedure Get_Event (Event  : Mouse_Event;
                        Y      : out Line_Position;
                        X      : out Column_Position;
                        Button : out Mouse_Button;
                        State  : out Button_State)
   is
      Mask  : constant Event_Mask := Event.Bstate;
   begin
      X := Column_Position (Event.X);
      Y := Line_Position   (Event.Y);
      Dispatch_Event (Mask, Button, State);
   end Get_Event;

   procedure Unget_Mouse (Event : Mouse_Event)
   is
      function Ungetmouse (Ev : Mouse_Event) return C_Int;
      pragma Import (C, Ungetmouse, "ungetmouse");
   begin
      if Ungetmouse (Event) = Curses_Err then
         raise Curses_Exception;
      end if;
   end Unget_Mouse;

   function Enclosed_In_Window (Win    : Window := Standard_Window;
                                Event  : Mouse_Event) return Boolean
   is
      function Wenclose (Win : Window; Y : C_Int; X : C_Int)
                         return Curses_Bool;
      pragma Import (C, Wenclose, "wenclose");
   begin
      if Wenclose (Win, C_Int (Event.Y), C_Int (Event.X))
        = Curses_Bool_False
      then
         return False;
      else
         return True;
      end if;
   end Enclosed_In_Window;

   function Mouse_Interval (Msec : Natural := 200) return Natural
   is
      function Mouseinterval (Msec : C_Int) return C_Int;
      pragma Import (C, Mouseinterval, "mouseinterval");
   begin
      return Natural (Mouseinterval (C_Int (Msec)));
   end Mouse_Interval;

end Terminal_Interface.Curses.Mouse;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-fixed_io__adb.htm0000644000175100001440000002637512340214310026766 0ustar tomusers terminal_interface-curses-text_io-fixed_io.adb

File : terminal_interface-curses-text_io-fixed_io.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                Terminal_Interface.Curses.Text_IO.Fixed_IO                --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Terminal_Interface.Curses.Text_IO.Aux;

package body Terminal_Interface.Curses.Text_IO.Fixed_IO is

   package Aux renames Terminal_Interface.Curses.Text_IO.Aux;
   package FIXIO is new Ada.Text_IO.Fixed_IO (Num);

   procedure Put
     (Win  : Window;
      Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp)
   is
      Buf : String (1 .. Field'Last);
      Len : Field := Fore + 1 + Aft;
   begin
      if Exp > 0 then
         Len := Len + 1 + Exp;
      end if;
      FIXIO.Put (Buf, Item, Aft, Exp);
      Aux.Put_Buf (Win, Buf, Len, False);
   end Put;

   procedure Put
     (Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp) is
   begin
      Put (Get_Window, Item, Fore, Aft, Exp);
   end Put;

end Terminal_Interface.Curses.Text_IO.Fixed_IO;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-mouse__ads.htm0000644000175100001440000006426112534703456024717 0ustar tomusers terminal_interface-curses-mouse.ads

File : terminal_interface-curses-mouse.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                      Terminal_Interface.Curses.Mouse                     --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2014,2015 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.32 @
--  @Date: 2015/05/30 23:19:19 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with System;

package Terminal_Interface.Curses.Mouse is
   pragma Preelaborate (Terminal_Interface.Curses.Mouse);

   --  |=====================================================================
   --  | Man page curs_mouse.3x
   --  |=====================================================================
   --  mouse_trafo, wmouse_trafo are implemented as Transform_Coordinates
   --  in the parent package.
   --
   --  Not implemented:
   --  REPORT_MOUSE_POSITION (i.e. as a parameter to Register_Reportable_Event
   --  or Start_Mouse)
   type Event_Mask is private;
   No_Events  : constant Event_Mask;
   All_Events : constant Event_Mask;

   type Mouse_Button is (Left,     -- aka: Button 1
                         Middle,   -- aka: Button 2
                         Right,    -- aka: Button 3
                         Button4,  -- aka: Button 4
                         Control,  -- Control Key
                         Shift,    -- Shift Key
                         Alt);     -- ALT Key

   subtype Real_Buttons  is Mouse_Button range Left .. Button4;
   subtype Modifier_Keys is Mouse_Button range Control .. Alt;

   type Button_State is (Released,
                         Pressed,
                         Clicked,
                         Double_Clicked,
                         Triple_Clicked);

   type Button_States is array (Button_State) of Boolean;
   pragma Pack (Button_States);

   All_Clicks : constant Button_States := (Clicked .. Triple_Clicked => True,
                                           others => False);
   All_States : constant Button_States := (others => True);

   type Mouse_Event is private;

   --  |=====================================================================
   --  | Man page curs_mouse.3x
   --  |=====================================================================

   function Has_Mouse return Boolean;
   --  Return true if a mouse device is supported, false otherwise.

   procedure Register_Reportable_Event
     (Button : Mouse_Button;
      State  : Button_State;
      Mask   : in out Event_Mask);
   --  Stores the event described by the button and the state in the mask.
   --  Before you call this the first time, you should initialize the mask
   --  with the Empty_Mask constant
   pragma Inline (Register_Reportable_Event);

   procedure Register_Reportable_Events
     (Button : Mouse_Button;
      State  : Button_States;
      Mask   : in out Event_Mask);
   --  Register all events described by the Button and the State bitmap.
   --  Before you call this the first time, you should initialize the mask
   --  with the Empty_Mask constant

   --  #1A NAME="AFU_1"#2|
   --  There is one difference to mousmask(): we return the value of the
   --  old mask, that means the event mask value before this call.
   --  Not Implemented: The library version
   --  returns a Mouse_Mask that tells which events are reported.
   function Start_Mouse (Mask : Event_Mask := All_Events)
                         return Event_Mask;
   --  AKA: mousemask()
   pragma Inline (Start_Mouse);

   procedure End_Mouse (Mask : Event_Mask := No_Events);
   --  Terminates the mouse, restores the specified event mask
   pragma Inline (End_Mouse);

   --  #1A NAME="AFU_2"#2|
   function Get_Mouse return Mouse_Event;
   --  AKA: getmouse()
   pragma Inline (Get_Mouse);

   procedure Get_Event (Event  : Mouse_Event;
                        Y      : out Line_Position;
                        X      : out Column_Position;
                        Button : out Mouse_Button;
                        State  : out Button_State);
   --  !!! Warning: X and Y are screen coordinates. Due to ripped of lines they
   --  may not be identical to window coordinates.
   --  Not Implemented: Get_Event only reports one event, the C library
   --  version supports multiple events, e.g. {click-1, click-3}
   pragma Inline (Get_Event);

   --  #1A NAME="AFU_3"#2|
   procedure Unget_Mouse (Event : Mouse_Event);
   --  AKA: ungetmouse()
   pragma Inline (Unget_Mouse);

   --  #1A NAME="AFU_4"#2|
   function Enclosed_In_Window (Win    : Window := Standard_Window;
                                Event  : Mouse_Event) return Boolean;
   --  AKA: wenclose()
   --  But : use event instead of screen coordinates.
   pragma Inline (Enclosed_In_Window);

   --  #1A NAME="AFU_5"#2|
   function Mouse_Interval (Msec : Natural := 200) return Natural;
   --  AKA: mouseinterval()
   pragma Inline (Mouse_Interval);

private
   --  This can be as little as 32 bits (unsigned), or as long as the system's
   --  unsigned long.  Declare it as the minimum size to handle all valid
   --  sizes.
   type Event_Mask is mod 4294967296;

   type Mouse_Event is
      record
         Id      : Integer range Integer (Interfaces.C.short'First) ..
                                 Integer (Interfaces.C.short'Last);
         X, Y, Z : Integer range Integer (Interfaces.C.int'First) ..
                                 Integer (Interfaces.C.int'Last);
         Bstate  : Event_Mask;
      end record;
   pragma Convention (C, Mouse_Event);

   for Mouse_Event use
      record
         Id     at 0 range Curses_Constants.MEVENT_id_First
           .. Curses_Constants.MEVENT_id_Last;
         X      at 0 range Curses_Constants.MEVENT_x_First
           .. Curses_Constants.MEVENT_x_Last;
         Y      at 0 range Curses_Constants.MEVENT_y_First
           .. Curses_Constants.MEVENT_y_Last;
         Z      at 0 range Curses_Constants.MEVENT_z_First
           .. Curses_Constants.MEVENT_z_Last;
         Bstate at 0 range Curses_Constants.MEVENT_bstate_First
           .. Curses_Constants.MEVENT_bstate_Last;
      end record;
   for Mouse_Event'Size use Curses_Constants.MEVENT_Size;
   Generation_Bit_Order : System.Bit_Order renames Curses_Constants.Bit_Order;

   BUTTON_CTRL      : constant Event_Mask := Curses_Constants.BUTTON_CTRL;
   BUTTON_SHIFT     : constant Event_Mask := Curses_Constants.BUTTON_SHIFT;
   BUTTON_ALT       : constant Event_Mask := Curses_Constants.BUTTON_ALT;
   BUTTON1_EVENTS   : constant Event_Mask
     := Curses_Constants.all_events_button_1;
   BUTTON2_EVENTS   : constant Event_Mask
     := Curses_Constants.all_events_button_2;
   BUTTON3_EVENTS   : constant Event_Mask
     := Curses_Constants.all_events_button_3;
   BUTTON4_EVENTS   : constant Event_Mask
     := Curses_Constants.all_events_button_4;
   ALL_MOUSE_EVENTS : constant Event_Mask := Curses_Constants.ALL_MOUSE_EVENTS;
   No_Events        : constant Event_Mask := 0;
   All_Events       : constant Event_Mask := ALL_MOUSE_EVENTS;

end Terminal_Interface.Curses.Mouse;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-regexp__ads.htm0000644000175100001440000001647012340214310030466 0ustar tomusers terminal_interface-curses-forms-field_types-regexp.ads

File : terminal_interface-curses-forms-field_types-regexp.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--              Terminal_Interface.Curses.Forms.Field_Types.RegExp          --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.RegExp is
   pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.RegExp);

   type String_Access is access String;

   type Regular_Expression_Field is new Field_Type with
      record
         Regular_Expression : String_Access;
      end record;

   procedure Set_Field_Type (Fld : Field;
                             Typ : Regular_Expression_Field);
   pragma Inline (Set_Field_Type);

end Terminal_Interface.Curses.Forms.Field_Types.RegExp;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses_constants__ads.htm0000644000175100001440000011306012534703456025655 0ustar tomusers terminal_interface-curses_constants.ads

File : terminal_interface-curses_constants.ads


--  Generated by the C program ./generate (source ./gen.c).
--  Do not edit this file directly.
--  The values provided here may vary on your system.

with System;
package Terminal_Interface.Curses_Constants is
   pragma Pure;

   DFT_ARG_SUFFIX : constant String := "";
   Bit_Order : constant System.Bit_Order := System.Low_Order_First;
   Sizeof_Bool                  : constant := 8;
   OK                           : constant := 0;
   ERR                          : constant := -1;
   pragma Warnings (Off); -- redefinition of Standard.True and False
   TRUE                         : constant := 1;
   FALSE                        : constant := 0;
   pragma Warnings (On);

   --  Version of the ncurses library from extensions(3NCURSES)

   NCURSES_VERSION_MAJOR        : constant := 6;
   NCURSES_VERSION_MINOR        : constant := 0;
   Version : constant String := "6.0";

   --  Character non-color attributes from attr(3NCURSES)

   --  attr_t and chtype may be signed in C.
   type attr_t is mod 2 ** 32;
   A_CHARTEXT_First             : constant := 0;
   A_CHARTEXT_Last              : constant := 7;
   A_COLOR_First                : constant := 8;
   A_COLOR_Last                 : constant := 15;
   Attr_First                   : constant := 16;
   Attr_Last                    : constant := 31;
   A_STANDOUT_First             : constant := 16;
   A_STANDOUT_Last              : constant := 16;
   A_UNDERLINE_First            : constant := 17;
   A_UNDERLINE_Last             : constant := 17;
   A_REVERSE_First              : constant := 18;
   A_REVERSE_Last               : constant := 18;
   A_BLINK_First                : constant := 19;
   A_BLINK_Last                 : constant := 19;
   A_DIM_First                  : constant := 20;
   A_DIM_Last                   : constant := 20;
   A_BOLD_First                 : constant := 21;
   A_BOLD_Last                  : constant := 21;
   A_PROTECT_First              : constant := 24;
   A_PROTECT_Last               : constant := 24;
   A_INVIS_First                : constant := 23;
   A_INVIS_Last                 : constant := 23;
   A_ALTCHARSET_First           : constant := 22;
   A_ALTCHARSET_Last            : constant := 22;
   A_HORIZONTAL_First           : constant := 25;
   A_HORIZONTAL_Last            : constant := 25;
   A_LEFT_First                 : constant := 26;
   A_LEFT_Last                  : constant := 26;
   A_LOW_First                  : constant := 27;
   A_LOW_Last                   : constant := 27;
   A_RIGHT_First                : constant := 28;
   A_RIGHT_Last                 : constant := 28;
   A_TOP_First                  : constant := 29;
   A_TOP_Last                   : constant := 29;
   A_VERTICAL_First             : constant := 30;
   A_VERTICAL_Last              : constant := 30;
   chtype_Size                  : constant := 32;

   --  predefined color numbers from color(3NCURSES)

   COLOR_BLACK                  : constant := 0;
   COLOR_RED                    : constant := 1;
   COLOR_GREEN                  : constant := 2;
   COLOR_YELLOW                 : constant := 3;
   COLOR_BLUE                   : constant := 4;
   COLOR_MAGENTA                : constant := 5;
   COLOR_CYAN                   : constant := 6;
   COLOR_WHITE                  : constant := 7;

   --  ETI return codes from ncurses.h

   E_OK                         : constant := 0;
   E_SYSTEM_ERROR               : constant := -1;
   E_BAD_ARGUMENT               : constant := -2;
   E_POSTED                     : constant := -3;
   E_CONNECTED                  : constant := -4;
   E_BAD_STATE                  : constant := -5;
   E_NO_ROOM                    : constant := -6;
   E_NOT_POSTED                 : constant := -7;
   E_UNKNOWN_COMMAND            : constant := -8;
   E_NO_MATCH                   : constant := -9;
   E_NOT_SELECTABLE             : constant := -10;
   E_NOT_CONNECTED              : constant := -11;
   E_REQUEST_DENIED             : constant := -12;
   E_INVALID_FIELD              : constant := -13;
   E_CURRENT                    : constant := -14;

   --  Input key codes not defined in any ncurses manpage

   KEY_MIN                      : constant := 257;
   KEY_MAX                      : constant := 511;
   KEY_CODE_YES                 : constant := 256;

   --  Input key codes from getch(3NCURSES)

   KEY_BREAK                    : constant := 257;
   KEY_DOWN                     : constant := 258;
   KEY_UP                       : constant := 259;
   KEY_LEFT                     : constant := 260;
   KEY_RIGHT                    : constant := 261;
   KEY_HOME                     : constant := 262;
   KEY_BACKSPACE                : constant := 263;
   KEY_F0                       : constant := 264;
   KEY_F1                       : constant := 265;
   KEY_F2                       : constant := 266;
   KEY_F3                       : constant := 267;
   KEY_F4                       : constant := 268;
   KEY_F5                       : constant := 269;
   KEY_F6                       : constant := 270;
   KEY_F7                       : constant := 271;
   KEY_F8                       : constant := 272;
   KEY_F9                       : constant := 273;
   KEY_F10                      : constant := 274;
   KEY_F11                      : constant := 275;
   KEY_F12                      : constant := 276;
   KEY_F13                      : constant := 277;
   KEY_F14                      : constant := 278;
   KEY_F15                      : constant := 279;
   KEY_F16                      : constant := 280;
   KEY_F17                      : constant := 281;
   KEY_F18                      : constant := 282;
   KEY_F19                      : constant := 283;
   KEY_F20                      : constant := 284;
   KEY_F21                      : constant := 285;
   KEY_F22                      : constant := 286;
   KEY_F23                      : constant := 287;
   KEY_F24                      : constant := 288;
   KEY_DL                       : constant := 328;
   KEY_IL                       : constant := 329;
   KEY_DC                       : constant := 330;
   KEY_IC                       : constant := 331;
   KEY_EIC                      : constant := 332;
   KEY_CLEAR                    : constant := 333;
   KEY_EOS                      : constant := 334;
   KEY_EOL                      : constant := 335;
   KEY_SF                       : constant := 336;
   KEY_SR                       : constant := 337;
   KEY_NPAGE                    : constant := 338;
   KEY_PPAGE                    : constant := 339;
   KEY_STAB                     : constant := 340;
   KEY_CTAB                     : constant := 341;
   KEY_CATAB                    : constant := 342;
   KEY_ENTER                    : constant := 343;
   KEY_SRESET                   : constant := 344;
   KEY_RESET                    : constant := 345;
   KEY_PRINT                    : constant := 346;
   KEY_LL                       : constant := 347;
   KEY_A1                       : constant := 348;
   KEY_A3                       : constant := 349;
   KEY_B2                       : constant := 350;
   KEY_C1                       : constant := 351;
   KEY_C3                       : constant := 352;
   KEY_BTAB                     : constant := 353;
   KEY_BEG                      : constant := 354;
   KEY_CANCEL                   : constant := 355;
   KEY_CLOSE                    : constant := 356;
   KEY_COMMAND                  : constant := 357;
   KEY_COPY                     : constant := 358;
   KEY_CREATE                   : constant := 359;
   KEY_END                      : constant := 360;
   KEY_EXIT                     : constant := 361;
   KEY_FIND                     : constant := 362;
   KEY_HELP                     : constant := 363;
   KEY_MARK                     : constant := 364;
   KEY_MESSAGE                  : constant := 365;
   KEY_MOVE                     : constant := 366;
   KEY_NEXT                     : constant := 367;
   KEY_OPEN                     : constant := 368;
   KEY_OPTIONS                  : constant := 369;
   KEY_PREVIOUS                 : constant := 370;
   KEY_REDO                     : constant := 371;
   KEY_REFERENCE                : constant := 372;
   KEY_REFRESH                  : constant := 373;
   KEY_REPLACE                  : constant := 374;
   KEY_RESTART                  : constant := 375;
   KEY_RESUME                   : constant := 376;
   KEY_SAVE                     : constant := 377;
   KEY_SBEG                     : constant := 378;
   KEY_SCANCEL                  : constant := 379;
   KEY_SCOMMAND                 : constant := 380;
   KEY_SCOPY                    : constant := 381;
   KEY_SCREATE                  : constant := 382;
   KEY_SDC                      : constant := 383;
   KEY_SDL                      : constant := 384;
   KEY_SELECT                   : constant := 385;
   KEY_SEND                     : constant := 386;
   KEY_SEOL                     : constant := 387;
   KEY_SEXIT                    : constant := 388;
   KEY_SFIND                    : constant := 389;
   KEY_SHELP                    : constant := 390;
   KEY_SHOME                    : constant := 391;
   KEY_SIC                      : constant := 392;
   KEY_SLEFT                    : constant := 393;
   KEY_SMESSAGE                 : constant := 394;
   KEY_SMOVE                    : constant := 395;
   KEY_SNEXT                    : constant := 396;
   KEY_SOPTIONS                 : constant := 397;
   KEY_SPREVIOUS                : constant := 398;
   KEY_SPRINT                   : constant := 399;
   KEY_SREDO                    : constant := 400;
   KEY_SREPLACE                 : constant := 401;
   KEY_SRIGHT                   : constant := 402;
   KEY_SRSUME                   : constant := 403;
   KEY_SSAVE                    : constant := 404;
   KEY_SSUSPEND                 : constant := 405;
   KEY_SUNDO                    : constant := 406;
   KEY_SUSPEND                  : constant := 407;
   KEY_UNDO                     : constant := 408;
   KEY_MOUSE                    : constant := 409;
   KEY_RESIZE                   : constant := 410;

   --  alternate character codes (ACS) from addch(3NCURSES)

   ACS_ULCORNER                 : constant := 108;
   ACS_LLCORNER                 : constant := 109;
   ACS_URCORNER                 : constant := 107;
   ACS_LRCORNER                 : constant := 106;
   ACS_LTEE                     : constant := 116;
   ACS_RTEE                     : constant := 117;
   ACS_BTEE                     : constant := 118;
   ACS_TTEE                     : constant := 119;
   ACS_HLINE                    : constant := 113;
   ACS_VLINE                    : constant := 120;
   ACS_PLUS                     : constant := 110;
   ACS_S1                       : constant := 111;
   ACS_S9                       : constant := 115;
   ACS_DIAMOND                  : constant := 96;
   ACS_CKBOARD                  : constant := 97;
   ACS_DEGREE                   : constant := 102;
   ACS_PLMINUS                  : constant := 103;
   ACS_BULLET                   : constant := 126;
   ACS_LARROW                   : constant := 44;
   ACS_RARROW                   : constant := 43;
   ACS_DARROW                   : constant := 46;
   ACS_UARROW                   : constant := 45;
   ACS_BOARD                    : constant := 104;
   ACS_LANTERN                  : constant := 105;
   ACS_BLOCK                    : constant := 48;
   ACS_S3                       : constant := 112;
   ACS_S7                       : constant := 114;
   ACS_LEQUAL                   : constant := 121;
   ACS_GEQUAL                   : constant := 122;
   ACS_PI                       : constant := 123;
   ACS_NEQUAL                   : constant := 124;
   ACS_STERLING                 : constant := 125;

   --  Menu_Options from opts(3MENU)

   O_ONEVALUE_First             : constant := 0;
   O_ONEVALUE_Last              : constant := 0;
   O_SHOWDESC_First             : constant := 1;
   O_SHOWDESC_Last              : constant := 1;
   O_ROWMAJOR_First             : constant := 2;
   O_ROWMAJOR_Last              : constant := 2;
   O_IGNORECASE_First           : constant := 3;
   O_IGNORECASE_Last            : constant := 3;
   O_SHOWMATCH_First            : constant := 4;
   O_SHOWMATCH_Last             : constant := 4;
   O_NONCYCLIC_First            : constant := 5;
   O_NONCYCLIC_Last             : constant := 5;
   Menu_Options_Size            : constant := 32;

   --  Item_Options from menu_opts(3MENU)

   O_SELECTABLE_First           : constant := 0;
   O_SELECTABLE_Last            : constant := 0;
   Item_Options_Size            : constant := 32;

   --  Field_Options from field_opts(3FORM)

   O_VISIBLE_First              : constant := 0;
   O_VISIBLE_Last               : constant := 0;
   O_ACTIVE_First               : constant := 1;
   O_ACTIVE_Last                : constant := 1;
   O_PUBLIC_First               : constant := 2;
   O_PUBLIC_Last                : constant := 2;
   O_EDIT_First                 : constant := 3;
   O_EDIT_Last                  : constant := 3;
   O_WRAP_First                 : constant := 4;
   O_WRAP_Last                  : constant := 4;
   O_BLANK_First                : constant := 5;
   O_BLANK_Last                 : constant := 5;
   O_AUTOSKIP_First             : constant := 6;
   O_AUTOSKIP_Last              : constant := 6;
   O_NULLOK_First               : constant := 7;
   O_NULLOK_Last                : constant := 7;
   O_PASSOK_First               : constant := 8;
   O_PASSOK_Last                : constant := 8;
   O_STATIC_First               : constant := 9;
   O_STATIC_Last                : constant := 9;
   Field_Options_Size           : constant := 32;

   --  Field_Options from opts(3FORM)

   O_NL_OVERLOAD_First          : constant := 0;
   O_NL_OVERLOAD_Last           : constant := 0;
   O_BS_OVERLOAD_First          : constant := 1;
   O_BS_OVERLOAD_Last           : constant := 1;

   --  MEVENT structure from mouse(3NCURSES)

   MEVENT_id_First              : constant := 0;
   MEVENT_id_Last               : constant := 15;
   MEVENT_x_First               : constant := 32;
   MEVENT_x_Last                : constant := 63;
   MEVENT_y_First               : constant := 64;
   MEVENT_y_Last                : constant := 95;
   MEVENT_z_First               : constant := 96;
   MEVENT_z_Last                : constant := 127;
   MEVENT_bstate_First          : constant := 128;
   MEVENT_bstate_Last           : constant := 159;
   MEVENT_Size                  : constant := 160;

   --  mouse events from mouse(3NCURSES)

   BUTTON1_RELEASED             : constant := 1;
   BUTTON1_PRESSED              : constant := 2;
   BUTTON1_CLICKED              : constant := 4;
   BUTTON1_DOUBLE_CLICKED       : constant := 8;
   BUTTON1_TRIPLE_CLICKED       : constant := 16;
   all_events_button_1          : constant := 31;
   BUTTON2_RELEASED             : constant := 32;
   BUTTON2_PRESSED              : constant := 64;
   BUTTON2_CLICKED              : constant := 128;
   BUTTON2_DOUBLE_CLICKED       : constant := 256;
   BUTTON2_TRIPLE_CLICKED       : constant := 512;
   all_events_button_2          : constant := 992;
   BUTTON3_RELEASED             : constant := 1024;
   BUTTON3_PRESSED              : constant := 2048;
   BUTTON3_CLICKED              : constant := 4096;
   BUTTON3_DOUBLE_CLICKED       : constant := 8192;
   BUTTON3_TRIPLE_CLICKED       : constant := 16384;
   all_events_button_3          : constant := 31744;
   BUTTON4_RELEASED             : constant := 32768;
   BUTTON4_PRESSED              : constant := 65536;
   BUTTON4_CLICKED              : constant := 131072;
   BUTTON4_DOUBLE_CLICKED       : constant := 262144;
   BUTTON4_TRIPLE_CLICKED       : constant := 524288;
   all_events_button_4          : constant := 1015808;
   BUTTON_CTRL                  : constant := 33554432;
   BUTTON_SHIFT                 : constant := 67108864;
   BUTTON_ALT                   : constant := 134217728;
   REPORT_MOUSE_POSITION        : constant := 268435456;
   ALL_MOUSE_EVENTS             : constant := 268435455;

   --  trace selection from trace(3NCURSES)

   TRACE_TIMES_First            : constant := 0;
   TRACE_TIMES_Last             : constant := 0;
   TRACE_TPUTS_First            : constant := 1;
   TRACE_TPUTS_Last             : constant := 1;
   TRACE_UPDATE_First           : constant := 2;
   TRACE_UPDATE_Last            : constant := 2;
   TRACE_MOVE_First             : constant := 3;
   TRACE_MOVE_Last              : constant := 3;
   TRACE_CHARPUT_First          : constant := 4;
   TRACE_CHARPUT_Last           : constant := 4;
   TRACE_CALLS_First            : constant := 5;
   TRACE_CALLS_Last             : constant := 5;
   TRACE_VIRTPUT_First          : constant := 6;
   TRACE_VIRTPUT_Last           : constant := 6;
   TRACE_IEVENT_First           : constant := 7;
   TRACE_IEVENT_Last            : constant := 7;
   TRACE_BITS_First             : constant := 8;
   TRACE_BITS_Last              : constant := 8;
   TRACE_ICALLS_First           : constant := 9;
   TRACE_ICALLS_Last            : constant := 9;
   TRACE_CCALLS_First           : constant := 10;
   TRACE_CCALLS_Last            : constant := 10;
   TRACE_DATABASE_First         : constant := 11;
   TRACE_DATABASE_Last          : constant := 11;
   TRACE_ATTRS_First            : constant := 12;
   TRACE_ATTRS_Last             : constant := 12;
   Trace_Size                   : constant := 32;
end Terminal_Interface.Curses_Constants;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-numeric__ads.htm0000644000175100001440000001640112340214310030630 0ustar tomusers terminal_interface-curses-forms-field_types-numeric.ads

File : terminal_interface-curses-forms-field_types-numeric.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--             Terminal_Interface.Curses.Forms.Field_Types.Numeric          --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.Numeric is
   pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.Numeric);

   type Numeric_Field is new Field_Type with
      record
         Precision   : Natural;
         Lower_Limit : Float;
         Upper_Limit : Float;
      end record;

   procedure Set_Field_Type (Fld : Field;
                             Typ : Numeric_Field);
   pragma Inline (Set_Field_Type);

end Terminal_Interface.Curses.Forms.Field_Types.Numeric;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-trace__adb.htm0000644000175100001440000001656512534703456024650 0ustar tomusers terminal_interface-curses-trace.adb

File : terminal_interface-curses-trace.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                      Terminal_Interface.Curses.Trace                     --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 2000-2009,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.11 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C; use Interfaces.C;

package body Terminal_Interface.Curses.Trace is

   procedure Trace_On (x : Trace_Attribute_Set) is
      procedure traceC (y : Trace_Attribute_Set);
      pragma Import (C, traceC, "trace");
   begin
      traceC (x);
   end Trace_On;

   procedure Trace_Put (str : String) is
      procedure tracef (format : char_array; s : char_array);
      pragma Import (C, tracef, "_traces");
      --  _traces() is defined in c_varargs_to_ada.h
   begin
      tracef (To_C ("%s"), To_C (str));
   end Trace_Put;

end Terminal_Interface.Curses.Trace;
ncurses-6.0-20160213/doc/html/ada/index.htm0000644000175100001440000000220112145772562016541 0ustar tomusers Source Browser <H2 ALIGN=CENTER>Files</H2> <A HREF="files/T.htm">[T]</A> <HR> <H2 ALIGN=CENTER>Functions/Procedures</H2> <A HREF="funcs/A.htm">[A]</A> <A HREF="funcs/B.htm">[B]</A> <A HREF="funcs/C.htm">[C]</A> <A HREF="funcs/D.htm">[D]</A> <A HREF="funcs/E.htm">[E]</A> <A HREF="funcs/F.htm">[F]</A> <A HREF="funcs/G.htm">[G]</A> <A HREF="funcs/H.htm">[H]</A> <A HREF="funcs/I.htm">[I]</A> <A HREF="funcs/K.htm">[K]</A> <A HREF="funcs/L.htm">[L]</A> <A HREF="funcs/M.htm">[M]</A> <A HREF="funcs/N.htm">[N]</A> <A HREF="funcs/O.htm">[O]</A> <A HREF="funcs/P.htm">[P]</A> <A HREF="funcs/Q.htm">[Q]</A> <A HREF="funcs/R.htm">[R]</A> <A HREF="funcs/S.htm">[S]</A> <A HREF="funcs/T.htm">[T]</A> <A HREF="funcs/U.htm">[U]</A> <A HREF="funcs/V.htm">[V]</A> <A HREF="funcs/W.htm">[W]</A> ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io__ads.htm0000644000175100001440000004350512340214310025215 0ustar tomusers terminal_interface-curses-text_io.ads

File : terminal_interface-curses-text_io.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                     Terminal_Interface.Curses.Text_IO                    --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.14 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Ada.IO_Exceptions;

package Terminal_Interface.Curses.Text_IO is

   use type Ada.Text_IO.Count;
   subtype Count is Ada.Text_IO.Count;
   subtype Positive_Count is Count range 1 .. Count'Last;

   subtype Field is Ada.Text_IO.Field;
   subtype Number_Base is Integer range 2 .. 16;

   type Type_Set is (Lower_Case, Upper_Case, Mixed_Case);

   --  For most of the routines you will see a version without a Window
   --  type parameter. They will operate on a default window, which can
   --  be set by the user. It is initially equal to Standard_Window.

   procedure Set_Window (Win : Window);
   --  Set Win as the default window

   function Get_Window return Window;
   --  Get the current default window

   procedure Flush (Win : Window);
   procedure Flush;

   --------------------------------------------
   -- Specification of line and page lengths --
   --------------------------------------------

   --  There are no set routines in this package. I assume, that you allocate
   --  the window with an appropriate size.
   --  A scroll-window is interpreted as an page with unbounded page length,
   --  i.e. it returns the conventional 0 as page length.

   function Line_Length (Win : Window) return Count;
   function Line_Length return Count;

   function Page_Length (Win : Window) return Count;
   function Page_Length return Count;

   ------------------------------------
   -- Column, Line, and Page Control --
   ------------------------------------
   procedure New_Line (Win : Window; Spacing : Positive_Count := 1);
   procedure New_Line (Spacing : Positive_Count := 1);

   procedure New_Page (Win : Window);
   procedure New_Page;

   procedure Set_Col (Win : Window;  To : Positive_Count);
   procedure Set_Col (To : Positive_Count);

   procedure Set_Line (Win : Window; To : Positive_Count);
   procedure Set_Line (To : Positive_Count);

   function Col (Win : Window) return Positive_Count;
   function Col return Positive_Count;

   function Line (Win : Window) return Positive_Count;
   function Line return Positive_Count;

   -----------------------
   -- Characters-Output --
   -----------------------

   procedure Put (Win  : Window; Item : Character);
   procedure Put (Item : Character);

   --------------------
   -- Strings-Output --
   --------------------

   procedure Put (Win  : Window; Item : String);
   procedure Put (Item : String);

   procedure Put_Line
     (Win  : Window;
      Item : String);

   procedure Put_Line
     (Item : String);

   --  Exceptions

   Status_Error : exception renames Ada.IO_Exceptions.Status_Error;
   Mode_Error   : exception renames Ada.IO_Exceptions.Mode_Error;
   Name_Error   : exception renames Ada.IO_Exceptions.Name_Error;
   Use_Error    : exception renames Ada.IO_Exceptions.Use_Error;
   Device_Error : exception renames Ada.IO_Exceptions.Device_Error;
   End_Error    : exception renames Ada.IO_Exceptions.End_Error;
   Data_Error   : exception renames Ada.IO_Exceptions.Data_Error;
   Layout_Error : exception renames Ada.IO_Exceptions.Layout_Error;

end Terminal_Interface.Curses.Text_IO;
ncurses-6.0-20160213/doc/html/ada/funcs.htm0000644000175100001440000000171712145772563016564 0ustar tomusers

Functions/Procedures

[A] [B] [C] [D] [E] [F] [G] [H] [I] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-alpha__adb.htm0000644000175100001440000002100712340214310030230 0ustar tomusers terminal_interface-curses-forms-field_types-alpha.adb

File : terminal_interface-curses-forms-field_types-alpha.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--              Terminal_Interface.Curses.Forms.Field_Types.Alpha           --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.13 @
--  @Date: 2014/05/24 21:31:05 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms.Field_Types.Alpha is

   procedure Set_Field_Type (Fld : Field;
                             Typ : Alpha_Field)
   is
      function Set_Fld_Type (F    : Field := Fld;
                             Arg1 : C_Int) return Eti_Error;
      pragma Import (C, Set_Fld_Type, "set_field_type_alpha");

   begin
      Eti_Exception (Set_Fld_Type (Arg1 => C_Int (Typ.Minimum_Field_Width)));
      Wrap_Builtin (Fld, Typ);
   end Set_Field_Type;

end Terminal_Interface.Curses.Forms.Field_Types.Alpha;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-menus-menu_user_data__ads.htm0000644000175100001440000002201512340214310027653 0ustar tomusers terminal_interface-curses-menus-menu_user_data.ads

File : terminal_interface-curses-menus-menu_user_data.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Menus.Menu_User_Data             --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.15 @
--  Binding Version 01.00
------------------------------------------------------------------------------

generic
   type User is limited private;
   type User_Access is access User;
package Terminal_Interface.Curses.Menus.Menu_User_Data is
   pragma Preelaborate (Terminal_Interface.Curses.Menus.Menu_User_Data);

   --  |=====================================================================
   --  | Man page menu_userptr.3x
   --  |=====================================================================

   --  #1A NAME="AFU_1"#2|
   procedure Set_User_Data (Men  : Menu;
                            Data : User_Access);
   --  AKA: set_menu_userptr
   pragma Inline (Set_User_Data);

   --  #1A NAME="AFU_2"#2|
   procedure Get_User_Data (Men  : Menu;
                            Data : out User_Access);
   --  AKA: menu_userptr

   --  #1A NAME="AFU_3"#2|
   function Get_User_Data (Men  : Menu) return User_Access;
   --  AKA: menu_userptr
   --  Same as function
   pragma Inline (Get_User_Data);

end Terminal_Interface.Curses.Menus.Menu_User_Data;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-enumeration__ads.htm0000644000175100001440000003001412340214310031510 0ustar tomusers terminal_interface-curses-forms-field_types-enumeration.ads

File : terminal_interface-curses-forms-field_types-enumeration.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--           Terminal_Interface.Curses.Forms.Field_Types.Enumeration        --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C.Strings;

package Terminal_Interface.Curses.Forms.Field_Types.Enumeration is
   pragma Preelaborate
     (Terminal_Interface.Curses.Forms.Field_Types.Enumeration);

   type String_Access is access String;

   --  Type_Set is used by the child package Ada
   type Type_Set is (Lower_Case, Upper_Case, Mixed_Case);

   type Enum_Array is array (Positive range <>)
     of String_Access;

   type Enumeration_Info (C : Positive) is
      record
         Names                : Enum_Array (1 .. C);
         Case_Sensitive       : Boolean := False;
         Match_Must_Be_Unique : Boolean := False;
      end record;

   type Enumeration_Field is new Field_Type with private;

   function Create (Info : Enumeration_Info;
                    Auto_Release_Names : Boolean := False)
                    return Enumeration_Field;
   --  Make an fieldtype from the info. Enumerations are special, because
   --  they normally don't copy the enum values into a private store, so
   --  we have to care for the lifetime of the info we provide.
   --  The Auto_Release_Names flag may be used to automatically releases
   --  the strings in the Names array of the Enumeration_Info.

   function Make_Enumeration_Type (Info : Enumeration_Info;
                                   Auto_Release_Names : Boolean := False)
                                   return Enumeration_Field renames Create;

   procedure Release (Enum : in out Enumeration_Field);
   --  But we may want to release the field to release the memory allocated
   --  by it internally. After that the Enumeration field is no longer usable.

   --  The next type defintions are all ncurses extensions. They are typically
   --  not available in other curses implementations.

   procedure Set_Field_Type (Fld : Field;
                             Typ : Enumeration_Field);
   pragma Inline (Set_Field_Type);

private
   type CPA_Access is access Interfaces.C.Strings.chars_ptr_array;

   type Enumeration_Field is new Field_Type with
      record
         Case_Sensitive       : Boolean := False;
         Match_Must_Be_Unique : Boolean := False;
         Arr                  : CPA_Access := null;
      end record;

end Terminal_Interface.Curses.Forms.Field_Types.Enumeration;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms__ads.htm0000644000175100001440000032452212340214310024671 0ustar tomusers terminal_interface-curses-forms.ads

File : terminal_interface-curses-forms.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                      Terminal_Interface.Curses.Form                      --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2009,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.33 @
--  @Date: 2014/05/24 21:31:57 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with System;
with Ada.Characters.Latin_1;

package Terminal_Interface.Curses.Forms is
   pragma Preelaborate (Terminal_Interface.Curses.Forms);
   pragma Linker_Options ("-lform" & Curses_Constants.DFT_ARG_SUFFIX);

   Space : Character renames Ada.Characters.Latin_1.Space;

   type Field        is private;
   type Form         is private;

   Null_Field        : constant Field;
   Null_Form         : constant Form;

   type Field_Justification is (None,
                                Left,
                                Center,
                                Right);

   type Field_Option_Set is
      record
         Visible   : Boolean;
         Active    : Boolean;
         Public    : Boolean;
         Edit      : Boolean;
         Wrap      : Boolean;
         Blank     : Boolean;
         Auto_Skip : Boolean;
         Null_Ok   : Boolean;
         Pass_Ok   : Boolean;
         Static    : Boolean;
      end record;
   pragma Convention (C_Pass_By_Copy, Field_Option_Set);

   for Field_Option_Set use
      record
         Visible   at 0 range Curses_Constants.O_VISIBLE_First
           .. Curses_Constants.O_VISIBLE_Last;
         Active    at 0 range Curses_Constants.O_ACTIVE_First
           .. Curses_Constants.O_ACTIVE_Last;
         Public    at 0 range Curses_Constants.O_PUBLIC_First
           .. Curses_Constants.O_PUBLIC_Last;
         Edit      at 0 range Curses_Constants.O_EDIT_First
           .. Curses_Constants.O_EDIT_Last;
         Wrap      at 0 range Curses_Constants.O_WRAP_First
           .. Curses_Constants.O_WRAP_Last;
         Blank     at 0 range Curses_Constants.O_BLANK_First
           .. Curses_Constants.O_BLANK_Last;
         Auto_Skip at 0 range Curses_Constants.O_AUTOSKIP_First
           .. Curses_Constants.O_AUTOSKIP_Last;
         Null_Ok   at 0 range Curses_Constants.O_NULLOK_First
           .. Curses_Constants.O_NULLOK_Last;
         Pass_Ok   at 0 range Curses_Constants.O_PASSOK_First
           .. Curses_Constants.O_PASSOK_Last;
         Static    at 0 range Curses_Constants.O_STATIC_First
           .. Curses_Constants.O_STATIC_Last;
      end record;
   pragma Warnings (Off);
   for Field_Option_Set'Size use Curses_Constants.Field_Options_Size;
   pragma Warnings (On);

   function Default_Field_Options return Field_Option_Set;
   --  The initial defaults for the field options.
   pragma Inline (Default_Field_Options);

   type Form_Option_Set is
      record
         NL_Overload : Boolean;
         BS_Overload : Boolean;
      end record;
   pragma Convention (C_Pass_By_Copy, Form_Option_Set);

   for Form_Option_Set use
      record
         NL_Overload at 0 range Curses_Constants.O_NL_OVERLOAD_First
           .. Curses_Constants.O_NL_OVERLOAD_Last;
         BS_Overload at 0 range Curses_Constants.O_BS_OVERLOAD_First
           .. Curses_Constants.O_BS_OVERLOAD_Last;
      end record;
   pragma Warnings (Off);
   for Form_Option_Set'Size use Curses_Constants.Field_Options_Size;
   pragma Warnings (On);

   function Default_Form_Options return Form_Option_Set;
   --  The initial defaults for the form options.
   pragma Inline (Default_Form_Options);

   type Buffer_Number is new Natural;

   type Field_Array is array (Positive range <>) of aliased Field;
   pragma Convention (C, Field_Array);

   type Field_Array_Access is access Field_Array;

   procedure Free (FA          : in out Field_Array_Access;
                   Free_Fields : Boolean := False);
   --  Release the memory for an allocated field array
   --  If Free_Fields is True, call Delete() for all the fields in
   --  the array.

   subtype Form_Request_Code is Key_Code range (Key_Max + 1) .. (Key_Max + 57);

   --  The prefix F_ stands for "Form Request"
   F_Next_Page                : constant Form_Request_Code := Key_Max + 1;
   F_Previous_Page            : constant Form_Request_Code := Key_Max + 2;
   F_First_Page               : constant Form_Request_Code := Key_Max + 3;
   F_Last_Page                : constant Form_Request_Code := Key_Max + 4;

   F_Next_Field               : constant Form_Request_Code := Key_Max + 5;
   F_Previous_Field           : constant Form_Request_Code := Key_Max + 6;
   F_First_Field              : constant Form_Request_Code := Key_Max + 7;
   F_Last_Field               : constant Form_Request_Code := Key_Max + 8;
   F_Sorted_Next_Field        : constant Form_Request_Code := Key_Max + 9;
   F_Sorted_Previous_Field    : constant Form_Request_Code := Key_Max + 10;
   F_Sorted_First_Field       : constant Form_Request_Code := Key_Max + 11;
   F_Sorted_Last_Field        : constant Form_Request_Code := Key_Max + 12;
   F_Left_Field               : constant Form_Request_Code := Key_Max + 13;
   F_Right_Field              : constant Form_Request_Code := Key_Max + 14;
   F_Up_Field                 : constant Form_Request_Code := Key_Max + 15;
   F_Down_Field               : constant Form_Request_Code := Key_Max + 16;

   F_Next_Char                : constant Form_Request_Code := Key_Max + 17;
   F_Previous_Char            : constant Form_Request_Code := Key_Max + 18;
   F_Next_Line                : constant Form_Request_Code := Key_Max + 19;
   F_Previous_Line            : constant Form_Request_Code := Key_Max + 20;
   F_Next_Word                : constant Form_Request_Code := Key_Max + 21;
   F_Previous_Word            : constant Form_Request_Code := Key_Max + 22;
   F_Begin_Field              : constant Form_Request_Code := Key_Max + 23;
   F_End_Field                : constant Form_Request_Code := Key_Max + 24;
   F_Begin_Line               : constant Form_Request_Code := Key_Max + 25;
   F_End_Line                 : constant Form_Request_Code := Key_Max + 26;
   F_Left_Char                : constant Form_Request_Code := Key_Max + 27;
   F_Right_Char               : constant Form_Request_Code := Key_Max + 28;
   F_Up_Char                  : constant Form_Request_Code := Key_Max + 29;
   F_Down_Char                : constant Form_Request_Code := Key_Max + 30;

   F_New_Line                 : constant Form_Request_Code := Key_Max + 31;
   F_Insert_Char              : constant Form_Request_Code := Key_Max + 32;
   F_Insert_Line              : constant Form_Request_Code := Key_Max + 33;
   F_Delete_Char              : constant Form_Request_Code := Key_Max + 34;
   F_Delete_Previous          : constant Form_Request_Code := Key_Max + 35;
   F_Delete_Line              : constant Form_Request_Code := Key_Max + 36;
   F_Delete_Word              : constant Form_Request_Code := Key_Max + 37;
   F_Clear_EOL                : constant Form_Request_Code := Key_Max + 38;
   F_Clear_EOF                : constant Form_Request_Code := Key_Max + 39;
   F_Clear_Field              : constant Form_Request_Code := Key_Max + 40;
   F_Overlay_Mode             : constant Form_Request_Code := Key_Max + 41;
   F_Insert_Mode              : constant Form_Request_Code := Key_Max + 42;

   --  Vertical Scrolling
   F_ScrollForward_Line       : constant Form_Request_Code := Key_Max + 43;
   F_ScrollBackward_Line      : constant Form_Request_Code := Key_Max + 44;
   F_ScrollForward_Page       : constant Form_Request_Code := Key_Max + 45;
   F_ScrollBackward_Page      : constant Form_Request_Code := Key_Max + 46;
   F_ScrollForward_HalfPage   : constant Form_Request_Code := Key_Max + 47;
   F_ScrollBackward_HalfPage  : constant Form_Request_Code := Key_Max + 48;

   --  Horizontal Scrolling
   F_HScrollForward_Char      : constant Form_Request_Code := Key_Max + 49;
   F_HScrollBackward_Char     : constant Form_Request_Code := Key_Max + 50;
   F_HScrollForward_Line      : constant Form_Request_Code := Key_Max + 51;
   F_HScrollBackward_Line     : constant Form_Request_Code := Key_Max + 52;
   F_HScrollForward_HalfLine  : constant Form_Request_Code := Key_Max + 53;
   F_HScrollBackward_HalfLine : constant Form_Request_Code := Key_Max + 54;

   F_Validate_Field           : constant Form_Request_Code := Key_Max + 55;
   F_Next_Choice              : constant Form_Request_Code := Key_Max + 56;
   F_Previous_Choice          : constant Form_Request_Code := Key_Max + 57;

   --  For those who like the old 'C' style request names
   REQ_NEXT_PAGE    : Form_Request_Code renames F_Next_Page;
   REQ_PREV_PAGE    : Form_Request_Code renames F_Previous_Page;
   REQ_FIRST_PAGE   : Form_Request_Code renames F_First_Page;
   REQ_LAST_PAGE    : Form_Request_Code renames F_Last_Page;

   REQ_NEXT_FIELD   : Form_Request_Code renames F_Next_Field;
   REQ_PREV_FIELD   : Form_Request_Code renames F_Previous_Field;
   REQ_FIRST_FIELD  : Form_Request_Code renames F_First_Field;
   REQ_LAST_FIELD   : Form_Request_Code renames F_Last_Field;
   REQ_SNEXT_FIELD  : Form_Request_Code renames F_Sorted_Next_Field;
   REQ_SPREV_FIELD  : Form_Request_Code renames F_Sorted_Previous_Field;
   REQ_SFIRST_FIELD : Form_Request_Code renames F_Sorted_First_Field;
   REQ_SLAST_FIELD  : Form_Request_Code renames F_Sorted_Last_Field;
   REQ_LEFT_FIELD   : Form_Request_Code renames F_Left_Field;
   REQ_RIGHT_FIELD  : Form_Request_Code renames F_Right_Field;
   REQ_UP_FIELD     : Form_Request_Code renames F_Up_Field;
   REQ_DOWN_FIELD   : Form_Request_Code renames F_Down_Field;

   REQ_NEXT_CHAR    : Form_Request_Code renames F_Next_Char;
   REQ_PREV_CHAR    : Form_Request_Code renames F_Previous_Char;
   REQ_NEXT_LINE    : Form_Request_Code renames F_Next_Line;
   REQ_PREV_LINE    : Form_Request_Code renames F_Previous_Line;
   REQ_NEXT_WORD    : Form_Request_Code renames F_Next_Word;
   REQ_PREV_WORD    : Form_Request_Code renames F_Previous_Word;
   REQ_BEG_FIELD    : Form_Request_Code renames F_Begin_Field;
   REQ_END_FIELD    : Form_Request_Code renames F_End_Field;
   REQ_BEG_LINE     : Form_Request_Code renames F_Begin_Line;
   REQ_END_LINE     : Form_Request_Code renames F_End_Line;
   REQ_LEFT_CHAR    : Form_Request_Code renames F_Left_Char;
   REQ_RIGHT_CHAR   : Form_Request_Code renames F_Right_Char;
   REQ_UP_CHAR      : Form_Request_Code renames F_Up_Char;
   REQ_DOWN_CHAR    : Form_Request_Code renames F_Down_Char;

   REQ_NEW_LINE     : Form_Request_Code renames F_New_Line;
   REQ_INS_CHAR     : Form_Request_Code renames F_Insert_Char;
   REQ_INS_LINE     : Form_Request_Code renames F_Insert_Line;
   REQ_DEL_CHAR     : Form_Request_Code renames F_Delete_Char;
   REQ_DEL_PREV     : Form_Request_Code renames F_Delete_Previous;
   REQ_DEL_LINE     : Form_Request_Code renames F_Delete_Line;
   REQ_DEL_WORD     : Form_Request_Code renames F_Delete_Word;
   REQ_CLR_EOL      : Form_Request_Code renames F_Clear_EOL;
   REQ_CLR_EOF      : Form_Request_Code renames F_Clear_EOF;
   REQ_CLR_FIELD    : Form_Request_Code renames F_Clear_Field;
   REQ_OVL_MODE     : Form_Request_Code renames F_Overlay_Mode;
   REQ_INS_MODE     : Form_Request_Code renames F_Insert_Mode;

   REQ_SCR_FLINE    : Form_Request_Code renames F_ScrollForward_Line;
   REQ_SCR_BLINE    : Form_Request_Code renames F_ScrollBackward_Line;
   REQ_SCR_FPAGE    : Form_Request_Code renames F_ScrollForward_Page;
   REQ_SCR_BPAGE    : Form_Request_Code renames F_ScrollBackward_Page;
   REQ_SCR_FHPAGE   : Form_Request_Code renames F_ScrollForward_HalfPage;
   REQ_SCR_BHPAGE   : Form_Request_Code renames F_ScrollBackward_HalfPage;

   REQ_SCR_FCHAR    : Form_Request_Code renames F_HScrollForward_Char;
   REQ_SCR_BCHAR    : Form_Request_Code renames F_HScrollBackward_Char;
   REQ_SCR_HFLINE   : Form_Request_Code renames F_HScrollForward_Line;
   REQ_SCR_HBLINE   : Form_Request_Code renames F_HScrollBackward_Line;
   REQ_SCR_HFHALF   : Form_Request_Code renames F_HScrollForward_HalfLine;
   REQ_SCR_HBHALF   : Form_Request_Code renames F_HScrollBackward_HalfLine;

   REQ_VALIDATION   : Form_Request_Code renames F_Validate_Field;
   REQ_NEXT_CHOICE  : Form_Request_Code renames F_Next_Choice;
   REQ_PREV_CHOICE  : Form_Request_Code renames F_Previous_Choice;

   procedure Request_Name (Key  : Form_Request_Code;
                           Name : out String);

   function  Request_Name (Key : Form_Request_Code) return String;
   --  Same as function
   pragma Inline (Request_Name);

   ------------------
   --  Exceptions  --
   ------------------
   Form_Exception : exception;

   --  |=====================================================================
   --  | Man page form_field_new.3x
   --  |=====================================================================

   --  #1A NAME="AFU_1"#2|
   function Create (Height       : Line_Count;
                    Width        : Column_Count;
                    Top          : Line_Position;
                    Left         : Column_Position;
                    Off_Screen   : Natural := 0;
                    More_Buffers : Buffer_Number := Buffer_Number'First)
                    return Field;
   --  AKA: new_field()
   --  An overloaded Create is defined later. Pragma Inline appears there.

   --  #1A NAME="AFU_2"#2|
   function New_Field (Height       : Line_Count;
                       Width        : Column_Count;
                       Top          : Line_Position;
                       Left         : Column_Position;
                       Off_Screen   : Natural := 0;
                       More_Buffers : Buffer_Number := Buffer_Number'First)
                       return Field renames Create;
   --  AKA: new_field()
   pragma Inline (New_Field);

   --  #1A NAME="AFU_3"#2|
   procedure Delete (Fld : in out Field);
   --  AKA: free_field()
   --  Reset Fld to Null_Field
   --  An overloaded Delete is defined later. Pragma Inline appears there.

   --  #1A NAME="AFU_4"#2|
   function Duplicate (Fld  : Field;
                       Top  : Line_Position;
                       Left : Column_Position) return Field;
   --  AKA: dup_field()
   pragma Inline (Duplicate);

   --  #1A NAME="AFU_5"#2|
   function Link (Fld  : Field;
                  Top  : Line_Position;
                  Left : Column_Position) return Field;
   --  AKA: link_field()
   pragma Inline (Link);

   --  |=====================================================================
   --  | Man page form_field_just.3x
   --  |=====================================================================

   --  #1A NAME="AFU_6"#2|
   procedure Set_Justification (Fld  : Field;
                                Just : Field_Justification := None);
   --  AKA: set_field_just()
   pragma Inline (Set_Justification);

   --  #1A NAME="AFU_7"#2|
   function Get_Justification (Fld : Field) return Field_Justification;
   --  AKA: field_just()
   pragma Inline (Get_Justification);

   --  |=====================================================================
   --  | Man page form_field_buffer.3x
   --  |=====================================================================

   --  #1A NAME="AFU_8"#2|
   procedure Set_Buffer
     (Fld    : Field;
      Buffer : Buffer_Number := Buffer_Number'First;
      Str    : String);
   --  AKA: set_field_buffer()
   --  Not inlined

   --  #1A NAME="AFU_9"#2|
   procedure Get_Buffer
     (Fld    : Field;
      Buffer : Buffer_Number := Buffer_Number'First;
      Str    : out String);
   --  AKA: field_buffer()

   function Get_Buffer
     (Fld    : Field;
      Buffer : Buffer_Number := Buffer_Number'First) return String;
   --  AKA: field_buffer()
   --  Same but as function
   pragma Inline (Get_Buffer);

   --  #1A NAME="AFU_10"#2|
   procedure Set_Status (Fld    : Field;
                         Status : Boolean := True);
   --  AKA: set_field_status()
   pragma Inline (Set_Status);

   --  #1A NAME="AFU_11"#2|
   function Changed (Fld : Field) return Boolean;
   --  AKA: field_status()
   pragma Inline (Changed);

   --  #1A NAME="AFU_12"#2|
   procedure Set_Maximum_Size (Fld : Field;
                               Max : Natural := 0);
   --  AKA: set_field_max()
   pragma Inline (Set_Maximum_Size);

   --  |=====================================================================
   --  | Man page form_field_opts.3x
   --  |=====================================================================

   --  #1A NAME="AFU_13"#2|
   procedure Set_Options (Fld     : Field;
                          Options : Field_Option_Set);
   --  AKA: set_field_opts()
   --  An overloaded version is defined later. Pragma Inline appears there

   --  #1A NAME="AFU_14"#2|
   procedure Switch_Options (Fld     : Field;
                             Options : Field_Option_Set;
                             On      : Boolean := True);
   --  AKA: field_opts_on()
   --  AKA: field_opts_off()
   --  An overloaded version is defined later. Pragma Inline appears there

   --  #1A NAME="AFU_15"#2|
   procedure Get_Options (Fld     : Field;
                          Options : out Field_Option_Set);
   --  AKA: field_opts()

   --  #1A NAME="AFU_16"#2|
   function Get_Options (Fld : Field := Null_Field)
                         return Field_Option_Set;
   --  AKA: field_opts()
   --  An overloaded version is defined later. Pragma Inline appears there

   --  |=====================================================================
   --  | Man page form_field_attributes.3x
   --  |=====================================================================

   --  #1A NAME="AFU_17"#2|
   procedure Set_Foreground
     (Fld   : Field;
      Fore  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First);
   --  AKA: set_field_fore()
   pragma Inline (Set_Foreground);

   --  #1A NAME="AFU_18"#2|
   procedure Foreground (Fld  : Field;
                         Fore : out Character_Attribute_Set);
   --  AKA: field_fore()

   --  #1A NAME="AFU_19"#2|
   procedure Foreground (Fld   : Field;
                         Fore  : out Character_Attribute_Set;
                         Color : out Color_Pair);
   --  AKA: field_fore()
   pragma Inline (Foreground);

   --  #1A NAME="AFU_20"#2|
   procedure Set_Background
     (Fld   : Field;
      Back  : Character_Attribute_Set := Normal_Video;
      Color : Color_Pair := Color_Pair'First);
   --  AKA: set_field_back()
   pragma Inline (Set_Background);

   --  #1A NAME="AFU_21"#2|
   procedure Background (Fld  : Field;
                         Back : out Character_Attribute_Set);
   --  AKA: field_back()

   --  #1A NAME="AFU_22"#2|
   procedure Background (Fld   : Field;
                         Back  : out Character_Attribute_Set;
                         Color : out Color_Pair);
   --  AKA: field_back()
   pragma Inline (Background);

   --  #1A NAME="AFU_23"#2|
   procedure Set_Pad_Character (Fld : Field;
                                Pad : Character := Space);
   --  AKA: set_field_pad()
   pragma Inline (Set_Pad_Character);

   --  #1A NAME="AFU_24"#2|
   procedure Pad_Character (Fld : Field;
                            Pad : out Character);
   --  AKA: field_pad()
   pragma Inline (Pad_Character);

   --  |=====================================================================
   --  | Man page form_field_info.3x
   --  |=====================================================================

   --  #1A NAME="AFU_25"#2|
   procedure Info (Fld                : Field;
                   Lines              : out Line_Count;
                   Columns            : out Column_Count;
                   First_Row          : out Line_Position;
                   First_Column       : out Column_Position;
                   Off_Screen         : out Natural;
                   Additional_Buffers : out Buffer_Number);
   --  AKA: field_info()
   pragma Inline (Info);

   --  #1A NAME="AFU_26"#2|
   procedure Dynamic_Info (Fld     : Field;
                           Lines   : out Line_Count;
                           Columns : out Column_Count;
                           Max     : out Natural);
   --  AKA: dynamic_field_info()
   pragma Inline (Dynamic_Info);

   --  |=====================================================================
   --  | Man page form_win.3x
   --  |=====================================================================

   --  #1A NAME="AFU_27"#2|
   procedure Set_Window (Frm : Form;
                         Win : Window);
   --  AKA: set_form_win()
   pragma Inline (Set_Window);

   --  #1A NAME="AFU_28"#2|
   function Get_Window (Frm : Form) return Window;
   --  AKA: form_win()
   pragma Inline (Get_Window);

   --  #1A NAME="AFU_29"#2|
   procedure Set_Sub_Window (Frm : Form;
                             Win : Window);
   --  AKA: set_form_sub()
   pragma Inline (Set_Sub_Window);

   --  #1A NAME="AFU_30"#2|
   function Get_Sub_Window (Frm : Form) return Window;
   --  AKA: form_sub()
   pragma Inline (Get_Sub_Window);

   --  #1A NAME="AFU_31"#2|
   procedure Scale (Frm     : Form;
                    Lines   : out Line_Count;
                    Columns : out Column_Count);
   --  AKA: scale_form()
   pragma Inline (Scale);

   --  |=====================================================================
   --  | Man page form_hook.3x
   --  |=====================================================================

   type Form_Hook_Function is access procedure (Frm : Form);
   pragma Convention (C, Form_Hook_Function);

   --  #1A NAME="AFU_32"#2|
   procedure Set_Field_Init_Hook (Frm  : Form;
                                  Proc : Form_Hook_Function);
   --  AKA: set_field_init()
   pragma Inline (Set_Field_Init_Hook);

   --  #1A NAME="AFU_33"#2|
   procedure Set_Field_Term_Hook (Frm  : Form;
                                  Proc : Form_Hook_Function);
   --  AKA: set_field_term()
   pragma Inline (Set_Field_Term_Hook);

   --  #1A NAME="AFU_34"#2|
   procedure Set_Form_Init_Hook (Frm  : Form;
                                 Proc : Form_Hook_Function);
   --  AKA: set_form_init()
   pragma Inline (Set_Form_Init_Hook);

   --  #1A NAME="AFU_35"#2|
   procedure Set_Form_Term_Hook (Frm  : Form;
                                 Proc : Form_Hook_Function);
   --  AKA: set_form_term()
   pragma Inline (Set_Form_Term_Hook);

   --  #1A NAME="AFU_36"#2|
   function Get_Field_Init_Hook (Frm : Form) return Form_Hook_Function;
   --  AKA: field_init()
   pragma Import (C, Get_Field_Init_Hook, "field_init");

   --  #1A NAME="AFU_37"#2|
   function Get_Field_Term_Hook (Frm : Form) return Form_Hook_Function;
   --  AKA: field_term()
   pragma Import (C, Get_Field_Term_Hook, "field_term");

   --  #1A NAME="AFU_38"#2|
   function Get_Form_Init_Hook (Frm : Form) return Form_Hook_Function;
   --  AKA: form_init()
   pragma Import (C, Get_Form_Init_Hook, "form_init");

   --  #1A NAME="AFU_39"#2|
   function Get_Form_Term_Hook (Frm : Form) return Form_Hook_Function;
   --  AKA: form_term()
   pragma Import (C, Get_Form_Term_Hook, "form_term");

   --  |=====================================================================
   --  | Man page form_field.3x
   --  |=====================================================================

   --  #1A NAME="AFU_40"#2|
   procedure Redefine (Frm  : Form;
                       Flds : Field_Array_Access);
   --  AKA: set_form_fields()
   pragma Inline (Redefine);

   --  #1A NAME="AFU_41"#2|
   procedure Set_Fields (Frm  : Form;
                         Flds : Field_Array_Access) renames Redefine;
   --  AKA: set_form_fields()
   --  pragma Inline (Set_Fields);

   --  #1A NAME="AFU_42"#2|
   function Fields (Frm   : Form;
                    Index : Positive) return Field;
   --  AKA: form_fields()
   pragma Inline (Fields);

   --  #1A NAME="AFU_43"#2|
   function Field_Count (Frm : Form) return Natural;
   --  AKA: field_count()
   pragma Inline (Field_Count);

   --  #1A NAME="AFU_44"#2|
   procedure Move (Fld    : Field;
                   Line   : Line_Position;
                   Column : Column_Position);
   --  AKA: move_field()
   pragma Inline (Move);

   --  |=====================================================================
   --  | Man page form_new.3x
   --  |=====================================================================

   --  #1A NAME="AFU_45"#2|
   function Create (Fields : Field_Array_Access) return Form;
   --  AKA: new_form()
   pragma Inline (Create);

   --  #1A NAME="AFU_46"#2|
   function New_Form (Fields : Field_Array_Access) return Form
     renames Create;
   --  AKA: new_form()
   --  pragma Inline (New_Form);

   --  #1A NAME="AFU_47"#2|
   procedure Delete (Frm : in out Form);
   --  AKA: free_form()
   --  Reset Frm to Null_Form
   pragma Inline (Delete);

   --  |=====================================================================
   --  | Man page form_opts.3x
   --  |=====================================================================

   --  #1A NAME="AFU_48"#2|
   procedure Set_Options (Frm     : Form;
                          Options : Form_Option_Set);
   --  AKA: set_form_opts()
   pragma Inline (Set_Options);

   --  #1A NAME="AFU_49"#2|
   procedure Switch_Options (Frm     : Form;
                             Options : Form_Option_Set;
                             On      : Boolean := True);
   --  AKA: form_opts_on()
   --  AKA: form_opts_off()
   pragma Inline (Switch_Options);

   --  #1A NAME="AFU_50"#2|
   procedure Get_Options (Frm     : Form;
                          Options : out Form_Option_Set);
   --  AKA: form_opts()

   --  #1A NAME="AFU_51"#2|
   function Get_Options (Frm : Form := Null_Form) return Form_Option_Set;
   --  AKA: form_opts()
   pragma Inline (Get_Options);

   --  |=====================================================================
   --  | Man page form_post.3x
   --  |=====================================================================

   --  #1A NAME="AFU_52"#2|
   procedure Post (Frm  : Form;
                   Post : Boolean := True);
   --  AKA: post_form()
   --  AKA: unpost_form()
   pragma Inline (Post);

   --  |=====================================================================
   --  | Man page form_cursor.3x
   --  |=====================================================================

   --  #1A NAME="AFU_53"#2|
   procedure Position_Cursor (Frm : Form);
   --  AKA: pos_form_cursor()
   pragma Inline (Position_Cursor);

   --  |=====================================================================
   --  | Man page form_data.3x
   --  |=====================================================================

   --  #1A NAME="AFU_54"#2|
   function Data_Ahead (Frm : Form) return Boolean;
   --  AKA: data_ahead()
   pragma Inline (Data_Ahead);

   --  #1A NAME="AFU_55"#2|
   function Data_Behind (Frm : Form) return Boolean;
   --  AKA: data_behind()
   pragma Inline (Data_Behind);

   --  |=====================================================================
   --  | Man page form_driver.3x
   --  |=====================================================================

   type Driver_Result is (Form_Ok,
                          Request_Denied,
                          Unknown_Request,
                          Invalid_Field);

   --  #1A NAME="AFU_56"#2|
   function Driver (Frm : Form;
                    Key : Key_Code) return Driver_Result;
   --  AKA: form_driver()
   --  Driver not inlined

   --  |=====================================================================
   --  | Man page form_page.3x
   --  |=====================================================================

   type Page_Number is new Natural;

   --  #1A NAME="AFU_57"#2|
   procedure Set_Current (Frm : Form;
                          Fld : Field);
   --  AKA: set_current_field()
   pragma Inline (Set_Current);

   --  #1A NAME="AFU_58"#2|
   function Current (Frm : Form) return Field;
   --  AKA: current_field()
   pragma Inline (Current);

   --  #1A NAME="AFU_59"#2|
   procedure Set_Page (Frm  : Form;
                       Page : Page_Number := Page_Number'First);
   --  AKA: set_form_page()
   pragma Inline (Set_Page);

   --  #1A NAME="AFU_60"#2|
   function Page (Frm : Form) return Page_Number;
   --  AKA: form_page()
   pragma Inline (Page);

   --  #1A NAME="AFU_61"#2|
   function Get_Index (Fld : Field) return Positive;
   --  AKA: field_index()
   --  Please note that in this binding we start the numbering of fields
   --  with 1. So this is number is one more than you get from the low
   --  level call.
   pragma Inline (Get_Index);

   --  |=====================================================================
   --  | Man page form_new_page.3x
   --  |=====================================================================

   --  #1A NAME="AFU_62"#2|
   procedure Set_New_Page (Fld      : Field;
                           New_Page : Boolean := True);
   --  AKA: set_new_page()
   pragma Inline (Set_New_Page);

   --  #1A NAME="AFU_63"#2|
   function Is_New_Page (Fld : Field) return Boolean;
   --  AKA: new_page()
   pragma Inline (Is_New_Page);

   --  |=====================================================================
   --  | Man page form_requestname.3x
   --  |=====================================================================
   --  Not Implemented: form_request_name, form_request_by_name

------------------------------------------------------------------------------
private
   type Field is new System.Storage_Elements.Integer_Address;
   type Form  is new System.Storage_Elements.Integer_Address;

   Null_Field : constant Field := 0;
   Null_Form  : constant Form  := 0;

end Terminal_Interface.Curses.Forms;
ncurses-6.0-20160213/doc/html/ada/files.htm0000644000175100001440000000051212145772562016537 0ustar tomusers

Files

[T] ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-forms-field_types-ipv4_address__adb.htm0000644000175100001440000002006412340214310031534 0ustar tomusers terminal_interface-curses-forms-field_types-ipv4_address.adb

File : terminal_interface-curses-forms-field_types-ipv4_address.adb


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--          Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address        --
--                                                                          --
--                                 B O D Y                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.13 @
--  @Date: 2014/05/24 21:31:05 @
--  Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;

package body Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address is

   procedure Set_Field_Type (Fld : Field;
                             Typ : Internet_V4_Address_Field)
   is
      function Set_Fld_Type (F : Field := Fld)
                             return Eti_Error;
      pragma Import (C, Set_Fld_Type, "set_field_type_ipv4");

   begin
      Eti_Exception (Set_Fld_Type);
      Wrap_Builtin (Fld, Typ);
   end Set_Field_Type;

end Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-trace__ads.htm0000644000175100001440000004035012534703456024656 0ustar tomusers terminal_interface-curses-trace.ads

File : terminal_interface-curses-trace.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                      Terminal_Interface.Curses.Trace                     --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 2000,2014 Free Software Foundation, Inc.                   --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author: Eugene V. Melaragno <aldomel@ix.netcom.com> 2000
--  Version Control:
--  @Revision: 1.4 @
--  Binding Version 01.00
------------------------------------------------------------------------------

package Terminal_Interface.Curses.Trace is
   pragma Preelaborate (Terminal_Interface.Curses.Trace);

   type Trace_Attribute_Set is
      record
         Times            : Boolean;
         Tputs            : Boolean;
         Update           : Boolean;
         Cursor_Move      : Boolean;
         Character_Output : Boolean;
         Calls            : Boolean;
         Virtual_Puts     : Boolean;
         Input_Events     : Boolean;
         TTY_State        : Boolean;
         Internal_Calls   : Boolean;
         Character_Calls  : Boolean;
         Termcap_TermInfo : Boolean;
         Attribute_Color  : Boolean;
      end record;
   pragma Convention (C_Pass_By_Copy, Trace_Attribute_Set);

   for Trace_Attribute_Set use
      record
         Times            at 0 range Curses_Constants.TRACE_TIMES_First
           .. Curses_Constants.TRACE_TIMES_Last;
         Tputs            at 0 range Curses_Constants.TRACE_TPUTS_First
           .. Curses_Constants.TRACE_TPUTS_Last;
         Update           at 0 range Curses_Constants.TRACE_UPDATE_First
           .. Curses_Constants.TRACE_UPDATE_Last;
         Cursor_Move      at 0 range Curses_Constants.TRACE_MOVE_First
           .. Curses_Constants.TRACE_MOVE_Last;
         Character_Output at 0 range Curses_Constants.TRACE_CHARPUT_First
           .. Curses_Constants.TRACE_CHARPUT_Last;
         Calls            at 0 range Curses_Constants.TRACE_CALLS_First
           .. Curses_Constants.TRACE_CALLS_Last;
         Virtual_Puts     at 0 range Curses_Constants.TRACE_VIRTPUT_First
           .. Curses_Constants.TRACE_VIRTPUT_Last;
         Input_Events     at 0 range Curses_Constants.TRACE_IEVENT_First
           .. Curses_Constants.TRACE_IEVENT_Last;
         TTY_State        at 0 range Curses_Constants.TRACE_BITS_First
           .. Curses_Constants.TRACE_BITS_Last;
         Internal_Calls   at 0 range Curses_Constants.TRACE_ICALLS_First
           .. Curses_Constants.TRACE_ICALLS_Last;
         Character_Calls  at 0 range Curses_Constants.TRACE_CCALLS_First
           .. Curses_Constants.TRACE_CCALLS_Last;
         Termcap_TermInfo at 0 range Curses_Constants.TRACE_DATABASE_First
           .. Curses_Constants.TRACE_DATABASE_Last;
         Attribute_Color  at 0 range Curses_Constants.TRACE_ATTRS_First
           .. Curses_Constants.TRACE_ATTRS_Last;
      end record;
   pragma Warnings (Off);
   for Trace_Attribute_Set'Size use Curses_Constants.Trace_Size;
   pragma Warnings (On);

   Trace_Disable  : constant Trace_Attribute_Set := (others => False);

   Trace_Ordinary : constant Trace_Attribute_Set :=
     (Times            => True,
      Tputs            => True,
      Update           => True,
      Cursor_Move      => True,
      Character_Output => True,
      others           => False);
   Trace_Maximum : constant Trace_Attribute_Set := (others => True);

------------------------------------------------------------------------------

   --  |=====================================================================
   --  | Man page curs_trace.3x
   --  |=====================================================================

   --  #1A NAME="AFU_1"#2|
   procedure Trace_On (x : Trace_Attribute_Set);
   --  The debugging library has trace.

   --  #1A NAME="AFU_2"#2|
   procedure Trace_Put (str : String);
   --  AKA: _tracef()

   Current_Trace_Setting : Trace_Attribute_Set;
   pragma Import (C, Current_Trace_Setting, "_nc_tracing");

end Terminal_Interface.Curses.Trace;
ncurses-6.0-20160213/doc/html/ada/terminal_interface__ads.htm0000644000175100001440000001242212145772563022262 0ustar tomusers terminal_interface.ads

File : terminal_interface.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--                            Terminal_Interface                            --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998,2006 Free Software Foundation, Inc.                   --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.14 @
--  @Date: 2006/06/25 14:30:22 @
--  Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface is
   pragma Pure (Terminal_Interface);
--
--  Everything is in the child units
--
end Terminal_Interface;
ncurses-6.0-20160213/doc/html/ada/terminal_interface-curses-text_io-decimal_io__ads.htm0000644000175100001440000002202112340214310027266 0ustar tomusers terminal_interface-curses-text_io-decimal_io.ads

File : terminal_interface-curses-text_io-decimal_io.ads


------------------------------------------------------------------------------
--                                                                          --
--                           GNAT ncurses Binding                           --
--                                                                          --
--               Terminal_Interface.Curses.Text_IO.Decimal_IO               --
--                                                                          --
--                                 S P E C                                  --
--                                                                          --
------------------------------------------------------------------------------
-- Copyright (c) 1998-2003,2009 Free Software Foundation, Inc.              --
--                                                                          --
-- Permission is hereby granted, free of charge, to any person obtaining a  --
-- copy of this software and associated documentation files (the            --
-- "Software"), to deal in the Software without restriction, including      --
-- without limitation the rights to use, copy, modify, merge, publish,      --
-- distribute, distribute with modifications, sublicense, and/or sell       --
-- copies of the Software, and to permit persons to whom the Software is    --
-- furnished to do so, subject to the following conditions:                 --
--                                                                          --
-- The above copyright notice and this permission notice shall be included  --
-- in all copies or substantial portions of the Software.                   --
--                                                                          --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   --
-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    --
-- THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               --
--                                                                          --
-- Except as contained in this notice, the name(s) of the above copyright   --
-- holders shall not be used in advertising or otherwise to promote the     --
-- sale, use or other dealings in this Software without prior written       --
-- authorization.                                                           --
------------------------------------------------------------------------------
--  Author:  Juergen Pfeifer, 1996
--  Version Control:
--  @Revision: 1.12 @
--  Binding Version 01.00
------------------------------------------------------------------------------
generic
   type Num is delta <> digits <>;

package Terminal_Interface.Curses.Text_IO.Decimal_IO is

   Default_Fore : Field := Num'Fore;
   Default_Aft  : Field := Num'Aft;
   Default_Exp  : Field := 0;

   procedure Put
     (Win  : Window;
      Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp);

   procedure Put
     (Item : Num;
      Fore : Field := Default_Fore;
      Aft  : Field := Default_Aft;
      Exp  : Field := Default_Exp);

private
   pragma Inline (Put);

end Terminal_Interface.Curses.Text_IO.Decimal_IO;
ncurses-6.0-20160213/doc/html/index.html0000644000175100001440000000573112145536625016201 0ustar tomusers Welcome to ncurses

Welcome to ncurses

From this index page you have access to these further documents

We also have HTML versions of all the ncurses manpages. ncurses-6.0-20160213/doc/html/announce.html0000644000175100001440000023261312561454070016674 0ustar tomusers Announcing ncurses 6.0

Announcing ncurses 6.0

Overview

The ncurses (new curses) library is a free software emulation of curses in System V Release 4.0 (SVr4), and more. It uses terminfo format, supports pads and color and multiple highlights and forms characters and function-key mapping, and has all the other SVr4-curses enhancements over BSD curses. SVr4 curses is better known today as X/Open Curses.

In mid-June 1995, the maintainer of 4.4BSD curses declared that he considered 4.4BSD curses obsolete, and encouraged the keepers of unix releases such as BSD/OS, FreeBSD and NetBSD to switch over to ncurses.

Since 1995, ncurses has been ported to many systems:

  • It is used in almost every system based on the Linux kernel (aside from some embedded applications).
  • It is used as the system curses library on OpenBSD, FreeBSD and OSX.
  • It is used in environments such as Cygwin and MinGW. The first of these was EMX on OS/2 Warp.
  • It is used (though usually not as the system curses) on all of the vendor unix systems, e.g., AIX, HP-UX, IRIX64, SCO, Solaris, Tru64.
  • It should work readily on any ANSI/POSIX-conforming unix.

The distribution includes the library and support utilities, including

  • captoinfo, a termcap conversion tool
  • clear, utility for clearing the screen
  • infocmp, the terminfo decompiler
  • tabs, set tabs on a terminal
  • tic, the terminfo compiler
  • toe, list (table of) terminfo entries
  • tput, utility for retrieving terminal capabilities in shell scripts
  • tset, to initialize the terminal

Full manual pages are provided for the library and tools.

The ncurses distribution is available via anonymous FTP at the GNU distribution site

ftp://ftp.gnu.org/gnu/ncurses/ .

It is also available at

ftp://invisible-island.net/ncurses/ .

Release Notes

These notes are for ncurses 6.0, released August 8, 2015.

This release is designed to be source-compatible with ncurses 5.0 through 5.9; providing a new application binary interface (ABI). Although the source can still be configured to support the ncurses 5 ABI, the intent of the release is to provide extensions which are generally useful, but binary-incompatible with ncurses 5:

  • Extend the cchar_t structure to allow more than 16 colors to be encoded.

  • Modify the encoding of mouse state to make room for a 5th mouse button. That allows one to use ncurses with a wheel mouse with xterm or similar X terminal emulators.

There are, of course, numerous other improvements, including

  • fixes made based on the Clang and Coverity static analyzers.

  • memory leak fixes using Valgrind

The release notes mention some bug-fixes, but are focused on new features and improvements to existing features log since ncurses 5.9 release.

While the intent of the release is to provide a new stable ABI, there are other development activities which are summarized below.

  • The original release plan, e.g., for "5.10" was to improve the MinGW port. Ultimately that was completed (wide-character support, mouse, etc), but was deferred to focus on termcap support and performance issues. Also, pinpointing the problems with Console2 took a while.

  • A review of termcap compatibility in 2011 led to several minor fixes in the library and improvements to utilities. To do this properly, a review of the various extent termcap implementations was needed.

    The termcap library checker (tctest) (not part of ncurses) was one result. A followup review of performance using ncurses-examples in 2014 led to additional improvements.

  • Output buffering provided a further, but worthwhile distraction. A bug report in 2012 regarding the use of signal handlers in ncurses) pointed out a problem with the use of unsafe functions for handling SIGTSTP. Other signals could be addressed with workarounds; repairing SIGTSTP required a different approach. The solution required changing internal behavior of the library: how it handles output buffering.

    Now ncurses buffers its own output, independently of the standard output. A few applications relied upon the library's direct reuse of the standard output buffering; however that is unspecified behavior and has never been a recommended practice. Identifying these applications as well as refining the change to permit low-level applications to work consistently took time.

  • Since the introduction of the experimental support for 256 colors early in 2005 (released in ncurses 5.5), there has been increased user interest. Almost all packagers continue providing the ncurses ABI 5 which cannot support 256 colors.

  • Symbol versioning, or the lack of it in ncurses, is the main reason why packagers would be reluctant to add a new ncurses ABI.

    This release provides the new ABI along with script-generated lists of versioned symbols which can be used for both ABI 5 and 6 (with distinct names to keep the two separate). This took time to development, as reported in Symbol versioning in ncurses.

Library improvements

Output buffering

X/Open curses provides more than one initialization function:

  • initscr (the simplest) accepts no parameters.
  • newterm accepts parameters for the stream input and output
  • setupterm (the low-level function) accepts a parameter for the file descriptor of the output.

They are documented in X/Open as if initscr calls newterm using stdout for output stream, and in turn newterm calls setupterm using fileno(stdout) for the file descriptor. As long as an implementation acts as if it does this, it conforms. In practice, implementations do what is implied. This creates a problem: the low-level setupterm function's file descriptor is unbuffered, while newterm implies buffered output. X/Open Curses says that all output is done through the file descriptor, and does not say how the output stream is actually used.

Initially, ncurses used the file descriptor (obtained from the output stream passed to newterm) for changing the terminal modes, and relied upon the output parameter of newterm for buffered output. Later (to avoid using unsafe buffered I/O in signal handlers), ncurses was modified to use the file descriptor (unbuffered output) when cleaning up on receipt of a signal. Otherwise (when not handling a signal), it continued to use the buffered output.

That approach worked reasonably well and as a side effect, using the same buffered output as an application might use for printf meant that no flushing was needed when switching between normal- and screen-modes.

There were a couple of problems:

  • to get good performance, curses (not only ncurses, but SVr4 curses in general) set an output buffer using setbuf or similar function. There is no standard (or portable) way to turn that output buffer off, and revert to line-buffering. The NCURSES_NO_SETBUF environment variable did make it optional.

  • to handle SIGTSTP (the “stop” signal), ncurses relied upon unsafe functions. That is, due to the complexity of the feature, it relied upon reusing existing functions which should not have been called via the signal handler.

Conveniently, solving the second problem (by making ncurses do its own output buffering) also fixed the first one. But there were special cases to resolve: low-level functions such as mvcur, putp, vidattr explicitly use the standard output. Those functions were reused internally, and required modification to distinguish whether they were used by the high-level or low-level interfaces.

Finally, there may still be a few programs which should be modified to improve their portability, e.g., adding an

fflush(stdout);

when switching from “shell” mode to “program” (curses) mode. Those are fairly rare because most programmers have learned not to mix printf and printw.

Symbol versioning

This release introduces symbol-versioning to ncurses because without it, the change of ABI would be less successful. A lengthy discussion will be presented in Symbol versioning in ncurses. These notes summarize what has changed, and what can be done with the new release.

Symbol-versioning allows the developers of a library to mark each public symbol (both data and functions) with an identifier denoting the library name and the version for which it was built. By doing this, users of the library have a way to help ensure that applications do not accidentally load an incompatible library. In addition, private symbols can be hidden entirely.

This release provides sample files for the four principal configurations of ncurses libraries: ncurses, ncursesw, ncursest and ncursestw. Each sample is given in two forms:

.map
These list all public symbols, together with version names.
.sym
These list all public symbols, without version names.

The sample files are generated by scripts which take into account a few special cases such as tack to omit many of the ncurses private symbols (beginning with “_nc_”). Here are counts of globals versus locals:

Config Symbols Globals Locals "_nc_"
ncurses 976 796 180 332
ncursesw 1089 905 184 343
ncursest 979 804 175 358
ncursestw 1098 914 184 372

Although only four sample configurations are presented, each is formed by merging symbols from several combinations of configure-script options, taking into account advice from downstream packagers. Because they are formed by merging, the sample files may list a symbol which is not in a given package. That is expected. The samples have been tested and are working with systems (such as Fedora, FreeBSD and Debian) which fully support this feature. There are other systems which do not support the feature, and a few (such as Solaris) which provide incomplete support.

The version-naming convention used allows these sample files to build distinct libraries for ABI 5 and 6. Version names consist of

  • configuration name, e.g., “NCURSESW” for the wide-character libraries

  • ABI version (if not 5)

  • library name for two special cases which have the same interface across configurations: “TINFO” and “TIC

  • release version

  • patch date (for the release version)

For example, running nm -D on the libraries in the ncurses6 test package shows these symbol-versions:

0000000000000000 A NCURSES6_TIC_5.0.19991023
0000000000000000 A NCURSES6_TIC_5.1.20000708
0000000000000000 A NCURSES6_TIC_5.5.20051010
0000000000000000 A NCURSES6_TIC_5.7.20081102
0000000000000000 A NCURSES6_TIC_5.9.20150530
0000000000000000 A NCURSES6_TINFO_5.0.19991023
0000000000000000 A NCURSES6_TINFO_5.1.20000708
0000000000000000 A NCURSES6_TINFO_5.2.20001021
0000000000000000 A NCURSES6_TINFO_5.3.20021019
0000000000000000 A NCURSES6_TINFO_5.4.20040208
0000000000000000 A NCURSES6_TINFO_5.5.20051010
0000000000000000 A NCURSES6_TINFO_5.6.20061217
0000000000000000 A NCURSES6_TINFO_5.7.20081102
0000000000000000 A NCURSES6_TINFO_5.8.20110226
0000000000000000 A NCURSES6_TINFO_5.9.20150530
0000000000000000 A NCURSESW6_5.1.20000708
0000000000000000 A NCURSESW6_5.3.20021019
0000000000000000 A NCURSESW6_5.4.20040208
0000000000000000 A NCURSESW6_5.5.20051010
0000000000000000 A NCURSESW6_5.6.20061217
0000000000000000 A NCURSESW6_5.7.20081102
0000000000000000 A NCURSESW6_5.8.20110226
0000000000000000 A NCURSESW6_5.9.20150530

As a special case, this release (which makes the final change for ABI 5) is marked with release version 5.9 and patch date 20150530.

Miscellaneous

The new release has several improvements for performance and building. For instance:

  • several files in ncurses- and progs-directories were modified to allow const data used in internal tables to be put by the linker into the readonly text segment.

  • various improvements were made to building the Ada95 binding, both in simplifying the generated files as well as improving the way it uses gnatmake

There are also new features in the libraries:

  • added use_tioctl function
  • added wgetdelay to retrieve _delay member of WINDOW if it happens to be opaque, e.g., in the pthread configuration.

  • added A_ITALIC extension.

  • added form library extension O_DYNAMIC_JUSTIFY option which can be used to override the different treatment of justification for static versus dynamic fields .

  • rewrote putwin and getwin, making an extended version which is capable of reading screen-dumps between the wide/normal ncurses configurations. These are text files, except for a magic code at the beginning:

    0       string          \210\210        Screen-dump (ncurses)
    
  • several changes to mouse support include:

    • added decoder for xterm SGR 1006 mouse mode.
    • added experimental support for “%u” format to terminfo.
    • improved behavior of wheel-mice for xterm protocol: noting that there are only button-presses for buttons “4” and “5”, so there is no need to wait to combine events into double-clicks .

There are a few new configure options dealing with library customization:

  • add “--enable-ext-putwin” configure option to turn on the extended putwin/getwin. By default, this is enabled for ABI 6 and disabled with ABI 5.

  • add “--enable-string-hacks” option to control whether strlcat and strlcpy may be used. Because ncurses already does the requisite buffer-limit checks, this feature is mainly of interest to quiet compiler-warnings on a few systems.

  • add configure option “--with-tparm-arg” to allow tparm's parameters to be something more likely to be the same size as a pointer, e.g., intptr_t (again, the default is set for ABI 6).

Program improvements

Utilities

Most of the termcap-related changes based on development of tctest (termcap library checker) are implemented in the tic and infocmp programs rather than affecting the library. As noted in the discussion of tctest, ncurses's ability to translate between terminfo and termcap formats has been improved at different times, but subject to feedback from "real" termcap users. There are very few of those. Nowadays, virtually all termcap users are using ncurses (or NetBSD, with its own terminfo library) and their programs are actually using terminfo rather than termcap data.

Still, there are a few. A comment about the translation of the ASCII NUL character prompted a review:

  • Both terminfo and termcap store string capabilities as NUL-terminated strings.

  • In terminfo, a \0 in a terminal description is stored as \200.

  • There are no (known) terminals which would behave differently when sent \0 or \200.

  • When translating to terminfo format (or displaying a printable version of an entry using infocmp), ncurses shows \200 as \0.

  • It has done this since 1998 (quoting from the NEWS file):

    980103
    ...
            + modify _nc_tic_expand() to generate \0 rather than \200.
    ...
            + correct translation of terminfo "^@", to \200, like \0.
    
  • However, the _nc_tic_expand function (which optionally produces terminfo or termcap format) did not address this special case for termcap. Even the later 4.4BSD cgetstr interprets a \0 literally, ending that string (rather than using the terminfo improvement).

As a result of the review, several improvements were made to ncurses translation to/from termcap format — and improving the checks made in tic for consistency of entries. Most of these are not of general interest, except for two new command-line options for tic and infocmp:

  • the “-0” option generates termcap/terminfo source on a single line.

  • the “-K” option provides stricter BSD-compatibility for termcap output.

Other user-visible improvements and new features include:

  • added “-D” option to tic and infocmp, to show the database locations that it could use.

  • added “-s” option to toe, to sort its output.

  • extended “-c” and “-n” options of infocmp to allow comparing more than two entries.

  • modified toe's report when “-a” and “-s” options are combined, to add a column showing which entries belong to a given database.

  • modified the clear program to take into account the “E3” extended capability to clear the terminal's scrollback buffer.

Examples

Along with the library and utilities, many improvements were made to the ncurses-examples. Some were made to allow building (and comparison-testing) against NetBSD curses and PDCurses. Both lack some of the X/Open Curses features, necessitating customization. But this activity was useful because it showed some remaining performance issues (which have been resolved in this release).

These changes were made to verify compatibility or compare performance of ncurses:

  • made workarounds for compiling test-programs with NetBSD curses, though it lacks some common functions such as use_env.

  • added dots_termcap test-program

  • added dots_curses test-program, for comparison with the low-level examples.

  • added test_setupterm test-proram to demonstrate normal/error returns from the setupterm and restartterm functions.

  • added “-d”, “-e” and “-q” options to the demo_terminfo and demo_termcap test-programs.

  • added “-y” option to demo_termcap and test/demo_terminfo test-programs to demonstrate behavior with/without extended capabilities.

  • modified demo_termcap and demo_terminfo test-programs to make their options more directly comparable, and add “-i” option to specify a terminal description filename to parse for names to lookup.

  • rewrote the tests for mvderwin and test for recursive mvwin in the movewindow test-program.

These changes were made to help with the MinGW port:

  • added test-screens to the ncurses test-program to show 256-characters at a time, to help with MinGW port.

  • modified the view test-program to load UTF-8 when built with MinGW by using regular win32 API because the MinGW functions mblen and mbtowc do not work.

  • added “-s” option to the view test-program to allow it to start in single-step mode, reducing size of trace files when it is used for debugging MinGW changes.

These changes were made to verify new extensions in ncurses:

  • added form_driver_w entrypoint to wide-character forms library, as well as form_driver_w test-program.

  • modified ncurses test-program's b/B tests to display lines only for the attributes which a given terminal supports, to make room for an italics test.

  • modified ncurses test-program, adding “-E” and “-T” options to demonstrate use_env versus use_tioctl.

  • modified ncurses test-program's c/C tests to cycle through subsets of the total number of colors, to better illustrate 8/16/88/256-colors by providing directly comparable screens.

  • modified the ncurses test-program to also show position reports in 'a' test.

These changes were made to make the examples more useful:

  • added scripts for building dpkg and rpm test-packages

  • modified the hanoi test-program to show the minimum number of moves possible for the given number of tiles.

  • modified the knight test-program to show the number of choices possible for each position in automove option, e.g., to allow user to follow Warnsdorff's rule to solve the puzzle.

Terminal database

This release provides improvements to tic's “-c” checking option, which was used for example to

  • make sgr in several entries agree with other caps.

  • correct padding in some entries where earlier versions had miscounted the number of octal digits.

There are several new terminal descriptions:

A few entries use extensions (user-defined terminal capabilities):

  • E3, used in linux, putty and xterm-basic is tested in the clear program to erase a terminal's scrollback.

  • TS is used in the xterm+sl building block to help deprecate the misuse of tsl for xterm's title-string.

  • XT is used in some terminfo entries to improve usefulness for other applications than screen, which would like to pretend that xterm's title is a status-line.

  • xm is used in examples xterm-1005 and xterm-1006 to illustrate a way to make mouse handling more general

A few terminals support italics and/or dim capabilities. In particular, screen does not. Documented that, and accommodated the terminals where this feature works with the A_ITALIC extension.

  • konsole, mlterm3 (italics)
  • nsterm (dim)
  • screen (dim)
  • vte (dim, italics)
  • xterm (dim, italics)

Documentation

As usual, this release

  • improves documentation by describing new features,

  • attempts to improve the description of features which users have found confusing

  • fills in overlooked descriptions of features which were described in the NEWS file but treated sketchily in manual pages.

In addition, the mechanism for producing HTML versions of the documentation has been improved:

Interesting bug-fixes

  • Ada95 binding:

    • modify makefile rules to ensure that the PIC option is not used when building a static library

    • make Ada95 build-fix for big-endian architectures such as sparc. This undoes one of the fixes from 20110319, which added an “Unused” member to representation clauses, replacing that with pragmas to suppress warnings about unused bits.

  • Color and attributes:

    • parenthesize parameter of COLOR_PAIR and PAIR_NUMBER in curses.h in case it happens to be a comma-expression.

    • improve 20021221 workaround for broken acs, handling a case where that ACS_xxx character is not in the acsc string but there is a known wide-character which can be used.

    • modify init_pair to accept -1's for color value after assume_default_colors has been called.

    • add a check in start_color to limit color-pairs to 256 when extended colors are not supported.

  • Resizing the screen:

    • propagate error-returns from wresize, i.e., the internal increase_size and decrease_size functions through resize_term.

    • add check for zero/negative dimensions for resizeterm and resize_term.

    • modify resizeterm to always push a KEY_RESIZE onto the fifo, even if screensize is unchanged. Modify library to push a KEY_RESIZE if there was a SIGWINCH, even if it does not call resizeterm). These changes eliminate the case where a SIGWINCH is received, but ERR is returned from wgetch or wgetnstr because the screen dimensions did not change.

  • Low-level interfaces

    • fix an old bug in the termcap emulation; “%i” was ignored in tparm because the parameters to be incremented were already on the internal stack.

    • change “%l” behavior in tparm to push the string length onto the stack rather than saving the formatted length into the output buffer.

    • modify name-comparison for tgetstr, etc., to accommodate legacy applications as well as to improve compatbility with BSD 4.2 termcap implementations (see note for 980725).

  • High-level interfaces
    • modify internal recursion in wgetch which handles cooked mode to check if the call to wgetnstr returned an error. This can happen when both nocbreak and nodelay are set, for instance (see note for 960418).

    • add a check in internal function waddch_nosync to ensure that tab characters are treated as control characters; some broken locales claim they are printable.

    • modify menu library to ensure that a menu's top-row is adjusted as needed to ensure that the current item is on the screen

    • fix special case where double-width character overwrites a single- width character in the first column.

Configuration changes

Major changes

The ncurses 6.0 configure script makes changes to the default value of several configure options, depending on the --with-abi-version option (i.e., whether its value is “5” or “6”):

--enable-const

Feature introduced in 970405 supports the use of const where X/Open Curses should have, but did not. NetBSD curses does something similar with const.

--enable-ext-colors

Extends the cchar_t structure to allow more than 16 colors to be encoded. This applies only to the wide-character (--enable-widec) configuration.

--enable-ext-mouse

Modifies the encoding of mouse state to make room for a 5th mouse button. That allows one to use ncurses with a wheel mouse with xterm or similar X terminal emulators.

--enable-ext-putwin

Modifies the file-format written by putwin to use printable text rather than binary files, allowing getwin to read screen dumps written by differently-configured ncurses libraries. The extended getwin can still read binary screen dumps from the same configuration of ncurses. This does not change the ABI (the binary interface seen by calling applications).

--enable-interop

Modifies the FIELDTYPE structure used for the form library to make it more generic.

--enable-lp64

Allows an application to define _LP64 to declare chtype and mmask_t as simply “unsigned” rather than the configured types using the --with-chtype and --with-mmask_t options.

--enable-sp-funcs

Compile-in support for extended functions which accept a SCREEN pointer, reducing the need for juggling the global SP value with set_term and delscreen.

--with-chtype=uint32_t

Makes chtype explicitly a 32-bit unsigned value.

--with-mmask_t=uint32_t

Makes mmask_t explicitly a 32-bit unsigned value.

--with-tparm-arg=intptr_t

X/Open Curses declares tparm using long for each of the parameters aside from the formatting string, presuming that long and char* are the same size. This configure option uses intptr_t which provides a better guarantee of the sizes.

The configure script no longer checks for antique compilers; c89 is assumed as a minimum. There are a few features from later revisions which are used when available. The configure script makes checks to turn on useful warnings from clang, gcc and icc. You should be able to build ncurses 6.0 with any of the current (or not so current) C compilers available in 2015.

The configure script, by the way, makes changes which do not work with systems whose /bin/sh is non-POSIX. This mainly affects Solaris (the other vendor unix systems have followed the POSIX guidelines for the past twenty years). If you must build on Solaris, its xpg4 binaries suffice, e.g.,

#!/bin/sh
WHAT=`hostname|sed -e 's/\..*//'`
OUT=configure.out
cat >>$OUT <<EOF/
** 
`date`
** node: 
$WHAT
** user: 
`id`
** conf: $*
EOF/

 
SHELL=/bin/sh
if test -f /usr/xpg4/bin/sh
then
        CONFIG_SHELL=/usr/xpg4/bin/sh
        export CONFIG_SHELL
        SHELL=$CONFIG_SHELL
fi
 
rm -f config.status config.cache
TOP=$HOME/$WHAT
$SHELL ./configure --verbose \
        --disable-echo \
        --disable-overwrite \
        --enable-warnings \
        --with-warnings \
        --prefix=$TOP $* 2>&1 | tee -a $OUT

Other major changes to the configure script include:

  • ABI 6 is now the default, intending that the existing ABI 5 should build as before using the “--with-abi-version=5” option.

  • added --with-extra-suffix option to help with installing nonconflicting ncurses6 packages, e.g., avoiding header- and library-conflicts.

    NOTE: as a side-effect, this renames

    adacurses-config to adacurses5-config and
    adacursesw-config to adacursesw5-config

  • the configure script looks for gnatgcc if the Ada95 binding is built, in preference to the default gcc/cc. The script also ensures that the Ada95 binding is built with the level of optimization as the C libraries.

  • the configure script captures define's related to -D_XOPEN_SOURCE from the configure check and adds those to the *-config and *.pc files, to simplify use for the wide-character libraries.

Configuration options

There are several new (or extended) configure options:

--disable-db-install

Do not install the terminal database. This is used to omit features for packages, as done with --without-progs. The option simplifies building cross-compile support packages.

--disable-gnat-projects

This option is used for regression testing

--disable-lib-suffixes

Suppress the “w”, “t” or “tw” suffixes which normally would be added to the library names for the --enable-widec and --with-pthread options.

--with-cxx-shared

When --with-shared is set, build libncurses++ as a shared library. This implicitly relies upon building with gcc/g++, since other compiler suites may have differences in the way shared libraries are built. libtool by the way has similar limitations.

--with-hashed-db

Extended this configure option to simplify building with different versions of Berkeley database using FreeBSD ports.

--with-pc-suffix

If ".pc" files are installed, optionally add a suffix to the files and corresponding package names to separate unusual configurations. If no option value is given (or if it is "none"), no suffix is added. This option is used in the test package for ncurses6.

--with-xterm-kbs

Configure xterm's terminfo entries to use either BS (^H, i.e., ASCII backspace) or DEL (^?, or 127).

Portability

MinGW

Most of the portability-related work since ncurses 5.9 extended and improved the MinGW port introduced in ncurses 5.8.

The MinGW port can be readily cross-compiled:

  • modified configure script to allow creating dll's for MinGW when cross-compiling.

  • enforced Windows-style path-separator if cross-compiling,

  • added scripts for test-builds of cross-compiled packages for ncurses6 to MinGW.

  • added pc-files to the MinGW cross-compiling test-packages.

  • added script for building test-packages of binaries cross-compiled to MinGW using NSIS.

  • added nc_mingw.h to installed headers for MinGW port; this is needed for cross-compiling ncurses-examples.

  • added test-packages for cross-compiling ncurses-examples using the MinGW test-packages.

The MinGW-specific Windows driver accounts for several changes:

  • wide-character display is made usable by replacing MinGW's non-working wcrtomb and wctomb functions.

  • implemented some display features: beep, flash, curs_set.

  • the driver handles repainting on endwin/refresh combination.

  • modified treatment of TERM variable for MinGW port to allow explicit use of the Windows console driver by checking if $TERM is set to “#win32console” or an abbreviation of that.

  • the Windows driver also matches the special TERM value “unknown”

  • the driver now returns characters for special keys, (like ansi.sys does), when keypad mode is off, rather than returning nothing at all.

  • the driver checks a new environment variable NCURSES_CONSOLE2 to optionally work around a deficiency in Console2 (and its descendent ConsoleZ) which hang when an application creates a console buffer.

Finally, there are other improvements:

  • MinGW is one of the configurations where ncurses installs by default into /usr

  • configuration for cross-compiling uses AC_CHECK_TOOLS in preference to AC_PATH_PROGS when searching for ncurses*-config, e.g., in Ada95/configure and test/configure.
  • extend Windows support to work with MSYS2;

    • this works with a scenario where there is an ANSI-escape handler such as ansicon running in the console window.

    • wrap isatty calls with a macro, provide a corresponding set of support routines to address differences between MinGW and MSYS2.
  • ensure WINVER is defined in makefiles rather than using headers.

  • add check for the gnatprep-T” option.

  • work around a bug introduced by gcc 4.8.1 in MinGW which breaks "trace" feature.

  • add a driver-name method to each of the drivers.

Other ports

These changes affect certain platforms (ports):

  • the configure script knows how to build shared libraries with DragonFlyBSD and Interix.

  • support for AIX shared libraries is improved, tested with AIX 5.3, 6.1 and 7.1 with both gcc 4.2.4 and cc:

    • the shared-library suffix for AIX 5 and 6 is now ".so"

    • the -brtl option is used with AIX 5-7; it is needed to link with the shared libraries.

  • the configure --enable-pc-files option takes into account the PKG_CONFIG_PATH variable.

  • the configure option --with-pkg-config-libdir provides control over the actual directory into which pc-files are installed.

  • the build scripts add explicit -ltinfo, etc., to the generated ".pc" file when ld option “--as-needed” is used, or when ncurses and tinfo are installed without using rpath.

  • the configure script disallows conflicting options “--with-termlib” and “--enable-term-driver”.

  • the check for missing c++ compiler to work when no error is reported, and no variables set is improved (see note for 20021206).

  • the misc/gen_edit.sh script selects a "linux" entry which works with the current kernel rather than assuming it is always "linux3.0"

  • the test/configure script makes it simpler to override names of curses-related libraries, to help with linking with pdcurses in MinGW environment.

  • the configure-script/ifdef's allow the BSD OLD_TTY feature to be suppressed if the type of ospeed is configured using the option --with-ospeed to not be a short. By default, it is a short for termcap-compatibility.

  • the MKlib_gen.sh script works around a recent change in gcc 5 (released mid-2015) which essentially emits multiple #line statements for the same position in a file.

  • the configure script works with Minix3.2 (see note on portability)

  • OS/2 redux:

    • the configure script supports OS/2 kLIBC.

    • the --with-lib-prefix option allows configuring for old/new flavors of OS/2 EMX.

  • improved configure-script checks for _XOPEN_SOURCE:

    • the definition works starting with Solaris 10.

    • the definition is suppressed for IRIX64, since its header files have a conflict versus _SGI_SOURCE.


Features of ncurses

The ncurses package is fully upward-compatible with SVr4 (System V Release 4) curses:

  • All of the SVr4 calls have been implemented (and are documented).

  • ncurses supports all of the for SVr4 curses features including keyboard mapping, color, forms-drawing with ACS characters, and automatic recognition of keypad and function keys.

  • ncurses provides these SVr4 add-on libraries (not part of X/Open Curses):

    • the panels library, supporting a stack of windows with backing store.

    • the menus library, supporting a uniform but flexible interface for menu programming.

    • the form library, supporting data collection through on-screen forms.

  • ncurses's terminal database is fully compatible with that used by SVr4 curses.

    • ncurses supports user-defined capabilities which it can see, but which are hidden from SVr4 curses applications using the same terminal database.
    • It can be optionally configured to match the format used in related systems such as AIX and Tru64.

    • Alternatively, ncurses can be configured to use hashed databases rather than the directory of files used by SVr4 curses.

  • The ncurses utilities have options to allow you to filter terminfo entries for use with less capable curses/terminfo versions such as the HP/UX and AIX ports.

The ncurses package also has many useful extensions over SVr4:

  • The API is 8-bit clean and base-level conformant with the X/OPEN curses specification, XSI curses (that is, it implements all BASE level features, and most EXTENDED features). It includes many function calls not supported under SVr4 curses (but portability of all calls is documented so you can use the SVr4 subset only).

  • Unlike SVr3 curses, ncurses can write to the rightmost-bottommost corner of the screen if your terminal has an insert-character capability.

  • Ada95 and C++ bindings.

  • Support for mouse event reporting with X Window xterm and FreeBSD and OS/2 console windows.

  • Extended mouse support via Alessandro Rubini's gpm package.

  • The function wresize allows you to resize windows, preserving their data.

  • The function use_default_colors allows you to use the terminal's default colors for the default color pair, achieving the effect of transparent colors.

  • The functions keyok and define_key allow you to better control the use of function keys, e.g., disabling the ncurses KEY_MOUSE, or by defining more than one control sequence to map to a given key code.

  • Support for 256-color terminals, such as modern xterm.

  • Support for 16-color terminals, such as aixterm and modern xterm.

  • Better cursor-movement optimization. The package now features a cursor-local-movement computation more efficient than either BSD's or System V's.

  • Super hardware scrolling support. The screen-update code incorporates a novel, simple, and cheap algorithm that enables it to make optimal use of hardware scrolling, line-insertion, and line-deletion for screen-line movements. This algorithm is more powerful than the 4.4BSD curses quickch routine.

  • Real support for terminals with the magic-cookie glitch. The screen-update code will refrain from drawing a highlight if the magic- cookie unattributed spaces required just before the beginning and after the end would step on a non-space character. It will automatically shift highlight boundaries when doing so would make it possible to draw the highlight without changing the visual appearance of the screen.

  • It is possible to generate the library with a list of pre-loaded fallback entries linked to it so that it can serve those terminal types even when no terminfo tree or termcap file is accessible (this may be useful for support of screen-oriented programs that must run in single-user mode).

  • The tic/captoinfo utility provided with ncurses has the ability to translate many termcaps from the XENIX, IBM and AT&T extension sets.

  • A BSD-like tset utility is provided.

  • The ncurses library and utilities will automatically read terminfo entries from $HOME/.terminfo if it exists, and compile to that directory if it exists and the user has no write access to the system directory. This feature makes it easier for users to have personal terminfo entries without giving up access to the system terminfo directory.

  • You may specify a path of directories to search for compiled descriptions with the environment variable TERMINFO_DIRS (this generalizes the feature provided by TERMINFO under stock System V.)

  • In terminfo source files, use capabilities may refer not just to other entries in the same source file (as in System V) but also to compiled entries in either the system terminfo directory or the user's $HOME/.terminfo directory.

  • The table-of-entries utility toe makes it easy for users to see exactly what terminal types are available on the system.

  • The library meets the XSI requirement that every macro entry point have a corresponding function which may be linked (and will be prototype-checked) if the macro definition is disabled with #undef.

  • Extensive documentation is provided (see the Additional Reading section of the ncurses FAQ for online documentation).

Applications using ncurses

The ncurses distribution includes a selection of test programs (including a few games). These are available separately as ncurses-examples

The ncurses library has been tested with a wide variety of applications including:

cdk

Curses Development Kit

http://invisible-island.net/cdk/

ded

directory-editor

http://invisible-island.net/ded/

dialog

the underlying application used in Slackware's setup, and the basis for similar install/configure applications on many systems.

http://invisible-island.net/dialog/

lynx

the text WWW browser

http://lynx.isc.org/

Midnight Commander

file manager

http://www.midnight-commander.org/

mutt

mail utility

http://www.mutt.org/

ncftp

file-transfer utility

http://www.ncftp.com/

nvi

New vi uses ncurses.

https://sites.google.com/a/bostic.com/keithbostic/nvi

tin

newsreader, supporting color, MIME

http://www.tin.org/

as well as some that use ncurses for the terminfo support alone:

minicom

terminal emulator for serial modem connections

http://alioth.debian.org/projects/minicom/

mosh

a replacement for ssh.

https://mosh.mit.edu/

tack

terminfo action checker

http://invisible-island.net/ncurses/tack.html

tmux

terminal multiplexor

http://tmux.github.io/

vile

vi-like-emacs may be built to use the terminfo, termcap or curses interfaces.

http://invisible-island.net/vile/

and finally, those which use only the termcap interface:

emacs

text editor

http://www.gnu.org/software/emacs/

screen

terminal multiplexor

http://www.gnu.org/software/screen/

vim

text editor

http://www.vim.org/

Development activities

Zeyd Ben-Halim started ncurses from a previous package pcurses, written by Pavel Curtis. Eric S. Raymond continued development. Jürgen Pfeifer wrote most of the form and menu libraries. Ongoing development work is done by Thomas Dickey. Thomas Dickey also acts as the maintainer for the Free Software Foundation, which holds the copyright on ncurses.

Contact the current maintainers at

bug-ncurses@gnu.org

To join the ncurses mailing list, please write email to

bug-ncurses-request@gnu.org
containing the line:

subscribe <name>@<host.domain>

This list is open to anyone interested in helping with the development and testing of this package.

Beta versions of ncurses and patches to the current release are made available at

ftp://invisible-island.net/ncurses/ .

There is an archive of the mailing list here:

http://lists.gnu.org/archive/html/bug-ncurses (also https)

Related resources

The release notes make scattered references to these pages, which may be interesting by themselves:

Other resources

The distribution provides a newer version of the terminfo-format terminal description file once maintained by Eric Raymond . Unlike the older version, the termcap and terminfo data are provided in the same file, and provides several user-definable extensions beyond the X/Open specification.

You can find lots of information on terminal-related topics not covered in the terminfo file at Richard Shuford's archive .

ncurses-6.0-20160213/doc/html/ncurses-intro.html0000644000175100001440000035551012145536527017711 0ustar tomusers Writing Programs with NCURSES

Writing Programs with NCURSES

by Eric S. Raymond and Zeyd M. Ben-Halim
updates since release 1.9.9e by Thomas Dickey

Contents


Introduction

This document is an introduction to programming with curses. It is not an exhaustive reference for the curses Application Programming Interface (API); that role is filled by the curses manual pages. Rather, it is intended to help C programmers ease into using the package.

This document is aimed at C applications programmers not yet specifically familiar with ncurses. If you are already an experienced curses programmer, you should nevertheless read the sections on Mouse Interfacing, Debugging, Compatibility with Older Versions, and Hints, Tips, and Tricks. These will bring you up to speed on the special features and quirks of the ncurses implementation. If you are not so experienced, keep reading.

The curses package is a subroutine library for terminal-independent screen-painting and input-event handling which presents a high level screen model to the programmer, hiding differences between terminal types and doing automatic optimization of output to change one screen full of text into another. Curses uses terminfo, which is a database format that can describe the capabilities of thousands of different terminals.

The curses API may seem something of an archaism on UNIX desktops increasingly dominated by X, Motif, and Tcl/Tk. Nevertheless, UNIX still supports tty lines and X supports xterm(1); the curses API has the advantage of (a) back-portability to character-cell terminals, and (b) simplicity. For an application that does not require bit-mapped graphics and multiple fonts, an interface implementation using curses will typically be a great deal simpler and less expensive than one using an X toolkit.

A Brief History of Curses

Historically, the first ancestor of curses was the routines written to provide screen-handling for the game rogue; these used the already-existing termcap database facility for describing terminal capabilities. These routines were abstracted into a documented library and first released with the early BSD UNIX versions.

System III UNIX from Bell Labs featured a rewritten and much-improved curses library. It introduced the terminfo format. Terminfo is based on Berkeley's termcap database, but contains a number of improvements and extensions. Parameterized capabilities strings were introduced, making it possible to describe multiple video attributes, and colors and to handle far more unusual terminals than possible with termcap. In the later AT&T System V releases, curses evolved to use more facilities and offer more capabilities, going far beyond BSD curses in power and flexibility.

Scope of This Document

This document describes ncurses, a free implementation of the System V curses API with some clearly marked extensions. It includes the following System V curses features:
  • Support for multiple screen highlights (BSD curses could only handle one `standout' highlight, usually reverse-video).
  • Support for line- and box-drawing using forms characters.
  • Recognition of function keys on input.
  • Color support.
  • Support for pads (windows of larger than screen size on which the screen or a subwindow defines a viewport).
Also, this package makes use of the insert and delete line and character features of terminals so equipped, and determines how to optimally use these features with no help from the programmer. It allows arbitrary combinations of video attributes to be displayed, even on terminals that leave ``magic cookies'' on the screen to mark changes in attributes.

The ncurses package can also capture and use event reports from a mouse in some environments (notably, xterm under the X window system). This document includes tips for using the mouse.

The ncurses package was originated by Pavel Curtis. The original maintainer of this package is Zeyd Ben-Halim <zmbenhal@netcom.com>. Eric S. Raymond <esr@snark.thyrsus.com> wrote many of the new features in versions after 1.8.1 and wrote most of this introduction. Jürgen Pfeifer wrote all of the menu and forms code as well as the Ada95 binding. Ongoing work is being done by Thomas Dickey (maintainer). Contact the current maintainers at bug-ncurses@gnu.org.

This document also describes the panels extension library, similarly modeled on the SVr4 panels facility. This library allows you to associate backing store with each of a stack or deck of overlapping windows, and provides operations for moving windows around in the stack that change their visibility in the natural way (handling window overlaps).

Finally, this document describes in detail the menus and forms extension libraries, also cloned from System V, which support easy construction and sequences of menus and fill-in forms.

Terminology

In this document, the following terminology is used with reasonable consistency:
window
A data structure describing a sub-rectangle of the screen (possibly the entire screen). You can write to a window as though it were a miniature screen, scrolling independently of other windows on the physical screen.
screens
A subset of windows which are as large as the terminal screen, i.e., they start at the upper left hand corner and encompass the lower right hand corner. One of these, stdscr, is automatically provided for the programmer.
terminal screen
The package's idea of what the terminal display currently looks like, i.e., what the user sees now. This is a special screen.

The Curses Library

An Overview of Curses

Compiling Programs using Curses

In order to use the library, it is necessary to have certain types and variables defined. Therefore, the programmer must have a line:
	  #include <curses.h>
at the top of the program source. The screen package uses the Standard I/O library, so <curses.h> includes <stdio.h>. <curses.h> also includes <termios.h>, <termio.h>, or <sgtty.h> depending on your system. It is redundant (but harmless) for the programmer to do these includes, too. In linking with curses you need to have -lncurses in your LDFLAGS or on the command line. There is no need for any other libraries.

Updating the Screen

In order to update the screen optimally, it is necessary for the routines to know what the screen currently looks like and what the programmer wants it to look like next. For this purpose, a data type (structure) named WINDOW is defined which describes a window image to the routines, including its starting position on the screen (the (y, x) coordinates of the upper left hand corner) and its size. One of these (called curscr, for current screen) is a screen image of what the terminal currently looks like. Another screen (called stdscr, for standard screen) is provided by default to make changes on.

A window is a purely internal representation. It is used to build and store a potential image of a portion of the terminal. It doesn't bear any necessary relation to what is really on the terminal screen; it's more like a scratchpad or write buffer.

To make the section of physical screen corresponding to a window reflect the contents of the window structure, the routine refresh() (or wrefresh() if the window is not stdscr) is called.

A given physical screen section may be within the scope of any number of overlapping windows. Also, changes can be made to windows in any order, without regard to motion efficiency. Then, at will, the programmer can effectively say ``make it look like this,'' and let the package implementation determine the most efficient way to repaint the screen.

Standard Windows and Function Naming Conventions

As hinted above, the routines can use several windows, but two are automatically given: curscr, which knows what the terminal looks like, and stdscr, which is what the programmer wants the terminal to look like next. The user should never actually access curscr directly. Changes should be made to through the API, and then the routine refresh() (or wrefresh()) called.

Many functions are defined to use stdscr as a default screen. For example, to add a character to stdscr, one calls addch() with the desired character as argument. To write to a different window. use the routine waddch() (for `w'indow-specific addch()) is provided. This convention of prepending function names with a `w' when they are to be applied to specific windows is consistent. The only routines which do not follow it are those for which a window must always be specified.

In order to move the current (y, x) coordinates from one point to another, the routines move() and wmove() are provided. However, it is often desirable to first move and then perform some I/O operation. In order to avoid clumsiness, most I/O routines can be preceded by the prefix 'mv' and the desired (y, x) coordinates prepended to the arguments to the function. For example, the calls

	  move(y, x);
	  addch(ch);
can be replaced by
	  mvaddch(y, x, ch);
and
	  wmove(win, y, x);
	  waddch(win, ch);
can be replaced by
	  mvwaddch(win, y, x, ch);
Note that the window description pointer (win) comes before the added (y, x) coordinates. If a function requires a window pointer, it is always the first parameter passed.

Variables

The curses library sets some variables describing the terminal capabilities.
      type   name      description
      ------------------------------------------------------------------
      int    LINES     number of lines on the terminal
      int    COLS      number of columns on the terminal
The curses.h also introduces some #define constants and types of general usefulness:
bool
boolean type, actually a `char' (e.g., bool doneit;)
TRUE
boolean `true' flag (1).
FALSE
boolean `false' flag (0).
ERR
error flag returned by routines on a failure (-1).
OK
error flag returned by routines when things go right.

Using the Library

Now we describe how to actually use the screen package. In it, we assume all updating, reading, etc. is applied to stdscr. These instructions will work on any window, providing you change the function names and parameters as mentioned above.

Here is a sample program to motivate the discussion:

#include <stdlib.h>
#include <curses.h>
#include <signal.h>

static void finish(int sig);

int
main(int argc, char *argv[])
{
    int num = 0;

    /* initialize your non-curses data structures here */

    (void) signal(SIGINT, finish);      /* arrange interrupts to terminate */

    (void) initscr();      /* initialize the curses library */
    keypad(stdscr, TRUE);  /* enable keyboard mapping */
    (void) nonl();         /* tell curses not to do NL->CR/NL on output */
    (void) cbreak();       /* take input chars one at a time, no wait for \n */
    (void) echo();         /* echo input - in color */

    if (has_colors())
    {
        start_color();

        /*
         * Simple color assignment, often all we need.  Color pair 0 cannot
	 * be redefined.  This example uses the same value for the color
	 * pair as for the foreground color, though of course that is not
	 * necessary:
         */
        init_pair(1, COLOR_RED,     COLOR_BLACK);
        init_pair(2, COLOR_GREEN,   COLOR_BLACK);
        init_pair(3, COLOR_YELLOW,  COLOR_BLACK);
        init_pair(4, COLOR_BLUE,    COLOR_BLACK);
        init_pair(5, COLOR_CYAN,    COLOR_BLACK);
        init_pair(6, COLOR_MAGENTA, COLOR_BLACK);
        init_pair(7, COLOR_WHITE,   COLOR_BLACK);
    }

    for (;;)
    {
        int c = getch();     /* refresh, accept single keystroke of input */
	attrset(COLOR_PAIR(num % 8));
	num++;

        /* process the command keystroke */
    }

    finish(0);               /* we're done */
}

static void finish(int sig)
{
    endwin();

    /* do your non-curses wrapup here */

    exit(0);
}

Starting up

In order to use the screen package, the routines must know about terminal characteristics, and the space for curscr and stdscr must be allocated. These function initscr() does both these things. Since it must allocate space for the windows, it can overflow memory when attempting to do so. On the rare occasions this happens, initscr() will terminate the program with an error message. initscr() must always be called before any of the routines which affect windows are used. If it is not, the program will core dump as soon as either curscr or stdscr are referenced. However, it is usually best to wait to call it until after you are sure you will need it, like after checking for startup errors. Terminal status changing routines like nl() and cbreak() should be called after initscr().

Once the screen windows have been allocated, you can set them up for your program. If you want to, say, allow a screen to scroll, use scrollok(). If you want the cursor to be left in place after the last change, use leaveok(). If this isn't done, refresh() will move the cursor to the window's current (y, x) coordinates after updating it.

You can create new windows of your own using the functions newwin(), derwin(), and subwin(). The routine delwin() will allow you to get rid of old windows. All the options described above can be applied to any window.

Output

Now that we have set things up, we will want to actually update the terminal. The basic functions used to change what will go on a window are addch() and move(). addch() adds a character at the current (y, x) coordinates. move() changes the current (y, x) coordinates to whatever you want them to be. It returns ERR if you try to move off the window. As mentioned above, you can combine the two into mvaddch() to do both things at once.

The other output functions, such as addstr() and printw(), all call addch() to add characters to the window.

After you have put on the window what you want there, when you want the portion of the terminal covered by the window to be made to look like it, you must call refresh(). In order to optimize finding changes, refresh() assumes that any part of the window not changed since the last refresh() of that window has not been changed on the terminal, i.e., that you have not refreshed a portion of the terminal with an overlapping window. If this is not the case, the routine touchwin() is provided to make it look like the entire window has been changed, thus making refresh() check the whole subsection of the terminal for changes.

If you call wrefresh() with curscr as its argument, it will make the screen look like curscr thinks it looks like. This is useful for implementing a command which would redraw the screen in case it get messed up.

Input

The complementary function to addch() is getch() which, if echo is set, will call addch() to echo the character. Since the screen package needs to know what is on the terminal at all times, if characters are to be echoed, the tty must be in raw or cbreak mode. Since initially the terminal has echoing enabled and is in ordinary ``cooked'' mode, one or the other has to changed before calling getch(); otherwise, the program's output will be unpredictable.

When you need to accept line-oriented input in a window, the functions wgetstr() and friends are available. There is even a wscanw() function that can do scanf()(3)-style multi-field parsing on window input. These pseudo-line-oriented functions turn on echoing while they execute.

The example code above uses the call keypad(stdscr, TRUE) to enable support for function-key mapping. With this feature, the getch() code watches the input stream for character sequences that correspond to arrow and function keys. These sequences are returned as pseudo-character values. The #define values returned are listed in the curses.h The mapping from sequences to #define values is determined by key_ capabilities in the terminal's terminfo entry.

Using Forms Characters

The addch() function (and some others, including box() and border()) can accept some pseudo-character arguments which are specially defined by ncurses. These are #define values set up in the curses.h header; see there for a complete list (look for the prefix ACS_).

The most useful of the ACS defines are the forms-drawing characters. You can use these to draw boxes and simple graphs on the screen. If the terminal does not have such characters, curses.h will map them to a recognizable (though ugly) set of ASCII defaults.

Character Attributes and Color

The ncurses package supports screen highlights including standout, reverse-video, underline, and blink. It also supports color, which is treated as another kind of highlight.

Highlights are encoded, internally, as high bits of the pseudo-character type (chtype) that curses.h uses to represent the contents of a screen cell. See the curses.h header file for a complete list of highlight mask values (look for the prefix A_).

There are two ways to make highlights. One is to logical-or the value of the highlights you want into the character argument of an addch() call, or any other output call that takes a chtype argument.

The other is to set the current-highlight value. This is logical-or'ed with any highlight you specify the first way. You do this with the functions attron(), attroff(), and attrset(); see the manual pages for details. Color is a special kind of highlight. The package actually thinks in terms of color pairs, combinations of foreground and background colors. The sample code above sets up eight color pairs, all of the guaranteed-available colors on black. Note that each color pair is, in effect, given the name of its foreground color. Any other range of eight non-conflicting values could have been used as the first arguments of the init_pair() values.

Once you've done an init_pair() that creates color-pair N, you can use COLOR_PAIR(N) as a highlight that invokes that particular color combination. Note that COLOR_PAIR(N), for constant N, is itself a compile-time constant and can be used in initializers.

Mouse Interfacing

The ncurses library also provides a mouse interface.
NOTE: this facility is specific to ncurses, it is not part of either the XSI Curses standard, nor of System V Release 4, nor BSD curses. System V Release 4 curses contains code with similar interface definitions, however it is not documented. Other than by disassembling the library, we have no way to determine exactly how that mouse code works. Thus, we recommend that you wrap mouse-related code in an #ifdef using the feature macro NCURSES_MOUSE_VERSION so it will not be compiled and linked on non-ncurses systems.
Presently, mouse event reporting works in the following environments:
  • xterm and similar programs such as rxvt.
  • Linux console, when configured with gpm(1), Alessandro Rubini's mouse server.
  • FreeBSD sysmouse (console)
  • OS/2 EMX

The mouse interface is very simple. To activate it, you use the function mousemask(), passing it as first argument a bit-mask that specifies what kinds of events you want your program to be able to see. It will return the bit-mask of events that actually become visible, which may differ from the argument if the mouse device is not capable of reporting some of the event types you specify.

Once the mouse is active, your application's command loop should watch for a return value of KEY_MOUSE from wgetch(). When you see this, a mouse event report has been queued. To pick it off the queue, use the function getmouse() (you must do this before the next wgetch(), otherwise another mouse event might come in and make the first one inaccessible).

Each call to getmouse() fills a structure (the address of which you'll pass it) with mouse event data. The event data includes zero-origin, screen-relative character-cell coordinates of the mouse pointer. It also includes an event mask. Bits in this mask will be set, corresponding to the event type being reported.

The mouse structure contains two additional fields which may be significant in the future as ncurses interfaces to new kinds of pointing device. In addition to x and y coordinates, there is a slot for a z coordinate; this might be useful with touch-screens that can return a pressure or duration parameter. There is also a device ID field, which could be used to distinguish between multiple pointing devices.

The class of visible events may be changed at any time via mousemask(). Events that can be reported include presses, releases, single-, double- and triple-clicks (you can set the maximum button-down time for clicks). If you don't make clicks visible, they will be reported as press-release pairs. In some environments, the event mask may include bits reporting the state of shift, alt, and ctrl keys on the keyboard during the event.

A function to check whether a mouse event fell within a given window is also supplied. You can use this to see whether a given window should consider a mouse event relevant to it.

Because mouse event reporting will not be available in all environments, it would be unwise to build ncurses applications that require the use of a mouse. Rather, you should use the mouse as a shortcut for point-and-shoot commands your application would normally accept from the keyboard. Two of the test games in the ncurses distribution (bs and knight) contain code that illustrates how this can be done.

See the manual page curs_mouse(3X) for full details of the mouse-interface functions.

Finishing Up

In order to clean up after the ncurses routines, the routine endwin() is provided. It restores tty modes to what they were when initscr() was first called, and moves the cursor down to the lower-left corner. Thus, anytime after the call to initscr, endwin() should be called before exiting.

Function Descriptions

We describe the detailed behavior of some important curses functions here, as a supplement to the manual page descriptions.

Initialization and Wrapup

initscr()
The first function called should almost always be initscr(). This will determine the terminal type and initialize curses data structures. initscr() also arranges that the first call to refresh() will clear the screen. If an error occurs a message is written to standard error and the program exits. Otherwise it returns a pointer to stdscr. A few functions may be called before initscr (slk_init(), filter(), ripoffline(), use_env(), and, if you are using multiple terminals, newterm().)
endwin()
Your program should always call endwin() before exiting or shelling out of the program. This function will restore tty modes, move the cursor to the lower left corner of the screen, reset the terminal into the proper non-visual mode. Calling refresh() or doupdate() after a temporary escape from the program will restore the ncurses screen from before the escape.
newterm(type, ofp, ifp)
A program which outputs to more than one terminal should use newterm() instead of initscr(). newterm() should be called once for each terminal. It returns a variable of type SCREEN * which should be saved as a reference to that terminal. (NOTE: a SCREEN variable is not a screen in the sense we are describing in this introduction, but a collection of parameters used to assist in optimizing the display.) The arguments are the type of the terminal (a string) and FILE pointers for the output and input of the terminal. If type is NULL then the environment variable $TERM is used. endwin() should called once at wrapup time for each terminal opened using this function.
set_term(new)
This function is used to switch to a different terminal previously opened by newterm(). The screen reference for the new terminal is passed as the parameter. The previous terminal is returned by the function. All other calls affect only the current terminal.
delscreen(sp)
The inverse of newterm(); deallocates the data structures associated with a given SCREEN reference.

Causing Output to the Terminal

refresh() and wrefresh(win)
These functions must be called to actually get any output on the terminal, as other routines merely manipulate data structures. wrefresh() copies the named window to the physical terminal screen, taking into account what is already there in order to do optimizations. refresh() does a refresh of stdscr. Unless leaveok() has been enabled, the physical cursor of the terminal is left at the location of the window's cursor.
doupdate() and wnoutrefresh(win)
These two functions allow multiple updates with more efficiency than wrefresh. To use them, it is important to understand how curses works. In addition to all the window structures, curses keeps two data structures representing the terminal screen: a physical screen, describing what is actually on the screen, and a virtual screen, describing what the programmer wants to have on the screen. wrefresh works by first copying the named window to the virtual screen (wnoutrefresh()), and then calling the routine to update the screen (doupdate()). If the programmer wishes to output several windows at once, a series of calls to wrefresh will result in alternating calls to wnoutrefresh() and doupdate(), causing several bursts of output to the screen. By calling wnoutrefresh() for each window, it is then possible to call doupdate() once, resulting in only one burst of output, with fewer total characters transmitted (this also avoids a visually annoying flicker at each update).

Low-Level Capability Access

setupterm(term, filenum, errret)
This routine is called to initialize a terminal's description, without setting up the curses screen structures or changing the tty-driver mode bits. term is the character string representing the name of the terminal being used. filenum is the UNIX file descriptor of the terminal to be used for output. errret is a pointer to an integer, in which a success or failure indication is returned. The values returned can be 1 (all is well), 0 (no such terminal), or -1 (some problem locating the terminfo database).

The value of term can be given as NULL, which will cause the value of TERM in the environment to be used. The errret pointer can also be given as NULL, meaning no error code is wanted. If errret is defaulted, and something goes wrong, setupterm() will print an appropriate error message and exit, rather than returning. Thus, a simple program can call setupterm(0, 1, 0) and not worry about initialization errors.

After the call to setupterm(), the global variable cur_term is set to point to the current structure of terminal capabilities. By calling setupterm() for each terminal, and saving and restoring cur_term, it is possible for a program to use two or more terminals at once. Setupterm() also stores the names section of the terminal description in the global character array ttytype[]. Subsequent calls to setupterm() will overwrite this array, so you'll have to save it yourself if need be.

Debugging

NOTE: These functions are not part of the standard curses API!
trace()
This function can be used to explicitly set a trace level. If the trace level is nonzero, execution of your program will generate a file called `trace' in the current working directory containing a report on the library's actions. Higher trace levels enable more detailed (and verbose) reporting -- see comments attached to TRACE_ defines in the curses.h file for details. (It is also possible to set a trace level by assigning a trace level value to the environment variable NCURSES_TRACE).
_tracef()
This function can be used to output your own debugging information. It is only available only if you link with -lncurses_g. It can be used the same way as printf(), only it outputs a newline after the end of arguments. The output goes to a file called trace in the current directory.
Trace logs can be difficult to interpret due to the sheer volume of data dumped in them. There is a script called tracemunch included with the ncurses distribution that can alleviate this problem somewhat; it compacts long sequences of similar operations into more succinct single-line pseudo-operations. These pseudo-ops can be distinguished by the fact that they are named in capital letters.

Hints, Tips, and Tricks

The ncurses manual pages are a complete reference for this library. In the remainder of this document, we discuss various useful methods that may not be obvious from the manual page descriptions.

Some Notes of Caution

If you find yourself thinking you need to use noraw() or nocbreak(), think again and move carefully. It's probably better design to use getstr() or one of its relatives to simulate cooked mode. The noraw() and nocbreak() functions try to restore cooked mode, but they may end up clobbering some control bits set before you started your application. Also, they have always been poorly documented, and are likely to hurt your application's usability with other curses libraries.

Bear in mind that refresh() is a synonym for wrefresh(stdscr). Don't try to mix use of stdscr with use of windows declared by newwin(); a refresh() call will blow them off the screen. The right way to handle this is to use subwin(), or not touch stdscr at all and tile your screen with declared windows which you then wnoutrefresh() somewhere in your program event loop, with a single doupdate() call to trigger actual repainting.

You are much less likely to run into problems if you design your screen layouts to use tiled rather than overlapping windows. Historically, curses support for overlapping windows has been weak, fragile, and poorly documented. The ncurses library is not yet an exception to this rule.

There is a panels library included in the ncurses distribution that does a pretty good job of strengthening the overlapping-windows facilities.

Try to avoid using the global variables LINES and COLS. Use getmaxyx() on the stdscr context instead. Reason: your code may be ported to run in an environment with window resizes, in which case several screens could be open with different sizes.

Temporarily Leaving NCURSES Mode

Sometimes you will want to write a program that spends most of its time in screen mode, but occasionally returns to ordinary `cooked' mode. A common reason for this is to support shell-out. This behavior is simple to arrange in ncurses.

To leave ncurses mode, call endwin() as you would if you were intending to terminate the program. This will take the screen back to cooked mode; you can do your shell-out. When you want to return to ncurses mode, simply call refresh() or doupdate(). This will repaint the screen.

There is a boolean function, isendwin(), which code can use to test whether ncurses screen mode is active. It returns TRUE in the interval between an endwin() call and the following refresh(), FALSE otherwise.

Here is some sample code for shellout:

    addstr("Shelling out...");
    def_prog_mode();           /* save current tty modes */
    endwin();                  /* restore original tty modes */
    system("sh");              /* run shell */
    addstr("returned.\n");     /* prepare return message */
    refresh();                 /* restore save modes, repaint screen */

Using NCURSES under XTERM

A resize operation in X sends SIGWINCH to the application running under xterm. The easiest way to handle SIGWINCH is to do an endwin, followed by an refresh and a screen repaint you code yourself. The refresh will pick up the new screen size from the xterm's environment.

That is the standard way, of course (it even works with some vendor's curses implementations). Its drawback is that it clears the screen to reinitialize the display, and does not resize subwindows which must be shrunk. Ncurses provides an extension which works better, the resizeterm function. That function ensures that all windows are limited to the new screen dimensions, and pads stdscr with blanks if the screen is larger.

The ncurses library provides a SIGWINCH signal handler, which pushes a KEY_RESIZE via the wgetch() calls. When ncurses returns that code, it calls resizeterm to update the size of the standard screen's window, repainting that (filling with blanks or truncating as needed). It also resizes other windows, but its effect may be less satisfactory because it cannot know how you want the screen re-painted. You will usually have to write special-purpose code to handle KEY_RESIZE yourself.

Handling Multiple Terminal Screens

The initscr() function actually calls a function named newterm() to do most of its work. If you are writing a program that opens multiple terminals, use newterm() directly.

For each call, you will have to specify a terminal type and a pair of file pointers; each call will return a screen reference, and stdscr will be set to the last one allocated. You will switch between screens with the set_term call. Note that you will also have to call def_shell_mode and def_prog_mode on each tty yourself.

Testing for Terminal Capabilities

Sometimes you may want to write programs that test for the presence of various capabilities before deciding whether to go into ncurses mode. An easy way to do this is to call setupterm(), then use the functions tigetflag(), tigetnum(), and tigetstr() to do your testing.

A particularly useful case of this often comes up when you want to test whether a given terminal type should be treated as `smart' (cursor-addressable) or `stupid'. The right way to test this is to see if the return value of tigetstr("cup") is non-NULL. Alternatively, you can include the term.h file and test the value of the macro cursor_address.

Tuning for Speed

Use the addchstr() family of functions for fast screen-painting of text when you know the text doesn't contain any control characters. Try to make attribute changes infrequent on your screens. Don't use the immedok() option!

Special Features of NCURSES

The wresize() function allows you to resize a window in place. The associated resizeterm() function simplifies the construction of SIGWINCH handlers, for resizing all windows.

The define_key() function allows you to define at runtime function-key control sequences which are not in the terminal description. The keyok() function allows you to temporarily enable or disable interpretation of any function-key control sequence.

The use_default_colors() function allows you to construct applications which can use the terminal's default foreground and background colors as an additional "default" color. Several terminal emulators support this feature, which is based on ISO 6429.

Ncurses supports up 16 colors, unlike SVr4 curses which defines only 8. While most terminals which provide color allow only 8 colors, about a quarter (including XFree86 xterm) support 16 colors.

Compatibility with Older Versions

Despite our best efforts, there are some differences between ncurses and the (undocumented!) behavior of older curses implementations. These arise from ambiguities or omissions in the documentation of the API.

Refresh of Overlapping Windows

If you define two windows A and B that overlap, and then alternately scribble on and refresh them, the changes made to the overlapping region under historic curses versions were often not documented precisely.

To understand why this is a problem, remember that screen updates are calculated between two representations of the entire display. The documentation says that when you refresh a window, it is first copied to the virtual screen, and then changes are calculated to update the physical screen (and applied to the terminal). But "copied to" is not very specific, and subtle differences in how copying works can produce different behaviors in the case where two overlapping windows are each being refreshed at unpredictable intervals.

What happens to the overlapping region depends on what wnoutrefresh() does with its argument -- what portions of the argument window it copies to the virtual screen. Some implementations do "change copy", copying down only locations in the window that have changed (or been marked changed with wtouchln() and friends). Some implementations do "entire copy", copying all window locations to the virtual screen whether or not they have changed.

The ncurses library itself has not always been consistent on this score. Due to a bug, versions 1.8.7 to 1.9.8a did entire copy. Versions 1.8.6 and older, and versions 1.9.9 and newer, do change copy.

For most commercial curses implementations, it is not documented and not known for sure (at least not to the ncurses maintainers) whether they do change copy or entire copy. We know that System V release 3 curses has logic in it that looks like an attempt to do change copy, but the surrounding logic and data representations are sufficiently complex, and our knowledge sufficiently indirect, that it's hard to know whether this is reliable. It is not clear what the SVr4 documentation and XSI standard intend. The XSI Curses standard barely mentions wnoutrefresh(); the SVr4 documents seem to be describing entire-copy, but it is possible with some effort and straining to read them the other way.

It might therefore be unwise to rely on either behavior in programs that might have to be linked with other curses implementations. Instead, you can do an explicit touchwin() before the wnoutrefresh() call to guarantee an entire-contents copy anywhere.

The really clean way to handle this is to use the panels library. If, when you want a screen update, you do update_panels(), it will do all the necessary wnoutrefresh() calls for whatever panel stacking order you have defined. Then you can do one doupdate() and there will be a single burst of physical I/O that will do all your updates.

Background Erase

If you have been using a very old versions of ncurses (1.8.7 or older) you may be surprised by the behavior of the erase functions. In older versions, erased areas of a window were filled with a blank modified by the window's current attribute (as set by wattrset(), wattron(), wattroff() and friends).

In newer versions, this is not so. Instead, the attribute of erased blanks is normal unless and until it is modified by the functions bkgdset() or wbkgdset().

This change in behavior conforms ncurses to System V Release 4 and the XSI Curses standard.

XSI Curses Conformance

The ncurses library is intended to be base-level conformant with the XSI Curses standard from X/Open. Many extended-level features (in fact, almost all features not directly concerned with wide characters and internationalization) are also supported.

One effect of XSI conformance is the change in behavior described under "Background Erase -- Compatibility with Old Versions".

Also, ncurses meets the XSI requirement that every macro entry point have a corresponding function which may be linked (and will be prototype-checked) if the macro definition is disabled with #undef.

The Panels Library

The ncurses library by itself provides good support for screen displays in which the windows are tiled (non-overlapping). In the more general case that windows may overlap, you have to use a series of wnoutrefresh() calls followed by a doupdate(), and be careful about the order you do the window refreshes in. It has to be bottom-upwards, otherwise parts of windows that should be obscured will show through.

When your interface design is such that windows may dive deeper into the visibility stack or pop to the top at runtime, the resulting book-keeping can be tedious and difficult to get right. Hence the panels library.

The panel library first appeared in AT&T System V. The version documented here is the panel code distributed with ncurses.

Compiling With the Panels Library

Your panels-using modules must import the panels library declarations with
	  #include <panel.h>
and must be linked explicitly with the panels library using an -lpanel argument. Note that they must also link the ncurses library with -lncurses. Many linkers are two-pass and will accept either order, but it is still good practice to put -lpanel first and -lncurses second.

Overview of Panels

A panel object is a window that is implicitly treated as part of a deck including all other panel objects. The deck has an implicit bottom-to-top visibility order. The panels library includes an update function (analogous to refresh()) that displays all panels in the deck in the proper order to resolve overlaps. The standard window, stdscr, is considered below all panels.

Details on the panels functions are available in the man pages. We'll just hit the highlights here.

You create a panel from a window by calling new_panel() on a window pointer. It then becomes the top of the deck. The panel's window is available as the value of panel_window() called with the panel pointer as argument.

You can delete a panel (removing it from the deck) with del_panel. This will not deallocate the associated window; you have to do that yourself. You can replace a panel's window with a different window by calling replace_window. The new window may be of different size; the panel code will re-compute all overlaps. This operation doesn't change the panel's position in the deck.

To move a panel's window, use move_panel(). The mvwin() function on the panel's window isn't sufficient because it doesn't update the panels library's representation of where the windows are. This operation leaves the panel's depth, contents, and size unchanged.

Two functions (top_panel(), bottom_panel()) are provided for rearranging the deck. The first pops its argument window to the top of the deck; the second sends it to the bottom. Either operation leaves the panel's screen location, contents, and size unchanged.

The function update_panels() does all the wnoutrefresh() calls needed to prepare for doupdate() (which you must call yourself, afterwards).

Typically, you will want to call update_panels() and doupdate() just before accepting command input, once in each cycle of interaction with the user. If you call update_panels() after each and every panel write, you'll generate a lot of unnecessary refresh activity and screen flicker.

Panels, Input, and the Standard Screen

You shouldn't mix wnoutrefresh() or wrefresh() operations with panels code; this will work only if the argument window is either in the top panel or unobscured by any other panels.

The stsdcr window is a special case. It is considered below all panels. Because changes to panels may obscure parts of stdscr, though, you should call update_panels() before doupdate() even when you only change stdscr.

Note that wgetch automatically calls wrefresh. Therefore, before requesting input from a panel window, you need to be sure that the panel is totally unobscured.

There is presently no way to display changes to one obscured panel without repainting all panels.

Hiding Panels

It's possible to remove a panel from the deck temporarily; use hide_panel for this. Use show_panel() to render it visible again. The predicate function panel_hidden tests whether or not a panel is hidden.

The panel_update code ignores hidden panels. You cannot do top_panel() or bottom_panel on a hidden panel(). Other panels operations are applicable.

Miscellaneous Other Facilities

It's possible to navigate the deck using the functions panel_above() and panel_below. Handed a panel pointer, they return the panel above or below that panel. Handed NULL, they return the bottom-most or top-most panel.

Every panel has an associated user pointer, not used by the panel code, to which you can attach application data. See the man page documentation of set_panel_userptr() and panel_userptr for details.

The Menu Library

A menu is a screen display that assists the user to choose some subset of a given set of items. The menu library is a curses extension that supports easy programming of menu hierarchies with a uniform but flexible interface.

The menu library first appeared in AT&T System V. The version documented here is the menu code distributed with ncurses.

Compiling With the menu Library

Your menu-using modules must import the menu library declarations with
	  #include <menu.h>
and must be linked explicitly with the menus library using an -lmenu argument. Note that they must also link the ncurses library with -lncurses. Many linkers are two-pass and will accept either order, but it is still good practice to put -lmenu first and -lncurses second.

Overview of Menus

The menus created by this library consist of collections of items including a name string part and a description string part. To make menus, you create groups of these items and connect them with menu frame objects.

The menu can then by posted, that is written to an associated window. Actually, each menu has two associated windows; a containing window in which the programmer can scribble titles or borders, and a subwindow in which the menu items proper are displayed. If this subwindow is too small to display all the items, it will be a scrollable viewport on the collection of items.

A menu may also be unposted (that is, undisplayed), and finally freed to make the storage associated with it and its items available for re-use.

The general flow of control of a menu program looks like this:

  1. Initialize curses.
  2. Create the menu items, using new_item().
  3. Create the menu using new_menu().
  4. Post the menu using post_menu().
  5. Refresh the screen.
  6. Process user requests via an input loop.
  7. Unpost the menu using unpost_menu().
  8. Free the menu, using free_menu().
  9. Free the items using free_item().
  10. Terminate curses.

Selecting items

Menus may be multi-valued or (the default) single-valued (see the manual page menu_opts(3x) to see how to change the default). Both types always have a current item.

From a single-valued menu you can read the selected value simply by looking at the current item. From a multi-valued menu, you get the selected set by looping through the items applying the item_value() predicate function. Your menu-processing code can use the function set_item_value() to flag the items in the select set.

Menu items can be made unselectable using set_item_opts() or item_opts_off() with the O_SELECTABLE argument. This is the only option so far defined for menus, but it is good practice to code as though other option bits might be on.

Menu Display

The menu library calculates a minimum display size for your window, based on the following variables:
  • The number and maximum length of the menu items
  • Whether the O_ROWMAJOR option is enabled
  • Whether display of descriptions is enabled
  • Whatever menu format may have been set by the programmer
  • The length of the menu mark string used for highlighting selected items
The function set_menu_format() allows you to set the maximum size of the viewport or menu page that will be used to display menu items. You can retrieve any format associated with a menu with menu_format(). The default format is rows=16, columns=1.

The actual menu page may be smaller than the format size. This depends on the item number and size and whether O_ROWMAJOR is on. This option (on by default) causes menu items to be displayed in a `raster-scan' pattern, so that if more than one item will fit horizontally the first couple of items are side-by-side in the top row. The alternative is column-major display, which tries to put the first several items in the first column.

As mentioned above, a menu format not large enough to allow all items to fit on-screen will result in a menu display that is vertically scrollable.

You can scroll it with requests to the menu driver, which will be described in the section on menu input handling.

Each menu has a mark string used to visually tag selected items; see the menu_mark(3x) manual page for details. The mark string length also influences the menu page size.

The function scale_menu() returns the minimum display size that the menu code computes from all these factors. There are other menu display attributes including a select attribute, an attribute for selectable items, an attribute for unselectable items, and a pad character used to separate item name text from description text. These have reasonable defaults which the library allows you to change (see the menu_attribs(3x) manual page.

Menu Windows

Each menu has, as mentioned previously, a pair of associated windows. Both these windows are painted when the menu is posted and erased when the menu is unposted.

The outer or frame window is not otherwise touched by the menu routines. It exists so the programmer can associate a title, a border, or perhaps help text with the menu and have it properly refreshed or erased at post/unpost time. The inner window or subwindow is where the current menu page is displayed.

By default, both windows are stdscr. You can set them with the functions in menu_win(3x).

When you call post_menu(), you write the menu to its subwindow. When you call unpost_menu(), you erase the subwindow, However, neither of these actually modifies the screen. To do that, call wrefresh() or some equivalent.

Processing Menu Input

The main loop of your menu-processing code should call menu_driver() repeatedly. The first argument of this routine is a menu pointer; the second is a menu command code. You should write an input-fetching routine that maps input characters to menu command codes, and pass its output to menu_driver(). The menu command codes are fully documented in menu_driver(3x).

The simplest group of command codes is REQ_NEXT_ITEM, REQ_PREV_ITEM, REQ_FIRST_ITEM, REQ_LAST_ITEM, REQ_UP_ITEM, REQ_DOWN_ITEM, REQ_LEFT_ITEM, REQ_RIGHT_ITEM. These change the currently selected item. These requests may cause scrolling of the menu page if it only partially displayed.

There are explicit requests for scrolling which also change the current item (because the select location does not change, but the item there does). These are REQ_SCR_DLINE, REQ_SCR_ULINE, REQ_SCR_DPAGE, and REQ_SCR_UPAGE.

The REQ_TOGGLE_ITEM selects or deselects the current item. It is for use in multi-valued menus; if you use it with O_ONEVALUE on, you'll get an error return (E_REQUEST_DENIED).

Each menu has an associated pattern buffer. The menu_driver() logic tries to accumulate printable ASCII characters passed in in that buffer; when it matches a prefix of an item name, that item (or the next matching item) is selected. If appending a character yields no new match, that character is deleted from the pattern buffer, and menu_driver() returns E_NO_MATCH.

Some requests change the pattern buffer directly: REQ_CLEAR_PATTERN, REQ_BACK_PATTERN, REQ_NEXT_MATCH, REQ_PREV_MATCH. The latter two are useful when pattern buffer input matches more than one item in a multi-valued menu.

Each successful scroll or item navigation request clears the pattern buffer. It is also possible to set the pattern buffer explicitly with set_menu_pattern().

Finally, menu driver requests above the constant MAX_COMMAND are considered application-specific commands. The menu_driver() code ignores them and returns E_UNKNOWN_COMMAND.

Miscellaneous Other Features

Various menu options can affect the processing and visual appearance and input processing of menus. See menu_opts(3x) for details.

It is possible to change the current item from application code; this is useful if you want to write your own navigation requests. It is also possible to explicitly set the top row of the menu display. See mitem_current(3x). If your application needs to change the menu subwindow cursor for any reason, pos_menu_cursor() will restore it to the correct location for continuing menu driver processing.

It is possible to set hooks to be called at menu initialization and wrapup time, and whenever the selected item changes. See menu_hook(3x).

Each item, and each menu, has an associated user pointer on which you can hang application data. See mitem_userptr(3x) and menu_userptr(3x).

The Forms Library

The form library is a curses extension that supports easy programming of on-screen forms for data entry and program control.

The form library first appeared in AT&T System V. The version documented here is the form code distributed with ncurses.

Compiling With the form Library

Your form-using modules must import the form library declarations with
	  #include <form.h>
and must be linked explicitly with the forms library using an -lform argument. Note that they must also link the ncurses library with -lncurses. Many linkers are two-pass and will accept either order, but it is still good practice to put -lform first and -lncurses second.

Overview of Forms

A form is a collection of fields; each field may be either a label (explanatory text) or a data-entry location. Long forms may be segmented into pages; each entry to a new page clears the screen.

To make forms, you create groups of fields and connect them with form frame objects; the form library makes this relatively simple.

Once defined, a form can be posted, that is written to an associated window. Actually, each form has two associated windows; a containing window in which the programmer can scribble titles or borders, and a subwindow in which the form fields proper are displayed.

As the form user fills out the posted form, navigation and editing keys support movement between fields, editing keys support modifying field, and plain text adds to or changes data in a current field. The form library allows you (the forms designer) to bind each navigation and editing key to any keystroke accepted by curses Fields may have validation conditions on them, so that they check input data for type and value. The form library supplies a rich set of pre-defined field types, and makes it relatively easy to define new ones.

Once its transaction is completed (or aborted), a form may be unposted (that is, undisplayed), and finally freed to make the storage associated with it and its items available for re-use.

The general flow of control of a form program looks like this:

  1. Initialize curses.
  2. Create the form fields, using new_field().
  3. Create the form using new_form().
  4. Post the form using post_form().
  5. Refresh the screen.
  6. Process user requests via an input loop.
  7. Unpost the form using unpost_form().
  8. Free the form, using free_form().
  9. Free the fields using free_field().
  10. Terminate curses.
Note that this looks much like a menu program; the form library handles tasks which are in many ways similar, and its interface was obviously designed to resemble that of the menu library wherever possible.

In forms programs, however, the `process user requests' is somewhat more complicated than for menus. Besides menu-like navigation operations, the menu driver loop has to support field editing and data validation.

Creating and Freeing Fields and Forms

The basic function for creating fields is new_field():
FIELD *new_field(int height, int width,   /* new field size */
                 int top, int left,       /* upper left corner */
                 int offscreen,           /* number of offscreen rows */
                 int nbuf);               /* number of working buffers */
Menu items always occupy a single row, but forms fields may have multiple rows. So new_field() requires you to specify a width and height (the first two arguments, which mist both be greater than zero).

You must also specify the location of the field's upper left corner on the screen (the third and fourth arguments, which must be zero or greater). Note that these coordinates are relative to the form subwindow, which will coincide with stdscr by default but need not be stdscr if you've done an explicit set_form_win() call.

The fifth argument allows you to specify a number of off-screen rows. If this is zero, the entire field will always be displayed. If it is nonzero, the form will be scrollable, with only one screen-full (initially the top part) displayed at any given time. If you make a field dynamic and grow it so it will no longer fit on the screen, the form will become scrollable even if the offscreen argument was initially zero.

The forms library allocates one working buffer per field; the size of each buffer is ((height + offscreen)*width + 1, one character for each position in the field plus a NUL terminator. The sixth argument is the number of additional data buffers to allocate for the field; your application can use them for its own purposes.

FIELD *dup_field(FIELD *field,            /* field to copy */
                 int top, int left);      /* location of new copy */
The function dup_field() duplicates an existing field at a new location. Size and buffering information are copied; some attribute flags and status bits are not (see the form_field_new(3X) for details).
FIELD *link_field(FIELD *field,           /* field to copy */
                  int top, int left);     /* location of new copy */
The function link_field() also duplicates an existing field at a new location. The difference from dup_field() is that it arranges for the new field's buffer to be shared with the old one.

Besides the obvious use in making a field editable from two different form pages, linked fields give you a way to hack in dynamic labels. If you declare several fields linked to an original, and then make them inactive, changes from the original will still be propagated to the linked fields.

As with duplicated fields, linked fields have attribute bits separate from the original.

As you might guess, all these field-allocations return NULL if the field allocation is not possible due to an out-of-memory error or out-of-bounds arguments.

To connect fields to a form, use

FORM *new_form(FIELD **fields);
This function expects to see a NULL-terminated array of field pointers. Said fields are connected to a newly-allocated form object; its address is returned (or else NULL if the allocation fails).

Note that new_field() does not copy the pointer array into private storage; if you modify the contents of the pointer array during forms processing, all manner of bizarre things might happen. Also note that any given field may only be connected to one form.

The functions free_field() and free_form are available to free field and form objects. It is an error to attempt to free a field connected to a form, but not vice-versa; thus, you will generally free your form objects first.

Fetching and Changing Field Attributes

Each form field has a number of location and size attributes associated with it. There are other field attributes used to control display and editing of the field. Some (for example, the O_STATIC bit) involve sufficient complications to be covered in sections of their own later on. We cover the functions used to get and set several basic attributes here.

When a field is created, the attributes not specified by the new_field function are copied from an invisible system default field. In attribute-setting and -fetching functions, the argument NULL is taken to mean this field. Changes to it persist as defaults until your forms application terminates.

Fetching Size and Location Data

You can retrieve field sizes and locations through:
int field_info(FIELD *field,              /* field from which to fetch */
               int *height, *int width,   /* field size */
               int *top, int *left,       /* upper left corner */
               int *offscreen,            /* number of offscreen rows */
               int *nbuf);                /* number of working buffers */
This function is a sort of inverse of new_field(); instead of setting size and location attributes of a new field, it fetches them from an existing one.

Changing the Field Location

It is possible to move a field's location on the screen:
int move_field(FIELD *field,              /* field to alter */
               int top, int left);        /* new upper-left corner */
You can, of course. query the current location through field_info().

The Justification Attribute

One-line fields may be unjustified, justified right, justified left, or centered. Here is how you manipulate this attribute:
int set_field_just(FIELD *field,          /* field to alter */
                   int justmode);         /* mode to set */

int field_just(FIELD *field);             /* fetch mode of field */
The mode values accepted and returned by this functions are preprocessor macros NO_JUSTIFICATION, JUSTIFY_RIGHT, JUSTIFY_LEFT, or JUSTIFY_CENTER.

Field Display Attributes

For each field, you can set a foreground attribute for entered characters, a background attribute for the entire field, and a pad character for the unfilled portion of the field. You can also control pagination of the form.

This group of four field attributes controls the visual appearance of the field on the screen, without affecting in any way the data in the field buffer.

int set_field_fore(FIELD *field,          /* field to alter */
                   chtype attr);          /* attribute to set */

chtype field_fore(FIELD *field);          /* field to query */

int set_field_back(FIELD *field,          /* field to alter */
                   chtype attr);          /* attribute to set */

chtype field_back(FIELD *field);          /* field to query */

int set_field_pad(FIELD *field,           /* field to alter */
                 int pad);                /* pad character to set */

chtype field_pad(FIELD *field);

int set_new_page(FIELD *field,            /* field to alter */
                 int flag);               /* TRUE to force new page */

chtype new_page(FIELD *field);            /* field to query */
The attributes set and returned by the first four functions are normal curses(3x) display attribute values (A_STANDOUT, A_BOLD, A_REVERSE etc). The page bit of a field controls whether it is displayed at the start of a new form screen.

Field Option Bits

There is also a large collection of field option bits you can set to control various aspects of forms processing. You can manipulate them with these functions:
int set_field_opts(FIELD *field,          /* field to alter */
                   int attr);             /* attribute to set */

int field_opts_on(FIELD *field,           /* field to alter */
                  int attr);              /* attributes to turn on */

int field_opts_off(FIELD *field,          /* field to alter */
                   int attr);             /* attributes to turn off */

int field_opts(FIELD *field);             /* field to query */
By default, all options are on. Here are the available option bits:
O_VISIBLE
Controls whether the field is visible on the screen. Can be used during form processing to hide or pop up fields depending on the value of parent fields.
O_ACTIVE
Controls whether the field is active during forms processing (i.e. visited by form navigation keys). Can be used to make labels or derived fields with buffer values alterable by the forms application, not the user.
O_PUBLIC
Controls whether data is displayed during field entry. If this option is turned off on a field, the library will accept and edit data in that field, but it will not be displayed and the visible field cursor will not move. You can turn off the O_PUBLIC bit to define password fields.
O_EDIT
Controls whether the field's data can be modified. When this option is off, all editing requests except REQ_PREV_CHOICE and REQ_NEXT_CHOICE will fail. Such read-only fields may be useful for help messages.
O_WRAP
Controls word-wrapping in multi-line fields. Normally, when any character of a (blank-separated) word reaches the end of the current line, the entire word is wrapped to the next line (assuming there is one). When this option is off, the word will be split across the line break.
O_BLANK
Controls field blanking. When this option is on, entering a character at the first field position erases the entire field (except for the just-entered character).
O_AUTOSKIP
Controls automatic skip to next field when this one fills. Normally, when the forms user tries to type more data into a field than will fit, the editing location jumps to next field. When this option is off, the user's cursor will hang at the end of the field. This option is ignored in dynamic fields that have not reached their size limit.
O_NULLOK
Controls whether validation is applied to blank fields. Normally, it is not; the user can leave a field blank without invoking the usual validation check on exit. If this option is off on a field, exit from it will invoke a validation check.
O_PASSOK
Controls whether validation occurs on every exit, or only after the field is modified. Normally the latter is true. Setting O_PASSOK may be useful if your field's validation function may change during forms processing.
O_STATIC
Controls whether the field is fixed to its initial dimensions. If you turn this off, the field becomes dynamic and will stretch to fit entered data.
A field's options cannot be changed while the field is currently selected. However, options may be changed on posted fields that are not current.

The option values are bit-masks and can be composed with logical-or in the obvious way.

Field Status

Every field has a status flag, which is set to FALSE when the field is created and TRUE when the value in field buffer 0 changes. This flag can be queried and set directly:
int set_field_status(FIELD *field,      /* field to alter */
                   int status);         /* mode to set */

int field_status(FIELD *field);         /* fetch mode of field */
Setting this flag under program control can be useful if you use the same form repeatedly, looking for modified fields each time.

Calling field_status() on a field not currently selected for input will return a correct value. Calling field_status() on a field that is currently selected for input may not necessarily give a correct field status value, because entered data isn't necessarily copied to buffer zero before the exit validation check. To guarantee that the returned status value reflects reality, call field_status() either (1) in the field's exit validation check routine, (2) from the field's or form's initialization or termination hooks, or (3) just after a REQ_VALIDATION request has been processed by the forms driver.

Field User Pointer

Each field structure contains one character pointer slot that is not used by the forms library. It is intended to be used by applications to store private per-field data. You can manipulate it with:
int set_field_userptr(FIELD *field,       /* field to alter */
                   char *userptr);        /* mode to set */

char *field_userptr(FIELD *field);        /* fetch mode of field */
(Properly, this user pointer field ought to have (void *) type. The (char *) type is retained for System V compatibility.)

It is valid to set the user pointer of the default field (with a set_field_userptr() call passed a NULL field pointer.) When a new field is created, the default-field user pointer is copied to initialize the new field's user pointer.

Variable-Sized Fields

Normally, a field is fixed at the size specified for it at creation time. If, however, you turn off its O_STATIC bit, it becomes dynamic and will automatically resize itself to accommodate data as it is entered. If the field has extra buffers associated with it, they will grow right along with the main input buffer.

A one-line dynamic field will have a fixed height (1) but variable width, scrolling horizontally to display data within the field area as originally dimensioned and located. A multi-line dynamic field will have a fixed width, but variable height (number of rows), scrolling vertically to display data within the field area as originally dimensioned and located.

Normally, a dynamic field is allowed to grow without limit. But it is possible to set an upper limit on the size of a dynamic field. You do it with this function:

int set_max_field(FIELD *field,     /* field to alter (may not be NULL) */
                   int max_size);   /* upper limit on field size */
If the field is one-line, max_size is taken to be a column size limit; if it is multi-line, it is taken to be a line size limit. To disable any limit, use an argument of zero. The growth limit can be changed whether or not the O_STATIC bit is on, but has no effect until it is.

The following properties of a field change when it becomes dynamic:

  • If there is no growth limit, there is no final position of the field; therefore O_AUTOSKIP and O_NL_OVERLOAD are ignored.
  • Field justification will be ignored (though whatever justification is set up will be retained internally and can be queried).
  • The dup_field() and link_field() calls copy dynamic-buffer sizes. If the O_STATIC option is set on one of a collection of links, buffer resizing will occur only when the field is edited through that link.
  • The call field_info() will retrieve the original static size of the field; use dynamic_field_info() to get the actual dynamic size.

Field Validation

By default, a field will accept any data that will fit in its input buffer. However, it is possible to attach a validation type to a field. If you do this, any attempt to leave the field while it contains data that doesn't match the validation type will fail. Some validation types also have a character-validity check for each time a character is entered in the field.

A field's validation check (if any) is not called when set_field_buffer() modifies the input buffer, nor when that buffer is changed through a linked field.

The form library provides a rich set of pre-defined validation types, and gives you the capability to define custom ones of your own. You can examine and change field validation attributes with the following functions:

int set_field_type(FIELD *field,          /* field to alter */
                   FIELDTYPE *ftype,      /* type to associate */
                   ...);                  /* additional arguments*/

FIELDTYPE *field_type(FIELD *field);      /* field to query */
The validation type of a field is considered an attribute of the field. As with other field attributes, Also, doing set_field_type() with a NULL field default will change the system default for validation of newly-created fields.

Here are the pre-defined validation types:

TYPE_ALPHA

This field type accepts alphabetic data; no blanks, no digits, no special characters (this is checked at character-entry time). It is set up with:
int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_ALPHA,            /* type to associate */
                   int width);            /* maximum width of field */
The width argument sets a minimum width of data. Typically you'll want to set this to the field width; if it's greater than the field width, the validation check will always fail. A minimum width of zero makes field completion optional.

TYPE_ALNUM

This field type accepts alphabetic data and digits; no blanks, no special characters (this is checked at character-entry time). It is set up with:
int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_ALNUM,            /* type to associate */
                   int width);            /* maximum width of field */
The width argument sets a minimum width of data. As with TYPE_ALPHA, typically you'll want to set this to the field width; if it's greater than the field width, the validation check will always fail. A minimum width of zero makes field completion optional.

TYPE_ENUM

This type allows you to restrict a field's values to be among a specified set of string values (for example, the two-letter postal codes for U.S. states). It is set up with:
int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_ENUM,             /* type to associate */
                   char **valuelist;      /* list of possible values */
                   int checkcase;         /* case-sensitive? */
                   int checkunique);      /* must specify uniquely? */
The valuelist parameter must point at a NULL-terminated list of valid strings. The checkcase argument, if true, makes comparison with the string case-sensitive.

When the user exits a TYPE_ENUM field, the validation procedure tries to complete the data in the buffer to a valid entry. If a complete choice string has been entered, it is of course valid. But it is also possible to enter a prefix of a valid string and have it completed for you.

By default, if you enter such a prefix and it matches more than one value in the string list, the prefix will be completed to the first matching value. But the checkunique argument, if true, requires prefix matches to be unique in order to be valid.

The REQ_NEXT_CHOICE and REQ_PREV_CHOICE input requests can be particularly useful with these fields.

TYPE_INTEGER

This field type accepts an integer. It is set up as follows:
int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_INTEGER,          /* type to associate */
                   int padding,           /* # places to zero-pad to */
                   int vmin, int vmax);   /* valid range */
Valid characters consist of an optional leading minus and digits. The range check is performed on exit. If the range maximum is less than or equal to the minimum, the range is ignored.

If the value passes its range check, it is padded with as many leading zero digits as necessary to meet the padding argument.

A TYPE_INTEGER value buffer can conveniently be interpreted with the C library function atoi(3).

TYPE_NUMERIC

This field type accepts a decimal number. It is set up as follows:
int set_field_type(FIELD *field,              /* field to alter */
                   TYPE_NUMERIC,              /* type to associate */
                   int padding,               /* # places of precision */
                   double vmin, double vmax); /* valid range */
Valid characters consist of an optional leading minus and digits. possibly including a decimal point. If your system supports locale's, the decimal point character used must be the one defined by your locale. The range check is performed on exit. If the range maximum is less than or equal to the minimum, the range is ignored.

If the value passes its range check, it is padded with as many trailing zero digits as necessary to meet the padding argument.

A TYPE_NUMERIC value buffer can conveniently be interpreted with the C library function atof(3).

TYPE_REGEXP

This field type accepts data matching a regular expression. It is set up as follows:
int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_REGEXP,           /* type to associate */
                   char *regexp);         /* expression to match */
The syntax for regular expressions is that of regcomp(3). The check for regular-expression match is performed on exit.

Direct Field Buffer Manipulation

The chief attribute of a field is its buffer contents. When a form has been completed, your application usually needs to know the state of each field buffer. You can find this out with:
char *field_buffer(FIELD *field,          /* field to query */
                   int bufindex);         /* number of buffer to query */
Normally, the state of the zero-numbered buffer for each field is set by the user's editing actions on that field. It's sometimes useful to be able to set the value of the zero-numbered (or some other) buffer from your application:
int set_field_buffer(FIELD *field,        /* field to alter */
                   int bufindex,          /* number of buffer to alter */
                   char *value);          /* string value to set */
If the field is not large enough and cannot be resized to a sufficiently large size to contain the specified value, the value will be truncated to fit.

Calling field_buffer() with a null field pointer will raise an error. Calling field_buffer() on a field not currently selected for input will return a correct value. Calling field_buffer() on a field that is currently selected for input may not necessarily give a correct field buffer value, because entered data isn't necessarily copied to buffer zero before the exit validation check. To guarantee that the returned buffer value reflects on-screen reality, call field_buffer() either (1) in the field's exit validation check routine, (2) from the field's or form's initialization or termination hooks, or (3) just after a REQ_VALIDATION request has been processed by the forms driver.

Attributes of Forms

As with field attributes, form attributes inherit a default from a system default form structure. These defaults can be queried or set by of these functions using a form-pointer argument of NULL.

The principal attribute of a form is its field list. You can query and change this list with:

int set_form_fields(FORM *form,           /* form to alter */
                    FIELD **fields);      /* fields to connect */

char *form_fields(FORM *form);            /* fetch fields of form */

int field_count(FORM *form);              /* count connect fields */
The second argument of set_form_fields() may be a NULL-terminated field pointer array like the one required by new_form(). In that case, the old fields of the form are disconnected but not freed (and eligible to be connected to other forms), then the new fields are connected.

It may also be null, in which case the old fields are disconnected (and not freed) but no new ones are connected.

The field_count() function simply counts the number of fields connected to a given from. It returns -1 if the form-pointer argument is NULL.

Control of Form Display

In the overview section, you saw that to display a form you normally start by defining its size (and fields), posting it, and refreshing the screen. There is an hidden step before posting, which is the association of the form with a frame window (actually, a pair of windows) within which it will be displayed. By default, the forms library associates every form with the full-screen window stdscr.

By making this step explicit, you can associate a form with a declared frame window on your screen display. This can be useful if you want to adapt the form display to different screen sizes, dynamically tile forms on the screen, or use a form as part of an interface layout managed by panels.

The two windows associated with each form have the same functions as their analogues in the menu library. Both these windows are painted when the form is posted and erased when the form is unposted.

The outer or frame window is not otherwise touched by the form routines. It exists so the programmer can associate a title, a border, or perhaps help text with the form and have it properly refreshed or erased at post/unpost time. The inner window or subwindow is where the current form page is actually displayed.

In order to declare your own frame window for a form, you'll need to know the size of the form's bounding rectangle. You can get this information with:

int scale_form(FORM *form,                /* form to query */
               int *rows,                 /* form rows */
               int *cols);                /* form cols */
The form dimensions are passed back in the locations pointed to by the arguments. Once you have this information, you can use it to declare of windows, then use one of these functions:
int set_form_win(FORM *form,              /* form to alter */
                 WINDOW *win);            /* frame window to connect */

WINDOW *form_win(FORM *form);             /* fetch frame window of form */

int set_form_sub(FORM *form,              /* form to alter */
                 WINDOW *win);            /* form subwindow to connect */

WINDOW *form_sub(FORM *form);             /* fetch form subwindow of form */
Note that curses operations, including refresh(), on the form, should be done on the frame window, not the form subwindow.

It is possible to check from your application whether all of a scrollable field is actually displayed within the menu subwindow. Use these functions:

int data_ahead(FORM *form);               /* form to be queried */

int data_behind(FORM *form);              /* form to be queried */
The function data_ahead() returns TRUE if (a) the current field is one-line and has undisplayed data off to the right, (b) the current field is multi-line and there is data off-screen below it.

The function data_behind() returns TRUE if the first (upper left hand) character position is off-screen (not being displayed).

Finally, there is a function to restore the form window's cursor to the value expected by the forms driver:

int pos_form_cursor(FORM *)               /* form to be queried */
If your application changes the form window cursor, call this function before handing control back to the forms driver in order to re-synchronize it.

Input Processing in the Forms Driver

The function form_driver() handles virtualized input requests for form navigation, editing, and validation requests, just as menu_driver does for menus (see the section on menu input handling).
int form_driver(FORM *form,               /* form to pass input to */
                int request);             /* form request code */
Your input virtualization function needs to take input and then convert it to either an alphanumeric character (which is treated as data to be entered in the currently-selected field), or a forms processing request.

The forms driver provides hooks (through input-validation and field-termination functions) with which your application code can check that the input taken by the driver matched what was expected.

Page Navigation Requests

These requests cause page-level moves through the form, triggering display of a new form screen.
REQ_NEXT_PAGE
Move to the next form page.
REQ_PREV_PAGE
Move to the previous form page.
REQ_FIRST_PAGE
Move to the first form page.
REQ_LAST_PAGE
Move to the last form page.
These requests treat the list as cyclic; that is, REQ_NEXT_PAGE from the last page goes to the first, and REQ_PREV_PAGE from the first page goes to the last.

Inter-Field Navigation Requests

These requests handle navigation between fields on the same page.
REQ_NEXT_FIELD
Move to next field.
REQ_PREV_FIELD
Move to previous field.
REQ_FIRST_FIELD
Move to the first field.
REQ_LAST_FIELD
Move to the last field.
REQ_SNEXT_FIELD
Move to sorted next field.
REQ_SPREV_FIELD
Move to sorted previous field.
REQ_SFIRST_FIELD
Move to the sorted first field.
REQ_SLAST_FIELD
Move to the sorted last field.
REQ_LEFT_FIELD
Move left to field.
REQ_RIGHT_FIELD
Move right to field.
REQ_UP_FIELD
Move up to field.
REQ_DOWN_FIELD
Move down to field.
These requests treat the list of fields on a page as cyclic; that is, REQ_NEXT_FIELD from the last field goes to the first, and REQ_PREV_FIELD from the first field goes to the last. The order of the fields for these (and the REQ_FIRST_FIELD and REQ_LAST_FIELD requests) is simply the order of the field pointers in the form array (as set up by new_form() or set_form_fields()

It is also possible to traverse the fields as if they had been sorted in screen-position order, so the sequence goes left-to-right and top-to-bottom. To do this, use the second group of four sorted-movement requests.

Finally, it is possible to move between fields using visual directions up, down, right, and left. To accomplish this, use the third group of four requests. Note, however, that the position of a form for purposes of these requests is its upper-left corner.

For example, suppose you have a multi-line field B, and two single-line fields A and C on the same line with B, with A to the left of B and C to the right of B. A REQ_MOVE_RIGHT from A will go to B only if A, B, and C all share the same first line; otherwise it will skip over B to C.

Intra-Field Navigation Requests

These requests drive movement of the edit cursor within the currently selected field.
REQ_NEXT_CHAR
Move to next character.
REQ_PREV_CHAR
Move to previous character.
REQ_NEXT_LINE
Move to next line.
REQ_PREV_LINE
Move to previous line.
REQ_NEXT_WORD
Move to next word.
REQ_PREV_WORD
Move to previous word.
REQ_BEG_FIELD
Move to beginning of field.
REQ_END_FIELD
Move to end of field.
REQ_BEG_LINE
Move to beginning of line.
REQ_END_LINE
Move to end of line.
REQ_LEFT_CHAR
Move left in field.
REQ_RIGHT_CHAR
Move right in field.
REQ_UP_CHAR
Move up in field.
REQ_DOWN_CHAR
Move down in field.
Each word is separated from the previous and next characters by whitespace. The commands to move to beginning and end of line or field look for the first or last non-pad character in their ranges.

Scrolling Requests

Fields that are dynamic and have grown and fields explicitly created with offscreen rows are scrollable. One-line fields scroll horizontally; multi-line fields scroll vertically. Most scrolling is triggered by editing and intra-field movement (the library scrolls the field to keep the cursor visible). It is possible to explicitly request scrolling with the following requests:
REQ_SCR_FLINE
Scroll vertically forward a line.
REQ_SCR_BLINE
Scroll vertically backward a line.
REQ_SCR_FPAGE
Scroll vertically forward a page.
REQ_SCR_BPAGE
Scroll vertically backward a page.
REQ_SCR_FHPAGE
Scroll vertically forward half a page.
REQ_SCR_BHPAGE
Scroll vertically backward half a page.
REQ_SCR_FCHAR
Scroll horizontally forward a character.
REQ_SCR_BCHAR
Scroll horizontally backward a character.
REQ_SCR_HFLINE
Scroll horizontally one field width forward.
REQ_SCR_HBLINE
Scroll horizontally one field width backward.
REQ_SCR_HFHALF
Scroll horizontally one half field width forward.
REQ_SCR_HBHALF
Scroll horizontally one half field width backward.
For scrolling purposes, a page of a field is the height of its visible part.

Editing Requests

When you pass the forms driver an ASCII character, it is treated as a request to add the character to the field's data buffer. Whether this is an insertion or a replacement depends on the field's edit mode (insertion is the default.

The following requests support editing the field and changing the edit mode:

REQ_INS_MODE
Set insertion mode.
REQ_OVL_MODE
Set overlay mode.
REQ_NEW_LINE
New line request (see below for explanation).
REQ_INS_CHAR
Insert space at character location.
REQ_INS_LINE
Insert blank line at character location.
REQ_DEL_CHAR
Delete character at cursor.
REQ_DEL_PREV
Delete previous word at cursor.
REQ_DEL_LINE
Delete line at cursor.
REQ_DEL_WORD
Delete word at cursor.
REQ_CLR_EOL
Clear to end of line.
REQ_CLR_EOF
Clear to end of field.
REQ_CLEAR_FIELD
Clear entire field.
The behavior of the REQ_NEW_LINE and REQ_DEL_PREV requests is complicated and partly controlled by a pair of forms options. The special cases are triggered when the cursor is at the beginning of a field, or on the last line of the field.

First, we consider REQ_NEW_LINE:

The normal behavior of REQ_NEW_LINE in insert mode is to break the current line at the position of the edit cursor, inserting the portion of the current line after the cursor as a new line following the current and moving the cursor to the beginning of that new line (you may think of this as inserting a newline in the field buffer).

The normal behavior of REQ_NEW_LINE in overlay mode is to clear the current line from the position of the edit cursor to end of line. The cursor is then moved to the beginning of the next line.

However, REQ_NEW_LINE at the beginning of a field, or on the last line of a field, instead does a REQ_NEXT_FIELD. O_NL_OVERLOAD option is off, this special action is disabled.

Now, let us consider REQ_DEL_PREV:

The normal behavior of REQ_DEL_PREV is to delete the previous character. If insert mode is on, and the cursor is at the start of a line, and the text on that line will fit on the previous one, it instead appends the contents of the current line to the previous one and deletes the current line (you may think of this as deleting a newline from the field buffer).

However, REQ_DEL_PREV at the beginning of a field is instead treated as a REQ_PREV_FIELD.

If the O_BS_OVERLOAD option is off, this special action is disabled and the forms driver just returns E_REQUEST_DENIED.

See Form Options for discussion of how to set and clear the overload options.

Order Requests

If the type of your field is ordered, and has associated functions for getting the next and previous values of the type from a given value, there are requests that can fetch that value into the field buffer:
REQ_NEXT_CHOICE
Place the successor value of the current value in the buffer.
REQ_PREV_CHOICE
Place the predecessor value of the current value in the buffer.
Of the built-in field types, only TYPE_ENUM has built-in successor and predecessor functions. When you define a field type of your own (see Custom Validation Types), you can associate our own ordering functions.

Application Commands

Form requests are represented as integers above the curses value greater than KEY_MAX and less than or equal to the constant MAX_COMMAND. If your input-virtualization routine returns a value above MAX_COMMAND, the forms driver will ignore it.

Field Change Hooks

It is possible to set function hooks to be executed whenever the current field or form changes. Here are the functions that support this:
typedef void	(*HOOK)();       /* pointer to function returning void */

int set_form_init(FORM *form,    /* form to alter */
                  HOOK hook);    /* initialization hook */

HOOK form_init(FORM *form);      /* form to query */

int set_form_term(FORM *form,    /* form to alter */
                  HOOK hook);    /* termination hook */

HOOK form_term(FORM *form);      /* form to query */

int set_field_init(FORM *form,   /* form to alter */
                  HOOK hook);    /* initialization hook */

HOOK field_init(FORM *form);     /* form to query */

int set_field_term(FORM *form,   /* form to alter */
                  HOOK hook);    /* termination hook */

HOOK field_term(FORM *form);     /* form to query */
These functions allow you to either set or query four different hooks. In each of the set functions, the second argument should be the address of a hook function. These functions differ only in the timing of the hook call.
form_init
This hook is called when the form is posted; also, just after each page change operation.
field_init
This hook is called when the form is posted; also, just after each field change
field_term
This hook is called just after field validation; that is, just before the field is altered. It is also called when the form is unposted.
form_term
This hook is called when the form is unposted; also, just before each page change operation.
Calls to these hooks may be triggered
  1. When user editing requests are processed by the forms driver
  2. When the current page is changed by set_current_field() call
  3. When the current field is changed by a set_form_page() call
See Field Change Commands for discussion of the latter two cases.

You can set a default hook for all fields by passing one of the set functions a NULL first argument.

You can disable any of these hooks by (re)setting them to NULL, the default value.

Field Change Commands

Normally, navigation through the form will be driven by the user's input requests. But sometimes it is useful to be able to move the focus for editing and viewing under control of your application, or ask which field it currently is in. The following functions help you accomplish this:
int set_current_field(FORM *form,         /* form to alter */
                      FIELD *field);      /* field to shift to */

FIELD *current_field(FORM *form);         /* form to query */

int field_index(FORM *form,               /* form to query */
                FIELD *field);            /* field to get index of */
The function field_index() returns the index of the given field in the given form's field array (the array passed to new_form() or set_form_fields()).

The initial current field of a form is the first active field on the first page. The function set_form_fields() resets this.

It is also possible to move around by pages.

int set_form_page(FORM *form,             /* form to alter */
                  int page);              /* page to go to (0-origin) */

int form_page(FORM *form);                /* return form's current page */
The initial page of a newly-created form is 0. The function set_form_fields() resets this.

Form Options

Like fields, forms may have control option bits. They can be changed or queried with these functions:
int set_form_opts(FORM *form,             /* form to alter */
                  int attr);              /* attribute to set */

int form_opts_on(FORM *form,              /* form to alter */
                 int attr);               /* attributes to turn on */

int form_opts_off(FORM *form,             /* form to alter */
                  int attr);              /* attributes to turn off */

int form_opts(FORM *form);                /* form to query */
By default, all options are on. Here are the available option bits:
O_NL_OVERLOAD
Enable overloading of REQ_NEW_LINE as described in Editing Requests. The value of this option is ignored on dynamic fields that have not reached their size limit; these have no last line, so the circumstances for triggering a REQ_NEXT_FIELD never arise.
O_BS_OVERLOAD
Enable overloading of REQ_DEL_PREV as described in Editing Requests.
The option values are bit-masks and can be composed with logical-or in the obvious way.

Custom Validation Types

The form library gives you the capability to define custom validation types of your own. Further, the optional additional arguments of set_field_type effectively allow you to parameterize validation types. Most of the complications in the validation-type interface have to do with the handling of the additional arguments within custom validation functions.

Union Types

The simplest way to create a custom data type is to compose it from two preexisting ones:
FIELD *link_fieldtype(FIELDTYPE *type1,
                      FIELDTYPE *type2);
This function creates a field type that will accept any of the values legal for either of its argument field types (which may be either predefined or programmer-defined). If a set_field_type() call later requires arguments, the new composite type expects all arguments for the first type, than all arguments for the second. Order functions (see Order Requests) associated with the component types will work on the composite; what it does is check the validation function for the first type, then for the second, to figure what type the buffer contents should be treated as.

New Field Types

To create a field type from scratch, you need to specify one or both of the following things:
  • A character-validation function, to check each character as it is entered.
  • A field-validation function to be applied on exit from the field.
Here's how you do that:
typedef int	(*HOOK)();       /* pointer to function returning int */

FIELDTYPE *new_fieldtype(HOOK f_validate, /* field validator */
                         HOOK c_validate) /* character validator */


int free_fieldtype(FIELDTYPE *ftype);     /* type to free */
At least one of the arguments of new_fieldtype() must be non-NULL. The forms driver will automatically call the new type's validation functions at appropriate points in processing a field of the new type.

The function free_fieldtype() deallocates the argument fieldtype, freeing all storage associated with it.

Normally, a field validator is called when the user attempts to leave the field. Its first argument is a field pointer, from which it can get to field buffer 0 and test it. If the function returns TRUE, the operation succeeds; if it returns FALSE, the edit cursor stays in the field.

A character validator gets the character passed in as a first argument. It too should return TRUE if the character is valid, FALSE otherwise.

Validation Function Arguments

Your field- and character- validation functions will be passed a second argument as well. This second argument is the address of a structure (which we'll call a pile) built from any of the field-type-specific arguments passed to set_field_type(). If no such arguments are defined for the field type, this pile pointer argument will be NULL.

In order to arrange for such arguments to be passed to your validation functions, you must associate a small set of storage-management functions with the type. The forms driver will use these to synthesize a pile from the trailing arguments of each set_field_type() argument, and a pointer to the pile will be passed to the validation functions.

Here is how you make the association:

typedef char	*(*PTRHOOK)();    /* pointer to function returning (char *) */
typedef void	(*VOIDHOOK)();    /* pointer to function returning void */

int set_fieldtype_arg(FIELDTYPE *type,    /* type to alter */
                      PTRHOOK make_str,   /* make structure from args */
                      PTRHOOK copy_str,   /* make copy of structure */
                      VOIDHOOK free_str); /* free structure storage */
Here is how the storage-management hooks are used:
make_str
This function is called by set_field_type(). It gets one argument, a va_list of the type-specific arguments passed to set_field_type(). It is expected to return a pile pointer to a data structure that encapsulates those arguments.
copy_str
This function is called by form library functions that allocate new field instances. It is expected to take a pile pointer, copy the pile to allocated storage, and return the address of the pile copy.
free_str
This function is called by field- and type-deallocation routines in the library. It takes a pile pointer argument, and is expected to free the storage of that pile.
The make_str and copy_str functions may return NULL to signal allocation failure. The library routines will that call them will return error indication when this happens. Thus, your validation functions should never see a NULL file pointer and need not check specially for it.

Order Functions For Custom Types

Some custom field types are simply ordered in the same well-defined way that TYPE_ENUM is. For such types, it is possible to define successor and predecessor functions to support the REQ_NEXT_CHOICE and REQ_PREV_CHOICE requests. Here's how:
typedef int	(*INTHOOK)();     /* pointer to function returning int */

int set_fieldtype_arg(FIELDTYPE *type,    /* type to alter */
                      INTHOOK succ,       /* get successor value */
                      INTHOOK pred);      /* get predecessor value */
The successor and predecessor arguments will each be passed two arguments; a field pointer, and a pile pointer (as for the validation functions). They are expected to use the function field_buffer() to read the current value, and set_field_buffer() on buffer 0 to set the next or previous value. Either hook may return TRUE to indicate success (a legal next or previous value was set) or FALSE to indicate failure.

Avoiding Problems

The interface for defining custom types is complicated and tricky. Rather than attempting to create a custom type entirely from scratch, you should start by studying the library source code for whichever of the pre-defined types seems to be closest to what you want.

Use that code as a model, and evolve it towards what you really want. You will avoid many problems and annoyances that way. The code in the ncurses library has been specifically exempted from the package copyright to support this.

If your custom type defines order functions, have do something intuitive with a blank field. A useful convention is to make the successor of a blank field the types minimum value, and its predecessor the maximum. ncurses-6.0-20160213/doc/html/NCURSES-Programming-HOWTO.html0000644000175100001440000065112612262117620021365 0ustar tomusers NCURSES Programming HOWTO

NCURSES Programming HOWTO

Pradeep Padala

v1.9, 2005-06-20

Revision History
Revision 1.92005-06-20Revised by: ppadala
The license has been changed to the MIT-style license used by NCURSES. Note that the programs are also re-licensed under this.
Revision 1.82005-06-17Revised by: ppadala
Lots of updates. Added references and perl examples. Changes to examples. Many grammatical and stylistic changes to the content. Changes to NCURSES history.
Revision 1.7.12002-06-25Revised by: ppadala
Added a README file for building and instructions for building from source.
Revision 1.72002-06-25Revised by: ppadala
Added "Other formats" section and made a lot of fancy changes to the programs. Inlining of programs is gone.
Revision 1.6.12002-02-24Revised by: ppadala
Removed the old Changelog section, cleaned the makefiles
Revision 1.62002-02-16Revised by: ppadala
Corrected a lot of spelling mistakes, added ACS variables section
Revision 1.52002-01-05Revised by: ppadala
Changed structure to present proper TOC
Revision 1.3.12001-07-26Revised by: ppadala
Corrected maintainers paragraph, Corrected stable release number
Revision 1.32001-07-24Revised by: ppadala
Added copyright notices to main document (LDP license) and programs (GPL), Corrected printw_example.
Revision 1.22001-06-05Revised by: ppadala
Incorporated ravi's changes. Mainly to introduction, menu, form, justforfun sections
Revision 1.12001-05-22Revised by: ppadala
Added "a word about window" section, Added scanw_example.

This document is intended to be an "All in One" guide for programming with ncurses and its sister libraries. We graduate from a simple "Hello World" program to more complex form manipulation. No prior experience in ncurses is assumed. Send comments to this address


Table of Contents
1. Introduction
1.1. What is NCURSES?
1.2. What we can do with NCURSES
1.3. Where to get it
1.4. Purpose/Scope of the document
1.5. About the Programs
1.6. Other Formats of the document
1.6.1. Readily available formats from tldp.org
1.6.2. Building from source
1.7. Credits
1.8. Wish List
1.9. Copyright
2. Hello World !!!
2.1. Compiling With the NCURSES Library
2.2. Dissection
2.2.1. About initscr()
2.2.2. The mysterious refresh()
2.2.3. About endwin()
3. The Gory Details
4. Initialization
4.1. Initialization functions
4.2. raw() and cbreak()
4.3. echo() and noecho()
4.4. keypad()
4.5. halfdelay()
4.6. Miscellaneous Initialization functions
4.7. An Example
5. A Word about Windows
6. Output functions
6.1. addch() class of functions
6.2. mvaddch(), waddch() and mvwaddch()
6.3. printw() class of functions
6.3.1. printw() and mvprintw
6.3.2. wprintw() and mvwprintw
6.3.3. vwprintw()
6.3.4. A Simple printw example
6.4. addstr() class of functions
6.5. A word of caution
7. Input functions
7.1. getch() class of functions
7.2. scanw() class of functions
7.2.1. scanw() and mvscanw
7.2.2. wscanw() and mvwscanw()
7.2.3. vwscanw()
7.3. getstr() class of functions
7.4. Some examples
8. Attributes
8.1. The details
8.2. attron() vs attrset()
8.3. attr_get()
8.4. attr_ functions
8.5. wattr functions
8.6. chgat() functions
9. Windows
9.1. The basics
9.2. Let there be a Window !!!
9.3. Explanation
9.4. The other stuff in the example
9.5. Other Border functions
10. Colors
10.1. The basics
10.2. Changing Color Definitions
10.3. Color Content
11. Interfacing with the key board
11.1. The Basics
11.2. A Simple Key Usage example
12. Interfacing with the mouse
12.1. The Basics
12.2. Getting the events
12.3. Putting it all Together
12.4. Miscellaneous Functions
13. Screen Manipulation
13.1. getyx() functions
13.2. Screen Dumping
13.3. Window Dumping
14. Miscellaneous features
14.1. curs_set()
14.2. Temporarily Leaving Curses mode
14.3. ACS_ variables
15. Other libraries
16. Panel Library
16.1. The Basics
16.2. Compiling With the Panels Library
16.3. Panel Window Browsing
16.4. Using User Pointers
16.5. Moving and Resizing Panels
16.6. Hiding and Showing Panels
16.7. panel_above() and panel_below() Functions
17. Menus Library
17.1. The Basics
17.2. Compiling With the Menu Library
17.3. Menu Driver: The work horse of the menu system
17.4. Menu Windows
17.5. Scrolling Menus
17.6. Multi Columnar Menus
17.7. Multi Valued Menus
17.8. Menu Options
17.9. The useful User Pointer
18. Forms Library
18.1. The Basics
18.2. Compiling With the Forms Library
18.3. Playing with Fields
18.3.1. Fetching Size and Location of Field
18.3.2. Moving the field
18.3.3. Field Justification
18.3.4. Field Display Attributes
18.3.5. Field Option Bits
18.3.6. Field Status
18.3.7. Field User Pointer
18.3.8. Variable-Sized Fields
18.4. Form Windows
18.5. Field Validation
18.6. Form Driver: The work horse of the forms system
18.6.1. Page Navigation Requests
18.6.2. Inter-Field Navigation Requests
18.6.3. Intra-Field Navigation Requests
18.6.4. Scrolling Requests
18.6.5. Editing Requests
18.6.6. Order Requests
18.6.7. Application Commands
19. Tools and Widget Libraries
19.1. CDK (Curses Development Kit)
19.1.1. Widget List
19.1.2. Some Attractive Features
19.1.3. Conclusion
19.2. The dialog
19.3. Perl Curses Modules CURSES::FORM and CURSES::WIDGETS
20. Just For Fun !!!
20.1. The Game of Life
20.2. Magic Square
20.3. Towers of Hanoi
20.4. Queens Puzzle
20.5. Shuffle
20.6. Typing Tutor
21. References

1. Introduction

In the olden days of teletype terminals, terminals were away from computers and were connected to them through serial cables. The terminals could be configured by sending a series of bytes. All the capabilities (such as moving the cursor to a new location, erasing part of the screen, scrolling the screen, changing modes etc.) of terminals could be accessed through these series of bytes. These control seeuqnces are usually called escape sequences, because they start with an escape(0x1B) character. Even today, with proper emulation, we can send escape sequences to the emulator and achieve the same effect on a terminal window.

Suppose you wanted to print a line in color. Try typing this on your console.

echo "^[[0;31;40mIn Color"

The first character is an escape character, which looks like two characters ^ and [. To be able to print it, you have to press CTRL+V and then the ESC key. All the others are normal printable characters. You should be able to see the string "In Color" in red. It stays that way and to revert back to the original mode type this.

echo "^[[0;37;40m"

Now, what do these magic characters mean? Difficult to comprehend? They might even be different for different terminals. So the designers of UNIX invented a mechanism named termcap. It is a file that lists all the capabilities of a particular terminal, along with the escape sequences needed to achieve a particular effect. In the later years, this was replaced by terminfo. Without delving too much into details, this mechanism allows application programs to query the terminfo database and obtain the control characters to be sent to a terminal or terminal emulator.


1.1. What is NCURSES?

You might be wondering, what the import of all this technical gibberish is. In the above scenario, every application program is supposed to query the terminfo and perform the necessary stuff (sending control characters etc.). It soon became difficult to manage this complexity and this gave birth to 'CURSES'. Curses is a pun on the name "cursor optimization". The Curses library forms a wrapper over working with raw terminal codes, and provides highly flexible and efficient API (Application Programming Interface). It provides functions to move the cursor, create windows, produce colors, play with mouse etc. The application programs need not worry about the underlying terminal capabilities.

So what is NCURSES? NCURSES is a clone of the original System V Release 4.0 (SVr4) curses. It is a freely distributable library, fully compatible with older version of curses. In short, it is a library of functions that manages an application's display on character-cell terminals. In the remainder of the document, the terms curses and ncurses are used interchangeably.

A detailed history of NCURSES can be found in the NEWS file from the source distribution. The current package is maintained by Thomas Dickey. You can contact the maintainers at bug-ncurses@gnu.org.


1.2. What we can do with NCURSES

NCURSES not only creates a wrapper over terminal capabilities, but also gives a robust framework to create nice looking UI (User Interface)s in text mode. It provides functions to create windows etc. Its sister libraries panel, menu and form provide an extension to the basic curses library. These libraries usually come along with curses. One can create applications that contain multiple windows, menus, panels and forms. Windows can be managed independently, can provide 'scrollability' and even can be hidden.

Menus provide the user with an easy command selection option. Forms allow the creation of easy-to-use data entry and display windows. Panels extend the capabilities of ncurses to deal with overlapping and stacked windows.

These are just some of the basic things we can do with ncurses. As we move along, We will see all the capabilities of these libraries.


1.3. Where to get it

All right, now that you know what you can do with ncurses, you must be rearing to get started. NCURSES is usually shipped with your installation. In case you don't have the library or want to compile it on your own, read on.

Compiling the package

NCURSES can be obtained from ftp://ftp.gnu.org/pub/gnu/ncurses/ncurses.tar.gz or any of the ftp sites mentioned in http://www.gnu.org/order/ftp.html.

Read the README and INSTALL files for details on to how to install it. It usually involves the following operations.

    tar zxvf ncurses<version>.tar.gz  # unzip and untar the archive
    cd ncurses<version>               # cd to the directory
    ./configure                             # configure the build according to your 
                                            # environment
    make                                    # make it
    su root                                 # become root
    make install                            # install it

Using the RPM

NCURSES RPM can be found and downloaded from http://rpmfind.net . The RPM can be installed with the following command after becoming root.

    rpm -i <downloaded rpm>

1.4. Purpose/Scope of the document

This document is intended to be a "All in One" guide for programming with ncurses and its sister libraries. We graduate from a simple "Hello World" program to more complex form manipulation. No prior experience in ncurses is assumed. The writing is informal, but a lot of detail is provided for each of the examples.


1.5. About the Programs

All the programs in the document are available in zipped form here. Unzip and untar it. The directory structure looks like this.

ncurses
   |
   |----> JustForFun     -- just for fun programs
   |----> basics         -- basic programs
   |----> demo           -- output files go into this directory after make
   |          |
   |          |----> exe -- exe files of all example programs
   |----> forms          -- programs related to form library
   |----> menus          -- programs related to menus library
   |----> panels         -- programs related to panels library
   |----> perl           -- perl equivalents of the examples (contributed
   |                            by Anuradha Ratnaweera)
   |----> Makefile       -- the top level Makefile
   |----> README         -- the top level README file. contains instructions
   |----> COPYING        -- copyright notice

The individual directories contain the following files.

Description of files in each directory
--------------------------------------
JustForFun
    |
    |----> hanoi.c   -- The Towers of Hanoi Solver
    |----> life.c    -- The Game of Life demo
    |----> magic.c   -- An Odd Order Magic Square builder 
    |----> queens.c  -- The famous N-Queens Solver
    |----> shuffle.c -- A fun game, if you have time to kill
    |----> tt.c      -- A very trivial typing tutor

  basics
    |
    |----> acs_vars.c            -- ACS_ variables example
    |----> hello_world.c         -- Simple "Hello World" Program
    |----> init_func_example.c   -- Initialization functions example
    |----> key_code.c            -- Shows the scan code of the key pressed
    |----> mouse_menu.c          -- A menu accessible by mouse
    |----> other_border.c        -- Shows usage of other border functions apa
    |                               -- rt from box()
    |----> printw_example.c      -- A very simple printw() example
    |----> scanw_example.c       -- A very simple getstr() example
    |----> simple_attr.c         -- A program that can print a c file with 
    |                               -- comments in attribute
    |----> simple_color.c        -- A simple example demonstrating colors
    |----> simple_key.c          -- A menu accessible with keyboard UP, DOWN 
    |                               -- arrows
    |----> temp_leave.c          -- Demonstrates temporarily leaving curses mode
    |----> win_border.c          -- Shows Creation of windows and borders
    |----> with_chgat.c          -- chgat() usage example

  forms 
    |
    |----> form_attrib.c     -- Usage of field attributes
    |----> form_options.c    -- Usage of field options
    |----> form_simple.c     -- A simple form example
    |----> form_win.c        -- Demo of windows associated with forms

  menus 
    |
    |----> menu_attrib.c     -- Usage of menu attributes
    |----> menu_item_data.c  -- Usage of item_name() etc.. functions
    |----> menu_multi_column.c    -- Creates multi columnar menus
    |----> menu_scroll.c     -- Demonstrates scrolling capability of menus
    |----> menu_simple.c     -- A simple menu accessed by arrow keys
    |----> menu_toggle.c     -- Creates multi valued menus and explains
    |                           -- REQ_TOGGLE_ITEM
    |----> menu_userptr.c    -- Usage of user pointer
    |----> menu_win.c        -- Demo of windows associated with menus

  panels 
    |
    |----> panel_browse.c    -- Panel browsing through tab. Usage of user 
    |                           -- pointer
    |----> panel_hide.c      -- Hiding and Un hiding of panels
    |----> panel_resize.c    -- Moving and resizing of panels
    |----> panel_simple.c    -- A simple panel example

  perl
    |----> 01-10.pl          -- Perl equivalents of first ten example programs

There is a top level Makefile included in the main directory. It builds all the files and puts the ready-to-use exes in demo/exe directory. You can also do selective make by going into the corresponding directory. Each directory contains a README file explaining the purpose of each c file in the directory.

For every example, I have included path name for the file relative to the examples directory.

If you prefer browsing individual programs, point your browser to http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/ncurses_programs/

All the programs are released under the same license that is used by ncurses (MIT-style). This gives you the ability to do pretty much anything other than claiming them as yours. Feel free to use them in your programs as appropriate.


1.6. Other Formats of the document

This howto is also availabe in various other formats on the tldp.org site. Here are the links to other formats of this document.


1.6.2. Building from source

If above links are broken or if you want to experiment with sgml read on.


    Get both the source and the tar,gzipped programs, available at
        http://cvsview.tldp.org/index.cgi/LDP/howto/docbook/
        NCURSES-HOWTO/NCURSES-Programming-HOWTO.sgml
        http://cvsview.tldp.org/index.cgi/LDP/howto/docbook/
        NCURSES-HOWTO/ncurses_programs.tar.gz

    Unzip ncurses_programs.tar.gz with
    tar zxvf ncurses_programs.tar.gz

    Use jade to create various formats. For example if you just want to create
    the multiple html files, you would use
        jade -t sgml -i html -d <path to docbook html stylesheet>
        NCURSES-Programming-HOWTO.sgml
    to get pdf, first create a single html file of the HOWTO with 
        jade -t sgml -i html -d <path to docbook html stylesheet> -V nochunks
        NCURSES-Programming-HOWTO.sgml > NCURSES-ONE-BIG-FILE.html
    then use htmldoc to get pdf file with
        htmldoc --size universal -t pdf --firstpage p1 -f <output file name.pdf>
        NCURSES-ONE-BIG-FILE.html
    for ps, you would use
        htmldoc --size universal -t ps --firstpage p1 -f <output file name.ps>
        NCURSES-ONE-BIG-FILE.html

See LDP Author guide for more details. If all else failes, mail me at ppadala@gmail.com


1.7. Credits

I thank Sharath and Emre Akbas for helping me with few sections. The introduction was initially written by sharath. I rewrote it with few excerpts taken from his initial work. Emre helped in writing printw and scanw sections.

Perl equivalents of the example programs are contributed by Anuradha Ratnaweera.

Then comes Ravi Parimi, my dearest friend, who has been on this project before even one line was written. He constantly bombarded me with suggestions and patiently reviewed the whole text. He also checked each program on Linux and Solaris.


1.8. Wish List

This is the wish list, in the order of priority. If you have a wish or you want to work on completing the wish, mail me.

  • Add examples to last parts of forms section.

  • Prepare a Demo showing all the programs and allow the user to browse through description of each program. Let the user compile and see the program in action. A dialog based interface is preferred.

  • Add debug info. _tracef, _tracemouse stuff.

  • Accessing termcap, terminfo using functions provided by ncurses package.

  • Working on two terminals simultaneously.

  • Add more stuff to miscellaneous section.


1.9. Copyright

Copyright © 2001 by Pradeep Padala.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization.


2. Hello World !!!

Welcome to the world of curses. Before we plunge into the library and look into its various features, let's write a simple program and say hello to the world.


2.1. Compiling With the NCURSES Library

To use ncurses library functions, you have to include ncurses.h in your programs. To link the program with ncurses the flag -lncurses should be added.

    #include <ncurses.h>
    .
    .
    .

    compile and link: gcc <program file> -lncurses

Example 1. The Hello World !!! Program

#include <ncurses.h>

int main()
{	
	initscr();			/* Start curses mode 		  */
	printw("Hello World !!!");	/* Print Hello World		  */
	refresh();			/* Print it on to the real screen */
	getch();			/* Wait for user input */
	endwin();			/* End curses mode		  */

	return 0;
}

2.2. Dissection

The above program prints "Hello World !!!" to the screen and exits. This program shows how to initialize curses and do screen manipulation and end curses mode. Let's dissect it line by line.


2.2.1. About initscr()

The function initscr() initializes the terminal in curses mode. In some implementations, it clears the screen and presents a blank screen. To do any screen manipulation using curses package this has to be called first. This function initializes the curses system and allocates memory for our present window (called stdscr) and some other data-structures. Under extreme cases this function might fail due to insufficient memory to allocate memory for curses library's data structures.

After this is done, we can do a variety of initializations to customize our curses settings. These details will be explained later .


2.2.2. The mysterious refresh()

The next line printw prints the string "Hello World !!!" on to the screen. This function is analogous to normal printf in all respects except that it prints the data on a window called stdscr at the current (y,x) co-ordinates. Since our present co-ordinates are at 0,0 the string is printed at the left hand corner of the window.

This brings us to that mysterious refresh(). Well, when we called printw the data is actually written to an imaginary window, which is not updated on the screen yet. The job of printw is to update a few flags and data structures and write the data to a buffer corresponding to stdscr. In order to show it on the screen, we need to call refresh() and tell the curses system to dump the contents on the screen.

The philosophy behind all this is to allow the programmer to do multiple updates on the imaginary screen or windows and do a refresh once all his screen update is done. refresh() checks the window and updates only the portion which has been changed. This improves performance and offers greater flexibility too. But, it is sometimes frustrating to beginners. A common mistake committed by beginners is to forget to call refresh() after they did some update through printw() class of functions. I still forget to add it sometimes :-)


2.2.3. About endwin()

And finally don't forget to end the curses mode. Otherwise your terminal might behave strangely after the program quits. endwin() frees the memory taken by curses sub-system and its data structures and puts the terminal in normal mode. This function must be called after you are done with the curses mode.


3. The Gory Details

Now that we have seen how to write a simple curses program let's get into the details. There are many functions that help customize what you see on screen and many features which can be put to full use.

Here we go...


4. Initialization

We now know that to initialize curses system the function initscr() has to be called. There are functions which can be called after this initialization to customize our curses session. We may ask the curses system to set the terminal in raw mode or initialize color or initialize the mouse etc.. Let's discuss some of the functions that are normally called immediately after initscr();


4.2. raw() and cbreak()

Normally the terminal driver buffers the characters a user types until a new line or carriage return is encountered. But most programs require that the characters be available as soon as the user types them. The above two functions are used to disable line buffering. The difference between these two functions is in the way control characters like suspend (CTRL-Z), interrupt and quit (CTRL-C) are passed to the program. In the raw() mode these characters are directly passed to the program without generating a signal. In the cbreak() mode these control characters are interpreted as any other character by the terminal driver. I personally prefer to use raw() as I can exercise greater control over what the user does.


4.3. echo() and noecho()

These functions control the echoing of characters typed by the user to the terminal. noecho() switches off echoing. The reason you might want to do this is to gain more control over echoing or to suppress unnecessary echoing while taking input from the user through the getch() etc. functions. Most of the interactive programs call noecho() at initialization and do the echoing of characters in a controlled manner. It gives the programmer the flexibility of echoing characters at any place in the window without updating current (y,x) co-ordinates.


4.4. keypad()

This is my favorite initialization function. It enables the reading of function keys like F1, F2, arrow keys etc. Almost every interactive program enables this, as arrow keys are a major part of any User Interface. Do keypad(stdscr, TRUE) to enable this feature for the regular screen (stdscr). You will learn more about key management in later sections of this document.


4.5. halfdelay()

This function, though not used very often, is a useful one at times. halfdelay()is called to enable the half-delay mode, which is similar to the cbreak() mode in that characters typed are immediately available to program. However, it waits for 'X' tenths of a second for input and then returns ERR, if no input is available. 'X' is the timeout value passed to the function halfdelay(). This function is useful when you want to ask the user for input, and if he doesn't respond with in certain time, we can do some thing else. One possible example is a timeout at the password prompt.


4.6. Miscellaneous Initialization functions

There are few more functions which are called at initialization to customize curses behavior. They are not used as extensively as those mentioned above. Some of them are explained where appropriate.


4.7. An Example

Let's write a program which will clarify the usage of these functions.

Example 2. Initialization Function Usage example

#include <ncurses.h>

int main()
{	int ch;

	initscr();			/* Start curses mode 		*/
	raw();				/* Line buffering disabled	*/
	keypad(stdscr, TRUE);		/* We get F1, F2 etc..		*/
	noecho();			/* Don't echo() while we do getch */

    	printw("Type any character to see it in bold\n");
	ch = getch();			/* If raw() hadn't been called
					 * we have to press enter before it
					 * gets to the program 		*/
	if(ch == KEY_F(1))		/* Without keypad enabled this will */
		printw("F1 Key pressed");/*  not get to us either	*/
					/* Without noecho() some ugly escape
					 * charachters might have been printed
					 * on screen			*/
	else
	{	printw("The pressed key is ");
		attron(A_BOLD);
		printw("%c", ch);
		attroff(A_BOLD);
	}
	refresh();			/* Print it on to the real screen */
    	getch();			/* Wait for user input */
	endwin();			/* End curses mode		  */

	return 0;
}

This program is self-explanatory. But I used functions which aren't explained yet. The function getch() is used to get a character from user. It is equivalent to normal getchar() except that we can disable the line buffering to avoid <enter> after input. Look for more about getch()and reading keys in the key management section . The functions attron and attroff are used to switch some attributes on and off respectively. In the example I used them to print the character in bold. These functions are explained in detail later.


5. A Word about Windows

Before we plunge into the myriad ncurses functions, let me clear few things about windows. Windows are explained in detail in following sections

A Window is an imaginary screen defined by curses system. A window does not mean a bordered window which you usually see on Win9X platforms. When curses is initialized, it creates a default window named stdscr which represents your 80x25 (or the size of window in which you are running) screen. If you are doing simple tasks like printing few strings, reading input etc., you can safely use this single window for all of your purposes. You can also create windows and call functions which explicitly work on the specified window.

For example, if you call

    printw("Hi There !!!");
    refresh();

It prints the string on stdscr at the present cursor position. Similarly the call to refresh(), works on stdscr only.

Say you have created windows then you have to call a function with a 'w' added to the usual function.

    wprintw(win, "Hi There !!!");
    wrefresh(win);

As you will see in the rest of the document, naming of functions follow the same convention. For each function there usually are three more functions.

    printw(string);        /* Print on stdscr at present cursor position */
    mvprintw(y, x, string);/* Move to (y, x) then print string     */
    wprintw(win, string);  /* Print on window win at present cursor position */
                           /* in the window */
    mvwprintw(win, y, x, string);   /* Move to (y, x) relative to window */
                                    /* co-ordinates and then print         */

Usually the w-less functions are macros which expand to corresponding w-function with stdscr as the window parameter.


6. Output functions

I guess you can't wait any more to see some action. Back to our odyssey of curses functions. Now that curses is initialized, let's interact with world.

There are three classes of functions which you can use to do output on screen.

  1. addch() class: Print single character with attributes

  2. printw() class: Print formatted output similar to printf()

  3. addstr() class: Print strings

These functions can be used interchangeably and it's a matter of style as to which class is used. Let's see each one in detail.


6.1. addch() class of functions

These functions put a single character into the current cursor location and advance the position of the cursor. You can give the character to be printed but they usually are used to print a character with some attributes. Attributes are explained in detail in later sections of the document. If a character is associated with an attribute(bold, reverse video etc.), when curses prints the character, it is printed in that attribute.

In order to combine a character with some attributes, you have two options:

  • By OR'ing a single character with the desired attribute macros. These attribute macros could be found in the header file ncurses.h. For example, you want to print a character ch(of type char) bold and underlined, you would call addch() as below.

        addch(ch | A_BOLD | A_UNDERLINE);

  • By using functions like attrset(),attron(),attroff(). These functions are explained in the Attributes section. Briefly, they manipulate the current attributes of the given window. Once set, the character printed in the window are associated with the attributes until it is turned off.

Additionally, curses provides some special characters for character-based graphics. You can draw tables, horizontal or vertical lines, etc. You can find all avaliable characters in the header file ncurses.h. Try looking for macros beginning with ACS_ in this file.


6.2. mvaddch(), waddch() and mvwaddch()

mvaddch() is used to move the cursor to a given point, and then print. Thus, the calls:

    move(row,col);    /* moves the cursor to rowth row and colth column */
    addch(ch);
can be replaced by
    mvaddch(row,col,ch);

waddch() is similar to addch(), except that it adds a character into the given window. (Note that addch() adds a character into the window stdscr.)

In a similar fashion mvwaddch() function is used to add a character into the given window at the given coordinates.

Now, we are familiar with the basic output function addch(). But, if we want to print a string, it would be very annoying to print it character by character. Fortunately, ncurses provides printf-like or puts-like functions.


6.3. printw() class of functions

These functions are similar to printf() with the added capability of printing at any position on the screen.


6.3.1. printw() and mvprintw

These two functions work much like printf(). mvprintw() can be used to move the cursor to a position and then print. If you want to move the cursor first and then print using printw() function, use move() first and then use printw() though I see no point why one should avoid using mvprintw(), you have the flexibility to manipulate.


6.3.2. wprintw() and mvwprintw

These two functions are similar to above two except that they print in the corresponding window given as argument.


6.3.3. vwprintw()

This function is similar to vprintf(). This can be used when variable number of arguments are to be printed.


6.3.4. A Simple printw example

Example 3. A Simple printw example

#include <ncurses.h>			/* ncurses.h includes stdio.h */  
#include <string.h> 
 
int main()
{
 char mesg[]="Just a string";		/* message to be appeared on the screen */
 int row,col;				/* to store the number of rows and *
					 * the number of colums of the screen */
 initscr();				/* start the curses mode */
 getmaxyx(stdscr,row,col);		/* get the number of rows and columns */
 mvprintw(row/2,(col-strlen(mesg))/2,"%s",mesg);
                                	/* print the message at the center of the screen */
 mvprintw(row-2,0,"This screen has %d rows and %d columns\n",row,col);
 printw("Try resizing your window(if possible) and then run this program again");
 refresh();
 getch();
 endwin();

 return 0;
}

Above program demonstrates how easy it is to use printw. You just feed the coordinates and the message to be appeared on the screen, then it does what you want.

The above program introduces us to a new function getmaxyx(), a macro defined in ncurses.h. It gives the number of columns and the number of rows in a given window. getmaxyx() does this by updating the variables given to it. Since getmaxyx() is not a function we don't pass pointers to it, we just give two integer variables.


6.4. addstr() class of functions

addstr() is used to put a character string into a given window. This function is similar to calling addch() once for each character in a given string. This is true for all output functions. There are other functions from this family such as mvaddstr(),mvwaddstr() and waddstr(), which obey the naming convention of curses.(e.g. mvaddstr() is similar to the respective calls move() and then addstr().) Another function of this family is addnstr(), which takes an integer parameter(say n) additionally. This function puts at most n characters into the screen. If n is negative, then the entire string will be added.


6.5. A word of caution

All these functions take y co-ordinate first and then x in their arguments. A common mistake by beginners is to pass x,y in that order. If you are doing too many manipulations of (y,x) co-ordinates, think of dividing the screen into windows and manipulate each one separately. Windows are explained in the windows section.


7. Input functions

Well, printing without taking input, is boring. Let's see functions which allow us to get input from user. These functions also can be divided into three categories.

  1. getch() class: Get a character

  2. scanw() class: Get formatted input

  3. getstr() class: Get strings


7.1. getch() class of functions

These functions read a single character from the terminal. But there are several subtle facts to consider. For example if you don't use the function cbreak(), curses will not read your input characters contiguously but will begin read them only after a new line or an EOF is encountered. In order to avoid this, the cbreak() function must used so that characters are immediately available to your program. Another widely used function is noecho(). As the name suggests, when this function is set (used), the characters that are keyed in by the user will not show up on the screen. The two functions cbreak() and noecho() are typical examples of key management. Functions of this genre are explained in the key management section .


7.2. scanw() class of functions

These functions are similar to scanf() with the added capability of getting the input from any location on the screen.


7.2.1. scanw() and mvscanw

The usage of these functions is similar to that of sscanf(), where the line to be scanned is provided by wgetstr() function. That is, these functions call to wgetstr() function(explained below) and uses the resulting line for a scan.


7.2.2. wscanw() and mvwscanw()

These are similar to above two functions except that they read from a window, which is supplied as one of the arguments to these functions.


7.2.3. vwscanw()

This function is similar to vscanf(). This can be used when a variable number of arguments are to be scanned.


7.3. getstr() class of functions

These functions are used to get strings from the terminal. In essence, this function performs the same task as would be achieved by a series of calls to getch() until a newline, carriage return, or end-of-file is received. The resulting string of characters are pointed to by str, which is a character pointer provided by the user.


7.4. Some examples

Example 4. A Simple scanw example

#include <ncurses.h>			/* ncurses.h includes stdio.h */  
#include <string.h> 
 
int main()
{
 char mesg[]="Enter a string: ";		/* message to be appeared on the screen */
 char str[80];
 int row,col;				/* to store the number of rows and *
					 * the number of colums of the screen */
 initscr();				/* start the curses mode */
 getmaxyx(stdscr,row,col);		/* get the number of rows and columns */
 mvprintw(row/2,(col-strlen(mesg))/2,"%s",mesg);
                     		/* print the message at the center of the screen */
 getstr(str);
 mvprintw(LINES - 2, 0, "You Entered: %s", str);
 getch();
 endwin();

 return 0;
}

8. Attributes

We have seen an example of how attributes can be used to print characters with some special effects. Attributes, when set prudently, can present information in an easy, understandable manner. The following program takes a C file as input and prints the file with comments in bold. Scan through the code.

Example 5. A Simple Attributes example

/* pager functionality by Joseph Spainhour" <spainhou@bellsouth.net> */
#include <ncurses.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{ 
  int ch, prev, row, col;
  prev = EOF;
  FILE *fp;
  int y, x;

  if(argc != 2)
  {
    printf("Usage: %s <a c file name>\n", argv[0]);
    exit(1);
  }
  fp = fopen(argv[1], "r");
  if(fp == NULL)
  {
    perror("Cannot open input file");
    exit(1);
  }
  initscr();				/* Start curses mode */
  getmaxyx(stdscr, row, col);		/* find the boundaries of the screeen */
  while((ch = fgetc(fp)) != EOF)	/* read the file till we reach the end */
  {
    getyx(stdscr, y, x);		/* get the current curser position */
    if(y == (row - 1))			/* are we are at the end of the screen */
    {
      printw("<-Press Any Key->");	/* tell the user to press a key */
      getch();
      clear();				/* clear the screen */
      move(0, 0);			/* start at the beginning of the screen */
    }
    if(prev == '/' && ch == '*')    	/* If it is / and * then only
                                     	 * switch bold on */    
    {
      attron(A_BOLD);			/* cut bold on */
      getyx(stdscr, y, x);		/* get the current curser position */
      move(y, x - 1);			/* back up one space */
      printw("%c%c", '/', ch); 		/* The actual printing is done here */
    }
    else
      printw("%c", ch);
    refresh();
    if(prev == '*' && ch == '/')
      attroff(A_BOLD);        		/* Switch it off once we got *
                                 	 * and then / */
    prev = ch;
  }
  endwin();                       	/* End curses mode */
  fclose(fp);
  return 0;
}

Don't worry about all those initialization and other crap. Concentrate on the while loop. It reads each character in the file and searches for the pattern /*. Once it spots the pattern, it switches the BOLD attribute on with attron() . When we get the pattern */ it is switched off by attroff() .

The above program also introduces us to two useful functions getyx() and move(). The first function gets the co-ordinates of the present cursor into the variables y, x. Since getyx() is a macro we don't have to pass pointers to variables. The function move() moves the cursor to the co-ordinates given to it.

The above program is really a simple one which doesn't do much. On these lines one could write a more useful program which reads a C file, parses it and prints it in different colors. One could even extend it to other languages as well.


8.1. The details

Let's get into more details of attributes. The functions attron(), attroff(), attrset() , and their sister functions attr_get() etc.. can be used to switch attributes on/off , get attributes and produce a colorful display.

The functions attron and attroff take a bit-mask of attributes and switch them on or off, respectively. The following video attributes, which are defined in <curses.h> can be passed to these functions.

    
    A_NORMAL        Normal display (no highlight)
    A_STANDOUT      Best highlighting mode of the terminal.
    A_UNDERLINE     Underlining
    A_REVERSE       Reverse video
    A_BLINK         Blinking
    A_DIM           Half bright
    A_BOLD          Extra bright or bold
    A_PROTECT       Protected mode
    A_INVIS         Invisible or blank mode
    A_ALTCHARSET    Alternate character set
    A_CHARTEXT      Bit-mask to extract a character
    COLOR_PAIR(n)   Color-pair number n 
    

The last one is the most colorful one :-) Colors are explained in the next sections.

We can OR(|) any number of above attributes to get a combined effect. If you wanted reverse video with blinking characters you can use

    attron(A_REVERSE | A_BLINK);

8.2. attron() vs attrset()

Then what is the difference between attron() and attrset()? attrset sets the attributes of window whereas attron just switches on the attribute given to it. So attrset() fully overrides whatever attributes the window previously had and sets it to the new attribute(s). Similarly attroff() just switches off the attribute(s) given to it as an argument. This gives us the flexibility of managing attributes easily.But if you use them carelessly you may loose track of what attributes the window has and garble the display. This is especially true while managing menus with colors and highlighting. So decide on a consistent policy and stick to it. You can always use standend() which is equivalent to attrset(A_NORMAL) which turns off all attributes and brings you to normal mode.


8.3. attr_get()

The function attr_get() gets the current attributes and color pair of the window. Though we might not use this as often as the above functions, this is useful in scanning areas of screen. Say we wanted to do some complex update on screen and we are not sure what attribute each character is associated with. Then this function can be used with either attrset or attron to produce the desired effect.


8.4. attr_ functions

There are series of functions like attr_set(), attr_on etc.. These are similar to above functions except that they take parameters of type attr_t.


8.5. wattr functions

For each of the above functions we have a corresponding function with 'w' which operates on a particular window. The above functions operate on stdscr.


8.6. chgat() functions

The function chgat() is listed in the end of the man page curs_attr. It actually is a useful one. This function can be used to set attributes for a group of characters without moving. I mean it !!! without moving the cursor :-) It changes the attributes of a given number of characters starting at the current cursor location.

We can give -1 as the character count to update till end of line. If you want to change attributes of characters from current position to end of line, just use this.

    chgat(-1, A_REVERSE, 0, NULL);

This function is useful when changing attributes for characters that are already on the screen. Move to the character from which you want to change and change the attribute.

Other functions wchgat(), mvchgat(), wchgat() behave similarly except that the w functions operate on the particular window. The mv functions first move the cursor then perform the work given to them. Actually chgat is a macro which is replaced by a wchgat() with stdscr as the window. Most of the "w-less" functions are macros.

Example 6. Chgat() Usage example

#include <ncurses.h>

int main(int argc, char *argv[])
{	initscr();			/* Start curses mode 		*/
	start_color();			/* Start color functionality	*/
	
	init_pair(1, COLOR_CYAN, COLOR_BLACK);
	printw("A Big string which i didn't care to type fully ");
	mvchgat(0, 0, -1, A_BLINK, 1, NULL);	
	/* 
	 * First two parameters specify the position at which to start 
	 * Third parameter number of characters to update. -1 means till 
	 * end of line
	 * Forth parameter is the normal attribute you wanted to give 
	 * to the charcter
	 * Fifth is the color index. It is the index given during init_pair()
	 * use 0 if you didn't want color
	 * Sixth one is always NULL 
	 */
	refresh();
    	getch();
	endwin();			/* End curses mode		  */
	return 0;
}

This example also introduces us to the color world of curses. Colors will be explained in detail later. Use 0 for no color.


9. Windows

Windows form the most important concept in curses. You have seen the standard window stdscr above where all the functions implicitly operated on this window. Now to make design even a simplest GUI, you need to resort to windows. The main reason you may want to use windows is to manipulate parts of the screen separately, for better efficiency, by updating only the windows that need to be changed and for a better design. I would say the last reason is the most important in going for windows. You should always strive for a better and easy-to-manage design in your programs. If you are writing big, complex GUIs this is of pivotal importance before you start doing anything.


9.1. The basics

A Window can be created by calling the function newwin(). It doesn't create any thing on the screen actually. It allocates memory for a structure to manipulate the window and updates the structure with data regarding the window like it's size, beginy, beginx etc.. Hence in curses, a window is just an abstraction of an imaginary window, which can be manipulated independent of other parts of screen. The function newwin() returns a pointer to structure WINDOW, which can be passed to window related functions like wprintw() etc.. Finally the window can be destroyed with delwin(). It will deallocate the memory associated with the window structure.


9.2. Let there be a Window !!!

What fun is it, if a window is created and we can't see it. So the fun part begins by displaying the window. The function box() can be used to draw a border around the window. Let's explore these functions in more detail in this example.

Example 7. Window Border example

#include <ncurses.h>


WINDOW *create_newwin(int height, int width, int starty, int startx);
void destroy_win(WINDOW *local_win);

int main(int argc, char *argv[])
{	WINDOW *my_win;
	int startx, starty, width, height;
	int ch;

	initscr();			/* Start curses mode 		*/
	cbreak();			/* Line buffering disabled, Pass on
					 * everty thing to me 		*/
	keypad(stdscr, TRUE);		/* I need that nifty F1 	*/

	height = 3;
	width = 10;
	starty = (LINES - height) / 2;	/* Calculating for a center placement */
	startx = (COLS - width) / 2;	/* of the window		*/
	printw("Press F1 to exit");
	refresh();
	my_win = create_newwin(height, width, starty, startx);

	while((ch = getch()) != KEY_F(1))
	{	switch(ch)
		{	case KEY_LEFT:
				destroy_win(my_win);
				my_win = create_newwin(height, width, starty,--startx);
				break;
			case KEY_RIGHT:
				destroy_win(my_win);
				my_win = create_newwin(height, width, starty,++startx);
				break;
			case KEY_UP:
				destroy_win(my_win);
				my_win = create_newwin(height, width, --starty,startx);
				break;
			case KEY_DOWN:
				destroy_win(my_win);
				my_win = create_newwin(height, width, ++starty,startx);
				break;	
		}
	}
		
	endwin();			/* End curses mode		  */
	return 0;
}

WINDOW *create_newwin(int height, int width, int starty, int startx)
{	WINDOW *local_win;

	local_win = newwin(height, width, starty, startx);
	box(local_win, 0 , 0);		/* 0, 0 gives default characters 
					 * for the vertical and horizontal
					 * lines			*/
	wrefresh(local_win);		/* Show that box 		*/

	return local_win;
}

void destroy_win(WINDOW *local_win)
{	
	/* box(local_win, ' ', ' '); : This won't produce the desired
	 * result of erasing the window. It will leave it's four corners 
	 * and so an ugly remnant of window. 
	 */
	wborder(local_win, ' ', ' ', ' ',' ',' ',' ',' ',' ');
	/* The parameters taken are 
	 * 1. win: the window on which to operate
	 * 2. ls: character to be used for the left side of the window 
	 * 3. rs: character to be used for the right side of the window 
	 * 4. ts: character to be used for the top side of the window 
	 * 5. bs: character to be used for the bottom side of the window 
	 * 6. tl: character to be used for the top left corner of the window 
	 * 7. tr: character to be used for the top right corner of the window 
	 * 8. bl: character to be used for the bottom left corner of the window 
	 * 9. br: character to be used for the bottom right corner of the window
	 */
	wrefresh(local_win);
	delwin(local_win);
}

9.3. Explanation

Don't scream. I know it's a big example. But I have to explain some important things here :-). This program creates a rectangular window that can be moved with left, right, up, down arrow keys. It repeatedly creates and destroys windows as user press a key. Don't go beyond the screen limits. Checking for those limits is left as an exercise for the reader. Let's dissect it by line by line.

The create_newwin() function creates a window with newwin() and displays a border around it with box. The function destroy_win() first erases the window from screen by painting a border with ' ' character and then calling delwin() to deallocate memory related to it. Depending on the key the user presses, starty or startx is changed and a new window is created.

In the destroy_win, as you can see, I used wborder instead of box. The reason is written in the comments (You missed it. I know. Read the code :-)). wborder draws a border around the window with the characters given to it as the 4 corner points and the 4 lines. To put it clearly, if you have called wborder as below:

    wborder(win, '|', '|', '-', '-', '+', '+', '+', '+');

it produces some thing like

    +------------+
    |            |
    |            |
    |            |
    |            |
    |            |
    |            |
    +------------+

9.4. The other stuff in the example

You can also see in the above examples, that I have used the variables COLS, LINES which are initialized to the screen sizes after initscr(). They can be useful in finding screen dimensions and finding the center co-ordinate of the screen as above. The function getch() as usual gets the key from keyboard and according to the key it does the corresponding work. This type of switch- case is very common in any GUI based programs.


9.5. Other Border functions

Above program is grossly inefficient in that with each press of a key, a window is destroyed and another is created. So let's write a more efficient program which uses other border related functions.

The following program uses mvhline() and mvvline() to achieve similar effect. These two functions are simple. They create a horizontal or vertical line of the specified length at the specified position.

Example 8. More border functions

#include <ncurses.h>

typedef struct _win_border_struct {
	chtype 	ls, rs, ts, bs, 
	 	tl, tr, bl, br;
}WIN_BORDER;

typedef struct _WIN_struct {

	int startx, starty;
	int height, width;
	WIN_BORDER border;
}WIN;

void init_win_params(WIN *p_win);
void print_win_params(WIN *p_win);
void create_box(WIN *win, bool flag);

int main(int argc, char *argv[])
{	WIN win;
	int ch;

	initscr();			/* Start curses mode 		*/
	start_color();			/* Start the color functionality */
	cbreak();			/* Line buffering disabled, Pass on
					 * everty thing to me 		*/
	keypad(stdscr, TRUE);		/* I need that nifty F1 	*/
	noecho();
	init_pair(1, COLOR_CYAN, COLOR_BLACK);

	/* Initialize the window parameters */
	init_win_params(&win);
	print_win_params(&win);

	attron(COLOR_PAIR(1));
	printw("Press F1 to exit");
	refresh();
	attroff(COLOR_PAIR(1));
	
	create_box(&win, TRUE);
	while((ch = getch()) != KEY_F(1))
	{	switch(ch)
		{	case KEY_LEFT:
				create_box(&win, FALSE);
				--win.startx;
				create_box(&win, TRUE);
				break;
			case KEY_RIGHT:
				create_box(&win, FALSE);
				++win.startx;
				create_box(&win, TRUE);
				break;
			case KEY_UP:
				create_box(&win, FALSE);
				--win.starty;
				create_box(&win, TRUE);
				break;
			case KEY_DOWN:
				create_box(&win, FALSE);
				++win.starty;
				create_box(&win, TRUE);
				break;	
		}
	}
	endwin();			/* End curses mode		  */
	return 0;
}
void init_win_params(WIN *p_win)
{
	p_win->height = 3;
	p_win->width = 10;
	p_win->starty = (LINES - p_win->height)/2;	
	p_win->startx = (COLS - p_win->width)/2;

	p_win->border.ls = '|';
	p_win->border.rs = '|';
	p_win->border.ts = '-';
	p_win->border.bs = '-';
	p_win->border.tl = '+';
	p_win->border.tr = '+';
	p_win->border.bl = '+';
	p_win->border.br = '+';

}
void print_win_params(WIN *p_win)
{
#ifdef _DEBUG
	mvprintw(25, 0, "%d %d %d %d", p_win->startx, p_win->starty, 
				p_win->width, p_win->height);
	refresh();
#endif
}
void create_box(WIN *p_win, bool flag)
{	int i, j;
	int x, y, w, h;

	x = p_win->startx;
	y = p_win->starty;
	w = p_win->width;
	h = p_win->height;

	if(flag == TRUE)
	{	mvaddch(y, x, p_win->border.tl);
		mvaddch(y, x + w, p_win->border.tr);
		mvaddch(y + h, x, p_win->border.bl);
		mvaddch(y + h, x + w, p_win->border.br);
		mvhline(y, x + 1, p_win->border.ts, w - 1);
		mvhline(y + h, x + 1, p_win->border.bs, w - 1);
		mvvline(y + 1, x, p_win->border.ls, h - 1);
		mvvline(y + 1, x + w, p_win->border.rs, h - 1);

	}
	else
		for(j = y; j <= y + h; ++j)
			for(i = x; i <= x + w; ++i)
				mvaddch(j, i, ' ');
				
	refresh();

}

10. Colors

10.1. The basics

Life seems dull with no colors. Curses has a nice mechanism to handle colors. Let's get into the thick of the things with a small program.

Example 9. A Simple Color example

#include <ncurses.h>

void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string);
int main(int argc, char *argv[])
{	initscr();			/* Start curses mode 		*/
	if(has_colors() == FALSE)
	{	endwin();
		printf("Your terminal does not support color\n");
		exit(1);
	}
	start_color();			/* Start color 			*/
	init_pair(1, COLOR_RED, COLOR_BLACK);

	attron(COLOR_PAIR(1));
	print_in_middle(stdscr, LINES / 2, 0, 0, "Viola !!! In color ...");
	attroff(COLOR_PAIR(1));
    	getch();
	endwin();
}
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string)
{	int length, x, y;
	float temp;

	if(win == NULL)
		win = stdscr;
	getyx(win, y, x);
	if(startx != 0)
		x = startx;
	if(starty != 0)
		y = starty;
	if(width == 0)
		width = 80;

	length = strlen(string);
	temp = (width - length)/ 2;
	x = startx + (int)temp;
	mvwprintw(win, y, x, "%s", string);
	refresh();
}

As you can see, to start using color, you should first call the function start_color(). After that, you can use color capabilities of your terminals using various functions. To find out whether a terminal has color capabilities or not, you can use has_colors() function, which returns FALSE if the terminal does not support color.

Curses initializes all the colors supported by terminal when start_color() is called. These can be accessed by the define constants like COLOR_BLACK etc. Now to actually start using colors, you have to define pairs. Colors are always used in pairs. That means you have to use the function init_pair() to define the foreground and background for the pair number you give. After that that pair number can be used as a normal attribute with COLOR_PAIR()function. This may seem to be cumbersome at first. But this elegant solution allows us to manage color pairs very easily. To appreciate it, you have to look into the the source code of "dialog", a utility for displaying dialog boxes from shell scripts. The developers have defined foreground and background combinations for all the colors they might need and initialized at the beginning. This makes it very easy to set attributes just by accessing a pair which we already have defined as a constant.

The following colors are defined in curses.h. You can use these as parameters for various color functions.

        COLOR_BLACK   0
        COLOR_RED     1
        COLOR_GREEN   2
        COLOR_YELLOW  3
        COLOR_BLUE    4
        COLOR_MAGENTA 5
        COLOR_CYAN    6
        COLOR_WHITE   7


10.2. Changing Color Definitions

The function init_color()can be used to change the rgb values for the colors defined by curses initially. Say you wanted to lighten the intensity of red color by a minuscule. Then you can use this function as

    init_color(COLOR_RED, 700, 0, 0);
    /* param 1     : color name
     * param 2, 3, 4 : rgb content min = 0, max = 1000 */

If your terminal cannot change the color definitions, the function returns ERR. The function can_change_color() can be used to find out whether the terminal has the capability of changing color content or not. The rgb content is scaled from 0 to 1000. Initially RED color is defined with content 1000(r), 0(g), 0(b).


10.3. Color Content

The functions color_content() and pair_content() can be used to find the color content and foreground, background combination for the pair.


11. Interfacing with the key board

11.1. The Basics

No GUI is complete without a strong user interface and to interact with the user, a curses program should be sensitive to key presses or the mouse actions done by the user. Let's deal with the keys first.

As you have seen in almost all of the above examples, it's very easy to get key input from the user. A simple way of getting key presses is to use getch() function. The cbreak mode should be enabled to read keys when you are interested in reading individual key hits rather than complete lines of text (which usually end with a carriage return). keypad should be enabled to get the Functions keys, arrow keys etc. See the initialization section for details.

getch() returns an integer corresponding to the key pressed. If it is a normal character, the integer value will be equivalent to the character. Otherwise it returns a number which can be matched with the constants defined in curses.h. For example if the user presses F1, the integer returned is 265. This can be checked using the macro KEY_F() defined in curses.h. This makes reading keys portable and easy to manage.

For example, if you call getch() like this

    int ch;

    ch = getch();

getch() will wait for the user to press a key, (unless you specified a timeout) and when user presses a key, the corresponding integer is returned. Then you can check the value returned with the constants defined in curses.h to match against the keys you want.

The following code piece will do that job.

    if(ch == KEY_LEFT)
        printw("Left arrow is pressed\n");

Let's write a small program which creates a menu which can be navigated by up and down arrows.


11.2. A Simple Key Usage example

Example 10. A Simple Key Usage example

#include <stdio.h>
#include <ncurses.h>

#define WIDTH 30
#define HEIGHT 10 

int startx = 0;
int starty = 0;

char *choices[] = { 
			"Choice 1",
			"Choice 2",
			"Choice 3",
			"Choice 4",
			"Exit",
		  };
int n_choices = sizeof(choices) / sizeof(char *);
void print_menu(WINDOW *menu_win, int highlight);

int main()
{	WINDOW *menu_win;
	int highlight = 1;
	int choice = 0;
	int c;

	initscr();
	clear();
	noecho();
	cbreak();	/* Line buffering disabled. pass on everything */
	startx = (80 - WIDTH) / 2;
	starty = (24 - HEIGHT) / 2;
		
	menu_win = newwin(HEIGHT, WIDTH, starty, startx);
	keypad(menu_win, TRUE);
	mvprintw(0, 0, "Use arrow keys to go up and down, Press enter to select a choice");
	refresh();
	print_menu(menu_win, highlight);
	while(1)
	{	c = wgetch(menu_win);
		switch(c)
		{	case KEY_UP:
				if(highlight == 1)
					highlight = n_choices;
				else
					--highlight;
				break;
			case KEY_DOWN:
				if(highlight == n_choices)
					highlight = 1;
				else 
					++highlight;
				break;
			case 10:
				choice = highlight;
				break;
			default:
				mvprintw(24, 0, "Charcter pressed is = %3d Hopefully it can be printed as '%c'", c, c);
				refresh();
				break;
		}
		print_menu(menu_win, highlight);
		if(choice != 0)	/* User did a choice come out of the infinite loop */
			break;
	}	
	mvprintw(23, 0, "You chose choice %d with choice string %s\n", choice, choices[choice - 1]);
	clrtoeol();
	refresh();
	endwin();
	return 0;
}


void print_menu(WINDOW *menu_win, int highlight)
{
	int x, y, i;	

	x = 2;
	y = 2;
	box(menu_win, 0, 0);
	for(i = 0; i < n_choices; ++i)
	{	if(highlight == i + 1) /* High light the present choice */
		{	wattron(menu_win, A_REVERSE); 
			mvwprintw(menu_win, y, x, "%s", choices[i]);
			wattroff(menu_win, A_REVERSE);
		}
		else
			mvwprintw(menu_win, y, x, "%s", choices[i]);
		++y;
	}
	wrefresh(menu_win);
}

12. Interfacing with the mouse

Now that you have seen how to get keys, lets do the same thing from mouse. Usually each UI allows the user to interact with both keyboard and mouse.


12.1. The Basics

Before you do any thing else, the events you want to receive have to be enabled with mousemask().

    mousemask(  mmask_t newmask,    /* The events you want to listen to */
                mmask_t *oldmask)    /* The old events mask                */

The first parameter to above function is a bit mask of events you would like to listen. By default, all the events are turned off. The bit mask ALL_MOUSE_EVENTS can be used to get all the events.

The following are all the event masks:

    Name            Description
       ---------------------------------------------------------------------
       BUTTON1_PRESSED          mouse button 1 down
       BUTTON1_RELEASED         mouse button 1 up
       BUTTON1_CLICKED          mouse button 1 clicked
       BUTTON1_DOUBLE_CLICKED   mouse button 1 double clicked
       BUTTON1_TRIPLE_CLICKED   mouse button 1 triple clicked
       BUTTON2_PRESSED          mouse button 2 down
       BUTTON2_RELEASED         mouse button 2 up
       BUTTON2_CLICKED          mouse button 2 clicked
       BUTTON2_DOUBLE_CLICKED   mouse button 2 double clicked
       BUTTON2_TRIPLE_CLICKED   mouse button 2 triple clicked
       BUTTON3_PRESSED          mouse button 3 down
       BUTTON3_RELEASED         mouse button 3 up
       BUTTON3_CLICKED          mouse button 3 clicked
       BUTTON3_DOUBLE_CLICKED   mouse button 3 double clicked
       BUTTON3_TRIPLE_CLICKED   mouse button 3 triple clicked
       BUTTON4_PRESSED          mouse button 4 down
       BUTTON4_RELEASED         mouse button 4 up
       BUTTON4_CLICKED          mouse button 4 clicked
       BUTTON4_DOUBLE_CLICKED   mouse button 4 double clicked
       BUTTON4_TRIPLE_CLICKED   mouse button 4 triple clicked
       BUTTON_SHIFT             shift was down during button state change
       BUTTON_CTRL              control was down during button state change
       BUTTON_ALT               alt was down during button state change
       ALL_MOUSE_EVENTS         report all button state changes
       REPORT_MOUSE_POSITION    report mouse movement

12.2. Getting the events

Once a class of mouse events have been enabled, getch() class of functions return KEY_MOUSE every time some mouse event happens. Then the mouse event can be retrieved with getmouse().

The code approximately looks like this:

    MEVENT event;

    ch = getch();
    if(ch == KEY_MOUSE)
        if(getmouse(&event) == OK)
            .    /* Do some thing with the event */
            .
            .

getmouse() returns the event into the pointer given to it. It's a structure which contains

    typedef struct
    {
        short id;         /* ID to distinguish multiple devices */
        int x, y, z;      /* event coordinates */
        mmask_t bstate;   /* button state bits */
    }    

The bstate is the main variable we are interested in. It tells the button state of the mouse.

Then with a code snippet like the following, we can find out what happened.

    if(event.bstate & BUTTON1_PRESSED)
        printw("Left Button Pressed");

12.3. Putting it all Together

That's pretty much interfacing with mouse. Let's create the same menu and enable mouse interaction. To make things simpler, key handling is removed.

Example 11. Access the menu with mouse !!!

#include <ncurses.h>

#define WIDTH 30
#define HEIGHT 10 

int startx = 0;
int starty = 0;

char *choices[] = { 	"Choice 1",
			"Choice 2",
			"Choice 3",
			"Choice 4",
			"Exit",
		  };

int n_choices = sizeof(choices) / sizeof(char *);

void print_menu(WINDOW *menu_win, int highlight);
void report_choice(int mouse_x, int mouse_y, int *p_choice);

int main()
{	int c, choice = 0;
	WINDOW *menu_win;
	MEVENT event;

	/* Initialize curses */
	initscr();
	clear();
	noecho();
	cbreak();	//Line buffering disabled. pass on everything

	/* Try to put the window in the middle of screen */
	startx = (80 - WIDTH) / 2;
	starty = (24 - HEIGHT) / 2;
	
	attron(A_REVERSE);
	mvprintw(23, 1, "Click on Exit to quit (Works best in a virtual console)");
	refresh();
	attroff(A_REVERSE);

	/* Print the menu for the first time */
	menu_win = newwin(HEIGHT, WIDTH, starty, startx);
	print_menu(menu_win, 1);
	/* Get all the mouse events */
	mousemask(ALL_MOUSE_EVENTS, NULL);
	
	while(1)
	{	c = wgetch(menu_win);
		switch(c)
		{	case KEY_MOUSE:
			if(getmouse(&event) == OK)
			{	/* When the user clicks left mouse button */
				if(event.bstate & BUTTON1_PRESSED)
				{	report_choice(event.x + 1, event.y + 1, &choice);
					if(choice == -1) //Exit chosen
						goto end;
					mvprintw(22, 1, "Choice made is : %d String Chosen is \"%10s\"", choice, choices[choice - 1]);
					refresh(); 
				}
			}
			print_menu(menu_win, choice);
			break;
		}
	}		
end:
	endwin();
	return 0;
}


void print_menu(WINDOW *menu_win, int highlight)
{
	int x, y, i;	

	x = 2;
	y = 2;
	box(menu_win, 0, 0);
	for(i = 0; i < n_choices; ++i)
	{	if(highlight == i + 1)
		{	wattron(menu_win, A_REVERSE); 
			mvwprintw(menu_win, y, x, "%s", choices[i]);
			wattroff(menu_win, A_REVERSE);
		}
		else
			mvwprintw(menu_win, y, x, "%s", choices[i]);
		++y;
	}
	wrefresh(menu_win);
}

/* Report the choice according to mouse position */
void report_choice(int mouse_x, int mouse_y, int *p_choice)
{	int i,j, choice;

	i = startx + 2;
	j = starty + 3;
	
	for(choice = 0; choice < n_choices; ++choice)
		if(mouse_y == j + choice && mouse_x >= i && mouse_x <= i + strlen(choices[choice]))
		{	if(choice == n_choices - 1)
				*p_choice = -1;		
			else
				*p_choice = choice + 1;	
			break;
		}
}

12.4. Miscellaneous Functions

The functions mouse_trafo() and wmouse_trafo() can be used to convert to mouse co-ordinates to screen relative co-ordinates. See curs_mouse(3X) man page for details.

The mouseinterval function sets the maximum time (in thousands of a second) that can elapse between press and release events in order for them to be recognized as a click. This function returns the previous interval value. The default is one fifth of a second.


13. Screen Manipulation

In this section, we will look into some functions, which allow us to manage the screen efficiently and to write some fancy programs. This is especially important in writing games.


13.1. getyx() functions

The function getyx() can be used to find out the present cursor co-ordinates. It will fill the values of x and y co-ordinates in the arguments given to it. Since getyx() is a macro you don't have to pass the address of the variables. It can be called as

    getyx(win, y, x);
    /* win: window pointer
     *   y, x: y, x co-ordinates will be put into this variables 
     */

The function getparyx() gets the beginning co-ordinates of the sub window relative to the main window. This is some times useful to update a sub window. When designing fancy stuff like writing multiple menus, it becomes difficult to store the menu positions, their first option co-ordinates etc. A simple solution to this problem, is to create menus in sub windows and later find the starting co-ordinates of the menus by using getparyx().

The functions getbegyx() and getmaxyx() store current window's beginning and maximum co-ordinates. These functions are useful in the same way as above in managing the windows and sub windows effectively.


13.2. Screen Dumping

While writing games, some times it becomes necessary to store the state of the screen and restore it back to the same state. The function scr_dump() can be used to dump the screen contents to a file given as an argument. Later it can be restored by scr_restore function. These two simple functions can be used effectively to maintain a fast moving game with changing scenarios.


13.3. Window Dumping

To store and restore windows, the functions putwin() and getwin() can be used. putwin() puts the present window state into a file, which can be later restored by getwin().

The function copywin() can be used to copy a window completely onto another window. It takes the source and destination windows as parameters and according to the rectangle specified, it copies the rectangular region from source to destination window. It's last parameter specifies whether to overwrite or just overlay the contents on to the destination window. If this argument is true, then the copying is non-destructive.


14. Miscellaneous features

Now you know enough features to write a good curses program, with all bells and whistles. There are some miscellaneous functions which are useful in various cases. Let's go headlong into some of those.


14.1. curs_set()

This function can be used to make the cursor invisible. The parameter to this function should be

    0 : invisible      or
    1 : normal    or
    2 : very visible.

14.2. Temporarily Leaving Curses mode

Some times you may want to get back to cooked mode (normal line buffering mode) temporarily. In such a case you will first need to save the tty modes with a call to def_prog_mode() and then call endwin() to end the curses mode. This will leave you in the original tty mode. To get back to curses once you are done, call reset_prog_mode() . This function returns the tty to the state stored by def_prog_mode(). Then do refresh(), and you are back to the curses mode. Here is an example showing the sequence of things to be done.

Example 12. Temporarily Leaving Curses Mode

#include <ncurses.h>

int main()
{	
	initscr();			/* Start curses mode 		  */
	printw("Hello World !!!\n");	/* Print Hello World		  */
	refresh();			/* Print it on to the real screen */
	def_prog_mode();		/* Save the tty modes		  */
	endwin();			/* End curses mode temporarily	  */
	system("/bin/sh");		/* Do whatever you like in cooked mode */
	reset_prog_mode();		/* Return to the previous tty mode*/
					/* stored by def_prog_mode() 	  */
	refresh();			/* Do refresh() to restore the	  */
					/* Screen contents		  */
	printw("Another String\n");	/* Back to curses use the full    */
	refresh();			/* capabilities of curses	  */
	endwin();			/* End curses mode		  */

	return 0;
}

14.3. ACS_ variables

If you have ever programmed in DOS, you know about those nifty characters in extended character set. They are printable only on some terminals. NCURSES functions like box() use these characters. All these variables start with ACS meaning alternative character set. You might have noticed me using these characters in some of the programs above. Here's an example showing all the characters.

Example 13. ACS Variables Example

#include <ncurses.h>

int main()
{
        initscr();

        printw("Upper left corner           "); addch(ACS_ULCORNER); printw("\n"); 
        printw("Lower left corner           "); addch(ACS_LLCORNER); printw("\n");
        printw("Lower right corner          "); addch(ACS_LRCORNER); printw("\n");
        printw("Tee pointing right          "); addch(ACS_LTEE); printw("\n");
        printw("Tee pointing left           "); addch(ACS_RTEE); printw("\n");
        printw("Tee pointing up             "); addch(ACS_BTEE); printw("\n");
        printw("Tee pointing down           "); addch(ACS_TTEE); printw("\n");
        printw("Horizontal line             "); addch(ACS_HLINE); printw("\n");
        printw("Vertical line               "); addch(ACS_VLINE); printw("\n");
        printw("Large Plus or cross over    "); addch(ACS_PLUS); printw("\n");
        printw("Scan Line 1                 "); addch(ACS_S1); printw("\n");
        printw("Scan Line 3                 "); addch(ACS_S3); printw("\n");
        printw("Scan Line 7                 "); addch(ACS_S7); printw("\n");
        printw("Scan Line 9                 "); addch(ACS_S9); printw("\n");
        printw("Diamond                     "); addch(ACS_DIAMOND); printw("\n");
        printw("Checker board (stipple)     "); addch(ACS_CKBOARD); printw("\n");
        printw("Degree Symbol               "); addch(ACS_DEGREE); printw("\n");
        printw("Plus/Minus Symbol           "); addch(ACS_PLMINUS); printw("\n");
        printw("Bullet                      "); addch(ACS_BULLET); printw("\n");
        printw("Arrow Pointing Left         "); addch(ACS_LARROW); printw("\n");
        printw("Arrow Pointing Right        "); addch(ACS_RARROW); printw("\n");
        printw("Arrow Pointing Down         "); addch(ACS_DARROW); printw("\n");
        printw("Arrow Pointing Up           "); addch(ACS_UARROW); printw("\n");
        printw("Board of squares            "); addch(ACS_BOARD); printw("\n");
        printw("Lantern Symbol              "); addch(ACS_LANTERN); printw("\n");
        printw("Solid Square Block          "); addch(ACS_BLOCK); printw("\n");
        printw("Less/Equal sign             "); addch(ACS_LEQUAL); printw("\n");
        printw("Greater/Equal sign          "); addch(ACS_GEQUAL); printw("\n");
        printw("Pi                          "); addch(ACS_PI); printw("\n");
        printw("Not equal                   "); addch(ACS_NEQUAL); printw("\n");
        printw("UK pound sign               "); addch(ACS_STERLING); printw("\n");

        refresh();
        getch();
        endwin();

	return 0;
}

15. Other libraries

Apart from the curses library, there are few text mode libraries, which provide more functionality and a lot of features. The following sections explain three standard libraries which are usually distributed along with curses.


16. Panel Library

Now that you are proficient in curses, you wanted to do some thing big. You created a lot of overlapping windows to give a professional windows-type look. Unfortunately, it soon becomes difficult to manage these. The multiple refreshes, updates plunge you into a nightmare. The overlapping windows create blotches, whenever you forget to refresh the windows in the proper order.

Don't despair. There's an elegant solution provided in panels library. In the words of developers of ncurses

When your interface design is such that windows may dive deeper into the visibility stack or pop to the top at runtime, the resulting book-keeping can be tedious and difficult to get right. Hence the panels library.

If you have lot of overlapping windows, then panels library is the way to go. It obviates the need of doing series of wnoutrefresh(), doupdate() and relieves the burden of doing it correctly(bottom up). The library maintains information about the order of windows, their overlapping and update the screen properly. So why wait? Let's take a close peek into panels.


16.1. The Basics

Panel object is a window that is implicitly treated as part of a deck including all other panel objects. The deck is treated as a stack with the top panel being completely visible and the other panels may or may not be obscured according to their positions. So the basic idea is to create a stack of overlapping panels and use panels library to display them correctly. There is a function similar to refresh() which, when called , displays panels in the correct order. Functions are provided to hide or show panels, move panels, change its size etc.. The overlapping problem is managed by the panels library during all the calls to these functions.

The general flow of a panel program goes like this:

  1. Create the windows (with newwin()) to be attached to the panels.

  2. Create panels with the chosen visibility order. Stack them up according to the desired visibility. The function new_panel() is used to created panels.

  3. Call update_panels() to write the panels to the virtual screen in correct visibility order. Do a doupdate() to show it on the screen.

  4. Mainpulate the panels with show_panel(), hide_panel(), move_panel() etc. Make use of helper functions like panel_hidden() and panel_window(). Make use of user pointer to store custom data for a panel. Use the functions set_panel_userptr() and panel_userptr() to set and get the user pointer for a panel.

  5. When you are done with the panel use del_panel() to delete the panel.

Let's make the concepts clear, with some programs. The following is a simple program which creates 3 overlapping panels and shows them on the screen.


16.2. Compiling With the Panels Library

To use panels library functions, you have to include panel.h and to link the program with panels library the flag -lpanel should be added along with -lncurses in that order.

    #include <panel.h>
    .
    .
    .

    compile and link: gcc <program file> -lpanel -lncurses

Example 14. Panel basics

#include <panel.h>

int main()
{	WINDOW *my_wins[3];
	PANEL  *my_panels[3];
	int lines = 10, cols = 40, y = 2, x = 4, i;

	initscr();
	cbreak();
	noecho();

	/* Create windows for the panels */
	my_wins[0] = newwin(lines, cols, y, x);
	my_wins[1] = newwin(lines, cols, y + 1, x + 5);
	my_wins[2] = newwin(lines, cols, y + 2, x + 10);

	/* 
	 * Create borders around the windows so that you can see the effect
	 * of panels
	 */
	for(i = 0; i < 3; ++i)
		box(my_wins[i], 0, 0);

	/* Attach a panel to each window */ 	/* Order is bottom up */
	my_panels[0] = new_panel(my_wins[0]); 	/* Push 0, order: stdscr-0 */
	my_panels[1] = new_panel(my_wins[1]); 	/* Push 1, order: stdscr-0-1 */
	my_panels[2] = new_panel(my_wins[2]); 	/* Push 2, order: stdscr-0-1-2 */

	/* Update the stacking order. 2nd panel will be on top */
	update_panels();

	/* Show it on the screen */
	doupdate();
	
	getch();
	endwin();
}

As you can see, above program follows a simple flow as explained. The windows are created with newwin() and then they are attached to panels with new_panel(). As we attach one panel after another, the stack of panels gets updated. To put them on screen update_panels() and doupdate() are called.


16.3. Panel Window Browsing

A slightly complicated example is given below. This program creates 3 windows which can be cycled through using tab. Have a look at the code.

Example 15. Panel Window Browsing Example

#include <panel.h>

#define NLINES 10
#define NCOLS 40

void init_wins(WINDOW **wins, int n);
void win_show(WINDOW *win, char *label, int label_color);
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color);

int main()
{	WINDOW *my_wins[3];
	PANEL  *my_panels[3];
	PANEL  *top;
	int ch;

	/* Initialize curses */
	initscr();
	start_color();
	cbreak();
	noecho();
	keypad(stdscr, TRUE);

	/* Initialize all the colors */
	init_pair(1, COLOR_RED, COLOR_BLACK);
	init_pair(2, COLOR_GREEN, COLOR_BLACK);
	init_pair(3, COLOR_BLUE, COLOR_BLACK);
	init_pair(4, COLOR_CYAN, COLOR_BLACK);

	init_wins(my_wins, 3);
	
	/* Attach a panel to each window */ 	/* Order is bottom up */
	my_panels[0] = new_panel(my_wins[0]); 	/* Push 0, order: stdscr-0 */
	my_panels[1] = new_panel(my_wins[1]); 	/* Push 1, order: stdscr-0-1 */
	my_panels[2] = new_panel(my_wins[2]); 	/* Push 2, order: stdscr-0-1-2 */

	/* Set up the user pointers to the next panel */
	set_panel_userptr(my_panels[0], my_panels[1]);
	set_panel_userptr(my_panels[1], my_panels[2]);
	set_panel_userptr(my_panels[2], my_panels[0]);

	/* Update the stacking order. 2nd panel will be on top */
	update_panels();

	/* Show it on the screen */
	attron(COLOR_PAIR(4));
	mvprintw(LINES - 2, 0, "Use tab to browse through the windows (F1 to Exit)");
	attroff(COLOR_PAIR(4));
	doupdate();

	top = my_panels[2];
	while((ch = getch()) != KEY_F(1))
	{	switch(ch)
		{	case 9:
				top = (PANEL *)panel_userptr(top);
				top_panel(top);
				break;
		}
		update_panels();
		doupdate();
	}
	endwin();
	return 0;
}

/* Put all the windows */
void init_wins(WINDOW **wins, int n)
{	int x, y, i;
	char label[80];

	y = 2;
	x = 10;
	for(i = 0; i < n; ++i)
	{	wins[i] = newwin(NLINES, NCOLS, y, x);
		sprintf(label, "Window Number %d", i + 1);
		win_show(wins[i], label, i + 1);
		y += 3;
		x += 7;
	}
}

/* Show the window with a border and a label */
void win_show(WINDOW *win, char *label, int label_color)
{	int startx, starty, height, width;

	getbegyx(win, starty, startx);
	getmaxyx(win, height, width);

	box(win, 0, 0);
	mvwaddch(win, 2, 0, ACS_LTEE); 
	mvwhline(win, 2, 1, ACS_HLINE, width - 2); 
	mvwaddch(win, 2, width - 1, ACS_RTEE); 
	
	print_in_middle(win, 1, 0, width, label, COLOR_PAIR(label_color));
}

void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color)
{	int length, x, y;
	float temp;

	if(win == NULL)
		win = stdscr;
	getyx(win, y, x);
	if(startx != 0)
		x = startx;
	if(starty != 0)
		y = starty;
	if(width == 0)
		width = 80;

	length = strlen(string);
	temp = (width - length)/ 2;
	x = startx + (int)temp;
	wattron(win, color);
	mvwprintw(win, y, x, "%s", string);
	wattroff(win, color);
	refresh();
}

16.4. Using User Pointers

In the above example I used user pointers to find out the next window in the cycle. We can attach custom information to the panel by specifying a user pointer, which can point to any information you want to store. In this case I stored the pointer to the next panel in the cycle. User pointer for a panel can be set with the function set_panel_userptr(). It can be accessed using the function panel_userptr() which will return the user pointer for the panel given as argument. After finding the next panel in the cycle It's brought to the top by the function top_panel(). This function brings the panel given as argument to the top of the panel stack.


16.5. Moving and Resizing Panels

The function move_panel() can be used to move a panel to the desired location. It does not change the position of the panel in the stack. Make sure that you use move_panel() instead mvwin() on the window associated with the panel.

Resizing a panel is slightly complex. There is no straight forward function just to resize the window associated with a panel. A solution to resize a panel is to create a new window with the desired sizes, change the window associated with the panel using replace_panel(). Don't forget to delete the old window. The window associated with a panel can be found by using the function panel_window().

The following program shows these concepts, in supposedly simple program. You can cycle through the window with <TAB> as usual. To resize or move the active panel press 'r' for resize 'm' for moving. Then use arrow keys to resize or move it to the desired way and press enter to end your resizing or moving. This example makes use of user data to get the required data to do the operations.

Example 16. Panel Moving and Resizing example

#include <panel.h>

typedef struct _PANEL_DATA {
	int x, y, w, h;
	char label[80]; 
	int label_color;
	PANEL *next;
}PANEL_DATA;

#define NLINES 10
#define NCOLS 40

void init_wins(WINDOW **wins, int n);
void win_show(WINDOW *win, char *label, int label_color);
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color);
void set_user_ptrs(PANEL **panels, int n);

int main()
{	WINDOW *my_wins[3];
	PANEL  *my_panels[3];
	PANEL_DATA  *top;
	PANEL *stack_top;
	WINDOW *temp_win, *old_win;
	int ch;
	int newx, newy, neww, newh;
	int size = FALSE, move = FALSE;

	/* Initialize curses */
	initscr();
	start_color();
	cbreak();
	noecho();
	keypad(stdscr, TRUE);

	/* Initialize all the colors */
	init_pair(1, COLOR_RED, COLOR_BLACK);
	init_pair(2, COLOR_GREEN, COLOR_BLACK);
	init_pair(3, COLOR_BLUE, COLOR_BLACK);
	init_pair(4, COLOR_CYAN, COLOR_BLACK);

	init_wins(my_wins, 3);
	
	/* Attach a panel to each window */ 	/* Order is bottom up */
	my_panels[0] = new_panel(my_wins[0]); 	/* Push 0, order: stdscr-0 */
	my_panels[1] = new_panel(my_wins[1]); 	/* Push 1, order: stdscr-0-1 */
	my_panels[2] = new_panel(my_wins[2]); 	/* Push 2, order: stdscr-0-1-2 */

	set_user_ptrs(my_panels, 3);
	/* Update the stacking order. 2nd panel will be on top */
	update_panels();

	/* Show it on the screen */
	attron(COLOR_PAIR(4));
	mvprintw(LINES - 3, 0, "Use 'm' for moving, 'r' for resizing");
	mvprintw(LINES - 2, 0, "Use tab to browse through the windows (F1 to Exit)");
	attroff(COLOR_PAIR(4));
	doupdate();

	stack_top = my_panels[2];
	top = (PANEL_DATA *)panel_userptr(stack_top);
	newx = top->x;
	newy = top->y;
	neww = top->w;
	newh = top->h;
	while((ch = getch()) != KEY_F(1))
	{	switch(ch)
		{	case 9:		/* Tab */
				top = (PANEL_DATA *)panel_userptr(stack_top);
				top_panel(top->next);
				stack_top = top->next;
				top = (PANEL_DATA *)panel_userptr(stack_top);
				newx = top->x;
				newy = top->y;
				neww = top->w;
				newh = top->h;
				break;
			case 'r':	/* Re-Size*/
				size = TRUE;
				attron(COLOR_PAIR(4));
				mvprintw(LINES - 4, 0, "Entered Resizing :Use Arrow Keys to resize and press <ENTER> to end resizing");
				refresh();
				attroff(COLOR_PAIR(4));
				break;
			case 'm':	/* Move */
				attron(COLOR_PAIR(4));
				mvprintw(LINES - 4, 0, "Entered Moving: Use Arrow Keys to Move and press <ENTER> to end moving");
				refresh();
				attroff(COLOR_PAIR(4));
				move = TRUE;
				break;
			case KEY_LEFT:
				if(size == TRUE)
				{	--newx;
					++neww;
				}
				if(move == TRUE)
					--newx;
				break;
			case KEY_RIGHT:
				if(size == TRUE)
				{	++newx;
					--neww;
				}
				if(move == TRUE)
					++newx;
				break;
			case KEY_UP:
				if(size == TRUE)
				{	--newy;
					++newh;
				}
				if(move == TRUE)
					--newy;
				break;
			case KEY_DOWN:
				if(size == TRUE)
				{	++newy;
					--newh;
				}
				if(move == TRUE)
					++newy;
				break;
			case 10:	/* Enter */
				move(LINES - 4, 0);
				clrtoeol();
				refresh();
				if(size == TRUE)
				{	old_win = panel_window(stack_top);
					temp_win = newwin(newh, neww, newy, newx);
					replace_panel(stack_top, temp_win);
					win_show(temp_win, top->label, top->label_color); 
					delwin(old_win);
					size = FALSE;
				}
				if(move == TRUE)
				{	move_panel(stack_top, newy, newx);
					move = FALSE;
				}
				break;
			
		}
		attron(COLOR_PAIR(4));
		mvprintw(LINES - 3, 0, "Use 'm' for moving, 'r' for resizing");
	    	mvprintw(LINES - 2, 0, "Use tab to browse through the windows (F1 to Exit)");
	    	attroff(COLOR_PAIR(4));
	        refresh();	
		update_panels();
		doupdate();
	}
	endwin();
	return 0;
}

/* Put all the windows */
void init_wins(WINDOW **wins, int n)
{	int x, y, i;
	char label[80];

	y = 2;
	x = 10;
	for(i = 0; i < n; ++i)
	{	wins[i] = newwin(NLINES, NCOLS, y, x);
		sprintf(label, "Window Number %d", i + 1);
		win_show(wins[i], label, i + 1);
		y += 3;
		x += 7;
	}
}

/* Set the PANEL_DATA structures for individual panels */
void set_user_ptrs(PANEL **panels, int n)
{	PANEL_DATA *ptrs;
	WINDOW *win;
	int x, y, w, h, i;
	char temp[80];
	
	ptrs = (PANEL_DATA *)calloc(n, sizeof(PANEL_DATA));

	for(i = 0;i < n; ++i)
	{	win = panel_window(panels[i]);
		getbegyx(win, y, x);
		getmaxyx(win, h, w);
		ptrs[i].x = x;
		ptrs[i].y = y;
		ptrs[i].w = w;
		ptrs[i].h = h;
		sprintf(temp, "Window Number %d", i + 1);
		strcpy(ptrs[i].label, temp);
		ptrs[i].label_color = i + 1;
		if(i + 1 == n)
			ptrs[i].next = panels[0];
		else
			ptrs[i].next = panels[i + 1];
		set_panel_userptr(panels[i], &ptrs[i]);
	}
}

/* Show the window with a border and a label */
void win_show(WINDOW *win, char *label, int label_color)
{	int startx, starty, height, width;

	getbegyx(win, starty, startx);
	getmaxyx(win, height, width);

	box(win, 0, 0);
	mvwaddch(win, 2, 0, ACS_LTEE); 
	mvwhline(win, 2, 1, ACS_HLINE, width - 2); 
	mvwaddch(win, 2, width - 1, ACS_RTEE); 
	
	print_in_middle(win, 1, 0, width, label, COLOR_PAIR(label_color));
}

void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color)
{	int length, x, y;
	float temp;

	if(win == NULL)
		win = stdscr;
	getyx(win, y, x);
	if(startx != 0)
		x = startx;
	if(starty != 0)
		y = starty;
	if(width == 0)
		width = 80;

	length = strlen(string);
	temp = (width - length)/ 2;
	x = startx + (int)temp;
	wattron(win, color);
	mvwprintw(win, y, x, "%s", string);
	wattroff(win, color);
	refresh();
}

Concentrate on the main while loop. Once it finds out the type of key pressed, it takes appropriate action. If 'r' is pressed resizing mode is started. After this the new sizes are updated as the user presses the arrow keys. When the user presses <ENTER> present selection ends and panel is resized by using the concept explained. While in resizing mode the program doesn't show how the window is getting resized. It's left as an exercise to the reader to print a dotted border while it gets resized to a new position.

When the user presses 'm' the move mode starts. This is a bit simpler than resizing. As the arrow keys are pressed the new position is updated and pressing of <ENTER> causes the panel to be moved by calling the function move_panel().

In this program the user data which is represented as PANEL_DATA, plays very important role in finding the associated information with a panel. As written in the comments, the PANEL_DATA stores the panel sizes, label, label color and a pointer to the next panel in the cycle.


16.6. Hiding and Showing Panels

A Panel can be hidden by using the function hide_panel(). This function merely removes it form the stack of panels, thus hiding it on the screen once you do update_panels() and doupdate(). It doesn't destroy the PANEL structure associated with the hidden panel. It can be shown again by using the show_panel() function.

The following program shows the hiding of panels. Press 'a' or 'b' or 'c' to show or hide first, second and third windows respectively. It uses a user data with a small variable hide, which keeps track of whether the window is hidden or not. For some reason the function panel_hidden() which tells whether a panel is hidden or not is not working. A bug report was also presented by Michael Andres here

Example 17. Panel Hiding and Showing example

#include <panel.h>

typedef struct _PANEL_DATA {
	int hide;	/* TRUE if panel is hidden */
}PANEL_DATA;

#define NLINES 10
#define NCOLS 40

void init_wins(WINDOW **wins, int n);
void win_show(WINDOW *win, char *label, int label_color);
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color);

int main()
{	WINDOW *my_wins[3];
	PANEL  *my_panels[3];
	PANEL_DATA panel_datas[3];
	PANEL_DATA *temp;
	int ch;

	/* Initialize curses */
	initscr();
	start_color();
	cbreak();
	noecho();
	keypad(stdscr, TRUE);

	/* Initialize all the colors */
	init_pair(1, COLOR_RED, COLOR_BLACK);
	init_pair(2, COLOR_GREEN, COLOR_BLACK);
	init_pair(3, COLOR_BLUE, COLOR_BLACK);
	init_pair(4, COLOR_CYAN, COLOR_BLACK);

	init_wins(my_wins, 3);
	
	/* Attach a panel to each window */ 	/* Order is bottom up */
	my_panels[0] = new_panel(my_wins[0]); 	/* Push 0, order: stdscr-0 */
	my_panels[1] = new_panel(my_wins[1]); 	/* Push 1, order: stdscr-0-1 */
	my_panels[2] = new_panel(my_wins[2]); 	/* Push 2, order: stdscr-0-1-2 */

	/* Initialize panel datas saying that nothing is hidden */
	panel_datas[0].hide = FALSE;
	panel_datas[1].hide = FALSE;
	panel_datas[2].hide = FALSE;

	set_panel_userptr(my_panels[0], &panel_datas[0]);
	set_panel_userptr(my_panels[1], &panel_datas[1]);
	set_panel_userptr(my_panels[2], &panel_datas[2]);

	/* Update the stacking order. 2nd panel will be on top */
	update_panels();

	/* Show it on the screen */
	attron(COLOR_PAIR(4));
	mvprintw(LINES - 3, 0, "Show or Hide a window with 'a'(first window)  'b'(Second Window)  'c'(Third Window)");
	mvprintw(LINES - 2, 0, "F1 to Exit");

	attroff(COLOR_PAIR(4));
	doupdate();
	
	while((ch = getch()) != KEY_F(1))
	{	switch(ch)
		{	case 'a':			
				temp = (PANEL_DATA *)panel_userptr(my_panels[0]);
				if(temp->hide == FALSE)
				{	hide_panel(my_panels[0]);
					temp->hide = TRUE;
				}
				else
				{	show_panel(my_panels[0]);
					temp->hide = FALSE;
				}
				break;
			case 'b':
				temp = (PANEL_DATA *)panel_userptr(my_panels[1]);
				if(temp->hide == FALSE)
				{	hide_panel(my_panels[1]);
					temp->hide = TRUE;
				}
				else
				{	show_panel(my_panels[1]);
					temp->hide = FALSE;
				}
				break;
			case 'c':
				temp = (PANEL_DATA *)panel_userptr(my_panels[2]);
				if(temp->hide == FALSE)
				{	hide_panel(my_panels[2]);
					temp->hide = TRUE;
				}
				else
				{	show_panel(my_panels[2]);
					temp->hide = FALSE;
				}
				break;
		}
		update_panels();
		doupdate();
	}
	endwin();
	return 0;
}

/* Put all the windows */
void init_wins(WINDOW **wins, int n)
{	int x, y, i;
	char label[80];

	y = 2;
	x = 10;
	for(i = 0; i < n; ++i)
	{	wins[i] = newwin(NLINES, NCOLS, y, x);
		sprintf(label, "Window Number %d", i + 1);
		win_show(wins[i], label, i + 1);
		y += 3;
		x += 7;
	}
}

/* Show the window with a border and a label */
void win_show(WINDOW *win, char *label, int label_color)
{	int startx, starty, height, width;

	getbegyx(win, starty, startx);
	getmaxyx(win, height, width);

	box(win, 0, 0);
	mvwaddch(win, 2, 0, ACS_LTEE); 
	mvwhline(win, 2, 1, ACS_HLINE, width - 2); 
	mvwaddch(win, 2, width - 1, ACS_RTEE); 
	
	print_in_middle(win, 1, 0, width, label, COLOR_PAIR(label_color));
}

void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color)
{	int length, x, y;
	float temp;

	if(win == NULL)
		win = stdscr;
	getyx(win, y, x);
	if(startx != 0)
		x = startx;
	if(starty != 0)
		y = starty;
	if(width == 0)
		width = 80;

	length = strlen(string);
	temp = (width - length)/ 2;
	x = startx + (int)temp;
	wattron(win, color);
	mvwprintw(win, y, x, "%s", string);
	wattroff(win, color);
	refresh();
}

16.7. panel_above() and panel_below() Functions

The functions panel_above() and panel_below() can be used to find out the panel above and below a panel. If the argument to these functions is NULL, then they return a pointer to bottom panel and top panel respectively.


17. Menus Library

The menus library provides a nice extension to basic curses, through which you can create menus. It provides a set of functions to create menus. But they have to be customized to give a nicer look, with colors etc. Let's get into the details.

A menu is a screen display that assists the user to choose some subset of a given set of items. To put it simple, a menu is a collection of items from which one or more items can be chosen. Some readers might not be aware of multiple item selection capability. Menu library provides functionality to write menus from which the user can chose more than one item as the preferred choice. This is dealt with in a later section. Now it is time for some rudiments.


17.1. The Basics

To create menus, you first create items, and then post the menu to the display. After that, all the processing of user responses is done in an elegant function menu_driver() which is the work horse of any menu program.

The general flow of control of a menu program looks like this.

  1. Initialize curses

  2. Create items using new_item(). You can specify a name and description for the items.

  3. Create the menu with new_menu() by specifying the items to be attached with.

  4. Post the menu with menu_post() and refresh the screen.

  5. Process the user requests with a loop and do necessary updates to menu with menu_driver.

  6. Unpost the menu with menu_unpost()

  7. Free the memory allocated to menu by free_menu()

  8. Free the memory allocated to the items with free_item()

  9. End curses

Let's see a program which prints a simple menu and updates the current selection with up, down arrows.


17.2. Compiling With the Menu Library

To use menu library functions, you have to include menu.h and to link the program with menu library the flag -lmenu should be added along with -lncurses in that order.

    #include <menu.h>
    .
    .
    .

    compile and link: gcc <program file> -lmenu -lncurses

Example 18. Menu Basics

#include <curses.h>
#include <menu.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD 	4

char *choices[] = {
                        "Choice 1",
                        "Choice 2",
                        "Choice 3",
                        "Choice 4",
                        "Exit",
                  };

int main()
{	ITEM **my_items;
	int c;				
	MENU *my_menu;
	int n_choices, i;
	ITEM *cur_item;
	
	
	initscr();
	cbreak();
	noecho();
	keypad(stdscr, TRUE);
	
	n_choices = ARRAY_SIZE(choices);
	my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *));

	for(i = 0; i < n_choices; ++i)
	        my_items[i] = new_item(choices[i], choices[i]);
	my_items[n_choices] = (ITEM *)NULL;

	my_menu = new_menu((ITEM **)my_items);
	mvprintw(LINES - 2, 0, "F1 to Exit");
	post_menu(my_menu);
	refresh();

	while((c = getch()) != KEY_F(1))
	{   switch(c)
	    {	case KEY_DOWN:
		        menu_driver(my_menu, REQ_DOWN_ITEM);
				break;
			case KEY_UP:
				menu_driver(my_menu, REQ_UP_ITEM);
				break;
		}
	}	

	free_item(my_items[0]);
	free_item(my_items[1]);
	free_menu(my_menu);
	endwin();
}
	

This program demonstrates the basic concepts involved in creating a menu using menus library. First we create the items using new_item() and then attach them to the menu with new_menu() function. After posting the menu and refreshing the screen, the main processing loop starts. It reads user input and takes corresponding action. The function menu_driver() is the main work horse of the menu system. The second parameter to this function tells what's to be done with the menu. According to the parameter, menu_driver() does the corresponding task. The value can be either a menu navigational request, an ascii character, or a KEY_MOUSE special key associated with a mouse event.

The menu_driver accepts following navigational requests.


     REQ_LEFT_ITEM         Move left to an item.
     REQ_RIGHT_ITEM      Move right to an item.
     REQ_UP_ITEM         Move up to an item.
     REQ_DOWN_ITEM       Move down to an item.
     REQ_SCR_ULINE       Scroll up a line.
     REQ_SCR_DLINE          Scroll down a line.
     REQ_SCR_DPAGE          Scroll down a page.
     REQ_SCR_UPAGE         Scroll up a page.
     REQ_FIRST_ITEM     Move to the first item.
     REQ_LAST_ITEM         Move to the last item.
     REQ_NEXT_ITEM         Move to the next item.
     REQ_PREV_ITEM         Move to the previous item. 
     REQ_TOGGLE_ITEM     Select/deselect an item.
     REQ_CLEAR_PATTERN     Clear the menu pattern buffer.
     REQ_BACK_PATTERN      Delete the previous character from the pattern buffer.
     REQ_NEXT_MATCH     Move to the next item matching the pattern match.
     REQ_PREV_MATCH     Move to the previous item matching the pattern match.

Don't get overwhelmed by the number of options. We will see them slowly one after another. The options of interest in this example are REQ_UP_ITEM and REQ_DOWN_ITEM. These two options when passed to menu_driver, menu driver updates the current item to one item up or down respectively.


17.3. Menu Driver: The work horse of the menu system

As you have seen in the above example, menu_driver plays an important role in updating the menu. It is very important to understand various options it takes and what they do. As explained above, the second parameter to menu_driver() can be either a navigational request, a printable character or a KEY_MOUSE key. Let's dissect the different navigational requests.

  • REQ_LEFT_ITEM and REQ_RIGHT_ITEM

    A Menu can be displayed with multiple columns for more than one item. This can be done by using the menu_format()function. When a multi columnar menu is displayed these requests cause the menu driver to move the current selection to left or right.

  • REQ_UP_ITEM and REQ_DOWN_ITEM

    These two options you have seen in the above example. These options when given, makes the menu_driver to move the current selection to an item up or down.

  • REQ_SCR_* options

    The four options REQ_SCR_ULINE, REQ_SCR_DLINE, REQ_SCR_DPAGE, REQ_SCR_UPAGE are related to scrolling. If all the items in the menu cannot be displayed in the menu sub window, then the menu is scrollable. These requests can be given to the menu_driver to do the scrolling either one line up, down or one page down or up respectively.

  • REQ_FIRST_ITEM, REQ_LAST_ITEM, REQ_NEXT_ITEM and REQ_PREV_ITEM

    These requests are self explanatory.

  • REQ_TOGGLE_ITEM

    This request when given, toggles the present selection. This option is to be used only in a multi valued menu. So to use this request the option O_ONEVALUE must be off. This option can be made off or on with set_menu_opts().

  • Pattern Requests

    Every menu has an associated pattern buffer, which is used to find the nearest match to the ascii characters entered by the user. Whenever ascii characters are given to menu_driver, it puts in to the pattern buffer. It also tries to find the nearest match to the pattern in the items list and moves current selection to that item. The request REQ_CLEAR_PATTERN clears the pattern buffer. The request REQ_BACK_PATTERN deletes the previous character in the pattern buffer. In case the pattern matches more than one item then the matched items can be cycled through REQ_NEXT_MATCH and REQ_PREV_MATCH which move the current selection to the next and previous matches respectively.

  • Mouse Requests

    In case of KEY_MOUSE requests, according to the mouse position an action is taken accordingly. The action to be taken is explained in the man page as,

           If  the  second argument is the KEY_MOUSE special key, the
           associated mouse event is translated into one of the above
           pre-defined  requests.   Currently only clicks in the user
           window (e.g. inside the menu display area or  the  decora­
           tion  window)  are handled. If you click above the display
           region of the menu, a REQ_SCR_ULINE is generated,  if  you
           doubleclick  a  REQ_SCR_UPAGE  is  generated  and  if  you
           tripleclick a REQ_FIRST_ITEM is generated.  If  you  click
           below  the  display region of the menu, a REQ_SCR_DLINE is
           generated, if you doubleclick a REQ_SCR_DPAGE is generated
           and  if  you  tripleclick a REQ_LAST_ITEM is generated. If
           you click at an item inside the display area of the  menu,
           the menu cursor is positioned to that item.

Each of the above requests will be explained in the following lines with several examples whenever appropriate.


17.4. Menu Windows

Every menu created is associated with a window and a sub window. The menu window displays any title or border associated with the menu. The menu sub window displays the menu items currently available for selection. But we didn't specify any window or sub window in the simple example. When a window is not specified, stdscr is taken as the main window, and then menu system calculates the sub window size required for the display of items. Then items are displayed in the calculated sub window. So let's play with these windows and display a menu with a border and a title.

Example 19. Menu Windows Usage example

#include <menu.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD 	4

char *choices[] = {
                        "Choice 1",
                        "Choice 2",
                        "Choice 3",
                        "Choice 4",
                        "Exit",
                        (char *)NULL,
                  };
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color);

int main()
{	ITEM **my_items;
	int c;				
	MENU *my_menu;
        WINDOW *my_menu_win;
        int n_choices, i;
	
	/* Initialize curses */
	initscr();
	start_color();
        cbreak();
        noecho();
	keypad(stdscr, TRUE);
	init_pair(1, COLOR_RED, COLOR_BLACK);

	/* Create items */
        n_choices = ARRAY_SIZE(choices);
        my_items = (ITEM **)calloc(n_choices, sizeof(ITEM *));
        for(i = 0; i < n_choices; ++i)
                my_items[i] = new_item(choices[i], choices[i]);

	/* Crate menu */
	my_menu = new_menu((ITEM **)my_items);

	/* Create the window to be associated with the menu */
        my_menu_win = newwin(10, 40, 4, 4);
        keypad(my_menu_win, TRUE);
     
	/* Set main window and sub window */
        set_menu_win(my_menu, my_menu_win);
        set_menu_sub(my_menu, derwin(my_menu_win, 6, 38, 3, 1));

	/* Set menu mark to the string " * " */
        set_menu_mark(my_menu, " * ");

	/* Print a border around the main window and print a title */
        box(my_menu_win, 0, 0);
	print_in_middle(my_menu_win, 1, 0, 40, "My Menu", COLOR_PAIR(1));
	mvwaddch(my_menu_win, 2, 0, ACS_LTEE);
	mvwhline(my_menu_win, 2, 1, ACS_HLINE, 38);
	mvwaddch(my_menu_win, 2, 39, ACS_RTEE);
	mvprintw(LINES - 2, 0, "F1 to exit");
	refresh();
        
	/* Post the menu */
	post_menu(my_menu);
	wrefresh(my_menu_win);

	while((c = wgetch(my_menu_win)) != KEY_F(1))
	{       switch(c)
	        {	case KEY_DOWN:
				menu_driver(my_menu, REQ_DOWN_ITEM);
				break;
			case KEY_UP:
				menu_driver(my_menu, REQ_UP_ITEM);
				break;
		}
                wrefresh(my_menu_win);
	}	

	/* Unpost and free all the memory taken up */
        unpost_menu(my_menu);
        free_menu(my_menu);
        for(i = 0; i < n_choices; ++i)
                free_item(my_items[i]);
	endwin();
}

void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color)
{	int length, x, y;
	float temp;

	if(win == NULL)
		win = stdscr;
	getyx(win, y, x);
	if(startx != 0)
		x = startx;
	if(starty != 0)
		y = starty;
	if(width == 0)
		width = 80;

	length = strlen(string);
	temp = (width - length)/ 2;
	x = startx + (int)temp;
	wattron(win, color);
	mvwprintw(win, y, x, "%s", string);
	wattroff(win, color);
	refresh();
}

This example creates a menu with a title, border, a fancy line separating title and the items. As you can see, in order to attach a window to a menu the function set_menu_win() has to be used. Then we attach the sub window also. This displays the items in the sub window. You can also set the mark string which gets displayed to the left of the selected item with set_menu_mark().


17.5. Scrolling Menus

If the sub window given for a window is not big enough to show all the items, then the menu will be scrollable. When you are on the last item in the present list, if you send REQ_DOWN_ITEM, it gets translated into REQ_SCR_DLINE and the menu scrolls by one item. You can manually give REQ_SCR_ operations to do scrolling. Let's see how it can be done.

Example 20. Scrolling Menus example

#include <curses.h>
#include <menu.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD 	4

char *choices[] = {
                        "Choice 1",
                        "Choice 2",
                        "Choice 3",
                        "Choice 4",
			"Choice 5",
			"Choice 6",
			"Choice 7",
			"Choice 8",
			"Choice 9",
			"Choice 10",
                        "Exit",
                        (char *)NULL,
                  };
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color);

int main()
{	ITEM **my_items;
	int c;				
	MENU *my_menu;
        WINDOW *my_menu_win;
        int n_choices, i;
	
	/* Initialize curses */
	initscr();
	start_color();
        cbreak();
        noecho();
	keypad(stdscr, TRUE);
	init_pair(1, COLOR_RED, COLOR_BLACK);
	init_pair(2, COLOR_CYAN, COLOR_BLACK);

	/* Create items */
        n_choices = ARRAY_SIZE(choices);
        my_items = (ITEM **)calloc(n_choices, sizeof(ITEM *));
        for(i = 0; i < n_choices; ++i)
                my_items[i] = new_item(choices[i], choices[i]);

	/* Crate menu */
	my_menu = new_menu((ITEM **)my_items);

	/* Create the window to be associated with the menu */
        my_menu_win = newwin(10, 40, 4, 4);
        keypad(my_menu_win, TRUE);
     
	/* Set main window and sub window */
        set_menu_win(my_menu, my_menu_win);
        set_menu_sub(my_menu, derwin(my_menu_win, 6, 38, 3, 1));
	set_menu_format(my_menu, 5, 1);
			
	/* Set menu mark to the string " * " */
        set_menu_mark(my_menu, " * ");

	/* Print a border around the main window and print a title */
        box(my_menu_win, 0, 0);
	print_in_middle(my_menu_win, 1, 0, 40, "My Menu", COLOR_PAIR(1));
	mvwaddch(my_menu_win, 2, 0, ACS_LTEE);
	mvwhline(my_menu_win, 2, 1, ACS_HLINE, 38);
	mvwaddch(my_menu_win, 2, 39, ACS_RTEE);
        
	/* Post the menu */
	post_menu(my_menu);
	wrefresh(my_menu_win);
	
	attron(COLOR_PAIR(2));
	mvprintw(LINES - 2, 0, "Use PageUp and PageDown to scoll down or up a page of items");
	mvprintw(LINES - 1, 0, "Arrow Keys to navigate (F1 to Exit)");
	attroff(COLOR_PAIR(2));
	refresh();

	while((c = wgetch(my_menu_win)) != KEY_F(1))
	{       switch(c)
	        {	case KEY_DOWN:
				menu_driver(my_menu, REQ_DOWN_ITEM);
				break;
			case KEY_UP:
				menu_driver(my_menu, REQ_UP_ITEM);
				break;
			case KEY_NPAGE:
				menu_driver(my_menu, REQ_SCR_DPAGE);
				break;
			case KEY_PPAGE:
				menu_driver(my_menu, REQ_SCR_UPAGE);
				break;
		}
                wrefresh(my_menu_win);
	}	

	/* Unpost and free all the memory taken up */
        unpost_menu(my_menu);
        free_menu(my_menu);
        for(i = 0; i < n_choices; ++i)
                free_item(my_items[i]);
	endwin();
}

void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color)
{	int length, x, y;
	float temp;

	if(win == NULL)
		win = stdscr;
	getyx(win, y, x);
	if(startx != 0)
		x = startx;
	if(starty != 0)
		y = starty;
	if(width == 0)
		width = 80;

	length = strlen(string);
	temp = (width - length)/ 2;
	x = startx + (int)temp;
	wattron(win, color);
	mvwprintw(win, y, x, "%s", string);
	wattroff(win, color);
	refresh();
}

This program is self-explanatory. In this example the number of choices has been increased to ten, which is larger than our sub window size which can hold 6 items. This message has to be explicitly conveyed to the menu system with the function set_menu_format(). In here we specify the number of rows and columns we want to be displayed for a single page. We can specify any number of items to be shown, in the rows variables, if it is less than the height of the sub window. If the key pressed by the user is a PAGE UP or PAGE DOWN, the menu is scrolled a page due to the requests (REQ_SCR_DPAGE and REQ_SCR_UPAGE) given to menu_driver().


17.6. Multi Columnar Menus

In the above example you have seen how to use the function set_menu_format(). I didn't mention what the cols variable (third parameter) does. Well, If your sub window is wide enough, you can opt to display more than one item per row. This can be specified in the cols variable. To make things simpler, the following example doesn't show descriptions for the items.

Example 21. Milt Columnar Menus Example

#include <curses.h>
#include <menu.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD 	4

char *choices[] = {
                        "Choice 1", "Choice 2", "Choice 3", "Choice 4", "Choice 5",
			"Choice 6", "Choice 7", "Choice 8", "Choice 9", "Choice 10",
			"Choice 11", "Choice 12", "Choice 13", "Choice 14", "Choice 15",
			"Choice 16", "Choice 17", "Choice 18", "Choice 19", "Choice 20",
                        "Exit",
                        (char *)NULL,
                  };

int main()
{	ITEM **my_items;
	int c;				
	MENU *my_menu;
        WINDOW *my_menu_win;
        int n_choices, i;
	
	/* Initialize curses */
	initscr();
	start_color();
        cbreak();
        noecho();
	keypad(stdscr, TRUE);
	init_pair(1, COLOR_RED, COLOR_BLACK);
	init_pair(2, COLOR_CYAN, COLOR_BLACK);

	/* Create items */
        n_choices = ARRAY_SIZE(choices);
        my_items = (ITEM **)calloc(n_choices, sizeof(ITEM *));
        for(i = 0; i < n_choices; ++i)
                my_items[i] = new_item(choices[i], choices[i]);

	/* Crate menu */
	my_menu = new_menu((ITEM **)my_items);

	/* Set menu option not to show the description */
	menu_opts_off(my_menu, O_SHOWDESC);

	/* Create the window to be associated with the menu */
        my_menu_win = newwin(10, 70, 4, 4);
        keypad(my_menu_win, TRUE);
     
	/* Set main window and sub window */
        set_menu_win(my_menu, my_menu_win);
        set_menu_sub(my_menu, derwin(my_menu_win, 6, 68, 3, 1));
	set_menu_format(my_menu, 5, 3);
	set_menu_mark(my_menu, " * ");

	/* Print a border around the main window and print a title */
        box(my_menu_win, 0, 0);
	
	attron(COLOR_PAIR(2));
	mvprintw(LINES - 3, 0, "Use PageUp and PageDown to scroll");
	mvprintw(LINES - 2, 0, "Use Arrow Keys to navigate (F1 to Exit)");
	attroff(COLOR_PAIR(2));
	refresh();

	/* Post the menu */
	post_menu(my_menu);
	wrefresh(my_menu_win);
	
	while((c = wgetch(my_menu_win)) != KEY_F(1))
	{       switch(c)
	        {	case KEY_DOWN:
				menu_driver(my_menu, REQ_DOWN_ITEM);
				break;
			case KEY_UP:
				menu_driver(my_menu, REQ_UP_ITEM);
				break;
			case KEY_LEFT:
				menu_driver(my_menu, REQ_LEFT_ITEM);
				break;
			case KEY_RIGHT:
				menu_driver(my_menu, REQ_RIGHT_ITEM);
				break;
			case KEY_NPAGE:
				menu_driver(my_menu, REQ_SCR_DPAGE);
				break;
			case KEY_PPAGE:
				menu_driver(my_menu, REQ_SCR_UPAGE);
				break;
		}
                wrefresh(my_menu_win);
	}	

	/* Unpost and free all the memory taken up */
        unpost_menu(my_menu);
        free_menu(my_menu);
        for(i = 0; i < n_choices; ++i)
                free_item(my_items[i]);
	endwin();
}

Watch the function call to set_menu_format(). It specifies the number of columns to be 3, thus displaying 3 items per row. We have also switched off the showing descriptions with the function menu_opts_off(). There are couple of functions set_menu_opts(), menu_opts_on() and menu_opts() which can be used to manipulate menu options. The following menu options can be specified.

       O_ONEVALUE
            Only one item can be selected for this menu.

       O_SHOWDESC
            Display  the  item  descriptions  when  the  menu  is
            posted.

       O_ROWMAJOR
            Display the menu in row-major order.

       O_IGNORECASE
            Ignore the case when pattern-matching.

       O_SHOWMATCH
            Move the cursor to within the item  name  while  pat­
            tern-matching.

       O_NONCYCLIC
            Don't   wrap   around  next-item  and  previous-item,
            requests to the other end of the menu.

All options are on by default. You can switch specific attributes on or off with menu_opts_on() and menu_opts_off() functions. You can also use set_menu_opts() to directly specify the options. The argument to this function should be a OR ed value of some of those above constants. The function menu_opts() can be used to find out a menu's present options.


17.7. Multi Valued Menus

You might be wondering what if you switch off the option O_ONEVALUE. Then the menu becomes multi-valued. That means you can select more than one item. This brings us to the request REQ_TOGGLE_ITEM. Let's see it in action.

Example 22. Multi Valued Menus example

#include <curses.h>
#include <menu.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD 	4

char *choices[] = {
                        "Choice 1",
                        "Choice 2",
                        "Choice 3",
                        "Choice 4",
			"Choice 5",
			"Choice 6",
			"Choice 7",
                        "Exit",
                  };

int main()
{	ITEM **my_items;
	int c;				
	MENU *my_menu;
        int n_choices, i;
	ITEM *cur_item;
	
	/* Initialize curses */	
	initscr();
        cbreak();
        noecho();
	keypad(stdscr, TRUE);

	/* Initialize items */
        n_choices = ARRAY_SIZE(choices);
        my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *));
        for(i = 0; i < n_choices; ++i)
                my_items[i] = new_item(choices[i], choices[i]);
	my_items[n_choices] = (ITEM *)NULL;

	my_menu = new_menu((ITEM **)my_items);

	/* Make the menu multi valued */
	menu_opts_off(my_menu, O_ONEVALUE);

	mvprintw(LINES - 3, 0, "Use <SPACE> to select or unselect an item.");
	mvprintw(LINES - 2, 0, "<ENTER> to see presently selected items(F1 to Exit)");
	post_menu(my_menu);
	refresh();

	while((c = getch()) != KEY_F(1))
	{       switch(c)
	        {	case KEY_DOWN:
				menu_driver(my_menu, REQ_DOWN_ITEM);
				break;
			case KEY_UP:
				menu_driver(my_menu, REQ_UP_ITEM);
				break;
			case ' ':
				menu_driver(my_menu, REQ_TOGGLE_ITEM);
				break;
			case 10:	/* Enter */
			{	char temp[200];
				ITEM **items;

				items = menu_items(my_menu);
				temp[0] = '\0';
				for(i = 0; i < item_count(my_menu); ++i)
					if(item_value(items[i]) == TRUE)
					{	strcat(temp, item_name(items[i]));
						strcat(temp, " ");
					}
				move(20, 0);
				clrtoeol();
				mvprintw(20, 0, temp);
				refresh();
			}
			break;
		}
	}	

	free_item(my_items[0]);
        free_item(my_items[1]);
	free_menu(my_menu);
	endwin();
}
	

Whew, A lot of new functions. Let's take them one after another. Firstly, the REQ_TOGGLE_ITEM. In a multi-valued menu, the user should be allowed to select or un select more than one item. The request REQ_TOGGLE_ITEM toggles the present selection. In this case when space is pressed REQ_TOGGLE_ITEM request is sent to menu_driver to achieve the result.

Now when the user presses <ENTER> we show the items he presently selected. First we find out the items associated with the menu using the function menu_items(). Then we loop through the items to find out if the item is selected or not. The function item_value() returns TRUE if an item is selected. The function item_count() returns the number of items in the menu. The item name can be found with item_name(). You can also find the description associated with an item using item_description().


17.8. Menu Options

Well, by this time you must be itching for some difference in your menu, with lots of functionality. I know. You want Colors !!!. You want to create nice menus similar to those text mode dos games. The functions set_menu_fore() and set_menu_back() can be used to change the attribute of the selected item and unselected item. The names are misleading. They don't change menu's foreground or background which would have been useless.

The function set_menu_grey() can be used to set the display attribute for the non-selectable items in the menu. This brings us to the interesting option for an item the one and only O_SELECTABLE. We can turn it off by the function item_opts_off() and after that that item is not selectable. It's like a grayed item in those fancy windows menus. Let's put these concepts in practice with this example

Example 23. Menu Options example

#include <menu.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD 	4

char *choices[] = {
                        "Choice 1",
                        "Choice 2",
                        "Choice 3",
                        "Choice 4",
			"Choice 5",
			"Choice 6",
			"Choice 7",
                        "Exit",
                  };

int main()
{	ITEM **my_items;
	int c;				
	MENU *my_menu;
        int n_choices, i;
	ITEM *cur_item;
	
	/* Initialize curses */	
	initscr();
	start_color();
        cbreak();
        noecho();
	keypad(stdscr, TRUE);
	init_pair(1, COLOR_RED, COLOR_BLACK);
	init_pair(2, COLOR_GREEN, COLOR_BLACK);
	init_pair(3, COLOR_MAGENTA, COLOR_BLACK);

	/* Initialize items */
        n_choices = ARRAY_SIZE(choices);
        my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *));
        for(i = 0; i < n_choices; ++i)
                my_items[i] = new_item(choices[i], choices[i]);
	my_items[n_choices] = (ITEM *)NULL;
	item_opts_off(my_items[3], O_SELECTABLE);
	item_opts_off(my_items[6], O_SELECTABLE);

	/* Create menu */
	my_menu = new_menu((ITEM **)my_items);

	/* Set fore ground and back ground of the menu */
	set_menu_fore(my_menu, COLOR_PAIR(1) | A_REVERSE);
	set_menu_back(my_menu, COLOR_PAIR(2));
	set_menu_grey(my_menu, COLOR_PAIR(3));

	/* Post the menu */
	mvprintw(LINES - 3, 0, "Press <ENTER> to see the option selected");
	mvprintw(LINES - 2, 0, "Up and Down arrow keys to naviage (F1 to Exit)");
	post_menu(my_menu);
	refresh();

	while((c = getch()) != KEY_F(1))
	{       switch(c)
	        {	case KEY_DOWN:
				menu_driver(my_menu, REQ_DOWN_ITEM);
				break;
			case KEY_UP:
				menu_driver(my_menu, REQ_UP_ITEM);
				break;
			case 10: /* Enter */
				move(20, 0);
				clrtoeol();
				mvprintw(20, 0, "Item selected is : %s", 
						item_name(current_item(my_menu)));
				pos_menu_cursor(my_menu);
				break;
		}
	}	
	unpost_menu(my_menu);
	for(i = 0; i < n_choices; ++i)
		free_item(my_items[i]);
	free_menu(my_menu);
	endwin();
}
	

17.9. The useful User Pointer

We can associate a user pointer with each item in the menu. It works the same way as user pointer in panels. It's not touched by menu system. You can store any thing you like in that. I usually use it to store the function to be executed when the menu option is chosen (It's selected and may be the user pressed <ENTER>);

Example 24. Menu User Pointer Usage

#include <curses.h>
#include <menu.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD 	4

char *choices[] = {
                        "Choice 1",
                        "Choice 2",
                        "Choice 3",
                        "Choice 4",
			"Choice 5",
			"Choice 6",
			"Choice 7",
                        "Exit",
                  };
void func(char *name);

int main()
{	ITEM **my_items;
	int c;				
	MENU *my_menu;
        int n_choices, i;
	ITEM *cur_item;
	
	/* Initialize curses */	
	initscr();
	start_color();
        cbreak();
        noecho();
	keypad(stdscr, TRUE);
	init_pair(1, COLOR_RED, COLOR_BLACK);
	init_pair(2, COLOR_GREEN, COLOR_BLACK);
	init_pair(3, COLOR_MAGENTA, COLOR_BLACK);

	/* Initialize items */
        n_choices = ARRAY_SIZE(choices);
        my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *));
        for(i = 0; i < n_choices; ++i)
	{       my_items[i] = new_item(choices[i], choices[i]);
		/* Set the user pointer */
		set_item_userptr(my_items[i], func);
	}
	my_items[n_choices] = (ITEM *)NULL;

	/* Create menu */
	my_menu = new_menu((ITEM **)my_items);

	/* Post the menu */
	mvprintw(LINES - 3, 0, "Press <ENTER> to see the option selected");
	mvprintw(LINES - 2, 0, "Up and Down arrow keys to naviage (F1 to Exit)");
	post_menu(my_menu);
	refresh();

	while((c = getch()) != KEY_F(1))
	{       switch(c)
	        {	case KEY_DOWN:
				menu_driver(my_menu, REQ_DOWN_ITEM);
				break;
			case KEY_UP:
				menu_driver(my_menu, REQ_UP_ITEM);
				break;
			case 10: /* Enter */
			{	ITEM *cur;
				void (*p)(char *);

				cur = current_item(my_menu);
				p = item_userptr(cur);
				p((char *)item_name(cur));
				pos_menu_cursor(my_menu);
				break;
			}
			break;
		}
	}	
	unpost_menu(my_menu);
	for(i = 0; i < n_choices; ++i)
		free_item(my_items[i]);
	free_menu(my_menu);
	endwin();
}

void func(char *name)
{	move(20, 0);
	clrtoeol();
	mvprintw(20, 0, "Item selected is : %s", name);
}	

18. Forms Library

Well. If you have seen those forms on web pages which take input from users and do various kinds of things, you might be wondering how would any one create such forms in text mode display. It's quite difficult to write those nifty forms in plain ncurses. Forms library tries to provide a basic frame work to build and maintain forms with ease. It has lot of features(functions) which manage validation, dynamic expansion of fields etc.. Let's see it in full flow.

A form is a collection of fields; each field can be either a label(static text) or a data-entry location. The forms also library provides functions to divide forms into multiple pages.


18.1. The Basics

Forms are created in much the same way as menus. First the fields related to the form are created with new_field(). You can set options for the fields, so that they can be displayed with some fancy attributes, validated before the field looses focus etc.. Then the fields are attached to form. After this, the form can be posted to display and is ready to receive inputs. On the similar lines to menu_driver(), the form is manipulated with form_driver(). We can send requests to form_driver to move focus to a certain field, move cursor to end of the field etc.. After the user enters values in the fields and validation done, form can be unposted and memory allocated can be freed.

The general flow of control of a forms program looks like this.

  1. Initialize curses

  2. Create fields using new_field(). You can specify the height and width of the field, and its position on the form.

  3. Create the forms with new_form() by specifying the fields to be attached with.

  4. Post the form with form_post() and refresh the screen.

  5. Process the user requests with a loop and do necessary updates to form with form_driver.

  6. Unpost the menu with form_unpost()

  7. Free the memory allocated to menu by free_form()

  8. Free the memory allocated to the items with free_field()

  9. End curses

As you can see, working with forms library is much similar to handling menu library. The following examples will explore various aspects of form processing. Let's start the journey with a simple example. first.


18.2. Compiling With the Forms Library

To use forms library functions, you have to include form.h and to link the program with forms library the flag -lform should be added along with -lncurses in that order.

    #include <form.h>
    .
    .
    .

    compile and link: gcc <program file> -lform -lncurses

Example 25. Forms Basics

#include <form.h>

int main()
{	FIELD *field[3];
	FORM  *my_form;
	int ch;
	
	/* Initialize curses */
	initscr();
	cbreak();
	noecho();
	keypad(stdscr, TRUE);

	/* Initialize the fields */
	field[0] = new_field(1, 10, 4, 18, 0, 0);
	field[1] = new_field(1, 10, 6, 18, 0, 0);
	field[2] = NULL;

	/* Set field options */
	set_field_back(field[0], A_UNDERLINE); 	/* Print a line for the option 	*/
	field_opts_off(field[0], O_AUTOSKIP);  	/* Don't go to next field when this */
						/* Field is filled up 		*/
	set_field_back(field[1], A_UNDERLINE); 
	field_opts_off(field[1], O_AUTOSKIP);

	/* Create the form and post it */
	my_form = new_form(field);
	post_form(my_form);
	refresh();
	
	mvprintw(4, 10, "Value 1:");
	mvprintw(6, 10, "Value 2:");
	refresh();

	/* Loop through to get user requests */
	while((ch = getch()) != KEY_F(1))
	{	switch(ch)
		{	case KEY_DOWN:
				/* Go to next field */
				form_driver(my_form, REQ_NEXT_FIELD);
				/* Go to the end of the present buffer */
				/* Leaves nicely at the last character */
				form_driver(my_form, REQ_END_LINE);
				break;
			case KEY_UP:
				/* Go to previous field */
				form_driver(my_form, REQ_PREV_FIELD);
				form_driver(my_form, REQ_END_LINE);
				break;
			default:
				/* If this is a normal character, it gets */
				/* Printed				  */	
				form_driver(my_form, ch);
				break;
		}
	}

	/* Un post form and free the memory */
	unpost_form(my_form);
	free_form(my_form);
	free_field(field[0]);
	free_field(field[1]); 

	endwin();
	return 0;
}

Above example is pretty straight forward. It creates two fields with new_field(). new_field() takes height, width, starty, startx, number of offscreen rows and number of additional working buffers. The fifth argument number of offscreen rows specifies how much of the field to be shown. If it is zero, the entire field is always displayed otherwise the form will be scrollable when the user accesses not displayed parts of the field. The forms library allocates one buffer per field to store the data user enters. Using the last parameter to new_field() we can specify it to allocate some additional buffers. These can be used for any purpose you like.

After creating the fields, back ground attribute of both of them is set to an underscore with set_field_back(). The AUTOSKIP option is turned off using field_opts_off(). If this option is turned on, focus will move to the next field in the form once the active field is filled up completely.

After attaching the fields to the form, it is posted. Here on, user inputs are processed in the while loop, by making corresponding requests to form_driver. The details of all the requests to the form_driver() are explained later.


18.3. Playing with Fields

Each form field is associated with a lot of attributes. They can be manipulated to get the required effect and to have fun !!!. So why wait?


18.3.1. Fetching Size and Location of Field

The parameters we have given at the time of creation of a field can be retrieved with field_info(). It returns height, width, starty, startx, number of offscreen rows, and number of additional buffers into the parameters given to it. It is a sort of inverse of new_field().

int field_info(     FIELD *field,              /* field from which to fetch */
                    int *height, *int width,   /* field size */ 
                    int *top, int *left,       /* upper left corner */
                    int *offscreen,            /* number of offscreen rows */
                    int *nbuf);                /* number of working buffers */

18.3.2. Moving the field

The location of the field can be moved to a different position with move_field().

int move_field(    FIELD *field,              /* field to alter */
                   int top, int left);        /* new upper-left corner */

As usual, the changed position can be queried with field_infor().


18.3.3. Field Justification

The justification to be done for the field can be fixed using the function set_field_just().

    int set_field_just(FIELD *field,          /* field to alter */
               int justmode);         /* mode to set */
    int field_just(FIELD *field);          /* fetch justify mode of field */

The justification mode valued accepted and returned by these functions are NO_JUSTIFICATION, JUSTIFY_RIGHT, JUSTIFY_LEFT, or JUSTIFY_CENTER.


18.3.4. Field Display Attributes

As you have seen, in the above example, display attribute for the fields can be set with set_field_fore() and setfield_back(). These functions set foreground and background attribute of the fields. You can also specify a pad character which will be filled in the unfilled portion of the field. The pad character is set with a call to set_field_pad(). Default pad value is a space. The functions field_fore(), field_back, field_pad() can be used to query the present foreground, background attributes and pad character for the field. The following list gives the usage of functions.


int set_field_fore(FIELD *field,        /* field to alter */
                   chtype attr);        /* attribute to set */ 

chtype field_fore(FIELD *field);        /* field to query */
                                        /* returns foreground attribute */

int set_field_back(FIELD *field,        /* field to alter */
                   chtype attr);        /* attribute to set */ 

chtype field_back(FIELD *field);        /* field to query */
                                        /* returns background attribute */

int set_field_pad(FIELD *field,         /* field to alter */
                  int pad);             /* pad character to set */ 

chtype field_pad(FIELD *field);         /* field to query */  
                                        /* returns present pad character */

Though above functions seem quite simple, using colors with set_field_fore() may be frustrating in the beginning. Let me first explain about foreground and background attributes of a field. The foreground attribute is associated with the character. That means a character in the field is printed with the attribute you have set with set_field_fore(). Background attribute is the attribute used to fill background of field, whether any character is there or not. So what about colors? Since colors are always defined in pairs, what is the right way to display colored fields? Here's an example clarifying color attributes.

Example 26. Form Attributes example

#include <form.h>

int main()
{	FIELD *field[3];
	FORM  *my_form;
	int ch;
	
	/* Initialize curses */
	initscr();
	start_color();
	cbreak();
	noecho();
	keypad(stdscr, TRUE);

	/* Initialize few color pairs */
	init_pair(1, COLOR_WHITE, COLOR_BLUE);
	init_pair(2, COLOR_WHITE, COLOR_BLUE);

	/* Initialize the fields */
	field[0] = new_field(1, 10, 4, 18, 0, 0);
	field[1] = new_field(1, 10, 6, 18, 0, 0);
	field[2] = NULL;

	/* Set field options */
	set_field_fore(field[0], COLOR_PAIR(1));/* Put the field with blue background */
	set_field_back(field[0], COLOR_PAIR(2));/* and white foreground (characters */
						/* are printed in white 	*/
	field_opts_off(field[0], O_AUTOSKIP);  	/* Don't go to next field when this */
						/* Field is filled up 		*/
	set_field_back(field[1], A_UNDERLINE); 
	field_opts_off(field[1], O_AUTOSKIP);

	/* Create the form and post it */
	my_form = new_form(field);
	post_form(my_form);
	refresh();
	
	set_current_field(my_form, field[0]); /* Set focus to the colored field */
	mvprintw(4, 10, "Value 1:");
	mvprintw(6, 10, "Value 2:");
	mvprintw(LINES - 2, 0, "Use UP, DOWN arrow keys to switch between fields");
	refresh();

	/* Loop through to get user requests */
	while((ch = getch()) != KEY_F(1))
	{	switch(ch)
		{	case KEY_DOWN:
				/* Go to next field */
				form_driver(my_form, REQ_NEXT_FIELD);
				/* Go to the end of the present buffer */
				/* Leaves nicely at the last character */
				form_driver(my_form, REQ_END_LINE);
				break;
			case KEY_UP:
				/* Go to previous field */
				form_driver(my_form, REQ_PREV_FIELD);
				form_driver(my_form, REQ_END_LINE);
				break;
			default:
				/* If this is a normal character, it gets */
				/* Printed				  */	
				form_driver(my_form, ch);
				break;
		}
	}

	/* Un post form and free the memory */
	unpost_form(my_form);
	free_form(my_form);
	free_field(field[0]);
	free_field(field[1]); 

	endwin();
	return 0;
}

Play with the color pairs and try to understand the foreground and background attributes. In my programs using color attributes, I usually set only the background with set_field_back(). Curses simply doesn't allow defining individual color attributes.


18.3.5. Field Option Bits

There is also a large collection of field option bits you can set to control various aspects of forms processing. You can manipulate them with these functions:

int set_field_opts(FIELD *field,          /* field to alter */
                   int attr);             /* attribute to set */ 

int field_opts_on(FIELD *field,           /* field to alter */
                  int attr);              /* attributes to turn on */ 

int field_opts_off(FIELD *field,          /* field to alter */
                  int attr);              /* attributes to turn off */ 

int field_opts(FIELD *field);             /* field to query */ 

The function set_field_opts() can be used to directly set attributes of a field or you can choose to switch a few attributes on and off with field_opts_on() and field_opts_off() selectively. Anytime you can query the attributes of a field with field_opts(). The following is the list of available options. By default, all options are on.

O_VISIBLE

Controls whether the field is visible on the screen. Can be used during form processing to hide or pop up fields depending on the value of parent fields.

O_ACTIVE

Controls whether the field is active during forms processing (i.e. visited by form navigation keys). Can be used to make labels or derived fields with buffer values alterable by the forms application, not the user.

O_PUBLIC

Controls whether data is displayed during field entry. If this option is turned off on a field, the library will accept and edit data in that field, but it will not be displayed and the visible field cursor will not move. You can turn off the O_PUBLIC bit to define password fields.

O_EDIT

Controls whether the field's data can be modified. When this option is off, all editing requests except REQ_PREV_CHOICE and REQ_NEXT_CHOICEwill fail. Such read-only fields may be useful for help messages.

O_WRAP

Controls word-wrapping in multi-line fields. Normally, when any character of a (blank-separated) word reaches the end of the current line, the entire word is wrapped to the next line (assuming there is one). When this option is off, the word will be split across the line break.

O_BLANK

Controls field blanking. When this option is on, entering a character at the first field position erases the entire field (except for the just-entered character).

O_AUTOSKIP

Controls automatic skip to next field when this one fills. Normally, when the forms user tries to type more data into a field than will fit, the editing location jumps to next field. When this option is off, the user's cursor will hang at the end of the field. This option is ignored in dynamic fields that have not reached their size limit.

O_NULLOK

Controls whether validation is applied to blank fields. Normally, it is not; the user can leave a field blank without invoking the usual validation check on exit. If this option is off on a field, exit from it will invoke a validation check.

O_PASSOK

Controls whether validation occurs on every exit, or only after the field is modified. Normally the latter is true. Setting O_PASSOK may be useful if your field's validation function may change during forms processing.

O_STATIC

Controls whether the field is fixed to its initial dimensions. If you turn this off, the field becomes dynamic and will stretch to fit entered data.

A field's options cannot be changed while the field is currently selected. However, options may be changed on posted fields that are not current.

The option values are bit-masks and can be composed with logical-or in the obvious way. You have seen the usage of switching off O_AUTOSKIP option. The following example clarifies usage of some more options. Other options are explained where appropriate.

Example 27. Field Options Usage example

#include <form.h>

#define STARTX 15
#define STARTY 4
#define WIDTH 25

#define N_FIELDS 3

int main()
{	FIELD *field[N_FIELDS];
	FORM  *my_form;
	int ch, i;
	
	/* Initialize curses */
	initscr();
	cbreak();
	noecho();
	keypad(stdscr, TRUE);

	/* Initialize the fields */
	for(i = 0; i < N_FIELDS - 1; ++i)
		field[i] = new_field(1, WIDTH, STARTY + i * 2, STARTX, 0, 0);
	field[N_FIELDS - 1] = NULL;

	/* Set field options */
	set_field_back(field[1], A_UNDERLINE); 	/* Print a line for the option 	*/
	
	field_opts_off(field[0], O_ACTIVE); /* This field is a static label */
	field_opts_off(field[1], O_PUBLIC); /* This filed is like a password field*/
	field_opts_off(field[1], O_AUTOSKIP); /* To avoid entering the same field */
					      /* after last character is entered */
	
	/* Create the form and post it */
	my_form = new_form(field);
	post_form(my_form);
	refresh();
	
	set_field_just(field[0], JUSTIFY_CENTER); /* Center Justification */
	set_field_buffer(field[0], 0, "This is a static Field"); 
						  /* Initialize the field  */
	mvprintw(STARTY, STARTX - 10, "Field 1:");
	mvprintw(STARTY + 2, STARTX - 10, "Field 2:");
	refresh();

	/* Loop through to get user requests */
	while((ch = getch()) != KEY_F(1))
	{	switch(ch)
		{	case KEY_DOWN:
				/* Go to next field */
				form_driver(my_form, REQ_NEXT_FIELD);
				/* Go to the end of the present buffer */
				/* Leaves nicely at the last character */
				form_driver(my_form, REQ_END_LINE);
				break;
			case KEY_UP:
				/* Go to previous field */
				form_driver(my_form, REQ_PREV_FIELD);
				form_driver(my_form, REQ_END_LINE);
				break;
			default:
				/* If this is a normal character, it gets */
				/* Printed				  */	
				form_driver(my_form, ch);
				break;
		}
	}

	/* Un post form and free the memory */
	unpost_form(my_form);
	free_form(my_form);
	free_field(field[0]);
	free_field(field[1]); 

	endwin();
	return 0;
}

This example, though useless, shows the usage of options. If used properly, they can present information very effectively in a form. The second field being not O_PUBLIC, does not show the characters you are typing.


18.3.6. Field Status

The field status specifies whether the field has got edited or not. It is initially set to FALSE and when user enters something and the data buffer gets modified it becomes TRUE. So a field's status can be queried to find out whether it has been modified or not. The following functions can assist in those operations.

int set_field_status(FIELD *field,      /* field to alter */
                   int status);         /* status to set */

int field_status(FIELD *field);         /* fetch status of field */

It's better to check the field's status only after after leaving the field, as data buffer might not have been updated yet as the validation is still due. To guarantee that right status is returned, call field_status() either (1) in the field's exit validation check routine, (2) from the field's or form's initialization or termination hooks, or (3) just after a REQ_VALIDATION request has been processed by the forms driver


18.3.7. Field User Pointer

Every field structure contains one pointer that can be used by the user for various purposes. It is not touched by forms library and can be used for any purpose by the user. The following functions set and fetch user pointer.

int set_field_userptr(FIELD *field,   
           char *userptr);      /* the user pointer you wish to associate */
                                /* with the field    */

char *field_userptr(FIELD *field);      /* fetch user pointer of the field */

18.3.8. Variable-Sized Fields

If you want a dynamically changing field with variable width, this is the feature you want to put to full use. This will allow the user to enter more data than the original size of the field and let the field grow. According to the field orientation it will scroll horizontally or vertically to incorporate the new data.

To make a field dynamically growable, the option O_STATIC should be turned off. This can be done with a

    field_opts_off(field_pointer, O_STATIC);

But it's usually not advisable to allow a field to grow infinitely. You can set a maximum limit to the growth of the field with

int set_max_field(FIELD *field,    /* Field on which to operate */
                  int max_growth); /* maximum growth allowed for the field */

The field info for a dynamically growable field can be retrieved by

int dynamic_field_info( FIELD *field,     /* Field on which to operate */
            int   *prows,     /* number of rows will be filled in this */
            int   *pcols,     /* number of columns will be filled in this*/
            int   *pmax)      /* maximum allowable growth will be filled */
                              /* in this */
Though field_info work as usual, it is advisable to use this function to get the proper attributes of a dynamically growable field.

Recall the library routine new_field; a new field created with height set to one will be defined to be a one line field. A new field created with height greater than one will be defined to be a multi line field.

A one line field with O_STATIC turned off (dynamically growable field) will contain a single fixed row, but the number of columns can increase if the user enters more data than the initial field will hold. The number of columns displayed will remain fixed and the additional data will scroll horizontally.

A multi line field with O_STATIC turned off (dynamically growable field) will contain a fixed number of columns, but the number of rows can increase if the user enters more data than the initial field will hold. The number of rows displayed will remain fixed and the additional data will scroll vertically.

The above two paragraphs pretty much describe a dynamically growable field's behavior. The way other parts of forms library behaves is described below:

  1. The field option O_AUTOSKIP will be ignored if the option O_STATIC is off and there is no maximum growth specified for the field. Currently, O_AUTOSKIP generates an automatic REQ_NEXT_FIELD form driver request when the user types in the last character position of a field. On a growable field with no maximum growth specified, there is no last character position. If a maximum growth is specified, the O_AUTOSKIP option will work as normal if the field has grown to its maximum size.

  2. The field justification will be ignored if the option O_STATIC is off. Currently, set_field_just can be used to JUSTIFY_LEFT, JUSTIFY_RIGHT, JUSTIFY_CENTER the contents of a one line field. A growable one line field will, by definition, grow and scroll horizontally and may contain more data than can be justified. The return from field_just will be unchanged.

  3. The overloaded form driver request REQ_NEW_LINE will operate the same way regardless of the O_NL_OVERLOAD form option if the field option O_STATIC is off and there is no maximum growth specified for the field. Currently, if the form option O_NL_OVERLOAD is on, REQ_NEW_LINE implicitly generates a REQ_NEXT_FIELD if called from the last line of a field. If a field can grow without bound, there is no last line, so REQ_NEW_LINE will never implicitly generate a REQ_NEXT_FIELD. If a maximum growth limit is specified and the O_NL_OVERLOAD form option is on, REQ_NEW_LINE will only implicitly generate REQ_NEXT_FIELD if the field has grown to its maximum size and the user is on the last line.

  4. The library call dup_field will work as usual; it will duplicate the field, including the current buffer size and contents of the field being duplicated. Any specified maximum growth will also be duplicated.

  5. The library call link_field will work as usual; it will duplicate all field attributes and share buffers with the field being linked. If the O_STATIC field option is subsequently changed by a field sharing buffers, how the system reacts to an attempt to enter more data into the field than the buffer will currently hold will depend on the setting of the option in the current field.

  6. The library call field_info will work as usual; the variable nrow will contain the value of the original call to new_field. The user should use dynamic_field_info, described above, to query the current size of the buffer.

Some of the above points make sense only after explaining form driver. We will be looking into that in next few sections.


18.4. Form Windows

The form windows concept is pretty much similar to menu windows. Every form is associated with a main window and a sub window. The form main window displays any title or border associated or whatever the user wishes. Then the sub window contains all the fields and displays them according to their position. This gives the flexibility of manipulating fancy form displaying very easily.

Since this is pretty much similar to menu windows, I am providing an example with out much explanation. The functions are similar and they work the same way.

Example 28. Form Windows Example

#include <form.h>

void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color);

int main()
{
	FIELD *field[3];
	FORM  *my_form;
	WINDOW *my_form_win;
	int ch, rows, cols;
	
	/* Initialize curses */
	initscr();
	start_color();
	cbreak();
	noecho();
	keypad(stdscr, TRUE);

	/* Initialize few color pairs */
   	init_pair(1, COLOR_RED, COLOR_BLACK);

	/* Initialize the fields */
	field[0] = new_field(1, 10, 6, 1, 0, 0);
	field[1] = new_field(1, 10, 8, 1, 0, 0);
	field[2] = NULL;

	/* Set field options */
	set_field_back(field[0], A_UNDERLINE);
	field_opts_off(field[0], O_AUTOSKIP); /* Don't go to next field when this */
					      /* Field is filled up 		*/
	set_field_back(field[1], A_UNDERLINE); 
	field_opts_off(field[1], O_AUTOSKIP);
	
	/* Create the form and post it */
	my_form = new_form(field);
	
	/* Calculate the area required for the form */
	scale_form(my_form, &rows, &cols);

	/* Create the window to be associated with the form */
        my_form_win = newwin(rows + 4, cols + 4, 4, 4);
        keypad(my_form_win, TRUE);

	/* Set main window and sub window */
        set_form_win(my_form, my_form_win);
        set_form_sub(my_form, derwin(my_form_win, rows, cols, 2, 2));

	/* Print a border around the main window and print a title */
        box(my_form_win, 0, 0);
	print_in_middle(my_form_win, 1, 0, cols + 4, "My Form", COLOR_PAIR(1));
	
	post_form(my_form);
	wrefresh(my_form_win);

	mvprintw(LINES - 2, 0, "Use UP, DOWN arrow keys to switch between fields");
	refresh();

	/* Loop through to get user requests */
	while((ch = wgetch(my_form_win)) != KEY_F(1))
	{	switch(ch)
		{	case KEY_DOWN:
				/* Go to next field */
				form_driver(my_form, REQ_NEXT_FIELD);
				/* Go to the end of the present buffer */
				/* Leaves nicely at the last character */
				form_driver(my_form, REQ_END_LINE);
				break;
			case KEY_UP:
				/* Go to previous field */
				form_driver(my_form, REQ_PREV_FIELD);
				form_driver(my_form, REQ_END_LINE);
				break;
			default:
				/* If this is a normal character, it gets */
				/* Printed				  */	
				form_driver(my_form, ch);
				break;
		}
	}

	/* Un post form and free the memory */
	unpost_form(my_form);
	free_form(my_form);
	free_field(field[0]);
	free_field(field[1]); 

	endwin();
	return 0;
}

void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color)
{	int length, x, y;
	float temp;

	if(win == NULL)
		win = stdscr;
	getyx(win, y, x);
	if(startx != 0)
		x = startx;
	if(starty != 0)
		y = starty;
	if(width == 0)
		width = 80;

	length = strlen(string);
	temp = (width - length)/ 2;
	x = startx + (int)temp;
	wattron(win, color);
	mvwprintw(win, y, x, "%s", string);
	wattroff(win, color);
	refresh();
}

18.5. Field Validation

By default, a field will accept any data input by the user. It is possible to attach validation to the field. Then any attempt by the user to leave the field, while it contains data that doesn't match the validation type will fail. Some validation types also have a character-validity check for each time a character is entered in the field.

Validation can be attached to a field with the following function.

int set_field_type(FIELD *field,          /* field to alter */
                   FIELDTYPE *ftype,      /* type to associate */
                   ...);                  /* additional arguments*/
Once set, the validation type for a field can be queried with
FIELDTYPE *field_type(FIELD *field);      /* field to query */

The form driver validates the data in a field only when data is entered by the end-user. Validation does not occur when

  • the application program changes the field value by calling set_field_buffer.

  • linked field values are changed indirectly -- by changing the field to which they are linked

The following are the pre-defined validation types. You can also specify custom validation, though it's a bit tricky and cumbersome.

TYPE_ALPHA

This field type accepts alphabetic data; no blanks, no digits, no special characters (this is checked at character-entry time). It is set up with:

int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_ALPHA,            /* type to associate */
                   int width);            /* maximum width of field */

The width argument sets a minimum width of data. The user has to enter at-least width number of characters before he can leave the field. Typically you'll want to set this to the field width; if it's greater than the field width, the validation check will always fail. A minimum width of zero makes field completion optional.

TYPE_ALNUM

This field type accepts alphabetic data and digits; no blanks, no special characters (this is checked at character-entry time). It is set up with:

int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_ALNUM,            /* type to associate */
                   int width);            /* maximum width of field */

The width argument sets a minimum width of data. As with TYPE_ALPHA, typically you'll want to set this to the field width; if it's greater than the field width, the validation check will always fail. A minimum width of zero makes field completion optional.

TYPE_ENUM

This type allows you to restrict a field's values to be among a specified set of string values (for example, the two-letter postal codes for U.S. states). It is set up with:

int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_ENUM,             /* type to associate */
                   char **valuelist;      /* list of possible values */
                   int checkcase;         /* case-sensitive? */
                   int checkunique);      /* must specify uniquely? */

The valuelist parameter must point at a NULL-terminated list of valid strings. The checkcase argument, if true, makes comparison with the string case-sensitive.

When the user exits a TYPE_ENUM field, the validation procedure tries to complete the data in the buffer to a valid entry. If a complete choice string has been entered, it is of course valid. But it is also possible to enter a prefix of a valid string and have it completed for you.

By default, if you enter such a prefix and it matches more than one value in the string list, the prefix will be completed to the first matching value. But the checkunique argument, if true, requires prefix matches to be unique in order to be valid.

The REQ_NEXT_CHOICE and REQ_PREV_CHOICE input requests can be particularly useful with these fields.

TYPE_INTEGER

This field type accepts an integer. It is set up as follows:

int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_INTEGER,          /* type to associate */
                   int padding,           /* # places to zero-pad to */
                   int vmin, int vmax);   /* valid range */

Valid characters consist of an optional leading minus and digits. The range check is performed on exit. If the range maximum is less than or equal to the minimum, the range is ignored.

If the value passes its range check, it is padded with as many leading zero digits as necessary to meet the padding argument.

A TYPE_INTEGER value buffer can conveniently be interpreted with the C library function atoi(3).

TYPE_NUMERIC

This field type accepts a decimal number. It is set up as follows:

int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_NUMERIC,          /* type to associate */
                   int padding,           /* # places of precision */
                   int vmin, int vmax);   /* valid range */

Valid characters consist of an optional leading minus and digits. possibly including a decimal point. The range check is performed on exit. If the range maximum is less than or equal to the minimum, the range is ignored.

If the value passes its range check, it is padded with as many trailing zero digits as necessary to meet the padding argument.

A TYPE_NUMERIC value buffer can conveniently be interpreted with the C library function atof(3).

TYPE_REGEXP

This field type accepts data matching a regular expression. It is set up as follows:

int set_field_type(FIELD *field,          /* field to alter */
                   TYPE_REGEXP,           /* type to associate */
                   char *regexp);         /* expression to match */

The syntax for regular expressions is that of regcomp(3). The check for regular-expression match is performed on exit.


18.6. Form Driver: The work horse of the forms system

As in the menu system, form_driver() plays a very important role in forms system. All types of requests to forms system should be funneled through form_driver().

int form_driver(FORM *form,     /* form on which to operate     */
                int request)    /* form request code         */

As you have seen some of the examples above, you have to be in a loop looking for user input and then decide whether it's a field data or a form request. The form requests are then passed to form_driver() to do the work.

The requests roughly can be divided into following categories. Different requests and their usage is explained below:


18.6.1. Page Navigation Requests

These requests cause page-level moves through the form, triggering display of a new form screen. A form can be made of multiple pages. If you have a big form with lot of fields and logical sections, then you can divide the form into pages. The function set_new_page() to set a new page at the field specified.

int set_new_page(FIELD *field,/* Field at which page break to be set or unset */
         bool new_page_flag); /* should be TRUE to put a break */

The following requests allow you to move to different pages

  • REQ_NEXT_PAGE Move to the next form page.

  • REQ_PREV_PAGE Move to the previous form page.

  • REQ_FIRST_PAGE Move to the first form page.

  • REQ_LAST_PAGE Move to the last form page.

These requests treat the list as cyclic; that is, REQ_NEXT_PAGE from the last page goes to the first, and REQ_PREV_PAGE from the first page goes to the last.


18.6.2. Inter-Field Navigation Requests

These requests handle navigation between fields on the same page.

  • REQ_NEXT_FIELD Move to next field.

  • REQ_PREV_FIELD Move to previous field.

  • REQ_FIRST_FIELD Move to the first field.

  • REQ_LAST_FIELD Move to the last field.

  • REQ_SNEXT_FIELD Move to sorted next field.

  • REQ_SPREV_FIELD Move to sorted previous field.

  • REQ_SFIRST_FIELD Move to the sorted first field.

  • REQ_SLAST_FIELD Move to the sorted last field.

  • REQ_LEFT_FIELD Move left to field.

  • REQ_RIGHT_FIELD Move right to field.

  • REQ_UP_FIELD Move up to field.

  • REQ_DOWN_FIELD Move down to field.

These requests treat the list of fields on a page as cyclic; that is, REQ_NEXT_FIELD from the last field goes to the first, and REQ_PREV_FIELD from the first field goes to the last. The order of the fields for these (and the REQ_FIRST_FIELD and REQ_LAST_FIELD requests) is simply the order of the field pointers in the form array (as set up by new_form() or set_form_fields()

It is also possible to traverse the fields as if they had been sorted in screen-position order, so the sequence goes left-to-right and top-to-bottom. To do this, use the second group of four sorted-movement requests.

Finally, it is possible to move between fields using visual directions up, down, right, and left. To accomplish this, use the third group of four requests. Note, however, that the position of a form for purposes of these requests is its upper-left corner.

For example, suppose you have a multi-line field B, and two single-line fields A and C on the same line with B, with A to the left of B and C to the right of B. A REQ_MOVE_RIGHT from A will go to B only if A, B, and C all share the same first line; otherwise it will skip over B to C.


18.6.3. Intra-Field Navigation Requests

These requests drive movement of the edit cursor within the currently selected field.

  • REQ_NEXT_CHAR Move to next character.

  • REQ_PREV_CHAR Move to previous character.

  • REQ_NEXT_LINE Move to next line.

  • REQ_PREV_LINE Move to previous line.

  • REQ_NEXT_WORD Move to next word.

  • REQ_PREV_WORD Move to previous word.

  • REQ_BEG_FIELD Move to beginning of field.

  • REQ_END_FIELD Move to end of field.

  • REQ_BEG_LINE Move to beginning of line.

  • REQ_END_LINE Move to end of line.

  • REQ_LEFT_CHAR Move left in field.

  • REQ_RIGHT_CHAR Move right in field.

  • REQ_UP_CHAR Move up in field.

  • REQ_DOWN_CHAR Move down in field.

Each word is separated from the previous and next characters by whitespace. The commands to move to beginning and end of line or field look for the first or last non-pad character in their ranges.


18.6.4. Scrolling Requests

Fields that are dynamic and have grown and fields explicitly created with offscreen rows are scrollable. One-line fields scroll horizontally; multi-line fields scroll vertically. Most scrolling is triggered by editing and intra-field movement (the library scrolls the field to keep the cursor visible). It is possible to explicitly request scrolling with the following requests:

  • REQ_SCR_FLINE Scroll vertically forward a line.

  • REQ_SCR_BLINE Scroll vertically backward a line.

  • REQ_SCR_FPAGE Scroll vertically forward a page.

  • REQ_SCR_BPAGE Scroll vertically backward a page.

  • REQ_SCR_FHPAGE Scroll vertically forward half a page.

  • REQ_SCR_BHPAGE Scroll vertically backward half a page.

  • REQ_SCR_FCHAR Scroll horizontally forward a character.

  • REQ_SCR_BCHAR Scroll horizontally backward a character.

  • REQ_SCR_HFLINE Scroll horizontally one field width forward.

  • REQ_SCR_HBLINE Scroll horizontally one field width backward.

  • REQ_SCR_HFHALF Scroll horizontally one half field width forward.

  • REQ_SCR_HBHALF Scroll horizontally one half field width backward.

For scrolling purposes, a page of a field is the height of its visible part.


18.6.5. Editing Requests

When you pass the forms driver an ASCII character, it is treated as a request to add the character to the field's data buffer. Whether this is an insertion or a replacement depends on the field's edit mode (insertion is the default.

The following requests support editing the field and changing the edit mode:

  • REQ_INS_MODE Set insertion mode.

  • REQ_OVL_MODE Set overlay mode.

  • REQ_NEW_LINE New line request (see below for explanation).

  • REQ_INS_CHAR Insert space at character location.

  • REQ_INS_LINE Insert blank line at character location.

  • REQ_DEL_CHAR Delete character at cursor.

  • REQ_DEL_PREV Delete previous word at cursor.

  • REQ_DEL_LINE Delete line at cursor.

  • REQ_DEL_WORD Delete word at cursor.

  • REQ_CLR_EOL Clear to end of line.

  • REQ_CLR_EOF Clear to end of field.

  • REQ_CLR_FIELD Clear entire field.

The behavior of the REQ_NEW_LINE and REQ_DEL_PREV requests is complicated and partly controlled by a pair of forms options. The special cases are triggered when the cursor is at the beginning of a field, or on the last line of the field.

First, we consider REQ_NEW_LINE:

The normal behavior of REQ_NEW_LINE in insert mode is to break the current line at the position of the edit cursor, inserting the portion of the current line after the cursor as a new line following the current and moving the cursor to the beginning of that new line (you may think of this as inserting a newline in the field buffer).

The normal behavior of REQ_NEW_LINE in overlay mode is to clear the current line from the position of the edit cursor to end of line. The cursor is then moved to the beginning of the next line.

However, REQ_NEW_LINE at the beginning of a field, or on the last line of a field, instead does a REQ_NEXT_FIELD. O_NL_OVERLOAD option is off, this special action is disabled.

Now, let us consider REQ_DEL_PREV:

The normal behavior of REQ_DEL_PREV is to delete the previous character. If insert mode is on, and the cursor is at the start of a line, and the text on that line will fit on the previous one, it instead appends the contents of the current line to the previous one and deletes the current line (you may think of this as deleting a newline from the field buffer).

However, REQ_DEL_PREV at the beginning of a field is instead treated as a REQ_PREV_FIELD.

If the O_BS_OVERLOAD option is off, this special action is disabled and the forms driver just returns E_REQUEST_DENIED.


18.6.6. Order Requests

If the type of your field is ordered, and has associated functions for getting the next and previous values of the type from a given value, there are requests that can fetch that value into the field buffer:

  • REQ_NEXT_CHOICE Place the successor value of the current value in the buffer.

  • REQ_PREV_CHOICE Place the predecessor value of the current value in the buffer.

Of the built-in field types, only TYPE_ENUM has built-in successor and predecessor functions. When you define a field type of your own (see Custom Validation Types), you can associate our own ordering functions.


18.6.7. Application Commands

Form requests are represented as integers above the curses value greater than KEY_MAX and less than or equal to the constant MAX_COMMAND. A value within this range gets ignored by form_driver(). So this can be used for any purpose by the application. It can be treated as an application specific action and take corresponding action.


19. Tools and Widget Libraries

Now that you have seen the capabilities of ncurses and its sister libraries, you are rolling your sleeves up and gearing for a project that heavily manipulates screen. But wait.. It can be pretty difficult to write and maintain complex GUI widgets in plain ncurses or even with the additional libraries. There are some ready-to-use tools and widget libraries that can be used instead of writing your own widgets. You can use some of them, get ideas from the code, or even extend them.


19.1. CDK (Curses Development Kit)

In the author's words

CDK stands for 'Curses Development Kit' and it currently contains 21 ready to use widgets which facilitate the speedy development of full screen curses programs.

The kit provides some useful widgets, which can be used in your programs directly. It's pretty well written and the documentation is very good. The examples in the examples directory can be a good place to start for beginners. The CDK can be downloaded from http://invisible-island.net/cdk/ . Follow the instructions in README file to install it.


19.1.1. Widget List

The following is the list of widgets provided with cdk and their description.

Widget Type           Quick Description
===========================================================================
Alphalist             Allows a user to select from a list of words, with
                      the ability to narrow the search list by typing in a
                      few characters of the desired word.
Buttonbox             This creates a multiple button widget. 
Calendar              Creates a little simple calendar widget.
Dialog                Prompts the user with a message, and the user
                      can pick an answer from the buttons provided.
Entry                 Allows the user to enter various types of information.
File Selector         A file selector built from Cdk base widgets. This
                      example shows how to create more complicated widgets
                      using the Cdk widget library.
Graph                 Draws a graph.
Histogram             Draws a histogram.
Item List             Creates a pop up field which allows the user to select
                      one of several choices in a small field. Very useful
                      for things like days of the week or month names.
Label                 Displays messages in a pop up box, or the label can be
                      considered part of the screen.
Marquee               Displays a message in a scrolling marquee.
Matrix                Creates a complex matrix with lots of options.
Menu                  Creates a pull-down menu interface.
Multiple Line Entry   A multiple line entry field. Very useful
                      for long fields. (like a description
                      field)
Radio List            Creates a radio button list.
Scale                 Creates a numeric scale. Used for allowing a user to
                      pick a numeric value and restrict them to a range of 
                      values.
Scrolling List        Creates a scrolling list/menu list.
Scrolling Window      Creates a scrolling log file viewer. Can add 
                      information into the window while its running. 
                      A good widget for displaying the progress of
                      something. (akin to a console window)
Selection List        Creates a multiple option selection list.
Slider                Akin to the scale widget, this widget provides a
                      visual slide bar to represent the numeric value.
Template              Creates a entry field with character sensitive 
                      positions. Used for pre-formatted fields like
                      dates and phone numbers.
Viewer                This is a file/information viewer. Very useful
                      when you need to display loads of information.
===========================================================================

A few of the widgets are modified by Thomas Dickey in recent versions.


19.1.2. Some Attractive Features

Apart from making our life easier with readily usable widgets, cdk solves one frustrating problem with printing multi colored strings, justified strings elegantly. Special formatting tags can be embedded in the strings which are passed to CDK functions. For Example

If the string

"</B/1>This line should have a yellow foreground and a blue
background.<!1>"

given as a parameter to newCDKLabel(), it prints the line with yellow foreground and blue background. There are other tags available for justifying string, embedding special drawing characters etc.. Please refer to the man page cdk_display(3X) for details. The man page explains the usage with nice examples.


19.1.3. Conclusion

All in all, CDK is a well-written package of widgets, which if used properly can form a strong frame work for developing complex GUI.


19.2. The dialog

Long long ago, in September 1994, when few people knew linux, Jeff Tranter wrote an article on dialog in Linux Journal. He starts the article with these words..

Linux is based on the Unix operating system, but also features a number of unique and useful kernel features and application programs that often go beyond what is available under Unix. One little-known gem is "dialog", a utility for creating professional-looking dialog boxes from within shell scripts. This article presents a tutorial introduction to the dialog utility, and shows examples of how and where it can be used

As he explains, dialog is a real gem in making professional-looking dialog boxes with ease. It creates a variety of dialog boxes, menus, check lists etc.. It is usually installed by default. If not, you can download it from Thomas Dickey's site.

The above-mentioned article gives a very good overview of its uses and capabilites. The man page has more details. It can be used in variety of situations. One good example is building of linux kernel in text mode. Linux kernel uses a modified version of dialog tailored for its needs.

dialog was initially designed to be used with shell scripts. If you want to use its functionality in a c program, then you can use libdialog. The documentation regarding this is sparse. Definitive reference is the dialog.h header file which comes with the library. You may need to hack here and there to get the required output. The source is easily customizable. I have used it on a number of occasions by modifying the code.


19.3. Perl Curses Modules CURSES::FORM and CURSES::WIDGETS

The perl module Curses, Curses::Form and Curses::Widgets give access to curses from perl. If you have curses and basic perl is installed, you can get these modules from CPAN All Modules page. Get the three zipped modules in the Curses category. Once installed you can use these modules from perl scripts like any other module. For more information on perl modules see perlmod man page. The above modules come with good documentation and they have some demo scripts to test the functionality. Though the widgets provided are very rudimentary, these modules provide good access to curses library from perl.

Some of my code examples are converted to perl by Anuradha Ratnaweera and they are available in the perl directory.

For more information see man pages Curses(3) , Curses::Form(3) and Curses::Widgets(3). These pages are installed only when the above modules are acquired and installed.


20. Just For Fun !!!

This section contains few programs written by me just for fun. They don't signify a better programming practice or the best way of using ncurses. They are provided here so as to allow beginners to get ideas and add more programs to this section. If you have written a couple of nice, simple programs in curses and want them to included here, contact me.


20.1. The Game of Life

Game of life is a wonder of math. In Paul Callahan's words

The Game of Life (or simply Life) is not a game in the conventional sense. There
are no players, and no winning or losing. Once the "pieces" are placed in the
starting position, the rules determine everything that happens later.
Nevertheless, Life is full of surprises! In most cases, it is impossible to look
at a starting position (or pattern) and see what will happen in the future. The
only way to find out is to follow the rules of the game.

This program starts with a simple inverted U pattern and shows how wonderful life works. There is a lot of room for improvement in the program. You can let the user enter pattern of his choice or even take input from a file. You can also change rules and play with a lot of variations. Search on google for interesting information on game of life.

File Path: JustForFun/life.c


20.2. Magic Square

Magic Square, another wonder of math, is very simple to understand but very difficult to make. In a magic square sum of the numbers in each row, each column is equal. Even diagnol sum can be equal. There are many variations which have special properties.

This program creates a simple magic square of odd order.

File Path: JustForFun/magic.c


20.3. Towers of Hanoi

The famous towers of hanoi solver. The aim of the game is to move the disks on the first peg to last peg, using middle peg as a temporary stay. The catch is not to place a larger disk over a small disk at any time.

File Path: JustForFun/hanoi.c


20.4. Queens Puzzle

The objective of the famous N-Queen puzzle is to put N queens on a N X N chess board without attacking each other.

This program solves it with a simple backtracking technique.

File Path: JustForFun/queens.c


20.5. Shuffle

A fun game, if you have time to kill.

File Path: JustForFun/shuffle.c


20.6. Typing Tutor

A simple typing tutor, I created more out of need than for ease of use. If you know how to put your fingers correctly on the keyboard, but lack practice, this can be helpful.

File Path: JustForFun/tt.c


21. References

ncurses-6.0-20160213/doc/html/Ada95.html0000644000175100001440000003153112145771752015734 0ustar tomusers Ada95 Binding for ncurses

Ada95 Binding for ncurses

by Jürgen Pfeifer.


General Remarks

  • This document describes Version 01.00 of the binding.
  • The functionality is modeled to be compatible with the ncurses package, a clone of the SVr4 curses model.
    I did the development on an Intel box running the latest stable release of Linux, ncurses and the most recent released GNU Ada Translator gnat versions. For any older versions of ncurses and gnat it is not guaranteed to work.
  • You must have the m4 macroprocessor to build this package. If you don't have this program, you can get the FSF version here.
  • Ada programs are supposed to be readable. One of my favorite methods to make code readable is to use expressive names for the identifiers. You can find a list of a mapping of the cryptic curses names to the Ada names in this table.
  • This is not a typical one-to-one interface mapping. It is close to one-to-one on the functional level. Each (n)curses function has it's counterpart with a more or less similar formal parameter list in the binding. It is not one-to-one with respect to the datatypes. I tried to make records out of the flat chtype and similar structures, so you don't have to do bit operations to mark an attributed character as bold. Just make the boolean member bold of the record true. The binding also hides the structures like WINDOW, PANEL, MENU, FORM etc. ! It's a pure functional API.
  • I try to do as much error checking as possible and feasible in the binding. I will raise an Ada exception when something went wrong in the low-level curses. This has the effect that - at least first time in my life - (n)curses programs have now a very rigid error checking, but - thanks to Ada - you don't have to code the orgiastic error checking style of C.
  • Support for wide characters is currently not in the binding, as it is not really in ncurses at this point in time.

Limitations

  • I provide no SCREEN datatype and functions to set a new screen. If you need this (mostly for debugging I guess), write a small C routine doing all this and import it into your Ada program.
  • I provide no functions to switch on/off curses tracing options. Same suggestion as above.
  • Although Ada95 is an OO Language, this binding doesn't provide an OO abstraction of the (n)curses functionality. As mentioned above it's a thin binding for the (n)curses functions. But without any doubt it would be nice to build on top of this an OO abstraction of (n)curses functionality.
    The only exception is the method how fieldtypes are represented in this Binding. We provide an abstract tagged type Field_Type from which the various fieldtypes are derived.
  • I currently do not support the link_fieldtype functionality of the forms subsystem.
  • The *_IO packages are currently output only.

Hierarchy of packages

If you want to navigate through the html pages of the package specs, click here.

Implementation Details

Behind the abstraction

All the new types like Window, Panel, Menu, Form etc. are just opaque representations of the pointers to the corresponding low level (n)curses structures like WINDOW *, PANEL *, MENU * or FORM *. So you can safely pass them to C routines that expect a pointer to one of those structures.

Extended ripoffline() usage

The official documentation of (n)curses says, that the line parameter determines only whether or not exactly one line is stolen from the top or bottom of the screen. So essentially only the sign of the parameter is evaluated. ncurses has internally implemented it in a way, that uses the line parameter also to control the amount of lines to steal. This mechanism is used in the Rip_Off_Lines routine of the binding.

How user defined field types work

TBD

Enumeration fields handling

The (n)curses documentation says, that the String arrays to be passed to an TYPE_ENUM fieldtype must not be automatic variables. This is not true in this binding, because it is internally arranged to safely copy these values.

Using other Ada compilers

This should basically not be a problem.

Port to other curses implementations

Basically it should not be too hard to make all this run on a regular SVr4 implementation of curses. The problems are probably these:

  • ncurses has some additional features which are presented in this binding. You have two choices to deal with this:
    • Emulate the feature in this binding
    • Raise an exception for non implemented features

    Most likely you will follow a mixed approach. Some features are easy to simulate, others will be hard if not impossible.

I'm quite sure I forgot something.

ncurses-6.0-20160213/doc/html/man/0000755000175100001440000000000012653207013014737 5ustar tomusersncurses-6.0-20160213/doc/html/man/curs_termcap.3x.html0000644000175100001440000003401012653207006020645 0ustar tomusers curs_termcap 3x

curs_termcap 3x

curs_termcap(3x)                                       curs_termcap(3x)




NAME

       PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr,
       tgoto, tputs - direct curses interface to the terminfo
       capability database


SYNOPSIS

       #include <curses.h>
       #include <term.h>

       extern char PC;
       extern char * UP;
       extern char * BC;
       extern short ospeed;

       int tgetent(char *bp, const char *name);
       int tgetflag(char *id);
       int tgetnum(char *id);
       char *tgetstr(char *id, char **area);
       char *tgoto(const char *cap, int col, int row);
       int tputs(const char *str, int affcnt, int (*putc)(int));


DESCRIPTION

       These  routines  are included as a conversion aid for pro-
       grams that use the termcap library.  Their parameters  are
       the  same and the routines are emulated using the terminfo
       database.  Thus, they can only be used to query the  capa-
       bilities  of  entries  for which a terminfo entry has been
       compiled.


INITIALIZATION

       The tgetent routine loads the entry for name.  It returns:

          1  on success,

          0  if there is no such entry (or that it is  a  generic
             type,  having  too little information for curses ap-
             plications to run), and

          -1 if the terminfo database could not be found.

       This differs from the termcap library in two ways:

          o   The emulation ignores the buffer pointer  bp.   The
              termcap  library would store a copy of the terminal
              description in the area referenced by this pointer.
              However,  ncurses  stores its terminal descriptions
              in compiled binary form,  which  is  not  the  same
              thing.

          o   There is a difference in return codes.  The termcap
              library does not check if the terminal  description
              is  marked  with  the generic capability, or if the
              terminal description has cursor-addressing.


CAPABILITY VALUES

       The tgetflag routine gets the boolean entry for id, or ze-
       ro if it is not available.

       The  tgetnum  routine gets the numeric entry for id, or -1
       if it is not available.

       The tgetstr routine returns the string entry  for  id,  or
       zero  if it is not available.  Use tputs to output the re-
       turned string.  The area parameter is used as follows:

          o   It is assumed to be the address of a pointer  to  a
              buffer managed by the calling application.

          o   However,  ncurses checks to ensure that area is not
              NULL, and also that the resulting buffer pointer is
              not  NULL.  If either check fails, the area parame-
              ter is ignored.

          o   If the checks succeed, ncurses also copies the  re-
              turn  value  to  the buffer pointed to by area, and
              the area value will be updated to  point  past  the
              null ending this value.

          o   The return value itself is an address in the termi-
              nal description which is loaded into memory.

       Only the first two characters of the id parameter of tget-
       flag, tgetnum and tgetstr are compared in lookups.


FORMATTING CAPABILITIES

       The  tgoto  routine  instantiates  the parameters into the
       given capability.  The output from this routine is  to  be
       passed to tputs.

       The  tputs  routine  is described on the curs_terminfo(3x)
       manual page.  It can retrieve capabilities by either term-
       cap or terminfo name.


GLOBAL VARIABLES

       The variables PC, UP and BC are set by tgetent to the ter-
       minfo   entry's   data   for   pad_char,   cursor_up   and
       backspace_if_not_bs,  respectively.   UP  is  not  used by
       ncurses.  PC is used in the tdelay_output function.  BC is
       used  in  the tgoto emulation.  The variable ospeed is set
       by ncurses in a system-specific coding to reflect the ter-
       minal speed.


RETURN VALUE

       Except where explicitly noted, routines that return an in-
       teger return ERR upon failure and OK (SVr4 only  specifies
       "an integer value other than ERR") upon successful comple-
       tion.

       Routines that return pointers return NULL on error.


BUGS

       If you call tgetstr to fetch ca or any other parameterized
       string,  be aware that it will be returned in terminfo no-
       tation, not the older and not-quite-compatible termcap no-
       tation.   This  will not cause problems if all you do with
       it is call tgoto or tparm,  which  both  expand  terminfo-
       style  strings  as terminfo.  (The tgoto function, if con-
       figured to support termcap, will check if  the  string  is
       indeed  terminfo-style  by  looking for "%p" parameters or
       "$<..>" delays, and invoke a termcap-style parser  if  the
       string does not appear to be terminfo).

       Because  terminfo  conventions for representing padding in
       string capabilities differ  from  termcap's,  tputs("50");
       will  put  out a literal "50" rather than busy-waiting for
       50 milliseconds.  Cope with it.

       Note that termcap has nothing analogous to terminfo's  sgr
       string.   One consequence of this is that termcap applica-
       tions assume me (terminfo sgr0) does not reset the  alter-
       nate  character  set.  This implementation checks for, and
       modifies the data shown to the termcap interface to accom-
       modate termcap's limitation in this respect.


PORTABILITY

       The  XSI  Curses  standard,  Issue 4 describes these func-
       tions.  However, they are marked TO BE WITHDRAWN  and  may
       be removed in future versions.

       Neither  the  XSI  Curses  standard nor the SVr4 man pages
       documented the return values of tgetent correctly,  though
       all  three were in fact returned ever since SVr1.  In par-
       ticular, an omission in the XSI Curses  documentation  has
       been  misinterpreted  to  mean  that tgetent returns OK or
       ERR.  Because the purpose of these functions is to provide
       compatibility  with  the termcap library, that is a defect
       in XCurses, Issue 4, Version 2 rather than in ncurses.

       External variables are provided  for  support  of  certain
       termcap  applications.  However, termcap applications' use
       of those variables is poorly documented, e.g., not distin-
       guishing  between  input  and output.  In particular, some
       applications are reported to declare and/or modify ospeed.

       The comment that only the first two characters of  the  id
       parameter  are  used  escapes many application developers.
       The original  BSD  4.2  termcap  library  (and  historical
       relics thereof) did not require a trailing null NUL on the
       parameter name passed to tgetstr,  tgetnum  and  tgetflag.
       Some  applications  assume that the termcap interface does
       not require the trailing NUL for the parameter name.  Tak-
       ing into account these issues:

       o   As  a special case, tgetflag matched against a single-
           character identifier provided that was at the  end  of
           the  terminal  description.   You should not rely upon
           this behavior in portable programs.  This  implementa-
           tion  disallows matches against single-character capa-
           bility names.

       o   This implementation disallows matches by  the  termcap
           interface  against extended capability names which are
           longer than two characters.


SEE ALSO

       curses(3x), terminfo(5), term_variables(3x), putc(3).

       http://invisible-island.net/ncurses/tctest.html



                                                       curs_termcap(3x)
ncurses-6.0-20160213/doc/html/man/curs_inopts.3x.html0000644000175100001440000004755112653207004020542 0ustar tomusers curs_inopts 3x

curs_inopts 3x

curs_inopts(3x)                                         curs_inopts(3x)




NAME

       cbreak, nocbreak, echo, noecho, halfdelay, intrflush,
       keypad, meta, nodelay, notimeout, raw, noraw, noqiflush,
       qiflush, timeout, wtimeout, typeahead - curses input
       options


SYNOPSIS

       #include <curses.h>

       int cbreak(void);
       int nocbreak(void);
       int echo(void);
       int noecho(void);
       int halfdelay(int tenths);
       int intrflush(WINDOW *win, bool bf);
       int keypad(WINDOW *win, bool bf);
       int meta(WINDOW *win, bool bf);
       int nodelay(WINDOW *win, bool bf);
       int raw(void);
       int noraw(void);
       void noqiflush(void);
       void qiflush(void);
       int notimeout(WINDOW *win, bool bf);
       void timeout(int delay);
       void wtimeout(WINDOW *win, int delay);
       int typeahead(int fd);


DESCRIPTION

       The ncurses library provides several functions  which  let
       an  application  change the way input from the terminal is
       handled.  Some are global, applying to all windows.   Oth-
       ers apply only to a specific window.  Window-specific set-
       tings are not automatically applied to new or derived win-
       dows.   An application must apply these to each window, if
       the same behavior is needed.


cbreak

       Normally, the tty driver buffers typed characters until  a
       newline  or  carriage return is typed.  The cbreak routine
       disables line buffering and erase/kill  character-process-
       ing  (interrupt  and flow control characters are unaffect-
       ed), making  characters  typed  by  the  user  immediately
       available  to  the  program.  The nocbreak routine returns
       the terminal to normal (cooked) mode.

       Initially the terminal may or may not be in  cbreak  mode,
       as the mode is inherited; therefore, a program should call
       cbreak or nocbreak explicitly.  Most interactive  programs
       using  curses set the cbreak mode.  Note that cbreak over-
       rides raw.  [See curs_getch(3x) for a  discussion  of  how
       these routines interact with echo and noecho.]


echo/noecho

       The  echo  and  noecho routines control whether characters
       typed by the user are echoed by getch as they  are  typed.
       Echoing by the tty driver is always disabled, but initial-
       ly getch is in echo mode, so characters typed are  echoed.
       Authors  of  most  interactive programs prefer to do their
       own echoing in a controlled area of the screen, or not  to
       echo  at  all,  so they disable echoing by calling noecho.
       [See curs_getch(3x) for a discussion of how these routines
       interact with cbreak and nocbreak.]


halfdelay

       The  halfdelay  routine is used for half-delay mode, which
       is similar to cbreak mode in that characters typed by  the
       user  are  immediately available to the program.  However,
       after blocking for tenths tenths of seconds,  ERR  is  re-
       turned  if  nothing  has  been typed.  The value of tenths
       must be a number between 1 and 255.  Use nocbreak to leave
       half-delay mode.


intrflush

       If  the  intrflush  option is enabled (bf is TRUE), and an
       interrupt key  is  pressed  on  the  keyboard  (interrupt,
       break,  quit),  all output in the tty driver queue will be
       flushed, giving the effect of faster response to  the  in-
       terrupt, but causing curses to have the wrong idea of what
       is on the screen.  Disabling the option (bf is FALSE) pre-
       vents  the flush.  The default for the option is inherited
       from the tty driver settings.  The window argument is  ig-
       nored.


keypad

       The  keypad option enables the keypad of the user's termi-
       nal.  If enabled (bf is TRUE), the user can press a  func-
       tion  key (such as an arrow key) and wgetch returns a sin-
       gle value representing the function key, as  in  KEY_LEFT.
       If  disabled (bf is FALSE), curses does not treat function
       keys specially and the program has to interpret the escape
       sequences  itself.   If  the keypad in the terminal can be
       turned on (made to transmit) and off (made to work  local-
       ly),  turning on this option causes the terminal keypad to
       be turned on when wgetch is called.  The default value for
       keypad is FALSE.


meta

       Initially, whether the terminal returns 7 or 8 significant
       bits on input depends on the control mode of the tty driv-
       er  [see  termio(7)].  To force 8 bits to be returned, in-
       voke meta(win, TRUE); this is equivalent, under POSIX,  to
       setting  the CS8 flag on the terminal.  To force 7 bits to
       be returned, invoke meta(win, FALSE); this is  equivalent,
       under POSIX, to setting the CS7 flag on the terminal.  The
       window argument, win, is always ignored.  If the  terminfo
       capabilities  smm (meta_on) and rmm (meta_off) are defined
       for the  terminal,  smm  is  sent  to  the  terminal  when
       meta(win,  TRUE)  is called and rmm is sent when meta(win,
       FALSE) is called.


nodelay

       The nodelay option causes getch to be a non-blocking call.
       If  no input is ready, getch returns ERR.  If disabled (bf
       is FALSE), getch waits until a key is pressed.

       While interpreting an input escape sequence, wgetch sets a
       timer  while  waiting  for the next character.  If notime-
       out(win, TRUE) is called,  then  wgetch  does  not  set  a
       timer.  The purpose of the timeout is to differentiate be-
       tween sequences received from a  function  key  and  those
       typed by a user.


raw/noraw

       The  raw and noraw routines place the terminal into or out
       of raw mode.  Raw mode is similar to cbreak mode, in  that
       characters typed are immediately passed through to the us-
       er program.  The differences are that in raw mode, the in-
       terrupt,  quit,  suspend,  and flow control characters are
       all passed through uninterpreted, instead of generating  a
       signal.   The  behavior  of the BREAK key depends on other
       bits in the tty driver that are not set by curses.


noqiflush

       When the noqiflush routine is used, normal flush of  input
       and  output queues associated with the INTR, QUIT and SUSP
       characters will not be done [see termio(7)].  When qiflush
       is  called,  the queues will be flushed when these control
       characters are read.  You may want to call noqiflush()  in
       a  signal handler if you want output to continue as though
       the interrupt had not occurred, after the handler exits.


timeout/wtimeout

       The timeout and wtimeout routines  set  blocking  or  non-
       blocking  read  for a given window.  If delay is negative,
       blocking read is used (i.e., waits  indefinitely  for  in-
       put).   If  delay  is zero, then non-blocking read is used
       (i.e., read returns ERR if no input is waiting).  If delay
       is  positive, then read blocks for delay milliseconds, and
       returns ERR if there is still no input.  Hence, these rou-
       tines  provide the same functionality as nodelay, plus the
       additional capability of being able to block for only  de-
       lay milliseconds (where delay is positive).


typeahead

       The  curses  library  does "line-breakout optimization" by
       looking for  typeahead  periodically  while  updating  the
       screen.   If  input is found, and it is coming from a tty,
       the current update is postponed until refresh or  doupdate
       is  called again.  This allows faster response to commands
       typed in advance.  Normally, the input FILE pointer passed
       to  newterm,  or  stdin in the case that initscr was used,
       will be used to do this typeahead checking.  The typeahead
       routine  specifies  that  the  file descriptor fd is to be
       used to check for typeahead instead.  If fd is -1, then no
       typeahead checking is done.


RETURN VALUE

       All  routines that return an integer return ERR upon fail-
       ure and OK (SVr4 specifies only "an  integer  value  other
       than  ERR")  upon  successful completion, unless otherwise
       noted in the preceding routine descriptions.

       X/Open does not define any error conditions.  In this  im-
       plementation,  functions  with a window parameter will re-
       turn an error if it is null.  Any function will  also  re-
       turn an error if the terminal was not initialized.  Also,

              halfdelay
                   returns  an  error if its parameter is outside
                   the range 1..255.


PORTABILITY

       These functions are described in the XSI Curses  standard,
       Issue 4.

       The  ncurses  library obeys the XPG4 standard and the his-
       torical practice of the AT&T  curses  implementations,  in
       that  the  echo bit is cleared when curses initializes the
       terminal state.  BSD curses differed from  this  slightly;
       it left the echo bit on at initialization, but the BSD raw
       call turned it off as a side-effect.  For best  portabili-
       ty,  set  echo or noecho explicitly just after initializa-
       tion, even if your program remains in cooked mode.

       When keypad is first enabled, ncurses loads the  key-defi-
       nitions for the current terminal description.  If the ter-
       minal description includes extended  string  capabilities,
       e.g.,  from  using the -x option of tic, then ncurses also
       defines keys for the capabilities whose names  begin  with
       "k".   The  corresponding  keycodes are generated and (de-
       pending on previous loads of  terminal  descriptions)  may
       differ  from  one execution of a program to the next.  The
       generated keycodes are recognized by the keyname  function
       (which will then return a name beginning with "k" denoting
       the terminfo capability name rather  than  "K",  used  for
       curses  key-names).  On the other hand, an application can
       use define_key to establish a specific keycode for a given
       string.   This  makes  it  possible  for an application to
       check for an extended capability's presence with tigetstr,
       and reassign the keycode to match its own needs.

       Low-level applications can use tigetstr to obtain the def-
       inition of any particular string capability.  Higher-level
       applications which use the curses wgetch and similar func-
       tions to return keycodes rely upon the order in which  the
       strings  are  loaded.  If more than one key definition has
       the same string value, then wgetch  can  return  only  one
       keycode.   Most curses implementations (including ncurses)
       load key definitions in the order defined by the array  of
       string capability names.  The last key to be loaded deter-
       mines the keycode which will be returned.  In ncurses, you
       may  also  have  extended  capabilities interpreted as key
       definitions.  These are loaded after the predefined  keys,
       and  if  a capability's value is the same as a previously-
       loaded key definition, the later  definition  is  the  one
       used.


NOTES

       Note  that echo, noecho, halfdelay, intrflush, meta, node-
       lay, notimeout, noqiflush, qiflush, timeout, and  wtimeout
       may be macros.

       The noraw and nocbreak calls follow historical practice in
       that they attempt to restore  to  normal  (`cooked')  mode
       from  raw and cbreak modes respectively.  Mixing raw/noraw
       and cbreak/nocbreak calls  leads  to  tty  driver  control
       states  that  are hard to predict or understand; it is not
       recommended.


SEE ALSO

       curses(3x),       curs_getch(3x),        curs_initscr(3x),
       curs_util(3x), define_key(3x), termio(7)



                                                        curs_inopts(3x)
ncurses-6.0-20160213/doc/html/man/menu_cursor.3x.html0000644000175100001440000001216212653207010020516 0ustar tomusers menu_cursor 3x

menu_cursor 3x

menu_cursor(3x)                                         menu_cursor(3x)




NAME

       pos_menu_cursor - position a menu's cursor


SYNOPSIS

       #include <menu.h>
       int pos_menu_cursor(const MENU *menu);


DESCRIPTION

       The  function  pos_menu_cursor  restores the cursor to the
       current position associated with the menu's selected item.
       This  is  useful after curses routines have been called to
       do screen-painting in response to a menu select.


RETURN VALUE

       This routine returns one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_NOT_POSTED
            The menu has not been posted.


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V  menu  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                        menu_cursor(3x)
ncurses-6.0-20160213/doc/html/man/resizeterm.3x.html0000644000175100001440000002166412653207012020357 0ustar tomusers resizeterm 3x

resizeterm 3x

resizeterm(3x)                                           resizeterm(3x)




NAME

       is_term_resized,  resize_term,  resizeterm  -  change  the
       curses terminal size


SYNOPSIS

       #include <curses.h>

       bool is_term_resized(int lines, int columns);
       int resize_term(int lines, int columns);
       int resizeterm(int lines, int columns);


DESCRIPTION

       This is an extension to the curses library.   It  provides
       callers  with  a hook into the ncurses data to resize win-
       dows, primarily for use by programs running in an X Window
       terminal (e.g., xterm).


resizeterm

       The  function  resizeterm resizes the standard and current
       windows to the specified  dimensions,  and  adjusts  other
       bookkeeping  data  used by the ncurses library that record
       the window dimensions such as the  LINES  and  COLS  vari-
       ables.


resize_term

       Most   of   the   work  is  done  by  the  inner  function
       resize_term.  The outer function resizeterm adds bookkeep-
       ing  for the SIGWINCH handler.  When resizing the windows,
       resize_term blank-fills the areas that are extended.   The
       calling application should fill in these areas with appro-
       priate data.  The resize_term function attempts to  resize
       all  windows.   However,  due to the calling convention of
       pads, it is not possible to  resize  these  without  addi-
       tional interaction with the application.


is_term_resized

       A  support  function  is_term_resized  is provided so that
       applications can check if the resize_term  function  would
       modify the window structures.  It returns TRUE if the win-
       dows would be modified, and FALSE otherwise.


RETURN VALUE

       Except as noted, these functions return  the  integer  ERR
       upon  failure and OK on success.  They will fail if either
       of the dimensions are less than or equal to zero, or if an
       error occurs while (re)allocating memory for the windows.


NOTES

       While these functions are intended to be used to support a
       signal handler (i.e., for SIGWINCH), care should be  taken
       to  avoid invoking them in a context where malloc or real-
       loc may have been interrupted, since it uses  those  func-
       tions.

       If  ncurses  is configured to supply its own SIGWINCH han-
       dler,

       o   on receipt of a SIGWINCH, the handler sets a flag

       o   which is tested in wgetch and doupdate,

       o   in turn, calling the resizeterm function,

       o   which ungetch's a KEY_RESIZE which will be read on the
           next call to wgetch.

           The  KEY_RESIZE  alerts an application that the screen
           size has changed, and that it should  repaint  special
           features  such  as  pads that cannot be done automati-
           cally.

           Calling resizeterm or resize_term directly from a sig-
           nal  handler  is unsafe.  This indirect method is used
           to provide a safe  way  to  resize  the  ncurses  data
           structures.

       If  the  environment  variables  LINES or COLUMNS are set,
       this overrides  the  library's  use  of  the  window  size
       obtained  from the operating system.  Thus, even if a SIG-
       WINCH is received, no screen size change may be recorded.


PORTABILITY

       It is possible to resize the screen with SVr4 curses, by

       o   exiting curses with endwin(3x) and

       o   resuming using refresh(3x).

       Doing that clears the screen and is visually distracting.

       This extension of ncurses was introduced in mid-1995.   It
       was adopted in NetBSD curses (2001) and PDCurses (2003).


SEE ALSO

       curs_getch(3x), curs_variables(3x), wresize(3x).


AUTHOR

       Thomas Dickey (from an equivalent function written in 1988
       for BSD curses).



                                                         resizeterm(3x)
ncurses-6.0-20160213/doc/html/man/curs_in_wchstr.3x.html0000644000175100001440000001725312653207004021222 0ustar tomusers curs_in_wchstr 3x

curs_in_wchstr 3x

curs_in_wchstr(3x)                                   curs_in_wchstr(3x)




NAME

       in_wchstr, in_wchnstr, win_wchstr, win_wchnstr,
       mvin_wchstr, mvin_wchnstr, mvwin_wchstr, mvwin_wchnstr -
       get an array of complex characters and renditions from a
       curses window


SYNOPSIS

       #include <curses.h>

       int in_wchstr(cchar_t *wchstr);
       int in_wchnstr(cchar_t *wchstr, int n);
       int win_wchstr(WINDOW *win, cchar_t *wchstr);
       int win_wchnstr(WINDOW *win, cchar_t *wchstr, int n);
       int mvin_wchstr(int y, int x, cchar_t *wchstr);
       int mvin_wchnstr(int y, int x, cchar_t *wchstr, int n);
       int mvwin_wchstr(WINDOW *win, int y, int x, cchar_t *wchstr);
       int mvwin_wchnstr(WINDOW *win, int y, int x, cchar_t *wchstr, int n);


DESCRIPTION

       These functions return an array of complex  characters  in
       wchstr,  starting  at  the  current cursor position in the
       named window.  Attributes (rendition) are stored with  the
       characters.

       The  in_wchnstr, mvin_wchnstr, mvwin_wchnstr and win_wchn-
       str fill the array with at most n cchar_t elements.


NOTES

       Note that all routines except win_wchnstr may be macros.

       Reading a line that overflows the array pointed to by wch-
       str  with in_wchstr, mvin_wchstr, mvwin_wchstr or win_wch-
       str  causes  undefined  results.  Therefore,  the  use  of
       in_wchnstr, mvin_wchnstr, mvwin_wchnstr, or win_wchnstr is
       recommended.


RETURN VALUE

       Upon successful completion,  these  functions  return  OK.
       Otherwise, they return ERR.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


PORTABILITY

       The  XSI  Curses defines no error conditions.  This imple-
       mentation checks for null pointers, returning ERR in  that
       case.


SEE ALSO

       Functions:  curses(3x),  curs_in_wch(3x),  curs_instr(3x),
       curs_inwstr(3x) curs_inchstr(3x)



                                                     curs_in_wchstr(3x)
ncurses-6.0-20160213/doc/html/man/curs_legacy.3x.html0000644000175100001440000001367712653207005020475 0ustar tomusers curs_legacy 3x

curs_legacy 3x

curs_legacy(3x)                                         curs_legacy(3x)




NAME

       curs_legacy  -  get  curses cursor and window coordinates,
       attributes


SYNOPSIS

       #include <curses.h>

       int getattrs(WINDOW *win);
       int getbegx(WINDOW *win);
       int getbegy(WINDOW *win);
       int getcurx(WINDOW *win);
       int getcury(WINDOW *win);
       int getmaxx(WINDOW *win);
       int getmaxy(WINDOW *win);
       int getparx(WINDOW *win);
       int getpary(WINDOW *win);


DESCRIPTION

       The getbegy and getbegx functions return the same data  as
       getbegyx.

       The  getcury and getcurx functions return the same data as
       getyx.

       The getmaxy and getmaxx functions return the same data  as
       getmaxyx.

       The  getpary and getparx functions return the same data as
       getparyx.


RETURN VALUE

       These functions return an integer, or ERR  if  the  window
       parameter is null.


NOTES

       All  of  these interfaces are provided as macros and func-
       tions.  The macros are suppressed (and only the  functions
       provided)  when  NCURSES_OPAQUE  is defined.  The standard
       forms such as getyx must be implemented as macros, and (in
       this implementation) are defined in terms of the functions
       described here, to avoid reliance on internal  details  of
       the WINDOW structure.


PORTABILITY

       These functions were supported on Version 7, BSD or System
       V implementations.


SEE ALSO

       curses(3x), curs_getyx(3x), curs_opaque(3x)



                                                        curs_legacy(3x)
ncurses-6.0-20160213/doc/html/man/curs_window.3x.html0000644000175100001440000003440212653207006020526 0ustar tomusers curs_window 3x

curs_window 3x

curs_window(3x)                                         curs_window(3x)




NAME

       newwin, delwin, mvwin, subwin, derwin, mvderwin, dupwin,
       wsyncup, syncok, wcursyncup, wsyncdown - create curses
       windows


SYNOPSIS

       #include <curses.h>

       WINDOW *newwin(
             int nlines, int ncols,
             int begin_y, int begin_x);
       int delwin(WINDOW *win);
       int mvwin(WINDOW *win, int y, int x);
       WINDOW *subwin(WINDOW *orig,
             int nlines, int ncols,
             int begin_y, int begin_x);
       WINDOW *derwin(WINDOW *orig,
             int nlines, int ncols,
             int begin_y, int begin_x);
       int mvderwin(WINDOW *win, int par_y, int par_x);
       WINDOW *dupwin(WINDOW *win);
       void wsyncup(WINDOW *win);
       int syncok(WINDOW *win, bool bf);
       void wcursyncup(WINDOW *win);
       void wsyncdown(WINDOW *win);


DESCRIPTION


newwin

       Calling newwin creates and returns a pointer to a new win-
       dow with the given number of lines and columns.  The upper
       left-hand corner of the window is at
              line begin_y,
              column begin_x

       If either nlines or ncols is zero, they default to
              LINES - begin_y and
              COLS - begin_x.

       A   new   full-screen   window   is   created  by  calling
       newwin(0,0,0,0).


delwin

       Calling delwin deletes the named window, freeing all memo-
       ry associated with it (it does not actually erase the win-
       dow's screen image).  Subwindows must  be  deleted  before
       the main window can be deleted.


mvwin

       Calling mvwin moves the window so that the upper left-hand
       corner is at position (x, y).  If the move would cause the
       window to be off the screen, it is an error and the window
       is not moved.  Moving subwindows is allowed, but should be
       avoided.


subwin

       Calling subwin creates and returns a pointer to a new win-
       dow with the given number of lines, nlines,  and  columns,
       ncols.   The  window  is at position (begin_y, begin_x) on
       the screen.  The subwindow shares memory with  the  window
       orig,  so that changes made to one window will affect both
       windows.  When using this routine, it is necessary to call
       touchwin  or  touchline on orig before calling wrefresh on
       the subwindow.


derwin

       Calling derwin is the same as calling subwin, except  that
       begin_y and begin_x are relative to the origin of the win-
       dow orig rather than the screen.  There is  no  difference
       between the subwindows and the derived windows.

       Calling mvderwin moves a derived window (or subwindow) in-
       side its parent window.  The screen-relative parameters of
       the  window are not changed.  This routine is used to dis-
       play different parts of the  parent  window  at  the  same
       physical position on the screen.


dupwin

       Calling  dupwin  creates  an exact duplicate of the window
       win.


wsyncup

       Calling wsyncup touches all locations in ancestors of  win
       that  are changed in win.  If syncok is called with second
       argument TRUE then wsyncup is called automatically whenev-
       er there is a change in the window.


wsyncdown

       The  wsyncdown  routine  touches each location in win that
       has been touched in any of  its  ancestor  windows.   This
       routine  is  called by wrefresh, so it should almost never
       be necessary to call it manually.


wcursyncup

       The routine wcursyncup updates the current cursor position
       of  all the ancestors of the window to reflect the current
       cursor position of the window.


RETURN VALUE

       Routines that return an integer return the integer ERR up-
       on  failure  and OK (SVr4 only specifies "an integer value
       other than ERR") upon successful completion.

       Routines that return pointers return NULL on error.

       X/Open defines no error conditions.  In  this  implementa-
       tion

       delwin
            returns an error if the window pointer is null, or if
            the window is the parent of another window.

       derwin
            returns an error if  the  parent  window  pointer  is
            null,  or  if  any  of its ordinates or dimensions is
            negative, or if the resulting window does not fit in-
            side the parent window.

       dupwin
            returns an error if the window pointer is null.

            This implementation also maintains a list of windows,
            and checks that the pointer passed to delwin  is  one
            that it created, returning an error if it was not..

       mvderwin
            returns an error if the window pointer is null, or if
            some part of the window would be placed off-screen.

       mvwin
            returns an error if the window pointer is null, or if
            the  window  is  really a pad, or if some part of the
            window would be placed off-screen.

       newwin
            will fail if either of  its  beginning  ordinates  is
            negative, or if either the number of lines or columns
            is negative.

       syncok
            returns an error if the window pointer is null.

       subwin
            returns an error if  the  parent  window  pointer  is
            null,  or  if  any  of its ordinates or dimensions is
            negative, or if the resulting window does not fit in-
            side the parent window.

       The  functions which return a window pointer may also fail
       if there is insufficient memory for its  data  structures.
       Any  of  these  functions  will fail if the screen has not
       been initialized, i.e., with initscr or newterm.


NOTES

       If many small changes are made to the window, the  wsyncup
       option could degrade performance.

       Note that syncok may be a macro.


BUGS

       The  subwindow  functions (subwin, derwin, mvderwin, wsyn-
       cup, wsyncdown, wcursyncup, syncok) are flaky, incomplete-
       ly implemented, and not well tested.

       The  System  V  curses documentation is very unclear about
       what wsyncup and wsyncdown actually do.  It seems to imply
       that  they  are only supposed to touch exactly those lines
       that are affected by ancestor changes.  The language here,
       and  the  behavior  of  the curses implementation, is pat-
       terned on the XPG4 curses standard.  The weaker XPG4  spec
       may result in slower updates.


PORTABILITY

       The  XSI  Curses  standard,  Issue 4 describes these func-
       tions.


SEE ALSO

       curses(3x), curs_refresh(3x),  curs_touch(3x),  curs_vari-
       ables(3x)



                                                        curs_window(3x)
ncurses-6.0-20160213/doc/html/man/curs_mouse.3x.html0000644000175100001440000004714612653207005020357 0ustar tomusers curs_mouse 3x

curs_mouse 3x

curs_mouse(3x)                                           curs_mouse(3x)




NAME

       has_mouse, getmouse, ungetmouse, mousemask, wenclose,
       mouse_trafo, wmouse_trafo, mouseinterval - mouse interface
       through curses


SYNOPSIS

       #include <curses.h>

       typedef unsigned long mmask_t;

       typedef struct {
           short id;         /* ID to distinguish multiple devices */
           int x, y, z;      /* event coordinates */
           mmask_t bstate;   /* button state bits */
       } MEVENT;

       bool has_mouse(void);
       int getmouse(MEVENT *event);
       int ungetmouse(MEVENT *event);
       mmask_t mousemask(mmask_t newmask, mmask_t *oldmask);
       bool wenclose(const WINDOW *win, int y, int x);
       bool mouse_trafo(int* pY, int* pX, bool to_screen);
       bool wmouse_trafo(const WINDOW* win, int* pY, int* pX,
            bool to_screen);
       int mouseinterval(int erval);


DESCRIPTION

       These  functions provide an interface to mouse events from
       ncurses(3x).  Mouse events are  represented  by  KEY_MOUSE
       pseudo-key values in the wgetch input stream.


mousemask

       To  make mouse events visible, use the mousemask function.
       This will set the mouse events to  be  reported.   By  de-
       fault,  no  mouse  events are reported.  The function will
       return a mask to indicate which  of  the  specified  mouse
       events  can be reported; on complete failure it returns 0.
       If oldmask is non-NULL, this function fills the  indicated
       location  with  the  previous  value of the given window's
       mouse event mask.

       As a side effect, setting a zero mousemask  may  turn  off
       the  mouse pointer; setting a nonzero mask may turn it on.
       Whether this happens is device-dependent.


Mouse events

       Here are the mouse event type masks which may be defined:

       Name                     Description
       ---------------------------------------------------------------------
       BUTTON1_PRESSED          mouse button 1 down
       BUTTON1_RELEASED         mouse button 1 up
       BUTTON1_CLICKED          mouse button 1 clicked
       BUTTON1_DOUBLE_CLICKED   mouse button 1 double clicked
       BUTTON1_TRIPLE_CLICKED   mouse button 1 triple clicked
       ---------------------------------------------------------------------
       BUTTON2_PRESSED          mouse button 2 down
       BUTTON2_RELEASED         mouse button 2 up
       BUTTON2_CLICKED          mouse button 2 clicked
       BUTTON2_DOUBLE_CLICKED   mouse button 2 double clicked


       BUTTON2_TRIPLE_CLICKED   mouse button 2 triple clicked
       ---------------------------------------------------------------------
       BUTTON3_PRESSED          mouse button 3 down
       BUTTON3_RELEASED         mouse button 3 up
       BUTTON3_CLICKED          mouse button 3 clicked
       BUTTON3_DOUBLE_CLICKED   mouse button 3 double clicked
       BUTTON3_TRIPLE_CLICKED   mouse button 3 triple clicked
       ---------------------------------------------------------------------
       BUTTON4_PRESSED          mouse button 4 down
       BUTTON4_RELEASED         mouse button 4 up
       BUTTON4_CLICKED          mouse button 4 clicked
       BUTTON4_DOUBLE_CLICKED   mouse button 4 double clicked
       BUTTON4_TRIPLE_CLICKED   mouse button 4 triple clicked
       ---------------------------------------------------------------------
       BUTTON5_PRESSED          mouse button 5 down
       BUTTON5_RELEASED         mouse button 5 up
       BUTTON5_CLICKED          mouse button 5 clicked
       BUTTON5_DOUBLE_CLICKED   mouse button 5 double clicked
       BUTTON5_TRIPLE_CLICKED   mouse button 5 triple clicked
       ---------------------------------------------------------------------
       BUTTON_SHIFT             shift was down during button state change
       BUTTON_CTRL              control was down during button state change
       BUTTON_ALT               alt was down during button state change
       ALL_MOUSE_EVENTS         report all button state changes
       REPORT_MOUSE_POSITION    report mouse movement
       ---------------------------------------------------------------------


getmouse

       Once a class of mouse events has been made  visible  in  a
       window, calling the wgetch function on that window may re-
       turn KEY_MOUSE as an indicator that a mouse event has been
       queued.   To read the event data and pop the event off the
       queue, call getmouse.  This function will return OK  if  a
       mouse  event  is actually visible in the given window, ERR
       otherwise.  When getmouse returns OK, the  data  deposited
       as  y  and  x  in  the event structure coordinates will be
       screen-relative character-cell coordinates.  The  returned
       state  mask  will have exactly one bit set to indicate the
       event type.  The corresponding data in the queue is marked
       invalid.   A subsequent call to getmouse will retrieve the
       next older item from the queue.


ungetmouse

       The ungetmouse function behaves  analogously  to  ungetch.
       It  pushes a KEY_MOUSE event onto the input queue, and as-
       sociates with that event the given state data and  screen-
       relative character-cell coordinates.


wenclose

       The  wenclose  function  tests  whether  a  given  pair of
       screen-relative character-cell coordinates is enclosed  by
       a  given  window, returning TRUE if it is and FALSE other-
       wise.  It is useful for determining  what  subset  of  the
       screen windows enclose the location of a mouse event.


wmouse_trafo

       The wmouse_trafo function transforms a given pair of coor-
       dinates from stdscr-relative  coordinates  to  coordinates
       relative to the given window or vice versa.  The resulting
       stdscr-relative coordinates are not  always  identical  to
       window-relative  coordinates  due  to the mechanism to re-
       serve lines on top or bottom of the screen for other  pur-
       poses  (see  the  ripoffline and slk_init calls, for exam-
       ple).

       o   If the parameter to_screen is TRUE, the  pointers  pY,
           pX must reference the coordinates of a location inside
           the window win.  They are converted to window-relative
           coordinates and returned through the pointers.  If the
           conversion was successful, the function returns TRUE.

       o   If one of the parameters was NULL or the  location  is
           not inside the window, FALSE is returned.

       o   If to_screen is FALSE, the pointers pY, pX must refer-
           ence window-relative coordinates.  They are  converted
           to  stdscr-relative  coordinates if the window win en-
           closes this point.  In this case the function  returns
           TRUE.

       o   If  one  of the parameters is NULL or the point is not
           inside the window, FALSE is returned.  The  referenced
           coordinates are only replaced by the converted coordi-
           nates if the transformation was successful.


mouse_trafo

       The mouse_trafo function performs the same translation  as
       wmouse_trafo, using stdscr for win.


mouseinterval

       The mouseinterval function sets the maximum time (in thou-
       sands of a second) that can elapse between press  and  re-
       lease  events  for  them to be recognized as a click.  Use
       mouseinterval(0) to disable click resolution.  This  func-
       tion returns the previous interval value.  Use mouseinter-
       val(-1) to obtain the interval without altering  it.   The
       default is one sixth of a second.


has_mouse

       The  has_mouse  function  returns TRUE if the mouse driver
       has been successfully initialized.

       Note that mouse events will be ignored when  input  is  in
       cooked mode, and will cause an error beep when cooked mode
       is being simulated in a window by a function such as  get-
       str that expects a linefeed for input-loop termination.


RETURN VALUE

       getmouse  and ungetmouse return the integer ERR upon fail-
       ure or OK upon successful completion:

          getmouse
               returns an error.

          o   If no mouse driver was initialized, or if the  mask
              parameter is zero,

          o   It  also  returns an error if no more events remain
              in the queue.

          ungetmouse
               returns an error if the FIFO is full.

       mousemask returns the mask of reportable events.

       mouseinterval returns the previous interval value,  unless
       the  terminal  was  not initialized.  In that case, it re-
       turns the maximum interval value (166).

       wenclose and wmouse_trafo are boolean functions  returning
       TRUE or FALSE depending on their test result.


PORTABILITY

       These  calls  were  designed  for ncurses(3x), and are not
       found in SVr4 curses, 4.4BSD curses, or any other previous
       version of curses.

       The feature macro NCURSES_MOUSE_VERSION is provided so the
       preprocessor can be used to test  whether  these  features
       are  present.   If  the interface is changed, the value of
       NCURSES_MOUSE_VERSION will be incremented.   These  values
       for  NCURSES_MOUSE_VERSION may be specified when configur-
       ing ncurses:

          1  has definitions for reserved events.  The mask  uses
             28 bits.

          2  adds  definitions  for button 5, removes the defini-
             tions for reserved events.  The mask uses 29 bits.

       The order of the MEVENT structure members is  not  guaran-
       teed.   Additional fields may be added to the structure in
       the future.

       Under ncurses(3x), these calls are implemented  using  ei-
       ther  xterm's built-in mouse-tracking API or platform-spe-
       cific drivers including

          o   Alessandro Rubini's gpm server

          o   FreeBSD sysmouse

          o   OS/2 EMX

       If you  are  using  an  unsupported  configuration,  mouse
       events  will not be visible to ncurses(3x) (and the mouse-
       mask function will always return 0).

       If the terminfo entry contains a XM string, this  is  used
       in  the xterm mouse driver to control the way the terminal
       is initialized for mouse operation.  The default, if XM is
       not found, corresponds to private mode 1000 of xterm:

          \E[?1000%?%p1%{1}%=%th%el%;

       The z member in the event structure is not presently used.
       It is intended for use with touch screens  (which  may  be
       pressure-sensitive)   or   with   3D-mice/trackballs/power
       gloves.

       The  ALL_MOUSE_EVENTS   class   does   not   include   RE-
       PORT_MOUSE_POSITION.   They are distinct.  For example, in
       xterm, wheel/scrolling mice send position reports as a se-
       quence  of presses of buttons 4 or 5 without matching but-
       ton-releases.


BUGS

       Mouse events under xterm will not in fact be ignored  dur-
       ing  cooked  mode, if they have been enabled by mousemask.
       Instead, the xterm mouse report sequence  will  appear  in
       the string read.

       Mouse events under xterm will not be detected correctly in
       a window with its keypad bit off, since  they  are  inter-
       preted  as  a  variety of function key.  Your terminfo de-
       scription should have kmous set to "\E[M"  (the  beginning
       of  the response from xterm for mouse clicks).  Other val-
       ues for kmous are permitted, but under  the  same  assump-
       tion, i.e., it is the beginning of the response.

       Because  there  are  no  standard  terminal responses that
       would serve to identify terminals which support the  xterm
       mouse  protocol,  ncurses assumes that if your $TERM envi-
       ronment variable contains "xterm", or kmous is defined  in
       the terminal description, then the terminal may send mouse
       events.


SEE ALSO

       curses(3x),  curs_kernel(3x),   curs_slk(3x),   curs_vari-
       ables(3x).



                                                         curs_mouse(3x)
ncurses-6.0-20160213/doc/html/man/mitem_userptr.3x.html0000644000175100001440000001213612653207011021056 0ustar tomusers mitem_userptr 3x

mitem_userptr 3x

mitem_userptr(3x)                                     mitem_userptr(3x)




NAME

       set_item_userptr,  item_userptr  -  associate  application
       data with a menu item


SYNOPSIS

       #include <menu.h>
       int set_item_userptr(ITEM *item, void *userptr);
       void *item_userptr(const ITEM *item);


DESCRIPTION

       Every menu item has a field  that  can  be  used  to  hold
       application-specific  data  (that is, the menu-driver code
       leaves it alone).  These functions get and set that field.


RETURN VALUE

       The function  item_userptr  returns  a  pointer  (possibly
       NULL).  It does not set errno.

       The set_item_userptr always returns E_OK (success).


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V  menu  library.   They
       were not supported on Version 7 or BSD versions.

       The user pointer is a void pointer.  We chose not to leave
       it as a char pointer for SVr4 compatibility.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                      mitem_userptr(3x)
ncurses-6.0-20160213/doc/html/man/curs_print.3x.html0000644000175100001440000001322512653207005020352 0ustar tomusers curs_print 3x

curs_print 3x

curs_print(3x)                                           curs_print(3x)




NAME

       mcprint - ship binary data to printer


SYNOPSIS

       #include <curses.h>

       int mcprint(char *data, int len);


DESCRIPTION

       This  function  uses the mc5p or mc4 and mc5 capabilities,
       if they are present, to  ship  given  data  to  a  printer
       attached to the terminal.

       Note  that  the mcprint code has no way to do flow control
       with the printer or to know how  much  buffering  it  has.
       Your  application  is  responsible for keeping the rate of
       writes to the printer below its continuous throughput rate
       (typically  about  half  of its nominal cps rating).  Dot-
       matrix printers and 6-page-per-minute lasers can typically
       handle  80cps,  so a good conservative rule of thumb is to
       sleep for a second after shipping each 80-character line.


RETURN VALUE

       The mcprint function returns ERR if  the  write  operation
       aborted for some reason.  In this case, errno will contain
       either an error associated with write(2)  or  one  of  the
       following:

       ENODEV
            Capabilities for printer redirection do not exist.

       ENOMEM
            Couldn't  allocate  sufficient  memory  to buffer the
            printer write.

       When mcprint succeeds, it returns the number of characters
       actually sent to the printer.


PORTABILITY

       The  mcprint call was designed for ncurses(3x), and is not
       found in SVr4 curses, 4.4BSD curses, or any other previous
       version of curses.


BUGS

       Padding  in the mc5p, mc4 and mc5 capabilities will not be
       interpreted.


SEE ALSO

       curses(3x)



                                                         curs_print(3x)
ncurses-6.0-20160213/doc/html/man/menu_mark.3x.html0000644000175100001440000001357112653207011020141 0ustar tomusers menu_mark 3x

menu_mark 3x

menu_mark(3x)                                             menu_mark(3x)




NAME

       set_menu_mark,  menu_mark  -  get  and  set  the menu mark
       string


SYNOPSIS

       #include <menu.h>
       int set_menu_mark(MENU *menu, const char *mark);
       const char *menu_mark(const MENU *menu);


DESCRIPTION

       In order to make menu selections visible on  older  termi-
       nals  without  highlighting  or color capability, the menu
       library marks selected items  in  a  menu  with  a  prefix
       string.

       The  function  set_menu_mark  sets the mark string for the
       given menu.  Calling set_menu_mark with a null  menu  item
       will  abolish  the  mark  string.   Note that changing the
       length of the mark string for a menu  while  the  menu  is
       posted is likely to produce unhelpful behavior.

       The  default string is "-" (a dash). Calling set_menu_mark
       with a non-NULL menu argument will change this default.

       The function menu_mark returns the menu's mark string  (or
       NULL if there is none).


RETURN VALUE

       The  function  menu_mark  returns  a pointer (which may be
       NULL).  It does not set errno.

       The function set_menu_mark may return the following  error
       codes:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                          menu_mark(3x)
ncurses-6.0-20160213/doc/html/man/curs_ins_wstr.3x.html0000644000175100001440000002014112653207004021060 0ustar tomusers curs_ins_wstr 3x

curs_ins_wstr 3x

curs_ins_wstr(3x)                                     curs_ins_wstr(3x)




NAME

       ins_wstr, ins_nwstr, wins_wstr, wins_nwstr, mvins_wstr,
       mvins_nwstr, mvwins_wstr, mvwins_nwstr - insert a wide-
       character string into a curses window


SYNOPSIS

       #include <curses.h>

       int ins_wstr(const wchar_t *wstr);
       int ins_nwstr(const wchar_t *wstr, int n);
       int wins_wstr(WINDOW *win, const wchar_t *wstr);
       int wins_nwstr(WINDOW *win, const wchar_t *wstr, int n);
       int mvins_wstr(int y, int x, const wchar_t *wstr);
       int mvins_nwstr(int y, int x, const wchar_t *wstr, int n);
       int mvwins_wstr(WINDOW *win, int y, int x, const wchar_t *wstr);
       int mvwins_nwstr(WINDOW *win, int y, int x, const wchar_t *wstr, int n);


DESCRIPTION

       These  routines insert a wchar_t character string (as many
       characters as will fit on the line) before  the  character
       under the cursor.  All characters to the right of the cur-
       sor are shifted right, with the possibility of the  right-
       most  characters  on  the line being lost.  No wrapping is
       performed.  The cursor position  does  not  change  (after
       moving  to  y, x, if specified).  The four routines with n
       as the last argument insert a leading substring of at most
       n  wchar_t  characters.   If  n is less than 1, the entire
       string is inserted.

       If a character in wstr is a tab, newline, carriage  return
       or backspace, the cursor is moved appropriately within the
       window.  A newline also does  a  clrtoeol  before  moving.
       Tabs  are  considered  to be at every eighth column.  If a
       character in wstr is  another  control  character,  it  is
       drawn  in the ^X notation.  Calling win_wch after adding a
       control character (and moving to it,  if  necessary)  does
       not  return  the  control character, but instead returns a
       character in the ^-representation of the  control  charac-
       ter.


NOTES

       Note that all but wins_nwstr may be macros.

       If the first character in the string is a nonspacing char-
       acter, these functions will fail.   XSI  does  not  define
       what  will happen if a nonspacing character follows a con-
       trol character.


RETURN VALUE

       Upon successful completion,  these  functions  return  OK.
       Otherwise, they return ERR.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


SEE ALSO

       curses(3x),        curs_insstr(3x),       curs_in_wch(3x),
       curs_ins_wch(3x).



                                                      curs_ins_wstr(3x)
ncurses-6.0-20160213/doc/html/man/curs_overlay.3x.html0000644000175100001440000001642112653207005020700 0ustar tomusers curs_overlay 3x

curs_overlay 3x

curs_overlay(3x)                                       curs_overlay(3x)




NAME

       overlay, overwrite, copywin - overlay and manipulate
       overlapped curses windows


SYNOPSIS

       #include <curses.h>

       int overlay(const WINDOW *srcwin, WINDOW *dstwin);
       int overwrite(const WINDOW *srcwin, WINDOW *dstwin);
       int copywin(const  WINDOW  *srcwin,  WINDOW  *dstwin,  int
       sminrow,
             int smincol, int dminrow, int dmincol, int dmaxrow,
             int dmaxcol, int overlay);


DESCRIPTION


overlay, overwrite

       The  overlay  and overwrite routines overlay srcwin on top
       of dstwin.  scrwin and dstwin are not required to  be  the
       same  size;  only  text  where  the two windows overlap is
       copied.  The difference is that overlay is non-destructive
       (blanks are not copied) whereas overwrite is destructive.


copywin

       The  copywin  routine provides a finer granularity of con-
       trol over the overlay and overwrite routines.  As  in  the
       prefresh routine, a rectangle is specified in the destina-
       tion window, (dminrow, dmincol)  and  (dmaxrow,  dmaxcol),
       and  the  upper-left-corner coordinates of the source win-
       dow, (sminrow, smincol).  If the argument overlay is true,
       then copying is non-destructive, as in overlay.


RETURN VALUE

       Routines  that  return an integer return ERR upon failure,
       and OK (SVr4 only specifies "an integer value  other  than
       ERR") upon successful completion.

       X/Open  defines  no error conditions.  In this implementa-
       tion, copywin, overlay and overwrite return  an  error  if
       either of the window pointers are null, or if some part of
       the window would be placed off-screen.


NOTES

       Note that overlay and overwrite may be macros.


PORTABILITY

       The XSI Curses standard, Issue 4 describes these functions
       (adding the const qualifiers).  It further specifies their
       behavior in the presence of characters with multibyte ren-
       ditions (not yet supported in this implementation).


SEE ALSO

       curses(3x), curs_pad(3x), curs_refresh(3x)



                                                       curs_overlay(3x)
ncurses-6.0-20160213/doc/html/man/ncurses.3x.html0000644000175100001440000027445212653207012017655 0ustar tomusers ncurses 3x

ncurses 3x

ncurses(3x)                                                 ncurses(3x)




NAME

       ncurses - CRT screen handling and optimization package


SYNOPSIS

       #include <curses.h>


DESCRIPTION

       The  ncurses  library  routines  give the user a terminal-
       independent method of updating character screens with rea-
       sonable optimization.  This implementation is "new curses"
       (ncurses) and is the approved replacement for 4.4BSD clas-
       sic  curses,  which has been discontinued.  This describes
       ncurses version 6.0 (patch 20160130).

       The ncurses library emulates the curses library of  System
       V  Release  4  UNIX,  and  XPG4 (X/Open Portability Guide)
       curses (also known as XSI curses).  XSI stands for  X/Open
       System  Interfaces  Extension.   The  ncurses  library  is
       freely redistributable in source form.   Differences  from
       the  SVr4  curses  are summarized under the EXTENSIONS and
       PORTABILITY sections below and described in detail in  the
       respective  EXTENSIONS,  PORTABILITY  and BUGS sections of
       individual man pages.

       The ncurses library also provides many useful  extensions,
       i.e.,  features  which  cannot  be implemented by a simple
       add-on library but which require access to  the  internals
       of the library.

       A  program  using  these  routines must be linked with the
       -lncurses option, or (if it has been generated)  with  the
       debugging  library  -lncurses_g.   (Your system integrator
       may also have installed these libraries  under  the  names
       -lcurses and -lcurses_g.)  The ncurses_g library generates
       trace logs (in a file called 'trace' in the current direc-
       tory)  that describe curses actions.  See also the section
       on ALTERNATE CONFIGURATIONS.

       The ncurses package supports: overall screen,  window  and
       pad manipulation; output to windows and pads; reading ter-
       minal input; control over terminal and  curses  input  and
       output  options; environment query routines; color manipu-
       lation; use of soft label keys; terminfo capabilities; and
       access to low-level terminal-manipulation routines.


Initialization

       The  library uses the locale which the calling program has
       initialized.  That is normally done with setlocale:

             setlocale(LC_ALL, "");

       If the locale is not initialized, the library assumes that
       characters  are  printable  as in ISO-8859-1, to work with
       certain legacy programs.  You should initialize the locale
       and  not  rely on specific details of the library when the
       locale has not been setup.

       The function initscr or newterm must be called to initial-
       ize the library before any of the other routines that deal
       with windows and screens are  used.   The  routine  endwin
       must be called before exiting.

       To  get  character-at-a-time  input  without echoing (most
       interactive, screen oriented programs want this), the fol-
       lowing sequence should be used:

             initscr(); cbreak(); noecho();

       Most programs would additionally use the sequence:

             nonl();
             intrflush(stdscr, FALSE);
             keypad(stdscr, TRUE);

       Before  a curses program is run, the tab stops of the ter-
       minal should be set and  its  initialization  strings,  if
       defined,  must  be  output.  This can be done by executing
       the tput init command after the shell environment variable
       TERM  has  been  exported.  tset(1) is usually responsible
       for doing this.  [See terminfo(5) for further details.]


Datatypes

       The ncurses library permits manipulation  of  data  struc-
       tures,  called  windows,  which  can be thought of as two-
       dimensional arrays of characters representing all or  part
       of a CRT screen.  A default window called stdscr, which is
       the size of the terminal screen, is supplied.  Others  may
       be created with newwin.

       Note  that  curses  does  not  handle overlapping windows,
       that's done by the panel(3x) library.  This means that you
       can either use stdscr or divide the screen into tiled win-
       dows and not using stdscr at all.   Mixing  the  two  will
       result in unpredictable, and undesired, effects.

       Windows are referred to by variables declared as WINDOW *.
       These  data  structures  are  manipulated  with   routines
       described  here and elsewhere in the ncurses manual pages.
       Among those, the most basic routines are move  and  addch.
       More  general versions of these routines are included with
       names beginning with w, allowing the  user  to  specify  a
       window.  The routines not beginning with w affect stdscr.

       After  using  routines  to manipulate a window, refresh is
       called, telling curses to make the user's CRT screen  look
       like  stdscr.   The characters in a window are actually of
       type chtype, (character and attribute data) so that  other
       information  about  the  character may also be stored with
       each character.

       Special windows  called  pads  may  also  be  manipulated.
       These are windows which are not constrained to the size of
       the screen and whose contents need not be completely  dis-
       played.  See curs_pad(3x) for more information.

       In  addition  to  drawing  characters on the screen, video
       attributes and colors may be supported, causing the  char-
       acters  to show up in such modes as underlined, in reverse
       video, or in color on terminals that support such  display
       enhancements.  Line drawing characters may be specified to
       be output.  On input, curses is  also  able  to  translate
       arrow  and  function  keys  that transmit escape sequences
       into single values.  The video  attributes,  line  drawing
       characters,   and  input  values  use  names,  defined  in
       <curses.h>, such as A_REVERSE, ACS_HLINE, and KEY_LEFT.


Environment variables

       If the environment variables LINES and COLUMNS are set, or
       if  the program is executing in a window environment, line
       and column information in the  environment  will  override
       information read by terminfo.  This would affect a program
       running in an AT&T 630 layer, for example, where the  size
       of a screen is changeable (see ENVIRONMENT).

       If  the environment variable TERMINFO is defined, any pro-
       gram using curses checks for a local  terminal  definition
       before  checking  in  the standard place.  For example, if
       TERM is set to att4424, then the compiled terminal defini-
       tion is found in

             /usr/share/terminfo/a/att4424.

       (The a is copied from the first letter of att4424 to avoid
       creation of huge directories.)  However,  if  TERMINFO  is
       set to $HOME/myterms, curses first checks

             $HOME/myterms/a/att4424,

       and if that fails, it then checks

             /usr/share/terminfo/a/att4424.

       This  is useful for developing experimental definitions or
       when write permission in /usr/share/terminfo is not avail-
       able.

       The  integer  variables  LINES  and  COLS  are  defined in
       <curses.h> and will be filled in by initscr with the  size
       of the screen.  The constants TRUE and FALSE have the val-
       ues 1 and 0, respectively.

       The curses routines also  define  the  WINDOW  *  variable
       curscr which is used for certain low-level operations like
       clearing and redrawing a screen containing  garbage.   The
       curscr can be used in only a few routines.


Routine and Argument Names

       Many  curses routines have two or more versions.  The rou-
       tines prefixed with w require a window argument.  The rou-
       tines prefixed with p require a pad argument.  Those with-
       out a prefix generally use stdscr.

       The routines prefixed with mv require a y and x coordinate
       to  move to before performing the appropriate action.  The
       mv routines imply a call to move before the  call  to  the
       other  routine.  The coordinate y always refers to the row
       (of the window), and x always refers to the  column.   The
       upper left-hand corner is always (0,0), not (1,1).

       The routines prefixed with mvw take both a window argument
       and x and y coordinates.  The window  argument  is  always
       specified before the coordinates.

       In  each  case, win is the window affected, and pad is the
       pad affected; win and pad are always pointers to type WIN-
       DOW.

       Option setting routines require a Boolean flag bf with the
       value TRUE or FALSE; bf is always of type bool.   Most  of
       the  data types used in the library routines, such as WIN-
       DOW, SCREEN, bool, and chtype are defined  in  <curses.h>.
       Types  used for the terminfo routines such as TERMINAL are
       defined in <term.h>.

       This manual page describes functions which may  appear  in
       any  configuration  of  the library.  There are two common
       configurations of the library:

          ncurses
               the "normal" library, which handles 8-bit  charac-
               ters.   The  normal (8-bit) library stores charac-
               ters combined with attributes in chtype data.

               Attributes alone (no corresponding character)  may
               be stored in chtype or the equivalent attr_t data.
               In either case, the data is  stored  in  something
               like an integer.

               Each  cell  (row and column) in a WINDOW is stored
               as a chtype.

          ncursesw
               the so-called "wide" library, which handles multi-
               byte characters (see the section on ALTERNATE CON-
               FIGURATIONS).  The "wide" library includes all  of
               the  calls  from  the  "normal"  library.  It adds
               about one third more calls using data types  which
               store multibyte characters:

               cchar_t
                    corresponds  to  chtype.   However  it  is  a
                    structure, because more data is  stored  than
                    can  fit into an integer.  The characters are
                    large enough to require a full integer  value
                    -  and  there  may be more than one character
                    per cell.  The video attributes and color are
                    stored in separate fields of the structure.

                    Each  cell  (row  and  column) in a WINDOW is
                    stored as a cchar_t.

               wchar_t
                    stores a "wide" character.  Like chtype, this
                    may be an integer.

               wint_t
                    stores  a  wchar_t  or  WEOF  - not the same,
                    though both may have the same size.

               The "wide" library provides  new  functions  which
               are   analogous   to  functions  in  the  "normal"
               library.   There  is  a  naming  convention  which
               relates  many  of the normal/wide variants: a "_w"
               is inserted into the name.   For  example,  waddch
               becomes wadd_wch.


Routine Name Index

       The following table lists each curses routine and the name
       of the manual page on which  it  is  described.   Routines
       flagged  with  `*'  are ncurses-specific, not described by
       XPG4 or present in SVr4.

              curses Routine Name     Manual Page Name
              --------------------------------------------
              COLOR_PAIR              curs_color(3x)
              PAIR_NUMBER             curs_attr(3x)
              _nc_free_and_exit       curs_memleaks(3x)*
              _nc_freeall             curs_memleaks(3x)*
              _nc_tracebits           curs_trace(3x)*
              _traceattr              curs_trace(3x)*
              _traceattr2             curs_trace(3x)*
              _tracechar              curs_trace(3x)*

              _tracechtype            curs_trace(3x)*
              _tracechtype2           curs_trace(3x)*
              _tracedump              curs_trace(3x)*
              _tracef                 curs_trace(3x)*
              _tracemouse             curs_trace(3x)*
              add_wch                 curs_add_wch(3x)
              add_wchnstr             curs_add_wchstr(3x)
              add_wchstr              curs_add_wchstr(3x)
              addch                   curs_addch(3x)
              addchnstr               curs_addchstr(3x)
              addchstr                curs_addchstr(3x)
              addnstr                 curs_addstr(3x)
              addnwstr                curs_addwstr(3x)
              addstr                  curs_addstr(3x)
              addwstr                 curs_addwstr(3x)
              assume_default_colors   default_colors(3x)*
              attr_get                curs_attr(3x)
              attr_off                curs_attr(3x)
              attr_on                 curs_attr(3x)
              attr_set                curs_attr(3x)
              attroff                 curs_attr(3x)
              attron                  curs_attr(3x)
              attrset                 curs_attr(3x)
              baudrate                curs_termattrs(3x)
              beep                    curs_beep(3x)
              bkgd                    curs_bkgd(3x)
              bkgdset                 curs_bkgd(3x)
              bkgrnd                  curs_bkgrnd(3x)
              bkgrndset               curs_bkgrnd(3x)
              border                  curs_border(3x)
              border_set              curs_border_set(3x)
              box                     curs_border(3x)
              box_set                 curs_border_set(3x)
              can_change_color        curs_color(3x)
              cbreak                  curs_inopts(3x)
              chgat                   curs_attr(3x)
              clear                   curs_clear(3x)
              clearok                 curs_outopts(3x)
              clrtobot                curs_clear(3x)
              clrtoeol                curs_clear(3x)
              color_content           curs_color(3x)
              color_set               curs_attr(3x)
              copywin                 curs_overlay(3x)
              curs_set                curs_kernel(3x)
              curses_version          curs_extend(3x)*
              def_prog_mode           curs_kernel(3x)
              def_shell_mode          curs_kernel(3x)
              define_key              define_key(3x)*
              del_curterm             curs_terminfo(3x)
              delay_output            curs_util(3x)
              delch                   curs_delch(3x)
              deleteln                curs_deleteln(3x)
              delscreen               curs_initscr(3x)
              delwin                  curs_window(3x)
              derwin                  curs_window(3x)
              doupdate                curs_refresh(3x)
              dupwin                  curs_window(3x)
              echo                    curs_inopts(3x)
              echo_wchar              curs_add_wch(3x)
              echochar                curs_addch(3x)
              endwin                  curs_initscr(3x)
              erase                   curs_clear(3x)
              erasechar               curs_termattrs(3x)
              erasewchar              curs_termattrs(3x)
              filter                  curs_util(3x)
              flash                   curs_beep(3x)

              flushinp                curs_util(3x)
              get_wch                 curs_get_wch(3x)
              get_wstr                curs_get_wstr(3x)
              getattrs                curs_attr(3x)
              getbegx                 curs_legacy(3x)*
              getbegy                 curs_legacy(3x)*
              getbegyx                curs_getyx(3x)
              getbkgd                 curs_bkgd(3x)
              getbkgrnd               curs_bkgrnd(3x)
              getcchar                curs_getcchar(3x)
              getch                   curs_getch(3x)
              getcurx                 curs_legacy(3x)*
              getcury                 curs_legacy(3x)*
              getmaxx                 curs_legacy(3x)*
              getmaxy                 curs_legacy(3x)*
              getmaxyx                curs_getyx(3x)
              getmouse                curs_mouse(3x)*
              getn_wstr               curs_get_wstr(3x)
              getnstr                 curs_getstr(3x)
              getparx                 curs_legacy(3x)*
              getpary                 curs_legacy(3x)*
              getparyx                curs_getyx(3x)
              getstr                  curs_getstr(3x)
              getsyx                  curs_kernel(3x)
              getwin                  curs_util(3x)
              getyx                   curs_getyx(3x)
              halfdelay               curs_inopts(3x)
              has_colors              curs_color(3x)
              has_ic                  curs_termattrs(3x)
              has_il                  curs_termattrs(3x)
              has_key                 curs_getch(3x)*
              hline                   curs_border(3x)
              hline_set               curs_border_set(3x)
              idcok                   curs_outopts(3x)
              idlok                   curs_outopts(3x)
              immedok                 curs_outopts(3x)
              in_wch                  curs_in_wch(3x)
              in_wchnstr              curs_in_wchstr(3x)
              in_wchstr               curs_in_wchstr(3x)
              inch                    curs_inch(3x)
              inchnstr                curs_inchstr(3x)
              inchstr                 curs_inchstr(3x)
              init_color              curs_color(3x)
              init_pair               curs_color(3x)
              initscr                 curs_initscr(3x)
              innstr                  curs_instr(3x)
              innwstr                 curs_inwstr(3x)
              ins_nwstr               curs_ins_wstr(3x)
              ins_wch                 curs_ins_wch(3x)
              ins_wstr                curs_ins_wstr(3x)
              insch                   curs_insch(3x)
              insdelln                curs_deleteln(3x)
              insertln                curs_deleteln(3x)
              insnstr                 curs_insstr(3x)
              insstr                  curs_insstr(3x)
              instr                   curs_instr(3x)
              intrflush               curs_inopts(3x)
              inwstr                  curs_inwstr(3x)
              is_cleared              curs_opaque(3x)*
              is_idcok                curs_opaque(3x)*
              is_idlok                curs_opaque(3x)*
              is_immedok              curs_opaque(3x)*
              is_keypad               curs_opaque(3x)*
              is_leaveok              curs_opaque(3x)*
              is_linetouched          curs_touch(3x)
              is_nodelay              curs_opaque(3x)*

              is_notimeout            curs_opaque(3x)*
              is_pad                  curs_opaque(3x)*
              is_scrollok             curs_opaque(3x)*
              is_subwin               curs_opaque(3x)*
              is_syncok               curs_opaque(3x)*
              is_term_resized         resizeterm(3x)*
              is_wintouched           curs_touch(3x)
              isendwin                curs_initscr(3x)
              key_defined             key_defined(3x)*
              key_name                curs_util(3x)
              keybound                keybound(3x)*
              keyname                 curs_util(3x)
              keyok                   keyok(3x)*
              keypad                  curs_inopts(3x)
              killchar                curs_termattrs(3x)
              killwchar               curs_termattrs(3x)
              leaveok                 curs_outopts(3x)
              longname                curs_termattrs(3x)
              mcprint                 curs_print(3x)*
              meta                    curs_inopts(3x)
              mouse_trafo             curs_mouse(3x)*
              mouseinterval           curs_mouse(3x)*
              mousemask               curs_mouse(3x)*
              move                    curs_move(3x)
              mvadd_wch               curs_add_wch(3x)
              mvadd_wchnstr           curs_add_wchstr(3x)
              mvadd_wchstr            curs_add_wchstr(3x)
              mvaddch                 curs_addch(3x)
              mvaddchnstr             curs_addchstr(3x)
              mvaddchstr              curs_addchstr(3x)
              mvaddnstr               curs_addstr(3x)
              mvaddnwstr              curs_addwstr(3x)
              mvaddstr                curs_addstr(3x)
              mvaddwstr               curs_addwstr(3x)
              mvchgat                 curs_attr(3x)
              mvcur                   curs_terminfo(3x)
              mvdelch                 curs_delch(3x)
              mvderwin                curs_window(3x)
              mvget_wch               curs_get_wch(3x)
              mvget_wstr              curs_get_wstr(3x)
              mvgetch                 curs_getch(3x)
              mvgetn_wstr             curs_get_wstr(3x)
              mvgetnstr               curs_getstr(3x)
              mvgetstr                curs_getstr(3x)
              mvhline                 curs_border(3x)
              mvhline_set             curs_border_set(3x)
              mvin_wch                curs_in_wch(3x)
              mvin_wchnstr            curs_in_wchstr(3x)
              mvin_wchstr             curs_in_wchstr(3x)
              mvinch                  curs_inch(3x)
              mvinchnstr              curs_inchstr(3x)
              mvinchstr               curs_inchstr(3x)
              mvinnstr                curs_instr(3x)
              mvinnwstr               curs_inwstr(3x)
              mvins_nwstr             curs_ins_wstr(3x)
              mvins_wch               curs_ins_wch(3x)
              mvins_wstr              curs_ins_wstr(3x)
              mvinsch                 curs_insch(3x)
              mvinsnstr               curs_insstr(3x)
              mvinsstr                curs_insstr(3x)
              mvinstr                 curs_instr(3x)
              mvinwstr                curs_inwstr(3x)
              mvprintw                curs_printw(3x)
              mvscanw                 curs_scanw(3x)
              mvvline                 curs_border(3x)
              mvvline_set             curs_border_set(3x)

              mvwadd_wch              curs_add_wch(3x)
              mvwadd_wchnstr          curs_add_wchstr(3x)
              mvwadd_wchstr           curs_add_wchstr(3x)
              mvwaddch                curs_addch(3x)
              mvwaddchnstr            curs_addchstr(3x)
              mvwaddchstr             curs_addchstr(3x)
              mvwaddnstr              curs_addstr(3x)
              mvwaddnwstr             curs_addwstr(3x)
              mvwaddstr               curs_addstr(3x)
              mvwaddwstr              curs_addwstr(3x)
              mvwchgat                curs_attr(3x)
              mvwdelch                curs_delch(3x)
              mvwget_wch              curs_get_wch(3x)
              mvwget_wstr             curs_get_wstr(3x)
              mvwgetch                curs_getch(3x)
              mvwgetn_wstr            curs_get_wstr(3x)
              mvwgetnstr              curs_getstr(3x)
              mvwgetstr               curs_getstr(3x)
              mvwhline                curs_border(3x)
              mvwhline_set            curs_border_set(3x)
              mvwin                   curs_window(3x)
              mvwin_wch               curs_in_wch(3x)
              mvwin_wchnstr           curs_in_wchstr(3x)
              mvwin_wchstr            curs_in_wchstr(3x)
              mvwinch                 curs_inch(3x)
              mvwinchnstr             curs_inchstr(3x)
              mvwinchstr              curs_inchstr(3x)
              mvwinnstr               curs_instr(3x)
              mvwinnwstr              curs_inwstr(3x)
              mvwins_nwstr            curs_ins_wstr(3x)
              mvwins_wch              curs_ins_wch(3x)
              mvwins_wstr             curs_ins_wstr(3x)
              mvwinsch                curs_insch(3x)
              mvwinsnstr              curs_insstr(3x)
              mvwinsstr               curs_insstr(3x)
              mvwinstr                curs_instr(3x)
              mvwinwstr               curs_inwstr(3x)
              mvwprintw               curs_printw(3x)
              mvwscanw                curs_scanw(3x)
              mvwvline                curs_border(3x)
              mvwvline_set            curs_border_set(3x)
              napms                   curs_kernel(3x)
              newpad                  curs_pad(3x)
              newterm                 curs_initscr(3x)
              newwin                  curs_window(3x)
              nl                      curs_outopts(3x)
              nocbreak                curs_inopts(3x)
              nodelay                 curs_inopts(3x)
              noecho                  curs_inopts(3x)
              nofilter                curs_util(3x)*
              nonl                    curs_outopts(3x)
              noqiflush               curs_inopts(3x)
              noraw                   curs_inopts(3x)
              notimeout               curs_inopts(3x)
              overlay                 curs_overlay(3x)
              overwrite               curs_overlay(3x)
              pair_content            curs_color(3x)
              pechochar               curs_pad(3x)
              pnoutrefresh            curs_pad(3x)
              prefresh                curs_pad(3x)
              printw                  curs_printw(3x)
              putp                    curs_terminfo(3x)
              putwin                  curs_util(3x)
              qiflush                 curs_inopts(3x)
              raw                     curs_inopts(3x)
              redrawwin               curs_refresh(3x)

              refresh                 curs_refresh(3x)
              reset_prog_mode         curs_kernel(3x)
              reset_shell_mode        curs_kernel(3x)
              resetty                 curs_kernel(3x)
              resize_term             resizeterm(3x)*
              resizeterm              resizeterm(3x)*
              restartterm             curs_terminfo(3x)
              ripoffline              curs_kernel(3x)
              savetty                 curs_kernel(3x)
              scanw                   curs_scanw(3x)
              scr_dump                curs_scr_dump(3x)
              scr_init                curs_scr_dump(3x)
              scr_restore             curs_scr_dump(3x)
              scr_set                 curs_scr_dump(3x)
              scrl                    curs_scroll(3x)
              scroll                  curs_scroll(3x)
              scrollok                curs_outopts(3x)
              set_curterm             curs_terminfo(3x)
              set_term                curs_initscr(3x)
              setcchar                curs_getcchar(3x)
              setscrreg               curs_outopts(3x)
              setsyx                  curs_kernel(3x)
              setterm                 curs_terminfo(3x)
              setupterm               curs_terminfo(3x)
              slk_attr                curs_slk(3x)*
              slk_attr_off            curs_slk(3x)
              slk_attr_on             curs_slk(3x)
              slk_attr_set            curs_slk(3x)
              slk_attroff             curs_slk(3x)
              slk_attron              curs_slk(3x)
              slk_attrset             curs_slk(3x)
              slk_clear               curs_slk(3x)
              slk_color               curs_slk(3x)
              slk_init                curs_slk(3x)
              slk_label               curs_slk(3x)
              slk_noutrefresh         curs_slk(3x)
              slk_refresh             curs_slk(3x)
              slk_restore             curs_slk(3x)
              slk_set                 curs_slk(3x)
              slk_touch               curs_slk(3x)
              standend                curs_attr(3x)
              standout                curs_attr(3x)
              start_color             curs_color(3x)
              subpad                  curs_pad(3x)
              subwin                  curs_window(3x)
              syncok                  curs_window(3x)
              term_attrs              curs_termattrs(3x)
              termattrs               curs_termattrs(3x)
              termname                curs_termattrs(3x)
              tgetent                 curs_termcap(3x)
              tgetflag                curs_termcap(3x)
              tgetnum                 curs_termcap(3x)
              tgetstr                 curs_termcap(3x)
              tgoto                   curs_termcap(3x)
              tigetflag               curs_terminfo(3x)
              tigetnum                curs_terminfo(3x)
              tigetstr                curs_terminfo(3x)
              tiparm                  curs_terminfo(3x)*
              timeout                 curs_inopts(3x)
              touchline               curs_touch(3x)
              touchwin                curs_touch(3x)
              tparm                   curs_terminfo(3x)
              tputs                   curs_termcap(3x)
              tputs                   curs_terminfo(3x)
              trace                   curs_trace(3x)*
              typeahead               curs_inopts(3x)

              unctrl                  curs_util(3x)
              unget_wch               curs_get_wch(3x)
              ungetch                 curs_getch(3x)
              ungetmouse              curs_mouse(3x)*
              untouchwin              curs_touch(3x)
              use_default_colors      default_colors(3x)*
              use_env                 curs_util(3x)
              use_extended_names      curs_extend(3x)*
              use_legacy_coding       legacy_coding(3x)*
              use_tioctl              curs_util(3x)
              vid_attr                curs_terminfo(3x)
              vid_puts                curs_terminfo(3x)
              vidattr                 curs_terminfo(3x)
              vidputs                 curs_terminfo(3x)
              vline                   curs_border(3x)
              vline_set               curs_border_set(3x)
              vw_printw               curs_printw(3x)
              vw_scanw                curs_scanw(3x)
              vwprintw                curs_printw(3x)
              vwscanw                 curs_scanw(3x)
              wadd_wch                curs_add_wch(3x)
              wadd_wchnstr            curs_add_wchstr(3x)
              wadd_wchstr             curs_add_wchstr(3x)
              waddch                  curs_addch(3x)
              waddchnstr              curs_addchstr(3x)
              waddchstr               curs_addchstr(3x)
              waddnstr                curs_addstr(3x)
              waddnwstr               curs_addwstr(3x)
              waddstr                 curs_addstr(3x)
              waddwstr                curs_addwstr(3x)
              wattr_get               curs_attr(3x)
              wattr_off               curs_attr(3x)
              wattr_on                curs_attr(3x)
              wattr_set               curs_attr(3x)
              wattroff                curs_attr(3x)
              wattron                 curs_attr(3x)
              wattrset                curs_attr(3x)
              wbkgd                   curs_bkgd(3x)
              wbkgdset                curs_bkgd(3x)
              wbkgrnd                 curs_bkgrnd(3x)
              wbkgrndset              curs_bkgrnd(3x)
              wborder                 curs_border(3x)
              wborder_set             curs_border_set(3x)
              wchgat                  curs_attr(3x)
              wclear                  curs_clear(3x)
              wclrtobot               curs_clear(3x)
              wclrtoeol               curs_clear(3x)
              wcolor_set              curs_attr(3x)
              wcursyncup              curs_window(3x)
              wdelch                  curs_delch(3x)
              wdeleteln               curs_deleteln(3x)
              wecho_wchar             curs_add_wch(3x)
              wechochar               curs_addch(3x)
              wenclose                curs_mouse(3x)*
              werase                  curs_clear(3x)
              wget_wch                curs_get_wch(3x)
              wget_wstr               curs_get_wstr(3x)
              wgetbkgrnd              curs_bkgrnd(3x)
              wgetch                  curs_getch(3x)
              wgetdelay               curs_opaque(3x)*
              wgetn_wstr              curs_get_wstr(3x)
              wgetnstr                curs_getstr(3x)
              wgetparent              curs_opaque(3x)*
              wgetscrreg              curs_opaque(3x)*
              wgetstr                 curs_getstr(3x)
              whline                  curs_border(3x)

              whline_set              curs_border_set(3x)
              win_wch                 curs_in_wch(3x)
              win_wchnstr             curs_in_wchstr(3x)
              win_wchstr              curs_in_wchstr(3x)
              winch                   curs_inch(3x)
              winchnstr               curs_inchstr(3x)
              winchstr                curs_inchstr(3x)
              winnstr                 curs_instr(3x)
              winnwstr                curs_inwstr(3x)
              wins_nwstr              curs_ins_wstr(3x)
              wins_wch                curs_ins_wch(3x)
              wins_wstr               curs_ins_wstr(3x)
              winsch                  curs_insch(3x)
              winsdelln               curs_deleteln(3x)
              winsertln               curs_deleteln(3x)
              winsnstr                curs_insstr(3x)
              winsstr                 curs_insstr(3x)
              winstr                  curs_instr(3x)
              winwstr                 curs_inwstr(3x)
              wmouse_trafo            curs_mouse(3x)*
              wmove                   curs_move(3x)
              wnoutrefresh            curs_refresh(3x)
              wprintw                 curs_printw(3x)
              wredrawln               curs_refresh(3x)
              wrefresh                curs_refresh(3x)
              wresize                 wresize(3x)*
              wscanw                  curs_scanw(3x)
              wscrl                   curs_scroll(3x)
              wsetscrreg              curs_outopts(3x)
              wstandend               curs_attr(3x)
              wstandout               curs_attr(3x)
              wsyncdown               curs_window(3x)
              wsyncup                 curs_window(3x)
              wtimeout                curs_inopts(3x)
              wtouchln                curs_touch(3x)
              wunctrl                 curs_util(3x)
              wvline                  curs_border(3x)
              wvline_set              curs_border_set(3x)


RETURN VALUE

       Routines that return an integer return  ERR  upon  failure
       and  an  integer value other than ERR upon successful com-
       pletion, unless otherwise noted in  the  routine  descrip-
       tions.

       As a general rule, routines check for null pointers passed
       as parameters, and handle this as an error.

       All macros return the  value  of  the  w  version,  except
       setscrreg, wsetscrreg, getyx, getbegyx, and getmaxyx.  The
       return values of setscrreg, wsetscrreg,  getyx,  getbegyx,
       and getmaxyx are undefined (i.e., these should not be used
       as the right-hand side of assignment statements).

       Routines that return pointers return NULL on error.


ENVIRONMENT

       The following environment symbols are useful for customiz-
       ing the runtime behavior of the ncurses library.  The most
       important ones have been already discussed in detail.

   CC
       When set,  change  occurrences  of  the  command_character
       (i.e.,  the  cmdch  capability)  of  the  loaded  terminfo
       entries to the value of this variable.  Very few  terminfo
       entries provide this feature.

       Because this name is also used in development environments
       to represent the C compiler's name, ncurses ignores it  if
       it does not happen to be a single character.


BAUDRATE

       The  debugging  library  checks  this environment variable
       when the application has redirected output to a file.  The
       variable's  numeric value is used for the baudrate.  If no
       value is found, ncurses uses 9600.  This allows testers to
       construct  repeatable  test-cases  that  take into account
       costs that depend on baudrate.


COLUMNS

       Specify the width of the screen in  characters.   Applica-
       tions  running in a windowing environment usually are able
       to obtain the width of the window in which they  are  exe-
       cuting.   If  neither the COLUMNS value nor the terminal's
       screen size is available, ncurses uses the size which  may
       be  specified  in  the  terminfo  database (i.e., the cols
       capability).

       It is important that your application use a  correct  size
       for  the screen.  This is not always possible because your
       application may be running on a host which does not  honor
       NAWS  (Negotiations About Window Size), or because you are
       temporarily running as  another  user.   However,  setting
       COLUMNS  and/or  LINES  overrides the library's use of the
       screen size obtained from the operating system.

       Either COLUMNS or LINES symbols may be specified  indepen-
       dently.   This  is mainly useful to circumvent legacy mis-
       features of terminal descriptions, e.g., xterm which  com-
       monly specifies a 65 line screen.  For best results, lines
       and cols should not be specified in a terminal description
       for terminals which are run as emulations.

       Use  the  use_env  function to disable all use of external
       environment (but not including system calls) to  determine
       the  screen  size.   Use the use_tioctl function to update
       COLUMNS or LINES to match the screen  size  obtained  from
       system calls or the terminal database.


ESCDELAY

       Specifies  the  total  time,  in  milliseconds,  for which
       ncurses will await a character sequence, e.g., a  function
       key.   The default value, 1000 milliseconds, is enough for
       most uses.  However, it is made a variable to  accommodate
       unusual applications.

       The most common instance where you may wish to change this
       value is to work with slow hosts, e.g., running on a  net-
       work.   If the host cannot read characters rapidly enough,
       it will have the same effect as if the  terminal  did  not
       send  characters  rapidly  enough.  The library will still
       see a timeout.

       Note that xterm mouse events are built up  from  character
       sequences  received  from  the xterm.  If your application
       makes heavy use of  multiple-clicking,  you  may  wish  to
       lengthen this default value because the timeout applies to
       the composed multi-click event as well as  the  individual
       clicks.

       In  addition to the environment variable, this implementa-
       tion provides a global variable with the same name.   Por-
       table  applications  should  not rely upon the presence of
       ESCDELAY in either form, but setting the environment vari-
       able rather than the global variable does not create prob-
       lems when compiling an application.


HOME

       Tells ncurses where your home directory is.  That is where
       it may read and write auxiliary terminal descriptions:

       $HOME/.termcap
       $HOME/.terminfo


LINES

       Like  COLUMNS, specify the height of the screen in charac-
       ters.  See COLUMNS for a detailed description.


MOUSE_BUTTONS_123

       This applies only to the OS/2 EMX port.  It specifies  the
       order  of  buttons  on the mouse.  OS/2 numbers a 3-button
       mouse inconsistently from other platforms:

       1 = left
       2 = right
       3 = middle.

       This variable lets you customize the mouse.  The  variable
       must  be  three numeric digits 1-3 in any order, e.g., 123
       or 321.  If it is not specified, ncurses uses 132.


NCURSES_ASSUMED_COLORS

       Override the compiled-in assumption  that  the  terminal's
       default   colors   are  white-on-black  (see  default_col-
       ors(3x)).  You may set the foreground and background color
       values  with this environment variable by proving a 2-ele-
       ment list: foreground,background.  For  example,  to  tell
       ncurses  to not assume anything about the colors, set this
       to "-1,-1".  To make it green-on-black, set it  to  "2,0".
       Any  positive  value  from zero to the terminfo max_colors
       value is allowed.


NCURSES_CONSOLE2

       This applies only to the MinGW port of ncurses.

       The Console2 program's handling of the  Microsoft  Console
       API call CreateConsoleScreenBuffer is defective.  Applica-
       tions which use this will hang.  However, it  is  possible
       to  simulate  the  action  of this call by mapping coordi-
       nates, explicitly saving and restoring the original screen
       contents.   Setting the environment variable NCGDB has the
       same effect.


NCURSES_GPM_TERMS

       This applies only to ncurses configured  to  use  the  GPM
       interface.

       If  present,  the environment variable is a list of one or
       more terminal names against  which  the  TERM  environment
       variable  is  matched.   Setting it to an empty value dis-
       ables the GPM interface; using the  built-in  support  for
       xterm, etc.

       If  the  environment  variable  is  absent,  ncurses  will
       attempt to open GPM if TERM contains "linux".


NCURSES_NO_HARD_TABS

       Ncurses may use tabs as part of the cursor movement  opti-
       mization.   In  some  cases,  your terminal driver may not
       handle these properly.  Set this environment  variable  to
       disable  the  feature.  You can also adjust your stty set-
       tings to avoid the problem.  NCURSES_NO_MAGIC_COOKIE  Some
       terminals  use  a magic-cookie feature which requires spe-
       cial  handling  to  make  highlighting  and  other   video
       attributes  display  properly.  You can suppress the high-
       lighting entirely for  these  terminals  by  setting  this
       environment variable.


NCURSES_NO_PADDING

       Most of the terminal descriptions in the terminfo database
       are written for real "hardware"  terminals.   Many  people
       use  terminal  emulators which run in a windowing environ-
       ment and use curses-based applications.   Terminal  emula-
       tors can duplicate all of the important aspects of a hard-
       ware terminal, but they do not have the same  limitations.
       The  chief  limitation  of  a  hardware  terminal from the
       standpoint  of  your  application  is  the  management  of
       dataflow,  i.e.,  timing.   Unless  a hardware terminal is
       interfaced into a terminal concentrator (which  does  flow
       control),  it  (or your application) must manage dataflow,
       preventing overruns.  The cheapest solution  (no  hardware
       cost)  is  for  your  program  to do this by pausing after
       operations that the terminal does slowly, such as clearing
       the display.

       As  a  result,  many  terminal descriptions (including the
       vt100) have delay times embedded.  You  may  wish  to  use
       these  descriptions,  but  not want to pay the performance
       penalty.

       Set the NCURSES_NO_PADDING environment variable to disable
       all but mandatory padding.  Mandatory padding is used as a
       part of special control sequences such as flash.


NCURSES_NO_SETBUF

       This setting is obsolete.  Before changes

          o   started with 5.9 patch 20120825 and

          o   continued though 5.9 patch 20130126

       ncurses enabled buffered output during  terminal  initial-
       ization.   This  was  done (as in SVr4 curses) for perfor-
       mance reasons.  For testing purposes, both of ncurses  and
       certain  applications,  this  feature  was  made optional.
       Setting the  NCURSES_NO_SETBUF  variable  disabled  output
       buffering,  leaving  the  output  in the original (usually
       line buffered) mode.

       In the current implementation, ncurses  performs  its  own
       buffering  and  does not require this workaround.  It does
       not modify the buffering of the standard output.

       The reason for the change was to  make  the  behavior  for
       interrupts and other signals more robust.  One drawback is
       that certain nonconventional programs would  mix  ordinary
       stdio  calls  with ncurses calls and (usually) work.  This
       is no longer possible  since  ncurses  is  not  using  the
       buffered  standard  output but its own output (to the same
       file descriptor).  As a special case, the low-level  calls
       such  as  putp  still  use the standard output.  But high-
       level curses calls do not.


NCURSES_NO_UTF8_ACS

       During initialization, the ncurses library checks for spe-
       cial cases where VT100 line-drawing (and the corresponding
       alternate character set  capabilities)  described  in  the
       terminfo are known to be missing.  Specifically, when run-
       ning in a UTF-8 locale, the Linux console emulator and the
       GNU  screen program ignore these.  Ncurses checks the TERM
       environment variable for these.  For other special  cases,
       you  should  set  this  environment  variable.  Doing this
       tells ncurses to use Unicode values  which  correspond  to
       the VT100 line-drawing glyphs.  That works for the special
       cases cited, and is likely to work for terminal emulators.

       When setting this variable, you should set it to a nonzero
       value.   Setting  it  to zero (or to a nonnumber) disables
       the special check for "linux" and "screen".

       As an alternative to  the  environment  variable,  ncurses
       checks  for an extended terminfo capability U8.  This is a
       numeric capability which can  be  compiled  using  tic -x.
       For example

          # linux console, if patched to provide working
          # VT100 shift-in/shift-out, with corresponding font.
          linux-vt100|linux console with VT100 line-graphics,
                  U8#0, use=linux,

          # uxterm with vt100Graphics resource set to false
          xterm-utf8|xterm relying on UTF-8 line-graphics,
                  U8#1, use=xterm,

       The name "U8" is chosen to be two characters, to permit it
       to be used  by  applications  that  use  ncurses'  termcap
       interface.


NCURSES_TRACE

       During   initialization,  the  ncurses  debugging  library
       checks the NCURSES_TRACE environment variable.  If  it  is
       defined, to a numeric value, ncurses calls the trace func-
       tion, using that value as the argument.

       The argument values, which are defined in  curses.h,  pro-
       vide  several  types  of  information.   When running with
       traces enabled, your application will write the file trace
       to the current directory.

       See curs_trace(3x) for more information.


TERM

       Denotes  your  terminal  type.  Each terminal type is dis-
       tinct, though many are similar.

       TERM is commonly set by terminal emulators to help  appli-
       cations  find  a  workable  terminal description.  Some of
       those  choose  a  popular  approximation,  e.g.,   "ansi",
       "vt100",  "xterm"  rather  than  an exact fit.  Not infre-
       quently, your application will  have  problems  with  that
       approach, e.g., incorrect function-key definitions.

       If  you  set TERM in your environment, it has no effect on
       the operation of the terminal emulator.  It  only  affects
       the  way applications work within the terminal.  Likewise,
       as a general rule (xterm being a rare exception), terminal
       emulators  which  allow you to specify TERM as a parameter
       or configuration value do not  change  their  behavior  to
       match that setting.


TERMCAP

       If  the  ncurses  library has been configured with termcap
       support, ncurses will check for a  terminal's  description
       in  termcap  form  if  it is not available in the terminfo
       database.

       The TERMCAP environment variable contains either a  termi-
       nal  description  (with  newlines stripped out), or a file
       name telling where the information  denoted  by  the  TERM
       environment  variable  exists.  In either case, setting it
       directs ncurses to ignore the usual place for this  infor-
       mation, e.g., /etc/termcap.


TERMINFO

       Overrides the directory in which ncurses searches for your
       terminal description.  This is the simplest, but  not  the
       only  way to change the list of directories.  The complete
       list of directories in order follows:

          o   the last directory to which ncurses wrote, if  any,
              is searched first

          o   the directory specified by the TERMINFO environment
              variable

          o   $HOME/.terminfo

          o   directories listed in the TERMINFO_DIRS environment
              variable

          o   one  or more directories whose names are configured
              and compiled into the ncurses library, i.e.,

             o   /usr/local/ncurses/share/ter-
                 minfo:/usr/share/terminfo  (corresponding to the
                 TERMINFO_DIRS variable)

             o   /usr/share/terminfo (corresponding to  the  TER-
                 MINFO variable)


TERMINFO_DIRS

       Specifies  a  list  of  directories to search for terminal
       descriptions.  The list is separated by colons (i.e., ":")
       on Unix, semicolons on OS/2 EMX.

       All  of  the  terminal  descriptions are in terminfo form.
       Normally these are stored in a directory tree, using  sub-
       directories  named  by  the  first  letter of the terminal
       names therein.

       If ncurses is built with  a  hashed  database,  then  each
       entry in this list can also be the path of the correspond-
       ing database file.

       If ncurses is built with a  support  for  reading  termcap
       files directly, then an entry in this list may be the path
       of a termcap file.


TERMPATH

       If TERMCAP does not hold a file name then  ncurses  checks
       the  TERMPATH  environment  variable.   This  is a list of
       filenames separated by spaces or  colons  (i.e.,  ":")  on
       Unix, semicolons on OS/2 EMX.

       If  the  TERMPATH environment variable is not set, ncurses
       looks in the files  /etc/termcap,  /usr/share/misc/termcap
       and $HOME/.termcap, in that order.

       The  library  may be configured to disregard the following
       variables when the current user is the  superuser  (root),
       or if the application uses setuid or setgid permissions:

       $TERMINFO, $TERMINFO_DIRS, $TERMPATH, as well as $HOME.


ALTERNATE CONFIGURATIONS

       Several  different  configurations are possible, depending
       on  the  configure  script  options  used  when   building
       ncurses.   There  are a few main options whose effects are
       visible to the applications developer using ncurses:

       --disable-overwrite
            The standard include for ncurses is as noted in  SYN-
            OPSIS:

          #include <curses.h>

            This  option is used to avoid filename conflicts when
            ncurses is not the main implementation of  curses  of
            the  computer.   If  ncurses  is  installed disabling
            overwrite, it puts its  headers  in  a  subdirectory,
            e.g.,

          #include <ncurses/curses.h>

            It  also  omits a symbolic link which would allow you
            to use -lcurses to build executables.

       --enable-widec
            The configure script renames the library and (if  the
            --disable-overwrite  option  is used) puts the header
            files  in  a  different  subdirectory.   All  of  the
            library  names  have  a  "w"  appended to them, i.e.,
            instead of

          -lncurses

            you link with

          -lncursesw

            You must also define _XOPEN_SOURCE_EXTENDED when com-
            piling  for  the  wide-character  library  to use the
            extended (wide-character)  functions.   The  curses.h
            file   which  is  installed  for  the  wide-character
            library is designed to be compatible with the  normal
            library's header.  Only the size of the WINDOW struc-
            ture differs, and very few applications require  more
            than  a  pointer  to  WINDOWs.   If  the  headers are
            installed  allowing  overwrite,  the   wide-character
            library's  headers should be installed last, to allow
            applications to be built using  either  library  from
            the same set of headers.

       --with-pthread
            The configure script renames the library.  All of the
            library names have a "t" appended to them (before any
            "w" added by --enable-widec).

            The  global  variables  such as LINES are replaced by
            macros to allow read-only access.  At the same  time,
            setter-functions  are  provided  to set these values.
            Some applications (very few) may require  changes  to
            work with this convention.

       --with-shared

       --with-normal

       --with-debug

       --with-profile
            The  shared  and normal (static) library names differ
            by their  suffixes,  e.g.,  libncurses.so  and  libn-
            curses.a.   The  debug  and profiling libraries add a
            "_g" and a "_p" to the root names respectively, e.g.,
            libncurses_g.a and libncurses_p.a.

       --with-trace
            The  trace  function  normally  resides  in the debug
            library, but it is sometimes useful to configure this
            in  the  shared  library.   Configure  scripts should
            check for the function's existence rather than assum-
            ing it is always in the debug library.


FILES

       /usr/share/tabset
            directory  containing  initialization  files  for the
            terminal capability database /usr/share/terminfo ter-
            minal capability database


SEE ALSO

       terminfo(5)  and  related  pages whose names begin "curs_"
       for detailed routine descriptions.
       curs_variables(3x)


EXTENSIONS

       The  ncurses  library  can  be  compiled  with  an  option
       (-DUSE_GETCAP) that falls back to the old-style /etc/term-
       cap file if the terminal setup code cannot find a terminfo
       entry  corresponding  to TERM.  Use of this feature is not
       recommended, as it essentially includes an entire  termcap
       compiler  in the ncurses startup code, at significant cost
       in core and startup cycles.

       The ncurses  library  includes  facilities  for  capturing
       mouse  events on certain terminals (including xterm).  See
       the curs_mouse(3x) manual page for details.

       The ncurses library includes facilities for responding  to
       window  resizing  events,  e.g., when running in an xterm.
       See the resizeterm(3x) and wresize(3x)  manual  pages  for
       details.   In addition, the library may be configured with
       a SIGWINCH handler.

       The ncurses library extends the fixed set of function  key
       capabilities  of  terminals  by  allowing  the application
       designer to define additional key  sequences  at  runtime.
       See the define_key(3x) key_defined(3x), and keyok(3x) man-
       ual pages for details.

       The ncurses library can exploit the capabilities of termi-
       nals  which  implement the ISO-6429 SGR 39 and SGR 49 con-
       trols, which allow an application to reset the terminal to
       its  original  foreground and background colors.  From the
       users' perspective, the application is able to  draw  col-
       ored  text  on  a  background  whose color is set indepen-
       dently, providing better  control  over  color  contrasts.
       See the default_colors(3x) manual page for details.

       The  ncurses  library  includes  a  function for directing
       application output to a printer attached to  the  terminal
       device.  See the curs_print(3x) manual page for details.


PORTABILITY

       The  ncurses  library is intended to be BASE-level confor-
       mant with XSI Curses.  The EXTENDED XSI Curses functional-
       ity (including color support) is supported.

       A  small  number of local differences (that is, individual
       differences between the XSI Curses and ncurses calls)  are
       described  in  PORTABILITY  sections  of  the  library man
       pages.

       Unlike other implementations, this one  checks  parameters
       such  as  pointers to WINDOW structures to ensure they are
       not null.  The main reason for providing this behavior  is
       to guard against programmer error.  The standard interface
       does not provide a way for the library to tell an applica-
       tion  which  of  several  possible  errors  were detected.
       Relying on this (or some other) extension  will  adversely
       affect the portability of curses applications.

       This implementation also contains several extensions:

       o   The  routine  has_key  is  not part of XPG4, nor is it
           present in SVr4.  See the curs_getch(3x)  manual  page
           for details.

       o   The  routine  slk_attr  is not part of XPG4, nor is it
           present in SVr4.  See the curs_slk(3x) manual page for
           details.

       o   The routines getmouse, mousemask, ungetmouse, mousein-
           terval, and wenclose relating to mouse interfacing are
           not  part  of XPG4, nor are they present in SVr4.  See
           the curs_mouse(3x) manual page for details.

       o   The routine mcprint was not present  in  any  previous
           curses  implementation.  See the curs_print(3x) manual
           page for details.

       o   The routine wresize is not part of  XPG4,  nor  is  it
           present  in SVr4.  See the wresize(3x) manual page for
           details.

       o   The WINDOW structure's internal details can be  hidden
           from  application  programs.   See curs_opaque(3x) for
           the discussion of is_scrollok, etc.

       o   This implementation can be configured to provide rudi-
           mentary  support for multi-threaded applications.  See
           curs_threads(3x) for details.

       o   This implementation can also be configured to  provide
           a set of functions which improve the ability to manage
           multiple screens.  See curs_sp_funcs(3x) for details.

       In historic curses versions, delays embedded in the  capa-
       bilities cr, ind, cub1, ff and tab activated corresponding
       delay bits in the UNIX tty driver.   In  this  implementa-
       tion,  all  padding  is  done  by sending NUL bytes.  This
       method is slightly more expensive, but narrows the  inter-
       face  to  the  UNIX kernel significantly and increases the
       package's portability correspondingly.


NOTES

       The header  file  <curses.h>  automatically  includes  the
       header files <stdio.h> and <unctrl.h>.

       If  standard  output from a ncurses program is re-directed
       to something which is not a tty, screen  updates  will  be
       directed to standard error.  This was an undocumented fea-
       ture of AT&T System V Release 3 curses.


AUTHORS

       Zeyd M. Ben-Halim, Eric  S.  Raymond,  Thomas  E.  Dickey.
       Based on pcurses by Pavel Curtis.



                                                            ncurses(3x)
ncurses-6.0-20160213/doc/html/man/mitem_visible.3x.html0000644000175100001440000001106312653207012021006 0ustar tomusers mitem_visible 3x

mitem_visible 3x

mitem_visible(3x)                                     mitem_visible(3x)




NAME

       mitem_visible - check visibility of a menu item


SYNOPSIS

       #include <menu.h>
       bool item_visible(const ITEM *item);


DESCRIPTION

       A  menu  item  is  visible  when it is in the portion of a
       posted menu that is mapped onto the screen (if the menu is
       scrollable,  in  particular,  this portion will be smaller
       than the whole menu).


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                      mitem_visible(3x)
ncurses-6.0-20160213/doc/html/man/infocmp.1m.html0000644000175100001440000006673312653207010017610 0ustar tomusers infocmp 1m

infocmp 1m

infocmp(1m)                                                 infocmp(1m)




NAME

       infocmp - compare or print out terminfo descriptions


SYNOPSIS

       infocmp [-1CDEFGIKLTUVcdegilnpqrtux]
             [-v n] [-s d| i| l| c] [-Q n] [-R subset]
             [-w width] [-A directory] [-B directory]
             [termname...]


DESCRIPTION

       infocmp  can  be  used  to compare a binary terminfo entry
       with other terminfo entries, rewrite a  terminfo  descrip-
       tion  to  take  advantage  of  the use= terminfo field, or
       print out a terminfo  description  from  the  binary  file
       (term) in a variety of formats.  In all cases, the boolean
       fields will be printed  first,  followed  by  the  numeric
       fields, followed by the string fields.


Default Options

       If  no options are specified and zero or one termnames are
       specified, the -I option will be assumed.   If  more  than
       one termname is specified, the -d option will be assumed.


Comparison Options [-d] [-c] [-n]

       infocmp  compares  the  terminfo  description of the first
       terminal termname with each of the descriptions  given  by
       the  entries  for  the  other  terminal's termnames.  If a
       capability is defined for only one of the  terminals,  the
       value  returned will depend on the type of the capability:
       F for boolean variables, -1  for  integer  variables,  and
       NULL for string variables.

       The  -d  option produces a list of each capability that is
       different between two entries.  This option is  useful  to
       show  the  difference between two entries, created by dif-
       ferent people, for the same or similar terminals.

       The -c option produces a list of each capability  that  is
       common between two or more entries.  Capabilities that are
       not set are ignored.  This option can be used as  a  quick
       check to see if the -u option is worth using.

       The  -n  option produces a list of each capability that is
       in none of the given entries.  If no termnames are  given,
       the environment variable TERM will be used for both of the
       termnames.  This can be used as a quick check  to  see  if
       anything was left out of a description.


Source Listing Options [-I] [-L] [-C] [-r]

       The  -I,  -L, and -C options will produce a source listing
       for each terminal named.

      -I   use the terminfo names
      -L   use the long C variable name listed in <term.h>
      -C   use the termcap names
      -r   when using -C, put out all capabilities in termcap form
      -K   modifies the -C option, improving BSD-compatibility.

       If no termnames are given, the environment  variable  TERM
       will be used for the terminal name.

       The  source produced by the -C option may be used directly
       as a termcap entry, but not all parameterized strings  can
       be changed to the termcap format.  infocmp will attempt to
       convert most of the parameterized  information,  and  any-
       thing  not  converted will be plainly marked in the output
       and commented out.  These should be edited by hand.

       For best results when converting to  termcap  format,  you
       should use both -C and -r.  Normally a termcap description
       is limited to 1023 bytes.  infocmp trims away less  essen-
       tial  parts  to make it fit.  If you are converting to one
       of the (rare)  termcap  implementations  which  accept  an
       unlimited  size  of  termcap,  you  may want to add the -T
       option.  More often however, you  must  help  the  termcap
       implementation,  and  trim  excess  whitespace (use the -0
       option for that).

       All padding information  for  strings  will  be  collected
       together  and  placed at the beginning of the string where
       termcap expects it.  Mandatory padding  (padding  informa-
       tion with a trailing '/') will become optional.

       All termcap variables no longer supported by terminfo, but
       which are derivable from other terminfo variables, will be
       output.  Not all terminfo capabilities will be translated;
       only those variables which were part of termcap will  nor-
       mally  be  output.  Specifying the -r option will take off
       this restriction, allowing all capabilities to  be  output
       in  termcap  form.  Normally you would use both the -C and
       -r options.  The  actual  format  used  incorporates  some
       improvements  for escaped characters from terminfo format.
       For a stricter  BSD-compatible  translation,  use  the  -K
       option rather than -C.

       Note that because padding is collected to the beginning of
       the capability, not all capabilities are  output.   Manda-
       tory  padding  is  not supported.  Because termcap strings
       are not as flexible, it is not always possible to  convert
       a  terminfo  string  capability into an equivalent termcap
       format.  A subsequent conversion of the termcap file  back
       into  terminfo  format  will not necessarily reproduce the
       original terminfo source.

       Some common terminfo parameter  sequences,  their  termcap
       equivalents,  and  some terminal types which commonly have
       such sequences, are:

     terminfo                    termcap   Representative Terminals
     ---------------------------------------------------------------
     %p1%c                       %.        adm
     %p1%d                       %d        hp, ANSI standard, vt100
     %p1%'x'%+%c                 %+x       concept
     %i                          %iq       ANSI standard, vt100
     %p1%?%'x'%>%t%p1%'y'%+%;    %>xy      concept
     %p2 is printed before %p1   %r        hp


Use= Option [-u]

       The -u option produces a terminfo  source  description  of
       the  first  terminal termname which is relative to the sum
       of the descriptions given by the  entries  for  the  other
       terminals  termnames.   It does this by analyzing the dif-
       ferences  between  the  first  termname  and   the   other
       termnames and producing a description with use= fields for
       the other terminals.  In this manner, it  is  possible  to
       retrofit   generic  terminfo  entries  into  a  terminal's
       description.  Or, if two similar terminals exist, but were
       coded  at  different  times or by different people so that
       each description is a full description, using infocmp will
       show what can be done to change one description to be rel-
       ative to the other.

       A capability will get printed with an at-sign (@) if it no
       longer  exists in the first termname, but one of the other
       termname entries contains a value for it.  A  capability's
       value  gets  printed if the value in the first termname is
       not found in any of the other termname entries, or if  the
       first of the other termname entries that has this capabil-
       ity gives a different value for the capability  than  that
       in the first termname.

       The  order  of  the other termname entries is significant.
       Since the terminfo compiler tic does a left-to-right  scan
       of the capabilities, specifying two use= entries that con-
       tain differing entries for the same capabilities will pro-
       duce  different  results  depending  on the order that the
       entries are given in.  infocmp will flag any  such  incon-
       sistencies  between the other termname entries as they are
       found.

       Alternatively, specifying a capability after a use=  entry
       that contains that capability will cause the second speci-
       fication to be  ignored.   Using  infocmp  to  recreate  a
       description can be a useful check to make sure that every-
       thing was  specified  correctly  in  the  original  source
       description.

       Another  error  that  does  not  cause  incorrect compiled
       files, but will slow down the compilation time, is  speci-
       fying  extra  use=  fields  that are superfluous.  infocmp
       will flag any other termname use=  fields  that  were  not
       needed.

   Changing Databases [-A directory] [-B directory]
       Like other ncurses utilities, infocmp looks for the termi-
       nal descriptions in several places.  You can use the  TER-
       MINFO  and TERMINFO_DIRS environment variables to override
       the compiled-in default list  of  places  to  search  (see
       curses(3x) for details).

       You  can  also  use  the options -A and -B to override the
       list of places to search when comparing terminal  descrip-
       tions:

       o   The -A option sets the location for the first termname

       o   The   -B  option  sets  the  location  for  the  other
           termnames.

       Using these options, it is possible  to  compare  descrip-
       tions  for  a  terminal  with the same name located in two
       different databases.  For instance, you can use this  fea-
       ture for comparing descriptions for the same terminal cre-
       ated by different people.


Other Options

       -0   causes the fields to be printed on one line,  without
            wrapping.

       -1   causes  the  fields  to be printed out one to a line.
            Otherwise, the fields will be printed  several  to  a
            line to a maximum width of 60 characters.

       -a   tells  infocmp  to  retain commented-out capabilities
            rather than discarding them.  Capabilities  are  com-
            mented by prefixing them with a period.

       -D   tells infocmp to print the database locations that it
            knows about, and exit.

       -E   Dump  the  capabilities  of  the  given  terminal  as
            tables,  needed  in  the C initializer for a TERMTYPE
            structure (the terminal capability structure  in  the
            <term.h>).   This option is useful for preparing ver-
            sions of the curses library  hardwired  for  a  given
            terminal  type.   The tables are all declared static,
            and are named according to the type and the  name  of
            the corresponding terminal entry.

            Before  ncurses  5.0, the split between the -e and -E
            options was not  needed;  but  support  for  extended
            names required making the arrays of terminal capabil-
            ities separate from the TERMTYPE structure.

       -e   Dump the capabilities of the given terminal  as  a  C
            initializer  for  a  TERMTYPE structure (the terminal
            capability structure in the <term.h>).   This  option
            is  useful  for  preparing  versions  of  the  curses
            library hardwired for a given terminal type.

       -F   compare terminfo files.  This assumes that  two  fol-
            lowing   arguments  are  filenames.   The  files  are
            searched for pairwise matches between  entries,  with
            two entries considered to match if any of their names
            do.  The report  printed  to  standard  output  lists
            entries  with  no  matches  in  the  other  file, and
            entries with more than one match.  For  entries  with
            exactly  one  match  it includes a difference report.
            Normally, to reduce the volume  of  the  report,  use
            references  are  not resolved before looking for dif-
            ferences, but resolution can be forced by also speci-
            fying -r.

       -f   Display   complex   terminfo  strings  which  contain
            if/then/else/endif expressions indented for readabil-
            ity.

       -G   Display constant literals in decimal form rather than
            their character equivalents.

       -g   Display constant character literals  in  quoted  form
            rather than their decimal equivalents.

       -i   Analyze the initialization (is1, is2, is3), and reset
            (rs1, rs2, rs3), strings in the  entry,  as  well  as
            those  used  for starting/stopping cursor-positioning
            mode (smcup,  rmcup)  as  well  as  starting/stopping
            keymap mode (smkx, rmkx).

            For  each  string,  the code tries to analyze it into
            actions in terms of the  other  capabilities  in  the
            entry,  certain  X3.64/ISO 6429/ECMA-48 capabilities,
            and certain DEC VT-series private modes (the  set  of
            recognized  special  sequences  has been selected for
            completeness over the  existing  terminfo  database).
            Each  report  line  consists  of the capability name,
            followed by a colon and space, followed by  a  print-
            able expansion of the capability string with sections
            matching recognized actions translated into {}-brack-
            eted descriptions.

            Here is a list of the DEC/ANSI special sequences rec-
            ognized:

                  Action        Meaning
                  -----------------------------------------
                  RIS           full reset
                  SC            save cursor
                  RC            restore cursor
                  LL            home-down
                  RSR           reset scroll region
                  -----------------------------------------
                  DECSTR        soft reset (VT320)
                  S7C1T         7-bit controls (VT220)
                  -----------------------------------------
                  ISO DEC G0    enable DEC graphics for G0
                  ISO UK G0     enable UK chars for G0
                  ISO US G0     enable US chars for G0
                  ISO DEC G1    enable DEC graphics for G1
                  ISO UK G1     enable UK chars for G1
                  ISO US G1     enable US chars for G1
                  -----------------------------------------
                  DECPAM        application keypad mode
                  DECPNM        normal keypad mode
                  DECANSI       enter ANSI mode
                  -----------------------------------------
                  ECMA[+-]AM    keyboard action mode
                  ECMA[+-]IRM   insert replace mode
                  ECMA[+-]SRM   send receive mode
                  ECMA[+-]LNM   linefeed mode
                  -----------------------------------------
                  DEC[+-]CKM    application cursor keys
                  DEC[+-]ANM    set VT52 mode
                  DEC[+-]COLM   132-column mode
                  DEC[+-]SCLM   smooth scroll
                  DEC[+-]SCNM   reverse video mode
                  DEC[+-]OM     origin mode
                  DEC[+-]AWM    wraparound mode
                  DEC[+-]ARM    auto-repeat mode

            It also recognizes  a  SGR  action  corresponding  to
            ANSI/ISO  6429/ECMA  Set Graphics Rendition, with the
            values NORMAL, BOLD, UNDERLINE, BLINK,  and  REVERSE.
            All  but NORMAL may be prefixed with `+' (turn on) or
            `-' (turn off).

            An  SGR0  designates  an  empty  highlight   sequence
            (equivalent to {SGR:NORMAL}).

       -l   Set output format to terminfo.

       -p   Ignore padding specifications when comparing strings.

       -Q n Rather  than  show  source in terminfo (text) format,
            print the compiled (binary) format in hexadecimal  or
            base64 form, depending on the option's value:

               1  hexadecimal

               2  base64

               3  hexadecimal and base64

       -q   This makes the output a little shorter:

            o   Make  the  comparison listing shorter by omitting
                subheadings, and using "-" for  absent  capabili-
                ties, "@" for canceled rather than "NULL".

            o   Omit  the "Reconstructed from" comment for source
                listings.

       -Rsubset
            Restrict output to a given subset.   This  option  is
            for  use with archaic versions of terminfo like those
            on SVr1, Ultrix, or HP/UX that  do  not  support  the
            full  set  of  SVR4/XSI Curses terminfo; and variants
            such as AIX that have their own extensions incompati-
            ble with SVr4/XSI.

            Available  terminfo  subsets  are  "SVr1",  "Ultrix",
            "HP", and "AIX"; see terminfo(5)  for  details.   You
            can  also  choose the subset "BSD" which selects only
            capabilities with termcap equivalents  recognized  by
            4.4BSD.

       -s [d|i|l|c]
            The  -s  option  sorts  the  fields  within each type
            according to the argument below:

            d    leave fields in the order that they  are  stored
                 in the terminfo database.

            i    sort by terminfo name.

            l    sort by the long C variable name.

            c    sort by the termcap name.

            If the -s option is not given, the fields printed out
            will be sorted alphabetically by  the  terminfo  name
            within each type, except in the case of the -C or the
            -L options, which cause the sorting to be done by the
            termcap  name  or  the  long C variable name, respec-
            tively.

       -T   eliminates size-restrictions on the  generated  text.
            This is mainly useful for testing and analysis, since
            the compiled descriptions are limited (e.g., 1023 for
            termcap, 4096 for terminfo).

       -t   tells  tic  to  discard  commented-out  capabilities.
            Normally when translating from terminfo  to  termcap,
            untranslatable capabilities are commented-out.

       -U   tells  infocmp  to  not  post-process  the data after
            parsing the source file.   This  feature  helps  when
            comparing  the  actual  contents of two source files,
            since it excludes the inferences that  infocmp  makes
            to fill in missing data.

       -V   reports the version of ncurses which was used in this
            program, and exits.

       -v n prints out tracing information on standard  error  as
            the  program runs.  Higher values of n induce greater
            verbosity.

       -w width
            changes the output to width characters.

       -x   print  information  for  user-defined   capabilities.
            These are extensions to the terminfo repertoire which
            can be loaded using the -x option of tic.


FILES

       /usr/share/terminfo Compiled  terminal  description  data-
                           base.


EXTENSIONS

       The  -0,  -1,  -E, -F, -G, -R, -T, -V, -a, -e, -f, -g, -i,
       -l, -p, -q and  -t  options  are  not  supported  in  SVr4
       curses.

       The -r option's notion of `termcap' capabilities is System
       V Release 4's.  Actual BSD curses  versions  will  have  a
       more  restricted  set.  To see only the 4.4BSD set, use -r
       -RBSD.


BUGS

       The -F option of infocmp(1m) should be a toe(1m) mode.


SEE ALSO

       captoinfo(1m),    infotocap(1m),     tic(1m),     toe(1m),
       curses(3x), terminfo(5).

       http://invisible-island.net/ncurses/tctest.html

       This describes ncurses version 6.0 (patch 20160130).


AUTHOR

       Eric S. Raymond <esr@snark.thyrsus.com> and
       Thomas E. Dickey <dickey@invisible-island.net>



                                                            infocmp(1m)
ncurses-6.0-20160213/doc/html/man/curs_memleaks.3x.html0000644000175100001440000001245212653207005021015 0ustar tomusers curs_memleaks 3x

curs_memleaks 3x

curs_memleaks(3x)                                     curs_memleaks(3x)




NAME

       _nc_freeall _nc_free_and_exit - curses memory-leak
       checking


SYNOPSIS

       #include <curses.h>

       void _nc_freeall(void);
       void _nc_free_and_exit(int);


DESCRIPTION

       These functions are used to simplify  analysis  of  memory
       leaks  in  the  ncurses  library.   They  are normally not
       available; they must be configured  into  the  library  at
       build  time  using  the --disable-leaks option.  That com-
       piles-in code that frees memory that normally would not be
       freed.

       Any  implementation of curses must not free the memory as-
       sociated with a screen, since (even after calling endwin),
       it  must be available for use in the next call to refresh.
       There are also chunks of memory held for performance  rea-
       sons.   That  makes it hard to analyze curses applications
       for memory leaks.  To work around this, one  can  build  a
       debugging version of the ncurses library which frees those
       chunks which it can, and provides these functions to  free
       all of the memory allocated by the ncurses library.

       The  _nc_free_and_exit function is the preferred one since
       some of the memory which is freed may be required for  the
       application  to  continue  running.   Its parameter is the
       code to pass to the exit routine.


RETURN VALUE

       These functions do not return a value.


PORTABILITY

       These functions are not part of the XSI interface.


SEE ALSO

       curses(3x).



                                                      curs_memleaks(3x)
ncurses-6.0-20160213/doc/html/man/menu_post.3x.html0000644000175100001440000001363012653207011020170 0ustar tomusers menu_post 3x

menu_post 3x

menu_post(3x)                                             menu_post(3x)




NAME

       post_menu, unpost_menu - write or erase menus from associ-
       ated subwindows


SYNOPSIS

       #include <menu.h>
       int post_menu(MENU *menu);
       int unpost_menu(MENU *menu);


DESCRIPTION

       The function post_menu displays a menu to  its  associated
       subwindow.   To trigger physical display of the subwindow,
       use  refresh  or  some  equivalent  curses  routine   (the
       implicit  doupdate  triggered  by  an curses input request
       will do). post_menu resets the  selection  status  of  all
       items.

       The  function  unpost_menu erases menu from its associated
       subwindow.


RETURN VALUE

       These routines return one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_POSTED
            The menu has already been posted.

       E_BAD_STATE
            Routine was called from an initialization or termina-
            tion function.

       E_NO_ROOM
            Menu is too large for its window. You should consider
            to use set_menu_format() to solve the problem.

       E_NOT_POSTED
            The menu has not been posted.

       E_NOT_CONNECTED
            No items are connected to the menu.


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V  menu  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                          menu_post(3x)
ncurses-6.0-20160213/doc/html/man/keybound.3x.html0000644000175100001440000001166712653207010020006 0ustar tomusers keybound 3x

keybound 3x

keybound(3x)                                               keybound(3x)




NAME

       keybound - return definition of keycode


SYNOPSIS

       #include <curses.h>

       char * keybound(int keycode, int count);


DESCRIPTION

       This is an extension to the curses library.  It permits an
       application to determine the string which  is  defined  in
       the terminfo for specific keycodes.


RETURN VALUE

       The keycode parameter must be greater than zero, else NULL
       is returned.  If it does not correspond to a defined  key,
       then  NULL  is  returned.   The count parameter is used to
       allow the application to iterate through multiple  defini-
       tions,  counting from zero.  When successful, the function
       returns a string which must be freed by the caller.


PORTABILITY

       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on them be  con-
       ditioned using NCURSES_VERSION.


SEE ALSO

       define_key(3x), keyok(3x).


AUTHOR

       Thomas Dickey.



                                                           keybound(3x)
ncurses-6.0-20160213/doc/html/man/form_userptr.3x.html0000644000175100001440000001217612653207010020711 0ustar tomusers form_userptr 3x

form_userptr 3x

form_userptr(3x)                                       form_userptr(3x)




NAME

       set_form_userptr,  form_userptr  -  associate  application
       data with a form item


SYNOPSIS

       #include <form.h>
       int set_form_userptr(FORM *form, void *userptr);
       void* form_userptr(const FORM *form);


DESCRIPTION

       Every form and every form item has a  field  that  can  be
       used to hold application-specific data (that is, the form-
       driver code leaves it alone).  These functions get and set
       the form user pointer field.


RETURN VALUE

       The  function form_userptr returns a pointer (which may be
       NULL).  It does not set errno.

       The function set_form_userptr returns E_OK (success).


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.

       The user pointer is a void pointer.  We chose not to leave
       it as a char pointer for SVr4 compatibility.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                       form_userptr(3x)
ncurses-6.0-20160213/doc/html/man/form_hook.3x.html0000644000175100001440000001467612653207007020162 0ustar tomusers form_hook 3x

form_hook 3x

form_hook(3x)                                             form_hook(3x)




NAME

       form_hook - set hooks for automatic invocation by applica-
       tions


SYNOPSIS

       #include <form.h>
       int set_field_init(FORM *form, Form_Hook func);
       Form_Hook field_init(const FORM *form);
       int set_field_term(FORM *form, Form_Hook func);
       Form_Hook field_term(const FORM *form);
       int set_form_init(FORM *form, Form_Hook func);
       Form_Hook form_init(const FORM *form);
       int set_form_term(FORM *form, Form_Hook func);
       Form_Hook form_term(const FORM *form);


DESCRIPTION

       These functions make it possible to set hook functions  to
       be called at various points in the automatic processing of
       input event codes by form_driver.

       The function set_field_init sets a hook to  be  called  at
       form-post  time  and  each time the selected field changes
       (after the change).  field_init returns the current  field
       init hook, if any (NULL if there is no such hook).

       The  function  set_field_term  sets a hook to be called at
       form-unpost time and each time the selected field  changes
       (before the change).  field_term returns the current field
       term hook, if any (NULL if there is no such hook).

       The function set_form_init sets a hook  to  be  called  at
       form-post  time  and  just  after a page change once it is
       posted.  form_init returns the current form init hook,  if
       any (NULL if there is no such hook).

       The  function  set_form_term  sets  a hook to be called at
       form-unpost time and just before a page change once it  is
       posted.   form_init returns the current form term hook, if
       any (NULL if there is no such hook).


RETURN VALUE

       Routines that return pointers return NULL on error.  Other
       routines return one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                          form_hook(3x)
ncurses-6.0-20160213/doc/html/man/terminfo.5.html0000644000175100001440000043432012653207012017620 0ustar tomusers terminfo 5 File Formats

terminfo 5 File Formats

terminfo(5)                   File Formats                  terminfo(5)




NAME

       terminfo - terminal capability data base


SYNOPSIS

       /usr/share/terminfo/*/*


DESCRIPTION

       Terminfo  is  a  data  base  describing terminals, used by
       screen-oriented programs  such  as  nvi(1),  rogue(1)  and
       libraries  such  as curses(3x).  Terminfo describes termi-
       nals by giving a set of capabilities which they  have,  by
       specifying how to perform screen operations, and by speci-
       fying padding requirements and  initialization  sequences.
       This describes ncurses version 6.0 (patch 20160130).

       Entries in terminfo consist of a sequence of `,' separated
       fields (embedded commas may be escaped with a backslash or
       notated  as \054).  White space after the `,' separator is
       ignored.  The first entry  for  each  terminal  gives  the
       names  which  are known for the terminal, separated by `|'
       characters.  The first  name  given  is  the  most  common
       abbreviation  for the terminal, the last name given should
       be a long name fully identifying  the  terminal,  and  all
       others  are  understood as synonyms for the terminal name.
       All names but the last should be in lower case and contain
       no  blanks;  the last name may well contain upper case and
       blanks for readability.

       Lines beginning with a `#' in the first column are treated
       as  comments.  While comment lines are legal at any point,
       the output of captoinfo and infotocap  (aliases  for  tic)
       will move comments so they occur only between entries.

       Newlines  and  leading  tabs  may  be  used for formatting
       entries for readability.  These are  removed  from  parsed
       entries.   The  infocmp -f option relies on this to format
       if-then-else expressions: the result can be read by tic.

       Terminal names (except for the last, verbose entry) should
       be chosen using the following conventions.  The particular
       piece of hardware making up the  terminal  should  have  a
       root  name,  thus  "hp2621".  This name should not contain
       hyphens.  Modes that the hardware can be in, or user pref-
       erences,  should  be indicated by appending a hyphen and a
       mode suffix.  Thus, a vt100 in 132 column  mode  would  be
       vt100-w.  The following suffixes should be used where pos-
       sible:

      Suffix                  Meaning                   Example
      -nn      Number of lines on the screen            aaa-60
      -np      Number of pages of memory                c100-4p
      -am      With automargins (usually the default)   vt100-am
      -m       Mono mode; suppress color                ansi-m
      -mc      Magic cookie; spaces when highlighting   wy30-mc
      -na      No arrow keys (leave them in local)      c100-na
      -nam     Without automatic margins                vt100-nam
      -nl      No status line                           att4415-nl
      -ns      No status line                           hp2626-ns
      -rv      Reverse video                            c100-rv
      -s       Enable status line                       vt100-s
      -vb      Use visible bell instead of beep         wy370-vb

      -w       Wide mode (> 80 columns, usually 132)    vt100-w

       For more on terminal naming conventions, see  the  term(7)
       manual page.


Predefined Capabilities

       The  following  is  a  complete  table of the capabilities
       included in a terminfo description block and available  to
       terminfo-using code.  In each line of the table,

       The  variable  is the name by which the programmer (at the
       terminfo level) accesses the capability.

       The capname is the short name used  in  the  text  of  the
       database,  and  is used by a person updating the database.
       Whenever possible, capnames are chosen to be the  same  as
       or similar to the ANSI X3.64-1979 standard (now superseded
       by ECMA-48, which uses identical or very  similar  names).
       Semantics are also intended to match those of the specifi-
       cation.

       The termcap code is the old termcap capability name  (some
       capabilities are new, and have names which termcap did not
       originate).

       Capability names have no hard length limit, but an  infor-
       mal  limit  of  5 characters has been adopted to keep them
       short and to allow the tabs in the  source  file  Caps  to
       line up nicely.

       Finally,  the  description  field  attempts  to convey the
       semantics of the capability.  You may find some  codes  in
       the description field:

       (P)    indicates that padding may be specified

       #[1-9] in  the description field indicates that the string
              is passed through tparm with parms as given (#i).

       (P*)   indicates that padding may vary  in  proportion  to
              the number of lines affected

       (#i)   indicates the ith parameter.


       These are the boolean capabilities:


               Variable          Cap-   TCap     Description
               Booleans          name   Code
       auto_left_margin          bw     bw   cub1 wraps from col-
                                             umn 0 to last column
       auto_right_margin         am     am   terminal has auto-
                                             matic margins
       back_color_erase          bce    ut   screen erased with
                                             background color
       can_change                ccc    cc   terminal can re-
                                             define existing col-
                                             ors
       ceol_standout_glitch      xhp    xs   standout not erased
                                             by overwriting (hp)
       col_addr_glitch           xhpa   YA   only positive motion
                                             for hpa/mhpa caps



       cpi_changes_res           cpix   YF   changing character
                                             pitch changes reso-
                                             lution
       cr_cancels_micro_mode     crxm   YB   using cr turns off
                                             micro mode
       dest_tabs_magic_smso      xt     xt   tabs destructive,
                                             magic so char
                                             (t1061)
       eat_newline_glitch        xenl   xn   newline ignored
                                             after 80 cols (con-
                                             cept)
       erase_overstrike          eo     eo   can erase over-
                                             strikes with a blank
       generic_type              gn     gn   generic line type
       hard_copy                 hc     hc   hardcopy terminal
       hard_cursor               chts   HC   cursor is hard to
                                             see
       has_meta_key              km     km   Has a meta key
                                             (i.e., sets 8th-bit)
       has_print_wheel           daisy  YC   printer needs opera-
                                             tor to change char-
                                             acter set
       has_status_line           hs     hs   has extra status
                                             line
       hue_lightness_saturation  hls    hl   terminal uses only
                                             HLS color notation
                                             (Tektronix)
       insert_null_glitch        in     in   insert mode distin-
                                             guishes nulls
       lpi_changes_res           lpix   YG   changing line pitch
                                             changes resolution
       memory_above              da     da   display may be
                                             retained above the
                                             screen
       memory_below              db     db   display may be
                                             retained below the
                                             screen
       move_insert_mode          mir    mi   safe to move while
                                             in insert mode
       move_standout_mode        msgr   ms   safe to move while
                                             in standout mode
       needs_xon_xoff            nxon   nx   padding will not
                                             work, xon/xoff
                                             required
       no_esc_ctlc               xsb    xb   beehive (f1=escape,
                                             f2=ctrl C)
       no_pad_char               npc    NP   pad character does
                                             not exist
       non_dest_scroll_region    ndscr  ND   scrolling region is
                                             non-destructive
       non_rev_rmcup             nrrmc  NR   smcup does not
                                             reverse rmcup
       over_strike               os     os   terminal can over-
                                             strike
       prtr_silent               mc5i   5i   printer will not
                                             echo on screen
       row_addr_glitch           xvpa   YD   only positive motion
                                             for vpa/mvpa caps
       semi_auto_right_margin    sam    YE   printing in last
                                             column causes cr
       status_line_esc_ok        eslok  es   escape can be used
                                             on the status line
       tilde_glitch              hz     hz   cannot print ~'s
                                             (Hazeltine)


       transparent_underline     ul     ul   underline character
                                             overstrikes
       xon_xoff                  xon    xo   terminal uses
                                             xon/xoff handshaking

       These are the numeric capabilities:


               Variable          Cap-   TCap     Description
                Numeric          name   Code
       columns                   cols   co   number of columns in
                                             a line
       init_tabs                 it     it   tabs initially every
                                             # spaces
       label_height              lh     lh   rows in each label
       label_width               lw     lw   columns in each
                                             label
       lines                     lines  li   number of lines on
                                             screen or page
       lines_of_memory           lm     lm   lines of memory if >
                                             line. 0 means varies
       magic_cookie_glitch       xmc    sg   number of blank
                                             characters left by
                                             smso or rmso
       max_attributes            ma     ma   maximum combined
                                             attributes terminal
                                             can handle
       max_colors                colors Co   maximum number of
                                             colors on screen
       max_pairs                 pairs  pa   maximum number of
                                             color-pairs on the
                                             screen
       maximum_windows           wnum   MW   maximum number of
                                             definable windows
       no_color_video            ncv    NC   video attributes
                                             that cannot be used
                                             with colors
       num_labels                nlab   Nl   number of labels on
                                             screen
       padding_baud_rate         pb     pb   lowest baud rate
                                             where padding needed
       virtual_terminal          vt     vt   virtual terminal
                                             number (CB/unix)
       width_status_line         wsl    ws   number of columns in
                                             status line

       The following numeric  capabilities  are  present  in  the
       SVr4.0  term  structure, but are not yet documented in the
       man page.  They came in with SVr4's printer support.


               Variable          Cap-   TCap     Description
                Numeric          name   Code
       bit_image_entwining       bitwin Yo   number of passes for
                                             each bit-image row
       bit_image_type            bitype Yp   type of bit-image
                                             device
       buffer_capacity           bufsz  Ya   numbers of bytes
                                             buffered before
                                             printing
       buttons                   btns   BT   number of buttons on
                                             mouse
       dot_horz_spacing          spinh  Yc   spacing of dots hor-
                                             izontally in dots
                                             per inch

       dot_vert_spacing          spinv  Yb   spacing of pins ver-
                                             tically in pins per
                                             inch
       max_micro_address         maddr  Yd   maximum value in
                                             micro_..._address
       max_micro_jump            mjump  Ye   maximum value in
                                             parm_..._micro
       micro_col_size            mcs    Yf   character step size
                                             when in micro mode
       micro_line_size           mls    Yg   line step size when
                                             in micro mode
       number_of_pins            npins  Yh   numbers of pins in
                                             print-head
       output_res_char           orc    Yi   horizontal resolu-
                                             tion in units per
                                             line
       output_res_horz_inch      orhi   Yk   horizontal resolu-
                                             tion in units per
                                             inch
       output_res_line           orl    Yj   vertical resolution
                                             in units per line
       output_res_vert_inch      orvi   Yl   vertical resolution
                                             in units per inch
       print_rate                cps    Ym   print rate in char-
                                             acters per second
       wide_char_size            widcs  Yn   character step size
                                             when in double wide
                                             mode

       These are the string capabilities:


               Variable          Cap-   TCap     Description
                String           name   Code
       acs_chars                 acsc   ac   graphics charset
                                             pairs, based on
                                             vt100
       back_tab                  cbt    bt   back tab (P)
       bell                      bel    bl   audible signal
                                             (bell) (P)
       carriage_return           cr     cr   carriage return (P*)
                                             (P*)
       change_char_pitch         cpi    ZA   Change number of
                                             characters per inch
                                             to #1
       change_line_pitch         lpi    ZB   Change number of
                                             lines per inch to #1
       change_res_horz           chr    ZC   Change horizontal
                                             resolution to #1
       change_res_vert           cvr    ZD   Change vertical res-
                                             olution to #1
       change_scroll_region      csr    cs   change region to
                                             line #1 to line #2
                                             (P)
       char_padding              rmp    rP   like ip but when in
                                             insert mode
       clear_all_tabs            tbc    ct   clear all tab stops
                                             (P)
       clear_margins             mgc    MC   clear right and left
                                             soft margins
       clear_screen              clear  cl   clear screen and
                                             home cursor (P*)
       clr_bol                   el1    cb   Clear to beginning
                                             of line


       clr_eol                   el     ce   clear to end of line
                                             (P)
       clr_eos                   ed     cd   clear to end of
                                             screen (P*)
       column_address            hpa    ch   horizontal position
                                             #1, absolute (P)
       command_character         cmdch  CC   terminal settable
                                             cmd character in
                                             prototype !?
       create_window             cwin   CW   define a window #1
                                             from #2,#3 to #4,#5
       cursor_address            cup    cm   move to row #1 col-
                                             umns #2
       cursor_down               cud1   do   down one line
       cursor_home               home   ho   home cursor (if no
                                             cup)
       cursor_invisible          civis  vi   make cursor invisi-
                                             ble
       cursor_left               cub1   le   move left one space
       cursor_mem_address        mrcup  CM   memory relative cur-
                                             sor addressing, move
                                             to row #1 columns #2
       cursor_normal             cnorm  ve   make cursor appear
                                             normal (undo
                                             civis/cvvis)
       cursor_right              cuf1   nd   non-destructive
                                             space (move right
                                             one space)
       cursor_to_ll              ll     ll   last line, first
                                             column (if no cup)
       cursor_up                 cuu1   up   up one line
       cursor_visible            cvvis  vs   make cursor very
                                             visible
       define_char               defc   ZE   Define a character
                                             #1, #2 dots wide,
                                             descender #3
       delete_character          dch1   dc   delete character
                                             (P*)
       delete_line               dl1    dl   delete line (P*)
       dial_phone                dial   DI   dial number #1
       dis_status_line           dsl    ds   disable status line
       display_clock             dclk   DK   display clock
       down_half_line            hd     hd   half a line down
       ena_acs                   enacs  eA   enable alternate
                                             char set
       enter_alt_charset_mode    smacs  as   start alternate
                                             character set (P)
       enter_am_mode             smam   SA   turn on automatic
                                             margins
       enter_blink_mode          blink  mb   turn on blinking
       enter_bold_mode           bold   md   turn on bold (extra
                                             bright) mode
       enter_ca_mode             smcup  ti   string to start pro-
                                             grams using cup
       enter_delete_mode         smdc   dm   enter delete mode
       enter_dim_mode            dim    mh   turn on half-bright
                                             mode
       enter_doublewide_mode     swidm  ZF   Enter double-wide
                                             mode
       enter_draft_quality       sdrfq  ZG   Enter draft-quality
                                             mode
       enter_insert_mode         smir   im   enter insert mode
       enter_italics_mode        sitm   ZH   Enter italic mode
       enter_leftward_mode       slm    ZI   Start leftward car-
                                             riage motion

       enter_micro_mode          smicm  ZJ   Start micro-motion
                                             mode
       enter_near_letter_quality snlq   ZK   Enter NLQ mode
       enter_normal_quality      snrmq  ZL   Enter normal-quality
                                             mode
       enter_protected_mode      prot   mp   turn on protected
                                             mode
       enter_reverse_mode        rev    mr   turn on reverse
                                             video mode
       enter_secure_mode         invis  mk   turn on blank mode
                                             (characters invisi-
                                             ble)
       enter_shadow_mode         sshm   ZM   Enter shadow-print
                                             mode
       enter_standout_mode       smso   so   begin standout mode
       enter_subscript_mode      ssubm  ZN   Enter subscript mode
       enter_superscript_mode    ssupm  ZO   Enter superscript
                                             mode
       enter_underline_mode      smul   us   begin underline mode
       enter_upward_mode         sum    ZP   Start upward car-
                                             riage motion
       enter_xon_mode            smxon  SX   turn on xon/xoff
                                             handshaking
       erase_chars               ech    ec   erase #1 characters
                                             (P)
       exit_alt_charset_mode     rmacs  ae   end alternate char-
                                             acter set (P)
       exit_am_mode              rmam   RA   turn off automatic
                                             margins
       exit_attribute_mode       sgr0   me   turn off all
                                             attributes
       exit_ca_mode              rmcup  te   strings to end pro-
                                             grams using cup
       exit_delete_mode          rmdc   ed   end delete mode
       exit_doublewide_mode      rwidm  ZQ   End double-wide mode
       exit_insert_mode          rmir   ei   exit insert mode
       exit_italics_mode         ritm   ZR   End italic mode
       exit_leftward_mode        rlm    ZS   End left-motion mode
       exit_micro_mode           rmicm  ZT   End micro-motion
                                             mode
       exit_shadow_mode          rshm   ZU   End shadow-print
                                             mode
       exit_standout_mode        rmso   se   exit standout mode
       exit_subscript_mode       rsubm  ZV   End subscript mode
       exit_superscript_mode     rsupm  ZW   End superscript mode
       exit_underline_mode       rmul   ue   exit underline mode
       exit_upward_mode          rum    ZX   End reverse charac-
                                             ter motion
       exit_xon_mode             rmxon  RX   turn off xon/xoff
                                             handshaking
       fixed_pause               pause  PA   pause for 2-3 sec-
                                             onds
       flash_hook                hook   fh   flash switch hook
       flash_screen              flash  vb   visible bell (may
                                             not move cursor)
       form_feed                 ff     ff   hardcopy terminal
                                             page eject (P*)
       from_status_line          fsl    fs   return from status
                                             line
       goto_window               wingo  WG   go to window #1
       hangup                    hup    HU   hang-up phone
       init_1string              is1    i1   initialization
                                             string
       init_2string              is2    is   initialization
                                             string

       init_3string              is3    i3   initialization
                                             string
       init_file                 if     if   name of initializa-
                                             tion file
       init_prog                 iprog  iP   path name of program
                                             for initialization
       initialize_color          initc  Ic   initialize color #1
                                             to (#2,#3,#4)
       initialize_pair           initp  Ip   Initialize color
                                             pair #1 to
                                             fg=(#2,#3,#4),
                                             bg=(#5,#6,#7)
       insert_character          ich1   ic   insert character (P)
       insert_line               il1    al   insert line (P*)
       insert_padding            ip     ip   insert padding after
                                             inserted character
       key_a1                    ka1    K1   upper left of keypad
       key_a3                    ka3    K3   upper right of key-
                                             pad
       key_b2                    kb2    K2   center of keypad
       key_backspace             kbs    kb   backspace key
       key_beg                   kbeg   @1   begin key
       key_btab                  kcbt   kB   back-tab key
       key_c1                    kc1    K4   lower left of keypad
       key_c3                    kc3    K5   lower right of key-
                                             pad
       key_cancel                kcan   @2   cancel key
       key_catab                 ktbc   ka   clear-all-tabs key
       key_clear                 kclr   kC   clear-screen or
                                             erase key
       key_close                 kclo   @3   close key
       key_command               kcmd   @4   command key
       key_copy                  kcpy   @5   copy key
       key_create                kcrt   @6   create key
       key_ctab                  kctab  kt   clear-tab key
       key_dc                    kdch1  kD   delete-character key
       key_dl                    kdl1   kL   delete-line key
       key_down                  kcud1  kd   down-arrow key
       key_eic                   krmir  kM   sent by rmir or smir
                                             in insert mode
       key_end                   kend   @7   end key
       key_enter                 kent   @8   enter/send key
       key_eol                   kel    kE   clear-to-end-of-line
                                             key
       key_eos                   ked    kS   clear-to-end-of-
                                             screen key
       key_exit                  kext   @9   exit key
       key_f0                    kf0    k0   F0 function key
       key_f1                    kf1    k1   F1 function key
       key_f10                   kf10   k;   F10 function key
       key_f11                   kf11   F1   F11 function key
       key_f12                   kf12   F2   F12 function key
       key_f13                   kf13   F3   F13 function key
       key_f14                   kf14   F4   F14 function key
       key_f15                   kf15   F5   F15 function key
       key_f16                   kf16   F6   F16 function key
       key_f17                   kf17   F7   F17 function key
       key_f18                   kf18   F8   F18 function key
       key_f19                   kf19   F9   F19 function key
       key_f2                    kf2    k2   F2 function key
       key_f20                   kf20   FA   F20 function key
       key_f21                   kf21   FB   F21 function key
       key_f22                   kf22   FC   F22 function key
       key_f23                   kf23   FD   F23 function key
       key_f24                   kf24   FE   F24 function key

       key_f25                   kf25   FF   F25 function key
       key_f26                   kf26   FG   F26 function key
       key_f27                   kf27   FH   F27 function key
       key_f28                   kf28   FI   F28 function key
       key_f29                   kf29   FJ   F29 function key
       key_f3                    kf3    k3   F3 function key
       key_f30                   kf30   FK   F30 function key
       key_f31                   kf31   FL   F31 function key
       key_f32                   kf32   FM   F32 function key
       key_f33                   kf33   FN   F33 function key
       key_f34                   kf34   FO   F34 function key
       key_f35                   kf35   FP   F35 function key
       key_f36                   kf36   FQ   F36 function key
       key_f37                   kf37   FR   F37 function key
       key_f38                   kf38   FS   F38 function key
       key_f39                   kf39   FT   F39 function key
       key_f4                    kf4    k4   F4 function key
       key_f40                   kf40   FU   F40 function key
       key_f41                   kf41   FV   F41 function key
       key_f42                   kf42   FW   F42 function key
       key_f43                   kf43   FX   F43 function key
       key_f44                   kf44   FY   F44 function key
       key_f45                   kf45   FZ   F45 function key
       key_f46                   kf46   Fa   F46 function key
       key_f47                   kf47   Fb   F47 function key
       key_f48                   kf48   Fc   F48 function key
       key_f49                   kf49   Fd   F49 function key
       key_f5                    kf5    k5   F5 function key
       key_f50                   kf50   Fe   F50 function key
       key_f51                   kf51   Ff   F51 function key
       key_f52                   kf52   Fg   F52 function key
       key_f53                   kf53   Fh   F53 function key
       key_f54                   kf54   Fi   F54 function key
       key_f55                   kf55   Fj   F55 function key
       key_f56                   kf56   Fk   F56 function key
       key_f57                   kf57   Fl   F57 function key
       key_f58                   kf58   Fm   F58 function key
       key_f59                   kf59   Fn   F59 function key
       key_f6                    kf6    k6   F6 function key
       key_f60                   kf60   Fo   F60 function key
       key_f61                   kf61   Fp   F61 function key
       key_f62                   kf62   Fq   F62 function key
       key_f63                   kf63   Fr   F63 function key
       key_f7                    kf7    k7   F7 function key
       key_f8                    kf8    k8   F8 function key
       key_f9                    kf9    k9   F9 function key
       key_find                  kfnd   @0   find key
       key_help                  khlp   %1   help key
       key_home                  khome  kh   home key
       key_ic                    kich1  kI   insert-character key
       key_il                    kil1   kA   insert-line key
       key_left                  kcub1  kl   left-arrow key
       key_ll                    kll    kH   lower-left key (home
                                             down)
       key_mark                  kmrk   %2   mark key
       key_message               kmsg   %3   message key
       key_move                  kmov   %4   move key
       key_next                  knxt   %5   next key
       key_npage                 knp    kN   next-page key
       key_open                  kopn   %6   open key
       key_options               kopt   %7   options key
       key_ppage                 kpp    kP   previous-page key
       key_previous              kprv   %8   previous key
       key_print                 kprt   %9   print key
       key_redo                  krdo   %0   redo key

       key_reference             kref   &1   reference key
       key_refresh               krfr   &2   refresh key
       key_replace               krpl   &3   replace key
       key_restart               krst   &4   restart key
       key_resume                kres   &5   resume key
       key_right                 kcuf1  kr   right-arrow key
       key_save                  ksav   &6   save key
       key_sbeg                  kBEG   &9   shifted begin key
       key_scancel               kCAN   &0   shifted cancel key
       key_scommand              kCMD   *1   shifted command key
       key_scopy                 kCPY   *2   shifted copy key
       key_screate               kCRT   *3   shifted create key
       key_sdc                   kDC    *4   shifted delete-char-
                                             acter key
       key_sdl                   kDL    *5   shifted delete-line
                                             key
       key_select                kslt   *6   select key
       key_send                  kEND   *7   shifted end key
       key_seol                  kEOL   *8   shifted clear-to-
                                             end-of-line key
       key_sexit                 kEXT   *9   shifted exit key
       key_sf                    kind   kF   scroll-forward key
       key_sfind                 kFND   *0   shifted find key
       key_shelp                 kHLP   #1   shifted help key
       key_shome                 kHOM   #2   shifted home key
       key_sic                   kIC    #3   shifted insert-char-
                                             acter key
       key_sleft                 kLFT   #4   shifted left-arrow
                                             key
       key_smessage              kMSG   %a   shifted message key
       key_smove                 kMOV   %b   shifted move key
       key_snext                 kNXT   %c   shifted next key
       key_soptions              kOPT   %d   shifted options key
       key_sprevious             kPRV   %e   shifted previous key
       key_sprint                kPRT   %f   shifted print key
       key_sr                    kri    kR   scroll-backward key
       key_sredo                 kRDO   %g   shifted redo key
       key_sreplace              kRPL   %h   shifted replace key
       key_sright                kRIT   %i   shifted right-arrow
                                             key
       key_srsume                kRES   %j   shifted resume key
       key_ssave                 kSAV   !1   shifted save key
       key_ssuspend              kSPD   !2   shifted suspend key
       key_stab                  khts   kT   set-tab key
       key_sundo                 kUND   !3   shifted undo key
       key_suspend               kspd   &7   suspend key
       key_undo                  kund   &8   undo key
       key_up                    kcuu1  ku   up-arrow key
       keypad_local              rmkx   ke   leave 'key-
                                             board_transmit' mode
       keypad_xmit               smkx   ks   enter 'key-
                                             board_transmit' mode
       lab_f0                    lf0    l0   label on function
                                             key f0 if not f0
       lab_f1                    lf1    l1   label on function
                                             key f1 if not f1
       lab_f10                   lf10   la   label on function
                                             key f10 if not f10
       lab_f2                    lf2    l2   label on function
                                             key f2 if not f2
       lab_f3                    lf3    l3   label on function
                                             key f3 if not f3
       lab_f4                    lf4    l4   label on function
                                             key f4 if not f4


       lab_f5                    lf5    l5   label on function
                                             key f5 if not f5
       lab_f6                    lf6    l6   label on function
                                             key f6 if not f6
       lab_f7                    lf7    l7   label on function
                                             key f7 if not f7
       lab_f8                    lf8    l8   label on function
                                             key f8 if not f8
       lab_f9                    lf9    l9   label on function
                                             key f9 if not f9
       label_format              fln    Lf   label format
       label_off                 rmln   LF   turn off soft labels
       label_on                  smln   LO   turn on soft labels
       meta_off                  rmm    mo   turn off meta mode
       meta_on                   smm    mm   turn on meta mode
                                             (8th-bit on)
       micro_column_address      mhpa   ZY   Like column_address
                                             in micro mode
       micro_down                mcud1  ZZ   Like cursor_down in
                                             micro mode
       micro_left                mcub1  Za   Like cursor_left in
                                             micro mode
       micro_right               mcuf1  Zb   Like cursor_right in
                                             micro mode
       micro_row_address         mvpa   Zc   Like row_address #1
                                             in micro mode
       micro_up                  mcuu1  Zd   Like cursor_up in
                                             micro mode
       newline                   nel    nw   newline (behave like
                                             cr followed by lf)
       order_of_pins             porder Ze   Match software bits
                                             to print-head pins
       orig_colors               oc     oc   Set all color pairs
                                             to the original ones
       orig_pair                 op     op   Set default pair to
                                             its original value
       pad_char                  pad    pc   padding char
                                             (instead of null)
       parm_dch                  dch    DC   delete #1 characters
                                             (P*)
       parm_delete_line          dl     DL   delete #1 lines (P*)
       parm_down_cursor          cud    DO   down #1 lines (P*)
       parm_down_micro           mcud   Zf   Like parm_down_cur-
                                             sor in micro mode
       parm_ich                  ich    IC   insert #1 characters
                                             (P*)
       parm_index                indn   SF   scroll forward #1
                                             lines (P)
       parm_insert_line          il     AL   insert #1 lines (P*)
       parm_left_cursor          cub    LE   move #1 characters
                                             to the left (P)
       parm_left_micro           mcub   Zg   Like parm_left_cur-
                                             sor in micro mode
       parm_right_cursor         cuf    RI   move #1 characters
                                             to the right (P*)
       parm_right_micro          mcuf   Zh   Like parm_right_cur-
                                             sor in micro mode
       parm_rindex               rin    SR   scroll back #1 lines
                                             (P)
       parm_up_cursor            cuu    UP   up #1 lines (P*)
       parm_up_micro             mcuu   Zi   Like parm_up_cursor
                                             in micro mode
       pkey_key                  pfkey  pk   program function key
                                             #1 to type string #2


       pkey_local                pfloc  pl   program function key
                                             #1 to execute string
                                             #2
       pkey_xmit                 pfx    px   program function key
                                             #1 to transmit
                                             string #2
       plab_norm                 pln    pn   program label #1 to
                                             show string #2
       print_screen              mc0    ps   print contents of
                                             screen
       prtr_non                  mc5p   pO   turn on printer for
                                             #1 bytes
       prtr_off                  mc4    pf   turn off printer
       prtr_on                   mc5    po   turn on printer
       pulse                     pulse  PU   select pulse dialing
       quick_dial                qdial  QD   dial number #1 with-
                                             out checking
       remove_clock              rmclk  RC   remove clock
       repeat_char               rep    rp   repeat char #1 #2
                                             times (P*)
       req_for_input             rfi    RF   send next input char
                                             (for ptys)
       reset_1string             rs1    r1   reset string
       reset_2string             rs2    r2   reset string
       reset_3string             rs3    r3   reset string
       reset_file                rf     rf   name of reset file
       restore_cursor            rc     rc   restore cursor to
                                             position of last
                                             save_cursor
       row_address               vpa    cv   vertical position #1
                                             absolute (P)
       save_cursor               sc     sc   save current cursor
                                             position (P)
       scroll_forward            ind    sf   scroll text up (P)
       scroll_reverse            ri     sr   scroll text down (P)
       select_char_set           scs    Zj   Select character
                                             set, #1
       set_attributes            sgr    sa   define video
                                             attributes #1-#9
                                             (PG9)
       set_background            setb   Sb   Set background color
                                             #1
       set_bottom_margin         smgb   Zk   Set bottom margin at
                                             current line
       set_bottom_margin_parm    smgbp  Zl   Set bottom margin at
                                             line #1 or (if smgtp
                                             is not given) #2
                                             lines from bottom
       set_clock                 sclk   SC   set clock, #1 hrs #2
                                             mins #3 secs
       set_color_pair            scp    sp   Set current color
                                             pair to #1
       set_foreground            setf   Sf   Set foreground color
                                             #1
       set_left_margin           smgl   ML   set left soft margin
                                             at current column.
                                             See smgl. (ML is not
                                             in BSD termcap).
       set_left_margin_parm      smglp  Zm   Set left (right)
                                             margin at column #1
       set_right_margin          smgr   MR   set right soft mar-
                                             gin at current col-
                                             umn
       set_right_margin_parm     smgrp  Zn   Set right margin at
                                             column #1

       set_tab                   hts    st   set a tab in every
                                             row, current columns
       set_top_margin            smgt   Zo   Set top margin at
                                             current line
       set_top_margin_parm       smgtp  Zp   Set top (bottom)
                                             margin at row #1
       set_window                wind   wi   current window is
                                             lines #1-#2 cols
                                             #3-#4
       start_bit_image           sbim   Zq   Start printing bit
                                             image graphics
       start_char_set_def        scsd   Zr   Start character set
                                             definition #1, with
                                             #2 characters in the
                                             set
       stop_bit_image            rbim   Zs   Stop printing bit
                                             image graphics
       stop_char_set_def         rcsd   Zt   End definition of
                                             character set #1
       subscript_characters      subcs  Zu   List of subscript-
                                             able characters
       superscript_characters    supcs  Zv   List of superscript-
                                             able characters
       tab                       ht     ta   tab to next 8-space
                                             hardware tab stop
       these_cause_cr            docr   Zw   Printing any of
                                             these characters
                                             causes CR
       to_status_line            tsl    ts   move to status line,
                                             column #1
       tone                      tone   TO   select touch tone
                                             dialing
       underline_char            uc     uc   underline char and
                                             move past it
       up_half_line              hu     hu   half a line up
       user0                     u0     u0   User string #0
       user1                     u1     u1   User string #1
       user2                     u2     u2   User string #2
       user3                     u3     u3   User string #3
       user4                     u4     u4   User string #4
       user5                     u5     u5   User string #5
       user6                     u6     u6   User string #6
       user7                     u7     u7   User string #7
       user8                     u8     u8   User string #8
       user9                     u9     u9   User string #9
       wait_tone                 wait   WA   wait for dial-tone
       xoff_character            xoffc  XF   XOFF character
       xon_character             xonc   XN   XON character
       zero_motion               zerom  Zx   No motion for subse-
                                             quent character

       The following  string  capabilities  are  present  in  the
       SVr4.0  term structure, but were originally not documented
       in the man page.


               Variable          Cap-     TCap    Description
                String           name     Code
       alt_scancode_esc          scesa    S8   Alternate escape
                                               for scancode emu-
                                               lation
       bit_image_carriage_return bicr     Yv   Move to beginning
                                               of same row
       bit_image_newline         binel    Zz   Move to next row
                                               of the bit image

       bit_image_repeat          birep    Xy   Repeat bit image
                                               cell #1 #2 times
       char_set_names            csnm     Zy   Produce #1'th item
                                               from list of char-
                                               acter set names
       code_set_init             csin     ci   Init sequence for
                                               multiple codesets
       color_names               colornm  Yw   Give name for
                                               color #1
       define_bit_image_region   defbi    Yx   Define rectangular
                                               bit image region
       device_type               devt     dv   Indicate lan-
                                               guage/codeset sup-
                                               port
       display_pc_char           dispc    S1   Display PC charac-
                                               ter #1
       end_bit_image_region      endbi    Yy   End a bit-image
                                               region
       enter_pc_charset_mode     smpch    S2   Enter PC character
                                               display mode
       enter_scancode_mode       smsc     S4   Enter PC scancode
                                               mode
       exit_pc_charset_mode      rmpch    S3   Exit PC character
                                               display mode
       exit_scancode_mode        rmsc     S5   Exit PC scancode
                                               mode
       get_mouse                 getm     Gm   Curses should get
                                               button events,
                                               parameter #1 not
                                               documented.
       key_mouse                 kmous    Km   Mouse event has
                                               occurred
       mouse_info                minfo    Mi   Mouse status
                                               information
       pc_term_options           pctrm    S6   PC terminal
                                               options
       pkey_plab                 pfxl     xl   Program function
                                               key #1 to type
                                               string #2 and show
                                               string #3
       req_mouse_pos             reqmp    RQ   Request mouse
                                               position
       scancode_escape           scesc    S7   Escape for scan-
                                               code emulation
       set0_des_seq              s0ds     s0   Shift to codeset 0
                                               (EUC set 0, ASCII)
       set1_des_seq              s1ds     s1   Shift to codeset 1
       set2_des_seq              s2ds     s2   Shift to codeset 2
       set3_des_seq              s3ds     s3   Shift to codeset 3
       set_a_background          setab    AB   Set background
                                               color to #1, using
                                               ANSI escape
       set_a_foreground          setaf    AF   Set foreground
                                               color to #1, using
                                               ANSI escape
       set_color_band            setcolor Yz   Change to ribbon
                                               color #1
       set_lr_margin             smglr    ML   Set both left and
                                               right margins to
                                               #1, #2.  (ML is
                                               not in BSD term-
                                               cap).
       set_page_length           slines   YZ   Set page length to
                                               #1 lines


       set_tb_margin             smgtb    MT   Sets both top and
                                               bottom margins to
                                               #1, #2

        The XSI Curses standard added  these  hardcopy  capabili-
        ties.  They were used in some post-4.1 versions of System
        V curses, e.g., Solaris 2.5 and IRIX 6.x.  Except for YI,
        the ncurses termcap names for them are invented.  Accord-
        ing to the XSI Curses  standard,  they  have  no  termcap
        names.  If your compiled terminfo entries use these, they
        may not  be  binary-compatible  with  System  V  terminfo
        entries after SVr4.1; beware!


                Variable         Cap-   TCap     Description
                 String          name   Code
        enter_horizontal_hl_mode ehhlm  Xh   Enter horizontal
                                             highlight mode
        enter_left_hl_mode       elhlm  Xl   Enter left highlight
                                             mode
        enter_low_hl_mode        elohlm Xo   Enter low highlight
                                             mode
        enter_right_hl_mode      erhlm  Xr   Enter right high-
                                             light mode
        enter_top_hl_mode        ethlm  Xt   Enter top highlight
                                             mode
        enter_vertical_hl_mode   evhlm  Xv   Enter vertical high-
                                             light mode
        set_a_attributes         sgr1   sA   Define second set of
                                             video attributes
                                             #1-#6
        set_pglen_inch           slengthYI   Set page length to
                                             #1 hundredth of an
                                             inch (some implemen-
                                             tations use sL for
                                             termcap).


User-Defined Capabilities

       The  preceding section listed the predefined capabilities.
       They deal with some  special  features  for  terminals  no
       longer  (or  possibly never) produced.  Occasionally there
       are special features of newer terminals which are  awkward
       or impossible to represent by reusing the predefined capa-
       bilities.

       ncurses addresses this limitation by allowing user-defined
       capabilities.  The tic and infocmp programs provide the -x
       option for this purpose.   When  -x  is  set,  tic  treats
       unknown  capabilities  as  user-defined.   That is, if tic
       encounters a capability name which it does not  recognize,
       it  infers  its  type (boolean, number or string) from the
       syntax and makes an extended table entry for that capabil-
       ity.   The use_extended_names function makes this informa-
       tion conditionally available to applications.  The ncurses
       library  provides the data leaving most of the behavior to
       applications:

       o   User-defined capability strings whose name begins with
           "k" are treated as function keys.

       o   The  types (boolean, number, string) determined by tic
           can be inferred by successful calls on tigetflag, etc.

       o   If the capability name happens to be  two  characters,
           the  capability  is also available through the termcap
           interface.

       While termcap is said to be extensible because it does not
       use  a  predefined set of capabilities, in practice it has
       been limited  to  the  capabilities  defined  by  terminfo
       implementations.   As  a  rule,  user-defined capabilities
       intended for use by termcap applications should be limited
       to  booleans  and  numbers  to avoid running past the 1023
       byte limit assumed by termcap  implementations  and  their
       applications.   In  particular, providing extended sets of
       function keys (past the 60 numbered keys and  the  handful
       of special named keys) is best done using the longer names
       available using terminfo.


A Sample Entry

       The following entry, describing an ANSI-standard terminal,
       is  representative  of  what a terminfo entry for a modern
       terminal typically looks like.

       ansi|ansi/pc-term compatible with color,
               am, mc5i, mir, msgr,
               colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
               acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260
                    j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303
                    u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
               bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
               cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
               cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
               cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
               dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
               el1=\E[1K, home=\E[H, hpa=\E[%i%p1%dG, ht=\E[I, hts=\EH,
               ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J,
               indn=\E[%p1%dS, invis=\E[8m, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
               kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kich1=\E[L,
               mc4=\E[4i, mc5=\E[5i, nel=\r\E[S, op=\E[39;49m,
               rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, rin=\E[%p1%dT,
               rmacs=\E[10m, rmpch=\E[10m, rmso=\E[m, rmul=\E[m,
               s0ds=\E(B, s1ds=\E)B, s2ds=\E*B, s3ds=\E+B,
               setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
               sgr=\E[0;10%?%p1%t;7%;
                          %?%p2%t;4%;
                          %?%p3%t;7%;
                          %?%p4%t;5%;
                          %?%p6%t;1%;
                          %?%p7%t;8%;
                          %?%p9%t;11%;m,
               sgr0=\E[0;10m, smacs=\E[11m, smpch=\E[11m, smso=\E[7m,
               smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
               u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,

       Entries may continue onto multiple lines by placing  white
       space  at  the  beginning  of  each line except the first.
       Comments may be included  on  lines  beginning  with  "#".
       Capabilities in terminfo are of three types:

       o   Boolean  capabilities which indicate that the terminal
           has some particular feature,

       o   numeric capabilities giving the size of  the  terminal
           or the size of particular delays, and

       o   string  capabilities,  which give a sequence which can
           be used to perform particular terminal operations.


Types of Capabilities

       All capabilities have names.  For instance, the fact  that
       ANSI-standard  terminals  have automatic margins (i.e., an
       automatic return and line-feed when the end of a  line  is
       reached)  is  indicated  by  the capability am.  Hence the
       description of ansi includes am.  Numeric capabilities are
       followed  by  the character "#" and then a positive value.
       Thus cols, which indicates the number of columns the  ter-
       minal  has,  gives  the  value  "80" for ansi.  Values for
       numeric capabilities may be specified in decimal, octal or
       hexadecimal,  using the C programming language conventions
       (e.g., 255, 0377 and 0xff or 0xFF).

       Finally, string valued capabilities, such as el (clear  to
       end of line sequence) are given by the two-character code,
       an "=", and then a string ending  at  the  next  following
       ",".

       A  number  of  escape sequences are provided in the string
       valued capabilities for easy encoding of characters there.
       Both  \E  and  \e map to an ESCAPE character, ^x maps to a
       control-x for any appropriate x, and the sequences  \n  \l
       \r  \t  \b  \f  \s give a newline, line-feed, return, tab,
       backspace, form-feed, and space.  Other escapes include

       o   \^ for ^,

       o   \\ for \,

       o   \, for comma,

       o   \: for :,

       o   and \0 for null.

           \0 will produce  \200,  which  does  not  terminate  a
           string  but behaves as a null character on most termi-
           nals, providing CS7 is specified.  See stty(1).

           The reason for this quirk is to maintain  binary  com-
           patibility  of  the compiled terminfo files with other
           implementations, e.g., the SVr4 systems,  which  docu-
           ment  this.   Compiled  terminfo files use null-termi-
           nated strings, with no lengths.  Modifying this  would
           require a new binary format, which would not work with
           other implementations.

       Finally, characters may be given  as  three  octal  digits
       after a \.

       A  delay  in  milliseconds may appear anywhere in a string
       capability, enclosed in $<..> brackets, as in  el=\EK$<5>,
       and  padding  characters  are supplied by tputs to provide
       this delay.  The delay must be a number with at  most  one
       decimal place of precision; it may be followed by suffixes
       "*" or "/" or both.  A  "*"  indicates  that  the  padding
       required  is  proportional to the number of lines affected
       by the  operation,  and  the  amount  given  is  the  per-
       affected-unit  padding  required.   (In the case of insert
       character,  the  factor  is  still  the  number  of  lines
       affected.)   Normally,  padding  is advisory if the device
       has the xon capability; it is used  for  cost  computation
       but  does not trigger delays.  A "/" suffix indicates that
       the padding is mandatory and forces a delay of  the  given
       number  of  milliseconds  even on devices for which xon is
       present to indicate flow control.

       Sometimes individual capabilities must be  commented  out.
       To  do this, put a period before the capability name.  For
       example, see the second ind in the example above.


Fetching Compiled Descriptions

       The ncurses library searches for terminal descriptions  in
       several places.  It uses only the first description found.
       The library has a compiled-in list  of  places  to  search
       which  can be overridden by environment variables.  Before
       starting to search, ncurses eliminates duplicates  in  its
       search list.

       o   If  the  environment  variable  TERMINFO is set, it is
           interpreted as the pathname of a directory  containing
           the  compiled  description  you  are working on.  Only
           that directory is searched.

       o   If TERMINFO is not set, ncurses will instead  look  in
           the  directory $HOME/.terminfo for a compiled descrip-
           tion.

       o   Next, if the  environment  variable  TERMINFO_DIRS  is
           set, ncurses will interpret the contents of that vari-
           able as a  list  of  colon-separated  directories  (or
           database files) to be searched.

           An  empty directory name (i.e., if the variable begins
           or ends with a colon, or contains adjacent colons)  is
           interpreted  as  the  system  location /usr/share/ter-
           minfo.

       o   Finally, ncurses searches these compiled-in locations:

           o   a          list           of           directories
               (/usr/local/ncurses/share/terminfo:/usr/share/ter-
               minfo), and

           o   the system terminfo directory, /usr/share/terminfo
               (the compiled-in default).


Preparing Descriptions

       We  now  outline how to prepare descriptions of terminals.
       The most effective way to prepare a  terminal  description
       is  by  imitating the description of a similar terminal in
       terminfo and to build up a  description  gradually,  using
       partial descriptions with vi or some other screen-oriented
       program to check that they are correct.  Be aware  that  a
       very unusual terminal may expose deficiencies in the abil-
       ity of the terminfo file to describe it  or  bugs  in  the
       screen-handling code of the test program.

       To  get the padding for insert line right (if the terminal
       manufacturer did not document it) a severe test is to edit
       a  large file at 9600 baud, delete 16 or so lines from the
       middle of the screen, then hit the "u" key  several  times
       quickly.   If the terminal messes up, more padding is usu-
       ally needed.  A similar test can be used for insert  char-
       acter.


Basic Capabilities

       The  number  of  columns  on each line for the terminal is
       given by the cols numeric capability.  If the terminal  is
       a  CRT, then the number of lines on the screen is given by
       the lines capability.  If the terminal wraps around to the
       beginning  of the next line when it reaches the right mar-
       gin, then it should have the am capability.  If the termi-
       nal  can  clear its screen, leaving the cursor in the home
       position, then this is given by the clear string  capabil-
       ity.   If the terminal overstrikes (rather than clearing a
       position when a character is struck over) then  it  should
       have  the  os  capability.   If the terminal is a printing
       terminal, with no soft copy unit, give it both hc and  os.
       (os  applies to storage scope terminals, such as TEKTRONIX
       4010 series, as well as hard copy and APL terminals.)   If
       there is a code to move the cursor to the left edge of the
       current row, give this as cr.  (Normally this will be car-
       riage  return,  control M.)  If there is a code to produce
       an audible signal (bell, beep, etc) give this as bel.

       If there is a code to move the cursor one position to  the
       left  (such  as backspace) that capability should be given
       as cub1.  Similarly, codes to move to the right,  up,  and
       down should be given as cuf1, cuu1, and cud1.  These local
       cursor motions should not alter the text they  pass  over,
       for  example,  you would not normally use "cuf1= " because
       the space would erase the character moved over.

       A very important point  here  is  that  the  local  cursor
       motions  encoded in terminfo are undefined at the left and
       top edges  of  a  CRT  terminal.   Programs  should  never
       attempt  to  backspace  around the left edge, unless bw is
       given, and never attempt to go up locally off the top.  In
       order  to  scroll text up, a program will go to the bottom
       left corner of the screen and send the ind (index) string.

       To scroll text down, a program goes to the top left corner
       of  the  screen  and  sends the ri (reverse index) string.
       The strings ind and ri are undefined  when  not  on  their
       respective corners of the screen.

       Parameterized versions of the scrolling sequences are indn
       and rin which have the same semantics as ind and ri except
       that  they take one parameter, and scroll that many lines.
       They are also undefined except at the appropriate edge  of
       the screen.

       The  am  capability tells whether the cursor sticks at the
       right edge of the screen when text  is  output,  but  this
       does not necessarily apply to a cuf1 from the last column.
       The only local motion which is defined from the left  edge
       is  if  bw  is  given, then a cub1 from the left edge will
       move to the right edge of the previous row.  If bw is  not
       given,  the effect is undefined.  This is useful for draw-
       ing a box around the edge of the screen, for example.   If
       the  terminal has switch selectable automatic margins, the
       terminfo file usually assumes that this is on;  i.e.,  am.
       If  the  terminal  has  a command which moves to the first
       column of the next line, that command can be given as  nel
       (newline).   It  does not matter if the command clears the
       remainder of the current line, so if the terminal  has  no
       cr  and lf it may still be possible to craft a working nel
       out of one or both of them.

       These  capabilities  suffice  to  describe  hard-copy  and
       "glass-tty"  terminals.   Thus  the  model  33 teletype is
       described as

       33|tty33|tty|model 33 teletype,
               bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,

       while the Lear Siegler ADM-3 is described as

       adm3|3|lsi adm3,
               am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J,
               ind=^J, lines#24,


Parameterized Strings

       Cursor addressing and other strings  requiring  parameters
       in  the  terminal  are described by a parameterized string
       capability, with printf-like escapes such  as  %x  in  it.
       For  example, to address the cursor, the cup capability is
       given, using two parameters: the row and column to address
       to.  (Rows and columns are numbered from zero and refer to
       the physical screen visible to the user, not to any unseen
       memory.)   If  the  terminal  has  memory  relative cursor
       addressing, that can be indicated by mrcup.

       The parameter mechanism uses a stack and special  %  codes
       to  manipulate  it.  Typically a sequence will push one of
       the parameters onto the stack and then print  it  in  some
       format.   Print  (e.g.,  "%d")  is  a special case.  Other
       operations, including "%t"  pop  their  operand  from  the
       stack.  It is noted that more complex operations are often
       necessary, e.g., in the sgr string.

       The % encodings have the following meanings:

       %%   outputs "%"

       %[[:]flags][width[.precision]][doxXs]
            as in printf, flags are [-+#] and space.  Use  a  ":"
            to  allow the next character to be a "-" flag, avoid-
            ing interpreting "%-" as an operator.

       %c   print pop() like %c in printf

       %s   print pop() like %s in printf

       %p[1-9]
            push i'th parameter

       %P[a-z]
            set dynamic variable [a-z] to pop()

       %g[a-z]/
            get dynamic variable [a-z] and push it

       %P[A-Z]
            set static variable [a-z] to pop()

       %g[A-Z]
            get static variable [a-z] and push it

            The terms  "static"  and  "dynamic"  are  misleading.
            Historically,  these are simply two different sets of
            variables, whose values are not reset  between  calls
            to  tparm.   However,  that fact is not documented in
            other implementations.  Relying on it will  adversely
            impact portability to other implementations.

       %'c' char constant c

       %{nn}
            integer constant nn

       %l   push strlen(pop)

       %+, %-, %*, %/, %m
            arithmetic (%m is mod): push(pop() op pop())

       %&, %|, %^
            bit operations (AND, OR and exclusive-OR): push(pop()
            op pop())

       %=, %>, %<
            logical operations: push(pop() op pop())

       %A, %O
            logical AND and OR operations (for conditionals)

       %!, %~
            unary  operations  (logical  and   bit   complement):
            push(op pop())

       %i   add 1 to first two parameters (for ANSI terminals)

       %? expr %t thenpart %e elsepart %;
            This  forms  an  if-then-else.   The  %e  elsepart is
            optional.  Usually the %? expr part  pushes  a  value
            onto  the stack, and %t pops it from the stack, test-
            ing if it is nonzero (true).  If it is zero  (false),
            control passes to the %e (else) part.

            It is possible to form else-if's a la Algol 68:
            %? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e %;

            where ci are conditions, bi are bodies.

            Use the -f option of tic or infocmp to see the struc-
            ture of if-then-else's.  Some strings, e.g., sgr  can
            be very complicated when written on one line.  The -f
            option splits the string into lines  with  the  parts
            indented.

       Binary operations are in postfix form with the operands in
       the usual order.  That  is,  to  get  x-5  one  would  use
       "%gx%{5}%-".   %P  and  %g variables are persistent across
       escape-string evaluations.

       Consider the HP2645, which, to get to row 3 and column 12,
       needs  to  be  sent  \E&a12c03Y padded for 6 milliseconds.
       Note that the order of the rows and  columns  is  inverted
       here,  and that the row and column are printed as two dig-
       its.  Thus its cup capability is "cup=6\E&%p2%2dc%p1%2dY".

       The Microterm ACT-IV needs the current row and column sent
       preceded  by  a ^T, with the row and column simply encoded
       in binary, "cup=^T%p1%c%p2%c".  Terminals which  use  "%c"
       need  to  be  able  to backspace the cursor (cub1), and to
       move the cursor up one line on the screen (cuu1).  This is
       necessary  because it is not always safe to transmit \n ^D
       and \r, as the system may change or  discard  them.   (The
       library  routines  dealing  with terminfo set tty modes so
       that tabs are never expanded, so \t is safe to send.  This
       turns out to be essential for the Ann Arbor 4080.)

       A final example is the LSI ADM-3a, which uses row and col-
       umn  offset  by  a  blank  character,  thus  "cup=\E=%p1%'
       '%+%c%p2%'  '%+%c".   After sending "\E=", this pushes the
       first parameter, pushes the ASCII value for a space  (32),
       adds  them  (pushing  the sum on the stack in place of the
       two previous values) and outputs that value as  a  charac-
       ter.   Then  the  same  is  done for the second parameter.
       More complex arithmetic is possible using the stack.


Cursor Motions

       If the terminal has a fast way to home the cursor (to very
       upper  left  corner  of  screen) then this can be given as
       home; similarly a fast way of getting to the  lower  left-
       hand  corner can be given as ll; this may involve going up
       with cuu1 from the home position,  but  a  program  should
       never  do this itself (unless ll does) because it can make
       no assumption about the effect of moving up from the  home
       position.   Note  that  the  home  position is the same as
       addressing to (0,0): to the top left corner of the screen,
       not  of  memory.   (Thus, the \EH sequence on HP terminals
       cannot be used for home.)

       If the terminal has row or column absolute cursor address-
       ing,  these  can be given as single parameter capabilities
       hpa (horizontal position absolute) and vpa (vertical posi-
       tion absolute).  Sometimes these are shorter than the more
       general two parameter sequence (as with  the  hp2645)  and
       can be used in preference to cup.  If there are parameter-
       ized local motions (e.g., move  n  spaces  to  the  right)
       these can be given as cud, cub, cuf, and cuu with a single
       parameter indicating how many spaces to move.   These  are
       primarily  useful  if the terminal does not have cup, such
       as the TEKTRONIX 4025.

       If the terminal needs to be in a special mode when running
       a program that uses these capabilities, the codes to enter
       and exit this mode can be given as smcup and rmcup.   This
       arises,  for example, from terminals like the Concept with
       more than one page of memory.  If the  terminal  has  only
       memory  relative cursor addressing and not screen relative
       cursor addressing, a one screen-sized window must be fixed
       into  the terminal for cursor addressing to work properly.
       This is also used for the TEKTRONIX 4025, where smcup sets
       the  command character to be the one used by terminfo.  If
       the smcup sequence will not restore the  screen  after  an
       rmcup sequence is output (to the state prior to outputting
       rmcup), specify nrrmc.


Area Clears

       If the terminal can clear from the current position to the
       end  of  the  line,  leaving  the cursor where it is, this
       should be given as el.  If the terminal can clear from the
       beginning  of  the line to the current position inclusive,
       leaving the cursor where it is, this should  be  given  as
       el1.   If the terminal can clear from the current position
       to the end of the display, then this should  be  given  as
       ed.   Ed  is only defined from the first column of a line.
       (Thus, it can be simulated by a request to delete a  large
       number of lines, if a true ed is not available.)


Insert/delete line and vertical motions

       If  the terminal can open a new blank line before the line
       where the cursor is, this should be given as il1; this  is
       done  only  from the first position of a line.  The cursor
       must then appear on the newly blank line.  If the terminal
       can  delete  the  line  which  the cursor is on, then this
       should be given as dl1; this is done only from  the  first
       position  on  the line to be deleted.  Versions of il1 and
       dl1 which take a single parameter  and  insert  or  delete
       that many lines can be given as il and dl.

       If  the terminal has a settable scrolling region (like the
       vt100) the command to set this can be described  with  the
       csr  capability,  which  takes two parameters: the top and
       bottom lines of the scrolling region.  The cursor position
       is, alas, undefined after using this command.

       It  is possible to get the effect of insert or delete line
       using csr on a properly chosen region; the sc and rc (save
       and  restore  cursor)  commands may be useful for ensuring
       that your synthesized insert/delete string does  not  move
       the  cursor.  (Note that the ncurses(3x) library does this
       synthesis  automatically,  so   you   need   not   compose
       insert/delete strings for an entry with csr).

       Yet another way to construct insert and delete might be to
       use a combination of index with  the  memory-lock  feature
       found  on some terminals (like the HP-700/90 series, which
       however also has insert/delete).

       Inserting lines at the top or bottom  of  the  screen  can
       also  be  done using ri or ind on many terminals without a
       true insert/delete line, and is often faster even on  ter-
       minals with those features.

       The  boolean  non_dest_scroll_region should be set if each
       scrolling window is effectively a view port on  a  screen-
       sized  canvas.   To  test  for  this  capability, create a
       scrolling region in the middle of the screen, write  some-
       thing  to  the  bottom line, move the cursor to the top of
       the region, and do ri followed by dl1 or ind.  If the data
       scrolled  off  the  bottom  of  the  region  by the ri re-
       appears, then scrolling is non-destructive.  System V  and
       XSI  Curses  expect that ind, ri, indn, and rin will simu-
       late destructive scrolling; their  documentation  cautions
       you  not  to  define csr unless this is true.  This curses
       implementation is more liberal and will do explicit erases
       after scrolling if ndstr is defined.

       If the terminal has the ability to define a window as part
       of memory, which all commands affect, it should  be  given
       as the parameterized string wind.  The four parameters are
       the starting and ending lines in memory and  the  starting
       and ending columns in memory, in that order.

       If  the terminal can retain display memory above, then the
       da capability should be given; if display  memory  can  be
       retained  below,  then db should be given.  These indicate
       that deleting a line  or  scrolling  may  bring  non-blank
       lines  up  from  below  or that scrolling back with ri may
       bring down non-blank lines.


Insert/Delete Character

       There are two basic kinds of  intelligent  terminals  with
       respect  to insert/delete character which can be described
       using terminfo.  The most common  insert/delete  character
       operations  affect only the characters on the current line
       and shift characters off the  end  of  the  line  rigidly.
       Other  terminals,  such  as the Concept 100 and the Perkin
       Elmer Owl, make a distinction between  typed  and  untyped
       blanks  on  the  screen, shifting upon an insert or delete
       only to an untyped blank on the  screen  which  is  either
       eliminated, or expanded to two untyped blanks.

       You  can determine the kind of terminal you have by clear-
       ing the screen and then typing text  separated  by  cursor
       motions.   Type  "abc    def"  using  local cursor motions
       (not spaces) between the "abc" and the "def".  Then  posi-
       tion  the  cursor before the "abc" and put the terminal in
       insert mode.  If typing characters causes the rest of  the
       line  to shift rigidly and characters to fall off the end,
       then your terminal does not distinguish between blanks and
       untyped  positions.  If the "abc" shifts over to the "def"
       which then move together around the  end  of  the  current
       line  and onto the next as you insert, you have the second
       type of terminal, and should give the capability in, which
       stands for "insert null".

       While  these  are  two  logically separate attributes (one
       line versus multi-line insert mode, and special  treatment
       of  untyped spaces) we have seen no terminals whose insert
       mode cannot be described with the single attribute.

       Terminfo can describe both terminals which have an  insert
       mode, and terminals which send a simple sequence to open a
       blank position on the current  line.   Give  as  smir  the
       sequence  to  get  into  insert  mode.   Give  as rmir the
       sequence to leave insert  mode.   Now  give  as  ich1  any
       sequence needed to be sent just before sending the charac-
       ter to be inserted.  Most terminals  with  a  true  insert
       mode  will  not give ich1; terminals which send a sequence
       to open a screen position should give it here.

       If your terminal has both, insert mode is usually  prefer-
       able  to  ich1.   Technically,  you  should  not give both
       unless the terminal actually requires both to be  used  in
       combination.   Accordingly,  some  non-curses applications
       get confused if both are present; the symptom  is  doubled
       characters in an update using insert.  This requirement is
       now rare; most ich sequences do not require previous smir,
       and most smir insert modes do not require ich1 before each
       character.  Therefore, the  new  curses  actually  assumes
       this  is the case and uses either rmir/smir or ich/ich1 as
       appropriate (but not both).  If you have to write an entry
       to  be  used under new curses for a terminal old enough to
       need both, include the rmir/smir sequences in ich1.

       If post insert padding is needed, give this as a number of
       milliseconds  in ip (a string option).  Any other sequence
       which may need to be sent after  an  insert  of  a  single
       character may also be given in ip.  If your terminal needs
       both to be placed into an "insert mode" and a special code
       to  precede  each  inserted character, then both smir/rmir
       and ich1 can be given, and both will  be  used.   The  ich
       capability, with one parameter, n, will repeat the effects
       of ich1 n times.

       If padding is necessary between characters typed while not
       in insert mode, give this as a number of milliseconds pad-
       ding in rmp.

       It is occasionally  necessary  to  move  around  while  in
       insert  mode  to delete characters on the same line (e.g.,
       if there is a tab after the insertion position).  If  your
       terminal  allows  motion while in insert mode you can give
       the capability mir to speed up  inserting  in  this  case.
       Omitting  mir  will  affect  only  speed.   Some terminals
       (notably Datamedia's) must not have mir because of the way
       their insert mode works.

       Finally,  you  can specify dch1 to delete a single charac-
       ter, dch with one parameter, n, to  delete  n  characters,
       and  delete mode by giving smdc and rmdc to enter and exit
       delete mode (any mode the terminal needs to be  placed  in
       for dch1 to work).

       A  command to erase n characters (equivalent to outputting
       n blanks without moving the cursor) can be  given  as  ech
       with one parameter.


Highlighting, Underlining, and Visible Bells

       If  your  terminal  has  one  or  more  kinds  of  display
       attributes, these can be represented in a number  of  dif-
       ferent ways.  You should choose one display form as stand-
       out mode, representing a good, high contrast, easy-on-the-
       eyes,  format  for  highlighting  error messages and other
       attention getters.  (If you have a choice,  reverse  video
       plus  half-bright  is  good, or reverse video alone.)  The
       sequences to enter and exit standout  mode  are  given  as
       smso  and  rmso, respectively.  If the code to change into
       or out of standout mode leaves one or even two blank  spa-
       ces  on  the  screen,  as the TVI 912 and Teleray 1061 do,
       then xmc should be given to tell how many spaces are left.

       Codes to begin underlining  and  end  underlining  can  be
       given  as smul and rmul respectively.  If the terminal has
       a code to underline the current  character  and  move  the
       cursor one space to the right, such as the Microterm Mime,
       this can be given as uc.

       Other capabilities to  enter  various  highlighting  modes
       include  blink  (blinking) bold (bold or extra bright) dim
       (dim or half-bright) invis (blanking  or  invisible  text)
       prot  (protected)  rev  (reverse video) sgr0 (turn off all
       attribute modes)  smacs  (enter  alternate  character  set
       mode)  and  rmacs  (exit  alternate  character  set mode).
       Turning on any of these modes singly may or may  not  turn
       off other modes.

       If  there  is  a sequence to set arbitrary combinations of
       modes, this should be given as sgr (set attributes),  tak-
       ing  9 parameters.  Each parameter is either 0 or nonzero,
       as the corresponding attribute is on or off.  The 9 param-
       eters  are, in order: standout, underline, reverse, blink,
       dim, bold, blank, protect, alternate character  set.   Not
       all  modes  need be supported by sgr, only those for which
       corresponding separate attribute commands exist.

       For example, the DEC vt220 supports most of the modes:

        tparm parameter      attribute        escape sequence

        none                 none             \E[0m
        p1                   standout         \E[0;1;7m
        p2                   underline        \E[0;4m
        p3                   reverse          \E[0;7m
        p4                   blink            \E[0;5m
        p5                   dim              not available
        p6                   bold             \E[0;1m
        p7                   invis            \E[0;8m
        p8                   protect          not used
        p9                   altcharset       ^O (off) ^N (on)

       We begin each escape sequence by turning off any  existing
       modes,  since  there  is no quick way to determine whether
       they are active.  Standout is set up to be the combination
       of  reverse  and  bold.   The vt220 terminal has a protect
       mode, though it is not commonly used  in  sgr  because  it
       protects  characters  on  the  screen from the host's era-
       sures.  The altcharset mode also is different in  that  it
       is  either ^O or ^N, depending on whether it is off or on.
       If all modes are turned  on,  the  resulting  sequence  is
       \E[0;1;4;5;7;8m^N.

       Some  sequences  are common to different modes.  For exam-
       ple, ;7 is output when either p1 or p3 is true,  that  is,
       if either standout or reverse modes are turned on.

       Writing  out  the above sequences, along with their depen-
       dencies yields

      sequence             when to output      terminfo translation

      \E[0                 always              \E[0
      ;1                   if p1 or p6         %?%p1%p6%|%t;1%;
      ;4                   if p2               %?%p2%|%t;4%;
      ;5                   if p4               %?%p4%|%t;5%;
      ;7                   if p1 or p3         %?%p1%p3%|%t;7%;
      ;8                   if p7               %?%p7%|%t;8%;
      m                    always              m
      ^N or ^O             if p9 ^N, else ^O   %?%p9%t^N%e^O%;

       Putting this all together into the sgr sequence gives:

           sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%;
               %?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,

       Remember that if you specify sgr, you  must  also  specify
       sgr0.   Also, some implementations rely on sgr being given
       if sgr0 is, Not all terminfo entries necessarily  have  an
       sgr  string,  however.   Many terminfo entries are derived
       from termcap entries which have no sgr string.   The  only
       drawback  to  adding  an  sgr  string is that termcap also
       assumes that sgr0 does not exit  alternate  character  set
       mode.

       Terminals  with  the  "magic  cookie" glitch (xmc) deposit
       special   "cookies"   when   they   receive   mode-setting
       sequences,  which affect the display algorithm rather than
       having extra bits for  each  character.   Some  terminals,
       such  as  the  HP  2621, automatically leave standout mode
       when they move to a new line or the cursor  is  addressed.
       Programs  using  standout  mode  should exit standout mode
       before moving the cursor or sending a newline, unless  the
       msgr  capability,  asserting  that  it  is safe to move in
       standout mode, is present.

       If the terminal has a way of flashing the screen to  indi-
       cate  an  error quietly (a bell replacement) then this can
       be given as flash; it must not move the cursor.

       If the cursor needs to be made more  visible  than  normal
       when it is not on the bottom line (to make, for example, a
       non-blinking underline into an easier  to  find  block  or
       blinking underline) give this sequence as cvvis.  If there
       is a way to make the  cursor  completely  invisible,  give
       that as civis.  The capability cnorm should be given which
       undoes the effects of both of these modes.

       If your terminal correctly generates underlined characters
       (with  no  special  codes  needed) even though it does not
       overstrike, then you should give the capability ul.  If  a
       character  overstriking  another leaves both characters on
       the screen, specify the capability os.  If overstrikes are
       erasable  with  a  blank, then this should be indicated by
       giving eo.


Keypad and Function Keys

       If the terminal has a keypad that transmits codes when the
       keys  are  pressed,  this  information can be given.  Note
       that it is not possible to handle terminals where the key-
       pad only works in local (this applies, for example, to the
       unshifted HP 2621 keys).  If the  keypad  can  be  set  to
       transmit  or  not  transmit,  give these codes as smkx and
       rmkx.  Otherwise the keypad is assumed to always transmit.

       The codes sent by the left arrow, right arrow,  up  arrow,
       down  arrow,  and  home keys can be given as kcub1, kcuf1,
       kcuu1, kcud1, and khome respectively.  If there are  func-
       tion  keys  such  as f0, f1, ..., f10, the codes they send
       can be given as kf0, kf1, ..., kf10.  If these  keys  have
       labels  other  than the default f0 through f10, the labels
       can be given as lf0, lf1, ..., lf10.

       The codes transmitted by certain other special keys can be
       given:

       o   kll (home down),

       o   kbs (backspace),

       o   ktbc (clear all tabs),

       o   kctab (clear the tab stop in this column),

       o   kclr (clear screen or erase key),

       o   kdch1 (delete character),

       o   kdl1 (delete line),

       o   krmir (exit insert mode),

       o   kel (clear to end of line),

       o   ked (clear to end of screen),

       o   kich1 (insert character or enter insert mode),

       o   kil1 (insert line),

       o   knp (next page),

       o   kpp (previous page),

       o   kind (scroll forward/down),

       o   kri (scroll backward/up),

       o   khts (set a tab stop in this column).

       In  addition,  if  the  keypad  has a 3 by 3 array of keys
       including the four arrow keys, the other five keys can  be
       given as ka1, ka3, kb2, kc1, and kc3.  These keys are use-
       ful when the effects of a  3  by  3  directional  pad  are
       needed.

       Strings  to  program  function keys can be given as pfkey,
       pfloc, and pfx.  A string to program screen labels  should
       be  specified  as  pln.   Each  of these strings takes two
       parameters: the function key number to program (from 0  to
       10)  and the string to program it with.  Function key num-
       bers out of this range may program  undefined  keys  in  a
       terminal  dependent  manner.   The  difference between the
       capabilities is that pfkey causes pressing the  given  key
       to  be the same as the user typing the given string; pfloc
       causes the string to be executed by the terminal in local;
       and  pfx  causes  the string to be transmitted to the com-
       puter.

       The capabilities nlab, lw and lh define the number of pro-
       grammable  screen  labels  and their width and height.  If
       there are commands to turn the labels  on  and  off,  give
       them  in smln and rmln.  smln is normally output after one
       or more pln sequences to make sure that the change becomes
       visible.


Tabs and Initialization

       If  the terminal has hardware tabs, the command to advance
       to the next tab stop can be given as ht  (usually  control
       I).  A "back-tab" command which moves leftward to the pre-
       ceding tab stop can be given as cbt.   By  convention,  if
       the  teletype  modes indicate that tabs are being expanded
       by the computer rather than being sent  to  the  terminal,
       programs  should  not  use  ht  or  cbt  even  if they are
       present, since the user may not have the tab  stops  prop-
       erly  set.   If  the  terminal has hardware tabs which are
       initially set every n spaces when the terminal is  powered
       up,  the numeric parameter it is given, showing the number
       of spaces the tabs are set to.  This is normally  used  by
       the  tset command to determine whether to set the mode for
       hardware tab expansion, and whether to set the tab  stops.
       If  the  terminal  has tab stops that can be saved in non-
       volatile memory, the terminfo description can assume  that
       they are properly set.

       Other  capabilities include is1, is2, and is3, initializa-
       tion strings for the terminal, iprog, the path name  of  a
       program  to be run to initialize the terminal, and if, the
       name of a file  containing  long  initialization  strings.
       These  strings are expected to set the terminal into modes
       consistent with the  rest  of  the  terminfo  description.
       They are normally sent to the terminal, by the init option
       of the tput program, each time the  user  logs  in.   They
       will be printed in the following order:

              run the program
                     iprog

              output is1 is2

              set the margins using
                     mgc, smgl and smgr

              set tabs using
                     tbc and hts

              print the file
                     if

              and finally
                     output is3.

       Most  initialization  is  done with is2.  Special terminal
       modes can be set up without duplicating strings by putting
       the  common  sequences in is2 and special cases in is1 and
       is3.

       A set of sequences that does a harder reset from a totally
       unknown state can be given as rs1, rs2, rf and rs3, analo-
       gous to is1 ,  is2  ,  if  and  is3  respectively.   These
       strings  are  output  by  the reset program, which is used
       when the terminal gets into a wedged state.  Commands  are
       normally  placed  in rs1, rs2 rs3 and rf only if they pro-
       duce annoying effects on the screen and are not  necessary
       when  logging  in.   For  example,  the command to set the
       vt100 into 80-column mode would normally be part  of  is2,
       but  it causes an annoying glitch of the screen and is not
       normally needed since the terminal is usually  already  in
       80 column mode.

       The reset program writes strings including iprog, etc., in
       the same order as  the  init  program,  using  rs1,  etc.,
       instead of is1, etc.  If any of rs1, rs2, rs3, or rf reset
       capability strings are missing, the  reset  program  falls
       back  upon  the  corresponding  initialization  capability
       string.

       If there are commands to set and clear tab stops, they can
       be  given  as tbc (clear all tab stops) and hts (set a tab
       stop in the current column of every row).  If a more  com-
       plex  sequence  is  needed  to  set  the  tabs than can be
       described by this, the sequence can be placed  in  is2  or
       if.


Delays and Padding

       Many  older  and  slower  terminals  do not support either
       XON/XOFF or DTR handshaking, including hard copy terminals
       and  some  very  archaic CRTs (including, for example, DEC
       VT100s).  These may require padding characters after  cer-
       tain cursor motions and screen changes.

       If the terminal uses xon/xoff handshaking for flow control
       (that is, it automatically emits ^S back to the host  when
       its input buffers are close to full), set xon.  This capa-
       bility suppresses the emission of padding.  You  can  also
       set  it for memory-mapped console devices effectively that
       do not have a speed  limit.   Padding  information  should
       still  be  included so that routines can make better deci-
       sions about relative costs, but actual pad characters will
       not be transmitted.

       If  pb (padding baud rate) is given, padding is suppressed
       at baud rates below the value of pb.  If the entry has  no
       padding  baud rate, then whether padding is emitted or not
       is completely controlled by xon.

       If the terminal requires other than a null (zero)  charac-
       ter  as  a  pad,  then this can be given as pad.  Only the
       first character of the pad string is used.


Status Lines

       Some terminals have an extra "status line"  which  is  not
       normally  used  by  software  (and thus not counted in the
       terminal's lines capability).

       The simplest case  is  a  status  line  which  is  cursor-
       addressable  but  not part of the main scrolling region on
       the screen; the Heathkit H19 has a  status  line  of  this
       kind,  as  would  a 24-line VT100 with a 23-line scrolling
       region set up on initialization.  This situation is  indi-
       cated by the hs capability.

       Some terminals with status lines need special sequences to
       access the status line.   These  may  be  expressed  as  a
       string with single parameter tsl which takes the cursor to
       a given zero-origin column on the status line.  The  capa-
       bility fsl must return to the main-screen cursor positions
       before the last tsl.  You may need  to  embed  the  string
       values  of sc (save cursor) and rc (restore cursor) in tsl
       and fsl to accomplish this.

       The status line is normally assumed to be the  same  width
       as  the width of the terminal.  If this is untrue, you can
       specify it with the numeric capability wsl.

       A command to erase or blank the status line may be  speci-
       fied as dsl.

       The   boolean   capability  eslok  specifies  that  escape
       sequences, tabs, etc., work ordinarily in the status line.

       The ncurses implementation does not yet use any  of  these
       capabilities.   They are documented here in case they ever
       become important.


Line Graphics

       Many terminals have alternate character  sets  useful  for
       forms-drawing.   Terminfo  and curses build in support for
       the drawing characters supported by the VT100,  with  some
       characters  from  the  AT&T  4410v1 added.  This alternate
       character set may be specified by the acsc capability.

       Glyph                       ACS           Ascii     VT100
       Name                        Name          Default   Name
       UK pound sign               ACS_STERLING  f         }
       arrow pointing down         ACS_DARROW    v         .
       arrow pointing left         ACS_LARROW    <         ,
       arrow pointing right        ACS_RARROW    >         +
       arrow pointing up           ACS_UARROW    ^         -
       board of squares            ACS_BOARD     #         h
       bullet                      ACS_BULLET    o         ~
       checker board (stipple)     ACS_CKBOARD   :         a
       degree symbol               ACS_DEGREE    \         f
       diamond                     ACS_DIAMOND   +         `
       greater-than-or-equal-to    ACS_GEQUAL    >         z
       greek pi                    ACS_PI        *         {
       horizontal line             ACS_HLINE     -         q
       lantern symbol              ACS_LANTERN   #         i
       large plus or crossover     ACS_PLUS      +         n
       less-than-or-equal-to       ACS_LEQUAL    <         y
       lower left corner           ACS_LLCORNER  +         m
       lower right corner          ACS_LRCORNER  +         j
       not-equal                   ACS_NEQUAL    !         |
       plus/minus                  ACS_PLMINUS   #         g
       scan line 1                 ACS_S1        ~         o
       scan line 3                 ACS_S3        -         p
       scan line 7                 ACS_S7        -         r
       scan line 9                 ACS_S9        _         s
       solid square block          ACS_BLOCK     #         0
       tee pointing down           ACS_TTEE      +         w
       tee pointing left           ACS_RTEE      +         u
       tee pointing right          ACS_LTEE      +         t
       tee pointing up             ACS_BTEE      +         v
       upper left corner           ACS_ULCORNER  +         l
       upper right corner          ACS_URCORNER  +         k
       vertical line               ACS_VLINE     |         x

       The best way to define a new device's graphics set  is  to
       add  a  column  to a copy of this table for your terminal,
       giving  the  character   which   (when   emitted   between
       smacs/rmacs  switches) will be rendered as the correspond-
       ing graphic.  Then read off the VT100/your terminal  char-
       acter  pairs  right  to left in sequence; these become the
       ACSC string.


Color Handling

       Most color terminals are either "Tektronix-like"  or  "HP-
       like".   Tektronix-like terminals have a predefined set of
       N colors (where N usually 8), and can  set  character-cell
       foreground and background characters independently, mixing
       them into N * N color-pairs.  On  HP-like  terminals,  the
       use must set each color pair up separately (foreground and
       background are  not  independently  settable).   Up  to  M
       color-pairs  may  be  set  up  from  2*M different colors.
       ANSI-compatible terminals are Tektronix-like.

       Some basic color capabilities are independent of the color
       method.  The numeric capabilities colors and pairs specify
       the maximum numbers of colors and color-pairs that can  be
       displayed  simultaneously.   The op (original pair) string
       resets foreground and background colors to  their  default
       values  for the terminal.  The oc string resets all colors
       or color-pairs to their default values for  the  terminal.
       Some  terminals  (including  many  PC  terminal emulators)
       erase screen  areas  with  the  current  background  color
       rather  than the power-up default background; these should
       have the boolean capability bce.

       To change the current foreground or background color on  a
       Tektronix-type  terminal,  use setaf (set ANSI foreground)
       and setab (set ANSI background) or setf  (set  foreground)
       and  setb (set background).  These take one parameter, the
       color  number.   The  SVr4  documentation  describes  only
       setaf/setab;  the  XPG4  draft  says that "If the terminal
       supports ANSI escape sequences to set background and fore-
       ground,  they  should be coded as setaf and setab, respec-
       tively.  If the terminal supports other  escape  sequences
       to  set background and foreground, they should be coded as
       setf and setb, respectively.  The vidputs()  function  and
       the  refresh  functions  use  setaf  and setab if they are
       defined."

       The setaf/setab and setf/setb capabilities take  a  single
       numeric argument each.  Argument values 0-7 of setaf/setab
       are portably defined as follows (the middle column is  the
       symbolic #define available in the header for the curses or
       ncurses libraries).  The terminal hardware is free to  map
       these  as  it  likes,  but  the RGB values indicate normal
       locations in color space.

             Color       #define       Value       RGB
             black     COLOR_BLACK       0     0, 0, 0
             red       COLOR_RED         1     max,0,0
             green     COLOR_GREEN       2     0,max,0
             yellow    COLOR_YELLOW      3     max,max,0
             blue      COLOR_BLUE        4     0,0,max
             magenta   COLOR_MAGENTA     5     max,0,max
             cyan      COLOR_CYAN        6     0,max,max
             white     COLOR_WHITE       7     max,max,max

       The argument values of setf/setb  historically  correspond
       to a different mapping, i.e.,

             Color       #define       Value       RGB
             black     COLOR_BLACK       0     0, 0, 0
             blue      COLOR_BLUE        1     0,0,max
             green     COLOR_GREEN       2     0,max,0
             cyan      COLOR_CYAN        3     0,max,max
             red       COLOR_RED         4     max,0,0
             magenta   COLOR_MAGENTA     5     max,0,max
             yellow    COLOR_YELLOW      6     max,max,0
             white     COLOR_WHITE       7     max,max,max

       It is important to not confuse the two sets of color capa-
       bilities; otherwise red/blue will be interchanged  on  the
       display.

       On  an  HP-like terminal, use scp with a color-pair number
       parameter to set which color pair is current.

       On a Tektronix-like terminal, the capability  ccc  may  be
       present  to  indicate that colors can be modified.  If so,
       the initc capability will take a color number (0 to colors
       -  1)and  three  more parameters which describe the color.
       These three parameters default to being interpreted as RGB
       (Red,  Green, Blue) values.  If the boolean capability hls
       is present, they are instead as HLS (Hue, Lightness, Satu-
       ration) indices.  The ranges are terminal-dependent.

       On  an  HP-like  terminal, initp may give a capability for
       changing a color-pair value.  It will take  seven  parame-
       ters;  a  color-pair  number (0 to max_pairs - 1), and two
       triples describing first background  and  then  foreground
       colors.   These  parameters  must be (Red, Green, Blue) or
       (Hue, Lightness, Saturation) depending on hls.

       On some color terminals, colors collide  with  highlights.
       You can register these collisions with the ncv capability.
       This is a bit-mask of attributes not to be used when  col-
       ors  are  enabled.  The correspondence with the attributes
       understood by curses is as follows:

          Attribute              Bit   Decimal      Set by
          A_STANDOUT             0     1            sgr
          A_UNDERLINE            1     2            sgr
          A_REVERSE              2     4            sgr
          A_BLINK                3     8            sgr
          A_DIM                  4     16           sgr
          A_BOLD                 5     32           sgr
          A_INVIS                6     64           sgr
          A_PROTECT              7     128          sgr
          A_ALTCHARSET           8     256          sgr
          A_HORIZONTAL           9     512          sgr1
          A_LEFT                 10    1024         sgr1
          A_LOW                  11    2048         sgr1
          A_RIGHT                12    4096         sgr1
          A_TOP                  13    8192         sgr1
          A_VERTICAL             14    16384        sgr1
          A_ITALIC               15    32768        sitm

       For example,  on  many  IBM  PC  consoles,  the  underline
       attribute  collides  with the foreground color blue and is
       not available in color mode.  These  should  have  an  ncv
       capability of 2.

       SVr4  curses  does nothing with ncv, ncurses recognizes it
       and optimizes the output in favor of colors.


Miscellaneous

       If the terminal requires other than a null (zero)  charac-
       ter  as  a  pad,  then this can be given as pad.  Only the
       first character of the pad string is used.  If the  termi-
       nal does not have a pad character, specify npc.  Note that
       ncurses implements  the  termcap-compatible  PC  variable;
       though  the  application  may  set this value to something
       other than a null, ncurses will test  npc  first  and  use
       napms if the terminal has no pad character.

       If  the terminal can move up or down half a line, this can
       be indicated with hu  (half-line  up)  and  hd  (half-line
       down).  This is primarily useful for superscripts and sub-
       scripts on hard-copy terminals.  If a  hard-copy  terminal
       can  eject  to  the next page (form feed), give this as ff
       (usually control L).

       If there is a command to repeat a given character a  given
       number  of times (to save time transmitting a large number
       of identical characters) this can be  indicated  with  the
       parameterized  string  rep.   The  first  parameter is the
       character to be repeated and the second is the  number  of
       times  to repeat it.  Thus, tparm(repeat_char, 'x', 10) is
       the same as "xxxxxxxxxx".

       If the terminal has a settable command character, such  as
       the  TEKTRONIX  4025, this can be indicated with cmdch.  A
       prototype command character is chosen which is used in all
       capabilities.   This character is given in the cmdch capa-
       bility to identify it.  The following convention  is  sup-
       ported  on  some  UNIX  systems:  The environment is to be
       searched for a CC variable, and if found, all  occurrences
       of the prototype character are replaced with the character
       in the environment variable.

       Terminal descriptions that do  not  represent  a  specific
       kind of known terminal, such as switch, dialup, patch, and
       network, should include the  gn  (generic)  capability  so
       that  programs  can  complain that they do not know how to
       talk to the terminal.  (This capability does not apply  to
       virtual   terminal   descriptions  for  which  the  escape
       sequences are known.)

       If the terminal has a "meta key" which  acts  as  a  shift
       key,  setting  the  8th  bit of any character transmitted,
       this fact can be indicated with km.   Otherwise,  software
       will assume that the 8th bit is parity and it will usually
       be cleared.  If strings exist to turn this "meta mode"  on
       and off, they can be given as smm and rmm.

       If  the terminal has more lines of memory than will fit on
       the screen at once, the number of lines of memory  can  be
       indicated  with  lm.   A  value of lm#0 indicates that the
       number of lines is not fixed, but that there is still more
       memory than fits on the screen.

       If the terminal is one of those supported by the UNIX vir-
       tual terminal protocol, the terminal number can  be  given
       as vt.

       Media copy strings which control an auxiliary printer con-
       nected to the terminal can be given as mc0: print the con-
       tents  of  the screen, mc4: turn off the printer, and mc5:
       turn on the printer.  When the printer  is  on,  all  text
       sent  to  the terminal will be sent to the printer.  It is
       undefined whether the text is also displayed on the termi-
       nal screen when the printer is on.  A variation mc5p takes
       one parameter, and leaves the printer on for as many char-
       acters  as  the  value  of  the  parameter, then turns the
       printer off.  The parameter should not  exceed  255.   All
       text,  including  mc4,  is  transparently  passed  to  the
       printer while an mc5p is in effect.


Glitches and Braindamage

       Hazeltine terminals, which do not allow "~" characters  to
       be displayed should indicate hz.

       Terminals which ignore a line-feed immediately after an am
       wrap, such as the Concept and vt100, should indicate xenl.

       If el is required to  get  rid  of  standout  (instead  of
       merely  writing  normal  text on top of it), xhp should be
       given.

       Teleray terminals, where tabs turn  all  characters  moved
       over  to  blanks,  should  indicate xt (destructive tabs).
       Note:   the    variable    indicating    this    is    now
       "dest_tabs_magic_smso";  in  older  versions,  it was tel-
       eray_glitch.  This glitch is also taken to mean that it is
       not  possible  to  position  the cursor on top of a "magic
       cookie", that to erase standout mode it is instead  neces-
       sary to use delete and insert line.  The ncurses implemen-
       tation ignores this glitch.

       The Beehive Superbee, which is unable to correctly  trans-
       mit  the escape or control C characters, has xsb, indicat-
       ing that the f1 key is used for escape and f2 for  control
       C.   (Only  certain Superbees have this problem, depending
       on the ROM.)  Note that in older terminfo  versions,  this
       capability   was   called   "beehive_glitch";  it  is  now
       "no_esc_ctl_c".

       Other specific  terminal  problems  may  be  corrected  by
       adding more capabilities of the form xx.


Similar Terminals

       If there are two very similar terminals, one (the variant)
       can be defined as being just like  the  other  (the  base)
       with  certain  exceptions.  In the definition of the vari-
       ant, the string capability use can be given with the  name
       of  the  base terminal.  The capabilities given before use
       override those in the base type named by  use.   If  there
       are  multiple use capabilities, they are merged in reverse
       order.  That is, the rightmost use reference is  processed
       first,  then the one to its left, and so forth.  Capabili-
       ties given explicitly in the entry override those  brought
       in by use references.

       A capability can be canceled by placing xx@ to the left of
       the use reference that imports it, where xx is  the  capa-
       bility.  For example, the entry

              2621-nl, smkx@, rmkx@, use=2621,

       defines  a  2621-nl  that  does  not have the smkx or rmkx
       capabilities, and hence does not turn on the function  key
       labels  when in visual mode.  This is useful for different
       modes for a terminal, or for different user preferences.


Pitfalls of Long Entries

       Long terminfo entries are unlikely to  be  a  problem;  to
       date,  no  entry  has even approached terminfo's 4096-byte
       string-table maximum.  Unfortunately, the termcap transla-
       tions are much more strictly limited (to 1023 bytes), thus
       termcap translations of long terminfo  entries  can  cause
       problems.

       The  man  pages for 4.3BSD and older versions of tgetent()
       instruct the user to allocate a 1024-byte buffer  for  the
       termcap  entry.   The  entry  gets  null-terminated by the
       termcap library, so that makes the maximum safe length for
       a  termcap entry 1k-1 (1023) bytes.  Depending on what the
       application and the termcap library being used  does,  and
       where in the termcap file the terminal type that tgetent()
       is searching for is, several bad things can happen.

       Some termcap libraries print a warning message or exit  if
       they  find  an entry that's longer than 1023 bytes; others
       do not; others truncate the entries to 1023  bytes.   Some
       application programs allocate more than the recommended 1K
       for the termcap entry; others do not.

       Each termcap entry has two important sizes associated with
       it: before "tc" expansion, and after "tc" expansion.  "tc"
       is the capability that tacks on another termcap  entry  to
       the  end  of  the current one, to add on its capabilities.
       If a termcap entry does not use the "tc" capability,  then
       of course the two lengths are the same.

       The  "before  tc  expansion"  length is the most important
       one, because it affects more than just users of that  par-
       ticular  terminal.   This is the length of the entry as it
       exists in /etc/termcap, minus the backslash-newline pairs,
       which tgetent() strips out while reading it.  Some termcap
       libraries strip off the final newline,  too  (GNU  termcap
       does not).  Now suppose:

       o   a  termcap  entry  before  expansion is more than 1023
           bytes long,

       o   and the application has only allocated a 1k buffer,

       o   and the termcap library (like the one  in  BSD/OS  1.1
           and  GNU)  reads  the  whole entry into the buffer, no
           matter what its length, to see if it is the  entry  it
           wants,

       o   and  tgetent()  is  searching for a terminal type that
           either is the long entry, appears in the termcap  file
           after  the  long entry, or does not appear in the file
           at all (so that tgetent()  has  to  search  the  whole
           termcap file).

       Then  tgetent()  will overwrite memory, perhaps its stack,
       and probably core dump the program.  Programs like  telnet
       are  particularly  vulnerable;  modern  telnets pass along
       values like the terminal type automatically.  The  results
       are  almost  as  undesirable  with a termcap library, like
       SunOS 4.1.3 and Ultrix 4.4, that prints  warning  messages
       when  it reads an overly long termcap entry.  If a termcap
       library truncates long entries,  like  OSF/1  3.0,  it  is
       immune  to  dying  here but will return incorrect data for
       the terminal.

       The "after tc expansion" length will have a similar effect
       to the above, but only for people who actually set TERM to
       that terminal type, since tgetent() only does "tc"  expan-
       sion  once  it  is  found the terminal type it was looking
       for, not while searching.

       In summary, a termcap entry that is longer than 1023 bytes
       can  cause,  on  various combinations of termcap libraries
       and applications, a  core  dump,  warnings,  or  incorrect
       operation.   If it is too long even before "tc" expansion,
       it will have this effect even for users of some other ter-
       minal  types and users whose TERM variable does not have a
       termcap entry.

       When in -C (translate to termcap) mode, the ncurses imple-
       mentation of tic(1m) issues warning messages when the pre-
       tc length of a termcap translation is too  long.   The  -c
       (check)  option  also checks resolved (after tc expansion)
       lengths.


Binary Compatibility

       It is not wise to count on portability of binary  terminfo
       entries  between commercial UNIX versions.  The problem is
       that there are at least two versions  of  terminfo  (under
       HP-UX and AIX) which diverged from System V terminfo after
       SVr1, and have added extension capabilities to the  string
       table  that  (in  the binary format) collide with System V
       and XSI Curses extensions.


EXTENSIONS

       Searching for terminal descriptions in $HOME/.terminfo and
       TERMINFO_DIRS is not supported by older implementations.

       Some  SVr4  curses  implementations,  and  all previous to
       SVr4, do not interpret the %A and %O operators in  parame-
       ter strings.

       SVr4/XPG4  do  not  specify whether msgr licenses movement
       while in an alternate-character-set mode (such modes  may,
       among  other  things,  map CR and NL to characters that do
       not trigger local motions).   The  ncurses  implementation
       ignores  msgr  in ALTCHARSET mode.  This raises the possi-
       bility that an XPG4  implementation  making  the  opposite
       interpretation  may need terminfo entries made for ncurses
       to have msgr turned off.

       The ncurses library handles insert-character  and  insert-
       character modes in a slightly non-standard way to get bet-
       ter update efficiency.  See  the  Insert/Delete  Character
       subsection above.

       The   parameter   substitutions  for  set_clock  and  dis-
       play_clock are not documented in SVr4 or  the  XSI  Curses
       standard.  They are deduced from the documentation for the
       AT&T 505 terminal.

       Be careful assigning the kmous  capability.   The  ncurses
       wants  to  interpret it as KEY_MOUSE, for use by terminals
       and emulators like xterm that  can  return  mouse-tracking
       information in the keyboard-input stream.

       X/Open Curses does not mention italics.  Portable applica-
       tions must assume that  numeric  capabilities  are  signed
       16-bit  values.   This  includes  the no_color_video (ncv)
       capability.  The 32768 mask value used  for  italics  with
       ncv  can  be confused with an absent or cancelled ncv.  If
       italics should work with colors, then the ncv  value  must
       be specified, even if it is zero.

       Different  commercial ports of terminfo and curses support
       different subsets of the XSI Curses standard and (in  some
       cases) different extension sets.  Here is a summary, accu-
       rate as of October 1995:

       SVR4, Solaris, ncurses -- These support all SVr4 capabili-
       ties.

       SGI  --  Supports  the  SVr4  set,  adds  one undocumented
       extended string capability (set_pglen).

       SVr1, Ultrix -- These support a restricted subset of  ter-
       minfo  capabilities.   The booleans end with xon_xoff; the
       numerics with  width_status_line;  and  the  strings  with
       prtr_non.

       HP/UX  --  Supports  the  SVr1  subset,  plus the SVr[234]
       numerics num_labels, label_height, label_width, plus func-
       tion  keys  11  through  63, plus plab_norm, label_on, and
       label_off, plus some incompatible extensions in the string
       table.

       AIX  --  Supports  the  SVr1 subset, plus function keys 11
       through 63, plus a number  of  incompatible  string  table
       extensions.

       OSF -- Supports both the SVr4 set and the AIX extensions.


FILES

       /usr/share/terminfo/?/*  files     containing     terminal
                                descriptions


SEE ALSO

       tic(1m),  infocmp(1m),  curses(3x),  printf(3),   term(5).
       term_variables(3x).


AUTHORS

       Zeyd  M.  Ben-Halim,  Eric  S.  Raymond, Thomas E. Dickey.
       Based on pcurses by Pavel Curtis.



                                                            terminfo(5)
ncurses-6.0-20160213/doc/html/man/curs_insch.3x.html0000644000175100001440000001354512653207004020326 0ustar tomusers curs_insch 3x

curs_insch 3x

curs_insch(3x)                                           curs_insch(3x)




NAME

       insch,  winsch,  mvinsch,  mvwinsch  -  insert a character
       before cursor in a curses window


SYNOPSIS

       #include <curses.h>

       int insch(chtype ch);
       int winsch(WINDOW *win, chtype ch);
       int mvinsch(int y, int x, chtype ch);
       int mvwinsch(WINDOW *win, int y, int x, chtype ch);


DESCRIPTION

       These routines insert the character ch before the  charac-
       ter  under the cursor.  All characters to the right of the
       cursor are moved one space to the right, with  the  possi-
       bility  of the rightmost character on the line being lost.
       The insertion operation does not change the  cursor  posi-
       tion.


RETURN VALUE

       All  routines that return an integer return ERR upon fail-
       ure and OK (SVr4 specifies only "an  integer  value  other
       than  ERR")  upon  successful completion, unless otherwise
       noted in the preceding routine descriptions.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


NOTES

       These routines do not necessarily imply use of a  hardware
       insert character feature.

       Note that insch, mvinsch, and mvwinsch may be macros.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4.


SEE ALSO

       curses(3x).

       Comparable  functions  in  the  wide-character  (ncursesw)
       library are described in curs_ins_wch(3x).



                                                         curs_insch(3x)
ncurses-6.0-20160213/doc/html/man/mitem_new.3x.html0000644000175100001440000001370512653207011020146 0ustar tomusers mitem_new 3x

mitem_new 3x

mitem_new(3x)                                             mitem_new(3x)




NAME

       new_item, free_item - create and destroy menu items


SYNOPSIS

       #include <menu.h>
       ITEM *new_item(const char *name, const char *description);
       int free_item(ITEM *item);


DESCRIPTION

       The function new_item allocates a new item and initializes
       it from the name and description pointers.  Please  notice
       that  the  item  stores  only the pointers to the name and
       description. Those pointers must be valid during the life-
       time of the item. So you should be very careful with names
       or descriptions allocated on the stack of some routines.
       The function free_item de-allocates an item. Please notice
       that  it  is  the  responsibility  of  the  application to
       release the memory for the name or the description of  the
       item.


RETURN VALUE

       The  function  new_item  returns  NULL  on error.  It sets
       errno according to the function's failure:

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_SYSTEM_ERROR
            System error occurred, e.g., malloc failure.

       The function free_item returns one of the following:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_CONNECTED
            Item is connected to a menu.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                          mitem_new(3x)
ncurses-6.0-20160213/doc/html/man/form_field_opts.3x.html0000644000175100001440000001636612653207007021350 0ustar tomusers form_field_opts 3x

form_field_opts 3x

form_field_opts(3x)                                 form_field_opts(3x)




NAME

       set_field_opts,  field_opts_on, field_opts_off, field_opts
       - set and get field options


SYNOPSIS

       #include <form.h>
       int set_field_opts(FIELD *field, Field_Options opts);
       int field_opts_on(FIELD *field, Field_Options opts);
       int field_opts_off(FIELD *field, Field_Options opts);
       Field_Options field_opts(const FIELD *field);


DESCRIPTION

       The function set_field_opts sets  all  the  given  field's
       option  bits  (field  option  bits  may be logically-OR'ed
       together).

       The function field_opts_on turns on the given option bits,
       and leaves others alone.

       The  function  field_opts_off  turns  off the given option
       bits, and leaves others alone.

       The function field_opts returns the field's current option
       bits.

       The  following standard options are defined (all are on by
       default):

       O_ACTIVE
            The field is  visited  during  processing.   If  this
            option  is  off,  the  field will not be reachable by
            navigation keys.  Please  notice  that  an  invisible
            field appears to be inactive also.

       O_AUTOSKIP
            Skip to the next field when this one fills.

       O_BLANK
            The  field is cleared whenever a character is entered
            at the first position.

       O_EDIT
            The field can be edited.

       O_NULLOK
            Allow a blank field.

       O_PASSOK
            Validate field only if modified by user.

       O_PUBLIC
            The field contents are displayed as data is entered.

       O_STATIC
            Field buffers are fixed  to  field's  original  size.
            Turn this option off to create a dynamic field.

       O_VISIBLE
            The  field is displayed.  If this option is off, dis-
            play of the field is suppressed.

       O_WRAP
            Words that do not fit on a line are  wrapped  to  the
            next line.  Words are blank-separated.

       These extension options are defined (extensions are off by
       default):

       O_DYNAMIC_JUSTIFY
            Permit dynamic fields to be  justified,  like  static
            fields.

       O_NO_LEFT_STRIP
            Preserve  leading  whitespace  in  the  field buffer,
            which is normally discarded.


RETURN VALUE

       Except for field_opts, each routine  returns  one  of  the
       following:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_CURRENT
            The field is the current field.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), form(3x).  form_field_just(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                    form_field_opts(3x)
ncurses-6.0-20160213/doc/html/man/mitem_opts.3x.html0000644000175100001440000001317712653207011020345 0ustar tomusers mitem_opts 3x

mitem_opts 3x

mitem_opts(3x)                                           mitem_opts(3x)




NAME

       set_item_opts,  item_opts_on,  item_opts_off,  item_opts -
       set and get menu item options


SYNOPSIS

       #include <menu.h>
       int set_item_opts(ITEM *item, Item_Options opts);
       int item_opts_on(ITEM *item, Item_Options opts);
       int item_opts_off(ITEM *item, Item_Options opts);
       Item_Options item_opts(const ITEM *item);


DESCRIPTION

       The function  set_item_opts  sets  all  the  given  item's
       option  bits  (menu  option  bits  may  be logically-OR'ed
       together).

       The function item_opts_on turns on the given option  bits,
       and leaves others alone.

       The  function  item_opts_off  turns  off  the given option
       bits, and leaves others alone.

       The function item_opts returns the item's  current  option
       bits.

       There  is  only one defined option bit mask, O_SELECTABLE.
       When this is on, the item may be selected during menu pro-
       cessing.  This option defaults to on.


RETURN VALUE

       Except for item_opts, each routine returns one of the fol-
       lowing:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                         mitem_opts(3x)
ncurses-6.0-20160213/doc/html/man/curs_getstr.3x.html0000644000175100001440000002131312653207004020522 0ustar tomusers curs_getstr 3x

curs_getstr 3x

curs_getstr(3x)                                         curs_getstr(3x)




NAME

       getstr, getnstr, wgetstr, wgetnstr, mvgetstr, mvgetnstr,
       mvwgetstr, mvwgetnstr - accept character strings from
       curses terminal keyboard


SYNOPSIS

       #include <curses.h>

       int getstr(char *str);
       int getnstr(char *str, int n);
       int wgetstr(WINDOW *win, char *str);
       int wgetnstr(WINDOW *win, char *str, int n);
       int mvgetstr(int y, int x, char *str);
       int mvwgetstr(WINDOW *win, int y, int x, char *str);
       int mvgetnstr(int y, int x, char *str, int n);
       int mvwgetnstr(WINDOW *, int y, int x, char *str, int n);


DESCRIPTION

       The  function getstr is equivalent to a series of calls to
       getch, until a newline or carriage return is received (the
       terminating  character  is  not  included  in the returned
       string).  The resulting value is placed in the area point-
       ed to by the character pointer str.

       wgetnstr  reads  at  most  n characters, thus preventing a
       possible overflow of the input buffer.  Any attempt to en-
       ter more characters (other than the terminating newline or
       carriage return) causes a beep.  Function keys also  cause
       a  beep  and are ignored.  The getnstr function reads from
       the stdscr default window.

       The user's erase and kill characters are interpreted.   If
       keypad   mode   is   on   for  the  window,  KEY_LEFT  and
       KEY_BACKSPACE are both considered equivalent to the user's
       kill character.

       Characters  input are echoed only if echo is currently on.
       In that case, backspace is echoed as deletion of the  pre-
       vious character (typically a left motion).


RETURN VALUE

       All routines return the integer ERR upon failure and an OK
       (SVr4 specifies only "an integer value  other  than  ERR")
       upon successful completion.

       X/Open defines no error conditions.

       In this implementation, these functions return an error if
       the window pointer is null,  or  if  its  timeout  expires
       without having any data.

       This  implementation  provides an extension as well.  If a
       SIGWINCH interrupts the function, it will  return  KEY_RE-
       SIZE rather than OK or ERR.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


NOTES

       Note that getstr, mvgetstr, and mvwgetstr may be macros.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4.  They  read  single-byte  characters  only.   The
       standard  does  not define any error conditions.  This im-
       plementation returns ERR if the window pointer is null, or
       if the lower-level wgetch call returns an ERR.

       SVr3  and early SVr4 curses implementations did not reject
       function keys; the SVr4.0 documentation claimed that "spe-
       cial  keys"  (such  as  function keys, "home" key, "clear"
       key, etc.) are "interpreted", without giving details.   It
       lied.   In  fact,  the  `character'  value appended to the
       string by those implementations was  predictable  but  not
       useful  (being,  in  fact, the low-order eight bits of the
       key's KEY_ value).

       The functions  getnstr,  mvgetnstr,  and  mvwgetnstr  were
       present but not documented in SVr4.


SEE ALSO

       curses(3x), curs_getch(3x), curs_variables(3x).



                                                        curs_getstr(3x)
ncurses-6.0-20160213/doc/html/man/curs_getyx.3x.html0000644000175100001440000001607012653207004020356 0ustar tomusers curs_getyx 3x

curs_getyx 3x

curs_getyx(3x)                                           curs_getyx(3x)




NAME

       getyx,  getparyx,  getbegyx,  getmaxyx - get curses cursor
       and window coordinates


SYNOPSIS

       #include <curses.h>

       void getyx(WINDOW *win, int y, int x);
       void getparyx(WINDOW *win, int y, int x);
       void getbegyx(WINDOW *win, int y, int x);
       void getmaxyx(WINDOW *win, int y, int x);


DESCRIPTION

       The getyx macro places the current cursor position of  the
       given window in the two integer variables y and x.

       If  win  is  a  subwindow,  the  getparyx macro places the
       beginning coordinates of the  subwindow  relative  to  the
       parent  window into two integer variables y and x.  Other-
       wise, -1 is placed into y and x.

       Like getyx, the getbegyx and  getmaxyx  macros  store  the
       current  beginning  coordinates  and size of the specified
       window.


RETURN VALUE

       The return values of these  macros  are  undefined  (i.e.,
       they  should not be used as the right-hand side of assign-
       ment statements).


NOTES

       All of these interfaces are macros.  A "&" is  not  neces-
       sary before the variables y and x.


PORTABILITY

       The  getyx,  getparyx,  getbegyx  and  getmaxyx macros are
       described in the XSI Curses standard, Issue 4.

       This implementation also provides functions getbegx, getb-
       egy,  getcurx, getcury, getmaxx, getmaxy, getparx and get-
       pary for compatibility with older versions of curses.

       Although X/Open Curses does not address this, many  imple-
       mentations  provide  members  of the WINDOW structure con-
       taining values corresponding to these  macros.   For  best
       portability,  do  not  rely  on  using the data in WINDOW,
       since some implementations  make  WINDOW  opaque  (do  not
       allow direct use of its members).

       Besides  the problem of opaque structures, the data stored
       in like-named members may not have like-values in  differ-
       ent  implementations.   For  example, the WINDOW._maxx and
       WINDOW._maxy  values  in  ncurses  have  (at  least  since
       release 1.8.1) differed by one from some other implementa-
       tions.  The difference is hidden by  means  of  the  macro
       getmaxyx.


SEE ALSO

       curses(3x), curs_legacy(3x), curs_opaque(3x)



                                                         curs_getyx(3x)
ncurses-6.0-20160213/doc/html/man/menu_hook.3x.html0000644000175100001440000001474012653207011020146 0ustar tomusers menu_hook 3x

menu_hook 3x

menu_hook(3x)                                             menu_hook(3x)




NAME

       menu_hook - set hooks for automatic invocation by applica-
       tions


SYNOPSIS

       #include <menu.h>
       int set_item_init(MENU *menu, Menu_Hook func);
       Menu_Hook item_init(const MENU *menu);
       int set_item_term(MENU *menu, Menu_Hook func);
       Menu_Hook item_term(const MENU *menu);
       int set_menu_init(MENU *menu, Menu_Hook func);
       Menu_Hook menu_init(const MENU *menu);
       int set_menu_term(MENU *menu, Menu_Hook func);
       Menu_Hook menu_term(const MENU *menu);


DESCRIPTION

       These functions make it possible to set hook functions  to
       be called at various points in the automatic processing of
       input event codes by menu_driver.

       The function set_item_init sets a hook  to  be  called  at
       menu-post  time  and  each  time the selected item changes
       (after the change).  item_init returns  the  current  item
       init hook, if any (NULL if there is no such hook).

       The  function  set_item_term  sets  a hook to be called at
       menu-unpost time and each time the selected  item  changes
       (before  the  change).  item_term returns the current item
       term hook, if any (NULL if there is no such hook).

       The function set_menu_init sets a hook  to  be  called  at
       menu-post  time  and  just  after  the top row on the menu
       changes once it is posted.  menu_init returns the  current
       menu init hook, if any (NULL if there is no such hook).

       The  function  set_menu_term  sets  a hook to be called at
       menu-unpost time and just before the top row on  the  menu
       changes  once it is posted.  menu_term returns the current
       menu term hook, if any (NULL if there is no such hook).


RETURN VALUE

       Routines that return pointers return NULL on error.  Other
       routines return one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V  menu  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                          menu_hook(3x)
ncurses-6.0-20160213/doc/html/man/index.html0000644000175100001440000001052512154437264016750 0ustar tomusers NCURSES – Manual Pages ncurses-6.0-20160213/doc/html/man/curs_add_wchstr.3x.html0000644000175100001440000002065412653207003021342 0ustar tomusers curs_add_wchstr 3x

curs_add_wchstr 3x

curs_add_wchstr(3x)                                 curs_add_wchstr(3x)




NAME

       add_wchstr, add_wchnstr, wadd_wchstr, wadd_wchnstr,
       mvadd_wchstr, mvadd_wchnstr, mvwadd_wchstr, mvwadd_wchnstr
       - add an array of complex characters (and attributes) to a
       curses window


SYNOPSIS

       #include <curses.h>

       int add_wchstr(const cchar_t *wchstr);
       int add_wchnstr(const cchar_t *wchstr, int n);
       int wadd_wchstr(WINDOW * win, const cchar_t *wchstr);
       int wadd_wchnstr(WINDOW * win, const cchar_t *wchstr, int n);
       int mvadd_wchstr(int y, int x, const cchar_t *wchstr);
       int mvadd_wchnstr(int y, int x, const cchar_t *wchstr, int n);
       int mvwadd_wchstr(WINDOW *win, int y, int x, const cchar_t *wchstr);
       int mvwadd_wchnstr(WINDOW *win, int y, int x, const cchar_t *wchstr, int n);


DESCRIPTION

       These functions copy the (null-terminated) array  of  com-
       plex  characters  wchstr  into  the window image structure
       starting at the current cursor position.  The  four  func-
       tions with n as the last argument copy at most n elements,
       but no more than will fit on the line.  If n=-1  then  the
       whole array is copied, to the maximum number of characters
       that will fit on the line.

       The window cursor is not advanced.  These  functions  work
       faster than waddnstr.  On the other hand:

       o   they do not perform checking (such as for the newline,
           backspace, or carriage return characters),

       o   they do not advance the current cursor position,

       o   they do not expand other control characters  to  ^-es-
           capes, and

       o   they  truncate the string if it crosses the right mar-
           gin, rather than wrapping it around to the new line.

       These functions end successfully on  encountering  a  null
       cchar_t,  or when they have filled the current line.  If a
       complex character cannot completely fit at the end of  the
       current  line,  the  remaining columns are filled with the
       background character and rendition.


RETURN VALUE

       All functions return the integer ERR upon failure  and  OK
       on success.

       X/Open  does not define any error conditions.  This imple-
       mentation returns an error if the window pointer is null.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


NOTES

       All functions except wadd_wchnstr may be macros.


PORTABILITY

       These entry points are described in the XSI  Curses  stan-
       dard, Issue 4.


SEE ALSO

       curs_addwstr(3x), curses(3x).

       Comparable functions in the narrow-character (ncurses) li-
       brary are described in curs_addchstr(3x).



                                                    curs_add_wchstr(3x)
ncurses-6.0-20160213/doc/html/man/curs_delch.3x.html0000644000175100001440000001306712653207003020277 0ustar tomusers curs_delch 3x

curs_delch 3x

curs_delch(3x)                                           curs_delch(3x)




NAME

       delch,  wdelch, mvdelch, mvwdelch - delete character under
       the cursor in a curses window


SYNOPSIS

       #include <curses.h>

       int delch(void);
       int wdelch(WINDOW *win);
       int mvdelch(int y, int x);
       int mvwdelch(WINDOW *win, int y, int x);


DESCRIPTION

       These routines delete the character under the cursor;  all
       characters to the right of the cursor on the same line are
       moved to the left one position and the last  character  on
       the line is filled with a blank.  The cursor position does
       not change (after moving to y, x,  if  specified).   (This
       does  not  imply use of the hardware delete character fea-
       ture.)


RETURN VALUE

       All routines return the integer ERR upon failure and an OK
       (SVr4  specifies  only  "an integer value other than ERR")
       upon successful completion.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


NOTES

       Note that delch, mvdelch, and mvwdelch may be macros.


PORTABILITY

       These functions are described in the XSI Curses  standard,
       Issue  4.   The standard specifies that they return ERR on
       failure, but specifies no error conditions.


SEE ALSO

       curses(3x)



                                                         curs_delch(3x)
ncurses-6.0-20160213/doc/html/man/tput.1.html0000644000175100001440000004604312653207013016767 0ustar tomusers tput 1

tput 1

tput(1)                                                         tput(1)




NAME

       tput,  reset  -  initialize  a  terminal or query terminfo
       database


SYNOPSIS

       tput [-Ttype] capname [parms ... ]
       tput [-Ttype] init
       tput [-Ttype] reset
       tput [-Ttype] longname
       tput -S  <<
       tput -V


DESCRIPTION

       The tput utility uses the terminfo database  to  make  the
       values  of terminal-dependent capabilities and information
       available to the shell (see sh(1)), to initialize or reset
       the  terminal,  or  return  the long name of the requested
       terminal type.  The result depends upon  the  capability's
       type:

              string
                   tput writes the string to the standard output.
                   No trailing newline is supplied.

              integer
                   tput writes the decimal value to the  standard
                   output, with a trailing newline.

              boolean
                   tput  simply sets the exit code (0 for TRUE if
                   the terminal has the capability, 1  for  FALSE
                   if  it  does  not),  and writes nothing to the
                   standard output.

       Before using a value returned on the standard output,  the
       application  should  test  the  exit  code  (e.g., $?, see
       sh(1)) to be sure it is 0.  (See the EXIT CODES and  DIAG-
       NOSTICS  sections.)   For  a complete list of capabilities
       and the capname associated with each, see terminfo(5).

       -Ttype indicates the  type  of  terminal.   Normally  this
              option is unnecessary, because the default is taken
              from the environment variable TERM.  If -T is spec-
              ified,  then  the shell variables LINES and COLUMNS
              will also be ignored.

       capname
              indicates the capability from  the  terminfo  data-
              base.   When  termcap  support  is compiled in, the
              termcap name for the capability is also accepted.

       parms  If the capability is a string  that  takes  parame-
              ters, the arguments parms will be instantiated into
              the string.

              Most parameters are numbers.  Only a  few  terminfo
              capabilities require string parameters; tput uses a
              table to decide which to pass as strings.  Normally
              tput  uses  tparm (3x) to perform the substitution.
              If no parameters are given for the capability, tput
              writes  the string without performing the substitu-
              tion.

       -S     allows more than one capability per  invocation  of
              tput.  The capabilities must be passed to tput from
              the standard input instead of from the command line
              (see  example).   Only  one  capname is allowed per
              line.  The -S option changes the meaning of  the  0
              and  1  boolean and string exit codes (see the EXIT
              CODES section).

              Again, tput uses a table and the presence of param-
              eters  in  its input to decide whether to use tparm
              (3x), and how to interpret the parameters.

       -V     reports the version of ncurses which  was  used  in
              this program, and exits.

       init   If  the  terminfo  database is present and an entry
              for the user's terminal exists (see -Ttype, above),
              the following will occur:

              (1)    if  present,  the  terminal's initialization
                     strings will be output as  detailed  in  the
                     terminfo(5)  section on Tabs and Initializa-
                     tion,

              (2)    any delays (e.g., newline) specified in  the
                     entry will be set in the tty driver,

              (3)    tabs  expansion  will  be  turned  on or off
                     according to the specification in the entry,
                     and

              (4)    if tabs are not expanded, standard tabs will
                     be set (every 8 spaces).

              If an entry does not contain the information needed
              for any of the four above activities, that activity
              will silently be skipped.

       reset  Instead of putting out initialization strings,  the
              terminal's  reset strings will be output if present
              (rs1, rs2, rs3, rf).  If the reset strings are  not
              present,  but  initialization strings are, the ini-
              tialization strings  will  be  output.   Otherwise,
              reset acts identically to init.

       longname
              If  the  terminfo  database is present and an entry
              for the user's terminal exists (see -Ttype  above),
              then the long name of the terminal will be put out.
              The long name is the last name in the first line of
              the terminal's description in the terminfo database
              [see term(5)].

       If tput is invoked by a link named  reset,  this  has  the
       same effect as tput reset.  See tset for comparison, which
       has similar behavior.


EXAMPLES

       tput init
            Initialize the terminal according to the type of ter-
            minal  in the environmental variable TERM.  This com-
            mand should be included in everyone's .profile  after
            the environmental variable TERM has been exported, as
            illustrated on the profile(5) manual page.

       tput -T5620 reset
            Reset an AT&T 5620 terminal, overriding the  type  of
            terminal in the environmental variable TERM.

       tput cup 0 0
            Send the sequence to move the cursor to row 0, column
            0 (the upper left corner of the screen, usually known
            as the "home" cursor position).

       tput clear
            Echo the clear-screen sequence for the current termi-
            nal.

       tput cols
            Print the number of columns for the current terminal.

       tput -T450 cols
            Print the number of columns for the 450 terminal.

       bold=`tput smso` offbold=`tput rmso`
            Set the shell variables bold, to begin stand-out mode
            sequence, and offbold, to end standout mode sequence,
            for the current terminal.  This might be followed  by
            a  prompt:  echo  "${bold}Please  type  in your name:
            ${offbold}\c"

       tput hc
            Set exit code to indicate if the current terminal  is
            a hard copy terminal.

       tput cup 23 4
            Send  the sequence to move the cursor to row 23, col-
            umn 4.

       tput cup
            Send the terminfo string for cursor-movement, with no
            parameters substituted.

       tput longname
            Print  the  long  name from the terminfo database for
            the type of terminal specified in  the  environmental
            variable TERM.

            tput -S <<!
            > clear
            > cup 10 10
            > bold
            > !

            This  example shows tput processing several capabili-
            ties in one invocation.  It clears the screen,  moves
            the  cursor  to  position  10,  10  and turns on bold
            (extra bright) mode.  The list is  terminated  by  an
            exclamation mark (!) on a line by itself.


FILES

       /usr/share/terminfo
              compiled terminal description database

       /usr/share/tabset/*
              tab settings for some terminals, in a format appro-
              priate  to  be  output  to  the  terminal   (escape
              sequences  that  set  margins  and  tabs); for more
              information, see the "Tabs and Initialization" sec-
              tion of terminfo(5)


EXIT CODES

       If the -S option is used, tput checks for errors from each
       line, and if any errors are found, will set the exit  code
       to  4  plus the number of lines with errors.  If no errors
       are found, the exit code is 0.   No  indication  of  which
       line failed can be given so exit code 1 will never appear.
       Exit codes 2, 3, and 4 retain their usual  interpretation.
       If the -S option is not used, the exit code depends on the
       type of capname:

            boolean
                   a value of 0 is set for TRUE and 1 for FALSE.

            string a value of 0 is set if the capname is  defined
                   for  this  terminal type (the value of capname
                   is returned on standard output); a value of  1
                   is set if capname is not defined for this ter-
                   minal type (nothing  is  written  to  standard
                   output).

            integer
                   a  value  of  0  is always set, whether or not
                   capname is defined for this terminal type.  To
                   determine  if capname is defined for this ter-
                   minal type, the user must test the value writ-
                   ten  to  standard output.  A value of -1 means
                   that capname is not defined for this  terminal
                   type.

            other  reset  or  init may fail to find their respec-
                   tive files.  In that case, the  exit  code  is
                   set to 4 + errno.

       Any  other  exit code indicates an error; see the DIAGNOS-
       TICS section.


DIAGNOSTICS

       tput prints the following error messages and sets the cor-
       responding exit codes.

       exit code   error message
       ---------------------------------------------------------------------
       0           (capname  is a numeric variable that is not specified in
                   the terminfo(5) database for this  terminal  type,  e.g.
                   tput -T450 lines and tput -T2621 xmc)
       1           no error message is printed, see the EXIT CODES section.
       2           usage error
       3           unknown terminal type or no terminfo database
       4           unknown terminfo capability capname
       >4          error occurred in -S
       ---------------------------------------------------------------------


PORTABILITY

       The  longname  and -S options, and the parameter-substitu-
       tion features used in the cup example, are  not  supported
       in BSD curses or in AT&T/USL curses before SVr4.

       X/Open  documents  only  the  operands for clear, init and
       reset.  In this implementation, clear is part of the  cap-
       name support.  Other implementations of tput on SVr4-based
       systems such as Solaris, IRIX64 and HPUX as well as others
       such  as  AIX  and Tru64 provide support for capname oper-
       ands.

       A few platforms such as FreeBSD and NetBSD recognize term-
       cap  names  rather than terminfo capability names in their
       respective tput commands.

       Most implementations which provide support for capname op-
       erands  use the tparm function to expand parameters in it.
       That function expects a  mixture  of  numeric  and  string
       parameters,  requiring  tput  to  know  which type to use.
       This implementation uses a table to determine that for the
       standard  capname  operands, and an internal library func-
       tion  to  analyze  nonstandard  capname  operands.   Other
       implementations  may simply guess that an operand contain-
       ing only digits is intended to be a number.


SEE ALSO

       clear(1), stty(1), tabs(1), terminfo(5), curs_termcap(3x).

       This describes ncurses version 6.0 (patch 20160130).



                                                                tput(1)
ncurses-6.0-20160213/doc/html/man/form_field_new.3x.html0000644000175100001440000001536412653207007021151 0ustar tomusers form_field_new 3x

form_field_new 3x

form_field_new(3x)                                   form_field_new(3x)




NAME

       new_field,  dup_field, link_field, free_field - create and
       destroy form fields


SYNOPSIS

       #include <form.h>
       FIELD *new_field(int height, int width,
                        int toprow, int leftcol,
                        int offscreen, int nbuffers);
       FIELD *dup_field(FIELD *field, int toprow, int leftcol);
       FIELD *link_field(FIELD *field, int toprow, int leftcol);
       int free_field(FIELD *field);


DESCRIPTION

       The function new_field allocates a new field and  initial-
       izes  it  from the parameters given: height, width, row of
       upper-left corner, column  of  upper-left  corner,  number
       off-screen rows, and number of additional working buffers.

       The  function  dup_field duplicates a field at a new loca-
       tion.  Most attributes (including current contents,  size,
       validation  type, buffer count, growth threshold, justifi-
       cation, foreground, background,  pad  character,  options,
       and  user pointer) are copied.  Field status and the field
       page bit are not copied.

       The function link_field acts like dup_field, but  the  new
       field  shares  buffers with its parent.  Attribute data is
       separate.

       The function free_field  de-allocates  storage  associated
       with a field.


RETURN VALUE

       The function, new_field, dup_field, link_field return NULL
       on error.  They set errno according to their success:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_SYSTEM_ERROR
            System error occurred, e.g., malloc failure.

       The function free_field returns one of the following:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_CONNECTED
            field is connected.


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.

       It may be unwise to count on the set of attributes  copied
       by  dup_field  being  portable; the System V forms library
       documents are not very explicit about what gets copied and
       what does not.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                     form_field_new(3x)
ncurses-6.0-20160213/doc/html/man/mitem_name.3x.html0000644000175100001440000001153612653207011020275 0ustar tomusers mitem_name 3x

mitem_name 3x

mitem_name(3x)                                           mitem_name(3x)




NAME

       item_name,  item_description  -  get  menu  item  name and
       description fields


SYNOPSIS

       #include <menu.h>
       const char *item_name(const ITEM *item);
       const char *item_description(const ITEM *item);


DESCRIPTION

       The function item_name returns the name part of the  given
       item.
       The function item_description returns the description part
       of the given item.


RETURN VALUE

       These routines return a pointer (which may be NULL).  They
       do not set errno.


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V  menu  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                         mitem_name(3x)
ncurses-6.0-20160213/doc/html/man/curs_sp_funcs.3x.html0000644000175100001440000004715412653207006021047 0ustar tomusers curs_sp_funcs 3x

curs_sp_funcs 3x

curs_sp_funcs(3x)                                     curs_sp_funcs(3x)




NAME

       curs_sp_funcs - curses screen-pointer extension


SYNOPSIS

       #include <curses.h>

       int assume_default_colors_sp(SCREEN*, int, int);
       int baudrate_sp(SCREEN*);
       int beep_sp(SCREEN*);
       bool can_change_color_sp(SCREEN*);
       int cbreak_sp(SCREEN*);
       int color_content_sp(SCREEN*, short, short*, short*, short*);
       int curs_set_sp(SCREEN*, int);
       int define_key_sp(SCREEN*, const char *, int);
       int def_prog_mode_sp(SCREEN*);
       int def_shell_mode_sp(SCREEN*);
       int delay_output_sp(SCREEN*, int);
       int doupdate_sp(SCREEN*);
       int echo_sp(SCREEN*);
       int endwin_sp(SCREEN*);
       int erasechar_sp(SCREEN*);
       int filter_sp(SCREEN*);
       int flash_sp(SCREEN*);
       int flushinp_sp(SCREEN*);
       int get_escdelay_sp(SCREEN*);
       int getmouse_sp(SCREEN*, MEVENT*);
       WINDOW* getwin_sp(SCREEN*, FILE*);
       int halfdelay_sp(SCREEN*);
       bool has_colors_sp(SCREEN*);
       bool has_ic_sp(SCREEN*);
       bool has_il_sp(SCREEN*);
       int has_key_sp(SCREEN*, int);
       bool has_mouse_sp(SCREEN*);
       int init_color_sp(SCREEN*, short, short, short, short);
       int init_pair_sp(SCREEN*, short, short, short);
       int intrflush_sp(SCREEN*, WINDOW*, bool);
       bool isendwin_sp(SCREEN*);
       bool is_term_resized_sp(SCREEN*, int, int);
       char* keybound_sp(SCREEN*, int, int);
       int key_defined_sp(SCREEN*, const char *);
       NCURSES_CONST char * keyname_sp(SCREEN*, int);
       int keyok_sp(SCREEN*, int, bool);
       char killchar_sp(SCREEN*);
       int mcprint_sp(SCREEN*, char *, int);
       int mouseinterval_sp(SCREEN*, int);
       mmask_t mousemask_sp(SCREEN*, mmask_t, mmask_t *);
       int mvcur_sp(SCREEN*, int, int, int, int);
       int napms_sp(SCREEN*, int);
       WINDOW* newpad_sp(SCREEN*, int, int);
       SCREEN* new_prescr(void);
       SCREEN* newterm_sp(SCREEN*, NCURSES_CONST char *, FILE *, FILE *);
       WINDOW* newwin_sp(SCREEN*, int, int, int, int);
       int nl_sp(SCREEN*);
       int nocbreak_sp(SCREEN*);
       int noecho_sp(SCREEN*);
       int nofilter_sp(SCREEN*);
       int nonl_sp(SCREEN*);
       void noqiflush_sp(SCREEN*);
       int noraw_sp(SCREEN*);
       int pair_content_sp(SCREEN*, short, short*, short*);
       void qiflush_sp(SCREEN*);
       int raw_sp(SCREEN*);
       int reset_prog_mode_sp(SCREEN*);
       int reset_shell_mode_sp(SCREEN*);
       int resetty_sp(SCREEN*);
       int resize_term_sp(SCREEN*, int, int);
       int resizeterm_sp(SCREEN*, int, int);
       int restartterm_sp(SCREEN*, NCURSES_CONST char*, int, int *);
       int ripoffline_sp(SCREEN*, int, int (*)(WINDOW*, int));
       int savetty_sp(SCREEN*);
       int scr_init_sp(SCREEN*, const char *);
       int scr_restore_sp(SCREEN*, const char *);
       int scr_set_sp(SCREEN*, const char *);
       TERMINAL* set_curterm_sp(SCREEN*, TERMINAL*);
       int set_escdelay_sp(SCREEN*, int);
       int set_tabsize_sp(SCREEN*, int);
       int slk_attroff_sp(SCREEN*, const chtype);
       int slk_attron_sp(SCREEN*, const chtype);
       int slk_attr_set_sp(SCREEN*, const attr_t, short, void*);
       int slk_attrset_sp(SCREEN*, const chtype);
       int slk_attr_sp(SCREEN*);
       int slk_clear_sp(SCREEN*);
       int slk_color_sp(SCREEN*, short);
       int slk_init_sp(SCREEN*, int);
       int slk_label_sp(SCREEN*, int);
       int slk_noutrefresh_sp(SCREEN*);
       int slk_refresh_sp(SCREEN*);
       int slk_restore_sp(SCREEN*);
       int slk_set_sp(SCREEN*, int, const char *, int);
       int slk_touch_sp(SCREEN*);
       int start_color_sp(SCREEN*);
       attr_t term_attrs_sp(SCREEN*);
       chtype termattrs_sp(SCREEN*);
       char* termname_sp(SCREEN*);
       int typeahead_sp(SCREEN*, int);
       NCURSES_CONST char* unctrl_sp(SCREEN*, chtype);
       int ungetch_sp(SCREEN*, int);
       int ungetmouse_sp(SCREEN*,MEVENT *);
       int unget_wch_sp(SCREEN*, const wchar_t);
       int use_default_colors_sp(SCREEN*);
       void use_env_sp(SCREEN*, bool);
       int use_legacy_coding_sp(SCREEN*, int);
       int vid_attr_sp(SCREEN*, attr_t, short, void *);
       int vidattr_sp(SCREEN*, chtype);
       int vid_puts_sp(SCREEN*, attr_t, short, void *, NCURSES_SP_OUTC);
       int vidputs_sp(SCREEN*, chtype, NCURSES_SP_OUTC);
       wchar_t* wunctrl_sp(SCREEN*, cchar_t *);

       #include <form.h>

       int new_form_sp(SCREEN*, FIELD **);

       #include <menu.h>

       int new_menu_sp(SCREEN*, ITEM **);

       #include <panel.h>

       int ceiling_panel(SCREEN*);
       PANEL* ground_panel(SCREEN*);
       int update_panels_sp(SCREEN*);

       #include <term.h>

       int del_curterm_sp(SCREEN*, TERMINAL *);
       int putp_sp(SCREEN*, const char *);
       int tgetflag_sp(SCREEN*, char *, const char *);
       int tgetent_sp(SCREEN*, char *, const char *);
       int tgetnum_sp(SCREEN*, NCURSES_CONST char *);
       char* tgetstr_sp(SCREEN*, NCURSES_CONST char *, char **);
       int tigetflag_sp(SCREEN*, NCURSES_CONST char *);
       int tigetnum_sp(SCREEN*, NCURSES_CONST char *);
       char* tigetstr_sp(SCREEN*, NCURSES_CONST char *);
       int tputs_sp(SCREEN*, const char *, int, NCURSES_SP_OUTC);


DESCRIPTION

       This  implementation can be configured to provide a set of
       functions which improve the  ability  to  manage  multiple
       screens.  This feature can be added to any of the configu-
       rations supported by  ncurses;  it  adds  new  entrypoints
       without changing the meaning of any of the existing ones.


IMPROVED FUNCTIONS

       Most  of  the functions are new versions of existing func-
       tions.  A parameter is added at the front of the parameter
       list.  It is a SCREEN pointer.

       The  existing  functions all use the current screen, which
       is a static variable.   The  extended  functions  use  the
       specified screen, thereby reducing the number of variables
       which must be modified to update multiple screens.


NEW FUNCTIONS

       Here are the new functions:

       ceiling_panel
            this returns a pointer to the topmost  panel  in  the
            given screen.

       ground_panel
            this  returns  a  pointer  to the lowest panel in the
            given screen.

       new_prescr
            when creating a new screen, the library  uses  static
            variables   which   have   been   preset,   e.g.,  by
            curs_util(3x), curs_util(3x), etc.  With the screen-point-
            er extension, there are situations where it must cre-
            ate a current screen before  the  unextended  library
            does.   The new_prescr function is used internally to
            handle these cases.  It is also provided as an entry-
            point  to allow applications to customize the library
            initialization.


NOTES

       This extension introduces some new names:

       NCURSES_SP_FUNCS
            This is set to the library  patch-level  number.   In
            the  unextended library, this is zero (0), to make it
            useful for checking if the extension is provided.

       NCURSES_SP_NAME
            The new functions are named using  the  macro  NCURS-
            ES_SP_NAME,  which  hides  the actual implementation.
            Currently this adds a "_sp" suffix to the name of the
            unextended  function.   This  manual page indexes the
            extensions showing the full name.  However the proper
            usage  of  these functions uses the macro, to provide
            for the possibility of changing the naming convention
            for specific library configurations.

       NCURSES_SP_OUTC
            This  is  a  new  function-pointer type to use in the
            screen-pointer functions  where  an  NCURSES_OUTC  is
            used in the unextended library.

       NCURSES_OUTC
            This  is  a  function-pointer type used for the cases
            where a function  passes  characters  to  the  output
            stream, e.g., curs_terminfo(3x).


PORTABILITY

       These  routines  are  specific  to ncurses.  They were not
       supported on Version 7, BSD or System  V  implementations.
       It  is  recommended that any code depending on ncurses ex-
       tensions be conditioned using NCURSES_SP_FUNCS.


SEE ALSO

       curses(3x), curs_opaque(3x), curs_threads(3x).



                                                      curs_sp_funcs(3x)
ncurses-6.0-20160213/doc/html/man/curs_initscr.3x.html0000644000175100001440000004002112653207004020662 0ustar tomusers curs_initscr 3x

curs_initscr 3x

curs_initscr(3x)                                       curs_initscr(3x)




NAME

       initscr, newterm, endwin, isendwin, set_term, delscreen -
       curses screen initialization and manipulation routines


SYNOPSIS

       #include <curses.h>

       WINDOW *initscr(void);
       int endwin(void);
       bool isendwin(void);
       SCREEN *newterm(char *type, FILE *outfd, FILE *infd);
       SCREEN *set_term(SCREEN *new);
       void delscreen(SCREEN* sp);


DESCRIPTION


initscr

       initscr is normally the first curses routine to call  when
       initializing  a program.  A few special routines sometimes
       need to be called before it; these are  slk_init,  filter,
       ripoffline,  use_env.  For multiple-terminal applications,
       newterm may be called before initscr.

       The initscr code determines the terminal type and initial-
       izes  all curses data structures.  initscr also causes the
       first call to refresh to clear the screen.  If errors  oc-
       cur,  initscr writes an appropriate error message to stan-
       dard error and exits; otherwise, a pointer is returned  to
       stdscr.


newterm

       A  program  that  outputs to more than one terminal should
       use the newterm  routine  for  each  terminal  instead  of
       initscr.  A program that needs to inspect capabilities, so
       it can continue to run in a line-oriented mode if the ter-
       minal cannot support a screen-oriented program, would also
       use newterm.  The routine newterm should  be  called  once
       for each terminal.  It returns a variable of type SCREEN *
       which should be saved as a  reference  to  that  terminal.
       newterm's arguments are

       o   the type of the terminal to be used in place of $TERM,

       o   a file pointer for output to the terminal, and

       o   another file pointer for input from the terminal

       If the type parameter is NULL, $TERM will be used.


endwin

       The  program must also call endwin for each terminal being
       used before exiting from curses.   If  newterm  is  called
       more  than  once for the same terminal, the first terminal
       referred to must be the  last  one  for  which  endwin  is
       called.

       A  program should always call endwin before exiting or es-
       caping from curses mode temporarily.  This routine

       o   restores tty modes,

       o   moves the cursor to the lower left-hand corner of  the
           screen and

       o   resets the terminal into the proper non-visual mode.

       Calling refresh or doupdate after a temporary escape caus-
       es the program to resume visual mode.


isendwin

       The isendwin routine  returns  TRUE  if  endwin  has  been
       called without any subsequent calls to wrefresh, and FALSE
       otherwise.


set_term

       The set_term routine is used to switch  between  different
       terminals.   The screen reference new becomes the new cur-
       rent terminal.  The previous terminal is returned  by  the
       routine.   This  is  the  only  routine  which manipulates
       SCREEN pointers; all other routines affect only  the  cur-
       rent terminal.


delscreen

       The  delscreen  routine  frees storage associated with the
       SCREEN data structure.  The endwin  routine  does  not  do
       this, so delscreen should be called after endwin if a par-
       ticular SCREEN is no longer needed.


RETURN VALUE

       endwin returns the integer ERR upon failure  and  OK  upon
       successful completion.

       Routines that return pointers always return NULL on error.

       X/Open  defines  no error conditions.  In this implementa-
       tion

       o   endwin returns an error if the terminal was  not  ini-
           tialized.

       o   newterm returns an error if it cannot allocate the da-
           ta structures for the screen,  or  for  the  top-level
           windows  within  the  screen, i.e., curscr, newscr, or
           stdscr.

       o   set_term returns no error.


NOTES

       Note that initscr and newterm may be macros.


PORTABILITY

       These functions were described in the XSI Curses standard,
       Issue 4.  As of 2015, the current document is X/Open Curs-
       es, Issue 7.


Differences

       X/Open specifies that portable applications must not  call
       initscr more than once:

       o   The  portable  way  to use initscr is once only, using
           refresh (see curs_refresh(3x)) to restore  the  screen
           after endwin.

       o   This implementation allows using initscr after endwin.

       Old versions of curses, e.g., BSD 4.4, may have returned a
       null pointer from  initscr  when  an  error  is  detected,
       rather  than  exiting.   It is safe but redundant to check
       the return value of initscr in XSI Curses.


Unset TERM Variable

       If the TERM variable is missing or empty, initscr uses the
       value  "unknown", which normally corresponds to a terminal
       entry with the generic (gn) capability.   Generic  entries
       are detected by setupterm (see curs_terminfo(3x)) and can-
       not be used for full-screen operation.  Other  implementa-
       tions  may handle a missing/empty TERM variable different-
       ly.


Signal Handlers

       Quoting from X/Open Curses, section 3.1.1:

            Curses implementations may provide for  special  han-
            dling  of  the SIGINT, SIGQUIT and SIGTSTP signals if
            their disposition is SIG_DFL at the time initscr() is
            called ...

            Any  special handling for these signals may remain in
            effect for the life  of  the  process  or  until  the
            process changes the disposition of the signal.

            None  of the Curses functions are required to be safe
            with respect to signals ...

       This implementation  establishes  signal  handlers  during
       initialization,  e.g.,  initscr  or newterm.  Applications
       which must handle these signals should set up  the  corre-
       sponding handlers after initializing the library:

       SIGINT
            The  handler  attempts to cleanup the screen on exit.
            Although it usually works as expected, there are lim-
            itations:

            o   Walking the SCREEN list is unsafe, since all list
                management is done without any signal blocking.

            o   On  systems  which  have  REENTRANT  turned   on,
                set_term  uses  functions which could deadlock or
                misbehave in other ways.

            o   endwin calls other functions, many of  which  use
                stdio or other library functions which are clear-
                ly unsafe.

       SIGTERM
            This uses the same handler as SIGINT, with  the  same
            limitations.   It  is not mentioned in X/Open Curses,
            but is more suitable for this  purpose  than  SIGQUIT
            (which is used in debugging).

       SIGTSTP
            This  handles  the  stop signal, used in job control.
            When resuming the process, this  implementation  dis-
            cards    pending    input    with   flushinput   (see
            curs_util(3x)), and repaints the screen assuming that
            it  has been completely altered.  It also updates the
            saved  terminal  modes   with   def_shell_mode   (see
            curs_kernel(3x)).

       SIGWINCH
            This  handles the window-size changes which were ini-
            tially ignored in the standardization  efforts.   The
            handler  sets a (signal-safe) variable which is later
            tested in wgetch (see curs_getch(3x)).  If keypad has
            been enabled for the corresponding window, wgetch re-
            turns the key symbol KEY_RESIZE.  At the  same  time,
            wgetch calls resizeterm to adjust the standard screen
            stdscr, and update other data such as LINES and COLS.


SEE ALSO

       curses(3x),       curs_kernel(3x),       curs_refresh(3x),
       curs_slk(3x), curs_terminfo(3x), curs_util(3x), curs_vari-
       ables(3x).



                                                       curs_initscr(3x)
ncurses-6.0-20160213/doc/html/man/curs_inwstr.3x.html0000644000175100001440000001616212653207005020547 0ustar tomusers curs_inwstr 3x

curs_inwstr 3x

curs_inwstr(3x)                                         curs_inwstr(3x)




NAME

       inwstr,  innwstr,  winwstr, winnwstr, mvinwstr, mvinnwstr,
       mvwinwstr, mvwinnwstr - get a string of wchar_t characters
       from a curses window


SYNOPSIS

       #include <curses.h>

       int inwstr(wchar_t *str);
       int innwstr(wchar_t *str, int n);
       int winwstr(WINDOW *win, wchar_t *str);
       int winnwstr(WINDOW *win, wchar_t *str, int n);
       int mvinwstr(int y, int x, wchar_t *str);
       int mvinnwstr(int y, int x, wchar_t *str, int n);
       int mvwinwstr(WINDOW *win, int y, int x, wchar_t *str);
       int mvwinnwstr(WINDOW *win, int y, int x, wchar_t *str, int n);


DESCRIPTION

       These  routines  return  a string of wchar_t characters in
       wstr, extracted starting at the current cursor position in
       the  named window.  Attributes are stripped from the char-
       acters.  The four functions with n as  the  last  argument
       return a leading substring at most n bytes long (exclusive
       of the trailing NUL).  Transfer stops at the  end  of  the
       current  line,  or  when  n  bytes have been stored at the
       location referenced by wstr.

       If the size n is not large  enough  to  store  a  complete
       character, an error is generated.


NOTES

       Note that all routines except winnwstr may be macros.


RETURN VALUE

       All routines return ERR upon failure. Upon successful com-
       pletion, the *inwstr routines return OK, and the  *innwstr
       routines  return  the  number  of characters read into the
       string.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


SEE ALSO

       curses(3x), curs_instr(3x), curs_in_wchstr(3x)



                                                        curs_inwstr(3x)
ncurses-6.0-20160213/doc/html/man/legacy_coding.3x.html0000644000175100001440000001303112653207010020740 0ustar tomusers legacy_coding 3x

legacy_coding 3x

legacy_coding(3x)                                     legacy_coding(3x)




NAME

       use_legacy_coding - use terminal's default colors


SYNOPSIS

       #include <curses.h>

       int use_legacy_coding(int level);


DESCRIPTION

       The  use_legacy_coding()  function  is an extension to the
       curses library.  It allows the caller to change the result
       of  unctrl, and suppress related checks within the library
       that would normally cause  nonprinting  characters  to  be
       rendered in visible form.  This affects only 8-bit charac-
       ters.

       The level parameter controls the result:

              0    the library functions normally, rendering non-
                   printing characters as described in unctrl.

              1    the  library ignores isprintf for codes in the
                   range 160-255.

              2    the library ignores isprintf for codes in  the
                   range 128-255.  It also modifies the output of
                   unctrl, showing codes in the range 128-159  as
                   is.


RETURN VALUE

       If  the  screen  has  not  been  initialized, or the level
       parameter is out of range, the function returns ERR.  Oth-
       erwise, it returns the previous level: 0, 1 or 2.


PORTABILITY

       This routine is specific to ncurses.  It was not supported
       on Version 7, BSD or System V implementations.  It is rec-
       ommended  that any code depending on ncurses extensions be
       conditioned using NCURSES_VERSION.


SEE ALSO

       unctrl.


AUTHOR

       Thomas Dickey (to support lynx's font-switching feature).



                                                      legacy_coding(3x)
ncurses-6.0-20160213/doc/html/man/form_field.3x.html0000644000175100001440000001422412653207007020272 0ustar tomusers form_field 3x

form_field 3x

form_field(3x)                                           form_field(3x)




NAME

       form_field - make and break connections between fields and
       forms


SYNOPSIS

       #include <form.h>
       int set_form_fields(FORM *form, FIELD **fields);
       FIELD **form_fields(const FORM *form);
       int field_count(const FORM *form);
       int move_field(FIELD *field, int frow, int fcol);


DESCRIPTION

       The function set_form_fields  changes  the  field  pointer
       array  of the given form.  The array must be terminated by
       a NULL.

       The function form_fields returns the field  array  of  the
       given form.

       The  function  field_count  returns the count of fields in
       form.

       The function move_field moves the given field (which  must
       be disconnected) to a specified location on the screen.


RETURN VALUE

       The  function  form_fields returns a pointer (which may be
       NULL).  It does not set errno.

       The function field_count returns ERR if the form parameter
       is NULL.

       The functions set_form_fields and move_field return one of
       the following codes on error:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_CONNECTED
            The field is already connected to a form.

       E_POSTED
            The form is already posted.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.

       The   SVr4   forms  library  documentation  specifies  the
       field_count error value as -1 (which is the value of ERR).


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                         form_field(3x)
ncurses-6.0-20160213/doc/html/man/curs_getch.3x.html0000644000175100001440000005244512653207004020316 0ustar tomusers curs_getch 3x

curs_getch 3x

curs_getch(3x)                                           curs_getch(3x)




NAME

       getch, wgetch, mvgetch, mvwgetch, ungetch, has_key - get
       (or push back) characters from curses terminal keyboard


SYNOPSIS

       #include <curses.h>

       int getch(void);
       int wgetch(WINDOW *win);
       int mvgetch(int y, int x);
       int mvwgetch(WINDOW *win, int y, int x);
       int ungetch(int ch);
       int has_key(int ch);


DESCRIPTION


Reading characters

       The getch, wgetch, mvgetch and mvwgetch, routines  read  a
       character  from the window.  In no-delay mode, if no input
       is waiting, the value ERR is returned.  In delay mode, the
       program  waits until the system passes text through to the
       program.  Depending on the setting of cbreak, this is  af-
       ter  one  character (cbreak mode), or after the first new-
       line (nocbreak mode).  In  half-delay  mode,  the  program
       waits  until a character is typed or the specified timeout
       has been reached.

       If echo is enabled, and the window is not a pad, then  the
       character  will  also be echoed into the designated window
       according to the following rules:

       o   If the character is the current erase character,  left
           arrow,  or backspace, the cursor is moved one space to
           the left and that screen  position  is  erased  as  if
           delch had been called.

       o   If  the  character value is any other KEY_ define, the
           user is alerted with a beep call.

       o   If the character is a carriage-return, and  if  nl  is
           enabled,  it  is translated to a line-feed after echo-
           ing.

       o   Otherwise  the  character  is  simply  output  to  the
           screen.

       If the window is not a pad, and it has been moved or modi-
       fied since the last call to  wrefresh,  wrefresh  will  be
       called before another character is read.


Keypad mode

       If  keypad is TRUE, and a function key is pressed, the to-
       ken for that function key is returned instead of  the  raw
       characters.   Possible function keys are defined in <curs-
       es.h> as macros with values outside  the  range  of  8-bit
       characters  whose names begin with KEY_.  Thus, a variable
       intended to hold the return value of a function  key  must
       be of short size or larger.

       When a character that could be the beginning of a function
       key is received (which, on modern terminals, means an  es-
       cape character), curses sets a timer.  If the remainder of
       the sequence does not come in within the designated  time,
       the  character  is passed through; otherwise, the function
       key value is returned.  For this  reason,  many  terminals
       experience a delay between the time a user presses the es-
       cape key and the escape is returned to the program.


Ungetting characters

       The ungetch routine places ch back onto the input queue to
       be returned by the next call to wgetch.  There is just one
       input queue for all windows.


Predefined key-codes

       The following special keys are defined in <curses.h>.

       o   Except for the special case KEY_RESIZE, it  is  neces-
           sary to enable keypad for getch to return these codes.

       o   Not all of these are necessarily supported on any par-
           ticular terminal.

       o   The naming convention may seem obscure, with some  ap-
           parent  misspellings  (such  as "RSUME" for "resume").
           The names correspond to the long  terminfo  capability
           names  for the keys, and were defined long ago, in the
           1980s.

            Name            Key name
            -------------------------------------------------
            KEY_BREAK       Break key
            KEY_DOWN        The four arrow keys ...
            KEY_UP
            KEY_LEFT
            KEY_RIGHT
            KEY_HOME        Home key (upward+left arrow)
            KEY_BACKSPACE   Backspace
            KEY_F0          Function keys; space for 64 keys
                            is reserved.
            KEY_F(n)        For 0 <= n <= 63
            KEY_DL          Delete line
            KEY_IL          Insert line
            KEY_DC          Delete character
            KEY_IC          Insert char or enter insert mode
            KEY_EIC         Exit insert char mode
            KEY_CLEAR       Clear screen
            KEY_EOS         Clear to end of screen
            KEY_EOL         Clear to end of line
            KEY_SF          Scroll 1 line forward
            KEY_SR          Scroll 1 line backward (reverse)
            KEY_NPAGE       Next page
            KEY_PPAGE       Previous page
            KEY_STAB        Set tab
            KEY_CTAB        Clear tab
            KEY_CATAB       Clear all tabs
            KEY_ENTER       Enter or send
            KEY_SRESET      Soft (partial) reset
            KEY_RESET       Reset or hard reset
            KEY_PRINT       Print or copy
            KEY_LL          Home down or bottom (lower left)
            KEY_A1          Upper left of keypad
            KEY_A3          Upper right of keypad
            KEY_B2          Center of keypad
            KEY_C1          Lower left of keypad
            KEY_C3          Lower right of keypad
            KEY_BTAB        Back tab key
            KEY_BEG         Beg(inning) key
            KEY_CANCEL      Cancel key

            KEY_CLOSE       Close key
            KEY_COMMAND     Cmd (command) key
            KEY_COPY        Copy key
            KEY_CREATE      Create key
            KEY_END         End key
            KEY_EXIT        Exit key
            KEY_FIND        Find key
            KEY_HELP        Help key
            KEY_MARK        Mark key
            KEY_MESSAGE     Message key
            KEY_MOUSE       Mouse event read
            KEY_MOVE        Move key
            KEY_NEXT        Next object key
            KEY_OPEN        Open key
            KEY_OPTIONS     Options key
            KEY_PREVIOUS    Previous object key
            KEY_REDO        Redo key
            KEY_REFERENCE   Ref(erence) key
            KEY_REFRESH     Refresh key
            KEY_REPLACE     Replace key
            KEY_RESIZE      Screen resized
            KEY_RESTART     Restart key
            KEY_RESUME      Resume key
            KEY_SAVE        Save key
            KEY_SBEG        Shifted beginning key
            KEY_SCANCEL     Shifted cancel key
            KEY_SCOMMAND    Shifted command key
            KEY_SCOPY       Shifted copy key
            KEY_SCREATE     Shifted create key
            KEY_SDC         Shifted delete char key
            KEY_SDL         Shifted delete line key
            KEY_SELECT      Select key
            KEY_SEND        Shifted end key
            KEY_SEOL        Shifted clear line key
            KEY_SEXIT       Shifted exit key
            KEY_SFIND       Shifted find key
            KEY_SHELP       Shifted help key
            KEY_SHOME       Shifted home key
            KEY_SIC         Shifted input key
            KEY_SLEFT       Shifted left arrow key
            KEY_SMESSAGE    Shifted message key
            KEY_SMOVE       Shifted move key
            KEY_SNEXT       Shifted next key
            KEY_SOPTIONS    Shifted options key
            KEY_SPREVIOUS   Shifted prev key
            KEY_SPRINT      Shifted print key
            KEY_SREDO       Shifted redo key
            KEY_SREPLACE    Shifted replace key
            KEY_SRIGHT      Shifted right arrow
            KEY_SRSUME      Shifted resume key
            KEY_SSAVE       Shifted save key
            KEY_SSUSPEND    Shifted suspend key
            KEY_SUNDO       Shifted undo key
            KEY_SUSPEND     Suspend key
            KEY_UNDO        Undo key

       Keypad is arranged like this:

                         +-----+------+-------+
                         | A1  |  up  |  A3   |
                         +-----+------+-------+
                         |left |  B2  | right |
                         +-----+------+-------+
                         | C1  | down |  C3   |
                         +-----+------+-------+
       A  few  of  these predefined values do not correspond to a
       real key:

       o   KEY_RESIZE is returned when the  SIGWINCH  signal  has
           been  detected  (see  curs_initscr(3x) and resizeterm(3x)).
           This code is returned whether or not keypad  has  been
           enabled.

       o   KEY_MOUSE    is   returned   for   mouse-events   (see
           curs_mouse(3x)).  This code relies upon whether or not
           keypad(3x) has been enabled, because (e.g., with xterm
           mouse prototocol) ncurses must read escape  sequences,
           just like a function key.


Testing key-codes

       The  has_key routine takes a key-code value from the above
       list, and returns TRUE or FALSE according to  whether  the
       current terminal type recognizes a key with that value.

       The library also supports these extensions:

          define_key
               defines  a  key-code  for  a given string (see de-
               fine_key(3x)).

          key_defined
               checks if there is a key-code defined for a  given
               string (see key_defined(3x)).


RETURN VALUE

       All  routines  return  the integer ERR upon failure and an
       integer value other than ERR (OK in the case of ungetch())
       upon successful completion.

          ungetch
               returns ERR if there is no more room in the FIFO.

          wgetch
               returns  ERR  if the window pointer is null, or if
               its timeout expires without having any data.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


NOTES

       Use of the escape key by a programmer for a single charac-
       ter  function  is discouraged, as it will cause a delay of
       up to one second while the keypad code looks for a follow-
       ing function-key sequence.

       Some  keys  may be the same as commonly used control keys,
       e.g., KEY_ENTER  versus  control/M,  KEY_BACKSPACE  versus
       control/H.  Some curses implementations may differ accord-
       ing to whether they treat  these  control  keys  specially
       (and  ignore  the  terminfo),  or use the terminfo defini-
       tions.  Ncurses uses the terminfo definition.  If it  says
       that  KEY_ENTER  is control/M, getch will return KEY_ENTER
       when you press control/M.

       Generally, KEY_ENTER denotes the character(s) sent by  the
       Enter key on the numeric keypad:

       o   the terminal description lists the most useful keys,

       o   the  Enter key on the regular keyboard is already han-
           dled by the standard ASCII characters for carriage-re-
           turn and line-feed,

       o   depending  on  whether nl or nonl was called, pressing
           "Enter" on the regular keyboard may  return  either  a
           carriage-return or line-feed, and finally

       o   "Enter  or  send" is the standard description for this
           key.

       When using getch, wgetch, mvgetch, or  mvwgetch,  nocbreak
       mode (nocbreak) and echo mode (echo) should not be used at
       the same time.  Depending on the state of the  tty  driver
       when  each character is typed, the program may produce un-
       desirable results.

       Note that getch, mvgetch, and mvwgetch may be macros.

       Historically, the set of keypad macros was largely defined
       by  the  extremely  function-key-rich keyboard of the AT&T
       7300, aka 3B1, aka Safari 4.   Modern  personal  computers
       usually  have  only a small subset of these.  IBM PC-style
       consoles  typically  support  little  more  than   KEY_UP,
       KEY_DOWN,    KEY_LEFT,   KEY_RIGHT,   KEY_HOME,   KEY_END,
       KEY_NPAGE, KEY_PPAGE, and function keys 1 through 12.  The
       Ins key is usually mapped to KEY_IC.


PORTABILITY

       The  *get* functions are described in the XSI Curses stan-
       dard, Issue 4.  They  read  single-byte  characters  only.
       The  standard  specifies  that they return ERR on failure,
       but specifies no error conditions.

       The echo behavior of these functions on input of  KEY_  or
       backspace  characters  was not specified in the SVr4 docu-
       mentation.  This description is adopted from the XSI Curs-
       es standard.

       The  behavior of getch and friends in the presence of han-
       dled signals is unspecified in the  SVr4  and  XSI  Curses
       documentation.   Under  historical curses implementations,
       it varied depending on whether the operating system's  im-
       plementation   of  handled  signal  receipt  interrupts  a
       read(2) call in progress or not, and also (in some  imple-
       mentations)  depending on whether an input timeout or non-
       blocking mode has been set.

       KEY_MOUSE is mentioned in XSI Curses, along with a few re-
       lated terminfo capabilities, but no higher-level functions
       use the feature.  The implementation in ncurses is an  ex-
       tension.

       KEY_RESIZE  is an extension first implemented for ncurses.
       NetBSD curses later added this extension.

       Programmers concerned about portability should be prepared
       for  either  of two cases: (a) signal receipt does not in-
       terrupt getch; (b) signal  receipt  interrupts  getch  and
       causes  it  to  return ERR with errno set to EINTR.  Under
       the ncurses implementation, handled signals  never  inter-
       rupt getch.

       The  has_key  function is unique to ncurses.  We recommend
       that any code using it be conditionalized  on  the  NCURS-
       ES_VERSION feature macro.


SEE ALSO

       curses(3x),       curs_inopts(3x),       curs_outopts(3x),
       curs_mouse(3x),   curs_move(3x),   curs_refresh(3x),   re-
       sizeterm(3x).

       Comparable  functions in the wide-character (ncursesw) li-
       brary are described in curs_get_wch(3x).



                                                         curs_getch(3x)
ncurses-6.0-20160213/doc/html/man/curs_border.3x.html0000644000175100001440000002361412653207003020474 0ustar tomusers curs_border 3x

curs_border 3x

curs_border(3x)                                         curs_border(3x)




NAME

       border, wborder, box, hline, whline, vline, wvline,
       mvhline, mvwhline, mvvline, mvwvline - create curses
       borders, horizontal and vertical lines


SYNOPSIS

       #include <curses.h>
       int border(chtype ls, chtype rs, chtype ts, chtype bs,
          chtype tl, chtype tr, chtype bl, chtype br);
       int wborder(WINDOW *win, chtype ls, chtype rs,
          chtype ts, chtype bs, chtype tl, chtype tr,
          chtype bl, chtype br);
       int box(WINDOW *win, chtype verch, chtype horch);
       int hline(chtype ch, int n);
       int whline(WINDOW *win, chtype ch, int n);
       int vline(chtype ch, int n);
       int wvline(WINDOW *win, chtype ch, int n);
       int mvhline(int y, int x, chtype ch, int n);
       int mvwhline(WINDOW *, int y, int x, chtype ch, int n);
       int mvvline(int y, int x, chtype ch, int n);
       int mvwvline(WINDOW *, int y, int x, chtype ch, int n);


DESCRIPTION

       The border, wborder and box routines draw a box around the
       edges of a window.  Other than the window,  each  argument
       is a character with attributes:

              ls - left side,
              rs - right side,
              ts - top side,
              bs - bottom side,
              tl - top left-hand corner,
              tr - top right-hand corner,
              bl - bottom left-hand corner, and
              br - bottom right-hand corner.

       If  any of these arguments is zero, then the corresponding
       default values (defined in curses.h) are used instead:

              ACS_VLINE,
              ACS_VLINE,
              ACS_HLINE,
              ACS_HLINE,
              ACS_ULCORNER,
              ACS_URCORNER,
              ACS_LLCORNER,
              ACS_LRCORNER.

       box(win, verch, horch) is a shorthand  for  the  following
       call:  wborder(win,  verch,  verch, horch, horch, 0, 0, 0,
       0).

       The hline and whline functions draw a horizontal (left  to
       right)  line using ch starting at the current cursor posi-
       tion in the window.  The current cursor  position  is  not
       changed.   The  line  is  at most n characters long, or as
       many as fit into the window.

       The vline and wvline functions draw  a  vertical  (top  to
       bottom) line using ch starting at the current cursor posi-
       tion in the window.  The current cursor  position  is  not
       changed.   The  line  is  at most n characters long, or as
       many as fit into the window.


RETURN VALUE

       All routines return the integer  OK.   The  SVr4.0  manual
       says  "or  a  non-negative integer if immedok is set", but
       this appears to be an error.

       X/Open does not define any error conditions.  This  imple-
       mentation returns an error if the window pointer is null.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


NOTES

       The  borders  generated by these functions are inside bor-
       ders (this is also true of SVr4 curses, though the fact is
       not documented).

       Note that border and box may be macros.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4.  The standard specifies that they return  ERR  on
       failure, but specifies no error conditions.


SEE ALSO

       curses(3x), curs_outopts(3x).



                                                        curs_border(3x)
ncurses-6.0-20160213/doc/html/man/menu_new.3x.html0000644000175100001440000001305012653207011017770 0ustar tomusers menu_new 3x

menu_new 3x

menu_new(3x)                                               menu_new(3x)




NAME

       new_menu, free_menu - create and destroy menus


SYNOPSIS

       #include <menu.h>
       MENU *new_menu(ITEM **items);
       int free_menu(MENU *menu);


DESCRIPTION

       The  function  new_menu  creates a new menu connected to a
       specified item pointer array (which  must  be  NULL-termi-
       nated).

       The  function  free_menu  disconnects  menu  from its item
       array and frees the storage allocated for the menu.


RETURN VALUE

       The function new_menu returns  NULL  on  error.   It  sets
       errno according to the function's failure:

       E_NOT_CONNECTED
            No items are connected to the menu.

       E_SYSTEM_ERROR
            System error occurred, e.g., malloc failure.

       The function free_menu returns one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_POSTED
            The menu has already been posted.


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                           menu_new(3x)
ncurses-6.0-20160213/doc/html/man/menu_pattern.3x.html0000644000175100001440000001417312653207011020663 0ustar tomusers menu_pattern 3x

menu_pattern 3x

menu_pattern(3x)                                       menu_pattern(3x)




NAME

       set_menu_pattern, menu_pattern - set and get a menu's pat-
       tern buffer


SYNOPSIS

       #include <menu.h>
       int set_menu_pattern(MENU *menu, const char *pattern);
       char *menu_pattern(const MENU *menu);


DESCRIPTION

       Every menu has an associated  pattern  match  buffer.   As
       input  events  that are printable characters come in, they
       are appended to this match buffer and tested for a  match,
       as described in menu_driver(3x).

       The  function set_menu_pattern sets the pattern buffer for
       the given menu and tries to find the first matching  item.
       If  it  succeeds,  that  item becomes current; if not, the
       current item does not change.

       The function menu_pattern returns the  pattern  buffer  of
       the given menu.


RETURN VALUE

       The function menu_pattern returns a pointer, which is NULL
       if the menu parameter is NULL.  Otherwise, it is a pointer
       to a string which is empty if no pattern has been set.  It
       does not set errno.

       The function set_menu_pattern  may  return  the  following
       error codes:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_BAD_STATE
            Routine was called from an initialization or termina-
            tion function.

       E_NOT_CONNECTED
            No items are connected to menu.

       E_NO_MATCH
            Character failed to match.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V  menu  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                       menu_pattern(3x)
ncurses-6.0-20160213/doc/html/man/form_data.3x.html0000644000175100001440000001134012653207007020114 0ustar tomusers form_data 3x

form_data 3x

form_data(3x)                                             form_data(3x)




NAME

       data_ahead,  data_behind  -  test  for  off-screen data in
       given forms


SYNOPSIS

       #include <form.h>
       bool data_ahead(const FORM *form);
       bool data_behind(const FORM *form);


DESCRIPTION

       The function data_ahead tests whether there is  off-screen
       data  ahead  in  the  given  form.  It returns TRUE (1) or
       FALSE (0).

       The function data_behind tests whether there is off-screen
       data  behind  in  the  given form.  It returns TRUE (1) or
       FALSE (0).


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                          form_data(3x)
ncurses-6.0-20160213/doc/html/man/mitem_value.3x.html0000644000175100001440000001260212653207011020464 0ustar tomusers mitem_value 3x

mitem_value 3x

mitem_value(3x)                                         mitem_value(3x)




NAME

       set_item_value, item_value - set and get menu item values


SYNOPSIS

       #include <menu.h>
       int set_item_value(ITEM *item, bool value);
       bool item_value(const ITEM *item);


DESCRIPTION

       If  you  turn  off  the menu option O_ONEVALUE (e.g., with
       set_menu_opts or menu_opts_off;  see  menu_opts(3x)),  the
       menu becomes multi-valued; that is, more than one item may
       simultaneously be selected.

       In a multi_valued menu, you  can  used  set_item_value  to
       select the given menu item (second argument TRUE) or dese-
       lect it (second argument FALSE).


RETURN VALUE

       The function set_item_value returns one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_REQUEST_DENIED
            The menu driver could not process the request.


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                        mitem_value(3x)
ncurses-6.0-20160213/doc/html/man/form_new_page.3x.html0000644000175100001440000001244112653207007020773 0ustar tomusers form_new_page 3x

form_new_page 3x

form_new_page(3x)                                     form_new_page(3x)




NAME

       set_new_page, new_page - form pagination functions


SYNOPSIS

       #include <form.h>
       int set_new_page(FIELD *field, bool new_page_flag);
       bool new_page(const FIELD *field);


DESCRIPTION

       The  function  set_new_page  sets or resets a flag marking
       the given field as the beginning of  a  new  page  on  its
       form.

       The  function  new_page  is  a  predicate which tests if a
       given field marks a page beginning on its form.


RETURN VALUE

       The function new_page returns TRUE or FALSE.

       The function set_new_page return one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_CONNECTED
            The given field is already connected to a form.


SEE ALSO

       curses(3x) and related pages whose names begin "form_" for
       detailed descriptions of the entry points.


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                      form_new_page(3x)
ncurses-6.0-20160213/doc/html/man/curs_ins_wch.3x.html0000644000175100001440000001254012653207004020646 0ustar tomusers curs_ins_wch 3x

curs_ins_wch 3x

curs_ins_wch(3x)                                       curs_ins_wch(3x)




NAME

       ins_wch,  mvins_wch,  mvwins_wch, wins_wch - insert a com-
       plex character and rendition into a window


SYNOPSIS

       #include <curses.h>

       int ins_wch(const cchar_t *wch);
       int wins_wch(WINDOW *win, const cchar_t *wch);
       int mvins_wch(int y, int x, const cchar_t *wch);
       int mvwins_wch(WINDOW *win, int y, int  x,  const  cchar_t
       *wch);


DESCRIPTION

       These routines, insert the complex character wch with ren-
       dition before the character under the cursor.  All charac-
       ters to the right of the cursor are moved one space to the
       right, with the possibility of the rightmost character  on
       the  line  being  lost.   The insertion operation does not
       change the cursor position.


RETURN VALUE

       If successful, these functions return OK.   If  not,  they
       return ERR.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


ERRORS

       No errors are defined.


SEE ALSO

       curses(3x), curs_insch(3x).



                                                       curs_ins_wch(3x)
ncurses-6.0-20160213/doc/html/man/form_cursor.3x.html0000644000175100001440000001222212653207007020520 0ustar tomusers form_cursor 3x

form_cursor 3x

form_cursor(3x)                                         form_cursor(3x)




NAME

       pos_form_cursor - position a form window cursor


SYNOPSIS

       #include <form.h>
       int pos_form_cursor(FORM *form);


DESCRIPTION

       The  function  pos_form_cursor  restores the cursor to the
       position required for the forms driver  to  continue  pro-
       cessing  requests.   This  is useful after curses routines
       have been called to do screen-painting in  response  to  a
       form operation.


RETURN VALUE

       This routine returns one of the following:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_NOT_POSTED
            The form has not been posted.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                        form_cursor(3x)
ncurses-6.0-20160213/doc/html/man/form_field_just.3x.html0000644000175100001440000001260012653207007021333 0ustar tomusers form_field_just 3x

form_field_just 3x

form_field_just(3x)                                 form_field_just(3x)




NAME

       set_field_just,  field_just  - retrieve field characteris-
       tics


SYNOPSIS

       #include <form.h>
       int set_field_just(FIELD *field, int justification);
       int field_just(const FIELD *field);


DESCRIPTION

       The  function  set_field_just   sets   the   justification
       attribute  of a field; field_just returns a field's justi-
       fication attribute.  The attribute may be one of NO_JUSTI-
       FICATION, JUSTIFY_RIGHT, JUSTIFY_LEFT, or JUSTIFY_CENTER.


RETURN VALUE

       The  function field_just returns one of: NO_JUSTIFICATION,
       JUSTIFY_RIGHT, JUSTIFY_LEFT, or JUSTIFY_CENTER.

       The function set_field_just returns one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.


SEE ALSO

       curses(3x) and related pages whose names begin "form_" for
       detailed descriptions of the entry points.


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                    form_field_just(3x)
ncurses-6.0-20160213/doc/html/man/curs_util.3x.html0000644000175100001440000005252312653207006020200 0ustar tomusers curs_util 3x

curs_util 3x

curs_util(3x)                                             curs_util(3x)




NAME

       delay_output, filter, flushinp, getwin, key_name, keyname,
       nofilter, putwin, unctrl, use_env, use_tioctl, wunctrl -
       miscellaneous curses utility routines


SYNOPSIS

       #include <curses.h>

       char *unctrl(chtype c);
       wchar_t *wunctrl(cchar_t *c);
       char *keyname(int c);
       char *key_name(wchar_t w);
       void filter(void);
       void nofilter(void);
       void use_env(bool f);
       void use_tioctl(bool f);
       int putwin(WINDOW *win, FILE *filep);
       WINDOW *getwin(FILE *filep);
       int delay_output(int ms);
       int flushinp(void);


DESCRIPTION


unctrl

       The  unctrl  routine returns a character string which is a
       printable representation of the character c, ignoring  at-
       tributes.   Control characters are displayed in the ^X no-
       tation.  Printing characters are  displayed  as  is.   The
       corresponding  wunctrl  returns a printable representation
       of a wide character.


keyname/key_name

       The keyname routine returns a character string correspond-
       ing to the key c:

       o   Printable  characters  are  displayed  as  themselves,
           e.g., a one-character string containing the key.

       o   Control characters are displayed in the ^X notation.

       o   DEL (character 127) is displayed as ^?.

       o   Values above 128 are either meta  characters  (if  the
           screen  has  not been initialized, or if meta has been
           called with a TRUE parameter), shown in the M-X  nota-
           tion,  or  are displayed as themselves.  In the latter
           case, the values may not be  printable;  this  follows
           the X/Open specification.

       o   Values  above  256  may  be  the names of the names of
           function keys.

       o   Otherwise (if there  is  no  corresponding  name)  the
           function returns null, to denote an error.  X/Open al-
           so lists an "UNKNOWN KEY" return value, which some im-
           plementations return rather than null.

       The corresponding key_name returns a character string cor-
       responding to the wide-character value w.  The  two  func-
       tions  do  not  return the same set of strings; the latter
       returns null where the former would display a meta charac-
       ter.


filter/nofilter

       The filter routine, if used, must be called before initscr
       or newterm are called.  The effect is that,  during  those
       calls,  LINES  is  set  to 1; the capabilities clear, cup,
       cud, cud1, cuu1, cuu,  vpa  are  disabled;  and  the  home
       string is set to the value of cr.

       The  nofilter  routine  cancels  the effect of a preceding
       filter call.  That  allows  the  caller  to  initialize  a
       screen  on  a different device, using a different value of
       $TERM.  The limitation arises because the  filter  routine
       modifies the in-memory copy of the terminal information.


use_env

       The  use_env  routine,  if  used,  should be called before
       initscr or newterm are called (because those  compute  the
       screen size).  It modifies the way ncurses treats environ-
       ment variables when determining the screen size.

       o   Normally ncurses looks first at the terminal  database
           for the screen size.

           If  use_env  was  called  with FALSE for parameter, it
           stops here unless If use_tioctl was also  called  with
           TRUE for parameter.

       o   Then  it asks for the screen size via operating system
           calls.  If successful, it overrides  the  values  from
           the terminal database.

       o   Finally  (unless use_env was called with FALSE parame-
           ter), ncurses examines the LINES or  COLUMNS  environ-
           ment variables, using a value in those to override the
           results from the operating system  or  terminal  data-
           base.

           Ncurses  also  updates  the screen size in response to
           SIGWINCH, unless overridden by the  LINES  or  COLUMNS
           environment variables,


use_tioctl

       The  use_tioctl  routine, if used, should be called before
       initscr or newterm are called (because those  compute  the
       screen  size).  After use_tioctl is called with TRUE as an
       argument, ncurses modifies the last step in  its  computa-
       tion of screen size as follows:

       o   checks  if the LINES and COLUMNS environment variables
           are set to a number greater than zero.

       o   for each, ncurses updates the  corresponding  environ-
           ment  variable with the value that it has obtained via
           operating system call or from the terminal database.

       o   ncurses re-fetches the value of the environment  vari-
           ables  so  that  it is still the environment variables
           which set the screen size.

       The use_env and use_tioctl routines combine as  summarized
       here:

     use_env   use_tioctl   Summary
     ----------------------------------------------------------------



     TRUE      FALSE        This  is  the default behavior.  ncurses
                            uses operating system calls unless over-
                            ridden by $LINES or $COLUMNS environment
                            variables.
     TRUE      TRUE         ncurses  updates  $LINES  and   $COLUMNS
                            based on operating system calls.
     FALSE     TRUE         ncurses ignores $LINES and $COLUMNS, us-
                            es  operating  system  calls  to  obtain
                            size.
     FALSE     FALSE        ncurses  relies on the terminal database
                            to determine size.


putwin/getwin

       The putwin routine writes all data associated with  window
       (or  pad)  win  into the file to which filep points.  This
       information can be later retrieved using the getwin  func-
       tion.

       The getwin routine reads window related data stored in the
       file by putwin.  The routine then creates and  initializes
       a new window using that data.  It returns a pointer to the
       new window.  There are a few caveats:

       o   the data written is a copy of  the  WINDOW  structure,
           and  its  associated character cells.  The format dif-
           fers between the wide-character  (ncursesw)  and  non-
           wide  (ncurses)  libraries.  You can transfer data be-
           tween the two, however.

       o   the retrieved window is always created as a  top-level
           window (or pad), rather than a subwindow.

       o   the  window's  character  cells contain the color pair
           value, but not the actual color numbers.  If cells  in
           the  retrieved  window  use color pairs which have not
           been created in the application using init_pair,  they
           will not be colored when the window is refreshed.


delay_output

       The  delay_output  routine inserts an ms millisecond pause
       in output.  This routine should not  be  used  extensively
       because  padding  characters  are  used  rather than a CPU
       pause.  If no padding character is  specified,  this  uses
       napms to perform the delay.


flushinp

       The  flushinp  routine  throws away any typeahead that has
       been typed by the user and has not yet been  read  by  the
       program.


RETURN VALUE

       Except  for  flushinp, routines that return an integer re-
       turn ERR upon failure and OK (SVr4 specifies only "an  in-
       teger value other than ERR") upon successful completion.

       Routines that return pointers return NULL on error.

       X/Open  does not define any error conditions.  In this im-
       plementation

          flushinp
               returns an error if the terminal was not  initial-
               ized.

          meta returns  an error if the terminal was not initial-
               ized.

          putwin
               returns an error if the  associated  fwrite  calls
               return an error.


PORTABILITY


filter

       The SVr4 documentation describes the action of filter only
       in the vaguest terms.  The  description  here  is  adapted
       from  the  XSI Curses standard (which erroneously fails to
       describe the disabling of cuu).


keyname

       The keyname function may return the names of  user-defined
       string  capabilities which are defined in the terminfo en-
       try via the -x option of tic.  This  implementation  auto-
       matically  assigns  at  run-time  keycodes to user-defined
       strings which begin  with  "k".   The  keycodes  start  at
       KEY_MAX,  but  are not guaranteed to be the same value for
       different runs because user-defined codes are merged  from
       all  terminal  descriptions  which  have been loaded.  The
       use_extended_names function controls whether this data  is
       loaded  when  the  terminal description is read by the li-
       brary.


nofilter/use_tioctl

       The nofilter  and  use_tioctl  routines  are  specific  to
       ncurses.   They  were  not  supported on Version 7, BSD or
       System V implementations.  It is recommended that any code
       depending  on  ncurses  extensions  be  conditioned  using
       NCURSES_VERSION.


putwin/getwin

       The putwin and getwin functions have several  issues  with
       portability:

       o   The  files  written and read by these functions use an
           implementation-specific format.  Although  the  format
           is  an obvious target for standardization, it has been
           overlooked.

           Interestingly enough, according to the copyright dates
           in Solaris source, the functions (along with scr_init,
           etc.) originated with the  University  of  California,
           Berkeley  (in  1982) and were later (in 1988) incorpo-
           rated into SVr4.  Oddly, there are no  such  functions
           in the 4.3BSD curses sources.

       o   Most  implementations  simply  dump  the binary WINDOW
           structure to the file.   These  include  SVr4  curses,
           NetBSD  and  PDCurses,  as  well as older ncurses ver-
           sions.  This implementation (as  well  as  the  X/Open
           variant  of  Solaris  curses, dated 1995) uses textual
           dumps.

           The implementations which use binary dumps use  block-
           I/O  (the fwrite and fread functions).  Those that use
           textual dumps use buffered-I/O.   A  few  applications
           may happen to write extra data in the file using these
           functions.  Doing that can run  into  problems  mixing
           block-  and buffered-I/O.  This implementation reduces
           the problem on writes by flushing the output.   Howev-
           er,  reading  from  a file written using mixed schemes
           may not be successful.


unctrl/wunctrl

       The XSI Curses standard, Issue  4  describes  these  func-
       tions.   It  states  that unctrl and wunctrl will return a
       null pointer if unsuccessful, but does not define any  er-
       ror conditions.  This implementation checks for three cas-
       es:

       o   the parameter is a 7-bit US-ASCII code.  This  is  the
           case that X/Open Curses documented.

       o   the parameter is in the range 128-159, i.e., a C1 con-
           trol code.  If use_legacy_coding has been called  with
           a  2  parameter, unctrl returns the parameter, i.e., a
           one-character string with the parameter as  the  first
           character.   Otherwise,  it  returns "~@", "~A", etc.,
           analogous to "^@", "^A", C0 controls.

           X/Open Curses does not document whether unctrl can  be
           called  before  initializing curses.  This implementa-
           tion permits that, and returns the "~@", etc.,  values
           in that case.

       o   parameter  values  outside the 0 to 255 range.  unctrl
           returns a null pointer.

       The strings returned by unctrl in this implementation  are
       determined  at  compile time, showing C1 controls from the
       upper-128 codes with a `~' prefix rather than `^'.   Other
       implementations  have different conventions.  For example,
       they may show both sets of control  characters  with  `^',
       and  strip the parameter to 7 bits.  Or they may ignore C1
       controls and treat all of the upper-128  codes  as  print-
       able.  This implementation uses 8 bits but does not modify
       the string to reflect locale.  The use_legacy_coding func-
       tion allows the caller to change the output of unctrl.

       Likewise,  the  meta  function allows the caller to change
       the output of keyname, i.e., it determines whether to  use
       the `M-' prefix for "meta" keys (codes in the range 128 to
       255).  Both use_legacy_coding and meta succeed only  after
       curses  is  initialized.   X/Open Curses does not document
       the treatment of codes 128 to 159.  When treating them  as
       "meta"  keys  (or if keyname is called before initializing
       curses),  this  implementation  returns  strings   "M-^@",
       "M-^A", etc.


SEE ALSO

       legacy_coding(3x), curses(3x), curs_initscr(3x), curs_ker-
       nel(3x),  curs_scr_dump(3x),   curs_variables(3x),   lega-
       cy_coding(3x).



                                                          curs_util(3x)
ncurses-6.0-20160213/doc/html/man/term_variables.3x.html0000644000175100001440000002572512653207012021167 0ustar tomusers term_variables 3x

term_variables 3x

term_variables(3x)                                   term_variables(3x)




NAME

       SP, acs_map, boolcodes, boolfnames, boolnames, cur_term,
       numcodes, numfnames, numnames, strcodes, strfnames,
       strnames, ttytype - curses terminfo global variables


SYNOPSIS

       #include <curses.h>
       #include <term.h>

       chtype acs_map[];

       SCREEN * SP;

       TERMINAL * cur_term;

       char ttytype[];

       NCURSES_CONST char * const * boolcodes;
       NCURSES_CONST char * const * boolfnames;
       NCURSES_CONST char * const * boolnames;

       NCURSES_CONST char * const * numcodes;
       NCURSES_CONST char * const * numfnames;
       NCURSES_CONST char * const * numnames;

       NCURSES_CONST char * const * strcodes;
       NCURSES_CONST char * const * strfnames;
       NCURSES_CONST char * const * strnames;


DESCRIPTION

       This  page summarizes variables provided by the curses li-
       brary's low-level terminfo interface.  A more complete de-
       scription is given in the curs_terminfo(3x) manual page.

       Depending  on the configuration, these may be actual vari-
       ables, or  macros  (see  curs_threads(3x))  which  provide
       read-only  access  to curses's state.  In either case, ap-
       plications should treat them as read-only to avoid confus-
       ing the library.


Alternate Character Set Mapping

       After  initializing the curses or terminfo interfaces, the
       acs_map array holds information used  to  translate  cells
       with  the  A_ALTCHARSET  video attribute into line-drawing
       characters.

       The encoding of the information in this array has  changed
       periodically.   Application developers need only know that
       it is used for the "ACS_" constants in <curses.h>.

       The comparable data for the wide-character  library  is  a
       private variable.


Current Terminal Data

       After  initializing the curses or terminfo interfaces, the
       cur_term contains data describing  the  current  terminal.
       This variable is also set as a side-effect of curs_initscr(3x)
       and curs_initscr(3x).

       It is possible to save a value of cur_term for  subsequent
       use  as  a  parameter  to  set_term, for switching between
       screens.  Alternatively, one can  save  the  return  value
       from newterm or setupterm to reuse in set_term.


Terminfo Names

       The  tic(1m)  and infocmp(1m) programs use lookup tables for
       the long and short names of terminfo capabilities, as well
       as  the  corresponding  names  for  termcap  capabilities.
       These are available to other  applications,  although  the
       hash-tables used by the terminfo and termcap functions are
       not available.

       The long terminfo capability names  use  a  "l"  (ell)  in
       their names: boolfnames, numfnames, and strfnames.

       These are the short names for terminfo capabilities: bool-
       names, numnames, and strnames.

       These are the corresponding names  used  for  termcap  de-
       scriptions: boolcodes, numcodes, and strcodes.


Terminal Type

       On  initialization  of  the curses or terminfo interfaces,
       setupterm copies the terminal name to the array ttytype.


Terminfo Names

       In addition to the variables, <term.h> also defines a sym-
       bol  for each terminfo capability long name.  These are in
       terms of the symbol CUR, which is defined

       #define CUR cur_term->type.

       These symbols provide a faster method of accessing termin-
       fo capabilities than using tigetstr(3x), etc.


NOTES

       The  low-level  terminfo  interface  is  initialized using
       curs_terminfo(3x).  The upper-level curses interface uses  the
       low-level terminfo interface, internally.


PORTABILITY

       X/Open  Curses  does  not describe any of these except for
       cur_term.  (The inclusion of cur_term  appears  to  be  an
       oversight, since other comparable low-level information is
       omitted by X/Open).

       Other implementations may have comparable variables.  Some
       implementations  provide the variables in their libraries,
       but omit them from the header files.

       All implementations which provide terminfo interfaces  add
       definitions  as  described  in the Terminfo Names section.
       Most, but not all, base the definition upon  the  cur_term
       variable.


SEE ALSO

       curses(3x),      curs_terminfo(3x),      curs_threads(3x),
       terminfo(5).



                                                     term_variables(3x)
ncurses-6.0-20160213/doc/html/man/form_win.3x.html0000644000175100001440000001426612653207010020004 0ustar tomusers form_win 3x

form_win 3x

form_win(3x)                                               form_win(3x)




NAME

       form_win  - make and break form window and subwindow asso-
       ciations


SYNOPSIS

       #include <form.h>
       int set_form_win(FORM *form, WINDOW *win);
       WINDOW *form_win(const FORM *form);
       int set_form_sub(FORM *form, WINDOW *sub);
       WINDOW *form_sub(const FORM *form);
       int scale_form(const FORM *form, int *rows, int *columns);


DESCRIPTION

       Every form has an associated pair of curses windows.   The
       form  window displays any title and border associated with
       the window; the form subwindow displays the items  of  the
       form that are currently available for selection.

       The first four functions get and set those windows.  It is
       not necessary to set either window; by default, the driver
       code uses stdscr for both.

       In  the set_ functions, window argument of NULL is treated
       as though it were stsdcr.  A  form  argument  of  NULL  is
       treated  as  a  request  to change the system default form
       window or subwindow.

       The function scale_form returns the minimum size  required
       for the subwindow of form.


RETURN VALUE

       Routines  that return pointers return NULL on error.  Rou-
       tines that return an integer return one of  the  following
       error codes:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_POSTED
            The form has already been posted.

       E_NOT_CONNECTED
            No items are connected to the form.


SEE ALSO

       curses(3x), curs_variables(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                           form_win(3x)
ncurses-6.0-20160213/doc/html/man/curs_trace.3x.html0000644000175100001440000002367212653207006020324 0ustar tomusers curs_trace 3x

curs_trace 3x

curs_trace(3x)                                           curs_trace(3x)




NAME

       _tracef, _tracedump, _traceattr, _traceattr2,
       _nc_tracebits, _tracecchar_t, _tracecchar_t2, _tracechar,
       _tracechtype, _tracechtype2, _tracemouse, trace - curses
       debugging routines


SYNOPSIS

       #include <curses.h>

       void _tracef(const char *format, ...);
       void _tracedump(const char *label, WINDOW *win);
       char *_traceattr(attr_t attr);
       char *_traceattr2(int buffer, chtype ch);
       char *_nc_tracebits(void);
       char * _tracecchar_t(const cchar_t *string);
       char * _tracecchar_t2(int buffer, const cchar_t *string);
       char *_tracechar(int ch);
       char *_tracechtype(chtype ch);
       char *_tracechtype2(int buffer, chtype ch);
       char *_tracemouse(const MEVENT *event);
       void trace(const unsigned int param);


DESCRIPTION

       The trace routines are used for debugging the ncurses  li-
       braries, as well as applications which use the ncurses li-
       braries.  These functions are normally available only with
       the  debugging  library  e.g.,  libncurses_g.a, but may be
       compiled into  any  model  (shared,  static,  profile)  by
       defining  the  symbol TRACE.  Additionally, some functions
       are only available with the  wide-character  configuration
       of the libraries.

       The principal parts of this interface are

       o   trace,  which  selectively  enables  different tracing
           features, and

       o   _tracef, which writes  formatted  data  to  the  trace
           file.

       Calling  trace  with  a  nonzero  parameter opens the file
       trace in the current directory for output.  The  parameter
       is formed by OR'ing values from the list of TRACE_xxx def-
       initions in <curses.h>.  These include:

       TRACE_DISABLE
            turn off tracing.

       TRACE_TIMES
            trace user and system times of updates.

       TRACE_TPUTS
            trace tputs calls.

       TRACE_UPDATE
            trace update actions, old & new screens.

       TRACE_MOVE
            trace cursor movement and scrolling.

       TRACE_CHARPUT
            trace all character outputs.

       TRACE_ORDINARY
            trace all update actions.  The  old  and  new  screen
            contents  are  written to the trace file for each re-
            fresh.

       TRACE_CALLS
            trace all curses calls.  The parameters for each call
            are traced, as well as return values.

       TRACE_VIRTPUT
            trace virtual character puts, i.e., calls to addch.

       TRACE_IEVENT
            trace low-level input processing, including timeouts.

       TRACE_BITS
            trace state of TTY control bits.

       TRACE_ICALLS
            trace internal/nested calls.

       TRACE_CCALLS
            trace per-character calls.

       TRACE_DATABASE
            trace read/write of terminfo/termcap data.

       TRACE_ATTRS
            trace changes to video attributes and colors.

       TRACE_MAXIMUM
            maximum  trace  level,  enables  all  of the separate
            trace features.

       Some tracing features are enabled whenever the  trace  pa-
       rameter  is nonzero.  Some features overlap.  The specific
       names are used as a guideline.

       The other functions either return a pointer to  a  string-
       area  (allocated by the corresponding function), or return
       no value (such as _tracedump, which implements the  screen
       dump  for TRACE_UPDATE).  The caller should not free these
       strings, since the  allocation  is  reused  on  successive
       calls.  To work around the problem of a single string-area
       per function, some use a buffer-number parameter,  telling
       the library to allocate additional string-areas.

       These  functions check the NCURSES_TRACE environment vari-
       able, to set the tracing feature as if trace was called:

              filter, initscr, new_prescr, newterm, nofilter,
              restartterm, ripoffline, setupterm, slk_init, tge-
              tent, use_env, use_extended_names, use_tioctl


RETURN VALUE

       Routines which return a value are designed to be  used  as
       parameters to the _tracef routine.


PORTABILITY

       These  functions  are not part of the XSI interface.  Some
       other curses implementations are known  to  have  similar,
       undocumented  features,  but  they are not compatible with
       ncurses.


SEE ALSO

       curses(3x).



                                                         curs_trace(3x)
ncurses-6.0-20160213/doc/html/man/form_driver.3x.html0000644000175100001440000003257112653207007020507 0ustar tomusers form_driver 3x

form_driver 3x

form_driver(3x)                                         form_driver(3x)




NAME

       form_driver,  form_driver_w  -  command-processing loop of
       the form system


SYNOPSIS

       #include <form.h>
       int form_driver(FORM *form, int c);
       int form_driver_w(FORM *form, int c, wchar_t wch);


DESCRIPTION


form_driver

       Once a form has been posted (displayed), you should funnel
       input  events to it through form_driver.  This routine has
       three major input cases:

       o   The input is a form  navigation  request.   Navigation
           request codes are constants defined in <form.h>, which
           are  distinct  from  the  key-  and  character   codes
           returned by wgetch(3x).

       o   The input is a printable character.  Printable charac-
           ters (which must  be  positive,  less  than  256)  are
           checked according to the program's locale settings.

       o   The input is the KEY_MOUSE special key associated with
           an mouse event.


form_driver_w

       This extension simplifies the use  of  the  forms  library
       using  wide characters.  The input is either a key code (a
       request) or a wide character returned by get_wch(3x).  The
       type  must  be  passed  as  well, to enable the library to
       determine whether the parameter is a wide character  or  a
       request.


Form-driver requests

       The form driver requests are as follows:

       Name               Description
       -------------------------------------------------------------------------
       REQ_BEG_FIELD      Move to the beginning of the field.
       REQ_BEG_LINE       Move to the beginning of the line.
       REQ_CLR_EOF        Clear to end of field from cursor.
       REQ_CLR_EOL        Clear to end of line from cursor.
       REQ_CLR_FIELD      Clear the entire field.
       REQ_DEL_CHAR       Delete character at the cursor.
       REQ_DEL_LINE       Delete line at the cursor.
       REQ_DEL_PREV       Delete character before the cursor.
       REQ_DEL_WORD       Delete blank-delimited word at the cursor.
       REQ_DOWN_CHAR      Move down in the field.
       REQ_DOWN_FIELD     Move down to a field.
       REQ_END_FIELD      Move to the end of the field.
       REQ_END_LINE       Move to the end of the line.
       REQ_FIRST_FIELD    Move to the first field.
       REQ_FIRST_PAGE     Move to the first page.
       REQ_INS_CHAR       Insert a blank at the cursor.
       REQ_INS_LINE       Insert a blank line at the cursor.
       REQ_INS_MODE       Enter insert mode.
       REQ_LAST_FIELD     Move to the last field.
       REQ_LAST_PAGE      Move to the last field.
       REQ_LEFT_CHAR      Move left in the field.

       REQ_LEFT_FIELD     Move left to a field.
       REQ_NEW_LINE       Insert or overlay a new line.
       REQ_NEXT_CHAR      Move to the next char.
       REQ_NEXT_CHOICE    Display next field choice.
       REQ_NEXT_FIELD     Move to the next field.
       REQ_NEXT_LINE      Move to the next line.
       REQ_NEXT_PAGE      Move to the next page.
       REQ_NEXT_PAGE      Move to the next page.
       REQ_NEXT_WORD      Move to the next word.
       REQ_OVL_MODE       Enter overlay mode.
       REQ_PREV_CHAR      Move to the previous char.
       REQ_PREV_CHOICE    Display previous field choice.
       REQ_PREV_FIELD     Move to the previous field.
       REQ_PREV_LINE      Move to the previous line.
       REQ_PREV_PAGE      Move to the previous page.
       REQ_PREV_WORD      Move to the previous word.
       REQ_RIGHT_CHAR     Move right in the field.
       REQ_RIGHT_FIELD    Move right to a field.
       REQ_SCR_BCHAR      Scroll the field backward a character.
       REQ_SCR_BHPAGE     Scroll the field backward half a page.
       REQ_SCR_BLINE      Scroll the field backward a line.
       REQ_SCR_BPAGE      Scroll the field backward a page.
       REQ_SCR_FCHAR      Scroll the field forward a character.
       REQ_SCR_FHPAGE     Scroll the field forward half a page.
       REQ_SCR_FLINE      Scroll the field forward a line.
       REQ_SCR_FPAGE      Scroll the field forward a page.
       REQ_SCR_HBHALF     Horizontal scroll the field backward half a line.
       REQ_SCR_HBLINE     Horizontal scroll the field backward a line.
       REQ_SCR_HFHALF     Horizontal scroll the field forward half a line.
       REQ_SCR_HFLINE     Horizontal scroll the field forward a line.
       REQ_SFIRST_FIELD   Move to the sorted first field.
       REQ_SLAST_FIELD    Move to the sorted last field.
       REQ_SNEXT_FIELD    Move to the sorted next field.
       REQ_SPREV_FIELD    Move to the sorted previous field.
       REQ_UP_CHAR        Move up in the field.
       REQ_UP_FIELD       Move up to a field.
       REQ_VALIDATION     Validate field.

       If  the  second  argument  is  a  printable character, the
       driver places it in the current position  in  the  current
       field.   If  it is one of the forms requests listed above,
       that request is executed.


Mouse handling

       If the second argument is the KEY_MOUSE special  key,  the
       associated mouse event is translated into one of the above
       pre-defined requests.  Currently only clicks in  the  user
       window  (e.g., inside the form display area or the decora-
       tion window) are handled.

       If you click above the display region of the form:

          a REQ_PREV_FIELD is generated for a single click,

          a REQ_PREV_PAGE is generated for a double-click and

          a REQ_FIRST_FIELD is generated for a triple-click.

       If you click below the display region of the form:

          a REQ_NEXT_FIELD is generated for a single click,

          a REQ_NEXT_PAGE is generated for a double-click and

          a REQ_LAST_FIELD is generated for a triple-click.

       If you click at an field inside the display  area  of  the
       form:

          o   the form cursor is positioned to that field.

          o   If  you  double-click  a  field, the form cursor is
              positioned to that field and  E_UNKNOWN_COMMAND  is
              returned.  This return value makes sense, because a
              double click usually means that  an  field-specific
              action  should be returned.  It is exactly the pur-
              pose of this return value to signal that an  appli-
              cation specific command should be executed.

          o   If   a   translation   into  a  request  was  done,
              form_driver returns the result of this request.

       If you clicked outside the user window or the mouse  event
       could   not   be   translated   into  a  form  request  an
       E_REQUEST_DENIED is returned.


Application-defined commands

       If the second argument is neither printable nor one of the
       above  pre-defined form requests, the driver assumes it is
       an application-specific command and returns E_UNKNOWN_COM-
       MAND.  Application-defined commands should be defined rel-
       ative to MAX_COMMAND, the  maximum  value  of  these  pre-
       defined requests.


RETURN VALUE

       form_driver returns one of the following error codes:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_BAD_STATE
            Routine was called from an initialization or termina-
            tion function.

       E_NOT_POSTED
            The form has not been posted.

       E_INVALID_FIELD
            Contents of field is invalid.

       E_REQUEST_DENIED
            The form driver could not process the request.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_UNKNOWN_COMMAND
            The form driver code saw an unknown request code.


SEE ALSO

       curses(3x), form(3x), form_variables(3x), curs_getch(3x).


NOTES

       The header file <form.h> automatically includes the header
       files <curses.h>.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                        form_driver(3x)
ncurses-6.0-20160213/doc/html/man/curs_deleteln.3x.html0000644000175100001440000001457112653207003021015 0ustar tomusers curs_deleteln 3x

curs_deleteln 3x

curs_deleteln(3x)                                     curs_deleteln(3x)




NAME

       deleteln,  wdeleteln,  insdelln, winsdelln, insertln, win-
       sertln - delete and insert lines in a curses window


SYNOPSIS

       #include <curses.h>

       int deleteln(void);
       int wdeleteln(WINDOW *win);
       int insdelln(int n);
       int winsdelln(WINDOW *win, int n);
       int insertln(void);
       int winsertln(WINDOW *win);


DESCRIPTION

       The deleteln and wdeleteln routines delete the line  under
       the cursor in the window; all lines below the current line
       are moved up one line.  The bottom line of the  window  is
       cleared.  The cursor position does not change.

       The  insdelln  and  winsdelln  routines,  for  positive n,
       insert n lines into the specified window above the current
       line.   The  n  bottom  lines  are  lost.  For negative n,
       delete n lines (starting with the one under  the  cursor),
       and  move  the remaining lines up.  The bottom n lines are
       cleared.  The current cursor position remains the same.

       The insertln and winsertln routines insert  a  blank  line
       above the current line and the bottom line is lost.


RETURN VALUE

       All routines return the integer ERR upon failure and an OK
       (SVr4 specifies only "an integer value  other  than  ERR")
       upon successful completion.

       X/Open  defines  no error conditions.  In this implementa-
       tion, if  the  window  parameter  is  null,  an  error  is
       returned.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4.  The standard specifies that they return  ERR  on
       failure, but specifies no error conditions.


NOTES

       Note that all but winsdelln may be macros.

       These  routines  do  not require a hardware line delete or
       insert feature in the terminal.  In fact,  they  will  not
       use  hardware  line  delete/insert unless idlok(..., TRUE)
       has been set on the current window.


SEE ALSO

       curses(3x)



                                                      curs_deleteln(3x)
ncurses-6.0-20160213/doc/html/man/key_defined.3x.html0000644000175100001440000001127312653207010020425 0ustar tomusers key_defined 3x

key_defined 3x

key_defined(3x)                                         key_defined(3x)




NAME

       key_defined - check if a keycode is defined


SYNOPSIS

       #include <curses.h>

       int key_defined(const char *definition);


DESCRIPTION

       This is an extension to the curses library.  It permits an
       application to determine if a string is currently bound to
       any keycode.


RETURN VALUE

       If  the  string  is bound to a keycode, its value (greater
       than zero) is returned.  If no keycode is bound,  zero  is
       returned.   If  the  string  conflicts with longer strings
       which are bound to keys, -1 is returned.


PORTABILITY

       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on them be  con-
       ditioned using NCURSES_VERSION.


SEE ALSO

       define_key(3x).


AUTHOR

       Thomas Dickey.



                                                        key_defined(3x)
ncurses-6.0-20160213/doc/html/man/curs_opaque.3x.html0000644000175100001440000002107012653207005020505 0ustar tomusers curs_opaque 3x

curs_opaque 3x

curs_opaque(3x)                                         curs_opaque(3x)




NAME

       is_cleared, is_idlok, is_idcok, is_immedok, is_keypad,
       is_leaveok, is_nodelay, is_notimeout, is_pad, is_scrollok,
       is_subwin, is_syncok, wgetdelay, wgetparent, wgetscrreg -
       curses window properties


SYNOPSIS

       #include <curses.h>

       bool is_cleared(const WINDOW *win);
       bool is_idcok(const WINDOW *win);
       bool is_idlok(const WINDOW *win);
       bool is_immedok(const WINDOW *win);
       bool is_keypad(const WINDOW *win);
       bool is_leaveok(const WINDOW *win);
       bool is_nodelay(const WINDOW *win);
       bool is_notimeout(const WINDOW *win);
       bool is_pad(const WINDOW *win);
       bool is_scrollok(const WINDOW *win);
       bool is_subwin(const WINDOW *win);
       bool is_syncok(const WINDOW *win);
       WINDOW * wgetparent(const WINDOW *win);
       int wgetdelay(const WINDOW *win);
       int wgetscrreg(const WINDOW *win, int *top, int *bottom);


DESCRIPTION

       This implementation provides functions which return  prop-
       erties  set  in  the  WINDOW  structure, allowing it to be
       "opaque" if the symbol NCURSES_OPAQUE is defined:

       is_cleared
            returns the value set in clearok

       is_idcok
            returns the value set in idcok

       is_idlok
            returns the value set in idlok

       is_immedok
            returns the value set in immedok

       is_keypad
            returns the value set in keypad

       is_leaveok
            returns the value set in leaveok

       is_nodelay
            returns the value set in nodelay

       is_notimeout
            returns the value set in notimeout

       is_pad
            returns TRUE if the window is a pad i.e., created  by
            newpad

       is_scrollok
            returns the value set in scrollok

       is_subwin
            returns TRUE if the window is a subwindow, i.e., cre-
            ated by subwin or derwin

       is_syncok
            returns the value set in syncok

       wgetdelay
            returns the delay timeout as set in wtimeout.

       wgetparent
            returns the parent WINDOW pointer for subwindows,  or
            NULL for windows having no parent.

       wgetscrreg
            returns  the  top  and  bottom rows for the scrolling
            margin as set in wsetscrreg.


RETURN VALUE

       These functions all return TRUE or FALSE, except as noted.


NOTES

       Both a macro and a function are provided for each name.


PORTABILITY

       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on  ncurses  ex-
       tensions be conditioned using NCURSES_VERSION.


SEE ALSO

       curses(3x),  curs_inopts(3x),  curs_outopts(3x), curs_win-
       dow(3x)



                                                        curs_opaque(3x)
ncurses-6.0-20160213/doc/html/man/form_new.3x.html0000644000175100001440000001316512653207007020003 0ustar tomusers form_new 3x

form_new 3x

form_new(3x)                                               form_new(3x)




NAME

       new_form, free_form - create and destroy forms


SYNOPSIS

       #include <form.h>
       FORM *new_form(FIELD **fields);
       int free_form(FORM *form);


DESCRIPTION

       The  function  new_form  creates a new form connected to a
       specified field pointer array (which must  be  NULL-termi-
       nated).

       The  function  free_form  disconnects  form from its field
       array and frees the storage allocated for the form.


RETURN VALUE

       The function new_form returns  NULL  on  error.   It  sets
       errno according to the function's success:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_CONNECTED
            The field is already connected to a form.

       E_SYSTEM_ERROR
            System error occurred, e.g., malloc failure.

       The function free_form returns one of the following:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_POSTED
            The form has already been posted.


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                           form_new(3x)
ncurses-6.0-20160213/doc/html/man/curs_getcchar.3x.html0000644000175100001440000002032412653207004020773 0ustar tomusers curs_getcchar 3x

curs_getcchar 3x

curs_getcchar(3x)                                     curs_getcchar(3x)




NAME

       getcchar,  setcchar - Get a wide character string and ren-
       dition from a cchar_t or set a cchar_t from a wide-charac-
       ter string


SYNOPSIS

       #include <curses.h>

       int getcchar(
               const cchar_t *wcval,
               wchar_t *wch,
               attr_t *attrs,
               short *color_pair,
               void *opts );

       int setcchar(
               cchar_t *wcval,
               const wchar_t *wch,
               const attr_t attrs,
               short color_pair,
               void *opts );


DESCRIPTION


getcchar

       The  getcchar  function  gets  a wide-character string and
       rendition from a cchar_t argument.  When wch is not a null
       pointer, the getcchar function does the following:

       o   Extracts information from a cchar_t value wcval

       o   Stores   the  character  attributes  in  the  location
           pointed to by attrs

       o   Stores the color-pair in the location  pointed  to  by
           color_pair

       o   Stores  the  wide-character  string, characters refer-
           enced by wcval, into the array pointed to by wch.

       When wch is a null pointer, the getcchar function does the
       following:

       o   Obtains  the  number  of wide characters pointed to by
           wcval

       o   Does not  change  the  data  referenced  by  attrs  or
           color_pair


setcchar

       The  setcchar function initializes the location pointed to
       by wcval by using:

       o   The character attributes in attrs

       o   The color pair in color_pair

       o   The wide-character string  pointed  to  by  wch.   The
           string  must  be L'\0' terminated, contain at most one
           spacing character, which must be the first.

           Up to CCHARW_MAX-1 nonspacing characters  may  follow.
           Additional nonspacing characters are ignored.

           The  string  may  contain  a  single control character
           instead.  In that case, no nonspacing  characters  are
           allowed.


NOTES

       The  opts argument is reserved for future use.  Currently,
       an application must provide a null pointer as opts.

       The wcval argument may be a value generated by a  call  to
       setcchar  or by a function that has a cchar_t output argu-
       ment.  If wcval is constructed by  any  other  means,  the
       effect is unspecified.


RETURN VALUE

       When wch is a null pointer, getcchar returns the number of
       wide characters referenced by wcval, including one  for  a
       trailing null.

       When  wch  is not a null pointer, getcchar returns OK upon
       successful completion, and ERR otherwise.

       Upon successful completion, setcchar returns  OK.   Other-
       wise, it returns ERR.


SEE ALSO

       Functions:   curs_attr(3x),   curs_color(3x),  curses(3x),
       wcwidth(3).



                                                      curs_getcchar(3x)
ncurses-6.0-20160213/doc/html/man/menu_driver.3x.html0000644000175100001440000002432412653207010020477 0ustar tomusers menu_driver 3x

menu_driver 3x

menu_driver(3x)                                         menu_driver(3x)




NAME

       menu_driver - command-processing loop of the menu system


SYNOPSIS

       #include <menu.h>
       int menu_driver(MENU *menu, int c);


DESCRIPTION

       Once a menu has been posted (displayed), you should funnel
       input events to it through menu_driver.  This routine  has
       three major input cases:

       o   The  input  is  a form navigation request.  Navigation
           request codes are constants defined in <form.h>, which
           are   distinct  from  the  key-  and  character  codes
           returned by wgetch.

       o   The input is a printable character.  Printable charac-
           ters  (which  must  be  positive,  less  than 256) are
           checked according to the program's locale settings.

       o   The input is the KEY_MOUSE special key associated with
           an mouse event.

       The menu driver requests are as follows:

       REQ_LEFT_ITEM
            Move left to an item.

       REQ_RIGHT_ITEM
            Move right to an item.

       REQ_UP_ITEM
            Move up to an item.

       REQ_DOWN_ITEM
            Move down to an item.

       REQ_SCR_ULINE
            Scroll up a line.

       REQ_SCR_DLINE
            Scroll down a line.

       REQ_SCR_DPAGE
            Scroll down a page.

       REQ_SCR_UPAGE
            Scroll up a page.

       REQ_FIRST_ITEM
            Move to the first item.

       REQ_LAST_ITEM
            Move to the last item.

       REQ_NEXT_ITEM
            Move to the next item.

       REQ_PREV_ITEM
            Move to the previous item.

       REQ_TOGGLE_ITEM
            Select/deselect an item.

       REQ_CLEAR_PATTERN
            Clear the menu pattern buffer.

       REQ_BACK_PATTERN
            Delete  the  previous character from the pattern buf-
            fer.

       REQ_NEXT_MATCH
            Move to the next item matching the pattern match.

       REQ_PREV_MATCH
            Move to the previous item matching the pattern match.

       If the second argument is a printable character, the  code
       appends  it  to the pattern buffer and attempts to move to
       the next item matching the new pattern.  If  there  is  no
       such match, menu_driver returns E_NO_MATCH and deletes the
       appended character from the buffer.

       If the second argument is one  of  the  above  pre-defined
       requests, the corresponding action is performed.


MOUSE HANDLING

       If  the  second argument is the KEY_MOUSE special key, the
       associated mouse event is translated into one of the above
       pre-defined  requests.   Currently only clicks in the user
       window (e.g., inside the menu display area or the  decora-
       tion window) are handled.

       If you click above the display region of the menu:

       o   a REQ_SCR_ULINE is generated for a single click,

       o   a REQ_SCR_UPAGE is generated for a double-click and

       o   a REQ_FIRST_ITEM is generated for a triple-click.

       If you click below the display region of the menu:

       o   a REQ_SCR_DLINE is generated for a single click,

       o   a REQ_SCR_DPAGE is generated for a double-click and

       o   a REQ_LAST_ITEM is generated for a triple-click.

       If  you  click  at  an item inside the display area of the
       menu:

       o   the menu cursor is positioned to that item.

       o   If you double-click an item a REQ_TOGGLE_ITEM is  gen-
           erated and E_UNKNOWN_COMMAND is returned.  This return
           value makes sense,  because  a  double  click  usually
           means that an item-specific action should be returned.
           It is exactly the purpose of this return value to sig-
           nal  that  an  application  specific command should be
           executed.

       o   If a translation into a request was done,  menu_driver
           returns the result of this request.

       If  you clicked outside the user window or the mouse event
       could  not  be  translated  into   a   menu   request   an
       E_REQUEST_DENIED is returned.


APPLICATION-DEFINED COMMANDS

       If the second argument is neither printable nor one of the
       above pre-defined menu requests or  KEY_MOUSE,  the  drive
       assumes  it is an application-specific command and returns
       E_UNKNOWN_COMMAND.  Application-defined commands should be
       defined  relative  to  MAX_COMMAND,  the  maximum value of
       these pre-defined requests.


RETURN VALUE

       menu_driver return one of the following error codes:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_BAD_STATE
            Routine was called from an initialization or termina-
            tion function.

       E_NOT_POSTED
            The menu has not been posted.

       E_UNKNOWN_COMMAND
            The menu driver code saw an unknown request code.

       E_NO_MATCH
            Character failed to match.

       E_REQUEST_DENIED
            The menu driver could not process the request.


SEE ALSO

       curses(3x), menu(3x), curs_getch(3x).


NOTES

       The header file <menu.h> automatically includes the header
       files <curses.h>.


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions. The  sup-
       port for mouse events is ncurses specific.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                        menu_driver(3x)
ncurses-6.0-20160213/doc/html/man/curs_move.3x.html0000644000175100001440000001202412653207005020160 0ustar tomusers curs_move 3x

curs_move 3x

curs_move(3x)                                             curs_move(3x)




NAME

       move, wmove - move curses window cursor


SYNOPSIS

       #include <curses.h>

       int move(int y, int x);
       int wmove(WINDOW *win, int y, int x);


DESCRIPTION

       These  routines move the cursor associated with the window
       to line y and column x.  This routine does  not  move  the
       physical  cursor  of the terminal until refresh is called.
       The position specified is relative to the upper  left-hand
       corner of the window, which is (0,0).


RETURN VALUE

       These routines return ERR upon failure and OK (SVr4 speci-
       fies only "an integer value other than ERR") upon success-
       ful completion.

       Specifically,  they  return an error if the window pointer
       is null, or if the position is outside the window.


NOTES

       Note that move may be a macro.


PORTABILITY

       These functions are described in the XSI Curses  standard,
       Issue 4.


SEE ALSO

       curses(3x), curs_refresh(3x)



                                                          curs_move(3x)
ncurses-6.0-20160213/doc/html/man/form_page.3x.html0000644000175100001440000001371412653207010020120 0ustar tomusers form_page 3x

form_page 3x

form_page(3x)                                             form_page(3x)




NAME

       form_page - set and get form page number


SYNOPSIS

       #include <form.h>
       int set_current_field(FORM *form, FIELD *field);
       FIELD *current_field(const FORM *);
       int set_form_page(FORM *form, int n);
       int form_page(const FORM *form);
       int field_index(const FIELD *field);


DESCRIPTION

       The  function  set_current field sets the current field of
       the given form; current_field returns the current field of
       the given form.

       The  function  set_form_page  sets  the form's page number
       (goes to page n of the form).

       The function form_page returns  the  form's  current  page
       number.

       The function field_index returns the index of the field in
       the field array of the form it is connected to. It returns
       ERR  if  the  argument is the null pointer or the field is
       not connected.


RETURN VALUE

       Except for form_page, each routine returns one of the fol-
       lowing:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_BAD_STATE
            Routine was called from an initialization or termina-
            tion function.

       E_INVALID_FIELD
            Contents of a field are not valid.

       E_REQUEST_DENIED
            The form driver could not process the request.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                          form_page(3x)
ncurses-6.0-20160213/doc/html/man/panel.3x.html0000644000175100001440000003054312653207012017261 0ustar tomusers panel 3x

panel 3x

panel(3x)                                                     panel(3x)




NAME

       panel - panel stack extension for curses


SYNOPSIS

       #include <panel.h>

       cc [flags] sourcefiles -lpanel -lncurses

       PANEL *new_panel(WINDOW *win);
       int bottom_panel(PANEL *pan);
       int top_panel(PANEL *pan);
       int show_panel(PANEL *pan);
       void update_panels();
       int hide_panel(PANEL *pan);
       WINDOW *panel_window(const PANEL *pan);
       int replace_panel(PANEL *pan, WINDOW *window);
       int move_panel(PANEL *pan, int starty, int startx);
       int panel_hidden(const PANEL *pan);
       PANEL *panel_above(const PANEL *pan);
       PANEL *panel_below(const PANEL *pan);
       int set_panel_userptr(PANEL *pan, const void *ptr);
       const void *panel_userptr(const PANEL *pan);
       int del_panel(PANEL *pan);


DESCRIPTION

       Panels  are  curses(3x)  windows with the added feature of
       depth.  Panel functions allow the use of  stacked  windows
       and  ensure  the  proper  portions  of each window and the
       curses stdscr window are hidden or displayed  when  panels
       are  added,  moved,  modified or removed.  The set of cur-
       rently visible panels is the stack of panels.  The  stdscr
       window  is  beneath all panels, and is not considered part
       of the stack.

       A window is associated with every panel.  The  panel  rou-
       tines  enable  you to create, move, hide, and show panels,
       as well as position a panel at any desired location in the
       stack.

       Panel routines are a functional layer added to curses(3x),
       make only high-level curses calls, and work anywhere  ter-
       minfo curses does.


FUNCTIONS

       new_panel(win)
              allocates   a   PANEL structure, associates it with
              win, places the panel  on  the  top  of  the  stack
              (causes   it  to   be   displayed  above  any other
              panel) and returns a pointer to the new panel.

       update_panels()
              refreshes the virtual screen to reflect  the  rela-
              tions between the panels in the stack, but does not
              call doupdate() to  refresh  the  physical  screen.
              Use this function and not wrefresh or wnoutrefresh.
              update_panels may be called more than once before a
              call  to doupdate(), but doupdate() is the function
              responsible for updating the physical screen.

       del_panel(pan)
              removes the given panel from the  stack and deallo-
              cates  the  PANEL structure (but not its associated
              window).

       hide_panel(pan)
              removes the given panel from the  panel  stack  and
              thus hides it from view. The PANEL structure is not
              lost, merely removed from the stack.

       panel_hidden(pan)
              returns TRUE if the panel is in  the  panel  stack,
              FALSE  if  it  is  not.   If  the  panel  is a null
              pointer, return ERR.

       show_panel(pan)
              makes a hidden panel visible by placing it  on  top
              of the panels in the panel stack. See COMPATIBILITY
              below.

       top_panel(pan)
              puts the given visible panel on top of  all  panels
              in the stack.  See COMPATIBILITY below.

       bottom_panel(pan)
              puts panel at the bottom of all panels.

       move_panel(pan,starty,startx)
              moves the given panel window so that its upper-left
              corner is at starty, startx.  It  does  not  change
              the position of the panel in the stack.  Be sure to
              use this function, not mvwin(),  to  move  a  panel
              window.

       replace_panel(pan,window)
              replaces  the  current  window of panel with window
              (useful, for example if you want to resize a panel;
              if you're using ncurses, you can call replace_panel
              on the output of wresize(3x)).  It does not  change
              the position of the panel in the stack.

       panel_above(pan)
              returns  a  pointer to the panel above pan.  If the
              panel argument is (PANEL *)0, it returns a  pointer
              to the bottom panel in the stack.

       panel_below(pan)
              returns  a pointer to the panel just below pan.  If
              the panel argument is  (PANEL  *)0,  it  returns  a
              pointer to the top panel in the stack.

       set_panel_userptr(pan,ptr)
              sets the panel's user pointer.

       panel_userptr(pan)
              returns the user pointer for a given panel.

       panel_window(pan)
              returns a pointer to the window of the given panel.


DIAGNOSTICS

       Each  routine  that  returns  a pointer returns NULL if an
       error occurs. Each  routine  that  returns  an  int  value
       returns OK if it executes successfully and ERR if not.


COMPATIBILITY

       Reasonable  care  has been taken to  ensure  compatibility
       with  the  native  panel  facility  introduced  in  SVr3.2
       (inspection of the SVr4 manual pages suggests the program-
       ming interface is unchanged).  The PANEL  data  structures
       are  merely   similar. The  programmer is cautioned not to
       directly use PANEL fields.

       The functions show_panel() and top_panel()  are  identical
       in  this  implementation,  and work equally well with dis-
       played or hidden panels.  In the native System V implemen-
       tation, show_panel() is intended for making a hidden panel
       visible (at the top  of  the  stack)  and  top_panel()  is
       intended  for  making an already-visible panel move to the
       top of the stack. You are cautioned  to  use  the  correct
       function   to   ensure  compatibility  with  native  panel
       libraries.


NOTE

       In your library list, libpanel.a should  be  before  libn-
       curses.a;  that  is,  you want to say `-lpanel -lncurses',
       not the other way around (which would usually give a link-
       error).


FILES

       panel.h interface for the panels library

       libpanel.a the panels library itself


SEE ALSO

       curses(3x), curs_variables(3x),

       This describes ncurses version 6.0 (patch 20160130).


AUTHOR

       Originally   written   by   Warren  Tucker  <wht@n4hgf.mt-
       park.ga.us>, primarily to assist  in  porting  u386mon  to
       systems  without  a native panels library.  Repackaged for
       ncurses by Zeyd ben-Halim.



                                                              panel(3x)
ncurses-6.0-20160213/doc/html/man/curs_outopts.3x.html0000644000175100001440000003533312653207005020737 0ustar tomusers curs_outopts 3x

curs_outopts 3x

curs_outopts(3x)                                       curs_outopts(3x)




NAME

       clearok, idlok, idcok, immedok, leaveok, setscrreg,
       wsetscrreg, scrollok, nl, nonl - curses output options


SYNOPSIS

       #include <curses.h>

       int clearok(WINDOW *win, bool bf);
       int idlok(WINDOW *win, bool bf);
       void idcok(WINDOW *win, bool bf);
       void immedok(WINDOW *win, bool bf);
       int leaveok(WINDOW *win, bool bf);
       int setscrreg(int top, int bot);
       int wsetscrreg(WINDOW *win, int top, int bot);
       int scrollok(WINDOW *win, bool bf);
       int nl(void);
       int nonl(void);


DESCRIPTION

       These routines set options that change the style of output
       within  curses.   All  options are initially FALSE, unless
       otherwise stated.  It is not necessary to turn  these  op-
       tions off before calling endwin.


clearok

       If  clearok is called with TRUE as argument, the next call
       to wrefresh with this window will clear  the  screen  com-
       pletely  and  redraw the entire screen from scratch.  This
       is useful when the contents of the screen  are  uncertain,
       or  in  some  cases for a more pleasing visual effect.  If
       the win argument to clearok is the global variable curscr,
       the  next  call  to  wrefresh  with  any window causes the
       screen to be cleared and repainted from scratch.


idlok

       If idlok is called with TRUE as  second  argument,  curses
       considers using the hardware insert/delete line feature of
       terminals so equipped.  Calling idlok with FALSE as second
       argument  disables  use  of  line  insertion and deletion.
       This option should be  enabled  only  if  the  application
       needs  insert/delete  line, for example, for a screen edi-
       tor.  It is disabled by default because insert/delete line
       tends  to  be  visually annoying when used in applications
       where it is not really needed.  If insert/delete line can-
       not  be  used,  curses redraws the changed portions of all
       lines.


idcok

       If idcok is called with FALSE as second  argument,  curses
       no longer considers using the hardware insert/delete char-
       acter feature of terminals so equipped.  Use of  character
       insert/delete  is  enabled by default.  Calling idcok with
       TRUE as second argument re-enables use of character inser-
       tion and deletion.


immedok

       If  immedok is called with TRUE as argument, any change in
       the window image, such as the ones caused by waddch, wclr-
       tobot,  wscrl,  etc.,  automatically  cause a call to wre-
       fresh.  However, it may degrade performance  considerably,
       due  to repeated calls to wrefresh.  It is disabled by de-
       fault.


leaveok

       Normally, the hardware cursor is left at the  location  of
       the window cursor being refreshed.  The leaveok option al-
       lows the cursor to be left wherever the update happens  to
       leave  it.  It is useful for applications where the cursor
       is not used, since it reduces the need for cursor motions.


setscrreg

       The setscrreg and wsetscrreg routines allow  the  applica-
       tion  programmer  to  set a software scrolling region in a
       window.  The top and bot parameters are the  line  numbers
       of  the  top  and  bottom  margin of the scrolling region.
       (Line 0 is the top line of the window.)   If  this  option
       and  scrollok are enabled, an attempt to move off the bot-
       tom margin line causes all lines in the  scrolling  region
       to  scroll  one  line  in the direction of the first line.
       Only the text of the window is scrolled.  (Note that  this
       has nothing to do with the use of a physical scrolling re-
       gion capability in the terminal, like that in  the  VT100.
       If  idlok  is  enabled  and  the  terminal  has  either  a
       scrolling region or insert/delete  line  capability,  they
       will probably be used by the output routines.)


scrollok

       The  scrollok option controls what happens when the cursor
       of a window is  moved  off  the  edge  of  the  window  or
       scrolling  region,  either as a result of a newline action
       on the bottom line, or typing the last  character  of  the
       last line.  If disabled, (bf is FALSE), the cursor is left
       on the bottom line.  If enabled, (bf is TRUE), the  window
       is  scrolled  up  one  line (Note that to get the physical
       scrolling effect on the terminal, it is also necessary  to
       call idlok).


nl, nonl

       The  nl  and  nonl routines control whether the underlying
       display device translates the return key into  newline  on
       input,  and  whether it translates newline into return and
       line-feed on output (in either case, the call  addch('\n')
       does the equivalent of return and line feed on the virtual
       screen).  Initially, these translations do occur.  If  you
       disable  them using nonl, curses will be able to make bet-
       ter use of the line-feed capability, resulting  in  faster
       cursor  motion.   Also, curses will then be able to detect
       the return key.


RETURN VALUE

       The functions setscrreg and wsetscrreg return OK upon suc-
       cess and ERR upon failure.  All other routines that return
       an integer always return OK.

       X/Open Curses does not define any error conditions.

       In this implementation, those functions that have a window
       pointer  will  return  an  error  if the window pointer is
       null.

              wclrtoeol
                   returns an error if  the  cursor  position  is
                   about to wrap.

              wsetscrreg
                   returns  an error if the scrolling region lim-
                   its extend outside the window.

       X/Open does not define any error conditions.  This  imple-
       mentation returns an error if the window pointer is null.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4.

       The XSI Curses standard is ambiguous on  the  question  of
       whether  raw()  should  disable the CRLF translations con-
       trolled by nl() and nonl().  BSD curses did turn off these
       translations;  AT&T  curses (at least as late as SVr1) did
       not.  We choose to do so, on the theory that a  programmer
       requesting  raw  input wants a clean (ideally 8-bit clean)
       connection that the operating system will not alter.

       Some historic curses implementations had,  as  an  undocu-
       mented  feature,  the  ability  to  do  the  equivalent of
       clearok(..., 1) by saying touchwin(stdscr)  or  clear(std-
       scr).  This will not work under ncurses.

       Earlier  System  V  curses  implementations specified that
       with scrollok enabled, any window modification  triggering
       a  scroll also forced a physical refresh.  XSI Curses does
       not require this, and ncurses avoids doing it  to  perform
       better vertical-motion optimization at wrefresh time.

       The  XSI  Curses standard does not mention that the cursor
       should be made invisible  as  a  side-effect  of  leaveok.
       SVr4  curses  documentation  does  this, but the code does
       not.  Use curs_set to make the cursor invisible.


NOTES

       Note that clearok, leaveok, scrollok, idcok, nl, nonl  and
       setscrreg may be macros.

       The immedok routine is useful for windows that are used as
       terminal emulators.


SEE ALSO

       curses(3x), curs_addch(3x), curs_clear(3x),
       curs_initscr(3x), curs_scroll(3x), curs_refresh(3x),
       curs_variables(3x).



                                                       curs_outopts(3x)
ncurses-6.0-20160213/doc/html/man/menu_win.3x.html0000644000175100001440000001426612653207011020006 0ustar tomusers menu_win 3x

menu_win 3x

menu_win(3x)                                               menu_win(3x)




NAME

       menu_win  - make and break menu window and subwindow asso-
       ciations


SYNOPSIS

       #include <menu.h>
       int set_menu_win(MENU *menu, WINDOW *win);
       WINDOW *menu_win(const MENU *menu);
       int set_menu_sub(MENU *menu, WINDOW *sub);
       WINDOW *menu_sub(const MENU *menu);
       int scale_menu(const MENU *menu, int *rows, int *columns);


DESCRIPTION

       Every menu has an associated pair of curses windows.   The
       menu  window displays any title and border associated with
       the window; the menu subwindow displays the items  of  the
       menu that are currently available for selection.

       The first four functions get and set those windows.  It is
       not necessary to set either window; by default, the driver
       code uses stdscr for both.

       In  the set_ functions, window argument of NULL is treated
       as though it were stsdcr.  A  menu  argument  of  NULL  is
       treated  as  a  request  to change the system default menu
       window or subwindow.

       The function scale_menu returns the minimum size  required
       for the subwindow of menu.


RETURN VALUE

       Routines  that return pointers return NULL on error.  Rou-
       tines that return an integer return one of  the  following
       error codes:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_POSTED
            The menu has already been posted.

       E_NOT_CONNECTED
            No items are connected to the menu.


SEE ALSO

       curses(3x), curs_variables(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                           menu_win(3x)
ncurses-6.0-20160213/doc/html/man/form_opts.3x.html0000644000175100001440000001360612653207010020171 0ustar tomusers form_opts 3x

form_opts 3x

form_opts(3x)                                             form_opts(3x)




NAME

       set_form_opts,  form_opts_on,  form_opts_off,  form_opts -
       set and get form options


SYNOPSIS

       #include <form.h>
       int set_form_opts(FORM *form, Field_Options opts);
       int form_opts_on(FORM *form, Field_Options opts);
       int form_opts_off(FORM *form, Field_Options opts);
       Field_Options form_opts(const FORM *form);


DESCRIPTION

       The function  set_form_opts  sets  all  the  given  form's
       option  bits  (form  option  bits  may  be logically-OR'ed
       together).

       The function form_opts_on turns on the given option  bits,
       and leaves others alone.

       The  function  form_opts_off  turns  off  the given option
       bits, and leaves others alone.

       The function form_opts returns the form's  current  option
       bits.

       The following options are defined (all are on by default):

       O_NL_OVERLOAD
            Overload  the  REQ_NEW_LINE  forms  driver request so
            that calling it at the end of a  field  goes  to  the
            next field.

       O_BS_OVERLOAD
            Overload  the  REQ_DEL_PREV  forms  driver request so
            that calling it at the beginning of a field  goes  to
            the previous field.


RETURN VALUE

       Except for form_opts, each routine returns one of the fol-
       lowing:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                          form_opts(3x)
ncurses-6.0-20160213/doc/html/man/curs_beep.3x.html0000644000175100001440000001201712653207003020125 0ustar tomusers curs_beep 3x

curs_beep 3x

curs_beep(3x)                                             curs_beep(3x)




NAME

       beep, flash - curses bell and screen flash routines


SYNOPSIS

       #include <curses.h>

       int beep(void);
       int flash(void);


DESCRIPTION

       The beep and flash routines are used to alert the terminal
       user.  The routine beep sounds an  audible  alarm  on  the
       terminal,  if  possible;  otherwise  it flashes the screen
       (visible bell).  The routine flash flashes the screen, and
       if  that  is  not  possible, sounds the alert.  If neither
       alert is possible, nothing happens.  Nearly all  terminals
       have  an  audible  alert (bell or beep), but only some can
       flash the screen.


RETURN VALUE

       These routines return OK if they  succeed  in  beeping  or
       flashing, ERR otherwise.


EXTENSIONS

       SVr4's  beep  and flash routines always returned OK, so it
       was not possible to tell when the beep or flash failed.


PORTABILITY

       These functions are described in the XSI Curses  standard,
       Issue  4.  Like SVr4, it specifies that they always return
       OK.


SEE ALSO

       curses(3x)



                                                          curs_beep(3x)
ncurses-6.0-20160213/doc/html/man/menu_requestname.3x.html0000644000175100001440000001240112653207011021527 0ustar tomusers menu_requestname 3x

menu_requestname 3x

menu_requestname(3x)                               menu_requestname(3x)




NAME

       menu_request_by_name, menu_request_name - handle printable
       menu request names


SYNOPSIS

       #include <menu.h>
       const char *menu_request_name(int request);
       int menu_request_by_name(const char *name);


DESCRIPTION

       The function menu_request_name returns the printable  name
       of a menu request code.
       The function menu_request_by_name searches in the name-ta-
       ble for a request with the  given  name  and  returns  its
       request code.  Otherwise E_NO_MATCH is returned.


RETURN VALUE

       menu_request_name  returns NULL on error and sets errno to
       E_BAD_ARGUMENT.
       menu_request_by_name returns E_NO_MATCH on error.  It does
       not set errno.


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on them be  con-
       ditioned using NCURSES_VERSION.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                   menu_requestname(3x)
ncurses-6.0-20160213/doc/html/man/curs_scanw.3x.html0000644000175100001440000001765412653207005020343 0ustar tomusers curs_scanw 3x

curs_scanw 3x

curs_scanw(3x)                                           curs_scanw(3x)




NAME

       scanw, wscanw, mvscanw, mvwscanw, vwscanw, vw_scanw - con-
       vert formatted input from a curses window


SYNOPSIS

       #include <curses.h>

       int scanw(char *fmt, ...);
       int wscanw(WINDOW *win, char *fmt, ...);
       int mvscanw(int y, int x, char *fmt, ...);
       int mvwscanw(WINDOW *win, int y, int x, char *fmt, ...);
       int vw_scanw(WINDOW *win, char *fmt, va_list varglist);
       int vwscanw(WINDOW *win, char *fmt, va_list varglist);


DESCRIPTION

       The scanw, wscanw and mvscanw routines  are  analogous  to
       scanf  [see scanf(3)].  The effect of these routines is as
       though wgetstr were called on the window, and the  result-
       ing line used as input for sscanf(3).  Fields which do not
       map to a variable in the fmt field are lost.

       The vwscanw and vw_scanw routines are analogous to vscanf.
       They perform a wscanw using a variable argument list.  The
       third argument is a va_list, a pointer to a list of  argu-
       ments, as defined in <stdarg.h>.


RETURN VALUE

       vwscanw returns ERR on failure and an integer equal to the
       number of fields scanned on success.

       Applications may use the  return  value  from  the  scanw,
       wscanw,  mvscanw  and  mvwscanw  routines to determine the
       number of fields which were mapped in the call.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


PORTABILITY

       The XSI Curses standard, Issue  4  describes  these  func-
       tions.   The  function  vwscanw is marked TO BE WITHDRAWN,
       and is to be replaced by a  function  vw_scanw  using  the
       <stdarg.h> interface.  The Single Unix Specification, Ver-
       sion 2 states that vw_scanw  is preferred to vwscanw since
       the latter requires including <varargs.h>, which cannot be
       used in the same file as <stdarg.h>.  This  implementation
       uses  <stdarg.h> for both, because that header is included
       in <curses.h>.

       Both XSI and The  Single  Unix  Specification,  Version  2
       state  that  these  functions return ERR or OK.  Since the
       underlying scanf can return the number of  items  scanned,
       and the SVr4 code was documented to use this feature, this
       is probably an editing error which was introduced in  XSI,
       rather  than  being done intentionally.  Portable applica-
       tions should only test if the return value is  ERR,  since
       the  OK value (zero) is likely to be misleading.  One pos-
       sible way to get useful results would be  to  use  a  "%n"
       conversion  at the end of the format string to ensure that
       something was processed.


SEE ALSO

       curses(3x), curs_getstr(3x), curs_printw(3x), scanf(3)



                                                         curs_scanw(3x)
ncurses-6.0-20160213/doc/html/man/curs_addchstr.3x.html0000644000175100001440000001712012653207003021006 0ustar tomusers curs_addchstr 3x

curs_addchstr 3x

curs_addchstr(3x)                                     curs_addchstr(3x)




NAME

       addchstr, addchnstr, waddchstr, waddchnstr, mvaddchstr,
       mvaddchnstr, mvwaddchstr, mvwaddchnstr - add a string of
       characters (and attributes) to a curses window


SYNOPSIS

       #include <curses.h>

       int addchstr(const chtype *chstr);
       int addchnstr(const chtype *chstr, int n);
       int waddchstr(WINDOW *win, const chtype *chstr);
       int waddchnstr(WINDOW *win, const chtype *chstr, int n);
       int mvaddchstr(int y, int x, const chtype *chstr);
       int mvaddchnstr(int y, int x, const chtype *chstr, int n);
       int mvwaddchstr(WINDOW *win, int y, int x, const chtype *chstr);
       int mvwaddchnstr(WINDOW *win, int y, int x, const chtype *chstr, int n);


DESCRIPTION

       These functions copy the (null-terminated) chstr array in-
       to the window image structure starting at the current cur-
       sor position.  The four functions with n as the last argu-
       ment copy at most n elements, but no more than will fit on
       the  line.  If n=-1 then the whole array is copied, to the
       maximum number of characters that will fit on the line.

       The window cursor is not advanced.  These  functions  work
       faster than waddnstr.  On the other hand:

       o   they do not perform checking (such as for the newline,
           backspace, or carriage return characters),

       o   they do not advance the current cursor position,

       o   they do not expand other control characters  to  ^-es-
           capes, and

       o   they  truncate the string if it crosses the right mar-
           gin, rather than wrapping it around to the new line.


RETURN VALUE

       All functions return the integer ERR upon failure  and  OK
       on success.

       X/Open  does not define any error conditions.  This imple-
       mentation returns an error if the window pointer is null.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


NOTES

       All functions except waddchnstr may be macros.


PORTABILITY

       These entry points are described in the XSI  Curses  stan-
       dard, Issue 4.


SEE ALSO

       curs_addstr(3x), curses(3x).

       Comparable  functions in the wide-character (ncursesw) li-
       brary are described in curs_add_wchstr(3x).



                                                      curs_addchstr(3x)
ncurses-6.0-20160213/doc/html/man/curs_threads.3x.html0000644000175100001440000006730712653207006020663 0ustar tomusers curs_threads 3x

curs_threads 3x

curs_threads(3x)                                       curs_threads(3x)




NAME

       curs_threads - curses thread support


SYNOPSIS

       #include <curses.h>

       typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);
       typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);
       int get_escdelay(void);
       int set_escdelay(int size);
       int set_tabsize(int size);
       int  use_screen(SCREEN  *scr, NCURSES_SCREEN_CB func, void
       *data);
       int use_window(WINDOW *win, NCURSES_WINDOW_CB  func,  void
       *data);


DESCRIPTION

       This  implementation can be configured to provide rudimen-
       tary support for multi-threaded applications.  This  makes
       a  different set of libraries, e.g., libncursest since the
       binary interfaces are different.

       Rather than modify the interfaces to pass a thread  speci-
       fier  to  each function, it adds a few functions which can
       be used in any configuration which hide the mutex's needed
       to  prevent  concurrent  use  of the global variables when
       configured for threading.

       In addition to forcing access to  members  of  the  WINDOW
       structure  to  be  via functions (see curs_opaque(3x)), it
       makes functions of the common global variables, e.g., COL-
       ORS,  COLOR_PAIRS,  COLS, ESCDELAY, LINES, TABSIZE curscr,
       newscr and ttytype.  Those  variables  are  maintained  as
       read-only values, stored in the SCREEN structure.

       Even  this is not enough to make a thread-safe application
       using curses.  A multi-threaded application would  be  ex-
       pected  to  have threads updating separate windows (within
       the same device), or updating on separate screens (on dif-
       ferent  devices).  Also, a few of the global variables are
       considered writable by some applications.   The  functions
       described here address these special situations.

       The  ESCDELAY and TABSIZE global variables are modified by
       some applications.  To modify them in  any  configuration,
       use  the  set_escdelay  or  set_tabsize  functions.  Other
       global variables are not modifiable.

       The get_escdelay function returns the value for ESCDELAY.

       The use_window and  use_screen  functions  provide  coarse
       granularity mutexes for their respective WINDOW and SCREEN
       parameters, and call a user-supplied function, passing  it
       a  data  parameter, and returning the value from the user-
       supplied function to the application.


USAGE

       All of the ncurses library functions assume that  the  lo-
       cale  is  not altered during operation.  In addition, they
       use data which is maintained within a hierarchy of scopes.

          o   global data, e.g., used in the  low-level  terminfo
              or termcap interfaces.

          o   terminal  data,  e.g.,  associated  with  a call to
              set_curterm.  The  terminal  data  are  initialized
              when screens are created.

          o   screen  data,  e.g.,  associated  with  a  call  to
              newterm or initscr.

          o   window data, e.g., associated with a call to newwin
              or  subwin.   Windows  are associated with screens.
              Pads are not necessarily associated with a particu-
              lar screen.

              Most  curses  applications  operate  on one or more
              windows within a single screen.

          o   reentrant, i.e., it uses only the  data  passed  as
              parameters.

       This table lists the scope of data used for each symbol in
       the ncurses library  when  it  is  configured  to  support
       threading:

      Symbol                  Scope
      -------------------------------------------------------------
      BC                      global
      COLORS                  screen (readonly)
      COLOR_PAIR              reentrant
      COLOR_PAIRS             screen (readonly)
      COLS                    screen (readonly)
      ESCDELAY                screen (readonly, see set_escdelay)
      LINES                   screen (readonly)
      PAIR_NUMBER             reentrant
      PC                      global
      SP                      global
      TABSIZE                 screen (readonly)
      UP                      global
      acs_map                 screen (readonly)
      add_wch                 window (stdscr)
      add_wchnstr             window (stdscr)
      add_wchstr              window (stdscr)
      addch                   window (stdscr)
      addchnstr               window (stdscr)
      addchstr                window (stdscr)
      addnstr                 window (stdscr)
      addnwstr                window (stdscr)
      addstr                  window (stdscr)
      addwstr                 window (stdscr)
      assume_default_colors   screen
      attr_get                window (stdscr)
      attr_off                window (stdscr)
      attr_on                 window (stdscr)
      attr_set                window (stdscr)
      attroff                 window (stdscr)
      attron                  window (stdscr)
      attrset                 window (stdscr)
      baudrate                screen
      beep                    screen
      bkgd                    window (stdscr)
      bkgdset                 window (stdscr)
      bkgrnd                  window (stdscr)
      bkgrndset               window (stdscr)
      boolcodes               global (readonly)
      boolfnames              global (readonly)
      boolnames               global (readonly)
      border                  window (stdscr)

      border_set              window (stdscr)
      box                     window (stdscr)
      box_set                 window (stdscr)
      can_change_color        terminal
      cbreak                  screen
      chgat                   window (stdscr)
      clear                   window (stdscr)
      clearok                 window
      clrtobot                window (stdscr)
      clrtoeol                window (stdscr)
      color_content           screen
      color_set               window (stdscr)
      copywin                 window locks(source, target)
      cur_term                terminal
      curs_set                screen
      curscr                  screen (readonly)
      curses_version          global (readonly)
      def_prog_mode           terminal
      def_shell_mode          terminal
      define_key              screen
      del_curterm             screen
      delay_output            screen
      delch                   window (stdscr)
      deleteln                window (stdscr)
      delscreen               global locks(screenlist, screen)
      delwin                  global locks(windowlist)
      derwin                  screen
      doupdate                screen
      dupwin                  screen locks(window)
      echo                    screen
      echo_wchar              window (stdscr)
      echochar                window (stdscr)
      endwin                  screen
      erase                   window (stdscr)
      erasechar               window (stdscr)
      erasewchar              window (stdscr)
      filter                  global
      flash                   terminal
      flushinp                screen
      get_wch                 screen (input-operation)
      get_wstr                screen (input-operation)
      getattrs                window
      getbegx                 window
      getbegy                 window
      getbkgd                 window
      getbkgrnd               window
      getcchar                reentrant
      getch                   screen (input-operation)
      getcurx                 window
      getcury                 window
      getmaxx                 window
      getmaxy                 window
      getmouse                screen (input-operation)
      getn_wstr               screen (input-operation)
      getnstr                 screen (input-operation)
      getparx                 window
      getpary                 window
      getstr                  screen (input-operation)
      getwin                  screen (input-operation)
      halfdelay               screen
      has_colors              terminal
      has_ic                  terminal
      has_il                  terminal
      has_key                 screen
      hline                   window (stdscr)
      hline_set               window (stdscr)

      idcok                   window
      idlok                   window
      immedok                 window
      in_wch                  window (stdscr)
      in_wchnstr              window (stdscr)
      in_wchstr               window (stdscr)
      inch                    window (stdscr)
      inchnstr                window (stdscr)
      inchstr                 window (stdscr)
      init_color              screen
      init_pair               screen
      initscr                 global locks(screenlist)
      innstr                  window (stdscr)
      innwstr                 window (stdscr)
      ins_nwstr               window (stdscr)
      ins_wch                 window (stdscr)
      ins_wstr                window (stdscr)
      insch                   window (stdscr)
      insdelln                window (stdscr)
      insertln                window (stdscr)
      insnstr                 window (stdscr)
      insstr                  window (stdscr)
      instr                   window (stdscr)
      intrflush               terminal
      inwstr                  window (stdscr)
      is_cleared              window
      is_idcok                window
      is_idlok                window
      is_immedok              window
      is_keypad               window
      is_leaveok              window
      is_linetouched          window
      is_nodelay              window
      is_notimeout            window
      is_scrollok             window
      is_syncok               window
      is_term_resized         terminal
      is_wintouched           window
      isendwin                screen
      key_defined             screen
      key_name                global (static data)
      keybound                screen
      keyname                 global (static data)
      keyok                   screen
      keypad                  window
      killchar                terminal
      killwchar               terminal
      leaveok                 window
      longname                screen
      mcprint                 terminal
      meta                    screen
      mouse_trafo             window (stdscr)
      mouseinterval           screen
      mousemask               screen
      move                    window (stdscr)
      mvadd_wch               window (stdscr)
      mvadd_wchnstr           window (stdscr)
      mvadd_wchstr            window (stdscr)
      mvaddch                 window (stdscr)
      mvaddchnstr             window (stdscr)
      mvaddchstr              window (stdscr)
      mvaddnstr               window (stdscr)
      mvaddnwstr              window (stdscr)
      mvaddstr                window (stdscr)
      mvaddwstr               window (stdscr)
      mvchgat                 window (stdscr)

      mvcur                   screen
      mvdelch                 window (stdscr)
      mvderwin                window (stdscr)
      mvget_wch               screen (input-operation)
      mvget_wstr              screen (input-operation)
      mvgetch                 screen (input-operation)
      mvgetn_wstr             screen (input-operation)
      mvgetnstr               screen (input-operation)
      mvgetstr                screen (input-operation)
      mvhline                 window (stdscr)
      mvhline_set             window (stdscr)
      mvin_wch                window (stdscr)
      mvin_wchnstr            window (stdscr)
      mvin_wchstr             window (stdscr)
      mvinch                  window (stdscr)
      mvinchnstr              window (stdscr)
      mvinchstr               window (stdscr)
      mvinnstr                window (stdscr)
      mvinnwstr               window (stdscr)
      mvins_nwstr             window (stdscr)
      mvins_wch               window (stdscr)
      mvins_wstr              window (stdscr)
      mvinsch                 window (stdscr)
      mvinsnstr               window (stdscr)
      mvinsstr                window (stdscr)
      mvinstr                 window (stdscr)
      mvinwstr                window (stdscr)
      mvprintw                window (stdscr)
      mvscanw                 screen
      mvvline                 window (stdscr)
      mvvline_set             window (stdscr)
      mvwadd_wch              window
      mvwadd_wchnstr          window
      mvwadd_wchstr           window
      mvwaddch                window
      mvwaddchnstr            window
      mvwaddchstr             window
      mvwaddnstr              window
      mvwaddnwstr             window
      mvwaddstr               window
      mvwaddwstr              window
      mvwchgat                window
      mvwdelch                window
      mvwget_wch              screen (input-operation)
      mvwget_wstr             screen (input-operation)
      mvwgetch                screen (input-operation)
      mvwgetn_wstr            screen (input-operation)
      mvwgetnstr              screen (input-operation)
      mvwgetstr               screen (input-operation)
      mvwhline                window
      mvwhline_set            window
      mvwin                   window
      mvwin_wch               window
      mvwin_wchnstr           window
      mvwin_wchstr            window
      mvwinch                 window
      mvwinchnstr             window
      mvwinchstr              window
      mvwinnstr               window
      mvwinnwstr              window
      mvwins_nwstr            window
      mvwins_wch              window
      mvwins_wstr             window
      mvwinsch                window
      mvwinsnstr              window
      mvwinsstr               window

      mvwinstr                window
      mvwinwstr               window
      mvwprintw               window
      mvwscanw                screen
      mvwvline                window
      mvwvline_set            window
      napms                   reentrant
      newpad                  global locks(windowlist)
      newscr                  screen (readonly)
      newterm                 global locks(screenlist)
      newwin                  global locks(windowlist)
      nl                      screen
      nocbreak                screen
      nodelay                 window
      noecho                  screen
      nofilter                global
      nonl                    screen
      noqiflush               terminal
      noraw                   screen
      notimeout               window
      numcodes                global (readonly)
      numfnames               global (readonly)
      numnames                global (readonly)
      ospeed                  global
      overlay                 window locks(source, target)
      overwrite               window locks(source, target)
      pair_content            screen
      pecho_wchar             screen
      pechochar               screen
      pnoutrefresh            screen
      prefresh                screen
      printw                  window
      putp                    global
      putwin                  window
      qiflush                 terminal
      raw                     screen
      redrawwin               window
      refresh                 screen
      reset_prog_mode         screen
      reset_shell_mode        screen
      resetty                 terminal
      resize_term             screen locks(windowlist)
      resizeterm              screen
      restartterm             screen
      ripoffline              global (static data)
      savetty                 terminal
      scanw                   screen
      scr_dump                screen
      scr_init                screen
      scr_restore             screen
      scr_set                 screen
      scrl                    window (stdscr)
      scroll                  window
      scrollok                window
      set_curterm             screen
      set_escdelay            screen
      set_tabsize             screen
      set_term                global locks(screenlist, screen)
      setcchar                reentrant
      setscrreg               window (stdscr)
      setupterm               global
      slk_attr                screen
      slk_attr_off            screen
      slk_attr_on             screen
      slk_attr_set            screen
      slk_attroff             screen

      slk_attron              screen
      slk_attrset             screen
      slk_clear               screen
      slk_color               screen
      slk_init                screen
      slk_label               screen
      slk_noutrefresh         screen
      slk_refresh             screen
      slk_restore             screen
      slk_set                 screen
      slk_touch               screen
      slk_wset                screen
      standend                window
      standout                window
      start_color             screen
      stdscr                  screen (readonly)
      strcodes                global (readonly)
      strfnames               global (readonly)
      strnames                global (readonly)
      subpad                  window
      subwin                  window
      syncok                  window
      term_attrs              screen
      termattrs               screen
      termname                terminal
      tgetent                 global
      tgetflag                global
      tgetnum                 global
      tgetstr                 global
      tgoto                   global
      tigetflag               terminal
      tigetnum                terminal
      tigetstr                terminal
      timeout                 window (stdscr)
      touchline               window
      touchwin                window
      tparm                   global (static data)
      tputs                   screen
      trace                   global (static data)
      ttytype                 screen (readonly)
      typeahead               screen
      unctrl                  screen
      unget_wch               screen (input-operation)
      ungetch                 screen (input-operation)
      ungetmouse              screen (input-operation)
      untouchwin              window
      use_default_colors      screen
      use_env                 global (static data)
      use_extended_names      global (static data)
      use_legacy_coding       screen
      use_screen              global locks(screenlist, screen)
      use_window              global locks(windowlist, window)
      vid_attr                screen
      vid_puts                screen
      vidattr                 screen
      vidputs                 screen
      vline                   window (stdscr)
      vline_set               window (stdscr)
      vw_printw               window
      vw_scanw                screen
      vwprintw                window
      vwscanw                 screen
      wadd_wch                window
      wadd_wchnstr            window
      wadd_wchstr             window
      waddch                  window

      waddchnstr              window
      waddchstr               window
      waddnstr                window
      waddnwstr               window
      waddstr                 window
      waddwstr                window
      wattr_get               window
      wattr_off               window
      wattr_on                window
      wattr_set               window
      wattroff                window
      wattron                 window
      wattrset                window
      wbkgd                   window
      wbkgdset                window
      wbkgrnd                 window
      wbkgrndset              window
      wborder                 window
      wborder_set             window
      wchgat                  window
      wclear                  window
      wclrtobot               window
      wclrtoeol               window
      wcolor_set              window
      wcursyncup              screen (affects window plus parents)
      wdelch                  window
      wdeleteln               window
      wecho_wchar             window
      wechochar               window
      wenclose                window
      werase                  window
      wget_wch                screen (input-operation)
      wget_wstr               screen (input-operation)
      wgetbkgrnd              window
      wgetch                  screen (input-operation)
      wgetdelay               window
      wgetn_wstr              screen (input-operation)
      wgetnstr                screen (input-operation)
      wgetparent              window
      wgetscrreg              window
      wgetstr                 screen (input-operation)
      whline                  window
      whline_set              window
      win_wch                 window
      win_wchnstr             window
      win_wchstr              window
      winch                   window
      winchnstr               window
      winchstr                window
      winnstr                 window
      winnwstr                window
      wins_nwstr              window
      wins_wch                window
      wins_wstr               window
      winsch                  window
      winsdelln               window
      winsertln               window
      winsnstr                window
      winsstr                 window
      winstr                  window
      winwstr                 window
      wmouse_trafo            window
      wmove                   window
      wnoutrefresh            screen
      wprintw                 window
      wredrawln               window

      wrefresh                screen
      wresize                 window locks(windowlist)
      wscanw                  screen
      wscrl                   window
      wsetscrreg              window
      wstandend               window
      wstandout               window
      wsyncdown               screen (affects window plus parents)
      wsyncup                 screen (affects window plus parents)
      wtimeout                window
      wtouchln                window
      wunctrl                 global (static data)
      wvline                  window
      wvline_set              window


RETURN VALUE

       These functions all return TRUE or FALSE, except as noted.


NOTES

       Both a macro and a function are provided for each name.


PORTABILITY

       These  routines  are  specific  to ncurses.  They were not
       supported on Version 7, BSD or System  V  implementations.
       It  is  recommended that any code depending on ncurses ex-
       tensions be conditioned using NCURSES_VERSION.


SEE ALSO

       curses(3x), curs_opaque(3x), curs_variables(3x).



                                                       curs_threads(3x)
ncurses-6.0-20160213/doc/html/man/term.5.html0000644000175100001440000003622612653207012016747 0ustar tomusers term 5

term 5

term(5)                                                         term(5)




NAME

       term - format of compiled term file.


SYNOPSIS

       term


DESCRIPTION


STORAGE LOCATION

       Compiled terminfo descriptions are placed under the direc-
       tory /usr/share/terminfo.   Two  configurations  are  sup-
       ported (when building the ncurses libraries):

       directory tree
            A  two-level  scheme is used to avoid a linear search
            of a  huge  UNIX  system  directory:  /usr/share/ter-
            minfo/c/name  where name is the name of the terminal,
            and c is the first character of name.  Thus, act4 can
            be  found  in  the  file  /usr/share/terminfo/a/act4.
            Synonyms for the same  terminal  are  implemented  by
            multiple links to the same compiled file.

       hashed database
            Using  Berkeley  database,  two  types of records are
            stored: the terminfo  data  in  the  same  format  as
            stored  in  a directory tree with the terminfo's pri-
            mary name as  a  key,  and  records  containing  only
            aliases pointing to the primary name.

            If built to write hashed databases, ncurses can still
            read terminfo  databases  organized  as  a  directory
            tree,  but  cannot  write  entries into the directory
            tree.  It can  write  (or  rewrite)  entries  in  the
            hashed database.

            ncurses  distinguishes  the two cases in the TERMINFO
            and TERMINFO_DIRS environment variable by assuming  a
            directory  tree  for  entries  that  correspond to an
            existing directory, and hashed database otherwise.


STORAGE FORMAT

       The format has been chosen so that it will be the same  on
       all  hardware.   An  8 or more bit byte is assumed, but no
       assumptions about byte  ordering  or  sign  extension  are
       made.

       The  compiled  file  is  created with the tic program, and
       read by the routine setupterm.  The file is  divided  into
       six parts: the header, terminal names, boolean flags, num-
       bers, strings, and string table.

       The header section begins the file.  This section contains
       six  short  integers in the format described below.  These
       integers are

            (1) the magic number (octal 0432);

            (2) the size, in bytes, of the names section;

            (3) the number of bytes in the boolean section;

            (4) the number of short integers in the numbers  sec-
            tion;

            (5)  the  number  of  offsets (short integers) in the
            strings section;

            (6) the size, in bytes, of the string table.

       Short integers are stored in two 8-bit bytes.   The  first
       byte  contains  the least significant 8 bits of the value,
       and the second byte contains the most significant 8  bits.
       (Thus,  the  value  represented is 256*second+first.)  The
       value -1 is represented by the two bytes 0377, 0377; other
       negative  values  are  illegal. This value generally means
       that the corresponding capability  is  missing  from  this
       terminal.   Note that this format corresponds to the hard-
       ware  of  the  VAX  and  PDP-11  (that  is,  little-endian
       machines).  Machines where this does not correspond to the
       hardware must read the integers as two bytes  and  compute
       the little-endian value.

       The  terminal  names  section comes next.  It contains the
       first line of the terminfo description, listing the  vari-
       ous  names  for the terminal, separated by the `|' charac-
       ter.  The section is terminated with an ASCII NUL  charac-
       ter.

       The  boolean flags have one byte for each flag.  This byte
       is either 0 or 1 as the flag is present  or  absent.   The
       capabilities are in the same order as the file <term.h>.

       Between the boolean section and the number section, a null
       byte will be inserted, if necessary, to  ensure  that  the
       number  section begins on an even byte (this is a relic of
       the  PDP-11's  word-addressed   architecture,   originally
       designed  in  to  avoid  IOT traps induced by addressing a
       word on an odd byte boundary).   All  short  integers  are
       aligned on a short word boundary.

       The numbers section is similar to the flags section.  Each
       capability takes up two bytes, and is stored as a  little-
       endian short integer.  If the value represented is -1, the
       capability is taken to be missing.

       The strings section is also similar.  Each  capability  is
       stored  as  a short integer, in the format above.  A value
       of -1 means the capability  is  missing.   Otherwise,  the
       value  is  taken  as  an  offset from the beginning of the
       string table.  Special characters in ^X or \c notation are
       stored  in their interpreted form, not the printing repre-
       sentation.  Padding information $<nn> and parameter infor-
       mation %x are stored intact in uninterpreted form.

       The  final  section  is the string table.  It contains all
       the values of string capabilities referenced in the string
       section.  Each string is null terminated.


EXTENDED STORAGE FORMAT

       The  previous  section describes the conventional terminfo
       binary format.  With some minor variations of the  offsets
       (see  PORTABILITY),  the same binary format is used in all
       modern UNIX systems.  Each system uses a predefined set of
       boolean, number or string capabilities.

       The  ncurses  libraries  and applications support extended
       terminfo binary format, allowing users to define capabili-
       ties  which are loaded at runtime.  This extension is made
       possible by using the fact that the other  implementations
       stop  reading the terminfo data when they have reached the
       end of the size given in the header.  ncurses  checks  the
       size,  and  if it exceeds that due to the predefined data,
       continues to parse according to its own scheme.

       First, it reads the extended header (5 short integers):

            (1)  count of extended boolean capabilities

            (2)  count of extended numeric capabilities

            (3)  count of extended string capabilities

            (4)  size of the extended string table in bytes.

            (5)  last offset of  the  extended  string  table  in
                 bytes.

       Using  the  counts and sizes, ncurses allocates arrays and
       reads data for the extended capabilities in the same order
       as the header information.

       The extended string table contains values for string capa-
       bilities.  After the end of these values, it contains  the
       names  for  each  of  the  extended capabilities in order,
       e.g., booleans, then numbers and finally strings.


PORTABILITY

       Note that it is possible for setupterm to expect a differ-
       ent  set  of capabilities than are actually present in the
       file.  Either the database may  have  been  updated  since
       setupterm has been recompiled (resulting in extra unrecog-
       nized entries in the file) or the program  may  have  been
       recompiled  more  recently  than  the database was updated
       (resulting in missing  entries).   The  routine  setupterm
       must  be prepared for both possibilities - this is why the
       numbers and sizes are included.   Also,  new  capabilities
       must  always  be added at the end of the lists of boolean,
       number, and string capabilities.

       Despite the consistent use of  little-endian  for  numbers
       and  the  otherwise self-describing format, it is not wise
       to count on portability of binary terminfo entries between
       commercial  UNIX  versions.  The problem is that there are
       at least three versions of terminfo (under HP-UX, AIX, and
       OSF/1)  which  diverged from System V terminfo after SVr1,
       and have added extension capabilities to the string  table
       that  (in the binary format) collide with System V and XSI
       Curses extensions.  See terminfo(5) for  detailed  discus-
       sion of terminfo source compatibility issues.


EXAMPLE

       As  an  example, here is a hex dump of the description for
       the Lear-Siegler ADM-3, a  popular  though  rather  stupid
       early terminal:

       adm3a|lsi adm3a,
               am,
               cols#80, lines#24,
               bel=^G, clear= 32$<1>, cr=^M, cub1=^H, cud1=^J,
               cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
               home=^^, ind=^J,

       0000  1a 01 10 00 02 00 03 00  82 00 31 00 61 64 6d 33  ........ ..1.adm3
       0010  61 7c 6c 73 69 20 61 64  6d 33 61 00 00 01 50 00  a|lsi ad m3a...P.
       0020  ff ff 18 00 ff ff 00 00  02 00 ff ff ff ff 04 00  ........ ........
       0030  ff ff ff ff ff ff ff ff  0a 00 25 00 27 00 ff ff  ........ ..%.'...
       0040  29 00 ff ff ff ff 2b 00  ff ff 2d 00 ff ff ff ff  ).....+. ..-.....
       0050  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       0060  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       0070  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       0080  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       0090  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       00a0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       00b0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       00c0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       00d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       00e0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       00f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       0100  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       0110  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  ........ ........
       0120  ff ff ff ff ff ff 2f 00  07 00 0d 00 1a 24 3c 31  ....../. .....$<1
       0130  3e 00 1b 3d 25 70 31 25  7b 33 32 7d 25 2b 25 63  >..=%p1% {32}%+%c
       0140  25 70 32 25 7b 33 32 7d  25 2b 25 63 00 0a 00 1e  %p2%{32} %+%c....
       0150  00 08 00 0c 00 0b 00 0a  00                       ........ .



LIMITS

       Some  limitations:  total  compiled  entries cannot exceed
       4096 bytes.  The name field cannot exceed 128 bytes.


FILES

       /usr/share/terminfo/*/*  compiled terminal capability data
       base


SEE ALSO

       curses(3x), terminfo(5).


AUTHORS

       Thomas E. Dickey
       extended terminfo format for ncurses 5.0
       hashed database support for ncurses 5.6

       Eric S. Raymond



                                                                term(5)
ncurses-6.0-20160213/doc/html/man/curs_inch.3x.html0000644000175100001440000001347112653207004020141 0ustar tomusers curs_inch 3x

curs_inch 3x

curs_inch(3x)                                             curs_inch(3x)




NAME

       inch,  winch,  mvinch,  mvwinch  -  get  a  character  and
       attributes from a curses window


SYNOPSIS

       #include <curses.h>

       chtype inch(void);
       chtype winch(WINDOW *win);
       chtype mvinch(int y, int x);
       chtype mvwinch(WINDOW *win, int y, int x);


DESCRIPTION

       These routines return the character, of  type  chtype,  at
       the   current  position  in  the  named  window.   If  any
       attributes are set for that  position,  their  values  are
       OR'ed  into  the  value  returned.   Constants  defined in
       <curses.h> can be used with the & (logical  AND)  operator
       to extract the character or attributes alone.


Attributes

       The  following  bit-masks  may  be  AND-ed with characters
       returned by winch.

       A_CHARTEXT     Bit-mask to extract character
       A_ATTRIBUTES   Bit-mask to extract attributes
       A_COLOR        Bit-mask to extract color-pair field information


RETURN VALUE

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


NOTES

       Note that all of these routines may be macros.


PORTABILITY

       These functions are described in the XSI Curses  standard,
       Issue 4.


SEE ALSO

       curses(3x).

       Comparable  functions  in  the  wide-character  (ncursesw)
       library are described in curs_in_wch(3x).



                                                          curs_inch(3x)
ncurses-6.0-20160213/doc/html/man/form_field_info.3x.html0000644000175100001440000001362012653207007021304 0ustar tomusers form_field_info 3x

form_field_info 3x

form_field_info(3x)                                 form_field_info(3x)




NAME

       dynamic_field_info, field_info - retrieve field character-
       istics


SYNOPSIS

       #include <form.h>
       int field_info(const FIELD *field, int *rows, int *cols,
                     int *frow, int *fcol, int *nrow, int *nbuf);
       int dynamic_field_info(const FIELD *field, int *rows,  int
       *cols, int *max);


DESCRIPTION

       The  function  field_info  returns  the  sizes  and  other
       attributes passed in to the field at  its  creation  time.
       The  attributes are: height, width, row of upper-left cor-
       ner, column of upper-left corner, number off-screen  rows,
       and number of working buffers.

       The function dynamic_field_info returns the actual size of
       the field, and its maximum possible size.   If  the  field
       has  no  size  limit,  the location addressed by the third
       argument will be set to 0.  A field can be made dynamic by
       turning off the O_STATIC option with field_opts_off.


RETURN VALUE

       These routines return one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.


SEE ALSO

       curses(3x) and related pages whose names begin "form_" for
       detailed descriptions of the entry points.


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.

       A  null  (zero  pointer) is accepted for any of the return
       values, to ignore that  value.   Not  all  implementations
       allow this, e.g., Solaris 2.7 does not.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                    form_field_info(3x)
ncurses-6.0-20160213/doc/html/man/curs_in_wch.3x.html0000644000175100001440000001323112653207004020461 0ustar tomusers curs_in_wch 3x

curs_in_wch 3x

curs_in_wch(3x)                                         curs_in_wch(3x)




NAME

       in_wch,  mvin_wch,  mvwin_wch, win_wch - extract a complex
       character and rendition from a window


SYNOPSIS

       #include <curses.h>

       int in_wch(cchar_t *wcval);
       int mvin_wch(int y, int x, cchar_t *wcval);
       int mvwin_wch(WINDOW *win, int y, int x, cchar_t *wcval);
       int win_wch(WINDOW *win, cchar_t *wcval);


DESCRIPTION

       These functions extract the complex character  and  rendi-
       tion  from  the  current position in the named window into
       the cchar_t object referenced by wcval.


RETURN VALUE

       No errors are defined in the XSI  Curses  standard.   This
       implementation  checks  for  null pointers, returns ERR in
       that case.  Also, the mv routines check for  error  moving
       the  cursor,  returning  ERR in that case.  Otherwise they
       return OK

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


NOTES

       Note that all of these routines may be macros.


PORTABILITY

       These functions are described in the XSI Curses  standard,
       Issue 4.


SEE ALSO

       curses(3x), curs_inch(3x).



                                                        curs_in_wch(3x)
ncurses-6.0-20160213/doc/html/man/mitem_current.3x.html0000644000175100001440000001506112653207011021034 0ustar tomusers mitem_current 3x

mitem_current 3x

mitem_current(3x)                                     mitem_current(3x)




NAME

       mitem_current - set and get current_menu_item


SYNOPSIS

       #include <menu.h>
       int set_current_item(MENU *menu, const ITEM *item);
       ITEM *current_item(const MENU *menu);
       int set_top_row(MENU *menu, int row);
       int top_row(const MENU *menu);
       int item_index(const ITEM *item);


DESCRIPTION

       The  function  set_current_item sets the current item (the
       item on  which  the  menu  cursor  is  positioned).   cur-
       rent_item  returns  a  pointer  to the current item in the
       given menu.

       The function set_top_row sets the top row of the  menu  to
       show  the  given  row  (the top row is initially 0, and is
       reset to this value whenever the O_ROWMAJOR option is tog-
       gled).   The  item  leftmost on the given row becomes cur-
       rent.  The function top_row returns the number of the  top
       menu row being displayed.

       The function item_index returns the (zero-origin) index of
       item in the menu's item pointer list.


RETURN VALUE

       current_item returns a pointer (which may  be  NULL).   It
       does not set errno.

       top_row  and  item_index  return  ERR  (the general curses
       error value) if their menu parameter is NULL.

       set_current_item and set_top_row return one of the follow-
       ing:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_BAD_STATE
            Routine was called from an initialization or termina-
            tion function.

       E_NOT_CONNECTED
            No items are connected to the menu.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V  menu  library.   They
       were not supported on Version 7 or BSD versions.

       The  SVr4 menu library documentation specifies the top_row
       and index_item error value as -1 (which is  the  value  of
       ERR).


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                      mitem_current(3x)
ncurses-6.0-20160213/doc/html/man/ncurses5-config.1.html0000644000175100001440000001276312530211624021004 0ustar tomusers ncurses5-config 1

ncurses5-config 1

ncurses5-config(1)                                   ncurses5-config(1)




NAME

       ncurses5-config - helper script for ncurses libraries


SYNOPSIS

       ncurses5-config [options]


DESCRIPTION

       This is a shell script which simplifies configuring appli-
       cations against a particular set of ncurses libraries.


OPTIONS

       --prefix
              echos the package-prefix of ncurses

       --exec-prefix
              echos the executable-prefix of ncurses

       --cflags
              echos the C compiler flags needed to  compile  with
              ncurses

       --libs echos the libraries needed to link with ncurses

       --version
              echos the release+patchdate version of ncurses

       --abi-version
              echos the ABI version of ncurses

       --mouse-version
              echos the mouse-interface version of ncurses

       --bindir
              echos the directory containing ncurses programs

       --datadir
              echos the directory containing ncurses data

       --includedir
              echos the directory containing ncurses header files

       --libdir
              echos the directory containing ncurses libraries

       --mandir
              echos the directory containing ncurses manpages

       --terminfo
              echos the $TERMINFO terminfo database path, e.g.,
              /usr/share/terminfo

       --terminfo-dirs
              echos the $TERMINFO_DIRS directory list, e.g.,
              /usr/local/ncurses/share/terminfo:/usr/share/ter-
              minfo

       --termpath
              echos the $TERMPATH termcap list,  if  support  for
              termcap is configured.

       --help prints this message


SEE ALSO

       curses(3x)

       This describes ncurses version 5.9 (patch 20150523).



                                                     ncurses5-config(1)
ncurses-6.0-20160213/doc/html/man/term.7.html0000644000175100001440000003037212653207012016745 0ustar tomusers term 7

term 7

term(7)                                                         term(7)




NAME

       term - conventions for naming terminal types


DESCRIPTION

       The  environment variable TERM should normally contain the
       type name of the terminal, console or display-device  type
       you  are  using.   This  information  is  critical for all
       screen-oriented  programs,  including  your   editor   and
       mailer.

       A  default  TERM  value will be set on a per-line basis by
       either  /etc/inittab  (e.g.,  System-V-like   UNIXes)   or
       /etc/ttys  (BSD  UNIXes).  This will nearly always suffice
       for workstation and microcomputer consoles.

       If you use a dialup line, the type of device  attached  to
       it  may vary.  Older UNIX systems pre-set a very dumb ter-
       minal type like `dumb' or `dialup' on dialup lines.  Newer
       ones may pre-set `vt100', reflecting the prevalence of DEC
       VT100-compatible terminals  and  personal-computer  emula-
       tors.

       Modern  telnets  pass  your TERM environment variable from
       the local side to the remote one.  There can  be  problems
       if  the  remote terminfo or termcap entry for your type is
       not compatible with yours, but this situation is rare  and
       can  almost  always  be  avoided  by  explicitly exporting
       `vt100' (assuming you are in fact using  a  VT100-superset
       console, terminal, or terminal emulator.)

       In any case, you are free to override the system TERM set-
       ting to your taste in your  shell  profile.   The  tset(1)
       utility  may  be  of  assistance; you can give it a set of
       rules for deducing or requesting a terminal type based  on
       the tty device and baud rate.

       Setting your own TERM value may also be useful if you have
       created a custom entry incorporating options (such as vis-
       ual  bell or reverse-video) which you wish to override the
       system default type for your line.

       Terminal type descriptions are stored as files of capabil-
       ity data underneath /usr/share/terminfo.  To browse a list
       of all terminal names recognized by the system, do

            toe | more

       from your shell.  These capability files are in  a  binary
       format optimized for retrieval speed (unlike the old text-
       based termcap format they replace); to examine  an  entry,
       you  must  use the infocmp(1m) command.  Invoke it as fol-
       lows:

            infocmp entry_name

       where entry_name is the name of the type you wish to exam-
       ine  (and the name of its capability file the subdirectory
       of /usr/share/terminfo named for its first letter).   This
       command  dumps  a  capability  file  in  the  text  format
       described by terminfo(5).

       The first line of  a  terminfo(5)  description  gives  the
       names by which terminfo knows a terminal, separated by `|'
       (pipe-bar) characters with the last name field  terminated
       by  a  comma.   The first name field is the type's primary
       name, and is the one to use when setting TERM.   The  last
       name  field  (if  distinct  from  the first) is actually a
       description of the terminal type (it may  contain  blanks;
       the others must be single words).  Name fields between the
       first and last (if present) are aliases for the  terminal,
       usually historical names retained for compatibility.

       There are some conventions for how to choose terminal pri-
       mary names that help keep  them  informative  and  unique.
       Here is a step-by-step guide to naming terminals that also
       explains how to parse them:

       First, choose a root name.  The root  will  consist  of  a
       lower-case  letter followed by up to seven lower-case let-
       ters or digits.  You need to avoid using punctuation char-
       acters  in  root  names,  because they are used and inter-
       preted as filenames and shell meta-characters (such as  !,
       $,  *, ?, etc.) embedded in them may cause odd and unhelp-
       ful behavior.  The slash (/), or any other character  that
       may  be  interpreted by anyone's file system (\, $, [, ]),
       is especially dangerous (terminfo is platform-independent,
       and  choosing  names with special characters could someday
       make life difficult for users of a future port).  The  dot
       (.)  character  is  relatively safe as long as there is at
       most one per root name; some historical terminfo names use
       it.

       The  root  name for a terminal or workstation console type
       should almost always begin with a vendor prefix  (such  as
       hp  for Hewlett-Packard, wy for Wyse, or att for AT&T ter-
       minals), or a common name of the terminal line (vt for the
       VT  series of terminals from DEC, or sun for Sun Microsys-
       tems workstation consoles, or regent for the  ADDS  Regent
       series.   You  can list the terminfo tree to see what pre-
       fixes are already in common use.   The  root  name  prefix
       should  be  followed  when  appropriate by a model number;
       thus vt100, hp2621, wy50.

       The root name for a PC-Unix console type should be the  OS
       name,  i.e., linux, bsdos, freebsd, netbsd.  It should not
       be console or any other generic that might cause confusion
       in  a  multi-platform environment!  If a model number fol-
       lows, it should indicate either the OS  release  level  or
       the console driver release level.

       The  root  name  for a terminal emulator (assuming it does
       not fit one of the standard ANSI or vt100 types) should be
       the program name or a readily recognizable abbreviation of
       it (i.e., versaterm, ctrm).

       Following the root name, you may add any reasonable number
       of hyphen-separated feature suffixes.

       2p   Has two pages of memory.  Likewise 4p, 8p, etc.

       mc   Magic-cookie.   Some  terminals (notably older Wyses)
            can only support one attribute  without  magic-cookie
            lossage.   Their  base  entry  is usually paired with
            another that has this suffix and uses  magic  cookies
            to support multiple attributes.

       -am  Enable auto-margin (right-margin wraparound).

       -m   Mono mode - suppress color support.

       -na  No  arrow keys - termcap ignores arrow keys which are
            actually there on the terminal, so the user  can  use
            the arrow keys locally.

       -nam No auto-margin - suppress am capability.

       -nl  No labels - suppress soft labels.

       -nsl No status line - suppress status line.

       -pp  Has a printer port which is used.

       -rv  Terminal in reverse video mode (black on white).

       -s   Enable status line.

       -vb  Use visible bell (flash) rather than beep.

       -w   Wide; terminal is in 132 column mode.

       Conventionally,   if  your  terminal  type  is  a  variant
       intended to specify a line height, that suffix  should  go
       first.  So, for a hypothetical FuBarCo model 2317 terminal
       in 30-line mode with reverse video,  best  form  would  be
       fubar-30-rv (rather than, say, `fubar-rv-30').

       Terminal types that are written not as standalone entries,
       but rather as components to be plugged into other  entries
       via  use capabilities, are distinguished by using embedded
       plus signs rather than dashes.

       Commands which use a  terminal  type  to  control  display
       often  accept  a  -T  option  that accepts a terminal name
       argument.  Such programs should  fall  back  on  the  TERM
       environment variable when no -T option is specified.


PORTABILITY

       For  maximum  compatibility  with  older  System V UNIXes,
       names and aliases should be unique  within  the  first  14
       characters.


FILES

       /usr/share/terminfo/?/*
            compiled terminal capability data base

       /etc/inittab
            tty line initialization (AT&T-like UNIXes)

       /etc/ttys
            tty line initialization (BSD-like UNIXes)


SEE ALSO

       curses(3x), terminfo(5), term(5).



                                                                term(7)
ncurses-6.0-20160213/doc/html/man/menu_items.3x.html0000644000175100001440000001403112653207011020320 0ustar tomusers menu_items 3x

menu_items 3x

menu_items(3x)                                           menu_items(3x)




NAME

       set_menu_items,  menu_items,  item_count  - make and break
       connections between items and menus


SYNOPSIS

       #include <menu.h>
       int set_menu_items(MENU *menu, ITEM **items);
       ITEM **menu_items(const MENU *menu);
       int item_count(const MENU *menu);


DESCRIPTION

       The function set_menu_items changes the item pointer array
       of  the  given  menu.   The  array must be terminated by a
       NULL.

       The function menu_items returns  the  item  array  of  the
       given menu.

       The  function  item_count  returns  the  count of items in
       menu.


RETURN VALUE

       The function menu_items returns a pointer  (which  may  be
       NULL).  It does not set errno.

       The  function  item_count  returns ERR (the general curses
       error return value) if its menu parameter is NULL.

       The function set_menu_items returns one of  the  following
       codes on error:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_NOT_CONNECTED
            No items are connected to the menu.

       E_POSTED
            The menu is already posted.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions.

       The  SVr4  menu  library   documentation   specifies   the
       item_count error value as -1 (which is the value of ERR).


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                         menu_items(3x)
ncurses-6.0-20160213/doc/html/man/curs_addwstr.3x.html0000644000175100001440000001742012653207003020665 0ustar tomusers curs_addwstr 3x

curs_addwstr 3x

curs_addwstr(3x)                                       curs_addwstr(3x)




NAME

       addwstr, addnwstr, waddwstr, waddnwstr, mvaddwstr,
       mvaddnwstr, mvwaddwstr, mvwaddnwstr - add a string of wide
       characters to a curses window and advance cursor


SYNOPSIS

       #include <curses.h>

       int addwstr(const wchar_t *wstr);
       int addnwstr(const wchar_t *wstr, int n);
       int waddwstr(WINDOW *win, const wchar_t *wstr);
       int waddnwstr(WINDOW *win, const wchar_t *wstr, int n);
       int mvaddwstr(int y, int x, const wchar_t *wstr);
       int mvaddnwstr(int y, int x, const wchar_t *wstr, int n);
       int mvwaddwstr(WINDOW *win, int y, int x, const wchar_t *wstr);
       int mvwaddnwstr(WINDOW *win, int y, int x, const wchar_t *wstr, int n);


DESCRIPTION

       These  functions  write the characters of the (null-termi-
       nated) wchar_t character string wstr on the given  window.
       It  is  similar to constructing a cchar_t for each wchar_t
       in the string, then calling  wadd_wch  for  the  resulting
       cchar_t.

       The  mv  functions  perform  cursor  movement once, before
       writing any characters.  Thereafter,  the  cursor  is  ad-
       vanced as a side-effect of writing to the window.

       The  four  functions  with n as the last argument write at
       most n wchar_t characters, or until a terminating null  is
       reached.   If  n  is  -1,  then  the entire string will be
       added.


RETURN VALUE

       All functions return the integer ERR upon failure  and  OK
       on success.

       X/Open  does not define any error conditions.  This imple-
       mentation returns an error

       o   if the window pointer is null or

       o   if the string pointer is null or

       o   if the corresponding calls to wadd_wch return  an  er-
           ror.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


NOTES

       All of these functions except waddnwstr may be macros.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4.


SEE ALSO

       curses(3x), curs_add_wch(3x)



                                                       curs_addwstr(3x)
ncurses-6.0-20160213/doc/html/man/curs_color.3x.html0000644000175100001440000005317112653207003020336 0ustar tomusers curs_color 3x

curs_color 3x

curs_color(3x)                                           curs_color(3x)




NAME

       start_color, init_pair, init_color, has_colors,
       can_change_color, color_content, pair_content, COLOR_PAIR
       - curses color manipulation routines


SYNOPSIS

       # include <curses.h>

       int start_color(void);
       int init_pair(short pair, short f, short b);
       int init_color(short color, short r, short g, short b);
       bool has_colors(void);
       bool can_change_color(void);
       int  color_content(short  color, short *r, short *g, short
       *b);
       int pair_content(short pair, short *f, short *b);
       int COLOR_PAIR(int n);


DESCRIPTION


Overview

       curses supports color attributes on  terminals  with  that
       capability.   To  use  these  routines start_color must be
       called, usually right after initscr.   Colors  are  always
       used  in pairs (referred to as color-pairs).  A color-pair
       consists of a foreground  color  (for  characters)  and  a
       background color (for the blank field on which the charac-
       ters are displayed).  A programmer  initializes  a  color-
       pair  with  the routine init_pair.  After it has been ini-
       tialized, COLOR_PAIR(n), a macro  defined  in  <curses.h>,
       can be used as a new video attribute.

       If  a  terminal  is capable of redefining colors, the pro-
       grammer can use the routine init_color to change the defi-
       nition   of   a   color.    The  routines  has_colors  and
       can_change_color  return  TRUE  or  FALSE,  depending   on
       whether  the  terminal  has color capabilities and whether
       the programmer can change the colors.   The  routine  col-
       or_content  allows  a programmer to extract the amounts of
       red, green, and blue components in an  initialized  color.
       The  routine  pair_content allows a programmer to find out
       how a given color-pair is currently defined.


Color Rendering

       The curses library combines these inputs  to  produce  the
       actual  foreground  and  background  colors  shown  on the
       screen:

       o   per-character video attributes (e.g., via waddch),

       o   the window attribute (e.g., by wattrset), and

       o   the background character (e.g., wbkgdset).

       Per-character and window attributes are usually set  by  a
       parameter  containing  video  attributes  including a COL-
       OR_PAIR value.  Some functions such  as  wattr_set  use  a
       separate parameter which is the color pair number.

       The  background character is a special case: it includes a
       character value, just as if it were passed to waddch.

       The curses library does the actual work of combining these
       color pairs in an internal function called from waddch:

       o   If the parameter passed to waddch is blank, and it us-
           es the special color pair 0,

           o   curses next checks the window attribute.

           o   If the window attribute does not use color pair 0,
               curses  uses  the  color  pair from the window at-
               tribute.

           o   Otherwise, curses uses the background character.

       o   If the parameter passed to waddch is not blank, or  it
           does  not use the special color pair 0, curses prefers
           the color pair from the parameter, if it  is  nonzero.
           Otherwise, it tries the window attribute next, and fi-
           nally the background character.

       Some curses functions such as wprintw call waddch.   Those
       do  not  combine  its parameter with a color pair.  Conse-
       quently those calls use only the window attribute  or  the
       background character.


Routine Descriptions

       The start_color routine requires no arguments.  It must be
       called if the programmer wants to use colors,  and  before
       any  other  color  manipulation  routine is called.  It is
       good practice to call this routine  right  after  initscr.
       start_color does this:

       o   It  initializes  two global variables, COLORS and COL-
           OR_PAIRS (respectively defining the maximum number  of
           colors and color-pairs the terminal can support).

       o   It initializes the special color pair 0 to the default
           foreground and  background  colors.   No  other  color
           pairs are initialized.

       o   It  restores  the colors on the terminal to the values
           they had when the terminal was just turned on.

       o   If the terminal supports the initc  (initialize_color)
           capability, start_color initializes its internal table
           representing the red, green and blue components of the
           color palette.

           The components depend on whether the terminal uses CGA
           (aka "ANSI") or HLS (i.e., the hls (hue_lightness_sat-
           uration) capability is set).  The table is initialized
           first for eight basic colors (black, red, green,  yel-
           low,  blue,  magenta, cyan, and white), and after that
           (if the terminal supports more than eight colors)  the
           components are initialized to 1000.

           start_color  does  not  attempt  to set the terminal's
           color palette to match its built-in table.  An  appli-
           cation  may use init_color to alter the internal table
           along with the terminal's color.

       These limits apply to color values and color pairs.   Val-
       ues  outside these limits are not legal, and may result in
       a runtime error:

       o   COLORS corresponds to the terminal database's max_col-
           ors capability, which is typically a signed 16-bit in-
           teger (see terminfo(5)).

       o   color values are expected to be in the range 0 to COL-
           ORS-1, inclusive (including 0 and COLORS-1).

       o   a  special  color value -1 is used in certain extended
           functions to denote the  default  color  (see  use_de-
           fault_colors).

       o   COLOR_PAIRS  corresponds  to  the  terminal database's
           max_pairs capability,  which  is  typically  a  signed
           16-bit integer (see terminfo(5)).

       o   legal  color  pair  values  are in the range 1 to COL-
           OR_PAIRS-1, inclusive.

       o   color pair 0 is special; it denotes "no color".

           Color pair 0 is assumed to be white on black,  but  is
           actually whatever the terminal implements before color
           is initialized.  It cannot be modified by the applica-
           tion.

       The  init_pair  routine changes the definition of a color-
       pair.  It takes three arguments: the number of the  color-
       pair  to  be changed, the foreground color number, and the
       background color number.  For portable applications:

       o   The first argument must be a legal color  pair  value.
           If  default  colors  are used (see use_default_colors)
           the upper limit is adjusted to allow for  extra  pairs
           which  use  a default color in foreground and/or back-
           ground.

       o   The second and third arguments  must  be  legal  color
           values.

       If  the  color-pair was previously initialized, the screen
       is refreshed and all occurrences of  that  color-pair  are
       changed to the new definition.

       As  an  extension,  ncurses allows you to set color pair 0
       via the assume_default_colors routine, or to  specify  the
       use  of  default colors (color number -1) if you first in-
       voke the use_default_colors routine.

       The init_color routine changes the definition of a  color.
       It  takes  four  arguments:  the number of the color to be
       changed followed by three RGB values (for the  amounts  of
       red, green, and blue components).  The first argument must
       be a legal color value; default  colors  are  not  allowed
       here.   (See  the section Colors for the default color in-
       dex.)  Each of the last three arguments must be a value in
       the  range  0  through 1000.  When init_color is used, all
       occurrences of that color on the screen immediately change
       to the new definition.

       The  has_colors routine requires no arguments.  It returns
       TRUE if the terminal can manipulate colors; otherwise,  it
       returns FALSE.  This routine facilitates writing terminal-
       independent programs.  For example, a programmer  can  use
       it  to decide whether to use color or some other video at-
       tribute.

       The can_change_color routine requires  no  arguments.   It
       returns  TRUE  if  the  terminal  supports  colors and can
       change their definitions; other, it returns  FALSE.   This
       routine facilitates writing terminal-independent programs.

       The  color_content routine gives programmers a way to find
       the intensity of the red, green, and blue (RGB) components
       in a color.  It requires four arguments: the color number,
       and three addresses of shorts for storing the  information
       about  the  amounts  of red, green, and blue components in
       the given color.  The first argument must be a legal color
       value,  i.e.,  0  through COLORS-1, inclusive.  The values
       that are stored at the addresses pointed to  by  the  last
       three  arguments are in the range 0 (no component) through
       1000 (maximum amount of component), inclusive.

       The pair_content routine allows programmers  to  find  out
       what  colors  a given color-pair consists of.  It requires
       three arguments: the color-pair number, and two  addresses
       of  shorts  for  storing the foreground and the background
       color numbers.  The first argument must be a  legal  color
       value,  i.e., in the range 1 through COLOR_PAIRS-1, inclu-
       sive.  The values that are stored at the addresses pointed
       to  by  the  second and third arguments are in the range 0
       through COLORS, inclusive.


Colors

       In <curses.h> the following macros are defined.  These are
       the  standard colors (ISO-6429).  curses also assumes that
       COLOR_BLACK is the default background color for all termi-
       nals.

             COLOR_BLACK
             COLOR_RED
             COLOR_GREEN
             COLOR_YELLOW
             COLOR_BLUE
             COLOR_MAGENTA
             COLOR_CYAN
             COLOR_WHITE


RETURN VALUE

       The  routines  can_change_color()  and has_colors() return
       TRUE or FALSE.

       All other routines return the integer ERR upon failure and
       an  OK  (SVr4  specifies only "an integer value other than
       ERR") upon successful completion.

       X/Open defines no error conditions.   This  implementation
       will  return  ERR  on attempts to use color values outside
       the range 0 to COLORS-1 (except for the default colors ex-
       tension),  or  use color pairs outside the range 0 to COL-
       OR_PAIRS-1.  Color values used in init_color  must  be  in
       the  range 0 to 1000.  An error is returned from all func-
       tions if the terminal has not been initialized.  An  error
       is  returned from secondary functions such as init_pair if
       start_color was not called.

          init_color
               returns an error if the terminal does not  support
               this  feature, e.g., if the initialize_color capa-
               bility is absent from the terminal description.

          start_color
               returns an error if the color table cannot be  al-
               located.


NOTES

       In  the  ncurses implementation, there is a separate color
       activation flag, color palette, color pairs table, and as-
       sociated  COLORS  and  COLOR_PAIRS counts for each screen;
       the start_color function only affects the current  screen.
       The SVr4/XSI interface is not really designed with this in
       mind, and historical  implementations  may  use  a  single
       shared color palette.

       Note that setting an implicit background color via a color
       pair affects only character cells that a  character  write
       operation  explicitly  touches.   To change the background
       color used when parts of a window are blanked  by  erasing
       or scrolling operations, see curs_bkgd(3x).

       Several  caveats  apply  on 386 and 486 machines with VGA-
       compatible graphics:

       o   COLOR_YELLOW is actually brown.  To  get  yellow,  use
           COLOR_YELLOW combined with the A_BOLD attribute.

       o   The A_BLINK attribute should in theory cause the back-
           ground to go bright.  This often fails  to  work,  and
           even some cards for which it mostly works (such as the
           Paradise and compatibles) do the wrong thing when  you
           try  to  set  a  bright "yellow" background (you get a
           blinking yellow foreground instead).

       o   Color RGB values are not settable.


PORTABILITY

       This implementation satisfies XSI Curses's  minimum  maxi-
       mums for COLORS and COLOR_PAIRS.

       The  init_pair  routine  accepts  negative values of fore-
       ground  and  background  color  to  support  the   use_de-
       fault_colors  extension, but only if that routine has been
       first invoked.

       The assumption that COLOR_BLACK is the default  background
       color  for  all  terminals  can  be modified using the as-
       sume_default_colors extension.

       This implementation checks the  pointers,  e.g.,  for  the
       values  returned  by  color_content  and pair_content, and
       will treat those as optional parameters when null.


SEE ALSO

       curses(3x),  curs_initscr(3x),  curs_attr(3x),  curs_vari-
       ables(3x), default_colors(3x)



                                                         curs_color(3x)
ncurses-6.0-20160213/doc/html/man/curs_refresh.3x.html0000644000175100001440000002317012653207005020654 0ustar tomusers curs_refresh 3x

curs_refresh 3x

curs_refresh(3x)                                       curs_refresh(3x)




NAME

       doupdate, redrawwin, refresh, wnoutrefresh, wredrawln,
       wrefresh - refresh curses windows and lines


SYNOPSIS

       #include <curses.h>

       int refresh(void);
       int wrefresh(WINDOW *win);
       int wnoutrefresh(WINDOW *win);
       int doupdate(void);
       int redrawwin(WINDOW *win);
       int wredrawln(WINDOW *win, int beg_line, int num_lines);


DESCRIPTION


refresh/wrefresh

       The refresh and wrefresh  routines  (or  wnoutrefresh  and
       doupdate)  must be called to get actual output to the ter-
       minal, as other routines  merely  manipulate  data  struc-
       tures.   The  routine  wrefresh copies the named window to
       the physical terminal screen, taking into account what  is
       already there to do optimizations.  The refresh routine is
       the same, using stdscr  as  the  default  window.   Unless
       leaveok  has been enabled, the physical cursor of the ter-
       minal is left at the location of the cursor for that  win-
       dow.


wnoutrefresh/doupdate

       The  wnoutrefresh and doupdate routines allow multiple up-
       dates with more efficiency than wrefresh alone.  In  addi-
       tion  to  all the window structures, curses keeps two data
       structures representing the terminal  screen:  a  physical
       screen,  describing  what is actually on the screen, and a
       virtual screen, describing what the  programmer  wants  to
       have on the screen.

       The  routine wrefresh works by first calling wnoutrefresh,
       which copies the named window to the virtual  screen,  and
       then  calling  doupdate, which compares the virtual screen
       to the physical screen and does the actual update.  If the
       programmer wishes to output several windows at once, a se-
       ries of calls to wrefresh results in alternating calls  to
       wnoutrefresh  and doupdate, causing several bursts of out-
       put to the screen.  By first calling wnoutrefresh for each
       window, it is then possible to call doupdate once, result-
       ing in only one burst of output, with fewer total  charac-
       ters transmitted and less CPU time used.  If the win argu-
       ment to wrefresh is the global variable curscr, the screen
       is immediately cleared and repainted from scratch.

       The phrase "copies the named window to the virtual screen"
       above is ambiguous.  What actually  happens  is  that  all
       touched  (changed)  lines  in the window are copied to the
       virtual screen.  This affects programs that  use  overlap-
       ping  windows;  it  means that if two windows overlap, you
       can refresh them in either order and  the  overlap  region
       will be modified only when it is explicitly changed.  (But
       see the section on PORTABILITY below for a  warning  about
       exploiting this behavior.)


wredrawln/redrawwin

       The wredrawln routine indicates to curses that some screen
       lines are corrupted and should be thrown away before  any-
       thing  is  written  over  them.   It touches the indicated
       lines (marking them  changed).   The  routine  redrawwin()
       touches the entire window.


RETURN VALUE

       Routines  that  return an integer return ERR upon failure,
       and OK (SVr4 only specifies "an integer value  other  than
       ERR") upon successful completion.

       X/Open  does not define any error conditions.  In this im-
       plementation

          wnoutrefresh
               returns an error if the window pointer is null, or
               if the window is really a pad.

          wredrawln
               returns an error if the associated call to touchln
               returns an error.


NOTES

       Note that refresh and redrawwin may be macros.


PORTABILITY

       The XSI Curses standard, Issue  4  describes  these  func-
       tions.

       Whether  wnoutrefresh()  copies  to the virtual screen the
       entire contents of a window or just its  changed  portions
       has never been well-documented in historic curses versions
       (including SVr4).  It might be unwise to  rely  on  either
       behavior  in  programs  that  might have to be linked with
       other curses implementations.  Instead, you can do an  ex-
       plicit  touchwin() before the wnoutrefresh() call to guar-
       antee an entire-contents copy anywhere.


SEE ALSO

       curses(3x), curs_outopts(3x) curs_variables(3x).



                                                       curs_refresh(3x)
ncurses-6.0-20160213/doc/html/man/curs_printw.3x.html0000644000175100001440000001664712653207005020554 0ustar tomusers curs_printw 3x

curs_printw 3x

curs_printw(3x)                                         curs_printw(3x)




NAME

       printw, wprintw, mvprintw, mvwprintw, vwprintw, vw_printw
       - print formatted output in curses windows


SYNOPSIS

       #include <curses.h>

       int printw(const char *fmt, ...);
       int wprintw(WINDOW *win, const char *fmt, ...);
       int mvprintw(int y, int x, const char *fmt, ...);
       int mvwprintw(WINDOW *win, int y, int x, const char  *fmt,
       ...);
       int  vwprintw(WINDOW  *win,  const char *fmt, va_list var-
       glist);
       int vw_printw(WINDOW *win, const char *fmt,  va_list  var-
       glist);


DESCRIPTION

       The  printw,  wprintw, mvprintw and mvwprintw routines are
       analogous to  printf  [see  printf(3)].   In  effect,  the
       string that would be output by printf is output instead as
       though waddstr were used on the given window.

       The vwprintw  and  wv_printw  routines  are  analogous  to
       vprintf  [see  printf(3)]  and  perform  a wprintw using a
       variable argument list.  The third argument is a  va_list,
       a   pointer   to  a  list  of  arguments,  as  defined  in
       <stdarg.h>.


RETURN VALUE

       Routines that return an integer return  ERR  upon  failure
       and  OK  (SVr4 only specifies "an integer value other than
       ERR") upon successful completion.

       X/Open defines no error conditions.  In  this  implementa-
       tion,  an  error  may  be  returned  if it cannot allocate
       enough memory for the buffer used to format  the  results.
       It will return an error if the window pointer is null.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


PORTABILITY

       The  XSI  Curses  standard,  Issue 4 describes these func-
       tions.  The function vwprintw is marked TO  BE  WITHDRAWN,
       and  is  to  be replaced by a function vw_printw using the
       <stdarg.h> interface.  The Single Unix Specification, Ver-
       sion  2  states  that  vw_printw  is preferred to vwprintw
       since the latter  requires  including  <varargs.h>,  which
       cannot  be  used in the same file as <stdarg.h>.  This im-
       plementation uses <stdarg.h> for both, because that header
       is included in <curses.h>.


SEE ALSO

       curses(3x), printf(3), vprintf(3)



                                                        curs_printw(3x)
ncurses-6.0-20160213/doc/html/man/tabs.1.html0000644000175100001440000002007012653207012016713 0ustar tomusers tabs 1

tabs 1

tabs(1)                                                         tabs(1)




NAME

       tabs - set tabs on a terminal


SYNOPSIS

       tabs [options]] [tabstop-list]


DESCRIPTION

       The  tabs  program clears and sets tab-stops on the termi-
       nal.  This uses the terminfo  clear_all_tabs  and  set_tab
       capabilities.   If  either  is  absent,  tabs is unable to
       clear/set tab-stops.  The terminal should be configured to
       use hard tabs, e.g.,

              stty tab0


OPTIONS


General Options

       -Tname
            Tell tabs which terminal type to use.  If this option
            is not given, tabs will  use  the  $TERM  environment
            variable.   If  that  is  not  set,  it  will use the
            ansi+tabs entry.

       -d   The debugging option shows a ruler line, followed  by
            two  data  lines.   The  first  data  line  shows the
            expected tab-stops marked with asterisks.  The second
            data  line  shows  the  actual tab-stops, marked with
            asterisks.

       -n   This option tells tabs to check the options  and  run
            any  debugging option, but not to modify the terminal
            settings.

       -V   reports the version of ncurses which was used in this
            program, and exits.

       The  tabs  program  processes  a single list of tab stops.
       The last option to be processed which defines  a  list  is
       the one that determines the list to be processed.


Implicit Lists

       Use  a  single number as an option, e.g., "-5" to set tabs
       at the given interval (in this case  1,  6,  11,  16,  21,
       etc.).   Tabs  are  repeated up to the right margin of the
       screen.

       Use "-0" to clear all tabs.

       Use "-8" to set tabs to the standard interval.


Explicit Lists

       An explicit list can be defined after  the  options  (this
       does  not  use  a "-").  The values in the list must be in
       increasing numeric order, and greater than zero.  They are
       separated by a comma or a blank, for example,

              tabs 1,6,11,16,21
              tabs 1 6 11 16 21
       Use  a  '+'  to treat a number as an increment relative to
       the previous value, e.g.,

              tabs 1,+5,+5,+5,+5

       which is equivalent to the 1,6,11,16,21 example.


Predefined Tab-Stops

       X/Open defines several predefined lists of tab stops.

       -a   Assembler, IBM S/370, first format

       -a2  Assembler, IBM S/370, second format

       -c   COBOL, normal format

       -c2  COBOL compact format

       -c3  COBOL compact format extended

       -f   FORTRAN

       -p   PL/I

       -s   SNOBOL

       -u   UNIVAC 1100 Assembler


PORTABILITY

       X/Open describes a +m option, to set  a  terminal's  left-
       margin.   Very few of the entries in the terminal database
       provide this capability.

       The -d (debug) and -n (no-op) options are  extensions  not
       provided by other implementations.

       Documentation  for other implementations states that there
       is a limit on the number of tab stops.  While some  termi-
       nals may not accept an arbitrary number of tab stops, this
       implementation will attempt to set tab  stops  up  to  the
       right  margin  of the screen, if the given list happens to
       be that long.


SEE ALSO

       tset(1), infocmp(1m), curses(3x), terminfo(5).

       This describes ncurses version 6.0 (patch 20160130).



                                                                tabs(1)
ncurses-6.0-20160213/doc/html/man/clear.1.html0000644000175100001440000001005012653207003017045 0ustar tomusers clear 1

clear 1

clear(1)                                                       clear(1)




NAME

       clear - clear the terminal screen


SYNOPSIS

       clear


DESCRIPTION

       clear  clears  your  screen if this is possible, including
       its scrollback buffer (if the extended "E3" capability  is
       defined).  clear looks in the environment for the terminal
       type and then in the terminfo database to determine how to
       clear the screen.

       clear  ignores  any  command-line  parameters  that may be
       present.


SEE ALSO

       tput(1), terminfo(5)

       This describes ncurses version 6.0 (patch 20160130).



                                                               clear(1)
ncurses-6.0-20160213/doc/html/man/menu.3x.html0000644000175100001440000003346012653207010017125 0ustar tomusers menu 3x

menu 3x

menu(3x)                                                       menu(3x)




NAME

       menu - curses extension for programming menus


SYNOPSIS

       #include <menu.h>


DESCRIPTION

       The  menu library provides terminal-independent facilities
       for composing menu systems  on  character-cell  terminals.
       The library includes: item routines, which create and mod-
       ify menu items; and menu routines, which group items  into
       menus, display menus on the screen, and handle interaction
       with the user.

       The menu library uses the curses libraries, and  a  curses
       initialization  routine  such  as  initscr  must be called
       before using any of these  functions.   To  use  the  menu
       library, link with the options -lmenu -lcurses.


Current Default Values for Item Attributes

       The  menu  library  maintains  a  default  value  for item
       attributes.  You can get or set this  default  by  calling
       the  appropriate  get_  or  set_  routine with a NULL item
       pointer.  Changing  this  default  with  a  set_  function
       affects  future  item  creations,  but does not change the
       rendering of items already created.


Routine Name Index

       The following table lists each menu routine and  the  name
       of the manual page on which it is described.

       curses Routine Name    Manual Page Name
       --------------------------------------------
       current_item           mitem_current(3x)
       free_item              mitem_new(3x)
       free_menu              menu_new(3x)
       item_count             menu_items(3x)
       item_description       mitem_name(3x)
       item_index             mitem_current(3x)
       item_init              menu_hook(3x)
       item_name              mitem_name(3x)
       item_opts              mitem_opts(3x)
       item_opts_off          mitem_opts(3x)
       item_opts_on           mitem_opts(3x)
       item_term              menu_hook(3x)
       item_userptr           mitem_userptr(3x)
       item_value             mitem_value(3x)
       item_visible           mitem_visible(3x)
       menu_back              menu_attributes(3x)
       menu_driver            menu_driver(3x)
       menu_fore              menu_attributes(3x)
       menu_format            menu_format(3x)
       menu_grey              menu_attributes(3x)
       menu_init              menu_hook(3x)
       menu_items             menu_items(3x)
       menu_mark              menu_mark(3x)
       menu_opts              menu_opts(3x)
       menu_opts_off          menu_opts(3x)
       menu_opts_on           menu_opts(3x)
       menu_pad               menu_attributes(3x)
       menu_pattern           menu_pattern(3x)

       menu_request_by_name   menu_requestname(3x)
       menu_request_name      menu_requestname(3x)
       menu_spacing           menu_spacing(3x)
       menu_sub               menu_win(3x)
       menu_term              menu_hook(3x)
       menu_userptr           menu_userptr(3x)
       menu_win               menu_win(3x)
       new_item               mitem_new(3x)
       new_menu               menu_new(3x)
       pos_menu_cursor        menu_cursor(3x)
       post_menu              menu_post(3x)
       scale_menu             menu_win(3x)
       set_current_item       mitem_current(3x)
       set_item_init          menu_hook(3x)
       set_item_opts          mitem_opts(3x)
       set_item_term          menu_hook(3x)
       set_item_userptr       mitem_userptr(3x)
       set_item_value         mitem_value(3x)
       set_menu_back          menu_attributes(3x)
       set_menu_fore          menu_attributes(3x)
       set_menu_format        menu_format(3x)
       set_menu_grey          menu_attributes(3x)
       set_menu_init          menu_hook(3x)
       set_menu_items         menu_items(3x)
       set_menu_mark          menu_mark(3x)
       set_menu_opts          mitem_opts(3x)
       set_menu_pad           menu_attributes(3x)
       set_menu_pattern       menu_pattern(3x)
       set_menu_spacing       menu_spacing(3x)
       set_menu_sub           menu_win(3x)
       set_menu_term          menu_hook(3x)
       set_menu_userptr       menu_userptr(3x)
       set_menu_win           menu_win(3x)
       set_top_row            mitem_current(3x)
       top_row                mitem_current(3x)
       unpost_menu            menu_post(3x)


RETURN VALUE

       Routines  that return pointers return NULL on error.  Rou-
       tines that return an integer return one of  the  following
       error codes:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_BAD_STATE
            Routine was called from an initialization or termina-
            tion function.

       E_NO_MATCH
            Character failed to match.

       E_NO_ROOM
            Menu is too large for its window.

       E_NOT_CONNECTED
            No items are connected to the menu.

       E_NOT_POSTED
            The menu has not been posted.

       E_NOT_SELECTABLE
            The designated item cannot be selected.

       E_POSTED
            The menu is already posted.

       E_REQUEST_DENIED
            The menu driver could not process the request.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_UNKNOWN_COMMAND
            The menu driver code saw an unknown request code.


NOTES

       The header file <menu.h> automatically includes the header
       files <curses.h> and <eti.h>.

       In your library list, libmenu.a  should  be  before  libn-
       curses.a; that is, you want to say `-lmenu -lncurses', not
       the other way around (which would  usually  give  a  link-
       error).


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual pages and adaptation for  ncurses
       by Eric S. Raymond.


SEE ALSO

       curses(3x) and related pages whose names begin "menu_" for
       detailed descriptions of the entry points.

       This describes ncurses version 6.0 (patch 20160130).



                                                               menu(3x)
ncurses-6.0-20160213/doc/html/man/menu_userptr.3x.html0000644000175100001440000001214612653207011020710 0ustar tomusers menu_userptr 3x

menu_userptr 3x

menu_userptr(3x)                                       menu_userptr(3x)




NAME

       set_menu_userptr,  menu_userptr  -  associate  application
       data with a menu item


SYNOPSIS

       #include <menu.h>
       int set_menu_userptr(MENU *menu, void *userptr);
       void *menu_userptr(const MENU *menu);


DESCRIPTION

       Every menu and every menu item has a  field  that  can  be
       used to hold application-specific data (that is, the menu-
       driver code leaves it alone).  These functions get and set
       the menu user pointer field.


RETURN VALUE

       menu_userptr  returns  a  pointer (which may be NULL).  It
       does not set errno.

       set_menu_userptr returns E_OK (success).


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate  the System V menu library.  They
       were not supported on Version 7 or BSD versions.

       The user pointer is a void pointer.  We chose not to leave
       it as a char pointer for SVr4 compatibility.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                       menu_userptr(3x)
ncurses-6.0-20160213/doc/html/man/form_field_buffer.3x.html0000644000175100001440000002013512653207007021621 0ustar tomusers form_field_buffer 3x

form_field_buffer 3x

form_field_buffer(3x)                             form_field_buffer(3x)




NAME

       form_field_buffer - field buffer control


SYNOPSIS

       #include <form.h>

       int  set_field_buffer(FIELD  *field,  int  buf, const char
       *value);
       char *field_buffer(const FIELD *field, int buffer);
       int set_field_status(FIELD *field, bool status);
       bool field_status(const FIELD *field);
       int set_max_field(FIELD *field, int max);


DESCRIPTION

       The function set_field_buffer sets the numbered buffer  of
       the given field to contain a given string:

          o   Buffer 0 is the displayed value of the field.

          o   Other numbered buffers may be allocated by applica-
              tions   through   the   nbuf   argument   of   (see
              form_field_new(3x))  but are not manipulated by the
              forms library.

       The function field_buffer returns a pointer  to  the  con-
       tents of the given numbered buffer:

          o   The  buffer  contents  always have the same length,
              and are padded with trailing spaces  as  needed  to
              ensure this length is the same.

          o   The buffer may contain leading spaces, depending on
              how it was set.

          o   The buffer contents are set with  set_field_buffer,
              or  as  a  side effect of any editing operations on
              the corresponding field.

          o   Editing operations are based on  the  window  which
              displays the field, rather than a string.  The win-
              dow contains  only  printable  characters,  and  is
              filled  with blanks.  If you want the raw data, you
              must write your own routine that copies  the  value
              out  of  the  buffer  and  removes  the leading and
              trailing spaces.

          o   Because editing operations change  the  content  of
              the  buffer to correspond to the window, you should
              not rely on using buffers for long-term storage  of
              form data.

       The  function  set_field_status sets the associated status
       flag of field; field_status gets the current  value.   The
       status  flag  is set to a nonzero value whenever the field
       changes.

       The function set_max_field sets the  maximum  size  for  a
       dynamic  field.   An  argument  of 0 turns off any maximum
       size threshold for that field.


RETURN VALUE

       The field_buffer function returns NULL on error.  It  sets
       errno according to their success:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       The field_status function returns TRUE or FALSE.

       The remaining routines return one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.


SEE ALSO

       curses(3x) and related pages whose names begin "form_" for
       detailed descriptions of the entry points.


NOTES

       The header file <form.h> automatically includes the header
       file

       When  configured for wide characters, field_buffer returns
       a pointer to temporary storage (allocated and freed by the
       library).   The  application  should not attempt to modify
       the data.  It will be freed on the next call to field_buf-
       fer to return the same buffer.  <curses.h>.


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                  form_field_buffer(3x)
ncurses-6.0-20160213/doc/html/man/default_colors.3x.html0000644000175100001440000002343012653207006021167 0ustar tomusers default_colors 3x

default_colors 3x

default_colors(3x)                                   default_colors(3x)




NAME

       use_default_colors, assume_default_colors - use terminal's
       default colors


SYNOPSIS

       #include <curses.h>

       int use_default_colors(void);
       int assume_default_colors(int fg, int bg);


DESCRIPTION

       The use_default_colors() and assume_default_colors() func-
       tions are extensions to the curses library.  They are used
       with terminals that support ISO 6429 color, or equivalent.
       These terminals allow the application to reset color to an
       unspecified default value (e.g., with SGR 39 or SGR 49).

       Applications that paint  a  colored  background  over  the
       whole  screen  do not take advantage of SGR 39 and SGR 49.
       Some applications are designed to work  with  the  default
       background,  using  colors  only  for  text.  For example,
       there are several implementations of the ls program  which
       use  colors to denote different file types or permissions.
       These "color ls" programs do not  necessarily  modify  the
       background  color, typically using only the setaf terminfo
       capability  to  set  the  foreground  color.   Full-screen
       applications  that  use default colors can achieve similar
       visual effects.

       The first function, use_default_colors() tells the  curses
       library  to  assign terminal default foreground/background
       colors to color number  -1.  So  init_pair(x,COLOR_RED,-1)
       will  initialize  pair  x as red on default background and
       init_pair(x,-1,COLOR_BLUE)  will  initialize  pair  x   as
       default foreground on blue.

       The  other,  assume_default_colors() is a refinement which
       tells which colors to paint for color pair 0.  This  func-
       tion  recognizes  a special color number -1, which denotes
       the default terminal color.

       The following are equivalent:
              use_default_colors();
              assume_default_colors(-1,-1);

       These are ncurses extensions.  For other curses  implemen-
       tations,  color  number -1 does not mean anything, just as
       for ncurses before a successful call  of  use_default_col-
       ors() or assume_default_colors().

       Other  curses  implementations do not allow an application
       to modify color pair 0.  They assume that  the  background
       is COLOR_BLACK, but do not ensure that the color pair 0 is
       painted to match the assumption.  If your application does
       not use either use_default_colors() or assume_default_col-
       ors() ncurses will paint a white  foreground  (text)  with
       black background for color pair 0.


RETURN VALUE

       These functions return the integer ERR upon failure and OK
       on success.  They will fail if either  the  terminal  does
       not  support  the orig_pair or orig_colors capability.  If
       the initialize_pair capability is not found,  this  causes
       an error as well.


NOTES

       Associated  with  this  extension,  the init_pair function
       accepts negative arguments to specify  default  foreground
       or background colors.

       The  use_default_colors()  function  was  added to support
       ded.  This is a full-screen application which uses  curses
       to  manage only part of the screen.  The bottom portion of
       the screen, which is of adjustable size, is left uncolored
       to  display the results from shell commands.  The top por-
       tion of the screen colors filenames using  a  scheme  like
       the  "color  ls" programs.  Attempting to manage the back-
       ground color of the screen for this application would give
       unsatisfactory  results  for  a  variety of reasons.  This
       extension was devised after noting that color  xterm  (and
       similar  programs)  provides a background color which does
       not necessarily correspond to  any  of  the  ANSI  colors.
       While  a special terminfo entry could be constructed using
       nine colors, there was no mechanism provided within curses
       to  account for the related orig_pair and back_color_erase
       capabilities.

       The assume_default_colors() function was added to solve  a
       different  problem:  support  for applications which would
       use  environment  variables  and  other  configuration  to
       bypass  curses'  notion  of the terminal's default colors,
       setting specific values.


PORTABILITY

       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on them be  con-
       ditioned using NCURSES_VERSION.


SEE ALSO

       curs_color(3x), ded(1).


AUTHOR

       Thomas  Dickey  (from  an analysis of the requirements for
       color xterm for XFree86 3.1.2C, February 1996).



                                                     default_colors(3x)
ncurses-6.0-20160213/doc/html/man/wresize.3x.html0000644000175100001440000001272212653207013017652 0ustar tomusers wresize 3x

wresize 3x

wresize(3x)                                                 wresize(3x)




NAME

       wresize - resize a curses window


SYNOPSIS

       #include <curses.h>

       int wresize(WINDOW *win, int lines, int columns);


DESCRIPTION

       This  is  an  extension to the curses library.  It reallo-
       cates storage for an ncurses window to adjust  its  dimen-
       sions  to  the  specified  values.  If either dimension is
       larger than the  current  values,  the  window's  data  is
       filled with blanks that have the current background rendi-
       tion (as set by wbkgdset) merged into them.


RETURN VALUE

       The function returns the integer ERR upon failure  and  OK
       on success.  It will fail if either of the dimensions less
       than or equal  to  zero,  or  if  an  error  occurs  while
       (re)allocating memory for the window.


NOTES

       The only restriction placed on the dimensions is that they
       be greater than zero.  The dimensions are not compared  to
       curses   screen   dimensions  to  simplify  the  logic  of
       resizeterm.  The caller  must  ensure  that  the  window's
       dimensions fit within the actual screen dimensions.


PORTABILITY

       It is not possible to resize windows with SVr4 curses.

       This  extension of ncurses was introduced in mid-1995.  It
       was adopted in NetBSD curses (2001) and PDCurses (2003).


SEE ALSO

       resizeterm(3x).


AUTHOR

       Thomas Dickey (from an equivalent function written in 1988
       for BSD curses).



                                                            wresize(3x)
ncurses-6.0-20160213/doc/html/man/form_field_userptr.3x.html0000644000175100001440000001220512653207007022053 0ustar tomusers form_field_userptr 3x

form_field_userptr 3x

form_field_userptr(3x)                           form_field_userptr(3x)




NAME

       set_field_userptr,  field_userptr  - associate application
       data with a form field


SYNOPSIS

       #include <form.h>
       int set_field_userptr(FIELD *field, void*userptr);
       void *field_userptr(const FIELD *field);


DESCRIPTION

       Every form field has a field that  can  be  used  to  hold
       application-specific  data  (that is, the form-driver code
       leaves it alone).  These functions get and set that field.


RETURN VALUE

       The function field_userptr returns a pointer (which may be
       NULL).  It does not set errno.

       The function set_field_userptr returns E_OK (success).


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.

       The user pointer is a void pointer.  We chose not to leave
       it as a char pointer for SVr4 compatibility.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                                 form_field_userptr(3x)
ncurses-6.0-20160213/doc/html/man/curs_terminfo.3x.html0000644000175100001440000006437712653207006021060 0ustar tomusers curs_terminfo 3x

curs_terminfo 3x

curs_terminfo(3x)                                     curs_terminfo(3x)




NAME

       del_curterm, mvcur, putp, restartterm, set_curterm,
       setterm, setupterm, tigetflag, tigetnum, tigetstr, tiparm,
       tparm, tputs, vid_attr, vid_puts, vidattr, vidputs -
       curses interfaces to terminfo database


SYNOPSIS

       #include <curses.h>
       #include <term.h>

       int setupterm(char *term, int fildes, int *errret);
       int setterm(char *term);
       TERMINAL *set_curterm(TERMINAL *nterm);
       int del_curterm(TERMINAL *oterm);
       int restartterm(char *term, int fildes, int *errret);
       char *tparm(char *str, ...);
       int tputs(const char *str, int affcnt, int (*putc)(int));
       int putp(const char *str);
       int vidputs(chtype attrs, int (*putc)(int));
       int vidattr(chtype attrs);
       int vid_puts(attr_t attrs, short pair, void *opts, int (*putc)(int));
       int vid_attr(attr_t attrs, short pair, void *opts);
       int mvcur(int oldrow, int oldcol, int newrow, int newcol);
       int tigetflag(char *capname);
       int tigetnum(char *capname);
       char *tigetstr(char *capname);
       char *tiparm(const char *str, ...);


DESCRIPTION

       These low-level routines must be called by  programs  that
       have to deal directly with the terminfo database to handle
       certain terminal capabilities, such as  programming  func-
       tion  keys.   For all other functionality, curses routines
       are more suitable and their use is recommended.


Initialization

       Initially, setupterm should  be  called.   Note  that  se-
       tupterm  is  automatically  called by initscr and newterm.
       This  defines  the  set  of  terminal-dependent  variables
       [listed in terminfo(5)].

       Each initialization routine provides applications with the
       terminal capabilities either directly (via header  defini-
       tions),  or  by special functions.  The header files curs-
       es.h and term.h should be included (in this order) to  get
       the definitions for these strings, numbers, and flags.

       The  terminfo  variables lines and columns are initialized
       by setupterm as follows:

       o   If use_env(FALSE) has been called,  values  for  lines
           and columns specified in terminfo are used.

       o   Otherwise, if the environment variables LINES and COL-
           UMNS exist, their values are used.  If these  environ-
           ment variables do not exist and the program is running
           in a window, the current window size is used.   Other-
           wise,  if  the environment variables do not exist, the
           values for lines and columns specified in the terminfo
           database are used.

       Parameterized  strings  should  be passed through tparm to
       instantiate them.  All  terminfo  strings  [including  the
       output  of  tparm]  should  be printed with tputs or putp.
       Call reset_shell_mode to restore the tty modes before  ex-
       iting [see curs_kernel(3x)].

       Programs which use cursor addressing should

       o   output enter_ca_mode upon startup and

       o   output exit_ca_mode before exiting.

       Programs which execute shell subprocesses should

       o   call  reset_shell_mode  and output exit_ca_mode before
           the shell is called and

       o   output enter_ca_mode and  call  reset_prog_mode  after
           returning from the shell.

       The setupterm routine reads in the terminfo database, ini-
       tializing the terminfo structures, but does not set up the
       output virtualization structures used by curses.  The ter-
       minal type is the character string term; if term is  null,
       the  environment  variable TERM is used.  All output is to
       file descriptor fildes which is  initialized  for  output.
       If  errret  is  not null, then setupterm returns OK or ERR
       and stores a status value in the integer pointed to by er-
       rret.   A  return value of OK combined with status of 1 in
       errret is normal.  If ERR is returned, examine errret:

       1    means that the terminal is hardcopy, cannot  be  used
            for curses applications.

            setupterm  determines if the entry is a hardcopy type
            by checking the hc (hardcopy) capability.

       0    means that the terminal could not be found,  or  that
            it  is  a generic type, having too little information
            for curses applications to run.

            setupterm determines if the entry is a  generic  type
            by checking the gn (generic) capability.

       -1   means that the terminfo database could not be found.

       If  errret is null, setupterm prints an error message upon
       finding an error and exits.  Thus, the simplest call is:

             setupterm((char *)0, 1, (int *)0);,

       which uses all the defaults and sends the output  to  std-
       out.

       The setterm routine was replaced by setupterm.  The call:

             setupterm(term, 1, (int *)0)

       provides  the  same  functionality  as setterm(term).  The
       setterm routine is provided for BSD compatibility, and  is
       not recommended for new programs.


The Terminal State

       The  setupterm  routine  stores  its information about the
       terminal in a TERMINAL structure pointed to by the  global
       variable  cur_term.   If  it  detects an error, or decides
       that the terminal is unsuitable (hardcopy or generic),  it
       discards  this information, making it not available to ap-
       plications.

       If setupterm is called repeatedly for  the  same  terminal
       type,  it  will  reuse the information.  It maintains only
       one copy of a given terminal's capabilities in memory.  If
       it is called for different terminal types, setupterm allo-
       cates new storage for each set of terminal capabilities.

       The set_curterm routine sets cur_term to nterm, and  makes
       all of the terminfo boolean, numeric, and string variables
       use the values from nterm.  It returns the  old  value  of
       cur_term.

       The  del_curterm  routine  frees  the  space pointed to by
       oterm and makes it available for further use.  If oterm is
       the  same  as  cur_term, references to any of the terminfo
       boolean, numeric, and string variables thereafter may  re-
       fer  to  invalid  memory locations until another setupterm
       has been called.

       The  restartterm  routine  is  similar  to  setupterm  and
       initscr,  except  that it is called after restoring memory
       to a previous state (for example, when  reloading  a  game
       saved as a core image dump).  restartterm assumes that the
       windows and the input and output options are the  same  as
       when memory was saved, but the terminal type and baud rate
       may be different.  Accordingly, restartterm saves  various
       tty  state  bits,  calls  setupterm, and then restores the
       bits.


Formatting Output

       The tparm routine instantiates the string str with parame-
       ters  pi.  A pointer is returned to the result of str with
       the parameters applied.

       tiparm is a newer form  of  tparm  which  uses  <stdarg.h>
       rather  than  a fixed-parameter list.  Its numeric parame-
       ters are integers (int) rather than longs.


Output Functions

       The tputs  routine  applies  padding  information  to  the
       string  str  and  outputs  it.  The str must be a terminfo
       string variable or the return value from  tparm,  tgetstr,
       or tgoto.  affcnt is the number of lines affected, or 1 if
       not applicable.  putc is a putchar-like routine  to  which
       the characters are passed, one at a time.

       The  putp routine calls tputs(str, 1, putchar).  Note that
       the output of putp always  goes  to  stdout,  not  to  the
       fildes specified in setupterm.

       The vidputs routine displays the string on the terminal in
       the video attribute mode attrs, which is  any  combination
       of  the  attributes  listed in curses(3x).  The characters
       are passed to the putchar-like routine putc.

       The vidattr routine is like the  vidputs  routine,  except
       that it outputs through putchar.

       The  vid_attr  and vid_puts routines correspond to vidattr
       and vidputs, respectively.  They use a  set  of  arguments
       for  representing  the  video attributes plus color, i.e.,
       one of type attr_t for the attributes and one of short for
       the color_pair number.  The vid_attr and vid_puts routines
       are designed to use the attribute constants with  the  WA_
       prefix.   The  opts  argument  is reserved for future use.
       Currently, applications must provide a  null  pointer  for
       that argument.

       The  mvcur  routine  provides low-level cursor motion.  It
       takes effect immediately (rather  than  at  the  next  re-
       fresh).


Terminal Capability Functions

       The  tigetflag,  tigetnum and tigetstr routines return the
       value of the capability corresponding to the terminfo cap-
       name  passed  to them, such as xenl.  The capname for each
       capability is given in the table column  entitled  capname
       code in the capabilities section of terminfo(5).

       These routines return special values to denote errors.

       The tigetflag routine returns

       -1     if capname is not a boolean capability, or

       0      if  it  is canceled or absent from the terminal de-
              scription.

       The tigetnum routine returns

       -2     if capname is not a numeric capability, or

       -1     if it is canceled or absent from the  terminal  de-
              scription.

       The tigetstr routine returns

       (char *)-1
              if capname is not a string capability, or

       0      if  it  is canceled or absent from the terminal de-
              scription.


Terminal Capability Names

       These null-terminated arrays contain  the  short  terminfo
       names  ("codes"), the termcap names, and the long terminfo
       names ("fnames") for each of the predefined terminfo vari-
       ables:
              char *boolnames[], *boolcodes[], *boolfnames[]

              char *numnames[], *numcodes[], *numfnames[]

              char *strnames[], *strcodes[], *strfnames[]


RETURN VALUE

       Routines  that  return  an integer return ERR upon failure
       and OK (SVr4 only specifies "an integer value  other  than
       ERR")  upon  successful completion, unless otherwise noted
       in the preceding routine descriptions.

       Routines that return pointers always return NULL on error.

       X/Open defines no error conditions.  In  this  implementa-
       tion

            del_curterm
                 returns  an  error  if its terminal parameter is
                 null.

            putp calls tputs, returning the same error-codes.

            restartterm
                 returns an error if the associated call  to  se-
                 tupterm returns an error.

            setupterm
                 returns  an  error  if it cannot allocate enough
                 memory, or create the initial  windows  (stdscr,
                 curscr,  newscr).   Other  error  conditions are
                 documented above.

            tputs
                 returns an error  if  the  string  parameter  is
                 null.   It  does  not  detect I/O errors: X/Open
                 states that tputs ignores the  return  value  of
                 the output function putc.


PORTABILITY

       X/Open notes that vidattr and vidputs may be macros.

       The  function  setterm is not described by X/Open and must
       be considered non-portable.  All other  functions  are  as
       described by X/Open.

       setupterm  copies  the terminal name to the array ttytype.
       This is not part of X/Open Curses, but is assumed by  some
       applications.

       If  configured  to  use the terminal-driver, e.g., for the
       MinGW port,

       o   setupterm interprets a missing/empty TERM variable  as
           the special value "unknown".

       o   setupterm  allows explicit use of the the windows con-
           sole driver by checking if $TERM is set to "#win32con"
           or an abbreviation of that string.

       Older versions of ncurses assumed that the file descriptor
       passed to setupterm from initscr or newterm uses  buffered
       I/O,  and would write to the corresponding stream.  In ad-
       dition to the limitation that the  terminal  was  left  in
       block-buffered  mode on exit (like SystemV curses), it was
       problematic because ncurses did not allow a  reliable  way
       to cleanup on receiving SIGTSTP.  The current version uses
       output buffers managed directly by ncurses.  Some  of  the
       low-level functions described in this manual page write to
       the standard output.  They are not signal-safe.  The high-
       level functions in ncurses use alternate versions of these
       functions using the more reliable buffering scheme.

       In System V Release 4, set_curterm has an int return  type
       and  returns  OK  or ERR.  We have chosen to implement the
       X/Open Curses semantics.

       In System V Release 4, the third argument of tputs has the
       type int (*putc)(char).

       At least one implementation of X/Open Curses (Solaris) re-
       turns a value other than OK/ERR from tputs.  That  returns
       the length of the string, and does no error-checking.

       X/Open  Curses prototypes tparm with a fixed number of pa-
       rameters, rather than a variable argument list.  This  im-
       plementation  uses  a  variable  argument list, but can be
       configured to use the fixed-parameter list.  Portable  ap-
       plications  should  provide 9 parameters after the format;
       zeroes are fine for this purpose.

       In response to comments by Thomas E. Dickey, X/Open Curses
       Issue 7 proposed the tiparm function in mid-2009.

       X/Open  notes  that  after calling mvcur, the curses state
       may not match the actual terminal state, and that  an  ap-
       plication  should  touch and refresh the window before re-
       suming normal curses calls.  Both ncurses and System V Re-
       lease 4 curses implement mvcur using the SCREEN data allo-
       cated in either initscr or newterm.  So though it is docu-
       mented  as  a  terminfo function, mvcur is really a curses
       function which is not well specified.

       X/Open states that the old  location  must  be  given  for
       mvcur.   This implementation allows the caller to use -1's
       for the old ordinates.  In that case, the old location  is
       unknown.

       Other  implementions  may  not declare the capability name
       arrays.  Some provide them without declaring them.  X/Open
       does not specify them.

       Extended  terminal  capability  names, e.g., as defined by
       tic -x, are not stored in the arrays described here.


SEE ALSO

       curses(3x), curs_initscr(3x), curs_kernel(3x),  curs_term-
       cap(3x),  curs_variables(3x), term_variables(3x), putc(3),
       terminfo(5)



                                                      curs_terminfo(3x)
ncurses-6.0-20160213/doc/html/man/captoinfo.1m.html0000644000175100001440000002372412653207002020131 0ustar tomusers captoinfo 1m

captoinfo 1m

captoinfo(1m)                                             captoinfo(1m)




NAME

       captoinfo  - convert a termcap description into a terminfo
       description


SYNOPSIS

       captoinfo [-vn width]  [-V] [-1] [-w width] file . . .


DESCRIPTION

       captoinfo looks  in  each  given  text  file  for  termcap
       descriptions.   For each one found, an equivalent terminfo
       description is written to  standard  output.   Termcap  tc
       capabilities are translated directly to terminfo use capa-
       bilities.

       If no file is given, then the environment variable TERMCAP
       is  used  for the filename or entry.  If TERMCAP is a full
       pathname to a file, only the terminal whose name is speci-
       fied  in  the  environment variable TERM is extracted from
       that file.  If the environment  variable  TERMCAP  is  not
       set, then the file /usr/share/terminfo is read.

       -v   print  out  tracing  information on standard error as
            the program runs.

       -V   print out the version of the program in use on  stan-
            dard error and exit.

       -1   cause  the fields to print out one to a line.  Other-
            wise, the fields will be printed several to a line to
            a maximum width of 60 characters.

       -w   change the output to width characters.


FILES

       /usr/share/terminfo Compiled  terminal  description  data-
                           base.


TRANSLATIONS FROM NONSTANDARD CAPABILITIES

       Some obsolete nonstandard capabilities will  automatically
       be  translated  into  standard  (SVr4/XSI Curses) terminfo
       capabilities by captoinfo.  Whenever one  of  these  auto-
       matic  translations  is  done,  the  program will issue an
       notification to stderr, inviting the user to check that it
       has  not  mistakenly  translated  a completely unknown and
       random capability and/or syntax error.

       Nonstd   Std    From           Terminfo
        name    name                 capability
       -----------------------------------------------
       BO       mr     AT&T    enter_reverse_mode
       CI       vi     AT&T    cursor_invisible
       CV       ve     AT&T    cursor_normal
       DS       mh     AT&T    enter_dim_mode
       EE       me     AT&T    exit_attribute_mode
       FE       LF     AT&T    label_on
       FL       LO     AT&T    label_off
       XS       mk     AT&T    enter_secure_mode
       EN       @7     XENIX   key_end
       GE       ae     XENIX   exit_alt_charset_mode
       GS       as     XENIX   enter_alt_charset_mode
       HM       kh     XENIX   key_home

       LD       kL     XENIX   key_dl
       PD       kN     XENIX   key_npage
       PN       po     XENIX   prtr_off
       PS       pf     XENIX   prtr_on
       PU       kP     XENIX   key_ppage
       RT       @8     XENIX   kent
       UP       ku     XENIX   kcuu1
       KA       k;     Tek     key_f10
       KB       F1     Tek     key_f11
       KC       F2     Tek     key_f12
       KD       F3     Tek     key_f13
       KE       F4     Tek     key_f14
       KF       F5     Tek     key_f15
       BC       Sb     Tek     set_background
       FC       Sf     Tek     set_foreground
       HS       mh     Iris    enter_dim_mode

       XENIX termcap also used to have a set of  extension  capa-
       bilities  for forms drawing, designed to take advantage of
       the IBM PC high-half graphics.  They were as follows:

       Cap          Graphic
       -----------------------------
       G2    upper left
       G3    lower left
       G1    upper right
       G4    lower right
       GR    pointing right
       GL    pointing left
       GU    pointing up
       GD    pointing down
       GH    horizontal line
       GV    vertical line
       GC    intersection
       G6    upper left
       G7    lower left
       G5    upper right
       G8    lower right
       Gr    tee pointing right
       Gr    tee pointing left
       Gu    tee pointing up
       Gd    tee pointing down
       Gh    horizontal line
       Gv    vertical line
       Gc    intersection
       GG    acs magic cookie count

       If the single-line capabilities occur in  an  entry,  they
       will  automatically  be composed into an acsc string.  The
       double-line capabilities and GG are discarded with a warn-
       ing message.

       IBM's AIX has a terminfo facility descended from SVr1 ter-
       minfo but incompatible with the SVr4 format.  The  follow-
       ing AIX extensions are automatically translated:

        IBM    XSI
       -------------
       ksel    kslt
       kbtab   kcbt
       font0   s0ds
       font1   s1ds
       font2   s2ds
       font3   s3ds

       Additionally,  the  AIX  box1 capability will be automati-
       cally translated to an acsc string.

       Hewlett-Packard's terminfo library supports  two  nonstan-
       dard  terminfo  capabilities  meml  (memory lock) and memu
       (memory unlock).  These will be discarded with  a  warning
       message.


NOTES

       This  utility is actually a link to tic(1m), running in -I
       mode.  You can use other tic options such as -f and  -x.

       The trace option is not identical to SVr4's.  Under  SVr4,
       instead  of  following  the  -v  with a trace level n, you
       repeat it n times.


SEE ALSO

       infocmp(1m), curses(3x), terminfo(5)

       This describes ncurses version 6.0 (patch 20160130).


AUTHOR

       Eric S. Raymond <esr@snark.thyrsus.com> and
       Thomas E. Dickey <dickey@invisible-island.net>



                                                          captoinfo(1m)
ncurses-6.0-20160213/doc/html/man/curs_termattrs.3x.html0000644000175100001440000002257412653207006021253 0ustar tomusers curs_termattrs 3x

curs_termattrs 3x

curs_termattrs(3x)                                   curs_termattrs(3x)




NAME

       baudrate, erasechar, erasewchar, has_ic, has_il, killchar,
       killwchar, longname,  term_attrs,  termattrs,  termname  -
       curses environment query routines


SYNOPSIS

       #include <curses.h>

       int baudrate(void);
       char erasechar(void);
       int erasewchar(wchar_t *ch);
       bool has_ic(void);
       bool has_il(void);
       char killchar(void);
       int killwchar(wchar_t *ch);
       char *longname(void);
       attr_t term_attrs(void);
       chtype termattrs(void);
       char *termname(void);


DESCRIPTION


baudrate

       The  baudrate routine returns the output speed of the ter-
       minal.  The number returned is in  bits  per  second,  for
       example 9600, and is an integer.


erasechar, erasewchar

       The  erasechar  routine  returns  the user's current erase
       character.

       The erasewchar routine stores the current erase  character
       in  the  location referenced by ch.  If no erase character
       has been defined, the routine fails and the location  ref-
       erenced by ch is not changed.


has_is, has_il

       The has_ic routine is true if the terminal has insert- and
       delete- character capabilities.

       The has_il routine is true if the terminal has insert- and
       delete-line  capabilities,  or  can  simulate  them  using
       scrolling regions.  This might be used to determine if  it
       would  be  appropriate to turn on physical scrolling using
       scrollok.


killchar, killwchar

       The killchar routine returns the user's current line  kill
       character.

       The killwchar routine stores the current line-kill charac-
       ter in the location referenced by  ch.   If  no  line-kill
       character  has  been  defined,  the  routine fails and the
       location referenced by ch is not changed.


longname

       The longname routine returns a pointer to  a  static  area
       containing  a verbose description of the current terminal.
       The maximum length of a verbose description is 128 charac-
       ters.   It  is  defined  only after the call to initscr or
       newterm.  The area is overwritten by each call to  newterm
       and  is  not  restored by set_term, so the value should be
       saved between calls to newterm if longname is going to  be
       used with multiple terminals.


termattrs, term_attrs

       If  a  given  terminal  does not support a video attribute
       that an application program is trying to use,  curses  may
       substitute  a  different video attribute for it.  The ter-
       mattrs and term_attrs functions return a logical OR of all
       video  attributes  supported  by the terminal using A_ and
       WA_ constants respectively.  This  information  is  useful
       when  a  curses  program  needs  complete control over the
       appearance of the screen.


termname

       The termname routine returns the  terminal  name  used  by
       setupterm.


RETURN VALUE

       longname and termname return NULL on error.

       Routines  that  return  an integer return ERR upon failure
       and OK (SVr4 only specifies "an integer value  other  than
       ERR") upon successful completion.


NOTES

       Note that termattrs may be a macro.


PORTABILITY

       The  XSI  Curses  standard,  Issue 4 describes these func-
       tions.  It changes the return type of termattrs to the new
       type  attr_t.  Most versions of curses truncate the result
       returned by termname to 14 characters.


SEE ALSO

       curses(3x), curs_initscr(3x), curs_outopts(3x)



                                                     curs_termattrs(3x)
ncurses-6.0-20160213/doc/html/man/form_field_attributes.3x.html0000644000175100001440000001371212653207007022541 0ustar tomusers form_field_attributes 3x

form_field_attributes 3x

form_field_attributes(3x)                     form_field_attributes(3x)




NAME

       form_field_attributes  -  color  and attribute control for
       form fields


SYNOPSIS

       #include <form.h>
       int set_field_fore(FIELD *field, chtype attr);
       chtype field_fore(const FIELD *field);
       int set_field_back(FIELD *field, chtype attr);
       chtype field_back(const FIELD *field);
       int set_field_pad(FIELD *field, int pad);
       int field_pad(const FIELD *field);


DESCRIPTION

       The function set_field_fore sets the foreground  attribute
       of  field. This is the highlight used to display the field
       contents.  The function field_fore returns the  foreground
       attribute.  The default is A_STANDOUT.

       The  function set_field_back sets the background attribute
       of form. This is the highlight used to display the  extent
       fields  in  the form.  The function field_back returns the
       background attribute.  The default is A_NORMAL.

       The function set_field_pad sets the character used to fill
       the  field.   The  function  field_pad  returns  the given
       form's pad character.  The default is a blank.


RETURN VALUE

       These routines return one of the following:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x) and related pages whose names begin "form_" for
       detailed descriptions of the entry points.


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual  pages  and  adaptation  for  new
       curses by Eric S. Raymond.



                                              form_field_attributes(3x)
ncurses-6.0-20160213/doc/html/man/curs_instr.3x.html0000644000175100001440000001530612653207005020357 0ustar tomusers curs_instr 3x

curs_instr 3x

curs_instr(3x)                                           curs_instr(3x)




NAME

       instr,  innstr, winstr, winnstr, mvinstr, mvinnstr, mvwin-
       str, mvwinnstr - get a string of characters from a  curses
       window


SYNOPSIS

       #include <curses.h>

       int instr(char *str);
       int innstr(char *str, int n);
       int winstr(WINDOW *win, char *str);
       int winnstr(WINDOW *win, char *str, int n);
       int mvinstr(int y, int x, char *str);
       int mvinnstr(int y, int x, char *str, int n);
       int mvwinstr(WINDOW *win, int y, int x, char *str);
       int  mvwinnstr(WINDOW  *win,  int y, int x, char *str, int
       n);


DESCRIPTION

       These routines return  a  string  of  characters  in  str,
       extracted  starting  at the current cursor position in the
       named window.  Attributes are stripped  from  the  charac-
       ters.   The  four  functions  with  n as the last argument
       return a leading  substring  at  most  n  characters  long
       (exclusive of the trailing NUL).


RETURN VALUE

       All  of the functions return ERR upon failure, or the num-
       ber of characters actually read into the string.

       X/Open defines no error conditions.  In  this  implementa-
       tion, if the window parameter is null or the str parameter
       is null, a zero is returned.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


NOTES

       Note that all routines except winnstr may be macros.


PORTABILITY

       SVr4 does not document whether a length limit includes  or
       excludes the trailing NUL.

       The  ncurses library extends the XSI description by allow-
       ing a negative value for n.  In this case,  the  functions
       return the string ending at the right margin.


SEE ALSO

       curses(3x).



                                                         curs_instr(3x)
ncurses-6.0-20160213/doc/html/man/toe.1m.html0000644000175100001440000001554212653207013016737 0ustar tomusers toe 1m

toe 1m

toe(1m)                                                         toe(1m)




NAME

       toe - table of (terminfo) entries


SYNOPSIS

       toe [-v[n]] [-ahsuUV] file...


DESCRIPTION

       With no options, toe lists all available terminal types by
       primary name with descriptions.   File  arguments  specify
       the  directories  to  be scanned; if no such arguments are
       given, your default terminfo directory is scanned.  If you
       also  specify  the  -h  option, a directory header will be
       issued as each directory is entered.

       There are other options intended for use by terminfo  file
       maintainers:

       -a     report  on  all  of  the  terminal  databases which
              ncurses would search, rather than  only  the  first
              one that it finds.

              If  the  -s is also given, toe adds a column to the
              report, showing (like  conflict(1))  which  entries
              which  belong to a given terminal database.  An "*"
              marks entries which differ, and "+"  marks  equiva-
              lent entries.

              Without  the  -s  option,  toe  does not attempt to
              merge duplicates in its report

       -s     sort the output by the entry names.

       -u file
              says to write a  report  to  the  standard  output,
              listing  dependencies in the given terminfo/termcap
              source file.  The report condenses the `use'  rela-
              tion:  each  line consists of the primary name of a
              terminal that has use capabilities, followed  by  a
              colon, followed by the whitespace-separated primary
              names of all terminals which  occur  in  those  use
              capabilities, followed by a newline

       -U file
              says  to  write  a  report  to the standard output,
              listing reverse  dependencies  in  the  given  ter-
              minfo/termcap source file.  The report reverses the
              `use' relation: each line consists of  the  primary
              name of a terminal that occurs in use capabilities,
              followed by a colon, followed  by  the  whitespace-
              separated  primary  names  of  all  terminals which
              depend on it, followed by a newline.

       -vn    specifies that (verbose) output be written to stan-
              dard  error,  showing toe's progress.  The optional
              parameter n is a number from 1 to  10,  interpreted
              as for tic(1m).

       -V     reports  the  version  of ncurses which was used in
              this program, and exits.


FILES

       /usr/share/terminfo/?/*
            Compiled terminal description database.


SEE ALSO

       tic(1m),   infocmp(1m),   captoinfo(1m),    infotocap(1m),
       curses(3x), terminfo(5).

       This describes ncurses version 6.0 (patch 20160130).



                                                                toe(1m)
ncurses-6.0-20160213/doc/html/man/curs_attr.3x.html0000644000175100001440000005355112653207003020174 0ustar tomusers curs_attr 3x

curs_attr 3x

curs_attr(3x)                                             curs_attr(3x)




NAME

       attroff, wattroff, attron, wattron, attrset, wattrset,
       color_set, wcolor_set, standend, wstandend, standout,
       wstandout, attr_get, wattr_get, attr_off, wattr_off,
       attr_on, wattr_on, attr_set, wattr_set, chgat, wchgat,
       mvchgat, mvwchgat, PAIR_NUMBER - curses character and
       window attribute control routines


SYNOPSIS

       #include <curses.h>
       int attroff(int attrs);
       int wattroff(WINDOW *win, int attrs);
       int attron(int attrs);
       int wattron(WINDOW *win, int attrs);
       int attrset(int attrs);
       int wattrset(WINDOW *win, int attrs);
       int color_set(short color_pair_number, void* opts);
       int wcolor_set(WINDOW *win, short color_pair_number,
             void* opts);
       int standend(void);
       int wstandend(WINDOW *win);
       int standout(void);
       int wstandout(WINDOW *win);
       int attr_get(attr_t *attrs, short *pair, void *opts);
       int wattr_get(WINDOW *win, attr_t *attrs, short *pair,
              void *opts);
       int attr_off(attr_t attrs, void *opts);
       int wattr_off(WINDOW *win, attr_t attrs, void *opts);
       int attr_on(attr_t attrs, void *opts);
       int wattr_on(WINDOW *win, attr_t attrs, void *opts);
       int attr_set(attr_t attrs, short pair, void *opts);
       int wattr_set(WINDOW *win, attr_t attrs, short pair,  void
       *opts);
       int chgat(int n, attr_t attr, short color,
             const void *opts);
       int wchgat(WINDOW *win, int n, attr_t attr,
             short color, const void *opts);
       int mvchgat(int y, int x, int n, attr_t attr,
             short color, const void *opts);
       int mvwchgat(WINDOW *win, int y, int x, int n,
             attr_t attr, short color, const void *opts);
       PAIR_NUMBER(attrs);


DESCRIPTION

       These  routines  manipulate  the current attributes of the
       named window.  The current attributes of a window apply to
       all characters that are written into the window with wadd-
       ch, waddstr and wprintw.  Attributes are a property of the
       character,   and  move  with  the  character  through  any
       scrolling and insert/delete line/character operations.  To
       the  extent  possible,  they  are displayed as appropriate
       modifications to the graphic rendition of  characters  put
       on the screen.


attrset

       The  routine  attrset  sets  the current attributes of the
       given window to attrs.  The routine attroff turns off  the
       named  attributes  without turning any other attributes on
       or off.  The routine attron turns on the named  attributes
       without affecting any others.  The routine standout is the
       same as attron(A_STANDOUT).  The routine standend  is  the
       same as attrset(A_NORMAL) or attrset(0), that is, it turns
       off all attributes.

       The attrset and related routines do  not  affect  the  at-
       tributes  used  when  erasing portions of the window.  See
       curs_bkgd(3x) for functions which  modify  the  attributes
       used for erasing and clearing.


attr_set

       The attrset routine is actually a legacy feature predating
       SVr4 curses but kept in X/Open Curses for the same  reason
       that  SVr4 curses kept it: compatibility.  The routine at-
       tr_set provides for passing a color-pair parameter.

       The remaining attr_* functions operate  exactly  like  the
       corresponding attr* functions, except that they take argu-
       ments of type attr_t rather than int.


color_set

       The routine color_set sets the current color of the  given
       window  to the foreground/background combination described
       by the color_pair_number.  The parameter opts is  reserved
       for future use, applications must supply a null pointer.


attr_get

       The  routine  wattr_get  returns the current attribute and
       color pair for the given window; attr_get returns the cur-
       rent attribute and color pair for stdscr.

       There  is  no  corresponding  attrget  function as such in
       X/Open Curses, although  ncurses  provides  getattrs  (see
       curs_legacy(3x)).


chgat

       The routine chgat changes the attributes of a given number
       of characters starting at the current cursor  location  of
       stdscr.   It  does not update the cursor and does not per-
       form wrapping.  A character count of -1  or  greater  than
       the  remaining window width means to change attributes all
       the way to the end of the current line.  The wchgat  func-
       tion generalizes this to any window; the mvwchgat function
       does a cursor move before acting.  In these functions, the
       color  argument is a color-pair index (as in the first ar-
       gument of init_pair, see curs_color(3x)).  The opts  argu-
       ment is not presently used, but is reserved for the future
       (leave it NULL).


Attributes

       The following video attributes, defined in <curses.h>, can
       be passed to the routines attron, attroff, and attrset, or
       OR'd with the characters passed to  addch  (see  curs_add-
       ch(3x)).

              Name            Description
              ------------------------------------------------------------
              A_NORMAL        Normal display (no highlight)
              A_STANDOUT      Best highlighting mode of the terminal.
              A_UNDERLINE     Underlining
              A_REVERSE       Reverse video
              A_BLINK         Blinking
              A_DIM           Half bright
              A_BOLD          Extra bright or bold
              A_PROTECT       Protected mode
              A_INVIS         Invisible or blank mode
              A_ALTCHARSET    Alternate character set
              A_ITALIC        Italics (non-X/Open extension)

              A_CHARTEXT      Bit-mask to extract a character
              COLOR_PAIR(n)   Color-pair number n

       These video attributes are supported by attr_on and relat-
       ed functions (which also support the attributes recognized
       by attron, etc.):

              Name            Description
              -----------------------------------------
              WA_HORIZONTAL   Horizontal highlight
              WA_LEFT         Left highlight
              WA_LOW          Low highlight
              WA_RIGHT        Right highlight
              WA_TOP          Top highlight
              WA_VERTICAL     Vertical highlight

       For consistency

       The following macro is the reverse of COLOR_PAIR(n):

       PAIR_NUMBER(attrs) Returns the pair number associated
                          with the COLOR_PAIR(n) attribute.

       The  return values of many of these routines are not mean-
       ingful (they are implemented as macro-expanded assignments
       and  simply  return their argument).  The SVr4 manual page
       claims (falsely) that these routines always return 1.


NOTES

       Note that attroff,  wattroff,  attron,  wattron,  attrset,
       wattrset, standend and standout may be macros.

       COLOR_PAIR  values can only be OR'd with attributes if the
       pair number is less than  256.   The  alternate  functions
       such  as  color_set  can pass a color pair value directly.
       However, ncurses ABI 4 and 5 simply OR this  value  within
       the  alternate  functions.   You must use ncurses ABI 6 to
       support more than 256 color pairs.


PORTABILITY

       These functions are supported in the XSI Curses  standard,
       Issue  4.   The  standard  defined  the dedicated type for
       highlights, attr_t, which is not defined in  SVr4  curses.
       The  functions  taking  attr_t arguments are not supported
       under SVr4.

       The XSI Curses standard states that whether the tradition-
       al  functions  attron/attroff/attrset  can  manipulate at-
       tributes other than  A_BLINK,  A_BOLD,  A_DIM,  A_REVERSE,
       A_STANDOUT,  or  A_UNDERLINE is "unspecified".  Under this
       implementation as well as  SVr4  curses,  these  functions
       correctly  manipulate  all other highlights (specifically,
       A_ALTCHARSET, A_PROTECT, and A_INVIS).

       This implementation provides the  A_ITALIC  attribute  for
       terminals which have the enter_italics_mode (sitm) and ex-
       it_italics_mode (ritm) capabilities.  Italics are not men-
       tioned  in  X/Open  Curses.   Unlike  the  other video at-
       tributes, I_ITALIC is unrelated to the set_attributes  ca-
       pabilities.  This implementation makes the assumption that
       exit_attribute_mode may also reset italics.

       XSI Curses added the new entry points, attr_get,  attr_on,
       attr_off,  attr_set,  wattr_on, wattr_off, wattr_get, wat-
       tr_set.  These are intended to work with a new  series  of
       highlight macros prefixed with WA_.  The older macros have
       direct counterparts in the newer set of names:

              Name            Description
              ------------------------------------------------------------
              WA_NORMAL       Normal display (no highlight)
              WA_STANDOUT     Best highlighting mode of the terminal.
              WA_UNDERLINE    Underlining
              WA_REVERSE      Reverse video
              WA_BLINK        Blinking
              WA_DIM          Half bright
              WA_BOLD         Extra bright or bold
              WA_ALTCHARSET   Alternate character set

       Very old versions of this library did not force an  update
       of  the screen when changing the attributes.  Use touchwin
       to force the screen to match the updated attributes.

       The XSI curses standard specifies that each pair of corre-
       sponding  A_  and WA_-using functions operates on the same
       current-highlight information.

       The XSI standard extended conformance level adds new high-
       lights A_HORIZONTAL, A_LEFT, A_LOW, A_RIGHT, A_TOP, A_VER-
       TICAL (and corresponding WA_ macros for each).  As of  Au-
       gust  2013,  no  known  terminal provides these highlights
       (i.e., via the sgr1 capability).


RETURN VALUE

       All routines return the integer OK on success, or  ERR  on
       failure.

       X/Open does not define any error conditions.

       This implementation returns an error if the window pointer
       is null.  The wcolor_set function returns an error if  the
       color   pair   parameter  is  outside  the  range  0..COL-
       OR_PAIRS-1.  This implementation  also  provides  getattrs
       for compatibility with older versions of curses.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


SEE ALSO

       curses(3x), curs_addch(3x), curs_addstr(3x),
       curs_bkgd(3x), curs_printw(3x), curs_variables(3x)



                                                          curs_attr(3x)
ncurses-6.0-20160213/doc/html/man/curs_get_wch.3x.html0000644000175100001440000002170112653207004020633 0ustar tomusers curs_get_wch 3x

curs_get_wch 3x

curs_get_wch(3x)                                       curs_get_wch(3x)




NAME

       get_wch,  wget_wch, mvget_wch, mvwget_wch, unget_wch - get
       (or push back) a wide character from curses terminal  key-
       board


SYNOPSIS

       #include <curses.h>

       int get_wch(wint_t *wch);
       int wget_wch(WINDOW *win, wint_t *wch);
       int mvget_wch(int y, int x, wint_t *wch);
       int mvwget_wch(WINDOW *win, int y, int x, wint_t *wch);
       int unget_wch(const wchar_t wch);


DESCRIPTION

       The get_wch, wget_wch, mvget_wch, and mvwget_wch functions
       read a character from the  terminal  associated  with  the
       current  or  specified  window.   In  no-delay mode, if no
       input is waiting, the value ERR  is  returned.   In  delay
       mode,  the  program  waits  until  the  system passes text
       through to the  program.   Depending  on  the  setting  of
       cbreak,  this  is  after  one  character (cbreak mode), or
       after the first newline (nocbreak  mode).   In  half-delay
       mode,  the  program waits until the user types a character
       or the specified timeout interval has elapsed.

       Unless noecho has been set, these routines echo the  char-
       acter into the designated window.

       If  the window is not a pad and has been moved or modified
       since the last call to wrefresh, wrefresh will  be  called
       before another character is read.

       If  keypad  is  enabled,  these  functions  respond to the
       pressing of a function key by setting the  object  pointed
       to  by  wch  to  the  corresponding  KEY_ value defined in
       <curses.h> and returning  KEY_CODE_YES.   If  a  character
       (such as escape) that could be the beginning of a function
       key is received, curses sets a timer.  If the remainder of
       the  sequence  does  arrive  within  the  designated time,
       curses passes through  the  character;  otherwise,  curses
       returns  the  function  key  value.  For this reason, many
       terminals experience a  delay  between  the  time  a  user
       presses the escape key and the time the escape is returned
       to the program.

       The unget_wch function pushes the wide character wch  back
       onto the head of the input queue, so the wide character is
       returned by the next call to get_wch.  The pushback of one
       character  is  guaranteed.  If the program calls unget_wch
       too many times without an intervening call to get_wch, the
       operation may fail.


NOTES

       The  header  file  <curses.h>  automatically  includes the
       header file <stdio.h>.

       Applications should not define the escape key by itself as
       a single-character function.

       When  using  get_wch,  wget_wch, mvget_wch, or mvwget_wch,
       applications should not use nocbreak mode and echo mode at
       the  same  time.  Depending on the state of the tty driver
       when each character is  typed,  the  program  may  produce
       undesirable results.

       All functions except wget_wch and unget_wch may be macros.


RETURN VALUE

       When  get_wch,  wget_wch,  mvget_wch, and mvwget_wch func-
       tions successfully report the pressing of a function  key,
       they return KEY_CODE_YES.  When they successfully report a
       wide character, they return OK.   Otherwise,  they  return
       ERR.

       Upon  successful completion, unget_wch returns OK.  Other-
       wise, the function returns ERR.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


SEE ALSO

       curses(3x),       curs_getch(3x),        curs_ins_wch(3x),
       curs_inopts(3x), curs_move(3x), curs_refresh(3x)



                                                       curs_get_wch(3x)
ncurses-6.0-20160213/doc/html/man/curs_addstr.3x.html0000644000175100001440000001675512653207003020510 0ustar tomusers curs_addstr 3x

curs_addstr 3x

curs_addstr(3x)                                         curs_addstr(3x)




NAME

       addstr, addnstr, waddstr, waddnstr, mvaddstr, mvaddnstr,
       mvwaddstr, mvwaddnstr - add a string of characters to a
       curses window and advance cursor


SYNOPSIS

       #include <curses.h>

       int addstr(const char *str);
       int addnstr(const char *str, int n);
       int waddstr(WINDOW *win, const char *str);
       int waddnstr(WINDOW *win, const char *str, int n);
       int mvaddstr(int y, int x, const char *str);
       int mvaddnstr(int y, int x, const char *str, int n);
       int mvwaddstr(WINDOW *win, int y, int x, const char *str);
       int mvwaddnstr(WINDOW *win, int y, int x, const char *str, int n);


DESCRIPTION

       These  functions  write  the  (null-terminated)  character
       string str on the given window.  It is similar to  calling
       waddch once for each character in the string.

       The  mv  functions  perform  cursor  movement once, before
       writing any characters.  Thereafter,  the  cursor  is  ad-
       vanced as a side-effect of writing to the window.

       The  four  functions  with n as the last argument write at
       most n characters, or until a terminating null is reached.
       If n is -1, then the entire string will be added.


RETURN VALUE

       All  functions  return the integer ERR upon failure and OK
       on success.

       X/Open does not define any error conditions.  This  imple-
       mentation returns an error

       o   if the window pointer is null or

       o   if the string pointer is null or

       o   if the corresponding calls to waddch return an error.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


NOTES

       All of these functions except waddnstr may be macros.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4.


SEE ALSO

       curses(3x), curs_addch(3x).



                                                        curs_addstr(3x)
ncurses-6.0-20160213/doc/html/man/menu_opts.3x.html0000644000175100001440000001417112653207011020171 0ustar tomusers menu_opts 3x

menu_opts 3x

menu_opts(3x)                                             menu_opts(3x)




NAME

       set_menu_opts,  menu_opts_on,  menu_opts_off,  menu_opts -
       set and get menu options


SYNOPSIS

       #include <menu.h>
       int set_menu_opts(MENU *menu, Menu_Options opts);
       int menu_opts_on(MENU *menu, Menu_Options opts);
       int menu_opts_off(MENU *menu, Menu_Options opts);
       Menu_Options menu_opts(const MENU *menu);


DESCRIPTION

       The function  set_menu_opts  sets  all  the  given  menu's
       option  bits  (menu  option  bits  may  be logically-OR'ed
       together).

       The function menu_opts_on turns on the given option  bits,
       and leaves others alone.

       The  function  menu_opts_off  turns  off  the given option
       bits, and leaves others alone.

       The function menu_opts returns the menu's  current  option
       bits.

       The following options are defined (all are on by default):

       O_ONEVALUE
            Only one item can be selected for this menu.

       O_SHOWDESC
            Display  the  item  descriptions  when  the  menu  is
            posted.

       O_ROWMAJOR
            Display the menu in row-major order.

       O_IGNORECASE
            Ignore the case when pattern-matching.

       O_SHOWMATCH
            Move the cursor to within the item  name  while  pat-
            tern-matching.

       O_NONCYCLIC
            Don't   wrap   around  next-item  and  previous-item,
            requests to the other end of the menu.


RETURN VALUE

       Except for menu_opts, each routine returns one of the fol-
       lowing:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_POSTED
            The menu is already posted.


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V  menu  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                          menu_opts(3x)
ncurses-6.0-20160213/doc/html/man/form_field_validation.3x.html0000644000175100001440000002316612653207007022511 0ustar tomusers form_field_validation 3x

form_field_validation 3x

form_field_validation(3x)                     form_field_validation(3x)




NAME

       form_field_validation - data type validation for fields


SYNOPSIS

       #include <form.h>
       int set_field_type(FIELD *field, FIELDTYPE *type, ...);
       FIELDTYPE *field_type(const FIELD *field);
       void *field_arg(const FIELD *field);

       FIELDTYPE *TYPE_ALNUM;
       FIELDTYPE *TYPE_ALPHA;
       FIELDTYPE *TYPE_ENUM;
       FIELDTYPE *TYPE_INTEGER;
       FIELDTYPE *TYPE_NUMERIC;
       FIELDTYPE *TYPE_REGEXP;
       FIELDTYPE *TYPE_IPV4;


DESCRIPTION

       The  function  set_field_type  declares  a data type for a
       given form field.  This is the type checked by  validation
       functions.  The predefined types are as follows:

       TYPE_ALNUM
            Alphanumeric  data.  Requires a third int argument, a
            minimum field width.

       TYPE_ALPHA
            Character data.  Requires a  third  int  argument,  a
            minimum field width.

       TYPE_ENUM
            Accept one of a specified set of strings.  Requires a
            third (char **) argument pointing to a string list; a
            fourth  int flag argument to enable case-sensitivity;
            and a fifth int flag argument  specifying  whether  a
            partial  match  must be a unique one (if this flag is
            off, a prefix matches the first of any  set  of  more
            than  one  list  elements  with  that prefix). Please
            notice that the string list is copied. So you may use
            a  list  that  lives  in  automatic  variables on the
            stack.

       TYPE_INTEGER
            Integer data, parsable  to  an  integer  by  atoi(3).
            Requires  a third int argument controlling the preci-
            sion, a fourth  long  argument  constraining  minimum
            value,  and  a fifth long constraining maximum value.
            If the maximum value is less than  or  equal  to  the
            minimum value, the range is simply ignored. On return
            the field buffer is formatted according to the printf
            format   specification   ".*ld",  where  the  '*'  is
            replaced by the precision argument.  For  details  of
            the precision handling see printf's man-page.

       TYPE_NUMERIC
            Numeric   data   (may  have  a  decimal-point  part).
            Requires a third int argument controlling the  preci-
            sion,  a  fourth double argument constraining minimum
            value, and a fifth double constraining maximum value.
            If  your  system  supports locales, the decimal point
            character to be used must be  the  one  specified  by
            your  locale.   If  the maximum value is less than or
            equal to the  minimum  value,  the  range  is  simply
            ignored.  On  return  the  field  buffer is formatted
            according to the printf format  specification  ".*f",
            where  the '*' is replaced by the precision argument.
            For details of the precision  handling  see  printf's
            man-page.

       TYPE_REGEXP
            Regular  expression data.  Requires a regular expres-
            sion (char *) third argument; the data  is  valid  if
            the  regular  expression matches it.  Regular expres-
            sions are in  the  format  of  regcomp  and  regexec.
            Please  notice that the regular expression must match
            the whole field. If you have  for  example  an  eight
            character wide field, a regular expression "^[0-9]*$"
            always means that you have to fill  all  eight  posi-
            tions with digits. If you want to allow fewer digits,
            you may use for example "^[0-9]* *$"  which  is  good
            for  trailing  spaces  (up  to an empty field), or "^
            *[0-9]* *$" which is good for  leading  and  trailing
            spaces around the digits.

       TYPE_IPV4
            An Internet Protocol Version 4 address. This requires
            no additional argument. It is checked whether or  not
            the  buffer  has  the form a.b.c.d, where a,b,c and d
            are numbers between 0 and 255. Trailing blanks in the
            buffer  are  ignored. The address itself is not vali-
            dated. Please note that this is an ncurses extension.
            This  field type may not be available in other curses
            implementations.

       It is possible to  set  up  new  programmer-defined  field
       types.  See the form_fieldtype(3x) manual page.


RETURN VALUE

       The  functions  field_type  and  field_arg  return NULL on
       error. The function set_field_type returns one of the fol-
       lowing:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), form(3x), form_variables(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                              form_field_validation(3x)
ncurses-6.0-20160213/doc/html/man/curs_variables.3x.html0000644000175100001440000002330512653207006021167 0ustar tomusers curs_variables 3x

curs_variables 3x

curs_variables(3x)                                   curs_variables(3x)




NAME

       COLORS, COLOR_PAIRS, COLS, ESCDELAY, LINES, TABSIZE,
       curscr, newscr, stdscr - curses global variables


SYNOPSIS

       #include <curses.h>

       int COLOR_PAIRS;
       int COLORS;
       int COLS;
       int ESCDELAY;
       int LINES;
       int TABSIZE;
       WINDOW * curscr;
       WINDOW * newscr;
       WINDOW * stdscr;


DESCRIPTION

       This page summarizes variables provided by the curses  li-
       brary.   A more complete description is given in the curs-
       es(3x) manual page.

       Depending on the configuration, these may be actual  vari-
       ables,     or    macros    (see    curs_threads(3x)    and
       curs_opaque(3x)) which provide read-only access  to  curs-
       es's  state.   In  either  case, applications should treat
       them as read-only to avoid confusing the library.


COLOR_PAIRS

       After initializing curses, this variable contains the num-
       ber of color pairs which the terminal can support.  Usual-
       ly the number of color pairs  will  be  the  product  COL-
       ORS*COLORS, however this is not always true:

       o   a  few  terminals  use HLS colors, which do not follow
           this rule

       o   terminals supporting a large number of colors are lim-
           ited  by  the number of color pairs that can be repre-
           sented in a signed short value.


COLORS

       After initializing curses, this variable contains the num-
       ber of colors which the terminal can support.


COLS

       After  initializing  curses,  this  variable  contains the
       width of the screen, i.e., the number of columns.


ESCDELAY

       This variable holds the number of milliseconds to wait af-
       ter reading an escape character, to distinguish between an
       individual escape character entered on the  keyboard  from
       escape  sequences  sent  by cursor- and function-keys (see
       curses(3x).


LINES

       After initializing  curses,  this  variable  contains  the
       height of the screen, i.e., the number of lines.


TABSIZE

       This  variable  holds  the  number  of columns used by the
       curses library when converting a tab character  to  spaces
       as it adds the tab to a window (see curs_addch(3x).


The Current Screen

       This implementation of curses uses a special window curscr
       to record its updates to the terminal screen.


The New Screen

       This implementation of curses uses a special window newscr
       to  hold  updates  to  the terminal screen before applying
       them to curscr.


The Standard Screen

       Upon initializing curses, a default window called  stdscr,
       which  is  the  size  of  the terminal screen, is created.
       Many curses functions use this window.


NOTES

       The   curses   library   is   initialized   using   either
       curs_initscr(3x), or curs_initscr(3x).

       If  curses  is  configured to use separate curses/terminfo
       libraries, most of these variables reside  in  the  curses
       library.


PORTABILITY

       ESCDELAY  and TABSIZE are extensions, not provided in most
       other implementations of curses.

       ESCDELAY is an extension in AIX curses:

       o   In AIX, the units for ESCDELAY are fifths  of  a  mil-
           lisecond.

       o   The default value for AIX's ESCDELAY is 0.1 seconds.

       o   AIX also enforces a limit of 10,000 seconds for ESCDE-
           LAY; this implementation currently has no upper limit.

       This implementation has long used ESCDELAY with  units  of
       milliseconds,  making  it impossible to be completely com-
       patible with AIX.  Likewise, most users have either decid-
       ed to override the value, or rely upon its default value.


SEE ALSO

       curses(3x),       curs_opaque(3x),      curs_terminfo(3x),
       curs_threads(3x), term_variables(3x), terminfo(5).



                                                     curs_variables(3x)
ncurses-6.0-20160213/doc/html/man/curs_border_set.3x.html0000644000175100001440000002652712653207003021355 0ustar tomusers curs_border_set 3x

curs_border_set 3x

curs_border_set(3x)                                 curs_border_set(3x)




NAME

       border_set, wborder_set, box_set, hline_set, whline_set,
       mvhline_set, mvwhline_set, vline_set, wvline_set,
       mvvline_set, mvwvline_set - create curses borders or lines
       using complex characters and renditions


SYNOPSIS

       #include <curses.h>

       int border_set(
          const cchar_t *ls, const cchar_t *rs,
          const cchar_t *ts, const cchar_t *bs,
          const cchar_t *tl, const cchar_t *tr,
          const cchar_t *bl, const cchar_t *br );
       int wborder_set(
          WINDOW *win,
          const cchar_t *ls, const cchar_t *rs,
          const cchar_t *ts, const cchar_t *bs,
          const cchar_t *tl, const cchar_t *tr,
          const cchar_t *bl, const cchar_t *br);
       int box_set(
          WINDOW *win,
          const cchar_t *verch,
          const cchar_t *horch);
       int hline_set(
          const cchar_t *wch, int n);
       int whline_set(
          WINDOW *win,
          const cchar_t *wch, int n);
       int mvhline_set(
          int y, int x,
          const cchar_t *wch, int n);
       int mvwhline_set(
          WINDOW *win,
          int y, int x,
          const cchar_t *wch, int n);
       int vline_set(
          const cchar_t *wch, int n);
       int wvline_set(
          WINDOW *win,
          const cchar_t *wch, int n);
       int mvvline_set(
          int y, int x,
          const cchar_t *wch, int n);
       int mvwvline_set(
          WINDOW *win,
          int y, int x,
          const cchar_t *wch, int n);


DESCRIPTION

       The border_set and wborder_set  functions  draw  a  border
       around  the  edges  of  the  current  or specified window.
       These functions do not change the cursor position, and  do
       not wrap.

       Other  than the window, each argument is a complex charac-
       ter with attributes:
              ls - left side,
              rs - right side,
              ts - top side,
              bs - bottom side,
              tl - top left-hand corner,
              tr - top right-hand corner,
              bl - bottom left-hand corner, and
              br - bottom right-hand corner.

       If any of these arguments is zero, then the  corresponding
       default values (defined in curses.h) are used instead:
              WACS_VLINE,
              WACS_VLINE,
              WACS_HLINE,
              WACS_HLINE,
              WACS_ULCORNER,
              WACS_URCORNER,
              WACS_LLCORNER, and
              WACS_LRCORNER.

       box_set(win, verch, horch); is a shorthand for the follow-
       ing call:

       wborder_set(win, verch, verch,
           horch, horch, NULL, NULL, NULL, NULL);

       The *line_set functions use wch to draw a line starting at
       the current cursor position in the window.  The line is at
       most n characters long or as many as fit into the  window.
       The current cursor position is not changed.

       The  hline_set,  mvhline_set, mvwhline_set, and whline_set
       functions draw a line proceeding toward the last column of
       the same line.

       The  vline_set,  mvvline_set, mvwvline_set, and wvline_set
       functions draw a line proceeding toward the last  line  of
       the window.


NOTES

       Note that border_set, hline_set, mvhline_set, mvvline_set,
       mvwhline_set, mvwvline_set, and vline_set may be macros.


RETURN VALUE

       Upon successful completion,  these  functions  return  OK.
       Otherwise, they return ERR.

       Functions  using  a window parameter return an error if it
       is null.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


SEE ALSO

       ncurses(3x), curs_add_wch(3x), curs_border(3x),  curs_out-
       opts(3x)



                                                    curs_border_set(3x)
ncurses-6.0-20160213/doc/html/man/curs_inchstr.3x.html0000644000175100001440000001713012653207004020666 0ustar tomusers curs_inchstr 3x

curs_inchstr 3x

curs_inchstr(3x)                                       curs_inchstr(3x)




NAME

       inchstr, inchnstr, winchstr, winchnstr, mvinchstr,
       mvinchnstr, mvwinchstr, mvwinchnstr - get a string of
       characters (and attributes) from a curses window


SYNOPSIS

       #include <curses.h>

       int inchstr(chtype *chstr);
       int inchnstr(chtype *chstr, int n);
       int winchstr(WINDOW *win, chtype *chstr);
       int winchnstr(WINDOW *win, chtype *chstr, int n);
       int mvinchstr(int y, int x, chtype *chstr);
       int mvinchnstr(int y, int x, chtype *chstr, int n);
       int mvwinchstr(WINDOW *win, int y, int x, chtype *chstr);
       int  mvwinchnstr(WINDOW *win, int y, int x, chtype *chstr,
       int n);


DESCRIPTION

       These routines return a NULL-terminated  array  of  chtype
       quantities, starting at the current cursor position in the
       named window and ending at the right margin of the window.
       The  four  functions with n as the last argument, return a
       leading substring at most n characters long (exclusive  of
       the  trailing (chtype)0).  Constants defined in <curses.h>
       can be used with the & (logical AND) operator  to  extract
       the  character or the attribute alone from any position in
       the chstr [see curs_inch(3x)].


RETURN VALUE

       All routines return the integer ERR upon  failure  and  an
       integer  value  other  than ERR upon successful completion
       (the number of  characters  retrieved,  exclusive  of  the
       trailing 0).

       No  error  conditions are defined.  If the chstr parameter
       is null, no data is returned, and the return value is  ze-
       ro.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


NOTES

       Note  that  all  routines  except winchnstr may be macros.
       SVr4 does not document whether the result string is  zero-
       terminated;  it  does  not document whether a length limit
       argument includes any trailing 0; and it does not document
       the meaning of the return value.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4.  It is no more specific than the SVr4  documenta-
       tion on the trailing 0.  It does specify that the success-
       ful return of the functions is OK.


SEE ALSO

       curses(3x), curs_inch(3x).

       Comparable functions in the wide-character (ncursesw)  li-
       brary are described in curs_in_wchstr(3x).



                                                       curs_inchstr(3x)
ncurses-6.0-20160213/doc/html/man/form_post.3x.html0000644000175100001440000001335012653207010020165 0ustar tomusers form_post 3x

form_post 3x

form_post(3x)                                             form_post(3x)




NAME

       post_form, unpost_form - write or erase forms from associ-
       ated subwindows


SYNOPSIS

       #include <form.h>
       int post_form(FORM *form);
       int unpost_form(FORM *form);


DESCRIPTION

       The function post_form displays a form to  its  associated
       subwindow.   To trigger physical display of the subwindow,
       use  refresh  or  some  equivalent  curses  routine   (the
       implicit  doupdate  triggered  by  an curses input request
       will do).

       The function unpost_form erases form from  its  associated
       subwindow.


RETURN VALUE

       These routines return one of the following:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_BAD_STATE
            Routine was called from an initialization or termina-
            tion function.

       E_NOT_POSTED
            The form has not been posted.

       E_NOT_CONNECTED
            No items are connected to the form.

       E_NO_ROOM
            Form is too large for its window.

       E_POSTED
            The form has already been posted.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                          form_post(3x)
ncurses-6.0-20160213/doc/html/man/curs_insstr.3x.html0000644000175100001440000001717412653207005020547 0ustar tomusers curs_insstr 3x

curs_insstr 3x

curs_insstr(3x)                                         curs_insstr(3x)




NAME

       insstr,  insnstr,  winsstr, winsnstr, mvinsstr, mvinsnstr,
       mvwinsstr, mvwinsnstr - insert string before cursor  in  a
       curses window


SYNOPSIS

       #include <curses.h>
       int insstr(const char *str);
       int insnstr(const char *str, int n);
       int winsstr(WINDOW *win, const char *str);
       int winsnstr(WINDOW *win, const char *str, int n);
       int mvinsstr(int y, int x, const char *str);
       int mvinsnstr(int y, int x, const char *str, int n);
       int mvwinsstr(WINDOW *win, int y, int x, const char *str);
       int mvwinsnstr(WINDOW *win, int y, int x, const char *str,
       int n);


DESCRIPTION

       These routines insert a character string (as many  charac-
       ters  as  will fit on the line) before the character under
       the cursor.  All characters to the right of the cursor are
       shifted  right with the possibility of the rightmost char-
       acters on the line being lost.  The cursor  position  does
       not  change  (after  moving  to  y, x, if specified).  The
       functions with n as the last  argument  insert  a  leading
       substring  of  at  most  n  characters.  If n<=0, then the
       entire string is inserted.

       Special characters are handled as in addch.


RETURN VALUE

       All routines that return an integer return ERR upon  fail-
       ure  and  OK  (SVr4 specifies only "an integer value other
       than ERR") upon successful  completion,  unless  otherwise
       noted in the preceding routine descriptions.

       X/Open  defines  no error conditions.  In this implementa-
       tion, if the window parameter is null or the str parameter
       is null, an error is returned.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


NOTES

       Note that all but winsnstr may be macros.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4, which adds const qualifiers to the arguments.

       The Single  Unix  Specification,  Version  2  states  that
       insnstr  and  winsnstr perform wrapping.  This is probably
       an error, since it makes this group of functions inconsis-
       tent.   Also,  no  implementation of curses documents this
       inconsistency.


SEE ALSO

       curses(3x), curs_util(3x), curs_clear(3x), curs_inch(3x).



                                                        curs_insstr(3x)
ncurses-6.0-20160213/doc/html/man/curs_touch.3x.html0000644000175100001440000001747512653207006020354 0ustar tomusers curs_touch 3x

curs_touch 3x

curs_touch(3x)                                           curs_touch(3x)




NAME

       touchwin, touchline, untouchwin, wtouchln, is_linetouched,
       is_wintouched - curses refresh control routines


SYNOPSIS

       #include <curses.h>
       int touchwin(WINDOW *win);
       int touchline(WINDOW *win, int start, int count);
       int untouchwin(WINDOW *win);
       int wtouchln(WINDOW *win, int y, int n, int changed);
       bool is_linetouched(WINDOW *win, int line);
       bool is_wintouched(WINDOW *win);


DESCRIPTION

       The touchwin and touchline routines throw away  all  opti-
       mization  information about which parts of the window have
       been touched, by pretending that  the  entire  window  has
       been  drawn  on.   This  is sometimes necessary when using
       overlapping windows, since a change to one window  affects
       the other window, but the records of which lines have been
       changed in the other window do  not  reflect  the  change.
       The  routine touchline only pretends that count lines have
       been changed, beginning with line start.

       The untouchwin routine marks all lines in  the  window  as
       unchanged since the last call to wrefresh.

       The wtouchln routine makes n lines in the window, starting
       at line y, look as if they have (changed=1)  or  have  not
       (changed=0) been changed since the last call to wrefresh.

       The  is_linetouched and is_wintouched routines return TRUE
       if the specified line/window was modified since  the  last
       call  to  wrefresh; otherwise they return FALSE.  In addi-
       tion, is_linetouched returns ERR if line is not valid  for
       the given window.


RETURN VALUE

       All  routines  return  the integer ERR upon failure and an
       integer value other than ERR upon  successful  completion,
       unless  otherwise  noted in the preceding routine descrip-
       tions.

       X/Open does not define any error conditions.  In this  im-
       plementation

              is_linetouched
                   returns  an  error  if  the  window pointer is
                   null, or if the line  number  is  outside  the
                   window.   Note  that ERR is distinct from TRUE
                   and FALSE, which are the normal return  values
                   of this function.

              wtouchln
                   returns  an  error  if  the  window pointer is
                   null, or if the line  number  is  outside  the
                   window.


PORTABILITY

       The  XSI  Curses  standard,  Issue 4 describes these func-
       tions.

       Some historic curses implementations had,  as  an  undocu-
       mented  feature,  the  ability  to  do  the  equivalent of
       clearok(..., 1) by saying touchwin(stdscr)  or  clear(std-
       scr).  This will not work under ncurses.


NOTES

       Note that all routines except wtouchln may be macros.


SEE ALSO

       curses(3x), curs_refresh(3x), curs_variables(3x).



                                                         curs_touch(3x)
ncurses-6.0-20160213/doc/html/man/tic.1m.html0000644000175100001440000005444612653207012016734 0ustar tomusers tic 1m

tic 1m

tic(1m)                                                         tic(1m)




NAME

       tic - the terminfo entry-description compiler


SYNOPSIS

       tic  [-01CDGIKLNTUVacfgqrstx]  [-e names] [-o dir] [-Q[n]]
       [-R subset] [-v[n]] [-w[n]] file


DESCRIPTION

       The tic command translates a  terminfo  file  from  source
       format  into compiled format.  The compiled format is nec-
       essary for use with the library routines in ncurses(3x).

       As described in term(5), the  database  may  be  either  a
       directory  tree  (one file per terminal entry) or a hashed
       database (one record per entry).  The tic  command  writes
       only one type of entry, depending on how it was built:

       o   For  directory  trees,  the top-level directory, e.g.,
           /usr/share/terminfo, specifies  the  location  of  the
           database.

       o   For  hashed  databases,  a filename is needed.  If the
           given file is not found by that name, but can be found
           by adding the suffix ".db", then that is used.

           The  default  name for the hashed database is the same
           as the default directory name  (only  adding  a  ".db"
           suffix).

       In  either  case  (directory or hashed database), tic will
       create the container if it does not exist.  For  a  direc-
       tory,  this  would  be the "terminfo" leaf, versus a "ter-
       minfo.db" file.

       The results are normally placed  in  the  system  terminfo
       database   /usr/share/terminfo.    The  compiled  terminal
       description can be placed in a  different  terminfo  data-
       base.  There are two ways to achieve this:

       o   First,  you  may override the system default either by
           using the -o option, or by setting the  variable  TER-
           MINFO  in  your  shell environment to a valid database
           location.

       o   Secondly, if tic cannot write  in  /usr/share/terminfo
           or  the  location  specified using your TERMINFO vari-
           able, it looks for the directory  $HOME/.terminfo  (or
           hashed  database $HOME/.terminfo.db); if that location
           exists, the entry is placed there.

       Libraries that read terminfo entries are expected to check
       in succession

       o   a  location  specified  with  the TERMINFO environment
           variable,

       o   $HOME/.terminfo,

       o   directories listed in  the  TERMINFO_DIRS  environment
           variable,

       o   a       compiled-in      list      of      directories
           (/usr/local/ncurses/share/terminfo:/usr/share/ter-
           minfo), and

       o   the system terminfo database (/usr/share/terminfo).


OPTIONS

       -0     restricts the output to a single line

       -1     restricts the output to a single column

       -a     tells  tic  to  retain  commented-out  capabilities
              rather than discarding them.  Capabilities are com-
              mented  by prefixing them with a period.  This sets
              the -x option, because it treats the  commented-out
              entries  as  user-defined  names.  If the source is
              termcap, accept the 2-character names  required  by
              version 6.  Otherwise these are ignored.

       -C     Force  source translation to termcap format.  Note:
              this differs from the -C option of  infocmp(1m)  in
              that it does not merely translate capability names,
              but also translates  terminfo  strings  to  termcap
              format.  Capabilities that are not translatable are
              left in the entry under their  terminfo  names  but
              commented  out with two preceding dots.  The actual
              format  used  incorporates  some  improvements  for
              escaped  characters  from  terminfo  format.  For a
              stricter BSD-compatible  translation,  add  the  -K
              option.

              If  this  is combined with -c, tic makes additional
              checks to report cases where the terminfo values do
              not  have an exact equivalent in termcap form.  For
              example:

              o   sgr usually will not convert,  because  termcap
                  lacks  the  ability  to work with more than two
                  parameters, and because termcap lacks  many  of
                  the  arithmetic/logical  operators used in ter-
                  minfo.

              o   capabilities with more than one delay  or  with
                  delays  before  the  end of the string will not
                  convert completely.

       -c     tells tic to only check file for errors,  including
              syntax  problems and bad use links.  If you specify
              -C (-I) with this option, the code will print warn-
              ings about entries which, after use resolution, are
              more than 1023 (4096) bytes long.  Due to  a  fixed
              buffer  length  in older termcap libraries, as well
              as buggy checking for the buffer length (and a doc-
              umented limit in terminfo), these entries may cause
              core dumps with other implementations.

              tic checks string capabilities to ensure that those
              with parameters will be valid expressions.  It does
              this check only for the predefined string capabili-
              ties;  those  which  are defined with the -x option
              are ignored.

       -D     tells tic to print the database locations  that  it
              knows about, and exit.  The first location shown is
              the one to which it would write  compiled  terminal
              descriptions.   If  tic  is  not  able  to  find  a
              writable database location according to  the  rules
              summarized  above,  it  will print a diagnostic and
              exit with an error rather than printing a  list  of
              database locations.

       -e names
              Limit  writes  and  translations  to  the following
              comma-separated list of terminals.  If any name  or
              alias of a terminal matches one of the names in the
              list, the entry will be written  or  translated  as
              normal.   Otherwise no output will be generated for
              it.  The option value is interpreted as a file con-
              taining  the  list  if  it  contains a '/'.  (Note:
              depending on how tic was compiled, this option  may
              require -I or -C.)

       -f     Display  complex  terminfo  strings  which  contain
              if/then/else/endif expressions indented  for  read-
              ability.

       -G     Display  constant  literals  in decimal form rather
              than their character equivalents.

       -g     Display constant character literals in quoted  form
              rather than their decimal equivalents.

       -I     Force source translation to terminfo format.

       -K     Suppress  some  longstanding  ncurses extensions to
              termcap format, e.g., "\s" for space.

       -L     Force source translation to terminfo  format  using
              the long C variable names listed in <term.h>

       -N     Disable smart defaults.  Normally, when translating
              from termcap to terminfo, the compiler makes a num-
              ber  of  assumptions  about  the defaults of string
              capabilities reset1_string,  carriage_return,  cur-
              sor_left,  cursor_down,  scroll_forward,  tab, new-
              line, key_backspace, key_left, and  key_down,  then
              attempts  to  use  obsolete termcap capabilities to
              deduce correct values.  It also normally suppresses
              output of obsolete termcap capabilities such as bs.
              This option forces a more literal translation  that
              also preserves the obsolete capabilities.

       -odir  Write  compiled entries to given database location.
              Overrides the TERMINFO environment variable.

       -Qn    Rather than show source in terminfo (text)  format,
              print  the  compiled (binary) format in hexadecimal
              or base64 form, depending on the option's value:

               1  hexadecimal

               2  base64

               3  hexadecimal and base64

       -q     Suppress comments  and  blank  lines  when  showing
              translated source.

       -Rsubset
              Restrict  output to a given subset.  This option is
              for use with  archaic  versions  of  terminfo  like
              those on SVr1, Ultrix, or HP/UX that do not support
              the full set of SVR4/XSI Curses terminfo; and  out-
              right broken ports like AIX 3.x that have their own
              extensions incompatible with  SVr4/XSI.   Available
              subsets  are  "SVr1",  "Ultrix",  "HP",  "BSD"  and
              "AIX"; see terminfo(5) for details.

       -r     Force entry resolution (so there are  no  remaining
              tc  capabilities)  even  when  doing translation to
              termcap format.  This may be needed if you are pre-
              paring  a  termcap file for a termcap library (such
              as GNU termcap through version 1.3 or  BSD  termcap
              through  4.3BSD)  that  does not handle multiple tc
              capabilities per entry.

       -s     Summarize the compile by showing the database loca-
              tion into which entries are written, and the number
              of entries which are compiled.

       -T     eliminates size-restrictions on the generated text.
              This  is  mainly  useful  for testing and analysis,
              since the compiled descriptions are limited  (e.g.,
              1023 for termcap, 4096 for terminfo).

       -t     tells  tic  to  discard commented-out capabilities.
              Normally when translating from terminfo to termcap,
              untranslatable capabilities are commented-out.

       -U   tells  tic to not post-process the data after parsing
            the source file.  Normally, it infers data  which  is
            commonly  missing in older terminfo data, or in term-
            caps.

       -V   reports the version of ncurses which was used in this
            program, and exits.

       -vn  specifies  that  (verbose) output be written to stan-
            dard error trace information showing tic's  progress.
            The  optional  parameter  n is a number from 1 to 10,
            inclusive, indicating the desired level of detail  of
            information.   If  n is omitted, the default level is
            1.  If n is specified and greater than 1,  the  level
            of detail is increased.

            The debug flag levels are as follows:

            1      Names of files created and linked

            2      Information related to the "use" facility

            3      Statistics from the hashing algorithm

            5      String-table memory allocations

            7      Entries into the string-table

            8      List of tokens encountered by scanner

            9      All  values  computed  in  construction of the
                   hash table

            If the debug level n is not given, it is taken to  be
            one.

       -wn  specifies  the width of the output.  The parameter is
            optional.  If it is omitted, it defaults to 60.

       -x   Treat unknown capabilities as user-defined.  That is,
            if  you  supply  a capability name which tic does not
            recognize, it will infer its type (boolean, number or
            string)  from  the  syntax and make an extended table
            entry  for  that.   User-defined  capability  strings
            whose  name  begins  with "k" are treated as function
            keys.


PARAMETERS

       file   contains one or more terminfo terminal descriptions
              in  source format [see terminfo(5)].  Each descrip-
              tion in the file describes the  capabilities  of  a
              particular terminal.

              If  file  is  "-",  then  the data is read from the
              standard input.  The file parameter may also be the
              path of a character-device.


PROCESSING

       All but one of the capabilities recognized by tic are doc-
       umented in terminfo(5).  The exception is the use capabil-
       ity.

       When  a  use=entry-name  field is discovered in a terminal
       entry currently being compiled, tic reads  in  the  binary
       from  /usr/share/terminfo to complete the entry.  (Entries
       created from file will be used first.  tic duplicates  the
       capabilities in entry-name for the current entry, with the
       exception  of  those  capabilities  that  explicitly   are
       defined in the current entry.

       When    an   entry,   e.g.,   entry_name_1,   contains   a
       use=entry_name_2  field,  any  canceled  capabilities   in
       entry_name_2  must also appear in entry_name_1 before use=
       for these capabilities to be canceled in entry_name_1.

       Total compiled entries cannot exceed 4096 bytes.  The name
       field  cannot  exceed 512 bytes.  Terminal names exceeding
       the maximum alias length (32 characters  on  systems  with
       long filenames, 14 characters otherwise) will be truncated
       to the maximum alias length and a warning message will  be
       printed.


COMPATIBILITY

       There  is  some evidence that historic tic implementations
       treated description fields with no whitespace in  them  as
       additional  aliases  or short names.  This tic does not do
       that, but it does warn  when  description  fields  may  be
       treated that way and check them for dangerous characters.


EXTENSIONS

       Unlike the SVr4 tic command, this implementation can actu-
       ally compile termcap sources.  In fact,  entries  in  ter-
       minfo  and  termcap syntax can be mixed in a single source
       file.  See terminfo(5) for the list of termcap names taken
       to be equivalent to terminfo names.

       The  SVr4  manual  pages  are  not clear on the resolution
       rules for use capabilities.  This  implementation  of  tic
       will find use targets anywhere in the source file, or any-
       where in the file tree rooted at TERMINFO (if TERMINFO  is
       defined), or in the user's $HOME/.terminfo database (if it
       exists), or (finally) anywhere in the system's  file  tree
       of compiled entries.

       The  error  messages from this tic have the same format as
       GNU C error messages, and can be  parsed  by  GNU  Emacs's
       compile facility.

       The  -0,  -1,  -C, -G, -I, -N, -R, -T, -V, -a, -e, -f, -g,
       -o, -r, -s, -t and -x  options  are  not  supported  under
       SVr4.  The SVr4 -c mode does not report bad use links.

       System  V does not compile entries to or read entries from
       your $HOME/.terminfo database unless TERMINFO  is  explic-
       itly set to it.


FILES

       /usr/share/terminfo/?/*
            Compiled terminal description database.


SEE ALSO

       infocmp(1m),    captoinfo(1m),   infotocap(1m),   toe(1m),
       curses(3x), term(5).  terminfo(5).

       This describes ncurses version 6.0 (patch 20160130).


AUTHOR

       Eric S. Raymond <esr@snark.thyrsus.com> and
       Thomas E. Dickey <dickey@invisible-island.net>



                                                                tic(1m)
ncurses-6.0-20160213/doc/html/man/menu_spacing.3x.html0000644000175100001440000001462612653207011020635 0ustar tomusers menu_spacing 3x

menu_spacing 3x

menu_spacing(3x)                                       menu_spacing(3x)




NAME

       set_menu_spacing,  menu_spacing  -  set  and  get  spacing
       between menu items.


SYNOPSIS

       #include <menu.h>
       int set_menu_spacing(MENU *menu,
                            int spc_description,
                            int spc_rows,
                            int spc_columns);
       int menu_spacing(const MENU *menu,
                        int* spc_description,
                        int* spc_rows,
                        int* spc_columns);


DESCRIPTION

       The function set_menu_spacing sets the spacing information
       for  the menu.  Its parameter spc_description controls the
       number of spaces between an item name and an item descrip-
       tion.   It must not be larger than TABSIZE.  The menu sys-
       tem puts in the middle of this spacing area the pad  char-
       acter.   The  remaining parts are filled with spaces.  The
       spc_rows parameter controls the number of  rows  that  are
       used for an item.  It must not be larger than 3.  The menu
       system inserts the blank lines between  item  rows,  these
       lines  will  contain  the pad character in the appropriate
       positions.  The spc_columns parameter controls the  number
       of blanks between columns of items.  It must not be larger
       than TABSIZE.  A value of 0 for  all  the  spacing  values
       resets them to the default, which is 1 for all of them.
       The function menu_spacing passes back the spacing info for
       the menu.  If a pointer is NULL,  this  specific  info  is
       simply not returned.


RETURN VALUE

       Both  routines  return  E_OK on success.  set_menu_spacing
       may return E_POSTED if the menu is posted, or  E_BAD_ARGU-
       MENT if one of the spacing values is out of range.


SEE ALSO

       curses(3x), curs_variables(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on them be  con-
       ditioned using NCURSES_VERSION.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                       menu_spacing(3x)
ncurses-6.0-20160213/doc/html/man/form_variables.3x.html0000644000175100001440000001372412653207010021155 0ustar tomusers form_variables 3x

form_variables 3x

form_variables(3x)                                   form_variables(3x)




NAME

       TYPE_ALNUM, TYPE_ALPHA, TYPE_ENUM, TYPE_INTEGER,
       TYPE_IPV4, TYPE_NUMERIC, TYPE_REGEXP - form system global
       variables


SYNOPSIS

       #include <form.h>

       FIELDTYPE * TYPE_ALNUM;
       FIELDTYPE * TYPE_ALPHA;
       FIELDTYPE * TYPE_ENUM;
       FIELDTYPE * TYPE_INTEGER;
       FIELDTYPE * TYPE_IPV4;
       FIELDTYPE * TYPE_NUMERIC;
       FIELDTYPE * TYPE_REGEXP;


DESCRIPTION

       These  are  building blocks for the form library, defining
       fields that can be created using form_fieldtype(3x).   Each
       provides  functions  for  field- and character-validation,
       according to the given datatype.


TYPE_ALNUM

       This holds alphanumeric data.


TYPE_ALPHA

       This holds alphabetic data.


TYPE_ENUM

       This holds an enumerated type.


TYPE_INTEGER

       This holds a decimal integer.


TYPE_IPV4

       This holds an IPv4 internet address, e.g., "127.0.0.1".


TYPE_NUMERIC

       This holds a decimal number, with optional sign and  deci-
       mal point.


TYPE_REGEXP

       This holds a regular expression.


PORTABILITY

       The  TYPE_IPV4  variable  is  an extension not provided by
       older implementations of the form library.


SEE ALSO

       form(3x).



                                                     form_variables(3x)
ncurses-6.0-20160213/doc/html/man/keyok.3x.html0000644000175100001440000001150712653207010017301 0ustar tomusers keyok 3x

keyok 3x

keyok(3x)                                                     keyok(3x)




NAME

       keyok - enable or disable a keycode


SYNOPSIS

       #include <curses.h>

       int keyok(int keycode, bool enable);


DESCRIPTION

       This is an extension to the curses library.  It permits an
       application to disable specific keycodes, rather than  use
       the  keypad  function  to disable all keycodes.  Keys that
       have been disabled can be re-enabled.


RETURN VALUE

       The keycode  must  be  greater  than  zero,  else  ERR  is
       returned.   If  it  does  not correspond to a defined key,
       then ERR is returned.  If the enable  parameter  is  true,
       then  the  key  must  have  been disabled, and vice versa.
       Otherwise, the function returns OK.


PORTABILITY

       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on them be  con-
       ditioned using NCURSES_VERSION.


SEE ALSO

       define_key(3x).


AUTHOR

       Thomas Dickey.



                                                              keyok(3x)
ncurses-6.0-20160213/doc/html/man/curs_scr_dump.3x.html0000644000175100001440000001637012653207005021036 0ustar tomusers curs_scr_dump 3x

curs_scr_dump 3x

curs_scr_dump(3x)                                     curs_scr_dump(3x)




NAME

       scr_dump, scr_restore, scr_init, scr_set - read (write) a
       curses screen from (to) a file


SYNOPSIS

       #include <curses.h>

       int scr_dump(const char *filename);
       int scr_restore(const char *filename);
       int scr_init(const char *filename);
       int scr_set(const char *filename);


DESCRIPTION

       The scr_dump routine dumps the  current  contents  of  the
       virtual screen to the file filename.

       The  scr_restore  routine  sets  the virtual screen to the
       contents of filename, which must have been  written  using
       scr_dump.   The  next call to doupdate restores the screen
       to the way it looked in the dump file.

       The scr_init routine reads in the contents of filename and
       uses  them  to initialize the curses data structures about
       what the terminal currently has on its screen.  If the da-
       ta is determined to be valid, curses bases its next update
       of the screen on this information rather than clearing the
       screen  and starting from scratch.  scr_init is used after
       initscr or a system call to share the screen with  another
       process  which  has done a scr_dump after its endwin call.
       The data is declared invalid if the terminfo  capabilities
       rmcup and nrrmc exist; also if the terminal has been writ-
       ten to since the preceding scr_dump call.

       The scr_set routine is a combination  of  scr_restore  and
       scr_init.   It  tells  the program that the information in
       filename is what is currently on the screen, and also what
       the  program  wants on the screen.  This can be thought of
       as a screen inheritance function.

       To read (write) a window from (to) a file, use the  getwin
       and putwin routines [see curs_util(3x)].


RETURN VALUE

       All  routines  return  the integer ERR upon failure and OK
       upon success.

       X/Open defines no error conditions.  In  this  implementa-
       tion,  each  will  return  an  error if the file cannot be
       opened.


NOTES

       Note  that  scr_init,  scr_set,  and  scr_restore  may  be
       macros.


PORTABILITY

       The  XSI  Curses  standard, Issue 4, describes these func-
       tions (adding the const qualifiers).

       The SVr4 docs merely say under scr_init that the dump data
       is  also  considered invalid "if the time-stamp of the tty
       is old" but do not define "old".


SEE ALSO

       curses(3x),      curs_initscr(3x),       curs_refresh(3x),
       curs_util(3x), system(3)



                                                      curs_scr_dump(3x)
ncurses-6.0-20160213/doc/html/man/tset.1.html0000644000175100001440000004416312653207013016753 0ustar tomusers tset 1

tset 1

tset(1)                                                         tset(1)




NAME

       tset, reset - terminal initialization


SYNOPSIS

       tset  [-IQVcqrsw] [-] [-e ch] [-i ch] [-k ch] [-m mapping]
       [terminal]
       reset [-IQVcqrsw] [-] [-e ch] [-i ch] [-k ch] [-m mapping]
       [terminal]


DESCRIPTION


tset - initialization

       Tset  initializes  terminals.   Tset  first determines the
       type of terminal that you are using.   This  determination
       is done as follows, using the first terminal type found.

       1. The terminal argument specified on the command line.

       2. The value of the TERM environmental variable.

       3.  (BSD  systems only.) The terminal type associated with
       the standard error output device in  the  /etc/ttys  file.
       (On  System-V-like  UNIXes  and systems using that conven-
       tion, getty does this job by setting TERM according to the
       type passed to it by /etc/inittab.)

       4. The default terminal type, "unknown".

       If  the  terminal  type  was not specified on the command-
       line, the -m option mappings are  then  applied  (see  the
       section  TERMINAL  TYPE  MAPPING  for  more  information).
       Then, if the terminal type begins  with  a  question  mark
       ("?"), the user is prompted for confirmation of the termi-
       nal type.   An  empty  response  confirms  the  type,  or,
       another  type  can be entered to specify a new type.  Once
       the terminal type has been determined, the terminfo  entry
       for  the  terminal  is retrieved.  If no terminfo entry is
       found for the type, the user is prompted for another  ter-
       minal type.

       Once  the  terminfo  entry  is retrieved, the window size,
       backspace, interrupt and line kill characters (among  many
       other things) are set and the terminal and tab initializa-
       tion strings  are  sent  to  the  standard  error  output.
       Finally,  if the erase, interrupt and line kill characters
       have changed, or are not  set  to  their  default  values,
       their  values  are displayed to the standard error output.
       Use the -c or -w option to select only the  window  sizing
       versus  the  other  initialization.   If neither option is
       given, both are assumed.


reset - reinitialization

       When invoked as reset, tset sets cooked  and  echo  modes,
       turns  off cbreak and raw modes, turns on newline transla-
       tion and resets any  unset  special  characters  to  their
       default  values  before  doing the terminal initialization
       described above.  This is  useful  after  a  program  dies
       leaving  a  terminal  in an abnormal state.  Note, you may
       have to type

           <LF>reset<LF>

       (the line-feed character is normally control-J) to get the
       terminal to work, as carriage-return may no longer work in
       the abnormal state.  Also, the  terminal  will  often  not
       echo the command.


OPTIONS

       The options are as follows:

       -c   Set control characters and modes.

       -e   Set the erase character to ch.

       -I   Do  not  send  the  terminal  or  tab  initialization
            strings to the terminal.

       -i   Set the interrupt character to ch.

       -k   Set the line kill character to ch.

       -m   Specify a mapping from a port  type  to  a  terminal.
            See the section TERMINAL TYPE MAPPING for more infor-
            mation.

       -Q   Do not display any values for  the  erase,  interrupt
            and line kill characters.  Normally tset displays the
            values for control characters which differ  from  the
            system's default values.

       -q   The  terminal  type is displayed to the standard out-
            put, and the terminal is not initialized in any  way.
            The option `-' by itself is equivalent but archaic.

       -r   Print the terminal type to the standard error output.

       -s   Print  the  sequence  of shell commands to initialize
            the environment variable TERM to the standard output.
            See the section SETTING THE ENVIRONMENT for details.

       -V   reports the version of ncurses which was used in this
            program, and exits.

       -w   Resize the window  to  match  the  size  deduced  via
            setupterm.   Normally  this  has  no  effect,  unless
            setupterm is not able to detect the window size.

       The arguments for the -e, -i, and -k options may either be
       entered  as  actual characters or by using the `hat' nota-
       tion, i.e., control-h may be specified as "^H" or "^h".


SETTING THE ENVIRONMENT

       It is often desirable  to  enter  the  terminal  type  and
       information  about  the  terminal's  capabilities into the
       shell's environment.  This is done using the -s option.

       When the -s option is specified, the commands to enter the
       information  into  the  shell's environment are written to
       the standard output.  If the SHELL environmental  variable
       ends  in  "csh", the commands are for csh, otherwise, they
       are for sh.  Note, the csh  commands  set  and  unset  the
       shell  variable  noglob,  leaving it unset.  The following
       line in the .login or .profile files will  initialize  the
       environment correctly:

           eval `tset -s options ... `


TERMINAL TYPE MAPPING

       When the terminal is not hardwired into the system (or the
       current system information is incorrect) the terminal type
       derived  from the /etc/ttys file or the TERM environmental
       variable is often something generic like network,  dialup,
       or  unknown.   When tset is used in a startup script it is
       often desirable to provide information about the  type  of
       terminal used on such ports.

       The  purpose  of  the -m option is to map from some set of
       conditions to a terminal type, that is, to tell  tset  "If
       I'm  on this port at a particular speed, guess that I'm on
       that kind of terminal".

       The argument to the -m option consists of an optional port
       type, an optional operator, an optional baud rate specifi-
       cation, an optional colon (":") character and  a  terminal
       type.   The port type is a string (delimited by either the
       operator or the colon character).  The operator may be any
       combination  of  ">", "<", "@", and "!"; ">" means greater
       than, "<" means less than, "@"  means  equal  to  and  "!"
       inverts the sense of the test.  The baud rate is specified
       as a number and is compared with the speed of the standard
       error  output (which should be the control terminal).  The
       terminal type is a string.

       If the terminal type is not specified on the command line,
       the  -m mappings are applied to the terminal type.  If the
       port type and baud rate match the  mapping,  the  terminal
       type  specified  in the mapping replaces the current type.
       If more than one mapping is specified, the first  applica-
       ble mapping is used.

       For    example,    consider    the    following   mapping:
       dialup>9600:vt100.  The port type is dialup , the operator
       is  >, the baud rate specification is 9600, and the termi-
       nal type is vt100.  The result of this mapping is to spec-
       ify that if the terminal type is dialup, and the baud rate
       is greater than 9600 baud, a terminal type of  vt100  will
       be used.

       If no baud rate is specified, the terminal type will match
       any baud rate.  If no port type is specified, the terminal
       type   will   match   any  port  type.   For  example,  -m
       dialup:vt100  -m  :?xterm  will  cause  any  dialup  port,
       regardless of baud rate, to match the terminal type vt100,
       and any non-dialup port type to match  the  terminal  type
       ?xterm.   Note,  because of the leading question mark, the
       user will be queried on a default port as to whether  they
       are actually using an xterm terminal.

       No  whitespace  characters  are permitted in the -m option
       argument.  Also, to avoid problems  with  meta-characters,
       it  is  suggested  that  the  entire -m option argument be
       placed within single quote characters, and that csh  users
       insert  a backslash character ("\") before any exclamation
       marks ("!").


HISTORY

       The tset command appeared in BSD 3.0.  The ncurses  imple-
       mentation  was lightly adapted from the 4.4BSD sources for
       a terminfo environment by Eric S. Raymond <esr@snark.thyr-
       sus.com>.


COMPATIBILITY

       The  tset  utility has been provided for backward-compati-
       bility with BSD environments (under  most  modern  UNIXes,
       /etc/inittab  and  getty(1) can set TERM appropriately for
       each dial-up line; this  obviates  what  was  tset's  most
       important  use).   This implementation behaves like 4.4BSD
       tset, with a few exceptions specified here.

       The -S option of BSD tset no longer works;  it  prints  an
       error message to stderr and dies.  The -s option only sets
       TERM, not TERMCAP.  Both of these changes are because  the
       TERMCAP  variable  is  no longer supported under terminfo-
       based ncurses, which makes tset -S useless (we made it die
       noisily rather than silently induce lossage).

       There  was  an  undocumented  4.4BSD feature that invoking
       tset via a link named `TSET` (or via any other name begin-
       ning  with  an  upper-case letter) set the terminal to use
       upper-case only.  This feature has been omitted.

       The -A, -E, -h, -u and -v options were  deleted  from  the
       tset  utility  in 4.4BSD.  None of them were documented in
       4.3BSD and all are of limited utility at  best.   The  -a,
       -d, and -p options are similarly not documented or useful,
       but were retained as they appear to be in widespread  use.
       It  is  strongly recommended that any usage of these three
       options be changed to use the -m option instead.   The  -n
       option  remains, but has no effect.  The -adnp options are
       therefore omitted from the usage summary above.

       It is still permissible to specify  the  -e,  -i,  and  -k
       options  without arguments, although it is strongly recom-
       mended that such usage be fixed to explicitly specify  the
       character.

       As  of  4.4BSD,  executing tset as reset no longer implies
       the -Q option.  Also, the interaction between the - option
       and the terminal argument in some historic implementations
       of tset has been removed.


ENVIRONMENT

       The tset command uses these environment variables:

       SHELL
            tells tset whether to initialize TERM using sh or csh
            syntax.

       TERM Denotes  your  terminal  type.  Each terminal type is
            distinct, though many are similar.

       TERMCAP
            may denote the location of a termcap database.  If it
            is not an absolute pathname, e.g., begins with a `/',
            tset removes the variable from the environment before
            looking for the terminal description.


FILES

       /etc/ttys
            system  port  name  to terminal type mapping database
            (BSD versions only).

       /usr/share/terminfo
            terminal capability database


SEE ALSO

       csh(1),   sh(1),   stty(1),   curs_terminfo(3x),   tty(4),
       terminfo(5), ttys(5), environ(7)

       This describes ncurses version 6.0 (patch 20160130).



                                                                tset(1)
ncurses-6.0-20160213/doc/html/man/curs_clear.3x.html0000644000175100001440000001732712653207003020311 0ustar tomusers curs_clear 3x

curs_clear 3x

curs_clear(3x)                                           curs_clear(3x)




NAME

       erase, werase, clear, wclear, clrtobot, wclrtobot,
       clrtoeol, wclrtoeol - clear all or part of a curses window


SYNOPSIS

       # include <curses.h>

       int erase(void);
       int werase(WINDOW *win);
       int clear(void);
       int wclear(WINDOW *win);
       int clrtobot(void);
       int wclrtobot(WINDOW *win);
       int clrtoeol(void);
       int wclrtoeol(WINDOW *win);


DESCRIPTION

       The erase and werase routines copy blanks to  every  posi-
       tion in the window, clearing the screen.

       The  clear  and wclear routines are like erase and werase,
       but they also call clearok, so that the screen is  cleared
       completely  on  the  next call to wrefresh for that window
       and repainted from scratch.

       The clrtobot and wclrtobot routines erase from the  cursor
       to the end of screen.  That is, they erase all lines below
       the cursor in the window.  Also, the current line  to  the
       right of the cursor, inclusive, is erased.

       The clrtoeol and wclrtoeol routines erase the current line
       to the right of the cursor, inclusive, to the end  of  the
       current line.

       Blanks created by erasure have the current background ren-
       dition (as set by wbkgdset) merged into them.


RETURN VALUE

       All routines return the integer OK on success and  ERR  on
       failure.   The SVr4.0 manual says "or a non-negative inte-
       ger if immedok is set", but this appears to be an error.

       X/Open defines no error conditions.  In  this  implementa-
       tion, functions using a window pointer parameter return an
       error if it is null.


NOTES

       Note that erase, werase, clear, wclear, clrtobot, and clr-
       toeol may be macros.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4.  The standard specifies that they return  ERR  on
       failure, but specifies no error conditions.

       Some  historic  curses  implementations had, as an undocu-
       mented feature,  the  ability  to  do  the  equivalent  of
       clearok(...,  1)  by saying touchwin(stdscr) or clear(std-
       scr).  This will not work under ncurses.

       This implementation, and others such as Solaris, sets  the
       current  position  to  0,0  after erasing via werase() and
       wclear().  That fact is not documented in other  implemen-
       tations, and may not be true of implementations which were
       not derived from SVr4 source.

       Not obvious from  the  description,  most  implementations
       clear  the screen after wclear even for a subwindow or de-
       rived window.  If you do not want to clear the screen dur-
       ing the next wrefresh, use werase instead.


SEE ALSO

       curses(3x), curs_outopts(3x), curs_refresh(3x), curs_vari-
       ables(3x)



                                                         curs_clear(3x)
ncurses-6.0-20160213/doc/html/man/form.3x.html0000644000175100001440000003651012653207007017131 0ustar tomusers form 3x

form 3x

form(3x)                                                       form(3x)




NAME

       form - curses extension for programming forms


SYNOPSIS

       #include <form.h>


DESCRIPTION

       The  form library provides terminal-independent facilities
       for composing form screens  on  character-cell  terminals.
       The  library  includes:  field  routines, which create and
       modify form fields; and form routines, which group  fields
       into forms, display forms on the screen, and handle inter-
       action with the user.

       The form library uses the curses libraries.   To  use  the
       form library, link with the options -lform -lcurses.

       Your program should set up the locale, e.g.,

            setlocale(LC_ALL, "");

       so that input/output processing will work.

       A  curses  initialization  routine such as initscr must be
       called before using any of these functions.


Current Default Values for Field Attributes

       The form library  maintains  a  default  value  for  field
       attributes.   You  can  get or set this default by calling
       the appropriate set_ or  retrieval  routine  with  a  NULL
       field pointer.  Changing this default with a set_ function
       affects future field creations, but does  not  change  the
       rendering of fields already created.


Routine Name Index

       The  following  table lists each form routine and the name
       of the manual page on which it is described.

       curses Routine Name    Manual Page Name
       -------------------------------------------------
       current_field          form_page(3x)
       data_ahead             form_data(3x)
       data_behind            form_data(3x)
       dup_field              form_field_new(3x)
       dynamic_field_info     form_field_info(3x)
       field_arg              form_field_validation(3x)
       field_back             form_field_attributes(3x)
       field_buffer           form_field_buffer(3x)
       field_count            form_field(3x)
       field_fore             form_field_attributes(3x)
       field_index            form_page(3x)
       field_info             form_field_info(3x)
       field_init             form_hook(3x)
       field_just             form_field_just(3x)
       field_opts             form_field_opts(3x)
       field_opts_off         form_field_opts(3x)
       field_opts_on          form_field_opts(3x)
       field_pad              form_field_attributes(3x)
       field_status           form_field_buffer(3x)
       field_term             form_hook(3x)
       field_type             form_field_validation(3x)

       field_userptr          form_field_userptr(3x)
       form_driver            form_driver(3x)
       form_driver_w          form_driver(3x)*
       form_fields            form_field(3x)
       form_init              form_hook(3x)
       form_opts              form_opts(3x)
       form_opts_off          form_opts(3x)
       form_opts_on           form_opts(3x)
       form_page              form_page(3x)
       form_request_by_name   form_requestname(3x)
       form_request_name      form_requestname(3x)
       form_sub               form_win(3x)
       form_term              form_hook(3x)
       form_userptr           form_userptr(3x)
       form_win               form_win(3x)
       free_field             form_field_new(3x)
       free_fieldtype         form_fieldtype(3x)
       free_form              form_new(3x)
       link_field             form_field_new(3x)
       link_fieldtype         form_fieldtype(3x)
       move_field             form_field(3x)
       new_field              form_field_new(3x)
       new_fieldtype          form_fieldtype(3x)
       new_form               form_new(3x)
       new_page               form_new_page(3x)
       pos_form_cursor        form_cursor(3x)
       post_form              form_post(3x)
       scale_form             form_win(3x)
       set_current_field      form_page(3x)
       set_field_back         form_field_attributes(3x)
       set_field_buffer       form_field_buffer(3x)
       set_field_fore         form_field_attributes(3x)
       set_field_init         form_hook(3x)
       set_field_just         form_field_just(3x)
       set_field_opts         form_field_opts(3x)
       set_field_pad          form_field_attributes(3x)
       set_field_status       form_field_buffer(3x)
       set_field_term         form_hook(3x)
       set_field_type         form_field_validation(3x)
       set_field_userptr      form_field_userptr(3x)
       set_fieldtype_arg      form_fieldtype(3x)
       set_fieldtype_choice   form_fieldtype(3x)
       set_form_fields        form_field(3x)
       set_form_init          form_hook(3x)
       set_form_opts          form_field_opts(3x)
       set_form_page          form_page(3x)
       set_form_sub           form_win(3x)
       set_form_term          form_hook(3x)
       set_form_userptr       form_userptr(3x)
       set_form_win           form_win(3x)
       set_max_field          form_field_buffer(3x)
       set_new_page           form_new_page(3x)
       unpost_form            form_post(3x)


RETURN VALUE

       Routines that return pointers return NULL  on  error,  and
       set  errno  to  the  corresponding  error-code returned by
       functions returning an integer.  Routines that  return  an
       integer return one of the following error codes:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.

       E_BAD_STATE
            Routine was called from an initialization or termina-
            tion function.

       E_CONNECTED
            The field is already connected to a form.

       E_INVALID_FIELD
            Contents of a field are not valid.

       E_NOT_CONNECTED
            No fields are connected to the form.

       E_NOT_POSTED
            The form has not been posted.

       E_NO_ROOM
            Form is too large for its window.

       E_POSTED
            The form is already posted.

       E_REQUEST_DENIED
            The form driver could not process the request.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_UNKNOWN_COMMAND
            The form driver code saw an unknown request code.


NOTES

       The header file <form.h> automatically includes the header
       files <curses.h> and <eti.h>.

       In your library list, libform.a  should  be  before  libn-
       curses.a; that is, you want to say `-lform -lncurses', not
       the other way around (which would give you  a  link  error
       using most linkers).


PORTABILITY

       These  routines  emulate the System V forms library.  They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen Pfeifer.  Manual pages and adaptation for  ncurses
       by Eric S. Raymond.


SEE ALSO

       curses(3x) and related pages whose names begin "form_" for
       detailed descriptions of the entry points.

       This describes ncurses version 6.0 (patch 20160130).



                                                               form(3x)
ncurses-6.0-20160213/doc/html/man/form_fieldtype.3x.html0000644000175100001440000002141212653207007021171 0ustar tomusers form_fieldtype 3x

form_fieldtype 3x

form_fieldtype(3x)                                   form_fieldtype(3x)




NAME

       form_fieldtype - define validation-field types


SYNOPSIS

       #include <form.h>
       FIELDTYPE *new_fieldtype(
           bool (* const field_check)(FIELD *, const void *),
           bool (* const char_check)(int, const void *));
       int free_fieldtype(FIELDTYPE *fieldtype);
       int set_fieldtype_arg(
           FIELDTYPE *fieldtype,
           void *(* const make_arg)(va_list *),
           void *(* const copy_arg)(const void *),
           void  (* const free_arg)(void *));
       int set_fieldtype_choice(
           FIELDTYPE *fieldtype,
           bool (* const next_choice)(FIELD *, const void *),
           bool (* const prev_choice)(FIELD *, const void *));
       FIELDTYPE *link_fieldtype(FIELDTYPE *type1,
                                 FIELDTYPE *type2);


DESCRIPTION

       The function new_fieldtype creates a new field type usable
       for data validation.  You supply it  with  field_check,  a
       predicate  to check the validity of an entered data string
       whenever the user attempts to leave a field.   The  (FIELD
       *)  argument  is passed in so the validation predicate can
       see the field's buffer, sizes and  other  attributes;  the
       second  argument  is  an  argument-block  structure, about
       which more below.

       You also supply new_fieldtype with char_check, a  function
       to  validate input characters as they are entered; it will
       be passed the character to be checked and a pointer to  an
       argument-block structure.

       The  function free_fieldtype frees the space allocated for
       a given validation type.

       The function set_fieldtype_arg associates  three  storage-
       management  functions  with  a  field  type.  The make_arg
       function is automatically applied to the list of arguments
       you  give  set_field_type  when  attaching validation to a
       field; its job is to bundle these into an allocated  argu-
       ment-block  object which can later be passed to validation
       predicated.  The other two hook arguments should copy  and
       free  argument-block structures.  They will be used by the
       forms-driver code.  You must supply the make_arg function,
       the  other two are optional, you may supply NULL for them.
       In this case it is assumed that make_arg does not allocate
       memory  but simply loads the argument into a single scalar
       value.

       The function link_fieldtype creates a new field type  from
       the  two  given  types.   They are connected by an logical
       'OR'.

       The   form    driver    requests    REQ_NEXT_CHOICE    and
       REQ_PREV_CHOICE assume that the possible values of a field
       form an ordered set, and provide the forms user with a way
       to  move  through the set.  The set_fieldtype_choice func-
       tion allows forms programmers to define successor and pre-
       decessor  functions  for  the field type.  These functions
       take the field pointer and an argument-block structure  as
       arguments.


RETURN VALUE

       The  pointer-valued  routines  return NULL on error.  They
       set errno according to their success:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_SYSTEM_ERROR
            System error occurred, e.g., malloc failure.

       The  integer-valued  routines  return one of the following
       codes on error:

       E_OK The routine succeeded.

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_CONNECTED
            The field is already connected to a form.

       E_CURRENT
            The field is the current field.

       E_SYSTEM_ERROR
            System error occurred (see errno).


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.

       All of the (char *) arguments of  these  functions  should
       actually  be (void *).  The type has been left uncorrected
       for strict compatibility with System V.


PORTABILITY

       These routines emulate the System V forms  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                     form_fieldtype(3x)
ncurses-6.0-20160213/doc/html/man/adacurses-config.1.html0000644000175100001440000001410612467743547021227 0ustar tomusers ADACURSES 1 User Commands

ADACURSES 1 User Commands


ADACURSES(1)                 User Commands                 ADACURSES(1)




NAME

       adacurses-config - helper script for AdaCurses libraries


SYNOPSIS

       adacurses-config [options]


DESCRIPTION

       This  is  a  shell  script which simplifies configuring an
       application  to  use  the  AdaCurses  library  binding  to
       ncurses.


OPTIONS

       --cflags
              echos  the gnat (Ada compiler) flags needed to com-
              pile with AdaCurses.

       --libs echos  the  gnat  libraries  needed  to  link  with
              AdaCurses.

       --version
              echos  the release+patchdate version of the ncurses
              libraries used to configure and build AdaCurses.

       --help prints a  list  of  the  adacurses-config  script's
              options.

       If  no options are given, adacurses-config prints the com-
       bination of --cflags and --libs that gnatmake expects (see
       example).


EXAMPLE

       For example, supposing that you want to compile the "Hello
       World!"   program  for  AdaCurses.   Make  a  file   named
       "hello.adb":
              with Terminal_Interface.Curses; use Terminal_Interface.Curses;

              procedure Hello is

                 Visibility : Cursor_Visibility := Invisible;
                 done : Boolean := False;
                 c : Key_Code;

              begin

                 Init_Screen;
                 Set_Echo_Mode (False);

                 Set_Cursor_Visibility (Visibility);
                 Set_Timeout_Mode (Standard_Window, Non_Blocking, 0);

                 Move_Cursor (Line => Lines / 2, Column => (Columns - 12) / 2);
                 Add (Str => "Hello World!");

                 while not done loop

                    c := Get_Keystroke (Standard_Window);
                    case c is
                    when Character'Pos ('q') => done := True;
                    when others => null;
                    end case;

                    Nap_Milli_Seconds (50);

                 end loop;

                 End_Windows;

              end Hello;

       Then, using
              gnatmake  `adacurses-config  --cflags` hello -largs
              `adacurses-config --libs`

       or (simpler):
              gnatmake hello `adacurses-config`

       you will compile and link the program.


SEE ALSO

       curses(3x)

       This describes ncurses version 5.9 (patch 20150215).



                                                           ADACURSES(1)
ncurses-6.0-20160213/doc/html/man/curs_extend.3x.html0000644000175100001440000001355212653207004020507 0ustar tomusers curs_extend 3x

curs_extend 3x

curs_extend(3x)                                         curs_extend(3x)




NAME

       curses_version,  use_extended_names - miscellaneous curses
       extensions


SYNOPSIS

       #include <curses.h>

       const char * curses_version(void);
       int use_extended_names(bool enable);


DESCRIPTION

       These functions are extensions to the curses library which
       do not fit easily into other categories.

       Use  curses_version() to get the version number, including
       patch level of the library, e.g., 5.0.19991023

       The use_extended_names()  function  controls  whether  the
       calling  application  is  able to use user-defined or non-
       standard names which may be  compiled  into  the  terminfo
       description, i.e., via the terminfo or termcap interfaces.
       Normally these names are  available  for  use,  since  the
       essential  decision  is made by using the -x option of tic
       to compile extended terminal definitions.  However you can
       disable  this  feature  to ensure compatibility with other
       implementations of curses.


PORTABILITY

       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on them be  con-
       ditioned using NCURSES_VERSION.


SEE ALSO

       curs_getch(3x),       curs_mouse(3x),      curs_print(3x),
       curs_util(3x),  default_colors(3x),  define_key(3x),  key-
       bound(3x), keyok(3x), resizeterm(3x), wresize(3x).


AUTHOR

       Thomas Dickey.



                                                        curs_extend(3x)
ncurses-6.0-20160213/doc/html/man/menu_attributes.3x.html0000644000175100001440000001513012653207010021365 0ustar tomusers menu_attributes 3x

menu_attributes 3x

menu_attributes(3x)                                 menu_attributes(3x)




NAME

       menu_back,  menu_fore, menu_grey, menu_pad, set_menu_back,
       set_menu_fore, set_menu_grey,  set_menu_pad  -  color  and
       attribute control for menus


SYNOPSIS

       #include <menu.h>
       int set_menu_fore(MENU *menu, chtype attr);
       chtype menu_fore(const MENU *menu);
       int set_menu_back(MENU *menu, chtype attr);
       chtype menu_back(const MENU *menu);
       int set_menu_grey(MENU *menu, chtype attr);
       chtype menu_grey(const MENU *menu);
       int set_menu_pad(MENU *menu, int pad);
       int menu_pad(const MENU *menu);


DESCRIPTION

       The  function  set_menu_fore sets the foreground attribute
       of menu. This is the  highlight  used  for  selected  menu
       items.   menu_fore  returns the foreground attribute.  The
       default is A_REVERSE.

       The function set_menu_back sets the  background  attribute
       of  menu.  This  is the highlight used for selectable (but
       not  currently  selected)  menu   items.    The   function
       menu_back  returns  the background attribute.  The default
       is A_NORMAL.

       The function set_menu_grey  sets  the  grey  attribute  of
       menu.  This  is  the highlight used for un-selectable menu
       items in menus that permit more than one  selection.   The
       function   menu_grey  returns  the  grey  attribute.   The
       default is A_UNDERLINE.

       The function set_menu_pad sets the character used to  fill
       the space between the name and description parts of a menu
       item.  menu_pad returns the given  menu's  pad  character.
       The default is a blank.


RETURN VALUE

       These routines return one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine  detected  an incorrect or out-of-range argu-
            ment.


SEE ALSO

       curses(3x) and related pages whose names begin "menu_" for
       detailed descriptions of the entry points.


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V  menu  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                    menu_attributes(3x)
ncurses-6.0-20160213/doc/html/man/form_requestname.3x.html0000644000175100001440000001240012653207010021524 0ustar tomusers form_requestname 3x

form_requestname 3x

form_requestname(3x)                               form_requestname(3x)




NAME

       form_request_by_name, form_request_name - handle printable
       form request names


SYNOPSIS

       #include <form.h>
       const char *form_request_name(int request);
       int form_request_by_name(const char *name);


DESCRIPTION

       The function form_request_name returns the printable  name
       of a form request code.
       The function form_request_by_name searches in the name-ta-
       ble for a request with the  given  name  and  returns  its
       request code. Otherwise E_NO_MATCH is returned.


RETURN VALUE

       form_request_name  returns NULL on error and sets errno to
       E_BAD_ARGUMENT.
       form_request_by_name returns E_NO_MATCH on error.  It does
       not set errno.


SEE ALSO

       curses(3x), form(3x).


NOTES

       The header file <form.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on them be  con-
       ditioned using NCURSES_VERSION.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                   form_requestname(3x)
ncurses-6.0-20160213/doc/html/man/curs_bkgd.3x.html0000644000175100001440000001630712653207003020127 0ustar tomusers curs_bkgd 3x

curs_bkgd 3x

curs_bkgd(3x)                                             curs_bkgd(3x)




NAME

       bkgdset,  wbkgdset,  bkgd,  wbkgd, getbkgd - curses window
       background manipulation routines


SYNOPSIS

       #include <curses.h>

       void bkgdset(chtype ch);
       void wbkgdset(WINDOW *win, chtype ch);
       int bkgd(chtype ch);
       int wbkgd(WINDOW *win, chtype ch);
       chtype getbkgd(WINDOW *win);


DESCRIPTION


bkgdset

       The bkgdset and wbkgdset  routines  manipulate  the  back-
       ground  of  the  named window.  The window background is a
       chtype consisting of any combination of attributes  (i.e.,
       rendition)  and  a  character.   The attribute part of the
       background is combined (OR'ed) with all non-blank  charac-
       ters  that  are written into the window with waddch.  Both
       the character and attribute parts of  the  background  are
       combined   with  the  blank  characters.   The  background
       becomes a property of the character  and  moves  with  the
       character   through   any   scrolling   and  insert/delete
       line/character operations.

       To the extent  possible  on  a  particular  terminal,  the
       attribute  part  of  the  background  is  displayed as the
       graphic rendition of the character put on the screen.


bkgd

       The bkgd and wbkgd functions set the  background  property
       of  the  current  or  specified window and then apply this
       setting to every character position in that window:

       o   The rendition of every  character  on  the  screen  is
           changed to the new background rendition.

       o   Wherever  the  former background character appears, it
           is changed to the new background character.


getbkgd

       The getbkgd function returns the  given  window's  current
       background character/attribute pair.


RETURN VALUE

       The  routines  bkgd  and wbkgd return the integer OK.  The
       SVr4.0 manual says "or a non-negative integer  if  immedok
       is set", but this appears to be an error.


NOTES

       Note that bkgdset and bkgd may be macros.


PORTABILITY

       These  functions are described in the XSI Curses standard,
       Issue 4.  It specifies that bkgd and wbkgd return  ERR  on
       failure, but gives no failure conditions.


SEE ALSO

       curses(3x), curs_addch(3x), curs_attr(3x), curs_out-
       opts(3x)



                                                          curs_bkgd(3x)
ncurses-6.0-20160213/doc/html/man/curs_add_wch.3x.html0000644000175100001440000003372512653207003020614 0ustar tomusers curs_add_wch 3x

curs_add_wch 3x

curs_add_wch(3x)                                       curs_add_wch(3x)




NAME

       add_wch,   wadd_wch,  mvadd_wch,  mvwadd_wch,  echo_wchar,
       wecho_wchar - add a complex character and rendition  to  a
       curses window, then advance the cursor


SYNOPSIS

       #include <curses.h>

       int add_wch( const cchar_t *wch );
       int wadd_wch( WINDOW *win, const cchar_t *wch );
       int mvadd_wch( int y, int x, const cchar_t *wch );
       int  mvwadd_wch(  WINDOW *win, int y, int x, const cchar_t
       *wch );
       int echo_wchar( const cchar_t *wch );
       int wecho_wchar( WINDOW *win, const cchar_t *wch );


DESCRIPTION


add_wch

       The add_wch, wadd_wch, mvadd_wch, and mvwadd_wch functions
       put the complex character wch into the given window at its
       current position, which is then advanced.  These functions
       perform  wrapping and special-character processing as fol-
       lows:

       o   If wch refers to a spacing character, then any  previ-
           ous  character  at  that  location  is removed.  A new
           character specified by wch is placed at that  location
           with  rendition  specified  by  wch.   The cursor then
           advances to the next spacing character on the screen.

       o   If wch refers to a non-spacing character, all previous
           characters  at  that location are preserved.  The non-
           spacing characters of wch are  added  to  the  spacing
           complex  character, and the rendition specified by wch
           is ignored.

       o   If the character  part  of  wch  is  a  tab,  newline,
           backspace  or  other  control character, the window is
           updated and the cursor moves as if addch were called.


echo_wchar

       The echo_wchar function is functionally  equivalent  to  a
       call to add_wch followed by a call to refresh.  Similarly,
       the wecho_wchar is functionally equivalent to  a  call  to
       wadd_wch  followed  by  a call to wrefresh.  The knowledge
       that only a single character is being output is taken into
       consideration and, for non-control characters, a consider-
       able performance gain might be seen by  using  the  *echo*
       functions instead of their equivalents.


Line Graphics

       Like  curs_addch(3x),  addch_wch  accepts symbols which make it
       simple to draw lines and  other  frequently  used  special
       characters.   These  symbols  correspond to the same VT100
       line-drawing set as curs_addch(3x).

       Name              Unicode    Default   Description
       ----------------------------------------------------------------
       WACS_BLOCK        0x25ae     #         solid square block
       WACS_BOARD        0x2592     #         board of squares
       WACS_BTEE         0x2534     +         bottom tee

       WACS_BULLET       0x00b7     o         bullet
       WACS_CKBOARD      0x2592     :         checker board (stipple)
       WACS_DARROW       0x2193     v         arrow pointing down
       WACS_DEGREE       0x00b0     '         degree symbol
       WACS_DIAMOND      0x25c6     +         diamond
       WACS_GEQUAL       0x2265     >         greater-than-or-equal-to
       WACS_HLINE        0x2500     -         horizontal line
       WACS_LANTERN      0x2603     #         lantern symbol
       WACS_LARROW       0x2190     <         arrow pointing left
       WACS_LEQUAL       0x2264     <         less-than-or-equal-to
       WACS_LLCORNER     0x2514     +         lower left-hand corner
       WACS_LRCORNER     0x2518     +         lower right-hand corner
       WACS_LTEE         0x2524     +         left tee
       WACS_NEQUAL       0x2260     !         not-equal
       WACS_PI           0x03c0     *         greek pi
       WACS_PLMINUS      0x00b1     #         plus/minus
       WACS_PLUS         0x253c     +         plus
       WACS_RARROW       0x2192     >         arrow pointing right
       WACS_RTEE         0x251c     +         right tee
       WACS_S1           0x23ba     -         scan line 1
       WACS_S3           0x23bb     -         scan line 3
       WACS_S7           0x23bc     -         scan line 7
       WACS_S9           0x23bd     _         scan line 9
       WACS_STERLING     0x00a3     f         pound-sterling symbol
       WACS_TTEE         0x252c     +         top tee
       WACS_UARROW       0x2191     ^         arrow pointing up
       WACS_ULCORNER     0x250c     +         upper left-hand corner
       WACS_URCORNER     0x2510     +         upper right-hand corner
       WACS_VLINE        0x2502     |         vertical line

       The wide-character configuration of ncurses  also  defines
       symbols for thick- and double-lines:

       Name              Unicode   Default   Description
       ---------------------------------------------------------------------
       WACS_T_ULCORNER   0x250f    +         thick upper left corner
       WACS_T_LLCORNER   0x2517    +         thick lower left corner
       WACS_T_URCORNER   0x2513    +         thick upper right corner
       WACS_T_LRCORNER   0x251b    +         thick lower right corner
       WACS_T_LTEE       0x252b    +         thick tee pointing right
       WACS_T_RTEE       0x2523    +         thick tee pointing left
       WACS_T_BTEE       0x253b    +         thick tee pointing up
       WACS_T_TTEE       0x2533    +         thick tee pointing down
       WACS_T_HLINE      0x2501    -         thick horizontal line
       WACS_T_VLINE      0x2503    |         thick vertical line
       WACS_T_PLUS       0x254b    +         thick large plus or crossover
       WACS_D_ULCORNER   0x2554    +         double upper left corner
       WACS_D_LLCORNER   0x255a    +         double lower left corner
       WACS_D_URCORNER   0x2557    +         double upper right corner
       WACS_D_LRCORNER   0x255d    +         double lower right corner
       WACS_D_RTEE       0x2563    +         double tee pointing left
       WACS_D_LTEE       0x2560    +         double tee pointing right
       WACS_D_BTEE       0x2569    +         double tee pointing up
       WACS_D_TTEE       0x2566    +         double tee pointing down
       WACS_D_HLINE      0x2550    -         double horizontal line
       WACS_D_VLINE      0x2551    |         double vertical line
       WACS_D_PLUS       0x256c    +         double large plus or crossover


RETURN VALUE

       All routines return the integer ERR upon failure and OK on
       success.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


NOTES

       Note that add_wch, mvadd_wch, mvwadd_wch,  and  echo_wchar
       may be macros.


PORTABILITY

       All  of  these  functions  are described in the XSI Curses
       standard, Issue 4.  The defaults specified for  line-draw-
       ing characters apply in the POSIX locale.

       X/Open Curses makes it clear that the WACS_ symbols should
       be defined as a pointer to cchar_t data, e.g., in the dis-
       cussion of border_set.  A few implementations are problem-
       atic:

       o   NetBSD curses defines the symbols as a wchar_t  within
           a cchar_t.

       o   HPUX  curses  equates  some of the ACS_ symbols to the
           analogous WACS_ symbols as if the  ACS_  symbols  were
           wide  characters.   The  misdefined  symbols  are  the
           arrows and other symbols which are not used for  line-
           drawing.

       X/Open  Curses  does not define symbols for thick- or dou-
       ble-lines.   SVr4  curses  implementations  defined  their
       line-drawing  symbols  in  terms  of intermediate symbols.
       This implementation extends those symbols,  providing  new
       definitions which are not in the SVr4 implementations.


SEE ALSO

       curses(3x), curs_addch(3x), curs_attr(3x), curs_clear(3x),
       curs_outopts(3x), curs_refresh(3x), putwc(3)



                                                       curs_add_wch(3x)
ncurses-6.0-20160213/doc/html/man/define_key.3x.html0000644000175100001440000001224212653207006020263 0ustar tomusers define_key 3x

define_key 3x

define_key(3x)                                           define_key(3x)




NAME

       define_key - define a keycode


SYNOPSIS

       #include <curses.h>

       int define_key(const char *definition, int keycode);


DESCRIPTION

       This is an extension to the curses library.  It permits an
       application to define keycodes  with  their  corresponding
       control  strings,  so that the ncurses library will inter-
       pret them just as it would the  predefined  codes  in  the
       terminfo database.

       If  the  given string is null, any existing definition for
       the keycode is removed.  Similarly, if the  given  keycode
       is  negative  or  zero,  any existing string for the given
       definition is removed.


RETURN VALUE

       The keycode must be greater than zero, and the string non-
       null, otherwise ERR is returned.  ERR may also be returned
       if there is insufficient memory to allocate  the  data  to
       store  the  definition.   If  no  error is detected, OK is
       returned.


PORTABILITY

       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on them be  con-
       ditioned using NCURSES_VERSION.


SEE ALSO

       keyok(3x), key_defined(3x).


AUTHOR

       Thomas Dickey.



                                                         define_key(3x)
ncurses-6.0-20160213/doc/html/man/curs_addch.3x.html0000644000175100001440000003350112653207003020256 0ustar tomusers curs_addch 3x

curs_addch 3x

curs_addch(3x)                                           curs_addch(3x)




NAME

       addch,  waddch,  mvaddch,  mvwaddch, echochar, wechochar -
       add a character (with attributes) to a curses window, then
       advance the cursor


SYNOPSIS

       #include <curses.h>

       int addch(const chtype ch);
       int waddch(WINDOW *win, const chtype ch);
       int mvaddch(int y, int x, const chtype ch);
       int mvwaddch(WINDOW *win, int y, int x, const chtype ch);
       int echochar(const chtype ch);
       int wechochar(WINDOW *win, const chtype ch);


DESCRIPTION


Adding characters

       The  addch,  waddch, mvaddch and mvwaddch routines put the
       character ch into the given window at its  current  window
       position,  which  is then advanced.  They are analogous to
       putchar in stdio(3).  If the advance is at the right  mar-
       gin:

       o   The cursor automatically wraps to the beginning of the
           next line.

       o   At the bottom of the current scrolling region, and  if
           scrollok  is enabled, the scrolling region is scrolled
           up one line.

       o   If scrollok is not enabled, writing a character at the
           lower  right  margin  succeeds.   However, an error is
           returned because it is not possible to wrap to  a  new
           line

       If ch is a tab, newline, carriage return or backspace, the
       cursor is moved appropriately within the window:

       o   Backspace moves the cursor one character left; at  the
           left edge of a window it does nothing.

       o   Carriage  return  moves  the cursor to the window left
           margin on the current line.

       o   Newline does a clrtoeol, then moves the cursor to  the
           window  left  margin  on  the next line, scrolling the
           window if on the last line.

       o   Tabs are considered to be at every eighth column.  The
           tab  interval  may  be  altered by setting the TABSIZE
           variable.

       If ch is any other control character, it is  drawn  in  ^X
       notation.   Calling winch after adding a control character
       does not return the character itself, but instead  returns
       the ^-representation of the control character.

       Video attributes can be combined with a character argument
       passed to addch or related functions by logical-ORing them
       into  the  character.   (Thus, text, including attributes,
       can be copied from one place to  another  using  inch  and
       addch.)   See  the curs_attr(3x) page for values of prede-
       fined video attribute constants that can be usefully OR'ed
       into characters.


Echoing characters

       The  echochar  and  wechochar routines are equivalent to a
       call to addch followed by a call to refresh, or a call  to
       waddch followed by a call to wrefresh.  The knowledge that
       only a single character is being output is used  and,  for
       non-control  characters,  a  considerable performance gain
       may be seen by  using  these  routines  instead  of  their
       equivalents.


Line Graphics

       The  following  variables  may be used to add line drawing
       characters to the screen with routines of the  addch  fam-
       ily.   The  default  character listed below is used if the
       acsc  capability  does  not  define  a   terminal-specific
       replacement for it, or if the terminal and locale configu-
       ration requires Unicode but the library is unable  to  use
       Unicode.

       The names are taken from VT100 nomenclature.

       Name           Default   Description
       --------------------------------------------------
       ACS_BLOCK      #         solid square block
       ACS_BOARD      #         board of squares
       ACS_BTEE       +         bottom tee
       ACS_BULLET     o         bullet
       ACS_CKBOARD    :         checker board (stipple)
       ACS_DARROW     v         arrow pointing down
       ACS_DEGREE     '         degree symbol
       ACS_DIAMOND    +         diamond
       ACS_GEQUAL     >         greater-than-or-equal-to
       ACS_HLINE      -         horizontal line
       ACS_LANTERN    #         lantern symbol
       ACS_LARROW     <         arrow pointing left
       ACS_LEQUAL     <         less-than-or-equal-to
       ACS_LLCORNER   +         lower left-hand corner
       ACS_LRCORNER   +         lower right-hand corner
       ACS_LTEE       +         left tee
       ACS_NEQUAL     !         not-equal
       ACS_PI         *         greek pi
       ACS_PLMINUS    #         plus/minus
       ACS_PLUS       +         plus
       ACS_RARROW     >         arrow pointing right
       ACS_RTEE       +         right tee
       ACS_S1         -         scan line 1
       ACS_S3         -         scan line 3
       ACS_S7         -         scan line 7
       ACS_S9         _         scan line 9
       ACS_STERLING   f         pound-sterling symbol
       ACS_TTEE       +         top tee
       ACS_UARROW     ^         arrow pointing up
       ACS_ULCORNER   +         upper left-hand corner
       ACS_URCORNER   +         upper right-hand corner
       ACS_VLINE      |         vertical line


RETURN VALUE

       All routines return the integer ERR upon failure and OK on
       success (the SVr4 manuals specify only "an  integer  value
       other than ERR") upon successful completion, unless other-
       wise noted in the preceding routine descriptions.

       Functions with a "mv" prefix first perform a cursor  move-
       ment  using  wmove, and return an error if the position is
       outside the window, or if the window pointer is null.


NOTES

       Note that addch, mvaddch, mvwaddch, and  echochar  may  be
       macros.


PORTABILITY

       All  these functions are described in the XSI Curses stan-
       dard, Issue 4.  The defaults specified  for  forms-drawing
       characters apply in the POSIX locale.

       X/Open  Curses  states  that the ACS_ definitions are char
       constants.  For  the  wide-character  implementation  (see
       curs_add_wch), there are analogous WACS_ definitions which
       are cchar_t constants.

       Some ACS symbols (ACS_S3, ACS_S7, ACS_LEQUAL,  ACS_GEQUAL,
       ACS_PI,  ACS_NEQUAL,  ACS_STERLING) were not documented in
       any publicly released System V.   However,  many  publicly
       available  terminfos  include  acsc strings in which their
       key characters (pryz{|}) are embedded, and  a  second-hand
       list  of  their  character descriptions has come to light.
       The  ACS-prefixed  names  for  them  were   invented   for
       ncurses(3x).

       The  displayed  values  for  the  ACS_ and WACS_ constants
       depend on

       o   the library configuration, i.e., ncurses versus ncurs-
           esw, where the latter is capable of displaying Unicode
           while the former is not, and

       o   whether the locale uses UTF-8 encoding.

       In certain cases, the terminal is unable to display  line-
       drawing  characters except by using UTF-8 (see the discus-
       sion of NCURSES_NO_UTF8_ACS in ncurses(3x)).

       The TABSIZE variable is implemented in  some  versions  of
       curses, but is not part of X/Open curses.

       If  ch  is  a  carriage return, the cursor is moved to the
       beginning of the current row of the window.  This is  true
       of other implementations, but is not documented.


SEE ALSO

       curses(3x),  curs_attr(3x), curs_clear(3x), curs_inch(3x),
       curs_outopts(3x),  curs_refresh(3x),   curs_variables(3x),
       putc(3).

       Comparable  functions  in  the  wide-character  (ncursesw)
       library are described in curs_add_wch(3x).



                                                         curs_addch(3x)
ncurses-6.0-20160213/doc/html/man/curs_pad.3x.html0000644000175100001440000002740412653207005017766 0ustar tomusers curs_pad 3x

curs_pad 3x

curs_pad(3x)                                               curs_pad(3x)




NAME

       newpad, subpad, prefresh, pnoutrefresh, pechochar,
       pecho_wchar - create and display curses pads


SYNOPSIS

       #include <curses.h>

       WINDOW *newpad(int nlines, int ncols);
       WINDOW *subpad(WINDOW *orig, int nlines, int ncols,
             int begin_y, int begin_x);
       int prefresh(WINDOW *pad, int pminrow, int pmincol,
             int sminrow, int smincol, int smaxrow, int smaxcol);
       int pnoutrefresh(WINDOW *pad, int pminrow, int pmincol,
             int sminrow, int smincol, int smaxrow, int smaxcol);
       int pechochar(WINDOW *pad, chtype ch);
       int pecho_wchar(WINDOW *pad, const cchar_t *wch);


DESCRIPTION


newpad

       The newpad routine creates and returns a pointer to a  new
       pad data structure with the given number of lines, nlines,
       and columns, ncols.  A pad is like a window,  except  that
       it is not restricted by the screen size, and is not neces-
       sarily associated with a particular part  of  the  screen.
       Pads can be used when a large window is needed, and only a
       part of the window will be on the screen at one time.  Au-
       tomatic refreshes of pads (e.g., from scrolling or echoing
       of input) do not occur.  It is not legal to call  wrefresh
       with  a  pad  as  an  argument;  the  routines prefresh or
       pnoutrefresh should be called instead.   Note  that  these
       routines require additional parameters to specify the part
       of the pad to be displayed and the location on the  screen
       to be used for the display.


subpad

       The subpad routine creates and returns a pointer to a sub-
       window within a  pad  with  the  given  number  of  lines,
       nlines,  and  columns,  ncols.   Unlike subwin, which uses
       screen coordinates, the window is  at  position  (begin_x,
       begin_y)  on the pad.  The window is made in the middle of
       the window orig, so that changes made to one window affect
       both windows.  During the use of this routine, it will of-
       ten be necessary to call touchwin or touchline on orig be-
       fore calling prefresh.


prefresh, pnoutrefresh

       The  prefresh  and  pnoutrefresh routines are analogous to
       wrefresh and wnoutrefresh except that they relate to  pads
       instead  of windows.  The additional parameters are needed
       to indicate what part of the pad and screen are  involved.
       The pminrow and pmincol parameters specify the upper left-
       hand corner of the rectangle to be displayed in  the  pad.
       The  sminrow,  smincol,  smaxrow,  and  smaxcol parameters
       specify the edges of the rectangle to be displayed on  the
       screen.   The  lower right-hand corner of the rectangle to
       be displayed in the pad is calculated from the screen  co-
       ordinates,  since  the  rectangles  must be the same size.
       Both rectangles must be entirely  contained  within  their
       respective  structures.  Negative values of pminrow, pmin-
       col, sminrow, or smincol are treated as if they were zero.


pechochar

       The pechochar routine is functionally equivalent to a call
       to  addch  followed by a call to refresh, a call to waddch
       followed by a call to wrefresh, or a call to  waddch  fol-
       lowed  by  a  call to prefresh.  The knowledge that only a
       single character is being output is taken into  considera-
       tion  and, for non-control characters, a considerable per-
       formance gain might be seen by using  these  routines  in-
       stead of their equivalents.  In the case of pechochar, the
       last location of the pad on the screen is reused  for  the
       arguments to prefresh.


pecho_wchar

       The  pecho_wchar  function is the analogous wide-character
       form of pechochar.  It outputs one character to a pad  and
       immediately  refreshes the pad.  It does this by a call to
       wadd_wch followed by a call to prefresh.


RETURN VALUE

       Routines that return an integer return  ERR  upon  failure
       and  OK  (SVr4 only specifies "an integer value other than
       ERR") upon successful completion.

       Routines that return pointers return NULL  on  error,  and
       set errno to ENOMEM.

       X/Open  does not define any error conditions.  In this im-
       plementation

          prefresh and pnoutrefresh
               return an error if the window pointer is null,  or
               if  the  window is not really a pad or if the area
               to refresh extends off-screen or  if  the  minimum
               coordinates are greater than the maximum.

          pechochar
               returns  an  error  if  the window is not really a
               pad, and the associated call to wechochar  returns
               an error.

          pecho_wchar
               returns  an  error  if  the window is not really a
               pad, and the associated call  to  wecho_wchar  re-
               turns an error.


NOTES

       Note that pechochar may be a macro.


PORTABILITY

       The  XSI  Curses  standard,  Issue 4 describes these func-
       tions.


SEE ALSO

       curses(3x),  curs_refresh(3x),  curs_touch(3x),  curs_add-
       ch(3x).



                                                           curs_pad(3x)
ncurses-6.0-20160213/doc/html/man/curs_get_wstr.3x.html0000644000175100001440000002401412653207004021051 0ustar tomusers curs_get_wstr 3x

curs_get_wstr 3x

curs_get_wstr(3x)                                     curs_get_wstr(3x)




NAME

       get_wstr, getn_wstr, wget_wstr, wgetn_wstr, mvget_wstr,
       mvgetn_wstr, mvwget_wstr, mvwgetn_wstr - get an array of
       wide characters from a curses terminal keyboard


SYNOPSIS

       #include <curses.h>

       int get_wstr(wint_t *wstr);
       int getn_wstr(wint_t *wstr, int n);
       int wget_wstr(WINDOW *win, wint_t *wstr);
       int wgetn_wstr(WINDOW *win, wint_t *wstr, int n);
       int mvget_wstr(int y, int x, wint_t *wstr);
       int mvgetn_wstr(int y, int x, wint_t *wstr, int n);
       int mvwget_wstr(WINDOW *win, int y, int x, wint_t *wstr);
       int mvwgetn_wstr(WINDOW *win, int y, int x, wint_t *wstr, int n);


DESCRIPTION

       The  effect  of get_wstr is as though a series of calls to
       get_wch were made, until a newline, other end-of-line,  or
       end-of-file condition is processed.  An end-of-file condi-
       tion is represented by WEOF, as defined in <wchar.h>.  The
       newline  and end-of-line conditions are represented by the
       \n wchar_t value.  In all instances, the end of the string
       is  terminated  by a null wchar_t.  The routine places re-
       sulting values in the area pointed to by wstr.

       The user's erase and kill characters are interpreted.   If
       keypad   mode   is   on   for  the  window,  KEY_LEFT  and
       KEY_BACKSPACE are both considered equivalent to the user's
       kill character.

       Characters  input are echoed only if echo is currently on.
       In that case, backspace is echoed as deletion of the  pre-
       vious character (typically a left motion).

       The  effect of wget_wstr is as though a series of calls to
       wget_wch were made.

       The effect of mvget_wstr is as though a call to  move  and
       then a series of calls to get_wch were made.

       The effect of mvwget_wstr is as though a call to wmove and
       then a series of calls to wget_wch were made.

       The getn_wstr, mvgetn_wstr, mvwgetn_wstr,  and  wgetn_wstr
       functions  are  identical  to  the  get_wstr,  mvget_wstr,
       mvwget_wstr, and wget_wstr functions, respectively, except
       that  the *n_* versions read at most n characters, letting
       the application prevent overflow of the input buffer.


NOTES

       Using get_wstr, mvget_wstr, mvwget_wstr, or  wget_wstr  to
       read  a  line  that overflows the array pointed to by wstr
       causes  undefined  results.    The   use   of   getn_wstr,
       mvgetn_wstr, mvwgetn_wstr, or wgetn_wstr, respectively, is
       recommended.

       These functions cannot return KEY_ values because there is
       no  way  to  distinguish a KEY_ value from a valid wchar_t
       value.

       All of these routines except wgetn_wstr may be macros.


RETURN VALUE

       All of these functions return OK upon  successful  comple-
       tion.  Otherwise, they return ERR.

       Functions  using  a window parameter return an error if it
       is null.

              wgetn_wstr
                   returns an error if  the  associated  call  to
                   wget_wch failed.

       Functions  with a "mv" prefix first perform a cursor move-
       ment using wmove, and return an error if the  position  is
       outside the window, or if the window pointer is null.


PORTABILITY

       These  functions are described in The Single Unix Specifi-
       cation, Version 2.  No error conditions are defined.  This
       implementation  returns ERR if the window pointer is null,
       or if the lower-level wget_wch call returns  an  ERR.   In
       the  latter  case,  an  ERR  return  without other data is
       treated as an end-of-file condition, and the returned  ar-
       ray contains a WEOF followed by a null wchar_t.

       X/Open  curses  documents these functions to pass an array
       of wchar_t, but all of the vendors  implement  this  using
       wint_t.


SEE ALSO

       Functions: curses(3x), curs_get_wch(3x), curs_getstr(3x).



                                                      curs_get_wstr(3x)
ncurses-6.0-20160213/doc/html/man/curs_bkgrnd.3x.html0000644000175100001440000001655612653207003020475 0ustar tomusers curs_bkgrnd 3x

curs_bkgrnd 3x

curs_bkgrnd(3x)                                         curs_bkgrnd(3x)




NAME

       bkgrnd,  wbkgrnd,  bkgrndset, wbkgrndset, getbkgrnd, wget-
       bkgrnd - curses  window  complex  background  manipulation
       routines


SYNOPSIS

       #include <curses.h>

       int bkgrnd( const cchar_t *wch);
       int wbkgrnd( WINDOW *win, const cchar_t *wch);
       void bkgrndset(const cchar_t *wch );
       void wbkgrndset(WINDOW *win, const cchar_t *wch);
       int getbkgrnd(cchar_t *wch);
       int wgetbkgrnd(WINDOW *win, cchar_t *wch);


DESCRIPTION


bkgrndset

       The bkgrndset and wbkgrndset routines manipulate the back-
       ground of the named window.  The window  background  is  a
       cchar_t consisting of any combination of attributes (i.e.,
       rendition) and a complex character.  The attribute part of
       the  background  is  combined  (OR'ed)  with all non-blank
       characters that are written into the window  with  waddch.
       Both  the  character and attribute parts of the background
       are combined with the blank  characters.   The  background
       becomes  a  property  of  the character and moves with the
       character  through   any   scrolling   and   insert/delete
       line/character operations.

       To  the  extent  possible  on  a  particular terminal, the
       attribute part of  the  background  is  displayed  as  the
       graphic rendition of the character put on the screen.


bkgrnd

       The  bkgrnd and wbkgrnd functions set the background prop-
       erty of the current or specified  window  and  then  apply
       this setting to every character position in that window:

       o   The  rendition  of  every  character  on the screen is
           changed to the new background rendition.

       o   Wherever the former background character  appears,  it
           is changed to the new background character.


getbkgrnd

       The  getbkgrnd function returns the given window's current
       background character/attribute pair via the wch pointer.


NOTES

       Note that bkgrnd, bkgrndset, and getbkgrnd may be macros.


RETURN VALUE

       The bkgrndset and wbkgrndset  routines  do  not  return  a
       value.

       Upon successful completion, the other functions return OK.
       Otherwise, they return ERR.   A  null  window  pointer  is
       treated as an error.


SEE ALSO

       curses(3x), curs_bkgd(3x)



                                                        curs_bkgrnd(3x)
ncurses-6.0-20160213/doc/html/man/menu_format.3x.html0000644000175100001440000001362312653207011020475 0ustar tomusers menu_format 3x

menu_format 3x

menu_format(3x)                                         menu_format(3x)




NAME

       set_menu_format, menu_format - set and get menu sizes


SYNOPSIS

       #include <menu.h>
       int set_menu_format(MENU *menu, int rows, int cols);
       void menu_format(const MENU *menu, int *rows, int *cols);


DESCRIPTION

       The function set_menu_format sets the maximum display size
       of the given menu.  If this size is too small  to  display
       all  menu items, the menu will be made scrollable. If this
       size is larger than the menus subwindow and the  subwindow
       is  too  small to display all menu items, post_menu() will
       fail.

       The  default  format  is  16  rows,  1  column.    Calling
       set_menu_format  with a null menu pointer will change this
       default.  A zero row or column argument to set_menu_format
       is  interpreted  as  a  request  not to change the current
       value.

       The function menu_format  returns  the  maximum-size  con-
       straints  for the given menu into the storage addressed by
       rows and cols.


RETURN VALUE

       These routines returns one of the following:

       E_OK The routine succeeded.

       E_SYSTEM_ERROR
            System error occurred (see errno).

       E_BAD_ARGUMENT
            Routine detected an incorrect or  out-of-range  argu-
            ment.

       E_POSTED
            The menu is already posted.

       E_NOT_CONNECTED
            No items are connected to the menu.


SEE ALSO

       curses(3x), menu(3x).


NOTES

       The header file <menu.h> automatically includes the header
       file <curses.h>.


PORTABILITY

       These routines emulate the System V  menu  library.   They
       were not supported on Version 7 or BSD versions.


AUTHORS

       Juergen  Pfeifer.   Manual  pages  and  adaptation for new
       curses by Eric S. Raymond.



                                                        menu_format(3x)
ncurses-6.0-20160213/doc/html/man/infotocap.1m.html0000644000175100001440000001301212653207010020115 0ustar tomusers infotocap 1m

infotocap 1m

infotocap(1m)                                             infotocap(1m)




NAME

       infotocap  - convert a terminfo description into a termcap
       description


SYNOPSIS

       infotocap [-vn width]  [-V] [-1] [-w width] file . . .


DESCRIPTION

       infotocap looks in  each  given  text  file  for  terminfo
       descriptions.   For  each  terminfo  description found, an
       equivalent termcap description is written to standard out-
       put.  Terminfo use capabilities are translated directly to
       termcap tc capabilities.

       -v   print out tracing information on  standard  error  as
            the program runs.

       -V   print  out the version of the program in use on stan-
            dard error and exit.

       -1   cause the fields to print out one to a line.   Other-
            wise, the fields will be printed several to a line to
            a maximum width of 60 characters.

       -w   change the output to width characters.


FILES

       /usr/share/terminfo Compiled  terminal  description  data-
                           base.


NOTES

       This  utility  is  actually  a  link to tic, running in -C
       mode.  You can use other tic options such as -f and  -x.


SEE ALSO

       curses(3x), tic(1m), infocmp(1m), terminfo(5)

       This describes ncurses version 6.0 (patch 20160130).


AUTHOR

       Eric S. Raymond <esr@snark.thyrsus.com> and
       Thomas E. Dickey <dickey@invisible-island.net>



                                                          infotocap(1m)
ncurses-6.0-20160213/doc/html/man/curs_kernel.3x.html0000644000175100001440000003250212653207005020475 0ustar tomusers curs_kernel 3x

curs_kernel 3x

curs_kernel(3x)                                         curs_kernel(3x)




NAME

       def_prog_mode, def_shell_mode, reset_prog_mode,
       reset_shell_mode, resetty, savetty, getsyx, setsyx,
       ripoffline, curs_set, napms - low-level curses routines


SYNOPSIS

       #include <curses.h>

       int def_prog_mode(void);
       int def_shell_mode(void);
       int reset_prog_mode(void);
       int reset_shell_mode(void);
       int resetty(void);
       int savetty(void);
       void getsyx(int y, int x);
       void setsyx(int y, int x);
       int ripoffline(int line, int (*init)(WINDOW *, int));
       int curs_set(int visibility);
       int napms(int ms);


DESCRIPTION

       The  following  routines  give low-level access to various
       curses capabilities.  These routines  typically  are  used
       inside library routines.


def_prog_mode, def_shell_mode

       The  def_prog_mode  and  def_shell_mode  routines save the
       current terminal modes as the  "program"  (in  curses)  or
       "shell"   (not  in  curses)  state  for  use  by  the  re-
       set_prog_mode and reset_shell_mode routines.  This is done
       automatically by initscr.  There is one such save area for
       each screen context allocated by newterm().


reset_prog_mode, reset_shell_mode

       The reset_prog_mode and reset_shell_mode routines  restore
       the  terminal  to "program" (in curses) or "shell" (out of
       curses) state.  These are  done  automatically  by  endwin
       and,  after  an  endwin, by doupdate, so they normally are
       not called.


resetty, savetty

       The resetty and savetty  routines  save  and  restore  the
       state  of  the  terminal modes.  savetty saves the current
       state in a buffer and resetty restores the state  to  what
       it was at the last call to savetty.


getsyx

       The  getsyx routine returns the current coordinates of the
       virtual screen cursor in y and x.  If leaveok is currently
       TRUE,  then -1,-1 is returned.  If lines have been removed
       from the top of the screen, using ripoffline, y and x  in-
       clude  these lines; therefore, y and x should be used only
       as arguments for setsyx.


setsyx

       The setsyx routine sets the virtual screen cursor to y, x.
       If y and x are both -1, then leaveok is set.  The two rou-
       tines getsyx and setsyx are designed to be used by  a  li-
       brary  routine,  which manipulates curses windows but does
       not want to change the current position of  the  program's
       cursor.   The library routine would call getsyx at the be-
       ginning, do its manipulation of  its  own  windows,  do  a
       wnoutrefresh  on  its  windows, call setsyx, and then call
       doupdate.


ripoffline

       The ripoffline routine provides access to the same facili-
       ty  that  slk_init  [see  curs_slk(3x)] uses to reduce the
       size of the screen.   ripoffline  must  be  called  before
       initscr or newterm is called, to prepare these initial ac-
       tions:

       o   If line is positive, a line is removed from the top of
           stdscr.

       o   if  line  is negative, a line is removed from the bot-
           tom.

       When the resulting initialization is done inside  initscr,
       the routine init (supplied by the user) is called with two
       arguments:

       o   a window pointer to the one-line window that has  been
           allocated and

       o   an integer with the number of columns in the window.

       Inside  this initialization routine, the integer variables
       LINES and COLS (defined in <curses.h>) are not  guaranteed
       to  be  accurate  and  wrefresh  or  doupdate  must not be
       called.  It is allowable to call wnoutrefresh  during  the
       initialization routine.

       ripoffline  can  be called up to five times before calling
       initscr or newterm.


curs_set

       The curs_set routine sets the cursor state  to  invisible,
       normal, or very visible for visibility equal to 0, 1, or 2
       respectively.  If the terminal supports the visibility re-
       quested, the previous cursor state is returned; otherwise,
       ERR is returned.


napms

       The napms routine is used to sleep for ms milliseconds.


RETURN VALUE

       Except for curs_set, these routines always return OK.

       curs_set returns the previous cursor state, or ERR if  the
       requested visibility is not supported.

       X/Open  defines  no error conditions.  In this implementa-
       tion

       def_prog_mode, def_shell_mode, reset_prog_mode,
       reset_shell_mode
            return  an error if the terminal was not initialized,
            or if the I/O call to obtain  the  terminal  settings
            fails.

       ripoffline
            returns  an error if the maximum number of ripped-off
            lines exceeds the maximum (NRIPS = 5).


NOTES

       Note that getsyx is a macro, so & is not necessary  before
       the variables y and x.

       Older  SVr4  man  pages  warn  that  the  return  value of
       curs_set "is currently  incorrect".   This  implementation
       gets  it  right, but it may be unwise to count on the cor-
       rectness of the return value anywhere else.

       Both ncurses and SVr4 will  call  curs_set  in  endwin  if
       curs_set  has  been  called  to make the cursor other than
       normal, i.e., either invisible or very visible.  There  is
       no  way  for ncurses to determine the initial cursor state
       to restore that.


PORTABILITY

       The functions setsyx and getsyx are not described  in  the
       XSI  Curses standard, Issue 4.  All other functions are as
       described in XSI Curses.

       The SVr4 documentation describes setsyx and getsyx as hav-
       ing  return  type  int.  This  is  misleading, as they are
       macros with no documented semantics for the return value.


SEE ALSO

       curses(3x), curs_initscr(3x),  curs_outopts(3x),  curs_re-
       fresh(3x),   curs_scr_dump(3x),  curs_slk(3x),  curs_vari-
       ables(3x).



                                                        curs_kernel(3x)
ncurses-6.0-20160213/doc/html/man/curs_scroll.3x.html0000644000175100001440000001440212653207006020513 0ustar tomusers curs_scroll 3x

curs_scroll 3x

curs_scroll(3x)                                         curs_scroll(3x)




NAME

       scroll, scrl, wscrl - scroll a curses window


SYNOPSIS

       #include <curses.h>

       int scroll(WINDOW *win);
       int scrl(int n);
       int wscrl(WINDOW *win, int n);


DESCRIPTION

       The  scroll  routine scrolls the window up one line.  This
       involves moving the lines in the  window  data  structure.
       As  an optimization, if the scrolling region of the window
       is the entire screen, the physical screen may be  scrolled
       at the same time.

       For  positive  n,  the  scrl and wscrl routines scroll the
       window up n lines (line i+n becomes i);  otherwise  scroll
       the  window  down n lines.  This involves moving the lines
       in the window character image structure.  The current cur-
       sor position is not changed.

       For these functions to work, scrolling must be enabled via
       scrollok.


RETURN VALUE

       These routines return ERR upon failure, and OK (SVr4  only
       specifies "an integer value other than ERR") upon success-
       ful completion.

       X/Open defines no error conditions.

       This implementation returns an error if the window pointer
       is  null,  or  if  scrolling is not enabled in the window,
       e.g., with scrollok.


NOTES

       Note that scrl and scroll may be macros.

       The SVr4 documentation says that the optimization of phys-
       ically  scrolling  immediately if the scroll region is the
       entire screen "is"  performed,  not  "may  be"  performed.
       This  implementation  deliberately does not guarantee that
       this will occur, to leave open the possibility of  smarter
       optimization  of  multiple  scroll actions on the next up-
       date.

       Neither the SVr4 nor the XSI documentation specify whether
       the current attribute or current color-pair of blanks gen-
       erated by the scroll function is zeroed.  Under  this  im-
       plementation it is.


PORTABILITY

       The  XSI  Curses  standard,  Issue 4 describes these func-
       tions.


SEE ALSO

       curses(3x), curs_outopts(3x)



                                                        curs_scroll(3x)
ncurses-6.0-20160213/doc/html/man/curs_slk.3x.html0000644000175100001440000003213112653207006020005 0ustar tomusers curs_slk 3x

curs_slk 3x

curs_slk(3x)                                               curs_slk(3x)




NAME

       slk_init, slk_set, slk_wset, slk_refresh, slk_noutrefresh,
       slk_label, slk_clear, slk_restore, slk_touch, slk_attron,
       slk_attrset, slk_attroff, slk_attr_on, slk_attr_set,
       slk_attr_off, slk_attr, slk_color - curses soft label
       routines


SYNOPSIS

       #include <curses.h>

       int slk_init(int fmt);
       int slk_set(int labnum, const char *label, int fmt);
       int slk_refresh(void);
       int slk_noutrefresh(void);
       char *slk_label(int labnum);
       int slk_clear(void);
       int slk_restore(void);
       int slk_touch(void);
       int slk_attron(const chtype attrs);
       int slk_attroff(const chtype attrs);
       int slk_attrset(const chtype attrs);
       int slk_attr_on(attr_t attrs, void* opts);
       int slk_attr_off(const attr_t attrs, void * opts);
       int  slk_attr_set(const  attr_t  attrs,  short color_pair,
       void* opts);
       attr_t slk_attr(void);
       int slk_color(short color_pair);
       int slk_wset(int labnum, const wchar_t *label, int fmt);


DESCRIPTION

       The slk* functions manipulate the set of soft function-key
       labels  that exist on many terminals.  For those terminals
       that do not have soft labels, curses takes over the bottom
       line  of stdscr, reducing the size of stdscr and the vari-
       able LINES.  curses standardizes on eight labels of up  to
       eight  characters  each.  In addition to this, the ncurses
       implementation supports a mode where it simulates  12  la-
       bels  of  up  to five characters each.  This is useful for
       today's PC-like enduser devices.  ncurses  simulates  this
       mode  by  taking over up to two lines at the bottom of the
       screen; it does not try to use any  hardware  support  for
       this mode.

       The  slk_init  routine  must  be  called before initscr or
       newterm is called.  If initscr eventually uses a line from
       stdscr to emulate the soft labels, then fmt determines how
       the labels are arranged on the screen:

              0  indicates a 3-2-3 arrangement of the labels.

              1  indicates a 4-4 arrangement

              2  indicates the PC-like 4-4-4 mode.

              3  is again the PC-like 4-4-4 mode, but in addition
                 an  index line is generated, helping the user to
                 identify the key numbers easily.

       The slk_set routine (and  the  slk_wset  routine  for  the
       wide-character library) has three parameters:

              labnum
                   is  the  label number, from 1 to 8 (12 for fmt
                   in slk_init is 2 or 3);

              label
                   is be the string to put on the  label,  up  to
                   eight  (five  for  fmt  in slk_init is 2 or 3)
                   characters in length.  A null string or a null
                   pointer sets up a blank label.

              fmt  is  either  0, 1, or 2, indicating whether the
                   label is to be  left-justified,  centered,  or
                   right-justified,  respectively, within the la-
                   bel.

       The slk_refresh and slk_noutrefresh routines correspond to
       the wrefresh and wnoutrefresh routines.

       The  slk_label routine returns the current label for label
       number labnum, with leading and trailing blanks stripped.

       The slk_clear routine clears  the  soft  labels  from  the
       screen.

       The  slk_restore  routine  restores the soft labels to the
       screen after a slk_clear has been performed.

       The slk_touch routine forces all the  soft  labels  to  be
       output the next time a slk_noutrefresh is performed.

       The slk_attron, slk_attrset, slk_attroff and slk_attr rou-
       tines correspond to attron, attrset, attroff and attr_get.
       They  have  an effect only if soft labels are simulated on
       the bottom line of the screen.  The default highlight  for
       soft keys is A_STANDOUT (as in System V curses, which does
       not document this fact).

       The slk_color routine corresponds to color_set.  It has an
       effect  only  if  soft  labels are simulated on the bottom
       line of the screen.


RETURN VALUE

       These routines return ERR upon failure and OK (SVr4 speci-
       fies only "an integer value other than ERR") upon success-
       ful completion.

       X/Open defines no error conditions.  In  this  implementa-
       tion

              slk_attr
                   returns the attribute used for the soft keys.

              slk_attroff, slk_attron, slk_clear,
              slk_noutrefresh, slk_refresh, slk_touch
                   return an error if the terminal or  the  soft-
                   keys were not initialized.

              slk_attrset
                   returns  an error if the terminal or the soft-
                   keys were not initialized.

              slk_attr_set
                   returns an error if the terminal or the  soft-
                   keys  were  not initialized, or the color pair
                   is outside the range 0..COLOR_PAIRS-1, or opts
                   is not null.

              slk_color
                   returns  an error if the terminal or the soft-
                   keys were not initialized, or the  color  pair
                   is outside the range 0..COLOR_PAIRS-1.

              slk_init
                   returns  an  error  if the format parameter is
                   outside the range 0..3.

              slk_label
                   returns NULL on error.

              slk_set
                   returns an error if the terminal or the  soft-
                   keys  were  not initialized, or the labnum pa-
                   rameter is outside the range of label  counts,
                   or  if  the  format  parameter  is outside the
                   range 0..2, or if memory for the labels cannot
                   be allocated.


NOTES

       Most applications would use slk_noutrefresh because a wre-
       fresh is likely to follow soon.


PORTABILITY

       The XSI Curses standard, Issue 4,  describes  these  func-
       tions.   It changes the argument type of the attribute-ma-
       nipulation functions slk_attron, slk_attroff,  slk_attrset
       to be attr_t, and adds const qualifiers.  The format codes
       2 and 3 for slk_init() and the function slk_attr are  spe-
       cific to ncurses.


SEE ALSO

       curses(3x),   curs_attr(3x),   curs_initscr(3x),  curs_re-
       fresh(3x), curs_variables(3x).



                                                           curs_slk(3x)
ncurses-6.0-20160213/doc/hackguide.doc0000644000175100001440000007751110572404200015641 0ustar tomusers A Hacker's Guide to NCURSES Contents * Abstract * Objective of the Package + Why System V Curses? + How to Design Extensions * Portability and Configuration * Documentation Conventions * How to Report Bugs * A Tour of the Ncurses Library + Library Overview + The Engine Room + Keyboard Input + Mouse Events + Output and Screen Updating * The Forms and Menu Libraries * A Tour of the Terminfo Compiler + Translation of Non-use Capabilities + Use Capability Resolution + Source-Form Translation * Other Utilities * Style Tips for Developers * Porting Hints Abstract This document is a hacker's tour of the ncurses library and utilities. It discusses design philosophy, implementation methods, and the conventions used for coding and documentation. It is recommended reading for anyone who is interested in porting, extending or improving the package. Objective of the Package The objective of the ncurses package is to provide a free software API for character-cell terminals and terminal emulators with the following characteristics: * Source-compatible with historical curses implementations (including the original BSD curses and System V curses. * Conformant with the XSI Curses standard issued as part of XPG4 by X/Open. * High-quality -- stable and reliable code, wide portability, good packaging, superior documentation. * Featureful -- should eliminate as much of the drudgery of C interface programming as possible, freeing programmers to think at a higher level of design. These objectives are in priority order. So, for example, source compatibility with older version must trump featurefulness -- we cannot add features if it means breaking the portion of the API corresponding to historical curses versions. Why System V Curses? We used System V curses as a model, reverse-engineering their API, in order to fulfill the first two objectives. System V curses implementations can support BSD curses programs with just a recompilation, so by capturing the System V API we also capture BSD's. More importantly for the future, the XSI Curses standard issued by X/Open is explicitly and closely modeled on System V. So conformance with System V took us most of the way to base-level XSI conformance. How to Design Extensions The third objective (standards conformance) requires that it be easy to condition source code using ncurses so that the absence of nonstandard extensions does not break the code. Accordingly, we have a policy of associating with each nonstandard extension a feature macro, so that ncurses client code can use this macro to condition in or out the code that requires the ncurses extension. For example, there is a macro NCURSES_MOUSE_VERSION which XSI Curses does not define, but which is defined in the ncurses library header. You can use this to condition the calls to the mouse API calls. Portability and Configuration Code written for ncurses may assume an ANSI-standard C compiler and POSIX-compatible OS interface. It may also assume the presence of a System-V-compatible select(2) call. We encourage (but do not require) developers to make the code friendly to less-capable UNIX environments wherever possible. We encourage developers to support OS-specific optimizations and methods not available under POSIX/ANSI, provided only that: * All such code is properly conditioned so the build process does not attempt to compile it under a plain ANSI/POSIX environment. * Adding such implementation methods does not introduce incompatibilities in the ncurses API between platforms. We use GNU autoconf(1) as a tool to deal with portability issues. The right way to leverage an OS-specific feature is to modify the autoconf specification files (configure.in and aclocal.m4) to set up a new feature macro, which you then use to condition your code. Documentation Conventions There are three kinds of documentation associated with this package. Each has a different preferred format: * Package-internal files (README, INSTALL, TO-DO etc.) * Manual pages. * Everything else (i.e., narrative documentation). Our conventions are simple: 1. Maintain package-internal files in plain text. The expected viewer for them more(1) or an editor window; there's no point in elaborate mark-up. 2. Mark up manual pages in the man macros. These have to be viewable through traditional man(1) programs. 3. Write everything else in HTML. When in doubt, HTMLize a master and use lynx(1) to generate plain ASCII (as we do for the announcement document). The reason for choosing HTML is that it's (a) well-adapted for on-line browsing through viewers that are everywhere; (b) more easily readable as plain text than most other mark-ups, if you don't have a viewer; and (c) carries enough information that you can generate a nice-looking printed version from it. Also, of course, it make exporting things like the announcement document to WWW pretty trivial. How to Report Bugs The reporting address for bugs is bug-ncurses@gnu.org. This is a majordomo list; to join, write to bug-ncurses-request@gnu.org with a message containing the line: subscribe @ The ncurses code is maintained by a small group of volunteers. While we try our best to fix bugs promptly, we simply don't have a lot of hours to spend on elementary hand-holding. We rely on intelligent cooperation from our users. If you think you have found a bug in ncurses, there are some steps you can take before contacting us that will help get the bug fixed quickly. In order to use our bug-fixing time efficiently, we put people who show us they've taken these steps at the head of our queue. This means that if you don't, you'll probably end up at the tail end and have to wait a while. 1. Develop a recipe to reproduce the bug. Bugs we can reproduce are likely to be fixed very quickly, often within days. The most effective single thing you can do to get a quick fix is develop a way we can duplicate the bad behavior -- ideally, by giving us source for a small, portable test program that breaks the library. (Even better is a keystroke recipe using one of the test programs provided with the distribution.) 2. Try to reproduce the bug on a different terminal type. In our experience, most of the behaviors people report as library bugs are actually due to subtle problems in terminal descriptions. This is especially likely to be true if you're using a traditional asynchronous terminal or PC-based terminal emulator, rather than xterm or a UNIX console entry. It's therefore extremely helpful if you can tell us whether or not your problem reproduces on other terminal types. Usually you'll have both a console type and xterm available; please tell us whether or not your bug reproduces on both. If you have xterm available, it is also good to collect xterm reports for different window sizes. This is especially true if you normally use an unusual xterm window size -- a surprising number of the bugs we've seen are either triggered or masked by these. 3. Generate and examine a trace file for the broken behavior. Recompile your program with the debugging versions of the libraries. Insert a trace() call with the argument set to TRACE_UPDATE. (See "Writing Programs with NCURSES" for details on trace levels.) Reproduce your bug, then look at the trace file to see what the library was actually doing. Another frequent cause of apparent bugs is application coding errors that cause the wrong things to be put on the virtual screen. Looking at the virtual-screen dumps in the trace file will tell you immediately if this is happening, and save you from the possible embarrassment of being told that the bug is in your code and is your problem rather than ours. If the virtual-screen dumps look correct but the bug persists, it's possible to crank up the trace level to give more and more information about the library's update actions and the control sequences it issues to perform them. The test directory of the distribution contains a tool for digesting these logs to make them less tedious to wade through. Often you'll find terminfo problems at this stage by noticing that the escape sequences put out for various capabilities are wrong. If not, you're likely to learn enough to be able to characterize any bug in the screen-update logic quite exactly. 4. Report details and symptoms, not just interpretations. If you do the preceding two steps, it is very likely that you'll discover the nature of the problem yourself and be able to send us a fix. This will create happy feelings all around and earn you good karma for the first time you run into a bug you really can't characterize and fix yourself. If you're still stuck, at least you'll know what to tell us. Remember, we need details. If you guess about what is safe to leave out, you are too likely to be wrong. If your bug produces a bad update, include a trace file. Try to make the trace at the least voluminous level that pins down the bug. Logs that have been through tracemunch are OK, it doesn't throw away any information (actually they're better than un-munched ones because they're easier to read). If your bug produces a core-dump, please include a symbolic stack trace generated by gdb(1) or your local equivalent. Tell us about every terminal on which you've reproduced the bug -- and every terminal on which you can't. Ideally, sent us terminfo sources for all of these (yours might differ from ours). Include your ncurses version and your OS/machine type, of course! You can find your ncurses version in the curses.h file. If your problem smells like a logic error or in cursor movement or scrolling or a bad capability, there are a couple of tiny test frames for the library algorithms in the progs directory that may help you isolate it. These are not part of the normal build, but do have their own make productions. The most important of these is mvcur, a test frame for the cursor-movement optimization code. With this program, you can see directly what control sequences will be emitted for any given cursor movement or scroll/insert/delete operations. If you think you've got a bad capability identified, you can disable it and test again. The program is command-driven and has on-line help. If you think the vertical-scroll optimization is broken, or just want to understand how it works better, build hashmap and read the header comments of hardscroll.c and hashmap.c; then try it out. You can also test the hardware-scrolling optimization separately with hardscroll. A Tour of the Ncurses Library Library Overview Most of the library is superstructure -- fairly trivial convenience interfaces to a small set of basic functions and data structures used to manipulate the virtual screen (in particular, none of this code does any I/O except through calls to more fundamental modules described below). The files lib_addch.c lib_bkgd.c lib_box.c lib_chgat.c lib_clear.c lib_clearok.c lib_clrbot.c lib_clreol.c lib_colorset.c lib_data.c lib_delch.c lib_delwin.c lib_echo.c lib_erase.c lib_gen.c lib_getstr.c lib_hline.c lib_immedok.c lib_inchstr.c lib_insch.c lib_insdel.c lib_insstr.c lib_instr.c lib_isendwin.c lib_keyname.c lib_leaveok.c lib_move.c lib_mvwin.c lib_overlay.c lib_pad.c lib_printw.c lib_redrawln.c lib_scanw.c lib_screen.c lib_scroll.c lib_scrollok.c lib_scrreg.c lib_set_term.c lib_slk.c lib_slkatr_set.c lib_slkatrof.c lib_slkatron.c lib_slkatrset.c lib_slkattr.c lib_slkclear.c lib_slkcolor.c lib_slkinit.c lib_slklab.c lib_slkrefr.c lib_slkset.c lib_slktouch.c lib_touch.c lib_unctrl.c lib_vline.c lib_wattroff.c lib_wattron.c lib_window.c are all in this category. They are very unlikely to need change, barring bugs or some fundamental reorganization in the underlying data structures. These files are used only for debugging support: lib_trace.c lib_traceatr.c lib_tracebits.c lib_tracechr.c lib_tracedmp.c lib_tracemse.c trace_buf.c It is rather unlikely you will ever need to change these, unless you want to introduce a new debug trace level for some reason. There is another group of files that do direct I/O via tputs(), computations on the terminal capabilities, or queries to the OS environment, but nevertheless have only fairly low complexity. These include: lib_acs.c lib_beep.c lib_color.c lib_endwin.c lib_initscr.c lib_longname.c lib_newterm.c lib_options.c lib_termcap.c lib_ti.c lib_tparm.c lib_tputs.c lib_vidattr.c read_entry.c. They are likely to need revision only if ncurses is being ported to an environment without an underlying terminfo capability representation. These files have serious hooks into the tty driver and signal facilities: lib_kernel.c lib_baudrate.c lib_raw.c lib_tstp.c lib_twait.c If you run into porting snafus moving the package to another UNIX, the problem is likely to be in one of these files. The file lib_print.c uses sleep(2) and also falls in this category. Almost all of the real work is done in the files hardscroll.c hashmap.c lib_addch.c lib_doupdate.c lib_getch.c lib_mouse.c lib_mvcur.c lib_refresh.c lib_setup.c lib_vidattr.c Most of the algorithmic complexity in the library lives in these files. If there is a real bug in ncurses itself, it's probably here. We'll tour some of these files in detail below (see The Engine Room). Finally, there is a group of files that is actually most of the terminfo compiler. The reason this code lives in the ncurses library is to support fallback to /etc/termcap. These files include alloc_entry.c captoinfo.c comp_captab.c comp_error.c comp_hash.c comp_parse.c comp_scan.c parse_entry.c read_termcap.c write_entry.c We'll discuss these in the compiler tour. The Engine Room Keyboard Input All ncurses input funnels through the function wgetch(), defined in lib_getch.c. This function is tricky; it has to poll for keyboard and mouse events and do a running match of incoming input against the set of defined special keys. The central data structure in this module is a FIFO queue, used to match multiple-character input sequences against special-key capabilities; also to implement pushback via ungetch(). The wgetch() code distinguishes between function key sequences and the same sequences typed manually by doing a timed wait after each input character that could lead a function key sequence. If the entire sequence takes less than 1 second, it is assumed to have been generated by a function key press. Hackers bruised by previous encounters with variant select(2) calls may find the code in lib_twait.c interesting. It deals with the problem that some BSD selects don't return a reliable time-left value. The function timed_wait() effectively simulates a System V select. Mouse Events If the mouse interface is active, wgetch() polls for mouse events each call, before it goes to the keyboard for input. It is up to lib_mouse.c how the polling is accomplished; it may vary for different devices. Under xterm, however, mouse event notifications come in via the keyboard input stream. They are recognized by having the kmous capability as a prefix. This is kind of klugey, but trying to wire in recognition of a mouse key prefix without going through the function-key machinery would be just too painful, and this turns out to imply having the prefix somewhere in the function-key capabilities at terminal-type initialization. This kluge only works because kmous isn't actually used by any historic terminal type or curses implementation we know of. Best guess is it's a relic of some forgotten experiment in-house at Bell Labs that didn't leave any traces in the publicly-distributed System V terminfo files. If System V or XPG4 ever gets serious about using it again, this kluge may have to change. Here are some more details about mouse event handling: The lib_mouse()code is logically split into a lower level that accepts event reports in a device-dependent format and an upper level that parses mouse gestures and filters events. The mediating data structure is a circular queue of event structures. Functionally, the lower level's job is to pick up primitive events and put them on the circular queue. This can happen in one of two ways: either (a) _nc_mouse_event() detects a series of incoming mouse reports and queues them, or (b) code in lib_getch.c detects the kmous prefix in the keyboard input stream and calls _nc_mouse_inline to queue up a series of adjacent mouse reports. In either case, _nc_mouse_parse() should be called after the series is accepted to parse the digested mouse reports (low-level events) into a gesture (a high-level or composite event). Output and Screen Updating With the single exception of character echoes during a wgetnstr() call (which simulates cooked-mode line editing in an ncurses window), the library normally does all its output at refresh time. The main job is to go from the current state of the screen (as represented in the curscr window structure) to the desired new state (as represented in the newscr window structure), while doing as little I/O as possible. The brains of this operation are the modules hashmap.c, hardscroll.c and lib_doupdate.c; the latter two use lib_mvcur.c. Essentially, what happens looks like this: The hashmap.c module tries to detect vertical motion changes between the real and virtual screens. This information is represented by the oldindex members in the newscr structure. These are modified by vertical-motion and clear operations, and both are re-initialized after each update. To this change-journalling information, the hashmap code adds deductions made using a modified Heckel algorithm on hash values generated from the line contents. The hardscroll.c module computes an optimum set of scroll, insertion, and deletion operations to make the indices match. It calls _nc_mvcur_scrolln() in lib_mvcur.c to do those motions. Then lib_doupdate.c goes to work. Its job is to do line-by-line transformations of curscr lines to newscr lines. Its main tool is the routine mvcur() in lib_mvcur.c. This routine does cursor-movement optimization, attempting to get from given screen location A to given location B in the fewest output characters possible. If you want to work on screen optimizations, you should use the fact that (in the trace-enabled version of the library) enabling the TRACE_TIMES trace level causes a report to be emitted after each screen update giving the elapsed time and a count of characters emitted during the update. You can use this to tell when an update optimization improves efficiency. In the trace-enabled version of the library, it is also possible to disable and re-enable various optimizations at runtime by tweaking the variable _nc_optimize_enable. See the file include/curses.h.in for mask values, near the end. The Forms and Menu Libraries The forms and menu libraries should work reliably in any environment you can port ncurses to. The only portability issue anywhere in them is what flavor of regular expressions the built-in form field type TYPE_REGEXP will recognize. The configuration code prefers the POSIX regex facility, modeled on System V's, but will settle for BSD regexps if the former isn't available. Historical note: the panels code was written primarily to assist in porting u386mon 2.0 (comp.sources.misc v14i001-4) to systems lacking panels support; u386mon 2.10 and beyond use it. This version has been slightly cleaned up for ncurses. A Tour of the Terminfo Compiler The ncurses implementation of tic is rather complex internally; it has to do a trying combination of missions. This starts with the fact that, in addition to its normal duty of compiling terminfo sources into loadable terminfo binaries, it has to be able to handle termcap syntax and compile that too into terminfo entries. The implementation therefore starts with a table-driven, dual-mode lexical analyzer (in comp_scan.c). The lexer chooses its mode (termcap or terminfo) based on the first `,' or `:' it finds in each entry. The lexer does all the work of recognizing capability names and values; the grammar above it is trivial, just "parse entries till you run out of file". Translation of Non-use Capabilities Translation of most things besides use capabilities is pretty straightforward. The lexical analyzer's tokenizer hands each capability name to a hash function, which drives a table lookup. The table entry yields an index which is used to look up the token type in another table, and controls interpretation of the value. One possibly interesting aspect of the implementation is the way the compiler tables are initialized. All the tables are generated by various awk/sed/sh scripts from a master table include/Caps; these scripts actually write C initializers which are linked to the compiler. Furthermore, the hash table is generated in the same way, so it doesn't have to be generated at compiler startup time (another benefit of this organization is that the hash table can be in shareable text space). Thus, adding a new capability is usually pretty trivial, just a matter of adding one line to the include/Caps file. We'll have more to say about this in the section on Source-Form Translation. Use Capability Resolution The background problem that makes tic tricky isn't the capability translation itself, it's the resolution of use capabilities. Older versions would not handle forward use references for this reason (that is, a using terminal always had to follow its use target in the source file). By doing this, they got away with a simple implementation tactic; compile everything as it blows by, then resolve uses from compiled entries. This won't do for ncurses. The problem is that that the whole compilation process has to be embeddable in the ncurses library so that it can be called by the startup code to translate termcap entries on the fly. The embedded version can't go promiscuously writing everything it translates out to disk -- for one thing, it will typically be running with non-root permissions. So our tic is designed to parse an entire terminfo file into a doubly-linked circular list of entry structures in-core, and then do use resolution in-memory before writing everything out. This design has other advantages: it makes forward and back use-references equally easy (so we get the latter for free), and it makes checking for name collisions before they're written out easy to do. And this is exactly how the embedded version works. But the stand-alone user-accessible version of tic partly reverts to the historical strategy; it writes to disk (not keeping in core) any entry with no use references. This is strictly a core-economy kluge, implemented because the terminfo master file is large enough that some core-poor systems swap like crazy when you compile it all in memory...there have been reports of this process taking three hours, rather than the twenty seconds or less typical on the author's development box. So. The executable tic passes the entry-parser a hook that immediately writes out the referenced entry if it has no use capabilities. The compiler main loop refrains from adding the entry to the in-core list when this hook fires. If some other entry later needs to reference an entry that got written immediately, that's OK; the resolution code will fetch it off disk when it can't find it in core. Name collisions will still be detected, just not as cleanly. The write_entry() code complains before overwriting an entry that postdates the time of tic's first call to write_entry(), Thus it will complain about overwriting entries newly made during the tic run, but not about overwriting ones that predate it. Source-Form Translation Another use of tic is to do source translation between various termcap and terminfo formats. There are more variants out there than you might think; the ones we know about are described in the captoinfo(1) manual page. The translation output code (dump_entry() in ncurses/dump_entry.c) is shared with the infocmp(1) utility. It takes the same internal representation used to generate the binary form and dumps it to standard output in a specified format. The include/Caps file has a header comment describing ways you can specify source translations for nonstandard capabilities just by altering the master table. It's possible to set up capability aliasing or tell the compiler to plain ignore a given capability without writing any C code at all. For circumstances where you need to do algorithmic translation, there are functions in parse_entry.c called after the parse of each entry that are specifically intended to encapsulate such translations. This, for example, is where the AIX box1 capability get translated to an acsc string. Other Utilities The infocmp utility is just a wrapper around the same entry-dumping code used by tic for source translation. Perhaps the one interesting aspect of the code is the use of a predicate function passed in to dump_entry() to control which capabilities are dumped. This is necessary in order to handle both the ordinary De-compilation case and entry difference reporting. The tput and clear utilities just do an entry load followed by a tputs() of a selected capability. Style Tips for Developers See the TO-DO file in the top-level directory of the source distribution for additions that would be particularly useful. The prefix _nc_ should be used on library public functions that are not part of the curses API in order to prevent pollution of the application namespace. If you have to add to or modify the function prototypes in curses.h.in, read ncurses/MKlib_gen.sh first so you can avoid breaking XSI conformance. Please join the ncurses mailing list. See the INSTALL file in the top level of the distribution for details on the list. Look for the string FIXME in source files to tag minor bugs and potential problems that could use fixing. Don't try to auto-detect OS features in the main body of the C code. That's the job of the configuration system. To hold down complexity, do make your code data-driven. Especially, if you can drive logic from a table filtered out of include/Caps, do it. If you find you need to augment the data in that file in order to generate the proper table, that's still preferable to ad-hoc code -- that's why the fifth field (flags) is there. Have fun! Porting Hints The following notes are intended to be a first step towards DOS and Macintosh ports of the ncurses libraries. The following library modules are `pure curses'; they operate only on the curses internal structures, do all output through other curses calls (not including tputs() and putp()) and do not call any other UNIX routines such as signal(2) or the stdio library. Thus, they should not need to be modified for single-terminal ports. lib_addch.c lib_addstr.c lib_bkgd.c lib_box.c lib_clear.c lib_clrbot.c lib_clreol.c lib_delch.c lib_delwin.c lib_erase.c lib_inchstr.c lib_insch.c lib_insdel.c lib_insstr.c lib_keyname.c lib_move.c lib_mvwin.c lib_newwin.c lib_overlay.c lib_pad.c lib_printw.c lib_refresh.c lib_scanw.c lib_scroll.c lib_scrreg.c lib_set_term.c lib_touch.c lib_tparm.c lib_tputs.c lib_unctrl.c lib_window.c panel.c This module is pure curses, but calls outstr(): lib_getstr.c These modules are pure curses, except that they use tputs() and putp(): lib_beep.c lib_color.c lib_endwin.c lib_options.c lib_slk.c lib_vidattr.c This modules assist in POSIX emulation on non-POSIX systems: sigaction.c signal calls The following source files will not be needed for a single-terminal-type port. alloc_entry.c captoinfo.c clear.c comp_captab.c comp_error.c comp_hash.c comp_main.c comp_parse.c comp_scan.c dump_entry.c infocmp.c parse_entry.c read_entry.c tput.c write_entry.c The following modules will use open()/read()/write()/close()/lseek() on files, but no other OS calls. lib_screen.c used to read/write screen dumps lib_trace.c used to write trace data to the logfile Modules that would have to be modified for a port start here: The following modules are `pure curses' but contain assumptions inappropriate for a memory-mapped port. lib_longname.c assumes there may be multiple terminals lib_acs.c assumes acs_map as a double indirection lib_mvcur.c assumes cursor moves have variable cost lib_termcap.c assumes there may be multiple terminals lib_ti.c assumes there may be multiple terminals The following modules use UNIX-specific calls: lib_doupdate.c input checking lib_getch.c read() lib_initscr.c getenv() lib_newterm.c lib_baudrate.c lib_kernel.c various tty-manipulation and system calls lib_raw.c various tty-manipulation calls lib_setup.c various tty-manipulation calls lib_restart.c various tty-manipulation calls lib_tstp.c signal-manipulation calls lib_twait.c gettimeofday(), select(). _________________________________________________________________ Eric S. Raymond (Note: This is not the bug address!) ncurses-6.0-20160213/config.guess0000755000175100001440000012506512612750002015000 0ustar tomusers#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-10-21' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; k1om:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ncurses-6.0-20160213/MANIFEST0000644000175100001440000010535612624213163013617 0ustar tomusers./ANNOUNCE ./AUTHORS ./Ada95/Makefile.in ./Ada95/README ./Ada95/TODO ./Ada95/aclocal.m4 ./Ada95/configure ./Ada95/configure.in ./Ada95/doc/Makefile.in ./Ada95/gen/Makefile.in ./Ada95/gen/adacurses-config.in ./Ada95/gen/gen.c ./Ada95/gen/html.m4 ./Ada95/gen/normal.m4 ./Ada95/gen/table.m4 ./Ada95/gen/terminal_interface-curses-aux.ads.m4 ./Ada95/gen/terminal_interface-curses-forms-field_types.ads.m4 ./Ada95/gen/terminal_interface-curses-forms-field_user_data.ads.m4 ./Ada95/gen/terminal_interface-curses-forms-form_user_data.ads.m4 ./Ada95/gen/terminal_interface-curses-forms.ads.m4 ./Ada95/gen/terminal_interface-curses-menus-item_user_data.ads.m4 ./Ada95/gen/terminal_interface-curses-menus-menu_user_data.ads.m4 ./Ada95/gen/terminal_interface-curses-menus.ads.m4 ./Ada95/gen/terminal_interface-curses-mouse.ads.m4 ./Ada95/gen/terminal_interface-curses-panels-user_data.ads.m4 ./Ada95/gen/terminal_interface-curses-panels.ads.m4 ./Ada95/gen/terminal_interface-curses-trace.ads.m4 ./Ada95/gen/terminal_interface-curses.adb.m4 ./Ada95/gen/terminal_interface-curses.ads.m4 ./Ada95/include/MKncurses_def.sh ./Ada95/include/Makefile.in ./Ada95/include/ncurses_cfg.hin ./Ada95/include/ncurses_defs ./Ada95/make-tar.sh ./Ada95/mk-1st.awk ./Ada95/package/AdaCurses-doc.spec ./Ada95/package/AdaCurses.spec ./Ada95/package/debian/compat ./Ada95/package/debian/control ./Ada95/package/debian/copyright ./Ada95/package/debian/docs ./Ada95/package/debian/rules ./Ada95/package/debian/source/format ./Ada95/package/debian/watch ./Ada95/samples/Makefile.in ./Ada95/samples/README ./Ada95/samples/explain.txt ./Ada95/samples/ncurses.adb ./Ada95/samples/ncurses2-acs_and_scroll.adb ./Ada95/samples/ncurses2-acs_and_scroll.ads ./Ada95/samples/ncurses2-acs_display.adb ./Ada95/samples/ncurses2-acs_display.ads ./Ada95/samples/ncurses2-attr_test.adb ./Ada95/samples/ncurses2-attr_test.ads ./Ada95/samples/ncurses2-color_edit.adb ./Ada95/samples/ncurses2-color_edit.ads ./Ada95/samples/ncurses2-color_test.adb ./Ada95/samples/ncurses2-color_test.ads ./Ada95/samples/ncurses2-demo_forms.adb ./Ada95/samples/ncurses2-demo_forms.ads ./Ada95/samples/ncurses2-demo_pad.adb ./Ada95/samples/ncurses2-demo_pad.ads ./Ada95/samples/ncurses2-demo_panels.adb ./Ada95/samples/ncurses2-demo_panels.ads ./Ada95/samples/ncurses2-flushinp_test.adb ./Ada95/samples/ncurses2-flushinp_test.ads ./Ada95/samples/ncurses2-genericputs.adb ./Ada95/samples/ncurses2-genericputs.ads ./Ada95/samples/ncurses2-getch.ads ./Ada95/samples/ncurses2-getch_test.adb ./Ada95/samples/ncurses2-getch_test.ads ./Ada95/samples/ncurses2-getopt.adb ./Ada95/samples/ncurses2-getopt.ads ./Ada95/samples/ncurses2-m.adb ./Ada95/samples/ncurses2-m.ads ./Ada95/samples/ncurses2-menu_test.adb ./Ada95/samples/ncurses2-menu_test.ads ./Ada95/samples/ncurses2-overlap_test.adb ./Ada95/samples/ncurses2-overlap_test.ads ./Ada95/samples/ncurses2-slk_test.adb ./Ada95/samples/ncurses2-slk_test.ads ./Ada95/samples/ncurses2-test_sgr_attributes.adb ./Ada95/samples/ncurses2-test_sgr_attributes.ads ./Ada95/samples/ncurses2-trace_set.adb ./Ada95/samples/ncurses2-trace_set.ads ./Ada95/samples/ncurses2-util.adb ./Ada95/samples/ncurses2-util.ads ./Ada95/samples/ncurses2.ads ./Ada95/samples/rain.adb ./Ada95/samples/rain.ads ./Ada95/samples/sample-curses_demo-attributes.adb ./Ada95/samples/sample-curses_demo-attributes.ads ./Ada95/samples/sample-curses_demo-mouse.adb ./Ada95/samples/sample-curses_demo-mouse.ads ./Ada95/samples/sample-curses_demo.adb ./Ada95/samples/sample-curses_demo.ads ./Ada95/samples/sample-explanation.adb ./Ada95/samples/sample-explanation.ads ./Ada95/samples/sample-form_demo-aux.adb ./Ada95/samples/sample-form_demo-aux.ads ./Ada95/samples/sample-form_demo-handler.adb ./Ada95/samples/sample-form_demo-handler.ads ./Ada95/samples/sample-form_demo.adb ./Ada95/samples/sample-form_demo.ads ./Ada95/samples/sample-function_key_setting.adb ./Ada95/samples/sample-function_key_setting.ads ./Ada95/samples/sample-header_handler.adb ./Ada95/samples/sample-header_handler.ads ./Ada95/samples/sample-helpers.adb ./Ada95/samples/sample-helpers.ads ./Ada95/samples/sample-keyboard_handler.adb ./Ada95/samples/sample-keyboard_handler.ads ./Ada95/samples/sample-manifest.ads ./Ada95/samples/sample-menu_demo-aux.adb ./Ada95/samples/sample-menu_demo-aux.ads ./Ada95/samples/sample-menu_demo-handler.adb ./Ada95/samples/sample-menu_demo-handler.ads ./Ada95/samples/sample-menu_demo.adb ./Ada95/samples/sample-menu_demo.ads ./Ada95/samples/sample-my_field_type.adb ./Ada95/samples/sample-my_field_type.ads ./Ada95/samples/sample-text_io_demo.adb ./Ada95/samples/sample-text_io_demo.ads ./Ada95/samples/sample.adb ./Ada95/samples/sample.ads ./Ada95/samples/status.adb ./Ada95/samples/status.ads ./Ada95/samples/tour.adb ./Ada95/samples/tour.ads ./Ada95/src/Makefile.in ./Ada95/src/c_threaded_variables.c ./Ada95/src/c_threaded_variables.h ./Ada95/src/c_varargs_to_ada.c ./Ada95/src/c_varargs_to_ada.h ./Ada95/src/library.gpr ./Ada95/src/modules ./Ada95/src/ncurses_compat.c ./Ada95/src/terminal_interface-curses-aux.adb ./Ada95/src/terminal_interface-curses-forms-field_types-alpha.adb ./Ada95/src/terminal_interface-curses-forms-field_types-alpha.ads ./Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.adb ./Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.ads ./Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.adb ./Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.ads ./Ada95/src/terminal_interface-curses-forms-field_types-enumeration.adb ./Ada95/src/terminal_interface-curses-forms-field_types-enumeration.ads ./Ada95/src/terminal_interface-curses-forms-field_types-intfield.adb ./Ada95/src/terminal_interface-curses-forms-field_types-intfield.ads ./Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.adb ./Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.ads ./Ada95/src/terminal_interface-curses-forms-field_types-numeric.adb ./Ada95/src/terminal_interface-curses-forms-field_types-numeric.ads ./Ada95/src/terminal_interface-curses-forms-field_types-regexp.adb ./Ada95/src/terminal_interface-curses-forms-field_types-regexp.ads ./Ada95/src/terminal_interface-curses-forms-field_types-user-choice.adb ./Ada95/src/terminal_interface-curses-forms-field_types-user-choice.ads ./Ada95/src/terminal_interface-curses-forms-field_types-user.adb ./Ada95/src/terminal_interface-curses-forms-field_types-user.ads ./Ada95/src/terminal_interface-curses-forms-field_types.adb ./Ada95/src/terminal_interface-curses-forms-field_user_data.adb ./Ada95/src/terminal_interface-curses-forms-form_user_data.adb ./Ada95/src/terminal_interface-curses-forms.adb ./Ada95/src/terminal_interface-curses-menus-item_user_data.adb ./Ada95/src/terminal_interface-curses-menus-menu_user_data.adb ./Ada95/src/terminal_interface-curses-menus.adb ./Ada95/src/terminal_interface-curses-mouse.adb ./Ada95/src/terminal_interface-curses-panels-user_data.adb ./Ada95/src/terminal_interface-curses-panels.adb ./Ada95/src/terminal_interface-curses-putwin.adb ./Ada95/src/terminal_interface-curses-putwin.ads ./Ada95/src/terminal_interface-curses-termcap.adb ./Ada95/src/terminal_interface-curses-termcap.ads ./Ada95/src/terminal_interface-curses-terminfo.adb ./Ada95/src/terminal_interface-curses-terminfo.ads ./Ada95/src/terminal_interface-curses-text_io-aux.adb ./Ada95/src/terminal_interface-curses-text_io-aux.ads ./Ada95/src/terminal_interface-curses-text_io-complex_io.adb ./Ada95/src/terminal_interface-curses-text_io-complex_io.ads ./Ada95/src/terminal_interface-curses-text_io-decimal_io.adb ./Ada95/src/terminal_interface-curses-text_io-decimal_io.ads ./Ada95/src/terminal_interface-curses-text_io-enumeration_io.adb ./Ada95/src/terminal_interface-curses-text_io-enumeration_io.ads ./Ada95/src/terminal_interface-curses-text_io-fixed_io.adb ./Ada95/src/terminal_interface-curses-text_io-fixed_io.ads ./Ada95/src/terminal_interface-curses-text_io-float_io.adb ./Ada95/src/terminal_interface-curses-text_io-float_io.ads ./Ada95/src/terminal_interface-curses-text_io-integer_io.adb ./Ada95/src/terminal_interface-curses-text_io-integer_io.ads ./Ada95/src/terminal_interface-curses-text_io-modular_io.adb ./Ada95/src/terminal_interface-curses-text_io-modular_io.ads ./Ada95/src/terminal_interface-curses-text_io.adb ./Ada95/src/terminal_interface-curses-text_io.ads ./Ada95/src/terminal_interface-curses-trace.adb_p ./Ada95/src/terminal_interface.ads ./COPYING ./INSTALL ./MANIFEST ./Makefile.in ./Makefile.os2 ./NEWS ./README ./README.MinGW ./README.emx ./TO-DO ./VERSION ./aclocal.m4 ./announce.html.in ./c++/Makefile.in ./c++/NEWS ./c++/PROBLEMS ./c++/README-first ./c++/cursesapp.cc ./c++/cursesapp.h ./c++/cursesf.cc ./c++/cursesf.h ./c++/cursesm.cc ./c++/cursesm.h ./c++/cursesmain.cc ./c++/cursesp.cc ./c++/cursesp.h ./c++/cursespad.cc ./c++/cursesw.cc ./c++/cursesw.h ./c++/cursslk.cc ./c++/cursslk.h ./c++/demo.cc ./c++/edit_cfg.sh ./c++/etip.h.in ./c++/headers ./c++/internal.h ./c++/modules ./config.guess ./config.sub ./configure ./configure.in ./convert_configure.pl ./dist.mk ./doc/hackguide.doc ./doc/html/Ada95.html ./doc/html/NCURSES-Programming-HOWTO.html ./doc/html/ada/files.htm ./doc/html/ada/files/T.htm ./doc/html/ada/funcs.htm ./doc/html/ada/funcs/A.htm ./doc/html/ada/funcs/B.htm ./doc/html/ada/funcs/C.htm ./doc/html/ada/funcs/D.htm ./doc/html/ada/funcs/E.htm ./doc/html/ada/funcs/F.htm ./doc/html/ada/funcs/G.htm ./doc/html/ada/funcs/H.htm ./doc/html/ada/funcs/I.htm ./doc/html/ada/funcs/K.htm ./doc/html/ada/funcs/L.htm ./doc/html/ada/funcs/M.htm ./doc/html/ada/funcs/N.htm ./doc/html/ada/funcs/O.htm ./doc/html/ada/funcs/P.htm ./doc/html/ada/funcs/Q.htm ./doc/html/ada/funcs/R.htm ./doc/html/ada/funcs/S.htm ./doc/html/ada/funcs/T.htm ./doc/html/ada/funcs/U.htm ./doc/html/ada/funcs/V.htm ./doc/html/ada/funcs/W.htm ./doc/html/ada/index.htm ./doc/html/ada/main.htm ./doc/html/ada/table.html ./doc/html/ada/terminal_interface-curses-aux__adb.htm ./doc/html/ada/terminal_interface-curses-aux__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-alpha__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-alpha__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-alphanumeric__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-alphanumeric__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-enumeration-ada__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-enumeration-ada__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-enumeration__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-enumeration__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-intfield__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-intfield__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-ipv4_address__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-ipv4_address__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-numeric__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-numeric__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-regexp__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-regexp__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-user-choice__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-user-choice__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-user__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types-user__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_types__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_types__ads.htm ./doc/html/ada/terminal_interface-curses-forms-field_user_data__adb.htm ./doc/html/ada/terminal_interface-curses-forms-field_user_data__ads.htm ./doc/html/ada/terminal_interface-curses-forms-form_user_data__adb.htm ./doc/html/ada/terminal_interface-curses-forms-form_user_data__ads.htm ./doc/html/ada/terminal_interface-curses-forms__adb.htm ./doc/html/ada/terminal_interface-curses-forms__ads.htm ./doc/html/ada/terminal_interface-curses-menus-item_user_data__adb.htm ./doc/html/ada/terminal_interface-curses-menus-item_user_data__ads.htm ./doc/html/ada/terminal_interface-curses-menus-menu_user_data__adb.htm ./doc/html/ada/terminal_interface-curses-menus-menu_user_data__ads.htm ./doc/html/ada/terminal_interface-curses-menus__adb.htm ./doc/html/ada/terminal_interface-curses-menus__ads.htm ./doc/html/ada/terminal_interface-curses-mouse__adb.htm ./doc/html/ada/terminal_interface-curses-mouse__ads.htm ./doc/html/ada/terminal_interface-curses-panels-user_data__adb.htm ./doc/html/ada/terminal_interface-curses-panels-user_data__ads.htm ./doc/html/ada/terminal_interface-curses-panels__adb.htm ./doc/html/ada/terminal_interface-curses-panels__ads.htm ./doc/html/ada/terminal_interface-curses-putwin__adb.htm ./doc/html/ada/terminal_interface-curses-putwin__ads.htm ./doc/html/ada/terminal_interface-curses-termcap__adb.htm ./doc/html/ada/terminal_interface-curses-termcap__ads.htm ./doc/html/ada/terminal_interface-curses-terminfo__adb.htm ./doc/html/ada/terminal_interface-curses-terminfo__ads.htm ./doc/html/ada/terminal_interface-curses-text_io-aux__adb.htm ./doc/html/ada/terminal_interface-curses-text_io-aux__ads.htm ./doc/html/ada/terminal_interface-curses-text_io-complex_io__adb.htm ./doc/html/ada/terminal_interface-curses-text_io-complex_io__ads.htm ./doc/html/ada/terminal_interface-curses-text_io-decimal_io__adb.htm ./doc/html/ada/terminal_interface-curses-text_io-decimal_io__ads.htm ./doc/html/ada/terminal_interface-curses-text_io-enumeration_io__adb.htm ./doc/html/ada/terminal_interface-curses-text_io-enumeration_io__ads.htm ./doc/html/ada/terminal_interface-curses-text_io-fixed_io__adb.htm ./doc/html/ada/terminal_interface-curses-text_io-fixed_io__ads.htm ./doc/html/ada/terminal_interface-curses-text_io-float_io__adb.htm ./doc/html/ada/terminal_interface-curses-text_io-float_io__ads.htm ./doc/html/ada/terminal_interface-curses-text_io-integer_io__adb.htm ./doc/html/ada/terminal_interface-curses-text_io-integer_io__ads.htm ./doc/html/ada/terminal_interface-curses-text_io-modular_io__adb.htm ./doc/html/ada/terminal_interface-curses-text_io-modular_io__ads.htm ./doc/html/ada/terminal_interface-curses-text_io__adb.htm ./doc/html/ada/terminal_interface-curses-text_io__ads.htm ./doc/html/ada/terminal_interface-curses-trace__adb.htm ./doc/html/ada/terminal_interface-curses-trace__ads.htm ./doc/html/ada/terminal_interface-curses__adb.htm ./doc/html/ada/terminal_interface-curses__ads.htm ./doc/html/ada/terminal_interface-curses_constants__ads.htm ./doc/html/ada/terminal_interface__ads.htm ./doc/html/announce.html ./doc/html/hackguide.html ./doc/html/index.html ./doc/html/man/adacurses-config.1.html ./doc/html/man/captoinfo.1m.html ./doc/html/man/clear.1.html ./doc/html/man/curs_add_wch.3x.html ./doc/html/man/curs_add_wchstr.3x.html ./doc/html/man/curs_addch.3x.html ./doc/html/man/curs_addchstr.3x.html ./doc/html/man/curs_addstr.3x.html ./doc/html/man/curs_addwstr.3x.html ./doc/html/man/curs_attr.3x.html ./doc/html/man/curs_beep.3x.html ./doc/html/man/curs_bkgd.3x.html ./doc/html/man/curs_bkgrnd.3x.html ./doc/html/man/curs_border.3x.html ./doc/html/man/curs_border_set.3x.html ./doc/html/man/curs_clear.3x.html ./doc/html/man/curs_color.3x.html ./doc/html/man/curs_delch.3x.html ./doc/html/man/curs_deleteln.3x.html ./doc/html/man/curs_extend.3x.html ./doc/html/man/curs_get_wch.3x.html ./doc/html/man/curs_get_wstr.3x.html ./doc/html/man/curs_getcchar.3x.html ./doc/html/man/curs_getch.3x.html ./doc/html/man/curs_getstr.3x.html ./doc/html/man/curs_getyx.3x.html ./doc/html/man/curs_in_wch.3x.html ./doc/html/man/curs_in_wchstr.3x.html ./doc/html/man/curs_inch.3x.html ./doc/html/man/curs_inchstr.3x.html ./doc/html/man/curs_initscr.3x.html ./doc/html/man/curs_inopts.3x.html ./doc/html/man/curs_ins_wch.3x.html ./doc/html/man/curs_ins_wstr.3x.html ./doc/html/man/curs_insch.3x.html ./doc/html/man/curs_insstr.3x.html ./doc/html/man/curs_instr.3x.html ./doc/html/man/curs_inwstr.3x.html ./doc/html/man/curs_kernel.3x.html ./doc/html/man/curs_legacy.3x.html ./doc/html/man/curs_memleaks.3x.html ./doc/html/man/curs_mouse.3x.html ./doc/html/man/curs_move.3x.html ./doc/html/man/curs_opaque.3x.html ./doc/html/man/curs_outopts.3x.html ./doc/html/man/curs_overlay.3x.html ./doc/html/man/curs_pad.3x.html ./doc/html/man/curs_print.3x.html ./doc/html/man/curs_printw.3x.html ./doc/html/man/curs_refresh.3x.html ./doc/html/man/curs_scanw.3x.html ./doc/html/man/curs_scr_dump.3x.html ./doc/html/man/curs_scroll.3x.html ./doc/html/man/curs_slk.3x.html ./doc/html/man/curs_sp_funcs.3x.html ./doc/html/man/curs_termattrs.3x.html ./doc/html/man/curs_termcap.3x.html ./doc/html/man/curs_terminfo.3x.html ./doc/html/man/curs_threads.3x.html ./doc/html/man/curs_touch.3x.html ./doc/html/man/curs_trace.3x.html ./doc/html/man/curs_util.3x.html ./doc/html/man/curs_variables.3x.html ./doc/html/man/curs_window.3x.html ./doc/html/man/default_colors.3x.html ./doc/html/man/define_key.3x.html ./doc/html/man/form.3x.html ./doc/html/man/form_cursor.3x.html ./doc/html/man/form_data.3x.html ./doc/html/man/form_driver.3x.html ./doc/html/man/form_field.3x.html ./doc/html/man/form_field_attributes.3x.html ./doc/html/man/form_field_buffer.3x.html ./doc/html/man/form_field_info.3x.html ./doc/html/man/form_field_just.3x.html ./doc/html/man/form_field_new.3x.html ./doc/html/man/form_field_opts.3x.html ./doc/html/man/form_field_userptr.3x.html ./doc/html/man/form_field_validation.3x.html ./doc/html/man/form_fieldtype.3x.html ./doc/html/man/form_hook.3x.html ./doc/html/man/form_new.3x.html ./doc/html/man/form_new_page.3x.html ./doc/html/man/form_opts.3x.html ./doc/html/man/form_page.3x.html ./doc/html/man/form_post.3x.html ./doc/html/man/form_requestname.3x.html ./doc/html/man/form_userptr.3x.html ./doc/html/man/form_variables.3x.html ./doc/html/man/form_win.3x.html ./doc/html/man/index.html ./doc/html/man/infocmp.1m.html ./doc/html/man/infotocap.1m.html ./doc/html/man/key_defined.3x.html ./doc/html/man/keybound.3x.html ./doc/html/man/keyok.3x.html ./doc/html/man/legacy_coding.3x.html ./doc/html/man/menu.3x.html ./doc/html/man/menu_attributes.3x.html ./doc/html/man/menu_cursor.3x.html ./doc/html/man/menu_driver.3x.html ./doc/html/man/menu_format.3x.html ./doc/html/man/menu_hook.3x.html ./doc/html/man/menu_items.3x.html ./doc/html/man/menu_mark.3x.html ./doc/html/man/menu_new.3x.html ./doc/html/man/menu_opts.3x.html ./doc/html/man/menu_pattern.3x.html ./doc/html/man/menu_post.3x.html ./doc/html/man/menu_requestname.3x.html ./doc/html/man/menu_spacing.3x.html ./doc/html/man/menu_userptr.3x.html ./doc/html/man/menu_win.3x.html ./doc/html/man/mitem_current.3x.html ./doc/html/man/mitem_name.3x.html ./doc/html/man/mitem_new.3x.html ./doc/html/man/mitem_opts.3x.html ./doc/html/man/mitem_userptr.3x.html ./doc/html/man/mitem_value.3x.html ./doc/html/man/mitem_visible.3x.html ./doc/html/man/ncurses.3x.html ./doc/html/man/ncurses5-config.1.html ./doc/html/man/panel.3x.html ./doc/html/man/resizeterm.3x.html ./doc/html/man/tabs.1.html ./doc/html/man/term.5.html ./doc/html/man/term.7.html ./doc/html/man/term_variables.3x.html ./doc/html/man/terminfo.5.html ./doc/html/man/tic.1m.html ./doc/html/man/toe.1m.html ./doc/html/man/tput.1.html ./doc/html/man/tset.1.html ./doc/html/man/wresize.3x.html ./doc/html/ncurses-intro.html ./doc/ncurses-intro.doc ./form/Makefile.in ./form/READ.ME ./form/f_trace.c ./form/fld_arg.c ./form/fld_attr.c ./form/fld_current.c ./form/fld_def.c ./form/fld_dup.c ./form/fld_ftchoice.c ./form/fld_ftlink.c ./form/fld_info.c ./form/fld_just.c ./form/fld_link.c ./form/fld_max.c ./form/fld_move.c ./form/fld_newftyp.c ./form/fld_opts.c ./form/fld_pad.c ./form/fld_page.c ./form/fld_stat.c ./form/fld_type.c ./form/fld_user.c ./form/form.h ./form/form.priv.h ./form/frm_cursor.c ./form/frm_data.c ./form/frm_def.c ./form/frm_driver.c ./form/frm_hook.c ./form/frm_opts.c ./form/frm_page.c ./form/frm_post.c ./form/frm_req_name.c ./form/frm_scale.c ./form/frm_sub.c ./form/frm_user.c ./form/frm_win.c ./form/fty_alnum.c ./form/fty_alpha.c ./form/fty_enum.c ./form/fty_generic.c ./form/fty_int.c ./form/fty_ipv4.c ./form/fty_num.c ./form/fty_regex.c ./form/headers ./form/llib-lform ./form/llib-lformt ./form/llib-lformtw ./form/llib-lformw ./form/modules ./include/Caps ./include/Caps.aix4 ./include/Caps.hpux11 ./include/Caps.keys ./include/Caps.osf1r5 ./include/Caps.uwin ./include/MKhashsize.sh ./include/MKkey_defs.sh ./include/MKncurses_def.sh ./include/MKparametrized.sh ./include/MKterm.h.awk.in ./include/Makefile.in ./include/capdefaults.c ./include/curses.h.in ./include/curses.tail ./include/curses.wide ./include/edit_cfg.sh ./include/hashed_db.h ./include/headers ./include/nc_alloc.h ./include/nc_mingw.h ./include/nc_panel.h ./include/nc_string.h ./include/nc_termios.h ./include/nc_tparm.h ./include/ncurses_cfg.hin ./include/ncurses_defs ./include/ncurses_dll.h.in ./include/ncurses_mingw.h ./include/term_entry.h ./include/termcap.h.in ./include/tic.h ./include/unctrl.h.in ./install-sh ./man/MKada_config.in ./man/MKncu_config.in ./man/MKterminfo.sh ./man/Makefile.in ./man/captoinfo.1m ./man/clear.1 ./man/curs_add_wch.3x ./man/curs_add_wchstr.3x ./man/curs_addch.3x ./man/curs_addchstr.3x ./man/curs_addstr.3x ./man/curs_addwstr.3x ./man/curs_attr.3x ./man/curs_beep.3x ./man/curs_bkgd.3x ./man/curs_bkgrnd.3x ./man/curs_border.3x ./man/curs_border_set.3x ./man/curs_clear.3x ./man/curs_color.3x ./man/curs_delch.3x ./man/curs_deleteln.3x ./man/curs_extend.3x ./man/curs_get_wch.3x ./man/curs_get_wstr.3x ./man/curs_getcchar.3x ./man/curs_getch.3x ./man/curs_getstr.3x ./man/curs_getyx.3x ./man/curs_in_wch.3x ./man/curs_in_wchstr.3x ./man/curs_inch.3x ./man/curs_inchstr.3x ./man/curs_initscr.3x ./man/curs_inopts.3x ./man/curs_ins_wch.3x ./man/curs_ins_wstr.3x ./man/curs_insch.3x ./man/curs_insstr.3x ./man/curs_instr.3x ./man/curs_inwstr.3x ./man/curs_kernel.3x ./man/curs_legacy.3x ./man/curs_memleaks.3x ./man/curs_mouse.3x ./man/curs_move.3x ./man/curs_opaque.3x ./man/curs_outopts.3x ./man/curs_overlay.3x ./man/curs_pad.3x ./man/curs_print.3x ./man/curs_printw.3x ./man/curs_refresh.3x ./man/curs_scanw.3x ./man/curs_scr_dump.3x ./man/curs_scroll.3x ./man/curs_slk.3x ./man/curs_sp_funcs.3x ./man/curs_termattrs.3x ./man/curs_termcap.3x ./man/curs_terminfo.3x ./man/curs_threads.3x ./man/curs_touch.3x ./man/curs_trace.3x ./man/curs_util.3x ./man/curs_variables.3x ./man/curs_window.3x ./man/default_colors.3x ./man/define_key.3x ./man/form.3x ./man/form_cursor.3x ./man/form_data.3x ./man/form_driver.3x ./man/form_field.3x ./man/form_field_attributes.3x ./man/form_field_buffer.3x ./man/form_field_info.3x ./man/form_field_just.3x ./man/form_field_new.3x ./man/form_field_opts.3x ./man/form_field_userptr.3x ./man/form_field_validation.3x ./man/form_fieldtype.3x ./man/form_hook.3x ./man/form_new.3x ./man/form_new_page.3x ./man/form_opts.3x ./man/form_page.3x ./man/form_post.3x ./man/form_requestname.3x ./man/form_userptr.3x ./man/form_variables.3x ./man/form_win.3x ./man/infocmp.1m ./man/infotocap.1m ./man/key_defined.3x ./man/keybound.3x ./man/keyok.3x ./man/legacy_coding.3x ./man/make_sed.sh ./man/man_db.renames ./man/manhtml.aliases ./man/manhtml.externs ./man/manlinks.sed ./man/menu.3x ./man/menu_attributes.3x ./man/menu_cursor.3x ./man/menu_driver.3x ./man/menu_format.3x ./man/menu_hook.3x ./man/menu_items.3x ./man/menu_mark.3x ./man/menu_new.3x ./man/menu_opts.3x ./man/menu_pattern.3x ./man/menu_post.3x ./man/menu_requestname.3x ./man/menu_spacing.3x ./man/menu_userptr.3x ./man/menu_win.3x ./man/mitem_current.3x ./man/mitem_name.3x ./man/mitem_new.3x ./man/mitem_opts.3x ./man/mitem_userptr.3x ./man/mitem_value.3x ./man/mitem_visible.3x ./man/ncurses.3x ./man/panel.3x ./man/resizeterm.3x ./man/tabs.1 ./man/term.5 ./man/term.7 ./man/term_variables.3x ./man/terminfo.head ./man/terminfo.tail ./man/tic.1m ./man/toe.1m ./man/tput.1 ./man/tset.1 ./man/wresize.3x ./menu/Makefile.in ./menu/READ.ME ./menu/eti.h ./menu/headers ./menu/llib-lmenu ./menu/llib-lmenut ./menu/llib-lmenutw ./menu/llib-lmenuw ./menu/m_attribs.c ./menu/m_cursor.c ./menu/m_driver.c ./menu/m_format.c ./menu/m_global.c ./menu/m_hook.c ./menu/m_item_cur.c ./menu/m_item_nam.c ./menu/m_item_new.c ./menu/m_item_opt.c ./menu/m_item_top.c ./menu/m_item_use.c ./menu/m_item_val.c ./menu/m_item_vis.c ./menu/m_items.c ./menu/m_new.c ./menu/m_opts.c ./menu/m_pad.c ./menu/m_pattern.c ./menu/m_post.c ./menu/m_req_name.c ./menu/m_scale.c ./menu/m_spacing.c ./menu/m_sub.c ./menu/m_trace.c ./menu/m_userptr.c ./menu/m_win.c ./menu/menu.h ./menu/menu.priv.h ./menu/mf_common.h ./menu/modules ./misc/Makefile.in ./misc/chkdef.cmd ./misc/cleantic.cmd ./misc/cmpdef.cmd ./misc/csort ./misc/emx.src ./misc/form.def ./misc/form.ref ./misc/gen-pkgconfig.in ./misc/gen_edit.sh ./misc/magic ./misc/makedef.cmd ./misc/makellib ./misc/menu.def ./misc/menu.ref ./misc/ncurses-config.in ./misc/ncurses.def ./misc/ncurses.ref ./misc/ncurses.supp ./misc/panel.def ./misc/panel.ref ./misc/run_tic.in ./misc/shlib ./misc/tabset/std ./misc/tabset/stdcrt ./misc/tabset/vt100 ./misc/tabset/vt300 ./misc/tdlint ./misc/terminfo.src ./mk-0th.awk ./mk-1st.awk ./mk-2nd.awk ./mk-hdr.awk ./ncurses/Makefile.in ./ncurses/README ./ncurses/README.IZ ./ncurses/SigAction.h ./ncurses/base/MKkeyname.awk ./ncurses/base/MKlib_gen.sh ./ncurses/base/MKunctrl.awk ./ncurses/base/README ./ncurses/base/define_key.c ./ncurses/base/key_defined.c ./ncurses/base/keybound.c ./ncurses/base/keyok.c ./ncurses/base/legacy_coding.c ./ncurses/base/lib_addch.c ./ncurses/base/lib_addstr.c ./ncurses/base/lib_beep.c ./ncurses/base/lib_bkgd.c ./ncurses/base/lib_box.c ./ncurses/base/lib_chgat.c ./ncurses/base/lib_clear.c ./ncurses/base/lib_clearok.c ./ncurses/base/lib_clrbot.c ./ncurses/base/lib_clreol.c ./ncurses/base/lib_color.c ./ncurses/base/lib_colorset.c ./ncurses/base/lib_delch.c ./ncurses/base/lib_delwin.c ./ncurses/base/lib_dft_fgbg.c ./ncurses/base/lib_driver.c ./ncurses/base/lib_echo.c ./ncurses/base/lib_endwin.c ./ncurses/base/lib_erase.c ./ncurses/base/lib_flash.c ./ncurses/base/lib_freeall.c ./ncurses/base/lib_getch.c ./ncurses/base/lib_getstr.c ./ncurses/base/lib_hline.c ./ncurses/base/lib_immedok.c ./ncurses/base/lib_inchstr.c ./ncurses/base/lib_initscr.c ./ncurses/base/lib_insch.c ./ncurses/base/lib_insdel.c ./ncurses/base/lib_insnstr.c ./ncurses/base/lib_instr.c ./ncurses/base/lib_isendwin.c ./ncurses/base/lib_leaveok.c ./ncurses/base/lib_mouse.c ./ncurses/base/lib_move.c ./ncurses/base/lib_mvwin.c ./ncurses/base/lib_newterm.c ./ncurses/base/lib_newwin.c ./ncurses/base/lib_nl.c ./ncurses/base/lib_overlay.c ./ncurses/base/lib_pad.c ./ncurses/base/lib_printw.c ./ncurses/base/lib_redrawln.c ./ncurses/base/lib_refresh.c ./ncurses/base/lib_restart.c ./ncurses/base/lib_scanw.c ./ncurses/base/lib_screen.c ./ncurses/base/lib_scroll.c ./ncurses/base/lib_scrollok.c ./ncurses/base/lib_scrreg.c ./ncurses/base/lib_set_term.c ./ncurses/base/lib_slk.c ./ncurses/base/lib_slkatr_set.c ./ncurses/base/lib_slkatrof.c ./ncurses/base/lib_slkatron.c ./ncurses/base/lib_slkatrset.c ./ncurses/base/lib_slkattr.c ./ncurses/base/lib_slkclear.c ./ncurses/base/lib_slkcolor.c ./ncurses/base/lib_slkinit.c ./ncurses/base/lib_slklab.c ./ncurses/base/lib_slkrefr.c ./ncurses/base/lib_slkset.c ./ncurses/base/lib_slktouch.c ./ncurses/base/lib_touch.c ./ncurses/base/lib_ungetch.c ./ncurses/base/lib_vline.c ./ncurses/base/lib_wattroff.c ./ncurses/base/lib_wattron.c ./ncurses/base/lib_winch.c ./ncurses/base/lib_window.c ./ncurses/base/nc_panel.c ./ncurses/base/resizeterm.c ./ncurses/base/safe_sprintf.c ./ncurses/base/sigaction.c ./ncurses/base/tries.c ./ncurses/base/use_window.c ./ncurses/base/version.c ./ncurses/base/vsscanf.c ./ncurses/base/wresize.c ./ncurses/build.priv.h ./ncurses/curses.priv.h ./ncurses/fifo_defs.h ./ncurses/llib-lncurses ./ncurses/llib-lncursest ./ncurses/llib-lncursestw ./ncurses/llib-lncursesw ./ncurses/llib-ltic ./ncurses/llib-ltict ./ncurses/llib-ltictw ./ncurses/llib-lticw ./ncurses/llib-ltinfo ./ncurses/llib-ltinfot ./ncurses/llib-ltinfotw ./ncurses/llib-ltinfow ./ncurses/modules ./ncurses/tinfo/MKcaptab.awk ./ncurses/tinfo/MKcaptab.sh ./ncurses/tinfo/MKcodes.awk ./ncurses/tinfo/MKfallback.sh ./ncurses/tinfo/MKkeys_list.sh ./ncurses/tinfo/MKnames.awk ./ncurses/tinfo/README ./ncurses/tinfo/access.c ./ncurses/tinfo/add_tries.c ./ncurses/tinfo/alloc_entry.c ./ncurses/tinfo/alloc_ttype.c ./ncurses/tinfo/captoinfo.c ./ncurses/tinfo/comp_error.c ./ncurses/tinfo/comp_expand.c ./ncurses/tinfo/comp_hash.c ./ncurses/tinfo/comp_parse.c ./ncurses/tinfo/comp_scan.c ./ncurses/tinfo/db_iterator.c ./ncurses/tinfo/doalloc.c ./ncurses/tinfo/entries.c ./ncurses/tinfo/free_ttype.c ./ncurses/tinfo/getenv_num.c ./ncurses/tinfo/hashed_db.c ./ncurses/tinfo/home_terminfo.c ./ncurses/tinfo/init_keytry.c ./ncurses/tinfo/lib_acs.c ./ncurses/tinfo/lib_baudrate.c ./ncurses/tinfo/lib_cur_term.c ./ncurses/tinfo/lib_data.c ./ncurses/tinfo/lib_has_cap.c ./ncurses/tinfo/lib_kernel.c ./ncurses/tinfo/lib_longname.c ./ncurses/tinfo/lib_napms.c ./ncurses/tinfo/lib_options.c ./ncurses/tinfo/lib_print.c ./ncurses/tinfo/lib_raw.c ./ncurses/tinfo/lib_setup.c ./ncurses/tinfo/lib_termcap.c ./ncurses/tinfo/lib_termname.c ./ncurses/tinfo/lib_tgoto.c ./ncurses/tinfo/lib_ti.c ./ncurses/tinfo/lib_tparm.c ./ncurses/tinfo/lib_tputs.c ./ncurses/tinfo/lib_ttyflags.c ./ncurses/tinfo/make_hash.c ./ncurses/tinfo/make_keys.c ./ncurses/tinfo/name_match.c ./ncurses/tinfo/obsolete.c ./ncurses/tinfo/parse_entry.c ./ncurses/tinfo/read_entry.c ./ncurses/tinfo/read_termcap.c ./ncurses/tinfo/strings.c ./ncurses/tinfo/tinfo_driver.c ./ncurses/tinfo/trim_sgr0.c ./ncurses/tinfo/use_screen.c ./ncurses/tinfo/write_entry.c ./ncurses/trace/README ./ncurses/trace/lib_trace.c ./ncurses/trace/lib_traceatr.c ./ncurses/trace/lib_tracebits.c ./ncurses/trace/lib_tracechr.c ./ncurses/trace/lib_tracedmp.c ./ncurses/trace/lib_tracemse.c ./ncurses/trace/trace_buf.c ./ncurses/trace/trace_tries.c ./ncurses/trace/trace_xnames.c ./ncurses/trace/varargs.c ./ncurses/trace/visbuf.c ./ncurses/tty/MKexpanded.sh ./ncurses/tty/hardscroll.c ./ncurses/tty/hashmap.c ./ncurses/tty/lib_mvcur.c ./ncurses/tty/lib_tstp.c ./ncurses/tty/lib_twait.c ./ncurses/tty/lib_vidattr.c ./ncurses/tty/tty_update.c ./ncurses/wcwidth.h ./ncurses/widechar/charable.c ./ncurses/widechar/lib_add_wch.c ./ncurses/widechar/lib_box_set.c ./ncurses/widechar/lib_cchar.c ./ncurses/widechar/lib_erasewchar.c ./ncurses/widechar/lib_get_wch.c ./ncurses/widechar/lib_get_wstr.c ./ncurses/widechar/lib_hline_set.c ./ncurses/widechar/lib_in_wch.c ./ncurses/widechar/lib_in_wchnstr.c ./ncurses/widechar/lib_ins_wch.c ./ncurses/widechar/lib_inwstr.c ./ncurses/widechar/lib_key_name.c ./ncurses/widechar/lib_pecho_wchar.c ./ncurses/widechar/lib_slk_wset.c ./ncurses/widechar/lib_unget_wch.c ./ncurses/widechar/lib_vid_attr.c ./ncurses/widechar/lib_vline_set.c ./ncurses/widechar/lib_wacs.c ./ncurses/widechar/lib_wunctrl.c ./ncurses/widechar/widechars.c ./ncurses/win32con/gettimeofday.c ./ncurses/win32con/wcwidth.c ./ncurses/win32con/win_driver.c ./package/debian-mingw/changelog ./package/debian-mingw/compat ./package/debian-mingw/control ./package/debian-mingw/copyright ./package/debian-mingw/rules ./package/debian-mingw/source/format ./package/debian-mingw/watch ./package/debian-mingw64/changelog ./package/debian-mingw64/compat ./package/debian-mingw64/control ./package/debian-mingw64/copyright ./package/debian-mingw64/rules ./package/debian-mingw64/source/format ./package/debian-mingw64/watch ./package/debian/changelog ./package/debian/compat ./package/debian/control ./package/debian/copyright ./package/debian/rules ./package/debian/source/format ./package/debian/watch ./package/mingw-ncurses.nsi ./package/mingw-ncurses.spec ./package/ncurses.map ./package/ncurses.spec ./package/ncurses.sym ./package/ncursest.map ./package/ncursest.sym ./package/ncursestw.map ./package/ncursestw.sym ./package/ncursesw.map ./package/ncursesw.sym ./panel/Makefile.in ./panel/headers ./panel/llib-lpanel ./panel/llib-lpanelt ./panel/llib-lpaneltw ./panel/llib-lpanelw ./panel/modules ./panel/p_above.c ./panel/p_below.c ./panel/p_bottom.c ./panel/p_delete.c ./panel/p_hidden.c ./panel/p_hide.c ./panel/p_move.c ./panel/p_new.c ./panel/p_replace.c ./panel/p_show.c ./panel/p_top.c ./panel/p_update.c ./panel/p_user.c ./panel/p_win.c ./panel/panel.c ./panel/panel.h ./panel/panel.priv.h ./progs/MKtermsort.sh ./progs/Makefile.in ./progs/capconvert ./progs/clear.c ./progs/clear.sh ./progs/dump_entry.c ./progs/dump_entry.h ./progs/infocmp.c ./progs/modules ./progs/progs.priv.h ./progs/tabs.c ./progs/tic.c ./progs/toe.c ./progs/tparm_type.c ./progs/tparm_type.h ./progs/tput.c ./progs/transform.c ./progs/tset.c ./test/Makefile.in ./test/README ./test/aclocal.m4 ./test/background.c ./test/blue.c ./test/bs.6 ./test/bs.c ./test/bulgarian-utf8.txt ./test/cardfile.c ./test/cardfile.dat ./test/chgat.c ./test/clip_printw.c ./test/color_name.h ./test/color_set.c ./test/configure ./test/configure.in ./test/demo_altkeys.c ./test/demo_defkey.c ./test/demo_forms.c ./test/demo_forms.txt ./test/demo_keyok.c ./test/demo_menus.c ./test/demo_panels.c ./test/demo_termcap.c ./test/demo_terminfo.c ./test/ditto.c ./test/dots.c ./test/dots_curses.c ./test/dots_mvcur.c ./test/dots_termcap.c ./test/echochar.c ./test/edit_field.c ./test/edit_field.h ./test/filter.c ./test/firework.c ./test/firstlast.c ./test/foldkeys.c ./test/form_driver_w.c ./test/gdc.6 ./test/gdc.c ./test/hanoi.c ./test/hashtest.c ./test/inch_wide.c ./test/inchs.c ./test/ins_wide.c ./test/insdelln.c ./test/inserts.c ./test/key_names.c ./test/keynames.c ./test/knight.c ./test/linedata.h ./test/linux-color.dat ./test/listused.sh ./test/lrtest.c ./test/make-tar.sh ./test/mk-test.awk ./test/modules ./test/movewindow.c ./test/ncurses.c ./test/ncurses_tst.hin ./test/newdemo.c ./test/package/debian-mingw/compat ./test/package/debian-mingw/control ./test/package/debian-mingw/copyright ./test/package/debian-mingw/docs ./test/package/debian-mingw/rules ./test/package/debian-mingw/source/format ./test/package/debian-mingw/watch ./test/package/debian-mingw64/compat ./test/package/debian-mingw64/control ./test/package/debian-mingw64/copyright ./test/package/debian-mingw64/docs ./test/package/debian-mingw64/rules ./test/package/debian-mingw64/source/format ./test/package/debian-mingw64/watch ./test/package/debian/compat ./test/package/debian/control ./test/package/debian/copyright ./test/package/debian/docs ./test/package/debian/rules ./test/package/debian/source/format ./test/package/debian/watch ./test/package/mingw-ncurses-examples.spec ./test/package/ncurses-examples.spec ./test/programs ./test/railroad.c ./test/rain.c ./test/redraw.c ./test/savescreen.c ./test/savescreen.sh ./test/tclock.c ./test/test.priv.h ./test/test_add_wchstr.c ./test/test_addchstr.c ./test/test_addstr.c ./test/test_addwstr.c ./test/test_arrays.c ./test/test_get_wstr.c ./test/test_getstr.c ./test/test_instr.c ./test/test_inwstr.c ./test/test_opaque.c ./test/test_setupterm.c ./test/test_sgr.c ./test/test_vid_puts.c ./test/test_vidputs.c ./test/testaddch.c ./test/testcurs.c ./test/testscanw.c ./test/tracemunch ./test/view.c ./test/widechars-utf8.txt ./test/widechars.h ./test/worm.c ./test/xmas.c ./test/xterm-16color.dat ./test/xterm-256color.dat ./test/xterm-88color.dat ncurses-6.0-20160213/mk-1st.awk0000644000175100001440000004316012445406056014306 0ustar tomusers# $Id: mk-1st.awk,v 1.98 2014/12/20 23:54:22 tom Exp $ ############################################################################## # Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey # # Generate list of objects for a given model library # Variables: # name (library name, e.g., "ncurses", "panel", "forms", "menus") # traces ("all" or "DEBUG", to control whether tracing is compiled in) # MODEL (e.g., "DEBUG", uppercase; toupper is not portable) # CXX_MODEL (e.g., "DEBUG", uppercase) # model (directory into which we compile, e.g., "obj") # prefix (e.g., "lib", for Unix-style libraries) # suffix (e.g., "_g.a", for debug libraries) # subset ("none", "base", "base+ext_funcs" or "termlib", etc.) # driver ("yes" or "no", depends on --enable-term-driver) # ShlibVer ("rel", "abi" or "auto", to augment DoLinks variable) # ShlibVerInfix ("yes" or "no", determines location of version #) # SymLink ("ln -s", etc) # TermlibRoot ("tinfo" or other root for libterm.so) # TermlibSuffix (".so" or other suffix for libterm.so) # ReLink ("yes", or "no", flag to rebuild shared libs on install) # DoLinks ("yes", "reverse" or "no", flag to add symbolic links) # rmSoLocs ("yes" or "no", flag to add extra clean target) # ldconfig (path for this tool, if used) # overwrite ("yes" or "no", flag to add link to libcurses.a # depend (optional dependencies for all objects, e.g, ncurses_cfg.h) # host (cross-compile host, if any) # libtool_version (libtool "-version-info" or "-version-number") # # Notes: # CLIXs nawk does not like underscores in command-line variable names. # Mixed-case variable names are ok. # HP/UX requires shared libraries to have executable permissions. # function is_ticlib() { return ( subset ~ /^ticlib$/ ); } function is_termlib() { return ( subset ~ /^(ticlib\+)?termlib((\+[^+ ]+)*\+[a-z_]+_tinfo)?$/ ); } # see lib_name function lib_name_of(a_name) { return sprintf("%s%s%s", prefix, a_name, suffix) } # see imp_name function imp_name_of(a_name) { if (ShlibVerInfix == "cygdll" || ShlibVerInfix == "msysdll" || ShlibVerInfix == "mingw") { result = sprintf("%s%s%s.a", prefix, a_name, suffix); } else { result = ""; } return result; } # see abi_name function abi_name_of(a_name) { if (ShlibVerInfix == "cygdll") { result = sprintf("%s%s$(ABI_VERSION)%s", "cyg", a_name, suffix); } else if (ShlibVerInfix == "msysdll") { result = sprintf("%s%s$(ABI_VERSION)%s", "msys-", a_name, suffix); } else if (ShlibVerInfix == "mingw") { result = sprintf("%s%s$(ABI_VERSION)%s", prefix, a_name, suffix); } else if (ShlibVerInfix == "yes") { result = sprintf("%s%s.$(ABI_VERSION)%s", prefix, a_name, suffix); } else { result = sprintf("%s.$(ABI_VERSION)", lib_name_of(a_name)); } return result; } # see rel_name function rel_name_of(a_name) { if (ShlibVerInfix == "cygdll") { result = sprintf("%s%s$(REL_VERSION)%s", "cyg", a_name, suffix); } else if (ShlibVerInfix == "msysdll") { result = sprintf("%s%s$(ABI_VERSION)%s", "msys-", a_name, suffix); } else if (ShlibVerInfix == "mingw") { result = sprintf("%s%s$(REL_VERSION)%s", prefix, a_name, suffix); } else if (ShlibVerInfix == "yes") { result = sprintf("%s%s.$(REL_VERSION)%s", prefix, a_name, suffix); } else { result = sprintf("%s.$(REL_VERSION)", lib_name_of(a_name)); } return result; } # see end_name function end_name_of(a_name) { if ( MODEL != "SHARED" ) { result = lib_name_of(a_name); } else if ( DoLinks == "reverse") { result = lib_name_of(a_name); } else { if ( ShlibVer == "rel" ) { result = rel_name_of(a_name); } else if ( ShlibVer == "abi" || ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" ) { result = abi_name_of(a_name); } else { result = lib_name_of(a_name); } } return result } function symlink(src,dst) { if ( src != dst ) { if ( SymLink !~ /.*-f.*/ ) { printf "rm -f %s; ", dst } printf "$(LN_S) %s %s; ", src, dst } } function rmlink(directory, dst) { if ( dst != "" ) { printf "\t-rm -f %s/%s\n", directory, dst } } function removelinks(directory) { nlinks = 0; links[nlinks++] = end_name; if ( DoLinks == "reverse" ) { if ( ShlibVer == "rel" ) { links[nlinks++] = abi_name; links[nlinks++] = rel_name; } else if ( ShlibVer == "abi" ) { links[nlinks++] = abi_name; } } else { if ( ShlibVer == "rel" ) { links[nlinks++] = abi_name; links[nlinks++] = lib_name; } else if ( ShlibVer == "abi" ) { links[nlinks++] = lib_name; } } for (j = 0; j < nlinks; ++j) { found = 0; for (k = 0; k < j; ++k ) { if ( links[j] == links[k] ) { found = 1; break; } } if ( !found ) { rmlink(directory, links[j]); } } } function make_shlib(objs, shlib_list) { printf "\t$(MK_SHARED_LIB) $(%s_OBJS) $(%s) $(LDFLAGS)\n", objs, shlib_list } function sharedlinks(directory) { if ( ShlibVer != "auto" && ShlibVer != "cygdll" && ShlibVer != "msysdll" && ShlibVer != "mingw" ) { printf "\tcd %s && (", directory if ( DoLinks == "reverse" ) { if ( ShlibVer == "rel" ) { symlink(lib_name, abi_name); symlink(abi_name, rel_name); } else if ( ShlibVer == "abi" ) { symlink(lib_name, abi_name); } } else { if ( ShlibVer == "rel" ) { symlink(rel_name, abi_name); symlink(abi_name, lib_name); } else if ( ShlibVer == "abi" ) { symlink(abi_name, lib_name); } } printf ")\n" } } # termlib may be named explicitly via "--with-termlib=XXX", which overrides # any suffix. Temporarily override "suffix" to account for this. function termlib_end_of() { termlib_save_suffix = suffix; suffix = TermlibSuffix; termlib_temp_result = end_name_of(TermlibRoot); suffix = termlib_save_suffix; return termlib_temp_result; } function shlib_build(directory) { dst_libs = sprintf("%s/%s", directory, end_name); printf "%s : \\\n", dst_libs printf "\t\t%s \\\n", directory if (subset == "ticlib" && driver == "yes" ) { base = name; sub(/^tic/, "ncurses", base); # workaround for "w" printf "\t\t%s/%s \\\n", directory, end_name_of(base); } if (subset ~ /^base/ || subset == "ticlib" ) { save_suffix = suffix sub(/^[^.]\./,".",suffix) if (directory != "../lib") { printf "\t\t%s/%s \\\n", "../lib", termlib_end_of(); } printf "\t\t%s/%s \\\n", directory, termlib_end_of(); suffix = save_suffix } printf "\t\t$(RESULTING_SYMS) $(%s_OBJS)\n", OBJS printf "\t@echo linking $@\n" if ( is_ticlib() ) { make_shlib(OBJS, "TICS_LIST") } else if ( is_termlib() ) { make_shlib(OBJS, "TINFO_LIST") } else { make_shlib(OBJS, "SHLIB_LIST") } sharedlinks(directory) } function shlib_install(directory) { src_lib1 = sprintf("../lib/%s", end_name); dst_lib1 = sprintf("%s/%s", directory, end_name); printf "%s : \\\n", dst_lib1 printf "\t\t%s \\\n", directory printf "\t\t%s\n", src_lib1 printf "\t@echo installing $@\n" printf "\t$(INSTALL_LIB) %s %s\n", src_lib1, dst_lib1; sharedlinks(directory) } function install_dll(directory,filename) { src_name = sprintf("../lib/%s", filename); dst_name = sprintf("$(DESTDIR)%s/%s", directory, filename); printf "\t@echo installing %s as %s\n", src_name, dst_name if ( directory == "$(bindir)" ) { program = "$(INSTALL) -m 755"; } else { program = "$(INSTALL_LIB)"; } printf "\t%s %s %s\n", program, src_name, dst_name } BEGIN { TOOL_PREFIX = ""; found = 0; using = 0; } /^@/ { using = 0 if (subset == "none") { using = 1 } else if (index(subset,$2) > 0) { if (using == 0) { if (found == 0) { if ( name ~ /^.*\+\+.*/ ) { if ( CXX_MODEL == "NORMAL" && MODEL == "SHARED" ) { print "" printf "# overriding model from %s to match CXX_MODEL\n", MODEL; MODEL = "NORMAL"; suffix = ".a"; DoLinks = "no"; } } print "" printf "# generated by mk-1st.awk (subset=%s)\n", subset printf "# name: %s\n", name printf "# traces: %s\n", traces printf "# MODEL: %s\n", MODEL printf "# CXX_MODEL: %s\n", CXX_MODEL printf "# model: %s\n", model printf "# prefix: %s\n", prefix printf "# suffix: %s\n", suffix printf "# subset: %s\n", subset printf "# driver: %s\n", driver printf "# ShlibVer: %s\n", ShlibVer printf "# ShlibVerInfix: %s\n", ShlibVerInfix printf "# SymLink: %s\n", SymLink printf "# TermlibRoot: %s\n", TermlibRoot printf "# TermlibSuffix: %s\n", TermlibSuffix printf "# ReLink: %s\n", ReLink printf "# DoLinks: %s\n", DoLinks printf "# rmSoLocs: %s\n", rmSoLocs printf "# ldconfig: %s\n", ldconfig printf "# overwrite: %s\n", overwrite printf "# depend: %s\n", depend printf "# host: %s\n", host print "" } using = 1 } if ( is_ticlib() ) { OBJS = MODEL "_P" } else if ( is_termlib() ) { OBJS = MODEL "_T" } else { OBJS = MODEL } } } /^[@#]/ { next } $1 ~ /trace/ { if (traces != "all" && traces != MODEL && $1 != "lib_trace") next } { if (using \ && ( $1 != "link_test" ) \ && ( $2 == "lib" \ || $2 == "progs" \ || $2 == "c++" \ || $2 == "tack" )) { if ( found == 0 ) { printf "%s_OBJS =", OBJS if ( $2 == "lib" ) { found = 1; } else if ( $2 == "c++" ) { TOOL_PREFIX = "CXX_"; found = 1; } else { found = 2; } if ( $2 == "c++" ) { CC_NAME="CXX" CC_FLAG="CXXFLAGS" } else { CC_NAME="CC" CC_FLAG="CFLAGS" } } printf " \\\n\t../%s/%s$o", model, $1; } } END { print "" if ( found != 0 ) { printf "\n$(%s_OBJS) : %s\n", OBJS, depend } if ( found == 1 ) { print "" lib_name = lib_name_of(name); if ( MODEL == "SHARED" ) { abi_name = abi_name_of(name); rel_name = rel_name_of(name); imp_name = imp_name_of(name); end_name = end_name_of(name); shlib_build("../lib") print "" print "install \\" print "install.libs \\" if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw") { dst_dirs = "$(DESTDIR)$(bindir) $(DESTDIR)$(libdir)"; printf "install.%s :: %s $(LIBRARIES)\n", name, dst_dirs install_dll("$(bindir)",end_name); install_dll("$(libdir)",imp_name); } else { lib_dir = "$(DESTDIR)$(libdir)"; printf "install.%s :: %s/%s\n", name, lib_dir, end_name print "" if ( ReLink == "yes" ) { shlib_build(lib_dir) } else { shlib_install(lib_dir) } } if ( overwrite == "yes" && name == "ncurses" ) { if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw") { ovr_name = sprintf("libcurses%s.a", suffix) printf "\t@echo linking %s to %s\n", imp_name, ovr_name printf "\tcd $(DESTDIR)$(libdir) && (" symlink(imp_name, ovr_name) printf ")\n" } else { ovr_name = sprintf("libcurses%s", suffix) printf "\t@echo linking %s to %s\n", end_name, ovr_name printf "\tcd $(DESTDIR)$(libdir) && (" symlink(end_name, ovr_name) printf ")\n" } } if ( ldconfig != "" && ldconfig != ":" ) { printf "\t- test -z \"$(DESTDIR)\" && %s\n", ldconfig } print "" print "uninstall \\" print "uninstall.libs \\" printf "uninstall.%s ::\n", name if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw") { printf "\t@echo uninstalling $(DESTDIR)$(bindir)/%s\n", end_name printf "\t-@rm -f $(DESTDIR)$(bindir)/%s\n", end_name printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", imp_name printf "\t-@rm -f $(DESTDIR)$(libdir)/%s\n", imp_name } else { printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", end_name removelinks("$(DESTDIR)$(libdir)") if ( overwrite == "yes" && name == "ncurses" ) { ovr_name = sprintf("libcurses%s", suffix) printf "\t-@rm -f $(DESTDIR)$(libdir)/%s\n", ovr_name } } if ( rmSoLocs == "yes" ) { print "" print "mostlyclean \\" print "clean ::" printf "\t-@rm -f so_locations\n" } } else if ( MODEL == "LIBTOOL" ) { end_name = lib_name; printf "../lib/%s : $(%s_OBJS)\n", lib_name, OBJS if ( is_ticlib() ) { which_list = "TICS_LIST"; } else if ( is_termlib() ) { which_list = "TINFO_LIST"; } else { which_list = "SHLIB_LIST"; } printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) $(%s) \\\n", CC_NAME, CC_FLAG; printf "\t\t-o %s $(%s_OBJS:$o=.lo) \\\n", lib_name, OBJS; printf "\t\t-rpath $(DESTDIR)$(libdir) \\\n"; printf "\t\t%s $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(%s) $(LDFLAGS)\n", libtool_version, which_list; print "" print "install \\" print "install.libs \\" printf "install.%s :: $(DESTDIR)$(libdir) ../lib/%s\n", name, lib_name printf "\t@echo installing ../lib/%s as $(DESTDIR)$(libdir)/%s\n", lib_name, lib_name printf "\tcd ../lib; $(LIBTOOL_INSTALL) $(INSTALL) %s $(DESTDIR)$(libdir)\n", lib_name print "" print "uninstall \\" print "uninstall.libs \\" printf "uninstall.%s ::\n", name printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", lib_name printf "\t-@$(LIBTOOL_UNINSTALL) rm -f $(DESTDIR)$(libdir)/%s\n", lib_name } else { end_name = lib_name; printf "../lib/%s : $(%s_OBJS)\n", lib_name, OBJS printf "\t$(%sAR) $(%sARFLAGS) $@ $?\n", TOOL_PREFIX, TOOL_PREFIX; printf "\t$(RANLIB) $@\n" if ( host == "vxworks" ) { printf "\t$(LD) $(LD_OPTS) $? -o $(@:.a=$o)\n" } print "" print "install \\" print "install.libs \\" printf "install.%s :: $(DESTDIR)$(libdir) ../lib/%s\n", name, lib_name printf "\t@echo installing ../lib/%s as $(DESTDIR)$(libdir)/%s\n", lib_name, lib_name printf "\t$(INSTALL_DATA) ../lib/%s $(DESTDIR)$(libdir)/%s\n", lib_name, lib_name if ( overwrite == "yes" && lib_name == "libncurses.a" ) { printf "\t@echo linking libcurses.a to libncurses.a\n" printf "\t-@rm -f $(DESTDIR)$(libdir)/libcurses.a\n" printf "\t(cd $(DESTDIR)$(libdir) && " symlink("libncurses.a", "libcurses.a") printf ")\n" } printf "\t$(RANLIB) $(DESTDIR)$(libdir)/%s\n", lib_name if ( host == "vxworks" ) { printf "\t@echo installing ../lib/lib%s$o as $(DESTDIR)$(libdir)/lib%s$o\n", name, name printf "\t$(INSTALL_DATA) ../lib/lib%s$o $(DESTDIR)$(libdir)/lib%s$o\n", name, name } print "" print "uninstall \\" print "uninstall.libs \\" printf "uninstall.%s ::\n", name printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", lib_name printf "\t-@rm -f $(DESTDIR)$(libdir)/%s\n", lib_name if ( overwrite == "yes" && lib_name == "libncurses.a" ) { printf "\t@echo linking libcurses.a to libncurses.a\n" printf "\t-@rm -f $(DESTDIR)$(libdir)/libcurses.a\n" } if ( host == "vxworks" ) { printf "\t@echo uninstalling $(DESTDIR)$(libdir)/lib%s$o\n", name printf "\t-@rm -f $(DESTDIR)$(libdir)/lib%s$o\n", name } } print "" print "clean ::" removelinks("../lib"); print "" print "mostlyclean::" printf "\t-rm -f $(%s_OBJS)\n", OBJS if ( MODEL == "LIBTOOL" ) { printf "\t-$(LIBTOOL_CLEAN) rm -f $(%s_OBJS:$o=.lo)\n", OBJS } } else if ( found == 2 ) { print "" print "mostlyclean::" printf "\t-rm -f $(%s_OBJS)\n", OBJS if ( MODEL == "LIBTOOL" ) { printf "\t-$(LIBTOOL_CLEAN) rm -f $(%s_OBJS:$o=.lo)\n", OBJS } print "" print "clean ::" printf "\t-rm -f $(%s_OBJS)\n", OBJS if ( MODEL == "LIBTOOL" ) { printf "\t-$(LIBTOOL_CLEAN) rm -f $(%s_OBJS:$o=.lo)\n", OBJS } } } # vile:ts=4 sw=4 ncurses-6.0-20160213/progs/0000755000175100001440000000000012642026525013612 5ustar tomusersncurses-6.0-20160213/progs/tabs.c0000644000175100001440000003126612546046302014715 0ustar tomusers/**************************************************************************** * Copyright (c) 2008-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 2008 * ****************************************************************************/ /* * tabs.c -- set terminal hard-tabstops */ #define USE_LIBTINFO #include MODULE_ID("$Id: tabs.c,v 1.37 2015/07/04 21:14:42 tom Exp $") static void usage(void) GCC_NORETURN; static char *prg_name; static int max_cols; static void failed(const char *s) { perror(s); ExitProgram(EXIT_FAILURE); } static int putch(int c) { return putchar(c); } static void do_tabs(int *tab_list) { int last = 1; int stop; putchar('\r'); while ((stop = *tab_list++) > 0) { if (last < stop) { while (last++ < stop) { if (last > max_cols) break; putchar(' '); } } if (stop <= max_cols) { tputs(tparm(set_tab, stop), 1, putch); last = stop; } else { break; } } putchar('\r'); } static int * decode_tabs(const char *tab_list) { int *result = typeCalloc(int, strlen(tab_list) + (unsigned) max_cols); int n = 0; int value = 0; int prior = 0; int ch; if (result == 0) failed("decode_tabs"); while ((ch = *tab_list++) != '\0') { if (isdigit(UChar(ch))) { value *= 10; value += (ch - '0'); } else if (ch == ',') { result[n] = value + prior; if (n > 0 && result[n] <= result[n - 1]) { fprintf(stderr, "%s: tab-stops are not in increasing order: %d %d\n", prg_name, value, result[n - 1]); free(result); result = 0; break; } ++n; value = 0; prior = 0; } else if (ch == '+') { if (n) prior = result[n - 1]; } } if (result != 0) { /* * If there is only one value, then it is an option such as "-8". */ if ((n == 0) && (value > 0)) { int step = value; value = 1; while (n < max_cols - 1) { result[n++] = value; value += step; } } /* * Add the last value, if any. */ result[n++] = value + prior; result[n] = 0; } return result; } static void print_ruler(int *tab_list) { int last = 0; int stop; int n; /* first print a readable ruler */ for (n = 0; n < max_cols; n += 10) { int ch = 1 + (n / 10); char buffer[20]; _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "----+----%c", ((ch < 10) ? (ch + '0') : (ch + 'A' - 10))); printf("%.*s", ((max_cols - n) > 10) ? 10 : (max_cols - n), buffer); } putchar('\n'); /* now, print '*' for each stop */ for (n = 0, last = 0; (tab_list[n] > 0) && (last < max_cols); ++n) { stop = tab_list[n]; while (++last < stop) { if (last <= max_cols) { putchar('-'); } else { break; } } if (last <= max_cols) { putchar('*'); last = stop; } else { break; } } while (++last <= max_cols) putchar('-'); putchar('\n'); } /* * Write an '*' on each tabstop, to demonstrate whether it lines up with the * ruler. */ static void write_tabs(int *tab_list) { int stop; while ((stop = *tab_list++) > 0 && stop <= max_cols) { fputs((stop == 1) ? "*" : "\t*", stdout); }; /* also show a tab _past_ the stops */ if (stop < max_cols) fputs("\t+", stdout); putchar('\n'); } /* * Trim leading/trailing blanks, as well as blanks after a comma. * Convert embedded blanks to commas. */ static char * trimmed_tab_list(const char *source) { char *result = strdup(source); int ch, j, k, last; if (result != 0) { for (j = k = last = 0; result[j] != 0; ++j) { ch = UChar(result[j]); if (isspace(ch)) { if (last == '\0') { continue; } else if (isdigit(last) || last == ',') { ch = ','; } } else if (ch == ',') { ; } else { if (last == ',') result[k++] = (char) last; result[k++] = (char) ch; } last = ch; } result[k] = '\0'; } return result; } static bool comma_is_needed(const char *source) { bool result = FALSE; if (source != 0) { size_t len = strlen(source); if (len != 0) result = (source[len - 1] != ','); } else { result = FALSE; } return result; } /* * Add a command-line parameter to the tab-list. It can be blank- or comma- * separated (or a mixture). For simplicity, empty tabs are ignored, e.g., * tabs 1,,6,11 * tabs 1,6,11 * are treated the same. */ static const char * add_to_tab_list(char **append, const char *value) { char *result = *append; char *copied = trimmed_tab_list(value); if (copied != 0 && *copied != '\0') { const char *comma = ","; size_t need = 1 + strlen(copied); if (*copied == ',') comma = ""; else if (!comma_is_needed(*append)) comma = ""; need += strlen(comma); if (*append != 0) need += strlen(*append); result = malloc(need); if (result == 0) failed("add_to_tab_list"); *result = '\0'; if (*append != 0) { _nc_STRCPY(result, *append, need); free(*append); } _nc_STRCAT(result, comma, need); _nc_STRCAT(result, copied, need); *append = result; } free(copied); return result; } /* * Check for illegal characters in the tab-list. */ static bool legal_tab_list(const char *tab_list) { bool result = TRUE; if (tab_list != 0 && *tab_list != '\0') { if (comma_is_needed(tab_list)) { int n, ch; for (n = 0; tab_list[n] != '\0'; ++n) { ch = UChar(tab_list[n]); if (!(isdigit(ch) || ch == ',' || ch == '+')) { fprintf(stderr, "%s: unexpected character found '%c'\n", prg_name, ch); result = FALSE; break; } } } else { fprintf(stderr, "%s: trailing comma found '%s'\n", prg_name, tab_list); result = FALSE; } } else { fprintf(stderr, "%s: no tab-list given\n", prg_name); result = FALSE; } return result; } static char * skip_list(char *value) { while (*value != '\0' && (isdigit(UChar(*value)) || isspace(UChar(*value)) || strchr("+,", UChar(*value)) != 0)) { ++value; } return value; } static void usage(void) { #define DATA(s) s "\n" static const char msg[] = { DATA("Usage: tabs [options] [tabstop-list]") DATA("") DATA("Options:") DATA(" -0 reset tabs") DATA(" -8 set tabs to standard interval") DATA(" -a Assembler, IBM S/370, first format") DATA(" -a2 Assembler, IBM S/370, second format") DATA(" -c COBOL, normal format") DATA(" -c2 COBOL compact format") DATA(" -c3 COBOL compact format extended") DATA(" -d debug (show ruler with expected/actual tab positions)") DATA(" -f FORTRAN") DATA(" -n no-op (do not modify terminal settings)") DATA(" -p PL/I") DATA(" -s SNOBOL") DATA(" -u UNIVAC 1100 Assembler") DATA(" -T name use terminal type 'name'") DATA(" -V print version") DATA("") DATA("A tabstop-list is an ordered list of column numbers, e.g., 1,11,21") DATA("or 1,+10,+10 which is the same.") }; #undef DATA fflush(stdout); fputs(msg, stderr); ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { int rc = EXIT_FAILURE; bool debug = FALSE; bool no_op = FALSE; int n, ch; NCURSES_CONST char *term_name = 0; char *append = 0; const char *tab_list = 0; prg_name = _nc_rootname(argv[0]); if ((term_name = getenv("TERM")) == 0) term_name = "ansi+tabs"; /* cannot use getopt, since some options are two-character */ for (n = 1; n < argc; ++n) { char *option = argv[n]; switch (option[0]) { case '-': while ((ch = *++option) != '\0') { switch (ch) { case 'a': switch (*++option) { default: case '\0': tab_list = "1,10,16,36,72"; option--; /* Assembler, IBM S/370, first format */ break; case '2': tab_list = "1,10,16,40,72"; /* Assembler, IBM S/370, second format */ break; } break; case 'c': switch (*++option) { default: case '\0': tab_list = "1,8,12,16,20,55"; option--; /* COBOL, normal format */ break; case '2': tab_list = "1,6,10,14,49"; /* COBOL compact format */ break; case '3': tab_list = "1,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,67"; /* COBOL compact format extended */ break; } break; case 'd': /* ncurses extension */ debug = TRUE; break; case 'f': tab_list = "1,7,11,15,19,23"; /* FORTRAN */ break; case 'n': /* ncurses extension */ no_op = TRUE; break; case 'p': tab_list = "1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61"; /* PL/I */ break; case 's': tab_list = "1,10,55"; /* SNOBOL */ break; case 'u': tab_list = "1,12,20,44"; /* UNIVAC 1100 Assembler */ break; case 'T': ++n; if (*++option != '\0') { term_name = option; } else { term_name = argv[n++]; option--; } option += ((int) strlen(option)) - 1; continue; case 'V': puts(curses_version()); ExitProgram(EXIT_SUCCESS); default: if (isdigit(UChar(*option))) { char *copy = strdup(option); *skip_list(copy) = '\0'; tab_list = copy; option = skip_list(option) - 1; } else { usage(); } break; } } break; case '+': while ((ch = *++option) != '\0') { switch (ch) { case 'm': /* * The "+mXXX" option is unimplemented because only the long-obsolete * att510d implements smgl, which is needed to support * this option. */ break; default: /* special case of relative stops separated by spaces? */ if (option == argv[n] + 1) { tab_list = add_to_tab_list(&append, argv[n]); } break; } } break; default: if (append != 0) { if (tab_list != (const char *) append) { /* one of the predefined options was used */ free(append); append = 0; } } tab_list = add_to_tab_list(&append, option); break; } } setupterm(term_name, STDOUT_FILENO, (int *) 0); max_cols = (columns > 0) ? columns : 80; if (!VALID_STRING(clear_all_tabs)) { fprintf(stderr, "%s: terminal type '%s' cannot reset tabs\n", prg_name, term_name); } else if (!VALID_STRING(set_tab)) { fprintf(stderr, "%s: terminal type '%s' cannot set tabs\n", prg_name, term_name); } else if (legal_tab_list(tab_list)) { int *list = decode_tabs(tab_list); if (!no_op) tputs(clear_all_tabs, 1, putch); if (list != 0) { if (!no_op) do_tabs(list); if (debug) { fflush(stderr); printf("tabs %s\n", tab_list); print_ruler(list); write_tabs(list); } free(list); } else if (debug) { fflush(stderr); printf("tabs %s\n", tab_list); } rc = EXIT_SUCCESS; } if (append != 0) free(append); ExitProgram(rc); } ncurses-6.0-20160213/progs/clear.sh0000755000175100001440000000415710422520720015234 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 1998,2006 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## exec tput clear ncurses-6.0-20160213/progs/dump_entry.h0000644000175100001440000001015112572607446016160 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * $Id: dump_entry.h,v 1.37 2015/09/05 15:49:58 tom Exp $ * * Dump control definitions and variables */ #ifndef DUMP_ENTRY_H #define DUMP_ENTRY_H 1 /* capability output formats */ #define F_TERMINFO 0 /* use terminfo names */ #define F_VARIABLE 1 /* use C variable names */ #define F_TERMCAP 2 /* termcap names with capability conversion */ #define F_TCONVERR 3 /* as T_TERMCAP, no skip of untranslatables */ #define F_LITERAL 4 /* like F_TERMINFO, but no smart defaults */ /* capability sort modes */ #define S_DEFAULT 0 /* sort by terminfo name (implicit) */ #define S_NOSORT 1 /* don't sort */ #define S_TERMINFO 2 /* sort by terminfo names (explicit) */ #define S_VARIABLE 3 /* sort by C variable names */ #define S_TERMCAP 4 /* sort by termcap names */ /* capability types for the comparison hook */ #define CMP_BOOLEAN 0 /* comparison on booleans */ #define CMP_NUMBER 1 /* comparison on numerics */ #define CMP_STRING 2 /* comparison on strings */ #define CMP_USE 3 /* comparison on use capabilities */ typedef unsigned PredType; typedef unsigned PredIdx; typedef int (*PredFunc) (PredType, PredIdx); typedef void (*PredHook) (PredType, PredIdx, const char *); extern NCURSES_CONST char *nametrans(const char *); extern bool has_params(const char *src); extern int fmt_entry(TERMTYPE *, PredFunc, int, int, int, int); extern int show_entry(void); extern void compare_entry(PredHook, TERMTYPE *, bool); extern void dump_entry(TERMTYPE *, int, int, int, PredFunc); extern void dump_init(const char *, int, int, int, int, unsigned, bool, bool, int); extern void dump_uses(const char *, bool); extern void repair_acsc(TERMTYPE *tp); #define FAIL -1 #endif /* DUMP_ENTRY_H */ ncurses-6.0-20160213/progs/Makefile.in0000644000175100001440000002665412560353066015676 0ustar tomusers# $Id: Makefile.in,v 1.95 2015/08/05 09:24:06 tom Exp $ ############################################################################## # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1996-on # # Makefile for ncurses source code. # # This makes the ncurses utility programs. # # The variable 'srcdir' refers to the source-distribution, and can be set with # the configure script by "--srcdir=DIR". # # The rules are organized to produce the libraries for the configured models, # and the programs with the configured default model. # turn off _all_ suffix rules; we'll generate our own .SUFFIXES: SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile CF_MFLAGS = @cf_cv_makeflags@ @SET_MAKE@ x = @EXEEXT@ o = .@OBJEXT@ MODEL = ../@DFT_OBJ_SUBDIR@ DESTDIR = @DESTDIR@ top_srcdir = @top_srcdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ datarootdir = @datarootdir@ datadir = @datadir@ includesubdir = @includesubdir@ INCLUDEDIR = $(DESTDIR)$(includedir)$(includesubdir) PACKAGE = @PACKAGE@ LIBTOOL = @LIBTOOL@ LIBTOOL_OPTS = @LIBTOOL_OPTS@ LIBTOOL_CLEAN = @LIB_CLEAN@ LIBTOOL_COMPILE = @LIB_COMPILE@ LIBTOOL_LINK = @LIB_LINK@ LIBTOOL_INSTALL = @LIB_INSTALL@ LIBTOOL_UNINSTALL = @LIB_UNINSTALL@ INSTALL = @INSTALL@ INSTALL_PROG = @INSTALL_PROGRAM@ transform = @program_transform_name@ AWK = @AWK@ LN_S = @LN_S@ CTAGS = @CTAGS@ ETAGS = @ETAGS@ CC = @CC@ CPP = @CPP@ CFLAGS = @CFLAGS@ INCDIR = $(top_srcdir)/include CPPFLAGS = -DHAVE_CONFIG_H @CPPFLAGS@ CCFLAGS = $(CPPFLAGS) $(CFLAGS) CFLAGS_LIBTOOL = $(CCFLAGS) CFLAGS_NORMAL = $(CCFLAGS) CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) REL_VERSION = @cf_cv_rel_version@ ABI_VERSION = @cf_cv_abi_version@ LOCAL_LIBDIR = @top_builddir@/lib LD = @LD@ LINK = @LINK_PROGS@ $(LIBTOOL_LINK) LDFLAGS = @EXTRA_LDFLAGS@ @LDFLAGS@ RPATH_LIST = @RPATH_LIST@ LDFLAGS_LIBTOOL = $(LDFLAGS) $(CFLAGS_LIBTOOL) LDFLAGS_NORMAL = $(LDFLAGS) $(CFLAGS_NORMAL) LDFLAGS_DEBUG = $(LDFLAGS) $(CFLAGS_DEBUG) LDFLAGS_PROFILE = $(LDFLAGS) $(CFLAGS_PROFILE) LDFLAGS_SHARED = $(LDFLAGS) $(CFLAGS_SHARED) @LD_SHARED_OPTS@ LDFLAGS_DEFAULT = $(LDFLAGS_@DFT_UPR_MODEL@) LIBS_TIC = @TINFO_LDFLAGS@ @LDFLAGS_STATIC@ @TICS_LIBS@ @TINFO_LIBS@ @LDFLAGS_SHARED@ @LD_MODEL@ @LIBS@ LDFLAGS_TIC = @TICS_LDFLAGS@ $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_TIC) LIBS_TINFO = @LDFLAGS_STATIC@ @TINFO_LIBS@ @LDFLAGS_SHARED@ @LD_MODEL@ @LIBS@ LDFLAGS_TINFO = @TINFO_LDFLAGS@ $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_TINFO) LINT = @LINT@ LINT_OPTS = @LINT_OPTS@ LINT_LIBS = -lncurses @LIBS@ AUTO_SRC = \ termsort.c \ transform.h # tic relies on direct access to the terminfo database GET_PROGS = infocmp$x clear$x tabs$x tput$x tset$x toe$x PUT_PROGS = @MAKE_TERMINFO@ tic$x PROGS = $(PUT_PROGS) $(GET_PROGS) # Default library, for linking applications DEPS_CURSES = ../lib/@LIB_PREFIX@ncurses@DFT_DEP_SUFFIX@ HEADER_DEPS = \ ../include/curses.h \ $(INCDIR)/term_entry.h \ $(INCDIR)/tic.h \ $(INCDIR)/nc_alloc.h ################################################################################ all: $(AUTO_SRC) $(PROGS) sources: $(AUTO_SRC) install: $(AUTO_SRC) install.progs uninstall: uninstall.progs # this line simplifies the configure-script libs \ install.libs \ uninstall.libs: TRANSFORM = sed 's/$x$$//'|sed '$(transform)'|sed 's/$$/$x/' # transformed names for installing files actual_captoinfo = `echo captoinfo$x| $(TRANSFORM)` actual_clear = `echo clear$x| $(TRANSFORM)` actual_infocmp = `echo infocmp$x| $(TRANSFORM)` actual_infotocap = `echo infotocap$x| $(TRANSFORM)` actual_init = `echo init$x| $(TRANSFORM)` actual_reset = `echo reset$x| $(TRANSFORM)` actual_tabs = `echo tabs$x| $(TRANSFORM)` actual_tic = `echo tic$x| $(TRANSFORM)` actual_toe = `echo toe$x| $(TRANSFORM)` actual_tput = `echo tput$x| $(TRANSFORM)` actual_tset = `echo tset$x| $(TRANSFORM)` # transformed names for comparing at runtime define_captoinfo = `echo captoinfo| $(TRANSFORM)` define_infotocap = `echo infotocap| $(TRANSFORM)` define_init = `echo init| $(TRANSFORM)` define_reset = `echo reset| $(TRANSFORM)` transform.h : echo "#ifndef __TRANSFORM_H" >$@ echo "#define __TRANSFORM_H 1" >>$@ echo "#include " >>$@ echo "extern bool same_program(const char *, const char *);" >>$@ -$(SHELL) -c 'if test -n "$x" ; then echo "#define SUFFIX_IGNORED \"$x\"">>$@; fi' echo "#define PROG_CAPTOINFO \"$(define_captoinfo)\"" >>$@ echo "#define PROG_INFOTOCAP \"$(define_infotocap)\"" >>$@ echo "#define PROG_RESET \"$(define_reset)\"" >>$@ echo "#define PROG_INIT \"$(define_init)\"" >>$@ echo "#endif /* __TRANSFORM_H */" >>$@ install.progs: $(AUTO_SRC) $(PROGS) $(DESTDIR)$(bindir) @MAKE_TERMINFO@ $(LIBTOOL_INSTALL) $(INSTALL_PROG) tic$x $(DESTDIR)$(bindir)/$(actual_tic) @MAKE_TERMINFO@ $(LIBTOOL_INSTALL) $(INSTALL_PROG) toe$x $(DESTDIR)$(bindir)/$(actual_toe) @MAKE_TERMINFO@ @echo "linking $(actual_infotocap) to $(actual_tic)" @MAKE_TERMINFO@ -@rm -f $(DESTDIR)$(bindir)/$(actual_infotocap) @MAKE_TERMINFO@ (cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tic) $(actual_infotocap)) @MAKE_TERMINFO@ @echo "linking $(actual_captoinfo) to $(actual_tic)" @MAKE_TERMINFO@ -@rm -f $(DESTDIR)$(bindir)/$(actual_captoinfo) @MAKE_TERMINFO@ (cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tic) $(actual_captoinfo)) $(LIBTOOL_INSTALL) $(INSTALL_PROG) infocmp$x $(DESTDIR)$(bindir)/$(actual_infocmp) $(LIBTOOL_INSTALL) $(INSTALL_PROG) clear$x $(DESTDIR)$(bindir)/$(actual_clear) $(LIBTOOL_INSTALL) $(INSTALL_PROG) tabs$x $(DESTDIR)$(bindir)/$(actual_tabs) $(LIBTOOL_INSTALL) $(INSTALL_PROG) tput$x $(DESTDIR)$(bindir)/$(actual_tput) $(LIBTOOL_INSTALL) $(INSTALL_PROG) tset$x $(DESTDIR)$(bindir)/$(actual_tset) @echo "linking $(actual_reset) to $(actual_tset)" -@rm -f $(DESTDIR)$(bindir)/$(actual_reset) (cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tset) $(actual_reset)) uninstall.progs: @MAKE_TERMINFO@ -@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_tic) @MAKE_TERMINFO@ -@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_toe) @MAKE_TERMINFO@ -@rm -f $(DESTDIR)$(bindir)/$(actual_captoinfo) @MAKE_TERMINFO@ -@rm -f $(DESTDIR)$(bindir)/$(actual_infotocap) -@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_infocmp) -@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_clear) -@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_tabs) -@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_tput) -@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_tset) -@rm -f $(DESTDIR)$(bindir)/$(actual_reset) $(DESTDIR)$(bindir) : mkdir -p $@ # # Utilities normally built by make all start here # DEPS_TIC = \ $(MODEL)/tic$o \ $(MODEL)/dump_entry$o \ $(MODEL)/tparm_type$o \ $(MODEL)/transform$o tic$x: $(DEPS_TIC) $(DEPS_CURSES) transform.h @ECHO_LD@ $(LINK) $(DEPS_TIC) $(LDFLAGS_TIC) -o $@ DEPS_TOE = \ $(MODEL)/toe$o toe$x: $(DEPS_TOE) $(DEPS_CURSES) @ECHO_LD@ $(LINK) $(DEPS_TOE) $(LDFLAGS_TIC) -o $@ DEPS_CLEAR = \ $(MODEL)/clear$o clear$x: $(DEPS_CLEAR) $(DEPS_CURSES) @ECHO_LD@ $(LINK) $(DEPS_CLEAR) $(LDFLAGS_TINFO) -o $@ DEPS_TABS = \ $(MODEL)/tabs$o tabs$x: $(DEPS_TABS) $(DEPS_TABS) @ECHO_LD@ $(LINK) $(DEPS_TABS) $(LDFLAGS_TINFO) -o $@ DEPS_TPUT = \ $(MODEL)/tput$o \ $(MODEL)/tparm_type$o \ $(MODEL)/transform$o tput$x: $(DEPS_TPUT) $(DEPS_CURSES) transform.h @ECHO_LD@ $(LINK) $(DEPS_TPUT) $(LDFLAGS_TINFO) -o $@ DEPS_INFOCMP = \ $(MODEL)/infocmp$o \ $(MODEL)/dump_entry$o infocmp$x: $(DEPS_INFOCMP) $(DEPS_CURSES) @ECHO_LD@ $(LINK) $(DEPS_INFOCMP) $(LDFLAGS_TIC) -o $@ DEPS_TSET = \ $(MODEL)/tset$o \ $(MODEL)/transform$o tset$x: $(DEPS_TSET) $(DEPS_CURSES) transform.h @ECHO_LD@ $(LINK) $(DEPS_TSET) $(LDFLAGS_TINFO) -o $@ termsort.c: $(srcdir)/MKtermsort.sh $(SHELL) $(srcdir)/MKtermsort.sh $(AWK) $(srcdir)/../include/@TERMINFO_CAPS@ >$@ # # Utility productions start here # tags: $(CTAGS) *.[ch] @MAKE_UPPER_TAGS@TAGS: @MAKE_UPPER_TAGS@ $(ETAGS) *.[ch] mostlyclean :: -rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace clean :: mostlyclean -$(SHELL) -c "if test -n '$x' ; then $(MAKE) clean x=''; fi" -rm -f $(AUTO_SRC) -rm -f $(PROGS) -rm -rf .libs *.dSYM distclean :: clean -rm -f Makefile realclean :: distclean # These rules are used to allow "make -n" to work on a clean directory-tree ../include/hashsize.h \ ../include/parametrized.h \ ../include/term.h : cd ../include; $(MAKE) $(CF_MFLAGS) $(DEPS_CURSES) : cd ../ncurses; $(MAKE) $(CF_MFLAGS) lint: @MAKE_TERMINFO@ $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/tic.c $(srcdir)/dump_entry.c $(LINT_LIBS) @MAKE_TERMINFO@ $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/toe.c $(srcdir)/dump_entry.c $(LINT_LIBS) $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/clear.c $(LINT_LIBS) $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/infocmp.c $(srcdir)/dump_entry.c $(LINT_LIBS) $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/tabs.c $(LINT_LIBS) $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/tput.c $(LINT_LIBS) $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/tset.c $(srcdir)/dump_entry.c $(LINT_LIBS) ############################################################################### # The remainder of this file is automatically generated during configuration ############################################################################### ncurses-6.0-20160213/progs/progs.priv.h0000644000175100001440000001325712530211423016071 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey 1997-on * ****************************************************************************/ /* * $Id: progs.priv.h,v 1.41 2015/05/23 23:53:55 tom Exp $ * * progs.priv.h * * Header file for curses utility programs */ #ifndef PROGS_PRIV_H #define PROGS_PRIV_H 1 #include #if USE_RCS_IDS #define MODULE_ID(id) static const char Ident[] = id; #else #define MODULE_ID(id) /*nothing */ #endif #include #include #include #include #if HAVE_UNISTD_H #include #endif #if HAVE_SYS_BSDTYPES_H #include /* needed for ISC */ #endif #if HAVE_LIMITS_H # include #elif HAVE_SYS_PARAM_H # include #endif #if HAVE_DIRENT_H # include # define NAMLEN(dirent) strlen((dirent)->d_name) # if defined(_FILE_OFFSET_BITS) && defined(HAVE_STRUCT_DIRENT64) # if !defined(_LP64) && (_FILE_OFFSET_BITS == 64) # define DIRENT struct dirent64 # else # define DIRENT struct dirent # endif # else # define DIRENT struct dirent # endif #else # define DIRENT struct direct # define NAMLEN(dirent) (dirent)->d_namlen # if HAVE_SYS_NDIR_H # include # endif # if HAVE_SYS_DIR_H # include # endif # if HAVE_NDIR_H # include # endif #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #include #include #if DECL_ERRNO extern int errno; #endif #if HAVE_GETOPT_H #include #elif !defined(HAVE_GETOPT_HEADER) /* 'getopt()' may be prototyped in , but declaring its * variables doesn't hurt. */ extern char *optarg; extern int optind; #endif /* HAVE_GETOPT_H */ #include #include #include #include #include #include #include #if HAVE_NC_FREEALL #undef ExitProgram #ifdef USE_LIBTINFO #define ExitProgram(code) _nc_free_tinfo(code) #else #define ExitProgram(code) _nc_free_tic(code) #endif #endif #if defined(__GNUC__) && defined(_FORTIFY_SOURCE) #define IGNORE_RC(func) errno = (int) func #else #define IGNORE_RC(func) (void) func #endif /* gcc workarounds */ /* usually in */ #ifndef STDOUT_FILENO #define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO #define STDERR_FILENO 2 #endif #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #ifndef EXIT_FAILURE #define EXIT_FAILURE 1 #endif #ifndef R_OK #define R_OK 4 /* Test for readable. */ #endif #ifndef W_OK #define W_OK 2 /* Test for writable. */ #endif #ifndef X_OK #define X_OK 1 /* Test for executable. */ #endif #ifndef F_OK #define F_OK 0 /* Test for existence. */ #endif /* usually in */ #ifndef STDOUT_FILENO #define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO #define STDERR_FILENO 2 #endif /* may be in limits.h, included from various places */ #ifndef PATH_MAX # if defined(_POSIX_PATH_MAX) # define PATH_MAX _POSIX_PATH_MAX # elif defined(MAXPATHLEN) # define PATH_MAX MAXPATHLEN # else # define PATH_MAX 255 /* the Posix minimum pathsize */ # endif #endif /* We use isascii only to guard against use of 7-bit ctype tables in the * isprint test in infocmp. */ #if !HAVE_ISASCII # undef isascii # if ('z'-'a' == 25) && ('z' < 127) && ('Z'-'A' == 25) && ('Z' < 127) && ('9' < 127) # define isascii(c) (UChar(c) <= 127) # else # define isascii(c) 1 /* not really ascii anyway */ # endif #endif #define UChar(c) ((unsigned char)(c)) #define SIZEOF(v) (sizeof(v)/sizeof(v[0])) #endif /* PROGS_PRIV_H */ ncurses-6.0-20160213/progs/tset.c0000644000175100001440000010107712617524513014745 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * Notes: * The initial adaptation from 4.4BSD Lite sources in September 1995 used 686 * lines from that version, and made changes/additions for 150 lines. There * was no reformatting, so with/without ignoring whitespace, the amount of * change is the same. * * Comparing with current (2009) source, excluding this comment: * a) 209 lines match identically to the 4.4BSD Lite sources, with 771 lines * changed/added. * a) Ignoring whitespace, the current version still uses 516 lines from the * 4.4BSD Lite sources, with 402 lines changed/added. * * Raymond's original comment on this follows... */ /* * tset.c - terminal initialization utility * * This code was mostly swiped from 4.4BSD tset, with some obsolescent * cruft removed and substantial portions rewritten. A Regents of the * University of California copyright applies to some portions of the * code, and is reproduced below: */ /*- * Copyright (c) 1980, 1991, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #define USE_LIBTINFO #define __INTERNAL_CAPS_VISIBLE /* we need to see has_hardware_tabs */ #include #include #include #include #include #if HAVE_GETTTYNAM && HAVE_TTYENT_H #include #endif #ifdef NeXT char *ttyname(int fd); #endif #if HAVE_SIZECHANGE # if !defined(sun) || !TERMIOS # if HAVE_SYS_IOCTL_H # include # endif # endif #endif #if NEED_PTEM_H /* they neglected to define struct winsize in termios.h -- it's only in termio.h */ #include #include #endif #include #include MODULE_ID("$Id: tset.c,v 1.97 2015/11/08 01:45:47 tom Exp $") /* * SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS, * Solaris, IRIX) define TIOCGWINSZ and struct winsize. */ #ifdef TIOCGSIZE # define IOCTL_GET_WINSIZE TIOCGSIZE # define IOCTL_SET_WINSIZE TIOCSSIZE # define STRUCT_WINSIZE struct ttysize # define WINSIZE_ROWS(n) n.ts_lines # define WINSIZE_COLS(n) n.ts_cols #else # ifdef TIOCGWINSZ # define IOCTL_GET_WINSIZE TIOCGWINSZ # define IOCTL_SET_WINSIZE TIOCSWINSZ # define STRUCT_WINSIZE struct winsize # define WINSIZE_ROWS(n) n.ws_row # define WINSIZE_COLS(n) n.ws_col # endif #endif #ifndef environ extern char **environ; #endif #undef CTRL #define CTRL(x) ((x) & 0x1f) static void failed(const char *) GCC_NORETURN; static void exit_error(void) GCC_NORETURN; static void err(const char *,...) GCC_NORETURN; const char *_nc_progname = "tset"; static TTY mode, oldmode, original; static bool opt_c; /* set control-chars */ static bool opt_w; /* set window-size */ static bool can_restore = FALSE; static bool isreset = FALSE; /* invoked as reset */ static int terasechar = -1; /* new erase character */ static int intrchar = -1; /* new interrupt character */ static int tkillchar = -1; /* new kill character */ #if HAVE_SIZECHANGE static int tlines, tcolumns; /* window size */ #endif #define LOWERCASE(c) ((isalpha(UChar(c)) && isupper(UChar(c))) ? tolower(UChar(c)) : (c)) static int CaselessCmp(const char *a, const char *b) { /* strcasecmp isn't portable */ while (*a && *b) { int cmp = LOWERCASE(*a) - LOWERCASE(*b); if (cmp != 0) break; a++, b++; } return LOWERCASE(*a) - LOWERCASE(*b); } static void exit_error(void) { if (can_restore) SET_TTY(STDERR_FILENO, &original); (void) fprintf(stderr, "\n"); fflush(stderr); ExitProgram(EXIT_FAILURE); /* NOTREACHED */ } static void err(const char *fmt,...) { va_list ap; va_start(ap, fmt); (void) fprintf(stderr, "%s: ", _nc_progname); (void) vfprintf(stderr, fmt, ap); va_end(ap); exit_error(); /* NOTREACHED */ } static void failed(const char *msg) { char temp[BUFSIZ]; size_t len = strlen(_nc_progname) + 2; if ((int) len < (int) sizeof(temp) - 12) { _nc_STRCPY(temp, _nc_progname, sizeof(temp)); _nc_STRCAT(temp, ": ", sizeof(temp)); } else { _nc_STRCPY(temp, "tset: ", sizeof(temp)); } perror(strncat(temp, msg, sizeof(temp) - strlen(temp) - 2)); exit_error(); /* NOTREACHED */ } static void cat(char *file) { FILE *fp; size_t nr; char buf[BUFSIZ]; if ((fp = fopen(file, "r")) == 0) failed(file); while ((nr = fread(buf, sizeof(char), sizeof(buf), fp)) != 0) if (fwrite(buf, sizeof(char), nr, stderr) != nr) failed("write to stderr"); fclose(fp); } static int outc(int c) { return putc(c, stderr); } /* Prompt the user for a terminal type. */ static const char * askuser(const char *dflt) { static char answer[256]; char *p; /* We can get recalled; if so, don't continue uselessly. */ clearerr(stdin); if (feof(stdin) || ferror(stdin)) { (void) fprintf(stderr, "\n"); exit_error(); /* NOTREACHED */ } for (;;) { if (dflt) (void) fprintf(stderr, "Terminal type? [%s] ", dflt); else (void) fprintf(stderr, "Terminal type? "); (void) fflush(stderr); if (fgets(answer, sizeof(answer), stdin) == 0) { if (dflt == 0) { exit_error(); /* NOTREACHED */ } return (dflt); } if ((p = strchr(answer, '\n')) != 0) *p = '\0'; if (answer[0]) return (answer); if (dflt != 0) return (dflt); } } /************************************************************************** * * Mapping logic begins here * **************************************************************************/ /* Baud rate conditionals for mapping. */ #define GT 0x01 #define EQ 0x02 #define LT 0x04 #define NOT 0x08 #define GE (GT | EQ) #define LE (LT | EQ) typedef struct map { struct map *next; /* Linked list of maps. */ const char *porttype; /* Port type, or "" for any. */ const char *type; /* Terminal type to select. */ int conditional; /* Baud rate conditionals bitmask. */ int speed; /* Baud rate to compare against. */ } MAP; static MAP *cur, *maplist; #define DATA(name,value) { { name }, value } typedef struct speeds { const char string[7]; int speed; } SPEEDS; static const SPEEDS speeds[] = { DATA("0", B0), DATA("50", B50), DATA("75", B75), DATA("110", B110), DATA("134", B134), DATA("134.5", B134), DATA("150", B150), DATA("200", B200), DATA("300", B300), DATA("600", B600), DATA("1200", B1200), DATA("1800", B1800), DATA("2400", B2400), DATA("4800", B4800), DATA("9600", B9600), /* sgttyb may define up to this point */ #ifdef B19200 DATA("19200", B19200), #endif #ifdef B38400 DATA("38400", B38400), #endif #ifdef B19200 DATA("19200", B19200), #endif #ifdef B38400 DATA("38400", B38400), #endif #ifdef B19200 DATA("19200", B19200), #else #ifdef EXTA DATA("19200", EXTA), #endif #endif #ifdef B38400 DATA("38400", B38400), #else #ifdef EXTB DATA("38400", EXTB), #endif #endif #ifdef B57600 DATA("57600", B57600), #endif #ifdef B115200 DATA("115200", B115200), #endif #ifdef B230400 DATA("230400", B230400), #endif #ifdef B460800 DATA("460800", B460800), #endif }; #undef DATA static int tbaudrate(char *rate) { const SPEEDS *sp = 0; size_t n; /* The baudrate number can be preceded by a 'B', which is ignored. */ if (*rate == 'B') ++rate; for (n = 0; n < SIZEOF(speeds); ++n) { if (!CaselessCmp(rate, speeds[n].string)) { sp = speeds + n; break; } } if (sp == 0) err("unknown baud rate %s", rate); return (sp->speed); } /* * Syntax for -m: * [port-type][test baudrate]:terminal-type * The baud rate tests are: >, <, @, =, ! */ static void add_mapping(const char *port, char *arg) { MAP *mapp; char *copy, *p; const char *termp; char *base = 0; copy = strdup(arg); mapp = typeMalloc(MAP, 1); if (copy == 0 || mapp == 0) failed("malloc"); assert(copy != 0); assert(mapp != 0); mapp->next = 0; if (maplist == 0) cur = maplist = mapp; else { cur->next = mapp; cur = mapp; } mapp->porttype = arg; mapp->conditional = 0; arg = strpbrk(arg, "><@=!:"); if (arg == 0) { /* [?]term */ mapp->type = mapp->porttype; mapp->porttype = 0; goto done; } if (arg == mapp->porttype) /* [><@=! baud]:term */ termp = mapp->porttype = 0; else termp = base = arg; for (;; ++arg) { /* Optional conditionals. */ switch (*arg) { case '<': if (mapp->conditional & GT) goto badmopt; mapp->conditional |= LT; break; case '>': if (mapp->conditional & LT) goto badmopt; mapp->conditional |= GT; break; case '@': case '=': /* Not documented. */ mapp->conditional |= EQ; break; case '!': mapp->conditional |= NOT; break; default: goto next; } } next: if (*arg == ':') { if (mapp->conditional) goto badmopt; ++arg; } else { /* Optional baudrate. */ arg = strchr(p = arg, ':'); if (arg == 0) goto badmopt; *arg++ = '\0'; mapp->speed = tbaudrate(p); } mapp->type = arg; /* Terminate porttype, if specified. */ if (termp != 0) *base = '\0'; /* If a NOT conditional, reverse the test. */ if (mapp->conditional & NOT) mapp->conditional = ~mapp->conditional & (EQ | GT | LT); /* If user specified a port with an option flag, set it. */ done: if (port) { if (mapp->porttype) { badmopt: err("illegal -m option format: %s", copy); } mapp->porttype = port; } free(copy); #ifdef MAPDEBUG (void) printf("port: %s\n", mapp->porttype ? mapp->porttype : "ANY"); (void) printf("type: %s\n", mapp->type); (void) printf("conditional: "); p = ""; if (mapp->conditional & GT) { (void) printf("GT"); p = "/"; } if (mapp->conditional & EQ) { (void) printf("%sEQ", p); p = "/"; } if (mapp->conditional & LT) (void) printf("%sLT", p); (void) printf("\nspeed: %d\n", mapp->speed); #endif } /* * Return the type of terminal to use for a port of type 'type', as specified * by the first applicable mapping in 'map'. If no mappings apply, return * 'type'. */ static const char * mapped(const char *type) { MAP *mapp; int match; for (mapp = maplist; mapp; mapp = mapp->next) if (mapp->porttype == 0 || !strcmp(mapp->porttype, type)) { switch (mapp->conditional) { case 0: /* No test specified. */ match = TRUE; break; case EQ: match = ((int) ospeed == mapp->speed); break; case GE: match = ((int) ospeed >= mapp->speed); break; case GT: match = ((int) ospeed > mapp->speed); break; case LE: match = ((int) ospeed <= mapp->speed); break; case LT: match = ((int) ospeed < mapp->speed); break; default: match = FALSE; } if (match) return (mapp->type); } /* No match found; return given type. */ return (type); } /************************************************************************** * * Entry fetching * **************************************************************************/ /* * Figure out what kind of terminal we're dealing with, and then read in * its termcap entry. */ static const char * get_termcap_entry(char *userarg) { int errret; char *p; const char *ttype; #if HAVE_GETTTYNAM struct ttyent *t; #else FILE *fp; #endif char *ttypath; if (userarg) { ttype = userarg; goto found; } /* Try the environment. */ if ((ttype = getenv("TERM")) != 0) goto map; if ((ttypath = ttyname(STDERR_FILENO)) != 0) { p = _nc_basename(ttypath); #if HAVE_GETTTYNAM /* * We have the 4.3BSD library call getttynam(3); that means * there's an /etc/ttys to look up device-to-type mappings in. * Try ttyname(3); check for dialup or other mapping. */ if ((t = getttynam(p))) { ttype = t->ty_type; goto map; } #else if ((fp = fopen("/etc/ttytype", "r")) != 0 || (fp = fopen("/etc/ttys", "r")) != 0) { char buffer[BUFSIZ]; char *s, *t, *d; while (fgets(buffer, sizeof(buffer) - 1, fp) != 0) { for (s = buffer, t = d = 0; *s; s++) { if (isspace(UChar(*s))) *s = '\0'; else if (t == 0) t = s; else if (d == 0 && s != buffer && s[-1] == '\0') d = s; } if (t != 0 && d != 0 && !strcmp(d, p)) { ttype = strdup(t); fclose(fp); goto map; } } fclose(fp); } #endif /* HAVE_GETTTYNAM */ } /* If still undefined, use "unknown". */ ttype = "unknown"; map:ttype = mapped(ttype); /* * If not a path, remove TERMCAP from the environment so we get a * real entry from /etc/termcap. This prevents us from being fooled * by out of date stuff in the environment. */ found: if ((p = getenv("TERMCAP")) != 0 && !_nc_is_abs_path(p)) { /* 'unsetenv("TERMCAP")' is not portable. * The 'environ' array is better. */ int n; for (n = 0; environ[n] != 0; n++) { if (!strncmp("TERMCAP=", environ[n], (size_t) 8)) { while ((environ[n] = environ[n + 1]) != 0) { n++; } break; } } } /* * ttype now contains a pointer to the type of the terminal. * If the first character is '?', ask the user. */ if (ttype[0] == '?') { if (ttype[1] != '\0') ttype = askuser(ttype + 1); else ttype = askuser(0); } /* Find the terminfo entry. If it doesn't exist, ask the user. */ while (setupterm((NCURSES_CONST char *) ttype, STDOUT_FILENO, &errret) != OK) { if (errret == 0) { (void) fprintf(stderr, "%s: unknown terminal type %s\n", _nc_progname, ttype); ttype = 0; } else { (void) fprintf(stderr, "%s: can't initialize terminal type %s (error %d)\n", _nc_progname, ttype, errret); ttype = 0; } ttype = askuser(ttype); } #if BROKEN_LINKER tgetflag("am"); /* force lib_termcap.o to be linked for 'ospeed' */ #endif return (ttype); } /************************************************************************** * * Mode-setting logic * **************************************************************************/ /* some BSD systems have these built in, some systems are missing * one or more definitions. The safest solution is to override unless the * commonly-altered ones are defined. */ #if !(defined(CERASE) && defined(CINTR) && defined(CKILL) && defined(CQUIT)) #undef CEOF #undef CERASE #undef CINTR #undef CKILL #undef CLNEXT #undef CRPRNT #undef CQUIT #undef CSTART #undef CSTOP #undef CSUSP #endif /* control-character defaults */ #ifndef CEOF #define CEOF CTRL('D') #endif #ifndef CERASE #define CERASE CTRL('H') #endif #ifndef CINTR #define CINTR 127 /* ^? */ #endif #ifndef CKILL #define CKILL CTRL('U') #endif #ifndef CLNEXT #define CLNEXT CTRL('v') #endif #ifndef CRPRNT #define CRPRNT CTRL('r') #endif #ifndef CQUIT #define CQUIT CTRL('\\') #endif #ifndef CSTART #define CSTART CTRL('Q') #endif #ifndef CSTOP #define CSTOP CTRL('S') #endif #ifndef CSUSP #define CSUSP CTRL('Z') #endif #if defined(_POSIX_VDISABLE) #define DISABLED(val) (((_POSIX_VDISABLE != -1) \ && ((val) == _POSIX_VDISABLE)) \ || ((val) <= 0)) #else #define DISABLED(val) ((int)(val) <= 0) #endif #define CHK(val, dft) (unsigned char) (DISABLED(val) ? dft : val) static bool set_tabs(void); /* * Reset the terminal mode bits to a sensible state. Very useful after * a child program dies in raw mode. */ static void reset_mode(void) { #ifdef TERMIOS tcgetattr(STDERR_FILENO, &mode); #else stty(STDERR_FILENO, &mode); #endif #ifdef TERMIOS #if defined(VDISCARD) && defined(CDISCARD) mode.c_cc[VDISCARD] = CHK(mode.c_cc[VDISCARD], CDISCARD); #endif mode.c_cc[VEOF] = CHK(mode.c_cc[VEOF], CEOF); mode.c_cc[VERASE] = CHK(mode.c_cc[VERASE], CERASE); #if defined(VFLUSH) && defined(CFLUSH) mode.c_cc[VFLUSH] = CHK(mode.c_cc[VFLUSH], CFLUSH); #endif mode.c_cc[VINTR] = CHK(mode.c_cc[VINTR], CINTR); mode.c_cc[VKILL] = CHK(mode.c_cc[VKILL], CKILL); #if defined(VLNEXT) && defined(CLNEXT) mode.c_cc[VLNEXT] = CHK(mode.c_cc[VLNEXT], CLNEXT); #endif mode.c_cc[VQUIT] = CHK(mode.c_cc[VQUIT], CQUIT); #if defined(VREPRINT) && defined(CRPRNT) mode.c_cc[VREPRINT] = CHK(mode.c_cc[VREPRINT], CRPRNT); #endif #if defined(VSTART) && defined(CSTART) mode.c_cc[VSTART] = CHK(mode.c_cc[VSTART], CSTART); #endif #if defined(VSTOP) && defined(CSTOP) mode.c_cc[VSTOP] = CHK(mode.c_cc[VSTOP], CSTOP); #endif #if defined(VSUSP) && defined(CSUSP) mode.c_cc[VSUSP] = CHK(mode.c_cc[VSUSP], CSUSP); #endif #if defined(VWERASE) && defined(CWERASE) mode.c_cc[VWERASE] = CHK(mode.c_cc[VWERASE], CWERASE); #endif mode.c_iflag &= ~((unsigned) (IGNBRK | PARMRK | INPCK | ISTRIP | INLCR | IGNCR #ifdef IUCLC | IUCLC #endif #ifdef IXANY | IXANY #endif | IXOFF)); mode.c_iflag |= (BRKINT | IGNPAR | ICRNL | IXON #ifdef IMAXBEL | IMAXBEL #endif ); mode.c_oflag &= ~((unsigned) (0 #ifdef OLCUC | OLCUC #endif #ifdef OCRNL | OCRNL #endif #ifdef ONOCR | ONOCR #endif #ifdef ONLRET | ONLRET #endif #ifdef OFILL | OFILL #endif #ifdef OFDEL | OFDEL #endif #ifdef NLDLY | NLDLY #endif #ifdef CRDLY | CRDLY #endif #ifdef TABDLY | TABDLY #endif #ifdef BSDLY | BSDLY #endif #ifdef VTDLY | VTDLY #endif #ifdef FFDLY | FFDLY #endif )); mode.c_oflag |= (OPOST #ifdef ONLCR | ONLCR #endif ); mode.c_cflag &= ~((unsigned) (CSIZE | CSTOPB | PARENB | PARODD | CLOCAL)); mode.c_cflag |= (CS8 | CREAD); mode.c_lflag &= ~((unsigned) (ECHONL | NOFLSH #ifdef TOSTOP | TOSTOP #endif #ifdef ECHOPTR | ECHOPRT #endif #ifdef XCASE | XCASE #endif )); mode.c_lflag |= (ISIG | ICANON | ECHO | ECHOE | ECHOK #ifdef ECHOCTL | ECHOCTL #endif #ifdef ECHOKE | ECHOKE #endif ); #endif SET_TTY(STDERR_FILENO, &mode); } /* * Returns a "good" value for the erase character. This is loosely based on * the BSD4.4 logic. */ #ifdef TERMIOS static int default_erase(void) { int result; if (over_strike && key_backspace != 0 && strlen(key_backspace) == 1) result = key_backspace[0]; else result = CERASE; return result; } #endif /* * Update the values of the erase, interrupt, and kill characters in 'mode'. * * SVr4 tset (e.g., Solaris 2.5) only modifies the intr, quit or erase * characters if they're unset, or if we specify them as options. This differs * from BSD 4.4 tset, which always sets erase. */ static void set_control_chars(void) { #ifdef TERMIOS if (DISABLED(mode.c_cc[VERASE]) || terasechar >= 0) { mode.c_cc[VERASE] = UChar((terasechar >= 0) ? terasechar : default_erase()); } if (DISABLED(mode.c_cc[VINTR]) || intrchar >= 0) { mode.c_cc[VINTR] = UChar((intrchar >= 0) ? intrchar : CINTR); } if (DISABLED(mode.c_cc[VKILL]) || tkillchar >= 0) { mode.c_cc[VKILL] = UChar((tkillchar >= 0) ? tkillchar : CKILL); } #endif } /* * Set up various conversions in 'mode', including parity, tabs, returns, * echo, and case, according to the termcap entry. If the program we're * running was named with a leading upper-case character, map external * uppercase to internal lowercase. */ static void set_conversions(void) { #ifdef __OBSOLETE__ /* * Conversion logic for some *really* ancient terminal glitches, * not supported in terminfo. Left here for succeeding generations * to marvel at. */ if (tgetflag("UC")) { #ifdef IUCLC mode.c_iflag |= IUCLC; mode.c_oflag |= OLCUC; #endif } else if (tgetflag("LC")) { #ifdef IUCLC mode.c_iflag &= ~IUCLC; mode.c_oflag &= ~OLCUC; #endif } mode.c_iflag &= ~(PARMRK | INPCK); mode.c_lflag |= ICANON; if (tgetflag("EP")) { mode.c_cflag |= PARENB; mode.c_cflag &= ~PARODD; } if (tgetflag("OP")) { mode.c_cflag |= PARENB; mode.c_cflag |= PARODD; } #endif /* __OBSOLETE__ */ #ifdef TERMIOS #ifdef ONLCR mode.c_oflag |= ONLCR; #endif mode.c_iflag |= ICRNL; mode.c_lflag |= ECHO; #ifdef OXTABS mode.c_oflag |= OXTABS; #endif /* OXTABS */ /* test used to be tgetflag("NL") */ if (newline != (char *) 0 && newline[0] == '\n' && !newline[1]) { /* Newline, not linefeed. */ #ifdef ONLCR mode.c_oflag &= ~((unsigned) ONLCR); #endif mode.c_iflag &= ~((unsigned) ICRNL); } #ifdef __OBSOLETE__ if (tgetflag("HD")) /* Half duplex. */ mode.c_lflag &= ~ECHO; #endif /* __OBSOLETE__ */ #ifdef OXTABS /* test used to be tgetflag("pt") */ if (has_hardware_tabs) /* Print tabs. */ mode.c_oflag &= ~OXTABS; #endif /* OXTABS */ mode.c_lflag |= (ECHOE | ECHOK); #endif } /* Output startup string. */ static void set_init(void) { char *p; bool settle; #ifdef __OBSOLETE__ if (pad_char != (char *) 0) /* Get/set pad character. */ PC = pad_char[0]; #endif /* OBSOLETE */ #ifdef TAB3 if (oldmode.c_oflag & (TAB3 | ONLCR | OCRNL | ONLRET)) { oldmode.c_oflag &= (TAB3 | ONLCR | OCRNL | ONLRET); SET_TTY(STDERR_FILENO, &oldmode); } #endif settle = set_tabs(); if (isreset) { if ((p = reset_1string) != 0) { tputs(p, 0, outc); settle = TRUE; } if ((p = reset_2string) != 0) { tputs(p, 0, outc); settle = TRUE; } /* What about rf, rs3, as per terminfo man page? */ /* also might be nice to send rmacs, rmul, rmm */ if ((p = reset_file) != 0 || (p = init_file) != 0) { cat(p); settle = TRUE; } } if (settle) { (void) putc('\r', stderr); (void) fflush(stderr); (void) napms(1000); /* Settle the terminal. */ } } /* * Set the hardware tabs on the terminal, using the ct (clear all tabs), * st (set one tab) and ch (horizontal cursor addressing) capabilities. * This is done before if and is, so they can patch in case we blow this. * Return TRUE if we set any tab stops, FALSE if not. */ static bool set_tabs(void) { if (set_tab && clear_all_tabs) { int c; int lim = #if HAVE_SIZECHANGE tcolumns #else columns #endif ; (void) putc('\r', stderr); /* Force to left margin. */ tputs(clear_all_tabs, 0, outc); for (c = 8; c < lim; c += 8) { /* Get to the right column. In BSD tset, this * used to try a bunch of half-clever things * with cup and hpa, for an average saving of * somewhat less than two character times per * tab stop, less than .01 sec at 2400cps. We * lost all this cruft because it seemed to be * introducing some odd bugs. * -----------12345678----------- */ (void) fputs(" ", stderr); tputs(set_tab, 0, outc); } putc('\r', stderr); return (TRUE); } return (FALSE); } /************************************************************************** * * Main sequence * **************************************************************************/ /* * Tell the user if a control key has been changed from the default value. */ #ifdef TERMIOS static void report(const char *name, int which, unsigned def) { unsigned older, newer; char *p; newer = mode.c_cc[which]; older = oldmode.c_cc[which]; if (older == newer && older == def) return; (void) fprintf(stderr, "%s %s ", name, older == newer ? "is" : "set to"); if (DISABLED(newer)) (void) fprintf(stderr, "undef.\n"); /* * Check 'delete' before 'backspace', since the key_backspace value * is ambiguous. */ else if (newer == 0177) (void) fprintf(stderr, "delete.\n"); else if ((p = key_backspace) != 0 && newer == (unsigned char) p[0] && p[1] == '\0') (void) fprintf(stderr, "backspace.\n"); else if (newer < 040) { newer ^= 0100; (void) fprintf(stderr, "control-%c (^%c).\n", UChar(newer), UChar(newer)); } else (void) fprintf(stderr, "%c.\n", UChar(newer)); } #endif /* * Convert the obsolete argument forms into something that getopt can handle. * This means that -e, -i and -k get default arguments supplied for them. */ static void obsolete(char **argv) { for (; *argv; ++argv) { char *parm = argv[0]; if (parm[0] == '-' && parm[1] == '\0') { argv[0] = strdup("-q"); continue; } if ((parm[0] != '-') || (argv[1] && argv[1][0] != '-') || (parm[1] != 'e' && parm[1] != 'i' && parm[1] != 'k') || (parm[2] != '\0')) continue; switch (argv[0][1]) { case 'e': argv[0] = strdup("-e^H"); break; case 'i': argv[0] = strdup("-i^C"); break; case 'k': argv[0] = strdup("-k^U"); break; } } } static void usage(void) { #define DATA(s) s "\n" static const char msg[] = { DATA("") DATA("Options:") DATA(" -c set control characters") DATA(" -e ch erase character") DATA(" -I no initialization strings") DATA(" -i ch interrupt character") DATA(" -k ch kill character") DATA(" -m mapping map identifier to type") DATA(" -Q do not output control key settings") DATA(" -r display term on stderr") DATA(" -s output TERM set command") DATA(" -V print curses-version") DATA(" -w set window-size") }; #undef DATA (void) fprintf(stderr, "Usage: %s [options] [terminal]\n", _nc_progname); fputs(msg, stderr); exit_error(); /* NOTREACHED */ } static char arg_to_char(void) { return (char) ((optarg[0] == '^' && optarg[1] != '\0') ? ((optarg[1] == '?') ? '\177' : CTRL(optarg[1])) : optarg[0]); } int main(int argc, char **argv) { int ch, noinit, noset, quiet, Sflag, sflag, showterm; const char *p; const char *ttype; obsolete(argv); noinit = noset = quiet = Sflag = sflag = showterm = 0; while ((ch = getopt(argc, argv, "a:cd:e:Ii:k:m:np:qQSrsVw")) != -1) { switch (ch) { case 'c': /* set control-chars */ opt_c = TRUE; break; case 'a': /* OBSOLETE: map identifier to type */ add_mapping("arpanet", optarg); break; case 'd': /* OBSOLETE: map identifier to type */ add_mapping("dialup", optarg); break; case 'e': /* erase character */ terasechar = arg_to_char(); break; case 'I': /* no initialization strings */ noinit = 1; break; case 'i': /* interrupt character */ intrchar = arg_to_char(); break; case 'k': /* kill character */ tkillchar = arg_to_char(); break; case 'm': /* map identifier to type */ add_mapping(0, optarg); break; case 'n': /* OBSOLETE: set new tty driver */ break; case 'p': /* OBSOLETE: map identifier to type */ add_mapping("plugboard", optarg); break; case 'Q': /* don't output control key settings */ quiet = 1; break; case 'q': /* display term only */ noset = 1; break; case 'r': /* display term on stderr */ showterm = 1; break; case 'S': /* OBSOLETE: output TERM & TERMCAP */ Sflag = 1; break; case 's': /* output TERM set command */ sflag = 1; break; case 'V': /* print curses-version */ puts(curses_version()); ExitProgram(EXIT_SUCCESS); case 'w': /* set window-size */ opt_w = TRUE; break; case '?': default: usage(); } } _nc_progname = _nc_rootname(*argv); argc -= optind; argv += optind; if (argc > 1) usage(); if (!opt_c && !opt_w) opt_c = opt_w = TRUE; if (GET_TTY(STDERR_FILENO, &mode) < 0) failed("standard error"); can_restore = TRUE; original = oldmode = mode; #ifdef TERMIOS ospeed = (NCURSES_OSPEED) cfgetospeed(&mode); #else ospeed = (NCURSES_OSPEED) mode.sg_ospeed; #endif if (same_program(_nc_progname, PROG_RESET)) { isreset = TRUE; reset_mode(); } ttype = get_termcap_entry(*argv); if (!noset) { #if HAVE_SIZECHANGE tcolumns = columns; tlines = lines; if (opt_w) { STRUCT_WINSIZE win; /* Set window size if not set already */ (void) ioctl(STDERR_FILENO, IOCTL_GET_WINSIZE, &win); if (WINSIZE_ROWS(win) == 0 && WINSIZE_COLS(win) == 0 && tlines > 0 && tcolumns > 0) { WINSIZE_ROWS(win) = (unsigned short) tlines; WINSIZE_COLS(win) = (unsigned short) tcolumns; (void) ioctl(STDERR_FILENO, IOCTL_SET_WINSIZE, &win); } } #endif if (opt_c) { set_control_chars(); set_conversions(); if (!noinit) set_init(); /* Set the modes if they've changed. */ if (memcmp(&mode, &oldmode, sizeof(mode))) { SET_TTY(STDERR_FILENO, &mode); } } } if (noset) (void) printf("%s\n", ttype); else { if (showterm) (void) fprintf(stderr, "Terminal type is %s.\n", ttype); /* * If erase, kill and interrupt characters could have been * modified and not -Q, display the changes. */ #ifdef TERMIOS if (!quiet) { report("Erase", VERASE, CERASE); report("Kill", VKILL, CKILL); report("Interrupt", VINTR, CINTR); } #endif } if (Sflag) err("The -S option is not supported under terminfo."); if (sflag) { int len; char *var; char *leaf; /* * Figure out what shell we're using. A hack, we look for an * environmental variable SHELL ending in "csh". */ if ((var = getenv("SHELL")) != 0 && ((len = (int) strlen(leaf = _nc_basename(var))) >= 3) && !strcmp(leaf + len - 3, "csh")) p = "set noglob;\nsetenv TERM %s;\nunset noglob;\n"; else p = "TERM=%s;\n"; (void) printf(p, ttype); } ExitProgram(EXIT_SUCCESS); } ncurses-6.0-20160213/progs/tparm_type.c0000644000175100001440000000642012507776271016156 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2013,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ #include MODULE_ID("$Id: tparm_type.c,v 1.2 2015/04/04 15:01:13 tom Exp $") /* * Lookup the type of call we should make to tparm(). This ignores the actual * terminfo capability (bad, because it is not extensible), but makes this * code portable to platforms where sizeof(int) != sizeof(char *). */ TParams tparm_type(const char *name) { #define TD(code, longname, ti, tc) \ {code, {longname} }, \ {code, {ti} }, \ {code, {tc} } TParams result = Numbers; /* *INDENT-OFF* */ static const struct { TParams code; const char name[12]; } table[] = { TD(Num_Str, "pkey_key", "pfkey", "pk"), TD(Num_Str, "pkey_local", "pfloc", "pl"), TD(Num_Str, "pkey_xmit", "pfx", "px"), TD(Num_Str, "plab_norm", "pln", "pn"), TD(Num_Str_Str, "pkey_plab", "pfxl", "xl"), }; /* *INDENT-ON* */ unsigned n; for (n = 0; n < SIZEOF(table); n++) { if (!strcmp(name, table[n].name)) { result = table[n].code; break; } } return result; } ncurses-6.0-20160213/progs/tparm_type.h0000644000175100001440000000523412337155424016155 0ustar tomusers/**************************************************************************** * Copyright (c) 2014 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ /* * $Id: tparm_type.h,v 1.1 2014/05/21 16:57:56 tom Exp $ * * determine expected/actual number of parameters to setup for tparm */ #ifndef TPARM_TYPE_H #define TPARM_TYPE_H 1 #define USE_LIBTINFO #include typedef enum { Numbers = 0 ,Num_Str ,Num_Str_Str } TParams; extern TParams tparm_type(const char *name); #endif /* TPARM_TYPE_H */ ncurses-6.0-20160213/progs/capconvert0000755000175100001440000002111511657600407015706 0ustar tomusers#!/bin/sh ############################################################################## # Copyright (c) 1998-2006,2011 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # $Id: capconvert,v 1.5 2011/11/12 23:28:07 Robert.Millan Exp $ # # capconvert -- automated conversion from termcap to terminfo # echo "This script tries to automatically set you up so that your applications" echo "that now use termcap can use terminfo and the ncurses library." echo "" # Note, except for telling if we're running under xterm we don't use TERM at # all. This is because BSD users not infrequently have multiple termtypes # selected by conditionals in tset -- unless they're xterm users, in which # case they're on a workstation and probably don't. # Check to make sure TERMINFO is not already defined if test -n "$TERMINFO" then echo "TERMINFO is already defined in your environment. This means" echo "you already have a local terminfo tree, so you do not need any" echo "conversion." if test ! -d $TERMINFO ; then echo "Caution: TERMINFO does not point to a directory!" fi exit; fi # Check to see if terminfo is present in one of the standard locations. terminfo=no for p in $TERMINFO \ /usr/lib/terminfo \ /usr/share/lib/terminfo \ /usr/share/terminfo \ /usr/local/lib/terminfo \ /usr/local/share/terminfo do if test -d $p ; then terminfo=yes break fi done if test $terminfo = yes then echo "Your system already has a system-wide terminfo tree." echo "" if test -z "$TERMCAP" then echo "You have no TERMCAP variable set, so we are done." # Assumes the terminfo master covers all canned terminal types exit; fi case $TERM in xterm | xterm-*) echo "You are running xterm, which usually sets TERMCAP itself." echo "We can ignore this, because terminfo knows about xterm." echo "So you will just use the system-wide terminfo tree." exit ;; *) echo "We will have to make a local one for you anyway, to capture the effect" echo "of your TERMCAP variable." ;; esac else echo "No system-wide terminfo tree. We will make you a local one." fi echo ""; # Check if test -x works (it's not portable, but useful) OPT="-x" TMP=test$$; touch $TMP && chmod 755 $TMP if test $OPT $TMP ; then chmod 644 $TMP test $OPT $TMP && OPT="-f" else OPT="-f" fi rm -f $TMP # First step -- go find tic TIC= IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" for x in $PATH . do if test $OPT $x/tic then TIC=$x/tic break fi done IFS="$ac_save_ifs" if test -n "$TIC" then echo "I see tic at $TIC." case $TIC in # (vi ./tic) if test $OPT ../misc/shlib ; then TIC="../misc/shlib $TIC" fi ;; esac else echo "You do not have tic installed anywhere I can see, please fix that." exit; fi echo ""; # We have tic. Either there's no system terminfo tree or there is one but # the user has a TERMCAP variable that may modify a stock description. # # Make the user a terminfo directory if test -d $HOME/.terminfo then echo "It appears you already have a private terminfo directory" echo "at $HOME/.terminfo; this seems odd, because TERMINFO" echo "is not defined. I am not going to second-guess this -- if you" echo "really want me to try auto-configuring for you, remove or" echo "rename $HOME/terminfo and run me again." exit; else echo "I am creating your private terminfo directory at $HOME/.terminfo" mkdir $HOME/.terminfo # Ensure that that's where tic's compilation results. # This isn't strictly necessary with a 1.9.7 or later tic. TERMINFO="$HOME/.terminfo"; export TERMINFO fi echo ""; # Find a terminfo source to work from if test -f ../misc/terminfo.src then echo "I see the terminfo master source is handy; I will use that." master=../misc/terminfo.src else # Ooops...looks like we're running from somewhere other than the # progs directory of an ncurses source tree. master=`find $HOME -name "*terminfo.src" -print` mcount=`echo $master | wc -l` case $mcount in 0) echo "I can not find a terminfo source file anywhere under your home directory." echo "There should be a file called terminfo.src somewhere in your" echo "ncurses distribution; please put it in your home directotry" echo "and run me again (it does not have to live there permanently)." exit; ;; 1) echo "I see a file called $master." echo "I am going to assume this is the terminfo source included with" echo "the ncurses distribution. If this assumption is wrong, please" echo "interrupt me now! OK to continue?" read ans; ;; 2) echo "I see more than one possible terminfo source. Here they are:" echo $master | sed "/^/s// /"; while : do echo "Please tell me which one to use:" read master; if test -f $master then break else echo "That file does not exist. Try again?"; fi done ;; esac fi echo ""; # Now that we have a master, compile it into the local tree echo "OK, now I will make your private terminfo tree. This may take a bit..." # # Kluge alert: we compile terminfo.src in two pieces because a lot of machines # with < 16MB RAM choke on tic's core-hog habits. trap "rm -f tsplit$$.*" 0 1 2 5 15 sed -n $master \ -e '1,/SPLIT HERE/w 'tsplit$$.01 \ -e '/SPLIT HERE/,$w 'tsplit$$.02 \ 2>/dev/null for x in tsplit$$.*; do eval $TIC $x; done rm tsplit$$.* trap 0 1 2 5 15 # echo "You now have a private tree under $HOME/.terminfo;" echo "the ncurses library will automatically read from it," echo "and ncurses tic will automatically compile entries to it." # We're done unless user has a .termcap file or equivalent named by TERMCAP if test -z "$TERMCAP" then echo "You have no TERMCAP set, so we are done." fi # OK, here comes the nasty case...user has a TERMCAP. Instead of # trying to follow all the convolutions of the relationship between # TERM and TERMCAP (partly because it's too painful, and partly because # we don't actually know what TERM will be nor even if it always has # the same value for this user) we do the following three steps... if test -f $HOME/.termcap then echo 'I see you have a $HOME/.termcap file. I will compile that.' eval $TIC $HOME/.termcap echo "Done." echo "Note that editing $HOME/.termcap will no longer change the data curses sees." elif test -f "$TERMCAP" then echo "Your TERMCAP names the file $TERMCAP. I will compile that." eval $TIC $TERMCAP echo "Done." echo "Note that editing $TERMCAP will no longer change the data curses sees." else echo "Your TERMCAP value appears to be an entry in termcap format." echo "I will compile it." echo $TERMCAP >myterm$$ eval $TIC myterm$$ rm myterm$$ echo "Done." echo "Note that editing TERMCAP will no longer change the data curses sees." fi echo "To do that, decompile the terminal decription you want with infocmp(1)," echo "edit to taste, and recompile using tic(1)." # capconvert ends here ncurses-6.0-20160213/progs/MKtermsort.sh0000755000175100001440000001463612546071572016277 0ustar tomusers#!/bin/sh # $Id: MKtermsort.sh,v 1.11 2015/07/04 23:59:54 tom Exp $ # # MKtermsort.sh -- generate indirection vectors for the various sort methods # ############################################################################## # Copyright (c) 1998-2008,2015 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # The output of this script is C source for nine arrays that list three sort # orders for each of the three different classes of terminfo capabilities. # # keep the order independent of locale: if test "${LANGUAGE+set}" = set; then LANGUAGE=C; export LANGUAGE; fi if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi if test "${LC_COLLATE+set}" = set; then LC_COLLATE=C; export LC_COLLATE; fi # AWK=${1-awk} DATA=${2-../include/Caps} data=data$$ trap 'rm -f $data' 1 2 5 15 sed -e 's/[ ][ ]*/ /g' < $DATA >$data DATA=$data echo "/*"; echo " * termsort.c --- sort order arrays for use by infocmp."; echo " *"; echo " * Note: this file is generated using MKtermsort.sh, do not edit by hand."; echo " */"; echo "static const PredIdx bool_terminfo_sort[] = {"; $AWK <$DATA ' BEGIN {i = 0;} /^#/ {next;} $3 == "bool" {printf("%s\t%d\n", $2, i++);} ' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; echo "};"; echo ""; echo "static const PredIdx num_terminfo_sort[] = {"; $AWK <$DATA ' BEGIN {i = 0;} /^#/ {next;} $3 == "num" {printf("%s\t%d\n", $2, i++);} ' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; echo "};"; echo ""; echo "static const PredIdx str_terminfo_sort[] = {"; $AWK <$DATA ' BEGIN {i = 0;} /^#/ {next;} $3 == "str" {printf("%s\t%d\n", $2, i++);} ' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; echo "};"; echo ""; echo "static const PredIdx bool_variable_sort[] = {"; $AWK <$DATA ' BEGIN {i = 0;} /^#/ {next;} $3 == "bool" {printf("%s\t%d\n", $1, i++);} ' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; echo "};"; echo ""; echo "static const PredIdx num_variable_sort[] = {"; $AWK <$DATA ' BEGIN {i = 0;} /^#/ {next;} $3 == "num" {printf("%s\t%d\n", $1, i++);} ' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; echo "};"; echo ""; echo "static const PredIdx str_variable_sort[] = {"; $AWK <$DATA ' BEGIN {i = 0;} /^#/ {next;} $3 == "str" {printf("%s\t%d\n", $1, i++);} ' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; echo "};"; echo ""; echo "static const PredIdx bool_termcap_sort[] = {"; $AWK <$DATA ' BEGIN {i = 0;} /^#/ {next;} $3 == "bool" {printf("%s\t%d\n", $4, i++);} ' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; echo "};"; echo ""; echo "static const PredIdx num_termcap_sort[] = {"; $AWK <$DATA ' BEGIN {i = 0;} /^#/ {next;} $3 == "num" {printf("%s\t%d\n", $4, i++);} ' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; echo "};"; echo ""; echo "static const PredIdx str_termcap_sort[] = {"; $AWK <$DATA ' BEGIN {i = 0;} /^#/ {next;} $3 == "str" {printf("%s\t%d\n", $4, i++);} ' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; echo "};"; echo ""; echo "static const bool bool_from_termcap[] = {"; $AWK <$DATA ' BEGIN { count = 0; valid = 0; } $3 == "bool" && substr($7, 1, 1) == "-" {print "\tFALSE,\t/* ", $2, " */"; count++; } $3 == "bool" && substr($7, 1, 1) == "Y" {print "\tTRUE,\t/* ", $2, " */"; valid = count++; } END { printf "#define OK_bool_from_termcap %d\n", valid; } ' echo "};"; echo ""; echo "static const bool num_from_termcap[] = {"; $AWK <$DATA ' BEGIN { count = 0; valid = 0; } $3 == "num" && substr($7, 1, 1) == "-" {print "\tFALSE,\t/* ", $2, " */"; count++; } $3 == "num" && substr($7, 1, 1) == "Y" {print "\tTRUE,\t/* ", $2, " */"; valid = count++; } END { printf "#define OK_num_from_termcap %d\n", valid; } ' echo "};"; echo ""; echo "static const bool str_from_termcap[] = {"; $AWK <$DATA ' BEGIN { count = 0; valid = 0; } $3 == "str" && substr($7, 1, 1) == "-" {print "\tFALSE,\t/* ", $2, " */"; count++; } $3 == "str" && substr($7, 1, 1) == "Y" {print "\tTRUE,\t/* ", $2, " */"; valid = count++; } END { printf "#define OK_str_from_termcap %d\n", valid; } ' echo "};"; echo ""; rm -f $data ncurses-6.0-20160213/progs/modules0000644000175100001440000000601512337155750015213 0ustar tomusers# $Id: modules,v 1.18 2014/05/21 17:01:28 tom Exp $ # Program modules (some are in ncurses lib!) ############################################################################## # Copyright (c) 1998-2010,2014 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # # copy of this software and associated documentation files (the "Software"), # # to deal in the Software without restriction, including without limitation # # the rights to use, copy, modify, merge, publish, distribute, distribute # # with modifications, sublicense, and/or sell copies of the Software, and to # # permit persons to whom the Software is furnished to do so, subject to the # # following conditions: # # # # The above copyright notice and this permission notice shall be included in # # all copies or substantial portions of the Software. # # # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # # DEALINGS IN THE SOFTWARE. # # # # Except as contained in this notice, the name(s) of the above copyright # # holders shall not be used in advertising or otherwise to promote the sale, # # use or other dealings in this Software without prior written # # authorization. # ############################################################################## # # Author: Thomas E. Dickey 1995-on # @ base clear progs $(srcdir) $(HEADER_DEPS) tic progs $(srcdir) $(HEADER_DEPS) transform.h $(srcdir)/dump_entry.h $(srcdir)/tparm_type.h toe progs $(srcdir) $(HEADER_DEPS) $(INCDIR)/hashed_db.h dump_entry progs $(srcdir) $(HEADER_DEPS) $(srcdir)/dump_entry.h ../include/parametrized.h $(INCDIR)/capdefaults.c termsort.c infocmp progs $(srcdir) $(HEADER_DEPS) $(srcdir)/dump_entry.h tabs progs $(srcdir) $(HEADER_DEPS) tparm_type progs $(srcdir) $(HEADER_DEPS) $(srcdir)/tparm_type.h tput progs $(srcdir) $(HEADER_DEPS) transform.h $(srcdir)/dump_entry.h $(srcdir)/tparm_type.h termsort.c tset progs $(srcdir) $(HEADER_DEPS) transform.h $(srcdir)/dump_entry.h ../include/termcap.h transform progs $(srcdir) $(HEADER_DEPS) transform.h # vile:makemode ncurses-6.0-20160213/progs/transform.c0000644000175100001440000000627311563602415016000 0ustar tomusers/**************************************************************************** * Copyright (c) 2009-2010,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Thomas E. Dickey * ****************************************************************************/ #include #include #include MODULE_ID("$Id: transform.c,v 1.3 2011/05/14 22:41:17 tom Exp $") #ifdef SUFFIX_IGNORED static void trim_suffix(const char *a, size_t *len) { const char ignore[] = SUFFIX_IGNORED; if (sizeof(ignore) != 0) { bool trim = FALSE; size_t need = (sizeof(ignore) - 1); if (*len > need) { size_t first = *len - need; size_t n; trim = TRUE; for (n = first; n < *len; ++n) { if (tolower(UChar(a[n])) != tolower(UChar(ignore[n - first]))) { trim = FALSE; break; } } if (trim) { *len -= need; } } } } #else #define trim_suffix(a, len) /* nothing */ #endif bool same_program(const char *a, const char *b) { size_t len_a = strlen(a); size_t len_b = strlen(b); trim_suffix(a, &len_a); trim_suffix(b, &len_b); return (len_a == len_b) && (strncmp(a, b, len_a) == 0); } ncurses-6.0-20160213/progs/tput.c0000644000175100001440000002376512530210177014761 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * tput.c -- shellscript access to terminal capabilities * * by Eric S. Raymond , portions based on code from * Ross Ridge's mytinfo package. */ #include #if !PURE_TERMINFO #include #include #endif #include MODULE_ID("$Id: tput.c,v 1.51 2015/05/23 23:42:55 tom Exp $") #define PUTS(s) fputs(s, stdout) #define PUTCHAR(c) putchar(c) #define FLUSH fflush(stdout) static char *prg_name; static bool is_init = FALSE; static bool is_reset = FALSE; static void quit(int status, const char *fmt,...) { va_list argp; va_start(argp, fmt); fprintf(stderr, "%s: ", prg_name); vfprintf(stderr, fmt, argp); fprintf(stderr, "\n"); va_end(argp); ExitProgram(status); } static void usage(void) { fprintf(stderr, "usage: %s [-V] [-S] [-T term] capname\n", prg_name); ExitProgram(EXIT_FAILURE); } static void check_aliases(const char *name) { is_init = same_program(name, PROG_INIT); is_reset = same_program(name, PROG_RESET); } static int exit_code(int token, int value) { int result = 99; switch (token) { case BOOLEAN: result = !value; /* TRUE=0, FALSE=1 */ break; case NUMBER: result = 0; /* always zero */ break; case STRING: result = value; /* 0=normal, 1=missing */ break; } return result; } static int tput(int argc, char *argv[]) { NCURSES_CONST char *name; char *s; int i, j, c; int status; FILE *f; #if !PURE_TERMINFO bool termcap = FALSE; #endif if ((name = argv[0]) == 0) name = ""; check_aliases(name); if (is_reset || is_init) { if (init_prog != 0) { IGNORE_RC(system(init_prog)); } FLUSH; if (is_reset && reset_1string != 0) { PUTS(reset_1string); } else if (init_1string != 0) { PUTS(init_1string); } FLUSH; if (is_reset && reset_2string != 0) { PUTS(reset_2string); } else if (init_2string != 0) { PUTS(init_2string); } FLUSH; #ifdef set_lr_margin if (set_lr_margin != 0) { PUTS(TPARM_2(set_lr_margin, 0, columns - 1)); } else #endif #ifdef set_left_margin_parm if (set_left_margin_parm != 0 && set_right_margin_parm != 0) { PUTS(TPARM_1(set_left_margin_parm, 0)); PUTS(TPARM_1(set_right_margin_parm, columns - 1)); } else #endif if (clear_margins != 0 && set_left_margin != 0 && set_right_margin != 0) { PUTS(clear_margins); if (carriage_return != 0) { PUTS(carriage_return); } else { PUTCHAR('\r'); } PUTS(set_left_margin); if (parm_right_cursor) { PUTS(TPARM_1(parm_right_cursor, columns - 1)); } else { for (i = 0; i < columns - 1; i++) { PUTCHAR(' '); } } PUTS(set_right_margin); if (carriage_return != 0) { PUTS(carriage_return); } else { PUTCHAR('\r'); } } FLUSH; if (init_tabs != 8) { if (clear_all_tabs != 0 && set_tab != 0) { for (i = 0; i < columns - 1; i += 8) { if (parm_right_cursor) { PUTS(TPARM_1(parm_right_cursor, 8)); } else { for (j = 0; j < 8; j++) PUTCHAR(' '); } PUTS(set_tab); } FLUSH; } } if (is_reset && reset_file != 0) { f = fopen(reset_file, "r"); if (f == 0) { quit(4 + errno, "Can't open reset_file: '%s'", reset_file); } while ((c = fgetc(f)) != EOF) { PUTCHAR(c); } fclose(f); } else if (init_file != 0) { f = fopen(init_file, "r"); if (f == 0) { quit(4 + errno, "Can't open init_file: '%s'", init_file); } while ((c = fgetc(f)) != EOF) { PUTCHAR(c); } fclose(f); } FLUSH; if (is_reset && reset_3string != 0) { PUTS(reset_3string); } else if (init_3string != 0) { PUTS(init_3string); } FLUSH; return 0; } if (strcmp(name, "longname") == 0) { PUTS(longname()); return 0; } #if !PURE_TERMINFO retry: #endif if ((status = tigetflag(name)) != -1) { return exit_code(BOOLEAN, status); } else if ((status = tigetnum(name)) != CANCELLED_NUMERIC) { (void) printf("%d\n", status); return exit_code(NUMBER, 0); } else if ((s = tigetstr(name)) == CANCELLED_STRING) { #if !PURE_TERMINFO if (!termcap) { const struct name_table_entry *np; termcap = TRUE; if ((np = _nc_find_entry(name, _nc_get_hash_table(termcap))) != 0) { switch (np->nte_type) { case BOOLEAN: if (bool_from_termcap[np->nte_index]) name = boolnames[np->nte_index]; break; case NUMBER: if (num_from_termcap[np->nte_index]) name = numnames[np->nte_index]; break; case STRING: if (str_from_termcap[np->nte_index]) name = strnames[np->nte_index]; break; } goto retry; } } #endif quit(4, "unknown terminfo capability '%s'", name); } else if (s != ABSENT_STRING) { if (argc > 1) { int k; int ignored; long numbers[1 + NUM_PARM]; char *strings[1 + NUM_PARM]; char *p_is_s[NUM_PARM]; /* Nasty hack time. The tparm function needs to see numeric * parameters as numbers, not as pointers to their string * representations */ for (k = 1; k < argc; k++) { char *tmp = 0; strings[k] = argv[k]; numbers[k] = strtol(argv[k], &tmp, 0); if (tmp == 0 || *tmp != 0) numbers[k] = 0; } for (k = argc; k <= NUM_PARM; k++) { numbers[k] = 0; strings[k] = 0; } switch (tparm_type(name)) { case Num_Str: s = TPARM_2(s, numbers[1], strings[2]); break; case Num_Str_Str: s = TPARM_3(s, numbers[1], strings[2], strings[3]); break; case Numbers: default: (void) _nc_tparm_analyze(s, p_is_s, &ignored); #define myParam(n) (p_is_s[n - 1] != 0 ? ((TPARM_ARG) strings[n]) : numbers[n]) s = TPARM_9(s, myParam(1), myParam(2), myParam(3), myParam(4), myParam(5), myParam(6), myParam(7), myParam(8), myParam(9)); break; } } /* use putp() in order to perform padding */ putp(s); return exit_code(STRING, 0); } return exit_code(STRING, 1); } int main(int argc, char **argv) { char *term; int errret; bool cmdline = TRUE; int c; char buf[BUFSIZ]; int result = 0; check_aliases(prg_name = _nc_rootname(argv[0])); term = getenv("TERM"); while ((c = getopt(argc, argv, "ST:V")) != -1) { switch (c) { case 'S': cmdline = FALSE; break; case 'T': use_env(FALSE); term = optarg; break; case 'V': puts(curses_version()); ExitProgram(EXIT_SUCCESS); default: usage(); /* NOTREACHED */ } } /* * Modify the argument list to omit the options we processed. */ if (is_reset || is_init) { if (optind-- < argc) { argc -= optind; argv += optind; } argv[0] = prg_name; } else { argc -= optind; argv += optind; } if (term == 0 || *term == '\0') quit(2, "No value for $TERM and no -T specified"); if (setupterm(term, STDOUT_FILENO, &errret) != OK && errret <= 0) quit(3, "unknown terminal \"%s\"", term); if (cmdline) { if ((argc <= 0) && !is_reset && !is_init) usage(); ExitProgram(tput(argc, argv)); } while (fgets(buf, sizeof(buf), stdin) != 0) { char *argvec[16]; /* command, 9 parms, null, & slop */ int argnum = 0; char *cp; /* crack the argument list into a dope vector */ for (cp = buf; *cp; cp++) { if (isspace(UChar(*cp))) { *cp = '\0'; } else if (cp == buf || cp[-1] == 0) { argvec[argnum++] = cp; if (argnum >= (int) SIZEOF(argvec) - 1) break; } } argvec[argnum] = 0; if (argnum != 0 && tput(argnum, argvec) != 0) { if (result == 0) result = 4; /* will return value >4 */ ++result; } } ExitProgram(result); } ncurses-6.0-20160213/progs/dump_entry.c0000644000175100001440000010771512626430251016154 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996 on * ****************************************************************************/ #define __INTERNAL_CAPS_VISIBLE #include #include "dump_entry.h" #include "termsort.c" /* this C file is generated */ #include /* so is this */ MODULE_ID("$Id: dump_entry.c,v 1.124 2015/11/28 22:54:33 tom Exp $") #define DISCARD(string) string = ABSENT_STRING #define PRINTF (void) printf #define OkIndex(index,array) ((int)(index) >= 0 && (int)(index) < (int) SIZEOF(array)) typedef struct { char *text; size_t used; size_t size; } DYNBUF; static int tversion; /* terminfo version */ static int outform; /* output format to use */ static int sortmode; /* sort mode to use */ static int width = 60; /* max line width for listings */ static int height = 65535; /* max number of lines for listings */ static int column; /* current column, limited by 'width' */ static int oldcol; /* last value of column before wrap */ static bool pretty; /* true if we format if-then-else strings */ static bool checking; /* true if we are checking for tic */ static int quickdump; /* true if we are dumping compiled data */ static char *save_sgr; static DYNBUF outbuf; static DYNBUF tmpbuf; /* indirection pointers for implementing sort and display modes */ static const PredIdx *bool_indirect, *num_indirect, *str_indirect; static NCURSES_CONST char *const *bool_names; static NCURSES_CONST char *const *num_names; static NCURSES_CONST char *const *str_names; static const char *separator = "", *trailer = ""; static int indent = 8; /* cover various ports and variants of terminfo */ #define V_ALLCAPS 0 /* all capabilities (SVr4, XSI, ncurses) */ #define V_SVR1 1 /* SVR1, Ultrix */ #define V_HPUX 2 /* HP/UX */ #define V_AIX 3 /* AIX */ #define V_BSD 4 /* BSD */ #if NCURSES_XNAMES #define OBSOLETE(n) (!_nc_user_definable && (n[0] == 'O' && n[1] == 'T')) #else #define OBSOLETE(n) (n[0] == 'O' && n[1] == 'T') #endif #define isObsolete(f,n) ((f == F_TERMINFO || f == F_VARIABLE) && OBSOLETE(n)) #if NCURSES_XNAMES #define BoolIndirect(j) ((j >= BOOLCOUNT) ? (j) : ((sortmode == S_NOSORT) ? j : bool_indirect[j])) #define NumIndirect(j) ((j >= NUMCOUNT) ? (j) : ((sortmode == S_NOSORT) ? j : num_indirect[j])) #define StrIndirect(j) ((j >= STRCOUNT) ? (j) : ((sortmode == S_NOSORT) ? j : str_indirect[j])) #else #define BoolIndirect(j) ((sortmode == S_NOSORT) ? (j) : bool_indirect[j]) #define NumIndirect(j) ((sortmode == S_NOSORT) ? (j) : num_indirect[j]) #define StrIndirect(j) ((sortmode == S_NOSORT) ? (j) : str_indirect[j]) #endif static void failed(const char *) GCC_NORETURN; static void failed(const char *s) { perror(s); ExitProgram(EXIT_FAILURE); } static void strncpy_DYN(DYNBUF * dst, const char *src, size_t need) { size_t want = need + dst->used + 1; if (want > dst->size) { dst->size += (want + 1024); /* be generous */ dst->text = typeRealloc(char, dst->size, dst->text); if (dst->text == 0) failed("strncpy_DYN"); } (void) strncpy(dst->text + dst->used, src, need); dst->used += need; dst->text[dst->used] = 0; } static void strcpy_DYN(DYNBUF * dst, const char *src) { if (src == 0) { dst->used = 0; strcpy_DYN(dst, ""); } else { strncpy_DYN(dst, src, strlen(src)); } } #if NO_LEAKS static void free_DYN(DYNBUF * p) { if (p->text != 0) free(p->text); p->text = 0; p->size = 0; p->used = 0; } void _nc_leaks_dump_entry(void) { free_DYN(&outbuf); free_DYN(&tmpbuf); } #endif #define NameTrans(check,result) \ if ((np->nte_index <= OK_ ## check) \ && check[np->nte_index]) \ return (result[np->nte_index]) NCURSES_CONST char * nametrans(const char *name) /* translate a capability name to termcap from terminfo */ { const struct name_table_entry *np; if ((np = _nc_find_entry(name, _nc_get_hash_table(0))) != 0) { switch (np->nte_type) { case BOOLEAN: NameTrans(bool_from_termcap, boolcodes); break; case NUMBER: NameTrans(num_from_termcap, numcodes); break; case STRING: NameTrans(str_from_termcap, strcodes); break; } } return (0); } void dump_init(const char *version, int mode, int sort, int twidth, int theight, unsigned traceval, bool formatted, bool check, int quick) /* set up for entry display */ { width = twidth; height = theight; pretty = formatted; checking = check; quickdump = (quick & 3); /* versions */ if (version == 0) tversion = V_ALLCAPS; else if (!strcmp(version, "SVr1") || !strcmp(version, "SVR1") || !strcmp(version, "Ultrix")) tversion = V_SVR1; else if (!strcmp(version, "HP")) tversion = V_HPUX; else if (!strcmp(version, "AIX")) tversion = V_AIX; else if (!strcmp(version, "BSD")) tversion = V_BSD; else tversion = V_ALLCAPS; /* implement display modes */ switch (outform = mode) { case F_LITERAL: case F_TERMINFO: bool_names = boolnames; num_names = numnames; str_names = strnames; separator = (twidth > 0 && theight > 1) ? ", " : ","; trailer = "\n\t"; break; case F_VARIABLE: bool_names = boolfnames; num_names = numfnames; str_names = strfnames; separator = (twidth > 0 && theight > 1) ? ", " : ","; trailer = "\n\t"; break; case F_TERMCAP: case F_TCONVERR: bool_names = boolcodes; num_names = numcodes; str_names = strcodes; separator = ":"; trailer = "\\\n\t:"; break; } indent = 8; /* implement sort modes */ switch (sortmode = sort) { case S_NOSORT: if (traceval) (void) fprintf(stderr, "%s: sorting by term structure order\n", _nc_progname); break; case S_TERMINFO: if (traceval) (void) fprintf(stderr, "%s: sorting by terminfo name order\n", _nc_progname); bool_indirect = bool_terminfo_sort; num_indirect = num_terminfo_sort; str_indirect = str_terminfo_sort; break; case S_VARIABLE: if (traceval) (void) fprintf(stderr, "%s: sorting by C variable order\n", _nc_progname); bool_indirect = bool_variable_sort; num_indirect = num_variable_sort; str_indirect = str_variable_sort; break; case S_TERMCAP: if (traceval) (void) fprintf(stderr, "%s: sorting by termcap name order\n", _nc_progname); bool_indirect = bool_termcap_sort; num_indirect = num_termcap_sort; str_indirect = str_termcap_sort; break; } if (traceval) (void) fprintf(stderr, "%s: width = %d, tversion = %d, outform = %d\n", _nc_progname, width, tversion, outform); } static TERMTYPE *cur_type; static int dump_predicate(PredType type, PredIdx idx) /* predicate function to use for ordinary decompilation */ { switch (type) { case BOOLEAN: return (cur_type->Booleans[idx] == FALSE) ? FAIL : cur_type->Booleans[idx]; case NUMBER: return (cur_type->Numbers[idx] == ABSENT_NUMERIC) ? FAIL : cur_type->Numbers[idx]; case STRING: return (cur_type->Strings[idx] != ABSENT_STRING) ? (int) TRUE : FAIL; } return (FALSE); /* pacify compiler */ } static void set_obsolete_termcaps(TERMTYPE *tp); /* is this the index of a function key string? */ #define FNKEY(i) \ (((i) >= STR_IDX(key_f0) && \ (i) <= STR_IDX(key_f9)) || \ ((i) >= STR_IDX(key_f11) && \ (i) <= STR_IDX(key_f63))) /* * If we configure with a different Caps file, the offsets into the arrays * will change. So we use an address expression. */ #define BOOL_IDX(name) (PredType) (&(name) - &(CUR Booleans[0])) #define NUM_IDX(name) (PredType) (&(name) - &(CUR Numbers[0])) #define STR_IDX(name) (PredType) (&(name) - &(CUR Strings[0])) static bool version_filter(PredType type, PredIdx idx) /* filter out capabilities we may want to suppress */ { switch (tversion) { case V_ALLCAPS: /* SVr4, XSI Curses */ return (TRUE); case V_SVR1: /* System V Release 1, Ultrix */ switch (type) { case BOOLEAN: return ((idx <= BOOL_IDX(xon_xoff)) ? TRUE : FALSE); case NUMBER: return ((idx <= NUM_IDX(width_status_line)) ? TRUE : FALSE); case STRING: return ((idx <= STR_IDX(prtr_non)) ? TRUE : FALSE); } break; case V_HPUX: /* Hewlett-Packard */ switch (type) { case BOOLEAN: return ((idx <= BOOL_IDX(xon_xoff)) ? TRUE : FALSE); case NUMBER: return ((idx <= NUM_IDX(label_width)) ? TRUE : FALSE); case STRING: if (idx <= STR_IDX(prtr_non)) return (TRUE); else if (FNKEY(idx)) /* function keys */ return (TRUE); else if (idx == STR_IDX(plab_norm) || idx == STR_IDX(label_on) || idx == STR_IDX(label_off)) return (TRUE); else return (FALSE); } break; case V_AIX: /* AIX */ switch (type) { case BOOLEAN: return ((idx <= BOOL_IDX(xon_xoff)) ? TRUE : FALSE); case NUMBER: return ((idx <= NUM_IDX(width_status_line)) ? TRUE : FALSE); case STRING: if (idx <= STR_IDX(prtr_non)) return (TRUE); else if (FNKEY(idx)) /* function keys */ return (TRUE); else return (FALSE); } break; #define is_termcap(type) (OkIndex(idx, type##_from_termcap) && \ type##_from_termcap[idx]) case V_BSD: /* BSD */ switch (type) { case BOOLEAN: return is_termcap(bool); case NUMBER: return is_termcap(num); case STRING: return is_termcap(str); } break; } return (FALSE); /* pacify the compiler */ } static void trim_trailing(void) { while (outbuf.used > 0 && outbuf.text[outbuf.used - 1] == ' ') outbuf.text[--outbuf.used] = '\0'; } static void force_wrap(void) { oldcol = column; trim_trailing(); strcpy_DYN(&outbuf, trailer); column = indent; } static void wrap_concat(const char *src) { size_t need = strlen(src); size_t want = strlen(separator) + need; if (column > indent && column + (int) want > width) { force_wrap(); } strcpy_DYN(&outbuf, src); strcpy_DYN(&outbuf, separator); column += (int) need; } #define IGNORE_SEP_TRAIL(first,last,sep_trail) \ if ((size_t)(last - first) > sizeof(sep_trail)-1 \ && !strncmp(first, sep_trail, sizeof(sep_trail)-1)) \ first += sizeof(sep_trail)-2 /* Returns the nominal length of the buffer assuming it is termcap format, * i.e., the continuation sequence is treated as a single character ":". * * There are several implementations of termcap which read the text into a * fixed-size buffer. Generally they strip the newlines from the text, but may * not do it until after the buffer is read. Also, "tc=" resolution may be * expanded in the same buffer. This function is useful for measuring the size * of the best fixed-buffer implementation; the worst case may be much worse. */ #ifdef TEST_TERMCAP_LENGTH static int termcap_length(const char *src) { static const char pattern[] = ":\\\n\t:"; int len = 0; const char *const t = src + strlen(src); while (*src != '\0') { IGNORE_SEP_TRAIL(src, t, pattern); src++; len++; } return len; } #else #define termcap_length(src) strlen(src) #endif static void indent_DYN(DYNBUF * buffer, int level) { int n; for (n = 0; n < level; n++) strncpy_DYN(buffer, "\t", (size_t) 1); } bool has_params(const char *src) { bool result = FALSE; int len = (int) strlen(src); int n; bool ifthen = FALSE; bool params = FALSE; for (n = 0; n < len - 1; ++n) { if (!strncmp(src + n, "%p", (size_t) 2)) { params = TRUE; } else if (!strncmp(src + n, "%;", (size_t) 2)) { ifthen = TRUE; result = params; break; } } if (!ifthen) { result = ((len > 50) && params); } return result; } static char * fmt_complex(TERMTYPE *tterm, const char *capability, char *src, int level) { bool percent = FALSE; bool params = has_params(src); while (*src != '\0') { switch (*src) { case '^': percent = FALSE; strncpy_DYN(&tmpbuf, src++, (size_t) 1); break; case '\\': percent = FALSE; strncpy_DYN(&tmpbuf, src++, (size_t) 1); break; case '%': percent = TRUE; break; case '?': /* "if" */ case 't': /* "then" */ case 'e': /* "else" */ if (percent) { percent = FALSE; tmpbuf.text[tmpbuf.used - 1] = '\n'; /* treat a "%e" as else-if, on the same level */ if (*src == 'e') { indent_DYN(&tmpbuf, level); strncpy_DYN(&tmpbuf, "%", (size_t) 1); strncpy_DYN(&tmpbuf, src, (size_t) 1); src++; params = has_params(src); if (!params && *src != '\0' && *src != '%') { strncpy_DYN(&tmpbuf, "\n", (size_t) 1); indent_DYN(&tmpbuf, level + 1); } } else { indent_DYN(&tmpbuf, level + 1); strncpy_DYN(&tmpbuf, "%", (size_t) 1); strncpy_DYN(&tmpbuf, src, (size_t) 1); if (*src++ == '?') { src = fmt_complex(tterm, capability, src, level + 1); if (*src != '\0' && *src != '%') { strncpy_DYN(&tmpbuf, "\n", (size_t) 1); indent_DYN(&tmpbuf, level + 1); } } else if (level == 1) { if (checking) _nc_warning("%s: %%%c without %%? in %s", _nc_first_name(tterm->term_names), *src, capability); } } continue; } break; case ';': /* "endif" */ if (percent) { percent = FALSE; if (level > 1) { tmpbuf.text[tmpbuf.used - 1] = '\n'; indent_DYN(&tmpbuf, level); strncpy_DYN(&tmpbuf, "%", (size_t) 1); strncpy_DYN(&tmpbuf, src++, (size_t) 1); if (src[0] == '%' && src[1] != '\0' && (strchr("?e;", src[1])) == 0) { tmpbuf.text[tmpbuf.used++] = '\n'; indent_DYN(&tmpbuf, level); } return src; } if (checking) _nc_warning("%s: %%; without %%? in %s", _nc_first_name(tterm->term_names), capability); } break; case 'p': if (percent && params) { tmpbuf.text[tmpbuf.used - 1] = '\n'; indent_DYN(&tmpbuf, level + 1); strncpy_DYN(&tmpbuf, "%", (size_t) 1); } params = FALSE; percent = FALSE; break; case ' ': strncpy_DYN(&tmpbuf, "\\s", (size_t) 2); ++src; continue; default: percent = FALSE; break; } strncpy_DYN(&tmpbuf, src++, (size_t) 1); } return src; } #define SAME_CAP(n,cap) (&tterm->Strings[n] == &cap) #define EXTRA_CAP 20 int fmt_entry(TERMTYPE *tterm, PredFunc pred, int content_only, int suppress_untranslatable, int infodump, int numbers) { PredIdx i, j; char buffer[MAX_TERMINFO_LENGTH + EXTRA_CAP]; char *capability; NCURSES_CONST char *name; int predval, len; PredIdx num_bools = 0; PredIdx num_values = 0; PredIdx num_strings = 0; bool outcount = 0; #define WRAP_CONCAT \ wrap_concat(buffer); \ outcount = TRUE len = 12; /* terminfo file-header */ if (pred == 0) { cur_type = tterm; pred = dump_predicate; } strcpy_DYN(&outbuf, 0); if (content_only) { column = indent; /* FIXME: workaround to prevent empty lines */ } else { strcpy_DYN(&outbuf, tterm->term_names); /* * Colon is legal in terminfo descriptions, but not in termcap. */ if (!infodump) { char *p = outbuf.text; while (*p) { if (*p == ':') { *p = '='; } ++p; } } strcpy_DYN(&outbuf, separator); column = (int) outbuf.used; if (height > 1) force_wrap(); } for_each_boolean(j, tterm) { i = BoolIndirect(j); name = ExtBoolname(tterm, (int) i, bool_names); assert(strlen(name) < sizeof(buffer) - EXTRA_CAP); if (!version_filter(BOOLEAN, i)) continue; else if (isObsolete(outform, name)) continue; predval = pred(BOOLEAN, i); if (predval != FAIL) { _nc_STRCPY(buffer, name, sizeof(buffer)); if (predval <= 0) _nc_STRCAT(buffer, "@", sizeof(buffer)); else if (i + 1 > num_bools) num_bools = i + 1; WRAP_CONCAT; } } if (column != indent && height > 1) force_wrap(); for_each_number(j, tterm) { i = NumIndirect(j); name = ExtNumname(tterm, (int) i, num_names); assert(strlen(name) < sizeof(buffer) - EXTRA_CAP); if (!version_filter(NUMBER, i)) continue; else if (isObsolete(outform, name)) continue; predval = pred(NUMBER, i); if (predval != FAIL) { if (tterm->Numbers[i] < 0) { _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%s@", name); } else { _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%s#%d", name, tterm->Numbers[i]); if (i + 1 > num_values) num_values = i + 1; } WRAP_CONCAT; } } if (column != indent && height > 1) force_wrap(); len += (int) (num_bools + num_values * 2 + strlen(tterm->term_names) + 1); if (len & 1) len++; #undef CUR #define CUR tterm-> if (outform == F_TERMCAP) { if (termcap_reset != ABSENT_STRING) { if (init_3string != ABSENT_STRING && !strcmp(init_3string, termcap_reset)) DISCARD(init_3string); if (reset_2string != ABSENT_STRING && !strcmp(reset_2string, termcap_reset)) DISCARD(reset_2string); } } for_each_string(j, tterm) { i = StrIndirect(j); name = ExtStrname(tterm, (int) i, str_names); assert(strlen(name) < sizeof(buffer) - EXTRA_CAP); capability = tterm->Strings[i]; if (!version_filter(STRING, i)) continue; else if (isObsolete(outform, name)) continue; #if NCURSES_XNAMES /* * Extended names can be longer than 2 characters, but termcap programs * cannot read those (filter them out). */ if (outform == F_TERMCAP && (strlen(name) > 2)) continue; #endif if (outform == F_TERMCAP) { /* * Some older versions of vi want rmir/smir to be defined * for ich/ich1 to work. If they're not defined, force * them to be output as defined and empty. */ if (PRESENT(insert_character) || PRESENT(parm_ich)) { if (SAME_CAP(i, enter_insert_mode) && enter_insert_mode == ABSENT_STRING) { _nc_STRCPY(buffer, "im=", sizeof(buffer)); WRAP_CONCAT; continue; } if (SAME_CAP(i, exit_insert_mode) && exit_insert_mode == ABSENT_STRING) { _nc_STRCPY(buffer, "ei=", sizeof(buffer)); WRAP_CONCAT; continue; } } /* * termcap applications such as screen will be confused if sgr0 * is translated to a string containing rmacs. Filter that out. */ if (PRESENT(exit_attribute_mode)) { if (SAME_CAP(i, exit_attribute_mode)) { char *trimmed_sgr0; char *my_sgr = set_attributes; set_attributes = save_sgr; trimmed_sgr0 = _nc_trim_sgr0(tterm); if (strcmp(capability, trimmed_sgr0)) capability = trimmed_sgr0; else { if (trimmed_sgr0 != exit_attribute_mode) free(trimmed_sgr0); } set_attributes = my_sgr; } } } predval = pred(STRING, i); buffer[0] = '\0'; if (predval != FAIL) { if (capability != ABSENT_STRING && i + 1 > num_strings) num_strings = i + 1; if (!VALID_STRING(capability)) { _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%s@", name); WRAP_CONCAT; } else if (outform == F_TERMCAP || outform == F_TCONVERR) { char *srccap = _nc_tic_expand(capability, TRUE, numbers); int params = (((i < (int) SIZEOF(parametrized)) && (i < STRCOUNT)) ? parametrized[i] : ((*srccap == 'k') ? 0 : has_params(srccap))); char *cv = _nc_infotocap(name, srccap, params); if (cv == 0) { if (outform == F_TCONVERR) { _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%s=!!! %s WILL NOT CONVERT !!!", name, srccap); } else if (suppress_untranslatable) { continue; } else { char *s = srccap, *d = buffer; _nc_SPRINTF(d, _nc_SLIMIT(sizeof(buffer)) "..%s=", name); d += strlen(d); while ((*d = *s++) != 0) { if (*d == ':') { *d++ = '\\'; *d = ':'; } else if (*d == '\\') { *++d = *s++; } d++; } } } else { _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%s=%s", name, cv); } len += (int) strlen(capability) + 1; WRAP_CONCAT; } else { char *src = _nc_tic_expand(capability, outform == F_TERMINFO, numbers); strcpy_DYN(&tmpbuf, 0); strcpy_DYN(&tmpbuf, name); strcpy_DYN(&tmpbuf, "="); if (pretty && (outform == F_TERMINFO || outform == F_VARIABLE)) { fmt_complex(tterm, name, src, 1); } else { strcpy_DYN(&tmpbuf, src); } len += (int) strlen(capability) + 1; wrap_concat(tmpbuf.text); outcount = TRUE; } } /* e.g., trimmed_sgr0 */ if (capability != ABSENT_STRING && capability != CANCELLED_STRING && capability != tterm->Strings[i]) free(capability); } len += (int) (num_strings * 2); /* * This piece of code should be an effective inverse of the functions * postprocess_terminfo() and postprocess_terminfo() in parse_entry.c. * Much more work should be done on this to support dumping termcaps. */ if (tversion == V_HPUX) { if (VALID_STRING(memory_lock)) { _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "meml=%s", memory_lock); WRAP_CONCAT; } if (VALID_STRING(memory_unlock)) { _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "memu=%s", memory_unlock); WRAP_CONCAT; } } else if (tversion == V_AIX) { if (VALID_STRING(acs_chars)) { bool box_ok = TRUE; const char *acstrans = "lqkxjmwuvtn"; const char *cp; char *tp, *sp, boxchars[11]; tp = boxchars; for (cp = acstrans; *cp; cp++) { sp = (strchr) (acs_chars, *cp); if (sp) *tp++ = sp[1]; else { box_ok = FALSE; break; } } tp[0] = '\0'; if (box_ok) { char *tmp = _nc_tic_expand(boxchars, (outform == F_TERMINFO), numbers); _nc_STRCPY(buffer, "box1=", sizeof(buffer)); while (*tmp != '\0') { size_t have = strlen(buffer); size_t next = strlen(tmp); size_t want = have + next + 1; size_t last = next; char save = '\0'; /* * If the expanded string is too long for the buffer, * chop it off and save the location where we chopped it. */ if (want >= sizeof(buffer)) { save = tmp[last]; tmp[last] = '\0'; } _nc_STRCAT(buffer, tmp, sizeof(buffer)); /* * If we chopped the buffer, replace the missing piece and * shift everything to append the remainder. */ if (save != '\0') { next = 0; tmp[last] = save; while ((tmp[next] = tmp[last + next]) != '\0') { ++next; } } else { break; } } WRAP_CONCAT; } } } /* * kludge: trim off trailer to avoid an extra blank line * in infocmp -u output when there are no string differences */ if (outcount) { bool trimmed = FALSE; j = (PredIdx) outbuf.used; if (j >= 2 && outbuf.text[j - 1] == '\t' && outbuf.text[j - 2] == '\n') { outbuf.used -= 2; trimmed = TRUE; } else if (j >= 4 && outbuf.text[j - 1] == ':' && outbuf.text[j - 2] == '\t' && outbuf.text[j - 3] == '\n' && outbuf.text[j - 4] == '\\') { outbuf.used -= 4; trimmed = TRUE; } if (trimmed) { outbuf.text[outbuf.used] = '\0'; column = oldcol; strcpy_DYN(&outbuf, " "); } } #if 0 fprintf(stderr, "num_bools = %d\n", num_bools); fprintf(stderr, "num_values = %d\n", num_values); fprintf(stderr, "num_strings = %d\n", num_strings); fprintf(stderr, "term_names=%s, len=%d, strlen(outbuf)=%d, outbuf=%s\n", tterm->term_names, len, outbuf.used, outbuf.text); #endif /* * Here's where we use infodump to trigger a more stringent length check * for termcap-translation purposes. * Return the length of the raw entry, without tc= expansions, * It gives an idea of which entries are deadly to even *scan past*, * as opposed to *use*. */ return (infodump ? len : (int) termcap_length(outbuf.text)); } static bool kill_string(TERMTYPE *tterm, char *cap) { unsigned n; for (n = 0; n < NUM_STRINGS(tterm); ++n) { if (cap == tterm->Strings[n]) { tterm->Strings[n] = ABSENT_STRING; return TRUE; } } return FALSE; } static char * find_string(TERMTYPE *tterm, char *name) { PredIdx n; for (n = 0; n < NUM_STRINGS(tterm); ++n) { if (version_filter(STRING, n) && !strcmp(name, strnames[n])) { char *cap = tterm->Strings[n]; if (VALID_STRING(cap)) { return cap; } break; } } return ABSENT_STRING; } /* * This is used to remove function-key labels from a termcap entry to * make it smaller. */ static int kill_labels(TERMTYPE *tterm, int target) { int n; int result = 0; char *cap; char name[10]; for (n = 0; n <= 10; ++n) { _nc_SPRINTF(name, _nc_SLIMIT(sizeof(name)) "lf%d", n); if ((cap = find_string(tterm, name)) != ABSENT_STRING && kill_string(tterm, cap)) { target -= (int) (strlen(cap) + 5); ++result; if (target < 0) break; } } return result; } /* * This is used to remove function-key definitions from a termcap entry to * make it smaller. */ static int kill_fkeys(TERMTYPE *tterm, int target) { int n; int result = 0; char *cap; char name[10]; for (n = 60; n >= 0; --n) { _nc_SPRINTF(name, _nc_SLIMIT(sizeof(name)) "kf%d", n); if ((cap = find_string(tterm, name)) != ABSENT_STRING && kill_string(tterm, cap)) { target -= (int) (strlen(cap) + 5); ++result; if (target < 0) break; } } return result; } /* * Check if the given acsc string is a 1-1 mapping, i.e., just-like-vt100. * Also, since this is for termcap, we only care about the line-drawing map. */ #define isLine(c) (strchr("lmkjtuvwqxn", c) != 0) static bool one_one_mapping(const char *mapping) { bool result = TRUE; if (mapping != ABSENT_STRING) { int n = 0; while (mapping[n] != '\0') { if (isLine(mapping[n]) && mapping[n] != mapping[n + 1]) { result = FALSE; break; } n += 2; } } return result; } #define FMT_ENTRY() \ fmt_entry(tterm, pred, \ 0, \ suppress_untranslatable, \ infodump, numbers) #define SHOW_WHY PRINTF static bool purged_acs(TERMTYPE *tterm) { bool result = FALSE; if (VALID_STRING(acs_chars)) { if (!one_one_mapping(acs_chars)) { enter_alt_charset_mode = ABSENT_STRING; exit_alt_charset_mode = ABSENT_STRING; SHOW_WHY("# (rmacs/smacs removed for consistency)\n"); } result = TRUE; } return result; } static void encode_b64(char *target, char *source, unsigned state, int *saved) { /* RFC-4648 */ static const char data[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789" "-_"; int ch = UChar(source[state]); switch (state % 3) { case 0: *target++ = data[ch & 077]; *saved = (ch >> 6) & 3; break; case 1: *target++ = data[((ch << 2) | *saved) & 077]; *saved = (ch >> 4) & 017; break; case 2: *target++ = data[((ch << 4) | *saved) & 077]; *target++ = data[(ch >> 2) & 077]; *saved = 0; break; } *target = '\0'; } /* * Dump a single entry. */ void dump_entry(TERMTYPE *tterm, int suppress_untranslatable, int limited, int numbers, PredFunc pred) { TERMTYPE save_tterm; int len, critlen; const char *legend; bool infodump; if (quickdump) { char bigbuf[65536]; unsigned n; unsigned offset = 0; separator = ""; trailer = "\n"; indent = 0; if (_nc_write_object(tterm, bigbuf, &offset, sizeof(bigbuf)) == OK) { char numbuf[80]; if (quickdump & 1) { if (outbuf.used) wrap_concat("\n"); wrap_concat("hex:"); for (n = 0; n < offset; ++n) { sprintf(numbuf, "%02X", UChar(bigbuf[n])); wrap_concat(numbuf); } } if (quickdump & 2) { int value = 0; if (outbuf.used) wrap_concat("\n"); wrap_concat("b64:"); for (n = 0; n < offset; ++n) { encode_b64(numbuf, bigbuf, n, &value); wrap_concat(numbuf); } switch (n % 3) { case 0: break; case 1: wrap_concat("==="); break; case 2: wrap_concat("=="); break; } } } return; } if (outform == F_TERMCAP || outform == F_TCONVERR) { critlen = MAX_TERMCAP_LENGTH; legend = "older termcap"; infodump = FALSE; set_obsolete_termcaps(tterm); } else { critlen = MAX_TERMINFO_LENGTH; legend = "terminfo"; infodump = TRUE; } save_sgr = set_attributes; if ((FMT_ENTRY() > critlen) && limited) { save_tterm = *tterm; if (!suppress_untranslatable) { SHOW_WHY("# (untranslatable capabilities removed to fit entry within %d bytes)\n", critlen); suppress_untranslatable = TRUE; } if (FMT_ENTRY() > critlen) { /* * We pick on sgr because it's a nice long string capability that * is really just an optimization hack. Another good candidate is * acsc since it is both long and unused by BSD termcap. */ bool changed = FALSE; #if NCURSES_XNAMES /* * Extended names are most likely function-key definitions. Drop * those first. */ unsigned n; for (n = STRCOUNT; n < NUM_STRINGS(tterm); n++) { const char *name = ExtStrname(tterm, (int) n, strnames); if (VALID_STRING(tterm->Strings[n])) { set_attributes = ABSENT_STRING; /* we remove long names anyway - only report the short */ if (strlen(name) <= 2) { SHOW_WHY("# (%s removed to fit entry within %d bytes)\n", name, critlen); } changed = TRUE; if (FMT_ENTRY() <= critlen) break; } } #endif if (VALID_STRING(set_attributes)) { set_attributes = ABSENT_STRING; SHOW_WHY("# (sgr removed to fit entry within %d bytes)\n", critlen); changed = TRUE; } if (!changed || (FMT_ENTRY() > critlen)) { if (purged_acs(tterm)) { acs_chars = ABSENT_STRING; SHOW_WHY("# (acsc removed to fit entry within %d bytes)\n", critlen); changed = TRUE; } } if (!changed || (FMT_ENTRY() > critlen)) { int oldversion = tversion; tversion = V_BSD; SHOW_WHY("# (terminfo-only capabilities suppressed to fit entry within %d bytes)\n", critlen); len = FMT_ENTRY(); if (len > critlen && kill_labels(tterm, len - critlen)) { SHOW_WHY("# (some labels capabilities suppressed to fit entry within %d bytes)\n", critlen); len = FMT_ENTRY(); } if (len > critlen && kill_fkeys(tterm, len - critlen)) { SHOW_WHY("# (some function-key capabilities suppressed to fit entry within %d bytes)\n", critlen); len = FMT_ENTRY(); } if (len > critlen) { (void) fprintf(stderr, "warning: %s entry is %d bytes long\n", _nc_first_name(tterm->term_names), len); SHOW_WHY("# WARNING: this entry, %d bytes long, may core-dump %s libraries!\n", len, legend); } tversion = oldversion; } set_attributes = save_sgr; *tterm = save_tterm; } } else if (!version_filter(STRING, STR_IDX(acs_chars))) { save_tterm = *tterm; if (purged_acs(tterm)) { (void) FMT_ENTRY(); } *tterm = save_tterm; } } void dump_uses(const char *name, bool infodump) /* dump "use=" clauses in the appropriate format */ { char buffer[MAX_TERMINFO_LENGTH]; if (outform == F_TERMCAP || outform == F_TCONVERR) trim_trailing(); _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%s%s", infodump ? "use=" : "tc=", name); wrap_concat(buffer); } int show_entry(void) { /* * Trim any remaining whitespace. */ if (outbuf.used != 0) { bool infodump = (outform != F_TERMCAP && outform != F_TCONVERR); char delim = (char) (infodump ? ',' : ':'); int j; for (j = (int) outbuf.used - 1; j > 0; --j) { char ch = outbuf.text[j]; if (ch == '\n') { ; } else if (isspace(UChar(ch))) { outbuf.used = (size_t) j; } else if (!infodump && ch == '\\') { outbuf.used = (size_t) j; } else if (ch == delim && (j == 0 || outbuf.text[j - 1] != '\\')) { outbuf.used = (size_t) (j + 1); } else { break; } } outbuf.text[outbuf.used] = '\0'; } if (outbuf.text != 0) { (void) fputs(outbuf.text, stdout); putchar('\n'); } return (int) outbuf.used; } void compare_entry(PredHook hook, TERMTYPE *tp GCC_UNUSED, bool quiet) /* compare two entries */ { PredIdx i, j; NCURSES_CONST char *name; if (!quiet) fputs(" comparing booleans.\n", stdout); for_each_boolean(j, tp) { i = BoolIndirect(j); name = ExtBoolname(tp, (int) i, bool_names); if (isObsolete(outform, name)) continue; (*hook) (CMP_BOOLEAN, i, name); } if (!quiet) fputs(" comparing numbers.\n", stdout); for_each_number(j, tp) { i = NumIndirect(j); name = ExtNumname(tp, (int) i, num_names); if (isObsolete(outform, name)) continue; (*hook) (CMP_NUMBER, i, name); } if (!quiet) fputs(" comparing strings.\n", stdout); for_each_string(j, tp) { i = StrIndirect(j); name = ExtStrname(tp, (int) i, str_names); if (isObsolete(outform, name)) continue; (*hook) (CMP_STRING, i, name); } /* (void) fputs(" comparing use entries.\n", stdout); */ (*hook) (CMP_USE, 0, "use"); } #define NOTSET(s) ((s) == 0) /* * This bit of legerdemain turns all the terminfo variable names into * references to locations in the arrays Booleans, Numbers, and Strings --- * precisely what's needed. */ #undef CUR #define CUR tp-> static void set_obsolete_termcaps(TERMTYPE *tp) { #include "capdefaults.c" } /* * Convert an alternate-character-set string to canonical form: sorted and * unique. */ void repair_acsc(TERMTYPE *tp) { if (VALID_STRING(acs_chars)) { size_t n, m; char mapped[256]; char extra = 0; unsigned source; unsigned target; bool fix_needed = FALSE; for (n = 0, source = 0; acs_chars[n] != 0; n++) { target = UChar(acs_chars[n]); if (source >= target) { fix_needed = TRUE; break; } source = target; if (acs_chars[n + 1]) n++; } if (fix_needed) { memset(mapped, 0, sizeof(mapped)); for (n = 0; acs_chars[n] != 0; n++) { source = UChar(acs_chars[n]); if ((target = (unsigned char) acs_chars[n + 1]) != 0) { mapped[source] = (char) target; n++; } else { extra = (char) source; } } for (n = m = 0; n < sizeof(mapped); n++) { if (mapped[n]) { acs_chars[m++] = (char) n; acs_chars[m++] = mapped[n]; } } if (extra) acs_chars[m++] = extra; /* garbage in, garbage out */ acs_chars[m] = 0; } } } ncurses-6.0-20160213/progs/toe.c0000644000175100001440000004152512253200414014541 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * toe.c --- table of entries report generator */ #include #include #if USE_HASHED_DB #include #endif MODULE_ID("$Id: toe.c,v 1.74 2013/12/15 01:08:28 tom Exp $") #define isDotname(name) (!strcmp(name, ".") || !strcmp(name, "..")) typedef struct { int db_index; unsigned long checksum; char *term_name; char *description; } TERMDATA; const char *_nc_progname; static TERMDATA *ptr_termdata; /* array of terminal data */ static size_t use_termdata; /* actual usage in ptr_termdata[] */ static size_t len_termdata; /* allocated size of ptr_termdata[] */ #if NO_LEAKS #undef ExitProgram static void ExitProgram(int code) GCC_NORETURN; static void ExitProgram(int code) { _nc_free_entries(_nc_head); _nc_free_tic(code); } #endif static void failed(const char *) GCC_NORETURN; static void failed(const char *msg) { perror(msg); ExitProgram(EXIT_FAILURE); } static char * strmalloc(const char *value) { char *result = strdup(value); if (result == 0) { failed("strmalloc"); } return result; } static TERMDATA * new_termdata(void) { size_t want = use_termdata + 1; if (want >= len_termdata) { len_termdata = (2 * want) + 10; ptr_termdata = typeRealloc(TERMDATA, len_termdata, ptr_termdata); if (ptr_termdata == 0) failed("ptr_termdata"); } return ptr_termdata + use_termdata++; } static int compare_termdata(const void *a, const void *b) { const TERMDATA *p = (const TERMDATA *) a; const TERMDATA *q = (const TERMDATA *) b; int result = strcmp(p->term_name, q->term_name); if (result == 0) { result = (p->db_index - q->db_index); } return result; } /* * Sort the array of TERMDATA and print it. If more than one database is being * reported, add a column to show which database has a given entry. */ static void show_termdata(int eargc, char **eargv) { int j, k; size_t n; if (use_termdata) { if (eargc > 1) { for (j = 0; j < eargc; ++j) { for (k = 0; k <= j; ++k) { printf("--"); } printf("> "); printf("%s\n", eargv[j]); } } if (use_termdata > 1) qsort(ptr_termdata, use_termdata, sizeof(TERMDATA), compare_termdata); for (n = 0; n < use_termdata; ++n) { /* * If there is more than one database, show how they differ. */ if (eargc > 1) { unsigned long check = 0; k = 0; for (;;) { for (; k < ptr_termdata[n].db_index; ++k) { printf("--"); } /* * If this is the first entry, or its checksum differs * from the first entry's checksum, print "*". Otherwise * it looks enough like a duplicate to print "+". */ printf("%c-", ((check == 0 || (check != ptr_termdata[n].checksum)) ? '*' : '+')); check = ptr_termdata[n].checksum; ++k; if ((n + 1) >= use_termdata || strcmp(ptr_termdata[n].term_name, ptr_termdata[n + 1].term_name)) { break; } ++n; } for (; k < eargc; ++k) { printf("--"); } printf(":\t"); } (void) printf("%-10s\t%s\n", ptr_termdata[n].term_name, ptr_termdata[n].description); } } } static void free_termdata(void) { if (ptr_termdata != 0) { while (use_termdata != 0) { --use_termdata; free(ptr_termdata[use_termdata].term_name); free(ptr_termdata[use_termdata].description); } free(ptr_termdata); ptr_termdata = 0; } use_termdata = 0; len_termdata = 0; } static char ** allocArgv(size_t count) { char **result = typeCalloc(char *, count + 1); if (result == 0) failed("realloc eargv"); assert(result != 0); return result; } static void freeArgv(char **argv) { if (argv) { int count = 0; while (argv[count]) { free(argv[count++]); } free(argv); } } #if USE_HASHED_DB static bool make_db_name(char *dst, const char *src, unsigned limit) { static const char suffix[] = DBM_SUFFIX; bool result = FALSE; size_t lens = sizeof(suffix) - 1; size_t size = strlen(src); size_t need = lens + size; if (need <= limit) { if (size >= lens && !strcmp(src + size - lens, suffix)) { _nc_STRCPY(dst, src, PATH_MAX); } else { _nc_SPRINTF(dst, _nc_SLIMIT(PATH_MAX) "%s%s", src, suffix); } result = TRUE; } return result; } #endif typedef void (DescHook) (int /* db_index */ , int /* db_limit */ , const char * /* term_name */ , TERMTYPE * /* term */ ); static const char * term_description(TERMTYPE *tp) { const char *desc; if (tp->term_names == 0 || (desc = strrchr(tp->term_names, '|')) == 0 || (*++desc == '\0')) { desc = "(No description)"; } return desc; } /* display a description for the type */ static void deschook(int db_index, int db_limit, const char *term_name, TERMTYPE *tp) { (void) db_index; (void) db_limit; (void) printf("%-10s\t%s\n", term_name, term_description(tp)); } static unsigned long string_sum(const char *value) { unsigned long result = 0; if ((intptr_t) value == (intptr_t) (-1)) { result = ~result; } else if (value) { while (*value) { result += UChar(*value); ++value; } } return result; } static unsigned long checksum_of(TERMTYPE *tp) { unsigned long result = string_sum(tp->term_names); unsigned i; for (i = 0; i < NUM_BOOLEANS(tp); i++) { result += (unsigned long) (tp->Booleans[i]); } for (i = 0; i < NUM_NUMBERS(tp); i++) { result += (unsigned long) (tp->Numbers[i]); } for (i = 0; i < NUM_STRINGS(tp); i++) { result += string_sum(tp->Strings[i]); } return result; } /* collect data, to sort before display */ static void sorthook(int db_index, int db_limit, const char *term_name, TERMTYPE *tp) { TERMDATA *data = new_termdata(); data->db_index = db_index; data->checksum = ((db_limit > 1) ? checksum_of(tp) : 0); data->term_name = strmalloc(term_name); data->description = strmalloc(term_description(tp)); } #if NCURSES_USE_TERMCAP static void show_termcap(int db_index, int db_limit, char *buffer, DescHook hook) { TERMTYPE data; char *next = strchr(buffer, ':'); char *last; char *list = buffer; if (next) *next = '\0'; last = strrchr(buffer, '|'); if (last) ++last; memset(&data, 0, sizeof(data)); data.term_names = strmalloc(buffer); while ((next = strtok(list, "|")) != 0) { if (next != last) hook(db_index, db_limit, next, &data); list = 0; } free(data.term_names); } #endif #if NCURSES_USE_DATABASE static char * copy_entryname(DIRENT * src) { size_t len = NAMLEN(src); char *result = malloc(len + 1); if (result == 0) failed("copy entryname"); memcpy(result, src->d_name, len); result[len] = '\0'; return result; } #endif static int typelist(int eargc, char *eargv[], int verbosity, DescHook hook) /* apply a function to each entry in given terminfo directories */ { int i; for (i = 0; i < eargc; i++) { #if NCURSES_USE_DATABASE if (_nc_is_dir_path(eargv[i])) { char *cwd_buf = 0; DIR *termdir; DIRENT *subdir; if ((termdir = opendir(eargv[i])) == 0) { (void) fflush(stdout); (void) fprintf(stderr, "%s: can't open terminfo directory %s\n", _nc_progname, eargv[i]); continue; } if (verbosity) (void) printf("#\n#%s:\n#\n", eargv[i]); while ((subdir = readdir(termdir)) != 0) { size_t cwd_len; char *name_1; DIR *entrydir; DIRENT *entry; name_1 = copy_entryname(subdir); if (isDotname(name_1)) { free(name_1); continue; } cwd_len = NAMLEN(subdir) + strlen(eargv[i]) + 3; cwd_buf = typeRealloc(char, cwd_len, cwd_buf); if (cwd_buf == 0) failed("realloc cwd_buf"); assert(cwd_buf != 0); _nc_SPRINTF(cwd_buf, _nc_SLIMIT(cwd_len) "%s/%s/", eargv[i], name_1); free(name_1); if (chdir(cwd_buf) != 0) continue; entrydir = opendir("."); if (entrydir == 0) { perror(cwd_buf); continue; } while ((entry = readdir(entrydir)) != 0) { char *name_2; TERMTYPE lterm; char *cn; int status; name_2 = copy_entryname(entry); if (isDotname(name_2) || !_nc_is_file_path(name_2)) { free(name_2); continue; } status = _nc_read_file_entry(name_2, <erm); if (status <= 0) { (void) fflush(stdout); (void) fprintf(stderr, "%s: couldn't open terminfo file %s.\n", _nc_progname, name_2); free(cwd_buf); free(name_2); closedir(entrydir); closedir(termdir); return (EXIT_FAILURE); } /* only visit things once, by primary name */ cn = _nc_first_name(lterm.term_names); if (!strcmp(cn, name_2)) { /* apply the selected hook function */ hook(i, eargc, cn, <erm); } _nc_free_termtype(<erm); free(name_2); } closedir(entrydir); } closedir(termdir); if (cwd_buf != 0) free(cwd_buf); continue; } #if USE_HASHED_DB else { DB *capdbp; char filename[PATH_MAX]; if (verbosity) (void) printf("#\n#%s:\n#\n", eargv[i]); if (make_db_name(filename, eargv[i], sizeof(filename))) { if ((capdbp = _nc_db_open(filename, FALSE)) != 0) { DBT key, data; int code; code = _nc_db_first(capdbp, &key, &data); while (code == 0) { TERMTYPE lterm; int used; char *have; char *cn; if (_nc_db_have_data(&key, &data, &have, &used)) { if (_nc_read_termtype(<erm, have, used) > 0) { /* only visit things once, by primary name */ cn = _nc_first_name(lterm.term_names); /* apply the selected hook function */ hook(i, eargc, cn, <erm); _nc_free_termtype(<erm); } } code = _nc_db_next(capdbp, &key, &data); } _nc_db_close(capdbp); continue; } } } #endif #endif #if NCURSES_USE_TERMCAP #if HAVE_BSD_CGETENT { CGETENT_CONST char *db_array[2]; char *buffer = 0; if (verbosity) (void) printf("#\n#%s:\n#\n", eargv[i]); db_array[0] = eargv[i]; db_array[1] = 0; if (cgetfirst(&buffer, db_array) > 0) { show_termcap(i, eargc, buffer, hook); free(buffer); while (cgetnext(&buffer, db_array) > 0) { show_termcap(i, eargc, buffer, hook); free(buffer); } cgetclose(); continue; } } #else /* scan termcap text-file only */ if (_nc_is_file_path(eargv[i])) { char buffer[2048]; FILE *fp; if (verbosity) (void) printf("#\n#%s:\n#\n", eargv[i]); if ((fp = fopen(eargv[i], "r")) != 0) { while (fgets(buffer, sizeof(buffer), fp) != 0) { if (*buffer == '#') continue; if (isspace(*buffer)) continue; show_termcap(i, eargc, buffer, hook); } fclose(fp); } } #endif #endif } if (hook == sorthook) { show_termdata(eargc, eargv); free_termdata(); } return (EXIT_SUCCESS); } static void usage(void) { (void) fprintf(stderr, "usage: %s [-ahsuUV] [-v n] [file...]\n", _nc_progname); ExitProgram(EXIT_FAILURE); } int main(int argc, char *argv[]) { bool all_dirs = FALSE; bool direct_dependencies = FALSE; bool invert_dependencies = FALSE; bool header = FALSE; char *report_file = 0; unsigned i; int code; int this_opt, last_opt = '?'; unsigned v_opt = 0; DescHook *hook = deschook; _nc_progname = _nc_rootname(argv[0]); while ((this_opt = getopt(argc, argv, "0123456789ahsu:vU:V")) != -1) { /* handle optional parameter */ if (isdigit(this_opt)) { switch (last_opt) { case 'v': v_opt = (unsigned) (this_opt - '0'); break; default: if (isdigit(last_opt)) v_opt *= 10; else v_opt = 0; v_opt += (unsigned) (this_opt - '0'); last_opt = this_opt; } continue; } switch (this_opt) { case 'a': all_dirs = TRUE; break; case 'h': header = TRUE; break; case 's': hook = sorthook; break; case 'u': direct_dependencies = TRUE; report_file = optarg; break; case 'v': v_opt = 1; break; case 'U': invert_dependencies = TRUE; report_file = optarg; break; case 'V': puts(curses_version()); ExitProgram(EXIT_SUCCESS); default: usage(); } } set_trace_level(v_opt); if (report_file != 0) { if (freopen(report_file, "r", stdin) == 0) { (void) fflush(stdout); fprintf(stderr, "%s: can't open %s\n", _nc_progname, report_file); ExitProgram(EXIT_FAILURE); } /* parse entries out of the source file */ _nc_set_source(report_file); _nc_read_entry_source(stdin, 0, FALSE, FALSE, NULLHOOK); } /* maybe we want a direct-dependency listing? */ if (direct_dependencies) { ENTRY *qp; for_entry_list(qp) { if (qp->nuses) { unsigned j; (void) printf("%s:", _nc_first_name(qp->tterm.term_names)); for (j = 0; j < qp->nuses; j++) (void) printf(" %s", qp->uses[j].name); putchar('\n'); } } ExitProgram(EXIT_SUCCESS); } /* maybe we want a reverse-dependency listing? */ if (invert_dependencies) { ENTRY *qp, *rp; int matchcount; for_entry_list(qp) { matchcount = 0; for_entry_list(rp) { if (rp->nuses == 0) continue; for (i = 0; i < rp->nuses; i++) if (_nc_name_match(qp->tterm.term_names, rp->uses[i].name, "|")) { if (matchcount++ == 0) (void) printf("%s:", _nc_first_name(qp->tterm.term_names)); (void) printf(" %s", _nc_first_name(rp->tterm.term_names)); } } if (matchcount) putchar('\n'); } ExitProgram(EXIT_SUCCESS); } /* * If we get this far, user wants a simple terminal type listing. */ if (optind < argc) { code = typelist(argc - optind, argv + optind, header, hook); } else if (all_dirs) { DBDIRS state; int offset; int pass; const char *path; char **eargv = 0; code = EXIT_FAILURE; for (pass = 0; pass < 2; ++pass) { size_t count = 0; _nc_first_db(&state, &offset); while ((path = _nc_next_db(&state, &offset)) != 0) { if (pass) { eargv[count] = strmalloc(path); } ++count; } if (!pass) { eargv = allocArgv(count); if (eargv == 0) failed("eargv"); } else { code = typelist((int) count, eargv, header, hook); freeArgv(eargv); } } } else { DBDIRS state; int offset; const char *path; char **eargv = allocArgv((size_t) 2); size_t count = 0; if (eargv == 0) failed("eargv"); _nc_first_db(&state, &offset); if ((path = _nc_next_db(&state, &offset)) != 0) { eargv[count++] = strmalloc(path); } code = typelist((int) count, eargv, header, hook); freeArgv(eargv); } _nc_last_db(); ExitProgram(code); } ncurses-6.0-20160213/progs/tic.c0000644000175100001440000017175512642026525014555 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996 on * ****************************************************************************/ /* * tic.c --- Main program for terminfo compiler * by Eric S. Raymond * and Thomas E Dickey * */ #include #include #include #include #include #include #include MODULE_ID("$Id: tic.c,v 1.221 2016/01/02 20:04:37 tom Exp $") #define STDIN_NAME "" const char *_nc_progname = "tic"; static FILE *log_fp; static FILE *tmp_fp; static bool capdump = FALSE; /* running as infotocap? */ static bool infodump = FALSE; /* running as captoinfo? */ static bool showsummary = FALSE; static char **namelst = 0; static const char *to_remove; static void (*save_check_termtype) (TERMTYPE *, bool); static void check_termtype(TERMTYPE *tt, bool); static const char usage_string[] = "\ [-e names] \ [-o dir] \ [-R name] \ [-v[n]] \ [-V] \ [-w[n]] \ [-\ 1\ a\ C\ D\ c\ f\ G\ g\ I\ K\ L\ N\ r\ s\ T\ t\ U\ x\ ] \ source-file\n"; #if NO_LEAKS static void free_namelist(char **src) { if (src != 0) { int n; for (n = 0; src[n] != 0; ++n) free(src[n]); free(src); } } #endif static void cleanup(void) { int rc; #if NO_LEAKS free_namelist(namelst); #endif if (tmp_fp != 0) fclose(tmp_fp); if (to_remove != 0) { #if HAVE_REMOVE rc = remove(to_remove); #else rc = unlink(to_remove); #endif if (rc != 0) perror(to_remove); } } static void failed(const char *msg) { perror(msg); ExitProgram(EXIT_FAILURE); } static void usage(void) { #define DATA(s) s "\n" static const char options_string[] = { DATA("Options:") DATA(" -0 format translation output all capabilities on one line") DATA(" -1 format translation output one capability per line") #if NCURSES_XNAMES DATA(" -a retain commented-out capabilities (sets -x also)") #endif DATA(" -C translate entries to termcap source form") DATA(" -D print list of tic's database locations (first must be writable)") DATA(" -c check only, validate input without compiling or translating") DATA(" -e translate/compile only entries named by comma-separated list") DATA(" -f format complex strings for readability") DATA(" -G format %{number} to %'char'") DATA(" -g format %'char' to %{number}") DATA(" -I translate entries to terminfo source form") DATA(" -K translate entries to termcap source form with BSD syntax") DATA(" -L translate entries to full terminfo source form") DATA(" -N disable smart defaults for source translation") DATA(" -o set output directory for compiled entry writes") DATA(" -Q[n] dump compiled description") DATA(" -q brief listing, removes headers") DATA(" -R restrict translation to given terminfo/termcap version") DATA(" -r force resolution of all use entries in source translation") DATA(" -s print summary statistics") DATA(" -T remove size-restrictions on compiled description") #if NCURSES_XNAMES DATA(" -t suppress commented-out capabilities") #endif DATA(" -U suppress post-processing of entries") DATA(" -V print version") DATA(" -v[n] set verbosity level") DATA(" -w[n] set format width for translation output") #if NCURSES_XNAMES DATA(" -x treat unknown capabilities as user-defined") #endif DATA("") DATA("Parameters:") DATA(" file to translate or compile") }; #undef DATA fprintf(stderr, "Usage: %s %s\n", _nc_progname, usage_string); fputs(options_string, stderr); ExitProgram(EXIT_FAILURE); } #define L_BRACE '{' #define R_BRACE '}' #define S_QUOTE '\'' static void write_it(ENTRY * ep) { unsigned n; int ch; char *s, *d, *t; char result[MAX_ENTRY_SIZE]; /* * Look for strings that contain %{number}, convert them to %'char', * which is shorter and runs a little faster. */ for (n = 0; n < STRCOUNT; n++) { s = ep->tterm.Strings[n]; if (VALID_STRING(s) && strchr(s, L_BRACE) != 0) { d = result; t = s; while ((ch = *t++) != 0) { *d++ = (char) ch; if (ch == '\\') { *d++ = *t++; } else if ((ch == '%') && (*t == L_BRACE)) { char *v = 0; long value = strtol(t + 1, &v, 0); if (v != 0 && *v == R_BRACE && value > 0 && value != '\\' /* FIXME */ && value < 127 && isprint((int) value)) { *d++ = S_QUOTE; *d++ = (char) value; *d++ = S_QUOTE; t = (v + 1); } } } *d = 0; if (strlen(result) < strlen(s)) _nc_STRCPY(s, result, strlen(s) + 1); } } _nc_set_type(_nc_first_name(ep->tterm.term_names)); _nc_curr_line = (int) ep->startline; _nc_write_entry(&ep->tterm); } static bool immedhook(ENTRY * ep GCC_UNUSED) /* write out entries with no use capabilities immediately to save storage */ { #if !HAVE_BIG_CORE /* * This is strictly a core-economy kluge. The really clean way to handle * compilation is to slurp the whole file into core and then do all the * name-collision checks and entry writes in one swell foop. But the * terminfo master file is large enough that some core-poor systems swap * like crazy when you compile it this way...there have been reports of * this process taking *three hours*, rather than the twenty seconds or * less typical on my development box. * * So. This hook *immediately* writes out the referenced entry if it * has no use capabilities. The compiler main loop refrains from * adding the entry to the in-core list when this hook fires. If some * other entry later needs to reference an entry that got written * immediately, that's OK; the resolution code will fetch it off disk * when it can't find it in core. * * Name collisions will still be detected, just not as cleanly. The * write_entry() code complains before overwriting an entry that * postdates the time of tic's first call to write_entry(). Thus * it will complain about overwriting entries newly made during the * tic run, but not about overwriting ones that predate it. * * The reason this is a hook, and not in line with the rest of the * compiler code, is that the support for termcap fallback cannot assume * it has anywhere to spool out these entries! * * The _nc_set_type() call here requires a compensating one in * _nc_parse_entry(). * * If you define HAVE_BIG_CORE, you'll disable this kluge. This will * make tic a bit faster (because the resolution code won't have to do * disk I/O nearly as often). */ if (ep->nuses == 0) { int oldline = _nc_curr_line; write_it(ep); _nc_curr_line = oldline; free(ep->tterm.str_table); return (TRUE); } #endif /* HAVE_BIG_CORE */ return (FALSE); } static void put_translate(int c) /* emit a comment char, translating terminfo names to termcap names */ { static bool in_name = FALSE; static size_t have, used; static char *namebuf, *suffix; if (in_name) { if (used + 1 >= have) { have += 132; if ((namebuf = typeRealloc(char, have, namebuf)) == 0) failed("put_translate namebuf"); if ((suffix = typeRealloc(char, have, suffix)) == 0) failed("put_translate suffix"); } if (c == '\n' || c == '@') { namebuf[used++] = '\0'; (void) putchar('<'); (void) fputs(namebuf, stdout); putchar(c); in_name = FALSE; } else if (c != '>') { namebuf[used++] = (char) c; } else { /* ah! candidate name! */ char *up; NCURSES_CONST char *tp; namebuf[used++] = '\0'; in_name = FALSE; suffix[0] = '\0'; if ((up = strchr(namebuf, '#')) != 0 || (up = strchr(namebuf, '=')) != 0 || ((up = strchr(namebuf, '@')) != 0 && up[1] == '>')) { _nc_STRCPY(suffix, up, have); *up = '\0'; } if ((tp = nametrans(namebuf)) != 0) { (void) putchar(':'); (void) fputs(tp, stdout); (void) fputs(suffix, stdout); (void) putchar(':'); } else { /* couldn't find a translation, just dump the name */ (void) putchar('<'); (void) fputs(namebuf, stdout); (void) fputs(suffix, stdout); (void) putchar('>'); } } } else { used = 0; if (c == '<') { in_name = TRUE; } else { putchar(c); } } } /* Returns a string, stripped of leading/trailing whitespace */ static char * stripped(char *src) { char *dst = 0; while (isspace(UChar(*src))) src++; if (*src != '\0') { size_t len; if ((dst = strdup(src)) == NULL) { failed("strdup"); } else { len = strlen(dst); while (--len != 0 && isspace(UChar(dst[len]))) dst[len] = '\0'; } } return dst; } static FILE * open_tempfile(char *filename) { FILE *result = 0; _nc_STRCPY(filename, "/tmp/XXXXXX", PATH_MAX); #if HAVE_MKSTEMP { int oldmask = (int) umask(077); int fd = mkstemp(filename); if (fd >= 0) result = fdopen(fd, "w"); umask((mode_t) oldmask); } #else if (tmpnam(filename) != 0) result = fopen(filename, "w"); #endif return result; } static FILE * copy_input(FILE *source, const char *filename, char *alt_file) { char my_altfile[PATH_MAX]; FILE *result = 0; FILE *target = 0; int ch; if (alt_file == 0) alt_file = my_altfile; if (source == 0) { failed("copy_input (source)"); } else if ((target = open_tempfile(alt_file)) == 0) { failed("copy_input (target)"); } else { clearerr(source); for (;;) { ch = fgetc(source); if (feof(source)) { break; } else if (ferror(source)) { failed(filename); } else if (ch == 0) { /* don't loop in case someone wants to convert /dev/zero */ fprintf(stderr, "%s: %s is not a text-file\n", _nc_progname, filename); ExitProgram(EXIT_FAILURE); } fputc(ch, target); } fclose(source); /* * rewind() does not force the target file's data to disk (not does * fflush()...). So open a second stream on the data and then close * the one that we were writing on before starting to read from the * second stream. */ result = fopen(alt_file, "r+"); fclose(target); to_remove = strdup(alt_file); } return result; } static FILE * open_input(const char *filename, char *alt_file) { FILE *fp; struct stat sb; int mode; if (!strcmp(filename, "-")) { fp = copy_input(stdin, STDIN_NAME, alt_file); } else if (stat(filename, &sb) < 0) { fprintf(stderr, "%s: %s %s\n", _nc_progname, filename, strerror(errno)); ExitProgram(EXIT_FAILURE); } else if ((mode = (sb.st_mode & S_IFMT)) == S_IFDIR || (mode != S_IFREG && mode != S_IFCHR && mode != S_IFIFO)) { fprintf(stderr, "%s: %s is not a file\n", _nc_progname, filename); ExitProgram(EXIT_FAILURE); } else { fp = fopen(filename, "r"); if (fp == 0) { fprintf(stderr, "%s: Can't open %s\n", _nc_progname, filename); ExitProgram(EXIT_FAILURE); } if (mode != S_IFREG) { if (alt_file != 0) { FILE *fp2 = copy_input(fp, filename, alt_file); fp = fp2; } else { fprintf(stderr, "%s: %s is not a file\n", _nc_progname, filename); ExitProgram(EXIT_FAILURE); } } } return fp; } /* Parse the "-e" option-value into a list of names */ static char ** make_namelist(char *src) { char **dst = 0; char *s, *base; unsigned pass, n, nn; char buffer[BUFSIZ]; if (src == 0) { /* EMPTY */ ; } else if (strchr(src, '/') != 0) { /* a filename */ FILE *fp = open_input(src, (char *) 0); for (pass = 1; pass <= 2; pass++) { nn = 0; while (fgets(buffer, sizeof(buffer), fp) != 0) { if ((s = stripped(buffer)) != 0) { if (dst != 0) dst[nn] = s; else free(s); nn++; } } if (pass == 1) { if ((dst = typeCalloc(char *, nn + 1)) == 0) failed("make_namelist"); rewind(fp); } } fclose(fp); } else { /* literal list of names */ for (pass = 1; pass <= 2; pass++) { for (n = nn = 0, base = src;; n++) { int mark = src[n]; if (mark == ',' || mark == '\0') { if (pass == 1) { nn++; } else { src[n] = '\0'; if ((s = stripped(base)) != 0) dst[nn++] = s; base = &src[n + 1]; } } if (mark == '\0') break; } if (pass == 1) { if ((dst = typeCalloc(char *, nn + 1)) == 0) failed("make_namelist"); } } } if (showsummary && (dst != 0)) { fprintf(log_fp, "Entries that will be compiled:\n"); for (n = 0; dst[n] != 0; n++) fprintf(log_fp, "%u:%s\n", n + 1, dst[n]); } return dst; } static bool matches(char **needle, const char *haystack) /* does entry in needle list match |-separated field in haystack? */ { bool code = FALSE; size_t n; if (needle != 0) { for (n = 0; needle[n] != 0; n++) { if (_nc_name_match(haystack, needle[n], "|")) { code = TRUE; break; } } } else code = TRUE; return (code); } static char * valid_db_path(const char *nominal) { struct stat sb; #if USE_HASHED_DB char suffix[] = DBM_SUFFIX; size_t need = strlen(nominal) + sizeof(suffix); char *result = malloc(need); if (result == 0) failed("valid_db_path"); _nc_STRCPY(result, nominal, need); if (strcmp(result + need - sizeof(suffix), suffix)) { _nc_STRCAT(result, suffix, need); } #else char *result = strdup(nominal); #endif DEBUG(1, ("** stat(%s)", result)); if (stat(result, &sb) >= 0) { #if USE_HASHED_DB if (!S_ISREG(sb.st_mode) || access(result, R_OK | W_OK) != 0) { DEBUG(1, ("...not a writable file")); free(result); result = 0; } #else if (!S_ISDIR(sb.st_mode) || access(result, R_OK | W_OK | X_OK) != 0) { DEBUG(1, ("...not a writable directory")); free(result); result = 0; } #endif } else { /* check if parent is directory and is writable */ unsigned leaf = _nc_pathlast(result); DEBUG(1, ("...not found")); if (leaf) { char save = result[leaf]; result[leaf] = 0; if (stat(result, &sb) >= 0 && S_ISDIR(sb.st_mode) && access(result, R_OK | W_OK | X_OK) == 0) { result[leaf] = save; } else { DEBUG(1, ("...parent directory %s is not writable", result)); free(result); result = 0; } } else { DEBUG(1, ("... no parent directory")); free(result); result = 0; } } return result; } /* * Show the databases to which tic could write. The location to which it * writes is always the first one. If none are writable, print an error * message. */ static void show_databases(const char *outdir) { bool specific = (outdir != 0) || getenv("TERMINFO") != 0; char *result; const char *tried = 0; if (outdir == 0) { outdir = _nc_tic_dir(0); } if ((result = valid_db_path(outdir)) != 0) { printf("%s\n", result); free(result); } else { tried = outdir; } if ((outdir = _nc_home_terminfo())) { if ((result = valid_db_path(outdir)) != 0) { printf("%s\n", result); free(result); } else if (!specific) { tried = outdir; } } /* * If we can write in neither location, give an error message. */ if (tried) { fflush(stdout); fprintf(stderr, "%s: %s (no permission)\n", _nc_progname, tried); ExitProgram(EXIT_FAILURE); } } static void add_digit(int *target, int source) { *target = (*target * 10) + (source - '0'); } #define VtoTrace(opt) (unsigned) ((opt > 0) ? opt : (opt == 0)) int main(int argc, char *argv[]) { char my_tmpname[PATH_MAX]; char my_altfile[PATH_MAX]; int v_opt = -1; unsigned debug_level; int smart_defaults = TRUE; char *termcap; ENTRY *qp; int this_opt, last_opt = '?'; int outform = F_TERMINFO; /* output format */ int sortmode = S_TERMINFO; /* sort_mode */ int width = 60; int height = 65535; bool formatted = FALSE; /* reformat complex strings? */ bool literal = FALSE; /* suppress post-processing? */ int numbers = 0; /* format "%'char'" to/from "%{number}" */ bool forceresolve = FALSE; /* force resolution */ bool limited = TRUE; char *tversion = (char *) NULL; const char *source_file = "terminfo"; char *outdir = (char *) NULL; bool check_only = FALSE; bool suppress_untranslatable = FALSE; int quickdump = 0; bool quiet = FALSE; log_fp = stderr; _nc_progname = _nc_rootname(argv[0]); atexit(cleanup); if ((infodump = same_program(_nc_progname, PROG_CAPTOINFO)) != FALSE) { outform = F_TERMINFO; sortmode = S_TERMINFO; } if ((capdump = same_program(_nc_progname, PROG_INFOTOCAP)) != FALSE) { outform = F_TERMCAP; sortmode = S_TERMCAP; } #if NCURSES_XNAMES use_extended_names(FALSE); #endif _nc_strict_bsd = 0; /* * Processing arguments is a little complicated, since someone made a * design decision to allow the numeric values for -w, -v options to * be optional. */ while ((this_opt = getopt(argc, argv, "0123456789CDIKLNQR:TUVace:fGgo:qrstvwx")) != -1) { if (isdigit(this_opt)) { switch (last_opt) { case 'Q': add_digit(&quickdump, this_opt); break; case 'v': add_digit(&v_opt, this_opt); break; case 'w': add_digit(&width, this_opt); break; default: switch (this_opt) { case '0': last_opt = this_opt; width = 65535; height = 1; break; case '1': last_opt = this_opt; width = 0; break; default: usage(); } } continue; } switch (this_opt) { case 'K': _nc_strict_bsd = 1; /* the initial version of -K in 20110730 fell-thru here, but the * same flag is useful when reading sources -TD */ break; case 'C': capdump = TRUE; outform = F_TERMCAP; sortmode = S_TERMCAP; break; case 'D': debug_level = VtoTrace(v_opt); set_trace_level(debug_level); show_databases(outdir); ExitProgram(EXIT_SUCCESS); break; case 'I': infodump = TRUE; outform = F_TERMINFO; sortmode = S_TERMINFO; break; case 'L': infodump = TRUE; outform = F_VARIABLE; sortmode = S_VARIABLE; break; case 'N': smart_defaults = FALSE; literal = TRUE; break; case 'Q': quickdump = 0; break; case 'R': tversion = optarg; break; case 'T': limited = FALSE; break; case 'U': literal = TRUE; break; case 'V': puts(curses_version()); ExitProgram(EXIT_SUCCESS); case 'c': check_only = TRUE; break; case 'e': namelst = make_namelist(optarg); break; case 'f': formatted = TRUE; break; case 'G': numbers = 1; break; case 'g': numbers = -1; break; case 'o': outdir = optarg; break; case 'q': quiet = TRUE; break; case 'r': forceresolve = TRUE; break; case 's': showsummary = TRUE; break; case 'v': v_opt = 0; break; case 'w': width = 0; break; #if NCURSES_XNAMES case 't': _nc_disable_period = FALSE; suppress_untranslatable = TRUE; break; case 'a': _nc_disable_period = TRUE; /* FALLTHRU */ case 'x': use_extended_names(TRUE); break; #endif default: usage(); } last_opt = this_opt; } debug_level = VtoTrace(v_opt); set_trace_level(debug_level); if (_nc_tracing) { save_check_termtype = _nc_check_termtype2; _nc_check_termtype2 = check_termtype; } #if !HAVE_BIG_CORE /* * Aaargh! immedhook seriously hoses us! * * One problem with immedhook is it means we can't do -e. Problem * is that we can't guarantee that for each terminal listed, all the * terminals it depends on will have been kept in core for reference * resolution -- in fact it's certain the primitive types at the end * of reference chains *won't* be in core unless they were explicitly * in the select list themselves. */ if (namelst && (!infodump && !capdump)) { (void) fprintf(stderr, "%s: Sorry, -e can't be used without -I or -C\n", _nc_progname); ExitProgram(EXIT_FAILURE); } #endif /* HAVE_BIG_CORE */ if (optind < argc) { source_file = argv[optind++]; if (optind < argc) { fprintf(stderr, "%s: Too many file names. Usage:\n\t%s %s", _nc_progname, _nc_progname, usage_string); ExitProgram(EXIT_FAILURE); } } else { if (infodump == TRUE) { /* captoinfo's no-argument case */ source_file = "/etc/termcap"; if ((termcap = getenv("TERMCAP")) != 0 && (namelst = make_namelist(getenv("TERM"))) != 0) { if (access(termcap, F_OK) == 0) { /* file exists */ source_file = termcap; } else { if ((tmp_fp = open_tempfile(my_tmpname)) != 0) { source_file = my_tmpname; fprintf(tmp_fp, "%s\n", termcap); fclose(tmp_fp); tmp_fp = open_input(source_file, (char *) 0); to_remove = source_file; } else { failed("tmpnam"); } } } } else { /* tic */ fprintf(stderr, "%s: File name needed. Usage:\n\t%s %s", _nc_progname, _nc_progname, usage_string); ExitProgram(EXIT_FAILURE); } } if (tmp_fp == 0) { tmp_fp = open_input(source_file, my_altfile); if (!strcmp(source_file, "-")) { source_file = STDIN_NAME; } } if (infodump || check_only) { dump_init(tversion, smart_defaults ? outform : F_LITERAL, sortmode, width, height, debug_level, formatted || check_only, check_only, quickdump); } else if (capdump) { dump_init(tversion, outform, sortmode, width, height, debug_level, FALSE, FALSE, FALSE); } /* parse entries out of the source file */ _nc_set_source(source_file); #if !HAVE_BIG_CORE if (!(check_only || infodump || capdump)) _nc_set_writedir(outdir); #endif /* HAVE_BIG_CORE */ _nc_read_entry_source(tmp_fp, (char *) NULL, !smart_defaults || literal, FALSE, ((check_only || infodump || capdump) ? NULLHOOK : immedhook)); /* do use resolution */ if (check_only || (!infodump && !capdump) || forceresolve) { if (!_nc_resolve_uses2(TRUE, literal) && !check_only) { ExitProgram(EXIT_FAILURE); } } /* length check */ if (check_only && limited && (capdump || infodump)) { for_entry_list(qp) { if (matches(namelst, qp->tterm.term_names)) { int len = fmt_entry(&qp->tterm, NULL, FALSE, TRUE, infodump, numbers); if (len > (infodump ? MAX_TERMINFO_LENGTH : MAX_TERMCAP_LENGTH)) (void) fprintf(stderr, "warning: resolved %s entry is %d bytes long\n", _nc_first_name(qp->tterm.term_names), len); } } } /* write or dump all entries */ if (check_only) { /* this is in case infotocap() generates warnings */ _nc_curr_col = _nc_curr_line = -1; for_entry_list(qp) { if (matches(namelst, qp->tterm.term_names)) { /* this is in case infotocap() generates warnings */ _nc_set_type(_nc_first_name(qp->tterm.term_names)); _nc_curr_line = (int) qp->startline; repair_acsc(&qp->tterm); dump_entry(&qp->tterm, suppress_untranslatable, limited, numbers, NULL); } } } else { if (!infodump && !capdump) { _nc_set_writedir(outdir); for_entry_list(qp) { if (matches(namelst, qp->tterm.term_names)) write_it(qp); } } else { /* this is in case infotocap() generates warnings */ _nc_curr_col = _nc_curr_line = -1; for_entry_list(qp) { if (matches(namelst, qp->tterm.term_names)) { long j = qp->cend - qp->cstart; int len = 0; /* this is in case infotocap() generates warnings */ _nc_set_type(_nc_first_name(qp->tterm.term_names)); if (!quiet) { (void) fseek(tmp_fp, qp->cstart, SEEK_SET); while (j-- > 0) { if (infodump) (void) putchar(fgetc(tmp_fp)); else put_translate(fgetc(tmp_fp)); } } repair_acsc(&qp->tterm); dump_entry(&qp->tterm, suppress_untranslatable, limited, numbers, NULL); for (j = 0; j < (long) qp->nuses; j++) dump_uses(qp->uses[j].name, !capdump); len = show_entry(); if (debug_level != 0 && !limited) printf("# length=%d\n", len); } } if (!namelst && _nc_tail && !quiet) { int c, oldc = '\0'; bool in_comment = FALSE; bool trailing_comment = FALSE; (void) fseek(tmp_fp, _nc_tail->cend, SEEK_SET); while ((c = fgetc(tmp_fp)) != EOF) { if (oldc == '\n') { if (c == '#') { trailing_comment = TRUE; in_comment = TRUE; } else { in_comment = FALSE; } } if (trailing_comment && (in_comment || (oldc == '\n' && c == '\n'))) putchar(c); oldc = c; } } } } /* Show the directory into which entries were written, and the total * number of entries */ if (showsummary && (!(check_only || infodump || capdump))) { int total = _nc_tic_written(); if (total != 0) fprintf(log_fp, "%d entries written to %s\n", total, _nc_tic_dir((char *) 0)); else fprintf(log_fp, "No entries written\n"); } ExitProgram(EXIT_SUCCESS); } /* * This bit of legerdemain turns all the terminfo variable names into * references to locations in the arrays Booleans, Numbers, and Strings --- * precisely what's needed (see comp_parse.c). */ #undef CUR #define CUR tp-> /* * Check if the alternate character-set capabilities are consistent. */ static void check_acs(TERMTYPE *tp) { if (VALID_STRING(acs_chars)) { const char *boxes = "lmkjtuvwqxn"; char mapped[256]; char missing[256]; const char *p; char *q; memset(mapped, 0, sizeof(mapped)); for (p = acs_chars; *p != '\0'; p += 2) { if (p[1] == '\0') { _nc_warning("acsc has odd number of characters"); break; } mapped[UChar(p[0])] = p[1]; } if (mapped[UChar('I')] && !mapped[UChar('i')]) { _nc_warning("acsc refers to 'I', which is probably an error"); } for (p = boxes, q = missing; *p != '\0'; ++p) { if (!mapped[UChar(p[0])]) { *q++ = p[0]; } } *q = '\0'; assert(strlen(missing) <= strlen(boxes)); if (*missing != '\0' && strcmp(missing, boxes)) { _nc_warning("acsc is missing some line-drawing mapping: %s", missing); } } } /* * Check if the color capabilities are consistent */ static void check_colors(TERMTYPE *tp) { if ((max_colors > 0) != (max_pairs > 0) || ((max_colors > max_pairs) && (initialize_pair == 0))) _nc_warning("inconsistent values for max_colors (%d) and max_pairs (%d)", max_colors, max_pairs); PAIRED(set_foreground, set_background); PAIRED(set_a_foreground, set_a_background); PAIRED(set_color_pair, initialize_pair); if (VALID_STRING(set_foreground) && VALID_STRING(set_a_foreground) && !_nc_capcmp(set_foreground, set_a_foreground)) _nc_warning("expected setf/setaf to be different"); if (VALID_STRING(set_background) && VALID_STRING(set_a_background) && !_nc_capcmp(set_background, set_a_background)) _nc_warning("expected setb/setab to be different"); /* see: has_colors() */ if (VALID_NUMERIC(max_colors) && VALID_NUMERIC(max_pairs) && (((set_foreground != NULL) && (set_background != NULL)) || ((set_a_foreground != NULL) && (set_a_background != NULL)) || set_color_pair)) { if (!VALID_STRING(orig_pair) && !VALID_STRING(orig_colors)) _nc_warning("expected either op/oc string for resetting colors"); } if (can_change) { if (!VALID_STRING(initialize_pair) && !VALID_STRING(initialize_color)) { _nc_warning("expected initc or initp because ccc is given"); } } else { if (VALID_STRING(initialize_pair) || VALID_STRING(initialize_color)) { _nc_warning("expected ccc because initc is given"); } } } static char keypad_final(const char *string) { char result = '\0'; if (VALID_STRING(string) && *string++ == '\033' && *string++ == 'O' && strlen(string) == 1) { result = *string; } return result; } static long keypad_index(const char *string) { char *test; const char *list = "PQRSwxymtuvlqrsPpn"; /* app-keypad except "Enter" */ int ch; long result = -1; if ((ch = keypad_final(string)) != '\0') { test = (strchr) (list, ch); if (test != 0) result = (long) (test - list); } return result; } /* * list[] is down, up, left, right * "left" may be ^H rather than \E[D * "down" may be ^J rather than \E[B * But up/right are generally consistently escape sequences for ANSI terminals. */ static void check_ansi_cursor(char *list[4]) { int j, k; int want; size_t prefix = 0; size_t suffix; bool skip[4]; bool repeated = FALSE; for (j = 0; j < 4; ++j) { skip[j] = FALSE; for (k = 0; k < j; ++k) { if (j != k && !strcmp(list[j], list[k])) { char *value = _nc_tic_expand(list[k], TRUE, 0); _nc_warning("repeated cursor control %s\n", value); repeated = TRUE; } } } if (!repeated) { char *up = list[1]; if (UChar(up[0]) == '\033') { if (up[1] == '[') { prefix = 2; } else { prefix = 1; } } else if (UChar(up[0]) == UChar('\233')) { prefix = 1; } if (prefix) { suffix = prefix; while (up[suffix] && isdigit(UChar(up[suffix]))) ++suffix; } if (prefix && up[suffix] == 'A') { skip[1] = TRUE; if (!strcmp(list[0], "\n")) skip[0] = TRUE; if (!strcmp(list[2], "\b")) skip[2] = TRUE; for (j = 0; j < 4; ++j) { if (skip[j] || strlen(list[j]) == 1) continue; if (memcmp(list[j], up, prefix)) { char *value = _nc_tic_expand(list[j], TRUE, 0); _nc_warning("inconsistent prefix for %s\n", value); continue; } if (strlen(list[j]) < suffix) { char *value = _nc_tic_expand(list[j], TRUE, 0); _nc_warning("inconsistent length for %s, expected %d\n", value, (int) suffix + 1); continue; } want = "BADC"[j]; if (list[j][suffix] != want) { char *value = _nc_tic_expand(list[j], TRUE, 0); _nc_warning("inconsistent suffix for %s, expected %c, have %c\n", value, want, list[j][suffix]); } } } } } #define EXPECTED(name) if (!PRESENT(name)) _nc_warning("expected " #name) #define UNEXPECTED(name) if (PRESENT(name)) _nc_warning("unexpected " #name ", for %s", why) static void check_noaddress(TERMTYPE *tp, const char *why) { UNEXPECTED(column_address); UNEXPECTED(cursor_address); UNEXPECTED(cursor_home); UNEXPECTED(cursor_mem_address); UNEXPECTED(cursor_to_ll); UNEXPECTED(row_address); UNEXPECTED(row_address); } static void check_cursor(TERMTYPE *tp) { int count; char *list[4]; if (hard_copy) { check_noaddress(tp, "hard_copy"); } else if (generic_type) { check_noaddress(tp, "generic_type"); } else if (strchr(tp->term_names, '+') == 0) { int y = 0; int x = 0; if (PRESENT(column_address)) ++y; if (PRESENT(cursor_address)) y = x = 10; if (PRESENT(cursor_home)) ++y, ++x; if (PRESENT(cursor_mem_address)) y = x = 10; if (PRESENT(cursor_to_ll)) ++y, ++x; if (PRESENT(row_address)) ++x; if (PRESENT(cursor_down)) ++y; if (PRESENT(cursor_up)) ++y; if (PRESENT(cursor_left)) ++x; if (PRESENT(cursor_right)) ++x; if (x < 2 && y < 2) { _nc_warning("terminal lacks cursor addressing"); } else { if (x < 2) _nc_warning("terminal lacks cursor column-addressing"); if (y < 2) _nc_warning("terminal lacks cursor row-addressing"); } } /* it is rare to have an insert-line feature without a matching delete */ ANDMISSING(parm_insert_line, insert_line); ANDMISSING(parm_delete_line, delete_line); ANDMISSING(parm_insert_line, parm_delete_line); /* if we have a parameterized form, then the non-parameterized is easy */ ANDMISSING(parm_down_cursor, cursor_down); ANDMISSING(parm_up_cursor, cursor_up); ANDMISSING(parm_left_cursor, cursor_left); ANDMISSING(parm_right_cursor, cursor_right); /* Given any of a set of cursor movement, the whole set should be present. * Technically this is not true (we could use cursor_address to fill in * unsupported controls), but it is likely. */ count = 0; if (PRESENT(parm_down_cursor)) { list[count++] = parm_down_cursor; } if (PRESENT(parm_up_cursor)) { list[count++] = parm_up_cursor; } if (PRESENT(parm_left_cursor)) { list[count++] = parm_left_cursor; } if (PRESENT(parm_right_cursor)) { list[count++] = parm_right_cursor; } if (count == 4) { check_ansi_cursor(list); } else if (count != 0) { EXPECTED(parm_down_cursor); EXPECTED(parm_up_cursor); EXPECTED(parm_left_cursor); EXPECTED(parm_right_cursor); } count = 0; if (PRESENT(cursor_down)) { list[count++] = cursor_down; } if (PRESENT(cursor_up)) { list[count++] = cursor_up; } if (PRESENT(cursor_left)) { list[count++] = cursor_left; } if (PRESENT(cursor_right)) { list[count++] = cursor_right; } if (count == 4) { check_ansi_cursor(list); } else if (count != 0) { count = 0; if (PRESENT(cursor_down) && strcmp(cursor_down, "\n")) ++count; if (PRESENT(cursor_left) && strcmp(cursor_left, "\b")) ++count; if (PRESENT(cursor_up) && strlen(cursor_up) > 1) ++count; if (PRESENT(cursor_right) && strlen(cursor_right) > 1) ++count; if (count) { EXPECTED(cursor_down); EXPECTED(cursor_up); EXPECTED(cursor_left); EXPECTED(cursor_right); } } } #define MAX_KP 5 /* * Do a quick sanity-check for vt100-style keypads to see if the 5-key keypad * is mapped inconsistently. */ static void check_keypad(TERMTYPE *tp) { char show[80]; if (VALID_STRING(key_a1) && VALID_STRING(key_a3) && VALID_STRING(key_b2) && VALID_STRING(key_c1) && VALID_STRING(key_c3)) { char final[MAX_KP + 1]; long list[MAX_KP]; int increase = 0; int j, k, kk; long last; long test; final[0] = keypad_final(key_a1); final[1] = keypad_final(key_a3); final[2] = keypad_final(key_b2); final[3] = keypad_final(key_c1); final[4] = keypad_final(key_c3); final[5] = '\0'; /* special case: legacy coding using 1,2,3,0,. on the bottom */ assert(strlen(final) <= MAX_KP); if (!strcmp(final, "qsrpn")) return; list[0] = keypad_index(key_a1); list[1] = keypad_index(key_a3); list[2] = keypad_index(key_b2); list[3] = keypad_index(key_c1); list[4] = keypad_index(key_c3); /* check that they're all vt100 keys */ for (j = 0; j < MAX_KP; ++j) { if (list[j] < 0) { return; } } /* check if they're all in increasing order */ for (j = 1; j < MAX_KP; ++j) { if (list[j] > list[j - 1]) { ++increase; } } if (increase != (MAX_KP - 1)) { show[0] = '\0'; for (j = 0, last = -1; j < MAX_KP; ++j) { for (k = 0, kk = -1, test = 100; k < 5; ++k) { if (list[k] > last && list[k] < test) { test = list[k]; kk = k; } } last = test; assert(strlen(show) < (MAX_KP * 4)); switch (kk) { case 0: _nc_STRCAT(show, " ka1", sizeof(show)); break; case 1: _nc_STRCAT(show, " ka3", sizeof(show)); break; case 2: _nc_STRCAT(show, " kb2", sizeof(show)); break; case 3: _nc_STRCAT(show, " kc1", sizeof(show)); break; case 4: _nc_STRCAT(show, " kc3", sizeof(show)); break; } } _nc_warning("vt100 keypad order inconsistent: %s", show); } } else if (VALID_STRING(key_a1) || VALID_STRING(key_a3) || VALID_STRING(key_b2) || VALID_STRING(key_c1) || VALID_STRING(key_c3)) { show[0] = '\0'; if (keypad_index(key_a1) >= 0) _nc_STRCAT(show, " ka1", sizeof(show)); if (keypad_index(key_a3) >= 0) _nc_STRCAT(show, " ka3", sizeof(show)); if (keypad_index(key_b2) >= 0) _nc_STRCAT(show, " kb2", sizeof(show)); if (keypad_index(key_c1) >= 0) _nc_STRCAT(show, " kc1", sizeof(show)); if (keypad_index(key_c3) >= 0) _nc_STRCAT(show, " kc3", sizeof(show)); if (*show != '\0') _nc_warning("vt100 keypad map incomplete:%s", show); } /* * These warnings are useful for consistency checks - it is possible that * there are real terminals with mismatches in these */ ANDMISSING(key_ic, key_dc); } static void check_printer(TERMTYPE *tp) { PAIRED(enter_doublewide_mode, exit_doublewide_mode); PAIRED(enter_italics_mode, exit_italics_mode); PAIRED(enter_leftward_mode, exit_leftward_mode); PAIRED(enter_micro_mode, exit_micro_mode); PAIRED(enter_shadow_mode, exit_shadow_mode); PAIRED(enter_subscript_mode, exit_subscript_mode); PAIRED(enter_superscript_mode, exit_superscript_mode); PAIRED(enter_upward_mode, exit_upward_mode); ANDMISSING(start_char_set_def, stop_char_set_def); /* if we have a parameterized form, then the non-parameterized is easy */ ANDMISSING(set_bottom_margin_parm, set_bottom_margin); ANDMISSING(set_left_margin_parm, set_left_margin); ANDMISSING(set_right_margin_parm, set_right_margin); ANDMISSING(set_top_margin_parm, set_top_margin); ANDMISSING(parm_down_micro, micro_down); ANDMISSING(parm_left_micro, micro_left); ANDMISSING(parm_right_micro, micro_right); ANDMISSING(parm_up_micro, micro_up); } static bool uses_SGR_39_49(const char *value) { return (strstr(value, "39;49") != 0 || strstr(value, "49;39") != 0); } /* * Check consistency of termcap extensions related to "screen". */ static void check_screen(TERMTYPE *tp) { #if NCURSES_XNAMES if (_nc_user_definable) { int have_XT = tigetflag("XT"); int have_XM = tigetflag("XM"); int have_bce = back_color_erase; bool have_kmouse = FALSE; bool use_sgr_39_49 = FALSE; char *name = _nc_first_name(tp->term_names); if (!VALID_BOOLEAN(have_bce)) { have_bce = FALSE; } if (!VALID_BOOLEAN(have_XM)) { have_XM = FALSE; } if (!VALID_BOOLEAN(have_XT)) { have_XT = FALSE; } if (VALID_STRING(key_mouse)) { have_kmouse = !strcmp("\033[M", key_mouse); } if (VALID_STRING(orig_colors)) { use_sgr_39_49 = uses_SGR_39_49(orig_colors); } else if (VALID_STRING(orig_pair)) { use_sgr_39_49 = uses_SGR_39_49(orig_pair); } if (have_XM && have_XT) { _nc_warning("Screen's XT capability conflicts with XM"); } else if (have_XT && strstr(name, "screen") != 0 && strchr(name, '.') != 0) { _nc_warning("Screen's \"screen\" entries should not have XT set"); } else if (have_XT) { if (!have_kmouse && have_bce) { if (VALID_STRING(key_mouse)) { _nc_warning("Value of kmous inconsistent with screen's usage"); } else { _nc_warning("Expected kmous capability with XT"); } } if (!have_bce && max_colors > 0) _nc_warning("Expected bce capability with XT"); if (!use_sgr_39_49 && have_bce && max_colors > 0) _nc_warning("Expected orig_colors capability with XT to have 39/49 parameters"); if (VALID_STRING(to_status_line)) _nc_warning("\"tsl\" capability is redundant, given XT"); } else { if (have_kmouse && !have_XM) _nc_warning("Expected XT to be set, given kmous"); } } #endif } /* * Returns the expected number of parameters for the given capability. */ static int expected_params(const char *name) { #define DATA(name,count) { { name }, count } /* *INDENT-OFF* */ static const struct { const char name[9]; int count; } table[] = { DATA( "S0", 1 ), /* 'screen' extension */ DATA( "birep", 2 ), DATA( "chr", 1 ), DATA( "colornm", 1 ), DATA( "cpi", 1 ), DATA( "csnm", 1 ), DATA( "csr", 2 ), DATA( "cub", 1 ), DATA( "cud", 1 ), DATA( "cuf", 1 ), DATA( "cup", 2 ), DATA( "cuu", 1 ), DATA( "cvr", 1 ), DATA( "cwin", 5 ), DATA( "dch", 1 ), DATA( "defc", 3 ), DATA( "dial", 1 ), DATA( "dispc", 1 ), DATA( "dl", 1 ), DATA( "ech", 1 ), DATA( "getm", 1 ), DATA( "hpa", 1 ), DATA( "ich", 1 ), DATA( "il", 1 ), DATA( "indn", 1 ), DATA( "initc", 4 ), DATA( "initp", 7 ), DATA( "lpi", 1 ), DATA( "mc5p", 1 ), DATA( "mrcup", 2 ), DATA( "mvpa", 1 ), DATA( "pfkey", 2 ), DATA( "pfloc", 2 ), DATA( "pfx", 2 ), DATA( "pfxl", 3 ), DATA( "pln", 2 ), DATA( "qdial", 1 ), DATA( "rcsd", 1 ), DATA( "rep", 2 ), DATA( "rin", 1 ), DATA( "sclk", 3 ), DATA( "scp", 1 ), DATA( "scs", 1 ), DATA( "scsd", 2 ), DATA( "setab", 1 ), DATA( "setaf", 1 ), DATA( "setb", 1 ), DATA( "setcolor", 1 ), DATA( "setf", 1 ), DATA( "sgr", 9 ), DATA( "sgr1", 6 ), DATA( "slength", 1 ), DATA( "slines", 1 ), DATA( "smgbp", 1 ), /* 2 if smgtp is not given */ DATA( "smglp", 1 ), DATA( "smglr", 2 ), DATA( "smgrp", 1 ), DATA( "smgtb", 2 ), DATA( "smgtp", 1 ), DATA( "tsl", 1 ), DATA( "u6", -1 ), DATA( "vpa", 1 ), DATA( "wind", 4 ), DATA( "wingo", 1 ), }; /* *INDENT-ON* */ #undef DATA unsigned n; int result = 0; /* function-keys, etc., use none */ for (n = 0; n < SIZEOF(table); n++) { if (!strcmp(name, table[n].name)) { result = table[n].count; break; } } return result; } /* * Make a quick sanity check for the parameters which are used in the given * strings. If there are no "%p" tokens, then there should be no other "%" * markers. */ static void check_params(TERMTYPE *tp, const char *name, char *value) { int expected = expected_params(name); int actual = 0; int n; bool params[NUM_PARM]; char *s = value; #ifdef set_top_margin_parm if (!strcmp(name, "smgbp") && set_top_margin_parm == 0) expected = 2; #endif for (n = 0; n < NUM_PARM; n++) params[n] = FALSE; while (*s != 0) { if (*s == '%') { if (*++s == '\0') { _nc_warning("expected character after %% in %s", name); break; } else if (*s == 'p') { if (*++s == '\0' || !isdigit((int) *s)) { _nc_warning("expected digit after %%p in %s", name); return; } else { n = (*s - '0'); if (n > actual) actual = n; params[n] = TRUE; } } } s++; } if (params[0]) { _nc_warning("%s refers to parameter 0 (%%p0), which is not allowed", name); } if (value == set_attributes || expected < 0) { ; } else if (expected != actual) { _nc_warning("%s uses %d parameters, expected %d", name, actual, expected); for (n = 1; n < actual; n++) { if (!params[n]) _nc_warning("%s omits parameter %d", name, n); } } } static char * check_1_infotocap(const char *name, NCURSES_CONST char *value, int count) { int k; int ignored; long numbers[1 + NUM_PARM]; char *strings[1 + NUM_PARM]; char *p_is_s[NUM_PARM]; char *result; char blob[NUM_PARM * 10]; char *next = blob; *next++ = '\0'; for (k = 1; k <= NUM_PARM; k++) { numbers[k] = count; sprintf(next, "XYZ%d", count); strings[k] = next; next += strlen(next) + 1; } switch (tparm_type(name)) { case Num_Str: result = TPARM_2(value, numbers[1], strings[2]); break; case Num_Str_Str: result = TPARM_3(value, numbers[1], strings[2], strings[3]); break; case Numbers: default: (void) _nc_tparm_analyze(value, p_is_s, &ignored); #define myParam(n) (p_is_s[n - 1] != 0 ? ((TPARM_ARG) strings[n]) : numbers[n]) result = TPARM_9(value, myParam(1), myParam(2), myParam(3), myParam(4), myParam(5), myParam(6), myParam(7), myParam(8), myParam(9)); break; } return result; } #define IsDelay(ch) ((ch) == '.' || isdigit(UChar(ch))) static const char * parse_delay_value(const char *src, double *delays, int *always) { int star = 0; *delays = 0.0; if (always) *always = 0; while (isdigit(UChar(*src))) { (*delays) = (*delays) * 10 + (*src++ - '0'); } if (*src == '.') { int gotdot = 1; ++src; while (isdigit(UChar(*src))) { gotdot *= 10; (*delays) += (*src++ - '0') / gotdot; } } while (*src == '*' || *src == '/') { if (always == 0 && *src == '/') break; if (*src++ == '*') { star = 1; } else { *always = 1; } } if (star) *delays = -(*delays); return src; } static const char * parse_ti_delay(const char *ti, double *delays) { *delays = 0.0; while (*ti != '\0') { if (*ti == '\\') { ++ti; } if (ti[0] == '$' && ti[1] == '<' && IsDelay(UChar(ti[2]))) { int ignored; const char *last = parse_delay_value(ti + 2, delays, &ignored); if (*last == '>') { ti = last; } } else { ++ti; } } return ti; } static const char * parse_tc_delay(const char *tc, double *delays) { return parse_delay_value(tc, delays, (int *) 0); } /* * Compare terminfo- and termcap-strings, factoring out delays. */ static bool same_ti_tc(const char *ti, const char *tc, bool * embedded) { bool same = TRUE; double ti_delay = 0.0; double tc_delay = 0.0; const char *ti_last; *embedded = FALSE; ti_last = parse_ti_delay(ti, &ti_delay); tc = parse_tc_delay(tc, &tc_delay); while ((ti < ti_last) && *tc) { if (*ti == '\\' && ispunct(UChar(ti[1]))) { ++ti; if ((*ti == '^') && !strncmp(tc, "\\136", 4)) { ti += 1; tc += 4; continue; } } else if (ti[0] == '$' && ti[1] == '<') { double no_delay; const char *ss = parse_ti_delay(ti, &no_delay); if (ss != ti) { *embedded = TRUE; ti = ss; continue; } } if (*tc == '\\' && ispunct(UChar(tc[1]))) { ++tc; } if (*ti++ != *tc++) { same = FALSE; break; } } if (*embedded) { if (same) { same = FALSE; } else { *embedded = FALSE; /* report only one problem */ } } return same; } /* * Check terminfo to termcap translation. */ static void check_infotocap(TERMTYPE *tp, int i, const char *value) { const char *name = ExtStrname(tp, i, strnames); int params = (((i < (int) SIZEOF(parametrized)) && (i < STRCOUNT)) ? parametrized[i] : ((*value == 'k') ? 0 : has_params(value))); int to_char = 0; char *ti_value; char *tc_value; bool embedded; if ((ti_value = _nc_tic_expand(value, TRUE, to_char)) == ABSENT_STRING) { _nc_warning("tic-expansion of %s failed", name); } else if ((tc_value = _nc_infotocap(name, ti_value, params)) == ABSENT_STRING) { _nc_warning("tic-conversion of %s failed", name); } else if (params > 0) { int limit = 5; int count; bool first = TRUE; if (!strcmp(name, "setf") || !strcmp(name, "setb") || !strcmp(name, "setaf") || !strcmp(name, "setab")) { limit = max_colors; } for (count = 0; count < limit; ++count) { char *ti_check = check_1_infotocap(name, ti_value, count); char *tc_check = check_1_infotocap(name, tc_value, count); if (strcmp(ti_check, tc_check)) { if (first) { fprintf(stderr, "check_infotocap(%s)\n", name); fprintf(stderr, "...ti '%s'\n", ti_value); fprintf(stderr, "...tc '%s'\n", tc_value); first = FALSE; } _nc_warning("tparm-conversion of %s(%d) differs between\n\tterminfo %s\n\ttermcap %s", name, count, ti_check, tc_check); } } } else if (params == 0 && !same_ti_tc(ti_value, tc_value, &embedded)) { if (embedded) { _nc_warning("termcap equivalent of %s cannot use embedded delay", name); } else { _nc_warning("tic-conversion of %s changed value\n\tfrom %s\n\tto %s", name, ti_value, tc_value); } } } static char * skip_delay(char *s) { while (*s == '/' || isdigit(UChar(*s))) ++s; return s; } /* * Skip a delay altogether, e.g., when comparing a simple string to sgr, * the latter may have a worst-case delay on the end. */ static char * ignore_delays(char *s) { int delaying = 0; do { switch (*s) { case '$': if (delaying == 0) delaying = 1; break; case '<': if (delaying == 1) delaying = 2; break; case '\0': delaying = 0; break; default: if (delaying) { s = skip_delay(s); if (*s == '>') ++s; delaying = 0; } break; } if (delaying) ++s; } while (delaying); return s; } #define DATA(name) { #name } static const char sgr_names[][11] = { DATA(none), DATA(standout), DATA(underline), DATA(reverse), DATA(blink), DATA(dim), DATA(bold), DATA(invis), DATA(protect), DATA(altcharset), "" }; #undef DATA /* * An sgr string may contain several settings other than the one we're * interested in, essentially sgr0 + rmacs + whatever. As long as the * "whatever" is contained in the sgr string, that is close enough for our * sanity check. */ static bool similar_sgr(int num, char *a, char *b) { char *base_a = a; char *base_b = b; int delaying = 0; while (*b != 0) { while (*a != *b) { if (*a == 0) { if (num < 0) { ; } else if (b[0] == '$' && b[1] == '<') { _nc_warning("Did not find delay %s", _nc_visbuf(b)); } else { _nc_warning("checking sgr(%s) %s\n\tcompare to %s\n\tunmatched %s", sgr_names[num], _nc_visbuf2(1, base_a), _nc_visbuf2(2, base_b), _nc_visbuf2(3, b)); } return FALSE; } else if (delaying) { a = skip_delay(a); b = skip_delay(b); } else if ((*b == '0' || (*b == ';')) && *a == 'm') { b++; } else { a++; } } switch (*a) { case '$': if (delaying == 0) delaying = 1; break; case '<': if (delaying == 1) delaying = 2; break; default: delaying = 0; break; } a++; b++; } /* ignore delays on the end of the string */ a = ignore_delays(a); return ((num != 0) || (*a == 0)); } static char * check_sgr(TERMTYPE *tp, char *zero, int num, char *cap, const char *name) { char *test; _nc_tparm_err = 0; test = TPARM_9(set_attributes, num == 1, num == 2, num == 3, num == 4, num == 5, num == 6, num == 7, num == 8, num == 9); if (test != 0) { if (PRESENT(cap)) { if (!similar_sgr(num, test, cap)) { _nc_warning("%s differs from sgr(%d)\n\t%s=%s\n\tsgr(%d)=%s", name, num, name, _nc_visbuf2(1, cap), num, _nc_visbuf2(2, test)); } } else if (_nc_capcmp(test, zero)) { _nc_warning("sgr(%d) present, but not %s", num, name); } } else if (PRESENT(cap)) { _nc_warning("sgr(%d) missing, but %s present", num, name); } if (_nc_tparm_err) _nc_warning("stack error in sgr(%d) string", num); return test; } #define CHECK_SGR(num,name) check_sgr(tp, zero, num, name, #name) #ifdef TRACE /* * If tic is compiled with TRACE, we'll be able to see the output from the * DEBUG() macro. But since it doesn't use traceon(), it always goes to * the standard error. Use this function to make it simpler to follow the * resulting debug traces. */ static void show_where(unsigned level) { if (_nc_tracing >= DEBUG_LEVEL(level)) { char my_name[MAX_NAME_SIZE]; _nc_get_type(my_name); _tracef("\"%s\", line %d, '%s'", _nc_get_source(), _nc_curr_line, my_name); } } #else #define show_where(level) /* nothing */ #endif typedef struct { int keycode; const char *name; const char *value; } NAME_VALUE; static NAME_VALUE * get_fkey_list(TERMTYPE *tp) { NAME_VALUE *result = typeMalloc(NAME_VALUE, NUM_STRINGS(tp) + 1); const struct tinfo_fkeys *all_fkeys = _nc_tinfo_fkeys; int used = 0; unsigned j; if (result == 0) failed("get_fkey_list"); for (j = 0; all_fkeys[j].code; j++) { char *a = tp->Strings[all_fkeys[j].offset]; if (VALID_STRING(a)) { result[used].keycode = (int) all_fkeys[j].code; result[used].name = strnames[all_fkeys[j].offset]; result[used].value = a; ++used; } } #if NCURSES_XNAMES for (j = STRCOUNT; j < NUM_STRINGS(tp); ++j) { const char *name = ExtStrname(tp, (int) j, strnames); if (*name == 'k') { result[used].keycode = -1; result[used].name = name; result[used].value = tp->Strings[j]; ++used; } } #endif result[used].keycode = 0; return result; } static void show_fkey_name(NAME_VALUE * data) { if (data->keycode > 0) { fprintf(stderr, " %s", keyname(data->keycode)); fprintf(stderr, " (capability \"%s\")", data->name); } else { fprintf(stderr, " capability \"%s\"", data->name); } } /* * A terminal entry may contain more than one keycode assigned to a given * string (e.g., KEY_END and KEY_LL). But curses will only return one (the * last one assigned). */ static void check_conflict(TERMTYPE *tp) { bool conflict = FALSE; unsigned j, k; if (!(_nc_syntax == SYN_TERMCAP && capdump)) { char *check = calloc((size_t) (NUM_STRINGS(tp) + 1), sizeof(char)); NAME_VALUE *given = get_fkey_list(tp); if (check == 0) failed("check_termtype"); for (j = 0; given[j].keycode; ++j) { const char *a = given[j].value; bool first = TRUE; for (k = j + 1; given[k].keycode; k++) { const char *b = given[k].value; if (check[k]) continue; if (!_nc_capcmp(a, b)) { check[j] = 1; check[k] = 1; if (first) { if (!conflict) { _nc_warning("Conflicting key definitions (using the last)"); conflict = TRUE; } fprintf(stderr, "..."); show_fkey_name(given + j); fprintf(stderr, " is the same as"); show_fkey_name(given + k); first = FALSE; } else { fprintf(stderr, ", "); show_fkey_name(given + k); } } } if (!first) fprintf(stderr, "\n"); } free(given); free(check); } } /* * Exiting a video mode should not duplicate sgr0 */ static void check_exit_attribute(const char *name, char *test, char *trimmed, char *untrimmed) { if (VALID_STRING(test)) { if (similar_sgr(-1, trimmed, test) || similar_sgr(-1, untrimmed, test)) { _nc_warning("%s matches exit_attribute_mode", name); } } } /* * Returns true if the string looks like a standard SGR string. */ static bool is_sgr_string(char *value) { bool result = FALSE; if (VALID_STRING(value)) { if (value[0] == '\033' && value[1] == '[') { result = TRUE; value += 2; } else if (UChar(value[0]) == 0x9a) { result = TRUE; value += 1; } if (result) { int ch; while ((ch = UChar(*value++)) != '\0') { if (isdigit(ch) || ch == ';') { ; } else if (ch == 'm' && *value == '\0') { ; } else { result = FALSE; break; } } } } return result; } /* * Check if the given capability contains a given SGR attribute. */ static void check_sgr_param(TERMTYPE *tp, int code, const char *name, char *value) { if (VALID_STRING(value)) { int ncv = ((code != 0) ? (1 << (code - 1)) : 0); char *test = tgoto(value, 0, 0); if (is_sgr_string(test)) { int param = 0; int count = 0; int skips = 0; int color = (value == set_a_foreground || value == set_a_background || value == set_foreground || value == set_background); while (*test != 0) { if (isdigit(UChar(*test))) { param = 10 * param + (*test - '0'); ++count; } else { if (count) { /* * Avoid unnecessary warning for xterm 256color codes. */ if (color && (param == 38 || param == 48)) skips = 3; if ((skips-- <= 0) && (param == code)) break; } count = 0; param = 0; } ++test; } if (count != 0 && param == code) { if (code == 0 || no_color_video < 0 || !(no_color_video & ncv)) { _nc_warning("\"%s\" SGR-attribute used in %s", sgr_names[code], name); } } } } } /* other sanity-checks (things that we don't want in the normal * logic that reads a terminfo entry) */ static void check_termtype(TERMTYPE *tp, bool literal) { unsigned j; check_conflict(tp); for_each_string(j, tp) { char *a = tp->Strings[j]; if (VALID_STRING(a)) { check_params(tp, ExtStrname(tp, (int) j, strnames), a); if (capdump) { check_infotocap(tp, (int) j, a); } } } check_acs(tp); check_colors(tp); check_cursor(tp); check_keypad(tp); check_printer(tp); check_screen(tp); /* * These may be mismatched because the terminal description relies on * restoring the cursor visibility by resetting it. */ ANDMISSING(cursor_invisible, cursor_normal); ANDMISSING(cursor_visible, cursor_normal); if (PRESENT(cursor_visible) && PRESENT(cursor_normal) && !_nc_capcmp(cursor_visible, cursor_normal)) _nc_warning("cursor_visible is same as cursor_normal"); /* * From XSI & O'Reilly, we gather that sc/rc are required if csr is * given, because the cursor position after the scrolling operation is * performed is undefined. */ ANDMISSING(change_scroll_region, save_cursor); ANDMISSING(change_scroll_region, restore_cursor); /* * If we can clear tabs, we should be able to initialize them. */ ANDMISSING(clear_all_tabs, set_tab); if (PRESENT(set_attributes)) { char *zero = 0; _nc_tparm_err = 0; if (PRESENT(exit_attribute_mode)) { zero = strdup(CHECK_SGR(0, exit_attribute_mode)); } else { zero = strdup(TPARM_9(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, 0)); } if (_nc_tparm_err) _nc_warning("stack error in sgr(0) string"); if (zero != 0) { CHECK_SGR(1, enter_standout_mode); CHECK_SGR(2, enter_underline_mode); CHECK_SGR(3, enter_reverse_mode); CHECK_SGR(4, enter_blink_mode); CHECK_SGR(5, enter_dim_mode); CHECK_SGR(6, enter_bold_mode); CHECK_SGR(7, enter_secure_mode); CHECK_SGR(8, enter_protected_mode); CHECK_SGR(9, enter_alt_charset_mode); free(zero); } else { _nc_warning("sgr(0) did not return a value"); } } else if (PRESENT(exit_attribute_mode) && set_attributes != CANCELLED_STRING) { if (_nc_syntax == SYN_TERMINFO) _nc_warning("missing sgr string"); } #define CHECK_SGR0(name) check_exit_attribute(#name, name, check_sgr0, exit_attribute_mode) if (PRESENT(exit_attribute_mode)) { char *check_sgr0 = _nc_trim_sgr0(tp); if (check_sgr0 == 0 || *check_sgr0 == '\0') { _nc_warning("trimmed sgr0 is empty"); } else { show_where(2); if (check_sgr0 != exit_attribute_mode) { DEBUG(2, ("will trim sgr0\n\toriginal sgr0=%s\n\ttrimmed sgr0=%s", _nc_visbuf2(1, exit_attribute_mode), _nc_visbuf2(2, check_sgr0))); } else { DEBUG(2, ("will not trim sgr0\n\toriginal sgr0=%s", _nc_visbuf(exit_attribute_mode))); } } CHECK_SGR0(exit_italics_mode); CHECK_SGR0(exit_standout_mode); CHECK_SGR0(exit_underline_mode); if (check_sgr0 != exit_attribute_mode) { free(check_sgr0); } } #define CHECK_SGR_PARAM(code, name) check_sgr_param(tp, (int)code, #name, name) for (j = 0; *sgr_names[j] != '\0'; ++j) { CHECK_SGR_PARAM(j, set_a_foreground); CHECK_SGR_PARAM(j, set_a_background); CHECK_SGR_PARAM(j, set_foreground); CHECK_SGR_PARAM(j, set_background); } #ifdef TRACE show_where(2); if (!auto_right_margin) { DEBUG(2, ("can write to lower-right directly")); } else if (PRESENT(enter_am_mode) && PRESENT(exit_am_mode)) { DEBUG(2, ("can write to lower-right by suppressing automargin")); } else if ((PRESENT(enter_insert_mode) && PRESENT(exit_insert_mode)) || PRESENT(insert_character) || PRESENT(parm_ich)) { DEBUG(2, ("can write to lower-right by using inserts")); } else { DEBUG(2, ("cannot write to lower-right")); } #endif /* * Some standard applications (e.g., vi) and some non-curses * applications (e.g., jove) get confused if we have both ich1 and * smir/rmir. Let's be nice and warn about that, too, even though * ncurses handles it. */ if ((PRESENT(enter_insert_mode) || PRESENT(exit_insert_mode)) && PRESENT(parm_ich)) { _nc_warning("non-curses applications may be confused by ich1 with smir/rmir"); } /* * Finally, do the non-verbose checks */ if (save_check_termtype != 0) save_check_termtype(tp, literal); } ncurses-6.0-20160213/progs/clear.c0000644000175100001440000000602512161421506015041 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2007,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * clear.c -- clears the terminal's screen */ #define USE_LIBTINFO #include MODULE_ID("$Id: clear.c,v 1.13 2013/06/22 22:20:54 tom Exp $") static int putch(int c) { return putchar(c); } int main( int argc GCC_UNUSED, char *argv[]GCC_UNUSED) { char *E3; setupterm((char *) 0, STDOUT_FILENO, (int *) 0); /* Clear the scrollback buffer if possible. */ E3 = tigetstr("E3"); if (E3) (void) tputs(E3, lines > 0 ? lines : 1, putch); ExitProgram((tputs(clear_screen, lines > 0 ? lines : 1, putch) == ERR) ? EXIT_FAILURE : EXIT_SUCCESS); } ncurses-6.0-20160213/progs/infocmp.c0000644000175100001440000013652012572607445015430 0ustar tomusers/**************************************************************************** * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, distribute with modifications, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * * * Except as contained in this notice, the name(s) of the above copyright * * holders shall not be used in advertising or otherwise to promote the * * sale, use or other dealings in this Software without prior written * * authorization. * ****************************************************************************/ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* * infocmp.c -- decompile an entry, or compare two entries * written by Eric S. Raymond * and Thomas E Dickey */ #include #include MODULE_ID("$Id: infocmp.c,v 1.136 2015/09/05 15:49:57 tom Exp $") #define L_CURL "{" #define R_CURL "}" #define MAX_STRING 1024 /* maximum formatted string */ const char *_nc_progname = "infocmp"; typedef char path[PATH_MAX]; /*************************************************************************** * * The following control variables, together with the contents of the * terminfo entries, completely determine the actions of the program. * ***************************************************************************/ static ENTRY *entries; /* terminfo entries */ static int termcount; /* count of terminal entries */ static bool limited = TRUE; /* "-r" option is not set */ static bool quiet = FALSE; static bool literal = FALSE; static const char *bool_sep = ":"; static const char *s_absent = "NULL"; static const char *s_cancel = "NULL"; static const char *tversion; /* terminfo version selected */ static unsigned itrace; /* trace flag for debugging */ static int mwidth = 60; static int mheight = 65535; static int numbers = 0; /* format "%'char'" to/from "%{number}" */ static int outform = F_TERMINFO; /* output format */ static int sortmode; /* sort_mode */ /* main comparison mode */ static int compare; #define C_DEFAULT 0 /* don't force comparison mode */ #define C_DIFFERENCE 1 /* list differences between two terminals */ #define C_COMMON 2 /* list common capabilities */ #define C_NAND 3 /* list capabilities in neither terminal */ #define C_USEALL 4 /* generate relative use-form entry */ static bool ignorepads; /* ignore pad prefixes when diffing */ #if NO_LEAKS typedef struct { ENTRY *head; ENTRY *tail; } ENTERED; static ENTERED *entered; #undef ExitProgram static void ExitProgram(int code) GCC_NORETURN; /* prototype is to get gcc to accept the noreturn attribute */ static void ExitProgram(int code) { int n; for (n = 0; n < termcount; ++n) { ENTRY *new_head = _nc_head; ENTRY *new_tail = _nc_tail; _nc_head = entered[n].head; _nc_tail = entered[n].tail; _nc_free_entries(entered[n].head); _nc_head = new_head; _nc_tail = new_tail; } _nc_leaks_dump_entry(); free(entries); free(entered); _nc_free_tic(code); } #endif static void failed(const char *s) { perror(s); ExitProgram(EXIT_FAILURE); } static char * canonical_name(char *ptr, char *buf) /* extract the terminal type's primary name */ { char *bp; _nc_STRCPY(buf, ptr, NAMESIZE); if ((bp = strchr(buf, '|')) != 0) *bp = '\0'; return (buf); } /*************************************************************************** * * Predicates for dump function * ***************************************************************************/ static int capcmp(PredIdx idx, const char *s, const char *t) /* capability comparison function */ { if (!VALID_STRING(s) && !VALID_STRING(t)) return (s != t); else if (!VALID_STRING(s) || !VALID_STRING(t)) return (1); if ((idx == acs_chars_index) || !ignorepads) return (strcmp(s, t)); else return (_nc_capcmp(s, t)); } static int use_predicate(unsigned type, PredIdx idx) /* predicate function to use for use decompilation */ { ENTRY *ep; switch (type) { case BOOLEAN: { int is_set = FALSE; /* * This assumes that multiple use entries are supposed * to contribute the logical or of their boolean capabilities. * This is true if we take the semantics of multiple uses to * be 'each capability gets the first non-default value found * in the sequence of use entries'. * * Note that cancelled or absent booleans are stored as FALSE, * unlike numbers and strings, whose cancelled/absent state is * recorded in the terminfo database. */ for (ep = &entries[1]; ep < entries + termcount; ep++) if (ep->tterm.Booleans[idx] == TRUE) { is_set = entries[0].tterm.Booleans[idx]; break; } if (is_set != entries[0].tterm.Booleans[idx]) return (!is_set); else return (FAIL); } case NUMBER: { int value = ABSENT_NUMERIC; /* * We take the semantics of multiple uses to be 'each * capability gets the first non-default value found * in the sequence of use entries'. */ for (ep = &entries[1]; ep < entries + termcount; ep++) if (VALID_NUMERIC(ep->tterm.Numbers[idx])) { value = ep->tterm.Numbers[idx]; break; } if (value != entries[0].tterm.Numbers[idx]) return (value != ABSENT_NUMERIC); else return (FAIL); } case STRING: { char *termstr, *usestr = ABSENT_STRING; termstr = entries[0].tterm.Strings[idx]; /* * We take the semantics of multiple uses to be 'each * capability gets the first non-default value found * in the sequence of use entries'. */ for (ep = &entries[1]; ep < entries + termcount; ep++) if (ep->tterm.Strings[idx]) { usestr = ep->tterm.Strings[idx]; break; } if (usestr == ABSENT_STRING && termstr == ABSENT_STRING) return (FAIL); else if (!usestr || !termstr || capcmp(idx, usestr, termstr)) return (TRUE); else return (FAIL); } } return (FALSE); /* pacify compiler */ } static bool useeq(ENTRY * e1, ENTRY * e2) /* are the use references in two entries equivalent? */ { unsigned i, j; if (e1->nuses != e2->nuses) return (FALSE); /* Ugh...this is quadratic again */ for (i = 0; i < e1->nuses; i++) { bool foundmatch = FALSE; /* search second entry for given use reference */ for (j = 0; j < e2->nuses; j++) if (!strcmp(e1->uses[i].name, e2->uses[j].name)) { foundmatch = TRUE; break; } if (!foundmatch) return (FALSE); } return (TRUE); } static bool entryeq(TERMTYPE *t1, TERMTYPE *t2) /* are two entries equivalent? */ { unsigned i; for (i = 0; i < NUM_BOOLEANS(t1); i++) if (t1->Booleans[i] != t2->Booleans[i]) return (FALSE); for (i = 0; i < NUM_NUMBERS(t1); i++) if (t1->Numbers[i] != t2->Numbers[i]) return (FALSE); for (i = 0; i < NUM_STRINGS(t1); i++) if (capcmp((PredIdx) i, t1->Strings[i], t2->Strings[i])) return (FALSE); return (TRUE); } #define TIC_EXPAND(result) _nc_tic_expand(result, outform==F_TERMINFO, numbers) static void print_uses(ENTRY * ep, FILE *fp) /* print an entry's use references */ { unsigned i; if (!ep->nuses) fputs("NULL", fp); else for (i = 0; i < ep->nuses; i++) { fputs(ep->uses[i].name, fp); if (i < ep->nuses - 1) fputs(" ", fp); } } static const char * dump_boolean(int val) /* display the value of a boolean capability */ { switch (val) { case ABSENT_BOOLEAN: return (s_absent); case CANCELLED_BOOLEAN: return (s_cancel); case FALSE: return ("F"); case TRUE: return ("T"); default: return ("?"); } } static void dump_numeric(int val, char *buf) /* display the value of a boolean capability */ { switch (val) { case ABSENT_NUMERIC: _nc_STRCPY(buf, s_absent, MAX_STRING); break; case CANCELLED_NUMERIC: _nc_STRCPY(buf, s_cancel, MAX_STRING); break; default: _nc_SPRINTF(buf, _nc_SLIMIT(MAX_STRING) "%d", val); break; } } static void dump_string(char *val, char *buf) /* display the value of a string capability */ { if (val == ABSENT_STRING) _nc_STRCPY(buf, s_absent, MAX_STRING); else if (val == CANCELLED_STRING) _nc_STRCPY(buf, s_cancel, MAX_STRING); else { _nc_SPRINTF(buf, _nc_SLIMIT(MAX_STRING) "'%.*s'", MAX_STRING - 3, TIC_EXPAND(val)); } } /* * Show "comparing..." message for the given terminal names. */ static void show_comparing(char **names) { if (itrace) { switch (compare) { case C_DIFFERENCE: (void) fprintf(stderr, "%s: dumping differences\n", _nc_progname); break; case C_COMMON: (void) fprintf(stderr, "%s: dumping common capabilities\n", _nc_progname); break; case C_NAND: (void) fprintf(stderr, "%s: dumping differences\n", _nc_progname); break; } } if (*names) { printf("comparing %s", *names++); if (*names) { printf(" to %s", *names++); while (*names) { printf(", %s", *names++); } } printf(".\n"); } } /* * ncurses stores two types of non-standard capabilities: * a) capabilities listed past the "STOP-HERE" comment in the Caps file. * These are used in the terminfo source file to provide data for termcaps, * e.g., when there is no equivalent capability in terminfo, as well as for * widely-used non-standard capabilities. * b) user-definable capabilities, via "tic -x". * * However, if "-x" is omitted from the tic command, both types of * non-standard capability are not loaded into the terminfo database. This * macro is used for limit-checks against the symbols that tic uses to omit * the two types of non-standard entry. */ #if NCURSES_XNAMES #define check_user_definable(n,limit) if (!_nc_user_definable && (n) > (limit)) break #else #define check_user_definable(n,limit) if ((n) > (limit)) break #endif /* * Use these macros to simplify loops on C_COMMON and C_NAND: */ #define for_each_entry() while (entries[extra].tterm.term_names) #define next_entry (&(entries[extra++].tterm)) static void compare_predicate(PredType type, PredIdx idx, const char *name) /* predicate function to use for entry difference reports */ { ENTRY *e1 = &entries[0]; ENTRY *e2 = &entries[1]; char buf1[MAX_STRING]; char buf2[MAX_STRING]; int b1, b2; int n1, n2; char *s1, *s2; bool found; int extra = 1; switch (type) { case CMP_BOOLEAN: check_user_definable(idx, BOOLWRITE); b1 = e1->tterm.Booleans[idx]; switch (compare) { case C_DIFFERENCE: b2 = next_entry->Booleans[idx]; if (!(b1 == ABSENT_BOOLEAN && b2 == ABSENT_BOOLEAN) && b1 != b2) (void) printf("\t%s: %s%s%s.\n", name, dump_boolean(b1), bool_sep, dump_boolean(b2)); break; case C_COMMON: if (b1 != ABSENT_BOOLEAN) { found = TRUE; for_each_entry() { b2 = next_entry->Booleans[idx]; if (b1 != b2) { found = FALSE; break; } } if (found) { (void) printf("\t%s= %s.\n", name, dump_boolean(b1)); } } break; case C_NAND: if (b1 == ABSENT_BOOLEAN) { found = TRUE; for_each_entry() { b2 = next_entry->Booleans[idx]; if (b1 != b2) { found = FALSE; break; } } if (found) { (void) printf("\t!%s.\n", name); } } break; } break; case CMP_NUMBER: check_user_definable(idx, NUMWRITE); n1 = e1->tterm.Numbers[idx]; switch (compare) { case C_DIFFERENCE: n2 = next_entry->Numbers[idx]; if (!((n1 == ABSENT_NUMERIC && n2 == ABSENT_NUMERIC)) && n1 != n2) { dump_numeric(n1, buf1); dump_numeric(n2, buf2); (void) printf("\t%s: %s, %s.\n", name, buf1, buf2); } break; case C_COMMON: if (n1 != ABSENT_NUMERIC) { found = TRUE; for_each_entry() { n2 = next_entry->Numbers[idx]; if (n1 != n2) { found = FALSE; break; } } if (found) { dump_numeric(n1, buf1); (void) printf("\t%s= %s.\n", name, buf1); } } break; case C_NAND: if (n1 == ABSENT_NUMERIC) { found = TRUE; for_each_entry() { n2 = next_entry->Numbers[idx]; if (n1 != n2) { found = FALSE; break; } } if (found) { (void) printf("\t!%s.\n", name); } } break; } break; case CMP_STRING: check_user_definable(idx, STRWRITE); s1 = e1->tterm.Strings[idx]; switch (compare) { case C_DIFFERENCE: s2 = next_entry->Strings[idx]; if (capcmp(idx, s1, s2)) { dump_string(s1, buf1); dump_string(s2, buf2); if (strcmp(buf1, buf2)) (void) printf("\t%s: %s, %s.\n", name, buf1, buf2); } break; case C_COMMON: if (s1 != ABSENT_STRING) { found = TRUE; for_each_entry() { s2 = next_entry->Strings[idx]; if (capcmp(idx, s1, s2) != 0) { found = FALSE; break; } } if (found) { (void) printf("\t%s= '%s'.\n", name, TIC_EXPAND(s1)); } } break; case C_NAND: if (s1 == ABSENT_STRING) { found = TRUE; for_each_entry() { s2 = next_entry->Strings[idx]; if (s2 != s1) { found = FALSE; break; } } if (found) { (void) printf("\t!%s.\n", name); } } break; } break; case CMP_USE: /* unlike the other modes, this compares *all* use entries */ switch (compare) { case C_DIFFERENCE: if (!useeq(e1, e2)) { (void) fputs("\tuse: ", stdout); print_uses(e1, stdout); fputs(", ", stdout); print_uses(e2, stdout); fputs(".\n", stdout); } break; case C_COMMON: if (e1->nuses) { found = TRUE; for_each_entry() { e2 = &entries[extra++]; if (e2->nuses != e1->nuses || !useeq(e1, e2)) { found = FALSE; break; } } if (found) { (void) fputs("\tuse: ", stdout); print_uses(e1, stdout); fputs(".\n", stdout); } } break; case C_NAND: if (!e1->nuses) { found = TRUE; for_each_entry() { e2 = &entries[extra++]; if (e2->nuses != e1->nuses) { found = FALSE; break; } } if (found) { (void) printf("\t!use.\n"); } } break; } } } /*************************************************************************** * * Init string analysis * ***************************************************************************/ #define DATA(from, to) { { from }, { to } } #define DATAX() DATA("", "") typedef struct { const char from[4]; const char to[12]; } assoc; static const assoc std_caps[] = { /* these are specified by X.364 and iBCS2 */ DATA("\033c", "RIS"), /* full reset */ DATA("\0337", "SC"), /* save cursor */ DATA("\0338", "RC"), /* restore cursor */ DATA("\033[r", "RSR"), /* not an X.364 mnemonic */ DATA("\033[m", "SGR0"), /* not an X.364 mnemonic */ DATA("\033[2J", "ED2"), /* clear page */ /* this group is specified by ISO 2022 */ DATA("\033(0", "ISO DEC G0"), /* enable DEC graphics for G0 */ DATA("\033(A", "ISO UK G0"), /* enable UK chars for G0 */ DATA("\033(B", "ISO US G0"), /* enable US chars for G0 */ DATA("\033)0", "ISO DEC G1"), /* enable DEC graphics for G1 */ DATA("\033)A", "ISO UK G1"), /* enable UK chars for G1 */ DATA("\033)B", "ISO US G1"), /* enable US chars for G1 */ /* these are DEC private controls widely supported by emulators */ DATA("\033=", "DECPAM"), /* application keypad mode */ DATA("\033>", "DECPNM"), /* normal keypad mode */ DATA("\033<", "DECANSI"), /* enter ANSI mode */ DATA("\033[!p", "DECSTR"), /* soft reset */ DATA("\033 F", "S7C1T"), /* 7-bit controls */ DATAX() }; static const assoc std_modes[] = /* ECMA \E[ ... [hl] modes recognized by many emulators */ { DATA("2", "AM"), /* keyboard action mode */ DATA("4", "IRM"), /* insert/replace mode */ DATA("12", "SRM"), /* send/receive mode */ DATA("20", "LNM"), /* linefeed mode */ DATAX() }; static const assoc private_modes[] = /* DEC \E[ ... [hl] modes recognized by many emulators */ { DATA("1", "CKM"), /* application cursor keys */ DATA("2", "ANM"), /* set VT52 mode */ DATA("3", "COLM"), /* 132-column mode */ DATA("4", "SCLM"), /* smooth scroll */ DATA("5", "SCNM"), /* reverse video mode */ DATA("6", "OM"), /* origin mode */ DATA("7", "AWM"), /* wraparound mode */ DATA("8", "ARM"), /* auto-repeat mode */ DATAX() }; static const assoc ecma_highlights[] = /* recognize ECMA attribute sequences */ { DATA("0", "NORMAL"), /* normal */ DATA("1", "+BOLD"), /* bold on */ DATA("2", "+DIM"), /* dim on */ DATA("3", "+ITALIC"), /* italic on */ DATA("4", "+UNDERLINE"), /* underline on */ DATA("5", "+BLINK"), /* blink on */ DATA("6", "+FASTBLINK"), /* fastblink on */ DATA("7", "+REVERSE"), /* reverse on */ DATA("8", "+INVISIBLE"), /* invisible on */ DATA("9", "+DELETED"), /* deleted on */ DATA("10", "MAIN-FONT"), /* select primary font */ DATA("11", "ALT-FONT-1"), /* select alternate font 1 */ DATA("12", "ALT-FONT-2"), /* select alternate font 2 */ DATA("13", "ALT-FONT-3"), /* select alternate font 3 */ DATA("14", "ALT-FONT-4"), /* select alternate font 4 */ DATA("15", "ALT-FONT-5"), /* select alternate font 5 */ DATA("16", "ALT-FONT-6"), /* select alternate font 6 */ DATA("17", "ALT-FONT-7"), /* select alternate font 7 */ DATA("18", "ALT-FONT-1"), /* select alternate font 1 */ DATA("19", "ALT-FONT-1"), /* select alternate font 1 */ DATA("20", "FRAKTUR"), /* Fraktur font */ DATA("21", "DOUBLEUNDER"), /* double underline */ DATA("22", "-DIM"), /* dim off */ DATA("23", "-ITALIC"), /* italic off */ DATA("24", "-UNDERLINE"), /* underline off */ DATA("25", "-BLINK"), /* blink off */ DATA("26", "-FASTBLINK"), /* fastblink off */ DATA("27", "-REVERSE"), /* reverse off */ DATA("28", "-INVISIBLE"), /* invisible off */ DATA("29", "-DELETED"), /* deleted off */ DATAX() }; #undef DATA static int skip_csi(const char *cap) { int result = 0; if (cap[0] == '\033' && cap[1] == '[') result = 2; else if (UChar(cap[0]) == 0233) result = 1; return result; } static bool same_param(const char *table, const char *param, size_t length) { bool result = FALSE; if (strncmp(table, param, length) == 0) { result = !isdigit(UChar(param[length])); } return result; } static char * lookup_params(const assoc * table, char *dst, char *src) { char *result = 0; const char *ep = strtok(src, ";"); if (ep != 0) { const assoc *ap; do { bool found = FALSE; for (ap = table; ap->from[0]; ap++) { size_t tlen = strlen(ap->from); if (same_param(ap->from, ep, tlen)) { _nc_STRCAT(dst, ap->to, MAX_TERMINFO_LENGTH); found = TRUE; break; } } if (!found) _nc_STRCAT(dst, ep, MAX_TERMINFO_LENGTH); _nc_STRCAT(dst, ";", MAX_TERMINFO_LENGTH); } while ((ep = strtok((char *) 0, ";"))); dst[strlen(dst) - 1] = '\0'; result = dst; } return result; } static void analyze_string(const char *name, const char *cap, TERMTYPE *tp) { char buf2[MAX_TERMINFO_LENGTH]; const char *sp; const assoc *ap; int tp_lines = tp->Numbers[2]; if (!VALID_STRING(cap)) return; (void) printf("%s: ", name); for (sp = cap; *sp; sp++) { int i; int csi; size_t len = 0; size_t next; const char *expansion = 0; char buf3[MAX_TERMINFO_LENGTH]; /* first, check other capabilities in this entry */ for (i = 0; i < STRCOUNT; i++) { char *cp = tp->Strings[i]; /* don't use function-key capabilities */ if (strnames[i][0] == 'k' && strnames[i][1] == 'f') continue; if (VALID_STRING(cp) && cp[0] != '\0' && cp != cap) { len = strlen(cp); (void) strncpy(buf2, sp, len); buf2[len] = '\0'; if (_nc_capcmp(cp, buf2)) continue; #define ISRS(s) (!strncmp((s), "is", (size_t) 2) || !strncmp((s), "rs", (size_t) 2)) /* * Theoretically we just passed the test for translation * (equality once the padding is stripped). However, there * are a few more hoops that need to be jumped so that * identical pairs of initialization and reset strings * don't just refer to each other. */ if (ISRS(name) || ISRS(strnames[i])) if (cap < cp) continue; #undef ISRS expansion = strnames[i]; break; } } /* now check the standard capabilities */ if (!expansion) { csi = skip_csi(sp); for (ap = std_caps; ap->from[0]; ap++) { size_t adj = (size_t) (csi ? 2 : 0); len = strlen(ap->from); if (csi && skip_csi(ap->from) != csi) continue; if (len > adj && strncmp(ap->from + adj, sp + csi, len - adj) == 0) { expansion = ap->to; len -= adj; len += (size_t) csi; break; } } } /* now check for standard-mode sequences */ if (!expansion && (csi = skip_csi(sp)) != 0 && (len = (strspn) (sp + csi, "0123456789;")) && (len < sizeof(buf3)) && (next = (size_t) csi + len) && ((sp[next] == 'h') || (sp[next] == 'l'))) { _nc_STRCPY(buf2, ((sp[next] == 'h') ? "ECMA+" : "ECMA-"), sizeof(buf2)); (void) strncpy(buf3, sp + csi, len); buf3[len] = '\0'; len += (size_t) csi + 1; expansion = lookup_params(std_modes, buf2, buf3); } /* now check for private-mode sequences */ if (!expansion && (csi = skip_csi(sp)) != 0 && sp[csi] == '?' && (len = (strspn) (sp + csi + 1, "0123456789;")) && (len < sizeof(buf3)) && (next = (size_t) csi + 1 + len) && ((sp[next] == 'h') || (sp[next] == 'l'))) { _nc_STRCPY(buf2, ((sp[next] == 'h') ? "DEC+" : "DEC-"), sizeof(buf2)); (void) strncpy(buf3, sp + csi + 1, len); buf3[len] = '\0'; len += (size_t) csi + 2; expansion = lookup_params(private_modes, buf2, buf3); } /* now check for ECMA highlight sequences */ if (!expansion && (csi = skip_csi(sp)) != 0 && (len = (strspn) (sp + csi, "0123456789;")) != 0 && (len < sizeof(buf3)) && (next = (size_t) csi + len) && sp[next] == 'm') { _nc_STRCPY(buf2, "SGR:", sizeof(buf2)); (void) strncpy(buf3, sp + csi, len); buf3[len] = '\0'; len += (size_t) csi + 1; expansion = lookup_params(ecma_highlights, buf2, buf3); } if (!expansion && (csi = skip_csi(sp)) != 0 && sp[csi] == 'm') { len = (size_t) csi + 1; _nc_STRCPY(buf2, "SGR:", sizeof(buf2)); _nc_STRCAT(buf2, ecma_highlights[0].to, sizeof(buf2)); expansion = buf2; } /* now check for scroll region reset */ if (!expansion && (csi = skip_csi(sp)) != 0) { if (sp[csi] == 'r') { expansion = "RSR"; len = 1; } else { _nc_SPRINTF(buf2, _nc_SLIMIT(sizeof(buf2)) "1;%dr", tp_lines); len = strlen(buf2); if (strncmp(buf2, sp + csi, len) == 0) expansion = "RSR"; } len += (size_t) csi; } /* now check for home-down */ if (!expansion && (csi = skip_csi(sp)) != 0) { _nc_SPRINTF(buf2, _nc_SLIMIT(sizeof(buf2)) "%d;1H", tp_lines); len = strlen(buf2); if (strncmp(buf2, sp + csi, len) == 0) { expansion = "LL"; } else { _nc_SPRINTF(buf2, _nc_SLIMIT(sizeof(buf2)) "%dH", tp_lines); len = strlen(buf2); if (strncmp(buf2, sp + csi, len) == 0) { expansion = "LL"; } } len += (size_t) csi; } /* now look at the expansion we got, if any */ if (expansion) { printf("{%s}", expansion); sp += len - 1; } else { /* couldn't match anything */ buf2[0] = *sp; buf2[1] = '\0'; fputs(TIC_EXPAND(buf2), stdout); } } putchar('\n'); } /*************************************************************************** * * File comparison * ***************************************************************************/ static void file_comparison(int argc, char *argv[]) { #define MAXCOMPARE 2 /* someday we may allow comparisons on more files */ int filecount = 0; ENTRY *heads[MAXCOMPARE]; ENTRY *qp, *rp; int i, n; memset(heads, 0, sizeof(heads)); dump_init((char *) 0, F_LITERAL, S_TERMINFO, 0, 65535, itrace, FALSE, FALSE, FALSE); for (n = 0; n < argc && n < MAXCOMPARE; n++) { if (freopen(argv[n], "r", stdin) == 0) _nc_err_abort("Can't open %s", argv[n]); #if NO_LEAKS entered[n].head = _nc_head; entered[n].tail = _nc_tail; #endif _nc_head = _nc_tail = 0; /* parse entries out of the source file */ _nc_set_source(argv[n]); _nc_read_entry_source(stdin, NULL, TRUE, literal, NULLHOOK); if (itrace) (void) fprintf(stderr, "Resolving file %d...\n", n - 0); /* maybe do use resolution */ if (!_nc_resolve_uses2(!limited, literal)) { (void) fprintf(stderr, "There are unresolved use entries in %s:\n", argv[n]); for_entry_list(qp) { if (qp->nuses) { (void) fputs(qp->tterm.term_names, stderr); (void) fputc('\n', stderr); } } ExitProgram(EXIT_FAILURE); } heads[filecount] = _nc_head; filecount++; } /* OK, all entries are in core. Ready to do the comparison */ if (itrace) (void) fprintf(stderr, "Entries are now in core...\n"); /* The entry-matching loop. Sigh, this is intrinsically quadratic. */ for (qp = heads[0]; qp; qp = qp->next) { for (rp = heads[1]; rp; rp = rp->next) if (_nc_entry_match(qp->tterm.term_names, rp->tterm.term_names)) { if (qp->ncrosslinks < MAX_CROSSLINKS) qp->crosslinks[qp->ncrosslinks] = rp; qp->ncrosslinks++; if (rp->ncrosslinks < MAX_CROSSLINKS) rp->crosslinks[rp->ncrosslinks] = qp; rp->ncrosslinks++; } } /* now we have two circular lists with crosslinks */ if (itrace) (void) fprintf(stderr, "Name matches are done...\n"); for (qp = heads[0]; qp; qp = qp->next) { if (qp->ncrosslinks > 1) { (void) fprintf(stderr, "%s in file 1 (%s) has %d matches in file 2 (%s):\n", _nc_first_name(qp->tterm.term_names), argv[0], qp->ncrosslinks, argv[1]); for (i = 0; i < qp->ncrosslinks; i++) (void) fprintf(stderr, "\t%s\n", _nc_first_name((qp->crosslinks[i])->tterm.term_names)); } } for (rp = heads[1]; rp; rp = rp->next) { if (rp->ncrosslinks > 1) { (void) fprintf(stderr, "%s in file 2 (%s) has %d matches in file 1 (%s):\n", _nc_first_name(rp->tterm.term_names), argv[1], rp->ncrosslinks, argv[0]); for (i = 0; i < rp->ncrosslinks; i++) (void) fprintf(stderr, "\t%s\n", _nc_first_name((rp->crosslinks[i])->tterm.term_names)); } } (void) printf("In file 1 (%s) only:\n", argv[0]); for (qp = heads[0]; qp; qp = qp->next) if (qp->ncrosslinks == 0) (void) printf("\t%s\n", _nc_first_name(qp->tterm.term_names)); (void) printf("In file 2 (%s) only:\n", argv[1]); for (rp = heads[1]; rp; rp = rp->next) if (rp->ncrosslinks == 0) (void) printf("\t%s\n", _nc_first_name(rp->tterm.term_names)); (void) printf("The following entries are equivalent:\n"); for (qp = heads[0]; qp; qp = qp->next) { if (qp->ncrosslinks == 1) { rp = qp->crosslinks[0]; repair_acsc(&qp->tterm); repair_acsc(&rp->tterm); #if NCURSES_XNAMES _nc_align_termtype(&qp->tterm, &rp->tterm); #endif if (entryeq(&qp->tterm, &rp->tterm) && useeq(qp, rp)) { char name1[NAMESIZE], name2[NAMESIZE]; (void) canonical_name(qp->tterm.term_names, name1); (void) canonical_name(rp->tterm.term_names, name2); (void) printf("%s = %s\n", name1, name2); } } } (void) printf("Differing entries:\n"); termcount = 2; for (qp = heads[0]; qp; qp = qp->next) { if (qp->ncrosslinks == 1) { rp = qp->crosslinks[0]; #if NCURSES_XNAMES /* sorry - we have to do this on each pass */ _nc_align_termtype(&qp->tterm, &rp->tterm); #endif if (!(entryeq(&qp->tterm, &rp->tterm) && useeq(qp, rp))) { char name1[NAMESIZE], name2[NAMESIZE]; char *names[3]; names[0] = name1; names[1] = name2; names[2] = 0; entries[0] = *qp; entries[1] = *rp; (void) canonical_name(qp->tterm.term_names, name1); (void) canonical_name(rp->tterm.term_names, name2); switch (compare) { case C_DIFFERENCE: show_comparing(names); compare_entry(compare_predicate, &entries->tterm, quiet); break; case C_COMMON: show_comparing(names); compare_entry(compare_predicate, &entries->tterm, quiet); break; case C_NAND: show_comparing(names); compare_entry(compare_predicate, &entries->tterm, quiet); break; } } } } } static void usage(void) { #define DATA(s) s "\n" static const char head[] = { DATA("Usage: infocmp [options] [-A directory] [-B directory] [termname...]") DATA("") DATA("Options:") }; #undef DATA #define DATA(s) s static const char options[][45] = { " -0 print single-row" ," -1 print single-column" ," -C use termcap-names" ," -D print database locations" ," -E format output as C tables" ," -F compare terminfo-files" ," -G format %{number} to %'char'" ," -I use terminfo-names" ," -K use termcap-names and BSD syntax" ," -L use long names" ," -R subset (see manpage)" ," -T eliminate size limits (test)" ," -U do not post-process entries" ," -V print version" #if NCURSES_XNAMES ," -a with -F, list commented-out caps" #endif ," -c list common capabilities" ," -d list different capabilities" ," -e format output for C initializer" ," -f with -1, format complex strings" ," -g format %'char' to %{number}" ," -i analyze initialization/reset" ," -l output terminfo names" ," -n list capabilities in neither" ," -p ignore padding specifiers" ," -Q number dump compiled description" ," -q brief listing, removes headers" ," -r with -C, output in termcap form" ," -r with -F, resolve use-references" ," -s [d|i|l|c] sort fields" #if NCURSES_XNAMES ," -t suppress commented-out capabilities" #endif ," -u produce source with 'use='" ," -v number (verbose)" ," -w number (width)" #if NCURSES_XNAMES ," -x unknown capabilities are user-defined" #endif }; #undef DATA const size_t last = SIZEOF(options); const size_t left = (last + 1) / 2; size_t n; fputs(head, stderr); for (n = 0; n < left; n++) { size_t m = n + left; if (m < last) fprintf(stderr, "%-40.40s%s\n", options[n], options[m]); else fprintf(stderr, "%s\n", options[n]); } ExitProgram(EXIT_FAILURE); } static char * any_initializer(const char *fmt, const char *type) { static char *initializer; static size_t need; char *s; if (initializer == 0) { need = (strlen(entries->tterm.term_names) + strlen(type) + strlen(fmt)); initializer = (char *) malloc(need + 1); if (initializer == 0) failed("any_initializer"); } _nc_STRCPY(initializer, entries->tterm.term_names, need); for (s = initializer; *s != 0 && *s != '|'; s++) { if (!isalnum(UChar(*s))) *s = '_'; } *s = 0; _nc_SPRINTF(s, _nc_SLIMIT(need) fmt, type); return initializer; } static char * name_initializer(const char *type) { return any_initializer("_%s_data", type); } static char * string_variable(const char *type) { return any_initializer("_s_%s", type); } /* dump C initializers for the terminal type */ static void dump_initializers(TERMTYPE *term) { unsigned n; const char *str = 0; printf("\nstatic char %s[] = \"%s\";\n\n", name_initializer("alias"), entries->tterm.term_names); for_each_string(n, term) { char buf[MAX_STRING], *sp, *tp; if (VALID_STRING(term->Strings[n])) { tp = buf; #define TP_LIMIT ((MAX_STRING - 5) - (size_t)(tp - buf)) *tp++ = '"'; for (sp = term->Strings[n]; *sp != 0 && TP_LIMIT > 2; sp++) { if (isascii(UChar(*sp)) && isprint(UChar(*sp)) && *sp != '\\' && *sp != '"') *tp++ = *sp; else { _nc_SPRINTF(tp, _nc_SLIMIT(TP_LIMIT) "\\%03o", UChar(*sp)); tp += 4; } } *tp++ = '"'; *tp = '\0'; (void) printf("static char %-20s[] = %s;\n", string_variable(ExtStrname(term, (int) n, strnames)), buf); } } printf("\n"); (void) printf("static char %s[] = %s\n", name_initializer("bool"), L_CURL); for_each_boolean(n, term) { switch ((int) (term->Booleans[n])) { case TRUE: str = "TRUE"; break; case FALSE: str = "FALSE"; break; case ABSENT_BOOLEAN: str = "ABSENT_BOOLEAN"; break; case CANCELLED_BOOLEAN: str = "CANCELLED_BOOLEAN"; break; } (void) printf("\t/* %3u: %-8s */\t%s,\n", n, ExtBoolname(term, (int) n, boolnames), str); } (void) printf("%s;\n", R_CURL); (void) printf("static short %s[] = %s\n", name_initializer("number"), L_CURL); for_each_number(n, term) { char buf[BUFSIZ]; switch (term->Numbers[n]) { case ABSENT_NUMERIC: str = "ABSENT_NUMERIC"; break; case CANCELLED_NUMERIC: str = "CANCELLED_NUMERIC"; break; default: _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) "%d", term->Numbers[n]); str = buf; break; } (void) printf("\t/* %3u: %-8s */\t%s,\n", n, ExtNumname(term, (int) n, numnames), str); } (void) printf("%s;\n", R_CURL); (void) printf("static char * %s[] = %s\n", name_initializer("string"), L_CURL); for_each_string(n, term) { if (term->Strings[n] == ABSENT_STRING) str = "ABSENT_STRING"; else if (term->Strings[n] == CANCELLED_STRING) str = "CANCELLED_STRING"; else { str = string_variable(ExtStrname(term, (int) n, strnames)); } (void) printf("\t/* %3u: %-8s */\t%s,\n", n, ExtStrname(term, (int) n, strnames), str); } (void) printf("%s;\n", R_CURL); #if NCURSES_XNAMES if ((NUM_BOOLEANS(term) != BOOLCOUNT) || (NUM_NUMBERS(term) != NUMCOUNT) || (NUM_STRINGS(term) != STRCOUNT)) { (void) printf("static char * %s[] = %s\n", name_initializer("string_ext"), L_CURL); for (n = BOOLCOUNT; n < NUM_BOOLEANS(term); ++n) { (void) printf("\t/* %3u: bool */\t\"%s\",\n", n, ExtBoolname(term, (int) n, boolnames)); } for (n = NUMCOUNT; n < NUM_NUMBERS(term); ++n) { (void) printf("\t/* %3u: num */\t\"%s\",\n", n, ExtNumname(term, (int) n, numnames)); } for (n = STRCOUNT; n < NUM_STRINGS(term); ++n) { (void) printf("\t/* %3u: str */\t\"%s\",\n", n, ExtStrname(term, (int) n, strnames)); } (void) printf("%s;\n", R_CURL); } #endif } /* dump C initializers for the terminal type */ static void dump_termtype(TERMTYPE *term) { (void) printf("\t%s\n\t\t%s,\n", L_CURL, name_initializer("alias")); (void) printf("\t\t(char *)0,\t/* pointer to string table */\n"); (void) printf("\t\t%s,\n", name_initializer("bool")); (void) printf("\t\t%s,\n", name_initializer("number")); (void) printf("\t\t%s,\n", name_initializer("string")); #if NCURSES_XNAMES (void) printf("#if NCURSES_XNAMES\n"); (void) printf("\t\t(char *)0,\t/* pointer to extended string table */\n"); (void) printf("\t\t%s,\t/* ...corresponding names */\n", ((NUM_BOOLEANS(term) != BOOLCOUNT) || (NUM_NUMBERS(term) != NUMCOUNT) || (NUM_STRINGS(term) != STRCOUNT)) ? name_initializer("string_ext") : "(char **)0"); (void) printf("\t\t%d,\t\t/* count total Booleans */\n", NUM_BOOLEANS(term)); (void) printf("\t\t%d,\t\t/* count total Numbers */\n", NUM_NUMBERS(term)); (void) printf("\t\t%d,\t\t/* count total Strings */\n", NUM_STRINGS(term)); (void) printf("\t\t%d,\t\t/* count extensions to Booleans */\n", NUM_BOOLEANS(term) - BOOLCOUNT); (void) printf("\t\t%d,\t\t/* count extensions to Numbers */\n", NUM_NUMBERS(term) - NUMCOUNT); (void) printf("\t\t%d,\t\t/* count extensions to Strings */\n", NUM_STRINGS(term) - STRCOUNT); (void) printf("#endif /* NCURSES_XNAMES */\n"); #else (void) term; #endif /* NCURSES_XNAMES */ (void) printf("\t%s\n", R_CURL); } static int optarg_to_number(void) { char *temp = 0; long value = strtol(optarg, &temp, 0); if (temp == 0 || temp == optarg || *temp != 0) { fprintf(stderr, "Expected a number, not \"%s\"\n", optarg); ExitProgram(EXIT_FAILURE); } return (int) value; } static char * terminal_env(void) { char *terminal; if ((terminal = getenv("TERM")) == 0) { (void) fprintf(stderr, "%s: environment variable TERM not set\n", _nc_progname); exit(EXIT_FAILURE); } return terminal; } /* * Show the databases that infocmp knows about. The location to which it writes is */ static void show_databases(void) { DBDIRS state; int offset; const char *path2; _nc_first_db(&state, &offset); while ((path2 = _nc_next_db(&state, &offset)) != 0) { printf("%s\n", path2); } _nc_last_db(); } /*************************************************************************** * * Main sequence * ***************************************************************************/ #if NO_LEAKS #define MAIN_LEAKS() \ free(myargv); \ free(tfile); \ free(tname) #else #define MAIN_LEAKS() /* nothing */ #endif int main(int argc, char *argv[]) { /* Avoid "local data >32k" error with mwcc */ /* Also avoid overflowing smaller stacks on systems like AmigaOS */ path *tfile = 0; char **tname = 0; size_t maxterms; char **myargv; char *firstdir, *restdir; int c, i, len; bool formatted = FALSE; bool filecompare = FALSE; int initdump = 0; bool init_analyze = FALSE; bool suppress_untranslatable = FALSE; int quickdump = 0; /* where is the terminfo database location going to default to? */ restdir = firstdir = 0; #if NCURSES_XNAMES use_extended_names(FALSE); #endif _nc_strict_bsd = 0; _nc_progname = _nc_rootname(argv[0]); /* make sure we have enough space to add two terminal entries */ myargv = typeCalloc(char *, (size_t) (argc + 3)); if (myargv == 0) failed("myargv"); memcpy(myargv, argv, (sizeof(char *) * (size_t) argc)); argv = myargv; while ((c = getopt(argc, argv, "01A:aB:CcDdEeFfGgIiKLlnpQ:qR:rs:TtUuVv:w:x")) != -1) { switch (c) { case '0': mwidth = 65535; mheight = 1; break; case '1': mwidth = 0; break; case 'A': firstdir = optarg; break; #if NCURSES_XNAMES case 'a': _nc_disable_period = TRUE; use_extended_names(TRUE); break; #endif case 'B': restdir = optarg; break; case 'K': _nc_strict_bsd = 1; /* FALLTHRU */ case 'C': outform = F_TERMCAP; tversion = "BSD"; if (sortmode == S_DEFAULT) sortmode = S_TERMCAP; break; case 'D': show_databases(); ExitProgram(EXIT_SUCCESS); break; case 'c': compare = C_COMMON; break; case 'd': compare = C_DIFFERENCE; break; case 'E': initdump |= 2; break; case 'e': initdump |= 1; break; case 'F': filecompare = TRUE; break; case 'f': formatted = TRUE; break; case 'G': numbers = 1; break; case 'g': numbers = -1; break; case 'I': outform = F_TERMINFO; if (sortmode == S_DEFAULT) sortmode = S_VARIABLE; tversion = 0; break; case 'i': init_analyze = TRUE; break; case 'L': outform = F_VARIABLE; if (sortmode == S_DEFAULT) sortmode = S_VARIABLE; break; case 'l': outform = F_TERMINFO; break; case 'n': compare = C_NAND; break; case 'p': ignorepads = TRUE; break; case 'Q': quickdump = optarg_to_number(); break; case 'q': quiet = TRUE; s_absent = "-"; s_cancel = "@"; bool_sep = ", "; break; case 'R': tversion = optarg; break; case 'r': tversion = 0; break; case 's': if (*optarg == 'd') sortmode = S_NOSORT; else if (*optarg == 'i') sortmode = S_TERMINFO; else if (*optarg == 'l') sortmode = S_VARIABLE; else if (*optarg == 'c') sortmode = S_TERMCAP; else { (void) fprintf(stderr, "%s: unknown sort mode\n", _nc_progname); ExitProgram(EXIT_FAILURE); } break; case 'T': limited = FALSE; break; #if NCURSES_XNAMES case 't': _nc_disable_period = FALSE; suppress_untranslatable = TRUE; break; #endif case 'U': literal = TRUE; break; case 'u': compare = C_USEALL; break; case 'V': puts(curses_version()); ExitProgram(EXIT_SUCCESS); case 'v': itrace = (unsigned) optarg_to_number(); set_trace_level(itrace); break; case 'w': mwidth = optarg_to_number(); break; #if NCURSES_XNAMES case 'x': use_extended_names(TRUE); break; #endif default: usage(); } } maxterms = (size_t) (argc + 2 - optind); if ((tfile = typeMalloc(path, maxterms)) == 0) failed("tfile"); if ((tname = typeCalloc(char *, maxterms)) == 0) failed("tname"); if ((entries = typeCalloc(ENTRY, maxterms)) == 0) failed("entries"); #if NO_LEAKS if ((entered = typeCalloc(ENTERED, maxterms)) == 0) failed("entered"); #endif if (tfile == 0 || tname == 0 || entries == 0) { fprintf(stderr, "%s: not enough memory\n", _nc_progname); ExitProgram(EXIT_FAILURE); } /* by default, sort by terminfo name */ if (sortmode == S_DEFAULT) sortmode = S_TERMINFO; /* make sure we have at least one terminal name to work with */ if (optind >= argc) argv[argc++] = terminal_env(); /* if user is after a comparison, make sure we have two entries */ if (compare != C_DEFAULT && optind >= argc - 1) argv[argc++] = terminal_env(); /* exactly one terminal name with no options means display it */ /* exactly two terminal names with no options means do -d */ if (compare == C_DEFAULT) { switch (argc - optind) { default: fprintf(stderr, "%s: too many names to compare\n", _nc_progname); ExitProgram(EXIT_FAILURE); case 1: break; case 2: compare = C_DIFFERENCE; break; } } /* set up for display */ dump_init(tversion, outform, sortmode, mwidth, mheight, itrace, formatted, FALSE, quickdump); if (!filecompare) { /* grab the entries */ termcount = 0; for (; optind < argc; optind++) { const char *directory = termcount ? restdir : firstdir; int status; tname[termcount] = argv[optind]; if (directory) { #if NCURSES_USE_DATABASE #if MIXEDCASE_FILENAMES #define LEAF_FMT "%c" #else #define LEAF_FMT "%02x" #endif _nc_SPRINTF(tfile[termcount], _nc_SLIMIT(sizeof(path)) "%s/" LEAF_FMT "/%s", directory, UChar(*argv[optind]), argv[optind]); if (itrace) (void) fprintf(stderr, "%s: reading entry %s from file %s\n", _nc_progname, argv[optind], tfile[termcount]); status = _nc_read_file_entry(tfile[termcount], &entries[termcount].tterm); #else (void) fprintf(stderr, "%s: terminfo files not supported\n", _nc_progname); MAIN_LEAKS(); ExitProgram(EXIT_FAILURE); #endif } else { if (itrace) (void) fprintf(stderr, "%s: reading entry %s from database\n", _nc_progname, tname[termcount]); status = _nc_read_entry(tname[termcount], tfile[termcount], &entries[termcount].tterm); } if (status <= 0) { (void) fprintf(stderr, "%s: couldn't open terminfo file %s.\n", _nc_progname, tfile[termcount]); MAIN_LEAKS(); ExitProgram(EXIT_FAILURE); } repair_acsc(&entries[termcount].tterm); termcount++; } #if NCURSES_XNAMES if (termcount > 1) _nc_align_termtype(&entries[0].tterm, &entries[1].tterm); #endif /* dump as C initializer for the terminal type */ if (initdump) { if (initdump & 1) dump_termtype(&entries[0].tterm); if (initdump & 2) dump_initializers(&entries[0].tterm); } /* analyze the init strings */ else if (init_analyze) { #undef CUR #define CUR entries[0].tterm. analyze_string("is1", init_1string, &entries[0].tterm); analyze_string("is2", init_2string, &entries[0].tterm); analyze_string("is3", init_3string, &entries[0].tterm); analyze_string("rs1", reset_1string, &entries[0].tterm); analyze_string("rs2", reset_2string, &entries[0].tterm); analyze_string("rs3", reset_3string, &entries[0].tterm); analyze_string("smcup", enter_ca_mode, &entries[0].tterm); analyze_string("rmcup", exit_ca_mode, &entries[0].tterm); analyze_string("smkx", keypad_xmit, &entries[0].tterm); analyze_string("rmkx", keypad_local, &entries[0].tterm); #undef CUR } else { /* * Here's where the real work gets done */ switch (compare) { case C_DEFAULT: if (itrace) (void) fprintf(stderr, "%s: about to dump %s\n", _nc_progname, tname[0]); if (!quiet) (void) printf("#\tReconstructed via infocmp from file: %s\n", tfile[0]); dump_entry(&entries[0].tterm, suppress_untranslatable, limited, numbers, NULL); len = show_entry(); if (itrace) (void) fprintf(stderr, "%s: length %d\n", _nc_progname, len); break; case C_DIFFERENCE: show_comparing(tname); compare_entry(compare_predicate, &entries->tterm, quiet); break; case C_COMMON: show_comparing(tname); compare_entry(compare_predicate, &entries->tterm, quiet); break; case C_NAND: show_comparing(tname); compare_entry(compare_predicate, &entries->tterm, quiet); break; case C_USEALL: if (itrace) (void) fprintf(stderr, "%s: dumping use entry\n", _nc_progname); dump_entry(&entries[0].tterm, suppress_untranslatable, limited, numbers, use_predicate); for (i = 1; i < termcount; i++) dump_uses(tname[i], !(outform == F_TERMCAP || outform == F_TCONVERR)); len = show_entry(); if (itrace) (void) fprintf(stderr, "%s: length %d\n", _nc_progname, len); break; } } } else if (compare == C_USEALL) { (void) fprintf(stderr, "Sorry, -u doesn't work with -F\n"); } else if (compare == C_DEFAULT) { (void) fprintf(stderr, "Use `tic -[CI] ' for this.\n"); } else if (argc - optind != 2) { (void) fprintf(stderr, "File comparison needs exactly two file arguments.\n"); } else { file_comparison(argc - optind, argv + optind); } MAIN_LEAKS(); ExitProgram(EXIT_SUCCESS); } /* infocmp.c ends here */